Repository: racenis/tram-sdk Branch: main Commit: 23ec831f5229 Files: 3034 Total size: 70.3 MB Directory structure: gitextract_hr2c9kl4/ ├── .gitattributes ├── .gitignore ├── CMakeLists.txt ├── LICENSE ├── README.md ├── data/ │ ├── animations/ │ │ ├── mongus-jump.anim │ │ ├── mongus-run.anim │ │ ├── mongus-sway.anim │ │ ├── mongus-turn-around.anim │ │ ├── mongus-wag-tail.anim │ │ └── mongus-walk.anim │ ├── audio/ │ │ ├── apelsin.ogg │ │ ├── dekpunkta.ogg │ │ ├── derp.ogg │ │ ├── impulse.ogg │ │ ├── miku.ogg │ │ └── step.ogg │ ├── dialogs.dialog │ ├── editor_settings.ini │ ├── entities.entdef │ ├── items.item │ ├── lv.lang │ ├── material.list │ ├── models/ │ │ ├── bingus.dymdl │ │ ├── chamberpot.dymdl │ │ ├── chamberpot2.dymdl │ │ ├── crate.collmdl │ │ ├── crate_ligma.dymdl │ │ ├── crate_plain.dymdl │ │ ├── dev/ │ │ │ ├── button.collmdl │ │ │ ├── button.stmdl │ │ │ ├── light.stmdl │ │ │ ├── plane.dymdl │ │ │ └── sound.stmdl │ │ ├── devukaste.mdmdl │ │ ├── floppa.dymdl │ │ ├── ftft.collmdl │ │ ├── ftft.stmdl │ │ ├── kadbusest.dymdl │ │ ├── metalakaste.dymdl │ │ ├── mongus.dymdl │ │ ├── movs.collmdl │ │ ├── movs.stmdl │ │ ├── plane.dymdl │ │ ├── sphere.dymdl │ │ ├── square10x10.collmdl │ │ ├── square10x10.stmdl │ │ ├── translucent.dymdl │ │ ├── trigger.collmdl │ │ └── trigger.stmdl │ ├── paths/ │ │ └── test.path │ ├── quests.quest │ ├── sprites/ │ │ ├── font_debug.spr │ │ ├── font_headers.spr │ │ ├── font_pixelart.spr │ │ ├── font_symbols.spr │ │ ├── font_text.spr │ │ ├── font_text_bold.spr │ │ ├── font_widgets.spr │ │ └── poland.spr │ └── worldcells/ │ ├── demo_mov.cell │ └── demo_mov.light ├── devtools/ │ ├── codegen.py │ ├── converters/ │ │ ├── cbfg2sprite.py │ │ └── errorgenerator.py │ ├── exporters/ │ │ ├── tram_anim_export.py │ │ ├── tram_collision_export.py │ │ ├── tram_dynamic_obj_export.py │ │ ├── tram_file_export.py │ │ ├── tram_material_import.py │ │ └── tram_static_obj_export.py │ ├── maketool.py │ ├── tbsp/ │ │ ├── engine_libs.cpp │ │ └── main.cpp │ ├── tmap/ │ │ ├── engine_libs.cpp │ │ └── main.cpp │ └── trad/ │ ├── engine_libs.cpp │ ├── main.cpp │ └── main2.cpp ├── docs/ │ ├── cppapi/ │ │ ├── aabb_8cpp.html │ │ ├── aabb_8h.html │ │ ├── aabb_8h_source.html │ │ ├── actions_8h.html │ │ ├── actions_8h_source.html │ │ ├── ai_8cpp.html │ │ ├── ai_8h.html │ │ ├── ai_8h_source.html │ │ ├── animationtable_8cpp.html │ │ ├── animationtable_8h.html │ │ ├── animationtable_8h_source.html │ │ ├── annotated.html │ │ ├── api_8cpp.html │ │ ├── async_8cpp.html │ │ ├── async_8h.html │ │ ├── async_8h_source.html │ │ ├── attributes_8cpp.html │ │ ├── attributes_8h.html │ │ ├── attributes_8h_source.html │ │ ├── audio_2api_8h.html │ │ ├── audio_2api_8h_source.html │ │ ├── audio_2audio_8cpp.html │ │ ├── audio_2audio_8h.html │ │ ├── audio_2audio_8h_source.html │ │ ├── audio_2graph_8cpp.html │ │ ├── audio_2graph_8h.html │ │ ├── audio_2graph_8h_source.html │ │ ├── audio_2sound_8cpp.html │ │ ├── audio_2sound_8h.html │ │ ├── audio_2sound_8h_source.html │ │ ├── buffer_8cpp.html │ │ ├── buffer_8h.html │ │ ├── buffer_8h_source.html │ │ ├── bullet_8cpp.html │ │ ├── bullet_8h.html │ │ ├── bullet_8h_source.html │ │ ├── camera_8cpp.html │ │ ├── camera_8h.html │ │ ├── camera_8h_source.html │ │ ├── character_8cpp.html │ │ ├── character_8h.html │ │ ├── character_8h_source.html │ │ ├── class_animation_component.html │ │ ├── class_audio_component.html │ │ ├── class_controller_component.html │ │ ├── class_f_p_s_controller_component.html │ │ ├── class_light_component.html │ │ ├── class_particle_component.html │ │ ├── class_physics_component.html │ │ ├── class_player_component.html │ │ ├── class_raycast_controller_component.html │ │ ├── class_render_component.html │ │ ├── class_sprite_component.html │ │ ├── class_trigger_component.html │ │ ├── classes.html │ │ ├── classtram_1_1_a_a_b_b_tree-members.html │ │ ├── classtram_1_1_a_a_b_b_tree.html │ │ ├── classtram_1_1_animation_component-members.html │ │ ├── classtram_1_1_animation_component.html │ │ ├── classtram_1_1_audio_1_1_sound-members.html │ │ ├── classtram_1_1_audio_1_1_sound.html │ │ ├── classtram_1_1_audio_1_1_sound_graph-members.html │ │ ├── classtram_1_1_audio_1_1_sound_graph.html │ │ ├── classtram_1_1_audio_component-members.html │ │ ├── classtram_1_1_audio_component.html │ │ ├── classtram_1_1_component-members.html │ │ ├── classtram_1_1_component.html │ │ ├── classtram_1_1_controller_component-members.html │ │ ├── classtram_1_1_controller_component.html │ │ ├── classtram_1_1_crate-members.html │ │ ├── classtram_1_1_crate.html │ │ ├── classtram_1_1_decal_component-members.html │ │ ├── classtram_1_1_decal_component.html │ │ ├── classtram_1_1_decoration-members.html │ │ ├── classtram_1_1_decoration.html │ │ ├── classtram_1_1_decpration.html │ │ ├── classtram_1_1_disk_reader-members.html │ │ ├── classtram_1_1_disk_reader.html │ │ ├── classtram_1_1_disk_writer-members.html │ │ ├── classtram_1_1_disk_writer.html │ │ ├── classtram_1_1_entity-members.html │ │ ├── classtram_1_1_entity.html │ │ ├── classtram_1_1_entity_component-members.html │ │ ├── classtram_1_1_entity_component.html │ │ ├── classtram_1_1_event_listener-members.html │ │ ├── classtram_1_1_event_listener.html │ │ ├── classtram_1_1_ext_1_1_camera_1_1_camera-members.html │ │ ├── classtram_1_1_ext_1_1_camera_1_1_camera.html │ │ ├── classtram_1_1_ext_1_1_camera_1_1_first_person_camera-members.html │ │ ├── classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_breakable-members.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_breakable.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_button-members.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_button.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_debug_shape-members.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_debug_shape.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_debug_text-members.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_debug_text.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_decoration-members.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_decoration.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_door-members.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_door.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_pickup-members.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_pickup.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_rotating-members.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_rotating.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_sound_table-members.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_sound_table.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_train-members.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_train.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_trigger_autosave-members.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_trigger_autosave.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_trigger_hurt-members.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_trigger_hurt.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_trigger_multiple-members.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_trigger_multiple.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_trigger_once-members.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_trigger_once.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_trigger_player_movement-members.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_trigger_player_movement.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_trigger_push-members.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_trigger_push.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_trigger_remove-members.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_trigger_remove.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_trigger_teleport-members.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_trigger_teleport.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_water-members.html │ │ ├── classtram_1_1_ext_1_1_design_1_1_water.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_a_i_package-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_a_i_package.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_animation_state_component-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_animation_state_component.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_animation_table-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_animation_table.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_attribute_info-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_attribute_info.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_breakable-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_breakable.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_button-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_button.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_character-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_character.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_character_class-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_character_class.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_debug_shape-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_debug_shape.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_debug_text-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_debug_text.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_dialog_controller-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_dialog_controller.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_faction-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_faction.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_inventory-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_inventory_manager-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_inventory_manager.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_item_class-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_kitchensink_menu_list-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_kitchensink_menu_list.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_list_dialog-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_list_dialog.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_list_inventory-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_list_inventory.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_list_inventory_manager-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_list_inventory_manager.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_list_trade-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_list_trade.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_pickup-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_pickup.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_quest_entity-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_quest_entity.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_quest_list-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_quest_list.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_sound_table-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_sound_table.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_train-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_train.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_trigger_autosave-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_trigger_autosave.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_trigger_hurt-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_trigger_hurt.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_trigger_multiple-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_trigger_multiple.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_trigger_once-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_trigger_once.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_trigger_player_movement-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_trigger_player_movement.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_trigger_push-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_trigger_push.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_trigger_remove-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_trigger_remove.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_trigger_teleport-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_trigger_teleport.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_water-members.html │ │ ├── classtram_1_1_ext_1_1_kitchensink_1_1_water.html │ │ ├── classtram_1_1_ext_1_1_menu_1_1_console-members.html │ │ ├── classtram_1_1_ext_1_1_menu_1_1_console.html │ │ ├── classtram_1_1_ext_1_1_menu_1_1_debug_menu-members.html │ │ ├── classtram_1_1_ext_1_1_menu_1_1_debug_menu.html │ │ ├── classtram_1_1_ext_1_1_menu_1_1_entity_picker-members.html │ │ ├── classtram_1_1_ext_1_1_menu_1_1_entity_picker.html │ │ ├── classtram_1_1_ext_1_1_menu_1_1_entity_properties-members.html │ │ ├── classtram_1_1_ext_1_1_menu_1_1_entity_properties.html │ │ ├── classtram_1_1_ext_1_1_menu_1_1_event_emit-members.html │ │ ├── classtram_1_1_ext_1_1_menu_1_1_event_emit.html │ │ ├── classtram_1_1_ext_1_1_menu_1_1_intercept_menu-members.html │ │ ├── classtram_1_1_ext_1_1_menu_1_1_intercept_menu.html │ │ ├── classtram_1_1_ext_1_1_menu_1_1_list_selection-members.html │ │ ├── classtram_1_1_ext_1_1_menu_1_1_list_selection.html │ │ ├── classtram_1_1_ext_1_1_menu_1_1_menu-members.html │ │ ├── classtram_1_1_ext_1_1_menu_1_1_menu.html │ │ ├── classtram_1_1_ext_1_1_menu_1_1_message_send-members.html │ │ ├── classtram_1_1_ext_1_1_menu_1_1_message_send.html │ │ ├── classtram_1_1_ext_1_1_menu_1_1_options-members.html │ │ ├── classtram_1_1_ext_1_1_menu_1_1_options.html │ │ ├── classtram_1_1_ext_1_1_menu_1_1_settings_menu-members.html │ │ ├── classtram_1_1_ext_1_1_menu_1_1_settings_menu.html │ │ ├── classtram_1_1_ext_1_1_menu_1_1_signal_menu-members.html │ │ ├── classtram_1_1_ext_1_1_menu_1_1_signal_menu.html │ │ ├── classtram_1_1_ext_1_1_menu_1_1_statistics_menu-members.html │ │ ├── classtram_1_1_ext_1_1_menu_1_1_statistics_menu.html │ │ ├── classtram_1_1_ext_1_1_menu_1_1_system_menu-members.html │ │ ├── classtram_1_1_ext_1_1_menu_1_1_system_menu.html │ │ ├── classtram_1_1_ext_1_1_menu_1_1_world_cell_properties-members.html │ │ ├── classtram_1_1_ext_1_1_menu_1_1_world_cell_properties.html │ │ ├── classtram_1_1_ext_1_1_scripting_1_1_lua_1_1_lua-members.html │ │ ├── classtram_1_1_ext_1_1_scripting_1_1_lua_1_1_lua.html │ │ ├── classtram_1_1_f_p_s_controller_component-members.html │ │ ├── classtram_1_1_f_p_s_controller_component.html │ │ ├── classtram_1_1_file-members.html │ │ ├── classtram_1_1_file.html │ │ ├── classtram_1_1_file_reader-members.html │ │ ├── classtram_1_1_file_reader.html │ │ ├── classtram_1_1_file_reader_parser-members.html │ │ ├── classtram_1_1_file_reader_parser.html │ │ ├── classtram_1_1_file_writer-members.html │ │ ├── classtram_1_1_file_writer.html │ │ ├── classtram_1_1_file_writer_parser-members.html │ │ ├── classtram_1_1_file_writer_parser.html │ │ ├── classtram_1_1_graph-members.html │ │ ├── classtram_1_1_graph.html │ │ ├── classtram_1_1_hashmap-members.html │ │ ├── classtram_1_1_hashmap.html │ │ ├── classtram_1_1_lamp-members.html │ │ ├── classtram_1_1_lamp.html │ │ ├── classtram_1_1_light-members.html │ │ ├── classtram_1_1_light.html │ │ ├── classtram_1_1_light_component-members.html │ │ ├── classtram_1_1_light_component.html │ │ ├── classtram_1_1_loader-members.html │ │ ├── classtram_1_1_loader.html │ │ ├── classtram_1_1_marker-members.html │ │ ├── classtram_1_1_marker.html │ │ ├── classtram_1_1_navmesh-members.html │ │ ├── classtram_1_1_navmesh.html │ │ ├── classtram_1_1_octree-members.html │ │ ├── classtram_1_1_octree.html │ │ ├── classtram_1_1_particle_component-members.html │ │ ├── classtram_1_1_particle_component.html │ │ ├── classtram_1_1_path-members.html │ │ ├── classtram_1_1_path.html │ │ ├── classtram_1_1_path_follower-members.html │ │ ├── classtram_1_1_path_follower.html │ │ ├── classtram_1_1_physics_1_1_a_p_i_1_1_callback_motion_state-members.html │ │ ├── classtram_1_1_physics_1_1_a_p_i_1_1_callback_motion_state.html │ │ ├── classtram_1_1_physics_1_1_a_p_i_1_1_physics_debug_draw-members.html │ │ ├── classtram_1_1_physics_1_1_a_p_i_1_1_physics_debug_draw.html │ │ ├── classtram_1_1_physics_1_1_arm_motion_state-members.html │ │ ├── classtram_1_1_physics_1_1_arm_motion_state.html │ │ ├── classtram_1_1_physics_1_1_collision_model-members.html │ │ ├── classtram_1_1_physics_1_1_collision_model.html │ │ ├── classtram_1_1_physics_1_1_ent_motion_state-members.html │ │ ├── classtram_1_1_physics_1_1_ent_motion_state.html │ │ ├── classtram_1_1_physics_1_1_path_action-members.html │ │ ├── classtram_1_1_physics_1_1_path_action.html │ │ ├── classtram_1_1_physics_1_1_physics_debug_draw-members.html │ │ ├── classtram_1_1_physics_1_1_physics_debug_draw.html │ │ ├── classtram_1_1_physics_component-members.html │ │ ├── classtram_1_1_physics_component.html │ │ ├── classtram_1_1_platform_1_1_file_reader.html │ │ ├── classtram_1_1_platform_1_1_file_writer.html │ │ ├── classtram_1_1_player-members.html │ │ ├── classtram_1_1_player.html │ │ ├── classtram_1_1_player_component-members.html │ │ ├── classtram_1_1_player_component.html │ │ ├── classtram_1_1_pool-members.html │ │ ├── classtram_1_1_pool.html │ │ ├── classtram_1_1_pool_proxy-members.html │ │ ├── classtram_1_1_pool_proxy.html │ │ ├── classtram_1_1_pool_ptr-members.html │ │ ├── classtram_1_1_pool_ptr.html │ │ ├── classtram_1_1_queue-members.html │ │ ├── classtram_1_1_queue.html │ │ ├── classtram_1_1_raycast_controller_component-members.html │ │ ├── classtram_1_1_raycast_controller_component.html │ │ ├── classtram_1_1_render_1_1_a_p_i_1_1_fragment_shader-members.html │ │ ├── classtram_1_1_render_1_1_a_p_i_1_1_fragment_shader.html │ │ ├── classtram_1_1_render_1_1_a_p_i_1_1_linked_shader-members.html │ │ ├── classtram_1_1_render_1_1_a_p_i_1_1_linked_shader.html │ │ ├── classtram_1_1_render_1_1_a_p_i_1_1_shader_buffer.html │ │ ├── classtram_1_1_render_1_1_a_p_i_1_1_vertex_shader-members.html │ │ ├── classtram_1_1_render_1_1_a_p_i_1_1_vertex_shader.html │ │ ├── classtram_1_1_render_1_1_animation-members.html │ │ ├── classtram_1_1_render_1_1_animation.html │ │ ├── classtram_1_1_render_1_1_light_graph-members.html │ │ ├── classtram_1_1_render_1_1_light_graph.html │ │ ├── classtram_1_1_render_1_1_material-members.html │ │ ├── classtram_1_1_render_1_1_material.html │ │ ├── classtram_1_1_render_1_1_model-members.html │ │ ├── classtram_1_1_render_1_1_model.html │ │ ├── classtram_1_1_render_1_1_open_g_l_1_1_shader_buffer.html │ │ ├── classtram_1_1_render_1_1_sound_graph.html │ │ ├── classtram_1_1_render_1_1_sprite-members.html │ │ ├── classtram_1_1_render_1_1_sprite.html │ │ ├── classtram_1_1_render_component-members.html │ │ ├── classtram_1_1_render_component.html │ │ ├── classtram_1_1_resource-members.html │ │ ├── classtram_1_1_resource.html │ │ ├── classtram_1_1_resource_proxy-members.html │ │ ├── classtram_1_1_resource_proxy.html │ │ ├── classtram_1_1_script_1_1_interface-members.html │ │ ├── classtram_1_1_script_1_1_interface.html │ │ ├── classtram_1_1_scriptable-members.html │ │ ├── classtram_1_1_scriptable.html │ │ ├── classtram_1_1_serialized_field_array-members.html │ │ ├── classtram_1_1_serialized_field_array.html │ │ ├── classtram_1_1_signal_table-members.html │ │ ├── classtram_1_1_signal_table.html │ │ ├── classtram_1_1_sound-members.html │ │ ├── classtram_1_1_sound.html │ │ ├── classtram_1_1_spinlock-members.html │ │ ├── classtram_1_1_spinlock.html │ │ ├── classtram_1_1_sprite_component-members.html │ │ ├── classtram_1_1_sprite_component.html │ │ ├── classtram_1_1_stack-members.html │ │ ├── classtram_1_1_stack.html │ │ ├── classtram_1_1_stack_pool-members.html │ │ ├── classtram_1_1_stack_pool.html │ │ ├── classtram_1_1_static_world_object-members.html │ │ ├── classtram_1_1_static_world_object.html │ │ ├── classtram_1_1_template_component-members.html │ │ ├── classtram_1_1_template_component.html │ │ ├── classtram_1_1_text_reader_parser-members.html │ │ ├── classtram_1_1_text_reader_parser.html │ │ ├── classtram_1_1_text_writer_parser-members.html │ │ ├── classtram_1_1_text_writer_parser.html │ │ ├── classtram_1_1_transition-members.html │ │ ├── classtram_1_1_transition.html │ │ ├── classtram_1_1_trigger-members.html │ │ ├── classtram_1_1_trigger.html │ │ ├── classtram_1_1_trigger_component-members.html │ │ ├── classtram_1_1_trigger_component.html │ │ ├── classtram_1_1_value-members.html │ │ ├── classtram_1_1_value.html │ │ ├── classtram_1_1_value_array-members.html │ │ ├── classtram_1_1_value_array.html │ │ ├── classtram_1_1_value_ptr-members.html │ │ ├── classtram_1_1_value_ptr.html │ │ ├── classtram_1_1_world_cell-members.html │ │ ├── classtram_1_1_world_cell.html │ │ ├── cli_8cpp.html │ │ ├── cli_8h.html │ │ ├── cli_8h_source.html │ │ ├── collisionmodel_8cpp.html │ │ ├── collisionmodel_8h.html │ │ ├── collisionmodel_8h_source.html │ │ ├── collisionshape_8h.html │ │ ├── collisionshape_8h_source.html │ │ ├── components_2animation_8cpp.html │ │ ├── components_2animation_8h.html │ │ ├── components_2animation_8h_source.html │ │ ├── components_2audio_8cpp.html │ │ ├── components_2audio_8h.html │ │ ├── components_2audio_8h_source.html │ │ ├── components_2light_8cpp.html │ │ ├── components_2light_8h.html │ │ ├── components_2light_8h_source.html │ │ ├── components_2physics_8cpp.html │ │ ├── components_2physics_8h.html │ │ ├── components_2physics_8h_source.html │ │ ├── components_2player_8cpp.html │ │ ├── components_2player_8h.html │ │ ├── components_2player_8h_source.html │ │ ├── components_2render_8cpp.html │ │ ├── components_2render_8h.html │ │ ├── components_2render_8h_source.html │ │ ├── components_2sprite_8cpp.html │ │ ├── components_2sprite_8h.html │ │ ├── components_2sprite_8h_source.html │ │ ├── components_2trigger_8cpp.html │ │ ├── components_2trigger_8h.html │ │ ├── components_2trigger_8h_source.html │ │ ├── config_8h.html │ │ ├── config_8h_source.html │ │ ├── controller_8cpp.html │ │ ├── controller_8h.html │ │ ├── controller_8h_source.html │ │ ├── core_8cpp.html │ │ ├── core_8h.html │ │ ├── core_8h_source.html │ │ ├── crate_8cpp.html │ │ ├── crate_8h.html │ │ ├── crate_8h_source.html │ │ ├── debug_8cpp.html │ │ ├── debug_8h.html │ │ ├── debug_8h_source.html │ │ ├── debugdrawer_8h.html │ │ ├── debugdrawer_8h_source.html │ │ ├── decal_8cpp.html │ │ ├── decal_8h.html │ │ ├── decal_8h_source.html │ │ ├── decoration_8cpp.html │ │ ├── decoration_8h.html │ │ ├── decoration_8h_source.html │ │ ├── definitions_8h.html │ │ ├── definitions_8h_source.html │ │ ├── deprecated.html │ │ ├── design_8cpp.html │ │ ├── design_8h.html │ │ ├── design_8h_source.html │ │ ├── dialog_8cpp.html │ │ ├── dialog_8h.html │ │ ├── dialog_8h_source.html │ │ ├── dir_01fd219969118eefb63f711194f953b6.html │ │ ├── dir_0235421c6a8b7ca6f3b3ad3f290c4a8b.html │ │ ├── dir_044994f9a1f49429ab82387beaf2fc8f.html │ │ ├── dir_04c6f28c877b0abd0b517b09d2cbe678.html │ │ ├── dir_25bfe7637bda9b4c8dc6e22485fc785f.html │ │ ├── dir_2dc1ac304fc37da9cbf93f53bf382100.html │ │ ├── dir_45a0510223f8d95df257ae4513f5dcf2.html │ │ ├── dir_486a74d7b0f57b9c55d744bdbb092905.html │ │ ├── dir_4c096b243504cf129e41270299bfcecc.html │ │ ├── dir_6785e21a8529b80a9bb3fbf206311f99.html │ │ ├── dir_690097dbf5541613f26178bc15166d11.html │ │ ├── dir_713f53f5525a4ba6a1756f0c27ee7b0f.html │ │ ├── dir_725e1c32b4e378f03d60abea9fea9d5a.html │ │ ├── dir_72f27f6e39bba3da07977890c5e9396b.html │ │ ├── dir_7dd791b49cea2de8a9731625e7ba4332.html │ │ ├── dir_81a2138add035487371796f7e3635d7f.html │ │ ├── dir_8257c9d1ec427d0353bb282f2bab11cb.html │ │ ├── dir_83c81f46d4e2adaa24ca143fb33abeaa.html │ │ ├── dir_861a72433926be42e693eaf9e590afa7.html │ │ ├── dir_87e4469353846ab42ac7effb8e231a8f.html │ │ ├── dir_bda26cb40acfb9f38f401dec877209b8.html │ │ ├── dir_c902ca23ecd29d6b4b325f81f7f23ad0.html │ │ ├── dir_c91d79491a9631c76ad80e8d8bf0efb6.html │ │ ├── dir_cc4878aa85695f89f2ccbc192aae421c.html │ │ ├── dir_d6dfb888f5e5a248d906bac34bc576a1.html │ │ ├── dir_e956729b6428f6b8620d3e268ab44978.html │ │ ├── direct3d_2renderer_8cpp.html │ │ ├── direct3d_8h.html │ │ ├── direct3d_8h_source.html │ │ ├── doxygen.css │ │ ├── drawlist_8cpp.html │ │ ├── drawlist_8h.html │ │ ├── drawlist_8h_source.html │ │ ├── dynsections.js │ │ ├── entities_2light_8cpp.html │ │ ├── entities_2light_8h.html │ │ ├── entities_2light_8h_source.html │ │ ├── entities_2player_8cpp.html │ │ ├── entities_2player_8h.html │ │ ├── entities_2player_8h_source.html │ │ ├── entities_2script_8cpp.html │ │ ├── entities_2script_8h.html │ │ ├── entities_2script_8h_source.html │ │ ├── entities_2sound_8cpp.html │ │ ├── entities_2sound_8h.html │ │ ├── entities_2sound_8h_source.html │ │ ├── entities_2trigger_8cpp.html │ │ ├── entities_2trigger_8h.html │ │ ├── entities_2trigger_8h_source.html │ │ ├── entities_8cpp.html │ │ ├── entities_8h.html │ │ ├── entities_8h_source.html │ │ ├── entity_8cpp.html │ │ ├── entity_8h.html │ │ ├── entity_8h_source.html │ │ ├── entitycomponent_8cpp.html │ │ ├── entitycomponent_8h.html │ │ ├── entitycomponent_8h_source.html │ │ ├── error_8cpp.html │ │ ├── error_8h.html │ │ ├── error_8h_source.html │ │ ├── event_8cpp.html │ │ ├── event_8h.html │ │ ├── event_8h_source.html │ │ ├── extensions_2menu_2system_8cpp.html │ │ ├── extensions_2menu_2system_8h.html │ │ ├── extensions_2menu_2system_8h_source.html │ │ ├── files.html │ │ ├── firstperson_8cpp.html │ │ ├── firstperson_8h.html │ │ ├── firstperson_8h_source.html │ │ ├── following_8cpp.html │ │ ├── following_8h.html │ │ ├── following_8h_source.html │ │ ├── fpscamera_8cpp.html │ │ ├── fpscamera_8h.html │ │ ├── fpscamera_8h_source.html │ │ ├── framework_2file_8cpp.html │ │ ├── framework_2file_8h.html │ │ ├── framework_2file_8h_source.html │ │ ├── framework_2graph_8cpp.html │ │ ├── framework_2graph_8h.html │ │ ├── framework_2graph_8h_source.html │ │ ├── framework_2script_8cpp.html │ │ ├── framework_2script_8h.html │ │ ├── framework_2script_8h_source.html │ │ ├── framework_2system_8cpp.html │ │ ├── framework_2system_8h.html │ │ ├── framework_2system_8h_source.html │ │ ├── functions.html │ │ ├── functions_b.html │ │ ├── functions_c.html │ │ ├── functions_d.html │ │ ├── functions_e.html │ │ ├── functions_enum.html │ │ ├── functions_eval.html │ │ ├── functions_f.html │ │ ├── functions_func.html │ │ ├── functions_func_b.html │ │ ├── functions_func_c.html │ │ ├── functions_func_d.html │ │ ├── functions_func_e.html │ │ ├── functions_func_f.html │ │ ├── functions_func_g.html │ │ ├── functions_func_h.html │ │ ├── functions_func_i.html │ │ ├── functions_func_j.html │ │ ├── functions_func_l.html │ │ ├── functions_func_m.html │ │ ├── functions_func_n.html │ │ ├── functions_func_o.html │ │ ├── functions_func_p.html │ │ ├── functions_func_q.html │ │ ├── functions_func_r.html │ │ ├── functions_func_s.html │ │ ├── functions_func_t.html │ │ ├── functions_func_u.html │ │ ├── functions_func_v.html │ │ ├── functions_func_w.html │ │ ├── functions_func_y.html │ │ ├── functions_func_~.html │ │ ├── functions_g.html │ │ ├── functions_h.html │ │ ├── functions_i.html │ │ ├── functions_j.html │ │ ├── functions_k.html │ │ ├── functions_l.html │ │ ├── functions_m.html │ │ ├── functions_n.html │ │ ├── functions_o.html │ │ ├── functions_p.html │ │ ├── functions_prop.html │ │ ├── functions_q.html │ │ ├── functions_r.html │ │ ├── functions_rela.html │ │ ├── functions_s.html │ │ ├── functions_t.html │ │ ├── functions_type.html │ │ ├── functions_u.html │ │ ├── functions_v.html │ │ ├── functions_vars.html │ │ ├── functions_vars_b.html │ │ ├── functions_vars_c.html │ │ ├── functions_vars_d.html │ │ ├── functions_vars_e.html │ │ ├── functions_vars_f.html │ │ ├── functions_vars_g.html │ │ ├── functions_vars_h.html │ │ ├── functions_vars_i.html │ │ ├── functions_vars_j.html │ │ ├── functions_vars_k.html │ │ ├── functions_vars_l.html │ │ ├── functions_vars_m.html │ │ ├── functions_vars_n.html │ │ ├── functions_vars_o.html │ │ ├── functions_vars_p.html │ │ ├── functions_vars_q.html │ │ ├── functions_vars_r.html │ │ ├── functions_vars_s.html │ │ ├── functions_vars_t.html │ │ ├── functions_vars_u.html │ │ ├── functions_vars_v.html │ │ ├── functions_vars_w.html │ │ ├── functions_vars_x.html │ │ ├── functions_vars_y.html │ │ ├── functions_w.html │ │ ├── functions_x.html │ │ ├── functions_y.html │ │ ├── functions_~.html │ │ ├── glfw_8cpp.html │ │ ├── globals.html │ │ ├── globals_defs.html │ │ ├── globals_func.html │ │ ├── globals_vars.html │ │ ├── graph_8cpp.html │ │ ├── graph_8h.html │ │ ├── graph_8h_source.html │ │ ├── gui_8cpp.html │ │ ├── gui_8h.html │ │ ├── gui_8h_source.html │ │ ├── hashmap_8h.html │ │ ├── hashmap_8h_source.html │ │ ├── hierarchy.html │ │ ├── image_8cpp.html │ │ ├── image_8h.html │ │ ├── image_8h_source.html │ │ ├── index.html │ │ ├── info_8dox.html │ │ ├── inventory_8cpp.html │ │ ├── inventory_8h.html │ │ ├── inventory_8h_source.html │ │ ├── jquery.js │ │ ├── kitchensink_2menu_8cpp.html │ │ ├── kitchensink_2menu_8h.html │ │ ├── kitchensink_2menu_8h_source.html │ │ ├── kitchensink_8cpp.html │ │ ├── kitchensink_8h.html │ │ ├── kitchensink_8h_source.html │ │ ├── lamp_8cpp.html │ │ ├── lamp_8h.html │ │ ├── lamp_8h_source.html │ │ ├── language_8cpp.html │ │ ├── language_8h.html │ │ ├── language_8h_source.html │ │ ├── light_8cpp.html │ │ ├── light_8h.html │ │ ├── light_8h_source.html │ │ ├── loader_8cpp.html │ │ ├── loader_8h.html │ │ ├── loader_8h_source.html │ │ ├── logging_8cpp.html │ │ ├── logging_8h.html │ │ ├── logging_8h_source.html │ │ ├── lua_8cpp.html │ │ ├── lua_8h.html │ │ ├── lua_8h_source.html │ │ ├── macros_8h.html │ │ ├── macros_8h_source.html │ │ ├── main_8cpp.html │ │ ├── marker_8cpp.html │ │ ├── marker_8h.html │ │ ├── marker_8h_source.html │ │ ├── material_8cpp.html │ │ ├── material_8h.html │ │ ├── material_8h_source.html │ │ ├── math_8cpp.html │ │ ├── math_8h.html │ │ ├── math_8h_source.html │ │ ├── menu.js │ │ ├── menu_2menu_8cpp.html │ │ ├── menu_2menu_8h.html │ │ ├── menu_2menu_8h_source.html │ │ ├── menu_8cpp.html │ │ ├── menu_8h.html │ │ ├── menu_8h_source.html │ │ ├── menudata.js │ │ ├── message_8cpp.html │ │ ├── message_8h.html │ │ ├── message_8h_source.html │ │ ├── model_8cpp.html │ │ ├── model_8h.html │ │ ├── model_8h_source.html │ │ ├── motionstates_8h.html │ │ ├── motionstates_8h_source.html │ │ ├── namespacemembers.html │ │ ├── namespacemembers_b.html │ │ ├── namespacemembers_c.html │ │ ├── namespacemembers_d.html │ │ ├── namespacemembers_e.html │ │ ├── namespacemembers_enum.html │ │ ├── namespacemembers_eval.html │ │ ├── namespacemembers_eval_b.html │ │ ├── namespacemembers_eval_c.html │ │ ├── namespacemembers_eval_d.html │ │ ├── namespacemembers_eval_e.html │ │ ├── namespacemembers_eval_f.html │ │ ├── namespacemembers_eval_g.html │ │ ├── namespacemembers_eval_i.html │ │ ├── namespacemembers_eval_k.html │ │ ├── namespacemembers_eval_l.html │ │ ├── namespacemembers_eval_m.html │ │ ├── namespacemembers_eval_n.html │ │ ├── namespacemembers_eval_p.html │ │ ├── namespacemembers_eval_q.html │ │ ├── namespacemembers_eval_r.html │ │ ├── namespacemembers_eval_s.html │ │ ├── namespacemembers_eval_t.html │ │ ├── namespacemembers_eval_u.html │ │ ├── namespacemembers_eval_v.html │ │ ├── namespacemembers_eval_w.html │ │ ├── namespacemembers_eval_y.html │ │ ├── namespacemembers_f.html │ │ ├── namespacemembers_func.html │ │ ├── namespacemembers_func_b.html │ │ ├── namespacemembers_func_c.html │ │ ├── namespacemembers_func_d.html │ │ ├── namespacemembers_func_e.html │ │ ├── namespacemembers_func_f.html │ │ ├── namespacemembers_func_g.html │ │ ├── namespacemembers_func_h.html │ │ ├── namespacemembers_func_i.html │ │ ├── namespacemembers_func_k.html │ │ ├── namespacemembers_func_l.html │ │ ├── namespacemembers_func_m.html │ │ ├── namespacemembers_func_n.html │ │ ├── namespacemembers_func_p.html │ │ ├── namespacemembers_func_q.html │ │ ├── namespacemembers_func_r.html │ │ ├── namespacemembers_func_s.html │ │ ├── namespacemembers_func_t.html │ │ ├── namespacemembers_func_u.html │ │ ├── namespacemembers_func_v.html │ │ ├── namespacemembers_func_w.html │ │ ├── namespacemembers_func_x.html │ │ ├── namespacemembers_func_y.html │ │ ├── namespacemembers_g.html │ │ ├── namespacemembers_h.html │ │ ├── namespacemembers_i.html │ │ ├── namespacemembers_k.html │ │ ├── namespacemembers_l.html │ │ ├── namespacemembers_m.html │ │ ├── namespacemembers_n.html │ │ ├── namespacemembers_o.html │ │ ├── namespacemembers_p.html │ │ ├── namespacemembers_q.html │ │ ├── namespacemembers_r.html │ │ ├── namespacemembers_s.html │ │ ├── namespacemembers_t.html │ │ ├── namespacemembers_type.html │ │ ├── namespacemembers_u.html │ │ ├── namespacemembers_v.html │ │ ├── namespacemembers_vars.html │ │ ├── namespacemembers_w.html │ │ ├── namespacemembers_x.html │ │ ├── namespacemembers_y.html │ │ ├── namespaces.html │ │ ├── namespacetram.html │ │ ├── namespacetram_1_1_async.html │ │ ├── namespacetram_1_1_audio.html │ │ ├── namespacetram_1_1_audio_1_1_a_p_i.html │ │ ├── namespacetram_1_1_audio_1_1_open_a_l.html │ │ ├── namespacetram_1_1_audio_1_1_spatial.html │ │ ├── namespacetram_1_1_core.html │ │ ├── namespacetram_1_1_ext.html │ │ ├── namespacetram_1_1_ext_1_1_camera.html │ │ ├── namespacetram_1_1_ext_1_1_design.html │ │ ├── namespacetram_1_1_ext_1_1_kitchensink.html │ │ ├── namespacetram_1_1_ext_1_1_menu.html │ │ ├── namespacetram_1_1_ext_1_1_menu_1_1_menu.html │ │ ├── namespacetram_1_1_ext_1_1_scripting.html │ │ ├── namespacetram_1_1_ext_1_1_scripting_1_1_lua.html │ │ ├── namespacetram_1_1_g_u_i.html │ │ ├── namespacetram_1_1_language.html │ │ ├── namespacetram_1_1_loader.html │ │ ├── namespacetram_1_1_physics.html │ │ ├── namespacetram_1_1_physics_1_1_a_p_i.html │ │ ├── namespacetram_1_1_physics_1_1_bullet.html │ │ ├── namespacetram_1_1_platform.html │ │ ├── namespacetram_1_1_platform_1_1_input.html │ │ ├── namespacetram_1_1_platform_1_1_window.html │ │ ├── namespacetram_1_1_render.html │ │ ├── namespacetram_1_1_render_1_1_a_a_b_b.html │ │ ├── namespacetram_1_1_render_1_1_a_p_i.html │ │ ├── namespacetram_1_1_render_1_1_light_tree.html │ │ ├── namespacetram_1_1_render_1_1_open_g_l.html │ │ ├── namespacetram_1_1_render_1_1_scene_tree.html │ │ ├── namespacetram_1_1_script.html │ │ ├── namespacetram_1_1_scriptable_type.html │ │ ├── namespacetram_1_1_settings.html │ │ ├── namespacetram_1_1_stats.html │ │ ├── namespacetram_1_1_system.html │ │ ├── namespacetram_1_1_u_i.html │ │ ├── namespacetram_1_1implementation.html │ │ ├── navigation_8cpp.html │ │ ├── navigation_8h.html │ │ ├── navigation_8h_source.html │ │ ├── navmesh_8cpp.html │ │ ├── navmesh_8h.html │ │ ├── navmesh_8h_source.html │ │ ├── octree_8h.html │ │ ├── octree_8h_source.html │ │ ├── openal_8cpp.html │ │ ├── openal_8h.html │ │ ├── openal_8h_source.html │ │ ├── opengl_2error_8cpp.html │ │ ├── opengl_2material_8cpp.html │ │ ├── opengl_2material_8h.html │ │ ├── opengl_2material_8h_source.html │ │ ├── opengl_2renderer_8cpp.html │ │ ├── opengl_2renderer_8h.html │ │ ├── opengl_2renderer_8h_source.html │ │ ├── other_8cpp.html │ │ ├── other_8h.html │ │ ├── other_8h_source.html │ │ ├── output_8cpp.html │ │ ├── output_8h.html │ │ ├── output_8h_source.html │ │ ├── pages.html │ │ ├── particle_8cpp.html │ │ ├── particle_8h.html │ │ ├── particle_8h_source.html │ │ ├── path_8cpp.html │ │ ├── path_8h.html │ │ ├── path_8h_source.html │ │ ├── pathtracer_8cpp.html │ │ ├── pathtracer_8h.html │ │ ├── pathtracer_8h_source.html │ │ ├── physics_2api_8h.html │ │ ├── physics_2api_8h_source.html │ │ ├── physics_2physics_8cpp.html │ │ ├── physics_2physics_8h.html │ │ ├── physics_2physics_8h_source.html │ │ ├── platform_2api_8h.html │ │ ├── platform_2api_8h_source.html │ │ ├── platform_2file_8cpp.html │ │ ├── platform_2file_8h.html │ │ ├── platform_2file_8h_source.html │ │ ├── platform_8h.html │ │ ├── platform_8h_source.html │ │ ├── pool_8h.html │ │ ├── pool_8h_source.html │ │ ├── probe_8cpp.html │ │ ├── probe_8h.html │ │ ├── probe_8h_source.html │ │ ├── query_8h.html │ │ ├── query_8h_source.html │ │ ├── quest_8cpp.html │ │ ├── quest_8h.html │ │ ├── quest_8h_source.html │ │ ├── queue_8h.html │ │ ├── queue_8h_source.html │ │ ├── render_2aabb_8h.html │ │ ├── render_2aabb_8h_source.html │ │ ├── render_2animation_8cpp.html │ │ ├── render_2animation_8h.html │ │ ├── render_2animation_8h_source.html │ │ ├── render_2api_8h.html │ │ ├── render_2api_8h_source.html │ │ ├── render_2light_8cpp.html │ │ ├── render_2light_8h.html │ │ ├── render_2light_8h_source.html │ │ ├── render_2opengl_2api_8h.html │ │ ├── render_2opengl_2api_8h_source.html │ │ ├── render_2opengl_2light_8cpp.html │ │ ├── render_2opengl_2light_8h.html │ │ ├── render_2opengl_2light_8h_source.html │ │ ├── render_2opengl_2sprite_8cpp.html │ │ ├── render_2opengl_2sprite_8h.html │ │ ├── render_2opengl_2sprite_8h_source.html │ │ ├── render_2render_8cpp.html │ │ ├── render_2render_8h.html │ │ ├── render_2render_8h_source.html │ │ ├── render_2sprite_8cpp.html │ │ ├── render_2sprite_8h.html │ │ ├── render_2sprite_8h_source.html │ │ ├── renderer_8cpp.html │ │ ├── renderer_8h.html │ │ ├── renderer_8h_source.html │ │ ├── resource_8h.html │ │ ├── resource_8h_source.html │ │ ├── scene_8cpp.html │ │ ├── scene_8h.html │ │ ├── scene_8h_source.html │ │ ├── script_8cpp.html │ │ ├── script_8h.html │ │ ├── script_8h_source.html │ │ ├── sdl_8cpp.html │ │ ├── search/ │ │ │ ├── all_0.html │ │ │ ├── all_0.js │ │ │ ├── all_1.html │ │ │ ├── all_1.js │ │ │ ├── all_10.html │ │ │ ├── all_10.js │ │ │ ├── all_11.html │ │ │ ├── all_11.js │ │ │ ├── all_12.html │ │ │ ├── all_12.js │ │ │ ├── all_13.html │ │ │ ├── all_13.js │ │ │ ├── all_14.html │ │ │ ├── all_14.js │ │ │ ├── all_15.html │ │ │ ├── all_15.js │ │ │ ├── all_16.html │ │ │ ├── all_16.js │ │ │ ├── all_17.html │ │ │ ├── all_17.js │ │ │ ├── all_18.html │ │ │ ├── all_18.js │ │ │ ├── all_19.html │ │ │ ├── all_19.js │ │ │ ├── all_1a.html │ │ │ ├── all_1a.js │ │ │ ├── all_2.html │ │ │ ├── all_2.js │ │ │ ├── all_3.html │ │ │ ├── all_3.js │ │ │ ├── all_4.html │ │ │ ├── all_4.js │ │ │ ├── all_5.html │ │ │ ├── all_5.js │ │ │ ├── all_6.html │ │ │ ├── all_6.js │ │ │ ├── all_7.html │ │ │ ├── all_7.js │ │ │ ├── all_8.html │ │ │ ├── all_8.js │ │ │ ├── all_9.html │ │ │ ├── all_9.js │ │ │ ├── all_a.html │ │ │ ├── all_a.js │ │ │ ├── all_b.html │ │ │ ├── all_b.js │ │ │ ├── all_c.html │ │ │ ├── all_c.js │ │ │ ├── all_d.html │ │ │ ├── all_d.js │ │ │ ├── all_e.html │ │ │ ├── all_e.js │ │ │ ├── all_f.html │ │ │ ├── all_f.js │ │ │ ├── classes_0.html │ │ │ ├── classes_0.js │ │ │ ├── classes_1.html │ │ │ ├── classes_1.js │ │ │ ├── classes_10.html │ │ │ ├── classes_10.js │ │ │ ├── classes_11.html │ │ │ ├── classes_11.js │ │ │ ├── classes_12.html │ │ │ ├── classes_12.js │ │ │ ├── classes_13.html │ │ │ ├── classes_13.js │ │ │ ├── classes_14.html │ │ │ ├── classes_14.js │ │ │ ├── classes_15.html │ │ │ ├── classes_15.js │ │ │ ├── classes_16.html │ │ │ ├── classes_16.js │ │ │ ├── classes_2.html │ │ │ ├── classes_2.js │ │ │ ├── classes_3.html │ │ │ ├── classes_3.js │ │ │ ├── classes_4.html │ │ │ ├── classes_4.js │ │ │ ├── classes_5.html │ │ │ ├── classes_5.js │ │ │ ├── classes_6.html │ │ │ ├── classes_6.js │ │ │ ├── classes_7.html │ │ │ ├── classes_7.js │ │ │ ├── classes_8.html │ │ │ ├── classes_8.js │ │ │ ├── classes_9.html │ │ │ ├── classes_9.js │ │ │ ├── classes_a.html │ │ │ ├── classes_a.js │ │ │ ├── classes_b.html │ │ │ ├── classes_b.js │ │ │ ├── classes_c.html │ │ │ ├── classes_c.js │ │ │ ├── classes_d.html │ │ │ ├── classes_d.js │ │ │ ├── classes_e.html │ │ │ ├── classes_e.js │ │ │ ├── classes_f.html │ │ │ ├── classes_f.js │ │ │ ├── defines_0.html │ │ │ ├── defines_0.js │ │ │ ├── defines_1.html │ │ │ ├── defines_1.js │ │ │ ├── defines_2.html │ │ │ ├── defines_2.js │ │ │ ├── defines_3.html │ │ │ ├── defines_3.js │ │ │ ├── defines_4.html │ │ │ ├── defines_4.js │ │ │ ├── defines_5.html │ │ │ ├── defines_5.js │ │ │ ├── enums_0.html │ │ │ ├── enums_0.js │ │ │ ├── enums_1.html │ │ │ ├── enums_1.js │ │ │ ├── enums_10.html │ │ │ ├── enums_10.js │ │ │ ├── enums_11.html │ │ │ ├── enums_11.js │ │ │ ├── enums_2.html │ │ │ ├── enums_2.js │ │ │ ├── enums_3.html │ │ │ ├── enums_3.js │ │ │ ├── enums_4.html │ │ │ ├── enums_4.js │ │ │ ├── enums_5.html │ │ │ ├── enums_5.js │ │ │ ├── enums_6.html │ │ │ ├── enums_6.js │ │ │ ├── enums_7.html │ │ │ ├── enums_7.js │ │ │ ├── enums_8.html │ │ │ ├── enums_8.js │ │ │ ├── enums_9.html │ │ │ ├── enums_9.js │ │ │ ├── enums_a.html │ │ │ ├── enums_a.js │ │ │ ├── enums_b.html │ │ │ ├── enums_b.js │ │ │ ├── enums_c.html │ │ │ ├── enums_c.js │ │ │ ├── enums_d.html │ │ │ ├── enums_d.js │ │ │ ├── enums_e.html │ │ │ ├── enums_e.js │ │ │ ├── enums_f.html │ │ │ ├── enums_f.js │ │ │ ├── enumvalues_0.html │ │ │ ├── enumvalues_0.js │ │ │ ├── enumvalues_1.html │ │ │ ├── enumvalues_1.js │ │ │ ├── enumvalues_10.html │ │ │ ├── enumvalues_10.js │ │ │ ├── enumvalues_11.html │ │ │ ├── enumvalues_11.js │ │ │ ├── enumvalues_12.html │ │ │ ├── enumvalues_12.js │ │ │ ├── enumvalues_13.html │ │ │ ├── enumvalues_13.js │ │ │ ├── enumvalues_14.html │ │ │ ├── enumvalues_14.js │ │ │ ├── enumvalues_15.html │ │ │ ├── enumvalues_15.js │ │ │ ├── enumvalues_16.html │ │ │ ├── enumvalues_16.js │ │ │ ├── enumvalues_2.html │ │ │ ├── enumvalues_2.js │ │ │ ├── enumvalues_3.html │ │ │ ├── enumvalues_3.js │ │ │ ├── enumvalues_4.html │ │ │ ├── enumvalues_4.js │ │ │ ├── enumvalues_5.html │ │ │ ├── enumvalues_5.js │ │ │ ├── enumvalues_6.html │ │ │ ├── enumvalues_6.js │ │ │ ├── enumvalues_7.html │ │ │ ├── enumvalues_7.js │ │ │ ├── enumvalues_8.html │ │ │ ├── enumvalues_8.js │ │ │ ├── enumvalues_9.html │ │ │ ├── enumvalues_9.js │ │ │ ├── enumvalues_a.html │ │ │ ├── enumvalues_a.js │ │ │ ├── enumvalues_b.html │ │ │ ├── enumvalues_b.js │ │ │ ├── enumvalues_c.html │ │ │ ├── enumvalues_c.js │ │ │ ├── enumvalues_d.html │ │ │ ├── enumvalues_d.js │ │ │ ├── enumvalues_e.html │ │ │ ├── enumvalues_e.js │ │ │ ├── enumvalues_f.html │ │ │ ├── enumvalues_f.js │ │ │ ├── files_0.html │ │ │ ├── files_0.js │ │ │ ├── files_1.html │ │ │ ├── files_1.js │ │ │ ├── files_10.html │ │ │ ├── files_10.js │ │ │ ├── files_11.html │ │ │ ├── files_11.js │ │ │ ├── files_12.html │ │ │ ├── files_12.js │ │ │ ├── files_13.html │ │ │ ├── files_13.js │ │ │ ├── files_14.html │ │ │ ├── files_14.js │ │ │ ├── files_15.html │ │ │ ├── files_15.js │ │ │ ├── files_2.html │ │ │ ├── files_2.js │ │ │ ├── files_3.html │ │ │ ├── files_3.js │ │ │ ├── files_4.html │ │ │ ├── files_4.js │ │ │ ├── files_5.html │ │ │ ├── files_5.js │ │ │ ├── files_6.html │ │ │ ├── files_6.js │ │ │ ├── files_7.html │ │ │ ├── files_7.js │ │ │ ├── files_8.html │ │ │ ├── files_8.js │ │ │ ├── files_9.html │ │ │ ├── files_9.js │ │ │ ├── files_a.html │ │ │ ├── files_a.js │ │ │ ├── files_b.html │ │ │ ├── files_b.js │ │ │ ├── files_c.html │ │ │ ├── files_c.js │ │ │ ├── files_d.html │ │ │ ├── files_d.js │ │ │ ├── files_e.html │ │ │ ├── files_e.js │ │ │ ├── files_f.html │ │ │ ├── files_f.js │ │ │ ├── functions_0.html │ │ │ ├── functions_0.js │ │ │ ├── functions_1.html │ │ │ ├── functions_1.js │ │ │ ├── functions_10.html │ │ │ ├── functions_10.js │ │ │ ├── functions_11.html │ │ │ ├── functions_11.js │ │ │ ├── functions_12.html │ │ │ ├── functions_12.js │ │ │ ├── functions_13.html │ │ │ ├── functions_13.js │ │ │ ├── functions_14.html │ │ │ ├── functions_14.js │ │ │ ├── functions_15.html │ │ │ ├── functions_15.js │ │ │ ├── functions_16.html │ │ │ ├── functions_16.js │ │ │ ├── functions_17.html │ │ │ ├── functions_17.js │ │ │ ├── functions_18.html │ │ │ ├── functions_18.js │ │ │ ├── functions_2.html │ │ │ ├── functions_2.js │ │ │ ├── functions_3.html │ │ │ ├── functions_3.js │ │ │ ├── functions_4.html │ │ │ ├── functions_4.js │ │ │ ├── functions_5.html │ │ │ ├── functions_5.js │ │ │ ├── functions_6.html │ │ │ ├── functions_6.js │ │ │ ├── functions_7.html │ │ │ ├── functions_7.js │ │ │ ├── functions_8.html │ │ │ ├── functions_8.js │ │ │ ├── functions_9.html │ │ │ ├── functions_9.js │ │ │ ├── functions_a.html │ │ │ ├── functions_a.js │ │ │ ├── functions_b.html │ │ │ ├── functions_b.js │ │ │ ├── functions_c.html │ │ │ ├── functions_c.js │ │ │ ├── functions_d.html │ │ │ ├── functions_d.js │ │ │ ├── functions_e.html │ │ │ ├── functions_e.js │ │ │ ├── functions_f.html │ │ │ ├── functions_f.js │ │ │ ├── namespaces_0.html │ │ │ ├── namespaces_0.js │ │ │ ├── nomatches.html │ │ │ ├── pages_0.html │ │ │ ├── pages_0.js │ │ │ ├── pages_1.html │ │ │ ├── pages_1.js │ │ │ ├── properties_0.html │ │ │ ├── properties_0.js │ │ │ ├── related_0.html │ │ │ ├── related_0.js │ │ │ ├── related_1.html │ │ │ ├── related_1.js │ │ │ ├── related_2.html │ │ │ ├── related_2.js │ │ │ ├── related_3.html │ │ │ ├── related_3.js │ │ │ ├── related_4.html │ │ │ ├── related_4.js │ │ │ ├── related_5.html │ │ │ ├── related_5.js │ │ │ ├── related_6.html │ │ │ ├── related_6.js │ │ │ ├── related_7.html │ │ │ ├── related_7.js │ │ │ ├── related_8.html │ │ │ ├── related_8.js │ │ │ ├── related_9.html │ │ │ ├── related_9.js │ │ │ ├── search.css │ │ │ ├── search.js │ │ │ ├── searchdata.js │ │ │ ├── typedefs_0.html │ │ │ ├── typedefs_0.js │ │ │ ├── typedefs_1.html │ │ │ ├── typedefs_1.js │ │ │ ├── typedefs_2.html │ │ │ ├── typedefs_2.js │ │ │ ├── typedefs_3.html │ │ │ ├── typedefs_3.js │ │ │ ├── typedefs_4.html │ │ │ ├── typedefs_4.js │ │ │ ├── typedefs_5.html │ │ │ ├── typedefs_5.js │ │ │ ├── typedefs_6.html │ │ │ ├── typedefs_6.js │ │ │ ├── typedefs_7.html │ │ │ ├── typedefs_7.js │ │ │ ├── typedefs_8.html │ │ │ ├── typedefs_8.js │ │ │ ├── typedefs_9.html │ │ │ ├── typedefs_9.js │ │ │ ├── typedefs_a.html │ │ │ ├── typedefs_a.js │ │ │ ├── typedefs_b.html │ │ │ ├── typedefs_b.js │ │ │ ├── typedefs_c.html │ │ │ ├── typedefs_c.js │ │ │ ├── typedefs_d.html │ │ │ ├── typedefs_d.js │ │ │ ├── typedefs_e.html │ │ │ ├── typedefs_e.js │ │ │ ├── variables_0.html │ │ │ ├── variables_0.js │ │ │ ├── variables_1.html │ │ │ ├── variables_1.js │ │ │ ├── variables_10.html │ │ │ ├── variables_10.js │ │ │ ├── variables_11.html │ │ │ ├── variables_11.js │ │ │ ├── variables_12.html │ │ │ ├── variables_12.js │ │ │ ├── variables_13.html │ │ │ ├── variables_13.js │ │ │ ├── variables_14.html │ │ │ ├── variables_14.js │ │ │ ├── variables_15.html │ │ │ ├── variables_15.js │ │ │ ├── variables_16.html │ │ │ ├── variables_16.js │ │ │ ├── variables_17.html │ │ │ ├── variables_17.js │ │ │ ├── variables_18.html │ │ │ ├── variables_18.js │ │ │ ├── variables_2.html │ │ │ ├── variables_2.js │ │ │ ├── variables_3.html │ │ │ ├── variables_3.js │ │ │ ├── variables_4.html │ │ │ ├── variables_4.js │ │ │ ├── variables_5.html │ │ │ ├── variables_5.js │ │ │ ├── variables_6.html │ │ │ ├── variables_6.js │ │ │ ├── variables_7.html │ │ │ ├── variables_7.js │ │ │ ├── variables_8.html │ │ │ ├── variables_8.js │ │ │ ├── variables_9.html │ │ │ ├── variables_9.js │ │ │ ├── variables_a.html │ │ │ ├── variables_a.js │ │ │ ├── variables_b.html │ │ │ ├── variables_b.js │ │ │ ├── variables_c.html │ │ │ ├── variables_c.js │ │ │ ├── variables_d.html │ │ │ ├── variables_d.js │ │ │ ├── variables_e.html │ │ │ ├── variables_e.js │ │ │ ├── variables_f.html │ │ │ └── variables_f.js │ │ ├── serialization_8h.html │ │ ├── serialization_8h_source.html │ │ ├── settings_8cpp.html │ │ ├── settings_8h.html │ │ ├── settings_8h_source.html │ │ ├── shader_8cpp.html │ │ ├── shader_8h.html │ │ ├── shader_8h_source.html │ │ ├── signal_8cpp.html │ │ ├── signal_8h.html │ │ ├── signal_8h_source.html │ │ ├── software_8cpp.html │ │ ├── software_8h.html │ │ ├── software_8h_source.html │ │ ├── sound_8cpp.html │ │ ├── sound_8h.html │ │ ├── sound_8h_source.html │ │ ├── soundtable_8cpp.html │ │ ├── soundtable_8h.html │ │ ├── soundtable_8h_source.html │ │ ├── spatial_8cpp.html │ │ ├── spatial_8h.html │ │ ├── spatial_8h_source.html │ │ ├── spinlock_8h.html │ │ ├── spinlock_8h_source.html │ │ ├── stack_8h.html │ │ ├── stack_8h_source.html │ │ ├── stackpool_8h.html │ │ ├── stackpool_8h_source.html │ │ ├── staticworldobject_8cpp.html │ │ ├── staticworldobject_8h.html │ │ ├── staticworldobject_8h_source.html │ │ ├── stats_8cpp.html │ │ ├── stats_8h.html │ │ ├── stats_8h_source.html │ │ ├── struct__test__case-members.html │ │ ├── struct__test__case.html │ │ ├── structtram_1_1_a_a_b_b_tree_1_1_node-members.html │ │ ├── structtram_1_1_a_a_b_b_tree_1_1_node.html │ │ ├── structtram_1_1_animation_component_1_1_animation_playback_info-members.html │ │ ├── structtram_1_1_animation_component_1_1_animation_playback_info.html │ │ ├── structtram_1_1_async_1_1_resource_request-members.html │ │ ├── structtram_1_1_async_1_1_resource_request.html │ │ ├── structtram_1_1_audio_1_1_filter_parameters-members.html │ │ ├── structtram_1_1_audio_1_1_filter_parameters.html │ │ ├── structtram_1_1_audio_1_1_sound_graph_1_1_node-members.html │ │ ├── structtram_1_1_audio_1_1_sound_graph_1_1_node.html │ │ ├── structtram_1_1_audio_1_1_spatial_1_1_audio_buffer-members.html │ │ ├── structtram_1_1_audio_1_1_spatial_1_1_audio_buffer.html │ │ ├── structtram_1_1_audio_1_1_spatial_1_1_audio_render-members.html │ │ ├── structtram_1_1_audio_1_1_spatial_1_1_audio_render.html │ │ ├── structtram_1_1_audio_1_1_spatial_1_1_audio_source-members.html │ │ ├── structtram_1_1_audio_1_1_spatial_1_1_audio_source.html │ │ ├── structtram_1_1_audio_1_1_spatial_1_1_path_exploration_result-members.html │ │ ├── structtram_1_1_audio_1_1_spatial_1_1_path_exploration_result.html │ │ ├── structtram_1_1_audio_1_1_spatial_1_1_path_from_audio_source-members.html │ │ ├── structtram_1_1_audio_1_1_spatial_1_1_path_from_audio_source.html │ │ ├── structtram_1_1_audio_1_1_spatial_1_1_path_rendering_info-members.html │ │ ├── structtram_1_1_audio_1_1_spatial_1_1_path_rendering_info.html │ │ ├── structtram_1_1_audio_1_1_spatial_1_1_path_segment-members.html │ │ ├── structtram_1_1_audio_1_1_spatial_1_1_path_segment.html │ │ ├── structtram_1_1_audio_1_1_spatial_1_1_path_tracing_result-members.html │ │ ├── structtram_1_1_audio_1_1_spatial_1_1_path_tracing_result.html │ │ ├── structtram_1_1_audio_1_1audiobuffer__t-members.html │ │ ├── structtram_1_1_audio_1_1audiobuffer__t.html │ │ ├── structtram_1_1_audio_1_1audiosource__t-members.html │ │ ├── structtram_1_1_audio_1_1audiosource__t.html │ │ ├── structtram_1_1_edge-members.html │ │ ├── structtram_1_1_edge.html │ │ ├── structtram_1_1_entity_1_1_field_info-members.html │ │ ├── structtram_1_1_entity_1_1_field_info.html │ │ ├── structtram_1_1_entity_type_info-members.html │ │ ├── structtram_1_1_entity_type_info.html │ │ ├── structtram_1_1_event-members.html │ │ ├── structtram_1_1_event.html │ │ ├── structtram_1_1_ext_1_1_design_1_1_attribute_bag-members.html │ │ ├── structtram_1_1_ext_1_1_design_1_1_attribute_bag.html │ │ ├── structtram_1_1_ext_1_1_design_1_1_attribute_boost-members.html │ │ ├── structtram_1_1_ext_1_1_design_1_1_attribute_boost.html │ │ ├── structtram_1_1_ext_1_1_design_1_1_attribute_definition-members.html │ │ ├── structtram_1_1_ext_1_1_design_1_1_attribute_definition.html │ │ ├── structtram_1_1_ext_1_1_design_1_1_attribute_instance-members.html │ │ ├── structtram_1_1_ext_1_1_design_1_1_attribute_instance.html │ │ ├── structtram_1_1_ext_1_1_design_1_1_character_class-members.html │ │ ├── structtram_1_1_ext_1_1_design_1_1_character_class.html │ │ ├── structtram_1_1_ext_1_1_design_1_1_dialog_action-members.html │ │ ├── structtram_1_1_ext_1_1_design_1_1_dialog_action.html │ │ ├── structtram_1_1_ext_1_1_design_1_1_dialog_condition-members.html │ │ ├── structtram_1_1_ext_1_1_design_1_1_dialog_condition.html │ │ ├── structtram_1_1_ext_1_1_design_1_1_dialog_topic-members.html │ │ ├── structtram_1_1_ext_1_1_design_1_1_dialog_topic.html │ │ ├── structtram_1_1_ext_1_1_design_1_1_entity_children-members.html │ │ ├── structtram_1_1_ext_1_1_design_1_1_entity_children.html │ │ ├── structtram_1_1_ext_1_1_design_1_1_inventory-members.html │ │ ├── structtram_1_1_ext_1_1_design_1_1_inventory.html │ │ ├── structtram_1_1_ext_1_1_design_1_1_item_class-members.html │ │ ├── structtram_1_1_ext_1_1_design_1_1_item_class.html │ │ ├── structtram_1_1_ext_1_1_design_1_1_item_instance-members.html │ │ ├── structtram_1_1_ext_1_1_design_1_1_item_instance.html │ │ ├── structtram_1_1_ext_1_1_design_1_1_item_property-members.html │ │ ├── structtram_1_1_ext_1_1_design_1_1_item_property.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_a_i_variable-members.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_a_i_variable.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_anim_state-members.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_anim_state.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_space-members.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_space.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_default-members.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_default.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_from-members.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_from.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_into-members.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_into.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_attribute-members.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_attribute.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container-members.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_attribute_modifier-members.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_attribute_modifier.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_base_attribute-members.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_base_attribute.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_base_faction_rank-members.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_base_faction_rank.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_character_disposition-members.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_character_disposition.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_dialog_action-members.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_dialog_action.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_dialog_condition-members.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_dialog_condition.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_dialog_topic-members.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_dialog_topic.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_effect-members.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_effect.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_entity_children-members.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_entity_children.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_faction_rank-members.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_faction_rank.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_faction_relation-members.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_faction_relation.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_initial_attribute-members.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_initial_attribute.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_inventory-members.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_inventory.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_inventory_factory_info-members.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_inventory_factory_info.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_item_class-members.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_item_class.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_item_instance-members.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_item_instance.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_quest-members.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_quest.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_quest_trigger-members.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_quest_trigger.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable-members.html │ │ ├── structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html │ │ ├── structtram_1_1_ext_1_1_menu_1_1_event_intercept-members.html │ │ ├── structtram_1_1_ext_1_1_menu_1_1_event_intercept.html │ │ ├── structtram_1_1_ext_1_1_menu_1_1_intercept-members.html │ │ ├── structtram_1_1_ext_1_1_menu_1_1_intercept.html │ │ ├── structtram_1_1_ext_1_1_menu_1_1_log_intercept-members.html │ │ ├── structtram_1_1_ext_1_1_menu_1_1_log_intercept.html │ │ ├── structtram_1_1_ext_1_1_menu_1_1_message_intercept-members.html │ │ ├── structtram_1_1_ext_1_1_menu_1_1_message_intercept.html │ │ ├── structtram_1_1_file_source-members.html │ │ ├── structtram_1_1_file_source.html │ │ ├── structtram_1_1_g_u_i_1_1_frame_object-members.html │ │ ├── structtram_1_1_g_u_i_1_1_frame_object.html │ │ ├── structtram_1_1_hashmap_1_1_record-members.html │ │ ├── structtram_1_1_hashmap_1_1_record.html │ │ ├── structtram_1_1_listener_info-members.html │ │ ├── structtram_1_1_listener_info.html │ │ ├── structtram_1_1_message-members.html │ │ ├── structtram_1_1_message.html │ │ ├── structtram_1_1_navmesh_node-members.html │ │ ├── structtram_1_1_navmesh_node.html │ │ ├── structtram_1_1_node-members.html │ │ ├── structtram_1_1_node.html │ │ ├── structtram_1_1_octree_1_1_nearest_search-members.html │ │ ├── structtram_1_1_octree_1_1_nearest_search.html │ │ ├── structtram_1_1_octree_1_1_node-members.html │ │ ├── structtram_1_1_octree_1_1_node.html │ │ ├── structtram_1_1_particle_component_1_1_particle-members.html │ │ ├── structtram_1_1_particle_component_1_1_particle.html │ │ ├── structtram_1_1_path_edge_info-members.html │ │ ├── structtram_1_1_path_edge_info.html │ │ ├── structtram_1_1_path_node-members.html │ │ ├── structtram_1_1_path_node.html │ │ ├── structtram_1_1_physics_1_1_a_p_i_1_1_collision_shape_transform-members.html │ │ ├── structtram_1_1_physics_1_1_a_p_i_1_1_collision_shape_transform.html │ │ ├── structtram_1_1_physics_1_1_a_p_i_1_1_object_collision-members.html │ │ ├── structtram_1_1_physics_1_1_a_p_i_1_1_object_collision.html │ │ ├── structtram_1_1_physics_1_1_a_p_i_1_1_rigidbody_metadata-members.html │ │ ├── structtram_1_1_physics_1_1_a_p_i_1_1_rigidbody_metadata.html │ │ ├── structtram_1_1_physics_1_1_a_p_i_1_1_shapecast_callback-members.html │ │ ├── structtram_1_1_physics_1_1_a_p_i_1_1_shapecast_callback.html │ │ ├── structtram_1_1_physics_1_1_bullet_1_1_shapecast_callback-members.html │ │ ├── structtram_1_1_physics_1_1_bullet_1_1_shapecast_callback.html │ │ ├── structtram_1_1_physics_1_1_collision-members.html │ │ ├── structtram_1_1_physics_1_1_collision.html │ │ ├── structtram_1_1_physics_1_1_collision_shape-members.html │ │ ├── structtram_1_1_physics_1_1_collision_shape.html │ │ ├── structtram_1_1_physics_1_1_collision_triangle-members.html │ │ ├── structtram_1_1_physics_1_1_collision_triangle.html │ │ ├── structtram_1_1_physics_1_1collisionshape__t-members.html │ │ ├── structtram_1_1_physics_1_1collisionshape__t.html │ │ ├── structtram_1_1_physics_1_1rigidbody__t-members.html │ │ ├── structtram_1_1_physics_1_1rigidbody__t.html │ │ ├── structtram_1_1_physics_1_1trigger__t-members.html │ │ ├── structtram_1_1_physics_1_1trigger__t.html │ │ ├── structtram_1_1_physics_constraint-members.html │ │ ├── structtram_1_1_physics_constraint.html │ │ ├── structtram_1_1_pool_1_1iterator-members.html │ │ ├── structtram_1_1_pool_1_1iterator.html │ │ ├── structtram_1_1_render_1_1_a_a_b_b_1_1_a_a_b_b_leaf-members.html │ │ ├── structtram_1_1_render_1_1_a_a_b_b_1_1_a_a_b_b_leaf.html │ │ ├── structtram_1_1_render_1_1_a_a_b_b_1_1_query_response-members.html │ │ ├── structtram_1_1_render_1_1_a_a_b_b_1_1_query_response.html │ │ ├── structtram_1_1_render_1_1_a_a_b_b_triangle-members.html │ │ ├── structtram_1_1_render_1_1_a_a_b_b_triangle.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_clip_point-members.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_clip_point.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_clip_triangle-members.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_clip_triangle.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_color_vertex-members.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_color_vertex.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry-members.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_d3_d_light-members.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_d3_d_light.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_draw_list_entry-members.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_draw_list_entry.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex-members.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_f_f_p_helper-members.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_f_f_p_helper.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_f_v_f_helper-members.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_f_v_f_helper.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_fragment_shader-members.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_fragment_shader.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry-members.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_g_l_light-members.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_g_l_light.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_g_l_material-members.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_g_l_material.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_layer_parameters-members.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_layer_parameters.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_light_list_entry-members.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_light_list_entry.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_line_vertex-members.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_line_vertex.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_linked_shader-members.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_linked_shader.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_point2_d-members.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_point2_d.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry-members.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_s_w_index_array-members.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_s_w_index_array.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_s_w_light-members.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_s_w_light.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_s_w_texture-members.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_s_w_texture.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_s_w_vertex_array-members.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_s_w_vertex_array.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_scanline-members.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_scanline.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_scanline_buffer-members.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_scanline_buffer.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_matrices-members.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_matrices.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices-members.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_static_vertex-members.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_vertex_buffer_metadata-members.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_vertex_buffer_metadata.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_vertex_shader-members.html │ │ ├── structtram_1_1_render_1_1_a_p_i_1_1_vertex_shader.html │ │ ├── structtram_1_1_render_1_1_bone-members.html │ │ ├── structtram_1_1_render_1_1_bone.html │ │ ├── structtram_1_1_render_1_1_bucket_mapping-members.html │ │ ├── structtram_1_1_render_1_1_bucket_mapping.html │ │ ├── structtram_1_1_render_1_1_dynamic_model_data-members.html │ │ ├── structtram_1_1_render_1_1_dynamic_model_data.html │ │ ├── structtram_1_1_render_1_1_dynamic_model_vertex-members.html │ │ ├── structtram_1_1_render_1_1_dynamic_model_vertex.html │ │ ├── structtram_1_1_render_1_1_index_range-members.html │ │ ├── structtram_1_1_render_1_1_index_range.html │ │ ├── structtram_1_1_render_1_1_keyframe-members.html │ │ ├── structtram_1_1_render_1_1_keyframe.html │ │ ├── structtram_1_1_render_1_1_keyframe_header-members.html │ │ ├── structtram_1_1_render_1_1_keyframe_header.html │ │ ├── structtram_1_1_render_1_1_light_graph_1_1_node-members.html │ │ ├── structtram_1_1_render_1_1_light_graph_1_1_node.html │ │ ├── structtram_1_1_render_1_1_light_tree_1_1_light-members.html │ │ ├── structtram_1_1_render_1_1_light_tree_1_1_light.html │ │ ├── structtram_1_1_render_1_1_line_vertex-members.html │ │ ├── structtram_1_1_render_1_1_line_vertex.html │ │ ├── structtram_1_1_render_1_1_model_a_a_b_b-members.html │ │ ├── structtram_1_1_render_1_1_model_a_a_b_b.html │ │ ├── structtram_1_1_render_1_1_model_data.html │ │ ├── structtram_1_1_render_1_1_open_g_l_1_1_draw_list_entry-members.html │ │ ├── structtram_1_1_render_1_1_open_g_l_1_1_draw_list_entry.html │ │ ├── structtram_1_1_render_1_1_open_g_l_1_1_fragment_shader-members.html │ │ ├── structtram_1_1_render_1_1_open_g_l_1_1_fragment_shader.html │ │ ├── structtram_1_1_render_1_1_open_g_l_1_1_layer_parameters-members.html │ │ ├── structtram_1_1_render_1_1_open_g_l_1_1_layer_parameters.html │ │ ├── structtram_1_1_render_1_1_open_g_l_1_1_light_list_entry-members.html │ │ ├── structtram_1_1_render_1_1_open_g_l_1_1_light_list_entry.html │ │ ├── structtram_1_1_render_1_1_open_g_l_1_1_linked_shader-members.html │ │ ├── structtram_1_1_render_1_1_open_g_l_1_1_linked_shader.html │ │ ├── structtram_1_1_render_1_1_open_g_l_1_1_shader_uniform_matrices-members.html │ │ ├── structtram_1_1_render_1_1_open_g_l_1_1_shader_uniform_matrices.html │ │ ├── structtram_1_1_render_1_1_open_g_l_1_1_shader_uniform_model_matrices-members.html │ │ ├── structtram_1_1_render_1_1_open_g_l_1_1_shader_uniform_model_matrices.html │ │ ├── structtram_1_1_render_1_1_open_g_l_1_1_vertex_shader-members.html │ │ ├── structtram_1_1_render_1_1_open_g_l_1_1_vertex_shader.html │ │ ├── structtram_1_1_render_1_1_pose-members.html │ │ ├── structtram_1_1_render_1_1_pose.html │ │ ├── structtram_1_1_render_1_1_registered_vertex_definition-members.html │ │ ├── structtram_1_1_render_1_1_registered_vertex_definition.html │ │ ├── structtram_1_1_render_1_1_spherical_harmonic-members.html │ │ ├── structtram_1_1_render_1_1_spherical_harmonic.html │ │ ├── structtram_1_1_render_1_1_sprite_frame-members.html │ │ ├── structtram_1_1_render_1_1_sprite_frame.html │ │ ├── structtram_1_1_render_1_1_sprite_point-members.html │ │ ├── structtram_1_1_render_1_1_sprite_point.html │ │ ├── structtram_1_1_render_1_1_sprite_vertex-members.html │ │ ├── structtram_1_1_render_1_1_sprite_vertex.html │ │ ├── structtram_1_1_render_1_1_static_model_data-members.html │ │ ├── structtram_1_1_render_1_1_static_model_data.html │ │ ├── structtram_1_1_render_1_1_static_model_vertex-members.html │ │ ├── structtram_1_1_render_1_1_static_model_vertex.html │ │ ├── structtram_1_1_render_1_1_triangle-members.html │ │ ├── structtram_1_1_render_1_1_triangle.html │ │ ├── structtram_1_1_render_1_1_triangle_bucket-members.html │ │ ├── structtram_1_1_render_1_1_triangle_bucket.html │ │ ├── structtram_1_1_render_1_1_vertex_attribute-members.html │ │ ├── structtram_1_1_render_1_1_vertex_attribute.html │ │ ├── structtram_1_1_render_1_1_vertex_definition-members.html │ │ ├── structtram_1_1_render_1_1_vertex_definition.html │ │ ├── structtram_1_1_render_1_1drawlistentry__t-members.html │ │ ├── structtram_1_1_render_1_1drawlistentry__t.html │ │ ├── structtram_1_1_render_1_1indexarray__t-members.html │ │ ├── structtram_1_1_render_1_1indexarray__t.html │ │ ├── structtram_1_1_render_1_1light__t-members.html │ │ ├── structtram_1_1_render_1_1light__t.html │ │ ├── structtram_1_1_render_1_1material__t-members.html │ │ ├── structtram_1_1_render_1_1material__t.html │ │ ├── structtram_1_1_render_1_1spritearray__t-members.html │ │ ├── structtram_1_1_render_1_1spritearray__t.html │ │ ├── structtram_1_1_render_1_1texturehandle__t-members.html │ │ ├── structtram_1_1_render_1_1texturehandle__t.html │ │ ├── structtram_1_1_render_1_1vertexarray__t-members.html │ │ ├── structtram_1_1_render_1_1vertexarray__t.html │ │ ├── structtram_1_1_script_1_1_language-members.html │ │ ├── structtram_1_1_script_1_1_language.html │ │ ├── structtram_1_1_scriptable_type_1_1_scriptable_type_info-members.html │ │ ├── structtram_1_1_scriptable_type_1_1_scriptable_type_info.html │ │ ├── structtram_1_1_settings_1_1_property-members.html │ │ ├── structtram_1_1_settings_1_1_property.html │ │ ├── structtram_1_1_settings_1_1_raw_setting-members.html │ │ ├── structtram_1_1_settings_1_1_raw_setting.html │ │ ├── structtram_1_1_settings_1_1_setting_info-members.html │ │ ├── structtram_1_1_settings_1_1_setting_info.html │ │ ├── structtram_1_1_shared_entity_data-members.html │ │ ├── structtram_1_1_shared_entity_data.html │ │ ├── structtram_1_1_signal-members.html │ │ ├── structtram_1_1_signal.html │ │ ├── structtram_1_1_stats_1_1_system_stat-members.html │ │ ├── structtram_1_1_stats_1_1_system_stat.html │ │ ├── structtram_1_1_system_1_1_system_info-members.html │ │ ├── structtram_1_1_system_1_1_system_info.html │ │ ├── structtram_1_1_trigger_poll_callback-members.html │ │ ├── structtram_1_1_trigger_poll_callback.html │ │ ├── structtram_1_1_u_i_1_1_key_binding-members.html │ │ ├── structtram_1_1_u_i_1_1_key_binding.html │ │ ├── structtram_1_1_u_i_d-members.html │ │ ├── structtram_1_1_u_i_d.html │ │ ├── system_8cpp.html │ │ ├── system_8h.html │ │ ├── system_8h_source.html │ │ ├── tabs.css │ │ ├── template_8cpp.html │ │ ├── template_8h.html │ │ ├── template_8h_source.html │ │ ├── templates_2aabb_8h.html │ │ ├── templates_2aabb_8h_source.html │ │ ├── test_8h.html │ │ ├── test_8h_source.html │ │ ├── texture_8cpp.html │ │ ├── texture_8h.html │ │ ├── texture_8h_source.html │ │ ├── thirdperson_8cpp.html │ │ ├── thirdperson_8h.html │ │ ├── thirdperson_8h_source.html │ │ ├── time_8cpp.html │ │ ├── time_8h.html │ │ ├── time_8h_source.html │ │ ├── todo.html │ │ ├── transition_8cpp.html │ │ ├── transition_8h.html │ │ ├── transition_8h_source.html │ │ ├── trigger_8cpp.html │ │ ├── trigger_8h.html │ │ ├── trigger_8h_source.html │ │ ├── type_8cpp.html │ │ ├── type_8h.html │ │ ├── type_8h_source.html │ │ ├── ui_8cpp.html │ │ ├── ui_8h.html │ │ ├── ui_8h_source.html │ │ ├── uid_8cpp.html │ │ ├── uid_8h.html │ │ ├── uid_8h_source.html │ │ ├── utils_8cpp.html │ │ ├── value_8h.html │ │ ├── value_8h_source.html │ │ ├── vertices_8cpp.html │ │ ├── vertices_8h.html │ │ ├── vertices_8h_source.html │ │ ├── worldcell_8cpp.html │ │ ├── worldcell_8h.html │ │ └── worldcell_8h_source.html │ ├── default.css │ ├── desktop.ini │ ├── documentation/ │ │ ├── audio.html │ │ ├── components/ │ │ │ ├── animation.html │ │ │ ├── audio.html │ │ │ ├── controller.html │ │ │ ├── light.html │ │ │ ├── particle.html │ │ │ ├── physics.html │ │ │ ├── player.html │ │ │ ├── render.html │ │ │ ├── sprite.html │ │ │ ├── template.html │ │ │ └── trigger.html │ │ ├── components.html │ │ ├── entities/ │ │ │ ├── crate.html │ │ │ ├── decoration.html │ │ │ ├── light.html │ │ │ ├── marker.html │ │ │ ├── player.html │ │ │ ├── sound.html │ │ │ ├── staticwobj.html │ │ │ └── trigger.html │ │ ├── entities.html │ │ ├── entitydefinition.html │ │ ├── extensions/ │ │ │ ├── camera.html │ │ │ ├── kitchensink/ │ │ │ │ ├── animationtable.html │ │ │ │ └── soundtable.html │ │ │ ├── kitchensink.html │ │ │ ├── menu.html │ │ │ └── scripting.html │ │ ├── extensions.html │ │ ├── framework/ │ │ │ ├── async.html │ │ │ ├── core.html │ │ │ ├── entity.html │ │ │ ├── entitycomponent.html │ │ │ ├── event.html │ │ │ ├── file.html │ │ │ ├── graph.html │ │ │ ├── gui.html │ │ │ ├── language.html │ │ │ ├── loader.html │ │ │ ├── logging.html │ │ │ ├── math.html │ │ │ ├── message.html │ │ │ ├── navmesh.html │ │ │ ├── path.html │ │ │ ├── resource.html │ │ │ ├── script.html │ │ │ ├── serialization.html │ │ │ ├── settings.html │ │ │ ├── signal.html │ │ │ ├── stats.html │ │ │ ├── system.html │ │ │ ├── transition.html │ │ │ ├── type.html │ │ │ ├── ui.html │ │ │ ├── uid.html │ │ │ ├── value.html │ │ │ └── worldcell.html │ │ ├── framework.html │ │ ├── index.html │ │ ├── leveleditor.html │ │ ├── physics/ │ │ │ ├── collisionmodel.html │ │ │ └── collisionshape.html │ │ ├── physics.html │ │ ├── platform.html │ │ ├── plugin.html │ │ ├── render/ │ │ │ ├── aabb.html │ │ │ ├── animation.html │ │ │ ├── material.html │ │ │ ├── model.html │ │ │ └── sprite.html │ │ ├── render.html │ │ └── tools/ │ │ └── codegen.html │ ├── documentation.html │ ├── enterprise.css │ ├── features.html │ ├── generate.bat │ ├── googlef0d2a216ce53fc15.html │ ├── index.html │ ├── learn/ │ │ ├── 3dmodeling.html │ │ ├── animations.html │ │ ├── cake.html │ │ ├── cameras.html │ │ ├── desktop.ini │ │ ├── getstarted.html │ │ ├── materials.html │ │ ├── physics.html │ │ ├── pingpong.html │ │ ├── platforms.html │ │ ├── render.html │ │ ├── scripting.html │ │ ├── structure.html │ │ ├── walking.html │ │ ├── whatis.html │ │ └── world.html │ ├── learn.html │ ├── no_gifs.css │ ├── page_generator.py │ ├── patterns.html │ ├── roadmap.html │ ├── src/ │ │ ├── documentation/ │ │ │ ├── audio.html │ │ │ ├── components/ │ │ │ │ ├── animation.html │ │ │ │ ├── audio.html │ │ │ │ ├── controller.html │ │ │ │ ├── light.html │ │ │ │ ├── particle.html │ │ │ │ ├── physics.html │ │ │ │ ├── player.html │ │ │ │ ├── render.html │ │ │ │ ├── sprite.html │ │ │ │ ├── template.html │ │ │ │ └── trigger.html │ │ │ ├── components.html │ │ │ ├── entities/ │ │ │ │ ├── crate.html │ │ │ │ ├── decoration.html │ │ │ │ ├── light.html │ │ │ │ ├── marker.html │ │ │ │ ├── player.html │ │ │ │ ├── sound.html │ │ │ │ ├── staticwobj.html │ │ │ │ └── trigger.html │ │ │ ├── entities.html │ │ │ ├── entitydefinition.html │ │ │ ├── extensions/ │ │ │ │ ├── camera.html │ │ │ │ ├── kitchensink/ │ │ │ │ │ ├── animationtable.html │ │ │ │ │ └── soundtable.html │ │ │ │ ├── kitchensink.html │ │ │ │ ├── menu.html │ │ │ │ └── scripting.html │ │ │ ├── extensions.html │ │ │ ├── framework/ │ │ │ │ ├── async.html │ │ │ │ ├── core.html │ │ │ │ ├── entity.html │ │ │ │ ├── entitycomponent.html │ │ │ │ ├── event.html │ │ │ │ ├── file.html │ │ │ │ ├── graph.html │ │ │ │ ├── gui.html │ │ │ │ ├── language.html │ │ │ │ ├── loader.html │ │ │ │ ├── logging.html │ │ │ │ ├── math.html │ │ │ │ ├── message.html │ │ │ │ ├── navmesh.html │ │ │ │ ├── path.html │ │ │ │ ├── resource.html │ │ │ │ ├── script.html │ │ │ │ ├── serialization.html │ │ │ │ ├── settings.html │ │ │ │ ├── signal.html │ │ │ │ ├── stats.html │ │ │ │ ├── system.html │ │ │ │ ├── transition.html │ │ │ │ ├── type.html │ │ │ │ ├── ui.html │ │ │ │ ├── uid.html │ │ │ │ ├── value.html │ │ │ │ └── worldcell.html │ │ │ ├── framework.html │ │ │ ├── index.html │ │ │ ├── leveleditor.html │ │ │ ├── physics/ │ │ │ │ ├── collisionmodel.html │ │ │ │ └── collisionshape.html │ │ │ ├── physics.html │ │ │ ├── platform.html │ │ │ ├── plugin.html │ │ │ ├── render/ │ │ │ │ ├── aabb.html │ │ │ │ ├── animation.html │ │ │ │ ├── material.html │ │ │ │ ├── model.html │ │ │ │ └── sprite.html │ │ │ ├── render.html │ │ │ ├── source-layout.html │ │ │ └── tools/ │ │ │ └── codegen.html │ │ ├── documentation.html │ │ ├── features.html │ │ ├── index.html │ │ ├── learn/ │ │ │ ├── 3dmodeling.html │ │ │ ├── animations.html │ │ │ ├── cake.html │ │ │ ├── cameras.html │ │ │ ├── getstarted.html │ │ │ ├── materials.html │ │ │ ├── physics.html │ │ │ ├── pingpong.html │ │ │ ├── platforms.html │ │ │ ├── render.html │ │ │ ├── scripting.html │ │ │ ├── structure.html │ │ │ ├── walking.html │ │ │ ├── whatis.html │ │ │ └── world.html │ │ ├── learn.html │ │ ├── manual/ │ │ │ ├── audio/ │ │ │ │ ├── api.md │ │ │ │ └── audio.md │ │ │ ├── components/ │ │ │ │ ├── animation.md │ │ │ │ ├── audio.md │ │ │ │ ├── components.md │ │ │ │ ├── controller.md │ │ │ │ ├── light.md │ │ │ │ ├── particle.md │ │ │ │ ├── physics.md │ │ │ │ ├── player.md │ │ │ │ ├── sprite.md │ │ │ │ └── trigger.md │ │ │ ├── config.md │ │ │ ├── main.md │ │ │ └── manual.md │ │ ├── patterns.html │ │ ├── roadmap.html │ │ ├── template.html │ │ └── why.html │ └── why.html ├── libraries/ │ ├── README.md │ ├── binaries/ │ │ ├── web/ │ │ │ ├── libBulletCollision.a │ │ │ ├── libBulletDynamics.a │ │ │ ├── libBulletSoftBody.a │ │ │ ├── libLinearMath.a │ │ │ ├── liblua.a │ │ │ ├── libminiz.a │ │ │ └── libtramsdk.a │ │ ├── win32/ │ │ │ ├── libBulletCollision.a │ │ │ ├── libBulletDynamics.a │ │ │ ├── libBulletSoftBody.a │ │ │ ├── libLinearMath.a │ │ │ ├── libOpenAL32.a │ │ │ ├── libSDL2.a │ │ │ ├── libSDL2.dll.a │ │ │ ├── libcurl.a │ │ │ ├── liblua.a │ │ │ └── libminiz.a │ │ └── win64/ │ │ ├── libBulletCollision.a │ │ ├── libBulletDynamics.a │ │ ├── libBulletSoftBody.a │ │ ├── libLinearMath.a │ │ ├── libOpenAL32.a │ │ ├── libSDL2.a │ │ ├── libSDL2.dll.a │ │ ├── libcurl.a │ │ ├── libglfw3.a │ │ ├── liblua.a │ │ ├── libminiz.a │ │ └── libportaudio.a │ ├── bullet/ │ │ ├── BulletCollision/ │ │ │ ├── BroadphaseCollision/ │ │ │ │ ├── btAxisSweep3.h │ │ │ │ ├── btAxisSweep3Internal.h │ │ │ │ ├── btBroadphaseInterface.h │ │ │ │ ├── btBroadphaseProxy.h │ │ │ │ ├── btCollisionAlgorithm.h │ │ │ │ ├── btDbvt.h │ │ │ │ ├── btDbvtBroadphase.h │ │ │ │ ├── btDispatcher.h │ │ │ │ ├── btOverlappingPairCache.h │ │ │ │ ├── btOverlappingPairCallback.h │ │ │ │ ├── btQuantizedBvh.h │ │ │ │ └── btSimpleBroadphase.h │ │ │ ├── CollisionDispatch/ │ │ │ │ ├── SphereTriangleDetector.h │ │ │ │ ├── btActivatingCollisionAlgorithm.h │ │ │ │ ├── btBox2dBox2dCollisionAlgorithm.h │ │ │ │ ├── btBoxBoxCollisionAlgorithm.h │ │ │ │ ├── btBoxBoxDetector.h │ │ │ │ ├── btCollisionConfiguration.h │ │ │ │ ├── btCollisionCreateFunc.h │ │ │ │ ├── btCollisionDispatcher.h │ │ │ │ ├── btCollisionDispatcherMt.h │ │ │ │ ├── btCollisionObject.h │ │ │ │ ├── btCollisionObjectWrapper.h │ │ │ │ ├── btCollisionWorld.h │ │ │ │ ├── btCollisionWorldImporter.h │ │ │ │ ├── btCompoundCollisionAlgorithm.h │ │ │ │ ├── btCompoundCompoundCollisionAlgorithm.h │ │ │ │ ├── btConvex2dConvex2dAlgorithm.h │ │ │ │ ├── btConvexConcaveCollisionAlgorithm.h │ │ │ │ ├── btConvexConvexAlgorithm.h │ │ │ │ ├── btConvexPlaneCollisionAlgorithm.h │ │ │ │ ├── btDefaultCollisionConfiguration.h │ │ │ │ ├── btEmptyCollisionAlgorithm.h │ │ │ │ ├── btGhostObject.h │ │ │ │ ├── btHashedSimplePairCache.h │ │ │ │ ├── btInternalEdgeUtility.h │ │ │ │ ├── btManifoldResult.h │ │ │ │ ├── btSimulationIslandManager.h │ │ │ │ ├── btSphereBoxCollisionAlgorithm.h │ │ │ │ ├── btSphereSphereCollisionAlgorithm.h │ │ │ │ ├── btSphereTriangleCollisionAlgorithm.h │ │ │ │ └── btUnionFind.h │ │ │ ├── CollisionShapes/ │ │ │ │ ├── btBox2dShape.h │ │ │ │ ├── btBoxShape.h │ │ │ │ ├── btBvhTriangleMeshShape.h │ │ │ │ ├── btCapsuleShape.h │ │ │ │ ├── btCollisionMargin.h │ │ │ │ ├── btCollisionShape.h │ │ │ │ ├── btCompoundShape.h │ │ │ │ ├── btConcaveShape.h │ │ │ │ ├── btConeShape.h │ │ │ │ ├── btConvex2dShape.h │ │ │ │ ├── btConvexHullShape.h │ │ │ │ ├── btConvexInternalShape.h │ │ │ │ ├── btConvexPointCloudShape.h │ │ │ │ ├── btConvexPolyhedron.h │ │ │ │ ├── btConvexShape.h │ │ │ │ ├── btConvexTriangleMeshShape.h │ │ │ │ ├── btCylinderShape.h │ │ │ │ ├── btEmptyShape.h │ │ │ │ ├── btHeightfieldTerrainShape.h │ │ │ │ ├── btMaterial.h │ │ │ │ ├── btMiniSDF.h │ │ │ │ ├── btMinkowskiSumShape.h │ │ │ │ ├── btMultiSphereShape.h │ │ │ │ ├── btMultimaterialTriangleMeshShape.h │ │ │ │ ├── btOptimizedBvh.h │ │ │ │ ├── btPolyhedralConvexShape.h │ │ │ │ ├── btScaledBvhTriangleMeshShape.h │ │ │ │ ├── btSdfCollisionShape.h │ │ │ │ ├── btShapeHull.h │ │ │ │ ├── btSphereShape.h │ │ │ │ ├── btStaticPlaneShape.h │ │ │ │ ├── btStridingMeshInterface.h │ │ │ │ ├── btTetrahedronShape.h │ │ │ │ ├── btTriangleBuffer.h │ │ │ │ ├── btTriangleCallback.h │ │ │ │ ├── btTriangleIndexVertexArray.h │ │ │ │ ├── btTriangleIndexVertexMaterialArray.h │ │ │ │ ├── btTriangleInfoMap.h │ │ │ │ ├── btTriangleMesh.h │ │ │ │ ├── btTriangleMeshShape.h │ │ │ │ ├── btTriangleShape.h │ │ │ │ └── btUniformScalingShape.h │ │ │ ├── Gimpact/ │ │ │ │ ├── btBoxCollision.h │ │ │ │ ├── btClipPolygon.h │ │ │ │ ├── btCompoundFromGimpact.h │ │ │ │ ├── btContactProcessing.h │ │ │ │ ├── btContactProcessingStructs.h │ │ │ │ ├── btGImpactBvh.h │ │ │ │ ├── btGImpactBvhStructs.h │ │ │ │ ├── btGImpactCollisionAlgorithm.h │ │ │ │ ├── btGImpactMassUtil.h │ │ │ │ ├── btGImpactQuantizedBvh.h │ │ │ │ ├── btGImpactQuantizedBvhStructs.h │ │ │ │ ├── btGImpactShape.h │ │ │ │ ├── btGenericPoolAllocator.h │ │ │ │ ├── btGeometryOperations.h │ │ │ │ ├── btQuantization.h │ │ │ │ ├── btTriangleShapeEx.h │ │ │ │ ├── gim_array.h │ │ │ │ ├── gim_basic_geometry_operations.h │ │ │ │ ├── gim_bitset.h │ │ │ │ ├── gim_box_collision.h │ │ │ │ ├── gim_box_set.h │ │ │ │ ├── gim_clip_polygon.h │ │ │ │ ├── gim_contact.h │ │ │ │ ├── gim_geom_types.h │ │ │ │ ├── gim_geometry.h │ │ │ │ ├── gim_hash_table.h │ │ │ │ ├── gim_linear_math.h │ │ │ │ ├── gim_math.h │ │ │ │ ├── gim_memory.h │ │ │ │ ├── gim_pair.h │ │ │ │ ├── gim_radixsort.h │ │ │ │ └── gim_tri_collision.h │ │ │ └── NarrowPhaseCollision/ │ │ │ ├── btComputeGjkEpaPenetration.h │ │ │ ├── btContinuousConvexCollision.h │ │ │ ├── btConvexCast.h │ │ │ ├── btConvexPenetrationDepthSolver.h │ │ │ ├── btDiscreteCollisionDetectorInterface.h │ │ │ ├── btGjkCollisionDescription.h │ │ │ ├── btGjkConvexCast.h │ │ │ ├── btGjkEpa2.h │ │ │ ├── btGjkEpa3.h │ │ │ ├── btGjkEpaPenetrationDepthSolver.h │ │ │ ├── btGjkPairDetector.h │ │ │ ├── btManifoldPoint.h │ │ │ ├── btMinkowskiPenetrationDepthSolver.h │ │ │ ├── btMprPenetration.h │ │ │ ├── btPersistentManifold.h │ │ │ ├── btPointCollector.h │ │ │ ├── btPolyhedralContactClipping.h │ │ │ ├── btRaycastCallback.h │ │ │ ├── btSimplexSolverInterface.h │ │ │ ├── btSubSimplexConvexCast.h │ │ │ └── btVoronoiSimplexSolver.h │ │ ├── BulletDynamics/ │ │ │ ├── ConstraintSolver/ │ │ │ │ ├── btBatchedConstraints.h │ │ │ │ ├── btConeTwistConstraint.h │ │ │ │ ├── btConstraintSolver.h │ │ │ │ ├── btContactConstraint.h │ │ │ │ ├── btContactSolverInfo.h │ │ │ │ ├── btFixedConstraint.h │ │ │ │ ├── btGearConstraint.h │ │ │ │ ├── btGeneric6DofConstraint.h │ │ │ │ ├── btGeneric6DofSpring2Constraint.h │ │ │ │ ├── btGeneric6DofSpringConstraint.h │ │ │ │ ├── btHinge2Constraint.h │ │ │ │ ├── btHingeConstraint.h │ │ │ │ ├── btJacobianEntry.h │ │ │ │ ├── btNNCGConstraintSolver.h │ │ │ │ ├── btPoint2PointConstraint.h │ │ │ │ ├── btSequentialImpulseConstraintSolver.h │ │ │ │ ├── btSequentialImpulseConstraintSolverMt.h │ │ │ │ ├── btSliderConstraint.h │ │ │ │ ├── btSolve2LinearConstraint.h │ │ │ │ ├── btSolverBody.h │ │ │ │ ├── btSolverConstraint.h │ │ │ │ ├── btTypedConstraint.h │ │ │ │ └── btUniversalConstraint.h │ │ │ ├── Dynamics/ │ │ │ │ ├── btActionInterface.h │ │ │ │ ├── btDiscreteDynamicsWorld.h │ │ │ │ ├── btDiscreteDynamicsWorldMt.h │ │ │ │ ├── btDynamicsWorld.h │ │ │ │ ├── btRigidBody.h │ │ │ │ ├── btSimpleDynamicsWorld.h │ │ │ │ └── btSimulationIslandManagerMt.h │ │ │ └── Vehicle/ │ │ │ ├── btRaycastVehicle.h │ │ │ ├── btVehicleRaycaster.h │ │ │ └── btWheelInfo.h │ │ ├── LinearMath/ │ │ │ ├── TaskScheduler/ │ │ │ │ └── btThreadSupportInterface.h │ │ │ ├── btAabbUtil2.h │ │ │ ├── btAlignedAllocator.h │ │ │ ├── btAlignedObjectArray.h │ │ │ ├── btConvexHull.h │ │ │ ├── btConvexHullComputer.h │ │ │ ├── btCpuFeatureUtility.h │ │ │ ├── btDefaultMotionState.h │ │ │ ├── btGeometryUtil.h │ │ │ ├── btGrahamScan2dConvexHull.h │ │ │ ├── btHashMap.h │ │ │ ├── btIDebugDraw.h │ │ │ ├── btImplicitQRSVD.h │ │ │ ├── btList.h │ │ │ ├── btMatrix3x3.h │ │ │ ├── btMatrixX.h │ │ │ ├── btMinMax.h │ │ │ ├── btModifiedGramSchmidt.h │ │ │ ├── btMotionState.h │ │ │ ├── btPolarDecomposition.h │ │ │ ├── btPoolAllocator.h │ │ │ ├── btQuadWord.h │ │ │ ├── btQuaternion.h │ │ │ ├── btQuickprof.h │ │ │ ├── btRandom.h │ │ │ ├── btReducedVector.h │ │ │ ├── btScalar.h │ │ │ ├── btSerializer.h │ │ │ ├── btSpatialAlgebra.h │ │ │ ├── btStackAlloc.h │ │ │ ├── btThreads.h │ │ │ ├── btTransform.h │ │ │ ├── btTransformUtil.h │ │ │ └── btVector3.h │ │ ├── btBulletCollisionCommon.h │ │ └── btBulletDynamicsCommon.h │ ├── curl/ │ │ ├── curl.h │ │ ├── curlver.h │ │ ├── easy.h │ │ ├── mprintf.h │ │ ├── multi.h │ │ ├── options.h │ │ ├── stdcheaders.h │ │ ├── system.h │ │ ├── typecheck-gcc.h │ │ └── urlapi.h │ ├── glad/ │ │ ├── glad.c │ │ ├── glad.h │ │ ├── glad_gles3.c │ │ ├── glad_gles3.h │ │ ├── glad_old.c │ │ ├── glad_old.h │ │ ├── khrplatform.h │ │ └── khrplatform_gles3.h │ ├── glfw/ │ │ ├── glfw3.h │ │ └── glfw3native.h │ ├── glm/ │ │ ├── LICENSE │ │ ├── common.hpp │ │ ├── detail/ │ │ │ ├── _features.hpp │ │ │ ├── _fixes.hpp │ │ │ ├── _noise.hpp │ │ │ ├── _swizzle.hpp │ │ │ ├── _swizzle_func.hpp │ │ │ ├── _vectorize.hpp │ │ │ ├── compute_common.hpp │ │ │ ├── compute_vector_relational.hpp │ │ │ ├── func_common.inl │ │ │ ├── func_common_simd.inl │ │ │ ├── func_exponential.inl │ │ │ ├── func_exponential_simd.inl │ │ │ ├── func_geometric.inl │ │ │ ├── func_geometric_simd.inl │ │ │ ├── func_integer.inl │ │ │ ├── func_integer_simd.inl │ │ │ ├── func_matrix.inl │ │ │ ├── func_matrix_simd.inl │ │ │ ├── func_packing.inl │ │ │ ├── func_packing_simd.inl │ │ │ ├── func_trigonometric.inl │ │ │ ├── func_trigonometric_simd.inl │ │ │ ├── func_vector_relational.inl │ │ │ ├── func_vector_relational_simd.inl │ │ │ ├── glm.cpp │ │ │ ├── qualifier.hpp │ │ │ ├── setup.hpp │ │ │ ├── type_float.hpp │ │ │ ├── type_half.hpp │ │ │ ├── type_half.inl │ │ │ ├── type_mat2x2.hpp │ │ │ ├── type_mat2x2.inl │ │ │ ├── type_mat2x3.hpp │ │ │ ├── type_mat2x3.inl │ │ │ ├── type_mat2x4.hpp │ │ │ ├── type_mat2x4.inl │ │ │ ├── type_mat3x2.hpp │ │ │ ├── type_mat3x2.inl │ │ │ ├── type_mat3x3.hpp │ │ │ ├── type_mat3x3.inl │ │ │ ├── type_mat3x4.hpp │ │ │ ├── type_mat3x4.inl │ │ │ ├── type_mat4x2.hpp │ │ │ ├── type_mat4x2.inl │ │ │ ├── type_mat4x3.hpp │ │ │ ├── type_mat4x3.inl │ │ │ ├── type_mat4x4.hpp │ │ │ ├── type_mat4x4.inl │ │ │ ├── type_mat4x4_simd.inl │ │ │ ├── type_quat.hpp │ │ │ ├── type_quat.inl │ │ │ ├── type_quat_simd.inl │ │ │ ├── type_vec1.hpp │ │ │ ├── type_vec1.inl │ │ │ ├── type_vec2.hpp │ │ │ ├── type_vec2.inl │ │ │ ├── type_vec3.hpp │ │ │ ├── type_vec3.inl │ │ │ ├── type_vec4.hpp │ │ │ ├── type_vec4.inl │ │ │ └── type_vec4_simd.inl │ │ ├── exponential.hpp │ │ ├── ext/ │ │ │ ├── matrix_clip_space.hpp │ │ │ ├── matrix_clip_space.inl │ │ │ ├── matrix_common.hpp │ │ │ ├── matrix_common.inl │ │ │ ├── matrix_double2x2.hpp │ │ │ ├── matrix_double2x2_precision.hpp │ │ │ ├── matrix_double2x3.hpp │ │ │ ├── matrix_double2x3_precision.hpp │ │ │ ├── matrix_double2x4.hpp │ │ │ ├── matrix_double2x4_precision.hpp │ │ │ ├── matrix_double3x2.hpp │ │ │ ├── matrix_double3x2_precision.hpp │ │ │ ├── matrix_double3x3.hpp │ │ │ ├── matrix_double3x3_precision.hpp │ │ │ ├── matrix_double3x4.hpp │ │ │ ├── matrix_double3x4_precision.hpp │ │ │ ├── matrix_double4x2.hpp │ │ │ ├── matrix_double4x2_precision.hpp │ │ │ ├── matrix_double4x3.hpp │ │ │ ├── matrix_double4x3_precision.hpp │ │ │ ├── matrix_double4x4.hpp │ │ │ ├── matrix_double4x4_precision.hpp │ │ │ ├── matrix_float2x2.hpp │ │ │ ├── matrix_float2x2_precision.hpp │ │ │ ├── matrix_float2x3.hpp │ │ │ ├── matrix_float2x3_precision.hpp │ │ │ ├── matrix_float2x4.hpp │ │ │ ├── matrix_float2x4_precision.hpp │ │ │ ├── matrix_float3x2.hpp │ │ │ ├── matrix_float3x2_precision.hpp │ │ │ ├── matrix_float3x3.hpp │ │ │ ├── matrix_float3x3_precision.hpp │ │ │ ├── matrix_float3x4.hpp │ │ │ ├── matrix_float3x4_precision.hpp │ │ │ ├── matrix_float4x2.hpp │ │ │ ├── matrix_float4x2_precision.hpp │ │ │ ├── matrix_float4x3.hpp │ │ │ ├── matrix_float4x3_precision.hpp │ │ │ ├── matrix_float4x4.hpp │ │ │ ├── matrix_float4x4_precision.hpp │ │ │ ├── matrix_projection.hpp │ │ │ ├── matrix_projection.inl │ │ │ ├── matrix_relational.hpp │ │ │ ├── matrix_relational.inl │ │ │ ├── matrix_transform.hpp │ │ │ ├── matrix_transform.inl │ │ │ ├── quaternion_common.hpp │ │ │ ├── quaternion_common.inl │ │ │ ├── quaternion_common_simd.inl │ │ │ ├── quaternion_double.hpp │ │ │ ├── quaternion_double_precision.hpp │ │ │ ├── quaternion_exponential.hpp │ │ │ ├── quaternion_exponential.inl │ │ │ ├── quaternion_float.hpp │ │ │ ├── quaternion_float_precision.hpp │ │ │ ├── quaternion_geometric.hpp │ │ │ ├── quaternion_geometric.inl │ │ │ ├── quaternion_relational.hpp │ │ │ ├── quaternion_relational.inl │ │ │ ├── quaternion_transform.hpp │ │ │ ├── quaternion_transform.inl │ │ │ ├── quaternion_trigonometric.hpp │ │ │ ├── quaternion_trigonometric.inl │ │ │ ├── scalar_common.hpp │ │ │ ├── scalar_common.inl │ │ │ ├── scalar_constants.hpp │ │ │ ├── scalar_constants.inl │ │ │ ├── scalar_int_sized.hpp │ │ │ ├── scalar_integer.hpp │ │ │ ├── scalar_integer.inl │ │ │ ├── scalar_relational.hpp │ │ │ ├── scalar_relational.inl │ │ │ ├── scalar_uint_sized.hpp │ │ │ ├── scalar_ulp.hpp │ │ │ ├── scalar_ulp.inl │ │ │ ├── vector_bool1.hpp │ │ │ ├── vector_bool1_precision.hpp │ │ │ ├── vector_bool2.hpp │ │ │ ├── vector_bool2_precision.hpp │ │ │ ├── vector_bool3.hpp │ │ │ ├── vector_bool3_precision.hpp │ │ │ ├── vector_bool4.hpp │ │ │ ├── vector_bool4_precision.hpp │ │ │ ├── vector_common.hpp │ │ │ ├── vector_common.inl │ │ │ ├── vector_double1.hpp │ │ │ ├── vector_double1_precision.hpp │ │ │ ├── vector_double2.hpp │ │ │ ├── vector_double2_precision.hpp │ │ │ ├── vector_double3.hpp │ │ │ ├── vector_double3_precision.hpp │ │ │ ├── vector_double4.hpp │ │ │ ├── vector_double4_precision.hpp │ │ │ ├── vector_float1.hpp │ │ │ ├── vector_float1_precision.hpp │ │ │ ├── vector_float2.hpp │ │ │ ├── vector_float2_precision.hpp │ │ │ ├── vector_float3.hpp │ │ │ ├── vector_float3_precision.hpp │ │ │ ├── vector_float4.hpp │ │ │ ├── vector_float4_precision.hpp │ │ │ ├── vector_int1.hpp │ │ │ ├── vector_int1_precision.hpp │ │ │ ├── vector_int2.hpp │ │ │ ├── vector_int2_precision.hpp │ │ │ ├── vector_int3.hpp │ │ │ ├── vector_int3_precision.hpp │ │ │ ├── vector_int4.hpp │ │ │ ├── vector_int4_precision.hpp │ │ │ ├── vector_integer.hpp │ │ │ ├── vector_integer.inl │ │ │ ├── vector_relational.hpp │ │ │ ├── vector_relational.inl │ │ │ ├── vector_uint1.hpp │ │ │ ├── vector_uint1_precision.hpp │ │ │ ├── vector_uint2.hpp │ │ │ ├── vector_uint2_precision.hpp │ │ │ ├── vector_uint3.hpp │ │ │ ├── vector_uint3_precision.hpp │ │ │ ├── vector_uint4.hpp │ │ │ ├── vector_uint4_precision.hpp │ │ │ ├── vector_ulp.hpp │ │ │ └── vector_ulp.inl │ │ ├── ext.hpp │ │ ├── fwd.hpp │ │ ├── geometric.hpp │ │ ├── glm.hpp │ │ ├── gtc/ │ │ │ ├── bitfield.hpp │ │ │ ├── bitfield.inl │ │ │ ├── color_space.hpp │ │ │ ├── color_space.inl │ │ │ ├── constants.hpp │ │ │ ├── constants.inl │ │ │ ├── epsilon.hpp │ │ │ ├── epsilon.inl │ │ │ ├── integer.hpp │ │ │ ├── integer.inl │ │ │ ├── matrix_access.hpp │ │ │ ├── matrix_access.inl │ │ │ ├── matrix_integer.hpp │ │ │ ├── matrix_inverse.hpp │ │ │ ├── matrix_inverse.inl │ │ │ ├── matrix_transform.hpp │ │ │ ├── matrix_transform.inl │ │ │ ├── noise.hpp │ │ │ ├── noise.inl │ │ │ ├── packing.hpp │ │ │ ├── packing.inl │ │ │ ├── quaternion.hpp │ │ │ ├── quaternion.inl │ │ │ ├── quaternion_simd.inl │ │ │ ├── random.hpp │ │ │ ├── random.inl │ │ │ ├── reciprocal.hpp │ │ │ ├── reciprocal.inl │ │ │ ├── round.hpp │ │ │ ├── round.inl │ │ │ ├── type_aligned.hpp │ │ │ ├── type_precision.hpp │ │ │ ├── type_precision.inl │ │ │ ├── type_ptr.hpp │ │ │ ├── type_ptr.inl │ │ │ ├── ulp.hpp │ │ │ ├── ulp.inl │ │ │ └── vec1.hpp │ │ ├── gtx/ │ │ │ ├── associated_min_max.hpp │ │ │ ├── associated_min_max.inl │ │ │ ├── bit.hpp │ │ │ ├── bit.inl │ │ │ ├── closest_point.hpp │ │ │ ├── closest_point.inl │ │ │ ├── color_encoding.hpp │ │ │ ├── color_encoding.inl │ │ │ ├── color_space.hpp │ │ │ ├── color_space.inl │ │ │ ├── color_space_YCoCg.hpp │ │ │ ├── color_space_YCoCg.inl │ │ │ ├── common.hpp │ │ │ ├── common.inl │ │ │ ├── compatibility.hpp │ │ │ ├── compatibility.inl │ │ │ ├── component_wise.hpp │ │ │ ├── component_wise.inl │ │ │ ├── dual_quaternion.hpp │ │ │ ├── dual_quaternion.inl │ │ │ ├── easing.hpp │ │ │ ├── easing.inl │ │ │ ├── euler_angles.hpp │ │ │ ├── euler_angles.inl │ │ │ ├── extend.hpp │ │ │ ├── extend.inl │ │ │ ├── extended_min_max.hpp │ │ │ ├── extended_min_max.inl │ │ │ ├── exterior_product.hpp │ │ │ ├── exterior_product.inl │ │ │ ├── fast_exponential.hpp │ │ │ ├── fast_exponential.inl │ │ │ ├── fast_square_root.hpp │ │ │ ├── fast_square_root.inl │ │ │ ├── fast_trigonometry.hpp │ │ │ ├── fast_trigonometry.inl │ │ │ ├── float_notmalize.inl │ │ │ ├── functions.hpp │ │ │ ├── functions.inl │ │ │ ├── gradient_paint.hpp │ │ │ ├── gradient_paint.inl │ │ │ ├── handed_coordinate_space.hpp │ │ │ ├── handed_coordinate_space.inl │ │ │ ├── hash.hpp │ │ │ ├── hash.inl │ │ │ ├── integer.hpp │ │ │ ├── integer.inl │ │ │ ├── intersect.hpp │ │ │ ├── intersect.inl │ │ │ ├── io.hpp │ │ │ ├── io.inl │ │ │ ├── log_base.hpp │ │ │ ├── log_base.inl │ │ │ ├── matrix_cross_product.hpp │ │ │ ├── matrix_cross_product.inl │ │ │ ├── matrix_decompose.hpp │ │ │ ├── matrix_decompose.inl │ │ │ ├── matrix_factorisation.hpp │ │ │ ├── matrix_factorisation.inl │ │ │ ├── matrix_interpolation.hpp │ │ │ ├── matrix_interpolation.inl │ │ │ ├── matrix_major_storage.hpp │ │ │ ├── matrix_major_storage.inl │ │ │ ├── matrix_operation.hpp │ │ │ ├── matrix_operation.inl │ │ │ ├── matrix_query.hpp │ │ │ ├── matrix_query.inl │ │ │ ├── matrix_transform_2d.hpp │ │ │ ├── matrix_transform_2d.inl │ │ │ ├── mixed_product.hpp │ │ │ ├── mixed_product.inl │ │ │ ├── norm.hpp │ │ │ ├── norm.inl │ │ │ ├── normal.hpp │ │ │ ├── normal.inl │ │ │ ├── normalize_dot.hpp │ │ │ ├── normalize_dot.inl │ │ │ ├── number_precision.hpp │ │ │ ├── number_precision.inl │ │ │ ├── optimum_pow.hpp │ │ │ ├── optimum_pow.inl │ │ │ ├── orthonormalize.hpp │ │ │ ├── orthonormalize.inl │ │ │ ├── perpendicular.hpp │ │ │ ├── perpendicular.inl │ │ │ ├── polar_coordinates.hpp │ │ │ ├── polar_coordinates.inl │ │ │ ├── projection.hpp │ │ │ ├── projection.inl │ │ │ ├── quaternion.hpp │ │ │ ├── quaternion.inl │ │ │ ├── range.hpp │ │ │ ├── raw_data.hpp │ │ │ ├── raw_data.inl │ │ │ ├── rotate_normalized_axis.hpp │ │ │ ├── rotate_normalized_axis.inl │ │ │ ├── rotate_vector.hpp │ │ │ ├── rotate_vector.inl │ │ │ ├── scalar_multiplication.hpp │ │ │ ├── scalar_relational.hpp │ │ │ ├── scalar_relational.inl │ │ │ ├── spline.hpp │ │ │ ├── spline.inl │ │ │ ├── std_based_type.hpp │ │ │ ├── std_based_type.inl │ │ │ ├── string_cast.hpp │ │ │ ├── string_cast.inl │ │ │ ├── texture.hpp │ │ │ ├── texture.inl │ │ │ ├── transform.hpp │ │ │ ├── transform.inl │ │ │ ├── transform2.hpp │ │ │ ├── transform2.inl │ │ │ ├── type_aligned.hpp │ │ │ ├── type_aligned.inl │ │ │ ├── type_trait.hpp │ │ │ ├── type_trait.inl │ │ │ ├── vec_swizzle.hpp │ │ │ ├── vector_angle.hpp │ │ │ ├── vector_angle.inl │ │ │ ├── vector_query.hpp │ │ │ ├── vector_query.inl │ │ │ ├── wrap.hpp │ │ │ └── wrap.inl │ │ ├── integer.hpp │ │ ├── mat2x2.hpp │ │ ├── mat2x3.hpp │ │ ├── mat2x4.hpp │ │ ├── mat3x2.hpp │ │ ├── mat3x3.hpp │ │ ├── mat3x4.hpp │ │ ├── mat4x2.hpp │ │ ├── mat4x3.hpp │ │ ├── mat4x4.hpp │ │ ├── matrix.hpp │ │ ├── packing.hpp │ │ ├── simd/ │ │ │ ├── common.h │ │ │ ├── exponential.h │ │ │ ├── geometric.h │ │ │ ├── integer.h │ │ │ ├── matrix.h │ │ │ ├── neon.h │ │ │ ├── packing.h │ │ │ ├── platform.h │ │ │ ├── trigonometric.h │ │ │ └── vector_relational.h │ │ ├── trigonometric.hpp │ │ ├── vec2.hpp │ │ ├── vec3.hpp │ │ ├── vec4.hpp │ │ └── vector_relational.hpp │ ├── lua/ │ │ ├── lauxlib.h │ │ ├── lua.h │ │ ├── lua.hpp │ │ ├── luaconf.h │ │ └── lualib.h │ ├── miniz.c │ ├── miniz.h │ ├── murmur.h │ ├── openal/ │ │ ├── LICENSE_OPENAL │ │ ├── al.h │ │ └── alc.h │ ├── portaudio/ │ │ └── portaudio.h │ ├── sdl2/ │ │ ├── SDL.h │ │ ├── SDL_assert.h │ │ ├── SDL_atomic.h │ │ ├── SDL_audio.h │ │ ├── SDL_bits.h │ │ ├── SDL_blendmode.h │ │ ├── SDL_clipboard.h │ │ ├── SDL_config.h │ │ ├── SDL_copying.h │ │ ├── SDL_cpuinfo.h │ │ ├── SDL_egl.h │ │ ├── SDL_endian.h │ │ ├── SDL_error.h │ │ ├── SDL_events.h │ │ ├── SDL_filesystem.h │ │ ├── SDL_gamecontroller.h │ │ ├── SDL_gesture.h │ │ ├── SDL_guid.h │ │ ├── SDL_haptic.h │ │ ├── SDL_hidapi.h │ │ ├── SDL_hints.h │ │ ├── SDL_joystick.h │ │ ├── SDL_keyboard.h │ │ ├── SDL_keycode.h │ │ ├── SDL_loadso.h │ │ ├── SDL_locale.h │ │ ├── SDL_log.h │ │ ├── SDL_main.h │ │ ├── SDL_messagebox.h │ │ ├── SDL_metal.h │ │ ├── SDL_misc.h │ │ ├── SDL_mouse.h │ │ ├── SDL_mutex.h │ │ ├── SDL_name.h │ │ ├── SDL_opengl.h │ │ ├── SDL_opengl_glext.h │ │ ├── SDL_opengles.h │ │ ├── SDL_opengles2.h │ │ ├── SDL_opengles2_gl2.h │ │ ├── SDL_opengles2_gl2ext.h │ │ ├── SDL_opengles2_gl2platform.h │ │ ├── SDL_opengles2_khrplatform.h │ │ ├── SDL_pixels.h │ │ ├── SDL_platform.h │ │ ├── SDL_power.h │ │ ├── SDL_quit.h │ │ ├── SDL_rect.h │ │ ├── SDL_render.h │ │ ├── SDL_revision.h │ │ ├── SDL_rwops.h │ │ ├── SDL_scancode.h │ │ ├── SDL_sensor.h │ │ ├── SDL_shape.h │ │ ├── SDL_stdinc.h │ │ ├── SDL_surface.h │ │ ├── SDL_system.h │ │ ├── SDL_syswm.h │ │ ├── SDL_test.h │ │ ├── SDL_test_assert.h │ │ ├── SDL_test_common.h │ │ ├── SDL_test_compare.h │ │ ├── SDL_test_crc32.h │ │ ├── SDL_test_font.h │ │ ├── SDL_test_fuzzer.h │ │ ├── SDL_test_harness.h │ │ ├── SDL_test_images.h │ │ ├── SDL_test_log.h │ │ ├── SDL_test_md5.h │ │ ├── SDL_test_memory.h │ │ ├── SDL_test_random.h │ │ ├── SDL_thread.h │ │ ├── SDL_timer.h │ │ ├── SDL_touch.h │ │ ├── SDL_types.h │ │ ├── SDL_version.h │ │ ├── SDL_video.h │ │ ├── SDL_vulkan.h │ │ ├── begin_code.h │ │ └── close_code.h │ ├── stb_image.h │ ├── stb_image_write.h │ ├── stb_vorbis.c │ ├── xatlas.cpp │ └── xatlas.h ├── libtramsdk.a ├── maketool.ini ├── project.cfg ├── saves/ │ └── aaa.cfg ├── scripts/ │ ├── api.lua │ ├── bepis.lua │ └── init.lua ├── shaders/ │ ├── gles3/ │ │ ├── 1normal_static.frag │ │ ├── 1normal_static.vert │ │ ├── bright_static.frag │ │ ├── glyph.frag │ │ ├── glyph.vert │ │ ├── line.frag │ │ ├── line.vert │ │ ├── normal_dynamic.frag │ │ ├── normal_dynamic.vert │ │ ├── normal_dynamic_alpha.frag │ │ ├── normal_sprite.frag │ │ ├── normal_sprite.vert │ │ ├── normal_static.frag │ │ ├── normal_static.vert │ │ ├── normal_static_alpha.frag │ │ ├── normal_water.frag │ │ ├── poopwater_static.vert │ │ ├── text.frag │ │ └── text.vert │ └── opengl4/ │ ├── glyph.frag │ ├── glyph.vert │ ├── line.frag │ ├── line.vert │ ├── normal_dynamic.frag │ ├── normal_dynamic.vert │ ├── normal_dynamic_alpha.frag │ ├── normal_dynamic_blend.frag │ ├── normal_sprite.frag │ ├── normal_sprite.vert │ ├── normal_static.frag │ ├── normal_static.vert │ ├── normal_static_alpha.frag │ ├── normal_static_blend.frag │ ├── normal_water.frag │ ├── text.frag │ └── text.vert ├── src/ │ ├── audio/ │ │ ├── api.h │ │ ├── audio.cpp │ │ ├── audio.h │ │ ├── graph.cpp │ │ ├── graph.h │ │ ├── openal/ │ │ │ ├── openal.cpp │ │ │ └── openal.h │ │ ├── sound.cpp │ │ ├── sound.h │ │ ├── spatial/ │ │ │ ├── definitions.h │ │ │ ├── output.cpp │ │ │ ├── output.h │ │ │ ├── pathtracer.cpp │ │ │ ├── pathtracer.h │ │ │ ├── spatial.cpp │ │ │ └── spatial.h │ │ └── template/ │ │ └── template.cpp │ ├── components/ │ │ ├── animation.cpp │ │ ├── animation.h │ │ ├── audio.cpp │ │ ├── audio.h │ │ ├── controller.cpp │ │ ├── controller.h │ │ ├── decal.cpp │ │ ├── decal.h │ │ ├── light.cpp │ │ ├── light.h │ │ ├── mesh.cpp │ │ ├── mesh.h │ │ ├── particle.cpp │ │ ├── particle.h │ │ ├── physics.cpp │ │ ├── physics.h │ │ ├── player.cpp │ │ ├── player.h │ │ ├── render.cpp │ │ ├── render.h │ │ ├── sprite.cpp │ │ ├── sprite.h │ │ ├── template.h │ │ ├── trigger.cpp │ │ └── trigger.h │ ├── config.h │ ├── entities/ │ │ ├── crate.cpp │ │ ├── crate.h │ │ ├── decoration.cpp │ │ ├── decoration.h │ │ ├── light.cpp │ │ ├── light.h │ │ ├── marker.cpp │ │ ├── marker.h │ │ ├── player.cpp │ │ ├── player.h │ │ ├── script.cpp │ │ ├── script.h │ │ ├── sound.cpp │ │ ├── sound.h │ │ ├── staticworldobject.cpp │ │ ├── staticworldobject.h │ │ ├── trigger.cpp │ │ └── trigger.h │ ├── extensions/ │ │ ├── camera/ │ │ │ ├── camera.cpp │ │ │ ├── camera.h │ │ │ ├── firstperson.cpp │ │ │ ├── firstperson.h │ │ │ ├── following.cpp │ │ │ ├── following.h │ │ │ ├── fpscamera.cpp │ │ │ ├── fpscamera.h │ │ │ ├── thirdperson.cpp │ │ │ └── thirdperson.h │ │ ├── file/ │ │ │ ├── archive.cpp │ │ │ ├── archive.h │ │ │ ├── http.cpp │ │ │ └── http.h │ │ ├── kitchensink/ │ │ │ ├── ai.cpp │ │ │ ├── ai.h │ │ │ ├── animationtable.cpp │ │ │ ├── animationtable.h │ │ │ ├── attributes.cpp │ │ │ ├── attributes.h │ │ │ ├── character.cpp │ │ │ ├── character.h │ │ │ ├── dialog.cpp │ │ │ ├── dialog.h │ │ │ ├── entities.cpp │ │ │ ├── entities.h │ │ │ ├── imageassembly.cpp │ │ │ ├── imageassembly.h │ │ │ ├── inventory.cpp │ │ │ ├── inventory.h │ │ │ ├── kitchensink.cpp │ │ │ ├── kitchensink.h │ │ │ ├── menu.cpp │ │ │ ├── menu.h │ │ │ ├── probe.cpp │ │ │ ├── probe.h │ │ │ ├── quest.cpp │ │ │ ├── quest.h │ │ │ ├── soundtable.cpp │ │ │ └── soundtable.h │ │ ├── menu/ │ │ │ ├── debug.cpp │ │ │ ├── debug.h │ │ │ ├── menu.cpp │ │ │ ├── menu.h │ │ │ ├── system.cpp │ │ │ └── system.h │ │ ├── meshtools/ │ │ │ ├── primitives.cpp │ │ │ └── primitives.h │ │ └── scripting/ │ │ ├── lua.cpp │ │ └── lua.h │ ├── framework/ │ │ ├── async.cpp │ │ ├── async.h │ │ ├── core.cpp │ │ ├── core.h │ │ ├── entity.cpp │ │ ├── entity.h │ │ ├── entitycomponent.cpp │ │ ├── entitycomponent.h │ │ ├── event.cpp │ │ ├── event.h │ │ ├── file.cpp │ │ ├── file.h │ │ ├── graph.cpp │ │ ├── graph.h │ │ ├── gui.cpp │ │ ├── gui.h │ │ ├── language.cpp │ │ ├── language.h │ │ ├── loader.cpp │ │ ├── loader.h │ │ ├── logging.cpp │ │ ├── logging.h │ │ ├── math.cpp │ │ ├── math.h │ │ ├── message.cpp │ │ ├── message.h │ │ ├── navmesh.cpp │ │ ├── navmesh.h │ │ ├── path.cpp │ │ ├── path.h │ │ ├── resource.h │ │ ├── script.cpp │ │ ├── script.h │ │ ├── serialization.h │ │ ├── settings.cpp │ │ ├── settings.h │ │ ├── signal.cpp │ │ ├── signal.h │ │ ├── stats.cpp │ │ ├── stats.h │ │ ├── system.cpp │ │ ├── system.h │ │ ├── transition.cpp │ │ ├── transition.h │ │ ├── type.cpp │ │ ├── type.h │ │ ├── ui.cpp │ │ ├── ui.h │ │ ├── uid.cpp │ │ ├── uid.h │ │ ├── value.h │ │ ├── worldcell.cpp │ │ └── worldcell.h │ ├── info.dox │ ├── main.cpp │ ├── physics/ │ │ ├── api.h │ │ ├── bullet/ │ │ │ ├── actions.h │ │ │ ├── bullet.cpp │ │ │ └── debugdrawer.h │ │ ├── collisionmodel.cpp │ │ ├── collisionmodel.h │ │ ├── collisionshape.h │ │ ├── physics.cpp │ │ ├── physics.h │ │ └── template/ │ │ └── template.cpp │ ├── platform/ │ │ ├── api.h │ │ ├── file.cpp │ │ ├── file.h │ │ ├── glfw/ │ │ │ └── glfw.cpp │ │ ├── image.cpp │ │ ├── image.h │ │ ├── other.cpp │ │ ├── other.h │ │ ├── platform.h │ │ ├── sdl/ │ │ │ └── sdl.cpp │ │ ├── terminal.cpp │ │ ├── terminal.h │ │ └── utils.cpp │ ├── render/ │ │ ├── animation.cpp │ │ ├── animation.h │ │ ├── api.h │ │ ├── direct3d/ │ │ │ ├── direct3d.h │ │ │ └── renderer.cpp │ │ ├── error.cpp │ │ ├── error.h │ │ ├── light.cpp │ │ ├── light.h │ │ ├── material.cpp │ │ ├── material.h │ │ ├── model.cpp │ │ ├── model.h │ │ ├── opengl/ │ │ │ ├── buffer.cpp │ │ │ ├── buffer.h │ │ │ ├── drawlist.cpp │ │ │ ├── drawlist.h │ │ │ ├── light.cpp │ │ │ ├── light.h │ │ │ ├── material.cpp │ │ │ ├── material.h │ │ │ ├── renderer.cpp │ │ │ ├── renderer.h │ │ │ ├── shader.cpp │ │ │ ├── shader.h │ │ │ ├── sprite.cpp │ │ │ ├── sprite.h │ │ │ ├── texture.cpp │ │ │ └── texture.h │ │ ├── raytrace/ │ │ │ ├── buffer.cpp │ │ │ ├── buffer.h │ │ │ ├── drawlist.cpp │ │ │ ├── drawlist.h │ │ │ ├── light.cpp │ │ │ ├── light.h │ │ │ ├── material.cpp │ │ │ ├── material.h │ │ │ ├── math.h │ │ │ ├── raytrace.cpp │ │ │ ├── raytrace.h │ │ │ ├── sprite.cpp │ │ │ └── sprite.h │ │ ├── render.cpp │ │ ├── render.h │ │ ├── renderer.cpp │ │ ├── renderer.h │ │ ├── scene.cpp │ │ ├── scene.h │ │ ├── software/ │ │ │ ├── software.cpp │ │ │ └── software.h │ │ ├── sprite.cpp │ │ ├── sprite.h │ │ ├── vertices.cpp │ │ └── vertices.h │ └── templates/ │ ├── aabb.h │ ├── hashmap.h │ ├── macros.h │ ├── octree.h │ ├── pool.h │ ├── queue.h │ ├── spinlock.h │ ├── stack.h │ ├── stackpool.h │ └── test.h └── tests/ ├── README.md ├── aabb_tree.cpp ├── core.cpp ├── event.cpp ├── file.cpp ├── hashmap.cpp ├── octree.cpp ├── pool.cpp ├── queue.cpp ├── settings.cpp ├── stack.cpp ├── stackpool.cpp ├── uid.cpp └── value.cpp ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitattributes ================================================ # Auto detect text files and perform LF normalization * text=auto ================================================ FILE: .gitignore ================================================ # Prerequisites *.d # Compiled Object files *.slo *.lo *.o *.obj # Precompiled Headers *.gch *.pch # Compiled Dynamic libraries *.so *.dylib #*.dll # Fortran module files *.mod *.smod # Compiled Static libraries *.lai *.la #*.a *.lib # Executables *.exe *.out *.app build #libraries/* tram-sdk-cppcheck-build-dir cppcheck Makefile # Codelite IDE files compile_flags.txt tram-sdk.cppcheck tram-sdk.mk tram-sdk.project ================================================ FILE: CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.2) project(tramsdk VERSION 0.1.0) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) # +----------------------------------------------------------------------------+ # | | # | CONFIGURATION | # | | # +----------------------------------------------------------------------------+ # can select only one option(RENDER_OPENGL "Use the OpenGL renderer (default)" ON) option(RENDER_DIRECT3D "Use the Direct3D renderer" OFF) option(RENDER_SOFTWARE "Use Software rendering" OFF) # not really an option option(PHYSICS_BULLET "Use the Bullet physics (default)" ON) # can select only one option(PLATFORM_GLFW "Use the GLFW platform (default)" ON) option(PLATFORM_SDL "Use the SDL platform" OFF) # can select only one # only openal actually works option(AUDIO_OPENAL "Use the OpenAL backend (default)" ON) option(AUDIO_SPATIAL "Use the Spatial backend" OFF) option(AUDIO_TEMPLATE "Use the Template backend" OFF) # can select whichever option(EXTENSION_CAMERA "Use the Camera extension" ON) option(EXTENSION_MENU "Use the Menu extension" ON) option(EXTENSION_LUA "Use the Lua extension" ON) option(EXTENSION_KITCHENSINK "Use the Kitchensink extension" ON) # +----------------------------------------------------------------------------+ # | | # | FRAMEWORK | # | | # +----------------------------------------------------------------------------+ file(GLOB_RECURSE SOURCES ${PROJECT_SOURCE_DIR}/src/components/*.cpp ${PROJECT_SOURCE_DIR}/src/framework/*.cpp ${PROJECT_SOURCE_DIR}/src/entities/*.cpp) # +----------------------------------------------------------------------------+ # | | # | AUDIO | # | | # +----------------------------------------------------------------------------+ file(GLOB AUDIO_SOURCES ${PROJECT_SOURCE_DIR}/src/audio/*.cpp) list(APPEND SOURCES ${AUDIO_SOURCES}) if(AUDIO_OPENAL) message(STATUS "Using OpenAL audio backend") if(AUDIO_SPATIAL OR AUDIO_TEMPLATE) message(FATAL_ERROR "Multiple audio backends selected!") endif() file(GLOB_RECURSE OPENAL_SOURCES ${PROJECT_SOURCE_DIR}/src/audio/openal/*.cpp) list(APPEND SOURCES ${OPENAL_SOURCES}) endif() if(AUDIO_SPATIAL) message(STATUS "Using OpenGL rendering backend") if(AUDIO_OPENAL OR AUDIO_TEMPLATE) message(FATAL_ERROR "Multiple audio backends selected!") endif() file(GLOB_RECURSE SPATIAL_SOURCES ${PROJECT_SOURCE_DIR}/src/audio/spatial/*.cpp) list(APPEND SOURCES ${SPATIAL_SOURCES}) endif() if(AUDIO_TEMPLATE) message(STATUS "Using OpenGL rendering backend") if(AUDIO_OPENAL OR AUDIO_SPATIAL) message(FATAL_ERROR "Multiple audio backends selected!") endif() file(GLOB_RECURSE AUDIO_TEMPLATE_SOURCES ${PROJECT_SOURCE_DIR}/src/audio/template/*.cpp) list(APPEND SOURCES ${AUDIO_TEMPLATE_SOURCES}) endif() # +----------------------------------------------------------------------------+ # | | # | PHYSICS | # | | # +----------------------------------------------------------------------------+ file(GLOB PHYSICS_SOURCES ${PROJECT_SOURCE_DIR}/src/physics/*.cpp) list(APPEND SOURCES ${PHYSICS_SOURCES}) if(PHYSICS_BULLET) message(STATUS "Using Bullet physics backend") include_directories(${PROJECT_SOURCE_DIR}/libraries/bullet) file(GLOB_RECURSE BULLET_SOURCES ${PROJECT_SOURCE_DIR}/src/physics/bullet/*.cpp) list(APPEND SOURCES ${BULLET_SOURCES}) endif() # +----------------------------------------------------------------------------+ # | | # | RENDER | # | | # +----------------------------------------------------------------------------+ file(GLOB RENDER_SOURCES ${PROJECT_SOURCE_DIR}/src/render/*.cpp) list(APPEND SOURCES ${RENDER_SOURCES}) if(RENDER_OPENGL) message(STATUS "Using OpenGL rendering backend") if(RENDER_DIRECT3D OR RENDER_SOFTWARE) message(FATAL_ERROR "Can't use Direct3D or Software, OpenGL already selected!") endif() file(GLOB_RECURSE OPENGL_SOURCES ${PROJECT_SOURCE_DIR}/src/render/opengl/*.cpp) list(APPEND SOURCES ${OPENGL_SOURCES}) endif() if(RENDER_DIRECT3D) message(STATUS "Using Direct3D rendering backend") # TODO: maybe add a check to check if this is not being compiled on Linux? if(RENDER_OPENGL OR RENDER_SOFTWARE) message(FATAL_ERROR "Can't use OpenGL or Software, Direct3D already selected!") endif() if(NOT PLATFORM_SDL) message(FATAL_ERROR "Direct3D render backend only works with SDL!") endif() file(GLOB_RECURSE DIRECT3D_SOURCES ${PROJECT_SOURCE_DIR}/src/render/direct3d/*.cpp) list(APPEND SOURCES ${DIRECT3D_SOURCES}) endif() if(RENDER_SOFTWARE) message(STATUS "Using Software rendering backend") if(RENDER_OPENGL OR RENDER_DIRECT3D) message(FATAL_ERROR "Can't use OpenGL or Direct3D, Software already selected!") endif() if(NOT PLATFORM_SDL) message(FATAL_ERROR "Software render backend only works with SDL!") endif() file(GLOB_RECURSE SOFTWARE_SOURCES ${PROJECT_SOURCE_DIR}/src/render/software/*.cpp) list(APPEND SOURCES ${SOFTWARE_SOURCES}) endif() # +----------------------------------------------------------------------------+ # | | # | PLATFORM | # | | # +----------------------------------------------------------------------------+ file(GLOB PLATFORM_SOURCES ${PROJECT_SOURCE_DIR}/src/platform/*.cpp) list(APPEND SOURCES ${PLATFORM_SOURCES}) if(PLATFORM_GLFW) message(STATUS "Using GLFW backend") if(PLATFORM_SDL) message(FATAL_ERROR "Can't use SDL, GLFW already selected!") endif() include_directories(${PROJECT_SOURCE_DIR}/libraries/glfw) file(GLOB_RECURSE GLFW_SOURCES ${PROJECT_SOURCE_DIR}/src/platform/glfw/*.cpp) list(APPEND SOURCES ${GLFW_SOURCES}) endif() if(PLATFORM_SDL) message(STATUS "Using SDL backend") if(PLATFORM_GLFW) message(FATAL_ERROR "Can't use GLFW, SDL already selected!") endif() include_directories(${PROJECT_SOURCE_DIR}/libraries/sdl2) file(GLOB_RECURSE SDL_SOURCES ${PROJECT_SOURCE_DIR}/src/platform/sdl/*.cpp) list(APPEND SOURCES ${SDL_SOURCES}) endif() # +----------------------------------------------------------------------------+ # | | # | EXTENSIONS | # | | # +----------------------------------------------------------------------------+ if(EXTENSION_CAMERA) message(STATUS "Using Camera extension") file(GLOB_RECURSE CAMERA_SOURCES ${PROJECT_SOURCE_DIR}/src/extensions/camera/*.cpp) list(APPEND SOURCES ${CAMERA_SOURCES}) endif() if(EXTENSION_MENU) message(STATUS "Using Menu extension") file(GLOB_RECURSE MENU_SOURCES ${PROJECT_SOURCE_DIR}/src/extensions/menu/*.cpp) list(APPEND SOURCES ${MENU_SOURCES}) endif() if(EXTENSION_LUA) message(STATUS "Using Lua extension") include_directories(${PROJECT_SOURCE_DIR}/libraries/lua) file(GLOB_RECURSE LUA_SOURCES ${PROJECT_SOURCE_DIR}/src/extensions/scripting/*.cpp) list(APPEND SOURCES ${LUA_SOURCES}) endif() if(EXTENSION_KITCHENSINK) message(STATUS "Using Kitchensink extension") file(GLOB_RECURSE KITCHENSINK_SOURCES ${PROJECT_SOURCE_DIR}/src/extensions/kitchensink/*.cpp) list(APPEND SOURCES ${KITCHENSINK_SOURCES}) endif() # +----------------------------------------------------------------------------+ # | | # | CONFIGURATION | # | | # +----------------------------------------------------------------------------+ include_directories(${PROJECT_SOURCE_DIR}/src) include_directories(${PROJECT_SOURCE_DIR}/libraries) # I think that glad is only needed on Windows? # TODO: check include_directories(${PROJECT_SOURCE_DIR}/libraries/glad) add_library(tramsdk STATIC ${SOURCES}) ================================================ FILE: LICENSE ================================================ MIT License Copyright (c) 2025 racenis Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================ # Tramway Drifting and Dungeon Exploration Simulator 2022 Software Development Kit ![Tramway Drifting and Dungeon Exploration Simulator 2022 logo](/docs/logo.gif) ![Software Development Kit logo](/docs/devkit.gif) It does what Godoesn't. I am not reinventing the wheel, I am disrupting the wheel industry. Free func_door included with every install! ![Screenshot11](/docs/screens/screen11.png) ## What's it Software library and tools for making the [Tramway Drifting and Dungeon Exploration Simulator 2022](https://racenis.itch.io/tramway-drifting-and-dungeon-exploration-simulator-2022) and similar applications. It's meant to work sort of like Quake, GoldSrc or Source engines, but it uses polygonal soup instead of BSPs and supports level streaming. ![EditingApp](/docs/images/etc/editingapp.png) ## Features - Polygonal soup graphics - Non-hierarchical scene ordering - Ambient lighting - Lambertian reflection - Light source attenuation - Colored lights and surfaces - Phong illumination - Point lights - Warn's lighting for directional lights - Level streaming - Allows use of Quake level editors to create level geometry ![Teapot](/docs/images/etc/teapot.gif) ### Platforms - Windows (XP SP3 or later) - Linux - Web browser (needs WebAssembly support) ### Requirements - Graphics card (optional) that supports either: - OpenGL 4.0 - WebGL 2.0 (for web builds) - Direct3D 9.0 - Decent CPU (at least Pentium 4) if using software rendering - Mouse and/or keyboard - Will probably add controllers and other input devices later - GCC/G++ 12.4.0 or MinGW/G++ 12.4.0 - Clang should work too - Don't know about MSVC++ - If it supports C++20, it should work - Python 3.8 for scripts - Blender 2.83 for 3D model and animation exporters ![Demo1](/docs/demo1.gif) ### Links More information can be found on the [github.io page](https://racenis.github.io/tram-sdk/). #### Demos - FPS ([source code](https://github.com/racenis/jam-game) / [itch.io](https://racenis.itch.io/dziiviibas-partikula)) - Platformer ([source code](https://github.com/racenis/jam-game-ii) / [itch.io / web demo](https://racenis.itch.io/sulas-glaaze)) - Adventure ([source code](https://github.com/racenis/jam-game-iii) / [itch.io / web demo](https://racenis.itch.io/froggy-garden)) #### Other tools - [Applets](https://github.com/racenis/tram-applets), i.e. GUI data editors - [Level editor](https://github.com/racenis/tram-world-editor) for editing worldcells #### Templates - [Teapot explorer](https://github.com/racenis/tram-template), main template project #### Examples - Pongpot ([source code](https://github.com/racenis/tram-example/tree/main/example-ping-pong)) - ([All examples](https://github.com/racenis/tram-example)) ![PongPot](/docs/images/etc/pongpot.gif) ### Building #### Windows / MinGW Edit the settings found in `maketool.ini`. Set the platform to WIN32 or WIN64, depending on your compiler version. If you compile dependencies yourself, place them in the `/libraries/binaries/win32` or `/libraries/binaries/win64` directories. Set repository root as the working directory. Run `devtools/maketool.py generate` to generate a `Makefile`. Use `make library && make clean` to compile the library. #### Linux / GCC Install Python interpreter, C++ compiler and OpenGL headers. ``` sudo apt-get install python3 sudo apt-get install build-essential sudo apt-get install libmesa-dev ``` Install dependencies. ``` sudo apt-get install libglfw3-dev sudo apt-get install libbullet-dev sudo pat-get install libopenal-dev sudo apt-get install liblua5.4-dev ``` These are the packages for Debian-based distributions, for other distributions check your package manager. Download the source code. ``` git clone https://github.com/racenis/tram-sdk.git ``` `vi maketool.ini` or `nano maketool.ini` Edit the makefile generator's configuration. Set the `compiler` to your `g++` compiler and `archiver` to your `ar` program. Set `platform` to `LINUX`. Select the modules which you will be using. Review the configuration and generate the makefile. ``` chmod +x devtools/maketool.py devtools/maketool.py config devtools/maketool.py generate ``` Then compile. ``` make ``` ### Dependencies Header files and binaries (for MinGW x86/x86_64 and WebAssembly) included in `libraries` directory. Check [/libraries/README.md](/libraries/README.md) for more information. ### Contributions Due to risks associated with LLM use, we are not accepting code contributions for the runtime (this repository) part of the project. LLMs and other machine learning based coding tools exhibit a propensity for emitting code that is incompatible with the MIT license. Alas, there is no good way to separate genuine human code from AI slop, ergo we will not be able to accept any code pull requests for this repository. However, you can still help by submitting bug reports or suggestions for improvements. #### Why not accepting code Consider this example: you use this framework to create a project. Maybe due to the platform that you are using, or due to some other requirement you are also using a third party closed source library. Later it is determined that a contributor has added GPL licensed code to the framework. Now you can either release the source code to your project and violate the third party's license or you keep the source closed and violate the GPL. Either way, the outcome is doubleplus ungood. ## Milestones ### Getting last major features in Currently we have most of the planned features for v1.0.0, after which the core framework should be mostly feature-complete. In the future we'll keep tweaking the core framework, but most of the efforts will be focused on additional backends, integrations and extensions. ### Developing professional-grade projects We have several projects in the works and they all use this framework. We'll get them to at least prototype or demo state. This will allow us to find additional deficiencies in the framework and help ensure that the framework has all the features needed for full productions. ### Final touches and extensive testing We'll finish all planned changes that will break the API. We'll finally set up automated testing, some kind of CI, dockerized cross-platform builds and automated release builds. This should help us track down most of remaining bugs and ensure that we catch any regressions. ### Switching to proper development practices This means semantic versioning, proper change logs and possibly even supporting multiple branches. ## To-do list #### For v0.1.2 - Finish particles - Steal ideas from various particle editors - Finish sprites - Make them not be distorted horizontally in the shader - Add rotations - Add entity that shows messages in 3D space - Just calls DebugText - Can be toggled on/off - Can have a distance set - Material editor GUI applet - Particle editor GUI applet - Sprite editor GUI applet - Model/animation viewer GUI applet - Allow setting alpha for any model - Make sure that vec4 color gets passed into API from Render/MeshComponents - Make sure that it makes its way into shaders - Add a renderflag to enable alpha blending - Merge _blend.frag files into .frag files - Consider moving _alpha.frag from separate file to compile flag - Allow packing additional textures - Like color texture + normal or specular map - Allow more than 15 textures for OpenGL API - Also add separate texture array sampler for lightmaps/environment maps - Add some more asserts to the GUI system - Like when pushing/popping, changing state, etc. - Make the engine work without any files - That means that it will run just fine without any files on the disk #### For v0.2.0 - Plugins - Essentially a .zip file with `data/`, `scripts/` and `shaders/` directories - Would allow easy DLC/mods/etc. - Loaded as either directories or archives - Finish serialization - Allow re-loading WorldCells - Serialize WorldCell state to disk - Includes all entities - Save and load settings - Deserialize WorldCell state from disk - Network replication - Allow basic entities to be replicated over network - Also custom data - We can always upgrade the protocol later - Launcher GUI - Allows configuring settings - Reordering plugins - Changing language - Selecting executable to run - Add SoundGraph features to level editor - Allow tagging nodes as portals - Add effect parameters - Automatically derive some parameters - Like reverb/echo - Automatically generate links between nodes - Also discover rooms and link room nodes together - Add SoundGraph stuff to AudioComponent - Will need to add OpenAL plugin - Like the one that supports various effects - Add Navmesh features to level editor - Automatically connect nodes - Add parameter that determines max width/height - Implement Navmesh follower - Can add flags - Avoid obstacles - Discovers obstacles - Ignores directions - Etc. - Additional Navmesh features - Objects can temporarily block navmesh nodes - Agents will route around them - Planar reflections - Setup special material - Add reflection plane - Only single reflection plane rendered - Use environment map as a backup - Polygons near reflection plane - For OpenGL - Add reflection pane - Render upside-down + clipped scene - Render in reflective surfaces - Render rest of the scene #### For v1.0.0 - Add some kind of crash reporting - Make sure that GUI programs work on Linux - Finally add Macintosh support for everything - Unit tests - Improve DecalComponent - Attach it to RenderComponents - When they move, it moves - Allow attachments to posed objects - Maybe modify SceneTree - Allow entities to subscribe to RenderComponent movements - Maybe implement decal batching - Multiple decals on same RenderComponent - AnimationComponent - Use file mock - Parse some in-memory animation files - Check if the pose matrices more or less correct - Also check detaching bones - AudioComponent - Use mock for backend - Component and Integration trivial - Test SoundGraph!! - MeshComponent - Mock render backend - Just check if a couple of triangles get copied correctly - ParticleComponent - Just some smoke tests - SpriteComponent - Just check that it clips stuff correctly from sprite sheets - Scripting - Just go through all Lua functions and check that they don't crash - Maybe some math functions we could test a little more - Async - Might be a good idea to mock some components and test it - Integration tests - Rendering - Use the low-level render API to test integration - Ideas: untextured cube, shiny sphere, lights, no lights, etc. - Render to image - Compare images to previously correct renders for regressions - Use OpenGL/Vulkan/Direct3D emulators - Scripts for running all tests automatically - Dockerfiles for running all tests in a container - Additional dockerfiles - Compiling framework - Compiling level editor - Compiling GUI applets - Fully automated builds - Final code pass - Remove old comments - Check if comments are still relevant - Expand and check Doxygen comments - Final documentation pass - Expand the documentation - Double check it #### Bug fixes - Sound table does not play if only one sound - Issue for Direct3D on some hardware - When you see it, you see it - Only happens on some hardware, hard to replicate - Try using Direct3D wrappers like WINE or dgVoodoo - Fix animation scaling translation - There's something weird going on if you both scale and translate in an animation ### New features that would be nice to have, but are not very important - Improve GUI::Textbox - Add cursor movement - Add selection - Add copy-pasting - Python scripting - Should allow accessing basic library functionality through Python. - Probably should have OOP abstractions and stuff. - Model conversion tools - Leverage the free Assimp library to parse various 3D model formats. - Convert said model formats to tram-sdk .stmdl and .dymdl formats. - Perhaps write Blender importers in addition to existing exporters. - Occlusion culling - AnimationComponent multi-threading - Could improve performance a bit - Need to do more extensive profiling - Input recording and playback - Would need to make sure that we can create deterministic logic - Then we would just record keyboard/mouse events - Would also allow inserting previously recorded events - AudioComponents can play more than 128 sounds at the same time - Sprite batching - Currently each SpriteComponent gets its own vertex buffer - We would put all sprites that share a material in the same vertex buffer - Vertex animation - Accomplished through blend shapes - 3D text component - Generates a mesh that spells out a text - Tilemaps - Load in a tilemap format - Maybe one of the ones used by Tiled - Generate a mesh for rendering and maybe collisions - Allow dynamic modifications of tilemap - Achievements and social features - Will need to check what different stores and platforms offer - Ideally the API would allow code to be written once and work everywhere ================================================ FILE: data/animations/mongus-jump.anim ================================================ ANIMv1 mongus-jump 13 Root 8 0.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 20.0 -8.006990869866325e-18 -0.0812065601348877 -0.053319018334150314 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 40.0 -1.6760643764279154e-18 -0.23811812698841095 -0.021512076258659363 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 70.0 9.189635145307276e-17 -0.38369590044021606 0.36177366971969604 0.02772076427936554 4.638670056519769e-18 3.507527038633105e-18 0.9996157288551331 1.0 1.0 1.0 90.0 5.559090467719774e-17 -0.23187357187271118 0.052620574831962585 0.059843629598617554 4.638670056519769e-18 3.507527038633105e-18 0.9981638193130493 1.0 1.0 1.0 109.0 6.36903222271689e-20 -0.5088464021682739 -0.2519257366657257 0.07517118752002716 1.2578804880557108e-17 9.511457041810421e-18 0.9971707463264465 1.0 1.0 1.0 120.0 3.6717118023130407e-17 -1.0043832063674927 -0.3488072156906128 -0.025588855147361755 -4.281896718567991e-18 -3.237759452641799e-18 0.9996726512908936 1.0 1.0 1.0 200.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 Tail1 9 0.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 20.0 3.1542759184476397e-17 0.059766076505184174 0.07252106070518494 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 40.0 -3.3994923537244536e-16 0.23106646537780762 0.06141114979982376 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 70.0 -8.204129251835842e-16 0.43558207154273987 -0.3116672933101654 -0.23119285702705383 -3.4423270745648996e-16 1.8197923183585366e-16 0.972908079624176 1.0 1.0 1.0 90.0 -5.278176755323214e-16 0.24843445420265198 -0.2747984528541565 -0.28060227632522583 -4.1780040413150253e-16 2.2087097460216147e-16 0.9598243236541748 1.0 1.0 1.0 100.0 -8.204129251835842e-16 0.43791139125823975 -0.08941872417926788 -0.255837619304657 -4.1780040413150253e-16 2.2087097460216147e-16 0.9664298892021179 1.0 1.0 1.0 109.0 -5.6897818281296e-16 0.4515589475631714 0.27991122007369995 -0.23469394445419312 -3.4944566585124815e-16 1.8473509323441492e-16 0.9720696210861206 1.0 1.0 1.0 120.0 -1.149917317874098e-15 0.9354439973831177 0.5315375328063965 -0.3313532769680023 -4.933657750730552e-16 2.608186762861198e-16 0.9435070753097534 1.0 1.0 1.0 200.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 Head 8 0.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 20.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 40.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 70.0 0.0 0.0 -0.0 0.1028529703617096 3.716991917198377e-18 1.8384211536721698e-17 0.9946967363357544 1.0 1.0 1.0 90.0 0.0 0.0 -0.0 0.0027149617671966553 9.811747592404935e-20 4.85296990916299e-19 0.9999964833259583 1.0 1.0 1.0 109.0 0.0 0.0 -0.0 0.053462959825992584 1.9320949739865536e-18 9.556117350262772e-18 0.9985699653625488 1.0 1.0 1.0 120.0 0.0 0.0 -0.0 0.3985556960105896 1.44033552079735e-17 7.123885237843078e-17 0.9171442985534668 1.0 1.0 1.0 200.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 Tail2 9 0.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 20.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 40.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 70.0 0.0 0.0 -0.0 -0.15642724931240082 7.652985691834456e-17 2.5805068841977848e-17 0.9876894950866699 1.0 1.0 1.0 90.0 0.0 0.0 -0.0 -0.18475814163684845 9.039035996007911e-17 3.047868727937798e-17 0.9827839732170105 1.0 1.0 1.0 100.0 0.0 0.0 -0.0 -0.08680175989866257 4.60616483629664e-17 6.904762363881759e-18 0.9962257146835327 1.1599457263946533 1.1599457263946533 -1.1599457263946533 109.0 0.0 0.0 -0.0 -0.18475814163684845 9.039035996007911e-17 3.047868727937798e-17 0.9827839732170105 1.0 1.0 1.0 120.0 0.0 0.0 -0.0 -0.18475814163684845 9.039035996007911e-17 3.047868727937798e-17 0.9827839732170105 1.0 1.0 1.0 200.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 Tail3 9 0.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 20.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 40.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 70.0 0.0 0.0 -0.0 -0.20018316805362701 8.939098019632725e-17 4.39416704797767e-17 0.9797585010528564 1.0 1.0 1.0 90.0 0.0 0.0 -0.0 -0.23695197701454163 1.0580993302035361e-16 5.2012703327028104e-17 0.9715213775634766 1.0 1.0 1.0 100.0 0.0 0.0 -0.0 -0.09074166417121887 5.1498130811571116e-17 1.4295849852482432e-17 0.9958745241165161 1.080091118812561 1.080091118812561 -1.080091118812561 109.0 0.0 0.0 -0.0 -0.23695197701454163 1.0580993302035361e-16 5.2012703327028104e-17 0.9715213775634766 1.0 1.0 1.0 120.0 0.0 0.0 -0.0 -0.23695197701454163 1.0580993302035361e-16 5.2012703327028104e-17 0.9715213775634766 1.0 1.0 1.0 200.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 ShoulderR 8 0.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 20.0 -0.08584313839673996 0.04814301058650017 -0.02411680482327938 0.012866261415183544 0.0068195890635252 -0.015938539057970047 0.9981215596199036 1.0 1.0 1.0 40.0 -0.1888445019721985 0.015504427254199982 -0.14580939710140228 0.10293010622262955 0.054556723684072495 -0.12750834226608276 0.9849724173545837 1.0 1.0 1.0 70.0 -0.22307679057121277 -0.35641050338745117 -0.3325735926628113 0.4196360409259796 0.22242243587970734 -0.5198391675949097 0.7100714445114136 1.0 1.0 1.0 90.0 -0.12972937524318695 -0.0653572753071785 -0.16831256449222565 0.18452490866184235 0.09780490398406982 -0.22858688235282898 0.8451138734817505 1.0 1.0 1.0 109.0 -0.44489431381225586 0.22239094972610474 -0.26398351788520813 -0.14451278746128082 -0.07659713923931122 0.17902028560638428 0.9701552987098694 1.0 1.0 1.0 120.0 -0.8495965600013733 0.32234007120132446 -0.5479112267494202 -0.20840705931186676 -0.11046344041824341 0.2581716477870941 0.936863124370575 1.0 1.0 1.0 200.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 UpperarmR 8 0.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 20.0 0.0 0.0 -0.0 -0.029977459460496902 -0.003972860053181648 0.005096787121146917 0.9991112351417542 1.0 1.0 1.0 40.0 0.0 0.0 -0.0 -0.11636374890804291 -0.015421492047607899 0.01978425495326519 0.9928898811340332 1.0 1.0 1.0 70.0 0.0 0.0 -0.0 -0.24834002554416656 -0.03291210159659386 0.042222995311021805 0.9671925902366638 1.0 1.0 1.0 90.0 0.0 0.0 -0.0 -0.20236782729625702 -0.026819471269845963 0.034406762570142746 0.9772425293922424 1.0 1.0 1.0 109.0 0.0 0.0 -0.0 -0.15980024635791779 -0.021178053691983223 0.02716938406229019 0.9865482449531555 1.0 1.0 1.0 120.0 0.0 0.0 -0.0 -0.19384808838367462 -0.025690361857414246 0.032958224415779114 0.980141282081604 1.0 1.0 1.0 200.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 ForearmR 8 0.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 20.0 0.0 0.0 -0.0 -0.1526709645986557 0.0013375531416386366 -0.0015422860160470009 0.9834674596786499 1.0 1.0 1.0 40.0 0.0 0.0 -0.0 -0.49697527289390564 0.004353967495262623 -0.0050204419530928135 0.8677394390106201 1.0 1.0 1.0 70.0 0.0 0.0 -0.0 -0.8881433606147766 0.00778087368234992 -0.008971987292170525 0.4594135582447052 1.0 1.0 1.0 90.0 0.0 0.0 -0.0 -0.48101842403411865 0.004214128013700247 -0.004859203472733498 0.7372820377349854 1.0 1.0 1.0 109.0 0.0 0.0 -0.0 -0.10404457151889801 0.0009115306893363595 -0.0010510056745260954 0.9945719838142395 1.0 1.0 1.0 120.0 0.0 0.0 -0.0 -0.12155403196811676 0.0010649287141859531 -0.0012278861831873655 0.9925838708877563 1.0 1.0 1.0 200.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 FootR 8 0.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 20.0 0.0 0.0 -0.0 0.16306962072849274 -5.35696043080236e-10 2.6006788389487667e-10 0.9662699103355408 1.0 1.0 1.0 40.0 0.0 0.0 -0.0 0.44536685943603516 2.9257581246611153e-08 4.490626537290154e-09 0.8953481912612915 1.0 1.0 1.0 70.0 0.0 0.0 -0.0 0.5507047772407532 4.2557651624974824e-08 -7.549182612365257e-09 0.8347002863883972 1.0 1.0 1.0 90.0 0.0 0.0 -0.0 0.4264707863330841 3.02168459143104e-08 6.389663909089904e-09 0.9042834043502808 1.0 1.0 1.0 109.0 0.0 0.0 -0.0 0.5012491941452026 3.5574480250488705e-08 -9.711025761305336e-09 0.8653032779693604 1.0 1.0 1.0 120.0 0.0 0.0 -0.0 -0.41654300689697266 6.427476506587482e-08 -3.138768533972325e-08 0.909116268157959 1.0 1.0 1.0 200.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 ShoulderL 8 0.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 20.0 0.08584313839673996 0.04814301058650017 -0.02411680482327938 0.013221513479948044 -0.007007887586951256 0.016378622502088547 0.9980155229568481 1.0 1.0 1.0 40.0 0.1888445019721985 0.015504427254199982 -0.14580939710140228 0.10577213019132614 -0.05606312304735184 0.13102900981903076 0.9841243028640747 1.0 1.0 1.0 70.0 0.22307679057121277 -0.35641050338745117 -0.3325735926628113 0.4240618348121643 -0.22476834058761597 0.5253217816352844 0.7026293277740479 1.0 1.0 1.0 90.0 0.12972937524318695 -0.0653572753071785 -0.16831256449222565 0.18759959936141968 -0.09943467378616333 0.23239579796791077 0.8408203721046448 1.0 1.0 1.0 109.0 0.44489431381225586 0.22239094972610474 -0.26398351788520813 -0.14775916934013367 0.07831773906946182 -0.1830417513847351 0.9687772393226624 1.0 1.0 1.0 120.0 0.8495965600013733 0.32234007120132446 -0.5479112267494202 -0.21599632501602173 0.11448592692613602 -0.26757296919822693 0.9320104122161865 1.0 1.0 1.0 200.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 UpperarmL 8 0.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 20.0 0.0 0.0 -0.0 -0.03350690379738808 0.004440603777766228 -0.005696871317923069 0.9989221096038818 1.0 1.0 1.0 40.0 0.0 0.0 -0.0 -0.1280984729528427 0.01697666198015213 -0.02177940495312214 0.9913769364356995 1.0 1.0 1.0 70.0 0.0 0.0 -0.0 -0.26983940601348877 0.035761378705501556 -0.04587830230593681 0.9611467719078064 1.0 1.0 1.0 90.0 0.0 0.0 -0.0 -0.21180395781993866 0.028070030733942986 -0.03601108491420746 0.9744876623153687 1.0 1.0 1.0 109.0 0.0 0.0 -0.0 -0.1580665409564972 0.020948290824890137 -0.026874616742134094 0.986840546131134 1.0 1.0 1.0 120.0 0.0 0.0 -0.0 -0.18494431674480438 0.024510353803634644 -0.03144439309835434 0.9819400906562805 1.0 1.0 1.0 200.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 ForearmL 8 0.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 20.0 0.0 0.0 -0.0 -0.14767888188362122 -0.0012938255676999688 0.0014918448869138956 0.9841688871383667 1.0 1.0 1.0 40.0 0.0 0.0 -0.0 -0.48704782128334045 -0.004267021548002958 0.004920165054500103 0.8733510375022888 1.0 1.0 1.0 70.0 0.0 0.0 -0.0 -0.8839985132217407 -0.007744616828858852 0.008930234238505363 0.4673405885696411 1.0 1.0 1.0 90.0 0.0 0.0 -0.0 -0.4742249846458435 -0.00415464723482728 0.004790649749338627 0.741572916507721 1.0 1.0 1.0 109.0 0.0 0.0 -0.0 -0.09479875862598419 -0.0008305454393848777 0.0009576362208463252 0.9954959750175476 1.0 1.0 1.0 120.0 0.0 0.0 -0.0 -0.1152464896440506 -0.0010096889454871416 0.0011642029276117682 0.9933361411094666 1.0 1.0 1.0 200.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 FootL 8 0.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 20.0 0.0 0.0 -0.0 0.16047824919223785 5.154654481032139e-10 1.027169238554393e-09 0.9669647812843323 1.0 1.0 1.0 40.0 0.0 0.0 -0.0 0.4501718282699585 -1.2357308065702455e-08 -5.293441773801533e-08 0.892941951751709 1.0 1.0 1.0 70.0 0.0 0.0 -0.0 0.5667162537574768 -3.234742962376913e-08 -6.49703792987566e-08 0.8239133954048157 1.0 1.0 1.0 90.0 0.0 0.0 -0.0 0.4175177812576294 -1.7757288972575225e-09 -6.111963557486888e-08 0.9082710146903992 1.0 1.0 1.0 109.0 0.0 0.0 -0.0 0.5001378655433655 -1.7124106577171005e-08 -5.329554042532436e-08 0.8659462928771973 1.0 1.0 1.0 120.0 0.0 0.0 -0.0 -0.42062118649482727 1.2309891417316976e-07 1.3173537638522248e-07 0.9072368144989014 1.0 1.0 1.0 200.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 ================================================ FILE: data/animations/mongus-run.anim ================================================ ANIMv1 mongus-run 8 ShoulderR 7 0.0 0.0 0.0 -0.0 0.22830604016780853 0.12101059406995773 -0.2828224003314972 0.923712432384491 1.0 1.0 1.0 10.0 0.0 0.0 -0.0 0.018594209104776382 0.00985565036535263 -0.02303452044725418 0.9203561544418335 1.0 1.0 1.0 14.0 0.0 0.0 -0.0 -0.06366675347089767 -0.03374569118022919 0.07886922359466553 0.9114755988121033 1.0 1.0 1.0 25.0 0.0 0.0 -0.0 -0.2579682469367981 -0.13673262298107147 0.31956711411476135 0.9014620780944824 1.0 1.0 1.0 35.0 0.0 0.0 -0.0 -0.020890288054943085 -0.011072582565248013 0.025878340005874634 0.9202173352241516 1.0 1.0 1.0 40.0 0.0 0.0 -0.0 0.1507493257522583 0.07990273088216782 -0.18674629926681519 0.9074580669403076 1.0 1.0 1.0 50.0 0.0 0.0 -0.0 0.22830604016780853 0.12101059406995773 -0.2828224003314972 0.923712432384491 1.0 1.0 1.0 UpperarmR 7 0.0 0.0 0.0 -0.0 0.025336042046546936 0.003357747569680214 -0.004307659342885017 0.9996642470359802 1.0 1.0 1.0 10.0 0.0 0.0 -0.0 0.09897641837596893 0.01311721745878458 -0.01682804524898529 0.9888781905174255 1.0 1.0 1.0 14.0 0.0 0.0 -0.0 -0.050882838666439056 -0.006743431556969881 0.008651118725538254 0.990245521068573 1.0 1.0 1.0 25.0 0.0 0.0 -0.0 -0.1967834234237671 -0.026079440489411354 0.03345722332596779 0.9795290231704712 1.0 1.0 1.0 35.0 0.0 0.0 -0.0 -0.0836632251739502 -0.01108778826892376 0.014224467799067497 0.9903566837310791 1.0 1.0 1.0 40.0 0.0 0.0 -0.0 -0.13652047514915466 -0.01809288188815117 0.023211296647787094 0.9862034916877747 1.0 1.0 1.0 50.0 0.0 0.0 -0.0 0.025336042046546936 0.003357747569680214 -0.004307659342885017 0.9996642470359802 1.0 1.0 1.0 ForearmR 7 0.0 0.0 0.0 -0.0 0.08471803367137909 -0.0007421979680657387 0.000855823396705091 0.9964045286178589 1.0 1.0 1.0 10.0 0.0 0.0 -0.0 0.13617941737174988 -0.001193024916574359 0.0013756800908595324 0.9762256145477295 1.0 1.0 1.0 14.0 0.0 0.0 -0.0 -0.07258342951536179 0.0006358701502904296 -0.0007332777022384107 0.9744976758956909 1.0 1.0 1.0 25.0 0.0 0.0 -0.0 -0.26681873202323914 0.00233749789185822 -0.002695468720048666 0.9637404680252075 1.0 1.0 1.0 35.0 0.0 0.0 -0.0 -0.5215127468109131 0.00456879660487175 -0.005268407985568047 0.8363852500915527 1.0 1.0 1.0 40.0 0.0 0.0 -0.0 -0.5941319465637207 0.0052049895748496056 -0.006001992151141167 0.7418704628944397 1.0 1.0 1.0 50.0 0.0 0.0 -0.0 0.08471803367137909 -0.0007421979680657387 0.000855823396705091 0.9964045286178589 1.0 1.0 1.0 FootR 7 0.0 0.0 0.0 -0.0 -0.2698030471801758 -2.9619720010032324e-08 6.694075960211876e-09 0.9629155993461609 1.0 1.0 1.0 10.0 0.0 0.0 -0.0 -0.14027392864227295 2.3836500773199987e-08 -3.2477847078382638e-09 0.990112841129303 1.0 1.0 1.0 14.0 0.0 0.0 -0.0 0.24817150831222534 1.8793848255427292e-07 6.3732610300348824e-09 0.9684447646141052 1.0 1.0 1.0 25.0 0.0 0.0 -0.0 -0.2698030471801758 -2.9619720010032324e-08 6.694075960211876e-09 0.9629155993461609 1.0 1.0 1.0 35.0 0.0 0.0 -0.0 -0.41346555948257446 -7.935088319754868e-08 6.48833609062649e-09 0.9105198383331299 1.0 1.0 1.0 40.0 0.0 0.0 -0.0 -0.3762197196483612 -7.935089030297604e-08 6.488344084232267e-09 0.9241039156913757 1.0 1.0 1.0 50.0 0.0 0.0 -0.0 -0.2698030471801758 -2.9619720010032324e-08 6.694075960211876e-09 0.9629155993461609 1.0 1.0 1.0 ShoulderL 8 0.0 0.0 0.0 -0.0 -0.28743234276771545 0.15234962105751038 -0.3560669720172882 0.8760071992874146 1.0 1.0 1.0 14.0 0.0 0.0 -0.0 0.10782003402709961 -0.057148635387420654 0.13356611132621765 0.8926488161087036 1.0 1.0 1.0 20.0 0.0 0.0 -0.0 0.19963449239730835 -0.10581367462873459 0.24730455875396729 0.9210672974586487 1.0 1.0 1.0 25.0 0.0 0.0 -0.0 0.21151626110076904 -0.11211143434047699 0.2620235085487366 0.9348987936973572 1.0 1.0 1.0 35.0 0.0 0.0 -0.0 0.02150999940931797 -0.011401149444282055 0.026646440848708153 0.9154387712478638 1.0 1.0 1.0 40.0 0.0 0.0 -0.0 -0.14180883765220642 0.0751638263463974 -0.1756705939769745 0.8903844952583313 1.0 1.0 1.0 45.0 0.0 0.0 -0.0 -0.2380836308002472 0.12619298696517944 -0.29493448138237 0.8880380392074585 1.0 1.0 1.0 50.0 0.0 0.0 -0.0 -0.28743234276771545 0.15234962105751038 -0.3560669720172882 0.8760071992874146 1.0 1.0 1.0 UpperarmL 8 0.0 0.0 0.0 -0.0 -0.11054552346467972 0.014650409109890461 -0.01879502832889557 0.9935853481292725 1.0 1.0 1.0 14.0 0.0 0.0 -0.0 -0.09767533838748932 0.012944739311933517 -0.016606811434030533 0.9906841516494751 1.0 1.0 1.0 20.0 0.0 0.0 -0.0 -0.06140775606036186 0.00813823752105236 -0.010440591722726822 0.9923946261405945 1.0 1.0 1.0 25.0 0.0 0.0 -0.0 0.0732983946800232 -0.009714166633784771 0.012462236918509007 0.9971848726272583 1.0 1.0 1.0 35.0 0.0 0.0 -0.0 0.08447028696537018 -0.011194772087037563 0.014361674897372723 0.9922009110450745 1.0 1.0 1.0 40.0 0.0 0.0 -0.0 0.049082815647125244 -0.006504905875772238 0.008345083333551884 0.9918957948684692 1.0 1.0 1.0 45.0 0.0 0.0 -0.0 0.027364954352378845 -0.003626646939665079 0.004652594216167927 0.9936398863792419 1.0 1.0 1.0 50.0 0.0 0.0 -0.0 -0.11054552346467972 0.014650409109890461 -0.01879502832889557 0.9935853481292725 1.0 1.0 1.0 ForearmL 8 0.0 0.0 0.0 -0.0 -0.18339836597442627 -0.001606750418432057 0.0018527028150856495 0.9830357432365417 1.0 1.0 1.0 14.0 0.0 0.0 -0.0 -0.5521209836006165 -0.004837041720747948 0.00557765131816268 0.8253576755523682 1.0 1.0 1.0 20.0 0.0 0.0 -0.0 -0.4322243332862854 -0.0037866500206291676 0.00436642300337553 0.8420966863632202 1.0 1.0 1.0 25.0 0.0 0.0 -0.0 0.0556979775428772 0.00048791049630381167 -0.0005627041682600975 0.9984474778175354 1.0 1.0 1.0 35.0 0.0 0.0 -0.0 0.10362879186868668 0.0009078369475901127 -0.0010469219414517283 0.9880096912384033 1.0 1.0 1.0 40.0 0.0 0.0 -0.0 0.0480538047850132 0.00042095797834917903 -0.00048548774793744087 0.9837697744369507 1.0 1.0 1.0 45.0 0.0 0.0 -0.0 -0.2630617320537567 -0.002304698806256056 0.0026574672665446997 0.9521291851997375 1.0 1.0 1.0 50.0 0.0 0.0 -0.0 -0.18339836597442627 -0.001606750418432057 0.0018527028150856495 0.9830357432365417 1.0 1.0 1.0 FootL 8 0.0 0.0 0.0 -0.0 -0.21309532225131989 1.041270181190157e-08 2.4596920056296767e-08 0.977031409740448 1.0 1.0 1.0 14.0 0.0 0.0 -0.0 -0.5246599912643433 1.231611150842582e-07 1.1487965423384594e-07 0.8513118624687195 1.0 1.0 1.0 20.0 0.0 0.0 -0.0 -0.3915030360221863 1.4327414987747034e-07 1.2266173143871129e-07 0.9050015211105347 1.0 1.0 1.0 25.0 0.0 0.0 -0.0 -0.21309532225131989 1.041270181190157e-08 2.4596920056296767e-08 0.977031409740448 1.0 1.0 1.0 35.0 0.0 0.0 -0.0 -0.2748737335205078 2.830713796697637e-08 4.7031882388637314e-08 0.961480438709259 1.0 1.0 1.0 40.0 0.0 0.0 -0.0 0.16661518812179565 -6.446724398756487e-08 -6.70787798640049e-08 0.9856266975402832 1.0 1.0 1.0 45.0 0.0 0.0 -0.0 -0.13232488930225372 -6.24810070348758e-08 -3.371694745624154e-08 0.9726443290710449 1.0 1.0 1.0 50.0 0.0 0.0 -0.0 -0.21309532225131989 1.041270181190157e-08 2.4596920056296767e-08 0.977031409740448 1.0 1.0 1.0 ================================================ FILE: data/animations/mongus-sway.anim ================================================ ANIMv1 mongus-sway 2 Root 5 0.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 10.0 0.0 0.0 -0.0 0.011248684488236904 -0.030907969921827316 -0.029512275010347366 0.9990231990814209 1.0 1.0 1.0 20.0 0.0 0.0 -0.0 -0.008989808149635792 0.07333409041166306 0.092293381690979 0.9928575158119202 1.0 1.0 1.0 35.0 0.0 0.0 -0.0 0.005624285899102688 -0.009333091787993908 0.0058111343532800674 0.9981041550636292 1.0 1.0 1.0 50.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 Head 5 0.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 10.0 0.0 0.0 -0.0 0.01966194063425064 0.0017485303105786443 -0.08790408819913864 0.9959333539009094 1.0 1.0 1.0 20.0 0.0 0.0 -0.0 0.008017421700060368 0.0015619276091456413 -0.0012010122882202268 0.9994297027587891 1.0 1.0 1.0 35.0 0.0 0.0 -0.0 0.00277275824919343 -0.0007480866624973714 -0.008964055217802525 0.9998852014541626 1.0 1.0 1.0 50.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 ================================================ FILE: data/animations/mongus-turn-around.anim ================================================ ANIMv1 mongus-turn-around 13 Root 2 0.0 7.83839926299379e-09 0.13992293179035187 0.11215098202228546 0.0 0.6254178285598755 -0.7802900671958923 -4.371138828673793e-08 1.0 1.0 1.0 200.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 Tail1 4 0.0 -7.838401039350629e-09 0.11897622048854828 0.13416756689548492 -2.3741903642317307e-15 0.7481948137283325 -0.6634790897369385 4.371138828673793e-08 1.0 1.0 1.0 100.0 0.19332380592823029 0.05948811396956444 0.06708379089832306 -1.4901161193847656e-08 0.37409743666648865 -0.33173954486846924 -0.5 1.0 1.0 1.0 150.0 0.09238763153553009 -0.024691147729754448 -0.004905473440885544 0.0 -0.04959878697991371 0.043982867151498795 0.28726211190223694 1.0 1.0 1.0 200.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 Head 2 0.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 200.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 Tail2 2 0.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 200.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 Tail3 2 0.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 200.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 ShoulderR 5 0.0 0.13238811492919922 -0.10350346565246582 0.06258345395326614 0.31588277220726013 0.7530370950698853 0.577194333076477 -5.936425040431459e-08 1.0 1.0 1.0 20.0 0.1286812573671341 -0.10060536861419678 0.060831114649772644 0.24085773527622223 0.7779430150985718 0.5306434631347656 0.027890099212527275 1.0 1.0 1.0 40.0 0.11861977726221085 -0.09273910522460938 0.05607476830482483 0.17626023292541504 0.7361863255500793 0.4222680330276489 0.24534253776073456 1.0 1.0 1.0 70.0 0.09508780390024185 -0.07434136420488358 0.04495055601000786 0.11702962219715118 0.5068727135658264 0.4193342328071594 0.5778059363365173 1.0 1.0 1.0 200.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 UpperarmR 5 0.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 20.0 0.0 0.0 -0.0 0.09891830384731293 0.018889369443058968 -0.01834072917699814 0.9947472214698792 1.0 1.0 1.0 40.0 0.0 0.0 -0.0 0.09096100926399231 -0.12381908297538757 -0.19434569776058197 0.9686470031738281 1.0 1.0 1.0 70.0 0.0 0.0 -0.0 0.1623750627040863 -0.11016053706407547 -0.21088305115699768 0.9537278413772583 1.0 1.0 1.0 200.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 ForearmR 5 0.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 20.0 0.0 0.0 -0.0 -0.11599549651145935 -0.005601942539215088 -0.0002257261803606525 0.9932339787483215 1.0 1.0 1.0 40.0 0.0 0.0 -0.0 -0.11035527288913727 -0.02492593042552471 -0.03134286403656006 0.9928596019744873 1.0 1.0 1.0 70.0 0.0 0.0 -0.0 -0.02773108519613743 -0.02619747817516327 -0.07643207907676697 0.9946275949478149 1.0 1.0 1.0 200.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 FootR 5 0.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 20.0 0.0 0.0 -0.0 -0.13755066692829132 -0.005242832005023956 0.00595132214948535 0.9904630184173584 1.0 1.0 1.0 40.0 0.0 0.0 -0.0 -0.13132022321224213 -0.049300167709589005 -0.021396026015281677 0.9895631074905396 1.0 1.0 1.0 70.0 0.0 0.0 -0.0 -0.09787491708993912 -0.04022425785660744 -0.02368849515914917 0.9917083382606506 1.0 1.0 1.0 200.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 ShoulderL 4 0.0 -0.13238811492919922 -0.10350346565246582 0.06258346885442734 -0.31588274240493774 0.7530370950698853 0.577194333076477 -3.957616812044762e-08 1.0 1.0 1.0 75.0 -0.09049969166517258 -0.07075432687997818 0.04278166592121124 -0.28360438346862793 0.5205512642860413 0.4378904104232788 0.15575803816318512 1.0 1.0 1.0 100.0 -0.06619405746459961 -0.05175173655152321 0.03129173442721367 -0.12550018727779388 0.6715143918991089 0.2878727912902832 0.6711541414260864 1.0 1.0 1.0 200.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 UpperarmL 4 0.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 75.0 0.0 0.0 -0.0 0.08745531737804413 0.05512285605072975 0.08501384407281876 0.9910025000572205 1.0 1.0 1.0 100.0 0.0 0.0 -0.0 -0.005391664803028107 0.08002898097038269 0.22119975090026855 0.9719244241714478 1.0 1.0 1.0 200.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 ForearmL 5 0.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 45.0 0.0 0.0 -0.0 0.005068068392574787 -0.020432688295841217 -0.028641924262046814 0.998423159122467 1.0 1.0 1.0 75.0 0.0 0.0 -0.0 0.001669342047534883 -0.004325711168348789 0.09075852483510971 0.9958621859550476 1.0 1.0 1.0 100.0 0.0 0.0 -0.0 -0.3342698812484741 -0.09903564304113388 0.12491174042224884 0.9288987517356873 1.0 1.0 1.0 200.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 FootL 5 0.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 45.0 0.0 0.0 -0.0 -0.014994194731116295 -0.010789250954985619 0.023253057152032852 0.9984674453735352 1.0 1.0 1.0 75.0 0.0 0.0 -0.0 -0.02413776144385338 0.04348089173436165 0.08406826108694077 0.9952185153961182 1.0 1.0 1.0 100.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 200.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 ================================================ FILE: data/animations/mongus-wag-tail.anim ================================================ ANIMv1 WagTail 3 Tail1 7 1.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 20.0 0.0 0.0 -0.0 -0.1184784322977066 0.0032643750309944153 0.0022056717425584793 0.9929488301277161 1.0 1.0 1.0 30.0 0.0 0.0 -0.0 -0.14939169585704803 0.004116112366318703 0.0027811734471470118 0.9884724020957947 1.0 1.0 1.0 50.0 0.0 0.0 -0.0 -0.11977468430995941 0.0033000903204083443 0.0022298037074506283 0.9907577633857727 1.0 1.0 1.0 60.0 0.0 0.0 -0.0 -0.11882936954498291 0.0032740444876253605 0.0022122047375887632 0.9900242686271667 1.0 1.0 1.0 80.0 0.0 0.0 -0.0 -0.1519128978252411 0.004185577388852835 0.0028281090781092644 0.9850449562072754 1.0 1.0 1.0 100.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 Tail2 7 1.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 20.0 0.0 0.0 -0.0 -0.04770442470908165 0.0007372896070592105 0.0014045418938621879 0.9988602995872498 1.0 1.0 1.0 30.0 0.0 0.0 -0.0 -0.08330748975276947 0.001287548104301095 0.002452788408845663 0.9964730143547058 1.0 1.0 1.0 50.0 0.0 0.0 -0.0 -0.06679172068834305 0.0010322907473891973 0.0019665213767439127 0.9971722364425659 1.0 1.0 1.0 60.0 0.0 0.0 -0.0 -0.09116244316101074 0.0014089493779465556 0.0026840590871870518 0.9949684143066406 1.0 1.0 1.0 80.0 0.0 0.0 -0.0 -0.08854256570339203 0.0013684580335393548 0.002606922760605812 0.9945884346961975 1.0 1.0 1.0 100.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 Tail3 7 1.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 20.0 0.0 0.0 -0.0 -0.07381493598222733 0.0006367409368976951 0.002370495581999421 0.9972689747810364 1.0 1.0 1.0 30.0 0.0 0.0 -0.0 -0.18327367305755615 0.001580952201038599 0.005885657854378223 0.9829289317131042 1.0 1.0 1.0 50.0 0.0 0.0 -0.0 -0.14693954586982727 0.0012675272300839424 0.004718821961432695 0.9863132834434509 1.0 1.0 1.0 60.0 0.0 0.0 -0.0 -0.17594903707504272 0.001517767901532352 0.005650434643030167 0.9801920056343079 1.0 1.0 1.0 80.0 0.0 0.0 -0.0 -0.15560846030712128 0.001342306612059474 0.004997216630727053 0.9817318320274353 1.0 1.0 1.0 100.0 0.0 0.0 -0.0 0.0 0.0 -0.0 1.0 1.0 1.0 1.0 ================================================ FILE: data/animations/mongus-walk.anim ================================================ ANIMv1 mongus-walk 8 ShoulderR 8 1.0 0.0 0.0 -0.0 0.0614975243806839 0.1309172660112381 -0.15831641852855682 0.976736843585968 1.0 1.0 1.0 20.0 0.0 0.0 -0.0 0.008470319211483002 0.018031775951385498 -0.02180558070540428 0.9647844433784485 1.0 1.0 1.0 25.0 0.0 0.0 -0.0 -0.030891768634319305 -0.0657632127404213 0.07952652871608734 0.9548504948616028 1.0 1.0 1.0 30.0 0.0 0.0 -0.0 -0.038691744208335876 -0.08236809074878693 0.09960654377937317 0.962787389755249 1.0 1.0 1.0 40.0 0.0 0.0 -0.0 -0.07005808502435684 -0.149141326546669 0.180354505777359 0.9518939852714539 1.0 1.0 1.0 50.0 0.0 0.0 -0.0 -0.09704773873090744 -0.20659735798835754 0.2498352974653244 0.9410005211830139 1.0 1.0 1.0 70.0 0.0 0.0 -0.0 0.019301947206258774 0.04109038785099983 -0.04969001188874245 0.9620101451873779 1.0 1.0 1.0 100.0 0.0 0.0 -0.0 0.0614975243806839 0.1309172660112381 -0.15831641852855682 0.976736843585968 1.0 1.0 1.0 UpperarmR 8 1.0 0.0 0.0 -0.0 0.006919510662555695 0.2794632315635681 -0.04711715131998062 0.9589747786521912 1.0 1.0 1.0 20.0 0.0 0.0 -0.0 0.005241250153630972 0.2116820216178894 -0.03568931668996811 0.9650874733924866 1.0 1.0 1.0 25.0 0.0 0.0 -0.0 0.004108707886189222 0.16594111919403076 -0.02797745354473591 0.9709782004356384 1.0 1.0 1.0 30.0 0.0 0.0 -0.0 0.0016069866251200438 0.06490218639373779 -0.010942399501800537 0.9827951788902283 1.0 1.0 1.0 40.0 0.0 0.0 -0.0 0.0028686486184597015 0.11585810035467148 -0.019533537328243256 0.9902189373970032 1.0 1.0 1.0 50.0 0.0 0.0 -0.0 -0.0007765963673591614 -0.03136571869254112 0.0052882470190525055 0.9994937777519226 1.0 1.0 1.0 70.0 0.0 0.0 -0.0 0.00562440138310194 0.2271561473608017 -0.03829823434352875 0.9611713886260986 1.0 1.0 1.0 100.0 0.0 0.0 -0.0 0.006919510662555695 0.2794632315635681 -0.04711715131998062 0.9589747786521912 1.0 1.0 1.0 ForearmR 8 1.0 0.0 0.0 -0.0 7.067137630656362e-08 -0.19047221541404724 -0.0019240669207647443 0.9816908240318298 1.0 1.0 1.0 20.0 0.0 0.0 -0.0 -9.27411747397855e-09 -0.019744927063584328 -0.0001994617487071082 1.0048667192459106 1.0 1.0 1.0 25.0 0.0 0.0 -0.0 -1.1721567716449499e-08 -0.011652661487460136 -0.00011771906429203227 1.0014698505401611 1.0 1.0 1.0 30.0 0.0 0.0 -0.0 5.566107574850321e-08 -0.18068121373653412 -0.0018251416040584445 0.9745268821716309 1.0 1.0 1.0 40.0 0.0 0.0 -0.0 2.0567676983773708e-07 -0.5178977847099304 -0.005231547635048628 0.8748772144317627 1.0 1.0 1.0 50.0 0.0 0.0 -0.0 1.8362334230914712e-07 -0.46579617261886597 -0.004705254454165697 0.8848797678947449 1.0 1.0 1.0 70.0 0.0 0.0 -0.0 2.575106918811798e-07 -0.5981666445732117 -0.006042379420250654 0.789132833480835 1.0 1.0 1.0 100.0 0.0 0.0 -0.0 7.067137630656362e-08 -0.19047221541404724 -0.0019240669207647443 0.9816908240318298 1.0 1.0 1.0 FootR 8 1.0 0.0 0.0 -0.0 3.202511678068731e-08 -0.0498189777135849 -2.7443831651652317e-09 0.9987582564353943 1.0 1.0 1.0 20.0 0.0 0.0 -0.0 8.383192806604711e-08 -0.08576852083206177 -3.0749118806738807e-09 0.9942276477813721 1.0 1.0 1.0 25.0 0.0 0.0 -0.0 6.097550198091994e-08 -0.050032831728458405 -4.941883346987197e-09 0.9957387447357178 1.0 1.0 1.0 30.0 0.0 0.0 -0.0 -7.763660647697179e-08 0.24753747880458832 -5.557263804689683e-08 0.9647020101547241 1.0 1.0 1.0 40.0 0.0 0.0 -0.0 -7.763660647697179e-08 0.19134508073329926 -5.557263804689683e-08 0.979978084564209 1.0 1.0 1.0 50.0 0.0 0.0 -0.0 -5.668190183882871e-08 0.08678087592124939 -7.07617031636687e-09 0.9962273836135864 1.0 1.0 1.0 70.0 0.0 0.0 -0.0 -2.3422687789320662e-08 -0.026194855570793152 2.0128618771764195e-09 0.9975250363349915 1.0 1.0 1.0 100.0 0.0 0.0 -0.0 3.202511678068731e-08 -0.0498189777135849 -2.7443831651652317e-09 0.9987582564353943 1.0 1.0 1.0 ShoulderL 8 1.0 0.0 0.0 -0.0 -0.09988881647586823 -0.21264533698558807 -0.2571490705013275 0.9373785853385925 1.0 1.0 1.0 20.0 0.0 0.0 -0.0 -0.013078960590064526 -0.0278426893055439 -0.03366975113749504 0.9676586985588074 1.0 1.0 1.0 50.0 0.0 0.0 -0.0 0.05031353980302811 0.10710854828357697 0.12952493131160736 0.9844896793365479 1.0 1.0 1.0 65.0 0.0 0.0 -0.0 0.009079515002667904 0.019328730180859566 0.023374028503894806 0.9792407155036926 1.0 1.0 1.0 70.0 0.0 0.0 -0.0 -0.002557694911956787 -0.005444824695587158 -0.006584320217370987 0.9679065346717834 1.0 1.0 1.0 76.0 0.0 0.0 -0.0 -0.051329828798770905 -0.10927192866802216 -0.13214097917079926 0.9555510878562927 1.0 1.0 1.0 90.0 0.0 0.0 -0.0 -0.019556215032935143 -0.0416315533220768 -0.05034438520669937 0.985957682132721 1.0 1.0 1.0 100.0 0.0 0.0 -0.0 -0.09988881647586823 -0.21264533698558807 -0.2571490705013275 0.9373785853385925 1.0 1.0 1.0 UpperarmL 8 1.0 0.0 0.0 -0.0 -0.002996504306793213 -0.12102221697568893 -0.020404189825057983 0.9924356341362 1.0 1.0 1.0 20.0 0.0 0.0 -0.0 0.008682729676365852 0.3506755232810974 0.059123460203409195 0.9127218127250671 1.0 1.0 1.0 50.0 0.0 0.0 -0.0 0.007357653696089983 0.297159343957901 0.05010071024298668 0.9534842371940613 1.0 1.0 1.0 65.0 0.0 0.0 -0.0 0.004288462456315756 0.17320217192173004 0.0292016863822937 0.9729570150375366 1.0 1.0 1.0 70.0 0.0 0.0 -0.0 0.002446033526211977 0.0987904816865921 0.016655972227454185 0.9809161424636841 1.0 1.0 1.0 76.0 0.0 0.0 -0.0 0.0013692346401512623 0.05530092120170593 0.009323680773377419 0.974357545375824 1.0 1.0 1.0 90.0 0.0 0.0 -0.0 -0.006164874881505966 -0.24898359179496765 -0.04197831451892853 0.9558895230293274 1.0 1.0 1.0 100.0 0.0 0.0 -0.0 -0.002996504306793213 -0.12102221697568893 -0.020404189825057983 0.9924356341362 1.0 1.0 1.0 ForearmL 8 1.0 0.0 0.0 -0.0 6.632762961089611e-08 -0.4155174493789673 0.004197380505502224 0.9095755815505981 1.0 1.0 1.0 20.0 0.0 0.0 -0.0 7.601920515298843e-08 -0.746150553226471 0.007537288125604391 0.6539541482925415 1.0 1.0 1.0 50.0 0.0 0.0 -0.0 4.4819898903369904e-08 -0.16274617612361908 0.0016439985483884811 0.9866666793823242 1.0 1.0 1.0 65.0 0.0 0.0 -0.0 3.3563992474228144e-08 -0.002757694572210312 2.787077391985804e-05 0.9947115778923035 1.0 1.0 1.0 70.0 0.0 0.0 -0.0 4.3059117160737514e-08 -0.20271681249141693 0.0020477627404034138 0.9710670113563538 1.0 1.0 1.0 76.0 0.0 0.0 -0.0 3.663444658741355e-08 -0.17251478135585785 0.0017426657723262906 0.9716894626617432 1.0 1.0 1.0 90.0 0.0 0.0 -0.0 4.604225978255272e-08 -0.32353225350379944 0.0032681759912520647 0.9148619771003723 1.0 1.0 1.0 100.0 0.0 0.0 -0.0 6.632762961089611e-08 -0.4155174493789673 0.004197380505502224 0.9095755815505981 1.0 1.0 1.0 FootL 8 1.0 0.0 0.0 -0.0 -4.513318430099389e-08 0.07244161516427994 -9.164666803229693e-10 0.9973726868629456 1.0 1.0 1.0 20.0 0.0 0.0 -0.0 -1.2786955494448193e-07 0.17848116159439087 1.2544145278070573e-08 0.9814943671226501 1.0 1.0 1.0 50.0 0.0 0.0 -0.0 3.612026588939443e-08 -0.07460779696702957 -4.097320704943286e-09 0.9972130656242371 1.0 1.0 1.0 65.0 0.0 0.0 -0.0 3.612026588939443e-08 -0.0021853595972061157 -4.097320704943286e-09 0.9953795671463013 1.0 1.0 1.0 70.0 0.0 0.0 -0.0 -2.5984242313370487e-08 0.09706021100282669 -2.449917158031667e-09 0.9928670525550842 1.0 1.0 1.0 76.0 0.0 0.0 -0.0 -1.0624879109855101e-07 0.2973710298538208 -7.0783543471009125e-09 0.9543440937995911 1.0 1.0 1.0 90.0 0.0 0.0 -0.0 -8.399687345672646e-08 0.08331578224897385 -8.21200352163487e-09 0.9900059700012207 1.0 1.0 1.0 100.0 0.0 0.0 -0.0 -4.513318430099389e-08 0.07244161516427994 -9.164666803229693e-10 0.9973726868629456 1.0 1.0 1.0 ================================================ FILE: data/dialogs.dialog ================================================ # Tramway SDK Kitchensink Dialog File # Generated by: Kitchensink Editor v0.0.9 # Generated on: 2024.12.23. 7:46:06 DIALOGv1 dialog topic pancake-greeting none hello-i-am-pancake-man dialog topic pancake-give-quest give-quest okay-here-quest next pancake-greeting pancake-give-quest next pancake-give-quest pancake-greeting ================================================ FILE: data/editor_settings.ini ================================================ CELL_LIST_FROM_FILESYSTEM=1 INTERFACE_LANGUAGE=1 ROTATION_SNAP=7 TRANSLATION_SNAP=4 ROTATION_UNIT=1 TRANSFORM_SPACE=0 ================================================ FILE: data/entities.entdef ================================================ # basic engine entities begin name staticwobj model none field string model "none" field string lightmap "none" end begin name crate model none field string model "none" field string collision-model "none" end begin name light model dev/light field float color-r 1.0 field float color-g 1.0 field float color-b 1.0 field float distance 8.0 field float direction-x 1.0 field float direction-y 0.0 field float direction-z 0.0 field float exponent 0.0 end begin name marker model dev/marker end begin name sound model dev/sound field uint flags 0 field string sound "none" field float volume 1.0 end begin name decoration model none field uint flags 0 field string model "none" field string animation "none" end begin name trigger model none field uint flags 0 field uint collision-mask -1 field string model "none" end # additional extension entities begin name button model none field uint button-flags 0 field string model "none" field string lightmap "none" field origin origin 0.0 0.0 0.0 field direction direction 1.0 0.0 0.0 field float speed 0.5 field float pause 0.0 field float distance 1.0 field string sound "none" field string parent "none" gizmo cyan point origin gizmo cyan normal direction end ================================================ FILE: data/items.item ================================================ # Tramway SDK Kitchensink Dialog File # Generated by: Kitchensink Editor v0.0.9 # Generated on: 2024.12.23. 7:46:06 ITEMv1 item-class cake none plate default world-display cake cake-view cake-world item-layout cake 1 1 20 0.20 none item-attribute cake cakiness 100.00 item-effect cake hungwy -10.00 decwease-hungwy hungwy raise-attribute 1.00 ================================================ FILE: data/lv.lang ================================================ tramway Tramvaju Drifta Simulators mushroom snes where-egg kur ir manas olas? ================================================ FILE: data/material.list ================================================ MATv7 brick001 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same brick002 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 normal brick006 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same brick010 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same brick011 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same brick015 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same brick020 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same brick021 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same brick025 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same brick046 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same brick050 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same brick051 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same brick052 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 normal bush007 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same concrete018 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same concrete019 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same concrete027 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same concrete027b flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same detail004 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same detail004b flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same detail015 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same detail016 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same detail019 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same detail020 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same detail020b flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same detail046 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same detail048 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same detail049 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same door001 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same metal009 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same metal003 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same plank005 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same plank049 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same plaster004 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same plaster013 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same plaster014 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same plaster014b flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same plaster016 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same plaster017 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same plaster019 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same plaster021 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same plaster021b flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same plaster021c flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same plaster025 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same plaster049 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same rail011 alpha linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same roof004 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same roof006 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same roof018 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same roof046 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same roof047 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same terrain003 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same terrain005 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same terrain006 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same terrain007 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same terrain008 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same terrain009 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same terrain010 alpha linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same terrain011 alpha linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same terrain012 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same vent001 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same window003 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same window004 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same window012 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same window012b flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same window014 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same window015 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same window016 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same window017 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same window017b flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same window018 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same window019 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same window020 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same window022 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same window023 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same window024 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same window026 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same window046 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same window047 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same window054 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same pinkdick flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same pinko flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same monkemap lightmap linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same dingaling lightmap linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same dingadong lightmap linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same eye flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same tiger flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same debug flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same errortexture flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same texcom_obamabinladen flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same texcom_obamabinladen2 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same texcom_obamabinladen3 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same mongus flat linear metal 1.0 1.0 1.0 1.0 16.0 1.0 0.0 same tatra flat linear metal 1.0 1.0 1.0 1.0 1.0 0.0 0.0 same raf flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same texcom_rail flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same texcom_grass flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same texcom_road flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same water water linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same floppa flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same bingus flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same pienapaka flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same pienaveikals flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same concrete067 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 normal concrete090 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 normal rail006 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same texcom_veneer flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same texcom_cloth flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same jurmala alpha linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same street flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same grass flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same path flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same minima flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same metal107 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same detail106 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same concrete105 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same metal104 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same concrete103 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 normal window102 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same metal101 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same brick100 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same detail099 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same window098 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same window097 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same door096 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same door094 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same door093 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same plank092 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same metal091 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same plank080 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same window090 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same metal088b flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same metal089 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same metal088a flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same window087c flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same window087b flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same window087a flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same window086 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same window085 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same metal084 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same metal083 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same window081 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same voltaza alpha linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same hes alpha linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same door095 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same texcom_chain alpha linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same ciemsziime flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same concrete110 flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same kugge/akmeni flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same kugge/klajs flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same kugge/markeris water linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same kugge/metals flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same kugge/palmalapa alpha linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same kugge/palmamize flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same kugge/palmarieksts flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same kugge/skrejcels flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same kugge/smiltis flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same kugge/trapits water linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same kugge/udenis water linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same stolentoilet flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 2.0 same poland alpha linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same kjeems flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same skavotaajs flat linear metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same metalakaste flat linear metal 1.0 1.0 1.0 1.0 32.0 0.0 0.0 same metalareste alpha linear metal 1.0 1.0 1.0 1.0 32.0 0.0 0.0 same translucent blend linear metal 1.0 1.0 1.0 1.0 32.0 0.0 0.0 same dev/nodraw flat nearest metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same dev/light flat nearest metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same dev/sound flat nearest metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same dev/trigger flat nearest metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same dev/button16x16 flat nearest metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same dev/floor32x32 flat nearest metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same dev/floor128x128 flat nearest metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same dev/scaffold32x32 alpha nearest metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same dev/scale128x128 flat nearest metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same dev/vent16x16 flat nearest metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same dev/wall8x8 flat nearest metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same dev/wall16x16 flat nearest metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same dev/wall32x32 flat nearest metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same dev/wall64x64 flat nearest metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same dev/wall128x128 flat nearest metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same dev/wallstair32x32 flat nearest metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same dev/window128x128 flat nearest metal 1.0 1.0 1.0 0.0 1.0 0.0 0.0 same dev/white flat nearest metal 1.0 1.0 1.0 1.0 32.0 0.0 0.0 same #lightmap/movs lightmap nearest metal 1.0 1.0 1.0 0.0 1.0 0.0 same kastetase flat nearest metal 1.0 0.0 1.0 1.0 32.0 0.0 0.0 metalareste Material flat nearest metal 1.0 0.0 1.0 1.0 16.0 1.0 1.0 Material.01 ================================================ FILE: data/models/bingus.dymdl ================================================ DYMDLv1 2238 746 1 6 6 bingus 0.0 0.17887204885482788 0.20615297555923462 0.0 0.9208654761314392 0.3898434340953827 0.6407602429389954 0.32359591126441956 0 0.9011874198913574 4 0.008605018258094788 2 0.007983766496181488 0 0.0 -0.20940327644348145 0.18806850910186768 0.10748907923698425 -0.6282540559768677 0.6898098587989807 0.35978269577026367 0.5385096073150635 0.3671324849128723 0 0.6928527355194092 5 0.24366505444049835 4 0.0467214398086071 0 0.0 -0.20955008268356323 0.1521109938621521 0.19754719734191895 -0.5760979056358337 0.7668691277503967 0.28281503915786743 0.5366934537887573 0.3172552287578583 0 0.7591882348060608 4 0.12052897363901138 5 0.10312915593385696 0 0.0 -0.27896857261657715 0.07729777693748474 0.03905799984931946 -0.9912412166595459 0.0948820486664772 -0.09158604592084885 0.17303664982318878 0.6143929958343506 0 0.709712564945221 5 0.23412871360778809 4 0.047435592859983444 0 0.0 -0.2218678593635559 -0.11717742681503296 0.0475330650806427 -0.5801263451576233 -0.6734519600868225 -0.45811334252357483 0.22921013832092285 0.6840476989746094 0 0.89361971616745 4 0.052920397371053696 5 0.036598507314920425 0 0.0 -0.29087793827056885 0.005670234560966492 0.15487772226333618 -0.9979857802391052 0.062990203499794 -0.003906369209289551 0.16594837605953217 0.6863267421722412 0 0.7698143124580383 4 0.1380283385515213 5 0.08358502388000488 0 0.0 -0.20955008268356323 0.1521109938621521 0.19754719734191895 -0.5760979056358337 0.7668691277503967 0.28281503915786743 0.8016543388366699 0.36130064725875854 0 0.7591882348060608 4 0.12052897363901138 5 0.10312915593385696 0 0.0 -0.27896857261657715 0.07729777693748474 0.03905799984931946 -0.9912412166595459 0.0948820486664772 -0.09158604592084885 0.7514224052429199 0.4350348114967346 0 0.709712564945221 5 0.23412871360778809 4 0.047435592859983444 0 0.0 -0.29087793827056885 0.005670234560966492 0.15487772226333618 -0.9979857802391052 0.062990203499794 -0.003906369209289551 0.7238370776176453 0.4040071964263916 0 0.7698143124580383 4 0.1380283385515213 5 0.08358502388000488 0 0.0 -0.1994549036026001 -0.007807791233062744 -0.07830172777175903 -0.5622425079345703 -0.5634021759033203 -0.6053346395492554 0.23669739067554474 0.5947647094726562 0 0.8589512705802917 5 0.11174113303422928 0 0.0 0 0.0 0.0 -0.1520075798034668 0.035814911127090454 0.0 -0.8850062489509583 -0.46555987000465393 0.342818021774292 0.6868105530738831 0 0.9604138135910034 0 0.0 0 0.0 0 0.0 -0.2218678593635559 -0.11717742681503296 0.0475330650806427 -0.5801263451576233 -0.6734519600868225 -0.45811334252357483 0.22921013832092285 0.6840476989746094 0 0.89361971616745 4 0.052920397371053696 5 0.036598507314920425 0 0.0 0.0 -0.17877912521362305 0.11906552314758301 0.0 -0.9352397322654724 -0.35392314195632935 0.3381052017211914 0.7297746539115906 0 0.9514539241790771 0 0.0 0 0.0 0 0.0 -0.2218678593635559 -0.11717742681503296 0.0475330650806427 -0.5801263451576233 -0.6734519600868225 -0.45811334252357483 0.22921013832092285 0.6840476989746094 0 0.89361971616745 4 0.052920397371053696 5 0.036598507314920425 0 0.0 0.0 -0.1520075798034668 0.035814911127090454 0.0 -0.8850062489509583 -0.46555987000465393 0.342818021774292 0.6868105530738831 0 0.9604138135910034 0 0.0 0 0.0 0 0.0 -0.2333071231842041 -0.14518868923187256 0.12986749410629272 -0.6191290020942688 -0.7353739738464355 -0.27536851167678833 0.21926060318946838 0.7273061871528625 0 0.8546450138092041 4 0.10561978816986084 5 0.005903564393520355 0 0.0 -0.29087793827056885 0.005670234560966492 0.15487772226333618 -0.9979857802391052 0.062990203499794 -0.003906369209289551 0.16594837605953217 0.6863267421722412 0 0.7698143124580383 4 0.1380283385515213 5 0.08358502388000488 0 0.0 -0.2218678593635559 -0.11717742681503296 0.0475330650806427 -0.5801263451576233 -0.6734519600868225 -0.45811334252357483 0.22921013832092285 0.6840476989746094 0 0.89361971616745 4 0.052920397371053696 5 0.036598507314920425 0 0.0 -0.20780110359191895 0.12533944845199585 0.2807978391647339 -0.5116122961044312 0.844325065612793 0.1590929925441742 0.5354735851287842 0.2732369899749756 0 0.6718023419380188 4 0.25894609093666077 5 0.0418415404856205 0 0.0 0.0 0.17887204885482788 0.20615297555923462 0.0 0.9208654761314392 0.3898434340953827 0.6407602429389954 0.32359591126441956 0 0.9011874198913574 4 0.008605018258094788 2 0.007983766496181488 0 0.0 -0.20955008268356323 0.1521109938621521 0.19754719734191895 -0.5760979056358337 0.7668691277503967 0.28281503915786743 0.5366934537887573 0.3172552287578583 0 0.7591882348060608 4 0.12052897363901138 5 0.10312915593385696 0 0.0 -0.29087793827056885 0.005670234560966492 0.15487772226333618 -0.9979857802391052 0.062990203499794 -0.003906369209289551 0.7238370776176453 0.4040071964263916 0 0.7698143124580383 4 0.1380283385515213 5 0.08358502388000488 0 0.0 -0.20780110359191895 0.12533944845199585 0.2807978391647339 -0.5116122961044312 0.844325065612793 0.1590929925441742 0.793588399887085 0.3341623842716217 0 0.6718023419380188 4 0.25894609093666077 5 0.0418415404856205 0 0.0 -0.20955008268356323 0.1521109938621521 0.19754719734191895 -0.5760979056358337 0.7668691277503967 0.28281503915786743 0.8016543388366699 0.36130064725875854 0 0.7591882348060608 4 0.12052897363901138 5 0.10312915593385696 0 0.0 0.0 0.144250750541687 0.286879301071167 0.0 0.9332865476608276 0.35908079147338867 0.6393837928771973 0.278120756149292 0 0.8431402444839478 4 0.0683114305138588 2 0.06750531494617462 0 0.0 -0.15183353424072266 0.08250489830970764 0.41399872303009033 0.14777062833309174 0.9758903980255127 0.16055788099765778 0.5605605840682983 0.20316660404205322 4 0.568696916103363 0 0.35157811641693115 2 0.06581364572048187 0 0.0 0.0 0.10837686061859131 0.398435115814209 0.0 0.9131138324737549 0.40763571858406067 0.6365572810173035 0.21912050247192383 0 0.6615631580352783 4 0.16478803753852844 2 0.16256949305534363 0 0.0 0.0 0.06483566761016846 0.4689443111419678 0.0 0.9169896245002747 0.3988158702850342 0.6363822221755981 0.17513136565685272 0 0.534076988697052 4 0.23122085630893707 2 0.22778838872909546 0 0.0 0.0 0.10837686061859131 0.398435115814209 0.0 0.9131138324737549 0.40763571858406067 0.6365572810173035 0.21912050247192383 0 0.6615631580352783 4 0.16478803753852844 2 0.16256949305534363 0 0.0 -0.15183353424072266 0.08250489830970764 0.41399872303009033 0.14777062833309174 0.9758903980255127 0.16055788099765778 0.5605605840682983 0.20316660404205322 4 0.568696916103363 0 0.35157811641693115 2 0.06581364572048187 0 0.0 -0.15183353424072266 0.08250489830970764 0.41399872303009033 0.14777062833309174 0.9758903980255127 0.16055788099765778 0.5605605840682983 0.20316660404205322 4 0.568696916103363 0 0.35157811641693115 2 0.06581364572048187 0 0.0 -0.20780110359191895 0.12533944845199585 0.2807978391647339 -0.5116122961044312 0.844325065612793 0.1590929925441742 0.5354735851287842 0.2732369899749756 0 0.6718023419380188 4 0.25894609093666077 5 0.0418415404856205 0 0.0 -0.25187551975250244 0.12372738122940063 0.40594351291656494 -0.32880643010139465 0.9301126003265381 -0.16360972821712494 0.506905734539032 0.21915198862552643 4 0.7090063691139221 0 0.2557307779788971 0 0.0 0 0.0 -0.25187551975250244 0.12372738122940063 0.40594351291656494 -0.32880643010139465 0.9301126003265381 -0.16360972821712494 0.506905734539032 0.21915198862552643 4 0.7090063691139221 0 0.2557307779788971 0 0.0 0 0.0 -0.23059618473052979 0.11400431394577026 0.5390143394470215 0.18820764124393463 0.9757378101348877 -0.1116061881184578 0.5118018388748169 0.1595311015844345 4 0.9383580684661865 0 0.05173060670495033 0 0.0 0 0.0 -0.15183353424072266 0.08250489830970764 0.41399872303009033 0.14777062833309174 0.9758903980255127 0.16055788099765778 0.5605605840682983 0.20316660404205322 4 0.568696916103363 0 0.35157811641693115 2 0.06581364572048187 0 0.0 -0.15183353424072266 0.08250489830970764 0.41399872303009033 0.14777062833309174 0.9758903980255127 0.16055788099765778 0.5605605840682983 0.20316660404205322 4 0.568696916103363 0 0.35157811641693115 2 0.06581364572048187 0 0.0 -0.16343510150909424 0.09151619672775269 0.6089448928833008 0.6315500140190125 0.747611939907074 0.2053590565919876 0.5441842675209045 0.12299907207489014 4 0.9427136182785034 0 0.02507808618247509 0 0.0 0 0.0 0.0 0.06483566761016846 0.4689443111419678 0.0 0.9169896245002747 0.3988158702850342 0.6363822221755981 0.17513136565685272 0 0.534076988697052 4 0.23122085630893707 2 0.22778838872909546 0 0.0 -0.19527888298034668 0.014238350093364716 0.7056961059570312 0.3719595968723297 -0.17993712425231934 0.9106112718582153 0.779891848564148 0.7320565581321716 4 0.958198606967926 0 0.0 0 0.0 0 0.0 -0.30187129974365234 -0.08480963110923767 0.619861364364624 -0.5957213044166565 -0.6205328702926636 0.5099032521247864 0.7216191291809082 0.6659771203994751 4 0.9709039330482483 0 0.0 0 0.0 0 0.0 -0.09442317485809326 -0.08681789040565491 0.6793560981750488 0.3274635970592499 -0.27362895011901855 0.904354989528656 0.8325487375259399 0.6775317192077637 4 0.8207167387008667 0 0.10588592290878296 2 0.07276903092861176 0 0.0 -0.3469996452331543 0.10634586215019226 0.5646698474884033 -0.7864314913749695 0.5786614418029785 -0.21585741639137268 0.7268060445785522 0.19475699961185455 4 0.9651960134506226 0 0.011369410902261734 0 0.0 0 0.0 -0.23059618473052979 0.1385723352432251 0.6024715900421143 0.37034210562705994 0.7505111694335938 -0.5472884178161621 0.7850754261016846 0.19187207520008087 4 0.9903550148010254 0 0.0 0 0.0 0 0.0 -0.23059618473052979 0.11400431394577026 0.5390143394470215 0.18820764124393463 0.9757378101348877 -0.1116061881184578 0.7782641053199768 0.22510869801044464 4 0.9383580684661865 0 0.05173060670495033 0 0.0 0 0.0 -0.3028668165206909 0.03667032718658447 0.7283434867858887 -0.4055604636669159 -0.3405865728855133 0.8482314348220825 0.7277485728263855 0.7524433732032776 4 1.0068565607070923 0 0.0 0 0.0 0 0.0 -0.34602928161621094 0.1090165376663208 0.6943802833557129 -0.9147617816925049 -0.062288276851177216 0.39915159344673157 0.698062002658844 0.7733765840530396 4 0.9968497157096863 0 0.0 0 0.0 0 0.0 -0.3468945026397705 0.06105288863182068 0.6569516658782959 -0.9636219143867493 -0.16562394797801971 0.20972320437431335 0.6956770420074463 0.7410318851470947 4 0.9868455529212952 0 0.0 0 0.0 0 0.0 -0.23059618473052979 0.1385723352432251 0.6024715900421143 0.37034210562705994 0.7505111694335938 -0.5472884178161621 0.8876997828483582 0.39105933904647827 4 0.9903550148010254 0 0.0 0 0.0 0 0.0 -0.16343510150909424 0.09151619672775269 0.6089448928833008 0.6315500140190125 0.747611939907074 0.2053590565919876 0.9195019006729126 0.4097464084625244 4 0.9427136182785034 0 0.02507808618247509 0 0.0 0 0.0 -0.23059618473052979 0.11400431394577026 0.5390143394470215 0.18820764124393463 0.9757378101348877 -0.1116061881184578 0.869789183139801 0.4195291996002197 4 0.9383580684661865 0 0.05173060670495033 0 0.0 0 0.0 -0.3468945026397705 0.06105288863182068 0.6569516658782959 -0.9636219143867493 -0.16562394797801971 0.20972320437431335 0.7123997807502747 0.16860434412956238 4 0.9868455529212952 0 0.0 0 0.0 0 0.0 -0.3397330045700073 0.13471728563308716 0.614459753036499 -0.7675099968910217 0.5092929005622864 -0.3892636001110077 0.7379385232925415 0.16754750907421112 4 0.9874043464660645 0 0.0 0 0.0 0 0.0 -0.3469996452331543 0.10634586215019226 0.5646698474884033 -0.7864314913749695 0.5786614418029785 -0.21585741639137268 0.7268060445785522 0.19475699961185455 4 0.9651960134506226 0 0.011369410902261734 0 0.0 0 0.0 -0.23059618473052979 0.1385723352432251 0.6024715900421143 0.37034210562705994 0.7505111694335938 -0.5472884178161621 0.8876997828483582 0.39105933904647827 4 0.9903550148010254 0 0.0 0 0.0 0 0.0 -0.18260103464126587 0.19482123851776123 0.6990411281585693 0.9710379242897034 0.20737327635288239 0.1185949295759201 0.9239189028739929 0.33825811743736267 4 0.9989193677902222 0 0.0 0 0.0 0 0.0 -0.1780099868774414 0.10716038942337036 0.7001523971557617 0.8770104050636292 0.06659138947725296 0.4757835566997528 0.945722758769989 0.37810018658638 4 0.9911723732948303 0 0.0 0 0.0 0 0.0 -0.34602928161621094 0.1090165376663208 0.6943802833557129 -0.9147617816925049 -0.062288276851177216 0.39915159344673157 0.7268431782722473 0.1400061845779419 4 0.9968497157096863 0 0.0 0 0.0 0 0.0 -0.3276984691619873 0.20788490772247314 0.6544501781463623 -0.7152317762374878 0.3708914518356323 -0.5923337340354919 0.7646296620368958 0.13306954503059387 4 0.9982490539550781 0 0.0 0 0.0 0 0.0 -0.3397330045700073 0.13471728563308716 0.614459753036499 -0.7675099968910217 0.5092929005622864 -0.3892636001110077 0.7379385232925415 0.16754750907421112 4 0.9874043464660645 0 0.0 0 0.0 0 0.0 -0.1780099868774414 0.10716038942337036 0.7001523971557617 0.8770104050636292 0.06659138947725296 0.4757835566997528 0.7827162146568298 0.7688784003257751 4 0.9911723732948303 0 0.0 0 0.0 0 0.0 -0.26910340785980225 0.17764323949813843 0.7524588108062744 0.1340678185224533 -0.20361949503421783 0.9698172211647034 0.7397990822792053 0.818606436252594 4 0.9995130300521851 0 0.0 0 0.0 0 0.0 -0.2691516876220703 0.09592822194099426 0.7350804805755615 -0.007080294191837311 -0.13916440308094025 0.9902340769767761 0.7421389222145081 0.7785028219223022 4 0.9980854392051697 0 0.0 0 0.0 0 0.0 -0.3276984691619873 0.20788490772247314 0.6544501781463623 -0.7152317762374878 0.3708914518356323 -0.5923337340354919 0.7646296620368958 0.13306954503059387 4 0.9982490539550781 0 0.0 0 0.0 0 0.0 -0.23059618473052979 0.1385723352432251 0.6024715900421143 0.37034210562705994 0.7505111694335938 -0.5472884178161621 0.7850754261016846 0.19187207520008087 4 0.9903550148010254 0 0.0 0 0.0 0 0.0 -0.3397330045700073 0.13471728563308716 0.614459753036499 -0.7675099968910217 0.5092929005622864 -0.3892636001110077 0.7379385232925415 0.16754750907421112 4 0.9874043464660645 0 0.0 0 0.0 0 0.0 -0.2691516876220703 0.09592822194099426 0.7350804805755615 -0.007080294191837311 -0.13916440308094025 0.9902340769767761 0.7421389222145081 0.7785028219223022 4 0.9980854392051697 0 0.0 0 0.0 0 0.0 -0.3328806161880493 0.17843002080917358 0.734142541885376 -0.8033692240715027 -0.14041566848754883 0.5786614418029785 0.7056828141212463 0.8151172995567322 4 0.9993991851806641 0 0.0 0 0.0 0 0.0 -0.34602928161621094 0.1090165376663208 0.6943802833557129 -0.9147617816925049 -0.062288276851177216 0.39915159344673157 0.698062002658844 0.7733765840530396 4 0.9968497157096863 0 0.0 0 0.0 0 0.0 -0.18260103464126587 0.19482123851776123 0.6990411281585693 0.9710379242897034 0.20737327635288239 0.1185949295759201 0.7754655480384827 0.8056461215019226 4 0.9989193677902222 0 0.0 0 0.0 0 0.0 -0.2703179121017456 0.24386632442474365 0.7686514854431152 0.15445417165756226 -0.2859279215335846 0.9457075595855713 0.7375360131263733 0.851832926273346 4 0.9999034404754639 0 0.0 0 0.0 0 0.0 -0.26910340785980225 0.17764323949813843 0.7524588108062744 0.1340678185224533 -0.20361949503421783 0.9698172211647034 0.7397990822792053 0.818606436252594 4 0.9995130300521851 0 0.0 0 0.0 0 0.0 -0.3276984691619873 0.2997403144836426 0.701850414276123 -0.7264320850372314 0.28260138630867004 -0.6263924241065979 0.7918135523796082 0.08813752979040146 4 0.999759316444397 0 0.0 0 0.0 0 0.0 -0.237876296043396 0.2133294939994812 0.641486644744873 0.3396099805831909 0.47352519631385803 -0.8126468658447266 0.8041354417800903 0.15376198291778564 4 0.9994219541549683 0 0.0 0 0.0 0 0.0 -0.3276984691619873 0.20788490772247314 0.6544501781463623 -0.7152317762374878 0.3708914518356323 -0.5923337340354919 0.7646296620368958 0.13306954503059387 4 0.9982490539550781 0 0.0 0 0.0 0 0.0 -0.26910340785980225 0.17764323949813843 0.7524588108062744 0.1340678185224533 -0.20361949503421783 0.9698172211647034 0.7397990822792053 0.818606436252594 4 0.9995130300521851 0 0.0 0 0.0 0 0.0 -0.3328806161880493 0.24741899967193604 0.7576038837432861 -0.7921384572982788 -0.2150944471359253 0.5711538791656494 0.7047654390335083 0.8518280386924744 4 0.9998233914375305 0 0.0 0 0.0 0 0.0 -0.3328806161880493 0.17843002080917358 0.734142541885376 -0.8033692240715027 -0.14041566848754883 0.5786614418029785 0.7056828141212463 0.8151172995567322 4 0.9993991851806641 0 0.0 0 0.0 0 0.0 -0.237876296043396 0.2133294939994812 0.641486644744873 0.3396099805831909 0.47352519631385803 -0.8126468658447266 0.8830041289329529 0.3463095426559448 4 0.9994219541549683 0 0.0 0 0.0 0 0.0 -0.20932167768478394 0.2829176187515259 0.7541635036468506 0.9013641476631165 -0.05499435216188431 0.4294869899749756 0.9167553186416626 0.2833555042743683 4 0.9999198317527771 0 0.0 0 0.0 0 0.0 -0.18260103464126587 0.19482123851776123 0.6990411281585693 0.9710379242897034 0.20737327635288239 0.1185949295759201 0.9239189028739929 0.33825811743736267 4 0.9989193677902222 0 0.0 0 0.0 0 0.0 -0.3276984691619873 0.20788490772247314 0.6544501781463623 -0.7152317762374878 0.3708914518356323 -0.5923337340354919 0.7646296620368958 0.13306954503059387 4 0.9982490539550781 0 0.0 0 0.0 0 0.0 -0.3328806161880493 0.24741899967193604 0.7576038837432861 -0.7921384572982788 -0.2150944471359253 0.5711538791656494 0.773402750492096 0.07818431407213211 4 0.9998233914375305 0 0.0 0 0.0 0 0.0 -0.3276984691619873 0.2997403144836426 0.701850414276123 -0.7264320850372314 0.28260138630867004 -0.6263924241065979 0.7918135523796082 0.08813752979040146 4 0.999759316444397 0 0.0 0 0.0 0 0.0 -0.20780110359191895 0.12533944845199585 0.2807978391647339 -0.5116122961044312 0.844325065612793 0.1590929925441742 0.793588399887085 0.3341623842716217 0 0.6718023419380188 4 0.25894609093666077 5 0.0418415404856205 0 0.0 -0.3311045169830322 -0.06117776036262512 0.35713791847229004 -0.9543748497962952 -0.013000885024666786 -0.29825738072395325 0.6850048899650574 0.3302666246891022 4 0.6649124026298523 0 0.31008967757225037 0 0.0 0 0.0 -0.25187551975250244 0.12372738122940063 0.40594351291656494 -0.32880643010139465 0.9301126003265381 -0.16360972821712494 0.7734473347663879 0.27408310770988464 4 0.7090063691139221 0 0.2557307779788971 0 0.0 0 0.0 -0.3468945026397705 0.06105288863182068 0.6569516658782959 -0.9636219143867493 -0.16562394797801971 0.20972320437431335 0.6956770420074463 0.7410318851470947 4 0.9868455529212952 0 0.0 0 0.0 0 0.0 -0.30187129974365234 -0.08480963110923767 0.619861364364624 -0.5957213044166565 -0.6205328702926636 0.5099032521247864 0.7216191291809082 0.6659771203994751 4 0.9709039330482483 0 0.0 0 0.0 0 0.0 -0.3028668165206909 0.03667032718658447 0.7283434867858887 -0.4055604636669159 -0.3405865728855133 0.8482314348220825 0.7277485728263855 0.7524433732032776 4 1.0068565607070923 0 0.0 0 0.0 0 0.0 -0.3468945026397705 0.06105288863182068 0.6569516658782959 -0.9636219143867493 -0.16562394797801971 0.20972320437431335 0.7123997807502747 0.16860434412956238 4 0.9868455529212952 0 0.0 0 0.0 0 0.0 -0.3469996452331543 0.10634586215019226 0.5646698474884033 -0.7864314913749695 0.5786614418029785 -0.21585741639137268 0.7268060445785522 0.19475699961185455 4 0.9651960134506226 0 0.011369410902261734 0 0.0 0 0.0 -0.3541121482849121 -0.07419586181640625 0.4291270971298218 -0.9666127562522888 -0.2230903059244156 -0.125919371843338 0.6707702279090881 0.29945147037506104 4 0.834575891494751 0 0.14992909133434296 0 0.0 0 0.0 -0.3541121482849121 -0.07419586181640625 0.4291270971298218 -0.9666127562522888 -0.2230903059244156 -0.125919371843338 0.6707702279090881 0.29945147037506104 4 0.834575891494751 0 0.14992909133434296 0 0.0 0 0.0 -0.25187551975250244 0.12372738122940063 0.40594351291656494 -0.32880643010139465 0.9301126003265381 -0.16360972821712494 0.7734473347663879 0.27408310770988464 4 0.7090063691139221 0 0.2557307779788971 0 0.0 0 0.0 -0.3311045169830322 -0.06117776036262512 0.35713791847229004 -0.9543748497962952 -0.013000885024666786 -0.29825738072395325 0.6850048899650574 0.3302666246891022 4 0.6649124026298523 0 0.31008967757225037 0 0.0 0 0.0 -0.3403736352920532 0.3993680477142334 0.7714123725891113 -0.6911221742630005 0.7172459959983826 0.08874782919883728 0.8158060908317566 0.02945329248905182 4 0.9999796152114868 0 0.0 0 0.0 0 0.0 -0.237876296043396 0.37244415283203125 0.7143435478210449 0.4520706832408905 0.5877559781074524 -0.6709189414978027 0.8513078689575195 0.07979519665241241 4 1.0000070333480835 0 0.0 0 0.0 0 0.0 -0.3276984691619873 0.2997403144836426 0.701850414276123 -0.7264320850372314 0.28260138630867004 -0.6263924241065979 0.7918135523796082 0.08813752979040146 4 0.999759316444397 0 0.0 0 0.0 0 0.0 -0.237876296043396 0.37244415283203125 0.7143435478210449 0.4520706832408905 0.5877559781074524 -0.6709189414978027 0.873521625995636 0.25355786085128784 4 1.0000070333480835 0 0.0 0 0.0 0 0.0 -0.22349166870117188 0.37734532356262207 0.784529447555542 0.7459639310836792 0.3484298288822174 0.5675222277641296 0.9024268984794617 0.2320421040058136 4 0.9999761581420898 0 0.0 0 0.0 0 0.0 -0.20932167768478394 0.2829176187515259 0.7541635036468506 0.9013641476631165 -0.05499435216188431 0.4294869899749756 0.9167553186416626 0.2833555042743683 4 0.9999198317527771 0 0.0 0 0.0 0 0.0 -0.34603846073150635 0.34535515308380127 0.7890980243682861 -0.7636646628379822 0.0001831110566854477 0.6455580592155457 0.7970283031463623 0.03577974811196327 4 0.9999548196792603 0 0.0 0 0.0 0 0.0 -0.3276984691619873 0.2997403144836426 0.701850414276123 -0.7264320850372314 0.28260138630867004 -0.6263924241065979 0.7918135523796082 0.08813752979040146 4 0.999759316444397 0 0.0 0 0.0 0 0.0 -0.3328806161880493 0.24741899967193604 0.7576038837432861 -0.7921384572982788 -0.2150944471359253 0.5711538791656494 0.773402750492096 0.07818431407213211 4 0.9998233914375305 0 0.0 0 0.0 0 0.0 -0.2844879627227783 0.30941593647003174 0.7897307872772217 0.059114351868629456 -0.191625714302063 0.9796746969223022 0.7294446229934692 0.8867914080619812 4 0.9999726414680481 0 0.0 0 0.0 0 0.0 -0.3328806161880493 0.24741899967193604 0.7576038837432861 -0.7921384572982788 -0.2150944471359253 0.5711538791656494 0.7047654390335083 0.8518280386924744 4 0.9998233914375305 0 0.0 0 0.0 0 0.0 -0.2703179121017456 0.24386632442474365 0.7686514854431152 0.15445417165756226 -0.2859279215335846 0.9457075595855713 0.7375360131263733 0.851832926273346 4 0.9999034404754639 0 0.0 0 0.0 0 0.0 -0.20932167768478394 0.2829176187515259 0.7541635036468506 0.9013641476631165 -0.05499435216188431 0.4294869899749756 0.7640476226806641 0.8615762591362 4 0.9999198317527771 0 0.0 0 0.0 0 0.0 -0.2844879627227783 0.30941593647003174 0.7897307872772217 0.059114351868629456 -0.191625714302063 0.9796746969223022 0.7294446229934692 0.8867914080619812 4 0.9999726414680481 0 0.0 0 0.0 0 0.0 -0.2703179121017456 0.24386632442474365 0.7686514854431152 0.15445417165756226 -0.2859279215335846 0.9457075595855713 0.7375360131263733 0.851832926273346 4 0.9999034404754639 0 0.0 0 0.0 0 0.0 -0.2844879627227783 0.30941593647003174 0.7897307872772217 0.059114351868629456 -0.191625714302063 0.9796746969223022 0.7294446229934692 0.8867914080619812 4 0.9999726414680481 0 0.0 0 0.0 0 0.0 -0.26705384254455566 0.41719162464141846 0.7832803726196289 0.14835047721862793 0.9023407697677612 0.4046449065208435 0.7314229607582092 0.9295790791511536 4 0.9999954104423523 0 0.0 0 0.0 0 0.0 -0.34603846073150635 0.34535515308380127 0.7890980243682861 -0.7636646628379822 0.0001831110566854477 0.6455580592155457 0.6966750025749207 0.9037923216819763 4 0.9999548196792603 0 0.0 0 0.0 0 0.0 -0.2691516876220703 0.09592822194099426 0.7350804805755615 -0.007080294191837311 -0.13916440308094025 0.9902340769767761 0.7421389222145081 0.7785028219223022 4 0.9980854392051697 0 0.0 0 0.0 0 0.0 -0.19527888298034668 0.014238350093364716 0.7056961059570312 0.3719595968723297 -0.17993712425231934 0.9106112718582153 0.779891848564148 0.7320565581321716 4 0.958198606967926 0 0.0 0 0.0 0 0.0 -0.1780099868774414 0.10716038942337036 0.7001523971557617 0.8770104050636292 0.06659138947725296 0.4757835566997528 0.7827162146568298 0.7688784003257751 4 0.9911723732948303 0 0.0 0 0.0 0 0.0 -0.16343510150909424 0.09151619672775269 0.6089448928833008 0.6315500140190125 0.747611939907074 0.2053590565919876 0.9195019006729126 0.4097464084625244 4 0.9427136182785034 0 0.02507808618247509 0 0.0 0 0.0 -0.1780099868774414 0.10716038942337036 0.7001523971557617 0.8770104050636292 0.06659138947725296 0.4757835566997528 0.945722758769989 0.37810018658638 4 0.9911723732948303 0 0.0 0 0.0 0 0.0 -0.19527888298034668 0.014238350093364716 0.7056961059570312 0.3719595968723297 -0.17993712425231934 0.9106112718582153 0.9643253684043884 0.4195291996002197 4 0.958198606967926 0 0.0 0 0.0 0 0.0 -0.09442317485809326 -0.08681789040565491 0.6793560981750488 0.3274635970592499 -0.27362895011901855 0.904354989528656 0.5895189642906189 0.03625130653381348 4 0.8207167387008667 0 0.10588592290878296 2 0.07276903092861176 0 0.0 -0.16343510150909424 0.09151619672775269 0.6089448928833008 0.6315500140190125 0.747611939907074 0.2053590565919876 0.5441842675209045 0.12299907207489014 4 0.9427136182785034 0 0.02507808618247509 0 0.0 0 0.0 -0.19527888298034668 0.014238350093364716 0.7056961059570312 0.3719595968723297 -0.17993712425231934 0.9106112718582153 0.5291039943695068 0.056795794516801834 4 0.958198606967926 0 0.0 0 0.0 0 0.0 -0.16343510150909424 0.09151619672775269 0.6089448928833008 0.6315500140190125 0.747611939907074 0.2053590565919876 0.5441842675209045 0.12299907207489014 4 0.9427136182785034 0 0.02507808618247509 0 0.0 0 0.0 0.0 -0.03274005651473999 0.5830428600311279 0.0 0.3660695254802704 0.9305703639984131 0.6381930708885193 0.0952436700463295 0 0.3733152747154236 4 0.3145773410797119 2 0.31029725074768066 0 0.0 0.0 0.06483566761016846 0.4689443111419678 0.0 0.9169896245002747 0.3988158702850342 0.6363822221755981 0.17513136565685272 0 0.534076988697052 4 0.23122085630893707 2 0.22778838872909546 0 0.0 0.0 -0.03274005651473999 0.5830428600311279 0.0 0.3660695254802704 0.9305703639984131 0.8648743033409119 0.6659566164016724 0 0.3733152747154236 4 0.3145773410797119 2 0.31029725074768066 0 0.0 -0.09442317485809326 -0.08681789040565491 0.6793560981750488 0.3274635970592499 -0.27362895011901855 0.904354989528656 0.8325487375259399 0.6775317192077637 4 0.8207167387008667 0 0.10588592290878296 2 0.07276903092861176 0 0.0 0.0 -0.2221187949180603 0.49811649322509766 0.0 -0.9373455047607422 0.3483687937259674 0.8648743033409119 0.5585253834724426 0 0.5169974565505981 4 0.24156785011291504 2 0.23979748785495758 0 0.0 -0.09442317485809326 -0.08681789040565491 0.6793560981750488 0.3274635970592499 -0.27362895011901855 0.904354989528656 0.8325487375259399 0.6775317192077637 4 0.8207167387008667 0 0.10588592290878296 2 0.07276903092861176 0 0.0 -0.15126758813858032 -0.20477783679962158 0.5203018188476562 -0.16193121671676636 -0.9197363257408142 0.3574938178062439 0.7911576628684998 0.5780675411224365 4 0.6618149876594543 0 0.24621523916721344 2 0.08992583304643631 0 0.0 0.0 -0.2221187949180603 0.49811649322509766 0.0 -0.9373455047607422 0.3483687937259674 0.8648743033409119 0.5585253834724426 0 0.5169974565505981 4 0.24156785011291504 2 0.23979748785495758 0 0.0 -0.15126758813858032 -0.20477783679962158 0.5203018188476562 -0.16193121671676636 -0.9197363257408142 0.3574938178062439 0.7911576628684998 0.5780675411224365 4 0.6618149876594543 0 0.24621523916721344 2 0.08992583304643631 0 0.0 -0.30187129974365234 -0.08480963110923767 0.619861364364624 -0.5957213044166565 -0.6205328702926636 0.5099032521247864 0.7216191291809082 0.6659771203994751 4 0.9709039330482483 0 0.0 0 0.0 0 0.0 -0.2433398962020874 -0.18356812000274658 0.4825398921966553 -0.504165768623352 -0.8324533700942993 0.2297738641500473 0.7394121289253235 0.5778254270553589 4 0.7843207120895386 0 0.1828809678554535 2 0.009385161101818085 0 0.0 -0.2433398962020874 -0.18356812000274658 0.4825398921966553 -0.504165768623352 -0.8324533700942993 0.2297738641500473 0.7394121289253235 0.5778254270553589 4 0.7843207120895386 0 0.1828809678554535 2 0.009385161101818085 0 0.0 -0.3541121482849121 -0.07419586181640625 0.4291270971298218 -0.9666127562522888 -0.2230903059244156 -0.125919371843338 0.6715637445449829 0.6103150844573975 4 0.834575891494751 0 0.14992909133434296 0 0.0 0 0.0 -0.24950921535491943 -0.1970342993736267 0.3751683235168457 -0.49635303020477295 -0.861873209476471 -0.10370189696550369 0.7239003777503967 0.5375181436538696 4 0.6294618248939514 0 0.3361990749835968 2 0.005392234772443771 0 0.0 -0.24950921535491943 -0.1970342993736267 0.3751683235168457 -0.49635303020477295 -0.861873209476471 -0.10370189696550369 0.1934516727924347 0.8448641896247864 4 0.6294618248939514 0 0.3361990749835968 2 0.005392234772443771 0 0.0 -0.3311045169830322 -0.06117776036262512 0.35713791847229004 -0.9543748497962952 -0.013000885024666786 -0.29825738072395325 0.13535627722740173 0.7921632528305054 4 0.6649124026298523 0 0.31008967757225037 0 0.0 0 0.0 -0.2483149766921997 -0.1659679412841797 0.2751126289367676 -0.6037476658821106 -0.766502857208252 -0.21887874603271484 0.1998605728149414 0.7935872673988342 0 0.618188202381134 4 0.3514956831932068 0 0.0 0 0.0 -0.2483149766921997 -0.1659679412841797 0.2751126289367676 -0.6037476658821106 -0.766502857208252 -0.21887874603271484 0.1998605728149414 0.7935872673988342 0 0.618188202381134 4 0.3514956831932068 0 0.0 0 0.0 -0.2891288995742798 -0.053497374057769775 0.22732973098754883 -0.9860530495643616 -0.06204412877559662 -0.15433210134506226 0.16813310980796814 0.7361131310462952 0 0.6697622537612915 4 0.28313446044921875 5 0.02448401227593422 0 0.0 -0.2333071231842041 -0.14518868923187256 0.12986749410629272 -0.6191290020942688 -0.7353739738464355 -0.27536851167678833 0.21926060318946838 0.7273061871528625 0 0.8546450138092041 4 0.10561978816986084 5 0.005903564393520355 0 0.0 -0.2333071231842041 -0.14518868923187256 0.12986749410629272 -0.6191290020942688 -0.7353739738464355 -0.27536851167678833 0.21926060318946838 0.7273061871528625 0 0.8546450138092041 4 0.10561978816986084 5 0.005903564393520355 0 0.0 0.0 -0.22177386283874512 0.21981686353683472 0.0 -0.982146680355072 -0.18799401819705963 0.33400920033454895 0.7854426503181458 0 0.9121978878974915 4 0.0331408865749836 2 0.0324675627052784 0 0.0 -0.2483149766921997 -0.1659679412841797 0.2751126289367676 -0.6037476658821106 -0.766502857208252 -0.21887874603271484 0.1998605728149414 0.7935872673988342 0 0.618188202381134 4 0.3514956831932068 0 0.0 0 0.0 0.0 -0.2242426872253418 0.35177063941955566 0.0 -0.999267578125 -0.03799554333090782 0.3204757869243622 0.8396906852722168 0 0.7614060640335083 4 0.11837860941886902 2 0.11738711595535278 0 0.0 -0.2483149766921997 -0.1659679412841797 0.2751126289367676 -0.6037476658821106 -0.766502857208252 -0.21887874603271484 0.1998605728149414 0.7935872673988342 0 0.618188202381134 4 0.3514956831932068 0 0.0 0 0.0 0.0 -0.22177386283874512 0.21981686353683472 0.0 -0.982146680355072 -0.18799401819705963 0.33400920033454895 0.7854426503181458 0 0.9121978878974915 4 0.0331408865749836 2 0.0324675627052784 0 0.0 -0.15126758813858032 -0.20477783679962158 0.5203018188476562 -0.16193121671676636 -0.9197363257408142 0.3574938178062439 0.22674739360809326 0.9042510390281677 4 0.6618149876594543 0 0.24621523916721344 2 0.08992583304643631 0 0.0 -0.2433398962020874 -0.18356812000274658 0.4825398921966553 -0.504165768623352 -0.8324533700942993 0.2297738641500473 0.18306925892829895 0.8835158944129944 4 0.7843207120895386 0 0.1828809678554535 2 0.009385161101818085 0 0.0 -0.24950921535491943 -0.1970342993736267 0.3751683235168457 -0.49635303020477295 -0.861873209476471 -0.10370189696550369 0.1934516727924347 0.8448641896247864 4 0.6294618248939514 0 0.3361990749835968 2 0.005392234772443771 0 0.0 -0.20940327644348145 0.18806850910186768 0.10748907923698425 -0.6282540559768677 0.6898098587989807 0.35978269577026367 0.8133400082588196 0.3891247510910034 0 0.6928527355194092 5 0.24366505444049835 4 0.0467214398086071 0 0.0 -0.25873374938964844 0.14417153596878052 -0.10946205258369446 -0.7939695119857788 -0.46391186118125916 -0.39286476373672485 0.7813736200332642 0.48258087038993835 5 0.742128312587738 0 0.24162344634532928 0 0.0 0 0.0 -0.27896857261657715 0.07729777693748474 0.03905799984931946 -0.9912412166595459 0.0948820486664772 -0.09158604592084885 0.7514224052429199 0.4350348114967346 0 0.709712564945221 5 0.23412871360778809 4 0.047435592859983444 0 0.0 -0.25873374938964844 0.14417153596878052 -0.10946205258369446 -0.7939695119857788 -0.46391186118125916 -0.39286476373672485 0.18831117451190948 0.5307038426399231 5 0.742128312587738 0 0.24162344634532928 0 0.0 0 0.0 -0.1994549036026001 -0.007807791233062744 -0.07830172777175903 -0.5622425079345703 -0.5634021759033203 -0.6053346395492554 0.23669739067554474 0.5947647094726562 0 0.8589512705802917 5 0.11174113303422928 0 0.0 0 0.0 -0.27896857261657715 0.07729777693748474 0.03905799984931946 -0.9912412166595459 0.0948820486664772 -0.09158604592084885 0.17303664982318878 0.6143929958343506 0 0.709712564945221 5 0.23412871360778809 4 0.047435592859983444 0 0.0 0.0 0.219041109085083 0.11931818723678589 0.0 0.8301644921302795 0.557481586933136 0.642014741897583 0.37345194816589355 0 0.8959391713142395 5 0.029438931494951248 3 0.028147835284471512 0 0.0 -0.1905134916305542 0.2867305278778076 0.004207689315080643 -0.2593463063240051 0.6273384690284729 0.7342753410339355 0.545678436756134 0.4428918659687042 5 0.7955154776573181 0 0.17753516137599945 0 0.0 0 0.0 -0.20940327644348145 0.18806850910186768 0.10748907923698425 -0.6282540559768677 0.6898098587989807 0.35978269577026367 0.5385096073150635 0.3671324849128723 0 0.6928527355194092 5 0.24366505444049835 4 0.0467214398086071 0 0.0 -0.1772594451904297 0.11724525690078735 -0.1825990080833435 -0.44734030961990356 -0.4271370470523834 -0.7857600450515747 0.23943009972572327 0.508765459060669 0 0.679053783416748 5 0.28637537360191345 1 0.0027251355350017548 0 0.0 0.0 -0.05573540925979614 -0.1027672290802002 0.0 -0.7233496904373169 -0.6904507875442505 0.3428180515766144 0.5973702669143677 0 0.949096143245697 0 0.0 0 0.0 0 0.0 -0.1994549036026001 -0.007807791233062744 -0.07830172777175903 -0.5622425079345703 -0.5634021759033203 -0.6053346395492554 0.23669739067554474 0.5947647094726562 0 0.8589512705802917 5 0.11174113303422928 0 0.0 0 0.0 -0.1905134916305542 0.2867305278778076 0.004207689315080643 -0.2593463063240051 0.6273384690284729 0.7342753410339355 0.8839541673660278 0.6740447282791138 5 0.7955154776573181 0 0.17753516137599945 0 0.0 0 0.0 -0.3247077465057373 0.1585661768913269 -0.04109635949134827 -0.06991790235042572 -0.9837946891784668 0.16495254635810852 0.9672834277153015 0.6379106640815735 5 0.9739239811897278 0 0.0 0 0.0 0 0.0 -0.25873374938964844 0.14417153596878052 -0.10946205258369446 -0.7939695119857788 -0.46391186118125916 -0.39286476373672485 0.9841787815093994 0.6740447282791138 5 0.742128312587738 0 0.24162344634532928 0 0.0 0 0.0 -0.25873374938964844 0.14417153596878052 -0.10946205258369446 -0.7939695119857788 -0.46391186118125916 -0.39286476373672485 0.18831117451190948 0.5307038426399231 5 0.742128312587738 0 0.24162344634532928 0 0.0 0 0.0 -0.3432735204696655 0.26402461528778076 -0.1277342438697815 -0.573839545249939 0.09149449318647385 -0.8138371109962463 0.13124819099903107 0.48351210355758667 5 0.9874638915061951 0 0.0 0 0.0 0 0.0 -0.2681701183319092 0.2678663730621338 -0.16814452409744263 -0.5125888586044312 0.191473126411438 -0.8369701504707336 0.17117449641227722 0.4642834961414337 5 0.9366347789764404 0 0.04793867841362953 0 0.0 0 0.0 -0.1905134916305542 0.2867305278778076 0.004207689315080643 -0.2593463063240051 0.6273384690284729 0.7342753410339355 0.545678436756134 0.4428918659687042 5 0.7955154776573181 0 0.17753516137599945 0 0.0 0 0.0 -0.29355669021606445 0.34976017475128174 -0.07433450222015381 -0.23679311573505402 0.9682607650756836 -0.0796533077955246 0.49234965443611145 0.4958604872226715 5 0.9535803198814392 0 0.013973209075629711 0 0.0 0 0.0 -0.2911590337753296 0.2942936420440674 0.005826227366924286 0.20746482908725739 0.4108707010746002 0.8877529501914978 0.4938306510448456 0.4439513385295868 5 0.9641268253326416 0 0.010711431503295898 0 0.0 0 0.0 -0.2681701183319092 0.2678663730621338 -0.16814452409744263 -0.5125888586044312 0.191473126411438 -0.8369701504707336 0.5837397575378418 0.8574127554893494 5 0.9366347789764404 0 0.04793867841362953 0 0.0 0 0.0 -0.29355669021606445 0.34976017475128174 -0.07433450222015381 -0.23679311573505402 0.9682607650756836 -0.0796533077955246 0.6434169411659241 0.8292502164840698 5 0.9535803198814392 0 0.013973209075629711 0 0.0 0 0.0 -0.17369681596755981 0.36367666721343994 -0.10281378030776978 -0.2631000578403473 0.9605090618133545 0.09018219262361526 0.6518501043319702 0.8928941488265991 5 0.7450196743011475 0 0.160955548286438 1 0.08608341217041016 0 0.0 -0.2911590337753296 0.2942936420440674 0.005826227366924286 0.20746482908725739 0.4108707010746002 0.8877529501914978 0.4938306510448456 0.4439513385295868 5 0.9641268253326416 0 0.010711431503295898 0 0.0 0 0.0 -0.3900512456893921 0.3162165880203247 -0.022862508893013 -0.34510329365730286 0.9354228377342224 -0.07635731250047684 0.44328606128692627 0.4625326693058014 5 0.9904302954673767 0 0.0 0 0.0 0 0.0 -0.34428489208221436 0.28179633617401123 0.046254053711891174 0.47929319739341736 0.3894161880016327 0.7865230441093445 0.46575069427490234 0.4223727583885193 5 0.9903120398521423 0 0.0 0 0.0 0 0.0 -0.3432735204696655 0.26402461528778076 -0.1277342438697815 -0.573839545249939 0.09149449318647385 -0.8138371109962463 0.5876299142837524 0.8122449517250061 5 0.9874638915061951 0 0.0 0 0.0 0 0.0 -0.3900512456893921 0.3162165880203247 -0.022862508893013 -0.34510329365730286 0.9354228377342224 -0.07635731250047684 0.6370754837989807 0.7687724828720093 5 0.9904302954673767 0 0.0 0 0.0 0 0.0 -0.29355669021606445 0.34976017475128174 -0.07433450222015381 -0.23679311573505402 0.9682607650756836 -0.0796533077955246 0.6434169411659241 0.8292502164840698 5 0.9535803198814392 0 0.013973209075629711 0 0.0 0 0.0 -0.34428489208221436 0.28179633617401123 0.046254053711891174 0.47929319739341736 0.3894161880016327 0.7865230441093445 0.8977068662643433 0.5999657511711121 5 0.9903120398521423 0 0.0 0 0.0 0 0.0 -0.3247077465057373 0.1585661768913269 -0.04109635949134827 -0.06991790235042572 -0.9837946891784668 0.16495254635810852 0.9672834277153015 0.6379106640815735 5 0.9739239811897278 0 0.0 0 0.0 0 0.0 -0.2911590337753296 0.2942936420440674 0.005826227366924286 0.20746482908725739 0.4108707010746002 0.8877529501914978 0.8978860974311829 0.6235358715057373 5 0.9641268253326416 0 0.010711431503295898 0 0.0 0 0.0 -0.3247077465057373 0.1585661768913269 -0.04109635949134827 -0.06991790235042572 -0.9837946891784668 0.16495254635810852 0.14707791805267334 0.5547357797622681 5 0.9739239811897278 0 0.0 0 0.0 0 0.0 -0.43937599658966064 0.23811864852905273 -0.05854392051696777 -0.6367992162704468 -0.09231849014759064 -0.765465259552002 0.08150046318769455 0.522465169429779 5 0.9980949759483337 0 0.0 0 0.0 0 0.0 -0.3432735204696655 0.26402461528778076 -0.1277342438697815 -0.573839545249939 0.09149449318647385 -0.8138371109962463 0.13124819099903107 0.48351210355758667 5 0.9874638915061951 0 0.0 0 0.0 0 0.0 -0.43937599658966064 0.23811864852905273 -0.05854392051696777 -0.6367992162704468 -0.09231849014759064 -0.765465259552002 0.5900217294692993 0.7481352686882019 5 0.9980949759483337 0 0.0 0 0.0 0 0.0 -0.4554738998413086 0.2947545051574707 0.029965192079544067 -0.4450819492340088 0.8953825235366821 0.013611255213618279 0.6390498280525208 0.7233343124389648 5 0.9976549744606018 0 0.0 0 0.0 0 0.0 -0.3900512456893921 0.3162165880203247 -0.022862508893013 -0.34510329365730286 0.9354228377342224 -0.07635731250047684 0.6370754837989807 0.7687724828720093 5 0.9904302954673767 0 0.0 0 0.0 0 0.0 -0.3984619379043579 0.26093626022338867 0.08564722537994385 0.4599139392375946 0.35129857063293457 0.8154851198196411 0.9010043740272522 0.57774817943573 5 0.9975098967552185 0 0.0 0 0.0 0 0.0 -0.3816554546356201 0.17568820714950562 0.02271178364753723 0.3256935477256775 -0.9139378070831299 0.24204230308532715 0.9494260549545288 0.6056154370307922 5 0.9991349577903748 0 0.0 0 0.0 0 0.0 -0.34428489208221436 0.28179633617401123 0.046254053711891174 0.47929319739341736 0.3894161880016327 0.7865230441093445 0.8977068662643433 0.5999657511711121 5 0.9903120398521423 0 0.0 0 0.0 0 0.0 -0.3816554546356201 0.17568820714950562 0.02271178364753723 0.3256935477256775 -0.9139378070831299 0.24204230308532715 0.11026795953512192 0.5757925510406494 5 0.9991349577903748 0 0.0 0 0.0 0 0.0 -0.5047986507415771 0.20594364404678345 -0.004644919186830521 -0.6930753588676453 -0.20831935107707977 -0.6900539994239807 0.049123793840408325 0.5567721724510193 5 0.9997888803482056 0 0.0 0 0.0 0 0.0 -0.43937599658966064 0.23811864852905273 -0.05854392051696777 -0.6367992162704468 -0.09231849014759064 -0.765465259552002 0.08150046318769455 0.522465169429779 5 0.9980949759483337 0 0.0 0 0.0 0 0.0 -0.34428489208221436 0.28179633617401123 0.046254053711891174 0.47929319739341736 0.3894161880016327 0.7865230441093445 0.46575069427490234 0.4223727583885193 5 0.9903120398521423 0 0.0 0 0.0 0 0.0 -0.4554738998413086 0.2947545051574707 0.029965192079544067 -0.4450819492340088 0.8953825235366821 0.013611255213618279 0.4090229272842407 0.43271535634994507 5 0.9976549744606018 0 0.0 0 0.0 0 0.0 -0.3984619379043579 0.26093626022338867 0.08564722537994385 0.4599139392375946 0.35129857063293457 0.8154851198196411 0.43783387541770935 0.39854317903518677 5 0.9975098967552185 0 0.0 0 0.0 0 0.0 -0.1772594451904297 0.11724525690078735 -0.1825990080833435 -0.44734030961990356 -0.4271370470523834 -0.7857600450515747 0.23943009972572327 0.508765459060669 0 0.679053783416748 5 0.28637537360191345 1 0.0027251355350017548 0 0.0 -0.2681701183319092 0.2678663730621338 -0.16814452409744263 -0.5125888586044312 0.191473126411438 -0.8369701504707336 0.17117449641227722 0.4642834961414337 5 0.9366347789764404 0 0.04793867841362953 0 0.0 0 0.0 -0.12932729721069336 0.17944878339767456 -0.22509831190109253 -0.36967071890830994 -0.269569993019104 -0.8891872763633728 0.25760719180107117 0.4690239429473877 0 0.75160151720047 5 0.16934442520141602 1 0.07229789346456528 0 0.0 0.0 0.317891001701355 0.011525623500347137 0.0 0.8030030131340027 0.5959654450416565 0.6397891640663147 0.4510643780231476 0 0.7890903353691101 5 0.08665546774864197 3 0.08514407277107239 1 0.019098643213510513 -0.17369681596755981 0.36367666721343994 -0.10281378030776978 -0.2631000578403473 0.9605090618133545 0.09018219262361526 0.5536576509475708 0.5132588744163513 5 0.7450196743011475 0 0.160955548286438 1 0.08608341217041016 0 0.0 -0.1905134916305542 0.2867305278778076 0.004207689315080643 -0.2593463063240051 0.6273384690284729 0.7342753410339355 0.545678436756134 0.4428918659687042 5 0.7955154776573181 0 0.17753516137599945 0 0.0 0 0.0 -0.17586100101470947 0.3179171085357666 -0.20532292127609253 -0.6381115317344666 0.3986937999725342 -0.6586504578590393 0.6007186770439148 0.9138137102127075 5 0.4061179459095001 0 0.3688215911388397 1 0.22085097432136536 0 0.0 -0.12932729721069336 0.17944878339767456 -0.22509831190109253 -0.36967071890830994 -0.269569993019104 -0.8891872763633728 0.5448826551437378 0.9278662204742432 0 0.75160151720047 5 0.16934442520141602 1 0.07229789346456528 0 0.0 -0.2681701183319092 0.2678663730621338 -0.16814452409744263 -0.5125888586044312 0.191473126411438 -0.8369701504707336 0.5837397575378418 0.8574127554893494 5 0.9366347789764404 0 0.04793867841362953 0 0.0 0 0.0 -0.17369681596755981 0.36367666721343994 -0.10281378030776978 -0.2631000578403473 0.9605090618133545 0.09018219262361526 0.6518501043319702 0.8928941488265991 5 0.7450196743011475 0 0.160955548286438 1 0.08608341217041016 0 0.0 -0.17586100101470947 0.3179171085357666 -0.20532292127609253 -0.6381115317344666 0.3986937999725342 -0.6586504578590393 0.6007186770439148 0.9138137102127075 5 0.4061179459095001 0 0.3688215911388397 1 0.22085097432136536 0 0.0 -0.2681701183319092 0.2678663730621338 -0.16814452409744263 -0.5125888586044312 0.191473126411438 -0.8369701504707336 0.5837397575378418 0.8574127554893494 5 0.9366347789764404 0 0.04793867841362953 0 0.0 0 0.0 0.0 0.3707171678543091 -0.08462855219841003 0.0 0.904324471950531 0.4267708361148834 0.6405338048934937 0.5089500546455383 0 0.7102694511413574 1 0.14585299789905548 5 0.07208946347236633 3 0.07045222818851471 -0.11685270071029663 0.37915825843811035 -0.15417778491973877 -0.40092167258262634 0.9032562971115112 0.15277566015720367 0.583946704864502 0.540475606918335 0 0.406307578086853 1 0.29193368554115295 5 0.2888135612010956 0 0.0 -0.17369681596755981 0.36367666721343994 -0.10281378030776978 -0.2631000578403473 0.9605090618133545 0.09018219262361526 0.5536576509475708 0.5132588744163513 5 0.7450196743011475 0 0.160955548286438 1 0.08608341217041016 0 0.0 0.0 0.2078162431716919 -0.2881510257720947 0.0 -0.4107486307621002 -0.9117404818534851 0.3223710358142853 0.43101730942726135 0 0.7689260244369507 1 0.2003297209739685 0 0.0 0 0.0 -0.12932729721069336 0.17944878339767456 -0.22509831190109253 -0.36967071890830994 -0.269569993019104 -0.8891872763633728 0.25760719180107117 0.4690239429473877 0 0.75160151720047 5 0.16934442520141602 1 0.07229789346456528 0 0.0 -0.07002320885658264 0.2813262939453125 -0.2664802074432373 -0.5305337905883789 -0.30652791261672974 -0.790276825428009 0.27513593435287476 0.4157503545284271 0 0.6349360942840576 1 0.3262842893600464 5 0.01936449483036995 0 0.0 0.0 0.09937161207199097 -0.21314752101898193 0.0 -0.5446943640708923 -0.8385875821113586 0.3309190571308136 0.4989504814147949 0 0.9125122427940369 5 0.011346809566020966 3 0.010605178773403168 1 0.0003351755440235138 -0.12932729721069336 0.17944878339767456 -0.22509831190109253 -0.36967071890830994 -0.269569993019104 -0.8891872763633728 0.25760719180107117 0.4690239429473877 0 0.75160151720047 5 0.16934442520141602 1 0.07229789346456528 0 0.0 0.0 0.14566397666931152 -0.24244439601898193 0.0 -0.5614489912986755 -0.8274788856506348 0.32698339223861694 0.4710521399974823 0 0.8837517499923706 1 0.06194183975458145 5 0.0038842111825942993 3 0.003427356481552124 -0.17586100101470947 0.3179171085357666 -0.20532292127609253 -0.6381115317344666 0.3986937999725342 -0.6586504578590393 0.21205389499664307 0.42999351024627686 5 0.4061179459095001 0 0.3688215911388397 1 0.22085097432136536 0 0.0 -0.07341891527175903 0.3139185905456543 -0.28698432445526123 -0.6358226537704468 -0.38373973965644836 -0.669667661190033 0.27071312069892883 0.3962279260158539 1 0.6878011226654053 0 0.2799515724182129 5 0.008950736373662949 0 0.0 -0.07002320885658264 0.2813262939453125 -0.2664802074432373 -0.5305337905883789 -0.30652791261672974 -0.790276825428009 0.27513593435287476 0.4157503545284271 0 0.6349360942840576 1 0.3262842893600464 5 0.01936449483036995 0 0.0 -0.07002320885658264 0.2813262939453125 -0.2664802074432373 -0.5305337905883789 -0.30652791261672974 -0.790276825428009 0.27513593435287476 0.4157503545284271 0 0.6349360942840576 1 0.3262842893600464 5 0.01936449483036995 0 0.0 0.0 0.29299962520599365 -0.3292173147201538 0.0 -0.5545213222503662 -0.8321481943130493 0.3137752413749695 0.3848779797554016 1 0.7812550663948059 0 0.20431587100028992 0 0.0 0 0.0 0.0 0.2078162431716919 -0.2881510257720947 0.0 -0.4107486307621002 -0.9117404818534851 0.3223710358142853 0.43101730942726135 0 0.7689260244369507 1 0.2003297209739685 0 0.0 0 0.0 0.0 0.398445725440979 -0.14425861835479736 0.0 0.9055452346801758 0.42420727014541626 0.6413841247558594 0.5432328581809998 0 0.5077889561653137 1 0.39139166474342346 5 0.050735753029584885 3 0.04906380549073219 -0.09905996918678284 0.40596628189086914 -0.19437533617019653 -0.5630664825439453 0.7503280639648438 0.34626302123069763 0.5929415822029114 0.566311240196228 1 0.6564067006111145 0 0.20795942842960358 5 0.12716107070446014 0 0.0 -0.11685270071029663 0.37915825843811035 -0.15417778491973877 -0.40092167258262634 0.9032562971115112 0.15277566015720367 0.583946704864502 0.540475606918335 0 0.406307578086853 1 0.29193368554115295 5 0.2888135612010956 0 0.0 -0.11685270071029663 0.37915825843811035 -0.15417778491973877 -0.40092167258262634 0.9032562971115112 0.15277566015720367 0.6471365094184875 0.9334772229194641 0 0.406307578086853 1 0.29193368554115295 5 0.2888135612010956 0 0.0 -0.12179547548294067 0.3854290246963501 -0.23301446437835693 -0.8996246457099915 0.39896848797798157 -0.17743460834026337 0.6237066984176636 0.9517653584480286 1 0.7106906175613403 0 0.1698828488588333 5 0.11525022983551025 0 0.0 -0.17586100101470947 0.3179171085357666 -0.20532292127609253 -0.6381115317344666 0.3986937999725342 -0.6586504578590393 0.6007186770439148 0.9138137102127075 5 0.4061179459095001 0 0.3688215911388397 1 0.22085097432136536 0 0.0 0.0 0.6696534156799316 -0.16029703617095947 0.0 0.940275251865387 0.3403424024581909 0.3807303011417389 0.9247735738754272 1 0.9826752543449402 0 0.0 0 0.0 0 0.0 -0.023262888193130493 0.648740291595459 -0.1271979808807373 -0.27558213472366333 0.8101443648338318 0.5173802971839905 0.39259374141693115 0.9457398056983948 1 0.9771129488945007 0 0.0 0 0.0 0 0.0 0.0 0.6520125865936279 -0.12054771184921265 0.0 0.8378856778144836 0.5458235144615173 0.38134899735450745 0.9473562836647034 1 0.9767983555793762 0 0.0 0 0.0 0 0.0 0.0 0.6859500408172607 -0.227411150932312 0.0 0.8990447521209717 0.4377880096435547 0.37864139676094055 0.8909733295440674 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -0.05297325551509857 0.6632869243621826 -0.17042005062103271 -0.42271187901496887 0.8485671281814575 0.3181249499320984 0.40667101740837097 0.9228817820549011 1 0.983020007610321 0 0.0 0 0.0 0 0.0 0.0 0.6696534156799316 -0.16029703617095947 0.0 0.940275251865387 0.3403424024581909 0.3807303011417389 0.9247735738754272 1 0.9826752543449402 0 0.0 0 0.0 0 0.0 0.0 0.6859500408172607 -0.227411150932312 0.0 0.8990447521209717 0.4377880096435547 0.37864139676094055 0.8909733295440674 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -0.037127718329429626 0.7183771133422852 -0.2708592414855957 -0.12225715070962906 0.7812433242797852 0.6121097207069397 0.3978635370731354 0.8623329997062683 1 0.994320273399353 0 0.0 0 0.0 0 0.0 -0.03514702618122101 0.6757450103759766 -0.23533987998962402 -0.3003937005996704 0.825434148311615 0.4778893291950226 0.39532920718193054 0.891121506690979 1 0.990458607673645 0 0.0 0 0.0 0 0.0 -0.07448214292526245 0.6610023975372314 -0.22847318649291992 -0.29837948083877563 0.8330942988395691 0.46571245789527893 0.41453418135643005 0.8990539312362671 1 0.9883941411972046 0 0.0 0 0.0 0 0.0 -0.03514702618122101 0.6757450103759766 -0.23533987998962402 -0.3003937005996704 0.825434148311615 0.4778893291950226 0.39532920718193054 0.891121506690979 1 0.990458607673645 0 0.0 0 0.0 0 0.0 -0.07567718625068665 0.6810379028320312 -0.25069737434387207 -0.19437238574028015 0.6898708939552307 0.6973174214363098 0.41558343172073364 0.883171558380127 1 0.9912397861480713 0 0.0 0 0.0 0 0.0 -0.037127718329429626 0.7183771133422852 -0.2708592414855957 -0.12225715070962906 0.7812433242797852 0.6121097207069397 0.3978635370731354 0.8623329997062683 1 0.994320273399353 0 0.0 0 0.0 0 0.0 -0.07567718625068665 0.6810379028320312 -0.25069737434387207 -0.19437238574028015 0.6898708939552307 0.6973174214363098 0.41558343172073364 0.883171558380127 1 0.9912397861480713 0 0.0 0 0.0 0 0.0 -0.03514702618122101 0.6757450103759766 -0.23533987998962402 -0.3003937005996704 0.825434148311615 0.4778893291950226 0.39532920718193054 0.891121506690979 1 0.990458607673645 0 0.0 0 0.0 0 0.0 -0.04406014084815979 0.5062999725341797 -0.1307528018951416 -0.6033509373664856 -0.4283883273601532 0.6725974082946777 0.9375776648521423 0.05149134621024132 1 0.9309578537940979 0 0.0509604811668396 0 0.0 0 0.0 -0.03217598795890808 0.5661249160766602 -0.10826873779296875 -0.6189153790473938 -0.002288888208568096 0.7854243516921997 0.9652963876724243 0.03581248223781586 1 0.9586777091026306 0 0.010506756603717804 0 0.0 0 0.0 -0.059905678033828735 0.5519924163818359 -0.12115323543548584 -0.43357646465301514 -0.15253150463104248 0.8880886435508728 0.9615859389305115 0.05308860167860985 1 0.954840362071991 0 0.015901487320661545 0 0.0 0 0.0 0.0 0.5866754055023193 -0.08073744177818298 0.0 0.20923489332199097 0.9778435826301575 0.9745243191719055 0.012592869810760021 1 0.9624937176704407 0 0.004993952810764313 0 0.0 0 0.0 -0.03217598795890808 0.5661249160766602 -0.10826873779296875 -0.6189153790473938 -0.002288888208568096 0.7854243516921997 0.9652963876724243 0.03581248223781586 1 0.9586777091026306 0 0.010506756603717804 0 0.0 0 0.0 -0.019301503896713257 0.5543453693389893 -0.08724924921989441 -0.7199926972389221 0.03091524913907051 0.6932584643363953 0.963473379611969 0.025931738317012787 1 0.9545494914054871 0 0.016858559101819992 0 0.0 0 0.0 0.0 0.6267490386962891 -0.09107580780982971 0.0 0.4541764557361603 0.8908963203430176 0.38086456060409546 0.9680102467536926 1 0.9708038568496704 0 0.0 0 0.0 0 0.0 -0.023262888193130493 0.648740291595459 -0.1271979808807373 -0.27558213472366333 0.8101443648338318 0.5173802971839905 0.39259374141693115 0.9457398056983948 1 0.9771129488945007 0 0.0 0 0.0 0 0.0 -0.04604083299636841 0.629746675491333 -0.11427515745162964 -0.5255287289619446 0.4360484480857849 0.730491042137146 0.4033519923686981 0.9574975967407227 1 0.9731501340866089 0 0.0 0 0.0 0 0.0 -0.019301511347293854 0.6020534038543701 -0.09771808981895447 -0.5544602870941162 0.06466872245073318 0.8296762108802795 0.9800795912742615 0.024327803403139114 1 0.9663617610931396 0 0.0 0 0.0 0 0.0 0.0 0.6267490386962891 -0.09107580780982971 0.0 0.4541764557361603 0.8908963203430176 0.9880750775337219 0.011592945083975792 1 0.9708038568496704 0 0.0 0 0.0 0 0.0 -0.04604083299636841 0.629746675491333 -0.11427515745162964 -0.5255287289619446 0.4360484480857849 0.730491042137146 0.9921565055847168 0.03848811611533165 1 0.9731501340866089 0 0.0 0 0.0 0 0.0 0.0 0.4937889575958252 -0.09715571999549866 0.0 -0.6279793977737427 0.7781914472579956 0.9327072501182556 0.023990735411643982 1 0.9297935366630554 0 0.05221788212656975 0 0.0 0 0.0 0.0 0.5465192794799805 -0.07160291075706482 0.0 -0.15399639308452606 0.9880367517471313 0.9606301188468933 0.013870302587747574 1 0.9529521465301514 0 0.019347991794347763 0 0.0 0 0.0 -0.019301503896713257 0.5543453693389893 -0.08724924921989441 -0.7199926972389221 0.03091524913907051 0.6932584643363953 0.963473379611969 0.025931738317012787 1 0.9545494914054871 0 0.016858559101819992 0 0.0 0 0.0 0.0 0.5866754055023193 -0.08073744177818298 0.0 0.20923489332199097 0.9778435826301575 0.9745243191719055 0.012592869810760021 1 0.9624937176704407 0 0.004993952810764313 0 0.0 0 0.0 -0.019301503896713257 0.5543453693389893 -0.08724924921989441 -0.7199926972389221 0.03091524913907051 0.6932584643363953 0.963473379611969 0.025931738317012787 1 0.9545494914054871 0 0.016858559101819992 0 0.0 0 0.0 0.0 0.5465192794799805 -0.07160291075706482 0.0 -0.15399639308452606 0.9880367517471313 0.9606301188468933 0.013870302587747574 1 0.9529521465301514 0 0.019347991794347763 0 0.0 0 0.0 -0.0992489755153656 0.6243481636047363 -0.1760026216506958 -0.6385387778282166 0.5357829332351685 0.5523850321769714 0.42691096663475037 0.9333289265632629 1 0.9787691831588745 0 0.0 0 0.0 0 0.0 -0.07448214292526245 0.6610023975372314 -0.22847318649291992 -0.29837948083877563 0.8330942988395691 0.46571245789527893 0.41453418135643005 0.8990539312362671 1 0.9883941411972046 0 0.0 0 0.0 0 0.0 -0.12389302253723145 0.6452987194061279 -0.2239953875541687 -0.3717764914035797 0.6311227679252625 0.6807458996772766 0.4386693835258484 0.9063490033149719 1 0.9863486289978027 0 0.0 0 0.0 0 0.0 -0.04604083299636841 0.629746675491333 -0.11427515745162964 -0.5255287289619446 0.4360484480857849 0.730491042137146 0.4033519923686981 0.9574975967407227 1 0.9731501340866089 0 0.0 0 0.0 0 0.0 -0.05297325551509857 0.6632869243621826 -0.17042005062103271 -0.42271187901496887 0.8485671281814575 0.3181249499320984 0.40667101740837097 0.9228817820549011 1 0.983020007610321 0 0.0 0 0.0 0 0.0 -0.0992489755153656 0.6243481636047363 -0.1760026216506958 -0.6385387778282166 0.5357829332351685 0.5523850321769714 0.42691096663475037 0.9333289265632629 1 0.9787691831588745 0 0.0 0 0.0 0 0.0 -0.03217598795890808 0.5661249160766602 -0.10826873779296875 -0.6189153790473938 -0.002288888208568096 0.7854243516921997 0.9652963876724243 0.03581248223781586 1 0.9586777091026306 0 0.010506756603717804 0 0.0 0 0.0 -0.04604083299636841 0.629746675491333 -0.11427515745162964 -0.5255287289619446 0.4360484480857849 0.730491042137146 0.9921565055847168 0.03848811611533165 1 0.9731501340866089 0 0.0 0 0.0 0 0.0 -0.059905678033828735 0.5519924163818359 -0.12115323543548584 -0.43357646465301514 -0.15253150463104248 0.8880886435508728 0.9615859389305115 0.05308860167860985 1 0.954840362071991 0 0.015901487320661545 0 0.0 0 0.0 -0.08664500713348389 0.49995994567871094 -0.15126699209213257 -0.5456098914146423 -0.5877254605293274 0.5973693132400513 0.9379087686538696 0.07691145688295364 1 0.9311727285385132 0 0.04860582575201988 0 0.0 0 0.0 -0.059905678033828735 0.5519924163818359 -0.12115323543548584 -0.43357646465301514 -0.15253150463104248 0.8880886435508728 0.9615859389305115 0.05308860167860985 1 0.954840362071991 0 0.015901487320661545 0 0.0 0 0.0 -0.09060636162757874 0.555675745010376 -0.14083874225616455 -0.6668904423713684 -0.021729178726673126 0.7448042035102844 0.9639025330543518 0.07183090597391129 1 0.9576939344406128 0 0.010987870395183563 0 0.0 0 0.0 -0.09060636162757874 0.555675745010376 -0.14083874225616455 -0.6668904423713684 -0.021729178726673126 0.7448042035102844 0.9639025330543518 0.07183090597391129 1 0.9576939344406128 0 0.010987870395183563 0 0.0 0 0.0 -0.04604083299636841 0.629746675491333 -0.11427515745162964 -0.5255287289619446 0.4360484480857849 0.730491042137146 0.9921565055847168 0.03848811611533165 1 0.9731501340866089 0 0.0 0 0.0 0 0.0 -0.0992489755153656 0.6243481636047363 -0.1760026216506958 -0.6385387778282166 0.5357829332351685 0.5523850321769714 0.9842876195907593 0.0781567320227623 1 0.9787691831588745 0 0.0 0 0.0 0 0.0 -0.12900519371032715 0.580592155456543 -0.1809338927268982 -0.7435224652290344 0.13650929927825928 0.6545915007591248 0.9710297584533691 0.09706727415323257 1 0.9719146490097046 0 0.0 0 0.0 0 0.0 -0.08664500713348389 0.49995994567871094 -0.15126699209213257 -0.5456098914146423 -0.5877254605293274 0.5973693132400513 0.9379087686538696 0.07691145688295364 1 0.9311727285385132 0 0.04860582575201988 0 0.0 0 0.0 -0.09060636162757874 0.555675745010376 -0.14083874225616455 -0.6668904423713684 -0.021729178726673126 0.7448042035102844 0.9639025330543518 0.07183090597391129 1 0.9576939344406128 0 0.010987870395183563 0 0.0 0 0.0 -0.17542767524719238 0.5399246215820312 -0.2481163740158081 -0.886593222618103 -0.28980377316474915 0.36039307713508606 0.9461795687675476 0.1376567780971527 1 0.9722244739532471 0 0.0 0 0.0 0 0.0 -0.12900519371032715 0.580592155456543 -0.1809338927268982 -0.7435224652290344 0.13650929927825928 0.6545915007591248 0.9710297584533691 0.09706727415323257 1 0.9719146490097046 0 0.0 0 0.0 0 0.0 -0.18975555896759033 0.5741572380065918 -0.27861666679382324 -0.9336222410202026 -0.14868617057800293 0.3259071707725525 0.9549236297607422 0.14849883317947388 1 0.9830207824707031 0 0.0 0 0.0 0 0.0 0.0 0.7655167579650879 -0.3776092529296875 0.0 0.9911190867424011 0.13275551795959473 0.37730279564857483 0.8014988899230957 1 0.9984956979751587 0 0.0 0 0.0 0 0.0 -0.041914358735084534 0.7521989345550537 -0.3280456066131592 -0.06817834824323654 0.921597957611084 0.3820917308330536 0.40006113052368164 0.8271682858467102 1 0.9970929026603699 0 0.0 0 0.0 0 0.0 0.0 0.7441883087158203 -0.3209085464477539 0.0 0.9060335159301758 0.42320016026496887 0.37848225235939026 0.8324812054634094 1 0.9969311356544495 0 0.0 0 0.0 0 0.0 -0.059245407581329346 0.759354829788208 -0.3721191883087158 -0.1420636624097824 0.9840388298034668 0.10684530436992645 0.40722841024398804 0.8062321543693542 1 0.9981564879417419 0 0.0 0 0.0 0 0.0 0.0 0.7663571834564209 -0.4498615264892578 0.0 0.9117709994316101 -0.41062653064727783 0.3737609088420868 0.7704716324806213 1 0.9993343353271484 0 0.0 0 0.0 0 0.0 -0.07492586970329285 0.7546496391296387 -0.43943047523498535 0.1832026094198227 0.964598536491394 -0.1896420121192932 0.4114780128002167 0.779198944568634 1 0.9989303350448608 0 0.0 0 0.0 0 0.0 0.0 0.7286481857299805 -0.29208290576934814 0.0 0.8584246635437012 0.5129246115684509 0.3787182867527008 0.8497394323348999 1 0.9956300258636475 0 0.0 0 0.0 0 0.0 -0.041914358735084534 0.7521989345550537 -0.3280456066131592 -0.06817834824323654 0.921597957611084 0.3820917308330536 0.40006113052368164 0.8271682858467102 1 0.9970929026603699 0 0.0 0 0.0 0 0.0 -0.037127718329429626 0.7183771133422852 -0.2708592414855957 -0.12225715070962906 0.7812433242797852 0.6121097207069397 0.3978635370731354 0.8623329997062683 1 0.994320273399353 0 0.0 0 0.0 0 0.0 -0.041914358735084534 0.7521989345550537 -0.3280456066131592 -0.06817834824323654 0.921597957611084 0.3820917308330536 0.40006113052368164 0.8271682858467102 1 0.9970929026603699 0 0.0 0 0.0 0 0.0 -0.11437469720840454 0.7034616470336914 -0.2846221923828125 -0.12384410947561264 0.6982024312019348 0.7050996422767639 0.4353049099445343 0.8618066906929016 1 0.9938564300537109 0 0.0 0 0.0 0 0.0 -0.037127718329429626 0.7183771133422852 -0.2708592414855957 -0.12225715070962906 0.7812433242797852 0.6121097207069397 0.3978635370731354 0.8623329997062683 1 0.994320273399353 0 0.0 0 0.0 0 0.0 -0.12900519371032715 0.580592155456543 -0.1809338927268982 -0.7435224652290344 0.13650929927825928 0.6545915007591248 0.4384097158908844 0.9454826712608337 1 0.9719146490097046 0 0.0 0 0.0 0 0.0 -0.0992489755153656 0.6243481636047363 -0.1760026216506958 -0.6385387778282166 0.5357829332351685 0.5523850321769714 0.42691096663475037 0.9333289265632629 1 0.9787691831588745 0 0.0 0 0.0 0 0.0 -0.1536492109298706 0.6081211566925049 -0.22929680347442627 -0.7448957562446594 0.18478956818580627 0.6410412788391113 0.450658917427063 0.9162338972091675 1 0.9825789928436279 0 0.0 0 0.0 0 0.0 -0.18975555896759033 0.5741572380065918 -0.27861666679382324 -0.9336222410202026 -0.14868617057800293 0.3259071707725525 0.9549236297607422 0.14849883317947388 1 0.9830207824707031 0 0.0 0 0.0 0 0.0 -0.12900519371032715 0.580592155456543 -0.1809338927268982 -0.7435224652290344 0.13650929927825928 0.6545915007591248 0.9710297584533691 0.09706727415323257 1 0.9719146490097046 0 0.0 0 0.0 0 0.0 -0.1536492109298706 0.6081211566925049 -0.22929680347442627 -0.7448957562446594 0.18478956818580627 0.6410412788391113 0.974439799785614 0.11739514768123627 1 0.9825789928436279 0 0.0 0 0.0 0 0.0 -0.18975555896759033 0.5741572380065918 -0.27861666679382324 -0.9336222410202026 -0.14868617057800293 0.3259071707725525 0.9549236297607422 0.14849883317947388 1 0.9830207824707031 0 0.0 0 0.0 0 0.0 -0.16969645023345947 0.6551282405853271 -0.246321439743042 -0.6105228066444397 0.38544878363609314 0.6918545961380005 0.9921565055847168 0.12496611475944519 1 0.9888336658477783 0 0.0 0 0.0 0 0.0 -0.2143995761871338 0.6344926357269287 -0.3323737382888794 -0.8702353239059448 -0.09164708107709885 0.4839930534362793 0.9702180027961731 0.1673179417848587 1 0.9925930500030518 0 0.0 0 0.0 0 0.0 -0.2143995761871338 0.6344926357269287 -0.3323737382888794 -0.8702353239059448 -0.09164708107709885 0.4839930534362793 0.886073887348175 0.48145270347595215 1 0.9925930500030518 0 0.0 0 0.0 0 0.0 -0.1668308973312378 0.6906447410583496 -0.2779656648635864 -0.5177770256996155 0.6292916536331177 0.5795159935951233 0.8731365203857422 0.4358011484146118 1 0.9922270178794861 0 0.0 0 0.0 0 0.0 -0.17808693647384644 0.7106759548187256 -0.3287475109100342 -0.5918454527854919 0.7044282555580139 0.39173558354377747 0.886073887348175 0.43914392590522766 1 0.995280921459198 0 0.0 0 0.0 0 0.0 -0.1668308973312378 0.6906447410583496 -0.2779656648635864 -0.5177770256996155 0.6292916536331177 0.5795159935951233 0.46132102608680725 0.8691244125366211 1 0.9922270178794861 0 0.0 0 0.0 0 0.0 -0.12691903114318848 0.7287836074829102 -0.3071833848953247 -0.20764793455600739 0.8145695328712463 0.5415814518928528 0.4425181448459625 0.8441644906997681 1 0.9954788684844971 0 0.0 0 0.0 0 0.0 -0.17808693647384644 0.7106759548187256 -0.3287475109100342 -0.5918454527854919 0.7044282555580139 0.39173558354377747 0.46606069803237915 0.8411576151847839 1 0.995280921459198 0 0.0 0 0.0 0 0.0 -0.12389302253723145 0.6452987194061279 -0.2239953875541687 -0.3717764914035797 0.6311227679252625 0.6807458996772766 0.4386693835258484 0.9063490033149719 1 0.9863486289978027 0 0.0 0 0.0 0 0.0 -0.1536492109298706 0.6081211566925049 -0.22929680347442627 -0.7448957562446594 0.18478956818580627 0.6410412788391113 0.450658917427063 0.9162338972091675 1 0.9825789928436279 0 0.0 0 0.0 0 0.0 -0.0992489755153656 0.6243481636047363 -0.1760026216506958 -0.6385387778282166 0.5357829332351685 0.5523850321769714 0.42691096663475037 0.9333289265632629 1 0.9787691831588745 0 0.0 0 0.0 0 0.0 -0.12691903114318848 0.7287836074829102 -0.3071833848953247 -0.20764793455600739 0.8145695328712463 0.5415814518928528 0.4425181448459625 0.8441644906997681 1 0.9954788684844971 0 0.0 0 0.0 0 0.0 -0.059245407581329346 0.759354829788208 -0.3721191883087158 -0.1420636624097824 0.9840388298034668 0.10684530436992645 0.40722841024398804 0.8062321543693542 1 0.9981564879417419 0 0.0 0 0.0 0 0.0 -0.13420909643173218 0.7470312118530273 -0.36113905906677246 -0.2852870225906372 0.9150669574737549 0.2850123643875122 0.44494444131851196 0.8153911232948303 1 0.9972430467605591 0 0.0 0 0.0 0 0.0 -0.12691903114318848 0.7287836074829102 -0.3071833848953247 -0.20764793455600739 0.8145695328712463 0.5415814518928528 0.4425181448459625 0.8441644906997681 1 0.9954788684844971 0 0.0 0 0.0 0 0.0 -0.13420909643173218 0.7470312118530273 -0.36113905906677246 -0.2852870225906372 0.9150669574737549 0.2850123643875122 0.44494444131851196 0.8153911232948303 1 0.9972430467605591 0 0.0 0 0.0 0 0.0 -0.17808693647384644 0.7106759548187256 -0.3287475109100342 -0.5918454527854919 0.7044282555580139 0.39173558354377747 0.46606069803237915 0.8411576151847839 1 0.995280921459198 0 0.0 0 0.0 0 0.0 -0.07492586970329285 0.7546496391296387 -0.43943047523498535 0.1832026094198227 0.964598536491394 -0.1896420121192932 0.4114780128002167 0.779198944568634 1 0.9989303350448608 0 0.0 0 0.0 0 0.0 -0.13420909643173218 0.7470312118530273 -0.36113905906677246 -0.2852870225906372 0.9150669574737549 0.2850123643875122 0.44494444131851196 0.8153911232948303 1 0.9972430467605591 0 0.0 0 0.0 0 0.0 -0.059245407581329346 0.759354829788208 -0.3721191883087158 -0.1420636624097824 0.9840388298034668 0.10684530436992645 0.40722841024398804 0.8062321543693542 1 0.9981564879417419 0 0.0 0 0.0 0 0.0 -0.07492586970329285 0.7546496391296387 -0.43943047523498535 0.1832026094198227 0.964598536491394 -0.1896420121192932 0.4114780128002167 0.779198944568634 1 0.9989303350448608 0 0.0 0 0.0 0 0.0 -0.15930330753326416 0.8070216178894043 -0.5146346092224121 -0.2629169523715973 0.6476333141326904 0.7151402235031128 0.4546871483325958 0.7309730052947998 1 0.998006284236908 0 0.0 0 0.0 0 0.0 -0.13420909643173218 0.7470312118530273 -0.36113905906677246 -0.2852870225906372 0.9150669574737549 0.2850123643875122 0.44494444131851196 0.8153911232948303 1 0.9972430467605591 0 0.0 0 0.0 0 0.0 -0.17808693647384644 0.7106759548187256 -0.3287475109100342 -0.5918454527854919 0.7044282555580139 0.39173558354377747 0.46606069803237915 0.8411576151847839 1 0.995280921459198 0 0.0 0 0.0 0 0.0 -0.2714434862136841 0.6815202236175537 -0.37427401542663574 -0.8992888927459717 0.2068544626235962 0.38532671332359314 0.5090063214302063 0.8317936658859253 1 0.9954916834831238 0 0.0 0 0.0 0 0.0 -0.2143995761871338 0.6344926357269287 -0.3323737382888794 -0.8702353239059448 -0.09164708107709885 0.4839930534362793 0.4784485101699829 0.8643201589584351 1 0.9925930500030518 0 0.0 0 0.0 0 0.0 -0.23513078689575195 0.6938152313232422 -0.4137706756591797 -0.09668263792991638 0.8894924521446228 0.4465163052082062 0.48952001333236694 0.8107777237892151 1 0.9962413311004639 0 0.0 0 0.0 0 0.0 -0.3023422956466675 0.7849597930908203 -0.4707658290863037 -0.809015154838562 0.40089112520217896 0.4297921657562256 0.527910053730011 0.7577385902404785 1 0.9974499344825745 0 0.0 0 0.0 0 0.0 -0.2714434862136841 0.6815202236175537 -0.37427401542663574 -0.8992888927459717 0.2068544626235962 0.38532671332359314 0.5090063214302063 0.8317936658859253 1 0.9954916834831238 0 0.0 0 0.0 0 0.0 -0.13420909643173218 0.7470312118530273 -0.36113905906677246 -0.2852870225906372 0.9150669574737549 0.2850123643875122 0.44494444131851196 0.8153911232948303 1 0.9972430467605591 0 0.0 0 0.0 0 0.0 -0.23513078689575195 0.6938152313232422 -0.4137706756591797 -0.09668263792991638 0.8894924521446228 0.4465163052082062 0.48952001333236694 0.8107777237892151 1 0.9962413311004639 0 0.0 0 0.0 0 0.0 -0.17808693647384644 0.7106759548187256 -0.3287475109100342 -0.5918454527854919 0.7044282555580139 0.39173558354377747 0.46606069803237915 0.8411576151847839 1 0.995280921459198 0 0.0 0 0.0 0 0.0 -0.2505803108215332 0.7695996761322021 -0.48949456214904785 0.1833857297897339 0.7009491324424744 0.6891995072364807 0.4994630813598633 0.7543298602104187 1 0.9975656867027283 0 0.0 0 0.0 0 0.0 -0.19472473859786987 0.7452795505523682 -0.4596238136291504 -0.36835840344429016 0.7375103235244751 0.5659962892532349 0.47066688537597656 0.7744562029838562 1 0.9974808096885681 0 0.0 0 0.0 0 0.0 -0.19472473859786987 0.7745609283447266 -0.48571276664733887 -0.06698812544345856 0.6877346038818359 0.7228308916091919 0.47163125872612 0.7539528608322144 1 0.9977116584777832 0 0.0 0 0.0 0 0.0 -0.15930330753326416 0.8070216178894043 -0.5146346092224121 -0.2629169523715973 0.6476333141326904 0.7151402235031128 0.4546871483325958 0.7309730052947998 1 0.998006284236908 0 0.0 0 0.0 0 0.0 -0.19472473859786987 0.7452795505523682 -0.4596238136291504 -0.36835840344429016 0.7375103235244751 0.5659962892532349 0.47066688537597656 0.7744562029838562 1 0.9974808096885681 0 0.0 0 0.0 0 0.0 -0.13420909643173218 0.7470312118530273 -0.36113905906677246 -0.2852870225906372 0.9150669574737549 0.2850123643875122 0.44494444131851196 0.8153911232948303 1 0.9972430467605591 0 0.0 0 0.0 0 0.0 -0.15930330753326416 0.8070216178894043 -0.5146346092224121 -0.2629169523715973 0.6476333141326904 0.7151402235031128 0.4546871483325958 0.7309730052947998 1 0.998006284236908 0 0.0 0 0.0 0 0.0 -0.2505803108215332 0.7695996761322021 -0.48949456214904785 0.1833857297897339 0.7009491324424744 0.6891995072364807 0.4994630813598633 0.7543298602104187 1 0.9975656867027283 0 0.0 0 0.0 0 0.0 -0.19472473859786987 0.7745609283447266 -0.48571276664733887 -0.06698812544345856 0.6877346038818359 0.7228308916091919 0.47163125872612 0.7539528608322144 1 0.9977116584777832 0 0.0 0 0.0 0 0.0 -0.29834794998168945 0.8586046695709229 -0.544276237487793 -0.7876216769218445 0.5459151268005371 0.2855921983718872 0.527910053730011 0.7027824521064758 1 0.997727632522583 0 0.0 0 0.0 0 0.0 -0.2505803108215332 0.7695996761322021 -0.48949456214904785 0.1833857297897339 0.7009491324424744 0.6891995072364807 0.4994630813598633 0.7543298602104187 1 0.9975656867027283 0 0.0 0 0.0 0 0.0 -0.2460576295852661 0.8691680431365967 -0.5895872116088867 0.0476393923163414 0.5283669829368591 0.8476516008377075 0.49987420439720154 0.6797340512275696 1 0.9978271722793579 0 0.0 0 0.0 0 0.0 -0.2947826385498047 0.9091815948486328 -0.5893387794494629 -0.82534259557724 0.5525681376457214 0.11593981832265854 0.5277626514434814 0.6673424243927002 1 0.9977961778640747 0 0.0 0 0.0 0 0.0 -0.2460576295852661 0.8691680431365967 -0.5895872116088867 0.0476393923163414 0.5283669829368591 0.8476516008377075 0.49987420439720154 0.6797340512275696 1 0.9978271722793579 0 0.0 0 0.0 0 0.0 -0.2638838291168213 0.9322519302368164 -0.609893798828125 -0.14166691899299622 0.9372844696044922 -0.3183690905570984 0.5128092169761658 0.650969922542572 1 0.9978176355361938 0 0.0 0 0.0 0 0.0 -0.2638838291168213 0.9322519302368164 -0.609893798828125 -0.14166691899299622 0.9372844696044922 -0.3183690905570984 0.5128092169761658 0.650969922542572 1 0.9978176355361938 0 0.0 0 0.0 0 0.0 -0.2460576295852661 0.8691680431365967 -0.5895872116088867 0.0476393923163414 0.5283669829368591 0.8476516008377075 0.49987420439720154 0.6797340512275696 1 0.9978271722793579 0 0.0 0 0.0 0 0.0 -0.20446312427520752 0.9136180877685547 -0.5932917594909668 0.4698324501514435 0.8652912974357605 -0.1745048314332962 0.48197782039642334 0.6635977029800415 1 0.9978581666946411 0 0.0 0 0.0 0 0.0 -0.20446312427520752 0.9136180877685547 -0.5932917594909668 0.4698324501514435 0.8652912974357605 -0.1745048314332962 0.48197782039642334 0.6635977029800415 1 0.9978581666946411 0 0.0 0 0.0 0 0.0 -0.15930330753326416 0.8070216178894043 -0.5146346092224121 -0.2629169523715973 0.6476333141326904 0.7151402235031128 0.4546871483325958 0.7309730052947998 1 0.998006284236908 0 0.0 0 0.0 0 0.0 -0.12602776288986206 0.8367936611175537 -0.5169486999511719 0.5360575914382935 0.844019889831543 0.014984588138759136 0.4399544298648834 0.7201979756355286 1 0.9980955123901367 0 0.0 0 0.0 0 0.0 -0.12602776288986206 0.8367936611175537 -0.5169486999511719 0.5360575914382935 0.844019889831543 0.014984588138759136 0.9544497728347778 0.7932650446891785 1 0.9980955123901367 0 0.0 0 0.0 0 0.0 -0.08317875862121582 0.7046983242034912 -0.4855692386627197 0.20276497304439545 0.3567918837070465 -0.9118930697441101 0.9190778136253357 0.8595334887504578 1 0.9991375803947449 0 0.0 0 0.0 0 0.0 -0.1937013864517212 0.7858362197875977 -0.5540850162506104 0.2551347315311432 -0.29074984788894653 -0.922116756439209 0.9168798327445984 0.7807419896125793 1 0.9979347586631775 0 0.0 0 0.0 0 0.0 -0.08664500713348389 0.49995994567871094 -0.15126699209213257 -0.5456098914146423 -0.5877254605293274 0.5973693132400513 0.9379087686538696 0.07691145688295364 1 0.9311727285385132 0 0.04860582575201988 0 0.0 0 0.0 -0.04406014084815979 0.47633934020996094 -0.1643797755241394 -0.4945219159126282 -0.7363200783729553 0.4617755711078644 0.9167872667312622 0.06153831630945206 1 0.8977535963058472 0 0.07620814442634583 0 0.0 0 0.0 -0.04406014084815979 0.5062999725341797 -0.1307528018951416 -0.6033509373664856 -0.4283883273601532 0.6725974082946777 0.9375776648521423 0.05149134621024132 1 0.9309578537940979 0 0.0509604811668396 0 0.0 0 0.0 -0.18975555896759033 0.5741572380065918 -0.27861666679382324 -0.9336222410202026 -0.14868617057800293 0.3259071707725525 0.9549236297607422 0.14849883317947388 1 0.9830207824707031 0 0.0 0 0.0 0 0.0 -0.1636601686477661 0.5023448467254639 -0.3202894926071167 -0.8532670140266418 -0.49674978852272034 0.158513143658638 0.9101097583770752 0.15139897167682648 1 0.9755609631538391 0 0.0 0 0.0 0 0.0 -0.17542767524719238 0.5399246215820312 -0.2481163740158081 -0.886593222618103 -0.28980377316474915 0.36039307713508606 0.9461795687675476 0.1376567780971527 1 0.9722244739532471 0 0.0 0 0.0 0 0.0 -0.04406014084815979 0.5062999725341797 -0.1307528018951416 -0.6033509373664856 -0.4283883273601532 0.6725974082946777 0.9375776648521423 0.05149134621024132 1 0.9309578537940979 0 0.0509604811668396 0 0.0 0 0.0 -0.03183332085609436 0.4725472927093506 -0.1536623239517212 -0.4668111205101013 -0.7400128245353699 0.4841761589050293 0.9156655073165894 0.053619880229234695 1 0.8963284492492676 0 0.07777944952249527 0 0.0 0 0.0 -0.02722427248954773 0.4976499080657959 -0.1062207818031311 -0.5827203989028931 -0.48753318190574646 0.6501358151435852 0.9371650218963623 0.03867452219128609 1 0.927412748336792 0 0.05390864610671997 0 0.0 0 0.0 -0.1937013864517212 0.7858362197875977 -0.5540850162506104 0.2551347315311432 -0.29074984788894653 -0.922116756439209 0.9168798327445984 0.7807419896125793 1 0.9979347586631775 0 0.0 0 0.0 0 0.0 -0.20446312427520752 0.9136180877685547 -0.5932917594909668 0.4698324501514435 0.8652912974357605 -0.1745048314332962 0.9505891799926758 0.7223089933395386 1 0.9978581666946411 0 0.0 0 0.0 0 0.0 -0.12602776288986206 0.8367936611175537 -0.5169486999511719 0.5360575914382935 0.844019889831543 0.014984588138759136 0.9544497728347778 0.7932650446891785 1 0.9980955123901367 0 0.0 0 0.0 0 0.0 -0.07492586970329285 0.7546496391296387 -0.43943047523498535 0.1832026094198227 0.964598536491394 -0.1896420121192932 0.9763534069061279 0.9473682045936584 1 0.9989303350448608 0 0.0 0 0.0 0 0.0 0.0 0.717432975769043 -0.496915340423584 0.0 0.5661183595657349 -0.8242744207382202 0.9412925839424133 0.9857740998268127 1 0.9996612071990967 0 0.0 0 0.0 0 0.0 -0.08317875862121582 0.7046983242034912 -0.4855692386627197 0.20276497304439545 0.3567918837070465 -0.9118930697441101 0.9413006901741028 0.9422845840454102 1 0.9991375803947449 0 0.0 0 0.0 0 0.0 -0.17542767524719238 0.5399246215820312 -0.2481163740158081 -0.886593222618103 -0.28980377316474915 0.36039307713508606 0.9461795687675476 0.1376567780971527 1 0.9722244739532471 0 0.0 0 0.0 0 0.0 -0.1420363187789917 0.49902892112731934 -0.265682578086853 -0.7232886552810669 -0.6007568836212158 0.3404339849948883 0.9186869263648987 0.12909665703773499 1 0.9553471803665161 0 0.009066302329301834 0 0.0 0 0.0 -0.15695953369140625 0.5213019847869873 -0.23152399063110352 -0.7372050881385803 -0.5348063707351685 0.41285440325737 0.9393715262413025 0.12667523324489594 1 0.9635127186775208 0 0.0 0 0.0 0 0.0 -0.20446312427520752 0.9136180877685547 -0.5932917594909668 0.4698324501514435 0.8652912974357605 -0.1745048314332962 0.9505891799926758 0.7223089933395386 1 0.9978581666946411 0 0.0 0 0.0 0 0.0 -0.25437653064727783 0.8707180023193359 -0.6044466495513916 -0.1664784699678421 -0.32941678166389465 -0.9293801784515381 0.9264681935310364 0.7198551297187805 1 0.9978139400482178 0 0.0 0 0.0 0 0.0 -0.2638838291168213 0.9322519302368164 -0.609893798828125 -0.14166691899299622 0.9372844696044922 -0.3183690905570984 0.946968138217926 0.6946501135826111 1 0.9978176355361938 0 0.0 0 0.0 0 0.0 -0.2143995761871338 0.6344926357269287 -0.3323737382888794 -0.8702353239059448 -0.09164708107709885 0.4839930534362793 0.9702180027961731 0.1673179417848587 1 0.9925930500030518 0 0.0 0 0.0 0 0.0 -0.18907427787780762 0.5321424007415771 -0.3633767366409302 -0.8845484852790833 -0.4600665271282196 0.07654042541980743 0.9159454703330994 0.17071913182735443 1 0.9870247840881348 0 0.0 0 0.0 0 0.0 -0.18975555896759033 0.5741572380065918 -0.27861666679382324 -0.9336222410202026 -0.14868617057800293 0.3259071707725525 0.9549236297607422 0.14849883317947388 1 0.9830207824707031 0 0.0 0 0.0 0 0.0 -0.2714434862136841 0.6815202236175537 -0.37427401542663574 -0.8992888927459717 0.2068544626235962 0.38532671332359314 0.12856031954288483 0.23758146166801453 1 0.9954916834831238 0 0.0 0 0.0 0 0.0 -0.215201735496521 0.579124927520752 -0.41087865829467773 -0.8949857950210571 -0.44148075580596924 -0.0636310949921608 0.175100177526474 0.25710052251815796 1 0.9931784868240356 0 0.0 0 0.0 0 0.0 -0.2143995761871338 0.6344926357269287 -0.3323737382888794 -0.8702353239059448 -0.09164708107709885 0.4839930534362793 0.15881234407424927 0.269660085439682 1 0.9925930500030518 0 0.0 0 0.0 0 0.0 -0.2638838291168213 0.9322519302368164 -0.609893798828125 -0.14166691899299622 0.9372844696044922 -0.3183690905570984 0.11900205165147781 0.05518902838230133 1 0.9978176355361938 0 0.0 0 0.0 0 0.0 -0.25437653064727783 0.8707180023193359 -0.6044466495513916 -0.1664784699678421 -0.32941678166389465 -0.9293801784515381 0.1323527842760086 0.07852371037006378 1 0.9978139400482178 0 0.0 0 0.0 0 0.0 -0.2947826385498047 0.9091815948486328 -0.5893387794494629 -0.82534259557724 0.5525681376457214 0.11593981832265854 0.1054219976067543 0.07213792949914932 1 0.9977961778640747 0 0.0 0 0.0 0 0.0 -0.3023422956466675 0.7849597930908203 -0.4707658290863037 -0.809015154838562 0.40089112520217896 0.4297921657562256 0.10812272131443024 0.16332419216632843 1 0.9974499344825745 0 0.0 0 0.0 0 0.0 -0.2332911491394043 0.6557881832122803 -0.45631957054138184 -0.826288640499115 -0.40223395824432373 -0.39423811435699463 0.15952694416046143 0.21251626312732697 1 0.9963852763175964 0 0.0 0 0.0 0 0.0 -0.2714434862136841 0.6815202236175537 -0.37427401542663574 -0.8992888927459717 0.2068544626235962 0.38532671332359314 0.12856031954288483 0.23758146166801453 1 0.9954916834831238 0 0.0 0 0.0 0 0.0 -0.25437653064727783 0.8707180023193359 -0.6044466495513916 -0.1664784699678421 -0.32941678166389465 -0.9293801784515381 0.1323527842760086 0.07852371037006378 1 0.9978139400482178 0 0.0 0 0.0 0 0.0 -0.29834794998168945 0.8586046695709229 -0.544276237487793 -0.7876216769218445 0.5459151268005371 0.2855921983718872 0.10662513971328735 0.10797388106584549 1 0.997727632522583 0 0.0 0 0.0 0 0.0 -0.2947826385498047 0.9091815948486328 -0.5893387794494629 -0.82534259557724 0.5525681376457214 0.11593981832265854 0.1054219976067543 0.07213792949914932 1 0.9977961778640747 0 0.0 0 0.0 0 0.0 -0.15695953369140625 0.5213019847869873 -0.23152399063110352 -0.7372050881385803 -0.5348063707351685 0.41285440325737 0.9393715262413025 0.12667523324489594 1 0.9635127186775208 0 0.0 0 0.0 0 0.0 -0.07519534230232239 0.4880945682525635 -0.17792588472366333 -0.4931180775165558 -0.8037965297698975 0.3327127993106842 0.9240359663963318 0.07843738049268723 1 0.9169134497642517 0 0.05876200273633003 0 0.0 0 0.0 -0.08664500713348389 0.49995994567871094 -0.15126699209213257 -0.5456098914146423 -0.5877254605293274 0.5973693132400513 0.9379087686538696 0.07691145688295364 1 0.9311727285385132 0 0.04860582575201988 0 0.0 0 0.0 -0.2595592737197876 0.8025784492492676 -0.5593953132629395 -0.48774680495262146 -0.4980620741844177 -0.7169408202171326 0.13544107973575592 0.12047519534826279 1 0.9977763891220093 0 0.0 0 0.0 0 0.0 -0.3023422956466675 0.7849597930908203 -0.4707658290863037 -0.809015154838562 0.40089112520217896 0.4297921657562256 0.10812272131443024 0.16332419216632843 1 0.9974499344825745 0 0.0 0 0.0 0 0.0 -0.29834794998168945 0.8586046695709229 -0.544276237487793 -0.7876216769218445 0.5459151268005371 0.2855921983718872 0.10662513971328735 0.10797388106584549 1 0.997727632522583 0 0.0 0 0.0 0 0.0 -0.08317875862121582 0.7046983242034912 -0.4855692386627197 0.20276497304439545 0.3567918837070465 -0.9118930697441101 0.9413006901741028 0.9422845840454102 1 0.9991375803947449 0 0.0 0 0.0 0 0.0 0.0 0.6219885349273682 -0.5401461124420166 0.0 0.21689504384994507 -0.9761650562286377 0.8908731341362 0.9758754968643188 1 0.9991644024848938 0 0.0 0 0.0 0 0.0 -0.08317875862121582 0.5977051258087158 -0.5351896286010742 -0.13367107510566711 0.040162358433008194 -0.9902035593986511 0.8843513131141663 0.9313850402832031 1 0.9983810782432556 0 0.0 0 0.0 0 0.0 -0.08317875862121582 0.5977051258087158 -0.5351896286010742 -0.13367107510566711 0.040162358433008194 -0.9902035593986511 0.24910669028759003 0.1976434588432312 1 0.9983810782432556 0 0.0 0 0.0 0 0.0 0.0 0.4954061508178711 -0.5303821563720703 0.0 -0.39960935711860657 -0.9166539311408997 0.30426859855651855 0.2333311140537262 1 0.9962685704231262 0 0.0 0 0.0 0 0.0 -0.07982555031776428 0.4681966304779053 -0.49700307846069336 -0.32801294326782227 -0.6124454736709595 -0.7191991806030273 0.26634955406188965 0.25791066884994507 1 0.993816077709198 0 0.0 0 0.0 0 0.0 -0.07982555031776428 0.4681966304779053 -0.49700307846069336 -0.32801294326782227 -0.6124454736709595 -0.7191991806030273 0.26634955406188965 0.25791066884994507 1 0.993816077709198 0 0.0 0 0.0 0 0.0 0.0 0.39038944244384766 -0.43143999576568604 0.0 -0.7942442297935486 -0.6075929999351501 0.30977341532707214 0.30976250767707825 1 0.9789760708808899 0 0.0 0 0.0 0 0.0 -0.07171991467475891 0.41830766201019287 -0.40954136848449707 -0.5254982113838196 -0.7786187529563904 -0.3428449332714081 0.2686126232147217 0.31042376160621643 1 0.9810560345649719 0 0.0 0 0.0 0 0.0 -0.02722427248954773 0.4976499080657959 -0.1062207818031311 -0.5827203989028931 -0.48753318190574646 0.6501358151435852 0.9371650218963623 0.03867452219128609 1 0.927412748336792 0 0.05390864610671997 0 0.0 0 0.0 0.0 0.46508145332336426 -0.15146160125732422 0.0 -0.8492690920829773 0.5279091596603394 0.9070941805839539 0.03858356922864914 1 0.8848198652267456 0 0.08769097924232483 0 0.0 0 0.0 0.0 0.4937889575958252 -0.09715571999549866 0.0 -0.6279793977737427 0.7781914472579956 0.9327072501182556 0.023990735411643982 1 0.9297935366630554 0 0.05221788212656975 0 0.0 0 0.0 -0.07171991467475891 0.41830766201019287 -0.40954136848449707 -0.5254982113838196 -0.7786187529563904 -0.3428449332714081 0.2686126232147217 0.31042376160621643 1 0.9810560345649719 0 0.0 0 0.0 0 0.0 0.0 0.33551084995269775 -0.3629721403121948 0.0 -0.7144383192062378 -0.6996673345565796 0.31088313460350037 0.35648632049560547 1 0.9168000221252441 0 0.07637535780668259 0 0.0 0 0.0 -0.07230684161186218 0.39586949348449707 -0.33485913276672363 -0.6780602335929871 -0.6097903251647949 -0.41029083728790283 0.26386216282844543 0.34843114018440247 1 0.9468030333518982 0 0.039024900645017624 0 0.0 0 0.0 -0.1937013864517212 0.7858362197875977 -0.5540850162506104 0.2551347315311432 -0.29074984788894653 -0.922116756439209 0.16920901834964752 0.12707068026065826 1 0.9979347586631775 0 0.0 0 0.0 0 0.0 -0.2595592737197876 0.8025784492492676 -0.5593953132629395 -0.48774680495262146 -0.4980620741844177 -0.7169408202171326 0.13544107973575592 0.12047519534826279 1 0.9977763891220093 0 0.0 0 0.0 0 0.0 -0.25437653064727783 0.8707180023193359 -0.6044466495513916 -0.1664784699678421 -0.32941678166389465 -0.9293801784515381 0.1323527842760086 0.07852371037006378 1 0.9978139400482178 0 0.0 0 0.0 0 0.0 -0.1876540184020996 0.6596939563751221 -0.5185306072235107 -0.33820611238479614 -0.1976683884859085 -0.9200415015220642 0.18751898407936096 0.18505068123340607 1 0.9977445602416992 0 0.0 0 0.0 0 0.0 -0.23466861248016357 0.7335350513458252 -0.5268294811248779 -0.5275429487228394 -0.4376964569091797 -0.7280495762825012 0.15449798107147217 0.1570688784122467 1 0.9977140426635742 0 0.0 0 0.0 0 0.0 -0.1937013864517212 0.7858362197875977 -0.5540850162506104 0.2551347315311432 -0.29074984788894653 -0.922116756439209 0.16920901834964752 0.12707068026065826 1 0.9979347586631775 0 0.0 0 0.0 0 0.0 -0.1937013864517212 0.7858362197875977 -0.5540850162506104 0.2551347315311432 -0.29074984788894653 -0.922116756439209 0.9168798327445984 0.7807419896125793 1 0.9979347586631775 0 0.0 0 0.0 0 0.0 -0.08317875862121582 0.7046983242034912 -0.4855692386627197 0.20276497304439545 0.3567918837070465 -0.9118930697441101 0.9190778136253357 0.8595334887504578 1 0.9991375803947449 0 0.0 0 0.0 0 0.0 -0.1876540184020996 0.6596939563751221 -0.5185306072235107 -0.33820611238479614 -0.1976683884859085 -0.9200415015220642 0.8821396827697754 0.8362104296684265 1 0.9977445602416992 0 0.0 0 0.0 0 0.0 -0.1876540184020996 0.6596939563751221 -0.5185306072235107 -0.33820611238479614 -0.1976683884859085 -0.9200415015220642 0.9133719205856323 0.8904370665550232 1 0.9977445602416992 0 0.0 0 0.0 0 0.0 -0.08317875862121582 0.5977051258087158 -0.5351896286010742 -0.13367107510566711 0.040162358433008194 -0.9902035593986511 0.8843513131141663 0.9313850402832031 1 0.9983810782432556 0 0.0 0 0.0 0 0.0 -0.17545980215072632 0.5656907558441162 -0.5075685977935791 -0.6020996570587158 -0.3631092309951782 -0.7110202312469482 0.8834765553474426 0.8773533701896667 1 0.9963235855102539 0 0.0 0 0.0 0 0.0 -0.2332911491394043 0.6557881832122803 -0.45631957054138184 -0.826288640499115 -0.40223395824432373 -0.39423811435699463 0.15952694416046143 0.21251626312732697 1 0.9963852763175964 0 0.0 0 0.0 0 0.0 -0.17545980215072632 0.5656907558441162 -0.5075685977935791 -0.6020996570587158 -0.3631092309951782 -0.7110202312469482 0.20651164650917053 0.22181473672389984 1 0.9963235855102539 0 0.0 0 0.0 0 0.0 -0.215201735496521 0.579124927520752 -0.41087865829467773 -0.8949857950210571 -0.44148075580596924 -0.0636310949921608 0.175100177526474 0.25710052251815796 1 0.9931784868240356 0 0.0 0 0.0 0 0.0 -0.17545980215072632 0.5656907558441162 -0.5075685977935791 -0.6020996570587158 -0.3631092309951782 -0.7110202312469482 0.20651164650917053 0.22181473672389984 1 0.9963235855102539 0 0.0 0 0.0 0 0.0 -0.07982555031776428 0.4681966304779053 -0.49700307846069336 -0.32801294326782227 -0.6124454736709595 -0.7191991806030273 0.26634955406188965 0.25791066884994507 1 0.993816077709198 0 0.0 0 0.0 0 0.0 -0.14730453491210938 0.4809708595275879 -0.4494520425796509 -0.6751915216445923 -0.6570024490356445 -0.335245817899704 0.2268296331167221 0.27411285042762756 1 0.9907407164573669 0 0.0 0 0.0 0 0.0 -0.215201735496521 0.579124927520752 -0.41087865829467773 -0.8949857950210571 -0.44148075580596924 -0.0636310949921608 0.175100177526474 0.25710052251815796 1 0.9931784868240356 0 0.0 0 0.0 0 0.0 -0.14730453491210938 0.4809708595275879 -0.4494520425796509 -0.6751915216445923 -0.6570024490356445 -0.335245817899704 0.2268296331167221 0.27411285042762756 1 0.9907407164573669 0 0.0 0 0.0 0 0.0 -0.18907427787780762 0.5321424007415771 -0.3633767366409302 -0.8845484852790833 -0.4600665271282196 0.07654042541980743 0.18983252346515656 0.29206639528274536 1 0.9870247840881348 0 0.0 0 0.0 0 0.0 -0.14730453491210938 0.4809708595275879 -0.4494520425796509 -0.6751915216445923 -0.6570024490356445 -0.335245817899704 0.2268296331167221 0.27411285042762756 1 0.9907407164573669 0 0.0 0 0.0 0 0.0 -0.07171991467475891 0.41830766201019287 -0.40954136848449707 -0.5254982113838196 -0.7786187529563904 -0.3428449332714081 0.2686126232147217 0.31042376160621643 1 0.9810560345649719 0 0.0 0 0.0 0 0.0 -0.13163155317306519 0.4475557804107666 -0.36023998260498047 -0.730246901512146 -0.6739402413368225 -0.11188085377216339 0.23006127774715424 0.3214690387248993 1 0.9729493260383606 0 0.0 0 0.0 0 0.0 -0.18907427787780762 0.5321424007415771 -0.3633767366409302 -0.8845484852790833 -0.4600665271282196 0.07654042541980743 0.18983252346515656 0.29206639528274536 1 0.9870247840881348 0 0.0 0 0.0 0 0.0 -0.13163155317306519 0.4475557804107666 -0.36023998260498047 -0.730246901512146 -0.6739402413368225 -0.11188085377216339 0.23006127774715424 0.3214690387248993 1 0.9729493260383606 0 0.0 0 0.0 0 0.0 -0.1636601686477661 0.5023448467254639 -0.3202894926071167 -0.8532670140266418 -0.49674978852272034 0.158513143658638 0.20207861065864563 0.31930482387542725 1 0.9755609631538391 0 0.0 0 0.0 0 0.0 -0.11474817991256714 0.41678154468536377 -0.2910900115966797 -0.9263588190078735 -0.37650686502456665 0.005249183624982834 0.8736137747764587 0.12863701581954956 1 0.91008460521698 0 0.05703506991267204 5 0.012244939804077148 0 0.0 -0.1636601686477661 0.5023448467254639 -0.3202894926071167 -0.8532670140266418 -0.49674978852272034 0.158513143658638 0.9101097583770752 0.15139897167682648 1 0.9755609631538391 0 0.0 0 0.0 0 0.0 -0.13163155317306519 0.4475557804107666 -0.36023998260498047 -0.730246901512146 -0.6739402413368225 -0.11188085377216339 0.8714877963066101 0.14967380464076996 1 0.9729493260383606 0 0.0 0 0.0 0 0.0 -0.07230684161186218 0.39586949348449707 -0.33485913276672363 -0.6780602335929871 -0.6097903251647949 -0.41029083728790283 0.26386216282844543 0.34843114018440247 1 0.9468030333518982 0 0.039024900645017624 0 0.0 0 0.0 -0.13163155317306519 0.4475557804107666 -0.36023998260498047 -0.730246901512146 -0.6739402413368225 -0.11188085377216339 0.23006127774715424 0.3214690387248993 1 0.9729493260383606 0 0.0 0 0.0 0 0.0 -0.07171991467475891 0.41830766201019287 -0.40954136848449707 -0.5254982113838196 -0.7786187529563904 -0.3428449332714081 0.2686126232147217 0.31042376160621643 1 0.9810560345649719 0 0.0 0 0.0 0 0.0 -0.07328110933303833 0.4430720806121826 -0.23094940185546875 -0.8349864482879639 0.062196724116802216 0.5467085838317871 0.8917837738990784 0.0931837260723114 1 0.8747076988220215 0 0.0811844989657402 5 0.027842912822961807 0 0.0 -0.1420363187789917 0.49902892112731934 -0.265682578086853 -0.7232886552810669 -0.6007568836212158 0.3404339849948883 0.9186869263648987 0.12909665703773499 1 0.9553471803665161 0 0.009066302329301834 0 0.0 0 0.0 -0.11474817991256714 0.41678154468536377 -0.2910900115966797 -0.9263588190078735 -0.37650686502456665 0.005249183624982834 0.8736137747764587 0.12863701581954956 1 0.91008460521698 0 0.05703506991267204 5 0.012244939804077148 0 0.0 0.0 0.46508145332336426 -0.15146160125732422 0.0 -0.8492690920829773 0.5279091596603394 0.9070941805839539 0.03858356922864914 1 0.8848198652267456 0 0.08769097924232483 0 0.0 0 0.0 -0.024349510669708252 0.44997596740722656 -0.18417012691497803 -0.5105136036872864 -0.6040223240852356 0.6119571328163147 0.897230863571167 0.05878820642828941 1 0.8513779044151306 0 0.11267079412937164 0 0.0 0 0.0 0.0 0.4452739953994751 -0.17835205793380737 0.0 -0.49507126212120056 0.86883145570755 0.8921484351158142 0.046273425221443176 1 0.827133059501648 0 0.13505855202674866 0 0.0 0 0.0 -0.024349510669708252 0.44997596740722656 -0.18417012691497803 -0.5105136036872864 -0.6040223240852356 0.6119571328163147 0.897230863571167 0.05878820642828941 1 0.8513779044151306 0 0.11267079412937164 0 0.0 0 0.0 -0.04406014084815979 0.47633934020996094 -0.1643797755241394 -0.4945219159126282 -0.7363200783729553 0.4617755711078644 0.9167872667312622 0.06153831630945206 1 0.8977535963058472 0 0.07620814442634583 0 0.0 0 0.0 -0.04134397208690643 0.4539233446121216 -0.2002546787261963 -0.5264137983322144 -0.3241981267929077 0.7859736680984497 0.8979483842849731 0.07017120718955994 1 0.8606652617454529 0 0.10205099731683731 5 0.0029370635747909546 0 0.0 -0.07519534230232239 0.4880945682525635 -0.17792588472366333 -0.4931180775165558 -0.8037965297698975 0.3327127993106842 0.9240359663963318 0.07843738049268723 1 0.9169134497642517 0 0.05876200273633003 0 0.0 0 0.0 -0.04134397208690643 0.4539233446121216 -0.2002546787261963 -0.5264137983322144 -0.3241981267929077 0.7859736680984497 0.8979483842849731 0.07017120718955994 1 0.8606652617454529 0 0.10205099731683731 5 0.0029370635747909546 0 0.0 -0.04406014084815979 0.47633934020996094 -0.1643797755241394 -0.4945219159126282 -0.7363200783729553 0.4617755711078644 0.9167872667312622 0.06153831630945206 1 0.8977535963058472 0 0.07620814442634583 0 0.0 0 0.0 -0.024349510669708252 0.44997596740722656 -0.18417012691497803 -0.5105136036872864 -0.6040223240852356 0.6119571328163147 0.897230863571167 0.05878820642828941 1 0.8513779044151306 0 0.11267079412937164 0 0.0 0 0.0 0.0 0.41489994525909424 -0.18215465545654297 0.0 0.5597094893455505 0.8286690711975098 0.8788778185844421 0.04964836686849594 1 0.730757474899292 0 0.21810069680213928 5 0.0014950893819332123 3 0.00030696019530296326 0.0 0.4452739953994751 -0.17835205793380737 0.0 -0.49507126212120056 0.86883145570755 0.8921484351158142 0.046273425221443176 1 0.827133059501648 0 0.13505855202674866 0 0.0 0 0.0 -0.04134397208690643 0.4539233446121216 -0.2002546787261963 -0.5264137983322144 -0.3241981267929077 0.7859736680984497 0.6188840866088867 0.5845966339111328 1 0.8606652617454529 0 0.10205099731683731 5 0.0029370635747909546 0 0.0 -0.09905996918678284 0.40596628189086914 -0.19437533617019653 -0.5630664825439453 0.7503280639648438 0.34626302123069763 0.5929415822029114 0.566311240196228 1 0.6564067006111145 0 0.20795942842960358 5 0.12716107070446014 0 0.0 0.0 0.41489994525909424 -0.18215465545654297 0.0 0.5597094893455505 0.8286690711975098 0.642014741897583 0.5646453499794006 1 0.730757474899292 0 0.21810069680213928 5 0.0014950893819332123 3 0.00030696019530296326 -0.07328110933303833 0.4430720806121826 -0.23094940185546875 -0.8349864482879639 0.062196724116802216 0.5467085838317871 0.6518501043319702 0.9787291884422302 1 0.8747076988220215 0 0.0811844989657402 5 0.027842912822961807 0 0.0 -0.12179547548294067 0.3854290246963501 -0.23301446437835693 -0.8996246457099915 0.39896848797798157 -0.17743460834026337 0.6237066984176636 0.9517653584480286 1 0.7106906175613403 0 0.1698828488588333 5 0.11525022983551025 0 0.0 -0.09905996918678284 0.40596628189086914 -0.19437533617019653 -0.5630664825439453 0.7503280639648438 0.34626302123069763 0.6464900374412537 0.9542642831802368 1 0.6564067006111145 0 0.20795942842960358 5 0.12716107070446014 0 0.0 -0.11474817991256714 0.41678154468536377 -0.2910900115966797 -0.9263588190078735 -0.37650686502456665 0.005249183624982834 0.23559102416038513 0.359767347574234 1 0.91008460521698 0 0.05703506991267204 5 0.012244939804077148 0 0.0 -0.07341891527175903 0.3139185905456543 -0.28698432445526123 -0.6358226537704468 -0.38373973965644836 -0.669667661190033 0.27071312069892883 0.3962279260158539 1 0.6878011226654053 0 0.2799515724182129 5 0.008950736373662949 0 0.0 -0.12179547548294067 0.3854290246963501 -0.23301446437835693 -0.8996246457099915 0.39896848797798157 -0.17743460834026337 0.23082518577575684 0.39427757263183594 1 0.7106906175613403 0 0.1698828488588333 5 0.11525022983551025 0 0.0 -0.07341891527175903 0.3139185905456543 -0.28698432445526123 -0.6358226537704468 -0.38373973965644836 -0.669667661190033 0.27071312069892883 0.3962279260158539 1 0.6878011226654053 0 0.2799515724182129 5 0.008950736373662949 0 0.0 0.0 0.33551084995269775 -0.3629721403121948 0.0 -0.7144383192062378 -0.6996673345565796 0.31088313460350037 0.35648632049560547 1 0.9168000221252441 0 0.07637535780668259 0 0.0 0 0.0 0.0 0.29299962520599365 -0.3292173147201538 0.0 -0.5545213222503662 -0.8321481943130493 0.3137752413749695 0.3848779797554016 1 0.7812550663948059 0 0.20431587100028992 0 0.0 0 0.0 -0.43023955821990967 0.157029926776886 0.06563612818717957 0.4426404535770416 -0.8844264149665833 0.14767906069755554 0.08512462675571442 0.6006276607513428 5 0.9999759197235107 0 0.0 0 0.0 0 0.0 -0.5589442253112793 0.16177308559417725 0.07854250073432922 -0.9342325925827026 -0.35114598274230957 -0.06216620281338692 0.02092316746711731 0.6068553328514099 5 1.000016450881958 0 0.0 0 0.0 0 0.0 -0.5047986507415771 0.20594364404678345 -0.004644919186830521 -0.6930753588676453 -0.20831935107707977 -0.6900539994239807 0.049123793840408325 0.5567721724510193 5 0.9997888803482056 0 0.0 0 0.0 0 0.0 -0.3984619379043579 0.26093626022338867 0.08564722537994385 0.4599139392375946 0.35129857063293457 0.8154851198196411 0.43783387541770935 0.39854317903518677 5 0.9975098967552185 0 0.0 0 0.0 0 0.0 -0.5096194744110107 0.2505838871002197 0.11315262317657471 -0.5906857252120972 0.6383556723594666 0.4935148060321808 0.38072505593299866 0.38276207447052 5 0.9994231462478638 0 0.0 0 0.0 0 0.0 -0.47704315185546875 0.22420382499694824 0.13703078031539917 0.09256263822317123 0.13635669648647308 0.9862971901893616 0.39813071489334106 0.3643503189086914 5 0.9994118809700012 0 0.0 0 0.0 0 0.0 -0.5047986507415771 0.20594364404678345 -0.004644919186830521 -0.6930753588676453 -0.20831935107707977 -0.6900539994239807 0.5881485939025879 0.7014670968055725 5 0.9997888803482056 0 0.0 0 0.0 0 0.0 -0.5096194744110107 0.2505838871002197 0.11315262317657471 -0.5906857252120972 0.6383556723594666 0.4935148060321808 0.6430558562278748 0.6733530759811401 5 0.9994231462478638 0 0.0 0 0.0 0 0.0 -0.4554738998413086 0.2947545051574707 0.029965192079544067 -0.4450819492340088 0.8953825235366821 0.013611255213618279 0.6390498280525208 0.7233343124389648 5 0.9976549744606018 0 0.0 0 0.0 0 0.0 -0.47704315185546875 0.22420382499694824 0.13703078031539917 0.09256263822317123 0.13635669648647308 0.9862971901893616 0.9100112915039062 0.5470339059829712 5 0.9994118809700012 0 0.0 0 0.0 0 0.0 -0.43023955821990967 0.157029926776886 0.06563612818717957 0.4426404535770416 -0.8844264149665833 0.14767906069755554 0.9498034119606018 0.5855746865272522 5 0.9999759197235107 0 0.0 0 0.0 0 0.0 -0.3984619379043579 0.26093626022338867 0.08564722537994385 0.4599139392375946 0.35129857063293457 0.8154851198196411 0.9010043740272522 0.57774817943573 5 0.9975098967552185 0 0.0 0 0.0 0 0.0 -0.47704315185546875 0.22420382499694824 0.13703078031539917 0.09256263822317123 0.13635669648647308 0.9862971901893616 0.9100112915039062 0.5470339059829712 5 0.9994118809700012 0 0.0 0 0.0 0 0.0 -0.5589442253112793 0.16177308559417725 0.07854250073432922 -0.9342325925827026 -0.35114598274230957 -0.06216620281338692 0.9657022356987 0.5219221115112305 5 1.000016450881958 0 0.0 0 0.0 0 0.0 -0.5088207721710205 0.12029749155044556 0.1170196533203125 -0.16394543647766113 -0.8839991688728333 0.4377574920654297 0.9588103890419006 0.5548603534698486 5 1.0001115798950195 0 0.0 0 0.0 0 0.0 -0.16969645023345947 0.6551282405853271 -0.246321439743042 -0.6105228066444397 0.38544878363609314 0.6918545961380005 0.4616085886955261 0.8940138816833496 1 0.9888336658477783 0 0.0 0 0.0 0 0.0 -0.12389302253723145 0.6452987194061279 -0.2239953875541687 -0.3717764914035797 0.6311227679252625 0.6807458996772766 0.4386693835258484 0.9063490033149719 1 0.9863486289978027 0 0.0 0 0.0 0 0.0 -0.11437469720840454 0.7034616470336914 -0.2846221923828125 -0.12384410947561264 0.6982024312019348 0.7050996422767639 0.4353049099445343 0.8618066906929016 1 0.9938564300537109 0 0.0 0 0.0 0 0.0 0.0 0.17887204885482788 0.20615297555923462 0.0 0.9208654761314392 0.3898434340953827 0.6407602429389954 0.32359591126441956 0 0.9011874198913574 4 0.008605018258094788 2 0.007983766496181488 0 0.0 0.20940327644348145 0.18806850910186768 0.10748907923698425 0.6282540559768677 0.6898098587989807 0.35978269577026367 0.5385096073150635 0.3671324849128723 0 0.6962488293647766 3 0.23988555371761322 2 0.04625933989882469 0 0.0 0.0 0.219041109085083 0.11931818723678589 0.0 0.8301644921302795 0.557481586933136 0.642014741897583 0.37345194816589355 0 0.8959391713142395 5 0.029438931494951248 3 0.028147835284471512 0 0.0 0.2218678593635559 -0.11717742681503296 0.0475330650806427 0.5801263451576233 -0.6734519600868225 -0.45811334252357483 0.22921013832092285 0.6840476989746094 0 0.8946786522865295 2 0.05245160311460495 3 0.03519182279706001 0 0.0 0.27896857261657715 0.07729777693748474 0.03905799984931946 0.9912412166595459 0.0948820486664772 -0.09158604592084885 0.17303664982318878 0.6143929958343506 0 0.7136451601982117 3 0.23007641732692719 2 0.047092560678720474 0 0.0 0.29087793827056885 0.005670234560966492 0.15487772226333618 0.9979857802391052 0.062990203499794 -0.003906369209289551 0.16594837605953217 0.6863267421722412 0 0.7717193365097046 2 0.13732953369617462 3 0.08217988163232803 0 0.0 0.20955008268356323 0.1521109938621521 0.19754719734191895 0.5760979056358337 0.7668691277503967 0.28281503915786743 0.8016543388366699 0.36130064725875854 0 0.7611507177352905 2 0.11970722675323486 3 0.10152817517518997 0 0.0 0.27896857261657715 0.07729777693748474 0.03905799984931946 0.9912412166595459 0.0948820486664772 -0.09158604592084885 0.7514224052429199 0.4350348114967346 0 0.7136451601982117 3 0.23007641732692719 2 0.047092560678720474 0 0.0 0.20940327644348145 0.18806850910186768 0.10748907923698425 0.6282540559768677 0.6898098587989807 0.35978269577026367 0.8133400082588196 0.3891247510910034 0 0.6962488293647766 3 0.23988555371761322 2 0.04625933989882469 0 0.0 0.0 -0.1520075798034668 0.035814911127090454 0.0 -0.8850062489509583 -0.46555987000465393 0.342818021774292 0.6868105530738831 0 0.9604138135910034 0 0.0 0 0.0 0 0.0 0.1994549036026001 -0.007807791233062744 -0.07830172777175903 0.5622425079345703 -0.5634021759033203 -0.6053346395492554 0.23669739067554474 0.5947647094726562 0 0.8606905937194824 3 0.10992924124002457 0 0.0 0 0.0 0.2218678593635559 -0.11717742681503296 0.0475330650806427 0.5801263451576233 -0.6734519600868225 -0.45811334252357483 0.22921013832092285 0.6840476989746094 0 0.8946786522865295 2 0.05245160311460495 3 0.03519182279706001 0 0.0 0.2218678593635559 -0.11717742681503296 0.0475330650806427 0.5801263451576233 -0.6734519600868225 -0.45811334252357483 0.22921013832092285 0.6840476989746094 0 0.8946786522865295 2 0.05245160311460495 3 0.03519182279706001 0 0.0 0.0 -0.17877912521362305 0.11906552314758301 0.0 -0.9352397322654724 -0.35392314195632935 0.3381052017211914 0.7297746539115906 0 0.9514539241790771 0 0.0 0 0.0 0 0.0 0.0 -0.1520075798034668 0.035814911127090454 0.0 -0.8850062489509583 -0.46555987000465393 0.342818021774292 0.6868105530738831 0 0.9604138135910034 0 0.0 0 0.0 0 0.0 0.29087793827056885 0.005670234560966492 0.15487772226333618 0.9979857802391052 0.062990203499794 -0.003906369209289551 0.16594837605953217 0.6863267421722412 0 0.7717193365097046 2 0.13732953369617462 3 0.08217988163232803 0 0.0 0.2333071231842041 -0.14518868923187256 0.12986749410629272 0.6191290020942688 -0.7353739738464355 -0.27536851167678833 0.21926060318946838 0.7273061871528625 0 0.8559712767601013 2 0.10463123768568039 3 0.005023133009672165 0 0.0 0.2218678593635559 -0.11717742681503296 0.0475330650806427 0.5801263451576233 -0.6734519600868225 -0.45811334252357483 0.22921013832092285 0.6840476989746094 0 0.8946786522865295 2 0.05245160311460495 3 0.03519182279706001 0 0.0 0.0 0.17887204885482788 0.20615297555923462 0.0 0.9208654761314392 0.3898434340953827 0.6407602429389954 0.32359591126441956 0 0.9011874198913574 4 0.008605018258094788 2 0.007983766496181488 0 0.0 0.20780110359191895 0.12533944845199585 0.2807978391647339 0.5116122961044312 0.844325065612793 0.1590929925441742 0.5354735851287842 0.2732369899749756 0 0.6737872362136841 2 0.25705254077911377 3 0.04048972204327583 0 0.0 0.20955008268356323 0.1521109938621521 0.19754719734191895 0.5760979056358337 0.7668691277503967 0.28281503915786743 0.5366934537887573 0.3172552287578583 0 0.7611507177352905 2 0.11970722675323486 3 0.10152817517518997 0 0.0 0.29087793827056885 0.005670234560966492 0.15487772226333618 0.9979857802391052 0.062990203499794 -0.003906369209289551 0.7238370776176453 0.4040071964263916 0 0.7717193365097046 2 0.13732953369617462 3 0.08217988163232803 0 0.0 0.20780110359191895 0.12533944845199585 0.2807978391647339 0.5116122961044312 0.844325065612793 0.1590929925441742 0.793588399887085 0.3341623842716217 0 0.6737872362136841 2 0.25705254077911377 3 0.04048972204327583 0 0.0 0.2891288995742798 -0.053497374057769775 0.22732973098754883 0.9860530495643616 -0.06204412877559662 -0.15433210134506226 0.7061302661895752 0.3902425765991211 0 0.6714892983436584 2 0.28184226155281067 3 0.023302968591451645 0 0.0 0.0 0.144250750541687 0.286879301071167 0.0 0.9332865476608276 0.35908079147338867 0.6393837928771973 0.278120756149292 0 0.8431402444839478 4 0.0683114305138588 2 0.06750531494617462 0 0.0 0.15183353424072266 0.08250489830970764 0.41399872303009033 -0.14777062833309174 0.9758903980255127 0.16055788099765778 0.5605605840682983 0.20316660404205322 2 0.5625039339065552 0 0.3559562563896179 4 0.0675918385386467 0 0.0 0.20780110359191895 0.12533944845199585 0.2807978391647339 0.5116122961044312 0.844325065612793 0.1590929925441742 0.5354735851287842 0.2732369899749756 0 0.6737872362136841 2 0.25705254077911377 3 0.04048972204327583 0 0.0 0.0 0.06483566761016846 0.4689443111419678 0.0 0.9169896245002747 0.3988158702850342 0.6363822221755981 0.17513136565685272 0 0.534076988697052 4 0.23122085630893707 2 0.22778838872909546 0 0.0 0.15183353424072266 0.08250489830970764 0.41399872303009033 -0.14777062833309174 0.9758903980255127 0.16055788099765778 0.5605605840682983 0.20316660404205322 2 0.5625039339065552 0 0.3559562563896179 4 0.0675918385386467 0 0.0 0.0 0.10837686061859131 0.398435115814209 0.0 0.9131138324737549 0.40763571858406067 0.6365572810173035 0.21912050247192383 0 0.6615631580352783 4 0.16478803753852844 2 0.16256949305534363 0 0.0 0.15183353424072266 0.08250489830970764 0.41399872303009033 -0.14777062833309174 0.9758903980255127 0.16055788099765778 0.5605605840682983 0.20316660404205322 2 0.5625039339065552 0 0.3559562563896179 4 0.0675918385386467 0 0.0 0.25187551975250244 0.12372738122940063 0.40594351291656494 0.32880643010139465 0.9301126003265381 -0.16360972821712494 0.506905734539032 0.21915198862552643 2 0.7046008110046387 0 0.2593858540058136 0 0.0 0 0.0 0.20780110359191895 0.12533944845199585 0.2807978391647339 0.5116122961044312 0.844325065612793 0.1590929925441742 0.5354735851287842 0.2732369899749756 0 0.6737872362136841 2 0.25705254077911377 3 0.04048972204327583 0 0.0 0.25187551975250244 0.12372738122940063 0.40594351291656494 0.32880643010139465 0.9301126003265381 -0.16360972821712494 0.506905734539032 0.21915198862552643 2 0.7046008110046387 0 0.2593858540058136 0 0.0 0 0.0 0.23059618473052979 0.11400431394577026 0.5390143394470215 -0.18820764124393463 0.9757378101348877 -0.1116061881184578 0.5118018388748169 0.1595311015844345 2 0.9343189597129822 0 0.054628096520900726 0 0.0 0 0.0 0.3469996452331543 0.10634586215019226 0.5646698474884033 0.7864314913749695 0.5786614418029785 -0.21585741639137268 0.45191001892089844 0.14536665380001068 2 0.9669324159622192 0 0.008164938539266586 0 0.0 0 0.0 0.16343510150909424 0.09151619672775269 0.6089448928833008 -0.6315500140190125 0.747611939907074 0.2053590565919876 0.5441842675209045 0.12299907207489014 2 0.9313681125640869 0 0.039589401334524155 0 0.0 0 0.0 0.15183353424072266 0.08250489830970764 0.41399872303009033 -0.14777062833309174 0.9758903980255127 0.16055788099765778 0.5605605840682983 0.20316660404205322 2 0.5625039339065552 0 0.3559562563896179 4 0.0675918385386467 0 0.0 0.0 0.06483566761016846 0.4689443111419678 0.0 0.9169896245002747 0.3988158702850342 0.6363822221755981 0.17513136565685272 0 0.534076988697052 4 0.23122085630893707 2 0.22778838872909546 0 0.0 0.30187129974365234 -0.08480963110923767 0.619861364364624 0.5957213044166565 -0.6205328702926636 0.5099032521247864 0.7216191291809082 0.6659771203994751 2 0.9719600081443787 0 0.0 0 0.0 0 0.0 0.19527888298034668 0.014238350093364716 0.7056961059570312 -0.3719595968723297 -0.17993712425231934 0.9106112718582153 0.779891848564148 0.7320565581321716 2 0.9548998475074768 0 0.002611551433801651 0 0.0 0 0.0 0.09442317485809326 -0.08681789040565491 0.6793560981750488 -0.3274635970592499 -0.27362895011901855 0.904354989528656 0.8325487375259399 0.6775317192077637 2 0.8125033378601074 0 0.11024869978427887 4 0.07657250761985779 0 0.0 0.3469996452331543 0.10634586215019226 0.5646698474884033 0.7864314913749695 0.5786614418029785 -0.21585741639137268 0.7268060445785522 0.19475699961185455 2 0.9669324159622192 0 0.008164938539266586 0 0.0 0 0.0 0.23059618473052979 0.1385723352432251 0.6024715900421143 -0.37034210562705994 0.7505111694335938 -0.5472884178161621 0.7850754261016846 0.19187207520008087 2 0.9882969856262207 0 0.0 0 0.0 0 0.0 0.3397330045700073 0.13471728563308716 0.614459753036499 0.7675099968910217 0.5092929005622864 -0.3892636001110077 0.7379385232925415 0.16754750907421112 2 0.9887034893035889 0 0.0 0 0.0 0 0.0 0.3028668165206909 0.03667032718658447 0.7283434867858887 0.4055604636669159 -0.3405865728855133 0.8482314348220825 0.7277485728263855 0.7524433732032776 2 1.0069687366485596 0 0.0 0 0.0 0 0.0 0.34602928161621094 0.1090165376663208 0.6943802833557129 0.9147617816925049 -0.062288276851177216 0.39915159344673157 0.698062002658844 0.7733765840530396 2 0.9974915981292725 0 0.0 0 0.0 0 0.0 0.2691516876220703 0.09592822194099426 0.7350804805755615 0.007080294191837311 -0.13916440308094025 0.9902340769767761 0.7421389222145081 0.7785028219223022 2 0.9978255033493042 0 0.0 0 0.0 0 0.0 0.16343510150909424 0.09151619672775269 0.6089448928833008 -0.6315500140190125 0.747611939907074 0.2053590565919876 0.9195019006729126 0.4097464084625244 2 0.9313681125640869 0 0.039589401334524155 0 0.0 0 0.0 0.23059618473052979 0.1385723352432251 0.6024715900421143 -0.37034210562705994 0.7505111694335938 -0.5472884178161621 0.8876997828483582 0.39105933904647827 2 0.9882969856262207 0 0.0 0 0.0 0 0.0 0.23059618473052979 0.11400431394577026 0.5390143394470215 -0.18820764124393463 0.9757378101348877 -0.1116061881184578 0.869789183139801 0.4195291996002197 2 0.9343189597129822 0 0.054628096520900726 0 0.0 0 0.0 0.3397330045700073 0.13471728563308716 0.614459753036499 0.7675099968910217 0.5092929005622864 -0.3892636001110077 0.7379385232925415 0.16754750907421112 2 0.9887034893035889 0 0.0 0 0.0 0 0.0 0.3468945026397705 0.06105288863182068 0.6569516658782959 0.9636219143867493 -0.16562394797801971 0.20972320437431335 0.7123997807502747 0.16860434412956238 2 0.9881370067596436 0 0.0 0 0.0 0 0.0 0.3469996452331543 0.10634586215019226 0.5646698474884033 0.7864314913749695 0.5786614418029785 -0.21585741639137268 0.7268060445785522 0.19475699961185455 2 0.9669324159622192 0 0.008164938539266586 0 0.0 0 0.0 0.23059618473052979 0.1385723352432251 0.6024715900421143 -0.37034210562705994 0.7505111694335938 -0.5472884178161621 0.8876997828483582 0.39105933904647827 2 0.9882969856262207 0 0.0 0 0.0 0 0.0 0.18260103464126587 0.19482123851776123 0.6990411281585693 -0.9710379242897034 0.20737327635288239 0.1185949295759201 0.9239189028739929 0.33825811743736267 2 0.9983318448066711 0 0.0 0 0.0 0 0.0 0.237876296043396 0.2133294939994812 0.641486644744873 -0.3396099805831909 0.47352519631385803 -0.8126468658447266 0.8830041289329529 0.3463095426559448 2 0.9991787672042847 0 0.0 0 0.0 0 0.0 0.3276984691619873 0.20788490772247314 0.6544501781463623 0.7152317762374878 0.3708914518356323 -0.5923337340354919 0.7646296620368958 0.13306954503059387 2 0.9986105561256409 0 0.0 0 0.0 0 0.0 0.34602928161621094 0.1090165376663208 0.6943802833557129 0.9147617816925049 -0.062288276851177216 0.39915159344673157 0.7268431782722473 0.1400061845779419 2 0.9974915981292725 0 0.0 0 0.0 0 0.0 0.3397330045700073 0.13471728563308716 0.614459753036499 0.7675099968910217 0.5092929005622864 -0.3892636001110077 0.7379385232925415 0.16754750907421112 2 0.9887034893035889 0 0.0 0 0.0 0 0.0 0.1780099868774414 0.10716038942337036 0.7001523971557617 -0.8770104050636292 0.06659138947725296 0.4757835566997528 0.7827162146568298 0.7688784003257751 2 0.9883637428283691 0 0.0 0 0.0 0 0.0 0.26910340785980225 0.17764323949813843 0.7524588108062744 -0.1340678185224533 -0.20361949503421783 0.9698172211647034 0.7397990822792053 0.818606436252594 2 0.9994724988937378 0 0.0 0 0.0 0 0.0 0.18260103464126587 0.19482123851776123 0.6990411281585693 -0.9710379242897034 0.20737327635288239 0.1185949295759201 0.7754655480384827 0.8056461215019226 2 0.9983318448066711 0 0.0 0 0.0 0 0.0 0.23059618473052979 0.1385723352432251 0.6024715900421143 -0.37034210562705994 0.7505111694335938 -0.5472884178161621 0.7850754261016846 0.19187207520008087 2 0.9882969856262207 0 0.0 0 0.0 0 0.0 0.3276984691619873 0.20788490772247314 0.6544501781463623 0.7152317762374878 0.3708914518356323 -0.5923337340354919 0.7646296620368958 0.13306954503059387 2 0.9986105561256409 0 0.0 0 0.0 0 0.0 0.3397330045700073 0.13471728563308716 0.614459753036499 0.7675099968910217 0.5092929005622864 -0.3892636001110077 0.7379385232925415 0.16754750907421112 2 0.9887034893035889 0 0.0 0 0.0 0 0.0 0.2691516876220703 0.09592822194099426 0.7350804805755615 0.007080294191837311 -0.13916440308094025 0.9902340769767761 0.7421389222145081 0.7785028219223022 2 0.9978255033493042 0 0.0 0 0.0 0 0.0 0.3328806161880493 0.17843002080917358 0.734142541885376 0.8033692240715027 -0.14041566848754883 0.5786614418029785 0.7056828141212463 0.8151172995567322 2 0.9995585083961487 0 0.0 0 0.0 0 0.0 0.26910340785980225 0.17764323949813843 0.7524588108062744 -0.1340678185224533 -0.20361949503421783 0.9698172211647034 0.7397990822792053 0.818606436252594 2 0.9994724988937378 0 0.0 0 0.0 0 0.0 0.18260103464126587 0.19482123851776123 0.6990411281585693 -0.9710379242897034 0.20737327635288239 0.1185949295759201 0.7754655480384827 0.8056461215019226 2 0.9983318448066711 0 0.0 0 0.0 0 0.0 0.2703179121017456 0.24386632442474365 0.7686514854431152 -0.15445417165756226 -0.2859279215335846 0.9457075595855713 0.7375360131263733 0.851832926273346 2 0.9999029636383057 0 0.0 0 0.0 0 0.0 0.20932167768478394 0.2829176187515259 0.7541635036468506 -0.9013641476631165 -0.05499435216188431 0.4294869899749756 0.7640476226806641 0.8615762591362 2 0.9998661279678345 0 0.0 0 0.0 0 0.0 0.237876296043396 0.2133294939994812 0.641486644744873 -0.3396099805831909 0.47352519631385803 -0.8126468658447266 0.8041354417800903 0.15376198291778564 2 0.9991787672042847 0 0.0 0 0.0 0 0.0 0.3276984691619873 0.2997403144836426 0.701850414276123 0.7264320850372314 0.28260138630867004 -0.6263924241065979 0.7918135523796082 0.08813752979040146 2 0.9998425245285034 0 0.0 0 0.0 0 0.0 0.3276984691619873 0.20788490772247314 0.6544501781463623 0.7152317762374878 0.3708914518356323 -0.5923337340354919 0.7646296620368958 0.13306954503059387 2 0.9986105561256409 0 0.0 0 0.0 0 0.0 0.26910340785980225 0.17764323949813843 0.7524588108062744 -0.1340678185224533 -0.20361949503421783 0.9698172211647034 0.7397990822792053 0.818606436252594 2 0.9994724988937378 0 0.0 0 0.0 0 0.0 0.3328806161880493 0.24741899967193604 0.7576038837432861 0.7921384572982788 -0.2150944471359253 0.5711538791656494 0.7047654390335083 0.8518280386924744 2 0.999882161617279 0 0.0 0 0.0 0 0.0 0.2703179121017456 0.24386632442474365 0.7686514854431152 -0.15445417165756226 -0.2859279215335846 0.9457075595855713 0.7375360131263733 0.851832926273346 2 0.9999029636383057 0 0.0 0 0.0 0 0.0 0.237876296043396 0.2133294939994812 0.641486644744873 -0.3396099805831909 0.47352519631385803 -0.8126468658447266 0.8830041289329529 0.3463095426559448 2 0.9991787672042847 0 0.0 0 0.0 0 0.0 0.20932167768478394 0.2829176187515259 0.7541635036468506 -0.9013641476631165 -0.05499435216188431 0.4294869899749756 0.9167553186416626 0.2833555042743683 2 0.9998661279678345 0 0.0 0 0.0 0 0.0 0.237876296043396 0.37244415283203125 0.7143435478210449 -0.4520706832408905 0.5877559781074524 -0.6709189414978027 0.873521625995636 0.25355786085128784 2 0.9999978542327881 0 0.0 0 0.0 0 0.0 0.3276984691619873 0.20788490772247314 0.6544501781463623 0.7152317762374878 0.3708914518356323 -0.5923337340354919 0.7646296620368958 0.13306954503059387 2 0.9986105561256409 0 0.0 0 0.0 0 0.0 0.3328806161880493 0.24741899967193604 0.7576038837432861 0.7921384572982788 -0.2150944471359253 0.5711538791656494 0.773402750492096 0.07818431407213211 2 0.999882161617279 0 0.0 0 0.0 0 0.0 0.3328806161880493 0.17843002080917358 0.734142541885376 0.8033692240715027 -0.14041566848754883 0.5786614418029785 0.7528762221336365 0.10685840249061584 2 0.9995585083961487 0 0.0 0 0.0 0 0.0 0.20780110359191895 0.12533944845199585 0.2807978391647339 0.5116122961044312 0.844325065612793 0.1590929925441742 0.793588399887085 0.3341623842716217 0 0.6737872362136841 2 0.25705254077911377 3 0.04048972204327583 0 0.0 0.3311045169830322 -0.06117776036262512 0.35713791847229004 0.9543748497962952 -0.013000885024666786 -0.29825738072395325 0.6850048899650574 0.3302666246891022 2 0.662501871585846 0 0.31252527236938477 0 0.0 0 0.0 0.2891288995742798 -0.053497374057769775 0.22732973098754883 0.9860530495643616 -0.06204412877559662 -0.15433210134506226 0.7061302661895752 0.3902425765991211 0 0.6714892983436584 2 0.28184226155281067 3 0.023302968591451645 0 0.0 0.30187129974365234 -0.08480963110923767 0.619861364364624 0.5957213044166565 -0.6205328702926636 0.5099032521247864 0.7216191291809082 0.6659771203994751 2 0.9719600081443787 0 0.0 0 0.0 0 0.0 0.3468945026397705 0.06105288863182068 0.6569516658782959 0.9636219143867493 -0.16562394797801971 0.20972320437431335 0.6956770420074463 0.7410318851470947 2 0.9881370067596436 0 0.0 0 0.0 0 0.0 0.3028668165206909 0.03667032718658447 0.7283434867858887 0.4055604636669159 -0.3405865728855133 0.8482314348220825 0.7277485728263855 0.7524433732032776 2 1.0069687366485596 0 0.0 0 0.0 0 0.0 0.3468945026397705 0.06105288863182068 0.6569516658782959 0.9636219143867493 -0.16562394797801971 0.20972320437431335 0.7123997807502747 0.16860434412956238 2 0.9881370067596436 0 0.0 0 0.0 0 0.0 0.3541121482849121 -0.07419586181640625 0.4291270971298218 0.9666127562522888 -0.2230903059244156 -0.125919371843338 0.6707702279090881 0.29945147037506104 2 0.8337088823318481 0 0.15088647603988647 0 0.0 0 0.0 0.3469996452331543 0.10634586215019226 0.5646698474884033 0.7864314913749695 0.5786614418029785 -0.21585741639137268 0.7268060445785522 0.19475699961185455 2 0.9669324159622192 0 0.008164938539266586 0 0.0 0 0.0 0.3541121482849121 -0.07419586181640625 0.4291270971298218 0.9666127562522888 -0.2230903059244156 -0.125919371843338 0.6707702279090881 0.29945147037506104 2 0.8337088823318481 0 0.15088647603988647 0 0.0 0 0.0 0.25187551975250244 0.12372738122940063 0.40594351291656494 0.32880643010139465 0.9301126003265381 -0.16360972821712494 0.7734473347663879 0.27408310770988464 2 0.7046008110046387 0 0.2593858540058136 0 0.0 0 0.0 0.3469996452331543 0.10634586215019226 0.5646698474884033 0.7864314913749695 0.5786614418029785 -0.21585741639137268 0.7268060445785522 0.19475699961185455 2 0.9669324159622192 0 0.008164938539266586 0 0.0 0 0.0 0.3403736352920532 0.3993680477142334 0.7714123725891113 0.6911221742630005 0.7172459959983826 0.08874782919883728 0.8158060908317566 0.02945329248905182 2 0.9999896883964539 0 0.0 0 0.0 0 0.0 0.237876296043396 0.37244415283203125 0.7143435478210449 -0.4520706832408905 0.5877559781074524 -0.6709189414978027 0.8513078689575195 0.07979519665241241 2 0.9999978542327881 0 0.0 0 0.0 0 0.0 0.26705384254455566 0.41719162464141846 0.7832803726196289 -0.14835047721862793 0.9023407697677612 0.4046449065208435 0.8518726229667664 0.03330334648489952 2 1.0000007152557373 0 0.0 0 0.0 0 0.0 0.22349166870117188 0.37734532356262207 0.784529447555542 -0.7459639310836792 0.3484298288822174 0.5675222277641296 0.9024268984794617 0.2320421040058136 2 0.9999775290489197 0 0.0 0 0.0 0 0.0 0.237876296043396 0.37244415283203125 0.7143435478210449 -0.4520706832408905 0.5877559781074524 -0.6709189414978027 0.873521625995636 0.25355786085128784 2 0.9999978542327881 0 0.0 0 0.0 0 0.0 0.20932167768478394 0.2829176187515259 0.7541635036468506 -0.9013641476631165 -0.05499435216188431 0.4294869899749756 0.9167553186416626 0.2833555042743683 2 0.9998661279678345 0 0.0 0 0.0 0 0.0 0.3276984691619873 0.2997403144836426 0.701850414276123 0.7264320850372314 0.28260138630867004 -0.6263924241065979 0.7918135523796082 0.08813752979040146 2 0.9998425245285034 0 0.0 0 0.0 0 0.0 0.34603846073150635 0.34535515308380127 0.7890980243682861 0.7636646628379822 0.0001831110566854477 0.6455580592155457 0.7970283031463623 0.03577974811196327 2 0.9999740719795227 0 0.0 0 0.0 0 0.0 0.3328806161880493 0.24741899967193604 0.7576038837432861 0.7921384572982788 -0.2150944471359253 0.5711538791656494 0.773402750492096 0.07818431407213211 2 0.999882161617279 0 0.0 0 0.0 0 0.0 0.2844879627227783 0.30941593647003174 0.7897307872772217 -0.059114351868629456 -0.191625714302063 0.9796746969223022 0.7294446229934692 0.8867914080619812 2 0.9999793171882629 0 0.0 0 0.0 0 0.0 0.3328806161880493 0.24741899967193604 0.7576038837432861 0.7921384572982788 -0.2150944471359253 0.5711538791656494 0.7047654390335083 0.8518280386924744 2 0.999882161617279 0 0.0 0 0.0 0 0.0 0.34603846073150635 0.34535515308380127 0.7890980243682861 0.7636646628379822 0.0001831110566854477 0.6455580592155457 0.6966750025749207 0.9037923216819763 2 0.9999740719795227 0 0.0 0 0.0 0 0.0 0.2844879627227783 0.30941593647003174 0.7897307872772217 -0.059114351868629456 -0.191625714302063 0.9796746969223022 0.7294446229934692 0.8867914080619812 2 0.9999793171882629 0 0.0 0 0.0 0 0.0 0.20932167768478394 0.2829176187515259 0.7541635036468506 -0.9013641476631165 -0.05499435216188431 0.4294869899749756 0.7640476226806641 0.8615762591362 2 0.9998661279678345 0 0.0 0 0.0 0 0.0 0.2703179121017456 0.24386632442474365 0.7686514854431152 -0.15445417165756226 -0.2859279215335846 0.9457075595855713 0.7375360131263733 0.851832926273346 2 0.9999029636383057 0 0.0 0 0.0 0 0.0 0.34603846073150635 0.34535515308380127 0.7890980243682861 0.7636646628379822 0.0001831110566854477 0.6455580592155457 0.6966750025749207 0.9037923216819763 2 0.9999740719795227 0 0.0 0 0.0 0 0.0 0.26705384254455566 0.41719162464141846 0.7832803726196289 -0.14835047721862793 0.9023407697677612 0.4046449065208435 0.7314229607582092 0.9295790791511536 2 1.0000007152557373 0 0.0 0 0.0 0 0.0 0.2844879627227783 0.30941593647003174 0.7897307872772217 -0.059114351868629456 -0.191625714302063 0.9796746969223022 0.7294446229934692 0.8867914080619812 2 0.9999793171882629 0 0.0 0 0.0 0 0.0 0.2691516876220703 0.09592822194099426 0.7350804805755615 0.007080294191837311 -0.13916440308094025 0.9902340769767761 0.7421389222145081 0.7785028219223022 2 0.9978255033493042 0 0.0 0 0.0 0 0.0 0.19527888298034668 0.014238350093364716 0.7056961059570312 -0.3719595968723297 -0.17993712425231934 0.9106112718582153 0.779891848564148 0.7320565581321716 2 0.9548998475074768 0 0.002611551433801651 0 0.0 0 0.0 0.3028668165206909 0.03667032718658447 0.7283434867858887 0.4055604636669159 -0.3405865728855133 0.8482314348220825 0.7277485728263855 0.7524433732032776 2 1.0069687366485596 0 0.0 0 0.0 0 0.0 0.16343510150909424 0.09151619672775269 0.6089448928833008 -0.6315500140190125 0.747611939907074 0.2053590565919876 0.9195019006729126 0.4097464084625244 2 0.9313681125640869 0 0.039589401334524155 0 0.0 0 0.0 0.19527888298034668 0.014238350093364716 0.7056961059570312 -0.3719595968723297 -0.17993712425231934 0.9106112718582153 0.9643253684043884 0.4195291996002197 2 0.9548998475074768 0 0.002611551433801651 0 0.0 0 0.0 0.1780099868774414 0.10716038942337036 0.7001523971557617 -0.8770104050636292 0.06659138947725296 0.4757835566997528 0.945722758769989 0.37810018658638 2 0.9883637428283691 0 0.0 0 0.0 0 0.0 0.09442317485809326 -0.08681789040565491 0.6793560981750488 -0.3274635970592499 -0.27362895011901855 0.904354989528656 0.5895189642906189 0.03625130653381348 2 0.8125033378601074 0 0.11024869978427887 4 0.07657250761985779 0 0.0 0.16343510150909424 0.09151619672775269 0.6089448928833008 -0.6315500140190125 0.747611939907074 0.2053590565919876 0.5441842675209045 0.12299907207489014 2 0.9313681125640869 0 0.039589401334524155 0 0.0 0 0.0 0.0 -0.03274005651473999 0.5830428600311279 0.0 0.3660695254802704 0.9305703639984131 0.6381930708885193 0.0952436700463295 0 0.3733152747154236 4 0.3145773410797119 2 0.31029725074768066 0 0.0 0.16343510150909424 0.09151619672775269 0.6089448928833008 -0.6315500140190125 0.747611939907074 0.2053590565919876 0.5441842675209045 0.12299907207489014 2 0.9313681125640869 0 0.039589401334524155 0 0.0 0 0.0 0.0 0.06483566761016846 0.4689443111419678 0.0 0.9169896245002747 0.3988158702850342 0.6363822221755981 0.17513136565685272 0 0.534076988697052 4 0.23122085630893707 2 0.22778838872909546 0 0.0 0.0 -0.03274005651473999 0.5830428600311279 0.0 0.3660695254802704 0.9305703639984131 0.6381930708885193 0.0952436700463295 0 0.3733152747154236 4 0.3145773410797119 2 0.31029725074768066 0 0.0 0.0 -0.03274005651473999 0.5830428600311279 0.0 0.3660695254802704 0.9305703639984131 0.8648743033409119 0.6659566164016724 0 0.3733152747154236 4 0.3145773410797119 2 0.31029725074768066 0 0.0 0.0 -0.2221187949180603 0.49811649322509766 0.0 -0.9373455047607422 0.3483687937259674 0.8648743033409119 0.5585253834724426 0 0.5169974565505981 4 0.24156785011291504 2 0.23979748785495758 0 0.0 0.09442317485809326 -0.08681789040565491 0.6793560981750488 -0.3274635970592499 -0.27362895011901855 0.904354989528656 0.8325487375259399 0.6775317192077637 2 0.8125033378601074 0 0.11024869978427887 4 0.07657250761985779 0 0.0 0.09442317485809326 -0.08681789040565491 0.6793560981750488 -0.3274635970592499 -0.27362895011901855 0.904354989528656 0.8325487375259399 0.6775317192077637 2 0.8125033378601074 0 0.11024869978427887 4 0.07657250761985779 0 0.0 0.0 -0.2221187949180603 0.49811649322509766 0.0 -0.9373455047607422 0.3483687937259674 0.8648743033409119 0.5585253834724426 0 0.5169974565505981 4 0.24156785011291504 2 0.23979748785495758 0 0.0 0.15126758813858032 -0.20477783679962158 0.5203018188476562 0.16193121671676636 -0.9197363257408142 0.3574938178062439 0.7911576628684998 0.5780675411224365 2 0.6742236614227295 0 0.24004419147968292 4 0.08352506905794144 0 0.0 0.30187129974365234 -0.08480963110923767 0.619861364364624 0.5957213044166565 -0.6205328702926636 0.5099032521247864 0.7216191291809082 0.6659771203994751 2 0.9719600081443787 0 0.0 0 0.0 0 0.0 0.15126758813858032 -0.20477783679962158 0.5203018188476562 0.16193121671676636 -0.9197363257408142 0.3574938178062439 0.7911576628684998 0.5780675411224365 2 0.6742236614227295 0 0.24004419147968292 4 0.08352506905794144 0 0.0 0.2433398962020874 -0.18356812000274658 0.4825398921966553 0.504165768623352 -0.8324533700942993 0.2297738641500473 0.7394121289253235 0.5778254270553589 2 0.7614166140556335 0 0.20125827193260193 4 0.018037568777799606 0 0.0 0.3541121482849121 -0.07419586181640625 0.4291270971298218 0.9666127562522888 -0.2230903059244156 -0.125919371843338 0.6715637445449829 0.6103150844573975 2 0.8337088823318481 0 0.15088647603988647 0 0.0 0 0.0 0.2433398962020874 -0.18356812000274658 0.4825398921966553 0.504165768623352 -0.8324533700942993 0.2297738641500473 0.7394121289253235 0.5778254270553589 2 0.7614166140556335 0 0.20125827193260193 4 0.018037568777799606 0 0.0 0.24950921535491943 -0.1970342993736267 0.3751683235168457 0.49635303020477295 -0.861873209476471 -0.10370189696550369 0.7239003777503967 0.5375181436538696 2 0.6230677962303162 0 0.34260785579681396 4 0.005191043019294739 0 0.0 0.3311045169830322 -0.06117776036262512 0.35713791847229004 0.9543748497962952 -0.013000885024666786 -0.29825738072395325 0.13535627722740173 0.7921632528305054 2 0.662501871585846 0 0.31252527236938477 0 0.0 0 0.0 0.24950921535491943 -0.1970342993736267 0.3751683235168457 0.49635303020477295 -0.861873209476471 -0.10370189696550369 0.1934516727924347 0.8448641896247864 2 0.6230677962303162 0 0.34260785579681396 4 0.005191043019294739 0 0.0 0.2483149766921997 -0.1659679412841797 0.2751126289367676 0.6037476658821106 -0.766502857208252 -0.21887874603271484 0.1998605728149414 0.7935872673988342 0 0.621268630027771 2 0.3484863340854645 0 0.0 0 0.0 0.2891288995742798 -0.053497374057769775 0.22732973098754883 0.9860530495643616 -0.06204412877559662 -0.15433210134506226 0.16813310980796814 0.7361131310462952 0 0.6714892983436584 2 0.28184226155281067 3 0.023302968591451645 0 0.0 0.2483149766921997 -0.1659679412841797 0.2751126289367676 0.6037476658821106 -0.766502857208252 -0.21887874603271484 0.1998605728149414 0.7935872673988342 0 0.621268630027771 2 0.3484863340854645 0 0.0 0 0.0 0.2333071231842041 -0.14518868923187256 0.12986749410629272 0.6191290020942688 -0.7353739738464355 -0.27536851167678833 0.21926060318946838 0.7273061871528625 0 0.8559712767601013 2 0.10463123768568039 3 0.005023133009672165 0 0.0 0.2333071231842041 -0.14518868923187256 0.12986749410629272 0.6191290020942688 -0.7353739738464355 -0.27536851167678833 0.21926060318946838 0.7273061871528625 0 0.8559712767601013 2 0.10463123768568039 3 0.005023133009672165 0 0.0 0.0 -0.22177386283874512 0.21981686353683472 0.0 -0.982146680355072 -0.18799401819705963 0.33400920033454895 0.7854426503181458 0 0.9121978878974915 4 0.0331408865749836 2 0.0324675627052784 0 0.0 0.0 -0.17877912521362305 0.11906552314758301 0.0 -0.9352397322654724 -0.35392314195632935 0.3381052017211914 0.7297746539115906 0 0.9514539241790771 0 0.0 0 0.0 0 0.0 0.2483149766921997 -0.1659679412841797 0.2751126289367676 0.6037476658821106 -0.766502857208252 -0.21887874603271484 0.1998605728149414 0.7935872673988342 0 0.621268630027771 2 0.3484863340854645 0 0.0 0 0.0 0.0 -0.2242426872253418 0.35177063941955566 0.0 -0.999267578125 -0.03799554333090782 0.3204757869243622 0.8396906852722168 0 0.7614060640335083 4 0.11837860941886902 2 0.11738711595535278 0 0.0 0.0 -0.22177386283874512 0.21981686353683472 0.0 -0.982146680355072 -0.18799401819705963 0.33400920033454895 0.7854426503181458 0 0.9121978878974915 4 0.0331408865749836 2 0.0324675627052784 0 0.0 0.24950921535491943 -0.1970342993736267 0.3751683235168457 0.49635303020477295 -0.861873209476471 -0.10370189696550369 0.1934516727924347 0.8448641896247864 2 0.6230677962303162 0 0.34260785579681396 4 0.005191043019294739 0 0.0 0.2433398962020874 -0.18356812000274658 0.4825398921966553 0.504165768623352 -0.8324533700942993 0.2297738641500473 0.18306925892829895 0.8835158944129944 2 0.7614166140556335 0 0.20125827193260193 4 0.018037568777799606 0 0.0 0.15126758813858032 -0.20477783679962158 0.5203018188476562 0.16193121671676636 -0.9197363257408142 0.3574938178062439 0.22674739360809326 0.9042510390281677 2 0.6742236614227295 0 0.24004419147968292 4 0.08352506905794144 0 0.0 0.20940327644348145 0.18806850910186768 0.10748907923698425 0.6282540559768677 0.6898098587989807 0.35978269577026367 0.8133400082588196 0.3891247510910034 0 0.6962488293647766 3 0.23988555371761322 2 0.04625933989882469 0 0.0 0.25873374938964844 0.14417153596878052 -0.10946205258369446 0.7939695119857788 -0.46391186118125916 -0.39286476373672485 0.7813736200332642 0.48258087038993835 3 0.7289473414421082 0 0.25397777557373047 0 0.0 0 0.0 0.1905134916305542 0.2867305278778076 0.004207689315080643 0.2593463063240051 0.6273384690284729 0.7342753410339355 0.8518726229667664 0.40882110595703125 3 0.7835674285888672 0 0.18744781613349915 0 0.0 0 0.0 0.1994549036026001 -0.007807791233062744 -0.07830172777175903 0.5622425079345703 -0.5634021759033203 -0.6053346395492554 0.23669739067554474 0.5947647094726562 0 0.8606905937194824 3 0.10992924124002457 0 0.0 0 0.0 0.25873374938964844 0.14417153596878052 -0.10946205258369446 0.7939695119857788 -0.46391186118125916 -0.39286476373672485 0.18831117451190948 0.5307038426399231 3 0.7289473414421082 0 0.25397777557373047 0 0.0 0 0.0 0.27896857261657715 0.07729777693748474 0.03905799984931946 0.9912412166595459 0.0948820486664772 -0.09158604592084885 0.17303664982318878 0.6143929958343506 0 0.7136451601982117 3 0.23007641732692719 2 0.047092560678720474 0 0.0 0.0 0.219041109085083 0.11931818723678589 0.0 0.8301644921302795 0.557481586933136 0.642014741897583 0.37345194816589355 0 0.8959391713142395 5 0.029438931494951248 3 0.028147835284471512 0 0.0 0.1905134916305542 0.2867305278778076 0.004207689315080643 0.2593463063240051 0.6273384690284729 0.7342753410339355 0.545678436756134 0.4428918659687042 3 0.7835674285888672 0 0.18744781613349915 0 0.0 0 0.0 0.0 0.317891001701355 0.011525623500347137 0.0 0.8030030131340027 0.5959654450416565 0.6397891640663147 0.4510643780231476 0 0.7890903353691101 5 0.08665546774864197 3 0.08514407277107239 1 0.019098643213510513 0.0 -0.05573540925979614 -0.1027672290802002 0.0 -0.7233496904373169 -0.6904507875442505 0.3428180515766144 0.5973702669143677 0 0.949096143245697 0 0.0 0 0.0 0 0.0 0.1772594451904297 0.11724525690078735 -0.1825990080833435 0.44734030961990356 -0.4271370470523834 -0.7857600450515747 0.23943009972572327 0.508765459060669 0 0.6831516027450562 3 0.28197067975997925 1 0.002889048308134079 0 0.0 0.1994549036026001 -0.007807791233062744 -0.07830172777175903 0.5622425079345703 -0.5634021759033203 -0.6053346395492554 0.23669739067554474 0.5947647094726562 0 0.8606905937194824 3 0.10992924124002457 0 0.0 0 0.0 0.1905134916305542 0.2867305278778076 0.004207689315080643 0.2593463063240051 0.6273384690284729 0.7342753410339355 0.8839541673660278 0.6740447282791138 3 0.7835674285888672 0 0.18744781613349915 0 0.0 0 0.0 0.3247077465057373 0.1585661768913269 -0.04109635949134827 0.06991790235042572 -0.9837946891784668 0.16495254635810852 0.9672834277153015 0.6379106640815735 3 0.9705332517623901 0 0.00480993464589119 0 0.0 0 0.0 0.2911590337753296 0.2942936420440674 0.005826227366924286 -0.20746482908725739 0.4108707010746002 0.8877529501914978 0.8978860974311829 0.6235358715057373 3 0.961869478225708 0 0.014442968182265759 0 0.0 0 0.0 0.25873374938964844 0.14417153596878052 -0.10946205258369446 0.7939695119857788 -0.46391186118125916 -0.39286476373672485 0.18831117451190948 0.5307038426399231 3 0.7289473414421082 0 0.25397777557373047 0 0.0 0 0.0 0.3432735204696655 0.26402461528778076 -0.1277342438697815 0.573839545249939 0.09149449318647385 -0.8138371109962463 0.13124819099903107 0.48351210355758667 3 0.9892646074295044 0 0.0 0 0.0 0 0.0 0.3247077465057373 0.1585661768913269 -0.04109635949134827 0.06991790235042572 -0.9837946891784668 0.16495254635810852 0.14707791805267334 0.5547357797622681 3 0.9705332517623901 0 0.00480993464589119 0 0.0 0 0.0 0.1905134916305542 0.2867305278778076 0.004207689315080643 0.2593463063240051 0.6273384690284729 0.7342753410339355 0.545678436756134 0.4428918659687042 3 0.7835674285888672 0 0.18744781613349915 0 0.0 0 0.0 0.29355669021606445 0.34976017475128174 -0.07433450222015381 0.23679311573505402 0.9682607650756836 -0.0796533077955246 0.49234965443611145 0.4958604872226715 3 0.9519422650337219 0 0.016063708811998367 0 0.0 0 0.0 0.17369681596755981 0.36367666721343994 -0.10281378030776978 0.2631000578403473 0.9605090618133545 0.09018219262361526 0.5536576509475708 0.5132588744163513 3 0.7268608808517456 0 0.17259469628334045 1 0.09181983768939972 0 0.0 0.29355669021606445 0.34976017475128174 -0.07433450222015381 0.23679311573505402 0.9682607650756836 -0.0796533077955246 0.6434169411659241 0.8292502164840698 3 0.9519422650337219 0 0.016063708811998367 0 0.0 0 0.0 0.2681701183319092 0.2678663730621338 -0.16814452409744263 0.5125888586044312 0.191473126411438 -0.8369701504707336 0.5837397575378418 0.8574127554893494 3 0.9406881332397461 0 0.04160959646105766 0 0.0 0 0.0 0.17369681596755981 0.36367666721343994 -0.10281378030776978 0.2631000578403473 0.9605090618133545 0.09018219262361526 0.6518501043319702 0.8928941488265991 3 0.7268608808517456 0 0.17259469628334045 1 0.09181983768939972 0 0.0 0.2911590337753296 0.2942936420440674 0.005826227366924286 -0.20746482908725739 0.4108707010746002 0.8877529501914978 0.4938306510448456 0.4439513385295868 3 0.961869478225708 0 0.014442968182265759 0 0.0 0 0.0 0.3900512456893921 0.3162165880203247 -0.022862508893013 0.34510329365730286 0.9354228377342224 -0.07635731250047684 0.44328606128692627 0.4625326693058014 3 0.9903740882873535 0 0.0 0 0.0 0 0.0 0.29355669021606445 0.34976017475128174 -0.07433450222015381 0.23679311573505402 0.9682607650756836 -0.0796533077955246 0.49234965443611145 0.4958604872226715 3 0.9519422650337219 0 0.016063708811998367 0 0.0 0 0.0 0.3900512456893921 0.3162165880203247 -0.022862508893013 0.34510329365730286 0.9354228377342224 -0.07635731250047684 0.6370754837989807 0.7687724828720093 3 0.9903740882873535 0 0.0 0 0.0 0 0.0 0.3432735204696655 0.26402461528778076 -0.1277342438697815 0.573839545249939 0.09149449318647385 -0.8138371109962463 0.5876299142837524 0.8122449517250061 3 0.9892646074295044 0 0.0 0 0.0 0 0.0 0.29355669021606445 0.34976017475128174 -0.07433450222015381 0.23679311573505402 0.9682607650756836 -0.0796533077955246 0.6434169411659241 0.8292502164840698 3 0.9519422650337219 0 0.016063708811998367 0 0.0 0 0.0 0.3247077465057373 0.1585661768913269 -0.04109635949134827 0.06991790235042572 -0.9837946891784668 0.16495254635810852 0.9672834277153015 0.6379106640815735 3 0.9705332517623901 0 0.00480993464589119 0 0.0 0 0.0 0.34428489208221436 0.28179633617401123 0.046254053711891174 -0.47929319739341736 0.3894161880016327 0.7865230441093445 0.8977068662643433 0.5999657511711121 3 0.9897324442863464 0 0.0 0 0.0 0 0.0 0.2911590337753296 0.2942936420440674 0.005826227366924286 -0.20746482908725739 0.4108707010746002 0.8877529501914978 0.8978860974311829 0.6235358715057373 3 0.961869478225708 0 0.014442968182265759 0 0.0 0 0.0 0.3247077465057373 0.1585661768913269 -0.04109635949134827 0.06991790235042572 -0.9837946891784668 0.16495254635810852 0.14707791805267334 0.5547357797622681 3 0.9705332517623901 0 0.00480993464589119 0 0.0 0 0.0 0.43937599658966064 0.23811864852905273 -0.05854392051696777 0.6367992162704468 -0.09231849014759064 -0.765465259552002 0.08150046318769455 0.522465169429779 3 0.9983529448509216 0 0.0 0 0.0 0 0.0 0.3816554546356201 0.17568820714950562 0.02271178364753723 -0.3256935477256775 -0.9139378070831299 0.24204230308532715 0.11026795953512192 0.5757925510406494 3 0.998649537563324 0 0.0 0 0.0 0 0.0 0.4554738998413086 0.2947545051574707 0.029965192079544067 0.4450819492340088 0.8953825235366821 0.013611255213618279 0.6390498280525208 0.7233343124389648 3 0.9976978898048401 0 0.0 0 0.0 0 0.0 0.43937599658966064 0.23811864852905273 -0.05854392051696777 0.6367992162704468 -0.09231849014759064 -0.765465259552002 0.5900217294692993 0.7481352686882019 3 0.9983529448509216 0 0.0 0 0.0 0 0.0 0.3900512456893921 0.3162165880203247 -0.022862508893013 0.34510329365730286 0.9354228377342224 -0.07635731250047684 0.6370754837989807 0.7687724828720093 3 0.9903740882873535 0 0.0 0 0.0 0 0.0 0.3816554546356201 0.17568820714950562 0.02271178364753723 -0.3256935477256775 -0.9139378070831299 0.24204230308532715 0.9494260549545288 0.6056154370307922 3 0.998649537563324 0 0.0 0 0.0 0 0.0 0.3984619379043579 0.26093626022338867 0.08564722537994385 -0.4599139392375946 0.35129857063293457 0.8154851198196411 0.9010043740272522 0.57774817943573 3 0.9973952174186707 0 0.0 0 0.0 0 0.0 0.34428489208221436 0.28179633617401123 0.046254053711891174 -0.47929319739341736 0.3894161880016327 0.7865230441093445 0.8977068662643433 0.5999657511711121 3 0.9897324442863464 0 0.0 0 0.0 0 0.0 0.3816554546356201 0.17568820714950562 0.02271178364753723 -0.3256935477256775 -0.9139378070831299 0.24204230308532715 0.11026795953512192 0.5757925510406494 3 0.998649537563324 0 0.0 0 0.0 0 0.0 0.5047986507415771 0.20594364404678345 -0.004644919186830521 0.6930753588676453 -0.20831935107707977 -0.6900539994239807 0.049123793840408325 0.5567721724510193 3 0.9998424053192139 0 0.0 0 0.0 0 0.0 0.43023955821990967 0.157029926776886 0.06563612818717957 -0.4426404535770416 -0.8844264149665833 0.14767906069755554 0.08512462675571442 0.6006276607513428 3 0.9999399781227112 0 0.0 0 0.0 0 0.0 0.34428489208221436 0.28179633617401123 0.046254053711891174 -0.47929319739341736 0.3894161880016327 0.7865230441093445 0.46575069427490234 0.4223727583885193 3 0.9897324442863464 0 0.0 0 0.0 0 0.0 0.4554738998413086 0.2947545051574707 0.029965192079544067 0.4450819492340088 0.8953825235366821 0.013611255213618279 0.4090229272842407 0.43271535634994507 3 0.9976978898048401 0 0.0 0 0.0 0 0.0 0.3900512456893921 0.3162165880203247 -0.022862508893013 0.34510329365730286 0.9354228377342224 -0.07635731250047684 0.44328606128692627 0.4625326693058014 3 0.9903740882873535 0 0.0 0 0.0 0 0.0 0.2681701183319092 0.2678663730621338 -0.16814452409744263 0.5125888586044312 0.191473126411438 -0.8369701504707336 0.17117449641227722 0.4642834961414337 3 0.9406881332397461 0 0.04160959646105766 0 0.0 0 0.0 0.1772594451904297 0.11724525690078735 -0.1825990080833435 0.44734030961990356 -0.4271370470523834 -0.7857600450515747 0.23943009972572327 0.508765459060669 0 0.6831516027450562 3 0.28197067975997925 1 0.002889048308134079 0 0.0 0.12932729721069336 0.17944878339767456 -0.22509831190109253 0.36967071890830994 -0.269569993019104 -0.8891872763633728 0.25760719180107117 0.4690239429473877 0 0.75236576795578 3 0.16852052509784698 1 0.07225456833839417 0 0.0 0.0 0.317891001701355 0.011525623500347137 0.0 0.8030030131340027 0.5959654450416565 0.6397891640663147 0.4510643780231476 0 0.7890903353691101 5 0.08665546774864197 3 0.08514407277107239 1 0.019098643213510513 0.17369681596755981 0.36367666721343994 -0.10281378030776978 0.2631000578403473 0.9605090618133545 0.09018219262361526 0.5536576509475708 0.5132588744163513 3 0.7268608808517456 0 0.17259469628334045 1 0.09181983768939972 0 0.0 0.0 0.3707171678543091 -0.08462855219841003 0.0 0.904324471950531 0.4267708361148834 0.6405338048934937 0.5089500546455383 0 0.7102694511413574 1 0.14585299789905548 5 0.07208946347236633 3 0.07045222818851471 0.12932729721069336 0.17944878339767456 -0.22509831190109253 0.36967071890830994 -0.269569993019104 -0.8891872763633728 0.5448826551437378 0.9278662204742432 0 0.75236576795578 3 0.16852052509784698 1 0.07225456833839417 0 0.0 0.17586100101470947 0.3179171085357666 -0.20532292127609253 0.6381115317344666 0.3986937999725342 -0.6586504578590393 0.6007186770439148 0.9138137102127075 3 0.4058360159397125 0 0.3687710165977478 1 0.22105538845062256 0 0.0 0.2681701183319092 0.2678663730621338 -0.16814452409744263 0.5125888586044312 0.191473126411438 -0.8369701504707336 0.5837397575378418 0.8574127554893494 3 0.9406881332397461 0 0.04160959646105766 0 0.0 0 0.0 0.17586100101470947 0.3179171085357666 -0.20532292127609253 0.6381115317344666 0.3986937999725342 -0.6586504578590393 0.6007186770439148 0.9138137102127075 3 0.4058360159397125 0 0.3687710165977478 1 0.22105538845062256 0 0.0 0.17369681596755981 0.36367666721343994 -0.10281378030776978 0.2631000578403473 0.9605090618133545 0.09018219262361526 0.6518501043319702 0.8928941488265991 3 0.7268608808517456 0 0.17259469628334045 1 0.09181983768939972 0 0.0 0.2681701183319092 0.2678663730621338 -0.16814452409744263 0.5125888586044312 0.191473126411438 -0.8369701504707336 0.5837397575378418 0.8574127554893494 3 0.9406881332397461 0 0.04160959646105766 0 0.0 0 0.0 0.0 0.3707171678543091 -0.08462855219841003 0.0 0.904324471950531 0.4267708361148834 0.6405338048934937 0.5089500546455383 0 0.7102694511413574 1 0.14585299789905548 5 0.07208946347236633 3 0.07045222818851471 0.11685270071029663 0.37915825843811035 -0.15417778491973877 0.40092167258262634 0.9032562971115112 0.15277566015720367 0.583946704864502 0.540475606918335 0 0.41070666909217834 1 0.2940956950187683 3 0.28172755241394043 0 0.0 0.0 0.398445725440979 -0.14425861835479736 0.0 0.9055452346801758 0.42420727014541626 0.6413841247558594 0.5432328581809998 0 0.5077889561653137 1 0.39139166474342346 5 0.050735753029584885 3 0.04906380549073219 0.12932729721069336 0.17944878339767456 -0.22509831190109253 0.36967071890830994 -0.269569993019104 -0.8891872763633728 0.25760719180107117 0.4690239429473877 0 0.75236576795578 3 0.16852052509784698 1 0.07225456833839417 0 0.0 0.0 0.2078162431716919 -0.2881510257720947 0.0 -0.4107486307621002 -0.9117404818534851 0.3223710358142853 0.43101730942726135 0 0.7689260244369507 1 0.2003297209739685 0 0.0 0 0.0 0.07002320885658264 0.2813262939453125 -0.2664802074432373 0.5305337905883789 -0.30652791261672974 -0.790276825428009 0.27513593435287476 0.4157503545284271 0 0.6353183388710022 1 0.3263947069644928 3 0.018231775611639023 0 0.0 0.0 0.09937161207199097 -0.21314752101898193 0.0 -0.5446943640708923 -0.8385875821113586 0.3309190571308136 0.4989504814147949 0 0.9125122427940369 5 0.011346809566020966 3 0.010605178773403168 1 0.0003351755440235138 0.12932729721069336 0.17944878339767456 -0.22509831190109253 0.36967071890830994 -0.269569993019104 -0.8891872763633728 0.25760719180107117 0.4690239429473877 0 0.75236576795578 3 0.16852052509784698 1 0.07225456833839417 0 0.0 0.1772594451904297 0.11724525690078735 -0.1825990080833435 0.44734030961990356 -0.4271370470523834 -0.7857600450515747 0.23943009972572327 0.508765459060669 0 0.6831516027450562 3 0.28197067975997925 1 0.002889048308134079 0 0.0 0.17586100101470947 0.3179171085357666 -0.20532292127609253 0.6381115317344666 0.3986937999725342 -0.6586504578590393 0.21205389499664307 0.42999351024627686 3 0.4058360159397125 0 0.3687710165977478 1 0.22105538845062256 0 0.0 0.07341891527175903 0.3139185905456543 -0.28698432445526123 0.6358226537704468 -0.38373973965644836 -0.669667661190033 0.27071312069892883 0.3962279260158539 1 0.6878804564476013 0 0.28015995025634766 3 0.008270028978586197 0 0.0 0.12179547548294067 0.3854290246963501 -0.23301446437835693 0.8996246457099915 0.39896848797798157 -0.17743460834026337 0.23082518577575684 0.39427757263183594 1 0.7110409140586853 0 0.1705215722322464 3 0.11412934958934784 0 0.0 0.07002320885658264 0.2813262939453125 -0.2664802074432373 0.5305337905883789 -0.30652791261672974 -0.790276825428009 0.27513593435287476 0.4157503545284271 0 0.6353183388710022 1 0.3263947069644928 3 0.018231775611639023 0 0.0 0.0 0.29299962520599365 -0.3292173147201538 0.0 -0.5545213222503662 -0.8321481943130493 0.3137752413749695 0.3848779797554016 1 0.7812550663948059 0 0.20431587100028992 0 0.0 0 0.0 0.07341891527175903 0.3139185905456543 -0.28698432445526123 0.6358226537704468 -0.38373973965644836 -0.669667661190033 0.27071312069892883 0.3962279260158539 1 0.6878804564476013 0 0.28015995025634766 3 0.008270028978586197 0 0.0 0.09905996918678284 0.40596628189086914 -0.19437533617019653 0.5630664825439453 0.7503280639648438 0.34626302123069763 0.5929415822029114 0.566311240196228 1 0.6572749614715576 0 0.20971746742725372 3 0.12424865365028381 0 0.0 0.0 0.398445725440979 -0.14425861835479736 0.0 0.9055452346801758 0.42420727014541626 0.6413841247558594 0.5432328581809998 0 0.5077889561653137 1 0.39139166474342346 5 0.050735753029584885 3 0.04906380549073219 0.11685270071029663 0.37915825843811035 -0.15417778491973877 0.40092167258262634 0.9032562971115112 0.15277566015720367 0.583946704864502 0.540475606918335 0 0.41070666909217834 1 0.2940956950187683 3 0.28172755241394043 0 0.0 0.12179547548294067 0.3854290246963501 -0.23301446437835693 0.8996246457099915 0.39896848797798157 -0.17743460834026337 0.6237066984176636 0.9517653584480286 1 0.7110409140586853 0 0.1705215722322464 3 0.11412934958934784 0 0.0 0.11685270071029663 0.37915825843811035 -0.15417778491973877 0.40092167258262634 0.9032562971115112 0.15277566015720367 0.6471365094184875 0.9334772229194641 0 0.41070666909217834 1 0.2940956950187683 3 0.28172755241394043 0 0.0 0.17586100101470947 0.3179171085357666 -0.20532292127609253 0.6381115317344666 0.3986937999725342 -0.6586504578590393 0.6007186770439148 0.9138137102127075 3 0.4058360159397125 0 0.3687710165977478 1 0.22105538845062256 0 0.0 0.023262888193130493 0.648740291595459 -0.1271979808807373 0.27558213472366333 0.8101443648338318 0.5173802971839905 0.39259374141693115 0.9457398056983948 1 0.9771119952201843 0 0.0 0 0.0 0 0.0 0.0 0.6696534156799316 -0.16029703617095947 0.0 0.940275251865387 0.3403424024581909 0.3807303011417389 0.9247735738754272 1 0.9826752543449402 0 0.0 0 0.0 0 0.0 0.0 0.6520125865936279 -0.12054771184921265 0.0 0.8378856778144836 0.5458235144615173 0.38134899735450745 0.9473562836647034 1 0.9767983555793762 0 0.0 0 0.0 0 0.0 0.05297325551509857 0.6632869243621826 -0.17042005062103271 0.42271187901496887 0.8485671281814575 0.3181249499320984 0.40667101740837097 0.9228817820549011 1 0.9830220341682434 0 0.0 0 0.0 0 0.0 0.0 0.6859500408172607 -0.227411150932312 0.0 0.8990447521209717 0.4377880096435547 0.37864139676094055 0.8909733295440674 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 0.0 0.6696534156799316 -0.16029703617095947 0.0 0.940275251865387 0.3403424024581909 0.3807303011417389 0.9247735738754272 1 0.9826752543449402 0 0.0 0 0.0 0 0.0 0.0 0.6859500408172607 -0.227411150932312 0.0 0.8990447521209717 0.4377880096435547 0.37864139676094055 0.8909733295440674 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 0.037127718329429626 0.7183771133422852 -0.2708592414855957 0.12225715070962906 0.7812433242797852 0.6121097207069397 0.3978635370731354 0.8623329997062683 1 0.994321346282959 0 0.0 0 0.0 0 0.0 0.0 0.7286481857299805 -0.29208290576934814 0.0 0.8584246635437012 0.5129246115684509 0.3787182867527008 0.8497394323348999 1 0.9956300258636475 0 0.0 0 0.0 0 0.0 0.03514702618122101 0.6757450103759766 -0.23533987998962402 0.3003937005996704 0.825434148311615 0.4778893291950226 0.39532920718193054 0.891121506690979 1 0.9904599189758301 0 0.0 0 0.0 0 0.0 0.07448214292526245 0.6610023975372314 -0.22847318649291992 0.29837948083877563 0.8330942988395691 0.46571245789527893 0.41453418135643005 0.8990539312362671 1 0.9883980751037598 0 0.0 0 0.0 0 0.0 0.07567718625068665 0.6810379028320312 -0.25069737434387207 0.19437238574028015 0.6898708939552307 0.6973174214363098 0.41558343172073364 0.883171558380127 1 0.9912428259849548 0 0.0 0 0.0 0 0.0 0.037127718329429626 0.7183771133422852 -0.2708592414855957 0.12225715070962906 0.7812433242797852 0.6121097207069397 0.3978635370731354 0.8623329997062683 1 0.994321346282959 0 0.0 0 0.0 0 0.0 0.07567718625068665 0.6810379028320312 -0.25069737434387207 0.19437238574028015 0.6898708939552307 0.6973174214363098 0.41558343172073364 0.883171558380127 1 0.9912428259849548 0 0.0 0 0.0 0 0.0 0.11437469720840454 0.7034616470336914 -0.2846221923828125 0.12384410947561264 0.6982024312019348 0.7050996422767639 0.4353049099445343 0.8618066906929016 1 0.993859589099884 0 0.0 0 0.0 0 0.0 0.03217598795890808 0.5661249160766602 -0.10826873779296875 0.6189153790473938 -0.002288888208568096 0.7854243516921997 0.9652963876724243 0.03581248223781586 1 0.9586337804794312 0 0.010607149451971054 0 0.0 0 0.0 0.04406014084815979 0.5062999725341797 -0.1307528018951416 0.6033509373664856 -0.4283883273601532 0.6725974082946777 0.9375776648521423 0.05149134621024132 1 0.9310470223426819 0 0.05096268281340599 0 0.0 0 0.0 0.059905678033828735 0.5519924163818359 -0.12115323543548584 0.43357646465301514 -0.15253150463104248 0.8880886435508728 0.9615859389305115 0.05308860167860985 1 0.9548473358154297 0 0.015978146344423294 0 0.0 0 0.0 0.0 0.5866754055023193 -0.08073744177818298 0.0 0.20923489332199097 0.9778435826301575 0.9745243191719055 0.012592869810760021 1 0.9624937176704407 0 0.004993952810764313 0 0.0 0 0.0 0.03217598795890808 0.5661249160766602 -0.10826873779296875 0.6189153790473938 -0.002288888208568096 0.7854243516921997 0.9652963876724243 0.03581248223781586 1 0.9586337804794312 0 0.010607149451971054 0 0.0 0 0.0 0.019301511347293854 0.6020534038543701 -0.09771808981895447 0.5544602870941162 0.06466872245073318 0.8296762108802795 0.9800795912742615 0.024327803403139114 1 0.9663557410240173 0 0.0 0 0.0 0 0.0 0.0 0.6267490386962891 -0.09107580780982971 0.0 0.4541764557361603 0.8908963203430176 0.38086456060409546 0.9680102467536926 1 0.9708038568496704 0 0.0 0 0.0 0 0.0 0.023262888193130493 0.648740291595459 -0.1271979808807373 0.27558213472366333 0.8101443648338318 0.5173802971839905 0.39259374141693115 0.9457398056983948 1 0.9771119952201843 0 0.0 0 0.0 0 0.0 0.0 0.6520125865936279 -0.12054771184921265 0.0 0.8378856778144836 0.5458235144615173 0.38134899735450745 0.9473562836647034 1 0.9767983555793762 0 0.0 0 0.0 0 0.0 0.0 0.6267490386962891 -0.09107580780982971 0.0 0.4541764557361603 0.8908963203430176 0.9880750775337219 0.011592945083975792 1 0.9708038568496704 0 0.0 0 0.0 0 0.0 0.019301511347293854 0.6020534038543701 -0.09771808981895447 0.5544602870941162 0.06466872245073318 0.8296762108802795 0.9800795912742615 0.024327803403139114 1 0.9663557410240173 0 0.0 0 0.0 0 0.0 0.04604083299636841 0.629746675491333 -0.11427515745162964 0.5255287289619446 0.4360484480857849 0.730491042137146 0.9921565055847168 0.03848811611533165 1 0.9731448888778687 0 0.0 0 0.0 0 0.0 0.0 0.4937889575958252 -0.09715571999549866 0.0 -0.6279793977737427 0.7781914472579956 0.9327072501182556 0.023990735411643982 1 0.9297935366630554 0 0.05221788212656975 0 0.0 0 0.0 0.019301503896713257 0.5543453693389893 -0.08724924921989441 0.7199926972389221 0.03091524913907051 0.6932584643363953 0.963473379611969 0.025931738317012787 1 0.9544193148612976 0 0.017048027366399765 0 0.0 0 0.0 0.0 0.5465192794799805 -0.07160291075706482 0.0 -0.15399639308452606 0.9880367517471313 0.9606301188468933 0.013870302587747574 1 0.9529521465301514 0 0.019347991794347763 0 0.0 0 0.0 0.0 0.5866754055023193 -0.08073744177818298 0.0 0.20923489332199097 0.9778435826301575 0.9745243191719055 0.012592869810760021 1 0.9624937176704407 0 0.004993952810764313 0 0.0 0 0.0 0.0 0.5465192794799805 -0.07160291075706482 0.0 -0.15399639308452606 0.9880367517471313 0.9606301188468933 0.013870302587747574 1 0.9529521465301514 0 0.019347991794347763 0 0.0 0 0.0 0.019301503896713257 0.5543453693389893 -0.08724924921989441 0.7199926972389221 0.03091524913907051 0.6932584643363953 0.963473379611969 0.025931738317012787 1 0.9544193148612976 0 0.017048027366399765 0 0.0 0 0.0 0.0992489755153656 0.6243481636047363 -0.1760026216506958 0.6385387778282166 0.5357829332351685 0.5523850321769714 0.42691096663475037 0.9333289265632629 1 0.9787788391113281 0 0.0 0 0.0 0 0.0 0.07448214292526245 0.6610023975372314 -0.22847318649291992 0.29837948083877563 0.8330942988395691 0.46571245789527893 0.41453418135643005 0.8990539312362671 1 0.9883980751037598 0 0.0 0 0.0 0 0.0 0.05297325551509857 0.6632869243621826 -0.17042005062103271 0.42271187901496887 0.8485671281814575 0.3181249499320984 0.40667101740837097 0.9228817820549011 1 0.9830220341682434 0 0.0 0 0.0 0 0.0 0.04604083299636841 0.629746675491333 -0.11427515745162964 0.5255287289619446 0.4360484480857849 0.730491042137146 0.4033519923686981 0.9574975967407227 1 0.9731448888778687 0 0.0 0 0.0 0 0.0 0.05297325551509857 0.6632869243621826 -0.17042005062103271 0.42271187901496887 0.8485671281814575 0.3181249499320984 0.40667101740837097 0.9228817820549011 1 0.9830220341682434 0 0.0 0 0.0 0 0.0 0.023262888193130493 0.648740291595459 -0.1271979808807373 0.27558213472366333 0.8101443648338318 0.5173802971839905 0.39259374141693115 0.9457398056983948 1 0.9771119952201843 0 0.0 0 0.0 0 0.0 0.03217598795890808 0.5661249160766602 -0.10826873779296875 0.6189153790473938 -0.002288888208568096 0.7854243516921997 0.9652963876724243 0.03581248223781586 1 0.9586337804794312 0 0.010607149451971054 0 0.0 0 0.0 0.04604083299636841 0.629746675491333 -0.11427515745162964 0.5255287289619446 0.4360484480857849 0.730491042137146 0.9921565055847168 0.03848811611533165 1 0.9731448888778687 0 0.0 0 0.0 0 0.0 0.019301511347293854 0.6020534038543701 -0.09771808981895447 0.5544602870941162 0.06466872245073318 0.8296762108802795 0.9800795912742615 0.024327803403139114 1 0.9663557410240173 0 0.0 0 0.0 0 0.0 0.059905678033828735 0.5519924163818359 -0.12115323543548584 0.43357646465301514 -0.15253150463104248 0.8880886435508728 0.9615859389305115 0.05308860167860985 1 0.9548473358154297 0 0.015978146344423294 0 0.0 0 0.0 0.08664500713348389 0.49995994567871094 -0.15126699209213257 0.5456098914146423 -0.5877254605293274 0.5973693132400513 0.9379087686538696 0.07691145688295364 1 0.9312424063682556 0 0.048782166093587875 0 0.0 0 0.0 0.09060636162757874 0.555675745010376 -0.14083874225616455 0.6668904423713684 -0.021729178726673126 0.7448042035102844 0.9639025330543518 0.07183090597391129 1 0.9577164649963379 0 0.01108131930232048 0 0.0 0 0.0 0.04604083299636841 0.629746675491333 -0.11427515745162964 0.5255287289619446 0.4360484480857849 0.730491042137146 0.9921565055847168 0.03848811611533165 1 0.9731448888778687 0 0.0 0 0.0 0 0.0 0.09060636162757874 0.555675745010376 -0.14083874225616455 0.6668904423713684 -0.021729178726673126 0.7448042035102844 0.9639025330543518 0.07183090597391129 1 0.9577164649963379 0 0.01108131930232048 0 0.0 0 0.0 0.0992489755153656 0.6243481636047363 -0.1760026216506958 0.6385387778282166 0.5357829332351685 0.5523850321769714 0.9842876195907593 0.0781567320227623 1 0.9787788391113281 0 0.0 0 0.0 0 0.0 0.12900519371032715 0.580592155456543 -0.1809338927268982 0.7435224652290344 0.13650929927825928 0.6545915007591248 0.9710297584533691 0.09706727415323257 1 0.9719353318214417 0 0.0 0 0.0 0 0.0 0.08664500713348389 0.49995994567871094 -0.15126699209213257 0.5456098914146423 -0.5877254605293274 0.5973693132400513 0.9379087686538696 0.07691145688295364 1 0.9312424063682556 0 0.048782166093587875 0 0.0 0 0.0 0.15695953369140625 0.5213019847869873 -0.23152399063110352 0.7372050881385803 -0.5348063707351685 0.41285440325737 0.9393715262413025 0.12667523324489594 1 0.9635539650917053 0 0.0 0 0.0 0 0.0 0.17542767524719238 0.5399246215820312 -0.2481163740158081 0.886593222618103 -0.28980377316474915 0.36039307713508606 0.9461795687675476 0.1376567780971527 1 0.9722552299499512 0 0.0 0 0.0 0 0.0 0.12900519371032715 0.580592155456543 -0.1809338927268982 0.7435224652290344 0.13650929927825928 0.6545915007591248 0.9710297584533691 0.09706727415323257 1 0.9719353318214417 0 0.0 0 0.0 0 0.0 0.15695953369140625 0.5213019847869873 -0.23152399063110352 0.7372050881385803 -0.5348063707351685 0.41285440325737 0.9393715262413025 0.12667523324489594 1 0.9635539650917053 0 0.0 0 0.0 0 0.0 0.041914358735084534 0.7521989345550537 -0.3280456066131592 0.06817834824323654 0.921597957611084 0.3820917308330536 0.40006113052368164 0.8271682858467102 1 0.9970934987068176 0 0.0 0 0.0 0 0.0 0.0 0.7655167579650879 -0.3776092529296875 0.0 0.9911190867424011 0.13275551795959473 0.37730279564857483 0.8014988899230957 1 0.9984956979751587 0 0.0 0 0.0 0 0.0 0.0 0.7441883087158203 -0.3209085464477539 0.0 0.9060335159301758 0.42320016026496887 0.37848225235939026 0.8324812054634094 1 0.9969311356544495 0 0.0 0 0.0 0 0.0 0.0 0.7663571834564209 -0.4498615264892578 0.0 0.9117709994316101 -0.41062653064727783 0.3737609088420868 0.7704716324806213 1 0.9993343353271484 0 0.0 0 0.0 0 0.0 0.059245407581329346 0.759354829788208 -0.3721191883087158 0.1420636624097824 0.9840388298034668 0.10684530436992645 0.40722841024398804 0.8062321543693542 1 0.9981570839881897 0 0.0 0 0.0 0 0.0 0.07492586970329285 0.7546496391296387 -0.43943047523498535 -0.1832026094198227 0.964598536491394 -0.1896420121192932 0.4114780128002167 0.779198944568634 1 0.9989309310913086 0 0.0 0 0.0 0 0.0 0.0 0.7286481857299805 -0.29208290576934814 0.0 0.8584246635437012 0.5129246115684509 0.3787182867527008 0.8497394323348999 1 0.9956300258636475 0 0.0 0 0.0 0 0.0 0.041914358735084534 0.7521989345550537 -0.3280456066131592 0.06817834824323654 0.921597957611084 0.3820917308330536 0.40006113052368164 0.8271682858467102 1 0.9970934987068176 0 0.0 0 0.0 0 0.0 0.0 0.7441883087158203 -0.3209085464477539 0.0 0.9060335159301758 0.42320016026496887 0.37848225235939026 0.8324812054634094 1 0.9969311356544495 0 0.0 0 0.0 0 0.0 0.11437469720840454 0.7034616470336914 -0.2846221923828125 0.12384410947561264 0.6982024312019348 0.7050996422767639 0.4353049099445343 0.8618066906929016 1 0.993859589099884 0 0.0 0 0.0 0 0.0 0.041914358735084534 0.7521989345550537 -0.3280456066131592 0.06817834824323654 0.921597957611084 0.3820917308330536 0.40006113052368164 0.8271682858467102 1 0.9970934987068176 0 0.0 0 0.0 0 0.0 0.037127718329429626 0.7183771133422852 -0.2708592414855957 0.12225715070962906 0.7812433242797852 0.6121097207069397 0.3978635370731354 0.8623329997062683 1 0.994321346282959 0 0.0 0 0.0 0 0.0 0.12900519371032715 0.580592155456543 -0.1809338927268982 0.7435224652290344 0.13650929927825928 0.6545915007591248 0.4384097158908844 0.9454826712608337 1 0.9719353318214417 0 0.0 0 0.0 0 0.0 0.0992489755153656 0.6243481636047363 -0.1760026216506958 0.6385387778282166 0.5357829332351685 0.5523850321769714 0.42691096663475037 0.9333289265632629 1 0.9787788391113281 0 0.0 0 0.0 0 0.0 0.09060636162757874 0.555675745010376 -0.14083874225616455 0.6668904423713684 -0.021729178726673126 0.7448042035102844 0.4189552068710327 0.9702762365341187 1 0.9577164649963379 0 0.01108131930232048 0 0.0 0 0.0 0.18975555896759033 0.5741572380065918 -0.27861666679382324 0.9336222410202026 -0.14868617057800293 0.3259071707725525 0.9549236297607422 0.14849883317947388 1 0.983038604259491 0 0.0 0 0.0 0 0.0 0.1536492109298706 0.6081211566925049 -0.22929680347442627 0.7448957562446594 0.18478956818580627 0.6410412788391113 0.974439799785614 0.11739514768123627 1 0.9825928807258606 0 0.0 0 0.0 0 0.0 0.12900519371032715 0.580592155456543 -0.1809338927268982 0.7435224652290344 0.13650929927825928 0.6545915007591248 0.9710297584533691 0.09706727415323257 1 0.9719353318214417 0 0.0 0 0.0 0 0.0 0.16969645023345947 0.6551282405853271 -0.246321439743042 0.6105228066444397 0.38544878363609314 0.6918545961380005 0.9921565055847168 0.12496611475944519 1 0.9888418912887573 0 0.0 0 0.0 0 0.0 0.18975555896759033 0.5741572380065918 -0.27861666679382324 0.9336222410202026 -0.14868617057800293 0.3259071707725525 0.9549236297607422 0.14849883317947388 1 0.983038604259491 0 0.0 0 0.0 0 0.0 0.2143995761871338 0.6344926357269287 -0.3323737382888794 0.8702353239059448 -0.09164708107709885 0.4839930534362793 0.9702180027961731 0.1673179417848587 1 0.99260014295578 0 0.0 0 0.0 0 0.0 0.1668308973312378 0.6906447410583496 -0.2779656648635864 0.5177770256996155 0.6292916536331177 0.5795159935951233 0.8731365203857422 0.4358011484146118 1 0.9922325015068054 0 0.0 0 0.0 0 0.0 0.2143995761871338 0.6344926357269287 -0.3323737382888794 0.8702353239059448 -0.09164708107709885 0.4839930534362793 0.886073887348175 0.48145270347595215 1 0.99260014295578 0 0.0 0 0.0 0 0.0 0.17808693647384644 0.7106759548187256 -0.3287475109100342 0.5918454527854919 0.7044282555580139 0.39173558354377747 0.886073887348175 0.43914392590522766 1 0.9952844977378845 0 0.0 0 0.0 0 0.0 0.12691903114318848 0.7287836074829102 -0.3071833848953247 0.20764793455600739 0.8145695328712463 0.5415814518928528 0.4425181448459625 0.8441644906997681 1 0.9954813718795776 0 0.0 0 0.0 0 0.0 0.1668308973312378 0.6906447410583496 -0.2779656648635864 0.5177770256996155 0.6292916536331177 0.5795159935951233 0.46132102608680725 0.8691244125366211 1 0.9922325015068054 0 0.0 0 0.0 0 0.0 0.17808693647384644 0.7106759548187256 -0.3287475109100342 0.5918454527854919 0.7044282555580139 0.39173558354377747 0.46606069803237915 0.8411576151847839 1 0.9952844977378845 0 0.0 0 0.0 0 0.0 0.12389302253723145 0.6452987194061279 -0.2239953875541687 0.3717764914035797 0.6311227679252625 0.6807458996772766 0.4386693835258484 0.9063490033149719 1 0.9863564372062683 0 0.0 0 0.0 0 0.0 0.1536492109298706 0.6081211566925049 -0.22929680347442627 0.7448957562446594 0.18478956818580627 0.6410412788391113 0.450658917427063 0.9162338972091675 1 0.9825928807258606 0 0.0 0 0.0 0 0.0 0.16969645023345947 0.6551282405853271 -0.246321439743042 0.6105228066444397 0.38544878363609314 0.6918545961380005 0.4616085886955261 0.8940138816833496 1 0.9888418912887573 0 0.0 0 0.0 0 0.0 0.059245407581329346 0.759354829788208 -0.3721191883087158 0.1420636624097824 0.9840388298034668 0.10684530436992645 0.40722841024398804 0.8062321543693542 1 0.9981570839881897 0 0.0 0 0.0 0 0.0 0.12691903114318848 0.7287836074829102 -0.3071833848953247 0.20764793455600739 0.8145695328712463 0.5415814518928528 0.4425181448459625 0.8441644906997681 1 0.9954813718795776 0 0.0 0 0.0 0 0.0 0.13420909643173218 0.7470312118530273 -0.36113905906677246 0.2852870225906372 0.9150669574737549 0.2850123643875122 0.44494444131851196 0.8153911232948303 1 0.9972447752952576 0 0.0 0 0.0 0 0.0 0.12691903114318848 0.7287836074829102 -0.3071833848953247 0.20764793455600739 0.8145695328712463 0.5415814518928528 0.4425181448459625 0.8441644906997681 1 0.9954813718795776 0 0.0 0 0.0 0 0.0 0.17808693647384644 0.7106759548187256 -0.3287475109100342 0.5918454527854919 0.7044282555580139 0.39173558354377747 0.46606069803237915 0.8411576151847839 1 0.9952844977378845 0 0.0 0 0.0 0 0.0 0.13420909643173218 0.7470312118530273 -0.36113905906677246 0.2852870225906372 0.9150669574737549 0.2850123643875122 0.44494444131851196 0.8153911232948303 1 0.9972447752952576 0 0.0 0 0.0 0 0.0 0.07492586970329285 0.7546496391296387 -0.43943047523498535 -0.1832026094198227 0.964598536491394 -0.1896420121192932 0.4114780128002167 0.779198944568634 1 0.9989309310913086 0 0.0 0 0.0 0 0.0 0.059245407581329346 0.759354829788208 -0.3721191883087158 0.1420636624097824 0.9840388298034668 0.10684530436992645 0.40722841024398804 0.8062321543693542 1 0.9981570839881897 0 0.0 0 0.0 0 0.0 0.13420909643173218 0.7470312118530273 -0.36113905906677246 0.2852870225906372 0.9150669574737549 0.2850123643875122 0.44494444131851196 0.8153911232948303 1 0.9972447752952576 0 0.0 0 0.0 0 0.0 0.07492586970329285 0.7546496391296387 -0.43943047523498535 -0.1832026094198227 0.964598536491394 -0.1896420121192932 0.4114780128002167 0.779198944568634 1 0.9989309310913086 0 0.0 0 0.0 0 0.0 0.15930330753326416 0.8070216178894043 -0.5146346092224121 0.2629169523715973 0.6476333141326904 0.7151402235031128 0.4546871483325958 0.7309730052947998 1 0.9980078935623169 0 0.0 0 0.0 0 0.0 0.12602776288986206 0.8367936611175537 -0.5169486999511719 -0.5360575914382935 0.844019889831543 0.014984588138759136 0.4399544298648834 0.7201979756355286 1 0.9980970025062561 0 0.0 0 0.0 0 0.0 0.2714434862136841 0.6815202236175537 -0.37427401542663574 0.8992888927459717 0.2068544626235962 0.38532671332359314 0.5090063214302063 0.8317936658859253 1 0.9954957962036133 0 0.0 0 0.0 0 0.0 0.17808693647384644 0.7106759548187256 -0.3287475109100342 0.5918454527854919 0.7044282555580139 0.39173558354377747 0.46606069803237915 0.8411576151847839 1 0.9952844977378845 0 0.0 0 0.0 0 0.0 0.2143995761871338 0.6344926357269287 -0.3323737382888794 0.8702353239059448 -0.09164708107709885 0.4839930534362793 0.4784485101699829 0.8643201589584351 1 0.99260014295578 0 0.0 0 0.0 0 0.0 0.3023422956466675 0.7849597930908203 -0.4707658290863037 0.809015154838562 0.40089112520217896 0.4297921657562256 0.527910053730011 0.7577385902404785 1 0.9974520802497864 0 0.0 0 0.0 0 0.0 0.23513078689575195 0.6938152313232422 -0.4137706756591797 0.09668263792991638 0.8894924521446228 0.4465163052082062 0.48952001333236694 0.8107777237892151 1 0.9962446093559265 0 0.0 0 0.0 0 0.0 0.2714434862136841 0.6815202236175537 -0.37427401542663574 0.8992888927459717 0.2068544626235962 0.38532671332359314 0.5090063214302063 0.8317936658859253 1 0.9954957962036133 0 0.0 0 0.0 0 0.0 0.13420909643173218 0.7470312118530273 -0.36113905906677246 0.2852870225906372 0.9150669574737549 0.2850123643875122 0.44494444131851196 0.8153911232948303 1 0.9972447752952576 0 0.0 0 0.0 0 0.0 0.23513078689575195 0.6938152313232422 -0.4137706756591797 0.09668263792991638 0.8894924521446228 0.4465163052082062 0.48952001333236694 0.8107777237892151 1 0.9962446093559265 0 0.0 0 0.0 0 0.0 0.19472473859786987 0.7452795505523682 -0.4596238136291504 0.36835840344429016 0.7375103235244751 0.5659962892532349 0.47066688537597656 0.7744562029838562 1 0.9974828362464905 0 0.0 0 0.0 0 0.0 0.2505803108215332 0.7695996761322021 -0.48949456214904785 -0.1833857297897339 0.7009491324424744 0.6891995072364807 0.4994630813598633 0.7543298602104187 1 0.9975677132606506 0 0.0 0 0.0 0 0.0 0.19472473859786987 0.7452795505523682 -0.4596238136291504 0.36835840344429016 0.7375103235244751 0.5659962892532349 0.47066688537597656 0.7744562029838562 1 0.9974828362464905 0 0.0 0 0.0 0 0.0 0.23513078689575195 0.6938152313232422 -0.4137706756591797 0.09668263792991638 0.8894924521446228 0.4465163052082062 0.48952001333236694 0.8107777237892151 1 0.9962446093559265 0 0.0 0 0.0 0 0.0 0.15930330753326416 0.8070216178894043 -0.5146346092224121 0.2629169523715973 0.6476333141326904 0.7151402235031128 0.4546871483325958 0.7309730052947998 1 0.9980078935623169 0 0.0 0 0.0 0 0.0 0.19472473859786987 0.7452795505523682 -0.4596238136291504 0.36835840344429016 0.7375103235244751 0.5659962892532349 0.47066688537597656 0.7744562029838562 1 0.9974828362464905 0 0.0 0 0.0 0 0.0 0.19472473859786987 0.7745609283447266 -0.48571276664733887 0.06698812544345856 0.6877346038818359 0.7228308916091919 0.47163125872612 0.7539528608322144 1 0.9977135062217712 0 0.0 0 0.0 0 0.0 0.15930330753326416 0.8070216178894043 -0.5146346092224121 0.2629169523715973 0.6476333141326904 0.7151402235031128 0.4546871483325958 0.7309730052947998 1 0.9980078935623169 0 0.0 0 0.0 0 0.0 0.2505803108215332 0.7695996761322021 -0.48949456214904785 -0.1833857297897339 0.7009491324424744 0.6891995072364807 0.4994630813598633 0.7543298602104187 1 0.9975677132606506 0 0.0 0 0.0 0 0.0 0.2460576295852661 0.8691680431365967 -0.5895872116088867 -0.0476393923163414 0.5283669829368591 0.8476516008377075 0.49987420439720154 0.6797340512275696 1 0.997829020023346 0 0.0 0 0.0 0 0.0 0.2505803108215332 0.7695996761322021 -0.48949456214904785 -0.1833857297897339 0.7009491324424744 0.6891995072364807 0.4994630813598633 0.7543298602104187 1 0.9975677132606506 0 0.0 0 0.0 0 0.0 0.29834794998168945 0.8586046695709229 -0.544276237487793 0.7876216769218445 0.5459151268005371 0.2855921983718872 0.527910053730011 0.7027824521064758 1 0.9977295398712158 0 0.0 0 0.0 0 0.0 0.2460576295852661 0.8691680431365967 -0.5895872116088867 -0.0476393923163414 0.5283669829368591 0.8476516008377075 0.49987420439720154 0.6797340512275696 1 0.997829020023346 0 0.0 0 0.0 0 0.0 0.2947826385498047 0.9091815948486328 -0.5893387794494629 0.82534259557724 0.5525681376457214 0.11593981832265854 0.5277626514434814 0.6673424243927002 1 0.9977980256080627 0 0.0 0 0.0 0 0.0 0.2460576295852661 0.8691680431365967 -0.5895872116088867 -0.0476393923163414 0.5283669829368591 0.8476516008377075 0.49987420439720154 0.6797340512275696 1 0.997829020023346 0 0.0 0 0.0 0 0.0 0.29834794998168945 0.8586046695709229 -0.544276237487793 0.7876216769218445 0.5459151268005371 0.2855921983718872 0.527910053730011 0.7027824521064758 1 0.9977295398712158 0 0.0 0 0.0 0 0.0 0.2638838291168213 0.9322519302368164 -0.609893798828125 0.14166691899299622 0.9372844696044922 -0.3183690905570984 0.5128092169761658 0.650969922542572 1 0.9978194236755371 0 0.0 0 0.0 0 0.0 0.20446312427520752 0.9136180877685547 -0.5932917594909668 -0.4698324501514435 0.8652912974357605 -0.1745048314332962 0.48197782039642334 0.6635977029800415 1 0.9978598952293396 0 0.0 0 0.0 0 0.0 0.2460576295852661 0.8691680431365967 -0.5895872116088867 -0.0476393923163414 0.5283669829368591 0.8476516008377075 0.49987420439720154 0.6797340512275696 1 0.997829020023346 0 0.0 0 0.0 0 0.0 0.15930330753326416 0.8070216178894043 -0.5146346092224121 0.2629169523715973 0.6476333141326904 0.7151402235031128 0.4546871483325958 0.7309730052947998 1 0.9980078935623169 0 0.0 0 0.0 0 0.0 0.20446312427520752 0.9136180877685547 -0.5932917594909668 -0.4698324501514435 0.8652912974357605 -0.1745048314332962 0.48197782039642334 0.6635977029800415 1 0.9978598952293396 0 0.0 0 0.0 0 0.0 0.12602776288986206 0.8367936611175537 -0.5169486999511719 -0.5360575914382935 0.844019889831543 0.014984588138759136 0.4399544298648834 0.7201979756355286 1 0.9980970025062561 0 0.0 0 0.0 0 0.0 0.12602776288986206 0.8367936611175537 -0.5169486999511719 -0.5360575914382935 0.844019889831543 0.014984588138759136 0.9544497728347778 0.7932650446891785 1 0.9980970025062561 0 0.0 0 0.0 0 0.0 0.08317875862121582 0.7046983242034912 -0.4855692386627197 -0.20276497304439545 0.3567918837070465 -0.9118930697441101 0.9190778136253357 0.8595334887504578 1 0.9991380572319031 0 0.0 0 0.0 0 0.0 0.07492586970329285 0.7546496391296387 -0.43943047523498535 -0.1832026094198227 0.964598536491394 -0.1896420121192932 0.9544497132301331 0.8589244484901428 1 0.9989309310913086 0 0.0 0 0.0 0 0.0 0.08664500713348389 0.49995994567871094 -0.15126699209213257 0.5456098914146423 -0.5877254605293274 0.5973693132400513 0.9379087686538696 0.07691145688295364 1 0.9312424063682556 0 0.048782166093587875 0 0.0 0 0.0 0.04406014084815979 0.47633934020996094 -0.1643797755241394 0.4945219159126282 -0.7363200783729553 0.4617755711078644 0.9167872667312622 0.06153831630945206 1 0.8978144526481628 0 0.0762820616364479 0 0.0 0 0.0 0.07519534230232239 0.4880945682525635 -0.17792588472366333 0.4931180775165558 -0.8037965297698975 0.3327127993106842 0.9240359663963318 0.07843738049268723 1 0.9170035123825073 0 0.058905184268951416 0 0.0 0 0.0 0.18975555896759033 0.5741572380065918 -0.27861666679382324 0.9336222410202026 -0.14868617057800293 0.3259071707725525 0.9549236297607422 0.14849883317947388 1 0.983038604259491 0 0.0 0 0.0 0 0.0 0.1636601686477661 0.5023448467254639 -0.3202894926071167 0.8532670140266418 -0.49674978852272034 0.158513143658638 0.9101097583770752 0.15139897167682648 1 0.975587785243988 0 0.0 0 0.0 0 0.0 0.18907427787780762 0.5321424007415771 -0.3633767366409302 0.8845484852790833 -0.4600665271282196 0.07654042541980743 0.9159454703330994 0.17071913182735443 1 0.9870381951332092 0 0.0 0 0.0 0 0.0 0.04406014084815979 0.5062999725341797 -0.1307528018951416 0.6033509373664856 -0.4283883273601532 0.6725974082946777 0.9375776648521423 0.05149134621024132 1 0.9310470223426819 0 0.05096268281340599 0 0.0 0 0.0 0.03183332085609436 0.4725472927093506 -0.1536623239517212 0.4668111205101013 -0.7400128245353699 0.4841761589050293 0.9156655073165894 0.053619880229234695 1 0.8963752388954163 0 0.07782471179962158 0 0.0 0 0.0 0.04406014084815979 0.47633934020996094 -0.1643797755241394 0.4945219159126282 -0.7363200783729553 0.4617755711078644 0.9167872667312622 0.06153831630945206 1 0.8978144526481628 0 0.0762820616364479 0 0.0 0 0.0 0.20446312427520752 0.9136180877685547 -0.5932917594909668 -0.4698324501514435 0.8652912974357605 -0.1745048314332962 0.9505891799926758 0.7223089933395386 1 0.9978598952293396 0 0.0 0 0.0 0 0.0 0.1937013864517212 0.7858362197875977 -0.5540850162506104 -0.2551347315311432 -0.29074984788894653 -0.922116756439209 0.9168798327445984 0.7807419896125793 1 0.997936487197876 0 0.0 0 0.0 0 0.0 0.12602776288986206 0.8367936611175537 -0.5169486999511719 -0.5360575914382935 0.844019889831543 0.014984588138759136 0.9544497728347778 0.7932650446891785 1 0.9980970025062561 0 0.0 0 0.0 0 0.0 0.07492586970329285 0.7546496391296387 -0.43943047523498535 -0.1832026094198227 0.964598536491394 -0.1896420121192932 0.9763534069061279 0.9473682045936584 1 0.9989309310913086 0 0.0 0 0.0 0 0.0 0.0 0.717432975769043 -0.496915340423584 0.0 0.5661183595657349 -0.8242744207382202 0.9412925839424133 0.9857740998268127 1 0.9996612071990967 0 0.0 0 0.0 0 0.0 0.0 0.7663571834564209 -0.4498615264892578 0.0 0.9117709994316101 -0.41062653064727783 0.9763534069061279 0.9866212010383606 1 0.9993343353271484 0 0.0 0 0.0 0 0.0 0.17542767524719238 0.5399246215820312 -0.2481163740158081 0.886593222618103 -0.28980377316474915 0.36039307713508606 0.9461795687675476 0.1376567780971527 1 0.9722552299499512 0 0.0 0 0.0 0 0.0 0.1420363187789917 0.49902892112731934 -0.265682578086853 0.7232886552810669 -0.6007568836212158 0.3404339849948883 0.9186869263648987 0.12909665703773499 1 0.9554049968719482 0 0.009283550083637238 0 0.0 0 0.0 0.1636601686477661 0.5023448467254639 -0.3202894926071167 0.8532670140266418 -0.49674978852272034 0.158513143658638 0.9101097583770752 0.15139897167682648 1 0.975587785243988 0 0.0 0 0.0 0 0.0 0.20446312427520752 0.9136180877685547 -0.5932917594909668 -0.4698324501514435 0.8652912974357605 -0.1745048314332962 0.9505891799926758 0.7223089933395386 1 0.9978598952293396 0 0.0 0 0.0 0 0.0 0.2638838291168213 0.9322519302368164 -0.609893798828125 0.14166691899299622 0.9372844696044922 -0.3183690905570984 0.946968138217926 0.6946501135826111 1 0.9978194236755371 0 0.0 0 0.0 0 0.0 0.25437653064727783 0.8707180023193359 -0.6044466495513916 0.1664784699678421 -0.32941678166389465 -0.9293801784515381 0.9264681935310364 0.7198551297187805 1 0.9978157877922058 0 0.0 0 0.0 0 0.0 0.2143995761871338 0.6344926357269287 -0.3323737382888794 0.8702353239059448 -0.09164708107709885 0.4839930534362793 0.9702180027961731 0.1673179417848587 1 0.99260014295578 0 0.0 0 0.0 0 0.0 0.18907427787780762 0.5321424007415771 -0.3633767366409302 0.8845484852790833 -0.4600665271282196 0.07654042541980743 0.9159454703330994 0.17071913182735443 1 0.9870381951332092 0 0.0 0 0.0 0 0.0 0.215201735496521 0.579124927520752 -0.41087865829467773 0.8949857950210571 -0.44148075580596924 -0.0636310949921608 0.9277340769767761 0.18994596600532532 1 0.9931851625442505 0 0.0 0 0.0 0 0.0 0.2714434862136841 0.6815202236175537 -0.37427401542663574 0.8992888927459717 0.2068544626235962 0.38532671332359314 0.12856031954288483 0.23758146166801453 1 0.9954957962036133 0 0.0 0 0.0 0 0.0 0.215201735496521 0.579124927520752 -0.41087865829467773 0.8949857950210571 -0.44148075580596924 -0.0636310949921608 0.175100177526474 0.25710052251815796 1 0.9931851625442505 0 0.0 0 0.0 0 0.0 0.2332911491394043 0.6557881832122803 -0.45631957054138184 0.826288640499115 -0.40223395824432373 -0.39423811435699463 0.15952694416046143 0.21251626312732697 1 0.9963886141777039 0 0.0 0 0.0 0 0.0 0.2638838291168213 0.9322519302368164 -0.609893798828125 0.14166691899299622 0.9372844696044922 -0.3183690905570984 0.11900205165147781 0.05518902838230133 1 0.9978194236755371 0 0.0 0 0.0 0 0.0 0.2947826385498047 0.9091815948486328 -0.5893387794494629 0.82534259557724 0.5525681376457214 0.11593981832265854 0.1054219976067543 0.07213792949914932 1 0.9977980256080627 0 0.0 0 0.0 0 0.0 0.25437653064727783 0.8707180023193359 -0.6044466495513916 0.1664784699678421 -0.32941678166389465 -0.9293801784515381 0.1323527842760086 0.07852371037006378 1 0.9978157877922058 0 0.0 0 0.0 0 0.0 0.3023422956466675 0.7849597930908203 -0.4707658290863037 0.809015154838562 0.40089112520217896 0.4297921657562256 0.10812272131443024 0.16332419216632843 1 0.9974520802497864 0 0.0 0 0.0 0 0.0 0.2332911491394043 0.6557881832122803 -0.45631957054138184 0.826288640499115 -0.40223395824432373 -0.39423811435699463 0.15952694416046143 0.21251626312732697 1 0.9963886141777039 0 0.0 0 0.0 0 0.0 0.23466861248016357 0.7335350513458252 -0.5268294811248779 0.5275429487228394 -0.4376964569091797 -0.7280495762825012 0.15449798107147217 0.1570688784122467 1 0.9977160096168518 0 0.0 0 0.0 0 0.0 0.29834794998168945 0.8586046695709229 -0.544276237487793 0.7876216769218445 0.5459151268005371 0.2855921983718872 0.10662513971328735 0.10797388106584549 1 0.9977295398712158 0 0.0 0 0.0 0 0.0 0.25437653064727783 0.8707180023193359 -0.6044466495513916 0.1664784699678421 -0.32941678166389465 -0.9293801784515381 0.1323527842760086 0.07852371037006378 1 0.9978157877922058 0 0.0 0 0.0 0 0.0 0.2947826385498047 0.9091815948486328 -0.5893387794494629 0.82534259557724 0.5525681376457214 0.11593981832265854 0.1054219976067543 0.07213792949914932 1 0.9977980256080627 0 0.0 0 0.0 0 0.0 0.15695953369140625 0.5213019847869873 -0.23152399063110352 0.7372050881385803 -0.5348063707351685 0.41285440325737 0.9393715262413025 0.12667523324489594 1 0.9635539650917053 0 0.0 0 0.0 0 0.0 0.07519534230232239 0.4880945682525635 -0.17792588472366333 0.4931180775165558 -0.8037965297698975 0.3327127993106842 0.9240359663963318 0.07843738049268723 1 0.9170035123825073 0 0.058905184268951416 0 0.0 0 0.0 0.1420363187789917 0.49902892112731934 -0.265682578086853 0.7232886552810669 -0.6007568836212158 0.3404339849948883 0.9186869263648987 0.12909665703773499 1 0.9554049968719482 0 0.009283550083637238 0 0.0 0 0.0 0.3023422956466675 0.7849597930908203 -0.4707658290863037 0.809015154838562 0.40089112520217896 0.4297921657562256 0.10812272131443024 0.16332419216632843 1 0.9974520802497864 0 0.0 0 0.0 0 0.0 0.2595592737197876 0.8025784492492676 -0.5593953132629395 0.48774680495262146 -0.4980620741844177 -0.7169408202171326 0.13544107973575592 0.12047519534826279 1 0.9977782964706421 0 0.0 0 0.0 0 0.0 0.29834794998168945 0.8586046695709229 -0.544276237487793 0.7876216769218445 0.5459151268005371 0.2855921983718872 0.10662513971328735 0.10797388106584549 1 0.9977295398712158 0 0.0 0 0.0 0 0.0 0.08317875862121582 0.7046983242034912 -0.4855692386627197 -0.20276497304439545 0.3567918837070465 -0.9118930697441101 0.9413006901741028 0.9422845840454102 1 0.9991380572319031 0 0.0 0 0.0 0 0.0 0.0 0.6219885349273682 -0.5401461124420166 0.0 0.21689504384994507 -0.9761650562286377 0.8908731341362 0.9758754968643188 1 0.9991644024848938 0 0.0 0 0.0 0 0.0 0.0 0.717432975769043 -0.496915340423584 0.0 0.5661183595657349 -0.8242744207382202 0.9412925839424133 0.9857740998268127 1 0.9996612071990967 0 0.0 0 0.0 0 0.0 0.08317875862121582 0.5977051258087158 -0.5351896286010742 0.13367107510566711 0.040162358433008194 -0.9902035593986511 0.24910669028759003 0.1976434588432312 1 0.9983817934989929 0 0.0 0 0.0 0 0.0 0.0 0.4954061508178711 -0.5303821563720703 0.0 -0.39960935711860657 -0.9166539311408997 0.30426859855651855 0.2333311140537262 1 0.9962685704231262 0 0.0 0 0.0 0 0.0 0.0 0.6219885349273682 -0.5401461124420166 0.0 0.21689504384994507 -0.9761650562286377 0.2860924005508423 0.18550969660282135 1 0.9991644024848938 0 0.0 0 0.0 0 0.0 0.07982555031776428 0.4681966304779053 -0.49700307846069336 0.32801294326782227 -0.6124454736709595 -0.7191991806030273 0.26634955406188965 0.25791066884994507 1 0.9938180446624756 0 0.0 0 0.0 0 0.0 0.0 0.39038944244384766 -0.43143999576568604 0.0 -0.7942442297935486 -0.6075929999351501 0.30977341532707214 0.30976250767707825 1 0.9789760708808899 0 0.0 0 0.0 0 0.0 0.0 0.4954061508178711 -0.5303821563720703 0.0 -0.39960935711860657 -0.9166539311408997 0.30426859855651855 0.2333311140537262 1 0.9962685704231262 0 0.0 0 0.0 0 0.0 0.02722427248954773 0.4976499080657959 -0.1062207818031311 0.5827203989028931 -0.48753318190574646 0.6501358151435852 0.9371650218963623 0.03867452219128609 1 0.9274529814720154 0 0.053911928087472916 0 0.0 0 0.0 0.0 0.46508145332336426 -0.15146160125732422 0.0 -0.8492690920829773 0.5279091596603394 0.9070941805839539 0.03858356922864914 1 0.8848198652267456 0 0.08769097924232483 0 0.0 0 0.0 0.03183332085609436 0.4725472927093506 -0.1536623239517212 0.4668111205101013 -0.7400128245353699 0.4841761589050293 0.9156655073165894 0.053619880229234695 1 0.8963752388954163 0 0.07782471179962158 0 0.0 0 0.0 0.07171991467475891 0.41830766201019287 -0.40954136848449707 0.5254982113838196 -0.7786187529563904 -0.3428449332714081 0.2686126232147217 0.31042376160621643 1 0.9810636043548584 0 0.0 0 0.0 0 0.0 0.0 0.33551084995269775 -0.3629721403121948 0.0 -0.7144383192062378 -0.6996673345565796 0.31088313460350037 0.35648632049560547 1 0.9168000221252441 0 0.07637535780668259 0 0.0 0 0.0 0.0 0.39038944244384766 -0.43143999576568604 0.0 -0.7942442297935486 -0.6075929999351501 0.30977341532707214 0.30976250767707825 1 0.9789760708808899 0 0.0 0 0.0 0 0.0 0.1937013864517212 0.7858362197875977 -0.5540850162506104 -0.2551347315311432 -0.29074984788894653 -0.922116756439209 0.16920901834964752 0.12707068026065826 1 0.997936487197876 0 0.0 0 0.0 0 0.0 0.2595592737197876 0.8025784492492676 -0.5593953132629395 0.48774680495262146 -0.4980620741844177 -0.7169408202171326 0.13544107973575592 0.12047519534826279 1 0.9977782964706421 0 0.0 0 0.0 0 0.0 0.23466861248016357 0.7335350513458252 -0.5268294811248779 0.5275429487228394 -0.4376964569091797 -0.7280495762825012 0.15449798107147217 0.1570688784122467 1 0.9977160096168518 0 0.0 0 0.0 0 0.0 0.1876540184020996 0.6596939563751221 -0.5185306072235107 0.33820611238479614 -0.1976683884859085 -0.9200415015220642 0.18751898407936096 0.18505068123340607 1 0.9977463483810425 0 0.0 0 0.0 0 0.0 0.23466861248016357 0.7335350513458252 -0.5268294811248779 0.5275429487228394 -0.4376964569091797 -0.7280495762825012 0.15449798107147217 0.1570688784122467 1 0.9977160096168518 0 0.0 0 0.0 0 0.0 0.2332911491394043 0.6557881832122803 -0.45631957054138184 0.826288640499115 -0.40223395824432373 -0.39423811435699463 0.15952694416046143 0.21251626312732697 1 0.9963886141777039 0 0.0 0 0.0 0 0.0 0.1937013864517212 0.7858362197875977 -0.5540850162506104 -0.2551347315311432 -0.29074984788894653 -0.922116756439209 0.9168798327445984 0.7807419896125793 1 0.997936487197876 0 0.0 0 0.0 0 0.0 0.1876540184020996 0.6596939563751221 -0.5185306072235107 0.33820611238479614 -0.1976683884859085 -0.9200415015220642 0.8821396827697754 0.8362104296684265 1 0.9977463483810425 0 0.0 0 0.0 0 0.0 0.08317875862121582 0.7046983242034912 -0.4855692386627197 -0.20276497304439545 0.3567918837070465 -0.9118930697441101 0.9190778136253357 0.8595334887504578 1 0.9991380572319031 0 0.0 0 0.0 0 0.0 0.08317875862121582 0.5977051258087158 -0.5351896286010742 0.13367107510566711 0.040162358433008194 -0.9902035593986511 0.8843513131141663 0.9313850402832031 1 0.9983817934989929 0 0.0 0 0.0 0 0.0 0.1876540184020996 0.6596939563751221 -0.5185306072235107 0.33820611238479614 -0.1976683884859085 -0.9200415015220642 0.9133719205856323 0.8904370665550232 1 0.9977463483810425 0 0.0 0 0.0 0 0.0 0.17545980215072632 0.5656907558441162 -0.5075685977935791 0.6020996570587158 -0.3631092309951782 -0.7110202312469482 0.8834765553474426 0.8773533701896667 1 0.9963264465332031 0 0.0 0 0.0 0 0.0 0.17545980215072632 0.5656907558441162 -0.5075685977935791 0.6020996570587158 -0.3631092309951782 -0.7110202312469482 0.20651164650917053 0.22181473672389984 1 0.9963264465332031 0 0.0 0 0.0 0 0.0 0.2332911491394043 0.6557881832122803 -0.45631957054138184 0.826288640499115 -0.40223395824432373 -0.39423811435699463 0.15952694416046143 0.21251626312732697 1 0.9963886141777039 0 0.0 0 0.0 0 0.0 0.215201735496521 0.579124927520752 -0.41087865829467773 0.8949857950210571 -0.44148075580596924 -0.0636310949921608 0.175100177526474 0.25710052251815796 1 0.9931851625442505 0 0.0 0 0.0 0 0.0 0.07982555031776428 0.4681966304779053 -0.49700307846069336 0.32801294326782227 -0.6124454736709595 -0.7191991806030273 0.26634955406188965 0.25791066884994507 1 0.9938180446624756 0 0.0 0 0.0 0 0.0 0.17545980215072632 0.5656907558441162 -0.5075685977935791 0.6020996570587158 -0.3631092309951782 -0.7110202312469482 0.20651164650917053 0.22181473672389984 1 0.9963264465332031 0 0.0 0 0.0 0 0.0 0.14730453491210938 0.4809708595275879 -0.4494520425796509 0.6751915216445923 -0.6570024490356445 -0.335245817899704 0.2268296331167221 0.27411285042762756 1 0.9907476305961609 0 0.0 0 0.0 0 0.0 0.14730453491210938 0.4809708595275879 -0.4494520425796509 0.6751915216445923 -0.6570024490356445 -0.335245817899704 0.2268296331167221 0.27411285042762756 1 0.9907476305961609 0 0.0 0 0.0 0 0.0 0.215201735496521 0.579124927520752 -0.41087865829467773 0.8949857950210571 -0.44148075580596924 -0.0636310949921608 0.175100177526474 0.25710052251815796 1 0.9931851625442505 0 0.0 0 0.0 0 0.0 0.18907427787780762 0.5321424007415771 -0.3633767366409302 0.8845484852790833 -0.4600665271282196 0.07654042541980743 0.18983252346515656 0.29206639528274536 1 0.9870381951332092 0 0.0 0 0.0 0 0.0 0.07171991467475891 0.41830766201019287 -0.40954136848449707 0.5254982113838196 -0.7786187529563904 -0.3428449332714081 0.2686126232147217 0.31042376160621643 1 0.9810636043548584 0 0.0 0 0.0 0 0.0 0.14730453491210938 0.4809708595275879 -0.4494520425796509 0.6751915216445923 -0.6570024490356445 -0.335245817899704 0.2268296331167221 0.27411285042762756 1 0.9907476305961609 0 0.0 0 0.0 0 0.0 0.13163155317306519 0.4475557804107666 -0.36023998260498047 0.730246901512146 -0.6739402413368225 -0.11188085377216339 0.23006127774715424 0.3214690387248993 1 0.9729717969894409 0 0.0 0 0.0 0 0.0 0.13163155317306519 0.4475557804107666 -0.36023998260498047 0.730246901512146 -0.6739402413368225 -0.11188085377216339 0.23006127774715424 0.3214690387248993 1 0.9729717969894409 0 0.0 0 0.0 0 0.0 0.18907427787780762 0.5321424007415771 -0.3633767366409302 0.8845484852790833 -0.4600665271282196 0.07654042541980743 0.18983252346515656 0.29206639528274536 1 0.9870381951332092 0 0.0 0 0.0 0 0.0 0.1636601686477661 0.5023448467254639 -0.3202894926071167 0.8532670140266418 -0.49674978852272034 0.158513143658638 0.20207861065864563 0.31930482387542725 1 0.975587785243988 0 0.0 0 0.0 0 0.0 0.11474817991256714 0.41678154468536377 -0.2910900115966797 0.9263588190078735 -0.37650686502456665 0.005249183624982834 0.8736137747764587 0.12863701581954956 1 0.9101746082305908 0 0.05719852074980736 3 0.011641807854175568 0 0.0 0.1636601686477661 0.5023448467254639 -0.3202894926071167 0.8532670140266418 -0.49674978852272034 0.158513143658638 0.9101097583770752 0.15139897167682648 1 0.975587785243988 0 0.0 0 0.0 0 0.0 0.1420363187789917 0.49902892112731934 -0.265682578086853 0.7232886552810669 -0.6007568836212158 0.3404339849948883 0.9186869263648987 0.12909665703773499 1 0.9554049968719482 0 0.009283550083637238 0 0.0 0 0.0 0.07230684161186218 0.39586949348449707 -0.33485913276672363 0.6780602335929871 -0.6097903251647949 -0.41029083728790283 0.26386216282844543 0.34843114018440247 1 0.9468240141868591 0 0.03911536559462547 0 0.0 0 0.0 0.13163155317306519 0.4475557804107666 -0.36023998260498047 0.730246901512146 -0.6739402413368225 -0.11188085377216339 0.23006127774715424 0.3214690387248993 1 0.9729717969894409 0 0.0 0 0.0 0 0.0 0.11474817991256714 0.41678154468536377 -0.2910900115966797 0.9263588190078735 -0.37650686502456665 0.005249183624982834 0.23559102416038513 0.359767347574234 1 0.9101746082305908 0 0.05719852074980736 3 0.011641807854175568 0 0.0 0.07328110933303833 0.4430720806121826 -0.23094940185546875 0.8349864482879639 0.062196724116802216 0.5467085838317871 0.8917837738990784 0.0931837260723114 1 0.8749367594718933 0 0.08163774013519287 3 0.026193035766482353 0 0.0 0.1420363187789917 0.49902892112731934 -0.265682578086853 0.7232886552810669 -0.6007568836212158 0.3404339849948883 0.9186869263648987 0.12909665703773499 1 0.9554049968719482 0 0.009283550083637238 0 0.0 0 0.0 0.07519534230232239 0.4880945682525635 -0.17792588472366333 0.4931180775165558 -0.8037965297698975 0.3327127993106842 0.9240359663963318 0.07843738049268723 1 0.9170035123825073 0 0.058905184268951416 0 0.0 0 0.0 0.024349510669708252 0.44997596740722656 -0.18417012691497803 0.5105136036872864 -0.6040223240852356 0.6119571328163147 0.897230863571167 0.05878820642828941 1 0.8514333963394165 0 0.11276810616254807 0 0.0 0 0.0 0.0 0.46508145332336426 -0.15146160125732422 0.0 -0.8492690920829773 0.5279091596603394 0.9070941805839539 0.03858356922864914 1 0.8848198652267456 0 0.08769097924232483 0 0.0 0 0.0 0.0 0.4452739953994751 -0.17835205793380737 0.0 -0.49507126212120056 0.86883145570755 0.8921484351158142 0.046273425221443176 1 0.827133059501648 0 0.13505855202674866 0 0.0 0 0.0 0.024349510669708252 0.44997596740722656 -0.18417012691497803 0.5105136036872864 -0.6040223240852356 0.6119571328163147 0.897230863571167 0.05878820642828941 1 0.8514333963394165 0 0.11276810616254807 0 0.0 0 0.0 0.04406014084815979 0.47633934020996094 -0.1643797755241394 0.4945219159126282 -0.7363200783729553 0.4617755711078644 0.9167872667312622 0.06153831630945206 1 0.8978144526481628 0 0.0762820616364479 0 0.0 0 0.0 0.03183332085609436 0.4725472927093506 -0.1536623239517212 0.4668111205101013 -0.7400128245353699 0.4841761589050293 0.9156655073165894 0.053619880229234695 1 0.8963752388954163 0 0.07782471179962158 0 0.0 0 0.0 0.04134397208690643 0.4539233446121216 -0.2002546787261963 0.5264137983322144 -0.3241981267929077 0.7859736680984497 0.8979483842849731 0.07017120718955994 1 0.8607756495475769 0 0.10225554555654526 3 0.0017874501645565033 0 0.0 0.07519534230232239 0.4880945682525635 -0.17792588472366333 0.4931180775165558 -0.8037965297698975 0.3327127993106842 0.9240359663963318 0.07843738049268723 1 0.9170035123825073 0 0.058905184268951416 0 0.0 0 0.0 0.04406014084815979 0.47633934020996094 -0.1643797755241394 0.4945219159126282 -0.7363200783729553 0.4617755711078644 0.9167872667312622 0.06153831630945206 1 0.8978144526481628 0 0.0762820616364479 0 0.0 0 0.0 0.0 0.41489994525909424 -0.18215465545654297 0.0 0.5597094893455505 0.8286690711975098 0.8788778185844421 0.04964836686849594 1 0.730757474899292 0 0.21810069680213928 5 0.0014950893819332123 3 0.00030696019530296326 0.024349510669708252 0.44997596740722656 -0.18417012691497803 0.5105136036872864 -0.6040223240852356 0.6119571328163147 0.897230863571167 0.05878820642828941 1 0.8514333963394165 0 0.11276810616254807 0 0.0 0 0.0 0.0 0.4452739953994751 -0.17835205793380737 0.0 -0.49507126212120056 0.86883145570755 0.8921484351158142 0.046273425221443176 1 0.827133059501648 0 0.13505855202674866 0 0.0 0 0.0 0.09905996918678284 0.40596628189086914 -0.19437533617019653 0.5630664825439453 0.7503280639648438 0.34626302123069763 0.5929415822029114 0.566311240196228 1 0.6572749614715576 0 0.20971746742725372 3 0.12424865365028381 0 0.0 0.04134397208690643 0.4539233446121216 -0.2002546787261963 0.5264137983322144 -0.3241981267929077 0.7859736680984497 0.6188840866088867 0.5845966339111328 1 0.8607756495475769 0 0.10225554555654526 3 0.0017874501645565033 0 0.0 0.0 0.41489994525909424 -0.18215465545654297 0.0 0.5597094893455505 0.8286690711975098 0.642014741897583 0.5646453499794006 1 0.730757474899292 0 0.21810069680213928 5 0.0014950893819332123 3 0.00030696019530296326 0.12179547548294067 0.3854290246963501 -0.23301446437835693 0.8996246457099915 0.39896848797798157 -0.17743460834026337 0.6237066984176636 0.9517653584480286 1 0.7110409140586853 0 0.1705215722322464 3 0.11412934958934784 0 0.0 0.07328110933303833 0.4430720806121826 -0.23094940185546875 0.8349864482879639 0.062196724116802216 0.5467085838317871 0.6518501043319702 0.9787291884422302 1 0.8749367594718933 0 0.08163774013519287 3 0.026193035766482353 0 0.0 0.09905996918678284 0.40596628189086914 -0.19437533617019653 0.5630664825439453 0.7503280639648438 0.34626302123069763 0.6464900374412537 0.9542642831802368 1 0.6572749614715576 0 0.20971746742725372 3 0.12424865365028381 0 0.0 0.07341891527175903 0.3139185905456543 -0.28698432445526123 0.6358226537704468 -0.38373973965644836 -0.669667661190033 0.27071312069892883 0.3962279260158539 1 0.6878804564476013 0 0.28015995025634766 3 0.008270028978586197 0 0.0 0.11474817991256714 0.41678154468536377 -0.2910900115966797 0.9263588190078735 -0.37650686502456665 0.005249183624982834 0.23559102416038513 0.359767347574234 1 0.9101746082305908 0 0.05719852074980736 3 0.011641807854175568 0 0.0 0.12179547548294067 0.3854290246963501 -0.23301446437835693 0.8996246457099915 0.39896848797798157 -0.17743460834026337 0.23082518577575684 0.39427757263183594 1 0.7110409140586853 0 0.1705215722322464 3 0.11412934958934784 0 0.0 0.0 0.33551084995269775 -0.3629721403121948 0.0 -0.7144383192062378 -0.6996673345565796 0.31088313460350037 0.35648632049560547 1 0.9168000221252441 0 0.07637535780668259 0 0.0 0 0.0 0.07341891527175903 0.3139185905456543 -0.28698432445526123 0.6358226537704468 -0.38373973965644836 -0.669667661190033 0.27071312069892883 0.3962279260158539 1 0.6878804564476013 0 0.28015995025634766 3 0.008270028978586197 0 0.0 0.0 0.29299962520599365 -0.3292173147201538 0.0 -0.5545213222503662 -0.8321481943130493 0.3137752413749695 0.3848779797554016 1 0.7812550663948059 0 0.20431587100028992 0 0.0 0 0.0 0.43023955821990967 0.157029926776886 0.06563612818717957 -0.4426404535770416 -0.8844264149665833 0.14767906069755554 0.08512462675571442 0.6006276607513428 3 0.9999399781227112 0 0.0 0 0.0 0 0.0 0.5589442253112793 0.16177308559417725 0.07854250073432922 0.9342325925827026 -0.35114598274230957 -0.06216620281338692 0.02092316746711731 0.6068553328514099 3 1.0000194311141968 0 0.0 0 0.0 0 0.0 0.5088207721710205 0.12029749155044556 0.1170196533203125 0.16394543647766113 -0.8839991688728333 0.4377574920654297 0.04735330492258072 0.6357671618461609 3 1.0001006126403809 0 0.0 0 0.0 0 0.0 0.3984619379043579 0.26093626022338867 0.08564722537994385 -0.4599139392375946 0.35129857063293457 0.8154851198196411 0.43783387541770935 0.39854317903518677 3 0.9973952174186707 0 0.0 0 0.0 0 0.0 0.5096194744110107 0.2505838871002197 0.11315262317657471 0.5906857252120972 0.6383556723594666 0.4935148060321808 0.38072505593299866 0.38276207447052 3 0.9994410276412964 0 0.0 0 0.0 0 0.0 0.4554738998413086 0.2947545051574707 0.029965192079544067 0.4450819492340088 0.8953825235366821 0.013611255213618279 0.4090229272842407 0.43271535634994507 3 0.9976978898048401 0 0.0 0 0.0 0 0.0 0.5096194744110107 0.2505838871002197 0.11315262317657471 0.5906857252120972 0.6383556723594666 0.4935148060321808 0.6430558562278748 0.6733530759811401 3 0.9994410276412964 0 0.0 0 0.0 0 0.0 0.5047986507415771 0.20594364404678345 -0.004644919186830521 0.6930753588676453 -0.20831935107707977 -0.6900539994239807 0.5881485939025879 0.7014670968055725 3 0.9998424053192139 0 0.0 0 0.0 0 0.0 0.4554738998413086 0.2947545051574707 0.029965192079544067 0.4450819492340088 0.8953825235366821 0.013611255213618279 0.6390498280525208 0.7233343124389648 3 0.9976978898048401 0 0.0 0 0.0 0 0.0 0.43023955821990967 0.157029926776886 0.06563612818717957 -0.4426404535770416 -0.8844264149665833 0.14767906069755554 0.9498034119606018 0.5855746865272522 3 0.9999399781227112 0 0.0 0 0.0 0 0.0 0.47704315185546875 0.22420382499694824 0.13703078031539917 -0.09256263822317123 0.13635669648647308 0.9862971901893616 0.9100112915039062 0.5470339059829712 3 0.9994068741798401 0 0.0 0 0.0 0 0.0 0.3984619379043579 0.26093626022338867 0.08564722537994385 -0.4599139392375946 0.35129857063293457 0.8154851198196411 0.9010043740272522 0.57774817943573 3 0.9973952174186707 0 0.0 0 0.0 0 0.0 0.5589442253112793 0.16177308559417725 0.07854250073432922 0.9342325925827026 -0.35114598274230957 -0.06216620281338692 0.9657022356987 0.5219221115112305 3 1.0000194311141968 0 0.0 0 0.0 0 0.0 0.47704315185546875 0.22420382499694824 0.13703078031539917 -0.09256263822317123 0.13635669648647308 0.9862971901893616 0.9100112915039062 0.5470339059829712 3 0.9994068741798401 0 0.0 0 0.0 0 0.0 0.5088207721710205 0.12029749155044556 0.1170196533203125 0.16394543647766113 -0.8839991688728333 0.4377574920654297 0.9588103890419006 0.5548603534698486 3 1.0001006126403809 0 0.0 0 0.0 0 0.0 0.16969645023345947 0.6551282405853271 -0.246321439743042 0.6105228066444397 0.38544878363609314 0.6918545961380005 0.4616085886955261 0.8940138816833496 1 0.9888418912887573 0 0.0 0 0.0 0 0.0 0.1668308973312378 0.6906447410583496 -0.2779656648635864 0.5177770256996155 0.6292916536331177 0.5795159935951233 0.46132102608680725 0.8691244125366211 1 0.9922325015068054 0 0.0 0 0.0 0 0.0 0.11437469720840454 0.7034616470336914 -0.2846221923828125 0.12384410947561264 0.6982024312019348 0.7050996422767639 0.4353049099445343 0.8618066906929016 1 0.993859589099884 0 0.0 0 0.0 0 0.0 0.06832624971866608 0.6362987756729126 -0.10502550005912781 0.0003662221133708954 0.7992797493934631 0.6009094715118408 0.43992936611175537 0.5768581628799438 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 0.16803307831287384 0.6519752144813538 -0.12582896649837494 -0.0005493331700563431 0.7998901605606079 0.600085437297821 0.446943461894989 0.5783216953277588 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 0.18155312538146973 0.6985167860984802 -0.18785469233989716 -0.00012207403779029846 0.7973570823669434 0.6034730076789856 0.44789454340934753 0.5826849937438965 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 0.18155312538146973 0.6985167860984802 -0.18785469233989716 0.9183019399642944 0.3723563253879547 0.1342204064130783 0.4365166127681732 0.5947638750076294 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 0.26475274562835693 0.5735782384872437 -0.4104318916797638 0.9183019399642944 0.3723563253879547 0.1342204064130783 0.45217427611351013 0.5859748125076294 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 0.17463847994804382 0.7308197021484375 -0.23016177117824554 0.9183019399642944 0.3723563253879547 0.1342204064130783 0.439492791891098 0.5970363020896912 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 8.740083656810782e-10 0.6703131198883057 -0.15016429126262665 0.0 0.7986083626747131 0.6017944812774658 0.43512284755706787 0.5800336003303528 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 8.540583795735301e-10 0.724265456199646 -0.22176188230514526 0.0 0.7986083626747131 0.6017944812774658 0.43512284755706787 0.5850702524185181 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -0.18193703889846802 0.6986724734306335 -0.18779857456684113 0.0 0.7986083626747131 0.6017944812774658 0.42232412099838257 0.5826810598373413 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 -0.18193703889846802 0.6986724734306335 -0.18779857456684113 -0.9146091938018799 0.3822748363018036 0.13153477013111115 0.43651267886161804 0.5947748422622681 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 -0.26600396633148193 0.5740855932235718 -0.4102489948272705 -0.9412823915481567 0.26740318536758423 0.2059389054775238 0.45216143131256104 0.5860105156898499 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -0.2696293294429779 0.5560132265090942 -0.40479886531829834 -0.9432050585746765 0.2538224458694458 0.2142704576253891 0.45177799463272095 0.5847391486167908 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 8.740083656810782e-10 0.6703131198883057 -0.15016429126262665 -0.04226813465356827 -0.861690104007721 -0.5056001543998718 0.43512284755706787 0.5800336003303528 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -1.9033474245588877e-06 0.7134334444999695 -0.22993047535419464 -0.02450636401772499 -0.8625141382217407 -0.5053865313529968 0.43512269854545593 0.5856449007987976 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 0.17698341608047485 0.6879801154136658 -0.19507654011249542 0.0007019257172942162 -0.8356273174285889 -0.5492416024208069 0.44757309556007385 0.5831930041313171 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 0.17698341608047485 0.6879801154136658 -0.19507654011249542 -0.8927274346351624 -0.4296395778656006 -0.1355937421321869 0.43702465295791626 0.5940226316452026 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 0.26475274562835693 0.5735782384872437 -0.4104318916797638 -0.9075899720191956 -0.38608965277671814 -0.16479995846748352 0.45217427611351013 0.5859748125076294 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 0.27082911133766174 0.556499719619751 -0.40462347865104675 -0.9092074632644653 -0.3807184100151062 -0.16827906668186188 0.45176565647125244 0.5847734212875366 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -0.06832624971866608 0.6362987756729126 -0.10502550005912781 0.0316782146692276 -0.8488723635673523 -0.5275734663009644 0.430316299200058 0.5768581628799438 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -0.16803307831287384 0.6519752144813538 -0.12582896649837494 -0.043885618448257446 -0.887600302696228 -0.45844903588294983 0.42330220341682434 0.5783216953277588 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -0.17731525003910065 0.688213586807251 -0.19509990513324738 -0.0005493331700563431 -0.8368785381317139 -0.5473799705505371 0.42264923453330994 0.5831946730613708 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 -0.17731525003910065 0.688213586807251 -0.19509990513324738 0.8886989951133728 -0.4385204613208771 -0.13370159268379211 0.43702632188796997 0.5940390825271606 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 -0.26600396633148193 0.5740855932235718 -0.4102489948272705 0.9305398464202881 -0.28128910064697266 -0.23435163497924805 0.45216143131256104 0.5860105156898499 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -0.16651925444602966 0.7212713360786438 -0.23632338643074036 0.8850062489509583 -0.44776755571365356 -0.1272927075624466 0.43992626667022705 0.5963646173477173 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 0.16803307831287384 0.6519752144813538 -0.12582896649837494 0.9311502575874329 -0.3585314452648163 -0.06607257574796677 0.4321533143520355 0.591489851474762 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 0.17698341608047485 0.6879801154136658 -0.19507654011249542 0.9311502575874329 -0.3585314452648163 -0.06607257574796677 0.43702465295791626 0.5940226316452026 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 0.18155312538146973 0.6985167860984802 -0.18785469233989716 0.9311502575874329 -0.3585314452648163 -0.06607257574796677 0.4365166127681732 0.5947638750076294 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 -0.18193703889846802 0.6986724734306335 -0.18779857456684113 -0.9288918972015381 -0.3643299639225006 -0.06610309332609177 0.43651267886161804 0.5947748422622681 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 -0.17731525003910065 0.688213586807251 -0.19509990513324738 -0.9288918972015381 -0.3643299639225006 -0.06610309332609177 0.43702632188796997 0.5940390825271606 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 -0.16803307831287384 0.6519752144813538 -0.12582896649837494 -0.9288918972015381 -0.3643299639225006 -0.06610309332609177 0.4321533143520355 0.591489851474762 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 0.26475274562835693 0.5735782384872437 -0.4104318916797638 -0.26615193486213684 0.6565446853637695 -0.7057405114173889 0.453747421503067 0.5859748125076294 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 0.1669710874557495 0.7213309407234192 -0.23609749972820282 -0.26615193486213684 0.6565446853637695 -0.7057405114173889 0.44686874747276306 0.5963687896728516 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 0.17463847994804382 0.7308197021484375 -0.23016177117824554 -0.26615193486213684 0.6565446853637695 -0.7057405114173889 0.44740810990333557 0.5970363020896912 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -0.17420312762260437 0.7306431531906128 -0.23022541403770447 0.25019073486328125 0.6637470722198486 -0.7048249840736389 0.42286816239356995 0.5970238447189331 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -0.16651925444602966 0.7212713360786438 -0.23632338643074036 0.25019073486328125 0.6637470722198486 -0.7048249840736389 0.42340871691703796 0.5963646173477173 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -0.26600396633148193 0.5740855932235718 -0.4102489948272705 0.25019073486328125 0.6637470722198486 -0.7048249840736389 0.4164102375507355 0.5860105156898499 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 0.1669710874557495 0.7213309407234192 -0.23609749972820282 -0.060670796781778336 0.5655690431594849 -0.8224433064460754 0.44686874747276306 0.5963687896728516 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 8.540583795735301e-10 0.724265456199646 -0.22176188230514526 -0.05798516795039177 0.599536120891571 -0.7982116341590881 0.43512284755706787 0.5965752005577087 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 0.17463847994804382 0.7308197021484375 -0.23016177117824554 -0.060762353241443634 0.5641651749610901 -0.8233894109725952 0.44740810990333557 0.5970363020896912 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 0.18155312538146973 0.6985167860984802 -0.18785469233989716 0.4831080138683319 -0.6277962327003479 0.6102786064147949 0.44789454340934753 0.5826849937438965 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 0.17698341608047485 0.6879801154136658 -0.19507654011249542 0.4831080138683319 -0.6277962327003479 0.6102786064147949 0.44757309556007385 0.5831930041313171 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 0.27082911133766174 0.556499719619751 -0.40462347865104675 0.4831080138683319 -0.6277962327003479 0.6102786064147949 0.45417484641075134 0.5979340076446533 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -0.2696293294429779 0.5560132265090942 -0.40479886531829834 -0.4746238589286804 -0.635120689868927 0.6093325614929199 0.41615521907806396 0.5979464054107666 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -0.17731525003910065 0.688213586807251 -0.19509990513324738 -0.4746238589286804 -0.635120689868927 0.6093325614929199 0.42264923453330994 0.5831946730613708 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 -0.18193703889846802 0.6986724734306335 -0.18779857456684113 -0.4746238589286804 -0.635120689868927 0.6093325614929199 0.42232412099838257 0.5826810598373413 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 8.540583795735301e-10 0.724265456199646 -0.22176188230514526 0.05896176025271416 0.600085437297821 -0.7977232933044434 0.43512284755706787 0.5965752005577087 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -0.16651925444602966 0.7212713360786438 -0.23632338643074036 0.06060975790023804 0.5796685814857483 -0.8125553131103516 0.42340871691703796 0.5963646173477173 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -0.17420312762260437 0.7306431531906128 -0.23022541403770447 0.060670796781778336 0.5788445472717285 -0.8131351470947266 0.42286816239356995 0.5970238447189331 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -0.3433201313018799 0.07734565436840057 0.11786850541830063 -0.4990691840648651 0.06088442727923393 0.8644062876701355 0.4109712839126587 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.31683751940727234 0.09264949709177017 0.0 0.06088442727923393 0.9981383681297302 0.40818727016448975 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.07734565436840057 0.10726418346166611 0.0 0.06088442727923393 0.9981383681297302 0.40818727016448975 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.422471821308136 0.07734565436840057 0.11786847561597824 0.4990691840648651 0.06088442727923393 0.8644062876701355 0.4054032266139984 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.46410006284713745 0.31683751940727234 0.139532670378685 0.8644062876701355 0.06088442727923393 0.4990691840648651 0.4024747908115387 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.4514433741569519 0.07734565436840057 0.14684000611305237 0.8644062876701355 0.06088442727923393 0.4990691840648651 0.4033651649951935 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.3143486976623535 0.07734565436840057 0.22599166631698608 -0.8644062876701355 0.06088442727923393 -0.4990691840648651 0.4074037969112396 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.28912973403930664 0.31683751940727234 0.18641585111618042 -0.9981383681297302 0.06088442727923393 -0.0 0.41018784046173096 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.303744375705719 0.07734565436840057 0.18641585111618042 -0.9981383681297302 0.06088442727923393 -0.0 0.41018784046173096 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.422471821308136 0.07734565436840057 0.2549631595611572 0.4990691840648651 0.06088442727923393 -0.8644062876701355 0.4054032266139984 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.31683751940727234 0.2801821529865265 0.0 0.06088442727923393 -0.9981383681297302 0.40818727016448975 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.07734565436840057 0.26556745171546936 0.0 0.06088442727923393 -0.9981383681297302 0.40818727016448975 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.4514433741569519 0.07734565436840057 0.14684000611305237 0.8644062876701355 0.06088442727923393 0.4990691840648651 0.4129718840122223 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.4766623377799988 0.31683751940727234 0.18641582131385803 0.9981383681297302 0.06088442727923393 -0.0 0.41018784046173096 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.46204763650894165 0.07734565436840057 0.18641582131385803 0.9981383681297302 0.06088442727923393 -0.0 0.41018784046173096 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.3143486976623535 0.07734565436840057 0.14684003591537476 -0.8644062876701355 0.06088442727923393 0.4990691840648651 0.4129718840122223 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.28912973403930664 0.31683751940727234 0.18641585111618042 -0.9981383681297302 0.06088442727923393 -0.0 0.41018784046173096 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.30169200897216797 0.31683751940727234 0.13953270018100739 -0.8644062876701355 0.06088442727923393 0.4990691840648651 0.41348591446876526 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.07734565436840057 0.26556745171546936 0.0 0.06088442727923393 -0.9981383681297302 0.40818727016448975 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.3360128402709961 0.31683751940727234 0.2676198184490204 -0.4990691840648651 0.06088442727923393 -0.8644062876701355 0.41148534417152405 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.34332019090652466 0.07734565436840057 0.2549631595611572 -0.4990691840648651 0.06088442727923393 -0.8644062876701355 0.4109712839126587 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.46204763650894165 0.07734565436840057 0.18641582131385803 0.9981383681297302 0.06088442727923393 -0.0 0.41018784046173096 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.46410006284713745 0.31683751940727234 0.23329898715019226 0.8644062876701355 0.06088442727923393 -0.4990691840648651 0.40688976645469666 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.4514433741569519 0.07734565436840057 0.22599166631698608 0.8644062876701355 0.06088442727923393 -0.4990691840648651 0.4074037969112396 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.3143486976623535 0.07734565436840057 0.14684003591537476 -0.8644062876701355 0.06088442727923393 0.4990691840648651 0.4129718840122223 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.3360127806663513 0.31683751940727234 0.10521181672811508 -0.4990691840648651 0.06088442727923393 0.8644062876701355 0.4159002900123596 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.3433201313018799 0.07734565436840057 0.11786850541830063 -0.4990691840648651 0.06088442727923393 0.8644062876701355 0.41500991582870483 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.07734565436840057 0.10726418346166611 0.0 0.06088442727923393 0.9981383681297302 0.40818727016448975 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.42977917194366455 0.31683751940727234 0.1052117869257927 0.4990691840648651 0.06088442727923393 0.8644062876701355 0.40488916635513306 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.422471821308136 0.07734565436840057 0.11786847561597824 0.4990691840648651 0.06088442727923393 0.8644062876701355 0.4054032266139984 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.34332019090652466 0.07734565436840057 0.2549631595611572 -0.4990691840648651 0.06088442727923393 -0.8644062876701355 0.4109712839126587 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.30169200897216797 0.31683751940727234 0.23329901695251465 -0.8644062876701355 0.06088442727923393 -0.4990691840648651 0.4138997197151184 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.3143486976623535 0.07734565436840057 0.22599166631698608 -0.8644062876701355 0.06088442727923393 -0.4990691840648651 0.4130093455314636 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.422471821308136 0.07734565436840057 0.2549631595611572 0.4990691840648651 0.06088442727923393 -0.8644062876701355 0.4054032266139984 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.46410006284713745 0.31683751940727234 0.23329898715019226 0.8644062876701355 0.06088442727923393 -0.4990691840648651 0.4024747908115387 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.42977917194366455 0.31683751940727234 0.2676198184490204 0.4990691840648651 0.06088442727923393 -0.8644062876701355 0.40488916635513306 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.3143486976623535 0.07734565436840057 0.22599166631698608 0.0 1.0 -0.0 0.4130093455314636 0.5535721778869629 5 1.0 0 0.0 0 0.0 0 0.0 -0.3143486976623535 0.07734565436840057 0.14684003591537476 0.0 1.0 -0.0 0.4130093455314636 0.5591402649879456 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.07734565436840057 0.10726418346166611 0.0 1.0 -0.0 0.40818727016448975 0.5619242787361145 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.31683751940727234 0.09264949709177017 0.0 -0.06088442727923393 -0.9981383681297302 0.40818727016448975 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.3433201313018799 0.07734565436840057 0.11786850541830063 0.4990691840648651 -0.06088442727923393 -0.8644062876701355 0.4109712839126587 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.07734565436840057 0.10726418346166611 0.0 -0.06088442727923393 -0.9981383681297302 0.40818727016448975 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.46410006284713745 0.31683751940727234 0.139532670378685 -0.8644062876701355 -0.06088442727923393 -0.4990691840648651 0.4024747908115387 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.422471821308136 0.07734565436840057 0.11786847561597824 -0.4990691840648651 -0.06088442727923393 -0.8644062876701355 0.4054032266139984 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.4514433741569519 0.07734565436840057 0.14684000611305237 -0.8644062876701355 -0.06088442727923393 -0.4990691840648651 0.4033651649951935 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.28912973403930664 0.31683751940727234 0.18641585111618042 0.9981383681297302 -0.06088442727923393 -0.0 0.41018784046173096 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.3143486976623535 0.07734565436840057 0.22599166631698608 0.8644062876701355 -0.06088442727923393 0.4990691840648651 0.4074037969112396 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.303744375705719 0.07734565436840057 0.18641585111618042 0.9981383681297302 -0.06088442727923393 -0.0 0.41018784046173096 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.31683751940727234 0.2801821529865265 0.0 -0.06088442727923393 0.9981383681297302 0.40818727016448975 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.422471821308136 0.07734565436840057 0.2549631595611572 -0.4990691840648651 -0.06088442727923393 0.8644062876701355 0.4054032266139984 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.07734565436840057 0.26556745171546936 0.0 -0.06088442727923393 0.9981383681297302 0.40818727016448975 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.4766623377799988 0.31683751940727234 0.18641582131385803 -0.9981383681297302 -0.06088442727923393 -0.0 0.41018784046173096 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.4514433741569519 0.07734565436840057 0.14684000611305237 -0.8644062876701355 -0.06088442727923393 -0.4990691840648651 0.4129718840122223 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.46204763650894165 0.07734565436840057 0.18641582131385803 -0.9981383681297302 -0.06088442727923393 -0.0 0.41018784046173096 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.30169200897216797 0.31683751940727234 0.13953270018100739 0.8644062876701355 -0.06088442727923393 -0.4990691840648651 0.41348591446876526 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.303744375705719 0.07734565436840057 0.18641585111618042 0.9981383681297302 -0.06088442727923393 -0.0 0.41018784046173096 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.3143486976623535 0.07734565436840057 0.14684003591537476 0.8644062876701355 -0.06088442727923393 -0.4990691840648651 0.4129718840122223 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.3360128402709961 0.31683751940727234 0.2676198184490204 0.4990691840648651 -0.06088442727923393 0.8644062876701355 0.41148534417152405 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.07734565436840057 0.26556745171546936 0.0 -0.06088442727923393 0.9981383681297302 0.40818727016448975 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.34332019090652466 0.07734565436840057 0.2549631595611572 0.4990691840648651 -0.06088442727923393 0.8644062876701355 0.4109712839126587 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.4514433741569519 0.07734565436840057 0.22599166631698608 -0.8644062876701355 -0.06088442727923393 0.4990691840648651 0.4074037969112396 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.4766623377799988 0.31683751940727234 0.18641582131385803 -0.9981383681297302 -0.06088442727923393 -0.0 0.41018784046173096 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.46204763650894165 0.07734565436840057 0.18641582131385803 -0.9981383681297302 -0.06088442727923393 -0.0 0.41018784046173096 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.3360127806663513 0.31683751940727234 0.10521181672811508 0.4990691840648651 -0.06088442727923393 -0.8644062876701355 0.4159002900123596 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.3143486976623535 0.07734565436840057 0.14684003591537476 0.8644062876701355 -0.06088442727923393 -0.4990691840648651 0.4129718840122223 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.3433201313018799 0.07734565436840057 0.11786850541830063 0.4990691840648651 -0.06088442727923393 -0.8644062876701355 0.41500991582870483 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.422471821308136 0.07734565436840057 0.11786847561597824 -0.4990691840648651 -0.06088442727923393 -0.8644062876701355 0.4054032266139984 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.31683751940727234 0.09264949709177017 0.0 -0.06088442727923393 -0.9981383681297302 0.40818727016448975 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.07734565436840057 0.10726418346166611 0.0 -0.06088442727923393 -0.9981383681297302 0.40818727016448975 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.30169200897216797 0.31683751940727234 0.23329901695251465 0.8644062876701355 -0.06088442727923393 0.4990691840648651 0.4138997197151184 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.34332019090652466 0.07734565436840057 0.2549631595611572 0.4990691840648651 -0.06088442727923393 0.8644062876701355 0.4109712839126587 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.3143486976623535 0.07734565436840057 0.22599166631698608 0.8644062876701355 -0.06088442727923393 0.4990691840648651 0.4130093455314636 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.422471821308136 0.07734565436840057 0.2549631595611572 -0.4990691840648651 -0.06088442727923393 0.8644062876701355 0.4054032266139984 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.46410006284713745 0.31683751940727234 0.23329898715019226 -0.8644062876701355 -0.06088442727923393 0.4990691840648651 0.4024747908115387 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.4514433741569519 0.07734565436840057 0.22599166631698608 -0.8644062876701355 -0.06088442727923393 0.4990691840648651 0.4033651649951935 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.3143486976623535 0.07734565436840057 0.14684003591537476 0.0 -0.999969482421875 -0.0 0.4130093455314636 0.5591402649879456 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.07734565436840057 0.26556745171546936 0.0 -1.0 -0.0 0.40818727016448975 0.5507881045341492 5 1.0 0 0.0 0 0.0 0 0.0 -0.4514433741569519 0.07734565436840057 0.14684000611305237 0.0 -1.0 -0.0 0.4033651649951935 0.5591402649879456 5 1.0 0 0.0 0 0.0 0 0.0 0.0 0.17887204885482788 0.20615297555923462 0.0 0.9208654761314392 0.3898434340953827 0.6407602429389954 0.32359591126441956 0 0.9011874198913574 4 0.008605018258094788 2 0.007983766496181488 0 0.0 0.0 0.219041109085083 0.11931818723678589 0.0 0.8301644921302795 0.557481586933136 0.642014741897583 0.37345194816589355 0 0.8959391713142395 5 0.029438931494951248 3 0.028147835284471512 0 0.0 -0.20940327644348145 0.18806850910186768 0.10748907923698425 -0.6282540559768677 0.6898098587989807 0.35978269577026367 0.5385096073150635 0.3671324849128723 0 0.6928527355194092 5 0.24366505444049835 4 0.0467214398086071 0 0.0 -0.27896857261657715 0.07729777693748474 0.03905799984931946 -0.9912412166595459 0.0948820486664772 -0.09158604592084885 0.17303664982318878 0.6143929958343506 0 0.709712564945221 5 0.23412871360778809 4 0.047435592859983444 0 0.0 -0.1994549036026001 -0.007807791233062744 -0.07830172777175903 -0.5622425079345703 -0.5634021759033203 -0.6053346395492554 0.23669739067554474 0.5947647094726562 0 0.8589512705802917 5 0.11174113303422928 0 0.0 0 0.0 -0.2218678593635559 -0.11717742681503296 0.0475330650806427 -0.5801263451576233 -0.6734519600868225 -0.45811334252357483 0.22921013832092285 0.6840476989746094 0 0.89361971616745 4 0.052920397371053696 5 0.036598507314920425 0 0.0 -0.20955008268356323 0.1521109938621521 0.19754719734191895 -0.5760979056358337 0.7668691277503967 0.28281503915786743 0.8016543388366699 0.36130064725875854 0 0.7591882348060608 4 0.12052897363901138 5 0.10312915593385696 0 0.0 -0.20940327644348145 0.18806850910186768 0.10748907923698425 -0.6282540559768677 0.6898098587989807 0.35978269577026367 0.8133400082588196 0.3891247510910034 0 0.6928527355194092 5 0.24366505444049835 4 0.0467214398086071 0 0.0 -0.27896857261657715 0.07729777693748474 0.03905799984931946 -0.9912412166595459 0.0948820486664772 -0.09158604592084885 0.7514224052429199 0.4350348114967346 0 0.709712564945221 5 0.23412871360778809 4 0.047435592859983444 0 0.0 -0.1994549036026001 -0.007807791233062744 -0.07830172777175903 -0.5622425079345703 -0.5634021759033203 -0.6053346395492554 0.23669739067554474 0.5947647094726562 0 0.8589512705802917 5 0.11174113303422928 0 0.0 0 0.0 0.0 -0.05573540925979614 -0.1027672290802002 0.0 -0.7233496904373169 -0.6904507875442505 0.3428180515766144 0.5973702669143677 0 0.949096143245697 0 0.0 0 0.0 0 0.0 0.0 -0.1520075798034668 0.035814911127090454 0.0 -0.8850062489509583 -0.46555987000465393 0.342818021774292 0.6868105530738831 0 0.9604138135910034 0 0.0 0 0.0 0 0.0 0.0 -0.17877912521362305 0.11906552314758301 0.0 -0.9352397322654724 -0.35392314195632935 0.3381052017211914 0.7297746539115906 0 0.9514539241790771 0 0.0 0 0.0 0 0.0 -0.2333071231842041 -0.14518868923187256 0.12986749410629272 -0.6191290020942688 -0.7353739738464355 -0.27536851167678833 0.21926060318946838 0.7273061871528625 0 0.8546450138092041 4 0.10561978816986084 5 0.005903564393520355 0 0.0 -0.2218678593635559 -0.11717742681503296 0.0475330650806427 -0.5801263451576233 -0.6734519600868225 -0.45811334252357483 0.22921013832092285 0.6840476989746094 0 0.89361971616745 4 0.052920397371053696 5 0.036598507314920425 0 0.0 -0.2333071231842041 -0.14518868923187256 0.12986749410629272 -0.6191290020942688 -0.7353739738464355 -0.27536851167678833 0.21926060318946838 0.7273061871528625 0 0.8546450138092041 4 0.10561978816986084 5 0.005903564393520355 0 0.0 -0.2891288995742798 -0.053497374057769775 0.22732973098754883 -0.9860530495643616 -0.06204412877559662 -0.15433210134506226 0.16813310980796814 0.7361131310462952 0 0.6697622537612915 4 0.28313446044921875 5 0.02448401227593422 0 0.0 -0.29087793827056885 0.005670234560966492 0.15487772226333618 -0.9979857802391052 0.062990203499794 -0.003906369209289551 0.16594837605953217 0.6863267421722412 0 0.7698143124580383 4 0.1380283385515213 5 0.08358502388000488 0 0.0 -0.20780110359191895 0.12533944845199585 0.2807978391647339 -0.5116122961044312 0.844325065612793 0.1590929925441742 0.5354735851287842 0.2732369899749756 0 0.6718023419380188 4 0.25894609093666077 5 0.0418415404856205 0 0.0 0.0 0.144250750541687 0.286879301071167 0.0 0.9332865476608276 0.35908079147338867 0.6393837928771973 0.278120756149292 0 0.8431402444839478 4 0.0683114305138588 2 0.06750531494617462 0 0.0 0.0 0.17887204885482788 0.20615297555923462 0.0 0.9208654761314392 0.3898434340953827 0.6407602429389954 0.32359591126441956 0 0.9011874198913574 4 0.008605018258094788 2 0.007983766496181488 0 0.0 -0.29087793827056885 0.005670234560966492 0.15487772226333618 -0.9979857802391052 0.062990203499794 -0.003906369209289551 0.7238370776176453 0.4040071964263916 0 0.7698143124580383 4 0.1380283385515213 5 0.08358502388000488 0 0.0 -0.2891288995742798 -0.053497374057769775 0.22732973098754883 -0.9860530495643616 -0.06204412877559662 -0.15433210134506226 0.7061302661895752 0.3902425765991211 0 0.6697622537612915 4 0.28313446044921875 5 0.02448401227593422 0 0.0 -0.20780110359191895 0.12533944845199585 0.2807978391647339 -0.5116122961044312 0.844325065612793 0.1590929925441742 0.793588399887085 0.3341623842716217 0 0.6718023419380188 4 0.25894609093666077 5 0.0418415404856205 0 0.0 0.0 0.144250750541687 0.286879301071167 0.0 0.9332865476608276 0.35908079147338867 0.6393837928771973 0.278120756149292 0 0.8431402444839478 4 0.0683114305138588 2 0.06750531494617462 0 0.0 -0.20780110359191895 0.12533944845199585 0.2807978391647339 -0.5116122961044312 0.844325065612793 0.1590929925441742 0.5354735851287842 0.2732369899749756 0 0.6718023419380188 4 0.25894609093666077 5 0.0418415404856205 0 0.0 -0.15183353424072266 0.08250489830970764 0.41399872303009033 0.14777062833309174 0.9758903980255127 0.16055788099765778 0.5605605840682983 0.20316660404205322 4 0.568696916103363 0 0.35157811641693115 2 0.06581364572048187 0 0.0 -0.25187551975250244 0.12372738122940063 0.40594351291656494 -0.32880643010139465 0.9301126003265381 -0.16360972821712494 0.506905734539032 0.21915198862552643 4 0.7090063691139221 0 0.2557307779788971 0 0.0 0 0.0 -0.3469996452331543 0.10634586215019226 0.5646698474884033 -0.7864314913749695 0.5786614418029785 -0.21585741639137268 0.45191001892089844 0.14536665380001068 4 0.9651960134506226 0 0.011369410902261734 0 0.0 0 0.0 -0.23059618473052979 0.11400431394577026 0.5390143394470215 0.18820764124393463 0.9757378101348877 -0.1116061881184578 0.5118018388748169 0.1595311015844345 4 0.9383580684661865 0 0.05173060670495033 0 0.0 0 0.0 -0.15183353424072266 0.08250489830970764 0.41399872303009033 0.14777062833309174 0.9758903980255127 0.16055788099765778 0.5605605840682983 0.20316660404205322 4 0.568696916103363 0 0.35157811641693115 2 0.06581364572048187 0 0.0 -0.23059618473052979 0.11400431394577026 0.5390143394470215 0.18820764124393463 0.9757378101348877 -0.1116061881184578 0.5118018388748169 0.1595311015844345 4 0.9383580684661865 0 0.05173060670495033 0 0.0 0 0.0 -0.16343510150909424 0.09151619672775269 0.6089448928833008 0.6315500140190125 0.747611939907074 0.2053590565919876 0.5441842675209045 0.12299907207489014 4 0.9427136182785034 0 0.02507808618247509 0 0.0 0 0.0 -0.19527888298034668 0.014238350093364716 0.7056961059570312 0.3719595968723297 -0.17993712425231934 0.9106112718582153 0.779891848564148 0.7320565581321716 4 0.958198606967926 0 0.0 0 0.0 0 0.0 -0.3028668165206909 0.03667032718658447 0.7283434867858887 -0.4055604636669159 -0.3405865728855133 0.8482314348220825 0.7277485728263855 0.7524433732032776 4 1.0068565607070923 0 0.0 0 0.0 0 0.0 -0.30187129974365234 -0.08480963110923767 0.619861364364624 -0.5957213044166565 -0.6205328702926636 0.5099032521247864 0.7216191291809082 0.6659771203994751 4 0.9709039330482483 0 0.0 0 0.0 0 0.0 -0.3469996452331543 0.10634586215019226 0.5646698474884033 -0.7864314913749695 0.5786614418029785 -0.21585741639137268 0.7268060445785522 0.19475699961185455 4 0.9651960134506226 0 0.011369410902261734 0 0.0 0 0.0 -0.3397330045700073 0.13471728563308716 0.614459753036499 -0.7675099968910217 0.5092929005622864 -0.3892636001110077 0.7379385232925415 0.16754750907421112 4 0.9874043464660645 0 0.0 0 0.0 0 0.0 -0.23059618473052979 0.1385723352432251 0.6024715900421143 0.37034210562705994 0.7505111694335938 -0.5472884178161621 0.7850754261016846 0.19187207520008087 4 0.9903550148010254 0 0.0 0 0.0 0 0.0 -0.3028668165206909 0.03667032718658447 0.7283434867858887 -0.4055604636669159 -0.3405865728855133 0.8482314348220825 0.7277485728263855 0.7524433732032776 4 1.0068565607070923 0 0.0 0 0.0 0 0.0 -0.2691516876220703 0.09592822194099426 0.7350804805755615 -0.007080294191837311 -0.13916440308094025 0.9902340769767761 0.7421389222145081 0.7785028219223022 4 0.9980854392051697 0 0.0 0 0.0 0 0.0 -0.34602928161621094 0.1090165376663208 0.6943802833557129 -0.9147617816925049 -0.062288276851177216 0.39915159344673157 0.698062002658844 0.7733765840530396 4 0.9968497157096863 0 0.0 0 0.0 0 0.0 -0.23059618473052979 0.1385723352432251 0.6024715900421143 0.37034210562705994 0.7505111694335938 -0.5472884178161621 0.8876997828483582 0.39105933904647827 4 0.9903550148010254 0 0.0 0 0.0 0 0.0 -0.1780099868774414 0.10716038942337036 0.7001523971557617 0.8770104050636292 0.06659138947725296 0.4757835566997528 0.945722758769989 0.37810018658638 4 0.9911723732948303 0 0.0 0 0.0 0 0.0 -0.16343510150909424 0.09151619672775269 0.6089448928833008 0.6315500140190125 0.747611939907074 0.2053590565919876 0.9195019006729126 0.4097464084625244 4 0.9427136182785034 0 0.02507808618247509 0 0.0 0 0.0 -0.3468945026397705 0.06105288863182068 0.6569516658782959 -0.9636219143867493 -0.16562394797801971 0.20972320437431335 0.7123997807502747 0.16860434412956238 4 0.9868455529212952 0 0.0 0 0.0 0 0.0 -0.34602928161621094 0.1090165376663208 0.6943802833557129 -0.9147617816925049 -0.062288276851177216 0.39915159344673157 0.7268431782722473 0.1400061845779419 4 0.9968497157096863 0 0.0 0 0.0 0 0.0 -0.3397330045700073 0.13471728563308716 0.614459753036499 -0.7675099968910217 0.5092929005622864 -0.3892636001110077 0.7379385232925415 0.16754750907421112 4 0.9874043464660645 0 0.0 0 0.0 0 0.0 -0.23059618473052979 0.1385723352432251 0.6024715900421143 0.37034210562705994 0.7505111694335938 -0.5472884178161621 0.8876997828483582 0.39105933904647827 4 0.9903550148010254 0 0.0 0 0.0 0 0.0 -0.237876296043396 0.2133294939994812 0.641486644744873 0.3396099805831909 0.47352519631385803 -0.8126468658447266 0.8830041289329529 0.3463095426559448 4 0.9994219541549683 0 0.0 0 0.0 0 0.0 -0.18260103464126587 0.19482123851776123 0.6990411281585693 0.9710379242897034 0.20737327635288239 0.1185949295759201 0.9239189028739929 0.33825811743736267 4 0.9989193677902222 0 0.0 0 0.0 0 0.0 -0.34602928161621094 0.1090165376663208 0.6943802833557129 -0.9147617816925049 -0.062288276851177216 0.39915159344673157 0.7268431782722473 0.1400061845779419 4 0.9968497157096863 0 0.0 0 0.0 0 0.0 -0.3328806161880493 0.17843002080917358 0.734142541885376 -0.8033692240715027 -0.14041566848754883 0.5786614418029785 0.7528762221336365 0.10685840249061584 4 0.9993991851806641 0 0.0 0 0.0 0 0.0 -0.3276984691619873 0.20788490772247314 0.6544501781463623 -0.7152317762374878 0.3708914518356323 -0.5923337340354919 0.7646296620368958 0.13306954503059387 4 0.9982490539550781 0 0.0 0 0.0 0 0.0 -0.1780099868774414 0.10716038942337036 0.7001523971557617 0.8770104050636292 0.06659138947725296 0.4757835566997528 0.7827162146568298 0.7688784003257751 4 0.9911723732948303 0 0.0 0 0.0 0 0.0 -0.18260103464126587 0.19482123851776123 0.6990411281585693 0.9710379242897034 0.20737327635288239 0.1185949295759201 0.7754655480384827 0.8056461215019226 4 0.9989193677902222 0 0.0 0 0.0 0 0.0 -0.26910340785980225 0.17764323949813843 0.7524588108062744 0.1340678185224533 -0.20361949503421783 0.9698172211647034 0.7397990822792053 0.818606436252594 4 0.9995130300521851 0 0.0 0 0.0 0 0.0 -0.3276984691619873 0.20788490772247314 0.6544501781463623 -0.7152317762374878 0.3708914518356323 -0.5923337340354919 0.7646296620368958 0.13306954503059387 4 0.9982490539550781 0 0.0 0 0.0 0 0.0 -0.237876296043396 0.2133294939994812 0.641486644744873 0.3396099805831909 0.47352519631385803 -0.8126468658447266 0.8041354417800903 0.15376198291778564 4 0.9994219541549683 0 0.0 0 0.0 0 0.0 -0.23059618473052979 0.1385723352432251 0.6024715900421143 0.37034210562705994 0.7505111694335938 -0.5472884178161621 0.7850754261016846 0.19187207520008087 4 0.9903550148010254 0 0.0 0 0.0 0 0.0 -0.2691516876220703 0.09592822194099426 0.7350804805755615 -0.007080294191837311 -0.13916440308094025 0.9902340769767761 0.7421389222145081 0.7785028219223022 4 0.9980854392051697 0 0.0 0 0.0 0 0.0 -0.26910340785980225 0.17764323949813843 0.7524588108062744 0.1340678185224533 -0.20361949503421783 0.9698172211647034 0.7397990822792053 0.818606436252594 4 0.9995130300521851 0 0.0 0 0.0 0 0.0 -0.3328806161880493 0.17843002080917358 0.734142541885376 -0.8033692240715027 -0.14041566848754883 0.5786614418029785 0.7056828141212463 0.8151172995567322 4 0.9993991851806641 0 0.0 0 0.0 0 0.0 -0.18260103464126587 0.19482123851776123 0.6990411281585693 0.9710379242897034 0.20737327635288239 0.1185949295759201 0.7754655480384827 0.8056461215019226 4 0.9989193677902222 0 0.0 0 0.0 0 0.0 -0.20932167768478394 0.2829176187515259 0.7541635036468506 0.9013641476631165 -0.05499435216188431 0.4294869899749756 0.7640476226806641 0.8615762591362 4 0.9999198317527771 0 0.0 0 0.0 0 0.0 -0.2703179121017456 0.24386632442474365 0.7686514854431152 0.15445417165756226 -0.2859279215335846 0.9457075595855713 0.7375360131263733 0.851832926273346 4 0.9999034404754639 0 0.0 0 0.0 0 0.0 -0.3276984691619873 0.2997403144836426 0.701850414276123 -0.7264320850372314 0.28260138630867004 -0.6263924241065979 0.7918135523796082 0.08813752979040146 4 0.999759316444397 0 0.0 0 0.0 0 0.0 -0.237876296043396 0.37244415283203125 0.7143435478210449 0.4520706832408905 0.5877559781074524 -0.6709189414978027 0.8513078689575195 0.07979519665241241 4 1.0000070333480835 0 0.0 0 0.0 0 0.0 -0.237876296043396 0.2133294939994812 0.641486644744873 0.3396099805831909 0.47352519631385803 -0.8126468658447266 0.8041354417800903 0.15376198291778564 4 0.9994219541549683 0 0.0 0 0.0 0 0.0 -0.26910340785980225 0.17764323949813843 0.7524588108062744 0.1340678185224533 -0.20361949503421783 0.9698172211647034 0.7397990822792053 0.818606436252594 4 0.9995130300521851 0 0.0 0 0.0 0 0.0 -0.2703179121017456 0.24386632442474365 0.7686514854431152 0.15445417165756226 -0.2859279215335846 0.9457075595855713 0.7375360131263733 0.851832926273346 4 0.9999034404754639 0 0.0 0 0.0 0 0.0 -0.3328806161880493 0.24741899967193604 0.7576038837432861 -0.7921384572982788 -0.2150944471359253 0.5711538791656494 0.7047654390335083 0.8518280386924744 4 0.9998233914375305 0 0.0 0 0.0 0 0.0 -0.237876296043396 0.2133294939994812 0.641486644744873 0.3396099805831909 0.47352519631385803 -0.8126468658447266 0.8830041289329529 0.3463095426559448 4 0.9994219541549683 0 0.0 0 0.0 0 0.0 -0.237876296043396 0.37244415283203125 0.7143435478210449 0.4520706832408905 0.5877559781074524 -0.6709189414978027 0.873521625995636 0.25355786085128784 4 1.0000070333480835 0 0.0 0 0.0 0 0.0 -0.20932167768478394 0.2829176187515259 0.7541635036468506 0.9013641476631165 -0.05499435216188431 0.4294869899749756 0.9167553186416626 0.2833555042743683 4 0.9999198317527771 0 0.0 0 0.0 0 0.0 -0.3276984691619873 0.20788490772247314 0.6544501781463623 -0.7152317762374878 0.3708914518356323 -0.5923337340354919 0.7646296620368958 0.13306954503059387 4 0.9982490539550781 0 0.0 0 0.0 0 0.0 -0.3328806161880493 0.17843002080917358 0.734142541885376 -0.8033692240715027 -0.14041566848754883 0.5786614418029785 0.7528762221336365 0.10685840249061584 4 0.9993991851806641 0 0.0 0 0.0 0 0.0 -0.3328806161880493 0.24741899967193604 0.7576038837432861 -0.7921384572982788 -0.2150944471359253 0.5711538791656494 0.773402750492096 0.07818431407213211 4 0.9998233914375305 0 0.0 0 0.0 0 0.0 -0.20780110359191895 0.12533944845199585 0.2807978391647339 -0.5116122961044312 0.844325065612793 0.1590929925441742 0.793588399887085 0.3341623842716217 0 0.6718023419380188 4 0.25894609093666077 5 0.0418415404856205 0 0.0 -0.2891288995742798 -0.053497374057769775 0.22732973098754883 -0.9860530495643616 -0.06204412877559662 -0.15433210134506226 0.7061302661895752 0.3902425765991211 0 0.6697622537612915 4 0.28313446044921875 5 0.02448401227593422 0 0.0 -0.3311045169830322 -0.06117776036262512 0.35713791847229004 -0.9543748497962952 -0.013000885024666786 -0.29825738072395325 0.6850048899650574 0.3302666246891022 4 0.6649124026298523 0 0.31008967757225037 0 0.0 0 0.0 -0.3468945026397705 0.06105288863182068 0.6569516658782959 -0.9636219143867493 -0.16562394797801971 0.20972320437431335 0.6956770420074463 0.7410318851470947 4 0.9868455529212952 0 0.0 0 0.0 0 0.0 -0.3541121482849121 -0.07419586181640625 0.4291270971298218 -0.9666127562522888 -0.2230903059244156 -0.125919371843338 0.6715637445449829 0.6103150844573975 4 0.834575891494751 0 0.14992909133434296 0 0.0 0 0.0 -0.30187129974365234 -0.08480963110923767 0.619861364364624 -0.5957213044166565 -0.6205328702926636 0.5099032521247864 0.7216191291809082 0.6659771203994751 4 0.9709039330482483 0 0.0 0 0.0 0 0.0 -0.3541121482849121 -0.07419586181640625 0.4291270971298218 -0.9666127562522888 -0.2230903059244156 -0.125919371843338 0.6707702279090881 0.29945147037506104 4 0.834575891494751 0 0.14992909133434296 0 0.0 0 0.0 -0.3469996452331543 0.10634586215019226 0.5646698474884033 -0.7864314913749695 0.5786614418029785 -0.21585741639137268 0.7268060445785522 0.19475699961185455 4 0.9651960134506226 0 0.011369410902261734 0 0.0 0 0.0 -0.25187551975250244 0.12372738122940063 0.40594351291656494 -0.32880643010139465 0.9301126003265381 -0.16360972821712494 0.7734473347663879 0.27408310770988464 4 0.7090063691139221 0 0.2557307779788971 0 0.0 0 0.0 -0.3403736352920532 0.3993680477142334 0.7714123725891113 -0.6911221742630005 0.7172459959983826 0.08874782919883728 0.8158060908317566 0.02945329248905182 4 0.9999796152114868 0 0.0 0 0.0 0 0.0 -0.26705384254455566 0.41719162464141846 0.7832803726196289 0.14835047721862793 0.9023407697677612 0.4046449065208435 0.8518726229667664 0.03330334648489952 4 0.9999954104423523 0 0.0 0 0.0 0 0.0 -0.237876296043396 0.37244415283203125 0.7143435478210449 0.4520706832408905 0.5877559781074524 -0.6709189414978027 0.8513078689575195 0.07979519665241241 4 1.0000070333480835 0 0.0 0 0.0 0 0.0 -0.237876296043396 0.37244415283203125 0.7143435478210449 0.4520706832408905 0.5877559781074524 -0.6709189414978027 0.873521625995636 0.25355786085128784 4 1.0000070333480835 0 0.0 0 0.0 0 0.0 -0.26705384254455566 0.41719162464141846 0.7832803726196289 0.14835047721862793 0.9023407697677612 0.4046449065208435 0.8807538151741028 0.21484346687793732 4 0.9999954104423523 0 0.0 0 0.0 0 0.0 -0.22349166870117188 0.37734532356262207 0.784529447555542 0.7459639310836792 0.3484298288822174 0.5675222277641296 0.9024268984794617 0.2320421040058136 4 0.9999761581420898 0 0.0 0 0.0 0 0.0 -0.34603846073150635 0.34535515308380127 0.7890980243682861 -0.7636646628379822 0.0001831110566854477 0.6455580592155457 0.7970283031463623 0.03577974811196327 4 0.9999548196792603 0 0.0 0 0.0 0 0.0 -0.3403736352920532 0.3993680477142334 0.7714123725891113 -0.6911221742630005 0.7172459959983826 0.08874782919883728 0.8158060908317566 0.02945329248905182 4 0.9999796152114868 0 0.0 0 0.0 0 0.0 -0.3276984691619873 0.2997403144836426 0.701850414276123 -0.7264320850372314 0.28260138630867004 -0.6263924241065979 0.7918135523796082 0.08813752979040146 4 0.999759316444397 0 0.0 0 0.0 0 0.0 -0.2844879627227783 0.30941593647003174 0.7897307872772217 0.059114351868629456 -0.191625714302063 0.9796746969223022 0.7294446229934692 0.8867914080619812 4 0.9999726414680481 0 0.0 0 0.0 0 0.0 -0.34603846073150635 0.34535515308380127 0.7890980243682861 -0.7636646628379822 0.0001831110566854477 0.6455580592155457 0.6966750025749207 0.9037923216819763 4 0.9999548196792603 0 0.0 0 0.0 0 0.0 -0.3328806161880493 0.24741899967193604 0.7576038837432861 -0.7921384572982788 -0.2150944471359253 0.5711538791656494 0.7047654390335083 0.8518280386924744 4 0.9998233914375305 0 0.0 0 0.0 0 0.0 -0.20932167768478394 0.2829176187515259 0.7541635036468506 0.9013641476631165 -0.05499435216188431 0.4294869899749756 0.7640476226806641 0.8615762591362 4 0.9999198317527771 0 0.0 0 0.0 0 0.0 -0.22349166870117188 0.37734532356262207 0.784529447555542 0.7459639310836792 0.3484298288822174 0.5675222277641296 0.755506694316864 0.9117282629013062 4 0.9999761581420898 0 0.0 0 0.0 0 0.0 -0.2844879627227783 0.30941593647003174 0.7897307872772217 0.059114351868629456 -0.191625714302063 0.9796746969223022 0.7294446229934692 0.8867914080619812 4 0.9999726414680481 0 0.0 0 0.0 0 0.0 -0.22349166870117188 0.37734532356262207 0.784529447555542 0.7459639310836792 0.3484298288822174 0.5675222277641296 0.755506694316864 0.9117282629013062 4 0.9999761581420898 0 0.0 0 0.0 0 0.0 -0.26705384254455566 0.41719162464141846 0.7832803726196289 0.14835047721862793 0.9023407697677612 0.4046449065208435 0.7314229607582092 0.9295790791511536 4 0.9999954104423523 0 0.0 0 0.0 0 0.0 -0.2844879627227783 0.30941593647003174 0.7897307872772217 0.059114351868629456 -0.191625714302063 0.9796746969223022 0.7294446229934692 0.8867914080619812 4 0.9999726414680481 0 0.0 0 0.0 0 0.0 -0.26705384254455566 0.41719162464141846 0.7832803726196289 0.14835047721862793 0.9023407697677612 0.4046449065208435 0.7314229607582092 0.9295790791511536 4 0.9999954104423523 0 0.0 0 0.0 0 0.0 -0.3403736352920532 0.3993680477142334 0.7714123725891113 -0.6911221742630005 0.7172459959983826 0.08874782919883728 0.6943598985671997 0.9206492900848389 4 0.9999796152114868 0 0.0 0 0.0 0 0.0 -0.34603846073150635 0.34535515308380127 0.7890980243682861 -0.7636646628379822 0.0001831110566854477 0.6455580592155457 0.6966750025749207 0.9037923216819763 4 0.9999548196792603 0 0.0 0 0.0 0 0.0 -0.2691516876220703 0.09592822194099426 0.7350804805755615 -0.007080294191837311 -0.13916440308094025 0.9902340769767761 0.7421389222145081 0.7785028219223022 4 0.9980854392051697 0 0.0 0 0.0 0 0.0 -0.3028668165206909 0.03667032718658447 0.7283434867858887 -0.4055604636669159 -0.3405865728855133 0.8482314348220825 0.7277485728263855 0.7524433732032776 4 1.0068565607070923 0 0.0 0 0.0 0 0.0 -0.19527888298034668 0.014238350093364716 0.7056961059570312 0.3719595968723297 -0.17993712425231934 0.9106112718582153 0.779891848564148 0.7320565581321716 4 0.958198606967926 0 0.0 0 0.0 0 0.0 -0.09442317485809326 -0.08681789040565491 0.6793560981750488 0.3274635970592499 -0.27362895011901855 0.904354989528656 0.5895189642906189 0.03625130653381348 4 0.8207167387008667 0 0.10588592290878296 2 0.07276903092861176 0 0.0 0.0 -0.03274005651473999 0.5830428600311279 0.0 0.3660695254802704 0.9305703639984131 0.6381930708885193 0.0952436700463295 0 0.3733152747154236 4 0.3145773410797119 2 0.31029725074768066 0 0.0 -0.16343510150909424 0.09151619672775269 0.6089448928833008 0.6315500140190125 0.747611939907074 0.2053590565919876 0.5441842675209045 0.12299907207489014 4 0.9427136182785034 0 0.02507808618247509 0 0.0 0 0.0 -0.15126758813858032 -0.20477783679962158 0.5203018188476562 -0.16193121671676636 -0.9197363257408142 0.3574938178062439 0.7911576628684998 0.5780675411224365 4 0.6618149876594543 0 0.24621523916721344 2 0.08992583304643631 0 0.0 -0.09442317485809326 -0.08681789040565491 0.6793560981750488 0.3274635970592499 -0.27362895011901855 0.904354989528656 0.8325487375259399 0.6775317192077637 4 0.8207167387008667 0 0.10588592290878296 2 0.07276903092861176 0 0.0 -0.30187129974365234 -0.08480963110923767 0.619861364364624 -0.5957213044166565 -0.6205328702926636 0.5099032521247864 0.7216191291809082 0.6659771203994751 4 0.9709039330482483 0 0.0 0 0.0 0 0.0 -0.2433398962020874 -0.18356812000274658 0.4825398921966553 -0.504165768623352 -0.8324533700942993 0.2297738641500473 0.7394121289253235 0.5778254270553589 4 0.7843207120895386 0 0.1828809678554535 2 0.009385161101818085 0 0.0 -0.30187129974365234 -0.08480963110923767 0.619861364364624 -0.5957213044166565 -0.6205328702926636 0.5099032521247864 0.7216191291809082 0.6659771203994751 4 0.9709039330482483 0 0.0 0 0.0 0 0.0 -0.3541121482849121 -0.07419586181640625 0.4291270971298218 -0.9666127562522888 -0.2230903059244156 -0.125919371843338 0.6715637445449829 0.6103150844573975 4 0.834575891494751 0 0.14992909133434296 0 0.0 0 0.0 -0.24950921535491943 -0.1970342993736267 0.3751683235168457 -0.49635303020477295 -0.861873209476471 -0.10370189696550369 0.1934516727924347 0.8448641896247864 4 0.6294618248939514 0 0.3361990749835968 2 0.005392234772443771 0 0.0 -0.3541121482849121 -0.07419586181640625 0.4291270971298218 -0.9666127562522888 -0.2230903059244156 -0.125919371843338 0.11863873153924942 0.8262776136398315 4 0.834575891494751 0 0.14992909133434296 0 0.0 0 0.0 -0.3311045169830322 -0.06117776036262512 0.35713791847229004 -0.9543748497962952 -0.013000885024666786 -0.29825738072395325 0.13535627722740173 0.7921632528305054 4 0.6649124026298523 0 0.31008967757225037 0 0.0 0 0.0 -0.2483149766921997 -0.1659679412841797 0.2751126289367676 -0.6037476658821106 -0.766502857208252 -0.21887874603271484 0.1998605728149414 0.7935872673988342 0 0.618188202381134 4 0.3514956831932068 0 0.0 0 0.0 -0.3311045169830322 -0.06117776036262512 0.35713791847229004 -0.9543748497962952 -0.013000885024666786 -0.29825738072395325 0.13535627722740173 0.7921632528305054 4 0.6649124026298523 0 0.31008967757225037 0 0.0 0 0.0 -0.2891288995742798 -0.053497374057769775 0.22732973098754883 -0.9860530495643616 -0.06204412877559662 -0.15433210134506226 0.16813310980796814 0.7361131310462952 0 0.6697622537612915 4 0.28313446044921875 5 0.02448401227593422 0 0.0 -0.2333071231842041 -0.14518868923187256 0.12986749410629272 -0.6191290020942688 -0.7353739738464355 -0.27536851167678833 0.21926060318946838 0.7273061871528625 0 0.8546450138092041 4 0.10561978816986084 5 0.005903564393520355 0 0.0 0.0 -0.17877912521362305 0.11906552314758301 0.0 -0.9352397322654724 -0.35392314195632935 0.3381052017211914 0.7297746539115906 0 0.9514539241790771 0 0.0 0 0.0 0 0.0 0.0 -0.22177386283874512 0.21981686353683472 0.0 -0.982146680355072 -0.18799401819705963 0.33400920033454895 0.7854426503181458 0 0.9121978878974915 4 0.0331408865749836 2 0.0324675627052784 0 0.0 0.0 -0.2242426872253418 0.35177063941955566 0.0 -0.999267578125 -0.03799554333090782 0.3204757869243622 0.8396906852722168 0 0.7614060640335083 4 0.11837860941886902 2 0.11738711595535278 0 0.0 -0.24950921535491943 -0.1970342993736267 0.3751683235168457 -0.49635303020477295 -0.861873209476471 -0.10370189696550369 0.1934516727924347 0.8448641896247864 4 0.6294618248939514 0 0.3361990749835968 2 0.005392234772443771 0 0.0 -0.2483149766921997 -0.1659679412841797 0.2751126289367676 -0.6037476658821106 -0.766502857208252 -0.21887874603271484 0.1998605728149414 0.7935872673988342 0 0.618188202381134 4 0.3514956831932068 0 0.0 0 0.0 -0.24950921535491943 -0.1970342993736267 0.3751683235168457 -0.49635303020477295 -0.861873209476471 -0.10370189696550369 0.1934516727924347 0.8448641896247864 4 0.6294618248939514 0 0.3361990749835968 2 0.005392234772443771 0 0.0 0.0 -0.2242426872253418 0.35177063941955566 0.0 -0.999267578125 -0.03799554333090782 0.3204757869243622 0.8396906852722168 0 0.7614060640335083 4 0.11837860941886902 2 0.11738711595535278 0 0.0 -0.15126758813858032 -0.20477783679962158 0.5203018188476562 -0.16193121671676636 -0.9197363257408142 0.3574938178062439 0.22674739360809326 0.9042510390281677 4 0.6618149876594543 0 0.24621523916721344 2 0.08992583304643631 0 0.0 0.0 -0.2242426872253418 0.35177063941955566 0.0 -0.999267578125 -0.03799554333090782 0.3204757869243622 0.8396906852722168 0 0.7614060640335083 4 0.11837860941886902 2 0.11738711595535278 0 0.0 0.0 -0.2221187949180603 0.49811649322509766 0.0 -0.9373455047607422 0.3483687937259674 0.30472859740257263 0.8981705904006958 0 0.5169974565505981 4 0.24156785011291504 2 0.23979748785495758 0 0.0 -0.15126758813858032 -0.20477783679962158 0.5203018188476562 -0.16193121671676636 -0.9197363257408142 0.3574938178062439 0.22674739360809326 0.9042510390281677 4 0.6618149876594543 0 0.24621523916721344 2 0.08992583304643631 0 0.0 -0.20940327644348145 0.18806850910186768 0.10748907923698425 -0.6282540559768677 0.6898098587989807 0.35978269577026367 0.8133400082588196 0.3891247510910034 0 0.6928527355194092 5 0.24366505444049835 4 0.0467214398086071 0 0.0 -0.1905134916305542 0.2867305278778076 0.004207689315080643 -0.2593463063240051 0.6273384690284729 0.7342753410339355 0.8518726229667664 0.40882110595703125 5 0.7955154776573181 0 0.17753516137599945 0 0.0 0 0.0 -0.25873374938964844 0.14417153596878052 -0.10946205258369446 -0.7939695119857788 -0.46391186118125916 -0.39286476373672485 0.7813736200332642 0.48258087038993835 5 0.742128312587738 0 0.24162344634532928 0 0.0 0 0.0 -0.25873374938964844 0.14417153596878052 -0.10946205258369446 -0.7939695119857788 -0.46391186118125916 -0.39286476373672485 0.18831117451190948 0.5307038426399231 5 0.742128312587738 0 0.24162344634532928 0 0.0 0 0.0 -0.1772594451904297 0.11724525690078735 -0.1825990080833435 -0.44734030961990356 -0.4271370470523834 -0.7857600450515747 0.23943009972572327 0.508765459060669 0 0.679053783416748 5 0.28637537360191345 1 0.0027251355350017548 0 0.0 -0.1994549036026001 -0.007807791233062744 -0.07830172777175903 -0.5622425079345703 -0.5634021759033203 -0.6053346395492554 0.23669739067554474 0.5947647094726562 0 0.8589512705802917 5 0.11174113303422928 0 0.0 0 0.0 0.0 0.219041109085083 0.11931818723678589 0.0 0.8301644921302795 0.557481586933136 0.642014741897583 0.37345194816589355 0 0.8959391713142395 5 0.029438931494951248 3 0.028147835284471512 0 0.0 0.0 0.317891001701355 0.011525623500347137 0.0 0.8030030131340027 0.5959654450416565 0.6397891640663147 0.4510643780231476 0 0.7890903353691101 5 0.08665546774864197 3 0.08514407277107239 1 0.019098643213510513 -0.1905134916305542 0.2867305278778076 0.004207689315080643 -0.2593463063240051 0.6273384690284729 0.7342753410339355 0.545678436756134 0.4428918659687042 5 0.7955154776573181 0 0.17753516137599945 0 0.0 0 0.0 -0.1772594451904297 0.11724525690078735 -0.1825990080833435 -0.44734030961990356 -0.4271370470523834 -0.7857600450515747 0.23943009972572327 0.508765459060669 0 0.679053783416748 5 0.28637537360191345 1 0.0027251355350017548 0 0.0 0.0 0.09937161207199097 -0.21314752101898193 0.0 -0.5446943640708923 -0.8385875821113586 0.3309190571308136 0.4989504814147949 0 0.9125122427940369 5 0.011346809566020966 3 0.010605178773403168 1 0.0003351755440235138 0.0 -0.05573540925979614 -0.1027672290802002 0.0 -0.7233496904373169 -0.6904507875442505 0.3428180515766144 0.5973702669143677 0 0.949096143245697 0 0.0 0 0.0 0 0.0 -0.1905134916305542 0.2867305278778076 0.004207689315080643 -0.2593463063240051 0.6273384690284729 0.7342753410339355 0.8839541673660278 0.6740447282791138 5 0.7955154776573181 0 0.17753516137599945 0 0.0 0 0.0 -0.2911590337753296 0.2942936420440674 0.005826227366924286 0.20746482908725739 0.4108707010746002 0.8877529501914978 0.8978860974311829 0.6235358715057373 5 0.9641268253326416 0 0.010711431503295898 0 0.0 0 0.0 -0.3247077465057373 0.1585661768913269 -0.04109635949134827 -0.06991790235042572 -0.9837946891784668 0.16495254635810852 0.9672834277153015 0.6379106640815735 5 0.9739239811897278 0 0.0 0 0.0 0 0.0 -0.25873374938964844 0.14417153596878052 -0.10946205258369446 -0.7939695119857788 -0.46391186118125916 -0.39286476373672485 0.18831117451190948 0.5307038426399231 5 0.742128312587738 0 0.24162344634532928 0 0.0 0 0.0 -0.3247077465057373 0.1585661768913269 -0.04109635949134827 -0.06991790235042572 -0.9837946891784668 0.16495254635810852 0.14707791805267334 0.5547357797622681 5 0.9739239811897278 0 0.0 0 0.0 0 0.0 -0.3432735204696655 0.26402461528778076 -0.1277342438697815 -0.573839545249939 0.09149449318647385 -0.8138371109962463 0.13124819099903107 0.48351210355758667 5 0.9874638915061951 0 0.0 0 0.0 0 0.0 -0.1905134916305542 0.2867305278778076 0.004207689315080643 -0.2593463063240051 0.6273384690284729 0.7342753410339355 0.545678436756134 0.4428918659687042 5 0.7955154776573181 0 0.17753516137599945 0 0.0 0 0.0 -0.17369681596755981 0.36367666721343994 -0.10281378030776978 -0.2631000578403473 0.9605090618133545 0.09018219262361526 0.5536576509475708 0.5132588744163513 5 0.7450196743011475 0 0.160955548286438 1 0.08608341217041016 0 0.0 -0.29355669021606445 0.34976017475128174 -0.07433450222015381 -0.23679311573505402 0.9682607650756836 -0.0796533077955246 0.49234965443611145 0.4958604872226715 5 0.9535803198814392 0 0.013973209075629711 0 0.0 0 0.0 -0.2681701183319092 0.2678663730621338 -0.16814452409744263 -0.5125888586044312 0.191473126411438 -0.8369701504707336 0.5837397575378418 0.8574127554893494 5 0.9366347789764404 0 0.04793867841362953 0 0.0 0 0.0 -0.3432735204696655 0.26402461528778076 -0.1277342438697815 -0.573839545249939 0.09149449318647385 -0.8138371109962463 0.5876299142837524 0.8122449517250061 5 0.9874638915061951 0 0.0 0 0.0 0 0.0 -0.29355669021606445 0.34976017475128174 -0.07433450222015381 -0.23679311573505402 0.9682607650756836 -0.0796533077955246 0.6434169411659241 0.8292502164840698 5 0.9535803198814392 0 0.013973209075629711 0 0.0 0 0.0 -0.2911590337753296 0.2942936420440674 0.005826227366924286 0.20746482908725739 0.4108707010746002 0.8877529501914978 0.4938306510448456 0.4439513385295868 5 0.9641268253326416 0 0.010711431503295898 0 0.0 0 0.0 -0.29355669021606445 0.34976017475128174 -0.07433450222015381 -0.23679311573505402 0.9682607650756836 -0.0796533077955246 0.49234965443611145 0.4958604872226715 5 0.9535803198814392 0 0.013973209075629711 0 0.0 0 0.0 -0.3900512456893921 0.3162165880203247 -0.022862508893013 -0.34510329365730286 0.9354228377342224 -0.07635731250047684 0.44328606128692627 0.4625326693058014 5 0.9904302954673767 0 0.0 0 0.0 0 0.0 -0.3432735204696655 0.26402461528778076 -0.1277342438697815 -0.573839545249939 0.09149449318647385 -0.8138371109962463 0.5876299142837524 0.8122449517250061 5 0.9874638915061951 0 0.0 0 0.0 0 0.0 -0.43937599658966064 0.23811864852905273 -0.05854392051696777 -0.6367992162704468 -0.09231849014759064 -0.765465259552002 0.5900217294692993 0.7481352686882019 5 0.9980949759483337 0 0.0 0 0.0 0 0.0 -0.3900512456893921 0.3162165880203247 -0.022862508893013 -0.34510329365730286 0.9354228377342224 -0.07635731250047684 0.6370754837989807 0.7687724828720093 5 0.9904302954673767 0 0.0 0 0.0 0 0.0 -0.34428489208221436 0.28179633617401123 0.046254053711891174 0.47929319739341736 0.3894161880016327 0.7865230441093445 0.8977068662643433 0.5999657511711121 5 0.9903120398521423 0 0.0 0 0.0 0 0.0 -0.3816554546356201 0.17568820714950562 0.02271178364753723 0.3256935477256775 -0.9139378070831299 0.24204230308532715 0.9494260549545288 0.6056154370307922 5 0.9991349577903748 0 0.0 0 0.0 0 0.0 -0.3247077465057373 0.1585661768913269 -0.04109635949134827 -0.06991790235042572 -0.9837946891784668 0.16495254635810852 0.9672834277153015 0.6379106640815735 5 0.9739239811897278 0 0.0 0 0.0 0 0.0 -0.3247077465057373 0.1585661768913269 -0.04109635949134827 -0.06991790235042572 -0.9837946891784668 0.16495254635810852 0.14707791805267334 0.5547357797622681 5 0.9739239811897278 0 0.0 0 0.0 0 0.0 -0.3816554546356201 0.17568820714950562 0.02271178364753723 0.3256935477256775 -0.9139378070831299 0.24204230308532715 0.11026795953512192 0.5757925510406494 5 0.9991349577903748 0 0.0 0 0.0 0 0.0 -0.43937599658966064 0.23811864852905273 -0.05854392051696777 -0.6367992162704468 -0.09231849014759064 -0.765465259552002 0.08150046318769455 0.522465169429779 5 0.9980949759483337 0 0.0 0 0.0 0 0.0 -0.43937599658966064 0.23811864852905273 -0.05854392051696777 -0.6367992162704468 -0.09231849014759064 -0.765465259552002 0.5900217294692993 0.7481352686882019 5 0.9980949759483337 0 0.0 0 0.0 0 0.0 -0.5047986507415771 0.20594364404678345 -0.004644919186830521 -0.6930753588676453 -0.20831935107707977 -0.6900539994239807 0.5881485939025879 0.7014670968055725 5 0.9997888803482056 0 0.0 0 0.0 0 0.0 -0.4554738998413086 0.2947545051574707 0.029965192079544067 -0.4450819492340088 0.8953825235366821 0.013611255213618279 0.6390498280525208 0.7233343124389648 5 0.9976549744606018 0 0.0 0 0.0 0 0.0 -0.3984619379043579 0.26093626022338867 0.08564722537994385 0.4599139392375946 0.35129857063293457 0.8154851198196411 0.9010043740272522 0.57774817943573 5 0.9975098967552185 0 0.0 0 0.0 0 0.0 -0.43023955821990967 0.157029926776886 0.06563612818717957 0.4426404535770416 -0.8844264149665833 0.14767906069755554 0.9498034119606018 0.5855746865272522 5 0.9999759197235107 0 0.0 0 0.0 0 0.0 -0.3816554546356201 0.17568820714950562 0.02271178364753723 0.3256935477256775 -0.9139378070831299 0.24204230308532715 0.9494260549545288 0.6056154370307922 5 0.9991349577903748 0 0.0 0 0.0 0 0.0 -0.3816554546356201 0.17568820714950562 0.02271178364753723 0.3256935477256775 -0.9139378070831299 0.24204230308532715 0.11026795953512192 0.5757925510406494 5 0.9991349577903748 0 0.0 0 0.0 0 0.0 -0.43023955821990967 0.157029926776886 0.06563612818717957 0.4426404535770416 -0.8844264149665833 0.14767906069755554 0.08512462675571442 0.6006276607513428 5 0.9999759197235107 0 0.0 0 0.0 0 0.0 -0.5047986507415771 0.20594364404678345 -0.004644919186830521 -0.6930753588676453 -0.20831935107707977 -0.6900539994239807 0.049123793840408325 0.5567721724510193 5 0.9997888803482056 0 0.0 0 0.0 0 0.0 -0.34428489208221436 0.28179633617401123 0.046254053711891174 0.47929319739341736 0.3894161880016327 0.7865230441093445 0.46575069427490234 0.4223727583885193 5 0.9903120398521423 0 0.0 0 0.0 0 0.0 -0.3900512456893921 0.3162165880203247 -0.022862508893013 -0.34510329365730286 0.9354228377342224 -0.07635731250047684 0.44328606128692627 0.4625326693058014 5 0.9904302954673767 0 0.0 0 0.0 0 0.0 -0.4554738998413086 0.2947545051574707 0.029965192079544067 -0.4450819492340088 0.8953825235366821 0.013611255213618279 0.4090229272842407 0.43271535634994507 5 0.9976549744606018 0 0.0 0 0.0 0 0.0 -0.1772594451904297 0.11724525690078735 -0.1825990080833435 -0.44734030961990356 -0.4271370470523834 -0.7857600450515747 0.23943009972572327 0.508765459060669 0 0.679053783416748 5 0.28637537360191345 1 0.0027251355350017548 0 0.0 -0.25873374938964844 0.14417153596878052 -0.10946205258369446 -0.7939695119857788 -0.46391186118125916 -0.39286476373672485 0.18831117451190948 0.5307038426399231 5 0.742128312587738 0 0.24162344634532928 0 0.0 0 0.0 -0.2681701183319092 0.2678663730621338 -0.16814452409744263 -0.5125888586044312 0.191473126411438 -0.8369701504707336 0.17117449641227722 0.4642834961414337 5 0.9366347789764404 0 0.04793867841362953 0 0.0 0 0.0 0.0 0.317891001701355 0.011525623500347137 0.0 0.8030030131340027 0.5959654450416565 0.6397891640663147 0.4510643780231476 0 0.7890903353691101 5 0.08665546774864197 3 0.08514407277107239 1 0.019098643213510513 0.0 0.3707171678543091 -0.08462855219841003 0.0 0.904324471950531 0.4267708361148834 0.6405338048934937 0.5089500546455383 0 0.7102694511413574 1 0.14585299789905548 5 0.07208946347236633 3 0.07045222818851471 -0.17369681596755981 0.36367666721343994 -0.10281378030776978 -0.2631000578403473 0.9605090618133545 0.09018219262361526 0.5536576509475708 0.5132588744163513 5 0.7450196743011475 0 0.160955548286438 1 0.08608341217041016 0 0.0 -0.17586100101470947 0.3179171085357666 -0.20532292127609253 -0.6381115317344666 0.3986937999725342 -0.6586504578590393 0.6007186770439148 0.9138137102127075 5 0.4061179459095001 0 0.3688215911388397 1 0.22085097432136536 0 0.0 -0.07002320885658264 0.2813262939453125 -0.2664802074432373 -0.5305337905883789 -0.30652791261672974 -0.790276825428009 0.5774428844451904 0.974776566028595 0 0.6349360942840576 1 0.3262842893600464 5 0.01936449483036995 0 0.0 -0.12932729721069336 0.17944878339767456 -0.22509831190109253 -0.36967071890830994 -0.269569993019104 -0.8891872763633728 0.5448826551437378 0.9278662204742432 0 0.75160151720047 5 0.16934442520141602 1 0.07229789346456528 0 0.0 -0.17369681596755981 0.36367666721343994 -0.10281378030776978 -0.2631000578403473 0.9605090618133545 0.09018219262361526 0.6518501043319702 0.8928941488265991 5 0.7450196743011475 0 0.160955548286438 1 0.08608341217041016 0 0.0 -0.11685270071029663 0.37915825843811035 -0.15417778491973877 -0.40092167258262634 0.9032562971115112 0.15277566015720367 0.6471365094184875 0.9334772229194641 0 0.406307578086853 1 0.29193368554115295 5 0.2888135612010956 0 0.0 -0.17586100101470947 0.3179171085357666 -0.20532292127609253 -0.6381115317344666 0.3986937999725342 -0.6586504578590393 0.6007186770439148 0.9138137102127075 5 0.4061179459095001 0 0.3688215911388397 1 0.22085097432136536 0 0.0 0.0 0.3707171678543091 -0.08462855219841003 0.0 0.904324471950531 0.4267708361148834 0.6405338048934937 0.5089500546455383 0 0.7102694511413574 1 0.14585299789905548 5 0.07208946347236633 3 0.07045222818851471 0.0 0.398445725440979 -0.14425861835479736 0.0 0.9055452346801758 0.42420727014541626 0.6413841247558594 0.5432328581809998 0 0.5077889561653137 1 0.39139166474342346 5 0.050735753029584885 3 0.04906380549073219 -0.11685270071029663 0.37915825843811035 -0.15417778491973877 -0.40092167258262634 0.9032562971115112 0.15277566015720367 0.583946704864502 0.540475606918335 0 0.406307578086853 1 0.29193368554115295 5 0.2888135612010956 0 0.0 0.0 0.2078162431716919 -0.2881510257720947 0.0 -0.4107486307621002 -0.9117404818534851 0.3223710358142853 0.43101730942726135 0 0.7689260244369507 1 0.2003297209739685 0 0.0 0 0.0 0.0 0.14566397666931152 -0.24244439601898193 0.0 -0.5614489912986755 -0.8274788856506348 0.32698339223861694 0.4710521399974823 0 0.8837517499923706 1 0.06194183975458145 5 0.0038842111825942993 3 0.003427356481552124 -0.12932729721069336 0.17944878339767456 -0.22509831190109253 -0.36967071890830994 -0.269569993019104 -0.8891872763633728 0.25760719180107117 0.4690239429473877 0 0.75160151720047 5 0.16934442520141602 1 0.07229789346456528 0 0.0 0.0 0.09937161207199097 -0.21314752101898193 0.0 -0.5446943640708923 -0.8385875821113586 0.3309190571308136 0.4989504814147949 0 0.9125122427940369 5 0.011346809566020966 3 0.010605178773403168 1 0.0003351755440235138 -0.1772594451904297 0.11724525690078735 -0.1825990080833435 -0.44734030961990356 -0.4271370470523834 -0.7857600450515747 0.23943009972572327 0.508765459060669 0 0.679053783416748 5 0.28637537360191345 1 0.0027251355350017548 0 0.0 -0.12932729721069336 0.17944878339767456 -0.22509831190109253 -0.36967071890830994 -0.269569993019104 -0.8891872763633728 0.25760719180107117 0.4690239429473877 0 0.75160151720047 5 0.16934442520141602 1 0.07229789346456528 0 0.0 -0.17586100101470947 0.3179171085357666 -0.20532292127609253 -0.6381115317344666 0.3986937999725342 -0.6586504578590393 0.21205389499664307 0.42999351024627686 5 0.4061179459095001 0 0.3688215911388397 1 0.22085097432136536 0 0.0 -0.12179547548294067 0.3854290246963501 -0.23301446437835693 -0.8996246457099915 0.39896848797798157 -0.17743460834026337 0.23082518577575684 0.39427757263183594 1 0.7106906175613403 0 0.1698828488588333 5 0.11525022983551025 0 0.0 -0.07341891527175903 0.3139185905456543 -0.28698432445526123 -0.6358226537704468 -0.38373973965644836 -0.669667661190033 0.27071312069892883 0.3962279260158539 1 0.6878011226654053 0 0.2799515724182129 5 0.008950736373662949 0 0.0 -0.07002320885658264 0.2813262939453125 -0.2664802074432373 -0.5305337905883789 -0.30652791261672974 -0.790276825428009 0.27513593435287476 0.4157503545284271 0 0.6349360942840576 1 0.3262842893600464 5 0.01936449483036995 0 0.0 -0.07341891527175903 0.3139185905456543 -0.28698432445526123 -0.6358226537704468 -0.38373973965644836 -0.669667661190033 0.27071312069892883 0.3962279260158539 1 0.6878011226654053 0 0.2799515724182129 5 0.008950736373662949 0 0.0 0.0 0.29299962520599365 -0.3292173147201538 0.0 -0.5545213222503662 -0.8321481943130493 0.3137752413749695 0.3848779797554016 1 0.7812550663948059 0 0.20431587100028992 0 0.0 0 0.0 0.0 0.398445725440979 -0.14425861835479736 0.0 0.9055452346801758 0.42420727014541626 0.6413841247558594 0.5432328581809998 0 0.5077889561653137 1 0.39139166474342346 5 0.050735753029584885 3 0.04906380549073219 0.0 0.41489994525909424 -0.18215465545654297 0.0 0.5597094893455505 0.8286690711975098 0.642014741897583 0.5646453499794006 1 0.730757474899292 0 0.21810069680213928 5 0.0014950893819332123 3 0.00030696019530296326 -0.09905996918678284 0.40596628189086914 -0.19437533617019653 -0.5630664825439453 0.7503280639648438 0.34626302123069763 0.5929415822029114 0.566311240196228 1 0.6564067006111145 0 0.20795942842960358 5 0.12716107070446014 0 0.0 -0.11685270071029663 0.37915825843811035 -0.15417778491973877 -0.40092167258262634 0.9032562971115112 0.15277566015720367 0.6471365094184875 0.9334772229194641 0 0.406307578086853 1 0.29193368554115295 5 0.2888135612010956 0 0.0 -0.09905996918678284 0.40596628189086914 -0.19437533617019653 -0.5630664825439453 0.7503280639648438 0.34626302123069763 0.6464900374412537 0.9542642831802368 1 0.6564067006111145 0 0.20795942842960358 5 0.12716107070446014 0 0.0 -0.12179547548294067 0.3854290246963501 -0.23301446437835693 -0.8996246457099915 0.39896848797798157 -0.17743460834026337 0.6237066984176636 0.9517653584480286 1 0.7106906175613403 0 0.1698828488588333 5 0.11525022983551025 0 0.0 0.0 0.6696534156799316 -0.16029703617095947 0.0 0.940275251865387 0.3403424024581909 0.3807303011417389 0.9247735738754272 1 0.9826752543449402 0 0.0 0 0.0 0 0.0 -0.05297325551509857 0.6632869243621826 -0.17042005062103271 -0.42271187901496887 0.8485671281814575 0.3181249499320984 0.40667101740837097 0.9228817820549011 1 0.983020007610321 0 0.0 0 0.0 0 0.0 -0.023262888193130493 0.648740291595459 -0.1271979808807373 -0.27558213472366333 0.8101443648338318 0.5173802971839905 0.39259374141693115 0.9457398056983948 1 0.9771129488945007 0 0.0 0 0.0 0 0.0 0.0 0.6859500408172607 -0.227411150932312 0.0 0.8990447521209717 0.4377880096435547 0.37864139676094055 0.8909733295440674 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -0.03514702618122101 0.6757450103759766 -0.23533987998962402 -0.3003937005996704 0.825434148311615 0.4778893291950226 0.39532920718193054 0.891121506690979 1 0.990458607673645 0 0.0 0 0.0 0 0.0 -0.05297325551509857 0.6632869243621826 -0.17042005062103271 -0.42271187901496887 0.8485671281814575 0.3181249499320984 0.40667101740837097 0.9228817820549011 1 0.983020007610321 0 0.0 0 0.0 0 0.0 0.0 0.6859500408172607 -0.227411150932312 0.0 0.8990447521209717 0.4377880096435547 0.37864139676094055 0.8909733295440674 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 0.0 0.7286481857299805 -0.29208290576934814 0.0 0.8584246635437012 0.5129246115684509 0.3787182867527008 0.8497394323348999 1 0.9956300258636475 0 0.0 0 0.0 0 0.0 -0.037127718329429626 0.7183771133422852 -0.2708592414855957 -0.12225715070962906 0.7812433242797852 0.6121097207069397 0.3978635370731354 0.8623329997062683 1 0.994320273399353 0 0.0 0 0.0 0 0.0 -0.07448214292526245 0.6610023975372314 -0.22847318649291992 -0.29837948083877563 0.8330942988395691 0.46571245789527893 0.41453418135643005 0.8990539312362671 1 0.9883941411972046 0 0.0 0 0.0 0 0.0 -0.05297325551509857 0.6632869243621826 -0.17042005062103271 -0.42271187901496887 0.8485671281814575 0.3181249499320984 0.40667101740837097 0.9228817820549011 1 0.983020007610321 0 0.0 0 0.0 0 0.0 -0.03514702618122101 0.6757450103759766 -0.23533987998962402 -0.3003937005996704 0.825434148311615 0.4778893291950226 0.39532920718193054 0.891121506690979 1 0.990458607673645 0 0.0 0 0.0 0 0.0 -0.037127718329429626 0.7183771133422852 -0.2708592414855957 -0.12225715070962906 0.7812433242797852 0.6121097207069397 0.3978635370731354 0.8623329997062683 1 0.994320273399353 0 0.0 0 0.0 0 0.0 -0.11437469720840454 0.7034616470336914 -0.2846221923828125 -0.12384410947561264 0.6982024312019348 0.7050996422767639 0.4353049099445343 0.8618066906929016 1 0.9938564300537109 0 0.0 0 0.0 0 0.0 -0.07567718625068665 0.6810379028320312 -0.25069737434387207 -0.19437238574028015 0.6898708939552307 0.6973174214363098 0.41558343172073364 0.883171558380127 1 0.9912397861480713 0 0.0 0 0.0 0 0.0 -0.04406014084815979 0.5062999725341797 -0.1307528018951416 -0.6033509373664856 -0.4283883273601532 0.6725974082946777 0.9375776648521423 0.05149134621024132 1 0.9309578537940979 0 0.0509604811668396 0 0.0 0 0.0 -0.019301503896713257 0.5543453693389893 -0.08724924921989441 -0.7199926972389221 0.03091524913907051 0.6932584643363953 0.963473379611969 0.025931738317012787 1 0.9545494914054871 0 0.016858559101819992 0 0.0 0 0.0 -0.03217598795890808 0.5661249160766602 -0.10826873779296875 -0.6189153790473938 -0.002288888208568096 0.7854243516921997 0.9652963876724243 0.03581248223781586 1 0.9586777091026306 0 0.010506756603717804 0 0.0 0 0.0 0.0 0.5866754055023193 -0.08073744177818298 0.0 0.20923489332199097 0.9778435826301575 0.9745243191719055 0.012592869810760021 1 0.9624937176704407 0 0.004993952810764313 0 0.0 0 0.0 -0.019301511347293854 0.6020534038543701 -0.09771808981895447 -0.5544602870941162 0.06466872245073318 0.8296762108802795 0.9800795912742615 0.024327803403139114 1 0.9663617610931396 0 0.0 0 0.0 0 0.0 -0.03217598795890808 0.5661249160766602 -0.10826873779296875 -0.6189153790473938 -0.002288888208568096 0.7854243516921997 0.9652963876724243 0.03581248223781586 1 0.9586777091026306 0 0.010506756603717804 0 0.0 0 0.0 0.0 0.6267490386962891 -0.09107580780982971 0.0 0.4541764557361603 0.8908963203430176 0.38086456060409546 0.9680102467536926 1 0.9708038568496704 0 0.0 0 0.0 0 0.0 0.0 0.6520125865936279 -0.12054771184921265 0.0 0.8378856778144836 0.5458235144615173 0.38134899735450745 0.9473562836647034 1 0.9767983555793762 0 0.0 0 0.0 0 0.0 -0.023262888193130493 0.648740291595459 -0.1271979808807373 -0.27558213472366333 0.8101443648338318 0.5173802971839905 0.39259374141693115 0.9457398056983948 1 0.9771129488945007 0 0.0 0 0.0 0 0.0 -0.019301511347293854 0.6020534038543701 -0.09771808981895447 -0.5544602870941162 0.06466872245073318 0.8296762108802795 0.9800795912742615 0.024327803403139114 1 0.9663617610931396 0 0.0 0 0.0 0 0.0 0.0 0.5866754055023193 -0.08073744177818298 0.0 0.20923489332199097 0.9778435826301575 0.9745243191719055 0.012592869810760021 1 0.9624937176704407 0 0.004993952810764313 0 0.0 0 0.0 0.0 0.6267490386962891 -0.09107580780982971 0.0 0.4541764557361603 0.8908963203430176 0.9880750775337219 0.011592945083975792 1 0.9708038568496704 0 0.0 0 0.0 0 0.0 -0.04406014084815979 0.5062999725341797 -0.1307528018951416 -0.6033509373664856 -0.4283883273601532 0.6725974082946777 0.9375776648521423 0.05149134621024132 1 0.9309578537940979 0 0.0509604811668396 0 0.0 0 0.0 -0.02722427248954773 0.4976499080657959 -0.1062207818031311 -0.5827203989028931 -0.48753318190574646 0.6501358151435852 0.9371650218963623 0.03867452219128609 1 0.927412748336792 0 0.05390864610671997 0 0.0 0 0.0 -0.019301503896713257 0.5543453693389893 -0.08724924921989441 -0.7199926972389221 0.03091524913907051 0.6932584643363953 0.963473379611969 0.025931738317012787 1 0.9545494914054871 0 0.016858559101819992 0 0.0 0 0.0 -0.02722427248954773 0.4976499080657959 -0.1062207818031311 -0.5827203989028931 -0.48753318190574646 0.6501358151435852 0.9371650218963623 0.03867452219128609 1 0.927412748336792 0 0.05390864610671997 0 0.0 0 0.0 0.0 0.4937889575958252 -0.09715571999549866 0.0 -0.6279793977737427 0.7781914472579956 0.9327072501182556 0.023990735411643982 1 0.9297935366630554 0 0.05221788212656975 0 0.0 0 0.0 -0.019301503896713257 0.5543453693389893 -0.08724924921989441 -0.7199926972389221 0.03091524913907051 0.6932584643363953 0.963473379611969 0.025931738317012787 1 0.9545494914054871 0 0.016858559101819992 0 0.0 0 0.0 -0.0992489755153656 0.6243481636047363 -0.1760026216506958 -0.6385387778282166 0.5357829332351685 0.5523850321769714 0.42691096663475037 0.9333289265632629 1 0.9787691831588745 0 0.0 0 0.0 0 0.0 -0.05297325551509857 0.6632869243621826 -0.17042005062103271 -0.42271187901496887 0.8485671281814575 0.3181249499320984 0.40667101740837097 0.9228817820549011 1 0.983020007610321 0 0.0 0 0.0 0 0.0 -0.07448214292526245 0.6610023975372314 -0.22847318649291992 -0.29837948083877563 0.8330942988395691 0.46571245789527893 0.41453418135643005 0.8990539312362671 1 0.9883941411972046 0 0.0 0 0.0 0 0.0 -0.04604083299636841 0.629746675491333 -0.11427515745162964 -0.5255287289619446 0.4360484480857849 0.730491042137146 0.4033519923686981 0.9574975967407227 1 0.9731501340866089 0 0.0 0 0.0 0 0.0 -0.023262888193130493 0.648740291595459 -0.1271979808807373 -0.27558213472366333 0.8101443648338318 0.5173802971839905 0.39259374141693115 0.9457398056983948 1 0.9771129488945007 0 0.0 0 0.0 0 0.0 -0.05297325551509857 0.6632869243621826 -0.17042005062103271 -0.42271187901496887 0.8485671281814575 0.3181249499320984 0.40667101740837097 0.9228817820549011 1 0.983020007610321 0 0.0 0 0.0 0 0.0 -0.03217598795890808 0.5661249160766602 -0.10826873779296875 -0.6189153790473938 -0.002288888208568096 0.7854243516921997 0.9652963876724243 0.03581248223781586 1 0.9586777091026306 0 0.010506756603717804 0 0.0 0 0.0 -0.019301511347293854 0.6020534038543701 -0.09771808981895447 -0.5544602870941162 0.06466872245073318 0.8296762108802795 0.9800795912742615 0.024327803403139114 1 0.9663617610931396 0 0.0 0 0.0 0 0.0 -0.04604083299636841 0.629746675491333 -0.11427515745162964 -0.5255287289619446 0.4360484480857849 0.730491042137146 0.9921565055847168 0.03848811611533165 1 0.9731501340866089 0 0.0 0 0.0 0 0.0 -0.08664500713348389 0.49995994567871094 -0.15126699209213257 -0.5456098914146423 -0.5877254605293274 0.5973693132400513 0.9379087686538696 0.07691145688295364 1 0.9311727285385132 0 0.04860582575201988 0 0.0 0 0.0 -0.04406014084815979 0.5062999725341797 -0.1307528018951416 -0.6033509373664856 -0.4283883273601532 0.6725974082946777 0.9375776648521423 0.05149134621024132 1 0.9309578537940979 0 0.0509604811668396 0 0.0 0 0.0 -0.059905678033828735 0.5519924163818359 -0.12115323543548584 -0.43357646465301514 -0.15253150463104248 0.8880886435508728 0.9615859389305115 0.05308860167860985 1 0.954840362071991 0 0.015901487320661545 0 0.0 0 0.0 -0.09060636162757874 0.555675745010376 -0.14083874225616455 -0.6668904423713684 -0.021729178726673126 0.7448042035102844 0.9639025330543518 0.07183090597391129 1 0.9576939344406128 0 0.010987870395183563 0 0.0 0 0.0 -0.059905678033828735 0.5519924163818359 -0.12115323543548584 -0.43357646465301514 -0.15253150463104248 0.8880886435508728 0.9615859389305115 0.05308860167860985 1 0.954840362071991 0 0.015901487320661545 0 0.0 0 0.0 -0.04604083299636841 0.629746675491333 -0.11427515745162964 -0.5255287289619446 0.4360484480857849 0.730491042137146 0.9921565055847168 0.03848811611533165 1 0.9731501340866089 0 0.0 0 0.0 0 0.0 -0.12900519371032715 0.580592155456543 -0.1809338927268982 -0.7435224652290344 0.13650929927825928 0.6545915007591248 0.9710297584533691 0.09706727415323257 1 0.9719146490097046 0 0.0 0 0.0 0 0.0 -0.15695953369140625 0.5213019847869873 -0.23152399063110352 -0.7372050881385803 -0.5348063707351685 0.41285440325737 0.9393715262413025 0.12667523324489594 1 0.9635127186775208 0 0.0 0 0.0 0 0.0 -0.08664500713348389 0.49995994567871094 -0.15126699209213257 -0.5456098914146423 -0.5877254605293274 0.5973693132400513 0.9379087686538696 0.07691145688295364 1 0.9311727285385132 0 0.04860582575201988 0 0.0 0 0.0 -0.17542767524719238 0.5399246215820312 -0.2481163740158081 -0.886593222618103 -0.28980377316474915 0.36039307713508606 0.9461795687675476 0.1376567780971527 1 0.9722244739532471 0 0.0 0 0.0 0 0.0 -0.15695953369140625 0.5213019847869873 -0.23152399063110352 -0.7372050881385803 -0.5348063707351685 0.41285440325737 0.9393715262413025 0.12667523324489594 1 0.9635127186775208 0 0.0 0 0.0 0 0.0 -0.12900519371032715 0.580592155456543 -0.1809338927268982 -0.7435224652290344 0.13650929927825928 0.6545915007591248 0.9710297584533691 0.09706727415323257 1 0.9719146490097046 0 0.0 0 0.0 0 0.0 0.0 0.7655167579650879 -0.3776092529296875 0.0 0.9911190867424011 0.13275551795959473 0.37730279564857483 0.8014988899230957 1 0.9984956979751587 0 0.0 0 0.0 0 0.0 -0.059245407581329346 0.759354829788208 -0.3721191883087158 -0.1420636624097824 0.9840388298034668 0.10684530436992645 0.40722841024398804 0.8062321543693542 1 0.9981564879417419 0 0.0 0 0.0 0 0.0 -0.041914358735084534 0.7521989345550537 -0.3280456066131592 -0.06817834824323654 0.921597957611084 0.3820917308330536 0.40006113052368164 0.8271682858467102 1 0.9970929026603699 0 0.0 0 0.0 0 0.0 -0.059245407581329346 0.759354829788208 -0.3721191883087158 -0.1420636624097824 0.9840388298034668 0.10684530436992645 0.40722841024398804 0.8062321543693542 1 0.9981564879417419 0 0.0 0 0.0 0 0.0 0.0 0.7655167579650879 -0.3776092529296875 0.0 0.9911190867424011 0.13275551795959473 0.37730279564857483 0.8014988899230957 1 0.9984956979751587 0 0.0 0 0.0 0 0.0 0.0 0.7663571834564209 -0.4498615264892578 0.0 0.9117709994316101 -0.41062653064727783 0.3737609088420868 0.7704716324806213 1 0.9993343353271484 0 0.0 0 0.0 0 0.0 0.0 0.7286481857299805 -0.29208290576934814 0.0 0.8584246635437012 0.5129246115684509 0.3787182867527008 0.8497394323348999 1 0.9956300258636475 0 0.0 0 0.0 0 0.0 0.0 0.7441883087158203 -0.3209085464477539 0.0 0.9060335159301758 0.42320016026496887 0.37848225235939026 0.8324812054634094 1 0.9969311356544495 0 0.0 0 0.0 0 0.0 -0.041914358735084534 0.7521989345550537 -0.3280456066131592 -0.06817834824323654 0.921597957611084 0.3820917308330536 0.40006113052368164 0.8271682858467102 1 0.9970929026603699 0 0.0 0 0.0 0 0.0 -0.041914358735084534 0.7521989345550537 -0.3280456066131592 -0.06817834824323654 0.921597957611084 0.3820917308330536 0.40006113052368164 0.8271682858467102 1 0.9970929026603699 0 0.0 0 0.0 0 0.0 -0.12691903114318848 0.7287836074829102 -0.3071833848953247 -0.20764793455600739 0.8145695328712463 0.5415814518928528 0.4425181448459625 0.8441644906997681 1 0.9954788684844971 0 0.0 0 0.0 0 0.0 -0.11437469720840454 0.7034616470336914 -0.2846221923828125 -0.12384410947561264 0.6982024312019348 0.7050996422767639 0.4353049099445343 0.8618066906929016 1 0.9938564300537109 0 0.0 0 0.0 0 0.0 -0.12900519371032715 0.580592155456543 -0.1809338927268982 -0.7435224652290344 0.13650929927825928 0.6545915007591248 0.4384097158908844 0.9454826712608337 1 0.9719146490097046 0 0.0 0 0.0 0 0.0 -0.09060636162757874 0.555675745010376 -0.14083874225616455 -0.6668904423713684 -0.021729178726673126 0.7448042035102844 0.4189552068710327 0.9702762365341187 1 0.9576939344406128 0 0.010987870395183563 0 0.0 0 0.0 -0.0992489755153656 0.6243481636047363 -0.1760026216506958 -0.6385387778282166 0.5357829332351685 0.5523850321769714 0.42691096663475037 0.9333289265632629 1 0.9787691831588745 0 0.0 0 0.0 0 0.0 -0.18975555896759033 0.5741572380065918 -0.27861666679382324 -0.9336222410202026 -0.14868617057800293 0.3259071707725525 0.9549236297607422 0.14849883317947388 1 0.9830207824707031 0 0.0 0 0.0 0 0.0 -0.1536492109298706 0.6081211566925049 -0.22929680347442627 -0.7448957562446594 0.18478956818580627 0.6410412788391113 0.974439799785614 0.11739514768123627 1 0.9825789928436279 0 0.0 0 0.0 0 0.0 -0.16969645023345947 0.6551282405853271 -0.246321439743042 -0.6105228066444397 0.38544878363609314 0.6918545961380005 0.9921565055847168 0.12496611475944519 1 0.9888336658477783 0 0.0 0 0.0 0 0.0 -0.2143995761871338 0.6344926357269287 -0.3323737382888794 -0.8702353239059448 -0.09164708107709885 0.4839930534362793 0.886073887348175 0.48145270347595215 1 0.9925930500030518 0 0.0 0 0.0 0 0.0 -0.16969645023345947 0.6551282405853271 -0.246321439743042 -0.6105228066444397 0.38544878363609314 0.6918545961380005 0.8650132417678833 0.44598329067230225 1 0.9888336658477783 0 0.0 0 0.0 0 0.0 -0.1668308973312378 0.6906447410583496 -0.2779656648635864 -0.5177770256996155 0.6292916536331177 0.5795159935951233 0.8731365203857422 0.4358011484146118 1 0.9922270178794861 0 0.0 0 0.0 0 0.0 -0.1668308973312378 0.6906447410583496 -0.2779656648635864 -0.5177770256996155 0.6292916536331177 0.5795159935951233 0.46132102608680725 0.8691244125366211 1 0.9922270178794861 0 0.0 0 0.0 0 0.0 -0.11437469720840454 0.7034616470336914 -0.2846221923828125 -0.12384410947561264 0.6982024312019348 0.7050996422767639 0.4353049099445343 0.8618066906929016 1 0.9938564300537109 0 0.0 0 0.0 0 0.0 -0.12691903114318848 0.7287836074829102 -0.3071833848953247 -0.20764793455600739 0.8145695328712463 0.5415814518928528 0.4425181448459625 0.8441644906997681 1 0.9954788684844971 0 0.0 0 0.0 0 0.0 -0.12389302253723145 0.6452987194061279 -0.2239953875541687 -0.3717764914035797 0.6311227679252625 0.6807458996772766 0.4386693835258484 0.9063490033149719 1 0.9863486289978027 0 0.0 0 0.0 0 0.0 -0.16969645023345947 0.6551282405853271 -0.246321439743042 -0.6105228066444397 0.38544878363609314 0.6918545961380005 0.4616085886955261 0.8940138816833496 1 0.9888336658477783 0 0.0 0 0.0 0 0.0 -0.1536492109298706 0.6081211566925049 -0.22929680347442627 -0.7448957562446594 0.18478956818580627 0.6410412788391113 0.450658917427063 0.9162338972091675 1 0.9825789928436279 0 0.0 0 0.0 0 0.0 -0.12691903114318848 0.7287836074829102 -0.3071833848953247 -0.20764793455600739 0.8145695328712463 0.5415814518928528 0.4425181448459625 0.8441644906997681 1 0.9954788684844971 0 0.0 0 0.0 0 0.0 -0.041914358735084534 0.7521989345550537 -0.3280456066131592 -0.06817834824323654 0.921597957611084 0.3820917308330536 0.40006113052368164 0.8271682858467102 1 0.9970929026603699 0 0.0 0 0.0 0 0.0 -0.059245407581329346 0.759354829788208 -0.3721191883087158 -0.1420636624097824 0.9840388298034668 0.10684530436992645 0.40722841024398804 0.8062321543693542 1 0.9981564879417419 0 0.0 0 0.0 0 0.0 -0.07492586970329285 0.7546496391296387 -0.43943047523498535 0.1832026094198227 0.964598536491394 -0.1896420121192932 0.4114780128002167 0.779198944568634 1 0.9989303350448608 0 0.0 0 0.0 0 0.0 -0.12602776288986206 0.8367936611175537 -0.5169486999511719 0.5360575914382935 0.844019889831543 0.014984588138759136 0.4399544298648834 0.7201979756355286 1 0.9980955123901367 0 0.0 0 0.0 0 0.0 -0.15930330753326416 0.8070216178894043 -0.5146346092224121 -0.2629169523715973 0.6476333141326904 0.7151402235031128 0.4546871483325958 0.7309730052947998 1 0.998006284236908 0 0.0 0 0.0 0 0.0 -0.17808693647384644 0.7106759548187256 -0.3287475109100342 -0.5918454527854919 0.7044282555580139 0.39173558354377747 0.46606069803237915 0.8411576151847839 1 0.995280921459198 0 0.0 0 0.0 0 0.0 -0.23513078689575195 0.6938152313232422 -0.4137706756591797 -0.09668263792991638 0.8894924521446228 0.4465163052082062 0.48952001333236694 0.8107777237892151 1 0.9962413311004639 0 0.0 0 0.0 0 0.0 -0.2714434862136841 0.6815202236175537 -0.37427401542663574 -0.8992888927459717 0.2068544626235962 0.38532671332359314 0.5090063214302063 0.8317936658859253 1 0.9954916834831238 0 0.0 0 0.0 0 0.0 -0.23513078689575195 0.6938152313232422 -0.4137706756591797 -0.09668263792991638 0.8894924521446228 0.4465163052082062 0.48952001333236694 0.8107777237892151 1 0.9962413311004639 0 0.0 0 0.0 0 0.0 -0.2505803108215332 0.7695996761322021 -0.48949456214904785 0.1833857297897339 0.7009491324424744 0.6891995072364807 0.4994630813598633 0.7543298602104187 1 0.9975656867027283 0 0.0 0 0.0 0 0.0 -0.3023422956466675 0.7849597930908203 -0.4707658290863037 -0.809015154838562 0.40089112520217896 0.4297921657562256 0.527910053730011 0.7577385902404785 1 0.9974499344825745 0 0.0 0 0.0 0 0.0 -0.13420909643173218 0.7470312118530273 -0.36113905906677246 -0.2852870225906372 0.9150669574737549 0.2850123643875122 0.44494444131851196 0.8153911232948303 1 0.9972430467605591 0 0.0 0 0.0 0 0.0 -0.19472473859786987 0.7452795505523682 -0.4596238136291504 -0.36835840344429016 0.7375103235244751 0.5659962892532349 0.47066688537597656 0.7744562029838562 1 0.9974808096885681 0 0.0 0 0.0 0 0.0 -0.23513078689575195 0.6938152313232422 -0.4137706756591797 -0.09668263792991638 0.8894924521446228 0.4465163052082062 0.48952001333236694 0.8107777237892151 1 0.9962413311004639 0 0.0 0 0.0 0 0.0 -0.2505803108215332 0.7695996761322021 -0.48949456214904785 0.1833857297897339 0.7009491324424744 0.6891995072364807 0.4994630813598633 0.7543298602104187 1 0.9975656867027283 0 0.0 0 0.0 0 0.0 -0.23513078689575195 0.6938152313232422 -0.4137706756591797 -0.09668263792991638 0.8894924521446228 0.4465163052082062 0.48952001333236694 0.8107777237892151 1 0.9962413311004639 0 0.0 0 0.0 0 0.0 -0.19472473859786987 0.7452795505523682 -0.4596238136291504 -0.36835840344429016 0.7375103235244751 0.5659962892532349 0.47066688537597656 0.7744562029838562 1 0.9974808096885681 0 0.0 0 0.0 0 0.0 -0.15930330753326416 0.8070216178894043 -0.5146346092224121 -0.2629169523715973 0.6476333141326904 0.7151402235031128 0.4546871483325958 0.7309730052947998 1 0.998006284236908 0 0.0 0 0.0 0 0.0 -0.19472473859786987 0.7745609283447266 -0.48571276664733887 -0.06698812544345856 0.6877346038818359 0.7228308916091919 0.47163125872612 0.7539528608322144 1 0.9977116584777832 0 0.0 0 0.0 0 0.0 -0.19472473859786987 0.7452795505523682 -0.4596238136291504 -0.36835840344429016 0.7375103235244751 0.5659962892532349 0.47066688537597656 0.7744562029838562 1 0.9974808096885681 0 0.0 0 0.0 0 0.0 -0.15930330753326416 0.8070216178894043 -0.5146346092224121 -0.2629169523715973 0.6476333141326904 0.7151402235031128 0.4546871483325958 0.7309730052947998 1 0.998006284236908 0 0.0 0 0.0 0 0.0 -0.2460576295852661 0.8691680431365967 -0.5895872116088867 0.0476393923163414 0.5283669829368591 0.8476516008377075 0.49987420439720154 0.6797340512275696 1 0.9978271722793579 0 0.0 0 0.0 0 0.0 -0.2505803108215332 0.7695996761322021 -0.48949456214904785 0.1833857297897339 0.7009491324424744 0.6891995072364807 0.4994630813598633 0.7543298602104187 1 0.9975656867027283 0 0.0 0 0.0 0 0.0 -0.29834794998168945 0.8586046695709229 -0.544276237487793 -0.7876216769218445 0.5459151268005371 0.2855921983718872 0.527910053730011 0.7027824521064758 1 0.997727632522583 0 0.0 0 0.0 0 0.0 -0.3023422956466675 0.7849597930908203 -0.4707658290863037 -0.809015154838562 0.40089112520217896 0.4297921657562256 0.527910053730011 0.7577385902404785 1 0.9974499344825745 0 0.0 0 0.0 0 0.0 -0.2505803108215332 0.7695996761322021 -0.48949456214904785 0.1833857297897339 0.7009491324424744 0.6891995072364807 0.4994630813598633 0.7543298602104187 1 0.9975656867027283 0 0.0 0 0.0 0 0.0 -0.2947826385498047 0.9091815948486328 -0.5893387794494629 -0.82534259557724 0.5525681376457214 0.11593981832265854 0.5277626514434814 0.6673424243927002 1 0.9977961778640747 0 0.0 0 0.0 0 0.0 -0.29834794998168945 0.8586046695709229 -0.544276237487793 -0.7876216769218445 0.5459151268005371 0.2855921983718872 0.527910053730011 0.7027824521064758 1 0.997727632522583 0 0.0 0 0.0 0 0.0 -0.2460576295852661 0.8691680431365967 -0.5895872116088867 0.0476393923163414 0.5283669829368591 0.8476516008377075 0.49987420439720154 0.6797340512275696 1 0.9978271722793579 0 0.0 0 0.0 0 0.0 -0.20446312427520752 0.9136180877685547 -0.5932917594909668 0.4698324501514435 0.8652912974357605 -0.1745048314332962 0.48197782039642334 0.6635977029800415 1 0.9978581666946411 0 0.0 0 0.0 0 0.0 -0.2460576295852661 0.8691680431365967 -0.5895872116088867 0.0476393923163414 0.5283669829368591 0.8476516008377075 0.49987420439720154 0.6797340512275696 1 0.9978271722793579 0 0.0 0 0.0 0 0.0 -0.15930330753326416 0.8070216178894043 -0.5146346092224121 -0.2629169523715973 0.6476333141326904 0.7151402235031128 0.4546871483325958 0.7309730052947998 1 0.998006284236908 0 0.0 0 0.0 0 0.0 -0.12602776288986206 0.8367936611175537 -0.5169486999511719 0.5360575914382935 0.844019889831543 0.014984588138759136 0.9544497728347778 0.7932650446891785 1 0.9980955123901367 0 0.0 0 0.0 0 0.0 -0.07492586970329285 0.7546496391296387 -0.43943047523498535 0.1832026094198227 0.964598536491394 -0.1896420121192932 0.9544497132301331 0.8589244484901428 1 0.9989303350448608 0 0.0 0 0.0 0 0.0 -0.08317875862121582 0.7046983242034912 -0.4855692386627197 0.20276497304439545 0.3567918837070465 -0.9118930697441101 0.9190778136253357 0.8595334887504578 1 0.9991375803947449 0 0.0 0 0.0 0 0.0 -0.08664500713348389 0.49995994567871094 -0.15126699209213257 -0.5456098914146423 -0.5877254605293274 0.5973693132400513 0.9379087686538696 0.07691145688295364 1 0.9311727285385132 0 0.04860582575201988 0 0.0 0 0.0 -0.07519534230232239 0.4880945682525635 -0.17792588472366333 -0.4931180775165558 -0.8037965297698975 0.3327127993106842 0.9240359663963318 0.07843738049268723 1 0.9169134497642517 0 0.05876200273633003 0 0.0 0 0.0 -0.04406014084815979 0.47633934020996094 -0.1643797755241394 -0.4945219159126282 -0.7363200783729553 0.4617755711078644 0.9167872667312622 0.06153831630945206 1 0.8977535963058472 0 0.07620814442634583 0 0.0 0 0.0 -0.18975555896759033 0.5741572380065918 -0.27861666679382324 -0.9336222410202026 -0.14868617057800293 0.3259071707725525 0.9549236297607422 0.14849883317947388 1 0.9830207824707031 0 0.0 0 0.0 0 0.0 -0.18907427787780762 0.5321424007415771 -0.3633767366409302 -0.8845484852790833 -0.4600665271282196 0.07654042541980743 0.9159454703330994 0.17071913182735443 1 0.9870247840881348 0 0.0 0 0.0 0 0.0 -0.1636601686477661 0.5023448467254639 -0.3202894926071167 -0.8532670140266418 -0.49674978852272034 0.158513143658638 0.9101097583770752 0.15139897167682648 1 0.9755609631538391 0 0.0 0 0.0 0 0.0 -0.04406014084815979 0.5062999725341797 -0.1307528018951416 -0.6033509373664856 -0.4283883273601532 0.6725974082946777 0.9375776648521423 0.05149134621024132 1 0.9309578537940979 0 0.0509604811668396 0 0.0 0 0.0 -0.04406014084815979 0.47633934020996094 -0.1643797755241394 -0.4945219159126282 -0.7363200783729553 0.4617755711078644 0.9167872667312622 0.06153831630945206 1 0.8977535963058472 0 0.07620814442634583 0 0.0 0 0.0 -0.03183332085609436 0.4725472927093506 -0.1536623239517212 -0.4668111205101013 -0.7400128245353699 0.4841761589050293 0.9156655073165894 0.053619880229234695 1 0.8963284492492676 0 0.07777944952249527 0 0.0 0 0.0 -0.1937013864517212 0.7858362197875977 -0.5540850162506104 0.2551347315311432 -0.29074984788894653 -0.922116756439209 0.9168798327445984 0.7807419896125793 1 0.9979347586631775 0 0.0 0 0.0 0 0.0 -0.25437653064727783 0.8707180023193359 -0.6044466495513916 -0.1664784699678421 -0.32941678166389465 -0.9293801784515381 0.9264681935310364 0.7198551297187805 1 0.9978139400482178 0 0.0 0 0.0 0 0.0 -0.20446312427520752 0.9136180877685547 -0.5932917594909668 0.4698324501514435 0.8652912974357605 -0.1745048314332962 0.9505891799926758 0.7223089933395386 1 0.9978581666946411 0 0.0 0 0.0 0 0.0 -0.07492586970329285 0.7546496391296387 -0.43943047523498535 0.1832026094198227 0.964598536491394 -0.1896420121192932 0.9763534069061279 0.9473682045936584 1 0.9989303350448608 0 0.0 0 0.0 0 0.0 0.0 0.7663571834564209 -0.4498615264892578 0.0 0.9117709994316101 -0.41062653064727783 0.9763534069061279 0.9866212010383606 1 0.9993343353271484 0 0.0 0 0.0 0 0.0 0.0 0.717432975769043 -0.496915340423584 0.0 0.5661183595657349 -0.8242744207382202 0.9412925839424133 0.9857740998268127 1 0.9996612071990967 0 0.0 0 0.0 0 0.0 -0.17542767524719238 0.5399246215820312 -0.2481163740158081 -0.886593222618103 -0.28980377316474915 0.36039307713508606 0.9461795687675476 0.1376567780971527 1 0.9722244739532471 0 0.0 0 0.0 0 0.0 -0.1636601686477661 0.5023448467254639 -0.3202894926071167 -0.8532670140266418 -0.49674978852272034 0.158513143658638 0.9101097583770752 0.15139897167682648 1 0.9755609631538391 0 0.0 0 0.0 0 0.0 -0.1420363187789917 0.49902892112731934 -0.265682578086853 -0.7232886552810669 -0.6007568836212158 0.3404339849948883 0.9186869263648987 0.12909665703773499 1 0.9553471803665161 0 0.009066302329301834 0 0.0 0 0.0 -0.2143995761871338 0.6344926357269287 -0.3323737382888794 -0.8702353239059448 -0.09164708107709885 0.4839930534362793 0.9702180027961731 0.1673179417848587 1 0.9925930500030518 0 0.0 0 0.0 0 0.0 -0.215201735496521 0.579124927520752 -0.41087865829467773 -0.8949857950210571 -0.44148075580596924 -0.0636310949921608 0.9277340769767761 0.18994596600532532 1 0.9931784868240356 0 0.0 0 0.0 0 0.0 -0.18907427787780762 0.5321424007415771 -0.3633767366409302 -0.8845484852790833 -0.4600665271282196 0.07654042541980743 0.9159454703330994 0.17071913182735443 1 0.9870247840881348 0 0.0 0 0.0 0 0.0 -0.2714434862136841 0.6815202236175537 -0.37427401542663574 -0.8992888927459717 0.2068544626235962 0.38532671332359314 0.12856031954288483 0.23758146166801453 1 0.9954916834831238 0 0.0 0 0.0 0 0.0 -0.2332911491394043 0.6557881832122803 -0.45631957054138184 -0.826288640499115 -0.40223395824432373 -0.39423811435699463 0.15952694416046143 0.21251626312732697 1 0.9963852763175964 0 0.0 0 0.0 0 0.0 -0.215201735496521 0.579124927520752 -0.41087865829467773 -0.8949857950210571 -0.44148075580596924 -0.0636310949921608 0.175100177526474 0.25710052251815796 1 0.9931784868240356 0 0.0 0 0.0 0 0.0 -0.3023422956466675 0.7849597930908203 -0.4707658290863037 -0.809015154838562 0.40089112520217896 0.4297921657562256 0.10812272131443024 0.16332419216632843 1 0.9974499344825745 0 0.0 0 0.0 0 0.0 -0.23466861248016357 0.7335350513458252 -0.5268294811248779 -0.5275429487228394 -0.4376964569091797 -0.7280495762825012 0.15449798107147217 0.1570688784122467 1 0.9977140426635742 0 0.0 0 0.0 0 0.0 -0.2332911491394043 0.6557881832122803 -0.45631957054138184 -0.826288640499115 -0.40223395824432373 -0.39423811435699463 0.15952694416046143 0.21251626312732697 1 0.9963852763175964 0 0.0 0 0.0 0 0.0 -0.25437653064727783 0.8707180023193359 -0.6044466495513916 -0.1664784699678421 -0.32941678166389465 -0.9293801784515381 0.1323527842760086 0.07852371037006378 1 0.9978139400482178 0 0.0 0 0.0 0 0.0 -0.2595592737197876 0.8025784492492676 -0.5593953132629395 -0.48774680495262146 -0.4980620741844177 -0.7169408202171326 0.13544107973575592 0.12047519534826279 1 0.9977763891220093 0 0.0 0 0.0 0 0.0 -0.29834794998168945 0.8586046695709229 -0.544276237487793 -0.7876216769218445 0.5459151268005371 0.2855921983718872 0.10662513971328735 0.10797388106584549 1 0.997727632522583 0 0.0 0 0.0 0 0.0 -0.15695953369140625 0.5213019847869873 -0.23152399063110352 -0.7372050881385803 -0.5348063707351685 0.41285440325737 0.9393715262413025 0.12667523324489594 1 0.9635127186775208 0 0.0 0 0.0 0 0.0 -0.1420363187789917 0.49902892112731934 -0.265682578086853 -0.7232886552810669 -0.6007568836212158 0.3404339849948883 0.9186869263648987 0.12909665703773499 1 0.9553471803665161 0 0.009066302329301834 0 0.0 0 0.0 -0.07519534230232239 0.4880945682525635 -0.17792588472366333 -0.4931180775165558 -0.8037965297698975 0.3327127993106842 0.9240359663963318 0.07843738049268723 1 0.9169134497642517 0 0.05876200273633003 0 0.0 0 0.0 -0.2595592737197876 0.8025784492492676 -0.5593953132629395 -0.48774680495262146 -0.4980620741844177 -0.7169408202171326 0.13544107973575592 0.12047519534826279 1 0.9977763891220093 0 0.0 0 0.0 0 0.0 -0.23466861248016357 0.7335350513458252 -0.5268294811248779 -0.5275429487228394 -0.4376964569091797 -0.7280495762825012 0.15449798107147217 0.1570688784122467 1 0.9977140426635742 0 0.0 0 0.0 0 0.0 -0.3023422956466675 0.7849597930908203 -0.4707658290863037 -0.809015154838562 0.40089112520217896 0.4297921657562256 0.10812272131443024 0.16332419216632843 1 0.9974499344825745 0 0.0 0 0.0 0 0.0 -0.08317875862121582 0.7046983242034912 -0.4855692386627197 0.20276497304439545 0.3567918837070465 -0.9118930697441101 0.9413006901741028 0.9422845840454102 1 0.9991375803947449 0 0.0 0 0.0 0 0.0 0.0 0.717432975769043 -0.496915340423584 0.0 0.5661183595657349 -0.8242744207382202 0.9412925839424133 0.9857740998268127 1 0.9996612071990967 0 0.0 0 0.0 0 0.0 0.0 0.6219885349273682 -0.5401461124420166 0.0 0.21689504384994507 -0.9761650562286377 0.8908731341362 0.9758754968643188 1 0.9991644024848938 0 0.0 0 0.0 0 0.0 -0.08317875862121582 0.5977051258087158 -0.5351896286010742 -0.13367107510566711 0.040162358433008194 -0.9902035593986511 0.24910669028759003 0.1976434588432312 1 0.9983810782432556 0 0.0 0 0.0 0 0.0 0.0 0.6219885349273682 -0.5401461124420166 0.0 0.21689504384994507 -0.9761650562286377 0.2860924005508423 0.18550969660282135 1 0.9991644024848938 0 0.0 0 0.0 0 0.0 0.0 0.4954061508178711 -0.5303821563720703 0.0 -0.39960935711860657 -0.9166539311408997 0.30426859855651855 0.2333311140537262 1 0.9962685704231262 0 0.0 0 0.0 0 0.0 -0.07982555031776428 0.4681966304779053 -0.49700307846069336 -0.32801294326782227 -0.6124454736709595 -0.7191991806030273 0.26634955406188965 0.25791066884994507 1 0.993816077709198 0 0.0 0 0.0 0 0.0 0.0 0.4954061508178711 -0.5303821563720703 0.0 -0.39960935711860657 -0.9166539311408997 0.30426859855651855 0.2333311140537262 1 0.9962685704231262 0 0.0 0 0.0 0 0.0 0.0 0.39038944244384766 -0.43143999576568604 0.0 -0.7942442297935486 -0.6075929999351501 0.30977341532707214 0.30976250767707825 1 0.9789760708808899 0 0.0 0 0.0 0 0.0 -0.02722427248954773 0.4976499080657959 -0.1062207818031311 -0.5827203989028931 -0.48753318190574646 0.6501358151435852 0.9371650218963623 0.03867452219128609 1 0.927412748336792 0 0.05390864610671997 0 0.0 0 0.0 -0.03183332085609436 0.4725472927093506 -0.1536623239517212 -0.4668111205101013 -0.7400128245353699 0.4841761589050293 0.9156655073165894 0.053619880229234695 1 0.8963284492492676 0 0.07777944952249527 0 0.0 0 0.0 0.0 0.46508145332336426 -0.15146160125732422 0.0 -0.8492690920829773 0.5279091596603394 0.9070941805839539 0.03858356922864914 1 0.8848198652267456 0 0.08769097924232483 0 0.0 0 0.0 -0.07171991467475891 0.41830766201019287 -0.40954136848449707 -0.5254982113838196 -0.7786187529563904 -0.3428449332714081 0.2686126232147217 0.31042376160621643 1 0.9810560345649719 0 0.0 0 0.0 0 0.0 0.0 0.39038944244384766 -0.43143999576568604 0.0 -0.7942442297935486 -0.6075929999351501 0.30977341532707214 0.30976250767707825 1 0.9789760708808899 0 0.0 0 0.0 0 0.0 0.0 0.33551084995269775 -0.3629721403121948 0.0 -0.7144383192062378 -0.6996673345565796 0.31088313460350037 0.35648632049560547 1 0.9168000221252441 0 0.07637535780668259 0 0.0 0 0.0 -0.1937013864517212 0.7858362197875977 -0.5540850162506104 0.2551347315311432 -0.29074984788894653 -0.922116756439209 0.16920901834964752 0.12707068026065826 1 0.9979347586631775 0 0.0 0 0.0 0 0.0 -0.23466861248016357 0.7335350513458252 -0.5268294811248779 -0.5275429487228394 -0.4376964569091797 -0.7280495762825012 0.15449798107147217 0.1570688784122467 1 0.9977140426635742 0 0.0 0 0.0 0 0.0 -0.2595592737197876 0.8025784492492676 -0.5593953132629395 -0.48774680495262146 -0.4980620741844177 -0.7169408202171326 0.13544107973575592 0.12047519534826279 1 0.9977763891220093 0 0.0 0 0.0 0 0.0 -0.1876540184020996 0.6596939563751221 -0.5185306072235107 -0.33820611238479614 -0.1976683884859085 -0.9200415015220642 0.18751898407936096 0.18505068123340607 1 0.9977445602416992 0 0.0 0 0.0 0 0.0 -0.2332911491394043 0.6557881832122803 -0.45631957054138184 -0.826288640499115 -0.40223395824432373 -0.39423811435699463 0.15952694416046143 0.21251626312732697 1 0.9963852763175964 0 0.0 0 0.0 0 0.0 -0.23466861248016357 0.7335350513458252 -0.5268294811248779 -0.5275429487228394 -0.4376964569091797 -0.7280495762825012 0.15449798107147217 0.1570688784122467 1 0.9977140426635742 0 0.0 0 0.0 0 0.0 -0.1876540184020996 0.6596939563751221 -0.5185306072235107 -0.33820611238479614 -0.1976683884859085 -0.9200415015220642 0.9133719205856323 0.8904370665550232 1 0.9977445602416992 0 0.0 0 0.0 0 0.0 -0.08317875862121582 0.7046983242034912 -0.4855692386627197 0.20276497304439545 0.3567918837070465 -0.9118930697441101 0.9413006901741028 0.9422845840454102 1 0.9991375803947449 0 0.0 0 0.0 0 0.0 -0.08317875862121582 0.5977051258087158 -0.5351896286010742 -0.13367107510566711 0.040162358433008194 -0.9902035593986511 0.8843513131141663 0.9313850402832031 1 0.9983810782432556 0 0.0 0 0.0 0 0.0 -0.2332911491394043 0.6557881832122803 -0.45631957054138184 -0.826288640499115 -0.40223395824432373 -0.39423811435699463 0.15952694416046143 0.21251626312732697 1 0.9963852763175964 0 0.0 0 0.0 0 0.0 -0.1876540184020996 0.6596939563751221 -0.5185306072235107 -0.33820611238479614 -0.1976683884859085 -0.9200415015220642 0.18751898407936096 0.18505068123340607 1 0.9977445602416992 0 0.0 0 0.0 0 0.0 -0.17545980215072632 0.5656907558441162 -0.5075685977935791 -0.6020996570587158 -0.3631092309951782 -0.7110202312469482 0.20651164650917053 0.22181473672389984 1 0.9963235855102539 0 0.0 0 0.0 0 0.0 -0.17545980215072632 0.5656907558441162 -0.5075685977935791 -0.6020996570587158 -0.3631092309951782 -0.7110202312469482 0.20651164650917053 0.22181473672389984 1 0.9963235855102539 0 0.0 0 0.0 0 0.0 -0.08317875862121582 0.5977051258087158 -0.5351896286010742 -0.13367107510566711 0.040162358433008194 -0.9902035593986511 0.24910669028759003 0.1976434588432312 1 0.9983810782432556 0 0.0 0 0.0 0 0.0 -0.07982555031776428 0.4681966304779053 -0.49700307846069336 -0.32801294326782227 -0.6124454736709595 -0.7191991806030273 0.26634955406188965 0.25791066884994507 1 0.993816077709198 0 0.0 0 0.0 0 0.0 -0.215201735496521 0.579124927520752 -0.41087865829467773 -0.8949857950210571 -0.44148075580596924 -0.0636310949921608 0.175100177526474 0.25710052251815796 1 0.9931784868240356 0 0.0 0 0.0 0 0.0 -0.17545980215072632 0.5656907558441162 -0.5075685977935791 -0.6020996570587158 -0.3631092309951782 -0.7110202312469482 0.20651164650917053 0.22181473672389984 1 0.9963235855102539 0 0.0 0 0.0 0 0.0 -0.14730453491210938 0.4809708595275879 -0.4494520425796509 -0.6751915216445923 -0.6570024490356445 -0.335245817899704 0.2268296331167221 0.27411285042762756 1 0.9907407164573669 0 0.0 0 0.0 0 0.0 -0.14730453491210938 0.4809708595275879 -0.4494520425796509 -0.6751915216445923 -0.6570024490356445 -0.335245817899704 0.2268296331167221 0.27411285042762756 1 0.9907407164573669 0 0.0 0 0.0 0 0.0 -0.07982555031776428 0.4681966304779053 -0.49700307846069336 -0.32801294326782227 -0.6124454736709595 -0.7191991806030273 0.26634955406188965 0.25791066884994507 1 0.993816077709198 0 0.0 0 0.0 0 0.0 -0.07171991467475891 0.41830766201019287 -0.40954136848449707 -0.5254982113838196 -0.7786187529563904 -0.3428449332714081 0.2686126232147217 0.31042376160621643 1 0.9810560345649719 0 0.0 0 0.0 0 0.0 -0.18907427787780762 0.5321424007415771 -0.3633767366409302 -0.8845484852790833 -0.4600665271282196 0.07654042541980743 0.18983252346515656 0.29206639528274536 1 0.9870247840881348 0 0.0 0 0.0 0 0.0 -0.14730453491210938 0.4809708595275879 -0.4494520425796509 -0.6751915216445923 -0.6570024490356445 -0.335245817899704 0.2268296331167221 0.27411285042762756 1 0.9907407164573669 0 0.0 0 0.0 0 0.0 -0.13163155317306519 0.4475557804107666 -0.36023998260498047 -0.730246901512146 -0.6739402413368225 -0.11188085377216339 0.23006127774715424 0.3214690387248993 1 0.9729493260383606 0 0.0 0 0.0 0 0.0 -0.11474817991256714 0.41678154468536377 -0.2910900115966797 -0.9263588190078735 -0.37650686502456665 0.005249183624982834 0.8736137747764587 0.12863701581954956 1 0.91008460521698 0 0.05703506991267204 5 0.012244939804077148 0 0.0 -0.1420363187789917 0.49902892112731934 -0.265682578086853 -0.7232886552810669 -0.6007568836212158 0.3404339849948883 0.9186869263648987 0.12909665703773499 1 0.9553471803665161 0 0.009066302329301834 0 0.0 0 0.0 -0.1636601686477661 0.5023448467254639 -0.3202894926071167 -0.8532670140266418 -0.49674978852272034 0.158513143658638 0.9101097583770752 0.15139897167682648 1 0.9755609631538391 0 0.0 0 0.0 0 0.0 -0.07230684161186218 0.39586949348449707 -0.33485913276672363 -0.6780602335929871 -0.6097903251647949 -0.41029083728790283 0.26386216282844543 0.34843114018440247 1 0.9468030333518982 0 0.039024900645017624 0 0.0 0 0.0 -0.11474817991256714 0.41678154468536377 -0.2910900115966797 -0.9263588190078735 -0.37650686502456665 0.005249183624982834 0.23559102416038513 0.359767347574234 1 0.91008460521698 0 0.05703506991267204 5 0.012244939804077148 0 0.0 -0.13163155317306519 0.4475557804107666 -0.36023998260498047 -0.730246901512146 -0.6739402413368225 -0.11188085377216339 0.23006127774715424 0.3214690387248993 1 0.9729493260383606 0 0.0 0 0.0 0 0.0 -0.07328110933303833 0.4430720806121826 -0.23094940185546875 -0.8349864482879639 0.062196724116802216 0.5467085838317871 0.8917837738990784 0.0931837260723114 1 0.8747076988220215 0 0.0811844989657402 5 0.027842912822961807 0 0.0 -0.07519534230232239 0.4880945682525635 -0.17792588472366333 -0.4931180775165558 -0.8037965297698975 0.3327127993106842 0.9240359663963318 0.07843738049268723 1 0.9169134497642517 0 0.05876200273633003 0 0.0 0 0.0 -0.1420363187789917 0.49902892112731934 -0.265682578086853 -0.7232886552810669 -0.6007568836212158 0.3404339849948883 0.9186869263648987 0.12909665703773499 1 0.9553471803665161 0 0.009066302329301834 0 0.0 0 0.0 0.0 0.46508145332336426 -0.15146160125732422 0.0 -0.8492690920829773 0.5279091596603394 0.9070941805839539 0.03858356922864914 1 0.8848198652267456 0 0.08769097924232483 0 0.0 0 0.0 -0.03183332085609436 0.4725472927093506 -0.1536623239517212 -0.4668111205101013 -0.7400128245353699 0.4841761589050293 0.9156655073165894 0.053619880229234695 1 0.8963284492492676 0 0.07777944952249527 0 0.0 0 0.0 -0.024349510669708252 0.44997596740722656 -0.18417012691497803 -0.5105136036872864 -0.6040223240852356 0.6119571328163147 0.897230863571167 0.05878820642828941 1 0.8513779044151306 0 0.11267079412937164 0 0.0 0 0.0 -0.024349510669708252 0.44997596740722656 -0.18417012691497803 -0.5105136036872864 -0.6040223240852356 0.6119571328163147 0.897230863571167 0.05878820642828941 1 0.8513779044151306 0 0.11267079412937164 0 0.0 0 0.0 -0.03183332085609436 0.4725472927093506 -0.1536623239517212 -0.4668111205101013 -0.7400128245353699 0.4841761589050293 0.9156655073165894 0.053619880229234695 1 0.8963284492492676 0 0.07777944952249527 0 0.0 0 0.0 -0.04406014084815979 0.47633934020996094 -0.1643797755241394 -0.4945219159126282 -0.7363200783729553 0.4617755711078644 0.9167872667312622 0.06153831630945206 1 0.8977535963058472 0 0.07620814442634583 0 0.0 0 0.0 -0.07519534230232239 0.4880945682525635 -0.17792588472366333 -0.4931180775165558 -0.8037965297698975 0.3327127993106842 0.9240359663963318 0.07843738049268723 1 0.9169134497642517 0 0.05876200273633003 0 0.0 0 0.0 -0.07328110933303833 0.4430720806121826 -0.23094940185546875 -0.8349864482879639 0.062196724116802216 0.5467085838317871 0.8917837738990784 0.0931837260723114 1 0.8747076988220215 0 0.0811844989657402 5 0.027842912822961807 0 0.0 -0.04134397208690643 0.4539233446121216 -0.2002546787261963 -0.5264137983322144 -0.3241981267929077 0.7859736680984497 0.8979483842849731 0.07017120718955994 1 0.8606652617454529 0 0.10205099731683731 5 0.0029370635747909546 0 0.0 -0.024349510669708252 0.44997596740722656 -0.18417012691497803 -0.5105136036872864 -0.6040223240852356 0.6119571328163147 0.897230863571167 0.05878820642828941 1 0.8513779044151306 0 0.11267079412937164 0 0.0 0 0.0 -0.04134397208690643 0.4539233446121216 -0.2002546787261963 -0.5264137983322144 -0.3241981267929077 0.7859736680984497 0.8979483842849731 0.07017120718955994 1 0.8606652617454529 0 0.10205099731683731 5 0.0029370635747909546 0 0.0 0.0 0.41489994525909424 -0.18215465545654297 0.0 0.5597094893455505 0.8286690711975098 0.8788778185844421 0.04964836686849594 1 0.730757474899292 0 0.21810069680213928 5 0.0014950893819332123 3 0.00030696019530296326 -0.04134397208690643 0.4539233446121216 -0.2002546787261963 -0.5264137983322144 -0.3241981267929077 0.7859736680984497 0.6188840866088867 0.5845966339111328 1 0.8606652617454529 0 0.10205099731683731 5 0.0029370635747909546 0 0.0 -0.07328110933303833 0.4430720806121826 -0.23094940185546875 -0.8349864482879639 0.062196724116802216 0.5467085838317871 0.6050207018852234 0.5939637422561646 1 0.8747076988220215 0 0.0811844989657402 5 0.027842912822961807 0 0.0 -0.09905996918678284 0.40596628189086914 -0.19437533617019653 -0.5630664825439453 0.7503280639648438 0.34626302123069763 0.5929415822029114 0.566311240196228 1 0.6564067006111145 0 0.20795942842960358 5 0.12716107070446014 0 0.0 -0.07328110933303833 0.4430720806121826 -0.23094940185546875 -0.8349864482879639 0.062196724116802216 0.5467085838317871 0.6518501043319702 0.9787291884422302 1 0.8747076988220215 0 0.0811844989657402 5 0.027842912822961807 0 0.0 -0.11474817991256714 0.41678154468536377 -0.2910900115966797 -0.9263588190078735 -0.37650686502456665 0.005249183624982834 0.6179927587509155 0.9725486040115356 1 0.91008460521698 0 0.05703506991267204 5 0.012244939804077148 0 0.0 -0.12179547548294067 0.3854290246963501 -0.23301446437835693 -0.8996246457099915 0.39896848797798157 -0.17743460834026337 0.6237066984176636 0.9517653584480286 1 0.7106906175613403 0 0.1698828488588333 5 0.11525022983551025 0 0.0 -0.11474817991256714 0.41678154468536377 -0.2910900115966797 -0.9263588190078735 -0.37650686502456665 0.005249183624982834 0.23559102416038513 0.359767347574234 1 0.91008460521698 0 0.05703506991267204 5 0.012244939804077148 0 0.0 -0.07230684161186218 0.39586949348449707 -0.33485913276672363 -0.6780602335929871 -0.6097903251647949 -0.41029083728790283 0.26386216282844543 0.34843114018440247 1 0.9468030333518982 0 0.039024900645017624 0 0.0 0 0.0 -0.07341891527175903 0.3139185905456543 -0.28698432445526123 -0.6358226537704468 -0.38373973965644836 -0.669667661190033 0.27071312069892883 0.3962279260158539 1 0.6878011226654053 0 0.2799515724182129 5 0.008950736373662949 0 0.0 -0.07341891527175903 0.3139185905456543 -0.28698432445526123 -0.6358226537704468 -0.38373973965644836 -0.669667661190033 0.27071312069892883 0.3962279260158539 1 0.6878011226654053 0 0.2799515724182129 5 0.008950736373662949 0 0.0 -0.07230684161186218 0.39586949348449707 -0.33485913276672363 -0.6780602335929871 -0.6097903251647949 -0.41029083728790283 0.26386216282844543 0.34843114018440247 1 0.9468030333518982 0 0.039024900645017624 0 0.0 0 0.0 0.0 0.33551084995269775 -0.3629721403121948 0.0 -0.7144383192062378 -0.6996673345565796 0.31088313460350037 0.35648632049560547 1 0.9168000221252441 0 0.07637535780668259 0 0.0 0 0.0 -0.43023955821990967 0.157029926776886 0.06563612818717957 0.4426404535770416 -0.8844264149665833 0.14767906069755554 0.08512462675571442 0.6006276607513428 5 0.9999759197235107 0 0.0 0 0.0 0 0.0 -0.5088207721710205 0.12029749155044556 0.1170196533203125 -0.16394543647766113 -0.8839991688728333 0.4377574920654297 0.04735330492258072 0.6357671618461609 5 1.0001115798950195 0 0.0 0 0.0 0 0.0 -0.5589442253112793 0.16177308559417725 0.07854250073432922 -0.9342325925827026 -0.35114598274230957 -0.06216620281338692 0.02092316746711731 0.6068553328514099 5 1.000016450881958 0 0.0 0 0.0 0 0.0 -0.3984619379043579 0.26093626022338867 0.08564722537994385 0.4599139392375946 0.35129857063293457 0.8154851198196411 0.43783387541770935 0.39854317903518677 5 0.9975098967552185 0 0.0 0 0.0 0 0.0 -0.4554738998413086 0.2947545051574707 0.029965192079544067 -0.4450819492340088 0.8953825235366821 0.013611255213618279 0.4090229272842407 0.43271535634994507 5 0.9976549744606018 0 0.0 0 0.0 0 0.0 -0.5096194744110107 0.2505838871002197 0.11315262317657471 -0.5906857252120972 0.6383556723594666 0.4935148060321808 0.38072505593299866 0.38276207447052 5 0.9994231462478638 0 0.0 0 0.0 0 0.0 -0.5047986507415771 0.20594364404678345 -0.004644919186830521 -0.6930753588676453 -0.20831935107707977 -0.6900539994239807 0.5881485939025879 0.7014670968055725 5 0.9997888803482056 0 0.0 0 0.0 0 0.0 -0.5589442253112793 0.16177308559417725 0.07854250073432922 -0.9342325925827026 -0.35114598274230957 -0.06216620281338692 0.5921546220779419 0.6514858603477478 5 1.000016450881958 0 0.0 0 0.0 0 0.0 -0.5096194744110107 0.2505838871002197 0.11315262317657471 -0.5906857252120972 0.6383556723594666 0.4935148060321808 0.6430558562278748 0.6733530759811401 5 0.9994231462478638 0 0.0 0 0.0 0 0.0 -0.47704315185546875 0.22420382499694824 0.13703078031539917 0.09256263822317123 0.13635669648647308 0.9862971901893616 0.9100112915039062 0.5470339059829712 5 0.9994118809700012 0 0.0 0 0.0 0 0.0 -0.5088207721710205 0.12029749155044556 0.1170196533203125 -0.16394543647766113 -0.8839991688728333 0.4377574920654297 0.9588103890419006 0.5548603534698486 5 1.0001115798950195 0 0.0 0 0.0 0 0.0 -0.43023955821990967 0.157029926776886 0.06563612818717957 0.4426404535770416 -0.8844264149665833 0.14767906069755554 0.9498034119606018 0.5855746865272522 5 0.9999759197235107 0 0.0 0 0.0 0 0.0 -0.47704315185546875 0.22420382499694824 0.13703078031539917 0.09256263822317123 0.13635669648647308 0.9862971901893616 0.9100112915039062 0.5470339059829712 5 0.9994118809700012 0 0.0 0 0.0 0 0.0 -0.5096194744110107 0.2505838871002197 0.11315262317657471 -0.5906857252120972 0.6383556723594666 0.4935148060321808 0.9143127202987671 0.525738000869751 5 0.9994231462478638 0 0.0 0 0.0 0 0.0 -0.5589442253112793 0.16177308559417725 0.07854250073432922 -0.9342325925827026 -0.35114598274230957 -0.06216620281338692 0.9657022356987 0.5219221115112305 5 1.000016450881958 0 0.0 0 0.0 0 0.0 -0.07448214292526245 0.6610023975372314 -0.22847318649291992 -0.29837948083877563 0.8330942988395691 0.46571245789527893 0.41453418135643005 0.8990539312362671 1 0.9883941411972046 0 0.0 0 0.0 0 0.0 -0.07567718625068665 0.6810379028320312 -0.25069737434387207 -0.19437238574028015 0.6898708939552307 0.6973174214363098 0.41558343172073364 0.883171558380127 1 0.9912397861480713 0 0.0 0 0.0 0 0.0 -0.12389302253723145 0.6452987194061279 -0.2239953875541687 -0.3717764914035797 0.6311227679252625 0.6807458996772766 0.4386693835258484 0.9063490033149719 1 0.9863486289978027 0 0.0 0 0.0 0 0.0 -0.07567718625068665 0.6810379028320312 -0.25069737434387207 -0.19437238574028015 0.6898708939552307 0.6973174214363098 0.41558343172073364 0.883171558380127 1 0.9912397861480713 0 0.0 0 0.0 0 0.0 -0.11437469720840454 0.7034616470336914 -0.2846221923828125 -0.12384410947561264 0.6982024312019348 0.7050996422767639 0.4353049099445343 0.8618066906929016 1 0.9938564300537109 0 0.0 0 0.0 0 0.0 -0.12389302253723145 0.6452987194061279 -0.2239953875541687 -0.3717764914035797 0.6311227679252625 0.6807458996772766 0.4386693835258484 0.9063490033149719 1 0.9863486289978027 0 0.0 0 0.0 0 0.0 -0.11437469720840454 0.7034616470336914 -0.2846221923828125 -0.12384410947561264 0.6982024312019348 0.7050996422767639 0.4353049099445343 0.8618066906929016 1 0.9938564300537109 0 0.0 0 0.0 0 0.0 -0.1668308973312378 0.6906447410583496 -0.2779656648635864 -0.5177770256996155 0.6292916536331177 0.5795159935951233 0.46132102608680725 0.8691244125366211 1 0.9922270178794861 0 0.0 0 0.0 0 0.0 -0.16969645023345947 0.6551282405853271 -0.246321439743042 -0.6105228066444397 0.38544878363609314 0.6918545961380005 0.4616085886955261 0.8940138816833496 1 0.9888336658477783 0 0.0 0 0.0 0 0.0 0.0 0.17887204885482788 0.20615297555923462 0.0 0.9208654761314392 0.3898434340953827 0.6407602429389954 0.32359591126441956 0 0.9011874198913574 4 0.008605018258094788 2 0.007983766496181488 0 0.0 0.20955008268356323 0.1521109938621521 0.19754719734191895 0.5760979056358337 0.7668691277503967 0.28281503915786743 0.5366934537887573 0.3172552287578583 0 0.7611507177352905 2 0.11970722675323486 3 0.10152817517518997 0 0.0 0.20940327644348145 0.18806850910186768 0.10748907923698425 0.6282540559768677 0.6898098587989807 0.35978269577026367 0.5385096073150635 0.3671324849128723 0 0.6962488293647766 3 0.23988555371761322 2 0.04625933989882469 0 0.0 0.2218678593635559 -0.11717742681503296 0.0475330650806427 0.5801263451576233 -0.6734519600868225 -0.45811334252357483 0.22921013832092285 0.6840476989746094 0 0.8946786522865295 2 0.05245160311460495 3 0.03519182279706001 0 0.0 0.1994549036026001 -0.007807791233062744 -0.07830172777175903 0.5622425079345703 -0.5634021759033203 -0.6053346395492554 0.23669739067554474 0.5947647094726562 0 0.8606905937194824 3 0.10992924124002457 0 0.0 0 0.0 0.27896857261657715 0.07729777693748474 0.03905799984931946 0.9912412166595459 0.0948820486664772 -0.09158604592084885 0.17303664982318878 0.6143929958343506 0 0.7136451601982117 3 0.23007641732692719 2 0.047092560678720474 0 0.0 0.20955008268356323 0.1521109938621521 0.19754719734191895 0.5760979056358337 0.7668691277503967 0.28281503915786743 0.8016543388366699 0.36130064725875854 0 0.7611507177352905 2 0.11970722675323486 3 0.10152817517518997 0 0.0 0.29087793827056885 0.005670234560966492 0.15487772226333618 0.9979857802391052 0.062990203499794 -0.003906369209289551 0.7238370776176453 0.4040071964263916 0 0.7717193365097046 2 0.13732953369617462 3 0.08217988163232803 0 0.0 0.27896857261657715 0.07729777693748474 0.03905799984931946 0.9912412166595459 0.0948820486664772 -0.09158604592084885 0.7514224052429199 0.4350348114967346 0 0.7136451601982117 3 0.23007641732692719 2 0.047092560678720474 0 0.0 0.0 -0.1520075798034668 0.035814911127090454 0.0 -0.8850062489509583 -0.46555987000465393 0.342818021774292 0.6868105530738831 0 0.9604138135910034 0 0.0 0 0.0 0 0.0 0.0 -0.05573540925979614 -0.1027672290802002 0.0 -0.7233496904373169 -0.6904507875442505 0.3428180515766144 0.5973702669143677 0 0.949096143245697 0 0.0 0 0.0 0 0.0 0.1994549036026001 -0.007807791233062744 -0.07830172777175903 0.5622425079345703 -0.5634021759033203 -0.6053346395492554 0.23669739067554474 0.5947647094726562 0 0.8606905937194824 3 0.10992924124002457 0 0.0 0 0.0 0.2218678593635559 -0.11717742681503296 0.0475330650806427 0.5801263451576233 -0.6734519600868225 -0.45811334252357483 0.22921013832092285 0.6840476989746094 0 0.8946786522865295 2 0.05245160311460495 3 0.03519182279706001 0 0.0 0.2333071231842041 -0.14518868923187256 0.12986749410629272 0.6191290020942688 -0.7353739738464355 -0.27536851167678833 0.21926060318946838 0.7273061871528625 0 0.8559712767601013 2 0.10463123768568039 3 0.005023133009672165 0 0.0 0.0 -0.17877912521362305 0.11906552314758301 0.0 -0.9352397322654724 -0.35392314195632935 0.3381052017211914 0.7297746539115906 0 0.9514539241790771 0 0.0 0 0.0 0 0.0 0.29087793827056885 0.005670234560966492 0.15487772226333618 0.9979857802391052 0.062990203499794 -0.003906369209289551 0.16594837605953217 0.6863267421722412 0 0.7717193365097046 2 0.13732953369617462 3 0.08217988163232803 0 0.0 0.2891288995742798 -0.053497374057769775 0.22732973098754883 0.9860530495643616 -0.06204412877559662 -0.15433210134506226 0.16813310980796814 0.7361131310462952 0 0.6714892983436584 2 0.28184226155281067 3 0.023302968591451645 0 0.0 0.2333071231842041 -0.14518868923187256 0.12986749410629272 0.6191290020942688 -0.7353739738464355 -0.27536851167678833 0.21926060318946838 0.7273061871528625 0 0.8559712767601013 2 0.10463123768568039 3 0.005023133009672165 0 0.0 0.0 0.17887204885482788 0.20615297555923462 0.0 0.9208654761314392 0.3898434340953827 0.6407602429389954 0.32359591126441956 0 0.9011874198913574 4 0.008605018258094788 2 0.007983766496181488 0 0.0 0.0 0.144250750541687 0.286879301071167 0.0 0.9332865476608276 0.35908079147338867 0.6393837928771973 0.278120756149292 0 0.8431402444839478 4 0.0683114305138588 2 0.06750531494617462 0 0.0 0.20780110359191895 0.12533944845199585 0.2807978391647339 0.5116122961044312 0.844325065612793 0.1590929925441742 0.5354735851287842 0.2732369899749756 0 0.6737872362136841 2 0.25705254077911377 3 0.04048972204327583 0 0.0 0.29087793827056885 0.005670234560966492 0.15487772226333618 0.9979857802391052 0.062990203499794 -0.003906369209289551 0.7238370776176453 0.4040071964263916 0 0.7717193365097046 2 0.13732953369617462 3 0.08217988163232803 0 0.0 0.20955008268356323 0.1521109938621521 0.19754719734191895 0.5760979056358337 0.7668691277503967 0.28281503915786743 0.8016543388366699 0.36130064725875854 0 0.7611507177352905 2 0.11970722675323486 3 0.10152817517518997 0 0.0 0.20780110359191895 0.12533944845199585 0.2807978391647339 0.5116122961044312 0.844325065612793 0.1590929925441742 0.793588399887085 0.3341623842716217 0 0.6737872362136841 2 0.25705254077911377 3 0.04048972204327583 0 0.0 0.0 0.144250750541687 0.286879301071167 0.0 0.9332865476608276 0.35908079147338867 0.6393837928771973 0.278120756149292 0 0.8431402444839478 4 0.0683114305138588 2 0.06750531494617462 0 0.0 0.0 0.10837686061859131 0.398435115814209 0.0 0.9131138324737549 0.40763571858406067 0.6365572810173035 0.21912050247192383 0 0.6615631580352783 4 0.16478803753852844 2 0.16256949305534363 0 0.0 0.15183353424072266 0.08250489830970764 0.41399872303009033 -0.14777062833309174 0.9758903980255127 0.16055788099765778 0.5605605840682983 0.20316660404205322 2 0.5625039339065552 0 0.3559562563896179 4 0.0675918385386467 0 0.0 0.25187551975250244 0.12372738122940063 0.40594351291656494 0.32880643010139465 0.9301126003265381 -0.16360972821712494 0.506905734539032 0.21915198862552643 2 0.7046008110046387 0 0.2593858540058136 0 0.0 0 0.0 0.15183353424072266 0.08250489830970764 0.41399872303009033 -0.14777062833309174 0.9758903980255127 0.16055788099765778 0.5605605840682983 0.20316660404205322 2 0.5625039339065552 0 0.3559562563896179 4 0.0675918385386467 0 0.0 0.23059618473052979 0.11400431394577026 0.5390143394470215 -0.18820764124393463 0.9757378101348877 -0.1116061881184578 0.5118018388748169 0.1595311015844345 2 0.9343189597129822 0 0.054628096520900726 0 0.0 0 0.0 0.16343510150909424 0.09151619672775269 0.6089448928833008 -0.6315500140190125 0.747611939907074 0.2053590565919876 0.5441842675209045 0.12299907207489014 2 0.9313681125640869 0 0.039589401334524155 0 0.0 0 0.0 0.23059618473052979 0.11400431394577026 0.5390143394470215 -0.18820764124393463 0.9757378101348877 -0.1116061881184578 0.5118018388748169 0.1595311015844345 2 0.9343189597129822 0 0.054628096520900726 0 0.0 0 0.0 0.15183353424072266 0.08250489830970764 0.41399872303009033 -0.14777062833309174 0.9758903980255127 0.16055788099765778 0.5605605840682983 0.20316660404205322 2 0.5625039339065552 0 0.3559562563896179 4 0.0675918385386467 0 0.0 0.30187129974365234 -0.08480963110923767 0.619861364364624 0.5957213044166565 -0.6205328702926636 0.5099032521247864 0.7216191291809082 0.6659771203994751 2 0.9719600081443787 0 0.0 0 0.0 0 0.0 0.3028668165206909 0.03667032718658447 0.7283434867858887 0.4055604636669159 -0.3405865728855133 0.8482314348220825 0.7277485728263855 0.7524433732032776 2 1.0069687366485596 0 0.0 0 0.0 0 0.0 0.19527888298034668 0.014238350093364716 0.7056961059570312 -0.3719595968723297 -0.17993712425231934 0.9106112718582153 0.779891848564148 0.7320565581321716 2 0.9548998475074768 0 0.002611551433801651 0 0.0 0 0.0 0.3469996452331543 0.10634586215019226 0.5646698474884033 0.7864314913749695 0.5786614418029785 -0.21585741639137268 0.7268060445785522 0.19475699961185455 2 0.9669324159622192 0 0.008164938539266586 0 0.0 0 0.0 0.23059618473052979 0.11400431394577026 0.5390143394470215 -0.18820764124393463 0.9757378101348877 -0.1116061881184578 0.7782641053199768 0.22510869801044464 2 0.9343189597129822 0 0.054628096520900726 0 0.0 0 0.0 0.23059618473052979 0.1385723352432251 0.6024715900421143 -0.37034210562705994 0.7505111694335938 -0.5472884178161621 0.7850754261016846 0.19187207520008087 2 0.9882969856262207 0 0.0 0 0.0 0 0.0 0.3028668165206909 0.03667032718658447 0.7283434867858887 0.4055604636669159 -0.3405865728855133 0.8482314348220825 0.7277485728263855 0.7524433732032776 2 1.0069687366485596 0 0.0 0 0.0 0 0.0 0.3468945026397705 0.06105288863182068 0.6569516658782959 0.9636219143867493 -0.16562394797801971 0.20972320437431335 0.6956770420074463 0.7410318851470947 2 0.9881370067596436 0 0.0 0 0.0 0 0.0 0.34602928161621094 0.1090165376663208 0.6943802833557129 0.9147617816925049 -0.062288276851177216 0.39915159344673157 0.698062002658844 0.7733765840530396 2 0.9974915981292725 0 0.0 0 0.0 0 0.0 0.16343510150909424 0.09151619672775269 0.6089448928833008 -0.6315500140190125 0.747611939907074 0.2053590565919876 0.9195019006729126 0.4097464084625244 2 0.9313681125640869 0 0.039589401334524155 0 0.0 0 0.0 0.1780099868774414 0.10716038942337036 0.7001523971557617 -0.8770104050636292 0.06659138947725296 0.4757835566997528 0.945722758769989 0.37810018658638 2 0.9883637428283691 0 0.0 0 0.0 0 0.0 0.23059618473052979 0.1385723352432251 0.6024715900421143 -0.37034210562705994 0.7505111694335938 -0.5472884178161621 0.8876997828483582 0.39105933904647827 2 0.9882969856262207 0 0.0 0 0.0 0 0.0 0.3397330045700073 0.13471728563308716 0.614459753036499 0.7675099968910217 0.5092929005622864 -0.3892636001110077 0.7379385232925415 0.16754750907421112 2 0.9887034893035889 0 0.0 0 0.0 0 0.0 0.34602928161621094 0.1090165376663208 0.6943802833557129 0.9147617816925049 -0.062288276851177216 0.39915159344673157 0.7268431782722473 0.1400061845779419 2 0.9974915981292725 0 0.0 0 0.0 0 0.0 0.3468945026397705 0.06105288863182068 0.6569516658782959 0.9636219143867493 -0.16562394797801971 0.20972320437431335 0.7123997807502747 0.16860434412956238 2 0.9881370067596436 0 0.0 0 0.0 0 0.0 0.23059618473052979 0.1385723352432251 0.6024715900421143 -0.37034210562705994 0.7505111694335938 -0.5472884178161621 0.8876997828483582 0.39105933904647827 2 0.9882969856262207 0 0.0 0 0.0 0 0.0 0.1780099868774414 0.10716038942337036 0.7001523971557617 -0.8770104050636292 0.06659138947725296 0.4757835566997528 0.945722758769989 0.37810018658638 2 0.9883637428283691 0 0.0 0 0.0 0 0.0 0.18260103464126587 0.19482123851776123 0.6990411281585693 -0.9710379242897034 0.20737327635288239 0.1185949295759201 0.9239189028739929 0.33825811743736267 2 0.9983318448066711 0 0.0 0 0.0 0 0.0 0.3276984691619873 0.20788490772247314 0.6544501781463623 0.7152317762374878 0.3708914518356323 -0.5923337340354919 0.7646296620368958 0.13306954503059387 2 0.9986105561256409 0 0.0 0 0.0 0 0.0 0.3328806161880493 0.17843002080917358 0.734142541885376 0.8033692240715027 -0.14041566848754883 0.5786614418029785 0.7528762221336365 0.10685840249061584 2 0.9995585083961487 0 0.0 0 0.0 0 0.0 0.34602928161621094 0.1090165376663208 0.6943802833557129 0.9147617816925049 -0.062288276851177216 0.39915159344673157 0.7268431782722473 0.1400061845779419 2 0.9974915981292725 0 0.0 0 0.0 0 0.0 0.1780099868774414 0.10716038942337036 0.7001523971557617 -0.8770104050636292 0.06659138947725296 0.4757835566997528 0.7827162146568298 0.7688784003257751 2 0.9883637428283691 0 0.0 0 0.0 0 0.0 0.2691516876220703 0.09592822194099426 0.7350804805755615 0.007080294191837311 -0.13916440308094025 0.9902340769767761 0.7421389222145081 0.7785028219223022 2 0.9978255033493042 0 0.0 0 0.0 0 0.0 0.26910340785980225 0.17764323949813843 0.7524588108062744 -0.1340678185224533 -0.20361949503421783 0.9698172211647034 0.7397990822792053 0.818606436252594 2 0.9994724988937378 0 0.0 0 0.0 0 0.0 0.23059618473052979 0.1385723352432251 0.6024715900421143 -0.37034210562705994 0.7505111694335938 -0.5472884178161621 0.7850754261016846 0.19187207520008087 2 0.9882969856262207 0 0.0 0 0.0 0 0.0 0.237876296043396 0.2133294939994812 0.641486644744873 -0.3396099805831909 0.47352519631385803 -0.8126468658447266 0.8041354417800903 0.15376198291778564 2 0.9991787672042847 0 0.0 0 0.0 0 0.0 0.3276984691619873 0.20788490772247314 0.6544501781463623 0.7152317762374878 0.3708914518356323 -0.5923337340354919 0.7646296620368958 0.13306954503059387 2 0.9986105561256409 0 0.0 0 0.0 0 0.0 0.2691516876220703 0.09592822194099426 0.7350804805755615 0.007080294191837311 -0.13916440308094025 0.9902340769767761 0.7421389222145081 0.7785028219223022 2 0.9978255033493042 0 0.0 0 0.0 0 0.0 0.34602928161621094 0.1090165376663208 0.6943802833557129 0.9147617816925049 -0.062288276851177216 0.39915159344673157 0.698062002658844 0.7733765840530396 2 0.9974915981292725 0 0.0 0 0.0 0 0.0 0.3328806161880493 0.17843002080917358 0.734142541885376 0.8033692240715027 -0.14041566848754883 0.5786614418029785 0.7056828141212463 0.8151172995567322 2 0.9995585083961487 0 0.0 0 0.0 0 0.0 0.18260103464126587 0.19482123851776123 0.6990411281585693 -0.9710379242897034 0.20737327635288239 0.1185949295759201 0.7754655480384827 0.8056461215019226 2 0.9983318448066711 0 0.0 0 0.0 0 0.0 0.26910340785980225 0.17764323949813843 0.7524588108062744 -0.1340678185224533 -0.20361949503421783 0.9698172211647034 0.7397990822792053 0.818606436252594 2 0.9994724988937378 0 0.0 0 0.0 0 0.0 0.2703179121017456 0.24386632442474365 0.7686514854431152 -0.15445417165756226 -0.2859279215335846 0.9457075595855713 0.7375360131263733 0.851832926273346 2 0.9999029636383057 0 0.0 0 0.0 0 0.0 0.237876296043396 0.2133294939994812 0.641486644744873 -0.3396099805831909 0.47352519631385803 -0.8126468658447266 0.8041354417800903 0.15376198291778564 2 0.9991787672042847 0 0.0 0 0.0 0 0.0 0.237876296043396 0.37244415283203125 0.7143435478210449 -0.4520706832408905 0.5877559781074524 -0.6709189414978027 0.8513078689575195 0.07979519665241241 2 0.9999978542327881 0 0.0 0 0.0 0 0.0 0.3276984691619873 0.2997403144836426 0.701850414276123 0.7264320850372314 0.28260138630867004 -0.6263924241065979 0.7918135523796082 0.08813752979040146 2 0.9998425245285034 0 0.0 0 0.0 0 0.0 0.26910340785980225 0.17764323949813843 0.7524588108062744 -0.1340678185224533 -0.20361949503421783 0.9698172211647034 0.7397990822792053 0.818606436252594 2 0.9994724988937378 0 0.0 0 0.0 0 0.0 0.3328806161880493 0.17843002080917358 0.734142541885376 0.8033692240715027 -0.14041566848754883 0.5786614418029785 0.7056828141212463 0.8151172995567322 2 0.9995585083961487 0 0.0 0 0.0 0 0.0 0.3328806161880493 0.24741899967193604 0.7576038837432861 0.7921384572982788 -0.2150944471359253 0.5711538791656494 0.7047654390335083 0.8518280386924744 2 0.999882161617279 0 0.0 0 0.0 0 0.0 0.237876296043396 0.2133294939994812 0.641486644744873 -0.3396099805831909 0.47352519631385803 -0.8126468658447266 0.8830041289329529 0.3463095426559448 2 0.9991787672042847 0 0.0 0 0.0 0 0.0 0.18260103464126587 0.19482123851776123 0.6990411281585693 -0.9710379242897034 0.20737327635288239 0.1185949295759201 0.9239189028739929 0.33825811743736267 2 0.9983318448066711 0 0.0 0 0.0 0 0.0 0.20932167768478394 0.2829176187515259 0.7541635036468506 -0.9013641476631165 -0.05499435216188431 0.4294869899749756 0.9167553186416626 0.2833555042743683 2 0.9998661279678345 0 0.0 0 0.0 0 0.0 0.3276984691619873 0.20788490772247314 0.6544501781463623 0.7152317762374878 0.3708914518356323 -0.5923337340354919 0.7646296620368958 0.13306954503059387 2 0.9986105561256409 0 0.0 0 0.0 0 0.0 0.3276984691619873 0.2997403144836426 0.701850414276123 0.7264320850372314 0.28260138630867004 -0.6263924241065979 0.7918135523796082 0.08813752979040146 2 0.9998425245285034 0 0.0 0 0.0 0 0.0 0.3328806161880493 0.24741899967193604 0.7576038837432861 0.7921384572982788 -0.2150944471359253 0.5711538791656494 0.773402750492096 0.07818431407213211 2 0.999882161617279 0 0.0 0 0.0 0 0.0 0.20780110359191895 0.12533944845199585 0.2807978391647339 0.5116122961044312 0.844325065612793 0.1590929925441742 0.793588399887085 0.3341623842716217 0 0.6737872362136841 2 0.25705254077911377 3 0.04048972204327583 0 0.0 0.25187551975250244 0.12372738122940063 0.40594351291656494 0.32880643010139465 0.9301126003265381 -0.16360972821712494 0.7734473347663879 0.27408310770988464 2 0.7046008110046387 0 0.2593858540058136 0 0.0 0 0.0 0.3311045169830322 -0.06117776036262512 0.35713791847229004 0.9543748497962952 -0.013000885024666786 -0.29825738072395325 0.6850048899650574 0.3302666246891022 2 0.662501871585846 0 0.31252527236938477 0 0.0 0 0.0 0.30187129974365234 -0.08480963110923767 0.619861364364624 0.5957213044166565 -0.6205328702926636 0.5099032521247864 0.7216191291809082 0.6659771203994751 2 0.9719600081443787 0 0.0 0 0.0 0 0.0 0.3541121482849121 -0.07419586181640625 0.4291270971298218 0.9666127562522888 -0.2230903059244156 -0.125919371843338 0.6715637445449829 0.6103150844573975 2 0.8337088823318481 0 0.15088647603988647 0 0.0 0 0.0 0.3468945026397705 0.06105288863182068 0.6569516658782959 0.9636219143867493 -0.16562394797801971 0.20972320437431335 0.6956770420074463 0.7410318851470947 2 0.9881370067596436 0 0.0 0 0.0 0 0.0 0.3541121482849121 -0.07419586181640625 0.4291270971298218 0.9666127562522888 -0.2230903059244156 -0.125919371843338 0.6707702279090881 0.29945147037506104 2 0.8337088823318481 0 0.15088647603988647 0 0.0 0 0.0 0.3311045169830322 -0.06117776036262512 0.35713791847229004 0.9543748497962952 -0.013000885024666786 -0.29825738072395325 0.6850048899650574 0.3302666246891022 2 0.662501871585846 0 0.31252527236938477 0 0.0 0 0.0 0.25187551975250244 0.12372738122940063 0.40594351291656494 0.32880643010139465 0.9301126003265381 -0.16360972821712494 0.7734473347663879 0.27408310770988464 2 0.7046008110046387 0 0.2593858540058136 0 0.0 0 0.0 0.3403736352920532 0.3993680477142334 0.7714123725891113 0.6911221742630005 0.7172459959983826 0.08874782919883728 0.8158060908317566 0.02945329248905182 2 0.9999896883964539 0 0.0 0 0.0 0 0.0 0.3276984691619873 0.2997403144836426 0.701850414276123 0.7264320850372314 0.28260138630867004 -0.6263924241065979 0.7918135523796082 0.08813752979040146 2 0.9998425245285034 0 0.0 0 0.0 0 0.0 0.237876296043396 0.37244415283203125 0.7143435478210449 -0.4520706832408905 0.5877559781074524 -0.6709189414978027 0.8513078689575195 0.07979519665241241 2 0.9999978542327881 0 0.0 0 0.0 0 0.0 0.22349166870117188 0.37734532356262207 0.784529447555542 -0.7459639310836792 0.3484298288822174 0.5675222277641296 0.9024268984794617 0.2320421040058136 2 0.9999775290489197 0 0.0 0 0.0 0 0.0 0.26705384254455566 0.41719162464141846 0.7832803726196289 -0.14835047721862793 0.9023407697677612 0.4046449065208435 0.8807538151741028 0.21484346687793732 2 1.0000007152557373 0 0.0 0 0.0 0 0.0 0.237876296043396 0.37244415283203125 0.7143435478210449 -0.4520706832408905 0.5877559781074524 -0.6709189414978027 0.873521625995636 0.25355786085128784 2 0.9999978542327881 0 0.0 0 0.0 0 0.0 0.3276984691619873 0.2997403144836426 0.701850414276123 0.7264320850372314 0.28260138630867004 -0.6263924241065979 0.7918135523796082 0.08813752979040146 2 0.9998425245285034 0 0.0 0 0.0 0 0.0 0.3403736352920532 0.3993680477142334 0.7714123725891113 0.6911221742630005 0.7172459959983826 0.08874782919883728 0.8158060908317566 0.02945329248905182 2 0.9999896883964539 0 0.0 0 0.0 0 0.0 0.34603846073150635 0.34535515308380127 0.7890980243682861 0.7636646628379822 0.0001831110566854477 0.6455580592155457 0.7970283031463623 0.03577974811196327 2 0.9999740719795227 0 0.0 0 0.0 0 0.0 0.2844879627227783 0.30941593647003174 0.7897307872772217 -0.059114351868629456 -0.191625714302063 0.9796746969223022 0.7294446229934692 0.8867914080619812 2 0.9999793171882629 0 0.0 0 0.0 0 0.0 0.2703179121017456 0.24386632442474365 0.7686514854431152 -0.15445417165756226 -0.2859279215335846 0.9457075595855713 0.7375360131263733 0.851832926273346 2 0.9999029636383057 0 0.0 0 0.0 0 0.0 0.3328806161880493 0.24741899967193604 0.7576038837432861 0.7921384572982788 -0.2150944471359253 0.5711538791656494 0.7047654390335083 0.8518280386924744 2 0.999882161617279 0 0.0 0 0.0 0 0.0 0.2844879627227783 0.30941593647003174 0.7897307872772217 -0.059114351868629456 -0.191625714302063 0.9796746969223022 0.7294446229934692 0.8867914080619812 2 0.9999793171882629 0 0.0 0 0.0 0 0.0 0.22349166870117188 0.37734532356262207 0.784529447555542 -0.7459639310836792 0.3484298288822174 0.5675222277641296 0.755506694316864 0.9117282629013062 2 0.9999775290489197 0 0.0 0 0.0 0 0.0 0.20932167768478394 0.2829176187515259 0.7541635036468506 -0.9013641476631165 -0.05499435216188431 0.4294869899749756 0.7640476226806641 0.8615762591362 2 0.9998661279678345 0 0.0 0 0.0 0 0.0 0.3403736352920532 0.3993680477142334 0.7714123725891113 0.6911221742630005 0.7172459959983826 0.08874782919883728 0.6943598985671997 0.9206492900848389 2 0.9999896883964539 0 0.0 0 0.0 0 0.0 0.26705384254455566 0.41719162464141846 0.7832803726196289 -0.14835047721862793 0.9023407697677612 0.4046449065208435 0.7314229607582092 0.9295790791511536 2 1.0000007152557373 0 0.0 0 0.0 0 0.0 0.34603846073150635 0.34535515308380127 0.7890980243682861 0.7636646628379822 0.0001831110566854477 0.6455580592155457 0.6966750025749207 0.9037923216819763 2 0.9999740719795227 0 0.0 0 0.0 0 0.0 0.26705384254455566 0.41719162464141846 0.7832803726196289 -0.14835047721862793 0.9023407697677612 0.4046449065208435 0.7314229607582092 0.9295790791511536 2 1.0000007152557373 0 0.0 0 0.0 0 0.0 0.22349166870117188 0.37734532356262207 0.784529447555542 -0.7459639310836792 0.3484298288822174 0.5675222277641296 0.755506694316864 0.9117282629013062 2 0.9999775290489197 0 0.0 0 0.0 0 0.0 0.2844879627227783 0.30941593647003174 0.7897307872772217 -0.059114351868629456 -0.191625714302063 0.9796746969223022 0.7294446229934692 0.8867914080619812 2 0.9999793171882629 0 0.0 0 0.0 0 0.0 0.2691516876220703 0.09592822194099426 0.7350804805755615 0.007080294191837311 -0.13916440308094025 0.9902340769767761 0.7421389222145081 0.7785028219223022 2 0.9978255033493042 0 0.0 0 0.0 0 0.0 0.1780099868774414 0.10716038942337036 0.7001523971557617 -0.8770104050636292 0.06659138947725296 0.4757835566997528 0.7827162146568298 0.7688784003257751 2 0.9883637428283691 0 0.0 0 0.0 0 0.0 0.19527888298034668 0.014238350093364716 0.7056961059570312 -0.3719595968723297 -0.17993712425231934 0.9106112718582153 0.779891848564148 0.7320565581321716 2 0.9548998475074768 0 0.002611551433801651 0 0.0 0 0.0 0.09442317485809326 -0.08681789040565491 0.6793560981750488 -0.3274635970592499 -0.27362895011901855 0.904354989528656 0.5895189642906189 0.03625130653381348 2 0.8125033378601074 0 0.11024869978427887 4 0.07657250761985779 0 0.0 0.19527888298034668 0.014238350093364716 0.7056961059570312 -0.3719595968723297 -0.17993712425231934 0.9106112718582153 0.5291039943695068 0.056795794516801834 2 0.9548998475074768 0 0.002611551433801651 0 0.0 0 0.0 0.16343510150909424 0.09151619672775269 0.6089448928833008 -0.6315500140190125 0.747611939907074 0.2053590565919876 0.5441842675209045 0.12299907207489014 2 0.9313681125640869 0 0.039589401334524155 0 0.0 0 0.0 0.30187129974365234 -0.08480963110923767 0.619861364364624 0.5957213044166565 -0.6205328702926636 0.5099032521247864 0.7216191291809082 0.6659771203994751 2 0.9719600081443787 0 0.0 0 0.0 0 0.0 0.09442317485809326 -0.08681789040565491 0.6793560981750488 -0.3274635970592499 -0.27362895011901855 0.904354989528656 0.8325487375259399 0.6775317192077637 2 0.8125033378601074 0 0.11024869978427887 4 0.07657250761985779 0 0.0 0.15126758813858032 -0.20477783679962158 0.5203018188476562 0.16193121671676636 -0.9197363257408142 0.3574938178062439 0.7911576628684998 0.5780675411224365 2 0.6742236614227295 0 0.24004419147968292 4 0.08352506905794144 0 0.0 0.3541121482849121 -0.07419586181640625 0.4291270971298218 0.9666127562522888 -0.2230903059244156 -0.125919371843338 0.6715637445449829 0.6103150844573975 2 0.8337088823318481 0 0.15088647603988647 0 0.0 0 0.0 0.30187129974365234 -0.08480963110923767 0.619861364364624 0.5957213044166565 -0.6205328702926636 0.5099032521247864 0.7216191291809082 0.6659771203994751 2 0.9719600081443787 0 0.0 0 0.0 0 0.0 0.2433398962020874 -0.18356812000274658 0.4825398921966553 0.504165768623352 -0.8324533700942993 0.2297738641500473 0.7394121289253235 0.5778254270553589 2 0.7614166140556335 0 0.20125827193260193 4 0.018037568777799606 0 0.0 0.3311045169830322 -0.06117776036262512 0.35713791847229004 0.9543748497962952 -0.013000885024666786 -0.29825738072395325 0.13535627722740173 0.7921632528305054 2 0.662501871585846 0 0.31252527236938477 0 0.0 0 0.0 0.3541121482849121 -0.07419586181640625 0.4291270971298218 0.9666127562522888 -0.2230903059244156 -0.125919371843338 0.11863873153924942 0.8262776136398315 2 0.8337088823318481 0 0.15088647603988647 0 0.0 0 0.0 0.24950921535491943 -0.1970342993736267 0.3751683235168457 0.49635303020477295 -0.861873209476471 -0.10370189696550369 0.1934516727924347 0.8448641896247864 2 0.6230677962303162 0 0.34260785579681396 4 0.005191043019294739 0 0.0 0.2891288995742798 -0.053497374057769775 0.22732973098754883 0.9860530495643616 -0.06204412877559662 -0.15433210134506226 0.16813310980796814 0.7361131310462952 0 0.6714892983436584 2 0.28184226155281067 3 0.023302968591451645 0 0.0 0.3311045169830322 -0.06117776036262512 0.35713791847229004 0.9543748497962952 -0.013000885024666786 -0.29825738072395325 0.13535627722740173 0.7921632528305054 2 0.662501871585846 0 0.31252527236938477 0 0.0 0 0.0 0.2483149766921997 -0.1659679412841797 0.2751126289367676 0.6037476658821106 -0.766502857208252 -0.21887874603271484 0.1998605728149414 0.7935872673988342 0 0.621268630027771 2 0.3484863340854645 0 0.0 0 0.0 0.2333071231842041 -0.14518868923187256 0.12986749410629272 0.6191290020942688 -0.7353739738464355 -0.27536851167678833 0.21926060318946838 0.7273061871528625 0 0.8559712767601013 2 0.10463123768568039 3 0.005023133009672165 0 0.0 0.2483149766921997 -0.1659679412841797 0.2751126289367676 0.6037476658821106 -0.766502857208252 -0.21887874603271484 0.1998605728149414 0.7935872673988342 0 0.621268630027771 2 0.3484863340854645 0 0.0 0 0.0 0.0 -0.22177386283874512 0.21981686353683472 0.0 -0.982146680355072 -0.18799401819705963 0.33400920033454895 0.7854426503181458 0 0.9121978878974915 4 0.0331408865749836 2 0.0324675627052784 0 0.0 0.2483149766921997 -0.1659679412841797 0.2751126289367676 0.6037476658821106 -0.766502857208252 -0.21887874603271484 0.1998605728149414 0.7935872673988342 0 0.621268630027771 2 0.3484863340854645 0 0.0 0 0.0 0.24950921535491943 -0.1970342993736267 0.3751683235168457 0.49635303020477295 -0.861873209476471 -0.10370189696550369 0.1934516727924347 0.8448641896247864 2 0.6230677962303162 0 0.34260785579681396 4 0.005191043019294739 0 0.0 0.0 -0.2242426872253418 0.35177063941955566 0.0 -0.999267578125 -0.03799554333090782 0.3204757869243622 0.8396906852722168 0 0.7614060640335083 4 0.11837860941886902 2 0.11738711595535278 0 0.0 0.0 -0.2221187949180603 0.49811649322509766 0.0 -0.9373455047607422 0.3483687937259674 0.30472859740257263 0.8981705904006958 0 0.5169974565505981 4 0.24156785011291504 2 0.23979748785495758 0 0.0 0.0 -0.2242426872253418 0.35177063941955566 0.0 -0.999267578125 -0.03799554333090782 0.3204757869243622 0.8396906852722168 0 0.7614060640335083 4 0.11837860941886902 2 0.11738711595535278 0 0.0 0.15126758813858032 -0.20477783679962158 0.5203018188476562 0.16193121671676636 -0.9197363257408142 0.3574938178062439 0.22674739360809326 0.9042510390281677 2 0.6742236614227295 0 0.24004419147968292 4 0.08352506905794144 0 0.0 0.0 -0.2242426872253418 0.35177063941955566 0.0 -0.999267578125 -0.03799554333090782 0.3204757869243622 0.8396906852722168 0 0.7614060640335083 4 0.11837860941886902 2 0.11738711595535278 0 0.0 0.24950921535491943 -0.1970342993736267 0.3751683235168457 0.49635303020477295 -0.861873209476471 -0.10370189696550369 0.1934516727924347 0.8448641896247864 2 0.6230677962303162 0 0.34260785579681396 4 0.005191043019294739 0 0.0 0.15126758813858032 -0.20477783679962158 0.5203018188476562 0.16193121671676636 -0.9197363257408142 0.3574938178062439 0.22674739360809326 0.9042510390281677 2 0.6742236614227295 0 0.24004419147968292 4 0.08352506905794144 0 0.0 0.20940327644348145 0.18806850910186768 0.10748907923698425 0.6282540559768677 0.6898098587989807 0.35978269577026367 0.8133400082588196 0.3891247510910034 0 0.6962488293647766 3 0.23988555371761322 2 0.04625933989882469 0 0.0 0.27896857261657715 0.07729777693748474 0.03905799984931946 0.9912412166595459 0.0948820486664772 -0.09158604592084885 0.7514224052429199 0.4350348114967346 0 0.7136451601982117 3 0.23007641732692719 2 0.047092560678720474 0 0.0 0.25873374938964844 0.14417153596878052 -0.10946205258369446 0.7939695119857788 -0.46391186118125916 -0.39286476373672485 0.7813736200332642 0.48258087038993835 3 0.7289473414421082 0 0.25397777557373047 0 0.0 0 0.0 0.1994549036026001 -0.007807791233062744 -0.07830172777175903 0.5622425079345703 -0.5634021759033203 -0.6053346395492554 0.23669739067554474 0.5947647094726562 0 0.8606905937194824 3 0.10992924124002457 0 0.0 0 0.0 0.1772594451904297 0.11724525690078735 -0.1825990080833435 0.44734030961990356 -0.4271370470523834 -0.7857600450515747 0.23943009972572327 0.508765459060669 0 0.6831516027450562 3 0.28197067975997925 1 0.002889048308134079 0 0.0 0.25873374938964844 0.14417153596878052 -0.10946205258369446 0.7939695119857788 -0.46391186118125916 -0.39286476373672485 0.18831117451190948 0.5307038426399231 3 0.7289473414421082 0 0.25397777557373047 0 0.0 0 0.0 0.0 0.219041109085083 0.11931818723678589 0.0 0.8301644921302795 0.557481586933136 0.642014741897583 0.37345194816589355 0 0.8959391713142395 5 0.029438931494951248 3 0.028147835284471512 0 0.0 0.20940327644348145 0.18806850910186768 0.10748907923698425 0.6282540559768677 0.6898098587989807 0.35978269577026367 0.5385096073150635 0.3671324849128723 0 0.6962488293647766 3 0.23988555371761322 2 0.04625933989882469 0 0.0 0.1905134916305542 0.2867305278778076 0.004207689315080643 0.2593463063240051 0.6273384690284729 0.7342753410339355 0.545678436756134 0.4428918659687042 3 0.7835674285888672 0 0.18744781613349915 0 0.0 0 0.0 0.0 -0.05573540925979614 -0.1027672290802002 0.0 -0.7233496904373169 -0.6904507875442505 0.3428180515766144 0.5973702669143677 0 0.949096143245697 0 0.0 0 0.0 0 0.0 0.0 0.09937161207199097 -0.21314752101898193 0.0 -0.5446943640708923 -0.8385875821113586 0.3309190571308136 0.4989504814147949 0 0.9125122427940369 5 0.011346809566020966 3 0.010605178773403168 1 0.0003351755440235138 0.1772594451904297 0.11724525690078735 -0.1825990080833435 0.44734030961990356 -0.4271370470523834 -0.7857600450515747 0.23943009972572327 0.508765459060669 0 0.6831516027450562 3 0.28197067975997925 1 0.002889048308134079 0 0.0 0.1905134916305542 0.2867305278778076 0.004207689315080643 0.2593463063240051 0.6273384690284729 0.7342753410339355 0.8839541673660278 0.6740447282791138 3 0.7835674285888672 0 0.18744781613349915 0 0.0 0 0.0 0.25873374938964844 0.14417153596878052 -0.10946205258369446 0.7939695119857788 -0.46391186118125916 -0.39286476373672485 0.9841787815093994 0.6740447282791138 3 0.7289473414421082 0 0.25397777557373047 0 0.0 0 0.0 0.3247077465057373 0.1585661768913269 -0.04109635949134827 0.06991790235042572 -0.9837946891784668 0.16495254635810852 0.9672834277153015 0.6379106640815735 3 0.9705332517623901 0 0.00480993464589119 0 0.0 0 0.0 0.25873374938964844 0.14417153596878052 -0.10946205258369446 0.7939695119857788 -0.46391186118125916 -0.39286476373672485 0.18831117451190948 0.5307038426399231 3 0.7289473414421082 0 0.25397777557373047 0 0.0 0 0.0 0.2681701183319092 0.2678663730621338 -0.16814452409744263 0.5125888586044312 0.191473126411438 -0.8369701504707336 0.17117449641227722 0.4642834961414337 3 0.9406881332397461 0 0.04160959646105766 0 0.0 0 0.0 0.3432735204696655 0.26402461528778076 -0.1277342438697815 0.573839545249939 0.09149449318647385 -0.8138371109962463 0.13124819099903107 0.48351210355758667 3 0.9892646074295044 0 0.0 0 0.0 0 0.0 0.1905134916305542 0.2867305278778076 0.004207689315080643 0.2593463063240051 0.6273384690284729 0.7342753410339355 0.545678436756134 0.4428918659687042 3 0.7835674285888672 0 0.18744781613349915 0 0.0 0 0.0 0.2911590337753296 0.2942936420440674 0.005826227366924286 -0.20746482908725739 0.4108707010746002 0.8877529501914978 0.4938306510448456 0.4439513385295868 3 0.961869478225708 0 0.014442968182265759 0 0.0 0 0.0 0.29355669021606445 0.34976017475128174 -0.07433450222015381 0.23679311573505402 0.9682607650756836 -0.0796533077955246 0.49234965443611145 0.4958604872226715 3 0.9519422650337219 0 0.016063708811998367 0 0.0 0 0.0 0.29355669021606445 0.34976017475128174 -0.07433450222015381 0.23679311573505402 0.9682607650756836 -0.0796533077955246 0.6434169411659241 0.8292502164840698 3 0.9519422650337219 0 0.016063708811998367 0 0.0 0 0.0 0.3432735204696655 0.26402461528778076 -0.1277342438697815 0.573839545249939 0.09149449318647385 -0.8138371109962463 0.5876299142837524 0.8122449517250061 3 0.9892646074295044 0 0.0 0 0.0 0 0.0 0.2681701183319092 0.2678663730621338 -0.16814452409744263 0.5125888586044312 0.191473126411438 -0.8369701504707336 0.5837397575378418 0.8574127554893494 3 0.9406881332397461 0 0.04160959646105766 0 0.0 0 0.0 0.2911590337753296 0.2942936420440674 0.005826227366924286 -0.20746482908725739 0.4108707010746002 0.8877529501914978 0.4938306510448456 0.4439513385295868 3 0.961869478225708 0 0.014442968182265759 0 0.0 0 0.0 0.34428489208221436 0.28179633617401123 0.046254053711891174 -0.47929319739341736 0.3894161880016327 0.7865230441093445 0.46575069427490234 0.4223727583885193 3 0.9897324442863464 0 0.0 0 0.0 0 0.0 0.3900512456893921 0.3162165880203247 -0.022862508893013 0.34510329365730286 0.9354228377342224 -0.07635731250047684 0.44328606128692627 0.4625326693058014 3 0.9903740882873535 0 0.0 0 0.0 0 0.0 0.3900512456893921 0.3162165880203247 -0.022862508893013 0.34510329365730286 0.9354228377342224 -0.07635731250047684 0.6370754837989807 0.7687724828720093 3 0.9903740882873535 0 0.0 0 0.0 0 0.0 0.43937599658966064 0.23811864852905273 -0.05854392051696777 0.6367992162704468 -0.09231849014759064 -0.765465259552002 0.5900217294692993 0.7481352686882019 3 0.9983529448509216 0 0.0 0 0.0 0 0.0 0.3432735204696655 0.26402461528778076 -0.1277342438697815 0.573839545249939 0.09149449318647385 -0.8138371109962463 0.5876299142837524 0.8122449517250061 3 0.9892646074295044 0 0.0 0 0.0 0 0.0 0.3247077465057373 0.1585661768913269 -0.04109635949134827 0.06991790235042572 -0.9837946891784668 0.16495254635810852 0.9672834277153015 0.6379106640815735 3 0.9705332517623901 0 0.00480993464589119 0 0.0 0 0.0 0.3816554546356201 0.17568820714950562 0.02271178364753723 -0.3256935477256775 -0.9139378070831299 0.24204230308532715 0.9494260549545288 0.6056154370307922 3 0.998649537563324 0 0.0 0 0.0 0 0.0 0.34428489208221436 0.28179633617401123 0.046254053711891174 -0.47929319739341736 0.3894161880016327 0.7865230441093445 0.8977068662643433 0.5999657511711121 3 0.9897324442863464 0 0.0 0 0.0 0 0.0 0.3247077465057373 0.1585661768913269 -0.04109635949134827 0.06991790235042572 -0.9837946891784668 0.16495254635810852 0.14707791805267334 0.5547357797622681 3 0.9705332517623901 0 0.00480993464589119 0 0.0 0 0.0 0.3432735204696655 0.26402461528778076 -0.1277342438697815 0.573839545249939 0.09149449318647385 -0.8138371109962463 0.13124819099903107 0.48351210355758667 3 0.9892646074295044 0 0.0 0 0.0 0 0.0 0.43937599658966064 0.23811864852905273 -0.05854392051696777 0.6367992162704468 -0.09231849014759064 -0.765465259552002 0.08150046318769455 0.522465169429779 3 0.9983529448509216 0 0.0 0 0.0 0 0.0 0.4554738998413086 0.2947545051574707 0.029965192079544067 0.4450819492340088 0.8953825235366821 0.013611255213618279 0.6390498280525208 0.7233343124389648 3 0.9976978898048401 0 0.0 0 0.0 0 0.0 0.5047986507415771 0.20594364404678345 -0.004644919186830521 0.6930753588676453 -0.20831935107707977 -0.6900539994239807 0.5881485939025879 0.7014670968055725 3 0.9998424053192139 0 0.0 0 0.0 0 0.0 0.43937599658966064 0.23811864852905273 -0.05854392051696777 0.6367992162704468 -0.09231849014759064 -0.765465259552002 0.5900217294692993 0.7481352686882019 3 0.9983529448509216 0 0.0 0 0.0 0 0.0 0.3816554546356201 0.17568820714950562 0.02271178364753723 -0.3256935477256775 -0.9139378070831299 0.24204230308532715 0.9494260549545288 0.6056154370307922 3 0.998649537563324 0 0.0 0 0.0 0 0.0 0.43023955821990967 0.157029926776886 0.06563612818717957 -0.4426404535770416 -0.8844264149665833 0.14767906069755554 0.9498034119606018 0.5855746865272522 3 0.9999399781227112 0 0.0 0 0.0 0 0.0 0.3984619379043579 0.26093626022338867 0.08564722537994385 -0.4599139392375946 0.35129857063293457 0.8154851198196411 0.9010043740272522 0.57774817943573 3 0.9973952174186707 0 0.0 0 0.0 0 0.0 0.3816554546356201 0.17568820714950562 0.02271178364753723 -0.3256935477256775 -0.9139378070831299 0.24204230308532715 0.11026795953512192 0.5757925510406494 3 0.998649537563324 0 0.0 0 0.0 0 0.0 0.43937599658966064 0.23811864852905273 -0.05854392051696777 0.6367992162704468 -0.09231849014759064 -0.765465259552002 0.08150046318769455 0.522465169429779 3 0.9983529448509216 0 0.0 0 0.0 0 0.0 0.5047986507415771 0.20594364404678345 -0.004644919186830521 0.6930753588676453 -0.20831935107707977 -0.6900539994239807 0.049123793840408325 0.5567721724510193 3 0.9998424053192139 0 0.0 0 0.0 0 0.0 0.34428489208221436 0.28179633617401123 0.046254053711891174 -0.47929319739341736 0.3894161880016327 0.7865230441093445 0.46575069427490234 0.4223727583885193 3 0.9897324442863464 0 0.0 0 0.0 0 0.0 0.3984619379043579 0.26093626022338867 0.08564722537994385 -0.4599139392375946 0.35129857063293457 0.8154851198196411 0.43783387541770935 0.39854317903518677 3 0.9973952174186707 0 0.0 0 0.0 0 0.0 0.4554738998413086 0.2947545051574707 0.029965192079544067 0.4450819492340088 0.8953825235366821 0.013611255213618279 0.4090229272842407 0.43271535634994507 3 0.9976978898048401 0 0.0 0 0.0 0 0.0 0.2681701183319092 0.2678663730621338 -0.16814452409744263 0.5125888586044312 0.191473126411438 -0.8369701504707336 0.17117449641227722 0.4642834961414337 3 0.9406881332397461 0 0.04160959646105766 0 0.0 0 0.0 0.25873374938964844 0.14417153596878052 -0.10946205258369446 0.7939695119857788 -0.46391186118125916 -0.39286476373672485 0.18831117451190948 0.5307038426399231 3 0.7289473414421082 0 0.25397777557373047 0 0.0 0 0.0 0.1772594451904297 0.11724525690078735 -0.1825990080833435 0.44734030961990356 -0.4271370470523834 -0.7857600450515747 0.23943009972572327 0.508765459060669 0 0.6831516027450562 3 0.28197067975997925 1 0.002889048308134079 0 0.0 0.0 0.317891001701355 0.011525623500347137 0.0 0.8030030131340027 0.5959654450416565 0.6397891640663147 0.4510643780231476 0 0.7890903353691101 5 0.08665546774864197 3 0.08514407277107239 1 0.019098643213510513 0.1905134916305542 0.2867305278778076 0.004207689315080643 0.2593463063240051 0.6273384690284729 0.7342753410339355 0.545678436756134 0.4428918659687042 3 0.7835674285888672 0 0.18744781613349915 0 0.0 0 0.0 0.17369681596755981 0.36367666721343994 -0.10281378030776978 0.2631000578403473 0.9605090618133545 0.09018219262361526 0.5536576509475708 0.5132588744163513 3 0.7268608808517456 0 0.17259469628334045 1 0.09181983768939972 0 0.0 0.12932729721069336 0.17944878339767456 -0.22509831190109253 0.36967071890830994 -0.269569993019104 -0.8891872763633728 0.5448826551437378 0.9278662204742432 0 0.75236576795578 3 0.16852052509784698 1 0.07225456833839417 0 0.0 0.07002320885658264 0.2813262939453125 -0.2664802074432373 0.5305337905883789 -0.30652791261672974 -0.790276825428009 0.5774428844451904 0.974776566028595 0 0.6353183388710022 1 0.3263947069644928 3 0.018231775611639023 0 0.0 0.17586100101470947 0.3179171085357666 -0.20532292127609253 0.6381115317344666 0.3986937999725342 -0.6586504578590393 0.6007186770439148 0.9138137102127075 3 0.4058360159397125 0 0.3687710165977478 1 0.22105538845062256 0 0.0 0.17586100101470947 0.3179171085357666 -0.20532292127609253 0.6381115317344666 0.3986937999725342 -0.6586504578590393 0.6007186770439148 0.9138137102127075 3 0.4058360159397125 0 0.3687710165977478 1 0.22105538845062256 0 0.0 0.11685270071029663 0.37915825843811035 -0.15417778491973877 0.40092167258262634 0.9032562971115112 0.15277566015720367 0.6471365094184875 0.9334772229194641 0 0.41070666909217834 1 0.2940956950187683 3 0.28172755241394043 0 0.0 0.17369681596755981 0.36367666721343994 -0.10281378030776978 0.2631000578403473 0.9605090618133545 0.09018219262361526 0.6518501043319702 0.8928941488265991 3 0.7268608808517456 0 0.17259469628334045 1 0.09181983768939972 0 0.0 0.0 0.3707171678543091 -0.08462855219841003 0.0 0.904324471950531 0.4267708361148834 0.6405338048934937 0.5089500546455383 0 0.7102694511413574 1 0.14585299789905548 5 0.07208946347236633 3 0.07045222818851471 0.17369681596755981 0.36367666721343994 -0.10281378030776978 0.2631000578403473 0.9605090618133545 0.09018219262361526 0.5536576509475708 0.5132588744163513 3 0.7268608808517456 0 0.17259469628334045 1 0.09181983768939972 0 0.0 0.11685270071029663 0.37915825843811035 -0.15417778491973877 0.40092167258262634 0.9032562971115112 0.15277566015720367 0.583946704864502 0.540475606918335 0 0.41070666909217834 1 0.2940956950187683 3 0.28172755241394043 0 0.0 0.12932729721069336 0.17944878339767456 -0.22509831190109253 0.36967071890830994 -0.269569993019104 -0.8891872763633728 0.25760719180107117 0.4690239429473877 0 0.75236576795578 3 0.16852052509784698 1 0.07225456833839417 0 0.0 0.0 0.14566397666931152 -0.24244439601898193 0.0 -0.5614489912986755 -0.8274788856506348 0.32698339223861694 0.4710521399974823 0 0.8837517499923706 1 0.06194183975458145 5 0.0038842111825942993 3 0.003427356481552124 0.0 0.2078162431716919 -0.2881510257720947 0.0 -0.4107486307621002 -0.9117404818534851 0.3223710358142853 0.43101730942726135 0 0.7689260244369507 1 0.2003297209739685 0 0.0 0 0.0 0.0 0.09937161207199097 -0.21314752101898193 0.0 -0.5446943640708923 -0.8385875821113586 0.3309190571308136 0.4989504814147949 0 0.9125122427940369 5 0.011346809566020966 3 0.010605178773403168 1 0.0003351755440235138 0.0 0.14566397666931152 -0.24244439601898193 0.0 -0.5614489912986755 -0.8274788856506348 0.32698339223861694 0.4710521399974823 0 0.8837517499923706 1 0.06194183975458145 5 0.0038842111825942993 3 0.003427356481552124 0.12932729721069336 0.17944878339767456 -0.22509831190109253 0.36967071890830994 -0.269569993019104 -0.8891872763633728 0.25760719180107117 0.4690239429473877 0 0.75236576795578 3 0.16852052509784698 1 0.07225456833839417 0 0.0 0.17586100101470947 0.3179171085357666 -0.20532292127609253 0.6381115317344666 0.3986937999725342 -0.6586504578590393 0.21205389499664307 0.42999351024627686 3 0.4058360159397125 0 0.3687710165977478 1 0.22105538845062256 0 0.0 0.07002320885658264 0.2813262939453125 -0.2664802074432373 0.5305337905883789 -0.30652791261672974 -0.790276825428009 0.27513593435287476 0.4157503545284271 0 0.6353183388710022 1 0.3263947069644928 3 0.018231775611639023 0 0.0 0.07341891527175903 0.3139185905456543 -0.28698432445526123 0.6358226537704468 -0.38373973965644836 -0.669667661190033 0.27071312069892883 0.3962279260158539 1 0.6878804564476013 0 0.28015995025634766 3 0.008270028978586197 0 0.0 0.07002320885658264 0.2813262939453125 -0.2664802074432373 0.5305337905883789 -0.30652791261672974 -0.790276825428009 0.27513593435287476 0.4157503545284271 0 0.6353183388710022 1 0.3263947069644928 3 0.018231775611639023 0 0.0 0.0 0.2078162431716919 -0.2881510257720947 0.0 -0.4107486307621002 -0.9117404818534851 0.3223710358142853 0.43101730942726135 0 0.7689260244369507 1 0.2003297209739685 0 0.0 0 0.0 0.0 0.29299962520599365 -0.3292173147201538 0.0 -0.5545213222503662 -0.8321481943130493 0.3137752413749695 0.3848779797554016 1 0.7812550663948059 0 0.20431587100028992 0 0.0 0 0.0 0.09905996918678284 0.40596628189086914 -0.19437533617019653 0.5630664825439453 0.7503280639648438 0.34626302123069763 0.5929415822029114 0.566311240196228 1 0.6572749614715576 0 0.20971746742725372 3 0.12424865365028381 0 0.0 0.0 0.41489994525909424 -0.18215465545654297 0.0 0.5597094893455505 0.8286690711975098 0.642014741897583 0.5646453499794006 1 0.730757474899292 0 0.21810069680213928 5 0.0014950893819332123 3 0.00030696019530296326 0.0 0.398445725440979 -0.14425861835479736 0.0 0.9055452346801758 0.42420727014541626 0.6413841247558594 0.5432328581809998 0 0.5077889561653137 1 0.39139166474342346 5 0.050735753029584885 3 0.04906380549073219 0.12179547548294067 0.3854290246963501 -0.23301446437835693 0.8996246457099915 0.39896848797798157 -0.17743460834026337 0.6237066984176636 0.9517653584480286 1 0.7110409140586853 0 0.1705215722322464 3 0.11412934958934784 0 0.0 0.09905996918678284 0.40596628189086914 -0.19437533617019653 0.5630664825439453 0.7503280639648438 0.34626302123069763 0.6464900374412537 0.9542642831802368 1 0.6572749614715576 0 0.20971746742725372 3 0.12424865365028381 0 0.0 0.11685270071029663 0.37915825843811035 -0.15417778491973877 0.40092167258262634 0.9032562971115112 0.15277566015720367 0.6471365094184875 0.9334772229194641 0 0.41070666909217834 1 0.2940956950187683 3 0.28172755241394043 0 0.0 0.023262888193130493 0.648740291595459 -0.1271979808807373 0.27558213472366333 0.8101443648338318 0.5173802971839905 0.39259374141693115 0.9457398056983948 1 0.9771119952201843 0 0.0 0 0.0 0 0.0 0.05297325551509857 0.6632869243621826 -0.17042005062103271 0.42271187901496887 0.8485671281814575 0.3181249499320984 0.40667101740837097 0.9228817820549011 1 0.9830220341682434 0 0.0 0 0.0 0 0.0 0.0 0.6696534156799316 -0.16029703617095947 0.0 0.940275251865387 0.3403424024581909 0.3807303011417389 0.9247735738754272 1 0.9826752543449402 0 0.0 0 0.0 0 0.0 0.05297325551509857 0.6632869243621826 -0.17042005062103271 0.42271187901496887 0.8485671281814575 0.3181249499320984 0.40667101740837097 0.9228817820549011 1 0.9830220341682434 0 0.0 0 0.0 0 0.0 0.03514702618122101 0.6757450103759766 -0.23533987998962402 0.3003937005996704 0.825434148311615 0.4778893291950226 0.39532920718193054 0.891121506690979 1 0.9904599189758301 0 0.0 0 0.0 0 0.0 0.0 0.6859500408172607 -0.227411150932312 0.0 0.8990447521209717 0.4377880096435547 0.37864139676094055 0.8909733295440674 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 0.0 0.6859500408172607 -0.227411150932312 0.0 0.8990447521209717 0.4377880096435547 0.37864139676094055 0.8909733295440674 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 0.03514702618122101 0.6757450103759766 -0.23533987998962402 0.3003937005996704 0.825434148311615 0.4778893291950226 0.39532920718193054 0.891121506690979 1 0.9904599189758301 0 0.0 0 0.0 0 0.0 0.037127718329429626 0.7183771133422852 -0.2708592414855957 0.12225715070962906 0.7812433242797852 0.6121097207069397 0.3978635370731354 0.8623329997062683 1 0.994321346282959 0 0.0 0 0.0 0 0.0 0.03514702618122101 0.6757450103759766 -0.23533987998962402 0.3003937005996704 0.825434148311615 0.4778893291950226 0.39532920718193054 0.891121506690979 1 0.9904599189758301 0 0.0 0 0.0 0 0.0 0.05297325551509857 0.6632869243621826 -0.17042005062103271 0.42271187901496887 0.8485671281814575 0.3181249499320984 0.40667101740837097 0.9228817820549011 1 0.9830220341682434 0 0.0 0 0.0 0 0.0 0.07448214292526245 0.6610023975372314 -0.22847318649291992 0.29837948083877563 0.8330942988395691 0.46571245789527893 0.41453418135643005 0.8990539312362671 1 0.9883980751037598 0 0.0 0 0.0 0 0.0 0.037127718329429626 0.7183771133422852 -0.2708592414855957 0.12225715070962906 0.7812433242797852 0.6121097207069397 0.3978635370731354 0.8623329997062683 1 0.994321346282959 0 0.0 0 0.0 0 0.0 0.03514702618122101 0.6757450103759766 -0.23533987998962402 0.3003937005996704 0.825434148311615 0.4778893291950226 0.39532920718193054 0.891121506690979 1 0.9904599189758301 0 0.0 0 0.0 0 0.0 0.07567718625068665 0.6810379028320312 -0.25069737434387207 0.19437238574028015 0.6898708939552307 0.6973174214363098 0.41558343172073364 0.883171558380127 1 0.9912428259849548 0 0.0 0 0.0 0 0.0 0.03217598795890808 0.5661249160766602 -0.10826873779296875 0.6189153790473938 -0.002288888208568096 0.7854243516921997 0.9652963876724243 0.03581248223781586 1 0.9586337804794312 0 0.010607149451971054 0 0.0 0 0.0 0.019301503896713257 0.5543453693389893 -0.08724924921989441 0.7199926972389221 0.03091524913907051 0.6932584643363953 0.963473379611969 0.025931738317012787 1 0.9544193148612976 0 0.017048027366399765 0 0.0 0 0.0 0.04406014084815979 0.5062999725341797 -0.1307528018951416 0.6033509373664856 -0.4283883273601532 0.6725974082946777 0.9375776648521423 0.05149134621024132 1 0.9310470223426819 0 0.05096268281340599 0 0.0 0 0.0 0.0 0.5866754055023193 -0.08073744177818298 0.0 0.20923489332199097 0.9778435826301575 0.9745243191719055 0.012592869810760021 1 0.9624937176704407 0 0.004993952810764313 0 0.0 0 0.0 0.019301503896713257 0.5543453693389893 -0.08724924921989441 0.7199926972389221 0.03091524913907051 0.6932584643363953 0.963473379611969 0.025931738317012787 1 0.9544193148612976 0 0.017048027366399765 0 0.0 0 0.0 0.03217598795890808 0.5661249160766602 -0.10826873779296875 0.6189153790473938 -0.002288888208568096 0.7854243516921997 0.9652963876724243 0.03581248223781586 1 0.9586337804794312 0 0.010607149451971054 0 0.0 0 0.0 0.0 0.6267490386962891 -0.09107580780982971 0.0 0.4541764557361603 0.8908963203430176 0.38086456060409546 0.9680102467536926 1 0.9708038568496704 0 0.0 0 0.0 0 0.0 0.04604083299636841 0.629746675491333 -0.11427515745162964 0.5255287289619446 0.4360484480857849 0.730491042137146 0.4033519923686981 0.9574975967407227 1 0.9731448888778687 0 0.0 0 0.0 0 0.0 0.023262888193130493 0.648740291595459 -0.1271979808807373 0.27558213472366333 0.8101443648338318 0.5173802971839905 0.39259374141693115 0.9457398056983948 1 0.9771119952201843 0 0.0 0 0.0 0 0.0 0.0 0.6267490386962891 -0.09107580780982971 0.0 0.4541764557361603 0.8908963203430176 0.9880750775337219 0.011592945083975792 1 0.9708038568496704 0 0.0 0 0.0 0 0.0 0.0 0.5866754055023193 -0.08073744177818298 0.0 0.20923489332199097 0.9778435826301575 0.9745243191719055 0.012592869810760021 1 0.9624937176704407 0 0.004993952810764313 0 0.0 0 0.0 0.019301511347293854 0.6020534038543701 -0.09771808981895447 0.5544602870941162 0.06466872245073318 0.8296762108802795 0.9800795912742615 0.024327803403139114 1 0.9663557410240173 0 0.0 0 0.0 0 0.0 0.0 0.4937889575958252 -0.09715571999549866 0.0 -0.6279793977737427 0.7781914472579956 0.9327072501182556 0.023990735411643982 1 0.9297935366630554 0 0.05221788212656975 0 0.0 0 0.0 0.02722427248954773 0.4976499080657959 -0.1062207818031311 0.5827203989028931 -0.48753318190574646 0.6501358151435852 0.9371650218963623 0.03867452219128609 1 0.9274529814720154 0 0.053911928087472916 0 0.0 0 0.0 0.019301503896713257 0.5543453693389893 -0.08724924921989441 0.7199926972389221 0.03091524913907051 0.6932584643363953 0.963473379611969 0.025931738317012787 1 0.9544193148612976 0 0.017048027366399765 0 0.0 0 0.0 0.02722427248954773 0.4976499080657959 -0.1062207818031311 0.5827203989028931 -0.48753318190574646 0.6501358151435852 0.9371650218963623 0.03867452219128609 1 0.9274529814720154 0 0.053911928087472916 0 0.0 0 0.0 0.04406014084815979 0.5062999725341797 -0.1307528018951416 0.6033509373664856 -0.4283883273601532 0.6725974082946777 0.9375776648521423 0.05149134621024132 1 0.9310470223426819 0 0.05096268281340599 0 0.0 0 0.0 0.019301503896713257 0.5543453693389893 -0.08724924921989441 0.7199926972389221 0.03091524913907051 0.6932584643363953 0.963473379611969 0.025931738317012787 1 0.9544193148612976 0 0.017048027366399765 0 0.0 0 0.0 0.0992489755153656 0.6243481636047363 -0.1760026216506958 0.6385387778282166 0.5357829332351685 0.5523850321769714 0.42691096663475037 0.9333289265632629 1 0.9787788391113281 0 0.0 0 0.0 0 0.0 0.12389302253723145 0.6452987194061279 -0.2239953875541687 0.3717764914035797 0.6311227679252625 0.6807458996772766 0.4386693835258484 0.9063490033149719 1 0.9863564372062683 0 0.0 0 0.0 0 0.0 0.07448214292526245 0.6610023975372314 -0.22847318649291992 0.29837948083877563 0.8330942988395691 0.46571245789527893 0.41453418135643005 0.8990539312362671 1 0.9883980751037598 0 0.0 0 0.0 0 0.0 0.04604083299636841 0.629746675491333 -0.11427515745162964 0.5255287289619446 0.4360484480857849 0.730491042137146 0.4033519923686981 0.9574975967407227 1 0.9731448888778687 0 0.0 0 0.0 0 0.0 0.0992489755153656 0.6243481636047363 -0.1760026216506958 0.6385387778282166 0.5357829332351685 0.5523850321769714 0.42691096663475037 0.9333289265632629 1 0.9787788391113281 0 0.0 0 0.0 0 0.0 0.05297325551509857 0.6632869243621826 -0.17042005062103271 0.42271187901496887 0.8485671281814575 0.3181249499320984 0.40667101740837097 0.9228817820549011 1 0.9830220341682434 0 0.0 0 0.0 0 0.0 0.03217598795890808 0.5661249160766602 -0.10826873779296875 0.6189153790473938 -0.002288888208568096 0.7854243516921997 0.9652963876724243 0.03581248223781586 1 0.9586337804794312 0 0.010607149451971054 0 0.0 0 0.0 0.059905678033828735 0.5519924163818359 -0.12115323543548584 0.43357646465301514 -0.15253150463104248 0.8880886435508728 0.9615859389305115 0.05308860167860985 1 0.9548473358154297 0 0.015978146344423294 0 0.0 0 0.0 0.04604083299636841 0.629746675491333 -0.11427515745162964 0.5255287289619446 0.4360484480857849 0.730491042137146 0.9921565055847168 0.03848811611533165 1 0.9731448888778687 0 0.0 0 0.0 0 0.0 0.059905678033828735 0.5519924163818359 -0.12115323543548584 0.43357646465301514 -0.15253150463104248 0.8880886435508728 0.9615859389305115 0.05308860167860985 1 0.9548473358154297 0 0.015978146344423294 0 0.0 0 0.0 0.04406014084815979 0.5062999725341797 -0.1307528018951416 0.6033509373664856 -0.4283883273601532 0.6725974082946777 0.9375776648521423 0.05149134621024132 1 0.9310470223426819 0 0.05096268281340599 0 0.0 0 0.0 0.08664500713348389 0.49995994567871094 -0.15126699209213257 0.5456098914146423 -0.5877254605293274 0.5973693132400513 0.9379087686538696 0.07691145688295364 1 0.9312424063682556 0 0.048782166093587875 0 0.0 0 0.0 0.04604083299636841 0.629746675491333 -0.11427515745162964 0.5255287289619446 0.4360484480857849 0.730491042137146 0.9921565055847168 0.03848811611533165 1 0.9731448888778687 0 0.0 0 0.0 0 0.0 0.059905678033828735 0.5519924163818359 -0.12115323543548584 0.43357646465301514 -0.15253150463104248 0.8880886435508728 0.9615859389305115 0.05308860167860985 1 0.9548473358154297 0 0.015978146344423294 0 0.0 0 0.0 0.09060636162757874 0.555675745010376 -0.14083874225616455 0.6668904423713684 -0.021729178726673126 0.7448042035102844 0.9639025330543518 0.07183090597391129 1 0.9577164649963379 0 0.01108131930232048 0 0.0 0 0.0 0.12900519371032715 0.580592155456543 -0.1809338927268982 0.7435224652290344 0.13650929927825928 0.6545915007591248 0.9710297584533691 0.09706727415323257 1 0.9719353318214417 0 0.0 0 0.0 0 0.0 0.09060636162757874 0.555675745010376 -0.14083874225616455 0.6668904423713684 -0.021729178726673126 0.7448042035102844 0.9639025330543518 0.07183090597391129 1 0.9577164649963379 0 0.01108131930232048 0 0.0 0 0.0 0.08664500713348389 0.49995994567871094 -0.15126699209213257 0.5456098914146423 -0.5877254605293274 0.5973693132400513 0.9379087686538696 0.07691145688295364 1 0.9312424063682556 0 0.048782166093587875 0 0.0 0 0.0 0.17542767524719238 0.5399246215820312 -0.2481163740158081 0.886593222618103 -0.28980377316474915 0.36039307713508606 0.9461795687675476 0.1376567780971527 1 0.9722552299499512 0 0.0 0 0.0 0 0.0 0.18975555896759033 0.5741572380065918 -0.27861666679382324 0.9336222410202026 -0.14868617057800293 0.3259071707725525 0.9549236297607422 0.14849883317947388 1 0.983038604259491 0 0.0 0 0.0 0 0.0 0.12900519371032715 0.580592155456543 -0.1809338927268982 0.7435224652290344 0.13650929927825928 0.6545915007591248 0.9710297584533691 0.09706727415323257 1 0.9719353318214417 0 0.0 0 0.0 0 0.0 0.041914358735084534 0.7521989345550537 -0.3280456066131592 0.06817834824323654 0.921597957611084 0.3820917308330536 0.40006113052368164 0.8271682858467102 1 0.9970934987068176 0 0.0 0 0.0 0 0.0 0.059245407581329346 0.759354829788208 -0.3721191883087158 0.1420636624097824 0.9840388298034668 0.10684530436992645 0.40722841024398804 0.8062321543693542 1 0.9981570839881897 0 0.0 0 0.0 0 0.0 0.0 0.7655167579650879 -0.3776092529296875 0.0 0.9911190867424011 0.13275551795959473 0.37730279564857483 0.8014988899230957 1 0.9984956979751587 0 0.0 0 0.0 0 0.0 0.0 0.7663571834564209 -0.4498615264892578 0.0 0.9117709994316101 -0.41062653064727783 0.3737609088420868 0.7704716324806213 1 0.9993343353271484 0 0.0 0 0.0 0 0.0 0.0 0.7655167579650879 -0.3776092529296875 0.0 0.9911190867424011 0.13275551795959473 0.37730279564857483 0.8014988899230957 1 0.9984956979751587 0 0.0 0 0.0 0 0.0 0.059245407581329346 0.759354829788208 -0.3721191883087158 0.1420636624097824 0.9840388298034668 0.10684530436992645 0.40722841024398804 0.8062321543693542 1 0.9981570839881897 0 0.0 0 0.0 0 0.0 0.0 0.7286481857299805 -0.29208290576934814 0.0 0.8584246635437012 0.5129246115684509 0.3787182867527008 0.8497394323348999 1 0.9956300258636475 0 0.0 0 0.0 0 0.0 0.037127718329429626 0.7183771133422852 -0.2708592414855957 0.12225715070962906 0.7812433242797852 0.6121097207069397 0.3978635370731354 0.8623329997062683 1 0.994321346282959 0 0.0 0 0.0 0 0.0 0.041914358735084534 0.7521989345550537 -0.3280456066131592 0.06817834824323654 0.921597957611084 0.3820917308330536 0.40006113052368164 0.8271682858467102 1 0.9970934987068176 0 0.0 0 0.0 0 0.0 0.11437469720840454 0.7034616470336914 -0.2846221923828125 0.12384410947561264 0.6982024312019348 0.7050996422767639 0.4353049099445343 0.8618066906929016 1 0.993859589099884 0 0.0 0 0.0 0 0.0 0.12691903114318848 0.7287836074829102 -0.3071833848953247 0.20764793455600739 0.8145695328712463 0.5415814518928528 0.4425181448459625 0.8441644906997681 1 0.9954813718795776 0 0.0 0 0.0 0 0.0 0.041914358735084534 0.7521989345550537 -0.3280456066131592 0.06817834824323654 0.921597957611084 0.3820917308330536 0.40006113052368164 0.8271682858467102 1 0.9970934987068176 0 0.0 0 0.0 0 0.0 0.12900519371032715 0.580592155456543 -0.1809338927268982 0.7435224652290344 0.13650929927825928 0.6545915007591248 0.4384097158908844 0.9454826712608337 1 0.9719353318214417 0 0.0 0 0.0 0 0.0 0.1536492109298706 0.6081211566925049 -0.22929680347442627 0.7448957562446594 0.18478956818580627 0.6410412788391113 0.450658917427063 0.9162338972091675 1 0.9825928807258606 0 0.0 0 0.0 0 0.0 0.0992489755153656 0.6243481636047363 -0.1760026216506958 0.6385387778282166 0.5357829332351685 0.5523850321769714 0.42691096663475037 0.9333289265632629 1 0.9787788391113281 0 0.0 0 0.0 0 0.0 0.16969645023345947 0.6551282405853271 -0.246321439743042 0.6105228066444397 0.38544878363609314 0.6918545961380005 0.9921565055847168 0.12496611475944519 1 0.9888418912887573 0 0.0 0 0.0 0 0.0 0.1536492109298706 0.6081211566925049 -0.22929680347442627 0.7448957562446594 0.18478956818580627 0.6410412788391113 0.974439799785614 0.11739514768123627 1 0.9825928807258606 0 0.0 0 0.0 0 0.0 0.18975555896759033 0.5741572380065918 -0.27861666679382324 0.9336222410202026 -0.14868617057800293 0.3259071707725525 0.9549236297607422 0.14849883317947388 1 0.983038604259491 0 0.0 0 0.0 0 0.0 0.1668308973312378 0.6906447410583496 -0.2779656648635864 0.5177770256996155 0.6292916536331177 0.5795159935951233 0.8731365203857422 0.4358011484146118 1 0.9922325015068054 0 0.0 0 0.0 0 0.0 0.16969645023345947 0.6551282405853271 -0.246321439743042 0.6105228066444397 0.38544878363609314 0.6918545961380005 0.8650132417678833 0.44598329067230225 1 0.9888418912887573 0 0.0 0 0.0 0 0.0 0.2143995761871338 0.6344926357269287 -0.3323737382888794 0.8702353239059448 -0.09164708107709885 0.4839930534362793 0.886073887348175 0.48145270347595215 1 0.99260014295578 0 0.0 0 0.0 0 0.0 0.12691903114318848 0.7287836074829102 -0.3071833848953247 0.20764793455600739 0.8145695328712463 0.5415814518928528 0.4425181448459625 0.8441644906997681 1 0.9954813718795776 0 0.0 0 0.0 0 0.0 0.11437469720840454 0.7034616470336914 -0.2846221923828125 0.12384410947561264 0.6982024312019348 0.7050996422767639 0.4353049099445343 0.8618066906929016 1 0.993859589099884 0 0.0 0 0.0 0 0.0 0.1668308973312378 0.6906447410583496 -0.2779656648635864 0.5177770256996155 0.6292916536331177 0.5795159935951233 0.46132102608680725 0.8691244125366211 1 0.9922325015068054 0 0.0 0 0.0 0 0.0 0.12389302253723145 0.6452987194061279 -0.2239953875541687 0.3717764914035797 0.6311227679252625 0.6807458996772766 0.4386693835258484 0.9063490033149719 1 0.9863564372062683 0 0.0 0 0.0 0 0.0 0.0992489755153656 0.6243481636047363 -0.1760026216506958 0.6385387778282166 0.5357829332351685 0.5523850321769714 0.42691096663475037 0.9333289265632629 1 0.9787788391113281 0 0.0 0 0.0 0 0.0 0.1536492109298706 0.6081211566925049 -0.22929680347442627 0.7448957562446594 0.18478956818580627 0.6410412788391113 0.450658917427063 0.9162338972091675 1 0.9825928807258606 0 0.0 0 0.0 0 0.0 0.059245407581329346 0.759354829788208 -0.3721191883087158 0.1420636624097824 0.9840388298034668 0.10684530436992645 0.40722841024398804 0.8062321543693542 1 0.9981570839881897 0 0.0 0 0.0 0 0.0 0.041914358735084534 0.7521989345550537 -0.3280456066131592 0.06817834824323654 0.921597957611084 0.3820917308330536 0.40006113052368164 0.8271682858467102 1 0.9970934987068176 0 0.0 0 0.0 0 0.0 0.12691903114318848 0.7287836074829102 -0.3071833848953247 0.20764793455600739 0.8145695328712463 0.5415814518928528 0.4425181448459625 0.8441644906997681 1 0.9954813718795776 0 0.0 0 0.0 0 0.0 0.07492586970329285 0.7546496391296387 -0.43943047523498535 -0.1832026094198227 0.964598536491394 -0.1896420121192932 0.4114780128002167 0.779198944568634 1 0.9989309310913086 0 0.0 0 0.0 0 0.0 0.13420909643173218 0.7470312118530273 -0.36113905906677246 0.2852870225906372 0.9150669574737549 0.2850123643875122 0.44494444131851196 0.8153911232948303 1 0.9972447752952576 0 0.0 0 0.0 0 0.0 0.15930330753326416 0.8070216178894043 -0.5146346092224121 0.2629169523715973 0.6476333141326904 0.7151402235031128 0.4546871483325958 0.7309730052947998 1 0.9980078935623169 0 0.0 0 0.0 0 0.0 0.2714434862136841 0.6815202236175537 -0.37427401542663574 0.8992888927459717 0.2068544626235962 0.38532671332359314 0.5090063214302063 0.8317936658859253 1 0.9954957962036133 0 0.0 0 0.0 0 0.0 0.23513078689575195 0.6938152313232422 -0.4137706756591797 0.09668263792991638 0.8894924521446228 0.4465163052082062 0.48952001333236694 0.8107777237892151 1 0.9962446093559265 0 0.0 0 0.0 0 0.0 0.17808693647384644 0.7106759548187256 -0.3287475109100342 0.5918454527854919 0.7044282555580139 0.39173558354377747 0.46606069803237915 0.8411576151847839 1 0.9952844977378845 0 0.0 0 0.0 0 0.0 0.3023422956466675 0.7849597930908203 -0.4707658290863037 0.809015154838562 0.40089112520217896 0.4297921657562256 0.527910053730011 0.7577385902404785 1 0.9974520802497864 0 0.0 0 0.0 0 0.0 0.2505803108215332 0.7695996761322021 -0.48949456214904785 -0.1833857297897339 0.7009491324424744 0.6891995072364807 0.4994630813598633 0.7543298602104187 1 0.9975677132606506 0 0.0 0 0.0 0 0.0 0.23513078689575195 0.6938152313232422 -0.4137706756591797 0.09668263792991638 0.8894924521446228 0.4465163052082062 0.48952001333236694 0.8107777237892151 1 0.9962446093559265 0 0.0 0 0.0 0 0.0 0.13420909643173218 0.7470312118530273 -0.36113905906677246 0.2852870225906372 0.9150669574737549 0.2850123643875122 0.44494444131851196 0.8153911232948303 1 0.9972447752952576 0 0.0 0 0.0 0 0.0 0.17808693647384644 0.7106759548187256 -0.3287475109100342 0.5918454527854919 0.7044282555580139 0.39173558354377747 0.46606069803237915 0.8411576151847839 1 0.9952844977378845 0 0.0 0 0.0 0 0.0 0.23513078689575195 0.6938152313232422 -0.4137706756591797 0.09668263792991638 0.8894924521446228 0.4465163052082062 0.48952001333236694 0.8107777237892151 1 0.9962446093559265 0 0.0 0 0.0 0 0.0 0.2505803108215332 0.7695996761322021 -0.48949456214904785 -0.1833857297897339 0.7009491324424744 0.6891995072364807 0.4994630813598633 0.7543298602104187 1 0.9975677132606506 0 0.0 0 0.0 0 0.0 0.19472473859786987 0.7745609283447266 -0.48571276664733887 0.06698812544345856 0.6877346038818359 0.7228308916091919 0.47163125872612 0.7539528608322144 1 0.9977135062217712 0 0.0 0 0.0 0 0.0 0.19472473859786987 0.7452795505523682 -0.4596238136291504 0.36835840344429016 0.7375103235244751 0.5659962892532349 0.47066688537597656 0.7744562029838562 1 0.9974828362464905 0 0.0 0 0.0 0 0.0 0.15930330753326416 0.8070216178894043 -0.5146346092224121 0.2629169523715973 0.6476333141326904 0.7151402235031128 0.4546871483325958 0.7309730052947998 1 0.9980078935623169 0 0.0 0 0.0 0 0.0 0.13420909643173218 0.7470312118530273 -0.36113905906677246 0.2852870225906372 0.9150669574737549 0.2850123643875122 0.44494444131851196 0.8153911232948303 1 0.9972447752952576 0 0.0 0 0.0 0 0.0 0.19472473859786987 0.7452795505523682 -0.4596238136291504 0.36835840344429016 0.7375103235244751 0.5659962892532349 0.47066688537597656 0.7744562029838562 1 0.9974828362464905 0 0.0 0 0.0 0 0.0 0.15930330753326416 0.8070216178894043 -0.5146346092224121 0.2629169523715973 0.6476333141326904 0.7151402235031128 0.4546871483325958 0.7309730052947998 1 0.9980078935623169 0 0.0 0 0.0 0 0.0 0.19472473859786987 0.7745609283447266 -0.48571276664733887 0.06698812544345856 0.6877346038818359 0.7228308916091919 0.47163125872612 0.7539528608322144 1 0.9977135062217712 0 0.0 0 0.0 0 0.0 0.2505803108215332 0.7695996761322021 -0.48949456214904785 -0.1833857297897339 0.7009491324424744 0.6891995072364807 0.4994630813598633 0.7543298602104187 1 0.9975677132606506 0 0.0 0 0.0 0 0.0 0.2505803108215332 0.7695996761322021 -0.48949456214904785 -0.1833857297897339 0.7009491324424744 0.6891995072364807 0.4994630813598633 0.7543298602104187 1 0.9975677132606506 0 0.0 0 0.0 0 0.0 0.3023422956466675 0.7849597930908203 -0.4707658290863037 0.809015154838562 0.40089112520217896 0.4297921657562256 0.527910053730011 0.7577385902404785 1 0.9974520802497864 0 0.0 0 0.0 0 0.0 0.29834794998168945 0.8586046695709229 -0.544276237487793 0.7876216769218445 0.5459151268005371 0.2855921983718872 0.527910053730011 0.7027824521064758 1 0.9977295398712158 0 0.0 0 0.0 0 0.0 0.2947826385498047 0.9091815948486328 -0.5893387794494629 0.82534259557724 0.5525681376457214 0.11593981832265854 0.5277626514434814 0.6673424243927002 1 0.9977980256080627 0 0.0 0 0.0 0 0.0 0.2638838291168213 0.9322519302368164 -0.609893798828125 0.14166691899299622 0.9372844696044922 -0.3183690905570984 0.5128092169761658 0.650969922542572 1 0.9978194236755371 0 0.0 0 0.0 0 0.0 0.2460576295852661 0.8691680431365967 -0.5895872116088867 -0.0476393923163414 0.5283669829368591 0.8476516008377075 0.49987420439720154 0.6797340512275696 1 0.997829020023346 0 0.0 0 0.0 0 0.0 0.15930330753326416 0.8070216178894043 -0.5146346092224121 0.2629169523715973 0.6476333141326904 0.7151402235031128 0.4546871483325958 0.7309730052947998 1 0.9980078935623169 0 0.0 0 0.0 0 0.0 0.2460576295852661 0.8691680431365967 -0.5895872116088867 -0.0476393923163414 0.5283669829368591 0.8476516008377075 0.49987420439720154 0.6797340512275696 1 0.997829020023346 0 0.0 0 0.0 0 0.0 0.20446312427520752 0.9136180877685547 -0.5932917594909668 -0.4698324501514435 0.8652912974357605 -0.1745048314332962 0.48197782039642334 0.6635977029800415 1 0.9978598952293396 0 0.0 0 0.0 0 0.0 0.12602776288986206 0.8367936611175537 -0.5169486999511719 -0.5360575914382935 0.844019889831543 0.014984588138759136 0.9544497728347778 0.7932650446891785 1 0.9980970025062561 0 0.0 0 0.0 0 0.0 0.1937013864517212 0.7858362197875977 -0.5540850162506104 -0.2551347315311432 -0.29074984788894653 -0.922116756439209 0.9168798327445984 0.7807419896125793 1 0.997936487197876 0 0.0 0 0.0 0 0.0 0.08317875862121582 0.7046983242034912 -0.4855692386627197 -0.20276497304439545 0.3567918837070465 -0.9118930697441101 0.9190778136253357 0.8595334887504578 1 0.9991380572319031 0 0.0 0 0.0 0 0.0 0.08664500713348389 0.49995994567871094 -0.15126699209213257 0.5456098914146423 -0.5877254605293274 0.5973693132400513 0.9379087686538696 0.07691145688295364 1 0.9312424063682556 0 0.048782166093587875 0 0.0 0 0.0 0.04406014084815979 0.5062999725341797 -0.1307528018951416 0.6033509373664856 -0.4283883273601532 0.6725974082946777 0.9375776648521423 0.05149134621024132 1 0.9310470223426819 0 0.05096268281340599 0 0.0 0 0.0 0.04406014084815979 0.47633934020996094 -0.1643797755241394 0.4945219159126282 -0.7363200783729553 0.4617755711078644 0.9167872667312622 0.06153831630945206 1 0.8978144526481628 0 0.0762820616364479 0 0.0 0 0.0 0.18975555896759033 0.5741572380065918 -0.27861666679382324 0.9336222410202026 -0.14868617057800293 0.3259071707725525 0.9549236297607422 0.14849883317947388 1 0.983038604259491 0 0.0 0 0.0 0 0.0 0.17542767524719238 0.5399246215820312 -0.2481163740158081 0.886593222618103 -0.28980377316474915 0.36039307713508606 0.9461795687675476 0.1376567780971527 1 0.9722552299499512 0 0.0 0 0.0 0 0.0 0.1636601686477661 0.5023448467254639 -0.3202894926071167 0.8532670140266418 -0.49674978852272034 0.158513143658638 0.9101097583770752 0.15139897167682648 1 0.975587785243988 0 0.0 0 0.0 0 0.0 0.04406014084815979 0.5062999725341797 -0.1307528018951416 0.6033509373664856 -0.4283883273601532 0.6725974082946777 0.9375776648521423 0.05149134621024132 1 0.9310470223426819 0 0.05096268281340599 0 0.0 0 0.0 0.02722427248954773 0.4976499080657959 -0.1062207818031311 0.5827203989028931 -0.48753318190574646 0.6501358151435852 0.9371650218963623 0.03867452219128609 1 0.9274529814720154 0 0.053911928087472916 0 0.0 0 0.0 0.03183332085609436 0.4725472927093506 -0.1536623239517212 0.4668111205101013 -0.7400128245353699 0.4841761589050293 0.9156655073165894 0.053619880229234695 1 0.8963752388954163 0 0.07782471179962158 0 0.0 0 0.0 0.20446312427520752 0.9136180877685547 -0.5932917594909668 -0.4698324501514435 0.8652912974357605 -0.1745048314332962 0.9505891799926758 0.7223089933395386 1 0.9978598952293396 0 0.0 0 0.0 0 0.0 0.25437653064727783 0.8707180023193359 -0.6044466495513916 0.1664784699678421 -0.32941678166389465 -0.9293801784515381 0.9264681935310364 0.7198551297187805 1 0.9978157877922058 0 0.0 0 0.0 0 0.0 0.1937013864517212 0.7858362197875977 -0.5540850162506104 -0.2551347315311432 -0.29074984788894653 -0.922116756439209 0.9168798327445984 0.7807419896125793 1 0.997936487197876 0 0.0 0 0.0 0 0.0 0.07492586970329285 0.7546496391296387 -0.43943047523498535 -0.1832026094198227 0.964598536491394 -0.1896420121192932 0.9763534069061279 0.9473682045936584 1 0.9989309310913086 0 0.0 0 0.0 0 0.0 0.08317875862121582 0.7046983242034912 -0.4855692386627197 -0.20276497304439545 0.3567918837070465 -0.9118930697441101 0.9413006901741028 0.9422845840454102 1 0.9991380572319031 0 0.0 0 0.0 0 0.0 0.0 0.717432975769043 -0.496915340423584 0.0 0.5661183595657349 -0.8242744207382202 0.9412925839424133 0.9857740998268127 1 0.9996612071990967 0 0.0 0 0.0 0 0.0 0.17542767524719238 0.5399246215820312 -0.2481163740158081 0.886593222618103 -0.28980377316474915 0.36039307713508606 0.9461795687675476 0.1376567780971527 1 0.9722552299499512 0 0.0 0 0.0 0 0.0 0.15695953369140625 0.5213019847869873 -0.23152399063110352 0.7372050881385803 -0.5348063707351685 0.41285440325737 0.9393715262413025 0.12667523324489594 1 0.9635539650917053 0 0.0 0 0.0 0 0.0 0.1420363187789917 0.49902892112731934 -0.265682578086853 0.7232886552810669 -0.6007568836212158 0.3404339849948883 0.9186869263648987 0.12909665703773499 1 0.9554049968719482 0 0.009283550083637238 0 0.0 0 0.0 0.2143995761871338 0.6344926357269287 -0.3323737382888794 0.8702353239059448 -0.09164708107709885 0.4839930534362793 0.9702180027961731 0.1673179417848587 1 0.99260014295578 0 0.0 0 0.0 0 0.0 0.18975555896759033 0.5741572380065918 -0.27861666679382324 0.9336222410202026 -0.14868617057800293 0.3259071707725525 0.9549236297607422 0.14849883317947388 1 0.983038604259491 0 0.0 0 0.0 0 0.0 0.18907427787780762 0.5321424007415771 -0.3633767366409302 0.8845484852790833 -0.4600665271282196 0.07654042541980743 0.9159454703330994 0.17071913182735443 1 0.9870381951332092 0 0.0 0 0.0 0 0.0 0.2714434862136841 0.6815202236175537 -0.37427401542663574 0.8992888927459717 0.2068544626235962 0.38532671332359314 0.12856031954288483 0.23758146166801453 1 0.9954957962036133 0 0.0 0 0.0 0 0.0 0.2143995761871338 0.6344926357269287 -0.3323737382888794 0.8702353239059448 -0.09164708107709885 0.4839930534362793 0.15881234407424927 0.269660085439682 1 0.99260014295578 0 0.0 0 0.0 0 0.0 0.215201735496521 0.579124927520752 -0.41087865829467773 0.8949857950210571 -0.44148075580596924 -0.0636310949921608 0.175100177526474 0.25710052251815796 1 0.9931851625442505 0 0.0 0 0.0 0 0.0 0.3023422956466675 0.7849597930908203 -0.4707658290863037 0.809015154838562 0.40089112520217896 0.4297921657562256 0.10812272131443024 0.16332419216632843 1 0.9974520802497864 0 0.0 0 0.0 0 0.0 0.2714434862136841 0.6815202236175537 -0.37427401542663574 0.8992888927459717 0.2068544626235962 0.38532671332359314 0.12856031954288483 0.23758146166801453 1 0.9954957962036133 0 0.0 0 0.0 0 0.0 0.2332911491394043 0.6557881832122803 -0.45631957054138184 0.826288640499115 -0.40223395824432373 -0.39423811435699463 0.15952694416046143 0.21251626312732697 1 0.9963886141777039 0 0.0 0 0.0 0 0.0 0.29834794998168945 0.8586046695709229 -0.544276237487793 0.7876216769218445 0.5459151268005371 0.2855921983718872 0.10662513971328735 0.10797388106584549 1 0.9977295398712158 0 0.0 0 0.0 0 0.0 0.2595592737197876 0.8025784492492676 -0.5593953132629395 0.48774680495262146 -0.4980620741844177 -0.7169408202171326 0.13544107973575592 0.12047519534826279 1 0.9977782964706421 0 0.0 0 0.0 0 0.0 0.25437653064727783 0.8707180023193359 -0.6044466495513916 0.1664784699678421 -0.32941678166389465 -0.9293801784515381 0.1323527842760086 0.07852371037006378 1 0.9978157877922058 0 0.0 0 0.0 0 0.0 0.15695953369140625 0.5213019847869873 -0.23152399063110352 0.7372050881385803 -0.5348063707351685 0.41285440325737 0.9393715262413025 0.12667523324489594 1 0.9635539650917053 0 0.0 0 0.0 0 0.0 0.08664500713348389 0.49995994567871094 -0.15126699209213257 0.5456098914146423 -0.5877254605293274 0.5973693132400513 0.9379087686538696 0.07691145688295364 1 0.9312424063682556 0 0.048782166093587875 0 0.0 0 0.0 0.07519534230232239 0.4880945682525635 -0.17792588472366333 0.4931180775165558 -0.8037965297698975 0.3327127993106842 0.9240359663963318 0.07843738049268723 1 0.9170035123825073 0 0.058905184268951416 0 0.0 0 0.0 0.3023422956466675 0.7849597930908203 -0.4707658290863037 0.809015154838562 0.40089112520217896 0.4297921657562256 0.10812272131443024 0.16332419216632843 1 0.9974520802497864 0 0.0 0 0.0 0 0.0 0.23466861248016357 0.7335350513458252 -0.5268294811248779 0.5275429487228394 -0.4376964569091797 -0.7280495762825012 0.15449798107147217 0.1570688784122467 1 0.9977160096168518 0 0.0 0 0.0 0 0.0 0.2595592737197876 0.8025784492492676 -0.5593953132629395 0.48774680495262146 -0.4980620741844177 -0.7169408202171326 0.13544107973575592 0.12047519534826279 1 0.9977782964706421 0 0.0 0 0.0 0 0.0 0.08317875862121582 0.7046983242034912 -0.4855692386627197 -0.20276497304439545 0.3567918837070465 -0.9118930697441101 0.9413006901741028 0.9422845840454102 1 0.9991380572319031 0 0.0 0 0.0 0 0.0 0.08317875862121582 0.5977051258087158 -0.5351896286010742 0.13367107510566711 0.040162358433008194 -0.9902035593986511 0.8843513131141663 0.9313850402832031 1 0.9983817934989929 0 0.0 0 0.0 0 0.0 0.0 0.6219885349273682 -0.5401461124420166 0.0 0.21689504384994507 -0.9761650562286377 0.8908731341362 0.9758754968643188 1 0.9991644024848938 0 0.0 0 0.0 0 0.0 0.08317875862121582 0.5977051258087158 -0.5351896286010742 0.13367107510566711 0.040162358433008194 -0.9902035593986511 0.24910669028759003 0.1976434588432312 1 0.9983817934989929 0 0.0 0 0.0 0 0.0 0.07982555031776428 0.4681966304779053 -0.49700307846069336 0.32801294326782227 -0.6124454736709595 -0.7191991806030273 0.26634955406188965 0.25791066884994507 1 0.9938180446624756 0 0.0 0 0.0 0 0.0 0.0 0.4954061508178711 -0.5303821563720703 0.0 -0.39960935711860657 -0.9166539311408997 0.30426859855651855 0.2333311140537262 1 0.9962685704231262 0 0.0 0 0.0 0 0.0 0.07982555031776428 0.4681966304779053 -0.49700307846069336 0.32801294326782227 -0.6124454736709595 -0.7191991806030273 0.26634955406188965 0.25791066884994507 1 0.9938180446624756 0 0.0 0 0.0 0 0.0 0.07171991467475891 0.41830766201019287 -0.40954136848449707 0.5254982113838196 -0.7786187529563904 -0.3428449332714081 0.2686126232147217 0.31042376160621643 1 0.9810636043548584 0 0.0 0 0.0 0 0.0 0.0 0.39038944244384766 -0.43143999576568604 0.0 -0.7942442297935486 -0.6075929999351501 0.30977341532707214 0.30976250767707825 1 0.9789760708808899 0 0.0 0 0.0 0 0.0 0.02722427248954773 0.4976499080657959 -0.1062207818031311 0.5827203989028931 -0.48753318190574646 0.6501358151435852 0.9371650218963623 0.03867452219128609 1 0.9274529814720154 0 0.053911928087472916 0 0.0 0 0.0 0.0 0.4937889575958252 -0.09715571999549866 0.0 -0.6279793977737427 0.7781914472579956 0.9327072501182556 0.023990735411643982 1 0.9297935366630554 0 0.05221788212656975 0 0.0 0 0.0 0.0 0.46508145332336426 -0.15146160125732422 0.0 -0.8492690920829773 0.5279091596603394 0.9070941805839539 0.03858356922864914 1 0.8848198652267456 0 0.08769097924232483 0 0.0 0 0.0 0.07171991467475891 0.41830766201019287 -0.40954136848449707 0.5254982113838196 -0.7786187529563904 -0.3428449332714081 0.2686126232147217 0.31042376160621643 1 0.9810636043548584 0 0.0 0 0.0 0 0.0 0.07230684161186218 0.39586949348449707 -0.33485913276672363 0.6780602335929871 -0.6097903251647949 -0.41029083728790283 0.26386216282844543 0.34843114018440247 1 0.9468240141868591 0 0.03911536559462547 0 0.0 0 0.0 0.0 0.33551084995269775 -0.3629721403121948 0.0 -0.7144383192062378 -0.6996673345565796 0.31088313460350037 0.35648632049560547 1 0.9168000221252441 0 0.07637535780668259 0 0.0 0 0.0 0.1937013864517212 0.7858362197875977 -0.5540850162506104 -0.2551347315311432 -0.29074984788894653 -0.922116756439209 0.16920901834964752 0.12707068026065826 1 0.997936487197876 0 0.0 0 0.0 0 0.0 0.25437653064727783 0.8707180023193359 -0.6044466495513916 0.1664784699678421 -0.32941678166389465 -0.9293801784515381 0.1323527842760086 0.07852371037006378 1 0.9978157877922058 0 0.0 0 0.0 0 0.0 0.2595592737197876 0.8025784492492676 -0.5593953132629395 0.48774680495262146 -0.4980620741844177 -0.7169408202171326 0.13544107973575592 0.12047519534826279 1 0.9977782964706421 0 0.0 0 0.0 0 0.0 0.1876540184020996 0.6596939563751221 -0.5185306072235107 0.33820611238479614 -0.1976683884859085 -0.9200415015220642 0.18751898407936096 0.18505068123340607 1 0.9977463483810425 0 0.0 0 0.0 0 0.0 0.1937013864517212 0.7858362197875977 -0.5540850162506104 -0.2551347315311432 -0.29074984788894653 -0.922116756439209 0.16920901834964752 0.12707068026065826 1 0.997936487197876 0 0.0 0 0.0 0 0.0 0.23466861248016357 0.7335350513458252 -0.5268294811248779 0.5275429487228394 -0.4376964569091797 -0.7280495762825012 0.15449798107147217 0.1570688784122467 1 0.9977160096168518 0 0.0 0 0.0 0 0.0 0.08317875862121582 0.5977051258087158 -0.5351896286010742 0.13367107510566711 0.040162358433008194 -0.9902035593986511 0.8843513131141663 0.9313850402832031 1 0.9983817934989929 0 0.0 0 0.0 0 0.0 0.08317875862121582 0.7046983242034912 -0.4855692386627197 -0.20276497304439545 0.3567918837070465 -0.9118930697441101 0.9413006901741028 0.9422845840454102 1 0.9991380572319031 0 0.0 0 0.0 0 0.0 0.1876540184020996 0.6596939563751221 -0.5185306072235107 0.33820611238479614 -0.1976683884859085 -0.9200415015220642 0.9133719205856323 0.8904370665550232 1 0.9977463483810425 0 0.0 0 0.0 0 0.0 0.17545980215072632 0.5656907558441162 -0.5075685977935791 0.6020996570587158 -0.3631092309951782 -0.7110202312469482 0.20651164650917053 0.22181473672389984 1 0.9963264465332031 0 0.0 0 0.0 0 0.0 0.1876540184020996 0.6596939563751221 -0.5185306072235107 0.33820611238479614 -0.1976683884859085 -0.9200415015220642 0.18751898407936096 0.18505068123340607 1 0.9977463483810425 0 0.0 0 0.0 0 0.0 0.2332911491394043 0.6557881832122803 -0.45631957054138184 0.826288640499115 -0.40223395824432373 -0.39423811435699463 0.15952694416046143 0.21251626312732697 1 0.9963886141777039 0 0.0 0 0.0 0 0.0 0.07982555031776428 0.4681966304779053 -0.49700307846069336 0.32801294326782227 -0.6124454736709595 -0.7191991806030273 0.26634955406188965 0.25791066884994507 1 0.9938180446624756 0 0.0 0 0.0 0 0.0 0.08317875862121582 0.5977051258087158 -0.5351896286010742 0.13367107510566711 0.040162358433008194 -0.9902035593986511 0.24910669028759003 0.1976434588432312 1 0.9983817934989929 0 0.0 0 0.0 0 0.0 0.17545980215072632 0.5656907558441162 -0.5075685977935791 0.6020996570587158 -0.3631092309951782 -0.7110202312469482 0.20651164650917053 0.22181473672389984 1 0.9963264465332031 0 0.0 0 0.0 0 0.0 0.14730453491210938 0.4809708595275879 -0.4494520425796509 0.6751915216445923 -0.6570024490356445 -0.335245817899704 0.2268296331167221 0.27411285042762756 1 0.9907476305961609 0 0.0 0 0.0 0 0.0 0.17545980215072632 0.5656907558441162 -0.5075685977935791 0.6020996570587158 -0.3631092309951782 -0.7110202312469482 0.20651164650917053 0.22181473672389984 1 0.9963264465332031 0 0.0 0 0.0 0 0.0 0.215201735496521 0.579124927520752 -0.41087865829467773 0.8949857950210571 -0.44148075580596924 -0.0636310949921608 0.175100177526474 0.25710052251815796 1 0.9931851625442505 0 0.0 0 0.0 0 0.0 0.07171991467475891 0.41830766201019287 -0.40954136848449707 0.5254982113838196 -0.7786187529563904 -0.3428449332714081 0.2686126232147217 0.31042376160621643 1 0.9810636043548584 0 0.0 0 0.0 0 0.0 0.07982555031776428 0.4681966304779053 -0.49700307846069336 0.32801294326782227 -0.6124454736709595 -0.7191991806030273 0.26634955406188965 0.25791066884994507 1 0.9938180446624756 0 0.0 0 0.0 0 0.0 0.14730453491210938 0.4809708595275879 -0.4494520425796509 0.6751915216445923 -0.6570024490356445 -0.335245817899704 0.2268296331167221 0.27411285042762756 1 0.9907476305961609 0 0.0 0 0.0 0 0.0 0.13163155317306519 0.4475557804107666 -0.36023998260498047 0.730246901512146 -0.6739402413368225 -0.11188085377216339 0.23006127774715424 0.3214690387248993 1 0.9729717969894409 0 0.0 0 0.0 0 0.0 0.14730453491210938 0.4809708595275879 -0.4494520425796509 0.6751915216445923 -0.6570024490356445 -0.335245817899704 0.2268296331167221 0.27411285042762756 1 0.9907476305961609 0 0.0 0 0.0 0 0.0 0.18907427787780762 0.5321424007415771 -0.3633767366409302 0.8845484852790833 -0.4600665271282196 0.07654042541980743 0.18983252346515656 0.29206639528274536 1 0.9870381951332092 0 0.0 0 0.0 0 0.0 0.11474817991256714 0.41678154468536377 -0.2910900115966797 0.9263588190078735 -0.37650686502456665 0.005249183624982834 0.8736137747764587 0.12863701581954956 1 0.9101746082305908 0 0.05719852074980736 3 0.011641807854175568 0 0.0 0.13163155317306519 0.4475557804107666 -0.36023998260498047 0.730246901512146 -0.6739402413368225 -0.11188085377216339 0.8714877963066101 0.14967380464076996 1 0.9729717969894409 0 0.0 0 0.0 0 0.0 0.1636601686477661 0.5023448467254639 -0.3202894926071167 0.8532670140266418 -0.49674978852272034 0.158513143658638 0.9101097583770752 0.15139897167682648 1 0.975587785243988 0 0.0 0 0.0 0 0.0 0.07230684161186218 0.39586949348449707 -0.33485913276672363 0.6780602335929871 -0.6097903251647949 -0.41029083728790283 0.26386216282844543 0.34843114018440247 1 0.9468240141868591 0 0.03911536559462547 0 0.0 0 0.0 0.07171991467475891 0.41830766201019287 -0.40954136848449707 0.5254982113838196 -0.7786187529563904 -0.3428449332714081 0.2686126232147217 0.31042376160621643 1 0.9810636043548584 0 0.0 0 0.0 0 0.0 0.13163155317306519 0.4475557804107666 -0.36023998260498047 0.730246901512146 -0.6739402413368225 -0.11188085377216339 0.23006127774715424 0.3214690387248993 1 0.9729717969894409 0 0.0 0 0.0 0 0.0 0.07328110933303833 0.4430720806121826 -0.23094940185546875 0.8349864482879639 0.062196724116802216 0.5467085838317871 0.8917837738990784 0.0931837260723114 1 0.8749367594718933 0 0.08163774013519287 3 0.026193035766482353 0 0.0 0.11474817991256714 0.41678154468536377 -0.2910900115966797 0.9263588190078735 -0.37650686502456665 0.005249183624982834 0.8736137747764587 0.12863701581954956 1 0.9101746082305908 0 0.05719852074980736 3 0.011641807854175568 0 0.0 0.1420363187789917 0.49902892112731934 -0.265682578086853 0.7232886552810669 -0.6007568836212158 0.3404339849948883 0.9186869263648987 0.12909665703773499 1 0.9554049968719482 0 0.009283550083637238 0 0.0 0 0.0 0.024349510669708252 0.44997596740722656 -0.18417012691497803 0.5105136036872864 -0.6040223240852356 0.6119571328163147 0.897230863571167 0.05878820642828941 1 0.8514333963394165 0 0.11276810616254807 0 0.0 0 0.0 0.03183332085609436 0.4725472927093506 -0.1536623239517212 0.4668111205101013 -0.7400128245353699 0.4841761589050293 0.9156655073165894 0.053619880229234695 1 0.8963752388954163 0 0.07782471179962158 0 0.0 0 0.0 0.0 0.46508145332336426 -0.15146160125732422 0.0 -0.8492690920829773 0.5279091596603394 0.9070941805839539 0.03858356922864914 1 0.8848198652267456 0 0.08769097924232483 0 0.0 0 0.0 0.024349510669708252 0.44997596740722656 -0.18417012691497803 0.5105136036872864 -0.6040223240852356 0.6119571328163147 0.897230863571167 0.05878820642828941 1 0.8514333963394165 0 0.11276810616254807 0 0.0 0 0.0 0.04134397208690643 0.4539233446121216 -0.2002546787261963 0.5264137983322144 -0.3241981267929077 0.7859736680984497 0.8979483842849731 0.07017120718955994 1 0.8607756495475769 0 0.10225554555654526 3 0.0017874501645565033 0 0.0 0.04406014084815979 0.47633934020996094 -0.1643797755241394 0.4945219159126282 -0.7363200783729553 0.4617755711078644 0.9167872667312622 0.06153831630945206 1 0.8978144526481628 0 0.0762820616364479 0 0.0 0 0.0 0.04134397208690643 0.4539233446121216 -0.2002546787261963 0.5264137983322144 -0.3241981267929077 0.7859736680984497 0.8979483842849731 0.07017120718955994 1 0.8607756495475769 0 0.10225554555654526 3 0.0017874501645565033 0 0.0 0.07328110933303833 0.4430720806121826 -0.23094940185546875 0.8349864482879639 0.062196724116802216 0.5467085838317871 0.8917837738990784 0.0931837260723114 1 0.8749367594718933 0 0.08163774013519287 3 0.026193035766482353 0 0.0 0.07519534230232239 0.4880945682525635 -0.17792588472366333 0.4931180775165558 -0.8037965297698975 0.3327127993106842 0.9240359663963318 0.07843738049268723 1 0.9170035123825073 0 0.058905184268951416 0 0.0 0 0.0 0.0 0.41489994525909424 -0.18215465545654297 0.0 0.5597094893455505 0.8286690711975098 0.8788778185844421 0.04964836686849594 1 0.730757474899292 0 0.21810069680213928 5 0.0014950893819332123 3 0.00030696019530296326 0.04134397208690643 0.4539233446121216 -0.2002546787261963 0.5264137983322144 -0.3241981267929077 0.7859736680984497 0.8979483842849731 0.07017120718955994 1 0.8607756495475769 0 0.10225554555654526 3 0.0017874501645565033 0 0.0 0.024349510669708252 0.44997596740722656 -0.18417012691497803 0.5105136036872864 -0.6040223240852356 0.6119571328163147 0.897230863571167 0.05878820642828941 1 0.8514333963394165 0 0.11276810616254807 0 0.0 0 0.0 0.09905996918678284 0.40596628189086914 -0.19437533617019653 0.5630664825439453 0.7503280639648438 0.34626302123069763 0.5929415822029114 0.566311240196228 1 0.6572749614715576 0 0.20971746742725372 3 0.12424865365028381 0 0.0 0.07328110933303833 0.4430720806121826 -0.23094940185546875 0.8349864482879639 0.062196724116802216 0.5467085838317871 0.6050207018852234 0.5939637422561646 1 0.8749367594718933 0 0.08163774013519287 3 0.026193035766482353 0 0.0 0.04134397208690643 0.4539233446121216 -0.2002546787261963 0.5264137983322144 -0.3241981267929077 0.7859736680984497 0.6188840866088867 0.5845966339111328 1 0.8607756495475769 0 0.10225554555654526 3 0.0017874501645565033 0 0.0 0.12179547548294067 0.3854290246963501 -0.23301446437835693 0.8996246457099915 0.39896848797798157 -0.17743460834026337 0.6237066984176636 0.9517653584480286 1 0.7110409140586853 0 0.1705215722322464 3 0.11412934958934784 0 0.0 0.11474817991256714 0.41678154468536377 -0.2910900115966797 0.9263588190078735 -0.37650686502456665 0.005249183624982834 0.6179927587509155 0.9725486040115356 1 0.9101746082305908 0 0.05719852074980736 3 0.011641807854175568 0 0.0 0.07328110933303833 0.4430720806121826 -0.23094940185546875 0.8349864482879639 0.062196724116802216 0.5467085838317871 0.6518501043319702 0.9787291884422302 1 0.8749367594718933 0 0.08163774013519287 3 0.026193035766482353 0 0.0 0.07341891527175903 0.3139185905456543 -0.28698432445526123 0.6358226537704468 -0.38373973965644836 -0.669667661190033 0.27071312069892883 0.3962279260158539 1 0.6878804564476013 0 0.28015995025634766 3 0.008270028978586197 0 0.0 0.07230684161186218 0.39586949348449707 -0.33485913276672363 0.6780602335929871 -0.6097903251647949 -0.41029083728790283 0.26386216282844543 0.34843114018440247 1 0.9468240141868591 0 0.03911536559462547 0 0.0 0 0.0 0.11474817991256714 0.41678154468536377 -0.2910900115966797 0.9263588190078735 -0.37650686502456665 0.005249183624982834 0.23559102416038513 0.359767347574234 1 0.9101746082305908 0 0.05719852074980736 3 0.011641807854175568 0 0.0 0.0 0.33551084995269775 -0.3629721403121948 0.0 -0.7144383192062378 -0.6996673345565796 0.31088313460350037 0.35648632049560547 1 0.9168000221252441 0 0.07637535780668259 0 0.0 0 0.0 0.07230684161186218 0.39586949348449707 -0.33485913276672363 0.6780602335929871 -0.6097903251647949 -0.41029083728790283 0.26386216282844543 0.34843114018440247 1 0.9468240141868591 0 0.03911536559462547 0 0.0 0 0.0 0.07341891527175903 0.3139185905456543 -0.28698432445526123 0.6358226537704468 -0.38373973965644836 -0.669667661190033 0.27071312069892883 0.3962279260158539 1 0.6878804564476013 0 0.28015995025634766 3 0.008270028978586197 0 0.0 0.43023955821990967 0.157029926776886 0.06563612818717957 -0.4426404535770416 -0.8844264149665833 0.14767906069755554 0.08512462675571442 0.6006276607513428 3 0.9999399781227112 0 0.0 0 0.0 0 0.0 0.5047986507415771 0.20594364404678345 -0.004644919186830521 0.6930753588676453 -0.20831935107707977 -0.6900539994239807 0.049123793840408325 0.5567721724510193 3 0.9998424053192139 0 0.0 0 0.0 0 0.0 0.5589442253112793 0.16177308559417725 0.07854250073432922 0.9342325925827026 -0.35114598274230957 -0.06216620281338692 0.02092316746711731 0.6068553328514099 3 1.0000194311141968 0 0.0 0 0.0 0 0.0 0.3984619379043579 0.26093626022338867 0.08564722537994385 -0.4599139392375946 0.35129857063293457 0.8154851198196411 0.43783387541770935 0.39854317903518677 3 0.9973952174186707 0 0.0 0 0.0 0 0.0 0.47704315185546875 0.22420382499694824 0.13703078031539917 -0.09256263822317123 0.13635669648647308 0.9862971901893616 0.39813071489334106 0.3643503189086914 3 0.9994068741798401 0 0.0 0 0.0 0 0.0 0.5096194744110107 0.2505838871002197 0.11315262317657471 0.5906857252120972 0.6383556723594666 0.4935148060321808 0.38072505593299866 0.38276207447052 3 0.9994410276412964 0 0.0 0 0.0 0 0.0 0.5096194744110107 0.2505838871002197 0.11315262317657471 0.5906857252120972 0.6383556723594666 0.4935148060321808 0.6430558562278748 0.6733530759811401 3 0.9994410276412964 0 0.0 0 0.0 0 0.0 0.5589442253112793 0.16177308559417725 0.07854250073432922 0.9342325925827026 -0.35114598274230957 -0.06216620281338692 0.5921546220779419 0.6514858603477478 3 1.0000194311141968 0 0.0 0 0.0 0 0.0 0.5047986507415771 0.20594364404678345 -0.004644919186830521 0.6930753588676453 -0.20831935107707977 -0.6900539994239807 0.5881485939025879 0.7014670968055725 3 0.9998424053192139 0 0.0 0 0.0 0 0.0 0.43023955821990967 0.157029926776886 0.06563612818717957 -0.4426404535770416 -0.8844264149665833 0.14767906069755554 0.9498034119606018 0.5855746865272522 3 0.9999399781227112 0 0.0 0 0.0 0 0.0 0.5088207721710205 0.12029749155044556 0.1170196533203125 0.16394543647766113 -0.8839991688728333 0.4377574920654297 0.9588103890419006 0.5548603534698486 3 1.0001006126403809 0 0.0 0 0.0 0 0.0 0.47704315185546875 0.22420382499694824 0.13703078031539917 -0.09256263822317123 0.13635669648647308 0.9862971901893616 0.9100112915039062 0.5470339059829712 3 0.9994068741798401 0 0.0 0 0.0 0 0.0 0.5589442253112793 0.16177308559417725 0.07854250073432922 0.9342325925827026 -0.35114598274230957 -0.06216620281338692 0.9657022356987 0.5219221115112305 3 1.0000194311141968 0 0.0 0 0.0 0 0.0 0.5096194744110107 0.2505838871002197 0.11315262317657471 0.5906857252120972 0.6383556723594666 0.4935148060321808 0.9143127202987671 0.525738000869751 3 0.9994410276412964 0 0.0 0 0.0 0 0.0 0.47704315185546875 0.22420382499694824 0.13703078031539917 -0.09256263822317123 0.13635669648647308 0.9862971901893616 0.9100112915039062 0.5470339059829712 3 0.9994068741798401 0 0.0 0 0.0 0 0.0 0.11437469720840454 0.7034616470336914 -0.2846221923828125 0.12384410947561264 0.6982024312019348 0.7050996422767639 0.4353049099445343 0.8618066906929016 1 0.993859589099884 0 0.0 0 0.0 0 0.0 0.07567718625068665 0.6810379028320312 -0.25069737434387207 0.19437238574028015 0.6898708939552307 0.6973174214363098 0.41558343172073364 0.883171558380127 1 0.9912428259849548 0 0.0 0 0.0 0 0.0 0.12389302253723145 0.6452987194061279 -0.2239953875541687 0.3717764914035797 0.6311227679252625 0.6807458996772766 0.4386693835258484 0.9063490033149719 1 0.9863564372062683 0 0.0 0 0.0 0 0.0 0.07567718625068665 0.6810379028320312 -0.25069737434387207 0.19437238574028015 0.6898708939552307 0.6973174214363098 0.41558343172073364 0.883171558380127 1 0.9912428259849548 0 0.0 0 0.0 0 0.0 0.07448214292526245 0.6610023975372314 -0.22847318649291992 0.29837948083877563 0.8330942988395691 0.46571245789527893 0.41453418135643005 0.8990539312362671 1 0.9883980751037598 0 0.0 0 0.0 0 0.0 0.12389302253723145 0.6452987194061279 -0.2239953875541687 0.3717764914035797 0.6311227679252625 0.6807458996772766 0.4386693835258484 0.9063490033149719 1 0.9863564372062683 0 0.0 0 0.0 0 0.0 0.12389302253723145 0.6452987194061279 -0.2239953875541687 0.3717764914035797 0.6311227679252625 0.6807458996772766 0.4386693835258484 0.9063490033149719 1 0.9863564372062683 0 0.0 0 0.0 0 0.0 0.16969645023345947 0.6551282405853271 -0.246321439743042 0.6105228066444397 0.38544878363609314 0.6918545961380005 0.4616085886955261 0.8940138816833496 1 0.9888418912887573 0 0.0 0 0.0 0 0.0 0.11437469720840454 0.7034616470336914 -0.2846221923828125 0.12384410947561264 0.6982024312019348 0.7050996422767639 0.4353049099445343 0.8618066906929016 1 0.993859589099884 0 0.0 0 0.0 0 0.0 0.18155312538146973 0.6985167860984802 -0.18785469233989716 -0.00012207403779029846 0.7973570823669434 0.6034730076789856 0.44789454340934753 0.5826849937438965 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 0.17463847994804382 0.7308197021484375 -0.23016177117824554 -0.0006103701889514923 0.7947325110435486 0.6069216132164001 0.44740810990333557 0.5856611728668213 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 8.540583795735301e-10 0.724265456199646 -0.22176188230514526 0.0005798516795039177 0.7979369759559631 0.6027100682258606 0.43512284755706787 0.5850702524185181 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 8.540583795735301e-10 0.724265456199646 -0.22176188230514526 0.0005798516795039177 0.7979369759559631 0.6027100682258606 0.43512284755706787 0.5850702524185181 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 8.740083656810782e-10 0.6703131198883057 -0.15016429126262665 0.0007629627361893654 0.7988219857215881 0.6015198230743408 0.43512284755706787 0.5800336003303528 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 0.18155312538146973 0.6985167860984802 -0.18785469233989716 -0.00012207403779029846 0.7973570823669434 0.6034730076789856 0.44789454340934753 0.5826849937438965 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 8.740083656810782e-10 0.6703131198883057 -0.15016429126262665 0.0007629627361893654 0.7988219857215881 0.6015198230743408 0.43512284755706787 0.5800336003303528 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 0.06832624971866608 0.6362987756729126 -0.10502550005912781 0.0003662221133708954 0.7992797493934631 0.6009094715118408 0.43992936611175537 0.5768581628799438 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 0.18155312538146973 0.6985167860984802 -0.18785469233989716 -0.00012207403779029846 0.7973570823669434 0.6034730076789856 0.44789454340934753 0.5826849937438965 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 0.18155312538146973 0.6985167860984802 -0.18785469233989716 0.9183019399642944 0.3723563253879547 0.1342204064130783 0.4365166127681732 0.5947638750076294 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 0.27082911133766174 0.556499719619751 -0.40462347865104675 0.9183019399642944 0.3723563253879547 0.1342204064130783 0.45176565647125244 0.5847734212875366 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 0.26475274562835693 0.5735782384872437 -0.4104318916797638 0.9183019399642944 0.3723563253879547 0.1342204064130783 0.45217427611351013 0.5859748125076294 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 8.540583795735301e-10 0.724265456199646 -0.22176188230514526 0.0 0.7986083626747131 0.6017944812774658 0.43512284755706787 0.5850702524185181 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -0.17420312762260437 0.7306431531906128 -0.23022541403770447 0.0 0.7986083626747131 0.6017944812774658 0.42286816239356995 0.5856656432151794 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -0.18193703889846802 0.6986724734306335 -0.18779857456684113 0.0 0.7986083626747131 0.6017944812774658 0.42232412099838257 0.5826810598373413 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 -0.18193703889846802 0.6986724734306335 -0.18779857456684113 0.0 0.7986083626747131 0.6017944812774658 0.42232412099838257 0.5826810598373413 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 -0.16803307831287384 0.6519752144813538 -0.12582896649837494 0.0 0.7986083626747131 0.6017944812774658 0.42330220341682434 0.5783216953277588 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -0.06832624971866608 0.6362987756729126 -0.10502550005912781 0.0 0.7986083626747131 0.6017944812774658 0.430316299200058 0.5768581628799438 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -0.06832624971866608 0.6362987756729126 -0.10502550005912781 0.0 0.7986083626747131 0.6017944812774658 0.430316299200058 0.5768581628799438 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 8.740083656810782e-10 0.6703131198883057 -0.15016429126262665 0.0 0.7986083626747131 0.6017944812774658 0.43512284755706787 0.5800336003303528 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -0.18193703889846802 0.6986724734306335 -0.18779857456684113 0.0 0.7986083626747131 0.6017944812774658 0.42232412099838257 0.5826810598373413 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 -0.18193703889846802 0.6986724734306335 -0.18779857456684113 -0.9146091938018799 0.3822748363018036 0.13153477013111115 0.43651267886161804 0.5947748422622681 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 -0.17420312762260437 0.7306431531906128 -0.23022541403770447 -0.9124118685722351 0.3890804648399353 0.1268654465675354 0.4394972622394562 0.5970238447189331 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -0.26600396633148193 0.5740855932235718 -0.4102489948272705 -0.9412823915481567 0.26740318536758423 0.2059389054775238 0.45216143131256104 0.5860105156898499 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -1.9033474245588877e-06 0.7134334444999695 -0.22993047535419464 -0.02450636401772499 -0.8625141382217407 -0.5053865313529968 0.43512269854545593 0.5856449007987976 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 0.1669710874557495 0.7213309407234192 -0.23609749972820282 0.013245033100247383 -0.774254560470581 -0.6327097415924072 0.44686874747276306 0.5860787630081177 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 0.17698341608047485 0.6879801154136658 -0.19507654011249542 0.0007019257172942162 -0.8356273174285889 -0.5492416024208069 0.44757309556007385 0.5831930041313171 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 0.17698341608047485 0.6879801154136658 -0.19507654011249542 0.0007019257172942162 -0.8356273174285889 -0.5492416024208069 0.44757309556007385 0.5831930041313171 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 0.16803307831287384 0.6519752144813538 -0.12582896649837494 0.04449598491191864 -0.8886989951133728 -0.45631274580955505 0.446943461894989 0.5783216953277588 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 0.06832624971866608 0.6362987756729126 -0.10502550005912781 -0.032135989516973495 -0.8496047854423523 -0.5263832807540894 0.43992936611175537 0.5768581628799438 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 0.06832624971866608 0.6362987756729126 -0.10502550005912781 -0.032135989516973495 -0.8496047854423523 -0.5263832807540894 0.43992936611175537 0.5768581628799438 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 8.740083656810782e-10 0.6703131198883057 -0.15016429126262665 -0.04226813465356827 -0.861690104007721 -0.5056001543998718 0.43512284755706787 0.5800336003303528 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 0.17698341608047485 0.6879801154136658 -0.19507654011249542 0.0007019257172942162 -0.8356273174285889 -0.5492416024208069 0.44757309556007385 0.5831930041313171 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 0.17698341608047485 0.6879801154136658 -0.19507654011249542 -0.8927274346351624 -0.4296395778656006 -0.1355937421321869 0.43702465295791626 0.5940226316452026 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 0.1669710874557495 0.7213309407234192 -0.23609749972820282 -0.8917508721351624 -0.43226417899131775 -0.13379314541816711 0.4399103820323944 0.5963687896728516 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 0.26475274562835693 0.5735782384872437 -0.4104318916797638 -0.9075899720191956 -0.38608965277671814 -0.16479995846748352 0.45217427611351013 0.5859748125076294 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -0.17731525003910065 0.688213586807251 -0.19509990513324738 -0.0005493331700563431 -0.8368785381317139 -0.5473799705505371 0.42264923453330994 0.5831946730613708 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 -0.16651925444602966 0.7212713360786438 -0.23632338643074036 -0.012543107382953167 -0.7784661650657654 -0.6275520920753479 0.42340871691703796 0.5860946178436279 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -1.9033474245588877e-06 0.7134334444999695 -0.22993047535419464 0.0236823633313179 -0.8631550073623657 -0.504318356513977 0.43512269854545593 0.5856449007987976 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -1.9033474245588877e-06 0.7134334444999695 -0.22993047535419464 0.0236823633313179 -0.8631550073623657 -0.504318356513977 0.43512269854545593 0.5856449007987976 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 8.740083656810782e-10 0.6703131198883057 -0.15016429126262665 0.04126102477312088 -0.861506998538971 -0.5060274004936218 0.43512284755706787 0.5800336003303528 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -0.17731525003910065 0.688213586807251 -0.19509990513324738 -0.0005493331700563431 -0.8368785381317139 -0.5473799705505371 0.42264923453330994 0.5831946730613708 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 8.740083656810782e-10 0.6703131198883057 -0.15016429126262665 0.04126102477312088 -0.861506998538971 -0.5060274004936218 0.43512284755706787 0.5800336003303528 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -0.06832624971866608 0.6362987756729126 -0.10502550005912781 0.0316782146692276 -0.8488723635673523 -0.5275734663009644 0.430316299200058 0.5768581628799438 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -0.17731525003910065 0.688213586807251 -0.19509990513324738 -0.0005493331700563431 -0.8368785381317139 -0.5473799705505371 0.42264923453330994 0.5831946730613708 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 -0.17731525003910065 0.688213586807251 -0.19509990513324738 0.8886989951133728 -0.4385204613208771 -0.13370159268379211 0.43702632188796997 0.5940390825271606 1 0.9903830885887146 0 0.0 0 0.0 0 0.0 -0.2696293294429779 0.5560132265090942 -0.40479886531829834 0.9333170652389526 -0.2614215612411499 -0.2460402250289917 0.45177799463272095 0.5847391486167908 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -0.26600396633148193 0.5740855932235718 -0.4102489948272705 0.9305398464202881 -0.28128910064697266 -0.23435163497924805 0.45216143131256104 0.5860105156898499 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 0.1669710874557495 0.7213309407234192 -0.23609749972820282 -0.060670796781778336 0.5655690431594849 -0.8224433064460754 0.44686874747276306 0.5963687896728516 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -1.9033474245588877e-06 0.7134334444999695 -0.22993047535419464 -0.05786309391260147 0.6010925769805908 -0.7970519065856934 0.43512269854545593 0.5958132147789001 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 8.540583795735301e-10 0.724265456199646 -0.22176188230514526 -0.05798516795039177 0.599536120891571 -0.7982116341590881 0.43512284755706787 0.5965752005577087 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 8.540583795735301e-10 0.724265456199646 -0.22176188230514526 0.05896176025271416 0.600085437297821 -0.7977232933044434 0.43512284755706787 0.5965752005577087 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -1.9033474245588877e-06 0.7134334444999695 -0.22993047535419464 0.05887020379304886 0.6010315418243408 -0.7970213890075684 0.43512269854545593 0.5958132147789001 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -0.16651925444602966 0.7212713360786438 -0.23632338643074036 0.06060975790023804 0.5796685814857483 -0.8125553131103516 0.42340871691703796 0.5963646173477173 1 0.9903831481933594 0 0.0 0 0.0 0 0.0 -0.3433201313018799 0.07734565436840057 0.11786850541830063 -0.4990691840648651 0.06088442727923393 0.8644062876701355 0.4109712839126587 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.3360127806663513 0.31683751940727234 0.10521181672811508 -0.4990691840648651 0.06088442727923393 0.8644062876701355 0.41148534417152405 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.31683751940727234 0.09264949709177017 0.0 0.06088442727923393 0.9981383681297302 0.40818727016448975 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.422471821308136 0.07734565436840057 0.11786847561597824 0.4990691840648651 0.06088442727923393 0.8644062876701355 0.4054032266139984 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.42977917194366455 0.31683751940727234 0.1052117869257927 0.4990691840648651 0.06088442727923393 0.8644062876701355 0.40488916635513306 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.46410006284713745 0.31683751940727234 0.139532670378685 0.8644062876701355 0.06088442727923393 0.4990691840648651 0.4024747908115387 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.3143486976623535 0.07734565436840057 0.22599166631698608 -0.8644062876701355 0.06088442727923393 -0.4990691840648651 0.4074037969112396 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.30169200897216797 0.31683751940727234 0.23329901695251465 -0.8644062876701355 0.06088442727923393 -0.4990691840648651 0.40688976645469666 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.28912973403930664 0.31683751940727234 0.18641585111618042 -0.9981383681297302 0.06088442727923393 -0.0 0.41018784046173096 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.422471821308136 0.07734565436840057 0.2549631595611572 0.4990691840648651 0.06088442727923393 -0.8644062876701355 0.4054032266139984 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.42977917194366455 0.31683751940727234 0.2676198184490204 0.4990691840648651 0.06088442727923393 -0.8644062876701355 0.40488916635513306 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.31683751940727234 0.2801821529865265 0.0 0.06088442727923393 -0.9981383681297302 0.40818727016448975 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.4514433741569519 0.07734565436840057 0.14684000611305237 0.8644062876701355 0.06088442727923393 0.4990691840648651 0.4129718840122223 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.46410006284713745 0.31683751940727234 0.139532670378685 0.8644062876701355 0.06088442727923393 0.4990691840648651 0.41348591446876526 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.4766623377799988 0.31683751940727234 0.18641582131385803 0.9981383681297302 0.06088442727923393 -0.0 0.41018784046173096 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.3143486976623535 0.07734565436840057 0.14684003591537476 -0.8644062876701355 0.06088442727923393 0.4990691840648651 0.4129718840122223 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.303744375705719 0.07734565436840057 0.18641585111618042 -0.9981383681297302 0.06088442727923393 -0.0 0.41018784046173096 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.28912973403930664 0.31683751940727234 0.18641585111618042 -0.9981383681297302 0.06088442727923393 -0.0 0.41018784046173096 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.07734565436840057 0.26556745171546936 0.0 0.06088442727923393 -0.9981383681297302 0.40818727016448975 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.31683751940727234 0.2801821529865265 0.0 0.06088442727923393 -0.9981383681297302 0.40818727016448975 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.3360128402709961 0.31683751940727234 0.2676198184490204 -0.4990691840648651 0.06088442727923393 -0.8644062876701355 0.41148534417152405 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.46204763650894165 0.07734565436840057 0.18641582131385803 0.9981383681297302 0.06088442727923393 -0.0 0.41018784046173096 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.4766623377799988 0.31683751940727234 0.18641582131385803 0.9981383681297302 0.06088442727923393 -0.0 0.41018784046173096 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.46410006284713745 0.31683751940727234 0.23329898715019226 0.8644062876701355 0.06088442727923393 -0.4990691840648651 0.40688976645469666 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.3143486976623535 0.07734565436840057 0.14684003591537476 -0.8644062876701355 0.06088442727923393 0.4990691840648651 0.4129718840122223 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.30169200897216797 0.31683751940727234 0.13953270018100739 -0.8644062876701355 0.06088442727923393 0.4990691840648651 0.41348591446876526 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.3360127806663513 0.31683751940727234 0.10521181672811508 -0.4990691840648651 0.06088442727923393 0.8644062876701355 0.4159002900123596 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.07734565436840057 0.10726418346166611 0.0 0.06088442727923393 0.9981383681297302 0.40818727016448975 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.31683751940727234 0.09264949709177017 0.0 0.06088442727923393 0.9981383681297302 0.40818727016448975 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.42977917194366455 0.31683751940727234 0.1052117869257927 0.4990691840648651 0.06088442727923393 0.8644062876701355 0.40488916635513306 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.34332019090652466 0.07734565436840057 0.2549631595611572 -0.4990691840648651 0.06088442727923393 -0.8644062876701355 0.4109712839126587 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.3360128402709961 0.31683751940727234 0.2676198184490204 -0.4990691840648651 0.06088442727923393 -0.8644062876701355 0.41148534417152405 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.30169200897216797 0.31683751940727234 0.23329901695251465 -0.8644062876701355 0.06088442727923393 -0.4990691840648651 0.4138997197151184 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.422471821308136 0.07734565436840057 0.2549631595611572 0.4990691840648651 0.06088442727923393 -0.8644062876701355 0.4054032266139984 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.4514433741569519 0.07734565436840057 0.22599166631698608 0.8644062876701355 0.06088442727923393 -0.4990691840648651 0.4033651649951935 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.46410006284713745 0.31683751940727234 0.23329898715019226 0.8644062876701355 0.06088442727923393 -0.4990691840648651 0.4024747908115387 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.07734565436840057 0.10726418346166611 0.0 1.0 -0.0 0.40818727016448975 0.5619242787361145 5 1.0 0 0.0 0 0.0 0 0.0 -0.422471821308136 0.07734565436840057 0.11786847561597824 0.0 1.0 -0.0 0.4054032266139984 0.5611783266067505 5 1.0 0 0.0 0 0.0 0 0.0 -0.4514433741569519 0.07734565436840057 0.14684000611305237 0.0 1.0 -0.0 0.4033651649951935 0.5591402649879456 5 1.0 0 0.0 0 0.0 0 0.0 -0.4514433741569519 0.07734565436840057 0.14684000611305237 0.0 1.0 -0.0 0.4033651649951935 0.5591402649879456 5 1.0 0 0.0 0 0.0 0 0.0 -0.46204763650894165 0.07734565436840057 0.18641582131385803 0.0 1.0 -0.0 0.4026191830635071 0.5563561916351318 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.07734565436840057 0.10726418346166611 0.0 1.0 -0.0 0.40818727016448975 0.5619242787361145 5 1.0 0 0.0 0 0.0 0 0.0 -0.46204763650894165 0.07734565436840057 0.18641582131385803 0.0 1.0 -0.0 0.4026191830635071 0.5563561916351318 5 1.0 0 0.0 0 0.0 0 0.0 -0.4514433741569519 0.07734565436840057 0.22599166631698608 0.0 1.0 -0.0 0.4033651649951935 0.5535721778869629 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.07734565436840057 0.10726418346166611 0.0 1.0 -0.0 0.40818727016448975 0.5619242787361145 5 1.0 0 0.0 0 0.0 0 0.0 -0.4514433741569519 0.07734565436840057 0.22599166631698608 0.0 1.0 -0.0 0.4033651649951935 0.5535721778869629 5 1.0 0 0.0 0 0.0 0 0.0 -0.422471821308136 0.07734565436840057 0.2549631595611572 0.0 1.0 -0.0 0.4054032266139984 0.5515340566635132 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.07734565436840057 0.26556745171546936 0.0 1.0 -0.0 0.40818727016448975 0.5507881045341492 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.07734565436840057 0.26556745171546936 0.0 1.0 -0.0 0.40818727016448975 0.5507881045341492 5 1.0 0 0.0 0 0.0 0 0.0 -0.34332019090652466 0.07734565436840057 0.2549631595611572 0.0 1.0 -0.0 0.4109712839126587 0.5515340566635132 5 1.0 0 0.0 0 0.0 0 0.0 -0.3143486976623535 0.07734565436840057 0.22599166631698608 0.0 1.0 -0.0 0.4130093455314636 0.5535721778869629 5 1.0 0 0.0 0 0.0 0 0.0 -0.3143486976623535 0.07734565436840057 0.22599166631698608 0.0 1.0 -0.0 0.4130093455314636 0.5535721778869629 5 1.0 0 0.0 0 0.0 0 0.0 -0.303744375705719 0.07734565436840057 0.18641585111618042 0.0 0.999969482421875 -0.0 0.41375532746315 0.5563561916351318 5 1.0 0 0.0 0 0.0 0 0.0 -0.3143486976623535 0.07734565436840057 0.14684003591537476 0.0 1.0 -0.0 0.4130093455314636 0.5591402649879456 5 1.0 0 0.0 0 0.0 0 0.0 -0.3143486976623535 0.07734565436840057 0.14684003591537476 0.0 1.0 -0.0 0.4130093455314636 0.5591402649879456 5 1.0 0 0.0 0 0.0 0 0.0 -0.3433201313018799 0.07734565436840057 0.11786850541830063 0.0 0.999969482421875 -0.0 0.4109712839126587 0.5611783266067505 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.07734565436840057 0.10726418346166611 0.0 1.0 -0.0 0.40818727016448975 0.5619242787361145 5 1.0 0 0.0 0 0.0 0 0.0 -0.4514433741569519 0.07734565436840057 0.22599166631698608 0.0 1.0 -0.0 0.4033651649951935 0.5535721778869629 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.07734565436840057 0.26556745171546936 0.0 1.0 -0.0 0.40818727016448975 0.5507881045341492 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.07734565436840057 0.10726418346166611 0.0 1.0 -0.0 0.40818727016448975 0.5619242787361145 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.07734565436840057 0.26556745171546936 0.0 1.0 -0.0 0.40818727016448975 0.5507881045341492 5 1.0 0 0.0 0 0.0 0 0.0 -0.3143486976623535 0.07734565436840057 0.22599166631698608 0.0 1.0 -0.0 0.4130093455314636 0.5535721778869629 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.07734565436840057 0.10726418346166611 0.0 1.0 -0.0 0.40818727016448975 0.5619242787361145 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.31683751940727234 0.09264949709177017 0.0 -0.06088442727923393 -0.9981383681297302 0.40818727016448975 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.3360127806663513 0.31683751940727234 0.10521181672811508 0.4990691840648651 -0.06088442727923393 -0.8644062876701355 0.41148534417152405 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.3433201313018799 0.07734565436840057 0.11786850541830063 0.4990691840648651 -0.06088442727923393 -0.8644062876701355 0.4109712839126587 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.46410006284713745 0.31683751940727234 0.139532670378685 -0.8644062876701355 -0.06088442727923393 -0.4990691840648651 0.4024747908115387 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.42977917194366455 0.31683751940727234 0.1052117869257927 -0.4990691840648651 -0.06088442727923393 -0.8644062876701355 0.40488916635513306 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.422471821308136 0.07734565436840057 0.11786847561597824 -0.4990691840648651 -0.06088442727923393 -0.8644062876701355 0.4054032266139984 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.28912973403930664 0.31683751940727234 0.18641585111618042 0.9981383681297302 -0.06088442727923393 -0.0 0.41018784046173096 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.30169200897216797 0.31683751940727234 0.23329901695251465 0.8644062876701355 -0.06088442727923393 0.4990691840648651 0.40688976645469666 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.3143486976623535 0.07734565436840057 0.22599166631698608 0.8644062876701355 -0.06088442727923393 0.4990691840648651 0.4074037969112396 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.31683751940727234 0.2801821529865265 0.0 -0.06088442727923393 0.9981383681297302 0.40818727016448975 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.42977917194366455 0.31683751940727234 0.2676198184490204 -0.4990691840648651 -0.06088442727923393 0.8644062876701355 0.40488916635513306 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.422471821308136 0.07734565436840057 0.2549631595611572 -0.4990691840648651 -0.06088442727923393 0.8644062876701355 0.4054032266139984 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.4766623377799988 0.31683751940727234 0.18641582131385803 -0.9981383681297302 -0.06088442727923393 -0.0 0.41018784046173096 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.46410006284713745 0.31683751940727234 0.139532670378685 -0.8644062876701355 -0.06088442727923393 -0.4990691840648651 0.41348591446876526 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.4514433741569519 0.07734565436840057 0.14684000611305237 -0.8644062876701355 -0.06088442727923393 -0.4990691840648651 0.4129718840122223 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.30169200897216797 0.31683751940727234 0.13953270018100739 0.8644062876701355 -0.06088442727923393 -0.4990691840648651 0.41348591446876526 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.28912973403930664 0.31683751940727234 0.18641585111618042 0.9981383681297302 -0.06088442727923393 -0.0 0.41018784046173096 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.303744375705719 0.07734565436840057 0.18641585111618042 0.9981383681297302 -0.06088442727923393 -0.0 0.41018784046173096 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.3360128402709961 0.31683751940727234 0.2676198184490204 0.4990691840648651 -0.06088442727923393 0.8644062876701355 0.41148534417152405 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.31683751940727234 0.2801821529865265 0.0 -0.06088442727923393 0.9981383681297302 0.40818727016448975 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.07734565436840057 0.26556745171546936 0.0 -0.06088442727923393 0.9981383681297302 0.40818727016448975 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.4514433741569519 0.07734565436840057 0.22599166631698608 -0.8644062876701355 -0.06088442727923393 0.4990691840648651 0.4074037969112396 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.46410006284713745 0.31683751940727234 0.23329898715019226 -0.8644062876701355 -0.06088442727923393 0.4990691840648651 0.40688976645469666 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.4766623377799988 0.31683751940727234 0.18641582131385803 -0.9981383681297302 -0.06088442727923393 -0.0 0.41018784046173096 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.3360127806663513 0.31683751940727234 0.10521181672811508 0.4990691840648651 -0.06088442727923393 -0.8644062876701355 0.4159002900123596 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.30169200897216797 0.31683751940727234 0.13953270018100739 0.8644062876701355 -0.06088442727923393 -0.4990691840648651 0.41348591446876526 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.3143486976623535 0.07734565436840057 0.14684003591537476 0.8644062876701355 -0.06088442727923393 -0.4990691840648651 0.4129718840122223 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.422471821308136 0.07734565436840057 0.11786847561597824 -0.4990691840648651 -0.06088442727923393 -0.8644062876701355 0.4054032266139984 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.42977917194366455 0.31683751940727234 0.1052117869257927 -0.4990691840648651 -0.06088442727923393 -0.8644062876701355 0.40488916635513306 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.31683751940727234 0.09264949709177017 0.0 -0.06088442727923393 -0.9981383681297302 0.40818727016448975 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.30169200897216797 0.31683751940727234 0.23329901695251465 0.8644062876701355 -0.06088442727923393 0.4990691840648651 0.4138997197151184 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.3360128402709961 0.31683751940727234 0.2676198184490204 0.4990691840648651 -0.06088442727923393 0.8644062876701355 0.41148534417152405 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.34332019090652466 0.07734565436840057 0.2549631595611572 0.4990691840648651 -0.06088442727923393 0.8644062876701355 0.4109712839126587 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.422471821308136 0.07734565436840057 0.2549631595611572 -0.4990691840648651 -0.06088442727923393 0.8644062876701355 0.4054032266139984 0.5510663390159607 5 1.0 0 0.0 0 0.0 0 0.0 -0.42977917194366455 0.31683751940727234 0.2676198184490204 -0.4990691840648651 -0.06088442727923393 0.8644062876701355 0.40488916635513306 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.46410006284713745 0.31683751940727234 0.23329898715019226 -0.8644062876701355 -0.06088442727923393 0.4990691840648651 0.4024747908115387 0.5679138898849487 5 1.0 0 0.0 0 0.0 0 0.0 -0.4514433741569519 0.07734565436840057 0.14684000611305237 0.0 -1.0 -0.0 0.4033651649951935 0.5591402649879456 5 1.0 0 0.0 0 0.0 0 0.0 -0.422471821308136 0.07734565436840057 0.11786847561597824 0.0 -1.0 -0.0 0.4054032266139984 0.5611783266067505 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.07734565436840057 0.10726418346166611 0.0 -0.999969482421875 -0.0 0.40818727016448975 0.5619242787361145 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.07734565436840057 0.10726418346166611 0.0 -0.999969482421875 -0.0 0.40818727016448975 0.5619242787361145 5 1.0 0 0.0 0 0.0 0 0.0 -0.3433201313018799 0.07734565436840057 0.11786850541830063 0.0 -0.999969482421875 -0.0 0.4109712839126587 0.5611783266067505 5 1.0 0 0.0 0 0.0 0 0.0 -0.3143486976623535 0.07734565436840057 0.14684003591537476 0.0 -0.999969482421875 -0.0 0.4130093455314636 0.5591402649879456 5 1.0 0 0.0 0 0.0 0 0.0 -0.3143486976623535 0.07734565436840057 0.14684003591537476 0.0 -0.999969482421875 -0.0 0.4130093455314636 0.5591402649879456 5 1.0 0 0.0 0 0.0 0 0.0 -0.303744375705719 0.07734565436840057 0.18641585111618042 0.0 -0.999969482421875 -0.0 0.41375532746315 0.5563561916351318 5 1.0 0 0.0 0 0.0 0 0.0 -0.3143486976623535 0.07734565436840057 0.22599166631698608 0.0 -1.0 -0.0 0.4130093455314636 0.5535721778869629 5 1.0 0 0.0 0 0.0 0 0.0 -0.3143486976623535 0.07734565436840057 0.22599166631698608 0.0 -1.0 -0.0 0.4130093455314636 0.5535721778869629 5 1.0 0 0.0 0 0.0 0 0.0 -0.34332019090652466 0.07734565436840057 0.2549631595611572 0.0 -1.0 -0.0 0.4109712839126587 0.5515340566635132 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.07734565436840057 0.26556745171546936 0.0 -1.0 -0.0 0.40818727016448975 0.5507881045341492 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.07734565436840057 0.26556745171546936 0.0 -1.0 -0.0 0.40818727016448975 0.5507881045341492 5 1.0 0 0.0 0 0.0 0 0.0 -0.422471821308136 0.07734565436840057 0.2549631595611572 0.0 -1.0 -0.0 0.4054032266139984 0.5515340566635132 5 1.0 0 0.0 0 0.0 0 0.0 -0.4514433741569519 0.07734565436840057 0.22599166631698608 0.0 -1.0 -0.0 0.4033651649951935 0.5535721778869629 5 1.0 0 0.0 0 0.0 0 0.0 -0.4514433741569519 0.07734565436840057 0.22599166631698608 0.0 -1.0 -0.0 0.4033651649951935 0.5535721778869629 5 1.0 0 0.0 0 0.0 0 0.0 -0.46204763650894165 0.07734565436840057 0.18641582131385803 0.0 -0.999969482421875 -0.0 0.4026191830635071 0.5563561916351318 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.07734565436840057 0.26556745171546936 0.0 -1.0 -0.0 0.40818727016448975 0.5507881045341492 5 1.0 0 0.0 0 0.0 0 0.0 -0.46204763650894165 0.07734565436840057 0.18641582131385803 0.0 -0.999969482421875 -0.0 0.4026191830635071 0.5563561916351318 5 1.0 0 0.0 0 0.0 0 0.0 -0.4514433741569519 0.07734565436840057 0.14684000611305237 0.0 -1.0 -0.0 0.4033651649951935 0.5591402649879456 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.07734565436840057 0.26556745171546936 0.0 -1.0 -0.0 0.40818727016448975 0.5507881045341492 5 1.0 0 0.0 0 0.0 0 0.0 -0.4514433741569519 0.07734565436840057 0.14684000611305237 0.0 -1.0 -0.0 0.4033651649951935 0.5591402649879456 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.07734565436840057 0.10726418346166611 0.0 -0.999969482421875 -0.0 0.40818727016448975 0.5619242787361145 5 1.0 0 0.0 0 0.0 0 0.0 -0.3143486976623535 0.07734565436840057 0.14684003591537476 0.0 -0.999969482421875 -0.0 0.4130093455314636 0.5591402649879456 5 1.0 0 0.0 0 0.0 0 0.0 -0.3143486976623535 0.07734565436840057 0.14684003591537476 0.0 -0.999969482421875 -0.0 0.4130093455314636 0.5591402649879456 5 1.0 0 0.0 0 0.0 0 0.0 -0.3143486976623535 0.07734565436840057 0.22599166631698608 0.0 -1.0 -0.0 0.4130093455314636 0.5535721778869629 5 1.0 0 0.0 0 0.0 0 0.0 -0.3828960061073303 0.07734565436840057 0.26556745171546936 0.0 -1.0 -0.0 0.40818727016448975 0.5507881045341492 5 1.0 0 0.0 0 0.0 0 0.0 0 1 2 0 3 4 5 0 6 7 8 0 9 10 11 0 12 13 14 0 15 16 17 0 18 19 20 0 21 22 23 0 24 25 26 0 27 28 29 0 30 31 32 0 33 34 35 0 36 37 38 0 39 40 41 0 42 43 44 0 45 46 47 0 48 49 50 0 51 52 53 0 54 55 56 0 57 58 59 0 60 61 62 0 63 64 65 0 66 67 68 0 69 70 71 0 72 73 74 0 75 76 77 0 78 79 80 0 81 82 83 0 84 85 86 0 87 88 89 0 90 91 92 0 93 94 95 0 96 97 98 0 99 100 101 0 102 103 104 0 105 106 107 0 108 109 110 0 111 112 113 0 114 115 116 0 117 118 119 0 120 121 122 0 123 124 125 0 126 127 128 0 129 130 131 0 132 133 134 0 135 136 137 0 138 139 140 0 141 142 143 0 144 145 146 0 147 148 149 0 150 151 152 0 153 154 155 0 156 157 158 0 159 160 161 0 162 163 164 0 165 166 167 0 168 169 170 0 171 172 173 0 174 175 176 0 177 178 179 0 180 181 182 0 183 184 185 0 186 187 188 0 189 190 191 0 192 193 194 0 195 196 197 0 198 199 200 0 201 202 203 0 204 205 206 0 207 208 209 0 210 211 212 0 213 214 215 0 216 217 218 0 219 220 221 0 222 223 224 0 225 226 227 0 228 229 230 0 231 232 233 0 234 235 236 0 237 238 239 0 240 241 242 0 243 244 245 0 246 247 248 0 249 250 251 0 252 253 254 0 255 256 257 0 258 259 260 0 261 262 263 0 264 265 266 0 267 268 269 0 270 271 272 0 273 274 275 0 276 277 278 0 279 280 281 0 282 283 284 0 285 286 287 0 288 289 290 0 291 292 293 0 294 295 296 0 297 298 299 0 300 301 302 0 303 304 305 0 306 307 308 0 309 310 311 0 312 313 314 0 315 316 317 0 318 319 320 0 321 322 323 0 324 325 326 0 327 328 329 0 330 331 332 0 333 334 335 0 336 337 338 0 339 340 341 0 342 343 344 0 345 346 347 0 348 349 350 0 351 352 353 0 354 355 356 0 357 358 359 0 360 361 362 0 363 364 365 0 366 367 368 0 369 370 371 0 372 373 374 0 375 376 377 0 378 379 380 0 381 382 383 0 384 385 386 0 387 388 389 0 390 391 392 0 393 394 395 0 396 397 398 0 399 400 401 0 402 403 404 0 405 406 407 0 408 409 410 0 411 412 413 0 414 415 416 0 417 418 419 0 420 421 422 0 423 424 425 0 426 427 428 0 429 430 431 0 432 433 434 0 435 436 437 0 438 439 440 0 441 442 443 0 444 445 446 0 447 448 449 0 450 451 452 0 453 454 455 0 456 457 458 0 459 460 461 0 462 463 464 0 465 466 467 0 468 469 470 0 471 472 473 0 474 475 476 0 477 478 479 0 480 481 482 0 483 484 485 0 486 487 488 0 489 490 491 0 492 493 494 0 495 496 497 0 498 499 500 0 501 502 503 0 504 505 506 0 507 508 509 0 510 511 512 0 513 514 515 0 516 517 518 0 519 520 521 0 522 523 524 0 525 526 527 0 528 529 530 0 531 532 533 0 534 535 536 0 537 538 539 0 540 541 542 0 543 544 545 0 546 547 548 0 549 550 551 0 552 553 554 0 555 556 557 0 558 559 560 0 561 562 563 0 564 565 566 0 567 568 569 0 570 571 572 0 573 574 575 0 576 577 578 0 579 580 581 0 582 583 584 0 585 586 587 0 588 589 590 0 591 592 593 0 594 595 596 0 597 598 599 0 600 601 602 0 603 604 605 0 606 607 608 0 609 610 611 0 612 613 614 0 615 616 617 0 618 619 620 0 621 622 623 0 624 625 626 0 627 628 629 0 630 631 632 0 633 634 635 0 636 637 638 0 639 640 641 0 642 643 644 0 645 646 647 0 648 649 650 0 651 652 653 0 654 655 656 0 657 658 659 0 660 661 662 0 663 664 665 0 666 667 668 0 669 670 671 0 672 673 674 0 675 676 677 0 678 679 680 0 681 682 683 0 684 685 686 0 687 688 689 0 690 691 692 0 693 694 695 0 696 697 698 0 699 700 701 0 702 703 704 0 705 706 707 0 708 709 710 0 711 712 713 0 714 715 716 0 717 718 719 0 720 721 722 0 723 724 725 0 726 727 728 0 729 730 731 0 732 733 734 0 735 736 737 0 738 739 740 0 741 742 743 0 744 745 746 0 747 748 749 0 750 751 752 0 753 754 755 0 756 757 758 0 759 760 761 0 762 763 764 0 765 766 767 0 768 769 770 0 771 772 773 0 774 775 776 0 777 778 779 0 780 781 782 0 783 784 785 0 786 787 788 0 789 790 791 0 792 793 794 0 795 796 797 0 798 799 800 0 801 802 803 0 804 805 806 0 807 808 809 0 810 811 812 0 813 814 815 0 816 817 818 0 819 820 821 0 822 823 824 0 825 826 827 0 828 829 830 0 831 832 833 0 834 835 836 0 837 838 839 0 840 841 842 0 843 844 845 0 846 847 848 0 849 850 851 0 852 853 854 0 855 856 857 0 858 859 860 0 861 862 863 0 864 865 866 0 867 868 869 0 870 871 872 0 873 874 875 0 876 877 878 0 879 880 881 0 882 883 884 0 885 886 887 0 888 889 890 0 891 892 893 0 894 895 896 0 897 898 899 0 900 901 902 0 903 904 905 0 906 907 908 0 909 910 911 0 912 913 914 0 915 916 917 0 918 919 920 0 921 922 923 0 924 925 926 0 927 928 929 0 930 931 932 0 933 934 935 0 936 937 938 0 939 940 941 0 942 943 944 0 945 946 947 0 948 949 950 0 951 952 953 0 954 955 956 0 957 958 959 0 960 961 962 0 963 964 965 0 966 967 968 0 969 970 971 0 972 973 974 0 975 976 977 0 978 979 980 0 981 982 983 0 984 985 986 0 987 988 989 0 990 991 992 0 993 994 995 0 996 997 998 0 999 1000 1001 0 1002 1003 1004 0 1005 1006 1007 0 1008 1009 1010 0 1011 1012 1013 0 1014 1015 1016 0 1017 1018 1019 0 1020 1021 1022 0 1023 1024 1025 0 1026 1027 1028 0 1029 1030 1031 0 1032 1033 1034 0 1035 1036 1037 0 1038 1039 1040 0 1041 1042 1043 0 1044 1045 1046 0 1047 1048 1049 0 1050 1051 1052 0 1053 1054 1055 0 1056 1057 1058 0 1059 1060 1061 0 1062 1063 1064 0 1065 1066 1067 0 1068 1069 1070 0 1071 1072 1073 0 1074 1075 1076 0 1077 1078 1079 0 1080 1081 1082 0 1083 1084 1085 0 1086 1087 1088 0 1089 1090 1091 0 1092 1093 1094 0 1095 1096 1097 0 1098 1099 1100 0 1101 1102 1103 0 1104 1105 1106 0 1107 1108 1109 0 1110 1111 1112 0 1113 1114 1115 0 1116 1117 1118 0 1119 1120 1121 0 1122 1123 1124 0 1125 1126 1127 0 1128 1129 1130 0 1131 1132 1133 0 1134 1135 1136 0 1137 1138 1139 0 1140 1141 1142 0 1143 1144 1145 0 1146 1147 1148 0 1149 1150 1151 0 1152 1153 1154 0 1155 1156 1157 0 1158 1159 1160 0 1161 1162 1163 0 1164 1165 1166 0 1167 1168 1169 0 1170 1171 1172 0 1173 1174 1175 0 1176 1177 1178 0 1179 1180 1181 0 1182 1183 1184 0 1185 1186 1187 0 1188 1189 1190 0 1191 1192 1193 0 1194 1195 1196 0 1197 1198 1199 0 1200 1201 1202 0 1203 1204 1205 0 1206 1207 1208 0 1209 1210 1211 0 1212 1213 1214 0 1215 1216 1217 0 1218 1219 1220 0 1221 1222 1223 0 1224 1225 1226 0 1227 1228 1229 0 1230 1231 1232 0 1233 1234 1235 0 1236 1237 1238 0 1239 1240 1241 0 1242 1243 1244 0 1245 1246 1247 0 1248 1249 1250 0 1251 1252 1253 0 1254 1255 1256 0 1257 1258 1259 0 1260 1261 1262 0 1263 1264 1265 0 1266 1267 1268 0 1269 1270 1271 0 1272 1273 1274 0 1275 1276 1277 0 1278 1279 1280 0 1281 1282 1283 0 1284 1285 1286 0 1287 1288 1289 0 1290 1291 1292 0 1293 1294 1295 0 1296 1297 1298 0 1299 1300 1301 0 1302 1303 1304 0 1305 1306 1307 0 1308 1309 1310 0 1311 1312 1313 0 1314 1315 1316 0 1317 1318 1319 0 1320 1321 1322 0 1323 1324 1325 0 1326 1327 1328 0 1329 1330 1331 0 1332 1333 1334 0 1335 1336 1337 0 1338 1339 1340 0 1341 1342 1343 0 1344 1345 1346 0 1347 1348 1349 0 1350 1351 1352 0 1353 1354 1355 0 1356 1357 1358 0 1359 1360 1361 0 1362 1363 1364 0 1365 1366 1367 0 1368 1369 1370 0 1371 1372 1373 0 1374 1375 1376 0 1377 1378 1379 0 1380 1381 1382 0 1383 1384 1385 0 1386 1387 1388 0 1389 1390 1391 0 1392 1393 1394 0 1395 1396 1397 0 1398 1399 1400 0 1401 1402 1403 0 1404 1405 1406 0 1407 1408 1409 0 1410 1411 1412 0 1413 1414 1415 0 1416 1417 1418 0 1419 1420 1421 0 1422 1423 1424 0 1425 1426 1427 0 1428 1429 1430 0 1431 1432 1433 0 1434 1435 1436 0 1437 1438 1439 0 1440 1441 1442 0 1443 1444 1445 0 1446 1447 1448 0 1449 1450 1451 0 1452 1453 1454 0 1455 1456 1457 0 1458 1459 1460 0 1461 1462 1463 0 1464 1465 1466 0 1467 1468 1469 0 1470 1471 1472 0 1473 1474 1475 0 1476 1477 1478 0 1479 1480 1481 0 1482 1483 1484 0 1485 1486 1487 0 1488 1489 1490 0 1491 1492 1493 0 1494 1495 1496 0 1497 1498 1499 0 1500 1501 1502 0 1503 1504 1505 0 1506 1507 1508 0 1509 1510 1511 0 1512 1513 1514 0 1515 1516 1517 0 1518 1519 1520 0 1521 1522 1523 0 1524 1525 1526 0 1527 1528 1529 0 1530 1531 1532 0 1533 1534 1535 0 1536 1537 1538 0 1539 1540 1541 0 1542 1543 1544 0 1545 1546 1547 0 1548 1549 1550 0 1551 1552 1553 0 1554 1555 1556 0 1557 1558 1559 0 1560 1561 1562 0 1563 1564 1565 0 1566 1567 1568 0 1569 1570 1571 0 1572 1573 1574 0 1575 1576 1577 0 1578 1579 1580 0 1581 1582 1583 0 1584 1585 1586 0 1587 1588 1589 0 1590 1591 1592 0 1593 1594 1595 0 1596 1597 1598 0 1599 1600 1601 0 1602 1603 1604 0 1605 1606 1607 0 1608 1609 1610 0 1611 1612 1613 0 1614 1615 1616 0 1617 1618 1619 0 1620 1621 1622 0 1623 1624 1625 0 1626 1627 1628 0 1629 1630 1631 0 1632 1633 1634 0 1635 1636 1637 0 1638 1639 1640 0 1641 1642 1643 0 1644 1645 1646 0 1647 1648 1649 0 1650 1651 1652 0 1653 1654 1655 0 1656 1657 1658 0 1659 1660 1661 0 1662 1663 1664 0 1665 1666 1667 0 1668 1669 1670 0 1671 1672 1673 0 1674 1675 1676 0 1677 1678 1679 0 1680 1681 1682 0 1683 1684 1685 0 1686 1687 1688 0 1689 1690 1691 0 1692 1693 1694 0 1695 1696 1697 0 1698 1699 1700 0 1701 1702 1703 0 1704 1705 1706 0 1707 1708 1709 0 1710 1711 1712 0 1713 1714 1715 0 1716 1717 1718 0 1719 1720 1721 0 1722 1723 1724 0 1725 1726 1727 0 1728 1729 1730 0 1731 1732 1733 0 1734 1735 1736 0 1737 1738 1739 0 1740 1741 1742 0 1743 1744 1745 0 1746 1747 1748 0 1749 1750 1751 0 1752 1753 1754 0 1755 1756 1757 0 1758 1759 1760 0 1761 1762 1763 0 1764 1765 1766 0 1767 1768 1769 0 1770 1771 1772 0 1773 1774 1775 0 1776 1777 1778 0 1779 1780 1781 0 1782 1783 1784 0 1785 1786 1787 0 1788 1789 1790 0 1791 1792 1793 0 1794 1795 1796 0 1797 1798 1799 0 1800 1801 1802 0 1803 1804 1805 0 1806 1807 1808 0 1809 1810 1811 0 1812 1813 1814 0 1815 1816 1817 0 1818 1819 1820 0 1821 1822 1823 0 1824 1825 1826 0 1827 1828 1829 0 1830 1831 1832 0 1833 1834 1835 0 1836 1837 1838 0 1839 1840 1841 0 1842 1843 1844 0 1845 1846 1847 0 1848 1849 1850 0 1851 1852 1853 0 1854 1855 1856 0 1857 1858 1859 0 1860 1861 1862 0 1863 1864 1865 0 1866 1867 1868 0 1869 1870 1871 0 1872 1873 1874 0 1875 1876 1877 0 1878 1879 1880 0 1881 1882 1883 0 1884 1885 1886 0 1887 1888 1889 0 1890 1891 1892 0 1893 1894 1895 0 1896 1897 1898 0 1899 1900 1901 0 1902 1903 1904 0 1905 1906 1907 0 1908 1909 1910 0 1911 1912 1913 0 1914 1915 1916 0 1917 1918 1919 0 1920 1921 1922 0 1923 1924 1925 0 1926 1927 1928 0 1929 1930 1931 0 1932 1933 1934 0 1935 1936 1937 0 1938 1939 1940 0 1941 1942 1943 0 1944 1945 1946 0 1947 1948 1949 0 1950 1951 1952 0 1953 1954 1955 0 1956 1957 1958 0 1959 1960 1961 0 1962 1963 1964 0 1965 1966 1967 0 1968 1969 1970 0 1971 1972 1973 0 1974 1975 1976 0 1977 1978 1979 0 1980 1981 1982 0 1983 1984 1985 0 1986 1987 1988 0 1989 1990 1991 0 1992 1993 1994 0 1995 1996 1997 0 1998 1999 2000 0 2001 2002 2003 0 2004 2005 2006 0 2007 2008 2009 0 2010 2011 2012 0 2013 2014 2015 0 2016 2017 2018 0 2019 2020 2021 0 2022 2023 2024 0 2025 2026 2027 0 2028 2029 2030 0 2031 2032 2033 0 2034 2035 2036 0 2037 2038 2039 0 2040 2041 2042 0 2043 2044 2045 0 2046 2047 2048 0 2049 2050 2051 0 2052 2053 2054 0 2055 2056 2057 0 2058 2059 2060 0 2061 2062 2063 0 2064 2065 2066 0 2067 2068 2069 0 2070 2071 2072 0 2073 2074 2075 0 2076 2077 2078 0 2079 2080 2081 0 2082 2083 2084 0 2085 2086 2087 0 2088 2089 2090 0 2091 2092 2093 0 2094 2095 2096 0 2097 2098 2099 0 2100 2101 2102 0 2103 2104 2105 0 2106 2107 2108 0 2109 2110 2111 0 2112 2113 2114 0 2115 2116 2117 0 2118 2119 2120 0 2121 2122 2123 0 2124 2125 2126 0 2127 2128 2129 0 2130 2131 2132 0 2133 2134 2135 0 2136 2137 2138 0 2139 2140 2141 0 2142 2143 2144 0 2145 2146 2147 0 2148 2149 2150 0 2151 2152 2153 0 2154 2155 2156 0 2157 2158 2159 0 2160 2161 2162 0 2163 2164 2165 0 2166 2167 2168 0 2169 2170 2171 0 2172 2173 2174 0 2175 2176 2177 0 2178 2179 2180 0 2181 2182 2183 0 2184 2185 2186 0 2187 2188 2189 0 2190 2191 2192 0 2193 2194 2195 0 2196 2197 2198 0 2199 2200 2201 0 2202 2203 2204 0 2205 2206 2207 0 2208 2209 2210 0 2211 2212 2213 0 2214 2215 2216 0 2217 2218 2219 0 2220 2221 2222 0 2223 2224 2225 0 2226 2227 2228 0 2229 2230 2231 0 2232 2233 2234 0 2235 2236 2237 0 Root -1 -9.838853473897685e-18 -0.04431025683879852 0.23104633390903473 -1.6585495383324318e-16 0.2530556917190552 -0.17407599091529846 0.0 Head -1 8.292747029917669e-17 0.37347212433815 -0.2658616006374359 -7.519695131416642e-17 0.6613430380821228 -0.45259764790534973 0.0 FootR -1 0.23737645149230957 -0.028485145419836044 0.5783365368843079 0.27913710474967957 0.3604905307292938 0.7608526945114136 0.0 ArmL -1 0.24421437084674835 0.25900402665138245 -0.11653183400630951 0.48079705238342285 0.16953438520431519 0.0747784823179245 0.0 FootL -1 -0.22638681530952454 -0.028485145419836044 0.5761386156082153 -0.26814746856689453 0.3604905307292938 0.758654773235321 0.0 ArmR -1 -0.23322473466396332 0.25900402665138245 -0.11872977018356323 -0.4698074162006378 0.16953438520431519 0.07258054614067078 0.0 Root Head FootR ArmL FootL ArmR ================================================ FILE: data/models/chamberpot.dymdl ================================================ DYMDLv1 984 480 1 1 0 Material 0.7622222304344177 2.4000000953674316 1.297777771949768 0.4286935031414032 0.5113681554794312 0.7447736859321594 0.43147653341293335 0.45172613859176636 0 1.0 0 0.0 0 0.0 0 0.0 0.7278751730918884 2.487499952316284 1.23929762840271 0.2468031793832779 0.8685262799263 0.4297616481781006 0.43381404876708984 0.46476656198501587 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.487499952316284 1.4324073791503906 0.0 0.868495762348175 0.49562060832977295 0.36621230840682983 0.5129598379135132 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.4000000953674316 1.5 0.0 0.5102694630622864 0.8599810600280762 0.36209404468536377 0.4997289776802063 0 1.0 0 0.0 0 0.0 0 0.0 0.7278751730918884 2.487499952316284 1.23929762840271 0.2468031793832779 0.8685262799263 0.4297616481781006 0.43381404876708984 0.46476656198501587 0 1.0 0 0.0 0 0.0 0 0.0 0.7034087777137756 2.487499952316284 1.1976406574249268 -0.3505661189556122 0.7112033367156982 -0.6093020439147949 0.43489623069763184 0.46722179651260376 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.487499952316284 1.3842592239379883 0.0 0.7103183269500732 -0.7038483619689941 0.36791497468948364 0.5152775645256042 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.487499952316284 1.4324073791503906 0.0 0.868495762348175 0.49562060832977295 0.36621230840682983 0.5129598379135132 0 1.0 0 0.0 0 0.0 0 0.0 0.7034087777137756 2.487499952316284 1.1976406574249268 -0.3505661189556122 0.7112033367156982 -0.6093020439147949 0.43489623069763184 0.46722179651260376 0 1.0 0 0.0 0 0.0 0 0.0 0.7114074230194092 2.4000000953674316 1.2112592458724976 -0.491195410490036 -0.17761772871017456 -0.8527176976203918 0.4336108863353729 0.45609670877456665 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.4000000953674316 1.399999976158142 0.0 -0.17703787982463837 -0.9841914176940918 0.36538827419281006 0.5037634968757629 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.487499952316284 1.3842592239379883 0.0 0.7103183269500732 -0.7038483619689941 0.36791497468948364 0.5152775645256042 0 1.0 0 0.0 0 0.0 0 0.0 1.2977778911590576 2.4000000953674316 0.7622222900390625 0.7447736859321594 0.5113681554794312 0.4286935031414032 0.4978336989879608 0.43523162603378296 0 1.0 0 0.0 0 0.0 0 0.0 1.23929762840271 2.487499952316284 0.7278752326965332 0.4297616481781006 0.8685262799263 0.2468031793832779 0.4983713924884796 0.4480486512184143 0 1.0 0 0.0 0 0.0 0 0.0 0.7278751730918884 2.487499952316284 1.23929762840271 0.2468031793832779 0.8685262799263 0.4297616481781006 0.43381404876708984 0.46476656198501587 0 1.0 0 0.0 0 0.0 0 0.0 0.7622222304344177 2.4000000953674316 1.297777771949768 0.4286935031414032 0.5113681554794312 0.7447736859321594 0.43147653341293335 0.45172613859176636 0 1.0 0 0.0 0 0.0 0 0.0 1.23929762840271 2.487499952316284 0.7278752326965332 0.4297616481781006 0.8685262799263 0.2468031793832779 0.4983713924884796 0.4480486512184143 0 1.0 0 0.0 0 0.0 0 0.0 1.1976406574249268 2.487499952316284 0.7034087777137756 -0.6093020439147949 0.7112033367156982 -0.3505661189556122 0.49880385398864746 0.4505805969238281 0 1.0 0 0.0 0 0.0 0 0.0 0.7034087777137756 2.487499952316284 1.1976406574249268 -0.3505661189556122 0.7112033367156982 -0.6093020439147949 0.43489623069763184 0.46722179651260376 0 1.0 0 0.0 0 0.0 0 0.0 0.7278751730918884 2.487499952316284 1.23929762840271 0.2468031793832779 0.8685262799263 0.4297616481781006 0.43381404876708984 0.46476656198501587 0 1.0 0 0.0 0 0.0 0 0.0 1.1976406574249268 2.487499952316284 0.7034087777137756 -0.6093020439147949 0.7112033367156982 -0.3505661189556122 0.49880385398864746 0.4505805969238281 0 1.0 0 0.0 0 0.0 0 0.0 1.2112592458724976 2.4000000953674316 0.7114074230194092 -0.8527176976203918 -0.17761772871017456 -0.491195410490036 0.498710572719574 0.43980515003204346 0 1.0 0 0.0 0 0.0 0 0.0 0.7114074230194092 2.4000000953674316 1.2112592458724976 -0.491195410490036 -0.17761772871017456 -0.8527176976203918 0.4336108863353729 0.45609670877456665 0 1.0 0 0.0 0 0.0 0 0.0 0.7034087777137756 2.487499952316284 1.1976406574249268 -0.3505661189556122 0.7112033367156982 -0.6093020439147949 0.43489623069763184 0.46722179651260376 0 1.0 0 0.0 0 0.0 0 0.0 1.5 2.4000000953674316 -0.0 0.8599810600280762 0.5102694630622864 -0.0 0.5653074383735657 0.44760727882385254 0 1.0 0 0.0 0 0.0 0 0.0 1.4324073791503906 2.487499952316284 -0.0 0.49562060832977295 0.868495762348175 -0.0 0.5640665888786316 0.45991021394729614 0 1.0 0 0.0 0 0.0 0 0.0 1.23929762840271 2.487499952316284 0.7278752326965332 0.4297616481781006 0.8685262799263 0.2468031793832779 0.4983713924884796 0.4480486512184143 0 1.0 0 0.0 0 0.0 0 0.0 1.2977778911590576 2.4000000953674316 0.7622222900390625 0.7447736859321594 0.5113681554794312 0.4286935031414032 0.4978336989879608 0.43523162603378296 0 1.0 0 0.0 0 0.0 0 0.0 1.4324073791503906 2.487499952316284 -0.0 0.49562060832977295 0.868495762348175 -0.0 0.5640665888786316 0.45991021394729614 0 1.0 0 0.0 0 0.0 0 0.0 1.3842592239379883 2.487499952316284 -0.0 -0.7038483619689941 0.7103183269500732 -0.0 0.5638269186019897 0.46230220794677734 0 1.0 0 0.0 0 0.0 0 0.0 1.1976406574249268 2.487499952316284 0.7034087777137756 -0.6093020439147949 0.7112033367156982 -0.3505661189556122 0.49880385398864746 0.4505805969238281 0 1.0 0 0.0 0 0.0 0 0.0 1.23929762840271 2.487499952316284 0.7278752326965332 0.4297616481781006 0.8685262799263 0.2468031793832779 0.4983713924884796 0.4480486512184143 0 1.0 0 0.0 0 0.0 0 0.0 1.3842592239379883 2.487499952316284 -0.0 -0.7038483619689941 0.7103183269500732 -0.0 0.5638269186019897 0.46230220794677734 0 1.0 0 0.0 0 0.0 0 0.0 1.399999976158142 2.4000000953674316 -0.0 -0.9841914176940918 -0.17703787982463837 -0.0 0.5648702383041382 0.451926052570343 0 1.0 0 0.0 0 0.0 0 0.0 1.2112592458724976 2.4000000953674316 0.7114074230194092 -0.8527176976203918 -0.17761772871017456 -0.491195410490036 0.498710572719574 0.43980515003204346 0 1.0 0 0.0 0 0.0 0 0.0 1.1976406574249268 2.487499952316284 0.7034087777137756 -0.6093020439147949 0.7112033367156982 -0.3505661189556122 0.49880385398864746 0.4505805969238281 0 1.0 0 0.0 0 0.0 0 0.0 -1.297777771949768 2.4000000953674316 0.7622222304344177 -0.7447736859321594 0.5113681554794312 0.4286935031414032 0.20935985445976257 0.6693832278251648 0 1.0 0 0.0 0 0.0 0 0.0 -1.23929762840271 2.487499952316284 0.7278751730918884 -0.4297616481781006 0.8685262799263 0.2468031793832779 0.21623337268829346 0.6856119632720947 0 1.0 0 0.0 0 0.0 0 0.0 -1.4324073791503906 2.487499952316284 -0.0 -0.49562060832977295 0.868495762348175 -0.0 0.09706264734268188 0.7744057178497314 0 1.0 0 0.0 0 0.0 0 0.0 -1.5 2.4000000953674316 -0.0 -0.8599810600280762 0.5102694630622864 -0.0 0.09257018566131592 0.7542117834091187 0 1.0 0 0.0 0 0.0 0 0.0 -1.23929762840271 2.487499952316284 0.7278751730918884 -0.4297616481781006 0.8685262799263 0.2468031793832779 0.21623337268829346 0.6856119632720947 0 1.0 0 0.0 0 0.0 0 0.0 -1.1976406574249268 2.487499952316284 0.7034087777137756 0.6093020439147949 0.7112033367156982 -0.3505661189556122 0.2188054919242859 0.6892615556716919 0 1.0 0 0.0 0 0.0 0 0.0 -1.3842592239379883 2.487499952316284 -0.0 0.7038483619689941 0.7103183269500732 -0.0 0.09843429923057556 0.7800112962722778 0 1.0 0 0.0 0 0.0 0 0.0 -1.4324073791503906 2.487499952316284 -0.0 -0.49562060832977295 0.868495762348175 -0.0 0.09706264734268188 0.7744057178497314 0 1.0 0 0.0 0 0.0 0 0.0 -1.1976406574249268 2.487499952316284 0.7034087777137756 0.6093020439147949 0.7112033367156982 -0.3505661189556122 0.2188054919242859 0.6892615556716919 0 1.0 0 0.0 0 0.0 0 0.0 -1.2112592458724976 2.4000000953674316 0.7114074230194092 0.8527176976203918 -0.17761772871017456 -0.491195410490036 0.2139941155910492 0.6759850978851318 0 1.0 0 0.0 0 0.0 0 0.0 -1.399999976158142 2.4000000953674316 -0.0 0.9841914176940918 -0.17703787982463837 -0.0 0.0947655737400055 0.7644467353820801 0 1.0 0 0.0 0 0.0 0 0.0 -1.3842592239379883 2.487499952316284 -0.0 0.7038483619689941 0.7103183269500732 -0.0 0.09843429923057556 0.7800112962722778 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222900390625 2.4000000953674316 1.2977778911590576 -0.4286935031414032 0.5113681554794312 0.7447736859321594 0.2899063229560852 0.5765905380249023 0 1.0 0 0.0 0 0.0 0 0.0 -0.7278752326965332 2.487499952316284 1.23929762840271 -0.2468031793832779 0.8685262799263 0.4297616481781006 0.29563820362091064 0.5905562043190002 0 1.0 0 0.0 0 0.0 0 0.0 -1.23929762840271 2.487499952316284 0.7278751730918884 -0.4297616481781006 0.8685262799263 0.2468031793832779 0.21623337268829346 0.6856119632720947 0 1.0 0 0.0 0 0.0 0 0.0 -1.297777771949768 2.4000000953674316 0.7622222304344177 -0.7447736859321594 0.5113681554794312 0.4286935031414032 0.20935985445976257 0.6693832278251648 0 1.0 0 0.0 0 0.0 0 0.0 -0.7278752326965332 2.487499952316284 1.23929762840271 -0.2468031793832779 0.8685262799263 0.4297616481781006 0.29563820362091064 0.5905562043190002 0 1.0 0 0.0 0 0.0 0 0.0 -0.7034087777137756 2.487499952316284 1.1976406574249268 0.3505661189556122 0.7112033367156982 -0.6093020439147949 0.2978811264038086 0.5930858850479126 0 1.0 0 0.0 0 0.0 0 0.0 -1.1976406574249268 2.487499952316284 0.7034087777137756 0.6093020439147949 0.7112033367156982 -0.3505661189556122 0.2188054919242859 0.6892615556716919 0 1.0 0 0.0 0 0.0 0 0.0 -1.23929762840271 2.487499952316284 0.7278751730918884 -0.4297616481781006 0.8685262799263 0.2468031793832779 0.21623337268829346 0.6856119632720947 0 1.0 0 0.0 0 0.0 0 0.0 -0.7034087777137756 2.487499952316284 1.1976406574249268 0.3505661189556122 0.7112033367156982 -0.6093020439147949 0.2978811264038086 0.5930858850479126 0 1.0 0 0.0 0 0.0 0 0.0 -0.7114074230194092 2.4000000953674316 1.2112592458724976 0.491195410490036 -0.17761772871017456 -0.8527176976203918 0.2941329777240753 0.5810052156448364 0 1.0 0 0.0 0 0.0 0 0.0 -1.2112592458724976 2.4000000953674316 0.7114074230194092 0.8527176976203918 -0.17761772871017456 -0.491195410490036 0.2139941155910492 0.6759850978851318 0 1.0 0 0.0 0 0.0 0 0.0 -1.1976406574249268 2.487499952316284 0.7034087777137756 0.6093020439147949 0.7112033367156982 -0.3505661189556122 0.2188054919242859 0.6892615556716919 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.4000000953674316 1.5 0.0 0.5102694630622864 0.8599810600280762 0.36209404468536377 0.4997289776802063 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.487499952316284 1.4324073791503906 0.0 0.868495762348175 0.49562060832977295 0.36621230840682983 0.5129598379135132 0 1.0 0 0.0 0 0.0 0 0.0 -0.7278752326965332 2.487499952316284 1.23929762840271 -0.2468031793832779 0.8685262799263 0.4297616481781006 0.29563820362091064 0.5905562043190002 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222900390625 2.4000000953674316 1.2977778911590576 -0.4286935031414032 0.5113681554794312 0.7447736859321594 0.2899063229560852 0.5765905380249023 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.487499952316284 1.4324073791503906 0.0 0.868495762348175 0.49562060832977295 0.36621230840682983 0.5129598379135132 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.487499952316284 1.3842592239379883 0.0 0.7103183269500732 -0.7038483619689941 0.36791497468948364 0.5152775645256042 0 1.0 0 0.0 0 0.0 0 0.0 -0.7034087777137756 2.487499952316284 1.1976406574249268 0.3505661189556122 0.7112033367156982 -0.6093020439147949 0.2978811264038086 0.5930858850479126 0 1.0 0 0.0 0 0.0 0 0.0 -0.7278752326965332 2.487499952316284 1.23929762840271 -0.2468031793832779 0.8685262799263 0.4297616481781006 0.29563820362091064 0.5905562043190002 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.487499952316284 1.3842592239379883 0.0 0.7103183269500732 -0.7038483619689941 0.36791497468948364 0.5152775645256042 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.4000000953674316 1.399999976158142 0.0 -0.17703787982463837 -0.9841914176940918 0.36538827419281006 0.5037634968757629 0 1.0 0 0.0 0 0.0 0 0.0 -0.7114074230194092 2.4000000953674316 1.2112592458724976 0.491195410490036 -0.17761772871017456 -0.8527176976203918 0.2941329777240753 0.5810052156448364 0 1.0 0 0.0 0 0.0 0 0.0 -0.7034087777137756 2.487499952316284 1.1976406574249268 0.3505661189556122 0.7112033367156982 -0.6093020439147949 0.2978811264038086 0.5930858850479126 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222304344177 2.4000000953674316 -1.297777771949768 -0.4286935031414032 0.5113681554794312 -0.7447736859321594 0.8343170881271362 0.699485719203949 0 1.0 0 0.0 0 0.0 0 0.0 -0.7278751730918884 2.487499952316284 -1.23929762840271 -0.2468031793832779 0.8685262799263 -0.4297616481781006 0.827828586101532 0.7140057682991028 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.487499952316284 -1.4324073791503906 0.0 0.868495762348175 -0.49562060832977295 0.7488337755203247 0.6288853883743286 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.4000000953674316 -1.5 0.0 0.5102694630622864 -0.8599810600280762 0.7542129755020142 0.6169042587280273 0 1.0 0 0.0 0 0.0 0 0.0 -0.7278751730918884 2.487499952316284 -1.23929762840271 -0.2468031793832779 0.8685262799263 -0.4297616481781006 0.827828586101532 0.7140057682991028 0 1.0 0 0.0 0 0.0 0 0.0 -0.7034087777137756 2.487499952316284 -1.1976406574249268 0.3505661189556122 0.7112033367156982 0.6093020439147949 0.8251392245292664 0.7167086601257324 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.487499952316284 -1.3842592239379883 0.0 0.7103183269500732 0.7038483619689941 0.7468173503875732 0.6306852698326111 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.487499952316284 -1.4324073791503906 0.0 0.868495762348175 -0.49562060832977295 0.7488337755203247 0.6288853883743286 0 1.0 0 0.0 0 0.0 0 0.0 -0.7034087777137756 2.487499952316284 -1.1976406574249268 0.3505661189556122 0.7112033367156982 0.6093020439147949 0.8251392245292664 0.7167086601257324 0 1.0 0 0.0 0 0.0 0 0.0 -0.7114074230194092 2.4000000953674316 -1.2112592458724976 0.491195410490036 -0.17761772871017456 0.8527176976203918 0.829383134841919 0.7043319940567017 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.4000000953674316 -1.399999976158142 0.0 -0.17703787982463837 0.9841914176940918 0.7504168748855591 0.6200130581855774 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.487499952316284 -1.3842592239379883 0.0 0.7103183269500732 0.7038483619689941 0.7468173503875732 0.6306852698326111 0 1.0 0 0.0 0 0.0 0 0.0 -1.2977778911590576 2.4000000953674316 -0.7622222900390625 -0.7447736859321594 0.5113681554794312 -0.4286935031414032 0.9449872970581055 0.762032687664032 0 1.0 0 0.0 0 0.0 0 0.0 -1.23929762840271 2.487499952316284 -0.7278752326965332 -0.4297616481781006 0.8685262799263 -0.2468031793832779 0.9407130479812622 0.7812114953994751 0 1.0 0 0.0 0 0.0 0 0.0 -0.7278751730918884 2.487499952316284 -1.23929762840271 -0.2468031793832779 0.8685262799263 -0.4297616481781006 0.827828586101532 0.7140057682991028 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222304344177 2.4000000953674316 -1.297777771949768 -0.4286935031414032 0.5113681554794312 -0.7447736859321594 0.8343170881271362 0.699485719203949 0 1.0 0 0.0 0 0.0 0 0.0 -1.23929762840271 2.487499952316284 -0.7278752326965332 -0.4297616481781006 0.8685262799263 -0.2468031793832779 0.9407130479812622 0.7812114953994751 0 1.0 0 0.0 0 0.0 0 0.0 -1.1976406574249268 2.487499952316284 -0.7034087777137756 0.6093020439147949 0.7112033367156982 0.3505661189556122 0.9384674429893494 0.7860746383666992 0 1.0 0 0.0 0 0.0 0 0.0 -0.7034087777137756 2.487499952316284 -1.1976406574249268 0.3505661189556122 0.7112033367156982 0.6093020439147949 0.8251392245292664 0.7167086601257324 0 1.0 0 0.0 0 0.0 0 0.0 -0.7278751730918884 2.487499952316284 -1.23929762840271 -0.2468031793832779 0.8685262799263 -0.4297616481781006 0.827828586101532 0.7140057682991028 0 1.0 0 0.0 0 0.0 0 0.0 -1.1976406574249268 2.487499952316284 -0.7034087777137756 0.6093020439147949 0.7112033367156982 0.3505661189556122 0.9384674429893494 0.7860746383666992 0 1.0 0 0.0 0 0.0 0 0.0 -1.2112592458724976 2.4000000953674316 -0.7114074230194092 0.8527176976203918 -0.17761772871017456 0.491195410490036 0.9410111904144287 0.7708781361579895 0 1.0 0 0.0 0 0.0 0 0.0 -0.7114074230194092 2.4000000953674316 -1.2112592458724976 0.491195410490036 -0.17761772871017456 0.8527176976203918 0.829383134841919 0.7043319940567017 0 1.0 0 0.0 0 0.0 0 0.0 -0.7034087777137756 2.487499952316284 -1.1976406574249268 0.3505661189556122 0.7112033367156982 0.6093020439147949 0.8251392245292664 0.7167086601257324 0 1.0 0 0.0 0 0.0 0 0.0 -1.5 2.4000000953674316 -0.0 -0.8599810600280762 0.5102694630622864 -0.0 1.092570185661316 0.7542117834091187 0 1.0 0 0.0 0 0.0 0 0.0 -1.4324073791503906 2.487499952316284 -0.0 -0.49562060832977295 0.868495762348175 -0.0 1.097062587738037 0.7744057178497314 0 1.0 0 0.0 0 0.0 0 0.0 -1.23929762840271 2.487499952316284 -0.7278752326965332 -0.4297616481781006 0.8685262799263 -0.2468031793832779 0.9407130479812622 0.7812114953994751 0 1.0 0 0.0 0 0.0 0 0.0 -1.2977778911590576 2.4000000953674316 -0.7622222900390625 -0.7447736859321594 0.5113681554794312 -0.4286935031414032 0.9449872970581055 0.762032687664032 0 1.0 0 0.0 0 0.0 0 0.0 -1.4324073791503906 2.487499952316284 -0.0 -0.49562060832977295 0.868495762348175 -0.0 1.097062587738037 0.7744057178497314 0 1.0 0 0.0 0 0.0 0 0.0 -1.3842592239379883 2.487499952316284 -0.0 0.7038483619689941 0.7103183269500732 -0.0 1.098434329032898 0.7800112962722778 0 1.0 0 0.0 0 0.0 0 0.0 -1.1976406574249268 2.487499952316284 -0.7034087777137756 0.6093020439147949 0.7112033367156982 0.3505661189556122 0.9384674429893494 0.7860746383666992 0 1.0 0 0.0 0 0.0 0 0.0 -1.23929762840271 2.487499952316284 -0.7278752326965332 -0.4297616481781006 0.8685262799263 -0.2468031793832779 0.9407130479812622 0.7812114953994751 0 1.0 0 0.0 0 0.0 0 0.0 -1.3842592239379883 2.487499952316284 -0.0 0.7038483619689941 0.7103183269500732 -0.0 1.098434329032898 0.7800112962722778 0 1.0 0 0.0 0 0.0 0 0.0 -1.399999976158142 2.4000000953674316 -0.0 0.9841914176940918 -0.17703787982463837 -0.0 1.094765543937683 0.7644467353820801 0 1.0 0 0.0 0 0.0 0 0.0 -1.2112592458724976 2.4000000953674316 -0.7114074230194092 0.8527176976203918 -0.17761772871017456 0.491195410490036 0.9410111904144287 0.7708781361579895 0 1.0 0 0.0 0 0.0 0 0.0 -1.1976406574249268 2.487499952316284 -0.7034087777137756 0.6093020439147949 0.7112033367156982 0.3505661189556122 0.9384674429893494 0.7860746383666992 0 1.0 0 0.0 0 0.0 0 0.0 1.297777771949768 2.4000000953674316 -0.7622222304344177 0.7447736859321594 0.5113681554794312 -0.4286935031414032 0.6295300722122192 0.48565661907196045 0 1.0 0 0.0 0 0.0 0 0.0 1.23929762840271 2.487499952316284 -0.7278751730918884 0.4297616481781006 0.8685262799263 -0.2468031793832779 0.6267805099487305 0.4972832202911377 0 1.0 0 0.0 0 0.0 0 0.0 1.4324073791503906 2.487499952316284 -0.0 0.49562060832977295 0.868495762348175 -0.0 0.5640665888786316 0.45991021394729614 0 1.0 0 0.0 0 0.0 0 0.0 1.5 2.4000000953674316 -0.0 0.8599810600280762 0.5102694630622864 -0.0 0.5653074383735657 0.44760727882385254 0 1.0 0 0.0 0 0.0 0 0.0 1.23929762840271 2.487499952316284 -0.7278751730918884 0.4297616481781006 0.8685262799263 -0.2468031793832779 0.6267805099487305 0.4972832202911377 0 1.0 0 0.0 0 0.0 0 0.0 1.1976406574249268 2.487499952316284 -0.7034087777137756 -0.6093020439147949 0.7112033367156982 0.3505661189556122 0.6259352564811707 0.4993526339530945 0 1.0 0 0.0 0 0.0 0 0.0 1.3842592239379883 2.487499952316284 -0.0 -0.7038483619689941 0.7103183269500732 -0.0 0.5638269186019897 0.46230220794677734 0 1.0 0 0.0 0 0.0 0 0.0 1.4324073791503906 2.487499952316284 -0.0 0.49562060832977295 0.868495762348175 -0.0 0.5640665888786316 0.45991021394729614 0 1.0 0 0.0 0 0.0 0 0.0 1.1976406574249268 2.487499952316284 -0.7034087777137756 -0.6093020439147949 0.7112033367156982 0.3505661189556122 0.6259352564811707 0.4993526339530945 0 1.0 0 0.0 0 0.0 0 0.0 1.2112592458724976 2.4000000953674316 -0.7114074230194092 -0.8527176976203918 -0.17761772871017456 0.491195410490036 0.6279190182685852 0.48933225870132446 0 1.0 0 0.0 0 0.0 0 0.0 1.399999976158142 2.4000000953674316 -0.0 -0.9841914176940918 -0.17703787982463837 -0.0 0.5648702383041382 0.451926052570343 0 1.0 0 0.0 0 0.0 0 0.0 1.3842592239379883 2.487499952316284 -0.0 -0.7038483619689941 0.7103183269500732 -0.0 0.5638269186019897 0.46230220794677734 0 1.0 0 0.0 0 0.0 0 0.0 0.7622222900390625 2.4000000953674316 -1.2977778911590576 0.4286935031414032 0.5113681554794312 -0.7447736859321594 0.6891228556632996 0.5420753359794617 0 1.0 0 0.0 0 0.0 0 0.0 0.7278752326965332 2.487499952316284 -1.23929762840271 0.2468031793832779 0.8685262799263 -0.4297616481781006 0.6851003170013428 0.5534005165100098 0 1.0 0 0.0 0 0.0 0 0.0 1.23929762840271 2.487499952316284 -0.7278751730918884 0.4297616481781006 0.8685262799263 -0.2468031793832779 0.6267805099487305 0.4972832202911377 0 1.0 0 0.0 0 0.0 0 0.0 1.297777771949768 2.4000000953674316 -0.7622222304344177 0.7447736859321594 0.5113681554794312 -0.4286935031414032 0.6295300722122192 0.48565661907196045 0 1.0 0 0.0 0 0.0 0 0.0 0.7278752326965332 2.487499952316284 -1.23929762840271 0.2468031793832779 0.8685262799263 -0.4297616481781006 0.6851003170013428 0.5534005165100098 0 1.0 0 0.0 0 0.0 0 0.0 0.7034087777137756 2.487499952316284 -1.1976406574249268 -0.3505661189556122 0.7112033367156982 0.6093020439147949 0.6837114095687866 0.5551795959472656 0 1.0 0 0.0 0 0.0 0 0.0 1.1976406574249268 2.487499952316284 -0.7034087777137756 -0.6093020439147949 0.7112033367156982 0.3505661189556122 0.6259352564811707 0.4993526339530945 0 1.0 0 0.0 0 0.0 0 0.0 1.23929762840271 2.487499952316284 -0.7278751730918884 0.4297616481781006 0.8685262799263 -0.2468031793832779 0.6267805099487305 0.4972832202911377 0 1.0 0 0.0 0 0.0 0 0.0 0.7034087777137756 2.487499952316284 -1.1976406574249268 -0.3505661189556122 0.7112033367156982 0.6093020439147949 0.6837114095687866 0.5551795959472656 0 1.0 0 0.0 0 0.0 0 0.0 0.7114074230194092 2.4000000953674316 -1.2112592458724976 -0.491195410490036 -0.17761772871017456 0.8527176976203918 0.6864795684814453 0.5451602935791016 0 1.0 0 0.0 0 0.0 0 0.0 1.2112592458724976 2.4000000953674316 -0.7114074230194092 -0.8527176976203918 -0.17761772871017456 0.491195410490036 0.6279190182685852 0.48933225870132446 0 1.0 0 0.0 0 0.0 0 0.0 1.1976406574249268 2.487499952316284 -0.7034087777137756 -0.6093020439147949 0.7112033367156982 0.3505661189556122 0.6259352564811707 0.4993526339530945 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.4000000953674316 -1.5 0.0 0.5102694630622864 -0.8599810600280762 0.7542129755020142 0.6169042587280273 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.487499952316284 -1.4324073791503906 0.0 0.868495762348175 -0.49562060832977295 0.7488337755203247 0.6288853883743286 0 1.0 0 0.0 0 0.0 0 0.0 0.7278752326965332 2.487499952316284 -1.23929762840271 0.2468031793832779 0.8685262799263 -0.4297616481781006 0.6851003170013428 0.5534005165100098 0 1.0 0 0.0 0 0.0 0 0.0 0.7622222900390625 2.4000000953674316 -1.2977778911590576 0.4286935031414032 0.5113681554794312 -0.7447736859321594 0.6891228556632996 0.5420753359794617 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.487499952316284 -1.4324073791503906 0.0 0.868495762348175 -0.49562060832977295 0.7488337755203247 0.6288853883743286 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.487499952316284 -1.3842592239379883 0.0 0.7103183269500732 0.7038483619689941 0.7468173503875732 0.6306852698326111 0 1.0 0 0.0 0 0.0 0 0.0 0.7034087777137756 2.487499952316284 -1.1976406574249268 -0.3505661189556122 0.7112033367156982 0.6093020439147949 0.6837114095687866 0.5551795959472656 0 1.0 0 0.0 0 0.0 0 0.0 0.7278752326965332 2.487499952316284 -1.23929762840271 0.2468031793832779 0.8685262799263 -0.4297616481781006 0.6851003170013428 0.5534005165100098 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.487499952316284 -1.3842592239379883 0.0 0.7103183269500732 0.7038483619689941 0.7468173503875732 0.6306852698326111 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.4000000953674316 -1.399999976158142 0.0 -0.17703787982463837 0.9841914176940918 0.7504168748855591 0.6200130581855774 0 1.0 0 0.0 0 0.0 0 0.0 0.7114074230194092 2.4000000953674316 -1.2112592458724976 -0.491195410490036 -0.17761772871017456 0.8527176976203918 0.6864795684814453 0.5451602935791016 0 1.0 0 0.0 0 0.0 0 0.0 0.7034087777137756 2.487499952316284 -1.1976406574249268 -0.3505661189556122 0.7112033367156982 0.6093020439147949 0.6837114095687866 0.5551795959472656 0 1.0 0 0.0 0 0.0 0 0.0 1.0162962675094604 0.8999999761581421 1.7303704023361206 0.49742117524147034 -0.08432263880968094 0.8633686304092407 0.40639829635620117 0.2969917058944702 0 1.0 0 0.0 0 0.0 0 0.0 0.9786556959152222 1.3722221851348877 1.6662826538085938 0.4834742248058319 0.24756614863872528 0.8395947217941284 0.4132171869277954 0.3386375904083252 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.3722221851348877 1.9259259700775146 0.0 0.2468642294406891 0.9690237045288086 0.33067935705184937 0.3847705125808716 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.8999999761581421 2.0 0.0 -0.08410900831222534 0.9964293241500854 0.31945714354515076 0.342856228351593 0 1.0 0 0.0 0 0.0 0 0.0 0.9786556959152222 1.3722221851348877 1.6662826538085938 0.4834742248058319 0.24756614863872528 0.8395947217941284 0.4132171869277954 0.3386375904083252 0 1.0 0 0.0 0 0.0 0 0.0 0.8845541477203369 1.8777778148651123 1.5060631036758423 0.461378812789917 0.3803216516971588 0.8015075922012329 0.42155009508132935 0.3886297345161438 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.8777778148651123 1.7407406568527222 0.0 0.3792840242385864 0.9252601861953735 0.34462296962738037 0.435282826423645 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.3722221851348877 1.9259259700775146 0.0 0.2468642294406891 0.9690237045288086 0.33067935705184937 0.3847705125808716 0 1.0 0 0.0 0 0.0 0 0.0 0.8845541477203369 1.8777778148651123 1.5060631036758423 0.461378812789917 0.3803216516971588 0.8015075922012329 0.42155009508132935 0.3886297345161438 0 1.0 0 0.0 0 0.0 0 0.0 0.7622222304344177 2.4000000953674316 1.297777771949768 0.4286935031414032 0.5113681554794312 0.7447736859321594 0.43147653341293335 0.45172613859176636 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.4000000953674316 1.5 0.0 0.5102694630622864 0.8599810600280762 0.36209404468536377 0.4997289776802063 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.8777778148651123 1.7407406568527222 0.0 0.3792840242385864 0.9252601861953735 0.34462296962738037 0.435282826423645 0 1.0 0 0.0 0 0.0 0 0.0 1.7303704023361206 0.8999999761581421 1.0162962675094604 0.8633686304092407 -0.08432263880968094 0.49742117524147034 0.49428650736808777 0.28271710872650146 0 1.0 0 0.0 0 0.0 0 0.0 1.6662826538085938 1.3722221851348877 0.9786556959152222 0.8395947217941284 0.24756614863872528 0.4834742248058319 0.4948292672634125 0.323957622051239 0 1.0 0 0.0 0 0.0 0 0.0 0.9786556959152222 1.3722221851348877 1.6662826538085938 0.4834742248058319 0.24756614863872528 0.8395947217941284 0.4132171869277954 0.3386375904083252 0 1.0 0 0.0 0 0.0 0 0.0 1.0162962675094604 0.8999999761581421 1.7303704023361206 0.49742117524147034 -0.08432263880968094 0.8633686304092407 0.40639829635620117 0.2969917058944702 0 1.0 0 0.0 0 0.0 0 0.0 1.6662826538085938 1.3722221851348877 0.9786556959152222 0.8395947217941284 0.24756614863872528 0.4834742248058319 0.4948292672634125 0.323957622051239 0 1.0 0 0.0 0 0.0 0 0.0 1.5060631036758423 1.8777776956558228 0.8845542669296265 0.8015075922012329 0.3803216516971588 0.461378812789917 0.49609825015068054 0.3733762502670288 0 1.0 0 0.0 0 0.0 0 0.0 0.8845541477203369 1.8777778148651123 1.5060631036758423 0.461378812789917 0.3803216516971588 0.8015075922012329 0.42155009508132935 0.3886297345161438 0 1.0 0 0.0 0 0.0 0 0.0 0.9786556959152222 1.3722221851348877 1.6662826538085938 0.4834742248058319 0.24756614863872528 0.8395947217941284 0.4132171869277954 0.3386375904083252 0 1.0 0 0.0 0 0.0 0 0.0 1.5060631036758423 1.8777776956558228 0.8845542669296265 0.8015075922012329 0.3803216516971588 0.461378812789917 0.49609825015068054 0.3733762502670288 0 1.0 0 0.0 0 0.0 0 0.0 1.2977778911590576 2.4000000953674316 0.7622222900390625 0.7447736859321594 0.5113681554794312 0.4286935031414032 0.4978336989879608 0.43523162603378296 0 1.0 0 0.0 0 0.0 0 0.0 0.7622222304344177 2.4000000953674316 1.297777771949768 0.4286935031414032 0.5113681554794312 0.7447736859321594 0.43147653341293335 0.45172613859176636 0 1.0 0 0.0 0 0.0 0 0.0 0.8845541477203369 1.8777778148651123 1.5060631036758423 0.461378812789917 0.3803216516971588 0.8015075922012329 0.42155009508132935 0.3886297345161438 0 1.0 0 0.0 0 0.0 0 0.0 2.0 0.8999999761581421 -0.0 0.9964293241500854 -0.08410900831222534 -0.0 0.5828353762626648 0.30102527141571045 0 1.0 0 0.0 0 0.0 0 0.0 1.9259259700775146 1.3722221851348877 -0.0 0.9690237045288086 0.2468642294406891 -0.0 0.5773130655288696 0.3406168222427368 0 1.0 0 0.0 0 0.0 0 0.0 1.6662826538085938 1.3722221851348877 0.9786556959152222 0.8395947217941284 0.24756614863872528 0.4834742248058319 0.4948292672634125 0.323957622051239 0 1.0 0 0.0 0 0.0 0 0.0 1.7303704023361206 0.8999999761581421 1.0162962675094604 0.8633686304092407 -0.08432263880968094 0.49742117524147034 0.49428650736808777 0.28271710872650146 0 1.0 0 0.0 0 0.0 0 0.0 1.9259259700775146 1.3722221851348877 -0.0 0.9690237045288086 0.2468642294406891 -0.0 0.5773130655288696 0.3406168222427368 0 1.0 0 0.0 0 0.0 0 0.0 1.7407406568527222 1.8777778148651123 -0.0 0.9252601861953735 0.3792840242385864 -0.0 0.5716165900230408 0.3881370425224304 0 1.0 0 0.0 0 0.0 0 0.0 1.5060631036758423 1.8777776956558228 0.8845542669296265 0.8015075922012329 0.3803216516971588 0.461378812789917 0.49609825015068054 0.3733762502670288 0 1.0 0 0.0 0 0.0 0 0.0 1.6662826538085938 1.3722221851348877 0.9786556959152222 0.8395947217941284 0.24756614863872528 0.4834742248058319 0.4948292672634125 0.323957622051239 0 1.0 0 0.0 0 0.0 0 0.0 1.7407406568527222 1.8777778148651123 -0.0 0.9252601861953735 0.3792840242385864 -0.0 0.5716165900230408 0.3881370425224304 0 1.0 0 0.0 0 0.0 0 0.0 1.5 2.4000000953674316 -0.0 0.8599810600280762 0.5102694630622864 -0.0 0.5653074383735657 0.44760727882385254 0 1.0 0 0.0 0 0.0 0 0.0 1.2977778911590576 2.4000000953674316 0.7622222900390625 0.7447736859321594 0.5113681554794312 0.4286935031414032 0.4978336989879608 0.43523162603378296 0 1.0 0 0.0 0 0.0 0 0.0 1.5060631036758423 1.8777776956558228 0.8845542669296265 0.8015075922012329 0.3803216516971588 0.461378812789917 0.49609825015068054 0.3733762502670288 0 1.0 0 0.0 0 0.0 0 0.0 -1.7303704023361206 0.8999999761581421 1.0162962675094604 -0.8633686304092407 -0.08432263880968094 0.49742117524147034 0.15623977780342102 0.4808504581451416 0 1.0 0 0.0 0 0.0 0 0.0 -1.6662826538085938 1.3722221851348877 0.9786556959152222 -0.8395947217941284 0.24756614863872528 0.4834742248058319 0.16763854026794434 0.5300626158714294 0 1.0 0 0.0 0 0.0 0 0.0 -1.9259259700775146 1.3722221851348877 -0.0 -0.9690237045288086 0.2468642294406891 -0.0 0.06937173008918762 0.5914106965065002 0 1.0 0 0.0 0 0.0 0 0.0 -2.0 0.8999999761581421 -0.0 -0.8215277791023254 0.5701162815093994 -0.0 0.06370410323143005 0.5364704132080078 0 1.0 0 0.0 0 0.0 0 0.0 -1.6662826538085938 1.3722221851348877 0.9786556959152222 -0.8395947217941284 0.24756614863872528 0.4834742248058319 0.16763854026794434 0.5300626158714294 0 1.0 0 0.0 0 0.0 0 0.0 -1.5060631036758423 1.8777778148651123 0.8845541477203369 -0.8015075922012329 0.3803216516971588 0.461378812789917 0.18382784724235535 0.5908814668655396 0 1.0 0 0.0 0 0.0 0 0.0 -1.7407406568527222 1.8777778148651123 -0.0 -0.9252601861953735 0.3792840242385864 -0.0 0.07755216956138611 0.6612304449081421 0 1.0 0 0.0 0 0.0 0 0.0 -1.9259259700775146 1.3722221851348877 -0.0 -0.9690237045288086 0.2468642294406891 -0.0 0.06937173008918762 0.5914106965065002 0 1.0 0 0.0 0 0.0 0 0.0 -1.5060631036758423 1.8777778148651123 0.8845541477203369 -0.8015075922012329 0.3803216516971588 0.461378812789917 0.18382784724235535 0.5908814668655396 0 1.0 0 0.0 0 0.0 0 0.0 -1.297777771949768 2.4000000953674316 0.7622222304344177 -0.7447736859321594 0.5113681554794312 0.4286935031414032 0.20935985445976257 0.6693832278251648 0 1.0 0 0.0 0 0.0 0 0.0 -1.5 2.4000000953674316 -0.0 -0.8599810600280762 0.5102694630622864 -0.0 0.09257018566131592 0.7542117834091187 0 1.0 0 0.0 0 0.0 0 0.0 -1.7407406568527222 1.8777778148651123 -0.0 -0.9252601861953735 0.3792840242385864 -0.0 0.07755216956138611 0.6612304449081421 0 1.0 0 0.0 0 0.0 0 0.0 -1.0162962675094604 0.8999999761581421 1.7303704023361206 -0.49742117524147034 -0.08432263880968094 0.8633686304092407 0.23712080717086792 0.41073405742645264 0 1.0 0 0.0 0 0.0 0 0.0 -0.9786556959152222 1.3722221851348877 1.6662826538085938 -0.4834742248058319 0.24756614863872528 0.8395947217941284 0.2498626410961151 0.4547853469848633 0 1.0 0 0.0 0 0.0 0 0.0 -1.6662826538085938 1.3722221851348877 0.9786556959152222 -0.8395947217941284 0.24756614863872528 0.4834742248058319 0.16763854026794434 0.5300626158714294 0 1.0 0 0.0 0 0.0 0 0.0 -1.7303704023361206 0.8999999761581421 1.0162962675094604 -0.8633686304092407 -0.08432263880968094 0.49742117524147034 0.15623977780342102 0.4808504581451416 0 1.0 0 0.0 0 0.0 0 0.0 -0.9786556959152222 1.3722221851348877 1.6662826538085938 -0.4834742248058319 0.24756614863872528 0.8395947217941284 0.2498626410961151 0.4547853469848633 0 1.0 0 0.0 0 0.0 0 0.0 -0.8845542669296265 1.8777776956558228 1.5060631036758423 -0.461378812789917 0.3803216516971588 0.8015075922012329 0.2666986286640167 0.508183479309082 0 1.0 0 0.0 0 0.0 0 0.0 -1.5060631036758423 1.8777778148651123 0.8845541477203369 -0.8015075922012329 0.3803216516971588 0.461378812789917 0.18382784724235535 0.5908814668655396 0 1.0 0 0.0 0 0.0 0 0.0 -1.6662826538085938 1.3722221851348877 0.9786556959152222 -0.8395947217941284 0.24756614863872528 0.4834742248058319 0.16763854026794434 0.5300626158714294 0 1.0 0 0.0 0 0.0 0 0.0 -0.8845542669296265 1.8777776956558228 1.5060631036758423 -0.461378812789917 0.3803216516971588 0.8015075922012329 0.2666986286640167 0.508183479309082 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222900390625 2.4000000953674316 1.2977778911590576 -0.4286935031414032 0.5113681554794312 0.7447736859321594 0.2899063229560852 0.5765905380249023 0 1.0 0 0.0 0 0.0 0 0.0 -1.297777771949768 2.4000000953674316 0.7622222304344177 -0.7447736859321594 0.5113681554794312 0.4286935031414032 0.20935985445976257 0.6693832278251648 0 1.0 0 0.0 0 0.0 0 0.0 -1.5060631036758423 1.8777778148651123 0.8845541477203369 -0.8015075922012329 0.3803216516971588 0.461378812789917 0.18382784724235535 0.5908814668655396 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.8999999761581421 2.0 0.0 -0.08410900831222534 0.9964293241500854 0.31945714354515076 0.342856228351593 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.3722221851348877 1.9259259700775146 0.0 0.2468642294406891 0.9690237045288086 0.33067935705184937 0.3847705125808716 0 1.0 0 0.0 0 0.0 0 0.0 -0.9786556959152222 1.3722221851348877 1.6662826538085938 -0.4834742248058319 0.24756614863872528 0.8395947217941284 0.2498626410961151 0.4547853469848633 0 1.0 0 0.0 0 0.0 0 0.0 -1.0162962675094604 0.8999999761581421 1.7303704023361206 -0.49742117524147034 -0.08432263880968094 0.8633686304092407 0.23712080717086792 0.41073405742645264 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.3722221851348877 1.9259259700775146 0.0 0.2468642294406891 0.9690237045288086 0.33067935705184937 0.3847705125808716 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.8777778148651123 1.7407406568527222 0.0 0.3792840242385864 0.9252601861953735 0.34462296962738037 0.435282826423645 0 1.0 0 0.0 0 0.0 0 0.0 -0.8845542669296265 1.8777776956558228 1.5060631036758423 -0.461378812789917 0.3803216516971588 0.8015075922012329 0.2666986286640167 0.508183479309082 0 1.0 0 0.0 0 0.0 0 0.0 -0.9786556959152222 1.3722221851348877 1.6662826538085938 -0.4834742248058319 0.24756614863872528 0.8395947217941284 0.2498626410961151 0.4547853469848633 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.8777778148651123 1.7407406568527222 0.0 0.3792840242385864 0.9252601861953735 0.34462296962738037 0.435282826423645 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.4000000953674316 1.5 0.0 0.5102694630622864 0.8599810600280762 0.36209404468536377 0.4997289776802063 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222900390625 2.4000000953674316 1.2977778911590576 -0.4286935031414032 0.5113681554794312 0.7447736859321594 0.2899063229560852 0.5765905380249023 0 1.0 0 0.0 0 0.0 0 0.0 -0.8845542669296265 1.8777776956558228 1.5060631036758423 -0.461378812789917 0.3803216516971588 0.8015075922012329 0.2666986286640167 0.508183479309082 0 1.0 0 0.0 0 0.0 0 0.0 -1.0162962675094604 0.8999999761581421 -1.7303704023361206 -0.49742117524147034 -0.08432263880968094 -0.8633686304092407 0.8801935911178589 0.5227434039115906 0 1.0 0 0.0 0 0.0 0 0.0 -0.9786556959152222 1.3722221851348877 -1.6662826538085938 -0.4834742248058319 0.24756614863872528 -0.8395947217941284 0.8712304830551147 0.5701385736465454 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.3722221851348877 -1.9259259700775146 0.0 0.2468642294406891 -0.9690237045288086 0.7908333539962769 0.5078861713409424 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.8999999761581421 -2.0 0.0 -0.08410900831222534 -0.9964293241500854 0.8017946481704712 0.4667319059371948 0 1.0 0 0.0 0 0.0 0 0.0 -0.9786556959152222 1.3722221851348877 -1.6662826538085938 -0.4834742248058319 0.24756614863872528 -0.8395947217941284 0.8712304830551147 0.5701385736465454 0 1.0 0 0.0 0 0.0 0 0.0 -0.8845541477203369 1.8777778148651123 -1.5060631036758423 -0.461378812789917 0.3803216516971588 -0.8015075922012329 0.8572931885719299 0.6273802518844604 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.8777778148651123 -1.7407406568527222 0.0 0.3792840242385864 -0.9252601861953735 0.7757281064987183 0.5565197467803955 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.3722221851348877 -1.9259259700775146 0.0 0.2468642294406891 -0.9690237045288086 0.7908333539962769 0.5078861713409424 0 1.0 0 0.0 0 0.0 0 0.0 -0.8845541477203369 1.8777778148651123 -1.5060631036758423 -0.461378812789917 0.3803216516971588 -0.8015075922012329 0.8572931885719299 0.6273802518844604 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222304344177 2.4000000953674316 -1.297777771949768 -0.4286935031414032 0.5113681554794312 -0.7447736859321594 0.8343170881271362 0.699485719203949 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.4000000953674316 -1.5 0.0 0.5102694630622864 -0.8599810600280762 0.7542129755020142 0.6169042587280273 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.8777778148651123 -1.7407406568527222 0.0 0.3792840242385864 -0.9252601861953735 0.7757281064987183 0.5565197467803955 0 1.0 0 0.0 0 0.0 0 0.0 -1.7303704023361206 0.8999999761581421 -1.0162962675094604 -0.8633686304092407 -0.08432263880968094 -0.49742117524147034 0.9665490388870239 0.5510944128036499 0 1.0 0 0.0 0 0.0 0 0.0 -1.6662826538085938 1.3722221851348877 -0.9786556959152222 -0.8395947217941284 0.24756614863872528 -0.4834742248058319 0.9633795022964478 0.6049708127975464 0 1.0 0 0.0 0 0.0 0 0.0 -0.9786556959152222 1.3722221851348877 -1.6662826538085938 -0.4834742248058319 0.24756614863872528 -0.8395947217941284 0.8712304830551147 0.5701385736465454 0 1.0 0 0.0 0 0.0 0 0.0 -1.0162962675094604 0.8999999761581421 -1.7303704023361206 -0.49742117524147034 -0.08432263880968094 -0.8633686304092407 0.8801935911178589 0.5227434039115906 0 1.0 0 0.0 0 0.0 0 0.0 -1.6662826538085938 1.3722221851348877 -0.9786556959152222 -0.8395947217941284 0.24756614863872528 -0.4834742248058319 0.9633795022964478 0.6049708127975464 0 1.0 0 0.0 0 0.0 0 0.0 -1.5060631036758423 1.8777776956558228 -0.8845542669296265 -0.8015075922012329 0.3803216516971588 -0.461378812789917 0.957268476486206 0.6726799011230469 0 1.0 0 0.0 0 0.0 0 0.0 -0.8845541477203369 1.8777778148651123 -1.5060631036758423 -0.461378812789917 0.3803216516971588 -0.8015075922012329 0.8572931885719299 0.6273802518844604 0 1.0 0 0.0 0 0.0 0 0.0 -0.9786556959152222 1.3722221851348877 -1.6662826538085938 -0.4834742248058319 0.24756614863872528 -0.8395947217941284 0.8712304830551147 0.5701385736465454 0 1.0 0 0.0 0 0.0 0 0.0 -1.5060631036758423 1.8777776956558228 -0.8845542669296265 -0.8015075922012329 0.3803216516971588 -0.461378812789917 0.957268476486206 0.6726799011230469 0 1.0 0 0.0 0 0.0 0 0.0 -1.2977778911590576 2.4000000953674316 -0.7622222900390625 -0.7447736859321594 0.5113681554794312 -0.4286935031414032 0.9449872970581055 0.762032687664032 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222304344177 2.4000000953674316 -1.297777771949768 -0.4286935031414032 0.5113681554794312 -0.7447736859321594 0.8343170881271362 0.699485719203949 0 1.0 0 0.0 0 0.0 0 0.0 -0.8845541477203369 1.8777778148651123 -1.5060631036758423 -0.461378812789917 0.3803216516971588 -0.8015075922012329 0.8572931885719299 0.6273802518844604 0 1.0 0 0.0 0 0.0 0 0.0 -2.0 0.8999999761581421 -0.0 -0.8215277791023254 0.5701162815093994 -0.0 1.0637041330337524 0.5364704132080078 0 1.0 0 0.0 0 0.0 0 0.0 -1.9259259700775146 1.3722221851348877 -0.0 -0.9690237045288086 0.2468642294406891 -0.0 1.0693717002868652 0.5914106965065002 0 1.0 0 0.0 0 0.0 0 0.0 -1.6662826538085938 1.3722221851348877 -0.9786556959152222 -0.8395947217941284 0.24756614863872528 -0.4834742248058319 0.9633795022964478 0.6049708127975464 0 1.0 0 0.0 0 0.0 0 0.0 -1.7303704023361206 0.8999999761581421 -1.0162962675094604 -0.8633686304092407 -0.08432263880968094 -0.49742117524147034 0.9665490388870239 0.5510944128036499 0 1.0 0 0.0 0 0.0 0 0.0 -1.9259259700775146 1.3722221851348877 -0.0 -0.9690237045288086 0.2468642294406891 -0.0 1.0693717002868652 0.5914106965065002 0 1.0 0 0.0 0 0.0 0 0.0 -1.7407406568527222 1.8777778148651123 -0.0 -0.9252601861953735 0.3792840242385864 -0.0 1.0775521993637085 0.6612304449081421 0 1.0 0 0.0 0 0.0 0 0.0 -1.5060631036758423 1.8777776956558228 -0.8845542669296265 -0.8015075922012329 0.3803216516971588 -0.461378812789917 0.957268476486206 0.6726799011230469 0 1.0 0 0.0 0 0.0 0 0.0 -1.6662826538085938 1.3722221851348877 -0.9786556959152222 -0.8395947217941284 0.24756614863872528 -0.4834742248058319 0.9633795022964478 0.6049708127975464 0 1.0 0 0.0 0 0.0 0 0.0 -1.7407406568527222 1.8777778148651123 -0.0 -0.9252601861953735 0.3792840242385864 -0.0 1.0775521993637085 0.6612304449081421 0 1.0 0 0.0 0 0.0 0 0.0 -1.5 2.4000000953674316 -0.0 -0.8599810600280762 0.5102694630622864 -0.0 1.092570185661316 0.7542117834091187 0 1.0 0 0.0 0 0.0 0 0.0 -1.2977778911590576 2.4000000953674316 -0.7622222900390625 -0.7447736859321594 0.5113681554794312 -0.4286935031414032 0.9449872970581055 0.762032687664032 0 1.0 0 0.0 0 0.0 0 0.0 -1.5060631036758423 1.8777776956558228 -0.8845542669296265 -0.8015075922012329 0.3803216516971588 -0.461378812789917 0.957268476486206 0.6726799011230469 0 1.0 0 0.0 0 0.0 0 0.0 1.7303704023361206 0.8999999761581421 -1.0162962675094604 0.8633686304092407 -0.08432263880968094 -0.49742117524147034 0.6618058681488037 0.34603065252304077 0 1.0 0 0.0 0 0.0 0 0.0 1.6662826538085938 1.3722221851348877 -0.9786556959152222 0.8395947217941284 0.24756614863872528 -0.4834742248058319 0.6526945233345032 0.38379746675491333 0 1.0 0 0.0 0 0.0 0 0.0 1.9259259700775146 1.3722221851348877 -0.0 0.9690237045288086 0.2468642294406891 -0.0 0.5773130655288696 0.3406168222427368 0 1.0 0 0.0 0 0.0 0 0.0 2.0 0.8999999761581421 -0.0 0.9964293241500854 -0.08410900831222534 -0.0 0.5828353762626648 0.30102527141571045 0 1.0 0 0.0 0 0.0 0 0.0 1.6662826538085938 1.3722221851348877 -0.9786556959152222 0.8395947217941284 0.24756614863872528 -0.4834742248058319 0.6526945233345032 0.38379746675491333 0 1.0 0 0.0 0 0.0 0 0.0 1.5060631036758423 1.8777778148651123 -0.8845541477203369 0.8015075922012329 0.3803216516971588 -0.461378812789917 0.6421607136726379 0.42898160219192505 0 1.0 0 0.0 0 0.0 0 0.0 1.7407406568527222 1.8777778148651123 -0.0 0.9252601861953735 0.3792840242385864 -0.0 0.5716165900230408 0.3881370425224304 0 1.0 0 0.0 0 0.0 0 0.0 1.9259259700775146 1.3722221851348877 -0.0 0.9690237045288086 0.2468642294406891 -0.0 0.5773130655288696 0.3406168222427368 0 1.0 0 0.0 0 0.0 0 0.0 1.5060631036758423 1.8777778148651123 -0.8845541477203369 0.8015075922012329 0.3803216516971588 -0.461378812789917 0.6421607136726379 0.42898160219192505 0 1.0 0 0.0 0 0.0 0 0.0 1.297777771949768 2.4000000953674316 -0.7622222304344177 0.7447736859321594 0.5113681554794312 -0.4286935031414032 0.6295300722122192 0.48565661907196045 0 1.0 0 0.0 0 0.0 0 0.0 1.5 2.4000000953674316 -0.0 0.8599810600280762 0.5102694630622864 -0.0 0.5653074383735657 0.44760727882385254 0 1.0 0 0.0 0 0.0 0 0.0 1.7407406568527222 1.8777778148651123 -0.0 0.9252601861953735 0.3792840242385864 -0.0 0.5716165900230408 0.3881370425224304 0 1.0 0 0.0 0 0.0 0 0.0 1.0162962675094604 0.8999999761581421 -1.7303704023361206 0.49742117524147034 -0.08432263880968094 -0.8633686304092407 0.7305766344070435 0.4031161665916443 0 1.0 0 0.0 0 0.0 0 0.0 0.9786556959152222 1.3722221851348877 -1.6662826538085938 0.4834742248058319 0.24756614863872528 -0.8395947217941284 0.7198944091796875 0.4410156011581421 0 1.0 0 0.0 0 0.0 0 0.0 1.6662826538085938 1.3722221851348877 -0.9786556959152222 0.8395947217941284 0.24756614863872528 -0.4834742248058319 0.6526945233345032 0.38379746675491333 0 1.0 0 0.0 0 0.0 0 0.0 1.7303704023361206 0.8999999761581421 -1.0162962675094604 0.8633686304092407 -0.08432263880968094 -0.49742117524147034 0.6618058681488037 0.34603065252304077 0 1.0 0 0.0 0 0.0 0 0.0 0.9786556959152222 1.3722221851348877 -1.6662826538085938 0.4834742248058319 0.24756614863872528 -0.8395947217941284 0.7198944091796875 0.4410156011581421 0 1.0 0 0.0 0 0.0 0 0.0 0.8845542669296265 1.8777776956558228 -1.5060631036758423 0.461378812789917 0.3803216516971588 -0.8015075922012329 0.7064718008041382 0.4859408140182495 0 1.0 0 0.0 0 0.0 0 0.0 1.5060631036758423 1.8777778148651123 -0.8845541477203369 0.8015075922012329 0.3803216516971588 -0.461378812789917 0.6421607136726379 0.42898160219192505 0 1.0 0 0.0 0 0.0 0 0.0 1.6662826538085938 1.3722221851348877 -0.9786556959152222 0.8395947217941284 0.24756614863872528 -0.4834742248058319 0.6526945233345032 0.38379746675491333 0 1.0 0 0.0 0 0.0 0 0.0 0.8845542669296265 1.8777776956558228 -1.5060631036758423 0.461378812789917 0.3803216516971588 -0.8015075922012329 0.7064718008041382 0.4859408140182495 0 1.0 0 0.0 0 0.0 0 0.0 0.7622222900390625 2.4000000953674316 -1.2977778911590576 0.4286935031414032 0.5113681554794312 -0.7447736859321594 0.6891228556632996 0.5420753359794617 0 1.0 0 0.0 0 0.0 0 0.0 1.297777771949768 2.4000000953674316 -0.7622222304344177 0.7447736859321594 0.5113681554794312 -0.4286935031414032 0.6295300722122192 0.48565661907196045 0 1.0 0 0.0 0 0.0 0 0.0 1.5060631036758423 1.8777778148651123 -0.8845541477203369 0.8015075922012329 0.3803216516971588 -0.461378812789917 0.6421607136726379 0.42898160219192505 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.8999999761581421 -2.0 0.0 -0.08410900831222534 -0.9964293241500854 0.8017946481704712 0.4667319059371948 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.3722221851348877 -1.9259259700775146 0.0 0.2468642294406891 -0.9690237045288086 0.7908333539962769 0.5078861713409424 0 1.0 0 0.0 0 0.0 0 0.0 0.9786556959152222 1.3722221851348877 -1.6662826538085938 0.4834742248058319 0.24756614863872528 -0.8395947217941284 0.7198944091796875 0.4410156011581421 0 1.0 0 0.0 0 0.0 0 0.0 1.0162962675094604 0.8999999761581421 -1.7303704023361206 0.49742117524147034 -0.08432263880968094 -0.8633686304092407 0.7305766344070435 0.4031161665916443 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.3722221851348877 -1.9259259700775146 0.0 0.2468642294406891 -0.9690237045288086 0.7908333539962769 0.5078861713409424 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.8777778148651123 -1.7407406568527222 0.0 0.3792840242385864 -0.9252601861953735 0.7757281064987183 0.5565197467803955 0 1.0 0 0.0 0 0.0 0 0.0 0.8845542669296265 1.8777776956558228 -1.5060631036758423 0.461378812789917 0.3803216516971588 -0.8015075922012329 0.7064718008041382 0.4859408140182495 0 1.0 0 0.0 0 0.0 0 0.0 0.9786556959152222 1.3722221851348877 -1.6662826538085938 0.4834742248058319 0.24756614863872528 -0.8395947217941284 0.7198944091796875 0.4410156011581421 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.8777778148651123 -1.7407406568527222 0.0 0.3792840242385864 -0.9252601861953735 0.7757281064987183 0.5565197467803955 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.4000000953674316 -1.5 0.0 0.5102694630622864 -0.8599810600280762 0.7542129755020142 0.6169042587280273 0 1.0 0 0.0 0 0.0 0 0.0 0.7622222900390625 2.4000000953674316 -1.2977778911590576 0.4286935031414032 0.5113681554794312 -0.7447736859321594 0.6891228556632996 0.5420753359794617 0 1.0 0 0.0 0 0.0 0 0.0 0.8845542669296265 1.8777776956558228 -1.5060631036758423 0.461378812789917 0.3803216516971588 -0.8015075922012329 0.7064718008041382 0.4859408140182495 0 1.0 0 0.0 0 0.0 0 0.0 0.7622222900390625 0.15000000596046448 1.2977778911590576 0.3505966365337372 -0.7111117839813232 0.6093935966491699 0.3956698775291443 0.19993311166763306 0 1.0 0 0.0 0 0.0 0 0.0 0.8280932903289795 0.277777761220932 1.4099314212799072 0.35239723324775696 -0.7075105905532837 0.6125370264053345 0.39810073375701904 0.2214469313621521 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.277777761220932 1.6296296119689941 0.0 -0.7063204050064087 0.7078462839126587 0.30315589904785156 0.2634827494621277 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.15000000596046448 1.5 0.0 -0.7099215388298035 0.7042451500892639 0.29800066351890564 0.24066346883773804 0 1.0 0 0.0 0 0.0 0 0.0 0.8280932903289795 0.277777761220932 1.4099314212799072 0.35239723324775696 -0.7075105905532837 0.6125370264053345 0.39810073375701904 0.2214469313621521 0 1.0 0 0.0 0 0.0 0 0.0 0.9504251480102539 0.5222222208976746 1.618216872215271 0.4287240207195282 -0.5114597082138062 0.7446821331977844 0.4015105068683624 0.2580564022064209 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.5222222208976746 1.8703705072402954 0.0 -0.5105746388435364 0.8597979545593262 0.31060802936553955 0.30255943536758423 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.277777761220932 1.6296296119689941 0.0 -0.7063204050064087 0.7078462839126587 0.30315589904785156 0.2634827494621277 0 1.0 0 0.0 0 0.0 0 0.0 0.9504251480102539 0.5222222208976746 1.618216872215271 0.4287240207195282 -0.5114597082138062 0.7446821331977844 0.4015105068683624 0.2580564022064209 0 1.0 0 0.0 0 0.0 0 0.0 1.0162962675094604 0.8999999761581421 1.7303704023361206 0.49742117524147034 -0.08432263880968094 0.8633686304092407 0.40639829635620117 0.2969917058944702 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.8999999761581421 2.0 0.0 -0.08410900831222534 0.9964293241500854 0.31945714354515076 0.342856228351593 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.5222222208976746 1.8703705072402954 0.0 -0.5105746388435364 0.8597979545593262 0.31060802936553955 0.30255943536758423 0 1.0 0 0.0 0 0.0 0 0.0 1.297777771949768 0.15000000596046448 0.7622222304344177 0.6093935966491699 -0.7111117839813232 0.3505966365337372 0.49929916858673096 0.19021719694137573 0 1.0 0 0.0 0 0.0 0 0.0 1.4099314212799072 0.277777761220932 0.828093409538269 0.6125370264053345 -0.7075105905532837 0.35239723324775696 0.49755406379699707 0.21050095558166504 0 1.0 0 0.0 0 0.0 0 0.0 0.8280932903289795 0.277777761220932 1.4099314212799072 0.35239723324775696 -0.7075105905532837 0.6125370264053345 0.39810073375701904 0.2214469313621521 0 1.0 0 0.0 0 0.0 0 0.0 0.7622222900390625 0.15000000596046448 1.2977778911590576 0.3505966365337372 -0.7111117839813232 0.6093935966491699 0.3956698775291443 0.19993311166763306 0 1.0 0 0.0 0 0.0 0 0.0 1.4099314212799072 0.277777761220932 0.828093409538269 0.6125370264053345 -0.7075105905532837 0.35239723324775696 0.49755406379699707 0.21050095558166504 0 1.0 0 0.0 0 0.0 0 0.0 1.618216872215271 0.5222222208976746 0.9504252076148987 0.7446821331977844 -0.5114597082138062 0.4287240207195282 0.4951971769332886 0.24500828981399536 0 1.0 0 0.0 0 0.0 0 0.0 0.9504251480102539 0.5222222208976746 1.618216872215271 0.4287240207195282 -0.5114597082138062 0.7446821331977844 0.4015105068683624 0.2580564022064209 0 1.0 0 0.0 0 0.0 0 0.0 0.8280932903289795 0.277777761220932 1.4099314212799072 0.35239723324775696 -0.7075105905532837 0.6125370264053345 0.39810073375701904 0.2214469313621521 0 1.0 0 0.0 0 0.0 0 0.0 1.618216872215271 0.5222222208976746 0.9504252076148987 0.7446821331977844 -0.5114597082138062 0.4287240207195282 0.4951971769332886 0.24500828981399536 0 1.0 0 0.0 0 0.0 0 0.0 1.7303704023361206 0.8999999761581421 1.0162962675094604 0.8633686304092407 -0.08432263880968094 0.49742117524147034 0.49428650736808777 0.28271710872650146 0 1.0 0 0.0 0 0.0 0 0.0 1.0162962675094604 0.8999999761581421 1.7303704023361206 0.49742117524147034 -0.08432263880968094 0.8633686304092407 0.40639829635620117 0.2969917058944702 0 1.0 0 0.0 0 0.0 0 0.0 0.9504251480102539 0.5222222208976746 1.618216872215271 0.4287240207195282 -0.5114597082138062 0.7446821331977844 0.4015105068683624 0.2580564022064209 0 1.0 0 0.0 0 0.0 0 0.0 1.5 0.15000000596046448 -0.0 0.7042451500892639 -0.7099215388298035 -0.0 0.600112795829773 0.21345442533493042 0 1.0 0 0.0 0 0.0 0 0.0 1.6296296119689941 0.277777761220932 -0.0 0.7078462839126587 -0.7063204050064087 -0.0 0.5954587459564209 0.23246979713439941 0 1.0 0 0.0 0 0.0 0 0.0 1.4099314212799072 0.277777761220932 0.828093409538269 0.6125370264053345 -0.7075105905532837 0.35239723324775696 0.49755406379699707 0.21050095558166504 0 1.0 0 0.0 0 0.0 0 0.0 1.297777771949768 0.15000000596046448 0.7622222304344177 0.6093935966491699 -0.7111117839813232 0.3505966365337372 0.49929916858673096 0.19021719694137573 0 1.0 0 0.0 0 0.0 0 0.0 1.6296296119689941 0.277777761220932 -0.0 0.7078462839126587 -0.7063204050064087 -0.0 0.5954587459564209 0.23246979713439941 0 1.0 0 0.0 0 0.0 0 0.0 1.8703705072402954 0.5222222208976746 -0.0 0.8597979545593262 -0.5105746388435364 -0.0 0.5888184905052185 0.26505810022354126 0 1.0 0 0.0 0 0.0 0 0.0 1.618216872215271 0.5222222208976746 0.9504252076148987 0.7446821331977844 -0.5114597082138062 0.4287240207195282 0.4951971769332886 0.24500828981399536 0 1.0 0 0.0 0 0.0 0 0.0 1.4099314212799072 0.277777761220932 0.828093409538269 0.6125370264053345 -0.7075105905532837 0.35239723324775696 0.49755406379699707 0.21050095558166504 0 1.0 0 0.0 0 0.0 0 0.0 1.8703705072402954 0.5222222208976746 -0.0 0.8597979545593262 -0.5105746388435364 -0.0 0.5888184905052185 0.26505810022354126 0 1.0 0 0.0 0 0.0 0 0.0 2.0 0.8999999761581421 -0.0 0.9964293241500854 -0.08410900831222534 -0.0 0.5828353762626648 0.30102527141571045 0 1.0 0 0.0 0 0.0 0 0.0 1.7303704023361206 0.8999999761581421 1.0162962675094604 0.8633686304092407 -0.08432263880968094 0.49742117524147034 0.49428650736808777 0.28271710872650146 0 1.0 0 0.0 0 0.0 0 0.0 1.618216872215271 0.5222222208976746 0.9504252076148987 0.7446821331977844 -0.5114597082138062 0.4287240207195282 0.4951971769332886 0.24500828981399536 0 1.0 0 0.0 0 0.0 0 0.0 -1.2977778911590576 0.15000000596046448 0.7622222900390625 -0.6093935966491699 -0.7111117839813232 0.3505966365337372 0.13414856791496277 0.35897499322891235 0 1.0 0 0.0 0 0.0 0 0.0 -1.4099314212799072 0.277777761220932 0.8280932903289795 -0.6125370264053345 -0.7075105905532837 0.35239723324775696 0.13922429084777832 0.3864933252334595 0 1.0 0 0.0 0 0.0 0 0.0 -1.6296296119689941 0.277777761220932 -0.0 -0.7078462839126587 -0.7063204050064087 -0.0 0.053547054529190063 0.4346669912338257 0 1.0 0 0.0 0 0.0 0 0.0 -1.5 0.15000000596046448 -0.0 -0.7042451500892639 -0.7099215388298035 -0.0 0.05043032765388489 0.4051086902618408 0 1.0 0 0.0 0 0.0 0 0.0 -1.4099314212799072 0.277777761220932 0.8280932903289795 -0.6125370264053345 -0.7075105905532837 0.35239723324775696 0.13922429084777832 0.3864933252334595 0 1.0 0 0.0 0 0.0 0 0.0 -1.618216872215271 0.5222222208976746 0.9504251480102539 -0.7446821331977844 -0.5114597082138062 0.4287240207195282 0.14721912145614624 0.4334830045700073 0 1.0 0 0.0 0 0.0 0 0.0 -1.8703705072402954 0.5222222208976746 -0.0 -0.8597979545593262 -0.5105746388435364 -0.0 0.05861186981201172 0.48504698276519775 0 1.0 0 0.0 0 0.0 0 0.0 -1.6296296119689941 0.277777761220932 -0.0 -0.7078462839126587 -0.7063204050064087 -0.0 0.053547054529190063 0.4346669912338257 0 1.0 0 0.0 0 0.0 0 0.0 -1.618216872215271 0.5222222208976746 0.9504251480102539 -0.7446821331977844 -0.5114597082138062 0.4287240207195282 0.14721912145614624 0.4334830045700073 0 1.0 0 0.0 0 0.0 0 0.0 -1.7303704023361206 0.8999999761581421 1.0162962675094604 -0.8633686304092407 -0.08432263880968094 0.49742117524147034 0.15623977780342102 0.4808504581451416 0 1.0 0 0.0 0 0.0 0 0.0 -2.0 0.8999999761581421 -0.0 -0.8215277791023254 0.5701162815093994 -0.0 0.06370410323143005 0.5364704132080078 0 1.0 0 0.0 0 0.0 0 0.0 -1.8703705072402954 0.5222222208976746 -0.0 -0.8597979545593262 -0.5105746388435364 -0.0 0.05861186981201172 0.48504698276519775 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222900390625 0.15000000596046448 1.2977778911590576 -0.3505966365337372 -0.7111117839813232 0.6093935966491699 0.21255284547805786 0.3001919388771057 0 1.0 0 0.0 0 0.0 0 0.0 -0.828093409538269 0.277777761220932 1.4099314212799072 -0.35239723324775696 -0.7075105905532837 0.6125370264053345 0.2183249592781067 0.32508355379104614 0 1.0 0 0.0 0 0.0 0 0.0 -1.4099314212799072 0.277777761220932 0.8280932903289795 -0.6125370264053345 -0.7075105905532837 0.35239723324775696 0.13922429084777832 0.3864933252334595 0 1.0 0 0.0 0 0.0 0 0.0 -1.2977778911590576 0.15000000596046448 0.7622222900390625 -0.6093935966491699 -0.7111117839813232 0.3505966365337372 0.13414856791496277 0.35897499322891235 0 1.0 0 0.0 0 0.0 0 0.0 -0.828093409538269 0.277777761220932 1.4099314212799072 -0.35239723324775696 -0.7075105905532837 0.6125370264053345 0.2183249592781067 0.32508355379104614 0 1.0 0 0.0 0 0.0 0 0.0 -0.9504252076148987 0.5222222208976746 1.618216872215271 -0.4287240207195282 -0.5114597082138062 0.7446821331977844 0.22705289721488953 0.3677188754081726 0 1.0 0 0.0 0 0.0 0 0.0 -1.618216872215271 0.5222222208976746 0.9504251480102539 -0.7446821331977844 -0.5114597082138062 0.4287240207195282 0.14721912145614624 0.4334830045700073 0 1.0 0 0.0 0 0.0 0 0.0 -1.4099314212799072 0.277777761220932 0.8280932903289795 -0.6125370264053345 -0.7075105905532837 0.35239723324775696 0.13922429084777832 0.3864933252334595 0 1.0 0 0.0 0 0.0 0 0.0 -0.9504252076148987 0.5222222208976746 1.618216872215271 -0.4287240207195282 -0.5114597082138062 0.7446821331977844 0.22705289721488953 0.3677188754081726 0 1.0 0 0.0 0 0.0 0 0.0 -1.0162962675094604 0.8999999761581421 1.7303704023361206 -0.49742117524147034 -0.08432263880968094 0.8633686304092407 0.23712080717086792 0.41073405742645264 0 1.0 0 0.0 0 0.0 0 0.0 -1.7303704023361206 0.8999999761581421 1.0162962675094604 -0.8633686304092407 -0.08432263880968094 0.49742117524147034 0.15623977780342102 0.4808504581451416 0 1.0 0 0.0 0 0.0 0 0.0 -1.618216872215271 0.5222222208976746 0.9504251480102539 -0.7446821331977844 -0.5114597082138062 0.4287240207195282 0.14721912145614624 0.4334830045700073 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.15000000596046448 1.5 0.0 -0.7099215388298035 0.7042451500892639 0.29800066351890564 0.24066346883773804 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.277777761220932 1.6296296119689941 0.0 -0.7063204050064087 0.7078462839126587 0.30315589904785156 0.2634827494621277 0 1.0 0 0.0 0 0.0 0 0.0 -0.828093409538269 0.277777761220932 1.4099314212799072 -0.35239723324775696 -0.7075105905532837 0.6125370264053345 0.2183249592781067 0.32508355379104614 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222900390625 0.15000000596046448 1.2977778911590576 -0.3505966365337372 -0.7111117839813232 0.6093935966491699 0.21255284547805786 0.3001919388771057 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.277777761220932 1.6296296119689941 0.0 -0.7063204050064087 0.7078462839126587 0.30315589904785156 0.2634827494621277 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.5222222208976746 1.8703705072402954 0.0 -0.5105746388435364 0.8597979545593262 0.31060802936553955 0.30255943536758423 0 1.0 0 0.0 0 0.0 0 0.0 -0.9504252076148987 0.5222222208976746 1.618216872215271 -0.4287240207195282 -0.5114597082138062 0.7446821331977844 0.22705289721488953 0.3677188754081726 0 1.0 0 0.0 0 0.0 0 0.0 -0.828093409538269 0.277777761220932 1.4099314212799072 -0.35239723324775696 -0.7075105905532837 0.6125370264053345 0.2183249592781067 0.32508355379104614 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.5222222208976746 1.8703705072402954 0.0 -0.5105746388435364 0.8597979545593262 0.31060802936553955 0.30255943536758423 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.8999999761581421 2.0 0.0 -0.08410900831222534 0.9964293241500854 0.31945714354515076 0.342856228351593 0 1.0 0 0.0 0 0.0 0 0.0 -1.0162962675094604 0.8999999761581421 1.7303704023361206 -0.49742117524147034 -0.08432263880968094 0.8633686304092407 0.23712080717086792 0.41073405742645264 0 1.0 0 0.0 0 0.0 0 0.0 -0.9504252076148987 0.5222222208976746 1.618216872215271 -0.4287240207195282 -0.5114597082138062 0.7446821331977844 0.22705289721488953 0.3677188754081726 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222900390625 0.15000000596046448 -1.2977778911590576 -0.3505966365337372 -0.7111117839813232 -0.6093935966491699 0.8909897804260254 0.40578246116638184 0 1.0 0 0.0 0 0.0 0 0.0 -0.8280932903289795 0.277777761220932 -1.4099314212799072 -0.35239723324775696 -0.7075105905532837 -0.6125370264053345 0.8889819979667664 0.4321751594543457 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.277777761220932 -1.6296296119689941 0.0 -0.7063204050064087 -0.7078462839126587 0.8155300617218018 0.3874537944793701 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.15000000596046448 -1.5 0.0 -0.7099215388298035 -0.7042451500892639 0.8191912174224854 0.3644620180130005 0 1.0 0 0.0 0 0.0 0 0.0 -0.8280932903289795 0.277777761220932 -1.4099314212799072 -0.35239723324775696 -0.7075105905532837 -0.6125370264053345 0.8889819979667664 0.4321751594543457 0 1.0 0 0.0 0 0.0 0 0.0 -0.9504251480102539 0.5222222208976746 -1.618216872215271 -0.4287240207195282 -0.5114597082138062 -0.7446821331977844 0.8856533765792847 0.47703999280929565 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.5222222208976746 -1.8703705072402954 0.0 -0.5105746388435364 -0.8597979545593262 0.8096545934677124 0.4266200661659241 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.277777761220932 -1.6296296119689941 0.0 -0.7063204050064087 -0.7078462839126587 0.8155300617218018 0.3874537944793701 0 1.0 0 0.0 0 0.0 0 0.0 -0.9504251480102539 0.5222222208976746 -1.618216872215271 -0.4287240207195282 -0.5114597082138062 -0.7446821331977844 0.8856533765792847 0.47703999280929565 0 1.0 0 0.0 0 0.0 0 0.0 -1.0162962675094604 0.8999999761581421 -1.7303704023361206 -0.49742117524147034 -0.08432263880968094 -0.8633686304092407 0.8801935911178589 0.5227434039115906 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.8999999761581421 -2.0 0.0 -0.08410900831222534 -0.9964293241500854 0.8017946481704712 0.4667319059371948 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.5222222208976746 -1.8703705072402954 0.0 -0.5105746388435364 -0.8597979545593262 0.8096545934677124 0.4266200661659241 0 1.0 0 0.0 0 0.0 0 0.0 -1.2977778911590576 0.15000000596046448 -0.7622222900390625 -0.6093935966491699 -0.7111117839813232 -0.3505966365337372 0.9665573835372925 0.4220300316810608 0 1.0 0 0.0 0 0.0 0 0.0 -1.4099314212799072 0.277777761220932 -0.828093409538269 -0.6125370264053345 -0.7075105905532837 -0.35239723324775696 0.9669049978256226 0.4510842561721802 0 1.0 0 0.0 0 0.0 0 0.0 -0.8280932903289795 0.277777761220932 -1.4099314212799072 -0.35239723324775696 -0.7075105905532837 -0.6125370264053345 0.8889819979667664 0.4321751594543457 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222900390625 0.15000000596046448 -1.2977778911590576 -0.3505966365337372 -0.7111117839813232 -0.6093935966491699 0.8909897804260254 0.40578246116638184 0 1.0 0 0.0 0 0.0 0 0.0 -1.4099314212799072 0.277777761220932 -0.828093409538269 -0.6125370264053345 -0.7075105905532837 -0.35239723324775696 0.9669049978256226 0.4510842561721802 0 1.0 0 0.0 0 0.0 0 0.0 -1.618216872215271 0.5222222208976746 -0.9504252076148987 -0.7446821331977844 -0.5114597082138062 -0.4287240207195282 0.9674350023269653 0.5005022287368774 0 1.0 0 0.0 0 0.0 0 0.0 -0.9504251480102539 0.5222222208976746 -1.618216872215271 -0.4287240207195282 -0.5114597082138062 -0.7446821331977844 0.8856533765792847 0.47703999280929565 0 1.0 0 0.0 0 0.0 0 0.0 -0.8280932903289795 0.277777761220932 -1.4099314212799072 -0.35239723324775696 -0.7075105905532837 -0.6125370264053345 0.8889819979667664 0.4321751594543457 0 1.0 0 0.0 0 0.0 0 0.0 -1.618216872215271 0.5222222208976746 -0.9504252076148987 -0.7446821331977844 -0.5114597082138062 -0.4287240207195282 0.9674350023269653 0.5005022287368774 0 1.0 0 0.0 0 0.0 0 0.0 -1.7303704023361206 0.8999999761581421 -1.0162962675094604 -0.8633686304092407 -0.08432263880968094 -0.49742117524147034 0.9665490388870239 0.5510944128036499 0 1.0 0 0.0 0 0.0 0 0.0 -1.0162962675094604 0.8999999761581421 -1.7303704023361206 -0.49742117524147034 -0.08432263880968094 -0.8633686304092407 0.8801935911178589 0.5227434039115906 0 1.0 0 0.0 0 0.0 0 0.0 -0.9504251480102539 0.5222222208976746 -1.618216872215271 -0.4287240207195282 -0.5114597082138062 -0.7446821331977844 0.8856533765792847 0.47703999280929565 0 1.0 0 0.0 0 0.0 0 0.0 -1.5 0.15000000596046448 -0.0 -0.7042451500892639 -0.7099215388298035 -0.0 1.0504302978515625 0.4051086902618408 0 1.0 0 0.0 0 0.0 0 0.0 -1.6296296119689941 0.277777761220932 -0.0 -0.7078462839126587 -0.7063204050064087 -0.0 1.0535470247268677 0.4346669912338257 0 1.0 0 0.0 0 0.0 0 0.0 -1.4099314212799072 0.277777761220932 -0.828093409538269 -0.6125370264053345 -0.7075105905532837 -0.35239723324775696 0.9669049978256226 0.4510842561721802 0 1.0 0 0.0 0 0.0 0 0.0 -1.2977778911590576 0.15000000596046448 -0.7622222900390625 -0.6093935966491699 -0.7111117839813232 -0.3505966365337372 0.9665573835372925 0.4220300316810608 0 1.0 0 0.0 0 0.0 0 0.0 -1.6296296119689941 0.277777761220932 -0.0 -0.7078462839126587 -0.7063204050064087 -0.0 1.0535470247268677 0.4346669912338257 0 1.0 0 0.0 0 0.0 0 0.0 -1.8703705072402954 0.5222222208976746 -0.0 -0.8597979545593262 -0.5105746388435364 -0.0 1.0586118698120117 0.48504698276519775 0 1.0 0 0.0 0 0.0 0 0.0 -1.618216872215271 0.5222222208976746 -0.9504252076148987 -0.7446821331977844 -0.5114597082138062 -0.4287240207195282 0.9674350023269653 0.5005022287368774 0 1.0 0 0.0 0 0.0 0 0.0 -1.4099314212799072 0.277777761220932 -0.828093409538269 -0.6125370264053345 -0.7075105905532837 -0.35239723324775696 0.9669049978256226 0.4510842561721802 0 1.0 0 0.0 0 0.0 0 0.0 -1.8703705072402954 0.5222222208976746 -0.0 -0.8597979545593262 -0.5105746388435364 -0.0 1.0586118698120117 0.48504698276519775 0 1.0 0 0.0 0 0.0 0 0.0 -2.0 0.8999999761581421 -0.0 -0.8215277791023254 0.5701162815093994 -0.0 1.0637041330337524 0.5364704132080078 0 1.0 0 0.0 0 0.0 0 0.0 -1.7303704023361206 0.8999999761581421 -1.0162962675094604 -0.8633686304092407 -0.08432263880968094 -0.49742117524147034 0.9665490388870239 0.5510944128036499 0 1.0 0 0.0 0 0.0 0 0.0 -1.618216872215271 0.5222222208976746 -0.9504252076148987 -0.7446821331977844 -0.5114597082138062 -0.4287240207195282 0.9674350023269653 0.5005022287368774 0 1.0 0 0.0 0 0.0 0 0.0 1.297777771949768 0.15000000596046448 -0.7622222304344177 0.6093935966491699 -0.7111117839813232 -0.3505966365337372 0.6829252243041992 0.25979578495025635 0 1.0 0 0.0 0 0.0 0 0.0 1.4099314212799072 0.277777761220932 -0.8280932903289795 0.6125370264053345 -0.7075105905532837 -0.35239723324775696 0.6777608394622803 0.27866190671920776 0 1.0 0 0.0 0 0.0 0 0.0 1.6296296119689941 0.277777761220932 -0.0 0.7078462839126587 -0.7063204050064087 -0.0 0.5954587459564209 0.23246979713439941 0 1.0 0 0.0 0 0.0 0 0.0 1.5 0.15000000596046448 -0.0 0.7042451500892639 -0.7099215388298035 -0.0 0.600112795829773 0.21345442533493042 0 1.0 0 0.0 0 0.0 0 0.0 1.4099314212799072 0.277777761220932 -0.8280932903289795 0.6125370264053345 -0.7075105905532837 -0.35239723324775696 0.6777608394622803 0.27866190671920776 0 1.0 0 0.0 0 0.0 0 0.0 1.618216872215271 0.5222222208976746 -0.9504251480102539 0.7446821331977844 -0.5114597082138062 -0.4287240207195282 0.6700261831283569 0.3110303282737732 0 1.0 0 0.0 0 0.0 0 0.0 1.8703705072402954 0.5222222208976746 -0.0 0.8597979545593262 -0.5105746388435364 -0.0 0.5888184905052185 0.26505810022354126 0 1.0 0 0.0 0 0.0 0 0.0 1.6296296119689941 0.277777761220932 -0.0 0.7078462839126587 -0.7063204050064087 -0.0 0.5954587459564209 0.23246979713439941 0 1.0 0 0.0 0 0.0 0 0.0 1.618216872215271 0.5222222208976746 -0.9504251480102539 0.7446821331977844 -0.5114597082138062 -0.4287240207195282 0.6700261831283569 0.3110303282737732 0 1.0 0 0.0 0 0.0 0 0.0 1.7303704023361206 0.8999999761581421 -1.0162962675094604 0.8633686304092407 -0.08432263880968094 -0.49742117524147034 0.6618058681488037 0.34603065252304077 0 1.0 0 0.0 0 0.0 0 0.0 2.0 0.8999999761581421 -0.0 0.9964293241500854 -0.08410900831222534 -0.0 0.5828353762626648 0.30102527141571045 0 1.0 0 0.0 0 0.0 0 0.0 1.8703705072402954 0.5222222208976746 -0.0 0.8597979545593262 -0.5105746388435364 -0.0 0.5888184905052185 0.26505810022354126 0 1.0 0 0.0 0 0.0 0 0.0 0.7622222304344177 0.15000000596046448 -1.297777771949768 0.3505966365337372 -0.7111117839813232 -0.6093935966491699 0.7510849833488464 0.31206804513931274 0 1.0 0 0.0 0 0.0 0 0.0 0.828093409538269 0.277777761220932 -1.4099314212799072 0.35239723324775696 -0.7075105905532837 -0.6125370264053345 0.7464216947555542 0.33229804039001465 0 1.0 0 0.0 0 0.0 0 0.0 1.4099314212799072 0.277777761220932 -0.8280932903289795 0.6125370264053345 -0.7075105905532837 -0.35239723324775696 0.6777608394622803 0.27866190671920776 0 1.0 0 0.0 0 0.0 0 0.0 1.297777771949768 0.15000000596046448 -0.7622222304344177 0.6093935966491699 -0.7111117839813232 -0.3505966365337372 0.6829252243041992 0.25979578495025635 0 1.0 0 0.0 0 0.0 0 0.0 0.828093409538269 0.277777761220932 -1.4099314212799072 0.35239723324775696 -0.7075105905532837 -0.6125370264053345 0.7464216947555542 0.33229804039001465 0 1.0 0 0.0 0 0.0 0 0.0 0.9504252076148987 0.5222222208976746 -1.618216872215271 0.4287240207195282 -0.5114597082138062 -0.7446821331977844 0.7391786575317383 0.3668786883354187 0 1.0 0 0.0 0 0.0 0 0.0 1.618216872215271 0.5222222208976746 -0.9504251480102539 0.7446821331977844 -0.5114597082138062 -0.4287240207195282 0.6700261831283569 0.3110303282737732 0 1.0 0 0.0 0 0.0 0 0.0 1.4099314212799072 0.277777761220932 -0.8280932903289795 0.6125370264053345 -0.7075105905532837 -0.35239723324775696 0.6777608394622803 0.27866190671920776 0 1.0 0 0.0 0 0.0 0 0.0 0.9504252076148987 0.5222222208976746 -1.618216872215271 0.4287240207195282 -0.5114597082138062 -0.7446821331977844 0.7391786575317383 0.3668786883354187 0 1.0 0 0.0 0 0.0 0 0.0 1.0162962675094604 0.8999999761581421 -1.7303704023361206 0.49742117524147034 -0.08432263880968094 -0.8633686304092407 0.7305766344070435 0.4031161665916443 0 1.0 0 0.0 0 0.0 0 0.0 1.7303704023361206 0.8999999761581421 -1.0162962675094604 0.8633686304092407 -0.08432263880968094 -0.49742117524147034 0.6618058681488037 0.34603065252304077 0 1.0 0 0.0 0 0.0 0 0.0 1.618216872215271 0.5222222208976746 -0.9504251480102539 0.7446821331977844 -0.5114597082138062 -0.4287240207195282 0.6700261831283569 0.3110303282737732 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.15000000596046448 -1.5 0.0 -0.7099215388298035 -0.7042451500892639 0.8191912174224854 0.3644620180130005 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.277777761220932 -1.6296296119689941 0.0 -0.7063204050064087 -0.7078462839126587 0.8155300617218018 0.3874537944793701 0 1.0 0 0.0 0 0.0 0 0.0 0.828093409538269 0.277777761220932 -1.4099314212799072 0.35239723324775696 -0.7075105905532837 -0.6125370264053345 0.7464216947555542 0.33229804039001465 0 1.0 0 0.0 0 0.0 0 0.0 0.7622222304344177 0.15000000596046448 -1.297777771949768 0.3505966365337372 -0.7111117839813232 -0.6093935966491699 0.7510849833488464 0.31206804513931274 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.277777761220932 -1.6296296119689941 0.0 -0.7063204050064087 -0.7078462839126587 0.8155300617218018 0.3874537944793701 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.5222222208976746 -1.8703705072402954 0.0 -0.5105746388435364 -0.8597979545593262 0.8096545934677124 0.4266200661659241 0 1.0 0 0.0 0 0.0 0 0.0 0.9504252076148987 0.5222222208976746 -1.618216872215271 0.4287240207195282 -0.5114597082138062 -0.7446821331977844 0.7391786575317383 0.3668786883354187 0 1.0 0 0.0 0 0.0 0 0.0 0.828093409538269 0.277777761220932 -1.4099314212799072 0.35239723324775696 -0.7075105905532837 -0.6125370264053345 0.7464216947555542 0.33229804039001465 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.5222222208976746 -1.8703705072402954 0.0 -0.5105746388435364 -0.8597979545593262 0.8096545934677124 0.4266200661659241 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.8999999761581421 -2.0 0.0 -0.08410900831222534 -0.9964293241500854 0.8017946481704712 0.4667319059371948 0 1.0 0 0.0 0 0.0 0 0.0 1.0162962675094604 0.8999999761581421 -1.7303704023361206 0.49742117524147034 -0.08432263880968094 -0.8633686304092407 0.7305766344070435 0.4031161665916443 0 1.0 0 0.0 0 0.0 0 0.0 0.9504252076148987 0.5222222208976746 -1.618216872215271 0.4287240207195282 -0.5114597082138062 -0.7446821331977844 0.7391786575317383 0.3668786883354187 0 1.0 0 0.0 0 0.0 0 0.0 -2.922222137451172 1.7999999523162842 0.20000001788139343 -0.6368907690048218 0.08239997923374176 0.766533374786377 0.08831456303596497 0.6356658935546875 0 1.0 0 0.0 0 0.0 0 0.0 -2.765157699584961 2.0756173133850098 0.20000001788139343 -0.37638476490974426 0.5426496267318726 0.7508773803710938 0.09265154600143433 0.6591348648071289 0 1.0 0 0.0 0 0.0 0 0.0 -2.8333334922790527 2.116666555404663 -0.0 -0.6290169954299927 0.7773674726486206 -0.0 0.07844218611717224 0.6680006980895996 0 1.0 0 0.0 0 0.0 0 0.0 -3.0 1.7999999523162842 -0.0 -0.9941404461860657 0.10788293182849884 -0.0 0.07502612471580505 0.6411035060882568 0 1.0 0 0.0 0 0.0 0 0.0 -2.765157699584961 2.0756173133850098 0.20000001788139343 -0.37638476490974426 0.5426496267318726 0.7508773803710938 0.09265154600143433 0.6591348648071289 0 1.0 0 0.0 0 0.0 0 0.0 -2.297805070877075 2.1771607398986816 0.20000003278255463 -0.06952116638422012 0.6189764142036438 0.7822809815406799 0.09902966022491455 0.6757197380065918 0 1.0 0 0.0 0 0.0 0 0.0 -2.3333334922790527 2.2333333492279053 -0.0 -0.12900173664093018 0.9916379451751709 -0.0 0.0813392698764801 0.6888784170150757 0 1.0 0 0.0 0 0.0 0 0.0 -2.8333334922790527 2.116666555404663 -0.0 -0.6290169954299927 0.7773674726486206 -0.0 0.07844218611717224 0.6680006980895996 0 1.0 0 0.0 0 0.0 0 0.0 -2.297805070877075 2.1771607398986816 0.20000003278255463 -0.06952116638422012 0.6189764142036438 0.7822809815406799 0.09902966022491455 0.6757197380065918 0 1.0 0 0.0 0 0.0 0 0.0 -1.525925874710083 2.191666841506958 0.20000001788139343 -0.013855403289198875 0.713858425617218 0.7000945806503296 0.11728531122207642 0.7034443616867065 0 1.0 0 0.0 0 0.0 0 0.0 -1.5 2.25 -0.0 -0.019409772008657455 0.999786376953125 -0.0 0.0880691409111023 0.730804443359375 0 1.0 0 0.0 0 0.0 0 0.0 -2.3333334922790527 2.2333333492279053 -0.0 -0.12900173664093018 0.9916379451751709 -0.0 0.0813392698764801 0.6888784170150757 0 1.0 0 0.0 0 0.0 0 0.0 -2.777777910232544 1.7999999523162842 0.20000001788139343 0.4293344020843506 -0.07803583145141602 0.8997467160224915 0.08917427062988281 0.6358761787414551 0 1.0 0 0.0 0 0.0 0 0.0 -2.6385462284088135 1.999382734298706 0.20000001788139343 0.25894954800605774 -0.3909115791320801 0.8832361698150635 0.09269976615905762 0.6538515686988831 0 1.0 0 0.0 0 0.0 0 0.0 -2.765157699584961 2.0756173133850098 0.20000001788139343 -0.37638476490974426 0.5426496267318726 0.7508773803710938 0.09265154600143433 0.6591348648071289 0 1.0 0 0.0 0 0.0 0 0.0 -2.922222137451172 1.7999999523162842 0.20000001788139343 -0.6368907690048218 0.08239997923374176 0.766533374786377 0.08831456303596497 0.6356658935546875 0 1.0 0 0.0 0 0.0 0 0.0 -2.6385462284088135 1.999382734298706 0.20000001788139343 0.25894954800605774 -0.3909115791320801 0.8832361698150635 0.09269976615905762 0.6538515686988831 0 1.0 0 0.0 0 0.0 0 0.0 -2.2318246364593506 2.0728392601013184 0.20000003278255463 0.05697805806994438 -0.5788445472717285 0.8134098052978516 0.0981336236000061 0.666175127029419 0 1.0 0 0.0 0 0.0 0 0.0 -2.297805070877075 2.1771607398986816 0.20000003278255463 -0.06952116638422012 0.6189764142036438 0.7822809815406799 0.09902966022491455 0.6757197380065918 0 1.0 0 0.0 0 0.0 0 0.0 -2.765157699584961 2.0756173133850098 0.20000001788139343 -0.37638476490974426 0.5426496267318726 0.7508773803710938 0.09265154600143433 0.6591348648071289 0 1.0 0 0.0 0 0.0 0 0.0 -2.2318246364593506 2.0728392601013184 0.20000003278255463 0.05697805806994438 -0.5788445472717285 0.8134098052978516 0.0981336236000061 0.666175127029419 0 1.0 0 0.0 0 0.0 0 0.0 -1.574074149131775 2.0833332538604736 0.20000001788139343 0.007477034814655781 -0.4998321533203125 0.8660542368888855 0.11214965581893921 0.6843823194503784 0 1.0 0 0.0 0 0.0 0 0.0 -1.525925874710083 2.191666841506958 0.20000001788139343 -0.013855403289198875 0.713858425617218 0.7000945806503296 0.11728531122207642 0.7034443616867065 0 1.0 0 0.0 0 0.0 0 0.0 -2.297805070877075 2.1771607398986816 0.20000003278255463 -0.06952116638422012 0.6189764142036438 0.7822809815406799 0.09902966022491455 0.6757197380065918 0 1.0 0 0.0 0 0.0 0 0.0 -2.700000047683716 1.7999999523162842 -0.0 0.9759209156036377 -0.21799370646476746 -0.0 0.07517382502555847 0.642316997051239 0 1.0 0 0.0 0 0.0 0 0.0 -2.5703704357147217 1.9583333730697632 -0.0 0.48161259293556213 -0.8763695359230042 -0.0 0.0770927369594574 0.6576699018478394 0 1.0 0 0.0 0 0.0 0 0.0 -2.6385462284088135 1.999382734298706 0.20000001788139343 0.25894954800605774 -0.3909115791320801 0.8832361698150635 0.09269976615905762 0.6538515686988831 0 1.0 0 0.0 0 0.0 0 0.0 -2.777777910232544 1.7999999523162842 0.20000001788139343 0.4293344020843506 -0.07803583145141602 0.8997467160224915 0.08917427062988281 0.6358761787414551 0 1.0 0 0.0 0 0.0 0 0.0 -2.5703704357147217 1.9583333730697632 -0.0 0.48161259293556213 -0.8763695359230042 -0.0 0.0770927369594574 0.6576699018478394 0 1.0 0 0.0 0 0.0 0 0.0 -2.196296215057373 2.0166666507720947 -0.0 0.08404797315597534 -0.9964598417282104 -0.0 0.07862633466720581 0.6693804264068604 0 1.0 0 0.0 0 0.0 0 0.0 -2.2318246364593506 2.0728392601013184 0.20000003278255463 0.05697805806994438 -0.5788445472717285 0.8134098052978516 0.0981336236000061 0.666175127029419 0 1.0 0 0.0 0 0.0 0 0.0 -2.6385462284088135 1.999382734298706 0.20000001788139343 0.25894954800605774 -0.3909115791320801 0.8832361698150635 0.09269976615905762 0.6538515686988831 0 1.0 0 0.0 0 0.0 0 0.0 -2.196296215057373 2.0166666507720947 -0.0 0.08404797315597534 -0.9964598417282104 -0.0 0.07862633466720581 0.6693804264068604 0 1.0 0 0.0 0 0.0 0 0.0 -1.600000023841858 2.0250000953674316 -0.0 0.014984588138759136 -0.9998779296875 -0.0 0.08127009868621826 0.6884005069732666 0 1.0 0 0.0 0 0.0 0 0.0 -1.574074149131775 2.0833332538604736 0.20000001788139343 0.007477034814655781 -0.4998321533203125 0.8660542368888855 0.11214965581893921 0.6843823194503784 0 1.0 0 0.0 0 0.0 0 0.0 -2.2318246364593506 2.0728392601013184 0.20000003278255463 0.05697805806994438 -0.5788445472717285 0.8134098052978516 0.0981336236000061 0.666175127029419 0 1.0 0 0.0 0 0.0 0 0.0 -2.777777910232544 1.7999999523162842 -0.20000001788139343 0.4293344020843506 -0.07803583145141602 -0.8997467160224915 0.06085139513015747 0.6470903158187866 0 1.0 0 0.0 0 0.0 0 0.0 -2.6385462284088135 1.9993828535079956 -0.20000001788139343 0.25894954800605774 -0.3909115791320801 -0.8832361698150635 0.06191146373748779 0.6660564541816711 0 1.0 0 0.0 0 0.0 0 0.0 -2.5703704357147217 1.9583333730697632 -0.0 0.48161259293556213 -0.8763695359230042 -0.0 0.0770927369594574 0.6576699018478394 0 1.0 0 0.0 0 0.0 0 0.0 -2.700000047683716 1.7999999523162842 -0.0 0.9759209156036377 -0.21799370646476746 -0.0 0.07517382502555847 0.642316997051239 0 1.0 0 0.0 0 0.0 0 0.0 -2.6385462284088135 1.9993828535079956 -0.20000001788139343 0.25894954800605774 -0.3909115791320801 -0.8832361698150635 0.06191146373748779 0.6660564541816711 0 1.0 0 0.0 0 0.0 0 0.0 -2.2318246364593506 2.0728397369384766 -0.20000003278255463 0.05697805806994438 -0.5788445472717285 -0.8134098052978516 0.060018301010131836 0.6812902688980103 0 1.0 0 0.0 0 0.0 0 0.0 -2.196296215057373 2.0166666507720947 -0.0 0.08404797315597534 -0.9964598417282104 -0.0 0.07862633466720581 0.6693804264068604 0 1.0 0 0.0 0 0.0 0 0.0 -2.5703704357147217 1.9583333730697632 -0.0 0.48161259293556213 -0.8763695359230042 -0.0 0.0770927369594574 0.6576699018478394 0 1.0 0 0.0 0 0.0 0 0.0 -2.2318246364593506 2.0728397369384766 -0.20000003278255463 0.05697805806994438 -0.5788445472717285 -0.8134098052978516 0.060018301010131836 0.6812902688980103 0 1.0 0 0.0 0 0.0 0 0.0 -1.574074149131775 2.0833334922790527 -0.20000001788139343 0.007477034814655781 -0.4998321533203125 -0.8660542368888855 0.051914602518081665 0.7082343697547913 0 1.0 0 0.0 0 0.0 0 0.0 -1.600000023841858 2.0250000953674316 -0.0 0.014984588138759136 -0.9998779296875 -0.0 0.08127009868621826 0.6884005069732666 0 1.0 0 0.0 0 0.0 0 0.0 -2.196296215057373 2.0166666507720947 -0.0 0.08404797315597534 -0.9964598417282104 -0.0 0.07862633466720581 0.6693804264068604 0 1.0 0 0.0 0 0.0 0 0.0 -2.922222137451172 1.7999999523162842 -0.20000001788139343 -0.6368907690048218 0.08239997923374176 -0.766533374786377 0.061596453189849854 0.6462458372116089 0 1.0 0 0.0 0 0.0 0 0.0 -2.765157699584961 2.0756173133850098 -0.20000001788139343 -0.37638476490974426 0.5426496267318726 -0.7508773803710938 0.06327471137046814 0.6707873344421387 0 1.0 0 0.0 0 0.0 0 0.0 -2.6385462284088135 1.9993828535079956 -0.20000001788139343 0.25894954800605774 -0.3909115791320801 -0.8832361698150635 0.06191146373748779 0.6660564541816711 0 1.0 0 0.0 0 0.0 0 0.0 -2.777777910232544 1.7999999523162842 -0.20000001788139343 0.4293344020843506 -0.07803583145141602 -0.8997467160224915 0.06085139513015747 0.6470903158187866 0 1.0 0 0.0 0 0.0 0 0.0 -2.765157699584961 2.0756173133850098 -0.20000001788139343 -0.37638476490974426 0.5426496267318726 -0.7508773803710938 0.06327471137046814 0.6707873344421387 0 1.0 0 0.0 0 0.0 0 0.0 -2.297805070877075 2.1771607398986816 -0.20000003278255463 -0.06952116638422012 0.6189764142036438 -0.7822809815406799 0.06172066926956177 0.6905316710472107 0 1.0 0 0.0 0 0.0 0 0.0 -2.2318246364593506 2.0728397369384766 -0.20000003278255463 0.05697805806994438 -0.5788445472717285 -0.8134098052978516 0.060018301010131836 0.6812902688980103 0 1.0 0 0.0 0 0.0 0 0.0 -2.6385462284088135 1.9993828535079956 -0.20000001788139343 0.25894954800605774 -0.3909115791320801 -0.8832361698150635 0.06191146373748779 0.6660564541816711 0 1.0 0 0.0 0 0.0 0 0.0 -2.297805070877075 2.1771607398986816 -0.20000003278255463 -0.06952116638422012 0.6189764142036438 -0.7822809815406799 0.06172066926956177 0.6905316710472107 0 1.0 0 0.0 0 0.0 0 0.0 -1.5259259939193726 2.191666841506958 -0.20000001788139343 -0.013855403289198875 0.713858425617218 -0.7000945806503296 0.0527951717376709 0.7290288209915161 0 1.0 0 0.0 0 0.0 0 0.0 -1.574074149131775 2.0833334922790527 -0.20000001788139343 0.007477034814655781 -0.4998321533203125 -0.8660542368888855 0.051914602518081665 0.7082343697547913 0 1.0 0 0.0 0 0.0 0 0.0 -2.2318246364593506 2.0728397369384766 -0.20000003278255463 0.05697805806994438 -0.5788445472717285 -0.8134098052978516 0.060018301010131836 0.6812902688980103 0 1.0 0 0.0 0 0.0 0 0.0 -3.0 1.7999999523162842 -0.0 -0.9941404461860657 0.10788293182849884 -0.0 0.07502612471580505 0.6411035060882568 0 1.0 0 0.0 0 0.0 0 0.0 -2.8333334922790527 2.116666555404663 -0.0 -0.6290169954299927 0.7773674726486206 -0.0 0.07844218611717224 0.6680006980895996 0 1.0 0 0.0 0 0.0 0 0.0 -2.765157699584961 2.0756173133850098 -0.20000001788139343 -0.37638476490974426 0.5426496267318726 -0.7508773803710938 0.06327471137046814 0.6707873344421387 0 1.0 0 0.0 0 0.0 0 0.0 -2.922222137451172 1.7999999523162842 -0.20000001788139343 -0.6368907690048218 0.08239997923374176 -0.766533374786377 0.061596453189849854 0.6462458372116089 0 1.0 0 0.0 0 0.0 0 0.0 -2.8333334922790527 2.116666555404663 -0.0 -0.6290169954299927 0.7773674726486206 -0.0 0.07844218611717224 0.6680006980895996 0 1.0 0 0.0 0 0.0 0 0.0 -2.3333334922790527 2.2333333492279053 -0.0 -0.12900173664093018 0.9916379451751709 -0.0 0.0813392698764801 0.6888784170150757 0 1.0 0 0.0 0 0.0 0 0.0 -2.297805070877075 2.1771607398986816 -0.20000003278255463 -0.06952116638422012 0.6189764142036438 -0.7822809815406799 0.06172066926956177 0.6905316710472107 0 1.0 0 0.0 0 0.0 0 0.0 -2.765157699584961 2.0756173133850098 -0.20000001788139343 -0.37638476490974426 0.5426496267318726 -0.7508773803710938 0.06327471137046814 0.6707873344421387 0 1.0 0 0.0 0 0.0 0 0.0 -2.3333334922790527 2.2333333492279053 -0.0 -0.12900173664093018 0.9916379451751709 -0.0 0.0813392698764801 0.6888784170150757 0 1.0 0 0.0 0 0.0 0 0.0 -1.5 2.25 -0.0 -0.019409772008657455 0.999786376953125 -0.0 0.0880691409111023 0.730804443359375 0 1.0 0 0.0 0 0.0 0 0.0 -1.5259259939193726 2.191666841506958 -0.20000001788139343 -0.013855403289198875 0.713858425617218 -0.7000945806503296 0.0527951717376709 0.7290288209915161 0 1.0 0 0.0 0 0.0 0 0.0 -2.297805070877075 2.1771607398986816 -0.20000003278255463 -0.06952116638422012 0.6189764142036438 -0.7822809815406799 0.06172066926956177 0.6905316710472107 0 1.0 0 0.0 0 0.0 0 0.0 -1.9259259700775146 0.6777777671813965 0.20000001788139343 -0.4204840362071991 -0.7075716257095337 0.5678884387016296 0.07891842722892761 0.49934256076812744 0 1.0 0 0.0 0 0.0 0 0.0 -2.4887518882751465 1.0187243223190308 0.20000001788139343 -0.40256965160369873 -0.47849971055984497 0.7803277969360352 0.08147895336151123 0.5622939467430115 0 1.0 0 0.0 0 0.0 0 0.0 -2.5185186862945557 0.9611110687255859 -0.0 -0.6335337162017822 -0.773674726486206 -0.0 0.06648120284080505 0.5638844966888428 0 1.0 0 0.0 0 0.0 0 0.0 -1.899999976158142 0.6000000238418579 -0.0 -0.5108798742294312 -0.8596453666687012 -0.0 0.05969014763832092 0.49596208333969116 0 1.0 0 0.0 0 0.0 0 0.0 -2.4887518882751465 1.0187243223190308 0.20000001788139343 -0.40256965160369873 -0.47849971055984497 0.7803277969360352 0.08147895336151123 0.5622939467430115 0 1.0 0 0.0 0 0.0 0 0.0 -2.8161864280700684 1.4034979343414307 0.20000003278255463 -0.5496993660926819 -0.2930082082748413 0.7822504043579102 0.08450451493263245 0.6028463840484619 0 1.0 0 0.0 0 0.0 0 0.0 -2.881481647491455 1.3638889789581299 -0.0 -0.8798180818557739 -0.4752342402935028 -0.0 0.07094472646713257 0.6058355569839478 0 1.0 0 0.0 0 0.0 0 0.0 -2.5185186862945557 0.9611110687255859 -0.0 -0.6335337162017822 -0.773674726486206 -0.0 0.06648120284080505 0.5638844966888428 0 1.0 0 0.0 0 0.0 0 0.0 -2.8161864280700684 1.4034979343414307 0.20000003278255463 -0.5496993660926819 -0.2930082082748413 0.7822504043579102 0.08450451493263245 0.6028463840484619 0 1.0 0 0.0 0 0.0 0 0.0 -2.922222137451172 1.7999999523162842 0.20000001788139343 -0.6368907690048218 0.08239997923374176 0.766533374786377 0.08831456303596497 0.6356658935546875 0 1.0 0 0.0 0 0.0 0 0.0 -3.0 1.7999999523162842 -0.0 -0.9941404461860657 0.10788293182849884 -0.0 0.07502612471580505 0.6411035060882568 0 1.0 0 0.0 0 0.0 0 0.0 -2.881481647491455 1.3638889789581299 -0.0 -0.8798180818557739 -0.4752342402935028 -0.0 0.07094472646713257 0.6058355569839478 0 1.0 0 0.0 0 0.0 0 0.0 -1.974074125289917 0.8222221732139587 0.20000001788139343 0.2228156328201294 0.32773828506469727 0.9180883169174194 0.08077448606491089 0.5187610983848572 0 1.0 0 0.0 0 0.0 0 0.0 -2.4334707260131836 1.1257201433181763 0.20000001788139343 0.37754449248313904 0.39448225498199463 0.8377330899238586 0.08292484283447266 0.5706835985183716 0 1.0 0 0.0 0 0.0 0 0.0 -2.4887518882751465 1.0187243223190308 0.20000001788139343 -0.40256965160369873 -0.47849971055984497 0.7803277969360352 0.08147895336151123 0.5622939467430115 0 1.0 0 0.0 0 0.0 0 0.0 -1.9259259700775146 0.6777777671813965 0.20000001788139343 -0.4204840362071991 -0.7075716257095337 0.5678884387016296 0.07891842722892761 0.49934256076812744 0 1.0 0 0.0 0 0.0 0 0.0 -2.4334707260131836 1.1257201433181763 0.20000001788139343 0.37754449248313904 0.39448225498199463 0.8377330899238586 0.08292484283447266 0.5706835985183716 0 1.0 0 0.0 0 0.0 0 0.0 -2.694924831390381 1.477057695388794 0.20000003278255463 0.4742576479911804 0.2224189043045044 0.8518021106719971 0.08586803078651428 0.6077741980552673 0 1.0 0 0.0 0 0.0 0 0.0 -2.8161864280700684 1.4034979343414307 0.20000003278255463 -0.5496993660926819 -0.2930082082748413 0.7822504043579102 0.08450451493263245 0.6028463840484619 0 1.0 0 0.0 0 0.0 0 0.0 -2.4887518882751465 1.0187243223190308 0.20000001788139343 -0.40256965160369873 -0.47849971055984497 0.7803277969360352 0.08147895336151123 0.5622939467430115 0 1.0 0 0.0 0 0.0 0 0.0 -2.694924831390381 1.477057695388794 0.20000003278255463 0.4742576479911804 0.2224189043045044 0.8518021106719971 0.08586803078651428 0.6077741980552673 0 1.0 0 0.0 0 0.0 0 0.0 -2.777777910232544 1.7999999523162842 0.20000001788139343 0.4293344020843506 -0.07803583145141602 0.8997467160224915 0.08917427062988281 0.6358761787414551 0 1.0 0 0.0 0 0.0 0 0.0 -2.922222137451172 1.7999999523162842 0.20000001788139343 -0.6368907690048218 0.08239997923374176 0.766533374786377 0.08831456303596497 0.6356658935546875 0 1.0 0 0.0 0 0.0 0 0.0 -2.8161864280700684 1.4034979343414307 0.20000003278255463 -0.5496993660926819 -0.2930082082748413 0.7822504043579102 0.08450451493263245 0.6028463840484619 0 1.0 0 0.0 0 0.0 0 0.0 -2.0 0.8999999761581421 -0.0 -0.8215277791023254 0.5701162815093994 -0.0 0.06370410323143005 0.5364704132080078 0 1.0 0 0.0 0 0.0 0 0.0 -2.4037036895751953 1.183333396911621 -0.0 0.7060151696205139 0.7081820368766785 -0.0 0.06835782527923584 0.5818953514099121 0 1.0 0 0.0 0 0.0 0 0.0 -2.4334707260131836 1.1257201433181763 0.20000001788139343 0.37754449248313904 0.39448225498199463 0.8377330899238586 0.08292484283447266 0.5706835985183716 0 1.0 0 0.0 0 0.0 0 0.0 -1.974074125289917 0.8222221732139587 0.20000001788139343 0.2228156328201294 0.32773828506469727 0.9180883169174194 0.08077448606491089 0.5187610983848572 0 1.0 0 0.0 0 0.0 0 0.0 -2.4037036895751953 1.183333396911621 -0.0 0.7060151696205139 0.7081820368766785 -0.0 0.06835782527923584 0.5818953514099121 0 1.0 0 0.0 0 0.0 0 0.0 -2.629629611968994 1.5166666507720947 -0.0 0.9093295335769653 0.41602832078933716 -0.0 0.07218089699745178 0.616860032081604 0 1.0 0 0.0 0 0.0 0 0.0 -2.694924831390381 1.477057695388794 0.20000003278255463 0.4742576479911804 0.2224189043045044 0.8518021106719971 0.08586803078651428 0.6077741980552673 0 1.0 0 0.0 0 0.0 0 0.0 -2.4334707260131836 1.1257201433181763 0.20000001788139343 0.37754449248313904 0.39448225498199463 0.8377330899238586 0.08292484283447266 0.5706835985183716 0 1.0 0 0.0 0 0.0 0 0.0 -2.629629611968994 1.5166666507720947 -0.0 0.9093295335769653 0.41602832078933716 -0.0 0.07218089699745178 0.616860032081604 0 1.0 0 0.0 0 0.0 0 0.0 -2.700000047683716 1.7999999523162842 -0.0 0.9759209156036377 -0.21799370646476746 -0.0 0.07517382502555847 0.642316997051239 0 1.0 0 0.0 0 0.0 0 0.0 -2.777777910232544 1.7999999523162842 0.20000001788139343 0.4293344020843506 -0.07803583145141602 0.8997467160224915 0.08917427062988281 0.6358761787414551 0 1.0 0 0.0 0 0.0 0 0.0 -2.694924831390381 1.477057695388794 0.20000003278255463 0.4742576479911804 0.2224189043045044 0.8518021106719971 0.08586803078651428 0.6077741980552673 0 1.0 0 0.0 0 0.0 0 0.0 -1.974074125289917 0.8222222328186035 -0.20000001788139343 0.2228156328201294 0.32773828506469727 -0.9180883169174194 0.04449453949928284 0.5330513715744019 0 1.0 0 0.0 0 0.0 0 0.0 -2.4334707260131836 1.1257202625274658 -0.20000001788139343 0.37754449248313904 0.39448225498199463 -0.8377330899238586 0.05261978507041931 0.5826413035392761 0 1.0 0 0.0 0 0.0 0 0.0 -2.4037036895751953 1.183333396911621 -0.0 0.7060151696205139 0.7081820368766785 -0.0 0.06835782527923584 0.5818953514099121 0 1.0 0 0.0 0 0.0 0 0.0 -2.0 0.8999999761581421 -0.0 -0.8215277791023254 0.5701162815093994 -0.0 0.06370410323143005 0.5364704132080078 0 1.0 0 0.0 0 0.0 0 0.0 -2.4334707260131836 1.1257202625274658 -0.20000001788139343 0.37754449248313904 0.39448225498199463 -0.8377330899238586 0.05261978507041931 0.5826413035392761 0 1.0 0 0.0 0 0.0 0 0.0 -2.694924831390381 1.477057695388794 -0.20000003278255463 0.4742576479911804 0.2224189043045044 -0.8518021106719971 0.057609379291534424 0.6189436912536621 0 1.0 0 0.0 0 0.0 0 0.0 -2.629629611968994 1.5166666507720947 -0.0 0.9093295335769653 0.41602832078933716 -0.0 0.07218089699745178 0.616860032081604 0 1.0 0 0.0 0 0.0 0 0.0 -2.4037036895751953 1.183333396911621 -0.0 0.7060151696205139 0.7081820368766785 -0.0 0.06835782527923584 0.5818953514099121 0 1.0 0 0.0 0 0.0 0 0.0 -2.694924831390381 1.477057695388794 -0.20000003278255463 0.4742576479911804 0.2224189043045044 -0.8518021106719971 0.057609379291534424 0.6189436912536621 0 1.0 0 0.0 0 0.0 0 0.0 -2.777777910232544 1.7999999523162842 -0.20000001788139343 0.4293344020843506 -0.07803583145141602 -0.8997467160224915 0.06085139513015747 0.6470903158187866 0 1.0 0 0.0 0 0.0 0 0.0 -2.700000047683716 1.7999999523162842 -0.0 0.9759209156036377 -0.21799370646476746 -0.0 0.07517382502555847 0.642316997051239 0 1.0 0 0.0 0 0.0 0 0.0 -2.629629611968994 1.5166666507720947 -0.0 0.9093295335769653 0.41602832078933716 -0.0 0.07218089699745178 0.616860032081604 0 1.0 0 0.0 0 0.0 0 0.0 -1.925925850868225 0.6777777671813965 -0.20000001788139343 -0.4204840362071991 -0.7075716257095337 -0.5678884387016296 0.04253512620925903 0.5136716365814209 0 1.0 0 0.0 0 0.0 0 0.0 -2.4887516498565674 1.0187243223190308 -0.20000001788139343 -0.40256965160369873 -0.47849971055984497 -0.7803277969360352 0.05228587985038757 0.5738112926483154 0 1.0 0 0.0 0 0.0 0 0.0 -2.4334707260131836 1.1257202625274658 -0.20000001788139343 0.37754449248313904 0.39448225498199463 -0.8377330899238586 0.05261978507041931 0.5826413035392761 0 1.0 0 0.0 0 0.0 0 0.0 -1.974074125289917 0.8222222328186035 -0.20000001788139343 0.2228156328201294 0.32773828506469727 -0.9180883169174194 0.04449453949928284 0.5330513715744019 0 1.0 0 0.0 0 0.0 0 0.0 -2.4887516498565674 1.0187243223190308 -0.20000001788139343 -0.40256965160369873 -0.47849971055984497 -0.7803277969360352 0.05228587985038757 0.5738112926483154 0 1.0 0 0.0 0 0.0 0 0.0 -2.8161864280700684 1.4034978151321411 -0.20000003278255463 -0.5496993660926819 -0.2930082082748413 -0.7822504043579102 0.057814061641693115 0.6133949160575867 0 1.0 0 0.0 0 0.0 0 0.0 -2.694924831390381 1.477057695388794 -0.20000003278255463 0.4742576479911804 0.2224189043045044 -0.8518021106719971 0.057609379291534424 0.6189436912536621 0 1.0 0 0.0 0 0.0 0 0.0 -2.4334707260131836 1.1257202625274658 -0.20000001788139343 0.37754449248313904 0.39448225498199463 -0.8377330899238586 0.05261978507041931 0.5826413035392761 0 1.0 0 0.0 0 0.0 0 0.0 -2.8161864280700684 1.4034978151321411 -0.20000003278255463 -0.5496993660926819 -0.2930082082748413 -0.7822504043579102 0.057814061641693115 0.6133949160575867 0 1.0 0 0.0 0 0.0 0 0.0 -2.922222137451172 1.7999999523162842 -0.20000001788139343 -0.6368907690048218 0.08239997923374176 -0.766533374786377 0.061596453189849854 0.6462458372116089 0 1.0 0 0.0 0 0.0 0 0.0 -2.777777910232544 1.7999999523162842 -0.20000001788139343 0.4293344020843506 -0.07803583145141602 -0.8997467160224915 0.06085139513015747 0.6470903158187866 0 1.0 0 0.0 0 0.0 0 0.0 -2.694924831390381 1.477057695388794 -0.20000003278255463 0.4742576479911804 0.2224189043045044 -0.8518021106719971 0.057609379291534424 0.6189436912536621 0 1.0 0 0.0 0 0.0 0 0.0 -1.899999976158142 0.6000000238418579 -0.0 -0.5108798742294312 -0.8596453666687012 -0.0 0.05969014763832092 0.49596208333969116 0 1.0 0 0.0 0 0.0 0 0.0 -2.5185186862945557 0.9611110687255859 -0.0 -0.6335337162017822 -0.773674726486206 -0.0 0.06648120284080505 0.5638844966888428 0 1.0 0 0.0 0 0.0 0 0.0 -2.4887516498565674 1.0187243223190308 -0.20000001788139343 -0.40256965160369873 -0.47849971055984497 -0.7803277969360352 0.05228587985038757 0.5738112926483154 0 1.0 0 0.0 0 0.0 0 0.0 -1.925925850868225 0.6777777671813965 -0.20000001788139343 -0.4204840362071991 -0.7075716257095337 -0.5678884387016296 0.04253512620925903 0.5136716365814209 0 1.0 0 0.0 0 0.0 0 0.0 -2.5185186862945557 0.9611110687255859 -0.0 -0.6335337162017822 -0.773674726486206 -0.0 0.06648120284080505 0.5638844966888428 0 1.0 0 0.0 0 0.0 0 0.0 -2.881481647491455 1.3638889789581299 -0.0 -0.8798180818557739 -0.4752342402935028 -0.0 0.07094472646713257 0.6058355569839478 0 1.0 0 0.0 0 0.0 0 0.0 -2.8161864280700684 1.4034978151321411 -0.20000003278255463 -0.5496993660926819 -0.2930082082748413 -0.7822504043579102 0.057814061641693115 0.6133949160575867 0 1.0 0 0.0 0 0.0 0 0.0 -2.4887516498565674 1.0187243223190308 -0.20000001788139343 -0.40256965160369873 -0.47849971055984497 -0.7803277969360352 0.05228587985038757 0.5738112926483154 0 1.0 0 0.0 0 0.0 0 0.0 -2.881481647491455 1.3638889789581299 -0.0 -0.8798180818557739 -0.4752342402935028 -0.0 0.07094472646713257 0.6058355569839478 0 1.0 0 0.0 0 0.0 0 0.0 -3.0 1.7999999523162842 -0.0 -0.9941404461860657 0.10788293182849884 -0.0 0.07502612471580505 0.6411035060882568 0 1.0 0 0.0 0 0.0 0 0.0 -2.922222137451172 1.7999999523162842 -0.20000001788139343 -0.6368907690048218 0.08239997923374176 -0.766533374786377 0.061596453189849854 0.6462458372116089 0 1.0 0 0.0 0 0.0 0 0.0 -2.8161864280700684 1.4034978151321411 -0.20000003278255463 -0.5496993660926819 -0.2930082082748413 -0.7822504043579102 0.057814061641693115 0.6133949160575867 0 1.0 0 0.0 0 0.0 0 0.0 0.10162962973117828 2.700000047683716 0.17303703725337982 0.40870386362075806 0.5714285969734192 0.7116000652313232 0.5041325092315674 0.6560440063476562 0 1.0 0 0.0 0 0.0 0 0.0 0.12064746022224426 2.883333444595337 0.20517970621585846 0.45567187666893005 -0.4041261076927185 0.7930845022201538 0.4992266595363617 0.6713719367980957 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.883333444595337 0.2370370477437973 0.0 -0.40235602855682373 0.9154637455940247 0.4821370542049408 0.6989800930023193 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.700000047683716 0.20000000298023224 0.0 0.5705130100250244 0.8212835788726807 0.48873022198677063 0.6823248863220215 0 1.0 0 0.0 0 0.0 0 0.0 0.12064746022224426 2.883333444595337 0.20517970621585846 0.45567187666893005 -0.4041261076927185 0.7930845022201538 0.4992266595363617 0.6713719367980957 0 1.0 0 0.0 0 0.0 0 0.0 0.18483401834964752 3.066666603088379 0.31422773003578186 0.47233498096466064 0.3231299817562103 0.8200323581695557 0.48705339431762695 0.6647788286209106 0 1.0 0 0.0 0 0.0 0 0.0 0.0 3.066666603088379 0.3629629611968994 0.0 0.3243812322616577 0.9458906650543213 0.46264198422431946 0.698793888092041 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.883333444595337 0.2370370477437973 0.0 -0.40235602855682373 0.9154637455940247 0.4821370542049408 0.6989800930023193 0 1.0 0 0.0 0 0.0 0 0.0 0.18483401834964752 3.066666603088379 0.31422773003578186 0.47233498096466064 0.3231299817562103 0.8200323581695557 0.48705339431762695 0.6647788286209106 0 1.0 0 0.0 0 0.0 0 0.0 0.0 3.1500000953674316 -0.0 0.0 1.0 -0.0 0.5284969806671143 0.7498512864112854 0 1.0 0 0.0 0 0.0 0 0.0 0.0 3.066666603088379 0.3629629611968994 0.0 0.3243812322616577 0.9458906650543213 0.46264198422431946 0.698793888092041 0 1.0 0 0.0 0 0.0 0 0.0 0.17303703725337982 2.6999998092651367 0.10162962973117828 0.7116000652313232 0.5714285969734192 0.40870386362075806 0.5232969522476196 0.644173264503479 0 1.0 0 0.0 0 0.0 0 0.0 0.20517970621585846 2.883333444595337 0.12064746022224426 0.7930845022201538 -0.4041261076927185 0.45567187666893005 0.5198890566825867 0.6589685082435608 0 1.0 0 0.0 0 0.0 0 0.0 0.12064746022224426 2.883333444595337 0.20517970621585846 0.45567187666893005 -0.4041261076927185 0.7930845022201538 0.4992266595363617 0.6713719367980957 0 1.0 0 0.0 0 0.0 0 0.0 0.10162962973117828 2.700000047683716 0.17303703725337982 0.40870386362075806 0.5714285969734192 0.7116000652313232 0.5041325092315674 0.6560440063476562 0 1.0 0 0.0 0 0.0 0 0.0 0.20517970621585846 2.883333444595337 0.12064746022224426 0.7930845022201538 -0.4041261076927185 0.45567187666893005 0.5198890566825867 0.6589685082435608 0 1.0 0 0.0 0 0.0 0 0.0 0.31422773003578186 3.066666603088379 0.18483401834964752 0.8200323581695557 0.3231299817562103 0.47233498096466064 0.5142986178398132 0.6501308679580688 0 1.0 0 0.0 0 0.0 0 0.0 0.18483401834964752 3.066666603088379 0.31422773003578186 0.47233498096466064 0.3231299817562103 0.8200323581695557 0.48705339431762695 0.6647788286209106 0 1.0 0 0.0 0 0.0 0 0.0 0.12064746022224426 2.883333444595337 0.20517970621585846 0.45567187666893005 -0.4041261076927185 0.7930845022201538 0.4992266595363617 0.6713719367980957 0 1.0 0 0.0 0 0.0 0 0.0 0.31422773003578186 3.066666603088379 0.18483401834964752 0.8200323581695557 0.3231299817562103 0.47233498096466064 0.5142986178398132 0.6501308679580688 0 1.0 0 0.0 0 0.0 0 0.0 0.0 3.1500000953674316 -0.0 0.0 1.0 -0.0 0.5284969806671143 0.7498512864112854 0 1.0 0 0.0 0 0.0 0 0.0 0.18483401834964752 3.066666603088379 0.31422773003578186 0.47233498096466064 0.3231299817562103 0.8200323581695557 0.48705339431762695 0.6647788286209106 0 1.0 0 0.0 0 0.0 0 0.0 0.20000000298023224 2.700000047683716 -0.0 0.8212835788726807 0.5705130100250244 -0.0 0.5445703268051147 0.6458508968353271 0 1.0 0 0.0 0 0.0 0 0.0 0.2370370477437973 2.883333444595337 -0.0 0.9154637455940247 -0.40235602855682373 -0.0 0.5426700711250305 0.6608849167823792 0 1.0 0 0.0 0 0.0 0 0.0 0.20517970621585846 2.883333444595337 0.12064746022224426 0.7930845022201538 -0.4041261076927185 0.45567187666893005 0.5198890566825867 0.6589685082435608 0 1.0 0 0.0 0 0.0 0 0.0 0.17303703725337982 2.6999998092651367 0.10162962973117828 0.7116000652313232 0.5714285969734192 0.40870386362075806 0.5232969522476196 0.644173264503479 0 1.0 0 0.0 0 0.0 0 0.0 0.2370370477437973 2.883333444595337 -0.0 0.9154637455940247 -0.40235602855682373 -0.0 0.5426700711250305 0.6608849167823792 0 1.0 0 0.0 0 0.0 0 0.0 0.3629629611968994 3.066666603088379 -0.0 0.9458906650543213 0.3243812322616577 -0.0 0.5436645150184631 0.6531122922897339 0 1.0 0 0.0 0 0.0 0 0.0 0.31422773003578186 3.066666603088379 0.18483401834964752 0.8200323581695557 0.3231299817562103 0.47233498096466064 0.5142986178398132 0.6501308679580688 0 1.0 0 0.0 0 0.0 0 0.0 0.20517970621585846 2.883333444595337 0.12064746022224426 0.7930845022201538 -0.4041261076927185 0.45567187666893005 0.5198890566825867 0.6589685082435608 0 1.0 0 0.0 0 0.0 0 0.0 0.3629629611968994 3.066666603088379 -0.0 0.9458906650543213 0.3243812322616577 -0.0 0.5436645150184631 0.6531122922897339 0 1.0 0 0.0 0 0.0 0 0.0 0.0 3.1500000953674316 -0.0 0.0 1.0 -0.0 0.5284969806671143 0.7498512864112854 0 1.0 0 0.0 0 0.0 0 0.0 0.31422773003578186 3.066666603088379 0.18483401834964752 0.8200323581695557 0.3231299817562103 0.47233498096466064 0.5142986178398132 0.6501308679580688 0 1.0 0 0.0 0 0.0 0 0.0 -0.17303703725337982 2.700000047683716 0.10162962973117828 -0.7116000652313232 0.5714285969734192 0.40870386362075806 0.49074476957321167 0.7595763206481934 0 1.0 0 0.0 0 0.0 0 0.0 -0.20517970621585846 2.883333444595337 0.12064746022224426 -0.7930845022201538 -0.4041261076927185 0.45567187666893005 0.481635719537735 0.7803635597229004 0 1.0 0 0.0 0 0.0 0 0.0 -0.2370370477437973 2.883333444595337 -0.0 -0.9154637455940247 -0.40235602855682373 -0.0 0.5128114819526672 0.8111486434936523 0 1.0 0 0.0 0 0.0 0 0.0 -0.20000000298023224 2.700000047683716 -0.0 -0.8212835788726807 0.5705130100250244 -0.0 0.5197122097015381 0.7878735065460205 0 1.0 0 0.0 0 0.0 0 0.0 -0.20517970621585846 2.883333444595337 0.12064746022224426 -0.7930845022201538 -0.4041261076927185 0.45567187666893005 0.481635719537735 0.7803635597229004 0 1.0 0 0.0 0 0.0 0 0.0 -0.31422773003578186 3.066666603088379 0.18483401834964752 -0.8200323581695557 0.3231299817562103 0.47233498096466064 0.4501263201236725 0.8077295422554016 0 1.0 0 0.0 0 0.0 0 0.0 -0.3629629611968994 3.066666603088379 -0.0 -0.9458906650543213 0.3243812322616577 -0.0 0.49338704347610474 0.8562493920326233 0 1.0 0 0.0 0 0.0 0 0.0 -0.2370370477437973 2.883333444595337 -0.0 -0.9154637455940247 -0.40235602855682373 -0.0 0.5128114819526672 0.8111486434936523 0 1.0 0 0.0 0 0.0 0 0.0 -0.31422773003578186 3.066666603088379 0.18483401834964752 -0.8200323581695557 0.3231299817562103 0.47233498096466064 0.4501263201236725 0.8077295422554016 0 1.0 0 0.0 0 0.0 0 0.0 0.0 3.1500000953674316 -0.0 0.0 1.0 -0.0 0.5284969806671143 0.7498512864112854 0 1.0 0 0.0 0 0.0 0 0.0 -0.3629629611968994 3.066666603088379 -0.0 -0.9458906650543213 0.3243812322616577 -0.0 0.49338704347610474 0.8562493920326233 0 1.0 0 0.0 0 0.0 0 0.0 -0.10162962973117828 2.6999998092651367 0.17303703725337982 -0.40870386362075806 0.5714285969734192 0.7116000652313232 0.4821886718273163 0.7199850678443909 0 1.0 0 0.0 0 0.0 0 0.0 -0.12064746022224426 2.883333444595337 0.20517970621585846 -0.45567187666893005 -0.4041261076927185 0.7930845022201538 0.47388893365859985 0.7385139465332031 0 1.0 0 0.0 0 0.0 0 0.0 -0.20517970621585846 2.883333444595337 0.12064746022224426 -0.7930845022201538 -0.4041261076927185 0.45567187666893005 0.481635719537735 0.7803635597229004 0 1.0 0 0.0 0 0.0 0 0.0 -0.17303703725337982 2.700000047683716 0.10162962973117828 -0.7116000652313232 0.5714285969734192 0.40870386362075806 0.49074476957321167 0.7595763206481934 0 1.0 0 0.0 0 0.0 0 0.0 -0.12064746022224426 2.883333444595337 0.20517970621585846 -0.45567187666893005 -0.4041261076927185 0.7930845022201538 0.47388893365859985 0.7385139465332031 0 1.0 0 0.0 0 0.0 0 0.0 -0.18483401834964752 3.066666603088379 0.31422773003578186 -0.47233498096466064 0.3231299817562103 0.8200323581695557 0.4467930197715759 0.7496343851089478 0 1.0 0 0.0 0 0.0 0 0.0 -0.31422773003578186 3.066666603088379 0.18483401834964752 -0.8200323581695557 0.3231299817562103 0.47233498096466064 0.4501263201236725 0.8077295422554016 0 1.0 0 0.0 0 0.0 0 0.0 -0.20517970621585846 2.883333444595337 0.12064746022224426 -0.7930845022201538 -0.4041261076927185 0.45567187666893005 0.481635719537735 0.7803635597229004 0 1.0 0 0.0 0 0.0 0 0.0 -0.18483401834964752 3.066666603088379 0.31422773003578186 -0.47233498096466064 0.3231299817562103 0.8200323581695557 0.4467930197715759 0.7496343851089478 0 1.0 0 0.0 0 0.0 0 0.0 0.0 3.1500000953674316 -0.0 0.0 1.0 -0.0 0.5284969806671143 0.7498512864112854 0 1.0 0 0.0 0 0.0 0 0.0 -0.31422773003578186 3.066666603088379 0.18483401834964752 -0.8200323581695557 0.3231299817562103 0.47233498096466064 0.4501263201236725 0.8077295422554016 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.700000047683716 0.20000000298023224 0.0 0.5705130100250244 0.8212835788726807 0.48873022198677063 0.6823248863220215 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.883333444595337 0.2370370477437973 0.0 -0.40235602855682373 0.9154637455940247 0.4821370542049408 0.6989800930023193 0 1.0 0 0.0 0 0.0 0 0.0 -0.12064746022224426 2.883333444595337 0.20517970621585846 -0.45567187666893005 -0.4041261076927185 0.7930845022201538 0.47388893365859985 0.7385139465332031 0 1.0 0 0.0 0 0.0 0 0.0 -0.10162962973117828 2.6999998092651367 0.17303703725337982 -0.40870386362075806 0.5714285969734192 0.7116000652313232 0.4821886718273163 0.7199850678443909 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.883333444595337 0.2370370477437973 0.0 -0.40235602855682373 0.9154637455940247 0.4821370542049408 0.6989800930023193 0 1.0 0 0.0 0 0.0 0 0.0 0.0 3.066666603088379 0.3629629611968994 0.0 0.3243812322616577 0.9458906650543213 0.46264198422431946 0.698793888092041 0 1.0 0 0.0 0 0.0 0 0.0 -0.18483401834964752 3.066666603088379 0.31422773003578186 -0.47233498096466064 0.3231299817562103 0.8200323581695557 0.4467930197715759 0.7496343851089478 0 1.0 0 0.0 0 0.0 0 0.0 -0.12064746022224426 2.883333444595337 0.20517970621585846 -0.45567187666893005 -0.4041261076927185 0.7930845022201538 0.47388893365859985 0.7385139465332031 0 1.0 0 0.0 0 0.0 0 0.0 0.0 3.066666603088379 0.3629629611968994 0.0 0.3243812322616577 0.9458906650543213 0.46264198422431946 0.698793888092041 0 1.0 0 0.0 0 0.0 0 0.0 0.0 3.1500000953674316 -0.0 0.0 1.0 -0.0 0.5284969806671143 0.7498512864112854 0 1.0 0 0.0 0 0.0 0 0.0 -0.18483401834964752 3.066666603088379 0.31422773003578186 -0.47233498096466064 0.3231299817562103 0.8200323581695557 0.4467930197715759 0.7496343851089478 0 1.0 0 0.0 0 0.0 0 0.0 -0.10162962973117828 2.700000047683716 -0.17303703725337982 -0.40870386362075806 0.5714285969734192 -0.7116000652313232 0.5817010402679443 0.7591943740844727 0 1.0 0 0.0 0 0.0 0 0.0 -0.12064746022224426 2.883333444595337 -0.20517970621585846 -0.45567187666893005 -0.4041261076927185 -0.7930845022201538 0.582847535610199 0.781477689743042 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.883333444595337 -0.2370370477437973 0.0 -0.40235602855682373 -0.9154637455940247 0.5888028740882874 0.7407431602478027 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.700000047683716 -0.20000000298023224 0.0 0.5705130100250244 -0.8212835788726807 0.5873590707778931 0.720962405204773 0 1.0 0 0.0 0 0.0 0 0.0 -0.12064746022224426 2.883333444595337 -0.20517970621585846 -0.45567187666893005 -0.4041261076927185 -0.7930845022201538 0.582847535610199 0.781477689743042 0 1.0 0 0.0 0 0.0 0 0.0 -0.18483401834964752 3.066666603088379 -0.31422773003578186 -0.47233498096466064 0.3231299817562103 -0.8200323581695557 0.6060935854911804 0.8111084699630737 0 1.0 0 0.0 0 0.0 0 0.0 0.0 3.066666603088379 -0.3629629611968994 0.0 0.3243812322616577 -0.9458906650543213 0.6086547374725342 0.7549499869346619 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.883333444595337 -0.2370370477437973 0.0 -0.40235602855682373 -0.9154637455940247 0.5888028740882874 0.7407431602478027 0 1.0 0 0.0 0 0.0 0 0.0 -0.18483401834964752 3.066666603088379 -0.31422773003578186 -0.47233498096466064 0.3231299817562103 -0.8200323581695557 0.6060935854911804 0.8111084699630737 0 1.0 0 0.0 0 0.0 0 0.0 0.0 3.1500000953674316 -0.0 0.0 1.0 -0.0 0.5284969806671143 0.7498512864112854 0 1.0 0 0.0 0 0.0 0 0.0 0.0 3.066666603088379 -0.3629629611968994 0.0 0.3243812322616577 -0.9458906650543213 0.6086547374725342 0.7549499869346619 0 1.0 0 0.0 0 0.0 0 0.0 -0.17303703725337982 2.6999998092651367 -0.10162962973117828 -0.7116000652313232 0.5714285969734192 -0.40870386362075806 0.5577818155288696 0.7865083813667297 0 1.0 0 0.0 0 0.0 0 0.0 -0.20517970621585846 2.883333444595337 -0.12064746022224426 -0.7930845022201538 -0.4041261076927185 -0.45567187666893005 0.5560003519058228 0.8104372024536133 0 1.0 0 0.0 0 0.0 0 0.0 -0.12064746022224426 2.883333444595337 -0.20517970621585846 -0.45567187666893005 -0.4041261076927185 -0.7930845022201538 0.582847535610199 0.781477689743042 0 1.0 0 0.0 0 0.0 0 0.0 -0.10162962973117828 2.700000047683716 -0.17303703725337982 -0.40870386362075806 0.5714285969734192 -0.7116000652313232 0.5817010402679443 0.7591943740844727 0 1.0 0 0.0 0 0.0 0 0.0 -0.20517970621585846 2.883333444595337 -0.12064746022224426 -0.7930845022201538 -0.4041261076927185 -0.45567187666893005 0.5560003519058228 0.8104372024536133 0 1.0 0 0.0 0 0.0 0 0.0 -0.31422773003578186 3.066666603088379 -0.18483401834964752 -0.8200323581695557 0.3231299817562103 -0.47233498096466064 0.5681052803993225 0.8555918335914612 0 1.0 0 0.0 0 0.0 0 0.0 -0.18483401834964752 3.066666603088379 -0.31422773003578186 -0.47233498096466064 0.3231299817562103 -0.8200323581695557 0.6060935854911804 0.8111084699630737 0 1.0 0 0.0 0 0.0 0 0.0 -0.12064746022224426 2.883333444595337 -0.20517970621585846 -0.45567187666893005 -0.4041261076927185 -0.7930845022201538 0.582847535610199 0.781477689743042 0 1.0 0 0.0 0 0.0 0 0.0 -0.31422773003578186 3.066666603088379 -0.18483401834964752 -0.8200323581695557 0.3231299817562103 -0.47233498096466064 0.5681052803993225 0.8555918335914612 0 1.0 0 0.0 0 0.0 0 0.0 0.0 3.1500000953674316 -0.0 0.0 1.0 -0.0 0.5284969806671143 0.7498512864112854 0 1.0 0 0.0 0 0.0 0 0.0 -0.18483401834964752 3.066666603088379 -0.31422773003578186 -0.47233498096466064 0.3231299817562103 -0.8200323581695557 0.6060935854911804 0.8111084699630737 0 1.0 0 0.0 0 0.0 0 0.0 -0.20000000298023224 2.700000047683716 -0.0 -0.8212835788726807 0.5705130100250244 -0.0 0.5197122097015381 0.7878735065460205 0 1.0 0 0.0 0 0.0 0 0.0 -0.2370370477437973 2.883333444595337 -0.0 -0.9154637455940247 -0.40235602855682373 -0.0 0.5128114819526672 0.8111486434936523 0 1.0 0 0.0 0 0.0 0 0.0 -0.20517970621585846 2.883333444595337 -0.12064746022224426 -0.7930845022201538 -0.4041261076927185 -0.45567187666893005 0.5560003519058228 0.8104372024536133 0 1.0 0 0.0 0 0.0 0 0.0 -0.17303703725337982 2.6999998092651367 -0.10162962973117828 -0.7116000652313232 0.5714285969734192 -0.40870386362075806 0.5577818155288696 0.7865083813667297 0 1.0 0 0.0 0 0.0 0 0.0 -0.2370370477437973 2.883333444595337 -0.0 -0.9154637455940247 -0.40235602855682373 -0.0 0.5128114819526672 0.8111486434936523 0 1.0 0 0.0 0 0.0 0 0.0 -0.3629629611968994 3.066666603088379 -0.0 -0.9458906650543213 0.3243812322616577 -0.0 0.49338704347610474 0.8562493920326233 0 1.0 0 0.0 0 0.0 0 0.0 -0.31422773003578186 3.066666603088379 -0.18483401834964752 -0.8200323581695557 0.3231299817562103 -0.47233498096466064 0.5681052803993225 0.8555918335914612 0 1.0 0 0.0 0 0.0 0 0.0 -0.20517970621585846 2.883333444595337 -0.12064746022224426 -0.7930845022201538 -0.4041261076927185 -0.45567187666893005 0.5560003519058228 0.8104372024536133 0 1.0 0 0.0 0 0.0 0 0.0 -0.3629629611968994 3.066666603088379 -0.0 -0.9458906650543213 0.3243812322616577 -0.0 0.49338704347610474 0.8562493920326233 0 1.0 0 0.0 0 0.0 0 0.0 0.0 3.1500000953674316 -0.0 0.0 1.0 -0.0 0.5284969806671143 0.7498512864112854 0 1.0 0 0.0 0 0.0 0 0.0 -0.31422773003578186 3.066666603088379 -0.18483401834964752 -0.8200323581695557 0.3231299817562103 -0.47233498096466064 0.5681052803993225 0.8555918335914612 0 1.0 0 0.0 0 0.0 0 0.0 0.17303703725337982 2.700000047683716 -0.10162962973117828 0.7116000652313232 0.5714285969734192 -0.40870386362075806 0.564504861831665 0.6604757905006409 0 1.0 0 0.0 0 0.0 0 0.0 0.20517970621585846 2.883333444595337 -0.12064746022224426 0.7930845022201538 -0.4041261076927185 -0.45567187666893005 0.5640130639076233 0.6764401793479919 0 1.0 0 0.0 0 0.0 0 0.0 0.2370370477437973 2.883333444595337 -0.0 0.9154637455940247 -0.40235602855682373 -0.0 0.5426700711250305 0.6608849167823792 0 1.0 0 0.0 0 0.0 0 0.0 0.20000000298023224 2.700000047683716 -0.0 0.8212835788726807 0.5705130100250244 -0.0 0.5445703268051147 0.6458508968353271 0 1.0 0 0.0 0 0.0 0 0.0 0.20517970621585846 2.883333444595337 -0.12064746022224426 0.7930845022201538 -0.4041261076927185 -0.45567187666893005 0.5640130639076233 0.6764401793479919 0 1.0 0 0.0 0 0.0 0 0.0 0.31422773003578186 3.066666603088379 -0.18483401834964752 0.8200323581695557 0.3231299817562103 -0.47233498096466064 0.5714684724807739 0.6727004051208496 0 1.0 0 0.0 0 0.0 0 0.0 0.3629629611968994 3.066666603088379 -0.0 0.9458906650543213 0.3243812322616577 -0.0 0.5436645150184631 0.6531122922897339 0 1.0 0 0.0 0 0.0 0 0.0 0.2370370477437973 2.883333444595337 -0.0 0.9154637455940247 -0.40235602855682373 -0.0 0.5426700711250305 0.6608849167823792 0 1.0 0 0.0 0 0.0 0 0.0 0.31422773003578186 3.066666603088379 -0.18483401834964752 0.8200323581695557 0.3231299817562103 -0.47233498096466064 0.5714684724807739 0.6727004051208496 0 1.0 0 0.0 0 0.0 0 0.0 0.0 3.1500000953674316 -0.0 0.0 1.0 -0.0 0.5284969806671143 0.7498512864112854 0 1.0 0 0.0 0 0.0 0 0.0 0.3629629611968994 3.066666603088379 -0.0 0.9458906650543213 0.3243812322616577 -0.0 0.5436645150184631 0.6531122922897339 0 1.0 0 0.0 0 0.0 0 0.0 0.10162962973117828 2.6999998092651367 -0.17303703725337982 0.40870386362075806 0.5714285969734192 -0.7116000652313232 0.579617977142334 0.6857367753982544 0 1.0 0 0.0 0 0.0 0 0.0 0.12064746022224426 2.883333444595337 -0.20517970621585846 0.45567187666893005 -0.4041261076927185 -0.7930845022201538 0.5802648663520813 0.7032516002655029 0 1.0 0 0.0 0 0.0 0 0.0 0.20517970621585846 2.883333444595337 -0.12064746022224426 0.7930845022201538 -0.4041261076927185 -0.45567187666893005 0.5640130639076233 0.6764401793479919 0 1.0 0 0.0 0 0.0 0 0.0 0.17303703725337982 2.700000047683716 -0.10162962973117828 0.7116000652313232 0.5714285969734192 -0.40870386362075806 0.564504861831665 0.6604757905006409 0 1.0 0 0.0 0 0.0 0 0.0 0.12064746022224426 2.883333444595337 -0.20517970621585846 0.45567187666893005 -0.4041261076927185 -0.7930845022201538 0.5802648663520813 0.7032516002655029 0 1.0 0 0.0 0 0.0 0 0.0 0.18483401834964752 3.066666603088379 -0.31422773003578186 0.47233498096466064 0.3231299817562103 -0.8200323581695557 0.5938968062400818 0.7064254879951477 0 1.0 0 0.0 0 0.0 0 0.0 0.31422773003578186 3.066666603088379 -0.18483401834964752 0.8200323581695557 0.3231299817562103 -0.47233498096466064 0.5714684724807739 0.6727004051208496 0 1.0 0 0.0 0 0.0 0 0.0 0.20517970621585846 2.883333444595337 -0.12064746022224426 0.7930845022201538 -0.4041261076927185 -0.45567187666893005 0.5640130639076233 0.6764401793479919 0 1.0 0 0.0 0 0.0 0 0.0 0.18483401834964752 3.066666603088379 -0.31422773003578186 0.47233498096466064 0.3231299817562103 -0.8200323581695557 0.5938968062400818 0.7064254879951477 0 1.0 0 0.0 0 0.0 0 0.0 0.0 3.1500000953674316 -0.0 0.0 1.0 -0.0 0.5284969806671143 0.7498512864112854 0 1.0 0 0.0 0 0.0 0 0.0 0.31422773003578186 3.066666603088379 -0.18483401834964752 0.8200323581695557 0.3231299817562103 -0.47233498096466064 0.5714684724807739 0.6727004051208496 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.700000047683716 -0.20000000298023224 0.0 0.5705130100250244 -0.8212835788726807 0.5873590707778931 0.720962405204773 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.883333444595337 -0.2370370477437973 0.0 -0.40235602855682373 -0.9154637455940247 0.5888028740882874 0.7407431602478027 0 1.0 0 0.0 0 0.0 0 0.0 0.12064746022224426 2.883333444595337 -0.20517970621585846 0.45567187666893005 -0.4041261076927185 -0.7930845022201538 0.5802648663520813 0.7032516002655029 0 1.0 0 0.0 0 0.0 0 0.0 0.10162962973117828 2.6999998092651367 -0.17303703725337982 0.40870386362075806 0.5714285969734192 -0.7116000652313232 0.579617977142334 0.6857367753982544 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.883333444595337 -0.2370370477437973 0.0 -0.40235602855682373 -0.9154637455940247 0.5888028740882874 0.7407431602478027 0 1.0 0 0.0 0 0.0 0 0.0 0.0 3.066666603088379 -0.3629629611968994 0.0 0.3243812322616577 -0.9458906650543213 0.6086547374725342 0.7549499869346619 0 1.0 0 0.0 0 0.0 0 0.0 0.18483401834964752 3.066666603088379 -0.31422773003578186 0.47233498096466064 0.3231299817562103 -0.8200323581695557 0.5938968062400818 0.7064254879951477 0 1.0 0 0.0 0 0.0 0 0.0 0.12064746022224426 2.883333444595337 -0.20517970621585846 0.45567187666893005 -0.4041261076927185 -0.7930845022201538 0.5802648663520813 0.7032516002655029 0 1.0 0 0.0 0 0.0 0 0.0 0.0 3.066666603088379 -0.3629629611968994 0.0 0.3243812322616577 -0.9458906650543213 0.6086547374725342 0.7549499869346619 0 1.0 0 0.0 0 0.0 0 0.0 0.0 3.1500000953674316 -0.0 0.0 1.0 -0.0 0.5284969806671143 0.7498512864112854 0 1.0 0 0.0 0 0.0 0 0.0 0.18483401834964752 3.066666603088379 -0.31422773003578186 0.47233498096466064 0.3231299817562103 -0.8200323581695557 0.5938968062400818 0.7064254879951477 0 1.0 0 0.0 0 0.0 0 0.0 0.6605925559997559 2.4000000953674316 1.124740719795227 0.20886868238449097 0.9084749817848206 0.36194953322410583 0.4359894394874573 0.460996150970459 0 1.0 0 0.0 0 0.0 0 0.0 0.5382605791091919 2.51111102104187 0.9164553880691528 0.15491195023059845 0.9503769278526306 0.269753098487854 0.4442180395126343 0.49124330282211304 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.51111102104187 1.0592591762542725 0.0 0.9501632452011108 0.3116855323314667 0.3831595182418823 0.538464367389679 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.4000000953674316 1.2999999523162842 0.0 0.9079561829566956 0.4190496504306793 0.36910760402679443 0.5083151459693909 0 1.0 0 0.0 0 0.0 0 0.0 0.5382605791091919 2.51111102104187 0.9164553880691528 0.15491195023059845 0.9503769278526306 0.269753098487854 0.4442180395126343 0.49124330282211304 0 1.0 0 0.0 0 0.0 0 0.0 0.2917146682739258 2.5888888835906982 0.496680349111557 0.10519730299711227 0.9774773120880127 0.1828058660030365 0.46832916140556335 0.5594615340232849 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.5888888835906982 0.5740740895271301 0.0 0.9772942066192627 0.21173742413520813 0.4255322217941284 0.6038855314254761 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.51111102104187 1.0592591762542725 0.0 0.9501632452011108 0.3116855323314667 0.3831595182418823 0.538464367389679 0 1.0 0 0.0 0 0.0 0 0.0 0.2917146682739258 2.5888888835906982 0.496680349111557 0.10519730299711227 0.9774773120880127 0.1828058660030365 0.46832916140556335 0.5594615340232849 0 1.0 0 0.0 0 0.0 0 0.0 0.10162962973117828 2.700000047683716 0.17303703725337982 0.40870386362075806 0.5714285969734192 0.7116000652313232 0.5041325092315674 0.6560440063476562 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.700000047683716 0.20000000298023224 0.0 0.5705130100250244 0.8212835788726807 0.48873022198677063 0.6823248863220215 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.5888888835906982 0.5740740895271301 0.0 0.9772942066192627 0.21173742413520813 0.4255322217941284 0.6038855314254761 0 1.0 0 0.0 0 0.0 0 0.0 1.124740719795227 2.4000000953674316 0.6605925559997559 0.36194953322410583 0.9084749817848206 0.20886868238449097 0.49968165159225464 0.4449015259742737 0 1.0 0 0.0 0 0.0 0 0.0 0.9164553880691528 2.51111102104187 0.5382605791091919 0.269753098487854 0.9503769278526306 0.15491195023059845 0.5023486614227295 0.4748995900154114 0 1.0 0 0.0 0 0.0 0 0.0 0.5382605791091919 2.51111102104187 0.9164553880691528 0.15491195023059845 0.9503769278526306 0.269753098487854 0.4442180395126343 0.49124330282211304 0 1.0 0 0.0 0 0.0 0 0.0 0.6605925559997559 2.4000000953674316 1.124740719795227 0.20886868238449097 0.9084749817848206 0.36194953322410583 0.4359894394874573 0.460996150970459 0 1.0 0 0.0 0 0.0 0 0.0 0.9164553880691528 2.51111102104187 0.5382605791091919 0.269753098487854 0.9503769278526306 0.15491195023059845 0.5023486614227295 0.4748995900154114 0 1.0 0 0.0 0 0.0 0 0.0 0.496680349111557 2.5888888835906982 0.2917146682739258 0.1828058660030365 0.9774773120880127 0.10519730299711227 0.5109633207321167 0.5429613590240479 0 1.0 0 0.0 0 0.0 0 0.0 0.2917146682739258 2.5888888835906982 0.496680349111557 0.10519730299711227 0.9774773120880127 0.1828058660030365 0.46832916140556335 0.5594615340232849 0 1.0 0 0.0 0 0.0 0 0.0 0.5382605791091919 2.51111102104187 0.9164553880691528 0.15491195023059845 0.9503769278526306 0.269753098487854 0.4442180395126343 0.49124330282211304 0 1.0 0 0.0 0 0.0 0 0.0 0.496680349111557 2.5888888835906982 0.2917146682739258 0.1828058660030365 0.9774773120880127 0.10519730299711227 0.5109633207321167 0.5429613590240479 0 1.0 0 0.0 0 0.0 0 0.0 0.17303703725337982 2.6999998092651367 0.10162962973117828 0.7116000652313232 0.5714285969734192 0.40870386362075806 0.5232969522476196 0.644173264503479 0 1.0 0 0.0 0 0.0 0 0.0 0.10162962973117828 2.700000047683716 0.17303703725337982 0.40870386362075806 0.5714285969734192 0.7116000652313232 0.5041325092315674 0.6560440063476562 0 1.0 0 0.0 0 0.0 0 0.0 0.2917146682739258 2.5888888835906982 0.496680349111557 0.10519730299711227 0.9774773120880127 0.1828058660030365 0.46832916140556335 0.5594615340232849 0 1.0 0 0.0 0 0.0 0 0.0 1.2999999523162842 2.4000000953674316 -0.0 0.4190496504306793 0.9079561829566956 -0.0 0.5643860697746277 0.45672929286956787 0 1.0 0 0.0 0 0.0 0 0.0 1.0592591762542725 2.51111102104187 -0.0 0.3116855323314667 0.9501632452011108 -0.0 0.5615435838699341 0.4852682948112488 0 1.0 0 0.0 0 0.0 0 0.0 0.9164553880691528 2.51111102104187 0.5382605791091919 0.269753098487854 0.9503769278526306 0.15491195023059845 0.5023486614227295 0.4748995900154114 0 1.0 0 0.0 0 0.0 0 0.0 1.124740719795227 2.4000000953674316 0.6605925559997559 0.36194953322410583 0.9084749817848206 0.20886868238449097 0.49968165159225464 0.4449015259742737 0 1.0 0 0.0 0 0.0 0 0.0 1.0592591762542725 2.51111102104187 -0.0 0.3116855323314667 0.9501632452011108 -0.0 0.5615435838699341 0.4852682948112488 0 1.0 0 0.0 0 0.0 0 0.0 0.5740740895271301 2.5888888835906982 -0.0 0.21173742413520813 0.9772942066192627 -0.0 0.555172324180603 0.5494076013565063 0 1.0 0 0.0 0 0.0 0 0.0 0.496680349111557 2.5888888835906982 0.2917146682739258 0.1828058660030365 0.9774773120880127 0.10519730299711227 0.5109633207321167 0.5429613590240479 0 1.0 0 0.0 0 0.0 0 0.0 0.9164553880691528 2.51111102104187 0.5382605791091919 0.269753098487854 0.9503769278526306 0.15491195023059845 0.5023486614227295 0.4748995900154114 0 1.0 0 0.0 0 0.0 0 0.0 0.5740740895271301 2.5888888835906982 -0.0 0.21173742413520813 0.9772942066192627 -0.0 0.555172324180603 0.5494076013565063 0 1.0 0 0.0 0 0.0 0 0.0 0.20000000298023224 2.700000047683716 -0.0 0.8212835788726807 0.5705130100250244 -0.0 0.5445703268051147 0.6458508968353271 0 1.0 0 0.0 0 0.0 0 0.0 0.17303703725337982 2.6999998092651367 0.10162962973117828 0.7116000652313232 0.5714285969734192 0.40870386362075806 0.5232969522476196 0.644173264503479 0 1.0 0 0.0 0 0.0 0 0.0 0.496680349111557 2.5888888835906982 0.2917146682739258 0.1828058660030365 0.9774773120880127 0.10519730299711227 0.5109633207321167 0.5429613590240479 0 1.0 0 0.0 0 0.0 0 0.0 -1.124740719795227 2.4000000953674316 0.6605925559997559 -0.36194953322410583 0.9084749817848206 0.20886868238449097 0.2195276916027069 0.6834987998008728 0 1.0 0 0.0 0 0.0 0 0.0 -0.9164553880691528 2.51111102104187 0.5382605791091919 -0.269753098487854 0.9503769278526306 0.15491195023059845 0.24561625719070435 0.7239598035812378 0 1.0 0 0.0 0 0.0 0 0.0 -1.0592591762542725 2.51111102104187 -0.0 -0.3116855323314667 0.9501632452011108 -0.0 0.11632069945335388 0.8349870443344116 0 1.0 0 0.0 0 0.0 0 0.0 -1.2999999523162842 2.4000000953674316 -0.0 -0.4190496504306793 0.9079561829566956 -0.0 0.09754133224487305 0.776390016078949 0 1.0 0 0.0 0 0.0 0 0.0 -0.9164553880691528 2.51111102104187 0.5382605791091919 -0.269753098487854 0.9503769278526306 0.15491195023059845 0.24561625719070435 0.7239598035812378 0 1.0 0 0.0 0 0.0 0 0.0 -0.496680349111557 2.5888888835906982 0.2917146682739258 -0.1828058660030365 0.9774773120880127 0.10519730299711227 0.3546844720840454 0.7904790043830872 0 1.0 0 0.0 0 0.0 0 0.0 -0.5740740895271301 2.5888888835906982 -0.0 -0.21173742413520813 0.9772942066192627 -0.0 0.36617764830589294 0.9340194463729858 0 1.0 0 0.0 0 0.0 0 0.0 -1.0592591762542725 2.51111102104187 -0.0 -0.3116855323314667 0.9501632452011108 -0.0 0.11632069945335388 0.8349870443344116 0 1.0 0 0.0 0 0.0 0 0.0 -0.496680349111557 2.5888888835906982 0.2917146682739258 -0.1828058660030365 0.9774773120880127 0.10519730299711227 0.3546844720840454 0.7904790043830872 0 1.0 0 0.0 0 0.0 0 0.0 -0.17303703725337982 2.700000047683716 0.10162962973117828 -0.7116000652313232 0.5714285969734192 0.40870386362075806 0.49074476957321167 0.7595763206481934 0 1.0 0 0.0 0 0.0 0 0.0 -0.20000000298023224 2.700000047683716 -0.0 -0.8212835788726807 0.5705130100250244 -0.0 0.5197122097015381 0.7878735065460205 0 1.0 0 0.0 0 0.0 0 0.0 -0.5740740895271301 2.5888888835906982 -0.0 -0.21173742413520813 0.9772942066192627 -0.0 0.36617764830589294 0.9340194463729858 0 1.0 0 0.0 0 0.0 0 0.0 -0.6605925559997559 2.4000000953674316 1.124740719795227 -0.20886868238449097 0.9084749817848206 0.36194953322410583 0.2990068793296814 0.5859890580177307 0 1.0 0 0.0 0 0.0 0 0.0 -0.5382605791091919 2.51111102104187 0.9164553880691528 -0.15491195023059845 0.9503769278526306 0.269753098487854 0.31909865140914917 0.6180595755577087 0 1.0 0 0.0 0 0.0 0 0.0 -0.9164553880691528 2.51111102104187 0.5382605791091919 -0.269753098487854 0.9503769278526306 0.15491195023059845 0.24561625719070435 0.7239598035812378 0 1.0 0 0.0 0 0.0 0 0.0 -1.124740719795227 2.4000000953674316 0.6605925559997559 -0.36194953322410583 0.9084749817848206 0.20886868238449097 0.2195276916027069 0.6834987998008728 0 1.0 0 0.0 0 0.0 0 0.0 -0.5382605791091919 2.51111102104187 0.9164553880691528 -0.15491195023059845 0.9503769278526306 0.269753098487854 0.31909865140914917 0.6180595755577087 0 1.0 0 0.0 0 0.0 0 0.0 -0.2917146682739258 2.5888888835906982 0.496680349111557 -0.10519730299711227 0.9774773120880127 0.1828058660030365 0.38573700189590454 0.6806533336639404 0 1.0 0 0.0 0 0.0 0 0.0 -0.496680349111557 2.5888888835906982 0.2917146682739258 -0.1828058660030365 0.9774773120880127 0.10519730299711227 0.3546844720840454 0.7904790043830872 0 1.0 0 0.0 0 0.0 0 0.0 -0.9164553880691528 2.51111102104187 0.5382605791091919 -0.269753098487854 0.9503769278526306 0.15491195023059845 0.24561625719070435 0.7239598035812378 0 1.0 0 0.0 0 0.0 0 0.0 -0.2917146682739258 2.5888888835906982 0.496680349111557 -0.10519730299711227 0.9774773120880127 0.1828058660030365 0.38573700189590454 0.6806533336639404 0 1.0 0 0.0 0 0.0 0 0.0 -0.10162962973117828 2.6999998092651367 0.17303703725337982 -0.40870386362075806 0.5714285969734192 0.7116000652313232 0.4821886718273163 0.7199850678443909 0 1.0 0 0.0 0 0.0 0 0.0 -0.17303703725337982 2.700000047683716 0.10162962973117828 -0.7116000652313232 0.5714285969734192 0.40870386362075806 0.49074476957321167 0.7595763206481934 0 1.0 0 0.0 0 0.0 0 0.0 -0.496680349111557 2.5888888835906982 0.2917146682739258 -0.1828058660030365 0.9774773120880127 0.10519730299711227 0.3546844720840454 0.7904790043830872 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.4000000953674316 1.2999999523162842 0.0 0.9079561829566956 0.4190496504306793 0.36910760402679443 0.5083151459693909 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.51111102104187 1.0592591762542725 0.0 0.9501632452011108 0.3116855323314667 0.3831595182418823 0.538464367389679 0 1.0 0 0.0 0 0.0 0 0.0 -0.5382605791091919 2.51111102104187 0.9164553880691528 -0.15491195023059845 0.9503769278526306 0.269753098487854 0.31909865140914917 0.6180595755577087 0 1.0 0 0.0 0 0.0 0 0.0 -0.6605925559997559 2.4000000953674316 1.124740719795227 -0.20886868238449097 0.9084749817848206 0.36194953322410583 0.2990068793296814 0.5859890580177307 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.51111102104187 1.0592591762542725 0.0 0.9501632452011108 0.3116855323314667 0.3831595182418823 0.538464367389679 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.5888888835906982 0.5740740895271301 0.0 0.9772942066192627 0.21173742413520813 0.4255322217941284 0.6038855314254761 0 1.0 0 0.0 0 0.0 0 0.0 -0.2917146682739258 2.5888888835906982 0.496680349111557 -0.10519730299711227 0.9774773120880127 0.1828058660030365 0.38573700189590454 0.6806533336639404 0 1.0 0 0.0 0 0.0 0 0.0 -0.5382605791091919 2.51111102104187 0.9164553880691528 -0.15491195023059845 0.9503769278526306 0.269753098487854 0.31909865140914917 0.6180595755577087 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.5888888835906982 0.5740740895271301 0.0 0.9772942066192627 0.21173742413520813 0.4255322217941284 0.6038855314254761 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.700000047683716 0.20000000298023224 0.0 0.5705130100250244 0.8212835788726807 0.48873022198677063 0.6823248863220215 0 1.0 0 0.0 0 0.0 0 0.0 -0.10162962973117828 2.6999998092651367 0.17303703725337982 -0.40870386362075806 0.5714285969734192 0.7116000652313232 0.4821886718273163 0.7199850678443909 0 1.0 0 0.0 0 0.0 0 0.0 -0.2917146682739258 2.5888888835906982 0.496680349111557 -0.10519730299711227 0.9774773120880127 0.1828058660030365 0.38573700189590454 0.6806533336639404 0 1.0 0 0.0 0 0.0 0 0.0 -0.6605925559997559 2.4000000953674316 -1.124740719795227 -0.20886868238449097 0.9084749817848206 -0.36194953322410583 0.8236000537872314 0.7096928954124451 0 1.0 0 0.0 0 0.0 0 0.0 -0.5382605791091919 2.51111102104187 -0.9164553880691528 -0.15491195023059845 0.9503769278526306 -0.269753098487854 0.7985010147094727 0.7418715357780457 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.51111102104187 -1.0592591762542725 0.0 0.9501632452011108 -0.3116855323314667 0.7281266450881958 0.648444652557373 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.4000000953674316 -1.2999999523162842 0.0 0.9079561829566956 -0.4190496504306793 0.7460972666740417 0.6234467029571533 0 1.0 0 0.0 0 0.0 0 0.0 -0.5382605791091919 2.51111102104187 -0.9164553880691528 -0.15491195023059845 0.9503769278526306 -0.269753098487854 0.7985010147094727 0.7418715357780457 0 1.0 0 0.0 0 0.0 0 0.0 -0.2917146682739258 2.5888888835906982 -0.496680349111557 -0.10519730299711227 0.9774773120880127 -0.1828058660030365 0.7038067579269409 0.7858607769012451 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.5888888835906982 -0.5740740895271301 0.0 0.9772942066192627 -0.21173742413520813 0.6721643209457397 0.6914557218551636 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.51111102104187 -1.0592591762542725 0.0 0.9501632452011108 -0.3116855323314667 0.7281266450881958 0.648444652557373 0 1.0 0 0.0 0 0.0 0 0.0 -0.2917146682739258 2.5888888835906982 -0.496680349111557 -0.10519730299711227 0.9774773120880127 -0.1828058660030365 0.7038067579269409 0.7858607769012451 0 1.0 0 0.0 0 0.0 0 0.0 -0.10162962973117828 2.700000047683716 -0.17303703725337982 -0.40870386362075806 0.5714285969734192 -0.7116000652313232 0.5817010402679443 0.7591943740844727 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.700000047683716 -0.20000000298023224 0.0 0.5705130100250244 -0.8212835788726807 0.5873590707778931 0.720962405204773 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.5888888835906982 -0.5740740895271301 0.0 0.9772942066192627 -0.21173742413520813 0.6721643209457397 0.6914557218551636 0 1.0 0 0.0 0 0.0 0 0.0 -1.124740719795227 2.4000000953674316 -0.6605925559997559 -0.36194953322410583 0.9084749817848206 -0.20886868238449097 0.9360653162002563 0.7810214757919312 0 1.0 0 0.0 0 0.0 0 0.0 -0.9164553880691528 2.51111102104187 -0.5382605791091919 -0.269753098487854 0.9503769278526306 -0.15491195023059845 0.9121720790863037 0.8325029611587524 0 1.0 0 0.0 0 0.0 0 0.0 -0.5382605791091919 2.51111102104187 -0.9164553880691528 -0.15491195023059845 0.9503769278526306 -0.269753098487854 0.7985010147094727 0.7418715357780457 0 1.0 0 0.0 0 0.0 0 0.0 -0.6605925559997559 2.4000000953674316 -1.124740719795227 -0.20886868238449097 0.9084749817848206 -0.36194953322410583 0.8236000537872314 0.7096928954124451 0 1.0 0 0.0 0 0.0 0 0.0 -0.9164553880691528 2.51111102104187 -0.5382605791091919 -0.269753098487854 0.9503769278526306 -0.15491195023059845 0.9121720790863037 0.8325029611587524 0 1.0 0 0.0 0 0.0 0 0.0 -0.496680349111557 2.5888888835906982 -0.2917146682739258 -0.1828058660030365 0.9774773120880127 -0.10519730299711227 0.7133582830429077 0.9042637944221497 0 1.0 0 0.0 0 0.0 0 0.0 -0.2917146682739258 2.5888888835906982 -0.496680349111557 -0.10519730299711227 0.9774773120880127 -0.1828058660030365 0.7038067579269409 0.7858607769012451 0 1.0 0 0.0 0 0.0 0 0.0 -0.5382605791091919 2.51111102104187 -0.9164553880691528 -0.15491195023059845 0.9503769278526306 -0.269753098487854 0.7985010147094727 0.7418715357780457 0 1.0 0 0.0 0 0.0 0 0.0 -0.496680349111557 2.5888888835906982 -0.2917146682739258 -0.1828058660030365 0.9774773120880127 -0.10519730299711227 0.7133582830429077 0.9042637944221497 0 1.0 0 0.0 0 0.0 0 0.0 -0.17303703725337982 2.6999998092651367 -0.10162962973117828 -0.7116000652313232 0.5714285969734192 -0.40870386362075806 0.5577818155288696 0.7865083813667297 0 1.0 0 0.0 0 0.0 0 0.0 -0.10162962973117828 2.700000047683716 -0.17303703725337982 -0.40870386362075806 0.5714285969734192 -0.7116000652313232 0.5817010402679443 0.7591943740844727 0 1.0 0 0.0 0 0.0 0 0.0 -0.2917146682739258 2.5888888835906982 -0.496680349111557 -0.10519730299711227 0.9774773120880127 -0.1828058660030365 0.7038067579269409 0.7858607769012451 0 1.0 0 0.0 0 0.0 0 0.0 -1.2999999523162842 2.4000000953674316 -0.0 -0.4190496504306793 0.9079561829566956 -0.0 1.097541332244873 0.776390016078949 0 1.0 0 0.0 0 0.0 0 0.0 -1.0592591762542725 2.51111102104187 -0.0 -0.3116855323314667 0.9501632452011108 -0.0 1.1163207292556763 0.8349870443344116 0 1.0 0 0.0 0 0.0 0 0.0 -0.9164553880691528 2.51111102104187 -0.5382605791091919 -0.269753098487854 0.9503769278526306 -0.15491195023059845 0.9121720790863037 0.8325029611587524 0 1.0 0 0.0 0 0.0 0 0.0 -1.124740719795227 2.4000000953674316 -0.6605925559997559 -0.36194953322410583 0.9084749817848206 -0.20886868238449097 0.9360653162002563 0.7810214757919312 0 1.0 0 0.0 0 0.0 0 0.0 -1.0592591762542725 2.51111102104187 -0.0 -0.3116855323314667 0.9501632452011108 -0.0 1.1163207292556763 0.8349870443344116 0 1.0 0 0.0 0 0.0 0 0.0 -0.5740740895271301 2.5888888835906982 -0.0 -0.21173742413520813 0.9772942066192627 -0.0 1.3661776781082153 0.9340194463729858 0 1.0 0 0.0 0 0.0 0 0.0 -0.496680349111557 2.5888888835906982 -0.2917146682739258 -0.1828058660030365 0.9774773120880127 -0.10519730299711227 0.7133582830429077 0.9042637944221497 0 1.0 0 0.0 0 0.0 0 0.0 -0.9164553880691528 2.51111102104187 -0.5382605791091919 -0.269753098487854 0.9503769278526306 -0.15491195023059845 0.9121720790863037 0.8325029611587524 0 1.0 0 0.0 0 0.0 0 0.0 -0.5740740895271301 2.5888888835906982 -0.0 -0.21173742413520813 0.9772942066192627 -0.0 0.36617764830589294 0.9340194463729858 0 1.0 0 0.0 0 0.0 0 0.0 -0.20000000298023224 2.700000047683716 -0.0 -0.8212835788726807 0.5705130100250244 -0.0 0.5197122097015381 0.7878735065460205 0 1.0 0 0.0 0 0.0 0 0.0 -0.17303703725337982 2.6999998092651367 -0.10162962973117828 -0.7116000652313232 0.5714285969734192 -0.40870386362075806 0.5577818155288696 0.7865083813667297 0 1.0 0 0.0 0 0.0 0 0.0 -0.496680349111557 2.5888888835906982 -0.2917146682739258 -0.1828058660030365 0.9774773120880127 -0.10519730299711227 0.7133582830429077 0.9042637944221497 0 1.0 0 0.0 0 0.0 0 0.0 1.124740719795227 2.4000000953674316 -0.6605925559997559 0.36194953322410583 0.9084749817848206 -0.20886868238449097 0.6261259913444519 0.4934276342391968 0 1.0 0 0.0 0 0.0 0 0.0 0.9164553880691528 2.51111102104187 -0.5382605791091919 0.269753098487854 0.9503769278526306 -0.15491195023059845 0.6183353066444397 0.519606351852417 0 1.0 0 0.0 0 0.0 0 0.0 1.0592591762542725 2.51111102104187 -0.0 0.3116855323314667 0.9501632452011108 -0.0 0.5615435838699341 0.4852682948112488 0 1.0 0 0.0 0 0.0 0 0.0 1.2999999523162842 2.4000000953674316 -0.0 0.4190496504306793 0.9079561829566956 -0.0 0.5643860697746277 0.45672929286956787 0 1.0 0 0.0 0 0.0 0 0.0 0.9164553880691528 2.51111102104187 -0.5382605791091919 0.269753098487854 0.9503769278526306 -0.15491195023059845 0.6183353066444397 0.519606351852417 0 1.0 0 0.0 0 0.0 0 0.0 0.496680349111557 2.5888888835906982 -0.2917146682739258 0.1828058660030365 0.9774773120880127 -0.10519730299711227 0.5976952910423279 0.5767679214477539 0 1.0 0 0.0 0 0.0 0 0.0 0.5740740895271301 2.5888888835906982 -0.0 0.21173742413520813 0.9772942066192627 -0.0 0.555172324180603 0.5494076013565063 0 1.0 0 0.0 0 0.0 0 0.0 1.0592591762542725 2.51111102104187 -0.0 0.3116855323314667 0.9501632452011108 -0.0 0.5615435838699341 0.4852682948112488 0 1.0 0 0.0 0 0.0 0 0.0 0.496680349111557 2.5888888835906982 -0.2917146682739258 0.1828058660030365 0.9774773120880127 -0.10519730299711227 0.5976952910423279 0.5767679214477539 0 1.0 0 0.0 0 0.0 0 0.0 0.17303703725337982 2.700000047683716 -0.10162962973117828 0.7116000652313232 0.5714285969734192 -0.40870386362075806 0.564504861831665 0.6604757905006409 0 1.0 0 0.0 0 0.0 0 0.0 0.20000000298023224 2.700000047683716 -0.0 0.8212835788726807 0.5705130100250244 -0.0 0.5445703268051147 0.6458508968353271 0 1.0 0 0.0 0 0.0 0 0.0 0.5740740895271301 2.5888888835906982 -0.0 0.21173742413520813 0.9772942066192627 -0.0 0.555172324180603 0.5494076013565063 0 1.0 0 0.0 0 0.0 0 0.0 0.6605925559997559 2.4000000953674316 -1.124740719795227 0.20886868238449097 0.9084749817848206 -0.36194953322410583 0.6835131645202637 0.5485973954200745 0 1.0 0 0.0 0 0.0 0 0.0 0.5382605791091919 2.51111102104187 -0.9164553880691528 0.15491195023059845 0.9503769278526306 -0.269753098487854 0.671147882938385 0.5729851722717285 0 1.0 0 0.0 0 0.0 0 0.0 0.9164553880691528 2.51111102104187 -0.5382605791091919 0.269753098487854 0.9503769278526306 -0.15491195023059845 0.6183353066444397 0.519606351852417 0 1.0 0 0.0 0 0.0 0 0.0 1.124740719795227 2.4000000953674316 -0.6605925559997559 0.36194953322410583 0.9084749817848206 -0.20886868238449097 0.6261259913444519 0.4934276342391968 0 1.0 0 0.0 0 0.0 0 0.0 0.5382605791091919 2.51111102104187 -0.9164553880691528 0.15491195023059845 0.9503769278526306 -0.269753098487854 0.671147882938385 0.5729851722717285 0 1.0 0 0.0 0 0.0 0 0.0 0.2917146682739258 2.5888888835906982 -0.496680349111557 0.10519730299711227 0.9774773120880127 -0.1828058660030365 0.6358808279037476 0.6224647760391235 0 1.0 0 0.0 0 0.0 0 0.0 0.496680349111557 2.5888888835906982 -0.2917146682739258 0.1828058660030365 0.9774773120880127 -0.10519730299711227 0.5976952910423279 0.5767679214477539 0 1.0 0 0.0 0 0.0 0 0.0 0.9164553880691528 2.51111102104187 -0.5382605791091919 0.269753098487854 0.9503769278526306 -0.15491195023059845 0.6183353066444397 0.519606351852417 0 1.0 0 0.0 0 0.0 0 0.0 0.2917146682739258 2.5888888835906982 -0.496680349111557 0.10519730299711227 0.9774773120880127 -0.1828058660030365 0.6358808279037476 0.6224647760391235 0 1.0 0 0.0 0 0.0 0 0.0 0.10162962973117828 2.6999998092651367 -0.17303703725337982 0.40870386362075806 0.5714285969734192 -0.7116000652313232 0.579617977142334 0.6857367753982544 0 1.0 0 0.0 0 0.0 0 0.0 0.17303703725337982 2.700000047683716 -0.10162962973117828 0.7116000652313232 0.5714285969734192 -0.40870386362075806 0.564504861831665 0.6604757905006409 0 1.0 0 0.0 0 0.0 0 0.0 0.496680349111557 2.5888888835906982 -0.2917146682739258 0.1828058660030365 0.9774773120880127 -0.10519730299711227 0.5976952910423279 0.5767679214477539 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.4000000953674316 -1.2999999523162842 0.0 0.9079561829566956 -0.4190496504306793 0.7460972666740417 0.6234467029571533 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.51111102104187 -1.0592591762542725 0.0 0.9501632452011108 -0.3116855323314667 0.7281266450881958 0.648444652557373 0 1.0 0 0.0 0 0.0 0 0.0 0.5382605791091919 2.51111102104187 -0.9164553880691528 0.15491195023059845 0.9503769278526306 -0.269753098487854 0.671147882938385 0.5729851722717285 0 1.0 0 0.0 0 0.0 0 0.0 0.6605925559997559 2.4000000953674316 -1.124740719795227 0.20886868238449097 0.9084749817848206 -0.36194953322410583 0.6835131645202637 0.5485973954200745 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.51111102104187 -1.0592591762542725 0.0 0.9501632452011108 -0.3116855323314667 0.7281266450881958 0.648444652557373 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.5888888835906982 -0.5740740895271301 0.0 0.9772942066192627 -0.21173742413520813 0.6721643209457397 0.6914557218551636 0 1.0 0 0.0 0 0.0 0 0.0 0.2917146682739258 2.5888888835906982 -0.496680349111557 0.10519730299711227 0.9774773120880127 -0.1828058660030365 0.6358808279037476 0.6224647760391235 0 1.0 0 0.0 0 0.0 0 0.0 0.5382605791091919 2.51111102104187 -0.9164553880691528 0.15491195023059845 0.9503769278526306 -0.269753098487854 0.671147882938385 0.5729851722717285 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.5888888835906982 -0.5740740895271301 0.0 0.9772942066192627 -0.21173742413520813 0.6721643209457397 0.6914557218551636 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.700000047683716 -0.20000000298023224 0.0 0.5705130100250244 -0.8212835788726807 0.5873590707778931 0.720962405204773 0 1.0 0 0.0 0 0.0 0 0.0 0.10162962973117828 2.6999998092651367 -0.17303703725337982 0.40870386362075806 0.5714285969734192 -0.7116000652313232 0.579617977142334 0.6857367753982544 0 1.0 0 0.0 0 0.0 0 0.0 0.2917146682739258 2.5888888835906982 -0.496680349111557 0.10519730299711227 0.9774773120880127 -0.1828058660030365 0.6358808279037476 0.6224647760391235 0 1.0 0 0.0 0 0.0 0 0.0 0.7622222304344177 0.15000000596046448 -1.297777771949768 0.3505966365337372 -0.7111117839813232 -0.6093935966491699 0.7510849833488464 0.31206804513931274 0 1.0 0 0.0 0 0.0 0 0.0 0.7255226373672485 0.07777778059244156 -1.2352921962738037 0.24127933382987976 -0.8748130798339844 -0.4200262427330017 0.7540410757064819 0.30017149448394775 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.07777778059244156 -1.4277777671813965 0.0 -0.8745994567871094 -0.4848170280456543 0.8214733600616455 0.3509402871131897 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.15000000596046448 -1.5 0.0 -0.7099215388298035 -0.7042451500892639 0.8191912174224854 0.3644620180130005 0 1.0 0 0.0 0 0.0 0 0.0 0.7255226373672485 0.07777778059244156 -1.2352921962738037 0.24127933382987976 -0.8748130798339844 -0.4200262427330017 0.7540410757064819 0.30017149448394775 0 1.0 0 0.0 0 0.0 0 0.0 0.5194402933120728 0.02222222276031971 -0.8844115138053894 0.04379406198859215 -0.9960936307907104 -0.07638783007860184 0.7632773518562317 0.25209832191467285 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.02222222276031971 -1.0222222805023193 0.0 -0.9960936307907104 -0.08819849044084549 0.8270381689071655 0.2939903736114502 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.07777778059244156 -1.4277777671813965 0.0 -0.8745994567871094 -0.4848170280456543 0.8214733600616455 0.3509402871131897 0 1.0 0 0.0 0 0.0 0 0.0 0.5194402933120728 0.02222222276031971 -0.8844115138053894 0.04379406198859215 -0.9960936307907104 -0.07638783007860184 0.7632773518562317 0.25209832191467285 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 -0.0 0.0 -1.0 -0.0 0.8970043659210205 0.07225430011749268 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.02222222276031971 -1.0222222805023193 0.0 -0.9960936307907104 -0.08819849044084549 0.8270381689071655 0.2939903736114502 0 1.0 0 0.0 0 0.0 0 0.0 1.297777771949768 0.15000000596046448 -0.7622222304344177 0.6093935966491699 -0.7111117839813232 -0.3505966365337372 0.6829252243041992 0.25979578495025635 0 1.0 0 0.0 0 0.0 0 0.0 1.2352921962738037 0.07777778059244156 -0.7255226373672485 0.4200262427330017 -0.8748130798339844 -0.24127933382987976 0.6862674951553345 0.24870890378952026 0 1.0 0 0.0 0 0.0 0 0.0 0.7255226373672485 0.07777778059244156 -1.2352921962738037 0.24127933382987976 -0.8748130798339844 -0.4200262427330017 0.7540410757064819 0.30017149448394775 0 1.0 0 0.0 0 0.0 0 0.0 0.7622222304344177 0.15000000596046448 -1.297777771949768 0.3505966365337372 -0.7111117839813232 -0.6093935966491699 0.7510849833488464 0.31206804513931274 0 1.0 0 0.0 0 0.0 0 0.0 1.2352921962738037 0.07777778059244156 -0.7255226373672485 0.4200262427330017 -0.8748130798339844 -0.24127933382987976 0.6862674951553345 0.24870890378952026 0 1.0 0 0.0 0 0.0 0 0.0 0.8844115138053894 0.02222222276031971 -0.5194402933120728 0.07638783007860184 -0.9960936307907104 -0.04379406198859215 0.6987160444259644 0.20644497871398926 0 1.0 0 0.0 0 0.0 0 0.0 0.5194402933120728 0.02222222276031971 -0.8844115138053894 0.04379406198859215 -0.9960936307907104 -0.07638783007860184 0.7632773518562317 0.25209832191467285 0 1.0 0 0.0 0 0.0 0 0.0 0.7255226373672485 0.07777778059244156 -1.2352921962738037 0.24127933382987976 -0.8748130798339844 -0.4200262427330017 0.7540410757064819 0.30017149448394775 0 1.0 0 0.0 0 0.0 0 0.0 0.8844115138053894 0.02222222276031971 -0.5194402933120728 0.07638783007860184 -0.9960936307907104 -0.04379406198859215 0.6987160444259644 0.20644497871398926 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 -0.0 0.0 -1.0 -0.0 0.8970043659210205 0.07225430011749268 0 1.0 0 0.0 0 0.0 0 0.0 0.5194402933120728 0.02222222276031971 -0.8844115138053894 0.04379406198859215 -0.9960936307907104 -0.07638783007860184 0.7632773518562317 0.25209832191467285 0 1.0 0 0.0 0 0.0 0 0.0 1.5 0.15000000596046448 -0.0 0.7042451500892639 -0.7099215388298035 -0.0 0.600112795829773 0.21345442533493042 0 1.0 0 0.0 0 0.0 0 0.0 1.4277777671813965 0.07777778059244156 -0.0 0.4848170280456543 -0.8745994567871094 -0.0 0.6032134890556335 0.2022572159767151 0 1.0 0 0.0 0 0.0 0 0.0 1.2352921962738037 0.07777778059244156 -0.7255226373672485 0.4200262427330017 -0.8748130798339844 -0.24127933382987976 0.6862674951553345 0.24870890378952026 0 1.0 0 0.0 0 0.0 0 0.0 1.297777771949768 0.15000000596046448 -0.7622222304344177 0.6093935966491699 -0.7111117839813232 -0.3505966365337372 0.6829252243041992 0.25979578495025635 0 1.0 0 0.0 0 0.0 0 0.0 1.4277777671813965 0.07777778059244156 -0.0 0.4848170280456543 -0.8745994567871094 -0.0 0.6032134890556335 0.2022572159767151 0 1.0 0 0.0 0 0.0 0 0.0 1.0222222805023193 0.02222222276031971 -0.0 0.08819849044084549 -0.9960936307907104 -0.0 0.617790937423706 0.16165071725845337 0 1.0 0 0.0 0 0.0 0 0.0 0.8844115138053894 0.02222222276031971 -0.5194402933120728 0.07638783007860184 -0.9960936307907104 -0.04379406198859215 0.6987160444259644 0.20644497871398926 0 1.0 0 0.0 0 0.0 0 0.0 1.2352921962738037 0.07777778059244156 -0.7255226373672485 0.4200262427330017 -0.8748130798339844 -0.24127933382987976 0.6862674951553345 0.24870890378952026 0 1.0 0 0.0 0 0.0 0 0.0 1.0222222805023193 0.02222222276031971 -0.0 0.08819849044084549 -0.9960936307907104 -0.0 0.617790937423706 0.16165071725845337 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 -0.0 0.0 -1.0 -0.0 0.8970043659210205 0.07225430011749268 0 1.0 0 0.0 0 0.0 0 0.0 0.8844115138053894 0.02222222276031971 -0.5194402933120728 0.07638783007860184 -0.9960936307907104 -0.04379406198859215 0.6987160444259644 0.20644497871398926 0 1.0 0 0.0 0 0.0 0 0.0 -1.2977778911590576 0.15000000596046448 -0.7622222900390625 -0.6093935966491699 -0.7111117839813232 -0.3505966365337372 0.9665573835372925 0.4220300316810608 0 1.0 0 0.0 0 0.0 0 0.0 -1.2352921962738037 0.07777778059244156 -0.7255226373672485 -0.4200262427330017 -0.8748130798339844 -0.24127933382987976 0.9663537740707397 0.4050024747848511 0 1.0 0 0.0 0 0.0 0 0.0 -1.4277777671813965 0.07777778059244156 -0.0 -0.4848170280456543 -0.8745994567871094 -0.0 1.0485270023345947 0.38783693313598633 0 1.0 0 0.0 0 0.0 0 0.0 -1.5 0.15000000596046448 -0.0 -0.7042451500892639 -0.7099215388298035 -0.0 1.0504302978515625 0.4051086902618408 0 1.0 0 0.0 0 0.0 0 0.0 -1.2352921962738037 0.07777778059244156 -0.7255226373672485 -0.4200262427330017 -0.8748130798339844 -0.24127933382987976 0.9663537740707397 0.4050024747848511 0 1.0 0 0.0 0 0.0 0 0.0 -0.8844115138053894 0.02222222276031971 -0.5194402933120728 -0.07638783007860184 -0.9960936307907104 -0.04379406198859215 0.9622154831886292 0.331081748008728 0 1.0 0 0.0 0 0.0 0 0.0 -1.0222222805023193 0.02222222276031971 -0.0 -0.08819849044084549 -0.9960936307907104 -0.0 1.0389765501022339 0.31207895278930664 0 1.0 0 0.0 0 0.0 0 0.0 -1.4277777671813965 0.07777778059244156 -0.0 -0.4848170280456543 -0.8745994567871094 -0.0 1.0485270023345947 0.38783693313598633 0 1.0 0 0.0 0 0.0 0 0.0 -0.8844115138053894 0.02222222276031971 -0.5194402933120728 -0.07638783007860184 -0.9960936307907104 -0.04379406198859215 0.9622154831886292 0.331081748008728 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 -0.0 0.0 -1.0 -0.0 0.8970043659210205 0.07225430011749268 0 1.0 0 0.0 0 0.0 0 0.0 -1.0222222805023193 0.02222222276031971 -0.0 -0.08819849044084549 -0.9960936307907104 -0.0 1.0389765501022339 0.31207895278930664 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222900390625 0.15000000596046448 -1.2977778911590576 -0.3505966365337372 -0.7111117839813232 -0.6093935966491699 0.8909897804260254 0.40578246116638184 0 1.0 0 0.0 0 0.0 0 0.0 -0.7255226373672485 0.07777778059244156 -1.2352921962738037 -0.24127933382987976 -0.8748130798339844 -0.4200262427330017 0.892227292060852 0.3902755379676819 0 1.0 0 0.0 0 0.0 0 0.0 -1.2352921962738037 0.07777778059244156 -0.7255226373672485 -0.4200262427330017 -0.8748130798339844 -0.24127933382987976 0.9663537740707397 0.4050024747848511 0 1.0 0 0.0 0 0.0 0 0.0 -1.2977778911590576 0.15000000596046448 -0.7622222900390625 -0.6093935966491699 -0.7111117839813232 -0.3505966365337372 0.9665573835372925 0.4220300316810608 0 1.0 0 0.0 0 0.0 0 0.0 -0.7255226373672485 0.07777778059244156 -1.2352921962738037 -0.24127933382987976 -0.8748130798339844 -0.4200262427330017 0.892227292060852 0.3902755379676819 0 1.0 0 0.0 0 0.0 0 0.0 -0.5194402933120728 0.02222222276031971 -0.8844115138053894 -0.04379406198859215 -0.9960936307907104 -0.07638783007860184 0.8933113813400269 0.3235763907432556 0 1.0 0 0.0 0 0.0 0 0.0 -0.8844115138053894 0.02222222276031971 -0.5194402933120728 -0.07638783007860184 -0.9960936307907104 -0.04379406198859215 0.9622154831886292 0.331081748008728 0 1.0 0 0.0 0 0.0 0 0.0 -1.2352921962738037 0.07777778059244156 -0.7255226373672485 -0.4200262427330017 -0.8748130798339844 -0.24127933382987976 0.9663537740707397 0.4050024747848511 0 1.0 0 0.0 0 0.0 0 0.0 -0.5194402933120728 0.02222222276031971 -0.8844115138053894 -0.04379406198859215 -0.9960936307907104 -0.07638783007860184 0.8933113813400269 0.3235763907432556 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 -0.0 0.0 -1.0 -0.0 0.8970043659210205 0.07225430011749268 0 1.0 0 0.0 0 0.0 0 0.0 -0.8844115138053894 0.02222222276031971 -0.5194402933120728 -0.07638783007860184 -0.9960936307907104 -0.04379406198859215 0.9622154831886292 0.331081748008728 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.15000000596046448 -1.5 0.0 -0.7099215388298035 -0.7042451500892639 0.8191912174224854 0.3644620180130005 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.07777778059244156 -1.4277777671813965 0.0 -0.8745994567871094 -0.4848170280456543 0.8214733600616455 0.3509402871131897 0 1.0 0 0.0 0 0.0 0 0.0 -0.7255226373672485 0.07777778059244156 -1.2352921962738037 -0.24127933382987976 -0.8748130798339844 -0.4200262427330017 0.892227292060852 0.3902755379676819 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222900390625 0.15000000596046448 -1.2977778911590576 -0.3505966365337372 -0.7111117839813232 -0.6093935966491699 0.8909897804260254 0.40578246116638184 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.07777778059244156 -1.4277777671813965 0.0 -0.8745994567871094 -0.4848170280456543 0.8214733600616455 0.3509402871131897 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.02222222276031971 -1.0222222805023193 0.0 -0.9960936307907104 -0.08819849044084549 0.8270381689071655 0.2939903736114502 0 1.0 0 0.0 0 0.0 0 0.0 -0.5194402933120728 0.02222222276031971 -0.8844115138053894 -0.04379406198859215 -0.9960936307907104 -0.07638783007860184 0.8933113813400269 0.3235763907432556 0 1.0 0 0.0 0 0.0 0 0.0 -0.7255226373672485 0.07777778059244156 -1.2352921962738037 -0.24127933382987976 -0.8748130798339844 -0.4200262427330017 0.892227292060852 0.3902755379676819 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.02222222276031971 -1.0222222805023193 0.0 -0.9960936307907104 -0.08819849044084549 0.8270381689071655 0.2939903736114502 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 -0.0 0.0 -1.0 -0.0 0.8970043659210205 0.07225430011749268 0 1.0 0 0.0 0 0.0 0 0.0 -0.5194402933120728 0.02222222276031971 -0.8844115138053894 -0.04379406198859215 -0.9960936307907104 -0.07638783007860184 0.8933113813400269 0.3235763907432556 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222900390625 0.15000000596046448 1.2977778911590576 -0.3505966365337372 -0.7111117839813232 0.6093935966491699 0.21255284547805786 0.3001919388771057 0 1.0 0 0.0 0 0.0 0 0.0 -0.7255226373672485 0.07777778059244156 1.2352921962738037 -0.24127933382987976 -0.8748130798339844 0.4200262427330017 0.20883628726005554 0.28566569089889526 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.07777778059244156 1.4277777671813965 0.0 -0.8745994567871094 0.4848170280456543 0.2945656180381775 0.22730082273483276 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.15000000596046448 1.5 0.0 -0.7099215388298035 0.7042451500892639 0.29800066351890564 0.24066346883773804 0 1.0 0 0.0 0 0.0 0 0.0 -0.7255226373672485 0.07777778059244156 1.2352921962738037 -0.24127933382987976 -0.8748130798339844 0.4200262427330017 0.20883628726005554 0.28566569089889526 0 1.0 0 0.0 0 0.0 0 0.0 -0.5194402933120728 0.02222222276031971 0.8844115138053894 -0.04379406198859215 -0.9960936307907104 0.07638783007860184 0.1950553059577942 0.22187775373458862 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.02222222276031971 1.0222222805023193 0.0 -0.9960936307907104 0.08819849044084549 0.2835932970046997 0.17100036144256592 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.07777778059244156 1.4277777671813965 0.0 -0.8745994567871094 0.4848170280456543 0.2945656180381775 0.22730082273483276 0 1.0 0 0.0 0 0.0 0 0.0 -0.5194402933120728 0.02222222276031971 0.8844115138053894 -0.04379406198859215 -0.9960936307907104 0.07638783007860184 1.1950552463531494 0.22187775373458862 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 -0.0 0.0 -1.0 -0.0 0.8970043659210205 0.07225430011749268 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.02222222276031971 1.0222222805023193 0.0 -0.9960936307907104 0.08819849044084549 1.2835932970046997 0.17100036144256592 0 1.0 0 0.0 0 0.0 0 0.0 -1.2977778911590576 0.15000000596046448 0.7622222900390625 -0.6093935966491699 -0.7111117839813232 0.3505966365337372 0.13414856791496277 0.35897499322891235 0 1.0 0 0.0 0 0.0 0 0.0 -1.2352921962738037 0.07777778059244156 0.7255226373672485 -0.4200262427330017 -0.8748130798339844 0.24127933382987976 0.13097339868545532 0.34291285276412964 0 1.0 0 0.0 0 0.0 0 0.0 -0.7255226373672485 0.07777778059244156 1.2352921962738037 -0.24127933382987976 -0.8748130798339844 0.4200262427330017 0.20883628726005554 0.28566569089889526 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222900390625 0.15000000596046448 1.2977778911590576 -0.3505966365337372 -0.7111117839813232 0.6093935966491699 0.21255284547805786 0.3001919388771057 0 1.0 0 0.0 0 0.0 0 0.0 -1.2352921962738037 0.07777778059244156 0.7255226373672485 -0.4200262427330017 -0.8748130798339844 0.24127933382987976 0.13097339868545532 0.34291285276412964 0 1.0 0 0.0 0 0.0 0 0.0 -0.8844115138053894 0.02222222276031971 0.5194402933120728 -0.07638783007860184 -0.9960936307907104 0.04379406198859215 0.11793729662895203 0.2717345356941223 0 1.0 0 0.0 0 0.0 0 0.0 -0.5194402933120728 0.02222222276031971 0.8844115138053894 -0.04379406198859215 -0.9960936307907104 0.07638783007860184 0.1950553059577942 0.22187775373458862 0 1.0 0 0.0 0 0.0 0 0.0 -0.7255226373672485 0.07777778059244156 1.2352921962738037 -0.24127933382987976 -0.8748130798339844 0.4200262427330017 0.20883628726005554 0.28566569089889526 0 1.0 0 0.0 0 0.0 0 0.0 -0.8844115138053894 0.02222222276031971 0.5194402933120728 -0.07638783007860184 -0.9960936307907104 0.04379406198859215 1.1179373264312744 0.2717345356941223 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 -0.0 0.0 -1.0 -0.0 0.8970043659210205 0.07225430011749268 0 1.0 0 0.0 0 0.0 0 0.0 -0.5194402933120728 0.02222222276031971 0.8844115138053894 -0.04379406198859215 -0.9960936307907104 0.07638783007860184 1.1950552463531494 0.22187775373458862 0 1.0 0 0.0 0 0.0 0 0.0 -1.5 0.15000000596046448 -0.0 -0.7042451500892639 -0.7099215388298035 -0.0 0.05043032765388489 0.4051086902618408 0 1.0 0 0.0 0 0.0 0 0.0 -1.4277777671813965 0.07777778059244156 -0.0 -0.4848170280456543 -0.8745994567871094 -0.0 0.0485270619392395 0.38783693313598633 0 1.0 0 0.0 0 0.0 0 0.0 -1.2352921962738037 0.07777778059244156 0.7255226373672485 -0.4200262427330017 -0.8748130798339844 0.24127933382987976 0.13097339868545532 0.34291285276412964 0 1.0 0 0.0 0 0.0 0 0.0 -1.2977778911590576 0.15000000596046448 0.7622222900390625 -0.6093935966491699 -0.7111117839813232 0.3505966365337372 0.13414856791496277 0.35897499322891235 0 1.0 0 0.0 0 0.0 0 0.0 -1.4277777671813965 0.07777778059244156 -0.0 -0.4848170280456543 -0.8745994567871094 -0.0 0.0485270619392395 0.38783693313598633 0 1.0 0 0.0 0 0.0 0 0.0 -1.0222222805023193 0.02222222276031971 -0.0 -0.08819849044084549 -0.9960936307907104 -0.0 0.03897655010223389 0.31207895278930664 0 1.0 0 0.0 0 0.0 0 0.0 -0.8844115138053894 0.02222222276031971 0.5194402933120728 -0.07638783007860184 -0.9960936307907104 0.04379406198859215 0.11793729662895203 0.2717345356941223 0 1.0 0 0.0 0 0.0 0 0.0 -1.2352921962738037 0.07777778059244156 0.7255226373672485 -0.4200262427330017 -0.8748130798339844 0.24127933382987976 0.13097339868545532 0.34291285276412964 0 1.0 0 0.0 0 0.0 0 0.0 -1.0222222805023193 0.02222222276031971 -0.0 -0.08819849044084549 -0.9960936307907104 -0.0 1.0389765501022339 0.31207895278930664 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 -0.0 0.0 -1.0 -0.0 0.8970043659210205 0.07225430011749268 0 1.0 0 0.0 0 0.0 0 0.0 -0.8844115138053894 0.02222222276031971 0.5194402933120728 -0.07638783007860184 -0.9960936307907104 0.04379406198859215 1.1179373264312744 0.2717345356941223 0 1.0 0 0.0 0 0.0 0 0.0 1.297777771949768 0.15000000596046448 0.7622222304344177 0.6093935966491699 -0.7111117839813232 0.3505966365337372 0.49929916858673096 0.19021719694137573 0 1.0 0 0.0 0 0.0 0 0.0 1.2352921962738037 0.07777778059244156 0.7255226373672485 0.4200262427330017 -0.8748130798339844 0.24127933382987976 0.5004870891571045 0.17821049690246582 0 1.0 0 0.0 0 0.0 0 0.0 1.4277777671813965 0.07777778059244156 -0.0 0.4848170280456543 -0.8745994567871094 -0.0 0.6032134890556335 0.2022572159767151 0 1.0 0 0.0 0 0.0 0 0.0 1.5 0.15000000596046448 -0.0 0.7042451500892639 -0.7099215388298035 -0.0 0.600112795829773 0.21345442533493042 0 1.0 0 0.0 0 0.0 0 0.0 1.2352921962738037 0.07777778059244156 0.7255226373672485 0.4200262427330017 -0.8748130798339844 0.24127933382987976 0.5004870891571045 0.17821049690246582 0 1.0 0 0.0 0 0.0 0 0.0 0.8844115138053894 0.02222222276031971 0.5194402933120728 0.07638783007860184 -0.9960936307907104 0.04379406198859215 0.510748028755188 0.13395017385482788 0 1.0 0 0.0 0 0.0 0 0.0 1.0222222805023193 0.02222222276031971 -0.0 0.08819849044084549 -0.9960936307907104 -0.0 0.617790937423706 0.16165071725845337 0 1.0 0 0.0 0 0.0 0 0.0 1.4277777671813965 0.07777778059244156 -0.0 0.4848170280456543 -0.8745994567871094 -0.0 0.6032134890556335 0.2022572159767151 0 1.0 0 0.0 0 0.0 0 0.0 0.8844115138053894 0.02222222276031971 0.5194402933120728 0.07638783007860184 -0.9960936307907104 0.04379406198859215 0.510748028755188 0.13395017385482788 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 -0.0 0.0 -1.0 -0.0 0.8970043659210205 0.07225430011749268 0 1.0 0 0.0 0 0.0 0 0.0 1.0222222805023193 0.02222222276031971 -0.0 0.08819849044084549 -0.9960936307907104 -0.0 0.617790937423706 0.16165071725845337 0 1.0 0 0.0 0 0.0 0 0.0 0.7622222900390625 0.15000000596046448 1.2977778911590576 0.3505966365337372 -0.7111117839813232 0.6093935966491699 0.3956698775291443 0.19993311166763306 0 1.0 0 0.0 0 0.0 0 0.0 0.7255226373672485 0.07777778059244156 1.2352921962738037 0.24127933382987976 -0.8748130798339844 0.4200262427330017 0.39399421215057373 0.18722987174987793 0 1.0 0 0.0 0 0.0 0 0.0 1.2352921962738037 0.07777778059244156 0.7255226373672485 0.4200262427330017 -0.8748130798339844 0.24127933382987976 0.5004870891571045 0.17821049690246582 0 1.0 0 0.0 0 0.0 0 0.0 1.297777771949768 0.15000000596046448 0.7622222304344177 0.6093935966491699 -0.7111117839813232 0.3505966365337372 0.49929916858673096 0.19021719694137573 0 1.0 0 0.0 0 0.0 0 0.0 0.7255226373672485 0.07777778059244156 1.2352921962738037 0.24127933382987976 -0.8748130798339844 0.4200262427330017 0.39399421215057373 0.18722987174987793 0 1.0 0 0.0 0 0.0 0 0.0 0.5194402933120728 0.02222222276031971 0.8844115138053894 0.04379406198859215 -0.9960936307907104 0.07638783007860184 0.3923133611679077 0.1371731162071228 0 1.0 0 0.0 0 0.0 0 0.0 0.8844115138053894 0.02222222276031971 0.5194402933120728 0.07638783007860184 -0.9960936307907104 0.04379406198859215 0.510748028755188 0.13395017385482788 0 1.0 0 0.0 0 0.0 0 0.0 1.2352921962738037 0.07777778059244156 0.7255226373672485 0.4200262427330017 -0.8748130798339844 0.24127933382987976 0.5004870891571045 0.17821049690246582 0 1.0 0 0.0 0 0.0 0 0.0 0.5194402933120728 0.02222222276031971 0.8844115138053894 0.04379406198859215 -0.9960936307907104 0.07638783007860184 1.3923133611679077 0.1371731162071228 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 -0.0 0.0 -1.0 -0.0 0.8970043659210205 0.07225430011749268 0 1.0 0 0.0 0 0.0 0 0.0 0.8844115138053894 0.02222222276031971 0.5194402933120728 0.07638783007860184 -0.9960936307907104 0.04379406198859215 0.510748028755188 0.13395017385482788 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.15000000596046448 1.5 0.0 -0.7099215388298035 0.7042451500892639 0.29800066351890564 0.24066346883773804 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.07777778059244156 1.4277777671813965 0.0 -0.8745994567871094 0.4848170280456543 0.2945656180381775 0.22730082273483276 0 1.0 0 0.0 0 0.0 0 0.0 0.7255226373672485 0.07777778059244156 1.2352921962738037 0.24127933382987976 -0.8748130798339844 0.4200262427330017 0.39399421215057373 0.18722987174987793 0 1.0 0 0.0 0 0.0 0 0.0 0.7622222900390625 0.15000000596046448 1.2977778911590576 0.3505966365337372 -0.7111117839813232 0.6093935966491699 0.3956698775291443 0.19993311166763306 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.07777778059244156 1.4277777671813965 0.0 -0.8745994567871094 0.4848170280456543 0.2945656180381775 0.22730082273483276 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.02222222276031971 1.0222222805023193 0.0 -0.9960936307907104 0.08819849044084549 0.2835932970046997 0.17100036144256592 0 1.0 0 0.0 0 0.0 0 0.0 0.5194402933120728 0.02222222276031971 0.8844115138053894 0.04379406198859215 -0.9960936307907104 0.07638783007860184 0.3923133611679077 0.1371731162071228 0 1.0 0 0.0 0 0.0 0 0.0 0.7255226373672485 0.07777778059244156 1.2352921962738037 0.24127933382987976 -0.8748130798339844 0.4200262427330017 0.39399421215057373 0.18722987174987793 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.02222222276031971 1.0222222805023193 0.0 -0.9960936307907104 0.08819849044084549 1.2835932970046997 0.17100036144256592 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 -0.0 0.0 -1.0 -0.0 0.8970043659210205 0.07225430011749268 0 1.0 0 0.0 0 0.0 0 0.0 0.5194402933120728 0.02222222276031971 0.8844115138053894 0.04379406198859215 -0.9960936307907104 0.07638783007860184 1.3923133611679077 0.1371731162071228 0 1.0 0 0.0 0 0.0 0 0.0 0 1 2 0 0 2 3 0 4 5 6 0 4 6 7 0 8 9 10 0 8 10 11 0 12 13 14 0 12 14 15 0 16 17 18 0 16 18 19 0 20 21 22 0 20 22 23 0 24 25 26 0 24 26 27 0 28 29 30 0 28 30 31 0 32 33 34 0 32 34 35 0 36 37 38 0 36 38 39 0 40 41 42 0 40 42 43 0 44 45 46 0 44 46 47 0 48 49 50 0 48 50 51 0 52 53 54 0 52 54 55 0 56 57 58 0 56 58 59 0 60 61 62 0 60 62 63 0 64 65 66 0 64 66 67 0 68 69 70 0 68 70 71 0 72 73 74 0 72 74 75 0 76 77 78 0 76 78 79 0 80 81 82 0 80 82 83 0 84 85 86 0 84 86 87 0 88 89 90 0 88 90 91 0 92 93 94 0 92 94 95 0 96 97 98 0 96 98 99 0 100 101 102 0 100 102 103 0 104 105 106 0 104 106 107 0 108 109 110 0 108 110 111 0 112 113 114 0 112 114 115 0 116 117 118 0 116 118 119 0 120 121 122 0 120 122 123 0 124 125 126 0 124 126 127 0 128 129 130 0 128 130 131 0 132 133 134 0 132 134 135 0 136 137 138 0 136 138 139 0 140 141 142 0 140 142 143 0 144 145 146 0 144 146 147 0 148 149 150 0 148 150 151 0 152 153 154 0 152 154 155 0 156 157 158 0 156 158 159 0 160 161 162 0 160 162 163 0 164 165 166 0 164 166 167 0 168 169 170 0 168 170 171 0 172 173 174 0 172 174 175 0 176 177 178 0 176 178 179 0 180 181 182 0 180 182 183 0 184 185 186 0 184 186 187 0 188 189 190 0 188 190 191 0 192 193 194 0 192 194 195 0 196 197 198 0 196 198 199 0 200 201 202 0 200 202 203 0 204 205 206 0 204 206 207 0 208 209 210 0 208 210 211 0 212 213 214 0 212 214 215 0 216 217 218 0 216 218 219 0 220 221 222 0 220 222 223 0 224 225 226 0 224 226 227 0 228 229 230 0 228 230 231 0 232 233 234 0 232 234 235 0 236 237 238 0 236 238 239 0 240 241 242 0 240 242 243 0 244 245 246 0 244 246 247 0 248 249 250 0 248 250 251 0 252 253 254 0 252 254 255 0 256 257 258 0 256 258 259 0 260 261 262 0 260 262 263 0 264 265 266 0 264 266 267 0 268 269 270 0 268 270 271 0 272 273 274 0 272 274 275 0 276 277 278 0 276 278 279 0 280 281 282 0 280 282 283 0 284 285 286 0 284 286 287 0 288 289 290 0 288 290 291 0 292 293 294 0 292 294 295 0 296 297 298 0 296 298 299 0 300 301 302 0 300 302 303 0 304 305 306 0 304 306 307 0 308 309 310 0 308 310 311 0 312 313 314 0 312 314 315 0 316 317 318 0 316 318 319 0 320 321 322 0 320 322 323 0 324 325 326 0 324 326 327 0 328 329 330 0 328 330 331 0 332 333 334 0 332 334 335 0 336 337 338 0 336 338 339 0 340 341 342 0 340 342 343 0 344 345 346 0 344 346 347 0 348 349 350 0 348 350 351 0 352 353 354 0 352 354 355 0 356 357 358 0 356 358 359 0 360 361 362 0 360 362 363 0 364 365 366 0 364 366 367 0 368 369 370 0 368 370 371 0 372 373 374 0 372 374 375 0 376 377 378 0 376 378 379 0 380 381 382 0 380 382 383 0 384 385 386 0 384 386 387 0 388 389 390 0 388 390 391 0 392 393 394 0 392 394 395 0 396 397 398 0 396 398 399 0 400 401 402 0 400 402 403 0 404 405 406 0 404 406 407 0 408 409 410 0 408 410 411 0 412 413 414 0 412 414 415 0 416 417 418 0 416 418 419 0 420 421 422 0 420 422 423 0 424 425 426 0 424 426 427 0 428 429 430 0 428 430 431 0 432 433 434 0 432 434 435 0 436 437 438 0 436 438 439 0 440 441 442 0 440 442 443 0 444 445 446 0 444 446 447 0 448 449 450 0 448 450 451 0 452 453 454 0 452 454 455 0 456 457 458 0 456 458 459 0 460 461 462 0 460 462 463 0 464 465 466 0 464 466 467 0 468 469 470 0 468 470 471 0 472 473 474 0 472 474 475 0 476 477 478 0 476 478 479 0 480 481 482 0 480 482 483 0 484 485 486 0 484 486 487 0 488 489 490 0 488 490 491 0 492 493 494 0 492 494 495 0 496 497 498 0 496 498 499 0 500 501 502 0 500 502 503 0 504 505 506 0 504 506 507 0 508 509 510 0 508 510 511 0 512 513 514 0 512 514 515 0 516 517 518 0 516 518 519 0 520 521 522 0 520 522 523 0 524 525 526 0 524 526 527 0 528 529 530 0 528 530 531 0 532 533 534 0 532 534 535 0 536 537 538 0 536 538 539 0 540 541 542 0 540 542 543 0 544 545 546 0 544 546 547 0 548 549 550 0 548 550 551 0 552 553 554 0 552 554 555 0 556 557 558 0 556 558 559 0 560 561 562 0 560 562 563 0 564 565 566 0 564 566 567 0 568 569 570 0 568 570 571 0 572 573 574 0 572 574 575 0 576 577 578 0 576 578 579 0 580 581 582 0 580 582 583 0 584 585 586 0 587 588 589 0 587 589 590 0 591 592 593 0 591 593 594 0 595 596 597 0 598 599 600 0 598 600 601 0 602 603 604 0 602 604 605 0 606 607 608 0 609 610 611 0 609 611 612 0 613 614 615 0 613 615 616 0 617 618 619 0 620 621 622 0 620 622 623 0 624 625 626 0 624 626 627 0 628 629 630 0 631 632 633 0 631 633 634 0 635 636 637 0 635 637 638 0 639 640 641 0 642 643 644 0 642 644 645 0 646 647 648 0 646 648 649 0 650 651 652 0 653 654 655 0 653 655 656 0 657 658 659 0 657 659 660 0 661 662 663 0 664 665 666 0 664 666 667 0 668 669 670 0 668 670 671 0 672 673 674 0 675 676 677 0 675 677 678 0 679 680 681 0 679 681 682 0 683 684 685 0 686 687 688 0 686 688 689 0 690 691 692 0 690 692 693 0 694 695 696 0 697 698 699 0 697 699 700 0 701 702 703 0 701 703 704 0 705 706 707 0 708 709 710 0 708 710 711 0 712 713 714 0 712 714 715 0 716 717 718 0 716 718 719 0 720 721 722 0 720 722 723 0 724 725 726 0 724 726 727 0 728 729 730 0 728 730 731 0 732 733 734 0 732 734 735 0 736 737 738 0 736 738 739 0 740 741 742 0 740 742 743 0 744 745 746 0 744 746 747 0 748 749 750 0 748 750 751 0 752 753 754 0 752 754 755 0 756 757 758 0 756 758 759 0 760 761 762 0 760 762 763 0 764 765 766 0 764 766 767 0 768 769 770 0 768 770 771 0 772 773 774 0 772 774 775 0 776 777 778 0 776 778 779 0 780 781 782 0 780 782 783 0 784 785 786 0 784 786 787 0 788 789 790 0 788 790 791 0 792 793 794 0 792 794 795 0 796 797 798 0 796 798 799 0 800 801 802 0 800 802 803 0 804 805 806 0 804 806 807 0 808 809 810 0 808 810 811 0 812 813 814 0 812 814 815 0 816 817 818 0 816 818 819 0 820 821 822 0 820 822 823 0 824 825 826 0 824 826 827 0 828 829 830 0 828 830 831 0 832 833 834 0 832 834 835 0 836 837 838 0 836 838 839 0 840 841 842 0 840 842 843 0 844 845 846 0 844 846 847 0 848 849 850 0 848 850 851 0 852 853 854 0 852 854 855 0 856 857 858 0 856 858 859 0 860 861 862 0 863 864 865 0 863 865 866 0 867 868 869 0 867 869 870 0 871 872 873 0 874 875 876 0 874 876 877 0 878 879 880 0 878 880 881 0 882 883 884 0 885 886 887 0 885 887 888 0 889 890 891 0 889 891 892 0 893 894 895 0 896 897 898 0 896 898 899 0 900 901 902 0 900 902 903 0 904 905 906 0 907 908 909 0 907 909 910 0 911 912 913 0 911 913 914 0 915 916 917 0 918 919 920 0 918 920 921 0 922 923 924 0 922 924 925 0 926 927 928 0 929 930 931 0 929 931 932 0 933 934 935 0 933 935 936 0 937 938 939 0 940 941 942 0 940 942 943 0 944 945 946 0 944 946 947 0 948 949 950 0 951 952 953 0 951 953 954 0 955 956 957 0 955 957 958 0 959 960 961 0 962 963 964 0 962 964 965 0 966 967 968 0 966 968 969 0 970 971 972 0 973 974 975 0 973 975 976 0 977 978 979 0 977 979 980 0 981 982 983 0 Root -1 0.0 0.0 0.0 0.0 1.0 0.0 0.0 ================================================ FILE: data/models/chamberpot2.dymdl ================================================ DYMDLv1 984 480 1 1 0 Material 0.7622222304344177 1.6000001430511475 1.297777771949768 0.3750419616699219 0.6591692566871643 0.65178382396698 0.43147653341293335 0.45172613859176636 0 1.0 0 0.0 0 0.0 0 0.0 0.7278751730918884 1.6583333015441895 1.23929762840271 0.19748526811599731 0.9179052114486694 0.34409618377685547 0.43381404876708984 0.46476656198501587 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6583333015441895 1.4324073791503906 0.0 0.9178136587142944 0.3969237208366394 0.36621230840682983 0.5129598379135132 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6000001430511475 1.5 0.0 0.6581011414527893 0.7528916001319885 0.36209404468536377 0.4997289776802063 0 1.0 0 0.0 0 0.0 0 0.0 0.7278751730918884 1.6583333015441895 1.23929762840271 0.19748526811599731 0.9179052114486694 0.34409618377685547 0.43381404876708984 0.46476656198501587 0 1.0 0 0.0 0 0.0 0 0.0 0.7034087777137756 1.6583333015441895 1.1976406574249268 -0.365611732006073 0.6798608303070068 -0.635670006275177 0.43489623069763184 0.46722179651260376 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6583333015441895 1.3842592239379883 0.0 0.6790368556976318 -0.7340617179870605 0.36791497468948364 0.5152775645256042 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6583333015441895 1.4324073791503906 0.0 0.9178136587142944 0.3969237208366394 0.36621230840682983 0.5129598379135132 0 1.0 0 0.0 0 0.0 0 0.0 0.7034087777137756 1.6583333015441895 1.1976406574249268 -0.365611732006073 0.6798608303070068 -0.635670006275177 0.43489623069763184 0.46722179651260376 0 1.0 0 0.0 0 0.0 0 0.0 0.7114074230194092 1.6000001430511475 1.2112592458724976 -0.48188725113868713 -0.2613300085067749 -0.8363292217254639 0.4336108863353729 0.45609670877456665 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6000001430511475 1.399999976158142 0.0 -0.2605060040950775 -0.965453028678894 0.36538827419281006 0.5037634968757629 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6583333015441895 1.3842592239379883 0.0 0.6790368556976318 -0.7340617179870605 0.36791497468948364 0.5152775645256042 0 1.0 0 0.0 0 0.0 0 0.0 1.2977778911590576 1.6000001430511475 0.7622222900390625 0.65178382396698 0.6591692566871643 0.3750419616699219 0.4978336989879608 0.43523162603378296 0 1.0 0 0.0 0 0.0 0 0.0 1.23929762840271 1.6583333015441895 0.7278752326965332 0.34409618377685547 0.9179052114486694 0.19748526811599731 0.4983713924884796 0.4480486512184143 0 1.0 0 0.0 0 0.0 0 0.0 0.7278751730918884 1.6583333015441895 1.23929762840271 0.19748526811599731 0.9179052114486694 0.34409618377685547 0.43381404876708984 0.46476656198501587 0 1.0 0 0.0 0 0.0 0 0.0 0.7622222304344177 1.6000001430511475 1.297777771949768 0.3750419616699219 0.6591692566871643 0.65178382396698 0.43147653341293335 0.45172613859176636 0 1.0 0 0.0 0 0.0 0 0.0 1.23929762840271 1.6583333015441895 0.7278752326965332 0.34409618377685547 0.9179052114486694 0.19748526811599731 0.4983713924884796 0.4480486512184143 0 1.0 0 0.0 0 0.0 0 0.0 1.1976406574249268 1.6583333015441895 0.7034087777137756 -0.635670006275177 0.6798303127288818 -0.365611732006073 0.49880385398864746 0.4505805969238281 0 1.0 0 0.0 0 0.0 0 0.0 0.7034087777137756 1.6583333015441895 1.1976406574249268 -0.365611732006073 0.6798608303070068 -0.635670006275177 0.43489623069763184 0.46722179651260376 0 1.0 0 0.0 0 0.0 0 0.0 0.7278751730918884 1.6583333015441895 1.23929762840271 0.19748526811599731 0.9179052114486694 0.34409618377685547 0.43381404876708984 0.46476656198501587 0 1.0 0 0.0 0 0.0 0 0.0 1.1976406574249268 1.6583333015441895 0.7034087777137756 -0.635670006275177 0.6798303127288818 -0.365611732006073 0.49880385398864746 0.4505805969238281 0 1.0 0 0.0 0 0.0 0 0.0 1.2112592458724976 1.6000001430511475 0.7114074230194092 -0.8363292217254639 -0.2613300085067749 -0.48188725113868713 0.498710572719574 0.43980515003204346 0 1.0 0 0.0 0 0.0 0 0.0 0.7114074230194092 1.6000001430511475 1.2112592458724976 -0.48188725113868713 -0.2613300085067749 -0.8363292217254639 0.4336108863353729 0.45609670877456665 0 1.0 0 0.0 0 0.0 0 0.0 0.7034087777137756 1.6583333015441895 1.1976406574249268 -0.365611732006073 0.6798608303070068 -0.635670006275177 0.43489623069763184 0.46722179651260376 0 1.0 0 0.0 0 0.0 0 0.0 1.5 1.6000001430511475 -0.0 0.7528916001319885 0.6581011414527893 -0.0 0.5653074383735657 0.44760727882385254 0 1.0 0 0.0 0 0.0 0 0.0 1.4324073791503906 1.6583333015441895 -0.0 0.3969237208366394 0.9178136587142944 -0.0 0.5640665888786316 0.45991021394729614 0 1.0 0 0.0 0 0.0 0 0.0 1.23929762840271 1.6583333015441895 0.7278752326965332 0.34409618377685547 0.9179052114486694 0.19748526811599731 0.4983713924884796 0.4480486512184143 0 1.0 0 0.0 0 0.0 0 0.0 1.2977778911590576 1.6000001430511475 0.7622222900390625 0.65178382396698 0.6591692566871643 0.3750419616699219 0.4978336989879608 0.43523162603378296 0 1.0 0 0.0 0 0.0 0 0.0 1.4324073791503906 1.6583333015441895 -0.0 0.3969237208366394 0.9178136587142944 -0.0 0.5640665888786316 0.45991021394729614 0 1.0 0 0.0 0 0.0 0 0.0 1.3842592239379883 1.6583333015441895 -0.0 -0.7340617179870605 0.6790368556976318 -0.0 0.5638269186019897 0.46230220794677734 0 1.0 0 0.0 0 0.0 0 0.0 1.1976406574249268 1.6583333015441895 0.7034087777137756 -0.635670006275177 0.6798303127288818 -0.365611732006073 0.49880385398864746 0.4505805969238281 0 1.0 0 0.0 0 0.0 0 0.0 1.23929762840271 1.6583333015441895 0.7278752326965332 0.34409618377685547 0.9179052114486694 0.19748526811599731 0.4983713924884796 0.4480486512184143 0 1.0 0 0.0 0 0.0 0 0.0 1.3842592239379883 1.6583333015441895 -0.0 -0.7340617179870605 0.6790368556976318 -0.0 0.5638269186019897 0.46230220794677734 0 1.0 0 0.0 0 0.0 0 0.0 1.399999976158142 1.6000001430511475 -0.0 -0.965453028678894 -0.2605060040950775 -0.0 0.5648702383041382 0.451926052570343 0 1.0 0 0.0 0 0.0 0 0.0 1.2112592458724976 1.6000001430511475 0.7114074230194092 -0.8363292217254639 -0.2613300085067749 -0.48188725113868713 0.498710572719574 0.43980515003204346 0 1.0 0 0.0 0 0.0 0 0.0 1.1976406574249268 1.6583333015441895 0.7034087777137756 -0.635670006275177 0.6798303127288818 -0.365611732006073 0.49880385398864746 0.4505805969238281 0 1.0 0 0.0 0 0.0 0 0.0 -1.297777771949768 1.6000001430511475 0.7622222304344177 -0.65178382396698 0.6591692566871643 0.3750419616699219 0.20935985445976257 0.6693832278251648 0 1.0 0 0.0 0 0.0 0 0.0 -1.23929762840271 1.6583333015441895 0.7278751730918884 -0.34409618377685547 0.9179052114486694 0.19748526811599731 0.21623337268829346 0.6856119632720947 0 1.0 0 0.0 0 0.0 0 0.0 -1.4324073791503906 1.6583333015441895 -0.0 -0.3969237208366394 0.9178136587142944 -0.0 0.09706264734268188 0.7744057178497314 0 1.0 0 0.0 0 0.0 0 0.0 -1.5 1.6000001430511475 -0.0 -0.7528916001319885 0.6581011414527893 -0.0 0.09257018566131592 0.7542117834091187 0 1.0 0 0.0 0 0.0 0 0.0 -1.23929762840271 1.6583333015441895 0.7278751730918884 -0.34409618377685547 0.9179052114486694 0.19748526811599731 0.21623337268829346 0.6856119632720947 0 1.0 0 0.0 0 0.0 0 0.0 -1.1976406574249268 1.6583333015441895 0.7034087777137756 0.635670006275177 0.6798303127288818 -0.365611732006073 0.2188054919242859 0.6892615556716919 0 1.0 0 0.0 0 0.0 0 0.0 -1.3842592239379883 1.6583333015441895 -0.0 0.7340617179870605 0.6790368556976318 -0.0 0.09843429923057556 0.7800112962722778 0 1.0 0 0.0 0 0.0 0 0.0 -1.4324073791503906 1.6583333015441895 -0.0 -0.3969237208366394 0.9178136587142944 -0.0 0.09706264734268188 0.7744057178497314 0 1.0 0 0.0 0 0.0 0 0.0 -1.1976406574249268 1.6583333015441895 0.7034087777137756 0.635670006275177 0.6798303127288818 -0.365611732006073 0.2188054919242859 0.6892615556716919 0 1.0 0 0.0 0 0.0 0 0.0 -1.2112592458724976 1.6000001430511475 0.7114074230194092 0.8363292217254639 -0.2613300085067749 -0.48188725113868713 0.2139941155910492 0.6759850978851318 0 1.0 0 0.0 0 0.0 0 0.0 -1.399999976158142 1.6000001430511475 -0.0 0.965453028678894 -0.2605060040950775 -0.0 0.0947655737400055 0.7644467353820801 0 1.0 0 0.0 0 0.0 0 0.0 -1.3842592239379883 1.6583333015441895 -0.0 0.7340617179870605 0.6790368556976318 -0.0 0.09843429923057556 0.7800112962722778 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222900390625 1.6000001430511475 1.2977778911590576 -0.3750419616699219 0.6591692566871643 0.65178382396698 0.2899063229560852 0.5765905380249023 0 1.0 0 0.0 0 0.0 0 0.0 -0.7278752326965332 1.6583333015441895 1.23929762840271 -0.19748526811599731 0.9179052114486694 0.34409618377685547 0.29563820362091064 0.5905562043190002 0 1.0 0 0.0 0 0.0 0 0.0 -1.23929762840271 1.6583333015441895 0.7278751730918884 -0.34409618377685547 0.9179052114486694 0.19748526811599731 0.21623337268829346 0.6856119632720947 0 1.0 0 0.0 0 0.0 0 0.0 -1.297777771949768 1.6000001430511475 0.7622222304344177 -0.65178382396698 0.6591692566871643 0.3750419616699219 0.20935985445976257 0.6693832278251648 0 1.0 0 0.0 0 0.0 0 0.0 -0.7278752326965332 1.6583333015441895 1.23929762840271 -0.19748526811599731 0.9179052114486694 0.34409618377685547 0.29563820362091064 0.5905562043190002 0 1.0 0 0.0 0 0.0 0 0.0 -0.7034087777137756 1.6583333015441895 1.1976406574249268 0.365611732006073 0.6798608303070068 -0.635670006275177 0.2978811264038086 0.5930858850479126 0 1.0 0 0.0 0 0.0 0 0.0 -1.1976406574249268 1.6583333015441895 0.7034087777137756 0.635670006275177 0.6798303127288818 -0.365611732006073 0.2188054919242859 0.6892615556716919 0 1.0 0 0.0 0 0.0 0 0.0 -1.23929762840271 1.6583333015441895 0.7278751730918884 -0.34409618377685547 0.9179052114486694 0.19748526811599731 0.21623337268829346 0.6856119632720947 0 1.0 0 0.0 0 0.0 0 0.0 -0.7034087777137756 1.6583333015441895 1.1976406574249268 0.365611732006073 0.6798608303070068 -0.635670006275177 0.2978811264038086 0.5930858850479126 0 1.0 0 0.0 0 0.0 0 0.0 -0.7114074230194092 1.6000001430511475 1.2112592458724976 0.48188725113868713 -0.2613300085067749 -0.8363292217254639 0.2941329777240753 0.5810052156448364 0 1.0 0 0.0 0 0.0 0 0.0 -1.2112592458724976 1.6000001430511475 0.7114074230194092 0.8363292217254639 -0.2613300085067749 -0.48188725113868713 0.2139941155910492 0.6759850978851318 0 1.0 0 0.0 0 0.0 0 0.0 -1.1976406574249268 1.6583333015441895 0.7034087777137756 0.635670006275177 0.6798303127288818 -0.365611732006073 0.2188054919242859 0.6892615556716919 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6000001430511475 1.5 0.0 0.6581011414527893 0.7528916001319885 0.36209404468536377 0.4997289776802063 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6583333015441895 1.4324073791503906 0.0 0.9178136587142944 0.3969237208366394 0.36621230840682983 0.5129598379135132 0 1.0 0 0.0 0 0.0 0 0.0 -0.7278752326965332 1.6583333015441895 1.23929762840271 -0.19748526811599731 0.9179052114486694 0.34409618377685547 0.29563820362091064 0.5905562043190002 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222900390625 1.6000001430511475 1.2977778911590576 -0.3750419616699219 0.6591692566871643 0.65178382396698 0.2899063229560852 0.5765905380249023 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6583333015441895 1.4324073791503906 0.0 0.9178136587142944 0.3969237208366394 0.36621230840682983 0.5129598379135132 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6583333015441895 1.3842592239379883 0.0 0.6790368556976318 -0.7340617179870605 0.36791497468948364 0.5152775645256042 0 1.0 0 0.0 0 0.0 0 0.0 -0.7034087777137756 1.6583333015441895 1.1976406574249268 0.365611732006073 0.6798608303070068 -0.635670006275177 0.2978811264038086 0.5930858850479126 0 1.0 0 0.0 0 0.0 0 0.0 -0.7278752326965332 1.6583333015441895 1.23929762840271 -0.19748526811599731 0.9179052114486694 0.34409618377685547 0.29563820362091064 0.5905562043190002 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6583333015441895 1.3842592239379883 0.0 0.6790368556976318 -0.7340617179870605 0.36791497468948364 0.5152775645256042 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6000001430511475 1.399999976158142 0.0 -0.2605060040950775 -0.965453028678894 0.36538827419281006 0.5037634968757629 0 1.0 0 0.0 0 0.0 0 0.0 -0.7114074230194092 1.6000001430511475 1.2112592458724976 0.48188725113868713 -0.2613300085067749 -0.8363292217254639 0.2941329777240753 0.5810052156448364 0 1.0 0 0.0 0 0.0 0 0.0 -0.7034087777137756 1.6583333015441895 1.1976406574249268 0.365611732006073 0.6798608303070068 -0.635670006275177 0.2978811264038086 0.5930858850479126 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222304344177 1.6000001430511475 -1.297777771949768 -0.3750419616699219 0.6591692566871643 -0.65178382396698 0.8343170881271362 0.699485719203949 0 1.0 0 0.0 0 0.0 0 0.0 -0.7278751730918884 1.6583333015441895 -1.23929762840271 -0.19748526811599731 0.9179052114486694 -0.34409618377685547 0.827828586101532 0.7140057682991028 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6583333015441895 -1.4324073791503906 0.0 0.9178136587142944 -0.3969237208366394 0.7488337755203247 0.6288853883743286 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6000001430511475 -1.5 0.0 0.6581011414527893 -0.7528916001319885 0.7542129755020142 0.6169042587280273 0 1.0 0 0.0 0 0.0 0 0.0 -0.7278751730918884 1.6583333015441895 -1.23929762840271 -0.19748526811599731 0.9179052114486694 -0.34409618377685547 0.827828586101532 0.7140057682991028 0 1.0 0 0.0 0 0.0 0 0.0 -0.7034087777137756 1.6583333015441895 -1.1976406574249268 0.365611732006073 0.6798608303070068 0.635670006275177 0.8251392245292664 0.7167086601257324 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6583333015441895 -1.3842592239379883 0.0 0.6790368556976318 0.7340617179870605 0.7468173503875732 0.6306852698326111 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6583333015441895 -1.4324073791503906 0.0 0.9178136587142944 -0.3969237208366394 0.7488337755203247 0.6288853883743286 0 1.0 0 0.0 0 0.0 0 0.0 -0.7034087777137756 1.6583333015441895 -1.1976406574249268 0.365611732006073 0.6798608303070068 0.635670006275177 0.8251392245292664 0.7167086601257324 0 1.0 0 0.0 0 0.0 0 0.0 -0.7114074230194092 1.6000001430511475 -1.2112592458724976 0.48188725113868713 -0.2613300085067749 0.8363292217254639 0.829383134841919 0.7043319940567017 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6000001430511475 -1.399999976158142 0.0 -0.2605060040950775 0.965453028678894 0.7504168748855591 0.6200130581855774 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6583333015441895 -1.3842592239379883 0.0 0.6790368556976318 0.7340617179870605 0.7468173503875732 0.6306852698326111 0 1.0 0 0.0 0 0.0 0 0.0 -1.2977778911590576 1.6000001430511475 -0.7622222900390625 -0.65178382396698 0.6591692566871643 -0.3750419616699219 0.9449872970581055 0.762032687664032 0 1.0 0 0.0 0 0.0 0 0.0 -1.23929762840271 1.6583333015441895 -0.7278752326965332 -0.34409618377685547 0.9179052114486694 -0.19748526811599731 0.9407130479812622 0.7812114953994751 0 1.0 0 0.0 0 0.0 0 0.0 -0.7278751730918884 1.6583333015441895 -1.23929762840271 -0.19748526811599731 0.9179052114486694 -0.34409618377685547 0.827828586101532 0.7140057682991028 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222304344177 1.6000001430511475 -1.297777771949768 -0.3750419616699219 0.6591692566871643 -0.65178382396698 0.8343170881271362 0.699485719203949 0 1.0 0 0.0 0 0.0 0 0.0 -1.23929762840271 1.6583333015441895 -0.7278752326965332 -0.34409618377685547 0.9179052114486694 -0.19748526811599731 0.9407130479812622 0.7812114953994751 0 1.0 0 0.0 0 0.0 0 0.0 -1.1976406574249268 1.6583333015441895 -0.7034087777137756 0.635670006275177 0.6798303127288818 0.365611732006073 0.9384674429893494 0.7860746383666992 0 1.0 0 0.0 0 0.0 0 0.0 -0.7034087777137756 1.6583333015441895 -1.1976406574249268 0.365611732006073 0.6798608303070068 0.635670006275177 0.8251392245292664 0.7167086601257324 0 1.0 0 0.0 0 0.0 0 0.0 -0.7278751730918884 1.6583333015441895 -1.23929762840271 -0.19748526811599731 0.9179052114486694 -0.34409618377685547 0.827828586101532 0.7140057682991028 0 1.0 0 0.0 0 0.0 0 0.0 -1.1976406574249268 1.6583333015441895 -0.7034087777137756 0.635670006275177 0.6798303127288818 0.365611732006073 0.9384674429893494 0.7860746383666992 0 1.0 0 0.0 0 0.0 0 0.0 -1.2112592458724976 1.6000001430511475 -0.7114074230194092 0.8363292217254639 -0.2613300085067749 0.48188725113868713 0.9410111904144287 0.7708781361579895 0 1.0 0 0.0 0 0.0 0 0.0 -0.7114074230194092 1.6000001430511475 -1.2112592458724976 0.48188725113868713 -0.2613300085067749 0.8363292217254639 0.829383134841919 0.7043319940567017 0 1.0 0 0.0 0 0.0 0 0.0 -0.7034087777137756 1.6583333015441895 -1.1976406574249268 0.365611732006073 0.6798608303070068 0.635670006275177 0.8251392245292664 0.7167086601257324 0 1.0 0 0.0 0 0.0 0 0.0 -1.5 1.6000001430511475 -0.0 -0.7528916001319885 0.6581011414527893 -0.0 1.092570185661316 0.7542117834091187 0 1.0 0 0.0 0 0.0 0 0.0 -1.4324073791503906 1.6583333015441895 -0.0 -0.3969237208366394 0.9178136587142944 -0.0 1.097062587738037 0.7744057178497314 0 1.0 0 0.0 0 0.0 0 0.0 -1.23929762840271 1.6583333015441895 -0.7278752326965332 -0.34409618377685547 0.9179052114486694 -0.19748526811599731 0.9407130479812622 0.7812114953994751 0 1.0 0 0.0 0 0.0 0 0.0 -1.2977778911590576 1.6000001430511475 -0.7622222900390625 -0.65178382396698 0.6591692566871643 -0.3750419616699219 0.9449872970581055 0.762032687664032 0 1.0 0 0.0 0 0.0 0 0.0 -1.4324073791503906 1.6583333015441895 -0.0 -0.3969237208366394 0.9178136587142944 -0.0 1.097062587738037 0.7744057178497314 0 1.0 0 0.0 0 0.0 0 0.0 -1.3842592239379883 1.6583333015441895 -0.0 0.7340617179870605 0.6790368556976318 -0.0 1.098434329032898 0.7800112962722778 0 1.0 0 0.0 0 0.0 0 0.0 -1.1976406574249268 1.6583333015441895 -0.7034087777137756 0.635670006275177 0.6798303127288818 0.365611732006073 0.9384674429893494 0.7860746383666992 0 1.0 0 0.0 0 0.0 0 0.0 -1.23929762840271 1.6583333015441895 -0.7278752326965332 -0.34409618377685547 0.9179052114486694 -0.19748526811599731 0.9407130479812622 0.7812114953994751 0 1.0 0 0.0 0 0.0 0 0.0 -1.3842592239379883 1.6583333015441895 -0.0 0.7340617179870605 0.6790368556976318 -0.0 1.098434329032898 0.7800112962722778 0 1.0 0 0.0 0 0.0 0 0.0 -1.399999976158142 1.6000001430511475 -0.0 0.965453028678894 -0.2605060040950775 -0.0 1.094765543937683 0.7644467353820801 0 1.0 0 0.0 0 0.0 0 0.0 -1.2112592458724976 1.6000001430511475 -0.7114074230194092 0.8363292217254639 -0.2613300085067749 0.48188725113868713 0.9410111904144287 0.7708781361579895 0 1.0 0 0.0 0 0.0 0 0.0 -1.1976406574249268 1.6583333015441895 -0.7034087777137756 0.635670006275177 0.6798303127288818 0.365611732006073 0.9384674429893494 0.7860746383666992 0 1.0 0 0.0 0 0.0 0 0.0 1.297777771949768 1.6000001430511475 -0.7622222304344177 0.65178382396698 0.6591692566871643 -0.3750419616699219 0.6295300722122192 0.48565661907196045 0 1.0 0 0.0 0 0.0 0 0.0 1.23929762840271 1.6583333015441895 -0.7278751730918884 0.34409618377685547 0.9179052114486694 -0.19748526811599731 0.6267805099487305 0.4972832202911377 0 1.0 0 0.0 0 0.0 0 0.0 1.4324073791503906 1.6583333015441895 -0.0 0.3969237208366394 0.9178136587142944 -0.0 0.5640665888786316 0.45991021394729614 0 1.0 0 0.0 0 0.0 0 0.0 1.5 1.6000001430511475 -0.0 0.7528916001319885 0.6581011414527893 -0.0 0.5653074383735657 0.44760727882385254 0 1.0 0 0.0 0 0.0 0 0.0 1.23929762840271 1.6583333015441895 -0.7278751730918884 0.34409618377685547 0.9179052114486694 -0.19748526811599731 0.6267805099487305 0.4972832202911377 0 1.0 0 0.0 0 0.0 0 0.0 1.1976406574249268 1.6583333015441895 -0.7034087777137756 -0.635670006275177 0.6798303127288818 0.365611732006073 0.6259352564811707 0.4993526339530945 0 1.0 0 0.0 0 0.0 0 0.0 1.3842592239379883 1.6583333015441895 -0.0 -0.7340617179870605 0.6790368556976318 -0.0 0.5638269186019897 0.46230220794677734 0 1.0 0 0.0 0 0.0 0 0.0 1.4324073791503906 1.6583333015441895 -0.0 0.3969237208366394 0.9178136587142944 -0.0 0.5640665888786316 0.45991021394729614 0 1.0 0 0.0 0 0.0 0 0.0 1.1976406574249268 1.6583333015441895 -0.7034087777137756 -0.635670006275177 0.6798303127288818 0.365611732006073 0.6259352564811707 0.4993526339530945 0 1.0 0 0.0 0 0.0 0 0.0 1.2112592458724976 1.6000001430511475 -0.7114074230194092 -0.8363292217254639 -0.2613300085067749 0.48188725113868713 0.6279190182685852 0.48933225870132446 0 1.0 0 0.0 0 0.0 0 0.0 1.399999976158142 1.6000001430511475 -0.0 -0.965453028678894 -0.2605060040950775 -0.0 0.5648702383041382 0.451926052570343 0 1.0 0 0.0 0 0.0 0 0.0 1.3842592239379883 1.6583333015441895 -0.0 -0.7340617179870605 0.6790368556976318 -0.0 0.5638269186019897 0.46230220794677734 0 1.0 0 0.0 0 0.0 0 0.0 0.7622222900390625 1.6000001430511475 -1.2977778911590576 0.3750419616699219 0.6591692566871643 -0.65178382396698 0.6891228556632996 0.5420753359794617 0 1.0 0 0.0 0 0.0 0 0.0 0.7278752326965332 1.6583333015441895 -1.23929762840271 0.19748526811599731 0.9179052114486694 -0.34409618377685547 0.6851003170013428 0.5534005165100098 0 1.0 0 0.0 0 0.0 0 0.0 1.23929762840271 1.6583333015441895 -0.7278751730918884 0.34409618377685547 0.9179052114486694 -0.19748526811599731 0.6267805099487305 0.4972832202911377 0 1.0 0 0.0 0 0.0 0 0.0 1.297777771949768 1.6000001430511475 -0.7622222304344177 0.65178382396698 0.6591692566871643 -0.3750419616699219 0.6295300722122192 0.48565661907196045 0 1.0 0 0.0 0 0.0 0 0.0 0.7278752326965332 1.6583333015441895 -1.23929762840271 0.19748526811599731 0.9179052114486694 -0.34409618377685547 0.6851003170013428 0.5534005165100098 0 1.0 0 0.0 0 0.0 0 0.0 0.7034087777137756 1.6583333015441895 -1.1976406574249268 -0.365611732006073 0.6798608303070068 0.635670006275177 0.6837114095687866 0.5551795959472656 0 1.0 0 0.0 0 0.0 0 0.0 1.1976406574249268 1.6583333015441895 -0.7034087777137756 -0.635670006275177 0.6798303127288818 0.365611732006073 0.6259352564811707 0.4993526339530945 0 1.0 0 0.0 0 0.0 0 0.0 1.23929762840271 1.6583333015441895 -0.7278751730918884 0.34409618377685547 0.9179052114486694 -0.19748526811599731 0.6267805099487305 0.4972832202911377 0 1.0 0 0.0 0 0.0 0 0.0 0.7034087777137756 1.6583333015441895 -1.1976406574249268 -0.365611732006073 0.6798608303070068 0.635670006275177 0.6837114095687866 0.5551795959472656 0 1.0 0 0.0 0 0.0 0 0.0 0.7114074230194092 1.6000001430511475 -1.2112592458724976 -0.48188725113868713 -0.2613300085067749 0.8363292217254639 0.6864795684814453 0.5451602935791016 0 1.0 0 0.0 0 0.0 0 0.0 1.2112592458724976 1.6000001430511475 -0.7114074230194092 -0.8363292217254639 -0.2613300085067749 0.48188725113868713 0.6279190182685852 0.48933225870132446 0 1.0 0 0.0 0 0.0 0 0.0 1.1976406574249268 1.6583333015441895 -0.7034087777137756 -0.635670006275177 0.6798303127288818 0.365611732006073 0.6259352564811707 0.4993526339530945 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6000001430511475 -1.5 0.0 0.6581011414527893 -0.7528916001319885 0.7542129755020142 0.6169042587280273 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6583333015441895 -1.4324073791503906 0.0 0.9178136587142944 -0.3969237208366394 0.7488337755203247 0.6288853883743286 0 1.0 0 0.0 0 0.0 0 0.0 0.7278752326965332 1.6583333015441895 -1.23929762840271 0.19748526811599731 0.9179052114486694 -0.34409618377685547 0.6851003170013428 0.5534005165100098 0 1.0 0 0.0 0 0.0 0 0.0 0.7622222900390625 1.6000001430511475 -1.2977778911590576 0.3750419616699219 0.6591692566871643 -0.65178382396698 0.6891228556632996 0.5420753359794617 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6583333015441895 -1.4324073791503906 0.0 0.9178136587142944 -0.3969237208366394 0.7488337755203247 0.6288853883743286 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6583333015441895 -1.3842592239379883 0.0 0.6790368556976318 0.7340617179870605 0.7468173503875732 0.6306852698326111 0 1.0 0 0.0 0 0.0 0 0.0 0.7034087777137756 1.6583333015441895 -1.1976406574249268 -0.365611732006073 0.6798608303070068 0.635670006275177 0.6837114095687866 0.5551795959472656 0 1.0 0 0.0 0 0.0 0 0.0 0.7278752326965332 1.6583333015441895 -1.23929762840271 0.19748526811599731 0.9179052114486694 -0.34409618377685547 0.6851003170013428 0.5534005165100098 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6583333015441895 -1.3842592239379883 0.0 0.6790368556976318 0.7340617179870605 0.7468173503875732 0.6306852698326111 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6000001430511475 -1.399999976158142 0.0 -0.2605060040950775 0.965453028678894 0.7504168748855591 0.6200130581855774 0 1.0 0 0.0 0 0.0 0 0.0 0.7114074230194092 1.6000001430511475 -1.2112592458724976 -0.48188725113868713 -0.2613300085067749 0.8363292217254639 0.6864795684814453 0.5451602935791016 0 1.0 0 0.0 0 0.0 0 0.0 0.7034087777137756 1.6583333015441895 -1.1976406574249268 -0.365611732006073 0.6798608303070068 0.635670006275177 0.6837114095687866 0.5551795959472656 0 1.0 0 0.0 0 0.0 0 0.0 1.0162962675094604 0.6000000238418579 1.7303704023361206 0.49595630168914795 -0.11569567024707794 0.860591471195221 0.40639829635620117 0.2969917058944702 0 1.0 0 0.0 0 0.0 0 0.0 0.9786556959152222 0.914814829826355 1.6662826538085938 0.4669942259788513 0.35224464535713196 0.8110293745994568 0.4132171869277954 0.3386375904083252 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.914814829826355 1.9259259700775146 0.0 0.35139012336730957 0.9362162947654724 0.33067935705184937 0.3847705125808716 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.6000000238418579 2.0 0.0 -0.11548203974962234 0.9932859539985657 0.31945714354515076 0.342856228351593 0 1.0 0 0.0 0 0.0 0 0.0 0.9786556959152222 0.914814829826355 1.6662826538085938 0.4669942259788513 0.35224464535713196 0.8110293745994568 0.4132171869277954 0.3386375904083252 0 1.0 0 0.0 0 0.0 0 0.0 0.8845541477203369 1.2518519163131714 1.5060631036758423 0.42506179213523865 0.5233008861541748 0.7385479211807251 0.42155009508132935 0.3886297345161438 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.2518519163131714 1.7407406568527222 0.0 0.522110641002655 0.8528702855110168 0.34462296962738037 0.435282826423645 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.914814829826355 1.9259259700775146 0.0 0.35139012336730957 0.9362162947654724 0.33067935705184937 0.3847705125808716 0 1.0 0 0.0 0 0.0 0 0.0 0.8845541477203369 1.2518519163131714 1.5060631036758423 0.42506179213523865 0.5233008861541748 0.7385479211807251 0.42155009508132935 0.3886297345161438 0 1.0 0 0.0 0 0.0 0 0.0 0.7622222304344177 1.6000001430511475 1.297777771949768 0.3750419616699219 0.6591692566871643 0.65178382396698 0.43147653341293335 0.45172613859176636 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6000001430511475 1.5 0.0 0.6581011414527893 0.7528916001319885 0.36209404468536377 0.4997289776802063 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.2518519163131714 1.7407406568527222 0.0 0.522110641002655 0.8528702855110168 0.34462296962738037 0.435282826423645 0 1.0 0 0.0 0 0.0 0 0.0 1.7303704023361206 0.6000000238418579 1.0162962675094604 0.860591471195221 -0.11569567024707794 0.49595630168914795 0.49428650736808777 0.28271710872650146 0 1.0 0 0.0 0 0.0 0 0.0 1.6662826538085938 0.914814829826355 0.9786556959152222 0.8110293745994568 0.35224464535713196 0.4669942259788513 0.4948292672634125 0.323957622051239 0 1.0 0 0.0 0 0.0 0 0.0 0.9786556959152222 0.914814829826355 1.6662826538085938 0.4669942259788513 0.35224464535713196 0.8110293745994568 0.4132171869277954 0.3386375904083252 0 1.0 0 0.0 0 0.0 0 0.0 1.0162962675094604 0.6000000238418579 1.7303704023361206 0.49595630168914795 -0.11569567024707794 0.860591471195221 0.40639829635620117 0.2969917058944702 0 1.0 0 0.0 0 0.0 0 0.0 1.6662826538085938 0.914814829826355 0.9786556959152222 0.8110293745994568 0.35224464535713196 0.4669942259788513 0.4948292672634125 0.323957622051239 0 1.0 0 0.0 0 0.0 0 0.0 1.5060631036758423 1.2518517971038818 0.8845542669296265 0.7385479211807251 0.5233008861541748 0.42506179213523865 0.49609825015068054 0.3733762502670288 0 1.0 0 0.0 0 0.0 0 0.0 0.8845541477203369 1.2518519163131714 1.5060631036758423 0.42506179213523865 0.5233008861541748 0.7385479211807251 0.42155009508132935 0.3886297345161438 0 1.0 0 0.0 0 0.0 0 0.0 0.9786556959152222 0.914814829826355 1.6662826538085938 0.4669942259788513 0.35224464535713196 0.8110293745994568 0.4132171869277954 0.3386375904083252 0 1.0 0 0.0 0 0.0 0 0.0 1.5060631036758423 1.2518517971038818 0.8845542669296265 0.7385479211807251 0.5233008861541748 0.42506179213523865 0.49609825015068054 0.3733762502670288 0 1.0 0 0.0 0 0.0 0 0.0 1.2977778911590576 1.6000001430511475 0.7622222900390625 0.65178382396698 0.6591692566871643 0.3750419616699219 0.4978336989879608 0.43523162603378296 0 1.0 0 0.0 0 0.0 0 0.0 0.7622222304344177 1.6000001430511475 1.297777771949768 0.3750419616699219 0.6591692566871643 0.65178382396698 0.43147653341293335 0.45172613859176636 0 1.0 0 0.0 0 0.0 0 0.0 0.8845541477203369 1.2518519163131714 1.5060631036758423 0.42506179213523865 0.5233008861541748 0.7385479211807251 0.42155009508132935 0.3886297345161438 0 1.0 0 0.0 0 0.0 0 0.0 2.0 0.6000000238418579 -0.0 0.9932859539985657 -0.11548203974962234 -0.0 0.5828353762626648 0.30102527141571045 0 1.0 0 0.0 0 0.0 0 0.0 1.9259259700775146 0.914814829826355 -0.0 0.9362162947654724 0.35139012336730957 -0.0 0.5773130655288696 0.3406168222427368 0 1.0 0 0.0 0 0.0 0 0.0 1.6662826538085938 0.914814829826355 0.9786556959152222 0.8110293745994568 0.35224464535713196 0.4669942259788513 0.4948292672634125 0.323957622051239 0 1.0 0 0.0 0 0.0 0 0.0 1.7303704023361206 0.6000000238418579 1.0162962675094604 0.860591471195221 -0.11569567024707794 0.49595630168914795 0.49428650736808777 0.28271710872650146 0 1.0 0 0.0 0 0.0 0 0.0 1.9259259700775146 0.914814829826355 -0.0 0.9362162947654724 0.35139012336730957 -0.0 0.5773130655288696 0.3406168222427368 0 1.0 0 0.0 0 0.0 0 0.0 1.7407406568527222 1.2518519163131714 -0.0 0.8528397679328918 0.522110641002655 -0.0 0.5716165900230408 0.3881370425224304 0 1.0 0 0.0 0 0.0 0 0.0 1.5060631036758423 1.2518517971038818 0.8845542669296265 0.7385479211807251 0.5233008861541748 0.42506179213523865 0.49609825015068054 0.3733762502670288 0 1.0 0 0.0 0 0.0 0 0.0 1.6662826538085938 0.914814829826355 0.9786556959152222 0.8110293745994568 0.35224464535713196 0.4669942259788513 0.4948292672634125 0.323957622051239 0 1.0 0 0.0 0 0.0 0 0.0 1.7407406568527222 1.2518519163131714 -0.0 0.8528397679328918 0.522110641002655 -0.0 0.5716165900230408 0.3881370425224304 0 1.0 0 0.0 0 0.0 0 0.0 1.5 1.6000001430511475 -0.0 0.7528916001319885 0.6581011414527893 -0.0 0.5653074383735657 0.44760727882385254 0 1.0 0 0.0 0 0.0 0 0.0 1.2977778911590576 1.6000001430511475 0.7622222900390625 0.65178382396698 0.6591692566871643 0.3750419616699219 0.4978336989879608 0.43523162603378296 0 1.0 0 0.0 0 0.0 0 0.0 1.5060631036758423 1.2518517971038818 0.8845542669296265 0.7385479211807251 0.5233008861541748 0.42506179213523865 0.49609825015068054 0.3733762502670288 0 1.0 0 0.0 0 0.0 0 0.0 -1.7303704023361206 0.6000000238418579 1.0162962675094604 -0.860591471195221 -0.11569567024707794 0.49595630168914795 0.15623977780342102 0.4808504581451416 0 1.0 0 0.0 0 0.0 0 0.0 -1.6662826538085938 0.914814829826355 0.9786556959152222 -0.8110293745994568 0.35224464535713196 0.4669942259788513 0.16763854026794434 0.5300626158714294 0 1.0 0 0.0 0 0.0 0 0.0 -1.9259259700775146 0.914814829826355 -0.0 -0.9362162947654724 0.35139012336730957 -0.0 0.06937173008918762 0.5914106965065002 0 1.0 0 0.0 0 0.0 0 0.0 -2.0 0.6000000238418579 -0.0 -0.8362376689910889 0.5483260750770569 -0.0 0.06370410323143005 0.5364704132080078 0 1.0 0 0.0 0 0.0 0 0.0 -1.6662826538085938 0.914814829826355 0.9786556959152222 -0.8110293745994568 0.35224464535713196 0.4669942259788513 0.16763854026794434 0.5300626158714294 0 1.0 0 0.0 0 0.0 0 0.0 -1.5060631036758423 1.2518519163131714 0.8845541477203369 -0.7385479211807251 0.5233008861541748 0.42506179213523865 0.18382784724235535 0.5908814668655396 0 1.0 0 0.0 0 0.0 0 0.0 -1.7407406568527222 1.2518519163131714 -0.0 -0.8528397679328918 0.522110641002655 -0.0 0.07755216956138611 0.6612304449081421 0 1.0 0 0.0 0 0.0 0 0.0 -1.9259259700775146 0.914814829826355 -0.0 -0.9362162947654724 0.35139012336730957 -0.0 0.06937173008918762 0.5914106965065002 0 1.0 0 0.0 0 0.0 0 0.0 -1.5060631036758423 1.2518519163131714 0.8845541477203369 -0.7385479211807251 0.5233008861541748 0.42506179213523865 0.18382784724235535 0.5908814668655396 0 1.0 0 0.0 0 0.0 0 0.0 -1.297777771949768 1.6000001430511475 0.7622222304344177 -0.65178382396698 0.6591692566871643 0.3750419616699219 0.20935985445976257 0.6693832278251648 0 1.0 0 0.0 0 0.0 0 0.0 -1.5 1.6000001430511475 -0.0 -0.7528916001319885 0.6581011414527893 -0.0 0.09257018566131592 0.7542117834091187 0 1.0 0 0.0 0 0.0 0 0.0 -1.7407406568527222 1.2518519163131714 -0.0 -0.8528397679328918 0.522110641002655 -0.0 0.07755216956138611 0.6612304449081421 0 1.0 0 0.0 0 0.0 0 0.0 -1.0162962675094604 0.6000000238418579 1.7303704023361206 -0.49595630168914795 -0.11569567024707794 0.860591471195221 0.23712080717086792 0.41073405742645264 0 1.0 0 0.0 0 0.0 0 0.0 -0.9786556959152222 0.914814829826355 1.6662826538085938 -0.4669942259788513 0.35224464535713196 0.8110293745994568 0.2498626410961151 0.4547853469848633 0 1.0 0 0.0 0 0.0 0 0.0 -1.6662826538085938 0.914814829826355 0.9786556959152222 -0.8110293745994568 0.35224464535713196 0.4669942259788513 0.16763854026794434 0.5300626158714294 0 1.0 0 0.0 0 0.0 0 0.0 -1.7303704023361206 0.6000000238418579 1.0162962675094604 -0.860591471195221 -0.11569567024707794 0.49595630168914795 0.15623977780342102 0.4808504581451416 0 1.0 0 0.0 0 0.0 0 0.0 -0.9786556959152222 0.914814829826355 1.6662826538085938 -0.4669942259788513 0.35224464535713196 0.8110293745994568 0.2498626410961151 0.4547853469848633 0 1.0 0 0.0 0 0.0 0 0.0 -0.8845542669296265 1.2518517971038818 1.5060631036758423 -0.42506179213523865 0.5233008861541748 0.7385479211807251 0.2666986286640167 0.508183479309082 0 1.0 0 0.0 0 0.0 0 0.0 -1.5060631036758423 1.2518519163131714 0.8845541477203369 -0.7385479211807251 0.5233008861541748 0.42506179213523865 0.18382784724235535 0.5908814668655396 0 1.0 0 0.0 0 0.0 0 0.0 -1.6662826538085938 0.914814829826355 0.9786556959152222 -0.8110293745994568 0.35224464535713196 0.4669942259788513 0.16763854026794434 0.5300626158714294 0 1.0 0 0.0 0 0.0 0 0.0 -0.8845542669296265 1.2518517971038818 1.5060631036758423 -0.42506179213523865 0.5233008861541748 0.7385479211807251 0.2666986286640167 0.508183479309082 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222900390625 1.6000001430511475 1.2977778911590576 -0.3750419616699219 0.6591692566871643 0.65178382396698 0.2899063229560852 0.5765905380249023 0 1.0 0 0.0 0 0.0 0 0.0 -1.297777771949768 1.6000001430511475 0.7622222304344177 -0.65178382396698 0.6591692566871643 0.3750419616699219 0.20935985445976257 0.6693832278251648 0 1.0 0 0.0 0 0.0 0 0.0 -1.5060631036758423 1.2518519163131714 0.8845541477203369 -0.7385479211807251 0.5233008861541748 0.42506179213523865 0.18382784724235535 0.5908814668655396 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.6000000238418579 2.0 0.0 -0.11548203974962234 0.9932859539985657 0.31945714354515076 0.342856228351593 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.914814829826355 1.9259259700775146 0.0 0.35139012336730957 0.9362162947654724 0.33067935705184937 0.3847705125808716 0 1.0 0 0.0 0 0.0 0 0.0 -0.9786556959152222 0.914814829826355 1.6662826538085938 -0.4669942259788513 0.35224464535713196 0.8110293745994568 0.2498626410961151 0.4547853469848633 0 1.0 0 0.0 0 0.0 0 0.0 -1.0162962675094604 0.6000000238418579 1.7303704023361206 -0.49595630168914795 -0.11569567024707794 0.860591471195221 0.23712080717086792 0.41073405742645264 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.914814829826355 1.9259259700775146 0.0 0.35139012336730957 0.9362162947654724 0.33067935705184937 0.3847705125808716 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.2518519163131714 1.7407406568527222 0.0 0.522110641002655 0.8528702855110168 0.34462296962738037 0.435282826423645 0 1.0 0 0.0 0 0.0 0 0.0 -0.8845542669296265 1.2518517971038818 1.5060631036758423 -0.42506179213523865 0.5233008861541748 0.7385479211807251 0.2666986286640167 0.508183479309082 0 1.0 0 0.0 0 0.0 0 0.0 -0.9786556959152222 0.914814829826355 1.6662826538085938 -0.4669942259788513 0.35224464535713196 0.8110293745994568 0.2498626410961151 0.4547853469848633 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.2518519163131714 1.7407406568527222 0.0 0.522110641002655 0.8528702855110168 0.34462296962738037 0.435282826423645 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6000001430511475 1.5 0.0 0.6581011414527893 0.7528916001319885 0.36209404468536377 0.4997289776802063 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222900390625 1.6000001430511475 1.2977778911590576 -0.3750419616699219 0.6591692566871643 0.65178382396698 0.2899063229560852 0.5765905380249023 0 1.0 0 0.0 0 0.0 0 0.0 -0.8845542669296265 1.2518517971038818 1.5060631036758423 -0.42506179213523865 0.5233008861541748 0.7385479211807251 0.2666986286640167 0.508183479309082 0 1.0 0 0.0 0 0.0 0 0.0 -1.0162962675094604 0.6000000238418579 -1.7303704023361206 -0.49595630168914795 -0.11569567024707794 -0.860591471195221 0.8801935911178589 0.5227434039115906 0 1.0 0 0.0 0 0.0 0 0.0 -0.9786556959152222 0.914814829826355 -1.6662826538085938 -0.4669942259788513 0.35224464535713196 -0.8110293745994568 0.8712304830551147 0.5701385736465454 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.914814829826355 -1.9259259700775146 0.0 0.35139012336730957 -0.9362162947654724 0.7908333539962769 0.5078861713409424 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.6000000238418579 -2.0 0.0 -0.11548203974962234 -0.9932859539985657 0.8017946481704712 0.4667319059371948 0 1.0 0 0.0 0 0.0 0 0.0 -0.9786556959152222 0.914814829826355 -1.6662826538085938 -0.4669942259788513 0.35224464535713196 -0.8110293745994568 0.8712304830551147 0.5701385736465454 0 1.0 0 0.0 0 0.0 0 0.0 -0.8845541477203369 1.2518519163131714 -1.5060631036758423 -0.42506179213523865 0.5233008861541748 -0.7385479211807251 0.8572931885719299 0.6273802518844604 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.2518519163131714 -1.7407406568527222 0.0 0.522110641002655 -0.8528702855110168 0.7757281064987183 0.5565197467803955 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.914814829826355 -1.9259259700775146 0.0 0.35139012336730957 -0.9362162947654724 0.7908333539962769 0.5078861713409424 0 1.0 0 0.0 0 0.0 0 0.0 -0.8845541477203369 1.2518519163131714 -1.5060631036758423 -0.42506179213523865 0.5233008861541748 -0.7385479211807251 0.8572931885719299 0.6273802518844604 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222304344177 1.6000001430511475 -1.297777771949768 -0.3750419616699219 0.6591692566871643 -0.65178382396698 0.8343170881271362 0.699485719203949 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6000001430511475 -1.5 0.0 0.6581011414527893 -0.7528916001319885 0.7542129755020142 0.6169042587280273 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.2518519163131714 -1.7407406568527222 0.0 0.522110641002655 -0.8528702855110168 0.7757281064987183 0.5565197467803955 0 1.0 0 0.0 0 0.0 0 0.0 -1.7303704023361206 0.6000000238418579 -1.0162962675094604 -0.860591471195221 -0.11569567024707794 -0.49595630168914795 0.9665490388870239 0.5510944128036499 0 1.0 0 0.0 0 0.0 0 0.0 -1.6662826538085938 0.914814829826355 -0.9786556959152222 -0.8110293745994568 0.35224464535713196 -0.4669942259788513 0.9633795022964478 0.6049708127975464 0 1.0 0 0.0 0 0.0 0 0.0 -0.9786556959152222 0.914814829826355 -1.6662826538085938 -0.4669942259788513 0.35224464535713196 -0.8110293745994568 0.8712304830551147 0.5701385736465454 0 1.0 0 0.0 0 0.0 0 0.0 -1.0162962675094604 0.6000000238418579 -1.7303704023361206 -0.49595630168914795 -0.11569567024707794 -0.860591471195221 0.8801935911178589 0.5227434039115906 0 1.0 0 0.0 0 0.0 0 0.0 -1.6662826538085938 0.914814829826355 -0.9786556959152222 -0.8110293745994568 0.35224464535713196 -0.4669942259788513 0.9633795022964478 0.6049708127975464 0 1.0 0 0.0 0 0.0 0 0.0 -1.5060631036758423 1.2518517971038818 -0.8845542669296265 -0.7385479211807251 0.5233008861541748 -0.42506179213523865 0.957268476486206 0.6726799011230469 0 1.0 0 0.0 0 0.0 0 0.0 -0.8845541477203369 1.2518519163131714 -1.5060631036758423 -0.42506179213523865 0.5233008861541748 -0.7385479211807251 0.8572931885719299 0.6273802518844604 0 1.0 0 0.0 0 0.0 0 0.0 -0.9786556959152222 0.914814829826355 -1.6662826538085938 -0.4669942259788513 0.35224464535713196 -0.8110293745994568 0.8712304830551147 0.5701385736465454 0 1.0 0 0.0 0 0.0 0 0.0 -1.5060631036758423 1.2518517971038818 -0.8845542669296265 -0.7385479211807251 0.5233008861541748 -0.42506179213523865 0.957268476486206 0.6726799011230469 0 1.0 0 0.0 0 0.0 0 0.0 -1.2977778911590576 1.6000001430511475 -0.7622222900390625 -0.65178382396698 0.6591692566871643 -0.3750419616699219 0.9449872970581055 0.762032687664032 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222304344177 1.6000001430511475 -1.297777771949768 -0.3750419616699219 0.6591692566871643 -0.65178382396698 0.8343170881271362 0.699485719203949 0 1.0 0 0.0 0 0.0 0 0.0 -0.8845541477203369 1.2518519163131714 -1.5060631036758423 -0.42506179213523865 0.5233008861541748 -0.7385479211807251 0.8572931885719299 0.6273802518844604 0 1.0 0 0.0 0 0.0 0 0.0 -2.0 0.6000000238418579 -0.0 -0.8362376689910889 0.5483260750770569 -0.0 1.0637041330337524 0.5364704132080078 0 1.0 0 0.0 0 0.0 0 0.0 -1.9259259700775146 0.914814829826355 -0.0 -0.9362162947654724 0.35139012336730957 -0.0 1.0693717002868652 0.5914106965065002 0 1.0 0 0.0 0 0.0 0 0.0 -1.6662826538085938 0.914814829826355 -0.9786556959152222 -0.8110293745994568 0.35224464535713196 -0.4669942259788513 0.9633795022964478 0.6049708127975464 0 1.0 0 0.0 0 0.0 0 0.0 -1.7303704023361206 0.6000000238418579 -1.0162962675094604 -0.860591471195221 -0.11569567024707794 -0.49595630168914795 0.9665490388870239 0.5510944128036499 0 1.0 0 0.0 0 0.0 0 0.0 -1.9259259700775146 0.914814829826355 -0.0 -0.9362162947654724 0.35139012336730957 -0.0 1.0693717002868652 0.5914106965065002 0 1.0 0 0.0 0 0.0 0 0.0 -1.7407406568527222 1.2518519163131714 -0.0 -0.8528397679328918 0.522110641002655 -0.0 1.0775521993637085 0.6612304449081421 0 1.0 0 0.0 0 0.0 0 0.0 -1.5060631036758423 1.2518517971038818 -0.8845542669296265 -0.7385479211807251 0.5233008861541748 -0.42506179213523865 0.957268476486206 0.6726799011230469 0 1.0 0 0.0 0 0.0 0 0.0 -1.6662826538085938 0.914814829826355 -0.9786556959152222 -0.8110293745994568 0.35224464535713196 -0.4669942259788513 0.9633795022964478 0.6049708127975464 0 1.0 0 0.0 0 0.0 0 0.0 -1.7407406568527222 1.2518519163131714 -0.0 -0.8528397679328918 0.522110641002655 -0.0 1.0775521993637085 0.6612304449081421 0 1.0 0 0.0 0 0.0 0 0.0 -1.5 1.6000001430511475 -0.0 -0.7528916001319885 0.6581011414527893 -0.0 1.092570185661316 0.7542117834091187 0 1.0 0 0.0 0 0.0 0 0.0 -1.2977778911590576 1.6000001430511475 -0.7622222900390625 -0.65178382396698 0.6591692566871643 -0.3750419616699219 0.9449872970581055 0.762032687664032 0 1.0 0 0.0 0 0.0 0 0.0 -1.5060631036758423 1.2518517971038818 -0.8845542669296265 -0.7385479211807251 0.5233008861541748 -0.42506179213523865 0.957268476486206 0.6726799011230469 0 1.0 0 0.0 0 0.0 0 0.0 1.7303704023361206 0.6000000238418579 -1.0162962675094604 0.860591471195221 -0.11569567024707794 -0.49595630168914795 0.6618058681488037 0.34603065252304077 0 1.0 0 0.0 0 0.0 0 0.0 1.6662826538085938 0.914814829826355 -0.9786556959152222 0.8110293745994568 0.35224464535713196 -0.4669942259788513 0.6526945233345032 0.38379746675491333 0 1.0 0 0.0 0 0.0 0 0.0 1.9259259700775146 0.914814829826355 -0.0 0.9362162947654724 0.35139012336730957 -0.0 0.5773130655288696 0.3406168222427368 0 1.0 0 0.0 0 0.0 0 0.0 2.0 0.6000000238418579 -0.0 0.9932859539985657 -0.11548203974962234 -0.0 0.5828353762626648 0.30102527141571045 0 1.0 0 0.0 0 0.0 0 0.0 1.6662826538085938 0.914814829826355 -0.9786556959152222 0.8110293745994568 0.35224464535713196 -0.4669942259788513 0.6526945233345032 0.38379746675491333 0 1.0 0 0.0 0 0.0 0 0.0 1.5060631036758423 1.2518519163131714 -0.8845541477203369 0.7385479211807251 0.5233008861541748 -0.42506179213523865 0.6421607136726379 0.42898160219192505 0 1.0 0 0.0 0 0.0 0 0.0 1.7407406568527222 1.2518519163131714 -0.0 0.8528397679328918 0.522110641002655 -0.0 0.5716165900230408 0.3881370425224304 0 1.0 0 0.0 0 0.0 0 0.0 1.9259259700775146 0.914814829826355 -0.0 0.9362162947654724 0.35139012336730957 -0.0 0.5773130655288696 0.3406168222427368 0 1.0 0 0.0 0 0.0 0 0.0 1.5060631036758423 1.2518519163131714 -0.8845541477203369 0.7385479211807251 0.5233008861541748 -0.42506179213523865 0.6421607136726379 0.42898160219192505 0 1.0 0 0.0 0 0.0 0 0.0 1.297777771949768 1.6000001430511475 -0.7622222304344177 0.65178382396698 0.6591692566871643 -0.3750419616699219 0.6295300722122192 0.48565661907196045 0 1.0 0 0.0 0 0.0 0 0.0 1.5 1.6000001430511475 -0.0 0.7528916001319885 0.6581011414527893 -0.0 0.5653074383735657 0.44760727882385254 0 1.0 0 0.0 0 0.0 0 0.0 1.7407406568527222 1.2518519163131714 -0.0 0.8528397679328918 0.522110641002655 -0.0 0.5716165900230408 0.3881370425224304 0 1.0 0 0.0 0 0.0 0 0.0 1.0162962675094604 0.6000000238418579 -1.7303704023361206 0.49595630168914795 -0.11569567024707794 -0.860591471195221 0.7305766344070435 0.4031161665916443 0 1.0 0 0.0 0 0.0 0 0.0 0.9786556959152222 0.914814829826355 -1.6662826538085938 0.4669942259788513 0.35224464535713196 -0.8110293745994568 0.7198944091796875 0.4410156011581421 0 1.0 0 0.0 0 0.0 0 0.0 1.6662826538085938 0.914814829826355 -0.9786556959152222 0.8110293745994568 0.35224464535713196 -0.4669942259788513 0.6526945233345032 0.38379746675491333 0 1.0 0 0.0 0 0.0 0 0.0 1.7303704023361206 0.6000000238418579 -1.0162962675094604 0.860591471195221 -0.11569567024707794 -0.49595630168914795 0.6618058681488037 0.34603065252304077 0 1.0 0 0.0 0 0.0 0 0.0 0.9786556959152222 0.914814829826355 -1.6662826538085938 0.4669942259788513 0.35224464535713196 -0.8110293745994568 0.7198944091796875 0.4410156011581421 0 1.0 0 0.0 0 0.0 0 0.0 0.8845542669296265 1.2518517971038818 -1.5060631036758423 0.42506179213523865 0.5233008861541748 -0.7385479211807251 0.7064718008041382 0.4859408140182495 0 1.0 0 0.0 0 0.0 0 0.0 1.5060631036758423 1.2518519163131714 -0.8845541477203369 0.7385479211807251 0.5233008861541748 -0.42506179213523865 0.6421607136726379 0.42898160219192505 0 1.0 0 0.0 0 0.0 0 0.0 1.6662826538085938 0.914814829826355 -0.9786556959152222 0.8110293745994568 0.35224464535713196 -0.4669942259788513 0.6526945233345032 0.38379746675491333 0 1.0 0 0.0 0 0.0 0 0.0 0.8845542669296265 1.2518517971038818 -1.5060631036758423 0.42506179213523865 0.5233008861541748 -0.7385479211807251 0.7064718008041382 0.4859408140182495 0 1.0 0 0.0 0 0.0 0 0.0 0.7622222900390625 1.6000001430511475 -1.2977778911590576 0.3750419616699219 0.6591692566871643 -0.65178382396698 0.6891228556632996 0.5420753359794617 0 1.0 0 0.0 0 0.0 0 0.0 1.297777771949768 1.6000001430511475 -0.7622222304344177 0.65178382396698 0.6591692566871643 -0.3750419616699219 0.6295300722122192 0.48565661907196045 0 1.0 0 0.0 0 0.0 0 0.0 1.5060631036758423 1.2518519163131714 -0.8845541477203369 0.7385479211807251 0.5233008861541748 -0.42506179213523865 0.6421607136726379 0.42898160219192505 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.6000000238418579 -2.0 0.0 -0.11548203974962234 -0.9932859539985657 0.8017946481704712 0.4667319059371948 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.914814829826355 -1.9259259700775146 0.0 0.35139012336730957 -0.9362162947654724 0.7908333539962769 0.5078861713409424 0 1.0 0 0.0 0 0.0 0 0.0 0.9786556959152222 0.914814829826355 -1.6662826538085938 0.4669942259788513 0.35224464535713196 -0.8110293745994568 0.7198944091796875 0.4410156011581421 0 1.0 0 0.0 0 0.0 0 0.0 1.0162962675094604 0.6000000238418579 -1.7303704023361206 0.49595630168914795 -0.11569567024707794 -0.860591471195221 0.7305766344070435 0.4031161665916443 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.914814829826355 -1.9259259700775146 0.0 0.35139012336730957 -0.9362162947654724 0.7908333539962769 0.5078861713409424 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.2518519163131714 -1.7407406568527222 0.0 0.522110641002655 -0.8528702855110168 0.7757281064987183 0.5565197467803955 0 1.0 0 0.0 0 0.0 0 0.0 0.8845542669296265 1.2518517971038818 -1.5060631036758423 0.42506179213523865 0.5233008861541748 -0.7385479211807251 0.7064718008041382 0.4859408140182495 0 1.0 0 0.0 0 0.0 0 0.0 0.9786556959152222 0.914814829826355 -1.6662826538085938 0.4669942259788513 0.35224464535713196 -0.8110293745994568 0.7198944091796875 0.4410156011581421 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.2518519163131714 -1.7407406568527222 0.0 0.522110641002655 -0.8528702855110168 0.7757281064987183 0.5565197467803955 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6000001430511475 -1.5 0.0 0.6581011414527893 -0.7528916001319885 0.7542129755020142 0.6169042587280273 0 1.0 0 0.0 0 0.0 0 0.0 0.7622222900390625 1.6000001430511475 -1.2977778911590576 0.3750419616699219 0.6591692566871643 -0.65178382396698 0.6891228556632996 0.5420753359794617 0 1.0 0 0.0 0 0.0 0 0.0 0.8845542669296265 1.2518517971038818 -1.5060631036758423 0.42506179213523865 0.5233008861541748 -0.7385479211807251 0.7064718008041382 0.4859408140182495 0 1.0 0 0.0 0 0.0 0 0.0 0.7622222900390625 0.10000000894069672 1.2977778911590576 0.27433088421821594 -0.8349558711051941 0.4770042896270752 0.3956698775291443 0.19993311166763306 0 1.0 0 0.0 0 0.0 0 0.0 0.8280932903289795 0.18518517911434174 1.4099314212799072 0.2763756215572357 -0.8322397470474243 0.48057496547698975 0.39810073375701904 0.2214469313621521 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.18518517911434174 1.6296296119689941 0.0 -0.8313852548599243 0.5556504726409912 0.30315589904785156 0.2634827494621277 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.10000000894069672 1.5 0.0 -0.8341318964958191 0.5515609979629517 0.29800066351890564 0.24066346883773804 0 1.0 0 0.0 0 0.0 0 0.0 0.8280932903289795 0.18518517911434174 1.4099314212799072 0.2763756215572357 -0.8322397470474243 0.48057496547698975 0.39810073375701904 0.2214469313621521 0 1.0 0 0.0 0 0.0 0 0.0 0.9504251480102539 0.3481481671333313 1.618216872215271 0.3812372088432312 -0.6448255777359009 0.6624347567558289 0.4015105068683624 0.2580564022064209 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.3481481671333313 1.8703705072402954 0.0 -0.6440016031265259 0.764976978302002 0.31060802936553955 0.30255943536758423 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.18518517911434174 1.6296296119689941 0.0 -0.8313852548599243 0.5556504726409912 0.30315589904785156 0.2634827494621277 0 1.0 0 0.0 0 0.0 0 0.0 0.9504251480102539 0.3481481671333313 1.618216872215271 0.3812372088432312 -0.6448255777359009 0.6624347567558289 0.4015105068683624 0.2580564022064209 0 1.0 0 0.0 0 0.0 0 0.0 1.0162962675094604 0.6000000238418579 1.7303704023361206 0.49595630168914795 -0.11569567024707794 0.860591471195221 0.40639829635620117 0.2969917058944702 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.6000000238418579 2.0 0.0 -0.11548203974962234 0.9932859539985657 0.31945714354515076 0.342856228351593 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.3481481671333313 1.8703705072402954 0.0 -0.6440016031265259 0.764976978302002 0.31060802936553955 0.30255943536758423 0 1.0 0 0.0 0 0.0 0 0.0 1.297777771949768 0.10000000894069672 0.7622222304344177 0.4770042896270752 -0.8349558711051941 0.27433088421821594 0.49929916858673096 0.19021719694137573 0 1.0 0 0.0 0 0.0 0 0.0 1.4099314212799072 0.18518517911434174 0.828093409538269 0.48057496547698975 -0.8322397470474243 0.2763756215572357 0.49755406379699707 0.21050095558166504 0 1.0 0 0.0 0 0.0 0 0.0 0.8280932903289795 0.18518517911434174 1.4099314212799072 0.2763756215572357 -0.8322397470474243 0.48057496547698975 0.39810073375701904 0.2214469313621521 0 1.0 0 0.0 0 0.0 0 0.0 0.7622222900390625 0.10000000894069672 1.2977778911590576 0.27433088421821594 -0.8349558711051941 0.4770042896270752 0.3956698775291443 0.19993311166763306 0 1.0 0 0.0 0 0.0 0 0.0 1.4099314212799072 0.18518517911434174 0.828093409538269 0.48057496547698975 -0.8322397470474243 0.2763756215572357 0.49755406379699707 0.21050095558166504 0 1.0 0 0.0 0 0.0 0 0.0 1.618216872215271 0.3481481671333313 0.9504252076148987 0.6624347567558289 -0.6448255777359009 0.3812372088432312 0.4951971769332886 0.24500828981399536 0 1.0 0 0.0 0 0.0 0 0.0 0.9504251480102539 0.3481481671333313 1.618216872215271 0.3812372088432312 -0.6448255777359009 0.6624347567558289 0.4015105068683624 0.2580564022064209 0 1.0 0 0.0 0 0.0 0 0.0 0.8280932903289795 0.18518517911434174 1.4099314212799072 0.2763756215572357 -0.8322397470474243 0.48057496547698975 0.39810073375701904 0.2214469313621521 0 1.0 0 0.0 0 0.0 0 0.0 1.618216872215271 0.3481481671333313 0.9504252076148987 0.6624347567558289 -0.6448255777359009 0.3812372088432312 0.4951971769332886 0.24500828981399536 0 1.0 0 0.0 0 0.0 0 0.0 1.7303704023361206 0.6000000238418579 1.0162962675094604 0.860591471195221 -0.11569567024707794 0.49595630168914795 0.49428650736808777 0.28271710872650146 0 1.0 0 0.0 0 0.0 0 0.0 1.0162962675094604 0.6000000238418579 1.7303704023361206 0.49595630168914795 -0.11569567024707794 0.860591471195221 0.40639829635620117 0.2969917058944702 0 1.0 0 0.0 0 0.0 0 0.0 0.9504251480102539 0.3481481671333313 1.618216872215271 0.3812372088432312 -0.6448255777359009 0.6624347567558289 0.4015105068683624 0.2580564022064209 0 1.0 0 0.0 0 0.0 0 0.0 1.5 0.10000000894069672 -0.0 0.5515609979629517 -0.8341318964958191 -0.0 0.600112795829773 0.21345442533493042 0 1.0 0 0.0 0 0.0 0 0.0 1.6296296119689941 0.18518517911434174 -0.0 0.5556504726409912 -0.8313852548599243 -0.0 0.5954587459564209 0.23246979713439941 0 1.0 0 0.0 0 0.0 0 0.0 1.4099314212799072 0.18518517911434174 0.828093409538269 0.48057496547698975 -0.8322397470474243 0.2763756215572357 0.49755406379699707 0.21050095558166504 0 1.0 0 0.0 0 0.0 0 0.0 1.297777771949768 0.10000000894069672 0.7622222304344177 0.4770042896270752 -0.8349558711051941 0.27433088421821594 0.49929916858673096 0.19021719694137573 0 1.0 0 0.0 0 0.0 0 0.0 1.6296296119689941 0.18518517911434174 -0.0 0.5556504726409912 -0.8313852548599243 -0.0 0.5954587459564209 0.23246979713439941 0 1.0 0 0.0 0 0.0 0 0.0 1.8703705072402954 0.3481481671333313 -0.0 0.764976978302002 -0.6440016031265259 -0.0 0.5888184905052185 0.26505810022354126 0 1.0 0 0.0 0 0.0 0 0.0 1.618216872215271 0.3481481671333313 0.9504252076148987 0.6624347567558289 -0.6448255777359009 0.3812372088432312 0.4951971769332886 0.24500828981399536 0 1.0 0 0.0 0 0.0 0 0.0 1.4099314212799072 0.18518517911434174 0.828093409538269 0.48057496547698975 -0.8322397470474243 0.2763756215572357 0.49755406379699707 0.21050095558166504 0 1.0 0 0.0 0 0.0 0 0.0 1.8703705072402954 0.3481481671333313 -0.0 0.764976978302002 -0.6440016031265259 -0.0 0.5888184905052185 0.26505810022354126 0 1.0 0 0.0 0 0.0 0 0.0 2.0 0.6000000238418579 -0.0 0.9932859539985657 -0.11548203974962234 -0.0 0.5828353762626648 0.30102527141571045 0 1.0 0 0.0 0 0.0 0 0.0 1.7303704023361206 0.6000000238418579 1.0162962675094604 0.860591471195221 -0.11569567024707794 0.49595630168914795 0.49428650736808777 0.28271710872650146 0 1.0 0 0.0 0 0.0 0 0.0 1.618216872215271 0.3481481671333313 0.9504252076148987 0.6624347567558289 -0.6448255777359009 0.3812372088432312 0.4951971769332886 0.24500828981399536 0 1.0 0 0.0 0 0.0 0 0.0 -1.2977778911590576 0.10000000894069672 0.7622222900390625 -0.4770042896270752 -0.8349558711051941 0.27433088421821594 0.13414856791496277 0.35897499322891235 0 1.0 0 0.0 0 0.0 0 0.0 -1.4099314212799072 0.18518517911434174 0.8280932903289795 -0.48057496547698975 -0.8322397470474243 0.2763756215572357 0.13922429084777832 0.3864933252334595 0 1.0 0 0.0 0 0.0 0 0.0 -1.6296296119689941 0.18518517911434174 -0.0 -0.5556504726409912 -0.8313852548599243 -0.0 0.053547054529190063 0.4346669912338257 0 1.0 0 0.0 0 0.0 0 0.0 -1.5 0.10000000894069672 -0.0 -0.5515609979629517 -0.8341318964958191 -0.0 0.05043032765388489 0.4051086902618408 0 1.0 0 0.0 0 0.0 0 0.0 -1.4099314212799072 0.18518517911434174 0.8280932903289795 -0.48057496547698975 -0.8322397470474243 0.2763756215572357 0.13922429084777832 0.3864933252334595 0 1.0 0 0.0 0 0.0 0 0.0 -1.618216872215271 0.3481481671333313 0.9504251480102539 -0.6624347567558289 -0.6448255777359009 0.3812372088432312 0.14721912145614624 0.4334830045700073 0 1.0 0 0.0 0 0.0 0 0.0 -1.8703705072402954 0.3481481671333313 -0.0 -0.764976978302002 -0.6440016031265259 -0.0 0.05861186981201172 0.48504698276519775 0 1.0 0 0.0 0 0.0 0 0.0 -1.6296296119689941 0.18518517911434174 -0.0 -0.5556504726409912 -0.8313852548599243 -0.0 0.053547054529190063 0.4346669912338257 0 1.0 0 0.0 0 0.0 0 0.0 -1.618216872215271 0.3481481671333313 0.9504251480102539 -0.6624347567558289 -0.6448255777359009 0.3812372088432312 0.14721912145614624 0.4334830045700073 0 1.0 0 0.0 0 0.0 0 0.0 -1.7303704023361206 0.6000000238418579 1.0162962675094604 -0.860591471195221 -0.11569567024707794 0.49595630168914795 0.15623977780342102 0.4808504581451416 0 1.0 0 0.0 0 0.0 0 0.0 -2.0 0.6000000238418579 -0.0 -0.8362376689910889 0.5483260750770569 -0.0 0.06370410323143005 0.5364704132080078 0 1.0 0 0.0 0 0.0 0 0.0 -1.8703705072402954 0.3481481671333313 -0.0 -0.764976978302002 -0.6440016031265259 -0.0 0.05861186981201172 0.48504698276519775 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222900390625 0.10000000894069672 1.2977778911590576 -0.27433088421821594 -0.8349558711051941 0.4770042896270752 0.21255284547805786 0.3001919388771057 0 1.0 0 0.0 0 0.0 0 0.0 -0.828093409538269 0.18518517911434174 1.4099314212799072 -0.2763756215572357 -0.8322397470474243 0.48057496547698975 0.2183249592781067 0.32508355379104614 0 1.0 0 0.0 0 0.0 0 0.0 -1.4099314212799072 0.18518517911434174 0.8280932903289795 -0.48057496547698975 -0.8322397470474243 0.2763756215572357 0.13922429084777832 0.3864933252334595 0 1.0 0 0.0 0 0.0 0 0.0 -1.2977778911590576 0.10000000894069672 0.7622222900390625 -0.4770042896270752 -0.8349558711051941 0.27433088421821594 0.13414856791496277 0.35897499322891235 0 1.0 0 0.0 0 0.0 0 0.0 -0.828093409538269 0.18518517911434174 1.4099314212799072 -0.2763756215572357 -0.8322397470474243 0.48057496547698975 0.2183249592781067 0.32508355379104614 0 1.0 0 0.0 0 0.0 0 0.0 -0.9504252076148987 0.3481481671333313 1.618216872215271 -0.3812372088432312 -0.6448255777359009 0.6624347567558289 0.22705289721488953 0.3677188754081726 0 1.0 0 0.0 0 0.0 0 0.0 -1.618216872215271 0.3481481671333313 0.9504251480102539 -0.6624347567558289 -0.6448255777359009 0.3812372088432312 0.14721912145614624 0.4334830045700073 0 1.0 0 0.0 0 0.0 0 0.0 -1.4099314212799072 0.18518517911434174 0.8280932903289795 -0.48057496547698975 -0.8322397470474243 0.2763756215572357 0.13922429084777832 0.3864933252334595 0 1.0 0 0.0 0 0.0 0 0.0 -0.9504252076148987 0.3481481671333313 1.618216872215271 -0.3812372088432312 -0.6448255777359009 0.6624347567558289 0.22705289721488953 0.3677188754081726 0 1.0 0 0.0 0 0.0 0 0.0 -1.0162962675094604 0.6000000238418579 1.7303704023361206 -0.49595630168914795 -0.11569567024707794 0.860591471195221 0.23712080717086792 0.41073405742645264 0 1.0 0 0.0 0 0.0 0 0.0 -1.7303704023361206 0.6000000238418579 1.0162962675094604 -0.860591471195221 -0.11569567024707794 0.49595630168914795 0.15623977780342102 0.4808504581451416 0 1.0 0 0.0 0 0.0 0 0.0 -1.618216872215271 0.3481481671333313 0.9504251480102539 -0.6624347567558289 -0.6448255777359009 0.3812372088432312 0.14721912145614624 0.4334830045700073 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.10000000894069672 1.5 0.0 -0.8341318964958191 0.5515609979629517 0.29800066351890564 0.24066346883773804 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.18518517911434174 1.6296296119689941 0.0 -0.8313852548599243 0.5556504726409912 0.30315589904785156 0.2634827494621277 0 1.0 0 0.0 0 0.0 0 0.0 -0.828093409538269 0.18518517911434174 1.4099314212799072 -0.2763756215572357 -0.8322397470474243 0.48057496547698975 0.2183249592781067 0.32508355379104614 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222900390625 0.10000000894069672 1.2977778911590576 -0.27433088421821594 -0.8349558711051941 0.4770042896270752 0.21255284547805786 0.3001919388771057 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.18518517911434174 1.6296296119689941 0.0 -0.8313852548599243 0.5556504726409912 0.30315589904785156 0.2634827494621277 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.3481481671333313 1.8703705072402954 0.0 -0.6440016031265259 0.764976978302002 0.31060802936553955 0.30255943536758423 0 1.0 0 0.0 0 0.0 0 0.0 -0.9504252076148987 0.3481481671333313 1.618216872215271 -0.3812372088432312 -0.6448255777359009 0.6624347567558289 0.22705289721488953 0.3677188754081726 0 1.0 0 0.0 0 0.0 0 0.0 -0.828093409538269 0.18518517911434174 1.4099314212799072 -0.2763756215572357 -0.8322397470474243 0.48057496547698975 0.2183249592781067 0.32508355379104614 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.3481481671333313 1.8703705072402954 0.0 -0.6440016031265259 0.764976978302002 0.31060802936553955 0.30255943536758423 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.6000000238418579 2.0 0.0 -0.11548203974962234 0.9932859539985657 0.31945714354515076 0.342856228351593 0 1.0 0 0.0 0 0.0 0 0.0 -1.0162962675094604 0.6000000238418579 1.7303704023361206 -0.49595630168914795 -0.11569567024707794 0.860591471195221 0.23712080717086792 0.41073405742645264 0 1.0 0 0.0 0 0.0 0 0.0 -0.9504252076148987 0.3481481671333313 1.618216872215271 -0.3812372088432312 -0.6448255777359009 0.6624347567558289 0.22705289721488953 0.3677188754081726 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222900390625 0.10000000894069672 -1.2977778911590576 -0.27433088421821594 -0.8349558711051941 -0.4770042896270752 0.8909897804260254 0.40578246116638184 0 1.0 0 0.0 0 0.0 0 0.0 -0.8280932903289795 0.18518517911434174 -1.4099314212799072 -0.2763756215572357 -0.8322397470474243 -0.48057496547698975 0.8889819979667664 0.4321751594543457 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.18518517911434174 -1.6296296119689941 0.0 -0.8313852548599243 -0.5556504726409912 0.8155300617218018 0.3874537944793701 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.10000000894069672 -1.5 0.0 -0.8341318964958191 -0.5515609979629517 0.8191912174224854 0.3644620180130005 0 1.0 0 0.0 0 0.0 0 0.0 -0.8280932903289795 0.18518517911434174 -1.4099314212799072 -0.2763756215572357 -0.8322397470474243 -0.48057496547698975 0.8889819979667664 0.4321751594543457 0 1.0 0 0.0 0 0.0 0 0.0 -0.9504251480102539 0.3481481671333313 -1.618216872215271 -0.3812372088432312 -0.6448255777359009 -0.6624347567558289 0.8856533765792847 0.47703999280929565 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.3481481671333313 -1.8703705072402954 0.0 -0.6440016031265259 -0.764976978302002 0.8096545934677124 0.4266200661659241 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.18518517911434174 -1.6296296119689941 0.0 -0.8313852548599243 -0.5556504726409912 0.8155300617218018 0.3874537944793701 0 1.0 0 0.0 0 0.0 0 0.0 -0.9504251480102539 0.3481481671333313 -1.618216872215271 -0.3812372088432312 -0.6448255777359009 -0.6624347567558289 0.8856533765792847 0.47703999280929565 0 1.0 0 0.0 0 0.0 0 0.0 -1.0162962675094604 0.6000000238418579 -1.7303704023361206 -0.49595630168914795 -0.11569567024707794 -0.860591471195221 0.8801935911178589 0.5227434039115906 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.6000000238418579 -2.0 0.0 -0.11548203974962234 -0.9932859539985657 0.8017946481704712 0.4667319059371948 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.3481481671333313 -1.8703705072402954 0.0 -0.6440016031265259 -0.764976978302002 0.8096545934677124 0.4266200661659241 0 1.0 0 0.0 0 0.0 0 0.0 -1.2977778911590576 0.10000000894069672 -0.7622222900390625 -0.4770042896270752 -0.8349558711051941 -0.27433088421821594 0.9665573835372925 0.4220300316810608 0 1.0 0 0.0 0 0.0 0 0.0 -1.4099314212799072 0.18518517911434174 -0.828093409538269 -0.48057496547698975 -0.8322397470474243 -0.2763756215572357 0.9669049978256226 0.4510842561721802 0 1.0 0 0.0 0 0.0 0 0.0 -0.8280932903289795 0.18518517911434174 -1.4099314212799072 -0.2763756215572357 -0.8322397470474243 -0.48057496547698975 0.8889819979667664 0.4321751594543457 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222900390625 0.10000000894069672 -1.2977778911590576 -0.27433088421821594 -0.8349558711051941 -0.4770042896270752 0.8909897804260254 0.40578246116638184 0 1.0 0 0.0 0 0.0 0 0.0 -1.4099314212799072 0.18518517911434174 -0.828093409538269 -0.48057496547698975 -0.8322397470474243 -0.2763756215572357 0.9669049978256226 0.4510842561721802 0 1.0 0 0.0 0 0.0 0 0.0 -1.618216872215271 0.3481481671333313 -0.9504252076148987 -0.6624347567558289 -0.6448255777359009 -0.3812372088432312 0.9674350023269653 0.5005022287368774 0 1.0 0 0.0 0 0.0 0 0.0 -0.9504251480102539 0.3481481671333313 -1.618216872215271 -0.3812372088432312 -0.6448255777359009 -0.6624347567558289 0.8856533765792847 0.47703999280929565 0 1.0 0 0.0 0 0.0 0 0.0 -0.8280932903289795 0.18518517911434174 -1.4099314212799072 -0.2763756215572357 -0.8322397470474243 -0.48057496547698975 0.8889819979667664 0.4321751594543457 0 1.0 0 0.0 0 0.0 0 0.0 -1.618216872215271 0.3481481671333313 -0.9504252076148987 -0.6624347567558289 -0.6448255777359009 -0.3812372088432312 0.9674350023269653 0.5005022287368774 0 1.0 0 0.0 0 0.0 0 0.0 -1.7303704023361206 0.6000000238418579 -1.0162962675094604 -0.860591471195221 -0.11569567024707794 -0.49595630168914795 0.9665490388870239 0.5510944128036499 0 1.0 0 0.0 0 0.0 0 0.0 -1.0162962675094604 0.6000000238418579 -1.7303704023361206 -0.49595630168914795 -0.11569567024707794 -0.860591471195221 0.8801935911178589 0.5227434039115906 0 1.0 0 0.0 0 0.0 0 0.0 -0.9504251480102539 0.3481481671333313 -1.618216872215271 -0.3812372088432312 -0.6448255777359009 -0.6624347567558289 0.8856533765792847 0.47703999280929565 0 1.0 0 0.0 0 0.0 0 0.0 -1.5 0.10000000894069672 -0.0 -0.5515609979629517 -0.8341318964958191 -0.0 1.0504302978515625 0.4051086902618408 0 1.0 0 0.0 0 0.0 0 0.0 -1.6296296119689941 0.18518517911434174 -0.0 -0.5556504726409912 -0.8313852548599243 -0.0 1.0535470247268677 0.4346669912338257 0 1.0 0 0.0 0 0.0 0 0.0 -1.4099314212799072 0.18518517911434174 -0.828093409538269 -0.48057496547698975 -0.8322397470474243 -0.2763756215572357 0.9669049978256226 0.4510842561721802 0 1.0 0 0.0 0 0.0 0 0.0 -1.2977778911590576 0.10000000894069672 -0.7622222900390625 -0.4770042896270752 -0.8349558711051941 -0.27433088421821594 0.9665573835372925 0.4220300316810608 0 1.0 0 0.0 0 0.0 0 0.0 -1.6296296119689941 0.18518517911434174 -0.0 -0.5556504726409912 -0.8313852548599243 -0.0 1.0535470247268677 0.4346669912338257 0 1.0 0 0.0 0 0.0 0 0.0 -1.8703705072402954 0.3481481671333313 -0.0 -0.764976978302002 -0.6440016031265259 -0.0 1.0586118698120117 0.48504698276519775 0 1.0 0 0.0 0 0.0 0 0.0 -1.618216872215271 0.3481481671333313 -0.9504252076148987 -0.6624347567558289 -0.6448255777359009 -0.3812372088432312 0.9674350023269653 0.5005022287368774 0 1.0 0 0.0 0 0.0 0 0.0 -1.4099314212799072 0.18518517911434174 -0.828093409538269 -0.48057496547698975 -0.8322397470474243 -0.2763756215572357 0.9669049978256226 0.4510842561721802 0 1.0 0 0.0 0 0.0 0 0.0 -1.8703705072402954 0.3481481671333313 -0.0 -0.764976978302002 -0.6440016031265259 -0.0 1.0586118698120117 0.48504698276519775 0 1.0 0 0.0 0 0.0 0 0.0 -2.0 0.6000000238418579 -0.0 -0.8362376689910889 0.5483260750770569 -0.0 1.0637041330337524 0.5364704132080078 0 1.0 0 0.0 0 0.0 0 0.0 -1.7303704023361206 0.6000000238418579 -1.0162962675094604 -0.860591471195221 -0.11569567024707794 -0.49595630168914795 0.9665490388870239 0.5510944128036499 0 1.0 0 0.0 0 0.0 0 0.0 -1.618216872215271 0.3481481671333313 -0.9504252076148987 -0.6624347567558289 -0.6448255777359009 -0.3812372088432312 0.9674350023269653 0.5005022287368774 0 1.0 0 0.0 0 0.0 0 0.0 1.297777771949768 0.10000000894069672 -0.7622222304344177 0.4770042896270752 -0.8349558711051941 -0.27433088421821594 0.6829252243041992 0.25979578495025635 0 1.0 0 0.0 0 0.0 0 0.0 1.4099314212799072 0.18518517911434174 -0.8280932903289795 0.48057496547698975 -0.8322397470474243 -0.2763756215572357 0.6777608394622803 0.27866190671920776 0 1.0 0 0.0 0 0.0 0 0.0 1.6296296119689941 0.18518517911434174 -0.0 0.5556504726409912 -0.8313852548599243 -0.0 0.5954587459564209 0.23246979713439941 0 1.0 0 0.0 0 0.0 0 0.0 1.5 0.10000000894069672 -0.0 0.5515609979629517 -0.8341318964958191 -0.0 0.600112795829773 0.21345442533493042 0 1.0 0 0.0 0 0.0 0 0.0 1.4099314212799072 0.18518517911434174 -0.8280932903289795 0.48057496547698975 -0.8322397470474243 -0.2763756215572357 0.6777608394622803 0.27866190671920776 0 1.0 0 0.0 0 0.0 0 0.0 1.618216872215271 0.3481481671333313 -0.9504251480102539 0.6624347567558289 -0.6448255777359009 -0.3812372088432312 0.6700261831283569 0.3110303282737732 0 1.0 0 0.0 0 0.0 0 0.0 1.8703705072402954 0.3481481671333313 -0.0 0.764976978302002 -0.6440016031265259 -0.0 0.5888184905052185 0.26505810022354126 0 1.0 0 0.0 0 0.0 0 0.0 1.6296296119689941 0.18518517911434174 -0.0 0.5556504726409912 -0.8313852548599243 -0.0 0.5954587459564209 0.23246979713439941 0 1.0 0 0.0 0 0.0 0 0.0 1.618216872215271 0.3481481671333313 -0.9504251480102539 0.6624347567558289 -0.6448255777359009 -0.3812372088432312 0.6700261831283569 0.3110303282737732 0 1.0 0 0.0 0 0.0 0 0.0 1.7303704023361206 0.6000000238418579 -1.0162962675094604 0.860591471195221 -0.11569567024707794 -0.49595630168914795 0.6618058681488037 0.34603065252304077 0 1.0 0 0.0 0 0.0 0 0.0 2.0 0.6000000238418579 -0.0 0.9932859539985657 -0.11548203974962234 -0.0 0.5828353762626648 0.30102527141571045 0 1.0 0 0.0 0 0.0 0 0.0 1.8703705072402954 0.3481481671333313 -0.0 0.764976978302002 -0.6440016031265259 -0.0 0.5888184905052185 0.26505810022354126 0 1.0 0 0.0 0 0.0 0 0.0 0.7622222304344177 0.10000000894069672 -1.297777771949768 0.27433088421821594 -0.8349558711051941 -0.4770042896270752 0.7510849833488464 0.31206804513931274 0 1.0 0 0.0 0 0.0 0 0.0 0.828093409538269 0.18518517911434174 -1.4099314212799072 0.2763756215572357 -0.8322397470474243 -0.48057496547698975 0.7464216947555542 0.33229804039001465 0 1.0 0 0.0 0 0.0 0 0.0 1.4099314212799072 0.18518517911434174 -0.8280932903289795 0.48057496547698975 -0.8322397470474243 -0.2763756215572357 0.6777608394622803 0.27866190671920776 0 1.0 0 0.0 0 0.0 0 0.0 1.297777771949768 0.10000000894069672 -0.7622222304344177 0.4770042896270752 -0.8349558711051941 -0.27433088421821594 0.6829252243041992 0.25979578495025635 0 1.0 0 0.0 0 0.0 0 0.0 0.828093409538269 0.18518517911434174 -1.4099314212799072 0.2763756215572357 -0.8322397470474243 -0.48057496547698975 0.7464216947555542 0.33229804039001465 0 1.0 0 0.0 0 0.0 0 0.0 0.9504252076148987 0.3481481671333313 -1.618216872215271 0.3812372088432312 -0.6448255777359009 -0.6624347567558289 0.7391786575317383 0.3668786883354187 0 1.0 0 0.0 0 0.0 0 0.0 1.618216872215271 0.3481481671333313 -0.9504251480102539 0.6624347567558289 -0.6448255777359009 -0.3812372088432312 0.6700261831283569 0.3110303282737732 0 1.0 0 0.0 0 0.0 0 0.0 1.4099314212799072 0.18518517911434174 -0.8280932903289795 0.48057496547698975 -0.8322397470474243 -0.2763756215572357 0.6777608394622803 0.27866190671920776 0 1.0 0 0.0 0 0.0 0 0.0 0.9504252076148987 0.3481481671333313 -1.618216872215271 0.3812372088432312 -0.6448255777359009 -0.6624347567558289 0.7391786575317383 0.3668786883354187 0 1.0 0 0.0 0 0.0 0 0.0 1.0162962675094604 0.6000000238418579 -1.7303704023361206 0.49595630168914795 -0.11569567024707794 -0.860591471195221 0.7305766344070435 0.4031161665916443 0 1.0 0 0.0 0 0.0 0 0.0 1.7303704023361206 0.6000000238418579 -1.0162962675094604 0.860591471195221 -0.11569567024707794 -0.49595630168914795 0.6618058681488037 0.34603065252304077 0 1.0 0 0.0 0 0.0 0 0.0 1.618216872215271 0.3481481671333313 -0.9504251480102539 0.6624347567558289 -0.6448255777359009 -0.3812372088432312 0.6700261831283569 0.3110303282737732 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.10000000894069672 -1.5 0.0 -0.8341318964958191 -0.5515609979629517 0.8191912174224854 0.3644620180130005 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.18518517911434174 -1.6296296119689941 0.0 -0.8313852548599243 -0.5556504726409912 0.8155300617218018 0.3874537944793701 0 1.0 0 0.0 0 0.0 0 0.0 0.828093409538269 0.18518517911434174 -1.4099314212799072 0.2763756215572357 -0.8322397470474243 -0.48057496547698975 0.7464216947555542 0.33229804039001465 0 1.0 0 0.0 0 0.0 0 0.0 0.7622222304344177 0.10000000894069672 -1.297777771949768 0.27433088421821594 -0.8349558711051941 -0.4770042896270752 0.7510849833488464 0.31206804513931274 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.18518517911434174 -1.6296296119689941 0.0 -0.8313852548599243 -0.5556504726409912 0.8155300617218018 0.3874537944793701 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.3481481671333313 -1.8703705072402954 0.0 -0.6440016031265259 -0.764976978302002 0.8096545934677124 0.4266200661659241 0 1.0 0 0.0 0 0.0 0 0.0 0.9504252076148987 0.3481481671333313 -1.618216872215271 0.3812372088432312 -0.6448255777359009 -0.6624347567558289 0.7391786575317383 0.3668786883354187 0 1.0 0 0.0 0 0.0 0 0.0 0.828093409538269 0.18518517911434174 -1.4099314212799072 0.2763756215572357 -0.8322397470474243 -0.48057496547698975 0.7464216947555542 0.33229804039001465 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.3481481671333313 -1.8703705072402954 0.0 -0.6440016031265259 -0.764976978302002 0.8096545934677124 0.4266200661659241 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.6000000238418579 -2.0 0.0 -0.11548203974962234 -0.9932859539985657 0.8017946481704712 0.4667319059371948 0 1.0 0 0.0 0 0.0 0 0.0 1.0162962675094604 0.6000000238418579 -1.7303704023361206 0.49595630168914795 -0.11569567024707794 -0.860591471195221 0.7305766344070435 0.4031161665916443 0 1.0 0 0.0 0 0.0 0 0.0 0.9504252076148987 0.3481481671333313 -1.618216872215271 0.3812372088432312 -0.6448255777359009 -0.6624347567558289 0.7391786575317383 0.3668786883354187 0 1.0 0 0.0 0 0.0 0 0.0 -2.922222137451172 1.2000000476837158 0.20000001788139343 -0.6584978699684143 0.11386455595493317 0.7438886761665344 0.08831456303596497 0.6356658935546875 0 1.0 0 0.0 0 0.0 0 0.0 -2.765157699584961 1.3837449550628662 0.20000001788139343 -0.30439162254333496 0.6095461845397949 0.7319559454917908 0.09265154600143433 0.6591348648071289 0 1.0 0 0.0 0 0.0 0 0.0 -2.8333334922790527 1.4111111164093018 -0.0 -0.5336771607398987 0.8456678986549377 -0.0 0.07844218611717224 0.6680006980895996 0 1.0 0 0.0 0 0.0 0 0.0 -3.0 1.2000000476837158 -0.0 -0.9909054636955261 0.1344645470380783 -0.0 0.07502612471580505 0.6411035060882568 0 1.0 0 0.0 0 0.0 0 0.0 -2.765157699584961 1.3837449550628662 0.20000001788139343 -0.30439162254333496 0.6095461845397949 0.7319559454917908 0.09265154600143433 0.6591348648071289 0 1.0 0 0.0 0 0.0 0 0.0 -2.297805070877075 1.4514405727386475 0.20000003278255463 -0.04831080138683319 0.6493728160858154 0.7589038014411926 0.09902966022491455 0.6757197380065918 0 1.0 0 0.0 0 0.0 0 0.0 -2.3333334922790527 1.4888889789581299 -0.0 -0.08780175447463989 0.9961241483688354 -0.0 0.0813392698764801 0.6888784170150757 0 1.0 0 0.0 0 0.0 0 0.0 -2.8333334922790527 1.4111111164093018 -0.0 -0.5336771607398987 0.8456678986549377 -0.0 0.07844218611717224 0.6680006980895996 0 1.0 0 0.0 0 0.0 0 0.0 -2.297805070877075 1.4514405727386475 0.20000003278255463 -0.04831080138683319 0.6493728160858154 0.7589038014411926 0.09902966022491455 0.6757197380065918 0 1.0 0 0.0 0 0.0 0 0.0 -1.525925874710083 1.461111307144165 0.20000001788139343 -0.010223700664937496 0.791375458240509 0.6112247109413147 0.11728531122207642 0.7034443616867065 0 1.0 0 0.0 0 0.0 0 0.0 -1.5 1.5 -0.0 -0.012939848005771637 0.999908447265625 -0.0 0.0880691409111023 0.730804443359375 0 1.0 0 0.0 0 0.0 0 0.0 -2.3333334922790527 1.4888889789581299 -0.0 -0.08780175447463989 0.9961241483688354 -0.0 0.0813392698764801 0.6888784170150757 0 1.0 0 0.0 0 0.0 0 0.0 -2.777777910232544 1.2000000476837158 0.20000001788139343 0.3749198913574219 -0.08151493966579437 0.9234290719032288 0.08917427062988281 0.6358761787414551 0 1.0 0 0.0 0 0.0 0 0.0 -2.6385462284088135 1.3329218626022339 0.20000001788139343 0.23306985199451447 -0.4668721556663513 0.8530228734016418 0.09269976615905762 0.6538515686988831 0 1.0 0 0.0 0 0.0 0 0.0 -2.765157699584961 1.3837449550628662 0.20000001788139343 -0.30439162254333496 0.6095461845397949 0.7319559454917908 0.09265154600143433 0.6591348648071289 0 1.0 0 0.0 0 0.0 0 0.0 -2.922222137451172 1.2000000476837158 0.20000001788139343 -0.6584978699684143 0.11386455595493317 0.7438886761665344 0.08831456303596497 0.6356658935546875 0 1.0 0 0.0 0 0.0 0 0.0 -2.6385462284088135 1.3329218626022339 0.20000001788139343 0.23306985199451447 -0.4668721556663513 0.8530228734016418 0.09269976615905762 0.6538515686988831 0 1.0 0 0.0 0 0.0 0 0.0 -2.2318246364593506 1.3818929195404053 0.20000003278255463 0.04132205992937088 -0.6225165724754333 0.7814874649047852 0.0981336236000061 0.666175127029419 0 1.0 0 0.0 0 0.0 0 0.0 -2.297805070877075 1.4514405727386475 0.20000003278255463 -0.04831080138683319 0.6493728160858154 0.7589038014411926 0.09902966022491455 0.6757197380065918 0 1.0 0 0.0 0 0.0 0 0.0 -2.765157699584961 1.3837449550628662 0.20000001788139343 -0.30439162254333496 0.6095461845397949 0.7319559454917908 0.09265154600143433 0.6591348648071289 0 1.0 0 0.0 0 0.0 0 0.0 -2.2318246364593506 1.3818929195404053 0.20000003278255463 0.04132205992937088 -0.6225165724754333 0.7814874649047852 0.0981336236000061 0.666175127029419 0 1.0 0 0.0 0 0.0 0 0.0 -1.574074149131775 1.3888888359069824 0.20000001788139343 0.005005035549402237 -0.5020294785499573 0.8648030161857605 0.11214965581893921 0.6843823194503784 0 1.0 0 0.0 0 0.0 0 0.0 -1.525925874710083 1.461111307144165 0.20000001788139343 -0.010223700664937496 0.791375458240509 0.6112247109413147 0.11728531122207642 0.7034443616867065 0 1.0 0 0.0 0 0.0 0 0.0 -2.297805070877075 1.4514405727386475 0.20000003278255463 -0.04831080138683319 0.6493728160858154 0.7589038014411926 0.09902966022491455 0.6757197380065918 0 1.0 0 0.0 0 0.0 0 0.0 -2.700000047683716 1.2000000476837158 -0.0 0.9614245891571045 -0.27500230073928833 -0.0 0.07517382502555847 0.642316997051239 0 1.0 0 0.0 0 0.0 0 0.0 -2.5703704357147217 1.3055555820465088 -0.0 0.36078980565071106 -0.9326151013374329 -0.0 0.0770927369594574 0.6576699018478394 0 1.0 0 0.0 0 0.0 0 0.0 -2.6385462284088135 1.3329218626022339 0.20000001788139343 0.23306985199451447 -0.4668721556663513 0.8530228734016418 0.09269976615905762 0.6538515686988831 0 1.0 0 0.0 0 0.0 0 0.0 -2.777777910232544 1.2000000476837158 0.20000001788139343 0.3749198913574219 -0.08151493966579437 0.9234290719032288 0.08917427062988281 0.6358761787414551 0 1.0 0 0.0 0 0.0 0 0.0 -2.5703704357147217 1.3055555820465088 -0.0 0.36078980565071106 -0.9326151013374329 -0.0 0.0770927369594574 0.6576699018478394 0 1.0 0 0.0 0 0.0 0 0.0 -2.196296215057373 1.3444445133209229 -0.0 0.0557573176920414 -0.9984435439109802 -0.0 0.07862633466720581 0.6693804264068604 0 1.0 0 0.0 0 0.0 0 0.0 -2.2318246364593506 1.3818929195404053 0.20000003278255463 0.04132205992937088 -0.6225165724754333 0.7814874649047852 0.0981336236000061 0.666175127029419 0 1.0 0 0.0 0 0.0 0 0.0 -2.6385462284088135 1.3329218626022339 0.20000001788139343 0.23306985199451447 -0.4668721556663513 0.8530228734016418 0.09269976615905762 0.6538515686988831 0 1.0 0 0.0 0 0.0 0 0.0 -2.196296215057373 1.3444445133209229 -0.0 0.0557573176920414 -0.9984435439109802 -0.0 0.07862633466720581 0.6693804264068604 0 1.0 0 0.0 0 0.0 0 0.0 -1.600000023841858 1.3500001430511475 -0.0 0.0099795525893569 -0.99993896484375 -0.0 0.08127009868621826 0.6884005069732666 0 1.0 0 0.0 0 0.0 0 0.0 -1.574074149131775 1.3888888359069824 0.20000001788139343 0.005005035549402237 -0.5020294785499573 0.8648030161857605 0.11214965581893921 0.6843823194503784 0 1.0 0 0.0 0 0.0 0 0.0 -2.2318246364593506 1.3818929195404053 0.20000003278255463 0.04132205992937088 -0.6225165724754333 0.7814874649047852 0.0981336236000061 0.666175127029419 0 1.0 0 0.0 0 0.0 0 0.0 -2.777777910232544 1.2000000476837158 -0.20000001788139343 0.3749198913574219 -0.08151493966579437 -0.9234290719032288 0.06085139513015747 0.6470903158187866 0 1.0 0 0.0 0 0.0 0 0.0 -2.6385462284088135 1.3329219818115234 -0.20000001788139343 0.23306985199451447 -0.4668721556663513 -0.8530228734016418 0.06191146373748779 0.6660564541816711 0 1.0 0 0.0 0 0.0 0 0.0 -2.5703704357147217 1.3055555820465088 -0.0 0.36078980565071106 -0.9326151013374329 -0.0 0.0770927369594574 0.6576699018478394 0 1.0 0 0.0 0 0.0 0 0.0 -2.700000047683716 1.2000000476837158 -0.0 0.9614245891571045 -0.27500230073928833 -0.0 0.07517382502555847 0.642316997051239 0 1.0 0 0.0 0 0.0 0 0.0 -2.6385462284088135 1.3329219818115234 -0.20000001788139343 0.23306985199451447 -0.4668721556663513 -0.8530228734016418 0.06191146373748779 0.6660564541816711 0 1.0 0 0.0 0 0.0 0 0.0 -2.2318246364593506 1.3818931579589844 -0.20000003278255463 0.04132205992937088 -0.6225165724754333 -0.7814874649047852 0.060018301010131836 0.6812902688980103 0 1.0 0 0.0 0 0.0 0 0.0 -2.196296215057373 1.3444445133209229 -0.0 0.0557573176920414 -0.9984435439109802 -0.0 0.07862633466720581 0.6693804264068604 0 1.0 0 0.0 0 0.0 0 0.0 -2.5703704357147217 1.3055555820465088 -0.0 0.36078980565071106 -0.9326151013374329 -0.0 0.0770927369594574 0.6576699018478394 0 1.0 0 0.0 0 0.0 0 0.0 -2.2318246364593506 1.3818931579589844 -0.20000003278255463 0.04132205992937088 -0.6225165724754333 -0.7814874649047852 0.060018301010131836 0.6812902688980103 0 1.0 0 0.0 0 0.0 0 0.0 -1.574074149131775 1.3888890743255615 -0.20000001788139343 0.005005035549402237 -0.5020294785499573 -0.8648030161857605 0.051914602518081665 0.7082343697547913 0 1.0 0 0.0 0 0.0 0 0.0 -1.600000023841858 1.3500001430511475 -0.0 0.0099795525893569 -0.99993896484375 -0.0 0.08127009868621826 0.6884005069732666 0 1.0 0 0.0 0 0.0 0 0.0 -2.196296215057373 1.3444445133209229 -0.0 0.0557573176920414 -0.9984435439109802 -0.0 0.07862633466720581 0.6693804264068604 0 1.0 0 0.0 0 0.0 0 0.0 -2.922222137451172 1.2000000476837158 -0.20000001788139343 -0.6584978699684143 0.11386455595493317 -0.7438886761665344 0.061596453189849854 0.6462458372116089 0 1.0 0 0.0 0 0.0 0 0.0 -2.765157699584961 1.3837449550628662 -0.20000001788139343 -0.30439162254333496 0.6095461845397949 -0.7319559454917908 0.06327471137046814 0.6707873344421387 0 1.0 0 0.0 0 0.0 0 0.0 -2.6385462284088135 1.3329219818115234 -0.20000001788139343 0.23306985199451447 -0.4668721556663513 -0.8530228734016418 0.06191146373748779 0.6660564541816711 0 1.0 0 0.0 0 0.0 0 0.0 -2.777777910232544 1.2000000476837158 -0.20000001788139343 0.3749198913574219 -0.08151493966579437 -0.9234290719032288 0.06085139513015747 0.6470903158187866 0 1.0 0 0.0 0 0.0 0 0.0 -2.765157699584961 1.3837449550628662 -0.20000001788139343 -0.30439162254333496 0.6095461845397949 -0.7319559454917908 0.06327471137046814 0.6707873344421387 0 1.0 0 0.0 0 0.0 0 0.0 -2.297805070877075 1.4514405727386475 -0.20000003278255463 -0.04831080138683319 0.6493728160858154 -0.7589038014411926 0.06172066926956177 0.6905316710472107 0 1.0 0 0.0 0 0.0 0 0.0 -2.2318246364593506 1.3818931579589844 -0.20000003278255463 0.04132205992937088 -0.6225165724754333 -0.7814874649047852 0.060018301010131836 0.6812902688980103 0 1.0 0 0.0 0 0.0 0 0.0 -2.6385462284088135 1.3329219818115234 -0.20000001788139343 0.23306985199451447 -0.4668721556663513 -0.8530228734016418 0.06191146373748779 0.6660564541816711 0 1.0 0 0.0 0 0.0 0 0.0 -2.297805070877075 1.4514405727386475 -0.20000003278255463 -0.04831080138683319 0.6493728160858154 -0.7589038014411926 0.06172066926956177 0.6905316710472107 0 1.0 0 0.0 0 0.0 0 0.0 -1.5259259939193726 1.461111307144165 -0.20000001788139343 -0.010223700664937496 0.791375458240509 -0.6112247109413147 0.0527951717376709 0.7290288209915161 0 1.0 0 0.0 0 0.0 0 0.0 -1.574074149131775 1.3888890743255615 -0.20000001788139343 0.005005035549402237 -0.5020294785499573 -0.8648030161857605 0.051914602518081665 0.7082343697547913 0 1.0 0 0.0 0 0.0 0 0.0 -2.2318246364593506 1.3818931579589844 -0.20000003278255463 0.04132205992937088 -0.6225165724754333 -0.7814874649047852 0.060018301010131836 0.6812902688980103 0 1.0 0 0.0 0 0.0 0 0.0 -3.0 1.2000000476837158 -0.0 -0.9909054636955261 0.1344645470380783 -0.0 0.07502612471580505 0.6411035060882568 0 1.0 0 0.0 0 0.0 0 0.0 -2.8333334922790527 1.4111111164093018 -0.0 -0.5336771607398987 0.8456678986549377 -0.0 0.07844218611717224 0.6680006980895996 0 1.0 0 0.0 0 0.0 0 0.0 -2.765157699584961 1.3837449550628662 -0.20000001788139343 -0.30439162254333496 0.6095461845397949 -0.7319559454917908 0.06327471137046814 0.6707873344421387 0 1.0 0 0.0 0 0.0 0 0.0 -2.922222137451172 1.2000000476837158 -0.20000001788139343 -0.6584978699684143 0.11386455595493317 -0.7438886761665344 0.061596453189849854 0.6462458372116089 0 1.0 0 0.0 0 0.0 0 0.0 -2.8333334922790527 1.4111111164093018 -0.0 -0.5336771607398987 0.8456678986549377 -0.0 0.07844218611717224 0.6680006980895996 0 1.0 0 0.0 0 0.0 0 0.0 -2.3333334922790527 1.4888889789581299 -0.0 -0.08780175447463989 0.9961241483688354 -0.0 0.0813392698764801 0.6888784170150757 0 1.0 0 0.0 0 0.0 0 0.0 -2.297805070877075 1.4514405727386475 -0.20000003278255463 -0.04831080138683319 0.6493728160858154 -0.7589038014411926 0.06172066926956177 0.6905316710472107 0 1.0 0 0.0 0 0.0 0 0.0 -2.765157699584961 1.3837449550628662 -0.20000001788139343 -0.30439162254333496 0.6095461845397949 -0.7319559454917908 0.06327471137046814 0.6707873344421387 0 1.0 0 0.0 0 0.0 0 0.0 -2.3333334922790527 1.4888889789581299 -0.0 -0.08780175447463989 0.9961241483688354 -0.0 0.0813392698764801 0.6888784170150757 0 1.0 0 0.0 0 0.0 0 0.0 -1.5 1.5 -0.0 -0.012939848005771637 0.999908447265625 -0.0 0.0880691409111023 0.730804443359375 0 1.0 0 0.0 0 0.0 0 0.0 -1.5259259939193726 1.461111307144165 -0.20000001788139343 -0.010223700664937496 0.791375458240509 -0.6112247109413147 0.0527951717376709 0.7290288209915161 0 1.0 0 0.0 0 0.0 0 0.0 -2.297805070877075 1.4514405727386475 -0.20000003278255463 -0.04831080138683319 0.6493728160858154 -0.7589038014411926 0.06172066926956177 0.6905316710472107 0 1.0 0 0.0 0 0.0 0 0.0 -1.9259259700775146 0.45185184478759766 0.20000001788139343 -0.3118381202220917 -0.7871028780937195 0.5321817398071289 0.07891842722892761 0.49934256076812744 0 1.0 0 0.0 0 0.0 0 0.0 -2.4887518882751465 0.6791495680809021 0.20000001788139343 -0.316965252161026 -0.5666066408157349 0.7605517506599426 0.08147895336151123 0.5622939467430115 0 1.0 0 0.0 0 0.0 0 0.0 -2.5185186862945557 0.6407407522201538 -0.0 -0.4933927357196808 -0.869777500629425 -0.0 0.06648120284080505 0.5638844966888428 0 1.0 0 0.0 0 0.0 0 0.0 -1.899999976158142 0.40000003576278687 -0.0 -0.36832788586616516 -0.9296853542327881 -0.0 0.05969014763832092 0.49596208333969116 0 1.0 0 0.0 0 0.0 0 0.0 -2.4887518882751465 0.6791495680809021 0.20000001788139343 -0.316965252161026 -0.5666066408157349 0.7605517506599426 0.08147895336151123 0.5622939467430115 0 1.0 0 0.0 0 0.0 0 0.0 -2.8161864280700684 0.9356653094291687 0.20000003278255463 -0.5061494708061218 -0.40061646699905396 0.7637256979942322 0.08450451493263245 0.6028463840484619 0 1.0 0 0.0 0 0.0 0 0.0 -2.881481647491455 0.9092593193054199 -0.0 -0.8023316264152527 -0.5968199968338013 -0.0 0.07094472646713257 0.6058355569839478 0 1.0 0 0.0 0 0.0 0 0.0 -2.5185186862945557 0.6407407522201538 -0.0 -0.4933927357196808 -0.869777500629425 -0.0 0.06648120284080505 0.5638844966888428 0 1.0 0 0.0 0 0.0 0 0.0 -2.8161864280700684 0.9356653094291687 0.20000003278255463 -0.5061494708061218 -0.40061646699905396 0.7637256979942322 0.08450451493263245 0.6028463840484619 0 1.0 0 0.0 0 0.0 0 0.0 -2.922222137451172 1.2000000476837158 0.20000001788139343 -0.6584978699684143 0.11386455595493317 0.7438886761665344 0.08831456303596497 0.6356658935546875 0 1.0 0 0.0 0 0.0 0 0.0 -3.0 1.2000000476837158 -0.0 -0.9909054636955261 0.1344645470380783 -0.0 0.07502612471580505 0.6411035060882568 0 1.0 0 0.0 0 0.0 0 0.0 -2.881481647491455 0.9092593193054199 -0.0 -0.8023316264152527 -0.5968199968338013 -0.0 0.07094472646713257 0.6058355569839478 0 1.0 0 0.0 0 0.0 0 0.0 -1.974074125289917 0.5481481552124023 0.20000001788139343 0.18051698803901672 0.3982665538787842 0.8993194103240967 0.08077448606491089 0.5187610983848572 0 1.0 0 0.0 0 0.0 0 0.0 -2.4334707260131836 0.7504801154136658 0.20000001788139343 0.3194677531719208 0.4772484600543976 0.8185979723930359 0.08292484283447266 0.5706835985183716 0 1.0 0 0.0 0 0.0 0 0.0 -2.4887518882751465 0.6791495680809021 0.20000001788139343 -0.316965252161026 -0.5666066408157349 0.7605517506599426 0.08147895336151123 0.5622939467430115 0 1.0 0 0.0 0 0.0 0 0.0 -1.9259259700775146 0.45185184478759766 0.20000001788139343 -0.3118381202220917 -0.7871028780937195 0.5321817398071289 0.07891842722892761 0.49934256076812744 0 1.0 0 0.0 0 0.0 0 0.0 -2.4334707260131836 0.7504801154136658 0.20000001788139343 0.3194677531719208 0.4772484600543976 0.8185979723930359 0.08292484283447266 0.5706835985183716 0 1.0 0 0.0 0 0.0 0 0.0 -2.694924831390381 0.9847051501274109 0.20000003278255463 0.4361705482006073 0.286935031414032 0.8528702855110168 0.08586803078651428 0.6077741980552673 0 1.0 0 0.0 0 0.0 0 0.0 -2.8161864280700684 0.9356653094291687 0.20000003278255463 -0.5061494708061218 -0.40061646699905396 0.7637256979942322 0.08450451493263245 0.6028463840484619 0 1.0 0 0.0 0 0.0 0 0.0 -2.4887518882751465 0.6791495680809021 0.20000001788139343 -0.316965252161026 -0.5666066408157349 0.7605517506599426 0.08147895336151123 0.5622939467430115 0 1.0 0 0.0 0 0.0 0 0.0 -2.694924831390381 0.9847051501274109 0.20000003278255463 0.4361705482006073 0.286935031414032 0.8528702855110168 0.08586803078651428 0.6077741980552673 0 1.0 0 0.0 0 0.0 0 0.0 -2.777777910232544 1.2000000476837158 0.20000001788139343 0.3749198913574219 -0.08151493966579437 0.9234290719032288 0.08917427062988281 0.6358761787414551 0 1.0 0 0.0 0 0.0 0 0.0 -2.922222137451172 1.2000000476837158 0.20000001788139343 -0.6584978699684143 0.11386455595493317 0.7438886761665344 0.08831456303596497 0.6356658935546875 0 1.0 0 0.0 0 0.0 0 0.0 -2.8161864280700684 0.9356653094291687 0.20000003278255463 -0.5061494708061218 -0.40061646699905396 0.7637256979942322 0.08450451493263245 0.6028463840484619 0 1.0 0 0.0 0 0.0 0 0.0 -2.0 0.6000000238418579 -0.0 -0.8362376689910889 0.5483260750770569 -0.0 0.06370410323143005 0.5364704132080078 0 1.0 0 0.0 0 0.0 0 0.0 -2.4037036895751953 0.7888889312744141 -0.0 0.5534531474113464 0.8328500986099243 -0.0 0.06835782527923584 0.5818953514099121 0 1.0 0 0.0 0 0.0 0 0.0 -2.4334707260131836 0.7504801154136658 0.20000001788139343 0.3194677531719208 0.4772484600543976 0.8185979723930359 0.08292484283447266 0.5706835985183716 0 1.0 0 0.0 0 0.0 0 0.0 -1.974074125289917 0.5481481552124023 0.20000001788139343 0.18051698803901672 0.3982665538787842 0.8993194103240967 0.08077448606491089 0.5187610983848572 0 1.0 0 0.0 0 0.0 0 0.0 -2.4037036895751953 0.7888889312744141 -0.0 0.5534531474113464 0.8328500986099243 -0.0 0.06835782527923584 0.5818953514099121 0 1.0 0 0.0 0 0.0 0 0.0 -2.629629611968994 1.0111111402511597 -0.0 0.8244270086288452 0.5659047365188599 -0.0 0.07218089699745178 0.616860032081604 0 1.0 0 0.0 0 0.0 0 0.0 -2.694924831390381 0.9847051501274109 0.20000003278255463 0.4361705482006073 0.286935031414032 0.8528702855110168 0.08586803078651428 0.6077741980552673 0 1.0 0 0.0 0 0.0 0 0.0 -2.4334707260131836 0.7504801154136658 0.20000001788139343 0.3194677531719208 0.4772484600543976 0.8185979723930359 0.08292484283447266 0.5706835985183716 0 1.0 0 0.0 0 0.0 0 0.0 -2.629629611968994 1.0111111402511597 -0.0 0.8244270086288452 0.5659047365188599 -0.0 0.07218089699745178 0.616860032081604 0 1.0 0 0.0 0 0.0 0 0.0 -2.700000047683716 1.2000000476837158 -0.0 0.9614245891571045 -0.27500230073928833 -0.0 0.07517382502555847 0.642316997051239 0 1.0 0 0.0 0 0.0 0 0.0 -2.777777910232544 1.2000000476837158 0.20000001788139343 0.3749198913574219 -0.08151493966579437 0.9234290719032288 0.08917427062988281 0.6358761787414551 0 1.0 0 0.0 0 0.0 0 0.0 -2.694924831390381 0.9847051501274109 0.20000003278255463 0.4361705482006073 0.286935031414032 0.8528702855110168 0.08586803078651428 0.6077741980552673 0 1.0 0 0.0 0 0.0 0 0.0 -1.974074125289917 0.5481481552124023 -0.20000001788139343 0.18051698803901672 0.3982665538787842 -0.8993194103240967 0.04449453949928284 0.5330513715744019 0 1.0 0 0.0 0 0.0 0 0.0 -2.4334707260131836 0.7504801750183105 -0.20000001788139343 0.3194677531719208 0.4772484600543976 -0.8185979723930359 0.05261978507041931 0.5826413035392761 0 1.0 0 0.0 0 0.0 0 0.0 -2.4037036895751953 0.7888889312744141 -0.0 0.5534531474113464 0.8328500986099243 -0.0 0.06835782527923584 0.5818953514099121 0 1.0 0 0.0 0 0.0 0 0.0 -2.0 0.6000000238418579 -0.0 -0.8362376689910889 0.5483260750770569 -0.0 0.06370410323143005 0.5364704132080078 0 1.0 0 0.0 0 0.0 0 0.0 -2.4334707260131836 0.7504801750183105 -0.20000001788139343 0.3194677531719208 0.4772484600543976 -0.8185979723930359 0.05261978507041931 0.5826413035392761 0 1.0 0 0.0 0 0.0 0 0.0 -2.694924831390381 0.9847051501274109 -0.20000003278255463 0.4361705482006073 0.286935031414032 -0.8528702855110168 0.057609379291534424 0.6189436912536621 0 1.0 0 0.0 0 0.0 0 0.0 -2.629629611968994 1.0111111402511597 -0.0 0.8244270086288452 0.5659047365188599 -0.0 0.07218089699745178 0.616860032081604 0 1.0 0 0.0 0 0.0 0 0.0 -2.4037036895751953 0.7888889312744141 -0.0 0.5534531474113464 0.8328500986099243 -0.0 0.06835782527923584 0.5818953514099121 0 1.0 0 0.0 0 0.0 0 0.0 -2.694924831390381 0.9847051501274109 -0.20000003278255463 0.4361705482006073 0.286935031414032 -0.8528702855110168 0.057609379291534424 0.6189436912536621 0 1.0 0 0.0 0 0.0 0 0.0 -2.777777910232544 1.2000000476837158 -0.20000001788139343 0.3749198913574219 -0.08151493966579437 -0.9234290719032288 0.06085139513015747 0.6470903158187866 0 1.0 0 0.0 0 0.0 0 0.0 -2.700000047683716 1.2000000476837158 -0.0 0.9614245891571045 -0.27500230073928833 -0.0 0.07517382502555847 0.642316997051239 0 1.0 0 0.0 0 0.0 0 0.0 -2.629629611968994 1.0111111402511597 -0.0 0.8244270086288452 0.5659047365188599 -0.0 0.07218089699745178 0.616860032081604 0 1.0 0 0.0 0 0.0 0 0.0 -1.925925850868225 0.45185184478759766 -0.20000001788139343 -0.3118381202220917 -0.7871028780937195 -0.5321817398071289 0.04253512620925903 0.5136716365814209 0 1.0 0 0.0 0 0.0 0 0.0 -2.4887516498565674 0.6791495680809021 -0.20000001788139343 -0.316965252161026 -0.5666066408157349 -0.7605517506599426 0.05228587985038757 0.5738112926483154 0 1.0 0 0.0 0 0.0 0 0.0 -2.4334707260131836 0.7504801750183105 -0.20000001788139343 0.3194677531719208 0.4772484600543976 -0.8185979723930359 0.05261978507041931 0.5826413035392761 0 1.0 0 0.0 0 0.0 0 0.0 -1.974074125289917 0.5481481552124023 -0.20000001788139343 0.18051698803901672 0.3982665538787842 -0.8993194103240967 0.04449453949928284 0.5330513715744019 0 1.0 0 0.0 0 0.0 0 0.0 -2.4887516498565674 0.6791495680809021 -0.20000001788139343 -0.316965252161026 -0.5666066408157349 -0.7605517506599426 0.05228587985038757 0.5738112926483154 0 1.0 0 0.0 0 0.0 0 0.0 -2.8161864280700684 0.9356652498245239 -0.20000003278255463 -0.5061494708061218 -0.40061646699905396 -0.7637256979942322 0.057814061641693115 0.6133949160575867 0 1.0 0 0.0 0 0.0 0 0.0 -2.694924831390381 0.9847051501274109 -0.20000003278255463 0.4361705482006073 0.286935031414032 -0.8528702855110168 0.057609379291534424 0.6189436912536621 0 1.0 0 0.0 0 0.0 0 0.0 -2.4334707260131836 0.7504801750183105 -0.20000001788139343 0.3194677531719208 0.4772484600543976 -0.8185979723930359 0.05261978507041931 0.5826413035392761 0 1.0 0 0.0 0 0.0 0 0.0 -2.8161864280700684 0.9356652498245239 -0.20000003278255463 -0.5061494708061218 -0.40061646699905396 -0.7637256979942322 0.057814061641693115 0.6133949160575867 0 1.0 0 0.0 0 0.0 0 0.0 -2.922222137451172 1.2000000476837158 -0.20000001788139343 -0.6584978699684143 0.11386455595493317 -0.7438886761665344 0.061596453189849854 0.6462458372116089 0 1.0 0 0.0 0 0.0 0 0.0 -2.777777910232544 1.2000000476837158 -0.20000001788139343 0.3749198913574219 -0.08151493966579437 -0.9234290719032288 0.06085139513015747 0.6470903158187866 0 1.0 0 0.0 0 0.0 0 0.0 -2.694924831390381 0.9847051501274109 -0.20000003278255463 0.4361705482006073 0.286935031414032 -0.8528702855110168 0.057609379291534424 0.6189436912536621 0 1.0 0 0.0 0 0.0 0 0.0 -1.899999976158142 0.40000003576278687 -0.0 -0.36832788586616516 -0.9296853542327881 -0.0 0.05969014763832092 0.49596208333969116 0 1.0 0 0.0 0 0.0 0 0.0 -2.5185186862945557 0.6407407522201538 -0.0 -0.4933927357196808 -0.869777500629425 -0.0 0.06648120284080505 0.5638844966888428 0 1.0 0 0.0 0 0.0 0 0.0 -2.4887516498565674 0.6791495680809021 -0.20000001788139343 -0.316965252161026 -0.5666066408157349 -0.7605517506599426 0.05228587985038757 0.5738112926483154 0 1.0 0 0.0 0 0.0 0 0.0 -1.925925850868225 0.45185184478759766 -0.20000001788139343 -0.3118381202220917 -0.7871028780937195 -0.5321817398071289 0.04253512620925903 0.5136716365814209 0 1.0 0 0.0 0 0.0 0 0.0 -2.5185186862945557 0.6407407522201538 -0.0 -0.4933927357196808 -0.869777500629425 -0.0 0.06648120284080505 0.5638844966888428 0 1.0 0 0.0 0 0.0 0 0.0 -2.881481647491455 0.9092593193054199 -0.0 -0.8023316264152527 -0.5968199968338013 -0.0 0.07094472646713257 0.6058355569839478 0 1.0 0 0.0 0 0.0 0 0.0 -2.8161864280700684 0.9356652498245239 -0.20000003278255463 -0.5061494708061218 -0.40061646699905396 -0.7637256979942322 0.057814061641693115 0.6133949160575867 0 1.0 0 0.0 0 0.0 0 0.0 -2.4887516498565674 0.6791495680809021 -0.20000001788139343 -0.316965252161026 -0.5666066408157349 -0.7605517506599426 0.05228587985038757 0.5738112926483154 0 1.0 0 0.0 0 0.0 0 0.0 -2.881481647491455 0.9092593193054199 -0.0 -0.8023316264152527 -0.5968199968338013 -0.0 0.07094472646713257 0.6058355569839478 0 1.0 0 0.0 0 0.0 0 0.0 -3.0 1.2000000476837158 -0.0 -0.9909054636955261 0.1344645470380783 -0.0 0.07502612471580505 0.6411035060882568 0 1.0 0 0.0 0 0.0 0 0.0 -2.922222137451172 1.2000000476837158 -0.20000001788139343 -0.6584978699684143 0.11386455595493317 -0.7438886761665344 0.061596453189849854 0.6462458372116089 0 1.0 0 0.0 0 0.0 0 0.0 -2.8161864280700684 0.9356652498245239 -0.20000003278255463 -0.5061494708061218 -0.40061646699905396 -0.7637256979942322 0.057814061641693115 0.6133949160575867 0 1.0 0 0.0 0 0.0 0 0.0 0.10162962973117828 1.8000000715255737 0.17303703725337982 0.40681174397468567 0.5766472220420837 0.7084872126579285 0.5041325092315674 0.6560440063476562 0 1.0 0 0.0 0 0.0 0 0.0 0.12064746022224426 1.922222375869751 0.20517970621585846 0.4187139570713043 -0.5416424870491028 0.7288430333137512 0.4992266595363617 0.6713719367980957 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.922222375869751 0.2370370477437973 0.0 -0.539597749710083 0.8419141173362732 0.4821370542049408 0.6989800930023193 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.8000000715255737 0.20000000298023224 0.0 0.5759148001670837 0.8174688220024109 0.48873022198677063 0.6823248863220215 0 1.0 0 0.0 0 0.0 0 0.0 0.12064746022224426 1.922222375869751 0.20517970621585846 0.4187139570713043 -0.5416424870491028 0.7288430333137512 0.4992266595363617 0.6713719367980957 0 1.0 0 0.0 0 0.0 0 0.0 0.18483401834964752 2.0444445610046387 0.31422773003578186 0.48103275895118713 0.26770836114883423 0.8348032832145691 0.48705339431762695 0.6647788286209106 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.0444445610046387 0.3629629611968994 0.0 0.269081711769104 0.9631031155586243 0.46264198422431946 0.698793888092041 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.922222375869751 0.2370370477437973 0.0 -0.539597749710083 0.8419141173362732 0.4821370542049408 0.6989800930023193 0 1.0 0 0.0 0 0.0 0 0.0 0.18483401834964752 2.0444445610046387 0.31422773003578186 0.48103275895118713 0.26770836114883423 0.8348032832145691 0.48705339431762695 0.6647788286209106 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.1000001430511475 -0.0 0.0 1.0 -0.0 0.5284969806671143 0.7498512864112854 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.0444445610046387 0.3629629611968994 0.0 0.269081711769104 0.9631031155586243 0.46264198422431946 0.698793888092041 0 1.0 0 0.0 0 0.0 0 0.0 0.17303703725337982 1.7999999523162842 0.10162962973117828 0.7084872126579285 0.5766472220420837 0.40681174397468567 0.5232969522476196 0.644173264503479 0 1.0 0 0.0 0 0.0 0 0.0 0.20517970621585846 1.922222375869751 0.12064746022224426 0.7288430333137512 -0.5416424870491028 0.4187139570713043 0.5198890566825867 0.6589685082435608 0 1.0 0 0.0 0 0.0 0 0.0 0.12064746022224426 1.922222375869751 0.20517970621585846 0.4187139570713043 -0.5416424870491028 0.7288430333137512 0.4992266595363617 0.6713719367980957 0 1.0 0 0.0 0 0.0 0 0.0 0.10162962973117828 1.8000000715255737 0.17303703725337982 0.40681174397468567 0.5766472220420837 0.7084872126579285 0.5041325092315674 0.6560440063476562 0 1.0 0 0.0 0 0.0 0 0.0 0.20517970621585846 1.922222375869751 0.12064746022224426 0.7288430333137512 -0.5416424870491028 0.4187139570713043 0.5198890566825867 0.6589685082435608 0 1.0 0 0.0 0 0.0 0 0.0 0.31422773003578186 2.0444445610046387 0.18483401834964752 0.8348032832145691 0.26770836114883423 0.48103275895118713 0.5142986178398132 0.6501308679580688 0 1.0 0 0.0 0 0.0 0 0.0 0.18483401834964752 2.0444445610046387 0.31422773003578186 0.48103275895118713 0.26770836114883423 0.8348032832145691 0.48705339431762695 0.6647788286209106 0 1.0 0 0.0 0 0.0 0 0.0 0.12064746022224426 1.922222375869751 0.20517970621585846 0.4187139570713043 -0.5416424870491028 0.7288430333137512 0.4992266595363617 0.6713719367980957 0 1.0 0 0.0 0 0.0 0 0.0 0.31422773003578186 2.0444445610046387 0.18483401834964752 0.8348032832145691 0.26770836114883423 0.48103275895118713 0.5142986178398132 0.6501308679580688 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.1000001430511475 -0.0 0.0 1.0 -0.0 0.5284969806671143 0.7498512864112854 0 1.0 0 0.0 0 0.0 0 0.0 0.18483401834964752 2.0444445610046387 0.31422773003578186 0.48103275895118713 0.26770836114883423 0.8348032832145691 0.48705339431762695 0.6647788286209106 0 1.0 0 0.0 0 0.0 0 0.0 0.20000000298023224 1.8000000715255737 -0.0 0.8174688220024109 0.5759148001670837 -0.0 0.5445703268051147 0.6458508968353271 0 1.0 0 0.0 0 0.0 0 0.0 0.2370370477437973 1.922222375869751 -0.0 0.8419141173362732 -0.539597749710083 -0.0 0.5426700711250305 0.6608849167823792 0 1.0 0 0.0 0 0.0 0 0.0 0.20517970621585846 1.922222375869751 0.12064746022224426 0.7288430333137512 -0.5416424870491028 0.4187139570713043 0.5198890566825867 0.6589685082435608 0 1.0 0 0.0 0 0.0 0 0.0 0.17303703725337982 1.7999999523162842 0.10162962973117828 0.7084872126579285 0.5766472220420837 0.40681174397468567 0.5232969522476196 0.644173264503479 0 1.0 0 0.0 0 0.0 0 0.0 0.2370370477437973 1.922222375869751 -0.0 0.8419141173362732 -0.539597749710083 -0.0 0.5426700711250305 0.6608849167823792 0 1.0 0 0.0 0 0.0 0 0.0 0.3629629611968994 2.0444445610046387 -0.0 0.9631031155586243 0.269081711769104 -0.0 0.5436645150184631 0.6531122922897339 0 1.0 0 0.0 0 0.0 0 0.0 0.31422773003578186 2.0444445610046387 0.18483401834964752 0.8348032832145691 0.26770836114883423 0.48103275895118713 0.5142986178398132 0.6501308679580688 0 1.0 0 0.0 0 0.0 0 0.0 0.20517970621585846 1.922222375869751 0.12064746022224426 0.7288430333137512 -0.5416424870491028 0.4187139570713043 0.5198890566825867 0.6589685082435608 0 1.0 0 0.0 0 0.0 0 0.0 0.3629629611968994 2.0444445610046387 -0.0 0.9631031155586243 0.269081711769104 -0.0 0.5436645150184631 0.6531122922897339 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.1000001430511475 -0.0 0.0 1.0 -0.0 0.5284969806671143 0.7498512864112854 0 1.0 0 0.0 0 0.0 0 0.0 0.31422773003578186 2.0444445610046387 0.18483401834964752 0.8348032832145691 0.26770836114883423 0.48103275895118713 0.5142986178398132 0.6501308679580688 0 1.0 0 0.0 0 0.0 0 0.0 -0.17303703725337982 1.8000000715255737 0.10162962973117828 -0.7084872126579285 0.5766472220420837 0.40681174397468567 0.49074476957321167 0.7595763206481934 0 1.0 0 0.0 0 0.0 0 0.0 -0.20517970621585846 1.922222375869751 0.12064746022224426 -0.7288430333137512 -0.5416424870491028 0.4187139570713043 0.481635719537735 0.7803635597229004 0 1.0 0 0.0 0 0.0 0 0.0 -0.2370370477437973 1.922222375869751 -0.0 -0.8419141173362732 -0.539597749710083 -0.0 0.5128114819526672 0.8111486434936523 0 1.0 0 0.0 0 0.0 0 0.0 -0.20000000298023224 1.8000000715255737 -0.0 -0.8174688220024109 0.5759148001670837 -0.0 0.5197122097015381 0.7878735065460205 0 1.0 0 0.0 0 0.0 0 0.0 -0.20517970621585846 1.922222375869751 0.12064746022224426 -0.7288430333137512 -0.5416424870491028 0.4187139570713043 0.481635719537735 0.7803635597229004 0 1.0 0 0.0 0 0.0 0 0.0 -0.31422773003578186 2.0444445610046387 0.18483401834964752 -0.8348032832145691 0.26770836114883423 0.48103275895118713 0.4501263201236725 0.8077295422554016 0 1.0 0 0.0 0 0.0 0 0.0 -0.3629629611968994 2.0444445610046387 -0.0 -0.9631031155586243 0.269081711769104 -0.0 0.49338704347610474 0.8562493920326233 0 1.0 0 0.0 0 0.0 0 0.0 -0.2370370477437973 1.922222375869751 -0.0 -0.8419141173362732 -0.539597749710083 -0.0 0.5128114819526672 0.8111486434936523 0 1.0 0 0.0 0 0.0 0 0.0 -0.31422773003578186 2.0444445610046387 0.18483401834964752 -0.8348032832145691 0.26770836114883423 0.48103275895118713 0.4501263201236725 0.8077295422554016 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.1000001430511475 -0.0 0.0 1.0 -0.0 0.5284969806671143 0.7498512864112854 0 1.0 0 0.0 0 0.0 0 0.0 -0.3629629611968994 2.0444445610046387 -0.0 -0.9631031155586243 0.269081711769104 -0.0 0.49338704347610474 0.8562493920326233 0 1.0 0 0.0 0 0.0 0 0.0 -0.10162962973117828 1.7999999523162842 0.17303703725337982 -0.40681174397468567 0.5766472220420837 0.7084872126579285 0.4821886718273163 0.7199850678443909 0 1.0 0 0.0 0 0.0 0 0.0 -0.12064746022224426 1.922222375869751 0.20517970621585846 -0.4187139570713043 -0.5416424870491028 0.7288430333137512 0.47388893365859985 0.7385139465332031 0 1.0 0 0.0 0 0.0 0 0.0 -0.20517970621585846 1.922222375869751 0.12064746022224426 -0.7288430333137512 -0.5416424870491028 0.4187139570713043 0.481635719537735 0.7803635597229004 0 1.0 0 0.0 0 0.0 0 0.0 -0.17303703725337982 1.8000000715255737 0.10162962973117828 -0.7084872126579285 0.5766472220420837 0.40681174397468567 0.49074476957321167 0.7595763206481934 0 1.0 0 0.0 0 0.0 0 0.0 -0.12064746022224426 1.922222375869751 0.20517970621585846 -0.4187139570713043 -0.5416424870491028 0.7288430333137512 0.47388893365859985 0.7385139465332031 0 1.0 0 0.0 0 0.0 0 0.0 -0.18483401834964752 2.0444445610046387 0.31422773003578186 -0.48103275895118713 0.26770836114883423 0.8348032832145691 0.4467930197715759 0.7496343851089478 0 1.0 0 0.0 0 0.0 0 0.0 -0.31422773003578186 2.0444445610046387 0.18483401834964752 -0.8348032832145691 0.26770836114883423 0.48103275895118713 0.4501263201236725 0.8077295422554016 0 1.0 0 0.0 0 0.0 0 0.0 -0.20517970621585846 1.922222375869751 0.12064746022224426 -0.7288430333137512 -0.5416424870491028 0.4187139570713043 0.481635719537735 0.7803635597229004 0 1.0 0 0.0 0 0.0 0 0.0 -0.18483401834964752 2.0444445610046387 0.31422773003578186 -0.48103275895118713 0.26770836114883423 0.8348032832145691 0.4467930197715759 0.7496343851089478 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.1000001430511475 -0.0 0.0 1.0 -0.0 0.5284969806671143 0.7498512864112854 0 1.0 0 0.0 0 0.0 0 0.0 -0.31422773003578186 2.0444445610046387 0.18483401834964752 -0.8348032832145691 0.26770836114883423 0.48103275895118713 0.4501263201236725 0.8077295422554016 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.8000000715255737 0.20000000298023224 0.0 0.5759148001670837 0.8174688220024109 0.48873022198677063 0.6823248863220215 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.922222375869751 0.2370370477437973 0.0 -0.539597749710083 0.8419141173362732 0.4821370542049408 0.6989800930023193 0 1.0 0 0.0 0 0.0 0 0.0 -0.12064746022224426 1.922222375869751 0.20517970621585846 -0.4187139570713043 -0.5416424870491028 0.7288430333137512 0.47388893365859985 0.7385139465332031 0 1.0 0 0.0 0 0.0 0 0.0 -0.10162962973117828 1.7999999523162842 0.17303703725337982 -0.40681174397468567 0.5766472220420837 0.7084872126579285 0.4821886718273163 0.7199850678443909 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.922222375869751 0.2370370477437973 0.0 -0.539597749710083 0.8419141173362732 0.4821370542049408 0.6989800930023193 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.0444445610046387 0.3629629611968994 0.0 0.269081711769104 0.9631031155586243 0.46264198422431946 0.698793888092041 0 1.0 0 0.0 0 0.0 0 0.0 -0.18483401834964752 2.0444445610046387 0.31422773003578186 -0.48103275895118713 0.26770836114883423 0.8348032832145691 0.4467930197715759 0.7496343851089478 0 1.0 0 0.0 0 0.0 0 0.0 -0.12064746022224426 1.922222375869751 0.20517970621585846 -0.4187139570713043 -0.5416424870491028 0.7288430333137512 0.47388893365859985 0.7385139465332031 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.0444445610046387 0.3629629611968994 0.0 0.269081711769104 0.9631031155586243 0.46264198422431946 0.698793888092041 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.1000001430511475 -0.0 0.0 1.0 -0.0 0.5284969806671143 0.7498512864112854 0 1.0 0 0.0 0 0.0 0 0.0 -0.18483401834964752 2.0444445610046387 0.31422773003578186 -0.48103275895118713 0.26770836114883423 0.8348032832145691 0.4467930197715759 0.7496343851089478 0 1.0 0 0.0 0 0.0 0 0.0 -0.10162962973117828 1.8000000715255737 -0.17303703725337982 -0.40681174397468567 0.5766472220420837 -0.7084872126579285 0.5817010402679443 0.7591943740844727 0 1.0 0 0.0 0 0.0 0 0.0 -0.12064746022224426 1.922222375869751 -0.20517970621585846 -0.4187139570713043 -0.5416424870491028 -0.7288430333137512 0.582847535610199 0.781477689743042 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.922222375869751 -0.2370370477437973 0.0 -0.539597749710083 -0.8419141173362732 0.5888028740882874 0.7407431602478027 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.8000000715255737 -0.20000000298023224 0.0 0.5759148001670837 -0.8174688220024109 0.5873590707778931 0.720962405204773 0 1.0 0 0.0 0 0.0 0 0.0 -0.12064746022224426 1.922222375869751 -0.20517970621585846 -0.4187139570713043 -0.5416424870491028 -0.7288430333137512 0.582847535610199 0.781477689743042 0 1.0 0 0.0 0 0.0 0 0.0 -0.18483401834964752 2.0444445610046387 -0.31422773003578186 -0.48103275895118713 0.26770836114883423 -0.8348032832145691 0.6060935854911804 0.8111084699630737 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.0444445610046387 -0.3629629611968994 0.0 0.269081711769104 -0.9631031155586243 0.6086547374725342 0.7549499869346619 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.922222375869751 -0.2370370477437973 0.0 -0.539597749710083 -0.8419141173362732 0.5888028740882874 0.7407431602478027 0 1.0 0 0.0 0 0.0 0 0.0 -0.18483401834964752 2.0444445610046387 -0.31422773003578186 -0.48103275895118713 0.26770836114883423 -0.8348032832145691 0.6060935854911804 0.8111084699630737 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.1000001430511475 -0.0 0.0 1.0 -0.0 0.5284969806671143 0.7498512864112854 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.0444445610046387 -0.3629629611968994 0.0 0.269081711769104 -0.9631031155586243 0.6086547374725342 0.7549499869346619 0 1.0 0 0.0 0 0.0 0 0.0 -0.17303703725337982 1.7999999523162842 -0.10162962973117828 -0.7084872126579285 0.5766472220420837 -0.40681174397468567 0.5577818155288696 0.7865083813667297 0 1.0 0 0.0 0 0.0 0 0.0 -0.20517970621585846 1.922222375869751 -0.12064746022224426 -0.7288430333137512 -0.5416424870491028 -0.4187139570713043 0.5560003519058228 0.8104372024536133 0 1.0 0 0.0 0 0.0 0 0.0 -0.12064746022224426 1.922222375869751 -0.20517970621585846 -0.4187139570713043 -0.5416424870491028 -0.7288430333137512 0.582847535610199 0.781477689743042 0 1.0 0 0.0 0 0.0 0 0.0 -0.10162962973117828 1.8000000715255737 -0.17303703725337982 -0.40681174397468567 0.5766472220420837 -0.7084872126579285 0.5817010402679443 0.7591943740844727 0 1.0 0 0.0 0 0.0 0 0.0 -0.20517970621585846 1.922222375869751 -0.12064746022224426 -0.7288430333137512 -0.5416424870491028 -0.4187139570713043 0.5560003519058228 0.8104372024536133 0 1.0 0 0.0 0 0.0 0 0.0 -0.31422773003578186 2.0444445610046387 -0.18483401834964752 -0.8348032832145691 0.26770836114883423 -0.48103275895118713 0.5681052803993225 0.8555918335914612 0 1.0 0 0.0 0 0.0 0 0.0 -0.18483401834964752 2.0444445610046387 -0.31422773003578186 -0.48103275895118713 0.26770836114883423 -0.8348032832145691 0.6060935854911804 0.8111084699630737 0 1.0 0 0.0 0 0.0 0 0.0 -0.12064746022224426 1.922222375869751 -0.20517970621585846 -0.4187139570713043 -0.5416424870491028 -0.7288430333137512 0.582847535610199 0.781477689743042 0 1.0 0 0.0 0 0.0 0 0.0 -0.31422773003578186 2.0444445610046387 -0.18483401834964752 -0.8348032832145691 0.26770836114883423 -0.48103275895118713 0.5681052803993225 0.8555918335914612 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.1000001430511475 -0.0 0.0 1.0 -0.0 0.5284969806671143 0.7498512864112854 0 1.0 0 0.0 0 0.0 0 0.0 -0.18483401834964752 2.0444445610046387 -0.31422773003578186 -0.48103275895118713 0.26770836114883423 -0.8348032832145691 0.6060935854911804 0.8111084699630737 0 1.0 0 0.0 0 0.0 0 0.0 -0.20000000298023224 1.8000000715255737 -0.0 -0.8174688220024109 0.5759148001670837 -0.0 0.5197122097015381 0.7878735065460205 0 1.0 0 0.0 0 0.0 0 0.0 -0.2370370477437973 1.922222375869751 -0.0 -0.8419141173362732 -0.539597749710083 -0.0 0.5128114819526672 0.8111486434936523 0 1.0 0 0.0 0 0.0 0 0.0 -0.20517970621585846 1.922222375869751 -0.12064746022224426 -0.7288430333137512 -0.5416424870491028 -0.4187139570713043 0.5560003519058228 0.8104372024536133 0 1.0 0 0.0 0 0.0 0 0.0 -0.17303703725337982 1.7999999523162842 -0.10162962973117828 -0.7084872126579285 0.5766472220420837 -0.40681174397468567 0.5577818155288696 0.7865083813667297 0 1.0 0 0.0 0 0.0 0 0.0 -0.2370370477437973 1.922222375869751 -0.0 -0.8419141173362732 -0.539597749710083 -0.0 0.5128114819526672 0.8111486434936523 0 1.0 0 0.0 0 0.0 0 0.0 -0.3629629611968994 2.0444445610046387 -0.0 -0.9631031155586243 0.269081711769104 -0.0 0.49338704347610474 0.8562493920326233 0 1.0 0 0.0 0 0.0 0 0.0 -0.31422773003578186 2.0444445610046387 -0.18483401834964752 -0.8348032832145691 0.26770836114883423 -0.48103275895118713 0.5681052803993225 0.8555918335914612 0 1.0 0 0.0 0 0.0 0 0.0 -0.20517970621585846 1.922222375869751 -0.12064746022224426 -0.7288430333137512 -0.5416424870491028 -0.4187139570713043 0.5560003519058228 0.8104372024536133 0 1.0 0 0.0 0 0.0 0 0.0 -0.3629629611968994 2.0444445610046387 -0.0 -0.9631031155586243 0.269081711769104 -0.0 0.49338704347610474 0.8562493920326233 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.1000001430511475 -0.0 0.0 1.0 -0.0 0.5284969806671143 0.7498512864112854 0 1.0 0 0.0 0 0.0 0 0.0 -0.31422773003578186 2.0444445610046387 -0.18483401834964752 -0.8348032832145691 0.26770836114883423 -0.48103275895118713 0.5681052803993225 0.8555918335914612 0 1.0 0 0.0 0 0.0 0 0.0 0.17303703725337982 1.8000000715255737 -0.10162962973117828 0.7084872126579285 0.5766472220420837 -0.40681174397468567 0.564504861831665 0.6604757905006409 0 1.0 0 0.0 0 0.0 0 0.0 0.20517970621585846 1.922222375869751 -0.12064746022224426 0.7288430333137512 -0.5416424870491028 -0.4187139570713043 0.5640130639076233 0.6764401793479919 0 1.0 0 0.0 0 0.0 0 0.0 0.2370370477437973 1.922222375869751 -0.0 0.8419141173362732 -0.539597749710083 -0.0 0.5426700711250305 0.6608849167823792 0 1.0 0 0.0 0 0.0 0 0.0 0.20000000298023224 1.8000000715255737 -0.0 0.8174688220024109 0.5759148001670837 -0.0 0.5445703268051147 0.6458508968353271 0 1.0 0 0.0 0 0.0 0 0.0 0.20517970621585846 1.922222375869751 -0.12064746022224426 0.7288430333137512 -0.5416424870491028 -0.4187139570713043 0.5640130639076233 0.6764401793479919 0 1.0 0 0.0 0 0.0 0 0.0 0.31422773003578186 2.0444445610046387 -0.18483401834964752 0.8348032832145691 0.26770836114883423 -0.48103275895118713 0.5714684724807739 0.6727004051208496 0 1.0 0 0.0 0 0.0 0 0.0 0.3629629611968994 2.0444445610046387 -0.0 0.9631031155586243 0.269081711769104 -0.0 0.5436645150184631 0.6531122922897339 0 1.0 0 0.0 0 0.0 0 0.0 0.2370370477437973 1.922222375869751 -0.0 0.8419141173362732 -0.539597749710083 -0.0 0.5426700711250305 0.6608849167823792 0 1.0 0 0.0 0 0.0 0 0.0 0.31422773003578186 2.0444445610046387 -0.18483401834964752 0.8348032832145691 0.26770836114883423 -0.48103275895118713 0.5714684724807739 0.6727004051208496 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.1000001430511475 -0.0 0.0 1.0 -0.0 0.5284969806671143 0.7498512864112854 0 1.0 0 0.0 0 0.0 0 0.0 0.3629629611968994 2.0444445610046387 -0.0 0.9631031155586243 0.269081711769104 -0.0 0.5436645150184631 0.6531122922897339 0 1.0 0 0.0 0 0.0 0 0.0 0.10162962973117828 1.7999999523162842 -0.17303703725337982 0.40681174397468567 0.5766472220420837 -0.7084872126579285 0.579617977142334 0.6857367753982544 0 1.0 0 0.0 0 0.0 0 0.0 0.12064746022224426 1.922222375869751 -0.20517970621585846 0.4187139570713043 -0.5416424870491028 -0.7288430333137512 0.5802648663520813 0.7032516002655029 0 1.0 0 0.0 0 0.0 0 0.0 0.20517970621585846 1.922222375869751 -0.12064746022224426 0.7288430333137512 -0.5416424870491028 -0.4187139570713043 0.5640130639076233 0.6764401793479919 0 1.0 0 0.0 0 0.0 0 0.0 0.17303703725337982 1.8000000715255737 -0.10162962973117828 0.7084872126579285 0.5766472220420837 -0.40681174397468567 0.564504861831665 0.6604757905006409 0 1.0 0 0.0 0 0.0 0 0.0 0.12064746022224426 1.922222375869751 -0.20517970621585846 0.4187139570713043 -0.5416424870491028 -0.7288430333137512 0.5802648663520813 0.7032516002655029 0 1.0 0 0.0 0 0.0 0 0.0 0.18483401834964752 2.0444445610046387 -0.31422773003578186 0.48103275895118713 0.26770836114883423 -0.8348032832145691 0.5938968062400818 0.7064254879951477 0 1.0 0 0.0 0 0.0 0 0.0 0.31422773003578186 2.0444445610046387 -0.18483401834964752 0.8348032832145691 0.26770836114883423 -0.48103275895118713 0.5714684724807739 0.6727004051208496 0 1.0 0 0.0 0 0.0 0 0.0 0.20517970621585846 1.922222375869751 -0.12064746022224426 0.7288430333137512 -0.5416424870491028 -0.4187139570713043 0.5640130639076233 0.6764401793479919 0 1.0 0 0.0 0 0.0 0 0.0 0.18483401834964752 2.0444445610046387 -0.31422773003578186 0.48103275895118713 0.26770836114883423 -0.8348032832145691 0.5938968062400818 0.7064254879951477 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.1000001430511475 -0.0 0.0 1.0 -0.0 0.5284969806671143 0.7498512864112854 0 1.0 0 0.0 0 0.0 0 0.0 0.31422773003578186 2.0444445610046387 -0.18483401834964752 0.8348032832145691 0.26770836114883423 -0.48103275895118713 0.5714684724807739 0.6727004051208496 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.8000000715255737 -0.20000000298023224 0.0 0.5759148001670837 -0.8174688220024109 0.5873590707778931 0.720962405204773 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.922222375869751 -0.2370370477437973 0.0 -0.539597749710083 -0.8419141173362732 0.5888028740882874 0.7407431602478027 0 1.0 0 0.0 0 0.0 0 0.0 0.12064746022224426 1.922222375869751 -0.20517970621585846 0.4187139570713043 -0.5416424870491028 -0.7288430333137512 0.5802648663520813 0.7032516002655029 0 1.0 0 0.0 0 0.0 0 0.0 0.10162962973117828 1.7999999523162842 -0.17303703725337982 0.40681174397468567 0.5766472220420837 -0.7084872126579285 0.579617977142334 0.6857367753982544 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.922222375869751 -0.2370370477437973 0.0 -0.539597749710083 -0.8419141173362732 0.5888028740882874 0.7407431602478027 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.0444445610046387 -0.3629629611968994 0.0 0.269081711769104 -0.9631031155586243 0.6086547374725342 0.7549499869346619 0 1.0 0 0.0 0 0.0 0 0.0 0.18483401834964752 2.0444445610046387 -0.31422773003578186 0.48103275895118713 0.26770836114883423 -0.8348032832145691 0.5938968062400818 0.7064254879951477 0 1.0 0 0.0 0 0.0 0 0.0 0.12064746022224426 1.922222375869751 -0.20517970621585846 0.4187139570713043 -0.5416424870491028 -0.7288430333137512 0.5802648663520813 0.7032516002655029 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.0444445610046387 -0.3629629611968994 0.0 0.269081711769104 -0.9631031155586243 0.6086547374725342 0.7549499869346619 0 1.0 0 0.0 0 0.0 0 0.0 0.0 2.1000001430511475 -0.0 0.0 1.0 -0.0 0.5284969806671143 0.7498512864112854 0 1.0 0 0.0 0 0.0 0 0.0 0.18483401834964752 2.0444445610046387 -0.31422773003578186 0.48103275895118713 0.26770836114883423 -0.8348032832145691 0.5938968062400818 0.7064254879951477 0 1.0 0 0.0 0 0.0 0 0.0 0.6605925559997559 1.6000001430511475 1.124740719795227 0.14654988050460815 0.9560533165931702 0.2539139986038208 0.4359894394874573 0.460996150970459 0 1.0 0 0.0 0 0.0 0 0.0 0.5382605791091919 1.6740740537643433 0.9164553880691528 0.10739463567733765 0.9764397144317627 0.18707846105098724 0.4442180395126343 0.49124330282211304 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6740740537643433 1.0592591762542725 0.0 0.9763481616973877 0.21616260707378387 0.3831595182418823 0.538464367389679 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6000001430511475 1.2999999523162842 0.0 0.9557786583900452 0.2940763533115387 0.36910760402679443 0.5083151459693909 0 1.0 0 0.0 0 0.0 0 0.0 0.5382605791091919 1.6740740537643433 0.9164553880691528 0.10739463567733765 0.9764397144317627 0.18707846105098724 0.4442180395126343 0.49124330282211304 0 1.0 0 0.0 0 0.0 0 0.0 0.2917146682739258 1.7259259223937988 0.496680349111557 0.0711386427283287 0.9897457957267761 0.12363047897815704 0.46832916140556335 0.5594615340232849 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.7259259223937988 0.5740740895271301 0.0 0.9896847605705261 0.1431928426027298 0.4255322217941284 0.6038855314254761 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6740740537643433 1.0592591762542725 0.0 0.9763481616973877 0.21616260707378387 0.3831595182418823 0.538464367389679 0 1.0 0 0.0 0 0.0 0 0.0 0.2917146682739258 1.7259259223937988 0.496680349111557 0.0711386427283287 0.9897457957267761 0.12363047897815704 0.46832916140556335 0.5594615340232849 0 1.0 0 0.0 0 0.0 0 0.0 0.10162962973117828 1.8000000715255737 0.17303703725337982 0.40681174397468567 0.5766472220420837 0.7084872126579285 0.5041325092315674 0.6560440063476562 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.8000000715255737 0.20000000298023224 0.0 0.5759148001670837 0.8174688220024109 0.48873022198677063 0.6823248863220215 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.7259259223937988 0.5740740895271301 0.0 0.9896847605705261 0.1431928426027298 0.4255322217941284 0.6038855314254761 0 1.0 0 0.0 0 0.0 0 0.0 1.124740719795227 1.6000001430511475 0.6605925559997559 0.2539139986038208 0.9560533165931702 0.14654988050460815 0.49968165159225464 0.4449015259742737 0 1.0 0 0.0 0 0.0 0 0.0 0.9164553880691528 1.6740740537643433 0.5382605791091919 0.18707846105098724 0.9764397144317627 0.10739463567733765 0.5023486614227295 0.4748995900154114 0 1.0 0 0.0 0 0.0 0 0.0 0.5382605791091919 1.6740740537643433 0.9164553880691528 0.10739463567733765 0.9764397144317627 0.18707846105098724 0.4442180395126343 0.49124330282211304 0 1.0 0 0.0 0 0.0 0 0.0 0.6605925559997559 1.6000001430511475 1.124740719795227 0.14654988050460815 0.9560533165931702 0.2539139986038208 0.4359894394874573 0.460996150970459 0 1.0 0 0.0 0 0.0 0 0.0 0.9164553880691528 1.6740740537643433 0.5382605791091919 0.18707846105098724 0.9764397144317627 0.10739463567733765 0.5023486614227295 0.4748995900154114 0 1.0 0 0.0 0 0.0 0 0.0 0.496680349111557 1.7259259223937988 0.2917146682739258 0.12363047897815704 0.9897457957267761 0.0711386427283287 0.5109633207321167 0.5429613590240479 0 1.0 0 0.0 0 0.0 0 0.0 0.2917146682739258 1.7259259223937988 0.496680349111557 0.0711386427283287 0.9897457957267761 0.12363047897815704 0.46832916140556335 0.5594615340232849 0 1.0 0 0.0 0 0.0 0 0.0 0.5382605791091919 1.6740740537643433 0.9164553880691528 0.10739463567733765 0.9764397144317627 0.18707846105098724 0.4442180395126343 0.49124330282211304 0 1.0 0 0.0 0 0.0 0 0.0 0.496680349111557 1.7259259223937988 0.2917146682739258 0.12363047897815704 0.9897457957267761 0.0711386427283287 0.5109633207321167 0.5429613590240479 0 1.0 0 0.0 0 0.0 0 0.0 0.17303703725337982 1.7999999523162842 0.10162962973117828 0.7084872126579285 0.5766472220420837 0.40681174397468567 0.5232969522476196 0.644173264503479 0 1.0 0 0.0 0 0.0 0 0.0 0.10162962973117828 1.8000000715255737 0.17303703725337982 0.40681174397468567 0.5766472220420837 0.7084872126579285 0.5041325092315674 0.6560440063476562 0 1.0 0 0.0 0 0.0 0 0.0 0.2917146682739258 1.7259259223937988 0.496680349111557 0.0711386427283287 0.9897457957267761 0.12363047897815704 0.46832916140556335 0.5594615340232849 0 1.0 0 0.0 0 0.0 0 0.0 1.2999999523162842 1.6000001430511475 -0.0 0.2940763533115387 0.9557786583900452 -0.0 0.5643860697746277 0.45672929286956787 0 1.0 0 0.0 0 0.0 0 0.0 1.0592591762542725 1.6740740537643433 -0.0 0.21616260707378387 0.9763481616973877 -0.0 0.5615435838699341 0.4852682948112488 0 1.0 0 0.0 0 0.0 0 0.0 0.9164553880691528 1.6740740537643433 0.5382605791091919 0.18707846105098724 0.9764397144317627 0.10739463567733765 0.5023486614227295 0.4748995900154114 0 1.0 0 0.0 0 0.0 0 0.0 1.124740719795227 1.6000001430511475 0.6605925559997559 0.2539139986038208 0.9560533165931702 0.14654988050460815 0.49968165159225464 0.4449015259742737 0 1.0 0 0.0 0 0.0 0 0.0 1.0592591762542725 1.6740740537643433 -0.0 0.21616260707378387 0.9763481616973877 -0.0 0.5615435838699341 0.4852682948112488 0 1.0 0 0.0 0 0.0 0 0.0 0.5740740895271301 1.7259259223937988 -0.0 0.1431928426027298 0.9896847605705261 -0.0 0.555172324180603 0.5494076013565063 0 1.0 0 0.0 0 0.0 0 0.0 0.496680349111557 1.7259259223937988 0.2917146682739258 0.12363047897815704 0.9897457957267761 0.0711386427283287 0.5109633207321167 0.5429613590240479 0 1.0 0 0.0 0 0.0 0 0.0 0.9164553880691528 1.6740740537643433 0.5382605791091919 0.18707846105098724 0.9764397144317627 0.10739463567733765 0.5023486614227295 0.4748995900154114 0 1.0 0 0.0 0 0.0 0 0.0 0.5740740895271301 1.7259259223937988 -0.0 0.1431928426027298 0.9896847605705261 -0.0 0.555172324180603 0.5494076013565063 0 1.0 0 0.0 0 0.0 0 0.0 0.20000000298023224 1.8000000715255737 -0.0 0.8174688220024109 0.5759148001670837 -0.0 0.5445703268051147 0.6458508968353271 0 1.0 0 0.0 0 0.0 0 0.0 0.17303703725337982 1.7999999523162842 0.10162962973117828 0.7084872126579285 0.5766472220420837 0.40681174397468567 0.5232969522476196 0.644173264503479 0 1.0 0 0.0 0 0.0 0 0.0 0.496680349111557 1.7259259223937988 0.2917146682739258 0.12363047897815704 0.9897457957267761 0.0711386427283287 0.5109633207321167 0.5429613590240479 0 1.0 0 0.0 0 0.0 0 0.0 -1.124740719795227 1.6000001430511475 0.6605925559997559 -0.2539139986038208 0.9560533165931702 0.14654988050460815 0.2195276916027069 0.6834987998008728 0 1.0 0 0.0 0 0.0 0 0.0 -0.9164553880691528 1.6740740537643433 0.5382605791091919 -0.18707846105098724 0.9764397144317627 0.10739463567733765 0.24561625719070435 0.7239598035812378 0 1.0 0 0.0 0 0.0 0 0.0 -1.0592591762542725 1.6740740537643433 -0.0 -0.21616260707378387 0.9763481616973877 -0.0 0.11632069945335388 0.8349870443344116 0 1.0 0 0.0 0 0.0 0 0.0 -1.2999999523162842 1.6000001430511475 -0.0 -0.2940763533115387 0.9557786583900452 -0.0 0.09754133224487305 0.776390016078949 0 1.0 0 0.0 0 0.0 0 0.0 -0.9164553880691528 1.6740740537643433 0.5382605791091919 -0.18707846105098724 0.9764397144317627 0.10739463567733765 0.24561625719070435 0.7239598035812378 0 1.0 0 0.0 0 0.0 0 0.0 -0.496680349111557 1.7259259223937988 0.2917146682739258 -0.12363047897815704 0.9897457957267761 0.0711386427283287 0.3546844720840454 0.7904790043830872 0 1.0 0 0.0 0 0.0 0 0.0 -0.5740740895271301 1.7259259223937988 -0.0 -0.1431928426027298 0.9896847605705261 -0.0 0.36617764830589294 0.9340194463729858 0 1.0 0 0.0 0 0.0 0 0.0 -1.0592591762542725 1.6740740537643433 -0.0 -0.21616260707378387 0.9763481616973877 -0.0 0.11632069945335388 0.8349870443344116 0 1.0 0 0.0 0 0.0 0 0.0 -0.496680349111557 1.7259259223937988 0.2917146682739258 -0.12363047897815704 0.9897457957267761 0.0711386427283287 0.3546844720840454 0.7904790043830872 0 1.0 0 0.0 0 0.0 0 0.0 -0.17303703725337982 1.8000000715255737 0.10162962973117828 -0.7084872126579285 0.5766472220420837 0.40681174397468567 0.49074476957321167 0.7595763206481934 0 1.0 0 0.0 0 0.0 0 0.0 -0.20000000298023224 1.8000000715255737 -0.0 -0.8174688220024109 0.5759148001670837 -0.0 0.5197122097015381 0.7878735065460205 0 1.0 0 0.0 0 0.0 0 0.0 -0.5740740895271301 1.7259259223937988 -0.0 -0.1431928426027298 0.9896847605705261 -0.0 0.36617764830589294 0.9340194463729858 0 1.0 0 0.0 0 0.0 0 0.0 -0.6605925559997559 1.6000001430511475 1.124740719795227 -0.14654988050460815 0.9560533165931702 0.2539139986038208 0.2990068793296814 0.5859890580177307 0 1.0 0 0.0 0 0.0 0 0.0 -0.5382605791091919 1.6740740537643433 0.9164553880691528 -0.10739463567733765 0.9764397144317627 0.18707846105098724 0.31909865140914917 0.6180595755577087 0 1.0 0 0.0 0 0.0 0 0.0 -0.9164553880691528 1.6740740537643433 0.5382605791091919 -0.18707846105098724 0.9764397144317627 0.10739463567733765 0.24561625719070435 0.7239598035812378 0 1.0 0 0.0 0 0.0 0 0.0 -1.124740719795227 1.6000001430511475 0.6605925559997559 -0.2539139986038208 0.9560533165931702 0.14654988050460815 0.2195276916027069 0.6834987998008728 0 1.0 0 0.0 0 0.0 0 0.0 -0.5382605791091919 1.6740740537643433 0.9164553880691528 -0.10739463567733765 0.9764397144317627 0.18707846105098724 0.31909865140914917 0.6180595755577087 0 1.0 0 0.0 0 0.0 0 0.0 -0.2917146682739258 1.7259259223937988 0.496680349111557 -0.0711386427283287 0.9897457957267761 0.12363047897815704 0.38573700189590454 0.6806533336639404 0 1.0 0 0.0 0 0.0 0 0.0 -0.496680349111557 1.7259259223937988 0.2917146682739258 -0.12363047897815704 0.9897457957267761 0.0711386427283287 0.3546844720840454 0.7904790043830872 0 1.0 0 0.0 0 0.0 0 0.0 -0.9164553880691528 1.6740740537643433 0.5382605791091919 -0.18707846105098724 0.9764397144317627 0.10739463567733765 0.24561625719070435 0.7239598035812378 0 1.0 0 0.0 0 0.0 0 0.0 -0.2917146682739258 1.7259259223937988 0.496680349111557 -0.0711386427283287 0.9897457957267761 0.12363047897815704 0.38573700189590454 0.6806533336639404 0 1.0 0 0.0 0 0.0 0 0.0 -0.10162962973117828 1.7999999523162842 0.17303703725337982 -0.40681174397468567 0.5766472220420837 0.7084872126579285 0.4821886718273163 0.7199850678443909 0 1.0 0 0.0 0 0.0 0 0.0 -0.17303703725337982 1.8000000715255737 0.10162962973117828 -0.7084872126579285 0.5766472220420837 0.40681174397468567 0.49074476957321167 0.7595763206481934 0 1.0 0 0.0 0 0.0 0 0.0 -0.496680349111557 1.7259259223937988 0.2917146682739258 -0.12363047897815704 0.9897457957267761 0.0711386427283287 0.3546844720840454 0.7904790043830872 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6000001430511475 1.2999999523162842 0.0 0.9557786583900452 0.2940763533115387 0.36910760402679443 0.5083151459693909 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6740740537643433 1.0592591762542725 0.0 0.9763481616973877 0.21616260707378387 0.3831595182418823 0.538464367389679 0 1.0 0 0.0 0 0.0 0 0.0 -0.5382605791091919 1.6740740537643433 0.9164553880691528 -0.10739463567733765 0.9764397144317627 0.18707846105098724 0.31909865140914917 0.6180595755577087 0 1.0 0 0.0 0 0.0 0 0.0 -0.6605925559997559 1.6000001430511475 1.124740719795227 -0.14654988050460815 0.9560533165931702 0.2539139986038208 0.2990068793296814 0.5859890580177307 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6740740537643433 1.0592591762542725 0.0 0.9763481616973877 0.21616260707378387 0.3831595182418823 0.538464367389679 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.7259259223937988 0.5740740895271301 0.0 0.9896847605705261 0.1431928426027298 0.4255322217941284 0.6038855314254761 0 1.0 0 0.0 0 0.0 0 0.0 -0.2917146682739258 1.7259259223937988 0.496680349111557 -0.0711386427283287 0.9897457957267761 0.12363047897815704 0.38573700189590454 0.6806533336639404 0 1.0 0 0.0 0 0.0 0 0.0 -0.5382605791091919 1.6740740537643433 0.9164553880691528 -0.10739463567733765 0.9764397144317627 0.18707846105098724 0.31909865140914917 0.6180595755577087 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.7259259223937988 0.5740740895271301 0.0 0.9896847605705261 0.1431928426027298 0.4255322217941284 0.6038855314254761 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.8000000715255737 0.20000000298023224 0.0 0.5759148001670837 0.8174688220024109 0.48873022198677063 0.6823248863220215 0 1.0 0 0.0 0 0.0 0 0.0 -0.10162962973117828 1.7999999523162842 0.17303703725337982 -0.40681174397468567 0.5766472220420837 0.7084872126579285 0.4821886718273163 0.7199850678443909 0 1.0 0 0.0 0 0.0 0 0.0 -0.2917146682739258 1.7259259223937988 0.496680349111557 -0.0711386427283287 0.9897457957267761 0.12363047897815704 0.38573700189590454 0.6806533336639404 0 1.0 0 0.0 0 0.0 0 0.0 -0.6605925559997559 1.6000001430511475 -1.124740719795227 -0.14654988050460815 0.9560533165931702 -0.2539139986038208 0.8236000537872314 0.7096928954124451 0 1.0 0 0.0 0 0.0 0 0.0 -0.5382605791091919 1.6740740537643433 -0.9164553880691528 -0.10739463567733765 0.9764397144317627 -0.18707846105098724 0.7985010147094727 0.7418715357780457 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6740740537643433 -1.0592591762542725 0.0 0.9763481616973877 -0.21616260707378387 0.7281266450881958 0.648444652557373 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6000001430511475 -1.2999999523162842 0.0 0.9557786583900452 -0.2940763533115387 0.7460972666740417 0.6234467029571533 0 1.0 0 0.0 0 0.0 0 0.0 -0.5382605791091919 1.6740740537643433 -0.9164553880691528 -0.10739463567733765 0.9764397144317627 -0.18707846105098724 0.7985010147094727 0.7418715357780457 0 1.0 0 0.0 0 0.0 0 0.0 -0.2917146682739258 1.7259259223937988 -0.496680349111557 -0.0711386427283287 0.9897457957267761 -0.12363047897815704 0.7038067579269409 0.7858607769012451 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.7259259223937988 -0.5740740895271301 0.0 0.9896847605705261 -0.1431928426027298 0.6721643209457397 0.6914557218551636 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6740740537643433 -1.0592591762542725 0.0 0.9763481616973877 -0.21616260707378387 0.7281266450881958 0.648444652557373 0 1.0 0 0.0 0 0.0 0 0.0 -0.2917146682739258 1.7259259223937988 -0.496680349111557 -0.0711386427283287 0.9897457957267761 -0.12363047897815704 0.7038067579269409 0.7858607769012451 0 1.0 0 0.0 0 0.0 0 0.0 -0.10162962973117828 1.8000000715255737 -0.17303703725337982 -0.40681174397468567 0.5766472220420837 -0.7084872126579285 0.5817010402679443 0.7591943740844727 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.8000000715255737 -0.20000000298023224 0.0 0.5759148001670837 -0.8174688220024109 0.5873590707778931 0.720962405204773 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.7259259223937988 -0.5740740895271301 0.0 0.9896847605705261 -0.1431928426027298 0.6721643209457397 0.6914557218551636 0 1.0 0 0.0 0 0.0 0 0.0 -1.124740719795227 1.6000001430511475 -0.6605925559997559 -0.2539139986038208 0.9560533165931702 -0.14654988050460815 0.9360653162002563 0.7810214757919312 0 1.0 0 0.0 0 0.0 0 0.0 -0.9164553880691528 1.6740740537643433 -0.5382605791091919 -0.18707846105098724 0.9764397144317627 -0.10739463567733765 0.9121720790863037 0.8325029611587524 0 1.0 0 0.0 0 0.0 0 0.0 -0.5382605791091919 1.6740740537643433 -0.9164553880691528 -0.10739463567733765 0.9764397144317627 -0.18707846105098724 0.7985010147094727 0.7418715357780457 0 1.0 0 0.0 0 0.0 0 0.0 -0.6605925559997559 1.6000001430511475 -1.124740719795227 -0.14654988050460815 0.9560533165931702 -0.2539139986038208 0.8236000537872314 0.7096928954124451 0 1.0 0 0.0 0 0.0 0 0.0 -0.9164553880691528 1.6740740537643433 -0.5382605791091919 -0.18707846105098724 0.9764397144317627 -0.10739463567733765 0.9121720790863037 0.8325029611587524 0 1.0 0 0.0 0 0.0 0 0.0 -0.496680349111557 1.7259259223937988 -0.2917146682739258 -0.12363047897815704 0.9897457957267761 -0.0711386427283287 0.7133582830429077 0.9042637944221497 0 1.0 0 0.0 0 0.0 0 0.0 -0.2917146682739258 1.7259259223937988 -0.496680349111557 -0.0711386427283287 0.9897457957267761 -0.12363047897815704 0.7038067579269409 0.7858607769012451 0 1.0 0 0.0 0 0.0 0 0.0 -0.5382605791091919 1.6740740537643433 -0.9164553880691528 -0.10739463567733765 0.9764397144317627 -0.18707846105098724 0.7985010147094727 0.7418715357780457 0 1.0 0 0.0 0 0.0 0 0.0 -0.496680349111557 1.7259259223937988 -0.2917146682739258 -0.12363047897815704 0.9897457957267761 -0.0711386427283287 0.7133582830429077 0.9042637944221497 0 1.0 0 0.0 0 0.0 0 0.0 -0.17303703725337982 1.7999999523162842 -0.10162962973117828 -0.7084872126579285 0.5766472220420837 -0.40681174397468567 0.5577818155288696 0.7865083813667297 0 1.0 0 0.0 0 0.0 0 0.0 -0.10162962973117828 1.8000000715255737 -0.17303703725337982 -0.40681174397468567 0.5766472220420837 -0.7084872126579285 0.5817010402679443 0.7591943740844727 0 1.0 0 0.0 0 0.0 0 0.0 -0.2917146682739258 1.7259259223937988 -0.496680349111557 -0.0711386427283287 0.9897457957267761 -0.12363047897815704 0.7038067579269409 0.7858607769012451 0 1.0 0 0.0 0 0.0 0 0.0 -1.2999999523162842 1.6000001430511475 -0.0 -0.2940763533115387 0.9557786583900452 -0.0 1.097541332244873 0.776390016078949 0 1.0 0 0.0 0 0.0 0 0.0 -1.0592591762542725 1.6740740537643433 -0.0 -0.21616260707378387 0.9763481616973877 -0.0 1.1163207292556763 0.8349870443344116 0 1.0 0 0.0 0 0.0 0 0.0 -0.9164553880691528 1.6740740537643433 -0.5382605791091919 -0.18707846105098724 0.9764397144317627 -0.10739463567733765 0.9121720790863037 0.8325029611587524 0 1.0 0 0.0 0 0.0 0 0.0 -1.124740719795227 1.6000001430511475 -0.6605925559997559 -0.2539139986038208 0.9560533165931702 -0.14654988050460815 0.9360653162002563 0.7810214757919312 0 1.0 0 0.0 0 0.0 0 0.0 -1.0592591762542725 1.6740740537643433 -0.0 -0.21616260707378387 0.9763481616973877 -0.0 1.1163207292556763 0.8349870443344116 0 1.0 0 0.0 0 0.0 0 0.0 -0.5740740895271301 1.7259259223937988 -0.0 -0.1431928426027298 0.9896847605705261 -0.0 1.3661776781082153 0.9340194463729858 0 1.0 0 0.0 0 0.0 0 0.0 -0.496680349111557 1.7259259223937988 -0.2917146682739258 -0.12363047897815704 0.9897457957267761 -0.0711386427283287 0.7133582830429077 0.9042637944221497 0 1.0 0 0.0 0 0.0 0 0.0 -0.9164553880691528 1.6740740537643433 -0.5382605791091919 -0.18707846105098724 0.9764397144317627 -0.10739463567733765 0.9121720790863037 0.8325029611587524 0 1.0 0 0.0 0 0.0 0 0.0 -0.5740740895271301 1.7259259223937988 -0.0 -0.1431928426027298 0.9896847605705261 -0.0 0.36617764830589294 0.9340194463729858 0 1.0 0 0.0 0 0.0 0 0.0 -0.20000000298023224 1.8000000715255737 -0.0 -0.8174688220024109 0.5759148001670837 -0.0 0.5197122097015381 0.7878735065460205 0 1.0 0 0.0 0 0.0 0 0.0 -0.17303703725337982 1.7999999523162842 -0.10162962973117828 -0.7084872126579285 0.5766472220420837 -0.40681174397468567 0.5577818155288696 0.7865083813667297 0 1.0 0 0.0 0 0.0 0 0.0 -0.496680349111557 1.7259259223937988 -0.2917146682739258 -0.12363047897815704 0.9897457957267761 -0.0711386427283287 0.7133582830429077 0.9042637944221497 0 1.0 0 0.0 0 0.0 0 0.0 1.124740719795227 1.6000001430511475 -0.6605925559997559 0.2539139986038208 0.9560533165931702 -0.14654988050460815 0.6261259913444519 0.4934276342391968 0 1.0 0 0.0 0 0.0 0 0.0 0.9164553880691528 1.6740740537643433 -0.5382605791091919 0.18707846105098724 0.9764397144317627 -0.10739463567733765 0.6183353066444397 0.519606351852417 0 1.0 0 0.0 0 0.0 0 0.0 1.0592591762542725 1.6740740537643433 -0.0 0.21616260707378387 0.9763481616973877 -0.0 0.5615435838699341 0.4852682948112488 0 1.0 0 0.0 0 0.0 0 0.0 1.2999999523162842 1.6000001430511475 -0.0 0.2940763533115387 0.9557786583900452 -0.0 0.5643860697746277 0.45672929286956787 0 1.0 0 0.0 0 0.0 0 0.0 0.9164553880691528 1.6740740537643433 -0.5382605791091919 0.18707846105098724 0.9764397144317627 -0.10739463567733765 0.6183353066444397 0.519606351852417 0 1.0 0 0.0 0 0.0 0 0.0 0.496680349111557 1.7259259223937988 -0.2917146682739258 0.12363047897815704 0.9897457957267761 -0.0711386427283287 0.5976952910423279 0.5767679214477539 0 1.0 0 0.0 0 0.0 0 0.0 0.5740740895271301 1.7259259223937988 -0.0 0.1431928426027298 0.9896847605705261 -0.0 0.555172324180603 0.5494076013565063 0 1.0 0 0.0 0 0.0 0 0.0 1.0592591762542725 1.6740740537643433 -0.0 0.21616260707378387 0.9763481616973877 -0.0 0.5615435838699341 0.4852682948112488 0 1.0 0 0.0 0 0.0 0 0.0 0.496680349111557 1.7259259223937988 -0.2917146682739258 0.12363047897815704 0.9897457957267761 -0.0711386427283287 0.5976952910423279 0.5767679214477539 0 1.0 0 0.0 0 0.0 0 0.0 0.17303703725337982 1.8000000715255737 -0.10162962973117828 0.7084872126579285 0.5766472220420837 -0.40681174397468567 0.564504861831665 0.6604757905006409 0 1.0 0 0.0 0 0.0 0 0.0 0.20000000298023224 1.8000000715255737 -0.0 0.8174688220024109 0.5759148001670837 -0.0 0.5445703268051147 0.6458508968353271 0 1.0 0 0.0 0 0.0 0 0.0 0.5740740895271301 1.7259259223937988 -0.0 0.1431928426027298 0.9896847605705261 -0.0 0.555172324180603 0.5494076013565063 0 1.0 0 0.0 0 0.0 0 0.0 0.6605925559997559 1.6000001430511475 -1.124740719795227 0.14654988050460815 0.9560533165931702 -0.2539139986038208 0.6835131645202637 0.5485973954200745 0 1.0 0 0.0 0 0.0 0 0.0 0.5382605791091919 1.6740740537643433 -0.9164553880691528 0.10739463567733765 0.9764397144317627 -0.18707846105098724 0.671147882938385 0.5729851722717285 0 1.0 0 0.0 0 0.0 0 0.0 0.9164553880691528 1.6740740537643433 -0.5382605791091919 0.18707846105098724 0.9764397144317627 -0.10739463567733765 0.6183353066444397 0.519606351852417 0 1.0 0 0.0 0 0.0 0 0.0 1.124740719795227 1.6000001430511475 -0.6605925559997559 0.2539139986038208 0.9560533165931702 -0.14654988050460815 0.6261259913444519 0.4934276342391968 0 1.0 0 0.0 0 0.0 0 0.0 0.5382605791091919 1.6740740537643433 -0.9164553880691528 0.10739463567733765 0.9764397144317627 -0.18707846105098724 0.671147882938385 0.5729851722717285 0 1.0 0 0.0 0 0.0 0 0.0 0.2917146682739258 1.7259259223937988 -0.496680349111557 0.0711386427283287 0.9897457957267761 -0.12363047897815704 0.6358808279037476 0.6224647760391235 0 1.0 0 0.0 0 0.0 0 0.0 0.496680349111557 1.7259259223937988 -0.2917146682739258 0.12363047897815704 0.9897457957267761 -0.0711386427283287 0.5976952910423279 0.5767679214477539 0 1.0 0 0.0 0 0.0 0 0.0 0.9164553880691528 1.6740740537643433 -0.5382605791091919 0.18707846105098724 0.9764397144317627 -0.10739463567733765 0.6183353066444397 0.519606351852417 0 1.0 0 0.0 0 0.0 0 0.0 0.2917146682739258 1.7259259223937988 -0.496680349111557 0.0711386427283287 0.9897457957267761 -0.12363047897815704 0.6358808279037476 0.6224647760391235 0 1.0 0 0.0 0 0.0 0 0.0 0.10162962973117828 1.7999999523162842 -0.17303703725337982 0.40681174397468567 0.5766472220420837 -0.7084872126579285 0.579617977142334 0.6857367753982544 0 1.0 0 0.0 0 0.0 0 0.0 0.17303703725337982 1.8000000715255737 -0.10162962973117828 0.7084872126579285 0.5766472220420837 -0.40681174397468567 0.564504861831665 0.6604757905006409 0 1.0 0 0.0 0 0.0 0 0.0 0.496680349111557 1.7259259223937988 -0.2917146682739258 0.12363047897815704 0.9897457957267761 -0.0711386427283287 0.5976952910423279 0.5767679214477539 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6000001430511475 -1.2999999523162842 0.0 0.9557786583900452 -0.2940763533115387 0.7460972666740417 0.6234467029571533 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6740740537643433 -1.0592591762542725 0.0 0.9763481616973877 -0.21616260707378387 0.7281266450881958 0.648444652557373 0 1.0 0 0.0 0 0.0 0 0.0 0.5382605791091919 1.6740740537643433 -0.9164553880691528 0.10739463567733765 0.9764397144317627 -0.18707846105098724 0.671147882938385 0.5729851722717285 0 1.0 0 0.0 0 0.0 0 0.0 0.6605925559997559 1.6000001430511475 -1.124740719795227 0.14654988050460815 0.9560533165931702 -0.2539139986038208 0.6835131645202637 0.5485973954200745 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.6740740537643433 -1.0592591762542725 0.0 0.9763481616973877 -0.21616260707378387 0.7281266450881958 0.648444652557373 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.7259259223937988 -0.5740740895271301 0.0 0.9896847605705261 -0.1431928426027298 0.6721643209457397 0.6914557218551636 0 1.0 0 0.0 0 0.0 0 0.0 0.2917146682739258 1.7259259223937988 -0.496680349111557 0.0711386427283287 0.9897457957267761 -0.12363047897815704 0.6358808279037476 0.6224647760391235 0 1.0 0 0.0 0 0.0 0 0.0 0.5382605791091919 1.6740740537643433 -0.9164553880691528 0.10739463567733765 0.9764397144317627 -0.18707846105098724 0.671147882938385 0.5729851722717285 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.7259259223937988 -0.5740740895271301 0.0 0.9896847605705261 -0.1431928426027298 0.6721643209457397 0.6914557218551636 0 1.0 0 0.0 0 0.0 0 0.0 0.0 1.8000000715255737 -0.20000000298023224 0.0 0.5759148001670837 -0.8174688220024109 0.5873590707778931 0.720962405204773 0 1.0 0 0.0 0 0.0 0 0.0 0.10162962973117828 1.7999999523162842 -0.17303703725337982 0.40681174397468567 0.5766472220420837 -0.7084872126579285 0.579617977142334 0.6857367753982544 0 1.0 0 0.0 0 0.0 0 0.0 0.2917146682739258 1.7259259223937988 -0.496680349111557 0.0711386427283287 0.9897457957267761 -0.12363047897815704 0.6358808279037476 0.6224647760391235 0 1.0 0 0.0 0 0.0 0 0.0 0.7622222304344177 0.10000000894069672 -1.297777771949768 0.27433088421821594 -0.8349558711051941 -0.4770042896270752 0.7510849833488464 0.31206804513931274 0 1.0 0 0.0 0 0.0 0 0.0 0.7255226373672485 0.05185185372829437 -1.2352921962738037 0.1830500215291977 -0.9299294948577881 -0.3188573718070984 0.7540410757064819 0.30017149448394775 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.05185185372829437 -1.4277777671813965 0.0 -0.9297769069671631 -0.36808374524116516 0.8214733600616455 0.3509402871131897 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.10000000894069672 -1.5 0.0 -0.8341318964958191 -0.5515609979629517 0.8191912174224854 0.3644620180130005 0 1.0 0 0.0 0 0.0 0 0.0 0.7255226373672485 0.05185185372829437 -1.2352921962738037 0.1830500215291977 -0.9299294948577881 -0.3188573718070984 0.7540410757064819 0.30017149448394775 0 1.0 0 0.0 0 0.0 0 0.0 0.5194402933120728 0.014814815483987331 -0.8844115138053894 0.02932828664779663 -0.9982604384422302 -0.051118504256010056 0.7632773518562317 0.25209832191467285 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.014814815483987331 -1.0222222805023193 0.0 -0.9982299208641052 -0.059053316712379456 0.8270381689071655 0.2939903736114502 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.05185185372829437 -1.4277777671813965 0.0 -0.9297769069671631 -0.36808374524116516 0.8214733600616455 0.3509402871131897 0 1.0 0 0.0 0 0.0 0 0.0 0.5194402933120728 0.014814815483987331 -0.8844115138053894 0.02932828664779663 -0.9982604384422302 -0.051118504256010056 0.7632773518562317 0.25209832191467285 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 -0.0 0.0 -0.999969482421875 -0.0 0.8970043659210205 0.07225430011749268 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.014814815483987331 -1.0222222805023193 0.0 -0.9982299208641052 -0.059053316712379456 0.8270381689071655 0.2939903736114502 0 1.0 0 0.0 0 0.0 0 0.0 1.297777771949768 0.10000000894069672 -0.7622222304344177 0.4770042896270752 -0.8349558711051941 -0.27433088421821594 0.6829252243041992 0.25979578495025635 0 1.0 0 0.0 0 0.0 0 0.0 1.2352921962738037 0.05185185372829437 -0.7255226373672485 0.3188573718070984 -0.9299294948577881 -0.1830500215291977 0.6862674951553345 0.24870890378952026 0 1.0 0 0.0 0 0.0 0 0.0 0.7255226373672485 0.05185185372829437 -1.2352921962738037 0.1830500215291977 -0.9299294948577881 -0.3188573718070984 0.7540410757064819 0.30017149448394775 0 1.0 0 0.0 0 0.0 0 0.0 0.7622222304344177 0.10000000894069672 -1.297777771949768 0.27433088421821594 -0.8349558711051941 -0.4770042896270752 0.7510849833488464 0.31206804513931274 0 1.0 0 0.0 0 0.0 0 0.0 1.2352921962738037 0.05185185372829437 -0.7255226373672485 0.3188573718070984 -0.9299294948577881 -0.1830500215291977 0.6862674951553345 0.24870890378952026 0 1.0 0 0.0 0 0.0 0 0.0 0.8844115138053894 0.014814815483987331 -0.5194402933120728 0.051118504256010056 -0.9982604384422302 -0.02932828664779663 0.6987160444259644 0.20644497871398926 0 1.0 0 0.0 0 0.0 0 0.0 0.5194402933120728 0.014814815483987331 -0.8844115138053894 0.02932828664779663 -0.9982604384422302 -0.051118504256010056 0.7632773518562317 0.25209832191467285 0 1.0 0 0.0 0 0.0 0 0.0 0.7255226373672485 0.05185185372829437 -1.2352921962738037 0.1830500215291977 -0.9299294948577881 -0.3188573718070984 0.7540410757064819 0.30017149448394775 0 1.0 0 0.0 0 0.0 0 0.0 0.8844115138053894 0.014814815483987331 -0.5194402933120728 0.051118504256010056 -0.9982604384422302 -0.02932828664779663 0.6987160444259644 0.20644497871398926 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 -0.0 0.0 -0.999969482421875 -0.0 0.8970043659210205 0.07225430011749268 0 1.0 0 0.0 0 0.0 0 0.0 0.5194402933120728 0.014814815483987331 -0.8844115138053894 0.02932828664779663 -0.9982604384422302 -0.051118504256010056 0.7632773518562317 0.25209832191467285 0 1.0 0 0.0 0 0.0 0 0.0 1.5 0.10000000894069672 -0.0 0.5515609979629517 -0.8341318964958191 -0.0 0.600112795829773 0.21345442533493042 0 1.0 0 0.0 0 0.0 0 0.0 1.4277777671813965 0.05185185372829437 -0.0 0.36808374524116516 -0.9297769069671631 -0.0 0.6032134890556335 0.2022572159767151 0 1.0 0 0.0 0 0.0 0 0.0 1.2352921962738037 0.05185185372829437 -0.7255226373672485 0.3188573718070984 -0.9299294948577881 -0.1830500215291977 0.6862674951553345 0.24870890378952026 0 1.0 0 0.0 0 0.0 0 0.0 1.297777771949768 0.10000000894069672 -0.7622222304344177 0.4770042896270752 -0.8349558711051941 -0.27433088421821594 0.6829252243041992 0.25979578495025635 0 1.0 0 0.0 0 0.0 0 0.0 1.4277777671813965 0.05185185372829437 -0.0 0.36808374524116516 -0.9297769069671631 -0.0 0.6032134890556335 0.2022572159767151 0 1.0 0 0.0 0 0.0 0 0.0 1.0222222805023193 0.014814815483987331 -0.0 0.059053316712379456 -0.9982299208641052 -0.0 0.617790937423706 0.16165071725845337 0 1.0 0 0.0 0 0.0 0 0.0 0.8844115138053894 0.014814815483987331 -0.5194402933120728 0.051118504256010056 -0.9982604384422302 -0.02932828664779663 0.6987160444259644 0.20644497871398926 0 1.0 0 0.0 0 0.0 0 0.0 1.2352921962738037 0.05185185372829437 -0.7255226373672485 0.3188573718070984 -0.9299294948577881 -0.1830500215291977 0.6862674951553345 0.24870890378952026 0 1.0 0 0.0 0 0.0 0 0.0 1.0222222805023193 0.014814815483987331 -0.0 0.059053316712379456 -0.9982299208641052 -0.0 0.617790937423706 0.16165071725845337 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 -0.0 0.0 -0.999969482421875 -0.0 0.8970043659210205 0.07225430011749268 0 1.0 0 0.0 0 0.0 0 0.0 0.8844115138053894 0.014814815483987331 -0.5194402933120728 0.051118504256010056 -0.9982604384422302 -0.02932828664779663 0.6987160444259644 0.20644497871398926 0 1.0 0 0.0 0 0.0 0 0.0 -1.2977778911590576 0.10000000894069672 -0.7622222900390625 -0.4770042896270752 -0.8349558711051941 -0.27433088421821594 0.9665573835372925 0.4220300316810608 0 1.0 0 0.0 0 0.0 0 0.0 -1.2352921962738037 0.05185185372829437 -0.7255226373672485 -0.3188573718070984 -0.9299294948577881 -0.1830500215291977 0.9663537740707397 0.4050024747848511 0 1.0 0 0.0 0 0.0 0 0.0 -1.4277777671813965 0.05185185372829437 -0.0 -0.36808374524116516 -0.9297769069671631 -0.0 1.0485270023345947 0.38783693313598633 0 1.0 0 0.0 0 0.0 0 0.0 -1.5 0.10000000894069672 -0.0 -0.5515609979629517 -0.8341318964958191 -0.0 1.0504302978515625 0.4051086902618408 0 1.0 0 0.0 0 0.0 0 0.0 -1.2352921962738037 0.05185185372829437 -0.7255226373672485 -0.3188573718070984 -0.9299294948577881 -0.1830500215291977 0.9663537740707397 0.4050024747848511 0 1.0 0 0.0 0 0.0 0 0.0 -0.8844115138053894 0.014814815483987331 -0.5194402933120728 -0.051118504256010056 -0.9982604384422302 -0.02932828664779663 0.9622154831886292 0.331081748008728 0 1.0 0 0.0 0 0.0 0 0.0 -1.0222222805023193 0.014814815483987331 -0.0 -0.059053316712379456 -0.9982299208641052 -0.0 1.0389765501022339 0.31207895278930664 0 1.0 0 0.0 0 0.0 0 0.0 -1.4277777671813965 0.05185185372829437 -0.0 -0.36808374524116516 -0.9297769069671631 -0.0 1.0485270023345947 0.38783693313598633 0 1.0 0 0.0 0 0.0 0 0.0 -0.8844115138053894 0.014814815483987331 -0.5194402933120728 -0.051118504256010056 -0.9982604384422302 -0.02932828664779663 0.9622154831886292 0.331081748008728 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 -0.0 0.0 -0.999969482421875 -0.0 0.8970043659210205 0.07225430011749268 0 1.0 0 0.0 0 0.0 0 0.0 -1.0222222805023193 0.014814815483987331 -0.0 -0.059053316712379456 -0.9982299208641052 -0.0 1.0389765501022339 0.31207895278930664 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222900390625 0.10000000894069672 -1.2977778911590576 -0.27433088421821594 -0.8349558711051941 -0.4770042896270752 0.8909897804260254 0.40578246116638184 0 1.0 0 0.0 0 0.0 0 0.0 -0.7255226373672485 0.05185185372829437 -1.2352921962738037 -0.1830500215291977 -0.9299294948577881 -0.3188573718070984 0.892227292060852 0.3902755379676819 0 1.0 0 0.0 0 0.0 0 0.0 -1.2352921962738037 0.05185185372829437 -0.7255226373672485 -0.3188573718070984 -0.9299294948577881 -0.1830500215291977 0.9663537740707397 0.4050024747848511 0 1.0 0 0.0 0 0.0 0 0.0 -1.2977778911590576 0.10000000894069672 -0.7622222900390625 -0.4770042896270752 -0.8349558711051941 -0.27433088421821594 0.9665573835372925 0.4220300316810608 0 1.0 0 0.0 0 0.0 0 0.0 -0.7255226373672485 0.05185185372829437 -1.2352921962738037 -0.1830500215291977 -0.9299294948577881 -0.3188573718070984 0.892227292060852 0.3902755379676819 0 1.0 0 0.0 0 0.0 0 0.0 -0.5194402933120728 0.014814815483987331 -0.8844115138053894 -0.02932828664779663 -0.9982604384422302 -0.051118504256010056 0.8933113813400269 0.3235763907432556 0 1.0 0 0.0 0 0.0 0 0.0 -0.8844115138053894 0.014814815483987331 -0.5194402933120728 -0.051118504256010056 -0.9982604384422302 -0.02932828664779663 0.9622154831886292 0.331081748008728 0 1.0 0 0.0 0 0.0 0 0.0 -1.2352921962738037 0.05185185372829437 -0.7255226373672485 -0.3188573718070984 -0.9299294948577881 -0.1830500215291977 0.9663537740707397 0.4050024747848511 0 1.0 0 0.0 0 0.0 0 0.0 -0.5194402933120728 0.014814815483987331 -0.8844115138053894 -0.02932828664779663 -0.9982604384422302 -0.051118504256010056 0.8933113813400269 0.3235763907432556 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 -0.0 0.0 -0.999969482421875 -0.0 0.8970043659210205 0.07225430011749268 0 1.0 0 0.0 0 0.0 0 0.0 -0.8844115138053894 0.014814815483987331 -0.5194402933120728 -0.051118504256010056 -0.9982604384422302 -0.02932828664779663 0.9622154831886292 0.331081748008728 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.10000000894069672 -1.5 0.0 -0.8341318964958191 -0.5515609979629517 0.8191912174224854 0.3644620180130005 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.05185185372829437 -1.4277777671813965 0.0 -0.9297769069671631 -0.36808374524116516 0.8214733600616455 0.3509402871131897 0 1.0 0 0.0 0 0.0 0 0.0 -0.7255226373672485 0.05185185372829437 -1.2352921962738037 -0.1830500215291977 -0.9299294948577881 -0.3188573718070984 0.892227292060852 0.3902755379676819 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222900390625 0.10000000894069672 -1.2977778911590576 -0.27433088421821594 -0.8349558711051941 -0.4770042896270752 0.8909897804260254 0.40578246116638184 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.05185185372829437 -1.4277777671813965 0.0 -0.9297769069671631 -0.36808374524116516 0.8214733600616455 0.3509402871131897 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.014814815483987331 -1.0222222805023193 0.0 -0.9982299208641052 -0.059053316712379456 0.8270381689071655 0.2939903736114502 0 1.0 0 0.0 0 0.0 0 0.0 -0.5194402933120728 0.014814815483987331 -0.8844115138053894 -0.02932828664779663 -0.9982604384422302 -0.051118504256010056 0.8933113813400269 0.3235763907432556 0 1.0 0 0.0 0 0.0 0 0.0 -0.7255226373672485 0.05185185372829437 -1.2352921962738037 -0.1830500215291977 -0.9299294948577881 -0.3188573718070984 0.892227292060852 0.3902755379676819 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.014814815483987331 -1.0222222805023193 0.0 -0.9982299208641052 -0.059053316712379456 0.8270381689071655 0.2939903736114502 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 -0.0 0.0 -0.999969482421875 -0.0 0.8970043659210205 0.07225430011749268 0 1.0 0 0.0 0 0.0 0 0.0 -0.5194402933120728 0.014814815483987331 -0.8844115138053894 -0.02932828664779663 -0.9982604384422302 -0.051118504256010056 0.8933113813400269 0.3235763907432556 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222900390625 0.10000000894069672 1.2977778911590576 -0.27433088421821594 -0.8349558711051941 0.4770042896270752 0.21255284547805786 0.3001919388771057 0 1.0 0 0.0 0 0.0 0 0.0 -0.7255226373672485 0.05185185372829437 1.2352921962738037 -0.1830500215291977 -0.9299294948577881 0.3188573718070984 0.20883628726005554 0.28566569089889526 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.05185185372829437 1.4277777671813965 0.0 -0.9297769069671631 0.36808374524116516 0.2945656180381775 0.22730082273483276 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.10000000894069672 1.5 0.0 -0.8341318964958191 0.5515609979629517 0.29800066351890564 0.24066346883773804 0 1.0 0 0.0 0 0.0 0 0.0 -0.7255226373672485 0.05185185372829437 1.2352921962738037 -0.1830500215291977 -0.9299294948577881 0.3188573718070984 0.20883628726005554 0.28566569089889526 0 1.0 0 0.0 0 0.0 0 0.0 -0.5194402933120728 0.014814815483987331 0.8844115138053894 -0.02932828664779663 -0.9982604384422302 0.051118504256010056 0.1950553059577942 0.22187775373458862 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.014814815483987331 1.0222222805023193 0.0 -0.9982299208641052 0.059053316712379456 0.2835932970046997 0.17100036144256592 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.05185185372829437 1.4277777671813965 0.0 -0.9297769069671631 0.36808374524116516 0.2945656180381775 0.22730082273483276 0 1.0 0 0.0 0 0.0 0 0.0 -0.5194402933120728 0.014814815483987331 0.8844115138053894 -0.02932828664779663 -0.9982604384422302 0.051118504256010056 1.1950552463531494 0.22187775373458862 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 -0.0 0.0 -0.999969482421875 -0.0 0.8970043659210205 0.07225430011749268 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.014814815483987331 1.0222222805023193 0.0 -0.9982299208641052 0.059053316712379456 1.2835932970046997 0.17100036144256592 0 1.0 0 0.0 0 0.0 0 0.0 -1.2977778911590576 0.10000000894069672 0.7622222900390625 -0.4770042896270752 -0.8349558711051941 0.27433088421821594 0.13414856791496277 0.35897499322891235 0 1.0 0 0.0 0 0.0 0 0.0 -1.2352921962738037 0.05185185372829437 0.7255226373672485 -0.3188573718070984 -0.9299294948577881 0.1830500215291977 0.13097339868545532 0.34291285276412964 0 1.0 0 0.0 0 0.0 0 0.0 -0.7255226373672485 0.05185185372829437 1.2352921962738037 -0.1830500215291977 -0.9299294948577881 0.3188573718070984 0.20883628726005554 0.28566569089889526 0 1.0 0 0.0 0 0.0 0 0.0 -0.7622222900390625 0.10000000894069672 1.2977778911590576 -0.27433088421821594 -0.8349558711051941 0.4770042896270752 0.21255284547805786 0.3001919388771057 0 1.0 0 0.0 0 0.0 0 0.0 -1.2352921962738037 0.05185185372829437 0.7255226373672485 -0.3188573718070984 -0.9299294948577881 0.1830500215291977 0.13097339868545532 0.34291285276412964 0 1.0 0 0.0 0 0.0 0 0.0 -0.8844115138053894 0.014814815483987331 0.5194402933120728 -0.051118504256010056 -0.9982604384422302 0.02932828664779663 0.11793729662895203 0.2717345356941223 0 1.0 0 0.0 0 0.0 0 0.0 -0.5194402933120728 0.014814815483987331 0.8844115138053894 -0.02932828664779663 -0.9982604384422302 0.051118504256010056 0.1950553059577942 0.22187775373458862 0 1.0 0 0.0 0 0.0 0 0.0 -0.7255226373672485 0.05185185372829437 1.2352921962738037 -0.1830500215291977 -0.9299294948577881 0.3188573718070984 0.20883628726005554 0.28566569089889526 0 1.0 0 0.0 0 0.0 0 0.0 -0.8844115138053894 0.014814815483987331 0.5194402933120728 -0.051118504256010056 -0.9982604384422302 0.02932828664779663 1.1179373264312744 0.2717345356941223 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 -0.0 0.0 -0.999969482421875 -0.0 0.8970043659210205 0.07225430011749268 0 1.0 0 0.0 0 0.0 0 0.0 -0.5194402933120728 0.014814815483987331 0.8844115138053894 -0.02932828664779663 -0.9982604384422302 0.051118504256010056 1.1950552463531494 0.22187775373458862 0 1.0 0 0.0 0 0.0 0 0.0 -1.5 0.10000000894069672 -0.0 -0.5515609979629517 -0.8341318964958191 -0.0 0.05043032765388489 0.4051086902618408 0 1.0 0 0.0 0 0.0 0 0.0 -1.4277777671813965 0.05185185372829437 -0.0 -0.36808374524116516 -0.9297769069671631 -0.0 0.0485270619392395 0.38783693313598633 0 1.0 0 0.0 0 0.0 0 0.0 -1.2352921962738037 0.05185185372829437 0.7255226373672485 -0.3188573718070984 -0.9299294948577881 0.1830500215291977 0.13097339868545532 0.34291285276412964 0 1.0 0 0.0 0 0.0 0 0.0 -1.2977778911590576 0.10000000894069672 0.7622222900390625 -0.4770042896270752 -0.8349558711051941 0.27433088421821594 0.13414856791496277 0.35897499322891235 0 1.0 0 0.0 0 0.0 0 0.0 -1.4277777671813965 0.05185185372829437 -0.0 -0.36808374524116516 -0.9297769069671631 -0.0 0.0485270619392395 0.38783693313598633 0 1.0 0 0.0 0 0.0 0 0.0 -1.0222222805023193 0.014814815483987331 -0.0 -0.059053316712379456 -0.9982299208641052 -0.0 0.03897655010223389 0.31207895278930664 0 1.0 0 0.0 0 0.0 0 0.0 -0.8844115138053894 0.014814815483987331 0.5194402933120728 -0.051118504256010056 -0.9982604384422302 0.02932828664779663 0.11793729662895203 0.2717345356941223 0 1.0 0 0.0 0 0.0 0 0.0 -1.2352921962738037 0.05185185372829437 0.7255226373672485 -0.3188573718070984 -0.9299294948577881 0.1830500215291977 0.13097339868545532 0.34291285276412964 0 1.0 0 0.0 0 0.0 0 0.0 -1.0222222805023193 0.014814815483987331 -0.0 -0.059053316712379456 -0.9982299208641052 -0.0 1.0389765501022339 0.31207895278930664 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 -0.0 0.0 -0.999969482421875 -0.0 0.8970043659210205 0.07225430011749268 0 1.0 0 0.0 0 0.0 0 0.0 -0.8844115138053894 0.014814815483987331 0.5194402933120728 -0.051118504256010056 -0.9982604384422302 0.02932828664779663 1.1179373264312744 0.2717345356941223 0 1.0 0 0.0 0 0.0 0 0.0 1.297777771949768 0.10000000894069672 0.7622222304344177 0.4770042896270752 -0.8349558711051941 0.27433088421821594 0.49929916858673096 0.19021719694137573 0 1.0 0 0.0 0 0.0 0 0.0 1.2352921962738037 0.05185185372829437 0.7255226373672485 0.3188573718070984 -0.9299294948577881 0.1830500215291977 0.5004870891571045 0.17821049690246582 0 1.0 0 0.0 0 0.0 0 0.0 1.4277777671813965 0.05185185372829437 -0.0 0.36808374524116516 -0.9297769069671631 -0.0 0.6032134890556335 0.2022572159767151 0 1.0 0 0.0 0 0.0 0 0.0 1.5 0.10000000894069672 -0.0 0.5515609979629517 -0.8341318964958191 -0.0 0.600112795829773 0.21345442533493042 0 1.0 0 0.0 0 0.0 0 0.0 1.2352921962738037 0.05185185372829437 0.7255226373672485 0.3188573718070984 -0.9299294948577881 0.1830500215291977 0.5004870891571045 0.17821049690246582 0 1.0 0 0.0 0 0.0 0 0.0 0.8844115138053894 0.014814815483987331 0.5194402933120728 0.051118504256010056 -0.9982604384422302 0.02932828664779663 0.510748028755188 0.13395017385482788 0 1.0 0 0.0 0 0.0 0 0.0 1.0222222805023193 0.014814815483987331 -0.0 0.059053316712379456 -0.9982299208641052 -0.0 0.617790937423706 0.16165071725845337 0 1.0 0 0.0 0 0.0 0 0.0 1.4277777671813965 0.05185185372829437 -0.0 0.36808374524116516 -0.9297769069671631 -0.0 0.6032134890556335 0.2022572159767151 0 1.0 0 0.0 0 0.0 0 0.0 0.8844115138053894 0.014814815483987331 0.5194402933120728 0.051118504256010056 -0.9982604384422302 0.02932828664779663 0.510748028755188 0.13395017385482788 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 -0.0 0.0 -0.999969482421875 -0.0 0.8970043659210205 0.07225430011749268 0 1.0 0 0.0 0 0.0 0 0.0 1.0222222805023193 0.014814815483987331 -0.0 0.059053316712379456 -0.9982299208641052 -0.0 0.617790937423706 0.16165071725845337 0 1.0 0 0.0 0 0.0 0 0.0 0.7622222900390625 0.10000000894069672 1.2977778911590576 0.27433088421821594 -0.8349558711051941 0.4770042896270752 0.3956698775291443 0.19993311166763306 0 1.0 0 0.0 0 0.0 0 0.0 0.7255226373672485 0.05185185372829437 1.2352921962738037 0.1830500215291977 -0.9299294948577881 0.3188573718070984 0.39399421215057373 0.18722987174987793 0 1.0 0 0.0 0 0.0 0 0.0 1.2352921962738037 0.05185185372829437 0.7255226373672485 0.3188573718070984 -0.9299294948577881 0.1830500215291977 0.5004870891571045 0.17821049690246582 0 1.0 0 0.0 0 0.0 0 0.0 1.297777771949768 0.10000000894069672 0.7622222304344177 0.4770042896270752 -0.8349558711051941 0.27433088421821594 0.49929916858673096 0.19021719694137573 0 1.0 0 0.0 0 0.0 0 0.0 0.7255226373672485 0.05185185372829437 1.2352921962738037 0.1830500215291977 -0.9299294948577881 0.3188573718070984 0.39399421215057373 0.18722987174987793 0 1.0 0 0.0 0 0.0 0 0.0 0.5194402933120728 0.014814815483987331 0.8844115138053894 0.02932828664779663 -0.9982604384422302 0.051118504256010056 0.3923133611679077 0.1371731162071228 0 1.0 0 0.0 0 0.0 0 0.0 0.8844115138053894 0.014814815483987331 0.5194402933120728 0.051118504256010056 -0.9982604384422302 0.02932828664779663 0.510748028755188 0.13395017385482788 0 1.0 0 0.0 0 0.0 0 0.0 1.2352921962738037 0.05185185372829437 0.7255226373672485 0.3188573718070984 -0.9299294948577881 0.1830500215291977 0.5004870891571045 0.17821049690246582 0 1.0 0 0.0 0 0.0 0 0.0 0.5194402933120728 0.014814815483987331 0.8844115138053894 0.02932828664779663 -0.9982604384422302 0.051118504256010056 1.3923133611679077 0.1371731162071228 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 -0.0 0.0 -0.999969482421875 -0.0 0.8970043659210205 0.07225430011749268 0 1.0 0 0.0 0 0.0 0 0.0 0.8844115138053894 0.014814815483987331 0.5194402933120728 0.051118504256010056 -0.9982604384422302 0.02932828664779663 0.510748028755188 0.13395017385482788 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.10000000894069672 1.5 0.0 -0.8341318964958191 0.5515609979629517 0.29800066351890564 0.24066346883773804 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.05185185372829437 1.4277777671813965 0.0 -0.9297769069671631 0.36808374524116516 0.2945656180381775 0.22730082273483276 0 1.0 0 0.0 0 0.0 0 0.0 0.7255226373672485 0.05185185372829437 1.2352921962738037 0.1830500215291977 -0.9299294948577881 0.3188573718070984 0.39399421215057373 0.18722987174987793 0 1.0 0 0.0 0 0.0 0 0.0 0.7622222900390625 0.10000000894069672 1.2977778911590576 0.27433088421821594 -0.8349558711051941 0.4770042896270752 0.3956698775291443 0.19993311166763306 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.05185185372829437 1.4277777671813965 0.0 -0.9297769069671631 0.36808374524116516 0.2945656180381775 0.22730082273483276 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.014814815483987331 1.0222222805023193 0.0 -0.9982299208641052 0.059053316712379456 0.2835932970046997 0.17100036144256592 0 1.0 0 0.0 0 0.0 0 0.0 0.5194402933120728 0.014814815483987331 0.8844115138053894 0.02932828664779663 -0.9982604384422302 0.051118504256010056 0.3923133611679077 0.1371731162071228 0 1.0 0 0.0 0 0.0 0 0.0 0.7255226373672485 0.05185185372829437 1.2352921962738037 0.1830500215291977 -0.9299294948577881 0.3188573718070984 0.39399421215057373 0.18722987174987793 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.014814815483987331 1.0222222805023193 0.0 -0.9982299208641052 0.059053316712379456 1.2835932970046997 0.17100036144256592 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 -0.0 0.0 -0.999969482421875 -0.0 0.8970043659210205 0.07225430011749268 0 1.0 0 0.0 0 0.0 0 0.0 0.5194402933120728 0.014814815483987331 0.8844115138053894 0.02932828664779663 -0.9982604384422302 0.051118504256010056 1.3923133611679077 0.1371731162071228 0 1.0 0 0.0 0 0.0 0 0.0 0 1 2 0 0 2 3 0 4 5 6 0 4 6 7 0 8 9 10 0 8 10 11 0 12 13 14 0 12 14 15 0 16 17 18 0 16 18 19 0 20 21 22 0 20 22 23 0 24 25 26 0 24 26 27 0 28 29 30 0 28 30 31 0 32 33 34 0 32 34 35 0 36 37 38 0 36 38 39 0 40 41 42 0 40 42 43 0 44 45 46 0 44 46 47 0 48 49 50 0 48 50 51 0 52 53 54 0 52 54 55 0 56 57 58 0 56 58 59 0 60 61 62 0 60 62 63 0 64 65 66 0 64 66 67 0 68 69 70 0 68 70 71 0 72 73 74 0 72 74 75 0 76 77 78 0 76 78 79 0 80 81 82 0 80 82 83 0 84 85 86 0 84 86 87 0 88 89 90 0 88 90 91 0 92 93 94 0 92 94 95 0 96 97 98 0 96 98 99 0 100 101 102 0 100 102 103 0 104 105 106 0 104 106 107 0 108 109 110 0 108 110 111 0 112 113 114 0 112 114 115 0 116 117 118 0 116 118 119 0 120 121 122 0 120 122 123 0 124 125 126 0 124 126 127 0 128 129 130 0 128 130 131 0 132 133 134 0 132 134 135 0 136 137 138 0 136 138 139 0 140 141 142 0 140 142 143 0 144 145 146 0 144 146 147 0 148 149 150 0 148 150 151 0 152 153 154 0 152 154 155 0 156 157 158 0 156 158 159 0 160 161 162 0 160 162 163 0 164 165 166 0 164 166 167 0 168 169 170 0 168 170 171 0 172 173 174 0 172 174 175 0 176 177 178 0 176 178 179 0 180 181 182 0 180 182 183 0 184 185 186 0 184 186 187 0 188 189 190 0 188 190 191 0 192 193 194 0 192 194 195 0 196 197 198 0 196 198 199 0 200 201 202 0 200 202 203 0 204 205 206 0 204 206 207 0 208 209 210 0 208 210 211 0 212 213 214 0 212 214 215 0 216 217 218 0 216 218 219 0 220 221 222 0 220 222 223 0 224 225 226 0 224 226 227 0 228 229 230 0 228 230 231 0 232 233 234 0 232 234 235 0 236 237 238 0 236 238 239 0 240 241 242 0 240 242 243 0 244 245 246 0 244 246 247 0 248 249 250 0 248 250 251 0 252 253 254 0 252 254 255 0 256 257 258 0 256 258 259 0 260 261 262 0 260 262 263 0 264 265 266 0 264 266 267 0 268 269 270 0 268 270 271 0 272 273 274 0 272 274 275 0 276 277 278 0 276 278 279 0 280 281 282 0 280 282 283 0 284 285 286 0 284 286 287 0 288 289 290 0 288 290 291 0 292 293 294 0 292 294 295 0 296 297 298 0 296 298 299 0 300 301 302 0 300 302 303 0 304 305 306 0 304 306 307 0 308 309 310 0 308 310 311 0 312 313 314 0 312 314 315 0 316 317 318 0 316 318 319 0 320 321 322 0 320 322 323 0 324 325 326 0 324 326 327 0 328 329 330 0 328 330 331 0 332 333 334 0 332 334 335 0 336 337 338 0 336 338 339 0 340 341 342 0 340 342 343 0 344 345 346 0 344 346 347 0 348 349 350 0 348 350 351 0 352 353 354 0 352 354 355 0 356 357 358 0 356 358 359 0 360 361 362 0 360 362 363 0 364 365 366 0 364 366 367 0 368 369 370 0 368 370 371 0 372 373 374 0 372 374 375 0 376 377 378 0 376 378 379 0 380 381 382 0 380 382 383 0 384 385 386 0 384 386 387 0 388 389 390 0 388 390 391 0 392 393 394 0 392 394 395 0 396 397 398 0 396 398 399 0 400 401 402 0 400 402 403 0 404 405 406 0 404 406 407 0 408 409 410 0 408 410 411 0 412 413 414 0 412 414 415 0 416 417 418 0 416 418 419 0 420 421 422 0 420 422 423 0 424 425 426 0 424 426 427 0 428 429 430 0 428 430 431 0 432 433 434 0 432 434 435 0 436 437 438 0 436 438 439 0 440 441 442 0 440 442 443 0 444 445 446 0 444 446 447 0 448 449 450 0 448 450 451 0 452 453 454 0 452 454 455 0 456 457 458 0 456 458 459 0 460 461 462 0 460 462 463 0 464 465 466 0 464 466 467 0 468 469 470 0 468 470 471 0 472 473 474 0 472 474 475 0 476 477 478 0 476 478 479 0 480 481 482 0 480 482 483 0 484 485 486 0 484 486 487 0 488 489 490 0 488 490 491 0 492 493 494 0 492 494 495 0 496 497 498 0 496 498 499 0 500 501 502 0 500 502 503 0 504 505 506 0 504 506 507 0 508 509 510 0 508 510 511 0 512 513 514 0 512 514 515 0 516 517 518 0 516 518 519 0 520 521 522 0 520 522 523 0 524 525 526 0 524 526 527 0 528 529 530 0 528 530 531 0 532 533 534 0 532 534 535 0 536 537 538 0 536 538 539 0 540 541 542 0 540 542 543 0 544 545 546 0 544 546 547 0 548 549 550 0 548 550 551 0 552 553 554 0 552 554 555 0 556 557 558 0 556 558 559 0 560 561 562 0 560 562 563 0 564 565 566 0 564 566 567 0 568 569 570 0 568 570 571 0 572 573 574 0 572 574 575 0 576 577 578 0 576 578 579 0 580 581 582 0 580 582 583 0 584 585 586 0 587 588 589 0 587 589 590 0 591 592 593 0 591 593 594 0 595 596 597 0 598 599 600 0 598 600 601 0 602 603 604 0 602 604 605 0 606 607 608 0 609 610 611 0 609 611 612 0 613 614 615 0 613 615 616 0 617 618 619 0 620 621 622 0 620 622 623 0 624 625 626 0 624 626 627 0 628 629 630 0 631 632 633 0 631 633 634 0 635 636 637 0 635 637 638 0 639 640 641 0 642 643 644 0 642 644 645 0 646 647 648 0 646 648 649 0 650 651 652 0 653 654 655 0 653 655 656 0 657 658 659 0 657 659 660 0 661 662 663 0 664 665 666 0 664 666 667 0 668 669 670 0 668 670 671 0 672 673 674 0 675 676 677 0 675 677 678 0 679 680 681 0 679 681 682 0 683 684 685 0 686 687 688 0 686 688 689 0 690 691 692 0 690 692 693 0 694 695 696 0 697 698 699 0 697 699 700 0 701 702 703 0 701 703 704 0 705 706 707 0 708 709 710 0 708 710 711 0 712 713 714 0 712 714 715 0 716 717 718 0 716 718 719 0 720 721 722 0 720 722 723 0 724 725 726 0 724 726 727 0 728 729 730 0 728 730 731 0 732 733 734 0 732 734 735 0 736 737 738 0 736 738 739 0 740 741 742 0 740 742 743 0 744 745 746 0 744 746 747 0 748 749 750 0 748 750 751 0 752 753 754 0 752 754 755 0 756 757 758 0 756 758 759 0 760 761 762 0 760 762 763 0 764 765 766 0 764 766 767 0 768 769 770 0 768 770 771 0 772 773 774 0 772 774 775 0 776 777 778 0 776 778 779 0 780 781 782 0 780 782 783 0 784 785 786 0 784 786 787 0 788 789 790 0 788 790 791 0 792 793 794 0 792 794 795 0 796 797 798 0 796 798 799 0 800 801 802 0 800 802 803 0 804 805 806 0 804 806 807 0 808 809 810 0 808 810 811 0 812 813 814 0 812 814 815 0 816 817 818 0 816 818 819 0 820 821 822 0 820 822 823 0 824 825 826 0 824 826 827 0 828 829 830 0 828 830 831 0 832 833 834 0 832 834 835 0 836 837 838 0 836 838 839 0 840 841 842 0 840 842 843 0 844 845 846 0 844 846 847 0 848 849 850 0 848 850 851 0 852 853 854 0 852 854 855 0 856 857 858 0 856 858 859 0 860 861 862 0 863 864 865 0 863 865 866 0 867 868 869 0 867 869 870 0 871 872 873 0 874 875 876 0 874 876 877 0 878 879 880 0 878 880 881 0 882 883 884 0 885 886 887 0 885 887 888 0 889 890 891 0 889 891 892 0 893 894 895 0 896 897 898 0 896 898 899 0 900 901 902 0 900 902 903 0 904 905 906 0 907 908 909 0 907 909 910 0 911 912 913 0 911 913 914 0 915 916 917 0 918 919 920 0 918 920 921 0 922 923 924 0 922 924 925 0 926 927 928 0 929 930 931 0 929 931 932 0 933 934 935 0 933 935 936 0 937 938 939 0 940 941 942 0 940 942 943 0 944 945 946 0 944 946 947 0 948 949 950 0 951 952 953 0 951 953 954 0 955 956 957 0 955 957 958 0 959 960 961 0 962 963 964 0 962 964 965 0 966 967 968 0 966 968 969 0 970 971 972 0 973 974 975 0 973 975 976 0 977 978 979 0 977 979 980 0 981 982 983 0 Root -1 0.0 0.0 0.0 0.0 1.0 0.0 0.0 ================================================ FILE: data/models/crate.collmdl ================================================ box 0.0 0.0 -0.0 0.0 0.0 -0.0 0.5 0.5 0.5 ================================================ FILE: data/models/crate_ligma.dymdl ================================================ DYMDLv1 324 108 2 1 1 texcom_obamabinladen texcom_obamabinladen2 0.37347567081451416 -0.5 -0.37347567081451416 0.0 0.0 1.0 0.8734009265899658 0.1265990436077118 0 0.9996496438980103 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.4749999940395355 -0.37347567081451416 0.0 0.0 1.0 0.1265990138053894 0.12659911811351776 0 0.9996496438980103 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.5 -0.37347567081451416 0.0 0.0 1.0 0.1265990138053894 0.12659911811351776 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 0.5 0.0 1.0 -0.0 0.8734008073806763 0.12659919261932373 0 0.9996496438980103 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 0.4749999940395355 0.0 1.0 -0.0 0.12659895420074463 0.12659895420074463 0 0.9996496438980103 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 0.5 0.0 1.0 -0.0 0.12659895420074463 0.12659895420074463 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.5 0.37347567081451416 0.37347567081451416 0.0 0.0 -1.0 0.8734009265899658 0.8734009265899658 0 0.9996302723884583 0 0.0 0 0.0 0 0.0 -0.4749999940395355 -0.37347567081451416 0.37347567081451416 0.0 0.0 -1.0 0.8734009861946106 0.12659910321235657 0 0.999630868434906 0 0.0 0 0.0 0 0.0 -0.5 -0.37347567081451416 0.37347567081451416 0.0 0.0 -1.0 0.8734009861946106 0.12659910321235657 0 0.999630868434906 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.5 -0.37347567081451416 -1.0 0.0 -0.0 0.12659898400306702 0.1265992969274521 0 0.9997465014457703 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.4749999940395355 0.37347567081451416 -1.0 0.0 -0.0 0.12659908831119537 0.8734010457992554 0 0.9997465014457703 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.5 0.37347567081451416 -1.0 0.0 -0.0 0.12659908831119537 0.8734010457992554 0 0.9997465014457703 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 0.5 -1.0 0.0 -0.0 0.8734008073806763 0.8734009265899658 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 0.4749999940395355 -1.0 0.0 -0.0 0.8734008073806763 0.12659919261932373 0 0.9996310472488403 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 0.5 -1.0 0.0 -0.0 0.8734008073806763 0.12659919261932373 0 0.9996309876441956 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.5 -0.37347567081451416 0.0 0.0 1.0 0.8734006881713867 0.1265990436077118 0 0.9997465014457703 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.4749999940395355 -0.37347567081451416 0.0 0.0 1.0 0.12659898400306702 0.1265992969274521 0 0.9997465014457703 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.5 -0.37347567081451416 0.0 0.0 1.0 0.12659898400306702 0.1265992969274521 0 0.9997465014457703 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 0.0 1.0 -0.0 0.999899685382843 9.997999586630613e-05 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.5 -0.37347567081451416 0.0 1.0 -0.0 0.12659898400306702 0.1265992969274521 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 0.0 1.0 -0.0 9.997999586630613e-05 0.00010033755097538233 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 0.0 1.0 -0.0 0.9998998045921326 0.9998999238014221 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.5 -0.37347567081451416 0.0 1.0 -0.0 0.8734006881713867 0.1265990436077118 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 0.0 1.0 -0.0 0.999899685382843 9.997999586630613e-05 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 0.0 1.0 -0.0 0.00010009917605202645 0.9999000430107117 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.5 0.37347567081451416 0.0 1.0 -0.0 0.8734008073806763 0.8734009265899658 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 0.0 1.0 -0.0 0.9998998045921326 0.9998999238014221 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 0.0 1.0 -0.0 9.997999586630613e-05 0.00010033755097538233 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.5 0.37347567081451416 0.0 1.0 -0.0 0.12659908831119537 0.8734010457992554 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 0.0 1.0 -0.0 0.00010009917605202645 0.9999000430107117 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 0.0 0.0 1.0 0.9998998641967773 0.9998999834060669 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 0.5 0.0 0.0 1.0 0.8734008073806763 0.12659919261932373 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 0.0 0.0 1.0 0.9998998641967773 0.00010019540786743164 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 0.0 0.0 1.0 9.995698928833008e-05 0.9998998641967773 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 0.5 0.0 0.0 1.0 0.8734008073806763 0.8734009265899658 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 0.0 0.0 1.0 0.9998998641967773 0.9998999834060669 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 0.0 0.0 1.0 9.995698928833008e-05 9.995698928833008e-05 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 0.5 0.0 0.0 1.0 0.12659895420074463 0.8734009265899658 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 0.0 0.0 1.0 9.995698928833008e-05 0.9998998641967773 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 0.0 0.0 1.0 0.9998998641967773 0.00010019540786743164 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 0.5 0.0 0.0 1.0 0.12659895420074463 0.12659895420074463 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 0.0 0.0 1.0 9.995698928833008e-05 9.995698928833008e-05 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 -1.0 0.0 -0.0 0.9998999238014221 0.9998999238014221 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 -0.5 -0.37347567081451416 0.37347567081451416 -1.0 0.0 -0.0 0.8734009861946106 0.12659910321235657 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 -1.0 0.0 -0.0 0.9999000430107117 0.00010009918332798406 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 -1.0 0.0 -0.0 9.997999586630613e-05 0.9998998045921326 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 -0.5 0.37347567081451416 0.37347567081451416 -1.0 0.0 -0.0 0.8734009265899658 0.8734009265899658 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 -1.0 0.0 -0.0 0.9998999238014221 0.9998999238014221 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 -1.0 0.0 -0.0 0.00010006938100559637 9.997999586630613e-05 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 -0.5 0.37347567081451416 -0.37347567081451416 -1.0 0.0 -0.0 0.1265989989042282 0.8734008073806763 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 -1.0 0.0 -0.0 9.997999586630613e-05 0.9998998045921326 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 -1.0 0.0 -0.0 0.9999000430107117 0.00010009918332798406 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 -0.5 -0.37347567081451416 -0.37347567081451416 -1.0 0.0 -0.0 0.12659910321235657 0.1265990138053894 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 -1.0 0.0 -0.0 0.00010006938100559637 9.997999586630613e-05 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 0.0 -1.0 -0.0 0.9998999238014221 9.997999586630613e-05 0 0.999998927116394 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.5 -0.37347567081451416 0.0 -1.0 -0.0 0.1265990138053894 0.12659911811351776 0 0.9999988675117493 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 0.0 -1.0 -0.0 9.997999586630613e-05 0.00010009918332798406 0 0.999998927116394 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 0.0 -1.0 -0.0 0.9998999238014221 0.9999000430107117 0 0.999998927116394 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.5 -0.37347567081451416 0.0 -1.0 -0.0 0.8734009265899658 0.1265990436077118 0 0.9999988675117493 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 0.0 -1.0 -0.0 0.9998999238014221 9.997999586630613e-05 0 0.999998927116394 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 0.0 -1.0 -0.0 0.00010003958595916629 0.9999000430107117 0 0.999998927116394 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.5 0.37347567081451416 0.0 -1.0 -0.0 0.8734009265899658 0.8734009861946106 0 0.9999988675117493 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 0.0 -1.0 -0.0 0.9998999238014221 0.9999000430107117 0 0.999998927116394 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 0.0 -1.0 -0.0 9.997999586630613e-05 0.00010009918332798406 0 0.999998927116394 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.5 0.37347567081451416 0.0 -1.0 -0.0 0.1265990436077118 0.8734010457992554 0 0.9999988675117493 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 0.0 -1.0 -0.0 0.00010003958595916629 0.9999000430107117 0 0.999998927116394 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 1.0 0.0 -0.0 0.00010006938100559637 9.997999586630613e-05 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 0.5 -0.37347567081451416 -0.37347567081451416 1.0 0.0 -0.0 0.1265990138053894 0.8734008073806763 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 1.0 0.0 -0.0 9.997999586630613e-05 0.9998998045921326 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 1.0 0.0 -0.0 0.9998999238014221 0.00010012897837441415 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 0.5 0.37347567081451416 -0.37347567081451416 1.0 0.0 -0.0 0.12659907341003418 0.1265990138053894 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 1.0 0.0 -0.0 0.00010006938100559637 9.997999586630613e-05 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 1.0 0.0 -0.0 0.9998999238014221 0.9999000430107117 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 0.5 0.37347567081451416 0.37347567081451416 1.0 0.0 -0.0 0.8734009265899658 0.12659911811351776 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 1.0 0.0 -0.0 0.9998999238014221 0.00010012897837441415 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 1.0 0.0 -0.0 9.997999586630613e-05 0.9998998045921326 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 0.5 -0.37347567081451416 0.37347567081451416 1.0 0.0 -0.0 0.8734009265899658 0.8734010457992554 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 1.0 0.0 -0.0 0.9998999238014221 0.9999000430107117 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 0.0 0.0 -1.0 0.9998999238014221 0.9998999238014221 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 -0.5 0.0 0.0 -1.0 0.8734009861946106 0.12659910321235657 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 0.0 0.0 -1.0 0.9999000430107117 0.00010009918332798406 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 0.0 0.0 -1.0 9.997999586630613e-05 0.9998998045921326 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 -0.5 0.0 0.0 -1.0 0.8734009265899658 0.8734009265899658 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 0.0 0.0 -1.0 0.9998999238014221 0.9998999238014221 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 0.0 0.0 -1.0 0.00010006938100559637 9.997999586630613e-05 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 -0.5 0.0 0.0 -1.0 0.1265989989042282 0.8734008073806763 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 0.0 0.0 -1.0 9.997999586630613e-05 0.9998998045921326 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 0.0 0.0 -1.0 0.9999000430107117 0.00010009918332798406 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 -0.5 0.0 0.0 -1.0 0.12659910321235657 0.1265990138053894 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 0.0 0.0 -1.0 0.00010006938100559637 9.997999586630613e-05 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.4749999940395355 -0.37347567081451416 0.0 1.0 -0.0 0.8734006881713867 0.1265990436077118 0 1.0 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.4749999940395355 0.37347567081451416 0.0 1.0 -0.0 0.12659908831119537 0.8734010457992554 0 1.0 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.4749999940395355 -0.37347567081451416 0.0 1.0 -0.0 0.12659898400306702 0.1265992969274521 0 1.0 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 0.4749999940395355 0.0 0.0 1.0 0.8734008073806763 0.8734009265899658 0 1.0 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 0.4749999940395355 0.0 0.0 1.0 0.12659895420074463 0.12659895420074463 0 1.0 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 0.4749999940395355 0.0 0.0 1.0 0.8734008073806763 0.12659919261932373 0 1.0 0 0.0 0 0.0 0 0.0 -0.4749999940395355 0.37347567081451416 0.37347567081451416 -1.0 0.0 -0.0 0.8734009265899658 0.8734009265899658 0 1.0 0 0.0 0 0.0 0 0.0 -0.4749999940395355 -0.37347567081451416 -0.37347567081451416 -1.0 0.0 -0.0 0.12659910321235657 0.1265990138053894 0 1.0 0 0.0 0 0.0 0 0.0 -0.4749999940395355 -0.37347567081451416 0.37347567081451416 -1.0 0.0 -0.0 0.8734009861946106 0.12659910321235657 0 1.0 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.4749999940395355 -0.37347567081451416 0.0 -1.0 -0.0 0.8734009265899658 0.1265990436077118 0 1.0 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.4749999940395355 0.37347567081451416 0.0 -1.0 -0.0 0.1265990436077118 0.8734010457992554 0 1.0 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.4749999940395355 -0.37347567081451416 0.0 -1.0 -0.0 0.1265990138053894 0.12659911811351776 0 1.0 0 0.0 0 0.0 0 0.0 0.4749999940395355 0.37347567081451416 -0.37347567081451416 1.0 0.0 -0.0 0.12659907341003418 0.1265990138053894 0 1.0 0 0.0 0 0.0 0 0.0 0.4749999940395355 -0.37347567081451416 0.37347567081451416 1.0 0.0 -0.0 0.8734009265899658 0.8734010457992554 0 1.0 0 0.0 0 0.0 0 0.0 0.4749999940395355 -0.37347567081451416 -0.37347567081451416 1.0 0.0 -0.0 0.1265990138053894 0.8734008073806763 0 1.0 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 -0.4749999940395355 0.0 0.0 -1.0 0.8734009265899658 0.8734009265899658 0 1.0 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 -0.4749999940395355 0.0 0.0 -1.0 0.12659910321235657 0.1265990138053894 0 1.0 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 -0.4749999940395355 0.0 0.0 -1.0 0.8734009861946106 0.12659910321235657 0 1.0 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.5 0.37347567081451416 1.0 0.0 -0.0 0.8734008073806763 0.8734009265899658 0 0.9997466206550598 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.4749999940395355 -0.37347567081451416 1.0 0.0 -0.0 0.8734006881713867 0.1265990436077118 0 0.9997466206550598 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.5 -0.37347567081451416 1.0 0.0 -0.0 0.8734006881713867 0.1265990436077118 0 0.9997466206550598 0 0.0 0 0.0 0 0.0 -0.5 -0.37347567081451416 0.37347567081451416 0.0 1.0 -0.0 0.8734009861946106 0.12659910321235657 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.4749999940395355 -0.37347567081451416 -0.37347567081451416 0.0 1.0 -0.0 0.12659910321235657 0.1265990138053894 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.5 -0.37347567081451416 -0.37347567081451416 0.0 1.0 -0.0 0.12659910321235657 0.1265990138053894 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.5 0.37347567081451416 -0.37347567081451416 0.0 0.0 1.0 0.12659907341003418 0.1265990138053894 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 0.4749999940395355 -0.37347567081451416 -0.37347567081451416 0.0 0.0 1.0 0.1265990138053894 0.8734008073806763 0 0.9996310472488403 0 0.0 0 0.0 0 0.0 0.5 -0.37347567081451416 -0.37347567081451416 0.0 0.0 1.0 0.1265990138053894 0.8734008073806763 0 0.9996309876441956 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 0.5 0.0 -1.0 -0.0 0.12659895420074463 0.8734009265899658 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 0.4749999940395355 0.0 -1.0 -0.0 0.8734008073806763 0.8734009265899658 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 0.5 0.0 -1.0 -0.0 0.8734008073806763 0.8734009265899658 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.5 -0.37347567081451416 1.0 0.0 -0.0 0.1265990138053894 0.12659911811351776 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.4749999940395355 0.37347567081451416 1.0 0.0 -0.0 0.1265990436077118 0.8734010457992554 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.5 0.37347567081451416 1.0 0.0 -0.0 0.1265990436077118 0.8734010457992554 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 -0.5 1.0 0.0 -0.0 0.8734009265899658 0.8734009265899658 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 -0.4749999940395355 1.0 0.0 -0.0 0.8734009861946106 0.12659910321235657 0 0.9996310472488403 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 -0.5 1.0 0.0 -0.0 0.8734009861946106 0.12659910321235657 0 0.9996309876441956 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.5 0.37347567081451416 0.0 0.0 -1.0 0.12659908831119537 0.8734010457992554 0 0.9997466206550598 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.4749999940395355 0.37347567081451416 0.0 0.0 -1.0 0.8734008073806763 0.8734009265899658 0 0.9997466206550598 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.5 0.37347567081451416 0.0 0.0 -1.0 0.8734008073806763 0.8734009265899658 0 0.9997466206550598 0 0.0 0 0.0 0 0.0 -0.5 0.37347567081451416 -0.37347567081451416 0.0 -1.0 -0.0 0.1265989989042282 0.8734008073806763 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 -0.4749999940395355 0.37347567081451416 0.37347567081451416 0.0 -1.0 -0.0 0.8734009265899658 0.8734009265899658 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 -0.5 0.37347567081451416 0.37347567081451416 0.0 -1.0 -0.0 0.8734009265899658 0.8734009265899658 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 0.5 -0.37347567081451416 -0.37347567081451416 0.0 1.0 -0.0 0.1265990138053894 0.8734008073806763 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.4749999940395355 -0.37347567081451416 0.37347567081451416 0.0 1.0 -0.0 0.8734009265899658 0.8734010457992554 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.5 -0.37347567081451416 0.37347567081451416 0.0 1.0 -0.0 0.8734009265899658 0.8734010457992554 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 0.5 1.0 0.0 -0.0 0.12659895420074463 0.12659895420074463 0 0.9996309876441956 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 0.4749999940395355 1.0 0.0 -0.0 0.12659895420074463 0.8734009265899658 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 0.5 1.0 0.0 -0.0 0.12659895420074463 0.8734009265899658 0 0.9996303915977478 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.5 0.37347567081451416 -1.0 0.0 -0.0 0.8734009265899658 0.8734009861946106 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.4749999940395355 -0.37347567081451416 -1.0 0.0 -0.0 0.8734009265899658 0.1265990436077118 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.5 -0.37347567081451416 -1.0 0.0 -0.0 0.8734009265899658 0.1265990436077118 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 -0.5 0.0 1.0 -0.0 0.8734009861946106 0.12659910321235657 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 -0.4749999940395355 0.0 1.0 -0.0 0.12659910321235657 0.1265990138053894 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 -0.5 0.0 1.0 -0.0 0.12659910321235657 0.1265990138053894 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.5 -0.37347567081451416 -0.37347567081451416 0.0 0.0 1.0 0.12659910321235657 0.1265990138053894 0 0.9996309876441956 0 0.0 0 0.0 0 0.0 -0.4749999940395355 0.37347567081451416 -0.37347567081451416 0.0 0.0 1.0 0.1265989989042282 0.8734008073806763 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 -0.5 0.37347567081451416 -0.37347567081451416 0.0 0.0 1.0 0.1265989989042282 0.8734008073806763 0 0.9996303915977478 0 0.0 0 0.0 0 0.0 0.5 0.37347567081451416 0.37347567081451416 0.0 -1.0 -0.0 0.8734009265899658 0.12659911811351776 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 0.4749999940395355 0.37347567081451416 -0.37347567081451416 0.0 -1.0 -0.0 0.12659907341003418 0.1265990138053894 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 0.5 0.37347567081451416 -0.37347567081451416 0.0 -1.0 -0.0 0.12659907341003418 0.1265990138053894 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.5 0.37347567081451416 0.0 0.0 -1.0 0.1265990436077118 0.8734010457992554 0 0.9996495246887207 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.4749999940395355 0.37347567081451416 0.0 0.0 -1.0 0.8734009265899658 0.8734009861946106 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.5 0.37347567081451416 0.0 0.0 -1.0 0.8734009265899658 0.8734009861946106 0 0.9996495246887207 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 -0.5 0.0 -1.0 -0.0 0.1265989989042282 0.8734008073806763 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 -0.4749999940395355 0.0 -1.0 -0.0 0.8734009265899658 0.8734009265899658 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 -0.5 0.0 -1.0 -0.0 0.8734009265899658 0.8734009265899658 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 0.5 -0.37347567081451416 0.37347567081451416 0.0 0.0 -1.0 0.8734009265899658 0.8734010457992554 0 0.9996309876441956 0 0.0 0 0.0 0 0.0 0.4749999940395355 0.37347567081451416 0.37347567081451416 0.0 0.0 -1.0 0.8734009265899658 0.12659911811351776 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 0.5 0.37347567081451416 0.37347567081451416 0.0 0.0 -1.0 0.8734009265899658 0.12659911811351776 0 0.9996303915977478 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 -0.5 -1.0 0.0 -0.0 0.12659910321235657 0.1265990138053894 0 0.9996309876441956 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 -0.4749999940395355 -1.0 0.0 -0.0 0.1265989989042282 0.8734008073806763 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 -0.5 -1.0 0.0 -0.0 0.1265989989042282 0.8734008073806763 0 0.9996303915977478 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.5 -0.37347567081451416 0.0 0.0 1.0 0.8734009265899658 0.1265990436077118 0 0.9996496438980103 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.4749999940395355 -0.37347567081451416 0.0 0.0 1.0 0.8734009265899658 0.1265990436077118 0 0.9996496438980103 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.4749999940395355 -0.37347567081451416 0.0 0.0 1.0 0.1265990138053894 0.12659911811351776 0 0.9996496438980103 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 0.5 0.0 1.0 -0.0 0.8734008073806763 0.12659919261932373 0 0.9996496438980103 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 0.4749999940395355 0.0 1.0 -0.0 0.8734008073806763 0.12659919261932373 0 0.9996496438980103 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 0.4749999940395355 0.0 1.0 -0.0 0.12659895420074463 0.12659895420074463 0 0.9996496438980103 0 0.0 0 0.0 0 0.0 -0.5 0.37347567081451416 0.37347567081451416 0.0 0.0 -1.0 0.8734009265899658 0.8734009265899658 0 0.9996302723884583 0 0.0 0 0.0 0 0.0 -0.4749999940395355 0.37347567081451416 0.37347567081451416 0.0 0.0 -1.0 0.8734009265899658 0.8734009265899658 0 0.9996302723884583 0 0.0 0 0.0 0 0.0 -0.4749999940395355 -0.37347567081451416 0.37347567081451416 0.0 0.0 -1.0 0.8734009861946106 0.12659910321235657 0 0.999630868434906 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.5 -0.37347567081451416 -1.0 0.0 -0.0 0.12659898400306702 0.1265992969274521 0 0.9997465014457703 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.4749999940395355 -0.37347567081451416 -1.0 0.0 -0.0 0.12659898400306702 0.1265992969274521 0 0.9997465014457703 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.4749999940395355 0.37347567081451416 -1.0 0.0 -0.0 0.12659908831119537 0.8734010457992554 0 0.9997465014457703 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 0.5 -1.0 0.0 -0.0 0.8734008073806763 0.8734009265899658 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 0.4749999940395355 -1.0 0.0 -0.0 0.8734008073806763 0.8734009265899658 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 0.4749999940395355 -1.0 0.0 -0.0 0.8734008073806763 0.12659919261932373 0 0.9996310472488403 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.5 -0.37347567081451416 0.0 0.0 1.0 0.8734006881713867 0.1265990436077118 0 0.9997465014457703 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.4749999940395355 -0.37347567081451416 0.0 0.0 1.0 0.8734006881713867 0.1265990436077118 0 0.9997465014457703 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.4749999940395355 -0.37347567081451416 0.0 0.0 1.0 0.12659898400306702 0.1265992969274521 0 0.9997465014457703 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 0.0 1.0 -0.0 0.999899685382843 9.997999586630613e-05 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.5 -0.37347567081451416 0.0 1.0 -0.0 0.8734006881713867 0.1265990436077118 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.5 -0.37347567081451416 0.0 1.0 -0.0 0.12659898400306702 0.1265992969274521 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 0.0 1.0 -0.0 0.9998998045921326 0.9998999238014221 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.5 0.37347567081451416 0.0 1.0 -0.0 0.8734008073806763 0.8734009265899658 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.5 -0.37347567081451416 0.0 1.0 -0.0 0.8734006881713867 0.1265990436077118 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 0.0 1.0 -0.0 0.00010009917605202645 0.9999000430107117 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.5 0.37347567081451416 0.0 1.0 -0.0 0.12659908831119537 0.8734010457992554 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.5 0.37347567081451416 0.0 1.0 -0.0 0.8734008073806763 0.8734009265899658 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 0.0 1.0 -0.0 9.997999586630613e-05 0.00010033755097538233 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.5 -0.37347567081451416 0.0 1.0 -0.0 0.12659898400306702 0.1265992969274521 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.5 0.37347567081451416 0.0 1.0 -0.0 0.12659908831119537 0.8734010457992554 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 0.0 0.0 1.0 0.9998998641967773 0.9998999834060669 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 0.5 0.0 0.0 1.0 0.8734008073806763 0.8734009265899658 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 0.5 0.0 0.0 1.0 0.8734008073806763 0.12659919261932373 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 0.0 0.0 1.0 9.995698928833008e-05 0.9998998641967773 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 0.5 0.0 0.0 1.0 0.12659895420074463 0.8734009265899658 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 0.5 0.0 0.0 1.0 0.8734008073806763 0.8734009265899658 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 0.0 0.0 1.0 9.995698928833008e-05 9.995698928833008e-05 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 0.5 0.0 0.0 1.0 0.12659895420074463 0.12659895420074463 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 0.5 0.0 0.0 1.0 0.12659895420074463 0.8734009265899658 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 0.0 0.0 1.0 0.9998998641967773 0.00010019540786743164 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 0.5 0.0 0.0 1.0 0.8734008073806763 0.12659919261932373 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 0.5 0.0 0.0 1.0 0.12659895420074463 0.12659895420074463 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 -1.0 0.0 -0.0 0.9998999238014221 0.9998999238014221 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 -0.5 0.37347567081451416 0.37347567081451416 -1.0 0.0 -0.0 0.8734009265899658 0.8734009265899658 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 -0.5 -0.37347567081451416 0.37347567081451416 -1.0 0.0 -0.0 0.8734009861946106 0.12659910321235657 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 -1.0 0.0 -0.0 9.997999586630613e-05 0.9998998045921326 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 -0.5 0.37347567081451416 -0.37347567081451416 -1.0 0.0 -0.0 0.1265989989042282 0.8734008073806763 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 -0.5 0.37347567081451416 0.37347567081451416 -1.0 0.0 -0.0 0.8734009265899658 0.8734009265899658 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 -1.0 0.0 -0.0 0.00010006938100559637 9.997999586630613e-05 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 -0.5 -0.37347567081451416 -0.37347567081451416 -1.0 0.0 -0.0 0.12659910321235657 0.1265990138053894 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 -0.5 0.37347567081451416 -0.37347567081451416 -1.0 0.0 -0.0 0.1265989989042282 0.8734008073806763 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 -1.0 0.0 -0.0 0.9999000430107117 0.00010009918332798406 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 -0.5 -0.37347567081451416 0.37347567081451416 -1.0 0.0 -0.0 0.8734009861946106 0.12659910321235657 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 -0.5 -0.37347567081451416 -0.37347567081451416 -1.0 0.0 -0.0 0.12659910321235657 0.1265990138053894 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 0.0 -1.0 -0.0 0.9998999238014221 9.997999586630613e-05 0 0.999998927116394 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.5 -0.37347567081451416 0.0 -1.0 -0.0 0.8734009265899658 0.1265990436077118 0 0.9999988675117493 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.5 -0.37347567081451416 0.0 -1.0 -0.0 0.1265990138053894 0.12659911811351776 0 0.9999988675117493 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 0.0 -1.0 -0.0 0.9998999238014221 0.9999000430107117 0 0.999998927116394 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.5 0.37347567081451416 0.0 -1.0 -0.0 0.8734009265899658 0.8734009861946106 0 0.9999988675117493 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.5 -0.37347567081451416 0.0 -1.0 -0.0 0.8734009265899658 0.1265990436077118 0 0.9999988675117493 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 0.0 -1.0 -0.0 0.00010003958595916629 0.9999000430107117 0 0.999998927116394 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.5 0.37347567081451416 0.0 -1.0 -0.0 0.1265990436077118 0.8734010457992554 0 0.9999988675117493 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.5 0.37347567081451416 0.0 -1.0 -0.0 0.8734009265899658 0.8734009861946106 0 0.9999988675117493 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 0.0 -1.0 -0.0 9.997999586630613e-05 0.00010009918332798406 0 0.999998927116394 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.5 -0.37347567081451416 0.0 -1.0 -0.0 0.1265990138053894 0.12659911811351776 0 0.9999988675117493 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.5 0.37347567081451416 0.0 -1.0 -0.0 0.1265990436077118 0.8734010457992554 0 0.9999988675117493 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 1.0 0.0 -0.0 0.00010006938100559637 9.997999586630613e-05 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 0.5 0.37347567081451416 -0.37347567081451416 1.0 0.0 -0.0 0.12659907341003418 0.1265990138053894 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 0.5 -0.37347567081451416 -0.37347567081451416 1.0 0.0 -0.0 0.1265990138053894 0.8734008073806763 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 1.0 0.0 -0.0 0.9998999238014221 0.00010012897837441415 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 0.5 0.37347567081451416 0.37347567081451416 1.0 0.0 -0.0 0.8734009265899658 0.12659911811351776 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 0.5 0.37347567081451416 -0.37347567081451416 1.0 0.0 -0.0 0.12659907341003418 0.1265990138053894 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 1.0 0.0 -0.0 0.9998999238014221 0.9999000430107117 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 0.5 -0.37347567081451416 0.37347567081451416 1.0 0.0 -0.0 0.8734009265899658 0.8734010457992554 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 0.5 0.37347567081451416 0.37347567081451416 1.0 0.0 -0.0 0.8734009265899658 0.12659911811351776 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 1.0 0.0 -0.0 9.997999586630613e-05 0.9998998045921326 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 0.5 -0.37347567081451416 -0.37347567081451416 1.0 0.0 -0.0 0.1265990138053894 0.8734008073806763 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 0.5 -0.37347567081451416 0.37347567081451416 1.0 0.0 -0.0 0.8734009265899658 0.8734010457992554 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 0.0 0.0 -1.0 0.9998999238014221 0.9998999238014221 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 -0.5 0.0 0.0 -1.0 0.8734009265899658 0.8734009265899658 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 -0.5 0.0 0.0 -1.0 0.8734009861946106 0.12659910321235657 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 0.0 0.0 -1.0 9.997999586630613e-05 0.9998998045921326 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 -0.5 0.0 0.0 -1.0 0.1265989989042282 0.8734008073806763 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 -0.5 0.0 0.0 -1.0 0.8734009265899658 0.8734009265899658 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 0.0 0.0 -1.0 0.00010006938100559637 9.997999586630613e-05 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 -0.5 0.0 0.0 -1.0 0.12659910321235657 0.1265990138053894 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 -0.5 0.0 0.0 -1.0 0.1265989989042282 0.8734008073806763 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 0.0 0.0 -1.0 0.9999000430107117 0.00010009918332798406 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 -0.5 0.0 0.0 -1.0 0.8734009861946106 0.12659910321235657 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 -0.5 0.0 0.0 -1.0 0.12659910321235657 0.1265990138053894 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.4749999940395355 -0.37347567081451416 0.0 1.0 -0.0 0.8734006881713867 0.1265990436077118 0 1.0 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.4749999940395355 0.37347567081451416 0.0 1.0 -0.0 0.8734008073806763 0.8734009265899658 0 1.0 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.4749999940395355 0.37347567081451416 0.0 1.0 -0.0 0.12659908831119537 0.8734010457992554 0 1.0 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 0.4749999940395355 0.0 0.0 1.0 0.8734008073806763 0.8734009265899658 0 1.0 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 0.4749999940395355 0.0 0.0 1.0 0.12659895420074463 0.8734009265899658 0 1.0 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 0.4749999940395355 0.0 0.0 1.0 0.12659895420074463 0.12659895420074463 0 1.0 0 0.0 0 0.0 0 0.0 -0.4749999940395355 0.37347567081451416 0.37347567081451416 -1.0 0.0 -0.0 0.8734009265899658 0.8734009265899658 0 1.0 0 0.0 0 0.0 0 0.0 -0.4749999940395355 0.37347567081451416 -0.37347567081451416 -1.0 0.0 -0.0 0.1265989989042282 0.8734008073806763 0 1.0 0 0.0 0 0.0 0 0.0 -0.4749999940395355 -0.37347567081451416 -0.37347567081451416 -1.0 0.0 -0.0 0.12659910321235657 0.1265990138053894 0 1.0 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.4749999940395355 -0.37347567081451416 0.0 -1.0 -0.0 0.8734009265899658 0.1265990436077118 0 1.0 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.4749999940395355 0.37347567081451416 0.0 -1.0 -0.0 0.8734009265899658 0.8734009861946106 0 1.0 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.4749999940395355 0.37347567081451416 0.0 -1.0 -0.0 0.1265990436077118 0.8734010457992554 0 1.0 0 0.0 0 0.0 0 0.0 0.4749999940395355 0.37347567081451416 -0.37347567081451416 1.0 0.0 -0.0 0.12659907341003418 0.1265990138053894 0 1.0 0 0.0 0 0.0 0 0.0 0.4749999940395355 0.37347567081451416 0.37347567081451416 1.0 0.0 -0.0 0.8734009265899658 0.12659911811351776 0 1.0 0 0.0 0 0.0 0 0.0 0.4749999940395355 -0.37347567081451416 0.37347567081451416 1.0 0.0 -0.0 0.8734009265899658 0.8734010457992554 0 1.0 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 -0.4749999940395355 0.0 0.0 -1.0 0.8734009265899658 0.8734009265899658 0 1.0 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 -0.4749999940395355 0.0 0.0 -1.0 0.1265989989042282 0.8734008073806763 0 1.0 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 -0.4749999940395355 0.0 0.0 -1.0 0.12659910321235657 0.1265990138053894 0 1.0 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.5 0.37347567081451416 1.0 0.0 -0.0 0.8734008073806763 0.8734009265899658 0 0.9997466206550598 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.4749999940395355 0.37347567081451416 1.0 0.0 -0.0 0.8734008073806763 0.8734009265899658 0 0.9997466206550598 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.4749999940395355 -0.37347567081451416 1.0 0.0 -0.0 0.8734006881713867 0.1265990436077118 0 0.9997466206550598 0 0.0 0 0.0 0 0.0 -0.5 -0.37347567081451416 0.37347567081451416 0.0 1.0 -0.0 0.8734009861946106 0.12659910321235657 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.4749999940395355 -0.37347567081451416 0.37347567081451416 0.0 1.0 -0.0 0.8734009861946106 0.12659910321235657 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.4749999940395355 -0.37347567081451416 -0.37347567081451416 0.0 1.0 -0.0 0.12659910321235657 0.1265990138053894 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.5 0.37347567081451416 -0.37347567081451416 0.0 0.0 1.0 0.12659907341003418 0.1265990138053894 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 0.4749999940395355 0.37347567081451416 -0.37347567081451416 0.0 0.0 1.0 0.12659907341003418 0.1265990138053894 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 0.4749999940395355 -0.37347567081451416 -0.37347567081451416 0.0 0.0 1.0 0.1265990138053894 0.8734008073806763 0 0.9996310472488403 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 0.5 0.0 -1.0 -0.0 0.12659895420074463 0.8734009265899658 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 0.4749999940395355 0.0 -1.0 -0.0 0.12659895420074463 0.8734009265899658 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 0.4749999940395355 0.0 -1.0 -0.0 0.8734008073806763 0.8734009265899658 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.5 -0.37347567081451416 1.0 0.0 -0.0 0.1265990138053894 0.12659911811351776 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.4749999940395355 -0.37347567081451416 1.0 0.0 -0.0 0.1265990138053894 0.12659911811351776 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.4749999940395355 0.37347567081451416 1.0 0.0 -0.0 0.1265990436077118 0.8734010457992554 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 -0.5 1.0 0.0 -0.0 0.8734009265899658 0.8734009265899658 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 -0.4749999940395355 1.0 0.0 -0.0 0.8734009265899658 0.8734009265899658 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 -0.4749999940395355 1.0 0.0 -0.0 0.8734009861946106 0.12659910321235657 0 0.9996310472488403 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.5 0.37347567081451416 0.0 0.0 -1.0 0.12659908831119537 0.8734010457992554 0 0.9997466206550598 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.4749999940395355 0.37347567081451416 0.0 0.0 -1.0 0.12659908831119537 0.8734010457992554 0 0.9997466206550598 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.4749999940395355 0.37347567081451416 0.0 0.0 -1.0 0.8734008073806763 0.8734009265899658 0 0.9997466206550598 0 0.0 0 0.0 0 0.0 -0.5 0.37347567081451416 -0.37347567081451416 0.0 -1.0 -0.0 0.1265989989042282 0.8734008073806763 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 -0.4749999940395355 0.37347567081451416 -0.37347567081451416 0.0 -1.0 -0.0 0.1265989989042282 0.8734008073806763 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 -0.4749999940395355 0.37347567081451416 0.37347567081451416 0.0 -1.0 -0.0 0.8734009265899658 0.8734009265899658 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 0.5 -0.37347567081451416 -0.37347567081451416 0.0 1.0 -0.0 0.1265990138053894 0.8734008073806763 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.4749999940395355 -0.37347567081451416 -0.37347567081451416 0.0 1.0 -0.0 0.1265990138053894 0.8734008073806763 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.4749999940395355 -0.37347567081451416 0.37347567081451416 0.0 1.0 -0.0 0.8734009265899658 0.8734010457992554 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 0.5 1.0 0.0 -0.0 0.12659895420074463 0.12659895420074463 0 0.9996309876441956 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 0.4749999940395355 1.0 0.0 -0.0 0.12659895420074463 0.12659895420074463 0 0.9996309876441956 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 0.4749999940395355 1.0 0.0 -0.0 0.12659895420074463 0.8734009265899658 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.5 0.37347567081451416 -1.0 0.0 -0.0 0.8734009265899658 0.8734009861946106 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.4749999940395355 0.37347567081451416 -1.0 0.0 -0.0 0.8734009265899658 0.8734009861946106 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.4749999940395355 -0.37347567081451416 -1.0 0.0 -0.0 0.8734009265899658 0.1265990436077118 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 -0.5 0.0 1.0 -0.0 0.8734009861946106 0.12659910321235657 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 -0.4749999940395355 0.0 1.0 -0.0 0.8734009861946106 0.12659910321235657 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 -0.4749999940395355 0.0 1.0 -0.0 0.12659910321235657 0.1265990138053894 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.5 -0.37347567081451416 -0.37347567081451416 0.0 0.0 1.0 0.12659910321235657 0.1265990138053894 0 0.9996309876441956 0 0.0 0 0.0 0 0.0 -0.4749999940395355 -0.37347567081451416 -0.37347567081451416 0.0 0.0 1.0 0.12659910321235657 0.1265990138053894 0 0.9996309876441956 0 0.0 0 0.0 0 0.0 -0.4749999940395355 0.37347567081451416 -0.37347567081451416 0.0 0.0 1.0 0.1265989989042282 0.8734008073806763 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 0.5 0.37347567081451416 0.37347567081451416 0.0 -1.0 -0.0 0.8734009265899658 0.12659911811351776 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 0.4749999940395355 0.37347567081451416 0.37347567081451416 0.0 -1.0 -0.0 0.8734009265899658 0.12659911811351776 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 0.4749999940395355 0.37347567081451416 -0.37347567081451416 0.0 -1.0 -0.0 0.12659907341003418 0.1265990138053894 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.5 0.37347567081451416 0.0 0.0 -1.0 0.1265990436077118 0.8734010457992554 0 0.9996495246887207 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.4749999940395355 0.37347567081451416 0.0 0.0 -1.0 0.1265990436077118 0.8734010457992554 0 0.9996495246887207 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.4749999940395355 0.37347567081451416 0.0 0.0 -1.0 0.8734009265899658 0.8734009861946106 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 -0.5 0.0 -1.0 -0.0 0.1265989989042282 0.8734008073806763 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 -0.4749999940395355 0.0 -1.0 -0.0 0.1265989989042282 0.8734008073806763 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 -0.4749999940395355 0.0 -1.0 -0.0 0.8734009265899658 0.8734009265899658 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 0.5 -0.37347567081451416 0.37347567081451416 0.0 0.0 -1.0 0.8734009265899658 0.8734010457992554 0 0.9996309876441956 0 0.0 0 0.0 0 0.0 0.4749999940395355 -0.37347567081451416 0.37347567081451416 0.0 0.0 -1.0 0.8734009265899658 0.8734010457992554 0 0.9996309876441956 0 0.0 0 0.0 0 0.0 0.4749999940395355 0.37347567081451416 0.37347567081451416 0.0 0.0 -1.0 0.8734009265899658 0.12659911811351776 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 -0.5 -1.0 0.0 -0.0 0.12659910321235657 0.1265990138053894 0 0.9996309876441956 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 -0.4749999940395355 -1.0 0.0 -0.0 0.12659910321235657 0.1265990138053894 0 0.9996309876441956 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 -0.4749999940395355 -1.0 0.0 -0.0 0.1265989989042282 0.8734008073806763 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 0 1 2 0 3 4 5 1 6 7 8 0 9 10 11 0 12 13 14 1 15 16 17 0 18 19 20 0 21 22 23 0 24 25 26 0 27 28 29 0 30 31 32 1 33 34 35 1 36 37 38 1 39 40 41 1 42 43 44 0 45 46 47 0 48 49 50 0 51 52 53 0 54 55 56 0 57 58 59 0 60 61 62 0 63 64 65 0 66 67 68 0 69 70 71 0 72 73 74 0 75 76 77 0 78 79 80 1 81 82 83 1 84 85 86 1 87 88 89 1 90 91 92 0 93 94 95 1 96 97 98 0 99 100 101 0 102 103 104 0 105 106 107 1 108 109 110 0 111 112 113 0 114 115 116 0 117 118 119 1 120 121 122 0 123 124 125 1 126 127 128 0 129 130 131 0 132 133 134 0 135 136 137 1 138 139 140 0 141 142 143 1 144 145 146 0 147 148 149 0 150 151 152 0 153 154 155 1 156 157 158 0 159 160 161 1 162 163 164 0 165 166 167 1 168 169 170 0 171 172 173 0 174 175 176 1 177 178 179 0 180 181 182 0 183 184 185 0 186 187 188 0 189 190 191 0 192 193 194 1 195 196 197 1 198 199 200 1 201 202 203 1 204 205 206 0 207 208 209 0 210 211 212 0 213 214 215 0 216 217 218 0 219 220 221 0 222 223 224 0 225 226 227 0 228 229 230 0 231 232 233 0 234 235 236 0 237 238 239 0 240 241 242 1 243 244 245 1 246 247 248 1 249 250 251 1 252 253 254 0 255 256 257 1 258 259 260 0 261 262 263 0 264 265 266 0 267 268 269 1 270 271 272 0 273 274 275 0 276 277 278 0 279 280 281 1 282 283 284 0 285 286 287 1 288 289 290 0 291 292 293 0 294 295 296 0 297 298 299 1 300 301 302 0 303 304 305 1 306 307 308 0 309 310 311 0 312 313 314 0 315 316 317 1 318 319 320 0 321 322 323 1 Root -1 0.0 0.0 -0.0 0.0 1.0 -0.0 0.0 Root ================================================ FILE: data/models/crate_plain.dymdl ================================================ DYMDLv1 324 108 1 1 1 texcom_obamabinladen 0.37347567081451416 -0.5 -0.37347567081451416 0.0 0.0 1.0 0.8734009265899658 0.1265990436077118 0 0.9996496438980103 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.4749999940395355 -0.37347567081451416 0.0 0.0 1.0 0.1265990138053894 0.12659911811351776 0 0.9996496438980103 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.5 -0.37347567081451416 0.0 0.0 1.0 0.1265990138053894 0.12659911811351776 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 0.5 0.0 1.0 -0.0 0.8734008073806763 0.12659919261932373 0 0.9996496438980103 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 0.4749999940395355 0.0 1.0 -0.0 0.12659895420074463 0.12659895420074463 0 0.9996496438980103 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 0.5 0.0 1.0 -0.0 0.12659895420074463 0.12659895420074463 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.5 0.37347567081451416 0.37347567081451416 0.0 0.0 -1.0 0.8734009265899658 0.8734009265899658 0 0.9996302723884583 0 0.0 0 0.0 0 0.0 -0.4749999940395355 -0.37347567081451416 0.37347567081451416 0.0 0.0 -1.0 0.8734009861946106 0.12659910321235657 0 0.999630868434906 0 0.0 0 0.0 0 0.0 -0.5 -0.37347567081451416 0.37347567081451416 0.0 0.0 -1.0 0.8734009861946106 0.12659910321235657 0 0.999630868434906 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.5 -0.37347567081451416 -1.0 0.0 -0.0 0.12659898400306702 0.1265992969274521 0 0.9997465014457703 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.4749999940395355 0.37347567081451416 -1.0 0.0 -0.0 0.12659908831119537 0.8734010457992554 0 0.9997465014457703 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.5 0.37347567081451416 -1.0 0.0 -0.0 0.12659908831119537 0.8734010457992554 0 0.9997465014457703 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 0.5 -1.0 0.0 -0.0 0.8734008073806763 0.8734009265899658 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 0.4749999940395355 -1.0 0.0 -0.0 0.8734008073806763 0.12659919261932373 0 0.9996310472488403 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 0.5 -1.0 0.0 -0.0 0.8734008073806763 0.12659919261932373 0 0.9996309876441956 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.5 -0.37347567081451416 0.0 0.0 1.0 0.8734006881713867 0.1265990436077118 0 0.9997465014457703 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.4749999940395355 -0.37347567081451416 0.0 0.0 1.0 0.12659898400306702 0.1265992969274521 0 0.9997465014457703 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.5 -0.37347567081451416 0.0 0.0 1.0 0.12659898400306702 0.1265992969274521 0 0.9997465014457703 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 0.0 1.0 -0.0 0.999899685382843 9.997999586630613e-05 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.5 -0.37347567081451416 0.0 1.0 -0.0 0.12659898400306702 0.1265992969274521 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 0.0 1.0 -0.0 9.997999586630613e-05 0.00010033755097538233 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 0.0 1.0 -0.0 0.9998998045921326 0.9998999238014221 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.5 -0.37347567081451416 0.0 1.0 -0.0 0.8734006881713867 0.1265990436077118 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 0.0 1.0 -0.0 0.999899685382843 9.997999586630613e-05 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 0.0 1.0 -0.0 0.00010009917605202645 0.9999000430107117 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.5 0.37347567081451416 0.0 1.0 -0.0 0.8734008073806763 0.8734009265899658 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 0.0 1.0 -0.0 0.9998998045921326 0.9998999238014221 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 0.0 1.0 -0.0 9.997999586630613e-05 0.00010033755097538233 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.5 0.37347567081451416 0.0 1.0 -0.0 0.12659908831119537 0.8734010457992554 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 0.0 1.0 -0.0 0.00010009917605202645 0.9999000430107117 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 0.0 0.0 1.0 0.9998998641967773 0.9998999834060669 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 0.5 0.0 0.0 1.0 0.8734008073806763 0.12659919261932373 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 0.0 0.0 1.0 0.9998998641967773 0.00010019540786743164 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 0.0 0.0 1.0 9.995698928833008e-05 0.9998998641967773 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 0.5 0.0 0.0 1.0 0.8734008073806763 0.8734009265899658 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 0.0 0.0 1.0 0.9998998641967773 0.9998999834060669 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 0.0 0.0 1.0 9.995698928833008e-05 9.995698928833008e-05 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 0.5 0.0 0.0 1.0 0.12659895420074463 0.8734009265899658 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 0.0 0.0 1.0 9.995698928833008e-05 0.9998998641967773 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 0.0 0.0 1.0 0.9998998641967773 0.00010019540786743164 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 0.5 0.0 0.0 1.0 0.12659895420074463 0.12659895420074463 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 0.0 0.0 1.0 9.995698928833008e-05 9.995698928833008e-05 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 -1.0 0.0 -0.0 0.9998999238014221 0.9998999238014221 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 -0.5 -0.37347567081451416 0.37347567081451416 -1.0 0.0 -0.0 0.8734009861946106 0.12659910321235657 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 -1.0 0.0 -0.0 0.9999000430107117 0.00010009918332798406 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 -1.0 0.0 -0.0 9.997999586630613e-05 0.9998998045921326 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 -0.5 0.37347567081451416 0.37347567081451416 -1.0 0.0 -0.0 0.8734009265899658 0.8734009265899658 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 -1.0 0.0 -0.0 0.9998999238014221 0.9998999238014221 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 -1.0 0.0 -0.0 0.00010006938100559637 9.997999586630613e-05 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 -0.5 0.37347567081451416 -0.37347567081451416 -1.0 0.0 -0.0 0.1265989989042282 0.8734008073806763 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 -1.0 0.0 -0.0 9.997999586630613e-05 0.9998998045921326 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 -1.0 0.0 -0.0 0.9999000430107117 0.00010009918332798406 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 -0.5 -0.37347567081451416 -0.37347567081451416 -1.0 0.0 -0.0 0.12659910321235657 0.1265990138053894 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 -1.0 0.0 -0.0 0.00010006938100559637 9.997999586630613e-05 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 0.0 -1.0 -0.0 0.9998999238014221 9.997999586630613e-05 0 0.999998927116394 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.5 -0.37347567081451416 0.0 -1.0 -0.0 0.1265990138053894 0.12659911811351776 0 0.9999988675117493 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 0.0 -1.0 -0.0 9.997999586630613e-05 0.00010009918332798406 0 0.999998927116394 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 0.0 -1.0 -0.0 0.9998999238014221 0.9999000430107117 0 0.999998927116394 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.5 -0.37347567081451416 0.0 -1.0 -0.0 0.8734009265899658 0.1265990436077118 0 0.9999988675117493 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 0.0 -1.0 -0.0 0.9998999238014221 9.997999586630613e-05 0 0.999998927116394 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 0.0 -1.0 -0.0 0.00010003958595916629 0.9999000430107117 0 0.999998927116394 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.5 0.37347567081451416 0.0 -1.0 -0.0 0.8734009265899658 0.8734009861946106 0 0.9999988675117493 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 0.0 -1.0 -0.0 0.9998999238014221 0.9999000430107117 0 0.999998927116394 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 0.0 -1.0 -0.0 9.997999586630613e-05 0.00010009918332798406 0 0.999998927116394 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.5 0.37347567081451416 0.0 -1.0 -0.0 0.1265990436077118 0.8734010457992554 0 0.9999988675117493 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 0.0 -1.0 -0.0 0.00010003958595916629 0.9999000430107117 0 0.999998927116394 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 1.0 0.0 -0.0 0.00010006938100559637 9.997999586630613e-05 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 0.5 -0.37347567081451416 -0.37347567081451416 1.0 0.0 -0.0 0.1265990138053894 0.8734008073806763 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 1.0 0.0 -0.0 9.997999586630613e-05 0.9998998045921326 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 1.0 0.0 -0.0 0.9998999238014221 0.00010012897837441415 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 0.5 0.37347567081451416 -0.37347567081451416 1.0 0.0 -0.0 0.12659907341003418 0.1265990138053894 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 1.0 0.0 -0.0 0.00010006938100559637 9.997999586630613e-05 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 1.0 0.0 -0.0 0.9998999238014221 0.9999000430107117 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 0.5 0.37347567081451416 0.37347567081451416 1.0 0.0 -0.0 0.8734009265899658 0.12659911811351776 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 1.0 0.0 -0.0 0.9998999238014221 0.00010012897837441415 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 1.0 0.0 -0.0 9.997999586630613e-05 0.9998998045921326 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 0.5 -0.37347567081451416 0.37347567081451416 1.0 0.0 -0.0 0.8734009265899658 0.8734010457992554 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 1.0 0.0 -0.0 0.9998999238014221 0.9999000430107117 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 0.0 0.0 -1.0 0.9998999238014221 0.9998999238014221 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 -0.5 0.0 0.0 -1.0 0.8734009861946106 0.12659910321235657 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 0.0 0.0 -1.0 0.9999000430107117 0.00010009918332798406 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 0.0 0.0 -1.0 9.997999586630613e-05 0.9998998045921326 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 -0.5 0.0 0.0 -1.0 0.8734009265899658 0.8734009265899658 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 0.0 0.0 -1.0 0.9998999238014221 0.9998999238014221 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 0.0 0.0 -1.0 0.00010006938100559637 9.997999586630613e-05 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 -0.5 0.0 0.0 -1.0 0.1265989989042282 0.8734008073806763 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 0.0 0.0 -1.0 9.997999586630613e-05 0.9998998045921326 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 0.0 0.0 -1.0 0.9999000430107117 0.00010009918332798406 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 -0.5 0.0 0.0 -1.0 0.12659910321235657 0.1265990138053894 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 0.0 0.0 -1.0 0.00010006938100559637 9.997999586630613e-05 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.4749999940395355 -0.37347567081451416 0.0 1.0 -0.0 0.8734006881713867 0.1265990436077118 0 1.0 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.4749999940395355 0.37347567081451416 0.0 1.0 -0.0 0.12659908831119537 0.8734010457992554 0 1.0 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.4749999940395355 -0.37347567081451416 0.0 1.0 -0.0 0.12659898400306702 0.1265992969274521 0 1.0 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 0.4749999940395355 0.0 0.0 1.0 0.8734008073806763 0.8734009265899658 0 1.0 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 0.4749999940395355 0.0 0.0 1.0 0.12659895420074463 0.12659895420074463 0 1.0 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 0.4749999940395355 0.0 0.0 1.0 0.8734008073806763 0.12659919261932373 0 1.0 0 0.0 0 0.0 0 0.0 -0.4749999940395355 0.37347567081451416 0.37347567081451416 -1.0 0.0 -0.0 0.8734009265899658 0.8734009265899658 0 1.0 0 0.0 0 0.0 0 0.0 -0.4749999940395355 -0.37347567081451416 -0.37347567081451416 -1.0 0.0 -0.0 0.12659910321235657 0.1265990138053894 0 1.0 0 0.0 0 0.0 0 0.0 -0.4749999940395355 -0.37347567081451416 0.37347567081451416 -1.0 0.0 -0.0 0.8734009861946106 0.12659910321235657 0 1.0 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.4749999940395355 -0.37347567081451416 0.0 -1.0 -0.0 0.8734009265899658 0.1265990436077118 0 1.0 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.4749999940395355 0.37347567081451416 0.0 -1.0 -0.0 0.1265990436077118 0.8734010457992554 0 1.0 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.4749999940395355 -0.37347567081451416 0.0 -1.0 -0.0 0.1265990138053894 0.12659911811351776 0 1.0 0 0.0 0 0.0 0 0.0 0.4749999940395355 0.37347567081451416 -0.37347567081451416 1.0 0.0 -0.0 0.12659907341003418 0.1265990138053894 0 1.0 0 0.0 0 0.0 0 0.0 0.4749999940395355 -0.37347567081451416 0.37347567081451416 1.0 0.0 -0.0 0.8734009265899658 0.8734010457992554 0 1.0 0 0.0 0 0.0 0 0.0 0.4749999940395355 -0.37347567081451416 -0.37347567081451416 1.0 0.0 -0.0 0.1265990138053894 0.8734008073806763 0 1.0 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 -0.4749999940395355 0.0 0.0 -1.0 0.8734009265899658 0.8734009265899658 0 1.0 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 -0.4749999940395355 0.0 0.0 -1.0 0.12659910321235657 0.1265990138053894 0 1.0 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 -0.4749999940395355 0.0 0.0 -1.0 0.8734009861946106 0.12659910321235657 0 1.0 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.5 0.37347567081451416 1.0 0.0 -0.0 0.8734008073806763 0.8734009265899658 0 0.9997466206550598 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.4749999940395355 -0.37347567081451416 1.0 0.0 -0.0 0.8734006881713867 0.1265990436077118 0 0.9997466206550598 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.5 -0.37347567081451416 1.0 0.0 -0.0 0.8734006881713867 0.1265990436077118 0 0.9997466206550598 0 0.0 0 0.0 0 0.0 -0.5 -0.37347567081451416 0.37347567081451416 0.0 1.0 -0.0 0.8734009861946106 0.12659910321235657 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.4749999940395355 -0.37347567081451416 -0.37347567081451416 0.0 1.0 -0.0 0.12659910321235657 0.1265990138053894 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.5 -0.37347567081451416 -0.37347567081451416 0.0 1.0 -0.0 0.12659910321235657 0.1265990138053894 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.5 0.37347567081451416 -0.37347567081451416 0.0 0.0 1.0 0.12659907341003418 0.1265990138053894 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 0.4749999940395355 -0.37347567081451416 -0.37347567081451416 0.0 0.0 1.0 0.1265990138053894 0.8734008073806763 0 0.9996310472488403 0 0.0 0 0.0 0 0.0 0.5 -0.37347567081451416 -0.37347567081451416 0.0 0.0 1.0 0.1265990138053894 0.8734008073806763 0 0.9996309876441956 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 0.5 0.0 -1.0 -0.0 0.12659895420074463 0.8734009265899658 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 0.4749999940395355 0.0 -1.0 -0.0 0.8734008073806763 0.8734009265899658 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 0.5 0.0 -1.0 -0.0 0.8734008073806763 0.8734009265899658 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.5 -0.37347567081451416 1.0 0.0 -0.0 0.1265990138053894 0.12659911811351776 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.4749999940395355 0.37347567081451416 1.0 0.0 -0.0 0.1265990436077118 0.8734010457992554 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.5 0.37347567081451416 1.0 0.0 -0.0 0.1265990436077118 0.8734010457992554 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 -0.5 1.0 0.0 -0.0 0.8734009265899658 0.8734009265899658 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 -0.4749999940395355 1.0 0.0 -0.0 0.8734009861946106 0.12659910321235657 0 0.9996310472488403 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 -0.5 1.0 0.0 -0.0 0.8734009861946106 0.12659910321235657 0 0.9996309876441956 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.5 0.37347567081451416 0.0 0.0 -1.0 0.12659908831119537 0.8734010457992554 0 0.9997466206550598 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.4749999940395355 0.37347567081451416 0.0 0.0 -1.0 0.8734008073806763 0.8734009265899658 0 0.9997466206550598 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.5 0.37347567081451416 0.0 0.0 -1.0 0.8734008073806763 0.8734009265899658 0 0.9997466206550598 0 0.0 0 0.0 0 0.0 -0.5 0.37347567081451416 -0.37347567081451416 0.0 -1.0 -0.0 0.1265989989042282 0.8734008073806763 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 -0.4749999940395355 0.37347567081451416 0.37347567081451416 0.0 -1.0 -0.0 0.8734009265899658 0.8734009265899658 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 -0.5 0.37347567081451416 0.37347567081451416 0.0 -1.0 -0.0 0.8734009265899658 0.8734009265899658 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 0.5 -0.37347567081451416 -0.37347567081451416 0.0 1.0 -0.0 0.1265990138053894 0.8734008073806763 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.4749999940395355 -0.37347567081451416 0.37347567081451416 0.0 1.0 -0.0 0.8734009265899658 0.8734010457992554 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.5 -0.37347567081451416 0.37347567081451416 0.0 1.0 -0.0 0.8734009265899658 0.8734010457992554 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 0.5 1.0 0.0 -0.0 0.12659895420074463 0.12659895420074463 0 0.9996309876441956 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 0.4749999940395355 1.0 0.0 -0.0 0.12659895420074463 0.8734009265899658 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 0.5 1.0 0.0 -0.0 0.12659895420074463 0.8734009265899658 0 0.9996303915977478 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.5 0.37347567081451416 -1.0 0.0 -0.0 0.8734009265899658 0.8734009861946106 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.4749999940395355 -0.37347567081451416 -1.0 0.0 -0.0 0.8734009265899658 0.1265990436077118 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.5 -0.37347567081451416 -1.0 0.0 -0.0 0.8734009265899658 0.1265990436077118 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 -0.5 0.0 1.0 -0.0 0.8734009861946106 0.12659910321235657 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 -0.4749999940395355 0.0 1.0 -0.0 0.12659910321235657 0.1265990138053894 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 -0.5 0.0 1.0 -0.0 0.12659910321235657 0.1265990138053894 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.5 -0.37347567081451416 -0.37347567081451416 0.0 0.0 1.0 0.12659910321235657 0.1265990138053894 0 0.9996309876441956 0 0.0 0 0.0 0 0.0 -0.4749999940395355 0.37347567081451416 -0.37347567081451416 0.0 0.0 1.0 0.1265989989042282 0.8734008073806763 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 -0.5 0.37347567081451416 -0.37347567081451416 0.0 0.0 1.0 0.1265989989042282 0.8734008073806763 0 0.9996303915977478 0 0.0 0 0.0 0 0.0 0.5 0.37347567081451416 0.37347567081451416 0.0 -1.0 -0.0 0.8734009265899658 0.12659911811351776 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 0.4749999940395355 0.37347567081451416 -0.37347567081451416 0.0 -1.0 -0.0 0.12659907341003418 0.1265990138053894 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 0.5 0.37347567081451416 -0.37347567081451416 0.0 -1.0 -0.0 0.12659907341003418 0.1265990138053894 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.5 0.37347567081451416 0.0 0.0 -1.0 0.1265990436077118 0.8734010457992554 0 0.9996495246887207 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.4749999940395355 0.37347567081451416 0.0 0.0 -1.0 0.8734009265899658 0.8734009861946106 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.5 0.37347567081451416 0.0 0.0 -1.0 0.8734009265899658 0.8734009861946106 0 0.9996495246887207 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 -0.5 0.0 -1.0 -0.0 0.1265989989042282 0.8734008073806763 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 -0.4749999940395355 0.0 -1.0 -0.0 0.8734009265899658 0.8734009265899658 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 -0.5 0.0 -1.0 -0.0 0.8734009265899658 0.8734009265899658 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 0.5 -0.37347567081451416 0.37347567081451416 0.0 0.0 -1.0 0.8734009265899658 0.8734010457992554 0 0.9996309876441956 0 0.0 0 0.0 0 0.0 0.4749999940395355 0.37347567081451416 0.37347567081451416 0.0 0.0 -1.0 0.8734009265899658 0.12659911811351776 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 0.5 0.37347567081451416 0.37347567081451416 0.0 0.0 -1.0 0.8734009265899658 0.12659911811351776 0 0.9996303915977478 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 -0.5 -1.0 0.0 -0.0 0.12659910321235657 0.1265990138053894 0 0.9996309876441956 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 -0.4749999940395355 -1.0 0.0 -0.0 0.1265989989042282 0.8734008073806763 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 -0.5 -1.0 0.0 -0.0 0.1265989989042282 0.8734008073806763 0 0.9996303915977478 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.5 -0.37347567081451416 0.0 0.0 1.0 0.8734009265899658 0.1265990436077118 0 0.9996496438980103 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.4749999940395355 -0.37347567081451416 0.0 0.0 1.0 0.8734009265899658 0.1265990436077118 0 0.9996496438980103 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.4749999940395355 -0.37347567081451416 0.0 0.0 1.0 0.1265990138053894 0.12659911811351776 0 0.9996496438980103 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 0.5 0.0 1.0 -0.0 0.8734008073806763 0.12659919261932373 0 0.9996496438980103 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 0.4749999940395355 0.0 1.0 -0.0 0.8734008073806763 0.12659919261932373 0 0.9996496438980103 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 0.4749999940395355 0.0 1.0 -0.0 0.12659895420074463 0.12659895420074463 0 0.9996496438980103 0 0.0 0 0.0 0 0.0 -0.5 0.37347567081451416 0.37347567081451416 0.0 0.0 -1.0 0.8734009265899658 0.8734009265899658 0 0.9996302723884583 0 0.0 0 0.0 0 0.0 -0.4749999940395355 0.37347567081451416 0.37347567081451416 0.0 0.0 -1.0 0.8734009265899658 0.8734009265899658 0 0.9996302723884583 0 0.0 0 0.0 0 0.0 -0.4749999940395355 -0.37347567081451416 0.37347567081451416 0.0 0.0 -1.0 0.8734009861946106 0.12659910321235657 0 0.999630868434906 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.5 -0.37347567081451416 -1.0 0.0 -0.0 0.12659898400306702 0.1265992969274521 0 0.9997465014457703 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.4749999940395355 -0.37347567081451416 -1.0 0.0 -0.0 0.12659898400306702 0.1265992969274521 0 0.9997465014457703 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.4749999940395355 0.37347567081451416 -1.0 0.0 -0.0 0.12659908831119537 0.8734010457992554 0 0.9997465014457703 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 0.5 -1.0 0.0 -0.0 0.8734008073806763 0.8734009265899658 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 0.4749999940395355 -1.0 0.0 -0.0 0.8734008073806763 0.8734009265899658 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 0.4749999940395355 -1.0 0.0 -0.0 0.8734008073806763 0.12659919261932373 0 0.9996310472488403 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.5 -0.37347567081451416 0.0 0.0 1.0 0.8734006881713867 0.1265990436077118 0 0.9997465014457703 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.4749999940395355 -0.37347567081451416 0.0 0.0 1.0 0.8734006881713867 0.1265990436077118 0 0.9997465014457703 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.4749999940395355 -0.37347567081451416 0.0 0.0 1.0 0.12659898400306702 0.1265992969274521 0 0.9997465014457703 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 0.0 1.0 -0.0 0.999899685382843 9.997999586630613e-05 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.5 -0.37347567081451416 0.0 1.0 -0.0 0.8734006881713867 0.1265990436077118 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.5 -0.37347567081451416 0.0 1.0 -0.0 0.12659898400306702 0.1265992969274521 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 0.0 1.0 -0.0 0.9998998045921326 0.9998999238014221 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.5 0.37347567081451416 0.0 1.0 -0.0 0.8734008073806763 0.8734009265899658 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.5 -0.37347567081451416 0.0 1.0 -0.0 0.8734006881713867 0.1265990436077118 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 0.0 1.0 -0.0 0.00010009917605202645 0.9999000430107117 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.5 0.37347567081451416 0.0 1.0 -0.0 0.12659908831119537 0.8734010457992554 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.5 0.37347567081451416 0.0 1.0 -0.0 0.8734008073806763 0.8734009265899658 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 0.0 1.0 -0.0 9.997999586630613e-05 0.00010033755097538233 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.5 -0.37347567081451416 0.0 1.0 -0.0 0.12659898400306702 0.1265992969274521 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.5 0.37347567081451416 0.0 1.0 -0.0 0.12659908831119537 0.8734010457992554 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 0.0 0.0 1.0 0.9998998641967773 0.9998999834060669 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 0.5 0.0 0.0 1.0 0.8734008073806763 0.8734009265899658 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 0.5 0.0 0.0 1.0 0.8734008073806763 0.12659919261932373 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 0.0 0.0 1.0 9.995698928833008e-05 0.9998998641967773 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 0.5 0.0 0.0 1.0 0.12659895420074463 0.8734009265899658 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 0.5 0.0 0.0 1.0 0.8734008073806763 0.8734009265899658 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 0.0 0.0 1.0 9.995698928833008e-05 9.995698928833008e-05 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 0.5 0.0 0.0 1.0 0.12659895420074463 0.12659895420074463 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 0.5 0.0 0.0 1.0 0.12659895420074463 0.8734009265899658 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 0.0 0.0 1.0 0.9998998641967773 0.00010019540786743164 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 0.5 0.0 0.0 1.0 0.8734008073806763 0.12659919261932373 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 0.5 0.0 0.0 1.0 0.12659895420074463 0.12659895420074463 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 -1.0 0.0 -0.0 0.9998999238014221 0.9998999238014221 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 -0.5 0.37347567081451416 0.37347567081451416 -1.0 0.0 -0.0 0.8734009265899658 0.8734009265899658 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 -0.5 -0.37347567081451416 0.37347567081451416 -1.0 0.0 -0.0 0.8734009861946106 0.12659910321235657 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 -1.0 0.0 -0.0 9.997999586630613e-05 0.9998998045921326 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 -0.5 0.37347567081451416 -0.37347567081451416 -1.0 0.0 -0.0 0.1265989989042282 0.8734008073806763 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 -0.5 0.37347567081451416 0.37347567081451416 -1.0 0.0 -0.0 0.8734009265899658 0.8734009265899658 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 -1.0 0.0 -0.0 0.00010006938100559637 9.997999586630613e-05 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 -0.5 -0.37347567081451416 -0.37347567081451416 -1.0 0.0 -0.0 0.12659910321235657 0.1265990138053894 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 -0.5 0.37347567081451416 -0.37347567081451416 -1.0 0.0 -0.0 0.1265989989042282 0.8734008073806763 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 -1.0 0.0 -0.0 0.9999000430107117 0.00010009918332798406 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 -0.5 -0.37347567081451416 0.37347567081451416 -1.0 0.0 -0.0 0.8734009861946106 0.12659910321235657 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 -0.5 -0.37347567081451416 -0.37347567081451416 -1.0 0.0 -0.0 0.12659910321235657 0.1265990138053894 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 0.0 -1.0 -0.0 0.9998999238014221 9.997999586630613e-05 0 0.999998927116394 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.5 -0.37347567081451416 0.0 -1.0 -0.0 0.8734009265899658 0.1265990436077118 0 0.9999988675117493 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.5 -0.37347567081451416 0.0 -1.0 -0.0 0.1265990138053894 0.12659911811351776 0 0.9999988675117493 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 0.0 -1.0 -0.0 0.9998999238014221 0.9999000430107117 0 0.999998927116394 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.5 0.37347567081451416 0.0 -1.0 -0.0 0.8734009265899658 0.8734009861946106 0 0.9999988675117493 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.5 -0.37347567081451416 0.0 -1.0 -0.0 0.8734009265899658 0.1265990436077118 0 0.9999988675117493 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 0.0 -1.0 -0.0 0.00010003958595916629 0.9999000430107117 0 0.999998927116394 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.5 0.37347567081451416 0.0 -1.0 -0.0 0.1265990436077118 0.8734010457992554 0 0.9999988675117493 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.5 0.37347567081451416 0.0 -1.0 -0.0 0.8734009265899658 0.8734009861946106 0 0.9999988675117493 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 0.0 -1.0 -0.0 9.997999586630613e-05 0.00010009918332798406 0 0.999998927116394 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.5 -0.37347567081451416 0.0 -1.0 -0.0 0.1265990138053894 0.12659911811351776 0 0.9999988675117493 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.5 0.37347567081451416 0.0 -1.0 -0.0 0.1265990436077118 0.8734010457992554 0 0.9999988675117493 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 1.0 0.0 -0.0 0.00010006938100559637 9.997999586630613e-05 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 0.5 0.37347567081451416 -0.37347567081451416 1.0 0.0 -0.0 0.12659907341003418 0.1265990138053894 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 0.5 -0.37347567081451416 -0.37347567081451416 1.0 0.0 -0.0 0.1265990138053894 0.8734008073806763 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 1.0 0.0 -0.0 0.9998999238014221 0.00010012897837441415 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 0.5 0.37347567081451416 0.37347567081451416 1.0 0.0 -0.0 0.8734009265899658 0.12659911811351776 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 0.5 0.37347567081451416 -0.37347567081451416 1.0 0.0 -0.0 0.12659907341003418 0.1265990138053894 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 1.0 0.0 -0.0 0.9998999238014221 0.9999000430107117 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 0.5 -0.37347567081451416 0.37347567081451416 1.0 0.0 -0.0 0.8734009265899658 0.8734010457992554 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 0.5 0.37347567081451416 0.37347567081451416 1.0 0.0 -0.0 0.8734009265899658 0.12659911811351776 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 1.0 0.0 -0.0 9.997999586630613e-05 0.9998998045921326 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 0.5 -0.37347567081451416 -0.37347567081451416 1.0 0.0 -0.0 0.1265990138053894 0.8734008073806763 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 0.5 -0.37347567081451416 0.37347567081451416 1.0 0.0 -0.0 0.8734009265899658 0.8734010457992554 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 0.0 0.0 -1.0 0.9998999238014221 0.9998999238014221 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 -0.5 0.0 0.0 -1.0 0.8734009265899658 0.8734009265899658 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 -0.5 0.0 0.0 -1.0 0.8734009861946106 0.12659910321235657 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 0.0 0.0 -1.0 9.997999586630613e-05 0.9998998045921326 0 0.9999992847442627 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 -0.5 0.0 0.0 -1.0 0.1265989989042282 0.8734008073806763 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 -0.5 0.0 0.0 -1.0 0.8734009265899658 0.8734009265899658 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 0.0 0.0 -1.0 0.00010006938100559637 9.997999586630613e-05 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 -0.5 0.0 0.0 -1.0 0.12659910321235657 0.1265990138053894 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 -0.5 0.0 0.0 -1.0 0.1265989989042282 0.8734008073806763 0 0.9999992251396179 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 0.0 0.0 -1.0 0.9999000430107117 0.00010009918332798406 0 0.9999991655349731 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 -0.5 0.0 0.0 -1.0 0.8734009861946106 0.12659910321235657 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 -0.5 0.0 0.0 -1.0 0.12659910321235657 0.1265990138053894 0 0.9999991059303284 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.4749999940395355 -0.37347567081451416 0.0 1.0 -0.0 0.8734006881713867 0.1265990436077118 0 1.0 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.4749999940395355 0.37347567081451416 0.0 1.0 -0.0 0.8734008073806763 0.8734009265899658 0 1.0 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.4749999940395355 0.37347567081451416 0.0 1.0 -0.0 0.12659908831119537 0.8734010457992554 0 1.0 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 0.4749999940395355 0.0 0.0 1.0 0.8734008073806763 0.8734009265899658 0 1.0 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 0.4749999940395355 0.0 0.0 1.0 0.12659895420074463 0.8734009265899658 0 1.0 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 0.4749999940395355 0.0 0.0 1.0 0.12659895420074463 0.12659895420074463 0 1.0 0 0.0 0 0.0 0 0.0 -0.4749999940395355 0.37347567081451416 0.37347567081451416 -1.0 0.0 -0.0 0.8734009265899658 0.8734009265899658 0 1.0 0 0.0 0 0.0 0 0.0 -0.4749999940395355 0.37347567081451416 -0.37347567081451416 -1.0 0.0 -0.0 0.1265989989042282 0.8734008073806763 0 1.0 0 0.0 0 0.0 0 0.0 -0.4749999940395355 -0.37347567081451416 -0.37347567081451416 -1.0 0.0 -0.0 0.12659910321235657 0.1265990138053894 0 1.0 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.4749999940395355 -0.37347567081451416 0.0 -1.0 -0.0 0.8734009265899658 0.1265990436077118 0 1.0 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.4749999940395355 0.37347567081451416 0.0 -1.0 -0.0 0.8734009265899658 0.8734009861946106 0 1.0 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.4749999940395355 0.37347567081451416 0.0 -1.0 -0.0 0.1265990436077118 0.8734010457992554 0 1.0 0 0.0 0 0.0 0 0.0 0.4749999940395355 0.37347567081451416 -0.37347567081451416 1.0 0.0 -0.0 0.12659907341003418 0.1265990138053894 0 1.0 0 0.0 0 0.0 0 0.0 0.4749999940395355 0.37347567081451416 0.37347567081451416 1.0 0.0 -0.0 0.8734009265899658 0.12659911811351776 0 1.0 0 0.0 0 0.0 0 0.0 0.4749999940395355 -0.37347567081451416 0.37347567081451416 1.0 0.0 -0.0 0.8734009265899658 0.8734010457992554 0 1.0 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 -0.4749999940395355 0.0 0.0 -1.0 0.8734009265899658 0.8734009265899658 0 1.0 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 -0.4749999940395355 0.0 0.0 -1.0 0.1265989989042282 0.8734008073806763 0 1.0 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 -0.4749999940395355 0.0 0.0 -1.0 0.12659910321235657 0.1265990138053894 0 1.0 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.5 0.37347567081451416 1.0 0.0 -0.0 0.8734008073806763 0.8734009265899658 0 0.9997466206550598 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.4749999940395355 0.37347567081451416 1.0 0.0 -0.0 0.8734008073806763 0.8734009265899658 0 0.9997466206550598 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.4749999940395355 -0.37347567081451416 1.0 0.0 -0.0 0.8734006881713867 0.1265990436077118 0 0.9997466206550598 0 0.0 0 0.0 0 0.0 -0.5 -0.37347567081451416 0.37347567081451416 0.0 1.0 -0.0 0.8734009861946106 0.12659910321235657 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.4749999940395355 -0.37347567081451416 0.37347567081451416 0.0 1.0 -0.0 0.8734009861946106 0.12659910321235657 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.4749999940395355 -0.37347567081451416 -0.37347567081451416 0.0 1.0 -0.0 0.12659910321235657 0.1265990138053894 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.5 0.37347567081451416 -0.37347567081451416 0.0 0.0 1.0 0.12659907341003418 0.1265990138053894 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 0.4749999940395355 0.37347567081451416 -0.37347567081451416 0.0 0.0 1.0 0.12659907341003418 0.1265990138053894 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 0.4749999940395355 -0.37347567081451416 -0.37347567081451416 0.0 0.0 1.0 0.1265990138053894 0.8734008073806763 0 0.9996310472488403 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 0.5 0.0 -1.0 -0.0 0.12659895420074463 0.8734009265899658 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 0.4749999940395355 0.0 -1.0 -0.0 0.12659895420074463 0.8734009265899658 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 0.4749999940395355 0.0 -1.0 -0.0 0.8734008073806763 0.8734009265899658 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.5 -0.37347567081451416 1.0 0.0 -0.0 0.1265990138053894 0.12659911811351776 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.4749999940395355 -0.37347567081451416 1.0 0.0 -0.0 0.1265990138053894 0.12659911811351776 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.4749999940395355 0.37347567081451416 1.0 0.0 -0.0 0.1265990436077118 0.8734010457992554 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 -0.5 1.0 0.0 -0.0 0.8734009265899658 0.8734009265899658 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 -0.4749999940395355 1.0 0.0 -0.0 0.8734009265899658 0.8734009265899658 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 -0.4749999940395355 1.0 0.0 -0.0 0.8734009861946106 0.12659910321235657 0 0.9996310472488403 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.5 0.37347567081451416 0.0 0.0 -1.0 0.12659908831119537 0.8734010457992554 0 0.9997466206550598 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.4749999940395355 0.37347567081451416 0.0 0.0 -1.0 0.12659908831119537 0.8734010457992554 0 0.9997466206550598 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.4749999940395355 0.37347567081451416 0.0 0.0 -1.0 0.8734008073806763 0.8734009265899658 0 0.9997466206550598 0 0.0 0 0.0 0 0.0 -0.5 0.37347567081451416 -0.37347567081451416 0.0 -1.0 -0.0 0.1265989989042282 0.8734008073806763 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 -0.4749999940395355 0.37347567081451416 -0.37347567081451416 0.0 -1.0 -0.0 0.1265989989042282 0.8734008073806763 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 -0.4749999940395355 0.37347567081451416 0.37347567081451416 0.0 -1.0 -0.0 0.8734009265899658 0.8734009265899658 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 0.5 -0.37347567081451416 -0.37347567081451416 0.0 1.0 -0.0 0.1265990138053894 0.8734008073806763 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.4749999940395355 -0.37347567081451416 -0.37347567081451416 0.0 1.0 -0.0 0.1265990138053894 0.8734008073806763 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.4749999940395355 -0.37347567081451416 0.37347567081451416 0.0 1.0 -0.0 0.8734009265899658 0.8734010457992554 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 0.5 1.0 0.0 -0.0 0.12659895420074463 0.12659895420074463 0 0.9996309876441956 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 0.4749999940395355 1.0 0.0 -0.0 0.12659895420074463 0.12659895420074463 0 0.9996309876441956 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 0.4749999940395355 1.0 0.0 -0.0 0.12659895420074463 0.8734009265899658 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.5 0.37347567081451416 -1.0 0.0 -0.0 0.8734009265899658 0.8734009861946106 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.4749999940395355 0.37347567081451416 -1.0 0.0 -0.0 0.8734009265899658 0.8734009861946106 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.4749999940395355 -0.37347567081451416 -1.0 0.0 -0.0 0.8734009265899658 0.1265990436077118 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 -0.5 0.0 1.0 -0.0 0.8734009861946106 0.12659910321235657 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.37347567081451416 -0.4749999940395355 0.0 1.0 -0.0 0.8734009861946106 0.12659910321235657 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 -0.4749999940395355 0.0 1.0 -0.0 0.12659910321235657 0.1265990138053894 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 -0.5 -0.37347567081451416 -0.37347567081451416 0.0 0.0 1.0 0.12659910321235657 0.1265990138053894 0 0.9996309876441956 0 0.0 0 0.0 0 0.0 -0.4749999940395355 -0.37347567081451416 -0.37347567081451416 0.0 0.0 1.0 0.12659910321235657 0.1265990138053894 0 0.9996309876441956 0 0.0 0 0.0 0 0.0 -0.4749999940395355 0.37347567081451416 -0.37347567081451416 0.0 0.0 1.0 0.1265989989042282 0.8734008073806763 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 0.5 0.37347567081451416 0.37347567081451416 0.0 -1.0 -0.0 0.8734009265899658 0.12659911811351776 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 0.4749999940395355 0.37347567081451416 0.37347567081451416 0.0 -1.0 -0.0 0.8734009265899658 0.12659911811351776 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 0.4749999940395355 0.37347567081451416 -0.37347567081451416 0.0 -1.0 -0.0 0.12659907341003418 0.1265990138053894 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.5 0.37347567081451416 0.0 0.0 -1.0 0.1265990436077118 0.8734010457992554 0 0.9996495246887207 0 0.0 0 0.0 0 0.0 -0.37347567081451416 -0.4749999940395355 0.37347567081451416 0.0 0.0 -1.0 0.1265990436077118 0.8734010457992554 0 0.9996495246887207 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.4749999940395355 0.37347567081451416 0.0 0.0 -1.0 0.8734009265899658 0.8734009861946106 0 0.9996495842933655 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 -0.5 0.0 -1.0 -0.0 0.1265989989042282 0.8734008073806763 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 -0.4749999940395355 0.0 -1.0 -0.0 0.1265989989042282 0.8734008073806763 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 -0.37347567081451416 0.37347567081451416 -0.4749999940395355 0.0 -1.0 -0.0 0.8734009265899658 0.8734009265899658 0 0.9999428391456604 0 0.0 0 0.0 0 0.0 0.5 -0.37347567081451416 0.37347567081451416 0.0 0.0 -1.0 0.8734009265899658 0.8734010457992554 0 0.9996309876441956 0 0.0 0 0.0 0 0.0 0.4749999940395355 -0.37347567081451416 0.37347567081451416 0.0 0.0 -1.0 0.8734009265899658 0.8734010457992554 0 0.9996309876441956 0 0.0 0 0.0 0 0.0 0.4749999940395355 0.37347567081451416 0.37347567081451416 0.0 0.0 -1.0 0.8734009265899658 0.12659911811351776 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 -0.5 -1.0 0.0 -0.0 0.12659910321235657 0.1265990138053894 0 0.9996309876441956 0 0.0 0 0.0 0 0.0 0.37347567081451416 -0.37347567081451416 -0.4749999940395355 -1.0 0.0 -0.0 0.12659910321235657 0.1265990138053894 0 0.9996309876441956 0 0.0 0 0.0 0 0.0 0.37347567081451416 0.37347567081451416 -0.4749999940395355 -1.0 0.0 -0.0 0.1265989989042282 0.8734008073806763 0 0.9996304512023926 0 0.0 0 0.0 0 0.0 0 1 2 0 3 4 5 0 6 7 8 0 9 10 11 0 12 13 14 0 15 16 17 0 18 19 20 0 21 22 23 0 24 25 26 0 27 28 29 0 30 31 32 0 33 34 35 0 36 37 38 0 39 40 41 0 42 43 44 0 45 46 47 0 48 49 50 0 51 52 53 0 54 55 56 0 57 58 59 0 60 61 62 0 63 64 65 0 66 67 68 0 69 70 71 0 72 73 74 0 75 76 77 0 78 79 80 0 81 82 83 0 84 85 86 0 87 88 89 0 90 91 92 0 93 94 95 0 96 97 98 0 99 100 101 0 102 103 104 0 105 106 107 0 108 109 110 0 111 112 113 0 114 115 116 0 117 118 119 0 120 121 122 0 123 124 125 0 126 127 128 0 129 130 131 0 132 133 134 0 135 136 137 0 138 139 140 0 141 142 143 0 144 145 146 0 147 148 149 0 150 151 152 0 153 154 155 0 156 157 158 0 159 160 161 0 162 163 164 0 165 166 167 0 168 169 170 0 171 172 173 0 174 175 176 0 177 178 179 0 180 181 182 0 183 184 185 0 186 187 188 0 189 190 191 0 192 193 194 0 195 196 197 0 198 199 200 0 201 202 203 0 204 205 206 0 207 208 209 0 210 211 212 0 213 214 215 0 216 217 218 0 219 220 221 0 222 223 224 0 225 226 227 0 228 229 230 0 231 232 233 0 234 235 236 0 237 238 239 0 240 241 242 0 243 244 245 0 246 247 248 0 249 250 251 0 252 253 254 0 255 256 257 0 258 259 260 0 261 262 263 0 264 265 266 0 267 268 269 0 270 271 272 0 273 274 275 0 276 277 278 0 279 280 281 0 282 283 284 0 285 286 287 0 288 289 290 0 291 292 293 0 294 295 296 0 297 298 299 0 300 301 302 0 303 304 305 0 306 307 308 0 309 310 311 0 312 313 314 0 315 316 317 0 318 319 320 0 321 322 323 0 Root -1 0.0 0.0 -0.0 0.0 1.0 -0.0 0.0 Root ================================================ FILE: data/models/dev/button.collmdl ================================================ box 0.0 0.25 -0.25 0.0 0.0 -0.0 0.25 0.25 0.25 ================================================ FILE: data/models/dev/button.stmdl ================================================ STMDLv1 36 12 1 1 lightmap 32 32 dev/button16x16 -0.25 0.5 -0.5 -0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.0 0.0 0.0 0.0 0.25 0.5 -1.4901161193847656e-08 0.5773491859436035 0.5773491859436035 0.5773491859436035 1.0 1.0 1.0 1.0 0.25 0.5 -0.5 0.5773491859436035 0.5773491859436035 -0.5773491859436035 1.0 0.0 1.0 0.0 0.25 0.5 -1.4901161193847656e-08 0.5773491859436035 0.5773491859436035 0.5773491859436035 0.0 0.0 0.0 0.0 -0.25 1.4901161193847656e-08 -1.4901161193847656e-08 -0.5773491859436035 -0.5773491859436035 0.5773491859436035 1.0 1.0 1.0 1.0 0.25 1.4901161193847656e-08 -1.4901161193847656e-08 0.5773491859436035 -0.5773491859436035 0.5773491859436035 1.0 0.0 1.0 0.0 -0.25 0.5 -1.4901161193847656e-08 -0.5773491859436035 0.5773491859436035 0.5773491859436035 0.0 0.0 0.0 0.0 -0.25 1.4901161193847656e-08 -0.5 -0.5773491859436035 -0.5773491859436035 -0.5773491859436035 1.0 1.0 1.0 1.0 -0.25 1.4901161193847656e-08 -1.4901161193847656e-08 -0.5773491859436035 -0.5773491859436035 0.5773491859436035 1.0 0.0 1.0 0.0 0.25 1.4901161193847656e-08 -0.5 0.5773491859436035 -0.5773491859436035 -0.5773491859436035 0.0 0.0 0.0 0.0 -0.25 1.4901161193847656e-08 -1.4901161193847656e-08 -0.5773491859436035 -0.5773491859436035 0.5773491859436035 1.0 1.0 1.0 1.0 -0.25 1.4901161193847656e-08 -0.5 -0.5773491859436035 -0.5773491859436035 -0.5773491859436035 1.0 0.0 1.0 0.0 0.25 0.5 -0.5 0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.0 0.0 0.0 0.0 0.25 1.4901161193847656e-08 -1.4901161193847656e-08 0.5773491859436035 -0.5773491859436035 0.5773491859436035 1.0 1.0 1.0 1.0 0.25 1.4901161193847656e-08 -0.5 0.5773491859436035 -0.5773491859436035 -0.5773491859436035 1.0 0.0 1.0 0.0 -0.25 0.5 -0.5 -0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.0 0.0 0.0 0.0 0.25 1.4901161193847656e-08 -0.5 0.5773491859436035 -0.5773491859436035 -0.5773491859436035 1.0 1.0 1.0 1.0 -0.25 1.4901161193847656e-08 -0.5 -0.5773491859436035 -0.5773491859436035 -0.5773491859436035 1.0 0.0 1.0 0.0 -0.25 0.5 -0.5 -0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.0 0.0 0.0 0.0 -0.25 0.5 -1.4901161193847656e-08 -0.5773491859436035 0.5773491859436035 0.5773491859436035 0.0 1.0 0.0 1.0 0.25 0.5 -1.4901161193847656e-08 0.5773491859436035 0.5773491859436035 0.5773491859436035 1.0 1.0 1.0 1.0 0.25 0.5 -1.4901161193847656e-08 0.5773491859436035 0.5773491859436035 0.5773491859436035 0.0 0.0 0.0 0.0 -0.25 0.5 -1.4901161193847656e-08 -0.5773491859436035 0.5773491859436035 0.5773491859436035 0.0 1.0 0.0 1.0 -0.25 1.4901161193847656e-08 -1.4901161193847656e-08 -0.5773491859436035 -0.5773491859436035 0.5773491859436035 1.0 1.0 1.0 1.0 -0.25 0.5 -1.4901161193847656e-08 -0.5773491859436035 0.5773491859436035 0.5773491859436035 0.0 0.0 0.0 0.0 -0.25 0.5 -0.5 -0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.0 1.0 0.0 1.0 -0.25 1.4901161193847656e-08 -0.5 -0.5773491859436035 -0.5773491859436035 -0.5773491859436035 1.0 1.0 1.0 1.0 0.25 1.4901161193847656e-08 -0.5 0.5773491859436035 -0.5773491859436035 -0.5773491859436035 0.0 0.0 0.0 0.0 0.25 1.4901161193847656e-08 -1.4901161193847656e-08 0.5773491859436035 -0.5773491859436035 0.5773491859436035 0.0 1.0 0.0 1.0 -0.25 1.4901161193847656e-08 -1.4901161193847656e-08 -0.5773491859436035 -0.5773491859436035 0.5773491859436035 1.0 1.0 1.0 1.0 0.25 0.5 -0.5 0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.0 0.0 0.0 0.0 0.25 0.5 -1.4901161193847656e-08 0.5773491859436035 0.5773491859436035 0.5773491859436035 0.0 1.0 0.0 1.0 0.25 1.4901161193847656e-08 -1.4901161193847656e-08 0.5773491859436035 -0.5773491859436035 0.5773491859436035 1.0 1.0 1.0 1.0 -0.25 0.5 -0.5 -0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.0 0.0 0.0 0.0 0.25 0.5 -0.5 0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.0 1.0 0.0 1.0 0.25 1.4901161193847656e-08 -0.5 0.5773491859436035 -0.5773491859436035 -0.5773491859436035 1.0 1.0 1.0 1.0 0 1 2 0 3 4 5 0 6 7 8 0 9 10 11 0 12 13 14 0 15 16 17 0 18 19 20 0 21 22 23 0 24 25 26 0 27 28 29 0 30 31 32 0 33 34 35 0 ================================================ FILE: data/models/dev/light.stmdl ================================================ 384 128 1 dev/light -8.237197590688083e-09 0.2567000389099121 -0.25000011920928955 0.0 0.0 -0.999969482421875 1.5 0.6521799564361572 1.5 0.6521799564361572 0.16332030296325684 0.16102918982505798 -0.16332048177719116 0.6650899052619934 -0.3395184278488159 -0.6650899052619934 1.0 0.46877843141555786 1.0 0.46877843141555786 -2.0028574354569173e-08 0.16102918982505798 -0.23096990585327148 0.0 -0.3395184278488159 -0.9405804872512817 1.5 0.4687783122062683 1.5 0.4687783122062683 -1.2577993757645345e-08 0.4334768056869507 -0.17677676677703857 0.0 0.6838282346725464 -0.729606032371521 1.0 0.6270729899406433 1.0 0.6270729899406433 0.16332030296325684 0.3523709177970886 -0.16332048177719116 0.6577959656715393 0.3667714595794678 -0.6577959656715393 0.75 0.4395729899406433 0.75 0.4395729899406433 -2.0028574354569173e-08 0.3523709177970886 -0.23096990585327148 0.0 0.3667714595794678 -0.9302957057952881 1.0 0.4395729899406433 1.0 0.4395729899406433 -8.85270345918343e-09 0.4876699447631836 -0.09567093849182129 0.0 0.9063081741333008 -0.42255929112434387 1.0 0.8145728707313538 1.0 0.8145728707313538 -3.492973377205999e-08 0.5067000389099121 -9.63994324365558e-08 0.0 1.0 -0.0 0.8750001192092896 0.9803798198699951 0.8750001192092896 0.9803798198699951 0.0676494836807251 0.4876699447631836 -0.06764960289001465 0.29880672693252563 0.9063081741333008 -0.29880672693252563 0.7500001192092896 0.8145728707313538 0.7500001192092896 0.8145728707313538 -3.54276430414302e-09 0.009099066257476807 0.14337250590324402 0.0 -0.4508804678916931 0.8925443291664124 0.0 0.5012654662132263 0.0 0.5012654662132263 -0.07545191049575806 -0.07792764902114868 0.0754517912864685 -0.65160071849823 -0.3882564902305603 0.65160071849823 -0.2500000596046448 0.5012654662132263 -0.2500000596046448 0.5012654662132263 -5.602117880698643e-09 -0.07792764902114868 0.10670498013496399 0.0 -0.3882564902305603 0.921536922454834 0.0 0.5012654662132263 0.0 0.5012654662132263 -2.0028574354569173e-08 0.3523709177970886 -0.23096990585327148 0.0 0.3667714595794678 -0.9302957057952881 1.5 0.8355814218521118 1.5 0.8355814218521118 0.17677664756774902 0.2567000389099121 -0.17677676677703857 0.7070833444595337 0.0 -0.7070833444595337 1.0 0.6521799564361572 1.0 0.6521799564361572 -8.237197590688083e-09 0.2567000389099121 -0.25000011920928955 0.0 0.0 -0.999969482421875 1.5 0.6521799564361572 1.5 0.6521799564361572 -1.2577993757645345e-08 0.4334768056869507 -0.17677676677703857 0.0 0.6838282346725464 -0.729606032371521 1.0 0.6270729899406433 1.0 0.6270729899406433 0.0676494836807251 0.4876699447631836 -0.06764960289001465 0.29880672693252563 0.9063081741333008 -0.29880672693252563 0.7500001192092896 0.8145728707313538 0.7500001192092896 0.8145728707313538 0.12499997019767761 0.4334768056869507 -0.12500008940696716 0.5159153938293457 0.6838282346725464 -0.5159153938293457 0.75 0.6270729899406433 0.75 0.6270729899406433 0.14337262511253357 0.009099066257476807 -1.2117860137550451e-07 0.8925443291664124 -0.4508804678916931 -0.0 0.5000001192092896 0.5012654662132263 0.5000001192092896 0.5012654662132263 0.07545191049575806 -0.07792764902114868 -0.07545202970504761 0.65160071849823 -0.3882564902305603 -0.65160071849823 0.7500001192092896 0.5012654662132263 0.7500001192092896 0.5012654662132263 0.10137978196144104 0.009099066257476807 -0.10137990117073059 0.6311227679252625 -0.4508804678916931 -0.6311227679252625 0.7500001192092896 0.5012654662132263 0.7500001192092896 0.5012654662132263 0.16332030296325684 0.16102918982505798 0.16332018375396729 0.6650899052619934 -0.3395184278488159 0.6650899052619934 0.2500000596046448 0.8762653470039368 0.2500000596046448 0.8762653470039368 0.14337262511253357 0.009099066257476807 -1.2117860137550451e-07 0.8925443291664124 -0.4508804678916931 -0.0 0.5000001192092896 0.5012654662132263 0.5000001192092896 0.5012654662132263 0.2309698462486267 0.16102918982505798 -1.262017548242511e-07 0.9405804872512817 -0.3395184278488159 -0.0 0.5 0.8762653470039368 0.5 0.8762653470039368 0.17677664756774902 0.2567000389099121 -0.17677676677703857 0.7070833444595337 0.0 -0.7070833444595337 1.0 0.6521799564361572 1.0 0.6521799564361572 0.2309698462486267 0.3523709177970886 -1.262017548242511e-07 0.9302957057952881 0.3667714595794678 -0.0 0.5 0.8355814218521118 0.5 0.8355814218521118 0.24999994039535522 0.2567000389099121 -1.1875117422732728e-07 1.0 0.0 -0.0 0.5 0.6521799564361572 0.5 0.6521799564361572 0.0676494836807251 0.4876699447631836 -0.06764960289001465 0.29880672693252563 0.9063081741333008 -0.29880672693252563 0.7500001192092896 0.8145728707313538 0.7500001192092896 0.8145728707313538 0.17677658796310425 0.4334768056869507 -1.262017548242511e-07 0.729606032371521 0.6838282346725464 -0.0 0.5000001192092896 0.6270729899406433 0.5000001192092896 0.6270729899406433 0.12499997019767761 0.4334768056869507 -0.12500008940696716 0.5159153938293457 0.6838282346725464 -0.5159153938293457 0.75 0.6270729899406433 0.75 0.6270729899406433 0.17677664756774902 0.2567000389099121 -0.17677676677703857 0.7070833444595337 0.0 -0.7070833444595337 1.0 0.6521799564361572 1.0 0.6521799564361572 0.2309698462486267 0.16102918982505798 -1.262017548242511e-07 0.9405804872512817 -0.3395184278488159 -0.0 0.5 0.4687783122062683 0.5 0.4687783122062683 0.16332030296325684 0.16102918982505798 -0.16332048177719116 0.6650899052619934 -0.3395184278488159 -0.6650899052619934 1.0 0.46877843141555786 1.0 0.46877843141555786 0.12499997019767761 0.4334768056869507 -0.12500008940696716 0.5159153938293457 0.6838282346725464 -0.5159153938293457 0.75 0.6270729899406433 0.75 0.6270729899406433 0.2309698462486267 0.3523709177970886 -1.262017548242511e-07 0.9302957057952881 0.3667714595794678 -0.0 0.5 0.4395729899406433 0.5 0.4395729899406433 0.16332030296325684 0.3523709177970886 -0.16332048177719116 0.6577959656715393 0.3667714595794678 -0.6577959656715393 0.75 0.4395729899406433 0.75 0.4395729899406433 0.0676494836807251 0.4876699447631836 -0.06764960289001465 0.29880672693252563 0.9063081741333008 -0.29880672693252563 0.7500001192092896 0.8145728707313538 0.7500001192092896 0.8145728707313538 -3.492973377205999e-08 0.5067000389099121 -9.63994324365558e-08 0.0 1.0 -0.0 0.6250001192092896 0.9803798198699951 0.6250001192092896 0.9803798198699951 0.09567081928253174 0.4876699447631836 -1.224764645257892e-07 0.42255929112434387 0.9063081741333008 -0.0 0.5000001192092896 0.8145728707313538 0.5000001192092896 0.8145728707313538 0.24999994039535522 0.2567000389099121 -1.1875117422732728e-07 1.0 0.0 -0.0 0.5 0.6521799564361572 0.5 0.6521799564361572 0.16332030296325684 0.3523709177970886 0.16332018375396729 0.6577959656715393 0.3667714595794678 0.6577959656715393 1.1920928955078125e-07 0.8355814218521118 1.1920928955078125e-07 0.8355814218521118 0.17677664756774902 0.2567000389099121 0.17677652835845947 0.7070833444595337 0.0 0.7070833444595337 1.1920928955078125e-07 0.6521799564361572 1.1920928955078125e-07 0.6521799564361572 0.17677658796310425 0.4334768056869507 -1.262017548242511e-07 0.729606032371521 0.6838282346725464 -0.0 0.5000001192092896 0.6270729899406433 0.5000001192092896 0.6270729899406433 0.0676494836807251 0.4876699447631836 0.06764936447143555 0.29880672693252563 0.9063081741333008 0.29880672693252563 0.25000011920928955 0.8145729899406433 0.25000011920928955 0.8145729899406433 0.12499994039535522 0.4334768056869507 0.12499985098838806 0.5159153938293457 0.6838282346725464 0.5159153938293457 0.2500000596046448 0.6270730495452881 0.2500000596046448 0.6270730495452881 2.3231692125591508e-09 0.16102918982505798 0.23096966743469238 0.0 -0.3395184278488159 0.9405804872512817 0.0 0.8762653470039368 0.0 0.8762653470039368 0.10137975215911865 0.009099066257476807 0.10137966275215149 0.6311227679252625 -0.4508804678916931 0.6311227679252625 0.25000011920928955 0.5012654662132263 0.25000011920928955 0.5012654662132263 0.16332030296325684 0.16102918982505798 0.16332018375396729 0.6650899052619934 -0.3395184278488159 0.6650899052619934 0.2500000596046448 0.8762653470039368 0.2500000596046448 0.8762653470039368 0.24999994039535522 0.2567000389099121 -1.1875117422732728e-07 1.0 0.0 -0.0 0.5 0.6521799564361572 0.5 0.6521799564361572 0.16332030296325684 0.16102918982505798 0.16332018375396729 0.6650899052619934 -0.3395184278488159 0.6650899052619934 1.1920928955078125e-07 0.4687783122062683 1.1920928955078125e-07 0.4687783122062683 0.2309698462486267 0.16102918982505798 -1.262017548242511e-07 0.9405804872512817 -0.3395184278488159 -0.0 0.5 0.4687783122062683 0.5 0.4687783122062683 0.17677658796310425 0.4334768056869507 -1.262017548242511e-07 0.729606032371521 0.6838282346725464 -0.0 0.5000001192092896 0.6270729899406433 0.5000001192092896 0.6270729899406433 0.16332030296325684 0.3523709177970886 0.16332018375396729 0.6577959656715393 0.3667714595794678 0.6577959656715393 0.2500000596046448 0.4395729899406433 0.2500000596046448 0.4395729899406433 0.2309698462486267 0.3523709177970886 -1.262017548242511e-07 0.9302957057952881 0.3667714595794678 -0.0 0.5 0.4395729899406433 0.5 0.4395729899406433 0.09567081928253174 0.4876699447631836 -1.224764645257892e-07 0.42255929112434387 0.9063081741333008 -0.0 0.5000001192092896 0.8145728707313538 0.5000001192092896 0.8145728707313538 -3.492973377205999e-08 0.5067000389099121 -9.63994324365558e-08 0.0 1.0 -0.0 0.37500011920928955 0.9803798198699951 0.37500011920928955 0.9803798198699951 0.0676494836807251 0.4876699447631836 0.06764936447143555 0.29880672693252563 0.9063081741333008 0.29880672693252563 0.25000011920928955 0.8145729899406433 0.25000011920928955 0.8145729899406433 -3.54276430414302e-09 0.009099066257476807 0.14337250590324402 0.0 -0.4508804678916931 0.8925443291664124 0.0 0.5012654662132263 0.0 0.5012654662132263 0.07545189559459686 -0.07792764902114868 0.0754517912864685 0.65160071849823 -0.3882564902305603 0.65160071849823 0.25000011920928955 0.5012654662132263 0.25000011920928955 0.5012654662132263 0.10137975215911865 0.009099066257476807 0.10137966275215149 0.6311227679252625 -0.4508804678916931 0.6311227679252625 0.25000011920928955 0.5012654662132263 0.25000011920928955 0.5012654662132263 2.3231692125591508e-09 0.16102918982505798 0.23096966743469238 0.0 -0.3395184278488159 0.9405804872512817 0.0 0.8762653470039368 0.0 0.8762653470039368 -0.10137978196144104 0.009099066257476807 0.10137966275215149 -0.6311227679252625 -0.4508804678916931 0.6311227679252625 -0.2500000596046448 0.5012654662132263 -0.2500000596046448 0.5012654662132263 -3.54276430414302e-09 0.009099066257476807 0.14337250590324402 0.0 -0.4508804678916931 0.8925443291664124 0.0 0.5012654662132263 0.0 0.5012654662132263 0.16332030296325684 0.16102918982505798 0.16332018375396729 0.6650899052619934 -0.3395184278488159 0.6650899052619934 1.1920928955078125e-07 0.4687783122062683 1.1920928955078125e-07 0.4687783122062683 -5.127413160721517e-09 0.2567000389099121 0.2499997615814209 0.0 0.0 1.0 -0.5 0.6521799564361572 -0.5 0.6521799564361572 2.3231692125591508e-09 0.16102918982505798 0.23096966743469238 0.0 -0.3395184278488159 0.9405804872512817 -0.5 0.4687783122062683 -0.5 0.4687783122062683 0.12499994039535522 0.4334768056869507 0.12499985098838806 0.5159153938293457 0.6838282346725464 0.5159153938293457 0.2500000596046448 0.6270730495452881 0.2500000596046448 0.6270730495452881 2.3231692125591508e-09 0.3523709177970886 0.23096966743469238 0.0 0.3667714595794678 0.9302957057952881 0.0 0.4395729899406433 0.0 0.4395729899406433 0.16332030296325684 0.3523709177970886 0.16332018375396729 0.6577959656715393 0.3667714595794678 0.6577959656715393 0.2500000596046448 0.4395729899406433 0.2500000596046448 0.4395729899406433 0.0676494836807251 0.4876699447631836 0.06764936447143555 0.29880672693252563 0.9063081741333008 0.29880672693252563 0.25000011920928955 0.8145729899406433 0.25000011920928955 0.8145729899406433 -3.492973377205999e-08 0.5067000389099121 -9.63994324365558e-08 0.0 1.0 -0.0 0.125 0.9803798198699951 0.125 0.9803798198699951 -5.127413160721517e-09 0.4876699447631836 0.09567070007324219 0.0 0.9063081741333008 0.42255929112434387 0.0 0.8145729899406433 0.0 0.8145729899406433 0.14337262511253357 0.009099066257476807 -1.2117860137550451e-07 0.8925443291664124 -0.4508804678916931 -0.0 0.5000001192092896 0.5012654662132263 0.5000001192092896 0.5012654662132263 0.07545189559459686 -0.07792764902114868 0.0754517912864685 0.65160071849823 -0.3882564902305603 0.65160071849823 0.25000011920928955 0.5012654662132263 0.25000011920928955 0.5012654662132263 0.10670509934425354 -0.07792764902114868 -1.2191291887120315e-07 0.921536922454834 -0.3882564902305603 -0.0 0.5000001192092896 0.5012654662132263 0.5000001192092896 0.5012654662132263 0.16332030296325684 0.3523709177970886 0.16332018375396729 0.6577959656715393 0.3667714595794678 0.6577959656715393 1.1920928955078125e-07 0.8355814218521118 1.1920928955078125e-07 0.8355814218521118 -5.127413160721517e-09 0.2567000389099121 0.2499997615814209 0.0 0.0 1.0 -0.5 0.6521799564361572 -0.5 0.6521799564361572 0.17677664756774902 0.2567000389099121 0.17677652835845947 0.7070833444595337 0.0 0.7070833444595337 1.1920928955078125e-07 0.6521799564361572 1.1920928955078125e-07 0.6521799564361572 0.12499994039535522 0.4334768056869507 0.12499985098838806 0.5159153938293457 0.6838282346725464 0.5159153938293457 0.2500000596046448 0.6270730495452881 0.2500000596046448 0.6270730495452881 -5.127413160721517e-09 0.4876699447631836 0.09567070007324219 0.0 0.9063081741333008 0.42255929112434387 0.0 0.8145729899406433 0.0 0.8145729899406433 -5.127413160721517e-09 0.4334768056869507 0.17677652835845947 0.0 0.6838282346725464 0.729606032371521 0.0 0.6270730495452881 0.0 0.6270730495452881 -5.127413160721517e-09 0.4334768056869507 0.17677652835845947 0.0 0.6838282346725464 0.729606032371521 0.0 0.6270730495452881 0.0 0.6270730495452881 -0.16332030296325684 0.3523709177970886 0.16332018375396729 -0.6577959656715393 0.3667714595794678 0.6577959656715393 -0.25 0.4395729899406433 -0.25 0.4395729899406433 2.3231692125591508e-09 0.3523709177970886 0.23096966743469238 0.0 0.3667714595794678 0.9302957057952881 0.0 0.4395729899406433 0.0 0.4395729899406433 -5.127413160721517e-09 0.4876699447631836 0.09567070007324219 0.0 0.9063081741333008 0.42255929112434387 0.0 0.8145729899406433 0.0 0.8145729899406433 -3.492973377205999e-08 0.5067000389099121 -9.63994324365558e-08 0.0 1.0 -0.0 -0.12500005960464478 0.9803798198699951 -0.12500005960464478 0.9803798198699951 -0.0676494836807251 0.4876699447631836 0.06764936447143555 -0.29880672693252563 0.9063081741333008 0.29880672693252563 -0.2500000596046448 0.8145729899406433 -0.2500000596046448 0.8145729899406433 -0.14337265491485596 0.009099066257476807 -1.2676133565037162e-07 -0.8925443291664124 -0.4508804678916931 -0.0 -0.5 0.5012654662132263 -0.5 0.5012654662132263 -0.07545191049575806 -0.07792764902114868 0.0754517912864685 -0.65160071849823 -0.3882564902305603 0.65160071849823 -0.2500000596046448 0.5012654662132263 -0.2500000596046448 0.5012654662132263 -0.10137978196144104 0.009099066257476807 0.10137966275215149 -0.6311227679252625 -0.4508804678916931 0.6311227679252625 -0.2500000596046448 0.5012654662132263 -0.2500000596046448 0.5012654662132263 -0.16332030296325684 0.16102918982505798 0.16332018375396729 -0.6650899052619934 -0.3395184278488159 0.6650899052619934 -0.25 0.8762653470039368 -0.25 0.8762653470039368 -0.14337265491485596 0.009099066257476807 -1.2676133565037162e-07 -0.8925443291664124 -0.4508804678916931 -0.0 -0.5 0.5012654662132263 -0.5 0.5012654662132263 -0.10137978196144104 0.009099066257476807 0.10137966275215149 -0.6311227679252625 -0.4508804678916931 0.6311227679252625 -0.2500000596046448 0.5012654662132263 -0.2500000596046448 0.5012654662132263 -5.127413160721517e-09 0.2567000389099121 0.2499997615814209 0.0 0.0 1.0 -0.5 0.6521799564361572 -0.5 0.6521799564361572 -0.16332030296325684 0.3523709177970886 0.16332018375396729 -0.6577959656715393 0.3667714595794678 0.6577959656715393 -1.0 0.8355814218521118 -1.0 0.8355814218521118 -0.17677664756774902 0.2567000389099121 0.17677652835845947 -0.7070833444595337 0.0 0.7070833444595337 -1.0000001192092896 0.6521799564361572 -1.0000001192092896 0.6521799564361572 -5.127413160721517e-09 0.4876699447631836 0.09567070007324219 0.0 0.9063081741333008 0.42255929112434387 0.0 0.8145729899406433 0.0 0.8145729899406433 -0.12499997019767761 0.4334768056869507 0.12499985098838806 -0.5159153938293457 0.6838282346725464 0.5159153938293457 -0.2500000596046448 0.6270730495452881 -0.2500000596046448 0.6270730495452881 -5.127413160721517e-09 0.4334768056869507 0.17677652835845947 0.0 0.6838282346725464 0.729606032371521 0.0 0.6270730495452881 0.0 0.6270730495452881 -5.127413160721517e-09 0.2567000389099121 0.2499997615814209 0.0 0.0 1.0 -0.5 0.6521799564361572 -0.5 0.6521799564361572 -0.16332030296325684 0.16102918982505798 0.16332018375396729 -0.6650899052619934 -0.3395184278488159 0.6650899052619934 -1.0 0.4687783122062683 -1.0 0.4687783122062683 2.3231692125591508e-09 0.16102918982505798 0.23096966743469238 0.0 -0.3395184278488159 0.9405804872512817 -0.5 0.4687783122062683 -0.5 0.4687783122062683 -9.125497690831708e-09 0.009099066257476807 -0.1433727741241455 0.0 -0.4508804678916931 -0.8925443291664124 1.0 0.5012654662132263 1.0 0.5012654662132263 -0.07545191049575806 -0.07792764902114868 -0.07545202970504761 -0.65160071849823 -0.3882564902305603 -0.65160071849823 1.2499998807907104 0.5012654662132263 1.2499998807907104 0.5012654662132263 -0.10137978196144104 0.009099066257476807 -0.10137990117073059 -0.6311227679252625 -0.4508804678916931 -0.6311227679252625 1.2499998807907104 0.5012654662132263 1.2499998807907104 0.5012654662132263 -0.16332033276557922 0.16102918982505798 -0.1633204221725464 -0.6650899052619934 -0.3395184278488159 -0.6650899052619934 1.25 0.8762653470039368 1.25 0.8762653470039368 -0.14337265491485596 0.009099066257476807 -1.2676133565037162e-07 -0.8925443291664124 -0.4508804678916931 -0.0 1.5 0.5012654662132263 1.5 0.5012654662132263 -0.2309698462486267 0.16102918982505798 -1.1130059363040345e-07 -0.9405804872512817 -0.3395184278488159 -0.0 1.5 0.8762653470039368 1.5 0.8762653470039368 -0.16332030296325684 0.3523709177970886 0.16332018375396729 -0.6577959656715393 0.3667714595794678 0.6577959656715393 -1.0 0.8355814218521118 -1.0 0.8355814218521118 -0.24999994039535522 0.2567000389099121 -1.262017548242511e-07 -1.0 0.0 -0.0 -1.5 0.6521799564361572 -1.5 0.6521799564361572 -0.17677664756774902 0.2567000389099121 0.17677652835845947 -0.7070833444595337 0.0 0.7070833444595337 -1.0000001192092896 0.6521799564361572 -1.0000001192092896 0.6521799564361572 -0.0676494836807251 0.4876699447631836 0.06764936447143555 -0.29880672693252563 0.9063081741333008 0.29880672693252563 -0.2500000596046448 0.8145729899406433 -0.2500000596046448 0.8145729899406433 -0.17677664756774902 0.4334768056869507 -1.262017548242511e-07 -0.729606032371521 0.6838282346725464 -0.0 -0.5 0.6270729899406433 -0.5 0.6270729899406433 -0.12499997019767761 0.4334768056869507 0.12499985098838806 -0.5159153938293457 0.6838282346725464 0.5159153938293457 -0.2500000596046448 0.6270730495452881 -0.2500000596046448 0.6270730495452881 -0.17677664756774902 0.2567000389099121 0.17677652835845947 -0.7070833444595337 0.0 0.7070833444595337 -1.0000001192092896 0.6521799564361572 -1.0000001192092896 0.6521799564361572 -0.2309698462486267 0.16102918982505798 -1.1130059363040345e-07 -0.9405804872512817 -0.3395184278488159 -0.0 -1.5 0.4687783122062683 -1.5 0.4687783122062683 -0.16332030296325684 0.16102918982505798 0.16332018375396729 -0.6650899052619934 -0.3395184278488159 0.6650899052619934 -1.0 0.4687783122062683 -1.0 0.4687783122062683 -0.16332030296325684 0.3523709177970886 0.16332018375396729 -0.6577959656715393 0.3667714595794678 0.6577959656715393 -0.25 0.4395729899406433 -0.25 0.4395729899406433 -0.17677664756774902 0.4334768056869507 -1.262017548242511e-07 -0.729606032371521 0.6838282346725464 -0.0 -0.5 0.6270729899406433 -0.5 0.6270729899406433 -0.2309698462486267 0.3523709177970886 -1.1130059363040345e-07 -0.9302957057952881 0.3667714595794678 -0.0 -0.5 0.4395729899406433 -0.5 0.4395729899406433 -0.0676494836807251 0.4876699447631836 0.06764936447143555 -0.29880672693252563 0.9063081741333008 0.29880672693252563 -0.2500000596046448 0.8145729899406433 -0.2500000596046448 0.8145729899406433 -3.492973377205999e-08 0.5067000389099121 -9.63994324365558e-08 0.0 1.0 -0.0 -0.37500011920928955 0.9803798198699951 -0.37500011920928955 0.9803798198699951 -0.09567081928253174 0.4876699447631836 -1.262017548242511e-07 -0.42255929112434387 0.9063081741333008 -0.0 -0.5 0.8145728707313538 -0.5 0.8145728707313538 -0.09567081928253174 0.4876699447631836 -1.262017548242511e-07 -0.42255929112434387 0.9063081741333008 -0.0 1.5 0.8145728707313538 1.5 0.8145728707313538 -0.12499997019767761 0.4334768056869507 -0.12500008940696716 -0.5159153938293457 0.6838282346725464 -0.5159153938293457 1.2499998807907104 0.6270729899406433 1.2499998807907104 0.6270729899406433 -0.17677664756774902 0.4334768056869507 -1.262017548242511e-07 -0.729606032371521 0.6838282346725464 -0.0 1.5 0.6270729899406433 1.5 0.6270729899406433 -2.0028574354569173e-08 0.16102918982505798 -0.23096990585327148 0.0 -0.3395184278488159 -0.9405804872512817 1.0 0.8762653470039368 1.0 0.8762653470039368 -0.10137978196144104 0.009099066257476807 -0.10137990117073059 -0.6311227679252625 -0.4508804678916931 -0.6311227679252625 1.2499998807907104 0.5012654662132263 1.2499998807907104 0.5012654662132263 -0.16332033276557922 0.16102918982505798 -0.1633204221725464 -0.6650899052619934 -0.3395184278488159 -0.6650899052619934 1.25 0.8762653470039368 1.25 0.8762653470039368 -0.24999994039535522 0.2567000389099121 -1.262017548242511e-07 -1.0 0.0 -0.0 2.5 0.6521799564361572 2.5 0.6521799564361572 -0.16332033276557922 0.16102918982505798 -0.1633204221725464 -0.6650899052619934 -0.3395184278488159 -0.6650899052619934 2.0 0.4687783122062683 2.0 0.4687783122062683 -0.2309698462486267 0.16102918982505798 -1.1130059363040345e-07 -0.9405804872512817 -0.3395184278488159 -0.0 2.5 0.4687783122062683 2.5 0.4687783122062683 -0.17677664756774902 0.4334768056869507 -1.262017548242511e-07 -0.729606032371521 0.6838282346725464 -0.0 1.5 0.6270729899406433 1.5 0.6270729899406433 -0.16332033276557922 0.3523709177970886 -0.1633204221725464 -0.6577959656715393 0.3667714595794678 -0.6577959656715393 1.25 0.4395729899406433 1.25 0.4395729899406433 -0.2309698462486267 0.3523709177970886 -1.1130059363040345e-07 -0.9302957057952881 0.3667714595794678 -0.0 1.5 0.4395729899406433 1.5 0.4395729899406433 -0.09567081928253174 0.4876699447631836 -1.262017548242511e-07 -0.42255929112434387 0.9063081741333008 -0.0 1.5 0.8145728707313538 1.5 0.8145728707313538 -3.492973377205999e-08 0.5067000389099121 -9.63994324365558e-08 0.0 1.0 -0.0 1.3749998807907104 0.9803798198699951 1.3749998807907104 0.9803798198699951 -0.0676494836807251 0.4876699447631836 -0.06764960289001465 -0.29880672693252563 0.9063081741333008 -0.29880672693252563 1.2499998807907104 0.8145728707313538 1.2499998807907104 0.8145728707313538 0.10137978196144104 0.009099066257476807 -0.10137990117073059 0.6311227679252625 -0.4508804678916931 -0.6311227679252625 0.7500001192092896 0.5012654662132263 0.7500001192092896 0.5012654662132263 -9.757068042404171e-09 -0.07792764902114868 -0.10670521855354309 0.0 -0.3882564902305603 -0.921536922454834 1.0 0.5012654662132263 1.0 0.5012654662132263 -9.125497690831708e-09 0.009099066257476807 -0.1433727741241455 0.0 -0.4508804678916931 -0.8925443291664124 1.0 0.5012654662132263 1.0 0.5012654662132263 -0.24999994039535522 0.2567000389099121 -1.262017548242511e-07 -1.0 0.0 -0.0 2.5 0.6521799564361572 2.5 0.6521799564361572 -0.16332033276557922 0.3523709177970886 -0.1633204221725464 -0.6577959656715393 0.3667714595794678 -0.6577959656715393 2.0 0.8355814218521118 2.0 0.8355814218521118 -0.17677664756774902 0.2567000389099121 -0.17677676677703857 -0.7070833444595337 0.0 -0.7070833444595337 1.999999761581421 0.6521799564361572 1.999999761581421 0.6521799564361572 -2.0028574354569173e-08 0.16102918982505798 -0.23096990585327148 0.0 -0.3395184278488159 -0.9405804872512817 1.0 0.8762653470039368 1.0 0.8762653470039368 0.10137978196144104 0.009099066257476807 -0.10137990117073059 0.6311227679252625 -0.4508804678916931 -0.6311227679252625 0.7500001192092896 0.5012654662132263 0.7500001192092896 0.5012654662132263 -9.125497690831708e-09 0.009099066257476807 -0.1433727741241455 0.0 -0.4508804678916931 -0.8925443291664124 1.0 0.5012654662132263 1.0 0.5012654662132263 -0.17677664756774902 0.2567000389099121 -0.17677676677703857 -0.7070833444595337 0.0 -0.7070833444595337 1.999999761581421 0.6521799564361572 1.999999761581421 0.6521799564361572 -2.0028574354569173e-08 0.16102918982505798 -0.23096990585327148 0.0 -0.3395184278488159 -0.9405804872512817 1.5 0.4687783122062683 1.5 0.4687783122062683 -0.16332033276557922 0.16102918982505798 -0.1633204221725464 -0.6650899052619934 -0.3395184278488159 -0.6650899052619934 2.0 0.4687783122062683 2.0 0.4687783122062683 -0.12499997019767761 0.4334768056869507 -0.12500008940696716 -0.5159153938293457 0.6838282346725464 -0.5159153938293457 1.2499998807907104 0.6270729899406433 1.2499998807907104 0.6270729899406433 -2.0028574354569173e-08 0.3523709177970886 -0.23096990585327148 0.0 0.3667714595794678 -0.9302957057952881 1.0 0.4395729899406433 1.0 0.4395729899406433 -0.16332033276557922 0.3523709177970886 -0.1633204221725464 -0.6577959656715393 0.3667714595794678 -0.6577959656715393 1.25 0.4395729899406433 1.25 0.4395729899406433 -0.0676494836807251 0.4876699447631836 -0.06764960289001465 -0.29880672693252563 0.9063081741333008 -0.29880672693252563 1.2499998807907104 0.8145728707313538 1.2499998807907104 0.8145728707313538 -3.492973377205999e-08 0.5067000389099121 -9.63994324365558e-08 0.0 1.0 -0.0 1.125 0.9803798198699951 1.125 0.9803798198699951 -8.85270345918343e-09 0.4876699447631836 -0.09567093849182129 0.0 0.9063081741333008 -0.42255929112434387 1.0 0.8145728707313538 1.0 0.8145728707313538 -0.10137978196144104 0.009099066257476807 -0.10137990117073059 -0.6311227679252625 -0.4508804678916931 -0.6311227679252625 1.2499998807907104 0.5012654662132263 1.2499998807907104 0.5012654662132263 -0.10670509934425354 -0.07792764902114868 -1.260678743619792e-07 -0.921536922454834 -0.3882564902305603 -0.0 1.5 0.5012654662132263 1.5 0.5012654662132263 -0.14337265491485596 0.009099066257476807 -1.2676133565037162e-07 -0.8925443291664124 -0.4508804678916931 -0.0 1.5 0.5012654662132263 1.5 0.5012654662132263 -0.17677664756774902 0.2567000389099121 -0.17677676677703857 -0.7070833444595337 0.0 -0.7070833444595337 1.999999761581421 0.6521799564361572 1.999999761581421 0.6521799564361572 -2.0028574354569173e-08 0.3523709177970886 -0.23096990585327148 0.0 0.3667714595794678 -0.9302957057952881 1.5 0.8355814218521118 1.5 0.8355814218521118 -8.237197590688083e-09 0.2567000389099121 -0.25000011920928955 0.0 0.0 -0.999969482421875 1.5 0.6521799564361572 1.5 0.6521799564361572 -0.0676494836807251 0.4876699447631836 -0.06764960289001465 -0.29880672693252563 0.9063081741333008 -0.29880672693252563 1.2499998807907104 0.8145728707313538 1.2499998807907104 0.8145728707313538 -1.2577993757645345e-08 0.4334768056869507 -0.17677676677703857 0.0 0.6838282346725464 -0.729606032371521 1.0 0.6270729899406433 1.0 0.6270729899406433 -0.12499997019767761 0.4334768056869507 -0.12500008940696716 -0.5159153938293457 0.6838282346725464 -0.5159153938293457 1.2499998807907104 0.6270729899406433 1.2499998807907104 0.6270729899406433 -5.602117880698643e-09 -0.07792764902114868 0.10670498013496399 0.0 0.0 1.0 0.2629193961620331 0.015914514660835266 0.2629193961620331 0.015914514660835266 0.07545189559459686 -0.20835745334625244 0.0754517912864685 0.7070833444595337 0.0 0.7070833444595337 0.32541942596435547 0.225510373711586 0.32541942596435547 0.225510373711586 0.07545189559459686 -0.07792764902114868 0.0754517912864685 0.7070833444595337 0.0 0.7070833444595337 0.32541942596435547 0.015914514660835266 0.32541942596435547 0.015914514660835266 -0.10670509934425354 -0.07792764902114868 -1.260678743619792e-07 -1.0 0.0 -0.0 0.13791939616203308 0.015914514660835266 0.13791939616203308 0.015914514660835266 -0.07545191049575806 -0.20835745334625244 0.0754517912864685 -0.7070833444595337 0.0 0.7070833444595337 0.20041939616203308 0.225510373711586 0.20041939616203308 0.225510373711586 -0.07545191049575806 -0.07792764902114868 0.0754517912864685 -0.7070833444595337 0.0 0.7070833444595337 0.20041939616203308 0.015914514660835266 0.20041939616203308 0.015914514660835266 -9.757068042404171e-09 -0.07792764902114868 -0.10670521855354309 0.0 0.0 -1.0 0.5129194259643555 0.015914514660835266 0.5129194259643555 0.015914514660835266 -0.07545191049575806 -0.20835745334625244 -0.07545202970504761 -0.7070833444595337 0.0 -0.7070833444595337 0.5754194259643555 0.225510373711586 0.5754194259643555 0.225510373711586 -0.07545191049575806 -0.07792764902114868 -0.07545202970504761 -0.7070833444595337 0.0 -0.7070833444595337 0.5754194259643555 0.015914514660835266 0.5754194259643555 0.015914514660835266 0.07545189559459686 -0.07792764902114868 0.0754517912864685 0.7070833444595337 0.0 0.7070833444595337 0.32541942596435547 0.015914514660835266 0.32541942596435547 0.015914514660835266 0.10670509934425354 -0.20835745334625244 -1.216602072418027e-07 1.0 0.0 -0.0 0.3879193961620331 0.225510373711586 0.3879193961620331 0.225510373711586 0.10670509934425354 -0.07792764902114868 -1.2191291887120315e-07 1.0 0.0 -0.0 0.3879193961620331 0.015914514660835266 0.3879193961620331 0.015914514660835266 -0.07545191049575806 -0.07792764902114868 0.0754517912864685 -0.7070833444595337 0.0 0.7070833444595337 0.20041939616203308 0.015914514660835266 0.20041939616203308 0.015914514660835266 -6.486650327985899e-09 -0.20835745334625244 0.10670498013496399 0.0 0.0 1.0 0.2629193961620331 0.225510373711586 0.2629193961620331 0.225510373711586 -5.602117880698643e-09 -0.07792764902114868 0.10670498013496399 0.0 0.0 1.0 0.2629193961620331 0.015914514660835266 0.2629193961620331 0.015914514660835266 -0.07545191049575806 -0.07792764902114868 -0.07545202970504761 -0.7070833444595337 0.0 -0.7070833444595337 0.5754194259643555 0.015914514660835266 0.5754194259643555 0.015914514660835266 -0.10670509934425354 -0.20835745334625244 -1.2581514852172404e-07 -1.0 0.0 -0.0 0.6379194259643555 0.225510373711586 0.6379194259643555 0.225510373711586 -0.10670509934425354 -0.07792764902114868 -1.260678743619792e-07 -1.0 0.0 -0.0 0.6379194259643555 0.015914514660835266 0.6379194259643555 0.015914514660835266 0.07545191049575806 -0.07792764902114868 -0.07545202970504761 0.7070833444595337 0.0 -0.7070833444595337 0.4504193961620331 0.015914514660835266 0.4504193961620331 0.015914514660835266 -1.0641600489691427e-08 -0.20835745334625244 -0.10670521855354309 0.0 0.0 -1.0 0.5129194259643555 0.225510373711586 0.5129194259643555 0.225510373711586 -9.757068042404171e-09 -0.07792764902114868 -0.10670521855354309 0.0 0.0 -1.0 0.5129194259643555 0.015914514660835266 0.5129194259643555 0.015914514660835266 0.10670509934425354 -0.07792764902114868 -1.2191291887120315e-07 1.0 0.0 -0.0 0.3879193961620331 0.015914514660835266 0.3879193961620331 0.015914514660835266 0.07545191049575806 -0.20835745334625244 -0.07545202970504761 0.7070833444595337 0.0 -0.7070833444595337 0.4504193961620331 0.225510373711586 0.4504193961620331 0.225510373711586 0.07545191049575806 -0.07792764902114868 -0.07545202970504761 0.7070833444595337 0.0 -0.7070833444595337 0.4504193961620331 0.015914514660835266 0.4504193961620331 0.015914514660835266 -9.955104296466288e-09 -0.22958242893218994 -1.2234669100052997e-07 0.0 -0.999969482421875 -0.0 0.8723967671394348 0.12398764491081238 0.8723967671394348 0.12398764491081238 -1.0641600489691427e-08 -0.20835745334625244 -0.10670521855354309 0.0 -0.9807733297348022 -0.19507431983947754 0.9846075177192688 0.17046687006950378 0.9846075177192688 0.17046687006950378 0.07545191049575806 -0.20835745334625244 -0.07545202970504761 0.13794365525245667 -0.9807733297348022 -0.13794365525245667 0.9188759326934814 0.23619844019412994 0.9188759326934814 0.23619844019412994 -9.955104296466288e-09 -0.22958242893218994 -1.2234669100052997e-07 0.0 -0.999969482421875 -0.0 0.8723967671394348 0.12398764491081238 0.8723967671394348 0.12398764491081238 0.07545191049575806 -0.20835745334625244 -0.07545202970504761 0.13794365525245667 -0.9807733297348022 -0.13794365525245667 0.9188759326934814 0.23619844019412994 0.9188759326934814 0.23619844019412994 0.10670509934425354 -0.20835745334625244 -1.216602072418027e-07 0.19507431983947754 -0.9807733297348022 -0.0 0.8259174823760986 0.23619839549064636 0.8259174823760986 0.23619839549064636 -9.955104296466288e-09 -0.22958242893218994 -1.2234669100052997e-07 0.0 -0.999969482421875 -0.0 0.8723967671394348 0.12398764491081238 0.8723967671394348 0.12398764491081238 0.10670509934425354 -0.20835745334625244 -1.216602072418027e-07 0.19507431983947754 -0.9807733297348022 -0.0 0.8259174823760986 0.23619839549064636 0.8259174823760986 0.23619839549064636 0.07545189559459686 -0.20835745334625244 0.0754517912864685 0.13794365525245667 -0.9807733297348022 0.13794365525245667 0.760185956954956 0.17046687006950378 0.760185956954956 0.17046687006950378 -9.955104296466288e-09 -0.22958242893218994 -1.2234669100052997e-07 0.0 -0.999969482421875 -0.0 0.8723967671394348 0.12398764491081238 0.8723967671394348 0.12398764491081238 0.07545189559459686 -0.20835745334625244 0.0754517912864685 0.13794365525245667 -0.9807733297348022 0.13794365525245667 0.760185956954956 0.17046687006950378 0.760185956954956 0.17046687006950378 -6.486650327985899e-09 -0.20835745334625244 0.10670498013496399 0.0 -0.9807733297348022 0.19507431983947754 0.760185956954956 0.07750840485095978 0.760185956954956 0.07750840485095978 -9.955104296466288e-09 -0.22958242893218994 -1.2234669100052997e-07 0.0 -0.999969482421875 -0.0 0.8723967671394348 0.12398764491081238 0.8723967671394348 0.12398764491081238 -6.486650327985899e-09 -0.20835745334625244 0.10670498013496399 0.0 -0.9807733297348022 0.19507431983947754 0.760185956954956 0.07750840485095978 0.760185956954956 0.07750840485095978 -0.07545191049575806 -0.20835745334625244 0.0754517912864685 -0.13794365525245667 -0.9807733297348022 0.13794365525245667 0.8259175419807434 0.0117768794298172 0.8259175419807434 0.0117768794298172 -9.955104296466288e-09 -0.22958242893218994 -1.2234669100052997e-07 0.0 -0.999969482421875 -0.0 0.8723967671394348 0.12398764491081238 0.8723967671394348 0.12398764491081238 -0.07545191049575806 -0.20835745334625244 0.0754517912864685 -0.13794365525245667 -0.9807733297348022 0.13794365525245667 0.8259175419807434 0.0117768794298172 0.8259175419807434 0.0117768794298172 -0.10670509934425354 -0.20835745334625244 -1.2581514852172404e-07 -0.19507431983947754 -0.9807733297348022 -0.0 0.9188759326934814 0.0117768794298172 0.9188759326934814 0.0117768794298172 -9.955104296466288e-09 -0.22958242893218994 -1.2234669100052997e-07 0.0 -0.999969482421875 -0.0 0.8723967671394348 0.12398764491081238 0.8723967671394348 0.12398764491081238 -0.10670509934425354 -0.20835745334625244 -1.2581514852172404e-07 -0.19507431983947754 -0.9807733297348022 -0.0 0.9188759326934814 0.0117768794298172 0.9188759326934814 0.0117768794298172 -0.07545191049575806 -0.20835745334625244 -0.07545202970504761 -0.13794365525245667 -0.9807733297348022 -0.13794365525245667 0.9846075177192688 0.07750842720270157 0.9846075177192688 0.07750842720270157 -9.955104296466288e-09 -0.22958242893218994 -1.2234669100052997e-07 0.0 -0.999969482421875 -0.0 0.8723967671394348 0.12398764491081238 0.8723967671394348 0.12398764491081238 -0.07545191049575806 -0.20835745334625244 -0.07545202970504761 -0.13794365525245667 -0.9807733297348022 -0.13794365525245667 0.9846075177192688 0.07750842720270157 0.9846075177192688 0.07750842720270157 -1.0641600489691427e-08 -0.20835745334625244 -0.10670521855354309 0.0 -0.9807733297348022 -0.19507431983947754 0.9846075177192688 0.17046687006950378 0.9846075177192688 0.17046687006950378 0.10137978196144104 0.009099066257476807 -0.10137990117073059 0.6311227679252625 -0.4508804678916931 -0.6311227679252625 0.7500001192092896 0.5012654662132263 0.7500001192092896 0.5012654662132263 0.2309698462486267 0.16102918982505798 -1.262017548242511e-07 0.9405804872512817 -0.3395184278488159 -0.0 0.5 0.8762653470039368 0.5 0.8762653470039368 0.14337262511253357 0.009099066257476807 -1.2117860137550451e-07 0.8925443291664124 -0.4508804678916931 -0.0 0.5000001192092896 0.5012654662132263 0.5000001192092896 0.5012654662132263 -8.237197590688083e-09 0.2567000389099121 -0.25000011920928955 0.0 0.0 -0.999969482421875 1.5 0.6521799564361572 1.5 0.6521799564361572 0.17677664756774902 0.2567000389099121 -0.17677676677703857 0.7070833444595337 0.0 -0.7070833444595337 1.0 0.6521799564361572 1.0 0.6521799564361572 0.16332030296325684 0.16102918982505798 -0.16332048177719116 0.6650899052619934 -0.3395184278488159 -0.6650899052619934 1.0 0.46877843141555786 1.0 0.46877843141555786 -1.2577993757645345e-08 0.4334768056869507 -0.17677676677703857 0.0 0.6838282346725464 -0.729606032371521 1.0 0.6270729899406433 1.0 0.6270729899406433 0.12499997019767761 0.4334768056869507 -0.12500008940696716 0.5159153938293457 0.6838282346725464 -0.5159153938293457 0.75 0.6270729899406433 0.75 0.6270729899406433 0.16332030296325684 0.3523709177970886 -0.16332048177719116 0.6577959656715393 0.3667714595794678 -0.6577959656715393 0.75 0.4395729899406433 0.75 0.4395729899406433 -3.54276430414302e-09 0.009099066257476807 0.14337250590324402 0.0 -0.4508804678916931 0.8925443291664124 0.0 0.5012654662132263 0.0 0.5012654662132263 -0.10137978196144104 0.009099066257476807 0.10137966275215149 -0.6311227679252625 -0.4508804678916931 0.6311227679252625 -0.2500000596046448 0.5012654662132263 -0.2500000596046448 0.5012654662132263 -0.07545191049575806 -0.07792764902114868 0.0754517912864685 -0.65160071849823 -0.3882564902305603 0.65160071849823 -0.2500000596046448 0.5012654662132263 -0.2500000596046448 0.5012654662132263 -2.0028574354569173e-08 0.3523709177970886 -0.23096990585327148 0.0 0.3667714595794678 -0.9302957057952881 1.5 0.8355814218521118 1.5 0.8355814218521118 0.16332030296325684 0.3523709177970886 -0.16332048177719116 0.6577959656715393 0.3667714595794678 -0.6577959656715393 1.0 0.8355814218521118 1.0 0.8355814218521118 0.17677664756774902 0.2567000389099121 -0.17677676677703857 0.7070833444595337 0.0 -0.7070833444595337 1.0 0.6521799564361572 1.0 0.6521799564361572 -1.2577993757645345e-08 0.4334768056869507 -0.17677676677703857 0.0 0.6838282346725464 -0.729606032371521 1.0 0.6270729899406433 1.0 0.6270729899406433 -8.85270345918343e-09 0.4876699447631836 -0.09567093849182129 0.0 0.9063081741333008 -0.42255929112434387 1.0 0.8145728707313538 1.0 0.8145728707313538 0.0676494836807251 0.4876699447631836 -0.06764960289001465 0.29880672693252563 0.9063081741333008 -0.29880672693252563 0.7500001192092896 0.8145728707313538 0.7500001192092896 0.8145728707313538 0.14337262511253357 0.009099066257476807 -1.2117860137550451e-07 0.8925443291664124 -0.4508804678916931 -0.0 0.5000001192092896 0.5012654662132263 0.5000001192092896 0.5012654662132263 0.10670509934425354 -0.07792764902114868 -1.2191291887120315e-07 0.921536922454834 -0.3882564902305603 -0.0 0.5000001192092896 0.5012654662132263 0.5000001192092896 0.5012654662132263 0.07545191049575806 -0.07792764902114868 -0.07545202970504761 0.65160071849823 -0.3882564902305603 -0.65160071849823 0.7500001192092896 0.5012654662132263 0.7500001192092896 0.5012654662132263 0.16332030296325684 0.16102918982505798 0.16332018375396729 0.6650899052619934 -0.3395184278488159 0.6650899052619934 0.2500000596046448 0.8762653470039368 0.2500000596046448 0.8762653470039368 0.10137975215911865 0.009099066257476807 0.10137966275215149 0.6311227679252625 -0.4508804678916931 0.6311227679252625 0.25000011920928955 0.5012654662132263 0.25000011920928955 0.5012654662132263 0.14337262511253357 0.009099066257476807 -1.2117860137550451e-07 0.8925443291664124 -0.4508804678916931 -0.0 0.5000001192092896 0.5012654662132263 0.5000001192092896 0.5012654662132263 0.17677664756774902 0.2567000389099121 -0.17677676677703857 0.7070833444595337 0.0 -0.7070833444595337 1.0 0.6521799564361572 1.0 0.6521799564361572 0.16332030296325684 0.3523709177970886 -0.16332048177719116 0.6577959656715393 0.3667714595794678 -0.6577959656715393 1.0 0.8355814218521118 1.0 0.8355814218521118 0.2309698462486267 0.3523709177970886 -1.262017548242511e-07 0.9302957057952881 0.3667714595794678 -0.0 0.5 0.8355814218521118 0.5 0.8355814218521118 0.0676494836807251 0.4876699447631836 -0.06764960289001465 0.29880672693252563 0.9063081741333008 -0.29880672693252563 0.7500001192092896 0.8145728707313538 0.7500001192092896 0.8145728707313538 0.09567081928253174 0.4876699447631836 -1.224764645257892e-07 0.42255929112434387 0.9063081741333008 -0.0 0.5000001192092896 0.8145728707313538 0.5000001192092896 0.8145728707313538 0.17677658796310425 0.4334768056869507 -1.262017548242511e-07 0.729606032371521 0.6838282346725464 -0.0 0.5000001192092896 0.6270729899406433 0.5000001192092896 0.6270729899406433 0.17677664756774902 0.2567000389099121 -0.17677676677703857 0.7070833444595337 0.0 -0.7070833444595337 1.0 0.6521799564361572 1.0 0.6521799564361572 0.24999994039535522 0.2567000389099121 -1.1875117422732728e-07 1.0 0.0 -0.0 0.5 0.6521799564361572 0.5 0.6521799564361572 0.2309698462486267 0.16102918982505798 -1.262017548242511e-07 0.9405804872512817 -0.3395184278488159 -0.0 0.5 0.4687783122062683 0.5 0.4687783122062683 0.12499997019767761 0.4334768056869507 -0.12500008940696716 0.5159153938293457 0.6838282346725464 -0.5159153938293457 0.75 0.6270729899406433 0.75 0.6270729899406433 0.17677658796310425 0.4334768056869507 -1.262017548242511e-07 0.729606032371521 0.6838282346725464 -0.0 0.5000001192092896 0.6270729899406433 0.5000001192092896 0.6270729899406433 0.2309698462486267 0.3523709177970886 -1.262017548242511e-07 0.9302957057952881 0.3667714595794678 -0.0 0.5 0.4395729899406433 0.5 0.4395729899406433 0.24999994039535522 0.2567000389099121 -1.1875117422732728e-07 1.0 0.0 -0.0 0.5 0.6521799564361572 0.5 0.6521799564361572 0.2309698462486267 0.3523709177970886 -1.262017548242511e-07 0.9302957057952881 0.3667714595794678 -0.0 0.5 0.8355814218521118 0.5 0.8355814218521118 0.16332030296325684 0.3523709177970886 0.16332018375396729 0.6577959656715393 0.3667714595794678 0.6577959656715393 1.1920928955078125e-07 0.8355814218521118 1.1920928955078125e-07 0.8355814218521118 0.17677658796310425 0.4334768056869507 -1.262017548242511e-07 0.729606032371521 0.6838282346725464 -0.0 0.5000001192092896 0.6270729899406433 0.5000001192092896 0.6270729899406433 0.09567081928253174 0.4876699447631836 -1.224764645257892e-07 0.42255929112434387 0.9063081741333008 -0.0 0.5000001192092896 0.8145728707313538 0.5000001192092896 0.8145728707313538 0.0676494836807251 0.4876699447631836 0.06764936447143555 0.29880672693252563 0.9063081741333008 0.29880672693252563 0.25000011920928955 0.8145729899406433 0.25000011920928955 0.8145729899406433 2.3231692125591508e-09 0.16102918982505798 0.23096966743469238 0.0 -0.3395184278488159 0.9405804872512817 0.0 0.8762653470039368 0.0 0.8762653470039368 -3.54276430414302e-09 0.009099066257476807 0.14337250590324402 0.0 -0.4508804678916931 0.8925443291664124 0.0 0.5012654662132263 0.0 0.5012654662132263 0.10137975215911865 0.009099066257476807 0.10137966275215149 0.6311227679252625 -0.4508804678916931 0.6311227679252625 0.25000011920928955 0.5012654662132263 0.25000011920928955 0.5012654662132263 0.24999994039535522 0.2567000389099121 -1.1875117422732728e-07 1.0 0.0 -0.0 0.5 0.6521799564361572 0.5 0.6521799564361572 0.17677664756774902 0.2567000389099121 0.17677652835845947 0.7070833444595337 0.0 0.7070833444595337 1.1920928955078125e-07 0.6521799564361572 1.1920928955078125e-07 0.6521799564361572 0.16332030296325684 0.16102918982505798 0.16332018375396729 0.6650899052619934 -0.3395184278488159 0.6650899052619934 1.1920928955078125e-07 0.4687783122062683 1.1920928955078125e-07 0.4687783122062683 0.17677658796310425 0.4334768056869507 -1.262017548242511e-07 0.729606032371521 0.6838282346725464 -0.0 0.5000001192092896 0.6270729899406433 0.5000001192092896 0.6270729899406433 0.12499994039535522 0.4334768056869507 0.12499985098838806 0.5159153938293457 0.6838282346725464 0.5159153938293457 0.2500000596046448 0.6270730495452881 0.2500000596046448 0.6270730495452881 0.16332030296325684 0.3523709177970886 0.16332018375396729 0.6577959656715393 0.3667714595794678 0.6577959656715393 0.2500000596046448 0.4395729899406433 0.2500000596046448 0.4395729899406433 -3.54276430414302e-09 0.009099066257476807 0.14337250590324402 0.0 -0.4508804678916931 0.8925443291664124 0.0 0.5012654662132263 0.0 0.5012654662132263 -5.602117880698643e-09 -0.07792764902114868 0.10670498013496399 0.0 -0.3882564902305603 0.921536922454834 0.0 0.5012654662132263 0.0 0.5012654662132263 0.07545189559459686 -0.07792764902114868 0.0754517912864685 0.65160071849823 -0.3882564902305603 0.65160071849823 0.25000011920928955 0.5012654662132263 0.25000011920928955 0.5012654662132263 2.3231692125591508e-09 0.16102918982505798 0.23096966743469238 0.0 -0.3395184278488159 0.9405804872512817 0.0 0.8762653470039368 0.0 0.8762653470039368 -0.16332030296325684 0.16102918982505798 0.16332018375396729 -0.6650899052619934 -0.3395184278488159 0.6650899052619934 -0.25 0.8762653470039368 -0.25 0.8762653470039368 -0.10137978196144104 0.009099066257476807 0.10137966275215149 -0.6311227679252625 -0.4508804678916931 0.6311227679252625 -0.2500000596046448 0.5012654662132263 -0.2500000596046448 0.5012654662132263 0.16332030296325684 0.16102918982505798 0.16332018375396729 0.6650899052619934 -0.3395184278488159 0.6650899052619934 1.1920928955078125e-07 0.4687783122062683 1.1920928955078125e-07 0.4687783122062683 0.17677664756774902 0.2567000389099121 0.17677652835845947 0.7070833444595337 0.0 0.7070833444595337 1.1920928955078125e-07 0.6521799564361572 1.1920928955078125e-07 0.6521799564361572 -5.127413160721517e-09 0.2567000389099121 0.2499997615814209 0.0 0.0 1.0 -0.5 0.6521799564361572 -0.5 0.6521799564361572 0.12499994039535522 0.4334768056869507 0.12499985098838806 0.5159153938293457 0.6838282346725464 0.5159153938293457 0.2500000596046448 0.6270730495452881 0.2500000596046448 0.6270730495452881 -5.127413160721517e-09 0.4334768056869507 0.17677652835845947 0.0 0.6838282346725464 0.729606032371521 0.0 0.6270730495452881 0.0 0.6270730495452881 2.3231692125591508e-09 0.3523709177970886 0.23096966743469238 0.0 0.3667714595794678 0.9302957057952881 0.0 0.4395729899406433 0.0 0.4395729899406433 0.14337262511253357 0.009099066257476807 -1.2117860137550451e-07 0.8925443291664124 -0.4508804678916931 -0.0 0.5000001192092896 0.5012654662132263 0.5000001192092896 0.5012654662132263 0.10137975215911865 0.009099066257476807 0.10137966275215149 0.6311227679252625 -0.4508804678916931 0.6311227679252625 0.25000011920928955 0.5012654662132263 0.25000011920928955 0.5012654662132263 0.07545189559459686 -0.07792764902114868 0.0754517912864685 0.65160071849823 -0.3882564902305603 0.65160071849823 0.25000011920928955 0.5012654662132263 0.25000011920928955 0.5012654662132263 0.16332030296325684 0.3523709177970886 0.16332018375396729 0.6577959656715393 0.3667714595794678 0.6577959656715393 1.1920928955078125e-07 0.8355814218521118 1.1920928955078125e-07 0.8355814218521118 2.3231692125591508e-09 0.3523709177970886 0.23096966743469238 0.0 0.3667714595794678 0.9302957057952881 -0.5 0.8355814218521118 -0.5 0.8355814218521118 -5.127413160721517e-09 0.2567000389099121 0.2499997615814209 0.0 0.0 1.0 -0.5 0.6521799564361572 -0.5 0.6521799564361572 0.12499994039535522 0.4334768056869507 0.12499985098838806 0.5159153938293457 0.6838282346725464 0.5159153938293457 0.2500000596046448 0.6270730495452881 0.2500000596046448 0.6270730495452881 0.0676494836807251 0.4876699447631836 0.06764936447143555 0.29880672693252563 0.9063081741333008 0.29880672693252563 0.25000011920928955 0.8145729899406433 0.25000011920928955 0.8145729899406433 -5.127413160721517e-09 0.4876699447631836 0.09567070007324219 0.0 0.9063081741333008 0.42255929112434387 0.0 0.8145729899406433 0.0 0.8145729899406433 -5.127413160721517e-09 0.4334768056869507 0.17677652835845947 0.0 0.6838282346725464 0.729606032371521 0.0 0.6270730495452881 0.0 0.6270730495452881 -0.12499997019767761 0.4334768056869507 0.12499985098838806 -0.5159153938293457 0.6838282346725464 0.5159153938293457 -0.2500000596046448 0.6270730495452881 -0.2500000596046448 0.6270730495452881 -0.16332030296325684 0.3523709177970886 0.16332018375396729 -0.6577959656715393 0.3667714595794678 0.6577959656715393 -0.25 0.4395729899406433 -0.25 0.4395729899406433 -0.14337265491485596 0.009099066257476807 -1.2676133565037162e-07 -0.8925443291664124 -0.4508804678916931 -0.0 -0.5 0.5012654662132263 -0.5 0.5012654662132263 -0.10670509934425354 -0.07792764902114868 -1.260678743619792e-07 -0.921536922454834 -0.3882564902305603 -0.0 -0.5 0.5012654662132263 -0.5 0.5012654662132263 -0.07545191049575806 -0.07792764902114868 0.0754517912864685 -0.65160071849823 -0.3882564902305603 0.65160071849823 -0.2500000596046448 0.5012654662132263 -0.2500000596046448 0.5012654662132263 -0.16332030296325684 0.16102918982505798 0.16332018375396729 -0.6650899052619934 -0.3395184278488159 0.6650899052619934 -0.25 0.8762653470039368 -0.25 0.8762653470039368 -0.2309698462486267 0.16102918982505798 -1.1130059363040345e-07 -0.9405804872512817 -0.3395184278488159 -0.0 -0.5 0.8762653470039368 -0.5 0.8762653470039368 -0.14337265491485596 0.009099066257476807 -1.2676133565037162e-07 -0.8925443291664124 -0.4508804678916931 -0.0 -0.5 0.5012654662132263 -0.5 0.5012654662132263 -5.127413160721517e-09 0.2567000389099121 0.2499997615814209 0.0 0.0 1.0 -0.5 0.6521799564361572 -0.5 0.6521799564361572 2.3231692125591508e-09 0.3523709177970886 0.23096966743469238 0.0 0.3667714595794678 0.9302957057952881 -0.5 0.8355814218521118 -0.5 0.8355814218521118 -0.16332030296325684 0.3523709177970886 0.16332018375396729 -0.6577959656715393 0.3667714595794678 0.6577959656715393 -1.0 0.8355814218521118 -1.0 0.8355814218521118 -5.127413160721517e-09 0.4876699447631836 0.09567070007324219 0.0 0.9063081741333008 0.42255929112434387 0.0 0.8145729899406433 0.0 0.8145729899406433 -0.0676494836807251 0.4876699447631836 0.06764936447143555 -0.29880672693252563 0.9063081741333008 0.29880672693252563 -0.2500000596046448 0.8145729899406433 -0.2500000596046448 0.8145729899406433 -0.12499997019767761 0.4334768056869507 0.12499985098838806 -0.5159153938293457 0.6838282346725464 0.5159153938293457 -0.2500000596046448 0.6270730495452881 -0.2500000596046448 0.6270730495452881 -5.127413160721517e-09 0.2567000389099121 0.2499997615814209 0.0 0.0 1.0 -0.5 0.6521799564361572 -0.5 0.6521799564361572 -0.17677664756774902 0.2567000389099121 0.17677652835845947 -0.7070833444595337 0.0 0.7070833444595337 -1.0000001192092896 0.6521799564361572 -1.0000001192092896 0.6521799564361572 -0.16332030296325684 0.16102918982505798 0.16332018375396729 -0.6650899052619934 -0.3395184278488159 0.6650899052619934 -1.0 0.4687783122062683 -1.0 0.4687783122062683 -9.125497690831708e-09 0.009099066257476807 -0.1433727741241455 0.0 -0.4508804678916931 -0.8925443291664124 1.0 0.5012654662132263 1.0 0.5012654662132263 -9.757068042404171e-09 -0.07792764902114868 -0.10670521855354309 0.0 -0.3882564902305603 -0.921536922454834 1.0 0.5012654662132263 1.0 0.5012654662132263 -0.07545191049575806 -0.07792764902114868 -0.07545202970504761 -0.65160071849823 -0.3882564902305603 -0.65160071849823 1.2499998807907104 0.5012654662132263 1.2499998807907104 0.5012654662132263 -0.16332033276557922 0.16102918982505798 -0.1633204221725464 -0.6650899052619934 -0.3395184278488159 -0.6650899052619934 1.25 0.8762653470039368 1.25 0.8762653470039368 -0.10137978196144104 0.009099066257476807 -0.10137990117073059 -0.6311227679252625 -0.4508804678916931 -0.6311227679252625 1.2499998807907104 0.5012654662132263 1.2499998807907104 0.5012654662132263 -0.14337265491485596 0.009099066257476807 -1.2676133565037162e-07 -0.8925443291664124 -0.4508804678916931 -0.0 1.5 0.5012654662132263 1.5 0.5012654662132263 -0.16332030296325684 0.3523709177970886 0.16332018375396729 -0.6577959656715393 0.3667714595794678 0.6577959656715393 -1.0 0.8355814218521118 -1.0 0.8355814218521118 -0.2309698462486267 0.3523709177970886 -1.1130059363040345e-07 -0.9302957057952881 0.3667714595794678 -0.0 -1.5 0.8355814218521118 -1.5 0.8355814218521118 -0.24999994039535522 0.2567000389099121 -1.262017548242511e-07 -1.0 0.0 -0.0 -1.5 0.6521799564361572 -1.5 0.6521799564361572 -0.0676494836807251 0.4876699447631836 0.06764936447143555 -0.29880672693252563 0.9063081741333008 0.29880672693252563 -0.2500000596046448 0.8145729899406433 -0.2500000596046448 0.8145729899406433 -0.09567081928253174 0.4876699447631836 -1.262017548242511e-07 -0.42255929112434387 0.9063081741333008 -0.0 -0.5 0.8145728707313538 -0.5 0.8145728707313538 -0.17677664756774902 0.4334768056869507 -1.262017548242511e-07 -0.729606032371521 0.6838282346725464 -0.0 -0.5 0.6270729899406433 -0.5 0.6270729899406433 -0.17677664756774902 0.2567000389099121 0.17677652835845947 -0.7070833444595337 0.0 0.7070833444595337 -1.0000001192092896 0.6521799564361572 -1.0000001192092896 0.6521799564361572 -0.24999994039535522 0.2567000389099121 -1.262017548242511e-07 -1.0 0.0 -0.0 -1.5 0.6521799564361572 -1.5 0.6521799564361572 -0.2309698462486267 0.16102918982505798 -1.1130059363040345e-07 -0.9405804872512817 -0.3395184278488159 -0.0 -1.5 0.4687783122062683 -1.5 0.4687783122062683 -0.16332030296325684 0.3523709177970886 0.16332018375396729 -0.6577959656715393 0.3667714595794678 0.6577959656715393 -0.25 0.4395729899406433 -0.25 0.4395729899406433 -0.12499997019767761 0.4334768056869507 0.12499985098838806 -0.5159153938293457 0.6838282346725464 0.5159153938293457 -0.2500000596046448 0.6270730495452881 -0.2500000596046448 0.6270730495452881 -0.17677664756774902 0.4334768056869507 -1.262017548242511e-07 -0.729606032371521 0.6838282346725464 -0.0 -0.5 0.6270729899406433 -0.5 0.6270729899406433 -0.09567081928253174 0.4876699447631836 -1.262017548242511e-07 -0.42255929112434387 0.9063081741333008 -0.0 1.5 0.8145728707313538 1.5 0.8145728707313538 -0.0676494836807251 0.4876699447631836 -0.06764960289001465 -0.29880672693252563 0.9063081741333008 -0.29880672693252563 1.2499998807907104 0.8145728707313538 1.2499998807907104 0.8145728707313538 -0.12499997019767761 0.4334768056869507 -0.12500008940696716 -0.5159153938293457 0.6838282346725464 -0.5159153938293457 1.2499998807907104 0.6270729899406433 1.2499998807907104 0.6270729899406433 -2.0028574354569173e-08 0.16102918982505798 -0.23096990585327148 0.0 -0.3395184278488159 -0.9405804872512817 1.0 0.8762653470039368 1.0 0.8762653470039368 -9.125497690831708e-09 0.009099066257476807 -0.1433727741241455 0.0 -0.4508804678916931 -0.8925443291664124 1.0 0.5012654662132263 1.0 0.5012654662132263 -0.10137978196144104 0.009099066257476807 -0.10137990117073059 -0.6311227679252625 -0.4508804678916931 -0.6311227679252625 1.2499998807907104 0.5012654662132263 1.2499998807907104 0.5012654662132263 -0.24999994039535522 0.2567000389099121 -1.262017548242511e-07 -1.0 0.0 -0.0 2.5 0.6521799564361572 2.5 0.6521799564361572 -0.17677664756774902 0.2567000389099121 -0.17677676677703857 -0.7070833444595337 0.0 -0.7070833444595337 1.999999761581421 0.6521799564361572 1.999999761581421 0.6521799564361572 -0.16332033276557922 0.16102918982505798 -0.1633204221725464 -0.6650899052619934 -0.3395184278488159 -0.6650899052619934 2.0 0.4687783122062683 2.0 0.4687783122062683 -0.17677664756774902 0.4334768056869507 -1.262017548242511e-07 -0.729606032371521 0.6838282346725464 -0.0 1.5 0.6270729899406433 1.5 0.6270729899406433 -0.12499997019767761 0.4334768056869507 -0.12500008940696716 -0.5159153938293457 0.6838282346725464 -0.5159153938293457 1.2499998807907104 0.6270729899406433 1.2499998807907104 0.6270729899406433 -0.16332033276557922 0.3523709177970886 -0.1633204221725464 -0.6577959656715393 0.3667714595794678 -0.6577959656715393 1.25 0.4395729899406433 1.25 0.4395729899406433 0.10137978196144104 0.009099066257476807 -0.10137990117073059 0.6311227679252625 -0.4508804678916931 -0.6311227679252625 0.7500001192092896 0.5012654662132263 0.7500001192092896 0.5012654662132263 0.07545191049575806 -0.07792764902114868 -0.07545202970504761 0.65160071849823 -0.3882564902305603 -0.65160071849823 0.7500001192092896 0.5012654662132263 0.7500001192092896 0.5012654662132263 -9.757068042404171e-09 -0.07792764902114868 -0.10670521855354309 0.0 -0.3882564902305603 -0.921536922454834 1.0 0.5012654662132263 1.0 0.5012654662132263 -0.24999994039535522 0.2567000389099121 -1.262017548242511e-07 -1.0 0.0 -0.0 2.5 0.6521799564361572 2.5 0.6521799564361572 -0.2309698462486267 0.3523709177970886 -1.1130059363040345e-07 -0.9302957057952881 0.3667714595794678 -0.0 2.5 0.8355814218521118 2.5 0.8355814218521118 -0.16332033276557922 0.3523709177970886 -0.1633204221725464 -0.6577959656715393 0.3667714595794678 -0.6577959656715393 2.0 0.8355814218521118 2.0 0.8355814218521118 -2.0028574354569173e-08 0.16102918982505798 -0.23096990585327148 0.0 -0.3395184278488159 -0.9405804872512817 1.0 0.8762653470039368 1.0 0.8762653470039368 0.16332030296325684 0.16102918982505798 -0.16332048177719116 0.6650899052619934 -0.3395184278488159 -0.6650899052619934 0.75 0.8762654662132263 0.75 0.8762654662132263 0.10137978196144104 0.009099066257476807 -0.10137990117073059 0.6311227679252625 -0.4508804678916931 -0.6311227679252625 0.7500001192092896 0.5012654662132263 0.7500001192092896 0.5012654662132263 -0.17677664756774902 0.2567000389099121 -0.17677676677703857 -0.7070833444595337 0.0 -0.7070833444595337 1.999999761581421 0.6521799564361572 1.999999761581421 0.6521799564361572 -8.237197590688083e-09 0.2567000389099121 -0.25000011920928955 0.0 0.0 -0.999969482421875 1.5 0.6521799564361572 1.5 0.6521799564361572 -2.0028574354569173e-08 0.16102918982505798 -0.23096990585327148 0.0 -0.3395184278488159 -0.9405804872512817 1.5 0.4687783122062683 1.5 0.4687783122062683 -0.12499997019767761 0.4334768056869507 -0.12500008940696716 -0.5159153938293457 0.6838282346725464 -0.5159153938293457 1.2499998807907104 0.6270729899406433 1.2499998807907104 0.6270729899406433 -1.2577993757645345e-08 0.4334768056869507 -0.17677676677703857 0.0 0.6838282346725464 -0.729606032371521 1.0 0.6270729899406433 1.0 0.6270729899406433 -2.0028574354569173e-08 0.3523709177970886 -0.23096990585327148 0.0 0.3667714595794678 -0.9302957057952881 1.0 0.4395729899406433 1.0 0.4395729899406433 -0.10137978196144104 0.009099066257476807 -0.10137990117073059 -0.6311227679252625 -0.4508804678916931 -0.6311227679252625 1.2499998807907104 0.5012654662132263 1.2499998807907104 0.5012654662132263 -0.07545191049575806 -0.07792764902114868 -0.07545202970504761 -0.65160071849823 -0.3882564902305603 -0.65160071849823 1.2499998807907104 0.5012654662132263 1.2499998807907104 0.5012654662132263 -0.10670509934425354 -0.07792764902114868 -1.260678743619792e-07 -0.921536922454834 -0.3882564902305603 -0.0 1.5 0.5012654662132263 1.5 0.5012654662132263 -0.17677664756774902 0.2567000389099121 -0.17677676677703857 -0.7070833444595337 0.0 -0.7070833444595337 1.999999761581421 0.6521799564361572 1.999999761581421 0.6521799564361572 -0.16332033276557922 0.3523709177970886 -0.1633204221725464 -0.6577959656715393 0.3667714595794678 -0.6577959656715393 2.0 0.8355814218521118 2.0 0.8355814218521118 -2.0028574354569173e-08 0.3523709177970886 -0.23096990585327148 0.0 0.3667714595794678 -0.9302957057952881 1.5 0.8355814218521118 1.5 0.8355814218521118 -0.0676494836807251 0.4876699447631836 -0.06764960289001465 -0.29880672693252563 0.9063081741333008 -0.29880672693252563 1.2499998807907104 0.8145728707313538 1.2499998807907104 0.8145728707313538 -8.85270345918343e-09 0.4876699447631836 -0.09567093849182129 0.0 0.9063081741333008 -0.42255929112434387 1.0 0.8145728707313538 1.0 0.8145728707313538 -1.2577993757645345e-08 0.4334768056869507 -0.17677676677703857 0.0 0.6838282346725464 -0.729606032371521 1.0 0.6270729899406433 1.0 0.6270729899406433 -5.602117880698643e-09 -0.07792764902114868 0.10670498013496399 0.0 0.0 1.0 0.2629193961620331 0.015914514660835266 0.2629193961620331 0.015914514660835266 -6.486650327985899e-09 -0.20835745334625244 0.10670498013496399 0.0 0.0 1.0 0.2629193961620331 0.225510373711586 0.2629193961620331 0.225510373711586 0.07545189559459686 -0.20835745334625244 0.0754517912864685 0.7070833444595337 0.0 0.7070833444595337 0.32541942596435547 0.225510373711586 0.32541942596435547 0.225510373711586 -0.10670509934425354 -0.07792764902114868 -1.260678743619792e-07 -1.0 0.0 -0.0 0.13791939616203308 0.015914514660835266 0.13791939616203308 0.015914514660835266 -0.10670509934425354 -0.20835745334625244 -1.2581514852172404e-07 -1.0 0.0 -0.0 0.13791939616203308 0.225510373711586 0.13791939616203308 0.225510373711586 -0.07545191049575806 -0.20835745334625244 0.0754517912864685 -0.7070833444595337 0.0 0.7070833444595337 0.20041939616203308 0.225510373711586 0.20041939616203308 0.225510373711586 -9.757068042404171e-09 -0.07792764902114868 -0.10670521855354309 0.0 0.0 -1.0 0.5129194259643555 0.015914514660835266 0.5129194259643555 0.015914514660835266 -1.0641600489691427e-08 -0.20835745334625244 -0.10670521855354309 0.0 0.0 -1.0 0.5129194259643555 0.225510373711586 0.5129194259643555 0.225510373711586 -0.07545191049575806 -0.20835745334625244 -0.07545202970504761 -0.7070833444595337 0.0 -0.7070833444595337 0.5754194259643555 0.225510373711586 0.5754194259643555 0.225510373711586 0.07545189559459686 -0.07792764902114868 0.0754517912864685 0.7070833444595337 0.0 0.7070833444595337 0.32541942596435547 0.015914514660835266 0.32541942596435547 0.015914514660835266 0.07545189559459686 -0.20835745334625244 0.0754517912864685 0.7070833444595337 0.0 0.7070833444595337 0.32541942596435547 0.225510373711586 0.32541942596435547 0.225510373711586 0.10670509934425354 -0.20835745334625244 -1.216602072418027e-07 1.0 0.0 -0.0 0.3879193961620331 0.225510373711586 0.3879193961620331 0.225510373711586 -0.07545191049575806 -0.07792764902114868 0.0754517912864685 -0.7070833444595337 0.0 0.7070833444595337 0.20041939616203308 0.015914514660835266 0.20041939616203308 0.015914514660835266 -0.07545191049575806 -0.20835745334625244 0.0754517912864685 -0.7070833444595337 0.0 0.7070833444595337 0.20041939616203308 0.225510373711586 0.20041939616203308 0.225510373711586 -6.486650327985899e-09 -0.20835745334625244 0.10670498013496399 0.0 0.0 1.0 0.2629193961620331 0.225510373711586 0.2629193961620331 0.225510373711586 -0.07545191049575806 -0.07792764902114868 -0.07545202970504761 -0.7070833444595337 0.0 -0.7070833444595337 0.5754194259643555 0.015914514660835266 0.5754194259643555 0.015914514660835266 -0.07545191049575806 -0.20835745334625244 -0.07545202970504761 -0.7070833444595337 0.0 -0.7070833444595337 0.5754194259643555 0.225510373711586 0.5754194259643555 0.225510373711586 -0.10670509934425354 -0.20835745334625244 -1.2581514852172404e-07 -1.0 0.0 -0.0 0.6379194259643555 0.225510373711586 0.6379194259643555 0.225510373711586 0.07545191049575806 -0.07792764902114868 -0.07545202970504761 0.7070833444595337 0.0 -0.7070833444595337 0.4504193961620331 0.015914514660835266 0.4504193961620331 0.015914514660835266 0.07545191049575806 -0.20835745334625244 -0.07545202970504761 0.7070833444595337 0.0 -0.7070833444595337 0.4504193961620331 0.225510373711586 0.4504193961620331 0.225510373711586 -1.0641600489691427e-08 -0.20835745334625244 -0.10670521855354309 0.0 0.0 -1.0 0.5129194259643555 0.225510373711586 0.5129194259643555 0.225510373711586 0.10670509934425354 -0.07792764902114868 -1.2191291887120315e-07 1.0 0.0 -0.0 0.3879193961620331 0.015914514660835266 0.3879193961620331 0.015914514660835266 0.10670509934425354 -0.20835745334625244 -1.216602072418027e-07 1.0 0.0 -0.0 0.3879193961620331 0.225510373711586 0.3879193961620331 0.225510373711586 0.07545191049575806 -0.20835745334625244 -0.07545202970504761 0.7070833444595337 0.0 -0.7070833444595337 0.4504193961620331 0.225510373711586 0.4504193961620331 0.225510373711586 0.10137978196144104 0.009099066257476807 -0.10137990117073059 0.6311227679252625 -0.4508804678916931 -0.6311227679252625 0.7500001192092896 0.5012654662132263 0.7500001192092896 0.5012654662132263 0.16332030296325684 0.16102918982505798 -0.16332048177719116 0.6650899052619934 -0.3395184278488159 -0.6650899052619934 0.75 0.8762654662132263 0.75 0.8762654662132263 0.2309698462486267 0.16102918982505798 -1.262017548242511e-07 0.9405804872512817 -0.3395184278488159 -0.0 0.5 0.8762653470039368 0.5 0.8762653470039368 0 1 2 0 3 4 5 0 6 7 8 0 9 10 11 0 12 13 14 0 15 16 17 0 18 19 20 0 21 22 23 0 24 25 26 0 27 28 29 0 30 31 32 0 33 34 35 0 36 37 38 0 39 40 41 0 42 43 44 0 45 46 47 0 48 49 50 0 51 52 53 0 54 55 56 0 57 58 59 0 60 61 62 0 63 64 65 0 66 67 68 0 69 70 71 0 72 73 74 0 75 76 77 0 78 79 80 0 81 82 83 0 84 85 86 0 87 88 89 0 90 91 92 0 93 94 95 0 96 97 98 0 99 100 101 0 102 103 104 0 105 106 107 0 108 109 110 0 111 112 113 0 114 115 116 0 117 118 119 0 120 121 122 0 123 124 125 0 126 127 128 0 129 130 131 0 132 133 134 0 135 136 137 0 138 139 140 0 141 142 143 0 144 145 146 0 147 148 149 0 150 151 152 0 153 154 155 0 156 157 158 0 159 160 161 0 162 163 164 0 165 166 167 0 168 169 170 0 171 172 173 0 174 175 176 0 177 178 179 0 180 181 182 0 183 184 185 0 186 187 188 0 189 190 191 0 192 193 194 0 195 196 197 0 198 199 200 0 201 202 203 0 204 205 206 0 207 208 209 0 210 211 212 0 213 214 215 0 216 217 218 0 219 220 221 0 222 223 224 0 225 226 227 0 228 229 230 0 231 232 233 0 234 235 236 0 237 238 239 0 240 241 242 0 243 244 245 0 246 247 248 0 249 250 251 0 252 253 254 0 255 256 257 0 258 259 260 0 261 262 263 0 264 265 266 0 267 268 269 0 270 271 272 0 273 274 275 0 276 277 278 0 279 280 281 0 282 283 284 0 285 286 287 0 288 289 290 0 291 292 293 0 294 295 296 0 297 298 299 0 300 301 302 0 303 304 305 0 306 307 308 0 309 310 311 0 312 313 314 0 315 316 317 0 318 319 320 0 321 322 323 0 324 325 326 0 327 328 329 0 330 331 332 0 333 334 335 0 336 337 338 0 339 340 341 0 342 343 344 0 345 346 347 0 348 349 350 0 351 352 353 0 354 355 356 0 357 358 359 0 360 361 362 0 363 364 365 0 366 367 368 0 369 370 371 0 372 373 374 0 375 376 377 0 378 379 380 0 381 382 383 0 ================================================ FILE: data/models/dev/plane.dymdl ================================================ DYMDLv1 972 324 1 1 1 dev/white 1.9999998807907104 1.5555555820465088 -0.0 0.0 0.0 1.0 1.0 0.8888888955116272 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.5555554628372192 2.0 -0.0 0.0 0.0 1.0 0.8888888955116272 1.0 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.5555554628372192 1.5555555820465088 -0.0 0.0 0.0 1.0 0.8888888359069824 0.8888888955116272 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -1.5555554628372192 1.5555555820465088 -0.0 0.0 0.0 1.0 0.111111119389534 0.8888888955116272 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.9999998807907104 2.0 -0.0 0.0 0.0 1.0 0.0 1.0 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.9999998807907104 1.5555555820465088 -0.0 0.0 0.0 1.0 0.0 0.8888888955116272 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.111111044883728 1.5555555820465088 -0.0 0.0 0.0 1.0 0.222222238779068 0.8888888955116272 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -1.5555554628372192 2.0 -0.0 0.0 0.0 1.0 0.111111119389534 1.0 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -1.5555554628372192 1.5555555820465088 -0.0 0.0 0.0 1.0 0.111111119389534 0.8888888955116272 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.6666666269302368 1.5555555820465088 -0.0 0.0 0.0 1.0 0.3333333730697632 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -1.111111044883728 2.0 -0.0 0.0 0.0 1.0 0.222222238779068 1.0 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -1.111111044883728 1.5555555820465088 -0.0 0.0 0.0 1.0 0.222222238779068 0.8888888955116272 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -0.2222222089767456 1.5555555820465088 -0.0 0.0 0.0 1.0 0.444444477558136 0.8888888955116272 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.6666666269302368 2.0 -0.0 0.0 0.0 1.0 0.3333333730697632 1.0 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.6666666269302368 1.5555555820465088 -0.0 0.0 0.0 1.0 0.3333333730697632 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.2222222089767456 1.5555555820465088 -0.0 0.0 0.0 1.0 0.5555555820465088 0.8888888955116272 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 2.0 -0.0 0.0 0.0 1.0 0.444444477558136 1.0 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 1.5555555820465088 -0.0 0.0 0.0 1.0 0.444444477558136 0.8888888955116272 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.6666666269302368 1.5555555820465088 -0.0 0.0 0.0 1.0 0.6666666269302368 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.2222222089767456 2.0 -0.0 0.0 0.0 1.0 0.5555555820465088 1.0 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 1.5555555820465088 -0.0 0.0 0.0 1.0 0.5555555820465088 0.8888888955116272 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 1.111111044883728 1.5555555820465088 -0.0 0.0 0.0 1.0 0.7777777910232544 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.6666666269302368 2.0 -0.0 0.0 0.0 1.0 0.6666666865348816 1.0 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.6666666269302368 1.5555555820465088 -0.0 0.0 0.0 1.0 0.6666666269302368 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.5555554628372192 1.5555555820465088 -0.0 0.0 0.0 1.0 0.8888888359069824 0.8888888955116272 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.111111044883728 2.0 -0.0 0.0 0.0 1.0 0.7777777910232544 1.0 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.111111044883728 1.5555555820465088 -0.0 0.0 0.0 1.0 0.7777777910232544 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -2.0 -0.0 0.0 0.0 1.0 0.1111111119389534 0.0 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.9999998807907104 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.0 0.111111119389534 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.9999998807907104 -2.0 -0.0 0.0 0.0 1.0 0.0 0.0 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.1111111119389534 0.1111111119389534 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.9999998807907104 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.0 0.222222238779068 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.9999998807907104 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.0 0.111111119389534 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.1111111119389534 0.2222222238779068 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.9999998807907104 -0.6666666865348816 -0.0 0.0 0.0 1.0 0.0 0.3333333730697632 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.9999998807907104 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.0 0.222222238779068 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.111111119389534 0.3333333432674408 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.9999998807907104 -0.22222226858139038 -0.0 0.0 0.0 0.999969482421875 0.0 0.444444477558136 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 -1.9999998807907104 -0.6666666865348816 -0.0 0.0 0.0 1.0 0.0 0.3333333730697632 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.111111119389534 0.444444477558136 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.9999998807907104 0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.0 0.5555555820465088 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.9999998807907104 -0.22222226858139038 -0.0 0.0 0.0 0.999969482421875 0.0 0.444444477558136 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 -1.5555554628372192 0.22222226858139038 -0.0 0.0 0.0 1.0 0.111111119389534 0.5555555820465088 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.9999998807907104 0.6666666865348816 -0.0 0.0 0.0 1.0 0.0 0.6666666865348816 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.9999998807907104 0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.0 0.5555555820465088 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.5555554628372192 0.6666666865348816 -0.0 0.0 0.0 1.0 0.111111119389534 0.6666666865348816 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.9999998807907104 1.1111111640930176 -0.0 0.0 0.0 1.0 0.0 0.7777777910232544 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.9999998807907104 0.6666666865348816 -0.0 0.0 0.0 1.0 0.0 0.6666666865348816 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 1.1111111640930176 -0.0 0.0 0.0 1.0 0.111111119389534 0.7777777910232544 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.9999998807907104 1.5555555820465088 -0.0 0.0 0.0 1.0 0.0 0.8888888955116272 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.9999998807907104 1.1111111640930176 -0.0 0.0 0.0 1.0 0.0 0.7777777910232544 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 -2.0 -0.0 0.0 0.0 1.0 0.2222222238779068 0.0 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.1111111119389534 0.1111111119389534 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -2.0 -0.0 0.0 0.0 1.0 0.1111111119389534 0.0 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.111111044883728 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.2222222238779068 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.1111111119389534 0.2222222238779068 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.1111111119389534 0.1111111119389534 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.111111044883728 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.2222222238779068 0.2222222238779068 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.111111119389534 0.3333333432674408 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.1111111119389534 0.2222222238779068 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.111111044883728 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.222222238779068 0.3333333432674408 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.111111119389534 0.444444477558136 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.111111119389534 0.3333333432674408 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.111111044883728 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.222222238779068 0.444444477558136 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 0.22222226858139038 -0.0 0.0 0.0 1.0 0.111111119389534 0.5555555820465088 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.111111119389534 0.444444477558136 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.111111044883728 0.22222226858139038 -0.0 0.0 0.0 1.0 0.222222238779068 0.5555555820465088 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.5555554628372192 0.6666666865348816 -0.0 0.0 0.0 1.0 0.111111119389534 0.6666666865348816 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.5555554628372192 0.22222226858139038 -0.0 0.0 0.0 1.0 0.111111119389534 0.5555555820465088 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.111111044883728 0.6666666865348816 -0.0 0.0 0.0 1.0 0.222222238779068 0.6666666865348816 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.5555554628372192 1.1111111640930176 -0.0 0.0 0.0 1.0 0.111111119389534 0.7777777910232544 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.5555554628372192 0.6666666865348816 -0.0 0.0 0.0 1.0 0.111111119389534 0.6666666865348816 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 1.1111111640930176 -0.0 0.0 0.0 1.0 0.222222238779068 0.7777777910232544 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -1.5555554628372192 1.5555555820465088 -0.0 0.0 0.0 1.0 0.111111119389534 0.8888888955116272 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.5555554628372192 1.1111111640930176 -0.0 0.0 0.0 1.0 0.111111119389534 0.7777777910232544 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -2.0 -0.0 0.0 0.0 1.0 0.3333333432674408 0.0 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.2222222238779068 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 -2.0 -0.0 0.0 0.0 1.0 0.2222222238779068 0.0 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.3333333432674408 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.2222222238779068 0.2222222238779068 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.111111044883728 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.2222222238779068 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.3333333730697632 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.222222238779068 0.3333333432674408 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.111111044883728 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.2222222238779068 0.2222222238779068 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.3333333730697632 0.3333333432674408 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.222222238779068 0.444444477558136 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.111111044883728 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.222222238779068 0.3333333432674408 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.3333333432674408 0.444444477558136 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.111111044883728 0.22222226858139038 -0.0 0.0 0.0 1.0 0.222222238779068 0.5555555820465088 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.222222238779068 0.444444477558136 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -0.6666666269302368 0.22222226858139038 -0.0 0.0 0.0 1.0 0.3333333730697632 0.5555555820465088 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -1.111111044883728 0.6666666865348816 -0.0 0.0 0.0 1.0 0.222222238779068 0.6666666865348816 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.111111044883728 0.22222226858139038 -0.0 0.0 0.0 1.0 0.222222238779068 0.5555555820465088 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.6666666269302368 0.6666666865348816 -0.0 0.0 0.0 1.0 0.3333333730697632 0.6666666865348816 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -1.111111044883728 1.1111111640930176 -0.0 0.0 0.0 1.0 0.222222238779068 0.7777777910232544 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -1.111111044883728 0.6666666865348816 -0.0 0.0 0.0 1.0 0.222222238779068 0.6666666865348816 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.6666666269302368 1.1111111640930176 -0.0 0.0 0.0 1.0 0.3333333730697632 0.7777777910232544 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -1.111111044883728 1.5555555820465088 -0.0 0.0 0.0 1.0 0.222222238779068 0.8888888955116272 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -1.111111044883728 1.1111111640930176 -0.0 0.0 0.0 1.0 0.222222238779068 0.7777777910232544 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -2.0 -0.0 0.0 0.0 1.0 0.444444477558136 0.0 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.3333333432674408 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -2.0 -0.0 0.0 0.0 1.0 0.3333333432674408 0.0 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.444444477558136 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.3333333730697632 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.3333333432674408 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.444444477558136 0.2222222238779068 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.3333333730697632 0.3333333432674408 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.3333333730697632 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.444444477558136 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.3333333432674408 0.444444477558136 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.3333333730697632 0.3333333432674408 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.444444477558136 0.444444477558136 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.6666666269302368 0.22222226858139038 -0.0 0.0 0.0 1.0 0.3333333730697632 0.5555555820465088 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.3333333432674408 0.444444477558136 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 0.22222226858139038 -0.0 0.0 0.0 1.0 0.444444477558136 0.5555555820465088 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.6666666269302368 0.6666666865348816 -0.0 0.0 0.0 1.0 0.3333333730697632 0.6666666865348816 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.6666666269302368 0.22222226858139038 -0.0 0.0 0.0 1.0 0.3333333730697632 0.5555555820465088 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -0.2222222089767456 0.6666666865348816 -0.0 0.0 0.0 1.0 0.444444477558136 0.6666666865348816 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.6666666269302368 1.1111111640930176 -0.0 0.0 0.0 1.0 0.3333333730697632 0.7777777910232544 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.6666666269302368 0.6666666865348816 -0.0 0.0 0.0 1.0 0.3333333730697632 0.6666666865348816 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.2222222089767456 1.1111111640930176 -0.0 0.0 0.0 1.0 0.444444477558136 0.7777777910232544 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.6666666269302368 1.5555555820465088 -0.0 0.0 0.0 1.0 0.3333333730697632 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.6666666269302368 1.1111111640930176 -0.0 0.0 0.0 1.0 0.3333333730697632 0.7777777910232544 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.2222222089767456 -2.0 -0.0 0.0 0.0 1.0 0.5555555820465088 0.0 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.444444477558136 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -2.0 -0.0 0.0 0.0 1.0 0.444444477558136 0.0 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.5555555820465088 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.444444477558136 0.2222222238779068 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.444444477558136 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.5555555820465088 0.2222222238779068 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.444444477558136 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.444444477558136 0.2222222238779068 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.5555555820465088 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.444444477558136 0.444444477558136 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.444444477558136 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.5555555820465088 0.444444477558136 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.2222222089767456 0.22222226858139038 -0.0 0.0 0.0 1.0 0.444444477558136 0.5555555820465088 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.444444477558136 0.444444477558136 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.2222222089767456 0.22222226858139038 -0.0 0.0 0.0 1.0 0.5555555820465088 0.5555555820465088 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 0.6666666865348816 -0.0 0.0 0.0 1.0 0.444444477558136 0.6666666865348816 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 0.22222226858139038 -0.0 0.0 0.0 1.0 0.444444477558136 0.5555555820465088 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 0.6666666865348816 -0.0 0.0 0.0 1.0 0.5555555820465088 0.6666666865348816 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 1.1111111640930176 -0.0 0.0 0.0 1.0 0.444444477558136 0.7777777910232544 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 0.6666666865348816 -0.0 0.0 0.0 1.0 0.444444477558136 0.6666666865348816 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 1.1111111640930176 -0.0 0.0 0.0 1.0 0.5555555820465088 0.7777777910232544 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 1.5555555820465088 -0.0 0.0 0.0 1.0 0.444444477558136 0.8888888955116272 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 1.1111111640930176 -0.0 0.0 0.0 1.0 0.444444477558136 0.7777777910232544 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.6666666269302368 -2.0 -0.0 0.0 0.0 1.0 0.6666666865348816 0.0 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.5555555820465088 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -2.0 -0.0 0.0 0.0 1.0 0.5555555820465088 0.0 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.6666666269302368 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.6666666865348816 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.5555555820465088 0.2222222238779068 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.5555555820465088 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.6666666269302368 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.6666666865348816 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 0.2222222089767456 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.5555555820465088 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.5555555820465088 0.2222222238779068 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.6666666269302368 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.6666666865348816 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.5555555820465088 0.444444477558136 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.2222222089767456 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.5555555820465088 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.6666666269302368 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.6666666865348816 0.444444477558136 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 0.2222222089767456 0.22222226858139038 -0.0 0.0 0.0 1.0 0.5555555820465088 0.5555555820465088 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.5555555820465088 0.444444477558136 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.6666666269302368 0.22222226858139038 -0.0 0.0 0.0 1.0 0.6666666865348816 0.5555555820465088 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.2222222089767456 0.6666666865348816 -0.0 0.0 0.0 1.0 0.5555555820465088 0.6666666865348816 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 0.22222226858139038 -0.0 0.0 0.0 1.0 0.5555555820465088 0.5555555820465088 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.6666666269302368 0.6666666865348816 -0.0 0.0 0.0 1.0 0.6666666865348816 0.6666666865348816 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.2222222089767456 1.1111111640930176 -0.0 0.0 0.0 1.0 0.5555555820465088 0.7777777910232544 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 0.6666666865348816 -0.0 0.0 0.0 1.0 0.5555555820465088 0.6666666865348816 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.6666666269302368 1.1111111640930176 -0.0 0.0 0.0 1.0 0.6666666269302368 0.7777777910232544 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.2222222089767456 1.5555555820465088 -0.0 0.0 0.0 1.0 0.5555555820465088 0.8888888955116272 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 1.1111111640930176 -0.0 0.0 0.0 1.0 0.5555555820465088 0.7777777910232544 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 1.111111044883728 -2.0 -0.0 0.0 0.0 1.0 0.7777777910232544 0.0 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 0.6666666269302368 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.6666666865348816 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.6666666269302368 -2.0 -0.0 0.0 0.0 1.0 0.6666666865348816 0.0 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.111111044883728 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.7777777910232544 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 0.6666666269302368 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.6666666865348816 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 0.6666666269302368 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.6666666865348816 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.111111044883728 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.7777777910232544 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 0.6666666269302368 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.6666666865348816 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.6666666269302368 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.6666666865348816 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.7777777910232544 0.3333333432674408 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 0.6666666269302368 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.6666666865348816 0.444444477558136 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 0.6666666269302368 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.6666666865348816 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.111111044883728 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.7777777910232544 0.444444477558136 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 0.6666666269302368 0.22222226858139038 -0.0 0.0 0.0 1.0 0.6666666865348816 0.5555555820465088 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.6666666269302368 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.6666666865348816 0.444444477558136 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.111111044883728 0.22222226858139038 -0.0 0.0 0.0 1.0 0.7777777910232544 0.5555555820465088 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.6666666269302368 0.6666666865348816 -0.0 0.0 0.0 1.0 0.6666666865348816 0.6666666865348816 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.6666666269302368 0.22222226858139038 -0.0 0.0 0.0 1.0 0.6666666865348816 0.5555555820465088 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.111111044883728 0.6666666865348816 -0.0 0.0 0.0 1.0 0.7777777910232544 0.6666666865348816 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 0.6666666269302368 1.1111111640930176 -0.0 0.0 0.0 1.0 0.6666666269302368 0.7777777910232544 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.6666666269302368 0.6666666865348816 -0.0 0.0 0.0 1.0 0.6666666865348816 0.6666666865348816 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.111111044883728 1.1111111640930176 -0.0 0.0 0.0 1.0 0.7777777910232544 0.7777777910232544 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 0.6666666269302368 1.5555555820465088 -0.0 0.0 0.0 1.0 0.6666666269302368 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.6666666269302368 1.1111111640930176 -0.0 0.0 0.0 1.0 0.6666666269302368 0.7777777910232544 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.5555554628372192 -2.0 -0.0 0.0 0.0 1.0 0.8888888955116272 0.0 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.7777777910232544 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 -2.0 -0.0 0.0 0.0 1.0 0.7777777910232544 0.0 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.8888888955116272 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.7777777910232544 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.7777777910232544 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.8888888955116272 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.7777777910232544 0.3333333432674408 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.7777777910232544 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.8888888955116272 0.3333333432674408 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.111111044883728 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.7777777910232544 0.444444477558136 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.7777777910232544 0.3333333432674408 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.8888888359069824 0.444444477558136 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.111111044883728 0.22222226858139038 -0.0 0.0 0.0 1.0 0.7777777910232544 0.5555555820465088 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.111111044883728 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.7777777910232544 0.444444477558136 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 0.22222226858139038 -0.0 0.0 0.0 1.0 0.8888888359069824 0.5555555820465088 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 0.6666666865348816 -0.0 0.0 0.0 1.0 0.7777777910232544 0.6666666865348816 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.111111044883728 0.22222226858139038 -0.0 0.0 0.0 1.0 0.7777777910232544 0.5555555820465088 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.5555554628372192 0.6666666865348816 -0.0 0.0 0.0 1.0 0.8888888359069824 0.6666666865348816 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.111111044883728 1.1111111640930176 -0.0 0.0 0.0 1.0 0.7777777910232544 0.7777777910232544 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.111111044883728 0.6666666865348816 -0.0 0.0 0.0 1.0 0.7777777910232544 0.6666666865348816 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.5555554628372192 1.1111111640930176 -0.0 0.0 0.0 1.0 0.8888888359069824 0.7777777910232544 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.111111044883728 1.5555555820465088 -0.0 0.0 0.0 1.0 0.7777777910232544 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.111111044883728 1.1111111640930176 -0.0 0.0 0.0 1.0 0.7777777910232544 0.7777777910232544 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.9999998807907104 -2.0 -0.0 0.0 0.0 1.0 1.0 0.0 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.8888888955116272 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -2.0 -0.0 0.0 0.0 1.0 0.8888888955116272 0.0 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.9999998807907104 -1.5555555820465088 -0.0 0.0 0.0 1.0 1.0 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.8888888955116272 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.8888888955116272 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.9999998807907104 -1.1111111640930176 -0.0 0.0 0.0 1.0 1.0 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.8888888955116272 0.3333333432674408 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.5555554628372192 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.8888888955116272 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.9999998807907104 -0.6666666865348816 -0.0 0.0 0.0 1.0 1.0 0.3333333432674408 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.5555554628372192 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.8888888359069824 0.444444477558136 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.5555554628372192 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.8888888955116272 0.3333333432674408 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.9999998807907104 -0.2222222089767456 -0.0 0.0 0.0 1.0 1.0 0.444444477558136 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.5555554628372192 0.22222226858139038 -0.0 0.0 0.0 1.0 0.8888888359069824 0.5555555820465088 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.8888888359069824 0.444444477558136 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.9999998807907104 0.22222226858139038 -0.0 0.0 0.0 1.0 1.0 0.5555555820465088 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 0.6666666865348816 -0.0 0.0 0.0 1.0 0.8888888359069824 0.6666666865348816 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.5555554628372192 0.22222226858139038 -0.0 0.0 0.0 1.0 0.8888888359069824 0.5555555820465088 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.9999998807907104 0.6666666865348816 -0.0 0.0 0.0 1.0 1.0 0.6666666865348816 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.5555554628372192 1.1111111640930176 -0.0 0.0 0.0 1.0 0.8888888359069824 0.7777777910232544 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.5555554628372192 0.6666666865348816 -0.0 0.0 0.0 1.0 0.8888888359069824 0.6666666865348816 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.9999998807907104 1.1111111640930176 -0.0 0.0 0.0 1.0 1.0 0.7777777910232544 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.5555554628372192 1.5555555820465088 -0.0 0.0 0.0 1.0 0.8888888359069824 0.8888888955116272 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.5555554628372192 1.1111111640930176 -0.0 0.0 0.0 1.0 0.8888888359069824 0.7777777910232544 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.5555554628372192 2.0 -0.0 0.0 0.0 -1.0 0.8888888955116272 1.0 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.9999998807907104 1.5555555820465088 -0.0 0.0 0.0 -1.0 1.0 0.8888888955116272 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.5555554628372192 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.8888888359069824 0.8888888955116272 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -1.9999998807907104 2.0 -0.0 0.0 0.0 -1.0 0.0 1.0 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.5555554628372192 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.111111119389534 0.8888888955116272 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.9999998807907104 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.0 0.8888888955116272 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.5555554628372192 2.0 -0.0 0.0 0.0 -1.0 0.111111119389534 1.0 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -1.111111044883728 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.222222238779068 0.8888888955116272 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -1.5555554628372192 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.111111119389534 0.8888888955116272 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.111111044883728 2.0 -0.0 0.0 0.0 -1.0 0.222222238779068 1.0 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -0.6666666269302368 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.3333333730697632 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -1.111111044883728 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.222222238779068 0.8888888955116272 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -0.6666666269302368 2.0 -0.0 0.0 0.0 -1.0 0.3333333730697632 1.0 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.2222222089767456 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.444444477558136 0.8888888955116272 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.6666666269302368 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.3333333730697632 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.2222222089767456 2.0 -0.0 0.0 0.0 -1.0 0.444444477558136 1.0 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.8888888955116272 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.444444477558136 0.8888888955116272 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 2.0 -0.0 0.0 0.0 -1.0 0.5555555820465088 1.0 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.6666666269302368 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.6666666269302368 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.2222222089767456 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.8888888955116272 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.6666666269302368 2.0 -0.0 0.0 0.0 -1.0 0.6666666865348816 1.0 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.111111044883728 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.6666666269302368 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.6666666269302368 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.111111044883728 2.0 -0.0 0.0 0.0 -1.0 0.7777777910232544 1.0 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.5555554628372192 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.8888888359069824 0.8888888955116272 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.111111044883728 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -1.9999998807907104 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.0 0.111111119389534 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -2.0 -0.0 0.0 0.0 -1.0 0.1111111119389534 0.0 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.9999998807907104 -2.0 -0.0 0.0 0.0 -1.0 0.0 0.0 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.9999998807907104 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.0 0.222222238779068 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.1111111119389534 0.1111111119389534 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.9999998807907104 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.0 0.111111119389534 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.9999998807907104 -0.6666666865348816 -0.0 0.0 0.0 -1.0 0.0 0.3333333730697632 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.1111111119389534 0.2222222238779068 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.9999998807907104 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.0 0.222222238779068 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.9999998807907104 -0.22222226858139038 -0.0 0.0 0.0 -0.999969482421875 0.0 0.444444477558136 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.111111119389534 0.3333333432674408 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.9999998807907104 -0.6666666865348816 -0.0 0.0 0.0 -1.0 0.0 0.3333333730697632 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.9999998807907104 0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.0 0.5555555820465088 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.111111119389534 0.444444477558136 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.9999998807907104 -0.22222226858139038 -0.0 0.0 0.0 -0.999969482421875 0.0 0.444444477558136 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 -1.9999998807907104 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.0 0.6666666865348816 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.111111119389534 0.5555555820465088 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.9999998807907104 0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.0 0.5555555820465088 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.9999998807907104 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.0 0.7777777910232544 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.5555554628372192 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.111111119389534 0.6666666865348816 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.9999998807907104 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.0 0.6666666865348816 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.9999998807907104 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.0 0.8888888955116272 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.5555554628372192 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.111111119389534 0.7777777910232544 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.9999998807907104 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.0 0.7777777910232544 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.1111111119389534 0.1111111119389534 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.111111044883728 -2.0 -0.0 0.0 0.0 -1.0 0.2222222238779068 0.0 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -2.0 -0.0 0.0 0.0 -1.0 0.1111111119389534 0.0 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.1111111119389534 0.2222222238779068 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.111111044883728 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.2222222238779068 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.1111111119389534 0.1111111119389534 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.111111119389534 0.3333333432674408 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.111111044883728 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.2222222238779068 0.2222222238779068 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.1111111119389534 0.2222222238779068 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.111111119389534 0.444444477558136 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.111111044883728 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.222222238779068 0.3333333432674408 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.111111119389534 0.3333333432674408 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.5555554628372192 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.111111119389534 0.5555555820465088 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.111111044883728 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.222222238779068 0.444444477558136 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.111111119389534 0.444444477558136 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.5555554628372192 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.111111119389534 0.6666666865348816 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.222222238779068 0.5555555820465088 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.5555554628372192 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.111111119389534 0.5555555820465088 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.111111119389534 0.7777777910232544 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.222222238779068 0.6666666865348816 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.5555554628372192 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.111111119389534 0.6666666865348816 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.5555554628372192 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.111111119389534 0.8888888955116272 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.111111044883728 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.222222238779068 0.7777777910232544 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -1.5555554628372192 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.111111119389534 0.7777777910232544 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.2222222238779068 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -2.0 -0.0 0.0 0.0 -1.0 0.3333333432674408 0.0 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 -2.0 -0.0 0.0 0.0 -1.0 0.2222222238779068 0.0 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.2222222238779068 0.2222222238779068 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.3333333432674408 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.2222222238779068 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.222222238779068 0.3333333432674408 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.3333333730697632 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.2222222238779068 0.2222222238779068 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.111111044883728 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.222222238779068 0.444444477558136 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.3333333730697632 0.3333333432674408 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.222222238779068 0.3333333432674408 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.111111044883728 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.222222238779068 0.5555555820465088 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.3333333432674408 0.444444477558136 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.111111044883728 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.222222238779068 0.444444477558136 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.111111044883728 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.222222238779068 0.6666666865348816 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.6666666269302368 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.3333333730697632 0.5555555820465088 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -1.111111044883728 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.222222238779068 0.5555555820465088 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.222222238779068 0.7777777910232544 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -0.6666666269302368 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.3333333730697632 0.6666666865348816 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -1.111111044883728 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.222222238779068 0.6666666865348816 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.111111044883728 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.222222238779068 0.8888888955116272 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -0.6666666269302368 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.3333333730697632 0.7777777910232544 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -1.111111044883728 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.222222238779068 0.7777777910232544 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.3333333432674408 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -2.0 -0.0 0.0 0.0 -1.0 0.444444477558136 0.0 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -2.0 -0.0 0.0 0.0 -1.0 0.3333333432674408 0.0 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.3333333730697632 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.444444477558136 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.3333333432674408 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.3333333730697632 0.3333333432674408 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.444444477558136 0.2222222238779068 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.3333333730697632 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.3333333432674408 0.444444477558136 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.444444477558136 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.3333333730697632 0.3333333432674408 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.6666666269302368 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.3333333730697632 0.5555555820465088 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.444444477558136 0.444444477558136 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.3333333432674408 0.444444477558136 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.6666666269302368 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.3333333730697632 0.6666666865348816 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.2222222089767456 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.444444477558136 0.5555555820465088 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.6666666269302368 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.3333333730697632 0.5555555820465088 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -0.6666666269302368 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.3333333730697632 0.7777777910232544 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.2222222089767456 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.444444477558136 0.6666666865348816 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.6666666269302368 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.3333333730697632 0.6666666865348816 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.6666666269302368 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.3333333730697632 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.2222222089767456 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.444444477558136 0.7777777910232544 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.6666666269302368 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.3333333730697632 0.7777777910232544 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.444444477558136 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -2.0 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.0 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -2.0 -0.0 0.0 0.0 -1.0 0.444444477558136 0.0 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.444444477558136 0.2222222238779068 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.444444477558136 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.444444477558136 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.2222222238779068 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.444444477558136 0.2222222238779068 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.444444477558136 0.444444477558136 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.2222222089767456 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.5555555820465088 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.444444477558136 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.444444477558136 0.5555555820465088 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.5555555820465088 0.444444477558136 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.444444477558136 0.444444477558136 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.2222222089767456 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.444444477558136 0.6666666865348816 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.5555555820465088 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.444444477558136 0.5555555820465088 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.444444477558136 0.7777777910232544 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.6666666865348816 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.444444477558136 0.6666666865348816 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.444444477558136 0.8888888955116272 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.7777777910232544 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.444444477558136 0.7777777910232544 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.6666666269302368 -2.0 -0.0 0.0 0.0 -1.0 0.6666666865348816 0.0 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -2.0 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.0 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.2222222238779068 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.6666666269302368 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.6666666865348816 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.5555555820465088 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.6666666269302368 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.6666666865348816 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 0.2222222089767456 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.2222222238779068 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.5555555820465088 0.444444477558136 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.6666666269302368 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.6666666865348816 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.5555555820465088 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.5555555820465088 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.6666666269302368 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.6666666865348816 0.444444477558136 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 0.2222222089767456 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.5555555820465088 0.444444477558136 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.2222222089767456 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.6666666865348816 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.6666666269302368 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.6666666865348816 0.5555555820465088 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.2222222089767456 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.5555555820465088 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.7777777910232544 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.6666666269302368 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.6666666865348816 0.6666666865348816 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.2222222089767456 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.6666666865348816 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.8888888955116272 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.6666666269302368 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.6666666269302368 0.7777777910232544 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.2222222089767456 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.7777777910232544 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.6666666269302368 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.6666666865348816 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.111111044883728 -2.0 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.0 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 0.6666666269302368 -2.0 -0.0 0.0 0.0 -1.0 0.6666666865348816 0.0 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.6666666269302368 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.6666666865348816 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 0.6666666269302368 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.6666666865348816 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.6666666269302368 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.6666666865348816 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.111111044883728 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 0.6666666269302368 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.6666666865348816 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 0.6666666269302368 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.6666666865348816 0.444444477558136 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.111111044883728 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.7777777910232544 0.3333333432674408 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 0.6666666269302368 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.6666666865348816 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.6666666269302368 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.6666666865348816 0.5555555820465088 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.111111044883728 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.7777777910232544 0.444444477558136 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 0.6666666269302368 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.6666666865348816 0.444444477558136 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 0.6666666269302368 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.6666666865348816 0.6666666865348816 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.111111044883728 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.5555555820465088 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.6666666269302368 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.6666666865348816 0.5555555820465088 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.6666666269302368 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.6666666269302368 0.7777777910232544 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.111111044883728 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.6666666865348816 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 0.6666666269302368 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.6666666865348816 0.6666666865348816 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.6666666269302368 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.6666666269302368 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.111111044883728 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.7777777910232544 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 0.6666666269302368 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.6666666269302368 0.7777777910232544 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.111111044883728 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -2.0 -0.0 0.0 0.0 -1.0 0.8888888955116272 0.0 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 -2.0 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.0 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.8888888955116272 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.7777777910232544 0.3333333432674408 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.8888888955116272 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.7777777910232544 0.444444477558136 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.8888888955116272 0.3333333432674408 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.111111044883728 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.7777777910232544 0.3333333432674408 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.5555555820465088 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.5555554628372192 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.8888888359069824 0.444444477558136 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.111111044883728 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.7777777910232544 0.444444477558136 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.6666666865348816 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.5555554628372192 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.8888888359069824 0.5555555820465088 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.5555555820465088 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.111111044883728 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.7777777910232544 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.5555554628372192 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.8888888359069824 0.6666666865348816 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.111111044883728 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.6666666865348816 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.111111044883728 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.5555554628372192 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.8888888359069824 0.7777777910232544 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.111111044883728 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.7777777910232544 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.5555554628372192 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.8888888955116272 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.9999998807907104 -2.0 -0.0 0.0 0.0 -1.0 1.0 0.0 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -2.0 -0.0 0.0 0.0 -1.0 0.8888888955116272 0.0 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.8888888955116272 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.9999998807907104 -1.5555555820465088 -0.0 0.0 0.0 -1.0 1.0 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.8888888955116272 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.8888888955116272 0.3333333432674408 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.9999998807907104 -1.1111111640930176 -0.0 0.0 0.0 -1.0 1.0 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.8888888955116272 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.8888888359069824 0.444444477558136 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.9999998807907104 -0.6666666865348816 -0.0 0.0 0.0 -1.0 1.0 0.3333333432674408 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.5555554628372192 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.8888888955116272 0.3333333432674408 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.5555554628372192 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.8888888359069824 0.5555555820465088 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.9999998807907104 -0.2222222089767456 -0.0 0.0 0.0 -1.0 1.0 0.444444477558136 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.5555554628372192 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.8888888359069824 0.444444477558136 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.5555554628372192 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.8888888359069824 0.6666666865348816 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.9999998807907104 0.22222226858139038 -0.0 0.0 0.0 -1.0 1.0 0.5555555820465088 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.8888888359069824 0.5555555820465088 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.8888888359069824 0.7777777910232544 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.9999998807907104 0.6666666865348816 -0.0 0.0 0.0 -1.0 1.0 0.6666666865348816 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.5555554628372192 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.8888888359069824 0.6666666865348816 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.5555554628372192 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.8888888359069824 0.8888888955116272 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.9999998807907104 1.1111111640930176 -0.0 0.0 0.0 -1.0 1.0 0.7777777910232544 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.5555554628372192 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.8888888359069824 0.7777777910232544 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.9999998807907104 1.5555555820465088 -0.0 0.0 0.0 1.0 1.0 0.8888888955116272 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.9999998807907104 2.0 -0.0 0.0 0.0 1.0 1.0 1.0 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.5555554628372192 2.0 -0.0 0.0 0.0 1.0 0.8888888955116272 1.0 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -1.5555554628372192 1.5555555820465088 -0.0 0.0 0.0 1.0 0.111111119389534 0.8888888955116272 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.5555554628372192 2.0 -0.0 0.0 0.0 1.0 0.111111119389534 1.0 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -1.9999998807907104 2.0 -0.0 0.0 0.0 1.0 0.0 1.0 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.111111044883728 1.5555555820465088 -0.0 0.0 0.0 1.0 0.222222238779068 0.8888888955116272 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -1.111111044883728 2.0 -0.0 0.0 0.0 1.0 0.222222238779068 1.0 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -1.5555554628372192 2.0 -0.0 0.0 0.0 1.0 0.111111119389534 1.0 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -0.6666666269302368 1.5555555820465088 -0.0 0.0 0.0 1.0 0.3333333730697632 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.6666666269302368 2.0 -0.0 0.0 0.0 1.0 0.3333333730697632 1.0 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -1.111111044883728 2.0 -0.0 0.0 0.0 1.0 0.222222238779068 1.0 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -0.2222222089767456 1.5555555820465088 -0.0 0.0 0.0 1.0 0.444444477558136 0.8888888955116272 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 2.0 -0.0 0.0 0.0 1.0 0.444444477558136 1.0 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.6666666269302368 2.0 -0.0 0.0 0.0 1.0 0.3333333730697632 1.0 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.2222222089767456 1.5555555820465088 -0.0 0.0 0.0 1.0 0.5555555820465088 0.8888888955116272 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 2.0 -0.0 0.0 0.0 1.0 0.5555555820465088 1.0 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 2.0 -0.0 0.0 0.0 1.0 0.444444477558136 1.0 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.6666666269302368 1.5555555820465088 -0.0 0.0 0.0 1.0 0.6666666269302368 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.6666666269302368 2.0 -0.0 0.0 0.0 1.0 0.6666666865348816 1.0 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.2222222089767456 2.0 -0.0 0.0 0.0 1.0 0.5555555820465088 1.0 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 1.111111044883728 1.5555555820465088 -0.0 0.0 0.0 1.0 0.7777777910232544 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.111111044883728 2.0 -0.0 0.0 0.0 1.0 0.7777777910232544 1.0 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.6666666269302368 2.0 -0.0 0.0 0.0 1.0 0.6666666865348816 1.0 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.5555554628372192 1.5555555820465088 -0.0 0.0 0.0 1.0 0.8888888359069824 0.8888888955116272 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.5555554628372192 2.0 -0.0 0.0 0.0 1.0 0.8888888955116272 1.0 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.111111044883728 2.0 -0.0 0.0 0.0 1.0 0.7777777910232544 1.0 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -2.0 -0.0 0.0 0.0 1.0 0.1111111119389534 0.0 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.1111111119389534 0.1111111119389534 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.9999998807907104 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.0 0.111111119389534 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.1111111119389534 0.1111111119389534 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.1111111119389534 0.2222222238779068 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.9999998807907104 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.0 0.222222238779068 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.1111111119389534 0.2222222238779068 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.111111119389534 0.3333333432674408 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.9999998807907104 -0.6666666865348816 -0.0 0.0 0.0 1.0 0.0 0.3333333730697632 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.111111119389534 0.3333333432674408 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.111111119389534 0.444444477558136 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.9999998807907104 -0.22222226858139038 -0.0 0.0 0.0 0.999969482421875 0.0 0.444444477558136 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.111111119389534 0.444444477558136 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.5555554628372192 0.22222226858139038 -0.0 0.0 0.0 1.0 0.111111119389534 0.5555555820465088 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.9999998807907104 0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.0 0.5555555820465088 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.5555554628372192 0.22222226858139038 -0.0 0.0 0.0 1.0 0.111111119389534 0.5555555820465088 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 0.6666666865348816 -0.0 0.0 0.0 1.0 0.111111119389534 0.6666666865348816 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.9999998807907104 0.6666666865348816 -0.0 0.0 0.0 1.0 0.0 0.6666666865348816 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 0.6666666865348816 -0.0 0.0 0.0 1.0 0.111111119389534 0.6666666865348816 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.5555554628372192 1.1111111640930176 -0.0 0.0 0.0 1.0 0.111111119389534 0.7777777910232544 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.9999998807907104 1.1111111640930176 -0.0 0.0 0.0 1.0 0.0 0.7777777910232544 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.5555554628372192 1.1111111640930176 -0.0 0.0 0.0 1.0 0.111111119389534 0.7777777910232544 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.5555554628372192 1.5555555820465088 -0.0 0.0 0.0 1.0 0.111111119389534 0.8888888955116272 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.9999998807907104 1.5555555820465088 -0.0 0.0 0.0 1.0 0.0 0.8888888955116272 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.111111044883728 -2.0 -0.0 0.0 0.0 1.0 0.2222222238779068 0.0 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.2222222238779068 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.1111111119389534 0.1111111119389534 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.111111044883728 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.2222222238779068 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.2222222238779068 0.2222222238779068 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.1111111119389534 0.2222222238779068 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.111111044883728 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.2222222238779068 0.2222222238779068 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.111111044883728 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.222222238779068 0.3333333432674408 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.111111119389534 0.3333333432674408 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.111111044883728 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.222222238779068 0.3333333432674408 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.111111044883728 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.222222238779068 0.444444477558136 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.111111119389534 0.444444477558136 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.111111044883728 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.222222238779068 0.444444477558136 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.111111044883728 0.22222226858139038 -0.0 0.0 0.0 1.0 0.222222238779068 0.5555555820465088 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.5555554628372192 0.22222226858139038 -0.0 0.0 0.0 1.0 0.111111119389534 0.5555555820465088 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.111111044883728 0.22222226858139038 -0.0 0.0 0.0 1.0 0.222222238779068 0.5555555820465088 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 0.6666666865348816 -0.0 0.0 0.0 1.0 0.222222238779068 0.6666666865348816 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.5555554628372192 0.6666666865348816 -0.0 0.0 0.0 1.0 0.111111119389534 0.6666666865348816 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 0.6666666865348816 -0.0 0.0 0.0 1.0 0.222222238779068 0.6666666865348816 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.111111044883728 1.1111111640930176 -0.0 0.0 0.0 1.0 0.222222238779068 0.7777777910232544 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -1.5555554628372192 1.1111111640930176 -0.0 0.0 0.0 1.0 0.111111119389534 0.7777777910232544 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 1.1111111640930176 -0.0 0.0 0.0 1.0 0.222222238779068 0.7777777910232544 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -1.111111044883728 1.5555555820465088 -0.0 0.0 0.0 1.0 0.222222238779068 0.8888888955116272 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -1.5555554628372192 1.5555555820465088 -0.0 0.0 0.0 1.0 0.111111119389534 0.8888888955116272 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -2.0 -0.0 0.0 0.0 1.0 0.3333333432674408 0.0 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.3333333432674408 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.2222222238779068 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.3333333432674408 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.3333333730697632 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.2222222238779068 0.2222222238779068 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.3333333730697632 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.3333333730697632 0.3333333432674408 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.222222238779068 0.3333333432674408 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.3333333730697632 0.3333333432674408 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.3333333432674408 0.444444477558136 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.111111044883728 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.222222238779068 0.444444477558136 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.3333333432674408 0.444444477558136 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.6666666269302368 0.22222226858139038 -0.0 0.0 0.0 1.0 0.3333333730697632 0.5555555820465088 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -1.111111044883728 0.22222226858139038 -0.0 0.0 0.0 1.0 0.222222238779068 0.5555555820465088 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.6666666269302368 0.22222226858139038 -0.0 0.0 0.0 1.0 0.3333333730697632 0.5555555820465088 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -0.6666666269302368 0.6666666865348816 -0.0 0.0 0.0 1.0 0.3333333730697632 0.6666666865348816 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -1.111111044883728 0.6666666865348816 -0.0 0.0 0.0 1.0 0.222222238779068 0.6666666865348816 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.6666666269302368 0.6666666865348816 -0.0 0.0 0.0 1.0 0.3333333730697632 0.6666666865348816 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.6666666269302368 1.1111111640930176 -0.0 0.0 0.0 1.0 0.3333333730697632 0.7777777910232544 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -1.111111044883728 1.1111111640930176 -0.0 0.0 0.0 1.0 0.222222238779068 0.7777777910232544 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -0.6666666269302368 1.1111111640930176 -0.0 0.0 0.0 1.0 0.3333333730697632 0.7777777910232544 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.6666666269302368 1.5555555820465088 -0.0 0.0 0.0 1.0 0.3333333730697632 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -1.111111044883728 1.5555555820465088 -0.0 0.0 0.0 1.0 0.222222238779068 0.8888888955116272 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -2.0 -0.0 0.0 0.0 1.0 0.444444477558136 0.0 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.444444477558136 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.3333333432674408 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.444444477558136 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.444444477558136 0.2222222238779068 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.3333333730697632 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.444444477558136 0.2222222238779068 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.444444477558136 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.3333333730697632 0.3333333432674408 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.444444477558136 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.444444477558136 0.444444477558136 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.3333333432674408 0.444444477558136 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.444444477558136 0.444444477558136 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.2222222089767456 0.22222226858139038 -0.0 0.0 0.0 1.0 0.444444477558136 0.5555555820465088 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.6666666269302368 0.22222226858139038 -0.0 0.0 0.0 1.0 0.3333333730697632 0.5555555820465088 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -0.2222222089767456 0.22222226858139038 -0.0 0.0 0.0 1.0 0.444444477558136 0.5555555820465088 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 0.6666666865348816 -0.0 0.0 0.0 1.0 0.444444477558136 0.6666666865348816 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.6666666269302368 0.6666666865348816 -0.0 0.0 0.0 1.0 0.3333333730697632 0.6666666865348816 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.2222222089767456 0.6666666865348816 -0.0 0.0 0.0 1.0 0.444444477558136 0.6666666865348816 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 1.1111111640930176 -0.0 0.0 0.0 1.0 0.444444477558136 0.7777777910232544 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.6666666269302368 1.1111111640930176 -0.0 0.0 0.0 1.0 0.3333333730697632 0.7777777910232544 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.2222222089767456 1.1111111640930176 -0.0 0.0 0.0 1.0 0.444444477558136 0.7777777910232544 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 1.5555555820465088 -0.0 0.0 0.0 1.0 0.444444477558136 0.8888888955116272 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.6666666269302368 1.5555555820465088 -0.0 0.0 0.0 1.0 0.3333333730697632 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.2222222089767456 -2.0 -0.0 0.0 0.0 1.0 0.5555555820465088 0.0 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.5555555820465088 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.444444477558136 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.5555555820465088 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.5555555820465088 0.2222222238779068 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.444444477558136 0.2222222238779068 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.5555555820465088 0.2222222238779068 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.5555555820465088 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.444444477558136 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.5555555820465088 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.5555555820465088 0.444444477558136 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.444444477558136 0.444444477558136 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.2222222089767456 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.5555555820465088 0.444444477558136 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.2222222089767456 0.22222226858139038 -0.0 0.0 0.0 1.0 0.5555555820465088 0.5555555820465088 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 0.22222226858139038 -0.0 0.0 0.0 1.0 0.444444477558136 0.5555555820465088 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 0.22222226858139038 -0.0 0.0 0.0 1.0 0.5555555820465088 0.5555555820465088 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 0.6666666865348816 -0.0 0.0 0.0 1.0 0.5555555820465088 0.6666666865348816 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 0.6666666865348816 -0.0 0.0 0.0 1.0 0.444444477558136 0.6666666865348816 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 0.6666666865348816 -0.0 0.0 0.0 1.0 0.5555555820465088 0.6666666865348816 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 1.1111111640930176 -0.0 0.0 0.0 1.0 0.5555555820465088 0.7777777910232544 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 1.1111111640930176 -0.0 0.0 0.0 1.0 0.444444477558136 0.7777777910232544 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 1.1111111640930176 -0.0 0.0 0.0 1.0 0.5555555820465088 0.7777777910232544 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 1.5555555820465088 -0.0 0.0 0.0 1.0 0.5555555820465088 0.8888888955116272 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 1.5555555820465088 -0.0 0.0 0.0 1.0 0.444444477558136 0.8888888955116272 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.6666666269302368 -2.0 -0.0 0.0 0.0 1.0 0.6666666865348816 0.0 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.6666666269302368 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.6666666865348816 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.5555555820465088 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.6666666269302368 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.6666666865348816 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.6666666269302368 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.6666666865348816 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 0.2222222089767456 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.5555555820465088 0.2222222238779068 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.6666666269302368 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.6666666865348816 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 0.6666666269302368 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.6666666865348816 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.5555555820465088 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.6666666269302368 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.6666666865348816 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.6666666269302368 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.6666666865348816 0.444444477558136 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 0.2222222089767456 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.5555555820465088 0.444444477558136 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.6666666269302368 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.6666666865348816 0.444444477558136 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 0.6666666269302368 0.22222226858139038 -0.0 0.0 0.0 1.0 0.6666666865348816 0.5555555820465088 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.2222222089767456 0.22222226858139038 -0.0 0.0 0.0 1.0 0.5555555820465088 0.5555555820465088 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.6666666269302368 0.22222226858139038 -0.0 0.0 0.0 1.0 0.6666666865348816 0.5555555820465088 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.6666666269302368 0.6666666865348816 -0.0 0.0 0.0 1.0 0.6666666865348816 0.6666666865348816 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.2222222089767456 0.6666666865348816 -0.0 0.0 0.0 1.0 0.5555555820465088 0.6666666865348816 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.6666666269302368 0.6666666865348816 -0.0 0.0 0.0 1.0 0.6666666865348816 0.6666666865348816 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.6666666269302368 1.1111111640930176 -0.0 0.0 0.0 1.0 0.6666666269302368 0.7777777910232544 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.2222222089767456 1.1111111640930176 -0.0 0.0 0.0 1.0 0.5555555820465088 0.7777777910232544 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.6666666269302368 1.1111111640930176 -0.0 0.0 0.0 1.0 0.6666666269302368 0.7777777910232544 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.6666666269302368 1.5555555820465088 -0.0 0.0 0.0 1.0 0.6666666269302368 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.2222222089767456 1.5555555820465088 -0.0 0.0 0.0 1.0 0.5555555820465088 0.8888888955116272 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 1.111111044883728 -2.0 -0.0 0.0 0.0 1.0 0.7777777910232544 0.0 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.7777777910232544 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 0.6666666269302368 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.6666666865348816 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.111111044883728 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.7777777910232544 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.7777777910232544 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 0.6666666269302368 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.6666666865348816 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.7777777910232544 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.7777777910232544 0.3333333432674408 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 0.6666666269302368 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.6666666865348816 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.111111044883728 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.7777777910232544 0.3333333432674408 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.7777777910232544 0.444444477558136 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 0.6666666269302368 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.6666666865348816 0.444444477558136 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.111111044883728 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.7777777910232544 0.444444477558136 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 0.22222226858139038 -0.0 0.0 0.0 1.0 0.7777777910232544 0.5555555820465088 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.6666666269302368 0.22222226858139038 -0.0 0.0 0.0 1.0 0.6666666865348816 0.5555555820465088 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.111111044883728 0.22222226858139038 -0.0 0.0 0.0 1.0 0.7777777910232544 0.5555555820465088 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.111111044883728 0.6666666865348816 -0.0 0.0 0.0 1.0 0.7777777910232544 0.6666666865348816 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 0.6666666269302368 0.6666666865348816 -0.0 0.0 0.0 1.0 0.6666666865348816 0.6666666865348816 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.111111044883728 0.6666666865348816 -0.0 0.0 0.0 1.0 0.7777777910232544 0.6666666865348816 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.111111044883728 1.1111111640930176 -0.0 0.0 0.0 1.0 0.7777777910232544 0.7777777910232544 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 0.6666666269302368 1.1111111640930176 -0.0 0.0 0.0 1.0 0.6666666269302368 0.7777777910232544 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.111111044883728 1.1111111640930176 -0.0 0.0 0.0 1.0 0.7777777910232544 0.7777777910232544 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.111111044883728 1.5555555820465088 -0.0 0.0 0.0 1.0 0.7777777910232544 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.6666666269302368 1.5555555820465088 -0.0 0.0 0.0 1.0 0.6666666269302368 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.5555554628372192 -2.0 -0.0 0.0 0.0 1.0 0.8888888955116272 0.0 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.8888888955116272 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.7777777910232544 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.8888888955116272 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.8888888955116272 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.7777777910232544 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.8888888955116272 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.8888888955116272 0.3333333432674408 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.111111044883728 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.7777777910232544 0.3333333432674408 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.8888888955116272 0.3333333432674408 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.5555554628372192 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.8888888359069824 0.444444477558136 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.111111044883728 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.7777777910232544 0.444444477558136 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.8888888359069824 0.444444477558136 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.5555554628372192 0.22222226858139038 -0.0 0.0 0.0 1.0 0.8888888359069824 0.5555555820465088 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 0.22222226858139038 -0.0 0.0 0.0 1.0 0.7777777910232544 0.5555555820465088 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.5555554628372192 0.22222226858139038 -0.0 0.0 0.0 1.0 0.8888888359069824 0.5555555820465088 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 0.6666666865348816 -0.0 0.0 0.0 1.0 0.8888888359069824 0.6666666865348816 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.111111044883728 0.6666666865348816 -0.0 0.0 0.0 1.0 0.7777777910232544 0.6666666865348816 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.5555554628372192 0.6666666865348816 -0.0 0.0 0.0 1.0 0.8888888359069824 0.6666666865348816 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.5555554628372192 1.1111111640930176 -0.0 0.0 0.0 1.0 0.8888888359069824 0.7777777910232544 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.111111044883728 1.1111111640930176 -0.0 0.0 0.0 1.0 0.7777777910232544 0.7777777910232544 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.5555554628372192 1.1111111640930176 -0.0 0.0 0.0 1.0 0.8888888359069824 0.7777777910232544 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.5555554628372192 1.5555555820465088 -0.0 0.0 0.0 1.0 0.8888888359069824 0.8888888955116272 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.111111044883728 1.5555555820465088 -0.0 0.0 0.0 1.0 0.7777777910232544 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.9999998807907104 -2.0 -0.0 0.0 0.0 1.0 1.0 0.0 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.9999998807907104 -1.5555555820465088 -0.0 0.0 0.0 1.0 1.0 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -1.5555555820465088 -0.0 0.0 0.0 1.0 0.8888888955116272 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.9999998807907104 -1.5555555820465088 -0.0 0.0 0.0 1.0 1.0 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.9999998807907104 -1.1111111640930176 -0.0 0.0 0.0 1.0 1.0 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -1.1111111640930176 -0.0 0.0 0.0 1.0 0.8888888955116272 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.9999998807907104 -1.1111111640930176 -0.0 0.0 0.0 1.0 1.0 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.9999998807907104 -0.6666666865348816 -0.0 0.0 0.0 1.0 1.0 0.3333333432674408 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.5555554628372192 -0.6666666865348816 -0.0 0.0 0.0 0.999969482421875 0.8888888955116272 0.3333333432674408 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.9999998807907104 -0.6666666865348816 -0.0 0.0 0.0 1.0 1.0 0.3333333432674408 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.9999998807907104 -0.2222222089767456 -0.0 0.0 0.0 1.0 1.0 0.444444477558136 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.5555554628372192 -0.2222222089767456 -0.0 0.0 0.0 0.999969482421875 0.8888888359069824 0.444444477558136 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.9999998807907104 -0.2222222089767456 -0.0 0.0 0.0 1.0 1.0 0.444444477558136 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.9999998807907104 0.22222226858139038 -0.0 0.0 0.0 1.0 1.0 0.5555555820465088 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 0.22222226858139038 -0.0 0.0 0.0 1.0 0.8888888359069824 0.5555555820465088 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.9999998807907104 0.22222226858139038 -0.0 0.0 0.0 1.0 1.0 0.5555555820465088 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.9999998807907104 0.6666666865348816 -0.0 0.0 0.0 1.0 1.0 0.6666666865348816 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.5555554628372192 0.6666666865348816 -0.0 0.0 0.0 1.0 0.8888888359069824 0.6666666865348816 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.9999998807907104 0.6666666865348816 -0.0 0.0 0.0 1.0 1.0 0.6666666865348816 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.9999998807907104 1.1111111640930176 -0.0 0.0 0.0 1.0 1.0 0.7777777910232544 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.5555554628372192 1.1111111640930176 -0.0 0.0 0.0 1.0 0.8888888359069824 0.7777777910232544 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.9999998807907104 1.1111111640930176 -0.0 0.0 0.0 1.0 1.0 0.7777777910232544 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.9999998807907104 1.5555555820465088 -0.0 0.0 0.0 1.0 1.0 0.8888888955116272 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.5555554628372192 1.5555555820465088 -0.0 0.0 0.0 1.0 0.8888888359069824 0.8888888955116272 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.5555554628372192 2.0 -0.0 0.0 0.0 -1.0 0.8888888955116272 1.0 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.9999998807907104 2.0 -0.0 0.0 0.0 -1.0 1.0 1.0 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.9999998807907104 1.5555555820465088 -0.0 0.0 0.0 -1.0 1.0 0.8888888955116272 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -1.9999998807907104 2.0 -0.0 0.0 0.0 -1.0 0.0 1.0 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.5555554628372192 2.0 -0.0 0.0 0.0 -1.0 0.111111119389534 1.0 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -1.5555554628372192 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.111111119389534 0.8888888955116272 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.5555554628372192 2.0 -0.0 0.0 0.0 -1.0 0.111111119389534 1.0 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -1.111111044883728 2.0 -0.0 0.0 0.0 -1.0 0.222222238779068 1.0 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -1.111111044883728 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.222222238779068 0.8888888955116272 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -1.111111044883728 2.0 -0.0 0.0 0.0 -1.0 0.222222238779068 1.0 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -0.6666666269302368 2.0 -0.0 0.0 0.0 -1.0 0.3333333730697632 1.0 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.6666666269302368 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.3333333730697632 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.6666666269302368 2.0 -0.0 0.0 0.0 -1.0 0.3333333730697632 1.0 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.2222222089767456 2.0 -0.0 0.0 0.0 -1.0 0.444444477558136 1.0 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.444444477558136 0.8888888955116272 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 2.0 -0.0 0.0 0.0 -1.0 0.444444477558136 1.0 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 2.0 -0.0 0.0 0.0 -1.0 0.5555555820465088 1.0 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.8888888955116272 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 2.0 -0.0 0.0 0.0 -1.0 0.5555555820465088 1.0 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.6666666269302368 2.0 -0.0 0.0 0.0 -1.0 0.6666666865348816 1.0 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.6666666269302368 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.6666666269302368 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.6666666269302368 2.0 -0.0 0.0 0.0 -1.0 0.6666666865348816 1.0 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.111111044883728 2.0 -0.0 0.0 0.0 -1.0 0.7777777910232544 1.0 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.111111044883728 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.111111044883728 2.0 -0.0 0.0 0.0 -1.0 0.7777777910232544 1.0 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.5555554628372192 2.0 -0.0 0.0 0.0 -1.0 0.8888888955116272 1.0 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.5555554628372192 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.8888888359069824 0.8888888955116272 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -1.9999998807907104 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.0 0.111111119389534 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.1111111119389534 0.1111111119389534 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -2.0 -0.0 0.0 0.0 -1.0 0.1111111119389534 0.0 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.9999998807907104 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.0 0.222222238779068 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.1111111119389534 0.2222222238779068 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.1111111119389534 0.1111111119389534 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.9999998807907104 -0.6666666865348816 -0.0 0.0 0.0 -1.0 0.0 0.3333333730697632 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.111111119389534 0.3333333432674408 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.1111111119389534 0.2222222238779068 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.9999998807907104 -0.22222226858139038 -0.0 0.0 0.0 -0.999969482421875 0.0 0.444444477558136 0 0.9999995231628418 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.111111119389534 0.444444477558136 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.111111119389534 0.3333333432674408 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.9999998807907104 0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.0 0.5555555820465088 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.5555554628372192 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.111111119389534 0.5555555820465088 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.111111119389534 0.444444477558136 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.9999998807907104 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.0 0.6666666865348816 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.111111119389534 0.6666666865348816 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.5555554628372192 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.111111119389534 0.5555555820465088 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.9999998807907104 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.0 0.7777777910232544 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.5555554628372192 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.111111119389534 0.7777777910232544 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.5555554628372192 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.111111119389534 0.6666666865348816 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.9999998807907104 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.0 0.8888888955116272 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.5555554628372192 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.111111119389534 0.8888888955116272 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.5555554628372192 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.111111119389534 0.7777777910232544 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.1111111119389534 0.1111111119389534 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.111111044883728 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.2222222238779068 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 -2.0 -0.0 0.0 0.0 -1.0 0.2222222238779068 0.0 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.1111111119389534 0.2222222238779068 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.111111044883728 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.2222222238779068 0.2222222238779068 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.111111044883728 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.2222222238779068 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.111111119389534 0.3333333432674408 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.111111044883728 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.222222238779068 0.3333333432674408 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.111111044883728 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.2222222238779068 0.2222222238779068 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.111111119389534 0.444444477558136 0 0.9999995827674866 0 0.0 0 0.0 0 0.0 -1.111111044883728 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.222222238779068 0.444444477558136 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.111111044883728 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.222222238779068 0.3333333432674408 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.111111119389534 0.5555555820465088 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.111111044883728 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.222222238779068 0.5555555820465088 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.222222238779068 0.444444477558136 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -1.5555554628372192 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.111111119389534 0.6666666865348816 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.222222238779068 0.6666666865348816 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.111111044883728 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.222222238779068 0.5555555820465088 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.5555554628372192 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.111111119389534 0.7777777910232544 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.222222238779068 0.7777777910232544 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -1.111111044883728 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.222222238779068 0.6666666865348816 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.5555554628372192 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.111111119389534 0.8888888955116272 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.111111044883728 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.222222238779068 0.8888888955116272 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -1.111111044883728 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.222222238779068 0.7777777910232544 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -1.111111044883728 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.2222222238779068 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.3333333432674408 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -2.0 -0.0 0.0 0.0 -1.0 0.3333333432674408 0.0 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.2222222238779068 0.2222222238779068 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.3333333730697632 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.3333333432674408 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.222222238779068 0.3333333432674408 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.3333333730697632 0.3333333432674408 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.3333333730697632 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.222222238779068 0.444444477558136 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.3333333432674408 0.444444477558136 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.3333333730697632 0.3333333432674408 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -1.111111044883728 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.222222238779068 0.5555555820465088 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.6666666269302368 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.3333333730697632 0.5555555820465088 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.3333333432674408 0.444444477558136 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -1.111111044883728 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.222222238779068 0.6666666865348816 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.6666666269302368 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.3333333730697632 0.6666666865348816 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.6666666269302368 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.3333333730697632 0.5555555820465088 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -1.111111044883728 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.222222238779068 0.7777777910232544 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -0.6666666269302368 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.3333333730697632 0.7777777910232544 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.6666666269302368 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.3333333730697632 0.6666666865348816 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -1.111111044883728 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.222222238779068 0.8888888955116272 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -0.6666666269302368 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.3333333730697632 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.6666666269302368 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.3333333730697632 0.7777777910232544 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.3333333432674408 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.444444477558136 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -2.0 -0.0 0.0 0.0 -1.0 0.444444477558136 0.0 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.3333333730697632 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.444444477558136 0.2222222238779068 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.444444477558136 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.3333333730697632 0.3333333432674408 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.444444477558136 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.444444477558136 0.2222222238779068 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.6666666269302368 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.3333333432674408 0.444444477558136 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.444444477558136 0.444444477558136 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.444444477558136 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.6666666269302368 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.3333333730697632 0.5555555820465088 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 -0.2222222089767456 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.444444477558136 0.5555555820465088 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.444444477558136 0.444444477558136 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.6666666269302368 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.3333333730697632 0.6666666865348816 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.2222222089767456 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.444444477558136 0.6666666865348816 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.444444477558136 0.5555555820465088 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.6666666269302368 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.3333333730697632 0.7777777910232544 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.2222222089767456 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.444444477558136 0.7777777910232544 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.444444477558136 0.6666666865348816 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.6666666269302368 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.3333333730697632 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.2222222089767456 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.444444477558136 0.8888888955116272 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.444444477558136 0.7777777910232544 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.444444477558136 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -2.0 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.0 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.444444477558136 0.2222222238779068 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.2222222238779068 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.444444477558136 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.5555555820465088 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.2222222238779068 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.444444477558136 0.444444477558136 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.2222222089767456 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.5555555820465088 0.444444477558136 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.2222222089767456 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.5555555820465088 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 -0.2222222089767456 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.444444477558136 0.5555555820465088 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.5555555820465088 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.5555555820465088 0.444444477558136 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 -0.2222222089767456 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.444444477558136 0.6666666865348816 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.6666666865348816 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.5555555820465088 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.444444477558136 0.7777777910232544 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.7777777910232544 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.6666666865348816 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 -0.2222222089767456 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.444444477558136 0.8888888955116272 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.8888888955116272 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.7777777910232544 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.2222222089767456 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.6666666269302368 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.6666666865348816 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.6666666269302368 -2.0 -0.0 0.0 0.0 -1.0 0.6666666865348816 0.0 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.2222222238779068 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.6666666269302368 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.6666666865348816 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 0.6666666269302368 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.6666666865348816 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.5555555820465088 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.6666666269302368 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.6666666865348816 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.6666666269302368 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.6666666865348816 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 0.2222222089767456 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.5555555820465088 0.444444477558136 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.6666666269302368 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.6666666865348816 0.444444477558136 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 0.6666666269302368 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.6666666865348816 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.2222222089767456 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.5555555820465088 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.6666666269302368 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.6666666865348816 0.5555555820465088 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.6666666269302368 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.6666666865348816 0.444444477558136 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 0.2222222089767456 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.6666666865348816 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.6666666269302368 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.6666666865348816 0.6666666865348816 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.6666666269302368 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.6666666865348816 0.5555555820465088 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.2222222089767456 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.7777777910232544 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.6666666269302368 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.6666666269302368 0.7777777910232544 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.6666666269302368 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.6666666865348816 0.6666666865348816 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.2222222089767456 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.5555555820465088 0.8888888955116272 0 0.9999999403953552 0 0.0 0 0.0 0 0.0 0.6666666269302368 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.6666666269302368 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.6666666269302368 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.6666666269302368 0.7777777910232544 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 0.6666666269302368 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.6666666865348816 0.1111111119389534 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.111111044883728 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 -2.0 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.0 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 0.6666666269302368 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.6666666865348816 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 0.6666666269302368 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.6666666865348816 0.3333333432674408 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.111111044883728 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.7777777910232544 0.3333333432674408 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 0.6666666269302368 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.6666666865348816 0.444444477558136 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.111111044883728 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.7777777910232544 0.444444477558136 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.7777777910232544 0.3333333432674408 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 0.6666666269302368 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.6666666865348816 0.5555555820465088 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.111111044883728 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.5555555820465088 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.111111044883728 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.7777777910232544 0.444444477558136 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 0.6666666269302368 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.6666666865348816 0.6666666865348816 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.111111044883728 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.6666666865348816 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.111111044883728 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.5555555820465088 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0.6666666269302368 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.6666666269302368 0.7777777910232544 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.111111044883728 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.7777777910232544 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.111111044883728 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.6666666865348816 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 0.6666666269302368 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.6666666269302368 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.111111044883728 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.111111044883728 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.7777777910232544 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.111111044883728 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.8888888955116272 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -2.0 -0.0 0.0 0.0 -1.0 0.8888888955116272 0.0 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.8888888955116272 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.8888888955116272 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.7777777910232544 0.3333333432674408 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.8888888955116272 0.3333333432674408 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.5555554628372192 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.8888888955116272 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.7777777910232544 0.444444477558136 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.8888888359069824 0.444444477558136 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.5555554628372192 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.8888888955116272 0.3333333432674408 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.111111044883728 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.5555555820465088 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.5555554628372192 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.8888888359069824 0.5555555820465088 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.8888888359069824 0.444444477558136 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.111111044883728 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.6666666865348816 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.5555554628372192 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.8888888359069824 0.6666666865348816 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.5555554628372192 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.8888888359069824 0.5555555820465088 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.111111044883728 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.7777777910232544 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.5555554628372192 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.8888888359069824 0.7777777910232544 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.5555554628372192 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.8888888359069824 0.6666666865348816 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.111111044883728 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.7777777910232544 0.8888888955116272 0 0.9999998807907104 0 0.0 0 0.0 0 0.0 1.5555554628372192 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.8888888359069824 0.8888888955116272 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.5555554628372192 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.8888888359069824 0.7777777910232544 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.5555554628372192 -1.5555555820465088 -0.0 0.0 0.0 -1.0 0.8888888955116272 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.9999998807907104 -1.5555555820465088 -0.0 0.0 0.0 -1.0 1.0 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.9999998807907104 -2.0 -0.0 0.0 0.0 -1.0 1.0 0.0 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -1.1111111640930176 -0.0 0.0 0.0 -1.0 0.8888888955116272 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.9999998807907104 -1.1111111640930176 -0.0 0.0 0.0 -1.0 1.0 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.9999998807907104 -1.5555555820465088 -0.0 0.0 0.0 -1.0 1.0 0.1111111119389534 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -0.6666666865348816 -0.0 0.0 0.0 -0.999969482421875 0.8888888955116272 0.3333333432674408 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.9999998807907104 -0.6666666865348816 -0.0 0.0 0.0 -1.0 1.0 0.3333333432674408 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.9999998807907104 -1.1111111640930176 -0.0 0.0 0.0 -1.0 1.0 0.2222222238779068 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 -0.2222222089767456 -0.0 0.0 0.0 -0.999969482421875 0.8888888359069824 0.444444477558136 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.9999998807907104 -0.2222222089767456 -0.0 0.0 0.0 -1.0 1.0 0.444444477558136 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.9999998807907104 -0.6666666865348816 -0.0 0.0 0.0 -1.0 1.0 0.3333333432674408 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.5555554628372192 0.22222226858139038 -0.0 0.0 0.0 -1.0 0.8888888359069824 0.5555555820465088 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.9999998807907104 0.22222226858139038 -0.0 0.0 0.0 -1.0 1.0 0.5555555820465088 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.9999998807907104 -0.2222222089767456 -0.0 0.0 0.0 -1.0 1.0 0.444444477558136 0 0.9999996423721313 0 0.0 0 0.0 0 0.0 1.5555554628372192 0.6666666865348816 -0.0 0.0 0.0 -1.0 0.8888888359069824 0.6666666865348816 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.9999998807907104 0.6666666865348816 -0.0 0.0 0.0 -1.0 1.0 0.6666666865348816 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.9999998807907104 0.22222226858139038 -0.0 0.0 0.0 -1.0 1.0 0.5555555820465088 0 0.9999997019767761 0 0.0 0 0.0 0 0.0 1.5555554628372192 1.1111111640930176 -0.0 0.0 0.0 -1.0 0.8888888359069824 0.7777777910232544 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.9999998807907104 1.1111111640930176 -0.0 0.0 0.0 -1.0 1.0 0.7777777910232544 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.9999998807907104 0.6666666865348816 -0.0 0.0 0.0 -1.0 1.0 0.6666666865348816 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 1.5555554628372192 1.5555555820465088 -0.0 0.0 0.0 -1.0 0.8888888359069824 0.8888888955116272 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.9999998807907104 1.5555555820465088 -0.0 0.0 0.0 -1.0 1.0 0.8888888955116272 0 0.9999998211860657 0 0.0 0 0.0 0 0.0 1.9999998807907104 1.1111111640930176 -0.0 0.0 0.0 -1.0 1.0 0.7777777910232544 0 0.9999997615814209 0 0.0 0 0.0 0 0.0 0 1 2 0 3 4 5 0 6 7 8 0 9 10 11 0 12 13 14 0 15 16 17 0 18 19 20 0 21 22 23 0 24 25 26 0 27 28 29 0 30 31 32 0 33 34 35 0 36 37 38 0 39 40 41 0 42 43 44 0 45 46 47 0 48 49 50 0 51 52 53 0 54 55 56 0 57 58 59 0 60 61 62 0 63 64 65 0 66 67 68 0 69 70 71 0 72 73 74 0 75 76 77 0 78 79 80 0 81 82 83 0 84 85 86 0 87 88 89 0 90 91 92 0 93 94 95 0 96 97 98 0 99 100 101 0 102 103 104 0 105 106 107 0 108 109 110 0 111 112 113 0 114 115 116 0 117 118 119 0 120 121 122 0 123 124 125 0 126 127 128 0 129 130 131 0 132 133 134 0 135 136 137 0 138 139 140 0 141 142 143 0 144 145 146 0 147 148 149 0 150 151 152 0 153 154 155 0 156 157 158 0 159 160 161 0 162 163 164 0 165 166 167 0 168 169 170 0 171 172 173 0 174 175 176 0 177 178 179 0 180 181 182 0 183 184 185 0 186 187 188 0 189 190 191 0 192 193 194 0 195 196 197 0 198 199 200 0 201 202 203 0 204 205 206 0 207 208 209 0 210 211 212 0 213 214 215 0 216 217 218 0 219 220 221 0 222 223 224 0 225 226 227 0 228 229 230 0 231 232 233 0 234 235 236 0 237 238 239 0 240 241 242 0 243 244 245 0 246 247 248 0 249 250 251 0 252 253 254 0 255 256 257 0 258 259 260 0 261 262 263 0 264 265 266 0 267 268 269 0 270 271 272 0 273 274 275 0 276 277 278 0 279 280 281 0 282 283 284 0 285 286 287 0 288 289 290 0 291 292 293 0 294 295 296 0 297 298 299 0 300 301 302 0 303 304 305 0 306 307 308 0 309 310 311 0 312 313 314 0 315 316 317 0 318 319 320 0 321 322 323 0 324 325 326 0 327 328 329 0 330 331 332 0 333 334 335 0 336 337 338 0 339 340 341 0 342 343 344 0 345 346 347 0 348 349 350 0 351 352 353 0 354 355 356 0 357 358 359 0 360 361 362 0 363 364 365 0 366 367 368 0 369 370 371 0 372 373 374 0 375 376 377 0 378 379 380 0 381 382 383 0 384 385 386 0 387 388 389 0 390 391 392 0 393 394 395 0 396 397 398 0 399 400 401 0 402 403 404 0 405 406 407 0 408 409 410 0 411 412 413 0 414 415 416 0 417 418 419 0 420 421 422 0 423 424 425 0 426 427 428 0 429 430 431 0 432 433 434 0 435 436 437 0 438 439 440 0 441 442 443 0 444 445 446 0 447 448 449 0 450 451 452 0 453 454 455 0 456 457 458 0 459 460 461 0 462 463 464 0 465 466 467 0 468 469 470 0 471 472 473 0 474 475 476 0 477 478 479 0 480 481 482 0 483 484 485 0 486 487 488 0 489 490 491 0 492 493 494 0 495 496 497 0 498 499 500 0 501 502 503 0 504 505 506 0 507 508 509 0 510 511 512 0 513 514 515 0 516 517 518 0 519 520 521 0 522 523 524 0 525 526 527 0 528 529 530 0 531 532 533 0 534 535 536 0 537 538 539 0 540 541 542 0 543 544 545 0 546 547 548 0 549 550 551 0 552 553 554 0 555 556 557 0 558 559 560 0 561 562 563 0 564 565 566 0 567 568 569 0 570 571 572 0 573 574 575 0 576 577 578 0 579 580 581 0 582 583 584 0 585 586 587 0 588 589 590 0 591 592 593 0 594 595 596 0 597 598 599 0 600 601 602 0 603 604 605 0 606 607 608 0 609 610 611 0 612 613 614 0 615 616 617 0 618 619 620 0 621 622 623 0 624 625 626 0 627 628 629 0 630 631 632 0 633 634 635 0 636 637 638 0 639 640 641 0 642 643 644 0 645 646 647 0 648 649 650 0 651 652 653 0 654 655 656 0 657 658 659 0 660 661 662 0 663 664 665 0 666 667 668 0 669 670 671 0 672 673 674 0 675 676 677 0 678 679 680 0 681 682 683 0 684 685 686 0 687 688 689 0 690 691 692 0 693 694 695 0 696 697 698 0 699 700 701 0 702 703 704 0 705 706 707 0 708 709 710 0 711 712 713 0 714 715 716 0 717 718 719 0 720 721 722 0 723 724 725 0 726 727 728 0 729 730 731 0 732 733 734 0 735 736 737 0 738 739 740 0 741 742 743 0 744 745 746 0 747 748 749 0 750 751 752 0 753 754 755 0 756 757 758 0 759 760 761 0 762 763 764 0 765 766 767 0 768 769 770 0 771 772 773 0 774 775 776 0 777 778 779 0 780 781 782 0 783 784 785 0 786 787 788 0 789 790 791 0 792 793 794 0 795 796 797 0 798 799 800 0 801 802 803 0 804 805 806 0 807 808 809 0 810 811 812 0 813 814 815 0 816 817 818 0 819 820 821 0 822 823 824 0 825 826 827 0 828 829 830 0 831 832 833 0 834 835 836 0 837 838 839 0 840 841 842 0 843 844 845 0 846 847 848 0 849 850 851 0 852 853 854 0 855 856 857 0 858 859 860 0 861 862 863 0 864 865 866 0 867 868 869 0 870 871 872 0 873 874 875 0 876 877 878 0 879 880 881 0 882 883 884 0 885 886 887 0 888 889 890 0 891 892 893 0 894 895 896 0 897 898 899 0 900 901 902 0 903 904 905 0 906 907 908 0 909 910 911 0 912 913 914 0 915 916 917 0 918 919 920 0 921 922 923 0 924 925 926 0 927 928 929 0 930 931 932 0 933 934 935 0 936 937 938 0 939 940 941 0 942 943 944 0 945 946 947 0 948 949 950 0 951 952 953 0 954 955 956 0 957 958 959 0 960 961 962 0 963 964 965 0 966 967 968 0 969 970 971 0 Root -1 0.0 0.0 -0.0 0.0 1.0 -0.0 0.0 Root ================================================ FILE: data/models/dev/sound.stmdl ================================================ 186 62 1 dev/sound 2.7418135317702763e-08 0.1199999749660492 0.04013171046972275 0.0 0.6245918273925781 0.7809076309204102 0.0 0.0 0.0 0.0 0.212132066488266 0.21213197708129883 -0.10383731126785278 0.44166386127471924 0.44166386127471924 0.7809076309204102 0.0 0.0 0.0 0.0 2.3469329590852794e-08 0.2999999523162842 -0.10383731126785278 0.0 0.6245918273925781 0.7809076309204102 0.0 0.0 0.0 0.0 0.30000001192092896 -1.7601996304961176e-08 -0.10383731126785278 0.6245918273925781 0.0 0.7809076309204102 0.0 0.0 0.0 0.0 0.08485285937786102 -0.08485281467437744 0.04013170301914215 0.44166386127471924 -0.44166386127471924 0.7809076309204102 0.0 0.0 0.0 0.0 0.212132066488266 -0.2121320366859436 -0.10383734107017517 0.44166386127471924 -0.44166386127471924 0.7809076309204102 0.0 0.0 0.0 0.0 4.9696161852352816e-08 -0.30000007152557373 -0.10383731126785278 0.0 -0.6245918273925781 0.7809076309204102 0.0 0.0 0.0 0.0 -0.08485278487205505 -0.08485284447669983 0.04013170301914215 -0.44166386127471924 -0.44166386127471924 0.7809076309204102 0.0 0.0 0.0 0.0 -0.21213200688362122 -0.21213209629058838 -0.10383734107017517 -0.44166386127471924 -0.44166386127471924 0.7809076309204102 0.0 0.0 0.0 0.0 -0.1199999749660492 -3.548338867176426e-08 0.04013171046972275 -0.6245918273925781 0.0 0.7809076309204102 0.0 0.0 0.0 0.0 -0.21213200688362122 0.2121320366859436 -0.10383731126785278 -0.44166386127471924 0.44166386127471924 0.7809076309204102 0.0 0.0 0.0 0.0 -0.30000001192092896 -3.548338867176426e-08 -0.10383731126785278 -0.6245918273925781 0.0 0.7809076309204102 0.0 0.0 0.0 0.0 0.08485285937786102 0.08485278487205505 0.04013171046972275 0.44166386127471924 0.44166386127471924 0.7809076309204102 0.0 0.0 0.0 0.0 0.30000001192092896 -1.7601996304961176e-08 -0.10383731126785278 0.6245918273925781 0.0 0.7809076309204102 0.0 0.0 0.0 0.0 0.212132066488266 0.21213197708129883 -0.10383731126785278 0.44166386127471924 0.44166386127471924 0.7809076309204102 0.0 0.0 0.0 0.0 0.212132066488266 -0.2121320366859436 -0.10383734107017517 0.44166386127471924 -0.44166386127471924 0.7809076309204102 0.0 0.0 0.0 0.0 3.790886893284551e-08 -0.12000003457069397 0.04013171046972275 0.0 -0.6245918273925781 0.7809076309204102 0.0 0.0 0.0 0.0 4.9696161852352816e-08 -0.30000007152557373 -0.10383731126785278 0.0 -0.6245918273925781 0.7809076309204102 0.0 0.0 0.0 0.0 -0.08485278487205505 -0.08485284447669983 0.04013170301914215 -0.44166386127471924 -0.44166386127471924 0.7809076309204102 0.0 0.0 0.0 0.0 -0.30000001192092896 -3.548338867176426e-08 -0.10383731126785278 -0.6245918273925781 0.0 0.7809076309204102 0.0 0.0 0.0 0.0 -0.21213200688362122 -0.21213209629058838 -0.10383734107017517 -0.44166386127471924 -0.44166386127471924 0.7809076309204102 0.0 0.0 0.0 0.0 -0.08485278487205505 0.08485281467437744 0.040131717920303345 -0.44166386127471924 0.44166386127471924 0.7809076309204102 0.0 0.0 0.0 0.0 2.3469329590852794e-08 0.2999999523162842 -0.10383731126785278 0.0 0.6245918273925781 0.7809076309204102 0.0 0.0 0.0 0.0 -0.21213200688362122 0.2121320366859436 -0.10383731126785278 -0.44166386127471924 0.44166386127471924 0.7809076309204102 0.0 0.0 0.0 0.0 0.08485285937786102 0.08485278487205505 0.04013171046972275 0.7070833444595337 0.7070833444595337 -0.0 0.11559708416461945 0.01840570569038391 0.11559708416461945 0.01840570569038391 0.12000000476837158 -2.6542693376541138e-08 0.11585262417793274 0.999969482421875 0.0 -0.0 0.07078734040260315 0.23519167304039001 0.07078734040260315 0.23519167304039001 0.12000000476837158 -2.6542693376541138e-08 0.04013171046972275 0.999969482421875 0.0 -0.0 0.07078734040260315 0.01840570569038391 0.07078734040260315 0.01840570569038391 0.08485285937786102 -0.08485284447669983 0.11585262417793274 0.7070833444595337 -0.7070833444595337 -0.0 0.11559708416461945 0.23519167304039001 0.11559708416461945 0.23519167304039001 3.790886893284551e-08 -0.12000003457069397 0.04013171046972275 0.0 -1.0 -0.0 0.22377730906009674 0.01840570569038391 0.22377730906009674 0.01840570569038391 0.08485285937786102 -0.08485281467437744 0.04013170301914215 0.7070833444595337 -0.7070833444595337 -0.0 0.11559708416461945 0.01840570569038391 0.11559708416461945 0.01840570569038391 -0.08485278487205505 -0.08485284447669983 0.11585262417793274 -0.7070833444595337 -0.7070833444595337 -0.0 0.3319575786590576 0.23519167304039001 0.3319575786590576 0.23519167304039001 -0.1199999749660492 -3.548338867176426e-08 0.04013171046972275 -1.0 0.0 -0.0 0.3767671585083008 0.01840570569038391 0.3767671585083008 0.01840570569038391 -0.08485278487205505 -0.08485284447669983 0.04013170301914215 -0.7070833444595337 -0.7070833444595337 -0.0 0.3319575786590576 0.01840570569038391 0.3319575786590576 0.01840570569038391 -0.08485278487205505 0.08485281467437744 0.040131717920303345 -0.7070833444595337 0.7070833444595337 -0.0 0.3319575786590576 0.01840570569038391 0.3319575786590576 0.01840570569038391 2.7418135317702763e-08 0.1199999749660492 0.11585262417793274 0.0 0.999969482421875 -0.0 0.22377730906009674 0.23519167304039001 0.22377730906009674 0.23519167304039001 2.7418135317702763e-08 0.1199999749660492 0.04013171046972275 0.0 1.0 -0.0 0.22377730906009674 0.01840570569038391 0.22377730906009674 0.01840570569038391 2.7418135317702763e-08 0.1199999749660492 0.11585262417793274 0.0 0.999969482421875 -0.0 0.22377730906009674 0.23519167304039001 0.22377730906009674 0.23519167304039001 0.08485285937786102 0.08485278487205505 0.04013171046972275 0.7070833444595337 0.7070833444595337 -0.0 0.11559708416461945 0.01840570569038391 0.11559708416461945 0.01840570569038391 2.7418135317702763e-08 0.1199999749660492 0.04013171046972275 0.0 1.0 -0.0 0.22377730906009674 0.01840570569038391 0.22377730906009674 0.01840570569038391 0.12000000476837158 -2.6542693376541138e-08 0.11585262417793274 0.999969482421875 0.0 -0.0 0.07078734040260315 0.23519167304039001 0.07078734040260315 0.23519167304039001 0.08485285937786102 -0.08485281467437744 0.04013170301914215 0.7070833444595337 -0.7070833444595337 -0.0 0.11559708416461945 0.01840570569038391 0.11559708416461945 0.01840570569038391 0.12000000476837158 -2.6542693376541138e-08 0.04013171046972275 0.999969482421875 0.0 -0.0 0.07078734040260315 0.01840570569038391 0.07078734040260315 0.01840570569038391 3.790886893284551e-08 -0.12000003457069397 0.04013171046972275 0.0 -1.0 -0.0 0.22377730906009674 0.01840570569038391 0.22377730906009674 0.01840570569038391 -0.08485278487205505 -0.08485284447669983 0.11585262417793274 -0.7070833444595337 -0.7070833444595337 -0.0 0.3319575786590576 0.23519167304039001 0.3319575786590576 0.23519167304039001 -0.08485278487205505 -0.08485284447669983 0.04013170301914215 -0.7070833444595337 -0.7070833444595337 -0.0 0.3319575786590576 0.01840570569038391 0.3319575786590576 0.01840570569038391 -0.1199999749660492 -3.548338867176426e-08 0.04013171046972275 -1.0 0.0 -0.0 0.3767671585083008 0.01840570569038391 0.3767671585083008 0.01840570569038391 -0.08485278487205505 0.08485278487205505 0.11585262417793274 -0.7070833444595337 0.7070833444595337 -0.0 0.3319575786590576 0.23519167304039001 0.3319575786590576 0.23519167304039001 -0.08485278487205505 0.08485281467437744 0.040131717920303345 -0.7070833444595337 0.7070833444595337 -0.0 0.3319575786590576 0.01840570569038391 0.3319575786590576 0.01840570569038391 3.656776570437614e-08 -0.12000003457069397 -0.052147381007671356 0.0 0.2760094106197357 -0.9611499309539795 0.4862024188041687 0.4675047993659973 0.4862024188041687 0.4675047993659973 0.212132066488266 -0.2121320366859436 -0.10383734107017517 -0.19516587257385254 0.19516587257385254 -0.9611499309539795 0.14479899406433105 0.31266430020332336 0.14479899406433105 0.31266430020332336 4.9696161852352816e-08 -0.30000007152557373 -0.10383731126785278 0.0 0.2760094106197357 -0.9611499309539795 0.48759859800338745 0.28646716475486755 0.48759859800338745 0.28646716475486755 -0.1199999749660492 -2.6542693376541138e-08 -0.052147381007671356 0.2760094106197357 0.0 -0.9611499309539795 0.6755576133728027 0.6540679931640625 0.6755576133728027 0.6540679931640625 -0.21213200688362122 -0.21213209629058838 -0.10383734107017517 0.19516587257385254 0.19516587257385254 -0.9611499309539795 0.8303983211517334 0.3126644492149353 0.8303983211517334 0.3126644492149353 -0.30000001192092896 -3.548338867176426e-08 -0.10383731126785278 0.2760094106197357 0.0 -0.9611499309539795 0.9723902940750122 0.6554643511772156 0.9723902940750122 0.6554643511772156 2.3469329590852794e-08 0.2999999523162842 -0.10383731126785278 0.0 -0.2760094106197357 -0.9611499309539795 0.4875982403755188 0.9821358919143677 0.4875982403755188 0.9821358919143677 -0.08485278487205505 0.08485281467437744 -0.052147381007671356 0.19516587257385254 -0.19516587257385254 -0.9611499309539795 0.621492862701416 0.7873842120170593 0.621492862701416 0.7873842120170593 -0.21213200688362122 0.2121320366859436 -0.10383731126785278 0.19516587257385254 -0.19516587257385254 -0.9611499309539795 0.8303979635238647 0.9982638359069824 0.8303979635238647 0.9982638359069824 0.212132066488266 0.21213197708129883 -0.10383731126785278 -0.19516587257385254 -0.19516587257385254 -0.9611499309539795 0.14479878544807434 0.9982633590698242 0.14479878544807434 0.9982633590698242 2.60770320892334e-08 0.1199999749660492 -0.052147381007671356 0.0 -0.2760094106197357 -0.9611499309539795 0.4889945089817047 0.8434231877326965 0.4889945089817047 0.8434231877326965 2.3469329590852794e-08 0.2999999523162842 -0.10383731126785278 0.0 -0.2760094106197357 -0.9611499309539795 0.4875982403755188 0.9821358919143677 0.4875982403755188 0.9821358919143677 0.08485285937786102 -0.08485281467437744 -0.05214738845825195 -0.19516587257385254 0.19516587257385254 -0.9611499309539795 0.3537041246891022 0.5235439538955688 0.3537041246891022 0.5235439538955688 0.30000001192092896 -1.7601996304961176e-08 -0.10383731126785278 -0.2760094106197357 0.0 -0.9611499309539795 0.002806723117828369 0.6554639339447021 0.002806723117828369 0.6554639339447021 0.212132066488266 -0.2121320366859436 -0.10383734107017517 -0.19516587257385254 0.19516587257385254 -0.9611499309539795 0.14479899406433105 0.31266430020332336 0.14479899406433105 0.31266430020332336 -0.21213200688362122 -0.21213209629058838 -0.10383734107017517 0.19516587257385254 0.19516587257385254 -0.9611499309539795 0.8303983211517334 0.3126644492149353 0.8303983211517334 0.3126644492149353 3.656776570437614e-08 -0.12000003457069397 -0.052147381007671356 0.0 0.2760094106197357 -0.9611499309539795 0.4862024188041687 0.4675047993659973 0.4862024188041687 0.4675047993659973 4.9696161852352816e-08 -0.30000007152557373 -0.10383731126785278 0.0 0.2760094106197357 -0.9611499309539795 0.48759859800338745 0.28646716475486755 0.48759859800338745 0.28646716475486755 -0.21213200688362122 0.2121320366859436 -0.10383731126785278 0.19516587257385254 -0.19516587257385254 -0.9611499309539795 0.8303979635238647 0.9982638359069824 0.8303979635238647 0.9982638359069824 -0.1199999749660492 -2.6542693376541138e-08 -0.052147381007671356 0.2760094106197357 0.0 -0.9611499309539795 0.6755576133728027 0.6540679931640625 0.6755576133728027 0.6540679931640625 -0.30000001192092896 -3.548338867176426e-08 -0.10383731126785278 0.2760094106197357 0.0 -0.9611499309539795 0.9723902940750122 0.6554643511772156 0.9723902940750122 0.6554643511772156 0.30000001192092896 -1.7601996304961176e-08 -0.10383731126785278 -0.2760094106197357 0.0 -0.9611499309539795 0.002806723117828369 0.6554639339447021 0.002806723117828369 0.6554639339447021 0.08485285937786102 0.08485278487205505 -0.052147381007671356 -0.19516587257385254 -0.19516587257385254 -0.9611499309539795 0.3556783199310303 0.7893582582473755 0.3556783199310303 0.7893582582473755 0.212132066488266 0.21213197708129883 -0.10383731126785278 -0.19516587257385254 -0.19516587257385254 -0.9611499309539795 0.14479878544807434 0.9982633590698242 0.14479878544807434 0.9982633590698242 3.790886893284551e-08 -0.12000003457069397 0.11585262417793274 0.0 0.0 1.0 0.9038795828819275 0.05527821183204651 0.9038795828819275 0.05527821183204651 0.12000000476837158 -2.6542693376541138e-08 0.11585262417793274 0.0 0.0 1.0 0.8052781820297241 0.09612029790878296 0.8052781820297241 0.09612029790878296 2.7418135317702763e-08 0.1199999749660492 0.11585262417793274 0.0 0.0 1.0 0.8461202383041382 0.1947217583656311 0.8461202383041382 0.1947217583656311 -0.08485278487205505 0.08485281467437744 -0.052147381007671356 -0.1598559468984604 0.1598559468984604 -0.9740898013114929 0.621492862701416 0.7873842120170593 0.621492862701416 0.7873842120170593 1.973755736628391e-08 -2.2815592970459875e-08 -0.07999999821186066 0.0 0.0 -1.0 0.4875984787940979 0.6554641127586365 0.4875984787940979 0.6554641127586365 -0.1199999749660492 -2.6542693376541138e-08 -0.052147381007671356 -0.22608111798763275 0.0 -0.9740898013114929 0.6755576133728027 0.6540679931640625 0.6755576133728027 0.6540679931640625 -0.1199999749660492 -2.6542693376541138e-08 -0.052147381007671356 -0.22608111798763275 0.0 -0.9740898013114929 0.6755576133728027 0.6540679931640625 0.6755576133728027 0.6540679931640625 1.973755736628391e-08 -2.2815592970459875e-08 -0.07999999821186066 0.0 0.0 -1.0 0.4875984787940979 0.6554641127586365 0.4875984787940979 0.6554641127586365 -0.08485278487205505 -0.08485284447669983 -0.05214738845825195 -0.1598559468984604 -0.1598559468984604 -0.9740898013114929 0.619518518447876 0.5215696096420288 0.619518518447876 0.5215696096420288 -0.08485278487205505 -0.08485284447669983 -0.05214738845825195 -0.1598559468984604 -0.1598559468984604 -0.9740898013114929 0.619518518447876 0.5215696096420288 0.619518518447876 0.5215696096420288 1.973755736628391e-08 -2.2815592970459875e-08 -0.07999999821186066 0.0 0.0 -1.0 0.4875984787940979 0.6554641127586365 0.4875984787940979 0.6554641127586365 3.656776570437614e-08 -0.12000003457069397 -0.052147381007671356 0.0 -0.22608111798763275 -0.9740898013114929 0.4862024188041687 0.4675047993659973 0.4862024188041687 0.4675047993659973 3.656776570437614e-08 -0.12000003457069397 -0.052147381007671356 0.0 -0.22608111798763275 -0.9740898013114929 0.4862024188041687 0.4675047993659973 0.4862024188041687 0.4675047993659973 1.973755736628391e-08 -2.2815592970459875e-08 -0.07999999821186066 0.0 0.0 -1.0 0.4875984787940979 0.6554641127586365 0.4875984787940979 0.6554641127586365 0.08485285937786102 -0.08485281467437744 -0.05214738845825195 0.1598559468984604 -0.1598559468984604 -0.9740898013114929 0.3537041246891022 0.5235439538955688 0.3537041246891022 0.5235439538955688 0.08485285937786102 -0.08485281467437744 -0.05214738845825195 0.1598559468984604 -0.1598559468984604 -0.9740898013114929 0.3537041246891022 0.5235439538955688 0.3537041246891022 0.5235439538955688 1.973755736628391e-08 -2.2815592970459875e-08 -0.07999999821186066 0.0 0.0 -1.0 0.4875984787940979 0.6554641127586365 0.4875984787940979 0.6554641127586365 0.12000000476837158 -1.7601996304961176e-08 -0.052147381007671356 0.22608111798763275 0.0 -0.9740898013114929 0.2996392846107483 0.6568599939346313 0.2996392846107483 0.6568599939346313 0.12000000476837158 -1.7601996304961176e-08 -0.052147381007671356 0.22608111798763275 0.0 -0.9740898013114929 0.2996392846107483 0.6568599939346313 0.2996392846107483 0.6568599939346313 1.973755736628391e-08 -2.2815592970459875e-08 -0.07999999821186066 0.0 0.0 -1.0 0.4875984787940979 0.6554641127586365 0.4875984787940979 0.6554641127586365 0.08485285937786102 0.08485278487205505 -0.052147381007671356 0.1598559468984604 0.1598559468984604 -0.9740898013114929 0.3556783199310303 0.7893582582473755 0.3556783199310303 0.7893582582473755 0.08485285937786102 0.08485278487205505 -0.052147381007671356 0.1598559468984604 0.1598559468984604 -0.9740898013114929 0.3556783199310303 0.7893582582473755 0.3556783199310303 0.7893582582473755 1.973755736628391e-08 -2.2815592970459875e-08 -0.07999999821186066 0.0 0.0 -1.0 0.4875984787940979 0.6554641127586365 0.4875984787940979 0.6554641127586365 2.60770320892334e-08 0.1199999749660492 -0.052147381007671356 0.0 0.22608111798763275 -0.9740898013114929 0.4889945089817047 0.8434231877326965 0.4889945089817047 0.8434231877326965 2.60770320892334e-08 0.1199999749660492 -0.052147381007671356 0.0 0.22608111798763275 -0.9740898013114929 0.4889945089817047 0.8434231877326965 0.4889945089817047 0.8434231877326965 1.973755736628391e-08 -2.2815592970459875e-08 -0.07999999821186066 0.0 0.0 -1.0 0.4875984787940979 0.6554641127586365 0.4875984787940979 0.6554641127586365 -0.08485278487205505 0.08485281467437744 -0.052147381007671356 -0.1598559468984604 0.1598559468984604 -0.9740898013114929 0.621492862701416 0.7873842120170593 0.621492862701416 0.7873842120170593 2.7418135317702763e-08 0.1199999749660492 0.04013171046972275 0.0 0.6245918273925781 0.7809076309204102 0.0 0.0 0.0 0.0 0.08485285937786102 0.08485278487205505 0.04013171046972275 0.44166386127471924 0.44166386127471924 0.7809076309204102 0.0 0.0 0.0 0.0 0.212132066488266 0.21213197708129883 -0.10383731126785278 0.44166386127471924 0.44166386127471924 0.7809076309204102 0.0 0.0 0.0 0.0 0.30000001192092896 -1.7601996304961176e-08 -0.10383731126785278 0.6245918273925781 0.0 0.7809076309204102 0.0 0.0 0.0 0.0 0.12000000476837158 -2.6542693376541138e-08 0.04013171046972275 0.6245918273925781 0.0 0.7809076309204102 0.0 0.0 0.0 0.0 0.08485285937786102 -0.08485281467437744 0.04013170301914215 0.44166386127471924 -0.44166386127471924 0.7809076309204102 0.0 0.0 0.0 0.0 4.9696161852352816e-08 -0.30000007152557373 -0.10383731126785278 0.0 -0.6245918273925781 0.7809076309204102 0.0 0.0 0.0 0.0 3.790886893284551e-08 -0.12000003457069397 0.04013171046972275 0.0 -0.6245918273925781 0.7809076309204102 0.0 0.0 0.0 0.0 -0.08485278487205505 -0.08485284447669983 0.04013170301914215 -0.44166386127471924 -0.44166386127471924 0.7809076309204102 0.0 0.0 0.0 0.0 -0.1199999749660492 -3.548338867176426e-08 0.04013171046972275 -0.6245918273925781 0.0 0.7809076309204102 0.0 0.0 0.0 0.0 -0.08485278487205505 0.08485281467437744 0.040131717920303345 -0.44166386127471924 0.44166386127471924 0.7809076309204102 0.0 0.0 0.0 0.0 -0.21213200688362122 0.2121320366859436 -0.10383731126785278 -0.44166386127471924 0.44166386127471924 0.7809076309204102 0.0 0.0 0.0 0.0 0.08485285937786102 0.08485278487205505 0.04013171046972275 0.44166386127471924 0.44166386127471924 0.7809076309204102 0.0 0.0 0.0 0.0 0.12000000476837158 -2.6542693376541138e-08 0.04013171046972275 0.6245918273925781 0.0 0.7809076309204102 0.0 0.0 0.0 0.0 0.30000001192092896 -1.7601996304961176e-08 -0.10383731126785278 0.6245918273925781 0.0 0.7809076309204102 0.0 0.0 0.0 0.0 0.212132066488266 -0.2121320366859436 -0.10383734107017517 0.44166386127471924 -0.44166386127471924 0.7809076309204102 0.0 0.0 0.0 0.0 0.08485285937786102 -0.08485281467437744 0.04013170301914215 0.44166386127471924 -0.44166386127471924 0.7809076309204102 0.0 0.0 0.0 0.0 3.790886893284551e-08 -0.12000003457069397 0.04013171046972275 0.0 -0.6245918273925781 0.7809076309204102 0.0 0.0 0.0 0.0 -0.08485278487205505 -0.08485284447669983 0.04013170301914215 -0.44166386127471924 -0.44166386127471924 0.7809076309204102 0.0 0.0 0.0 0.0 -0.1199999749660492 -3.548338867176426e-08 0.04013171046972275 -0.6245918273925781 0.0 0.7809076309204102 0.0 0.0 0.0 0.0 -0.30000001192092896 -3.548338867176426e-08 -0.10383731126785278 -0.6245918273925781 0.0 0.7809076309204102 0.0 0.0 0.0 0.0 -0.08485278487205505 0.08485281467437744 0.040131717920303345 -0.44166386127471924 0.44166386127471924 0.7809076309204102 0.0 0.0 0.0 0.0 2.7418135317702763e-08 0.1199999749660492 0.04013171046972275 0.0 0.6245918273925781 0.7809076309204102 0.0 0.0 0.0 0.0 2.3469329590852794e-08 0.2999999523162842 -0.10383731126785278 0.0 0.6245918273925781 0.7809076309204102 0.0 0.0 0.0 0.0 0.08485285937786102 0.08485278487205505 0.04013171046972275 0.7070833444595337 0.7070833444595337 -0.0 0.11559708416461945 0.01840570569038391 0.11559708416461945 0.01840570569038391 0.08485285937786102 0.08485276997089386 0.11585265398025513 0.7070833444595337 0.7070833444595337 -0.0 0.11559708416461945 0.23519167304039001 0.11559708416461945 0.23519167304039001 0.12000000476837158 -2.6542693376541138e-08 0.11585262417793274 0.999969482421875 0.0 -0.0 0.07078734040260315 0.23519167304039001 0.07078734040260315 0.23519167304039001 0.08485285937786102 -0.08485284447669983 0.11585262417793274 0.7070833444595337 -0.7070833444595337 -0.0 0.11559708416461945 0.23519167304039001 0.11559708416461945 0.23519167304039001 3.790886893284551e-08 -0.12000003457069397 0.11585262417793274 0.0 -1.0 -0.0 0.22377730906009674 0.23519167304039001 0.22377730906009674 0.23519167304039001 3.790886893284551e-08 -0.12000003457069397 0.04013171046972275 0.0 -1.0 -0.0 0.22377730906009674 0.01840570569038391 0.22377730906009674 0.01840570569038391 -0.08485278487205505 -0.08485284447669983 0.11585262417793274 -0.7070833444595337 -0.7070833444595337 -0.0 0.3319575786590576 0.23519167304039001 0.3319575786590576 0.23519167304039001 -0.1199999749660492 -3.548338867176426e-08 0.11585262417793274 -1.0 0.0 -0.0 0.3767671585083008 0.23519167304039001 0.3767671585083008 0.23519167304039001 -0.1199999749660492 -3.548338867176426e-08 0.04013171046972275 -1.0 0.0 -0.0 0.3767671585083008 0.01840570569038391 0.3767671585083008 0.01840570569038391 -0.08485278487205505 0.08485281467437744 0.040131717920303345 -0.7070833444595337 0.7070833444595337 -0.0 0.3319575786590576 0.01840570569038391 0.3319575786590576 0.01840570569038391 -0.08485278487205505 0.08485278487205505 0.11585262417793274 -0.7070833444595337 0.7070833444595337 -0.0 0.3319575786590576 0.23519167304039001 0.3319575786590576 0.23519167304039001 2.7418135317702763e-08 0.1199999749660492 0.11585262417793274 0.0 0.999969482421875 -0.0 0.22377730906009674 0.23519167304039001 0.22377730906009674 0.23519167304039001 2.7418135317702763e-08 0.1199999749660492 0.11585262417793274 0.0 0.999969482421875 -0.0 0.22377730906009674 0.23519167304039001 0.22377730906009674 0.23519167304039001 0.08485285937786102 0.08485276997089386 0.11585265398025513 0.7070833444595337 0.7070833444595337 -0.0 0.11559708416461945 0.23519167304039001 0.11559708416461945 0.23519167304039001 0.08485285937786102 0.08485278487205505 0.04013171046972275 0.7070833444595337 0.7070833444595337 -0.0 0.11559708416461945 0.01840570569038391 0.11559708416461945 0.01840570569038391 0.12000000476837158 -2.6542693376541138e-08 0.11585262417793274 0.999969482421875 0.0 -0.0 0.07078734040260315 0.23519167304039001 0.07078734040260315 0.23519167304039001 0.08485285937786102 -0.08485284447669983 0.11585262417793274 0.7070833444595337 -0.7070833444595337 -0.0 0.11559708416461945 0.23519167304039001 0.11559708416461945 0.23519167304039001 0.08485285937786102 -0.08485281467437744 0.04013170301914215 0.7070833444595337 -0.7070833444595337 -0.0 0.11559708416461945 0.01840570569038391 0.11559708416461945 0.01840570569038391 3.790886893284551e-08 -0.12000003457069397 0.04013171046972275 0.0 -1.0 -0.0 0.22377730906009674 0.01840570569038391 0.22377730906009674 0.01840570569038391 3.790886893284551e-08 -0.12000003457069397 0.11585262417793274 0.0 -1.0 -0.0 0.22377730906009674 0.23519167304039001 0.22377730906009674 0.23519167304039001 -0.08485278487205505 -0.08485284447669983 0.11585262417793274 -0.7070833444595337 -0.7070833444595337 -0.0 0.3319575786590576 0.23519167304039001 0.3319575786590576 0.23519167304039001 -0.1199999749660492 -3.548338867176426e-08 0.04013171046972275 -1.0 0.0 -0.0 0.3767671585083008 0.01840570569038391 0.3767671585083008 0.01840570569038391 -0.1199999749660492 -3.548338867176426e-08 0.11585262417793274 -1.0 0.0 -0.0 0.3767671585083008 0.23519167304039001 0.3767671585083008 0.23519167304039001 -0.08485278487205505 0.08485278487205505 0.11585262417793274 -0.7070833444595337 0.7070833444595337 -0.0 0.3319575786590576 0.23519167304039001 0.3319575786590576 0.23519167304039001 3.656776570437614e-08 -0.12000003457069397 -0.052147381007671356 0.0 0.2760094106197357 -0.9611499309539795 0.4862024188041687 0.4675047993659973 0.4862024188041687 0.4675047993659973 0.08485285937786102 -0.08485281467437744 -0.05214738845825195 -0.19516587257385254 0.19516587257385254 -0.9611499309539795 0.3537041246891022 0.5235439538955688 0.3537041246891022 0.5235439538955688 0.212132066488266 -0.2121320366859436 -0.10383734107017517 -0.19516587257385254 0.19516587257385254 -0.9611499309539795 0.14479899406433105 0.31266430020332336 0.14479899406433105 0.31266430020332336 -0.1199999749660492 -2.6542693376541138e-08 -0.052147381007671356 0.2760094106197357 0.0 -0.9611499309539795 0.6755576133728027 0.6540679931640625 0.6755576133728027 0.6540679931640625 -0.08485278487205505 -0.08485284447669983 -0.05214738845825195 0.19516587257385254 0.19516587257385254 -0.9611499309539795 0.619518518447876 0.5215696096420288 0.619518518447876 0.5215696096420288 -0.21213200688362122 -0.21213209629058838 -0.10383734107017517 0.19516587257385254 0.19516587257385254 -0.9611499309539795 0.8303983211517334 0.3126644492149353 0.8303983211517334 0.3126644492149353 2.3469329590852794e-08 0.2999999523162842 -0.10383731126785278 0.0 -0.2760094106197357 -0.9611499309539795 0.4875982403755188 0.9821358919143677 0.4875982403755188 0.9821358919143677 2.60770320892334e-08 0.1199999749660492 -0.052147381007671356 0.0 -0.2760094106197357 -0.9611499309539795 0.4889945089817047 0.8434231877326965 0.4889945089817047 0.8434231877326965 -0.08485278487205505 0.08485281467437744 -0.052147381007671356 0.19516587257385254 -0.19516587257385254 -0.9611499309539795 0.621492862701416 0.7873842120170593 0.621492862701416 0.7873842120170593 0.212132066488266 0.21213197708129883 -0.10383731126785278 -0.19516587257385254 -0.19516587257385254 -0.9611499309539795 0.14479878544807434 0.9982633590698242 0.14479878544807434 0.9982633590698242 0.08485285937786102 0.08485278487205505 -0.052147381007671356 -0.19516587257385254 -0.19516587257385254 -0.9611499309539795 0.3556783199310303 0.7893582582473755 0.3556783199310303 0.7893582582473755 2.60770320892334e-08 0.1199999749660492 -0.052147381007671356 0.0 -0.2760094106197357 -0.9611499309539795 0.4889945089817047 0.8434231877326965 0.4889945089817047 0.8434231877326965 0.08485285937786102 -0.08485281467437744 -0.05214738845825195 -0.19516587257385254 0.19516587257385254 -0.9611499309539795 0.3537041246891022 0.5235439538955688 0.3537041246891022 0.5235439538955688 0.12000000476837158 -1.7601996304961176e-08 -0.052147381007671356 -0.2760094106197357 0.0 -0.9611499309539795 0.2996392846107483 0.6568599939346313 0.2996392846107483 0.6568599939346313 0.30000001192092896 -1.7601996304961176e-08 -0.10383731126785278 -0.2760094106197357 0.0 -0.9611499309539795 0.002806723117828369 0.6554639339447021 0.002806723117828369 0.6554639339447021 -0.21213200688362122 -0.21213209629058838 -0.10383734107017517 0.19516587257385254 0.19516587257385254 -0.9611499309539795 0.8303983211517334 0.3126644492149353 0.8303983211517334 0.3126644492149353 -0.08485278487205505 -0.08485284447669983 -0.05214738845825195 0.19516587257385254 0.19516587257385254 -0.9611499309539795 0.619518518447876 0.5215696096420288 0.619518518447876 0.5215696096420288 3.656776570437614e-08 -0.12000003457069397 -0.052147381007671356 0.0 0.2760094106197357 -0.9611499309539795 0.4862024188041687 0.4675047993659973 0.4862024188041687 0.4675047993659973 -0.21213200688362122 0.2121320366859436 -0.10383731126785278 0.19516587257385254 -0.19516587257385254 -0.9611499309539795 0.8303979635238647 0.9982638359069824 0.8303979635238647 0.9982638359069824 -0.08485278487205505 0.08485281467437744 -0.052147381007671356 0.19516587257385254 -0.19516587257385254 -0.9611499309539795 0.621492862701416 0.7873842120170593 0.621492862701416 0.7873842120170593 -0.1199999749660492 -2.6542693376541138e-08 -0.052147381007671356 0.2760094106197357 0.0 -0.9611499309539795 0.6755576133728027 0.6540679931640625 0.6755576133728027 0.6540679931640625 0.30000001192092896 -1.7601996304961176e-08 -0.10383731126785278 -0.2760094106197357 0.0 -0.9611499309539795 0.002806723117828369 0.6554639339447021 0.002806723117828369 0.6554639339447021 0.12000000476837158 -1.7601996304961176e-08 -0.052147381007671356 -0.2760094106197357 0.0 -0.9611499309539795 0.2996392846107483 0.6568599939346313 0.2996392846107483 0.6568599939346313 0.08485285937786102 0.08485278487205505 -0.052147381007671356 -0.19516587257385254 -0.19516587257385254 -0.9611499309539795 0.3556783199310303 0.7893582582473755 0.3556783199310303 0.7893582582473755 2.7418135317702763e-08 0.1199999749660492 0.11585262417793274 0.0 0.0 1.0 0.8461202383041382 0.1947217583656311 0.8461202383041382 0.1947217583656311 -0.08485278487205505 0.08485278487205505 0.11585262417793274 0.0 0.0 1.0 0.9038795828819275 0.19472169876098633 0.9038795828819275 0.19472169876098633 -0.1199999749660492 -3.548338867176426e-08 0.11585262417793274 0.0 0.0 1.0 0.9447216391563416 0.15387964248657227 0.9447216391563416 0.15387964248657227 -0.1199999749660492 -3.548338867176426e-08 0.11585262417793274 0.0 0.0 1.0 0.9447216391563416 0.15387964248657227 0.9447216391563416 0.15387964248657227 -0.08485278487205505 -0.08485284447669983 0.11585262417793274 0.0 0.0 1.0 0.9447216391563416 0.09612026810646057 0.9447216391563416 0.09612026810646057 2.7418135317702763e-08 0.1199999749660492 0.11585262417793274 0.0 0.0 1.0 0.8461202383041382 0.1947217583656311 0.8461202383041382 0.1947217583656311 -0.08485278487205505 -0.08485284447669983 0.11585262417793274 0.0 0.0 1.0 0.9447216391563416 0.09612026810646057 0.9447216391563416 0.09612026810646057 3.790886893284551e-08 -0.12000003457069397 0.11585262417793274 0.0 0.0 1.0 0.9038795828819275 0.05527821183204651 0.9038795828819275 0.05527821183204651 2.7418135317702763e-08 0.1199999749660492 0.11585262417793274 0.0 0.0 1.0 0.8461202383041382 0.1947217583656311 0.8461202383041382 0.1947217583656311 3.790886893284551e-08 -0.12000003457069397 0.11585262417793274 0.0 0.0 1.0 0.9038795828819275 0.05527821183204651 0.9038795828819275 0.05527821183204651 0.08485285937786102 -0.08485284447669983 0.11585262417793274 0.0 0.0 1.0 0.8461202383041382 0.05527821183204651 0.8461202383041382 0.05527821183204651 0.12000000476837158 -2.6542693376541138e-08 0.11585262417793274 0.0 0.0 1.0 0.8052781820297241 0.09612029790878296 0.8052781820297241 0.09612029790878296 0.12000000476837158 -2.6542693376541138e-08 0.11585262417793274 0.0 0.0 1.0 0.8052781820297241 0.09612029790878296 0.8052781820297241 0.09612029790878296 0.08485285937786102 0.08485276997089386 0.11585265398025513 0.0 0.0 1.0 0.8052781224250793 0.15387964248657227 0.8052781224250793 0.15387964248657227 2.7418135317702763e-08 0.1199999749660492 0.11585262417793274 0.0 0.0 1.0 0.8461202383041382 0.1947217583656311 0.8461202383041382 0.1947217583656311 0 1 2 0 3 4 5 0 6 7 8 0 9 10 11 0 12 13 14 0 15 16 17 0 18 19 20 0 21 22 23 0 24 25 26 0 27 28 29 0 30 31 32 0 33 34 35 0 36 37 38 0 39 40 41 0 42 43 44 0 45 46 47 0 48 49 50 0 51 52 53 0 54 55 56 0 57 58 59 0 60 61 62 0 63 64 65 0 66 67 68 0 69 70 71 0 72 73 74 0 75 76 77 0 78 79 80 0 81 82 83 0 84 85 86 0 87 88 89 0 90 91 92 0 93 94 95 0 96 97 98 0 99 100 101 0 102 103 104 0 105 106 107 0 108 109 110 0 111 112 113 0 114 115 116 0 117 118 119 0 120 121 122 0 123 124 125 0 126 127 128 0 129 130 131 0 132 133 134 0 135 136 137 0 138 139 140 0 141 142 143 0 144 145 146 0 147 148 149 0 150 151 152 0 153 154 155 0 156 157 158 0 159 160 161 0 162 163 164 0 165 166 167 0 168 169 170 0 171 172 173 0 174 175 176 0 177 178 179 0 180 181 182 0 183 184 185 0 ================================================ FILE: data/models/devukaste.mdmdl ================================================ MDMDLv1 metalakaste metalareste kastetase ================================================ FILE: data/models/floppa.dymdl ================================================ 1638 546 1 7 7 floppa -0.05053889751434326 0.1634979248046875 0.7342671155929565 -0.3151646554470062 0.2640766501426697 0.9115268588066101 0.5070644617080688 0.2996123731136322 1 0.9950050711631775 0 0.0 0 0.0 0 0.0 -0.13038241863250732 0.20644712448120117 0.6861461400985718 -0.634571373462677 0.33890804648399353 0.69454026222229 0.6237268447875977 0.2415420264005661 1 0.9900858998298645 0 0.0 0 0.0 0 0.0 -0.12537634372711182 0.11766744405031204 0.7009600400924683 -0.7749870419502258 -0.334574431180954 0.5360881090164185 0.5847986340522766 0.3410102427005768 1 0.9862551689147949 0 0.0 0 0.0 0 0.0 -0.0899050235748291 0.08831120282411575 0.6256042718887329 -0.7000335454940796 -0.713614284992218 0.025116734206676483 0.589812159538269 0.4188792407512665 1 0.9682220816612244 0 0.0 0 0.0 0 0.0 -0.12537634372711182 0.11766744405031204 0.7009600400924683 -0.7749870419502258 -0.334574431180954 0.5360881090164185 0.5847986340522766 0.3410102427005768 1 0.9862551689147949 0 0.0 0 0.0 0 0.0 -0.15605974197387695 0.14025557041168213 0.6220062971115112 -0.8759422302246094 -0.46403393149375916 0.13183996081352234 0.6745739579200745 0.33786362409591675 1 0.9690240025520325 0 0.0 0 0.0 0 0.0 0.0 0.1765376329421997 0.7342671155929565 0.0 0.4454481601715088 0.8952909708023071 0.44110503792762756 0.2877768576145172 1 0.9965916275978088 0 0.0 0 0.0 0 0.0 -0.06078380346298218 0.2408146858215332 0.7048863172531128 -0.25702688097953796 0.5580919981002808 0.7889339923858643 0.5218138098716736 0.20084944367408752 1 0.9963243007659912 0 0.0 0 0.0 0 0.0 -0.05053889751434326 0.1634979248046875 0.7342671155929565 -0.3151646554470062 0.2640766501426697 0.9115268588066101 0.5070644617080688 0.2996123731136322 1 0.9950050711631775 0 0.0 0 0.0 0 0.0 -0.05053889751434326 0.1634979248046875 0.7342671155929565 -0.3151646554470062 0.2640766501426697 0.9115268588066101 0.5070644617080688 0.2996123731136322 1 0.9950050711631775 0 0.0 0 0.0 0 0.0 -0.06865745782852173 0.10929454118013382 0.7345117330551147 -0.5191808938980103 -0.1431928426027298 0.8425549864768982 0.5454435348510742 0.3798229694366455 1 0.9907939434051514 0 0.0 0 0.0 0 0.0 0.0 0.13670289516448975 0.759844183921814 0.0 0.347636342048645 0.9376201629638672 0.444909006357193 0.3479462265968323 1 0.9948671460151672 0 0.0 0 0.0 0 0.0 -0.029034316539764404 0.02282658964395523 0.5975655317306519 -0.5346843004226685 -0.8348338007926941 0.13074129819869995 0.33391112089157104 0.6721431612968445 1 0.9265840649604797 4 0.026504922658205032 0 0.0 0 0.0 -0.035290539264678955 0.032179124653339386 0.6548959016799927 -0.4995880126953125 -0.8637043237686157 0.06610309332609177 0.3249615430831909 0.7529926896095276 1 0.9649173617362976 0 0.0 0 0.0 0 0.0 -0.059469640254974365 0.0555688813328743 0.6115850210189819 -0.7055574059486389 -0.7052217125892639 0.06924650073051453 0.29570549726486206 0.6925798058509827 1 0.9599950313568115 0 0.0 0 0.0 0 0.0 -0.0899050235748291 0.08831120282411575 0.6256042718887329 -0.7000335454940796 -0.713614284992218 0.025116734206676483 0.6875460743904114 0.7333278059959412 1 0.9682220816612244 0 0.0 0 0.0 0 0.0 -0.0705878734588623 0.05552078038454056 0.6960290670394897 -0.6313669085502625 -0.7171849608421326 0.2948698401451111 0.7946124076843262 0.7522226572036743 1 0.9819313287734985 0 0.0 0 0.0 0 0.0 -0.12537634372711182 0.11766744405031204 0.7009600400924683 -0.7749870419502258 -0.334574431180954 0.5360881090164185 0.7006834745407104 0.8323686122894287 1 0.9862551689147949 0 0.0 0 0.0 0 0.0 -0.07210224866867065 0.3025968074798584 0.6355704069137573 -0.08188115805387497 0.842799186706543 0.5319375991821289 0.551694929599762 0.5924338698387146 1 0.9896897077560425 0 0.0 0 0.0 0 0.0 0.0 0.24179911613464355 0.7048863172531128 0.0 0.6098208427429199 0.7925046682357788 0.6366429924964905 0.4814949929714203 1 0.9979282021522522 0 0.0 0 0.0 0 0.0 0.0 0.31928110122680664 0.5975655317306519 0.0 0.9569078683853149 0.29035308957099915 0.6522123217582703 0.6490117907524109 1 0.986151933670044 0 0.0 0 0.0 0 0.0 -0.06078380346298218 0.2408146858215332 0.7048863172531128 -0.25702688097953796 0.5580919981002808 0.7889339923858643 0.5539146065711975 0.48136377334594727 1 0.9963243007659912 0 0.0 0 0.0 0 0.0 -0.13990861177444458 0.2426142692565918 0.6210473775863647 -0.17987608909606934 0.4221320152282715 0.8884853720664978 0.44332829117774963 0.5980841517448425 1 0.9863532781600952 0 0.0 0 0.0 0 0.0 -0.13038241863250732 0.20644712448120117 0.6861461400985718 -0.634571373462677 0.33890804648399353 0.69454026222229 0.44964930415153503 0.499088853597641 1 0.9900858998298645 0 0.0 0 0.0 0 0.0 -0.13038241863250732 0.20644712448120117 0.6861461400985718 -0.634571373462677 0.33890804648399353 0.69454026222229 0.6237268447875977 0.2415420264005661 1 0.9900858998298645 0 0.0 0 0.0 0 0.0 -0.18040990829467773 0.2139267921447754 0.6355704069137573 -0.9097567796707153 -0.0018005920574069023 0.41511276364326477 0.6973033547401428 0.23020672798156738 1 0.9819098114967346 0 0.0 0 0.0 0 0.0 -0.15605974197387695 0.14025557041168213 0.6220062971115112 -0.8759422302246094 -0.46403393149375916 0.13183996081352234 0.6745739579200745 0.33786362409591675 1 0.9690240025520325 0 0.0 0 0.0 0 0.0 -0.19039934873580933 0.3247871398925781 0.6355704069137573 -0.7619251012802124 0.14554277062416077 0.6310617327690125 0.6973033547401428 0.07419048994779587 1 0.9823060631752014 0 0.0 0 0.0 0 0.0 -0.13990861177444458 0.2426142692565918 0.6210473775863647 -0.17987608909606934 0.4221320152282715 0.8884853720664978 0.6398704051971436 0.19736255705356598 1 0.9863532781600952 0 0.0 0 0.0 0 0.0 -0.1529483199119568 0.3224823474884033 0.616545557975769 0.10449537634849548 -0.09079256653785706 0.9903561472892761 0.648408830165863 0.08469385653734207 1 0.9842054843902588 0 0.0 0 0.0 0 0.0 -0.18203496932983398 0.3555026054382324 0.6355704069137573 -0.7024140357971191 0.35395365953445435 0.617480993270874 0.682029664516449 0.03247282654047012 1 0.9823503494262695 0 0.0 0 0.0 0 0.0 -0.1529483199119568 0.3224823474884033 0.616545557975769 0.10449537634849548 -0.09079256653785706 0.9903561472892761 0.648408830165863 0.08469385653734207 1 0.9842054843902588 0 0.0 0 0.0 0 0.0 -0.1613888144493103 0.3804953098297119 0.6355704069137573 -0.09356974810361862 0.8272042274475098 0.5540025234222412 0.6506124138832092 0.00040331503259949386 1 0.9825473427772522 0 0.0 0 0.0 0 0.0 -0.1529483199119568 0.3224823474884033 0.616545557975769 0.10449537634849548 -0.09079256653785706 0.9903561472892761 0.648408830165863 0.08469385653734207 1 0.9842054843902588 0 0.0 0 0.0 0 0.0 -0.07210224866867065 0.3025968074798584 0.6355704069137573 -0.08188115805387497 0.842799186706543 0.5319375991821289 0.5377382636070251 0.12118156999349594 1 0.9896897077560425 0 0.0 0 0.0 0 0.0 -0.1047014594078064 0.34171581268310547 0.6355704069137573 0.5681020617485046 0.5726493000984192 0.5910214781761169 0.5776293873786926 0.06218792498111725 1 0.9845274090766907 0 0.0 0 0.0 0 0.0 -0.1529483199119568 0.3224823474884033 0.616545557975769 0.10449537634849548 -0.09079256653785706 0.9903561472892761 0.648408830165863 0.08469385653734207 1 0.9842054843902588 0 0.0 0 0.0 0 0.0 -0.13313615322113037 0.3669123649597168 0.6355704069137573 0.44904935359954834 0.7006744742393494 0.5543687343597412 0.613527774810791 0.02318226918578148 1 0.983238697052002 0 0.0 0 0.0 0 0.0 -0.1613888144493103 0.3804953098297119 0.6355704069137573 -0.09356974810361862 0.8272042274475098 0.5540025234222412 0.6506124138832092 0.00040331503259949386 1 0.9825473427772522 0 0.0 0 0.0 0 0.0 -0.06865745782852173 0.10929454118013382 0.7345117330551147 -0.5191808938980103 -0.1431928426027298 0.8425549864768982 0.5454435348510742 0.3798229694366455 1 0.9907939434051514 0 0.0 0 0.0 0 0.0 0.0 0.042672283947467804 0.7475627660751343 0.0 -0.7097384333610535 0.7044282555580139 0.4579574763774872 0.4805571734905243 1 0.9884468913078308 0 0.0 0 0.0 0 0.0 0.0 0.09236795455217361 0.7743176221847534 0.0 -0.12359996140003204 0.9923093318939209 0.4487127959728241 0.4081156253814697 1 0.9922438859939575 0 0.0 0 0.0 0 0.0 0.0 0.13670289516448975 0.759844183921814 0.0 0.347636342048645 0.9376201629638672 0.444909006357193 0.3479462265968323 1 0.9948671460151672 0 0.0 0 0.0 0 0.0 -0.06865745782852173 0.10929454118013382 0.7345117330551147 -0.5191808938980103 -0.1431928426027298 0.8425549864768982 0.5454435348510742 0.3798229694366455 1 0.9907939434051514 0 0.0 0 0.0 0 0.0 0.0 0.09236795455217361 0.7743176221847534 0.0 -0.12359996140003204 0.9923093318939209 0.4487127959728241 0.4081156253814697 1 0.9922438859939575 0 0.0 0 0.0 0 0.0 0.0 0.00883752852678299 0.5868633985519409 0.0 -0.9138767719268799 0.4059267044067383 0.3724357783794403 0.6571521162986755 1 0.9038245677947998 6 0.03429456427693367 4 0.03429247811436653 0 0.0 0.0 0.025754906237125397 0.7083276510238647 0.0 -0.9591051936149597 0.28293710947036743 0.37136271595954895 0.828621506690979 1 0.9845536351203918 0 0.0 0 0.0 0 0.0 -0.035290539264678955 0.032179124653339386 0.6548959016799927 -0.4995880126953125 -0.8637043237686157 0.06610309332609177 0.3249615430831909 0.7529926896095276 1 0.9649173617362976 0 0.0 0 0.0 0 0.0 0.0 0.025754906237125397 0.7083276510238647 0.0 -0.9591051936149597 0.28293710947036743 0.37136271595954895 0.828621506690979 1 0.9845536351203918 0 0.0 0 0.0 0 0.0 -0.0705878734588623 0.05552078038454056 0.6960290670394897 -0.6313669085502625 -0.7171849608421326 0.2948698401451111 0.2781895399093628 0.8110224008560181 1 0.9819313287734985 0 0.0 0 0.0 0 0.0 -0.035290539264678955 0.032179124653339386 0.6548959016799927 -0.4995880126953125 -0.8637043237686157 0.06610309332609177 0.3249615430831909 0.7529926896095276 1 0.9649173617362976 0 0.0 0 0.0 0 0.0 -0.0705878734588623 0.05552078038454056 0.6960290670394897 -0.6313669085502625 -0.7171849608421326 0.2948698401451111 0.7946124076843262 0.7522226572036743 1 0.9819313287734985 0 0.0 0 0.0 0 0.0 -0.059469640254974365 0.0555688813328743 0.6115850210189819 -0.7055574059486389 -0.7052217125892639 0.06924650073051453 0.7010108828544617 0.6815871596336365 1 0.9599950313568115 0 0.0 0 0.0 0 0.0 -0.035290539264678955 0.032179124653339386 0.6548959016799927 -0.4995880126953125 -0.8637043237686157 0.06610309332609177 0.7705878019332886 0.688330888748169 1 0.9649173617362976 0 0.0 0 0.0 0 0.0 -0.050073862075805664 0.02092299610376358 0.5243707895278931 -0.6866664886474609 -0.40858179330825806 0.6012146472930908 0.3176169991493225 0.9254664182662964 1 0.8446325063705444 4 0.10059089958667755 0 0.01927739754319191 0 0.0 -0.059469640254974365 0.0555688813328743 0.6115850210189819 -0.7055574059486389 -0.7052217125892639 0.06924650073051453 0.3451562821865082 0.8853135108947754 1 0.9599950313568115 0 0.0 0 0.0 0 0.0 -0.09416019916534424 0.07008225470781326 0.5274871587753296 -0.6548966765403748 -0.6562089920043945 0.3748283386230469 0.3451562821865082 0.9297898411750793 1 0.8562964797019958 0 0.09284330904483795 4 0.036915142089128494 0 0.0 -0.0899050235748291 0.08831120282411575 0.6256042718887329 -0.7000335454940796 -0.713614284992218 0.025116734206676483 0.924144446849823 0.8115005493164062 1 0.9682220816612244 0 0.0 0 0.0 0 0.0 -0.09416019916534424 0.07008225470781326 0.5274871587753296 -0.6548966765403748 -0.6562089920043945 0.3748283386230469 0.9130188822746277 0.861991822719574 1 0.8562964797019958 0 0.09284330904483795 4 0.036915142089128494 0 0.0 -0.059469640254974365 0.0555688813328743 0.6115850210189819 -0.7055574059486389 -0.7052217125892639 0.06924650073051453 0.9084641337394714 0.8151150941848755 1 0.9599950313568115 0 0.0 0 0.0 0 0.0 -0.1687365174293518 0.1454685926437378 0.49789369106292725 -0.982451856136322 -0.15335550904273987 -0.10599078238010406 0.07277017086744308 0.5824607610702515 1 0.8802972435951233 0 0.09416398406028748 0 0.0 0 0.0 -0.0899050235748291 0.08831120282411575 0.6256042718887329 -0.7000335454940796 -0.713614284992218 0.025116734206676483 0.1095123291015625 0.6479935050010681 1 0.9682220816612244 0 0.0 0 0.0 0 0.0 -0.15605974197387695 0.14025557041168213 0.6220062971115112 -0.8759422302246094 -0.46403393149375916 0.13183996081352234 0.0795331671833992 0.6472899913787842 1 0.9690240025520325 0 0.0 0 0.0 0 0.0 -0.15143811702728271 0.2254852056503296 0.5341702699661255 -0.9232154488563538 0.25720998644828796 -0.2854396104812622 0.03369267284870148 0.6037472486495972 1 0.9440637826919556 0 0.04249156638979912 0 0.0 0 0.0 -0.15605974197387695 0.14025557041168213 0.6220062971115112 -0.8759422302246094 -0.46403393149375916 0.13183996081352234 0.0795331671833992 0.6472899913787842 1 0.9690240025520325 0 0.0 0 0.0 0 0.0 -0.18040990829467773 0.2139267921447754 0.6355704069137573 -0.9097567796707153 -0.0018005920574069023 0.41511276364326477 0.040995195508003235 0.656345546245575 1 0.9819098114967346 0 0.0 0 0.0 0 0.0 -0.050073862075805664 0.02092299610376358 0.5243707895278931 -0.6866664886474609 -0.40858179330825806 0.6012146472930908 0.3176169991493225 0.9254664182662964 1 0.8446325063705444 4 0.10059089958667755 0 0.01927739754319191 0 0.0 0.0 0.00883752852678299 0.5868633985519409 0.0 -0.9138767719268799 0.4059267044067383 0.3157893419265747 0.8918732404708862 1 0.9038245677947998 6 0.03429456427693367 4 0.03429247811436653 0 0.0 -0.029034316539764404 0.02282658964395523 0.5975655317306519 -0.5346843004226685 -0.8348338007926941 0.13074129819869995 0.3254745602607727 0.8884339332580566 1 0.9265840649604797 4 0.026504922658205032 0 0.0 0 0.0 0.0 -0.059041060507297516 0.5594795942306519 0.0 -0.37794122099876404 0.9258095026016235 0.003714407328516245 0.717420756816864 1 0.7317149043083191 6 0.12379448860883713 4 0.12379419058561325 0 0.0 -0.15183615684509277 -0.0799783393740654 0.4494694471359253 -0.8179571032524109 -0.059785760939121246 0.5721305012702942 0.08381302654743195 0.7420639395713806 4 0.8048247694969177 0 0.08847372978925705 1 0.08450014889240265 0 0.0 0.0 -0.17929625511169434 0.45751893520355225 0.0 -0.6968291401863098 0.7172154784202576 0.00040331503259949386 0.7850019931793213 6 0.45073360204696655 4 0.45073357224464417 1 0.08223999291658401 0 0.0 -0.15036439895629883 -0.08714862912893295 0.3016083240509033 -0.9604480266571045 -0.09698782116174698 -0.2609332501888275 0.18725724518299103 0.4733530879020691 4 0.7862779498100281 0 0.17627523839473724 0 0.0 0 0.0 -0.17540639638900757 -0.17460304498672485 0.430961012840271 -0.8131046295166016 0.054322946816682816 0.5795159935951233 0.23437808454036713 0.5384660959243774 4 0.960517406463623 0 0.0 0 0.0 0 0.0 -0.15183615684509277 -0.0799783393740654 0.4494694471359253 -0.8179571032524109 -0.059785760939121246 0.5721305012702942 0.18764083087444305 0.5508929491043091 4 0.8048247694969177 0 0.08847372978925705 1 0.08450014889240265 0 0.0 -0.0706138014793396 -0.22762751579284668 0.3014519214630127 0.5107883214950562 -0.33680227398872375 -0.790978729724884 0.14921531081199646 0.7203041911125183 4 0.8573116064071655 6 0.11295726150274277 0 0.004347577691078186 0 0.0 -0.17616277933120728 -0.29728245735168457 0.31193840503692627 -0.6749778985977173 -0.2538224458694458 -0.6927701830863953 0.10438784956932068 0.7673202157020569 4 0.9925202131271362 0 0.0 0 0.0 0 0.0 -0.17356276512145996 -0.18332982063293457 0.28318774700164795 -0.6146122813224792 0.07834101468324661 -0.7849055528640747 0.09196234494447708 0.7093120813369751 4 0.9596999883651733 0 0.01140328124165535 0 0.0 0 0.0 -0.15183615684509277 -0.0799783393740654 0.4494694471359253 -0.8179571032524109 -0.059785760939121246 0.5721305012702942 0.08381302654743195 0.7420639395713806 4 0.8048247694969177 0 0.08847372978925705 1 0.08450014889240265 0 0.0 -0.07245743274688721 -0.2189006805419922 0.4492250680923462 0.3258461356163025 -0.4115115702152252 0.8511307239532471 0.03546648845076561 0.8098580241203308 4 0.8791981935501099 6 0.09424682706594467 0 0.0 0 0.0 0.0 -0.17929625511169434 0.45751893520355225 0.0 -0.6968291401863098 0.7172154784202576 0.00040331503259949386 0.7850019931793213 6 0.45073360204696655 4 0.45073357224464417 1 0.08223999291658401 0 0.0 0.0 -0.196242094039917 0.3226771354675293 0.0 -0.9550157189369202 -0.29651784896850586 0.6543000340461731 0.6595564484596252 6 0.4506283402442932 4 0.4506283402442932 0 0.09200550615787506 0 0.0 -0.07245743274688721 -0.2189006805419922 0.4492250680923462 0.3258461356163025 -0.4115115702152252 0.8511307239532471 0.6920541524887085 0.5932608246803284 4 0.8791981935501099 6 0.09424682706594467 0 0.0 0 0.0 -0.0706138014793396 -0.22762751579284668 0.3014519214630127 0.5107883214950562 -0.33680227398872375 -0.790978729724884 0.6920541524887085 0.6707813739776611 4 0.8573116064071655 6 0.11295726150274277 0 0.004347577691078186 0 0.0 -0.15036439895629883 -0.08714862912893295 0.3016083240509033 -0.9604480266571045 -0.09698782116174698 -0.2609332501888275 0.0938851460814476 0.6571521162986755 4 0.7862779498100281 0 0.17627523839473724 0 0.0 0 0.0 -0.0706138014793396 -0.22762751579284668 0.3014519214630127 0.5107883214950562 -0.33680227398872375 -0.790978729724884 0.14921531081199646 0.7203041911125183 4 0.8573116064071655 6 0.11295726150274277 0 0.004347577691078186 0 0.0 -0.17356276512145996 -0.18332982063293457 0.28318774700164795 -0.6146122813224792 0.07834101468324661 -0.7849055528640747 0.09196234494447708 0.7093120813369751 4 0.9596999883651733 0 0.01140328124165535 0 0.0 0 0.0 -0.08690553903579712 -0.3065640926361084 0.3270174264907837 0.7335429191589355 -0.28986480832099915 -0.6147038340568542 0.1508081704378128 0.761959433555603 4 0.9789289832115173 0 0.0 0 0.0 0 0.0 -0.16209262609481812 -0.36195850372314453 0.33104169368743896 -0.6149784922599792 -0.26581621170043945 -0.7423627376556396 0.11935535073280334 0.798479437828064 4 0.9988442659378052 0 0.0 0 0.0 0 0.0 -0.17616277933120728 -0.29728245735168457 0.31193840503692627 -0.6749778985977173 -0.2538224458694458 -0.6927701830863953 0.10438784956932068 0.7673202157020569 4 0.9925202131271362 0 0.0 0 0.0 0 0.0 -0.17540639638900757 -0.17460304498672485 0.430961012840271 -0.8131046295166016 0.054322946816682816 0.5795159935951233 0.23437808454036713 0.5384660959243774 4 0.960517406463623 0 0.0 0 0.0 0 0.0 -0.17616277933120728 -0.29728245735168457 0.31193840503692627 -0.6749778985977173 -0.2538224458694458 -0.6927701830863953 0.29380425810813904 0.47277066111564636 4 0.9925202131271362 0 0.0 0 0.0 0 0.0 -0.17964047193527222 -0.285830020904541 0.4299675226211548 -0.7866451144218445 -0.07501449435949326 0.6128116846084595 0.2910638153553009 0.5348170399665833 4 0.9926502108573914 0 0.0 0 0.0 0 0.0 -0.07245743274688721 -0.2189006805419922 0.4492250680923462 0.3258461356163025 -0.4115115702152252 0.8511307239532471 0.03546648845076561 0.8098580241203308 4 0.8791981935501099 6 0.09424682706594467 0 0.0 0 0.0 -0.17964047193527222 -0.285830020904541 0.4299675226211548 -0.7866451144218445 -0.07501449435949326 0.6128116846084595 0.08709609508514404 0.8513107895851135 4 0.9926502108573914 0 0.0 0 0.0 0 0.0 -0.09038317203521729 -0.29511165618896484 0.4450465440750122 0.5827814340591431 -0.14893032610416412 0.7988525032997131 0.04047681763768196 0.8505580425262451 4 0.9791664481163025 0 0.0 0 0.0 0 0.0 -0.07245743274688721 -0.2189006805419922 0.4492250680923462 0.3258461356163025 -0.4115115702152252 0.8511307239532471 0.6195079684257507 0.9027084112167358 4 0.8791981935501099 6 0.09424682706594467 0 0.0 0 0.0 -0.08690553903579712 -0.3065640926361084 0.3270174264907837 0.7335429191589355 -0.28986480832099915 -0.6147038340568542 0.5769522190093994 0.8373445272445679 4 0.9789289832115173 0 0.0 0 0.0 0 0.0 -0.0706138014793396 -0.22762751579284668 0.3014519214630127 0.5107883214950562 -0.33680227398872375 -0.790978729724884 0.6195079684257507 0.8264847993850708 4 0.8573116064071655 6 0.11295726150274277 0 0.004347577691078186 0 0.0 -0.16614562273025513 -0.35099244117736816 0.42727792263031006 -0.7634815573692322 -0.10623493045568466 0.6369823217391968 0.07662999629974365 0.8845169544219971 4 0.9988507628440857 0 0.0 0 0.0 0 0.0 -0.09503942728042603 -0.5187876224517822 0.4470318555831909 0.6328318119049072 0.1662037968635559 0.7562181353569031 0.030207481235265732 0.966705858707428 4 0.9998917579650879 0 0.0 0 0.0 0 0.0 -0.09287118911743164 -0.34740591049194336 0.4394129514694214 0.6446424722671509 -0.04431287571787834 0.7631763815879822 0.038997162133455276 0.8780998587608337 4 0.9969676733016968 0 0.0 0 0.0 0 0.0 -0.17964047193527222 -0.285830020904541 0.4299675226211548 -0.7866451144218445 -0.07501449435949326 0.6128116846084595 0.2910638153553009 0.5348170399665833 4 0.9926502108573914 0 0.0 0 0.0 0 0.0 -0.16209262609481812 -0.36195850372314453 0.33104169368743896 -0.6149784922599792 -0.26581621170043945 -0.7423627376556396 0.3281383216381073 0.48101234436035156 4 0.9988442659378052 0 0.0 0 0.0 0 0.0 -0.16614562273025513 -0.35099244117736816 0.42727792263031006 -0.7634815573692322 -0.10623493045568466 0.6369823217391968 0.3250100612640381 0.5316429734230042 4 0.9988507628440857 0 0.0 0 0.0 0 0.0 -0.09038317203521729 -0.29511165618896484 0.4450465440750122 0.5827814340591431 -0.14893032610416412 0.7988525032997131 0.04047681763768196 0.8505580425262451 4 0.9791664481163025 0 0.0 0 0.0 0 0.0 -0.16614562273025513 -0.35099244117736816 0.42727792263031006 -0.7634815573692322 -0.10623493045568466 0.6369823217391968 0.07662999629974365 0.8845169544219971 4 0.9988507628440857 0 0.0 0 0.0 0 0.0 -0.09287118911743164 -0.34740591049194336 0.4394129514694214 0.6446424722671509 -0.04431287571787834 0.7631763815879822 0.038997162133455276 0.8780998587608337 4 0.9969676733016968 0 0.0 0 0.0 0 0.0 -0.08690553903579712 -0.3065640926361084 0.3270174264907837 0.7335429191589355 -0.28986480832099915 -0.6147038340568542 0.5769522190093994 0.8373445272445679 4 0.9789289832115173 0 0.0 0 0.0 0 0.0 -0.09287118911743164 -0.34740591049194336 0.4394129514694214 0.6446424722671509 -0.04431287571787834 0.7631763815879822 0.5520168542861938 0.893970251083374 4 0.9969676733016968 0 0.0 0 0.0 0 0.0 -0.08881819248199463 -0.3583719730377197 0.34317684173583984 0.791894257068634 -0.15695668756961823 -0.5901058912277222 0.5493676066398621 0.8441964983940125 4 0.9974430799484253 0 0.0 0 0.0 0 0.0 -0.09503942728042603 -0.5187876224517822 0.4470318555831909 0.6328318119049072 0.1662037968635559 0.7562181353569031 0.4623115360736847 0.8930864930152893 4 0.9998917579650879 0 0.0 0 0.0 0 0.0 -0.08549678325653076 -0.570166826248169 0.3673415184020996 0.7073580026626587 -0.443037211894989 -0.5507370233535767 0.4382849633693695 0.8507182598114014 4 0.9999839663505554 0 0.0 0 0.0 0 0.0 -0.09170717000961304 -0.5278036594390869 0.36790919303894043 0.7768791913986206 0.011474959552288055 -0.6295052766799927 0.4601333737373352 0.8521638512611389 4 0.9999263882637024 0 0.0 0 0.0 0 0.0 -0.08881819248199463 -0.3583719730377197 0.34317684173583984 0.791894257068634 -0.15695668756961823 -0.5901058912277222 0.5493676066398621 0.8441964983940125 4 0.9974430799484253 0 0.0 0 0.0 0 0.0 -0.09503942728042603 -0.5187876224517822 0.4470318555831909 0.6328318119049072 0.1662037968635559 0.7562181353569031 0.4623115360736847 0.8930864930152893 4 0.9998917579650879 0 0.0 0 0.0 0 0.0 -0.09170717000961304 -0.5278036594390869 0.36790919303894043 0.7768791913986206 0.011474959552288055 -0.6295052766799927 0.4601333737373352 0.8521638512611389 4 0.9999263882637024 0 0.0 0 0.0 0 0.0 -0.16209262609481812 -0.36195850372314453 0.33104169368743896 -0.6149784922599792 -0.26581621170043945 -0.7423627376556396 0.11935535073280334 0.798479437828064 4 0.9988442659378052 0 0.0 0 0.0 0 0.0 -0.09170717000961304 -0.5278036594390869 0.36790919303894043 0.7768791913986206 0.011474959552288055 -0.6295052766799927 0.17439746856689453 0.8748677968978882 4 0.9999263882637024 0 0.0 0 0.0 0 0.0 -0.15195131301879883 -0.530752420425415 0.3579319715499878 -0.634815514087677 -0.03268532454967499 -0.7719351649284363 0.1440824270248413 0.883197546005249 4 0.9999616742134094 0 0.0 0 0.0 0 0.0 -0.16209262609481812 -0.36195850372314453 0.33104169368743896 -0.6149784922599792 -0.26581621170043945 -0.7423627376556396 0.3281383216381073 0.48101234436035156 4 0.9988442659378052 0 0.0 0 0.0 0 0.0 -0.1552836298942566 -0.5217366218566895 0.43705475330352783 -0.7843867540359497 0.10419019311666489 0.6114078164100647 0.4132080078125 0.5320252776145935 4 0.999962329864502 0 0.0 0 0.0 0 0.0 -0.16614562273025513 -0.35099244117736816 0.42727792263031006 -0.7634815573692322 -0.10623493045568466 0.6369823217391968 0.3250100612640381 0.5316429734230042 4 0.9988507628440857 0 0.0 0 0.0 0 0.0 -0.15899169445037842 -0.5631530284881592 0.4472743272781372 -0.9405804872512817 -0.06775109469890594 0.3327127993106842 0.398474782705307 0.9319923520088196 4 0.9999915361404419 0 0.0 0 0.0 0 0.0 -0.08549678325653076 -0.570166826248169 0.3673415184020996 0.7073580026626587 -0.443037211894989 -0.5507370233535767 0.43451640009880066 0.8887473344802856 4 0.9999839663505554 0 0.0 0 0.0 0 0.0 -0.08934891223907471 -0.5597443580627441 0.4588078260421753 0.8483535051345825 0.28254035115242004 0.44770652055740356 0.4345163404941559 0.9368331432342529 4 0.9999756813049316 0 0.0 0 0.0 0 0.0 -0.15195131301879883 -0.530752420425415 0.3579319715499878 -0.634815514087677 -0.03268532454967499 -0.7719351649284363 0.1440824270248413 0.883197546005249 4 0.9999616742134094 0 0.0 0 0.0 0 0.0 -0.08549678325653076 -0.570166826248169 0.3673415184020996 0.7073580026626587 -0.443037211894989 -0.5507370233535767 0.18211792409420013 0.8958807587623596 4 0.9999839663505554 0 0.0 0 0.0 0 0.0 -0.1551395058631897 -0.573575496673584 0.3558077812194824 -0.5728934407234192 -0.44907987117767334 -0.6855983138084412 0.14707347750663757 0.9055101275444031 4 0.9999913573265076 0 0.0 0 0.0 0 0.0 -0.15195131301879883 -0.530752420425415 0.3579319715499878 -0.634815514087677 -0.03268532454967499 -0.7719351649284363 0.41578006744384766 0.49039819836616516 4 0.9999616742134094 0 0.0 0 0.0 0 0.0 -0.15899169445037842 -0.5631530284881592 0.4472743272781372 -0.9405804872512817 -0.06775109469890594 0.3327127993106842 0.4345051050186157 0.5361970067024231 4 0.9999915361404419 0 0.0 0 0.0 0 0.0 -0.1552836298942566 -0.5217366218566895 0.43705475330352783 -0.7843867540359497 0.10419019311666489 0.6114078164100647 0.4132080078125 0.5320252776145935 4 0.999962329864502 0 0.0 0 0.0 0 0.0 -0.09503942728042603 -0.5187876224517822 0.4470318555831909 0.6328318119049072 0.1662037968635559 0.7562181353569031 0.030207481235265732 0.966705858707428 4 0.9998917579650879 0 0.0 0 0.0 0 0.0 -0.15899169445037842 -0.5631530284881592 0.4472743272781372 -0.9405804872512817 -0.06775109469890594 0.3327127993106842 0.060366492718458176 0.9931369423866272 4 0.9999915361404419 0 0.0 0 0.0 0 0.0 -0.08934891223907471 -0.5597443580627441 0.4588078260421753 0.8483535051345825 0.28254035115242004 0.44770652055740356 0.02459888905286789 0.9870380163192749 4 0.9999756813049316 0 0.0 0 0.0 0 0.0 -0.08934891223907471 -0.5597443580627441 0.4588078260421753 0.8483535051345825 0.28254035115242004 0.44770652055740356 0.23897626996040344 0.9261899590492249 4 0.9999756813049316 0 0.0 0 0.0 0 0.0 -0.16460078954696655 -0.5697596073150635 0.48491013050079346 -0.7637562155723572 0.4125797152519226 0.49638354778289795 0.2568512558937073 0.8885793089866638 4 0.9999933242797852 0 0.0 0 0.0 0 0.0 -0.07761454582214355 -0.5762221813201904 0.4922894239425659 0.7108676433563232 0.4380016326904297 0.5502487421035767 0.2568512558937073 0.9330030679702759 4 0.9999874234199524 0 0.0 0 0.0 0 0.0 -0.07761454582214355 -0.5762221813201904 0.4922894239425659 0.7108676433563232 0.4380016326904297 0.5502487421035767 0.7915221452713013 0.8456106185913086 4 0.9999874234199524 0 0.0 0 0.0 0 0.0 -0.1480986475944519 -0.6183133125305176 0.4906195402145386 -0.5136570334434509 -0.6324961185455322 0.5796990990638733 0.7675260305404663 0.8808123469352722 4 0.9999954104423523 0 0.0 0 0.0 0 0.0 -0.0876038670539856 -0.6115889549255371 0.5072916746139526 0.4042786955833435 -0.41471603512763977 0.8152104020118713 0.7738296985626221 0.848929762840271 4 0.9999920725822449 0 0.0 0 0.0 0 0.0 -0.1480986475944519 -0.6183133125305176 0.4906195402145386 -0.5136570334434509 -0.6324961185455322 0.5796990990638733 0.6844348311424255 0.6808247566223145 4 0.9999954104423523 0 0.0 0 0.0 0 0.0 -0.08802717924118042 -0.6150498390197754 0.43218982219696045 0.69466233253479 -0.713675320148468 -0.08999908715486526 0.6530190110206604 0.7109692692756653 4 0.9999951124191284 0 0.0 0 0.0 0 0.0 -0.0876038670539856 -0.6115889549255371 0.5072916746139526 0.4042786955833435 -0.41471603512763977 0.8152104020118713 0.6532340049743652 0.6715880036354065 4 0.9999920725822449 0 0.0 0 0.0 0 0.0 -0.1482757329940796 -0.6178312301635742 0.4188467264175415 -0.5838801264762878 -0.8061464428901672 -0.095767080783844 0.683937668800354 0.7183980941772461 4 0.9999983906745911 0 0.0 0 0.0 0 0.0 -0.09195363521575928 -0.602745532989502 0.37857210636138916 0.5757927298545837 -0.6383251547813416 -0.5108493566513062 0.654041051864624 0.7388721704483032 4 0.9999947547912598 0 0.0 0 0.0 0 0.0 -0.08802717924118042 -0.6150498390197754 0.43218982219696045 0.69466233253479 -0.713675320148468 -0.08999908715486526 0.6530190110206604 0.7109692692756653 4 0.9999951124191284 0 0.0 0 0.0 0 0.0 -0.09195363521575928 -0.602745532989502 0.37857210636138916 0.5757927298545837 -0.6383251547813416 -0.5108493566513062 0.3809150457382202 0.9164982438087463 4 0.9999947547912598 0 0.0 0 0.0 0 0.0 -0.1551395058631897 -0.573575496673584 0.3558077812194824 -0.5728934407234192 -0.44907987117767334 -0.6855983138084412 0.39766812324523926 0.8839065432548523 4 0.9999913573265076 0 0.0 0 0.0 0 0.0 -0.08549678325653076 -0.570166826248169 0.3673415184020996 0.7073580026626587 -0.443037211894989 -0.5507370233535767 0.39766812324523926 0.9202498197555542 4 0.9999839663505554 0 0.0 0 0.0 0 0.0 -0.1482757329940796 -0.6178312301635742 0.4188467264175415 -0.5838801264762878 -0.8061464428901672 -0.095767080783844 0.9334527254104614 0.389056921005249 4 0.9999983906745911 0 0.0 0 0.0 0 0.0 -0.1551395058631897 -0.573575496673584 0.3558077812194824 -0.5728934407234192 -0.44907987117767334 -0.6855983138084412 0.91065514087677 0.3558618128299713 4 0.9999913573265076 0 0.0 0 0.0 0 0.0 -0.15127533674240112 -0.6052298545837402 0.36068880558013916 -0.47083956003189087 -0.5862605571746826 -0.6591998338699341 0.9270529747009277 0.3585353493690491 4 0.9999959468841553 0 0.0 0 0.0 0 0.0 -0.15899169445037842 -0.5631530284881592 0.4472743272781372 -0.9405804872512817 -0.06775109469890594 0.3327127993106842 0.9047964811325073 0.4037174880504608 4 0.9999915361404419 0 0.0 0 0.0 0 0.0 -0.1480986475944519 -0.6183133125305176 0.4906195402145386 -0.5136570334434509 -0.6324961185455322 0.5796990990638733 0.9334527254104614 0.42665594816207886 4 0.9999954104423523 0 0.0 0 0.0 0 0.0 -0.16460078954696655 -0.5697596073150635 0.48491013050079346 -0.7637562155723572 0.4125797152519226 0.49638354778289795 0.9077709913253784 0.42341071367263794 4 0.9999933242797852 0 0.0 0 0.0 0 0.0 -0.07761454582214355 -0.5762221813201904 0.4922894239425659 0.7108676433563232 0.4380016326904297 0.5502487421035767 0.9174387454986572 0.7464988231658936 4 0.9999874234199524 0 0.0 0 0.0 0 0.0 -0.08802717924118042 -0.6150498390197754 0.43218982219696045 0.69466233253479 -0.713675320148468 -0.08999908715486526 0.9366330504417419 0.778315544128418 4 0.9999951124191284 0 0.0 0 0.0 0 0.0 -0.08934891223907471 -0.5597443580627441 0.4588078260421753 0.8483535051345825 0.28254035115242004 0.44770652055740356 0.9084641337394714 0.7634201049804688 4 0.9999756813049316 0 0.0 0 0.0 0 0.0 -0.08802717924118042 -0.6150498390197754 0.43218982219696045 0.69466233253479 -0.713675320148468 -0.08999908715486526 0.9366330504417419 0.778315544128418 4 0.9999951124191284 0 0.0 0 0.0 0 0.0 -0.08549678325653076 -0.570166826248169 0.3673415184020996 0.7073580026626587 -0.443037211894989 -0.5507370233535767 0.9115410447120667 0.8106938600540161 4 0.9999839663505554 0 0.0 0 0.0 0 0.0 -0.08934891223907471 -0.5597443580627441 0.4588078260421753 0.8483535051345825 0.28254035115242004 0.44770652055740356 0.9084641337394714 0.7634201049804688 4 0.9999756813049316 0 0.0 0 0.0 0 0.0 -0.18308591842651367 -0.1715635061264038 -0.30947959423065186 -0.6252326965332031 -0.7065645456314087 0.33136996626853943 0.21177582442760468 0.15119899809360504 3 0.7757202386856079 0 0.20105865597724915 0 0.0 0 0.0 -0.20441192388534546 -0.18915605545043945 -0.555695652961731 -0.7800835967063904 0.13812677562236786 -0.6102175712585449 0.212846040725708 0.021823931485414505 3 0.9740641117095947 0 0.0 0 0.0 0 0.0 -0.18601888418197632 -0.3018697500228882 -0.4252368211746216 -0.6975615620613098 -0.4051026999950409 0.5909604430198669 0.27508801221847534 0.08698911219835281 3 0.986090362071991 0 0.0 0 0.0 0 0.0 -0.09343808889389038 -0.32038211822509766 -0.4421921968460083 0.7430646419525146 -0.36826685070991516 0.5587328672409058 0.8042619824409485 0.8200523853302002 3 0.9944356083869934 0 0.0 0 0.0 0 0.0 -0.1732814908027649 -0.3921675682067871 -0.45750391483306885 -0.6674093008041382 -0.2617572546005249 0.6971343159675598 0.8426058888435364 0.8613379001617432 3 0.9991129636764526 0 0.0 0 0.0 0 0.0 -0.09704774618148804 -0.392566442489624 -0.4658399820327759 0.7643055319786072 -0.14413891732692719 0.6284981966018677 0.8038542866706848 0.8589156270027161 3 0.999832808971405 0 0.0 0 0.0 0 0.0 -0.09343808889389038 -0.32038211822509766 -0.4421921968460083 0.7430646419525146 -0.36826685070991516 0.5587328672409058 0.8824628591537476 0.573641836643219 3 0.9944356083869934 0 0.0 0 0.0 0 0.0 -0.061641693115234375 -0.12674754858016968 -0.5490885972976685 0.599017322063446 0.0636310949921608 -0.7981811165809631 0.8007399439811707 0.49180278182029724 3 0.8647013306617737 0 0.07323107123374939 5 0.02173721417784691 2 0.0023119300603866577 -0.07139867544174194 -0.1890047788619995 -0.3518143892288208 0.5797906517982483 -0.7260048389434814 0.36979278922080994 0.9073172211647034 0.4934375584125519 3 0.7999973893165588 0 0.1541832536458969 5 0.02782197669148445 0 0.0 0.0 -0.034700654447078705 -0.5120750665664673 0.0 -0.28131961822509766 -0.9595934748649597 0.804821252822876 0.43789535760879517 0 0.4035522937774658 5 0.21959787607192993 3 0.21959787607192993 2 0.1571648120880127 -0.07139867544174194 -0.1890047788619995 -0.3518143892288208 0.5797906517982483 -0.7260048389434814 0.36979278922080994 0.9073172211647034 0.4934375584125519 3 0.7999973893165588 0 0.1541832536458969 5 0.02782197669148445 0 0.0 -0.061641693115234375 -0.12674754858016968 -0.5490885972976685 0.599017322063446 0.0636310949921608 -0.7981811165809631 0.8007399439811707 0.49180278182029724 3 0.8647013306617737 0 0.07323107123374939 5 0.02173721417784691 2 0.0023119300603866577 -0.18601888418197632 -0.3018697500228882 -0.4252368211746216 -0.6975615620613098 -0.4051026999950409 0.5909604430198669 0.8518539071083069 0.8132774829864502 3 0.986090362071991 0 0.0 0 0.0 0 0.0 -0.07139867544174194 -0.1890047788619995 -0.3518143892288208 0.5797906517982483 -0.7260048389434814 0.36979278922080994 0.7954190373420715 0.7463236451148987 3 0.7999973893165588 0 0.1541832536458969 5 0.02782197669148445 0 0.0 -0.18308591842651367 -0.1715635061264038 -0.30947959423065186 -0.6252326965332031 -0.7065645456314087 0.33136996626853943 0.8518539071083069 0.7395947575569153 3 0.7757202386856079 0 0.20105865597724915 0 0.0 0 0.0 -0.061641693115234375 -0.12674754858016968 -0.5490885972976685 0.599017322063446 0.0636310949921608 -0.7981811165809631 0.8298012614250183 0.2538372874259949 3 0.8647013306617737 0 0.07323107123374939 5 0.02173721417784691 2 0.0023119300603866577 -0.20441192388534546 -0.18915605545043945 -0.555695652961731 -0.7800835967063904 0.13812677562236786 -0.6102175712585449 0.9039897918701172 0.22283343970775604 3 0.9740641117095947 0 0.0 0 0.0 0 0.0 -0.20714151859283447 -0.0656772330403328 -0.5096536874771118 -0.7676015496253967 0.22464674711227417 -0.600207507610321 0.9018306136131287 0.28798139095306396 3 0.8890505433082581 0 0.06969472020864487 2 0.015910718590021133 0 0.0 -0.050073862075805664 0.02092299610376358 0.5243707895278931 -0.6866664886474609 -0.40858179330825806 0.6012146472930908 0.0349784754216671 0.6804375052452087 1 0.8446325063705444 4 0.10059089958667755 0 0.01927739754319191 0 0.0 -0.15635263919830322 0.0019541755318641663 0.4368339776992798 -0.9516891837120056 0.06549271941184998 0.299966424703598 0.09115571528673172 0.7004624009132385 0 0.4180997312068939 4 0.3349326252937317 1 0.23640847206115723 0 0.0 -0.15183615684509277 -0.0799783393740654 0.4494694471359253 -0.8179571032524109 -0.059785760939121246 0.5721305012702942 0.08381302654743195 0.7420639395713806 4 0.8048247694969177 0 0.08847372978925705 1 0.08450014889240265 0 0.0 -0.15635263919830322 0.0019541755318641663 0.4368339776992798 -0.9516891837120056 0.06549271941184998 0.299966424703598 0.1451314240694046 0.5465568900108337 0 0.4180997312068939 4 0.3349326252937317 1 0.23640847206115723 0 0.0 -0.1328907608985901 0.08454591780900955 0.4755467176437378 -0.9486068487167358 -0.2300790399312973 0.21716971695423126 0.10511094331741333 0.5692154169082642 1 0.7616611123085022 0 0.17892086505889893 4 0.055223498493433 0 0.0 -0.14348971843719482 0.04227609187364578 0.4033273458480835 -0.9923093318939209 0.11435285210609436 0.047242652624845505 0.12420067191123962 0.5302112698554993 0 0.5547997355461121 1 0.27050960063934326 4 0.16870296001434326 0 0.0 0.0 -0.034700654447078705 -0.5120750665664673 0.0 -0.28131961822509766 -0.9595934748649597 0.7954190373420715 0.3016514182090759 0 0.4035522937774658 5 0.21959787607192993 3 0.21959787607192993 2 0.1571648120880127 -0.20714151859283447 -0.0656772330403328 -0.5096536874771118 -0.7676015496253967 0.22464674711227417 -0.600207507610321 0.9018306136131287 0.28798139095306396 3 0.8890505433082581 0 0.06969472020864487 2 0.015910718590021133 0 0.0 -0.20858150720596313 0.007689781486988068 -0.4805508852005005 -0.7801751494407654 -0.053529463708400726 -0.6232184767723083 0.9003711938858032 0.3267052471637726 3 0.6917824745178223 0 0.18764761090278625 2 0.10546613484621048 0 0.0 -0.20858150720596313 0.007689781486988068 -0.4805508852005005 -0.7801751494407654 -0.053529463708400726 -0.6232184767723083 0.11399266123771667 0.06662172824144363 3 0.6917824745178223 0 0.18764761090278625 2 0.10546613484621048 0 0.0 -0.18308591842651367 -0.1715635061264038 -0.30947959423065186 -0.6252326965332031 -0.7065645456314087 0.33136996626853943 0.21177582442760468 0.15119899809360504 3 0.7757202386856079 0 0.20105865597724915 0 0.0 0 0.0 -0.24815957248210907 -0.0371197834610939 -0.2536252737045288 -0.9628284573554993 -0.26746422052383423 0.036957915872335434 0.14128771424293518 0.18390731513500214 0 0.7170878648757935 3 0.2454865425825119 2 0.007828813046216965 0 0.0 -0.24815957248210907 -0.0371197834610939 -0.2536252737045288 -0.9628284573554993 -0.26746422052383423 0.036957915872335434 0.14128771424293518 0.18390731513500214 0 0.7170878648757935 3 0.2454865425825119 2 0.007828813046216965 0 0.0 -0.12958550453186035 -0.1315857172012329 -0.09456980228424072 -0.34760582447052 -0.9195837378501892 0.1829584687948227 0.19997769594192505 0.2649575471878052 0 0.9013321995735168 3 0.07171499729156494 0 0.0 0 0.0 -0.2347235083580017 0.006545670330524445 -0.1102060079574585 -0.9553208947181702 -0.24109622836112976 0.17084261775016785 0.12361200898885727 0.26020655035972595 0 0.9013984799385071 3 0.0706256553530693 0 0.0 0 0.0 -0.16476905345916748 -0.032182566821575165 0.1135796308517456 -0.9007843136787415 -0.41755425930023193 0.1192358136177063 0.15316157042980194 0.3764743208885193 0 0.9259852170944214 4 0.04309037700295448 0 0.0 0 0.0 -0.12958550453186035 -0.1315857172012329 -0.09456980228424072 -0.34760582447052 -0.9195837378501892 0.1829584687948227 0.19997769594192505 0.2649575471878052 0 0.9013321995735168 3 0.07171499729156494 0 0.0 0 0.0 -0.13016337156295776 -0.10303550213575363 0.1634429693222046 -0.7592394948005676 -0.6505325436592102 -0.01754814386367798 0.19253799319267273 0.40071889758110046 0 0.8383778929710388 4 0.12892886996269226 0 0.0 0 0.0 -0.13016337156295776 -0.10303550213575363 0.1634429693222046 -0.7592394948005676 -0.6505325436592102 -0.01754814386367798 0.19253799319267273 0.40071889758110046 0 0.8383778929710388 4 0.12892886996269226 0 0.0 0 0.0 -0.14634591341018677 -0.032207198441028595 0.28267955780029297 -0.9860835671424866 -0.16443373262882233 0.023529771715402603 0.15881086885929108 0.46500539779663086 0 0.6134584546089172 4 0.334782212972641 1 0.028665481135249138 0 0.0 -0.16476905345916748 -0.032182566821575165 0.1135796308517456 -0.9007843136787415 -0.41755425930023193 0.1192358136177063 0.15316157042980194 0.3764743208885193 0 0.9259852170944214 4 0.04309037700295448 0 0.0 0 0.0 -0.16675245761871338 0.013475604355335236 0.27252471446990967 -0.9878231287002563 -0.08340708911418915 0.13122959434986115 0.13413144648075104 0.46088677644729614 0 0.7682547569274902 4 0.16683459281921387 1 0.056936074048280716 0 0.0 -0.16476905345916748 -0.032182566821575165 0.1135796308517456 -0.9007843136787415 -0.41755425930023193 0.1192358136177063 0.15316157042980194 0.3764743208885193 0 0.9259852170944214 4 0.04309037700295448 0 0.0 0 0.0 -0.14634591341018677 -0.032207198441028595 0.28267955780029297 -0.9860835671424866 -0.16443373262882233 0.023529771715402603 0.15881086885929108 0.46500539779663086 0 0.6134584546089172 4 0.334782212972641 1 0.028665481135249138 0 0.0 -0.2347235083580017 0.006545670330524445 -0.1102060079574585 -0.9553208947181702 -0.24109622836112976 0.17084261775016785 0.12361200898885727 0.26020655035972595 0 0.9013984799385071 3 0.0706256553530693 0 0.0 0 0.0 -0.18591099977493286 0.027745135128498077 0.1363673210144043 -0.9799188375473022 -0.05694753676652908 0.1909848302602768 0.12207462638616562 0.3899834156036377 0 0.9314292669296265 4 0.028245750814676285 0 0.0 0 0.0 -0.22698575258255005 0.09685314446687698 -0.09775805473327637 -0.9559617638587952 0.26496168971061707 0.126163512468338 0.07812663912773132 0.2692766785621643 0 0.9218431115150452 3 0.03574578836560249 2 0.0003750547766685486 0 0.0 -0.2347235083580017 0.006545670330524445 -0.1102060079574585 -0.9553208947181702 -0.24109622836112976 0.17084261775016785 0.12361200898885727 0.26020655035972595 0 0.9013984799385071 3 0.0706256553530693 0 0.0 0 0.0 -0.24470371007919312 0.06189621239900589 -0.2797147035598755 -0.9805597066879272 0.1901303082704544 -0.04824976250529289 0.09005673974752426 0.17304474115371704 0 0.7772277593612671 3 0.15139922499656677 2 0.0652080550789833 0 0.0 -0.24815957248210907 -0.0371197834610939 -0.2536252737045288 -0.9628284573554993 -0.26746422052383423 0.036957915872335434 0.14128771424293518 0.18390731513500214 0 0.7170878648757935 3 0.2454865425825119 2 0.007828813046216965 0 0.0 0.0 0.08928192406892776 -0.5540534257888794 0.0 -0.35929441452026367 -0.9331949949264526 0.796051561832428 0.36615949869155884 2 0.8365933895111084 0 0.07663940638303757 5 0.036726269870996475 3 0.036726269870996475 -0.20858150720596313 0.007689781486988068 -0.4805508852005005 -0.7801751494407654 -0.053529463708400726 -0.6232184767723083 0.9003711938858032 0.3267052471637726 3 0.6917824745178223 0 0.18764761090278625 2 0.10546613484621048 0 0.0 -0.216885507106781 0.10776758939027786 -0.49034416675567627 -0.7796563506126404 0.18768882751464844 -0.5973693132400513 0.9039897918701172 0.37911513447761536 0 0.38549932837486267 3 0.30454903841018677 2 0.30049633979797363 0 0.0 -0.20858150720596313 0.007689781486988068 -0.4805508852005005 -0.7801751494407654 -0.053529463708400726 -0.6232184767723083 0.11399266123771667 0.06662172824144363 3 0.6917824745178223 0 0.18764761090278625 2 0.10546613484621048 0 0.0 -0.24470371007919312 0.06189621239900589 -0.2797147035598755 -0.9805597066879272 0.1901303082704544 -0.04824976250529289 0.09005673974752426 0.17304474115371704 0 0.7772277593612671 3 0.15139922499656677 2 0.0652080550789833 0 0.0 -0.216885507106781 0.10776758939027786 -0.49034416675567627 -0.7796563506126404 0.18768882751464844 -0.5973693132400513 0.062087494879961014 0.06426440179347992 0 0.38549932837486267 3 0.30454903841018677 2 0.30049633979797363 0 0.0 -0.09570074081420898 0.19440031051635742 -0.5164247751235962 -0.49549850821495056 0.5802789330482483 -0.6462904810905457 0.8421570658683777 0.4227440059185028 2 0.8343983888626099 0 0.1073855310678482 3 0.05108572542667389 0 0.0 -0.216885507106781 0.10776758939027786 -0.49034416675567627 -0.7796563506126404 0.18768882751464844 -0.5973693132400513 0.9039897918701172 0.37911513447761536 0 0.38549932837486267 3 0.30454903841018677 2 0.30049633979797363 0 0.0 -0.15887433290481567 0.21892106533050537 -0.44221174716949463 -0.5289468169212341 0.8012634515762329 -0.2795800566673279 0.8707311749458313 0.4370887577533722 2 0.6093363165855408 0 0.28971463441848755 3 0.09326215833425522 0 0.0 0.0 0.24354887008666992 -0.5526114702224731 0.0 0.9767143726348877 -0.2144230455160141 0.7908804416656494 0.4901359975337982 2 0.9730596542358398 0 0.0 0 0.0 0 0.0 -0.03598451614379883 0.1886899471282959 -0.6095010042190552 -0.9367351531982422 0.18414868414402008 -0.29761651158332825 0.7668266892433167 0.5149851441383362 2 0.991046130657196 0 0.0 0 0.0 0 0.0 -0.09570074081420898 0.19440031051635742 -0.5164247751235962 -0.49549850821495056 0.5802789330482483 -0.6462904810905457 0.7379171252250671 0.46803349256515503 2 0.8343983888626099 0 0.1073855310678482 3 0.05108572542667389 0 0.0 0.0 0.08928192406892776 -0.5540534257888794 0.0 -0.35929441452026367 -0.9331949949264526 0.3732423782348633 0.6631662249565125 2 0.8365933895111084 0 0.07663940638303757 5 0.036726269870996475 3 0.036726269870996475 -0.03598451614379883 0.1886899471282959 -0.6095010042190552 -0.9367351531982422 0.18414868414402008 -0.29761651158332825 0.4186630845069885 0.7031288146972656 2 0.991046130657196 0 0.0 0 0.0 0 0.0 0.0 0.12543010711669922 -0.611486554145813 0.0 -0.9602038860321045 -0.2791833281517029 0.3850645124912262 0.6965480446815491 2 0.9726563692092896 0 0.0 0 0.0 0 0.0 -0.03598451614379883 0.1886899471282959 -0.6095010042190552 -0.9367351531982422 0.18414868414402008 -0.29761651158332825 0.7668266892433167 0.5149851441383362 2 0.991046130657196 0 0.0 0 0.0 0 0.0 0.0 0.20252740383148193 -0.7054659128189087 0.0 0.999908447265625 0.013458662666380405 0.785669207572937 0.5653976798057556 2 0.998930811882019 0 0.0 0 0.0 0 0.0 -0.03391218185424805 0.16914141178131104 -0.7118293046951294 -0.9985961318016052 -0.03466902673244476 -0.0395825058221817 0.7651706337928772 0.5660513639450073 2 0.9985517859458923 0 0.0 0 0.0 0 0.0 0.0 0.12543010711669922 -0.611486554145813 0.0 -0.9602038860321045 -0.2791833281517029 0.3850645124912262 0.6965480446815491 2 0.9726563692092896 0 0.0 0 0.0 0 0.0 -0.03391218185424805 0.16914141178131104 -0.7118293046951294 -0.9985961318016052 -0.03466902673244476 -0.0395825058221817 0.3975711762905121 0.7533164024353027 2 0.9985517859458923 0 0.0 0 0.0 0 0.0 0.0 0.12997519969940186 -0.7220932245254517 0.0 -0.9840693473815918 -0.17770928144454956 0.37523388862609863 0.7536645531654358 2 0.9981896281242371 0 0.0 0 0.0 0 0.0 -0.03391218185424805 0.16914141178131104 -0.7118293046951294 -0.9985961318016052 -0.03466902673244476 -0.0395825058221817 0.7651706337928772 0.5660513639450073 2 0.9985517859458923 0 0.0 0 0.0 0 0.0 0.0 0.22866559028625488 -0.7980247735977173 0.0 0.8856776356697083 0.46427807211875916 0.7875749468803406 0.615498423576355 2 0.9999145865440369 0 0.0 0 0.0 0 0.0 -0.03391218185424805 0.20211052894592285 -0.8192368745803833 -0.9987182021141052 -0.04589983820915222 -0.020203253254294395 0.7676439881324768 0.6244237422943115 2 0.9999237060546875 0 0.0 0 0.0 0 0.0 0.0 0.12997519969940186 -0.7220932245254517 0.0 -0.9840693473815918 -0.17770928144454956 0.37523388862609863 0.7536645531654358 2 0.9981896281242371 0 0.0 0 0.0 0 0.0 -0.03391218185424805 0.20211052894592285 -0.8192368745803833 -0.9987182021141052 -0.04589983820915222 -0.020203253254294395 0.402330219745636 0.8119280338287354 2 0.9999237060546875 0 0.0 0 0.0 0 0.0 0.0 0.1722644567489624 -0.846596360206604 0.0 -0.8490249514579773 -0.5283058881759644 0.382790744304657 0.822054386138916 2 0.9999455809593201 0 0.0 0 0.0 0 0.0 -0.03391218185424805 0.20211052894592285 -0.8192368745803833 -0.9987182021141052 -0.04589983820915222 -0.020203253254294395 0.7676439881324768 0.6244237422943115 2 0.9999237060546875 0 0.0 0 0.0 0 0.0 0.0 0.30632472038269043 -0.888379693031311 0.0 0.7523728013038635 0.6587114930152893 0.7946124076843262 0.6690369248390198 2 0.9999912977218628 0 0.0 0 0.0 0 0.0 -0.03248608112335205 0.2871565818786621 -0.9138075113296509 -0.9984740614891052 -0.027558214962482452 -0.047822505235672 0.7761039733886719 0.6807805299758911 2 0.999992847442627 0 0.0 0 0.0 0 0.0 0.0 0.1722644567489624 -0.846596360206604 0.0 -0.8490249514579773 -0.5283058881759644 0.382790744304657 0.822054386138916 2 0.9999455809593201 0 0.0 0 0.0 0 0.0 -0.03248608112335205 0.2871565818786621 -0.9138075113296509 -0.9984740614891052 -0.027558214962482452 -0.047822505235672 0.43451640009880066 0.8696845769882202 2 0.999992847442627 0 0.0 0 0.0 0 0.0 0.0 0.2664310932159424 -0.9455810785293579 0.0 -0.7245094180107117 -0.6892300248146057 0.4191298186779022 0.8830998539924622 2 0.9999951124191284 0 0.0 0 0.0 0 0.0 -0.09570074081420898 0.19440031051635742 -0.5164247751235962 -0.49549850821495056 0.5802789330482483 -0.6462904810905457 0.7379171252250671 0.46803349256515503 2 0.8343983888626099 0 0.1073855310678482 3 0.05108572542667389 0 0.0 0.0 0.23639917373657227 -0.4245549440383911 0.0 0.9959410429000854 -0.08999908715486526 0.7911243438720703 0.4233974516391754 2 0.7914459109306335 0 0.1775953471660614 0 0.0 0 0.0 0.0 0.24354887008666992 -0.5526114702224731 0.0 0.9767143726348877 -0.2144230455160141 0.7908804416656494 0.4901359975337982 2 0.9730596542358398 0 0.0 0 0.0 0 0.0 -0.15887433290481567 0.21892106533050537 -0.44221174716949463 -0.5289468169212341 0.8012634515762329 -0.2795800566673279 0.009432848542928696 0.0927925854921341 2 0.6093363165855408 0 0.28971463441848755 3 0.09326215833425522 0 0.0 -0.24470371007919312 0.06189621239900589 -0.2797147035598755 -0.9805597066879272 0.1901303082704544 -0.04824976250529289 0.09005673974752426 0.17304474115371704 0 0.7772277593612671 3 0.15139922499656677 2 0.0652080550789833 0 0.0 -0.17098987102508545 0.22969770431518555 -0.25236809253692627 -0.573503851890564 0.8189031481742859 0.021027252078056335 0.00861236173659563 0.1923501342535019 0 0.8024826049804688 2 0.15540441870689392 3 0.022846873849630356 0 0.0 0.0 0.23639917373657227 -0.4245549440383911 0.0 0.9959410429000854 -0.08999908715486526 0.7911243438720703 0.4233974516391754 2 0.7914459109306335 0 0.1775953471660614 0 0.0 0 0.0 -0.17098987102508545 0.22969770431518555 -0.25236809253692627 -0.573503851890564 0.8189031481742859 0.021027252078056335 0.7053508758544922 0.3356010913848877 0 0.8024826049804688 2 0.15540441870689392 3 0.022846873849630356 0 0.0 0.0 0.24447298049926758 -0.1661921739578247 0.0 0.9895016551017761 0.14435255527496338 0.7938501238822937 0.2907457947731018 0 0.8835389614105225 2 0.09514472633600235 0 0.0 0 0.0 -0.17098987102508545 0.22969770431518555 -0.25236809253692627 -0.573503851890564 0.8189031481742859 0.021027252078056335 0.00861236173659563 0.1923501342535019 0 0.8024826049804688 2 0.15540441870689392 3 0.022846873849630356 0 0.0 -0.22698575258255005 0.09685314446687698 -0.09775805473327637 -0.9559617638587952 0.26496168971061707 0.126163512468338 0.07812663912773132 0.2692766785621643 0 0.9218431115150452 3 0.03574578836560249 2 0.0003750547766685486 0 0.0 -0.17741501331329346 0.1839226484298706 -0.056742191314697266 -0.5986510515213013 0.765648365020752 0.23526719212532043 0.03717894107103348 0.29337358474731445 0 0.9394767880439758 2 0.021471891552209854 0 0.0 0 0.0 0.0 0.24447298049926758 -0.1661921739578247 0.0 0.9895016551017761 0.14435255527496338 0.7938501238822937 0.2907457947731018 0 0.8835389614105225 2 0.09514472633600235 0 0.0 0 0.0 -0.17741501331329346 0.1839226484298706 -0.056742191314697266 -0.5986510515213013 0.765648365020752 0.23526719212532043 0.6990169882774353 0.23061582446098328 0 0.9394767880439758 2 0.021471891552209854 0 0.0 0 0.0 0.0 0.18546009063720703 0.05253899097442627 0.0 0.9800409078598022 0.1987060159444809 0.7896201014518738 0.17259444296360016 0 0.9702994227409363 0 0.0 0 0.0 0 0.0 -0.16880565881729126 0.11794913560152054 0.11694061756134033 -0.7443464398384094 0.6213263273239136 0.24463637173175812 0.0762190967798233 0.3824160099029541 0 0.9508360624313354 0 0.0 0 0.0 0 0.0 -0.22698575258255005 0.09685314446687698 -0.09775805473327637 -0.9559617638587952 0.26496168971061707 0.126163512468338 0.07812663912773132 0.2692766785621643 0 0.9218431115150452 3 0.03574578836560249 2 0.0003750547766685486 0 0.0 -0.18591099977493286 0.027745135128498077 0.1363673210144043 -0.9799188375473022 -0.05694753676652908 0.1909848302602768 0.12207462638616562 0.3899834156036377 0 0.9314292669296265 4 0.028245750814676285 0 0.0 0 0.0 0.0 0.18546009063720703 0.05253899097442627 0.0 0.9800409078598022 0.1987060159444809 0.7896201014518738 0.17259444296360016 0 0.9702994227409363 0 0.0 0 0.0 0 0.0 -0.16880565881729126 0.11794913560152054 0.11694061756134033 -0.7443464398384094 0.6213263273239136 0.24463637173175812 0.6981099843978882 0.13501593470573425 0 0.9508360624313354 0 0.0 0 0.0 0 0.0 0.0 0.18546009063720703 0.1571263074874878 0.0 0.999481201171875 0.0316782146692276 0.7903990745544434 0.11860571801662445 0 0.9424790740013123 1 0.04657768830657005 0 0.0 0 0.0 -0.13336622714996338 0.11216402798891068 0.2601882219314575 -0.7886288166046143 0.6137882471084595 -0.03564561903476715 0.716507077217102 0.06020791083574295 0 0.842883288860321 1 0.11205136030912399 4 0.03046063892543316 0 0.0 0.0 0.18546009063720703 0.1571263074874878 0.0 0.999481201171875 0.0316782146692276 0.7903990745544434 0.11860571801662445 0 0.9424790740013123 1 0.04657768830657005 0 0.0 0 0.0 -0.16880565881729126 0.11794913560152054 0.11694061756134033 -0.7443464398384094 0.6213263273239136 0.24463637173175812 0.6981099843978882 0.13501593470573425 0 0.9508360624313354 0 0.0 0 0.0 0 0.0 -0.15036439895629883 -0.08714862912893295 0.3016083240509033 -0.9604480266571045 -0.09698782116174698 -0.2609332501888275 0.18725724518299103 0.4733530879020691 4 0.7862779498100281 0 0.17627523839473724 0 0.0 0 0.0 -0.15635263919830322 0.0019541755318641663 0.4368339776992798 -0.9516891837120056 0.06549271941184998 0.299966424703598 0.1451314240694046 0.5465568900108337 0 0.4180997312068939 4 0.3349326252937317 1 0.23640847206115723 0 0.0 -0.14634591341018677 -0.032207198441028595 0.28267955780029297 -0.9860835671424866 -0.16443373262882233 0.023529771715402603 0.15881086885929108 0.46500539779663086 0 0.6134584546089172 4 0.334782212972641 1 0.028665481135249138 0 0.0 -0.14348971843719482 0.04227609187364578 0.4033273458480835 -0.9923093318939209 0.11435285210609436 0.047242652624845505 0.12420067191123962 0.5302112698554993 0 0.5547997355461121 1 0.27050960063934326 4 0.16870296001434326 0 0.0 -0.14634591341018677 -0.032207198441028595 0.28267955780029297 -0.9860835671424866 -0.16443373262882233 0.023529771715402603 0.15881086885929108 0.46500539779663086 0 0.6134584546089172 4 0.334782212972641 1 0.028665481135249138 0 0.0 -0.15635263919830322 0.0019541755318641663 0.4368339776992798 -0.9516891837120056 0.06549271941184998 0.299966424703598 0.1451314240694046 0.5465568900108337 0 0.4180997312068939 4 0.3349326252937317 1 0.23640847206115723 0 0.0 -0.16675245761871338 0.013475604355335236 0.27252471446990967 -0.9878231287002563 -0.08340708911418915 0.13122959434986115 0.13413144648075104 0.46088677644729614 0 0.7682547569274902 4 0.16683459281921387 1 0.056936074048280716 0 0.0 -0.14645665884017944 0.1097654178738594 0.37481164932250977 -0.9749442934989929 0.221472829580307 -0.019989624619483948 0.08871705830097198 0.5171707272529602 0 0.5417124032974243 1 0.386583149433136 4 0.06799639761447906 0 0.0 -0.13336622714996338 0.11216402798891068 0.2601882219314575 -0.7886288166046143 0.6137882471084595 -0.03564561903476715 0.08494245260953903 0.4573333263397217 0 0.842883288860321 1 0.11205136030912399 4 0.03046063892543316 0 0.0 -0.18591099977493286 0.027745135128498077 0.1363673210144043 -0.9799188375473022 -0.05694753676652908 0.1909848302602768 0.12207462638616562 0.3899834156036377 0 0.9314292669296265 4 0.028245750814676285 0 0.0 0 0.0 -0.13336622714996338 0.11216402798891068 0.2601882219314575 -0.7886288166046143 0.6137882471084595 -0.03564561903476715 0.08494245260953903 0.4573333263397217 0 0.842883288860321 1 0.11205136030912399 4 0.03046063892543316 0 0.0 -0.16880565881729126 0.11794913560152054 0.11694061756134033 -0.7443464398384094 0.6213263273239136 0.24463637173175812 0.0762190967798233 0.3824160099029541 0 0.9508360624313354 0 0.0 0 0.0 0 0.0 -0.14645665884017944 0.1097654178738594 0.37481164932250977 -0.9749442934989929 0.221472829580307 -0.019989624619483948 0.08871705830097198 0.5171707272529602 0 0.5417124032974243 1 0.386583149433136 4 0.06799639761447906 0 0.0 -0.14348971843719482 0.04227609187364578 0.4033273458480835 -0.9923093318939209 0.11435285210609436 0.047242652624845505 0.12420067191123962 0.5302112698554993 0 0.5547997355461121 1 0.27050960063934326 4 0.16870296001434326 0 0.0 -0.1328907608985901 0.08454591780900955 0.4755467176437378 -0.9486068487167358 -0.2300790399312973 0.21716971695423126 0.10511094331741333 0.5692154169082642 1 0.7616611123085022 0 0.17892086505889893 4 0.055223498493433 0 0.0 -0.1328907608985901 0.08454591780900955 0.4755467176437378 -0.9486068487167358 -0.2300790399312973 0.21716971695423126 0.10511094331741333 0.5692154169082642 1 0.7616611123085022 0 0.17892086505889893 4 0.055223498493433 0 0.0 -0.14436477422714233 0.1705399751663208 0.42970240116119385 -0.9082003235816956 0.2847071886062622 -0.30674153566360474 0.059249572455883026 0.5475928783416748 1 0.7659354209899902 0 0.20331056416034698 4 0.007473912090063095 0 0.0 -0.14645665884017944 0.1097654178738594 0.37481164932250977 -0.9749442934989929 0.221472829580307 -0.019989624619483948 0.08871705830097198 0.5171707272529602 0 0.5417124032974243 1 0.386583149433136 4 0.06799639761447906 0 0.0 0.0 0.1879560947418213 0.26575779914855957 0.0 0.9689321517944336 -0.2472609579563141 0.7914559245109558 0.06275101006031036 0 0.7974072098731995 1 0.18872691690921783 0 0.0 0 0.0 -0.09047484397888184 0.21522080898284912 0.39295387268066406 -0.5327311158180237 0.6883449554443359 -0.4922940731048584 0.749397337436676 0.00040331503259949386 1 0.7951807379722595 0 0.19068527221679688 0 0.0 0 0.0 0.0 0.21217751502990723 0.36668074131011963 0.0 0.8941618204116821 -0.44770652055740356 0.7946124076843262 0.012804902158677578 1 0.7214112877845764 0 0.26902148127555847 0 0.0 0 0.0 -0.14645665884017944 0.1097654178738594 0.37481164932250977 -0.9749442934989929 0.221472829580307 -0.019989624619483948 0.08871705830097198 0.5171707272529602 0 0.5417124032974243 1 0.386583149433136 4 0.06799639761447906 0 0.0 -0.09047484397888184 0.21522080898284912 0.39295387268066406 -0.5327311158180237 0.6883449554443359 -0.4922940731048584 0.03804061561822891 0.5298435091972351 1 0.7951807379722595 0 0.19068527221679688 0 0.0 0 0.0 -0.13336622714996338 0.11216402798891068 0.2601882219314575 -0.7886288166046143 0.6137882471084595 -0.03564561903476715 0.08494245260953903 0.4573333263397217 0 0.842883288860321 1 0.11205136030912399 4 0.03046063892543316 0 0.0 -0.1687365174293518 0.1454685926437378 0.49789369106292725 -0.982451856136322 -0.15335550904273987 -0.10599078238010406 0.07277017086744308 0.5824607610702515 1 0.8802972435951233 0 0.09416398406028748 0 0.0 0 0.0 -0.11800521612167358 0.24999380111694336 0.48617875576019287 -0.773796796798706 0.5241248607635498 -0.3556627035140991 0.021475009620189667 0.5794675946235657 1 0.9226130843162537 0 0.06844232976436615 0 0.0 0 0.0 -0.14436477422714233 0.1705399751663208 0.42970240116119385 -0.9082003235816956 0.2847071886062622 -0.30674153566360474 0.059249572455883026 0.5475928783416748 1 0.7659354209899902 0 0.20331056416034698 4 0.007473912090063095 0 0.0 -0.09047484397888184 0.21522080898284912 0.39295387268066406 -0.5327311158180237 0.6883449554443359 -0.4922940731048584 0.03804061561822891 0.5298435091972351 1 0.7951807379722595 0 0.19068527221679688 0 0.0 0 0.0 -0.11800521612167358 0.24999380111694336 0.48617875576019287 -0.773796796798706 0.5241248607635498 -0.3556627035140991 0.021475009620189667 0.5794675946235657 1 0.9226130843162537 0 0.06844232976436615 0 0.0 0 0.0 -0.07563048601150513 0.27506399154663086 0.4404362440109253 -0.4518570601940155 0.6767174005508423 -0.5812555551528931 0.009478164836764336 0.5564171671867371 1 0.9063006639480591 0 0.08650905638933182 0 0.0 0 0.0 0.0 0.2737917900085449 0.4282184839248657 0.0 0.6853236556053162 -0.7282326817512512 0.34596291184425354 0.8853135108947754 1 0.8951932191848755 0 0.09897997975349426 0 0.0 0 0.0 -0.09047484397888184 0.21522080898284912 0.39295387268066406 -0.5327311158180237 0.6883449554443359 -0.4922940731048584 0.37843960523605347 0.9328422546386719 1 0.7951807379722595 0 0.19068527221679688 0 0.0 0 0.0 -0.07563048601150513 0.27506399154663086 0.4404362440109253 -0.4518570601940155 0.6767174005508423 -0.5812555551528931 0.3467414975166321 0.9241817593574524 1 0.9063006639480591 0 0.08650905638933182 0 0.0 0 0.0 -0.19039934873580933 0.3247871398925781 0.6355704069137573 -0.7619251012802124 0.14554277062416077 0.6310617327690125 0.27696818113327026 0.8137040734291077 1 0.9823060631752014 0 0.0 0 0.0 0 0.0 -0.17613452672958374 0.2313833236694336 0.6070717573165894 -0.939146101474762 -0.07638783007860184 -0.334879606962204 0.2380296140909195 0.6809014678001404 1 0.9754646420478821 0 0.0 0 0.0 0 0.0 -0.18040990829467773 0.2139267921447754 0.6355704069137573 -0.9097567796707153 -0.0018005920574069023 0.41511276364326477 0.27738291025161743 0.6571521162986755 1 0.9819098114967346 0 0.0 0 0.0 0 0.0 -0.13313615322113037 0.3669123649597168 0.6355704069137573 0.44904935359954834 0.7006744742393494 0.5543687343597412 0.9076574444770813 0.7835649847984314 1 0.983238697052002 0 0.0 0 0.0 0 0.0 -0.1047014594078064 0.34171581268310547 0.6355704069137573 0.5681020617485046 0.5726493000984192 0.5910214781761169 0.8933216333389282 0.8348871469497681 1 0.9845274090766907 0 0.0 0 0.0 0 0.0 -0.1190231442451477 0.3240025043487549 0.6043640375137329 0.49604785442352295 0.7510910630226135 -0.4355906844139099 0.8601824045181274 0.8244431614875793 1 0.9815371632575989 0 0.0 0 0.0 0 0.0 -0.1047014594078064 0.34171581268310547 0.6355704069137573 0.5681020617485046 0.5726493000984192 0.5910214781761169 0.8933216333389282 0.8348871469497681 1 0.9845274090766907 0 0.0 0 0.0 0 0.0 -0.07210224866867065 0.3025968074798584 0.6355704069137573 -0.08188115805387497 0.842799186706543 0.5319375991821289 0.8641595244407654 0.9000012874603271 1 0.9896897077560425 0 0.0 0 0.0 0 0.0 -0.1190231442451477 0.3240025043487549 0.6043640375137329 0.49604785442352295 0.7510910630226135 -0.4355906844139099 0.8601824045181274 0.8244431614875793 1 0.9815371632575989 0 0.0 0 0.0 0 0.0 -0.19039934873580933 0.3247871398925781 0.6355704069137573 -0.7619251012802124 0.14554277062416077 0.6310617327690125 0.27696818113327026 0.8137040734291077 1 0.9823060631752014 0 0.0 0 0.0 0 0.0 -0.18203496932983398 0.3555026054382324 0.6355704069137573 -0.7024140357971191 0.35395365953445435 0.617480993270874 0.2770572006702423 0.8555743098258972 1 0.9823503494262695 0 0.0 0 0.0 0 0.0 -0.1612895131111145 0.33922386169433594 0.5898922681808472 -0.37003692984580994 0.5403607487678528 -0.7556688189506531 0.21432805061340332 0.8298017978668213 1 0.9799913763999939 0 0.0 0 0.0 0 0.0 -0.18203496932983398 0.3555026054382324 0.6355704069137573 -0.7024140357971191 0.35395365953445435 0.617480993270874 0.2770572006702423 0.8555743098258972 1 0.9823503494262695 0 0.0 0 0.0 0 0.0 -0.1613888144493103 0.3804953098297119 0.6355704069137573 -0.09356974810361862 0.8272042274475098 0.5540025234222412 0.27738291025161743 0.8877726197242737 1 0.9825473427772522 0 0.0 0 0.0 0 0.0 -0.1612895131111145 0.33922386169433594 0.5898922681808472 -0.37003692984580994 0.5403607487678528 -0.7556688189506531 0.21432805061340332 0.8298017978668213 1 0.9799913763999939 0 0.0 0 0.0 0 0.0 -0.13313615322113037 0.3669123649597168 0.6355704069137573 0.44904935359954834 0.7006744742393494 0.5543687343597412 0.9076574444770813 0.7835649847984314 1 0.983238697052002 0 0.0 0 0.0 0 0.0 -0.1612895131111145 0.33922386169433594 0.5898922681808472 -0.37003692984580994 0.5403607487678528 -0.7556688189506531 0.8526605367660522 0.760287344455719 1 0.9799913763999939 0 0.0 0 0.0 0 0.0 -0.1613888144493103 0.3804953098297119 0.6355704069137573 -0.09356974810361862 0.8272042274475098 0.5540025234222412 0.9076574444770813 0.7395947575569153 1 0.9825473427772522 0 0.0 0 0.0 0 0.0 -0.1190231442451477 0.3240025043487549 0.6043640375137329 0.49604785442352295 0.7510910630226135 -0.4355906844139099 0.49227312207221985 0.6409542560577393 1 0.9815371632575989 0 0.0 0 0.0 0 0.0 -0.07210224866867065 0.3025968074798584 0.6355704069137573 -0.08188115805387497 0.842799186706543 0.5319375991821289 0.551694929599762 0.5924338698387146 1 0.9896897077560425 0 0.0 0 0.0 0 0.0 -0.07363545894622803 0.2982339859008789 0.6007412672042847 0.04513687640428543 0.9967650175094604 -0.06619464606046677 0.5469268560409546 0.6396243572235107 1 0.9836710691452026 0 0.0 0 0.0 0 0.0 -0.15143811702728271 0.2254852056503296 0.5341702699661255 -0.9232154488563538 0.25720998644828796 -0.2854396104812622 0.03369267284870148 0.6037472486495972 1 0.9440637826919556 0 0.04249156638979912 0 0.0 0 0.0 -0.17613452672958374 0.2313833236694336 0.6070717573165894 -0.939146101474762 -0.07638783007860184 -0.334879606962204 0.03147881478071213 0.6419441103935242 1 0.9754646420478821 0 0.0 0 0.0 0 0.0 -0.14436250925064087 0.27292418479919434 0.5668500661849976 -0.7668996453285217 0.2865687906742096 -0.574175238609314 0.01067846454679966 0.6221985220909119 1 0.969854474067688 0 0.0006151832640171051 0 0.0 0 0.0 -0.11800521612167358 0.24999380111694336 0.48617875576019287 -0.773796796798706 0.5241248607635498 -0.3556627035140991 0.021475009620189667 0.5794675946235657 1 0.9226130843162537 0 0.06844232976436615 0 0.0 0 0.0 -0.14436250925064087 0.27292418479919434 0.5668500661849976 -0.7668996453285217 0.2865687906742096 -0.574175238609314 0.01067846454679966 0.6221985220909119 1 0.969854474067688 0 0.0006151832640171051 0 0.0 0 0.0 -0.10207110643386841 0.29587411880493164 0.5440686941146851 -0.41743215918540955 0.8524124622344971 -0.31473737955093384 0.00040331503259949386 0.6110991835594177 1 0.9687196016311646 0 0.004799999296665192 0 0.0 0 0.0 -0.1612895131111145 0.33922386169433594 0.5898922681808472 -0.37003692984580994 0.5403607487678528 -0.7556688189506531 0.21432805061340332 0.8298017978668213 1 0.9799913763999939 0 0.0 0 0.0 0 0.0 -0.14436250925064087 0.27292418479919434 0.5668500661849976 -0.7668996453285217 0.2865687906742096 -0.574175238609314 0.1829245537519455 0.7346058487892151 1 0.969854474067688 0 0.0006151832640171051 0 0.0 0 0.0 -0.17613452672958374 0.2313833236694336 0.6070717573165894 -0.939146101474762 -0.07638783007860184 -0.334879606962204 0.2380296140909195 0.6809014678001404 1 0.9754646420478821 0 0.0 0 0.0 0 0.0 -0.14436250925064087 0.27292418479919434 0.5668500661849976 -0.7668996453285217 0.2865687906742096 -0.574175238609314 0.6809971332550049 0.8264847993850708 1 0.969854474067688 0 0.0006151832640171051 0 0.0 0 0.0 -0.1612895131111145 0.33922386169433594 0.5898922681808472 -0.37003692984580994 0.5403607487678528 -0.7556688189506531 0.6809971332550049 0.9226937294006348 1 0.9799913763999939 0 0.0 0 0.0 0 0.0 -0.10207110643386841 0.29587411880493164 0.5440686941146851 -0.41743215918540955 0.8524124622344971 -0.31473737955093384 0.6203145980834961 0.8451147079467773 1 0.9687196016311646 0 0.004799999296665192 0 0.0 0 0.0 -0.1190231442451477 0.3240025043487549 0.6043640375137329 0.49604785442352295 0.7510910630226135 -0.4355906844139099 0.49227312207221985 0.6409542560577393 1 0.9815371632575989 0 0.0 0 0.0 0 0.0 -0.10207110643386841 0.29587411880493164 0.5440686941146851 -0.41743215918540955 0.8524124622344971 -0.31473737955093384 0.5052196383476257 0.7176094651222229 1 0.9687196016311646 0 0.004799999296665192 0 0.0 0 0.0 -0.1612895131111145 0.33922386169433594 0.5898922681808472 -0.37003692984580994 0.5403607487678528 -0.7556688189506531 0.4382849633693695 0.6647792458534241 1 0.9799913763999939 0 0.0 0 0.0 0 0.0 -0.07363545894622803 0.2982339859008789 0.6007412672042847 0.04513687640428543 0.9967650175094604 -0.06619464606046677 0.5469268560409546 0.6396243572235107 1 0.9836710691452026 0 0.0 0 0.0 0 0.0 0.0 0.31928110122680664 0.5975655317306519 0.0 0.9569078683853149 0.29035308957099915 0.6522123217582703 0.6490117907524109 1 0.986151933670044 0 0.0 0 0.0 0 0.0 -0.03973621129989624 0.31778907775878906 0.5499929189682007 -0.2772911787033081 0.9470503926277161 0.16165654361248016 0.5957963466644287 0.7146220803260803 1 0.9746320843696594 0 0.0 0 0.0 0 0.0 0.0 0.3334541320800781 0.513670802116394 0.0 0.9971312880516052 -0.07556383311748505 0.6522123217582703 0.7686784863471985 1 0.9621657729148865 0 0.019739564508199692 0 0.0 0 0.0 -0.03973621129989624 0.31778907775878906 0.5499929189682007 -0.2772911787033081 0.9470503926277161 0.16165654361248016 0.5957963466644287 0.7146220803260803 1 0.9746320843696594 0 0.0 0 0.0 0 0.0 0.0 0.31928110122680664 0.5975655317306519 0.0 0.9569078683853149 0.29035308957099915 0.6522123217582703 0.6490117907524109 1 0.986151933670044 0 0.0 0 0.0 0 0.0 -0.11800521612167358 0.24999380111694336 0.48617875576019287 -0.773796796798706 0.5241248607635498 -0.3556627035140991 0.7384125590324402 0.8501654267311096 1 0.9226130843162537 0 0.06844232976436615 0 0.0 0 0.0 -0.06822705268859863 0.31713294982910156 0.5017274618148804 -0.4450819492340088 0.8710898160934448 -0.20749534666538239 0.75923091173172 0.8749287724494934 1 0.9548736810684204 0 0.03235049173235893 0 0.0 0 0.0 -0.07563048601150513 0.27506399154663086 0.4404362440109253 -0.4518570601940155 0.6767174005508423 -0.5812555551528931 0.7320701479911804 0.8845022916793823 1 0.9063006639480591 0 0.08650905638933182 0 0.0 0 0.0 -0.10207110643386841 0.29587411880493164 0.5440686941146851 -0.41743215918540955 0.8524124622344971 -0.31473737955093384 0.5052196383476257 0.7176094651222229 1 0.9687196016311646 0 0.004799999296665192 0 0.0 0 0.0 -0.03973621129989624 0.31778907775878906 0.5499929189682007 -0.2772911787033081 0.9470503926277161 0.16165654361248016 0.5957963466644287 0.7146220803260803 1 0.9746320843696594 0 0.0 0 0.0 0 0.0 -0.06822705268859863 0.31713294982910156 0.5017274618148804 -0.4450819492340088 0.8710898160934448 -0.20749534666538239 0.5548336505889893 0.7813751697540283 1 0.9548736810684204 0 0.03235049173235893 0 0.0 0 0.0 -0.06822705268859863 0.31713294982910156 0.5017274618148804 -0.4450819492340088 0.8710898160934448 -0.20749534666538239 0.5548336505889893 0.7813751697540283 1 0.9548736810684204 0 0.03235049173235893 0 0.0 0 0.0 0.0 0.3334541320800781 0.513670802116394 0.0 0.9971312880516052 -0.07556383311748505 0.6522123217582703 0.7686784863471985 1 0.9621657729148865 0 0.019739564508199692 0 0.0 0 0.0 0.0 0.31658363342285156 0.4695626497268677 0.0 0.8418835997581482 -0.539597749710083 0.6458320021629333 0.8256781697273254 1 0.9410541653633118 0 0.054964829236269 0 0.0 0 0.0 -0.07563048601150513 0.27506399154663086 0.4404362440109253 -0.4518570601940155 0.6767174005508423 -0.5812555551528931 0.7320701479911804 0.8845022916793823 1 0.9063006639480591 0 0.08650905638933182 0 0.0 0 0.0 0.0 0.31658363342285156 0.4695626497268677 0.0 0.8418835997581482 -0.539597749710083 0.766719400882721 0.9123905897140503 1 0.9410541653633118 0 0.054964829236269 0 0.0 0 0.0 0.0 0.2737917900085449 0.4282184839248657 0.0 0.6853236556053162 -0.7282326817512512 0.7500969767570496 0.9189645051956177 1 0.8951932191848755 0 0.09897997975349426 0 0.0 0 0.0 -0.19670462608337402 0.4268631935119629 0.6311711072921753 -0.9928281307220459 -0.110782191157341 -0.04449598491191864 0.7312635183334351 0.8695287108421326 1 0.9825476408004761 0 0.0 0 0.0 0 0.0 -0.17451947927474976 0.426532506942749 0.6409276723861694 0.05017242953181267 0.10049745440483093 0.9936521649360657 0.7059145569801331 0.8887448906898499 1 0.9825475811958313 0 0.0 0 0.0 0 0.0 -0.18475157022476196 0.45780444145202637 0.6298526525497437 -0.23609119653701782 0.9698477387428284 -0.059938352555036545 0.6924620270729065 0.8456106185913086 1 0.9825476408004761 0 0.0 0 0.0 0 0.0 -0.18475157022476196 0.45780444145202637 0.6298526525497437 -0.23609119653701782 0.9698477387428284 -0.059938352555036545 0.6924620270729065 0.8456106185913086 1 0.9825476408004761 0 0.0 0 0.0 0 0.0 -0.17451947927474976 0.426532506942749 0.6409276723861694 0.05017242953181267 0.10049745440483093 0.9936521649360657 0.7059145569801331 0.8887448906898499 1 0.9825475811958313 0 0.0 0 0.0 0 0.0 -0.15975886583328247 0.43120598793029785 0.6309860944747925 0.9370708465576172 0.34748375415802 -0.03326517343521118 0.6875460743904114 0.8966741561889648 1 0.9825476408004761 0 0.0 0 0.0 0 0.0 -0.15975886583328247 0.43120598793029785 0.6309860944747925 0.9370708465576172 0.34748375415802 -0.03326517343521118 0.6875460743904114 0.8966741561889648 1 0.9825476408004761 0 0.0 0 0.0 0 0.0 -0.17451947927474976 0.426532506942749 0.6409276723861694 0.05017242953181267 0.10049745440483093 0.9936521649360657 0.7059145569801331 0.8887448906898499 1 0.9825475811958313 0 0.0 0 0.0 0 0.0 -0.1613888144493103 0.3804953098297119 0.6355704069137573 -0.09356974810361862 0.8272042274475098 0.5540025234222412 0.7312635183334351 0.9513239860534668 1 0.9825473427772522 0 0.0 0 0.0 0 0.0 -0.1613888144493103 0.3804953098297119 0.6355704069137573 -0.09356974810361862 0.8272042274475098 0.5540025234222412 0.7312635183334351 0.9513239860534668 1 0.9825473427772522 0 0.0 0 0.0 0 0.0 -0.17451947927474976 0.426532506942749 0.6409276723861694 0.05017242953181267 0.10049745440483093 0.9936521649360657 0.7059145569801331 0.8887448906898499 1 0.9825475811958313 0 0.0 0 0.0 0 0.0 -0.19670462608337402 0.4268631935119629 0.6311711072921753 -0.9928281307220459 -0.110782191157341 -0.04449598491191864 0.7312635183334351 0.8695287108421326 1 0.9825476408004761 0 0.0 0 0.0 0 0.0 -0.15975886583328247 0.43120598793029785 0.6309860944747925 0.9370708465576172 0.34748375415802 -0.03326517343521118 0.6530190110206604 0.5367875099182129 1 0.9825476408004761 0 0.0 0 0.0 0 0.0 -0.17214298248291016 0.42655277252197266 0.6233502626419067 0.11499374359846115 -0.01541184727102518 -0.9932249188423157 0.6713433861732483 0.5426108837127686 1 0.9825476408004761 0 0.0 0 0.0 0 0.0 -0.18475157022476196 0.45780444145202637 0.6298526525497437 -0.23609119653701782 0.9698477387428284 -0.059938352555036545 0.6580154895782471 0.5878871083259583 1 0.9825476408004761 0 0.0 0 0.0 0 0.0 -0.15975886583328247 0.43120598793029785 0.6309860944747925 0.9370708465576172 0.34748375415802 -0.03326517343521118 0.6530190110206604 0.5367875099182129 1 0.9825476408004761 0 0.0 0 0.0 0 0.0 -0.1613888144493103 0.3804953098297119 0.6355704069137573 -0.09356974810361862 0.8272042274475098 0.5540025234222412 0.6969338059425354 0.48136377334594727 1 0.9825473427772522 0 0.0 0 0.0 0 0.0 -0.17214298248291016 0.42655277252197266 0.6233502626419067 0.11499374359846115 -0.01541184727102518 -0.9932249188423157 0.6713433861732483 0.5426108837127686 1 0.9825476408004761 0 0.0 0 0.0 0 0.0 -0.19670462608337402 0.4268631935119629 0.6311711072921753 -0.9928281307220459 -0.110782191157341 -0.04449598491191864 0.6969338059425354 0.5635218620300293 1 0.9825476408004761 0 0.0 0 0.0 0 0.0 -0.17214298248291016 0.42655277252197266 0.6233502626419067 0.11499374359846115 -0.01541184727102518 -0.9932249188423157 0.6713433861732483 0.5426108837127686 1 0.9825476408004761 0 0.0 0 0.0 0 0.0 -0.1613888144493103 0.3804953098297119 0.6355704069137573 -0.09356974810361862 0.8272042274475098 0.5540025234222412 0.6969338059425354 0.48136377334594727 1 0.9825473427772522 0 0.0 0 0.0 0 0.0 -0.18475157022476196 0.45780444145202637 0.6298526525497437 -0.23609119653701782 0.9698477387428284 -0.059938352555036545 0.6580154895782471 0.5878871083259583 1 0.9825476408004761 0 0.0 0 0.0 0 0.0 -0.17214298248291016 0.42655277252197266 0.6233502626419067 0.11499374359846115 -0.01541184727102518 -0.9932249188423157 0.6713433861732483 0.5426108837127686 1 0.9825476408004761 0 0.0 0 0.0 0 0.0 -0.19670462608337402 0.4268631935119629 0.6311711072921753 -0.9928281307220459 -0.110782191157341 -0.04449598491191864 0.6969338059425354 0.5635218620300293 1 0.9825476408004761 0 0.0 0 0.0 0 0.0 -0.09704774618148804 -0.392566442489624 -0.4658399820327759 0.7643055319786072 -0.14413891732692719 0.6284981966018677 0.8038542866706848 0.8589156270027161 3 0.999832808971405 0 0.0 0 0.0 0 0.0 -0.16358476877212524 -0.5438752174377441 -0.4808121919631958 -0.8981902599334717 0.13892024755477905 0.41706594824790955 0.8319727182388306 0.9409989714622498 3 0.9999702572822571 0 0.0 0 0.0 0 0.0 -0.09540045261383057 -0.5439469814300537 -0.483615517616272 0.8756980895996094 0.18463698029518127 0.4460890591144562 0.7971614599227905 0.9384505748748779 3 0.9999970197677612 0 0.0 0 0.0 0 0.0 -0.09343808889389038 -0.32038211822509766 -0.4421921968460083 0.7430646419525146 -0.36826685070991516 0.5587328672409058 0.8824628591537476 0.573641836643219 3 0.9944356083869934 0 0.0 0 0.0 0 0.0 -0.10235244035720825 -0.35957908630371094 -0.5960932970046997 0.6142460107803345 -0.017761772498488426 -0.7888729572296143 0.8124915361404419 0.6168727278709412 3 0.9956300258636475 0 0.0 0 0.0 0 0.0 -0.08439087867736816 -0.21313560009002686 -0.5862895250320435 0.5681020617485046 0.09179967641830444 -0.8178045153617859 0.7954190373420715 0.5414798259735107 3 0.964721143245697 0 0.0 0 0.0 0 0.0 -0.08439087867736816 -0.21313560009002686 -0.5862895250320435 0.5681020617485046 0.09179967641830444 -0.8178045153617859 0.8441900014877319 0.2085101306438446 3 0.964721143245697 0 0.0 0 0.0 0 0.0 -0.1785861849784851 -0.359180212020874 -0.5877567529678345 -0.7232581377029419 -0.06591998040676117 -0.6873989105224609 0.8941572904586792 0.13316871225833893 3 0.9966251850128174 0 0.0 0 0.0 0 0.0 -0.20441192388534546 -0.18915605545043945 -0.555695652961731 -0.7800835967063904 0.13812677562236786 -0.6102175712585449 0.9039897918701172 0.22283343970775604 3 0.9740641117095947 0 0.0 0 0.0 0 0.0 -0.18601888418197632 -0.3018697500228882 -0.4252368211746216 -0.6975615620613098 -0.4051026999950409 0.5909604430198669 0.27508801221847534 0.08698911219835281 3 0.986090362071991 0 0.0 0 0.0 0 0.0 -0.1785861849784851 -0.359180212020874 -0.5877567529678345 -0.7232581377029419 -0.06591998040676117 -0.6873989105224609 0.3002532124519348 0.00040331503259949386 3 0.9966251850128174 0 0.0 0 0.0 0 0.0 -0.1732814908027649 -0.3921675682067871 -0.45750391483306885 -0.6674093008041382 -0.2617572546005249 0.6971343159675598 0.3210349380970001 0.06763686239719391 3 0.9991129636764526 0 0.0 0 0.0 0 0.0 -0.16358476877212524 -0.5438752174377441 -0.4808121919631958 -0.8981902599334717 0.13892024755477905 0.41706594824790955 0.2118651568889618 0.9236057996749878 3 0.9999702572822571 0 0.0 0 0.0 0 0.0 -0.09202015399932861 -0.5696377754211426 -0.43102800846099854 0.6786095499992371 0.33146151900291443 0.6554155349731445 0.18292458355426788 0.8896855115890503 3 0.9999966025352478 0 0.0 0 0.0 0 0.0 -0.09540045261383057 -0.5439469814300537 -0.483615517616272 0.8756980895996094 0.18463698029518127 0.4460890591144562 0.2118651568889618 0.8885793089866638 3 0.9999970197677612 0 0.0 0 0.0 0 0.0 -0.09704774618148804 -0.392566442489624 -0.4658399820327759 0.7643055319786072 -0.14413891732692719 0.6284981966018677 0.8815617561340332 0.6134598851203918 3 0.999832808971405 0 0.0 0 0.0 0 0.0 -0.08888596296310425 -0.5484790802001953 -0.578835129737854 0.7318033576011658 -0.13727225363254547 -0.6675008535385132 0.8489667773246765 0.7082512378692627 3 0.9997803568840027 0 0.0 0 0.0 0 0.0 -0.10235244035720825 -0.35957908630371094 -0.5960932970046997 0.6142460107803345 -0.017761772498488426 -0.7888729572296143 0.8124915361404419 0.6168727278709412 3 0.9956300258636475 0 0.0 0 0.0 0 0.0 -0.10235244035720825 -0.35957908630371094 -0.5960932970046997 0.6142460107803345 -0.017761772498488426 -0.7888729572296143 0.8554814457893372 0.13194745779037476 3 0.9956300258636475 0 0.0 0 0.0 0 0.0 -0.15707027912139893 -0.5484073162078857 -0.5760318040847778 -0.7048555016517639 -0.1505172848701477 -0.6931669116020203 0.8846582770347595 0.03393390029668808 3 0.9998194575309753 0 0.0 0 0.0 0 0.0 -0.1785861849784851 -0.359180212020874 -0.5877567529678345 -0.7232581377029419 -0.06591998040676117 -0.6873989105224609 0.8941572904586792 0.13316871225833893 3 0.9966251850128174 0 0.0 0 0.0 0 0.0 -0.1732814908027649 -0.3921675682067871 -0.45750391483306885 -0.6674093008041382 -0.2617572546005249 0.6971343159675598 0.3210349380970001 0.06763686239719391 3 0.9991129636764526 0 0.0 0 0.0 0 0.0 -0.15707027912139893 -0.5484073162078857 -0.5760318040847778 -0.7048555016517639 -0.1505172848701477 -0.6931669116020203 0.39849552512168884 0.0013318752171471715 3 0.9998194575309753 0 0.0 0 0.0 0 0.0 -0.16358476877212524 -0.5438752174377441 -0.4808121919631958 -0.8981902599334717 0.13892024755477905 0.41706594824790955 0.39850914478302 0.05124041810631752 3 0.9999702572822571 0 0.0 0 0.0 0 0.0 -0.18308591842651367 -0.1715635061264038 -0.30947959423065186 -0.6252326965332031 -0.7065645456314087 0.33136996626853943 0.9995967149734497 0.33627161383628845 3 0.7757202386856079 0 0.20105865597724915 0 0.0 0 0.0 0.0 -0.13216137886047363 -0.2887181043624878 0.0 -0.9959410429000854 0.08993804454803467 0.9047964811325073 0.3187030851840973 0 0.6482506990432739 5 0.17250163853168488 3 0.17250163853168488 0 0.0 -0.12958550453186035 -0.1315857172012329 -0.09456980228424072 -0.34760582447052 -0.9195837378501892 0.1829584687948227 0.9776368141174316 0.22148758172988892 0 0.9013321995735168 3 0.07171499729156494 0 0.0 0 0.0 0.0 -0.196242094039917 0.3226771354675293 0.0 -0.9550157189369202 -0.29651784896850586 0.9282938241958618 0.00040331503259949386 6 0.4506283402442932 4 0.4506283402442932 0 0.09200550615787506 0 0.0 -0.13016337156295776 -0.10303550213575363 0.1634429693222046 -0.7592394948005676 -0.6505325436592102 -0.01754814386367798 0.9853255748748779 0.08616168797016144 0 0.8383778929710388 4 0.12892886996269226 0 0.0 0 0.0 0.0 -0.195021390914917 0.15074574947357178 0.0 -0.9848322868347168 -0.17343668639659882 0.9224485158920288 0.09022121131420135 0 0.8213648796081543 6 0.08476964384317398 4 0.08476964384317398 0 0.0 0.0 -0.13216137886047363 -0.2887181043624878 0.0 -0.9959410429000854 0.08993804454803467 0.9047964811325073 0.3187030851840973 0 0.6482506990432739 5 0.17250163853168488 3 0.17250163853168488 0 0.0 0.0 -0.10864909738302231 -0.08876931667327881 0.0 -0.9990233778953552 0.04358043149113655 0.9104627370834351 0.21379117667675018 0 0.9455240964889526 0 0.0 0 0.0 0 0.0 -0.12958550453186035 -0.1315857172012329 -0.09456980228424072 -0.34760582447052 -0.9195837378501892 0.1829584687948227 0.9776368141174316 0.22148758172988892 0 0.9013321995735168 3 0.07171499729156494 0 0.0 0 0.0 0.0 -0.10864909738302231 -0.08876931667327881 0.0 -0.9990233778953552 0.04358043149113655 0.9104627370834351 0.21379117667675018 0 0.9455240964889526 0 0.0 0 0.0 0 0.0 -0.13016337156295776 -0.10303550213575363 0.1634429693222046 -0.7592394948005676 -0.6505325436592102 -0.01754814386367798 0.9853255748748779 0.08616168797016144 0 0.8383778929710388 4 0.12892886996269226 0 0.0 0 0.0 -0.12958550453186035 -0.1315857172012329 -0.09456980228424072 -0.34760582447052 -0.9195837378501892 0.1829584687948227 0.9776368141174316 0.22148758172988892 0 0.9013321995735168 3 0.07171499729156494 0 0.0 0 0.0 -0.1669650673866272 -0.5695590972900391 -0.42794668674468994 -0.6787621974945068 0.3166295289993286 0.6625568270683289 0.23618458211421967 0.9276077151298523 3 0.9999889731407166 0 0.0 0 0.0 0 0.0 -0.10268598794937134 -0.6122503280639648 -0.4350939989089966 0.5183873772621155 -0.6310312151908875 0.5770744681358337 0.21411648392677307 0.8940513134002686 3 0.9999961853027344 0 0.0 0 0.0 0 0.0 -0.09202015399932861 -0.5696377754211426 -0.43102800846099854 0.6786095499992371 0.33146151900291443 0.6554155349731445 0.23618458211421967 0.8885793089866638 3 0.9999966025352478 0 0.0 0 0.0 0 0.0 -0.10268598794937134 -0.6122503280639648 -0.4350939989089966 0.5183873772621155 -0.6310312151908875 0.5770744681358337 0.6814783215522766 0.8220149278640747 3 0.9999961853027344 0 0.0 0 0.0 0 0.0 -0.14641422033309937 -0.6189942359924316 -0.49265921115875244 -0.5785698890686035 -0.8136540055274963 -0.05630664899945259 0.6587129831314087 0.7918486595153809 3 0.9999929070472717 0 0.0 0 0.0 0 0.0 -0.10268598794937134 -0.6176581382751465 -0.489848256111145 0.6539506316184998 -0.7564317584037781 -0.01031525619328022 0.681201696395874 0.7932599782943726 3 0.9999944567680359 0 0.0 0 0.0 0 0.0 -0.14641422033309937 -0.6189942359924316 -0.49265921115875244 -0.5785698890686035 -0.8136540055274963 -0.05630664899945259 0.6587129831314087 0.7918486595153809 3 0.9999929070472717 0 0.0 0 0.0 0 0.0 -0.10268598794937134 -0.610898494720459 -0.5709654092788696 0.5513778924942017 -0.6156193614006042 -0.5630054473876953 0.6814783215522766 0.7508853673934937 3 0.9999434351921082 0 0.0 0 0.0 0 0.0 -0.10268598794937134 -0.6176581382751465 -0.489848256111145 0.6539506316184998 -0.7564317584037781 -0.01031525619328022 0.681201696395874 0.7932599782943726 3 0.9999944567680359 0 0.0 0 0.0 0 0.0 -0.15707027912139893 -0.5484073162078857 -0.5760318040847778 -0.7048555016517639 -0.1505172848701477 -0.6931669116020203 0.8846582770347595 0.03393390029668808 3 0.9998194575309753 0 0.0 0 0.0 0 0.0 -0.10268598794937134 -0.610898494720459 -0.5709654092788696 0.5513778924942017 -0.6156193614006042 -0.5630054473876953 0.8572291135787964 0.0005972707876935601 3 0.9999434351921082 0 0.0 0 0.0 0 0.0 -0.14641422033309937 -0.6122345924377441 -0.5737768411636353 -0.4997100830078125 -0.6077150702476501 -0.617175817489624 0.8797931671142578 0.00040331503259949386 3 0.9999440312385559 0 0.0 0 0.0 0 0.0 -0.14641422033309937 -0.6189942359924316 -0.49265921115875244 -0.5785698890686035 -0.8136540055274963 -0.05630664899945259 0.43747836351394653 0.04301292449235916 3 0.9999929070472717 0 0.0 0 0.0 0 0.0 -0.1669650673866272 -0.5695590972900391 -0.42794668674468994 -0.6787621974945068 0.3166295289993286 0.6625568270683289 0.41296064853668213 0.07816137373447418 3 0.9999889731407166 0 0.0 0 0.0 0 0.0 -0.16358476877212524 -0.5438752174377441 -0.4808121919631958 -0.8981902599334717 0.13892024755477905 0.41706594824790955 0.39850914478302 0.05124041810631752 3 0.9999702572822571 0 0.0 0 0.0 0 0.0 -0.15707027912139893 -0.5484073162078857 -0.5760318040847778 -0.7048555016517639 -0.1505172848701477 -0.6931669116020203 0.39849552512168884 0.0013318752171471715 3 0.9998194575309753 0 0.0 0 0.0 0 0.0 -0.14641422033309937 -0.6189942359924316 -0.49265921115875244 -0.5785698890686035 -0.8136540055274963 -0.05630664899945259 0.43747836351394653 0.04301292449235916 3 0.9999929070472717 0 0.0 0 0.0 0 0.0 -0.16358476877212524 -0.5438752174377441 -0.4808121919631958 -0.8981902599334717 0.13892024755477905 0.41706594824790955 0.39850914478302 0.05124041810631752 3 0.9999702572822571 0 0.0 0 0.0 0 0.0 -0.09202015399932861 -0.5696377754211426 -0.43102800846099854 0.6786095499992371 0.33146151900291443 0.6554155349731445 0.9249988794326782 0.696574330329895 3 0.9999966025352478 0 0.0 0 0.0 0 0.0 -0.10268598794937134 -0.6176581382751465 -0.489848256111145 0.6539506316184998 -0.7564317584037781 -0.01031525619328022 0.90322345495224 0.7298896312713623 3 0.9999944567680359 0 0.0 0 0.0 0 0.0 -0.09540045261383057 -0.5439469814300537 -0.483615517616272 0.8756980895996094 0.18463698029518127 0.4460890591144562 0.8952838778495789 0.6918089389801025 3 0.9999970197677612 0 0.0 0 0.0 0 0.0 -0.09540045261383057 -0.5439469814300537 -0.483615517616272 0.8756980895996094 0.18463698029518127 0.4460890591144562 0.8952838778495789 0.6918089389801025 3 0.9999970197677612 0 0.0 0 0.0 0 0.0 -0.10268598794937134 -0.610898494720459 -0.5709654092788696 0.5513778924942017 -0.6156193614006042 -0.5630054473876953 0.8622313141822815 0.7387880682945251 3 0.9999434351921082 0 0.0 0 0.0 0 0.0 -0.08888596296310425 -0.5484790802001953 -0.578835129737854 0.7318033576011658 -0.13727225363254547 -0.6675008535385132 0.8489667773246765 0.7082512378692627 3 0.9997803568840027 0 0.0 0 0.0 0 0.0 -0.15605974197387695 0.14025557041168213 0.6220062971115112 -0.8759422302246094 -0.46403393149375916 0.13183996081352234 0.6745739579200745 0.33786362409591675 1 0.9690240025520325 0 0.0 0 0.0 0 0.0 -0.12537634372711182 0.11766744405031204 0.7009600400924683 -0.7749870419502258 -0.334574431180954 0.5360881090164185 0.5847986340522766 0.3410102427005768 1 0.9862551689147949 0 0.0 0 0.0 0 0.0 -0.13038241863250732 0.20644712448120117 0.6861461400985718 -0.634571373462677 0.33890804648399353 0.69454026222229 0.6237268447875977 0.2415420264005661 1 0.9900858998298645 0 0.0 0 0.0 0 0.0 -0.12537634372711182 0.11766744405031204 0.7009600400924683 -0.7749870419502258 -0.334574431180954 0.5360881090164185 0.7006834745407104 0.8323686122894287 1 0.9862551689147949 0 0.0 0 0.0 0 0.0 -0.0705878734588623 0.05552078038454056 0.6960290670394897 -0.6313669085502625 -0.7171849608421326 0.2948698401451111 0.7946124076843262 0.7522226572036743 1 0.9819313287734985 0 0.0 0 0.0 0 0.0 -0.06865745782852173 0.10929454118013382 0.7345117330551147 -0.5191808938980103 -0.1431928426027298 0.8425549864768982 0.7946124076843262 0.8448039889335632 1 0.9907939434051514 0 0.0 0 0.0 0 0.0 0.13038241863250732 0.20644712448120117 0.6861461400985718 0.634571373462677 0.33890804648399353 0.69454026222229 0.6237268447875977 0.2415420264005661 1 0.9901185631752014 0 0.0 0 0.0 0 0.0 0.05053889751434326 0.1634979248046875 0.7342671155929565 0.3151646554470062 0.2640766501426697 0.9115268588066101 0.5070644617080688 0.2996123731136322 1 0.9945793151855469 0 0.0 0 0.0 0 0.0 0.12537634372711182 0.11766744405031204 0.7009600400924683 0.7749870419502258 -0.334574431180954 0.5360881090164185 0.5847986340522766 0.3410102427005768 1 0.9864891767501831 0 0.0 0 0.0 0 0.0 0.0899050235748291 0.08831120282411575 0.6256042718887329 0.7000335454940796 -0.713614284992218 0.025116734206676483 0.589812159538269 0.4188792407512665 1 0.9682276844978333 0 0.0 0 0.0 0 0.0 0.15605974197387695 0.14025557041168213 0.6220062971115112 0.8759422302246094 -0.46403393149375916 0.13183996081352234 0.6745739579200745 0.33786362409591675 1 0.969058096408844 0 0.0 0 0.0 0 0.0 0.12537634372711182 0.11766744405031204 0.7009600400924683 0.7749870419502258 -0.334574431180954 0.5360881090164185 0.5847986340522766 0.3410102427005768 1 0.9864891767501831 0 0.0 0 0.0 0 0.0 0.0 0.1765376329421997 0.7342671155929565 0.0 0.4454481601715088 0.8952909708023071 0.44110503792762756 0.2877768576145172 1 0.9965916275978088 0 0.0 0 0.0 0 0.0 0.06078380346298218 0.2408146858215332 0.7048863172531128 0.25702688097953796 0.5580919981002808 0.7889339923858643 0.5218138098716736 0.20084944367408752 1 0.9962618350982666 0 0.0 0 0.0 0 0.0 0.0 0.24179911613464355 0.7048863172531128 0.0 0.6098208427429199 0.7925046682357788 0.4382849633693695 0.20771509408950806 1 0.9979282021522522 0 0.0 0 0.0 0 0.0 0.06865745782852173 0.10929454118013382 0.7345117330551147 0.5191808938980103 -0.1431928426027298 0.8425549864768982 0.5454435348510742 0.3798229694366455 1 0.9898999929428101 0 0.0 0 0.0 0 0.0 0.12537634372711182 0.11766744405031204 0.7009600400924683 0.7749870419502258 -0.334574431180954 0.5360881090164185 0.5847986340522766 0.3410102427005768 1 0.9864891767501831 0 0.0 0 0.0 0 0.0 0.05053889751434326 0.1634979248046875 0.7342671155929565 0.3151646554470062 0.2640766501426697 0.9115268588066101 0.5070644617080688 0.2996123731136322 1 0.9945793151855469 0 0.0 0 0.0 0 0.0 0.029034316539764404 0.02282658964395523 0.5975655317306519 0.5346843004226685 -0.8348338007926941 0.13074129819869995 0.33391112089157104 0.6721431612968445 1 0.9265779256820679 6 0.026510117575526237 0 0.0 0 0.0 0.035290539264678955 0.032179124653339386 0.6548959016799927 0.4995880126953125 -0.8637043237686157 0.06610309332609177 0.3249615430831909 0.7529926896095276 1 0.9648765921592712 0 0.0 0 0.0 0 0.0 0.0 0.00883752852678299 0.5868633985519409 0.0 -0.9138767719268799 0.4059267044067383 0.3724357783794403 0.6571521162986755 1 0.9038245677947998 6 0.03429456427693367 4 0.03429247811436653 0 0.0 0.0899050235748291 0.08831120282411575 0.6256042718887329 0.7000335454940796 -0.713614284992218 0.025116734206676483 0.6875460743904114 0.7333278059959412 1 0.9682276844978333 0 0.0 0 0.0 0 0.0 0.12537634372711182 0.11766744405031204 0.7009600400924683 0.7749870419502258 -0.334574431180954 0.5360881090164185 0.7006834745407104 0.8323686122894287 1 0.9864891767501831 0 0.0 0 0.0 0 0.0 0.0705878734588623 0.05552078038454056 0.6960290670394897 0.6313669085502625 -0.7171849608421326 0.2948698401451111 0.7946124076843262 0.7522226572036743 1 0.981741726398468 0 0.0 0 0.0 0 0.0 0.07210224866867065 0.3025968074798584 0.6355704069137573 0.08188115805387497 0.842799186706543 0.5319375991821289 0.551694929599762 0.5924338698387146 1 0.9896824359893799 0 0.0 0 0.0 0 0.0 0.0 0.24179911613464355 0.7048863172531128 0.0 0.6098208427429199 0.7925046682357788 0.6366429924964905 0.4814949929714203 1 0.9979282021522522 0 0.0 0 0.0 0 0.0 0.06078380346298218 0.2408146858215332 0.7048863172531128 0.25702688097953796 0.5580919981002808 0.7889339923858643 0.5539146065711975 0.48136377334594727 1 0.9962618350982666 0 0.0 0 0.0 0 0.0 0.13990861177444458 0.2426142692565918 0.6210473775863647 0.17987608909606934 0.4221320152282715 0.8884853720664978 0.44332829117774963 0.5980841517448425 1 0.9863647222518921 0 0.0 0 0.0 0 0.0 0.06078380346298218 0.2408146858215332 0.7048863172531128 0.25702688097953796 0.5580919981002808 0.7889339923858643 0.5539146065711975 0.48136377334594727 1 0.9962618350982666 0 0.0 0 0.0 0 0.0 0.13038241863250732 0.20644712448120117 0.6861461400985718 0.634571373462677 0.33890804648399353 0.69454026222229 0.44964930415153503 0.499088853597641 1 0.9901185631752014 0 0.0 0 0.0 0 0.0 0.18040990829467773 0.2139267921447754 0.6355704069137573 0.9097567796707153 -0.0018005920574069023 0.41511276364326477 0.6973033547401428 0.23020672798156738 1 0.9819253087043762 0 0.0 0 0.0 0 0.0 0.13038241863250732 0.20644712448120117 0.6861461400985718 0.634571373462677 0.33890804648399353 0.69454026222229 0.6237268447875977 0.2415420264005661 1 0.9901185631752014 0 0.0 0 0.0 0 0.0 0.15605974197387695 0.14025557041168213 0.6220062971115112 0.8759422302246094 -0.46403393149375916 0.13183996081352234 0.6745739579200745 0.33786362409591675 1 0.969058096408844 0 0.0 0 0.0 0 0.0 0.13990861177444458 0.2426142692565918 0.6210473775863647 0.17987608909606934 0.4221320152282715 0.8884853720664978 0.6398704051971436 0.19736255705356598 1 0.9863647222518921 0 0.0 0 0.0 0 0.0 0.19039934873580933 0.3247871398925781 0.6355704069137573 0.7619251012802124 0.14554277062416077 0.6310617327690125 0.6973033547401428 0.07419048994779587 1 0.9823099970817566 0 0.0 0 0.0 0 0.0 0.1529483199119568 0.3224823474884033 0.616545557975769 -0.10449537634849548 -0.09079256653785706 0.9903561472892761 0.648408830165863 0.08469385653734207 1 0.9842087626457214 0 0.0 0 0.0 0 0.0 0.18203496932983398 0.3555026054382324 0.6355704069137573 0.7024140357971191 0.35395365953445435 0.617480993270874 0.682029664516449 0.03247282654047012 1 0.9823530912399292 0 0.0 0 0.0 0 0.0 0.1529483199119568 0.3224823474884033 0.616545557975769 -0.10449537634849548 -0.09079256653785706 0.9903561472892761 0.648408830165863 0.08469385653734207 1 0.9842087626457214 0 0.0 0 0.0 0 0.0 0.19039934873580933 0.3247871398925781 0.6355704069137573 0.7619251012802124 0.14554277062416077 0.6310617327690125 0.6973033547401428 0.07419048994779587 1 0.9823099970817566 0 0.0 0 0.0 0 0.0 0.1529483199119568 0.3224823474884033 0.616545557975769 -0.10449537634849548 -0.09079256653785706 0.9903561472892761 0.648408830165863 0.08469385653734207 1 0.9842087626457214 0 0.0 0 0.0 0 0.0 0.07210224866867065 0.3025968074798584 0.6355704069137573 0.08188115805387497 0.842799186706543 0.5319375991821289 0.5377382636070251 0.12118156999349594 1 0.9896824359893799 0 0.0 0 0.0 0 0.0 0.13990861177444458 0.2426142692565918 0.6210473775863647 0.17987608909606934 0.4221320152282715 0.8884853720664978 0.6398704051971436 0.19736255705356598 1 0.9863647222518921 0 0.0 0 0.0 0 0.0 0.13313615322113037 0.3669123649597168 0.6355704069137573 -0.44904935359954834 0.7006744742393494 0.5543687343597412 0.613527774810791 0.02318226918578148 1 0.9832393527030945 0 0.0 0 0.0 0 0.0 0.1529483199119568 0.3224823474884033 0.616545557975769 -0.10449537634849548 -0.09079256653785706 0.9903561472892761 0.648408830165863 0.08469385653734207 1 0.9842087626457214 0 0.0 0 0.0 0 0.0 0.1613888144493103 0.3804953098297119 0.6355704069137573 0.09356974810361862 0.8272042274475098 0.5540025234222412 0.6506124138832092 0.00040331503259949386 1 0.9825493693351746 0 0.0 0 0.0 0 0.0 0.06865745782852173 0.10929454118013382 0.7345117330551147 0.5191808938980103 -0.1431928426027298 0.8425549864768982 0.5454435348510742 0.3798229694366455 1 0.9898999929428101 0 0.0 0 0.0 0 0.0 0.0 0.042672283947467804 0.7475627660751343 0.0 -0.7097384333610535 0.7044282555580139 0.4579574763774872 0.4805571734905243 1 0.9884468913078308 0 0.0 0 0.0 0 0.0 0.0705878734588623 0.05552078038454056 0.6960290670394897 0.6313669085502625 -0.7171849608421326 0.2948698401451111 0.5592003464698792 0.4590558409690857 1 0.981741726398468 0 0.0 0 0.0 0 0.0 0.0 0.13670289516448975 0.759844183921814 0.0 0.347636342048645 0.9376201629638672 0.444909006357193 0.3479462265968323 1 0.9948671460151672 0 0.0 0 0.0 0 0.0 0.0 0.09236795455217361 0.7743176221847534 0.0 -0.12359996140003204 0.9923093318939209 0.4487127959728241 0.4081156253814697 1 0.9922438859939575 0 0.0 0 0.0 0 0.0 0.06865745782852173 0.10929454118013382 0.7345117330551147 0.5191808938980103 -0.1431928426027298 0.8425549864768982 0.5454435348510742 0.3798229694366455 1 0.9898999929428101 0 0.0 0 0.0 0 0.0 0.0 0.00883752852678299 0.5868633985519409 0.0 -0.9138767719268799 0.4059267044067383 0.3724357783794403 0.6571521162986755 1 0.9038245677947998 6 0.03429456427693367 4 0.03429247811436653 0 0.0 0.035290539264678955 0.032179124653339386 0.6548959016799927 0.4995880126953125 -0.8637043237686157 0.06610309332609177 0.3249615430831909 0.7529926896095276 1 0.9648765921592712 0 0.0 0 0.0 0 0.0 0.0 0.025754906237125397 0.7083276510238647 0.0 -0.9591051936149597 0.28293710947036743 0.37136271595954895 0.828621506690979 1 0.9845536351203918 0 0.0 0 0.0 0 0.0 0.0 0.025754906237125397 0.7083276510238647 0.0 -0.9591051936149597 0.28293710947036743 0.37136271595954895 0.828621506690979 1 0.9845536351203918 0 0.0 0 0.0 0 0.0 0.0705878734588623 0.05552078038454056 0.6960290670394897 0.6313669085502625 -0.7171849608421326 0.2948698401451111 0.2781895399093628 0.8110224008560181 1 0.981741726398468 0 0.0 0 0.0 0 0.0 0.0 0.042672283947467804 0.7475627660751343 0.0 -0.7097384333610535 0.7044282555580139 0.3724357783794403 0.88450688123703 1 0.9884468913078308 0 0.0 0 0.0 0 0.0 0.059469640254974365 0.0555688813328743 0.6115850210189819 0.7055574059486389 -0.7052217125892639 0.06924650073051453 0.7010108828544617 0.6815871596336365 1 0.9599898457527161 0 0.0 0 0.0 0 0.0 0.0705878734588623 0.05552078038454056 0.6960290670394897 0.6313669085502625 -0.7171849608421326 0.2948698401451111 0.7946124076843262 0.7522226572036743 1 0.981741726398468 0 0.0 0 0.0 0 0.0 0.035290539264678955 0.032179124653339386 0.6548959016799927 0.4995880126953125 -0.8637043237686157 0.06610309332609177 0.7705878019332886 0.688330888748169 1 0.9648765921592712 0 0.0 0 0.0 0 0.0 0.059469640254974365 0.0555688813328743 0.6115850210189819 0.7055574059486389 -0.7052217125892639 0.06924650073051453 0.3451562821865082 0.8853135108947754 1 0.9599898457527161 0 0.0 0 0.0 0 0.0 0.050073862075805664 0.02092299610376358 0.5243707895278931 0.6866664886474609 -0.40858179330825806 0.6012146472930908 0.3176169991493225 0.9254664182662964 1 0.844631552696228 6 0.10059148073196411 0 0.019277770072221756 0 0.0 0.09416019916534424 0.07008225470781326 0.5274871587753296 0.6548966765403748 -0.6562089920043945 0.3748283386230469 0.3451562821865082 0.9297898411750793 1 0.8562959432601929 0 0.09284236282110214 6 0.03691690042614937 0 0.0 0.09416019916534424 0.07008225470781326 0.5274871587753296 0.6548966765403748 -0.6562089920043945 0.3748283386230469 0.9130188822746277 0.861991822719574 1 0.8562959432601929 0 0.09284236282110214 6 0.03691690042614937 0 0.0 0.0899050235748291 0.08831120282411575 0.6256042718887329 0.7000335454940796 -0.713614284992218 0.025116734206676483 0.924144446849823 0.8115005493164062 1 0.9682276844978333 0 0.0 0 0.0 0 0.0 0.059469640254974365 0.0555688813328743 0.6115850210189819 0.7055574059486389 -0.7052217125892639 0.06924650073051453 0.9084641337394714 0.8151150941848755 1 0.9599898457527161 0 0.0 0 0.0 0 0.0 0.0899050235748291 0.08831120282411575 0.6256042718887329 0.7000335454940796 -0.713614284992218 0.025116734206676483 0.1095123291015625 0.6479935050010681 1 0.9682276844978333 0 0.0 0 0.0 0 0.0 0.1687365174293518 0.1454685926437378 0.49789369106292725 0.982451856136322 -0.15335550904273987 -0.10599078238010406 0.07277017086744308 0.5824607610702515 1 0.8803035020828247 0 0.0941576361656189 0 0.0 0 0.0 0.15605974197387695 0.14025557041168213 0.6220062971115112 0.8759422302246094 -0.46403393149375916 0.13183996081352234 0.0795331671833992 0.6472899913787842 1 0.969058096408844 0 0.0 0 0.0 0 0.0 0.15605974197387695 0.14025557041168213 0.6220062971115112 0.8759422302246094 -0.46403393149375916 0.13183996081352234 0.0795331671833992 0.6472899913787842 1 0.969058096408844 0 0.0 0 0.0 0 0.0 0.15143811702728271 0.2254852056503296 0.5341702699661255 0.9232154488563538 0.25720998644828796 -0.2854396104812622 0.03369267284870148 0.6037472486495972 1 0.944068431854248 0 0.04248170927166939 0 0.0 0 0.0 0.18040990829467773 0.2139267921447754 0.6355704069137573 0.9097567796707153 -0.0018005920574069023 0.41511276364326477 0.040995195508003235 0.656345546245575 1 0.9819253087043762 0 0.0 0 0.0 0 0.0 0.0 0.00883752852678299 0.5868633985519409 0.0 -0.9138767719268799 0.4059267044067383 0.3157893419265747 0.8918732404708862 1 0.9038245677947998 6 0.03429456427693367 4 0.03429247811436653 0 0.0 0.050073862075805664 0.02092299610376358 0.5243707895278931 0.6866664886474609 -0.40858179330825806 0.6012146472930908 0.3176169991493225 0.9254664182662964 1 0.844631552696228 6 0.10059148073196411 0 0.019277770072221756 0 0.0 0.029034316539764404 0.02282658964395523 0.5975655317306519 0.5346843004226685 -0.8348338007926941 0.13074129819869995 0.3254745602607727 0.8884339332580566 1 0.9265779256820679 6 0.026510117575526237 0 0.0 0 0.0 0.15183615684509277 -0.0799783393740654 0.4494694471359253 0.8179571032524109 -0.059785760939121246 0.5721305012702942 0.08381302654743195 0.7420639395713806 6 0.8048247694969177 0 0.08847368508577347 1 0.08450014144182205 0 0.0 0.0 -0.059041060507297516 0.5594795942306519 0.0 -0.37794122099876404 0.9258095026016235 0.003714407328516245 0.717420756816864 1 0.7317149043083191 6 0.12379448860883713 4 0.12379419058561325 0 0.0 0.0 -0.17929625511169434 0.45751893520355225 0.0 -0.6968291401863098 0.7172154784202576 0.00040331503259949386 0.7850019931793213 6 0.45073360204696655 4 0.45073357224464417 1 0.08223999291658401 0 0.0 0.17540639638900757 -0.17460304498672485 0.430961012840271 0.8131046295166016 0.054322946816682816 0.5795159935951233 0.23437808454036713 0.5384660959243774 6 0.960517406463623 0 0.0 0 0.0 0 0.0 0.15036439895629883 -0.08714862912893295 0.3016083240509033 0.9604480266571045 -0.09698782116174698 -0.2609332501888275 0.18725724518299103 0.4733530879020691 6 0.7862779498100281 0 0.17627522349357605 0 0.0 0 0.0 0.15183615684509277 -0.0799783393740654 0.4494694471359253 0.8179571032524109 -0.059785760939121246 0.5721305012702942 0.18764083087444305 0.5508929491043091 6 0.8048247694969177 0 0.08847368508577347 1 0.08450014144182205 0 0.0 0.17616277933120728 -0.29728245735168457 0.31193840503692627 0.6749778985977173 -0.2538224458694458 -0.6927701830863953 0.10438784956932068 0.7673202157020569 6 0.9925202131271362 0 0.0 0 0.0 0 0.0 0.0706138014793396 -0.22762751579284668 0.3014519214630127 -0.5107883214950562 -0.33680227398872375 -0.790978729724884 0.14921531081199646 0.7203041911125183 6 0.8573116064071655 4 0.11295725405216217 0 0.004347570240497589 0 0.0 0.17356276512145996 -0.18332982063293457 0.28318774700164795 0.6146122813224792 0.07834101468324661 -0.7849055528640747 0.09196234494447708 0.7093120813369751 6 0.9596999883651733 0 0.011403277516365051 0 0.0 0 0.0 0.15183615684509277 -0.0799783393740654 0.4494694471359253 0.8179571032524109 -0.059785760939121246 0.5721305012702942 0.08381302654743195 0.7420639395713806 6 0.8048247694969177 0 0.08847368508577347 1 0.08450014144182205 0 0.0 0.07245743274688721 -0.2189006805419922 0.4492250680923462 -0.3258461356163025 -0.4115115702152252 0.8511307239532471 0.03546648845076561 0.8098580241203308 6 0.8791981935501099 4 0.09424681961536407 0 0.0 0 0.0 0.17540639638900757 -0.17460304498672485 0.430961012840271 0.8131046295166016 0.054322946816682816 0.5795159935951233 0.09115571528673172 0.7933496832847595 6 0.960517406463623 0 0.0 0 0.0 0 0.0 0.0 -0.196242094039917 0.3226771354675293 0.0 -0.9550157189369202 -0.29651784896850586 0.6543000340461731 0.6595564484596252 6 0.4506283402442932 4 0.4506283402442932 0 0.09200550615787506 0 0.0 0.07245743274688721 -0.2189006805419922 0.4492250680923462 -0.3258461356163025 -0.4115115702152252 0.8511307239532471 0.6920541524887085 0.5932608246803284 6 0.8791981935501099 4 0.09424681961536407 0 0.0 0 0.0 0.0 -0.17929625511169434 0.45751893520355225 0.0 -0.6968291401863098 0.7172154784202576 0.6530190110206604 0.5886937379837036 6 0.45073360204696655 4 0.45073357224464417 1 0.08223999291658401 0 0.0 0.0706138014793396 -0.22762751579284668 0.3014519214630127 -0.5107883214950562 -0.33680227398872375 -0.790978729724884 0.14921531081199646 0.7203041911125183 6 0.8573116064071655 4 0.11295725405216217 0 0.004347570240497589 0 0.0 0.15036439895629883 -0.08714862912893295 0.3016083240509033 0.9604480266571045 -0.09698782116174698 -0.2609332501888275 0.0938851460814476 0.6571521162986755 6 0.7862779498100281 0 0.17627522349357605 0 0.0 0 0.0 0.17356276512145996 -0.18332982063293457 0.28318774700164795 0.6146122813224792 0.07834101468324661 -0.7849055528640747 0.09196234494447708 0.7093120813369751 6 0.9596999883651733 0 0.011403277516365051 0 0.0 0 0.0 0.16209262609481812 -0.36195850372314453 0.33104169368743896 0.6149784922599792 -0.26581621170043945 -0.7423627376556396 0.11935535073280334 0.798479437828064 6 0.9988442659378052 0 0.0 0 0.0 0 0.0 0.08690553903579712 -0.3065640926361084 0.3270174264907837 -0.7335429191589355 -0.28986480832099915 -0.6147038340568542 0.1508081704378128 0.761959433555603 6 0.9789289832115173 0 0.0 0 0.0 0 0.0 0.17616277933120728 -0.29728245735168457 0.31193840503692627 0.6749778985977173 -0.2538224458694458 -0.6927701830863953 0.10438784956932068 0.7673202157020569 6 0.9925202131271362 0 0.0 0 0.0 0 0.0 0.17540639638900757 -0.17460304498672485 0.430961012840271 0.8131046295166016 0.054322946816682816 0.5795159935951233 0.23437808454036713 0.5384660959243774 6 0.960517406463623 0 0.0 0 0.0 0 0.0 0.17616277933120728 -0.29728245735168457 0.31193840503692627 0.6749778985977173 -0.2538224458694458 -0.6927701830863953 0.29380425810813904 0.47277066111564636 6 0.9925202131271362 0 0.0 0 0.0 0 0.0 0.17356276512145996 -0.18332982063293457 0.28318774700164795 0.6146122813224792 0.07834101468324661 -0.7849055528640747 0.23481203615665436 0.4609302878379822 6 0.9596999883651733 0 0.011403277516365051 0 0.0 0 0.0 0.07245743274688721 -0.2189006805419922 0.4492250680923462 -0.3258461356163025 -0.4115115702152252 0.8511307239532471 0.03546648845076561 0.8098580241203308 6 0.8791981935501099 4 0.09424681961536407 0 0.0 0 0.0 0.17964047193527222 -0.285830020904541 0.4299675226211548 0.7866451144218445 -0.07501449435949326 0.6128116846084595 0.08709609508514404 0.8513107895851135 6 0.9926502108573914 0 0.0 0 0.0 0 0.0 0.17540639638900757 -0.17460304498672485 0.430961012840271 0.8131046295166016 0.054322946816682816 0.5795159935951233 0.09115571528673172 0.7933496832847595 6 0.960517406463623 0 0.0 0 0.0 0 0.0 0.08690553903579712 -0.3065640926361084 0.3270174264907837 -0.7335429191589355 -0.28986480832099915 -0.6147038340568542 0.5769522190093994 0.8373445272445679 6 0.9789289832115173 0 0.0 0 0.0 0 0.0 0.07245743274688721 -0.2189006805419922 0.4492250680923462 -0.3258461356163025 -0.4115115702152252 0.8511307239532471 0.6195079684257507 0.9027084112167358 6 0.8791981935501099 4 0.09424681961536407 0 0.0 0 0.0 0.0706138014793396 -0.22762751579284668 0.3014519214630127 -0.5107883214950562 -0.33680227398872375 -0.790978729724884 0.6195079684257507 0.8264847993850708 6 0.8573116064071655 4 0.11295725405216217 0 0.004347570240497589 0 0.0 0.09503942728042603 -0.5187876224517822 0.4470318555831909 -0.6328318119049072 0.1662037968635559 0.7562181353569031 0.030207481235265732 0.966705858707428 6 0.9998917579650879 0 0.0 0 0.0 0 0.0 0.16614562273025513 -0.35099244117736816 0.42727792263031006 0.7634815573692322 -0.10623493045568466 0.6369823217391968 0.07662999629974365 0.8845169544219971 6 0.9988507628440857 0 0.0 0 0.0 0 0.0 0.09287118911743164 -0.34740591049194336 0.4394129514694214 -0.6446424722671509 -0.04431287571787834 0.7631763815879822 0.038997162133455276 0.8780998587608337 6 0.9969676733016968 0 0.0 0 0.0 0 0.0 0.17964047193527222 -0.285830020904541 0.4299675226211548 0.7866451144218445 -0.07501449435949326 0.6128116846084595 0.2910638153553009 0.5348170399665833 6 0.9926502108573914 0 0.0 0 0.0 0 0.0 0.16209262609481812 -0.36195850372314453 0.33104169368743896 0.6149784922599792 -0.26581621170043945 -0.7423627376556396 0.3281383216381073 0.48101234436035156 6 0.9988442659378052 0 0.0 0 0.0 0 0.0 0.17616277933120728 -0.29728245735168457 0.31193840503692627 0.6749778985977173 -0.2538224458694458 -0.6927701830863953 0.29380425810813904 0.47277066111564636 6 0.9925202131271362 0 0.0 0 0.0 0 0.0 0.09038317203521729 -0.29511165618896484 0.4450465440750122 -0.5827814340591431 -0.14893032610416412 0.7988525032997131 0.04047681763768196 0.8505580425262451 6 0.9791664481163025 0 0.0 0 0.0 0 0.0 0.16614562273025513 -0.35099244117736816 0.42727792263031006 0.7634815573692322 -0.10623493045568466 0.6369823217391968 0.07662999629974365 0.8845169544219971 6 0.9988507628440857 0 0.0 0 0.0 0 0.0 0.17964047193527222 -0.285830020904541 0.4299675226211548 0.7866451144218445 -0.07501449435949326 0.6128116846084595 0.08709609508514404 0.8513107895851135 6 0.9926502108573914 0 0.0 0 0.0 0 0.0 0.08690553903579712 -0.3065640926361084 0.3270174264907837 -0.7335429191589355 -0.28986480832099915 -0.6147038340568542 0.5769522190093994 0.8373445272445679 6 0.9789289832115173 0 0.0 0 0.0 0 0.0 0.09287118911743164 -0.34740591049194336 0.4394129514694214 -0.6446424722671509 -0.04431287571787834 0.7631763815879822 0.5520168542861938 0.893970251083374 6 0.9969676733016968 0 0.0 0 0.0 0 0.0 0.09038317203521729 -0.29511165618896484 0.4450465440750122 -0.5827814340591431 -0.14893032610416412 0.7988525032997131 0.5792155265808105 0.8983412981033325 6 0.9791664481163025 0 0.0 0 0.0 0 0.0 0.08549678325653076 -0.570166826248169 0.3673415184020996 -0.7073580026626587 -0.443037211894989 -0.5507370233535767 0.4382849633693695 0.8507182598114014 6 0.9999839663505554 0 0.0 0 0.0 0 0.0 0.09503942728042603 -0.5187876224517822 0.4470318555831909 -0.6328318119049072 0.1662037968635559 0.7562181353569031 0.4623115360736847 0.8930864930152893 6 0.9998917579650879 0 0.0 0 0.0 0 0.0 0.09170717000961304 -0.5278036594390869 0.36790919303894043 -0.7768791913986206 0.011474959552288055 -0.6295052766799927 0.4601333737373352 0.8521638512611389 6 0.9999263882637024 0 0.0 0 0.0 0 0.0 0.08881819248199463 -0.3583719730377197 0.34317684173583984 -0.791894257068634 -0.15695668756961823 -0.5901058912277222 0.5493676066398621 0.8441964983940125 6 0.9974430799484253 0 0.0 0 0.0 0 0.0 0.09503942728042603 -0.5187876224517822 0.4470318555831909 -0.6328318119049072 0.1662037968635559 0.7562181353569031 0.4623115360736847 0.8930864930152893 6 0.9998917579650879 0 0.0 0 0.0 0 0.0 0.09287118911743164 -0.34740591049194336 0.4394129514694214 -0.6446424722671509 -0.04431287571787834 0.7631763815879822 0.5520168542861938 0.893970251083374 6 0.9969676733016968 0 0.0 0 0.0 0 0.0 0.16209262609481812 -0.36195850372314453 0.33104169368743896 0.6149784922599792 -0.26581621170043945 -0.7423627376556396 0.11935535073280334 0.798479437828064 6 0.9988442659378052 0 0.0 0 0.0 0 0.0 0.09170717000961304 -0.5278036594390869 0.36790919303894043 -0.7768791913986206 0.011474959552288055 -0.6295052766799927 0.17439746856689453 0.8748677968978882 6 0.9999263882637024 0 0.0 0 0.0 0 0.0 0.08881819248199463 -0.3583719730377197 0.34317684173583984 -0.791894257068634 -0.15695668756961823 -0.5901058912277222 0.15622735023498535 0.7883478999137878 6 0.9974430799484253 0 0.0 0 0.0 0 0.0 0.1552836298942566 -0.5217366218566895 0.43705475330352783 0.7843867540359497 0.10419019311666489 0.6114078164100647 0.4132080078125 0.5320252776145935 6 0.999962329864502 0 0.0 0 0.0 0 0.0 0.16209262609481812 -0.36195850372314453 0.33104169368743896 0.6149784922599792 -0.26581621170043945 -0.7423627376556396 0.3281383216381073 0.48101234436035156 6 0.9988442659378052 0 0.0 0 0.0 0 0.0 0.16614562273025513 -0.35099244117736816 0.42727792263031006 0.7634815573692322 -0.10623493045568466 0.6369823217391968 0.3250100612640381 0.5316429734230042 6 0.9988507628440857 0 0.0 0 0.0 0 0.0 0.15899169445037842 -0.5631530284881592 0.4472743272781372 0.9405804872512817 -0.06775109469890594 0.3327127993106842 0.398474782705307 0.9319923520088196 6 0.9999915361404419 0 0.0 0 0.0 0 0.0 0.08549678325653076 -0.570166826248169 0.3673415184020996 -0.7073580026626587 -0.443037211894989 -0.5507370233535767 0.43451640009880066 0.8887473344802856 6 0.9999839663505554 0 0.0 0 0.0 0 0.0 0.1551395058631897 -0.573575496673584 0.3558077812194824 0.5728934407234192 -0.44907987117767334 -0.6855983138084412 0.398474782705307 0.8839065432548523 6 0.9999913573265076 0 0.0 0 0.0 0 0.0 0.15195131301879883 -0.530752420425415 0.3579319715499878 0.634815514087677 -0.03268532454967499 -0.7719351649284363 0.1440824270248413 0.883197546005249 6 0.9999616742134094 0 0.0 0 0.0 0 0.0 0.08549678325653076 -0.570166826248169 0.3673415184020996 -0.7073580026626587 -0.443037211894989 -0.5507370233535767 0.18211792409420013 0.8958807587623596 6 0.9999839663505554 0 0.0 0 0.0 0 0.0 0.09170717000961304 -0.5278036594390869 0.36790919303894043 -0.7768791913986206 0.011474959552288055 -0.6295052766799927 0.17439746856689453 0.8748677968978882 6 0.9999263882637024 0 0.0 0 0.0 0 0.0 0.15899169445037842 -0.5631530284881592 0.4472743272781372 0.9405804872512817 -0.06775109469890594 0.3327127993106842 0.4345051050186157 0.5361970067024231 6 0.9999915361404419 0 0.0 0 0.0 0 0.0 0.15195131301879883 -0.530752420425415 0.3579319715499878 0.634815514087677 -0.03268532454967499 -0.7719351649284363 0.41578006744384766 0.49039819836616516 6 0.9999616742134094 0 0.0 0 0.0 0 0.0 0.1552836298942566 -0.5217366218566895 0.43705475330352783 0.7843867540359497 0.10419019311666489 0.6114078164100647 0.4132080078125 0.5320252776145935 6 0.999962329864502 0 0.0 0 0.0 0 0.0 0.09503942728042603 -0.5187876224517822 0.4470318555831909 -0.6328318119049072 0.1662037968635559 0.7562181353569031 0.030207481235265732 0.966705858707428 6 0.9998917579650879 0 0.0 0 0.0 0 0.0 0.15899169445037842 -0.5631530284881592 0.4472743272781372 0.9405804872512817 -0.06775109469890594 0.3327127993106842 0.060366492718458176 0.9931369423866272 6 0.9999915361404419 0 0.0 0 0.0 0 0.0 0.1552836298942566 -0.5217366218566895 0.43705475330352783 0.7843867540359497 0.10419019311666489 0.6114078164100647 0.06114814803004265 0.9719817638397217 6 0.999962329864502 0 0.0 0 0.0 0 0.0 0.08934891223907471 -0.5597443580627441 0.4588078260421753 -0.8483535051345825 0.28254035115242004 0.44770652055740356 0.23897626996040344 0.9261899590492249 6 0.9999756813049316 0 0.0 0 0.0 0 0.0 0.16460078954696655 -0.5697596073150635 0.48491013050079346 0.7637562155723572 0.4125797152519226 0.49638354778289795 0.2568512558937073 0.8885793089866638 6 0.9999933242797852 0 0.0 0 0.0 0 0.0 0.15899169445037842 -0.5631530284881592 0.4472743272781372 0.9405804872512817 -0.06775109469890594 0.3327127993106842 0.23699119687080383 0.8894676566123962 6 0.9999915361404419 0 0.0 0 0.0 0 0.0 0.07761454582214355 -0.5762221813201904 0.4922894239425659 -0.7108676433563232 0.4380016326904297 0.5502487421035767 0.7915221452713013 0.8456106185913086 6 0.9999874234199524 0 0.0 0 0.0 0 0.0 0.1480986475944519 -0.6183133125305176 0.4906195402145386 0.5136570334434509 -0.6324961185455322 0.5796990990638733 0.7675260305404663 0.8808123469352722 6 0.9999954104423523 0 0.0 0 0.0 0 0.0 0.16460078954696655 -0.5697596073150635 0.48491013050079346 0.7637562155723572 0.4125797152519226 0.49638354778289795 0.7915221452713013 0.8914648294448853 6 0.9999933242797852 0 0.0 0 0.0 0 0.0 0.08802717924118042 -0.6150498390197754 0.43218982219696045 -0.69466233253479 -0.713675320148468 -0.08999908715486526 0.6530190110206604 0.7109692692756653 6 0.9999951124191284 0 0.0 0 0.0 0 0.0 0.1480986475944519 -0.6183133125305176 0.4906195402145386 0.5136570334434509 -0.6324961185455322 0.5796990990638733 0.6844348311424255 0.6808247566223145 6 0.9999954104423523 0 0.0 0 0.0 0 0.0 0.0876038670539856 -0.6115889549255371 0.5072916746139526 -0.4042786955833435 -0.41471603512763977 0.8152104020118713 0.6532340049743652 0.6715880036354065 6 0.9999920725822449 0 0.0 0 0.0 0 0.0 0.09195363521575928 -0.602745532989502 0.37857210636138916 -0.5757927298545837 -0.6383251547813416 -0.5108493566513062 0.654041051864624 0.7388721704483032 6 0.9999947547912598 0 0.0 0 0.0 0 0.0 0.1482757329940796 -0.6178312301635742 0.4188467264175415 0.5838801264762878 -0.8061464428901672 -0.095767080783844 0.683937668800354 0.7183980941772461 6 0.9999983906745911 0 0.0 0 0.0 0 0.0 0.08802717924118042 -0.6150498390197754 0.43218982219696045 -0.69466233253479 -0.713675320148468 -0.08999908715486526 0.6530190110206604 0.7109692692756653 6 0.9999951124191284 0 0.0 0 0.0 0 0.0 0.09195363521575928 -0.602745532989502 0.37857210636138916 -0.5757927298545837 -0.6383251547813416 -0.5108493566513062 0.3809150457382202 0.9164982438087463 6 0.9999947547912598 0 0.0 0 0.0 0 0.0 0.1551395058631897 -0.573575496673584 0.3558077812194824 0.5728934407234192 -0.44907987117767334 -0.6855983138084412 0.39766812324523926 0.8839065432548523 6 0.9999913573265076 0 0.0 0 0.0 0 0.0 0.15127533674240112 -0.6052298545837402 0.36068880558013916 0.47083956003189087 -0.5862605571746826 -0.6591998338699341 0.38106560707092285 0.885166347026825 6 0.9999959468841553 0 0.0 0 0.0 0 0.0 0.1482757329940796 -0.6178312301635742 0.4188467264175415 0.5838801264762878 -0.8061464428901672 -0.095767080783844 0.9334527254104614 0.389056921005249 6 0.9999983906745911 0 0.0 0 0.0 0 0.0 0.1551395058631897 -0.573575496673584 0.3558077812194824 0.5728934407234192 -0.44907987117767334 -0.6855983138084412 0.91065514087677 0.3558618128299713 6 0.9999913573265076 0 0.0 0 0.0 0 0.0 0.15899169445037842 -0.5631530284881592 0.4472743272781372 0.9405804872512817 -0.06775109469890594 0.3327127993106842 0.9047964811325073 0.4037174880504608 6 0.9999915361404419 0 0.0 0 0.0 0 0.0 0.15899169445037842 -0.5631530284881592 0.4472743272781372 0.9405804872512817 -0.06775109469890594 0.3327127993106842 0.9047964811325073 0.4037174880504608 6 0.9999915361404419 0 0.0 0 0.0 0 0.0 0.1480986475944519 -0.6183133125305176 0.4906195402145386 0.5136570334434509 -0.6324961185455322 0.5796990990638733 0.9334527254104614 0.42665594816207886 6 0.9999954104423523 0 0.0 0 0.0 0 0.0 0.1482757329940796 -0.6178312301635742 0.4188467264175415 0.5838801264762878 -0.8061464428901672 -0.095767080783844 0.9334527254104614 0.389056921005249 6 0.9999983906745911 0 0.0 0 0.0 0 0.0 0.07761454582214355 -0.5762221813201904 0.4922894239425659 -0.7108676433563232 0.4380016326904297 0.5502487421035767 0.9174387454986572 0.7464988231658936 6 0.9999874234199524 0 0.0 0 0.0 0 0.0 0.08802717924118042 -0.6150498390197754 0.43218982219696045 -0.69466233253479 -0.713675320148468 -0.08999908715486526 0.9366330504417419 0.778315544128418 6 0.9999951124191284 0 0.0 0 0.0 0 0.0 0.0876038670539856 -0.6115889549255371 0.5072916746139526 -0.4042786955833435 -0.41471603512763977 0.8152104020118713 0.9366329908370972 0.7395947575569153 6 0.9999920725822449 0 0.0 0 0.0 0 0.0 0.08549678325653076 -0.570166826248169 0.3673415184020996 -0.7073580026626587 -0.443037211894989 -0.5507370233535767 0.9115410447120667 0.8106938600540161 6 0.9999839663505554 0 0.0 0 0.0 0 0.0 0.08802717924118042 -0.6150498390197754 0.43218982219696045 -0.69466233253479 -0.713675320148468 -0.08999908715486526 0.9366330504417419 0.778315544128418 6 0.9999951124191284 0 0.0 0 0.0 0 0.0 0.08934891223907471 -0.5597443580627441 0.4588078260421753 -0.8483535051345825 0.28254035115242004 0.44770652055740356 0.9084641337394714 0.7634201049804688 6 0.9999756813049316 0 0.0 0 0.0 0 0.0 0.18308591842651367 -0.1715635061264038 -0.30947959423065186 0.6252326965332031 -0.7065645456314087 0.33136996626853943 0.21177582442760468 0.15119899809360504 5 0.7757202386856079 0 0.20105862617492676 0 0.0 0 0.0 0.20441192388534546 -0.18915605545043945 -0.555695652961731 0.7800835967063904 0.13812677562236786 -0.6102175712585449 0.212846040725708 0.021823931485414505 5 0.9740641117095947 0 0.0 0 0.0 0 0.0 0.20714151859283447 -0.0656772330403328 -0.5096536874771118 0.7676015496253967 0.22464674711227417 -0.600207507610321 0.15080034732818604 0.04935154691338539 5 0.8890505433082581 0 0.06969472020864487 2 0.015910718590021133 0 0.0 0.09343808889389038 -0.32038211822509766 -0.4421921968460083 -0.7430646419525146 -0.36826685070991516 0.5587328672409058 0.8042619824409485 0.8200523853302002 5 0.9944356083869934 0 0.0 0 0.0 0 0.0 0.1732814908027649 -0.3921675682067871 -0.45750391483306885 0.6674093008041382 -0.2617572546005249 0.6971343159675598 0.8426058888435364 0.8613379001617432 5 0.9991129636764526 0 0.0 0 0.0 0 0.0 0.18601888418197632 -0.3018697500228882 -0.4252368211746216 0.6975615620613098 -0.4051026999950409 0.5909604430198669 0.8518539071083069 0.8132774829864502 5 0.986090362071991 0 0.0 0 0.0 0 0.0 0.09343808889389038 -0.32038211822509766 -0.4421921968460083 -0.7430646419525146 -0.36826685070991516 0.5587328672409058 0.8824628591537476 0.573641836643219 5 0.9944356083869934 0 0.0 0 0.0 0 0.0 0.061641693115234375 -0.12674754858016968 -0.5490885972976685 -0.599017322063446 0.0636310949921608 -0.7981811165809631 0.8007399439811707 0.49180278182029724 5 0.8647013306617737 0 0.07323106378316879 3 0.02173721417784691 2 0.0023119263350963593 0.08439087867736816 -0.21313560009002686 -0.5862895250320435 -0.5681020617485046 0.09179967641830444 -0.8178045153617859 0.7954190373420715 0.5414798259735107 5 0.964721143245697 0 0.0 0 0.0 0 0.0 0.0 -0.034700654447078705 -0.5120750665664673 0.0 -0.28131961822509766 -0.9595934748649597 0.804821252822876 0.43789535760879517 0 0.4035522937774658 5 0.21959787607192993 3 0.21959787607192993 2 0.1571648120880127 0.07139867544174194 -0.1890047788619995 -0.3518143892288208 -0.5797906517982483 -0.7260048389434814 0.36979278922080994 0.9073172211647034 0.4934375584125519 5 0.7999973893165588 0 0.15418323874473572 3 0.02782197669148445 0 0.0 0.0 -0.13216137886047363 -0.2887181043624878 0.0 -0.9959410429000854 0.08993804454803467 0.9294113516807556 0.452831894159317 0 0.6482506990432739 5 0.17250163853168488 3 0.17250163853168488 0 0.0 0.18601888418197632 -0.3018697500228882 -0.4252368211746216 0.6975615620613098 -0.4051026999950409 0.5909604430198669 0.8518539071083069 0.8132774829864502 5 0.986090362071991 0 0.0 0 0.0 0 0.0 0.07139867544174194 -0.1890047788619995 -0.3518143892288208 -0.5797906517982483 -0.7260048389434814 0.36979278922080994 0.7954190373420715 0.7463236451148987 5 0.7999973893165588 0 0.15418323874473572 3 0.02782197669148445 0 0.0 0.09343808889389038 -0.32038211822509766 -0.4421921968460083 -0.7430646419525146 -0.36826685070991516 0.5587328672409058 0.8042619824409485 0.8200523853302002 5 0.9944356083869934 0 0.0 0 0.0 0 0.0 0.20441192388534546 -0.18915605545043945 -0.555695652961731 0.7800835967063904 0.13812677562236786 -0.6102175712585449 0.9039897918701172 0.22283343970775604 5 0.9740641117095947 0 0.0 0 0.0 0 0.0 0.061641693115234375 -0.12674754858016968 -0.5490885972976685 -0.599017322063446 0.0636310949921608 -0.7981811165809631 0.8298012614250183 0.2538372874259949 5 0.8647013306617737 0 0.07323106378316879 3 0.02173721417784691 2 0.0023119263350963593 0.20714151859283447 -0.0656772330403328 -0.5096536874771118 0.7676015496253967 0.22464674711227417 -0.600207507610321 0.9018306136131287 0.28798139095306396 5 0.8890505433082581 0 0.06969472020864487 2 0.015910718590021133 0 0.0 0.15635263919830322 0.0019541755318641663 0.4368339776992798 0.9516891837120056 0.06549271941184998 0.299966424703598 0.09115571528673172 0.7004624009132385 0 0.4180992841720581 6 0.33493271470069885 1 0.23640868067741394 0 0.0 0.050073862075805664 0.02092299610376358 0.5243707895278931 0.6866664886474609 -0.40858179330825806 0.6012146472930908 0.0349784754216671 0.6804375052452087 1 0.844631552696228 6 0.10059148073196411 0 0.019277770072221756 0 0.0 0.15183615684509277 -0.0799783393740654 0.4494694471359253 0.8179571032524109 -0.059785760939121246 0.5721305012702942 0.08381302654743195 0.7420639395713806 6 0.8048247694969177 0 0.08847368508577347 1 0.08450014144182205 0 0.0 0.1328907608985901 0.08454591780900955 0.4755467176437378 0.9486068487167358 -0.2300790399312973 0.21716971695423126 0.10511094331741333 0.5692154169082642 1 0.7616633176803589 0 0.1789185106754303 6 0.05522337555885315 0 0.0 0.15635263919830322 0.0019541755318641663 0.4368339776992798 0.9516891837120056 0.06549271941184998 0.299966424703598 0.1451314240694046 0.5465568900108337 0 0.4180992841720581 6 0.33493271470069885 1 0.23640868067741394 0 0.0 0.14348971843719482 0.04227609187364578 0.4033273458480835 0.9923093318939209 0.11435285210609436 0.047242652624845505 0.12420067191123962 0.5302112698554993 0 0.55479896068573 1 0.27051031589508057 6 0.1687029004096985 0 0.0 0.20714151859283447 -0.0656772330403328 -0.5096536874771118 0.7676015496253967 0.22464674711227417 -0.600207507610321 0.9018306136131287 0.28798139095306396 5 0.8890505433082581 0 0.06969472020864487 2 0.015910718590021133 0 0.0 0.0 -0.034700654447078705 -0.5120750665664673 0.0 -0.28131961822509766 -0.9595934748649597 0.7954190373420715 0.3016514182090759 0 0.4035522937774658 5 0.21959787607192993 3 0.21959787607192993 2 0.1571648120880127 0.20858150720596313 0.007689781486988068 -0.4805508852005005 0.7801751494407654 -0.053529463708400726 -0.6232184767723083 0.9003711938858032 0.3267052471637726 5 0.6917824745178223 0 0.18764761090278625 2 0.10546614229679108 0 0.0 0.20858150720596313 0.007689781486988068 -0.4805508852005005 0.7801751494407654 -0.053529463708400726 -0.6232184767723083 0.11399266123771667 0.06662172824144363 5 0.6917824745178223 0 0.18764761090278625 2 0.10546614229679108 0 0.0 0.18308591842651367 -0.1715635061264038 -0.30947959423065186 0.6252326965332031 -0.7065645456314087 0.33136996626853943 0.21177582442760468 0.15119899809360504 5 0.7757202386856079 0 0.20105862617492676 0 0.0 0 0.0 0.20714151859283447 -0.0656772330403328 -0.5096536874771118 0.7676015496253967 0.22464674711227417 -0.600207507610321 0.15080034732818604 0.04935154691338539 5 0.8890505433082581 0 0.06969472020864487 2 0.015910718590021133 0 0.0 0.24815957248210907 -0.0371197834610939 -0.2536252737045288 0.9628284573554993 -0.26746422052383423 0.036957915872335434 0.14128771424293518 0.18390731513500214 0 0.7170878648757935 5 0.2454865425825119 2 0.007828813046216965 0 0.0 0.12958550453186035 -0.1315857172012329 -0.09456980228424072 0.34760582447052 -0.9195837378501892 0.1829584687948227 0.19997769594192505 0.2649575471878052 0 0.9013321995735168 5 0.07171499729156494 0 0.0 0 0.0 0.18308591842651367 -0.1715635061264038 -0.30947959423065186 0.6252326965332031 -0.7065645456314087 0.33136996626853943 0.21177582442760468 0.15119899809360504 5 0.7757202386856079 0 0.20105862617492676 0 0.0 0 0.0 0.16476905345916748 -0.032182566821575165 0.1135796308517456 0.9007843136787415 -0.41755425930023193 0.1192358136177063 0.15316157042980194 0.3764743208885193 0 0.9259851574897766 6 0.043090369552373886 0 0.0 0 0.0 0.12958550453186035 -0.1315857172012329 -0.09456980228424072 0.34760582447052 -0.9195837378501892 0.1829584687948227 0.19997769594192505 0.2649575471878052 0 0.9013321995735168 5 0.07171499729156494 0 0.0 0 0.0 0.2347235083580017 0.006545670330524445 -0.1102060079574585 0.9553208947181702 -0.24109622836112976 0.17084261775016785 0.12361200898885727 0.26020655035972595 0 0.9013984799385071 5 0.0706256553530693 0 0.0 0 0.0 0.13016337156295776 -0.10303550213575363 0.1634429693222046 0.7592394948005676 -0.6505325436592102 -0.01754814386367798 0.19253799319267273 0.40071889758110046 0 0.8383778929710388 6 0.12892886996269226 0 0.0 0 0.0 0.14634591341018677 -0.032207198441028595 0.28267955780029297 0.9860835671424866 -0.16443373262882233 0.023529771715402603 0.15881086885929108 0.46500539779663086 0 0.6134584546089172 6 0.3347821831703186 1 0.028665635734796524 0 0.0 0.15036439895629883 -0.08714862912893295 0.3016083240509033 0.9604480266571045 -0.09698782116174698 -0.2609332501888275 0.18725724518299103 0.4733530879020691 6 0.7862779498100281 0 0.17627522349357605 0 0.0 0 0.0 0.16675245761871338 0.013475604355335236 0.27252471446990967 0.9878231287002563 -0.08340708911418915 0.13122959434986115 0.13413144648075104 0.46088677644729614 0 0.7682546377182007 6 0.16683457791805267 1 0.056936174631118774 0 0.0 0.16476905345916748 -0.032182566821575165 0.1135796308517456 0.9007843136787415 -0.41755425930023193 0.1192358136177063 0.15316157042980194 0.3764743208885193 0 0.9259851574897766 6 0.043090369552373886 0 0.0 0 0.0 0.18591099977493286 0.027745135128498077 0.1363673210144043 0.9799188375473022 -0.05694753676652908 0.1909848302602768 0.12207462638616562 0.3899834156036377 0 0.9314292669296265 6 0.028245745226740837 0 0.0 0 0.0 0.18591099977493286 0.027745135128498077 0.1363673210144043 0.9799188375473022 -0.05694753676652908 0.1909848302602768 0.12207462638616562 0.3899834156036377 0 0.9314292669296265 6 0.028245745226740837 0 0.0 0 0.0 0.2347235083580017 0.006545670330524445 -0.1102060079574585 0.9553208947181702 -0.24109622836112976 0.17084261775016785 0.12361200898885727 0.26020655035972595 0 0.9013984799385071 5 0.0706256553530693 0 0.0 0 0.0 0.22698575258255005 0.09685314446687698 -0.09775805473327637 0.9559617638587952 0.26496168971061707 0.126163512468338 0.07812663912773132 0.2692766785621643 0 0.9218430519104004 5 0.03574578836560249 2 0.0003750547766685486 0 0.0 0.24470371007919312 0.06189621239900589 -0.2797147035598755 0.9805597066879272 0.1901303082704544 -0.04824976250529289 0.09005673974752426 0.17304474115371704 0 0.7772277593612671 5 0.15139922499656677 2 0.0652080550789833 0 0.0 0.2347235083580017 0.006545670330524445 -0.1102060079574585 0.9553208947181702 -0.24109622836112976 0.17084261775016785 0.12361200898885727 0.26020655035972595 0 0.9013984799385071 5 0.0706256553530693 0 0.0 0 0.0 0.24815957248210907 -0.0371197834610939 -0.2536252737045288 0.9628284573554993 -0.26746422052383423 0.036957915872335434 0.14128771424293518 0.18390731513500214 0 0.7170878648757935 5 0.2454865425825119 2 0.007828813046216965 0 0.0 0.0 0.08928192406892776 -0.5540534257888794 0.0 -0.35929441452026367 -0.9331949949264526 0.796051561832428 0.36615949869155884 2 0.8365933895111084 0 0.07663940638303757 5 0.036726269870996475 3 0.036726269870996475 0.20858150720596313 0.007689781486988068 -0.4805508852005005 0.7801751494407654 -0.053529463708400726 -0.6232184767723083 0.9003711938858032 0.3267052471637726 5 0.6917824745178223 0 0.18764761090278625 2 0.10546614229679108 0 0.0 0.0 -0.034700654447078705 -0.5120750665664673 0.0 -0.28131961822509766 -0.9595934748649597 0.7954190373420715 0.3016514182090759 0 0.4035522937774658 5 0.21959787607192993 3 0.21959787607192993 2 0.1571648120880127 0.20858150720596313 0.007689781486988068 -0.4805508852005005 0.7801751494407654 -0.053529463708400726 -0.6232184767723083 0.11399266123771667 0.06662172824144363 5 0.6917824745178223 0 0.18764761090278625 2 0.10546614229679108 0 0.0 0.24470371007919312 0.06189621239900589 -0.2797147035598755 0.9805597066879272 0.1901303082704544 -0.04824976250529289 0.09005673974752426 0.17304474115371704 0 0.7772277593612671 5 0.15139922499656677 2 0.0652080550789833 0 0.0 0.24815957248210907 -0.0371197834610939 -0.2536252737045288 0.9628284573554993 -0.26746422052383423 0.036957915872335434 0.14128771424293518 0.18390731513500214 0 0.7170878648757935 5 0.2454865425825119 2 0.007828813046216965 0 0.0 0.09570074081420898 0.19440031051635742 -0.5164247751235962 0.49549850821495056 0.5802789330482483 -0.6462904810905457 0.8421570658683777 0.4227440059185028 2 0.8343983888626099 0 0.1073855310678482 5 0.05108572542667389 0 0.0 0.216885507106781 0.10776758939027786 -0.49034416675567627 0.7796563506126404 0.18768882751464844 -0.5973693132400513 0.9039897918701172 0.37911513447761536 0 0.38549935817718506 5 0.30454903841018677 2 0.30049633979797363 0 0.0 0.0 0.08928192406892776 -0.5540534257888794 0.0 -0.35929441452026367 -0.9331949949264526 0.796051561832428 0.36615949869155884 2 0.8365933895111084 0 0.07663940638303757 5 0.036726269870996475 3 0.036726269870996475 0.03598451614379883 0.1886899471282959 -0.6095010042190552 0.9367351531982422 0.18414868414402008 -0.29761651158332825 0.7668266892433167 0.5149851441383362 2 0.9910460710525513 0 0.0 0 0.0 0 0.0 0.0 0.24354887008666992 -0.5526114702224731 0.0 0.9767143726348877 -0.2144230455160141 0.7908804416656494 0.4901359975337982 2 0.9730596542358398 0 0.0 0 0.0 0 0.0 0.09570074081420898 0.19440031051635742 -0.5164247751235962 0.49549850821495056 0.5802789330482483 -0.6462904810905457 0.7379171252250671 0.46803349256515503 2 0.8343983888626099 0 0.1073855310678482 5 0.05108572542667389 0 0.0 0.0 0.08928192406892776 -0.5540534257888794 0.0 -0.35929441452026367 -0.9331949949264526 0.3732423782348633 0.6631662249565125 2 0.8365933895111084 0 0.07663940638303757 5 0.036726269870996475 3 0.036726269870996475 0.03598451614379883 0.1886899471282959 -0.6095010042190552 0.9367351531982422 0.18414868414402008 -0.29761651158332825 0.4186630845069885 0.7031288146972656 2 0.9910460710525513 0 0.0 0 0.0 0 0.0 0.09570074081420898 0.19440031051635742 -0.5164247751235962 0.49549850821495056 0.5802789330482483 -0.6462904810905457 0.43451640009880066 0.6571521162986755 2 0.8343983888626099 0 0.1073855310678482 5 0.05108572542667389 0 0.0 0.03598451614379883 0.1886899471282959 -0.6095010042190552 0.9367351531982422 0.18414868414402008 -0.29761651158332825 0.7668266892433167 0.5149851441383362 2 0.9910460710525513 0 0.0 0 0.0 0 0.0 0.0 0.20252740383148193 -0.7054659128189087 0.0 0.999908447265625 0.013458662666380405 0.785669207572937 0.5653976798057556 2 0.998930811882019 0 0.0 0 0.0 0 0.0 0.0 0.2204439640045166 -0.6226273775100708 0.0 0.965636134147644 -0.2598040699958801 0.7880650162696838 0.52422696352005 2 1.0015981197357178 0 0.0 0 0.0 0 0.0 0.0 0.12543010711669922 -0.611486554145813 0.0 -0.9602038860321045 -0.2791833281517029 0.3850645124912262 0.6965480446815491 2 0.9726563692092896 0 0.0 0 0.0 0 0.0 0.03391218185424805 0.16914141178131104 -0.7118293046951294 0.9985961318016052 -0.03466902673244476 -0.0395825058221817 0.3975711762905121 0.7533164024353027 2 0.9985517859458923 0 0.0 0 0.0 0 0.0 0.03598451614379883 0.1886899471282959 -0.6095010042190552 0.9367351531982422 0.18414868414402008 -0.29761651158332825 0.4186630845069885 0.7031288146972656 2 0.9910460710525513 0 0.0 0 0.0 0 0.0 0.03391218185424805 0.16914141178131104 -0.7118293046951294 0.9985961318016052 -0.03466902673244476 -0.0395825058221817 0.7651706337928772 0.5660513639450073 2 0.9985517859458923 0 0.0 0 0.0 0 0.0 0.0 0.22866559028625488 -0.7980247735977173 0.0 0.8856776356697083 0.46427807211875916 0.7875749468803406 0.615498423576355 2 0.9999145865440369 0 0.0 0 0.0 0 0.0 0.0 0.20252740383148193 -0.7054659128189087 0.0 0.999908447265625 0.013458662666380405 0.785669207572937 0.5653976798057556 2 0.998930811882019 0 0.0 0 0.0 0 0.0 0.0 0.12997519969940186 -0.7220932245254517 0.0 -0.9840693473815918 -0.17770928144454956 0.37523388862609863 0.7536645531654358 2 0.9981896281242371 0 0.0 0 0.0 0 0.0 0.03391218185424805 0.20211052894592285 -0.8192368745803833 0.9987182021141052 -0.04589983820915222 -0.020203253254294395 0.402330219745636 0.8119280338287354 2 0.9999237060546875 0 0.0 0 0.0 0 0.0 0.03391218185424805 0.16914141178131104 -0.7118293046951294 0.9985961318016052 -0.03466902673244476 -0.0395825058221817 0.3975711762905121 0.7533164024353027 2 0.9985517859458923 0 0.0 0 0.0 0 0.0 0.03391218185424805 0.20211052894592285 -0.8192368745803833 0.9987182021141052 -0.04589983820915222 -0.020203253254294395 0.7676439881324768 0.6244237422943115 2 0.9999237060546875 0 0.0 0 0.0 0 0.0 0.0 0.30632472038269043 -0.888379693031311 0.0 0.7523728013038635 0.6587114930152893 0.7946124076843262 0.6690369248390198 2 0.9999912977218628 0 0.0 0 0.0 0 0.0 0.0 0.22866559028625488 -0.7980247735977173 0.0 0.8856776356697083 0.46427807211875916 0.7875749468803406 0.615498423576355 2 0.9999145865440369 0 0.0 0 0.0 0 0.0 0.0 0.1722644567489624 -0.846596360206604 0.0 -0.8490249514579773 -0.5283058881759644 0.382790744304657 0.822054386138916 2 0.9999455809593201 0 0.0 0 0.0 0 0.0 0.03248608112335205 0.2871565818786621 -0.9138075113296509 0.9984740614891052 -0.027558214962482452 -0.047822505235672 0.43451640009880066 0.8696845769882202 2 0.999992847442627 0 0.0 0 0.0 0 0.0 0.03391218185424805 0.20211052894592285 -0.8192368745803833 0.9987182021141052 -0.04589983820915222 -0.020203253254294395 0.402330219745636 0.8119280338287354 2 0.9999237060546875 0 0.0 0 0.0 0 0.0 0.0 0.23639917373657227 -0.4245549440383911 0.0 0.9959410429000854 -0.08999908715486526 0.7911243438720703 0.4233974516391754 2 0.7914459109306335 0 0.1775953471660614 0 0.0 0 0.0 0.09570074081420898 0.19440031051635742 -0.5164247751235962 0.49549850821495056 0.5802789330482483 -0.6462904810905457 0.7379171252250671 0.46803349256515503 2 0.8343983888626099 0 0.1073855310678482 5 0.05108572542667389 0 0.0 0.0 0.24354887008666992 -0.5526114702224731 0.0 0.9767143726348877 -0.2144230455160141 0.7908804416656494 0.4901359975337982 2 0.9730596542358398 0 0.0 0 0.0 0 0.0 0.24470371007919312 0.06189621239900589 -0.2797147035598755 0.9805597066879272 0.1901303082704544 -0.04824976250529289 0.09005673974752426 0.17304474115371704 0 0.7772277593612671 5 0.15139922499656677 2 0.0652080550789833 0 0.0 0.15887433290481567 0.21892106533050537 -0.44221174716949463 0.5289468169212341 0.8012634515762329 -0.2795800566673279 0.009432848542928696 0.0927925854921341 2 0.6093363165855408 0 0.28971463441848755 5 0.09326215833425522 0 0.0 0.17098987102508545 0.22969770431518555 -0.25236809253692627 0.573503851890564 0.8189031481742859 0.021027252078056335 0.00861236173659563 0.1923501342535019 0 0.8024826049804688 2 0.15540441870689392 5 0.02284686639904976 0 0.0 0.0 0.23639917373657227 -0.4245549440383911 0.0 0.9959410429000854 -0.08999908715486526 0.7911243438720703 0.4233974516391754 2 0.7914459109306335 0 0.1775953471660614 0 0.0 0 0.0 0.17098987102508545 0.22969770431518555 -0.25236809253692627 0.573503851890564 0.8189031481742859 0.021027252078056335 0.7053508758544922 0.3356010913848877 0 0.8024826049804688 2 0.15540441870689392 5 0.02284686639904976 0 0.0 0.15887433290481567 0.21892106533050537 -0.44221174716949463 0.5289468169212341 0.8012634515762329 -0.2795800566673279 0.7089879512786865 0.4325237274169922 2 0.6093363165855408 0 0.28971463441848755 5 0.09326215833425522 0 0.0 0.22698575258255005 0.09685314446687698 -0.09775805473327637 0.9559617638587952 0.26496168971061707 0.126163512468338 0.07812663912773132 0.2692766785621643 0 0.9218430519104004 5 0.03574578836560249 2 0.0003750547766685486 0 0.0 0.17098987102508545 0.22969770431518555 -0.25236809253692627 0.573503851890564 0.8189031481742859 0.021027252078056335 0.00861236173659563 0.1923501342535019 0 0.8024826049804688 2 0.15540441870689392 5 0.02284686639904976 0 0.0 0.17741501331329346 0.1839226484298706 -0.056742191314697266 0.5986510515213013 0.765648365020752 0.23526719212532043 0.03717894107103348 0.29337358474731445 0 0.9394767880439758 2 0.021471891552209854 0 0.0 0 0.0 0.17741501331329346 0.1839226484298706 -0.056742191314697266 0.5986510515213013 0.765648365020752 0.23526719212532043 0.6990169882774353 0.23061582446098328 0 0.9394767880439758 2 0.021471891552209854 0 0.0 0 0.0 0.0 0.24447298049926758 -0.1661921739578247 0.0 0.9895016551017761 0.14435255527496338 0.7938501238822937 0.2907457947731018 0 0.8835389614105225 2 0.09514472633600235 0 0.0 0 0.0 0.0 0.18546009063720703 0.05253899097442627 0.0 0.9800409078598022 0.1987060159444809 0.7896201014518738 0.17259444296360016 0 0.9702994227409363 0 0.0 0 0.0 0 0.0 0.16880565881729126 0.11794913560152054 0.11694061756134033 0.7443464398384094 0.6213263273239136 0.24463637173175812 0.0762190967798233 0.3824160099029541 0 0.9508360624313354 0 0.0 0 0.0 0 0.0 0.22698575258255005 0.09685314446687698 -0.09775805473327637 0.9559617638587952 0.26496168971061707 0.126163512468338 0.07812663912773132 0.2692766785621643 0 0.9218430519104004 5 0.03574578836560249 2 0.0003750547766685486 0 0.0 0.17741501331329346 0.1839226484298706 -0.056742191314697266 0.5986510515213013 0.765648365020752 0.23526719212532043 0.03717894107103348 0.29337358474731445 0 0.9394767880439758 2 0.021471891552209854 0 0.0 0 0.0 0.16880565881729126 0.11794913560152054 0.11694061756134033 0.7443464398384094 0.6213263273239136 0.24463637173175812 0.6981099843978882 0.13501593470573425 0 0.9508360624313354 0 0.0 0 0.0 0 0.0 0.0 0.18546009063720703 0.05253899097442627 0.0 0.9800409078598022 0.1987060159444809 0.7896201014518738 0.17259444296360016 0 0.9702994227409363 0 0.0 0 0.0 0 0.0 0.0 0.18546009063720703 0.1571263074874878 0.0 0.999481201171875 0.0316782146692276 0.7903990745544434 0.11860571801662445 0 0.9424790740013123 1 0.04657768830657005 0 0.0 0 0.0 0.0 0.18546009063720703 0.1571263074874878 0.0 0.999481201171875 0.0316782146692276 0.7903990745544434 0.11860571801662445 0 0.9424790740013123 1 0.04657768830657005 0 0.0 0 0.0 0.13336622714996338 0.11216402798891068 0.2601882219314575 0.7886288166046143 0.6137882471084595 -0.03564561903476715 0.716507077217102 0.06020791083574295 0 0.8428831696510315 1 0.11205147206783295 6 0.030460624024271965 0 0.0 0.16880565881729126 0.11794913560152054 0.11694061756134033 0.7443464398384094 0.6213263273239136 0.24463637173175812 0.6981099843978882 0.13501593470573425 0 0.9508360624313354 0 0.0 0 0.0 0 0.0 0.15036439895629883 -0.08714862912893295 0.3016083240509033 0.9604480266571045 -0.09698782116174698 -0.2609332501888275 0.18725724518299103 0.4733530879020691 6 0.7862779498100281 0 0.17627522349357605 0 0.0 0 0.0 0.15635263919830322 0.0019541755318641663 0.4368339776992798 0.9516891837120056 0.06549271941184998 0.299966424703598 0.1451314240694046 0.5465568900108337 0 0.4180992841720581 6 0.33493271470069885 1 0.23640868067741394 0 0.0 0.15183615684509277 -0.0799783393740654 0.4494694471359253 0.8179571032524109 -0.059785760939121246 0.5721305012702942 0.18764083087444305 0.5508929491043091 6 0.8048247694969177 0 0.08847368508577347 1 0.08450014144182205 0 0.0 0.14348971843719482 0.04227609187364578 0.4033273458480835 0.9923093318939209 0.11435285210609436 0.047242652624845505 0.12420067191123962 0.5302112698554993 0 0.55479896068573 1 0.27051031589508057 6 0.1687029004096985 0 0.0 0.14634591341018677 -0.032207198441028595 0.28267955780029297 0.9860835671424866 -0.16443373262882233 0.023529771715402603 0.15881086885929108 0.46500539779663086 0 0.6134584546089172 6 0.3347821831703186 1 0.028665635734796524 0 0.0 0.16675245761871338 0.013475604355335236 0.27252471446990967 0.9878231287002563 -0.08340708911418915 0.13122959434986115 0.13413144648075104 0.46088677644729614 0 0.7682546377182007 6 0.16683457791805267 1 0.056936174631118774 0 0.0 0.14645665884017944 0.1097654178738594 0.37481164932250977 0.9749442934989929 0.221472829580307 -0.019989624619483948 0.08871705830097198 0.5171707272529602 0 0.5417115092277527 1 0.38658398389816284 6 0.06799633800983429 0 0.0 0.16675245761871338 0.013475604355335236 0.27252471446990967 0.9878231287002563 -0.08340708911418915 0.13122959434986115 0.13413144648075104 0.46088677644729614 0 0.7682546377182007 6 0.16683457791805267 1 0.056936174631118774 0 0.0 0.13336622714996338 0.11216402798891068 0.2601882219314575 0.7886288166046143 0.6137882471084595 -0.03564561903476715 0.08494245260953903 0.4573333263397217 0 0.8428831696510315 1 0.11205147206783295 6 0.030460624024271965 0 0.0 0.18591099977493286 0.027745135128498077 0.1363673210144043 0.9799188375473022 -0.05694753676652908 0.1909848302602768 0.12207462638616562 0.3899834156036377 0 0.9314292669296265 6 0.028245745226740837 0 0.0 0 0.0 0.13336622714996338 0.11216402798891068 0.2601882219314575 0.7886288166046143 0.6137882471084595 -0.03564561903476715 0.08494245260953903 0.4573333263397217 0 0.8428831696510315 1 0.11205147206783295 6 0.030460624024271965 0 0.0 0.16675245761871338 0.013475604355335236 0.27252471446990967 0.9878231287002563 -0.08340708911418915 0.13122959434986115 0.13413144648075104 0.46088677644729614 0 0.7682546377182007 6 0.16683457791805267 1 0.056936174631118774 0 0.0 0.14645665884017944 0.1097654178738594 0.37481164932250977 0.9749442934989929 0.221472829580307 -0.019989624619483948 0.08871705830097198 0.5171707272529602 0 0.5417115092277527 1 0.38658398389816284 6 0.06799633800983429 0 0.0 0.1328907608985901 0.08454591780900955 0.4755467176437378 0.9486068487167358 -0.2300790399312973 0.21716971695423126 0.10511094331741333 0.5692154169082642 1 0.7616633176803589 0 0.1789185106754303 6 0.05522337555885315 0 0.0 0.14348971843719482 0.04227609187364578 0.4033273458480835 0.9923093318939209 0.11435285210609436 0.047242652624845505 0.12420067191123962 0.5302112698554993 0 0.55479896068573 1 0.27051031589508057 6 0.1687029004096985 0 0.0 0.14436477422714233 0.1705399751663208 0.42970240116119385 0.9082003235816956 0.2847071886062622 -0.30674153566360474 0.059249572455883026 0.5475928783416748 1 0.765937328338623 0 0.203308567404747 6 0.007473602890968323 0 0.0 0.1328907608985901 0.08454591780900955 0.4755467176437378 0.9486068487167358 -0.2300790399312973 0.21716971695423126 0.10511094331741333 0.5692154169082642 1 0.7616633176803589 0 0.1789185106754303 6 0.05522337555885315 0 0.0 0.14645665884017944 0.1097654178738594 0.37481164932250977 0.9749442934989929 0.221472829580307 -0.019989624619483948 0.08871705830097198 0.5171707272529602 0 0.5417115092277527 1 0.38658398389816284 6 0.06799633800983429 0 0.0 0.0 0.1879560947418213 0.26575779914855957 0.0 0.9689321517944336 -0.2472609579563141 0.7914559245109558 0.06275101006031036 0 0.7974072098731995 1 0.18872691690921783 0 0.0 0 0.0 0.09047484397888184 0.21522080898284912 0.39295387268066406 0.5327311158180237 0.6883449554443359 -0.4922940731048584 0.749397337436676 0.00040331503259949386 1 0.795181393623352 0 0.19068458676338196 0 0.0 0 0.0 0.13336622714996338 0.11216402798891068 0.2601882219314575 0.7886288166046143 0.6137882471084595 -0.03564561903476715 0.716507077217102 0.06020791083574295 0 0.8428831696510315 1 0.11205147206783295 6 0.030460624024271965 0 0.0 0.09047484397888184 0.21522080898284912 0.39295387268066406 0.5327311158180237 0.6883449554443359 -0.4922940731048584 0.03804061561822891 0.5298435091972351 1 0.795181393623352 0 0.19068458676338196 0 0.0 0 0.0 0.14645665884017944 0.1097654178738594 0.37481164932250977 0.9749442934989929 0.221472829580307 -0.019989624619483948 0.08871705830097198 0.5171707272529602 0 0.5417115092277527 1 0.38658398389816284 6 0.06799633800983429 0 0.0 0.13336622714996338 0.11216402798891068 0.2601882219314575 0.7886288166046143 0.6137882471084595 -0.03564561903476715 0.08494245260953903 0.4573333263397217 0 0.8428831696510315 1 0.11205147206783295 6 0.030460624024271965 0 0.0 0.11800521612167358 0.24999380111694336 0.48617875576019287 0.773796796798706 0.5241248607635498 -0.3556627035140991 0.021475009620189667 0.5794675946235657 1 0.9226148724555969 0 0.06844037026166916 0 0.0 0 0.0 0.1687365174293518 0.1454685926437378 0.49789369106292725 0.982451856136322 -0.15335550904273987 -0.10599078238010406 0.07277017086744308 0.5824607610702515 1 0.8803035020828247 0 0.0941576361656189 0 0.0 0 0.0 0.14436477422714233 0.1705399751663208 0.42970240116119385 0.9082003235816956 0.2847071886062622 -0.30674153566360474 0.059249572455883026 0.5475928783416748 1 0.765937328338623 0 0.203308567404747 6 0.007473602890968323 0 0.0 0.09047484397888184 0.21522080898284912 0.39295387268066406 0.5327311158180237 0.6883449554443359 -0.4922940731048584 0.03804061561822891 0.5298435091972351 1 0.795181393623352 0 0.19068458676338196 0 0.0 0 0.0 0.11800521612167358 0.24999380111694336 0.48617875576019287 0.773796796798706 0.5241248607635498 -0.3556627035140991 0.021475009620189667 0.5794675946235657 1 0.9226148724555969 0 0.06844037026166916 0 0.0 0 0.0 0.14436477422714233 0.1705399751663208 0.42970240116119385 0.9082003235816956 0.2847071886062622 -0.30674153566360474 0.059249572455883026 0.5475928783416748 1 0.765937328338623 0 0.203308567404747 6 0.007473602890968323 0 0.0 0.0 0.2737917900085449 0.4282184839248657 0.0 0.6853236556053162 -0.7282326817512512 0.34596291184425354 0.8853135108947754 1 0.8951932191848755 0 0.09897997975349426 0 0.0 0 0.0 0.09047484397888184 0.21522080898284912 0.39295387268066406 0.5327311158180237 0.6883449554443359 -0.4922940731048584 0.37843960523605347 0.9328422546386719 1 0.795181393623352 0 0.19068458676338196 0 0.0 0 0.0 0.0 0.21217751502990723 0.36668074131011963 0.0 0.8941618204116821 -0.44770652055740356 0.37843960523605347 0.8868684768676758 1 0.7214112877845764 0 0.26902148127555847 0 0.0 0 0.0 0.17613452672958374 0.2313833236694336 0.6070717573165894 0.939146101474762 -0.07638783007860184 -0.334879606962204 0.2380296140909195 0.6809014678001404 1 0.9754757881164551 0 0.0 0 0.0 0 0.0 0.19039934873580933 0.3247871398925781 0.6355704069137573 0.7619251012802124 0.14554277062416077 0.6310617327690125 0.27696818113327026 0.8137040734291077 1 0.9823099970817566 0 0.0 0 0.0 0 0.0 0.18040990829467773 0.2139267921447754 0.6355704069137573 0.9097567796707153 -0.0018005920574069023 0.41511276364326477 0.27738291025161743 0.6571521162986755 1 0.9819253087043762 0 0.0 0 0.0 0 0.0 0.13313615322113037 0.3669123649597168 0.6355704069137573 -0.44904935359954834 0.7006744742393494 0.5543687343597412 0.9076574444770813 0.7835649847984314 1 0.9832393527030945 0 0.0 0 0.0 0 0.0 0.1190231442451477 0.3240025043487549 0.6043640375137329 -0.49604785442352295 0.7510910630226135 -0.4355906844139099 0.8601824045181274 0.8244431614875793 1 0.9815367460250854 0 0.0 0 0.0 0 0.0 0.1047014594078064 0.34171581268310547 0.6355704069137573 -0.5681020617485046 0.5726493000984192 0.5910214781761169 0.8933216333389282 0.8348871469497681 1 0.9845264554023743 0 0.0 0 0.0 0 0.0 0.1047014594078064 0.34171581268310547 0.6355704069137573 -0.5681020617485046 0.5726493000984192 0.5910214781761169 0.8933216333389282 0.8348871469497681 1 0.9845264554023743 0 0.0 0 0.0 0 0.0 0.1190231442451477 0.3240025043487549 0.6043640375137329 -0.49604785442352295 0.7510910630226135 -0.4355906844139099 0.8601824045181274 0.8244431614875793 1 0.9815367460250854 0 0.0 0 0.0 0 0.0 0.07210224866867065 0.3025968074798584 0.6355704069137573 0.08188115805387497 0.842799186706543 0.5319375991821289 0.8641595244407654 0.9000012874603271 1 0.9896824359893799 0 0.0 0 0.0 0 0.0 0.19039934873580933 0.3247871398925781 0.6355704069137573 0.7619251012802124 0.14554277062416077 0.6310617327690125 0.27696818113327026 0.8137040734291077 1 0.9823099970817566 0 0.0 0 0.0 0 0.0 0.1612895131111145 0.33922386169433594 0.5898922681808472 0.37003692984580994 0.5403607487678528 -0.7556688189506531 0.21432805061340332 0.8298017978668213 1 0.9799929261207581 0 0.0 0 0.0 0 0.0 0.18203496932983398 0.3555026054382324 0.6355704069137573 0.7024140357971191 0.35395365953445435 0.617480993270874 0.2770572006702423 0.8555743098258972 1 0.9823530912399292 0 0.0 0 0.0 0 0.0 0.18203496932983398 0.3555026054382324 0.6355704069137573 0.7024140357971191 0.35395365953445435 0.617480993270874 0.2770572006702423 0.8555743098258972 1 0.9823530912399292 0 0.0 0 0.0 0 0.0 0.1612895131111145 0.33922386169433594 0.5898922681808472 0.37003692984580994 0.5403607487678528 -0.7556688189506531 0.21432805061340332 0.8298017978668213 1 0.9799929261207581 0 0.0 0 0.0 0 0.0 0.1613888144493103 0.3804953098297119 0.6355704069137573 0.09356974810361862 0.8272042274475098 0.5540025234222412 0.27738291025161743 0.8877726197242737 1 0.9825493693351746 0 0.0 0 0.0 0 0.0 0.1612895131111145 0.33922386169433594 0.5898922681808472 0.37003692984580994 0.5403607487678528 -0.7556688189506531 0.8526605367660522 0.760287344455719 1 0.9799929261207581 0 0.0 0 0.0 0 0.0 0.13313615322113037 0.3669123649597168 0.6355704069137573 -0.44904935359954834 0.7006744742393494 0.5543687343597412 0.9076574444770813 0.7835649847984314 1 0.9832393527030945 0 0.0 0 0.0 0 0.0 0.1613888144493103 0.3804953098297119 0.6355704069137573 0.09356974810361862 0.8272042274475098 0.5540025234222412 0.9076574444770813 0.7395947575569153 1 0.9825493693351746 0 0.0 0 0.0 0 0.0 0.1190231442451477 0.3240025043487549 0.6043640375137329 -0.49604785442352295 0.7510910630226135 -0.4355906844139099 0.49227312207221985 0.6409542560577393 1 0.9815367460250854 0 0.0 0 0.0 0 0.0 0.07363545894622803 0.2982339859008789 0.6007412672042847 -0.04513687640428543 0.9967650175094604 -0.06619464606046677 0.5469268560409546 0.6396243572235107 1 0.9836677312850952 0 0.0 0 0.0 0 0.0 0.07210224866867065 0.3025968074798584 0.6355704069137573 0.08188115805387497 0.842799186706543 0.5319375991821289 0.551694929599762 0.5924338698387146 1 0.9896824359893799 0 0.0 0 0.0 0 0.0 0.15143811702728271 0.2254852056503296 0.5341702699661255 0.9232154488563538 0.25720998644828796 -0.2854396104812622 0.03369267284870148 0.6037472486495972 1 0.944068431854248 0 0.04248170927166939 0 0.0 0 0.0 0.17613452672958374 0.2313833236694336 0.6070717573165894 0.939146101474762 -0.07638783007860184 -0.334879606962204 0.03147881478071213 0.6419441103935242 1 0.9754757881164551 0 0.0 0 0.0 0 0.0 0.18040990829467773 0.2139267921447754 0.6355704069137573 0.9097567796707153 -0.0018005920574069023 0.41511276364326477 0.040995195508003235 0.656345546245575 1 0.9819253087043762 0 0.0 0 0.0 0 0.0 0.11800521612167358 0.24999380111694336 0.48617875576019287 0.773796796798706 0.5241248607635498 -0.3556627035140991 0.021475009620189667 0.5794675946235657 1 0.9226148724555969 0 0.06844037026166916 0 0.0 0 0.0 0.14436250925064087 0.27292418479919434 0.5668500661849976 0.7668996453285217 0.2865687906742096 -0.574175238609314 0.01067846454679966 0.6221985220909119 1 0.9698584675788879 0 0.0006063580513000488 0 0.0 0 0.0 0.15143811702728271 0.2254852056503296 0.5341702699661255 0.9232154488563538 0.25720998644828796 -0.2854396104812622 0.03369267284870148 0.6037472486495972 1 0.944068431854248 0 0.04248170927166939 0 0.0 0 0.0 0.1612895131111145 0.33922386169433594 0.5898922681808472 0.37003692984580994 0.5403607487678528 -0.7556688189506531 0.21432805061340332 0.8298017978668213 1 0.9799929261207581 0 0.0 0 0.0 0 0.0 0.17613452672958374 0.2313833236694336 0.6070717573165894 0.939146101474762 -0.07638783007860184 -0.334879606962204 0.2380296140909195 0.6809014678001404 1 0.9754757881164551 0 0.0 0 0.0 0 0.0 0.14436250925064087 0.27292418479919434 0.5668500661849976 0.7668996453285217 0.2865687906742096 -0.574175238609314 0.1829245537519455 0.7346058487892151 1 0.9698584675788879 0 0.0006063580513000488 0 0.0 0 0.0 0.14436250925064087 0.27292418479919434 0.5668500661849976 0.7668996453285217 0.2865687906742096 -0.574175238609314 0.6809971332550049 0.8264847993850708 1 0.9698584675788879 0 0.0006063580513000488 0 0.0 0 0.0 0.10207110643386841 0.29587411880493164 0.5440686941146851 0.41743215918540955 0.8524124622344971 -0.31473737955093384 0.6203145980834961 0.8451147079467773 1 0.9687204957008362 0 0.00479733943939209 0 0.0 0 0.0 0.1612895131111145 0.33922386169433594 0.5898922681808472 0.37003692984580994 0.5403607487678528 -0.7556688189506531 0.6809971332550049 0.9226937294006348 1 0.9799929261207581 0 0.0 0 0.0 0 0.0 0.1190231442451477 0.3240025043487549 0.6043640375137329 -0.49604785442352295 0.7510910630226135 -0.4355906844139099 0.49227312207221985 0.6409542560577393 1 0.9815367460250854 0 0.0 0 0.0 0 0.0 0.10207110643386841 0.29587411880493164 0.5440686941146851 0.41743215918540955 0.8524124622344971 -0.31473737955093384 0.5052196383476257 0.7176094651222229 1 0.9687204957008362 0 0.00479733943939209 0 0.0 0 0.0 0.07363545894622803 0.2982339859008789 0.6007412672042847 -0.04513687640428543 0.9967650175094604 -0.06619464606046677 0.5469268560409546 0.6396243572235107 1 0.9836677312850952 0 0.0 0 0.0 0 0.0 0.0 0.31928110122680664 0.5975655317306519 0.0 0.9569078683853149 0.29035308957099915 0.6522123217582703 0.6490117907524109 1 0.986151933670044 0 0.0 0 0.0 0 0.0 0.07363545894622803 0.2982339859008789 0.6007412672042847 -0.04513687640428543 0.9967650175094604 -0.06619464606046677 0.5469268560409546 0.6396243572235107 1 0.9836677312850952 0 0.0 0 0.0 0 0.0 0.03973621129989624 0.31778907775878906 0.5499929189682007 0.2772911787033081 0.9470503926277161 0.16165654361248016 0.5957963466644287 0.7146220803260803 1 0.9746320247650146 0 0.0 0 0.0 0 0.0 0.0 0.3334541320800781 0.513670802116394 0.0 0.9971312880516052 -0.07556383311748505 0.6522123217582703 0.7686784863471985 1 0.9621657729148865 0 0.019739564508199692 0 0.0 0 0.0 0.0 0.31928110122680664 0.5975655317306519 0.0 0.9569078683853149 0.29035308957099915 0.6522123217582703 0.6490117907524109 1 0.986151933670044 0 0.0 0 0.0 0 0.0 0.03973621129989624 0.31778907775878906 0.5499929189682007 0.2772911787033081 0.9470503926277161 0.16165654361248016 0.5957963466644287 0.7146220803260803 1 0.9746320247650146 0 0.0 0 0.0 0 0.0 0.06822705268859863 0.31713294982910156 0.5017274618148804 0.4450819492340088 0.8710898160934448 -0.20749534666538239 0.75923091173172 0.8749287724494934 1 0.9548740983009338 0 0.032349374145269394 0 0.0 0 0.0 0.11800521612167358 0.24999380111694336 0.48617875576019287 0.773796796798706 0.5241248607635498 -0.3556627035140991 0.7384125590324402 0.8501654267311096 1 0.9226148724555969 0 0.06844037026166916 0 0.0 0 0.0 0.07563048601150513 0.27506399154663086 0.4404362440109253 0.4518570601940155 0.6767174005508423 -0.5812555551528931 0.7320701479911804 0.8845022916793823 1 0.9063013195991516 0 0.0865083560347557 0 0.0 0 0.0 0.10207110643386841 0.29587411880493164 0.5440686941146851 0.41743215918540955 0.8524124622344971 -0.31473737955093384 0.5052196383476257 0.7176094651222229 1 0.9687204957008362 0 0.00479733943939209 0 0.0 0 0.0 0.03973621129989624 0.31778907775878906 0.5499929189682007 0.2772911787033081 0.9470503926277161 0.16165654361248016 0.5957963466644287 0.7146220803260803 1 0.9746320247650146 0 0.0 0 0.0 0 0.0 0.07363545894622803 0.2982339859008789 0.6007412672042847 -0.04513687640428543 0.9967650175094604 -0.06619464606046677 0.5469268560409546 0.6396243572235107 1 0.9836677312850952 0 0.0 0 0.0 0 0.0 0.0 0.3334541320800781 0.513670802116394 0.0 0.9971312880516052 -0.07556383311748505 0.6522123217582703 0.7686784863471985 1 0.9621657729148865 0 0.019739564508199692 0 0.0 0 0.0 0.06822705268859863 0.31713294982910156 0.5017274618148804 0.4450819492340088 0.8710898160934448 -0.20749534666538239 0.5548336505889893 0.7813751697540283 1 0.9548740983009338 0 0.032349374145269394 0 0.0 0 0.0 0.0 0.31658363342285156 0.4695626497268677 0.0 0.8418835997581482 -0.539597749710083 0.6458320021629333 0.8256781697273254 1 0.9410541653633118 0 0.054964829236269 0 0.0 0 0.0 0.0 0.31658363342285156 0.4695626497268677 0.0 0.8418835997581482 -0.539597749710083 0.766719400882721 0.9123905897140503 1 0.9410541653633118 0 0.054964829236269 0 0.0 0 0.0 0.07563048601150513 0.27506399154663086 0.4404362440109253 0.4518570601940155 0.6767174005508423 -0.5812555551528931 0.7320701479911804 0.8845022916793823 1 0.9063013195991516 0 0.0865083560347557 0 0.0 0 0.0 0.0 0.2737917900085449 0.4282184839248657 0.0 0.6853236556053162 -0.7282326817512512 0.7500969767570496 0.9189645051956177 1 0.8951932191848755 0 0.09897997975349426 0 0.0 0 0.0 0.19670462608337402 0.4268631935119629 0.6311711072921753 0.9928281307220459 -0.110782191157341 -0.04449598491191864 0.7312635183334351 0.8695287108421326 1 0.982549786567688 0 0.0 0 0.0 0 0.0 0.18475157022476196 0.45780444145202637 0.6298526525497437 0.23609119653701782 0.9698477387428284 -0.059938352555036545 0.6924620270729065 0.8456106185913086 1 0.982549786567688 0 0.0 0 0.0 0 0.0 0.17451947927474976 0.426532506942749 0.6409276723861694 -0.05017242953181267 0.10049745440483093 0.9936521649360657 0.7059145569801331 0.8887448906898499 1 0.982549786567688 0 0.0 0 0.0 0 0.0 0.18475157022476196 0.45780444145202637 0.6298526525497437 0.23609119653701782 0.9698477387428284 -0.059938352555036545 0.6924620270729065 0.8456106185913086 1 0.982549786567688 0 0.0 0 0.0 0 0.0 0.15975886583328247 0.43120598793029785 0.6309860944747925 -0.9370708465576172 0.34748375415802 -0.03326517343521118 0.6875460743904114 0.8966741561889648 1 0.982549786567688 0 0.0 0 0.0 0 0.0 0.17451947927474976 0.426532506942749 0.6409276723861694 -0.05017242953181267 0.10049745440483093 0.9936521649360657 0.7059145569801331 0.8887448906898499 1 0.982549786567688 0 0.0 0 0.0 0 0.0 0.15975886583328247 0.43120598793029785 0.6309860944747925 -0.9370708465576172 0.34748375415802 -0.03326517343521118 0.6875460743904114 0.8966741561889648 1 0.982549786567688 0 0.0 0 0.0 0 0.0 0.1613888144493103 0.3804953098297119 0.6355704069137573 0.09356974810361862 0.8272042274475098 0.5540025234222412 0.7312635183334351 0.9513239860534668 1 0.9825493693351746 0 0.0 0 0.0 0 0.0 0.17451947927474976 0.426532506942749 0.6409276723861694 -0.05017242953181267 0.10049745440483093 0.9936521649360657 0.7059145569801331 0.8887448906898499 1 0.982549786567688 0 0.0 0 0.0 0 0.0 0.1613888144493103 0.3804953098297119 0.6355704069137573 0.09356974810361862 0.8272042274475098 0.5540025234222412 0.7312635183334351 0.9513239860534668 1 0.9825493693351746 0 0.0 0 0.0 0 0.0 0.19670462608337402 0.4268631935119629 0.6311711072921753 0.9928281307220459 -0.110782191157341 -0.04449598491191864 0.7312635183334351 0.8695287108421326 1 0.982549786567688 0 0.0 0 0.0 0 0.0 0.17451947927474976 0.426532506942749 0.6409276723861694 -0.05017242953181267 0.10049745440483093 0.9936521649360657 0.7059145569801331 0.8887448906898499 1 0.982549786567688 0 0.0 0 0.0 0 0.0 0.15975886583328247 0.43120598793029785 0.6309860944747925 -0.9370708465576172 0.34748375415802 -0.03326517343521118 0.6530190110206604 0.5367875099182129 1 0.982549786567688 0 0.0 0 0.0 0 0.0 0.18475157022476196 0.45780444145202637 0.6298526525497437 0.23609119653701782 0.9698477387428284 -0.059938352555036545 0.6580154895782471 0.5878871083259583 1 0.982549786567688 0 0.0 0 0.0 0 0.0 0.17214298248291016 0.42655277252197266 0.6233502626419067 -0.11499374359846115 -0.01541184727102518 -0.9932249188423157 0.6713433861732483 0.5426108837127686 1 0.982549786567688 0 0.0 0 0.0 0 0.0 0.15975886583328247 0.43120598793029785 0.6309860944747925 -0.9370708465576172 0.34748375415802 -0.03326517343521118 0.6530190110206604 0.5367875099182129 1 0.982549786567688 0 0.0 0 0.0 0 0.0 0.17214298248291016 0.42655277252197266 0.6233502626419067 -0.11499374359846115 -0.01541184727102518 -0.9932249188423157 0.6713433861732483 0.5426108837127686 1 0.982549786567688 0 0.0 0 0.0 0 0.0 0.1613888144493103 0.3804953098297119 0.6355704069137573 0.09356974810361862 0.8272042274475098 0.5540025234222412 0.6969338059425354 0.48136377334594727 1 0.9825493693351746 0 0.0 0 0.0 0 0.0 0.19670462608337402 0.4268631935119629 0.6311711072921753 0.9928281307220459 -0.110782191157341 -0.04449598491191864 0.6969338059425354 0.5635218620300293 1 0.982549786567688 0 0.0 0 0.0 0 0.0 0.1613888144493103 0.3804953098297119 0.6355704069137573 0.09356974810361862 0.8272042274475098 0.5540025234222412 0.6969338059425354 0.48136377334594727 1 0.9825493693351746 0 0.0 0 0.0 0 0.0 0.17214298248291016 0.42655277252197266 0.6233502626419067 -0.11499374359846115 -0.01541184727102518 -0.9932249188423157 0.6713433861732483 0.5426108837127686 1 0.982549786567688 0 0.0 0 0.0 0 0.0 0.18475157022476196 0.45780444145202637 0.6298526525497437 0.23609119653701782 0.9698477387428284 -0.059938352555036545 0.6580154895782471 0.5878871083259583 1 0.982549786567688 0 0.0 0 0.0 0 0.0 0.19670462608337402 0.4268631935119629 0.6311711072921753 0.9928281307220459 -0.110782191157341 -0.04449598491191864 0.6969338059425354 0.5635218620300293 1 0.982549786567688 0 0.0 0 0.0 0 0.0 0.17214298248291016 0.42655277252197266 0.6233502626419067 -0.11499374359846115 -0.01541184727102518 -0.9932249188423157 0.6713433861732483 0.5426108837127686 1 0.982549786567688 0 0.0 0 0.0 0 0.0 0.09704774618148804 -0.392566442489624 -0.4658399820327759 -0.7643055319786072 -0.14413891732692719 0.6284981966018677 0.8038542866706848 0.8589156270027161 5 0.999832808971405 0 0.0 0 0.0 0 0.0 0.16358476877212524 -0.5438752174377441 -0.4808121919631958 0.8981902599334717 0.13892024755477905 0.41706594824790955 0.8319727182388306 0.9409989714622498 5 0.9999702572822571 0 0.0 0 0.0 0 0.0 0.1732814908027649 -0.3921675682067871 -0.45750391483306885 0.6674093008041382 -0.2617572546005249 0.6971343159675598 0.8426058888435364 0.8613379001617432 5 0.9991129636764526 0 0.0 0 0.0 0 0.0 0.10235244035720825 -0.35957908630371094 -0.5960932970046997 -0.6142460107803345 -0.017761772498488426 -0.7888729572296143 0.8124915361404419 0.6168727278709412 5 0.9956300258636475 0 0.0 0 0.0 0 0.0 0.09343808889389038 -0.32038211822509766 -0.4421921968460083 -0.7430646419525146 -0.36826685070991516 0.5587328672409058 0.8824628591537476 0.573641836643219 5 0.9944356083869934 0 0.0 0 0.0 0 0.0 0.08439087867736816 -0.21313560009002686 -0.5862895250320435 -0.5681020617485046 0.09179967641830444 -0.8178045153617859 0.7954190373420715 0.5414798259735107 5 0.964721143245697 0 0.0 0 0.0 0 0.0 0.1785861849784851 -0.359180212020874 -0.5877567529678345 0.7232581377029419 -0.06591998040676117 -0.6873989105224609 0.8941572904586792 0.13316871225833893 5 0.9966251850128174 0 0.0 0 0.0 0 0.0 0.08439087867736816 -0.21313560009002686 -0.5862895250320435 -0.5681020617485046 0.09179967641830444 -0.8178045153617859 0.8441900014877319 0.2085101306438446 5 0.964721143245697 0 0.0 0 0.0 0 0.0 0.20441192388534546 -0.18915605545043945 -0.555695652961731 0.7800835967063904 0.13812677562236786 -0.6102175712585449 0.9039897918701172 0.22283343970775604 5 0.9740641117095947 0 0.0 0 0.0 0 0.0 0.18601888418197632 -0.3018697500228882 -0.4252368211746216 0.6975615620613098 -0.4051026999950409 0.5909604430198669 0.27508801221847534 0.08698911219835281 5 0.986090362071991 0 0.0 0 0.0 0 0.0 0.1785861849784851 -0.359180212020874 -0.5877567529678345 0.7232581377029419 -0.06591998040676117 -0.6873989105224609 0.3002532124519348 0.00040331503259949386 5 0.9966251850128174 0 0.0 0 0.0 0 0.0 0.20441192388534546 -0.18915605545043945 -0.555695652961731 0.7800835967063904 0.13812677562236786 -0.6102175712585449 0.212846040725708 0.021823931485414505 5 0.9740641117095947 0 0.0 0 0.0 0 0.0 0.09202015399932861 -0.5696377754211426 -0.43102800846099854 -0.6786095499992371 0.33146151900291443 0.6554155349731445 0.18292458355426788 0.8896855115890503 5 0.9999966025352478 0 0.0 0 0.0 0 0.0 0.16358476877212524 -0.5438752174377441 -0.4808121919631958 0.8981902599334717 0.13892024755477905 0.41706594824790955 0.2118651568889618 0.9236057996749878 5 0.9999702572822571 0 0.0 0 0.0 0 0.0 0.09540045261383057 -0.5439469814300537 -0.483615517616272 -0.8756980895996094 0.18463698029518127 0.4460890591144562 0.2118651568889618 0.8885793089866638 5 0.9999970197677612 0 0.0 0 0.0 0 0.0 0.08888596296310425 -0.5484790802001953 -0.578835129737854 -0.7318033576011658 -0.13727225363254547 -0.6675008535385132 0.8489667773246765 0.7082512378692627 5 0.9997803568840027 0 0.0 0 0.0 0 0.0 0.09704774618148804 -0.392566442489624 -0.4658399820327759 -0.7643055319786072 -0.14413891732692719 0.6284981966018677 0.8815617561340332 0.6134598851203918 5 0.999832808971405 0 0.0 0 0.0 0 0.0 0.10235244035720825 -0.35957908630371094 -0.5960932970046997 -0.6142460107803345 -0.017761772498488426 -0.7888729572296143 0.8124915361404419 0.6168727278709412 5 0.9956300258636475 0 0.0 0 0.0 0 0.0 0.15707027912139893 -0.5484073162078857 -0.5760318040847778 0.7048555016517639 -0.1505172848701477 -0.6931669116020203 0.8846582770347595 0.03393390029668808 5 0.9998194575309753 0 0.0 0 0.0 0 0.0 0.10235244035720825 -0.35957908630371094 -0.5960932970046997 -0.6142460107803345 -0.017761772498488426 -0.7888729572296143 0.8554814457893372 0.13194745779037476 5 0.9956300258636475 0 0.0 0 0.0 0 0.0 0.1785861849784851 -0.359180212020874 -0.5877567529678345 0.7232581377029419 -0.06591998040676117 -0.6873989105224609 0.8941572904586792 0.13316871225833893 5 0.9966251850128174 0 0.0 0 0.0 0 0.0 0.1732814908027649 -0.3921675682067871 -0.45750391483306885 0.6674093008041382 -0.2617572546005249 0.6971343159675598 0.3210349380970001 0.06763686239719391 5 0.9991129636764526 0 0.0 0 0.0 0 0.0 0.15707027912139893 -0.5484073162078857 -0.5760318040847778 0.7048555016517639 -0.1505172848701477 -0.6931669116020203 0.39849552512168884 0.0013318752171471715 5 0.9998194575309753 0 0.0 0 0.0 0 0.0 0.1785861849784851 -0.359180212020874 -0.5877567529678345 0.7232581377029419 -0.06591998040676117 -0.6873989105224609 0.3002532124519348 0.00040331503259949386 5 0.9966251850128174 0 0.0 0 0.0 0 0.0 0.18308591842651367 -0.1715635061264038 -0.30947959423065186 0.6252326965332031 -0.7065645456314087 0.33136996626853943 0.9995967149734497 0.33627161383628845 5 0.7757202386856079 0 0.20105862617492676 0 0.0 0 0.0 0.0 -0.13216137886047363 -0.2887181043624878 0.0 -0.9959410429000854 0.08993804454803467 0.9047964811325073 0.3187030851840973 0 0.6482506990432739 5 0.17250163853168488 3 0.17250163853168488 0 0.0 0.07139867544174194 -0.1890047788619995 -0.3518143892288208 -0.5797906517982483 -0.7260048389434814 0.36979278922080994 0.9417983889579773 0.35505518317222595 5 0.7999973893165588 0 0.15418323874473572 3 0.02782197669148445 0 0.0 0.13016337156295776 -0.10303550213575363 0.1634429693222046 0.7592394948005676 -0.6505325436592102 -0.01754814386367798 0.9853255748748779 0.08616168797016144 0 0.8383778929710388 6 0.12892886996269226 0 0.0 0 0.0 0.0 -0.196242094039917 0.3226771354675293 0.0 -0.9550157189369202 -0.29651784896850586 0.9282938241958618 0.00040331503259949386 6 0.4506283402442932 4 0.4506283402442932 0 0.09200550615787506 0 0.0 0.0 -0.195021390914917 0.15074574947357178 0.0 -0.9848322868347168 -0.17343668639659882 0.9224485158920288 0.09022121131420135 0 0.8213648796081543 6 0.08476964384317398 4 0.08476964384317398 0 0.0 0.0 -0.13216137886047363 -0.2887181043624878 0.0 -0.9959410429000854 0.08993804454803467 0.9047964811325073 0.3187030851840973 0 0.6482506990432739 5 0.17250163853168488 3 0.17250163853168488 0 0.0 0.12958550453186035 -0.1315857172012329 -0.09456980228424072 0.34760582447052 -0.9195837378501892 0.1829584687948227 0.9776368141174316 0.22148758172988892 0 0.9013321995735168 5 0.07171499729156494 0 0.0 0 0.0 0.0 -0.10864909738302231 -0.08876931667327881 0.0 -0.9990233778953552 0.04358043149113655 0.9104627370834351 0.21379117667675018 0 0.9455240964889526 0 0.0 0 0.0 0 0.0 0.0 -0.10864909738302231 -0.08876931667327881 0.0 -0.9990233778953552 0.04358043149113655 0.9104627370834351 0.21379117667675018 0 0.9455240964889526 0 0.0 0 0.0 0 0.0 0.13016337156295776 -0.10303550213575363 0.1634429693222046 0.7592394948005676 -0.6505325436592102 -0.01754814386367798 0.9853255748748779 0.08616168797016144 0 0.8383778929710388 6 0.12892886996269226 0 0.0 0 0.0 0.0 -0.195021390914917 0.15074574947357178 0.0 -0.9848322868347168 -0.17343668639659882 0.9224485158920288 0.09022121131420135 0 0.8213648796081543 6 0.08476964384317398 4 0.08476964384317398 0 0.0 0.10268598794937134 -0.6122503280639648 -0.4350939989089966 -0.5183873772621155 -0.6310312151908875 0.5770744681358337 0.21411648392677307 0.8940513134002686 5 0.9999961853027344 0 0.0 0 0.0 0 0.0 0.1669650673866272 -0.5695590972900391 -0.42794668674468994 0.6787621974945068 0.3166295289993286 0.6625568270683289 0.23618458211421967 0.9276077151298523 5 0.9999889731407166 0 0.0 0 0.0 0 0.0 0.09202015399932861 -0.5696377754211426 -0.43102800846099854 -0.6786095499992371 0.33146151900291443 0.6554155349731445 0.23618458211421967 0.8885793089866638 5 0.9999966025352478 0 0.0 0 0.0 0 0.0 0.10268598794937134 -0.6122503280639648 -0.4350939989089966 -0.5183873772621155 -0.6310312151908875 0.5770744681358337 0.6814783215522766 0.8220149278640747 5 0.9999961853027344 0 0.0 0 0.0 0 0.0 0.14641422033309937 -0.6189942359924316 -0.49265921115875244 0.5785698890686035 -0.8136540055274963 -0.05630664899945259 0.6587129831314087 0.7918486595153809 5 0.9999929070472717 0 0.0 0 0.0 0 0.0 0.15794646739959717 -0.6148338317871094 -0.4347497224807739 0.5692312121391296 -0.6506851315498352 0.5025177597999573 0.6530190110206604 0.8222582340240479 5 0.9999942779541016 0 0.0 0 0.0 0 0.0 0.10268598794937134 -0.610898494720459 -0.5709654092788696 -0.5513778924942017 -0.6156193614006042 -0.5630054473876953 0.6814783215522766 0.7508853673934937 5 0.9999434351921082 0 0.0 0 0.0 0 0.0 0.14641422033309937 -0.6189942359924316 -0.49265921115875244 0.5785698890686035 -0.8136540055274963 -0.05630664899945259 0.6587129831314087 0.7918486595153809 5 0.9999929070472717 0 0.0 0 0.0 0 0.0 0.10268598794937134 -0.6176581382751465 -0.489848256111145 -0.6539506316184998 -0.7564317584037781 -0.01031525619328022 0.681201696395874 0.7932599782943726 5 0.9999944567680359 0 0.0 0 0.0 0 0.0 0.15707027912139893 -0.5484073162078857 -0.5760318040847778 0.7048555016517639 -0.1505172848701477 -0.6931669116020203 0.8846582770347595 0.03393390029668808 5 0.9998194575309753 0 0.0 0 0.0 0 0.0 0.10268598794937134 -0.610898494720459 -0.5709654092788696 -0.5513778924942017 -0.6156193614006042 -0.5630054473876953 0.8572291135787964 0.0005972707876935601 5 0.9999434351921082 0 0.0 0 0.0 0 0.0 0.08888596296310425 -0.5484790802001953 -0.578835129737854 -0.7318033576011658 -0.13727225363254547 -0.6675008535385132 0.8498412370681763 0.03303687646985054 5 0.9997803568840027 0 0.0 0 0.0 0 0.0 0.1669650673866272 -0.5695590972900391 -0.42794668674468994 0.6787621974945068 0.3166295289993286 0.6625568270683289 0.41296064853668213 0.07816137373447418 5 0.9999889731407166 0 0.0 0 0.0 0 0.0 0.14641422033309937 -0.6189942359924316 -0.49265921115875244 0.5785698890686035 -0.8136540055274963 -0.05630664899945259 0.43747836351394653 0.04301292449235916 5 0.9999929070472717 0 0.0 0 0.0 0 0.0 0.16358476877212524 -0.5438752174377441 -0.4808121919631958 0.8981902599334717 0.13892024755477905 0.41706594824790955 0.39850914478302 0.05124041810631752 5 0.9999702572822571 0 0.0 0 0.0 0 0.0 0.15707027912139893 -0.5484073162078857 -0.5760318040847778 0.7048555016517639 -0.1505172848701477 -0.6931669116020203 0.39849552512168884 0.0013318752171471715 5 0.9998194575309753 0 0.0 0 0.0 0 0.0 0.14641422033309937 -0.6189942359924316 -0.49265921115875244 0.5785698890686035 -0.8136540055274963 -0.05630664899945259 0.43747836351394653 0.04301292449235916 5 0.9999929070472717 0 0.0 0 0.0 0 0.0 0.14641422033309937 -0.6122345924377441 -0.5737768411636353 0.4997100830078125 -0.6077150702476501 -0.617175817489624 0.43175503611564636 0.0007699446869082749 5 0.9999440312385559 0 0.0 0 0.0 0 0.0 0.09202015399932861 -0.5696377754211426 -0.43102800846099854 -0.6786095499992371 0.33146151900291443 0.6554155349731445 0.9249988794326782 0.696574330329895 5 0.9999966025352478 0 0.0 0 0.0 0 0.0 0.10268598794937134 -0.6176581382751465 -0.489848256111145 -0.6539506316184998 -0.7564317584037781 -0.01031525619328022 0.90322345495224 0.7298896312713623 5 0.9999944567680359 0 0.0 0 0.0 0 0.0 0.10268598794937134 -0.6122503280639648 -0.4350939989089966 -0.5183873772621155 -0.6310312151908875 0.5770744681358337 0.9294113516807556 0.7188957929611206 5 0.9999961853027344 0 0.0 0 0.0 0 0.0 0.09540045261383057 -0.5439469814300537 -0.483615517616272 -0.8756980895996094 0.18463698029518127 0.4460890591144562 0.8952838778495789 0.6918089389801025 5 0.9999970197677612 0 0.0 0 0.0 0 0.0 0.10268598794937134 -0.610898494720459 -0.5709654092788696 -0.5513778924942017 -0.6156193614006042 -0.5630054473876953 0.8622313141822815 0.7387880682945251 5 0.9999434351921082 0 0.0 0 0.0 0 0.0 0.10268598794937134 -0.6176581382751465 -0.489848256111145 -0.6539506316184998 -0.7564317584037781 -0.01031525619328022 0.90322345495224 0.7298896312713623 5 0.9999944567680359 0 0.0 0 0.0 0 0.0 0.15605974197387695 0.14025557041168213 0.6220062971115112 0.8759422302246094 -0.46403393149375916 0.13183996081352234 0.6745739579200745 0.33786362409591675 1 0.969058096408844 0 0.0 0 0.0 0 0.0 0.13038241863250732 0.20644712448120117 0.6861461400985718 0.634571373462677 0.33890804648399353 0.69454026222229 0.6237268447875977 0.2415420264005661 1 0.9901185631752014 0 0.0 0 0.0 0 0.0 0.12537634372711182 0.11766744405031204 0.7009600400924683 0.7749870419502258 -0.334574431180954 0.5360881090164185 0.5847986340522766 0.3410102427005768 1 0.9864891767501831 0 0.0 0 0.0 0 0.0 0.12537634372711182 0.11766744405031204 0.7009600400924683 0.7749870419502258 -0.334574431180954 0.5360881090164185 0.7006834745407104 0.8323686122894287 1 0.9864891767501831 0 0.0 0 0.0 0 0.0 0.06865745782852173 0.10929454118013382 0.7345117330551147 0.5191808938980103 -0.1431928426027298 0.8425549864768982 0.7946124076843262 0.8448039889335632 1 0.9898999929428101 0 0.0 0 0.0 0 0.0 0.0705878734588623 0.05552078038454056 0.6960290670394897 0.6313669085502625 -0.7171849608421326 0.2948698401451111 0.7946124076843262 0.7522226572036743 1 0.981741726398468 0 0.0 0 0.0 0 0.0 -0.05053889751434326 0.1634979248046875 0.7342671155929565 -0.3151646554470062 0.2640766501426697 0.9115268588066101 0.5070644617080688 0.2996123731136322 1 0.9950050711631775 0 0.0 0 0.0 0 0.0 -0.06078380346298218 0.2408146858215332 0.7048863172531128 -0.25702688097953796 0.5580919981002808 0.7889339923858643 0.5218138098716736 0.20084944367408752 1 0.9963243007659912 0 0.0 0 0.0 0 0.0 -0.13038241863250732 0.20644712448120117 0.6861461400985718 -0.634571373462677 0.33890804648399353 0.69454026222229 0.6237268447875977 0.2415420264005661 1 0.9900858998298645 0 0.0 0 0.0 0 0.0 0.0 0.1765376329421997 0.7342671155929565 0.0 0.4454481601715088 0.8952909708023071 0.44110503792762756 0.2877768576145172 1 0.9965916275978088 0 0.0 0 0.0 0 0.0 0.0 0.24179911613464355 0.7048863172531128 0.0 0.6098208427429199 0.7925046682357788 0.4382849633693695 0.20771509408950806 1 0.9979282021522522 0 0.0 0 0.0 0 0.0 -0.06078380346298218 0.2408146858215332 0.7048863172531128 -0.25702688097953796 0.5580919981002808 0.7889339923858643 0.5218138098716736 0.20084944367408752 1 0.9963243007659912 0 0.0 0 0.0 0 0.0 0.0 0.13670289516448975 0.759844183921814 0.0 0.347636342048645 0.9376201629638672 0.444909006357193 0.3479462265968323 1 0.9948671460151672 0 0.0 0 0.0 0 0.0 0.0 0.1765376329421997 0.7342671155929565 0.0 0.4454481601715088 0.8952909708023071 0.44110503792762756 0.2877768576145172 1 0.9965916275978088 0 0.0 0 0.0 0 0.0 -0.05053889751434326 0.1634979248046875 0.7342671155929565 -0.3151646554470062 0.2640766501426697 0.9115268588066101 0.5070644617080688 0.2996123731136322 1 0.9950050711631775 0 0.0 0 0.0 0 0.0 -0.05053889751434326 0.1634979248046875 0.7342671155929565 -0.3151646554470062 0.2640766501426697 0.9115268588066101 0.5070644617080688 0.2996123731136322 1 0.9950050711631775 0 0.0 0 0.0 0 0.0 -0.12537634372711182 0.11766744405031204 0.7009600400924683 -0.7749870419502258 -0.334574431180954 0.5360881090164185 0.5847986340522766 0.3410102427005768 1 0.9862551689147949 0 0.0 0 0.0 0 0.0 -0.06865745782852173 0.10929454118013382 0.7345117330551147 -0.5191808938980103 -0.1431928426027298 0.8425549864768982 0.5454435348510742 0.3798229694366455 1 0.9907939434051514 0 0.0 0 0.0 0 0.0 -0.029034316539764404 0.02282658964395523 0.5975655317306519 -0.5346843004226685 -0.8348338007926941 0.13074129819869995 0.33391112089157104 0.6721431612968445 1 0.9265840649604797 4 0.026504922658205032 0 0.0 0 0.0 0.0 0.00883752852678299 0.5868633985519409 0.0 -0.9138767719268799 0.4059267044067383 0.3724357783794403 0.6571521162986755 1 0.9038245677947998 6 0.03429456427693367 4 0.03429247811436653 0 0.0 -0.035290539264678955 0.032179124653339386 0.6548959016799927 -0.4995880126953125 -0.8637043237686157 0.06610309332609177 0.3249615430831909 0.7529926896095276 1 0.9649173617362976 0 0.0 0 0.0 0 0.0 -0.07210224866867065 0.3025968074798584 0.6355704069137573 -0.08188115805387497 0.842799186706543 0.5319375991821289 0.551694929599762 0.5924338698387146 1 0.9896897077560425 0 0.0 0 0.0 0 0.0 -0.06078380346298218 0.2408146858215332 0.7048863172531128 -0.25702688097953796 0.5580919981002808 0.7889339923858643 0.5539146065711975 0.48136377334594727 1 0.9963243007659912 0 0.0 0 0.0 0 0.0 0.0 0.24179911613464355 0.7048863172531128 0.0 0.6098208427429199 0.7925046682357788 0.6366429924964905 0.4814949929714203 1 0.9979282021522522 0 0.0 0 0.0 0 0.0 -0.06078380346298218 0.2408146858215332 0.7048863172531128 -0.25702688097953796 0.5580919981002808 0.7889339923858643 0.5539146065711975 0.48136377334594727 1 0.9963243007659912 0 0.0 0 0.0 0 0.0 -0.07210224866867065 0.3025968074798584 0.6355704069137573 -0.08188115805387497 0.842799186706543 0.5319375991821289 0.551694929599762 0.5924338698387146 1 0.9896897077560425 0 0.0 0 0.0 0 0.0 -0.13990861177444458 0.2426142692565918 0.6210473775863647 -0.17987608909606934 0.4221320152282715 0.8884853720664978 0.44332829117774963 0.5980841517448425 1 0.9863532781600952 0 0.0 0 0.0 0 0.0 -0.13038241863250732 0.20644712448120117 0.6861461400985718 -0.634571373462677 0.33890804648399353 0.69454026222229 0.6237268447875977 0.2415420264005661 1 0.9900858998298645 0 0.0 0 0.0 0 0.0 -0.13990861177444458 0.2426142692565918 0.6210473775863647 -0.17987608909606934 0.4221320152282715 0.8884853720664978 0.6398704051971436 0.19736255705356598 1 0.9863532781600952 0 0.0 0 0.0 0 0.0 -0.18040990829467773 0.2139267921447754 0.6355704069137573 -0.9097567796707153 -0.0018005920574069023 0.41511276364326477 0.6973033547401428 0.23020672798156738 1 0.9819098114967346 0 0.0 0 0.0 0 0.0 -0.19039934873580933 0.3247871398925781 0.6355704069137573 -0.7619251012802124 0.14554277062416077 0.6310617327690125 0.6973033547401428 0.07419048994779587 1 0.9823060631752014 0 0.0 0 0.0 0 0.0 -0.18040990829467773 0.2139267921447754 0.6355704069137573 -0.9097567796707153 -0.0018005920574069023 0.41511276364326477 0.6973033547401428 0.23020672798156738 1 0.9819098114967346 0 0.0 0 0.0 0 0.0 -0.13990861177444458 0.2426142692565918 0.6210473775863647 -0.17987608909606934 0.4221320152282715 0.8884853720664978 0.6398704051971436 0.19736255705356598 1 0.9863532781600952 0 0.0 0 0.0 0 0.0 -0.18203496932983398 0.3555026054382324 0.6355704069137573 -0.7024140357971191 0.35395365953445435 0.617480993270874 0.682029664516449 0.03247282654047012 1 0.9823503494262695 0 0.0 0 0.0 0 0.0 -0.19039934873580933 0.3247871398925781 0.6355704069137573 -0.7619251012802124 0.14554277062416077 0.6310617327690125 0.6973033547401428 0.07419048994779587 1 0.9823060631752014 0 0.0 0 0.0 0 0.0 -0.1529483199119568 0.3224823474884033 0.616545557975769 0.10449537634849548 -0.09079256653785706 0.9903561472892761 0.648408830165863 0.08469385653734207 1 0.9842054843902588 0 0.0 0 0.0 0 0.0 -0.1529483199119568 0.3224823474884033 0.616545557975769 0.10449537634849548 -0.09079256653785706 0.9903561472892761 0.648408830165863 0.08469385653734207 1 0.9842054843902588 0 0.0 0 0.0 0 0.0 -0.13990861177444458 0.2426142692565918 0.6210473775863647 -0.17987608909606934 0.4221320152282715 0.8884853720664978 0.6398704051971436 0.19736255705356598 1 0.9863532781600952 0 0.0 0 0.0 0 0.0 -0.07210224866867065 0.3025968074798584 0.6355704069137573 -0.08188115805387497 0.842799186706543 0.5319375991821289 0.5377382636070251 0.12118156999349594 1 0.9896897077560425 0 0.0 0 0.0 0 0.0 -0.1529483199119568 0.3224823474884033 0.616545557975769 0.10449537634849548 -0.09079256653785706 0.9903561472892761 0.648408830165863 0.08469385653734207 1 0.9842054843902588 0 0.0 0 0.0 0 0.0 -0.1047014594078064 0.34171581268310547 0.6355704069137573 0.5681020617485046 0.5726493000984192 0.5910214781761169 0.5776293873786926 0.06218792498111725 1 0.9845274090766907 0 0.0 0 0.0 0 0.0 -0.13313615322113037 0.3669123649597168 0.6355704069137573 0.44904935359954834 0.7006744742393494 0.5543687343597412 0.613527774810791 0.02318226918578148 1 0.983238697052002 0 0.0 0 0.0 0 0.0 -0.06865745782852173 0.10929454118013382 0.7345117330551147 -0.5191808938980103 -0.1431928426027298 0.8425549864768982 0.5454435348510742 0.3798229694366455 1 0.9907939434051514 0 0.0 0 0.0 0 0.0 -0.0705878734588623 0.05552078038454056 0.6960290670394897 -0.6313669085502625 -0.7171849608421326 0.2948698401451111 0.5592003464698792 0.4590558409690857 1 0.9819313287734985 0 0.0 0 0.0 0 0.0 0.0 0.042672283947467804 0.7475627660751343 0.0 -0.7097384333610535 0.7044282555580139 0.4579574763774872 0.4805571734905243 1 0.9884468913078308 0 0.0 0 0.0 0 0.0 0.0 0.025754906237125397 0.7083276510238647 0.0 -0.9591051936149597 0.28293710947036743 0.37136271595954895 0.828621506690979 1 0.9845536351203918 0 0.0 0 0.0 0 0.0 0.0 0.042672283947467804 0.7475627660751343 0.0 -0.7097384333610535 0.7044282555580139 0.3724357783794403 0.88450688123703 1 0.9884468913078308 0 0.0 0 0.0 0 0.0 -0.0705878734588623 0.05552078038454056 0.6960290670394897 -0.6313669085502625 -0.7171849608421326 0.2948698401451111 0.2781895399093628 0.8110224008560181 1 0.9819313287734985 0 0.0 0 0.0 0 0.0 -0.0705878734588623 0.05552078038454056 0.6960290670394897 -0.6313669085502625 -0.7171849608421326 0.2948698401451111 0.7946124076843262 0.7522226572036743 1 0.9819313287734985 0 0.0 0 0.0 0 0.0 -0.0899050235748291 0.08831120282411575 0.6256042718887329 -0.7000335454940796 -0.713614284992218 0.025116734206676483 0.6875460743904114 0.7333278059959412 1 0.9682220816612244 0 0.0 0 0.0 0 0.0 -0.059469640254974365 0.0555688813328743 0.6115850210189819 -0.7055574059486389 -0.7052217125892639 0.06924650073051453 0.7010108828544617 0.6815871596336365 1 0.9599950313568115 0 0.0 0 0.0 0 0.0 -0.050073862075805664 0.02092299610376358 0.5243707895278931 -0.6866664886474609 -0.40858179330825806 0.6012146472930908 0.3176169991493225 0.9254664182662964 1 0.8446325063705444 4 0.10059089958667755 0 0.01927739754319191 0 0.0 -0.029034316539764404 0.02282658964395523 0.5975655317306519 -0.5346843004226685 -0.8348338007926941 0.13074129819869995 0.3254745602607727 0.8884339332580566 1 0.9265840649604797 4 0.026504922658205032 0 0.0 0 0.0 -0.059469640254974365 0.0555688813328743 0.6115850210189819 -0.7055574059486389 -0.7052217125892639 0.06924650073051453 0.3451562821865082 0.8853135108947754 1 0.9599950313568115 0 0.0 0 0.0 0 0.0 -0.0899050235748291 0.08831120282411575 0.6256042718887329 -0.7000335454940796 -0.713614284992218 0.025116734206676483 0.924144446849823 0.8115005493164062 1 0.9682220816612244 0 0.0 0 0.0 0 0.0 -0.1328907608985901 0.08454591780900955 0.4755467176437378 -0.9486068487167358 -0.2300790399312973 0.21716971695423126 0.924144446849823 0.8932643532752991 1 0.7616611123085022 0 0.17892086505889893 4 0.055223498493433 0 0.0 -0.09416019916534424 0.07008225470781326 0.5274871587753296 -0.6548966765403748 -0.6562089920043945 0.3748283386230469 0.9130188822746277 0.861991822719574 1 0.8562964797019958 0 0.09284330904483795 4 0.036915142089128494 0 0.0 -0.1687365174293518 0.1454685926437378 0.49789369106292725 -0.982451856136322 -0.15335550904273987 -0.10599078238010406 0.07277017086744308 0.5824607610702515 1 0.8802972435951233 0 0.09416398406028748 0 0.0 0 0.0 -0.1328907608985901 0.08454591780900955 0.4755467176437378 -0.9486068487167358 -0.2300790399312973 0.21716971695423126 0.10511094331741333 0.5692154169082642 1 0.7616611123085022 0 0.17892086505889893 4 0.055223498493433 0 0.0 -0.0899050235748291 0.08831120282411575 0.6256042718887329 -0.7000335454940796 -0.713614284992218 0.025116734206676483 0.1095123291015625 0.6479935050010681 1 0.9682220816612244 0 0.0 0 0.0 0 0.0 -0.15143811702728271 0.2254852056503296 0.5341702699661255 -0.9232154488563538 0.25720998644828796 -0.2854396104812622 0.03369267284870148 0.6037472486495972 1 0.9440637826919556 0 0.04249156638979912 0 0.0 0 0.0 -0.1687365174293518 0.1454685926437378 0.49789369106292725 -0.982451856136322 -0.15335550904273987 -0.10599078238010406 0.07277017086744308 0.5824607610702515 1 0.8802972435951233 0 0.09416398406028748 0 0.0 0 0.0 -0.15605974197387695 0.14025557041168213 0.6220062971115112 -0.8759422302246094 -0.46403393149375916 0.13183996081352234 0.0795331671833992 0.6472899913787842 1 0.9690240025520325 0 0.0 0 0.0 0 0.0 -0.050073862075805664 0.02092299610376358 0.5243707895278931 -0.6866664886474609 -0.40858179330825806 0.6012146472930908 0.3176169991493225 0.9254664182662964 1 0.8446325063705444 4 0.10059089958667755 0 0.01927739754319191 0 0.0 0.0 -0.059041060507297516 0.5594795942306519 0.0 -0.37794122099876404 0.9258095026016235 0.2781895399093628 0.898551344871521 1 0.7317149043083191 6 0.12379448860883713 4 0.12379419058561325 0 0.0 0.0 0.00883752852678299 0.5868633985519409 0.0 -0.9138767719268799 0.4059267044067383 0.3157893419265747 0.8918732404708862 1 0.9038245677947998 6 0.03429456427693367 4 0.03429247811436653 0 0.0 0.0 -0.059041060507297516 0.5594795942306519 0.0 -0.37794122099876404 0.9258095026016235 0.003714407328516245 0.717420756816864 1 0.7317149043083191 6 0.12379448860883713 4 0.12379419058561325 0 0.0 -0.050073862075805664 0.02092299610376358 0.5243707895278931 -0.6866664886474609 -0.40858179330825806 0.6012146472930908 0.0349784754216671 0.6804375052452087 1 0.8446325063705444 4 0.10059089958667755 0 0.01927739754319191 0 0.0 -0.15183615684509277 -0.0799783393740654 0.4494694471359253 -0.8179571032524109 -0.059785760939121246 0.5721305012702942 0.08381302654743195 0.7420639395713806 4 0.8048247694969177 0 0.08847372978925705 1 0.08450014889240265 0 0.0 -0.15036439895629883 -0.08714862912893295 0.3016083240509033 -0.9604480266571045 -0.09698782116174698 -0.2609332501888275 0.18725724518299103 0.4733530879020691 4 0.7862779498100281 0 0.17627523839473724 0 0.0 0 0.0 -0.17356276512145996 -0.18332982063293457 0.28318774700164795 -0.6146122813224792 0.07834101468324661 -0.7849055528640747 0.23481203615665436 0.4609302878379822 4 0.9596999883651733 0 0.01140328124165535 0 0.0 0 0.0 -0.17540639638900757 -0.17460304498672485 0.430961012840271 -0.8131046295166016 0.054322946816682816 0.5795159935951233 0.23437808454036713 0.5384660959243774 4 0.960517406463623 0 0.0 0 0.0 0 0.0 -0.0706138014793396 -0.22762751579284668 0.3014519214630127 0.5107883214950562 -0.33680227398872375 -0.790978729724884 0.14921531081199646 0.7203041911125183 4 0.8573116064071655 6 0.11295726150274277 0 0.004347577691078186 0 0.0 -0.08690553903579712 -0.3065640926361084 0.3270174264907837 0.7335429191589355 -0.28986480832099915 -0.6147038340568542 0.1508081704378128 0.761959433555603 4 0.9789289832115173 0 0.0 0 0.0 0 0.0 -0.17616277933120728 -0.29728245735168457 0.31193840503692627 -0.6749778985977173 -0.2538224458694458 -0.6927701830863953 0.10438784956932068 0.7673202157020569 4 0.9925202131271362 0 0.0 0 0.0 0 0.0 -0.15183615684509277 -0.0799783393740654 0.4494694471359253 -0.8179571032524109 -0.059785760939121246 0.5721305012702942 0.08381302654743195 0.7420639395713806 4 0.8048247694969177 0 0.08847372978925705 1 0.08450014889240265 0 0.0 -0.17540639638900757 -0.17460304498672485 0.430961012840271 -0.8131046295166016 0.054322946816682816 0.5795159935951233 0.09115571528673172 0.7933496832847595 4 0.960517406463623 0 0.0 0 0.0 0 0.0 -0.07245743274688721 -0.2189006805419922 0.4492250680923462 0.3258461356163025 -0.4115115702152252 0.8511307239532471 0.03546648845076561 0.8098580241203308 4 0.8791981935501099 6 0.09424682706594467 0 0.0 0 0.0 0.0 -0.196242094039917 0.3226771354675293 0.0 -0.9550157189369202 -0.29651784896850586 0.6543000340461731 0.6595564484596252 6 0.4506283402442932 4 0.4506283402442932 0 0.09200550615787506 0 0.0 0.0 -0.17929625511169434 0.45751893520355225 0.0 -0.6968291401863098 0.7172154784202576 0.6530190110206604 0.5886937379837036 6 0.45073360204696655 4 0.45073357224464417 1 0.08223999291658401 0 0.0 -0.07245743274688721 -0.2189006805419922 0.4492250680923462 0.3258461356163025 -0.4115115702152252 0.8511307239532471 0.6920541524887085 0.5932608246803284 4 0.8791981935501099 6 0.09424682706594467 0 0.0 0 0.0 -0.15036439895629883 -0.08714862912893295 0.3016083240509033 -0.9604480266571045 -0.09698782116174698 -0.2609332501888275 0.0938851460814476 0.6571521162986755 4 0.7862779498100281 0 0.17627523839473724 0 0.0 0 0.0 0.0 -0.196242094039917 0.3226771354675293 0.0 -0.9550157189369202 -0.29651784896850586 0.18211792409420013 0.6960455179214478 6 0.4506283402442932 4 0.4506283402442932 0 0.09200550615787506 0 0.0 -0.0706138014793396 -0.22762751579284668 0.3014519214630127 0.5107883214950562 -0.33680227398872375 -0.790978729724884 0.14921531081199646 0.7203041911125183 4 0.8573116064071655 6 0.11295726150274277 0 0.004347577691078186 0 0.0 -0.08690553903579712 -0.3065640926361084 0.3270174264907837 0.7335429191589355 -0.28986480832099915 -0.6147038340568542 0.1508081704378128 0.761959433555603 4 0.9789289832115173 0 0.0 0 0.0 0 0.0 -0.08881819248199463 -0.3583719730377197 0.34317684173583984 0.791894257068634 -0.15695668756961823 -0.5901058912277222 0.15622735023498535 0.7883478999137878 4 0.9974430799484253 0 0.0 0 0.0 0 0.0 -0.16209262609481812 -0.36195850372314453 0.33104169368743896 -0.6149784922599792 -0.26581621170043945 -0.7423627376556396 0.11935535073280334 0.798479437828064 4 0.9988442659378052 0 0.0 0 0.0 0 0.0 -0.17540639638900757 -0.17460304498672485 0.430961012840271 -0.8131046295166016 0.054322946816682816 0.5795159935951233 0.23437808454036713 0.5384660959243774 4 0.960517406463623 0 0.0 0 0.0 0 0.0 -0.17356276512145996 -0.18332982063293457 0.28318774700164795 -0.6146122813224792 0.07834101468324661 -0.7849055528640747 0.23481203615665436 0.4609302878379822 4 0.9596999883651733 0 0.01140328124165535 0 0.0 0 0.0 -0.17616277933120728 -0.29728245735168457 0.31193840503692627 -0.6749778985977173 -0.2538224458694458 -0.6927701830863953 0.29380425810813904 0.47277066111564636 4 0.9925202131271362 0 0.0 0 0.0 0 0.0 -0.07245743274688721 -0.2189006805419922 0.4492250680923462 0.3258461356163025 -0.4115115702152252 0.8511307239532471 0.03546648845076561 0.8098580241203308 4 0.8791981935501099 6 0.09424682706594467 0 0.0 0 0.0 -0.17540639638900757 -0.17460304498672485 0.430961012840271 -0.8131046295166016 0.054322946816682816 0.5795159935951233 0.09115571528673172 0.7933496832847595 4 0.960517406463623 0 0.0 0 0.0 0 0.0 -0.17964047193527222 -0.285830020904541 0.4299675226211548 -0.7866451144218445 -0.07501449435949326 0.6128116846084595 0.08709609508514404 0.8513107895851135 4 0.9926502108573914 0 0.0 0 0.0 0 0.0 -0.07245743274688721 -0.2189006805419922 0.4492250680923462 0.3258461356163025 -0.4115115702152252 0.8511307239532471 0.6195079684257507 0.9027084112167358 4 0.8791981935501099 6 0.09424682706594467 0 0.0 0 0.0 -0.09038317203521729 -0.29511165618896484 0.4450465440750122 0.5827814340591431 -0.14893032610416412 0.7988525032997131 0.5792155265808105 0.8983412981033325 4 0.9791664481163025 0 0.0 0 0.0 0 0.0 -0.08690553903579712 -0.3065640926361084 0.3270174264907837 0.7335429191589355 -0.28986480832099915 -0.6147038340568542 0.5769522190093994 0.8373445272445679 4 0.9789289832115173 0 0.0 0 0.0 0 0.0 -0.16614562273025513 -0.35099244117736816 0.42727792263031006 -0.7634815573692322 -0.10623493045568466 0.6369823217391968 0.07662999629974365 0.8845169544219971 4 0.9988507628440857 0 0.0 0 0.0 0 0.0 -0.1552836298942566 -0.5217366218566895 0.43705475330352783 -0.7843867540359497 0.10419019311666489 0.6114078164100647 0.06114814803004265 0.9719817638397217 4 0.999962329864502 0 0.0 0 0.0 0 0.0 -0.09503942728042603 -0.5187876224517822 0.4470318555831909 0.6328318119049072 0.1662037968635559 0.7562181353569031 0.030207481235265732 0.966705858707428 4 0.9998917579650879 0 0.0 0 0.0 0 0.0 -0.17964047193527222 -0.285830020904541 0.4299675226211548 -0.7866451144218445 -0.07501449435949326 0.6128116846084595 0.2910638153553009 0.5348170399665833 4 0.9926502108573914 0 0.0 0 0.0 0 0.0 -0.17616277933120728 -0.29728245735168457 0.31193840503692627 -0.6749778985977173 -0.2538224458694458 -0.6927701830863953 0.29380425810813904 0.47277066111564636 4 0.9925202131271362 0 0.0 0 0.0 0 0.0 -0.16209262609481812 -0.36195850372314453 0.33104169368743896 -0.6149784922599792 -0.26581621170043945 -0.7423627376556396 0.3281383216381073 0.48101234436035156 4 0.9988442659378052 0 0.0 0 0.0 0 0.0 -0.09038317203521729 -0.29511165618896484 0.4450465440750122 0.5827814340591431 -0.14893032610416412 0.7988525032997131 0.04047681763768196 0.8505580425262451 4 0.9791664481163025 0 0.0 0 0.0 0 0.0 -0.17964047193527222 -0.285830020904541 0.4299675226211548 -0.7866451144218445 -0.07501449435949326 0.6128116846084595 0.08709609508514404 0.8513107895851135 4 0.9926502108573914 0 0.0 0 0.0 0 0.0 -0.16614562273025513 -0.35099244117736816 0.42727792263031006 -0.7634815573692322 -0.10623493045568466 0.6369823217391968 0.07662999629974365 0.8845169544219971 4 0.9988507628440857 0 0.0 0 0.0 0 0.0 -0.08690553903579712 -0.3065640926361084 0.3270174264907837 0.7335429191589355 -0.28986480832099915 -0.6147038340568542 0.5769522190093994 0.8373445272445679 4 0.9789289832115173 0 0.0 0 0.0 0 0.0 -0.09038317203521729 -0.29511165618896484 0.4450465440750122 0.5827814340591431 -0.14893032610416412 0.7988525032997131 0.5792155265808105 0.8983412981033325 4 0.9791664481163025 0 0.0 0 0.0 0 0.0 -0.09287118911743164 -0.34740591049194336 0.4394129514694214 0.6446424722671509 -0.04431287571787834 0.7631763815879822 0.5520168542861938 0.893970251083374 4 0.9969676733016968 0 0.0 0 0.0 0 0.0 -0.09503942728042603 -0.5187876224517822 0.4470318555831909 0.6328318119049072 0.1662037968635559 0.7562181353569031 0.4623115360736847 0.8930864930152893 4 0.9998917579650879 0 0.0 0 0.0 0 0.0 -0.08934891223907471 -0.5597443580627441 0.4588078260421753 0.8483535051345825 0.28254035115242004 0.44770652055740356 0.44080308079719543 0.8980250358581543 4 0.9999756813049316 0 0.0 0 0.0 0 0.0 -0.08549678325653076 -0.570166826248169 0.3673415184020996 0.7073580026626587 -0.443037211894989 -0.5507370233535767 0.4382849633693695 0.8507182598114014 4 0.9999839663505554 0 0.0 0 0.0 0 0.0 -0.08881819248199463 -0.3583719730377197 0.34317684173583984 0.791894257068634 -0.15695668756961823 -0.5901058912277222 0.5493676066398621 0.8441964983940125 4 0.9974430799484253 0 0.0 0 0.0 0 0.0 -0.09287118911743164 -0.34740591049194336 0.4394129514694214 0.6446424722671509 -0.04431287571787834 0.7631763815879822 0.5520168542861938 0.893970251083374 4 0.9969676733016968 0 0.0 0 0.0 0 0.0 -0.09503942728042603 -0.5187876224517822 0.4470318555831909 0.6328318119049072 0.1662037968635559 0.7562181353569031 0.4623115360736847 0.8930864930152893 4 0.9998917579650879 0 0.0 0 0.0 0 0.0 -0.16209262609481812 -0.36195850372314453 0.33104169368743896 -0.6149784922599792 -0.26581621170043945 -0.7423627376556396 0.11935535073280334 0.798479437828064 4 0.9988442659378052 0 0.0 0 0.0 0 0.0 -0.08881819248199463 -0.3583719730377197 0.34317684173583984 0.791894257068634 -0.15695668756961823 -0.5901058912277222 0.15622735023498535 0.7883478999137878 4 0.9974430799484253 0 0.0 0 0.0 0 0.0 -0.09170717000961304 -0.5278036594390869 0.36790919303894043 0.7768791913986206 0.011474959552288055 -0.6295052766799927 0.17439746856689453 0.8748677968978882 4 0.9999263882637024 0 0.0 0 0.0 0 0.0 -0.16209262609481812 -0.36195850372314453 0.33104169368743896 -0.6149784922599792 -0.26581621170043945 -0.7423627376556396 0.3281383216381073 0.48101234436035156 4 0.9988442659378052 0 0.0 0 0.0 0 0.0 -0.15195131301879883 -0.530752420425415 0.3579319715499878 -0.634815514087677 -0.03268532454967499 -0.7719351649284363 0.41578006744384766 0.49039819836616516 4 0.9999616742134094 0 0.0 0 0.0 0 0.0 -0.1552836298942566 -0.5217366218566895 0.43705475330352783 -0.7843867540359497 0.10419019311666489 0.6114078164100647 0.4132080078125 0.5320252776145935 4 0.999962329864502 0 0.0 0 0.0 0 0.0 -0.15899169445037842 -0.5631530284881592 0.4472743272781372 -0.9405804872512817 -0.06775109469890594 0.3327127993106842 0.398474782705307 0.9319923520088196 4 0.9999915361404419 0 0.0 0 0.0 0 0.0 -0.1551395058631897 -0.573575496673584 0.3558077812194824 -0.5728934407234192 -0.44907987117767334 -0.6855983138084412 0.398474782705307 0.8839065432548523 4 0.9999913573265076 0 0.0 0 0.0 0 0.0 -0.08549678325653076 -0.570166826248169 0.3673415184020996 0.7073580026626587 -0.443037211894989 -0.5507370233535767 0.43451640009880066 0.8887473344802856 4 0.9999839663505554 0 0.0 0 0.0 0 0.0 -0.15195131301879883 -0.530752420425415 0.3579319715499878 -0.634815514087677 -0.03268532454967499 -0.7719351649284363 0.1440824270248413 0.883197546005249 4 0.9999616742134094 0 0.0 0 0.0 0 0.0 -0.09170717000961304 -0.5278036594390869 0.36790919303894043 0.7768791913986206 0.011474959552288055 -0.6295052766799927 0.17439746856689453 0.8748677968978882 4 0.9999263882637024 0 0.0 0 0.0 0 0.0 -0.08549678325653076 -0.570166826248169 0.3673415184020996 0.7073580026626587 -0.443037211894989 -0.5507370233535767 0.18211792409420013 0.8958807587623596 4 0.9999839663505554 0 0.0 0 0.0 0 0.0 -0.15195131301879883 -0.530752420425415 0.3579319715499878 -0.634815514087677 -0.03268532454967499 -0.7719351649284363 0.41578006744384766 0.49039819836616516 4 0.9999616742134094 0 0.0 0 0.0 0 0.0 -0.1551395058631897 -0.573575496673584 0.3558077812194824 -0.5728934407234192 -0.44907987117767334 -0.6855983138084412 0.43747836351394653 0.48807579278945923 4 0.9999913573265076 0 0.0 0 0.0 0 0.0 -0.15899169445037842 -0.5631530284881592 0.4472743272781372 -0.9405804872512817 -0.06775109469890594 0.3327127993106842 0.4345051050186157 0.5361970067024231 4 0.9999915361404419 0 0.0 0 0.0 0 0.0 -0.09503942728042603 -0.5187876224517822 0.4470318555831909 0.6328318119049072 0.1662037968635559 0.7562181353569031 0.030207481235265732 0.966705858707428 4 0.9998917579650879 0 0.0 0 0.0 0 0.0 -0.1552836298942566 -0.5217366218566895 0.43705475330352783 -0.7843867540359497 0.10419019311666489 0.6114078164100647 0.06114814803004265 0.9719817638397217 4 0.999962329864502 0 0.0 0 0.0 0 0.0 -0.15899169445037842 -0.5631530284881592 0.4472743272781372 -0.9405804872512817 -0.06775109469890594 0.3327127993106842 0.060366492718458176 0.9931369423866272 4 0.9999915361404419 0 0.0 0 0.0 0 0.0 -0.08934891223907471 -0.5597443580627441 0.4588078260421753 0.8483535051345825 0.28254035115242004 0.44770652055740356 0.23897626996040344 0.9261899590492249 4 0.9999756813049316 0 0.0 0 0.0 0 0.0 -0.15899169445037842 -0.5631530284881592 0.4472743272781372 -0.9405804872512817 -0.06775109469890594 0.3327127993106842 0.23699119687080383 0.8894676566123962 4 0.9999915361404419 0 0.0 0 0.0 0 0.0 -0.16460078954696655 -0.5697596073150635 0.48491013050079346 -0.7637562155723572 0.4125797152519226 0.49638354778289795 0.2568512558937073 0.8885793089866638 4 0.9999933242797852 0 0.0 0 0.0 0 0.0 -0.07761454582214355 -0.5762221813201904 0.4922894239425659 0.7108676433563232 0.4380016326904297 0.5502487421035767 0.7915221452713013 0.8456106185913086 4 0.9999874234199524 0 0.0 0 0.0 0 0.0 -0.16460078954696655 -0.5697596073150635 0.48491013050079346 -0.7637562155723572 0.4125797152519226 0.49638354778289795 0.7915221452713013 0.8914648294448853 4 0.9999933242797852 0 0.0 0 0.0 0 0.0 -0.1480986475944519 -0.6183133125305176 0.4906195402145386 -0.5136570334434509 -0.6324961185455322 0.5796990990638733 0.7675260305404663 0.8808123469352722 4 0.9999954104423523 0 0.0 0 0.0 0 0.0 -0.1480986475944519 -0.6183133125305176 0.4906195402145386 -0.5136570334434509 -0.6324961185455322 0.5796990990638733 0.6844348311424255 0.6808247566223145 4 0.9999954104423523 0 0.0 0 0.0 0 0.0 -0.1482757329940796 -0.6178312301635742 0.4188467264175415 -0.5838801264762878 -0.8061464428901672 -0.095767080783844 0.683937668800354 0.7183980941772461 4 0.9999983906745911 0 0.0 0 0.0 0 0.0 -0.08802717924118042 -0.6150498390197754 0.43218982219696045 0.69466233253479 -0.713675320148468 -0.08999908715486526 0.6530190110206604 0.7109692692756653 4 0.9999951124191284 0 0.0 0 0.0 0 0.0 -0.1482757329940796 -0.6178312301635742 0.4188467264175415 -0.5838801264762878 -0.8061464428901672 -0.095767080783844 0.683937668800354 0.7183980941772461 4 0.9999983906745911 0 0.0 0 0.0 0 0.0 -0.15127533674240112 -0.6052298545837402 0.36068880558013916 -0.47083956003189087 -0.5862605571746826 -0.6591998338699341 0.6844348311424255 0.7486674189567566 4 0.9999959468841553 0 0.0 0 0.0 0 0.0 -0.09195363521575928 -0.602745532989502 0.37857210636138916 0.5757927298545837 -0.6383251547813416 -0.5108493566513062 0.654041051864624 0.7388721704483032 4 0.9999947547912598 0 0.0 0 0.0 0 0.0 -0.09195363521575928 -0.602745532989502 0.37857210636138916 0.5757927298545837 -0.6383251547813416 -0.5108493566513062 0.3809150457382202 0.9164982438087463 4 0.9999947547912598 0 0.0 0 0.0 0 0.0 -0.15127533674240112 -0.6052298545837402 0.36068880558013916 -0.47083956003189087 -0.5862605571746826 -0.6591998338699341 0.38106560707092285 0.885166347026825 4 0.9999959468841553 0 0.0 0 0.0 0 0.0 -0.1551395058631897 -0.573575496673584 0.3558077812194824 -0.5728934407234192 -0.44907987117767334 -0.6855983138084412 0.39766812324523926 0.8839065432548523 4 0.9999913573265076 0 0.0 0 0.0 0 0.0 -0.1482757329940796 -0.6178312301635742 0.4188467264175415 -0.5838801264762878 -0.8061464428901672 -0.095767080783844 0.9334527254104614 0.389056921005249 4 0.9999983906745911 0 0.0 0 0.0 0 0.0 -0.15899169445037842 -0.5631530284881592 0.4472743272781372 -0.9405804872512817 -0.06775109469890594 0.3327127993106842 0.9047964811325073 0.4037174880504608 4 0.9999915361404419 0 0.0 0 0.0 0 0.0 -0.1551395058631897 -0.573575496673584 0.3558077812194824 -0.5728934407234192 -0.44907987117767334 -0.6855983138084412 0.91065514087677 0.3558618128299713 4 0.9999913573265076 0 0.0 0 0.0 0 0.0 -0.15899169445037842 -0.5631530284881592 0.4472743272781372 -0.9405804872512817 -0.06775109469890594 0.3327127993106842 0.9047964811325073 0.4037174880504608 4 0.9999915361404419 0 0.0 0 0.0 0 0.0 -0.1482757329940796 -0.6178312301635742 0.4188467264175415 -0.5838801264762878 -0.8061464428901672 -0.095767080783844 0.9334527254104614 0.389056921005249 4 0.9999983906745911 0 0.0 0 0.0 0 0.0 -0.1480986475944519 -0.6183133125305176 0.4906195402145386 -0.5136570334434509 -0.6324961185455322 0.5796990990638733 0.9334527254104614 0.42665594816207886 4 0.9999954104423523 0 0.0 0 0.0 0 0.0 -0.07761454582214355 -0.5762221813201904 0.4922894239425659 0.7108676433563232 0.4380016326904297 0.5502487421035767 0.9174387454986572 0.7464988231658936 4 0.9999874234199524 0 0.0 0 0.0 0 0.0 -0.0876038670539856 -0.6115889549255371 0.5072916746139526 0.4042786955833435 -0.41471603512763977 0.8152104020118713 0.9366329908370972 0.7395947575569153 4 0.9999920725822449 0 0.0 0 0.0 0 0.0 -0.08802717924118042 -0.6150498390197754 0.43218982219696045 0.69466233253479 -0.713675320148468 -0.08999908715486526 0.9366330504417419 0.778315544128418 4 0.9999951124191284 0 0.0 0 0.0 0 0.0 -0.08802717924118042 -0.6150498390197754 0.43218982219696045 0.69466233253479 -0.713675320148468 -0.08999908715486526 0.9366330504417419 0.778315544128418 4 0.9999951124191284 0 0.0 0 0.0 0 0.0 -0.09195363521575928 -0.602745532989502 0.37857210636138916 0.5757927298545837 -0.6383251547813416 -0.5108493566513062 0.9290568828582764 0.8056539297103882 4 0.9999947547912598 0 0.0 0 0.0 0 0.0 -0.08549678325653076 -0.570166826248169 0.3673415184020996 0.7073580026626587 -0.443037211894989 -0.5507370233535767 0.9115410447120667 0.8106938600540161 4 0.9999839663505554 0 0.0 0 0.0 0 0.0 -0.18308591842651367 -0.1715635061264038 -0.30947959423065186 -0.6252326965332031 -0.7065645456314087 0.33136996626853943 0.21177582442760468 0.15119899809360504 3 0.7757202386856079 0 0.20105865597724915 0 0.0 0 0.0 -0.20714151859283447 -0.0656772330403328 -0.5096536874771118 -0.7676015496253967 0.22464674711227417 -0.600207507610321 0.15080034732818604 0.04935154691338539 3 0.8890505433082581 0 0.06969472020864487 2 0.015910718590021133 0 0.0 -0.20441192388534546 -0.18915605545043945 -0.555695652961731 -0.7800835967063904 0.13812677562236786 -0.6102175712585449 0.212846040725708 0.021823931485414505 3 0.9740641117095947 0 0.0 0 0.0 0 0.0 -0.09343808889389038 -0.32038211822509766 -0.4421921968460083 0.7430646419525146 -0.36826685070991516 0.5587328672409058 0.8042619824409485 0.8200523853302002 3 0.9944356083869934 0 0.0 0 0.0 0 0.0 -0.18601888418197632 -0.3018697500228882 -0.4252368211746216 -0.6975615620613098 -0.4051026999950409 0.5909604430198669 0.8518539071083069 0.8132774829864502 3 0.986090362071991 0 0.0 0 0.0 0 0.0 -0.1732814908027649 -0.3921675682067871 -0.45750391483306885 -0.6674093008041382 -0.2617572546005249 0.6971343159675598 0.8426058888435364 0.8613379001617432 3 0.9991129636764526 0 0.0 0 0.0 0 0.0 -0.09343808889389038 -0.32038211822509766 -0.4421921968460083 0.7430646419525146 -0.36826685070991516 0.5587328672409058 0.8824628591537476 0.573641836643219 3 0.9944356083869934 0 0.0 0 0.0 0 0.0 -0.08439087867736816 -0.21313560009002686 -0.5862895250320435 0.5681020617485046 0.09179967641830444 -0.8178045153617859 0.7954190373420715 0.5414798259735107 3 0.964721143245697 0 0.0 0 0.0 0 0.0 -0.061641693115234375 -0.12674754858016968 -0.5490885972976685 0.599017322063446 0.0636310949921608 -0.7981811165809631 0.8007399439811707 0.49180278182029724 3 0.8647013306617737 0 0.07323107123374939 5 0.02173721417784691 2 0.0023119300603866577 0.0 -0.034700654447078705 -0.5120750665664673 0.0 -0.28131961822509766 -0.9595934748649597 0.804821252822876 0.43789535760879517 0 0.4035522937774658 5 0.21959787607192993 3 0.21959787607192993 2 0.1571648120880127 0.0 -0.13216137886047363 -0.2887181043624878 0.0 -0.9959410429000854 0.08993804454803467 0.9294113516807556 0.452831894159317 0 0.6482506990432739 5 0.17250163853168488 3 0.17250163853168488 0 0.0 -0.07139867544174194 -0.1890047788619995 -0.3518143892288208 0.5797906517982483 -0.7260048389434814 0.36979278922080994 0.9073172211647034 0.4934375584125519 3 0.7999973893165588 0 0.1541832536458969 5 0.02782197669148445 0 0.0 -0.18601888418197632 -0.3018697500228882 -0.4252368211746216 -0.6975615620613098 -0.4051026999950409 0.5909604430198669 0.8518539071083069 0.8132774829864502 3 0.986090362071991 0 0.0 0 0.0 0 0.0 -0.09343808889389038 -0.32038211822509766 -0.4421921968460083 0.7430646419525146 -0.36826685070991516 0.5587328672409058 0.8042619824409485 0.8200523853302002 3 0.9944356083869934 0 0.0 0 0.0 0 0.0 -0.07139867544174194 -0.1890047788619995 -0.3518143892288208 0.5797906517982483 -0.7260048389434814 0.36979278922080994 0.7954190373420715 0.7463236451148987 3 0.7999973893165588 0 0.1541832536458969 5 0.02782197669148445 0 0.0 -0.061641693115234375 -0.12674754858016968 -0.5490885972976685 0.599017322063446 0.0636310949921608 -0.7981811165809631 0.8298012614250183 0.2538372874259949 3 0.8647013306617737 0 0.07323107123374939 5 0.02173721417784691 2 0.0023119300603866577 -0.08439087867736816 -0.21313560009002686 -0.5862895250320435 0.5681020617485046 0.09179967641830444 -0.8178045153617859 0.8441900014877319 0.2085101306438446 3 0.964721143245697 0 0.0 0 0.0 0 0.0 -0.20441192388534546 -0.18915605545043945 -0.555695652961731 -0.7800835967063904 0.13812677562236786 -0.6102175712585449 0.9039897918701172 0.22283343970775604 3 0.9740641117095947 0 0.0 0 0.0 0 0.0 -0.050073862075805664 0.02092299610376358 0.5243707895278931 -0.6866664886474609 -0.40858179330825806 0.6012146472930908 0.0349784754216671 0.6804375052452087 1 0.8446325063705444 4 0.10059089958667755 0 0.01927739754319191 0 0.0 -0.09416019916534424 0.07008225470781326 0.5274871587753296 -0.6548966765403748 -0.6562089920043945 0.3748283386230469 0.060154158622026443 0.6571521162986755 1 0.8562964797019958 0 0.09284330904483795 4 0.036915142089128494 0 0.0 -0.15635263919830322 0.0019541755318641663 0.4368339776992798 -0.9516891837120056 0.06549271941184998 0.299966424703598 0.09115571528673172 0.7004624009132385 0 0.4180997312068939 4 0.3349326252937317 1 0.23640847206115723 0 0.0 -0.15635263919830322 0.0019541755318641663 0.4368339776992798 -0.9516891837120056 0.06549271941184998 0.299966424703598 0.1451314240694046 0.5465568900108337 0 0.4180997312068939 4 0.3349326252937317 1 0.23640847206115723 0 0.0 -0.09416019916534424 0.07008225470781326 0.5274871587753296 -0.6548966765403748 -0.6562089920043945 0.3748283386230469 0.11589144915342331 0.5961412787437439 1 0.8562964797019958 0 0.09284330904483795 4 0.036915142089128494 0 0.0 -0.1328907608985901 0.08454591780900955 0.4755467176437378 -0.9486068487167358 -0.2300790399312973 0.21716971695423126 0.10511094331741333 0.5692154169082642 1 0.7616611123085022 0 0.17892086505889893 4 0.055223498493433 0 0.0 0.0 -0.034700654447078705 -0.5120750665664673 0.0 -0.28131961822509766 -0.9595934748649597 0.7954190373420715 0.3016514182090759 0 0.4035522937774658 5 0.21959787607192993 3 0.21959787607192993 2 0.1571648120880127 -0.061641693115234375 -0.12674754858016968 -0.5490885972976685 0.599017322063446 0.0636310949921608 -0.7981811165809631 0.8298012614250183 0.2538372874259949 3 0.8647013306617737 0 0.07323107123374939 5 0.02173721417784691 2 0.0023119300603866577 -0.20714151859283447 -0.0656772330403328 -0.5096536874771118 -0.7676015496253967 0.22464674711227417 -0.600207507610321 0.9018306136131287 0.28798139095306396 3 0.8890505433082581 0 0.06969472020864487 2 0.015910718590021133 0 0.0 -0.20858150720596313 0.007689781486988068 -0.4805508852005005 -0.7801751494407654 -0.053529463708400726 -0.6232184767723083 0.11399266123771667 0.06662172824144363 3 0.6917824745178223 0 0.18764761090278625 2 0.10546613484621048 0 0.0 -0.20714151859283447 -0.0656772330403328 -0.5096536874771118 -0.7676015496253967 0.22464674711227417 -0.600207507610321 0.15080034732818604 0.04935154691338539 3 0.8890505433082581 0 0.06969472020864487 2 0.015910718590021133 0 0.0 -0.18308591842651367 -0.1715635061264038 -0.30947959423065186 -0.6252326965332031 -0.7065645456314087 0.33136996626853943 0.21177582442760468 0.15119899809360504 3 0.7757202386856079 0 0.20105865597724915 0 0.0 0 0.0 -0.24815957248210907 -0.0371197834610939 -0.2536252737045288 -0.9628284573554993 -0.26746422052383423 0.036957915872335434 0.14128771424293518 0.18390731513500214 0 0.7170878648757935 3 0.2454865425825119 2 0.007828813046216965 0 0.0 -0.18308591842651367 -0.1715635061264038 -0.30947959423065186 -0.6252326965332031 -0.7065645456314087 0.33136996626853943 0.21177582442760468 0.15119899809360504 3 0.7757202386856079 0 0.20105865597724915 0 0.0 0 0.0 -0.12958550453186035 -0.1315857172012329 -0.09456980228424072 -0.34760582447052 -0.9195837378501892 0.1829584687948227 0.19997769594192505 0.2649575471878052 0 0.9013321995735168 3 0.07171499729156494 0 0.0 0 0.0 -0.16476905345916748 -0.032182566821575165 0.1135796308517456 -0.9007843136787415 -0.41755425930023193 0.1192358136177063 0.15316157042980194 0.3764743208885193 0 0.9259852170944214 4 0.04309037700295448 0 0.0 0 0.0 -0.2347235083580017 0.006545670330524445 -0.1102060079574585 -0.9553208947181702 -0.24109622836112976 0.17084261775016785 0.12361200898885727 0.26020655035972595 0 0.9013984799385071 3 0.0706256553530693 0 0.0 0 0.0 -0.12958550453186035 -0.1315857172012329 -0.09456980228424072 -0.34760582447052 -0.9195837378501892 0.1829584687948227 0.19997769594192505 0.2649575471878052 0 0.9013321995735168 3 0.07171499729156494 0 0.0 0 0.0 -0.13016337156295776 -0.10303550213575363 0.1634429693222046 -0.7592394948005676 -0.6505325436592102 -0.01754814386367798 0.19253799319267273 0.40071889758110046 0 0.8383778929710388 4 0.12892886996269226 0 0.0 0 0.0 -0.15036439895629883 -0.08714862912893295 0.3016083240509033 -0.9604480266571045 -0.09698782116174698 -0.2609332501888275 0.18725724518299103 0.4733530879020691 4 0.7862779498100281 0 0.17627523839473724 0 0.0 0 0.0 -0.14634591341018677 -0.032207198441028595 0.28267955780029297 -0.9860835671424866 -0.16443373262882233 0.023529771715402603 0.15881086885929108 0.46500539779663086 0 0.6134584546089172 4 0.334782212972641 1 0.028665481135249138 0 0.0 -0.16675245761871338 0.013475604355335236 0.27252471446990967 -0.9878231287002563 -0.08340708911418915 0.13122959434986115 0.13413144648075104 0.46088677644729614 0 0.7682547569274902 4 0.16683459281921387 1 0.056936074048280716 0 0.0 -0.18591099977493286 0.027745135128498077 0.1363673210144043 -0.9799188375473022 -0.05694753676652908 0.1909848302602768 0.12207462638616562 0.3899834156036377 0 0.9314292669296265 4 0.028245750814676285 0 0.0 0 0.0 -0.16476905345916748 -0.032182566821575165 0.1135796308517456 -0.9007843136787415 -0.41755425930023193 0.1192358136177063 0.15316157042980194 0.3764743208885193 0 0.9259852170944214 4 0.04309037700295448 0 0.0 0 0.0 -0.2347235083580017 0.006545670330524445 -0.1102060079574585 -0.9553208947181702 -0.24109622836112976 0.17084261775016785 0.12361200898885727 0.26020655035972595 0 0.9013984799385071 3 0.0706256553530693 0 0.0 0 0.0 -0.16476905345916748 -0.032182566821575165 0.1135796308517456 -0.9007843136787415 -0.41755425930023193 0.1192358136177063 0.15316157042980194 0.3764743208885193 0 0.9259852170944214 4 0.04309037700295448 0 0.0 0 0.0 -0.18591099977493286 0.027745135128498077 0.1363673210144043 -0.9799188375473022 -0.05694753676652908 0.1909848302602768 0.12207462638616562 0.3899834156036377 0 0.9314292669296265 4 0.028245750814676285 0 0.0 0 0.0 -0.2347235083580017 0.006545670330524445 -0.1102060079574585 -0.9553208947181702 -0.24109622836112976 0.17084261775016785 0.12361200898885727 0.26020655035972595 0 0.9013984799385071 3 0.0706256553530693 0 0.0 0 0.0 -0.22698575258255005 0.09685314446687698 -0.09775805473327637 -0.9559617638587952 0.26496168971061707 0.126163512468338 0.07812663912773132 0.2692766785621643 0 0.9218431115150452 3 0.03574578836560249 2 0.0003750547766685486 0 0.0 -0.24470371007919312 0.06189621239900589 -0.2797147035598755 -0.9805597066879272 0.1901303082704544 -0.04824976250529289 0.09005673974752426 0.17304474115371704 0 0.7772277593612671 3 0.15139922499656677 2 0.0652080550789833 0 0.0 0.0 0.08928192406892776 -0.5540534257888794 0.0 -0.35929441452026367 -0.9331949949264526 0.796051561832428 0.36615949869155884 2 0.8365933895111084 0 0.07663940638303757 5 0.036726269870996475 3 0.036726269870996475 0.0 -0.034700654447078705 -0.5120750665664673 0.0 -0.28131961822509766 -0.9595934748649597 0.7954190373420715 0.3016514182090759 0 0.4035522937774658 5 0.21959787607192993 3 0.21959787607192993 2 0.1571648120880127 -0.20858150720596313 0.007689781486988068 -0.4805508852005005 -0.7801751494407654 -0.053529463708400726 -0.6232184767723083 0.9003711938858032 0.3267052471637726 3 0.6917824745178223 0 0.18764761090278625 2 0.10546613484621048 0 0.0 -0.20858150720596313 0.007689781486988068 -0.4805508852005005 -0.7801751494407654 -0.053529463708400726 -0.6232184767723083 0.11399266123771667 0.06662172824144363 3 0.6917824745178223 0 0.18764761090278625 2 0.10546613484621048 0 0.0 -0.24815957248210907 -0.0371197834610939 -0.2536252737045288 -0.9628284573554993 -0.26746422052383423 0.036957915872335434 0.14128771424293518 0.18390731513500214 0 0.7170878648757935 3 0.2454865425825119 2 0.007828813046216965 0 0.0 -0.24470371007919312 0.06189621239900589 -0.2797147035598755 -0.9805597066879272 0.1901303082704544 -0.04824976250529289 0.09005673974752426 0.17304474115371704 0 0.7772277593612671 3 0.15139922499656677 2 0.0652080550789833 0 0.0 -0.09570074081420898 0.19440031051635742 -0.5164247751235962 -0.49549850821495056 0.5802789330482483 -0.6462904810905457 0.8421570658683777 0.4227440059185028 2 0.8343983888626099 0 0.1073855310678482 3 0.05108572542667389 0 0.0 0.0 0.08928192406892776 -0.5540534257888794 0.0 -0.35929441452026367 -0.9331949949264526 0.796051561832428 0.36615949869155884 2 0.8365933895111084 0 0.07663940638303757 5 0.036726269870996475 3 0.036726269870996475 -0.216885507106781 0.10776758939027786 -0.49034416675567627 -0.7796563506126404 0.18768882751464844 -0.5973693132400513 0.9039897918701172 0.37911513447761536 0 0.38549932837486267 3 0.30454903841018677 2 0.30049633979797363 0 0.0 0.0 0.24354887008666992 -0.5526114702224731 0.0 0.9767143726348877 -0.2144230455160141 0.7908804416656494 0.4901359975337982 2 0.9730596542358398 0 0.0 0 0.0 0 0.0 0.0 0.2204439640045166 -0.6226273775100708 0.0 0.965636134147644 -0.2598040699958801 0.7880650162696838 0.52422696352005 2 1.0015981197357178 0 0.0 0 0.0 0 0.0 -0.03598451614379883 0.1886899471282959 -0.6095010042190552 -0.9367351531982422 0.18414868414402008 -0.29761651158332825 0.7668266892433167 0.5149851441383362 2 0.991046130657196 0 0.0 0 0.0 0 0.0 0.0 0.08928192406892776 -0.5540534257888794 0.0 -0.35929441452026367 -0.9331949949264526 0.3732423782348633 0.6631662249565125 2 0.8365933895111084 0 0.07663940638303757 5 0.036726269870996475 3 0.036726269870996475 -0.09570074081420898 0.19440031051635742 -0.5164247751235962 -0.49549850821495056 0.5802789330482483 -0.6462904810905457 0.43451640009880066 0.6571521162986755 2 0.8343983888626099 0 0.1073855310678482 3 0.05108572542667389 0 0.0 -0.03598451614379883 0.1886899471282959 -0.6095010042190552 -0.9367351531982422 0.18414868414402008 -0.29761651158332825 0.4186630845069885 0.7031288146972656 2 0.991046130657196 0 0.0 0 0.0 0 0.0 -0.03598451614379883 0.1886899471282959 -0.6095010042190552 -0.9367351531982422 0.18414868414402008 -0.29761651158332825 0.7668266892433167 0.5149851441383362 2 0.991046130657196 0 0.0 0 0.0 0 0.0 0.0 0.2204439640045166 -0.6226273775100708 0.0 0.965636134147644 -0.2598040699958801 0.7880650162696838 0.52422696352005 2 1.0015981197357178 0 0.0 0 0.0 0 0.0 0.0 0.20252740383148193 -0.7054659128189087 0.0 0.999908447265625 0.013458662666380405 0.785669207572937 0.5653976798057556 2 0.998930811882019 0 0.0 0 0.0 0 0.0 0.0 0.12543010711669922 -0.611486554145813 0.0 -0.9602038860321045 -0.2791833281517029 0.3850645124912262 0.6965480446815491 2 0.9726563692092896 0 0.0 0 0.0 0 0.0 -0.03598451614379883 0.1886899471282959 -0.6095010042190552 -0.9367351531982422 0.18414868414402008 -0.29761651158332825 0.4186630845069885 0.7031288146972656 2 0.991046130657196 0 0.0 0 0.0 0 0.0 -0.03391218185424805 0.16914141178131104 -0.7118293046951294 -0.9985961318016052 -0.03466902673244476 -0.0395825058221817 0.3975711762905121 0.7533164024353027 2 0.9985517859458923 0 0.0 0 0.0 0 0.0 -0.03391218185424805 0.16914141178131104 -0.7118293046951294 -0.9985961318016052 -0.03466902673244476 -0.0395825058221817 0.7651706337928772 0.5660513639450073 2 0.9985517859458923 0 0.0 0 0.0 0 0.0 0.0 0.20252740383148193 -0.7054659128189087 0.0 0.999908447265625 0.013458662666380405 0.785669207572937 0.5653976798057556 2 0.998930811882019 0 0.0 0 0.0 0 0.0 0.0 0.22866559028625488 -0.7980247735977173 0.0 0.8856776356697083 0.46427807211875916 0.7875749468803406 0.615498423576355 2 0.9999145865440369 0 0.0 0 0.0 0 0.0 0.0 0.12997519969940186 -0.7220932245254517 0.0 -0.9840693473815918 -0.17770928144454956 0.37523388862609863 0.7536645531654358 2 0.9981896281242371 0 0.0 0 0.0 0 0.0 -0.03391218185424805 0.16914141178131104 -0.7118293046951294 -0.9985961318016052 -0.03466902673244476 -0.0395825058221817 0.3975711762905121 0.7533164024353027 2 0.9985517859458923 0 0.0 0 0.0 0 0.0 -0.03391218185424805 0.20211052894592285 -0.8192368745803833 -0.9987182021141052 -0.04589983820915222 -0.020203253254294395 0.402330219745636 0.8119280338287354 2 0.9999237060546875 0 0.0 0 0.0 0 0.0 -0.03391218185424805 0.20211052894592285 -0.8192368745803833 -0.9987182021141052 -0.04589983820915222 -0.020203253254294395 0.7676439881324768 0.6244237422943115 2 0.9999237060546875 0 0.0 0 0.0 0 0.0 0.0 0.22866559028625488 -0.7980247735977173 0.0 0.8856776356697083 0.46427807211875916 0.7875749468803406 0.615498423576355 2 0.9999145865440369 0 0.0 0 0.0 0 0.0 0.0 0.30632472038269043 -0.888379693031311 0.0 0.7523728013038635 0.6587114930152893 0.7946124076843262 0.6690369248390198 2 0.9999912977218628 0 0.0 0 0.0 0 0.0 0.0 0.1722644567489624 -0.846596360206604 0.0 -0.8490249514579773 -0.5283058881759644 0.382790744304657 0.822054386138916 2 0.9999455809593201 0 0.0 0 0.0 0 0.0 -0.03391218185424805 0.20211052894592285 -0.8192368745803833 -0.9987182021141052 -0.04589983820915222 -0.020203253254294395 0.402330219745636 0.8119280338287354 2 0.9999237060546875 0 0.0 0 0.0 0 0.0 -0.03248608112335205 0.2871565818786621 -0.9138075113296509 -0.9984740614891052 -0.027558214962482452 -0.047822505235672 0.43451640009880066 0.8696845769882202 2 0.999992847442627 0 0.0 0 0.0 0 0.0 -0.09570074081420898 0.19440031051635742 -0.5164247751235962 -0.49549850821495056 0.5802789330482483 -0.6462904810905457 0.7379171252250671 0.46803349256515503 2 0.8343983888626099 0 0.1073855310678482 3 0.05108572542667389 0 0.0 -0.15887433290481567 0.21892106533050537 -0.44221174716949463 -0.5289468169212341 0.8012634515762329 -0.2795800566673279 0.7089879512786865 0.4325237274169922 2 0.6093363165855408 0 0.28971463441848755 3 0.09326215833425522 0 0.0 0.0 0.23639917373657227 -0.4245549440383911 0.0 0.9959410429000854 -0.08999908715486526 0.7911243438720703 0.4233974516391754 2 0.7914459109306335 0 0.1775953471660614 0 0.0 0 0.0 -0.15887433290481567 0.21892106533050537 -0.44221174716949463 -0.5289468169212341 0.8012634515762329 -0.2795800566673279 0.009432848542928696 0.0927925854921341 2 0.6093363165855408 0 0.28971463441848755 3 0.09326215833425522 0 0.0 -0.216885507106781 0.10776758939027786 -0.49034416675567627 -0.7796563506126404 0.18768882751464844 -0.5973693132400513 0.062087494879961014 0.06426440179347992 0 0.38549932837486267 3 0.30454903841018677 2 0.30049633979797363 0 0.0 -0.24470371007919312 0.06189621239900589 -0.2797147035598755 -0.9805597066879272 0.1901303082704544 -0.04824976250529289 0.09005673974752426 0.17304474115371704 0 0.7772277593612671 3 0.15139922499656677 2 0.0652080550789833 0 0.0 0.0 0.23639917373657227 -0.4245549440383911 0.0 0.9959410429000854 -0.08999908715486526 0.7911243438720703 0.4233974516391754 2 0.7914459109306335 0 0.1775953471660614 0 0.0 0 0.0 -0.15887433290481567 0.21892106533050537 -0.44221174716949463 -0.5289468169212341 0.8012634515762329 -0.2795800566673279 0.7089879512786865 0.4325237274169922 2 0.6093363165855408 0 0.28971463441848755 3 0.09326215833425522 0 0.0 -0.17098987102508545 0.22969770431518555 -0.25236809253692627 -0.573503851890564 0.8189031481742859 0.021027252078056335 0.7053508758544922 0.3356010913848877 0 0.8024826049804688 2 0.15540441870689392 3 0.022846873849630356 0 0.0 -0.17098987102508545 0.22969770431518555 -0.25236809253692627 -0.573503851890564 0.8189031481742859 0.021027252078056335 0.00861236173659563 0.1923501342535019 0 0.8024826049804688 2 0.15540441870689392 3 0.022846873849630356 0 0.0 -0.24470371007919312 0.06189621239900589 -0.2797147035598755 -0.9805597066879272 0.1901303082704544 -0.04824976250529289 0.09005673974752426 0.17304474115371704 0 0.7772277593612671 3 0.15139922499656677 2 0.0652080550789833 0 0.0 -0.22698575258255005 0.09685314446687698 -0.09775805473327637 -0.9559617638587952 0.26496168971061707 0.126163512468338 0.07812663912773132 0.2692766785621643 0 0.9218431115150452 3 0.03574578836560249 2 0.0003750547766685486 0 0.0 0.0 0.24447298049926758 -0.1661921739578247 0.0 0.9895016551017761 0.14435255527496338 0.7938501238822937 0.2907457947731018 0 0.8835389614105225 2 0.09514472633600235 0 0.0 0 0.0 -0.17098987102508545 0.22969770431518555 -0.25236809253692627 -0.573503851890564 0.8189031481742859 0.021027252078056335 0.7053508758544922 0.3356010913848877 0 0.8024826049804688 2 0.15540441870689392 3 0.022846873849630356 0 0.0 -0.17741501331329346 0.1839226484298706 -0.056742191314697266 -0.5986510515213013 0.765648365020752 0.23526719212532043 0.6990169882774353 0.23061582446098328 0 0.9394767880439758 2 0.021471891552209854 0 0.0 0 0.0 -0.16880565881729126 0.11794913560152054 0.11694061756134033 -0.7443464398384094 0.6213263273239136 0.24463637173175812 0.0762190967798233 0.3824160099029541 0 0.9508360624313354 0 0.0 0 0.0 0 0.0 -0.17741501331329346 0.1839226484298706 -0.056742191314697266 -0.5986510515213013 0.765648365020752 0.23526719212532043 0.03717894107103348 0.29337358474731445 0 0.9394767880439758 2 0.021471891552209854 0 0.0 0 0.0 -0.22698575258255005 0.09685314446687698 -0.09775805473327637 -0.9559617638587952 0.26496168971061707 0.126163512468338 0.07812663912773132 0.2692766785621643 0 0.9218431115150452 3 0.03574578836560249 2 0.0003750547766685486 0 0.0 0.0 0.18546009063720703 0.05253899097442627 0.0 0.9800409078598022 0.1987060159444809 0.7896201014518738 0.17259444296360016 0 0.9702994227409363 0 0.0 0 0.0 0 0.0 -0.17741501331329346 0.1839226484298706 -0.056742191314697266 -0.5986510515213013 0.765648365020752 0.23526719212532043 0.6990169882774353 0.23061582446098328 0 0.9394767880439758 2 0.021471891552209854 0 0.0 0 0.0 -0.16880565881729126 0.11794913560152054 0.11694061756134033 -0.7443464398384094 0.6213263273239136 0.24463637173175812 0.6981099843978882 0.13501593470573425 0 0.9508360624313354 0 0.0 0 0.0 0 0.0 -0.13336622714996338 0.11216402798891068 0.2601882219314575 -0.7886288166046143 0.6137882471084595 -0.03564561903476715 0.716507077217102 0.06020791083574295 0 0.842883288860321 1 0.11205136030912399 4 0.03046063892543316 0 0.0 0.0 0.1879560947418213 0.26575779914855957 0.0 0.9689321517944336 -0.2472609579563141 0.7914559245109558 0.06275101006031036 0 0.7974072098731995 1 0.18872691690921783 0 0.0 0 0.0 0.0 0.18546009063720703 0.1571263074874878 0.0 0.999481201171875 0.0316782146692276 0.7903990745544434 0.11860571801662445 0 0.9424790740013123 1 0.04657768830657005 0 0.0 0 0.0 -0.15036439895629883 -0.08714862912893295 0.3016083240509033 -0.9604480266571045 -0.09698782116174698 -0.2609332501888275 0.18725724518299103 0.4733530879020691 4 0.7862779498100281 0 0.17627523839473724 0 0.0 0 0.0 -0.15183615684509277 -0.0799783393740654 0.4494694471359253 -0.8179571032524109 -0.059785760939121246 0.5721305012702942 0.18764083087444305 0.5508929491043091 4 0.8048247694969177 0 0.08847372978925705 1 0.08450014889240265 0 0.0 -0.15635263919830322 0.0019541755318641663 0.4368339776992798 -0.9516891837120056 0.06549271941184998 0.299966424703598 0.1451314240694046 0.5465568900108337 0 0.4180997312068939 4 0.3349326252937317 1 0.23640847206115723 0 0.0 -0.14348971843719482 0.04227609187364578 0.4033273458480835 -0.9923093318939209 0.11435285210609436 0.047242652624845505 0.12420067191123962 0.5302112698554993 0 0.5547997355461121 1 0.27050960063934326 4 0.16870296001434326 0 0.0 -0.16675245761871338 0.013475604355335236 0.27252471446990967 -0.9878231287002563 -0.08340708911418915 0.13122959434986115 0.13413144648075104 0.46088677644729614 0 0.7682547569274902 4 0.16683459281921387 1 0.056936074048280716 0 0.0 -0.14634591341018677 -0.032207198441028595 0.28267955780029297 -0.9860835671424866 -0.16443373262882233 0.023529771715402603 0.15881086885929108 0.46500539779663086 0 0.6134584546089172 4 0.334782212972641 1 0.028665481135249138 0 0.0 -0.16675245761871338 0.013475604355335236 0.27252471446990967 -0.9878231287002563 -0.08340708911418915 0.13122959434986115 0.13413144648075104 0.46088677644729614 0 0.7682547569274902 4 0.16683459281921387 1 0.056936074048280716 0 0.0 -0.14348971843719482 0.04227609187364578 0.4033273458480835 -0.9923093318939209 0.11435285210609436 0.047242652624845505 0.12420067191123962 0.5302112698554993 0 0.5547997355461121 1 0.27050960063934326 4 0.16870296001434326 0 0.0 -0.14645665884017944 0.1097654178738594 0.37481164932250977 -0.9749442934989929 0.221472829580307 -0.019989624619483948 0.08871705830097198 0.5171707272529602 0 0.5417124032974243 1 0.386583149433136 4 0.06799639761447906 0 0.0 -0.18591099977493286 0.027745135128498077 0.1363673210144043 -0.9799188375473022 -0.05694753676652908 0.1909848302602768 0.12207462638616562 0.3899834156036377 0 0.9314292669296265 4 0.028245750814676285 0 0.0 0 0.0 -0.16675245761871338 0.013475604355335236 0.27252471446990967 -0.9878231287002563 -0.08340708911418915 0.13122959434986115 0.13413144648075104 0.46088677644729614 0 0.7682547569274902 4 0.16683459281921387 1 0.056936074048280716 0 0.0 -0.13336622714996338 0.11216402798891068 0.2601882219314575 -0.7886288166046143 0.6137882471084595 -0.03564561903476715 0.08494245260953903 0.4573333263397217 0 0.842883288860321 1 0.11205136030912399 4 0.03046063892543316 0 0.0 -0.1328907608985901 0.08454591780900955 0.4755467176437378 -0.9486068487167358 -0.2300790399312973 0.21716971695423126 0.10511094331741333 0.5692154169082642 1 0.7616611123085022 0 0.17892086505889893 4 0.055223498493433 0 0.0 -0.1687365174293518 0.1454685926437378 0.49789369106292725 -0.982451856136322 -0.15335550904273987 -0.10599078238010406 0.07277017086744308 0.5824607610702515 1 0.8802972435951233 0 0.09416398406028748 0 0.0 0 0.0 -0.14436477422714233 0.1705399751663208 0.42970240116119385 -0.9082003235816956 0.2847071886062622 -0.30674153566360474 0.059249572455883026 0.5475928783416748 1 0.7659354209899902 0 0.20331056416034698 4 0.007473912090063095 0 0.0 0.0 0.1879560947418213 0.26575779914855957 0.0 0.9689321517944336 -0.2472609579563141 0.7914559245109558 0.06275101006031036 0 0.7974072098731995 1 0.18872691690921783 0 0.0 0 0.0 -0.13336622714996338 0.11216402798891068 0.2601882219314575 -0.7886288166046143 0.6137882471084595 -0.03564561903476715 0.716507077217102 0.06020791083574295 0 0.842883288860321 1 0.11205136030912399 4 0.03046063892543316 0 0.0 -0.09047484397888184 0.21522080898284912 0.39295387268066406 -0.5327311158180237 0.6883449554443359 -0.4922940731048584 0.749397337436676 0.00040331503259949386 1 0.7951807379722595 0 0.19068527221679688 0 0.0 0 0.0 -0.14645665884017944 0.1097654178738594 0.37481164932250977 -0.9749442934989929 0.221472829580307 -0.019989624619483948 0.08871705830097198 0.5171707272529602 0 0.5417124032974243 1 0.386583149433136 4 0.06799639761447906 0 0.0 -0.14436477422714233 0.1705399751663208 0.42970240116119385 -0.9082003235816956 0.2847071886062622 -0.30674153566360474 0.059249572455883026 0.5475928783416748 1 0.7659354209899902 0 0.20331056416034698 4 0.007473912090063095 0 0.0 -0.09047484397888184 0.21522080898284912 0.39295387268066406 -0.5327311158180237 0.6883449554443359 -0.4922940731048584 0.03804061561822891 0.5298435091972351 1 0.7951807379722595 0 0.19068527221679688 0 0.0 0 0.0 -0.1687365174293518 0.1454685926437378 0.49789369106292725 -0.982451856136322 -0.15335550904273987 -0.10599078238010406 0.07277017086744308 0.5824607610702515 1 0.8802972435951233 0 0.09416398406028748 0 0.0 0 0.0 -0.15143811702728271 0.2254852056503296 0.5341702699661255 -0.9232154488563538 0.25720998644828796 -0.2854396104812622 0.03369267284870148 0.6037472486495972 1 0.9440637826919556 0 0.04249156638979912 0 0.0 0 0.0 -0.11800521612167358 0.24999380111694336 0.48617875576019287 -0.773796796798706 0.5241248607635498 -0.3556627035140991 0.021475009620189667 0.5794675946235657 1 0.9226130843162537 0 0.06844232976436615 0 0.0 0 0.0 -0.09047484397888184 0.21522080898284912 0.39295387268066406 -0.5327311158180237 0.6883449554443359 -0.4922940731048584 0.03804061561822891 0.5298435091972351 1 0.7951807379722595 0 0.19068527221679688 0 0.0 0 0.0 -0.14436477422714233 0.1705399751663208 0.42970240116119385 -0.9082003235816956 0.2847071886062622 -0.30674153566360474 0.059249572455883026 0.5475928783416748 1 0.7659354209899902 0 0.20331056416034698 4 0.007473912090063095 0 0.0 -0.11800521612167358 0.24999380111694336 0.48617875576019287 -0.773796796798706 0.5241248607635498 -0.3556627035140991 0.021475009620189667 0.5794675946235657 1 0.9226130843162537 0 0.06844232976436615 0 0.0 0 0.0 0.0 0.2737917900085449 0.4282184839248657 0.0 0.6853236556053162 -0.7282326817512512 0.34596291184425354 0.8853135108947754 1 0.8951932191848755 0 0.09897997975349426 0 0.0 0 0.0 0.0 0.21217751502990723 0.36668074131011963 0.0 0.8941618204116821 -0.44770652055740356 0.37843960523605347 0.8868684768676758 1 0.7214112877845764 0 0.26902148127555847 0 0.0 0 0.0 -0.09047484397888184 0.21522080898284912 0.39295387268066406 -0.5327311158180237 0.6883449554443359 -0.4922940731048584 0.37843960523605347 0.9328422546386719 1 0.7951807379722595 0 0.19068527221679688 0 0.0 0 0.0 -0.19039934873580933 0.3247871398925781 0.6355704069137573 -0.7619251012802124 0.14554277062416077 0.6310617327690125 0.27696818113327026 0.8137040734291077 1 0.9823060631752014 0 0.0 0 0.0 0 0.0 -0.1612895131111145 0.33922386169433594 0.5898922681808472 -0.37003692984580994 0.5403607487678528 -0.7556688189506531 0.21432805061340332 0.8298017978668213 1 0.9799913763999939 0 0.0 0 0.0 0 0.0 -0.17613452672958374 0.2313833236694336 0.6070717573165894 -0.939146101474762 -0.07638783007860184 -0.334879606962204 0.2380296140909195 0.6809014678001404 1 0.9754646420478821 0 0.0 0 0.0 0 0.0 -0.13313615322113037 0.3669123649597168 0.6355704069137573 0.44904935359954834 0.7006744742393494 0.5543687343597412 0.9076574444770813 0.7835649847984314 1 0.983238697052002 0 0.0 0 0.0 0 0.0 -0.1190231442451477 0.3240025043487549 0.6043640375137329 0.49604785442352295 0.7510910630226135 -0.4355906844139099 0.8601824045181274 0.8244431614875793 1 0.9815371632575989 0 0.0 0 0.0 0 0.0 -0.1612895131111145 0.33922386169433594 0.5898922681808472 -0.37003692984580994 0.5403607487678528 -0.7556688189506531 0.8526605367660522 0.760287344455719 1 0.9799913763999939 0 0.0 0 0.0 0 0.0 -0.15143811702728271 0.2254852056503296 0.5341702699661255 -0.9232154488563538 0.25720998644828796 -0.2854396104812622 0.03369267284870148 0.6037472486495972 1 0.9440637826919556 0 0.04249156638979912 0 0.0 0 0.0 -0.18040990829467773 0.2139267921447754 0.6355704069137573 -0.9097567796707153 -0.0018005920574069023 0.41511276364326477 0.040995195508003235 0.656345546245575 1 0.9819098114967346 0 0.0 0 0.0 0 0.0 -0.17613452672958374 0.2313833236694336 0.6070717573165894 -0.939146101474762 -0.07638783007860184 -0.334879606962204 0.03147881478071213 0.6419441103935242 1 0.9754646420478821 0 0.0 0 0.0 0 0.0 -0.11800521612167358 0.24999380111694336 0.48617875576019287 -0.773796796798706 0.5241248607635498 -0.3556627035140991 0.021475009620189667 0.5794675946235657 1 0.9226130843162537 0 0.06844232976436615 0 0.0 0 0.0 -0.15143811702728271 0.2254852056503296 0.5341702699661255 -0.9232154488563538 0.25720998644828796 -0.2854396104812622 0.03369267284870148 0.6037472486495972 1 0.9440637826919556 0 0.04249156638979912 0 0.0 0 0.0 -0.14436250925064087 0.27292418479919434 0.5668500661849976 -0.7668996453285217 0.2865687906742096 -0.574175238609314 0.01067846454679966 0.6221985220909119 1 0.969854474067688 0 0.0006151832640171051 0 0.0 0 0.0 -0.1190231442451477 0.3240025043487549 0.6043640375137329 0.49604785442352295 0.7510910630226135 -0.4355906844139099 0.49227312207221985 0.6409542560577393 1 0.9815371632575989 0 0.0 0 0.0 0 0.0 -0.07363545894622803 0.2982339859008789 0.6007412672042847 0.04513687640428543 0.9967650175094604 -0.06619464606046677 0.5469268560409546 0.6396243572235107 1 0.9836710691452026 0 0.0 0 0.0 0 0.0 -0.10207110643386841 0.29587411880493164 0.5440686941146851 -0.41743215918540955 0.8524124622344971 -0.31473737955093384 0.5052196383476257 0.7176094651222229 1 0.9687196016311646 0 0.004799999296665192 0 0.0 0 0.0 -0.07363545894622803 0.2982339859008789 0.6007412672042847 0.04513687640428543 0.9967650175094604 -0.06619464606046677 0.5469268560409546 0.6396243572235107 1 0.9836710691452026 0 0.0 0 0.0 0 0.0 -0.07210224866867065 0.3025968074798584 0.6355704069137573 -0.08188115805387497 0.842799186706543 0.5319375991821289 0.551694929599762 0.5924338698387146 1 0.9896897077560425 0 0.0 0 0.0 0 0.0 0.0 0.31928110122680664 0.5975655317306519 0.0 0.9569078683853149 0.29035308957099915 0.6522123217582703 0.6490117907524109 1 0.986151933670044 0 0.0 0 0.0 0 0.0 -0.11800521612167358 0.24999380111694336 0.48617875576019287 -0.773796796798706 0.5241248607635498 -0.3556627035140991 0.7384125590324402 0.8501654267311096 1 0.9226130843162537 0 0.06844232976436615 0 0.0 0 0.0 -0.10207110643386841 0.29587411880493164 0.5440686941146851 -0.41743215918540955 0.8524124622344971 -0.31473737955093384 0.766719400882721 0.8456106185913086 1 0.9687196016311646 0 0.004799999296665192 0 0.0 0 0.0 -0.06822705268859863 0.31713294982910156 0.5017274618148804 -0.4450819492340088 0.8710898160934448 -0.20749534666538239 0.75923091173172 0.8749287724494934 1 0.9548736810684204 0 0.03235049173235893 0 0.0 0 0.0 -0.10207110643386841 0.29587411880493164 0.5440686941146851 -0.41743215918540955 0.8524124622344971 -0.31473737955093384 0.5052196383476257 0.7176094651222229 1 0.9687196016311646 0 0.004799999296665192 0 0.0 0 0.0 -0.07363545894622803 0.2982339859008789 0.6007412672042847 0.04513687640428543 0.9967650175094604 -0.06619464606046677 0.5469268560409546 0.6396243572235107 1 0.9836710691452026 0 0.0 0 0.0 0 0.0 -0.03973621129989624 0.31778907775878906 0.5499929189682007 -0.2772911787033081 0.9470503926277161 0.16165654361248016 0.5957963466644287 0.7146220803260803 1 0.9746320843696594 0 0.0 0 0.0 0 0.0 -0.06822705268859863 0.31713294982910156 0.5017274618148804 -0.4450819492340088 0.8710898160934448 -0.20749534666538239 0.5548336505889893 0.7813751697540283 1 0.9548736810684204 0 0.03235049173235893 0 0.0 0 0.0 -0.03973621129989624 0.31778907775878906 0.5499929189682007 -0.2772911787033081 0.9470503926277161 0.16165654361248016 0.5957963466644287 0.7146220803260803 1 0.9746320843696594 0 0.0 0 0.0 0 0.0 0.0 0.3334541320800781 0.513670802116394 0.0 0.9971312880516052 -0.07556383311748505 0.6522123217582703 0.7686784863471985 1 0.9621657729148865 0 0.019739564508199692 0 0.0 0 0.0 -0.07563048601150513 0.27506399154663086 0.4404362440109253 -0.4518570601940155 0.6767174005508423 -0.5812555551528931 0.7320701479911804 0.8845022916793823 1 0.9063006639480591 0 0.08650905638933182 0 0.0 0 0.0 -0.06822705268859863 0.31713294982910156 0.5017274618148804 -0.4450819492340088 0.8710898160934448 -0.20749534666538239 0.75923091173172 0.8749287724494934 1 0.9548736810684204 0 0.03235049173235893 0 0.0 0 0.0 0.0 0.31658363342285156 0.4695626497268677 0.0 0.8418835997581482 -0.539597749710083 0.766719400882721 0.9123905897140503 1 0.9410541653633118 0 0.054964829236269 0 0.0 0 0.0 -0.09704774618148804 -0.392566442489624 -0.4658399820327759 0.7643055319786072 -0.14413891732692719 0.6284981966018677 0.8038542866706848 0.8589156270027161 3 0.999832808971405 0 0.0 0 0.0 0 0.0 -0.1732814908027649 -0.3921675682067871 -0.45750391483306885 -0.6674093008041382 -0.2617572546005249 0.6971343159675598 0.8426058888435364 0.8613379001617432 3 0.9991129636764526 0 0.0 0 0.0 0 0.0 -0.16358476877212524 -0.5438752174377441 -0.4808121919631958 -0.8981902599334717 0.13892024755477905 0.41706594824790955 0.8319727182388306 0.9409989714622498 3 0.9999702572822571 0 0.0 0 0.0 0 0.0 -0.09343808889389038 -0.32038211822509766 -0.4421921968460083 0.7430646419525146 -0.36826685070991516 0.5587328672409058 0.8824628591537476 0.573641836643219 3 0.9944356083869934 0 0.0 0 0.0 0 0.0 -0.09704774618148804 -0.392566442489624 -0.4658399820327759 0.7643055319786072 -0.14413891732692719 0.6284981966018677 0.8815617561340332 0.6134598851203918 3 0.999832808971405 0 0.0 0 0.0 0 0.0 -0.10235244035720825 -0.35957908630371094 -0.5960932970046997 0.6142460107803345 -0.017761772498488426 -0.7888729572296143 0.8124915361404419 0.6168727278709412 3 0.9956300258636475 0 0.0 0 0.0 0 0.0 -0.08439087867736816 -0.21313560009002686 -0.5862895250320435 0.5681020617485046 0.09179967641830444 -0.8178045153617859 0.8441900014877319 0.2085101306438446 3 0.964721143245697 0 0.0 0 0.0 0 0.0 -0.10235244035720825 -0.35957908630371094 -0.5960932970046997 0.6142460107803345 -0.017761772498488426 -0.7888729572296143 0.8554814457893372 0.13194745779037476 3 0.9956300258636475 0 0.0 0 0.0 0 0.0 -0.1785861849784851 -0.359180212020874 -0.5877567529678345 -0.7232581377029419 -0.06591998040676117 -0.6873989105224609 0.8941572904586792 0.13316871225833893 3 0.9966251850128174 0 0.0 0 0.0 0 0.0 -0.18601888418197632 -0.3018697500228882 -0.4252368211746216 -0.6975615620613098 -0.4051026999950409 0.5909604430198669 0.27508801221847534 0.08698911219835281 3 0.986090362071991 0 0.0 0 0.0 0 0.0 -0.20441192388534546 -0.18915605545043945 -0.555695652961731 -0.7800835967063904 0.13812677562236786 -0.6102175712585449 0.212846040725708 0.021823931485414505 3 0.9740641117095947 0 0.0 0 0.0 0 0.0 -0.1785861849784851 -0.359180212020874 -0.5877567529678345 -0.7232581377029419 -0.06591998040676117 -0.6873989105224609 0.3002532124519348 0.00040331503259949386 3 0.9966251850128174 0 0.0 0 0.0 0 0.0 -0.16358476877212524 -0.5438752174377441 -0.4808121919631958 -0.8981902599334717 0.13892024755477905 0.41706594824790955 0.2118651568889618 0.9236057996749878 3 0.9999702572822571 0 0.0 0 0.0 0 0.0 -0.1669650673866272 -0.5695590972900391 -0.42794668674468994 -0.6787621974945068 0.3166295289993286 0.6625568270683289 0.1829245537519455 0.928184986114502 3 0.9999889731407166 0 0.0 0 0.0 0 0.0 -0.09202015399932861 -0.5696377754211426 -0.43102800846099854 0.6786095499992371 0.33146151900291443 0.6554155349731445 0.18292458355426788 0.8896855115890503 3 0.9999966025352478 0 0.0 0 0.0 0 0.0 -0.09704774618148804 -0.392566442489624 -0.4658399820327759 0.7643055319786072 -0.14413891732692719 0.6284981966018677 0.8815617561340332 0.6134598851203918 3 0.999832808971405 0 0.0 0 0.0 0 0.0 -0.09540045261383057 -0.5439469814300537 -0.483615517616272 0.8756980895996094 0.18463698029518127 0.4460890591144562 0.8952838778495789 0.6918089389801025 3 0.9999970197677612 0 0.0 0 0.0 0 0.0 -0.08888596296310425 -0.5484790802001953 -0.578835129737854 0.7318033576011658 -0.13727225363254547 -0.6675008535385132 0.8489667773246765 0.7082512378692627 3 0.9997803568840027 0 0.0 0 0.0 0 0.0 -0.10235244035720825 -0.35957908630371094 -0.5960932970046997 0.6142460107803345 -0.017761772498488426 -0.7888729572296143 0.8554814457893372 0.13194745779037476 3 0.9956300258636475 0 0.0 0 0.0 0 0.0 -0.08888596296310425 -0.5484790802001953 -0.578835129737854 0.7318033576011658 -0.13727225363254547 -0.6675008535385132 0.8498412370681763 0.03303687646985054 3 0.9997803568840027 0 0.0 0 0.0 0 0.0 -0.15707027912139893 -0.5484073162078857 -0.5760318040847778 -0.7048555016517639 -0.1505172848701477 -0.6931669116020203 0.8846582770347595 0.03393390029668808 3 0.9998194575309753 0 0.0 0 0.0 0 0.0 -0.1732814908027649 -0.3921675682067871 -0.45750391483306885 -0.6674093008041382 -0.2617572546005249 0.6971343159675598 0.3210349380970001 0.06763686239719391 3 0.9991129636764526 0 0.0 0 0.0 0 0.0 -0.1785861849784851 -0.359180212020874 -0.5877567529678345 -0.7232581377029419 -0.06591998040676117 -0.6873989105224609 0.3002532124519348 0.00040331503259949386 3 0.9966251850128174 0 0.0 0 0.0 0 0.0 -0.15707027912139893 -0.5484073162078857 -0.5760318040847778 -0.7048555016517639 -0.1505172848701477 -0.6931669116020203 0.39849552512168884 0.0013318752171471715 3 0.9998194575309753 0 0.0 0 0.0 0 0.0 -0.18308591842651367 -0.1715635061264038 -0.30947959423065186 -0.6252326965332031 -0.7065645456314087 0.33136996626853943 0.9995967149734497 0.33627161383628845 3 0.7757202386856079 0 0.20105865597724915 0 0.0 0 0.0 -0.07139867544174194 -0.1890047788619995 -0.3518143892288208 0.5797906517982483 -0.7260048389434814 0.36979278922080994 0.9417983889579773 0.35505518317222595 3 0.7999973893165588 0 0.1541832536458969 5 0.02782197669148445 0 0.0 0.0 -0.13216137886047363 -0.2887181043624878 0.0 -0.9959410429000854 0.08993804454803467 0.9047964811325073 0.3187030851840973 0 0.6482506990432739 5 0.17250163853168488 3 0.17250163853168488 0 0.0 0.0 -0.196242094039917 0.3226771354675293 0.0 -0.9550157189369202 -0.29651784896850586 0.9282938241958618 0.00040331503259949386 6 0.4506283402442932 4 0.4506283402442932 0 0.09200550615787506 0 0.0 -0.15036439895629883 -0.08714862912893295 0.3016083240509033 -0.9604480266571045 -0.09698782116174698 -0.2609332501888275 0.9995967149734497 0.014335385523736477 4 0.7862779498100281 0 0.17627523839473724 0 0.0 0 0.0 -0.13016337156295776 -0.10303550213575363 0.1634429693222046 -0.7592394948005676 -0.6505325436592102 -0.01754814386367798 0.9853255748748779 0.08616168797016144 0 0.8383778929710388 4 0.12892886996269226 0 0.0 0 0.0 0.0 -0.10864909738302231 -0.08876931667327881 0.0 -0.9990233778953552 0.04358043149113655 0.9104627370834351 0.21379117667675018 0 0.9455240964889526 0 0.0 0 0.0 0 0.0 0.0 -0.195021390914917 0.15074574947357178 0.0 -0.9848322868347168 -0.17343668639659882 0.9224485158920288 0.09022121131420135 0 0.8213648796081543 6 0.08476964384317398 4 0.08476964384317398 0 0.0 -0.13016337156295776 -0.10303550213575363 0.1634429693222046 -0.7592394948005676 -0.6505325436592102 -0.01754814386367798 0.9853255748748779 0.08616168797016144 0 0.8383778929710388 4 0.12892886996269226 0 0.0 0 0.0 -0.1669650673866272 -0.5695590972900391 -0.42794668674468994 -0.6787621974945068 0.3166295289993286 0.6625568270683289 0.23618458211421967 0.9276077151298523 3 0.9999889731407166 0 0.0 0 0.0 0 0.0 -0.15794646739959717 -0.6148338317871094 -0.4347497224807739 -0.5692312121391296 -0.6506851315498352 0.5025177597999573 0.21267180144786835 0.9228885769844055 3 0.9999942779541016 0 0.0 0 0.0 0 0.0 -0.10268598794937134 -0.6122503280639648 -0.4350939989089966 0.5183873772621155 -0.6310312151908875 0.5770744681358337 0.21411648392677307 0.8940513134002686 3 0.9999961853027344 0 0.0 0 0.0 0 0.0 -0.10268598794937134 -0.6122503280639648 -0.4350939989089966 0.5183873772621155 -0.6310312151908875 0.5770744681358337 0.6814783215522766 0.8220149278640747 3 0.9999961853027344 0 0.0 0 0.0 0 0.0 -0.15794646739959717 -0.6148338317871094 -0.4347497224807739 -0.5692312121391296 -0.6506851315498352 0.5025177597999573 0.6530190110206604 0.8222582340240479 3 0.9999942779541016 0 0.0 0 0.0 0 0.0 -0.14641422033309937 -0.6189942359924316 -0.49265921115875244 -0.5785698890686035 -0.8136540055274963 -0.05630664899945259 0.6587129831314087 0.7918486595153809 3 0.9999929070472717 0 0.0 0 0.0 0 0.0 -0.14641422033309937 -0.6189942359924316 -0.49265921115875244 -0.5785698890686035 -0.8136540055274963 -0.05630664899945259 0.6587129831314087 0.7918486595153809 3 0.9999929070472717 0 0.0 0 0.0 0 0.0 -0.14641422033309937 -0.6122345924377441 -0.5737768411636353 -0.4997100830078125 -0.6077150702476501 -0.617175817489624 0.658989667892456 0.749474048614502 3 0.9999440312385559 0 0.0 0 0.0 0 0.0 -0.10268598794937134 -0.610898494720459 -0.5709654092788696 0.5513778924942017 -0.6156193614006042 -0.5630054473876953 0.6814783215522766 0.7508853673934937 3 0.9999434351921082 0 0.0 0 0.0 0 0.0 -0.15707027912139893 -0.5484073162078857 -0.5760318040847778 -0.7048555016517639 -0.1505172848701477 -0.6931669116020203 0.8846582770347595 0.03393390029668808 3 0.9998194575309753 0 0.0 0 0.0 0 0.0 -0.08888596296310425 -0.5484790802001953 -0.578835129737854 0.7318033576011658 -0.13727225363254547 -0.6675008535385132 0.8498412370681763 0.03303687646985054 3 0.9997803568840027 0 0.0 0 0.0 0 0.0 -0.10268598794937134 -0.610898494720459 -0.5709654092788696 0.5513778924942017 -0.6156193614006042 -0.5630054473876953 0.8572291135787964 0.0005972707876935601 3 0.9999434351921082 0 0.0 0 0.0 0 0.0 -0.14641422033309937 -0.6189942359924316 -0.49265921115875244 -0.5785698890686035 -0.8136540055274963 -0.05630664899945259 0.43747836351394653 0.04301292449235916 3 0.9999929070472717 0 0.0 0 0.0 0 0.0 -0.15794646739959717 -0.6148338317871094 -0.4347497224807739 -0.5692312121391296 -0.6506851315498352 0.5025177597999573 0.43639105558395386 0.07337364554405212 3 0.9999942779541016 0 0.0 0 0.0 0 0.0 -0.1669650673866272 -0.5695590972900391 -0.42794668674468994 -0.6787621974945068 0.3166295289993286 0.6625568270683289 0.41296064853668213 0.07816137373447418 3 0.9999889731407166 0 0.0 0 0.0 0 0.0 -0.15707027912139893 -0.5484073162078857 -0.5760318040847778 -0.7048555016517639 -0.1505172848701477 -0.6931669116020203 0.39849552512168884 0.0013318752171471715 3 0.9998194575309753 0 0.0 0 0.0 0 0.0 -0.14641422033309937 -0.6122345924377441 -0.5737768411636353 -0.4997100830078125 -0.6077150702476501 -0.617175817489624 0.43175503611564636 0.0007699446869082749 3 0.9999440312385559 0 0.0 0 0.0 0 0.0 -0.14641422033309937 -0.6189942359924316 -0.49265921115875244 -0.5785698890686035 -0.8136540055274963 -0.05630664899945259 0.43747836351394653 0.04301292449235916 3 0.9999929070472717 0 0.0 0 0.0 0 0.0 -0.09202015399932861 -0.5696377754211426 -0.43102800846099854 0.6786095499992371 0.33146151900291443 0.6554155349731445 0.9249988794326782 0.696574330329895 3 0.9999966025352478 0 0.0 0 0.0 0 0.0 -0.10268598794937134 -0.6122503280639648 -0.4350939989089966 0.5183873772621155 -0.6310312151908875 0.5770744681358337 0.9294113516807556 0.7188957929611206 3 0.9999961853027344 0 0.0 0 0.0 0 0.0 -0.10268598794937134 -0.6176581382751465 -0.489848256111145 0.6539506316184998 -0.7564317584037781 -0.01031525619328022 0.90322345495224 0.7298896312713623 3 0.9999944567680359 0 0.0 0 0.0 0 0.0 -0.09540045261383057 -0.5439469814300537 -0.483615517616272 0.8756980895996094 0.18463698029518127 0.4460890591144562 0.8952838778495789 0.6918089389801025 3 0.9999970197677612 0 0.0 0 0.0 0 0.0 -0.10268598794937134 -0.6176581382751465 -0.489848256111145 0.6539506316184998 -0.7564317584037781 -0.01031525619328022 0.90322345495224 0.7298896312713623 3 0.9999944567680359 0 0.0 0 0.0 0 0.0 -0.10268598794937134 -0.610898494720459 -0.5709654092788696 0.5513778924942017 -0.6156193614006042 -0.5630054473876953 0.8622313141822815 0.7387880682945251 3 0.9999434351921082 0 0.0 0 0.0 0 0.0 0.13038241863250732 0.20644712448120117 0.6861461400985718 0.634571373462677 0.33890804648399353 0.69454026222229 0.6237268447875977 0.2415420264005661 1 0.9901185631752014 0 0.0 0 0.0 0 0.0 0.06078380346298218 0.2408146858215332 0.7048863172531128 0.25702688097953796 0.5580919981002808 0.7889339923858643 0.5218138098716736 0.20084944367408752 1 0.9962618350982666 0 0.0 0 0.0 0 0.0 0.05053889751434326 0.1634979248046875 0.7342671155929565 0.3151646554470062 0.2640766501426697 0.9115268588066101 0.5070644617080688 0.2996123731136322 1 0.9945793151855469 0 0.0 0 0.0 0 0.0 0.0 0.1765376329421997 0.7342671155929565 0.0 0.4454481601715088 0.8952909708023071 0.44110503792762756 0.2877768576145172 1 0.9965916275978088 0 0.0 0 0.0 0 0.0 0.05053889751434326 0.1634979248046875 0.7342671155929565 0.3151646554470062 0.2640766501426697 0.9115268588066101 0.5070644617080688 0.2996123731136322 1 0.9945793151855469 0 0.0 0 0.0 0 0.0 0.06078380346298218 0.2408146858215332 0.7048863172531128 0.25702688097953796 0.5580919981002808 0.7889339923858643 0.5218138098716736 0.20084944367408752 1 0.9962618350982666 0 0.0 0 0.0 0 0.0 0.05053889751434326 0.1634979248046875 0.7342671155929565 0.3151646554470062 0.2640766501426697 0.9115268588066101 0.5070644617080688 0.2996123731136322 1 0.9945793151855469 0 0.0 0 0.0 0 0.0 0.0 0.1765376329421997 0.7342671155929565 0.0 0.4454481601715088 0.8952909708023071 0.44110503792762756 0.2877768576145172 1 0.9965916275978088 0 0.0 0 0.0 0 0.0 0.0 0.13670289516448975 0.759844183921814 0.0 0.347636342048645 0.9376201629638672 0.444909006357193 0.3479462265968323 1 0.9948671460151672 0 0.0 0 0.0 0 0.0 0.0 0.13670289516448975 0.759844183921814 0.0 0.347636342048645 0.9376201629638672 0.444909006357193 0.3479462265968323 1 0.9948671460151672 0 0.0 0 0.0 0 0.0 0.06865745782852173 0.10929454118013382 0.7345117330551147 0.5191808938980103 -0.1431928426027298 0.8425549864768982 0.5454435348510742 0.3798229694366455 1 0.9898999929428101 0 0.0 0 0.0 0 0.0 0.05053889751434326 0.1634979248046875 0.7342671155929565 0.3151646554470062 0.2640766501426697 0.9115268588066101 0.5070644617080688 0.2996123731136322 1 0.9945793151855469 0 0.0 0 0.0 0 0.0 0.029034316539764404 0.02282658964395523 0.5975655317306519 0.5346843004226685 -0.8348338007926941 0.13074129819869995 0.33391112089157104 0.6721431612968445 1 0.9265779256820679 6 0.026510117575526237 0 0.0 0 0.0 0.059469640254974365 0.0555688813328743 0.6115850210189819 0.7055574059486389 -0.7052217125892639 0.06924650073051453 0.29570549726486206 0.6925798058509827 1 0.9599898457527161 0 0.0 0 0.0 0 0.0 0.035290539264678955 0.032179124653339386 0.6548959016799927 0.4995880126953125 -0.8637043237686157 0.06610309332609177 0.3249615430831909 0.7529926896095276 1 0.9648765921592712 0 0.0 0 0.0 0 0.0 0.07210224866867065 0.3025968074798584 0.6355704069137573 0.08188115805387497 0.842799186706543 0.5319375991821289 0.551694929599762 0.5924338698387146 1 0.9896824359893799 0 0.0 0 0.0 0 0.0 0.0 0.31928110122680664 0.5975655317306519 0.0 0.9569078683853149 0.29035308957099915 0.6522123217582703 0.6490117907524109 1 0.986151933670044 0 0.0 0 0.0 0 0.0 0.0 0.24179911613464355 0.7048863172531128 0.0 0.6098208427429199 0.7925046682357788 0.6366429924964905 0.4814949929714203 1 0.9979282021522522 0 0.0 0 0.0 0 0.0 0.13990861177444458 0.2426142692565918 0.6210473775863647 0.17987608909606934 0.4221320152282715 0.8884853720664978 0.44332829117774963 0.5980841517448425 1 0.9863647222518921 0 0.0 0 0.0 0 0.0 0.07210224866867065 0.3025968074798584 0.6355704069137573 0.08188115805387497 0.842799186706543 0.5319375991821289 0.551694929599762 0.5924338698387146 1 0.9896824359893799 0 0.0 0 0.0 0 0.0 0.06078380346298218 0.2408146858215332 0.7048863172531128 0.25702688097953796 0.5580919981002808 0.7889339923858643 0.5539146065711975 0.48136377334594727 1 0.9962618350982666 0 0.0 0 0.0 0 0.0 0.18040990829467773 0.2139267921447754 0.6355704069137573 0.9097567796707153 -0.0018005920574069023 0.41511276364326477 0.6973033547401428 0.23020672798156738 1 0.9819253087043762 0 0.0 0 0.0 0 0.0 0.13990861177444458 0.2426142692565918 0.6210473775863647 0.17987608909606934 0.4221320152282715 0.8884853720664978 0.6398704051971436 0.19736255705356598 1 0.9863647222518921 0 0.0 0 0.0 0 0.0 0.13038241863250732 0.20644712448120117 0.6861461400985718 0.634571373462677 0.33890804648399353 0.69454026222229 0.6237268447875977 0.2415420264005661 1 0.9901185631752014 0 0.0 0 0.0 0 0.0 0.13990861177444458 0.2426142692565918 0.6210473775863647 0.17987608909606934 0.4221320152282715 0.8884853720664978 0.6398704051971436 0.19736255705356598 1 0.9863647222518921 0 0.0 0 0.0 0 0.0 0.18040990829467773 0.2139267921447754 0.6355704069137573 0.9097567796707153 -0.0018005920574069023 0.41511276364326477 0.6973033547401428 0.23020672798156738 1 0.9819253087043762 0 0.0 0 0.0 0 0.0 0.19039934873580933 0.3247871398925781 0.6355704069137573 0.7619251012802124 0.14554277062416077 0.6310617327690125 0.6973033547401428 0.07419048994779587 1 0.9823099970817566 0 0.0 0 0.0 0 0.0 0.18203496932983398 0.3555026054382324 0.6355704069137573 0.7024140357971191 0.35395365953445435 0.617480993270874 0.682029664516449 0.03247282654047012 1 0.9823530912399292 0 0.0 0 0.0 0 0.0 0.1613888144493103 0.3804953098297119 0.6355704069137573 0.09356974810361862 0.8272042274475098 0.5540025234222412 0.6506124138832092 0.00040331503259949386 1 0.9825493693351746 0 0.0 0 0.0 0 0.0 0.1529483199119568 0.3224823474884033 0.616545557975769 -0.10449537634849548 -0.09079256653785706 0.9903561472892761 0.648408830165863 0.08469385653734207 1 0.9842087626457214 0 0.0 0 0.0 0 0.0 0.1529483199119568 0.3224823474884033 0.616545557975769 -0.10449537634849548 -0.09079256653785706 0.9903561472892761 0.648408830165863 0.08469385653734207 1 0.9842087626457214 0 0.0 0 0.0 0 0.0 0.1047014594078064 0.34171581268310547 0.6355704069137573 -0.5681020617485046 0.5726493000984192 0.5910214781761169 0.5776293873786926 0.06218792498111725 1 0.9845264554023743 0 0.0 0 0.0 0 0.0 0.07210224866867065 0.3025968074798584 0.6355704069137573 0.08188115805387497 0.842799186706543 0.5319375991821289 0.5377382636070251 0.12118156999349594 1 0.9896824359893799 0 0.0 0 0.0 0 0.0 0.13313615322113037 0.3669123649597168 0.6355704069137573 -0.44904935359954834 0.7006744742393494 0.5543687343597412 0.613527774810791 0.02318226918578148 1 0.9832393527030945 0 0.0 0 0.0 0 0.0 0.1047014594078064 0.34171581268310547 0.6355704069137573 -0.5681020617485046 0.5726493000984192 0.5910214781761169 0.5776293873786926 0.06218792498111725 1 0.9845264554023743 0 0.0 0 0.0 0 0.0 0.1529483199119568 0.3224823474884033 0.616545557975769 -0.10449537634849548 -0.09079256653785706 0.9903561472892761 0.648408830165863 0.08469385653734207 1 0.9842087626457214 0 0.0 0 0.0 0 0.0 0.06865745782852173 0.10929454118013382 0.7345117330551147 0.5191808938980103 -0.1431928426027298 0.8425549864768982 0.5454435348510742 0.3798229694366455 1 0.9898999929428101 0 0.0 0 0.0 0 0.0 0.0 0.09236795455217361 0.7743176221847534 0.0 -0.12359996140003204 0.9923093318939209 0.4487127959728241 0.4081156253814697 1 0.9922438859939575 0 0.0 0 0.0 0 0.0 0.0 0.042672283947467804 0.7475627660751343 0.0 -0.7097384333610535 0.7044282555580139 0.4579574763774872 0.4805571734905243 1 0.9884468913078308 0 0.0 0 0.0 0 0.0 0.0 0.025754906237125397 0.7083276510238647 0.0 -0.9591051936149597 0.28293710947036743 0.37136271595954895 0.828621506690979 1 0.9845536351203918 0 0.0 0 0.0 0 0.0 0.035290539264678955 0.032179124653339386 0.6548959016799927 0.4995880126953125 -0.8637043237686157 0.06610309332609177 0.3249615430831909 0.7529926896095276 1 0.9648765921592712 0 0.0 0 0.0 0 0.0 0.0705878734588623 0.05552078038454056 0.6960290670394897 0.6313669085502625 -0.7171849608421326 0.2948698401451111 0.2781895399093628 0.8110224008560181 1 0.981741726398468 0 0.0 0 0.0 0 0.0 0.059469640254974365 0.0555688813328743 0.6115850210189819 0.7055574059486389 -0.7052217125892639 0.06924650073051453 0.7010108828544617 0.6815871596336365 1 0.9599898457527161 0 0.0 0 0.0 0 0.0 0.0899050235748291 0.08831120282411575 0.6256042718887329 0.7000335454940796 -0.713614284992218 0.025116734206676483 0.6875460743904114 0.7333278059959412 1 0.9682276844978333 0 0.0 0 0.0 0 0.0 0.0705878734588623 0.05552078038454056 0.6960290670394897 0.6313669085502625 -0.7171849608421326 0.2948698401451111 0.7946124076843262 0.7522226572036743 1 0.981741726398468 0 0.0 0 0.0 0 0.0 0.059469640254974365 0.0555688813328743 0.6115850210189819 0.7055574059486389 -0.7052217125892639 0.06924650073051453 0.3451562821865082 0.8853135108947754 1 0.9599898457527161 0 0.0 0 0.0 0 0.0 0.029034316539764404 0.02282658964395523 0.5975655317306519 0.5346843004226685 -0.8348338007926941 0.13074129819869995 0.3254745602607727 0.8884339332580566 1 0.9265779256820679 6 0.026510117575526237 0 0.0 0 0.0 0.050073862075805664 0.02092299610376358 0.5243707895278931 0.6866664886474609 -0.40858179330825806 0.6012146472930908 0.3176169991493225 0.9254664182662964 1 0.844631552696228 6 0.10059148073196411 0 0.019277770072221756 0 0.0 0.09416019916534424 0.07008225470781326 0.5274871587753296 0.6548966765403748 -0.6562089920043945 0.3748283386230469 0.9130188822746277 0.861991822719574 1 0.8562959432601929 0 0.09284236282110214 6 0.03691690042614937 0 0.0 0.1328907608985901 0.08454591780900955 0.4755467176437378 0.9486068487167358 -0.2300790399312973 0.21716971695423126 0.924144446849823 0.8932643532752991 1 0.7616633176803589 0 0.1789185106754303 6 0.05522337555885315 0 0.0 0.0899050235748291 0.08831120282411575 0.6256042718887329 0.7000335454940796 -0.713614284992218 0.025116734206676483 0.924144446849823 0.8115005493164062 1 0.9682276844978333 0 0.0 0 0.0 0 0.0 0.0899050235748291 0.08831120282411575 0.6256042718887329 0.7000335454940796 -0.713614284992218 0.025116734206676483 0.1095123291015625 0.6479935050010681 1 0.9682276844978333 0 0.0 0 0.0 0 0.0 0.1328907608985901 0.08454591780900955 0.4755467176437378 0.9486068487167358 -0.2300790399312973 0.21716971695423126 0.10511094331741333 0.5692154169082642 1 0.7616633176803589 0 0.1789185106754303 6 0.05522337555885315 0 0.0 0.1687365174293518 0.1454685926437378 0.49789369106292725 0.982451856136322 -0.15335550904273987 -0.10599078238010406 0.07277017086744308 0.5824607610702515 1 0.8803035020828247 0 0.0941576361656189 0 0.0 0 0.0 0.15605974197387695 0.14025557041168213 0.6220062971115112 0.8759422302246094 -0.46403393149375916 0.13183996081352234 0.0795331671833992 0.6472899913787842 1 0.969058096408844 0 0.0 0 0.0 0 0.0 0.1687365174293518 0.1454685926437378 0.49789369106292725 0.982451856136322 -0.15335550904273987 -0.10599078238010406 0.07277017086744308 0.5824607610702515 1 0.8803035020828247 0 0.0941576361656189 0 0.0 0 0.0 0.15143811702728271 0.2254852056503296 0.5341702699661255 0.9232154488563538 0.25720998644828796 -0.2854396104812622 0.03369267284870148 0.6037472486495972 1 0.944068431854248 0 0.04248170927166939 0 0.0 0 0.0 0.0 0.00883752852678299 0.5868633985519409 0.0 -0.9138767719268799 0.4059267044067383 0.3157893419265747 0.8918732404708862 1 0.9038245677947998 6 0.03429456427693367 4 0.03429247811436653 0 0.0 0.0 -0.059041060507297516 0.5594795942306519 0.0 -0.37794122099876404 0.9258095026016235 0.2781895399093628 0.898551344871521 1 0.7317149043083191 6 0.12379448860883713 4 0.12379419058561325 0 0.0 0.050073862075805664 0.02092299610376358 0.5243707895278931 0.6866664886474609 -0.40858179330825806 0.6012146472930908 0.3176169991493225 0.9254664182662964 1 0.844631552696228 6 0.10059148073196411 0 0.019277770072221756 0 0.0 0.15183615684509277 -0.0799783393740654 0.4494694471359253 0.8179571032524109 -0.059785760939121246 0.5721305012702942 0.08381302654743195 0.7420639395713806 6 0.8048247694969177 0 0.08847368508577347 1 0.08450014144182205 0 0.0 0.050073862075805664 0.02092299610376358 0.5243707895278931 0.6866664886474609 -0.40858179330825806 0.6012146472930908 0.0349784754216671 0.6804375052452087 1 0.844631552696228 6 0.10059148073196411 0 0.019277770072221756 0 0.0 0.0 -0.059041060507297516 0.5594795942306519 0.0 -0.37794122099876404 0.9258095026016235 0.003714407328516245 0.717420756816864 1 0.7317149043083191 6 0.12379448860883713 4 0.12379419058561325 0 0.0 0.17540639638900757 -0.17460304498672485 0.430961012840271 0.8131046295166016 0.054322946816682816 0.5795159935951233 0.23437808454036713 0.5384660959243774 6 0.960517406463623 0 0.0 0 0.0 0 0.0 0.17356276512145996 -0.18332982063293457 0.28318774700164795 0.6146122813224792 0.07834101468324661 -0.7849055528640747 0.23481203615665436 0.4609302878379822 6 0.9596999883651733 0 0.011403277516365051 0 0.0 0 0.0 0.15036439895629883 -0.08714862912893295 0.3016083240509033 0.9604480266571045 -0.09698782116174698 -0.2609332501888275 0.18725724518299103 0.4733530879020691 6 0.7862779498100281 0 0.17627522349357605 0 0.0 0 0.0 0.17616277933120728 -0.29728245735168457 0.31193840503692627 0.6749778985977173 -0.2538224458694458 -0.6927701830863953 0.10438784956932068 0.7673202157020569 6 0.9925202131271362 0 0.0 0 0.0 0 0.0 0.08690553903579712 -0.3065640926361084 0.3270174264907837 -0.7335429191589355 -0.28986480832099915 -0.6147038340568542 0.1508081704378128 0.761959433555603 6 0.9789289832115173 0 0.0 0 0.0 0 0.0 0.0706138014793396 -0.22762751579284668 0.3014519214630127 -0.5107883214950562 -0.33680227398872375 -0.790978729724884 0.14921531081199646 0.7203041911125183 6 0.8573116064071655 4 0.11295725405216217 0 0.004347570240497589 0 0.0 0.15183615684509277 -0.0799783393740654 0.4494694471359253 0.8179571032524109 -0.059785760939121246 0.5721305012702942 0.08381302654743195 0.7420639395713806 6 0.8048247694969177 0 0.08847368508577347 1 0.08450014144182205 0 0.0 0.0 -0.17929625511169434 0.45751893520355225 0.0 -0.6968291401863098 0.7172154784202576 0.00040331503259949386 0.7850019931793213 6 0.45073360204696655 4 0.45073357224464417 1 0.08223999291658401 0 0.0 0.07245743274688721 -0.2189006805419922 0.4492250680923462 -0.3258461356163025 -0.4115115702152252 0.8511307239532471 0.03546648845076561 0.8098580241203308 6 0.8791981935501099 4 0.09424681961536407 0 0.0 0 0.0 0.0 -0.196242094039917 0.3226771354675293 0.0 -0.9550157189369202 -0.29651784896850586 0.6543000340461731 0.6595564484596252 6 0.4506283402442932 4 0.4506283402442932 0 0.09200550615787506 0 0.0 0.0706138014793396 -0.22762751579284668 0.3014519214630127 -0.5107883214950562 -0.33680227398872375 -0.790978729724884 0.6920541524887085 0.6707813739776611 6 0.8573116064071655 4 0.11295725405216217 0 0.004347570240497589 0 0.0 0.07245743274688721 -0.2189006805419922 0.4492250680923462 -0.3258461356163025 -0.4115115702152252 0.8511307239532471 0.6920541524887085 0.5932608246803284 6 0.8791981935501099 4 0.09424681961536407 0 0.0 0 0.0 0.0706138014793396 -0.22762751579284668 0.3014519214630127 -0.5107883214950562 -0.33680227398872375 -0.790978729724884 0.14921531081199646 0.7203041911125183 6 0.8573116064071655 4 0.11295725405216217 0 0.004347570240497589 0 0.0 0.0 -0.196242094039917 0.3226771354675293 0.0 -0.9550157189369202 -0.29651784896850586 0.18211792409420013 0.6960455179214478 6 0.4506283402442932 4 0.4506283402442932 0 0.09200550615787506 0 0.0 0.15036439895629883 -0.08714862912893295 0.3016083240509033 0.9604480266571045 -0.09698782116174698 -0.2609332501888275 0.0938851460814476 0.6571521162986755 6 0.7862779498100281 0 0.17627522349357605 0 0.0 0 0.0 0.16209262609481812 -0.36195850372314453 0.33104169368743896 0.6149784922599792 -0.26581621170043945 -0.7423627376556396 0.11935535073280334 0.798479437828064 6 0.9988442659378052 0 0.0 0 0.0 0 0.0 0.08881819248199463 -0.3583719730377197 0.34317684173583984 -0.791894257068634 -0.15695668756961823 -0.5901058912277222 0.15622735023498535 0.7883478999137878 6 0.9974430799484253 0 0.0 0 0.0 0 0.0 0.08690553903579712 -0.3065640926361084 0.3270174264907837 -0.7335429191589355 -0.28986480832099915 -0.6147038340568542 0.1508081704378128 0.761959433555603 6 0.9789289832115173 0 0.0 0 0.0 0 0.0 0.17540639638900757 -0.17460304498672485 0.430961012840271 0.8131046295166016 0.054322946816682816 0.5795159935951233 0.23437808454036713 0.5384660959243774 6 0.960517406463623 0 0.0 0 0.0 0 0.0 0.17964047193527222 -0.285830020904541 0.4299675226211548 0.7866451144218445 -0.07501449435949326 0.6128116846084595 0.2910638153553009 0.5348170399665833 6 0.9926502108573914 0 0.0 0 0.0 0 0.0 0.17616277933120728 -0.29728245735168457 0.31193840503692627 0.6749778985977173 -0.2538224458694458 -0.6927701830863953 0.29380425810813904 0.47277066111564636 6 0.9925202131271362 0 0.0 0 0.0 0 0.0 0.07245743274688721 -0.2189006805419922 0.4492250680923462 -0.3258461356163025 -0.4115115702152252 0.8511307239532471 0.03546648845076561 0.8098580241203308 6 0.8791981935501099 4 0.09424681961536407 0 0.0 0 0.0 0.09038317203521729 -0.29511165618896484 0.4450465440750122 -0.5827814340591431 -0.14893032610416412 0.7988525032997131 0.04047681763768196 0.8505580425262451 6 0.9791664481163025 0 0.0 0 0.0 0 0.0 0.17964047193527222 -0.285830020904541 0.4299675226211548 0.7866451144218445 -0.07501449435949326 0.6128116846084595 0.08709609508514404 0.8513107895851135 6 0.9926502108573914 0 0.0 0 0.0 0 0.0 0.08690553903579712 -0.3065640926361084 0.3270174264907837 -0.7335429191589355 -0.28986480832099915 -0.6147038340568542 0.5769522190093994 0.8373445272445679 6 0.9789289832115173 0 0.0 0 0.0 0 0.0 0.09038317203521729 -0.29511165618896484 0.4450465440750122 -0.5827814340591431 -0.14893032610416412 0.7988525032997131 0.5792155265808105 0.8983412981033325 6 0.9791664481163025 0 0.0 0 0.0 0 0.0 0.07245743274688721 -0.2189006805419922 0.4492250680923462 -0.3258461356163025 -0.4115115702152252 0.8511307239532471 0.6195079684257507 0.9027084112167358 6 0.8791981935501099 4 0.09424681961536407 0 0.0 0 0.0 0.09503942728042603 -0.5187876224517822 0.4470318555831909 -0.6328318119049072 0.1662037968635559 0.7562181353569031 0.030207481235265732 0.966705858707428 6 0.9998917579650879 0 0.0 0 0.0 0 0.0 0.1552836298942566 -0.5217366218566895 0.43705475330352783 0.7843867540359497 0.10419019311666489 0.6114078164100647 0.06114814803004265 0.9719817638397217 6 0.999962329864502 0 0.0 0 0.0 0 0.0 0.16614562273025513 -0.35099244117736816 0.42727792263031006 0.7634815573692322 -0.10623493045568466 0.6369823217391968 0.07662999629974365 0.8845169544219971 6 0.9988507628440857 0 0.0 0 0.0 0 0.0 0.17964047193527222 -0.285830020904541 0.4299675226211548 0.7866451144218445 -0.07501449435949326 0.6128116846084595 0.2910638153553009 0.5348170399665833 6 0.9926502108573914 0 0.0 0 0.0 0 0.0 0.16614562273025513 -0.35099244117736816 0.42727792263031006 0.7634815573692322 -0.10623493045568466 0.6369823217391968 0.3250100612640381 0.5316429734230042 6 0.9988507628440857 0 0.0 0 0.0 0 0.0 0.16209262609481812 -0.36195850372314453 0.33104169368743896 0.6149784922599792 -0.26581621170043945 -0.7423627376556396 0.3281383216381073 0.48101234436035156 6 0.9988442659378052 0 0.0 0 0.0 0 0.0 0.09038317203521729 -0.29511165618896484 0.4450465440750122 -0.5827814340591431 -0.14893032610416412 0.7988525032997131 0.04047681763768196 0.8505580425262451 6 0.9791664481163025 0 0.0 0 0.0 0 0.0 0.09287118911743164 -0.34740591049194336 0.4394129514694214 -0.6446424722671509 -0.04431287571787834 0.7631763815879822 0.038997162133455276 0.8780998587608337 6 0.9969676733016968 0 0.0 0 0.0 0 0.0 0.16614562273025513 -0.35099244117736816 0.42727792263031006 0.7634815573692322 -0.10623493045568466 0.6369823217391968 0.07662999629974365 0.8845169544219971 6 0.9988507628440857 0 0.0 0 0.0 0 0.0 0.08690553903579712 -0.3065640926361084 0.3270174264907837 -0.7335429191589355 -0.28986480832099915 -0.6147038340568542 0.5769522190093994 0.8373445272445679 6 0.9789289832115173 0 0.0 0 0.0 0 0.0 0.08881819248199463 -0.3583719730377197 0.34317684173583984 -0.791894257068634 -0.15695668756961823 -0.5901058912277222 0.5493676066398621 0.8441964983940125 6 0.9974430799484253 0 0.0 0 0.0 0 0.0 0.09287118911743164 -0.34740591049194336 0.4394129514694214 -0.6446424722671509 -0.04431287571787834 0.7631763815879822 0.5520168542861938 0.893970251083374 6 0.9969676733016968 0 0.0 0 0.0 0 0.0 0.08549678325653076 -0.570166826248169 0.3673415184020996 -0.7073580026626587 -0.443037211894989 -0.5507370233535767 0.4382849633693695 0.8507182598114014 6 0.9999839663505554 0 0.0 0 0.0 0 0.0 0.08934891223907471 -0.5597443580627441 0.4588078260421753 -0.8483535051345825 0.28254035115242004 0.44770652055740356 0.44080308079719543 0.8980250358581543 6 0.9999756813049316 0 0.0 0 0.0 0 0.0 0.09503942728042603 -0.5187876224517822 0.4470318555831909 -0.6328318119049072 0.1662037968635559 0.7562181353569031 0.4623115360736847 0.8930864930152893 6 0.9998917579650879 0 0.0 0 0.0 0 0.0 0.08881819248199463 -0.3583719730377197 0.34317684173583984 -0.791894257068634 -0.15695668756961823 -0.5901058912277222 0.5493676066398621 0.8441964983940125 6 0.9974430799484253 0 0.0 0 0.0 0 0.0 0.09170717000961304 -0.5278036594390869 0.36790919303894043 -0.7768791913986206 0.011474959552288055 -0.6295052766799927 0.4601333737373352 0.8521638512611389 6 0.9999263882637024 0 0.0 0 0.0 0 0.0 0.09503942728042603 -0.5187876224517822 0.4470318555831909 -0.6328318119049072 0.1662037968635559 0.7562181353569031 0.4623115360736847 0.8930864930152893 6 0.9998917579650879 0 0.0 0 0.0 0 0.0 0.16209262609481812 -0.36195850372314453 0.33104169368743896 0.6149784922599792 -0.26581621170043945 -0.7423627376556396 0.11935535073280334 0.798479437828064 6 0.9988442659378052 0 0.0 0 0.0 0 0.0 0.15195131301879883 -0.530752420425415 0.3579319715499878 0.634815514087677 -0.03268532454967499 -0.7719351649284363 0.1440824270248413 0.883197546005249 6 0.9999616742134094 0 0.0 0 0.0 0 0.0 0.09170717000961304 -0.5278036594390869 0.36790919303894043 -0.7768791913986206 0.011474959552288055 -0.6295052766799927 0.17439746856689453 0.8748677968978882 6 0.9999263882637024 0 0.0 0 0.0 0 0.0 0.1552836298942566 -0.5217366218566895 0.43705475330352783 0.7843867540359497 0.10419019311666489 0.6114078164100647 0.4132080078125 0.5320252776145935 6 0.999962329864502 0 0.0 0 0.0 0 0.0 0.15195131301879883 -0.530752420425415 0.3579319715499878 0.634815514087677 -0.03268532454967499 -0.7719351649284363 0.41578006744384766 0.49039819836616516 6 0.9999616742134094 0 0.0 0 0.0 0 0.0 0.16209262609481812 -0.36195850372314453 0.33104169368743896 0.6149784922599792 -0.26581621170043945 -0.7423627376556396 0.3281383216381073 0.48101234436035156 6 0.9988442659378052 0 0.0 0 0.0 0 0.0 0.15899169445037842 -0.5631530284881592 0.4472743272781372 0.9405804872512817 -0.06775109469890594 0.3327127993106842 0.398474782705307 0.9319923520088196 6 0.9999915361404419 0 0.0 0 0.0 0 0.0 0.08934891223907471 -0.5597443580627441 0.4588078260421753 -0.8483535051345825 0.28254035115242004 0.44770652055740356 0.4345163404941559 0.9368331432342529 6 0.9999756813049316 0 0.0 0 0.0 0 0.0 0.08549678325653076 -0.570166826248169 0.3673415184020996 -0.7073580026626587 -0.443037211894989 -0.5507370233535767 0.43451640009880066 0.8887473344802856 6 0.9999839663505554 0 0.0 0 0.0 0 0.0 0.15195131301879883 -0.530752420425415 0.3579319715499878 0.634815514087677 -0.03268532454967499 -0.7719351649284363 0.1440824270248413 0.883197546005249 6 0.9999616742134094 0 0.0 0 0.0 0 0.0 0.1551395058631897 -0.573575496673584 0.3558077812194824 0.5728934407234192 -0.44907987117767334 -0.6855983138084412 0.14707347750663757 0.9055101275444031 6 0.9999913573265076 0 0.0 0 0.0 0 0.0 0.08549678325653076 -0.570166826248169 0.3673415184020996 -0.7073580026626587 -0.443037211894989 -0.5507370233535767 0.18211792409420013 0.8958807587623596 6 0.9999839663505554 0 0.0 0 0.0 0 0.0 0.15899169445037842 -0.5631530284881592 0.4472743272781372 0.9405804872512817 -0.06775109469890594 0.3327127993106842 0.4345051050186157 0.5361970067024231 6 0.9999915361404419 0 0.0 0 0.0 0 0.0 0.1551395058631897 -0.573575496673584 0.3558077812194824 0.5728934407234192 -0.44907987117767334 -0.6855983138084412 0.43747836351394653 0.48807579278945923 6 0.9999913573265076 0 0.0 0 0.0 0 0.0 0.15195131301879883 -0.530752420425415 0.3579319715499878 0.634815514087677 -0.03268532454967499 -0.7719351649284363 0.41578006744384766 0.49039819836616516 6 0.9999616742134094 0 0.0 0 0.0 0 0.0 0.09503942728042603 -0.5187876224517822 0.4470318555831909 -0.6328318119049072 0.1662037968635559 0.7562181353569031 0.030207481235265732 0.966705858707428 6 0.9998917579650879 0 0.0 0 0.0 0 0.0 0.08934891223907471 -0.5597443580627441 0.4588078260421753 -0.8483535051345825 0.28254035115242004 0.44770652055740356 0.02459888905286789 0.9870380163192749 6 0.9999756813049316 0 0.0 0 0.0 0 0.0 0.15899169445037842 -0.5631530284881592 0.4472743272781372 0.9405804872512817 -0.06775109469890594 0.3327127993106842 0.060366492718458176 0.9931369423866272 6 0.9999915361404419 0 0.0 0 0.0 0 0.0 0.08934891223907471 -0.5597443580627441 0.4588078260421753 -0.8483535051345825 0.28254035115242004 0.44770652055740356 0.23897626996040344 0.9261899590492249 6 0.9999756813049316 0 0.0 0 0.0 0 0.0 0.07761454582214355 -0.5762221813201904 0.4922894239425659 -0.7108676433563232 0.4380016326904297 0.5502487421035767 0.2568512558937073 0.9330030679702759 6 0.9999874234199524 0 0.0 0 0.0 0 0.0 0.16460078954696655 -0.5697596073150635 0.48491013050079346 0.7637562155723572 0.4125797152519226 0.49638354778289795 0.2568512558937073 0.8885793089866638 6 0.9999933242797852 0 0.0 0 0.0 0 0.0 0.07761454582214355 -0.5762221813201904 0.4922894239425659 -0.7108676433563232 0.4380016326904297 0.5502487421035767 0.7915221452713013 0.8456106185913086 6 0.9999874234199524 0 0.0 0 0.0 0 0.0 0.0876038670539856 -0.6115889549255371 0.5072916746139526 -0.4042786955833435 -0.41471603512763977 0.8152104020118713 0.7738296985626221 0.848929762840271 6 0.9999920725822449 0 0.0 0 0.0 0 0.0 0.1480986475944519 -0.6183133125305176 0.4906195402145386 0.5136570334434509 -0.6324961185455322 0.5796990990638733 0.7675260305404663 0.8808123469352722 6 0.9999954104423523 0 0.0 0 0.0 0 0.0 0.08802717924118042 -0.6150498390197754 0.43218982219696045 -0.69466233253479 -0.713675320148468 -0.08999908715486526 0.6530190110206604 0.7109692692756653 6 0.9999951124191284 0 0.0 0 0.0 0 0.0 0.1482757329940796 -0.6178312301635742 0.4188467264175415 0.5838801264762878 -0.8061464428901672 -0.095767080783844 0.683937668800354 0.7183980941772461 6 0.9999983906745911 0 0.0 0 0.0 0 0.0 0.1480986475944519 -0.6183133125305176 0.4906195402145386 0.5136570334434509 -0.6324961185455322 0.5796990990638733 0.6844348311424255 0.6808247566223145 6 0.9999954104423523 0 0.0 0 0.0 0 0.0 0.09195363521575928 -0.602745532989502 0.37857210636138916 -0.5757927298545837 -0.6383251547813416 -0.5108493566513062 0.654041051864624 0.7388721704483032 6 0.9999947547912598 0 0.0 0 0.0 0 0.0 0.15127533674240112 -0.6052298545837402 0.36068880558013916 0.47083956003189087 -0.5862605571746826 -0.6591998338699341 0.6844348311424255 0.7486674189567566 6 0.9999959468841553 0 0.0 0 0.0 0 0.0 0.1482757329940796 -0.6178312301635742 0.4188467264175415 0.5838801264762878 -0.8061464428901672 -0.095767080783844 0.683937668800354 0.7183980941772461 6 0.9999983906745911 0 0.0 0 0.0 0 0.0 0.09195363521575928 -0.602745532989502 0.37857210636138916 -0.5757927298545837 -0.6383251547813416 -0.5108493566513062 0.3809150457382202 0.9164982438087463 6 0.9999947547912598 0 0.0 0 0.0 0 0.0 0.08549678325653076 -0.570166826248169 0.3673415184020996 -0.7073580026626587 -0.443037211894989 -0.5507370233535767 0.39766812324523926 0.9202498197555542 6 0.9999839663505554 0 0.0 0 0.0 0 0.0 0.1551395058631897 -0.573575496673584 0.3558077812194824 0.5728934407234192 -0.44907987117767334 -0.6855983138084412 0.39766812324523926 0.8839065432548523 6 0.9999913573265076 0 0.0 0 0.0 0 0.0 0.1482757329940796 -0.6178312301635742 0.4188467264175415 0.5838801264762878 -0.8061464428901672 -0.095767080783844 0.9334527254104614 0.389056921005249 6 0.9999983906745911 0 0.0 0 0.0 0 0.0 0.15127533674240112 -0.6052298545837402 0.36068880558013916 0.47083956003189087 -0.5862605571746826 -0.6591998338699341 0.9270529747009277 0.3585353493690491 6 0.9999959468841553 0 0.0 0 0.0 0 0.0 0.1551395058631897 -0.573575496673584 0.3558077812194824 0.5728934407234192 -0.44907987117767334 -0.6855983138084412 0.91065514087677 0.3558618128299713 6 0.9999913573265076 0 0.0 0 0.0 0 0.0 0.15899169445037842 -0.5631530284881592 0.4472743272781372 0.9405804872512817 -0.06775109469890594 0.3327127993106842 0.9047964811325073 0.4037174880504608 6 0.9999915361404419 0 0.0 0 0.0 0 0.0 0.16460078954696655 -0.5697596073150635 0.48491013050079346 0.7637562155723572 0.4125797152519226 0.49638354778289795 0.9077709913253784 0.42341071367263794 6 0.9999933242797852 0 0.0 0 0.0 0 0.0 0.1480986475944519 -0.6183133125305176 0.4906195402145386 0.5136570334434509 -0.6324961185455322 0.5796990990638733 0.9334527254104614 0.42665594816207886 6 0.9999954104423523 0 0.0 0 0.0 0 0.0 0.07761454582214355 -0.5762221813201904 0.4922894239425659 -0.7108676433563232 0.4380016326904297 0.5502487421035767 0.9174387454986572 0.7464988231658936 6 0.9999874234199524 0 0.0 0 0.0 0 0.0 0.08934891223907471 -0.5597443580627441 0.4588078260421753 -0.8483535051345825 0.28254035115242004 0.44770652055740356 0.9084641337394714 0.7634201049804688 6 0.9999756813049316 0 0.0 0 0.0 0 0.0 0.08802717924118042 -0.6150498390197754 0.43218982219696045 -0.69466233253479 -0.713675320148468 -0.08999908715486526 0.9366330504417419 0.778315544128418 6 0.9999951124191284 0 0.0 0 0.0 0 0.0 0.08549678325653076 -0.570166826248169 0.3673415184020996 -0.7073580026626587 -0.443037211894989 -0.5507370233535767 0.9115410447120667 0.8106938600540161 6 0.9999839663505554 0 0.0 0 0.0 0 0.0 0.09195363521575928 -0.602745532989502 0.37857210636138916 -0.5757927298545837 -0.6383251547813416 -0.5108493566513062 0.9290568828582764 0.8056539297103882 6 0.9999947547912598 0 0.0 0 0.0 0 0.0 0.08802717924118042 -0.6150498390197754 0.43218982219696045 -0.69466233253479 -0.713675320148468 -0.08999908715486526 0.9366330504417419 0.778315544128418 6 0.9999951124191284 0 0.0 0 0.0 0 0.0 0.18308591842651367 -0.1715635061264038 -0.30947959423065186 0.6252326965332031 -0.7065645456314087 0.33136996626853943 0.21177582442760468 0.15119899809360504 5 0.7757202386856079 0 0.20105862617492676 0 0.0 0 0.0 0.18601888418197632 -0.3018697500228882 -0.4252368211746216 0.6975615620613098 -0.4051026999950409 0.5909604430198669 0.27508801221847534 0.08698911219835281 5 0.986090362071991 0 0.0 0 0.0 0 0.0 0.20441192388534546 -0.18915605545043945 -0.555695652961731 0.7800835967063904 0.13812677562236786 -0.6102175712585449 0.212846040725708 0.021823931485414505 5 0.9740641117095947 0 0.0 0 0.0 0 0.0 0.09343808889389038 -0.32038211822509766 -0.4421921968460083 -0.7430646419525146 -0.36826685070991516 0.5587328672409058 0.8042619824409485 0.8200523853302002 5 0.9944356083869934 0 0.0 0 0.0 0 0.0 0.09704774618148804 -0.392566442489624 -0.4658399820327759 -0.7643055319786072 -0.14413891732692719 0.6284981966018677 0.8038542866706848 0.8589156270027161 5 0.999832808971405 0 0.0 0 0.0 0 0.0 0.1732814908027649 -0.3921675682067871 -0.45750391483306885 0.6674093008041382 -0.2617572546005249 0.6971343159675598 0.8426058888435364 0.8613379001617432 5 0.9991129636764526 0 0.0 0 0.0 0 0.0 0.09343808889389038 -0.32038211822509766 -0.4421921968460083 -0.7430646419525146 -0.36826685070991516 0.5587328672409058 0.8824628591537476 0.573641836643219 5 0.9944356083869934 0 0.0 0 0.0 0 0.0 0.07139867544174194 -0.1890047788619995 -0.3518143892288208 -0.5797906517982483 -0.7260048389434814 0.36979278922080994 0.9073172211647034 0.4934375584125519 5 0.7999973893165588 0 0.15418323874473572 3 0.02782197669148445 0 0.0 0.061641693115234375 -0.12674754858016968 -0.5490885972976685 -0.599017322063446 0.0636310949921608 -0.7981811165809631 0.8007399439811707 0.49180278182029724 5 0.8647013306617737 0 0.07323106378316879 3 0.02173721417784691 2 0.0023119263350963593 0.0 -0.034700654447078705 -0.5120750665664673 0.0 -0.28131961822509766 -0.9595934748649597 0.804821252822876 0.43789535760879517 0 0.4035522937774658 5 0.21959787607192993 3 0.21959787607192993 2 0.1571648120880127 0.061641693115234375 -0.12674754858016968 -0.5490885972976685 -0.599017322063446 0.0636310949921608 -0.7981811165809631 0.8007399439811707 0.49180278182029724 5 0.8647013306617737 0 0.07323106378316879 3 0.02173721417784691 2 0.0023119263350963593 0.07139867544174194 -0.1890047788619995 -0.3518143892288208 -0.5797906517982483 -0.7260048389434814 0.36979278922080994 0.9073172211647034 0.4934375584125519 5 0.7999973893165588 0 0.15418323874473572 3 0.02782197669148445 0 0.0 0.18601888418197632 -0.3018697500228882 -0.4252368211746216 0.6975615620613098 -0.4051026999950409 0.5909604430198669 0.8518539071083069 0.8132774829864502 5 0.986090362071991 0 0.0 0 0.0 0 0.0 0.18308591842651367 -0.1715635061264038 -0.30947959423065186 0.6252326965332031 -0.7065645456314087 0.33136996626853943 0.8518539071083069 0.7395947575569153 5 0.7757202386856079 0 0.20105862617492676 0 0.0 0 0.0 0.07139867544174194 -0.1890047788619995 -0.3518143892288208 -0.5797906517982483 -0.7260048389434814 0.36979278922080994 0.7954190373420715 0.7463236451148987 5 0.7999973893165588 0 0.15418323874473572 3 0.02782197669148445 0 0.0 0.20441192388534546 -0.18915605545043945 -0.555695652961731 0.7800835967063904 0.13812677562236786 -0.6102175712585449 0.9039897918701172 0.22283343970775604 5 0.9740641117095947 0 0.0 0 0.0 0 0.0 0.08439087867736816 -0.21313560009002686 -0.5862895250320435 -0.5681020617485046 0.09179967641830444 -0.8178045153617859 0.8441900014877319 0.2085101306438446 5 0.964721143245697 0 0.0 0 0.0 0 0.0 0.061641693115234375 -0.12674754858016968 -0.5490885972976685 -0.599017322063446 0.0636310949921608 -0.7981811165809631 0.8298012614250183 0.2538372874259949 5 0.8647013306617737 0 0.07323106378316879 3 0.02173721417784691 2 0.0023119263350963593 0.15635263919830322 0.0019541755318641663 0.4368339776992798 0.9516891837120056 0.06549271941184998 0.299966424703598 0.09115571528673172 0.7004624009132385 0 0.4180992841720581 6 0.33493271470069885 1 0.23640868067741394 0 0.0 0.09416019916534424 0.07008225470781326 0.5274871587753296 0.6548966765403748 -0.6562089920043945 0.3748283386230469 0.060154158622026443 0.6571521162986755 1 0.8562959432601929 0 0.09284236282110214 6 0.03691690042614937 0 0.0 0.050073862075805664 0.02092299610376358 0.5243707895278931 0.6866664886474609 -0.40858179330825806 0.6012146472930908 0.0349784754216671 0.6804375052452087 1 0.844631552696228 6 0.10059148073196411 0 0.019277770072221756 0 0.0 0.1328907608985901 0.08454591780900955 0.4755467176437378 0.9486068487167358 -0.2300790399312973 0.21716971695423126 0.10511094331741333 0.5692154169082642 1 0.7616633176803589 0 0.1789185106754303 6 0.05522337555885315 0 0.0 0.09416019916534424 0.07008225470781326 0.5274871587753296 0.6548966765403748 -0.6562089920043945 0.3748283386230469 0.11589144915342331 0.5961412787437439 1 0.8562959432601929 0 0.09284236282110214 6 0.03691690042614937 0 0.0 0.15635263919830322 0.0019541755318641663 0.4368339776992798 0.9516891837120056 0.06549271941184998 0.299966424703598 0.1451314240694046 0.5465568900108337 0 0.4180992841720581 6 0.33493271470069885 1 0.23640868067741394 0 0.0 0.20714151859283447 -0.0656772330403328 -0.5096536874771118 0.7676015496253967 0.22464674711227417 -0.600207507610321 0.9018306136131287 0.28798139095306396 5 0.8890505433082581 0 0.06969472020864487 2 0.015910718590021133 0 0.0 0.061641693115234375 -0.12674754858016968 -0.5490885972976685 -0.599017322063446 0.0636310949921608 -0.7981811165809631 0.8298012614250183 0.2538372874259949 5 0.8647013306617737 0 0.07323106378316879 3 0.02173721417784691 2 0.0023119263350963593 0.0 -0.034700654447078705 -0.5120750665664673 0.0 -0.28131961822509766 -0.9595934748649597 0.7954190373420715 0.3016514182090759 0 0.4035522937774658 5 0.21959787607192993 3 0.21959787607192993 2 0.1571648120880127 0.20858150720596313 0.007689781486988068 -0.4805508852005005 0.7801751494407654 -0.053529463708400726 -0.6232184767723083 0.11399266123771667 0.06662172824144363 5 0.6917824745178223 0 0.18764761090278625 2 0.10546614229679108 0 0.0 0.24815957248210907 -0.0371197834610939 -0.2536252737045288 0.9628284573554993 -0.26746422052383423 0.036957915872335434 0.14128771424293518 0.18390731513500214 0 0.7170878648757935 5 0.2454865425825119 2 0.007828813046216965 0 0.0 0.18308591842651367 -0.1715635061264038 -0.30947959423065186 0.6252326965332031 -0.7065645456314087 0.33136996626853943 0.21177582442760468 0.15119899809360504 5 0.7757202386856079 0 0.20105862617492676 0 0.0 0 0.0 0.24815957248210907 -0.0371197834610939 -0.2536252737045288 0.9628284573554993 -0.26746422052383423 0.036957915872335434 0.14128771424293518 0.18390731513500214 0 0.7170878648757935 5 0.2454865425825119 2 0.007828813046216965 0 0.0 0.2347235083580017 0.006545670330524445 -0.1102060079574585 0.9553208947181702 -0.24109622836112976 0.17084261775016785 0.12361200898885727 0.26020655035972595 0 0.9013984799385071 5 0.0706256553530693 0 0.0 0 0.0 0.12958550453186035 -0.1315857172012329 -0.09456980228424072 0.34760582447052 -0.9195837378501892 0.1829584687948227 0.19997769594192505 0.2649575471878052 0 0.9013321995735168 5 0.07171499729156494 0 0.0 0 0.0 0.16476905345916748 -0.032182566821575165 0.1135796308517456 0.9007843136787415 -0.41755425930023193 0.1192358136177063 0.15316157042980194 0.3764743208885193 0 0.9259851574897766 6 0.043090369552373886 0 0.0 0 0.0 0.13016337156295776 -0.10303550213575363 0.1634429693222046 0.7592394948005676 -0.6505325436592102 -0.01754814386367798 0.19253799319267273 0.40071889758110046 0 0.8383778929710388 6 0.12892886996269226 0 0.0 0 0.0 0.12958550453186035 -0.1315857172012329 -0.09456980228424072 0.34760582447052 -0.9195837378501892 0.1829584687948227 0.19997769594192505 0.2649575471878052 0 0.9013321995735168 5 0.07171499729156494 0 0.0 0 0.0 0.13016337156295776 -0.10303550213575363 0.1634429693222046 0.7592394948005676 -0.6505325436592102 -0.01754814386367798 0.19253799319267273 0.40071889758110046 0 0.8383778929710388 6 0.12892886996269226 0 0.0 0 0.0 0.16476905345916748 -0.032182566821575165 0.1135796308517456 0.9007843136787415 -0.41755425930023193 0.1192358136177063 0.15316157042980194 0.3764743208885193 0 0.9259851574897766 6 0.043090369552373886 0 0.0 0 0.0 0.14634591341018677 -0.032207198441028595 0.28267955780029297 0.9860835671424866 -0.16443373262882233 0.023529771715402603 0.15881086885929108 0.46500539779663086 0 0.6134584546089172 6 0.3347821831703186 1 0.028665635734796524 0 0.0 0.16675245761871338 0.013475604355335236 0.27252471446990967 0.9878231287002563 -0.08340708911418915 0.13122959434986115 0.13413144648075104 0.46088677644729614 0 0.7682546377182007 6 0.16683457791805267 1 0.056936174631118774 0 0.0 0.14634591341018677 -0.032207198441028595 0.28267955780029297 0.9860835671424866 -0.16443373262882233 0.023529771715402603 0.15881086885929108 0.46500539779663086 0 0.6134584546089172 6 0.3347821831703186 1 0.028665635734796524 0 0.0 0.16476905345916748 -0.032182566821575165 0.1135796308517456 0.9007843136787415 -0.41755425930023193 0.1192358136177063 0.15316157042980194 0.3764743208885193 0 0.9259851574897766 6 0.043090369552373886 0 0.0 0 0.0 0.18591099977493286 0.027745135128498077 0.1363673210144043 0.9799188375473022 -0.05694753676652908 0.1909848302602768 0.12207462638616562 0.3899834156036377 0 0.9314292669296265 6 0.028245745226740837 0 0.0 0 0.0 0.16476905345916748 -0.032182566821575165 0.1135796308517456 0.9007843136787415 -0.41755425930023193 0.1192358136177063 0.15316157042980194 0.3764743208885193 0 0.9259851574897766 6 0.043090369552373886 0 0.0 0 0.0 0.2347235083580017 0.006545670330524445 -0.1102060079574585 0.9553208947181702 -0.24109622836112976 0.17084261775016785 0.12361200898885727 0.26020655035972595 0 0.9013984799385071 5 0.0706256553530693 0 0.0 0 0.0 0.24470371007919312 0.06189621239900589 -0.2797147035598755 0.9805597066879272 0.1901303082704544 -0.04824976250529289 0.09005673974752426 0.17304474115371704 0 0.7772277593612671 5 0.15139922499656677 2 0.0652080550789833 0 0.0 0.22698575258255005 0.09685314446687698 -0.09775805473327637 0.9559617638587952 0.26496168971061707 0.126163512468338 0.07812663912773132 0.2692766785621643 0 0.9218430519104004 5 0.03574578836560249 2 0.0003750547766685486 0 0.0 0.2347235083580017 0.006545670330524445 -0.1102060079574585 0.9553208947181702 -0.24109622836112976 0.17084261775016785 0.12361200898885727 0.26020655035972595 0 0.9013984799385071 5 0.0706256553530693 0 0.0 0 0.0 0.0 0.08928192406892776 -0.5540534257888794 0.0 -0.35929441452026367 -0.9331949949264526 0.796051561832428 0.36615949869155884 2 0.8365933895111084 0 0.07663940638303757 5 0.036726269870996475 3 0.036726269870996475 0.216885507106781 0.10776758939027786 -0.49034416675567627 0.7796563506126404 0.18768882751464844 -0.5973693132400513 0.9039897918701172 0.37911513447761536 0 0.38549935817718506 5 0.30454903841018677 2 0.30049633979797363 0 0.0 0.20858150720596313 0.007689781486988068 -0.4805508852005005 0.7801751494407654 -0.053529463708400726 -0.6232184767723083 0.9003711938858032 0.3267052471637726 5 0.6917824745178223 0 0.18764761090278625 2 0.10546614229679108 0 0.0 0.20858150720596313 0.007689781486988068 -0.4805508852005005 0.7801751494407654 -0.053529463708400726 -0.6232184767723083 0.11399266123771667 0.06662172824144363 5 0.6917824745178223 0 0.18764761090278625 2 0.10546614229679108 0 0.0 0.216885507106781 0.10776758939027786 -0.49034416675567627 0.7796563506126404 0.18768882751464844 -0.5973693132400513 0.062087494879961014 0.06426440179347992 0 0.38549935817718506 5 0.30454903841018677 2 0.30049633979797363 0 0.0 0.24470371007919312 0.06189621239900589 -0.2797147035598755 0.9805597066879272 0.1901303082704544 -0.04824976250529289 0.09005673974752426 0.17304474115371704 0 0.7772277593612671 5 0.15139922499656677 2 0.0652080550789833 0 0.0 0.09570074081420898 0.19440031051635742 -0.5164247751235962 0.49549850821495056 0.5802789330482483 -0.6462904810905457 0.8421570658683777 0.4227440059185028 2 0.8343983888626099 0 0.1073855310678482 5 0.05108572542667389 0 0.0 0.15887433290481567 0.21892106533050537 -0.44221174716949463 0.5289468169212341 0.8012634515762329 -0.2795800566673279 0.8707311749458313 0.4370887577533722 2 0.6093363165855408 0 0.28971463441848755 5 0.09326215833425522 0 0.0 0.216885507106781 0.10776758939027786 -0.49034416675567627 0.7796563506126404 0.18768882751464844 -0.5973693132400513 0.9039897918701172 0.37911513447761536 0 0.38549935817718506 5 0.30454903841018677 2 0.30049633979797363 0 0.0 0.03598451614379883 0.1886899471282959 -0.6095010042190552 0.9367351531982422 0.18414868414402008 -0.29761651158332825 0.7668266892433167 0.5149851441383362 2 0.9910460710525513 0 0.0 0 0.0 0 0.0 0.0 0.2204439640045166 -0.6226273775100708 0.0 0.965636134147644 -0.2598040699958801 0.7880650162696838 0.52422696352005 2 1.0015981197357178 0 0.0 0 0.0 0 0.0 0.0 0.24354887008666992 -0.5526114702224731 0.0 0.9767143726348877 -0.2144230455160141 0.7908804416656494 0.4901359975337982 2 0.9730596542358398 0 0.0 0 0.0 0 0.0 0.0 0.08928192406892776 -0.5540534257888794 0.0 -0.35929441452026367 -0.9331949949264526 0.3732423782348633 0.6631662249565125 2 0.8365933895111084 0 0.07663940638303757 5 0.036726269870996475 3 0.036726269870996475 0.0 0.12543010711669922 -0.611486554145813 0.0 -0.9602038860321045 -0.2791833281517029 0.3850645124912262 0.6965480446815491 2 0.9726563692092896 0 0.0 0 0.0 0 0.0 0.03598451614379883 0.1886899471282959 -0.6095010042190552 0.9367351531982422 0.18414868414402008 -0.29761651158332825 0.4186630845069885 0.7031288146972656 2 0.9910460710525513 0 0.0 0 0.0 0 0.0 0.03598451614379883 0.1886899471282959 -0.6095010042190552 0.9367351531982422 0.18414868414402008 -0.29761651158332825 0.7668266892433167 0.5149851441383362 2 0.9910460710525513 0 0.0 0 0.0 0 0.0 0.03391218185424805 0.16914141178131104 -0.7118293046951294 0.9985961318016052 -0.03466902673244476 -0.0395825058221817 0.7651706337928772 0.5660513639450073 2 0.9985517859458923 0 0.0 0 0.0 0 0.0 0.0 0.20252740383148193 -0.7054659128189087 0.0 0.999908447265625 0.013458662666380405 0.785669207572937 0.5653976798057556 2 0.998930811882019 0 0.0 0 0.0 0 0.0 0.0 0.12543010711669922 -0.611486554145813 0.0 -0.9602038860321045 -0.2791833281517029 0.3850645124912262 0.6965480446815491 2 0.9726563692092896 0 0.0 0 0.0 0 0.0 0.0 0.12997519969940186 -0.7220932245254517 0.0 -0.9840693473815918 -0.17770928144454956 0.37523388862609863 0.7536645531654358 2 0.9981896281242371 0 0.0 0 0.0 0 0.0 0.03391218185424805 0.16914141178131104 -0.7118293046951294 0.9985961318016052 -0.03466902673244476 -0.0395825058221817 0.3975711762905121 0.7533164024353027 2 0.9985517859458923 0 0.0 0 0.0 0 0.0 0.03391218185424805 0.16914141178131104 -0.7118293046951294 0.9985961318016052 -0.03466902673244476 -0.0395825058221817 0.7651706337928772 0.5660513639450073 2 0.9985517859458923 0 0.0 0 0.0 0 0.0 0.03391218185424805 0.20211052894592285 -0.8192368745803833 0.9987182021141052 -0.04589983820915222 -0.020203253254294395 0.7676439881324768 0.6244237422943115 2 0.9999237060546875 0 0.0 0 0.0 0 0.0 0.0 0.22866559028625488 -0.7980247735977173 0.0 0.8856776356697083 0.46427807211875916 0.7875749468803406 0.615498423576355 2 0.9999145865440369 0 0.0 0 0.0 0 0.0 0.0 0.12997519969940186 -0.7220932245254517 0.0 -0.9840693473815918 -0.17770928144454956 0.37523388862609863 0.7536645531654358 2 0.9981896281242371 0 0.0 0 0.0 0 0.0 0.0 0.1722644567489624 -0.846596360206604 0.0 -0.8490249514579773 -0.5283058881759644 0.382790744304657 0.822054386138916 2 0.9999455809593201 0 0.0 0 0.0 0 0.0 0.03391218185424805 0.20211052894592285 -0.8192368745803833 0.9987182021141052 -0.04589983820915222 -0.020203253254294395 0.402330219745636 0.8119280338287354 2 0.9999237060546875 0 0.0 0 0.0 0 0.0 0.03391218185424805 0.20211052894592285 -0.8192368745803833 0.9987182021141052 -0.04589983820915222 -0.020203253254294395 0.7676439881324768 0.6244237422943115 2 0.9999237060546875 0 0.0 0 0.0 0 0.0 0.03248608112335205 0.2871565818786621 -0.9138075113296509 0.9984740614891052 -0.027558214962482452 -0.047822505235672 0.7761039733886719 0.6807805299758911 2 0.999992847442627 0 0.0 0 0.0 0 0.0 0.0 0.30632472038269043 -0.888379693031311 0.0 0.7523728013038635 0.6587114930152893 0.7946124076843262 0.6690369248390198 2 0.9999912977218628 0 0.0 0 0.0 0 0.0 0.0 0.1722644567489624 -0.846596360206604 0.0 -0.8490249514579773 -0.5283058881759644 0.382790744304657 0.822054386138916 2 0.9999455809593201 0 0.0 0 0.0 0 0.0 0.0 0.2664310932159424 -0.9455810785293579 0.0 -0.7245094180107117 -0.6892300248146057 0.4191298186779022 0.8830998539924622 2 0.9999951124191284 0 0.0 0 0.0 0 0.0 0.03248608112335205 0.2871565818786621 -0.9138075113296509 0.9984740614891052 -0.027558214962482452 -0.047822505235672 0.43451640009880066 0.8696845769882202 2 0.999992847442627 0 0.0 0 0.0 0 0.0 0.0 0.23639917373657227 -0.4245549440383911 0.0 0.9959410429000854 -0.08999908715486526 0.7911243438720703 0.4233974516391754 2 0.7914459109306335 0 0.1775953471660614 0 0.0 0 0.0 0.15887433290481567 0.21892106533050537 -0.44221174716949463 0.5289468169212341 0.8012634515762329 -0.2795800566673279 0.7089879512786865 0.4325237274169922 2 0.6093363165855408 0 0.28971463441848755 5 0.09326215833425522 0 0.0 0.09570074081420898 0.19440031051635742 -0.5164247751235962 0.49549850821495056 0.5802789330482483 -0.6462904810905457 0.7379171252250671 0.46803349256515503 2 0.8343983888626099 0 0.1073855310678482 5 0.05108572542667389 0 0.0 0.24470371007919312 0.06189621239900589 -0.2797147035598755 0.9805597066879272 0.1901303082704544 -0.04824976250529289 0.09005673974752426 0.17304474115371704 0 0.7772277593612671 5 0.15139922499656677 2 0.0652080550789833 0 0.0 0.216885507106781 0.10776758939027786 -0.49034416675567627 0.7796563506126404 0.18768882751464844 -0.5973693132400513 0.062087494879961014 0.06426440179347992 0 0.38549935817718506 5 0.30454903841018677 2 0.30049633979797363 0 0.0 0.15887433290481567 0.21892106533050537 -0.44221174716949463 0.5289468169212341 0.8012634515762329 -0.2795800566673279 0.009432848542928696 0.0927925854921341 2 0.6093363165855408 0 0.28971463441848755 5 0.09326215833425522 0 0.0 0.0 0.23639917373657227 -0.4245549440383911 0.0 0.9959410429000854 -0.08999908715486526 0.7911243438720703 0.4233974516391754 2 0.7914459109306335 0 0.1775953471660614 0 0.0 0 0.0 0.0 0.24447298049926758 -0.1661921739578247 0.0 0.9895016551017761 0.14435255527496338 0.7938501238822937 0.2907457947731018 0 0.8835389614105225 2 0.09514472633600235 0 0.0 0 0.0 0.17098987102508545 0.22969770431518555 -0.25236809253692627 0.573503851890564 0.8189031481742859 0.021027252078056335 0.7053508758544922 0.3356010913848877 0 0.8024826049804688 2 0.15540441870689392 5 0.02284686639904976 0 0.0 0.22698575258255005 0.09685314446687698 -0.09775805473327637 0.9559617638587952 0.26496168971061707 0.126163512468338 0.07812663912773132 0.2692766785621643 0 0.9218430519104004 5 0.03574578836560249 2 0.0003750547766685486 0 0.0 0.24470371007919312 0.06189621239900589 -0.2797147035598755 0.9805597066879272 0.1901303082704544 -0.04824976250529289 0.09005673974752426 0.17304474115371704 0 0.7772277593612671 5 0.15139922499656677 2 0.0652080550789833 0 0.0 0.17098987102508545 0.22969770431518555 -0.25236809253692627 0.573503851890564 0.8189031481742859 0.021027252078056335 0.00861236173659563 0.1923501342535019 0 0.8024826049804688 2 0.15540441870689392 5 0.02284686639904976 0 0.0 0.17741501331329346 0.1839226484298706 -0.056742191314697266 0.5986510515213013 0.765648365020752 0.23526719212532043 0.6990169882774353 0.23061582446098328 0 0.9394767880439758 2 0.021471891552209854 0 0.0 0 0.0 0.17098987102508545 0.22969770431518555 -0.25236809253692627 0.573503851890564 0.8189031481742859 0.021027252078056335 0.7053508758544922 0.3356010913848877 0 0.8024826049804688 2 0.15540441870689392 5 0.02284686639904976 0 0.0 0.0 0.24447298049926758 -0.1661921739578247 0.0 0.9895016551017761 0.14435255527496338 0.7938501238822937 0.2907457947731018 0 0.8835389614105225 2 0.09514472633600235 0 0.0 0 0.0 0.16880565881729126 0.11794913560152054 0.11694061756134033 0.7443464398384094 0.6213263273239136 0.24463637173175812 0.0762190967798233 0.3824160099029541 0 0.9508360624313354 0 0.0 0 0.0 0 0.0 0.18591099977493286 0.027745135128498077 0.1363673210144043 0.9799188375473022 -0.05694753676652908 0.1909848302602768 0.12207462638616562 0.3899834156036377 0 0.9314292669296265 6 0.028245745226740837 0 0.0 0 0.0 0.22698575258255005 0.09685314446687698 -0.09775805473327637 0.9559617638587952 0.26496168971061707 0.126163512468338 0.07812663912773132 0.2692766785621643 0 0.9218430519104004 5 0.03574578836560249 2 0.0003750547766685486 0 0.0 0.16880565881729126 0.11794913560152054 0.11694061756134033 0.7443464398384094 0.6213263273239136 0.24463637173175812 0.6981099843978882 0.13501593470573425 0 0.9508360624313354 0 0.0 0 0.0 0 0.0 0.17741501331329346 0.1839226484298706 -0.056742191314697266 0.5986510515213013 0.765648365020752 0.23526719212532043 0.6990169882774353 0.23061582446098328 0 0.9394767880439758 2 0.021471891552209854 0 0.0 0 0.0 0.0 0.18546009063720703 0.05253899097442627 0.0 0.9800409078598022 0.1987060159444809 0.7896201014518738 0.17259444296360016 0 0.9702994227409363 0 0.0 0 0.0 0 0.0 0.0 0.18546009063720703 0.1571263074874878 0.0 0.999481201171875 0.0316782146692276 0.7903990745544434 0.11860571801662445 0 0.9424790740013123 1 0.04657768830657005 0 0.0 0 0.0 0.0 0.1879560947418213 0.26575779914855957 0.0 0.9689321517944336 -0.2472609579563141 0.7914559245109558 0.06275101006031036 0 0.7974072098731995 1 0.18872691690921783 0 0.0 0 0.0 0.13336622714996338 0.11216402798891068 0.2601882219314575 0.7886288166046143 0.6137882471084595 -0.03564561903476715 0.716507077217102 0.06020791083574295 0 0.8428831696510315 1 0.11205147206783295 6 0.030460624024271965 0 0.0 0.15036439895629883 -0.08714862912893295 0.3016083240509033 0.9604480266571045 -0.09698782116174698 -0.2609332501888275 0.18725724518299103 0.4733530879020691 6 0.7862779498100281 0 0.17627522349357605 0 0.0 0 0.0 0.14634591341018677 -0.032207198441028595 0.28267955780029297 0.9860835671424866 -0.16443373262882233 0.023529771715402603 0.15881086885929108 0.46500539779663086 0 0.6134584546089172 6 0.3347821831703186 1 0.028665635734796524 0 0.0 0.15635263919830322 0.0019541755318641663 0.4368339776992798 0.9516891837120056 0.06549271941184998 0.299966424703598 0.1451314240694046 0.5465568900108337 0 0.4180992841720581 6 0.33493271470069885 1 0.23640868067741394 0 0.0 0.14348971843719482 0.04227609187364578 0.4033273458480835 0.9923093318939209 0.11435285210609436 0.047242652624845505 0.12420067191123962 0.5302112698554993 0 0.55479896068573 1 0.27051031589508057 6 0.1687029004096985 0 0.0 0.15635263919830322 0.0019541755318641663 0.4368339776992798 0.9516891837120056 0.06549271941184998 0.299966424703598 0.1451314240694046 0.5465568900108337 0 0.4180992841720581 6 0.33493271470069885 1 0.23640868067741394 0 0.0 0.14634591341018677 -0.032207198441028595 0.28267955780029297 0.9860835671424866 -0.16443373262882233 0.023529771715402603 0.15881086885929108 0.46500539779663086 0 0.6134584546089172 6 0.3347821831703186 1 0.028665635734796524 0 0.0 0.14645665884017944 0.1097654178738594 0.37481164932250977 0.9749442934989929 0.221472829580307 -0.019989624619483948 0.08871705830097198 0.5171707272529602 0 0.5417115092277527 1 0.38658398389816284 6 0.06799633800983429 0 0.0 0.14348971843719482 0.04227609187364578 0.4033273458480835 0.9923093318939209 0.11435285210609436 0.047242652624845505 0.12420067191123962 0.5302112698554993 0 0.55479896068573 1 0.27051031589508057 6 0.1687029004096985 0 0.0 0.16675245761871338 0.013475604355335236 0.27252471446990967 0.9878231287002563 -0.08340708911418915 0.13122959434986115 0.13413144648075104 0.46088677644729614 0 0.7682546377182007 6 0.16683457791805267 1 0.056936174631118774 0 0.0 0.18591099977493286 0.027745135128498077 0.1363673210144043 0.9799188375473022 -0.05694753676652908 0.1909848302602768 0.12207462638616562 0.3899834156036377 0 0.9314292669296265 6 0.028245745226740837 0 0.0 0 0.0 0.16880565881729126 0.11794913560152054 0.11694061756134033 0.7443464398384094 0.6213263273239136 0.24463637173175812 0.0762190967798233 0.3824160099029541 0 0.9508360624313354 0 0.0 0 0.0 0 0.0 0.13336622714996338 0.11216402798891068 0.2601882219314575 0.7886288166046143 0.6137882471084595 -0.03564561903476715 0.08494245260953903 0.4573333263397217 0 0.8428831696510315 1 0.11205147206783295 6 0.030460624024271965 0 0.0 0.14436477422714233 0.1705399751663208 0.42970240116119385 0.9082003235816956 0.2847071886062622 -0.30674153566360474 0.059249572455883026 0.5475928783416748 1 0.765937328338623 0 0.203308567404747 6 0.007473602890968323 0 0.0 0.1687365174293518 0.1454685926437378 0.49789369106292725 0.982451856136322 -0.15335550904273987 -0.10599078238010406 0.07277017086744308 0.5824607610702515 1 0.8803035020828247 0 0.0941576361656189 0 0.0 0 0.0 0.1328907608985901 0.08454591780900955 0.4755467176437378 0.9486068487167358 -0.2300790399312973 0.21716971695423126 0.10511094331741333 0.5692154169082642 1 0.7616633176803589 0 0.1789185106754303 6 0.05522337555885315 0 0.0 0.0 0.1879560947418213 0.26575779914855957 0.0 0.9689321517944336 -0.2472609579563141 0.7914559245109558 0.06275101006031036 0 0.7974072098731995 1 0.18872691690921783 0 0.0 0 0.0 0.0 0.21217751502990723 0.36668074131011963 0.0 0.8941618204116821 -0.44770652055740356 0.7946124076843262 0.012804902158677578 1 0.7214112877845764 0 0.26902148127555847 0 0.0 0 0.0 0.09047484397888184 0.21522080898284912 0.39295387268066406 0.5327311158180237 0.6883449554443359 -0.4922940731048584 0.749397337436676 0.00040331503259949386 1 0.795181393623352 0 0.19068458676338196 0 0.0 0 0.0 0.09047484397888184 0.21522080898284912 0.39295387268066406 0.5327311158180237 0.6883449554443359 -0.4922940731048584 0.03804061561822891 0.5298435091972351 1 0.795181393623352 0 0.19068458676338196 0 0.0 0 0.0 0.14436477422714233 0.1705399751663208 0.42970240116119385 0.9082003235816956 0.2847071886062622 -0.30674153566360474 0.059249572455883026 0.5475928783416748 1 0.765937328338623 0 0.203308567404747 6 0.007473602890968323 0 0.0 0.14645665884017944 0.1097654178738594 0.37481164932250977 0.9749442934989929 0.221472829580307 -0.019989624619483948 0.08871705830097198 0.5171707272529602 0 0.5417115092277527 1 0.38658398389816284 6 0.06799633800983429 0 0.0 0.11800521612167358 0.24999380111694336 0.48617875576019287 0.773796796798706 0.5241248607635498 -0.3556627035140991 0.021475009620189667 0.5794675946235657 1 0.9226148724555969 0 0.06844037026166916 0 0.0 0 0.0 0.15143811702728271 0.2254852056503296 0.5341702699661255 0.9232154488563538 0.25720998644828796 -0.2854396104812622 0.03369267284870148 0.6037472486495972 1 0.944068431854248 0 0.04248170927166939 0 0.0 0 0.0 0.1687365174293518 0.1454685926437378 0.49789369106292725 0.982451856136322 -0.15335550904273987 -0.10599078238010406 0.07277017086744308 0.5824607610702515 1 0.8803035020828247 0 0.0941576361656189 0 0.0 0 0.0 0.09047484397888184 0.21522080898284912 0.39295387268066406 0.5327311158180237 0.6883449554443359 -0.4922940731048584 0.03804061561822891 0.5298435091972351 1 0.795181393623352 0 0.19068458676338196 0 0.0 0 0.0 0.07563048601150513 0.27506399154663086 0.4404362440109253 0.4518570601940155 0.6767174005508423 -0.5812555551528931 0.009478164836764336 0.5564171671867371 1 0.9063013195991516 0 0.0865083560347557 0 0.0 0 0.0 0.11800521612167358 0.24999380111694336 0.48617875576019287 0.773796796798706 0.5241248607635498 -0.3556627035140991 0.021475009620189667 0.5794675946235657 1 0.9226148724555969 0 0.06844037026166916 0 0.0 0 0.0 0.0 0.2737917900085449 0.4282184839248657 0.0 0.6853236556053162 -0.7282326817512512 0.34596291184425354 0.8853135108947754 1 0.8951932191848755 0 0.09897997975349426 0 0.0 0 0.0 0.07563048601150513 0.27506399154663086 0.4404362440109253 0.4518570601940155 0.6767174005508423 -0.5812555551528931 0.3467414975166321 0.9241817593574524 1 0.9063013195991516 0 0.0865083560347557 0 0.0 0 0.0 0.09047484397888184 0.21522080898284912 0.39295387268066406 0.5327311158180237 0.6883449554443359 -0.4922940731048584 0.37843960523605347 0.9328422546386719 1 0.795181393623352 0 0.19068458676338196 0 0.0 0 0.0 0.17613452672958374 0.2313833236694336 0.6070717573165894 0.939146101474762 -0.07638783007860184 -0.334879606962204 0.2380296140909195 0.6809014678001404 1 0.9754757881164551 0 0.0 0 0.0 0 0.0 0.1612895131111145 0.33922386169433594 0.5898922681808472 0.37003692984580994 0.5403607487678528 -0.7556688189506531 0.21432805061340332 0.8298017978668213 1 0.9799929261207581 0 0.0 0 0.0 0 0.0 0.19039934873580933 0.3247871398925781 0.6355704069137573 0.7619251012802124 0.14554277062416077 0.6310617327690125 0.27696818113327026 0.8137040734291077 1 0.9823099970817566 0 0.0 0 0.0 0 0.0 0.1612895131111145 0.33922386169433594 0.5898922681808472 0.37003692984580994 0.5403607487678528 -0.7556688189506531 0.8526605367660522 0.760287344455719 1 0.9799929261207581 0 0.0 0 0.0 0 0.0 0.1190231442451477 0.3240025043487549 0.6043640375137329 -0.49604785442352295 0.7510910630226135 -0.4355906844139099 0.8601824045181274 0.8244431614875793 1 0.9815367460250854 0 0.0 0 0.0 0 0.0 0.13313615322113037 0.3669123649597168 0.6355704069137573 -0.44904935359954834 0.7006744742393494 0.5543687343597412 0.9076574444770813 0.7835649847984314 1 0.9832393527030945 0 0.0 0 0.0 0 0.0 0.15143811702728271 0.2254852056503296 0.5341702699661255 0.9232154488563538 0.25720998644828796 -0.2854396104812622 0.03369267284870148 0.6037472486495972 1 0.944068431854248 0 0.04248170927166939 0 0.0 0 0.0 0.14436250925064087 0.27292418479919434 0.5668500661849976 0.7668996453285217 0.2865687906742096 -0.574175238609314 0.01067846454679966 0.6221985220909119 1 0.9698584675788879 0 0.0006063580513000488 0 0.0 0 0.0 0.17613452672958374 0.2313833236694336 0.6070717573165894 0.939146101474762 -0.07638783007860184 -0.334879606962204 0.03147881478071213 0.6419441103935242 1 0.9754757881164551 0 0.0 0 0.0 0 0.0 0.11800521612167358 0.24999380111694336 0.48617875576019287 0.773796796798706 0.5241248607635498 -0.3556627035140991 0.021475009620189667 0.5794675946235657 1 0.9226148724555969 0 0.06844037026166916 0 0.0 0 0.0 0.10207110643386841 0.29587411880493164 0.5440686941146851 0.41743215918540955 0.8524124622344971 -0.31473737955093384 0.00040331503259949386 0.6110991835594177 1 0.9687204957008362 0 0.00479733943939209 0 0.0 0 0.0 0.14436250925064087 0.27292418479919434 0.5668500661849976 0.7668996453285217 0.2865687906742096 -0.574175238609314 0.01067846454679966 0.6221985220909119 1 0.9698584675788879 0 0.0006063580513000488 0 0.0 0 0.0 0.1190231442451477 0.3240025043487549 0.6043640375137329 -0.49604785442352295 0.7510910630226135 -0.4355906844139099 0.49227312207221985 0.6409542560577393 1 0.9815367460250854 0 0.0 0 0.0 0 0.0 0.1612895131111145 0.33922386169433594 0.5898922681808472 0.37003692984580994 0.5403607487678528 -0.7556688189506531 0.4382849633693695 0.6647792458534241 1 0.9799929261207581 0 0.0 0 0.0 0 0.0 0.10207110643386841 0.29587411880493164 0.5440686941146851 0.41743215918540955 0.8524124622344971 -0.31473737955093384 0.5052196383476257 0.7176094651222229 1 0.9687204957008362 0 0.00479733943939209 0 0.0 0 0.0 0.0 0.31928110122680664 0.5975655317306519 0.0 0.9569078683853149 0.29035308957099915 0.6522123217582703 0.6490117907524109 1 0.986151933670044 0 0.0 0 0.0 0 0.0 0.07210224866867065 0.3025968074798584 0.6355704069137573 0.08188115805387497 0.842799186706543 0.5319375991821289 0.551694929599762 0.5924338698387146 1 0.9896824359893799 0 0.0 0 0.0 0 0.0 0.07363545894622803 0.2982339859008789 0.6007412672042847 -0.04513687640428543 0.9967650175094604 -0.06619464606046677 0.5469268560409546 0.6396243572235107 1 0.9836677312850952 0 0.0 0 0.0 0 0.0 0.06822705268859863 0.31713294982910156 0.5017274618148804 0.4450819492340088 0.8710898160934448 -0.20749534666538239 0.75923091173172 0.8749287724494934 1 0.9548740983009338 0 0.032349374145269394 0 0.0 0 0.0 0.10207110643386841 0.29587411880493164 0.5440686941146851 0.41743215918540955 0.8524124622344971 -0.31473737955093384 0.766719400882721 0.8456106185913086 1 0.9687204957008362 0 0.00479733943939209 0 0.0 0 0.0 0.11800521612167358 0.24999380111694336 0.48617875576019287 0.773796796798706 0.5241248607635498 -0.3556627035140991 0.7384125590324402 0.8501654267311096 1 0.9226148724555969 0 0.06844037026166916 0 0.0 0 0.0 0.10207110643386841 0.29587411880493164 0.5440686941146851 0.41743215918540955 0.8524124622344971 -0.31473737955093384 0.5052196383476257 0.7176094651222229 1 0.9687204957008362 0 0.00479733943939209 0 0.0 0 0.0 0.06822705268859863 0.31713294982910156 0.5017274618148804 0.4450819492340088 0.8710898160934448 -0.20749534666538239 0.5548336505889893 0.7813751697540283 1 0.9548740983009338 0 0.032349374145269394 0 0.0 0 0.0 0.03973621129989624 0.31778907775878906 0.5499929189682007 0.2772911787033081 0.9470503926277161 0.16165654361248016 0.5957963466644287 0.7146220803260803 1 0.9746320247650146 0 0.0 0 0.0 0 0.0 0.0 0.3334541320800781 0.513670802116394 0.0 0.9971312880516052 -0.07556383311748505 0.6522123217582703 0.7686784863471985 1 0.9621657729148865 0 0.019739564508199692 0 0.0 0 0.0 0.03973621129989624 0.31778907775878906 0.5499929189682007 0.2772911787033081 0.9470503926277161 0.16165654361248016 0.5957963466644287 0.7146220803260803 1 0.9746320247650146 0 0.0 0 0.0 0 0.0 0.06822705268859863 0.31713294982910156 0.5017274618148804 0.4450819492340088 0.8710898160934448 -0.20749534666538239 0.5548336505889893 0.7813751697540283 1 0.9548740983009338 0 0.032349374145269394 0 0.0 0 0.0 0.0 0.31658363342285156 0.4695626497268677 0.0 0.8418835997581482 -0.539597749710083 0.766719400882721 0.9123905897140503 1 0.9410541653633118 0 0.054964829236269 0 0.0 0 0.0 0.06822705268859863 0.31713294982910156 0.5017274618148804 0.4450819492340088 0.8710898160934448 -0.20749534666538239 0.75923091173172 0.8749287724494934 1 0.9548740983009338 0 0.032349374145269394 0 0.0 0 0.0 0.07563048601150513 0.27506399154663086 0.4404362440109253 0.4518570601940155 0.6767174005508423 -0.5812555551528931 0.7320701479911804 0.8845022916793823 1 0.9063013195991516 0 0.0865083560347557 0 0.0 0 0.0 0.09704774618148804 -0.392566442489624 -0.4658399820327759 -0.7643055319786072 -0.14413891732692719 0.6284981966018677 0.8038542866706848 0.8589156270027161 5 0.999832808971405 0 0.0 0 0.0 0 0.0 0.09540045261383057 -0.5439469814300537 -0.483615517616272 -0.8756980895996094 0.18463698029518127 0.4460890591144562 0.7971614599227905 0.9384505748748779 5 0.9999970197677612 0 0.0 0 0.0 0 0.0 0.16358476877212524 -0.5438752174377441 -0.4808121919631958 0.8981902599334717 0.13892024755477905 0.41706594824790955 0.8319727182388306 0.9409989714622498 5 0.9999702572822571 0 0.0 0 0.0 0 0.0 0.10235244035720825 -0.35957908630371094 -0.5960932970046997 -0.6142460107803345 -0.017761772498488426 -0.7888729572296143 0.8124915361404419 0.6168727278709412 5 0.9956300258636475 0 0.0 0 0.0 0 0.0 0.09704774618148804 -0.392566442489624 -0.4658399820327759 -0.7643055319786072 -0.14413891732692719 0.6284981966018677 0.8815617561340332 0.6134598851203918 5 0.999832808971405 0 0.0 0 0.0 0 0.0 0.09343808889389038 -0.32038211822509766 -0.4421921968460083 -0.7430646419525146 -0.36826685070991516 0.5587328672409058 0.8824628591537476 0.573641836643219 5 0.9944356083869934 0 0.0 0 0.0 0 0.0 0.1785861849784851 -0.359180212020874 -0.5877567529678345 0.7232581377029419 -0.06591998040676117 -0.6873989105224609 0.8941572904586792 0.13316871225833893 5 0.9966251850128174 0 0.0 0 0.0 0 0.0 0.10235244035720825 -0.35957908630371094 -0.5960932970046997 -0.6142460107803345 -0.017761772498488426 -0.7888729572296143 0.8554814457893372 0.13194745779037476 5 0.9956300258636475 0 0.0 0 0.0 0 0.0 0.08439087867736816 -0.21313560009002686 -0.5862895250320435 -0.5681020617485046 0.09179967641830444 -0.8178045153617859 0.8441900014877319 0.2085101306438446 5 0.964721143245697 0 0.0 0 0.0 0 0.0 0.18601888418197632 -0.3018697500228882 -0.4252368211746216 0.6975615620613098 -0.4051026999950409 0.5909604430198669 0.27508801221847534 0.08698911219835281 5 0.986090362071991 0 0.0 0 0.0 0 0.0 0.1732814908027649 -0.3921675682067871 -0.45750391483306885 0.6674093008041382 -0.2617572546005249 0.6971343159675598 0.3210349380970001 0.06763686239719391 5 0.9991129636764526 0 0.0 0 0.0 0 0.0 0.1785861849784851 -0.359180212020874 -0.5877567529678345 0.7232581377029419 -0.06591998040676117 -0.6873989105224609 0.3002532124519348 0.00040331503259949386 5 0.9966251850128174 0 0.0 0 0.0 0 0.0 0.09202015399932861 -0.5696377754211426 -0.43102800846099854 -0.6786095499992371 0.33146151900291443 0.6554155349731445 0.18292458355426788 0.8896855115890503 5 0.9999966025352478 0 0.0 0 0.0 0 0.0 0.1669650673866272 -0.5695590972900391 -0.42794668674468994 0.6787621974945068 0.3166295289993286 0.6625568270683289 0.1829245537519455 0.928184986114502 5 0.9999889731407166 0 0.0 0 0.0 0 0.0 0.16358476877212524 -0.5438752174377441 -0.4808121919631958 0.8981902599334717 0.13892024755477905 0.41706594824790955 0.2118651568889618 0.9236057996749878 5 0.9999702572822571 0 0.0 0 0.0 0 0.0 0.08888596296310425 -0.5484790802001953 -0.578835129737854 -0.7318033576011658 -0.13727225363254547 -0.6675008535385132 0.8489667773246765 0.7082512378692627 5 0.9997803568840027 0 0.0 0 0.0 0 0.0 0.09540045261383057 -0.5439469814300537 -0.483615517616272 -0.8756980895996094 0.18463698029518127 0.4460890591144562 0.8952838778495789 0.6918089389801025 5 0.9999970197677612 0 0.0 0 0.0 0 0.0 0.09704774618148804 -0.392566442489624 -0.4658399820327759 -0.7643055319786072 -0.14413891732692719 0.6284981966018677 0.8815617561340332 0.6134598851203918 5 0.999832808971405 0 0.0 0 0.0 0 0.0 0.15707027912139893 -0.5484073162078857 -0.5760318040847778 0.7048555016517639 -0.1505172848701477 -0.6931669116020203 0.8846582770347595 0.03393390029668808 5 0.9998194575309753 0 0.0 0 0.0 0 0.0 0.08888596296310425 -0.5484790802001953 -0.578835129737854 -0.7318033576011658 -0.13727225363254547 -0.6675008535385132 0.8498412370681763 0.03303687646985054 5 0.9997803568840027 0 0.0 0 0.0 0 0.0 0.10235244035720825 -0.35957908630371094 -0.5960932970046997 -0.6142460107803345 -0.017761772498488426 -0.7888729572296143 0.8554814457893372 0.13194745779037476 5 0.9956300258636475 0 0.0 0 0.0 0 0.0 0.1732814908027649 -0.3921675682067871 -0.45750391483306885 0.6674093008041382 -0.2617572546005249 0.6971343159675598 0.3210349380970001 0.06763686239719391 5 0.9991129636764526 0 0.0 0 0.0 0 0.0 0.16358476877212524 -0.5438752174377441 -0.4808121919631958 0.8981902599334717 0.13892024755477905 0.41706594824790955 0.39850914478302 0.05124041810631752 5 0.9999702572822571 0 0.0 0 0.0 0 0.0 0.15707027912139893 -0.5484073162078857 -0.5760318040847778 0.7048555016517639 -0.1505172848701477 -0.6931669116020203 0.39849552512168884 0.0013318752171471715 5 0.9998194575309753 0 0.0 0 0.0 0 0.0 0.18308591842651367 -0.1715635061264038 -0.30947959423065186 0.6252326965332031 -0.7065645456314087 0.33136996626853943 0.9995967149734497 0.33627161383628845 5 0.7757202386856079 0 0.20105862617492676 0 0.0 0 0.0 0.12958550453186035 -0.1315857172012329 -0.09456980228424072 0.34760582447052 -0.9195837378501892 0.1829584687948227 0.9776368141174316 0.22148758172988892 0 0.9013321995735168 5 0.07171499729156494 0 0.0 0 0.0 0.0 -0.13216137886047363 -0.2887181043624878 0.0 -0.9959410429000854 0.08993804454803467 0.9047964811325073 0.3187030851840973 0 0.6482506990432739 5 0.17250163853168488 3 0.17250163853168488 0 0.0 0.13016337156295776 -0.10303550213575363 0.1634429693222046 0.7592394948005676 -0.6505325436592102 -0.01754814386367798 0.9853255748748779 0.08616168797016144 0 0.8383778929710388 6 0.12892886996269226 0 0.0 0 0.0 0.15036439895629883 -0.08714862912893295 0.3016083240509033 0.9604480266571045 -0.09698782116174698 -0.2609332501888275 0.9995967149734497 0.014335385523736477 6 0.7862779498100281 0 0.17627522349357605 0 0.0 0 0.0 0.0 -0.196242094039917 0.3226771354675293 0.0 -0.9550157189369202 -0.29651784896850586 0.9282938241958618 0.00040331503259949386 6 0.4506283402442932 4 0.4506283402442932 0 0.09200550615787506 0 0.0 0.0 -0.10864909738302231 -0.08876931667327881 0.0 -0.9990233778953552 0.04358043149113655 0.9104627370834351 0.21379117667675018 0 0.9455240964889526 0 0.0 0 0.0 0 0.0 0.12958550453186035 -0.1315857172012329 -0.09456980228424072 0.34760582447052 -0.9195837378501892 0.1829584687948227 0.9776368141174316 0.22148758172988892 0 0.9013321995735168 5 0.07171499729156494 0 0.0 0 0.0 0.13016337156295776 -0.10303550213575363 0.1634429693222046 0.7592394948005676 -0.6505325436592102 -0.01754814386367798 0.9853255748748779 0.08616168797016144 0 0.8383778929710388 6 0.12892886996269226 0 0.0 0 0.0 0.10268598794937134 -0.6122503280639648 -0.4350939989089966 -0.5183873772621155 -0.6310312151908875 0.5770744681358337 0.21411648392677307 0.8940513134002686 5 0.9999961853027344 0 0.0 0 0.0 0 0.0 0.15794646739959717 -0.6148338317871094 -0.4347497224807739 0.5692312121391296 -0.6506851315498352 0.5025177597999573 0.21267180144786835 0.9228885769844055 5 0.9999942779541016 0 0.0 0 0.0 0 0.0 0.1669650673866272 -0.5695590972900391 -0.42794668674468994 0.6787621974945068 0.3166295289993286 0.6625568270683289 0.23618458211421967 0.9276077151298523 5 0.9999889731407166 0 0.0 0 0.0 0 0.0 0.10268598794937134 -0.6122503280639648 -0.4350939989089966 -0.5183873772621155 -0.6310312151908875 0.5770744681358337 0.6814783215522766 0.8220149278640747 5 0.9999961853027344 0 0.0 0 0.0 0 0.0 0.10268598794937134 -0.6176581382751465 -0.489848256111145 -0.6539506316184998 -0.7564317584037781 -0.01031525619328022 0.681201696395874 0.7932599782943726 5 0.9999944567680359 0 0.0 0 0.0 0 0.0 0.14641422033309937 -0.6189942359924316 -0.49265921115875244 0.5785698890686035 -0.8136540055274963 -0.05630664899945259 0.6587129831314087 0.7918486595153809 5 0.9999929070472717 0 0.0 0 0.0 0 0.0 0.10268598794937134 -0.610898494720459 -0.5709654092788696 -0.5513778924942017 -0.6156193614006042 -0.5630054473876953 0.6814783215522766 0.7508853673934937 5 0.9999434351921082 0 0.0 0 0.0 0 0.0 0.14641422033309937 -0.6122345924377441 -0.5737768411636353 0.4997100830078125 -0.6077150702476501 -0.617175817489624 0.658989667892456 0.749474048614502 5 0.9999440312385559 0 0.0 0 0.0 0 0.0 0.14641422033309937 -0.6189942359924316 -0.49265921115875244 0.5785698890686035 -0.8136540055274963 -0.05630664899945259 0.6587129831314087 0.7918486595153809 5 0.9999929070472717 0 0.0 0 0.0 0 0.0 0.15707027912139893 -0.5484073162078857 -0.5760318040847778 0.7048555016517639 -0.1505172848701477 -0.6931669116020203 0.8846582770347595 0.03393390029668808 5 0.9998194575309753 0 0.0 0 0.0 0 0.0 0.14641422033309937 -0.6122345924377441 -0.5737768411636353 0.4997100830078125 -0.6077150702476501 -0.617175817489624 0.8797931671142578 0.00040331503259949386 5 0.9999440312385559 0 0.0 0 0.0 0 0.0 0.10268598794937134 -0.610898494720459 -0.5709654092788696 -0.5513778924942017 -0.6156193614006042 -0.5630054473876953 0.8572291135787964 0.0005972707876935601 5 0.9999434351921082 0 0.0 0 0.0 0 0.0 0.1669650673866272 -0.5695590972900391 -0.42794668674468994 0.6787621974945068 0.3166295289993286 0.6625568270683289 0.41296064853668213 0.07816137373447418 5 0.9999889731407166 0 0.0 0 0.0 0 0.0 0.15794646739959717 -0.6148338317871094 -0.4347497224807739 0.5692312121391296 -0.6506851315498352 0.5025177597999573 0.43639105558395386 0.07337364554405212 5 0.9999942779541016 0 0.0 0 0.0 0 0.0 0.14641422033309937 -0.6189942359924316 -0.49265921115875244 0.5785698890686035 -0.8136540055274963 -0.05630664899945259 0.43747836351394653 0.04301292449235916 5 0.9999929070472717 0 0.0 0 0.0 0 0.0 0.15707027912139893 -0.5484073162078857 -0.5760318040847778 0.7048555016517639 -0.1505172848701477 -0.6931669116020203 0.39849552512168884 0.0013318752171471715 5 0.9998194575309753 0 0.0 0 0.0 0 0.0 0.16358476877212524 -0.5438752174377441 -0.4808121919631958 0.8981902599334717 0.13892024755477905 0.41706594824790955 0.39850914478302 0.05124041810631752 5 0.9999702572822571 0 0.0 0 0.0 0 0.0 0.14641422033309937 -0.6189942359924316 -0.49265921115875244 0.5785698890686035 -0.8136540055274963 -0.05630664899945259 0.43747836351394653 0.04301292449235916 5 0.9999929070472717 0 0.0 0 0.0 0 0.0 0.09202015399932861 -0.5696377754211426 -0.43102800846099854 -0.6786095499992371 0.33146151900291443 0.6554155349731445 0.9249988794326782 0.696574330329895 5 0.9999966025352478 0 0.0 0 0.0 0 0.0 0.09540045261383057 -0.5439469814300537 -0.483615517616272 -0.8756980895996094 0.18463698029518127 0.4460890591144562 0.8952838778495789 0.6918089389801025 5 0.9999970197677612 0 0.0 0 0.0 0 0.0 0.10268598794937134 -0.6176581382751465 -0.489848256111145 -0.6539506316184998 -0.7564317584037781 -0.01031525619328022 0.90322345495224 0.7298896312713623 5 0.9999944567680359 0 0.0 0 0.0 0 0.0 0.09540045261383057 -0.5439469814300537 -0.483615517616272 -0.8756980895996094 0.18463698029518127 0.4460890591144562 0.8952838778495789 0.6918089389801025 5 0.9999970197677612 0 0.0 0 0.0 0 0.0 0.08888596296310425 -0.5484790802001953 -0.578835129737854 -0.7318033576011658 -0.13727225363254547 -0.6675008535385132 0.8489667773246765 0.7082512378692627 5 0.9997803568840027 0 0.0 0 0.0 0 0.0 0.10268598794937134 -0.610898494720459 -0.5709654092788696 -0.5513778924942017 -0.6156193614006042 -0.5630054473876953 0.8622313141822815 0.7387880682945251 5 0.9999434351921082 0 0.0 0 0.0 0 0.0 0 1 2 0 3 4 5 0 6 7 8 0 9 10 11 0 12 13 14 0 15 16 17 0 18 19 20 0 21 22 23 0 24 25 26 0 27 28 29 0 30 31 32 0 33 34 35 0 36 37 38 0 39 40 41 0 42 43 44 0 45 46 47 0 48 49 50 0 51 52 53 0 54 55 56 0 57 58 59 0 60 61 62 0 63 64 65 0 66 67 68 0 69 70 71 0 72 73 74 0 75 76 77 0 78 79 80 0 81 82 83 0 84 85 86 0 87 88 89 0 90 91 92 0 93 94 95 0 96 97 98 0 99 100 101 0 102 103 104 0 105 106 107 0 108 109 110 0 111 112 113 0 114 115 116 0 117 118 119 0 120 121 122 0 123 124 125 0 126 127 128 0 129 130 131 0 132 133 134 0 135 136 137 0 138 139 140 0 141 142 143 0 144 145 146 0 147 148 149 0 150 151 152 0 153 154 155 0 156 157 158 0 159 160 161 0 162 163 164 0 165 166 167 0 168 169 170 0 171 172 173 0 174 175 176 0 177 178 179 0 180 181 182 0 183 184 185 0 186 187 188 0 189 190 191 0 192 193 194 0 195 196 197 0 198 199 200 0 201 202 203 0 204 205 206 0 207 208 209 0 210 211 212 0 213 214 215 0 216 217 218 0 219 220 221 0 222 223 224 0 225 226 227 0 228 229 230 0 231 232 233 0 234 235 236 0 237 238 239 0 240 241 242 0 243 244 245 0 246 247 248 0 249 250 251 0 252 253 254 0 255 256 257 0 258 259 260 0 261 262 263 0 264 265 266 0 267 268 269 0 270 271 272 0 273 274 275 0 276 277 278 0 279 280 281 0 282 283 284 0 285 286 287 0 288 289 290 0 291 292 293 0 294 295 296 0 297 298 299 0 300 301 302 0 303 304 305 0 306 307 308 0 309 310 311 0 312 313 314 0 315 316 317 0 318 319 320 0 321 322 323 0 324 325 326 0 327 328 329 0 330 331 332 0 333 334 335 0 336 337 338 0 339 340 341 0 342 343 344 0 345 346 347 0 348 349 350 0 351 352 353 0 354 355 356 0 357 358 359 0 360 361 362 0 363 364 365 0 366 367 368 0 369 370 371 0 372 373 374 0 375 376 377 0 378 379 380 0 381 382 383 0 384 385 386 0 387 388 389 0 390 391 392 0 393 394 395 0 396 397 398 0 399 400 401 0 402 403 404 0 405 406 407 0 408 409 410 0 411 412 413 0 414 415 416 0 417 418 419 0 420 421 422 0 423 424 425 0 426 427 428 0 429 430 431 0 432 433 434 0 435 436 437 0 438 439 440 0 441 442 443 0 444 445 446 0 447 448 449 0 450 451 452 0 453 454 455 0 456 457 458 0 459 460 461 0 462 463 464 0 465 466 467 0 468 469 470 0 471 472 473 0 474 475 476 0 477 478 479 0 480 481 482 0 483 484 485 0 486 487 488 0 489 490 491 0 492 493 494 0 495 496 497 0 498 499 500 0 501 502 503 0 504 505 506 0 507 508 509 0 510 511 512 0 513 514 515 0 516 517 518 0 519 520 521 0 522 523 524 0 525 526 527 0 528 529 530 0 531 532 533 0 534 535 536 0 537 538 539 0 540 541 542 0 543 544 545 0 546 547 548 0 549 550 551 0 552 553 554 0 555 556 557 0 558 559 560 0 561 562 563 0 564 565 566 0 567 568 569 0 570 571 572 0 573 574 575 0 576 577 578 0 579 580 581 0 582 583 584 0 585 586 587 0 588 589 590 0 591 592 593 0 594 595 596 0 597 598 599 0 600 601 602 0 603 604 605 0 606 607 608 0 609 610 611 0 612 613 614 0 615 616 617 0 618 619 620 0 621 622 623 0 624 625 626 0 627 628 629 0 630 631 632 0 633 634 635 0 636 637 638 0 639 640 641 0 642 643 644 0 645 646 647 0 648 649 650 0 651 652 653 0 654 655 656 0 657 658 659 0 660 661 662 0 663 664 665 0 666 667 668 0 669 670 671 0 672 673 674 0 675 676 677 0 678 679 680 0 681 682 683 0 684 685 686 0 687 688 689 0 690 691 692 0 693 694 695 0 696 697 698 0 699 700 701 0 702 703 704 0 705 706 707 0 708 709 710 0 711 712 713 0 714 715 716 0 717 718 719 0 720 721 722 0 723 724 725 0 726 727 728 0 729 730 731 0 732 733 734 0 735 736 737 0 738 739 740 0 741 742 743 0 744 745 746 0 747 748 749 0 750 751 752 0 753 754 755 0 756 757 758 0 759 760 761 0 762 763 764 0 765 766 767 0 768 769 770 0 771 772 773 0 774 775 776 0 777 778 779 0 780 781 782 0 783 784 785 0 786 787 788 0 789 790 791 0 792 793 794 0 795 796 797 0 798 799 800 0 801 802 803 0 804 805 806 0 807 808 809 0 810 811 812 0 813 814 815 0 816 817 818 0 819 820 821 0 822 823 824 0 825 826 827 0 828 829 830 0 831 832 833 0 834 835 836 0 837 838 839 0 840 841 842 0 843 844 845 0 846 847 848 0 849 850 851 0 852 853 854 0 855 856 857 0 858 859 860 0 861 862 863 0 864 865 866 0 867 868 869 0 870 871 872 0 873 874 875 0 876 877 878 0 879 880 881 0 882 883 884 0 885 886 887 0 888 889 890 0 891 892 893 0 894 895 896 0 897 898 899 0 900 901 902 0 903 904 905 0 906 907 908 0 909 910 911 0 912 913 914 0 915 916 917 0 918 919 920 0 921 922 923 0 924 925 926 0 927 928 929 0 930 931 932 0 933 934 935 0 936 937 938 0 939 940 941 0 942 943 944 0 945 946 947 0 948 949 950 0 951 952 953 0 954 955 956 0 957 958 959 0 960 961 962 0 963 964 965 0 966 967 968 0 969 970 971 0 972 973 974 0 975 976 977 0 978 979 980 0 981 982 983 0 984 985 986 0 987 988 989 0 990 991 992 0 993 994 995 0 996 997 998 0 999 1000 1001 0 1002 1003 1004 0 1005 1006 1007 0 1008 1009 1010 0 1011 1012 1013 0 1014 1015 1016 0 1017 1018 1019 0 1020 1021 1022 0 1023 1024 1025 0 1026 1027 1028 0 1029 1030 1031 0 1032 1033 1034 0 1035 1036 1037 0 1038 1039 1040 0 1041 1042 1043 0 1044 1045 1046 0 1047 1048 1049 0 1050 1051 1052 0 1053 1054 1055 0 1056 1057 1058 0 1059 1060 1061 0 1062 1063 1064 0 1065 1066 1067 0 1068 1069 1070 0 1071 1072 1073 0 1074 1075 1076 0 1077 1078 1079 0 1080 1081 1082 0 1083 1084 1085 0 1086 1087 1088 0 1089 1090 1091 0 1092 1093 1094 0 1095 1096 1097 0 1098 1099 1100 0 1101 1102 1103 0 1104 1105 1106 0 1107 1108 1109 0 1110 1111 1112 0 1113 1114 1115 0 1116 1117 1118 0 1119 1120 1121 0 1122 1123 1124 0 1125 1126 1127 0 1128 1129 1130 0 1131 1132 1133 0 1134 1135 1136 0 1137 1138 1139 0 1140 1141 1142 0 1143 1144 1145 0 1146 1147 1148 0 1149 1150 1151 0 1152 1153 1154 0 1155 1156 1157 0 1158 1159 1160 0 1161 1162 1163 0 1164 1165 1166 0 1167 1168 1169 0 1170 1171 1172 0 1173 1174 1175 0 1176 1177 1178 0 1179 1180 1181 0 1182 1183 1184 0 1185 1186 1187 0 1188 1189 1190 0 1191 1192 1193 0 1194 1195 1196 0 1197 1198 1199 0 1200 1201 1202 0 1203 1204 1205 0 1206 1207 1208 0 1209 1210 1211 0 1212 1213 1214 0 1215 1216 1217 0 1218 1219 1220 0 1221 1222 1223 0 1224 1225 1226 0 1227 1228 1229 0 1230 1231 1232 0 1233 1234 1235 0 1236 1237 1238 0 1239 1240 1241 0 1242 1243 1244 0 1245 1246 1247 0 1248 1249 1250 0 1251 1252 1253 0 1254 1255 1256 0 1257 1258 1259 0 1260 1261 1262 0 1263 1264 1265 0 1266 1267 1268 0 1269 1270 1271 0 1272 1273 1274 0 1275 1276 1277 0 1278 1279 1280 0 1281 1282 1283 0 1284 1285 1286 0 1287 1288 1289 0 1290 1291 1292 0 1293 1294 1295 0 1296 1297 1298 0 1299 1300 1301 0 1302 1303 1304 0 1305 1306 1307 0 1308 1309 1310 0 1311 1312 1313 0 1314 1315 1316 0 1317 1318 1319 0 1320 1321 1322 0 1323 1324 1325 0 1326 1327 1328 0 1329 1330 1331 0 1332 1333 1334 0 1335 1336 1337 0 1338 1339 1340 0 1341 1342 1343 0 1344 1345 1346 0 1347 1348 1349 0 1350 1351 1352 0 1353 1354 1355 0 1356 1357 1358 0 1359 1360 1361 0 1362 1363 1364 0 1365 1366 1367 0 1368 1369 1370 0 1371 1372 1373 0 1374 1375 1376 0 1377 1378 1379 0 1380 1381 1382 0 1383 1384 1385 0 1386 1387 1388 0 1389 1390 1391 0 1392 1393 1394 0 1395 1396 1397 0 1398 1399 1400 0 1401 1402 1403 0 1404 1405 1406 0 1407 1408 1409 0 1410 1411 1412 0 1413 1414 1415 0 1416 1417 1418 0 1419 1420 1421 0 1422 1423 1424 0 1425 1426 1427 0 1428 1429 1430 0 1431 1432 1433 0 1434 1435 1436 0 1437 1438 1439 0 1440 1441 1442 0 1443 1444 1445 0 1446 1447 1448 0 1449 1450 1451 0 1452 1453 1454 0 1455 1456 1457 0 1458 1459 1460 0 1461 1462 1463 0 1464 1465 1466 0 1467 1468 1469 0 1470 1471 1472 0 1473 1474 1475 0 1476 1477 1478 0 1479 1480 1481 0 1482 1483 1484 0 1485 1486 1487 0 1488 1489 1490 0 1491 1492 1493 0 1494 1495 1496 0 1497 1498 1499 0 1500 1501 1502 0 1503 1504 1505 0 1506 1507 1508 0 1509 1510 1511 0 1512 1513 1514 0 1515 1516 1517 0 1518 1519 1520 0 1521 1522 1523 0 1524 1525 1526 0 1527 1528 1529 0 1530 1531 1532 0 1533 1534 1535 0 1536 1537 1538 0 1539 1540 1541 0 1542 1543 1544 0 1545 1546 1547 0 1548 1549 1550 0 1551 1552 1553 0 1554 1555 1556 0 1557 1558 1559 0 1560 1561 1562 0 1563 1564 1565 0 1566 1567 1568 0 1569 1570 1571 0 1572 1573 1574 0 1575 1576 1577 0 1578 1579 1580 0 1581 1582 1583 0 1584 1585 1586 0 1587 1588 1589 0 1590 1591 1592 0 1593 1594 1595 0 1596 1597 1598 0 1599 1600 1601 0 1602 1603 1604 0 1605 1606 1607 0 1608 1609 1610 0 1611 1612 1613 0 1614 1615 1616 0 1617 1618 1619 0 1620 1621 1622 0 1623 1624 1625 0 1626 1627 1628 0 1629 1630 1631 0 1632 1633 1634 0 1635 1636 1637 0 Root -1 -3.260666896217475e-17 0.14684738218784332 -0.29956865310668945 1.9303147655030538e-16 0.13066351413726807 0.3641815185546875 Head 0 -5.130115263794264e-17 0.2310398519039154 0.499281108379364 1.5086019426579632e-16 0.32058611512184143 0.6637502312660217 Tail 0 -6.564809743686247e-17 0.29565274715423584 -0.532566487789154 1.3955653958468768e-16 0.37149322032928467 -0.902621865272522 LegBR 0 -0.12139379978179932 0.0019579818472266197 -0.43271028995513916 -0.12922565639019012 -0.46651580929756165 -0.4973231256008148 LegFR 0 -0.1213938295841217 1.6763806343078613e-08 0.3759293556213379 -0.1292256861925125 -0.46847376227378845 0.4190046191215515 LegBL 0 0.12139379978179932 0.0019579818472266197 -0.43271028995513916 0.12922565639019012 -0.46651580929756165 -0.4973231256008148 LegFL -1 0.1213938295841217 1.6763806343078613e-08 0.3759293556213379 0.1292256861925125 -0.46847376227378845 0.4190046191215515 Root Head Tail LegBR LegFR LegBL LegFL ================================================ FILE: data/models/ftft.collmdl ================================================ mesh 58 -36.0 0.0 3.0 -34.0 0.0 1.0 -36.0 0.0 1.0 -34.0 0.10000000149011612 3.0 -29.0 0.0 1.0 -34.0 0.0 1.0 -34.0 0.10000000149011612 3.0 -29.0 0.20000000298023224 5.0 -29.0 0.30000001192092896 3.0 -36.0 0.0 3.0 -34.0 0.0 5.0 -34.0 0.10000000149011612 3.0 -29.0 0.20000000298023224 5.0 -25.0 0.20000000298023224 3.0 -29.0 0.30000001192092896 3.0 -29.0 0.0 1.0 -25.0 0.20000000298023224 3.0 -25.0 0.0 1.0 -25.0 0.10000000149011612 5.0 -29.0 0.0 10.0 -25.0 0.0 10.0 -34.0 0.0 5.0 -29.0 0.0 10.0 -29.0 0.20000000298023224 5.0 -36.0 0.0 5.0 -34.0 0.30000001192092896 10.0 -34.0 0.0 5.0 -29.0 0.0 10.0 -25.0 0.0 14.0 -25.0 0.0 10.0 -34.0 0.30000001192092896 10.0 -29.0 0.6000000238418579 14.0 -29.0 0.0 10.0 -36.0 0.800000011920929 10.0 -34.0 1.0 14.0 -34.0 0.30000001192092896 10.0 -25.0 0.0 1.0 -23.0 0.0 3.0 -23.0 0.0 1.0 -25.0 0.10000000149011612 5.0 -23.0 0.0 3.0 -25.0 0.20000000298023224 3.0 -25.0 0.0 10.0 -23.0 0.0 5.0 -25.0 0.10000000149011612 5.0 -25.0 0.0 14.0 -23.0 0.0 10.0 -25.0 0.0 10.0 -23.0 0.0 10.0 -18.0 4.0 5.0 -23.0 0.0 5.0 -18.0 4.0 10.0 -15.0 4.0 5.0 -18.0 4.0 5.0 -15.0 4.0 10.0 -13.0 2.0 5.0 -15.0 4.0 5.0 -13.0 2.0 10.0 -11.0 2.0 5.0 -13.0 2.0 5.0 -23.0 0.0 14.0 -20.0 -2.0 10.0 -23.0 0.0 10.0 -20.0 -2.0 10.0 -17.0 -2.0 14.0 -17.0 -1.0 10.0 -17.0 -2.0 14.0 -13.0 -3.0 10.0 -17.0 -1.0 10.0 -13.0 -3.0 10.0 -8.0 -4.0 14.0 -8.0 -1.0 10.0 -36.0 1.0 14.0 -36.0 5.0 10.0 -36.0 5.0 14.0 -36.0 0.800000011920929 10.0 -36.0 5.0 5.0 -36.0 5.0 10.0 -11.0 2.0 10.0 -10.0 3.0 5.0 -11.0 2.0 5.0 -10.0 3.0 10.0 -10.0 5.0 5.0 -10.0 3.0 5.0 -10.0 5.0 10.0 -12.0 6.0 5.0 -10.0 5.0 5.0 -36.0 0.0 3.0 -34.0 0.10000000149011612 3.0 -34.0 0.0 1.0 -34.0 0.10000000149011612 3.0 -29.0 0.30000001192092896 3.0 -29.0 0.0 1.0 -34.0 0.10000000149011612 3.0 -34.0 0.0 5.0 -29.0 0.20000000298023224 5.0 -36.0 0.0 3.0 -36.0 0.0 5.0 -34.0 0.0 5.0 -29.0 0.20000000298023224 5.0 -25.0 0.10000000149011612 5.0 -25.0 0.20000000298023224 3.0 -29.0 0.0 1.0 -29.0 0.30000001192092896 3.0 -25.0 0.20000000298023224 3.0 -25.0 0.10000000149011612 5.0 -29.0 0.20000000298023224 5.0 -29.0 0.0 10.0 -34.0 0.0 5.0 -34.0 0.30000001192092896 10.0 -29.0 0.0 10.0 -36.0 0.0 5.0 -36.0 0.800000011920929 10.0 -34.0 0.30000001192092896 10.0 -29.0 0.0 10.0 -29.0 0.6000000238418579 14.0 -25.0 0.0 14.0 -34.0 0.30000001192092896 10.0 -34.0 1.0 14.0 -29.0 0.6000000238418579 14.0 -36.0 0.800000011920929 10.0 -36.0 1.0 14.0 -34.0 1.0 14.0 -25.0 0.0 1.0 -25.0 0.20000000298023224 3.0 -23.0 0.0 3.0 -25.0 0.10000000149011612 5.0 -23.0 0.0 5.0 -23.0 0.0 3.0 -25.0 0.0 10.0 -23.0 0.0 10.0 -23.0 0.0 5.0 -25.0 0.0 14.0 -23.0 0.0 14.0 -23.0 0.0 10.0 -23.0 0.0 10.0 -18.0 4.0 10.0 -18.0 4.0 5.0 -18.0 4.0 10.0 -15.0 4.0 10.0 -15.0 4.0 5.0 -15.0 4.0 10.0 -13.0 2.0 10.0 -13.0 2.0 5.0 -13.0 2.0 10.0 -11.0 2.0 10.0 -11.0 2.0 5.0 -23.0 0.0 14.0 -20.0 -3.0 14.0 -20.0 -2.0 10.0 -20.0 -2.0 10.0 -20.0 -3.0 14.0 -17.0 -2.0 14.0 -17.0 -2.0 14.0 -13.0 -5.0 14.0 -13.0 -3.0 10.0 -13.0 -3.0 10.0 -13.0 -5.0 14.0 -8.0 -4.0 14.0 -36.0 1.0 14.0 -36.0 0.800000011920929 10.0 -36.0 5.0 10.0 -36.0 0.800000011920929 10.0 -36.0 0.0 5.0 -36.0 5.0 5.0 -11.0 2.0 10.0 -10.0 3.0 10.0 -10.0 3.0 5.0 -10.0 3.0 10.0 -10.0 5.0 10.0 -10.0 5.0 5.0 -10.0 5.0 10.0 -12.0 6.0 10.0 -12.0 6.0 5.0 ================================================ FILE: data/models/ftft.stmdl ================================================ 174 58 2 concrete103 concrete090 -36.0 0.0 3.0 -0.024964140728116035 0.999664306640625 -0.0 -5.396552085876465 2.8275861740112305 -5.396552085876465 2.8275861740112305 -34.0 0.0 1.0 -0.012482070364058018 0.99920654296875 -0.03744621202349663 -4.396552085876465 3.8275861740112305 -4.396552085876465 3.8275861740112305 -36.0 0.0 1.0 0.0 1.0 -0.0 -5.396552085876465 3.8275861740112305 -5.396552085876465 3.8275861740112305 -34.0 0.10000000149011612 3.0 -0.03735465556383133 0.999267578125 -0.006042664870619774 -4.396552085876465 2.8275861740112305 -4.396552085876465 2.8275861740112305 -29.0 0.0 1.0 -0.006286812946200371 0.9915769100189209 -0.12924589216709137 -1.8965520858764648 3.8275861740112305 -1.8965520858764648 3.8275861740112305 -34.0 0.0 1.0 -0.012482070364058018 0.99920654296875 -0.03744621202349663 -4.396552085876465 3.8275861740112305 -4.396552085876465 3.8275861740112305 -34.0 0.10000000149011612 3.0 -0.03735465556383133 0.999267578125 -0.006042664870619774 -4.396552085876465 2.8275861740112305 -4.396552085876465 2.8275861740112305 -29.0 0.20000000298023224 5.0 -0.007477034814655781 0.9989318251609802 0.044953763484954834 -1.8965520858764648 1.8275861740112305 -1.8965520858764648 1.8275861740112305 -29.0 0.30000001192092896 3.0 -0.007446516305208206 0.9987487196922302 -0.04931791126728058 -1.8965520858764648 2.8275861740112305 -1.8965520858764648 2.8275861740112305 -36.0 0.0 3.0 -0.024964140728116035 0.999664306640625 -0.0 -5.396552085876465 2.8275861740112305 -5.396552085876465 2.8275861740112305 -34.0 0.0 5.0 -0.013733329251408577 0.9998779296875 0.0012207403779029846 -4.396552085876465 1.8275861740112305 -4.396552085876465 1.8275861740112305 -34.0 0.10000000149011612 3.0 -0.03735465556383133 0.999267578125 -0.006042664870619774 -4.396552085876465 2.8275861740112305 -4.396552085876465 2.8275861740112305 -29.0 0.20000000298023224 5.0 -0.007477034814655781 0.9989318251609802 0.044953763484954834 -1.8965520858764648 1.8275861740112305 -1.8965520858764648 1.8275861740112305 -25.0 0.20000000298023224 3.0 0.05777153745293617 0.9978942275047302 -0.02844325080513954 0.10344791412353516 2.8275861740112305 0.10344791412353516 2.8275861740112305 -29.0 0.30000001192092896 3.0 -0.007446516305208206 0.9987487196922302 -0.04931791126728058 -1.8965520858764648 2.8275861740112305 -1.8965520858764648 2.8275861740112305 -29.0 0.0 1.0 -0.006286812946200371 0.9915769100189209 -0.12924589216709137 -1.8965520858764648 3.8275861740112305 -1.8965520858764648 3.8275861740112305 -25.0 0.20000000298023224 3.0 0.05777153745293617 0.9978942275047302 -0.02844325080513954 0.10344791412353516 2.8275861740112305 0.10344791412353516 2.8275861740112305 -25.0 0.0 1.0 0.024903103709220886 0.9968870878219604 -0.07467879354953766 0.10344791412353516 3.8275861740112305 0.10344791412353516 3.8275861740112305 -25.0 0.10000000149011612 5.0 0.04098635911941528 0.9986571669578552 0.031556136906147 0.10344791412353516 1.8275861740112305 0.10344791412353516 1.8275861740112305 -29.0 0.0 10.0 0.038636431097984314 0.9979247450828552 -0.05093539133667946 -1.8965520858764648 -0.6724138259887695 -1.8965520858764648 -0.6724138259887695 -25.0 0.0 10.0 0.003021332435309887 0.999969482421875 0.006195257417857647 0.10344791412353516 -0.6724138259887695 0.10344791412353516 -0.6724138259887695 -34.0 0.0 5.0 -0.013733329251408577 0.9998779296875 0.0012207403779029846 -4.396552085876465 1.8275861740112305 -4.396552085876465 1.8275861740112305 -29.0 0.0 10.0 0.038636431097984314 0.9979247450828552 -0.05093539133667946 -1.8965520858764648 -0.6724138259887695 -1.8965520858764648 -0.6724138259887695 -29.0 0.20000000298023224 5.0 -0.007477034814655781 0.9989318251609802 0.044953763484954834 -1.8965520858764648 1.8275861740112305 -1.8965520858764648 1.8275861740112305 -36.0 0.0 5.0 0.029908139258623123 0.9986571669578552 -0.04184087738394737 -5.396552085876465 1.8275861740112305 -5.396552085876465 1.8275861740112305 -34.0 0.30000001192092896 10.0 0.13812677562236786 0.981749951839447 -0.13052766025066376 -4.396552085876465 -0.6724138259887695 -4.396552085876465 -0.6724138259887695 -34.0 0.0 5.0 -0.013733329251408577 0.9998779296875 0.0012207403779029846 -4.396552085876465 1.8275861740112305 -4.396552085876465 1.8275861740112305 -29.0 0.0 10.0 0.038636431097984314 0.9979247450828552 -0.05093539133667946 -1.8965520858764648 -0.6724138259887695 -1.8965520858764648 -0.6724138259887695 -25.0 0.0 14.0 0.03720206394791603 0.9985961318016052 -0.03720206394791603 0.10344791412353516 -2.6724138259887695 0.10344791412353516 -2.6724138259887695 -25.0 0.0 10.0 0.003021332435309887 0.999969482421875 0.006195257417857647 0.10344791412353516 -0.6724138259887695 0.10344791412353516 -0.6724138259887695 -34.0 0.30000001192092896 10.0 0.13812677562236786 0.981749951839447 -0.13052766025066376 -4.396552085876465 -0.6724138259887695 -4.396552085876465 -0.6724138259887695 -29.0 0.6000000238418579 14.0 0.10681478679180145 0.982451856136322 -0.15274514257907867 -1.8965520858764648 -2.6724138259887695 -1.8965520858764648 -2.6724138259887695 -29.0 0.0 10.0 0.038636431097984314 0.9979247450828552 -0.05093539133667946 -1.8965520858764648 -0.6724138259887695 -1.8965520858764648 -0.6724138259887695 -36.0 0.800000011920929 10.0 0.20490127801895142 0.9681386947631836 -0.143772691488266 -5.396552085876465 -0.6724138259887695 -5.396552085876465 -0.6724138259887695 -34.0 1.0 14.0 0.07565538585186005 0.9887691736221313 -0.12881863117218018 -4.396552085876465 -2.6724138259887695 -4.396552085876465 -2.6724138259887695 -34.0 0.30000001192092896 10.0 0.13812677562236786 0.981749951839447 -0.13052766025066376 -4.396552085876465 -0.6724138259887695 -4.396552085876465 -0.6724138259887695 -25.0 0.0 1.0 0.024903103709220886 0.9968870878219604 -0.07467879354953766 0.10344791412353516 3.8275861740112305 0.10344791412353516 3.8275861740112305 -23.0 0.0 3.0 0.062288276851177216 0.9979552626609802 -0.012451551854610443 1.1034479141235352 2.8275861740112305 1.1034479141235352 2.8275861740112305 -23.0 0.0 1.0 0.0 1.0 -0.0 1.1034479141235352 3.8275861740112305 1.1034479141235352 3.8275861740112305 -25.0 0.10000000149011612 5.0 0.04098635911941528 0.9986571669578552 0.031556136906147 0.10344791412353516 1.8275861740112305 0.10344791412353516 1.8275861740112305 -23.0 0.0 3.0 0.062288276851177216 0.9979552626609802 -0.012451551854610443 1.1034479141235352 2.8275861740112305 1.1034479141235352 2.8275861740112305 -25.0 0.20000000298023224 3.0 0.05777153745293617 0.9978942275047302 -0.02844325080513954 0.10344791412353516 2.8275861740112305 0.10344791412353516 2.8275861740112305 -25.0 0.0 10.0 0.003021332435309887 0.999969482421875 0.006195257417857647 0.10344791412353516 -0.6724138259887695 0.10344791412353516 -0.6724138259887695 -23.0 0.0 5.0 0.043885618448257446 0.9989928603172302 0.007568590342998505 1.1034479141235352 1.8275861740112305 1.1034479141235352 1.8275861740112305 -25.0 0.10000000149011612 5.0 0.04098635911941528 0.9986571669578552 0.031556136906147 0.10344791412353516 1.8275861740112305 0.10344791412353516 1.8275861740112305 -25.0 0.0 14.0 0.03720206394791603 0.9985961318016052 -0.03720206394791603 0.10344791412353516 -2.6724138259887695 0.10344791412353516 -2.6724138259887695 -23.0 0.0 10.0 0.0 1.0 -0.0 1.1034479141235352 -0.6724138259887695 1.1034479141235352 -0.6724138259887695 -25.0 0.0 10.0 0.003021332435309887 0.999969482421875 0.006195257417857647 0.10344791412353516 -0.6724138259887695 0.10344791412353516 -0.6724138259887695 -23.0 0.0 10.0 -0.6246833801269531 0.7808465957641602 -0.0 1.1034479141235352 -0.6724138259887695 1.1034479141235352 -0.6724138259887695 -18.0 4.0 5.0 -0.6246833801269531 0.7808465957641602 -0.0 3.603447914123535 1.8275861740112305 3.603447914123535 1.8275861740112305 -23.0 0.0 5.0 -0.6246833801269531 0.7808465957641602 -0.0 1.1034479141235352 1.8275861740112305 1.1034479141235352 1.8275861740112305 -18.0 4.0 10.0 0.0 1.0 -0.0 3.603447914123535 -0.6724138259887695 3.603447914123535 -0.6724138259887695 -15.0 4.0 5.0 0.0 1.0 -0.0 5.103447914123535 1.8275861740112305 5.103447914123535 1.8275861740112305 -18.0 4.0 5.0 0.0 1.0 -0.0 3.603447914123535 1.8275861740112305 3.603447914123535 1.8275861740112305 -15.0 4.0 10.0 0.7070833444595337 0.7070833444595337 -0.0 5.103447914123535 -0.6724138259887695 5.103447914123535 -0.6724138259887695 -13.0 2.0 5.0 0.7070833444595337 0.7070833444595337 -0.0 6.103447914123535 1.8275861740112305 6.103447914123535 1.8275861740112305 -15.0 4.0 5.0 0.7070833444595337 0.7070833444595337 -0.0 5.103447914123535 1.8275861740112305 5.103447914123535 1.8275861740112305 -13.0 2.0 10.0 0.0 1.0 -0.0 6.103447914123535 -0.6724138259887695 6.103447914123535 -0.6724138259887695 -11.0 2.0 5.0 0.0 1.0 -0.0 7.103447914123535 1.8275861740112305 7.103447914123535 1.8275861740112305 -13.0 2.0 5.0 0.0 1.0 -0.0 6.103447914123535 1.8275861740112305 6.103447914123535 1.8275861740112305 -23.0 0.0 14.0 0.6363414525985718 0.765556812286377 0.09445478767156601 1.1034479141235352 -2.6724138259887695 1.1034479141235352 -2.6724138259887695 -20.0 -2.0 10.0 0.6330454349517822 0.7687917947769165 0.09039582312107086 2.603447914123535 -0.6724138259887695 2.603447914123535 -0.6724138259887695 -23.0 0.0 10.0 0.5546739101409912 0.8320261240005493 -0.0 1.1034479141235352 -0.6724138259887695 1.1034479141235352 -0.6724138259887695 -20.0 -2.0 10.0 -0.3076876103878021 0.9230628609657288 0.2307504564523697 2.603447914123535 -0.6724138259887695 2.603447914123535 -0.6724138259887695 -17.0 -2.0 14.0 -0.3076876103878021 0.9230628609657288 0.2307504564523697 4.103447914123535 -2.6724138259887695 4.103447914123535 -2.6724138259887695 -17.0 -1.0 10.0 -0.3076876103878021 0.9230628609657288 0.2307504564523697 4.103447914123535 -0.6724138259887695 4.103447914123535 -0.6724138259887695 -17.0 -2.0 14.0 0.4988860785961151 0.8148136734962463 0.2951750159263611 4.103447914123535 -2.6724138259887695 4.103447914123535 -2.6724138259887695 -13.0 -3.0 10.0 0.5069429874420166 0.8060243725776672 0.30542925000190735 6.103447914123535 -0.6724138259887695 6.103447914123535 -0.6724138259887695 -17.0 -1.0 10.0 0.4364146888256073 0.8728598952293396 0.21820734441280365 4.103447914123535 -0.6724138259887695 4.103447914123535 -0.6724138259887695 -13.0 -3.0 10.0 -0.24002808332443237 0.8278145790100098 0.5070040225982666 6.103447914123535 -0.6724138259887695 6.103447914123535 -0.6724138259887695 -8.0 -4.0 14.0 -0.24893948435783386 0.8195440769195557 0.5160679817199707 8.603447914123535 -2.6724138259887695 8.603447914123535 -2.6724138259887695 -8.0 -1.0 10.0 -0.30475783348083496 0.7619251012802124 0.5714285969734192 8.603447914123535 -0.6724138259887695 8.603447914123535 -0.6724138259887695 -36.0 1.0 14.0 1.0 0.0 -0.0 -2.6724138259887695 0.6198276281356812 -2.6724138259887695 0.6198276281356812 -36.0 5.0 10.0 1.0 0.0 -0.0 -0.6724138259887695 2.6198275089263916 -0.6724138259887695 2.6198275089263916 -36.0 5.0 14.0 1.0 0.0 -0.0 -2.6724138259887695 2.6198275089263916 -2.6724138259887695 2.6198275089263916 -36.0 0.800000011920929 10.0 1.0 0.0 -0.0 -0.6724138259887695 0.5198276042938232 -0.6724138259887695 0.5198276042938232 -36.0 5.0 5.0 1.0 0.0 -0.0 1.8275861740112305 2.6198275089263916 1.8275861740112305 2.6198275089263916 -36.0 5.0 10.0 1.0 0.0 -0.0 -0.6724138259887695 2.6198275089263916 -0.6724138259887695 2.6198275089263916 -11.0 2.0 10.0 -0.7070833444595337 0.7070833444595337 -0.0 7.103447914123535 -0.6724138259887695 7.103447914123535 -0.6724138259887695 -10.0 3.0 5.0 -0.7070833444595337 0.7070833444595337 -0.0 7.603447914123535 1.8275861740112305 7.603447914123535 1.8275861740112305 -11.0 2.0 5.0 -0.7070833444595337 0.7070833444595337 -0.0 7.103447914123535 1.8275861740112305 7.103447914123535 1.8275861740112305 -10.0 3.0 10.0 -1.0 0.0 -0.0 -0.6724138259887695 1.6198276281356812 -0.6724138259887695 1.6198276281356812 -10.0 5.0 5.0 -1.0 0.0 -0.0 1.8275861740112305 2.6198275089263916 1.8275861740112305 2.6198275089263916 -10.0 3.0 5.0 -1.0 0.0 -0.0 1.8275861740112305 1.6198276281356812 1.8275861740112305 1.6198276281356812 -10.0 5.0 10.0 -0.44718772172927856 -0.8944059610366821 -0.0 7.603447914123535 -0.6724138259887695 7.603447914123535 -0.6724138259887695 -12.0 6.0 5.0 -0.44718772172927856 -0.8944059610366821 -0.0 6.603447914123535 1.8275861740112305 6.603447914123535 1.8275861740112305 -10.0 5.0 5.0 -0.44718772172927856 -0.8944059610366821 -0.0 7.603447914123535 1.8275861740112305 7.603447914123535 1.8275861740112305 -36.0 0.0 3.0 -0.024964140728116035 0.999664306640625 -0.0 -5.396552085876465 2.8275861740112305 -5.396552085876465 2.8275861740112305 -34.0 0.10000000149011612 3.0 -0.03735465556383133 0.999267578125 -0.006042664870619774 -4.396552085876465 2.8275861740112305 -4.396552085876465 2.8275861740112305 -34.0 0.0 1.0 -0.012482070364058018 0.99920654296875 -0.03744621202349663 -4.396552085876465 3.8275861740112305 -4.396552085876465 3.8275861740112305 -34.0 0.10000000149011612 3.0 -0.03735465556383133 0.999267578125 -0.006042664870619774 -4.396552085876465 2.8275861740112305 -4.396552085876465 2.8275861740112305 -29.0 0.30000001192092896 3.0 -0.007446516305208206 0.9987487196922302 -0.04931791126728058 -1.8965520858764648 2.8275861740112305 -1.8965520858764648 2.8275861740112305 -29.0 0.0 1.0 -0.006286812946200371 0.9915769100189209 -0.12924589216709137 -1.8965520858764648 3.8275861740112305 -1.8965520858764648 3.8275861740112305 -34.0 0.10000000149011612 3.0 -0.03735465556383133 0.999267578125 -0.006042664870619774 -4.396552085876465 2.8275861740112305 -4.396552085876465 2.8275861740112305 -34.0 0.0 5.0 -0.013733329251408577 0.9998779296875 0.0012207403779029846 -4.396552085876465 1.8275861740112305 -4.396552085876465 1.8275861740112305 -29.0 0.20000000298023224 5.0 -0.007477034814655781 0.9989318251609802 0.044953763484954834 -1.8965520858764648 1.8275861740112305 -1.8965520858764648 1.8275861740112305 -36.0 0.0 3.0 -0.024964140728116035 0.999664306640625 -0.0 -5.396552085876465 2.8275861740112305 -5.396552085876465 2.8275861740112305 -36.0 0.0 5.0 0.029908139258623123 0.9986571669578552 -0.04184087738394737 -5.396552085876465 1.8275861740112305 -5.396552085876465 1.8275861740112305 -34.0 0.0 5.0 -0.013733329251408577 0.9998779296875 0.0012207403779029846 -4.396552085876465 1.8275861740112305 -4.396552085876465 1.8275861740112305 -29.0 0.20000000298023224 5.0 -0.007477034814655781 0.9989318251609802 0.044953763484954834 -1.8965520858764648 1.8275861740112305 -1.8965520858764648 1.8275861740112305 -25.0 0.10000000149011612 5.0 0.04098635911941528 0.9986571669578552 0.031556136906147 0.10344791412353516 1.8275861740112305 0.10344791412353516 1.8275861740112305 -25.0 0.20000000298023224 3.0 0.05777153745293617 0.9978942275047302 -0.02844325080513954 0.10344791412353516 2.8275861740112305 0.10344791412353516 2.8275861740112305 -29.0 0.0 1.0 -0.006286812946200371 0.9915769100189209 -0.12924589216709137 -1.8965520858764648 3.8275861740112305 -1.8965520858764648 3.8275861740112305 -29.0 0.30000001192092896 3.0 -0.007446516305208206 0.9987487196922302 -0.04931791126728058 -1.8965520858764648 2.8275861740112305 -1.8965520858764648 2.8275861740112305 -25.0 0.20000000298023224 3.0 0.05777153745293617 0.9978942275047302 -0.02844325080513954 0.10344791412353516 2.8275861740112305 0.10344791412353516 2.8275861740112305 -25.0 0.10000000149011612 5.0 0.04098635911941528 0.9986571669578552 0.031556136906147 0.10344791412353516 1.8275861740112305 0.10344791412353516 1.8275861740112305 -29.0 0.20000000298023224 5.0 -0.007477034814655781 0.9989318251609802 0.044953763484954834 -1.8965520858764648 1.8275861740112305 -1.8965520858764648 1.8275861740112305 -29.0 0.0 10.0 0.038636431097984314 0.9979247450828552 -0.05093539133667946 -1.8965520858764648 -0.6724138259887695 -1.8965520858764648 -0.6724138259887695 -34.0 0.0 5.0 -0.013733329251408577 0.9998779296875 0.0012207403779029846 -4.396552085876465 1.8275861740112305 -4.396552085876465 1.8275861740112305 -34.0 0.30000001192092896 10.0 0.13812677562236786 0.981749951839447 -0.13052766025066376 -4.396552085876465 -0.6724138259887695 -4.396552085876465 -0.6724138259887695 -29.0 0.0 10.0 0.038636431097984314 0.9979247450828552 -0.05093539133667946 -1.8965520858764648 -0.6724138259887695 -1.8965520858764648 -0.6724138259887695 -36.0 0.0 5.0 0.029908139258623123 0.9986571669578552 -0.04184087738394737 -5.396552085876465 1.8275861740112305 -5.396552085876465 1.8275861740112305 -36.0 0.800000011920929 10.0 0.20490127801895142 0.9681386947631836 -0.143772691488266 -5.396552085876465 -0.6724138259887695 -5.396552085876465 -0.6724138259887695 -34.0 0.30000001192092896 10.0 0.13812677562236786 0.981749951839447 -0.13052766025066376 -4.396552085876465 -0.6724138259887695 -4.396552085876465 -0.6724138259887695 -29.0 0.0 10.0 0.038636431097984314 0.9979247450828552 -0.05093539133667946 -1.8965520858764648 -0.6724138259887695 -1.8965520858764648 -0.6724138259887695 -29.0 0.6000000238418579 14.0 0.10681478679180145 0.982451856136322 -0.15274514257907867 -1.8965520858764648 -2.6724138259887695 -1.8965520858764648 -2.6724138259887695 -25.0 0.0 14.0 0.03720206394791603 0.9985961318016052 -0.03720206394791603 0.10344791412353516 -2.6724138259887695 0.10344791412353516 -2.6724138259887695 -34.0 0.30000001192092896 10.0 0.13812677562236786 0.981749951839447 -0.13052766025066376 -4.396552085876465 -0.6724138259887695 -4.396552085876465 -0.6724138259887695 -34.0 1.0 14.0 0.07565538585186005 0.9887691736221313 -0.12881863117218018 -4.396552085876465 -2.6724138259887695 -4.396552085876465 -2.6724138259887695 -29.0 0.6000000238418579 14.0 0.10681478679180145 0.982451856136322 -0.15274514257907867 -1.8965520858764648 -2.6724138259887695 -1.8965520858764648 -2.6724138259887695 -36.0 0.800000011920929 10.0 0.20490127801895142 0.9681386947631836 -0.143772691488266 -5.396552085876465 -0.6724138259887695 -5.396552085876465 -0.6724138259887695 -36.0 1.0 14.0 0.0 0.9987487196922302 -0.04992828145623207 -5.396552085876465 -2.6724138259887695 -5.396552085876465 -2.6724138259887695 -34.0 1.0 14.0 0.07565538585186005 0.9887691736221313 -0.12881863117218018 -4.396552085876465 -2.6724138259887695 -4.396552085876465 -2.6724138259887695 -25.0 0.0 1.0 0.024903103709220886 0.9968870878219604 -0.07467879354953766 0.10344791412353516 3.8275861740112305 0.10344791412353516 3.8275861740112305 -25.0 0.20000000298023224 3.0 0.05777153745293617 0.9978942275047302 -0.02844325080513954 0.10344791412353516 2.8275861740112305 0.10344791412353516 2.8275861740112305 -23.0 0.0 3.0 0.062288276851177216 0.9979552626609802 -0.012451551854610443 1.1034479141235352 2.8275861740112305 1.1034479141235352 2.8275861740112305 -25.0 0.10000000149011612 5.0 0.04098635911941528 0.9986571669578552 0.031556136906147 0.10344791412353516 1.8275861740112305 0.10344791412353516 1.8275861740112305 -23.0 0.0 5.0 0.043885618448257446 0.9989928603172302 0.007568590342998505 1.1034479141235352 1.8275861740112305 1.1034479141235352 1.8275861740112305 -23.0 0.0 3.0 0.062288276851177216 0.9979552626609802 -0.012451551854610443 1.1034479141235352 2.8275861740112305 1.1034479141235352 2.8275861740112305 -25.0 0.0 10.0 0.003021332435309887 0.999969482421875 0.006195257417857647 0.10344791412353516 -0.6724138259887695 0.10344791412353516 -0.6724138259887695 -23.0 0.0 10.0 0.0 1.0 -0.0 1.1034479141235352 -0.6724138259887695 1.1034479141235352 -0.6724138259887695 -23.0 0.0 5.0 0.043885618448257446 0.9989928603172302 0.007568590342998505 1.1034479141235352 1.8275861740112305 1.1034479141235352 1.8275861740112305 -25.0 0.0 14.0 0.03720206394791603 0.9985961318016052 -0.03720206394791603 0.10344791412353516 -2.6724138259887695 0.10344791412353516 -2.6724138259887695 -23.0 0.0 14.0 0.0 1.0 -0.0 1.1034479141235352 -2.6724138259887695 1.1034479141235352 -2.6724138259887695 -23.0 0.0 10.0 0.0 1.0 -0.0 1.1034479141235352 -0.6724138259887695 1.1034479141235352 -0.6724138259887695 -23.0 0.0 10.0 -0.6246833801269531 0.7808465957641602 -0.0 1.1034479141235352 -0.6724138259887695 1.1034479141235352 -0.6724138259887695 -18.0 4.0 10.0 -0.6246833801269531 0.7808465957641602 -0.0 3.603447914123535 -0.6724138259887695 3.603447914123535 -0.6724138259887695 -18.0 4.0 5.0 -0.6246833801269531 0.7808465957641602 -0.0 3.603447914123535 1.8275861740112305 3.603447914123535 1.8275861740112305 -18.0 4.0 10.0 0.0 1.0 -0.0 3.603447914123535 -0.6724138259887695 3.603447914123535 -0.6724138259887695 -15.0 4.0 10.0 0.0 1.0 -0.0 5.103447914123535 -0.6724138259887695 5.103447914123535 -0.6724138259887695 -15.0 4.0 5.0 0.0 1.0 -0.0 5.103447914123535 1.8275861740112305 5.103447914123535 1.8275861740112305 -15.0 4.0 10.0 0.7070833444595337 0.7070833444595337 -0.0 5.103447914123535 -0.6724138259887695 5.103447914123535 -0.6724138259887695 -13.0 2.0 10.0 0.7070833444595337 0.7070833444595337 -0.0 6.103447914123535 -0.6724138259887695 6.103447914123535 -0.6724138259887695 -13.0 2.0 5.0 0.7070833444595337 0.7070833444595337 -0.0 6.103447914123535 1.8275861740112305 6.103447914123535 1.8275861740112305 -13.0 2.0 10.0 0.0 1.0 -0.0 6.103447914123535 -0.6724138259887695 6.103447914123535 -0.6724138259887695 -11.0 2.0 10.0 0.0 1.0 -0.0 7.103447914123535 -0.6724138259887695 7.103447914123535 -0.6724138259887695 -11.0 2.0 5.0 0.0 1.0 -0.0 7.103447914123535 1.8275861740112305 7.103447914123535 1.8275861740112305 -23.0 0.0 14.0 0.6363414525985718 0.765556812286377 0.09445478767156601 1.1034479141235352 -2.6724138259887695 1.1034479141235352 -2.6724138259887695 -20.0 -3.0 14.0 0.69631028175354 0.69631028175354 0.174077570438385 2.603447914123535 -2.6724138259887695 2.603447914123535 -2.6724138259887695 -20.0 -2.0 10.0 0.6330454349517822 0.7687917947769165 0.09039582312107086 2.603447914123535 -0.6724138259887695 2.603447914123535 -0.6724138259887695 -20.0 -2.0 10.0 -0.3076876103878021 0.9230628609657288 0.2307504564523697 2.603447914123535 -0.6724138259887695 2.603447914123535 -0.6724138259887695 -20.0 -3.0 14.0 -0.3076876103878021 0.9230628609657288 0.2307504564523697 2.603447914123535 -2.6724138259887695 2.603447914123535 -2.6724138259887695 -17.0 -2.0 14.0 -0.3076876103878021 0.9230628609657288 0.2307504564523697 4.103447914123535 -2.6724138259887695 4.103447914123535 -2.6724138259887695 -17.0 -2.0 14.0 0.4988860785961151 0.8148136734962463 0.2951750159263611 4.103447914123535 -2.6724138259887695 4.103447914123535 -2.6724138259887695 -13.0 -5.0 14.0 0.557084858417511 0.7427594661712646 0.3713797330856323 6.103447914123535 -2.6724138259887695 6.103447914123535 -2.6724138259887695 -13.0 -3.0 10.0 0.5069429874420166 0.8060243725776672 0.30542925000190735 6.103447914123535 -0.6724138259887695 6.103447914123535 -0.6724138259887695 -13.0 -3.0 10.0 -0.24002808332443237 0.8278145790100098 0.5070040225982666 6.103447914123535 -0.6724138259887695 6.103447914123535 -0.6724138259887695 -13.0 -5.0 14.0 -0.17606128752231598 0.8804284930229187 0.44019898772239685 6.103447914123535 -2.6724138259887695 6.103447914123535 -2.6724138259887695 -8.0 -4.0 14.0 -0.24893948435783386 0.8195440769195557 0.5160679817199707 8.603447914123535 -2.6724138259887695 8.603447914123535 -2.6724138259887695 -36.0 1.0 14.0 1.0 0.0 -0.0 -2.6724138259887695 0.6198276281356812 -2.6724138259887695 0.6198276281356812 -36.0 0.800000011920929 10.0 1.0 0.0 -0.0 -0.6724138259887695 0.5198276042938232 -0.6724138259887695 0.5198276042938232 -36.0 5.0 10.0 1.0 0.0 -0.0 -0.6724138259887695 2.6198275089263916 -0.6724138259887695 2.6198275089263916 -36.0 0.800000011920929 10.0 1.0 0.0 -0.0 -0.6724138259887695 0.5198276042938232 -0.6724138259887695 0.5198276042938232 -36.0 0.0 5.0 1.0 0.0 -0.0 1.8275861740112305 0.11982759833335876 1.8275861740112305 0.11982759833335876 -36.0 5.0 5.0 1.0 0.0 -0.0 1.8275861740112305 2.6198275089263916 1.8275861740112305 2.6198275089263916 -11.0 2.0 10.0 -0.7070833444595337 0.7070833444595337 -0.0 7.103447914123535 -0.6724138259887695 7.103447914123535 -0.6724138259887695 -10.0 3.0 10.0 -0.7070833444595337 0.7070833444595337 -0.0 7.603447914123535 -0.6724138259887695 7.603447914123535 -0.6724138259887695 -10.0 3.0 5.0 -0.7070833444595337 0.7070833444595337 -0.0 7.603447914123535 1.8275861740112305 7.603447914123535 1.8275861740112305 -10.0 3.0 10.0 -1.0 0.0 -0.0 -0.6724138259887695 1.6198276281356812 -0.6724138259887695 1.6198276281356812 -10.0 5.0 10.0 -1.0 0.0 -0.0 -0.6724138259887695 2.6198275089263916 -0.6724138259887695 2.6198275089263916 -10.0 5.0 5.0 -1.0 0.0 -0.0 1.8275861740112305 2.6198275089263916 1.8275861740112305 2.6198275089263916 -10.0 5.0 10.0 -0.44718772172927856 -0.8944059610366821 -0.0 7.603447914123535 -0.6724138259887695 7.603447914123535 -0.6724138259887695 -12.0 6.0 10.0 -0.44718772172927856 -0.8944059610366821 -0.0 6.603447914123535 -0.6724138259887695 6.603447914123535 -0.6724138259887695 -12.0 6.0 5.0 -0.44718772172927856 -0.8944059610366821 -0.0 6.603447914123535 1.8275861740112305 6.603447914123535 1.8275861740112305 0 1 2 0 3 4 5 0 6 7 8 0 9 10 11 0 12 13 14 0 15 16 17 0 18 19 20 0 21 22 23 0 24 25 26 0 27 28 29 0 30 31 32 0 33 34 35 0 36 37 38 0 39 40 41 0 42 43 44 0 45 46 47 0 48 49 50 0 51 52 53 0 54 55 56 0 57 58 59 0 60 61 62 0 63 64 65 0 66 67 68 0 69 70 71 0 72 73 74 0 75 76 77 0 78 79 80 0 81 82 83 0 84 85 86 0 87 88 89 0 90 91 92 0 93 94 95 0 96 97 98 0 99 100 101 0 102 103 104 0 105 106 107 0 108 109 110 0 111 112 113 0 114 115 116 0 117 118 119 0 120 121 122 0 123 124 125 0 126 127 128 0 129 130 131 0 132 133 134 0 135 136 137 0 138 139 140 0 141 142 143 0 144 145 146 0 147 148 149 0 150 151 152 0 153 154 155 0 156 157 158 0 159 160 161 0 162 163 164 0 165 166 167 0 168 169 170 0 171 172 173 0 ================================================ FILE: data/models/kadbusest.dymdl ================================================ DYMDLv1 23748 7916 1 1 1 stolentoilet 2.073303461074829 0.3344895839691162 0.21605446934700012 0.0 -3.0518509447574615e-05 0.999969482421875 0.46527335047721863 0.618800163269043 0 1.0 0 0.0 0 0.0 0 0.0 2.1004011631011963 0.33448582887649536 0.21605446934700012 0.0 0.0 1.0 0.4800960421562195 0.6191619634628296 0 1.0 0 0.0 0 0.0 0 0.0 2.086514711380005 0.3347935080528259 0.21605446934700012 0.0 -3.0518509447574615e-05 1.0 0.47247588634490967 0.6193457841873169 0 1.0 0 0.0 0 0.0 0 0.0 2.0605223178863525 0.3335774540901184 0.21605446934700012 0.0 0.0 1.0 0.45836377143859863 0.6175618171691895 0 1.0 0 0.0 0 0.0 0 0.0 2.1004011631011963 0.33448582887649536 0.21605446934700012 0.0 0.0 1.0 0.4800960421562195 0.6191619634628296 0 1.0 0 0.0 0 0.0 0 0.0 2.073303461074829 0.3344895839691162 0.21605446934700012 0.0 -3.0518509447574615e-05 0.999969482421875 0.46527335047721863 0.618800163269043 0 1.0 0 0.0 0 0.0 0 0.0 2.0605223178863525 0.3335774540901184 0.21605446934700012 0.0 0.0 1.0 0.45836377143859863 0.6175618171691895 0 1.0 0 0.0 0 0.0 0 0.0 2.1138060092926025 0.3335627317428589 0.21605446934700012 0.0 0.0 1.0 0.48747992515563965 0.618225634098053 0 1.0 0 0.0 0 0.0 0 0.0 2.1004011631011963 0.33448582887649536 0.21605446934700012 0.0 0.0 1.0 0.4800960421562195 0.6191619634628296 0 1.0 0 0.0 0 0.0 0 0.0 2.0481717586517334 0.3320571780204773 0.21605446934700012 0.0 0.0 1.0 0.4517524838447571 0.6156635284423828 0 1.0 0 0.0 0 0.0 0 0.0 2.1138060092926025 0.3335627317428589 0.21605446934700012 0.0 0.0 1.0 0.48747992515563965 0.618225634098053 0 1.0 0 0.0 0 0.0 0 0.0 2.0605223178863525 0.3335774540901184 0.21605446934700012 0.0 0.0 1.0 0.45836377143859863 0.6175618171691895 0 1.0 0 0.0 0 0.0 0 0.0 2.0481717586517334 0.3320571780204773 0.21605446934700012 0.0 0.0 1.0 0.4517524838447571 0.6156635284423828 0 1.0 0 0.0 0 0.0 0 0.0 2.1267292499542236 0.3320242762565613 0.21605446934700012 0.0 0.0 1.0 0.4946056604385376 0.6165568828582764 0 1.0 0 0.0 0 0.0 0 0.0 2.1138060092926025 0.3335627317428589 0.21605446934700012 0.0 0.0 1.0 0.48747992515563965 0.618225634098053 0 1.0 0 0.0 0 0.0 0 0.0 2.0362517833709717 0.32992881536483765 0.21605446934700012 0.0 0.0 1.0 0.4454401135444641 0.6131366491317749 0 1.0 0 0.0 0 0.0 0 0.0 2.1267292499542236 0.3320242762565613 0.21605446934700012 0.0 0.0 1.0 0.4946056604385376 0.6165568828582764 0 1.0 0 0.0 0 0.0 0 0.0 2.0481717586517334 0.3320571780204773 0.21605446934700012 0.0 0.0 1.0 0.4517524838447571 0.6156635284423828 0 1.0 0 0.0 0 0.0 0 0.0 2.0362517833709717 0.32992881536483765 0.21605446934700012 0.0 0.0 1.0 0.4454401135444641 0.6131366491317749 0 1.0 0 0.0 0 0.0 0 0.0 2.1391708850860596 0.32987040281295776 0.21605446934700012 0.0 0.0 1.0 0.5014569759368896 0.6141777038574219 0 1.0 0 0.0 0 0.0 0 0.0 2.1267292499542236 0.3320242762565613 0.21605446934700012 0.0 0.0 1.0 0.4946056604385376 0.6165568828582764 0 1.0 0 0.0 0 0.0 0 0.0 2.0247623920440674 0.32719236612319946 0.21605446934700012 0.0 0.0 1.0 0.43942350149154663 0.6100096702575684 0 1.0 0 0.0 0 0.0 0 0.0 2.1391708850860596 0.32987040281295776 0.21605446934700012 0.0 0.0 1.0 0.5014569759368896 0.6141777038574219 0 1.0 0 0.0 0 0.0 0 0.0 2.0362517833709717 0.32992881536483765 0.21605446934700012 0.0 0.0 1.0 0.4454401135444641 0.6131366491317749 0 1.0 0 0.0 0 0.0 0 0.0 2.0247623920440674 0.32719236612319946 0.21605446934700012 0.0 0.0 1.0 0.43942350149154663 0.6100096702575684 0 1.0 0 0.0 0 0.0 0 0.0 2.1511309146881104 0.32710111141204834 0.21605446934700012 0.0 0.0 0.999969482421875 0.5080228447914124 0.6111105680465698 0 1.0 0 0.0 0 0.0 0 0.0 2.1391708850860596 0.32987040281295776 0.21605446934700012 0.0 0.0 1.0 0.5014569759368896 0.6141777038574219 0 1.0 0 0.0 0 0.0 0 0.0 2.0137035846710205 0.32384783029556274 0.21605446934700012 0.0 0.0 1.0 0.4336964786052704 0.606307864189148 0 1.0 0 0.0 0 0.0 0 0.0 2.1511309146881104 0.32710111141204834 0.21605446934700012 0.0 0.0 0.999969482421875 0.5080228447914124 0.6111105680465698 0 1.0 0 0.0 0 0.0 0 0.0 2.0247623920440674 0.32719236612319946 0.21605446934700012 0.0 0.0 1.0 0.43942350149154663 0.6100096702575684 0 1.0 0 0.0 0 0.0 0 0.0 2.0137035846710205 0.32384783029556274 0.21605446934700012 0.0 0.0 1.0 0.4336964786052704 0.606307864189148 0 1.0 0 0.0 0 0.0 0 0.0 2.162609338760376 0.3237164616584778 0.21605446934700012 0.0 0.0 1.0 0.5142971873283386 0.6073771715164185 0 1.0 0 0.0 0 0.0 0 0.0 2.1511309146881104 0.32710111141204834 0.21605446934700012 0.0 0.0 0.999969482421875 0.5080228447914124 0.6111105680465698 0 1.0 0 0.0 0 0.0 0 0.0 2.003075361251831 0.3198952078819275 0.21605446934700012 0.0 0.0 1.0 0.4282504916191101 0.6020529270172119 0 1.0 0 0.0 0 0.0 0 0.0 2.162609338760376 0.3237164616584778 0.21605446934700012 0.0 0.0 1.0 0.5142971873283386 0.6073771715164185 0 1.0 0 0.0 0 0.0 0 0.0 2.0137035846710205 0.32384783029556274 0.21605446934700012 0.0 0.0 1.0 0.4336964786052704 0.606307864189148 0 1.0 0 0.0 0 0.0 0 0.0 2.003075361251831 0.3198952078819275 0.21605446934700012 0.0 0.0 1.0 0.4282504916191101 0.6020529270172119 0 1.0 0 0.0 0 0.0 0 0.0 2.1736061573028564 0.3197163939476013 0.21605446934700012 0.0 0.0 1.0 0.5202778577804565 0.602996826171875 0 1.0 0 0.0 0 0.0 0 0.0 2.162609338760376 0.3237164616584778 0.21605446934700012 0.0 0.0 1.0 0.5142971873283386 0.6073771715164185 0 1.0 0 0.0 0 0.0 0 0.0 1.992877721786499 0.3153344988822937 0.21605446934700012 0.0 0.0 1.0 0.42307525873184204 0.5972629189491272 0 1.0 0 0.0 0 0.0 0 0.0 2.1736061573028564 0.3197163939476013 0.21605446934700012 0.0 0.0 1.0 0.5202778577804565 0.602996826171875 0 1.0 0 0.0 0 0.0 0 0.0 2.003075361251831 0.3198952078819275 0.21605446934700012 0.0 0.0 1.0 0.4282504916191101 0.6020529270172119 0 1.0 0 0.0 0 0.0 0 0.0 1.992877721786499 0.3153344988822937 0.21605446934700012 0.0 0.0 1.0 0.42307525873184204 0.5972629189491272 0 1.0 0 0.0 0 0.0 0 0.0 2.1841213703155518 0.3151009678840637 0.21605446934700012 0.0 0.0 1.0 0.5259664058685303 0.5979864597320557 0 1.0 0 0.0 0 0.0 0 0.0 2.1736061573028564 0.3197163939476013 0.21605446934700012 0.0 0.0 1.0 0.5202778577804565 0.602996826171875 0 1.0 0 0.0 0 0.0 0 0.0 1.9831106662750244 0.3101657032966614 0.21605446934700012 0.0 0.0 1.0 0.4181593060493469 0.591951847076416 0 1.0 0 0.0 0 0.0 0 0.0 2.1841213703155518 0.3151009678840637 0.21605446934700012 0.0 0.0 1.0 0.5259664058685303 0.5979864597320557 0 1.0 0 0.0 0 0.0 0 0.0 1.992877721786499 0.3153344988822937 0.21605446934700012 0.0 0.0 1.0 0.42307525873184204 0.5972629189491272 0 1.0 0 0.0 0 0.0 0 0.0 1.9831106662750244 0.3101657032966614 0.21605446934700012 0.0 0.0 1.0 0.4181593060493469 0.591951847076416 0 1.0 0 0.0 0 0.0 0 0.0 2.194154977798462 0.3098701238632202 0.21605446934700012 0.0 0.0 1.0 0.5313672423362732 0.592359721660614 0 1.0 0 0.0 0 0.0 0 0.0 2.1841213703155518 0.3151009678840637 0.21605446934700012 0.0 0.0 1.0 0.5259664058685303 0.5979864597320557 0 1.0 0 0.0 0 0.0 0 0.0 1.9737741947174072 0.30438879132270813 0.2160544991493225 0.0 0.0 1.0 0.41349029541015625 0.5861303806304932 0 1.0 0 0.0 0 0.0 0 0.0 2.194154977798462 0.3098701238632202 0.21605446934700012 0.0 0.0 1.0 0.5313672423362732 0.592359721660614 0 1.0 0 0.0 0 0.0 0 0.0 1.9831106662750244 0.3101657032966614 0.21605446934700012 0.0 0.0 1.0 0.4181593060493469 0.591951847076416 0 1.0 0 0.0 0 0.0 0 0.0 1.9737741947174072 0.30438879132270813 0.2160544991493225 0.0 0.0 1.0 0.41349029541015625 0.5861303806304932 0 1.0 0 0.0 0 0.0 0 0.0 2.203706979751587 0.3040238916873932 0.2160544991493225 0.0 0.0 1.0 0.5364871025085449 0.5861265063285828 0 1.0 0 0.0 0 0.0 0 0.0 2.194154977798462 0.3098701238632202 0.21605446934700012 0.0 0.0 1.0 0.5313672423362732 0.592359721660614 0 1.0 0 0.0 0 0.0 0 0.0 1.9648678302764893 0.29800379276275635 0.21605446934700012 0.0 0.0 1.0 0.40905532240867615 0.5798054933547974 0 1.0 0 0.0 0 0.0 0 0.0 2.203706979751587 0.3040238916873932 0.2160544991493225 0.0 0.0 1.0 0.5364871025085449 0.5861265063285828 0 1.0 0 0.0 0 0.0 0 0.0 1.9737741947174072 0.30438879132270813 0.2160544991493225 0.0 0.0 1.0 0.41349029541015625 0.5861303806304932 0 1.0 0 0.0 0 0.0 0 0.0 1.9648678302764893 0.29800379276275635 0.21605446934700012 0.0 0.0 1.0 0.40905532240867615 0.5798054933547974 0 1.0 0 0.0 0 0.0 0 0.0 2.2127773761749268 0.29756227135658264 0.2160544991493225 0.0 0.0 1.0 0.5413342714309692 0.5792933702468872 0 1.0 0 0.0 0 0.0 0 0.0 2.203706979751587 0.3040238916873932 0.2160544991493225 0.0 0.0 1.0 0.5364871025085449 0.5861265063285828 0 1.0 0 0.0 0 0.0 0 0.0 1.9563920497894287 0.29101070761680603 0.2160544991493225 0.0 0.0 1.0 0.4048417806625366 0.572981595993042 0 1.0 0 0.0 0 0.0 0 0.0 2.2127773761749268 0.29756227135658264 0.2160544991493225 0.0 0.0 1.0 0.5413342714309692 0.5792933702468872 0 1.0 0 0.0 0 0.0 0 0.0 1.9648678302764893 0.29800379276275635 0.21605446934700012 0.0 0.0 1.0 0.40905532240867615 0.5798054933547974 0 1.0 0 0.0 0 0.0 0 0.0 1.9563920497894287 0.29101070761680603 0.2160544991493225 0.0 0.0 1.0 0.4048417806625366 0.572981595993042 0 1.0 0 0.0 0 0.0 0 0.0 2.2213656902313232 0.29048529267311096 0.2160544991493225 0.0 0.0 1.0 0.5459181070327759 0.5718633532524109 0 1.0 0 0.0 0 0.0 0 0.0 2.2127773761749268 0.29756227135658264 0.2160544991493225 0.0 0.0 1.0 0.5413342714309692 0.5792933702468872 0 1.0 0 0.0 0 0.0 0 0.0 1.948448896408081 0.2835822105407715 0.21605446934700012 0.0 0.0 0.999969482421875 0.40089285373687744 0.5658196806907654 0 1.0 0 0.0 0 0.0 0 0.0 2.2213656902313232 0.29048529267311096 0.2160544991493225 0.0 0.0 1.0 0.5459181070327759 0.5718633532524109 0 1.0 0 0.0 0 0.0 0 0.0 1.9563920497894287 0.29101070761680603 0.2160544991493225 0.0 0.0 1.0 0.4048417806625366 0.572981595993042 0 1.0 0 0.0 0 0.0 0 0.0 1.948448896408081 0.2835822105407715 0.21605446934700012 0.0 0.0 0.999969482421875 0.40089285373687744 0.5658196806907654 0 1.0 0 0.0 0 0.0 0 0.0 2.2293660640716553 0.2829996347427368 0.21605446934700012 0.0 0.0 1.0 0.5501882433891296 0.564041256904602 0 1.0 0 0.0 0 0.0 0 0.0 2.2213656902313232 0.29048529267311096 0.2160544991493225 0.0 0.0 1.0 0.5459181070327759 0.5718633532524109 0 1.0 0 0.0 0 0.0 0 0.0 1.94114089012146 0.2758910357952118 0.2160544991493225 0.0 0.0 0.999969482421875 0.39724987745285034 0.5584805607795715 0 1.0 0 0.0 0 0.0 0 0.0 2.2293660640716553 0.2829996347427368 0.21605446934700012 0.0 0.0 1.0 0.5501882433891296 0.564041256904602 0 1.0 0 0.0 0 0.0 0 0.0 1.948448896408081 0.2835822105407715 0.21605446934700012 0.0 0.0 0.999969482421875 0.40089285373687744 0.5658196806907654 0 1.0 0 0.0 0 0.0 0 0.0 1.94114089012146 0.2758910357952118 0.2160544991493225 0.0 0.0 0.999969482421875 0.39724987745285034 0.5584805607795715 0 1.0 0 0.0 0 0.0 0 0.0 2.236670732498169 0.2753120958805084 0.2160544991493225 0.0 0.0 1.0 0.5540941953659058 0.5560380220413208 0 1.0 0 0.0 0 0.0 0 0.0 2.2293660640716553 0.2829996347427368 0.21605446934700012 0.0 0.0 1.0 0.5501882433891296 0.564041256904602 0 1.0 0 0.0 0 0.0 0 0.0 1.9344675540924072 0.26793715357780457 0.2160544991493225 0.0 0.0 1.0 0.39389708638191223 0.5509626269340515 0 1.0 0 0.0 0 0.0 0 0.0 2.236670732498169 0.2753120958805084 0.2160544991493225 0.0 0.0 1.0 0.5540941953659058 0.5560380220413208 0 1.0 0 0.0 0 0.0 0 0.0 1.94114089012146 0.2758910357952118 0.2160544991493225 0.0 0.0 0.999969482421875 0.39724987745285034 0.5584805607795715 0 1.0 0 0.0 0 0.0 0 0.0 1.9344675540924072 0.26793715357780457 0.2160544991493225 0.0 0.0 1.0 0.39389708638191223 0.5509626269340515 0 1.0 0 0.0 0 0.0 0 0.0 2.2432796955108643 0.2674226760864258 0.21605446934700012 0.0 0.0 1.0 0.557647705078125 0.547858476638794 0 1.0 0 0.0 0 0.0 0 0.0 2.236670732498169 0.2753120958805084 0.2160544991493225 0.0 0.0 1.0 0.5540941953659058 0.5560380220413208 0 1.0 0 0.0 0 0.0 0 0.0 1.928429365158081 0.2597205638885498 0.21605446934700012 0.0 0.0 1.0 0.3908200263977051 0.5432608127593994 0 1.0 0 0.0 0 0.0 0 0.0 2.2432796955108643 0.2674226760864258 0.21605446934700012 0.0 0.0 1.0 0.557647705078125 0.547858476638794 0 1.0 0 0.0 0 0.0 0 0.0 1.9344675540924072 0.26793715357780457 0.2160544991493225 0.0 0.0 1.0 0.39389708638191223 0.5509626269340515 0 1.0 0 0.0 0 0.0 0 0.0 1.928429365158081 0.2597205638885498 0.21605446934700012 0.0 0.0 1.0 0.3908200263977051 0.5432608127593994 0 1.0 0 0.0 0 0.0 0 0.0 2.0907180309295654 0.2598372995853424 0.2160544991493225 0.0 0.0 1.0 0.4729996919631958 0.548380970954895 0 1.0 0 0.0 0 0.0 0 0.0 2.2432796955108643 0.2674226760864258 0.21605446934700012 0.0 0.0 1.0 0.557647705078125 0.547858476638794 0 1.0 0 0.0 0 0.0 0 0.0 2.0907180309295654 0.2598372995853424 0.2160544991493225 0.0 0.0 1.0 0.4729996919631958 0.548380970954895 0 1.0 0 0.0 0 0.0 0 0.0 2.249192953109741 0.2593313753604889 0.2160544991493225 0.0 0.0 1.0 0.5608602166175842 0.5395023822784424 0 1.0 0 0.0 0 0.0 0 0.0 2.2432796955108643 0.2674226760864258 0.21605446934700012 0.0 0.0 1.0 0.557647705078125 0.547858476638794 0 1.0 0 0.0 0 0.0 0 0.0 1.928429365158081 0.2597205638885498 0.21605446934700012 0.0 0.0 1.0 0.3908200263977051 0.5432608127593994 0 1.0 0 0.0 0 0.0 0 0.0 2.084556818008423 0.2596889138221741 0.21605446934700012 0.0 0.0 1.0 0.46939122676849365 0.5482659339904785 0 1.0 0 0.0 0 0.0 0 0.0 2.0907180309295654 0.2598372995853424 0.2160544991493225 0.0 0.0 1.0 0.4729996919631958 0.548380970954895 0 1.0 0 0.0 0 0.0 0 0.0 2.0970871448516846 0.25969499349594116 0.21605446934700012 0.0 -0.0003662221133708954 0.999969482421875 0.4767376482486725 0.5481581687927246 0 1.0 0 0.0 0 0.0 0 0.0 2.249192953109741 0.2593313753604889 0.2160544991493225 0.0 0.0 1.0 0.5608602166175842 0.5395023822784424 0 1.0 0 0.0 0 0.0 0 0.0 2.0907180309295654 0.2598372995853424 0.2160544991493225 0.0 0.0 1.0 0.4729996919631958 0.548380970954895 0 1.0 0 0.0 0 0.0 0 0.0 1.9230258464813232 0.2512412965297699 0.2160544991493225 0.0 0.0 1.0 0.38800495862960815 0.5353667140007019 0 1.0 0 0.0 0 0.0 0 0.0 2.084556818008423 0.2596889138221741 0.21605446934700012 0.0 0.0 1.0 0.46939122676849365 0.5482659339904785 0 1.0 0 0.0 0 0.0 0 0.0 1.928429365158081 0.2597205638885498 0.21605446934700012 0.0 0.0 1.0 0.3908200263977051 0.5432608127593994 0 1.0 0 0.0 0 0.0 0 0.0 2.1032350063323975 0.2592681050300598 0.21605446934700012 0.0 9.155552834272385e-05 1.0 0.4803523123264313 0.5476068258285522 0 1.0 0 0.0 0 0.0 0 0.0 2.249192953109741 0.2593313753604889 0.2160544991493225 0.0 0.0 1.0 0.5608602166175842 0.5395023822784424 0 1.0 0 0.0 0 0.0 0 0.0 2.0970871448516846 0.25969499349594116 0.21605446934700012 0.0 -0.0003662221133708954 0.999969482421875 0.4767376482486725 0.5481581687927246 0 1.0 0 0.0 0 0.0 0 0.0 1.9230258464813232 0.2512412965297699 0.2160544991493225 0.0 0.0 1.0 0.38800495862960815 0.5353667140007019 0 1.0 0 0.0 0 0.0 0 0.0 2.078565835952759 0.25924378633499146 0.21605446934700012 0.0 0.0 1.0 0.4658893346786499 0.5478110909461975 0 1.0 0 0.0 0 0.0 0 0.0 2.084556818008423 0.2596889138221741 0.21605446934700012 0.0 0.0 1.0 0.46939122676849365 0.5482659339904785 0 1.0 0 0.0 0 0.0 0 0.0 2.1032350063323975 0.2592681050300598 0.21605446934700012 0.0 9.155552834272385e-05 1.0 0.4803523123264313 0.5476068258285522 0 1.0 0 0.0 0 0.0 0 0.0 2.2544105052948 0.25103816390037537 0.2160544991493225 0.0 0.0 1.0 0.5637426972389221 0.5309652090072632 0 1.0 0 0.0 0 0.0 0 0.0 2.249192953109741 0.2593313753604889 0.2160544991493225 0.0 0.0 1.0 0.5608602166175842 0.5395023822784424 0 1.0 0 0.0 0 0.0 0 0.0 2.109161615371704 0.25855663418769836 0.2160544991493225 0.0 9.155552834272385e-05 0.999969482421875 0.4838416874408722 0.5467280149459839 0 1.0 0 0.0 0 0.0 0 0.0 2.2544105052948 0.25103816390037537 0.2160544991493225 0.0 0.0 1.0 0.5637426972389221 0.5309652090072632 0 1.0 0 0.0 0 0.0 0 0.0 2.1032350063323975 0.2592681050300598 0.21605446934700012 0.0 9.155552834272385e-05 1.0 0.4803523123264313 0.5476068258285522 0 1.0 0 0.0 0 0.0 0 0.0 1.9230258464813232 0.2512412965297699 0.2160544991493225 0.0 0.0 1.0 0.38800495862960815 0.5353667140007019 0 1.0 0 0.0 0 0.0 0 0.0 2.0727450847625732 0.25850191712379456 0.2160544991493225 0.0 0.0 1.0 0.46249303221702576 0.5470205545425415 0 1.0 0 0.0 0 0.0 0 0.0 2.078565835952759 0.25924378633499146 0.21605446934700012 0.0 0.0 1.0 0.4658893346786499 0.5478110909461975 0 1.0 0 0.0 0 0.0 0 0.0 2.1148669719696045 0.2575605809688568 0.2160544991493225 0.0 0.0 1.0 0.48720449209213257 0.5455227494239807 0 1.0 0 0.0 0 0.0 0 0.0 2.2544105052948 0.25103816390037537 0.2160544991493225 0.0 0.0 1.0 0.5637426972389221 0.5309652090072632 0 1.0 0 0.0 0 0.0 0 0.0 2.109161615371704 0.25855663418769836 0.2160544991493225 0.0 9.155552834272385e-05 0.999969482421875 0.4838416874408722 0.5467280149459839 0 1.0 0 0.0 0 0.0 0 0.0 1.9230258464813232 0.2512412965297699 0.2160544991493225 0.0 0.0 1.0 0.38800495862960815 0.5353667140007019 0 1.0 0 0.0 0 0.0 0 0.0 2.067094564437866 0.2574633061885834 0.2160544991493225 0.0 0.0 1.0 0.459200918674469 0.5458978414535522 0 1.0 0 0.0 0 0.0 0 0.0 2.0727450847625732 0.25850191712379456 0.2160544991493225 0.0 0.0 1.0 0.46249303221702576 0.5470205545425415 0 1.0 0 0.0 0 0.0 0 0.0 2.1203505992889404 0.25627994537353516 0.21605446934700012 0.0 -3.0518509447574615e-05 1.0 0.49043959379196167 0.5439919233322144 0 1.0 0 0.0 0 0.0 0 0.0 2.2544105052948 0.25103816390037537 0.2160544991493225 0.0 0.0 1.0 0.5637426972389221 0.5309652090072632 0 1.0 0 0.0 0 0.0 0 0.0 2.1148669719696045 0.2575605809688568 0.2160544991493225 0.0 0.0 1.0 0.48720449209213257 0.5455227494239807 0 1.0 0 0.0 0 0.0 0 0.0 1.9230258464813232 0.2512412965297699 0.2160544991493225 0.0 0.0 1.0 0.38800495862960815 0.5353667140007019 0 1.0 0 0.0 0 0.0 0 0.0 2.0616142749786377 0.2561279237270355 0.2160544991493225 0.0 0.0 1.0 0.45601141452789307 0.5444464683532715 0 1.0 0 0.0 0 0.0 0 0.0 2.067094564437866 0.2574633061885834 0.2160544991493225 0.0 0.0 1.0 0.459200918674469 0.5458978414535522 0 1.0 0 0.0 0 0.0 0 0.0 2.12561297416687 0.254714697599411 0.2160544991493225 0.0 0.0 1.0 0.4935469329357147 0.5421359539031982 0 1.0 0 0.0 0 0.0 0 0.0 2.2544105052948 0.25103816390037537 0.2160544991493225 0.0 0.0 1.0 0.5637426972389221 0.5309652090072632 0 1.0 0 0.0 0 0.0 0 0.0 2.1203505992889404 0.25627994537353516 0.21605446934700012 0.0 -3.0518509447574615e-05 1.0 0.49043959379196167 0.5439919233322144 0 1.0 0 0.0 0 0.0 0 0.0 1.9230258464813232 0.2512412965297699 0.2160544991493225 0.0 0.0 1.0 0.38800495862960815 0.5353667140007019 0 1.0 0 0.0 0 0.0 0 0.0 2.0563042163848877 0.2544957995414734 0.21605446934700012 0.0 0.0 0.999969482421875 0.45292267203330994 0.5426691770553589 0 1.0 0 0.0 0 0.0 0 0.0 2.0616142749786377 0.2561279237270355 0.2160544991493225 0.0 0.0 1.0 0.45601141452789307 0.5444464683532715 0 1.0 0 0.0 0 0.0 0 0.0 2.1306540966033936 0.25286486744880676 0.2160544991493225 0.0 0.0 1.0 0.4965265691280365 0.5399552583694458 0 1.0 0 0.0 0 0.0 0 0.0 2.2544105052948 0.25103816390037537 0.2160544991493225 0.0 0.0 1.0 0.5637426972389221 0.5309652090072632 0 1.0 0 0.0 0 0.0 0 0.0 2.12561297416687 0.254714697599411 0.2160544991493225 0.0 0.0 1.0 0.4935469329357147 0.5421359539031982 0 1.0 0 0.0 0 0.0 0 0.0 1.9230258464813232 0.2512412965297699 0.2160544991493225 0.0 0.0 1.0 0.38800495862960815 0.5353667140007019 0 1.0 0 0.0 0 0.0 0 0.0 2.051164388656616 0.252566933631897 0.21605446934700012 0.0 0.0 1.0 0.44993263483047485 0.5405683517456055 0 1.0 0 0.0 0 0.0 0 0.0 2.0563042163848877 0.2544957995414734 0.21605446934700012 0.0 0.0 0.999969482421875 0.45292267203330994 0.5426691770553589 0 1.0 0 0.0 0 0.0 0 0.0 2.1354739665985107 0.2507304549217224 0.21605446934700012 0.0 0.0 0.999969482421875 0.49937885999679565 0.5374495983123779 0 1.0 0 0.0 0 0.0 0 0.0 2.2544105052948 0.25103816390037537 0.2160544991493225 0.0 0.0 1.0 0.5637426972389221 0.5309652090072632 0 1.0 0 0.0 0 0.0 0 0.0 2.1306540966033936 0.25286486744880676 0.2160544991493225 0.0 0.0 1.0 0.4965265691280365 0.5399552583694458 0 1.0 0 0.0 0 0.0 0 0.0 1.9230258464813232 0.2512412965297699 0.2160544991493225 0.0 0.0 1.0 0.38800495862960815 0.5353667140007019 0 1.0 0 0.0 0 0.0 0 0.0 2.0461952686309814 0.2503412961959839 0.21605446934700012 0.0 0.0 1.0 0.4470393657684326 0.5381458401679993 0 1.0 0 0.0 0 0.0 0 0.0 2.051164388656616 0.252566933631897 0.21605446934700012 0.0 0.0 1.0 0.44993263483047485 0.5405683517456055 0 1.0 0 0.0 0 0.0 0 0.0 1.9182569980621338 0.24249932169914246 0.21605448424816132 0.0 0.0 0.999969482421875 0.38543954491615295 0.5272694230079651 0 1.0 0 0.0 0 0.0 0 0.0 2.0461952686309814 0.2503412961959839 0.21605446934700012 0.0 0.0 1.0 0.4470393657684326 0.5381458401679993 0 1.0 0 0.0 0 0.0 0 0.0 1.9230258464813232 0.2512412965297699 0.2160544991493225 0.0 0.0 1.0 0.38800495862960815 0.5353667140007019 0 1.0 0 0.0 0 0.0 0 0.0 2.1354739665985107 0.2507304549217224 0.21605446934700012 0.0 0.0 0.999969482421875 0.49937885999679565 0.5374495983123779 0 1.0 0 0.0 0 0.0 0 0.0 2.25893235206604 0.2425430715084076 0.21605448424816132 0.0 0.0 1.0 0.5663050413131714 0.5222381353378296 0 1.0 0 0.0 0 0.0 0 0.0 2.2544105052948 0.25103816390037537 0.2160544991493225 0.0 0.0 1.0 0.5637426972389221 0.5309652090072632 0 1.0 0 0.0 0 0.0 0 0.0 2.1400725841522217 0.24831146001815796 0.21605448424816132 0.0 0.0 1.0 0.5021044611930847 0.5346182584762573 0 1.0 0 0.0 0 0.0 0 0.0 2.25893235206604 0.2425430715084076 0.21605448424816132 0.0 0.0 1.0 0.5663050413131714 0.5222381353378296 0 1.0 0 0.0 0 0.0 0 0.0 2.1354739665985107 0.2507304549217224 0.21605446934700012 0.0 0.0 0.999969482421875 0.49937885999679565 0.5374495983123779 0 1.0 0 0.0 0 0.0 0 0.0 1.9182569980621338 0.24249932169914246 0.21605448424816132 0.0 0.0 0.999969482421875 0.38543954491615295 0.5272694230079651 0 1.0 0 0.0 0 0.0 0 0.0 2.041396379470825 0.24781891703605652 0.21605448424816132 0.0 0.0 1.0 0.4442402422428131 0.5354030728340149 0 1.0 0 0.0 0 0.0 0 0.0 2.0461952686309814 0.2503412961959839 0.21605446934700012 0.0 0.0 1.0 0.4470393657684326 0.5381458401679993 0 1.0 0 0.0 0 0.0 0 0.0 2.144449472427368 0.2456078827381134 0.21605448424816132 0.0 0.0 1.0 0.5047039985656738 0.5314600467681885 0 1.0 0 0.0 0 0.0 0 0.0 2.25893235206604 0.2425430715084076 0.21605448424816132 0.0 0.0 1.0 0.5663050413131714 0.5222381353378296 0 1.0 0 0.0 0 0.0 0 0.0 2.1400725841522217 0.24831146001815796 0.21605448424816132 0.0 0.0 1.0 0.5021044611930847 0.5346182584762573 0 1.0 0 0.0 0 0.0 0 0.0 1.9182569980621338 0.24249932169914246 0.21605448424816132 0.0 0.0 0.999969482421875 0.38543954491615295 0.5272694230079651 0 1.0 0 0.0 0 0.0 0 0.0 2.0367677211761475 0.24499979615211487 0.21605448424816132 0.0 0.0 1.0 0.4415329396724701 0.5323407649993896 0 1.0 0 0.0 0 0.0 0 0.0 2.041396379470825 0.24781891703605652 0.21605448424816132 0.0 0.0 1.0 0.4442402422428131 0.5354030728340149 0 1.0 0 0.0 0 0.0 0 0.0 2.1486051082611084 0.24261972308158875 0.21605448424816132 0.0 0.0 1.0 0.507178783416748 0.527972936630249 0 1.0 0 0.0 0 0.0 0 0.0 2.25893235206604 0.2425430715084076 0.21605448424816132 0.0 0.0 1.0 0.5663050413131714 0.5222381353378296 0 1.0 0 0.0 0 0.0 0 0.0 2.144449472427368 0.2456078827381134 0.21605448424816132 0.0 0.0 1.0 0.5047039985656738 0.5314600467681885 0 1.0 0 0.0 0 0.0 0 0.0 1.9182569980621338 0.24249932169914246 0.21605448424816132 0.0 0.0 0.999969482421875 0.38543954491615295 0.5272694230079651 0 1.0 0 0.0 0 0.0 0 0.0 2.0323092937469482 0.24188390374183655 0.21605448424816132 0.0 0.0 1.0 0.4389148950576782 0.5289592742919922 0 1.0 0 0.0 0 0.0 0 0.0 2.0367677211761475 0.24499979615211487 0.21605448424816132 0.0 0.0 1.0 0.4415329396724701 0.5323407649993896 0 1.0 0 0.0 0 0.0 0 0.0 2.1525394916534424 0.2393469512462616 0.21605448424816132 0.0 0.0 0.999969482421875 0.5095299482345581 0.5241546630859375 0 1.0 0 0.0 0 0.0 0 0.0 2.25893235206604 0.2425430715084076 0.21605448424816132 0.0 0.0 1.0 0.5663050413131714 0.5222381353378296 0 1.0 0 0.0 0 0.0 0 0.0 2.1486051082611084 0.24261972308158875 0.21605448424816132 0.0 0.0 1.0 0.507178783416748 0.527972936630249 0 1.0 0 0.0 0 0.0 0 0.0 2.1525394916534424 0.2393469512462616 0.21605448424816132 0.0 0.0 0.999969482421875 0.5095299482345581 0.5241546630859375 0 1.0 0 0.0 0 0.0 0 0.0 2.262758493423462 0.23384609818458557 0.21605448424816132 0.0 0.0 1.0 0.5685557723045349 0.5133090019226074 0 1.0 0 0.0 0 0.0 0 0.0 2.25893235206604 0.2425430715084076 0.21605448424816132 0.0 0.0 1.0 0.5663050413131714 0.5222381353378296 0 1.0 0 0.0 0 0.0 0 0.0 1.914123296737671 0.23349463939666748 0.21605448424816132 0.0 0.0 1.0 0.38311290740966797 0.5189554691314697 0 1.0 0 0.0 0 0.0 0 0.0 2.0323092937469482 0.24188390374183655 0.21605448424816132 0.0 0.0 1.0 0.4389148950576782 0.5289592742919922 0 1.0 0 0.0 0 0.0 0 0.0 1.9182569980621338 0.24249932169914246 0.21605448424816132 0.0 0.0 0.999969482421875 0.38543954491615295 0.5272694230079651 0 1.0 0 0.0 0 0.0 0 0.0 1.914123296737671 0.23349463939666748 0.21605448424816132 0.0 0.0 1.0 0.38311290740966797 0.5189554691314697 0 1.0 0 0.0 0 0.0 0 0.0 2.0280210971832275 0.23847129940986633 0.21605448424816132 0.0 0.0 1.0 0.4363836348056793 0.525258481502533 0 1.0 0 0.0 0 0.0 0 0.0 2.0323092937469482 0.24188390374183655 0.21605448424816132 0.0 0.0 1.0 0.4389148950576782 0.5289592742919922 0 1.0 0 0.0 0 0.0 0 0.0 2.1562039852142334 0.23587459325790405 0.21605448424816132 0.0 0.0 1.0 0.5117291212081909 0.5201003551483154 0 1.0 0 0.0 0 0.0 0 0.0 2.262758493423462 0.23384609818458557 0.21605448424816132 0.0 0.0 1.0 0.5685557723045349 0.5133090019226074 0 1.0 0 0.0 0 0.0 0 0.0 2.1525394916534424 0.2393469512462616 0.21605448424816132 0.0 0.0 0.999969482421875 0.5095299482345581 0.5241546630859375 0 1.0 0 0.0 0 0.0 0 0.0 1.914123296737671 0.23349463939666748 0.21605448424816132 0.0 0.0 1.0 0.38311290740966797 0.5189554691314697 0 1.0 0 0.0 0 0.0 0 0.0 2.0239274501800537 0.23475462198257446 0.21605448424816132 0.0 0.0 1.0 0.43394935131073 0.5212298631668091 0 1.0 0 0.0 0 0.0 0 0.0 2.0280210971832275 0.23847129940986633 0.21605448424816132 0.0 0.0 1.0 0.4363836348056793 0.525258481502533 0 1.0 0 0.0 0 0.0 0 0.0 2.1595494747161865 0.23228806257247925 0.21605448424816132 0.0 0.0 1.0 0.5137469172477722 0.5159071683883667 0 1.0 0 0.0 0 0.0 0 0.0 2.262758493423462 0.23384609818458557 0.21605448424816132 0.0 0.0 1.0 0.5685557723045349 0.5133090019226074 0 1.0 0 0.0 0 0.0 0 0.0 2.1562039852142334 0.23587459325790405 0.21605448424816132 0.0 0.0 1.0 0.5117291212081909 0.5201003551483154 0 1.0 0 0.0 0 0.0 0 0.0 1.914123296737671 0.23349463939666748 0.21605448424816132 0.0 0.0 1.0 0.38311290740966797 0.5189554691314697 0 1.0 0 0.0 0 0.0 0 0.0 2.020052671432495 0.23072659969329834 0.21605448424816132 0.0 0.0 1.0 0.43162181973457336 0.5168639421463013 0 1.0 0 0.0 0 0.0 0 0.0 2.0239274501800537 0.23475462198257446 0.21605448424816132 0.0 0.0 1.0 0.43394935131073 0.5212298631668091 0 1.0 0 0.0 0 0.0 0 0.0 2.1595494747161865 0.23228806257247925 0.21605448424816132 0.0 0.0 1.0 0.5137469172477722 0.5159071683883667 0 1.0 0 0.0 0 0.0 0 0.0 2.2658889293670654 0.2249472439289093 0.21605448424816132 0.0 0.0 1.0 0.5705021023750305 0.5041624307632446 0 1.0 0 0.0 0 0.0 0 0.0 2.262758493423462 0.23384609818458557 0.21605448424816132 0.0 0.0 1.0 0.5685557723045349 0.5133090019226074 0 1.0 0 0.0 0 0.0 0 0.0 1.9106242656707764 0.22422727942466736 0.21605448424816132 0.0 0.0 1.0 0.3810150623321533 0.5104093551635742 0 1.0 0 0.0 0 0.0 0 0.0 2.020052671432495 0.23072659969329834 0.21605448424816132 0.0 0.0 1.0 0.43162181973457336 0.5168639421463013 0 1.0 0 0.0 0 0.0 0 0.0 1.914123296737671 0.23349463939666748 0.21605448424816132 0.0 0.0 1.0 0.38311290740966797 0.5189554691314697 0 1.0 0 0.0 0 0.0 0 0.0 2.16257643699646 0.22858721017837524 0.21605448424816132 0.0 0.0 1.0 0.5155841708183289 0.5115742087364197 0 1.0 0 0.0 0 0.0 0 0.0 2.2658889293670654 0.2249472439289093 0.21605448424816132 0.0 0.0 1.0 0.5705021023750305 0.5041624307632446 0 1.0 0 0.0 0 0.0 0 0.0 2.1595494747161865 0.23228806257247925 0.21605448424816132 0.0 0.0 1.0 0.5137469172477722 0.5159071683883667 0 1.0 0 0.0 0 0.0 0 0.0 1.9106242656707764 0.22422727942466736 0.21605448424816132 0.0 0.0 1.0 0.3810150623321533 0.5104093551635742 0 1.0 0 0.0 0 0.0 0 0.0 2.0163967609405518 0.22638723254203796 0.21605448424816132 0.0 0.0 0.999969482421875 0.4293980002403259 0.5121585726737976 0 1.0 0 0.0 0 0.0 0 0.0 2.020052671432495 0.23072659969329834 0.21605448424816132 0.0 0.0 1.0 0.43162181973457336 0.5168639421463013 0 1.0 0 0.0 0 0.0 0 0.0 2.1652848720550537 0.22477203607559204 0.21605448424816132 0.0 0.0 1.0 0.5172411203384399 0.5071002244949341 0 1.0 0 0.0 0 0.0 0 0.0 2.2658889293670654 0.2249472439289093 0.21605448424816132 0.0 0.0 1.0 0.5705021023750305 0.5041624307632446 0 1.0 0 0.0 0 0.0 0 0.0 2.16257643699646 0.22858721017837524 0.21605448424816132 0.0 0.0 1.0 0.5155841708183289 0.5115742087364197 0 1.0 0 0.0 0 0.0 0 0.0 1.9106242656707764 0.22422727942466736 0.21605448424816132 0.0 0.0 1.0 0.3810150623321533 0.5104093551635742 0 1.0 0 0.0 0 0.0 0 0.0 2.0129597187042236 0.22173652052879333 0.21605448424816132 0.0 0.0 0.999969482421875 0.4272748827934265 0.5071110725402832 0 1.0 0 0.0 0 0.0 0 0.0 2.0163967609405518 0.22638723254203796 0.21605448424816132 0.0 0.0 0.999969482421875 0.4293980002403259 0.5121585726737976 0 1.0 0 0.0 0 0.0 0 0.0 2.1652848720550537 0.22477203607559204 0.21605448424816132 0.0 0.0 1.0 0.5172411203384399 0.5071002244949341 0 1.0 0 0.0 0 0.0 0 0.0 2.2683236598968506 0.2158464789390564 0.21605448424816132 0.0 0.0 1.0 0.5721495151519775 0.4947805404663086 0 1.0 0 0.0 0 0.0 0 0.0 2.2658889293670654 0.2249472439289093 0.21605448424816132 0.0 0.0 1.0 0.5705021023750305 0.5041624307632446 0 1.0 0 0.0 0 0.0 0 0.0 2.1676747798919678 0.22084254026412964 0.21605448424816132 0.0 0.0 1.0 0.5187181234359741 0.5024833083152771 0 1.0 0 0.0 0 0.0 0 0.0 2.2683236598968506 0.2158464789390564 0.21605448424816132 0.0 0.0 1.0 0.5721495151519775 0.4947805404663086 0 1.0 0 0.0 0 0.0 0 0.0 2.1652848720550537 0.22477203607559204 0.21605448424816132 0.0 0.0 1.0 0.5172411203384399 0.5071002244949341 0 1.0 0 0.0 0 0.0 0 0.0 1.9077603816986084 0.2146972119808197 0.21605448424816132 0.0 0.0 0.999969482421875 0.3791377544403076 0.5016137361526489 0 1.0 0 0.0 0 0.0 0 0.0 2.0129597187042236 0.22173652052879333 0.21605448424816132 0.0 0.0 0.999969482421875 0.4272748827934265 0.5071110725402832 0 1.0 0 0.0 0 0.0 0 0.0 1.9106242656707764 0.22422727942466736 0.21605448424816132 0.0 0.0 1.0 0.3810150623321533 0.5104093551635742 0 1.0 0 0.0 0 0.0 0 0.0 1.9077603816986084 0.2146972119808197 0.21605448424816132 0.0 0.0 0.999969482421875 0.3791377544403076 0.5016137361526489 0 1.0 0 0.0 0 0.0 0 0.0 2.0097415447235107 0.21677446365356445 0.21605448424816132 0.0 0.0 1.0 0.4252496063709259 0.5017184019088745 0 1.0 0 0.0 0 0.0 0 0.0 2.0129597187042236 0.22173652052879333 0.21605448424816132 0.0 0.0 0.999969482421875 0.4272748827934265 0.5071110725402832 0 1.0 0 0.0 0 0.0 0 0.0 2.169746160507202 0.21679872274398804 0.21605448424816132 0.0 0.0 1.0 0.5200154185295105 0.4977208375930786 0 1.0 0 0.0 0 0.0 0 0.0 2.2683236598968506 0.2158464789390564 0.21605448424816132 0.0 0.0 1.0 0.5721495151519775 0.4947805404663086 0 1.0 0 0.0 0 0.0 0 0.0 2.1676747798919678 0.22084254026412964 0.21605448424816132 0.0 0.0 1.0 0.5187181234359741 0.5024833083152771 0 1.0 0 0.0 0 0.0 0 0.0 2.1714985370635986 0.21264058351516724 0.21605448424816132 0.0 0.0 1.0 0.5211325287818909 0.4928099513053894 0 1.0 0 0.0 0 0.0 0 0.0 2.2683236598968506 0.2158464789390564 0.21605448424816132 0.0 0.0 1.0 0.5721495151519775 0.4947805404663086 0 1.0 0 0.0 0 0.0 0 0.0 2.169746160507202 0.21679872274398804 0.21605448424816132 0.0 0.0 1.0 0.5200154185295105 0.4977208375930786 0 1.0 0 0.0 0 0.0 0 0.0 1.9077603816986084 0.2146972119808197 0.21605448424816132 0.0 0.0 0.999969482421875 0.3791377544403076 0.5016137361526489 0 1.0 0 0.0 0 0.0 0 0.0 2.006742238998413 0.21150106191635132 0.21605448424816132 0.0 0.0 1.0 0.4233194589614868 0.49597716331481934 0 1.0 0 0.0 0 0.0 0 0.0 2.0097415447235107 0.21677446365356445 0.21605448424816132 0.0 0.0 1.0 0.4252496063709259 0.5017184019088745 0 1.0 0 0.0 0 0.0 0 0.0 2.1714985370635986 0.21264058351516724 0.21605448424816132 0.0 0.0 1.0 0.5211325287818909 0.4928099513053894 0 1.0 0 0.0 0 0.0 0 0.0 2.2700626850128174 0.20654383301734924 0.21605448424816132 0.0 0.0 1.0 0.5735015273094177 0.48514336347579956 0 1.0 0 0.0 0 0.0 0 0.0 2.2683236598968506 0.2158464789390564 0.21605448424816132 0.0 0.0 1.0 0.5721495151519775 0.4947805404663086 0 1.0 0 0.0 0 0.0 0 0.0 1.9055311679840088 0.2049044370651245 0.21605448424816132 0.0 0.0 1.0 0.37747377157211304 0.4925498366355896 0 1.0 0 0.0 0 0.0 0 0.0 2.006742238998413 0.21150106191635132 0.21605448424816132 0.0 0.0 1.0 0.4233194589614868 0.49597716331481934 0 1.0 0 0.0 0 0.0 0 0.0 1.9077603816986084 0.2146972119808197 0.21605448424816132 0.0 0.0 0.999969482421875 0.3791377544403076 0.5016137361526489 0 1.0 0 0.0 0 0.0 0 0.0 2.1729323863983154 0.20836812257766724 0.21605448424816132 0.0 0.0 0.999969482421875 0.5220695734024048 0.48774731159210205 0 1.0 0 0.0 0 0.0 0 0.0 2.2700626850128174 0.20654383301734924 0.21605448424816132 0.0 0.0 1.0 0.5735015273094177 0.48514336347579956 0 1.0 0 0.0 0 0.0 0 0.0 2.1714985370635986 0.21264058351516724 0.21605448424816132 0.0 0.0 1.0 0.5211325287818909 0.4928099513053894 0 1.0 0 0.0 0 0.0 0 0.0 1.9055311679840088 0.2049044370651245 0.21605448424816132 0.0 0.0 1.0 0.37747377157211304 0.4925498366355896 0 1.0 0 0.0 0 0.0 0 0.0 2.0039618015289307 0.20591631531715393 0.21605448424816132 0.0 0.0 1.0 0.42148181796073914 0.4898841977119446 0 1.0 0 0.0 0 0.0 0 0.0 2.006742238998413 0.21150106191635132 0.21605448424816132 0.0 0.0 1.0 0.4233194589614868 0.49597716331481934 0 1.0 0 0.0 0 0.0 0 0.0 2.1740477085113525 0.20398133993148804 0.21605448424816132 0.0 0.0 0.999969482421875 0.5228258371353149 0.4825291633605957 0 1.0 0 0.0 0 0.0 0 0.0 2.2700626850128174 0.20654383301734924 0.21605448424816132 0.0 0.0 1.0 0.5735015273094177 0.48514336347579956 0 1.0 0 0.0 0 0.0 0 0.0 2.1729323863983154 0.20836812257766724 0.21605448424816132 0.0 0.0 0.999969482421875 0.5220695734024048 0.48774731159210205 0 1.0 0 0.0 0 0.0 0 0.0 2.1740477085113525 0.20398133993148804 0.21605448424816132 0.0 0.0 0.999969482421875 0.5228258371353149 0.4825291633605957 0 1.0 0 0.0 0 0.0 0 0.0 2.271106004714966 0.19703930616378784 0.21605448424816132 0.0 0.0 1.0 0.5745598077774048 0.4752293825149536 0 1.0 0 0.0 0 0.0 0 0.0 2.2700626850128174 0.20654383301734924 0.21605448424816132 0.0 0.0 1.0 0.5735015273094177 0.48514336347579956 0 1.0 0 0.0 0 0.0 0 0.0 1.9055311679840088 0.2049044370651245 0.21605448424816132 0.0 0.0 1.0 0.37747377157211304 0.4925498366355896 0 1.0 0 0.0 0 0.0 0 0.0 2.0014007091522217 0.2000202238559723 0.21605448424816132 0.0 0.0 1.0 0.41973450779914856 0.4834361672401428 0 1.0 0 0.0 0 0.0 0 0.0 2.0039618015289307 0.20591631531715393 0.21605448424816132 0.0 0.0 1.0 0.42148181796073914 0.4898841977119446 0 1.0 0 0.0 0 0.0 0 0.0 1.9039366245269775 0.19484898447990417 0.21605448424816132 0.0 0.0 1.0 0.3760174810886383 0.4831979274749756 0 1.0 0 0.0 0 0.0 0 0.0 2.0014007091522217 0.2000202238559723 0.21605448424816132 0.0 0.0 1.0 0.41973450779914856 0.4834361672401428 0 1.0 0 0.0 0 0.0 0 0.0 1.9055311679840088 0.2049044370651245 0.21605448424816132 0.0 0.0 1.0 0.37747377157211304 0.4925498366355896 0 1.0 0 0.0 0 0.0 0 0.0 2.17484450340271 0.19948023557662964 0.21605448424816132 0.0 0.0 1.0 0.5234003663063049 0.47715163230895996 0 1.0 0 0.0 0 0.0 0 0.0 2.271106004714966 0.19703930616378784 0.21605448424816132 0.0 0.0 1.0 0.5745598077774048 0.4752293825149536 0 1.0 0 0.0 0 0.0 0 0.0 2.1740477085113525 0.20398133993148804 0.21605448424816132 0.0 0.0 0.999969482421875 0.5228258371353149 0.4825291633605957 0 1.0 0 0.0 0 0.0 0 0.0 1.9039366245269775 0.19484898447990417 0.21605448424816132 0.0 0.0 1.0 0.3760174810886383 0.4831979274749756 0 1.0 0 0.0 0 0.0 0 0.0 1.999058485031128 0.1938127875328064 0.21605448424816132 0.0 0.0 1.0 0.41807496547698975 0.4766302704811096 0 1.0 0 0.0 0 0.0 0 0.0 2.0014007091522217 0.2000202238559723 0.21605448424816132 0.0 0.0 1.0 0.41973450779914856 0.4834361672401428 0 1.0 0 0.0 0 0.0 0 0.0 2.1753222942352295 0.19486480951309204 0.21605448424816132 0.0 0.0 1.0 0.523791491985321 0.4716107249259949 0 1.0 0 0.0 0 0.0 0 0.0 2.271106004714966 0.19703930616378784 0.21605448424816132 0.0 0.0 1.0 0.5745598077774048 0.4752293825149536 0 1.0 0 0.0 0 0.0 0 0.0 2.17484450340271 0.19948023557662964 0.21605448424816132 0.0 0.0 1.0 0.5234003663063049 0.47715163230895996 0 1.0 0 0.0 0 0.0 0 0.0 2.1753222942352295 0.19486480951309204 0.21605448424816132 0.0 0.0 1.0 0.523791491985321 0.4716107249259949 0 1.0 0 0.0 0 0.0 0 0.0 2.271453619003296 0.18733292818069458 0.21605448424816132 0.0 0.0 1.0 0.5753237009048462 0.46501606702804565 0 1.0 0 0.0 0 0.0 0 0.0 2.271106004714966 0.19703930616378784 0.21605448424816132 0.0 0.0 1.0 0.5745598077774048 0.4752293825149536 0 1.0 0 0.0 0 0.0 0 0.0 2.1754815578460693 0.19013503193855286 0.21605448424816132 0.0 0.0 1.0 0.5239977240562439 0.46590250730514526 0 1.0 0 0.0 0 0.0 0 0.0 2.271453619003296 0.18733292818069458 0.21605448424816132 0.0 0.0 1.0 0.5753237009048462 0.46501606702804565 0 1.0 0 0.0 0 0.0 0 0.0 2.1753222942352295 0.19486480951309204 0.21605448424816132 0.0 0.0 1.0 0.523791491985321 0.4716107249259949 0 1.0 0 0.0 0 0.0 0 0.0 1.9029772281646729 0.1845308244228363 0.21605448424816132 0.0 0.0 1.0 0.3747648000717163 0.4735370874404907 0 1.0 0 0.0 0 0.0 0 0.0 1.999058485031128 0.1938127875328064 0.21605448424816132 0.0 0.0 1.0 0.41807496547698975 0.4766302704811096 0 1.0 0 0.0 0 0.0 0 0.0 1.9039366245269775 0.19484898447990417 0.21605448424816132 0.0 0.0 1.0 0.3760174810886383 0.4831979274749756 0 1.0 0 0.0 0 0.0 0 0.0 1.9029772281646729 0.1845308244228363 0.21605448424816132 0.0 0.0 1.0 0.3747648000717163 0.4735370874404907 0 1.0 0 0.0 0 0.0 0 0.0 1.9969351291656494 0.18729400634765625 0.21605448424816132 0.0 0.0 1.0 0.41650107502937317 0.4694640636444092 0 1.0 0 0.0 0 0.0 0 0.0 1.999058485031128 0.1938127875328064 0.21605448424816132 0.0 0.0 1.0 0.41807496547698975 0.4766302704811096 0 1.0 0 0.0 0 0.0 0 0.0 2.175391912460327 0.18671512603759766 0.21605448424816132 0.0 0.0 1.0 0.5240249633789062 0.4617552161216736 0 1.0 0 0.0 0 0.0 0 0.0 2.271453619003296 0.18733292818069458 0.21605448424816132 0.0 0.0 1.0 0.5753237009048462 0.46501606702804565 0 1.0 0 0.0 0 0.0 0 0.0 2.1754815578460693 0.19013503193855286 0.21605448424816132 0.0 0.0 1.0 0.5239977240562439 0.46590250730514526 0 1.0 0 0.0 0 0.0 0 0.0 2.175391912460327 0.18671512603759766 0.21605448424816132 0.0 0.0 1.0 0.5240249633789062 0.4617552161216736 0 1.0 0 0.0 0 0.0 0 0.0 2.2713258266448975 0.18192818760871887 0.21605448424816132 0.0 0.0 1.0 0.5756058096885681 0.45928263664245605 0 1.0 0 0.0 0 0.0 0 0.0 2.271453619003296 0.18733292818069458 0.21605448424816132 0.0 0.0 1.0 0.5753237009048462 0.46501606702804565 0 1.0 0 0.0 0 0.0 0 0.0 1.9029772281646729 0.1845308244228363 0.21605448424816132 0.0 0.0 1.0 0.3747648000717163 0.4735370874404907 0 1.0 0 0.0 0 0.0 0 0.0 1.9950306415557861 0.18046388030052185 0.21605448424816132 0.0 0.0 0.999969482421875 0.41501089930534363 0.46193617582321167 0 1.0 0 0.0 0 0.0 0 0.0 1.9969351291656494 0.18729400634765625 0.21605448424816132 0.0 0.0 1.0 0.41650107502937317 0.4694640636444092 0 1.0 0 0.0 0 0.0 0 0.0 2.175122022628784 0.18334385752677917 0.21605448424816132 0.0 0.0 1.0 0.5239424109458923 0.45764970779418945 0 1.0 0 0.0 0 0.0 0 0.0 2.2713258266448975 0.18192818760871887 0.21605448424816132 0.0 0.0 1.0 0.5756058096885681 0.45928263664245605 0 1.0 0 0.0 0 0.0 0 0.0 2.175391912460327 0.18671512603759766 0.21605448424816132 0.0 0.0 1.0 0.5240249633789062 0.4617552161216736 0 1.0 0 0.0 0 0.0 0 0.0 1.993345022201538 0.17332243919372559 0.21605448424816132 0.0 0.0 1.0 0.41360267996788025 0.4540458917617798 0 1.0 0 0.0 0 0.0 0 0.0 1.9950306415557861 0.18046388030052185 0.21605448424816132 0.0 0.0 0.999969482421875 0.41501089930534363 0.46193617582321167 0 1.0 0 0.0 0 0.0 0 0.0 1.9029772281646729 0.1845308244228363 0.21605448424816132 0.0 0.0 1.0 0.3747648000717163 0.4735370874404907 0 1.0 0 0.0 0 0.0 0 0.0 2.1746718883514404 0.1800212264060974 0.21605448424816132 0.0 0.0 1.0 0.5237489342689514 0.45358604192733765 0 1.0 0 0.0 0 0.0 0 0.0 2.2713258266448975 0.18192818760871887 0.21605448424816132 0.0 0.0 1.0 0.5756058096885681 0.45928263664245605 0 1.0 0 0.0 0 0.0 0 0.0 2.175122022628784 0.18334385752677917 0.21605448424816132 0.0 0.0 1.0 0.5239424109458923 0.45764970779418945 0 1.0 0 0.0 0 0.0 0 0.0 2.1746718883514404 0.1800212264060974 0.21605448424816132 0.0 0.0 1.0 0.5237489342689514 0.45358604192733765 0 1.0 0 0.0 0 0.0 0 0.0 2.2709429264068604 0.17657208442687988 0.21605448424816132 0.0 0.0 1.0 0.5757695436477661 0.4535619616508484 0 1.0 0 0.0 0 0.0 0 0.0 2.2713258266448975 0.18192818760871887 0.21605448424816132 0.0 0.0 1.0 0.5756058096885681 0.45928263664245605 0 1.0 0 0.0 0 0.0 0 0.0 2.174041986465454 0.17674723267555237 0.21605448424816132 0.0 0.0 1.0 0.5234435200691223 0.4495640993118286 0 1.0 0 0.0 0 0.0 0 0.0 2.2709429264068604 0.17657208442687988 0.21605448424816132 0.0 0.0 1.0 0.5757695436477661 0.4535619616508484 0 1.0 0 0.0 0 0.0 0 0.0 2.1746718883514404 0.1800212264060974 0.21605448424816132 0.0 0.0 1.0 0.5237489342689514 0.45358604192733765 0 1.0 0 0.0 0 0.0 0 0.0 2.173231840133667 0.17352190613746643 0.21605448424816132 0.0 0.0 1.0 0.5230244994163513 0.4455840587615967 0 1.0 0 0.0 0 0.0 0 0.0 2.2709429264068604 0.17657208442687988 0.21605448424816132 0.0 0.0 1.0 0.5757695436477661 0.4535619616508484 0 1.0 0 0.0 0 0.0 0 0.0 2.174041986465454 0.17674723267555237 0.21605448424816132 0.0 0.0 1.0 0.5234435200691223 0.4495640993118286 0 1.0 0 0.0 0 0.0 0 0.0 2.173231840133667 0.17352190613746643 0.21605448424816132 0.0 0.0 1.0 0.5230244994163513 0.4455840587615967 0 1.0 0 0.0 0 0.0 0 0.0 2.2703044414520264 0.1712646186351776 0.21605448424816132 0.0 0.0 1.0 0.5758130550384521 0.4478500485420227 0 1.0 0 0.0 0 0.0 0 0.0 2.2709429264068604 0.17657208442687988 0.21605448424816132 0.0 0.0 1.0 0.5757695436477661 0.4535619616508484 0 1.0 0 0.0 0 0.0 0 0.0 2.1722419261932373 0.1703452169895172 0.21605446934700012 0.0 0.0 1.0 0.5224907398223877 0.44164609909057617 0 1.0 0 0.0 0 0.0 0 0.0 2.2703044414520264 0.1712646186351776 0.21605448424816132 0.0 0.0 1.0 0.5758130550384521 0.4478500485420227 0 1.0 0 0.0 0 0.0 0 0.0 2.173231840133667 0.17352190613746643 0.21605448424816132 0.0 0.0 1.0 0.5230244994163513 0.4455840587615967 0 1.0 0 0.0 0 0.0 0 0.0 2.1722419261932373 0.1703452169895172 0.21605446934700012 0.0 0.0 1.0 0.5224907398223877 0.44164609909057617 0 1.0 0 0.0 0 0.0 0 0.0 2.2694103717803955 0.16600582003593445 0.21605446934700012 0.0 0.0 1.0 0.575734555721283 0.4421430826187134 0 1.0 0 0.0 0 0.0 0 0.0 2.2703044414520264 0.1712646186351776 0.21605448424816132 0.0 0.0 1.0 0.5758130550384521 0.4478500485420227 0 1.0 0 0.0 0 0.0 0 0.0 2.171071767807007 0.1672171652317047 0.21605446934700012 0.0 0.0 1.0 0.5218402743339539 0.43775051832199097 0 1.0 0 0.0 0 0.0 0 0.0 2.2694103717803955 0.16600582003593445 0.21605446934700012 0.0 0.0 1.0 0.575734555721283 0.4421430826187134 0 1.0 0 0.0 0 0.0 0 0.0 2.1722419261932373 0.1703452169895172 0.21605446934700012 0.0 0.0 1.0 0.5224907398223877 0.44164609909057617 0 1.0 0 0.0 0 0.0 0 0.0 2.169721841812134 0.16413778066635132 0.21605446934700012 0.0 0.0 1.0 0.5210717916488647 0.4338977336883545 0 1.0 0 0.0 0 0.0 0 0.0 2.2694103717803955 0.16600582003593445 0.21605446934700012 0.0 0.0 1.0 0.575734555721283 0.4421430826187134 0 1.0 0 0.0 0 0.0 0 0.0 2.171071767807007 0.1672171652317047 0.21605446934700012 0.0 0.0 1.0 0.5218402743339539 0.43775051832199097 0 1.0 0 0.0 0 0.0 0 0.0 2.169721841812134 0.16413778066635132 0.21605446934700012 0.0 0.0 1.0 0.5210717916488647 0.4338977336883545 0 1.0 0 0.0 0 0.0 0 0.0 2.268261194229126 0.160795658826828 0.21605446934700012 0.0 0.0 1.0 0.5755319595336914 0.4364372491836548 0 1.0 0 0.0 0 0.0 0 0.0 2.2694103717803955 0.16600582003593445 0.21605446934700012 0.0 0.0 1.0 0.575734555721283 0.4421430826187134 0 1.0 0 0.0 0 0.0 0 0.0 2.16819167137146 0.16110703349113464 0.21605446934700012 0.0 0.0 1.0 0.5201833248138428 0.4300884008407593 0 1.0 0 0.0 0 0.0 0 0.0 2.268261194229126 0.160795658826828 0.21605446934700012 0.0 0.0 1.0 0.5755319595336914 0.4364372491836548 0 1.0 0 0.0 0 0.0 0 0.0 2.169721841812134 0.16413778066635132 0.21605446934700012 0.0 0.0 1.0 0.5210717916488647 0.4338977336883545 0 1.0 0 0.0 0 0.0 0 0.0 2.1664817333221436 0.1581249237060547 0.21605446934700012 0.0 0.0 1.0 0.5191733241081238 0.4263235330581665 0 1.0 0 0.0 0 0.0 0 0.0 2.268261194229126 0.160795658826828 0.21605446934700012 0.0 0.0 1.0 0.5755319595336914 0.4364372491836548 0 1.0 0 0.0 0 0.0 0 0.0 2.16819167137146 0.16110703349113464 0.21605446934700012 0.0 0.0 1.0 0.5201833248138428 0.4300884008407593 0 1.0 0 0.0 0 0.0 0 0.0 2.1664817333221436 0.1581249237060547 0.21605446934700012 0.0 0.0 1.0 0.5191733241081238 0.4263235330581665 0 1.0 0 0.0 0 0.0 0 0.0 2.2668564319610596 0.15563416481018066 0.21605446934700012 0.0 0.0 0.999969482421875 0.5752025246620178 0.43072861433029175 0 1.0 0 0.0 0 0.0 0 0.0 2.268261194229126 0.160795658826828 0.21605446934700012 0.0 0.0 1.0 0.5755319595336914 0.4364372491836548 0 1.0 0 0.0 0 0.0 0 0.0 2.1645915508270264 0.15519148111343384 0.21605446934700012 0.0 0.0 1.0 0.5180397033691406 0.42260414361953735 0 1.0 0 0.0 0 0.0 0 0.0 2.2668564319610596 0.15563416481018066 0.21605446934700012 0.0 0.0 0.999969482421875 0.5752025246620178 0.43072861433029175 0 1.0 0 0.0 0 0.0 0 0.0 2.1664817333221436 0.1581249237060547 0.21605446934700012 0.0 0.0 1.0 0.5191733241081238 0.4263235330581665 0 1.0 0 0.0 0 0.0 0 0.0 2.1645915508270264 0.15519148111343384 0.21605446934700012 0.0 0.0 1.0 0.5180397033691406 0.42260414361953735 0 1.0 0 0.0 0 0.0 0 0.0 2.2651965618133545 0.15052130818367004 0.21605446934700012 0.0 0.0 0.999969482421875 0.574743390083313 0.4250136613845825 0 1.0 0 0.0 0 0.0 0 0.0 2.2668564319610596 0.15563416481018066 0.21605446934700012 0.0 0.0 0.999969482421875 0.5752025246620178 0.43072861433029175 0 1.0 0 0.0 0 0.0 0 0.0 2.1625216007232666 0.1523066759109497 0.21605446934700012 0.0 0.0 1.0 0.5167807936668396 0.41893166303634644 0 1.0 0 0.0 0 0.0 0 0.0 2.2651965618133545 0.15052130818367004 0.21605446934700012 0.0 0.0 0.999969482421875 0.574743390083313 0.4250136613845825 0 1.0 0 0.0 0 0.0 0 0.0 2.1645915508270264 0.15519148111343384 0.21605446934700012 0.0 0.0 1.0 0.5180397033691406 0.42260414361953735 0 1.0 0 0.0 0 0.0 0 0.0 2.1608784198760986 0.15032914280891418 0.21605446934700012 0.0 0.0 1.0 0.5157681703567505 0.4164031744003296 0 1.0 0 0.0 0 0.0 0 0.0 2.2651965618133545 0.15052130818367004 0.21605446934700012 0.0 0.0 0.999969482421875 0.574743390083313 0.4250136613845825 0 1.0 0 0.0 0 0.0 0 0.0 2.1625216007232666 0.1523066759109497 0.21605446934700012 0.0 0.0 1.0 0.5167807936668396 0.41893166303634644 0 1.0 0 0.0 0 0.0 0 0.0 2.1608784198760986 0.15032914280891418 0.21605446934700012 0.0 0.0 1.0 0.5157681703567505 0.4164031744003296 0 1.0 0 0.0 0 0.0 0 0.0 2.2632811069488525 0.14545708894729614 0.21605446934700012 0.0 0.0 1.0 0.5741510391235352 0.4192887544631958 0 1.0 0 0.0 0 0.0 0 0.0 2.2651965618133545 0.15052130818367004 0.21605446934700012 0.0 0.0 0.999969482421875 0.574743390083313 0.4250136613845825 0 1.0 0 0.0 0 0.0 0 0.0 2.15875506401062 0.14801594614982605 0.21605446934700012 0.0 0.0 1.0 0.5144461989402771 0.4134361743927002 0 1.0 0 0.0 0 0.0 0 0.0 2.2632811069488525 0.14545708894729614 0.21605446934700012 0.0 0.0 1.0 0.5741510391235352 0.4192887544631958 0 1.0 0 0.0 0 0.0 0 0.0 2.1608784198760986 0.15032914280891418 0.21605446934700012 0.0 0.0 1.0 0.5157681703567505 0.4164031744003296 0 1.0 0 0.0 0 0.0 0 0.0 2.1561501026153564 0.1453670859336853 0.21605446934700012 0.0 0.0 1.0 0.5128077268600464 0.41003090143203735 0 1.0 0 0.0 0 0.0 0 0.0 2.2632811069488525 0.14545708894729614 0.21605446934700012 0.0 0.0 1.0 0.5741510391235352 0.4192887544631958 0 1.0 0 0.0 0 0.0 0 0.0 2.15875506401062 0.14801594614982605 0.21605446934700012 0.0 0.0 1.0 0.5144461989402771 0.4134361743927002 0 1.0 0 0.0 0 0.0 0 0.0 2.1561501026153564 0.1453670859336853 0.21605446934700012 0.0 0.0 1.0 0.5128077268600464 0.41003090143203735 0 1.0 0 0.0 0 0.0 0 0.0 2.2611100673675537 0.14044153690338135 0.21605446934700012 0.0 0.0 1.0 0.5734215378761292 0.4135507345199585 0 1.0 0 0.0 0 0.0 0 0.0 2.2632811069488525 0.14545708894729614 0.21605446934700012 0.0 0.0 1.0 0.5741510391235352 0.4192887544631958 0 1.0 0 0.0 0 0.0 0 0.0 2.1530635356903076 0.14238256216049194 0.21605446934700012 0.0 0.0 1.0 0.5108454823493958 0.406189501285553 0 1.0 0 0.0 0 0.0 0 0.0 2.2611100673675537 0.14044153690338135 0.21605446934700012 0.0 0.0 1.0 0.5734215378761292 0.4135507345199585 0 1.0 0 0.0 0 0.0 0 0.0 2.1561501026153564 0.1453670859336853 0.21605446934700012 0.0 0.0 1.0 0.5128077268600464 0.41003090143203735 0 1.0 0 0.0 0 0.0 0 0.0 2.1494953632354736 0.13906237483024597 0.21605446934700012 0.0 0.0 1.0 0.5085511207580566 0.40191638469696045 0 1.0 0 0.0 0 0.0 0 0.0 2.2611100673675537 0.14044153690338135 0.21605446934700012 0.0 0.0 1.0 0.5734215378761292 0.4135507345199585 0 1.0 0 0.0 0 0.0 0 0.0 2.1530635356903076 0.14238256216049194 0.21605446934700012 0.0 0.0 1.0 0.5108454823493958 0.406189501285553 0 1.0 0 0.0 0 0.0 0 0.0 2.1494953632354736 0.13906237483024597 0.21605446934700012 0.0 0.0 1.0 0.5085511207580566 0.40191638469696045 0 1.0 0 0.0 0 0.0 0 0.0 2.258683919906616 0.13547462224960327 0.21605446934700012 0.0 0.0 1.0 0.5725508332252502 0.4077966809272766 0 1.0 0 0.0 0 0.0 0 0.0 2.2611100673675537 0.14044153690338135 0.21605446934700012 0.0 0.0 1.0 0.5734215378761292 0.4135507345199585 0 1.0 0 0.0 0 0.0 0 0.0 2.1454455852508545 0.135406494140625 0.21605446934700012 0.0 0.0 1.0 0.505915641784668 0.3972187638282776 0 1.0 0 0.0 0 0.0 0 0.0 2.258683919906616 0.13547462224960327 0.21605446934700012 0.0 0.0 1.0 0.5725508332252502 0.4077966809272766 0 1.0 0 0.0 0 0.0 0 0.0 2.1494953632354736 0.13906237483024597 0.21605446934700012 0.0 0.0 1.0 0.5085511207580566 0.40191638469696045 0 1.0 0 0.0 0 0.0 0 0.0 2.1454455852508545 0.135406494140625 0.21605446934700012 0.0 0.0 1.0 0.505915641784668 0.3972187638282776 0 1.0 0 0.0 0 0.0 0 0.0 2.256002187728882 0.13055634498596191 0.21605446934700012 0.0 0.0 0.999969482421875 0.5715339183807373 0.4020240902900696 0 1.0 0 0.0 0 0.0 0 0.0 2.258683919906616 0.13547462224960327 0.21605446934700012 0.0 0.0 1.0 0.5725508332252502 0.4077966809272766 0 1.0 0 0.0 0 0.0 0 0.0 2.14091420173645 0.13141494989395142 0.21605446934700012 0.0 0.0 0.999969482421875 0.5029294490814209 0.39210838079452515 0 1.0 0 0.0 0 0.0 0 0.0 2.256002187728882 0.13055634498596191 0.21605446934700012 0.0 0.0 0.999969482421875 0.5715339183807373 0.4020240902900696 0 1.0 0 0.0 0 0.0 0 0.0 2.1454455852508545 0.135406494140625 0.21605446934700012 0.0 0.0 1.0 0.505915641784668 0.3972187638282776 0 1.0 0 0.0 0 0.0 0 0.0 2.1359012126922607 0.12708774209022522 0.21605446934700012 0.0 0.0 1.0 0.4995826780796051 0.3866015672683716 0 1.0 0 0.0 0 0.0 0 0.0 2.256002187728882 0.13055634498596191 0.21605446934700012 0.0 0.0 0.999969482421875 0.5715339183807373 0.4020240902900696 0 1.0 0 0.0 0 0.0 0 0.0 2.14091420173645 0.13141494989395142 0.21605446934700012 0.0 0.0 0.999969482421875 0.5029294490814209 0.39210838079452515 0 1.0 0 0.0 0 0.0 0 0.0 2.1359012126922607 0.12708774209022522 0.21605446934700012 0.0 0.0 1.0 0.4995826780796051 0.3866015672683716 0 1.0 0 0.0 0 0.0 0 0.0 2.2530648708343506 0.12568670511245728 0.21605446934700012 0.0 0.0 1.0 0.5703655481338501 0.39623093605041504 0 1.0 0 0.0 0 0.0 0 0.0 2.256002187728882 0.13055634498596191 0.21605446934700012 0.0 0.0 0.999969482421875 0.5715339183807373 0.4020240902900696 0 1.0 0 0.0 0 0.0 0 0.0 2.130406618118286 0.12242487072944641 0.21605446934700012 0.0 0.0 1.0 0.4958657920360565 0.380720853805542 0 1.0 0 0.0 0 0.0 0 0.0 2.2530648708343506 0.12568670511245728 0.21605446934700012 0.0 0.0 1.0 0.5703655481338501 0.39623093605041504 0 1.0 0 0.0 0 0.0 0 0.0 2.1359012126922607 0.12708774209022522 0.21605446934700012 0.0 0.0 1.0 0.4995826780796051 0.3866015672683716 0 1.0 0 0.0 0 0.0 0 0.0 2.130406618118286 0.12242487072944641 0.21605446934700012 0.0 0.0 1.0 0.4958657920360565 0.380720853805542 0 1.0 0 0.0 0 0.0 0 0.0 2.249709367752075 0.12069547176361084 0.21605446934700012 0.0 0.0 1.0 0.5689668655395508 0.39020174741744995 0 1.0 0 0.0 0 0.0 0 0.0 2.2530648708343506 0.12568670511245728 0.21605446934700012 0.0 0.0 1.0 0.5703655481338501 0.39623093605041504 0 1.0 0 0.0 0 0.0 0 0.0 2.1244304180145264 0.11742633581161499 0.21605446934700012 0.0 0.0 0.999969482421875 0.49176985025405884 0.37449586391448975 0 1.0 0 0.0 0 0.0 0 0.0 2.249709367752075 0.12069547176361084 0.21605446934700012 0.0 0.0 1.0 0.5689668655395508 0.39020174741744995 0 1.0 0 0.0 0 0.0 0 0.0 2.130406618118286 0.12242487072944641 0.21605446934700012 0.0 0.0 1.0 0.4958657920360565 0.380720853805542 0 1.0 0 0.0 0 0.0 0 0.0 2.1244304180145264 0.11742633581161499 0.21605446934700012 0.0 0.0 0.999969482421875 0.49176985025405884 0.37449586391448975 0 1.0 0 0.0 0 0.0 0 0.0 2.24577260017395 0.11541235446929932 0.21605446934700012 0.0 0.0 1.0 0.5672522187232971 0.3837152123451233 0 1.0 0 0.0 0 0.0 0 0.0 2.249709367752075 0.12069547176361084 0.21605446934700012 0.0 0.0 1.0 0.5689668655395508 0.39020174741744995 0 1.0 0 0.0 0 0.0 0 0.0 2.1179726123809814 0.11209213733673096 0.21605446934700012 0.0 0.0 1.0 0.487287312746048 0.36796391010284424 0 1.0 0 0.0 0 0.0 0 0.0 2.24577260017395 0.11541235446929932 0.21605446934700012 0.0 0.0 1.0 0.5672522187232971 0.3837152123451233 0 1.0 0 0.0 0 0.0 0 0.0 2.1244304180145264 0.11742633581161499 0.21605446934700012 0.0 0.0 0.999969482421875 0.49176985025405884 0.37449586391448975 0 1.0 0 0.0 0 0.0 0 0.0 2.1179726123809814 0.11209213733673096 0.21605446934700012 0.0 0.0 1.0 0.487287312746048 0.36796391010284424 0 1.0 0 0.0 0 0.0 0 0.0 2.2412545680999756 0.1098373532295227 0.21605446934700012 0.0 0.0 0.999969482421875 0.5652036666870117 0.3767634630203247 0 1.0 0 0.0 0 0.0 0 0.0 2.24577260017395 0.11541235446929932 0.21605446934700012 0.0 0.0 1.0 0.5672522187232971 0.3837152123451233 0 1.0 0 0.0 0 0.0 0 0.0 2.1110332012176514 0.10642224550247192 0.21605446934700012 0.0 0.0 1.0 0.4824126362800598 0.36117082834243774 0 1.0 0 0.0 0 0.0 0 0.0 2.2412545680999756 0.1098373532295227 0.21605446934700012 0.0 0.0 0.999969482421875 0.5652036666870117 0.3767634630203247 0 1.0 0 0.0 0 0.0 0 0.0 2.1179726123809814 0.11209213733673096 0.21605446934700012 0.0 0.0 1.0 0.487287312746048 0.36796391010284424 0 1.0 0 0.0 0 0.0 0 0.0 2.1110332012176514 0.10642224550247192 0.21605446934700012 0.0 0.0 1.0 0.4824126362800598 0.36117082834243774 0 1.0 0 0.0 0 0.0 0 0.0 2.2361552715301514 0.10397043824195862 0.21605446934700012 0.0 0.0 1.0 0.5628004670143127 0.3693418502807617 0 1.0 0 0.0 0 0.0 0 0.0 2.2412545680999756 0.1098373532295227 0.21605446934700012 0.0 0.0 0.999969482421875 0.5652036666870117 0.3767634630203247 0 1.0 0 0.0 0 0.0 0 0.0 2.1040523052215576 0.10063314437866211 0.21605446934700012 0.0 0.0 1.0 0.47745370864868164 0.3544101119041443 0 1.0 0 0.0 0 0.0 0 0.0 2.2361552715301514 0.10397043824195862 0.21605446934700012 0.0 0.0 1.0 0.5628004670143127 0.3693418502807617 0 1.0 0 0.0 0 0.0 0 0.0 2.1110332012176514 0.10642224550247192 0.21605446934700012 0.0 0.0 1.0 0.4824126362800598 0.36117082834243774 0 1.0 0 0.0 0 0.0 0 0.0 2.1040523052215576 0.10063314437866211 0.21605446934700012 0.0 0.0 1.0 0.47745370864868164 0.3544101119041443 0 1.0 0 0.0 0 0.0 0 0.0 2.2304742336273193 0.09781163930892944 0.21605446934700012 0.0 0.0 1.0 0.5600180625915527 0.3614509701728821 0 1.0 0 0.0 0 0.0 0 0.0 2.2361552715301514 0.10397043824195862 0.21605446934700012 0.0 0.0 1.0 0.5628004670143127 0.3693418502807617 0 1.0 0 0.0 0 0.0 0 0.0 2.0974700450897217 0.09494137763977051 0.21605446934700012 0.0 0.0 1.0 0.47272929549217224 0.34793686866760254 0 1.0 0 0.0 0 0.0 0 0.0 2.2304742336273193 0.09781163930892944 0.21605446934700012 0.0 0.0 1.0 0.5600180625915527 0.3614509701728821 0 1.0 0 0.0 0 0.0 0 0.0 2.1040523052215576 0.10063314437866211 0.21605446934700012 0.0 0.0 1.0 0.47745370864868164 0.3544101119041443 0 1.0 0 0.0 0 0.0 0 0.0 2.0974700450897217 0.09494137763977051 0.21605446934700012 0.0 0.0 1.0 0.47272929549217224 0.34793686866760254 0 1.0 0 0.0 0 0.0 0 0.0 2.2242119312286377 0.09136095643043518 0.21605446934700012 0.0 0.0 1.0 0.5568292737007141 0.3530978560447693 0 1.0 0 0.0 0 0.0 0 0.0 2.2304742336273193 0.09781163930892944 0.21605446934700012 0.0 0.0 1.0 0.5600180625915527 0.3614509701728821 0 1.0 0 0.0 0 0.0 0 0.0 2.0912868976593018 0.08934691548347473 0.21605446934700012 0.0 0.0 1.0 0.46825069189071655 0.3417431116104126 0 1.0 0 0.0 0 0.0 0 0.0 2.2242119312286377 0.09136095643043518 0.21605446934700012 0.0 0.0 1.0 0.5568292737007141 0.3530978560447693 0 1.0 0 0.0 0 0.0 0 0.0 2.0974700450897217 0.09494137763977051 0.21605446934700012 0.0 0.0 1.0 0.47272929549217224 0.34793686866760254 0 1.0 0 0.0 0 0.0 0 0.0 2.0912868976593018 0.08934691548347473 0.21605446934700012 0.0 0.0 1.0 0.46825069189071655 0.3417431116104126 0 1.0 0 0.0 0 0.0 0 0.0 2.2173683643341064 0.08461838960647583 0.21605446934700012 0.0 0.0 1.0 0.5532031655311584 0.3442986011505127 0 1.0 0 0.0 0 0.0 0 0.0 2.2242119312286377 0.09136095643043518 0.21605446934700012 0.0 0.0 1.0 0.5568292737007141 0.3530978560447693 0 1.0 0 0.0 0 0.0 0 0.0 2.085502862930298 0.08384972810745239 0.21605446934700012 0.0 0.0 1.0 0.46402648091316223 0.3358168601989746 0 1.0 0 0.0 0 0.0 0 0.0 2.2173683643341064 0.08461838960647583 0.21605446934700012 0.0 0.0 1.0 0.5532031655311584 0.3442986011505127 0 1.0 0 0.0 0 0.0 0 0.0 2.0912868976593018 0.08934691548347473 0.21605446934700012 0.0 0.0 1.0 0.46825069189071655 0.3417431116104126 0 1.0 0 0.0 0 0.0 0 0.0 2.085502862930298 0.08384972810745239 0.21605446934700012 0.0 0.0 1.0 0.46402648091316223 0.3358168601989746 0 1.0 0 0.0 0 0.0 0 0.0 2.2099435329437256 0.07758393883705139 0.21605446934700012 0.0 0.0 1.0 0.5491054058074951 0.3350799083709717 0 1.0 0 0.0 0 0.0 0 0.0 2.2173683643341064 0.08461838960647583 0.21605446934700012 0.0 0.0 1.0 0.5532031655311584 0.3442986011505127 0 1.0 0 0.0 0 0.0 0 0.0 2.0801174640655518 0.07844984531402588 0.21605446934700012 0.0 0.0 0.999969482421875 0.4600628614425659 0.3301432728767395 0 1.0 0 0.0 0 0.0 0 0.0 2.2099435329437256 0.07758393883705139 0.21605446934700012 0.0 0.0 1.0 0.5491054058074951 0.3350799083709717 0 1.0 0 0.0 0 0.0 0 0.0 2.085502862930298 0.08384972810745239 0.21605446934700012 0.0 0.0 1.0 0.46402648091316223 0.3358168601989746 0 1.0 0 0.0 0 0.0 0 0.0 2.0751311779022217 0.07314726710319519 0.21605446934700012 0.0 0.0 1.0 0.45636481046676636 0.32470518350601196 0 1.0 0 0.0 0 0.0 0 0.0 2.2099435329437256 0.07758393883705139 0.21605446934700012 0.0 0.0 1.0 0.5491054058074951 0.3350799083709717 0 1.0 0 0.0 0 0.0 0 0.0 2.0801174640655518 0.07844984531402588 0.21605446934700012 0.0 0.0 0.999969482421875 0.4600628614425659 0.3301432728767395 0 1.0 0 0.0 0 0.0 0 0.0 2.0751311779022217 0.07314726710319519 0.21605446934700012 0.0 0.0 1.0 0.45636481046676636 0.32470518350601196 0 1.0 0 0.0 0 0.0 0 0.0 2.201937437057495 0.07025760412216187 0.21605446934700012 0.0 0.0 0.999969482421875 0.5444985628128052 0.3254818916320801 0 1.0 0 0.0 0 0.0 0 0.0 2.2099435329437256 0.07758393883705139 0.21605446934700012 0.0 0.0 1.0 0.5491054058074951 0.3350799083709717 0 1.0 0 0.0 0 0.0 0 0.0 2.0705435276031494 0.06794196367263794 0.21605446934700012 0.0 0.0 1.0 0.4529351592063904 0.31948477029800415 0 1.0 0 0.0 0 0.0 0 0.0 2.201937437057495 0.07025760412216187 0.21605446934700012 0.0 0.0 0.999969482421875 0.5444985628128052 0.3254818916320801 0 1.0 0 0.0 0 0.0 0 0.0 2.0751311779022217 0.07314726710319519 0.21605446934700012 0.0 0.0 1.0 0.45636481046676636 0.32470518350601196 0 1.0 0 0.0 0 0.0 0 0.0 2.0705435276031494 0.06794196367263794 0.21605446934700012 0.0 0.0 1.0 0.4529351592063904 0.31948477029800415 0 1.0 0 0.0 0 0.0 0 0.0 2.193350076675415 0.06263938546180725 0.21605446934700012 0.0 0.0 0.999969482421875 0.5393425226211548 0.3155598044395447 0 1.0 0 0.0 0 0.0 0 0.0 2.201937437057495 0.07025760412216187 0.21605446934700012 0.0 0.0 0.999969482421875 0.5444985628128052 0.3254818916320801 0 1.0 0 0.0 0 0.0 0 0.0 2.066354990005493 0.06283397972583771 0.21605446934700012 0.0 0.0 1.0 0.4497760236263275 0.31446272134780884 0 1.0 0 0.0 0 0.0 0 0.0 2.193350076675415 0.06263938546180725 0.21605446934700012 0.0 0.0 0.999969482421875 0.5393425226211548 0.3155598044395447 0 1.0 0 0.0 0 0.0 0 0.0 2.0705435276031494 0.06794196367263794 0.21605446934700012 0.0 0.0 1.0 0.4529351592063904 0.31948477029800415 0 1.0 0 0.0 0 0.0 0 0.0 2.062565565109253 0.05782328546047211 0.21605446934700012 0.0 0.0 0.999969482421875 0.44688835740089417 0.3096204400062561 0 1.0 0 0.0 0 0.0 0 0.0 2.193350076675415 0.06263938546180725 0.21605446934700012 0.0 0.0 0.999969482421875 0.5393425226211548 0.3155598044395447 0 1.0 0 0.0 0 0.0 0 0.0 2.066354990005493 0.06283397972583771 0.21605446934700012 0.0 0.0 1.0 0.4497760236263275 0.31446272134780884 0 1.0 0 0.0 0 0.0 0 0.0 2.062565565109253 0.05782328546047211 0.21605446934700012 0.0 0.0 0.999969482421875 0.44688835740089417 0.3096204400062561 0 1.0 0 0.0 0 0.0 0 0.0 2.184180974960327 0.05472928285598755 0.21605446934700012 0.0 0.0 0.999969482421875 0.5335952639579773 0.3053867816925049 0 1.0 0 0.0 0 0.0 0 0.0 2.193350076675415 0.06263938546180725 0.21605446934700012 0.0 0.0 0.999969482421875 0.5393425226211548 0.3155598044395447 0 1.0 0 0.0 0 0.0 0 0.0 2.0591747760772705 0.05290988087654114 0.21605446934700012 0.0 0.0 1.0 0.4442720413208008 0.3049391508102417 0 1.0 0 0.0 0 0.0 0 0.0 2.184180974960327 0.05472928285598755 0.21605446934700012 0.0 0.0 0.999969482421875 0.5335952639579773 0.3053867816925049 0 1.0 0 0.0 0 0.0 0 0.0 2.062565565109253 0.05782328546047211 0.21605446934700012 0.0 0.0 0.999969482421875 0.44688835740089417 0.3096204400062561 0 1.0 0 0.0 0 0.0 0 0.0 2.0591747760772705 0.05290988087654114 0.21605446934700012 0.0 0.0 1.0 0.4442720413208008 0.3049391508102417 0 1.0 0 0.0 0 0.0 0 0.0 2.1744306087493896 0.046527326107025146 0.21605446934700012 0.0 0.0 1.0 0.527215301990509 0.29505491256713867 0 1.0 0 0.0 0 0.0 0 0.0 2.184180974960327 0.05472928285598755 0.21605446934700012 0.0 0.0 0.999969482421875 0.5335952639579773 0.3053867816925049 0 1.0 0 0.0 0 0.0 0 0.0 2.056183099746704 0.0480937659740448 0.21605446934700012 0.0 0.0 1.0 0.44192713499069214 0.3004010319709778 0 1.0 0 0.0 0 0.0 0 0.0 2.1744306087493896 0.046527326107025146 0.21605446934700012 0.0 0.0 1.0 0.527215301990509 0.29505491256713867 0 1.0 0 0.0 0 0.0 0 0.0 2.0591747760772705 0.05290988087654114 0.21605446934700012 0.0 0.0 1.0 0.4442720413208008 0.3049391508102417 0 1.0 0 0.0 0 0.0 0 0.0 2.0535900592803955 0.04337495565414429 0.21605446934700012 0.0 0.0 1.0 0.4398529827594757 0.2959889769554138 0 1.0 0 0.0 0 0.0 0 0.0 2.1744306087493896 0.046527326107025146 0.21605446934700012 0.0 0.0 1.0 0.527215301990509 0.29505491256713867 0 1.0 0 0.0 0 0.0 0 0.0 2.056183099746704 0.0480937659740448 0.21605446934700012 0.0 0.0 1.0 0.44192713499069214 0.3004010319709778 0 1.0 0 0.0 0 0.0 0 0.0 2.0535900592803955 0.04337495565414429 0.21605446934700012 0.0 0.0 1.0 0.4398529827594757 0.2959889769554138 0 1.0 0 0.0 0 0.0 0 0.0 2.1693994998931885 0.04227796196937561 0.21605446934700012 0.0 0.0 1.0 0.5238203406333923 0.28983134031295776 0 1.0 0 0.0 0 0.0 0 0.0 2.1744306087493896 0.046527326107025146 0.21605446934700012 0.0 0.0 1.0 0.527215301990509 0.29505491256713867 0 1.0 0 0.0 0 0.0 0 0.0 2.0512959957122803 0.03859776258468628 0.21605446934700012 0.0 0.0 0.999969482421875 0.43797069787979126 0.29154956340789795 0 1.0 0 0.0 0 0.0 0 0.0 2.1693994998931885 0.04227796196937561 0.21605446934700012 0.0 0.0 1.0 0.5238203406333923 0.28983134031295776 0 1.0 0 0.0 0 0.0 0 0.0 2.0535900592803955 0.04337495565414429 0.21605446934700012 0.0 0.0 1.0 0.4398529827594757 0.2959889769554138 0 1.0 0 0.0 0 0.0 0 0.0 2.0512959957122803 0.03859776258468628 0.21605446934700012 0.0 0.0 0.999969482421875 0.43797069787979126 0.29154956340789795 0 1.0 0 0.0 0 0.0 0 0.0 2.164696455001831 0.03816966712474823 0.21605446934700012 0.0 0.0 1.0 0.5205872654914856 0.2848947048187256 0 1.0 0 0.0 0 0.0 0 0.0 2.1693994998931885 0.04227796196937561 0.21605446934700012 0.0 0.0 1.0 0.5238203406333923 0.28983134031295776 0 1.0 0 0.0 0 0.0 0 0.0 2.049201726913452 0.03360651433467865 0.21605446934700012 0.0 0.0 1.0 0.43620121479034424 0.2869437336921692 0 1.0 0 0.0 0 0.0 0 0.0 2.164696455001831 0.03816966712474823 0.21605446934700012 0.0 0.0 1.0 0.5205872654914856 0.2848947048187256 0 1.0 0 0.0 0 0.0 0 0.0 2.0512959957122803 0.03859776258468628 0.21605446934700012 0.0 0.0 0.999969482421875 0.43797069787979126 0.29154956340789795 0 1.0 0 0.0 0 0.0 0 0.0 2.049201726913452 0.03360651433467865 0.21605446934700012 0.0 0.0 1.0 0.43620121479034424 0.2869437336921692 0 1.0 0 0.0 0 0.0 0 0.0 2.1603219509124756 0.0342024564743042 0.21605446934700012 0.0 0.0 0.999969482421875 0.5175286531448364 0.2802373170852661 0 1.0 0 0.0 0 0.0 0 0.0 2.164696455001831 0.03816966712474823 0.21605446934700012 0.0 0.0 1.0 0.5205872654914856 0.2848947048187256 0 1.0 0 0.0 0 0.0 0 0.0 2.049201726913452 0.03360651433467865 0.21605446934700012 0.0 0.0 1.0 0.43620121479034424 0.2869437336921692 0 1.0 0 0.0 0 0.0 0 0.0 2.156275510787964 0.030376330018043518 0.21605446934700012 0.0 0.0 1.0 0.5146552920341492 0.27584993839263916 0 1.0 0 0.0 0 0.0 0 0.0 2.1603219509124756 0.0342024564743042 0.21605446934700012 0.0 0.0 0.999969482421875 0.5175286531448364 0.2802373170852661 0 1.0 0 0.0 0 0.0 0 0.0 2.047306776046753 0.028401225805282593 0.21605446934700012 0.0 0.0 1.0 0.434542715549469 0.282177209854126 0 1.0 0 0.0 0 0.0 0 0.0 2.156275510787964 0.030376330018043518 0.21605446934700012 0.0 0.0 1.0 0.5146552920341492 0.27584993839263916 0 1.0 0 0.0 0 0.0 0 0.0 2.049201726913452 0.03360651433467865 0.21605446934700012 0.0 0.0 1.0 0.43620121479034424 0.2869437336921692 0 1.0 0 0.0 0 0.0 0 0.0 2.047306776046753 0.028401225805282593 0.21605446934700012 0.0 0.0 1.0 0.434542715549469 0.282177209854126 0 1.0 0 0.0 0 0.0 0 0.0 2.152557611465454 0.026691272854804993 0.21605446934700012 0.0 0.0 1.0 0.5119778513908386 0.2717220187187195 0 1.0 0 0.0 0 0.0 0 0.0 2.156275510787964 0.030376330018043518 0.21605446934700012 0.0 0.0 1.0 0.5146552920341492 0.27584993839263916 0 1.0 0 0.0 0 0.0 0 0.0 2.045611619949341 0.022981882095336914 0.21605446934700012 0.0 0.0 1.0 0.4329943060874939 0.2772558331489563 0 1.0 0 0.0 0 0.0 0 0.0 2.152557611465454 0.026691272854804993 0.21605446934700012 0.0 0.0 1.0 0.5119778513908386 0.2717220187187195 0 1.0 0 0.0 0 0.0 0 0.0 2.047306776046753 0.028401225805282593 0.21605446934700012 0.0 0.0 1.0 0.434542715549469 0.282177209854126 0 1.0 0 0.0 0 0.0 0 0.0 2.045611619949341 0.022981882095336914 0.21605446934700012 0.0 0.0 1.0 0.4329943060874939 0.2772558331489563 0 1.0 0 0.0 0 0.0 0 0.0 2.1491682529449463 0.023147299885749817 0.21605446934700012 0.0 0.0 1.0 0.5095055103302002 0.2678421139717102 0 1.0 0 0.0 0 0.0 0 0.0 2.152557611465454 0.026691272854804993 0.21605446934700012 0.0 0.0 1.0 0.5119778513908386 0.2717220187187195 0 1.0 0 0.0 0 0.0 0 0.0 2.045611619949341 0.022981882095336914 0.21605446934700012 0.0 0.0 1.0 0.4329943060874939 0.2772558331489563 0 1.0 0 0.0 0 0.0 0 0.0 2.1461069583892822 0.019744396209716797 0.21605446934700012 0.0 0.0 1.0 0.5072463750839233 0.26419901847839355 0 1.0 0 0.0 0 0.0 0 0.0 2.1491682529449463 0.023147299885749817 0.21605446934700012 0.0 0.0 1.0 0.5095055103302002 0.2678421139717102 0 1.0 0 0.0 0 0.0 0 0.0 2.0441157817840576 0.017348498106002808 0.21605446934700012 0.0 0.0 1.0 0.43155452609062195 0.2721865177154541 0 1.0 0 0.0 0 0.0 0 0.0 2.1461069583892822 0.019744396209716797 0.21605446934700012 0.0 0.0 1.0 0.5072463750839233 0.26419901847839355 0 1.0 0 0.0 0 0.0 0 0.0 2.045611619949341 0.022981882095336914 0.21605446934700012 0.0 0.0 1.0 0.4329943060874939 0.2772558331489563 0 1.0 0 0.0 0 0.0 0 0.0 2.0441157817840576 0.017348498106002808 0.21605446934700012 0.0 0.0 1.0 0.43155452609062195 0.2721865177154541 0 1.0 0 0.0 0 0.0 0 0.0 2.14337420463562 0.016482576727867126 0.21605446934700012 0.0 0.0 1.0 0.5052080750465393 0.2607806921005249 0 1.0 0 0.0 0 0.0 0 0.0 2.1461069583892822 0.019744396209716797 0.21605446934700012 0.0 0.0 1.0 0.5072463750839233 0.26419901847839355 0 1.0 0 0.0 0 0.0 0 0.0 2.0428192615509033 0.01150105893611908 0.21605446934700012 0.0 0.0 1.0 0.4302225410938263 0.26697635650634766 0 1.0 0 0.0 0 0.0 0 0.0 2.14337420463562 0.016482576727867126 0.21605446934700012 0.0 0.0 1.0 0.5052080750465393 0.2607806921005249 0 1.0 0 0.0 0 0.0 0 0.0 2.0441157817840576 0.017348498106002808 0.21605446934700012 0.0 0.0 1.0 0.43155452609062195 0.2721865177154541 0 1.0 0 0.0 0 0.0 0 0.0 2.0428192615509033 0.01150105893611908 0.21605446934700012 0.0 0.0 1.0 0.4302225410938263 0.26697635650634766 0 1.0 0 0.0 0 0.0 0 0.0 2.14096999168396 0.013361826539039612 0.21605446934700012 0.0 0.0 1.0 0.5033973455429077 0.2575761675834656 0 1.0 0 0.0 0 0.0 0 0.0 2.14337420463562 0.016482576727867126 0.21605446934700012 0.0 0.0 1.0 0.5052080750465393 0.2607806921005249 0 1.0 0 0.0 0 0.0 0 0.0 2.0428192615509033 0.01150105893611908 0.21605446934700012 0.0 0.0 1.0 0.4302225410938263 0.26697635650634766 0 1.0 0 0.0 0 0.0 0 0.0 2.1388938426971436 0.010382160544395447 0.21605446934700012 0.0 0.0 1.0 0.5018196105957031 0.2545742988586426 0 1.0 0 0.0 0 0.0 0 0.0 2.14096999168396 0.013361826539039612 0.21605446934700012 0.0 0.0 1.0 0.5033973455429077 0.2575761675834656 0 1.0 0 0.0 0 0.0 0 0.0 2.041722059249878 0.00543956458568573 0.21605446934700012 0.0 0.0 1.0 0.4289977252483368 0.2616328001022339 0 1.0 0 0.0 0 0.0 0 0.0 2.1388938426971436 0.010382160544395447 0.21605446934700012 0.0 0.0 1.0 0.5018196105957031 0.2545742988586426 0 1.0 0 0.0 0 0.0 0 0.0 2.0428192615509033 0.01150105893611908 0.21605446934700012 0.0 0.0 1.0 0.4302225410938263 0.26697635650634766 0 1.0 0 0.0 0 0.0 0 0.0 2.041722059249878 0.00543956458568573 0.21605446934700012 0.0 0.0 1.0 0.4289977252483368 0.2616328001022339 0 1.0 0 0.0 0 0.0 0 0.0 2.137146234512329 0.0075435638427734375 0.21605446934700012 0.0 0.0 0.999969482421875 0.5004804134368896 0.2517651915550232 0 1.0 0 0.0 0 0.0 0 0.0 2.1388938426971436 0.010382160544395447 0.21605446934700012 0.0 0.0 1.0 0.5018196105957031 0.2545742988586426 0 1.0 0 0.0 0 0.0 0 0.0 2.041722059249878 0.00543956458568573 0.21605446934700012 0.0 0.0 1.0 0.4289977252483368 0.2616328001022339 0 1.0 0 0.0 0 0.0 0 0.0 2.1357266902923584 0.004846066236495972 0.21605446934700012 0.0 0.0 1.0 0.49938392639160156 0.2491394281387329 0 1.0 0 0.0 0 0.0 0 0.0 2.137146234512329 0.0075435638427734375 0.21605446934700012 0.0 0.0 0.999969482421875 0.5004804134368896 0.2517651915550232 0 1.0 0 0.0 0 0.0 0 0.0 2.0408246517181396 -0.0008359700441360474 0.21605446934700012 0.0 0.0 1.0 0.42788001894950867 0.25616389513015747 0 1.0 0 0.0 0 0.0 0 0.0 2.1357266902923584 0.004846066236495972 0.21605446934700012 0.0 0.0 1.0 0.49938392639160156 0.2491394281387329 0 1.0 0 0.0 0 0.0 0 0.0 2.041722059249878 0.00543956458568573 0.21605446934700012 0.0 0.0 1.0 0.4289977252483368 0.2616328001022339 0 1.0 0 0.0 0 0.0 0 0.0 2.0408246517181396 -0.0008359700441360474 0.21605446934700012 0.0 0.0 1.0 0.42788001894950867 0.25616389513015747 0 1.0 0 0.0 0 0.0 0 0.0 2.134528875350952 0.0020464062690734863 0.21605446934700012 0.0 0.0 1.0 0.49845102429389954 0.24645698070526123 0 1.0 0 0.0 0 0.0 0 0.0 2.1357266902923584 0.004846066236495972 0.21605446934700012 0.0 0.0 1.0 0.49938392639160156 0.2491394281387329 0 1.0 0 0.0 0 0.0 0 0.0 2.0408246517181396 -0.0008359700441360474 0.21605446934700012 0.0 0.0 1.0 0.42788001894950867 0.25616389513015747 0 1.0 0 0.0 0 0.0 0 0.0 2.1334450244903564 -0.0010986626148223877 0.21605446934700012 0.0 0.0 1.0 0.49759870767593384 0.24348896741867065 0 1.0 0 0.0 0 0.0 0 0.0 2.134528875350952 0.0020464062690734863 0.21605446934700012 0.0 0.0 1.0 0.49845102429389954 0.24645698070526123 0 1.0 0 0.0 0 0.0 0 0.0 2.0401265621185303 -0.007325559854507446 0.21605446934700012 0.0 0.0 1.0 0.4268689751625061 0.2505781054496765 0 1.0 0 0.0 0 0.0 0 0.0 2.1334450244903564 -0.0010986626148223877 0.21605446934700012 0.0 0.0 1.0 0.49759870767593384 0.24348896741867065 0 1.0 0 0.0 0 0.0 0 0.0 2.0408246517181396 -0.0008359700441360474 0.21605446934700012 0.0 0.0 1.0 0.42788001894950867 0.25616389513015747 0 1.0 0 0.0 0 0.0 0 0.0 2.0401265621185303 -0.007325559854507446 0.21605446934700012 0.0 0.0 1.0 0.4268689751625061 0.2505781054496765 0 1.0 0 0.0 0 0.0 0 0.0 2.1324756145477295 -0.0045891255140304565 0.21605446934700012 0.0 0.0 1.0 0.4968274235725403 0.24024468660354614 0 1.0 0 0.0 0 0.0 0 0.0 2.1334450244903564 -0.0010986626148223877 0.21605446934700012 0.0 0.0 1.0 0.49759870767593384 0.24348896741867065 0 1.0 0 0.0 0 0.0 0 0.0 2.0401265621185303 -0.007325559854507446 0.21605446934700012 0.0 0.0 1.0 0.4268689751625061 0.2505781054496765 0 1.0 0 0.0 0 0.0 0 0.0 2.1316206455230713 -0.00842498242855072 0.21605446934700012 0.0 0.0 0.999969482421875 0.49613747000694275 0.23673486709594727 0 1.0 0 0.0 0 0.0 0 0.0 2.1324756145477295 -0.0045891255140304565 0.21605446934700012 0.0 0.0 1.0 0.4968274235725403 0.24024468660354614 0 1.0 0 0.0 0 0.0 0 0.0 2.03962779045105 -0.014029204845428467 0.21605446934700012 0.0 0.0 0.999969482421875 0.4259648323059082 0.244884192943573 0 1.0 0 0.0 0 0.0 0 0.0 2.1316206455230713 -0.00842498242855072 0.21605446934700012 0.0 0.0 0.999969482421875 0.49613747000694275 0.23673486709594727 0 1.0 0 0.0 0 0.0 0 0.0 2.0401265621185303 -0.007325559854507446 0.21605446934700012 0.0 0.0 1.0 0.4268689751625061 0.2505781054496765 0 1.0 0 0.0 0 0.0 0 0.0 2.03962779045105 -0.014029204845428467 0.21605446934700012 0.0 0.0 0.999969482421875 0.4259648323059082 0.244884192943573 0 1.0 0 0.0 0 0.0 0 0.0 2.130880117416382 -0.012606248259544373 0.21605446934700012 0.0 0.0 1.0 0.4955292344093323 0.23297131061553955 0 1.0 0 0.0 0 0.0 0 0.0 2.1316206455230713 -0.00842498242855072 0.21605446934700012 0.0 0.0 0.999969482421875 0.49613747000694275 0.23673486709594727 0 1.0 0 0.0 0 0.0 0 0.0 2.03962779045105 -0.014029204845428467 0.21605446934700012 0.0 0.0 0.999969482421875 0.4259648323059082 0.244884192943573 0 1.0 0 0.0 0 0.0 0 0.0 2.130253553390503 -0.01713290810585022 0.21605446934700012 0.0 0.0 1.0 0.49500298500061035 0.22896718978881836 0 1.0 0 0.0 0 0.0 0 0.0 2.130880117416382 -0.012606248259544373 0.21605446934700012 0.0 0.0 1.0 0.4955292344093323 0.23297131061553955 0 1.0 0 0.0 0 0.0 0 0.0 2.0393288135528564 -0.020946890115737915 0.21605446934700012 0.0 0.0 1.0 0.42516839504241943 0.23909145593643188 0 1.0 0 0.0 0 0.0 0 0.0 2.130253553390503 -0.01713290810585022 0.21605446934700012 0.0 0.0 1.0 0.49500298500061035 0.22896718978881836 0 1.0 0 0.0 0 0.0 0 0.0 2.03962779045105 -0.014029204845428467 0.21605446934700012 0.0 0.0 0.999969482421875 0.4259648323059082 0.244884192943573 0 1.0 0 0.0 0 0.0 0 0.0 2.0393288135528564 -0.020946890115737915 0.21605446934700012 0.0 0.0 1.0 0.42516839504241943 0.23909145593643188 0 1.0 0 0.0 0 0.0 0 0.0 2.1297414302825928 -0.02200496196746826 0.21605446934700012 0.0 0.0 0.999969482421875 0.4945599436759949 0.22473657131195068 0 1.0 0 0.0 0 0.0 0 0.0 2.130253553390503 -0.01713290810585022 0.21605446934700012 0.0 0.0 1.0 0.49500298500061035 0.22896718978881836 0 1.0 0 0.0 0 0.0 0 0.0 2.039229154586792 -0.028078630566596985 0.21605446934700012 0.0 0.0 1.0 0.4244801998138428 0.23320960998535156 0 1.0 0 0.0 0 0.0 0 0.0 2.1297414302825928 -0.02200496196746826 0.21605446934700012 0.0 0.0 0.999969482421875 0.4945599436759949 0.22473657131195068 0 1.0 0 0.0 0 0.0 0 0.0 2.0393288135528564 -0.020946890115737915 0.21605446934700012 0.0 0.0 1.0 0.42516839504241943 0.23909145593643188 0 1.0 0 0.0 0 0.0 0 0.0 2.039229154586792 -0.028078630566596985 0.21605446934700012 0.0 0.0 1.0 0.4244801998138428 0.23320960998535156 0 1.0 0 0.0 0 0.0 0 0.0 2.1293437480926514 -0.027222424745559692 0.21605446934700012 0.0 0.0 0.999969482421875 0.4942011833190918 0.2202945351600647 0 1.0 0 0.0 0 0.0 0 0.0 2.1297414302825928 -0.02200496196746826 0.21605446934700012 0.0 0.0 0.999969482421875 0.4945599436759949 0.22473657131195068 0 1.0 0 0.0 0 0.0 0 0.0 2.039229154586792 -0.028078630566596985 0.21605446934700012 0.0 0.0 1.0 0.4244801998138428 0.23320960998535156 0 1.0 0 0.0 0 0.0 0 0.0 2.1290605068206787 -0.03278528153896332 0.21605446934700012 0.0 0.0 0.999969482421875 0.4939279854297638 0.2156570553779602 0 1.0 0 0.0 0 0.0 0 0.0 2.1293437480926514 -0.027222424745559692 0.21605446934700012 0.0 0.0 0.999969482421875 0.4942011833190918 0.2202945351600647 0 1.0 0 0.0 0 0.0 0 0.0 2.039231538772583 -0.028883740305900574 0.21605446934700012 0.0 0.0 1.0 0.4244113266468048 0.23255091905593872 0 1.0 0 0.0 0 0.0 0 0.0 2.1290605068206787 -0.03278528153896332 0.21605446934700012 0.0 0.0 0.999969482421875 0.4939279854297638 0.2156570553779602 0 1.0 0 0.0 0 0.0 0 0.0 2.039229154586792 -0.028078630566596985 0.21605446934700012 0.0 0.0 1.0 0.4244801998138428 0.23320960998535156 0 1.0 0 0.0 0 0.0 0 0.0 2.039238691329956 -0.02989804744720459 0.21605446934700012 0.0 0.0 1.0 0.4243272542953491 0.23172283172607422 0 1.0 0 0.0 0 0.0 0 0.0 2.1290605068206787 -0.03278528153896332 0.21605446934700012 0.0 0.0 0.999969482421875 0.4939279854297638 0.2156570553779602 0 1.0 0 0.0 0 0.0 0 0.0 2.039231538772583 -0.028883740305900574 0.21605446934700012 0.0 0.0 1.0 0.4244113266468048 0.23255091905593872 0 1.0 0 0.0 0 0.0 0 0.0 2.0392510890960693 -0.03112153708934784 0.21605446934700012 0.0 0.0 1.0 0.4242281913757324 0.2307267189025879 0 1.0 0 0.0 0 0.0 0 0.0 2.1290605068206787 -0.03278528153896332 0.21605446934700012 0.0 0.0 0.999969482421875 0.4939279854297638 0.2156570553779602 0 1.0 0 0.0 0 0.0 0 0.0 2.039238691329956 -0.02989804744720459 0.21605446934700012 0.0 0.0 1.0 0.4243272542953491 0.23172283172607422 0 1.0 0 0.0 0 0.0 0 0.0 2.0392682552337646 -0.03255420923233032 0.21605446934700012 0.0 0.0 1.0 0.4241137206554413 0.22956520318984985 0 1.0 0 0.0 0 0.0 0 0.0 2.1290605068206787 -0.03278528153896332 0.21605446934700012 0.0 0.0 0.999969482421875 0.4939279854297638 0.2156570553779602 0 1.0 0 0.0 0 0.0 0 0.0 2.0392510890960693 -0.03112153708934784 0.21605446934700012 0.0 0.0 1.0 0.4242281913757324 0.2307267189025879 0 1.0 0 0.0 0 0.0 0 0.0 2.039290189743042 -0.03419606387615204 0.21605446934700012 0.0 0.0 1.0 0.4239836633205414 0.22824078798294067 0 1.0 0 0.0 0 0.0 0 0.0 2.1290605068206787 -0.03278528153896332 0.21605446934700012 0.0 0.0 0.999969482421875 0.4939279854297638 0.2156570553779602 0 1.0 0 0.0 0 0.0 0 0.0 2.0392682552337646 -0.03255420923233032 0.21605446934700012 0.0 0.0 1.0 0.4241137206554413 0.22956520318984985 0 1.0 0 0.0 0 0.0 0 0.0 2.039290189743042 -0.03419606387615204 0.21605446934700012 0.0 0.0 1.0 0.4239836633205414 0.22824078798294067 0 1.0 0 0.0 0 0.0 0 0.0 2.1288912296295166 -0.03869353234767914 0.21605446934700012 0.0 0.0 1.0 0.493741512298584 0.2108408808708191 0 1.0 0 0.0 0 0.0 0 0.0 2.1290605068206787 -0.03278528153896332 0.21605446934700012 0.0 0.0 0.999969482421875 0.4939279854297638 0.2156570553779602 0 1.0 0 0.0 0 0.0 0 0.0 2.0393168926239014 -0.03604710102081299 0.21605446934700012 0.0 0.0 1.0 0.4238378405570984 0.2267565131187439 0 1.0 0 0.0 0 0.0 0 0.0 2.1288912296295166 -0.03869353234767914 0.21605446934700012 0.0 0.0 1.0 0.493741512298584 0.2108408808708191 0 1.0 0 0.0 0 0.0 0 0.0 2.039290189743042 -0.03419606387615204 0.21605446934700012 0.0 0.0 1.0 0.4239836633205414 0.22824078798294067 0 1.0 0 0.0 0 0.0 0 0.0 2.0393483638763428 -0.03810732066631317 0.21605446934700012 0.0 0.0 0.999969482421875 0.423676073551178 0.22511571645736694 0 1.0 0 0.0 0 0.0 0 0.0 2.1288912296295166 -0.03869353234767914 0.21605446934700012 0.0 0.0 1.0 0.493741512298584 0.2108408808708191 0 1.0 0 0.0 0 0.0 0 0.0 2.0393168926239014 -0.03604710102081299 0.21605446934700012 0.0 0.0 1.0 0.4238378405570984 0.2267565131187439 0 1.0 0 0.0 0 0.0 0 0.0 2.0393850803375244 -0.04037673771381378 0.21605446934700012 0.0 0.0 1.0 0.4234984517097473 0.22332197427749634 0 1.0 0 0.0 0 0.0 0 0.0 2.1288912296295166 -0.03869353234767914 0.21605446934700012 0.0 0.0 1.0 0.493741512298584 0.2108408808708191 0 1.0 0 0.0 0 0.0 0 0.0 2.0393483638763428 -0.03810732066631317 0.21605446934700012 0.0 0.0 0.999969482421875 0.423676073551178 0.22511571645736694 0 1.0 0 0.0 0 0.0 0 0.0 2.0393850803375244 -0.04037673771381378 0.21605446934700012 0.0 0.0 1.0 0.4234984517097473 0.22332197427749634 0 1.0 0 0.0 0 0.0 0 0.0 2.1288363933563232 -0.04494717717170715 0.21605446934700012 0.0 0.0 1.0 0.49364396929740906 0.20586365461349487 0 1.0 0 0.0 0 0.0 0 0.0 2.1288912296295166 -0.03869353234767914 0.21605446934700012 0.0 0.0 1.0 0.493741512298584 0.2108408808708191 0 1.0 0 0.0 0 0.0 0 0.0 2.039426565170288 -0.042855337262153625 0.21605446934700012 0.0 0.0 1.0 0.42330440878868103 0.22137945890426636 0 1.0 0 0.0 0 0.0 0 0.0 2.1288363933563232 -0.04494717717170715 0.21605446934700012 0.0 0.0 1.0 0.49364396929740906 0.20586365461349487 0 1.0 0 0.0 0 0.0 0 0.0 2.0393850803375244 -0.04037673771381378 0.21605446934700012 0.0 0.0 1.0 0.4234984517097473 0.22332197427749634 0 1.0 0 0.0 0 0.0 0 0.0 2.039472818374634 -0.0455431193113327 0.21605446934700012 0.0 0.0 1.0 0.42309364676475525 0.21929270029067993 0 1.0 0 0.0 0 0.0 0 0.0 2.1288363933563232 -0.04494717717170715 0.21605446934700012 0.0 0.0 1.0 0.49364396929740906 0.20586365461349487 0 1.0 0 0.0 0 0.0 0 0.0 2.039426565170288 -0.042855337262153625 0.21605446934700012 0.0 0.0 1.0 0.42330440878868103 0.22137945890426636 0 1.0 0 0.0 0 0.0 0 0.0 2.039472818374634 -0.0455431193113327 0.21605446934700012 0.0 0.0 1.0 0.42309364676475525 0.21929270029067993 0 1.0 0 0.0 0 0.0 0 0.0 2.128896474838257 -0.05154623091220856 0.21605446934700012 0.0 0.0 1.0 0.4936378598213196 0.20074313879013062 0 1.0 0 0.0 0 0.0 0 0.0 2.1288363933563232 -0.04494717717170715 0.21605446934700012 0.0 0.0 1.0 0.49364396929740906 0.20586365461349487 0 1.0 0 0.0 0 0.0 0 0.0 2.0395238399505615 -0.04844008386135101 0.21605446934700012 0.0 0.0 1.0 0.4228658974170685 0.21706622838974 0 1.0 0 0.0 0 0.0 0 0.0 2.128896474838257 -0.05154623091220856 0.21605446934700012 0.0 0.0 1.0 0.4936378598213196 0.20074313879013062 0 1.0 0 0.0 0 0.0 0 0.0 2.039472818374634 -0.0455431193113327 0.21605446934700012 0.0 0.0 1.0 0.42309364676475525 0.21929270029067993 0 1.0 0 0.0 0 0.0 0 0.0 2.0395796298980713 -0.05154623091220856 0.21605446934700012 0.0 0.0 1.0 0.4226208031177521 0.214705228805542 0 1.0 0 0.0 0 0.0 0 0.0 2.128896474838257 -0.05154623091220856 0.21605446934700012 0.0 0.0 1.0 0.4936378598213196 0.20074313879013062 0 1.0 0 0.0 0 0.0 0 0.0 2.0395238399505615 -0.04844008386135101 0.21605446934700012 0.0 0.0 1.0 0.4228658974170685 0.21706622838974 0 1.0 0 0.0 0 0.0 0 0.0 2.0395796298980713 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.40843620896339417 0.13705360889434814 0 1.0 0 0.0 0 0.0 0 0.0 2.1380035877227783 -0.08552171289920807 0.21605446934700012 0.0 0.0 1.0 0.5012896656990051 0.17674368619918823 0 1.0 0 0.0 0 0.0 0 0.0 2.0395796298980713 -0.08552171289920807 0.21605446934700012 0.0 0.0 1.0 0.4193791449069977 0.19080489873886108 0 1.0 0 0.0 0 0.0 0 0.0 2.0395796298980713 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.40843620896339417 0.13705360889434814 0 1.0 0 0.0 0 0.0 0 0.0 2.1380035877227783 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.5014961957931519 0.1221572756767273 0 1.0 0 0.0 0 0.0 0 0.0 2.1380035877227783 -0.08552171289920807 0.21605446934700012 0.0 0.0 1.0 0.5012896656990051 0.17674368619918823 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.2619388997554779 0.2160544991493225 0.0 0.0 1.0 0.45288121700286865 0.7265979051589966 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.18803346157073975 0.21605448424816132 0.0 0.0 1.0 0.49900293350219727 0.6947826147079468 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.3193819522857666 0.21605446934700012 0.0 0.0 1.0 0.4990980625152588 0.7493226528167725 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.18803346157073975 0.21605448424816132 0.0 0.0 1.0 0.45019370317459106 0.6925525665283203 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.18803346157073975 0.21605448424816132 0.0 0.0 1.0 0.49900293350219727 0.6947826147079468 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.2619388997554779 0.2160544991493225 0.0 0.0 1.0 0.45288121700286865 0.7265979051589966 0 1.0 0 0.0 0 0.0 0 0.0 1.6378281116485596 0.10957461595535278 0.21605446934700012 0.0 0.0 1.0 0.42526912689208984 0.6394941806793213 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.18803346157073975 0.21605448424816132 0.0 0.0 1.0 0.45019370317459106 0.6925525665283203 0 1.0 0 0.0 0 0.0 0 0.0 1.6378281116485596 0.18803346157073975 0.21605448424816132 0.0 0.0 1.0 0.42952170968055725 0.6872974038124084 0 1.0 0 0.0 0 0.0 0 0.0 1.6378281116485596 0.10957461595535278 0.21605446934700012 0.0 0.0 1.0 0.42526912689208984 0.6394941806793213 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.18803346157073975 0.21605448424816132 0.0 0.0 1.0 0.49900293350219727 0.6947826147079468 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.18803346157073975 0.21605448424816132 0.0 0.0 1.0 0.45019370317459106 0.6925525665283203 0 1.0 0 0.0 0 0.0 0 0.0 1.6378281116485596 0.10957461595535278 0.21605446934700012 0.0 0.0 1.0 0.42526912689208984 0.6394941806793213 0 1.0 0 0.0 0 0.0 0 0.0 1.8490369319915771 0.18803346157073975 0.21605448424816132 0.0 0.0 0.999969482421875 0.531541109085083 0.6883732080459595 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.18803346157073975 0.21605448424816132 0.0 0.0 1.0 0.49900293350219727 0.6947826147079468 0 1.0 0 0.0 0 0.0 0 0.0 1.6378281116485596 0.10957461595535278 0.21605446934700012 0.0 0.0 1.0 0.42526912689208984 0.6394941806793213 0 1.0 0 0.0 0 0.0 0 0.0 1.8490369319915771 0.10957461595535278 0.21605446934700012 0.0 0.0 1.0 0.5335628986358643 0.6399606466293335 0 1.0 0 0.0 0 0.0 0 0.0 1.8490369319915771 0.18803346157073975 0.21605448424816132 0.0 0.0 0.999969482421875 0.531541109085083 0.6883732080459595 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.10957461595535278 0.21605446934700012 0.0 1.0 -0.0 0.4469967484474182 0.6443145275115967 0 1.0 0 0.0 0 0.0 0 0.0 1.8490369319915771 0.10957461595535278 0.21605446934700012 0.0 0.999969482421875 -0.0 0.5335628986358643 0.6399606466293335 0 1.0 0 0.0 0 0.0 0 0.0 1.6378281116485596 0.10957461595535278 0.21605446934700012 0.9892269372940063 0.06616412848234177 0.13046662509441376 0.42526912689208984 0.6394941806793213 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 -0.05259701609611511 0.21605446934700012 0.0 0.0 1.0 0.4389623999595642 0.49155598878860474 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.10957461595535278 0.21605446934700012 0.0 0.0 1.0 0.49893590807914734 0.6462191343307495 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.10957461595535278 0.21605446934700012 0.0 0.0 1.0 0.4469967484474182 0.6443145275115967 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.10957461595535278 0.21605446934700012 0.0 -1.0 -0.0 0.49893590807914734 0.6462191343307495 0 1.0 0 0.0 0 0.0 0 0.0 1.8490369319915771 0.10957461595535278 0.21605446934700012 0.0 -0.999969482421875 -0.0 0.5335628986358643 0.6399606466293335 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.10957461595535278 0.21605446934700012 0.0 -0.999969482421875 -0.0 0.4469967484474182 0.6443145275115967 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 -0.05259701609611511 0.21605446934700012 0.0 0.0 1.0 0.4389623999595642 0.49155598878860474 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 -0.040337830781936646 0.21605446934700012 0.0 0.0 1.0 0.4987790882587433 0.5032071471214294 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.10957461595535278 0.21605446934700012 0.0 0.0 1.0 0.49893590807914734 0.6462191343307495 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 -0.05259701609611511 0.21605446934700012 0.0 0.0 1.0 0.4389623999595642 0.49155598878860474 0 1.0 0 0.0 0 0.0 0 0.0 1.781799554824829 -0.047662943601608276 0.21605446934700012 0.0 0.0 1.0 0.49877843260765076 0.49449795484542847 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 -0.040337830781936646 0.21605446934700012 0.0 0.0 1.0 0.4987790882587433 0.5032071471214294 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 -0.05259701609611511 0.21605446934700012 0.0 0.0 1.0 0.4389623999595642 0.49155598878860474 0 1.0 0 0.0 0 0.0 0 0.0 1.7818396091461182 -0.054460227489471436 0.21605446934700012 0.0 0.0 1.0 0.49879494309425354 0.4863094091415405 0 1.0 0 0.0 0 0.0 0 0.0 1.781799554824829 -0.047662943601608276 0.21605446934700012 0.0 0.0 1.0 0.49877843260765076 0.49449795484542847 0 1.0 0 0.0 0 0.0 0 0.0 1.6830341815948486 -0.06105197221040726 0.21605446934700012 0.0 0.0 1.0 0.4384920597076416 0.4817414879798889 0 1.0 0 0.0 0 0.0 0 0.0 1.7818396091461182 -0.054460227489471436 0.21605446934700012 0.0 0.0 1.0 0.49879494309425354 0.4863094091415405 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 -0.05259701609611511 0.21605446934700012 0.0 0.0 1.0 0.4389623999595642 0.49155598878860474 0 1.0 0 0.0 0 0.0 0 0.0 1.6830341815948486 -0.06105197221040726 0.21605446934700012 0.0 0.0 1.0 0.4384920597076416 0.4817414879798889 0 1.0 0 0.0 0 0.0 0 0.0 1.7819068431854248 -0.06072968244552612 0.21605446934700012 0.0 0.0 1.0 0.4988292455673218 0.47867339849472046 0 1.0 0 0.0 0 0.0 0 0.0 1.7818396091461182 -0.054460227489471436 0.21605446934700012 0.0 0.0 1.0 0.49879494309425354 0.4863094091415405 0 1.0 0 0.0 0 0.0 0 0.0 1.6830341815948486 -0.06105197221040726 0.21605446934700012 0.0 0.0 1.0 0.4384920597076416 0.4817414879798889 0 1.0 0 0.0 0 0.0 0 0.0 1.7820003032684326 -0.06647131592035294 0.21605446934700012 0.0 0.0 1.0 0.4988810122013092 0.4716169834136963 0 1.0 0 0.0 0 0.0 0 0.0 1.7819068431854248 -0.06072968244552612 0.21605446934700012 0.0 0.0 1.0 0.4988292455673218 0.47867339849472046 0 1.0 0 0.0 0 0.0 0 0.0 1.6830995082855225 -0.06902045011520386 0.21605446934700012 0.0 0.0 1.0 0.43806785345077515 0.47238510847091675 0 1.0 0 0.0 0 0.0 0 0.0 1.7820003032684326 -0.06647131592035294 0.21605446934700012 0.0 0.0 1.0 0.4988810122013092 0.4716169834136963 0 1.0 0 0.0 0 0.0 0 0.0 1.6830341815948486 -0.06105197221040726 0.21605446934700012 0.0 0.0 1.0 0.4384920597076416 0.4817414879798889 0 1.0 0 0.0 0 0.0 0 0.0 1.6830995082855225 -0.06902045011520386 0.21605446934700012 0.0 0.0 1.0 0.43806785345077515 0.47238510847091675 0 1.0 0 0.0 0 0.0 0 0.0 1.782120943069458 -0.07168512046337128 0.21605446934700012 0.0 0.0 1.0 0.4989510476589203 0.4651622176170349 0 1.0 0 0.0 0 0.0 0 0.0 1.7820003032684326 -0.06647131592035294 0.21605446934700012 0.0 0.0 1.0 0.4988810122013092 0.4716169834136963 0 1.0 0 0.0 0 0.0 0 0.0 1.6832091808319092 -0.07650244981050491 0.21605446934700012 0.0 0.0 1.0 0.4376918077468872 0.463517427444458 0 1.0 0 0.0 0 0.0 0 0.0 1.782120943069458 -0.07168512046337128 0.21605446934700012 0.0 0.0 1.0 0.4989510476589203 0.4651622176170349 0 1.0 0 0.0 0 0.0 0 0.0 1.6830995082855225 -0.06902045011520386 0.21605446934700012 0.0 0.0 1.0 0.43806785345077515 0.47238510847091675 0 1.0 0 0.0 0 0.0 0 0.0 1.6832091808319092 -0.07650244981050491 0.21605446934700012 0.0 0.0 1.0 0.4376918077468872 0.463517427444458 0 1.0 0 0.0 0 0.0 0 0.0 1.7822678089141846 -0.07637109607458115 0.21605446934700012 0.0 0.0 1.0 0.4990389347076416 0.45932698249816895 0 1.0 0 0.0 0 0.0 0 0.0 1.782120943069458 -0.07168512046337128 0.21605446934700012 0.0 0.0 1.0 0.4989510476589203 0.4651622176170349 0 1.0 0 0.0 0 0.0 0 0.0 1.6832091808319092 -0.07650244981050491 0.21605446934700012 0.0 0.0 1.0 0.4376918077468872 0.463517427444458 0 1.0 0 0.0 0 0.0 0 0.0 1.7824418544769287 -0.08052925020456314 0.21605446934700012 0.0 0.0 1.0 0.49914538860321045 0.4541251063346863 0 1.0 0 0.0 0 0.0 0 0.0 1.7822678089141846 -0.07637109607458115 0.21605446934700012 0.0 0.0 1.0 0.4990389347076416 0.45932698249816895 0 1.0 0 0.0 0 0.0 0 0.0 1.6833622455596924 -0.08349797874689102 0.21605446934700012 0.0 0.0 1.0 0.4373648166656494 0.45516377687454224 0 1.0 0 0.0 0 0.0 0 0.0 1.7824418544769287 -0.08052925020456314 0.21605446934700012 0.0 0.0 1.0 0.49914538860321045 0.4541251063346863 0 1.0 0 0.0 0 0.0 0 0.0 1.6832091808319092 -0.07650244981050491 0.21605446934700012 0.0 0.0 1.0 0.4376918077468872 0.463517427444458 0 1.0 0 0.0 0 0.0 0 0.0 1.6833622455596924 -0.08349797874689102 0.21605446934700012 0.0 0.0 1.0 0.4373648166656494 0.45516377687454224 0 1.0 0 0.0 0 0.0 0 0.0 1.7826426029205322 -0.08415957540273666 0.21605446934700012 0.0 0.0 0.999969482421875 0.4992702007293701 0.44956737756729126 0 1.0 0 0.0 0 0.0 0 0.0 1.7824418544769287 -0.08052925020456314 0.21605446934700012 0.0 0.0 1.0 0.49914538860321045 0.4541251063346863 0 1.0 0 0.0 0 0.0 0 0.0 1.6835591793060303 -0.09000702947378159 0.21605446934700012 0.0 0.0 1.0 0.4370885491371155 0.4473446011543274 0 1.0 0 0.0 0 0.0 0 0.0 1.7826426029205322 -0.08415957540273666 0.21605446934700012 0.0 0.0 0.999969482421875 0.4992702007293701 0.44956737756729126 0 1.0 0 0.0 0 0.0 0 0.0 1.6833622455596924 -0.08349797874689102 0.21605446934700012 0.0 0.0 1.0 0.4373648166656494 0.45516377687454224 0 1.0 0 0.0 0 0.0 0 0.0 1.6835591793060303 -0.09000702947378159 0.21605446934700012 0.0 0.0 1.0 0.4370885491371155 0.4473446011543274 0 1.0 0 0.0 0 0.0 0 0.0 1.7828700542449951 -0.08726207166910172 0.21605446934700012 0.0 0.0 1.0 0.49941331148147583 0.4456617832183838 0 1.0 0 0.0 0 0.0 0 0.0 1.7826426029205322 -0.08415957540273666 0.21605446934700012 0.0 0.0 0.999969482421875 0.4992702007293701 0.44956737756729126 0 1.0 0 0.0 0 0.0 0 0.0 1.6835591793060303 -0.09000702947378159 0.21605446934700012 0.0 0.0 1.0 0.4370885491371155 0.4473446011543274 0 1.0 0 0.0 0 0.0 0 0.0 1.7831242084503174 -0.08983674645423889 0.21605446934700012 0.0 0.0 1.0 0.4995746612548828 0.4424140453338623 0 1.0 0 0.0 0 0.0 0 0.0 1.7828700542449951 -0.08726207166910172 0.21605446934700012 0.0 0.0 1.0 0.49941331148147583 0.4456617832183838 0 1.0 0 0.0 0 0.0 0 0.0 1.6835591793060303 -0.09000702947378159 0.21605446934700012 0.0 0.0 1.0 0.4370885491371155 0.4473446011543274 0 1.0 0 0.0 0 0.0 0 0.0 1.783405065536499 -0.0918835923075676 0.21605446934700012 0.0 0.0 1.0 0.4997541606426239 0.4398283362388611 0 1.0 0 0.0 0 0.0 0 0.0 1.7831242084503174 -0.08983674645423889 0.21605446934700012 0.0 0.0 1.0 0.4995746612548828 0.4424140453338623 0 1.0 0 0.0 0 0.0 0 0.0 1.6837999820709229 -0.0960296019911766 0.21605446934700012 0.0 0.0 1.0 0.4368642568588257 0.4400756359100342 0 1.0 0 0.0 0 0.0 0 0.0 1.783405065536499 -0.0918835923075676 0.21605446934700012 0.0 0.0 1.0 0.4997541606426239 0.4398283362388611 0 1.0 0 0.0 0 0.0 0 0.0 1.6835591793060303 -0.09000702947378159 0.21605446934700012 0.0 0.0 1.0 0.4370885491371155 0.4473446011543274 0 1.0 0 0.0 0 0.0 0 0.0 1.6837999820709229 -0.0960296019911766 0.21605446934700012 0.0 0.0 1.0 0.4368642568588257 0.4400756359100342 0 1.0 0 0.0 0 0.0 0 0.0 1.78371262550354 -0.09340262413024902 0.21605446934700012 0.0 0.0 0.999969482421875 0.4999516010284424 0.43790704011917114 0 1.0 0 0.0 0 0.0 0 0.0 1.783405065536499 -0.0918835923075676 0.21605446934700012 0.0 0.0 1.0 0.4997541606426239 0.4398283362388611 0 1.0 0 0.0 0 0.0 0 0.0 1.6837999820709229 -0.0960296019911766 0.21605446934700012 0.0 0.0 1.0 0.4368642568588257 0.4400756359100342 0 1.0 0 0.0 0 0.0 0 0.0 1.7840678691864014 -0.09463948756456375 0.21605446934700012 0.0 0.0 1.0 0.5001802444458008 0.4363413453102112 0 1.0 0 0.0 0 0.0 0 0.0 1.78371262550354 -0.09340262413024902 0.21605446934700012 0.0 0.0 0.999969482421875 0.4999516010284424 0.43790704011917114 0 1.0 0 0.0 0 0.0 0 0.0 1.6837999820709229 -0.0960296019911766 0.21605446934700012 0.0 0.0 1.0 0.4368642568588257 0.4400756359100342 0 1.0 0 0.0 0 0.0 0 0.0 1.7844913005828857 -0.09583986550569534 0.21605446934700012 0.0 0.0 1.0 0.5004534125328064 0.43482106924057007 0 1.0 0 0.0 0 0.0 0 0.0 1.7840678691864014 -0.09463948756456375 0.21605446934700012 0.0 0.0 1.0 0.5001802444458008 0.4363413453102112 0 1.0 0 0.0 0 0.0 0 0.0 1.6837999820709229 -0.0960296019911766 0.21605446934700012 0.0 0.0 1.0 0.4368642568588257 0.4400756359100342 0 1.0 0 0.0 0 0.0 0 0.0 1.784982442855835 -0.0970037579536438 0.21605446934700012 0.0 0.0 1.0 0.5007707476615906 0.4333465099334717 0 1.0 0 0.0 0 0.0 0 0.0 1.7844913005828857 -0.09583986550569534 0.21605446934700012 0.0 0.0 1.0 0.5004534125328064 0.43482106924057007 0 1.0 0 0.0 0 0.0 0 0.0 1.6840846538543701 -0.10156569629907608 0.21605446934700012 0.0 0.0 1.0 0.43669307231903076 0.4333688020706177 0 1.0 0 0.0 0 0.0 0 0.0 1.784982442855835 -0.0970037579536438 0.21605446934700012 0.0 0.0 1.0 0.5007707476615906 0.4333465099334717 0 1.0 0 0.0 0 0.0 0 0.0 1.6837999820709229 -0.0960296019911766 0.21605446934700012 0.0 0.0 1.0 0.4368642568588257 0.4400756359100342 0 1.0 0 0.0 0 0.0 0 0.0 1.6840846538543701 -0.10156569629907608 0.21605446934700012 0.0 0.0 1.0 0.43669307231903076 0.4333688020706177 0 1.0 0 0.0 0 0.0 0 0.0 1.7855417728424072 -0.09813116490840912 0.21605446934700012 0.0 0.0 1.0 0.5011327862739563 0.43191802501678467 0 1.0 0 0.0 0 0.0 0 0.0 1.784982442855835 -0.0970037579536438 0.21605446934700012 0.0 0.0 1.0 0.5007707476615906 0.4333465099334717 0 1.0 0 0.0 0 0.0 0 0.0 1.6840846538543701 -0.10156569629907608 0.21605446934700012 0.0 0.0 1.0 0.43669307231903076 0.4333688020706177 0 1.0 0 0.0 0 0.0 0 0.0 1.7861692905426025 -0.0992220863699913 0.21605446934700012 0.0 0.0 1.0 0.5015394687652588 0.43053603172302246 0 1.0 0 0.0 0 0.0 0 0.0 1.7855417728424072 -0.09813116490840912 0.21605446934700012 0.0 0.0 1.0 0.5011327862739563 0.43191802501678467 0 1.0 0 0.0 0 0.0 0 0.0 1.6840846538543701 -0.10156569629907608 0.21605446934700012 0.0 0.0 1.0 0.43669307231903076 0.4333688020706177 0 1.0 0 0.0 0 0.0 0 0.0 1.786864995956421 -0.10027652233839035 0.21605446934700012 0.0 0.0 1.0 0.5019909143447876 0.4292007088661194 0 1.0 0 0.0 0 0.0 0 0.0 1.7861692905426025 -0.0992220863699913 0.21605446934700012 0.0 0.0 1.0 0.5015394687652588 0.43053603172302246 0 1.0 0 0.0 0 0.0 0 0.0 1.6840846538543701 -0.10156569629907608 0.21605446934700012 0.0 0.0 1.0 0.43669307231903076 0.4333688020706177 0 1.0 0 0.0 0 0.0 0 0.0 1.7876288890838623 -0.10129447281360626 0.21605446934700012 0.0 0.0 1.0 0.5024871230125427 0.42791253328323364 0 1.0 0 0.0 0 0.0 0 0.0 1.786864995956421 -0.10027652233839035 0.21605446934700012 0.0 0.0 1.0 0.5019909143447876 0.4292007088661194 0 1.0 0 0.0 0 0.0 0 0.0 1.844451665878296 -0.10279404371976852 0.21605446934700012 0.0 0.0 1.0 0.537887454032898 0.42787182331085205 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.8486864566802979 -0.10128353536128998 0.21605446934700012 0.0 0.0 1.0 0.5403105616569519 0.4299470782279968 0 1.0 0 0.0 0 0.0 0 0.0 1.6840846538543701 -0.10156569629907608 0.21605446934700012 0.0 0.0 1.0 0.43669307231903076 0.4333688020706177 0 1.0 0 0.0 0 0.0 0 0.0 1.7884604930877686 -0.10227593779563904 0.21605446934700012 0.0 0.0 0.999969482421875 0.5030277371406555 0.4266718029975891 0 1.0 0 0.0 0 0.0 0 0.0 1.7876288890838623 -0.10129447281360626 0.21605446934700012 0.0 0.0 1.0 0.5024871230125427 0.42791253328323364 0 1.0 0 0.0 0 0.0 0 0.0 1.684413194656372 -0.10661531984806061 0.21605446934700012 0.0 0.0 0.999969482421875 0.43657612800598145 0.42723244428634644 0 1.0 0 0.0 0 0.0 0 0.0 1.7884604930877686 -0.10227593779563904 0.21605446934700012 0.0 0.0 0.999969482421875 0.5030277371406555 0.4266718029975891 0 1.0 0 0.0 0 0.0 0 0.0 1.6840846538543701 -0.10156569629907608 0.21605446934700012 0.0 0.0 1.0 0.43669307231903076 0.4333688020706177 0 1.0 0 0.0 0 0.0 0 0.0 1.684413194656372 -0.10661531984806061 0.21605446934700012 0.0 0.0 0.999969482421875 0.43657612800598145 0.42723244428634644 0 1.0 0 0.0 0 0.0 0 0.0 1.789360761642456 -0.10322091728448868 0.21605446934700012 0.0 0.0 1.0 0.5036134123802185 0.4254789352416992 0 1.0 0 0.0 0 0.0 0 0.0 1.7884604930877686 -0.10227593779563904 0.21605446934700012 0.0 0.0 0.999969482421875 0.5030277371406555 0.4266718029975891 0 1.0 0 0.0 0 0.0 0 0.0 1.8403871059417725 -0.1041732057929039 0.21605446934700012 0.0 0.0 0.999969482421875 0.5355287790298462 0.42596107721328735 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.844451665878296 -0.10279404371976852 0.21605446934700012 0.0 0.0 1.0 0.537887454032898 0.42787182331085205 0 1.0 0 0.0 0 0.0 0 0.0 1.684413194656372 -0.10661531984806061 0.21605446934700012 0.0 0.0 0.999969482421875 0.43657612800598145 0.42723244428634644 0 1.0 0 0.0 0 0.0 0 0.0 1.7903287410736084 -0.10412941128015518 0.21605446934700012 0.0 0.0 1.0 0.5042434334754944 0.42433422803878784 0 1.0 0 0.0 0 0.0 0 0.0 1.789360761642456 -0.10322091728448868 0.21605446934700012 0.0 0.0 1.0 0.5036134123802185 0.4254789352416992 0 1.0 0 0.0 0 0.0 0 0.0 1.684413194656372 -0.10661531984806061 0.21605446934700012 0.0 0.0 0.999969482421875 0.43657612800598145 0.42723244428634644 0 1.0 0 0.0 0 0.0 0 0.0 1.7913649082183838 -0.10500141978263855 0.21605446934700012 0.0 0.0 1.0 0.5049180388450623 0.4232381582260132 0 1.0 0 0.0 0 0.0 0 0.0 1.7903287410736084 -0.10412941128015518 0.21605446934700012 0.0 0.0 1.0 0.5042434334754944 0.42433422803878784 0 1.0 0 0.0 0 0.0 0 0.0 1.8364927768707275 -0.10542101413011551 0.21605446934700012 0.0 0.0 0.999969482421875 0.5332391262054443 0.42421799898147583 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.8403871059417725 -0.1041732057929039 0.21605446934700012 0.0 0.0 0.999969482421875 0.5355287790298462 0.42596107721328735 0 1.0 0 0.0 0 0.0 0 0.0 1.684413194656372 -0.10661531984806061 0.21605446934700012 0.0 0.0 0.999969482421875 0.43657612800598145 0.42723244428634644 0 1.0 0 0.0 0 0.0 0 0.0 1.7924692630767822 -0.10583695024251938 0.21605446934700012 0.0 0.0 1.0 0.5056371688842773 0.4221910834312439 0 1.0 0 0.0 0 0.0 0 0.0 1.7913649082183838 -0.10500141978263855 0.21605446934700012 0.0 0.0 1.0 0.5049180388450623 0.4232381582260132 0 1.0 0 0.0 0 0.0 0 0.0 1.8327686786651611 -0.10653747618198395 0.21605446934700012 0.0 0.0 1.0 0.5310229659080505 0.4226453900337219 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.8364927768707275 -0.10542101413011551 0.21605446934700012 0.0 0.0 0.999969482421875 0.5332391262054443 0.42421799898147583 0 1.0 0 0.0 0 0.0 0 0.0 1.684413194656372 -0.10661531984806061 0.21605446934700012 0.0 0.0 0.999969482421875 0.43657612800598145 0.42723244428634644 0 1.0 0 0.0 0 0.0 0 0.0 1.793628454208374 -0.1066201776266098 0.21605446934700012 0.0 0.0 0.999969482421875 0.5063918828964233 0.42121315002441406 0 1.0 0 0.0 0 0.0 0 0.0 1.7924692630767822 -0.10583695024251938 0.21605446934700012 0.0 0.0 1.0 0.5056371688842773 0.4221910834312439 0 1.0 0 0.0 0 0.0 0 0.0 1.8292148113250732 -0.10752259194850922 0.21605446934700012 0.0 0.0 1.0 0.5288844108581543 0.4212455749511719 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.8327686786651611 -0.10653747618198395 0.21605446934700012 0.0 0.0 1.0 0.5310229659080505 0.4226453900337219 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 0.21605446934700012 0.0 0.0 1.0 0.43651407957077026 0.4216722249984741 0 1.0 0 0.0 0 0.0 0 0.0 1.793628454208374 -0.1066201776266098 0.21605446934700012 0.0 0.0 0.999969482421875 0.5063918828964233 0.42121315002441406 0 1.0 0 0.0 0 0.0 0 0.0 1.684413194656372 -0.10661531984806061 0.21605446934700012 0.0 0.0 0.999969482421875 0.43657612800598145 0.42723244428634644 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 0.21605446934700012 0.0 0.0 1.0 0.43651407957077026 0.4216722249984741 0 1.0 0 0.0 0 0.0 0 0.0 1.7948286533355713 -0.10733529925346375 0.21605446934700012 0.0 0.0 0.999969482421875 0.5071730017662048 0.42032450437545776 0 1.0 0 0.0 0 0.0 0 0.0 1.793628454208374 -0.1066201776266098 0.21605446934700012 0.0 0.0 0.999969482421875 0.5063918828964233 0.42121315002441406 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 0.21605446934700012 0.0 0.0 1.0 0.43651407957077026 0.4216722249984741 0 1.0 0 0.0 0 0.0 0 0.0 1.7960703372955322 -0.10798231512308121 0.21605446934700012 0.0 0.0 1.0 0.5079805254936218 0.4195253252983093 0 1.0 0 0.0 0 0.0 0 0.0 1.7948286533355713 -0.10733529925346375 0.21605446934700012 0.0 0.0 0.999969482421875 0.5071730017662048 0.42032450437545776 0 1.0 0 0.0 0 0.0 0 0.0 1.8258311748504639 -0.10837635397911072 0.21605446934700012 0.0 0.0 1.0 0.5268273949623108 0.42002010345458984 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.8292148113250732 -0.10752259194850922 0.21605446934700012 0.0 0.0 1.0 0.5288844108581543 0.4212455749511719 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 0.21605446934700012 0.0 0.0 1.0 0.43651407957077026 0.4216722249984741 0 1.0 0 0.0 0 0.0 0 0.0 1.7973535060882568 -0.10856122523546219 0.21605446934700012 0.0 0.0 0.999969482421875 0.5088142156600952 0.4188156723976135 0 1.0 0 0.0 0 0.0 0 0.0 1.7960703372955322 -0.10798231512308121 0.21605446934700012 0.0 0.0 1.0 0.5079805254936218 0.4195253252983093 0 1.0 0 0.0 0 0.0 0 0.0 1.8226182460784912 -0.10909876972436905 0.21605446934700012 0.0 0.0 1.0 0.5248557925224304 0.41897040605545044 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.8258311748504639 -0.10837635397911072 0.21605446934700012 0.0 0.0 1.0 0.5268273949623108 0.42002010345458984 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 0.21605446934700012 0.0 0.0 1.0 0.43651407957077026 0.4216722249984741 0 1.0 0 0.0 0 0.0 0 0.0 1.798677682876587 -0.10907202214002609 0.21605446934700012 0.0 0.0 1.0 0.509673535823822 0.41819584369659424 0 1.0 0 0.0 0 0.0 0 0.0 1.7973535060882568 -0.10856122523546219 0.21605446934700012 0.0 0.0 0.999969482421875 0.5088142156600952 0.4188156723976135 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 0.21605446934700012 0.0 0.0 1.0 0.43651407957077026 0.4216722249984741 0 1.0 0 0.0 0 0.0 0 0.0 1.8000438213348389 -0.10951471328735352 0.21605446934700012 0.0 0.0 1.0 0.5105586647987366 0.41766583919525146 0 1.0 0 0.0 0 0.0 0 0.0 1.798677682876587 -0.10907202214002609 0.21605446934700012 0.0 0.0 1.0 0.509673535823822 0.41819584369659424 0 1.0 0 0.0 0 0.0 0 0.0 1.819575548171997 -0.10968983918428421 0.21605446934700012 0.0 0.0 1.0 0.5229727029800415 0.41809719800949097 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.8226182460784912 -0.10909876972436905 0.21605446934700012 0.0 0.0 1.0 0.5248557925224304 0.41897040605545044 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 0.21605446934700012 0.0 0.0 1.0 0.43651407957077026 0.4216722249984741 0 1.0 0 0.0 0 0.0 0 0.0 1.8014509677886963 -0.10988929867744446 0.21605446934700012 0.0 -3.0518509447574615e-05 1.0 0.511468768119812 0.41722571849823 0 1.0 0 0.0 0 0.0 0 0.0 1.8000438213348389 -0.10951471328735352 0.21605446934700012 0.0 0.0 1.0 0.5105586647987366 0.41766583919525146 0 1.0 0 0.0 0 0.0 0 0.0 1.8167030811309814 -0.1101495623588562 0.21605446934700012 0.0 0.0 1.0 0.5211812257766724 0.4174010157585144 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.819575548171997 -0.10968983918428421 0.21605446934700012 0.0 0.0 1.0 0.5229727029800415 0.41809719800949097 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 0.21605446934700012 0.0 0.0 1.0 0.43651407957077026 0.4216722249984741 0 1.0 0 0.0 0 0.0 0 0.0 1.8028995990753174 -0.11019577831029892 0.21605446934700012 0.0 6.103701889514923e-05 1.0 0.5124037265777588 0.4168756604194641 0 1.0 0 0.0 0 0.0 0 0.0 1.8014509677886963 -0.10988929867744446 0.21605446934700012 0.0 -3.0518509447574615e-05 1.0 0.511468768119812 0.41722571849823 0 1.0 0 0.0 0 0.0 0 0.0 1.8140008449554443 -0.11047793179750443 0.21605446934700012 0.0 0.0 1.0 0.5194841623306274 0.41688209772109985 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.8167030811309814 -0.1101495623588562 0.21605446934700012 0.0 0.0 1.0 0.5211812257766724 0.4174010157585144 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 0.21605446934700012 0.0 0.0 1.0 0.43651407957077026 0.4216722249984741 0 1.0 0 0.0 0 0.0 0 0.0 1.804389238357544 -0.1104341521859169 0.21605446934700012 0.0 -3.0518509447574615e-05 1.0 0.5133629441261292 0.4166155457496643 0 1.0 0 0.0 0 0.0 0 0.0 1.8028995990753174 -0.11019577831029892 0.21605446934700012 0.0 6.103701889514923e-05 1.0 0.5124037265777588 0.4168756604194641 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 0.21605446934700012 0.0 0.0 1.0 0.43651407957077026 0.4216722249984741 0 1.0 0 0.0 0 0.0 0 0.0 1.8059203624725342 -0.1106044203042984 0.21605446934700012 0.0 -3.0518509447574615e-05 1.0 0.514346182346344 0.4164454936981201 0 1.0 0 0.0 0 0.0 0 0.0 1.804389238357544 -0.1104341521859169 0.21605446934700012 0.0 -3.0518509447574615e-05 1.0 0.5133629441261292 0.4166155457496643 0 1.0 0 0.0 0 0.0 0 0.0 1.8114688396453857 -0.11067495495080948 0.21605446934700012 0.0 0.0 1.0 0.5178840756416321 0.41654032468795776 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.8140008449554443 -0.11047793179750443 0.21605446934700012 0.0 0.0 1.0 0.5194841623306274 0.41688209772109985 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 0.21605446934700012 0.0 0.0 1.0 0.43651407957077026 0.4216722249984741 0 1.0 0 0.0 0 0.0 0 0.0 1.807492971420288 -0.11070658266544342 0.21605446934700012 0.0 -9.155552834272385e-05 0.999969482421875 0.5153530836105347 0.41636550426483154 0 1.0 0 0.0 0 0.0 0 0.0 1.8059203624725342 -0.1106044203042984 0.21605446934700012 0.0 -3.0518509447574615e-05 1.0 0.514346182346344 0.4164454936981201 0 1.0 0 0.0 0 0.0 0 0.0 1.8091070652008057 -0.11074063181877136 0.21605446934700012 0.0 0.0 1.0 0.5163832306861877 0.4163755178451538 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.8114688396453857 -0.11067495495080948 0.21605446934700012 0.0 0.0 1.0 0.5178840756416321 0.41654032468795776 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 0.21605446934700012 0.0 0.0 1.0 0.43651407957077026 0.4216722249984741 0 1.0 0 0.0 0 0.0 0 0.0 1.8091070652008057 -0.11074063181877136 0.21605446934700012 0.0 0.0 1.0 0.5163832306861877 0.4163755178451538 0 1.0 0 0.0 0 0.0 0 0.0 1.807492971420288 -0.11070658266544342 0.21605446934700012 0.0 -9.155552834272385e-05 0.999969482421875 0.5153530836105347 0.41636550426483154 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 0.21605446934700012 0.0 0.0 1.0 0.43651407957077026 0.4216722249984741 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.8091070652008057 -0.11074063181877136 0.21605446934700012 0.0 0.0 1.0 0.5163832306861877 0.4163755178451538 0 1.0 0 0.0 0 0.0 0 0.0 1.6852014064788818 -0.11525513231754303 0.21605446934700012 0.0 0.0 1.0 0.43650829792022705 0.4166916012763977 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 0.21605446934700012 0.0 0.0 1.0 0.43651407957077026 0.4216722249984741 0 1.0 0 0.0 0 0.0 0 0.0 1.6856610774993896 -0.11884532123804092 0.21605446934700012 0.0 0.0 1.0 0.4365590512752533 0.4122923016548157 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.6852014064788818 -0.11525513231754303 0.21605446934700012 0.0 0.0 1.0 0.43650829792022705 0.4166916012763977 0 1.0 0 0.0 0 0.0 0 0.0 1.6861646175384521 -0.12194903194904327 0.21605446934700012 0.0 0.0 1.0 0.43666714429855347 0.4084749221801758 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.6856610774993896 -0.11884532123804092 0.21605446934700012 0.0 0.0 1.0 0.4365590512752533 0.4122923016548157 0 1.0 0 0.0 0 0.0 0 0.0 1.6868493556976318 -0.12590773403644562 0.21605446934700012 0.0 0.0 1.0 0.43683189153671265 0.40360039472579956 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.6861646175384521 -0.12194903194904327 0.21605446934700012 0.0 0.0 1.0 0.43666714429855347 0.4084749221801758 0 1.0 0 0.0 0 0.0 0 0.0 1.6876194477081299 -0.1297277808189392 0.21605446934700012 0.0 0.0 1.0 0.4370587468147278 0.39888298511505127 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.6868493556976318 -0.12590773403644562 0.21605446934700012 0.0 0.0 1.0 0.43683189153671265 0.40360039472579956 0 1.0 0 0.0 0 0.0 0 0.0 1.688474416732788 -0.13340918719768524 0.21605446934700012 0.0 0.0 1.0 0.4373483657836914 0.39432311058044434 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.6876194477081299 -0.1297277808189392 0.21605446934700012 0.0 0.0 1.0 0.4370587468147278 0.39888298511505127 0 1.0 0 0.0 0 0.0 0 0.0 1.6894142627716064 -0.13695195317268372 0.21605446934700012 0.0 0.0 0.999969482421875 0.4377015233039856 0.38992077112197876 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.688474416732788 -0.13340918719768524 0.21605446934700012 0.0 0.0 1.0 0.4373483657836914 0.39432311058044434 0 1.0 0 0.0 0 0.0 0 0.0 1.6904394626617432 -0.14035606384277344 0.21605446934700012 0.0 0.0 0.999969482421875 0.4381193518638611 0.38567590713500977 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.6894142627716064 -0.13695195317268372 0.21605446934700012 0.0 0.0 0.999969482421875 0.4377015233039856 0.38992077112197876 0 1.0 0 0.0 0 0.0 0 0.0 1.6915500164031982 -0.1436215341091156 0.21605446934700012 0.0 0.0 1.0 0.4386027455329895 0.3815883994102478 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.6904394626617432 -0.14035606384277344 0.21605446934700012 0.0 0.0 0.999969482421875 0.4381193518638611 0.38567590713500977 0 1.0 0 0.0 0 0.0 0 0.0 1.6927454471588135 -0.1467483639717102 0.21605446934700012 0.0 0.0 1.0 0.43915221095085144 0.37765800952911377 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.6915500164031982 -0.1436215341091156 0.21605446934700012 0.0 0.0 1.0 0.4386027455329895 0.3815883994102478 0 1.0 0 0.0 0 0.0 0 0.0 1.6940257549285889 -0.14973653852939606 0.21605446934700012 0.0 0.0 1.0 0.43976858258247375 0.3738844394683838 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.6927454471588135 -0.1467483639717102 0.21605446934700012 0.0 0.0 1.0 0.43915221095085144 0.37765800952911377 0 1.0 0 0.0 0 0.0 0 0.0 1.6953914165496826 -0.15258607268333435 0.21605446934700012 0.0 0.0 0.999969482421875 0.4404529929161072 0.3702673316001892 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.6940257549285889 -0.14973653852939606 0.21605446934700012 0.0 0.0 1.0 0.43976858258247375 0.3738844394683838 0 1.0 0 0.0 0 0.0 0 0.0 1.6968424320220947 -0.15529696643352509 0.21605446934700012 0.0 0.0 1.0 0.44120627641677856 0.3668063282966614 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.6953914165496826 -0.15258607268333435 0.21605446934700012 0.0 0.0 0.999969482421875 0.4404529929161072 0.3702673316001892 0 1.0 0 0.0 0 0.0 0 0.0 1.6983788013458252 -0.15786920487880707 0.21605446934700012 0.0 0.0 1.0 0.4420292377471924 0.36350131034851074 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.6968424320220947 -0.15529696643352509 0.21605446934700012 0.0 0.0 1.0 0.44120627641677856 0.3668063282966614 0 1.0 0 0.0 0 0.0 0 0.0 1.7000000476837158 -0.1603028029203415 0.21605446934700012 0.0 0.0 1.0 0.44292232394218445 0.360352098941803 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.6983788013458252 -0.15786920487880707 0.21605446934700012 0.0 0.0 1.0 0.4420292377471924 0.36350131034851074 0 1.0 0 0.0 0 0.0 0 0.0 1.7017428874969482 -0.1626305878162384 0.21605446934700012 0.0 0.0 1.0 0.44390809535980225 0.35731375217437744 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.7000000476837158 -0.1603028029203415 0.21605446934700012 0.0 0.0 1.0 0.44292232394218445 0.360352098941803 0 1.0 0 0.0 0 0.0 0 0.0 1.703643560409546 -0.16488540172576904 0.21605446934700012 0.0 0.0 1.0 0.4450095295906067 0.35434210300445557 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.7017428874969482 -0.1626305878162384 0.21605446934700012 0.0 0.0 1.0 0.44390809535980225 0.35731375217437744 0 1.0 0 0.0 0 0.0 0 0.0 1.705702543258667 -0.1670672595500946 0.21605446934700012 0.0 0.0 1.0 0.44622862339019775 0.35143786668777466 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.703643560409546 -0.16488540172576904 0.21605446934700012 0.0 0.0 1.0 0.4450095295906067 0.35434210300445557 0 1.0 0 0.0 0 0.0 0 0.0 1.7079198360443115 -0.1691761314868927 0.21605446934700012 0.0 0.0 1.0 0.44756728410720825 0.3486024737358093 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.705702543258667 -0.1670672595500946 0.21605446934700012 0.0 0.0 1.0 0.44622862339019775 0.35143786668777466 0 1.0 0 0.0 0 0.0 0 0.0 1.7102949619293213 -0.17121203243732452 0.21605445444583893 0.0 0.0 1.0 0.4490269422531128 0.34583741426467896 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.7079198360443115 -0.1691761314868927 0.21605446934700012 0.0 0.0 1.0 0.44756728410720825 0.3486024737358093 0 1.0 0 0.0 0 0.0 0 0.0 1.7128283977508545 -0.17317496240139008 0.21605445444583893 0.0 0.0 1.0 0.4506097733974457 0.34314483404159546 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.7102949619293213 -0.17121203243732452 0.21605445444583893 0.0 0.0 1.0 0.4490269422531128 0.34583741426467896 0 1.0 0 0.0 0 0.0 0 0.0 1.715519666671753 -0.17506492137908936 0.21605445444583893 0.0 0.0 1.0 0.4523172080516815 0.3405272960662842 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.7128283977508545 -0.17317496240139008 0.21605445444583893 0.0 0.0 1.0 0.4506097733974457 0.34314483404159546 0 1.0 0 0.0 0 0.0 0 0.0 1.7183692455291748 -0.17688190937042236 0.21605445444583893 0.0 0.0 1.0 0.45415133237838745 0.3379872441291809 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.715519666671753 -0.17506492137908936 0.21605445444583893 0.0 0.0 1.0 0.4523172080516815 0.3405272960662842 0 1.0 0 0.0 0 0.0 0 0.0 1.7213771343231201 -0.1786259263753891 0.21605445444583893 0.0 0.0 0.999969482421875 0.45611369609832764 0.33552831411361694 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.7183692455291748 -0.17688190937042236 0.21605445444583893 0.0 0.0 1.0 0.45415133237838745 0.3379872441291809 0 1.0 0 0.0 0 0.0 0 0.0 1.7213771343231201 -0.1786259263753891 0.21605445444583893 0.0 0.0 0.999969482421875 0.45611369609832764 0.33552831411361694 0 1.0 0 0.0 0 0.0 0 0.0 1.851309061050415 -0.1799904853105545 0.21605445444583893 0.0 0.0 1.0 0.5453030467033386 0.33780014514923096 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.0 0.0 0.999969482421875 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.7245428562164307 -0.18029697239398956 0.21605445444583893 0.0 0.0 1.0 0.4582054913043976 0.3331541419029236 0 1.0 0 0.0 0 0.0 0 0.0 1.851309061050415 -0.1799904853105545 0.21605445444583893 0.0 0.0 1.0 0.5453030467033386 0.33780014514923096 0 1.0 0 0.0 0 0.0 0 0.0 1.7213771343231201 -0.1786259263753891 0.21605445444583893 0.0 0.0 0.999969482421875 0.45611369609832764 0.33552831411361694 0 1.0 0 0.0 0 0.0 0 0.0 1.7245428562164307 -0.18029697239398956 0.21605445444583893 0.0 0.0 1.0 0.4582054913043976 0.3331541419029236 0 1.0 0 0.0 0 0.0 0 0.0 1.845398187637329 -0.18213585019111633 0.21605445444583893 0.0 0.0 1.0 0.5417003035545349 0.33435338735580444 0 1.0 0 0.0 0 0.0 0 0.0 1.851309061050415 -0.1799904853105545 0.21605445444583893 0.0 0.0 1.0 0.5453030467033386 0.33780014514923096 0 1.0 0 0.0 0 0.0 0 0.0 1.7278664112091064 -0.18189504742622375 0.21605445444583893 0.0 0.0 1.0 0.46042805910110474 0.3308688998222351 0 1.0 0 0.0 0 0.0 0 0.0 1.845398187637329 -0.18213585019111633 0.21605445444583893 0.0 0.0 1.0 0.5417003035545349 0.33435338735580444 0 1.0 0 0.0 0 0.0 0 0.0 1.7245428562164307 -0.18029697239398956 0.21605445444583893 0.0 0.0 1.0 0.4582054913043976 0.3331541419029236 0 1.0 0 0.0 0 0.0 0 0.0 1.7313482761383057 -0.18342013657093048 0.21605445444583893 0.0 0.0 0.999969482421875 0.46278277039527893 0.3286771774291992 0 1.0 0 0.0 0 0.0 0 0.0 1.845398187637329 -0.18213585019111633 0.21605445444583893 0.0 0.0 1.0 0.5417003035545349 0.33435338735580444 0 1.0 0 0.0 0 0.0 0 0.0 1.7278664112091064 -0.18189504742622375 0.21605445444583893 0.0 0.0 1.0 0.46042805910110474 0.3308688998222351 0 1.0 0 0.0 0 0.0 0 0.0 1.7313482761383057 -0.18342013657093048 0.21605445444583893 0.0 0.0 0.999969482421875 0.46278277039527893 0.3286771774291992 0 1.0 0 0.0 0 0.0 0 0.0 1.8393609523773193 -0.18407689034938812 0.21605445444583893 0.0 0.0 1.0 0.5379304885864258 0.33115673065185547 0 1.0 0 0.0 0 0.0 0 0.0 1.845398187637329 -0.18213585019111633 0.21605445444583893 0.0 0.0 1.0 0.5417003035545349 0.33435338735580444 0 1.0 0 0.0 0 0.0 0 0.0 1.7349460124969482 -0.18484672904014587 0.21605445444583893 0.0 0.0 1.0 0.4652417302131653 0.32661813497543335 0 1.0 0 0.0 0 0.0 0 0.0 1.8393609523773193 -0.18407689034938812 0.21605445444583893 0.0 0.0 1.0 0.5379304885864258 0.33115673065185547 0 1.0 0 0.0 0 0.0 0 0.0 1.7313482761383057 -0.18342013657093048 0.21605445444583893 0.0 0.0 0.999969482421875 0.46278277039527893 0.3286771774291992 0 1.0 0 0.0 0 0.0 0 0.0 1.7349460124969482 -0.18484672904014587 0.21605445444583893 0.0 0.0 1.0 0.4652417302131653 0.32661813497543335 0 1.0 0 0.0 0 0.0 0 0.0 1.8331973552703857 -0.18581360578536987 0.21605445444583893 0.0 0.0 1.0 0.533993124961853 0.32822293043136597 0 1.0 0 0.0 0 0.0 0 0.0 1.8393609523773193 -0.18407689034938812 0.21605445444583893 0.0 0.0 1.0 0.5379304885864258 0.33115673065185547 0 1.0 0 0.0 0 0.0 0 0.0 1.738616704940796 -0.18614926934242249 0.21605445444583893 0.0 0.0 1.0 0.4677753150463104 0.3247298002243042 0 1.0 0 0.0 0 0.0 0 0.0 1.8331973552703857 -0.18581360578536987 0.21605445444583893 0.0 0.0 1.0 0.533993124961853 0.32822293043136597 0 1.0 0 0.0 0 0.0 0 0.0 1.7349460124969482 -0.18484672904014587 0.21605445444583893 0.0 0.0 1.0 0.4652417302131653 0.32661813497543335 0 1.0 0 0.0 0 0.0 0 0.0 1.738616704940796 -0.18614926934242249 0.21605445444583893 0.0 0.0 1.0 0.4677753150463104 0.3247298002243042 0 1.0 0 0.0 0 0.0 0 0.0 1.8269073963165283 -0.18734599649906158 0.21605445444583893 0.0 0.0 1.0 0.5298887491226196 0.3255653381347656 0 1.0 0 0.0 0 0.0 0 0.0 1.8331973552703857 -0.18581360578536987 0.21605445444583893 0.0 0.0 1.0 0.533993124961853 0.32822293043136597 0 1.0 0 0.0 0 0.0 0 0.0 1.7423598766326904 -0.18732775747776031 0.21605445444583893 0.0 0.0 1.0 0.4703820049762726 0.32301509380340576 0 1.0 0 0.0 0 0.0 0 0.0 1.8269073963165283 -0.18734599649906158 0.21605445444583893 0.0 0.0 1.0 0.5298887491226196 0.3255653381347656 0 1.0 0 0.0 0 0.0 0 0.0 1.738616704940796 -0.18614926934242249 0.21605445444583893 0.0 0.0 1.0 0.4677753150463104 0.3247298002243042 0 1.0 0 0.0 0 0.0 0 0.0 1.7461764812469482 -0.18838219344615936 0.21605445444583893 0.0 0.0 0.999969482421875 0.4730609655380249 0.32147711515426636 0 1.0 0 0.0 0 0.0 0 0.0 1.8269073963165283 -0.18734599649906158 0.21605445444583893 0.0 0.0 1.0 0.5298887491226196 0.3255653381347656 0 1.0 0 0.0 0 0.0 0 0.0 1.7423598766326904 -0.18732775747776031 0.21605445444583893 0.0 0.0 1.0 0.4703820049762726 0.32301509380340576 0 1.0 0 0.0 0 0.0 0 0.0 1.7461764812469482 -0.18838219344615936 0.21605445444583893 0.0 0.0 0.999969482421875 0.4730609655380249 0.32147711515426636 0 1.0 0 0.0 0 0.0 0 0.0 1.8204905986785889 -0.18867407739162445 0.21605445444583893 0.0 0.0 1.0 0.5256187319755554 0.3231980800628662 0 1.0 0 0.0 0 0.0 0 0.0 1.8269073963165283 -0.18734599649906158 0.21605445444583893 0.0 0.0 1.0 0.5298887491226196 0.3255653381347656 0 1.0 0 0.0 0 0.0 0 0.0 1.750065565109253 -0.18931257724761963 0.21605445444583893 0.0 -3.0518509447574615e-05 0.999969482421875 0.4758097231388092 0.32011890411376953 0 1.0 0 0.0 0 0.0 0 0.0 1.8204905986785889 -0.18867407739162445 0.21605445444583893 0.0 0.0 1.0 0.5256187319755554 0.3231980800628662 0 1.0 0 0.0 0 0.0 0 0.0 1.7461764812469482 -0.18838219344615936 0.21605445444583893 0.0 0.0 0.999969482421875 0.4730609655380249 0.32147711515426636 0 1.0 0 0.0 0 0.0 0 0.0 1.750065565109253 -0.18931257724761963 0.21605445444583893 0.0 -3.0518509447574615e-05 0.999969482421875 0.4758097231388092 0.32011890411376953 0 1.0 0 0.0 0 0.0 0 0.0 1.8139474391937256 -0.18979783356189728 0.21605445444583893 0.0 0.0 1.0 0.5211864709854126 0.3211352229118347 0 1.0 0 0.0 0 0.0 0 0.0 1.8204905986785889 -0.18867407739162445 0.21605445444583893 0.0 0.0 1.0 0.5256187319755554 0.3231980800628662 0 1.0 0 0.0 0 0.0 0 0.0 1.754028081893921 -0.1901189088821411 0.21605443954467773 0.0 -3.0518509447574615e-05 1.0 0.47862690687179565 0.31894344091415405 0 1.0 0 0.0 0 0.0 0 0.0 1.8139474391937256 -0.18979783356189728 0.21605445444583893 0.0 0.0 1.0 0.5211864709854126 0.3211352229118347 0 1.0 0 0.0 0 0.0 0 0.0 1.750065565109253 -0.18931257724761963 0.21605445444583893 0.0 -3.0518509447574615e-05 0.999969482421875 0.4758097231388092 0.32011890411376953 0 1.0 0 0.0 0 0.0 0 0.0 1.754028081893921 -0.1901189088821411 0.21605443954467773 0.0 -3.0518509447574615e-05 1.0 0.47862690687179565 0.31894344091415405 0 1.0 0 0.0 0 0.0 0 0.0 1.8072779178619385 -0.19071727991104126 0.21605445444583893 0.0 0.0 1.0 0.5165964961051941 0.31939154863357544 0 1.0 0 0.0 0 0.0 0 0.0 1.8139474391937256 -0.18979783356189728 0.21605445444583893 0.0 0.0 1.0 0.5211864709854126 0.3211352229118347 0 1.0 0 0.0 0 0.0 0 0.0 1.7580630779266357 -0.190801203250885 0.21605445444583893 0.0 3.0518509447574615e-05 0.999969482421875 0.48150941729545593 0.3179537057876587 0 1.0 0 0.0 0 0.0 0 0.0 1.8072779178619385 -0.19071727991104126 0.21605445444583893 0.0 0.0 1.0 0.5165964961051941 0.31939154863357544 0 1.0 0 0.0 0 0.0 0 0.0 1.754028081893921 -0.1901189088821411 0.21605443954467773 0.0 -3.0518509447574615e-05 1.0 0.47862690687179565 0.31894344091415405 0 1.0 0 0.0 0 0.0 0 0.0 1.7580630779266357 -0.190801203250885 0.21605445444583893 0.0 3.0518509447574615e-05 0.999969482421875 0.48150941729545593 0.3179537057876587 0 1.0 0 0.0 0 0.0 0 0.0 1.8004820346832275 -0.1914324015378952 0.21605445444583893 0.0 0.0 0.999969482421875 0.5118548274040222 0.317981481552124 0 1.0 0 0.0 0 0.0 0 0.0 1.8072779178619385 -0.19071727991104126 0.21605445444583893 0.0 0.0 1.0 0.5165964961051941 0.31939154863357544 0 1.0 0 0.0 0 0.0 0 0.0 1.7621715068817139 -0.19135943055152893 0.21605445444583893 0.0 0.0 1.0 0.48445528745651245 0.31715285778045654 0 1.0 0 0.0 0 0.0 0 0.0 1.8004820346832275 -0.1914324015378952 0.21605445444583893 0.0 0.0 0.999969482421875 0.5118548274040222 0.317981481552124 0 1.0 0 0.0 0 0.0 0 0.0 1.7580630779266357 -0.190801203250885 0.21605445444583893 0.0 3.0518509447574615e-05 0.999969482421875 0.48150941729545593 0.3179537057876587 0 1.0 0 0.0 0 0.0 0 0.0 1.7663524150848389 -0.19179360568523407 0.21605445444583893 0.0 0.0 1.0 0.48746082186698914 0.3165437579154968 0 1.0 0 0.0 0 0.0 0 0.0 1.8004820346832275 -0.1914324015378952 0.21605445444583893 0.0 0.0 0.999969482421875 0.5118548274040222 0.317981481552124 0 1.0 0 0.0 0 0.0 0 0.0 1.7621715068817139 -0.19135943055152893 0.21605445444583893 0.0 0.0 1.0 0.48445528745651245 0.31715285778045654 0 1.0 0 0.0 0 0.0 0 0.0 1.7663524150848389 -0.19179360568523407 0.21605445444583893 0.0 0.0 1.0 0.48746082186698914 0.3165437579154968 0 1.0 0 0.0 0 0.0 0 0.0 1.7935593128204346 -0.1919431984424591 0.21605445444583893 0.0 0.0 1.0 0.5069688558578491 0.31691932678222656 0 1.0 0 0.0 0 0.0 0 0.0 1.8004820346832275 -0.1914324015378952 0.21605445444583893 0.0 0.0 0.999969482421875 0.5118548274040222 0.317981481552124 0 1.0 0 0.0 0 0.0 0 0.0 1.7706067562103271 -0.19210374355316162 0.21605445444583893 0.0 0.0 1.0 0.49052339792251587 0.3161289691925049 0 1.0 0 0.0 0 0.0 0 0.0 1.7935593128204346 -0.1919431984424591 0.21605445444583893 0.0 0.0 1.0 0.5069688558578491 0.31691932678222656 0 1.0 0 0.0 0 0.0 0 0.0 1.7663524150848389 -0.19179360568523407 0.21605445444583893 0.0 0.0 1.0 0.48746082186698914 0.3165437579154968 0 1.0 0 0.0 0 0.0 0 0.0 1.7706067562103271 -0.19210374355316162 0.21605445444583893 0.0 0.0 1.0 0.49052339792251587 0.3161289691925049 0 1.0 0 0.0 0 0.0 0 0.0 1.7865102291107178 -0.19224967062473297 0.21605445444583893 0.0 0.0 1.0 0.5019482970237732 0.31621891260147095 0 1.0 0 0.0 0 0.0 0 0.0 1.7935593128204346 -0.1919431984424591 0.21605445444583893 0.0 0.0 1.0 0.5069688558578491 0.31691932678222656 0 1.0 0 0.0 0 0.0 0 0.0 1.7749340534210205 -0.1922898143529892 0.21605445444583893 0.0 0.0 1.0 0.4936390817165375 0.31591135263442993 0 1.0 0 0.0 0 0.0 0 0.0 1.7865102291107178 -0.19224967062473297 0.21605445444583893 0.0 0.0 1.0 0.5019482970237732 0.31621891260147095 0 1.0 0 0.0 0 0.0 0 0.0 1.7706067562103271 -0.19210374355316162 0.21605445444583893 0.0 0.0 1.0 0.49052339792251587 0.3161289691925049 0 1.0 0 0.0 0 0.0 0 0.0 1.7749340534210205 -0.1922898143529892 0.21605445444583893 0.0 0.0 1.0 0.4936390817165375 0.31591135263442993 0 1.0 0 0.0 0 0.0 0 0.0 1.779334306716919 -0.19235184788703918 0.21605445444583893 0.0 0.0002441480755805969 0.999969482421875 0.49680399894714355 0.3158932328224182 0 1.0 0 0.0 0 0.0 0 0.0 1.7865102291107178 -0.19224967062473297 0.21605445444583893 0.0 0.0 1.0 0.5019482970237732 0.31621891260147095 0 1.0 0 0.0 0 0.0 0 0.0 1.4019849300384521 0.1962110698223114 0.21605448424816132 0.0 -3.0518509447574615e-05 1.0 0.4772617220878601 0.6266326904296875 0 1.0 0 0.0 0 0.0 0 0.0 1.4275152683258057 0.19626706838607788 0.21605448424816132 0.0 0.0 0.999969482421875 0.4912264943122864 0.6263492107391357 0 1.0 0 0.0 0 0.0 0 0.0 1.4150612354278564 0.19643977284431458 0.21605448424816132 0.0 0.0 1.0 0.4844118058681488 0.626757025718689 0 1.0 0 0.0 0 0.0 0 0.0 1.4019849300384521 0.1962110698223114 0.21605448424816132 0.0 -3.0518509447574615e-05 1.0 0.4772617220878601 0.6266326904296875 0 1.0 0 0.0 0 0.0 0 0.0 1.4394242763519287 0.19574898481369019 0.21605448424816132 0.0 0.0 1.0 0.49773043394088745 0.625482439994812 0 1.0 0 0.0 0 0.0 0 0.0 1.4275152683258057 0.19626706838607788 0.21605448424816132 0.0 0.0 0.999969482421875 0.4912264943122864 0.6263492107391357 0 1.0 0 0.0 0 0.0 0 0.0 1.3894922733306885 0.1955251395702362 0.21605448424816132 0.0 0.0 0.999969482421875 0.4704526364803314 0.6259280443191528 0 1.0 0 0.0 0 0.0 0 0.0 1.4394242763519287 0.19574898481369019 0.21605448424816132 0.0 0.0 1.0 0.49773043394088745 0.625482439994812 0 1.0 0 0.0 0 0.0 0 0.0 1.4019849300384521 0.1962110698223114 0.21605448424816132 0.0 -3.0518509447574615e-05 1.0 0.4772617220878601 0.6266326904296875 0 1.0 0 0.0 0 0.0 0 0.0 1.3894922733306885 0.1955251395702362 0.21605448424816132 0.0 0.0 0.999969482421875 0.4704526364803314 0.6259280443191528 0 1.0 0 0.0 0 0.0 0 0.0 1.4507882595062256 0.1948854923248291 0.21605448424816132 0.0 0.0 1.0 0.5039108395576477 0.6241855025291443 0 1.0 0 0.0 0 0.0 0 0.0 1.4394242763519287 0.19574898481369019 0.21605448424816132 0.0 0.0 1.0 0.49773043394088745 0.625482439994812 0 1.0 0 0.0 0 0.0 0 0.0 1.3775832653045654 0.1943819224834442 0.21605448424816132 0.0 0.0 0.999969482421875 0.4639950394630432 0.6246772408485413 0 1.0 0 0.0 0 0.0 0 0.0 1.4507882595062256 0.1948854923248291 0.21605448424816132 0.0 0.0 1.0 0.5039108395576477 0.6241855025291443 0 1.0 0 0.0 0 0.0 0 0.0 1.3894922733306885 0.1955251395702362 0.21605448424816132 0.0 0.0 0.999969482421875 0.4704526364803314 0.6259280443191528 0 1.0 0 0.0 0 0.0 0 0.0 1.3775832653045654 0.1943819224834442 0.21605448424816132 0.0 0.0 0.999969482421875 0.4639950394630432 0.6246772408485413 0 1.0 0 0.0 0 0.0 0 0.0 1.4616072177886963 0.19367659091949463 0.21605448424816132 0.0 0.0 1.0 0.5097600817680359 0.6224872469902039 0 1.0 0 0.0 0 0.0 0 0.0 1.4507882595062256 0.1948854923248291 0.21605448424816132 0.0 0.0 1.0 0.5039108395576477 0.6241855025291443 0 1.0 0 0.0 0 0.0 0 0.0 1.3662583827972412 0.19278141856193542 0.21605448424816132 0.0 0.0 1.0 0.4578937888145447 0.6229137778282166 0 1.0 0 0.0 0 0.0 0 0.0 1.4616072177886963 0.19367659091949463 0.21605448424816132 0.0 0.0 1.0 0.5097600817680359 0.6224872469902039 0 1.0 0 0.0 0 0.0 0 0.0 1.3775832653045654 0.1943819224834442 0.21605448424816132 0.0 0.0 0.999969482421875 0.4639950394630432 0.6246772408485413 0 1.0 0 0.0 0 0.0 0 0.0 1.3662583827972412 0.19278141856193542 0.21605448424816132 0.0 0.0 1.0 0.4578937888145447 0.6229137778282166 0 1.0 0 0.0 0 0.0 0 0.0 1.471881628036499 0.19212231040000916 0.21605448424816132 0.0 0.0 0.999969482421875 0.5152754187583923 0.6204149723052979 0 1.0 0 0.0 0 0.0 0 0.0 1.4616072177886963 0.19367659091949463 0.21605448424816132 0.0 0.0 1.0 0.5097600817680359 0.6224872469902039 0 1.0 0 0.0 0 0.0 0 0.0 1.3555166721343994 0.19072362780570984 0.21605448424816132 0.0 0.0 1.0 0.45214810967445374 0.6206684112548828 0 1.0 0 0.0 0 0.0 0 0.0 1.471881628036499 0.19212231040000916 0.21605448424816132 0.0 0.0 0.999969482421875 0.5152754187583923 0.6204149723052979 0 1.0 0 0.0 0 0.0 0 0.0 1.3662583827972412 0.19278141856193542 0.21605448424816132 0.0 0.0 1.0 0.4578937888145447 0.6229137778282166 0 1.0 0 0.0 0 0.0 0 0.0 1.3555166721343994 0.19072362780570984 0.21605448424816132 0.0 0.0 1.0 0.45214810967445374 0.6206684112548828 0 1.0 0 0.0 0 0.0 0 0.0 1.4816114902496338 0.1902226209640503 0.21605448424816132 0.0 0.0 1.0 0.5204575657844543 0.6179937124252319 0 1.0 0 0.0 0 0.0 0 0.0 1.471881628036499 0.19212231040000916 0.21605448424816132 0.0 0.0 0.999969482421875 0.5152754187583923 0.6204149723052979 0 1.0 0 0.0 0 0.0 0 0.0 1.3453590869903564 0.18820855021476746 0.21605448424816132 0.0 0.0 1.0 0.44675424695014954 0.6179689168930054 0 1.0 0 0.0 0 0.0 0 0.0 1.4816114902496338 0.1902226209640503 0.21605448424816132 0.0 0.0 1.0 0.5204575657844543 0.6179937124252319 0 1.0 0 0.0 0 0.0 0 0.0 1.3555166721343994 0.19072362780570984 0.21605448424816132 0.0 0.0 1.0 0.45214810967445374 0.6206684112548828 0 1.0 0 0.0 0 0.0 0 0.0 1.3453590869903564 0.18820855021476746 0.21605448424816132 0.0 0.0 1.0 0.44675424695014954 0.6179689168930054 0 1.0 0 0.0 0 0.0 0 0.0 1.4907958507537842 0.18797752261161804 0.21605448424816132 0.0 0.0 1.0 0.5253098607063293 0.6152458190917969 0 1.0 0 0.0 0 0.0 0 0.0 1.4816114902496338 0.1902226209640503 0.21605448424816132 0.0 0.0 1.0 0.5204575657844543 0.6179937124252319 0 1.0 0 0.0 0 0.0 0 0.0 1.335785150527954 0.18523618578910828 0.21605448424816132 0.0 0.0 1.0 0.44170477986335754 0.6148389577865601 0 1.0 0 0.0 0 0.0 0 0.0 1.4907958507537842 0.18797752261161804 0.21605448424816132 0.0 0.0 1.0 0.5253098607063293 0.6152458190917969 0 1.0 0 0.0 0 0.0 0 0.0 1.3453590869903564 0.18820855021476746 0.21605448424816132 0.0 0.0 1.0 0.44675424695014954 0.6179689168930054 0 1.0 0 0.0 0 0.0 0 0.0 1.335785150527954 0.18523618578910828 0.21605448424816132 0.0 0.0 1.0 0.44170477986335754 0.6148389577865601 0 1.0 0 0.0 0 0.0 0 0.0 1.4994356632232666 0.1853870451450348 0.21605448424816132 0.0 0.0 1.0 0.5298388004302979 0.6121903657913208 0 1.0 0 0.0 0 0.0 0 0.0 1.4907958507537842 0.18797752261161804 0.21605448424816132 0.0 0.0 1.0 0.5253098607063293 0.6152458190917969 0 1.0 0 0.0 0 0.0 0 0.0 1.335785150527954 0.18523618578910828 0.21605448424816132 0.0 0.0 1.0 0.44170477986335754 0.6148389577865601 0 1.0 0 0.0 0 0.0 0 0.0 1.507530927658081 0.18245115876197815 0.21605448424816132 0.0 0.0 1.0 0.5340521335601807 0.6088429689407349 0 1.0 0 0.0 0 0.0 0 0.0 1.4994356632232666 0.1853870451450348 0.21605448424816132 0.0 0.0 1.0 0.5298388004302979 0.6121903657913208 0 1.0 0 0.0 0 0.0 0 0.0 1.3267953395843506 0.1818065345287323 0.21605448424816132 0.0 0.0 1.0 0.4369904398918152 0.6112979650497437 0 1.0 0 0.0 0 0.0 0 0.0 1.507530927658081 0.18245115876197815 0.21605448424816132 0.0 0.0 1.0 0.5340521335601807 0.6088429689407349 0 1.0 0 0.0 0 0.0 0 0.0 1.335785150527954 0.18523618578910828 0.21605448424816132 0.0 0.0 1.0 0.44170477986335754 0.6148389577865601 0 1.0 0 0.0 0 0.0 0 0.0 1.3267953395843506 0.1818065345287323 0.21605448424816132 0.0 0.0 1.0 0.4369904398918152 0.6112979650497437 0 1.0 0 0.0 0 0.0 0 0.0 1.5150806903839111 0.17916986346244812 0.21605448424816132 0.0 0.0 1.0 0.5379581451416016 0.6052162051200867 0 1.0 0 0.0 0 0.0 0 0.0 1.507530927658081 0.18245115876197815 0.21605448424816132 0.0 0.0 1.0 0.5340521335601807 0.6088429689407349 0 1.0 0 0.0 0 0.0 0 0.0 1.3183887004852295 0.17791959643363953 0.21605448424816132 0.0 0.0 1.0 0.43259984254837036 0.6073609590530396 0 1.0 0 0.0 0 0.0 0 0.0 1.5150806903839111 0.17916986346244812 0.21605448424816132 0.0 0.0 1.0 0.5379581451416016 0.6052162051200867 0 1.0 0 0.0 0 0.0 0 0.0 1.3267953395843506 0.1818065345287323 0.21605448424816132 0.0 0.0 1.0 0.4369904398918152 0.6112979650497437 0 1.0 0 0.0 0 0.0 0 0.0 1.3183887004852295 0.17791959643363953 0.21605448424816132 0.0 0.0 1.0 0.43259984254837036 0.6073609590530396 0 1.0 0 0.0 0 0.0 0 0.0 1.5220859050750732 0.1755431890487671 0.21605448424816132 0.0 0.0 1.0 0.5415668487548828 0.6013186573982239 0 1.0 0 0.0 0 0.0 0 0.0 1.5150806903839111 0.17916986346244812 0.21605448424816132 0.0 0.0 1.0 0.5379581451416016 0.6052162051200867 0 1.0 0 0.0 0 0.0 0 0.0 1.3105661869049072 0.17357537150382996 0.21605448424816132 0.0 0.0 1.0 0.42852169275283813 0.6030383110046387 0 1.0 0 0.0 0 0.0 0 0.0 1.5220859050750732 0.1755431890487671 0.21605448424816132 0.0 0.0 1.0 0.5415668487548828 0.6013186573982239 0 1.0 0 0.0 0 0.0 0 0.0 1.3183887004852295 0.17791959643363953 0.21605448424816132 0.0 0.0 1.0 0.43259984254837036 0.6073609590530396 0 1.0 0 0.0 0 0.0 0 0.0 1.3105661869049072 0.17357537150382996 0.21605448424816132 0.0 0.0 1.0 0.42852169275283813 0.6030383110046387 0 1.0 0 0.0 0 0.0 0 0.0 1.5285465717315674 0.17157110571861267 0.21605448424816132 0.0 0.0 1.0 0.5448878407478333 0.597155749797821 0 1.0 0 0.0 0 0.0 0 0.0 1.5220859050750732 0.1755431890487671 0.21605448424816132 0.0 0.0 1.0 0.5415668487548828 0.6013186573982239 0 1.0 0 0.0 0 0.0 0 0.0 1.3033273220062256 0.1687738597393036 0.21605446934700012 0.0 0.0 1.0 0.4247434735298157 0.5983360409736633 0 1.0 0 0.0 0 0.0 0 0.0 1.5285465717315674 0.17157110571861267 0.21605448424816132 0.0 0.0 1.0 0.5448878407478333 0.597155749797821 0 1.0 0 0.0 0 0.0 0 0.0 1.3105661869049072 0.17357537150382996 0.21605448424816132 0.0 0.0 1.0 0.42852169275283813 0.6030383110046387 0 1.0 0 0.0 0 0.0 0 0.0 1.3033273220062256 0.1687738597393036 0.21605446934700012 0.0 0.0 1.0 0.4247434735298157 0.5983360409736633 0 1.0 0 0.0 0 0.0 0 0.0 1.5345737934112549 0.16726094484329224 0.21605446934700012 0.0 0.0 1.0 0.5479841232299805 0.5927216410636902 0 1.0 0 0.0 0 0.0 0 0.0 1.5285465717315674 0.17157110571861267 0.21605448424816132 0.0 0.0 1.0 0.5448878407478333 0.597155749797821 0 1.0 0 0.0 0 0.0 0 0.0 1.2966725826263428 0.16351506114006042 0.21605446934700012 0.0 0.0 1.0 0.4212533235549927 0.593255877494812 0 1.0 0 0.0 0 0.0 0 0.0 1.5345737934112549 0.16726094484329224 0.21605446934700012 0.0 0.0 1.0 0.5479841232299805 0.5927216410636902 0 1.0 0 0.0 0 0.0 0 0.0 1.3033273220062256 0.1687738597393036 0.21605446934700012 0.0 0.0 1.0 0.4247434735298157 0.5983360409736633 0 1.0 0 0.0 0 0.0 0 0.0 1.2966725826263428 0.16351506114006042 0.21605446934700012 0.0 0.0 1.0 0.4212533235549927 0.593255877494812 0 1.0 0 0.0 0 0.0 0 0.0 1.5402801036834717 0.16261997818946838 0.21605446934700012 0.0 0.0 1.0 0.5509166121482849 0.5880075693130493 0 1.0 0 0.0 0 0.0 0 0.0 1.5345737934112549 0.16726094484329224 0.21605446934700012 0.0 0.0 1.0 0.5479841232299805 0.5927216410636902 0 1.0 0 0.0 0 0.0 0 0.0 1.290574312210083 0.15792062878608704 0.21605446934700012 0.0 0.0 1.0 0.41803431510925293 0.5878973007202148 0 1.0 0 0.0 0 0.0 0 0.0 1.5402801036834717 0.16261997818946838 0.21605446934700012 0.0 0.0 1.0 0.5509166121482849 0.5880075693130493 0 1.0 0 0.0 0 0.0 0 0.0 1.2966725826263428 0.16351506114006042 0.21605446934700012 0.0 0.0 1.0 0.4212533235549927 0.593255877494812 0 1.0 0 0.0 0 0.0 0 0.0 1.290574312210083 0.15792062878608704 0.21605446934700012 0.0 0.0 1.0 0.41803431510925293 0.5878973007202148 0 1.0 0 0.0 0 0.0 0 0.0 1.5456655025482178 0.1576482057571411 0.21605446934700012 0.0 0.0 1.0 0.5536909103393555 0.583011269569397 0 1.0 0 0.0 0 0.0 0 0.0 1.5402801036834717 0.16261997818946838 0.21605446934700012 0.0 0.0 1.0 0.5509166121482849 0.5880075693130493 0 1.0 0 0.0 0 0.0 0 0.0 1.2850067615509033 0.15211209654808044 0.21605446934700012 0.0 0.0 1.0 0.4150726795196533 0.582361102104187 0 1.0 0 0.0 0 0.0 0 0.0 1.5456655025482178 0.1576482057571411 0.21605446934700012 0.0 0.0 1.0 0.5536909103393555 0.583011269569397 0 1.0 0 0.0 0 0.0 0 0.0 1.290574312210083 0.15792062878608704 0.21605446934700012 0.0 0.0 1.0 0.41803431510925293 0.5878973007202148 0 1.0 0 0.0 0 0.0 0 0.0 1.2850067615509033 0.15211209654808044 0.21605446934700012 0.0 0.0 1.0 0.4150726795196533 0.582361102104187 0 1.0 0 0.0 0 0.0 0 0.0 1.5507299900054932 0.15234562754631042 0.21605446934700012 0.0 0.0 1.0 0.5563123226165771 0.5777289867401123 0 1.0 0 0.0 0 0.0 0 0.0 1.5456655025482178 0.1576482057571411 0.21605446934700012 0.0 0.0 1.0 0.5536909103393555 0.583011269569397 0 1.0 0 0.0 0 0.0 0 0.0 1.2850067615509033 0.15211209654808044 0.21605446934700012 0.0 0.0 1.0 0.4150726795196533 0.582361102104187 0 1.0 0 0.0 0 0.0 0 0.0 1.5554730892181396 0.14671224355697632 0.21605446934700012 0.0 0.0 1.0 0.5587857961654663 0.5721555948257446 0 1.0 0 0.0 0 0.0 0 0.0 1.5507299900054932 0.15234562754631042 0.21605446934700012 0.0 0.0 1.0 0.5563123226165771 0.5777289867401123 0 1.0 0 0.0 0 0.0 0 0.0 1.2799692153930664 0.14608952403068542 0.21605446934700012 0.0 0.0 0.999969482421875 0.41235947608947754 0.5766454935073853 0 1.0 0 0.0 0 0.0 0 0.0 1.5554730892181396 0.14671224355697632 0.21605446934700012 0.0 0.0 1.0 0.5587857961654663 0.5721555948257446 0 1.0 0 0.0 0 0.0 0 0.0 1.2850067615509033 0.15211209654808044 0.21605446934700012 0.0 0.0 1.0 0.4150726795196533 0.582361102104187 0 1.0 0 0.0 0 0.0 0 0.0 1.2799692153930664 0.14608952403068542 0.21605446934700012 0.0 0.0 0.999969482421875 0.41235947608947754 0.5766454935073853 0 1.0 0 0.0 0 0.0 0 0.0 1.5598952770233154 0.1407480537891388 0.21605446934700012 0.0 0.0 1.0 0.561116635799408 0.5662844777107239 0 1.0 0 0.0 0 0.0 0 0.0 1.5554730892181396 0.14671224355697632 0.21605446934700012 0.0 0.0 1.0 0.5587857961654663 0.5721555948257446 0 1.0 0 0.0 0 0.0 0 0.0 1.2754619121551514 0.13985291123390198 0.21605446934700012 0.0 0.0 1.0 0.4098869264125824 0.5707464218139648 0 1.0 0 0.0 0 0.0 0 0.0 1.5598952770233154 0.1407480537891388 0.21605446934700012 0.0 0.0 1.0 0.561116635799408 0.5662844777107239 0 1.0 0 0.0 0 0.0 0 0.0 1.2799692153930664 0.14608952403068542 0.21605446934700012 0.0 0.0 0.999969482421875 0.41235947608947754 0.5766454935073853 0 1.0 0 0.0 0 0.0 0 0.0 1.2754619121551514 0.13985291123390198 0.21605446934700012 0.0 0.0 1.0 0.4098869264125824 0.5707464218139648 0 1.0 0 0.0 0 0.0 0 0.0 1.5639960765838623 0.13445305824279785 0.21605446934700012 0.0 0.0 1.0 0.5633092522621155 0.5601080656051636 0 1.0 0 0.0 0 0.0 0 0.0 1.5598952770233154 0.1407480537891388 0.21605446934700012 0.0 0.0 1.0 0.561116635799408 0.5662844777107239 0 1.0 0 0.0 0 0.0 0 0.0 1.2714848518371582 0.13340222835540771 0.21605446934700012 0.0 0.0 1.0 0.40764760971069336 0.5646572709083557 0 1.0 0 0.0 0 0.0 0 0.0 1.5639960765838623 0.13445305824279785 0.21605446934700012 0.0 0.0 1.0 0.5633092522621155 0.5601080656051636 0 1.0 0 0.0 0 0.0 0 0.0 1.2754619121551514 0.13985291123390198 0.21605446934700012 0.0 0.0 1.0 0.4098869264125824 0.5707464218139648 0 1.0 0 0.0 0 0.0 0 0.0 1.2714848518371582 0.13340222835540771 0.21605446934700012 0.0 0.0 1.0 0.40764760971069336 0.5646572709083557 0 1.0 0 0.0 0 0.0 0 0.0 1.5677759647369385 0.1278272569179535 0.21605446934700012 0.0 0.0 1.0 0.5653682947158813 0.5536173582077026 0 1.0 0 0.0 0 0.0 0 0.0 1.5639960765838623 0.13445305824279785 0.21605446934700012 0.0 0.0 1.0 0.5633092522621155 0.5601080656051636 0 1.0 0 0.0 0 0.0 0 0.0 1.268038272857666 0.12673750519752502 0.21605446934700012 0.0 0.0 0.999969482421875 0.40563517808914185 0.5583691596984863 0 1.0 0 0.0 0 0.0 0 0.0 1.5677759647369385 0.1278272569179535 0.21605446934700012 0.0 0.0 1.0 0.5653682947158813 0.5536173582077026 0 1.0 0 0.0 0 0.0 0 0.0 1.2714848518371582 0.13340222835540771 0.21605446934700012 0.0 0.0 1.0 0.40764760971069336 0.5646572709083557 0 1.0 0 0.0 0 0.0 0 0.0 1.268038272857666 0.12673750519752502 0.21605446934700012 0.0 0.0 0.999969482421875 0.40563517808914185 0.5583691596984863 0 1.0 0 0.0 0 0.0 0 0.0 1.4168126583099365 0.12568670511245728 0.21605446934700012 0.0 0.0 0.999969482421875 0.4844020903110504 0.5620718598365784 0 1.0 0 0.0 0 0.0 0 0.0 1.5677759647369385 0.1278272569179535 0.21605446934700012 0.0 0.0 1.0 0.5653682947158813 0.5536173582077026 0 1.0 0 0.0 0 0.0 0 0.0 1.4168126583099365 0.12568670511245728 0.21605446934700012 0.0 0.0 0.999969482421875 0.4844020903110504 0.5620718598365784 0 1.0 0 0.0 0 0.0 0 0.0 1.421851396560669 0.1256064474582672 0.21605446934700012 0.0 -0.00030518509447574615 0.999969482421875 0.4873412549495697 0.5618768334388733 0 1.0 0 0.0 0 0.0 0 0.0 1.5677759647369385 0.1278272569179535 0.21605446934700012 0.0 0.0 1.0 0.5653682947158813 0.5536173582077026 0 1.0 0 0.0 0 0.0 0 0.0 1.421851396560669 0.1256064474582672 0.21605446934700012 0.0 -0.00030518509447574615 0.999969482421875 0.4873412549495697 0.5618768334388733 0 1.0 0 0.0 0 0.0 0 0.0 1.571234941482544 0.12087064981460571 0.21605446934700012 0.0 0.0 1.0 0.5672978758811951 0.5468026995658875 0 1.0 0 0.0 0 0.0 0 0.0 1.5677759647369385 0.1278272569179535 0.21605446934700012 0.0 0.0 1.0 0.5653682947158813 0.5536173582077026 0 1.0 0 0.0 0 0.0 0 0.0 1.2651219367980957 0.1198587417602539 0.21605446934700012 0.0 0.0 1.0 0.4038437008857727 0.5518712997436523 0 1.0 0 0.0 0 0.0 0 0.0 1.404465913772583 0.1253851056098938 0.21605446934700012 0.0 -9.155552834272385e-05 1.0 0.47720322012901306 0.5619494318962097 0 1.0 0 0.0 0 0.0 0 0.0 1.268038272857666 0.12673750519752502 0.21605446934700012 0.0 0.0 0.999969482421875 0.40563517808914185 0.5583691596984863 0 1.0 0 0.0 0 0.0 0 0.0 1.404465913772583 0.1253851056098938 0.21605446934700012 0.0 -9.155552834272385e-05 1.0 0.47720322012901306 0.5619494318962097 0 1.0 0 0.0 0 0.0 0 0.0 1.4104859828948975 0.1256113052368164 0.21605446934700012 0.0 0.00039674062281847 0.999969482421875 0.480711966753006 0.5621060132980347 0 1.0 0 0.0 0 0.0 0 0.0 1.268038272857666 0.12673750519752502 0.21605446934700012 0.0 0.0 0.999969482421875 0.40563517808914185 0.5583691596984863 0 1.0 0 0.0 0 0.0 0 0.0 1.4104859828948975 0.1256113052368164 0.21605446934700012 0.0 0.00039674062281847 0.999969482421875 0.480711966753006 0.5621060132980347 0 1.0 0 0.0 0 0.0 0 0.0 1.4168126583099365 0.12568670511245728 0.21605446934700012 0.0 0.0 0.999969482421875 0.4844020903110504 0.5620718598365784 0 1.0 0 0.0 0 0.0 0 0.0 1.268038272857666 0.12673750519752502 0.21605446934700012 0.0 0.0 0.999969482421875 0.40563517808914185 0.5583691596984863 0 1.0 0 0.0 0 0.0 0 0.0 1.4266927242279053 0.12536564469337463 0.21605446934700012 0.0 -0.0005493331700563431 0.999969482421875 0.49016404151916504 0.5615012645721436 0 1.0 0 0.0 0 0.0 0 0.0 1.571234941482544 0.12087064981460571 0.21605446934700012 0.0 0.0 1.0 0.5672978758811951 0.5468026995658875 0 1.0 0 0.0 0 0.0 0 0.0 1.421851396560669 0.1256064474582672 0.21605446934700012 0.0 -0.00030518509447574615 0.999969482421875 0.4873412549495697 0.5618768334388733 0 1.0 0 0.0 0 0.0 0 0.0 1.2651219367980957 0.1198587417602539 0.21605446934700012 0.0 0.0 1.0 0.4038437008857727 0.5518712997436523 0 1.0 0 0.0 0 0.0 0 0.0 1.398751974105835 0.12500807642936707 0.21605446934700012 0.0 0.0 0.999969482421875 0.473876416683197 0.5616071224212646 0 1.0 0 0.0 0 0.0 0 0.0 1.404465913772583 0.1253851056098938 0.21605446934700012 0.0 -9.155552834272385e-05 1.0 0.47720322012901306 0.5619494318962097 0 1.0 0 0.0 0 0.0 0 0.0 1.431337594985962 0.12496429681777954 0.21605446934700012 0.0 0.0 1.0 0.492870569229126 0.5609473586082458 0 1.0 0 0.0 0 0.0 0 0.0 1.571234941482544 0.12087064981460571 0.21605446934700012 0.0 0.0 1.0 0.5672978758811951 0.5468026995658875 0 1.0 0 0.0 0 0.0 0 0.0 1.4266927242279053 0.12536564469337463 0.21605446934700012 0.0 -0.0005493331700563431 0.999969482421875 0.49016404151916504 0.5615012645721436 0 1.0 0 0.0 0 0.0 0 0.0 1.2651219367980957 0.1198587417602539 0.21605446934700012 0.0 0.0 1.0 0.4038437008857727 0.5518712997436523 0 1.0 0 0.0 0 0.0 0 0.0 1.3933451175689697 0.1244802474975586 0.21605446934700012 0.0 3.0518509447574615e-05 1.0 0.4707322120666504 0.5610840916633606 0 1.0 0 0.0 0 0.0 0 0.0 1.398751974105835 0.12500807642936707 0.21605446934700012 0.0 0.0 0.999969482421875 0.473876416683197 0.5616071224212646 0 1.0 0 0.0 0 0.0 0 0.0 1.4357850551605225 0.12440240383148193 0.21605446934700012 0.0 0.0 1.0 0.4954600930213928 0.5602172613143921 0 1.0 0 0.0 0 0.0 0 0.0 1.571234941482544 0.12087064981460571 0.21605446934700012 0.0 0.0 1.0 0.5672978758811951 0.5468026995658875 0 1.0 0 0.0 0 0.0 0 0.0 1.431337594985962 0.12496429681777954 0.21605446934700012 0.0 0.0 1.0 0.492870569229126 0.5609473586082458 0 1.0 0 0.0 0 0.0 0 0.0 1.2651219367980957 0.1198587417602539 0.21605446934700012 0.0 0.0 1.0 0.4038437008857727 0.5518712997436523 0 1.0 0 0.0 0 0.0 0 0.0 1.388244390487671 0.12380161881446838 0.21605446934700012 0.0 0.0 1.0 0.46776947379112244 0.5603847503662109 0 1.0 0 0.0 0 0.0 0 0.0 1.3933451175689697 0.1244802474975586 0.21605446934700012 0.0 3.0518509447574615e-05 1.0 0.4707322120666504 0.5610840916633606 0 1.0 0 0.0 0 0.0 0 0.0 1.4400355815887451 0.1236799955368042 0.21605446934700012 0.0 3.0518509447574615e-05 1.0 0.497933030128479 0.5593129396438599 0 1.0 0 0.0 0 0.0 0 0.0 1.571234941482544 0.12087064981460571 0.21605446934700012 0.0 0.0 1.0 0.5672978758811951 0.5468026995658875 0 1.0 0 0.0 0 0.0 0 0.0 1.4357850551605225 0.12440240383148193 0.21605446934700012 0.0 0.0 1.0 0.4954600930213928 0.5602172613143921 0 1.0 0 0.0 0 0.0 0 0.0 1.2651219367980957 0.1198587417602539 0.21605446934700012 0.0 0.0 1.0 0.4038437008857727 0.5518712997436523 0 1.0 0 0.0 0 0.0 0 0.0 1.3834502696990967 0.12297219038009644 0.21605446934700012 0.0 0.0 1.0 0.4649874269962311 0.55951327085495 0 1.0 0 0.0 0 0.0 0 0.0 1.388244390487671 0.12380161881446838 0.21605446934700012 0.0 0.0 1.0 0.46776947379112244 0.5603847503662109 0 1.0 0 0.0 0 0.0 0 0.0 1.4440891742706299 0.12279704213142395 0.21605446934700012 0.0 0.0 1.0 0.5002896785736084 0.5582361221313477 0 1.0 0 0.0 0 0.0 0 0.0 1.571234941482544 0.12087064981460571 0.21605446934700012 0.0 0.0 1.0 0.5672978758811951 0.5468026995658875 0 1.0 0 0.0 0 0.0 0 0.0 1.4400355815887451 0.1236799955368042 0.21605446934700012 0.0 3.0518509447574615e-05 1.0 0.497933030128479 0.5593129396438599 0 1.0 0 0.0 0 0.0 0 0.0 1.2651219367980957 0.1198587417602539 0.21605446934700012 0.0 0.0 1.0 0.4038437008857727 0.5518712997436523 0 1.0 0 0.0 0 0.0 0 0.0 1.3789622783660889 0.12199193239212036 0.21605446934700012 0.0 0.0 1.0 0.46238431334495544 0.5584733486175537 0 1.0 0 0.0 0 0.0 0 0.0 1.3834502696990967 0.12297219038009644 0.21605446934700012 0.0 0.0 1.0 0.4649874269962311 0.55951327085495 0 1.0 0 0.0 0 0.0 0 0.0 1.4479458332061768 0.12175354361534119 0.21605446934700012 0.0 0.0 1.0 0.5025306344032288 0.556988000869751 0 1.0 0 0.0 0 0.0 0 0.0 1.571234941482544 0.12087064981460571 0.21605446934700012 0.0 0.0 1.0 0.5672978758811951 0.5468026995658875 0 1.0 0 0.0 0 0.0 0 0.0 1.4440891742706299 0.12279704213142395 0.21605446934700012 0.0 0.0 1.0 0.5002896785736084 0.5582361221313477 0 1.0 0 0.0 0 0.0 0 0.0 1.2651219367980957 0.1198587417602539 0.21605446934700012 0.0 0.0 1.0 0.4038437008857727 0.5518712997436523 0 1.0 0 0.0 0 0.0 0 0.0 1.3747813701629639 0.12086087465286255 0.21605446934700012 0.0 0.0 1.0 0.4599589407444 0.5572682619094849 0 1.0 0 0.0 0 0.0 0 0.0 1.3789622783660889 0.12199193239212036 0.21605446934700012 0.0 0.0 1.0 0.46238431334495544 0.5584733486175537 0 1.0 0 0.0 0 0.0 0 0.0 1.4516055583953857 0.12054949998855591 0.21605446934700012 0.0 0.0 0.999969482421875 0.5046564340591431 0.5555700063705444 0 1.0 0 0.0 0 0.0 0 0.0 1.571234941482544 0.12087064981460571 0.21605446934700012 0.0 0.0 1.0 0.5672978758811951 0.5468026995658875 0 1.0 0 0.0 0 0.0 0 0.0 1.4479458332061768 0.12175354361534119 0.21605446934700012 0.0 0.0 1.0 0.5025306344032288 0.556988000869751 0 1.0 0 0.0 0 0.0 0 0.0 1.4516055583953857 0.12054949998855591 0.21605446934700012 0.0 0.0 0.999969482421875 0.5046564340591431 0.5555700063705444 0 1.0 0 0.0 0 0.0 0 0.0 1.5743725299835205 0.11358323693275452 0.21605446934700012 0.0 0.0 1.0 0.5691015720367432 0.5396533012390137 0 1.0 0 0.0 0 0.0 0 0.0 1.571234941482544 0.12087064981460571 0.21605446934700012 0.0 0.0 1.0 0.5672978758811951 0.5468026995658875 0 1.0 0 0.0 0 0.0 0 0.0 1.2651219367980957 0.1198587417602539 0.21605446934700012 0.0 0.0 1.0 0.4038437008857727 0.5518712997436523 0 1.0 0 0.0 0 0.0 0 0.0 1.3709065914154053 0.119579017162323 0.21605446934700012 0.0 0.0 1.0 0.45770883560180664 0.5559004545211792 0 1.0 0 0.0 0 0.0 0 0.0 1.3747813701629639 0.12086087465286255 0.21605446934700012 0.0 0.0 1.0 0.4599589407444 0.5572682619094849 0 1.0 0 0.0 0 0.0 0 0.0 1.4550678730010986 0.1191849410533905 0.21605446934700012 0.0 0.0 0.999969482421875 0.5066676139831543 0.553982675075531 0 1.0 0 0.0 0 0.0 0 0.0 1.5743725299835205 0.11358323693275452 0.21605446934700012 0.0 0.0 1.0 0.5691015720367432 0.5396533012390137 0 1.0 0 0.0 0 0.0 0 0.0 1.4516055583953857 0.12054949998855591 0.21605446934700012 0.0 0.0 0.999969482421875 0.5046564340591431 0.5555700063705444 0 1.0 0 0.0 0 0.0 0 0.0 1.2627358436584473 0.11276590824127197 0.21605446934700012 0.0 0.0 1.0 0.4022684395313263 0.5451506972312927 0 1.0 0 0.0 0 0.0 0 0.0 1.3709065914154053 0.119579017162323 0.21605446934700012 0.0 0.0 1.0 0.45770883560180664 0.5559004545211792 0 1.0 0 0.0 0 0.0 0 0.0 1.2651219367980957 0.1198587417602539 0.21605446934700012 0.0 0.0 1.0 0.4038437008857727 0.5518712997436523 0 1.0 0 0.0 0 0.0 0 0.0 1.2627358436584473 0.11276590824127197 0.21605446934700012 0.0 0.0 1.0 0.4022684395313263 0.5451506972312927 0 1.0 0 0.0 0 0.0 0 0.0 1.367337942123413 0.11814635992050171 0.21605446934700012 0.0 0.0 1.0 0.4556320011615753 0.5543718338012695 0 1.0 0 0.0 0 0.0 0 0.0 1.3709065914154053 0.119579017162323 0.21605446934700012 0.0 0.0 1.0 0.45770883560180664 0.5559004545211792 0 1.0 0 0.0 0 0.0 0 0.0 1.4583332538604736 0.11765983700752258 0.21605446934700012 0.0 0.0 1.0 0.5085653066635132 0.5522264838218689 0 1.0 0 0.0 0 0.0 0 0.0 1.5743725299835205 0.11358323693275452 0.21605446934700012 0.0 0.0 1.0 0.5691015720367432 0.5396533012390137 0 1.0 0 0.0 0 0.0 0 0.0 1.4550678730010986 0.1191849410533905 0.21605446934700012 0.0 0.0 0.999969482421875 0.5066676139831543 0.553982675075531 0 1.0 0 0.0 0 0.0 0 0.0 1.2627358436584473 0.11276590824127197 0.21605446934700012 0.0 0.0 1.0 0.4022684395313263 0.5451506972312927 0 1.0 0 0.0 0 0.0 0 0.0 1.3640763759613037 0.1165628731250763 0.21605446934700012 0.0 0.0 1.0 0.4537268579006195 0.5526838302612305 0 1.0 0 0.0 0 0.0 0 0.0 1.367337942123413 0.11814635992050171 0.21605446934700012 0.0 0.0 1.0 0.4556320011615753 0.5543718338012695 0 1.0 0 0.0 0 0.0 0 0.0 1.4614017009735107 0.11597418785095215 0.21605446934700012 0.0 0.0 1.0 0.5103503465652466 0.5503014326095581 0 1.0 0 0.0 0 0.0 0 0.0 1.5743725299835205 0.11358323693275452 0.21605446934700012 0.0 0.0 1.0 0.5691015720367432 0.5396533012390137 0 1.0 0 0.0 0 0.0 0 0.0 1.4583332538604736 0.11765983700752258 0.21605446934700012 0.0 0.0 1.0 0.5085653066635132 0.5522264838218689 0 1.0 0 0.0 0 0.0 0 0.0 1.2627358436584473 0.11276590824127197 0.21605446934700012 0.0 0.0 1.0 0.4022684395313263 0.5451506972312927 0 1.0 0 0.0 0 0.0 0 0.0 1.3611209392547607 0.11482855677604675 0.21605446934700012 0.0 0.0 1.0 0.45199093222618103 0.5508368015289307 0 1.0 0 0.0 0 0.0 0 0.0 1.3640763759613037 0.1165628731250763 0.21605446934700012 0.0 0.0 1.0 0.4537268579006195 0.5526838302612305 0 1.0 0 0.0 0 0.0 0 0.0 1.46427321434021 0.11412802338600159 0.21605446934700012 0.0 0.0 1.0 0.5120236873626709 0.54820716381073 0 1.0 0 0.0 0 0.0 0 0.0 1.5743725299835205 0.11358323693275452 0.21605446934700012 0.0 0.0 1.0 0.5691015720367432 0.5396533012390137 0 1.0 0 0.0 0 0.0 0 0.0 1.4614017009735107 0.11597418785095215 0.21605446934700012 0.0 0.0 1.0 0.5103503465652466 0.5503014326095581 0 1.0 0 0.0 0 0.0 0 0.0 1.2627358436584473 0.11276590824127197 0.21605446934700012 0.0 0.0 1.0 0.4022684395313263 0.5451506972312927 0 1.0 0 0.0 0 0.0 0 0.0 1.359330415725708 0.11351263523101807 0.21605446934700012 0.0 0.0 1.0 0.4509287476539612 0.5494382381439209 0 1.0 0 0.0 0 0.0 0 0.0 1.3611209392547607 0.11482855677604675 0.21605446934700012 0.0 0.0 1.0 0.45199093222618103 0.5508368015289307 0 1.0 0 0.0 0 0.0 0 0.0 1.4669716358184814 0.1121310293674469 0.21605446934700012 0.0 0.0 1.0 0.5135997533798218 0.5459520816802979 0 1.0 0 0.0 0 0.0 0 0.0 1.5743725299835205 0.11358323693275452 0.21605446934700012 0.0 0.0 1.0 0.5691015720367432 0.5396533012390137 0 1.0 0 0.0 0 0.0 0 0.0 1.46427321434021 0.11412802338600159 0.21605446934700012 0.0 0.0 1.0 0.5120236873626709 0.54820716381073 0 1.0 0 0.0 0 0.0 0 0.0 1.4669716358184814 0.1121310293674469 0.21605446934700012 0.0 0.0 1.0 0.5135997533798218 0.5459520816802979 0 1.0 0 0.0 0 0.0 0 0.0 1.5771892070770264 0.1059650182723999 0.21605446934700012 0.0 0.0 1.0 0.5707830190658569 0.5321577787399292 0 1.0 0 0.0 0 0.0 0 0.0 1.5743725299835205 0.11358323693275452 0.21605446934700012 0.0 0.0 1.0 0.5691015720367432 0.5396533012390137 0 1.0 0 0.0 0 0.0 0 0.0 1.2627358436584473 0.11276590824127197 0.21605446934700012 0.0 0.0 1.0 0.4022684395313263 0.5451506972312927 0 1.0 0 0.0 0 0.0 0 0.0 1.3576958179473877 0.11213347315788269 0.21605446934700012 0.0 0.0 1.0 0.44995152950286865 0.5479726791381836 0 1.0 0 0.0 0 0.0 0 0.0 1.359330415725708 0.11351263523101807 0.21605446934700012 0.0 0.0 1.0 0.4509287476539612 0.5494382381439209 0 1.0 0 0.0 0 0.0 0 0.0 1.2608799934387207 0.10545903444290161 0.21605446934700012 0.0 0.0 0.999969482421875 0.4009055495262146 0.538192629814148 0 1.0 0 0.0 0 0.0 0 0.0 1.3576958179473877 0.11213347315788269 0.21605446934700012 0.0 0.0 1.0 0.44995152950286865 0.5479726791381836 0 1.0 0 0.0 0 0.0 0 0.0 1.2627358436584473 0.11276590824127197 0.21605446934700012 0.0 0.0 1.0 0.4022684395313263 0.5451506972312927 0 1.0 0 0.0 0 0.0 0 0.0 1.2608799934387207 0.10545903444290161 0.21605446934700012 0.0 0.0 0.999969482421875 0.4009055495262146 0.538192629814148 0 1.0 0 0.0 0 0.0 0 0.0 1.3562171459197998 0.11069107055664062 0.21605446934700012 0.0 0.0 1.0 0.44905880093574524 0.5464398860931396 0 1.0 0 0.0 0 0.0 0 0.0 1.3576958179473877 0.11213347315788269 0.21605446934700012 0.0 0.0 1.0 0.44995152950286865 0.5479726791381836 0 1.0 0 0.0 0 0.0 0 0.0 1.46952223777771 0.10999298095703125 0.21605446934700012 0.0 0.0 1.0 0.5150936245918274 0.5435440540313721 0 1.0 0 0.0 0 0.0 0 0.0 1.5771892070770264 0.1059650182723999 0.21605446934700012 0.0 0.0 1.0 0.5707830190658569 0.5321577787399292 0 1.0 0 0.0 0 0.0 0 0.0 1.4669716358184814 0.1121310293674469 0.21605446934700012 0.0 0.0 1.0 0.5135997533798218 0.5459520816802979 0 1.0 0 0.0 0 0.0 0 0.0 1.2608799934387207 0.10545903444290161 0.21605446934700012 0.0 0.0 0.999969482421875 0.4009055495262146 0.538192629814148 0 1.0 0 0.0 0 0.0 0 0.0 1.3548939228057861 0.10918542742729187 0.21605446934700012 0.0 0.0 1.0 0.44824984669685364 0.5448392033576965 0 1.0 0 0.0 0 0.0 0 0.0 1.3562171459197998 0.11069107055664062 0.21605446934700012 0.0 0.0 1.0 0.44905880093574524 0.5464398860931396 0 1.0 0 0.0 0 0.0 0 0.0 1.471924066543579 0.10771384835243225 0.21605446934700012 0.0 0.0 1.0 0.5165054798126221 0.5409820079803467 0 1.0 0 0.0 0 0.0 0 0.0 1.5771892070770264 0.1059650182723999 0.21605446934700012 0.0 0.0 1.0 0.5707830190658569 0.5321577787399292 0 1.0 0 0.0 0 0.0 0 0.0 1.46952223777771 0.10999298095703125 0.21605446934700012 0.0 0.0 1.0 0.5150936245918274 0.5435440540313721 0 1.0 0 0.0 0 0.0 0 0.0 1.2608799934387207 0.10545903444290161 0.21605446934700012 0.0 0.0 0.999969482421875 0.4009055495262146 0.538192629814148 0 1.0 0 0.0 0 0.0 0 0.0 1.3537261486053467 0.10761654376983643 0.21605446934700012 0.0 0.0 0.999969482421875 0.4475242495536804 0.5431699752807617 0 1.0 0 0.0 0 0.0 0 0.0 1.3548939228057861 0.10918542742729187 0.21605446934700012 0.0 0.0 1.0 0.44824984669685364 0.5448392033576965 0 1.0 0 0.0 0 0.0 0 0.0 1.474177598953247 0.1052936315536499 0.21605446934700012 0.0 0.0 1.0 0.5178361535072327 0.5382644534111023 0 1.0 0 0.0 0 0.0 0 0.0 1.5771892070770264 0.1059650182723999 0.21605446934700012 0.0 0.0 1.0 0.5707830190658569 0.5321577787399292 0 1.0 0 0.0 0 0.0 0 0.0 1.471924066543579 0.10771384835243225 0.21605446934700012 0.0 0.0 1.0 0.5165054798126221 0.5409820079803467 0 1.0 0 0.0 0 0.0 0 0.0 1.2608799934387207 0.10545903444290161 0.21605446934700012 0.0 0.0 0.999969482421875 0.4009055495262146 0.538192629814148 0 1.0 0 0.0 0 0.0 0 0.0 1.3527143001556396 0.10598441958427429 0.21605446934700012 0.0 0.0 0.999969482421875 0.446882039308548 0.5414314270019531 0 1.0 0 0.0 0 0.0 0 0.0 1.3537261486053467 0.10761654376983643 0.21605446934700012 0.0 0.0 0.999969482421875 0.4475242495536804 0.5431699752807617 0 1.0 0 0.0 0 0.0 0 0.0 1.2608799934387207 0.10545903444290161 0.21605446934700012 0.0 0.0 0.999969482421875 0.4009055495262146 0.538192629814148 0 1.0 0 0.0 0 0.0 0 0.0 1.351858377456665 0.10428905487060547 0.21605446934700012 0.0 0.0 1.0 0.4463229477405548 0.5396226644515991 0 1.0 0 0.0 0 0.0 0 0.0 1.3527143001556396 0.10598441958427429 0.21605446934700012 0.0 0.0 0.999969482421875 0.446882039308548 0.5414314270019531 0 1.0 0 0.0 0 0.0 0 0.0 1.474177598953247 0.1052936315536499 0.21605446934700012 0.0 0.0 1.0 0.5178361535072327 0.5382644534111023 0 1.0 0 0.0 0 0.0 0 0.0 1.5796849727630615 0.0980159342288971 0.21605446934700012 0.0 0.0 1.0 0.5723452568054199 0.5243043899536133 0 1.0 0 0.0 0 0.0 0 0.0 1.5771892070770264 0.1059650182723999 0.21605446934700012 0.0 0.0 1.0 0.5707830190658569 0.5321577787399292 0 1.0 0 0.0 0 0.0 0 0.0 1.259554386138916 0.09793812036514282 0.21605446934700012 0.0 0.0 1.0 0.39975225925445557 0.53098064661026 0 1.0 0 0.0 0 0.0 0 0.0 1.351858377456665 0.10428905487060547 0.21605446934700012 0.0 0.0 1.0 0.4463229477405548 0.5396226644515991 0 1.0 0 0.0 0 0.0 0 0.0 1.2608799934387207 0.10545903444290161 0.21605446934700012 0.0 0.0 0.999969482421875 0.4009055495262146 0.538192629814148 0 1.0 0 0.0 0 0.0 0 0.0 1.4762828350067139 0.1027323305606842 0.21605446934700012 0.0 0.0 0.999969482421875 0.5190862417221069 0.5353896021842957 0 1.0 0 0.0 0 0.0 0 0.0 1.5796849727630615 0.0980159342288971 0.21605446934700012 0.0 0.0 1.0 0.5723452568054199 0.5243043899536133 0 1.0 0 0.0 0 0.0 0 0.0 1.474177598953247 0.1052936315536499 0.21605446934700012 0.0 0.0 1.0 0.5178361535072327 0.5382644534111023 0 1.0 0 0.0 0 0.0 0 0.0 1.259554386138916 0.09793812036514282 0.21605446934700012 0.0 0.0 1.0 0.39975225925445557 0.53098064661026 0 1.0 0 0.0 0 0.0 0 0.0 1.3511579036712646 0.10253044962882996 0.21605446934700012 0.0 0.0 1.0 0.4458465576171875 0.5377424359321594 0 1.0 0 0.0 0 0.0 0 0.0 1.351858377456665 0.10428905487060547 0.21605446934700012 0.0 0.0 1.0 0.4463229477405548 0.5396226644515991 0 1.0 0 0.0 0 0.0 0 0.0 1.4782397747039795 0.10002994537353516 0.21605446934700012 0.0 0.0 1.0 0.5202562808990479 0.532355546951294 0 1.0 0 0.0 0 0.0 0 0.0 1.5796849727630615 0.0980159342288971 0.21605446934700012 0.0 0.0 1.0 0.5723452568054199 0.5243043899536133 0 1.0 0 0.0 0 0.0 0 0.0 1.4762828350067139 0.1027323305606842 0.21605446934700012 0.0 0.0 0.999969482421875 0.5190862417221069 0.5353896021842957 0 1.0 0 0.0 0 0.0 0 0.0 1.259554386138916 0.09793812036514282 0.21605446934700012 0.0 0.0 1.0 0.39975225925445557 0.53098064661026 0 1.0 0 0.0 0 0.0 0 0.0 1.3506128787994385 0.10070860385894775 0.21605446934700012 0.0 0.0 1.0 0.44545286893844604 0.5357896089553833 0 1.0 0 0.0 0 0.0 0 0.0 1.3511579036712646 0.10253044962882996 0.21605446934700012 0.0 0.0 1.0 0.4458465576171875 0.5377424359321594 0 1.0 0 0.0 0 0.0 0 0.0 1.259554386138916 0.09793812036514282 0.21605446934700012 0.0 0.0 1.0 0.39975225925445557 0.53098064661026 0 1.0 0 0.0 0 0.0 0 0.0 1.3502237796783447 0.09882351756095886 0.21605446934700012 0.0 0.0 1.0 0.44514212012290955 0.5337626934051514 0 1.0 0 0.0 0 0.0 0 0.0 1.3506128787994385 0.10070860385894775 0.21605446934700012 0.0 0.0 1.0 0.44545286893844604 0.5357896089553833 0 1.0 0 0.0 0 0.0 0 0.0 1.480048418045044 0.09718650579452515 0.21605446934700012 0.0 0.0 1.0 0.5213466882705688 0.5291599035263062 0 1.0 0 0.0 0 0.0 0 0.0 1.5796849727630615 0.0980159342288971 0.21605446934700012 0.0 0.0 1.0 0.5723452568054199 0.5243043899536133 0 1.0 0 0.0 0 0.0 0 0.0 1.4782397747039795 0.10002994537353516 0.21605446934700012 0.0 0.0 1.0 0.5202562808990479 0.532355546951294 0 1.0 0 0.0 0 0.0 0 0.0 1.259554386138916 0.09793812036514282 0.21605446934700012 0.0 0.0 1.0 0.39975225925445557 0.53098064661026 0 1.0 0 0.0 0 0.0 0 0.0 1.3499906063079834 0.09687519073486328 0.21605446934700012 0.0 0.0 1.0 0.44491448998451233 0.5316601991653442 0 1.0 0 0.0 0 0.0 0 0.0 1.3502237796783447 0.09882351756095886 0.21605446934700012 0.0 0.0 1.0 0.44514212012290955 0.5337626934051514 0 1.0 0 0.0 0 0.0 0 0.0 1.480048418045044 0.09718650579452515 0.21605446934700012 0.0 0.0 1.0 0.5213466882705688 0.5291599035263062 0 1.0 0 0.0 0 0.0 0 0.0 1.481708288192749 0.09420198202133179 0.21605446934700012 0.0 0.0 0.999969482421875 0.5223576426506042 0.5258004665374756 0 1.0 0 0.0 0 0.0 0 0.0 1.5796849727630615 0.0980159342288971 0.21605446934700012 0.0 0.0 1.0 0.5723452568054199 0.5243043899536133 0 1.0 0 0.0 0 0.0 0 0.0 1.481708288192749 0.09420198202133179 0.21605446934700012 0.0 0.0 0.999969482421875 0.5223576426506042 0.5258004665374756 0 1.0 0 0.0 0 0.0 0 0.0 1.4832203388214111 0.09107637405395508 0.21605446934700012 0.0 0.0 1.0 0.5232900381088257 0.5222742557525635 0 1.0 0 0.0 0 0.0 0 0.0 1.5796849727630615 0.0980159342288971 0.21605446934700012 0.0 0.0 1.0 0.5723452568054199 0.5243043899536133 0 1.0 0 0.0 0 0.0 0 0.0 1.4832203388214111 0.09107637405395508 0.21605446934700012 0.0 0.0 1.0 0.5232900381088257 0.5222742557525635 0 1.0 0 0.0 0 0.0 0 0.0 1.4845836162567139 0.08780968189239502 0.21605446934700012 0.0 0.0 1.0 0.5241435170173645 0.5185786485671997 0 1.0 0 0.0 0 0.0 0 0.0 1.5796849727630615 0.0980159342288971 0.21605446934700012 0.0 0.0 1.0 0.5723452568054199 0.5243043899536133 0 1.0 0 0.0 0 0.0 0 0.0 1.4845836162567139 0.08780968189239502 0.21605446934700012 0.0 0.0 1.0 0.5241435170173645 0.5185786485671997 0 1.0 0 0.0 0 0.0 0 0.0 1.4857985973358154 0.08440190553665161 0.21605446934700012 0.0 0.0 1.0 0.5249184966087341 0.5147104263305664 0 1.0 0 0.0 0 0.0 0 0.0 1.5796849727630615 0.0980159342288971 0.21605446934700012 0.0 0.0 1.0 0.5723452568054199 0.5243043899536133 0 1.0 0 0.0 0 0.0 0 0.0 1.4857985973358154 0.08440190553665161 0.21605446934700012 0.0 0.0 1.0 0.5249184966087341 0.5147104263305664 0 1.0 0 0.0 0 0.0 0 0.0 1.4868652820587158 0.08085307478904724 0.21605446934700012 0.0 0.0 1.0 0.5256151556968689 0.5106664299964905 0 1.0 0 0.0 0 0.0 0 0.0 1.5796849727630615 0.0980159342288971 0.21605446934700012 0.0 0.0 1.0 0.5723452568054199 0.5243043899536133 0 1.0 0 0.0 0 0.0 0 0.0 1.2587590217590332 0.09020313620567322 0.21605446934700012 0.0 0.0 1.0 0.39880692958831787 0.5234965085983276 0 1.0 0 0.0 0 0.0 0 0.0 1.3499906063079834 0.09687519073486328 0.21605446934700012 0.0 0.0 1.0 0.44491448998451233 0.5316601991653442 0 1.0 0 0.0 0 0.0 0 0.0 1.259554386138916 0.09793812036514282 0.21605446934700012 0.0 0.0 1.0 0.39975225925445557 0.53098064661026 0 1.0 0 0.0 0 0.0 0 0.0 1.2587590217590332 0.09020313620567322 0.21605446934700012 0.0 0.0 1.0 0.39880692958831787 0.5234965085983276 0 1.0 0 0.0 0 0.0 0 0.0 1.349912405014038 0.09486359357833862 0.21605446934700012 0.0 0.0 1.0 0.4447696805000305 0.5294804573059082 0 1.0 0 0.0 0 0.0 0 0.0 1.3499906063079834 0.09687519073486328 0.21605446934700012 0.0 0.0 1.0 0.44491448998451233 0.5316601991653442 0 1.0 0 0.0 0 0.0 0 0.0 1.2587590217590332 0.09020313620567322 0.21605446934700012 0.0 0.0 1.0 0.39880692958831787 0.5234965085983276 0 1.0 0 0.0 0 0.0 0 0.0 1.3499805927276611 0.09313416481018066 0.21605446934700012 0.0 0.0 0.999969482421875 0.44472062587738037 0.5275986194610596 0 1.0 0 0.0 0 0.0 0 0.0 1.349912405014038 0.09486359357833862 0.21605446934700012 0.0 0.0 1.0 0.4447696805000305 0.5294804573059082 0 1.0 0 0.0 0 0.0 0 0.0 1.2587590217590332 0.09020313620567322 0.21605446934700012 0.0 0.0 1.0 0.39880692958831787 0.5234965085983276 0 1.0 0 0.0 0 0.0 0 0.0 1.3501851558685303 0.09144851565361023 0.21605446934700012 0.0 0.0 1.0 0.4447501301765442 0.5257568359375 0 1.0 0 0.0 0 0.0 0 0.0 1.3499805927276611 0.09313416481018066 0.21605446934700012 0.0 0.0 0.999969482421875 0.44472062587738037 0.5275986194610596 0 1.0 0 0.0 0 0.0 0 0.0 1.2587590217590332 0.09020313620567322 0.21605446934700012 0.0 0.0 1.0 0.39880692958831787 0.5234965085983276 0 1.0 0 0.0 0 0.0 0 0.0 1.3505256175994873 0.08980664610862732 0.21605446934700012 0.0 0.0 1.0 0.4448583722114563 0.5239549279212952 0 1.0 0 0.0 0 0.0 0 0.0 1.3501851558685303 0.09144851565361023 0.21605446934700012 0.0 0.0 1.0 0.4447501301765442 0.5257568359375 0 1.0 0 0.0 0 0.0 0 0.0 1.2584939002990723 0.08225411176681519 0.21605446934700012 0.0 0.0 1.0 0.39806902408599854 0.5157207250595093 0 1.0 0 0.0 0 0.0 0 0.0 1.3505256175994873 0.08980664610862732 0.21605446934700012 0.0 0.0 1.0 0.4448583722114563 0.5239549279212952 0 1.0 0 0.0 0 0.0 0 0.0 1.2587590217590332 0.09020313620567322 0.21605446934700012 0.0 0.0 1.0 0.39880692958831787 0.5234965085983276 0 1.0 0 0.0 0 0.0 0 0.0 1.2584939002990723 0.08225411176681519 0.21605446934700012 0.0 0.0 1.0 0.39806902408599854 0.5157207250595093 0 1.0 0 0.0 0 0.0 0 0.0 1.3510024547576904 0.08820855617523193 0.21605446934700012 0.0 0.0 1.0 0.44504600763320923 0.5221929550170898 0 1.0 0 0.0 0 0.0 0 0.0 1.3505256175994873 0.08980664610862732 0.21605446934700012 0.0 0.0 1.0 0.4448583722114563 0.5239549279212952 0 1.0 0 0.0 0 0.0 0 0.0 1.2584939002990723 0.08225411176681519 0.21605446934700012 0.0 0.0 1.0 0.39806902408599854 0.5157207250595093 0 1.0 0 0.0 0 0.0 0 0.0 1.3516151905059814 0.08665427565574646 0.21605446934700012 0.0 0.0 1.0 0.44531333446502686 0.5204707384109497 0 1.0 0 0.0 0 0.0 0 0.0 1.3510024547576904 0.08820855617523193 0.21605446934700012 0.0 0.0 1.0 0.44504600763320923 0.5221929550170898 0 1.0 0 0.0 0 0.0 0 0.0 1.2584939002990723 0.08225411176681519 0.21605446934700012 0.0 0.0 1.0 0.39806902408599854 0.5157207250595093 0 1.0 0 0.0 0 0.0 0 0.0 1.3523643016815186 0.08514377474784851 0.21605446934700012 0.0 0.0 0.999969482421875 0.44566109776496887 0.5187883377075195 0 1.0 0 0.0 0 0.0 0 0.0 1.3516151905059814 0.08665427565574646 0.21605446934700012 0.0 0.0 1.0 0.44531333446502686 0.5204707384109497 0 1.0 0 0.0 0 0.0 0 0.0 1.2584939002990723 0.08225411176681519 0.21605446934700012 0.0 0.0 1.0 0.39806902408599854 0.5157207250595093 0 1.0 0 0.0 0 0.0 0 0.0 1.3532497882843018 0.08367705345153809 0.21605446934700012 0.0 0.0 1.0 0.4460899531841278 0.5171455144882202 0 1.0 0 0.0 0 0.0 0 0.0 1.3523643016815186 0.08514377474784851 0.21605446934700012 0.0 0.0 0.999969482421875 0.44566109776496887 0.5187883377075195 0 1.0 0 0.0 0 0.0 0 0.0 1.2584939002990723 0.08225411176681519 0.21605446934700012 0.0 0.0 1.0 0.39806902408599854 0.5157207250595093 0 1.0 0 0.0 0 0.0 0 0.0 1.354271650314331 0.08225411176681519 0.21605446934700012 0.0 0.0 1.0 0.44660046696662903 0.5155422687530518 0 1.0 0 0.0 0 0.0 0 0.0 1.3532497882843018 0.08367705345153809 0.21605446934700012 0.0 0.0 1.0 0.4460899531841278 0.5171455144882202 0 1.0 0 0.0 0 0.0 0 0.0 1.258800745010376 0.0734853744506836 0.21605446934700012 0.0 0.0 1.0 0.3975094258785248 0.5070275068283081 0 1.0 0 0.0 0 0.0 0 0.0 1.354271650314331 0.08225411176681519 0.21605446934700012 0.0 0.0 1.0 0.44660046696662903 0.5155422687530518 0 1.0 0 0.0 0 0.0 0 0.0 1.2584939002990723 0.08225411176681519 0.21605446934700012 0.0 0.0 1.0 0.39806902408599854 0.5157207250595093 0 1.0 0 0.0 0 0.0 0 0.0 1.258800745010376 0.0734853744506836 0.21605446934700012 0.0 0.0 1.0 0.3975094258785248 0.5070275068283081 0 1.0 0 0.0 0 0.0 0 0.0 1.3554294109344482 0.08087494969367981 0.21605446934700012 0.0 0.0 1.0 0.44719308614730835 0.5139785408973694 0 1.0 0 0.0 0 0.0 0 0.0 1.354271650314331 0.08225411176681519 0.21605446934700012 0.0 0.0 1.0 0.44660046696662903 0.5155422687530518 0 1.0 0 0.0 0 0.0 0 0.0 1.258800745010376 0.0734853744506836 0.21605446934700012 0.0 0.0 1.0 0.3975094258785248 0.5070275068283081 0 1.0 0 0.0 0 0.0 0 0.0 1.3567235469818115 0.07953956723213196 0.21605446934700012 0.0 0.0 1.0 0.4478687345981598 0.5124543905258179 0 1.0 0 0.0 0 0.0 0 0.0 1.3554294109344482 0.08087494969367981 0.21605446934700012 0.0 0.0 1.0 0.44719308614730835 0.5139785408973694 0 1.0 0 0.0 0 0.0 0 0.0 1.258800745010376 0.0734853744506836 0.21605446934700012 0.0 0.0 1.0 0.3975094258785248 0.5070275068283081 0 1.0 0 0.0 0 0.0 0 0.0 1.3581535816192627 0.07824796438217163 0.21605446934700012 0.0 0.0 1.0 0.44862794876098633 0.5109697580337524 0 1.0 0 0.0 0 0.0 0 0.0 1.3567235469818115 0.07953956723213196 0.21605446934700012 0.0 0.0 1.0 0.4478687345981598 0.5124543905258179 0 1.0 0 0.0 0 0.0 0 0.0 1.258800745010376 0.0734853744506836 0.21605446934700012 0.0 0.0 1.0 0.3975094258785248 0.5070275068283081 0 1.0 0 0.0 0 0.0 0 0.0 1.35971999168396 0.07700017094612122 0.21605446934700012 0.0 0.0 1.0 0.44947174191474915 0.5095247030258179 0 1.0 0 0.0 0 0.0 0 0.0 1.3581535816192627 0.07824796438217163 0.21605446934700012 0.0 0.0 1.0 0.44862794876098633 0.5109697580337524 0 1.0 0 0.0 0 0.0 0 0.0 1.258800745010376 0.0734853744506836 0.21605446934700012 0.0 0.0 1.0 0.3975094258785248 0.5070275068283081 0 1.0 0 0.0 0 0.0 0 0.0 1.362391710281372 0.07530966401100159 0.21605446934700012 0.0 0.0 1.0 0.45094093680381775 0.5075438618659973 0 1.0 0 0.0 0 0.0 0 0.0 1.35971999168396 0.07700017094612122 0.21605446934700012 0.0 0.0 1.0 0.44947174191474915 0.5095247030258179 0 1.0 0 0.0 0 0.0 0 0.0 1.258800745010376 0.0734853744506836 0.21605446934700012 0.0 0.0 1.0 0.3975094258785248 0.5070275068283081 0 1.0 0 0.0 0 0.0 0 0.0 1.3659708499908447 0.07350727915763855 0.21605446934700012 0.0 0.0 0.999969482421875 0.45294734835624695 0.5053983926773071 0 1.0 0 0.0 0 0.0 0 0.0 1.362391710281372 0.07530966401100159 0.21605446934700012 0.0 0.0 1.0 0.45094093680381775 0.5075438618659973 0 1.0 0 0.0 0 0.0 0 0.0 1.258800745010376 0.0734853744506836 0.21605446934700012 0.0 0.0 1.0 0.3975094258785248 0.5070275068283081 0 1.0 0 0.0 0 0.0 0 0.0 1.370457410812378 0.07159298658370972 0.21605446934700012 0.0 0.0 1.0 0.45550280809402466 0.5030808448791504 0 1.0 0 0.0 0 0.0 0 0.0 1.3659708499908447 0.07350727915763855 0.21605446934700012 0.0 0.0 0.999969482421875 0.45294734835624695 0.5053983926773071 0 1.0 0 0.0 0 0.0 0 0.0 1.2597200870513916 0.06504258513450623 0.21605446934700012 0.0 0.0 0.999969482421875 0.39723891019821167 0.49852633476257324 0 1.0 0 0.0 0 0.0 0 0.0 1.370457410812378 0.07159298658370972 0.21605446934700012 0.0 0.0 1.0 0.45550280809402466 0.5030808448791504 0 1.0 0 0.0 0 0.0 0 0.0 1.258800745010376 0.0734853744506836 0.21605446934700012 0.0 0.0 1.0 0.3975094258785248 0.5070275068283081 0 1.0 0 0.0 0 0.0 0 0.0 1.2597200870513916 0.06504258513450623 0.21605446934700012 0.0 0.0 0.999969482421875 0.39723891019821167 0.49852633476257324 0 1.0 0 0.0 0 0.0 0 0.0 1.3758513927459717 0.06956681609153748 0.21605446934700012 0.0 0.0 1.0 0.4586208760738373 0.5005841851234436 0 1.0 0 0.0 0 0.0 0 0.0 1.370457410812378 0.07159298658370972 0.21605446934700012 0.0 0.0 1.0 0.45550280809402466 0.5030808448791504 0 1.0 0 0.0 0 0.0 0 0.0 1.2597200870513916 0.06504258513450623 0.21605446934700012 0.0 0.0 0.999969482421875 0.39723891019821167 0.49852633476257324 0 1.0 0 0.0 0 0.0 0 0.0 1.3821523189544678 0.06742876768112183 0.21605446934700012 0.0 0.0 1.0 0.4623155891895294 0.49790245294570923 0 1.0 0 0.0 0 0.0 0 0.0 1.3758513927459717 0.06956681609153748 0.21605446934700012 0.0 0.0 1.0 0.4586208760738373 0.5005841851234436 0 1.0 0 0.0 0 0.0 0 0.0 1.2597200870513916 0.06504258513450623 0.21605446934700012 0.0 0.0 0.999969482421875 0.39723891019821167 0.49852633476257324 0 1.0 0 0.0 0 0.0 0 0.0 1.3893606662750244 0.06517881155014038 0.21605446934700012 0.0 0.0 1.0 0.46660125255584717 0.49503183364868164 0 1.0 0 0.0 0 0.0 0 0.0 1.3821523189544678 0.06742876768112183 0.21605446934700012 0.0 0.0 1.0 0.4623155891895294 0.49790245294570923 0 1.0 0 0.0 0 0.0 0 0.0 1.2597200870513916 0.06504258513450623 0.21605446934700012 0.0 0.0 0.999969482421875 0.39723891019821167 0.49852633476257324 0 1.0 0 0.0 0 0.0 0 0.0 1.3974764347076416 0.06281697750091553 0.21605446934700012 0.0 0.0 1.0 0.47149011492729187 0.49197161197662354 0 1.0 0 0.0 0 0.0 0 0.0 1.3893606662750244 0.06517881155014038 0.21605446934700012 0.0 0.0 1.0 0.46660125255584717 0.49503183364868164 0 1.0 0 0.0 0 0.0 0 0.0 1.2612524032592773 0.05692572891712189 0.21605446934700012 0.0 0.0 1.0 0.39726346731185913 0.49021202325820923 0 1.0 0 0.0 0 0.0 0 0.0 1.3974764347076416 0.06281697750091553 0.21605446934700012 0.0 0.0 1.0 0.47149011492729187 0.49197161197662354 0 1.0 0 0.0 0 0.0 0 0.0 1.2597200870513916 0.06504258513450623 0.21605446934700012 0.0 0.0 0.999969482421875 0.39723891019821167 0.49852633476257324 0 1.0 0 0.0 0 0.0 0 0.0 1.2612524032592773 0.05692572891712189 0.21605446934700012 0.0 0.0 1.0 0.39726346731185913 0.49021202325820923 0 1.0 0 0.0 0 0.0 0 0.0 1.4064991474151611 0.06034325063228607 0.21605446934700012 0.0 0.0 1.0 0.4769904911518097 0.48872560262680054 0 1.0 0 0.0 0 0.0 0 0.0 1.3974764347076416 0.06281697750091553 0.21605446934700012 0.0 0.0 1.0 0.47149011492729187 0.49197161197662354 0 1.0 0 0.0 0 0.0 0 0.0 1.2612524032592773 0.05692572891712189 0.21605446934700012 0.0 0.0 1.0 0.39726346731185913 0.49021202325820923 0 1.0 0 0.0 0 0.0 0 0.0 1.4164292812347412 0.057757630944252014 0.21605446934700012 0.0 0.0 1.0 0.48310548067092896 0.4853035807609558 0 1.0 0 0.0 0 0.0 0 0.0 1.4064991474151611 0.06034325063228607 0.21605446934700012 0.0 0.0 1.0 0.4769904911518097 0.48872560262680054 0 1.0 0 0.0 0 0.0 0 0.0 1.2612524032592773 0.05692572891712189 0.21605446934700012 0.0 0.0 1.0 0.39726346731185913 0.49021202325820923 0 1.0 0 0.0 0 0.0 0 0.0 1.4272668361663818 0.055060118436813354 0.21605446934700012 0.0 0.0 1.0 0.48982954025268555 0.4817225933074951 0 1.0 0 0.0 0 0.0 0 0.0 1.4164292812347412 0.057757630944252014 0.21605446934700012 0.0 0.0 1.0 0.48310548067092896 0.4853035807609558 0 1.0 0 0.0 0 0.0 0 0.0 1.2633976936340332 0.04913482069969177 0.21605446934700012 0.0 0.0 1.0 0.39759036898612976 0.48207831382751465 0 1.0 0 0.0 0 0.0 0 0.0 1.4272668361663818 0.055060118436813354 0.21605446934700012 0.0 0.0 1.0 0.48982954025268555 0.4817225933074951 0 1.0 0 0.0 0 0.0 0 0.0 1.2612524032592773 0.05692572891712189 0.21605446934700012 0.0 0.0 1.0 0.39726346731185913 0.49021202325820923 0 1.0 0 0.0 0 0.0 0 0.0 1.2633976936340332 0.04913482069969177 0.21605446934700012 0.0 0.0 1.0 0.39759036898612976 0.48207831382751465 0 1.0 0 0.0 0 0.0 0 0.0 1.439011812210083 0.05225071310997009 0.21605446934700012 0.0 0.0 0.999969482421875 0.4971461296081543 0.4780082702636719 0 1.0 0 0.0 0 0.0 0 0.0 1.4272668361663818 0.055060118436813354 0.21605446934700012 0.0 0.0 1.0 0.48982954025268555 0.4817225933074951 0 1.0 0 0.0 0 0.0 0 0.0 1.2633976936340332 0.04913482069969177 0.21605446934700012 0.0 0.0 1.0 0.39759036898612976 0.48207831382751465 0 1.0 0 0.0 0 0.0 0 0.0 1.4516637325286865 0.04932942986488342 0.21605446934700012 0.0 0.0 1.0 0.5050248503684998 0.4741957187652588 0 1.0 0 0.0 0 0.0 0 0.0 1.439011812210083 0.05225071310997009 0.21605446934700012 0.0 0.0 0.999969482421875 0.4971461296081543 0.4780082702636719 0 1.0 0 0.0 0 0.0 0 0.0 1.2633976936340332 0.04913482069969177 0.21605446934700012 0.0 0.0 1.0 0.39759036898612976 0.48207831382751465 0 1.0 0 0.0 0 0.0 0 0.0 1.464440107345581 0.04629625380039215 0.21605446934700012 0.0 0.0 1.0 0.5129398107528687 0.47033530473709106 0 1.0 0 0.0 0 0.0 0 0.0 1.4516637325286865 0.04932942986488342 0.21605446934700012 0.0 0.0 1.0 0.5050248503684998 0.4741957187652588 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 0.04166984558105469 0.21605446934700012 0.0 0.0 0.999969482421875 0.3982289433479309 0.47411829233169556 0 1.0 0 0.0 0 0.0 0 0.0 1.464440107345581 0.04629625380039215 0.21605446934700012 0.0 0.0 1.0 0.5129398107528687 0.47033530473709106 0 1.0 0 0.0 0 0.0 0 0.0 1.2633976936340332 0.04913482069969177 0.21605446934700012 0.0 0.0 1.0 0.39759036898612976 0.48207831382751465 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 0.04166984558105469 0.21605446934700012 0.0 0.0 0.999969482421875 0.3982289433479309 0.47411829233169556 0 1.0 0 0.0 0 0.0 0 0.0 1.4765570163726807 0.04315118491649628 0.21605446934700012 0.0 0.0 1.0 0.520378828048706 0.4664573073387146 0 1.0 0 0.0 0 0.0 0 0.0 1.464440107345581 0.04629625380039215 0.21605446934700012 0.0 0.0 1.0 0.5129398107528687 0.47033530473709106 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 0.04166984558105469 0.21605446934700012 0.0 0.0 0.999969482421875 0.3982289433479309 0.47411829233169556 0 1.0 0 0.0 0 0.0 0 0.0 1.4880144596099854 0.0398942232131958 0.21605446934700012 0.0 0.0 1.0 0.5273305177688599 0.46256983280181885 0 1.0 0 0.0 0 0.0 0 0.0 1.4765570163726807 0.04315118491649628 0.21605446934700012 0.0 0.0 1.0 0.520378828048706 0.4664573073387146 0 1.0 0 0.0 0 0.0 0 0.0 1.2695271968841553 0.034530818462371826 0.21605446934700012 0.0 0.0 1.0 0.39919033646583557 0.46632468700408936 0 1.0 0 0.0 0 0.0 0 0.0 1.4880144596099854 0.0398942232131958 0.21605446934700012 0.0 0.0 1.0 0.5273305177688599 0.46256983280181885 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 0.04166984558105469 0.21605446934700012 0.0 0.0 0.999969482421875 0.3982289433479309 0.47411829233169556 0 1.0 0 0.0 0 0.0 0 0.0 1.2695271968841553 0.034530818462371826 0.21605446934700012 0.0 0.0 1.0 0.39919033646583557 0.46632468700408936 0 1.0 0 0.0 0 0.0 0 0.0 1.4988129138946533 0.036525383591651917 0.21605446934700012 0.0 0.0 1.0 0.5337929725646973 0.45867598056793213 0 1.0 0 0.0 0 0.0 0 0.0 1.4880144596099854 0.0398942232131958 0.21605446934700012 0.0 0.0 1.0 0.5273305177688599 0.46256983280181885 0 1.0 0 0.0 0 0.0 0 0.0 1.2695271968841553 0.034530818462371826 0.21605446934700012 0.0 0.0 1.0 0.39919033646583557 0.46632468700408936 0 1.0 0 0.0 0 0.0 0 0.0 1.5089523792266846 0.03304465115070343 0.21605446934700012 0.0 0.0 1.0 0.5397717952728271 0.45477455854415894 0 1.0 0 0.0 0 0.0 0 0.0 1.4988129138946533 0.036525383591651917 0.21605446934700012 0.0 0.0 1.0 0.5337929725646973 0.45867598056793213 0 1.0 0 0.0 0 0.0 0 0.0 1.2735114097595215 0.027717724442481995 0.21605446934700012 0.0 0.0 1.0 0.40048789978027344 0.4586907625198364 0 1.0 0 0.0 0 0.0 0 0.0 1.5089523792266846 0.03304465115070343 0.21605446934700012 0.0 0.0 1.0 0.5397717952728271 0.45477455854415894 0 1.0 0 0.0 0 0.0 0 0.0 1.2695271968841553 0.034530818462371826 0.21605446934700012 0.0 0.0 1.0 0.39919033646583557 0.46632468700408936 0 1.0 0 0.0 0 0.0 0 0.0 1.2735114097595215 0.027717724442481995 0.21605446934700012 0.0 0.0 1.0 0.40048789978027344 0.4586907625198364 0 1.0 0 0.0 0 0.0 0 0.0 1.518432855606079 0.029452025890350342 0.21605446934700012 0.0 0.0 1.0 0.5452778935432434 0.45086079835891724 0 1.0 0 0.0 0 0.0 0 0.0 1.5089523792266846 0.03304465115070343 0.21605446934700012 0.0 0.0 1.0 0.5397717952728271 0.45477455854415894 0 1.0 0 0.0 0 0.0 0 0.0 1.2735114097595215 0.027717724442481995 0.21605446934700012 0.0 0.0 1.0 0.40048789978027344 0.4586907625198364 0 1.0 0 0.0 0 0.0 0 0.0 1.5272538661956787 0.02574750781059265 0.21605446934700012 0.0 0.0 1.0 0.550325870513916 0.4469272494316101 0 1.0 0 0.0 0 0.0 0 0.0 1.518432855606079 0.029452025890350342 0.21605446934700012 0.0 0.0 1.0 0.5452778935432434 0.45086079835891724 0 1.0 0 0.0 0 0.0 0 0.0 1.2781085968017578 0.021230563521385193 0.21605446934700012 0.0 0.0 1.0 0.4021371603012085 0.45121073722839355 0 1.0 0 0.0 0 0.0 0 0.0 1.5272538661956787 0.02574750781059265 0.21605446934700012 0.0 0.0 1.0 0.550325870513916 0.4469272494316101 0 1.0 0 0.0 0 0.0 0 0.0 1.2735114097595215 0.027717724442481995 0.21605446934700012 0.0 0.0 1.0 0.40048789978027344 0.4586907625198364 0 1.0 0 0.0 0 0.0 0 0.0 1.2781085968017578 0.021230563521385193 0.21605446934700012 0.0 0.0 1.0 0.4021371603012085 0.45121073722839355 0 1.0 0 0.0 0 0.0 0 0.0 1.5354154109954834 0.02193109691143036 0.21605446934700012 0.0 0.0 1.0 0.5549329519271851 0.44296425580978394 0 1.0 0 0.0 0 0.0 0 0.0 1.5272538661956787 0.02574750781059265 0.21605446934700012 0.0 0.0 1.0 0.550325870513916 0.4469272494316101 0 1.0 0 0.0 0 0.0 0 0.0 1.2781085968017578 0.021230563521385193 0.21605446934700012 0.0 0.0 1.0 0.4021371603012085 0.45121073722839355 0 1.0 0 0.0 0 0.0 0 0.0 1.5429184436798096 0.018002808094024658 0.21605446934700012 0.0 0.0 1.0 0.5591180324554443 0.4389606714248657 0 1.0 0 0.0 0 0.0 0 0.0 1.5354154109954834 0.02193109691143036 0.21605446934700012 0.0 0.0 1.0 0.5549329519271851 0.44296425580978394 0 1.0 0 0.0 0 0.0 0 0.0 1.2833187580108643 0.015069350600242615 0.21605446934700012 0.0 0.0 1.0 0.404155969619751 0.4438803195953369 0 1.0 0 0.0 0 0.0 0 0.0 1.5429184436798096 0.018002808094024658 0.21605446934700012 0.0 0.0 1.0 0.5591180324554443 0.4389606714248657 0 1.0 0 0.0 0 0.0 0 0.0 1.2781085968017578 0.021230563521385193 0.21605446934700012 0.0 0.0 1.0 0.4021371603012085 0.45121073722839355 0 1.0 0 0.0 0 0.0 0 0.0 1.2833187580108643 0.015069350600242615 0.21605446934700012 0.0 0.0 1.0 0.404155969619751 0.4438803195953369 0 1.0 0 0.0 0 0.0 0 0.0 1.5497620105743408 0.013962626457214355 0.21605446934700012 0.0 0.0 1.0 0.5628992319107056 0.4349040985107422 0 1.0 0 0.0 0 0.0 0 0.0 1.5429184436798096 0.018002808094024658 0.21605446934700012 0.0 0.0 1.0 0.5591180324554443 0.4389606714248657 0 1.0 0 0.0 0 0.0 0 0.0 1.2891418933868408 0.009234070777893066 0.21605446934700012 0.0 0.0 0.999969482421875 0.4065644145011902 0.43669772148132324 0 1.0 0 0.0 0 0.0 0 0.0 1.5497620105743408 0.013962626457214355 0.21605446934700012 0.0 0.0 1.0 0.5628992319107056 0.4349040985107422 0 1.0 0 0.0 0 0.0 0 0.0 1.2833187580108643 0.015069350600242615 0.21605446934700012 0.0 0.0 1.0 0.404155969619751 0.4438803195953369 0 1.0 0 0.0 0 0.0 0 0.0 1.2891418933868408 0.009234070777893066 0.21605446934700012 0.0 0.0 0.999969482421875 0.4065644145011902 0.43669772148132324 0 1.0 0 0.0 0 0.0 0 0.0 1.5559461116790771 0.00981055200099945 0.21605446934700012 0.0 0.0 1.0 0.5662946105003357 0.43078118562698364 0 1.0 0 0.0 0 0.0 0 0.0 1.5497620105743408 0.013962626457214355 0.21605446934700012 0.0 0.0 1.0 0.5628992319107056 0.4349040985107422 0 1.0 0 0.0 0 0.0 0 0.0 1.2891418933868408 0.009234070777893066 0.21605446934700012 0.0 0.0 0.999969482421875 0.4065644145011902 0.43669772148132324 0 1.0 0 0.0 0 0.0 0 0.0 1.5614712238311768 0.005546584725379944 0.21605446934700012 0.0 0.0 1.0 0.5693216323852539 0.4265783429145813 0 1.0 0 0.0 0 0.0 0 0.0 1.5559461116790771 0.00981055200099945 0.21605446934700012 0.0 0.0 1.0 0.5662946105003357 0.43078118562698364 0 1.0 0 0.0 0 0.0 0 0.0 1.2955777645111084 0.0037247389554977417 0.21605446934700012 0.0 0.0 1.0 0.40938490629196167 0.42966437339782715 0 1.0 0 0.0 0 0.0 0 0.0 1.5614712238311768 0.005546584725379944 0.21605446934700012 0.0 0.0 1.0 0.5693216323852539 0.4265783429145813 0 1.0 0 0.0 0 0.0 0 0.0 1.2891418933868408 0.009234070777893066 0.21605446934700012 0.0 0.0 0.999969482421875 0.4065644145011902 0.43669772148132324 0 1.0 0 0.0 0 0.0 0 0.0 1.2955777645111084 0.0037247389554977417 0.21605446934700012 0.0 0.0 1.0 0.40938490629196167 0.42966437339782715 0 1.0 0 0.0 0 0.0 0 0.0 1.5663940906524658 0.0010247975587844849 0.21605446934700012 0.0 0.0 0.999969482421875 0.5720328688621521 0.42212748527526855 0 1.0 0 0.0 0 0.0 0 0.0 1.5614712238311768 0.005546584725379944 0.21605446934700012 0.0 0.0 1.0 0.5693216323852539 0.4265783429145813 0 1.0 0 0.0 0 0.0 0 0.0 1.3026268482208252 -0.0014586597681045532 0.21605446934700012 0.0 0.0 1.0 0.412642240524292 0.4227854609489441 0 1.0 0 0.0 0 0.0 0 0.0 1.5663940906524658 0.0010247975587844849 0.21605446934700012 0.0 0.0 0.999969482421875 0.5720328688621521 0.42212748527526855 0 1.0 0 0.0 0 0.0 0 0.0 1.2955777645111084 0.0037247389554977417 0.21605446934700012 0.0 0.0 1.0 0.40938490629196167 0.42966437339782715 0 1.0 0 0.0 0 0.0 0 0.0 1.3026268482208252 -0.0014586597681045532 0.21605446934700012 0.0 0.0 1.0 0.412642240524292 0.4227854609489441 0 1.0 0 0.0 0 0.0 0 0.0 1.5708892345428467 -0.0037840157747268677 0.21605446934700012 0.0 0.0 1.0 0.5745283365249634 0.4174097776412964 0 1.0 0 0.0 0 0.0 0 0.0 1.5663940906524658 0.0010247975587844849 0.21605446934700012 0.0 0.0 0.999969482421875 0.5720328688621521 0.42212748527526855 0 1.0 0 0.0 0 0.0 0 0.0 1.3085453510284424 -0.005109667778015137 0.21605446934700012 0.0 0.0 1.0 0.41551315784454346 0.4177248477935791 0 1.0 0 0.0 0 0.0 0 0.0 1.5708892345428467 -0.0037840157747268677 0.21605446934700012 0.0 0.0 1.0 0.5745283365249634 0.4174097776412964 0 1.0 0 0.0 0 0.0 0 0.0 1.3026268482208252 -0.0014586597681045532 0.21605446934700012 0.0 0.0 1.0 0.412642240524292 0.4227854609489441 0 1.0 0 0.0 0 0.0 0 0.0 1.3085453510284424 -0.005109667778015137 0.21605446934700012 0.0 0.0 1.0 0.41551315784454346 0.4177248477935791 0 1.0 0 0.0 0 0.0 0 0.0 1.5749561786651611 -0.008879855275154114 0.21605446934700012 0.0 0.0 1.0 0.5768167972564697 0.41242218017578125 0 1.0 0 0.0 0 0.0 0 0.0 1.5708892345428467 -0.0037840157747268677 0.21605446934700012 0.0 0.0 1.0 0.5745283365249634 0.4174097776412964 0 1.0 0 0.0 0 0.0 0 0.0 1.3156745433807373 -0.00882391631603241 0.21605446934700012 0.0 0.0 1.0 0.4191212058067322 0.41234201192855835 0 1.0 0 0.0 0 0.0 0 0.0 1.5749561786651611 -0.008879855275154114 0.21605446934700012 0.0 0.0 1.0 0.5768167972564697 0.41242218017578125 0 1.0 0 0.0 0 0.0 0 0.0 1.3085453510284424 -0.005109667778015137 0.21605446934700012 0.0 0.0 1.0 0.41551315784454346 0.4177248477935791 0 1.0 0 0.0 0 0.0 0 0.0 1.3240149021148682 -0.012601405382156372 0.21605446934700012 0.0 0.0 1.0 0.42351773381233215 0.4066343903541565 0 1.0 0 0.0 0 0.0 0 0.0 1.5749561786651611 -0.008879855275154114 0.21605446934700012 0.0 0.0 1.0 0.5768167972564697 0.41242218017578125 0 1.0 0 0.0 0 0.0 0 0.0 1.3156745433807373 -0.00882391631603241 0.21605446934700012 0.0 0.0 1.0 0.4191212058067322 0.41234201192855835 0 1.0 0 0.0 0 0.0 0 0.0 1.3240149021148682 -0.012601405382156372 0.21605446934700012 0.0 0.0 1.0 0.42351773381233215 0.4066343903541565 0 1.0 0 0.0 0 0.0 0 0.0 1.5785949230194092 -0.01426270604133606 0.21605446934700012 0.0 0.0 1.0 0.5789067149162292 0.4071614742279053 0 1.0 0 0.0 0 0.0 0 0.0 1.5749561786651611 -0.008879855275154114 0.21605446934700012 0.0 0.0 1.0 0.5768167972564697 0.41242218017578125 0 1.0 0 0.0 0 0.0 0 0.0 1.3335669040679932 -0.016442134976387024 0.21605446934700012 0.0 0.0 0.999969482421875 0.42876115441322327 0.40061187744140625 0 1.0 0 0.0 0 0.0 0 0.0 1.5785949230194092 -0.01426270604133606 0.21605446934700012 0.0 0.0 1.0 0.5789067149162292 0.4071614742279053 0 1.0 0 0.0 0 0.0 0 0.0 1.3240149021148682 -0.012601405382156372 0.21605446934700012 0.0 0.0 1.0 0.42351773381233215 0.4066343903541565 0 1.0 0 0.0 0 0.0 0 0.0 1.3335669040679932 -0.016442134976387024 0.21605446934700012 0.0 0.0 0.999969482421875 0.42876115441322327 0.40061187744140625 0 1.0 0 0.0 0 0.0 0 0.0 1.581805944442749 -0.0199325829744339 0.21605446934700012 0.0 0.0 1.0 0.5808056592941284 0.4016239047050476 0 1.0 0 0.0 0 0.0 0 0.0 1.5785949230194092 -0.01426270604133606 0.21605446934700012 0.0 0.0 1.0 0.5789067149162292 0.4071614742279053 0 1.0 0 0.0 0 0.0 0 0.0 1.344330072402954 -0.020346105098724365 0.21605446934700012 0.0 0.0 1.0 0.4349140524864197 0.3943028450012207 0 1.0 0 0.0 0 0.0 0 0.0 1.581805944442749 -0.0199325829744339 0.21605446934700012 0.0 0.0 1.0 0.5808056592941284 0.4016239047050476 0 1.0 0 0.0 0 0.0 0 0.0 1.3335669040679932 -0.016442134976387024 0.21605446934700012 0.0 0.0 0.999969482421875 0.42876115441322327 0.40061187744140625 0 1.0 0 0.0 0 0.0 0 0.0 1.344330072402954 -0.020346105098724365 0.21605446934700012 0.0 0.0 1.0 0.4349140524864197 0.3943028450012207 0 1.0 0 0.0 0 0.0 0 0.0 1.5845882892608643 -0.025889486074447632 0.21605446934700012 0.0 0.0 1.0 0.5825195908546448 0.3958056569099426 0 1.0 0 0.0 0 0.0 0 0.0 1.581805944442749 -0.0199325829744339 0.21605446934700012 0.0 0.0 1.0 0.5808056592941284 0.4016239047050476 0 1.0 0 0.0 0 0.0 0 0.0 1.3563048839569092 -0.024313315749168396 0.21605446934700012 0.0 0.0 0.999969482421875 0.44204047322273254 0.38775986433029175 0 1.0 0 0.0 0 0.0 0 0.0 1.5845882892608643 -0.025889486074447632 0.21605446934700012 0.0 0.0 1.0 0.5825195908546448 0.3958056569099426 0 1.0 0 0.0 0 0.0 0 0.0 1.344330072402954 -0.020346105098724365 0.21605446934700012 0.0 0.0 1.0 0.4349140524864197 0.3943028450012207 0 1.0 0 0.0 0 0.0 0 0.0 1.3694908618927002 -0.028343766927719116 0.21605446934700012 0.0 0.0 1.0 0.4501991868019104 0.38106727600097656 0 1.0 0 0.0 0 0.0 0 0.0 1.5845882892608643 -0.025889486074447632 0.21605446934700012 0.0 0.0 1.0 0.5825195908546448 0.3958056569099426 0 1.0 0 0.0 0 0.0 0 0.0 1.3563048839569092 -0.024313315749168396 0.21605446934700012 0.0 0.0 0.999969482421875 0.44204047322273254 0.38775986433029175 0 1.0 0 0.0 0 0.0 0 0.0 1.3694908618927002 -0.028343766927719116 0.21605446934700012 0.0 0.0 1.0 0.4501991868019104 0.38106727600097656 0 1.0 0 0.0 0 0.0 0 0.0 1.5869429111480713 -0.032133400440216064 0.21605446934700012 0.0 0.0 0.999969482421875 0.5840545892715454 0.38970285654067993 0 1.0 0 0.0 0 0.0 0 0.0 1.5845882892608643 -0.025889486074447632 0.21605446934700012 0.0 0.0 1.0 0.5825195908546448 0.3958056569099426 0 1.0 0 0.0 0 0.0 0 0.0 1.3838880062103271 -0.032437458634376526 0.21605446934700012 0.0 0.0 0.999969482421875 0.4594356119632721 0.37434643507003784 0 1.0 0 0.0 0 0.0 0 0.0 1.5869429111480713 -0.032133400440216064 0.21605446934700012 0.0 0.0 0.999969482421875 0.5840545892715454 0.38970285654067993 0 1.0 0 0.0 0 0.0 0 0.0 1.3694908618927002 -0.028343766927719116 0.21605446934700012 0.0 0.0 1.0 0.4501991868019104 0.38106727600097656 0 1.0 0 0.0 0 0.0 0 0.0 1.3838880062103271 -0.032437458634376526 0.21605446934700012 0.0 0.0 0.999969482421875 0.4594356119632721 0.37434643507003784 0 1.0 0 0.0 0 0.0 0 0.0 1.588869333267212 -0.03866434097290039 0.21605446934700012 0.0 0.0 1.0 0.5854150056838989 0.38331174850463867 0 1.0 0 0.0 0 0.0 0 0.0 1.5869429111480713 -0.032133400440216064 0.21605446934700012 0.0 0.0 0.999969482421875 0.5840545892715454 0.38970285654067993 0 1.0 0 0.0 0 0.0 0 0.0 1.3994967937469482 -0.036594390869140625 0.21605446934700012 0.0 0.0 1.0 0.46977055072784424 0.3677605390548706 0 1.0 0 0.0 0 0.0 0 0.0 1.588869333267212 -0.03866434097290039 0.21605446934700012 0.0 0.0 1.0 0.5854150056838989 0.38331174850463867 0 1.0 0 0.0 0 0.0 0 0.0 1.3838880062103271 -0.032437458634376526 0.21605446934700012 0.0 0.0 0.999969482421875 0.4594356119632721 0.37434643507003784 0 1.0 0 0.0 0 0.0 0 0.0 1.4163167476654053 -0.040814563632011414 0.21605446934700012 0.0 0.0 0.999969482421875 0.4811851382255554 0.3615119457244873 0 1.0 0 0.0 0 0.0 0 0.0 1.588869333267212 -0.03866434097290039 0.21605446934700012 0.0 0.0 1.0 0.5854150056838989 0.38331174850463867 0 1.0 0 0.0 0 0.0 0 0.0 1.3994967937469482 -0.036594390869140625 0.21605446934700012 0.0 0.0 1.0 0.46977055072784424 0.3677605390548706 0 1.0 0 0.0 0 0.0 0 0.0 1.4163167476654053 -0.040814563632011414 0.21605446934700012 0.0 0.0 0.999969482421875 0.4811851382255554 0.3615119457244873 0 1.0 0 0.0 0 0.0 0 0.0 1.5903680324554443 -0.04548230767250061 0.21605446934700012 0.0 0.0 1.0 0.5866047143936157 0.37662893533706665 0 1.0 0 0.0 0 0.0 0 0.0 1.588869333267212 -0.03866434097290039 0.21605446934700012 0.0 0.0 1.0 0.5854150056838989 0.38331174850463867 0 1.0 0 0.0 0 0.0 0 0.0 1.4343478679656982 -0.045097991824150085 0.21605446934700012 0.0 0.0 1.0 0.4936075210571289 0.35583263635635376 0 1.0 0 0.0 0 0.0 0 0.0 1.5903680324554443 -0.04548230767250061 0.21605446934700012 0.0 0.0 1.0 0.5866047143936157 0.37662893533706665 0 1.0 0 0.0 0 0.0 0 0.0 1.4163167476654053 -0.040814563632011414 0.21605446934700012 0.0 0.0 0.999969482421875 0.4811851382255554 0.3615119457244873 0 1.0 0 0.0 0 0.0 0 0.0 1.4535901546478271 -0.04944466054439545 0.21605446934700012 0.0 0.0 1.0 0.5069013833999634 0.3509639501571655 0 1.0 0 0.0 0 0.0 0 0.0 1.5903680324554443 -0.04548230767250061 0.21605446934700012 0.0 0.0 1.0 0.5866047143936157 0.37662893533706665 0 1.0 0 0.0 0 0.0 0 0.0 1.4343478679656982 -0.045097991824150085 0.21605446934700012 0.0 0.0 1.0 0.4936075210571289 0.35583263635635376 0 1.0 0 0.0 0 0.0 0 0.0 1.4535901546478271 -0.04944466054439545 0.21605446934700012 0.0 0.0 1.0 0.5069013833999634 0.3509639501571655 0 1.0 0 0.0 0 0.0 0 0.0 1.5914380550384521 -0.05258728563785553 0.21605446934700012 0.0 0.0 1.0 0.5876259803771973 0.36965125799179077 0 1.0 0 0.0 0 0.0 0 0.0 1.5903680324554443 -0.04548230767250061 0.21605446934700012 0.0 0.0 1.0 0.5866047143936157 0.37662893533706665 0 1.0 0 0.0 0 0.0 0 0.0 1.4577252864837646 -0.05044436454772949 0.21605446934700012 0.0 0.0 1.0 0.5097460150718689 0.3499676585197449 0 1.0 0 0.0 0 0.0 0 0.0 1.5914380550384521 -0.05258728563785553 0.21605446934700012 0.0 0.0 1.0 0.5876259803771973 0.36965125799179077 0 1.0 0 0.0 0 0.0 0 0.0 1.4535901546478271 -0.04944466054439545 0.21605446934700012 0.0 0.0 1.0 0.5069013833999634 0.3509639501571655 0 1.0 0 0.0 0 0.0 0 0.0 1.4616072177886963 -0.05145867168903351 0.21605446934700012 0.0 0.0 0.999969482421875 0.512410044670105 0.34898412227630615 0 1.0 0 0.0 0 0.0 0 0.0 1.5914380550384521 -0.05258728563785553 0.21605446934700012 0.0 0.0 1.0 0.5876259803771973 0.36965125799179077 0 1.0 0 0.0 0 0.0 0 0.0 1.4577252864837646 -0.05044436454772949 0.21605446934700012 0.0 0.0 1.0 0.5097460150718689 0.3499676585197449 0 1.0 0 0.0 0 0.0 0 0.0 1.4652364253997803 -0.0524875670671463 0.21605446934700012 0.0 0.0 0.999969482421875 0.5148946046829224 0.34800630807876587 0 1.0 0 0.0 0 0.0 0 0.0 1.5914380550384521 -0.05258728563785553 0.21605446934700012 0.0 0.0 1.0 0.5876259803771973 0.36965125799179077 0 1.0 0 0.0 0 0.0 0 0.0 1.4616072177886963 -0.05145867168903351 0.21605446934700012 0.0 0.0 0.999969482421875 0.512410044670105 0.34898412227630615 0 1.0 0 0.0 0 0.0 0 0.0 1.4686124324798584 -0.05353105068206787 0.21605446934700012 0.0 0.0 1.0 0.5172003507614136 0.3470277190208435 0 1.0 0 0.0 0 0.0 0 0.0 1.5914380550384521 -0.05258728563785553 0.21605446934700012 0.0 0.0 1.0 0.5876259803771973 0.36965125799179077 0 1.0 0 0.0 0 0.0 0 0.0 1.4652364253997803 -0.0524875670671463 0.21605446934700012 0.0 0.0 0.999969482421875 0.5148946046829224 0.34800630807876587 0 1.0 0 0.0 0 0.0 0 0.0 1.4686124324798584 -0.05353105068206787 0.21605446934700012 0.0 0.0 1.0 0.5172003507614136 0.3470277190208435 0 1.0 0 0.0 0 0.0 0 0.0 1.5920803546905518 -0.05997928977012634 0.21605446934700012 0.0 0.0 1.0 0.5884809494018555 0.36237651109695435 0 1.0 0 0.0 0 0.0 0 0.0 1.5914380550384521 -0.05258728563785553 0.21605446934700012 0.0 0.0 1.0 0.5876259803771973 0.36965125799179077 0 1.0 0 0.0 0 0.0 0 0.0 1.4717357158660889 -0.05458913743495941 0.21605446934700012 0.0 0.0 1.0 0.5193288922309875 0.3460422158241272 0 1.0 0 0.0 0 0.0 0 0.0 1.5920803546905518 -0.05997928977012634 0.21605446934700012 0.0 0.0 1.0 0.5884809494018555 0.36237651109695435 0 1.0 0 0.0 0 0.0 0 0.0 1.4686124324798584 -0.05353105068206787 0.21605446934700012 0.0 0.0 1.0 0.5172003507614136 0.3470277190208435 0 1.0 0 0.0 0 0.0 0 0.0 1.4746057987213135 -0.05566181242465973 0.21605446934700012 0.0 0.0 1.0 0.5212814807891846 0.34504401683807373 0 1.0 0 0.0 0 0.0 0 0.0 1.5920803546905518 -0.05997928977012634 0.21605446934700012 0.0 0.0 1.0 0.5884809494018555 0.36237651109695435 0 1.0 0 0.0 0 0.0 0 0.0 1.4717357158660889 -0.05458913743495941 0.21605446934700012 0.0 0.0 1.0 0.5193288922309875 0.3460422158241272 0 1.0 0 0.0 0 0.0 0 0.0 1.4772231578826904 -0.05674909055233002 0.21605446934700012 0.0 0.0 1.0 0.5230599045753479 0.3440280556678772 0 1.0 0 0.0 0 0.0 0 0.0 1.5920803546905518 -0.05997928977012634 0.21605446934700012 0.0 0.0 1.0 0.5884809494018555 0.36237651109695435 0 1.0 0 0.0 0 0.0 0 0.0 1.4746057987213135 -0.05566181242465973 0.21605446934700012 0.0 0.0 1.0 0.5212814807891846 0.34504401683807373 0 1.0 0 0.0 0 0.0 0 0.0 1.4795873165130615 -0.05785095691680908 0.21605446934700012 0.0 0.0 1.0 0.5246654152870178 0.34298932552337646 0 1.0 0 0.0 0 0.0 0 0.0 1.5920803546905518 -0.05997928977012634 0.21605446934700012 0.0 0.0 1.0 0.5884809494018555 0.36237651109695435 0 1.0 0 0.0 0 0.0 0 0.0 1.4772231578826904 -0.05674909055233002 0.21605446934700012 0.0 0.0 1.0 0.5230599045753479 0.3440280556678772 0 1.0 0 0.0 0 0.0 0 0.0 1.481698751449585 -0.05896741896867752 0.21605446934700012 0.0 0.0 0.999969482421875 0.5260999202728271 0.34192365407943726 0 1.0 0 0.0 0 0.0 0 0.0 1.5920803546905518 -0.05997928977012634 0.21605446934700012 0.0 0.0 1.0 0.5884809494018555 0.36237651109695435 0 1.0 0 0.0 0 0.0 0 0.0 1.4795873165130615 -0.05785095691680908 0.21605446934700012 0.0 0.0 1.0 0.5246654152870178 0.34298932552337646 0 1.0 0 0.0 0 0.0 0 0.0 1.4835569858551025 -0.06009847670793533 0.21605446934700012 0.0 0.0 0.999969482421875 0.5273644328117371 0.3408268690109253 0 1.0 0 0.0 0 0.0 0 0.0 1.5920803546905518 -0.05997928977012634 0.21605446934700012 0.0 0.0 1.0 0.5884809494018555 0.36237651109695435 0 1.0 0 0.0 0 0.0 0 0.0 1.481698751449585 -0.05896741896867752 0.21605446934700012 0.0 0.0 0.999969482421875 0.5260999202728271 0.34192365407943726 0 1.0 0 0.0 0 0.0 0 0.0 1.4835569858551025 -0.06009847670793533 0.21605446934700012 0.0 0.0 0.999969482421875 0.5273644328117371 0.3408268690109253 0 1.0 0 0.0 0 0.0 0 0.0 1.592294454574585 -0.06765832006931305 0.21605446934700012 0.0 0.0 1.0 0.5891700387001038 0.35480350255966187 0 1.0 0 0.0 0 0.0 0 0.0 1.5920803546905518 -0.05997928977012634 0.21605446934700012 0.0 0.0 1.0 0.5884809494018555 0.36237651109695435 0 1.0 0 0.0 0 0.0 0 0.0 1.4851624965667725 -0.06124413013458252 0.21605446934700012 0.0 0.0 1.0 0.528460681438446 0.3396955132484436 0 1.0 0 0.0 0 0.0 0 0.0 1.592294454574585 -0.06765832006931305 0.21605446934700012 0.0 0.0 1.0 0.5891700387001038 0.35480350255966187 0 1.0 0 0.0 0 0.0 0 0.0 1.4835569858551025 -0.06009847670793533 0.21605446934700012 0.0 0.0 0.999969482421875 0.5273644328117371 0.3408268690109253 0 1.0 0 0.0 0 0.0 0 0.0 1.4865148067474365 -0.06240437924861908 0.21605446934700012 0.0 0.0 0.999969482421875 0.5293893814086914 0.33852624893188477 0 1.0 0 0.0 0 0.0 0 0.0 1.592294454574585 -0.06765832006931305 0.21605446934700012 0.0 0.0 1.0 0.5891700387001038 0.35480350255966187 0 1.0 0 0.0 0 0.0 0 0.0 1.4851624965667725 -0.06124413013458252 0.21605446934700012 0.0 0.0 1.0 0.528460681438446 0.3396955132484436 0 1.0 0 0.0 0 0.0 0 0.0 1.4876339435577393 -0.06365705281496048 0.21605446934700012 0.0 0.0 1.0 0.5301671624183655 0.3372293710708618 0 1.0 0 0.0 0 0.0 0 0.0 1.592294454574585 -0.06765832006931305 0.21605446934700012 0.0 0.0 1.0 0.5891700387001038 0.35480350255966187 0 1.0 0 0.0 0 0.0 0 0.0 1.4865148067474365 -0.06240437924861908 0.21605446934700012 0.0 0.0 0.999969482421875 0.5293893814086914 0.33852624893188477 0 1.0 0 0.0 0 0.0 0 0.0 1.2448337078094482 -0.0778159350156784 0.21605446934700012 0.0 0.0 1.0 0.3779359459877014 0.35555046796798706 0 1.0 0 0.0 0 0.0 0 0.0 1.3447487354278564 -0.06744548678398132 0.21605446934700012 0.0 0.0 1.0 0.4319748282432556 0.3392902612686157 0 1.0 0 0.0 0 0.0 0 0.0 1.3436076641082764 -0.06275463849306107 0.21605446934700012 0.0 0.0 1.0 0.4315911829471588 0.34482574462890625 0 1.0 0 0.0 0 0.0 0 0.0 1.4886553287506104 -0.06496324390172958 0.21605446934700012 0.0 0.0 0.999969482421875 0.5308826565742493 0.33586663007736206 0 1.0 0 0.0 0 0.0 0 0.0 1.592294454574585 -0.06765832006931305 0.21605446934700012 0.0 0.0 1.0 0.5891700387001038 0.35480350255966187 0 1.0 0 0.0 0 0.0 0 0.0 1.4876339435577393 -0.06365705281496048 0.21605446934700012 0.0 0.0 1.0 0.5301671624183655 0.3372293710708618 0 1.0 0 0.0 0 0.0 0 0.0 1.4895799160003662 -0.0663229450583458 0.21605446934700012 0.0 0.0 1.0 0.5315366387367249 0.3344380259513855 0 1.0 0 0.0 0 0.0 0 0.0 1.592294454574585 -0.06765832006931305 0.21605446934700012 0.0 0.0 1.0 0.5891700387001038 0.35480350255966187 0 1.0 0 0.0 0 0.0 0 0.0 1.4886553287506104 -0.06496324390172958 0.21605446934700012 0.0 0.0 0.999969482421875 0.5308826565742493 0.33586663007736206 0 1.0 0 0.0 0 0.0 0 0.0 1.4904067516326904 -0.06773615628480911 0.21605446934700012 0.0 0.0 1.0 0.5321288108825684 0.33294278383255005 0 1.0 0 0.0 0 0.0 0 0.0 1.592294454574585 -0.06765832006931305 0.21605446934700012 0.0 0.0 1.0 0.5891700387001038 0.35480350255966187 0 1.0 0 0.0 0 0.0 0 0.0 1.4895799160003662 -0.0663229450583458 0.21605446934700012 0.0 0.0 1.0 0.5315366387367249 0.3344380259513855 0 1.0 0 0.0 0 0.0 0 0.0 1.2448337078094482 -0.0778159350156784 0.21605446934700012 0.0 0.0 1.0 0.3779359459877014 0.35555046796798706 0 1.0 0 0.0 0 0.0 0 0.0 1.346069574356079 -0.07194417715072632 0.21605446934700012 0.0 0.0 1.0 0.4324910044670105 0.3339676856994629 0 1.0 0 0.0 0 0.0 0 0.0 1.3447487354278564 -0.06744548678398132 0.21605446934700012 0.0 0.0 1.0 0.4319748282432556 0.3392902612686157 0 1.0 0 0.0 0 0.0 0 0.0 1.4904067516326904 -0.06773615628480911 0.21605446934700012 0.0 0.0 1.0 0.5321288108825684 0.33294278383255005 0 1.0 0 0.0 0 0.0 0 0.0 1.5919973850250244 -0.07608164846897125 0.21605446934700012 0.0 0.0 1.0 0.5896905660629272 0.34646421670913696 0 1.0 0 0.0 0 0.0 0 0.0 1.592294454574585 -0.06765832006931305 0.21605446934700012 0.0 0.0 1.0 0.5891700387001038 0.35480350255966187 0 1.0 0 0.0 0 0.0 0 0.0 1.4911367893218994 -0.06920288503170013 0.21605446934700012 0.0 0.0 0.999969482421875 0.5326599478721619 0.3313811421394348 0 1.0 0 0.0 0 0.0 0 0.0 1.5919973850250244 -0.07608164846897125 0.21605446934700012 0.0 0.0 1.0 0.5896905660629272 0.34646421670913696 0 1.0 0 0.0 0 0.0 0 0.0 1.4904067516326904 -0.06773615628480911 0.21605446934700012 0.0 0.0 1.0 0.5321288108825684 0.33294278383255005 0 1.0 0 0.0 0 0.0 0 0.0 1.4917690753936768 -0.07072312384843826 0.21605446934700012 0.0 0.0 1.0 0.5331296324729919 0.3297526240348816 0 1.0 0 0.0 0 0.0 0 0.0 1.5919973850250244 -0.07608164846897125 0.21605446934700012 0.0 0.0 1.0 0.5896905660629272 0.34646421670913696 0 1.0 0 0.0 0 0.0 0 0.0 1.4911367893218994 -0.06920288503170013 0.21605446934700012 0.0 0.0 0.999969482421875 0.5326599478721619 0.3313811421394348 0 1.0 0 0.0 0 0.0 0 0.0 1.4923040866851807 -0.0722968727350235 0.21605446934700012 0.0 0.0 1.0 0.5335382223129272 0.3280572295188904 0 1.0 0 0.0 0 0.0 0 0.0 1.5919973850250244 -0.07608164846897125 0.21605446934700012 0.0 0.0 1.0 0.5896905660629272 0.34646421670913696 0 1.0 0 0.0 0 0.0 0 0.0 1.4917690753936768 -0.07072312384843826 0.21605446934700012 0.0 0.0 1.0 0.5331296324729919 0.3297526240348816 0 1.0 0 0.0 0 0.0 0 0.0 1.2448337078094482 -0.0778159350156784 0.21605446934700012 0.0 0.0 1.0 0.3779359459877014 0.35555046796798706 0 1.0 0 0.0 0 0.0 0 0.0 1.3475701808929443 -0.07625070214271545 0.21605446934700012 0.0 0.0 1.0 0.4331422448158264 0.3288542628288269 0 1.0 0 0.0 0 0.0 0 0.0 1.346069574356079 -0.07194417715072632 0.21605446934700012 0.0 0.0 1.0 0.4324910044670105 0.3339676856994629 0 1.0 0 0.0 0 0.0 0 0.0 1.4927418231964111 -0.07392413169145584 0.21605446934700012 0.0 0.0 0.999969482421875 0.5338857173919678 0.3262949585914612 0 1.0 0 0.0 0 0.0 0 0.0 1.5919973850250244 -0.07608164846897125 0.21605446934700012 0.0 0.0 1.0 0.5896905660629272 0.34646421670913696 0 1.0 0 0.0 0 0.0 0 0.0 1.4923040866851807 -0.0722968727350235 0.21605446934700012 0.0 0.0 1.0 0.5335382223129272 0.3280572295188904 0 1.0 0 0.0 0 0.0 0 0.0 1.4930822849273682 -0.07560490816831589 0.21605446934700012 0.0 0.0 1.0 0.5341720581054688 0.3244657516479492 0 1.0 0 0.0 0 0.0 0 0.0 1.5919973850250244 -0.07608164846897125 0.21605446934700012 0.0 0.0 1.0 0.5896905660629272 0.34646421670913696 0 1.0 0 0.0 0 0.0 0 0.0 1.4927418231964111 -0.07392413169145584 0.21605446934700012 0.0 0.0 0.999969482421875 0.5338857173919678 0.3262949585914612 0 1.0 0 0.0 0 0.0 0 0.0 1.4933254718780518 -0.07733919471502304 0.21605446934700012 0.0 0.0 0.999969482421875 0.5343972444534302 0.3225697875022888 0 1.0 0 0.0 0 0.0 0 0.0 1.5919973850250244 -0.07608164846897125 0.21605446934700012 0.0 0.0 1.0 0.5896905660629272 0.34646421670913696 0 1.0 0 0.0 0 0.0 0 0.0 1.4930822849273682 -0.07560490816831589 0.21605446934700012 0.0 0.0 1.0 0.5341720581054688 0.3244657516479492 0 1.0 0 0.0 0 0.0 0 0.0 1.4933254718780518 -0.07733919471502304 0.21605446934700012 0.0 0.0 0.999969482421875 0.5343972444534302 0.3225697875022888 0 1.0 0 0.0 0 0.0 0 0.0 1.5911071300506592 -0.0843055248260498 0.21605446934700012 0.0 0.0 0.999969482421875 0.5899286270141602 0.33825957775115967 0 1.0 0 0.0 0 0.0 0 0.0 1.5919973850250244 -0.07608164846897125 0.21605446934700012 0.0 0.0 1.0 0.5896905660629272 0.34646421670913696 0 1.0 0 0.0 0 0.0 0 0.0 1.2448337078094482 -0.0778159350156784 0.21605446934700012 0.0 0.0 1.0 0.3779359459877014 0.35555046796798706 0 1.0 0 0.0 0 0.0 0 0.0 1.3492510318756104 -0.08036507666110992 0.21605446934700012 0.0 0.0 1.0 0.4339316487312317 0.3239462971687317 0 1.0 0 0.0 0 0.0 0 0.0 1.3475701808929443 -0.07625070214271545 0.21605446934700012 0.0 0.0 1.0 0.4331422448158264 0.3288542628288269 0 1.0 0 0.0 0 0.0 0 0.0 1.493471384048462 -0.0791269913315773 0.21605446934700012 0.0 0.0 1.0 0.534561038017273 0.3206070065498352 0 1.0 0 0.0 0 0.0 0 0.0 1.5911071300506592 -0.0843055248260498 0.21605446934700012 0.0 0.0 0.999969482421875 0.5899286270141602 0.33825957775115967 0 1.0 0 0.0 0 0.0 0 0.0 1.4933254718780518 -0.07733919471502304 0.21605446934700012 0.0 0.0 0.999969482421875 0.5343972444534302 0.3225697875022888 0 1.0 0 0.0 0 0.0 0 0.0 1.2473232746124268 -0.08647764474153519 0.21605446934700012 0.0 0.0 1.0 0.37815624475479126 0.34659135341644287 0 1.0 0 0.0 0 0.0 0 0.0 1.3492510318756104 -0.08036507666110992 0.21605446934700012 0.0 0.0 1.0 0.4339316487312317 0.3239462971687317 0 1.0 0 0.0 0 0.0 0 0.0 1.2448337078094482 -0.0778159350156784 0.21605446934700012 0.0 0.0 1.0 0.3779359459877014 0.35555046796798706 0 1.0 0 0.0 0 0.0 0 0.0 1.4935200214385986 -0.08096829801797867 0.21605446934700012 0.0 0.0 1.0 0.534663200378418 0.31857776641845703 0 1.0 0 0.0 0 0.0 0 0.0 1.5911071300506592 -0.0843055248260498 0.21605446934700012 0.0 0.0 0.999969482421875 0.5899286270141602 0.33825957775115967 0 1.0 0 0.0 0 0.0 0 0.0 1.493471384048462 -0.0791269913315773 0.21605446934700012 0.0 0.0 1.0 0.534561038017273 0.3206070065498352 0 1.0 0 0.0 0 0.0 0 0.0 1.2473232746124268 -0.08647764474153519 0.21605446934700012 0.0 0.0 1.0 0.37815624475479126 0.34659135341644287 0 1.0 0 0.0 0 0.0 0 0.0 1.3511121273040771 -0.08428728580474854 0.21605446934700012 0.0 0.0 1.0 0.43486201763153076 0.3192406892776489 0 1.0 0 0.0 0 0.0 0 0.0 1.3492510318756104 -0.08036507666110992 0.21605446934700012 0.0 0.0 1.0 0.4339316487312317 0.3239462971687317 0 1.0 0 0.0 0 0.0 0 0.0 1.49342942237854 -0.08366581052541733 0.21605446934700012 0.0 0.0 1.0 0.5347064137458801 0.3155938982963562 0 1.0 0 0.0 0 0.0 0 0.0 1.5911071300506592 -0.0843055248260498 0.21605446934700012 0.0 0.0 0.999969482421875 0.5899286270141602 0.33825957775115967 0 1.0 0 0.0 0 0.0 0 0.0 1.4935200214385986 -0.08096829801797867 0.21605446934700012 0.0 0.0 1.0 0.534663200378418 0.31857776641845703 0 1.0 0 0.0 0 0.0 0 0.0 1.493159532546997 -0.08627089112997055 0.21605446934700012 0.0 0.0 1.0 0.5346271991729736 0.31269872188568115 0 1.0 0 0.0 0 0.0 0 0.0 1.5911071300506592 -0.0843055248260498 0.21605446934700012 0.0 0.0 0.999969482421875 0.5899286270141602 0.33825957775115967 0 1.0 0 0.0 0 0.0 0 0.0 1.49342942237854 -0.08366581052541733 0.21605446934700012 0.0 0.0 1.0 0.5347064137458801 0.3155938982963562 0 1.0 0 0.0 0 0.0 0 0.0 1.2473232746124268 -0.08647764474153519 0.21605446934700012 0.0 0.0 1.0 0.37815624475479126 0.34659135341644287 0 1.0 0 0.0 0 0.0 0 0.0 1.3531529903411865 -0.08801734447479248 0.21605446934700012 0.0 0.0 1.0 0.435935914516449 0.31473487615585327 0 1.0 0 0.0 0 0.0 0 0.0 1.3511121273040771 -0.08428728580474854 0.21605446934700012 0.0 0.0 1.0 0.43486201763153076 0.3192406892776489 0 1.0 0 0.0 0 0.0 0 0.0 1.493159532546997 -0.08627089112997055 0.21605446934700012 0.0 0.0 1.0 0.5346271991729736 0.31269872188568115 0 1.0 0 0.0 0 0.0 0 0.0 1.5896236896514893 -0.0923299491405487 0.21605446934700012 0.0 0.0 1.0 0.5898779034614563 0.3301680088043213 0 1.0 0 0.0 0 0.0 0 0.0 1.5911071300506592 -0.0843055248260498 0.21605446934700012 0.0 0.0 0.999969482421875 0.5899286270141602 0.33825957775115967 0 1.0 0 0.0 0 0.0 0 0.0 1.4927098751068115 -0.08878353983163834 0.21605446934700012 0.0 0.0 1.0 0.5344240665435791 0.30988991260528564 0 1.0 0 0.0 0 0.0 0 0.0 1.5896236896514893 -0.0923299491405487 0.21605446934700012 0.0 0.0 1.0 0.5898779034614563 0.3301680088043213 0 1.0 0 0.0 0 0.0 0 0.0 1.493159532546997 -0.08627089112997055 0.21605446934700012 0.0 0.0 1.0 0.5346271991729736 0.31269872188568115 0 1.0 0 0.0 0 0.0 0 0.0 1.2502384185791016 -0.09483286738395691 0.21605446934700012 0.0 0.0 0.999969482421875 0.3786007761955261 0.33784085512161255 0 1.0 0 0.0 0 0.0 0 0.0 1.3531529903411865 -0.08801734447479248 0.21605446934700012 0.0 0.0 1.0 0.435935914516449 0.31473487615585327 0 1.0 0 0.0 0 0.0 0 0.0 1.2473232746124268 -0.08647764474153519 0.21605446934700012 0.0 0.0 1.0 0.37815624475479126 0.34659135341644287 0 1.0 0 0.0 0 0.0 0 0.0 1.2502384185791016 -0.09483286738395691 0.21605446934700012 0.0 0.0 0.999969482421875 0.3786007761955261 0.33784085512161255 0 1.0 0 0.0 0 0.0 0 0.0 1.3553736209869385 -0.09155523777008057 0.21605446934700012 0.0 0.0 1.0 0.4371563494205475 0.3104267716407776 0 1.0 0 0.0 0 0.0 0 0.0 1.3531529903411865 -0.08801734447479248 0.21605446934700012 0.0 0.0 1.0 0.435935914516449 0.31473487615585327 0 1.0 0 0.0 0 0.0 0 0.0 1.4920799732208252 -0.09120375663042068 0.21605446934700012 0.0 0.0 1.0 0.534095287322998 0.30716514587402344 0 1.0 0 0.0 0 0.0 0 0.0 1.5896236896514893 -0.0923299491405487 0.21605446934700012 0.0 0.0 1.0 0.5898779034614563 0.3301680088043213 0 1.0 0 0.0 0 0.0 0 0.0 1.4927098751068115 -0.08878353983163834 0.21605446934700012 0.0 0.0 1.0 0.5344240665435791 0.30988991260528564 0 1.0 0 0.0 0 0.0 0 0.0 1.491269826889038 -0.0935315415263176 0.21605446934700012 0.0 0.0 0.999969482421875 0.5336395502090454 0.30452263355255127 0 1.0 0 0.0 0 0.0 0 0.0 1.5896236896514893 -0.0923299491405487 0.21605446934700012 0.0 0.0 1.0 0.5898779034614563 0.3301680088043213 0 1.0 0 0.0 0 0.0 0 0.0 1.4920799732208252 -0.09120375663042068 0.21605446934700012 0.0 0.0 1.0 0.534095287322998 0.30716514587402344 0 1.0 0 0.0 0 0.0 0 0.0 1.2502384185791016 -0.09483286738395691 0.21605446934700012 0.0 0.0 0.999969482421875 0.3786007761955261 0.33784085512161255 0 1.0 0 0.0 0 0.0 0 0.0 1.3577744960784912 -0.09490098059177399 0.21605446934700012 0.0 0.0 1.0 0.43852657079696655 0.30631476640701294 0 1.0 0 0.0 0 0.0 0 0.0 1.3553736209869385 -0.09155523777008057 0.21605446934700012 0.0 0.0 1.0 0.4371563494205475 0.3104267716407776 0 1.0 0 0.0 0 0.0 0 0.0 1.491269826889038 -0.0935315415263176 0.21605446934700012 0.0 0.0 0.999969482421875 0.5336395502090454 0.30452263355255127 0 1.0 0 0.0 0 0.0 0 0.0 1.5875461101531982 -0.10015491396188736 0.21605446934700012 0.0 0.0 1.0 0.589529275894165 0.3221694827079773 0 1.0 0 0.0 0 0.0 0 0.0 1.5896236896514893 -0.0923299491405487 0.21605446934700012 0.0 0.0 1.0 0.5898779034614563 0.3301680088043213 0 1.0 0 0.0 0 0.0 0 0.0 1.4902799129486084 -0.09576690196990967 0.21605446934700012 0.0 0.0 0.999969482421875 0.5330555438995361 0.30196118354797363 0 1.0 0 0.0 0 0.0 0 0.0 1.5875461101531982 -0.10015491396188736 0.21605446934700012 0.0 0.0 1.0 0.589529275894165 0.3221694827079773 0 1.0 0 0.0 0 0.0 0 0.0 1.491269826889038 -0.0935315415263176 0.21605446934700012 0.0 0.0 0.999969482421875 0.5336395502090454 0.30452263355255127 0 1.0 0 0.0 0 0.0 0 0.0 1.2535793781280518 -0.10288161039352417 0.21605446934700012 0.0 0.0 1.0 0.3792789578437805 0.3292854428291321 0 1.0 0 0.0 0 0.0 0 0.0 1.3577744960784912 -0.09490098059177399 0.21605446934700012 0.0 0.0 1.0 0.43852657079696655 0.30631476640701294 0 1.0 0 0.0 0 0.0 0 0.0 1.2502384185791016 -0.09483286738395691 0.21605446934700012 0.0 0.0 0.999969482421875 0.3786007761955261 0.33784085512161255 0 1.0 0 0.0 0 0.0 0 0.0 1.2535793781280518 -0.10288161039352417 0.21605446934700012 0.0 0.0 1.0 0.3792789578437805 0.3292854428291321 0 1.0 0 0.0 0 0.0 0 0.0 1.3603556156158447 -0.09805455803871155 0.21605446934700012 0.0 0.0 1.0 0.44004958868026733 0.30239802598953247 0 1.0 0 0.0 0 0.0 0 0.0 1.3577744960784912 -0.09490098059177399 0.21605446934700012 0.0 0.0 1.0 0.43852657079696655 0.30631476640701294 0 1.0 0 0.0 0 0.0 0 0.0 1.4891102313995361 -0.0979098305106163 0.21605446934700012 0.0 0.0 1.0 0.532341718673706 0.29947996139526367 0 1.0 0 0.0 0 0.0 0 0.0 1.5875461101531982 -0.10015491396188736 0.21605446934700012 0.0 0.0 1.0 0.589529275894165 0.3221694827079773 0 1.0 0 0.0 0 0.0 0 0.0 1.4902799129486084 -0.09576690196990967 0.21605446934700012 0.0 0.0 0.999969482421875 0.5330555438995361 0.30196118354797363 0 1.0 0 0.0 0 0.0 0 0.0 1.487760305404663 -0.0999603271484375 0.21605446934700012 0.0 0.0 1.0 0.5314958691596985 0.29707831144332886 0 1.0 0 0.0 0 0.0 0 0.0 1.5875461101531982 -0.10015491396188736 0.21605446934700012 0.0 0.0 1.0 0.589529275894165 0.3221694827079773 0 1.0 0 0.0 0 0.0 0 0.0 1.4891102313995361 -0.0979098305106163 0.21605446934700012 0.0 0.0 1.0 0.532341718673706 0.29947996139526367 0 1.0 0 0.0 0 0.0 0 0.0 1.2535793781280518 -0.10288161039352417 0.21605446934700012 0.0 0.0 1.0 0.3792789578437805 0.3292854428291321 0 1.0 0 0.0 0 0.0 0 0.0 1.3631165027618408 -0.10101598501205444 0.21605446934700012 0.0 0.0 1.0 0.44172802567481995 0.29867666959762573 0 1.0 0 0.0 0 0.0 0 0.0 1.3603556156158447 -0.09805455803871155 0.21605446934700012 0.0 0.0 1.0 0.44004958868026733 0.30239802598953247 0 1.0 0 0.0 0 0.0 0 0.0 1.4862301349639893 -0.10191839188337326 0.21605446934700012 0.0 0.0 1.0 0.5305162668228149 0.29475635290145874 0 1.0 0 0.0 0 0.0 0 0.0 1.5875461101531982 -0.10015491396188736 0.21605446934700012 0.0 0.0 1.0 0.589529275894165 0.3221694827079773 0 1.0 0 0.0 0 0.0 0 0.0 1.487760305404663 -0.0999603271484375 0.21605446934700012 0.0 0.0 1.0 0.5314958691596985 0.29707831144332886 0 1.0 0 0.0 0 0.0 0 0.0 1.4862301349639893 -0.10191839188337326 0.21605446934700012 0.0 0.0 1.0 0.5305162668228149 0.29475635290145874 0 1.0 0 0.0 0 0.0 0 0.0 1.5848753452301025 -0.10778042674064636 0.21605446934700012 0.0 0.0 1.0 0.5888720750808716 0.3142467737197876 0 1.0 0 0.0 0 0.0 0 0.0 1.5875461101531982 -0.10015491396188736 0.21605446934700012 0.0 0.0 1.0 0.589529275894165 0.3221694827079773 0 1.0 0 0.0 0 0.0 0 0.0 1.2535793781280518 -0.10288161039352417 0.21605446934700012 0.0 0.0 1.0 0.3792789578437805 0.3292854428291321 0 1.0 0 0.0 0 0.0 0 0.0 1.3660571575164795 -0.10378524661064148 0.21605446934700012 0.0 0.0 1.0 0.4435648024082184 0.2951512336730957 0 1.0 0 0.0 0 0.0 0 0.0 1.3631165027618408 -0.10101598501205444 0.21605446934700012 0.0 0.0 1.0 0.44172802567481995 0.29867666959762573 0 1.0 0 0.0 0 0.0 0 0.0 1.4845201969146729 -0.10378402471542358 0.21605446934700012 0.0 0.0 1.0 0.5294012427330017 0.2925146222114563 0 1.0 0 0.0 0 0.0 0 0.0 1.5848753452301025 -0.10778042674064636 0.21605446934700012 0.0 0.0 1.0 0.5888720750808716 0.3142467737197876 0 1.0 0 0.0 0 0.0 0 0.0 1.4862301349639893 -0.10191839188337326 0.21605446934700012 0.0 0.0 1.0 0.5305162668228149 0.29475635290145874 0 1.0 0 0.0 0 0.0 0 0.0 1.2573459148406982 -0.11062387377023697 0.21605446934700012 0.0 0.0 1.0 0.380201518535614 0.32091307640075684 0 1.0 0 0.0 0 0.0 0 0.0 1.3660571575164795 -0.10378524661064148 0.21605446934700012 0.0 0.0 1.0 0.4435648024082184 0.2951512336730957 0 1.0 0 0.0 0 0.0 0 0.0 1.2535793781280518 -0.10288161039352417 0.21605446934700012 0.0 0.0 1.0 0.3792789578437805 0.3292854428291321 0 1.0 0 0.0 0 0.0 0 0.0 1.4826304912567139 -0.10555722564458847 0.21605446934700012 0.0 0.0 1.0 0.5281489491462708 0.29035401344299316 0 1.0 0 0.0 0 0.0 0 0.0 1.5848753452301025 -0.10778042674064636 0.21605446934700012 0.0 0.0 1.0 0.5888720750808716 0.3142467737197876 0 1.0 0 0.0 0 0.0 0 0.0 1.4845201969146729 -0.10378402471542358 0.21605446934700012 0.0 0.0 1.0 0.5294012427330017 0.2925146222114563 0 1.0 0 0.0 0 0.0 0 0.0 1.2573459148406982 -0.11062387377023697 0.21605446934700012 0.0 0.0 1.0 0.380201518535614 0.32091307640075684 0 1.0 0 0.0 0 0.0 0 0.0 1.3691771030426025 -0.10636235028505325 0.21605446934700012 0.0 0.0 1.0 0.44556230306625366 0.2918233871459961 0 1.0 0 0.0 0 0.0 0 0.0 1.3660571575164795 -0.10378524661064148 0.21605446934700012 0.0 0.0 1.0 0.4435648024082184 0.2951512336730957 0 1.0 0 0.0 0 0.0 0 0.0 1.480560541152954 -0.10723800212144852 0.21605446934700012 0.0 0.0 1.0 0.526757001876831 0.2882760167121887 0 1.0 0 0.0 0 0.0 0 0.0 1.5848753452301025 -0.10778042674064636 0.21605446934700012 0.0 0.0 1.0 0.5888720750808716 0.3142467737197876 0 1.0 0 0.0 0 0.0 0 0.0 1.4826304912567139 -0.10555722564458847 0.21605446934700012 0.0 0.0 1.0 0.5281489491462708 0.29035401344299316 0 1.0 0 0.0 0 0.0 0 0.0 1.2573459148406982 -0.11062387377023697 0.21605446934700012 0.0 0.0 1.0 0.380201518535614 0.32091307640075684 0 1.0 0 0.0 0 0.0 0 0.0 1.3724949359893799 -0.10874000191688538 0.21605446934700012 0.0 0.0 1.0 0.44773662090301514 0.2886993885040283 0 1.0 0 0.0 0 0.0 0 0.0 1.3691771030426025 -0.10636235028505325 0.21605446934700012 0.0 0.0 1.0 0.44556230306625366 0.2918233871459961 0 1.0 0 0.0 0 0.0 0 0.0 1.4772183895111084 -0.10947578400373459 0.21605446934700012 0.0 0.0 0.999969482421875 0.5244709849357605 0.28544747829437256 0 1.0 0 0.0 0 0.0 0 0.0 1.5848753452301025 -0.10778042674064636 0.21605446934700012 0.0 0.0 1.0 0.5888720750808716 0.3142467737197876 0 1.0 0 0.0 0 0.0 0 0.0 1.480560541152954 -0.10723800212144852 0.21605446934700012 0.0 0.0 1.0 0.526757001876831 0.2882760167121887 0 1.0 0 0.0 0 0.0 0 0.0 1.4772183895111084 -0.10947578400373459 0.21605446934700012 0.0 0.0 0.999969482421875 0.5244709849357605 0.28544747829437256 0 1.0 0 0.0 0 0.0 0 0.0 1.5816113948822021 -0.11520648002624512 0.21605446934700012 0.0 0.0 1.0 0.5878925919532776 0.306384801864624 0 1.0 0 0.0 0 0.0 0 0.0 1.5848753452301025 -0.10778042674064636 0.21605446934700012 0.0 0.0 1.0 0.5888720750808716 0.3142467737197876 0 1.0 0 0.0 0 0.0 0 0.0 1.2573459148406982 -0.11062387377023697 0.21605446934700012 0.0 0.0 1.0 0.380201518535614 0.32091307640075684 0 1.0 0 0.0 0 0.0 0 0.0 1.3760263919830322 -0.11091089993715286 0.21605446934700012 0.0 0.0 1.0 0.45010197162628174 0.28578758239746094 0 1.0 0 0.0 0 0.0 0 0.0 1.3724949359893799 -0.10874000191688538 0.21605446934700012 0.0 0.0 1.0 0.44773662090301514 0.2886993885040283 0 1.0 0 0.0 0 0.0 0 0.0 1.4736135005950928 -0.1115189865231514 0.21605446934700012 0.0 0.0 1.0 0.5219641923904419 0.2828214764595032 0 1.0 0 0.0 0 0.0 0 0.0 1.5816113948822021 -0.11520648002624512 0.21605446934700012 0.0 0.0 1.0 0.5878925919532776 0.306384801864624 0 1.0 0 0.0 0 0.0 0 0.0 1.4772183895111084 -0.10947578400373459 0.21605446934700012 0.0 0.0 0.999969482421875 0.5244709849357605 0.28544747829437256 0 1.0 0 0.0 0 0.0 0 0.0 1.261538028717041 -0.1180596575140953 0.21605446934700012 0.0 0.0 1.0 0.3813808858394623 0.3127126097679138 0 1.0 0 0.0 0 0.0 0 0.0 1.3760263919830322 -0.11091089993715286 0.21605446934700012 0.0 0.0 1.0 0.45010197162628174 0.28578758239746094 0 1.0 0 0.0 0 0.0 0 0.0 1.2573459148406982 -0.11062387377023697 0.21605446934700012 0.0 0.0 1.0 0.380201518535614 0.32091307640075684 0 1.0 0 0.0 0 0.0 0 0.0 1.261538028717041 -0.1180596575140953 0.21605446934700012 0.0 0.0 1.0 0.3813808858394623 0.3127126097679138 0 1.0 0 0.0 0 0.0 0 0.0 1.379772424697876 -0.11287504434585571 0.21605446934700012 0.0 0.0 1.0 0.45266157388687134 0.2830924987792969 0 1.0 0 0.0 0 0.0 0 0.0 1.3760263919830322 -0.11091089993715286 0.21605446934700012 0.0 0.0 1.0 0.45010197162628174 0.28578758239746094 0 1.0 0 0.0 0 0.0 0 0.0 1.4697458744049072 -0.11336759477853775 0.21605446934700012 0.0 0.0 1.0 0.5192333459854126 0.28040528297424316 0 1.0 0 0.0 0 0.0 0 0.0 1.5816113948822021 -0.11520648002624512 0.21605446934700012 0.0 0.0 1.0 0.5878925919532776 0.306384801864624 0 1.0 0 0.0 0 0.0 0 0.0 1.4736135005950928 -0.1115189865231514 0.21605446934700012 0.0 0.0 1.0 0.5219641923904419 0.2828214764595032 0 1.0 0 0.0 0 0.0 0 0.0 1.261538028717041 -0.1180596575140953 0.21605446934700012 0.0 0.0 1.0 0.3813808858394623 0.3127126097679138 0 1.0 0 0.0 0 0.0 0 0.0 1.3837320804595947 -0.11463243514299393 0.21605446934700012 0.0 0.0 0.999969482421875 0.45541685819625854 0.2806207537651062 0 1.0 0 0.0 0 0.0 0 0.0 1.379772424697876 -0.11287504434585571 0.21605446934700012 0.0 0.0 1.0 0.45266157388687134 0.2830924987792969 0 1.0 0 0.0 0 0.0 0 0.0 1.46561598777771 -0.11502161622047424 0.21605446934700012 0.0 0.0 1.0 0.5162762403488159 0.2782074809074402 0 1.0 0 0.0 0 0.0 0 0.0 1.5816113948822021 -0.11520648002624512 0.21605446934700012 0.0 0.0 1.0 0.5878925919532776 0.306384801864624 0 1.0 0 0.0 0 0.0 0 0.0 1.4697458744049072 -0.11336759477853775 0.21605446934700012 0.0 0.0 1.0 0.5192333459854126 0.28040528297424316 0 1.0 0 0.0 0 0.0 0 0.0 1.261538028717041 -0.1180596575140953 0.21605446934700012 0.0 0.0 1.0 0.3813808858394623 0.3127126097679138 0 1.0 0 0.0 0 0.0 0 0.0 1.3879063129425049 -0.1161830797791481 0.21605446934700012 0.0 0.0 1.0 0.45837000012397766 0.2783792018890381 0 1.0 0 0.0 0 0.0 0 0.0 1.3837320804595947 -0.11463243514299393 0.21605446934700012 0.0 0.0 0.999969482421875 0.45541685819625854 0.2806207537651062 0 1.0 0 0.0 0 0.0 0 0.0 1.4612228870391846 -0.11648104339838028 0.21605446934700012 0.0 0.0 1.0 0.5130904912948608 0.2762381434440613 0 1.0 0 0.0 0 0.0 0 0.0 1.5816113948822021 -0.11520648002624512 0.21605446934700012 0.0 0.0 1.0 0.5878925919532776 0.306384801864624 0 1.0 0 0.0 0 0.0 0 0.0 1.46561598777771 -0.11502161622047424 0.21605446934700012 0.0 0.0 1.0 0.5162762403488159 0.2782074809074402 0 1.0 0 0.0 0 0.0 0 0.0 1.4612228870391846 -0.11648104339838028 0.21605446934700012 0.0 0.0 1.0 0.5130904912948608 0.2762381434440613 0 1.0 0 0.0 0 0.0 0 0.0 1.5777533054351807 -0.12243308126926422 0.21605446934700012 0.0 0.0 1.0 0.586573600769043 0.2985709309577942 0 1.0 0 0.0 0 0.0 0 0.0 1.5816113948822021 -0.11520648002624512 0.21605446934700012 0.0 0.0 1.0 0.5878925919532776 0.306384801864624 0 1.0 0 0.0 0 0.0 0 0.0 1.261538028717041 -0.1180596575140953 0.21605446934700012 0.0 0.0 1.0 0.3813808858394623 0.3127126097679138 0 1.0 0 0.0 0 0.0 0 0.0 1.39229416847229 -0.11752697080373764 0.21605446934700012 0.0 0.0 1.0 0.46152105927467346 0.2763766050338745 0 1.0 0 0.0 0 0.0 0 0.0 1.3879063129425049 -0.1161830797791481 0.21605446934700012 0.0 0.0 1.0 0.45837000012397766 0.2783792018890381 0 1.0 0 0.0 0 0.0 0 0.0 1.4565675258636475 -0.11774588376283646 0.21605446934700012 0.0 0.0 0.999969482421875 0.5096758604049683 0.2745087742805481 0 1.0 0 0.0 0 0.0 0 0.0 1.5777533054351807 -0.12243308126926422 0.21605446934700012 0.0 0.0 1.0 0.586573600769043 0.2985709309577942 0 1.0 0 0.0 0 0.0 0 0.0 1.4612228870391846 -0.11648104339838028 0.21605446934700012 0.0 0.0 1.0 0.5130904912948608 0.2762381434440613 0 1.0 0 0.0 0 0.0 0 0.0 1.261538028717041 -0.1180596575140953 0.21605446934700012 0.0 0.0 1.0 0.3813808858394623 0.3127126097679138 0 1.0 0 0.0 0 0.0 0 0.0 1.3968961238861084 -0.11866410821676254 0.21605446934700012 0.0 0.0 1.0 0.4648702144622803 0.27462238073349 0 1.0 0 0.0 0 0.0 0 0.0 1.39229416847229 -0.11752697080373764 0.21605446934700012 0.0 0.0 1.0 0.46152105927467346 0.2763766050338745 0 1.0 0 0.0 0 0.0 0 0.0 1.4516489505767822 -0.11881612986326218 0.21605446934700012 0.0 0.0 1.0 0.5060319304466248 0.2730323076248169 0 1.0 0 0.0 0 0.0 0 0.0 1.5777533054351807 -0.12243308126926422 0.21605446934700012 0.0 0.0 1.0 0.586573600769043 0.2985709309577942 0 1.0 0 0.0 0 0.0 0 0.0 1.4565675258636475 -0.11774588376283646 0.21605446934700012 0.0 0.0 0.999969482421875 0.5096758604049683 0.2745087742805481 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 -0.12518896162509918 0.21605446934700012 0.0 0.0 1.0 0.38283151388168335 0.30467474460601807 0 1.0 0 0.0 0 0.0 0 0.0 1.3968961238861084 -0.11866410821676254 0.21605446934700012 0.0 0.0 1.0 0.4648702144622803 0.27462238073349 0 1.0 0 0.0 0 0.0 0 0.0 1.261538028717041 -0.1180596575140953 0.21605446934700012 0.0 0.0 1.0 0.3813808858394623 0.3127126097679138 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 -0.12518896162509918 0.21605446934700012 0.0 0.0 1.0 0.38283151388168335 0.30467474460601807 0 1.0 0 0.0 0 0.0 0 0.0 1.40171217918396 -0.11959449201822281 0.21605446934700012 0.0 0.0 1.0 0.468416303396225 0.2731272578239441 0 1.0 0 0.0 0 0.0 0 0.0 1.3968961238861084 -0.11866410821676254 0.21605446934700012 0.0 0.0 1.0 0.4648702144622803 0.27462238073349 0 1.0 0 0.0 0 0.0 0 0.0 1.4464681148529053 -0.11969178915023804 0.21605446934700012 0.0 3.0518509447574615e-05 1.0 0.5021612048149109 0.2718231678009033 0 1.0 0 0.0 0 0.0 0 0.0 1.5777533054351807 -0.12243308126926422 0.21605446934700012 0.0 0.0 1.0 0.586573600769043 0.2985709309577942 0 1.0 0 0.0 0 0.0 0 0.0 1.4516489505767822 -0.11881612986326218 0.21605446934700012 0.0 0.0 1.0 0.5060319304466248 0.2730323076248169 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 -0.12518896162509918 0.21605446934700012 0.0 0.0 1.0 0.38283151388168335 0.30467474460601807 0 1.0 0 0.0 0 0.0 0 0.0 1.4067423343658447 -0.12031812220811844 0.21605446934700012 0.0 0.0 1.0 0.47215694189071655 0.2719026207923889 0 1.0 0 0.0 0 0.0 0 0.0 1.40171217918396 -0.11959449201822281 0.21605446934700012 0.0 0.0 1.0 0.468416303396225 0.2731272578239441 0 1.0 0 0.0 0 0.0 0 0.0 1.4410245418548584 -0.12037285417318344 0.21605446934700012 0.0 0.0 0.999969482421875 0.4980665147304535 0.2708966135978699 0 1.0 0 0.0 0 0.0 0 0.0 1.5777533054351807 -0.12243308126926422 0.21605446934700012 0.0 0.0 1.0 0.586573600769043 0.2985709309577942 0 1.0 0 0.0 0 0.0 0 0.0 1.4464681148529053 -0.11969178915023804 0.21605446934700012 0.0 3.0518509447574615e-05 1.0 0.5021612048149109 0.2718231678009033 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 -0.12518896162509918 0.21605446934700012 0.0 0.0 1.0 0.38283151388168335 0.30467474460601807 0 1.0 0 0.0 0 0.0 0 0.0 1.4119865894317627 -0.12083500623703003 0.21605446934700012 0.0 3.0518509447574615e-05 0.999969482421875 0.4760883152484894 0.2709609866142273 0 1.0 0 0.0 0 0.0 0 0.0 1.4067423343658447 -0.12031812220811844 0.21605446934700012 0.0 0.0 1.0 0.47215694189071655 0.2719026207923889 0 1.0 0 0.0 0 0.0 0 0.0 1.4353182315826416 -0.12085933238267899 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.4937530755996704 0.2702690362930298 0 1.0 0 0.0 0 0.0 0 0.0 1.5777533054351807 -0.12243308126926422 0.21605446934700012 0.0 0.0 1.0 0.586573600769043 0.2985709309577942 0 1.0 0 0.0 0 0.0 0 0.0 1.4410245418548584 -0.12037285417318344 0.21605446934700012 0.0 0.0 0.999969482421875 0.4980665147304535 0.2708966135978699 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 -0.12518896162509918 0.21605446934700012 0.0 0.0 1.0 0.38283151388168335 0.30467474460601807 0 1.0 0 0.0 0 0.0 0 0.0 1.4174449443817139 -0.12114513665437698 0.21605446934700012 0.0 -9.155552834272385e-05 1.0 0.480205237865448 0.27031540870666504 0 1.0 0 0.0 0 0.0 0 0.0 1.4119865894317627 -0.12083500623703003 0.21605446934700012 0.0 3.0518509447574615e-05 0.999969482421875 0.4760883152484894 0.2709609866142273 0 1.0 0 0.0 0 0.0 0 0.0 1.4293491840362549 -0.12115121632814407 0.21605446934700012 0.0 0.0 1.0 0.4892280697822571 0.2699575424194336 0 1.0 0 0.0 0 0.0 0 0.0 1.5777533054351807 -0.12243308126926422 0.21605446934700012 0.0 0.0 1.0 0.586573600769043 0.2985709309577942 0 1.0 0 0.0 0 0.0 0 0.0 1.4353182315826416 -0.12085933238267899 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.4937530755996704 0.2702690362930298 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 -0.12518896162509918 0.21605446934700012 0.0 0.0 1.0 0.38283151388168335 0.30467474460601807 0 1.0 0 0.0 0 0.0 0 0.0 1.4231173992156982 -0.1212485134601593 0.21605446934700012 0.0 0.0 1.0 0.48450079560279846 0.2699793577194214 0 1.0 0 0.0 0 0.0 0 0.0 1.4174449443817139 -0.12114513665437698 0.21605446934700012 0.0 -9.155552834272385e-05 1.0 0.480205237865448 0.27031540870666504 0 1.0 0 0.0 0 0.0 0 0.0 1.4231173992156982 -0.1212485134601593 0.21605446934700012 0.0 0.0 1.0 0.48450079560279846 0.2699793577194214 0 1.0 0 0.0 0 0.0 0 0.0 1.5777533054351807 -0.12243308126926422 0.21605446934700012 0.0 0.0 1.0 0.586573600769043 0.2985709309577942 0 1.0 0 0.0 0 0.0 0 0.0 1.4293491840362549 -0.12115121632814407 0.21605446934700012 0.0 0.0 1.0 0.4892280697822571 0.2699575424194336 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 -0.12518896162509918 0.21605446934700012 0.0 0.0 1.0 0.38283151388168335 0.30467474460601807 0 1.0 0 0.0 0 0.0 0 0.0 1.5777533054351807 -0.12243308126926422 0.21605446934700012 0.0 0.0 1.0 0.586573600769043 0.2985709309577942 0 1.0 0 0.0 0 0.0 0 0.0 1.4231173992156982 -0.1212485134601593 0.21605446934700012 0.0 0.0 1.0 0.48450079560279846 0.2699793577194214 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 -0.12518896162509918 0.21605446934700012 0.0 0.0 1.0 0.38283151388168335 0.30467474460601807 0 1.0 0 0.0 0 0.0 0 0.0 1.5733020305633545 -0.12946023046970367 0.21605446934700012 0.0 0.0 0.999969482421875 0.5848955512046814 0.2907964587211609 0 1.0 0 0.0 0 0.0 0 0.0 1.5777533054351807 -0.12243308126926422 0.21605446934700012 0.0 0.0 1.0 0.586573600769043 0.2985709309577942 0 1.0 0 0.0 0 0.0 0 0.0 1.2711994647979736 -0.1320118010044098 0.21605446934700012 0.0 0.0 1.0 0.38456952571868896 0.296792209148407 0 1.0 0 0.0 0 0.0 0 0.0 1.5733020305633545 -0.12946023046970367 0.21605446934700012 0.0 0.0 0.999969482421875 0.5848955512046814 0.2907964587211609 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 -0.12518896162509918 0.21605446934700012 0.0 0.0 1.0 0.38283151388168335 0.30467474460601807 0 1.0 0 0.0 0 0.0 0 0.0 1.2711994647979736 -0.1320118010044098 0.21605446934700012 0.0 0.0 1.0 0.38456952571868896 0.296792209148407 0 1.0 0 0.0 0 0.0 0 0.0 1.5682575702667236 -0.13628791272640228 0.21605446934700012 0.0 0.0 1.0 0.5828350782394409 0.28305596113204956 0 1.0 0 0.0 0 0.0 0 0.0 1.5733020305633545 -0.12946023046970367 0.21605446934700012 0.0 0.0 0.999969482421875 0.5848955512046814 0.2907964587211609 0 1.0 0 0.0 0 0.0 0 0.0 1.2766687870025635 -0.13852813839912415 0.21605446934700012 0.0 0.0 1.0 0.3866134285926819 0.2890600562095642 0 1.0 0 0.0 0 0.0 0 0.0 1.5682575702667236 -0.13628791272640228 0.21605446934700012 0.0 0.0 1.0 0.5828350782394409 0.28305596113204956 0 1.0 0 0.0 0 0.0 0 0.0 1.2711994647979736 -0.1320118010044098 0.21605446934700012 0.0 0.0 1.0 0.38456952571868896 0.296792209148407 0 1.0 0 0.0 0 0.0 0 0.0 1.2766687870025635 -0.13852813839912415 0.21605446934700012 0.0 0.0 1.0 0.3866134285926819 0.2890600562095642 0 1.0 0 0.0 0 0.0 0 0.0 1.5626189708709717 -0.14291614294052124 0.21605446934700012 0.0 0.0 1.0 0.5803644061088562 0.27534836530685425 0 1.0 0 0.0 0 0.0 0 0.0 1.5682575702667236 -0.13628791272640228 0.21605446934700012 0.0 0.0 1.0 0.5828350782394409 0.28305596113204956 0 1.0 0 0.0 0 0.0 0 0.0 1.2825636863708496 -0.14473800361156464 0.21605446934700012 0.0 0.0 1.0 0.38898372650146484 0.2814762592315674 0 1.0 0 0.0 0 0.0 0 0.0 1.5626189708709717 -0.14291614294052124 0.21605446934700012 0.0 0.0 1.0 0.5803644061088562 0.27534836530685425 0 1.0 0 0.0 0 0.0 0 0.0 1.2766687870025635 -0.13852813839912415 0.21605446934700012 0.0 0.0 1.0 0.3866134285926819 0.2890600562095642 0 1.0 0 0.0 0 0.0 0 0.0 1.2825636863708496 -0.14473800361156464 0.21605446934700012 0.0 0.0 1.0 0.38898372650146484 0.2814762592315674 0 1.0 0 0.0 0 0.0 0 0.0 1.556387186050415 -0.14934493601322174 0.21605446934700012 0.0 0.0 1.0 0.5774527788162231 0.2676782011985779 0 1.0 0 0.0 0 0.0 0 0.0 1.5626189708709717 -0.14291614294052124 0.21605446934700012 0.0 0.0 1.0 0.5803644061088562 0.27534836530685425 0 1.0 0 0.0 0 0.0 0 0.0 1.288883924484253 -0.15064138174057007 0.21605446934700012 0.0 0.0 1.0 0.3917032480239868 0.2740423083305359 0 1.0 0 0.0 0 0.0 0 0.0 1.556387186050415 -0.14934493601322174 0.21605446934700012 0.0 0.0 1.0 0.5774527788162231 0.2676782011985779 0 1.0 0 0.0 0 0.0 0 0.0 1.2825636863708496 -0.14473800361156464 0.21605446934700012 0.0 0.0 1.0 0.38898372650146484 0.2814762592315674 0 1.0 0 0.0 0 0.0 0 0.0 1.288883924484253 -0.15064138174057007 0.21605446934700012 0.0 0.0 1.0 0.3917032480239868 0.2740423083305359 0 1.0 0 0.0 0 0.0 0 0.0 1.5495622158050537 -0.1555742621421814 0.21605446934700012 0.0 0.0 1.0 0.5740647315979004 0.2600557804107666 0 1.0 0 0.0 0 0.0 0 0.0 1.556387186050415 -0.14934493601322174 0.21605446934700012 0.0 0.0 1.0 0.5774527788162231 0.2676782011985779 0 1.0 0 0.0 0 0.0 0 0.0 1.2956302165985107 -0.15623830258846283 0.21605446934700012 0.0 0.0 1.0 0.3947977125644684 0.26676273345947266 0 1.0 0 0.0 0 0.0 0 0.0 1.5495622158050537 -0.1555742621421814 0.21605446934700012 0.0 0.0 1.0 0.5740647315979004 0.2600557804107666 0 1.0 0 0.0 0 0.0 0 0.0 1.288883924484253 -0.15064138174057007 0.21605446934700012 0.0 0.0 1.0 0.3917032480239868 0.2740423083305359 0 1.0 0 0.0 0 0.0 0 0.0 1.2956302165985107 -0.15623830258846283 0.21605446934700012 0.0 0.0 1.0 0.3947977125644684 0.26676273345947266 0 1.0 0 0.0 0 0.0 0 0.0 1.5421555042266846 -0.16144844889640808 0.21605446934700012 0.0 0.0 1.0 0.5701556205749512 0.25263315439224243 0 1.0 0 0.0 0 0.0 0 0.0 1.5495622158050537 -0.1555742621421814 0.21605446934700012 0.0 0.0 1.0 0.5740647315979004 0.2600557804107666 0 1.0 0 0.0 0 0.0 0 0.0 1.302802324295044 -0.16152872145175934 0.21605446934700012 0.0 0.0 1.0 0.3982948064804077 0.2596473693847656 0 1.0 0 0.0 0 0.0 0 0.0 1.5421555042266846 -0.16144844889640808 0.21605446934700012 0.0 0.0 1.0 0.5701556205749512 0.25263315439224243 0 1.0 0 0.0 0 0.0 0 0.0 1.2956302165985107 -0.15623830258846283 0.21605446934700012 0.0 0.0 1.0 0.3947977125644684 0.26676273345947266 0 1.0 0 0.0 0 0.0 0 0.0 1.302802324295044 -0.16152872145175934 0.21605446934700012 0.0 0.0 1.0 0.3982948064804077 0.2596473693847656 0 1.0 0 0.0 0 0.0 0 0.0 1.534179925918579 -0.16681185364723206 0.21605446934700012 0.0 0.0 0.999969482421875 0.5656803846359253 0.2455642819404602 0 1.0 0 0.0 0 0.0 0 0.0 1.5421555042266846 -0.16144844889640808 0.21605446934700012 0.0 0.0 1.0 0.5701556205749512 0.25263315439224243 0 1.0 0 0.0 0 0.0 0 0.0 1.3104074001312256 -0.1664518564939499 0.21605446934700012 0.0 0.0 0.999969482421875 0.40223488211631775 0.2527579665184021 0 1.0 0 0.0 0 0.0 0 0.0 1.534179925918579 -0.16681185364723206 0.21605446934700012 0.0 0.0 0.999969482421875 0.5656803846359253 0.2455642819404602 0 1.0 0 0.0 0 0.0 0 0.0 1.302802324295044 -0.16152872145175934 0.21605446934700012 0.0 0.0 1.0 0.3982948064804077 0.2596473693847656 0 1.0 0 0.0 0 0.0 0 0.0 1.3184521198272705 -0.1709468960762024 0.21605445444583893 0.0 0.0 1.0 0.40666019916534424 0.24616098403930664 0 1.0 0 0.0 0 0.0 0 0.0 1.534179925918579 -0.16681185364723206 0.21605446934700012 0.0 0.0 0.999969482421875 0.5656803846359253 0.2455642819404602 0 1.0 0 0.0 0 0.0 0 0.0 1.3104074001312256 -0.1664518564939499 0.21605446934700012 0.0 0.0 0.999969482421875 0.40223488211631775 0.2527579665184021 0 1.0 0 0.0 0 0.0 0 0.0 1.3184521198272705 -0.1709468960762024 0.21605445444583893 0.0 0.0 1.0 0.40666019916534424 0.24616098403930664 0 1.0 0 0.0 0 0.0 0 0.0 1.525635004043579 -0.17166444659233093 0.21605445444583893 0.0 0.0 1.0 0.5605970621109009 0.238874614238739 0 1.0 0 0.0 0 0.0 0 0.0 1.534179925918579 -0.16681185364723206 0.21605446934700012 0.0 0.0 0.999969482421875 0.5656803846359253 0.2455642819404602 0 1.0 0 0.0 0 0.0 0 0.0 1.3269374370574951 -0.17501384019851685 0.21605445444583893 0.0 0.0 1.0 0.41160446405410767 0.23988109827041626 0 1.0 0 0.0 0 0.0 0 0.0 1.525635004043579 -0.17166444659233093 0.21605445444583893 0.0 0.0 1.0 0.5605970621109009 0.238874614238739 0 1.0 0 0.0 0 0.0 0 0.0 1.3184521198272705 -0.1709468960762024 0.21605445444583893 0.0 0.0 1.0 0.40666019916534424 0.24616098403930664 0 1.0 0 0.0 0 0.0 0 0.0 1.3269374370574951 -0.17501384019851685 0.21605445444583893 0.0 0.0 1.0 0.41160446405410767 0.23988109827041626 0 1.0 0 0.0 0 0.0 0 0.0 1.5165207386016846 -0.1760062575340271 0.21605445444583893 0.0 0.0 1.0 0.554863452911377 0.23260116577148438 0 1.0 0 0.0 0 0.0 0 0.0 1.525635004043579 -0.17166444659233093 0.21605445444583893 0.0 0.0 1.0 0.5605970621109009 0.238874614238739 0 1.0 0 0.0 0 0.0 0 0.0 1.3358633518218994 -0.17865267395973206 0.21605445444583893 0.0 0.0 1.0 0.41710081696510315 0.2339511513710022 0 1.0 0 0.0 0 0.0 0 0.0 1.5165207386016846 -0.1760062575340271 0.21605445444583893 0.0 0.0 1.0 0.554863452911377 0.23260116577148438 0 1.0 0 0.0 0 0.0 0 0.0 1.3269374370574951 -0.17501384019851685 0.21605445444583893 0.0 0.0 1.0 0.41160446405410767 0.23988109827041626 0 1.0 0 0.0 0 0.0 0 0.0 1.3358633518218994 -0.17865267395973206 0.21605445444583893 0.0 0.0 1.0 0.41710081696510315 0.2339511513710022 0 1.0 0 0.0 0 0.0 0 0.0 1.5068376064300537 -0.17983725666999817 0.21605445444583893 0.0 0.0 1.0 0.5484396815299988 0.22679340839385986 0 1.0 0 0.0 0 0.0 0 0.0 1.5165207386016846 -0.1760062575340271 0.21605445444583893 0.0 0.0 1.0 0.554863452911377 0.23260116577148438 0 1.0 0 0.0 0 0.0 0 0.0 1.345228910446167 -0.18186341226100922 0.21605445444583893 0.0 0.0 1.0 0.4231798052787781 0.22841310501098633 0 1.0 0 0.0 0 0.0 0 0.0 1.5068376064300537 -0.17983725666999817 0.21605445444583893 0.0 0.0 1.0 0.5484396815299988 0.22679340839385986 0 1.0 0 0.0 0 0.0 0 0.0 1.3358633518218994 -0.17865267395973206 0.21605445444583893 0.0 0.0 1.0 0.41710081696510315 0.2339511513710022 0 1.0 0 0.0 0 0.0 0 0.0 1.345228910446167 -0.18186341226100922 0.21605445444583893 0.0 0.0 1.0 0.4231798052787781 0.22841310501098633 0 1.0 0 0.0 0 0.0 0 0.0 1.4965851306915283 -0.18315744400024414 0.21605445444583893 0.0 0.0 0.999969482421875 0.5412901043891907 0.22151345014572144 0 1.0 0 0.0 0 0.0 0 0.0 1.5068376064300537 -0.17983725666999817 0.21605445444583893 0.0 0.0 1.0 0.5484396815299988 0.22679340839385986 0 1.0 0 0.0 0 0.0 0 0.0 1.3550350666046143 -0.18464605510234833 0.21605445444583893 0.0 0.0 1.0 0.4298694431781769 0.2233176827430725 0 1.0 0 0.0 0 0.0 0 0.0 1.4965851306915283 -0.18315744400024414 0.21605445444583893 0.0 0.0 0.999969482421875 0.5412901043891907 0.22151345014572144 0 1.0 0 0.0 0 0.0 0 0.0 1.345228910446167 -0.18186341226100922 0.21605445444583893 0.0 0.0 1.0 0.4231798052787781 0.22841310501098633 0 1.0 0 0.0 0 0.0 0 0.0 1.3550350666046143 -0.18464605510234833 0.21605445444583893 0.0 0.0 1.0 0.4298694431781769 0.2233176827430725 0 1.0 0 0.0 0 0.0 0 0.0 1.4857633113861084 -0.1859668493270874 0.21605445444583893 0.0 0.0 1.0 0.5333886742591858 0.21683746576309204 0 1.0 0 0.0 0 0.0 0 0.0 1.4965851306915283 -0.18315744400024414 0.21605445444583893 0.0 0.0 0.999969482421875 0.5412901043891907 0.22151345014572144 0 1.0 0 0.0 0 0.0 0 0.0 1.365281343460083 -0.1870006024837494 0.21605445444583893 0.0 0.0 0.999969482421875 0.43718987703323364 0.21872544288635254 0 1.0 0 0.0 0 0.0 0 0.0 1.4857633113861084 -0.1859668493270874 0.21605445444583893 0.0 0.0 1.0 0.5333886742591858 0.21683746576309204 0 1.0 0 0.0 0 0.0 0 0.0 1.3550350666046143 -0.18464605510234833 0.21605445444583893 0.0 0.0 1.0 0.4298694431781769 0.2233176827430725 0 1.0 0 0.0 0 0.0 0 0.0 1.365281343460083 -0.1870006024837494 0.21605445444583893 0.0 0.0 0.999969482421875 0.43718987703323364 0.21872544288635254 0 1.0 0 0.0 0 0.0 0 0.0 1.4743726253509521 -0.18826544284820557 0.21605445444583893 0.0 0.0 1.0 0.5247240662574768 0.21285516023635864 0 1.0 0 0.0 0 0.0 0 0.0 1.4857633113861084 -0.1859668493270874 0.21605445444583893 0.0 0.0 1.0 0.5333886742591858 0.21683746576309204 0 1.0 0 0.0 0 0.0 0 0.0 1.3759682178497314 -0.1889270544052124 0.21605445444583893 0.0 0.0 1.0 0.44515177607536316 0.21470582485198975 0 1.0 0 0.0 0 0.0 0 0.0 1.4743726253509521 -0.18826544284820557 0.21605445444583893 0.0 0.0 1.0 0.5247240662574768 0.21285516023635864 0 1.0 0 0.0 0 0.0 0 0.0 1.365281343460083 -0.1870006024837494 0.21605445444583893 0.0 0.0 0.999969482421875 0.43718987703323364 0.21872544288635254 0 1.0 0 0.0 0 0.0 0 0.0 1.3759682178497314 -0.1889270544052124 0.21605445444583893 0.0 0.0 1.0 0.44515177607536316 0.21470582485198975 0 1.0 0 0.0 0 0.0 0 0.0 1.4624125957489014 -0.19005325436592102 0.21605445444583893 0.0 0.0 0.999969482421875 0.5153047442436218 0.20966774225234985 0 1.0 0 0.0 0 0.0 0 0.0 1.4743726253509521 -0.18826544284820557 0.21605445444583893 0.0 0.0 1.0 0.5247240662574768 0.21285516023635864 0 1.0 0 0.0 0 0.0 0 0.0 1.3870952129364014 -0.19042539596557617 0.21605445444583893 0.0 3.0518509447574615e-05 0.999969482421875 0.45375072956085205 0.211337149143219 0 1.0 0 0.0 0 0.0 0 0.0 1.4624125957489014 -0.19005325436592102 0.21605445444583893 0.0 0.0 0.999969482421875 0.5153047442436218 0.20966774225234985 0 1.0 0 0.0 0 0.0 0 0.0 1.3759682178497314 -0.1889270544052124 0.21605445444583893 0.0 0.0 1.0 0.44515177607536316 0.21470582485198975 0 1.0 0 0.0 0 0.0 0 0.0 1.3870952129364014 -0.19042539596557617 0.21605445444583893 0.0 3.0518509447574615e-05 0.999969482421875 0.45375072956085205 0.211337149143219 0 1.0 0 0.0 0 0.0 0 0.0 1.449883222579956 -0.19133025407791138 0.21605445444583893 0.0 0.0 1.0 0.5051661133766174 0.2073853611946106 0 1.0 0 0.0 0 0.0 0 0.0 1.4624125957489014 -0.19005325436592102 0.21605445444583893 0.0 0.0 0.999969482421875 0.5153047442436218 0.20966774225234985 0 1.0 0 0.0 0 0.0 0 0.0 1.3986623287200928 -0.1914956420660019 0.21605445444583893 0.0 0.0 1.0 0.4629644751548767 0.20870304107666016 0 1.0 0 0.0 0 0.0 0 0.0 1.449883222579956 -0.19133025407791138 0.21605445444583893 0.0 0.0 1.0 0.5051661133766174 0.2073853611946106 0 1.0 0 0.0 0 0.0 0 0.0 1.3870952129364014 -0.19042539596557617 0.21605445444583893 0.0 3.0518509447574615e-05 0.999969482421875 0.45375072956085205 0.211337149143219 0 1.0 0 0.0 0 0.0 0 0.0 1.3986623287200928 -0.1914956420660019 0.21605445444583893 0.0 0.0 1.0 0.4629644751548767 0.20870304107666016 0 1.0 0 0.0 0 0.0 0 0.0 1.4367849826812744 -0.19209645688533783 0.21605445444583893 0.0 0.0 1.0 0.49437573552131653 0.20612168312072754 0 1.0 0 0.0 0 0.0 0 0.0 1.449883222579956 -0.19133025407791138 0.21605445444583893 0.0 0.0 1.0 0.5051661133766174 0.2073853611946106 0 1.0 0 0.0 0 0.0 0 0.0 1.4106695652008057 -0.19213779270648956 0.21605445444583893 0.0 0.0 1.0 0.47274866700172424 0.20689111948013306 0 1.0 0 0.0 0 0.0 0 0.0 1.4367849826812744 -0.19209645688533783 0.21605445444583893 0.0 0.0 1.0 0.49437573552131653 0.20612168312072754 0 1.0 0 0.0 0 0.0 0 0.0 1.3986623287200928 -0.1914956420660019 0.21605445444583893 0.0 0.0 1.0 0.4629644751548767 0.20870304107666016 0 1.0 0 0.0 0 0.0 0 0.0 1.4106695652008057 -0.19213779270648956 0.21605445444583893 0.0 0.0 1.0 0.47274866700172424 0.20689111948013306 0 1.0 0 0.0 0 0.0 0 0.0 1.4231173992156982 -0.19235184788703918 0.21605445444583893 0.0 6.103701889514923e-05 1.0 0.48303502798080444 0.20598739385604858 0 1.0 0 0.0 0 0.0 0 0.0 1.4367849826812744 -0.19209645688533783 0.21605445444583893 0.0 0.0 1.0 0.49437573552131653 0.20612168312072754 0 1.0 0 0.0 0 0.0 0 0.0 1.0102767944335938 0.19607609510421753 0.21605448424816132 0.0 0.0 1.0 0.48100516200065613 0.630024254322052 0 1.0 0 0.0 0 0.0 0 0.0 1.0360093116760254 0.19605910778045654 0.21605448424816132 0.0 0.0 1.0 0.49503153562545776 0.6294469833374023 0 1.0 0 0.0 0 0.0 0 0.0 1.0224170684814453 0.19643977284431458 0.21605448424816132 0.0 -3.0518509447574615e-05 1.0 0.48762810230255127 0.6301566958427429 0 1.0 0 0.0 0 0.0 0 0.0 0.9984920024871826 0.19498518109321594 0.21605448424816132 0.0 0.0 1.0 0.4745757579803467 0.6291228532791138 0 1.0 0 0.0 0 0.0 0 0.0 1.0360093116760254 0.19605910778045654 0.21605448424816132 0.0 0.0 1.0 0.49503153562545776 0.6294469833374023 0 1.0 0 0.0 0 0.0 0 0.0 1.0102767944335938 0.19607609510421753 0.21605448424816132 0.0 0.0 1.0 0.48100516200065613 0.630024254322052 0 1.0 0 0.0 0 0.0 0 0.0 0.9984920024871826 0.19498518109321594 0.21605448424816132 0.0 0.0 1.0 0.4745757579803467 0.6291228532791138 0 1.0 0 0.0 0 0.0 0 0.0 1.0491149425506592 0.19491711258888245 0.21605448424816132 0.0 0.0 0.999969482421875 0.5021440386772156 0.627916157245636 0 1.0 0 0.0 0 0.0 0 0.0 1.0360093116760254 0.19605910778045654 0.21605448424816132 0.0 0.0 1.0 0.49503153562545776 0.6294469833374023 0 1.0 0 0.0 0 0.0 0 0.0 0.9870622158050537 0.19316697120666504 0.21605448424816132 0.0 0.0 1.0 0.4683462977409363 0.6274691820144653 0 1.0 0 0.0 0 0.0 0 0.0 1.0491149425506592 0.19491711258888245 0.21605448424816132 0.0 0.0 0.999969482421875 0.5021440386772156 0.627916157245636 0 1.0 0 0.0 0 0.0 0 0.0 0.9984920024871826 0.19498518109321594 0.21605448424816132 0.0 0.0 1.0 0.4745757579803467 0.6291228532791138 0 1.0 0 0.0 0 0.0 0 0.0 0.9870622158050537 0.19316697120666504 0.21605448424816132 0.0 0.0 1.0 0.4683462977409363 0.6274691820144653 0 1.0 0 0.0 0 0.0 0 0.0 1.0617341995239258 0.19301378726959229 0.21605448424816132 0.0 0.0 1.0 0.5089559555053711 0.6255924701690674 0 1.0 0 0.0 0 0.0 0 0.0 1.0491149425506592 0.19491711258888245 0.21605448424816132 0.0 0.0 0.999969482421875 0.5021440386772156 0.627916157245636 0 1.0 0 0.0 0 0.0 0 0.0 0.9759876728057861 0.1906214952468872 0.21605448424816132 0.0 0.0 0.999969482421875 0.4623207747936249 0.6250783205032349 0 1.0 0 0.0 0 0.0 0 0.0 1.0617341995239258 0.19301378726959229 0.21605448424816132 0.0 0.0 1.0 0.5089559555053711 0.6255924701690674 0 1.0 0 0.0 0 0.0 0 0.0 0.9870622158050537 0.19316697120666504 0.21605448424816132 0.0 0.0 1.0 0.4683462977409363 0.6274691820144653 0 1.0 0 0.0 0 0.0 0 0.0 0.9759876728057861 0.1906214952468872 0.21605448424816132 0.0 0.0 0.999969482421875 0.4623207747936249 0.6250783205032349 0 1.0 0 0.0 0 0.0 0 0.0 1.073866844177246 0.19034910202026367 0.21605448424816132 0.0 0.0 1.0 0.5154626369476318 0.6225020289421082 0 1.0 0 0.0 0 0.0 0 0.0 1.0617341995239258 0.19301378726959229 0.21605448424816132 0.0 0.0 1.0 0.5089559555053711 0.6255924701690674 0 1.0 0 0.0 0 0.0 0 0.0 0.9652681350708008 0.18734872341156006 0.21605448424816132 0.0 0.0 1.0 0.4565003216266632 0.6219629049301147 0 1.0 0 0.0 0 0.0 0 0.0 1.073866844177246 0.19034910202026367 0.21605448424816132 0.0 0.0 1.0 0.5154626369476318 0.6225020289421082 0 1.0 0 0.0 0 0.0 0 0.0 0.9759876728057861 0.1906214952468872 0.21605448424816132 0.0 0.0 0.999969482421875 0.4623207747936249 0.6250783205032349 0 1.0 0 0.0 0 0.0 0 0.0 0.9652681350708008 0.18734872341156006 0.21605448424816132 0.0 0.0 1.0 0.4565003216266632 0.6219629049301147 0 1.0 0 0.0 0 0.0 0 0.0 1.0855131149291992 0.186923086643219 0.21605448424816132 0.0 0.0 0.999969482421875 0.5216641426086426 0.6186676621437073 0 1.0 0 0.0 0 0.0 0 0.0 1.073866844177246 0.19034910202026367 0.21605448424816132 0.0 0.0 1.0 0.5154626369476318 0.6225020289421082 0 1.0 0 0.0 0 0.0 0 0.0 0.9549038410186768 0.18334868550300598 0.21605448424816132 0.0 0.0 1.0 0.45088422298431396 0.6181330680847168 0 1.0 0 0.0 0 0.0 0 0.0 1.0855131149291992 0.186923086643219 0.21605448424816132 0.0 0.0 0.999969482421875 0.5216641426086426 0.6186676621437073 0 1.0 0 0.0 0 0.0 0 0.0 0.9652681350708008 0.18734872341156006 0.21605448424816132 0.0 0.0 1.0 0.4565003216266632 0.6219629049301147 0 1.0 0 0.0 0 0.0 0 0.0 0.9549038410186768 0.18334868550300598 0.21605448424816132 0.0 0.0 1.0 0.45088422298431396 0.6181330680847168 0 1.0 0 0.0 0 0.0 0 0.0 1.096672773361206 0.18273574113845825 0.21605448424816132 0.0 0.0 1.0 0.5275639891624451 0.6141082048416138 0 1.0 0 0.0 0 0.0 0 0.0 1.0855131149291992 0.186923086643219 0.21605448424816132 0.0 0.0 0.999969482421875 0.5216641426086426 0.6186676621437073 0 1.0 0 0.0 0 0.0 0 0.0 0.944894552230835 0.1786213517189026 0.21605448424816132 0.0 0.0 1.0 0.44546952843666077 0.6135957837104797 0 1.0 0 0.0 0 0.0 0 0.0 1.096672773361206 0.18273574113845825 0.21605448424816132 0.0 0.0 1.0 0.5275639891624451 0.6141082048416138 0 1.0 0 0.0 0 0.0 0 0.0 0.9549038410186768 0.18334868550300598 0.21605448424816132 0.0 0.0 1.0 0.45088422298431396 0.6181330680847168 0 1.0 0 0.0 0 0.0 0 0.0 0.944894552230835 0.1786213517189026 0.21605448424816132 0.0 0.0 1.0 0.44546952843666077 0.6135957837104797 0 1.0 0 0.0 0 0.0 0 0.0 1.1073460578918457 0.17778706550598145 0.21605448424816132 0.0 0.0 1.0 0.5331688523292542 0.6088377237319946 0 1.0 0 0.0 0 0.0 0 0.0 1.096672773361206 0.18273574113845825 0.21605448424816132 0.0 0.0 1.0 0.5275639891624451 0.6141082048416138 0 1.0 0 0.0 0 0.0 0 0.0 0.9352405071258545 0.17316675186157227 0.21605448424816132 0.0 0.0 1.0 0.44025203585624695 0.6083549857139587 0 1.0 0 0.0 0 0.0 0 0.0 1.1073460578918457 0.17778706550598145 0.21605448424816132 0.0 0.0 1.0 0.5331688523292542 0.6088377237319946 0 1.0 0 0.0 0 0.0 0 0.0 0.944894552230835 0.1786213517189026 0.21605448424816132 0.0 0.0 1.0 0.44546952843666077 0.6135957837104797 0 1.0 0 0.0 0 0.0 0 0.0 0.9352405071258545 0.17316675186157227 0.21605448424816132 0.0 0.0 1.0 0.44025203585624695 0.6083549857139587 0 1.0 0 0.0 0 0.0 0 0.0 1.1175329685211182 0.17207705974578857 0.21605448424816132 0.0 0.0 1.0 0.5384877324104309 0.60286545753479 0 1.0 0 0.0 0 0.0 0 0.0 1.1073460578918457 0.17778706550598145 0.21605448424816132 0.0 0.0 1.0 0.5331688523292542 0.6088377237319946 0 1.0 0 0.0 0 0.0 0 0.0 0.9259414672851562 0.16698485612869263 0.21605446934700012 0.0 0.0 0.999969482421875 0.4352259635925293 0.6024113893508911 0 1.0 0 0.0 0 0.0 0 0.0 1.1175329685211182 0.17207705974578857 0.21605448424816132 0.0 0.0 1.0 0.5384877324104309 0.60286545753479 0 1.0 0 0.0 0 0.0 0 0.0 0.9352405071258545 0.17316675186157227 0.21605448424816132 0.0 0.0 1.0 0.44025203585624695 0.6083549857139587 0 1.0 0 0.0 0 0.0 0 0.0 0.9259414672851562 0.16698485612869263 0.21605446934700012 0.0 0.0 0.999969482421875 0.4352259635925293 0.6024113893508911 0 1.0 0 0.0 0 0.0 0 0.0 1.1272332668304443 0.16560572385787964 0.21605446934700012 0.0 0.0 0.999969482421875 0.5435309410095215 0.5961958169937134 0 1.0 0 0.0 0 0.0 0 0.0 1.1175329685211182 0.17207705974578857 0.21605448424816132 0.0 0.0 1.0 0.5384877324104309 0.60286545753479 0 1.0 0 0.0 0 0.0 0 0.0 0.9169976711273193 0.16007569432258606 0.21605446934700012 0.0 0.0 1.0 0.4303847849369049 0.5957629680633545 0 1.0 0 0.0 0 0.0 0 0.0 1.1272332668304443 0.16560572385787964 0.21605446934700012 0.0 0.0 0.999969482421875 0.5435309410095215 0.5961958169937134 0 1.0 0 0.0 0 0.0 0 0.0 0.9259414672851562 0.16698485612869263 0.21605446934700012 0.0 0.0 0.999969482421875 0.4352259635925293 0.6024113893508911 0 1.0 0 0.0 0 0.0 0 0.0 0.9169976711273193 0.16007569432258606 0.21605446934700012 0.0 0.0 1.0 0.4303847849369049 0.5957629680633545 0 1.0 0 0.0 0 0.0 0 0.0 1.1364471912384033 0.15837302803993225 0.21605446934700012 0.0 0.0 0.999969482421875 0.5483102798461914 0.5888283848762512 0 1.0 0 0.0 0 0.0 0 0.0 1.1272332668304443 0.16560572385787964 0.21605446934700012 0.0 0.0 0.999969482421875 0.5435309410095215 0.5961958169937134 0 1.0 0 0.0 0 0.0 0 0.0 0.9084088802337646 0.15243923664093018 0.21605446934700012 0.0 0.0 1.0 0.4257209300994873 0.588405191898346 0 1.0 0 0.0 0 0.0 0 0.0 1.1364471912384033 0.15837302803993225 0.21605446934700012 0.0 0.0 0.999969482421875 0.5483102798461914 0.5888283848762512 0 1.0 0 0.0 0 0.0 0 0.0 0.9169976711273193 0.16007569432258606 0.21605446934700012 0.0 0.0 1.0 0.4303847849369049 0.5957629680633545 0 1.0 0 0.0 0 0.0 0 0.0 0.9084088802337646 0.15243923664093018 0.21605446934700012 0.0 0.0 1.0 0.4257209300994873 0.588405191898346 0 1.0 0 0.0 0 0.0 0 0.0 1.145174503326416 0.1503790020942688 0.21605446934700012 0.0 0.0 1.0 0.552838146686554 0.5807584524154663 0 1.0 0 0.0 0 0.0 0 0.0 1.1364471912384033 0.15837302803993225 0.21605446934700012 0.0 0.0 0.999969482421875 0.5483102798461914 0.5888283848762512 0 1.0 0 0.0 0 0.0 0 0.0 0.9001753330230713 0.14407548308372498 0.21605446934700012 0.0 0.0 0.999969482421875 0.42122650146484375 0.580331563949585 0 1.0 0 0.0 0 0.0 0 0.0 1.145174503326416 0.1503790020942688 0.21605446934700012 0.0 0.0 1.0 0.552838146686554 0.5807584524154663 0 1.0 0 0.0 0 0.0 0 0.0 0.9084088802337646 0.15243923664093018 0.21605446934700012 0.0 0.0 1.0 0.4257209300994873 0.588405191898346 0 1.0 0 0.0 0 0.0 0 0.0 0.9001753330230713 0.14407548308372498 0.21605446934700012 0.0 0.0 0.999969482421875 0.42122650146484375 0.580331563949585 0 1.0 0 0.0 0 0.0 0 0.0 1.1534152030944824 0.14162364602088928 0.21605446934700012 0.0 0.0 1.0 0.5571272969245911 0.5719776153564453 0 1.0 0 0.0 0 0.0 0 0.0 1.145174503326416 0.1503790020942688 0.21605446934700012 0.0 0.0 1.0 0.552838146686554 0.5807584524154663 0 1.0 0 0.0 0 0.0 0 0.0 0.8924548625946045 0.1350696086883545 0.21605446934700012 0.0 0.0 0.999969482421875 0.41697314381599426 0.571623682975769 0 1.0 0 0.0 0 0.0 0 0.0 1.1534152030944824 0.14162364602088928 0.21605446934700012 0.0 0.0 1.0 0.5571272969245911 0.5719776153564453 0 1.0 0 0.0 0 0.0 0 0.0 0.9001753330230713 0.14407548308372498 0.21605446934700012 0.0 0.0 0.999969482421875 0.42122650146484375 0.580331563949585 0 1.0 0 0.0 0 0.0 0 0.0 0.8924548625946045 0.1350696086883545 0.21605446934700012 0.0 0.0 0.999969482421875 0.41697314381599426 0.571623682975769 0 1.0 0 0.0 0 0.0 0 0.0 1.1610651016235352 0.13208264112472534 0.21605446934700012 0.0 0.0 1.0 0.5611436367034912 0.562463641166687 0 1.0 0 0.0 0 0.0 0 0.0 1.1534152030944824 0.14162364602088928 0.21605446934700012 0.0 0.0 1.0 0.5571272969245911 0.5719776153564453 0 1.0 0 0.0 0 0.0 0 0.0 0.8854057788848877 0.1255066990852356 0.21605446934700012 0.0 0.0 1.0 0.4130285978317261 0.5623630285263062 0 1.0 0 0.0 0 0.0 0 0.0 1.1610651016235352 0.13208264112472534 0.21605446934700012 0.0 0.0 1.0 0.5611436367034912 0.562463641166687 0 1.0 0 0.0 0 0.0 0 0.0 0.8924548625946045 0.1350696086883545 0.21605446934700012 0.0 0.0 0.999969482421875 0.41697314381599426 0.571623682975769 0 1.0 0 0.0 0 0.0 0 0.0 0.8854057788848877 0.1255066990852356 0.21605446934700012 0.0 0.0 1.0 0.4130285978317261 0.5623630285263062 0 1.0 0 0.0 0 0.0 0 0.0 1.1680192947387695 0.12173163890838623 0.21605446934700012 0.0 0.0 0.999969482421875 0.5648558139801025 0.5521864295005798 0 1.0 0 0.0 0 0.0 0 0.0 1.1610651016235352 0.13208264112472534 0.21605446934700012 0.0 0.0 1.0 0.5611436367034912 0.562463641166687 0 1.0 0 0.0 0 0.0 0 0.0 0.8790280818939209 0.11538678407669067 0.21605446934700012 0.0 0.0 1.0 0.4093787670135498 0.5525389909744263 0 1.0 0 0.0 0 0.0 0 0.0 1.0230786800384521 0.12097030878067017 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.4871401786804199 0.5616525411605835 0 1.0 0 0.0 0 0.0 0 0.0 0.8854057788848877 0.1255066990852356 0.21605446934700012 0.0 0.0 1.0 0.4130285978317261 0.5623630285263062 0 1.0 0 0.0 0 0.0 0 0.0 1.0230786800384521 0.12097030878067017 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.4871401786804199 0.5616525411605835 0 1.0 0 0.0 0 0.0 0 0.0 1.0283715724945068 0.12113326787948608 0.21605446934700012 0.0 0.0 1.0 0.49023085832595825 0.5616816878318787 0 1.0 0 0.0 0 0.0 0 0.0 0.8854057788848877 0.1255066990852356 0.21605446934700012 0.0 0.0 1.0 0.4130285978317261 0.5623630285263062 0 1.0 0 0.0 0 0.0 0 0.0 1.0283715724945068 0.12113326787948608 0.21605446934700012 0.0 0.0 1.0 0.49023085832595825 0.5616816878318787 0 1.0 0 0.0 0 0.0 0 0.0 1.1680192947387695 0.12173163890838623 0.21605446934700012 0.0 0.0 0.999969482421875 0.5648558139801025 0.5521864295005798 0 1.0 0 0.0 0 0.0 0 0.0 0.8854057788848877 0.1255066990852356 0.21605446934700012 0.0 0.0 1.0 0.4130285978317261 0.5623630285263062 0 1.0 0 0.0 0 0.0 0 0.0 1.0283715724945068 0.12113326787948608 0.21605446934700012 0.0 0.0 1.0 0.49023085832595825 0.5616816878318787 0 1.0 0 0.0 0 0.0 0 0.0 1.0333290100097656 0.12097880244255066 0.21605446934700012 0.0 0.0 1.0 0.4931207001209259 0.5613721013069153 0 1.0 0 0.0 0 0.0 0 0.0 1.1680192947387695 0.12173163890838623 0.21605446934700012 0.0 0.0 0.999969482421875 0.5648558139801025 0.5521864295005798 0 1.0 0 0.0 0 0.0 0 0.0 1.0333290100097656 0.12097880244255066 0.21605446934700012 0.0 0.0 1.0 0.4931207001209259 0.5613721013069153 0 1.0 0 0.0 0 0.0 0 0.0 1.1742777824401855 0.11057066917419434 0.21605446934700012 0.0 0.0 1.0 0.5682803988456726 0.5411200523376465 0 1.0 0 0.0 0 0.0 0 0.0 1.1680192947387695 0.12173163890838623 0.21605446934700012 0.0 0.0 0.999969482421875 0.5648558139801025 0.5521864295005798 0 1.0 0 0.0 0 0.0 0 0.0 1.0381596088409424 0.12051543593406677 0.21605446934700012 0.0 -0.0002136295661330223 0.999969482421875 0.4959324598312378 0.5607290267944336 0 1.0 0 0.0 0 0.0 0 0.0 1.1742777824401855 0.11057066917419434 0.21605446934700012 0.0 0.0 1.0 0.5682803988456726 0.5411200523376465 0 1.0 0 0.0 0 0.0 0 0.0 1.0333290100097656 0.12097880244255066 0.21605446934700012 0.0 0.0 1.0 0.4931207001209259 0.5613721013069153 0 1.0 0 0.0 0 0.0 0 0.0 0.8790280818939209 0.11538678407669067 0.21605446934700012 0.0 0.0 1.0 0.4093787670135498 0.5525389909744263 0 1.0 0 0.0 0 0.0 0 0.0 1.0179414749145508 0.12048140168190002 0.21605446934700012 0.0 0.0 1.0 0.48413458466529846 0.5612612962722778 0 1.0 0 0.0 0 0.0 0 0.0 1.0230786800384521 0.12097030878067017 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.4871401786804199 0.5616525411605835 0 1.0 0 0.0 0 0.0 0 0.0 1.0428638458251953 0.11974316835403442 0.21605446934700012 0.0 0.0 1.0 0.49866729974746704 0.5597536563873291 0 1.0 0 0.0 0 0.0 0 0.0 1.1742777824401855 0.11057066917419434 0.21605446934700012 0.0 0.0 1.0 0.5682803988456726 0.5411200523376465 0 1.0 0 0.0 0 0.0 0 0.0 1.0381596088409424 0.12051543593406677 0.21605446934700012 0.0 -0.0002136295661330223 0.999969482421875 0.4959324598312378 0.5607290267944336 0 1.0 0 0.0 0 0.0 0 0.0 0.8790280818939209 0.11538678407669067 0.21605446934700012 0.0 0.0 1.0 0.4093787670135498 0.5525389909744263 0 1.0 0 0.0 0 0.0 0 0.0 1.0129599571228027 0.11966654658317566 0.21605446934700012 0.0 0.0 0.999969482421875 0.48121345043182373 0.5605089664459229 0 1.0 0 0.0 0 0.0 0 0.0 1.0179414749145508 0.12048140168190002 0.21605446934700012 0.0 0.0 1.0 0.48413458466529846 0.5612612962722778 0 1.0 0 0.0 0 0.0 0 0.0 1.0474414825439453 0.11866196990013123 0.21605446934700012 0.0 0.0 0.999969482421875 0.5013262033462524 0.5584465265274048 0 1.0 0 0.0 0 0.0 0 0.0 1.1742777824401855 0.11057066917419434 0.21605446934700012 0.0 0.0 1.0 0.5682803988456726 0.5411200523376465 0 1.0 0 0.0 0 0.0 0 0.0 1.0428638458251953 0.11974316835403442 0.21605446934700012 0.0 0.0 1.0 0.49866729974746704 0.5597536563873291 0 1.0 0 0.0 0 0.0 0 0.0 0.8790280818939209 0.11538678407669067 0.21605446934700012 0.0 0.0 1.0 0.4093787670135498 0.5525389909744263 0 1.0 0 0.0 0 0.0 0 0.0 1.008134126663208 0.11852577328681946 0.21605446934700012 0.0 0.0 1.0 0.4783760607242584 0.5593962669372559 0 1.0 0 0.0 0 0.0 0 0.0 1.0129599571228027 0.11966654658317566 0.21605446934700012 0.0 0.0 0.999969482421875 0.48121345043182373 0.5605089664459229 0 1.0 0 0.0 0 0.0 0 0.0 1.0518927574157715 0.11727187037467957 0.21605446934700012 0.0 0.0 0.999969482421875 0.503910481929779 0.5568075776100159 0 1.0 0 0.0 0 0.0 0 0.0 1.1742777824401855 0.11057066917419434 0.21605446934700012 0.0 0.0 1.0 0.5682803988456726 0.5411200523376465 0 1.0 0 0.0 0 0.0 0 0.0 1.0474414825439453 0.11866196990013123 0.21605446934700012 0.0 0.0 0.999969482421875 0.5013262033462524 0.5584465265274048 0 1.0 0 0.0 0 0.0 0 0.0 0.8790280818939209 0.11538678407669067 0.21605446934700012 0.0 0.0 1.0 0.4093787670135498 0.5525389909744263 0 1.0 0 0.0 0 0.0 0 0.0 1.0034639835357666 0.11705905199050903 0.21605446934700012 0.0 0.0 1.0 0.47562140226364136 0.5579229593276978 0 1.0 0 0.0 0 0.0 0 0.0 1.008134126663208 0.11852577328681946 0.21605446934700012 0.0 0.0 1.0 0.4783760607242584 0.5593962669372559 0 1.0 0 0.0 0 0.0 0 0.0 1.0562174320220947 0.11557283997535706 0.21605446934700012 0.0 0.0 1.0 0.5064213275909424 0.5548363924026489 0 1.0 0 0.0 0 0.0 0 0.0 1.1742777824401855 0.11057066917419434 0.21605446934700012 0.0 0.0 1.0 0.5682803988456726 0.5411200523376465 0 1.0 0 0.0 0 0.0 0 0.0 1.0518927574157715 0.11727187037467957 0.21605446934700012 0.0 0.0 0.999969482421875 0.503910481929779 0.5568075776100159 0 1.0 0 0.0 0 0.0 0 0.0 0.8790280818939209 0.11538678407669067 0.21605446934700012 0.0 0.0 1.0 0.4093787670135498 0.5525389909744263 0 1.0 0 0.0 0 0.0 0 0.0 0.9989495277404785 0.11526638269424438 0.21605446934700012 0.0 0.0 0.999969482421875 0.47294849157333374 0.5560883283615112 0 1.0 0 0.0 0 0.0 0 0.0 1.0034639835357666 0.11705905199050903 0.21605446934700012 0.0 0.0 1.0 0.47562140226364136 0.5579229593276978 0 1.0 0 0.0 0 0.0 0 0.0 1.0604157447814941 0.11356490850448608 0.21605446934700012 0.0 0.0 1.0 0.508860170841217 0.5525315999984741 0 1.0 0 0.0 0 0.0 0 0.0 1.1742777824401855 0.11057066917419434 0.21605446934700012 0.0 0.0 1.0 0.5682803988456726 0.5411200523376465 0 1.0 0 0.0 0 0.0 0 0.0 1.0562174320220947 0.11557283997535706 0.21605446934700012 0.0 0.0 1.0 0.5064213275909424 0.5548363924026489 0 1.0 0 0.0 0 0.0 0 0.0 0.8733217716217041 0.10470986366271973 0.21605446934700012 0.0 0.0 1.0 0.40601009130477905 0.5421374440193176 0 1.0 0 0.0 0 0.0 0 0.0 0.9989495277404785 0.11526638269424438 0.21605446934700012 0.0 0.0 0.999969482421875 0.47294849157333374 0.5560883283615112 0 1.0 0 0.0 0 0.0 0 0.0 0.8790280818939209 0.11538678407669067 0.21605446934700012 0.0 0.0 1.0 0.4093787670135498 0.5525389909744263 0 1.0 0 0.0 0 0.0 0 0.0 0.8733217716217041 0.10470986366271973 0.21605446934700012 0.0 0.0 1.0 0.40601009130477905 0.5421374440193176 0 1.0 0 0.0 0 0.0 0 0.0 0.9945907592773438 0.11314776539802551 0.21605446934700012 0.0 0.0 1.0 0.4703560471534729 0.5538910627365112 0 1.0 0 0.0 0 0.0 0 0.0 0.9989495277404785 0.11526638269424438 0.21605446934700012 0.0 0.0 0.999969482421875 0.47294849157333374 0.5560883283615112 0 1.0 0 0.0 0 0.0 0 0.0 1.0644874572753906 0.11124807596206665 0.21605446934700012 0.0 0.0 0.999969482421875 0.5112283229827881 0.5498915910720825 0 1.0 0 0.0 0 0.0 0 0.0 1.1742777824401855 0.11057066917419434 0.21605446934700012 0.0 0.0 1.0 0.5682803988456726 0.5411200523376465 0 1.0 0 0.0 0 0.0 0 0.0 1.0604157447814941 0.11356490850448608 0.21605446934700012 0.0 0.0 1.0 0.508860170841217 0.5525315999984741 0 1.0 0 0.0 0 0.0 0 0.0 0.8733217716217041 0.10470986366271973 0.21605446934700012 0.0 0.0 1.0 0.40601009130477905 0.5421374440193176 0 1.0 0 0.0 0 0.0 0 0.0 0.9903876781463623 0.1107032299041748 0.21605446934700012 0.0 0.0 1.0 0.46784284710884094 0.5513290166854858 0 1.0 0 0.0 0 0.0 0 0.0 0.9945907592773438 0.11314776539802551 0.21605446934700012 0.0 0.0 1.0 0.4703560471534729 0.5538910627365112 0 1.0 0 0.0 0 0.0 0 0.0 1.0684328079223633 0.10862231254577637 0.21605446934700012 0.0 0.0 1.0 0.5135274529457092 0.5469138622283936 0 1.0 0 0.0 0 0.0 0 0.0 1.1742777824401855 0.11057066917419434 0.21605446934700012 0.0 0.0 1.0 0.5682803988456726 0.5411200523376465 0 1.0 0 0.0 0 0.0 0 0.0 1.0644874572753906 0.11124807596206665 0.21605446934700012 0.0 0.0 0.999969482421875 0.5112283229827881 0.5498915910720825 0 1.0 0 0.0 0 0.0 0 0.0 0.8733217716217041 0.10470986366271973 0.21605446934700012 0.0 0.0 1.0 0.40601009130477905 0.5421374440193176 0 1.0 0 0.0 0 0.0 0 0.0 0.9863402843475342 0.10793274641036987 0.21605446934700012 0.0 0.0 0.999969482421875 0.46540743112564087 0.5483993887901306 0 1.0 0 0.0 0 0.0 0 0.0 0.9903876781463623 0.1107032299041748 0.21605446934700012 0.0 0.0 1.0 0.46784284710884094 0.5513290166854858 0 1.0 0 0.0 0 0.0 0 0.0 1.0684328079223633 0.10862231254577637 0.21605446934700012 0.0 0.0 1.0 0.5135274529457092 0.5469138622283936 0 1.0 0 0.0 0 0.0 0 0.0 1.1798405647277832 0.09859970211982727 0.21605446934700012 0.0 0.0 1.0 0.5714326500892639 0.5292354226112366 0 1.0 0 0.0 0 0.0 0 0.0 1.1742777824401855 0.11057066917419434 0.21605446934700012 0.0 0.0 1.0 0.5682803988456726 0.5411200523376465 0 1.0 0 0.0 0 0.0 0 0.0 1.072251558303833 0.10568764805793762 0.21605446934700012 0.0 0.0 1.0 0.5157588124275208 0.5435953140258789 0 1.0 0 0.0 0 0.0 0 0.0 1.1798405647277832 0.09859970211982727 0.21605446934700012 0.0 0.0 1.0 0.5714326500892639 0.5292354226112366 0 1.0 0 0.0 0 0.0 0 0.0 1.0684328079223633 0.10862231254577637 0.21605446934700012 0.0 0.0 1.0 0.5135274529457092 0.5469138622283936 0 1.0 0 0.0 0 0.0 0 0.0 0.8733217716217041 0.10470986366271973 0.21605446934700012 0.0 0.0 1.0 0.40601009130477905 0.5421374440193176 0 1.0 0 0.0 0 0.0 0 0.0 0.9824485778808594 0.10483631491661072 0.21605446934700012 0.0 0.0 1.0 0.46304842829704285 0.5450987815856934 0 1.0 0 0.0 0 0.0 0 0.0 0.9863402843475342 0.10793274641036987 0.21605446934700012 0.0 0.0 0.999969482421875 0.46540743112564087 0.5483993887901306 0 1.0 0 0.0 0 0.0 0 0.0 1.075943946838379 0.10244408249855042 0.21605446934700012 0.0 0.0 0.999969482421875 0.5179241895675659 0.5399326086044312 0 1.0 0 0.0 0 0.0 0 0.0 1.1798405647277832 0.09859970211982727 0.21605446934700012 0.0 0.0 1.0 0.5714326500892639 0.5292354226112366 0 1.0 0 0.0 0 0.0 0 0.0 1.072251558303833 0.10568764805793762 0.21605446934700012 0.0 0.0 1.0 0.5157588124275208 0.5435953140258789 0 1.0 0 0.0 0 0.0 0 0.0 0.8733217716217041 0.10470986366271973 0.21605446934700012 0.0 0.0 1.0 0.40601009130477905 0.5421374440193176 0 1.0 0 0.0 0 0.0 0 0.0 0.9787123203277588 0.10141396522521973 0.21605446934700012 0.0 0.0 1.0 0.46076416969299316 0.541422963142395 0 1.0 0 0.0 0 0.0 0 0.0 0.9824485778808594 0.10483631491661072 0.21605446934700012 0.0 0.0 1.0 0.46304842829704285 0.5450987815856934 0 1.0 0 0.0 0 0.0 0 0.0 0.8682868480682373 0.09347590804100037 0.21605446934700012 0.0 0.0 1.0 0.4029099941253662 0.5311414003372192 0 1.0 0 0.0 0 0.0 0 0.0 0.9787123203277588 0.10141396522521973 0.21605446934700012 0.0 0.0 1.0 0.46076416969299316 0.541422963142395 0 1.0 0 0.0 0 0.0 0 0.0 0.8733217716217041 0.10470986366271973 0.21605446934700012 0.0 0.0 1.0 0.40601009130477905 0.5421374440193176 0 1.0 0 0.0 0 0.0 0 0.0 1.0795097351074219 0.09889158606529236 0.21605446934700012 0.0 0.0 0.999969482421875 0.520024836063385 0.5359216332435608 0 1.0 0 0.0 0 0.0 0 0.0 1.1798405647277832 0.09859970211982727 0.21605446934700012 0.0 0.0 1.0 0.5714326500892639 0.5292354226112366 0 1.0 0 0.0 0 0.0 0 0.0 1.075943946838379 0.10244408249855042 0.21605446934700012 0.0 0.0 0.999969482421875 0.5179241895675659 0.5399326086044312 0 1.0 0 0.0 0 0.0 0 0.0 0.8682868480682373 0.09347590804100037 0.21605446934700012 0.0 0.0 1.0 0.4029099941253662 0.5311414003372192 0 1.0 0 0.0 0 0.0 0 0.0 0.9751315116882324 0.09766566753387451 0.21605446934700012 0.0 0.0 1.0 0.4585532248020172 0.5373673439025879 0 1.0 0 0.0 0 0.0 0 0.0 0.9787123203277588 0.10141396522521973 0.21605446934700012 0.0 0.0 1.0 0.46076416969299316 0.541422963142395 0 1.0 0 0.0 0 0.0 0 0.0 1.082874059677124 0.09504234790802002 0.21605446934700012 0.0 0.0 0.999969482421875 0.5220193862915039 0.5315750241279602 0 1.0 0 0.0 0 0.0 0 0.0 1.1798405647277832 0.09859970211982727 0.21605446934700012 0.0 0.0 1.0 0.5714326500892639 0.5292354226112366 0 1.0 0 0.0 0 0.0 0 0.0 1.0795097351074219 0.09889158606529236 0.21605446934700012 0.0 0.0 0.999969482421875 0.520024836063385 0.5359216332435608 0 1.0 0 0.0 0 0.0 0 0.0 1.082874059677124 0.09504234790802002 0.21605446934700012 0.0 0.0 0.999969482421875 0.5220193862915039 0.5315750241279602 0 1.0 0 0.0 0 0.0 0 0.0 1.1847076416015625 0.08581876754760742 0.21605446934700012 0.0 0.0 1.0 0.57432621717453 0.5165024995803833 0 1.0 0 0.0 0 0.0 0 0.0 1.1798405647277832 0.09859970211982727 0.21605446934700012 0.0 0.0 1.0 0.5714326500892639 0.5292354226112366 0 1.0 0 0.0 0 0.0 0 0.0 0.8682868480682373 0.09347590804100037 0.21605446934700012 0.0 0.0 1.0 0.4029099941253662 0.5311414003372192 0 1.0 0 0.0 0 0.0 0 0.0 0.9717772006988525 0.09363764524459839 0.21605446934700012 0.0 0.0 1.0 0.45645686984062195 0.5329769849777222 0 1.0 0 0.0 0 0.0 0 0.0 0.9751315116882324 0.09766566753387451 0.21605446934700012 0.0 0.0 1.0 0.4585532248020172 0.5373673439025879 0 1.0 0 0.0 0 0.0 0 0.0 1.085960865020752 0.09090852737426758 0.21605446934700012 0.0 0.0 1.0 0.5238659977912903 0.5269047021865845 0 1.0 0 0.0 0 0.0 0 0.0 1.1847076416015625 0.08581876754760742 0.21605446934700012 0.0 0.0 1.0 0.57432621717453 0.5165024995803833 0 1.0 0 0.0 0 0.0 0 0.0 1.082874059677124 0.09504234790802002 0.21605446934700012 0.0 0.0 0.999969482421875 0.5220193862915039 0.5315750241279602 0 1.0 0 0.0 0 0.0 0 0.0 0.8682868480682373 0.09347590804100037 0.21605446934700012 0.0 0.0 1.0 0.4029099941253662 0.5311414003372192 0 1.0 0 0.0 0 0.0 0 0.0 0.9687197208404541 0.08937612175941467 0.21605446934700012 0.0 0.0 0.999969482421875 0.45451629161834717 0.5282981395721436 0 1.0 0 0.0 0 0.0 0 0.0 0.9717772006988525 0.09363764524459839 0.21605446934700012 0.0 0.0 1.0 0.45645686984062195 0.5329769849777222 0 1.0 0 0.0 0 0.0 0 0.0 0.8639230728149414 0.08168494701385498 0.21605446934700012 0.0 0.0 1.0 0.4000667333602905 0.5195320844650269 0 1.0 0 0.0 0 0.0 0 0.0 0.9687197208404541 0.08937612175941467 0.21605446934700012 0.0 0.0 0.999969482421875 0.45451629161834717 0.5282981395721436 0 1.0 0 0.0 0 0.0 0 0.0 0.8682868480682373 0.09347590804100037 0.21605446934700012 0.0 0.0 1.0 0.4029099941253662 0.5311414003372192 0 1.0 0 0.0 0 0.0 0 0.0 1.0887703895568848 0.08649012446403503 0.21605446934700012 0.0 0.0 1.0 0.5255663990974426 0.5219049453735352 0 1.0 0 0.0 0 0.0 0 0.0 1.1847076416015625 0.08581876754760742 0.21605446934700012 0.0 0.0 1.0 0.57432621717453 0.5165024995803833 0 1.0 0 0.0 0 0.0 0 0.0 1.085960865020752 0.09090852737426758 0.21605446934700012 0.0 0.0 1.0 0.5238659977912903 0.5269047021865845 0 1.0 0 0.0 0 0.0 0 0.0 0.8639230728149414 0.08168494701385498 0.21605446934700012 0.0 0.0 1.0 0.4000667333602905 0.5195320844650269 0 1.0 0 0.0 0 0.0 0 0.0 0.9659590721130371 0.08488109707832336 0.21605446934700012 0.0 0.0 1.0 0.45273035764694214 0.52332603931427 0 1.0 0 0.0 0 0.0 0 0.0 0.9687197208404541 0.08937612175941467 0.21605446934700012 0.0 0.0 0.999969482421875 0.45451629161834717 0.5282981395721436 0 1.0 0 0.0 0 0.0 0 0.0 1.0913023948669434 0.081787109375 0.21605446934700012 0.0 0.0 1.0 0.5271219611167908 0.5165688991546631 0 1.0 0 0.0 0 0.0 0 0.0 1.1847076416015625 0.08581876754760742 0.21605446934700012 0.0 0.0 1.0 0.57432621717453 0.5165024995803833 0 1.0 0 0.0 0 0.0 0 0.0 1.0887703895568848 0.08649012446403503 0.21605446934700012 0.0 0.0 1.0 0.5255663990974426 0.5219049453735352 0 1.0 0 0.0 0 0.0 0 0.0 1.0913023948669434 0.081787109375 0.21605446934700012 0.0 0.0 1.0 0.5271219611167908 0.5165688991546631 0 1.0 0 0.0 0 0.0 0 0.0 1.1888792514801025 0.0722278356552124 0.21605446934700012 0.0 0.0 1.0 0.5769736170768738 0.5028921365737915 0 1.0 0 0.0 0 0.0 0 0.0 1.1847076416015625 0.08581876754760742 0.21605446934700012 0.0 0.0 1.0 0.57432621717453 0.5165024995803833 0 1.0 0 0.0 0 0.0 0 0.0 0.8639230728149414 0.08168494701385498 0.21605446934700012 0.0 0.0 1.0 0.4000667333602905 0.5195320844650269 0 1.0 0 0.0 0 0.0 0 0.0 0.9634950160980225 0.08015254139900208 0.21605446934700012 0.0 0.0 1.0 0.45109784603118896 0.5180555582046509 0 1.0 0 0.0 0 0.0 0 0.0 0.9659590721130371 0.08488109707832336 0.21605446934700012 0.0 0.0 1.0 0.45273035764694214 0.52332603931427 0 1.0 0 0.0 0 0.0 0 0.0 1.0935571193695068 0.07679951190948486 0.21605446934700012 0.0 0.0 0.999969482421875 0.528533935546875 0.5108895301818848 0 1.0 0 0.0 0 0.0 0 0.0 1.1888792514801025 0.0722278356552124 0.21605446934700012 0.0 0.0 1.0 0.5769736170768738 0.5028921365737915 0 1.0 0 0.0 0 0.0 0 0.0 1.0913023948669434 0.081787109375 0.21605446934700012 0.0 0.0 1.0 0.5271219611167908 0.5165688991546631 0 1.0 0 0.0 0 0.0 0 0.0 0.8602306842803955 0.06933698058128357 0.21605446934700012 0.0 0.0 1.0 0.39746999740600586 0.5072903633117676 0 1.0 0 0.0 0 0.0 0 0.0 0.9634950160980225 0.08015254139900208 0.21605446934700012 0.0 0.0 1.0 0.45109784603118896 0.5180555582046509 0 1.0 0 0.0 0 0.0 0 0.0 0.8639230728149414 0.08168494701385498 0.21605446934700012 0.0 0.0 1.0 0.4000667333602905 0.5195320844650269 0 1.0 0 0.0 0 0.0 0 0.0 0.8602306842803955 0.06933698058128357 0.21605446934700012 0.0 0.0 1.0 0.39746999740600586 0.5072903633117676 0 1.0 0 0.0 0 0.0 0 0.0 0.9613277912139893 0.0751904845237732 0.21605446934700012 0.0 0.0 1.0 0.4496181607246399 0.512480616569519 0 1.0 0 0.0 0 0.0 0 0.0 0.9634950160980225 0.08015254139900208 0.21605446934700012 0.0 0.0 1.0 0.45109784603118896 0.5180555582046509 0 1.0 0 0.0 0 0.0 0 0.0 1.0955345630645752 0.07152733206748962 0.21605446934700012 0.0 0.0 1.0 0.5298032760620117 0.5048590898513794 0 1.0 0 0.0 0 0.0 0 0.0 1.1888792514801025 0.0722278356552124 0.21605446934700012 0.0 0.0 1.0 0.5769736170768738 0.5028921365737915 0 1.0 0 0.0 0 0.0 0 0.0 1.0935571193695068 0.07679951190948486 0.21605446934700012 0.0 0.0 0.999969482421875 0.528533935546875 0.5108895301818848 0 1.0 0 0.0 0 0.0 0 0.0 0.8602306842803955 0.06933698058128357 0.21605446934700012 0.0 0.0 1.0 0.39746999740600586 0.5072903633117676 0 1.0 0 0.0 0 0.0 0 0.0 0.9594573974609375 0.06999492645263672 0.21605446934700012 0.0 0.0 1.0 0.44829061627388 0.5065951347351074 0 1.0 0 0.0 0 0.0 0 0.0 0.9613277912139893 0.0751904845237732 0.21605446934700012 0.0 0.0 1.0 0.4496181607246399 0.512480616569519 0 1.0 0 0.0 0 0.0 0 0.0 1.0955345630645752 0.07152733206748962 0.21605446934700012 0.0 0.0 1.0 0.5298032760620117 0.5048590898513794 0 1.0 0 0.0 0 0.0 0 0.0 1.1923551559448242 0.0578269362449646 0.21605446934700012 0.0 0.0 1.0 0.5793853402137756 0.4883795976638794 0 1.0 0 0.0 0 0.0 0 0.0 1.1888792514801025 0.0722278356552124 0.21605446934700012 0.0 0.0 1.0 0.5769736170768738 0.5028921365737915 0 1.0 0 0.0 0 0.0 0 0.0 1.0972347259521484 0.06597055494785309 0.21605446934700012 0.0 0.0 1.0 0.5309305191040039 0.49846935272216797 0 1.0 0 0.0 0 0.0 0 0.0 1.1923551559448242 0.0578269362449646 0.21605446934700012 0.0 0.0 1.0 0.5793853402137756 0.4883795976638794 0 1.0 0 0.0 0 0.0 0 0.0 1.0955345630645752 0.07152733206748962 0.21605446934700012 0.0 0.0 1.0 0.5298032760620117 0.5048590898513794 0 1.0 0 0.0 0 0.0 0 0.0 0.8602306842803955 0.06933698058128357 0.21605446934700012 0.0 0.0 1.0 0.39746999740600586 0.5072903633117676 0 1.0 0 0.0 0 0.0 0 0.0 0.9578835964202881 0.06456585228443146 0.21605446934700012 0.0 0.0 1.0 0.44711482524871826 0.5003923177719116 0 1.0 0 0.0 0 0.0 0 0.0 0.9594573974609375 0.06999492645263672 0.21605446934700012 0.0 0.0 1.0 0.44829061627388 0.5065951347351074 0 1.0 0 0.0 0 0.0 0 0.0 0.8572096824645996 0.056431978940963745 0.21605446934700012 0.0 0.0 1.0 0.3951107859611511 0.4943978190422058 0 1.0 0 0.0 0 0.0 0 0.0 0.9578835964202881 0.06456585228443146 0.21605446934700012 0.0 0.0 1.0 0.44711482524871826 0.5003923177719116 0 1.0 0 0.0 0 0.0 0 0.0 0.8602306842803955 0.06933698058128357 0.21605446934700012 0.0 0.0 1.0 0.39746999740600586 0.5072903633117676 0 1.0 0 0.0 0 0.0 0 0.0 1.0986576080322266 0.06012919545173645 0.21605446934700012 0.0 0.0 1.0 0.5319159626960754 0.49171215295791626 0 1.0 0 0.0 0 0.0 0 0.0 1.1923551559448242 0.0578269362449646 0.21605446934700012 0.0 0.0 1.0 0.5793853402137756 0.4883795976638794 0 1.0 0 0.0 0 0.0 0 0.0 1.0972347259521484 0.06597055494785309 0.21605446934700012 0.0 0.0 1.0 0.5309305191040039 0.49846935272216797 0 1.0 0 0.0 0 0.0 0 0.0 0.8572096824645996 0.056431978940963745 0.21605446934700012 0.0 0.0 1.0 0.3951107859611511 0.4943978190422058 0 1.0 0 0.0 0 0.0 0 0.0 0.9566066265106201 0.058903276920318604 0.21605446934700012 0.0 0.0 1.0 0.4460909366607666 0.49386513233184814 0 1.0 0 0.0 0 0.0 0 0.0 0.9578835964202881 0.06456585228443146 0.21605446934700012 0.0 0.0 1.0 0.44711482524871826 0.5003923177719116 0 1.0 0 0.0 0 0.0 0 0.0 1.0998032093048096 0.05400325357913971 0.21605446934700012 0.0 0.0 0.999969482421875 0.5327593684196472 0.4845793843269348 0 1.0 0 0.0 0 0.0 0 0.0 1.1923551559448242 0.0578269362449646 0.21605446934700012 0.0 0.0 1.0 0.5793853402137756 0.4883795976638794 0 1.0 0 0.0 0 0.0 0 0.0 1.0986576080322266 0.06012919545173645 0.21605446934700012 0.0 0.0 1.0 0.5319159626960754 0.49171215295791626 0 1.0 0 0.0 0 0.0 0 0.0 0.8572096824645996 0.056431978940963745 0.21605446934700012 0.0 0.0 1.0 0.3951107859611511 0.4943978190422058 0 1.0 0 0.0 0 0.0 0 0.0 0.9556264877319336 0.05300718545913696 0.21605446934700012 0.0 0.0 0.999969482421875 0.4452192783355713 0.4870067834854126 0 1.0 0 0.0 0 0.0 0 0.0 0.9566066265106201 0.058903276920318604 0.21605446934700012 0.0 0.0 1.0 0.4460909366607666 0.49386513233184814 0 1.0 0 0.0 0 0.0 0 0.0 1.0998032093048096 0.05400325357913971 0.21605446934700012 0.0 0.0 0.999969482421875 0.5327593684196472 0.4845793843269348 0 1.0 0 0.0 0 0.0 0 0.0 1.1951353549957275 0.04261605441570282 0.21605446934700012 0.0 0.0 1.0 0.5815703272819519 0.47294706106185913 0 1.0 0 0.0 0 0.0 0 0.0 1.1923551559448242 0.0578269362449646 0.21605446934700012 0.0 0.0 1.0 0.5793853402137756 0.4883795976638794 0 1.0 0 0.0 0 0.0 0 0.0 0.8548600673675537 0.042969971895217896 0.21605446934700012 0.0 0.0 1.0 0.39298132061958313 0.48083871603012085 0 1.0 0 0.0 0 0.0 0 0.0 0.9556264877319336 0.05300718545913696 0.21605446934700012 0.0 0.0 0.999969482421875 0.4452192783355713 0.4870067834854126 0 1.0 0 0.0 0 0.0 0 0.0 0.8572096824645996 0.056431978940963745 0.21605446934700012 0.0 0.0 1.0 0.3951107859611511 0.4943978190422058 0 1.0 0 0.0 0 0.0 0 0.0 1.1006715297698975 0.04759271442890167 0.21605446934700012 0.0 0.0 0.999969482421875 0.533460259437561 0.47706329822540283 0 1.0 0 0.0 0 0.0 0 0.0 1.1951353549957275 0.04261605441570282 0.21605446934700012 0.0 0.0 1.0 0.5815703272819519 0.47294706106185913 0 1.0 0 0.0 0 0.0 0 0.0 1.0998032093048096 0.05400325357913971 0.21605446934700012 0.0 0.0 0.999969482421875 0.5327593684196472 0.4845793843269348 0 1.0 0 0.0 0 0.0 0 0.0 0.8548600673675537 0.042969971895217896 0.21605446934700012 0.0 0.0 1.0 0.39298132061958313 0.48083871603012085 0 1.0 0 0.0 0 0.0 0 0.0 0.9549429416656494 0.04687759280204773 0.21605446934700012 0.0 0.0 1.0 0.44450050592422485 0.4798106551170349 0 1.0 0 0.0 0 0.0 0 0.0 0.9556264877319336 0.05300718545913696 0.21605446934700012 0.0 0.0 0.999969482421875 0.4452192783355713 0.4870067834854126 0 1.0 0 0.0 0 0.0 0 0.0 1.1012625694274902 0.04089759290218353 0.21605446934700012 0.0 0.0 1.0 0.5340175628662109 0.46915704011917114 0 1.0 0 0.0 0 0.0 0 0.0 1.1951353549957275 0.04261605441570282 0.21605446934700012 0.0 0.0 1.0 0.5815703272819519 0.47294706106185913 0 1.0 0 0.0 0 0.0 0 0.0 1.1006715297698975 0.04759271442890167 0.21605446934700012 0.0 0.0 0.999969482421875 0.533460259437561 0.47706329822540283 0 1.0 0 0.0 0 0.0 0 0.0 0.8548600673675537 0.042969971895217896 0.21605446934700012 0.0 0.0 1.0 0.39298132061958313 0.48083871603012085 0 1.0 0 0.0 0 0.0 0 0.0 0.9545562267303467 0.04051448404788971 0.21605446934700012 0.0 0.0 1.0 0.44393593072891235 0.47227048873901367 0 1.0 0 0.0 0 0.0 0 0.0 0.9549429416656494 0.04687759280204773 0.21605446934700012 0.0 0.0 1.0 0.44450050592422485 0.4798106551170349 0 1.0 0 0.0 0 0.0 0 0.0 0.8531818389892578 0.028950944542884827 0.21605446934700012 0.0 0.0 0.999969482421875 0.3910754919052124 0.46660172939300537 0 1.0 0 0.0 0 0.0 0 0.0 0.9545562267303467 0.04051448404788971 0.21605446934700012 0.0 0.0 1.0 0.44393593072891235 0.47227048873901367 0 1.0 0 0.0 0 0.0 0 0.0 0.8548600673675537 0.042969971895217896 0.21605446934700012 0.0 0.0 1.0 0.39298132061958313 0.48083871603012085 0 1.0 0 0.0 0 0.0 0 0.0 1.1012625694274902 0.04089759290218353 0.21605446934700012 0.0 0.0 1.0 0.5340175628662109 0.46915704011917114 0 1.0 0 0.0 0 0.0 0 0.0 1.1972198486328125 0.026595190167427063 0.21605446934700012 0.0 0.0 0.999969482421875 0.58353590965271 0.4565879702568054 0 1.0 0 0.0 0 0.0 0 0.0 1.1951353549957275 0.04261605441570282 0.21605446934700012 0.0 0.0 1.0 0.5815703272819519 0.47294706106185913 0 1.0 0 0.0 0 0.0 0 0.0 1.101576328277588 0.0339178740978241 0.21605446934700012 0.0 0.0 1.0 0.5344297289848328 0.460854709148407 0 1.0 0 0.0 0 0.0 0 0.0 1.1972198486328125 0.026595190167427063 0.21605446934700012 0.0 0.0 0.999969482421875 0.58353590965271 0.4565879702568054 0 1.0 0 0.0 0 0.0 0 0.0 1.1012625694274902 0.04089759290218353 0.21605446934700012 0.0 0.0 1.0 0.5340175628662109 0.46915704011917114 0 1.0 0 0.0 0 0.0 0 0.0 0.8531818389892578 0.028950944542884827 0.21605446934700012 0.0 0.0 0.999969482421875 0.3910754919052124 0.46660172939300537 0 1.0 0 0.0 0 0.0 0 0.0 0.9544661045074463 0.0339178740978241 0.21605446934700012 0.0 0.0 1.0 0.44352710247039795 0.4643810987472534 0 1.0 0 0.0 0 0.0 0 0.0 0.9545562267303467 0.04051448404788971 0.21605446934700012 0.0 0.0 1.0 0.44393593072891235 0.47227048873901367 0 1.0 0 0.0 0 0.0 0 0.0 0.8531818389892578 0.028950944542884827 0.21605446934700012 0.0 0.0 0.999969482421875 0.3910754919052124 0.46660172939300537 0 1.0 0 0.0 0 0.0 0 0.0 1.101576328277588 0.0339178740978241 0.21605446934700012 0.0 0.0 1.0 0.5344297289848328 0.460854709148407 0 1.0 0 0.0 0 0.0 0 0.0 0.9544661045074463 0.0339178740978241 0.21605446934700012 0.0 0.0 1.0 0.44352710247039795 0.4643810987472534 0 1.0 0 0.0 0 0.0 0 0.0 0.8531818389892578 0.028950944542884827 0.21605446934700012 0.0 0.0 0.999969482421875 0.3910754919052124 0.46660172939300537 0 1.0 0 0.0 0 0.0 0 0.0 1.1972198486328125 0.026595190167427063 0.21605446934700012 0.0 0.0 0.999969482421875 0.58353590965271 0.4565879702568054 0 1.0 0 0.0 0 0.0 0 0.0 1.101576328277588 0.0339178740978241 0.21605446934700012 0.0 0.0 1.0 0.5344297289848328 0.460854709148407 0 1.0 0 0.0 0 0.0 0 0.0 0.8521747589111328 0.014374911785125732 0.21605446934700012 0.0 0.0 0.999969482421875 0.3893885314464569 0.45168209075927734 0 1.0 0 0.0 0 0.0 0 0.0 1.1972198486328125 0.026595190167427063 0.21605446934700012 0.0 0.0 0.999969482421875 0.58353590965271 0.4565879702568054 0 1.0 0 0.0 0 0.0 0 0.0 0.8531818389892578 0.028950944542884827 0.21605446934700012 0.0 0.0 0.999969482421875 0.3910754919052124 0.46660172939300537 0 1.0 0 0.0 0 0.0 0 0.0 0.8521747589111328 0.014374911785125732 0.21605446934700012 0.0 0.0 0.999969482421875 0.3893885314464569 0.45168209075927734 0 1.0 0 0.0 0 0.0 0 0.0 1.198608636856079 0.009764343500137329 0.21605446934700012 0.0 0.0 1.0 0.58528733253479 0.43931108713150024 0 1.0 0 0.0 0 0.0 0 0.0 1.1972198486328125 0.026595190167427063 0.21605446934700012 0.0 0.0 0.999969482421875 0.58353590965271 0.4565879702568054 0 1.0 0 0.0 0 0.0 0 0.0 0.8518390655517578 -0.0007581412792205811 0.21605446934700012 0.0 0.0 1.0 0.3879176378250122 0.43608367443084717 0 1.0 0 0.0 0 0.0 0 0.0 1.198608636856079 0.009764343500137329 0.21605446934700012 0.0 0.0 1.0 0.58528733253479 0.43931108713150024 0 1.0 0 0.0 0 0.0 0 0.0 0.8521747589111328 0.014374911785125732 0.21605446934700012 0.0 0.0 0.999969482421875 0.3893885314464569 0.45168209075927734 0 1.0 0 0.0 0 0.0 0 0.0 0.8518390655517578 -0.0007581412792205811 0.21605446934700012 0.0 0.0 1.0 0.3879176378250122 0.43608367443084717 0 1.0 0 0.0 0 0.0 0 0.0 1.1993017196655273 -0.007876485586166382 0.21605446934700012 0.0 0.0 1.0 0.586828351020813 0.4211447238922119 0 1.0 0 0.0 0 0.0 0 0.0 1.198608636856079 0.009764343500137329 0.21605446934700012 0.0 0.0 1.0 0.58528733253479 0.43931108713150024 0 1.0 0 0.0 0 0.0 0 0.0 0.8520944118499756 -0.013474613428115845 0.21605446934700012 0.0 0.0 1.0 0.3868945240974426 0.42290353775024414 0 1.0 0 0.0 0 0.0 0 0.0 1.1993017196655273 -0.007876485586166382 0.21605446934700012 0.0 0.0 1.0 0.586828351020813 0.4211447238922119 0 1.0 0 0.0 0 0.0 0 0.0 0.8518390655517578 -0.0007581412792205811 0.21605446934700012 0.0 0.0 1.0 0.3879176378250122 0.43608367443084717 0 1.0 0 0.0 0 0.0 0 0.0 0.8520944118499756 -0.013474613428115845 0.21605446934700012 0.0 0.0 1.0 0.3868945240974426 0.42290353775024414 0 1.0 0 0.0 0 0.0 0 0.0 1.1992995738983154 -0.026327311992645264 0.21605446934700012 0.0 0.0 1.0 0.5881603956222534 0.40214085578918457 0 1.0 0 0.0 0 0.0 0 0.0 1.1993017196655273 -0.007876485586166382 0.21605446934700012 0.0 0.0 1.0 0.586828351020813 0.4211447238922119 0 1.0 0 0.0 0 0.0 0 0.0 0.852860689163208 -0.025821372866630554 0.21605446934700012 0.0 0.0 1.0 0.3861108422279358 0.4100426435470581 0 1.0 0 0.0 0 0.0 0 0.0 1.1992995738983154 -0.026327311992645264 0.21605446934700012 0.0 0.0 1.0 0.5881603956222534 0.40214085578918457 0 1.0 0 0.0 0 0.0 0 0.0 0.8520944118499756 -0.013474613428115845 0.21605446934700012 0.0 0.0 1.0 0.3868945240974426 0.42290353775024414 0 1.0 0 0.0 0 0.0 0 0.0 0.854137659072876 -0.03779841959476471 0.21605446934700012 0.0 0.0 1.0 0.38557168841362 0.3975013494491577 0 1.0 0 0.0 0 0.0 0 0.0 0.9527146816253662 -0.026327311992645264 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.4389815330505371 0.39140015840530396 0 1.0 0 0.0 0 0.0 0 0.0 0.852860689163208 -0.025821372866630554 0.21605446934700012 0.0 0.0 1.0 0.3861108422279358 0.4100426435470581 0 1.0 0 0.0 0 0.0 0 0.0 0.9527146816253662 -0.026327311992645264 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.4389815330505371 0.39140015840530396 0 1.0 0 0.0 0 0.0 0 0.0 1.1992995738983154 -0.026327311992645264 0.21605446934700012 0.0 0.0 1.0 0.5881603956222534 0.40214085578918457 0 1.0 0 0.0 0 0.0 0 0.0 0.852860689163208 -0.025821372866630554 0.21605446934700012 0.0 0.0 1.0 0.3861108422279358 0.4100426435470581 0 1.0 0 0.0 0 0.0 0 0.0 0.854137659072876 -0.03779841959476471 0.21605446934700012 0.0 0.0 1.0 0.38557168841362 0.3975013494491577 0 1.0 0 0.0 0 0.0 0 0.0 0.953040599822998 -0.03348945081233978 0.21605446934700012 0.0 0.0 1.0 0.43873849511146545 0.3827359676361084 0 1.0 0 0.0 0 0.0 0 0.0 0.9527146816253662 -0.026327311992645264 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.4389815330505371 0.39140015840530396 0 1.0 0 0.0 0 0.0 0 0.0 0.854137659072876 -0.03779841959476471 0.21605446934700012 0.0 0.0 1.0 0.38557168841362 0.3975013494491577 0 1.0 0 0.0 0 0.0 0 0.0 0.9536681175231934 -0.040381595492362976 0.21605446934700012 0.0 0.0 1.0 0.43869754672050476 0.37439829111099243 0 1.0 0 0.0 0 0.0 0 0.0 0.953040599822998 -0.03348945081233978 0.21605446934700012 0.0 0.0 1.0 0.43873849511146545 0.3827359676361084 0 1.0 0 0.0 0 0.0 0 0.0 0.8559255599975586 -0.04940573871135712 0.21605446934700012 0.0 0.0 1.0 0.38528379797935486 0.38527578115463257 0 1.0 0 0.0 0 0.0 0 0.0 0.9536681175231934 -0.040381595492362976 0.21605446934700012 0.0 0.0 1.0 0.43869754672050476 0.37439829111099243 0 1.0 0 0.0 0 0.0 0 0.0 0.854137659072876 -0.03779841959476471 0.21605446934700012 0.0 0.0 1.0 0.38557168841362 0.3975013494491577 0 1.0 0 0.0 0 0.0 0 0.0 0.8559255599975586 -0.04940573871135712 0.21605446934700012 0.0 0.0 1.0 0.38528379797935486 0.38527578115463257 0 1.0 0 0.0 0 0.0 0 0.0 0.9545972347259521 -0.047003746032714844 0.21605446934700012 0.0 0.0 1.0 0.43886324763298035 0.3663843274116516 0 1.0 0 0.0 0 0.0 0 0.0 0.9536681175231934 -0.040381595492362976 0.21605446934700012 0.0 0.0 1.0 0.43869754672050476 0.37439829111099243 0 1.0 0 0.0 0 0.0 0 0.0 0.8559255599975586 -0.04940573871135712 0.21605446934700012 0.0 0.0 1.0 0.38528379797935486 0.38527578115463257 0 1.0 0 0.0 0 0.0 0 0.0 0.9558279514312744 -0.053355902433395386 0.21605446934700012 0.0 0.0 1.0 0.439240425825119 0.35869020223617554 0 1.0 0 0.0 0 0.0 0 0.0 0.9545972347259521 -0.047003746032714844 0.21605446934700012 0.0 0.0 1.0 0.43886324763298035 0.3663843274116516 0 1.0 0 0.0 0 0.0 0 0.0 0.8582241535186768 -0.06064333766698837 0.21605446934700012 0.0 0.0 1.0 0.3852550685405731 0.37335896492004395 0 1.0 0 0.0 0 0.0 0 0.0 0.9558279514312744 -0.053355902433395386 0.21605446934700012 0.0 0.0 1.0 0.439240425825119 0.35869020223617554 0 1.0 0 0.0 0 0.0 0 0.0 0.8559255599975586 -0.04940573871135712 0.21605446934700012 0.0 0.0 1.0 0.38528379797935486 0.38527578115463257 0 1.0 0 0.0 0 0.0 0 0.0 0.8582241535186768 -0.06064333766698837 0.21605446934700012 0.0 0.0 1.0 0.3852550685405731 0.37335896492004395 0 1.0 0 0.0 0 0.0 0 0.0 0.9573602676391602 -0.0594380721449852 0.21605446934700012 0.0 0.0 1.0 0.43983423709869385 0.3513116240501404 0 1.0 0 0.0 0 0.0 0 0.0 0.9558279514312744 -0.053355902433395386 0.21605446934700012 0.0 0.0 1.0 0.439240425825119 0.35869020223617554 0 1.0 0 0.0 0 0.0 0 0.0 0.8582241535186768 -0.06064333766698837 0.21605446934700012 0.0 0.0 1.0 0.3852550685405731 0.37335896492004395 0 1.0 0 0.0 0 0.0 0 0.0 0.9591941833496094 -0.06525024771690369 0.21605446934700012 0.0 0.0 1.0 0.4406500458717346 0.3442443609237671 0 1.0 0 0.0 0 0.0 0 0.0 0.9573602676391602 -0.0594380721449852 0.21605446934700012 0.0 0.0 1.0 0.43983423709869385 0.3513116240501404 0 1.0 0 0.0 0 0.0 0 0.0 0.8610334396362305 -0.07151120901107788 0.21605446934700012 0.0 0.0 1.0 0.3854953348636627 0.3617415428161621 0 1.0 0 0.0 0 0.0 0 0.0 0.9591941833496094 -0.06525024771690369 0.21605446934700012 0.0 0.0 1.0 0.4406500458717346 0.3442443609237671 0 1.0 0 0.0 0 0.0 0 0.0 0.8582241535186768 -0.06064333766698837 0.21605446934700012 0.0 0.0 1.0 0.3852550685405731 0.37335896492004395 0 1.0 0 0.0 0 0.0 0 0.0 0.8610334396362305 -0.07151120901107788 0.21605446934700012 0.0 0.0 1.0 0.3854953348636627 0.3617415428161621 0 1.0 0 0.0 0 0.0 0 0.0 0.9613299369812012 -0.07079242914915085 0.21605446934700012 0.0 0.0 1.0 0.44169366359710693 0.33748435974121094 0 1.0 0 0.0 0 0.0 0 0.0 0.9591941833496094 -0.06525024771690369 0.21605446934700012 0.0 0.0 1.0 0.4406500458717346 0.3442443609237671 0 1.0 0 0.0 0 0.0 0 0.0 1.094576120376587 -0.07011988759040833 0.21605446934700012 0.0 0.0 1.0 0.5337579846382141 0.33563095331192017 0 1.0 0 0.0 0 0.0 0 0.0 1.1940457820892334 -0.08201909065246582 0.21605446934700012 0.0 0.0 1.0 0.5900315642356873 0.3451066017150879 0 1.0 0 0.0 0 0.0 0 0.0 1.0959722995758057 -0.06555674225091934 0.21605446934700012 0.0 0.0 1.0 0.5344954133033752 0.34105902910232544 0 1.0 0 0.0 0 0.0 0 0.0 1.0930728912353516 -0.07446898519992828 0.21605446934700012 0.0 0.0 1.0 0.5329328179359436 0.33046531677246094 0 1.0 0 0.0 0 0.0 0 0.0 1.1940457820892334 -0.08201909065246582 0.21605446934700012 0.0 0.0 1.0 0.5900315642356873 0.3451066017150879 0 1.0 0 0.0 0 0.0 0 0.0 1.094576120376587 -0.07011988759040833 0.21605446934700012 0.0 0.0 1.0 0.5337579846382141 0.33563095331192017 0 1.0 0 0.0 0 0.0 0 0.0 0.8610334396362305 -0.07151120901107788 0.21605446934700012 0.0 0.0 1.0 0.3854953348636627 0.3617415428161621 0 1.0 0 0.0 0 0.0 0 0.0 0.9637672901153564 -0.07606461644172668 0.21605446934700012 0.0 0.0 1.0 0.442970871925354 0.3310282826423645 0 1.0 0 0.0 0 0.0 0 0.0 0.9613299369812012 -0.07079242914915085 0.21605446934700012 0.0 0.0 1.0 0.44169366359710693 0.33748435974121094 0 1.0 0 0.0 0 0.0 0 0.0 0.8643536567687988 -0.08200936019420624 0.21605446934700012 0.0 0.0 1.0 0.3860163688659668 0.35041290521621704 0 1.0 0 0.0 0 0.0 0 0.0 0.9637672901153564 -0.07606461644172668 0.21605446934700012 0.0 0.0 1.0 0.442970871925354 0.3310282826423645 0 1.0 0 0.0 0 0.0 0 0.0 0.8610334396362305 -0.07151120901107788 0.21605446934700012 0.0 0.0 1.0 0.3854953348636627 0.3617415428161621 0 1.0 0 0.0 0 0.0 0 0.0 1.0914626121520996 -0.07860402762889862 0.21605446934700012 0.0 0.0 1.0 0.5320184826850891 0.325559139251709 0 1.0 0 0.0 0 0.0 0 0.0 1.1940457820892334 -0.08201909065246582 0.21605446934700012 0.0 0.0 1.0 0.5900315642356873 0.3451066017150879 0 1.0 0 0.0 0 0.0 0 0.0 1.0930728912353516 -0.07446898519992828 0.21605446934700012 0.0 0.0 1.0 0.5329328179359436 0.33046531677246094 0 1.0 0 0.0 0 0.0 0 0.0 0.8643536567687988 -0.08200936019420624 0.21605446934700012 0.0 0.0 1.0 0.3860163688659668 0.35041290521621704 0 1.0 0 0.0 0 0.0 0 0.0 0.9665062427520752 -0.0810668095946312 0.21605446934700012 0.0 0.0 0.999969482421875 0.44448772072792053 0.3248738646507263 0 1.0 0 0.0 0 0.0 0 0.0 0.9637672901153564 -0.07606461644172668 0.21605446934700012 0.0 0.0 1.0 0.442970871925354 0.3310282826423645 0 1.0 0 0.0 0 0.0 0 0.0 1.089745283126831 -0.08252502232789993 0.21605446934700012 0.0 0.0 1.0 0.5310134887695312 0.3209095001220703 0 1.0 0 0.0 0 0.0 0 0.0 1.1940457820892334 -0.08201909065246582 0.21605446934700012 0.0 0.0 1.0 0.5900315642356873 0.3451066017150879 0 1.0 0 0.0 0 0.0 0 0.0 1.0914626121520996 -0.07860402762889862 0.21605446934700012 0.0 0.0 1.0 0.5320184826850891 0.325559139251709 0 1.0 0 0.0 0 0.0 0 0.0 0.8643536567687988 -0.08200936019420624 0.21605446934700012 0.0 0.0 1.0 0.3860163688659668 0.35041290521621704 0 1.0 0 0.0 0 0.0 0 0.0 0.9695467948913574 -0.08579900860786438 0.21605446934700012 0.0 0.0 1.0 0.446250319480896 0.3190198540687561 0 1.0 0 0.0 0 0.0 0 0.0 0.9665062427520752 -0.0810668095946312 0.21605446934700012 0.0 0.0 0.999969482421875 0.44448772072792053 0.3248738646507263 0 1.0 0 0.0 0 0.0 0 0.0 0.8681845664978027 -0.09213779121637344 0.21605446934700012 0.0 0.0 1.0 0.3868318498134613 0.33936208486557007 0 1.0 0 0.0 0 0.0 0 0.0 0.9695467948913574 -0.08579900860786438 0.21605446934700012 0.0 0.0 1.0 0.446250319480896 0.3190198540687561 0 1.0 0 0.0 0 0.0 0 0.0 0.8643536567687988 -0.08200936019420624 0.21605446934700012 0.0 0.0 1.0 0.3860163688659668 0.35041290521621704 0 1.0 0 0.0 0 0.0 0 0.0 1.089745283126831 -0.08252502232789993 0.21605446934700012 0.0 0.0 1.0 0.5310134887695312 0.3209095001220703 0 1.0 0 0.0 0 0.0 0 0.0 1.1907413005828857 -0.09083038568496704 0.21605446934700012 0.0 0.0 1.0 0.5891975164413452 0.3356865644454956 0 1.0 0 0.0 0 0.0 0 0.0 1.1940457820892334 -0.08201909065246582 0.21605446934700012 0.0 0.0 1.0 0.5900315642356873 0.3451066017150879 0 1.0 0 0.0 0 0.0 0 0.0 1.087920904159546 -0.08623196929693222 0.21605446934700012 0.0 0.0 1.0 0.5299165844917297 0.3165135383605957 0 1.0 0 0.0 0 0.0 0 0.0 1.1907413005828857 -0.09083038568496704 0.21605446934700012 0.0 0.0 1.0 0.5891975164413452 0.3356865644454956 0 1.0 0 0.0 0 0.0 0 0.0 1.089745283126831 -0.08252502232789993 0.21605446934700012 0.0 0.0 1.0 0.5310134887695312 0.3209095001220703 0 1.0 0 0.0 0 0.0 0 0.0 0.8681845664978027 -0.09213779121637344 0.21605446934700012 0.0 0.0 1.0 0.3868318498134613 0.33936208486557007 0 1.0 0 0.0 0 0.0 0 0.0 0.9728889465332031 -0.09026120603084564 0.21605446934700012 0.0 0.0 1.0 0.4482648968696594 0.3134663701057434 0 1.0 0 0.0 0 0.0 0 0.0 0.9695467948913574 -0.08579900860786438 0.21605446934700012 0.0 0.0 1.0 0.446250319480896 0.3190198540687561 0 1.0 0 0.0 0 0.0 0 0.0 1.0859894752502441 -0.08972486853599548 0.21605446934700012 0.0 0.0 1.0 0.5287265181541443 0.3123684525489807 0 1.0 0 0.0 0 0.0 0 0.0 1.1907413005828857 -0.09083038568496704 0.21605446934700012 0.0 0.0 1.0 0.5891975164413452 0.3356865644454956 0 1.0 0 0.0 0 0.0 0 0.0 1.087920904159546 -0.08623196929693222 0.21605446934700012 0.0 0.0 1.0 0.5299165844917297 0.3165135383605957 0 1.0 0 0.0 0 0.0 0 0.0 1.0839512348175049 -0.09300372004508972 0.21605446934700012 0.0 0.0 1.0 0.527442216873169 0.30847179889678955 0 1.0 0 0.0 0 0.0 0 0.0 1.1907413005828857 -0.09083038568496704 0.21605446934700012 0.0 0.0 1.0 0.5891975164413452 0.3356865644454956 0 1.0 0 0.0 0 0.0 0 0.0 1.0859894752502441 -0.08972486853599548 0.21605446934700012 0.0 0.0 1.0 0.5287265181541443 0.3123684525489807 0 1.0 0 0.0 0 0.0 0 0.0 0.8681845664978027 -0.09213779121637344 0.21605446934700012 0.0 0.0 1.0 0.3868318498134613 0.33936208486557007 0 1.0 0 0.0 0 0.0 0 0.0 0.9765326976776123 -0.09445341676473618 0.21605446934700012 0.0 0.0 1.0 0.45053744316101074 0.3082153797149658 0 1.0 0 0.0 0 0.0 0 0.0 0.9728889465332031 -0.09026120603084564 0.21605446934700012 0.0 0.0 1.0 0.4482648968696594 0.3134663701057434 0 1.0 0 0.0 0 0.0 0 0.0 1.0839512348175049 -0.09300372004508972 0.21605446934700012 0.0 0.0 1.0 0.527442216873169 0.30847179889678955 0 1.0 0 0.0 0 0.0 0 0.0 1.1871328353881836 -0.09928411990404129 0.21605446934700012 0.0 0.0 1.0 0.5881662368774414 0.3265685439109802 0 1.0 0 0.0 0 0.0 0 0.0 1.1907413005828857 -0.09083038568496704 0.21605446934700012 0.0 0.0 1.0 0.5891975164413452 0.3356865644454956 0 1.0 0 0.0 0 0.0 0 0.0 0.8725264072418213 -0.1018965020775795 0.21605446934700012 0.0 0.0 1.0 0.38795796036720276 0.32857829332351685 0 1.0 0 0.0 0 0.0 0 0.0 0.9765326976776123 -0.09445341676473618 0.21605446934700012 0.0 0.0 1.0 0.45053744316101074 0.3082153797149658 0 1.0 0 0.0 0 0.0 0 0.0 0.8681845664978027 -0.09213779121637344 0.21605446934700012 0.0 0.0 1.0 0.3868318498134613 0.33936208486557007 0 1.0 0 0.0 0 0.0 0 0.0 1.081805944442749 -0.09606851637363434 0.21605446934700012 0.0 0.0 1.0 0.5260624289512634 0.3048214912414551 0 1.0 0 0.0 0 0.0 0 0.0 1.1871328353881836 -0.09928411990404129 0.21605446934700012 0.0 0.0 1.0 0.5881662368774414 0.3265685439109802 0 1.0 0 0.0 0 0.0 0 0.0 1.0839512348175049 -0.09300372004508972 0.21605446934700012 0.0 0.0 1.0 0.527442216873169 0.30847179889678955 0 1.0 0 0.0 0 0.0 0 0.0 0.8725264072418213 -0.1018965020775795 0.21605446934700012 0.0 0.0 1.0 0.38795796036720276 0.32857829332351685 0 1.0 0 0.0 0 0.0 0 0.0 0.9804050922393799 -0.09834157675504684 0.21605446934700012 0.0 0.0 1.0 0.45302438735961914 0.30331945419311523 0 1.0 0 0.0 0 0.0 0 0.0 0.9765326976776123 -0.09445341676473618 0.21605446934700012 0.0 0.0 1.0 0.45053744316101074 0.3082153797149658 0 1.0 0 0.0 0 0.0 0 0.0 1.0795536041259766 -0.09891926497220993 0.21605446934700012 0.0 0.0 1.0 0.5245863199234009 0.30141550302505493 0 1.0 0 0.0 0 0.0 0 0.0 1.1871328353881836 -0.09928411990404129 0.21605446934700012 0.0 0.0 1.0 0.5881662368774414 0.3265685439109802 0 1.0 0 0.0 0 0.0 0 0.0 1.081805944442749 -0.09606851637363434 0.21605446934700012 0.0 0.0 1.0 0.5260624289512634 0.3048214912414551 0 1.0 0 0.0 0 0.0 0 0.0 0.8725264072418213 -0.1018965020775795 0.21605446934700012 0.0 0.0 1.0 0.38795796036720276 0.32857829332351685 0 1.0 0 0.0 0 0.0 0 0.0 0.9844331741333008 -0.10189163684844971 0.21605446934700012 0.0 0.0 1.0 0.45567893981933594 0.2988291382789612 0 1.0 0 0.0 0 0.0 0 0.0 0.9804050922393799 -0.09834157675504684 0.21605446934700012 0.0 0.0 1.0 0.45302438735961914 0.30331945419311523 0 1.0 0 0.0 0 0.0 0 0.0 1.0771942138671875 -0.1015559658408165 0.21605446934700012 0.0 0.0 1.0 0.5230129957199097 0.2982526421546936 0 1.0 0 0.0 0 0.0 0 0.0 1.1871328353881836 -0.09928411990404129 0.21605446934700012 0.0 0.0 1.0 0.5881662368774414 0.3265685439109802 0 1.0 0 0.0 0 0.0 0 0.0 1.0795536041259766 -0.09891926497220993 0.21605446934700012 0.0 0.0 1.0 0.5245863199234009 0.30141550302505493 0 1.0 0 0.0 0 0.0 0 0.0 1.0771942138671875 -0.1015559658408165 0.21605446934700012 0.0 0.0 1.0 0.5230129957199097 0.2982526421546936 0 1.0 0 0.0 0 0.0 0 0.0 1.183220386505127 -0.10738029330968857 0.21605446934700012 0.0 0.0 1.0 0.5869276523590088 0.31774646043777466 0 1.0 0 0.0 0 0.0 0 0.0 1.1871328353881836 -0.09928411990404129 0.21605446934700012 0.0 0.0 1.0 0.5881662368774414 0.3265685439109802 0 1.0 0 0.0 0 0.0 0 0.0 1.0747277736663818 -0.10397861897945404 0.21605446934700012 0.0 0.0 1.0 0.5213418006896973 0.29533177614212036 0 1.0 0 0.0 0 0.0 0 0.0 1.183220386505127 -0.10738029330968857 0.21605446934700012 0.0 0.0 1.0 0.5869276523590088 0.31774646043777466 0 1.0 0 0.0 0 0.0 0 0.0 1.0771942138671875 -0.1015559658408165 0.21605446934700012 0.0 0.0 1.0 0.5230129957199097 0.2982526421546936 0 1.0 0 0.0 0 0.0 0 0.0 0.8725264072418213 -0.1018965020775795 0.21605446934700012 0.0 0.0 1.0 0.38795796036720276 0.32857829332351685 0 1.0 0 0.0 0 0.0 0 0.0 0.988616943359375 -0.10510359704494476 0.21605446934700012 0.0 0.0 1.0 0.4585016369819641 0.29474544525146484 0 1.0 0 0.0 0 0.0 0 0.0 0.9844331741333008 -0.10189163684844971 0.21605446934700012 0.0 0.0 1.0 0.45567893981933594 0.2988291382789612 0 1.0 0 0.0 0 0.0 0 0.0 0.8773789405822754 -0.1112854853272438 0.21605446934700012 0.0 0.0 1.0 0.3894132971763611 0.3180522322654724 0 1.0 0 0.0 0 0.0 0 0.0 0.988616943359375 -0.10510359704494476 0.21605446934700012 0.0 0.0 1.0 0.4585016369819641 0.29474544525146484 0 1.0 0 0.0 0 0.0 0 0.0 0.8725264072418213 -0.1018965020775795 0.21605446934700012 0.0 0.0 1.0 0.38795796036720276 0.32857829332351685 0 1.0 0 0.0 0 0.0 0 0.0 1.0721542835235596 -0.10618721693754196 0.21605446934700012 0.0 0.0 0.999969482421875 0.5195723176002502 0.292652428150177 0 1.0 0 0.0 0 0.0 0 0.0 1.183220386505127 -0.10738029330968857 0.21605446934700012 0.0 0.0 1.0 0.5869276523590088 0.31774646043777466 0 1.0 0 0.0 0 0.0 0 0.0 1.0747277736663818 -0.10397861897945404 0.21605446934700012 0.0 0.0 1.0 0.5213418006896973 0.29533177614212036 0 1.0 0 0.0 0 0.0 0 0.0 0.8773789405822754 -0.1112854853272438 0.21605446934700012 0.0 0.0 1.0 0.3894132971763611 0.3180522322654724 0 1.0 0 0.0 0 0.0 0 0.0 0.9929563999176025 -0.10797744989395142 0.21605446934700012 0.0 0.0 1.0 0.46149224042892456 0.29107022285461426 0 1.0 0 0.0 0 0.0 0 0.0 0.988616943359375 -0.10510359704494476 0.21605446934700012 0.0 0.0 1.0 0.4585016369819641 0.29474544525146484 0 1.0 0 0.0 0 0.0 0 0.0 1.06947660446167 -0.10820123553276062 0.21605446934700012 0.0 0.0 1.0 0.5177067518234253 0.29019415378570557 0 1.0 0 0.0 0 0.0 0 0.0 1.183220386505127 -0.10738029330968857 0.21605446934700012 0.0 0.0 1.0 0.5869276523590088 0.31774646043777466 0 1.0 0 0.0 0 0.0 0 0.0 1.0721542835235596 -0.10618721693754196 0.21605446934700012 0.0 0.0 0.999969482421875 0.5195723176002502 0.292652428150177 0 1.0 0 0.0 0 0.0 0 0.0 1.06947660446167 -0.10820123553276062 0.21605446934700012 0.0 0.0 1.0 0.5177067518234253 0.29019415378570557 0 1.0 0 0.0 0 0.0 0 0.0 1.1790039539337158 -0.11511890590190887 0.21605446934700012 0.0 0.0 0.999969482421875 0.5854707956314087 0.30921435356140137 0 1.0 0 0.0 0 0.0 0 0.0 1.183220386505127 -0.10738029330968857 0.21605446934700012 0.0 0.0 1.0 0.5869276523590088 0.31774646043777466 0 1.0 0 0.0 0 0.0 0 0.0 0.8773789405822754 -0.1112854853272438 0.21605446934700012 0.0 0.0 1.0 0.3894132971763611 0.3180522322654724 0 1.0 0 0.0 0 0.0 0 0.0 0.9974515438079834 -0.11051320284605026 0.21605446934700012 0.0 0.0 1.0 0.46464958786964417 0.2878061532974243 0 1.0 0 0.0 0 0.0 0 0.0 0.9929563999176025 -0.10797744989395142 0.21605446934700012 0.0 0.0 1.0 0.46149224042892456 0.29107022285461426 0 1.0 0 0.0 0 0.0 0 0.0 1.0666964054107666 -0.11004011332988739 0.21605446934700012 0.0 0.0 1.0 0.5157464742660522 0.2879374027252197 0 1.0 0 0.0 0 0.0 0 0.0 1.1790039539337158 -0.11511890590190887 0.21605446934700012 0.0 0.0 0.999969482421875 0.5854707956314087 0.30921435356140137 0 1.0 0 0.0 0 0.0 0 0.0 1.06947660446167 -0.10820123553276062 0.21605446934700012 0.0 0.0 1.0 0.5177067518234253 0.29019415378570557 0 1.0 0 0.0 0 0.0 0 0.0 1.0638139247894287 -0.11170385777950287 0.21605446934700012 0.0 0.0 1.0 0.5136916637420654 0.28588324785232544 0 1.0 0 0.0 0 0.0 0 0.0 1.1790039539337158 -0.11511890590190887 0.21605446934700012 0.0 0.0 0.999969482421875 0.5854707956314087 0.30921435356140137 0 1.0 0 0.0 0 0.0 0 0.0 1.0666964054107666 -0.11004011332988739 0.21605446934700012 0.0 0.0 1.0 0.5157464742660522 0.2879374027252197 0 1.0 0 0.0 0 0.0 0 0.0 0.8773789405822754 -0.1112854853272438 0.21605446934700012 0.0 0.0 1.0 0.3894132971763611 0.3180522322654724 0 1.0 0 0.0 0 0.0 0 0.0 1.0021021366119385 -0.1127108559012413 0.21605446934700012 0.0 0.0 1.0 0.4679713547229767 0.28495705127716064 0 1.0 0 0.0 0 0.0 0 0.0 0.9974515438079834 -0.11051320284605026 0.21605446934700012 0.0 0.0 1.0 0.46464958786964417 0.2878061532974243 0 1.0 0 0.0 0 0.0 0 0.0 0.8827424049377441 -0.12030474841594696 0.21605446934700012 0.0 0.0 1.0 0.3912193775177002 0.3077763319015503 0 1.0 0 0.0 0 0.0 0 0.0 1.0021021366119385 -0.1127108559012413 0.21605446934700012 0.0 0.0 1.0 0.4679713547229767 0.28495705127716064 0 1.0 0 0.0 0 0.0 0 0.0 0.8773789405822754 -0.1112854853272438 0.21605446934700012 0.0 0.0 1.0 0.3894132971763611 0.3180522322654724 0 1.0 0 0.0 0 0.0 0 0.0 1.0608294010162354 -0.11319247633218765 0.21605446934700012 0.0 0.0 1.0 0.5115428566932678 0.2840333580970764 0 1.0 0 0.0 0 0.0 0 0.0 1.1790039539337158 -0.11511890590190887 0.21605446934700012 0.0 0.0 0.999969482421875 0.5854707956314087 0.30921435356140137 0 1.0 0 0.0 0 0.0 0 0.0 1.0638139247894287 -0.11170385777950287 0.21605446934700012 0.0 0.0 1.0 0.5136916637420654 0.28588324785232544 0 1.0 0 0.0 0 0.0 0 0.0 0.8827424049377441 -0.12030474841594696 0.21605446934700012 0.0 0.0 1.0 0.3912193775177002 0.3077763319015503 0 1.0 0 0.0 0 0.0 0 0.0 1.0069084167480469 -0.11457040905952454 0.21605446934700012 0.0 0.0 0.999969482421875 0.4714545011520386 0.2825276851654053 0 1.0 0 0.0 0 0.0 0 0.0 1.0021021366119385 -0.1127108559012413 0.21605446934700012 0.0 0.0 1.0 0.4679713547229767 0.28495705127716064 0 1.0 0 0.0 0 0.0 0 0.0 1.0577425956726074 -0.11450596153736115 0.21605446934700012 0.0 0.0 1.0 0.5093002319335938 0.28238970041275024 0 1.0 0 0.0 0 0.0 0 0.0 1.1790039539337158 -0.11511890590190887 0.21605446934700012 0.0 0.0 0.999969482421875 0.5854707956314087 0.30921435356140137 0 1.0 0 0.0 0 0.0 0 0.0 1.0608294010162354 -0.11319247633218765 0.21605446934700012 0.0 0.0 1.0 0.5115428566932678 0.2840333580970764 0 1.0 0 0.0 0 0.0 0 0.0 1.054553747177124 -0.11564431339502335 0.21605446934700012 0.0 0.0 1.0 0.506964921951294 0.2809547185897827 0 1.0 0 0.0 0 0.0 0 0.0 1.1790039539337158 -0.11511890590190887 0.21605446934700012 0.0 0.0 0.999969482421875 0.5854707956314087 0.30921435356140137 0 1.0 0 0.0 0 0.0 0 0.0 1.0577425956726074 -0.11450596153736115 0.21605446934700012 0.0 0.0 1.0 0.5093002319335938 0.28238970041275024 0 1.0 0 0.0 0 0.0 0 0.0 0.8827424049377441 -0.12030474841594696 0.21605446934700012 0.0 0.0 1.0 0.3912193775177002 0.3077763319015503 0 1.0 0 0.0 0 0.0 0 0.0 1.0118703842163086 -0.11609186232089996 0.21605446934700012 0.0 0.0 1.0 0.4750945568084717 0.28052353858947754 0 1.0 0 0.0 0 0.0 0 0.0 1.0069084167480469 -0.11457040905952454 0.21605446934700012 0.0 0.0 0.999969482421875 0.4714545011520386 0.2825276851654053 0 1.0 0 0.0 0 0.0 0 0.0 1.054553747177124 -0.11564431339502335 0.21605446934700012 0.0 0.0 1.0 0.506964921951294 0.2809547185897827 0 1.0 0 0.0 0 0.0 0 0.0 1.174483299255371 -0.12249995768070221 0.21605446934700012 0.0 0.0 1.0 0.5837835669517517 0.3009667992591858 0 1.0 0 0.0 0 0.0 0 0.0 1.1790039539337158 -0.11511890590190887 0.21605446934700012 0.0 0.0 0.999969482421875 0.5854707956314087 0.30921435356140137 0 1.0 0 0.0 0 0.0 0 0.0 1.051262617111206 -0.11660753190517426 0.21605446934700012 0.0 0.0 1.0 0.5045377612113953 0.2797309160232544 0 1.0 0 0.0 0 0.0 0 0.0 1.174483299255371 -0.12249995768070221 0.21605446934700012 0.0 0.0 1.0 0.5837835669517517 0.3009667992591858 0 1.0 0 0.0 0 0.0 0 0.0 1.054553747177124 -0.11564431339502335 0.21605446934700012 0.0 0.0 1.0 0.506964921951294 0.2809547185897827 0 1.0 0 0.0 0 0.0 0 0.0 0.8827424049377441 -0.12030474841594696 0.21605446934700012 0.0 0.0 1.0 0.3912193775177002 0.3077763319015503 0 1.0 0 0.0 0 0.0 0 0.0 1.0169880390167236 -0.11727521568536758 0.21605446934700012 0.0 0.0 0.999969482421875 0.47888582944869995 0.2789512276649475 0 1.0 0 0.0 0 0.0 0 0.0 1.0118703842163086 -0.11609186232089996 0.21605446934700012 0.0 0.0 1.0 0.4750945568084717 0.28052353858947754 0 1.0 0 0.0 0 0.0 0 0.0 1.0478694438934326 -0.11739562451839447 0.21605446934700012 0.0 -3.0518509447574615e-05 1.0 0.5020204186439514 0.2787216305732727 0 1.0 0 0.0 0 0.0 0 0.0 1.174483299255371 -0.12249995768070221 0.21605446934700012 0.0 0.0 1.0 0.5837835669517517 0.3009667992591858 0 1.0 0 0.0 0 0.0 0 0.0 1.051262617111206 -0.11660753190517426 0.21605446934700012 0.0 0.0 1.0 0.5045377612113953 0.2797309160232544 0 1.0 0 0.0 0 0.0 0 0.0 0.8827424049377441 -0.12030474841594696 0.21605446934700012 0.0 0.0 1.0 0.3912193775177002 0.3077763319015503 0 1.0 0 0.0 0 0.0 0 0.0 1.022261381149292 -0.1181204691529274 0.21605446934700012 0.0 0.0 1.0 0.4828212261199951 0.27781784534454346 0 1.0 0 0.0 0 0.0 0 0.0 1.0169880390167236 -0.11727521568536758 0.21605446934700012 0.0 0.0 0.999969482421875 0.47888582944869995 0.2789512276649475 0 1.0 0 0.0 0 0.0 0 0.0 1.0443739891052246 -0.1180085837841034 0.21605446934700012 0.0 0.0 0.999969482421875 0.49941444396972656 0.27793002128601074 0 1.0 0 0.0 0 0.0 0 0.0 1.174483299255371 -0.12249995768070221 0.21605446934700012 0.0 0.0 1.0 0.5837835669517517 0.3009667992591858 0 1.0 0 0.0 0 0.0 0 0.0 1.0478694438934326 -0.11739562451839447 0.21605446934700012 0.0 -3.0518509447574615e-05 1.0 0.5020204186439514 0.2787216305732727 0 1.0 0 0.0 0 0.0 0 0.0 1.0407764911651611 -0.11844640970230103 0.21605446934700012 0.0 0.0 1.0 0.4967222511768341 0.2773597836494446 0 1.0 0 0.0 0 0.0 0 0.0 1.174483299255371 -0.12249995768070221 0.21605446934700012 0.0 0.0 1.0 0.5837835669517517 0.3009667992591858 0 1.0 0 0.0 0 0.0 0 0.0 1.0443739891052246 -0.1180085837841034 0.21605446934700012 0.0 0.0 0.999969482421875 0.49941444396972656 0.27793002128601074 0 1.0 0 0.0 0 0.0 0 0.0 0.8827424049377441 -0.12030474841594696 0.21605446934700012 0.0 0.0 1.0 0.3912193775177002 0.3077763319015503 0 1.0 0 0.0 0 0.0 0 0.0 1.0276904106140137 -0.1186276227235794 0.21605446934700012 0.0 0.0 0.999969482421875 0.48689237236976624 0.27713125944137573 0 1.0 0 0.0 0 0.0 0 0.0 1.022261381149292 -0.1181204691529274 0.21605446934700012 0.0 0.0 1.0 0.4828212261199951 0.27781784534454346 0 1.0 0 0.0 0 0.0 0 0.0 1.0370769500732422 -0.11870910972356796 0.21605446934700012 0.0 0.0 1.0 0.4939463436603546 0.2770150303840637 0 1.0 0 0.0 0 0.0 0 0.0 1.174483299255371 -0.12249995768070221 0.21605446934700012 0.0 0.0 1.0 0.5837835669517517 0.3009667992591858 0 1.0 0 0.0 0 0.0 0 0.0 1.0407764911651611 -0.11844640970230103 0.21605446934700012 0.0 0.0 1.0 0.4967222511768341 0.2773597836494446 0 1.0 0 0.0 0 0.0 0 0.0 0.8827424049377441 -0.12030474841594696 0.21605446934700012 0.0 0.0 1.0 0.3912193775177002 0.3077763319015503 0 1.0 0 0.0 0 0.0 0 0.0 1.0332751274108887 -0.11879667639732361 0.21605446934700012 0.0 0.0 1.0 0.49108949303627014 0.2768997550010681 0 1.0 0 0.0 0 0.0 0 0.0 1.0276904106140137 -0.1186276227235794 0.21605446934700012 0.0 0.0 0.999969482421875 0.48689237236976624 0.27713125944137573 0 1.0 0 0.0 0 0.0 0 0.0 1.0332751274108887 -0.11879667639732361 0.21605446934700012 0.0 0.0 1.0 0.49108949303627014 0.2768997550010681 0 1.0 0 0.0 0 0.0 0 0.0 1.174483299255371 -0.12249995768070221 0.21605446934700012 0.0 0.0 1.0 0.5837835669517517 0.3009667992591858 0 1.0 0 0.0 0 0.0 0 0.0 1.0370769500732422 -0.11870910972356796 0.21605446934700012 0.0 0.0 1.0 0.4939463436603546 0.2770150303840637 0 1.0 0 0.0 0 0.0 0 0.0 0.8827424049377441 -0.12030474841594696 0.21605446934700012 0.0 0.0 1.0 0.3912193775177002 0.3077763319015503 0 1.0 0 0.0 0 0.0 0 0.0 1.174483299255371 -0.12249995768070221 0.21605446934700012 0.0 0.0 1.0 0.5837835669517517 0.3009667992591858 0 1.0 0 0.0 0 0.0 0 0.0 1.0332751274108887 -0.11879667639732361 0.21605446934700012 0.0 0.0 1.0 0.49108949303627014 0.2768997550010681 0 1.0 0 0.0 0 0.0 0 0.0 0.8886165618896484 -0.12895429134368896 0.21605446934700012 0.0 0.0 0.999969482421875 0.39340054988861084 0.29774606227874756 0 1.0 0 0.0 0 0.0 0 0.0 1.174483299255371 -0.12249995768070221 0.21605446934700012 0.0 0.0 1.0 0.5837835669517517 0.3009667992591858 0 1.0 0 0.0 0 0.0 0 0.0 0.8827424049377441 -0.12030474841594696 0.21605446934700012 0.0 0.0 1.0 0.3912193775177002 0.3077763319015503 0 1.0 0 0.0 0 0.0 0 0.0 0.8886165618896484 -0.12895429134368896 0.21605446934700012 0.0 0.0 0.999969482421875 0.39340054988861084 0.29774606227874756 0 1.0 0 0.0 0 0.0 0 0.0 1.1696586608886719 -0.12952345609664917 0.21605446934700012 0.0 0.0 0.999969482421875 0.5818529725074768 0.2929994463920593 0 1.0 0 0.0 0 0.0 0 0.0 1.174483299255371 -0.12249995768070221 0.21605446934700012 0.0 0.0 1.0 0.5837835669517517 0.3009667992591858 0 1.0 0 0.0 0 0.0 0 0.0 0.896730899810791 -0.13908028602600098 0.21605446934700012 0.0 0.0 1.0 0.39674311876296997 0.28568243980407715 0 1.0 0 0.0 0 0.0 0 0.0 1.1696586608886719 -0.12952345609664917 0.21605446934700012 0.0 0.0 0.999969482421875 0.5818529725074768 0.2929994463920593 0 1.0 0 0.0 0 0.0 0 0.0 0.8886165618896484 -0.12895429134368896 0.21605446934700012 0.0 0.0 0.999969482421875 0.39340054988861084 0.29774606227874756 0 1.0 0 0.0 0 0.0 0 0.0 0.896730899810791 -0.13908028602600098 0.21605446934700012 0.0 0.0 1.0 0.39674311876296997 0.28568243980407715 0 1.0 0 0.0 0 0.0 0 0.0 1.1645300388336182 -0.13618940114974976 0.21605446934700012 0.0 0.0 1.0 0.5796647667884827 0.28530943393707275 0 1.0 0 0.0 0 0.0 0 0.0 1.1696586608886719 -0.12952345609664917 0.21605446934700012 0.0 0.0 0.999969482421875 0.5818529725074768 0.2929994463920593 0 1.0 0 0.0 0 0.0 0 0.0 0.896730899810791 -0.13908028602600098 0.21605446934700012 0.0 0.0 1.0 0.39674311876296997 0.28568243980407715 0 1.0 0 0.0 0 0.0 0 0.0 1.15909743309021 -0.14249777793884277 0.21605446934700012 0.0 0.0 1.0 0.5772037506103516 0.2778952717781067 0 1.0 0 0.0 0 0.0 0 0.0 1.1645300388336182 -0.13618940114974976 0.21605446934700012 0.0 0.0 1.0 0.5796647667884827 0.28530943393707275 0 1.0 0 0.0 0 0.0 0 0.0 0.9055459499359131 -0.14832577109336853 0.21605446934700012 0.0 0.0 0.999969482421875 0.4007539749145508 0.274305522441864 0 1.0 0 0.0 0 0.0 0 0.0 1.15909743309021 -0.14249777793884277 0.21605446934700012 0.0 0.0 1.0 0.5772037506103516 0.2778952717781067 0 1.0 0 0.0 0 0.0 0 0.0 0.896730899810791 -0.13908028602600098 0.21605446934700012 0.0 0.0 1.0 0.39674311876296997 0.28568243980407715 0 1.0 0 0.0 0 0.0 0 0.0 0.9055459499359131 -0.14832577109336853 0.21605446934700012 0.0 0.0 0.999969482421875 0.4007539749145508 0.274305522441864 0 1.0 0 0.0 0 0.0 0 0.0 1.1533606052398682 -0.14844858646392822 0.21605446934700012 0.0 0.0 1.0 0.5744532942771912 0.270757794380188 0 1.0 0 0.0 0 0.0 0 0.0 1.15909743309021 -0.14249777793884277 0.21605446934700012 0.0 0.0 1.0 0.5772037506103516 0.2778952717781067 0 1.0 0 0.0 0 0.0 0 0.0 0.9150614738464355 -0.15669071674346924 0.21605446934700012 0.0 0.0 1.0 0.40549376606941223 0.2636224627494812 0 1.0 0 0.0 0 0.0 0 0.0 1.1533606052398682 -0.14844858646392822 0.21605446934700012 0.0 0.0 1.0 0.5744532942771912 0.270757794380188 0 1.0 0 0.0 0 0.0 0 0.0 0.9055459499359131 -0.14832577109336853 0.21605446934700012 0.0 0.0 0.999969482421875 0.4007539749145508 0.274305522441864 0 1.0 0 0.0 0 0.0 0 0.0 0.9150614738464355 -0.15669071674346924 0.21605446934700012 0.0 0.0 1.0 0.40549376606941223 0.2636224627494812 0 1.0 0 0.0 0 0.0 0 0.0 1.1473197937011719 -0.1540418416261673 0.21605446934700012 0.0 0.0 0.999969482421875 0.5713964104652405 0.2639002203941345 0 1.0 0 0.0 0 0.0 0 0.0 1.1533606052398682 -0.14844858646392822 0.21605446934700012 0.0 0.0 1.0 0.5744532942771912 0.270757794380188 0 1.0 0 0.0 0 0.0 0 0.0 0.9150614738464355 -0.15669071674346924 0.21605446934700012 0.0 0.0 1.0 0.40549376606941223 0.2636224627494812 0 1.0 0 0.0 0 0.0 0 0.0 1.140974998474121 -0.15927754342556 0.21605446934700012 0.0 0.0 0.999969482421875 0.5680148601531982 0.2573285698890686 0 1.0 0 0.0 0 0.0 0 0.0 1.1473197937011719 -0.1540418416261673 0.21605446934700012 0.0 0.0 0.999969482421875 0.5713964104652405 0.2639002203941345 0 1.0 0 0.0 0 0.0 0 0.0 0.9252774715423584 -0.1641751527786255 0.21605446934700012 0.0 0.0 0.999969482421875 0.4110276997089386 0.2536557912826538 0 1.0 0 0.0 0 0.0 0 0.0 1.140974998474121 -0.15927754342556 0.21605446934700012 0.0 0.0 0.999969482421875 0.5680148601531982 0.2573285698890686 0 1.0 0 0.0 0 0.0 0 0.0 0.9150614738464355 -0.15669071674346924 0.21605446934700012 0.0 0.0 1.0 0.40549376606941223 0.2636224627494812 0 1.0 0 0.0 0 0.0 0 0.0 0.9252774715423584 -0.1641751527786255 0.21605446934700012 0.0 0.0 0.999969482421875 0.4110276997089386 0.2536557912826538 0 1.0 0 0.0 0 0.0 0 0.0 1.1343259811401367 -0.16415569186210632 0.21605446934700012 0.0 0.0 1.0 0.5642899870872498 0.25105178356170654 0 1.0 0 0.0 0 0.0 0 0.0 1.140974998474121 -0.15927754342556 0.21605446934700012 0.0 0.0 0.999969482421875 0.5680148601531982 0.2573285698890686 0 1.0 0 0.0 0 0.0 0 0.0 0.9252774715423584 -0.1641751527786255 0.21605446934700012 0.0 0.0 0.999969482421875 0.4110276997089386 0.2536557912826538 0 1.0 0 0.0 0 0.0 0 0.0 1.127382755279541 -0.1686592400074005 0.21605446934700012 0.0 0.0 0.999969482421875 0.5602080821990967 0.2450999617576599 0 1.0 0 0.0 0 0.0 0 0.0 1.1343259811401367 -0.16415569186210632 0.21605446934700012 0.0 0.0 1.0 0.5642899870872498 0.25105178356170654 0 1.0 0 0.0 0 0.0 0 0.0 0.9361939430236816 -0.1707790642976761 0.21605445444583893 0.0 0.0 1.0 0.41742268204689026 0.24444663524627686 0 1.0 0 0.0 0 0.0 0 0.0 1.127382755279541 -0.1686592400074005 0.21605446934700012 0.0 0.0 0.999969482421875 0.5602080821990967 0.2450999617576599 0 1.0 0 0.0 0 0.0 0 0.0 0.9252774715423584 -0.1641751527786255 0.21605446934700012 0.0 0.0 0.999969482421875 0.4110276997089386 0.2536557912826538 0 1.0 0 0.0 0 0.0 0 0.0 0.9361939430236816 -0.1707790642976761 0.21605445444583893 0.0 0.0 1.0 0.41742268204689026 0.24444663524627686 0 1.0 0 0.0 0 0.0 0 0.0 1.120154857635498 -0.17277118563652039 0.21605445444583893 0.0 0.0 1.0 0.5557567477226257 0.23950564861297607 0 1.0 0 0.0 0 0.0 0 0.0 1.127382755279541 -0.1686592400074005 0.21605446934700012 0.0 0.0 0.999969482421875 0.5602080821990967 0.2450999617576599 0 1.0 0 0.0 0 0.0 0 0.0 0.9478108882904053 -0.17650245130062103 0.21605445444583893 0.0 0.0 0.999969482421875 0.4247432053089142 0.23605746030807495 0 1.0 0 0.0 0 0.0 0 0.0 1.120154857635498 -0.17277118563652039 0.21605445444583893 0.0 0.0 1.0 0.5557567477226257 0.23950564861297607 0 1.0 0 0.0 0 0.0 0 0.0 0.9361939430236816 -0.1707790642976761 0.21605445444583893 0.0 0.0 1.0 0.41742268204689026 0.24444663524627686 0 1.0 0 0.0 0 0.0 0 0.0 0.9478108882904053 -0.17650245130062103 0.21605445444583893 0.0 0.0 0.999969482421875 0.4247432053089142 0.23605746030807495 0 1.0 0 0.0 0 0.0 0 0.0 1.112642526626587 -0.17649151384830475 0.21605445444583893 0.0 0.0 1.0 0.550920307636261 0.23428791761398315 0 1.0 0 0.0 0 0.0 0 0.0 1.120154857635498 -0.17277118563652039 0.21605445444583893 0.0 0.0 1.0 0.5557567477226257 0.23950564861297607 0 1.0 0 0.0 0 0.0 0 0.0 0.9478108882904053 -0.17650245130062103 0.21605445444583893 0.0 0.0 0.999969482421875 0.4247432053089142 0.23605746030807495 0 1.0 0 0.0 0 0.0 0 0.0 1.1048455238342285 -0.1798202246427536 0.21605445444583893 0.0 0.0 1.0 0.5456847548484802 0.2294696569442749 0 1.0 0 0.0 0 0.0 0 0.0 1.112642526626587 -0.17649151384830475 0.21605445444583893 0.0 0.0 1.0 0.550920307636261 0.23428791761398315 0 1.0 0 0.0 0 0.0 0 0.0 0.9601285457611084 -0.18134532868862152 0.21605445444583893 0.0 0.0 1.0 0.4330454468727112 0.22857457399368286 0 1.0 0 0.0 0 0.0 0 0.0 1.1048455238342285 -0.1798202246427536 0.21605445444583893 0.0 0.0 1.0 0.5456847548484802 0.2294696569442749 0 1.0 0 0.0 0 0.0 0 0.0 0.9478108882904053 -0.17650245130062103 0.21605445444583893 0.0 0.0 0.999969482421875 0.4247432053089142 0.23605746030807495 0 1.0 0 0.0 0 0.0 0 0.0 0.9601285457611084 -0.18134532868862152 0.21605445444583893 0.0 0.0 1.0 0.4330454468727112 0.22857457399368286 0 1.0 0 0.0 0 0.0 0 0.0 1.0967638492584229 -0.18275731801986694 0.21605445444583893 0.0 0.0 0.999969482421875 0.5400393009185791 0.22507810592651367 0 1.0 0 0.0 0 0.0 0 0.0 1.1048455238342285 -0.1798202246427536 0.21605445444583893 0.0 0.0 1.0 0.5456847548484802 0.2294696569442749 0 1.0 0 0.0 0 0.0 0 0.0 0.9731466770172119 -0.18530766665935516 0.21605445444583893 0.0 0.0 1.0 0.4423677325248718 0.22210901975631714 0 1.0 0 0.0 0 0.0 0 0.0 1.0967638492584229 -0.18275731801986694 0.21605445444583893 0.0 0.0 0.999969482421875 0.5400393009185791 0.22507810592651367 0 1.0 0 0.0 0 0.0 0 0.0 0.9601285457611084 -0.18134532868862152 0.21605445444583893 0.0 0.0 1.0 0.4330454468727112 0.22857457399368286 0 1.0 0 0.0 0 0.0 0 0.0 0.9731466770172119 -0.18530766665935516 0.21605445444583893 0.0 0.0 1.0 0.4423677325248718 0.22210901975631714 0 1.0 0 0.0 0 0.0 0 0.0 1.088397741317749 -0.18530280888080597 0.21605445444583893 0.0 0.0 1.0 0.5339774489402771 0.22114479541778564 0 1.0 0 0.0 0 0.0 0 0.0 1.0967638492584229 -0.18275731801986694 0.21605445444583893 0.0 0.0 0.999969482421875 0.5400393009185791 0.22507810592651367 0 1.0 0 0.0 0 0.0 0 0.0 0.9731466770172119 -0.18530766665935516 0.21605445444583893 0.0 0.0 1.0 0.4423677325248718 0.22210901975631714 0 1.0 0 0.0 0 0.0 0 0.0 1.079746961593628 -0.18745668232440948 0.21605445444583893 0.0 0.0 1.0 0.5274980664253235 0.2177051305770874 0 1.0 0 0.0 0 0.0 0 0.0 1.088397741317749 -0.18530280888080597 0.21605445444583893 0.0 0.0 1.0 0.5339774489402771 0.22114479541778564 0 1.0 0 0.0 0 0.0 0 0.0 0.9868652820587158 -0.18838949501514435 0.21605445444583893 0.0 0.0 1.0 0.45271965861320496 0.21679538488388062 0 1.0 0 0.0 0 0.0 0 0.0 1.079746961593628 -0.18745668232440948 0.21605445444583893 0.0 0.0 1.0 0.5274980664253235 0.2177051305770874 0 1.0 0 0.0 0 0.0 0 0.0 0.9731466770172119 -0.18530766665935516 0.21605445444583893 0.0 0.0 1.0 0.4423677325248718 0.22210901975631714 0 1.0 0 0.0 0 0.0 0 0.0 0.9868652820587158 -0.18838949501514435 0.21605445444583893 0.0 0.0 1.0 0.45271965861320496 0.21679538488388062 0 1.0 0 0.0 0 0.0 0 0.0 1.0708115100860596 -0.1892189383506775 0.21605445444583893 0.0 0.0 1.0 0.5206069350242615 0.21479815244674683 0 1.0 0 0.0 0 0.0 0 0.0 1.079746961593628 -0.18745668232440948 0.21605445444583893 0.0 0.0 1.0 0.5274980664253235 0.2177051305770874 0 1.0 0 0.0 0 0.0 0 0.0 1.0012843608856201 -0.19059079885482788 0.21605445444583893 0.0 0.0 1.0 0.464069128036499 0.212787926197052 0 1.0 0 0.0 0 0.0 0 0.0 1.0708115100860596 -0.1892189383506775 0.21605445444583893 0.0 0.0 1.0 0.5206069350242615 0.21479815244674683 0 1.0 0 0.0 0 0.0 0 0.0 0.9868652820587158 -0.18838949501514435 0.21605445444583893 0.0 0.0 1.0 0.45271965861320496 0.21679538488388062 0 1.0 0 0.0 0 0.0 0 0.0 1.0012843608856201 -0.19059079885482788 0.21605445444583893 0.0 0.0 1.0 0.464069128036499 0.212787926197052 0 1.0 0 0.0 0 0.0 0 0.0 1.061591625213623 -0.19058957695960999 0.21605445444583893 0.0 0.0 1.0 0.5133183598518372 0.21246552467346191 0 1.0 0 0.0 0 0.0 0 0.0 1.0708115100860596 -0.1892189383506775 0.21605445444583893 0.0 0.0 1.0 0.5206069350242615 0.21479815244674683 0 1.0 0 0.0 0 0.0 0 0.0 1.0012843608856201 -0.19059079885482788 0.21605445444583893 0.0 0.0 1.0 0.464069128036499 0.212787926197052 0 1.0 0 0.0 0 0.0 0 0.0 1.0520870685577393 -0.19156861305236816 0.21605445444583893 0.0 0.0 1.0 0.5056557655334473 0.21075117588043213 0 1.0 0 0.0 0 0.0 0 0.0 1.061591625213623 -0.19058957695960999 0.21605445444583893 0.0 0.0 1.0 0.5133183598518372 0.21246552467346191 0 1.0 0 0.0 0 0.0 0 0.0 1.016404151916504 -0.19191157817840576 0.21605445444583893 0.0 -3.0518509447574615e-05 0.999969482421875 0.4763302505016327 0.21025210618972778 0 1.0 0 0.0 0 0.0 0 0.0 1.0520870685577393 -0.19156861305236816 0.21605445444583893 0.0 0.0 1.0 0.5056557655334473 0.21075117588043213 0 1.0 0 0.0 0 0.0 0 0.0 1.0012843608856201 -0.19059079885482788 0.21605445444583893 0.0 0.0 1.0 0.464069128036499 0.212787926197052 0 1.0 0 0.0 0 0.0 0 0.0 1.016404151916504 -0.19191157817840576 0.21605445444583893 0.0 -3.0518509447574615e-05 0.999969482421875 0.4763302505016327 0.21025210618972778 0 1.0 0 0.0 0 0.0 0 0.0 1.0422980785369873 -0.19215603172779083 0.21605445444583893 0.0 0.0 1.0 0.49765321612358093 0.20969903469085693 0 1.0 0 0.0 0 0.0 0 0.0 1.0520870685577393 -0.19156861305236816 0.21605445444583893 0.0 0.0 1.0 0.5056557655334473 0.21075117588043213 0 1.0 0 0.0 0 0.0 0 0.0 1.032224416732788 -0.19235184788703918 0.21605445444583893 0.0 0.0 1.0 0.4893549680709839 0.20935219526290894 0 1.0 0 0.0 0 0.0 0 0.0 1.0422980785369873 -0.19215603172779083 0.21605445444583893 0.0 0.0 1.0 0.49765321612358093 0.20969903469085693 0 1.0 0 0.0 0 0.0 0 0.0 1.016404151916504 -0.19191157817840576 0.21605445444583893 0.0 -3.0518509447574615e-05 0.999969482421875 0.4763302505016327 0.21025210618972778 0 1.0 0 0.0 0 0.0 0 0.0 0.914886474609375 0.24932944774627686 0.21605448424816132 0.0 0.0 1.0 0.4341694116592407 0.6617535948753357 0 1.0 0 0.0 0 0.0 0 0.0 1.1404554843902588 0.314128041267395 0.21605446934700012 0.0 0.0 1.0 0.5445256233215332 0.6925103664398193 0 1.0 0 0.0 0 0.0 0 0.0 0.914886474609375 0.314128041267395 0.21605446934700012 0.0 0.0 1.0 0.4373004734516144 0.6980294585227966 0 1.0 0 0.0 0 0.0 0 0.0 0.914886474609375 0.24932944774627686 0.21605448424816132 0.0 0.0 1.0 0.4341694116592407 0.6617535948753357 0 1.0 0 0.0 0 0.0 0 0.0 1.1404554843902588 0.24932944774627686 0.21605448424816132 0.0 0.0 1.0 0.5467431545257568 0.6560397148132324 0 1.0 0 0.0 0 0.0 0 0.0 1.1404554843902588 0.314128041267395 0.21605446934700012 0.0 0.0 1.0 0.5445256233215332 0.6925103664398193 0 1.0 0 0.0 0 0.0 0 0.0 0.4047873020172119 0.1962110698223114 0.21605448424816132 0.0 0.0 1.0 0.477262407541275 0.6266326904296875 0 1.0 0 0.0 0 0.0 0 0.0 0.43031740188598633 0.19626706838607788 0.21605448424816132 0.0 -6.103701889514923e-05 1.0 0.49122709035873413 0.6263492107391357 0 1.0 0 0.0 0 0.0 0 0.0 0.4178636074066162 0.19643977284431458 0.21605448424816132 0.0 -6.103701889514923e-05 1.0 0.4844124913215637 0.626757025718689 0 1.0 0 0.0 0 0.0 0 0.0 0.4047873020172119 0.1962110698223114 0.21605448424816132 0.0 0.0 1.0 0.477262407541275 0.6266326904296875 0 1.0 0 0.0 0 0.0 0 0.0 0.4422264099121094 0.19574898481369019 0.21605448424816132 0.0 0.0 1.0 0.4977310299873352 0.6254823803901672 0 1.0 0 0.0 0 0.0 0 0.0 0.43031740188598633 0.19626706838607788 0.21605448424816132 0.0 -6.103701889514923e-05 1.0 0.49122709035873413 0.6263492107391357 0 1.0 0 0.0 0 0.0 0 0.0 0.39229464530944824 0.1955251395702362 0.21605448424816132 0.0 0.0 1.0 0.47045332193374634 0.6259280443191528 0 1.0 0 0.0 0 0.0 0 0.0 0.4422264099121094 0.19574898481369019 0.21605448424816132 0.0 0.0 1.0 0.4977310299873352 0.6254823803901672 0 1.0 0 0.0 0 0.0 0 0.0 0.4047873020172119 0.1962110698223114 0.21605448424816132 0.0 0.0 1.0 0.477262407541275 0.6266326904296875 0 1.0 0 0.0 0 0.0 0 0.0 0.39229464530944824 0.1955251395702362 0.21605448424816132 0.0 0.0 1.0 0.47045332193374634 0.6259280443191528 0 1.0 0 0.0 0 0.0 0 0.0 0.45359039306640625 0.1948854923248291 0.21605448424816132 0.0 0.0 1.0 0.5039113759994507 0.6241854429244995 0 1.0 0 0.0 0 0.0 0 0.0 0.4422264099121094 0.19574898481369019 0.21605448424816132 0.0 0.0 1.0 0.4977310299873352 0.6254823803901672 0 1.0 0 0.0 0 0.0 0 0.0 0.3803856372833252 0.1943819224834442 0.21605448424816132 0.0 0.0 1.0 0.46399572491645813 0.624677300453186 0 1.0 0 0.0 0 0.0 0 0.0 0.45359039306640625 0.1948854923248291 0.21605448424816132 0.0 0.0 1.0 0.5039113759994507 0.6241854429244995 0 1.0 0 0.0 0 0.0 0 0.0 0.39229464530944824 0.1955251395702362 0.21605448424816132 0.0 0.0 1.0 0.47045332193374634 0.6259280443191528 0 1.0 0 0.0 0 0.0 0 0.0 0.3803856372833252 0.1943819224834442 0.21605448424816132 0.0 0.0 1.0 0.46399572491645813 0.624677300453186 0 1.0 0 0.0 0 0.0 0 0.0 0.46440958976745605 0.19367659091949463 0.21605448424816132 0.0 0.0 1.0 0.5097607374191284 0.6224871873855591 0 1.0 0 0.0 0 0.0 0 0.0 0.45359039306640625 0.1948854923248291 0.21605448424816132 0.0 0.0 1.0 0.5039113759994507 0.6241854429244995 0 1.0 0 0.0 0 0.0 0 0.0 0.3690605163574219 0.19278141856193542 0.21605448424816132 0.0 0.0 1.0 0.45789432525634766 0.6229138374328613 0 1.0 0 0.0 0 0.0 0 0.0 0.46440958976745605 0.19367659091949463 0.21605448424816132 0.0 0.0 1.0 0.5097607374191284 0.6224871873855591 0 1.0 0 0.0 0 0.0 0 0.0 0.3803856372833252 0.1943819224834442 0.21605448424816132 0.0 0.0 1.0 0.46399572491645813 0.624677300453186 0 1.0 0 0.0 0 0.0 0 0.0 0.3690605163574219 0.19278141856193542 0.21605448424816132 0.0 0.0 1.0 0.45789432525634766 0.6229138374328613 0 1.0 0 0.0 0 0.0 0 0.0 0.4746840000152588 0.19212231040000916 0.21605448424816132 0.0 0.0 1.0 0.5152760744094849 0.6204148530960083 0 1.0 0 0.0 0 0.0 0 0.0 0.46440958976745605 0.19367659091949463 0.21605448424816132 0.0 0.0 1.0 0.5097607374191284 0.6224871873855591 0 1.0 0 0.0 0 0.0 0 0.0 0.3583190441131592 0.19072362780570984 0.21605448424816132 0.0 0.0 1.0 0.45214876532554626 0.6206685304641724 0 1.0 0 0.0 0 0.0 0 0.0 0.4746840000152588 0.19212231040000916 0.21605448424816132 0.0 0.0 1.0 0.5152760744094849 0.6204148530960083 0 1.0 0 0.0 0 0.0 0 0.0 0.3690605163574219 0.19278141856193542 0.21605448424816132 0.0 0.0 1.0 0.45789432525634766 0.6229138374328613 0 1.0 0 0.0 0 0.0 0 0.0 0.3583190441131592 0.19072362780570984 0.21605448424816132 0.0 0.0 1.0 0.45214876532554626 0.6206685304641724 0 1.0 0 0.0 0 0.0 0 0.0 0.48441362380981445 0.1902226209640503 0.21605448424816132 0.0 0.0 0.999969482421875 0.5204581022262573 0.6179935932159424 0 1.0 0 0.0 0 0.0 0 0.0 0.4746840000152588 0.19212231040000916 0.21605448424816132 0.0 0.0 1.0 0.5152760744094849 0.6204148530960083 0 1.0 0 0.0 0 0.0 0 0.0 0.3481614589691162 0.18820855021476746 0.21605448424816132 0.0 0.0 1.0 0.44675490260124207 0.6179690361022949 0 1.0 0 0.0 0 0.0 0 0.0 0.48441362380981445 0.1902226209640503 0.21605448424816132 0.0 0.0 0.999969482421875 0.5204581022262573 0.6179935932159424 0 1.0 0 0.0 0 0.0 0 0.0 0.3583190441131592 0.19072362780570984 0.21605448424816132 0.0 0.0 1.0 0.45214876532554626 0.6206685304641724 0 1.0 0 0.0 0 0.0 0 0.0 0.3481614589691162 0.18820855021476746 0.21605448424816132 0.0 0.0 1.0 0.44675490260124207 0.6179690361022949 0 1.0 0 0.0 0 0.0 0 0.0 0.49359822273254395 0.18797752261161804 0.21605448424816132 0.0 0.0 1.0 0.5253105163574219 0.6152456402778625 0 1.0 0 0.0 0 0.0 0 0.0 0.48441362380981445 0.1902226209640503 0.21605448424816132 0.0 0.0 0.999969482421875 0.5204581022262573 0.6179935932159424 0 1.0 0 0.0 0 0.0 0 0.0 0.33858752250671387 0.18523618578910828 0.21605448424816132 0.0 0.0 1.0 0.4417054355144501 0.6148390769958496 0 1.0 0 0.0 0 0.0 0 0.0 0.49359822273254395 0.18797752261161804 0.21605448424816132 0.0 0.0 1.0 0.5253105163574219 0.6152456402778625 0 1.0 0 0.0 0 0.0 0 0.0 0.3481614589691162 0.18820855021476746 0.21605448424816132 0.0 0.0 1.0 0.44675490260124207 0.6179690361022949 0 1.0 0 0.0 0 0.0 0 0.0 0.33858752250671387 0.18523618578910828 0.21605448424816132 0.0 0.0 1.0 0.4417054355144501 0.6148390769958496 0 1.0 0 0.0 0 0.0 0 0.0 0.5022380352020264 0.1853870451450348 0.21605448424816132 0.0 0.0 1.0 0.5298394560813904 0.6121901869773865 0 1.0 0 0.0 0 0.0 0 0.0 0.49359822273254395 0.18797752261161804 0.21605448424816132 0.0 0.0 1.0 0.5253105163574219 0.6152456402778625 0 1.0 0 0.0 0 0.0 0 0.0 0.33858752250671387 0.18523618578910828 0.21605448424816132 0.0 0.0 1.0 0.4417054355144501 0.6148390769958496 0 1.0 0 0.0 0 0.0 0 0.0 0.5103330612182617 0.18245115876197815 0.21605448424816132 0.0 0.0 1.0 0.5340526103973389 0.6088428497314453 0 1.0 0 0.0 0 0.0 0 0.0 0.5022380352020264 0.1853870451450348 0.21605448424816132 0.0 0.0 1.0 0.5298394560813904 0.6121901869773865 0 1.0 0 0.0 0 0.0 0 0.0 0.32959747314453125 0.1818065345287323 0.21605448424816132 0.0 0.0 1.0 0.43699097633361816 0.6112980842590332 0 1.0 0 0.0 0 0.0 0 0.0 0.5103330612182617 0.18245115876197815 0.21605448424816132 0.0 0.0 1.0 0.5340526103973389 0.6088428497314453 0 1.0 0 0.0 0 0.0 0 0.0 0.33858752250671387 0.18523618578910828 0.21605448424816132 0.0 0.0 1.0 0.4417054355144501 0.6148390769958496 0 1.0 0 0.0 0 0.0 0 0.0 0.32959747314453125 0.1818065345287323 0.21605448424816132 0.0 0.0 1.0 0.43699097633361816 0.6112980842590332 0 1.0 0 0.0 0 0.0 0 0.0 0.5178830623626709 0.17916986346244812 0.21605448424816132 0.0 0.0 1.0 0.5379588007926941 0.6052160263061523 0 1.0 0 0.0 0 0.0 0 0.0 0.5103330612182617 0.18245115876197815 0.21605448424816132 0.0 0.0 1.0 0.5340526103973389 0.6088428497314453 0 1.0 0 0.0 0 0.0 0 0.0 0.32119107246398926 0.17791959643363953 0.21605448424816132 0.0 0.0 1.0 0.4326004981994629 0.6073610782623291 0 1.0 0 0.0 0 0.0 0 0.0 0.5178830623626709 0.17916986346244812 0.21605448424816132 0.0 0.0 1.0 0.5379588007926941 0.6052160263061523 0 1.0 0 0.0 0 0.0 0 0.0 0.32959747314453125 0.1818065345287323 0.21605448424816132 0.0 0.0 1.0 0.43699097633361816 0.6112980842590332 0 1.0 0 0.0 0 0.0 0 0.0 0.32119107246398926 0.17791959643363953 0.21605448424816132 0.0 0.0 1.0 0.4326004981994629 0.6073610782623291 0 1.0 0 0.0 0 0.0 0 0.0 0.524888277053833 0.1755431890487671 0.21605448424816132 0.0 0.0 1.0 0.5415674448013306 0.6013184785842896 0 1.0 0 0.0 0 0.0 0 0.0 0.5178830623626709 0.17916986346244812 0.21605448424816132 0.0 0.0 1.0 0.5379588007926941 0.6052160263061523 0 1.0 0 0.0 0 0.0 0 0.0 0.313368558883667 0.17357537150382996 0.21605448424816132 0.0 0.0 1.0 0.4285222887992859 0.6030384302139282 0 1.0 0 0.0 0 0.0 0 0.0 0.524888277053833 0.1755431890487671 0.21605448424816132 0.0 0.0 1.0 0.5415674448013306 0.6013184785842896 0 1.0 0 0.0 0 0.0 0 0.0 0.32119107246398926 0.17791959643363953 0.21605448424816132 0.0 0.0 1.0 0.4326004981994629 0.6073610782623291 0 1.0 0 0.0 0 0.0 0 0.0 0.313368558883667 0.17357537150382996 0.21605448424816132 0.0 0.0 1.0 0.4285222887992859 0.6030384302139282 0 1.0 0 0.0 0 0.0 0 0.0 0.531348705291748 0.17157110571861267 0.21605448424816132 0.0 0.0 1.0 0.5448883175849915 0.5971555709838867 0 1.0 0 0.0 0 0.0 0 0.0 0.524888277053833 0.1755431890487671 0.21605448424816132 0.0 0.0 1.0 0.5415674448013306 0.6013184785842896 0 1.0 0 0.0 0 0.0 0 0.0 0.30612969398498535 0.1687738597393036 0.21605446934700012 0.0 0.0 0.999969482421875 0.4247440695762634 0.5983362197875977 0 1.0 0 0.0 0 0.0 0 0.0 0.531348705291748 0.17157110571861267 0.21605448424816132 0.0 0.0 1.0 0.5448883175849915 0.5971555709838867 0 1.0 0 0.0 0 0.0 0 0.0 0.313368558883667 0.17357537150382996 0.21605448424816132 0.0 0.0 1.0 0.4285222887992859 0.6030384302139282 0 1.0 0 0.0 0 0.0 0 0.0 0.30612969398498535 0.1687738597393036 0.21605446934700012 0.0 0.0 0.999969482421875 0.4247440695762634 0.5983362197875977 0 1.0 0 0.0 0 0.0 0 0.0 0.5373761653900146 0.16726094484329224 0.21605446934700012 0.0 0.0 1.0 0.5479847192764282 0.5927214622497559 0 1.0 0 0.0 0 0.0 0 0.0 0.531348705291748 0.17157110571861267 0.21605448424816132 0.0 0.0 1.0 0.5448883175849915 0.5971555709838867 0 1.0 0 0.0 0 0.0 0 0.0 0.29947471618652344 0.16351506114006042 0.21605446934700012 0.0 0.0 0.999969482421875 0.4212538003921509 0.5932559967041016 0 1.0 0 0.0 0 0.0 0 0.0 0.5373761653900146 0.16726094484329224 0.21605446934700012 0.0 0.0 1.0 0.5479847192764282 0.5927214622497559 0 1.0 0 0.0 0 0.0 0 0.0 0.30612969398498535 0.1687738597393036 0.21605446934700012 0.0 0.0 0.999969482421875 0.4247440695762634 0.5983362197875977 0 1.0 0 0.0 0 0.0 0 0.0 0.29947471618652344 0.16351506114006042 0.21605446934700012 0.0 0.0 0.999969482421875 0.4212538003921509 0.5932559967041016 0 1.0 0 0.0 0 0.0 0 0.0 0.5430824756622314 0.16261997818946838 0.21605446934700012 0.0 0.0 1.0 0.5509172081947327 0.588007390499115 0 1.0 0 0.0 0 0.0 0 0.0 0.5373761653900146 0.16726094484329224 0.21605446934700012 0.0 0.0 1.0 0.5479847192764282 0.5927214622497559 0 1.0 0 0.0 0 0.0 0 0.0 0.2933766841888428 0.15792062878608704 0.21605446934700012 0.0 0.0 1.0 0.4180349111557007 0.5878974199295044 0 1.0 0 0.0 0 0.0 0 0.0 0.5430824756622314 0.16261997818946838 0.21605446934700012 0.0 0.0 1.0 0.5509172081947327 0.588007390499115 0 1.0 0 0.0 0 0.0 0 0.0 0.29947471618652344 0.16351506114006042 0.21605446934700012 0.0 0.0 0.999969482421875 0.4212538003921509 0.5932559967041016 0 1.0 0 0.0 0 0.0 0 0.0 0.2933766841888428 0.15792062878608704 0.21605446934700012 0.0 0.0 1.0 0.4180349111557007 0.5878974199295044 0 1.0 0 0.0 0 0.0 0 0.0 0.5484678745269775 0.1576482057571411 0.21605446934700012 0.0 0.0 1.0 0.5536915063858032 0.5830111503601074 0 1.0 0 0.0 0 0.0 0 0.0 0.5430824756622314 0.16261997818946838 0.21605446934700012 0.0 0.0 1.0 0.5509172081947327 0.588007390499115 0 1.0 0 0.0 0 0.0 0 0.0 0.287808895111084 0.15211209654808044 0.21605446934700012 0.0 0.0 1.0 0.41507312655448914 0.5823611617088318 0 1.0 0 0.0 0 0.0 0 0.0 0.5484678745269775 0.1576482057571411 0.21605446934700012 0.0 0.0 1.0 0.5536915063858032 0.5830111503601074 0 1.0 0 0.0 0 0.0 0 0.0 0.2933766841888428 0.15792062878608704 0.21605446934700012 0.0 0.0 1.0 0.4180349111557007 0.5878974199295044 0 1.0 0 0.0 0 0.0 0 0.0 0.287808895111084 0.15211209654808044 0.21605446934700012 0.0 0.0 1.0 0.41507312655448914 0.5823611617088318 0 1.0 0 0.0 0 0.0 0 0.0 0.5535321235656738 0.15234562754631042 0.21605446934700012 0.0 0.0 1.0 0.5563127994537354 0.5777288675308228 0 1.0 0 0.0 0 0.0 0 0.0 0.5484678745269775 0.1576482057571411 0.21605446934700012 0.0 0.0 1.0 0.5536915063858032 0.5830111503601074 0 1.0 0 0.0 0 0.0 0 0.0 0.287808895111084 0.15211209654808044 0.21605446934700012 0.0 0.0 1.0 0.41507312655448914 0.5823611617088318 0 1.0 0 0.0 0 0.0 0 0.0 0.5582752227783203 0.14671224355697632 0.21605446934700012 0.0 0.0 1.0 0.5587862730026245 0.5721554756164551 0 1.0 0 0.0 0 0.0 0 0.0 0.5535321235656738 0.15234562754631042 0.21605446934700012 0.0 0.0 1.0 0.5563127994537354 0.5777288675308228 0 1.0 0 0.0 0 0.0 0 0.0 0.28277134895324707 0.14608952403068542 0.21605446934700012 0.0 0.0 0.999969482421875 0.41235995292663574 0.5766456127166748 0 1.0 0 0.0 0 0.0 0 0.0 0.5582752227783203 0.14671224355697632 0.21605446934700012 0.0 0.0 1.0 0.5587862730026245 0.5721554756164551 0 1.0 0 0.0 0 0.0 0 0.0 0.287808895111084 0.15211209654808044 0.21605446934700012 0.0 0.0 1.0 0.41507312655448914 0.5823611617088318 0 1.0 0 0.0 0 0.0 0 0.0 0.28277134895324707 0.14608952403068542 0.21605446934700012 0.0 0.0 0.999969482421875 0.41235995292663574 0.5766456127166748 0 1.0 0 0.0 0 0.0 0 0.0 0.562697172164917 0.1407480537891388 0.21605446934700012 0.0 0.0 1.0 0.5611169934272766 0.5662843585014343 0 1.0 0 0.0 0 0.0 0 0.0 0.5582752227783203 0.14671224355697632 0.21605446934700012 0.0 0.0 1.0 0.5587862730026245 0.5721554756164551 0 1.0 0 0.0 0 0.0 0 0.0 0.27826404571533203 0.13985291123390198 0.21605446934700012 0.0 0.0 1.0 0.4098873734474182 0.5707465410232544 0 1.0 0 0.0 0 0.0 0 0.0 0.562697172164917 0.1407480537891388 0.21605446934700012 0.0 0.0 1.0 0.5611169934272766 0.5662843585014343 0 1.0 0 0.0 0 0.0 0 0.0 0.28277134895324707 0.14608952403068542 0.21605446934700012 0.0 0.0 0.999969482421875 0.41235995292663574 0.5766456127166748 0 1.0 0 0.0 0 0.0 0 0.0 0.27826404571533203 0.13985291123390198 0.21605446934700012 0.0 0.0 1.0 0.4098873734474182 0.5707465410232544 0 1.0 0 0.0 0 0.0 0 0.0 0.566798210144043 0.13445305824279785 0.21605446934700012 0.0 0.0 0.999969482421875 0.5633097290992737 0.560107946395874 0 1.0 0 0.0 0 0.0 0 0.0 0.562697172164917 0.1407480537891388 0.21605446934700012 0.0 0.0 1.0 0.5611169934272766 0.5662843585014343 0 1.0 0 0.0 0 0.0 0 0.0 0.27428698539733887 0.13340222835540771 0.21605446934700012 0.0 0.0 1.0 0.40764808654785156 0.5646573305130005 0 1.0 0 0.0 0 0.0 0 0.0 0.566798210144043 0.13445305824279785 0.21605446934700012 0.0 0.0 0.999969482421875 0.5633097290992737 0.560107946395874 0 1.0 0 0.0 0 0.0 0 0.0 0.27826404571533203 0.13985291123390198 0.21605446934700012 0.0 0.0 1.0 0.4098873734474182 0.5707465410232544 0 1.0 0 0.0 0 0.0 0 0.0 0.27428698539733887 0.13340222835540771 0.21605446934700012 0.0 0.0 1.0 0.40764808654785156 0.5646573305130005 0 1.0 0 0.0 0 0.0 0 0.0 0.5705780982971191 0.1278272569179535 0.21605446934700012 0.0 0.0 1.0 0.5653687715530396 0.5536172986030579 0 1.0 0 0.0 0 0.0 0 0.0 0.566798210144043 0.13445305824279785 0.21605446934700012 0.0 0.0 0.999969482421875 0.5633097290992737 0.560107946395874 0 1.0 0 0.0 0 0.0 0 0.0 0.2708404064178467 0.12673750519752502 0.21605446934700012 0.0 0.0 0.999969482421875 0.40563562512397766 0.5583692789077759 0 1.0 0 0.0 0 0.0 0 0.0 0.5705780982971191 0.1278272569179535 0.21605446934700012 0.0 0.0 1.0 0.5653687715530396 0.5536172986030579 0 1.0 0 0.0 0 0.0 0 0.0 0.27428698539733887 0.13340222835540771 0.21605446934700012 0.0 0.0 1.0 0.40764808654785156 0.5646573305130005 0 1.0 0 0.0 0 0.0 0 0.0 0.2708404064178467 0.12673750519752502 0.21605446934700012 0.0 0.0 0.999969482421875 0.40563562512397766 0.5583692789077759 0 1.0 0 0.0 0 0.0 0 0.0 0.4196147918701172 0.12568670511245728 0.21605446934700012 0.0 0.0 1.0 0.48440268635749817 0.5620718598365784 0 1.0 0 0.0 0 0.0 0 0.0 0.5705780982971191 0.1278272569179535 0.21605446934700012 0.0 0.0 1.0 0.5653687715530396 0.5536172986030579 0 1.0 0 0.0 0 0.0 0 0.0 0.4196147918701172 0.12568670511245728 0.21605446934700012 0.0 0.0 1.0 0.48440268635749817 0.5620718598365784 0 1.0 0 0.0 0 0.0 0 0.0 0.4246535301208496 0.1256064474582672 0.21605446934700012 0.0 -0.00030518509447574615 0.999969482421875 0.48734185099601746 0.5618767738342285 0 1.0 0 0.0 0 0.0 0 0.0 0.5705780982971191 0.1278272569179535 0.21605446934700012 0.0 0.0 1.0 0.5653687715530396 0.5536172986030579 0 1.0 0 0.0 0 0.0 0 0.0 0.4246535301208496 0.1256064474582672 0.21605446934700012 0.0 -0.00030518509447574615 0.999969482421875 0.48734185099601746 0.5618767738342285 0 1.0 0 0.0 0 0.0 0 0.0 0.5740368366241455 0.12087064981460571 0.21605446934700012 0.0 0.0 1.0 0.5672982335090637 0.5468026399612427 0 1.0 0 0.0 0 0.0 0 0.0 0.5705780982971191 0.1278272569179535 0.21605446934700012 0.0 0.0 1.0 0.5653687715530396 0.5536172986030579 0 1.0 0 0.0 0 0.0 0 0.0 0.26792407035827637 0.1198587417602539 0.21605446934700012 0.0 0.0 1.0 0.4038441479206085 0.5518714189529419 0 1.0 0 0.0 0 0.0 0 0.0 0.40726804733276367 0.1253851056098938 0.21605446934700012 0.0 -9.155552834272385e-05 1.0 0.4772038161754608 0.5619494318962097 0 1.0 0 0.0 0 0.0 0 0.0 0.2708404064178467 0.12673750519752502 0.21605446934700012 0.0 0.0 0.999969482421875 0.40563562512397766 0.5583692789077759 0 1.0 0 0.0 0 0.0 0 0.0 0.40726804733276367 0.1253851056098938 0.21605446934700012 0.0 -9.155552834272385e-05 1.0 0.4772038161754608 0.5619494318962097 0 1.0 0 0.0 0 0.0 0 0.0 0.4132881164550781 0.1256113052368164 0.21605446934700012 0.0 0.00039674062281847 0.999969482421875 0.48071256279945374 0.5621060132980347 0 1.0 0 0.0 0 0.0 0 0.0 0.2708404064178467 0.12673750519752502 0.21605446934700012 0.0 0.0 0.999969482421875 0.40563562512397766 0.5583692789077759 0 1.0 0 0.0 0 0.0 0 0.0 0.4132881164550781 0.1256113052368164 0.21605446934700012 0.0 0.00039674062281847 0.999969482421875 0.48071256279945374 0.5621060132980347 0 1.0 0 0.0 0 0.0 0 0.0 0.4196147918701172 0.12568670511245728 0.21605446934700012 0.0 0.0 1.0 0.48440268635749817 0.5620718598365784 0 1.0 0 0.0 0 0.0 0 0.0 0.2708404064178467 0.12673750519752502 0.21605446934700012 0.0 0.0 0.999969482421875 0.40563562512397766 0.5583692789077759 0 1.0 0 0.0 0 0.0 0 0.0 0.42949509620666504 0.12536564469337463 0.21605446934700012 0.0 0.0 1.0 0.49016478657722473 0.5615012645721436 0 1.0 0 0.0 0 0.0 0 0.0 0.5740368366241455 0.12087064981460571 0.21605446934700012 0.0 0.0 1.0 0.5672982335090637 0.5468026399612427 0 1.0 0 0.0 0 0.0 0 0.0 0.4246535301208496 0.1256064474582672 0.21605446934700012 0.0 -0.00030518509447574615 0.999969482421875 0.48734185099601746 0.5618767738342285 0 1.0 0 0.0 0 0.0 0 0.0 0.26792407035827637 0.1198587417602539 0.21605446934700012 0.0 0.0 1.0 0.4038441479206085 0.5518714189529419 0 1.0 0 0.0 0 0.0 0 0.0 0.4015543460845947 0.12500807642936707 0.21605446934700012 0.0 6.103701889514923e-05 1.0 0.4738771617412567 0.5616071224212646 0 1.0 0 0.0 0 0.0 0 0.0 0.40726804733276367 0.1253851056098938 0.21605446934700012 0.0 -9.155552834272385e-05 1.0 0.4772038161754608 0.5619494318962097 0 1.0 0 0.0 0 0.0 0 0.0 0.4341397285461426 0.12496429681777954 0.21605446934700012 0.0 0.0 1.0 0.49287116527557373 0.5609472990036011 0 1.0 0 0.0 0 0.0 0 0.0 0.5740368366241455 0.12087064981460571 0.21605446934700012 0.0 0.0 1.0 0.5672982335090637 0.5468026399612427 0 1.0 0 0.0 0 0.0 0 0.0 0.42949509620666504 0.12536564469337463 0.21605446934700012 0.0 0.0 1.0 0.49016478657722473 0.5615012645721436 0 1.0 0 0.0 0 0.0 0 0.0 0.26792407035827637 0.1198587417602539 0.21605446934700012 0.0 0.0 1.0 0.4038441479206085 0.5518714189529419 0 1.0 0 0.0 0 0.0 0 0.0 0.3961472511291504 0.1244802474975586 0.21605446934700012 0.0 0.0 0.999969482421875 0.47073280811309814 0.5610840916633606 0 1.0 0 0.0 0 0.0 0 0.0 0.4015543460845947 0.12500807642936707 0.21605446934700012 0.0 6.103701889514923e-05 1.0 0.4738771617412567 0.5616071224212646 0 1.0 0 0.0 0 0.0 0 0.0 0.4385874271392822 0.12440240383148193 0.21605446934700012 0.0 0.0 1.0 0.4954608380794525 0.5602172613143921 0 1.0 0 0.0 0 0.0 0 0.0 0.5740368366241455 0.12087064981460571 0.21605446934700012 0.0 0.0 1.0 0.5672982335090637 0.5468026399612427 0 1.0 0 0.0 0 0.0 0 0.0 0.4341397285461426 0.12496429681777954 0.21605446934700012 0.0 0.0 1.0 0.49287116527557373 0.5609472990036011 0 1.0 0 0.0 0 0.0 0 0.0 0.26792407035827637 0.1198587417602539 0.21605446934700012 0.0 0.0 1.0 0.4038441479206085 0.5518714189529419 0 1.0 0 0.0 0 0.0 0 0.0 0.39104652404785156 0.12380161881446838 0.21605446934700012 0.0 0.0 1.0 0.4677700698375702 0.5603847503662109 0 1.0 0 0.0 0 0.0 0 0.0 0.3961472511291504 0.1244802474975586 0.21605446934700012 0.0 0.0 0.999969482421875 0.47073280811309814 0.5610840916633606 0 1.0 0 0.0 0 0.0 0 0.0 0.4428379535675049 0.1236799955368042 0.21605446934700012 0.0 0.0 1.0 0.4979337751865387 0.5593129396438599 0 1.0 0 0.0 0 0.0 0 0.0 0.5740368366241455 0.12087064981460571 0.21605446934700012 0.0 0.0 1.0 0.5672982335090637 0.5468026399612427 0 1.0 0 0.0 0 0.0 0 0.0 0.4385874271392822 0.12440240383148193 0.21605446934700012 0.0 0.0 1.0 0.4954608380794525 0.5602172613143921 0 1.0 0 0.0 0 0.0 0 0.0 0.26792407035827637 0.1198587417602539 0.21605446934700012 0.0 0.0 1.0 0.4038441479206085 0.5518714189529419 0 1.0 0 0.0 0 0.0 0 0.0 0.38625240325927734 0.12297219038009644 0.21605446934700012 0.0 0.0 1.0 0.46498802304267883 0.55951327085495 0 1.0 0 0.0 0 0.0 0 0.0 0.39104652404785156 0.12380161881446838 0.21605446934700012 0.0 0.0 1.0 0.4677700698375702 0.5603847503662109 0 1.0 0 0.0 0 0.0 0 0.0 0.44689154624938965 0.12279704213142395 0.21605446934700012 0.0 0.0 0.999969482421875 0.5002904534339905 0.5582360029220581 0 1.0 0 0.0 0 0.0 0 0.0 0.5740368366241455 0.12087064981460571 0.21605446934700012 0.0 0.0 1.0 0.5672982335090637 0.5468026399612427 0 1.0 0 0.0 0 0.0 0 0.0 0.4428379535675049 0.1236799955368042 0.21605446934700012 0.0 0.0 1.0 0.4979337751865387 0.5593129396438599 0 1.0 0 0.0 0 0.0 0 0.0 0.26792407035827637 0.1198587417602539 0.21605446934700012 0.0 0.0 1.0 0.4038441479206085 0.5518714189529419 0 1.0 0 0.0 0 0.0 0 0.0 0.38176465034484863 0.12199193239212036 0.21605446934700012 0.0 0.0 1.0 0.46238505840301514 0.5584733486175537 0 1.0 0 0.0 0 0.0 0 0.0 0.38625240325927734 0.12297219038009644 0.21605446934700012 0.0 0.0 1.0 0.46498802304267883 0.55951327085495 0 1.0 0 0.0 0 0.0 0 0.0 0.4507482051849365 0.12175354361534119 0.21605446934700012 0.0 0.0 1.0 0.5025313496589661 0.556988000869751 0 1.0 0 0.0 0 0.0 0 0.0 0.5740368366241455 0.12087064981460571 0.21605446934700012 0.0 0.0 1.0 0.5672982335090637 0.5468026399612427 0 1.0 0 0.0 0 0.0 0 0.0 0.44689154624938965 0.12279704213142395 0.21605446934700012 0.0 0.0 0.999969482421875 0.5002904534339905 0.5582360029220581 0 1.0 0 0.0 0 0.0 0 0.0 0.26792407035827637 0.1198587417602539 0.21605446934700012 0.0 0.0 1.0 0.4038441479206085 0.5518714189529419 0 1.0 0 0.0 0 0.0 0 0.0 0.37758350372314453 0.12086087465286255 0.21605446934700012 0.0 0.0 1.0 0.4599595367908478 0.5572682619094849 0 1.0 0 0.0 0 0.0 0 0.0 0.38176465034484863 0.12199193239212036 0.21605446934700012 0.0 0.0 1.0 0.46238505840301514 0.5584733486175537 0 1.0 0 0.0 0 0.0 0 0.0 0.4544076919555664 0.12054949998855591 0.21605446934700012 0.0 0.0 1.0 0.5046570301055908 0.5555698871612549 0 1.0 0 0.0 0 0.0 0 0.0 0.5740368366241455 0.12087064981460571 0.21605446934700012 0.0 0.0 1.0 0.5672982335090637 0.5468026399612427 0 1.0 0 0.0 0 0.0 0 0.0 0.4507482051849365 0.12175354361534119 0.21605446934700012 0.0 0.0 1.0 0.5025313496589661 0.556988000869751 0 1.0 0 0.0 0 0.0 0 0.0 0.4544076919555664 0.12054949998855591 0.21605446934700012 0.0 0.0 1.0 0.5046570301055908 0.5555698871612549 0 1.0 0 0.0 0 0.0 0 0.0 0.5771746635437012 0.11358323693275452 0.21605446934700012 0.0 0.0 1.0 0.5691020488739014 0.5396531820297241 0 1.0 0 0.0 0 0.0 0 0.0 0.5740368366241455 0.12087064981460571 0.21605446934700012 0.0 0.0 1.0 0.5672982335090637 0.5468026399612427 0 1.0 0 0.0 0 0.0 0 0.0 0.26792407035827637 0.1198587417602539 0.21605446934700012 0.0 0.0 1.0 0.4038441479206085 0.5518714189529419 0 1.0 0 0.0 0 0.0 0 0.0 0.37370872497558594 0.119579017162323 0.21605446934700012 0.0 0.0 1.0 0.4577094316482544 0.5559004545211792 0 1.0 0 0.0 0 0.0 0 0.0 0.37758350372314453 0.12086087465286255 0.21605446934700012 0.0 0.0 1.0 0.4599595367908478 0.5572682619094849 0 1.0 0 0.0 0 0.0 0 0.0 0.4578702449798584 0.1191849410533905 0.21605446934700012 0.0 0.0 1.0 0.5066683292388916 0.5539826154708862 0 1.0 0 0.0 0 0.0 0 0.0 0.5771746635437012 0.11358323693275452 0.21605446934700012 0.0 0.0 1.0 0.5691020488739014 0.5396531820297241 0 1.0 0 0.0 0 0.0 0 0.0 0.4544076919555664 0.12054949998855591 0.21605446934700012 0.0 0.0 1.0 0.5046570301055908 0.5555698871612549 0 1.0 0 0.0 0 0.0 0 0.0 0.26553797721862793 0.11276590824127197 0.21605446934700012 0.0 0.0 1.0 0.4022688865661621 0.5451507568359375 0 1.0 0 0.0 0 0.0 0 0.0 0.37370872497558594 0.119579017162323 0.21605446934700012 0.0 0.0 1.0 0.4577094316482544 0.5559004545211792 0 1.0 0 0.0 0 0.0 0 0.0 0.26792407035827637 0.1198587417602539 0.21605446934700012 0.0 0.0 1.0 0.4038441479206085 0.5518714189529419 0 1.0 0 0.0 0 0.0 0 0.0 0.26553797721862793 0.11276590824127197 0.21605446934700012 0.0 0.0 1.0 0.4022688865661621 0.5451507568359375 0 1.0 0 0.0 0 0.0 0 0.0 0.37014031410217285 0.11814635992050171 0.21605446934700012 0.0 0.0 1.0 0.4556327164173126 0.5543718338012695 0 1.0 0 0.0 0 0.0 0 0.0 0.37370872497558594 0.119579017162323 0.21605446934700012 0.0 0.0 1.0 0.4577094316482544 0.5559004545211792 0 1.0 0 0.0 0 0.0 0 0.0 0.4611356258392334 0.11765983700752258 0.21605446934700012 0.0 0.0 1.0 0.5085660219192505 0.5522264242172241 0 1.0 0 0.0 0 0.0 0 0.0 0.5771746635437012 0.11358323693275452 0.21605446934700012 0.0 0.0 1.0 0.5691020488739014 0.5396531820297241 0 1.0 0 0.0 0 0.0 0 0.0 0.4578702449798584 0.1191849410533905 0.21605446934700012 0.0 0.0 1.0 0.5066683292388916 0.5539826154708862 0 1.0 0 0.0 0 0.0 0 0.0 0.26553797721862793 0.11276590824127197 0.21605446934700012 0.0 0.0 1.0 0.4022688865661621 0.5451507568359375 0 1.0 0 0.0 0 0.0 0 0.0 0.3668785095214844 0.1165628731250763 0.21605446934700012 0.0 0.0 1.0 0.45372745394706726 0.5526838302612305 0 1.0 0 0.0 0 0.0 0 0.0 0.37014031410217285 0.11814635992050171 0.21605446934700012 0.0 0.0 1.0 0.4556327164173126 0.5543718338012695 0 1.0 0 0.0 0 0.0 0 0.0 0.4642040729522705 0.11597418785095215 0.21605446934700012 0.0 0.0 1.0 0.5103511214256287 0.5503013730049133 0 1.0 0 0.0 0 0.0 0 0.0 0.5771746635437012 0.11358323693275452 0.21605446934700012 0.0 0.0 1.0 0.5691020488739014 0.5396531820297241 0 1.0 0 0.0 0 0.0 0 0.0 0.4611356258392334 0.11765983700752258 0.21605446934700012 0.0 0.0 1.0 0.5085660219192505 0.5522264242172241 0 1.0 0 0.0 0 0.0 0 0.0 0.26553797721862793 0.11276590824127197 0.21605446934700012 0.0 0.0 1.0 0.4022688865661621 0.5451507568359375 0 1.0 0 0.0 0 0.0 0 0.0 0.3639230728149414 0.11482855677604675 0.21605446934700012 0.0 0.0 1.0 0.4519915282726288 0.5508368611335754 0 1.0 0 0.0 0 0.0 0 0.0 0.3668785095214844 0.1165628731250763 0.21605446934700012 0.0 0.0 1.0 0.45372745394706726 0.5526838302612305 0 1.0 0 0.0 0 0.0 0 0.0 0.4670755863189697 0.11412802338600159 0.21605446934700012 0.0 0.0 1.0 0.512024462223053 0.54820716381073 0 1.0 0 0.0 0 0.0 0 0.0 0.5771746635437012 0.11358323693275452 0.21605446934700012 0.0 0.0 1.0 0.5691020488739014 0.5396531820297241 0 1.0 0 0.0 0 0.0 0 0.0 0.4642040729522705 0.11597418785095215 0.21605446934700012 0.0 0.0 1.0 0.5103511214256287 0.5503013730049133 0 1.0 0 0.0 0 0.0 0 0.0 0.26553797721862793 0.11276590824127197 0.21605446934700012 0.0 0.0 1.0 0.4022688865661621 0.5451507568359375 0 1.0 0 0.0 0 0.0 0 0.0 0.3621327877044678 0.11351263523101807 0.21605446934700012 0.0 0.0 1.0 0.4509294629096985 0.5494382381439209 0 1.0 0 0.0 0 0.0 0 0.0 0.3639230728149414 0.11482855677604675 0.21605446934700012 0.0 0.0 1.0 0.4519915282726288 0.5508368611335754 0 1.0 0 0.0 0 0.0 0 0.0 0.4697740077972412 0.1121310293674469 0.21605446934700012 0.0 0.0 0.999969482421875 0.5136004686355591 0.5459519624710083 0 1.0 0 0.0 0 0.0 0 0.0 0.5771746635437012 0.11358323693275452 0.21605446934700012 0.0 0.0 1.0 0.5691020488739014 0.5396531820297241 0 1.0 0 0.0 0 0.0 0 0.0 0.4670755863189697 0.11412802338600159 0.21605446934700012 0.0 0.0 1.0 0.512024462223053 0.54820716381073 0 1.0 0 0.0 0 0.0 0 0.0 0.4697740077972412 0.1121310293674469 0.21605446934700012 0.0 0.0 0.999969482421875 0.5136004686355591 0.5459519624710083 0 1.0 0 0.0 0 0.0 0 0.0 0.579991340637207 0.1059650182723999 0.21605446934700012 0.0 0.0 1.0 0.5707834959030151 0.5321577787399292 0 1.0 0 0.0 0 0.0 0 0.0 0.5771746635437012 0.11358323693275452 0.21605446934700012 0.0 0.0 1.0 0.5691020488739014 0.5396531820297241 0 1.0 0 0.0 0 0.0 0 0.0 0.26553797721862793 0.11276590824127197 0.21605446934700012 0.0 0.0 1.0 0.4022688865661621 0.5451507568359375 0 1.0 0 0.0 0 0.0 0 0.0 0.36049818992614746 0.11213347315788269 0.21605446934700012 0.0 0.0 1.0 0.44995224475860596 0.5479727387428284 0 1.0 0 0.0 0 0.0 0 0.0 0.3621327877044678 0.11351263523101807 0.21605446934700012 0.0 0.0 1.0 0.4509294629096985 0.5494382381439209 0 1.0 0 0.0 0 0.0 0 0.0 0.26368212699890137 0.10545903444290161 0.21605446934700012 0.0 0.0 1.0 0.4009059965610504 0.5381927490234375 0 1.0 0 0.0 0 0.0 0 0.0 0.36049818992614746 0.11213347315788269 0.21605446934700012 0.0 0.0 1.0 0.44995224475860596 0.5479727387428284 0 1.0 0 0.0 0 0.0 0 0.0 0.26553797721862793 0.11276590824127197 0.21605446934700012 0.0 0.0 1.0 0.4022688865661621 0.5451507568359375 0 1.0 0 0.0 0 0.0 0 0.0 0.26368212699890137 0.10545903444290161 0.21605446934700012 0.0 0.0 1.0 0.4009059965610504 0.5381927490234375 0 1.0 0 0.0 0 0.0 0 0.0 0.35901927947998047 0.11069107055664062 0.21605446934700012 0.0 0.0 1.0 0.4490593671798706 0.5464398860931396 0 1.0 0 0.0 0 0.0 0 0.0 0.36049818992614746 0.11213347315788269 0.21605446934700012 0.0 0.0 1.0 0.44995224475860596 0.5479727387428284 0 1.0 0 0.0 0 0.0 0 0.0 0.4723243713378906 0.10999298095703125 0.21605446934700012 0.0 0.0 1.0 0.5150942206382751 0.5435440540313721 0 1.0 0 0.0 0 0.0 0 0.0 0.579991340637207 0.1059650182723999 0.21605446934700012 0.0 0.0 1.0 0.5707834959030151 0.5321577787399292 0 1.0 0 0.0 0 0.0 0 0.0 0.4697740077972412 0.1121310293674469 0.21605446934700012 0.0 0.0 0.999969482421875 0.5136004686355591 0.5459519624710083 0 1.0 0 0.0 0 0.0 0 0.0 0.26368212699890137 0.10545903444290161 0.21605446934700012 0.0 0.0 1.0 0.4009059965610504 0.5381927490234375 0 1.0 0 0.0 0 0.0 0 0.0 0.3576960563659668 0.10918542742729187 0.21605446934700012 0.0 0.0 1.0 0.448250412940979 0.5448392033576965 0 1.0 0 0.0 0 0.0 0 0.0 0.35901927947998047 0.11069107055664062 0.21605446934700012 0.0 0.0 1.0 0.4490593671798706 0.5464398860931396 0 1.0 0 0.0 0 0.0 0 0.0 0.47472643852233887 0.10771384835243225 0.21605446934700012 0.0 0.0 1.0 0.5165062546730042 0.5409820079803467 0 1.0 0 0.0 0 0.0 0 0.0 0.579991340637207 0.1059650182723999 0.21605446934700012 0.0 0.0 1.0 0.5707834959030151 0.5321577787399292 0 1.0 0 0.0 0 0.0 0 0.0 0.4723243713378906 0.10999298095703125 0.21605446934700012 0.0 0.0 1.0 0.5150942206382751 0.5435440540313721 0 1.0 0 0.0 0 0.0 0 0.0 0.26368212699890137 0.10545903444290161 0.21605446934700012 0.0 0.0 1.0 0.4009059965610504 0.5381927490234375 0 1.0 0 0.0 0 0.0 0 0.0 0.35652852058410645 0.10761654376983643 0.21605446934700012 0.0 0.0 1.0 0.4475249648094177 0.5431699752807617 0 1.0 0 0.0 0 0.0 0 0.0 0.3576960563659668 0.10918542742729187 0.21605446934700012 0.0 0.0 1.0 0.448250412940979 0.5448392033576965 0 1.0 0 0.0 0 0.0 0 0.0 0.47697997093200684 0.1052936315536499 0.21605446934700012 0.0 0.0 0.999969482421875 0.5178369283676147 0.5382643938064575 0 1.0 0 0.0 0 0.0 0 0.0 0.579991340637207 0.1059650182723999 0.21605446934700012 0.0 0.0 1.0 0.5707834959030151 0.5321577787399292 0 1.0 0 0.0 0 0.0 0 0.0 0.47472643852233887 0.10771384835243225 0.21605446934700012 0.0 0.0 1.0 0.5165062546730042 0.5409820079803467 0 1.0 0 0.0 0 0.0 0 0.0 0.26368212699890137 0.10545903444290161 0.21605446934700012 0.0 0.0 1.0 0.4009059965610504 0.5381927490234375 0 1.0 0 0.0 0 0.0 0 0.0 0.3555166721343994 0.10598441958427429 0.21605446934700012 0.0 0.0 0.999969482421875 0.4468827545642853 0.5414315462112427 0 1.0 0 0.0 0 0.0 0 0.0 0.35652852058410645 0.10761654376983643 0.21605446934700012 0.0 0.0 1.0 0.4475249648094177 0.5431699752807617 0 1.0 0 0.0 0 0.0 0 0.0 0.26368212699890137 0.10545903444290161 0.21605446934700012 0.0 0.0 1.0 0.4009059965610504 0.5381927490234375 0 1.0 0 0.0 0 0.0 0 0.0 0.3546605110168457 0.10428905487060547 0.21605446934700012 0.0 0.0 1.0 0.4463235139846802 0.5396226644515991 0 1.0 0 0.0 0 0.0 0 0.0 0.3555166721343994 0.10598441958427429 0.21605446934700012 0.0 0.0 0.999969482421875 0.4468827545642853 0.5414315462112427 0 1.0 0 0.0 0 0.0 0 0.0 0.47697997093200684 0.1052936315536499 0.21605446934700012 0.0 0.0 0.999969482421875 0.5178369283676147 0.5382643938064575 0 1.0 0 0.0 0 0.0 0 0.0 0.5824871063232422 0.0980159342288971 0.21605446934700012 0.0 0.0 0.999969482421875 0.5723457336425781 0.5243042707443237 0 1.0 0 0.0 0 0.0 0 0.0 0.579991340637207 0.1059650182723999 0.21605446934700012 0.0 0.0 1.0 0.5707834959030151 0.5321577787399292 0 1.0 0 0.0 0 0.0 0 0.0 0.2623565196990967 0.09793812036514282 0.21605446934700012 0.0 0.0 1.0 0.39975273609161377 0.5309807062149048 0 1.0 0 0.0 0 0.0 0 0.0 0.3546605110168457 0.10428905487060547 0.21605446934700012 0.0 0.0 1.0 0.4463235139846802 0.5396226644515991 0 1.0 0 0.0 0 0.0 0 0.0 0.26368212699890137 0.10545903444290161 0.21605446934700012 0.0 0.0 1.0 0.4009059965610504 0.5381927490234375 0 1.0 0 0.0 0 0.0 0 0.0 0.47908520698547363 0.1027323305606842 0.21605446934700012 0.0 0.0 1.0 0.519087016582489 0.5353895425796509 0 1.0 0 0.0 0 0.0 0 0.0 0.5824871063232422 0.0980159342288971 0.21605446934700012 0.0 0.0 0.999969482421875 0.5723457336425781 0.5243042707443237 0 1.0 0 0.0 0 0.0 0 0.0 0.47697997093200684 0.1052936315536499 0.21605446934700012 0.0 0.0 0.999969482421875 0.5178369283676147 0.5382643938064575 0 1.0 0 0.0 0 0.0 0 0.0 0.2623565196990967 0.09793812036514282 0.21605446934700012 0.0 0.0 1.0 0.39975273609161377 0.5309807062149048 0 1.0 0 0.0 0 0.0 0 0.0 0.3539600372314453 0.10253044962882996 0.21605446934700012 0.0 0.0 1.0 0.44584715366363525 0.5377424955368042 0 1.0 0 0.0 0 0.0 0 0.0 0.3546605110168457 0.10428905487060547 0.21605446934700012 0.0 0.0 1.0 0.4463235139846802 0.5396226644515991 0 1.0 0 0.0 0 0.0 0 0.0 0.48104214668273926 0.10002994537353516 0.21605446934700012 0.0 0.0 1.0 0.5202569961547852 0.5323554277420044 0 1.0 0 0.0 0 0.0 0 0.0 0.5824871063232422 0.0980159342288971 0.21605446934700012 0.0 0.0 0.999969482421875 0.5723457336425781 0.5243042707443237 0 1.0 0 0.0 0 0.0 0 0.0 0.47908520698547363 0.1027323305606842 0.21605446934700012 0.0 0.0 1.0 0.519087016582489 0.5353895425796509 0 1.0 0 0.0 0 0.0 0 0.0 0.2623565196990967 0.09793812036514282 0.21605446934700012 0.0 0.0 1.0 0.39975273609161377 0.5309807062149048 0 1.0 0 0.0 0 0.0 0 0.0 0.35341525077819824 0.10070860385894775 0.21605446934700012 0.0 0.0 1.0 0.44545358419418335 0.5357896089553833 0 1.0 0 0.0 0 0.0 0 0.0 0.3539600372314453 0.10253044962882996 0.21605446934700012 0.0 0.0 1.0 0.44584715366363525 0.5377424955368042 0 1.0 0 0.0 0 0.0 0 0.0 0.2623565196990967 0.09793812036514282 0.21605446934700012 0.0 0.0 1.0 0.39975273609161377 0.5309807062149048 0 1.0 0 0.0 0 0.0 0 0.0 0.3530261516571045 0.09882351756095886 0.21605446934700012 0.0 0.0 0.999969482421875 0.44514283537864685 0.5337626934051514 0 1.0 0 0.0 0 0.0 0 0.0 0.35341525077819824 0.10070860385894775 0.21605446934700012 0.0 0.0 1.0 0.44545358419418335 0.5357896089553833 0 1.0 0 0.0 0 0.0 0 0.0 0.4828505516052246 0.09718650579452515 0.21605446934700012 0.0 0.0 1.0 0.5213472843170166 0.5291599035263062 0 1.0 0 0.0 0 0.0 0 0.0 0.5824871063232422 0.0980159342288971 0.21605446934700012 0.0 0.0 0.999969482421875 0.5723457336425781 0.5243042707443237 0 1.0 0 0.0 0 0.0 0 0.0 0.48104214668273926 0.10002994537353516 0.21605446934700012 0.0 0.0 1.0 0.5202569961547852 0.5323554277420044 0 1.0 0 0.0 0 0.0 0 0.0 0.2623565196990967 0.09793812036514282 0.21605446934700012 0.0 0.0 1.0 0.39975273609161377 0.5309807062149048 0 1.0 0 0.0 0 0.0 0 0.0 0.35279273986816406 0.09687519073486328 0.21605446934700012 0.0 0.0 1.0 0.4449150860309601 0.5316601991653442 0 1.0 0 0.0 0 0.0 0 0.0 0.3530261516571045 0.09882351756095886 0.21605446934700012 0.0 0.0 0.999969482421875 0.44514283537864685 0.5337626934051514 0 1.0 0 0.0 0 0.0 0 0.0 0.4828505516052246 0.09718650579452515 0.21605446934700012 0.0 0.0 1.0 0.5213472843170166 0.5291599035263062 0 1.0 0 0.0 0 0.0 0 0.0 0.4845106601715088 0.09420198202133179 0.21605446934700012 0.0 0.0 0.999969482421875 0.5223584175109863 0.5258004069328308 0 1.0 0 0.0 0 0.0 0 0.0 0.5824871063232422 0.0980159342288971 0.21605446934700012 0.0 0.0 0.999969482421875 0.5723457336425781 0.5243042707443237 0 1.0 0 0.0 0 0.0 0 0.0 0.4845106601715088 0.09420198202133179 0.21605446934700012 0.0 0.0 0.999969482421875 0.5223584175109863 0.5258004069328308 0 1.0 0 0.0 0 0.0 0 0.0 0.4860224723815918 0.09107637405395508 0.21605446934700012 0.0 0.0 0.999969482421875 0.5232906341552734 0.5222742557525635 0 1.0 0 0.0 0 0.0 0 0.0 0.5824871063232422 0.0980159342288971 0.21605446934700012 0.0 0.0 0.999969482421875 0.5723457336425781 0.5243042707443237 0 1.0 0 0.0 0 0.0 0 0.0 0.4860224723815918 0.09107637405395508 0.21605446934700012 0.0 0.0 0.999969482421875 0.5232906341552734 0.5222742557525635 0 1.0 0 0.0 0 0.0 0 0.0 0.48738574981689453 0.08780968189239502 0.21605446934700012 0.0 0.0 1.0 0.5241441130638123 0.5185786485671997 0 1.0 0 0.0 0 0.0 0 0.0 0.5824871063232422 0.0980159342288971 0.21605446934700012 0.0 0.0 0.999969482421875 0.5723457336425781 0.5243042707443237 0 1.0 0 0.0 0 0.0 0 0.0 0.48738574981689453 0.08780968189239502 0.21605446934700012 0.0 0.0 1.0 0.5241441130638123 0.5185786485671997 0 1.0 0 0.0 0 0.0 0 0.0 0.4886007308959961 0.08440190553665161 0.21605446934700012 0.0 0.0 1.0 0.5249190926551819 0.5147103667259216 0 1.0 0 0.0 0 0.0 0 0.0 0.5824871063232422 0.0980159342288971 0.21605446934700012 0.0 0.0 0.999969482421875 0.5723457336425781 0.5243042707443237 0 1.0 0 0.0 0 0.0 0 0.0 0.4886007308959961 0.08440190553665161 0.21605446934700012 0.0 0.0 1.0 0.5249190926551819 0.5147103667259216 0 1.0 0 0.0 0 0.0 0 0.0 0.4896674156188965 0.08085307478904724 0.21605446934700012 0.0 0.0 1.0 0.5256157517433167 0.5106663703918457 0 1.0 0 0.0 0 0.0 0 0.0 0.5824871063232422 0.0980159342288971 0.21605446934700012 0.0 0.0 0.999969482421875 0.5723457336425781 0.5243042707443237 0 1.0 0 0.0 0 0.0 0 0.0 0.26156115531921387 0.09020313620567322 0.21605446934700012 0.0 0.0 1.0 0.3988074064254761 0.5234965085983276 0 1.0 0 0.0 0 0.0 0 0.0 0.35279273986816406 0.09687519073486328 0.21605446934700012 0.0 0.0 1.0 0.4449150860309601 0.5316601991653442 0 1.0 0 0.0 0 0.0 0 0.0 0.2623565196990967 0.09793812036514282 0.21605446934700012 0.0 0.0 1.0 0.39975273609161377 0.5309807062149048 0 1.0 0 0.0 0 0.0 0 0.0 0.26156115531921387 0.09020313620567322 0.21605446934700012 0.0 0.0 1.0 0.3988074064254761 0.5234965085983276 0 1.0 0 0.0 0 0.0 0 0.0 0.35271477699279785 0.09486359357833862 0.21605446934700012 0.0 0.0 1.0 0.4447703957557678 0.5294804573059082 0 1.0 0 0.0 0 0.0 0 0.0 0.35279273986816406 0.09687519073486328 0.21605446934700012 0.0 0.0 1.0 0.4449150860309601 0.5316601991653442 0 1.0 0 0.0 0 0.0 0 0.0 0.26156115531921387 0.09020313620567322 0.21605446934700012 0.0 0.0 1.0 0.3988074064254761 0.5234965085983276 0 1.0 0 0.0 0 0.0 0 0.0 0.3527829647064209 0.09313416481018066 0.21605446934700012 0.0 0.0 1.0 0.4447213411331177 0.5275986194610596 0 1.0 0 0.0 0 0.0 0 0.0 0.35271477699279785 0.09486359357833862 0.21605446934700012 0.0 0.0 1.0 0.4447703957557678 0.5294804573059082 0 1.0 0 0.0 0 0.0 0 0.0 0.26156115531921387 0.09020313620567322 0.21605446934700012 0.0 0.0 1.0 0.3988074064254761 0.5234965085983276 0 1.0 0 0.0 0 0.0 0 0.0 0.35298728942871094 0.09144851565361023 0.21605446934700012 0.0 0.0 1.0 0.44475072622299194 0.5257568359375 0 1.0 0 0.0 0 0.0 0 0.0 0.3527829647064209 0.09313416481018066 0.21605446934700012 0.0 0.0 1.0 0.4447213411331177 0.5275986194610596 0 1.0 0 0.0 0 0.0 0 0.0 0.26156115531921387 0.09020313620567322 0.21605446934700012 0.0 0.0 1.0 0.3988074064254761 0.5234965085983276 0 1.0 0 0.0 0 0.0 0 0.0 0.35332775115966797 0.08980664610862732 0.21605446934700012 0.0 0.0 1.0 0.44485893845558167 0.5239549279212952 0 1.0 0 0.0 0 0.0 0 0.0 0.35298728942871094 0.09144851565361023 0.21605446934700012 0.0 0.0 1.0 0.44475072622299194 0.5257568359375 0 1.0 0 0.0 0 0.0 0 0.0 0.26129603385925293 0.08225411176681519 0.21605446934700012 0.0 0.0 1.0 0.39806950092315674 0.5157207250595093 0 1.0 0 0.0 0 0.0 0 0.0 0.35332775115966797 0.08980664610862732 0.21605446934700012 0.0 0.0 1.0 0.44485893845558167 0.5239549279212952 0 1.0 0 0.0 0 0.0 0 0.0 0.26156115531921387 0.09020313620567322 0.21605446934700012 0.0 0.0 1.0 0.3988074064254761 0.5234965085983276 0 1.0 0 0.0 0 0.0 0 0.0 0.26129603385925293 0.08225411176681519 0.21605446934700012 0.0 0.0 1.0 0.39806950092315674 0.5157207250595093 0 1.0 0 0.0 0 0.0 0 0.0 0.3538045883178711 0.08820855617523193 0.21605446934700012 0.0 0.0 1.0 0.445046603679657 0.5221929550170898 0 1.0 0 0.0 0 0.0 0 0.0 0.35332775115966797 0.08980664610862732 0.21605446934700012 0.0 0.0 1.0 0.44485893845558167 0.5239549279212952 0 1.0 0 0.0 0 0.0 0 0.0 0.26129603385925293 0.08225411176681519 0.21605446934700012 0.0 0.0 1.0 0.39806950092315674 0.5157207250595093 0 1.0 0 0.0 0 0.0 0 0.0 0.3544175624847412 0.08665427565574646 0.21605446934700012 0.0 0.0 1.0 0.44531404972076416 0.5204707384109497 0 1.0 0 0.0 0 0.0 0 0.0 0.3538045883178711 0.08820855617523193 0.21605446934700012 0.0 0.0 1.0 0.445046603679657 0.5221929550170898 0 1.0 0 0.0 0 0.0 0 0.0 0.26129603385925293 0.08225411176681519 0.21605446934700012 0.0 0.0 1.0 0.39806950092315674 0.5157207250595093 0 1.0 0 0.0 0 0.0 0 0.0 0.3551666736602783 0.08514377474784851 0.21605446934700012 0.0 0.0 1.0 0.44566184282302856 0.5187883377075195 0 1.0 0 0.0 0 0.0 0 0.0 0.3544175624847412 0.08665427565574646 0.21605446934700012 0.0 0.0 1.0 0.44531404972076416 0.5204707384109497 0 1.0 0 0.0 0 0.0 0 0.0 0.26129603385925293 0.08225411176681519 0.21605446934700012 0.0 0.0 1.0 0.39806950092315674 0.5157207250595093 0 1.0 0 0.0 0 0.0 0 0.0 0.3560521602630615 0.08367705345153809 0.21605446934700012 0.0 0.0 1.0 0.4460906684398651 0.5171455144882202 0 1.0 0 0.0 0 0.0 0 0.0 0.3551666736602783 0.08514377474784851 0.21605446934700012 0.0 0.0 1.0 0.44566184282302856 0.5187883377075195 0 1.0 0 0.0 0 0.0 0 0.0 0.26129603385925293 0.08225411176681519 0.21605446934700012 0.0 0.0 1.0 0.39806950092315674 0.5157207250595093 0 1.0 0 0.0 0 0.0 0 0.0 0.3570737838745117 0.08225411176681519 0.21605446934700012 0.0 0.0 0.999969482421875 0.4466010630130768 0.5155422687530518 0 1.0 0 0.0 0 0.0 0 0.0 0.3560521602630615 0.08367705345153809 0.21605446934700012 0.0 0.0 1.0 0.4460906684398651 0.5171455144882202 0 1.0 0 0.0 0 0.0 0 0.0 0.26160287857055664 0.0734853744506836 0.21605446934700012 0.0 0.0 1.0 0.3975098729133606 0.5070275068283081 0 1.0 0 0.0 0 0.0 0 0.0 0.3570737838745117 0.08225411176681519 0.21605446934700012 0.0 0.0 0.999969482421875 0.4466010630130768 0.5155422687530518 0 1.0 0 0.0 0 0.0 0 0.0 0.26129603385925293 0.08225411176681519 0.21605446934700012 0.0 0.0 1.0 0.39806950092315674 0.5157207250595093 0 1.0 0 0.0 0 0.0 0 0.0 0.26160287857055664 0.0734853744506836 0.21605446934700012 0.0 0.0 1.0 0.3975098729133606 0.5070275068283081 0 1.0 0 0.0 0 0.0 0 0.0 0.3582315444946289 0.08087494969367981 0.21605446934700012 0.0 0.0 1.0 0.4471936523914337 0.5139785408973694 0 1.0 0 0.0 0 0.0 0 0.0 0.3570737838745117 0.08225411176681519 0.21605446934700012 0.0 0.0 0.999969482421875 0.4466010630130768 0.5155422687530518 0 1.0 0 0.0 0 0.0 0 0.0 0.26160287857055664 0.0734853744506836 0.21605446934700012 0.0 0.0 1.0 0.3975098729133606 0.5070275068283081 0 1.0 0 0.0 0 0.0 0 0.0 0.3595256805419922 0.07953956723213196 0.21605446934700012 0.0 0.0 1.0 0.44786933064460754 0.5124543905258179 0 1.0 0 0.0 0 0.0 0 0.0 0.3582315444946289 0.08087494969367981 0.21605446934700012 0.0 0.0 1.0 0.4471936523914337 0.5139785408973694 0 1.0 0 0.0 0 0.0 0 0.0 0.26160287857055664 0.0734853744506836 0.21605446934700012 0.0 0.0 1.0 0.3975098729133606 0.5070275068283081 0 1.0 0 0.0 0 0.0 0 0.0 0.36095595359802246 0.07824796438217163 0.21605446934700012 0.0 0.0 1.0 0.448628693819046 0.5109696984291077 0 1.0 0 0.0 0 0.0 0 0.0 0.3595256805419922 0.07953956723213196 0.21605446934700012 0.0 0.0 1.0 0.44786933064460754 0.5124543905258179 0 1.0 0 0.0 0 0.0 0 0.0 0.26160287857055664 0.0734853744506836 0.21605446934700012 0.0 0.0 1.0 0.3975098729133606 0.5070275068283081 0 1.0 0 0.0 0 0.0 0 0.0 0.3625221252441406 0.07700017094612122 0.21605446934700012 0.0 0.0 1.0 0.4494723379611969 0.5095247030258179 0 1.0 0 0.0 0 0.0 0 0.0 0.36095595359802246 0.07824796438217163 0.21605446934700012 0.0 0.0 1.0 0.448628693819046 0.5109696984291077 0 1.0 0 0.0 0 0.0 0 0.0 0.26160287857055664 0.0734853744506836 0.21605446934700012 0.0 0.0 1.0 0.3975098729133606 0.5070275068283081 0 1.0 0 0.0 0 0.0 0 0.0 0.36519408226013184 0.07530966401100159 0.21605446934700012 0.0 0.0 1.0 0.45094168186187744 0.5075438022613525 0 1.0 0 0.0 0 0.0 0 0.0 0.3625221252441406 0.07700017094612122 0.21605446934700012 0.0 0.0 1.0 0.4494723379611969 0.5095247030258179 0 1.0 0 0.0 0 0.0 0 0.0 0.26160287857055664 0.0734853744506836 0.21605446934700012 0.0 0.0 1.0 0.3975098729133606 0.5070275068283081 0 1.0 0 0.0 0 0.0 0 0.0 0.3687732219696045 0.07350727915763855 0.21605446934700012 0.0 0.0 0.999969482421875 0.45294809341430664 0.5053983926773071 0 1.0 0 0.0 0 0.0 0 0.0 0.36519408226013184 0.07530966401100159 0.21605446934700012 0.0 0.0 1.0 0.45094168186187744 0.5075438022613525 0 1.0 0 0.0 0 0.0 0 0.0 0.26160287857055664 0.0734853744506836 0.21605446934700012 0.0 0.0 1.0 0.3975098729133606 0.5070275068283081 0 1.0 0 0.0 0 0.0 0 0.0 0.3732597827911377 0.07159298658370972 0.21605446934700012 0.0 0.0 1.0 0.45550355315208435 0.5030808448791504 0 1.0 0 0.0 0 0.0 0 0.0 0.3687732219696045 0.07350727915763855 0.21605446934700012 0.0 0.0 0.999969482421875 0.45294809341430664 0.5053983926773071 0 1.0 0 0.0 0 0.0 0 0.0 0.26252222061157227 0.06504258513450623 0.21605446934700012 0.0 0.0 1.0 0.3972393870353699 0.49852627515792847 0 1.0 0 0.0 0 0.0 0 0.0 0.3732597827911377 0.07159298658370972 0.21605446934700012 0.0 0.0 1.0 0.45550355315208435 0.5030808448791504 0 1.0 0 0.0 0 0.0 0 0.0 0.26160287857055664 0.0734853744506836 0.21605446934700012 0.0 0.0 1.0 0.3975098729133606 0.5070275068283081 0 1.0 0 0.0 0 0.0 0 0.0 0.26252222061157227 0.06504258513450623 0.21605446934700012 0.0 0.0 1.0 0.3972393870353699 0.49852627515792847 0 1.0 0 0.0 0 0.0 0 0.0 0.37865352630615234 0.06956681609153748 0.21605446934700012 0.0 0.0 1.0 0.4586215019226074 0.5005841851234436 0 1.0 0 0.0 0 0.0 0 0.0 0.3732597827911377 0.07159298658370972 0.21605446934700012 0.0 0.0 1.0 0.45550355315208435 0.5030808448791504 0 1.0 0 0.0 0 0.0 0 0.0 0.26252222061157227 0.06504258513450623 0.21605446934700012 0.0 0.0 1.0 0.3972393870353699 0.49852627515792847 0 1.0 0 0.0 0 0.0 0 0.0 0.38495469093322754 0.06742876768112183 0.21605446934700012 0.0 0.0 1.0 0.4623163640499115 0.49790239334106445 0 1.0 0 0.0 0 0.0 0 0.0 0.37865352630615234 0.06956681609153748 0.21605446934700012 0.0 0.0 1.0 0.4586215019226074 0.5005841851234436 0 1.0 0 0.0 0 0.0 0 0.0 0.26252222061157227 0.06504258513450623 0.21605446934700012 0.0 0.0 1.0 0.3972393870353699 0.49852627515792847 0 1.0 0 0.0 0 0.0 0 0.0 0.3921630382537842 0.06517881155014038 0.21605446934700012 0.0 0.0 0.999969482421875 0.46660202741622925 0.49503177404403687 0 1.0 0 0.0 0 0.0 0 0.0 0.38495469093322754 0.06742876768112183 0.21605446934700012 0.0 0.0 1.0 0.4623163640499115 0.49790239334106445 0 1.0 0 0.0 0 0.0 0 0.0 0.26252222061157227 0.06504258513450623 0.21605446934700012 0.0 0.0 1.0 0.3972393870353699 0.49852627515792847 0 1.0 0 0.0 0 0.0 0 0.0 0.40027856826782227 0.06281697750091553 0.21605446934700012 0.0 0.0 0.999969482421875 0.4714907705783844 0.49197155237197876 0 1.0 0 0.0 0 0.0 0 0.0 0.3921630382537842 0.06517881155014038 0.21605446934700012 0.0 0.0 0.999969482421875 0.46660202741622925 0.49503177404403687 0 1.0 0 0.0 0 0.0 0 0.0 0.264054536819458 0.05692572891712189 0.21605446934700012 0.0 0.0 1.0 0.39726391434669495 0.49021196365356445 0 1.0 0 0.0 0 0.0 0 0.0 0.40027856826782227 0.06281697750091553 0.21605446934700012 0.0 0.0 0.999969482421875 0.4714907705783844 0.49197155237197876 0 1.0 0 0.0 0 0.0 0 0.0 0.26252222061157227 0.06504258513450623 0.21605446934700012 0.0 0.0 1.0 0.3972393870353699 0.49852627515792847 0 1.0 0 0.0 0 0.0 0 0.0 0.264054536819458 0.05692572891712189 0.21605446934700012 0.0 0.0 1.0 0.39726391434669495 0.49021196365356445 0 1.0 0 0.0 0 0.0 0 0.0 0.4093015193939209 0.06034325063228607 0.21605446934700012 0.0 0.0 1.0 0.47699129581451416 0.48872554302215576 0 1.0 0 0.0 0 0.0 0 0.0 0.40027856826782227 0.06281697750091553 0.21605446934700012 0.0 0.0 0.999969482421875 0.4714907705783844 0.49197155237197876 0 1.0 0 0.0 0 0.0 0 0.0 0.264054536819458 0.05692572891712189 0.21605446934700012 0.0 0.0 1.0 0.39726391434669495 0.49021196365356445 0 1.0 0 0.0 0 0.0 0 0.0 0.419231653213501 0.057757630944252014 0.21605446934700012 0.0 0.0 1.0 0.4831062853336334 0.48530352115631104 0 1.0 0 0.0 0 0.0 0 0.0 0.4093015193939209 0.06034325063228607 0.21605446934700012 0.0 0.0 1.0 0.47699129581451416 0.48872554302215576 0 1.0 0 0.0 0 0.0 0 0.0 0.264054536819458 0.05692572891712189 0.21605446934700012 0.0 0.0 1.0 0.39726391434669495 0.49021196365356445 0 1.0 0 0.0 0 0.0 0 0.0 0.4300692081451416 0.055060118436813354 0.21605446934700012 0.0 0.0 1.0 0.48983034491539 0.48172253370285034 0 1.0 0 0.0 0 0.0 0 0.0 0.419231653213501 0.057757630944252014 0.21605446934700012 0.0 0.0 1.0 0.4831062853336334 0.48530352115631104 0 1.0 0 0.0 0 0.0 0 0.0 0.26619982719421387 0.04913482069969177 0.21605446934700012 0.0 0.0 1.0 0.39759084582328796 0.4820782542228699 0 1.0 0 0.0 0 0.0 0 0.0 0.4300692081451416 0.055060118436813354 0.21605446934700012 0.0 0.0 1.0 0.48983034491539 0.48172253370285034 0 1.0 0 0.0 0 0.0 0 0.0 0.264054536819458 0.05692572891712189 0.21605446934700012 0.0 0.0 1.0 0.39726391434669495 0.49021196365356445 0 1.0 0 0.0 0 0.0 0 0.0 0.26619982719421387 0.04913482069969177 0.21605446934700012 0.0 0.0 1.0 0.39759084582328796 0.4820782542228699 0 1.0 0 0.0 0 0.0 0 0.0 0.44181394577026367 0.05225071310997009 0.21605446934700012 0.0 0.0 1.0 0.4971467852592468 0.4780082106590271 0 1.0 0 0.0 0 0.0 0 0.0 0.4300692081451416 0.055060118436813354 0.21605446934700012 0.0 0.0 1.0 0.48983034491539 0.48172253370285034 0 1.0 0 0.0 0 0.0 0 0.0 0.26619982719421387 0.04913482069969177 0.21605446934700012 0.0 0.0 1.0 0.39759084582328796 0.4820782542228699 0 1.0 0 0.0 0 0.0 0 0.0 0.4544661045074463 0.04932942986488342 0.21605446934700012 0.0 0.0 1.0 0.5050256252288818 0.4741957187652588 0 1.0 0 0.0 0 0.0 0 0.0 0.44181394577026367 0.05225071310997009 0.21605446934700012 0.0 0.0 1.0 0.4971467852592468 0.4780082106590271 0 1.0 0 0.0 0 0.0 0 0.0 0.26619982719421387 0.04913482069969177 0.21605446934700012 0.0 0.0 1.0 0.39759084582328796 0.4820782542228699 0 1.0 0 0.0 0 0.0 0 0.0 0.4672422409057617 0.04629625380039215 0.21605446934700012 0.0 0.0 1.0 0.5129404664039612 0.47033530473709106 0 1.0 0 0.0 0 0.0 0 0.0 0.4544661045074463 0.04932942986488342 0.21605446934700012 0.0 0.0 1.0 0.5050256252288818 0.4741957187652588 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 0.04166984558105469 0.21605446934700012 0.0 0.0 0.999969482421875 0.3982294201850891 0.4741182327270508 0 1.0 0 0.0 0 0.0 0 0.0 0.4672422409057617 0.04629625380039215 0.21605446934700012 0.0 0.0 1.0 0.5129404664039612 0.47033530473709106 0 1.0 0 0.0 0 0.0 0 0.0 0.26619982719421387 0.04913482069969177 0.21605446934700012 0.0 0.0 1.0 0.39759084582328796 0.4820782542228699 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 0.04166984558105469 0.21605446934700012 0.0 0.0 0.999969482421875 0.3982294201850891 0.4741182327270508 0 1.0 0 0.0 0 0.0 0 0.0 0.47935914993286133 0.04315118491649628 0.21605446934700012 0.0 0.0 1.0 0.5203794836997986 0.4664573073387146 0 1.0 0 0.0 0 0.0 0 0.0 0.4672422409057617 0.04629625380039215 0.21605446934700012 0.0 0.0 1.0 0.5129404664039612 0.47033530473709106 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 0.04166984558105469 0.21605446934700012 0.0 0.0 0.999969482421875 0.3982294201850891 0.4741182327270508 0 1.0 0 0.0 0 0.0 0 0.0 0.4908168315887451 0.0398942232131958 0.21605446934700012 0.0 0.0 1.0 0.5273312330245972 0.46256983280181885 0 1.0 0 0.0 0 0.0 0 0.0 0.47935914993286133 0.04315118491649628 0.21605446934700012 0.0 0.0 1.0 0.5203794836997986 0.4664573073387146 0 1.0 0 0.0 0 0.0 0 0.0 0.27232933044433594 0.034530818462371826 0.21605446934700012 0.0 0.0 1.0 0.3991908133029938 0.4663246273994446 0 1.0 0 0.0 0 0.0 0 0.0 0.4908168315887451 0.0398942232131958 0.21605446934700012 0.0 0.0 1.0 0.5273312330245972 0.46256983280181885 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 0.04166984558105469 0.21605446934700012 0.0 0.0 0.999969482421875 0.3982294201850891 0.4741182327270508 0 1.0 0 0.0 0 0.0 0 0.0 0.27232933044433594 0.034530818462371826 0.21605446934700012 0.0 0.0 1.0 0.3991908133029938 0.4663246273994446 0 1.0 0 0.0 0 0.0 0 0.0 0.5016152858734131 0.036525383591651917 0.21605446934700012 0.0 0.0 1.0 0.5337937474250793 0.4586760401725769 0 1.0 0 0.0 0 0.0 0 0.0 0.4908168315887451 0.0398942232131958 0.21605446934700012 0.0 0.0 1.0 0.5273312330245972 0.46256983280181885 0 1.0 0 0.0 0 0.0 0 0.0 0.27232933044433594 0.034530818462371826 0.21605446934700012 0.0 0.0 1.0 0.3991908133029938 0.4663246273994446 0 1.0 0 0.0 0 0.0 0 0.0 0.5117547512054443 0.03304465115070343 0.21605446934700012 0.0 0.0 1.0 0.5397725105285645 0.4547746181488037 0 1.0 0 0.0 0 0.0 0 0.0 0.5016152858734131 0.036525383591651917 0.21605446934700012 0.0 0.0 1.0 0.5337937474250793 0.4586760401725769 0 1.0 0 0.0 0 0.0 0 0.0 0.27631354331970215 0.027717724442481995 0.21605446934700012 0.0 0.0 1.0 0.40048840641975403 0.45869070291519165 0 1.0 0 0.0 0 0.0 0 0.0 0.5117547512054443 0.03304465115070343 0.21605446934700012 0.0 0.0 1.0 0.5397725105285645 0.4547746181488037 0 1.0 0 0.0 0 0.0 0 0.0 0.27232933044433594 0.034530818462371826 0.21605446934700012 0.0 0.0 1.0 0.3991908133029938 0.4663246273994446 0 1.0 0 0.0 0 0.0 0 0.0 0.27631354331970215 0.027717724442481995 0.21605446934700012 0.0 0.0 1.0 0.40048840641975403 0.45869070291519165 0 1.0 0 0.0 0 0.0 0 0.0 0.5212349891662598 0.029452025890350342 0.21605446934700012 0.0 0.0 1.0 0.5452784299850464 0.450860857963562 0 1.0 0 0.0 0 0.0 0 0.0 0.5117547512054443 0.03304465115070343 0.21605446934700012 0.0 0.0 1.0 0.5397725105285645 0.4547746181488037 0 1.0 0 0.0 0 0.0 0 0.0 0.27631354331970215 0.027717724442481995 0.21605446934700012 0.0 0.0 1.0 0.40048840641975403 0.45869070291519165 0 1.0 0 0.0 0 0.0 0 0.0 0.5300559997558594 0.02574750781059265 0.21605446934700012 0.0 0.0 1.0 0.550326406955719 0.4469273090362549 0 1.0 0 0.0 0 0.0 0 0.0 0.5212349891662598 0.029452025890350342 0.21605446934700012 0.0 0.0 1.0 0.5452784299850464 0.450860857963562 0 1.0 0 0.0 0 0.0 0 0.0 0.2809107303619385 0.021230563521385193 0.21605446934700012 0.0 0.0 1.0 0.4021376669406891 0.451210618019104 0 1.0 0 0.0 0 0.0 0 0.0 0.5300559997558594 0.02574750781059265 0.21605446934700012 0.0 0.0 1.0 0.550326406955719 0.4469273090362549 0 1.0 0 0.0 0 0.0 0 0.0 0.27631354331970215 0.027717724442481995 0.21605446934700012 0.0 0.0 1.0 0.40048840641975403 0.45869070291519165 0 1.0 0 0.0 0 0.0 0 0.0 0.2809107303619385 0.021230563521385193 0.21605446934700012 0.0 0.0 1.0 0.4021376669406891 0.451210618019104 0 1.0 0 0.0 0 0.0 0 0.0 0.5382177829742432 0.02193109691143036 0.21605446934700012 0.0 0.0 1.0 0.5549336075782776 0.4429643750190735 0 1.0 0 0.0 0 0.0 0 0.0 0.5300559997558594 0.02574750781059265 0.21605446934700012 0.0 0.0 1.0 0.550326406955719 0.4469273090362549 0 1.0 0 0.0 0 0.0 0 0.0 0.2809107303619385 0.021230563521385193 0.21605446934700012 0.0 0.0 1.0 0.4021376669406891 0.451210618019104 0 1.0 0 0.0 0 0.0 0 0.0 0.5457203388214111 0.018002808094024658 0.21605446934700012 0.0 0.0 0.999969482421875 0.5591184496879578 0.4389607310295105 0 1.0 0 0.0 0 0.0 0 0.0 0.5382177829742432 0.02193109691143036 0.21605446934700012 0.0 0.0 1.0 0.5549336075782776 0.4429643750190735 0 1.0 0 0.0 0 0.0 0 0.0 0.2861208915710449 0.015069350600242615 0.21605446934700012 0.0 0.0 1.0 0.40415647625923157 0.4438801407814026 0 1.0 0 0.0 0 0.0 0 0.0 0.5457203388214111 0.018002808094024658 0.21605446934700012 0.0 0.0 0.999969482421875 0.5591184496879578 0.4389607310295105 0 1.0 0 0.0 0 0.0 0 0.0 0.2809107303619385 0.021230563521385193 0.21605446934700012 0.0 0.0 1.0 0.4021376669406891 0.451210618019104 0 1.0 0 0.0 0 0.0 0 0.0 0.2861208915710449 0.015069350600242615 0.21605446934700012 0.0 0.0 1.0 0.40415647625923157 0.4438801407814026 0 1.0 0 0.0 0 0.0 0 0.0 0.5525639057159424 0.013962626457214355 0.21605446934700012 0.0 0.0 1.0 0.562899649143219 0.4349040985107422 0 1.0 0 0.0 0 0.0 0 0.0 0.5457203388214111 0.018002808094024658 0.21605446934700012 0.0 0.0 0.999969482421875 0.5591184496879578 0.4389607310295105 0 1.0 0 0.0 0 0.0 0 0.0 0.2919440269470215 0.009234070777893066 0.21605446934700012 0.0 0.0 1.0 0.40656495094299316 0.4366976022720337 0 1.0 0 0.0 0 0.0 0 0.0 0.5525639057159424 0.013962626457214355 0.21605446934700012 0.0 0.0 1.0 0.562899649143219 0.4349040985107422 0 1.0 0 0.0 0 0.0 0 0.0 0.2861208915710449 0.015069350600242615 0.21605446934700012 0.0 0.0 1.0 0.40415647625923157 0.4438801407814026 0 1.0 0 0.0 0 0.0 0 0.0 0.2919440269470215 0.009234070777893066 0.21605446934700012 0.0 0.0 1.0 0.40656495094299316 0.4366976022720337 0 1.0 0 0.0 0 0.0 0 0.0 0.5587482452392578 0.00981055200099945 0.21605446934700012 0.0 0.0 1.0 0.5662951469421387 0.4307813048362732 0 1.0 0 0.0 0 0.0 0 0.0 0.5525639057159424 0.013962626457214355 0.21605446934700012 0.0 0.0 1.0 0.562899649143219 0.4349040985107422 0 1.0 0 0.0 0 0.0 0 0.0 0.2919440269470215 0.009234070777893066 0.21605446934700012 0.0 0.0 1.0 0.40656495094299316 0.4366976022720337 0 1.0 0 0.0 0 0.0 0 0.0 0.5642733573913574 0.005546584725379944 0.21605446934700012 0.0 0.0 1.0 0.5693221092224121 0.4265784025192261 0 1.0 0 0.0 0 0.0 0 0.0 0.5587482452392578 0.00981055200099945 0.21605446934700012 0.0 0.0 1.0 0.5662951469421387 0.4307813048362732 0 1.0 0 0.0 0 0.0 0 0.0 0.29838013648986816 0.0037247389554977417 0.21605446934700012 0.0 0.0 0.999969482421875 0.4093855619430542 0.42966413497924805 0 1.0 0 0.0 0 0.0 0 0.0 0.5642733573913574 0.005546584725379944 0.21605446934700012 0.0 0.0 1.0 0.5693221092224121 0.4265784025192261 0 1.0 0 0.0 0 0.0 0 0.0 0.2919440269470215 0.009234070777893066 0.21605446934700012 0.0 0.0 1.0 0.40656495094299316 0.4366976022720337 0 1.0 0 0.0 0 0.0 0 0.0 0.29838013648986816 0.0037247389554977417 0.21605446934700012 0.0 0.0 0.999969482421875 0.4093855619430542 0.42966413497924805 0 1.0 0 0.0 0 0.0 0 0.0 0.5691964626312256 0.0010247975587844849 0.21605446934700012 0.0 0.0 1.0 0.5720335245132446 0.4221276044845581 0 1.0 0 0.0 0 0.0 0 0.0 0.5642733573913574 0.005546584725379944 0.21605446934700012 0.0 0.0 1.0 0.5693221092224121 0.4265784025192261 0 1.0 0 0.0 0 0.0 0 0.0 0.30542922019958496 -0.0014586597681045532 0.21605446934700012 0.0 0.0 1.0 0.4126429259777069 0.42278528213500977 0 1.0 0 0.0 0 0.0 0 0.0 0.5691964626312256 0.0010247975587844849 0.21605446934700012 0.0 0.0 1.0 0.5720335245132446 0.4221276044845581 0 1.0 0 0.0 0 0.0 0 0.0 0.29838013648986816 0.0037247389554977417 0.21605446934700012 0.0 0.0 0.999969482421875 0.4093855619430542 0.42966413497924805 0 1.0 0 0.0 0 0.0 0 0.0 0.30542922019958496 -0.0014586597681045532 0.21605446934700012 0.0 0.0 1.0 0.4126429259777069 0.42278528213500977 0 1.0 0 0.0 0 0.0 0 0.0 0.5736916065216064 -0.0037840157747268677 0.21605446934700012 0.0 0.0 1.0 0.5745289325714111 0.41740989685058594 0 1.0 0 0.0 0 0.0 0 0.0 0.5691964626312256 0.0010247975587844849 0.21605446934700012 0.0 0.0 1.0 0.5720335245132446 0.4221276044845581 0 1.0 0 0.0 0 0.0 0 0.0 0.31134724617004395 -0.005109667778015137 0.21605446934700012 0.0 0.0 1.0 0.4155136048793793 0.41772472858428955 0 1.0 0 0.0 0 0.0 0 0.0 0.5736916065216064 -0.0037840157747268677 0.21605446934700012 0.0 0.0 1.0 0.5745289325714111 0.41740989685058594 0 1.0 0 0.0 0 0.0 0 0.0 0.30542922019958496 -0.0014586597681045532 0.21605446934700012 0.0 0.0 1.0 0.4126429259777069 0.42278528213500977 0 1.0 0 0.0 0 0.0 0 0.0 0.31134724617004395 -0.005109667778015137 0.21605446934700012 0.0 0.0 1.0 0.4155136048793793 0.41772472858428955 0 1.0 0 0.0 0 0.0 0 0.0 0.5777585506439209 -0.008879855275154114 0.21605446934700012 0.0 0.0 1.0 0.5768174529075623 0.4124223589897156 0 1.0 0 0.0 0 0.0 0 0.0 0.5736916065216064 -0.0037840157747268677 0.21605446934700012 0.0 0.0 1.0 0.5745289325714111 0.41740989685058594 0 1.0 0 0.0 0 0.0 0 0.0 0.31847643852233887 -0.00882391631603241 0.21605446934700012 0.0 0.0 1.0 0.4191216230392456 0.4123419523239136 0 1.0 0 0.0 0 0.0 0 0.0 0.5777585506439209 -0.008879855275154114 0.21605446934700012 0.0 0.0 1.0 0.5768174529075623 0.4124223589897156 0 1.0 0 0.0 0 0.0 0 0.0 0.31134724617004395 -0.005109667778015137 0.21605446934700012 0.0 0.0 1.0 0.4155136048793793 0.41772472858428955 0 1.0 0 0.0 0 0.0 0 0.0 0.32681703567504883 -0.012601405382156372 0.21605446934700012 0.0 0.0 1.0 0.4235183298587799 0.40663421154022217 0 1.0 0 0.0 0 0.0 0 0.0 0.5777585506439209 -0.008879855275154114 0.21605446934700012 0.0 0.0 1.0 0.5768174529075623 0.4124223589897156 0 1.0 0 0.0 0 0.0 0 0.0 0.31847643852233887 -0.00882391631603241 0.21605446934700012 0.0 0.0 1.0 0.4191216230392456 0.4123419523239136 0 1.0 0 0.0 0 0.0 0 0.0 0.32681703567504883 -0.012601405382156372 0.21605446934700012 0.0 0.0 1.0 0.4235183298587799 0.40663421154022217 0 1.0 0 0.0 0 0.0 0 0.0 0.581397294998169 -0.01426270604133606 0.21605446934700012 0.0 0.0 1.0 0.5789073705673218 0.4071616530418396 0 1.0 0 0.0 0 0.0 0 0.0 0.5777585506439209 -0.008879855275154114 0.21605446934700012 0.0 0.0 1.0 0.5768174529075623 0.4124223589897156 0 1.0 0 0.0 0 0.0 0 0.0 0.33636903762817383 -0.016442134976387024 0.21605446934700012 0.0 0.0 1.0 0.4287617802619934 0.4006116986274719 0 1.0 0 0.0 0 0.0 0 0.0 0.581397294998169 -0.01426270604133606 0.21605446934700012 0.0 0.0 1.0 0.5789073705673218 0.4071616530418396 0 1.0 0 0.0 0 0.0 0 0.0 0.32681703567504883 -0.012601405382156372 0.21605446934700012 0.0 0.0 1.0 0.4235183298587799 0.40663421154022217 0 1.0 0 0.0 0 0.0 0 0.0 0.33636903762817383 -0.016442134976387024 0.21605446934700012 0.0 0.0 1.0 0.4287617802619934 0.4006116986274719 0 1.0 0 0.0 0 0.0 0 0.0 0.5846080780029297 -0.0199325829744339 0.21605446934700012 0.0 0.0 0.999969482421875 0.5808061361312866 0.40162408351898193 0 1.0 0 0.0 0 0.0 0 0.0 0.581397294998169 -0.01426270604133606 0.21605446934700012 0.0 0.0 1.0 0.5789073705673218 0.4071616530418396 0 1.0 0 0.0 0 0.0 0 0.0 0.34713220596313477 -0.020346105098724365 0.21605446934700012 0.0 0.0 1.0 0.4349146783351898 0.3943026661872864 0 1.0 0 0.0 0 0.0 0 0.0 0.5846080780029297 -0.0199325829744339 0.21605446934700012 0.0 0.0 0.999969482421875 0.5808061361312866 0.40162408351898193 0 1.0 0 0.0 0 0.0 0 0.0 0.33636903762817383 -0.016442134976387024 0.21605446934700012 0.0 0.0 1.0 0.4287617802619934 0.4006116986274719 0 1.0 0 0.0 0 0.0 0 0.0 0.34713220596313477 -0.020346105098724365 0.21605446934700012 0.0 0.0 1.0 0.4349146783351898 0.3943026661872864 0 1.0 0 0.0 0 0.0 0 0.0 0.587390661239624 -0.025889486074447632 0.21605446934700012 0.0 0.0 1.0 0.5825201869010925 0.39580583572387695 0 1.0 0 0.0 0 0.0 0 0.0 0.5846080780029297 -0.0199325829744339 0.21605446934700012 0.0 0.0 0.999969482421875 0.5808061361312866 0.40162408351898193 0 1.0 0 0.0 0 0.0 0 0.0 0.35910677909851074 -0.024313315749168396 0.21605446934700012 0.0 0.0 1.0 0.44204097986221313 0.387759804725647 0 1.0 0 0.0 0 0.0 0 0.0 0.587390661239624 -0.025889486074447632 0.21605446934700012 0.0 0.0 1.0 0.5825201869010925 0.39580583572387695 0 1.0 0 0.0 0 0.0 0 0.0 0.34713220596313477 -0.020346105098724365 0.21605446934700012 0.0 0.0 1.0 0.4349146783351898 0.3943026661872864 0 1.0 0 0.0 0 0.0 0 0.0 0.37229275703430176 -0.028343766927719116 0.21605446934700012 0.0 0.0 1.0 0.450199693441391 0.381067156791687 0 1.0 0 0.0 0 0.0 0 0.0 0.587390661239624 -0.025889486074447632 0.21605446934700012 0.0 0.0 1.0 0.5825201869010925 0.39580583572387695 0 1.0 0 0.0 0 0.0 0 0.0 0.35910677909851074 -0.024313315749168396 0.21605446934700012 0.0 0.0 1.0 0.44204097986221313 0.387759804725647 0 1.0 0 0.0 0 0.0 0 0.0 0.37229275703430176 -0.028343766927719116 0.21605446934700012 0.0 0.0 1.0 0.450199693441391 0.381067156791687 0 1.0 0 0.0 0 0.0 0 0.0 0.589745283126831 -0.032133400440216064 0.21605446934700012 0.0 0.0 0.999969482421875 0.5840551853179932 0.38970309495925903 0 1.0 0 0.0 0 0.0 0 0.0 0.587390661239624 -0.025889486074447632 0.21605446934700012 0.0 0.0 1.0 0.5825201869010925 0.39580583572387695 0 1.0 0 0.0 0 0.0 0 0.0 0.3866901397705078 -0.032437458634376526 0.21605446934700012 0.0 0.0 1.0 0.459436297416687 0.37434637546539307 0 1.0 0 0.0 0 0.0 0 0.0 0.589745283126831 -0.032133400440216064 0.21605446934700012 0.0 0.0 0.999969482421875 0.5840551853179932 0.38970309495925903 0 1.0 0 0.0 0 0.0 0 0.0 0.37229275703430176 -0.028343766927719116 0.21605446934700012 0.0 0.0 1.0 0.450199693441391 0.381067156791687 0 1.0 0 0.0 0 0.0 0 0.0 0.3866901397705078 -0.032437458634376526 0.21605446934700012 0.0 0.0 1.0 0.459436297416687 0.37434637546539307 0 1.0 0 0.0 0 0.0 0 0.0 0.5916717052459717 -0.03866434097290039 0.21605446934700012 0.0 0.0 1.0 0.5854156017303467 0.38331204652786255 0 1.0 0 0.0 0 0.0 0 0.0 0.589745283126831 -0.032133400440216064 0.21605446934700012 0.0 0.0 0.999969482421875 0.5840551853179932 0.38970309495925903 0 1.0 0 0.0 0 0.0 0 0.0 0.4022986888885498 -0.036594390869140625 0.21605446934700012 0.0 0.0 1.0 0.4697710871696472 0.36776047945022583 0 1.0 0 0.0 0 0.0 0 0.0 0.5916717052459717 -0.03866434097290039 0.21605446934700012 0.0 0.0 1.0 0.5854156017303467 0.38331204652786255 0 1.0 0 0.0 0 0.0 0 0.0 0.3866901397705078 -0.032437458634376526 0.21605446934700012 0.0 0.0 1.0 0.459436297416687 0.37434637546539307 0 1.0 0 0.0 0 0.0 0 0.0 0.41911864280700684 -0.040814563632011414 0.21605446934700012 0.0 0.0 1.0 0.4811856746673584 0.36151188611984253 0 1.0 0 0.0 0 0.0 0 0.0 0.5916717052459717 -0.03866434097290039 0.21605446934700012 0.0 0.0 1.0 0.5854156017303467 0.38331204652786255 0 1.0 0 0.0 0 0.0 0 0.0 0.4022986888885498 -0.036594390869140625 0.21605446934700012 0.0 0.0 1.0 0.4697710871696472 0.36776047945022583 0 1.0 0 0.0 0 0.0 0 0.0 0.41911864280700684 -0.040814563632011414 0.21605446934700012 0.0 0.0 1.0 0.4811856746673584 0.36151188611984253 0 1.0 0 0.0 0 0.0 0 0.0 0.593170166015625 -0.04548230767250061 0.21605446934700012 0.0 0.0 1.0 0.5866051912307739 0.376629114151001 0 1.0 0 0.0 0 0.0 0 0.0 0.5916717052459717 -0.03866434097290039 0.21605446934700012 0.0 0.0 1.0 0.5854156017303467 0.38331204652786255 0 1.0 0 0.0 0 0.0 0 0.0 0.4371500015258789 -0.045097991824150085 0.21605446934700012 0.0 0.0 1.0 0.4936082363128662 0.35583263635635376 0 1.0 0 0.0 0 0.0 0 0.0 0.593170166015625 -0.04548230767250061 0.21605446934700012 0.0 0.0 1.0 0.5866051912307739 0.376629114151001 0 1.0 0 0.0 0 0.0 0 0.0 0.41911864280700684 -0.040814563632011414 0.21605446934700012 0.0 0.0 1.0 0.4811856746673584 0.36151188611984253 0 1.0 0 0.0 0 0.0 0 0.0 0.4563925266265869 -0.04944466054439545 0.21605446934700012 0.0 0.0 0.999969482421875 0.506902277469635 0.3509640097618103 0 1.0 0 0.0 0 0.0 0 0.0 0.593170166015625 -0.04548230767250061 0.21605446934700012 0.0 0.0 1.0 0.5866051912307739 0.376629114151001 0 1.0 0 0.0 0 0.0 0 0.0 0.4371500015258789 -0.045097991824150085 0.21605446934700012 0.0 0.0 1.0 0.4936082363128662 0.35583263635635376 0 1.0 0 0.0 0 0.0 0 0.0 0.4563925266265869 -0.04944466054439545 0.21605446934700012 0.0 0.0 0.999969482421875 0.506902277469635 0.3509640097618103 0 1.0 0 0.0 0 0.0 0 0.0 0.5942404270172119 -0.05258728563785553 0.21605446934700012 0.0 0.0 1.0 0.587626576423645 0.3696514964103699 0 1.0 0 0.0 0 0.0 0 0.0 0.593170166015625 -0.04548230767250061 0.21605446934700012 0.0 0.0 1.0 0.5866051912307739 0.376629114151001 0 1.0 0 0.0 0 0.0 0 0.0 0.4605276584625244 -0.05044436454772949 0.21605446934700012 0.0 0.0 1.0 0.5097468495368958 0.34996771812438965 0 1.0 0 0.0 0 0.0 0 0.0 0.5942404270172119 -0.05258728563785553 0.21605446934700012 0.0 0.0 1.0 0.587626576423645 0.3696514964103699 0 1.0 0 0.0 0 0.0 0 0.0 0.4563925266265869 -0.04944466054439545 0.21605446934700012 0.0 0.0 0.999969482421875 0.506902277469635 0.3509640097618103 0 1.0 0 0.0 0 0.0 0 0.0 0.46440958976745605 -0.05145867168903351 0.21605446934700012 0.0 0.0 0.999969482421875 0.5124109387397766 0.3489842414855957 0 1.0 0 0.0 0 0.0 0 0.0 0.5942404270172119 -0.05258728563785553 0.21605446934700012 0.0 0.0 1.0 0.587626576423645 0.3696514964103699 0 1.0 0 0.0 0 0.0 0 0.0 0.4605276584625244 -0.05044436454772949 0.21605446934700012 0.0 0.0 1.0 0.5097468495368958 0.34996771812438965 0 1.0 0 0.0 0 0.0 0 0.0 0.46803879737854004 -0.0524875670671463 0.21605446934700012 0.0 0.0 0.999969482421875 0.5148954391479492 0.3480064272880554 0 1.0 0 0.0 0 0.0 0 0.0 0.5942404270172119 -0.05258728563785553 0.21605446934700012 0.0 0.0 1.0 0.587626576423645 0.3696514964103699 0 1.0 0 0.0 0 0.0 0 0.0 0.46440958976745605 -0.05145867168903351 0.21605446934700012 0.0 0.0 0.999969482421875 0.5124109387397766 0.3489842414855957 0 1.0 0 0.0 0 0.0 0 0.0 0.47141480445861816 -0.05353105068206787 0.21605446934700012 0.0 0.0 1.0 0.5172011852264404 0.3470277786254883 0 1.0 0 0.0 0 0.0 0 0.0 0.5942404270172119 -0.05258728563785553 0.21605446934700012 0.0 0.0 1.0 0.587626576423645 0.3696514964103699 0 1.0 0 0.0 0 0.0 0 0.0 0.46803879737854004 -0.0524875670671463 0.21605446934700012 0.0 0.0 0.999969482421875 0.5148954391479492 0.3480064272880554 0 1.0 0 0.0 0 0.0 0 0.0 0.47141480445861816 -0.05353105068206787 0.21605446934700012 0.0 0.0 1.0 0.5172011852264404 0.3470277786254883 0 1.0 0 0.0 0 0.0 0 0.0 0.5948824882507324 -0.05997928977012634 0.21605446934700012 0.0 0.0 1.0 0.5884814262390137 0.36237674951553345 0 1.0 0 0.0 0 0.0 0 0.0 0.5942404270172119 -0.05258728563785553 0.21605446934700012 0.0 0.0 1.0 0.587626576423645 0.3696514964103699 0 1.0 0 0.0 0 0.0 0 0.0 0.47453808784484863 -0.05458913743495941 0.21605446934700012 0.0 0.0 1.0 0.5193297863006592 0.346042275428772 0 1.0 0 0.0 0 0.0 0 0.0 0.5948824882507324 -0.05997928977012634 0.21605446934700012 0.0 0.0 1.0 0.5884814262390137 0.36237674951553345 0 1.0 0 0.0 0 0.0 0 0.0 0.47141480445861816 -0.05353105068206787 0.21605446934700012 0.0 0.0 1.0 0.5172011852264404 0.3470277786254883 0 1.0 0 0.0 0 0.0 0 0.0 0.47740817070007324 -0.05566181242465973 0.21605446934700012 0.0 0.0 1.0 0.5212823152542114 0.3450441360473633 0 1.0 0 0.0 0 0.0 0 0.0 0.5948824882507324 -0.05997928977012634 0.21605446934700012 0.0 0.0 1.0 0.5884814262390137 0.36237674951553345 0 1.0 0 0.0 0 0.0 0 0.0 0.47453808784484863 -0.05458913743495941 0.21605446934700012 0.0 0.0 1.0 0.5193297863006592 0.346042275428772 0 1.0 0 0.0 0 0.0 0 0.0 0.4800255298614502 -0.05674909055233002 0.21605446934700012 0.0 0.0 1.0 0.5230607390403748 0.344028115272522 0 1.0 0 0.0 0 0.0 0 0.0 0.5948824882507324 -0.05997928977012634 0.21605446934700012 0.0 0.0 1.0 0.5884814262390137 0.36237674951553345 0 1.0 0 0.0 0 0.0 0 0.0 0.47740817070007324 -0.05566181242465973 0.21605446934700012 0.0 0.0 1.0 0.5212823152542114 0.3450441360473633 0 1.0 0 0.0 0 0.0 0 0.0 0.4823896884918213 -0.05785095691680908 0.21605446934700012 0.0 0.0 1.0 0.5246662497520447 0.3429895043373108 0 1.0 0 0.0 0 0.0 0 0.0 0.5948824882507324 -0.05997928977012634 0.21605446934700012 0.0 0.0 1.0 0.5884814262390137 0.36237674951553345 0 1.0 0 0.0 0 0.0 0 0.0 0.4800255298614502 -0.05674909055233002 0.21605446934700012 0.0 0.0 1.0 0.5230607390403748 0.344028115272522 0 1.0 0 0.0 0 0.0 0 0.0 0.4845011234283447 -0.05896741896867752 0.21605446934700012 0.0 0.0 1.0 0.526100754737854 0.3419238328933716 0 1.0 0 0.0 0 0.0 0 0.0 0.5948824882507324 -0.05997928977012634 0.21605446934700012 0.0 0.0 1.0 0.5884814262390137 0.36237674951553345 0 1.0 0 0.0 0 0.0 0 0.0 0.4823896884918213 -0.05785095691680908 0.21605446934700012 0.0 0.0 1.0 0.5246662497520447 0.3429895043373108 0 1.0 0 0.0 0 0.0 0 0.0 0.4863593578338623 -0.06009847670793533 0.21605446934700012 0.0 0.0 1.0 0.5273653268814087 0.3408270478248596 0 1.0 0 0.0 0 0.0 0 0.0 0.5948824882507324 -0.05997928977012634 0.21605446934700012 0.0 0.0 1.0 0.5884814262390137 0.36237674951553345 0 1.0 0 0.0 0 0.0 0 0.0 0.4845011234283447 -0.05896741896867752 0.21605446934700012 0.0 0.0 1.0 0.526100754737854 0.3419238328933716 0 1.0 0 0.0 0 0.0 0 0.0 0.4863593578338623 -0.06009847670793533 0.21605446934700012 0.0 0.0 1.0 0.5273653268814087 0.3408270478248596 0 1.0 0 0.0 0 0.0 0 0.0 0.5950965881347656 -0.06765832006931305 0.21605446934700012 0.0 0.0 1.0 0.589170515537262 0.35480374097824097 0 1.0 0 0.0 0 0.0 0 0.0 0.5948824882507324 -0.05997928977012634 0.21605446934700012 0.0 0.0 1.0 0.5884814262390137 0.36237674951553345 0 1.0 0 0.0 0 0.0 0 0.0 0.4879648685455322 -0.06124413013458252 0.21605446934700012 0.0 0.0 0.999969482421875 0.5284615159034729 0.33969563245773315 0 1.0 0 0.0 0 0.0 0 0.0 0.5950965881347656 -0.06765832006931305 0.21605446934700012 0.0 0.0 1.0 0.589170515537262 0.35480374097824097 0 1.0 0 0.0 0 0.0 0 0.0 0.4863593578338623 -0.06009847670793533 0.21605446934700012 0.0 0.0 1.0 0.5273653268814087 0.3408270478248596 0 1.0 0 0.0 0 0.0 0 0.0 0.4893171787261963 -0.06240437924861908 0.21605446934700012 0.0 0.0 1.0 0.5293902158737183 0.3385264277458191 0 1.0 0 0.0 0 0.0 0 0.0 0.5950965881347656 -0.06765832006931305 0.21605446934700012 0.0 0.0 1.0 0.589170515537262 0.35480374097824097 0 1.0 0 0.0 0 0.0 0 0.0 0.4879648685455322 -0.06124413013458252 0.21605446934700012 0.0 0.0 0.999969482421875 0.5284615159034729 0.33969563245773315 0 1.0 0 0.0 0 0.0 0 0.0 0.4904360771179199 -0.06365705281496048 0.21605446934700012 0.0 0.0 1.0 0.5301678776741028 0.33722954988479614 0 1.0 0 0.0 0 0.0 0 0.0 0.5950965881347656 -0.06765832006931305 0.21605446934700012 0.0 0.0 1.0 0.589170515537262 0.35480374097824097 0 1.0 0 0.0 0 0.0 0 0.0 0.4893171787261963 -0.06240437924861908 0.21605446934700012 0.0 0.0 1.0 0.5293902158737183 0.3385264277458191 0 1.0 0 0.0 0 0.0 0 0.0 0.2476358413696289 -0.0778159350156784 0.21605446934700012 0.0 0.0 0.999969482421875 0.37793639302253723 0.3555501699447632 0 1.0 0 0.0 0 0.0 0 0.0 0.3475508689880371 -0.06744548678398132 0.21605446934700012 0.0 0.0 1.0 0.43197548389434814 0.3392900228500366 0 1.0 0 0.0 0 0.0 0 0.0 0.34641003608703613 -0.06275463849306107 0.21605446934700012 0.0 0.0 1.0 0.4315919876098633 0.34482550621032715 0 1.0 0 0.0 0 0.0 0 0.0 0.4914577007293701 -0.06496324390172958 0.21605446934700012 0.0 0.0 1.0 0.5308834910392761 0.33586686849594116 0 1.0 0 0.0 0 0.0 0 0.0 0.5950965881347656 -0.06765832006931305 0.21605446934700012 0.0 0.0 1.0 0.589170515537262 0.35480374097824097 0 1.0 0 0.0 0 0.0 0 0.0 0.4904360771179199 -0.06365705281496048 0.21605446934700012 0.0 0.0 1.0 0.5301678776741028 0.33722954988479614 0 1.0 0 0.0 0 0.0 0 0.0 0.4923820495605469 -0.0663229450583458 0.21605446934700012 0.0 0.0 1.0 0.5315372943878174 0.3344380855560303 0 1.0 0 0.0 0 0.0 0 0.0 0.5950965881347656 -0.06765832006931305 0.21605446934700012 0.0 0.0 1.0 0.589170515537262 0.35480374097824097 0 1.0 0 0.0 0 0.0 0 0.0 0.4914577007293701 -0.06496324390172958 0.21605446934700012 0.0 0.0 1.0 0.5308834910392761 0.33586686849594116 0 1.0 0 0.0 0 0.0 0 0.0 0.4932091236114502 -0.06773615628480911 0.21605446934700012 0.0 0.0 1.0 0.5321296453475952 0.33294302225112915 0 1.0 0 0.0 0 0.0 0 0.0 0.5950965881347656 -0.06765832006931305 0.21605446934700012 0.0 0.0 1.0 0.589170515537262 0.35480374097824097 0 1.0 0 0.0 0 0.0 0 0.0 0.4923820495605469 -0.0663229450583458 0.21605446934700012 0.0 0.0 1.0 0.5315372943878174 0.3344380855560303 0 1.0 0 0.0 0 0.0 0 0.0 0.2476358413696289 -0.0778159350156784 0.21605446934700012 0.0 0.0 0.999969482421875 0.37793639302253723 0.3555501699447632 0 1.0 0 0.0 0 0.0 0 0.0 0.34887170791625977 -0.07194417715072632 0.21605446934700012 0.0 0.0 1.0 0.432491660118103 0.33396750688552856 0 1.0 0 0.0 0 0.0 0 0.0 0.3475508689880371 -0.06744548678398132 0.21605446934700012 0.0 0.0 1.0 0.43197548389434814 0.3392900228500366 0 1.0 0 0.0 0 0.0 0 0.0 0.4932091236114502 -0.06773615628480911 0.21605446934700012 0.0 0.0 1.0 0.5321296453475952 0.33294302225112915 0 1.0 0 0.0 0 0.0 0 0.0 0.5947997570037842 -0.07608164846897125 0.21605446934700012 0.0 0.0 0.999969482421875 0.589691162109375 0.3464645743370056 0 1.0 0 0.0 0 0.0 0 0.0 0.5950965881347656 -0.06765832006931305 0.21605446934700012 0.0 0.0 1.0 0.589170515537262 0.35480374097824097 0 1.0 0 0.0 0 0.0 0 0.0 0.4939389228820801 -0.06920288503170013 0.21605446934700012 0.0 0.0 1.0 0.5326606631278992 0.33138126134872437 0 1.0 0 0.0 0 0.0 0 0.0 0.5947997570037842 -0.07608164846897125 0.21605446934700012 0.0 0.0 0.999969482421875 0.589691162109375 0.3464645743370056 0 1.0 0 0.0 0 0.0 0 0.0 0.4932091236114502 -0.06773615628480911 0.21605446934700012 0.0 0.0 1.0 0.5321296453475952 0.33294302225112915 0 1.0 0 0.0 0 0.0 0 0.0 0.4945714473724365 -0.07072312384843826 0.21605446934700012 0.0 0.0 1.0 0.5331304669380188 0.3297528028488159 0 1.0 0 0.0 0 0.0 0 0.0 0.5947997570037842 -0.07608164846897125 0.21605446934700012 0.0 0.0 0.999969482421875 0.589691162109375 0.3464645743370056 0 1.0 0 0.0 0 0.0 0 0.0 0.4939389228820801 -0.06920288503170013 0.21605446934700012 0.0 0.0 1.0 0.5326606631278992 0.33138126134872437 0 1.0 0 0.0 0 0.0 0 0.0 0.49510645866394043 -0.0722968727350235 0.21605446934700012 0.0 0.0 1.0 0.5335390567779541 0.3280574083328247 0 1.0 0 0.0 0 0.0 0 0.0 0.5947997570037842 -0.07608164846897125 0.21605446934700012 0.0 0.0 0.999969482421875 0.589691162109375 0.3464645743370056 0 1.0 0 0.0 0 0.0 0 0.0 0.4945714473724365 -0.07072312384843826 0.21605446934700012 0.0 0.0 1.0 0.5331304669380188 0.3297528028488159 0 1.0 0 0.0 0 0.0 0 0.0 0.2476358413696289 -0.0778159350156784 0.21605446934700012 0.0 0.0 0.999969482421875 0.37793639302253723 0.3555501699447632 0 1.0 0 0.0 0 0.0 0 0.0 0.3503725528717041 -0.07625070214271545 0.21605446934700012 0.0 0.0 1.0 0.43314307928085327 0.3288540244102478 0 1.0 0 0.0 0 0.0 0 0.0 0.34887170791625977 -0.07194417715072632 0.21605446934700012 0.0 0.0 1.0 0.432491660118103 0.33396750688552856 0 1.0 0 0.0 0 0.0 0 0.0 0.4955441951751709 -0.07392413169145584 0.21605446934700012 0.0 0.0 0.999969482421875 0.5338865518569946 0.3262951970100403 0 1.0 0 0.0 0 0.0 0 0.0 0.5947997570037842 -0.07608164846897125 0.21605446934700012 0.0 0.0 0.999969482421875 0.589691162109375 0.3464645743370056 0 1.0 0 0.0 0 0.0 0 0.0 0.49510645866394043 -0.0722968727350235 0.21605446934700012 0.0 0.0 1.0 0.5335390567779541 0.3280574083328247 0 1.0 0 0.0 0 0.0 0 0.0 0.49588465690612793 -0.07560490816831589 0.21605446934700012 0.0 0.0 1.0 0.5341729521751404 0.32446593046188354 0 1.0 0 0.0 0 0.0 0 0.0 0.5947997570037842 -0.07608164846897125 0.21605446934700012 0.0 0.0 0.999969482421875 0.589691162109375 0.3464645743370056 0 1.0 0 0.0 0 0.0 0 0.0 0.4955441951751709 -0.07392413169145584 0.21605446934700012 0.0 0.0 0.999969482421875 0.5338865518569946 0.3262951970100403 0 1.0 0 0.0 0 0.0 0 0.0 0.4961278438568115 -0.07733919471502304 0.21605446934700012 0.0 0.0 0.999969482421875 0.534398078918457 0.32256996631622314 0 1.0 0 0.0 0 0.0 0 0.0 0.5947997570037842 -0.07608164846897125 0.21605446934700012 0.0 0.0 0.999969482421875 0.589691162109375 0.3464645743370056 0 1.0 0 0.0 0 0.0 0 0.0 0.49588465690612793 -0.07560490816831589 0.21605446934700012 0.0 0.0 1.0 0.5341729521751404 0.32446593046188354 0 1.0 0 0.0 0 0.0 0 0.0 0.4961278438568115 -0.07733919471502304 0.21605446934700012 0.0 0.0 0.999969482421875 0.534398078918457 0.32256996631622314 0 1.0 0 0.0 0 0.0 0 0.0 0.593909502029419 -0.0843055248260498 0.21605446934700012 0.0 0.0 1.0 0.5899292230606079 0.3382599353790283 0 1.0 0 0.0 0 0.0 0 0.0 0.5947997570037842 -0.07608164846897125 0.21605446934700012 0.0 0.0 0.999969482421875 0.589691162109375 0.3464645743370056 0 1.0 0 0.0 0 0.0 0 0.0 0.2476358413696289 -0.0778159350156784 0.21605446934700012 0.0 0.0 0.999969482421875 0.37793639302253723 0.3555501699447632 0 1.0 0 0.0 0 0.0 0 0.0 0.3520534038543701 -0.08036507666110992 0.21605446934700012 0.0 0.0 1.0 0.43393248319625854 0.3239459991455078 0 1.0 0 0.0 0 0.0 0 0.0 0.3503725528717041 -0.07625070214271545 0.21605446934700012 0.0 0.0 1.0 0.43314307928085327 0.3288540244102478 0 1.0 0 0.0 0 0.0 0 0.0 0.4962737560272217 -0.0791269913315773 0.21605446934700012 0.0 0.0 1.0 0.5345618724822998 0.3206072449684143 0 1.0 0 0.0 0 0.0 0 0.0 0.593909502029419 -0.0843055248260498 0.21605446934700012 0.0 0.0 1.0 0.5899292230606079 0.3382599353790283 0 1.0 0 0.0 0 0.0 0 0.0 0.4961278438568115 -0.07733919471502304 0.21605446934700012 0.0 0.0 0.999969482421875 0.534398078918457 0.32256996631622314 0 1.0 0 0.0 0 0.0 0 0.0 0.2501254081726074 -0.08647764474153519 0.21605446934700012 0.0 0.0 1.0 0.3781566917896271 0.346591055393219 0 1.0 0 0.0 0 0.0 0 0.0 0.3520534038543701 -0.08036507666110992 0.21605446934700012 0.0 0.0 1.0 0.43393248319625854 0.3239459991455078 0 1.0 0 0.0 0 0.0 0 0.0 0.2476358413696289 -0.0778159350156784 0.21605446934700012 0.0 0.0 0.999969482421875 0.37793639302253723 0.3555501699447632 0 1.0 0 0.0 0 0.0 0 0.0 0.4963223934173584 -0.08096829801797867 0.21605446934700012 0.0 0.0 1.0 0.5346640348434448 0.31857800483703613 0 1.0 0 0.0 0 0.0 0 0.0 0.593909502029419 -0.0843055248260498 0.21605446934700012 0.0 0.0 1.0 0.5899292230606079 0.3382599353790283 0 1.0 0 0.0 0 0.0 0 0.0 0.4962737560272217 -0.0791269913315773 0.21605446934700012 0.0 0.0 1.0 0.5345618724822998 0.3206072449684143 0 1.0 0 0.0 0 0.0 0 0.0 0.2501254081726074 -0.08647764474153519 0.21605446934700012 0.0 0.0 1.0 0.3781566917896271 0.346591055393219 0 1.0 0 0.0 0 0.0 0 0.0 0.3539142608642578 -0.08428728580474854 0.21605446934700012 0.0 0.0 1.0 0.4348626732826233 0.3192404508590698 0 1.0 0 0.0 0 0.0 0 0.0 0.3520534038543701 -0.08036507666110992 0.21605446934700012 0.0 0.0 1.0 0.43393248319625854 0.3239459991455078 0 1.0 0 0.0 0 0.0 0 0.0 0.4962317943572998 -0.08366581052541733 0.21605446934700012 0.0 0.0 1.0 0.534707248210907 0.3155941367149353 0 1.0 0 0.0 0 0.0 0 0.0 0.593909502029419 -0.0843055248260498 0.21605446934700012 0.0 0.0 1.0 0.5899292230606079 0.3382599353790283 0 1.0 0 0.0 0 0.0 0 0.0 0.4963223934173584 -0.08096829801797867 0.21605446934700012 0.0 0.0 1.0 0.5346640348434448 0.31857800483703613 0 1.0 0 0.0 0 0.0 0 0.0 0.49596190452575684 -0.08627089112997055 0.21605446934700012 0.0 0.0 1.0 0.5346280336380005 0.31269896030426025 0 1.0 0 0.0 0 0.0 0 0.0 0.593909502029419 -0.0843055248260498 0.21605446934700012 0.0 0.0 1.0 0.5899292230606079 0.3382599353790283 0 1.0 0 0.0 0 0.0 0 0.0 0.4962317943572998 -0.08366581052541733 0.21605446934700012 0.0 0.0 1.0 0.534707248210907 0.3155941367149353 0 1.0 0 0.0 0 0.0 0 0.0 0.2501254081726074 -0.08647764474153519 0.21605446934700012 0.0 0.0 1.0 0.3781566917896271 0.346591055393219 0 1.0 0 0.0 0 0.0 0 0.0 0.3559551239013672 -0.08801734447479248 0.21605446934700012 0.0 0.0 1.0 0.4359365999698639 0.31473463773727417 0 1.0 0 0.0 0 0.0 0 0.0 0.3539142608642578 -0.08428728580474854 0.21605446934700012 0.0 0.0 1.0 0.4348626732826233 0.3192404508590698 0 1.0 0 0.0 0 0.0 0 0.0 0.49596190452575684 -0.08627089112997055 0.21605446934700012 0.0 0.0 1.0 0.5346280336380005 0.31269896030426025 0 1.0 0 0.0 0 0.0 0 0.0 0.5924258232116699 -0.0923299491405487 0.21605446934700012 0.0 0.0 1.0 0.5898783802986145 0.33016830682754517 0 1.0 0 0.0 0 0.0 0 0.0 0.593909502029419 -0.0843055248260498 0.21605446934700012 0.0 0.0 1.0 0.5899292230606079 0.3382599353790283 0 1.0 0 0.0 0 0.0 0 0.0 0.4955120086669922 -0.08878353983163834 0.21605446934700012 0.0 0.0 1.0 0.5344247221946716 0.30989009141921997 0 1.0 0 0.0 0 0.0 0 0.0 0.5924258232116699 -0.0923299491405487 0.21605446934700012 0.0 0.0 1.0 0.5898783802986145 0.33016830682754517 0 1.0 0 0.0 0 0.0 0 0.0 0.49596190452575684 -0.08627089112997055 0.21605446934700012 0.0 0.0 1.0 0.5346280336380005 0.31269896030426025 0 1.0 0 0.0 0 0.0 0 0.0 0.2530405521392822 -0.09483286738395691 0.21605446934700012 0.0 0.0 1.0 0.3786012530326843 0.3378404974937439 0 1.0 0 0.0 0 0.0 0 0.0 0.3559551239013672 -0.08801734447479248 0.21605446934700012 0.0 0.0 1.0 0.4359365999698639 0.31473463773727417 0 1.0 0 0.0 0 0.0 0 0.0 0.2501254081726074 -0.08647764474153519 0.21605446934700012 0.0 0.0 1.0 0.3781566917896271 0.346591055393219 0 1.0 0 0.0 0 0.0 0 0.0 0.2530405521392822 -0.09483286738395691 0.21605446934700012 0.0 0.0 1.0 0.3786012530326843 0.3378404974937439 0 1.0 0 0.0 0 0.0 0 0.0 0.35817599296569824 -0.09155523777008057 0.21605446934700012 0.0 0.0 1.0 0.43715718388557434 0.3104264736175537 0 1.0 0 0.0 0 0.0 0 0.0 0.3559551239013672 -0.08801734447479248 0.21605446934700012 0.0 0.0 1.0 0.4359365999698639 0.31473463773727417 0 1.0 0 0.0 0 0.0 0 0.0 0.49488210678100586 -0.09120375663042068 0.21605446934700012 0.0 0.0 0.999969482421875 0.5340960025787354 0.307165265083313 0 1.0 0 0.0 0 0.0 0 0.0 0.5924258232116699 -0.0923299491405487 0.21605446934700012 0.0 0.0 1.0 0.5898783802986145 0.33016830682754517 0 1.0 0 0.0 0 0.0 0 0.0 0.4955120086669922 -0.08878353983163834 0.21605446934700012 0.0 0.0 1.0 0.5344247221946716 0.30989009141921997 0 1.0 0 0.0 0 0.0 0 0.0 0.49407219886779785 -0.0935315415263176 0.21605446934700012 0.0 0.0 1.0 0.533640444278717 0.3045228123664856 0 1.0 0 0.0 0 0.0 0 0.0 0.5924258232116699 -0.0923299491405487 0.21605446934700012 0.0 0.0 1.0 0.5898783802986145 0.33016830682754517 0 1.0 0 0.0 0 0.0 0 0.0 0.49488210678100586 -0.09120375663042068 0.21605446934700012 0.0 0.0 0.999969482421875 0.5340960025787354 0.307165265083313 0 1.0 0 0.0 0 0.0 0 0.0 0.2530405521392822 -0.09483286738395691 0.21605446934700012 0.0 0.0 1.0 0.3786012530326843 0.3378404974937439 0 1.0 0 0.0 0 0.0 0 0.0 0.360576868057251 -0.09490098059177399 0.21605446934700012 0.0 0.0 1.0 0.4385274052619934 0.30631446838378906 0 1.0 0 0.0 0 0.0 0 0.0 0.35817599296569824 -0.09155523777008057 0.21605446934700012 0.0 0.0 1.0 0.43715718388557434 0.3104264736175537 0 1.0 0 0.0 0 0.0 0 0.0 0.49407219886779785 -0.0935315415263176 0.21605446934700012 0.0 0.0 1.0 0.533640444278717 0.3045228123664856 0 1.0 0 0.0 0 0.0 0 0.0 0.590348482131958 -0.10015491396188736 0.21605446934700012 0.0 0.0 1.0 0.5895298719406128 0.32216984033584595 0 1.0 0 0.0 0 0.0 0 0.0 0.5924258232116699 -0.0923299491405487 0.21605446934700012 0.0 0.0 1.0 0.5898783802986145 0.33016830682754517 0 1.0 0 0.0 0 0.0 0 0.0 0.49308228492736816 -0.09576690196990967 0.21605446934700012 0.0 0.0 1.0 0.5330564379692078 0.30196136236190796 0 1.0 0 0.0 0 0.0 0 0.0 0.590348482131958 -0.10015491396188736 0.21605446934700012 0.0 0.0 1.0 0.5895298719406128 0.32216984033584595 0 1.0 0 0.0 0 0.0 0 0.0 0.49407219886779785 -0.0935315415263176 0.21605446934700012 0.0 0.0 1.0 0.533640444278717 0.3045228123664856 0 1.0 0 0.0 0 0.0 0 0.0 0.2563815116882324 -0.10288161039352417 0.21605446934700012 0.0 0.0 1.0 0.3792794346809387 0.3292851448059082 0 1.0 0 0.0 0 0.0 0 0.0 0.360576868057251 -0.09490098059177399 0.21605446934700012 0.0 0.0 1.0 0.4385274052619934 0.30631446838378906 0 1.0 0 0.0 0 0.0 0 0.0 0.2530405521392822 -0.09483286738395691 0.21605446934700012 0.0 0.0 1.0 0.3786012530326843 0.3378404974937439 0 1.0 0 0.0 0 0.0 0 0.0 0.2563815116882324 -0.10288161039352417 0.21605446934700012 0.0 0.0 1.0 0.3792794346809387 0.3292851448059082 0 1.0 0 0.0 0 0.0 0 0.0 0.3631577491760254 -0.09805455803871155 0.21605446934700012 0.0 0.0 1.0 0.44005027413368225 0.30239778757095337 0 1.0 0 0.0 0 0.0 0 0.0 0.360576868057251 -0.09490098059177399 0.21605446934700012 0.0 0.0 1.0 0.4385274052619934 0.30631446838378906 0 1.0 0 0.0 0 0.0 0 0.0 0.4919123649597168 -0.0979098305106163 0.21605446934700012 0.0 0.0 0.999969482421875 0.5323424339294434 0.2994800806045532 0 1.0 0 0.0 0 0.0 0 0.0 0.590348482131958 -0.10015491396188736 0.21605446934700012 0.0 0.0 1.0 0.5895298719406128 0.32216984033584595 0 1.0 0 0.0 0 0.0 0 0.0 0.49308228492736816 -0.09576690196990967 0.21605446934700012 0.0 0.0 1.0 0.5330564379692078 0.30196136236190796 0 1.0 0 0.0 0 0.0 0 0.0 0.49056243896484375 -0.0999603271484375 0.21605446934700012 0.0 0.0 1.0 0.5314965844154358 0.2970784902572632 0 1.0 0 0.0 0 0.0 0 0.0 0.590348482131958 -0.10015491396188736 0.21605446934700012 0.0 0.0 1.0 0.5895298719406128 0.32216984033584595 0 1.0 0 0.0 0 0.0 0 0.0 0.4919123649597168 -0.0979098305106163 0.21605446934700012 0.0 0.0 0.999969482421875 0.5323424339294434 0.2994800806045532 0 1.0 0 0.0 0 0.0 0 0.0 0.2563815116882324 -0.10288161039352417 0.21605446934700012 0.0 0.0 1.0 0.3792794346809387 0.3292851448059082 0 1.0 0 0.0 0 0.0 0 0.0 0.3659186363220215 -0.10101598501205444 0.21605446934700012 0.0 0.0 1.0 0.44172874093055725 0.29867643117904663 0 1.0 0 0.0 0 0.0 0 0.0 0.3631577491760254 -0.09805455803871155 0.21605446934700012 0.0 0.0 1.0 0.44005027413368225 0.30239778757095337 0 1.0 0 0.0 0 0.0 0 0.0 0.489032506942749 -0.10191839188337326 0.21605446934700012 0.0 0.0 1.0 0.5305171012878418 0.29475659132003784 0 1.0 0 0.0 0 0.0 0 0.0 0.590348482131958 -0.10015491396188736 0.21605446934700012 0.0 0.0 1.0 0.5895298719406128 0.32216984033584595 0 1.0 0 0.0 0 0.0 0 0.0 0.49056243896484375 -0.0999603271484375 0.21605446934700012 0.0 0.0 1.0 0.5314965844154358 0.2970784902572632 0 1.0 0 0.0 0 0.0 0 0.0 0.489032506942749 -0.10191839188337326 0.21605446934700012 0.0 0.0 1.0 0.5305171012878418 0.29475659132003784 0 1.0 0 0.0 0 0.0 0 0.0 0.5876777172088623 -0.10778042674064636 0.21605446934700012 0.0 0.0 1.0 0.5888727307319641 0.314247190952301 0 1.0 0 0.0 0 0.0 0 0.0 0.590348482131958 -0.10015491396188736 0.21605446934700012 0.0 0.0 1.0 0.5895298719406128 0.32216984033584595 0 1.0 0 0.0 0 0.0 0 0.0 0.2563815116882324 -0.10288161039352417 0.21605446934700012 0.0 0.0 1.0 0.3792794346809387 0.3292851448059082 0 1.0 0 0.0 0 0.0 0 0.0 0.36885952949523926 -0.10378524661064148 0.21605446934700012 0.0 0.0 1.0 0.4435656666755676 0.2951509952545166 0 1.0 0 0.0 0 0.0 0 0.0 0.3659186363220215 -0.10101598501205444 0.21605446934700012 0.0 0.0 1.0 0.44172874093055725 0.29867643117904663 0 1.0 0 0.0 0 0.0 0 0.0 0.4873225688934326 -0.10378402471542358 0.21605446934700012 0.0 0.0 0.999969482421875 0.5294021368026733 0.29251474142074585 0 1.0 0 0.0 0 0.0 0 0.0 0.5876777172088623 -0.10778042674064636 0.21605446934700012 0.0 0.0 1.0 0.5888727307319641 0.314247190952301 0 1.0 0 0.0 0 0.0 0 0.0 0.489032506942749 -0.10191839188337326 0.21605446934700012 0.0 0.0 1.0 0.5305171012878418 0.29475659132003784 0 1.0 0 0.0 0 0.0 0 0.0 0.2601480484008789 -0.11062387377023697 0.21605446934700012 0.0 0.0 0.999969482421875 0.3802019953727722 0.3209127187728882 0 1.0 0 0.0 0 0.0 0 0.0 0.36885952949523926 -0.10378524661064148 0.21605446934700012 0.0 0.0 1.0 0.4435656666755676 0.2951509952545166 0 1.0 0 0.0 0 0.0 0 0.0 0.2563815116882324 -0.10288161039352417 0.21605446934700012 0.0 0.0 1.0 0.3792794346809387 0.3292851448059082 0 1.0 0 0.0 0 0.0 0 0.0 0.48543262481689453 -0.10555722564458847 0.21605446934700012 0.0 0.0 0.999969482421875 0.5281496644020081 0.2903541922569275 0 1.0 0 0.0 0 0.0 0 0.0 0.5876777172088623 -0.10778042674064636 0.21605446934700012 0.0 0.0 1.0 0.5888727307319641 0.314247190952301 0 1.0 0 0.0 0 0.0 0 0.0 0.4873225688934326 -0.10378402471542358 0.21605446934700012 0.0 0.0 0.999969482421875 0.5294021368026733 0.29251474142074585 0 1.0 0 0.0 0 0.0 0 0.0 0.2601480484008789 -0.11062387377023697 0.21605446934700012 0.0 0.0 0.999969482421875 0.3802019953727722 0.3209127187728882 0 1.0 0 0.0 0 0.0 0 0.0 0.3719792366027832 -0.10636235028505325 0.21605446934700012 0.0 0.0 1.0 0.44556304812431335 0.291823148727417 0 1.0 0 0.0 0 0.0 0 0.0 0.36885952949523926 -0.10378524661064148 0.21605446934700012 0.0 0.0 1.0 0.4435656666755676 0.2951509952545166 0 1.0 0 0.0 0 0.0 0 0.0 0.48336267471313477 -0.10723800212144852 0.21605446934700012 0.0 0.0 1.0 0.5267577171325684 0.28827619552612305 0 1.0 0 0.0 0 0.0 0 0.0 0.5876777172088623 -0.10778042674064636 0.21605446934700012 0.0 0.0 1.0 0.5888727307319641 0.314247190952301 0 1.0 0 0.0 0 0.0 0 0.0 0.48543262481689453 -0.10555722564458847 0.21605446934700012 0.0 0.0 0.999969482421875 0.5281496644020081 0.2903541922569275 0 1.0 0 0.0 0 0.0 0 0.0 0.2601480484008789 -0.11062387377023697 0.21605446934700012 0.0 0.0 0.999969482421875 0.3802019953727722 0.3209127187728882 0 1.0 0 0.0 0 0.0 0 0.0 0.37529706954956055 -0.10874000191688538 0.21605446934700012 0.0 0.0 1.0 0.44773736596107483 0.288699209690094 0 1.0 0 0.0 0 0.0 0 0.0 0.3719792366027832 -0.10636235028505325 0.21605446934700012 0.0 0.0 1.0 0.44556304812431335 0.291823148727417 0 1.0 0 0.0 0 0.0 0 0.0 0.48002052307128906 -0.10947578400373459 0.21605446934700012 0.0 0.0 1.0 0.5244717597961426 0.2854476571083069 0 1.0 0 0.0 0 0.0 0 0.0 0.5876777172088623 -0.10778042674064636 0.21605446934700012 0.0 0.0 1.0 0.5888727307319641 0.314247190952301 0 1.0 0 0.0 0 0.0 0 0.0 0.48336267471313477 -0.10723800212144852 0.21605446934700012 0.0 0.0 1.0 0.5267577171325684 0.28827619552612305 0 1.0 0 0.0 0 0.0 0 0.0 0.48002052307128906 -0.10947578400373459 0.21605446934700012 0.0 0.0 1.0 0.5244717597961426 0.2854476571083069 0 1.0 0 0.0 0 0.0 0 0.0 0.5844135284423828 -0.11520648002624512 0.21605446934700012 0.0 0.0 1.0 0.5878931283950806 0.3063850998878479 0 1.0 0 0.0 0 0.0 0 0.0 0.5876777172088623 -0.10778042674064636 0.21605446934700012 0.0 0.0 1.0 0.5888727307319641 0.314247190952301 0 1.0 0 0.0 0 0.0 0 0.0 0.2601480484008789 -0.11062387377023697 0.21605446934700012 0.0 0.0 0.999969482421875 0.3802019953727722 0.3209127187728882 0 1.0 0 0.0 0 0.0 0 0.0 0.378828763961792 -0.11091089993715286 0.21605446934700012 0.0 0.0 1.0 0.45010286569595337 0.2857872247695923 0 1.0 0 0.0 0 0.0 0 0.0 0.37529706954956055 -0.10874000191688538 0.21605446934700012 0.0 0.0 1.0 0.44773736596107483 0.288699209690094 0 1.0 0 0.0 0 0.0 0 0.0 0.47641563415527344 -0.1115189865231514 0.21605446934700012 0.0 0.0 1.0 0.5219649076461792 0.2828216552734375 0 1.0 0 0.0 0 0.0 0 0.0 0.5844135284423828 -0.11520648002624512 0.21605446934700012 0.0 0.0 1.0 0.5878931283950806 0.3063850998878479 0 1.0 0 0.0 0 0.0 0 0.0 0.48002052307128906 -0.10947578400373459 0.21605446934700012 0.0 0.0 1.0 0.5244717597961426 0.2854476571083069 0 1.0 0 0.0 0 0.0 0 0.0 0.2643401622772217 -0.1180596575140953 0.21605446934700012 0.0 0.0 0.999969482421875 0.38138139247894287 0.31271225214004517 0 1.0 0 0.0 0 0.0 0 0.0 0.378828763961792 -0.11091089993715286 0.21605446934700012 0.0 0.0 1.0 0.45010286569595337 0.2857872247695923 0 1.0 0 0.0 0 0.0 0 0.0 0.2601480484008789 -0.11062387377023697 0.21605446934700012 0.0 0.0 0.999969482421875 0.3802019953727722 0.3209127187728882 0 1.0 0 0.0 0 0.0 0 0.0 0.2643401622772217 -0.1180596575140953 0.21605446934700012 0.0 0.0 0.999969482421875 0.38138139247894287 0.31271225214004517 0 1.0 0 0.0 0 0.0 0 0.0 0.38257455825805664 -0.11287504434585571 0.21605446934700012 0.0 0.0 1.0 0.45266231894493103 0.2830923795700073 0 1.0 0 0.0 0 0.0 0 0.0 0.378828763961792 -0.11091089993715286 0.21605446934700012 0.0 0.0 1.0 0.45010286569595337 0.2857872247695923 0 1.0 0 0.0 0 0.0 0 0.0 0.472548246383667 -0.11336759477853775 0.21605446934700012 0.0 0.0 1.0 0.5192342400550842 0.2804054617881775 0 1.0 0 0.0 0 0.0 0 0.0 0.5844135284423828 -0.11520648002624512 0.21605446934700012 0.0 0.0 1.0 0.5878931283950806 0.3063850998878479 0 1.0 0 0.0 0 0.0 0 0.0 0.47641563415527344 -0.1115189865231514 0.21605446934700012 0.0 0.0 1.0 0.5219649076461792 0.2828216552734375 0 1.0 0 0.0 0 0.0 0 0.0 0.2643401622772217 -0.1180596575140953 0.21605446934700012 0.0 0.0 0.999969482421875 0.38138139247894287 0.31271225214004517 0 1.0 0 0.0 0 0.0 0 0.0 0.3865344524383545 -0.11463243514299393 0.21605446934700012 0.0 0.0 0.999969482421875 0.45541778206825256 0.2806205153465271 0 1.0 0 0.0 0 0.0 0 0.0 0.38257455825805664 -0.11287504434585571 0.21605446934700012 0.0 0.0 1.0 0.45266231894493103 0.2830923795700073 0 1.0 0 0.0 0 0.0 0 0.0 0.4684181213378906 -0.11502161622047424 0.21605446934700012 0.0 0.0 1.0 0.516277015209198 0.2782076597213745 0 1.0 0 0.0 0 0.0 0 0.0 0.5844135284423828 -0.11520648002624512 0.21605446934700012 0.0 0.0 1.0 0.5878931283950806 0.3063850998878479 0 1.0 0 0.0 0 0.0 0 0.0 0.472548246383667 -0.11336759477853775 0.21605446934700012 0.0 0.0 1.0 0.5192342400550842 0.2804054617881775 0 1.0 0 0.0 0 0.0 0 0.0 0.2643401622772217 -0.1180596575140953 0.21605446934700012 0.0 0.0 0.999969482421875 0.38138139247894287 0.31271225214004517 0 1.0 0 0.0 0 0.0 0 0.0 0.39070844650268555 -0.1161830797791481 0.21605446934700012 0.0 0.0 0.999969482421875 0.45837074518203735 0.27837908267974854 0 1.0 0 0.0 0 0.0 0 0.0 0.3865344524383545 -0.11463243514299393 0.21605446934700012 0.0 0.0 0.999969482421875 0.45541778206825256 0.2806205153465271 0 1.0 0 0.0 0 0.0 0 0.0 0.46402525901794434 -0.11648104339838028 0.21605446934700012 0.0 0.0 1.0 0.5130914449691772 0.27623826265335083 0 1.0 0 0.0 0 0.0 0 0.0 0.5844135284423828 -0.11520648002624512 0.21605446934700012 0.0 0.0 1.0 0.5878931283950806 0.3063850998878479 0 1.0 0 0.0 0 0.0 0 0.0 0.4684181213378906 -0.11502161622047424 0.21605446934700012 0.0 0.0 1.0 0.516277015209198 0.2782076597213745 0 1.0 0 0.0 0 0.0 0 0.0 0.46402525901794434 -0.11648104339838028 0.21605446934700012 0.0 0.0 1.0 0.5130914449691772 0.27623826265335083 0 1.0 0 0.0 0 0.0 0 0.0 0.5805556774139404 -0.12243308126926422 0.21605446934700012 0.0 0.0 1.0 0.5865741968154907 0.2985714077949524 0 1.0 0 0.0 0 0.0 0 0.0 0.5844135284423828 -0.11520648002624512 0.21605446934700012 0.0 0.0 1.0 0.5878931283950806 0.3063850998878479 0 1.0 0 0.0 0 0.0 0 0.0 0.2643401622772217 -0.1180596575140953 0.21605446934700012 0.0 0.0 0.999969482421875 0.38138139247894287 0.31271225214004517 0 1.0 0 0.0 0 0.0 0 0.0 0.3950965404510498 -0.11752697080373764 0.21605446934700012 0.0 0.0 1.0 0.4615219831466675 0.27637648582458496 0 1.0 0 0.0 0 0.0 0 0.0 0.39070844650268555 -0.1161830797791481 0.21605446934700012 0.0 0.0 0.999969482421875 0.45837074518203735 0.27837908267974854 0 1.0 0 0.0 0 0.0 0 0.0 0.4593696594238281 -0.11774588376283646 0.21605446934700012 0.0 0.0 0.999969482421875 0.5096766352653503 0.27450883388519287 0 1.0 0 0.0 0 0.0 0 0.0 0.5805556774139404 -0.12243308126926422 0.21605446934700012 0.0 0.0 1.0 0.5865741968154907 0.2985714077949524 0 1.0 0 0.0 0 0.0 0 0.0 0.46402525901794434 -0.11648104339838028 0.21605446934700012 0.0 0.0 1.0 0.5130914449691772 0.27623826265335083 0 1.0 0 0.0 0 0.0 0 0.0 0.2643401622772217 -0.1180596575140953 0.21605446934700012 0.0 0.0 0.999969482421875 0.38138139247894287 0.31271225214004517 0 1.0 0 0.0 0 0.0 0 0.0 0.39969849586486816 -0.11866410821676254 0.21605446934700012 0.0 0.0 1.0 0.4648711681365967 0.27462226152420044 0 1.0 0 0.0 0 0.0 0 0.0 0.3950965404510498 -0.11752697080373764 0.21605446934700012 0.0 0.0 1.0 0.4615219831466675 0.27637648582458496 0 1.0 0 0.0 0 0.0 0 0.0 0.454451322555542 -0.11881612986326218 0.21605446934700012 0.0 0.0 1.0 0.5060328841209412 0.27303242683410645 0 1.0 0 0.0 0 0.0 0 0.0 0.5805556774139404 -0.12243308126926422 0.21605446934700012 0.0 0.0 1.0 0.5865741968154907 0.2985714077949524 0 1.0 0 0.0 0 0.0 0 0.0 0.4593696594238281 -0.11774588376283646 0.21605446934700012 0.0 0.0 0.999969482421875 0.5096766352653503 0.27450883388519287 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 -0.12518896162509918 0.21605446934700012 0.0 0.0 0.999969482421875 0.38283199071884155 0.3046743869781494 0 1.0 0 0.0 0 0.0 0 0.0 0.39969849586486816 -0.11866410821676254 0.21605446934700012 0.0 0.0 1.0 0.4648711681365967 0.27462226152420044 0 1.0 0 0.0 0 0.0 0 0.0 0.2643401622772217 -0.1180596575140953 0.21605446934700012 0.0 0.0 0.999969482421875 0.38138139247894287 0.31271225214004517 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 -0.12518896162509918 0.21605446934700012 0.0 0.0 0.999969482421875 0.38283199071884155 0.3046743869781494 0 1.0 0 0.0 0 0.0 0 0.0 0.4045145511627197 -0.11959449201822281 0.21605446934700012 0.0 0.0 0.999969482421875 0.4684172570705414 0.27312713861465454 0 1.0 0 0.0 0 0.0 0 0.0 0.39969849586486816 -0.11866410821676254 0.21605446934700012 0.0 0.0 1.0 0.4648711681365967 0.27462226152420044 0 1.0 0 0.0 0 0.0 0 0.0 0.44927024841308594 -0.11969178915023804 0.21605446934700012 0.0 0.0 1.0 0.502161979675293 0.2718232274055481 0 1.0 0 0.0 0 0.0 0 0.0 0.5805556774139404 -0.12243308126926422 0.21605446934700012 0.0 0.0 1.0 0.5865741968154907 0.2985714077949524 0 1.0 0 0.0 0 0.0 0 0.0 0.454451322555542 -0.11881612986326218 0.21605446934700012 0.0 0.0 1.0 0.5060328841209412 0.27303242683410645 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 -0.12518896162509918 0.21605446934700012 0.0 0.0 0.999969482421875 0.38283199071884155 0.3046743869781494 0 1.0 0 0.0 0 0.0 0 0.0 0.4095447063446045 -0.12031812220811844 0.21605446934700012 0.0 0.0 1.0 0.47215789556503296 0.27190256118774414 0 1.0 0 0.0 0 0.0 0 0.0 0.4045145511627197 -0.11959449201822281 0.21605446934700012 0.0 0.0 0.999969482421875 0.4684172570705414 0.27312713861465454 0 1.0 0 0.0 0 0.0 0 0.0 0.44382667541503906 -0.12037285417318344 0.21605446934700012 0.0 0.0 0.999969482421875 0.49806731939315796 0.27089667320251465 0 1.0 0 0.0 0 0.0 0 0.0 0.5805556774139404 -0.12243308126926422 0.21605446934700012 0.0 0.0 1.0 0.5865741968154907 0.2985714077949524 0 1.0 0 0.0 0 0.0 0 0.0 0.44927024841308594 -0.11969178915023804 0.21605446934700012 0.0 0.0 1.0 0.502161979675293 0.2718232274055481 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 -0.12518896162509918 0.21605446934700012 0.0 0.0 0.999969482421875 0.38283199071884155 0.3046743869781494 0 1.0 0 0.0 0 0.0 0 0.0 0.41478896141052246 -0.12083500623703003 0.21605446934700012 0.0 3.0518509447574615e-05 1.0 0.4760892987251282 0.27096086740493774 0 1.0 0 0.0 0 0.0 0 0.0 0.4095447063446045 -0.12031812220811844 0.21605446934700012 0.0 0.0 1.0 0.47215789556503296 0.27190256118774414 0 1.0 0 0.0 0 0.0 0 0.0 0.43812036514282227 -0.12085933238267899 0.21605446934700012 0.0 0.0 0.999969482421875 0.4937538802623749 0.2702690362930298 0 1.0 0 0.0 0 0.0 0 0.0 0.5805556774139404 -0.12243308126926422 0.21605446934700012 0.0 0.0 1.0 0.5865741968154907 0.2985714077949524 0 1.0 0 0.0 0 0.0 0 0.0 0.44382667541503906 -0.12037285417318344 0.21605446934700012 0.0 0.0 0.999969482421875 0.49806731939315796 0.27089667320251465 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 -0.12518896162509918 0.21605446934700012 0.0 0.0 0.999969482421875 0.38283199071884155 0.3046743869781494 0 1.0 0 0.0 0 0.0 0 0.0 0.42024731636047363 -0.12114513665437698 0.21605446934700012 0.0 -0.00012207403779029846 1.0 0.4802062213420868 0.27031534910202026 0 1.0 0 0.0 0 0.0 0 0.0 0.41478896141052246 -0.12083500623703003 0.21605446934700012 0.0 3.0518509447574615e-05 1.0 0.4760892987251282 0.27096086740493774 0 1.0 0 0.0 0 0.0 0 0.0 0.43215131759643555 -0.12115121632814407 0.21605446934700012 0.0 0.0 1.0 0.48922884464263916 0.2699575424194336 0 1.0 0 0.0 0 0.0 0 0.0 0.5805556774139404 -0.12243308126926422 0.21605446934700012 0.0 0.0 1.0 0.5865741968154907 0.2985714077949524 0 1.0 0 0.0 0 0.0 0 0.0 0.43812036514282227 -0.12085933238267899 0.21605446934700012 0.0 0.0 0.999969482421875 0.4937538802623749 0.2702690362930298 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 -0.12518896162509918 0.21605446934700012 0.0 0.0 0.999969482421875 0.38283199071884155 0.3046743869781494 0 1.0 0 0.0 0 0.0 0 0.0 0.4259195327758789 -0.1212485134601593 0.21605446934700012 0.0 0.0 1.0 0.48450160026550293 0.2699793577194214 0 1.0 0 0.0 0 0.0 0 0.0 0.42024731636047363 -0.12114513665437698 0.21605446934700012 0.0 -0.00012207403779029846 1.0 0.4802062213420868 0.27031534910202026 0 1.0 0 0.0 0 0.0 0 0.0 0.4259195327758789 -0.1212485134601593 0.21605446934700012 0.0 0.0 1.0 0.48450160026550293 0.2699793577194214 0 1.0 0 0.0 0 0.0 0 0.0 0.5805556774139404 -0.12243308126926422 0.21605446934700012 0.0 0.0 1.0 0.5865741968154907 0.2985714077949524 0 1.0 0 0.0 0 0.0 0 0.0 0.43215131759643555 -0.12115121632814407 0.21605446934700012 0.0 0.0 1.0 0.48922884464263916 0.2699575424194336 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 -0.12518896162509918 0.21605446934700012 0.0 0.0 0.999969482421875 0.38283199071884155 0.3046743869781494 0 1.0 0 0.0 0 0.0 0 0.0 0.5805556774139404 -0.12243308126926422 0.21605446934700012 0.0 0.0 1.0 0.5865741968154907 0.2985714077949524 0 1.0 0 0.0 0 0.0 0 0.0 0.4259195327758789 -0.1212485134601593 0.21605446934700012 0.0 0.0 1.0 0.48450160026550293 0.2699793577194214 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 -0.12518896162509918 0.21605446934700012 0.0 0.0 0.999969482421875 0.38283199071884155 0.3046743869781494 0 1.0 0 0.0 0 0.0 0 0.0 0.5761044025421143 -0.12946023046970367 0.21605446934700012 0.0 0.0 1.0 0.5848962068557739 0.2907968759536743 0 1.0 0 0.0 0 0.0 0 0.0 0.5805556774139404 -0.12243308126926422 0.21605446934700012 0.0 0.0 1.0 0.5865741968154907 0.2985714077949524 0 1.0 0 0.0 0 0.0 0 0.0 0.2740015983581543 -0.1320118010044098 0.21605446934700012 0.0 0.0 1.0 0.38457003235816956 0.29679185152053833 0 1.0 0 0.0 0 0.0 0 0.0 0.5761044025421143 -0.12946023046970367 0.21605446934700012 0.0 0.0 1.0 0.5848962068557739 0.2907968759536743 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 -0.12518896162509918 0.21605446934700012 0.0 0.0 0.999969482421875 0.38283199071884155 0.3046743869781494 0 1.0 0 0.0 0 0.0 0 0.0 0.2740015983581543 -0.1320118010044098 0.21605446934700012 0.0 0.0 1.0 0.38457003235816956 0.29679185152053833 0 1.0 0 0.0 0 0.0 0 0.0 0.5710597038269043 -0.13628791272640228 0.21605446934700012 0.0 0.0 1.0 0.5828356146812439 0.2830563187599182 0 1.0 0 0.0 0 0.0 0 0.0 0.5761044025421143 -0.12946023046970367 0.21605446934700012 0.0 0.0 1.0 0.5848962068557739 0.2907968759536743 0 1.0 0 0.0 0 0.0 0 0.0 0.27947092056274414 -0.13852813839912415 0.21605446934700012 0.0 0.0 1.0 0.38661396503448486 0.28905969858169556 0 1.0 0 0.0 0 0.0 0 0.0 0.5710597038269043 -0.13628791272640228 0.21605446934700012 0.0 0.0 1.0 0.5828356146812439 0.2830563187599182 0 1.0 0 0.0 0 0.0 0 0.0 0.2740015983581543 -0.1320118010044098 0.21605446934700012 0.0 0.0 1.0 0.38457003235816956 0.29679185152053833 0 1.0 0 0.0 0 0.0 0 0.0 0.27947092056274414 -0.13852813839912415 0.21605446934700012 0.0 0.0 1.0 0.38661396503448486 0.28905969858169556 0 1.0 0 0.0 0 0.0 0 0.0 0.5654213428497314 -0.14291614294052124 0.21605446934700012 0.0 0.0 1.0 0.5803650617599487 0.27534884214401245 0 1.0 0 0.0 0 0.0 0 0.0 0.5710597038269043 -0.13628791272640228 0.21605446934700012 0.0 0.0 1.0 0.5828356146812439 0.2830563187599182 0 1.0 0 0.0 0 0.0 0 0.0 0.2853658199310303 -0.14473800361156464 0.21605446934700012 0.0 0.0 1.0 0.3889842629432678 0.28147590160369873 0 1.0 0 0.0 0 0.0 0 0.0 0.5654213428497314 -0.14291614294052124 0.21605446934700012 0.0 0.0 1.0 0.5803650617599487 0.27534884214401245 0 1.0 0 0.0 0 0.0 0 0.0 0.27947092056274414 -0.13852813839912415 0.21605446934700012 0.0 0.0 1.0 0.38661396503448486 0.28905969858169556 0 1.0 0 0.0 0 0.0 0 0.0 0.2853658199310303 -0.14473800361156464 0.21605446934700012 0.0 0.0 1.0 0.3889842629432678 0.28147590160369873 0 1.0 0 0.0 0 0.0 0 0.0 0.5591895580291748 -0.14934493601322174 0.21605446934700012 0.0 0.0 0.999969482421875 0.5774534940719604 0.2676786184310913 0 1.0 0 0.0 0 0.0 0 0.0 0.5654213428497314 -0.14291614294052124 0.21605446934700012 0.0 0.0 1.0 0.5803650617599487 0.27534884214401245 0 1.0 0 0.0 0 0.0 0 0.0 0.2916862964630127 -0.15064138174057007 0.21605446934700012 0.0 0.0 1.0 0.39170393347740173 0.2740418314933777 0 1.0 0 0.0 0 0.0 0 0.0 0.5591895580291748 -0.14934493601322174 0.21605446934700012 0.0 0.0 0.999969482421875 0.5774534940719604 0.2676786184310913 0 1.0 0 0.0 0 0.0 0 0.0 0.2853658199310303 -0.14473800361156464 0.21605446934700012 0.0 0.0 1.0 0.3889842629432678 0.28147590160369873 0 1.0 0 0.0 0 0.0 0 0.0 0.2916862964630127 -0.15064138174057007 0.21605446934700012 0.0 0.0 1.0 0.39170393347740173 0.2740418314933777 0 1.0 0 0.0 0 0.0 0 0.0 0.5523643493652344 -0.1555742621421814 0.21605446934700012 0.0 0.0 1.0 0.5740653872489929 0.26005619764328003 0 1.0 0 0.0 0 0.0 0 0.0 0.5591895580291748 -0.14934493601322174 0.21605446934700012 0.0 0.0 0.999969482421875 0.5774534940719604 0.2676786184310913 0 1.0 0 0.0 0 0.0 0 0.0 0.2984325885772705 -0.15623830258846283 0.21605446934700012 0.0 0.0 1.0 0.3947984278202057 0.26676231622695923 0 1.0 0 0.0 0 0.0 0 0.0 0.5523643493652344 -0.1555742621421814 0.21605446934700012 0.0 0.0 1.0 0.5740653872489929 0.26005619764328003 0 1.0 0 0.0 0 0.0 0 0.0 0.2916862964630127 -0.15064138174057007 0.21605446934700012 0.0 0.0 1.0 0.39170393347740173 0.2740418314933777 0 1.0 0 0.0 0 0.0 0 0.0 0.2984325885772705 -0.15623830258846283 0.21605446934700012 0.0 0.0 1.0 0.3947984278202057 0.26676231622695923 0 1.0 0 0.0 0 0.0 0 0.0 0.5449578762054443 -0.16144844889640808 0.21605446934700012 0.0 0.0 1.0 0.5701563954353333 0.25263357162475586 0 1.0 0 0.0 0 0.0 0 0.0 0.5523643493652344 -0.1555742621421814 0.21605446934700012 0.0 0.0 1.0 0.5740653872489929 0.26005619764328003 0 1.0 0 0.0 0 0.0 0 0.0 0.3056044578552246 -0.16152872145175934 0.21605446934700012 0.0 0.0 1.0 0.39829540252685547 0.2596469521522522 0 1.0 0 0.0 0 0.0 0 0.0 0.5449578762054443 -0.16144844889640808 0.21605446934700012 0.0 0.0 1.0 0.5701563954353333 0.25263357162475586 0 1.0 0 0.0 0 0.0 0 0.0 0.2984325885772705 -0.15623830258846283 0.21605446934700012 0.0 0.0 1.0 0.3947984278202057 0.26676231622695923 0 1.0 0 0.0 0 0.0 0 0.0 0.3056044578552246 -0.16152872145175934 0.21605446934700012 0.0 0.0 1.0 0.39829540252685547 0.2596469521522522 0 1.0 0 0.0 0 0.0 0 0.0 0.5369820594787598 -0.16681185364723206 0.21605446934700012 0.0 0.0 1.0 0.5656810402870178 0.24556457996368408 0 1.0 0 0.0 0 0.0 0 0.0 0.5449578762054443 -0.16144844889640808 0.21605446934700012 0.0 0.0 1.0 0.5701563954353333 0.25263357162475586 0 1.0 0 0.0 0 0.0 0 0.0 0.31320953369140625 -0.1664518564939499 0.21605446934700012 0.0 0.0 1.0 0.4022355079650879 0.25275760889053345 0 1.0 0 0.0 0 0.0 0 0.0 0.5369820594787598 -0.16681185364723206 0.21605446934700012 0.0 0.0 1.0 0.5656810402870178 0.24556457996368408 0 1.0 0 0.0 0 0.0 0 0.0 0.3056044578552246 -0.16152872145175934 0.21605446934700012 0.0 0.0 1.0 0.39829540252685547 0.2596469521522522 0 1.0 0 0.0 0 0.0 0 0.0 0.3212544918060303 -0.1709468960762024 0.21605445444583893 0.0 0.0 1.0 0.4066609740257263 0.2461605668067932 0 1.0 0 0.0 0 0.0 0 0.0 0.5369820594787598 -0.16681185364723206 0.21605446934700012 0.0 0.0 1.0 0.5656810402870178 0.24556457996368408 0 1.0 0 0.0 0 0.0 0 0.0 0.31320953369140625 -0.1664518564939499 0.21605446934700012 0.0 0.0 1.0 0.4022355079650879 0.25275760889053345 0 1.0 0 0.0 0 0.0 0 0.0 0.3212544918060303 -0.1709468960762024 0.21605445444583893 0.0 0.0 1.0 0.4066609740257263 0.2461605668067932 0 1.0 0 0.0 0 0.0 0 0.0 0.5284371376037598 -0.17166444659233093 0.21605445444583893 0.0 0.0 1.0 0.5605977177619934 0.2388749122619629 0 1.0 0 0.0 0 0.0 0 0.0 0.5369820594787598 -0.16681185364723206 0.21605446934700012 0.0 0.0 1.0 0.5656810402870178 0.24556457996368408 0 1.0 0 0.0 0 0.0 0 0.0 0.3297398090362549 -0.17501384019851685 0.21605445444583893 0.0 0.0 1.0 0.4116052985191345 0.23988062143325806 0 1.0 0 0.0 0 0.0 0 0.0 0.5284371376037598 -0.17166444659233093 0.21605445444583893 0.0 0.0 1.0 0.5605977177619934 0.2388749122619629 0 1.0 0 0.0 0 0.0 0 0.0 0.3212544918060303 -0.1709468960762024 0.21605445444583893 0.0 0.0 1.0 0.4066609740257263 0.2461605668067932 0 1.0 0 0.0 0 0.0 0 0.0 0.3297398090362549 -0.17501384019851685 0.21605445444583893 0.0 0.0 1.0 0.4116052985191345 0.23988062143325806 0 1.0 0 0.0 0 0.0 0 0.0 0.5193231105804443 -0.1760062575340271 0.21605445444583893 0.0 0.0 0.999969482421875 0.5548642873764038 0.2326015830039978 0 1.0 0 0.0 0 0.0 0 0.0 0.5284371376037598 -0.17166444659233093 0.21605445444583893 0.0 0.0 1.0 0.5605977177619934 0.2388749122619629 0 1.0 0 0.0 0 0.0 0 0.0 0.3386654853820801 -0.17865267395973206 0.21605445444583893 0.0 0.0 1.0 0.41710150241851807 0.23395079374313354 0 1.0 0 0.0 0 0.0 0 0.0 0.5193231105804443 -0.1760062575340271 0.21605445444583893 0.0 0.0 0.999969482421875 0.5548642873764038 0.2326015830039978 0 1.0 0 0.0 0 0.0 0 0.0 0.3297398090362549 -0.17501384019851685 0.21605445444583893 0.0 0.0 1.0 0.4116052985191345 0.23988062143325806 0 1.0 0 0.0 0 0.0 0 0.0 0.3386654853820801 -0.17865267395973206 0.21605445444583893 0.0 0.0 1.0 0.41710150241851807 0.23395079374313354 0 1.0 0 0.0 0 0.0 0 0.0 0.5096397399902344 -0.17983725666999817 0.21605445444583893 0.0 0.0 1.0 0.5484403967857361 0.22679364681243896 0 1.0 0 0.0 0 0.0 0 0.0 0.5193231105804443 -0.1760062575340271 0.21605445444583893 0.0 0.0 0.999969482421875 0.5548642873764038 0.2326015830039978 0 1.0 0 0.0 0 0.0 0 0.0 0.34803128242492676 -0.18186341226100922 0.21605445444583893 0.0 0.0 1.0 0.4231806993484497 0.22841274738311768 0 1.0 0 0.0 0 0.0 0 0.0 0.5096397399902344 -0.17983725666999817 0.21605445444583893 0.0 0.0 1.0 0.5484403967857361 0.22679364681243896 0 1.0 0 0.0 0 0.0 0 0.0 0.3386654853820801 -0.17865267395973206 0.21605445444583893 0.0 0.0 1.0 0.41710150241851807 0.23395079374313354 0 1.0 0 0.0 0 0.0 0 0.0 0.34803128242492676 -0.18186341226100922 0.21605445444583893 0.0 0.0 1.0 0.4231806993484497 0.22841274738311768 0 1.0 0 0.0 0 0.0 0 0.0 0.499387264251709 -0.18315744400024414 0.21605445444583893 0.0 0.0 1.0 0.5412908792495728 0.22151362895965576 0 1.0 0 0.0 0 0.0 0 0.0 0.5096397399902344 -0.17983725666999817 0.21605445444583893 0.0 0.0 1.0 0.5484403967857361 0.22679364681243896 0 1.0 0 0.0 0 0.0 0 0.0 0.357837438583374 -0.18464605510234833 0.21605445444583893 0.0 0.0 1.0 0.4298703670501709 0.22331726551055908 0 1.0 0 0.0 0 0.0 0 0.0 0.499387264251709 -0.18315744400024414 0.21605445444583893 0.0 0.0 1.0 0.5412908792495728 0.22151362895965576 0 1.0 0 0.0 0 0.0 0 0.0 0.34803128242492676 -0.18186341226100922 0.21605445444583893 0.0 0.0 1.0 0.4231806993484497 0.22841274738311768 0 1.0 0 0.0 0 0.0 0 0.0 0.357837438583374 -0.18464605510234833 0.21605445444583893 0.0 0.0 1.0 0.4298703670501709 0.22331726551055908 0 1.0 0 0.0 0 0.0 0 0.0 0.48856568336486816 -0.1859668493270874 0.21605445444583893 0.0 0.0 1.0 0.5333896279335022 0.21683770418167114 0 1.0 0 0.0 0 0.0 0 0.0 0.499387264251709 -0.18315744400024414 0.21605445444583893 0.0 0.0 1.0 0.5412908792495728 0.22151362895965576 0 1.0 0 0.0 0 0.0 0 0.0 0.3680837154388428 -0.1870006024837494 0.21605445444583893 0.0 0.0 1.0 0.43719086050987244 0.2187250852584839 0 1.0 0 0.0 0 0.0 0 0.0 0.48856568336486816 -0.1859668493270874 0.21605445444583893 0.0 0.0 1.0 0.5333896279335022 0.21683770418167114 0 1.0 0 0.0 0 0.0 0 0.0 0.357837438583374 -0.18464605510234833 0.21605445444583893 0.0 0.0 1.0 0.4298703670501709 0.22331726551055908 0 1.0 0 0.0 0 0.0 0 0.0 0.3680837154388428 -0.1870006024837494 0.21605445444583893 0.0 0.0 1.0 0.43719086050987244 0.2187250852584839 0 1.0 0 0.0 0 0.0 0 0.0 0.4771747589111328 -0.18826544284820557 0.21605445444583893 0.0 0.0 1.0 0.5247248411178589 0.21285533905029297 0 1.0 0 0.0 0 0.0 0 0.0 0.48856568336486816 -0.1859668493270874 0.21605445444583893 0.0 0.0 1.0 0.5333896279335022 0.21683770418167114 0 1.0 0 0.0 0 0.0 0 0.0 0.3787703514099121 -0.1889270544052124 0.21605445444583893 0.0 0.0 1.0 0.4451525807380676 0.21470564603805542 0 1.0 0 0.0 0 0.0 0 0.0 0.4771747589111328 -0.18826544284820557 0.21605445444583893 0.0 0.0 1.0 0.5247248411178589 0.21285533905029297 0 1.0 0 0.0 0 0.0 0 0.0 0.3680837154388428 -0.1870006024837494 0.21605445444583893 0.0 0.0 1.0 0.43719086050987244 0.2187250852584839 0 1.0 0 0.0 0 0.0 0 0.0 0.3787703514099121 -0.1889270544052124 0.21605445444583893 0.0 0.0 1.0 0.4451525807380676 0.21470564603805542 0 1.0 0 0.0 0 0.0 0 0.0 0.46521472930908203 -0.19005325436592102 0.21605445444583893 0.0 0.0 0.999969482421875 0.5153055787086487 0.20966792106628418 0 1.0 0 0.0 0 0.0 0 0.0 0.4771747589111328 -0.18826544284820557 0.21605445444583893 0.0 0.0 1.0 0.5247248411178589 0.21285533905029297 0 1.0 0 0.0 0 0.0 0 0.0 0.38989734649658203 -0.19042539596557617 0.21605445444583893 0.0 3.0518509447574615e-05 1.0 0.4537515640258789 0.2113369107246399 0 1.0 0 0.0 0 0.0 0 0.0 0.46521472930908203 -0.19005325436592102 0.21605445444583893 0.0 0.0 0.999969482421875 0.5153055787086487 0.20966792106628418 0 1.0 0 0.0 0 0.0 0 0.0 0.3787703514099121 -0.1889270544052124 0.21605445444583893 0.0 0.0 1.0 0.4451525807380676 0.21470564603805542 0 1.0 0 0.0 0 0.0 0 0.0 0.38989734649658203 -0.19042539596557617 0.21605445444583893 0.0 3.0518509447574615e-05 1.0 0.4537515640258789 0.2113369107246399 0 1.0 0 0.0 0 0.0 0 0.0 0.4526855945587158 -0.19133025407791138 0.21605445444583893 0.0 0.0 1.0 0.5051671266555786 0.20738548040390015 0 1.0 0 0.0 0 0.0 0 0.0 0.46521472930908203 -0.19005325436592102 0.21605445444583893 0.0 0.0 0.999969482421875 0.5153055787086487 0.20966792106628418 0 1.0 0 0.0 0 0.0 0 0.0 0.40146446228027344 -0.1914956420660019 0.21605445444583893 0.0 0.0 0.999969482421875 0.46296530961990356 0.2087029218673706 0 1.0 0 0.0 0 0.0 0 0.0 0.4526855945587158 -0.19133025407791138 0.21605445444583893 0.0 0.0 1.0 0.5051671266555786 0.20738548040390015 0 1.0 0 0.0 0 0.0 0 0.0 0.38989734649658203 -0.19042539596557617 0.21605445444583893 0.0 3.0518509447574615e-05 1.0 0.4537515640258789 0.2113369107246399 0 1.0 0 0.0 0 0.0 0 0.0 0.40146446228027344 -0.1914956420660019 0.21605445444583893 0.0 0.0 0.999969482421875 0.46296530961990356 0.2087029218673706 0 1.0 0 0.0 0 0.0 0 0.0 0.4395871162414551 -0.19209645688533783 0.21605445444583893 0.0 0.0 1.0 0.49437659978866577 0.20612168312072754 0 1.0 0 0.0 0 0.0 0 0.0 0.4526855945587158 -0.19133025407791138 0.21605445444583893 0.0 0.0 1.0 0.5051671266555786 0.20738548040390015 0 1.0 0 0.0 0 0.0 0 0.0 0.41347193717956543 -0.19213779270648956 0.21605445444583893 0.0 0.0 0.999969482421875 0.4727497100830078 0.2068910002708435 0 1.0 0 0.0 0 0.0 0 0.0 0.4395871162414551 -0.19209645688533783 0.21605445444583893 0.0 0.0 1.0 0.49437659978866577 0.20612168312072754 0 1.0 0 0.0 0 0.0 0 0.0 0.40146446228027344 -0.1914956420660019 0.21605445444583893 0.0 0.0 0.999969482421875 0.46296530961990356 0.2087029218673706 0 1.0 0 0.0 0 0.0 0 0.0 0.41347193717956543 -0.19213779270648956 0.21605445444583893 0.0 0.0 0.999969482421875 0.4727497100830078 0.2068910002708435 0 1.0 0 0.0 0 0.0 0 0.0 0.4259195327758789 -0.19235184788703918 0.21605445444583893 0.0 0.0 1.0 0.4830358922481537 0.2059873342514038 0 1.0 0 0.0 0 0.0 0 0.0 0.4395871162414551 -0.19209645688533783 0.21605445444583893 0.0 0.0 1.0 0.49437659978866577 0.20612168312072754 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 -0.04734307527542114 0.21605446934700012 0.0 0.0 1.0 0.4058777093887329 0.4971381425857544 0 1.0 0 0.0 0 0.0 0 0.0 -0.05954456329345703 0.18803346157073975 0.21605448424816132 0.0 0.0 0.999969482421875 0.46700388193130493 0.6951695084571838 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 0.18803346157073975 0.21605448424816132 0.0 0.0 1.0 0.42104125022888184 0.6850046515464783 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 -0.04734307527542114 0.21605446934700012 0.0 0.0 1.0 0.4058777093887329 0.4971381425857544 0 1.0 0 0.0 0 0.0 0 0.0 -0.05954456329345703 0.01710525155067444 0.21605446934700012 0.0 0.0 1.0 0.4619511365890503 0.5655359625816345 0 1.0 0 0.0 0 0.0 0 0.0 -0.05954456329345703 0.18803346157073975 0.21605448424816132 0.0 0.0 0.999969482421875 0.46700388193130493 0.6951695084571838 0 1.0 0 0.0 0 0.0 0 0.0 0.08196139335632324 0.03111577033996582 0.21605446934700012 0.0 0.0 1.0 0.5414687395095825 0.5723863840103149 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 0.18803346157073975 0.21605448424816132 0.0 0.0 0.999969482421875 0.5768240690231323 0.6677558422088623 0 1.0 0 0.0 0 0.0 0 0.0 0.08196139335632324 0.18803346157073975 0.21605448424816132 0.0 0.0 1.0 0.536641538143158 0.6864609718322754 0 1.0 0 0.0 0 0.0 0 0.0 0.08196139335632324 0.03111577033996582 0.21605446934700012 0.0 0.0 1.0 0.5414687395095825 0.5723863840103149 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.6000452637672424 0.3568435311317444 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 0.18803346157073975 0.21605448424816132 0.0 0.0 0.999969482421875 0.5768240690231323 0.6677558422088623 0 1.0 0 0.0 0 0.0 0 0.0 0.08191061019897461 0.01821810007095337 0.21605446934700012 0.0 0.0 1.0 0.5418952107429504 0.560042142868042 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.6000452637672424 0.3568435311317444 0 1.0 0 0.0 0 0.0 0 0.0 0.08196139335632324 0.03111577033996582 0.21605446934700012 0.0 0.0 1.0 0.5414687395095825 0.5723863840103149 0 1.0 0 0.0 0 0.0 0 0.0 0.0817573070526123 0.006144970655441284 0.21605446934700012 0.0 0.0 1.0 0.5422479510307312 0.548079252243042 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.6000452637672424 0.3568435311317444 0 1.0 0 0.0 0 0.0 0 0.0 0.08191061019897461 0.01821810007095337 0.21605446934700012 0.0 0.0 1.0 0.5418952107429504 0.560042142868042 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 -0.04734307527542114 0.21605446934700012 0.0 0.0 1.0 0.4058777093887329 0.4971381425857544 0 1.0 0 0.0 0 0.0 0 0.0 -0.059506893157958984 0.004450798034667969 0.21605446934700012 0.0 0.0 1.0 0.46153777837753296 0.5524322390556335 0 1.0 0 0.0 0 0.0 0 0.0 -0.05954456329345703 0.01710525155067444 0.21605446934700012 0.0 0.0 1.0 0.4619511365890503 0.5655359625816345 0 1.0 0 0.0 0 0.0 0 0.0 0.08150196075439453 -0.005103573203086853 0.21605446934700012 0.0 0.0 1.0 0.5425242185592651 0.5365892648696899 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.6000452637672424 0.3568435311317444 0 1.0 0 0.0 0 0.0 0 0.0 0.0817573070526123 0.006144970655441284 0.21605446934700012 0.0 0.0 1.0 0.5422479510307312 0.548079252243042 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 -0.04734307527542114 0.21605446934700012 0.0 0.0 1.0 0.4058777093887329 0.4971381425857544 0 1.0 0 0.0 0 0.0 0 0.0 -0.059393882751464844 -0.007359623908996582 0.21605446934700012 0.0 0.0 1.0 0.4611889123916626 0.5397636890411377 0 1.0 0 0.0 0 0.0 0 0.0 -0.059506893157958984 0.004450798034667969 0.21605446934700012 0.0 0.0 1.0 0.46153777837753296 0.5524322390556335 0 1.0 0 0.0 0 0.0 0 0.0 0.08114433288574219 -0.015527546405792236 0.21605446934700012 0.0 0.0 0.999969482421875 0.542721152305603 0.5256565809249878 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.6000452637672424 0.3568435311317444 0 1.0 0 0.0 0 0.0 0 0.0 0.08150196075439453 -0.005103573203086853 0.21605446934700012 0.0 0.0 1.0 0.5425242185592651 0.5365892648696899 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 -0.04734307527542114 0.21605446934700012 0.0 0.0 1.0 0.4058777093887329 0.4971381425857544 0 1.0 0 0.0 0 0.0 0 0.0 -0.05920529365539551 -0.018326014280319214 0.21605446934700012 0.0 0.0 1.0 0.4609074592590332 0.5276371240615845 0 1.0 0 0.0 0 0.0 0 0.0 -0.059393882751464844 -0.007359623908996582 0.21605446934700012 0.0 0.0 1.0 0.4611889123916626 0.5397636890411377 0 1.0 0 0.0 0 0.0 0 0.0 0.08068466186523438 -0.025126934051513672 0.21605446934700012 0.0 0.0 1.0 0.5428363680839539 0.515357255935669 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.6000452637672424 0.3568435311317444 0 1.0 0 0.0 0 0.0 0 0.0 0.08114433288574219 -0.015527546405792236 0.21605446934700012 0.0 0.0 0.999969482421875 0.542721152305603 0.5256565809249878 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 -0.04734307527542114 0.21605446934700012 0.0 0.0 1.0 0.4058777093887329 0.4971381425857544 0 1.0 0 0.0 0 0.0 0 0.0 -0.05894136428833008 -0.028448358178138733 0.21605446934700012 0.0 0.0 0.999969482421875 0.4606959819793701 0.5161502361297607 0 1.0 0 0.0 0 0.0 0 0.0 -0.05920529365539551 -0.018326014280319214 0.21605446934700012 0.0 0.0 1.0 0.4609074592590332 0.5276371240615845 0 1.0 0 0.0 0 0.0 0 0.0 0.08012270927429199 -0.033901751041412354 0.21605446934700012 0.0 0.0 1.0 0.5428673028945923 0.5057579278945923 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.6000452637672424 0.3568435311317444 0 1.0 0 0.0 0 0.0 0 0.0 0.08068466186523438 -0.025126934051513672 0.21605446934700012 0.0 0.0 1.0 0.5428363680839539 0.515357255935669 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 -0.04734307527542114 0.21605446934700012 0.0 0.0 1.0 0.4058777093887329 0.4971381425857544 0 1.0 0 0.0 0 0.0 0 0.0 -0.058602094650268555 -0.03772667050361633 0.21605446934700012 0.0 0.0 1.0 0.46055692434310913 0.5053889751434326 0 1.0 0 0.0 0 0.0 0 0.0 -0.05894136428833008 -0.028448358178138733 0.21605446934700012 0.0 0.0 0.999969482421875 0.4606959819793701 0.5161502361297607 0 1.0 0 0.0 0 0.0 0 0.0 0.07945871353149414 -0.04185198247432709 0.21605446934700012 0.0 0.0 0.999969482421875 0.5428118705749512 0.4969159960746765 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.6000452637672424 0.3568435311317444 0 1.0 0 0.0 0 0.0 0 0.0 0.08012270927429199 -0.033901751041412354 0.21605446934700012 0.0 0.0 1.0 0.5428673028945923 0.5057579278945923 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 -0.04734307527542114 0.21605446934700012 0.0 0.0 1.0 0.4058777093887329 0.4971381425857544 0 1.0 0 0.0 0 0.0 0 0.0 -0.05818748474121094 -0.046160951256752014 0.21605446934700012 0.0 0.0 0.999969482421875 0.46049249172210693 0.4954274892807007 0 1.0 0 0.0 0 0.0 0 0.0 -0.058602094650268555 -0.03772667050361633 0.21605446934700012 0.0 0.0 1.0 0.46055692434310913 0.5053889751434326 0 1.0 0 0.0 0 0.0 0 0.0 0.07869243621826172 -0.04897764325141907 0.21605446934700012 0.0 0.0 0.999969482421875 0.5426681041717529 0.4888794422149658 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.6000452637672424 0.3568435311317444 0 1.0 0 0.0 0 0.0 0 0.0 0.07945871353149414 -0.04185198247432709 0.21605446934700012 0.0 0.0 0.999969482421875 0.5428118705749512 0.4969159960746765 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 -0.04734307527542114 0.21605446934700012 0.0 0.0 1.0 0.4058777093887329 0.4971381425857544 0 1.0 0 0.0 0 0.0 0 0.0 -0.057697296142578125 -0.053751200437545776 0.21605446934700012 0.0 0.0 1.0 0.46050482988357544 0.48632752895355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.05818748474121094 -0.046160951256752014 0.21605446934700012 0.0 0.0 0.999969482421875 0.46049249172210693 0.4954274892807007 0 1.0 0 0.0 0 0.0 0 0.0 -0.15787625312805176 -0.05594152212142944 0.21605446934700012 0.0 0.0 1.0 0.4052700400352478 0.48801618814468384 0 1.0 0 0.0 0 0.0 0 0.0 -0.057697296142578125 -0.053751200437545776 0.21605446934700012 0.0 0.0 1.0 0.46050482988357544 0.48632752895355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 -0.04734307527542114 0.21605446934700012 0.0 0.0 1.0 0.4058777093887329 0.4971381425857544 0 1.0 0 0.0 0 0.0 0 0.0 0.07782411575317383 -0.0552787184715271 0.21605446934700012 0.0 0.0 1.0 0.5424344539642334 0.4816877245903015 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.6000452637672424 0.3568435311317444 0 1.0 0 0.0 0 0.0 0 0.0 0.07869243621826172 -0.04897764325141907 0.21605446934700012 0.0 0.0 0.999969482421875 0.5426681041717529 0.4888794422149658 0 1.0 0 0.0 0 0.0 0 0.0 -0.15787625312805176 -0.05594152212142944 0.21605446934700012 0.0 0.0 1.0 0.4052700400352478 0.48801618814468384 0 1.0 0 0.0 0 0.0 0 0.0 -0.05713176727294922 -0.06049741059541702 0.21605446934700012 0.0 0.0 0.999969482421875 0.46059542894363403 0.4781392812728882 0 1.0 0 0.0 0 0.0 0 0.0 -0.057697296142578125 -0.053751200437545776 0.21605446934700012 0.0 0.0 1.0 0.46050482988357544 0.48632752895355225 0 1.0 0 0.0 0 0.0 0 0.0 0.07685351371765137 -0.06075522303581238 0.21605446934700012 0.0 0.0 0.999969482421875 0.5421093106269836 0.475372850894928 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.6000452637672424 0.3568435311317444 0 1.0 0 0.0 0 0.0 0 0.0 0.07782411575317383 -0.0552787184715271 0.21605446934700012 0.0 0.0 1.0 0.5424344539642334 0.4816877245903015 0 1.0 0 0.0 0 0.0 0 0.0 -0.15759897232055664 -0.06422378122806549 0.21605446934700012 0.0 0.0 1.0 0.4047679007053375 0.4791291356086731 0 1.0 0 0.0 0 0.0 0 0.0 -0.05713176727294922 -0.06049741059541702 0.21605446934700012 0.0 0.0 0.999969482421875 0.46059542894363403 0.4781392812728882 0 1.0 0 0.0 0 0.0 0 0.0 -0.15787625312805176 -0.05594152212142944 0.21605446934700012 0.0 0.0 1.0 0.4052700400352478 0.48801618814468384 0 1.0 0 0.0 0 0.0 0 0.0 -0.15759897232055664 -0.06422378122806549 0.21605446934700012 0.0 0.0 1.0 0.4047679007053375 0.4791291356086731 0 1.0 0 0.0 0 0.0 0 0.0 -0.05649089813232422 -0.06639958173036575 0.21605446934700012 0.0 0.0 1.0 0.4607657194137573 0.47090214490890503 0 1.0 0 0.0 0 0.0 0 0.0 -0.05713176727294922 -0.06049741059541702 0.21605446934700012 0.0 0.0 0.999969482421875 0.46059542894363403 0.4781392812728882 0 1.0 0 0.0 0 0.0 0 0.0 0.07578086853027344 -0.0654071494936943 0.21605446934700012 0.0 0.0 1.0 0.5416918396949768 0.46996021270751953 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.6000452637672424 0.3568435311317444 0 1.0 0 0.0 0 0.0 0 0.0 0.07685351371765137 -0.06075522303581238 0.21605446934700012 0.0 0.0 0.999969482421875 0.5421093106269836 0.475372850894928 0 1.0 0 0.0 0 0.0 0 0.0 -0.1571369171142578 -0.0721898302435875 0.21605446934700012 0.0 0.0 1.0 0.4043731093406677 0.4704909324645996 0 1.0 0 0.0 0 0.0 0 0.0 -0.05649089813232422 -0.06639958173036575 0.21605446934700012 0.0 0.0 1.0 0.4607657194137573 0.47090214490890503 0 1.0 0 0.0 0 0.0 0 0.0 -0.15759897232055664 -0.06422378122806549 0.21605446934700012 0.0 0.0 1.0 0.4047679007053375 0.4791291356086731 0 1.0 0 0.0 0 0.0 0 0.0 0.07460594177246094 -0.06923449784517288 0.21605446934700012 0.0 0.0 1.0 0.5411810278892517 0.4654701352119446 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.6000452637672424 0.3568435311317444 0 1.0 0 0.0 0 0.0 0 0.0 0.07578086853027344 -0.0654071494936943 0.21605446934700012 0.0 0.0 1.0 0.5416918396949768 0.46996021270751953 0 1.0 0 0.0 0 0.0 0 0.0 -0.1571369171142578 -0.0721898302435875 0.21605446934700012 0.0 0.0 1.0 0.4043731093406677 0.4704909324645996 0 1.0 0 0.0 0 0.0 0 0.0 -0.05577445030212402 -0.07145771384239197 0.21605446934700012 0.0 0.0 0.999969482421875 0.46101683378219604 0.46464651823043823 0 1.0 0 0.0 0 0.0 0 0.0 -0.05649089813232422 -0.06639958173036575 0.21605446934700012 0.0 0.0 1.0 0.4607657194137573 0.47090214490890503 0 1.0 0 0.0 0 0.0 0 0.0 0.07329249382019043 -0.07260335236787796 0.21605446934700012 0.0 0.0 1.0 0.5405697822570801 0.46148681640625 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.6000452637672424 0.3568435311317444 0 1.0 0 0.0 0 0.0 0 0.0 0.07460594177246094 -0.06923449784517288 0.21605446934700012 0.0 0.0 1.0 0.5411810278892517 0.4654701352119446 0 1.0 0 0.0 0 0.0 0 0.0 -0.1571369171142578 -0.0721898302435875 0.21605446934700012 0.0 0.0 1.0 0.4043731093406677 0.4704909324645996 0 1.0 0 0.0 0 0.0 0 0.0 -0.054982662200927734 -0.07567181438207626 0.21605446934700012 0.0 0.0 1.0 0.46134936809539795 0.4593951106071472 0 1.0 0 0.0 0 0.0 0 0.0 -0.05577445030212402 -0.07145771384239197 0.21605446934700012 0.0 0.0 0.999969482421875 0.46101683378219604 0.46464651823043823 0 1.0 0 0.0 0 0.0 0 0.0 -0.15648984909057617 -0.07983966916799545 0.21605446934700012 0.0 0.0 1.0 0.40408778190612793 0.46211308240890503 0 1.0 0 0.0 0 0.0 0 0.0 -0.054982662200927734 -0.07567181438207626 0.21605446934700012 0.0 0.0 1.0 0.46134936809539795 0.4593951106071472 0 1.0 0 0.0 0 0.0 0 0.0 -0.1571369171142578 -0.0721898302435875 0.21605446934700012 0.0 0.0 1.0 0.4043731093406677 0.4704909324645996 0 1.0 0 0.0 0 0.0 0 0.0 0.07180380821228027 -0.075879767537117 0.21605446934700012 0.0 0.0 1.0 0.5398499369621277 0.45758336782455444 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.6000452637672424 0.3568435311317444 0 1.0 0 0.0 0 0.0 0 0.0 0.07329249382019043 -0.07260335236787796 0.21605446934700012 0.0 0.0 1.0 0.5405697822570801 0.46148681640625 0 1.0 0 0.0 0 0.0 0 0.0 -0.15648984909057617 -0.07983966916799545 0.21605446934700012 0.0 0.0 1.0 0.40408778190612793 0.46211308240890503 0 1.0 0 0.0 0 0.0 0 0.0 -0.05411553382873535 -0.07904185354709625 0.21605446934700012 0.0 0.0 1.0 0.4617636799812317 0.45516467094421387 0 1.0 0 0.0 0 0.0 0 0.0 -0.054982662200927734 -0.07567181438207626 0.21605446934700012 0.0 0.0 1.0 0.46134936809539795 0.4593951106071472 0 1.0 0 0.0 0 0.0 0 0.0 0.07014012336730957 -0.07906375080347061 0.21605446934700012 0.0 0.0 1.0 0.5390197038650513 0.45376038551330566 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.6000452637672424 0.3568435311317444 0 1.0 0 0.0 0 0.0 0 0.0 0.07180380821228027 -0.075879767537117 0.21605446934700012 0.0 0.0 1.0 0.5398499369621277 0.45758336782455444 0 1.0 0 0.0 0 0.0 0 0.0 -0.15648984909057617 -0.07983966916799545 0.21605446934700012 0.0 0.0 1.0 0.40408778190612793 0.46211308240890503 0 1.0 0 0.0 0 0.0 0 0.0 -0.053148746490478516 -0.08193881809711456 0.21605446934700012 0.0 0.0 0.999969482421875 0.4622611999511719 0.45150309801101685 0 1.0 0 0.0 0 0.0 0 0.0 -0.05411553382873535 -0.07904185354709625 0.21605446934700012 0.0 0.0 1.0 0.4617636799812317 0.45516467094421387 0 1.0 0 0.0 0 0.0 0 0.0 0.06830120086669922 -0.08215530216693878 0.21605446934700012 0.0 0.0 1.0 0.5380769968032837 0.45001834630966187 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.6000452637672424 0.3568435311317444 0 1.0 0 0.0 0 0.0 0 0.0 0.07014012336730957 -0.07906375080347061 0.21605446934700012 0.0 0.0 1.0 0.5390197038650513 0.45376038551330566 0 1.0 0 0.0 0 0.0 0 0.0 -0.15565800666809082 -0.08717329800128937 0.21605446934700012 0.0 0.0 1.0 0.40391385555267334 0.45400524139404297 0 1.0 0 0.0 0 0.0 0 0.0 -0.053148746490478516 -0.08193881809711456 0.21605446934700012 0.0 0.0 0.999969482421875 0.4622611999511719 0.45150309801101685 0 1.0 0 0.0 0 0.0 0 0.0 -0.15648984909057617 -0.07983966916799545 0.21605446934700012 0.0 0.0 1.0 0.40408778190612793 0.46211308240890503 0 1.0 0 0.0 0 0.0 0 0.0 -0.15565800666809082 -0.08717329800128937 0.21605446934700012 0.0 0.0 1.0 0.40391385555267334 0.45400524139404297 0 1.0 0 0.0 0 0.0 0 0.0 -0.052057743072509766 -0.08473362028598785 0.21605446934700012 0.0 0.0 1.0 0.4628440737724304 0.44795089960098267 0 1.0 0 0.0 0 0.0 0 0.0 -0.053148746490478516 -0.08193881809711456 0.21605446934700012 0.0 0.0 0.999969482421875 0.4622611999511719 0.45150309801101685 0 1.0 0 0.0 0 0.0 0 0.0 0.06628727912902832 -0.08515442907810211 0.21605446934700012 0.0 0.0 1.0 0.5370199084281921 0.4463580846786499 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.6000452637672424 0.3568435311317444 0 1.0 0 0.0 0 0.0 0 0.0 0.06830120086669922 -0.08215530216693878 0.21605446934700012 0.0 0.0 1.0 0.5380769968032837 0.45001834630966187 0 1.0 0 0.0 0 0.0 0 0.0 -0.15565800666809082 -0.08717329800128937 0.21605446934700012 0.0 0.0 1.0 0.40391385555267334 0.45400524139404297 0 1.0 0 0.0 0 0.0 0 0.0 -0.0508427619934082 -0.08742626756429672 0.21605446934700012 0.0 0.0 1.0 0.46351292729377747 0.44450944662094116 0 1.0 0 0.0 0 0.0 0 0.0 -0.052057743072509766 -0.08473362028598785 0.21605446934700012 0.0 0.0 1.0 0.4628440737724304 0.44795089960098267 0 1.0 0 0.0 0 0.0 0 0.0 0.06409811973571777 -0.08806112408638 0.21605446934700012 0.0 0.0 1.0 0.5358461737632751 0.44278061389923096 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.6000452637672424 0.3568435311317444 0 1.0 0 0.0 0 0.0 0 0.0 0.06628727912902832 -0.08515442907810211 0.21605446934700012 0.0 0.0 1.0 0.5370199084281921 0.4463580846786499 0 1.0 0 0.0 0 0.0 0 0.0 -0.15464115142822266 -0.09419071674346924 0.21605446934700012 0.0 0.0 0.999969482421875 0.40385371446609497 0.4461749792098999 0 1.0 0 0.0 0 0.0 0 0.0 -0.0508427619934082 -0.08742626756429672 0.21605446934700012 0.0 0.0 1.0 0.46351292729377747 0.44450944662094116 0 1.0 0 0.0 0 0.0 0 0.0 -0.15565800666809082 -0.08717329800128937 0.21605446934700012 0.0 0.0 1.0 0.40391385555267334 0.45400524139404297 0 1.0 0 0.0 0 0.0 0 0.0 -0.15464115142822266 -0.09419071674346924 0.21605446934700012 0.0 0.0 0.999969482421875 0.40385371446609497 0.4461749792098999 0 1.0 0 0.0 0 0.0 0 0.0 -0.04950380325317383 -0.09001675248146057 0.21605446934700012 0.0 0.0 1.0 0.4642685651779175 0.4411802887916565 0 1.0 0 0.0 0 0.0 0 0.0 -0.0508427619934082 -0.08742626756429672 0.21605446934700012 0.0 0.0 1.0 0.46351292729377747 0.44450944662094116 0 1.0 0 0.0 0 0.0 0 0.0 0.06173396110534668 -0.09087538719177246 0.21605446934700012 0.0 0.0 1.0 0.5345537662506104 0.43928706645965576 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.6000452637672424 0.3568435311317444 0 1.0 0 0.0 0 0.0 0 0.0 0.06409811973571777 -0.08806112408638 0.21605446934700012 0.0 0.0 1.0 0.5358461737632751 0.44278061389923096 0 1.0 0 0.0 0 0.0 0 0.0 -0.15464115142822266 -0.09419071674346924 0.21605446934700012 0.0 0.0 0.999969482421875 0.40385371446609497 0.4461749792098999 0 1.0 0 0.0 0 0.0 0 0.0 -0.04804062843322754 -0.0925050750374794 0.21605446934700012 0.0 0.0 1.0 0.4651119112968445 0.4379647970199585 0 1.0 0 0.0 0 0.0 0 0.0 -0.04950380325317383 -0.09001675248146057 0.21605446934700012 0.0 0.0 1.0 0.4642685651779175 0.4411802887916565 0 1.0 0 0.0 0 0.0 0 0.0 0.05919456481933594 -0.09359721839427948 0.21605446934700012 0.0 0.0 1.0 0.5331403017044067 0.4358789324760437 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.6000452637672424 0.3568435311317444 0 1.0 0 0.0 0 0.0 0 0.0 0.06173396110534668 -0.09087538719177246 0.21605446934700012 0.0 0.0 1.0 0.5345537662506104 0.43928706645965576 0 1.0 0 0.0 0 0.0 0 0.0 -0.15464115142822266 -0.09419071674346924 0.21605446934700012 0.0 0.0 0.999969482421875 0.40385371446609497 0.4461749792098999 0 1.0 0 0.0 0 0.0 0 0.0 -0.04645347595214844 -0.09489124268293381 0.21605446934700012 0.0 0.0 1.0 0.4660434424877167 0.43486452102661133 0 1.0 0 0.0 0 0.0 0 0.0 -0.04804062843322754 -0.0925050750374794 0.21605446934700012 0.0 0.0 1.0 0.4651119112968445 0.4379647970199585 0 1.0 0 0.0 0 0.0 0 0.0 0.05647993087768555 -0.09622661769390106 0.21605446934700012 0.0 0.0 0.999969482421875 0.5316035151481628 0.43255800008773804 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.6000452637672424 0.3568435311317444 0 1.0 0 0.0 0 0.0 0 0.0 0.05919456481933594 -0.09359721839427948 0.21605446934700012 0.0 0.0 1.0 0.5331403017044067 0.4358789324760437 0 1.0 0 0.0 0 0.0 0 0.0 -0.15343952178955078 -0.10089192539453506 0.21605446934700012 0.0 0.0 1.0 0.4039095640182495 0.43862825632095337 0 1.0 0 0.0 0 0.0 0 0.0 -0.04645347595214844 -0.09489124268293381 0.21605446934700012 0.0 0.0 1.0 0.4660434424877167 0.43486452102661133 0 1.0 0 0.0 0 0.0 0 0.0 -0.15464115142822266 -0.09419071674346924 0.21605446934700012 0.0 0.0 0.999969482421875 0.40385371446609497 0.4461749792098999 0 1.0 0 0.0 0 0.0 0 0.0 -0.15343952178955078 -0.10089192539453506 0.21605446934700012 0.0 0.0 1.0 0.4039095640182495 0.43862825632095337 0 1.0 0 0.0 0 0.0 0 0.0 -0.04474234580993652 -0.0971752479672432 0.21605446934700012 0.0 0.0 1.0 0.46706393361091614 0.4318809509277344 0 1.0 0 0.0 0 0.0 0 0.0 -0.04645347595214844 -0.09489124268293381 0.21605446934700012 0.0 0.0 1.0 0.4660434424877167 0.43486452102661133 0 1.0 0 0.0 0 0.0 0 0.0 0.05359029769897461 -0.0987635925412178 0.21605446934700012 0.0 0.0 1.0 0.5299412608146667 0.42932629585266113 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.6000452637672424 0.3568435311317444 0 1.0 0 0.0 0 0.0 0 0.0 0.05647993087768555 -0.09622661769390106 0.21605446934700012 0.0 0.0 0.999969482421875 0.5316035151481628 0.43255800008773804 0 1.0 0 0.0 0 0.0 0 0.0 -0.15343952178955078 -0.10089192539453506 0.21605446934700012 0.0 0.0 1.0 0.4039095640182495 0.43862825632095337 0 1.0 0 0.0 0 0.0 0 0.0 -0.0429072380065918 -0.09935709089040756 0.21605446934700012 0.0 0.0 1.0 0.46817395091056824 0.4290156364440918 0 1.0 0 0.0 0 0.0 0 0.0 -0.04474234580993652 -0.0971752479672432 0.21605446934700012 0.0 0.0 1.0 0.46706393361091614 0.4318809509277344 0 1.0 0 0.0 0 0.0 0 0.0 0.05052542686462402 -0.10120813548564911 0.21605446934700012 0.0 0.0 1.0 0.5281510353088379 0.42618632316589355 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.6000452637672424 0.3568435311317444 0 1.0 0 0.0 0 0.0 0 0.0 0.05359029769897461 -0.0987635925412178 0.21605446934700012 0.0 0.0 1.0 0.5299412608146667 0.42932629585266113 0 1.0 0 0.0 0 0.0 0 0.0 -0.15343952178955078 -0.10089192539453506 0.21605446934700012 0.0 0.0 1.0 0.4039095640182495 0.43862825632095337 0 1.0 0 0.0 0 0.0 0 0.0 -0.040947914123535156 -0.10143677890300751 0.21605446934700012 0.0 0.0 0.999969482421875 0.4693742096424103 0.42627018690109253 0 1.0 0 0.0 0 0.0 0 0.0 -0.0429072380065918 -0.09935709089040756 0.21605446934700012 0.0 0.0 1.0 0.46817395091056824 0.4290156364440918 0 1.0 0 0.0 0 0.0 0 0.0 -0.1520531177520752 -0.10727692395448685 0.21605446934700012 0.0 0.0 1.0 0.4040839374065399 0.4313696026802063 0 1.0 0 0.0 0 0.0 0 0.0 -0.040947914123535156 -0.10143677890300751 0.21605446934700012 0.0 0.0 0.999969482421875 0.4693742096424103 0.42627018690109253 0 1.0 0 0.0 0 0.0 0 0.0 -0.15343952178955078 -0.10089192539453506 0.21605446934700012 0.0 0.0 1.0 0.4039095640182495 0.43862825632095337 0 1.0 0 0.0 0 0.0 0 0.0 0.04728555679321289 -0.10356024652719498 0.21605446934700012 0.0 0.0 0.999969482421875 0.5262308716773987 0.42314088344573975 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 0.21605446934700012 0.0 0.0 1.0 0.5518236756324768 0.39705806970596313 0 1.0 0 0.0 0 0.0 0 0.0 0.05052542686462402 -0.10120813548564911 0.21605446934700012 0.0 0.0 1.0 0.5281510353088379 0.42618632316589355 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 0.21605446934700012 0.0 0.0 1.0 0.5518236756324768 0.39705806970596313 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.6000452637672424 0.3568435311317444 0 1.0 0 0.0 0 0.0 0 0.0 0.05052542686462402 -0.10120813548564911 0.21605446934700012 0.0 0.0 1.0 0.5281510353088379 0.42618632316589355 0 1.0 0 0.0 0 0.0 0 0.0 -0.1520531177520752 -0.10727692395448685 0.21605446934700012 0.0 0.0 1.0 0.4040839374065399 0.4313696026802063 0 1.0 0 0.0 0 0.0 0 0.0 -0.0388646125793457 -0.10341430455446243 0.21605446934700012 0.0 0.0 1.0 0.4706650972366333 0.42364639043807983 0 1.0 0 0.0 0 0.0 0 0.0 -0.040947914123535156 -0.10143677890300751 0.21605446934700012 0.0 0.0 0.999969482421875 0.4693742096424103 0.42627018690109253 0 1.0 0 0.0 0 0.0 0 0.0 -0.1520531177520752 -0.10727692395448685 0.21605446934700012 0.0 0.0 1.0 0.4040839374065399 0.4313696026802063 0 1.0 0 0.0 0 0.0 0 0.0 -0.03665733337402344 -0.10528966784477234 0.21605446934700012 0.0 0.0 1.0 0.47204694151878357 0.421146035194397 0 1.0 0 0.0 0 0.0 0 0.0 -0.0388646125793457 -0.10341430455446243 0.21605446934700012 0.0 0.0 1.0 0.4706650972366333 0.42364639043807983 0 1.0 0 0.0 0 0.0 0 0.0 0.043921709060668945 -0.1057700365781784 0.21605446934700012 0.0 0.0 1.0 0.5242090225219727 0.42025721073150635 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 0.21605446934700012 0.0 0.0 1.0 0.5518236756324768 0.39705806970596313 0 1.0 0 0.0 0 0.0 0 0.0 0.04728555679321289 -0.10356024652719498 0.21605446934700012 0.0 0.0 0.999969482421875 0.5262308716773987 0.42314088344573975 0 1.0 0 0.0 0 0.0 0 0.0 -0.1520531177520752 -0.10727692395448685 0.21605446934700012 0.0 0.0 1.0 0.4040839374065399 0.4313696026802063 0 1.0 0 0.0 0 0.0 0 0.0 -0.03432583808898926 -0.10706286877393723 0.21605446934700012 0.0 0.0 0.999969482421875 0.47352027893066406 0.418770968914032 0 1.0 0 0.0 0 0.0 0 0.0 -0.03665733337402344 -0.10528966784477234 0.21605446934700012 0.0 0.0 1.0 0.47204694151878357 0.421146035194397 0 1.0 0 0.0 0 0.0 0 0.0 0.04048466682434082 -0.10778769105672836 0.21605446934700012 0.0 0.0 1.0 0.5221152901649475 0.4176033139228821 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 0.21605446934700012 0.0 0.0 1.0 0.5518236756324768 0.39705806970596313 0 1.0 0 0.0 0 0.0 0 0.0 0.043921709060668945 -0.1057700365781784 0.21605446934700012 0.0 0.0 1.0 0.5242090225219727 0.42025721073150635 0 1.0 0 0.0 0 0.0 0 0.0 -0.1520531177520752 -0.10727692395448685 0.21605446934700012 0.0 0.0 1.0 0.4040839374065399 0.4313696026802063 0 1.0 0 0.0 0 0.0 0 0.0 -0.03187894821166992 -0.10871323943138123 0.21605446934700012 0.0 0.0 1.0 0.4750799536705017 0.4165498614311218 0 1.0 0 0.0 0 0.0 0 0.0 -0.03432583808898926 -0.10706286877393723 0.21605446934700012 0.0 0.0 0.999969482421875 0.47352027893066406 0.418770968914032 0 1.0 0 0.0 0 0.0 0 0.0 -0.1504817008972168 -0.11334571242332458 0.21605446934700012 0.0 0.0 1.0 0.4043794870376587 0.424402117729187 0 1.0 0 0.0 0 0.0 0 0.0 -0.03187894821166992 -0.10871323943138123 0.21605446934700012 0.0 0.0 1.0 0.4750799536705017 0.4165498614311218 0 1.0 0 0.0 0 0.0 0 0.0 -0.1520531177520752 -0.10727692395448685 0.21605446934700012 0.0 0.0 1.0 0.4040839374065399 0.4313696026802063 0 1.0 0 0.0 0 0.0 0 0.0 0.03697466850280762 -0.10961319506168365 0.21605446934700012 0.0 0.0 1.0 0.5199500918388367 0.4151836633682251 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 0.21605446934700012 0.0 0.0 1.0 0.5518236756324768 0.39705806970596313 0 1.0 0 0.0 0 0.0 0 0.0 0.04048466682434082 -0.10778769105672836 0.21605446934700012 0.0 0.0 1.0 0.5221152901649475 0.4176033139228821 0 1.0 0 0.0 0 0.0 0 0.0 -0.1504817008972168 -0.11334571242332458 0.21605446934700012 0.0 0.0 1.0 0.4043794870376587 0.424402117729187 0 1.0 0 0.0 0 0.0 0 0.0 -0.029325008392333984 -0.11022009700536728 0.21605446934700012 0.0 0.0 1.0 0.4767209589481354 0.4145115613937378 0 1.0 0 0.0 0 0.0 0 0.0 -0.03187894821166992 -0.10871323943138123 0.21605446934700012 0.0 0.0 1.0 0.4750799536705017 0.4165498614311218 0 1.0 0 0.0 0 0.0 0 0.0 0.033391714096069336 -0.11124654114246368 0.21605446934700012 0.0 0.0 1.0 0.5177140831947327 0.41300249099731445 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 0.21605446934700012 0.0 0.0 1.0 0.5518236756324768 0.39705806970596313 0 1.0 0 0.0 0 0.0 0 0.0 0.03697466850280762 -0.10961319506168365 0.21605446934700012 0.0 0.0 1.0 0.5199500918388367 0.4151836633682251 0 1.0 0 0.0 0 0.0 0 0.0 -0.1504817008972168 -0.11334571242332458 0.21605446934700012 0.0 0.0 1.0 0.4043794870376587 0.424402117729187 0 1.0 0 0.0 0 0.0 0 0.0 -0.026664018630981445 -0.11158344894647598 0.21605446934700012 0.0 0.0 1.0 0.47844284772872925 0.4126579165458679 0 1.0 0 0.0 0 0.0 0 0.0 -0.029325008392333984 -0.11022009700536728 0.21605446934700012 0.0 0.0 1.0 0.4767209589481354 0.4145115613937378 0 1.0 0 0.0 0 0.0 0 0.0 0.029735803604125977 -0.11268772929906845 0.21605446934700012 0.0 0.0 1.0 0.5154080986976624 0.4110640287399292 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 0.21605446934700012 0.0 0.0 1.0 0.5518236756324768 0.39705806970596313 0 1.0 0 0.0 0 0.0 0 0.0 0.033391714096069336 -0.11124654114246368 0.21605446934700012 0.0 0.0 1.0 0.5177140831947327 0.41300249099731445 0 1.0 0 0.0 0 0.0 0 0.0 -0.1504817008972168 -0.11334571242332458 0.21605446934700012 0.0 0.0 1.0 0.4043794870376587 0.424402117729187 0 1.0 0 0.0 0 0.0 0 0.0 -0.023895978927612305 -0.11280328780412674 0.21605446934700012 0.0 0.0 0.999969482421875 0.48024505376815796 0.4109910726547241 0 1.0 0 0.0 0 0.0 0 0.0 -0.026664018630981445 -0.11158344894647598 0.21605446934700012 0.0 0.0 1.0 0.47844284772872925 0.4126579165458679 0 1.0 0 0.0 0 0.0 0 0.0 0.02600693702697754 -0.11393675953149796 0.21605446934700012 0.0 0.0 1.0 0.5130330324172974 0.40937238931655884 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 0.21605446934700012 0.0 0.0 1.0 0.5518236756324768 0.39705806970596313 0 1.0 0 0.0 0 0.0 0 0.0 0.029735803604125977 -0.11268772929906845 0.21605446934700012 0.0 0.0 1.0 0.5154080986976624 0.4110640287399292 0 1.0 0 0.0 0 0.0 0 0.0 -0.1504817008972168 -0.11334571242332458 0.21605446934700012 0.0 0.0 1.0 0.4043794870376587 0.424402117729187 0 1.0 0 0.0 0 0.0 0 0.0 -0.021020889282226562 -0.11387961357831955 0.21605446934700012 0.0 0.0 0.999969482421875 0.4821268618106842 0.409512996673584 0 1.0 0 0.0 0 0.0 0 0.0 -0.023895978927612305 -0.11280328780412674 0.21605446934700012 0.0 0.0 0.999969482421875 0.48024505376815796 0.4109910726547241 0 1.0 0 0.0 0 0.0 0 0.0 -0.1487255096435547 -0.11909829080104828 0.21605446934700012 0.0 0.0 1.0 0.4047989249229431 0.4177280068397522 0 1.0 0 0.0 0 0.0 0 0.0 -0.021020889282226562 -0.11387961357831955 0.21605446934700012 0.0 0.0 0.999969482421875 0.4821268618106842 0.409512996673584 0 1.0 0 0.0 0 0.0 0 0.0 -0.1504817008972168 -0.11334571242332458 0.21605446934700012 0.0 0.0 1.0 0.4043794870376587 0.424402117729187 0 1.0 0 0.0 0 0.0 0 0.0 -0.1487255096435547 -0.11909829080104828 0.21605446934700012 0.0 0.0 1.0 0.4047989249229431 0.4177280068397522 0 1.0 0 0.0 0 0.0 0 0.0 -0.01803874969482422 -0.11481243371963501 0.21605446934700012 0.0 0.0 1.0 0.48408734798431396 0.40822577476501465 0 1.0 0 0.0 0 0.0 0 0.0 -0.021020889282226562 -0.11387961357831955 0.21605446934700012 0.0 0.0 0.999969482421875 0.4821268618106842 0.409512996673584 0 1.0 0 0.0 0 0.0 0 0.0 0.022205114364624023 -0.1149936318397522 0.21605446934700012 0.0 0.0 0.999969482421875 0.5105903148651123 0.40793150663375854 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 0.21605446934700012 0.0 0.0 1.0 0.5518236756324768 0.39705806970596313 0 1.0 0 0.0 0 0.0 0 0.0 0.02600693702697754 -0.11393675953149796 0.21605446934700012 0.0 0.0 1.0 0.5130330324172974 0.40937238931655884 0 1.0 0 0.0 0 0.0 0 0.0 -0.1487255096435547 -0.11909829080104828 0.21605446934700012 0.0 0.0 1.0 0.4047989249229431 0.4177280068397522 0 1.0 0 0.0 0 0.0 0 0.0 -0.014949560165405273 -0.11560174077749252 0.21605446934700012 0.0 0.0 1.0 0.48612532019615173 0.40713149309158325 0 1.0 0 0.0 0 0.0 0 0.0 -0.01803874969482422 -0.11481243371963501 0.21605446934700012 0.0 0.0 1.0 0.48408734798431396 0.40822577476501465 0 1.0 0 0.0 0 0.0 0 0.0 0.01833033561706543 -0.11585834622383118 0.21605446934700012 0.0 0.0 0.999969482421875 0.5080812573432922 0.40674519538879395 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 0.21605446934700012 0.0 0.0 1.0 0.5518236756324768 0.39705806970596313 0 1.0 0 0.0 0 0.0 0 0.0 0.022205114364624023 -0.1149936318397522 0.21605446934700012 0.0 0.0 0.999969482421875 0.5105903148651123 0.40793150663375854 0 1.0 0 0.0 0 0.0 0 0.0 -0.1487255096435547 -0.11909829080104828 0.21605446934700012 0.0 0.0 1.0 0.4047989249229431 0.4177280068397522 0 1.0 0 0.0 0 0.0 0 0.0 -0.011753320693969727 -0.11624753475189209 0.21605446934700012 0.0 0.0 1.0 0.48823946714401245 0.4062318801879883 0 1.0 0 0.0 0 0.0 0 0.0 -0.014949560165405273 -0.11560174077749252 0.21605446934700012 0.0 0.0 1.0 0.48612532019615173 0.40713149309158325 0 1.0 0 0.0 0 0.0 0 0.0 0.014382600784301758 -0.1165309026837349 0.21605446934700012 0.0 3.0518509447574615e-05 1.0 0.50550776720047 0.4058172106742859 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 0.21605446934700012 0.0 0.0 1.0 0.5518236756324768 0.39705806970596313 0 1.0 0 0.0 0 0.0 0 0.0 0.01833033561706543 -0.11585834622383118 0.21605446934700012 0.0 0.0 0.999969482421875 0.5080812573432922 0.40674519538879395 0 1.0 0 0.0 0 0.0 0 0.0 -0.1487255096435547 -0.11909829080104828 0.21605446934700012 0.0 0.0 1.0 0.4047989249229431 0.4177280068397522 0 1.0 0 0.0 0 0.0 0 0.0 -0.008450031280517578 -0.1167498230934143 0.21605446934700012 0.0 0.0 1.0 0.4904281795024872 0.4055290222167969 0 1.0 0 0.0 0 0.0 0 0.0 -0.011753320693969727 -0.11624753475189209 0.21605446934700012 0.0 0.0 1.0 0.48823946714401245 0.4062318801879883 0 1.0 0 0.0 0 0.0 0 0.0 0.010361909866333008 -0.11701130121946335 0.21605446934700012 0.0 0.0 1.0 0.5028718709945679 0.4051510691642761 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 0.21605446934700012 0.0 0.0 1.0 0.5518236756324768 0.39705806970596313 0 1.0 0 0.0 0 0.0 0 0.0 0.014382600784301758 -0.1165309026837349 0.21605446934700012 0.0 3.0518509447574615e-05 1.0 0.50550776720047 0.4058172106742859 0 1.0 0 0.0 0 0.0 0 0.0 -0.1487255096435547 -0.11909829080104828 0.21605446934700012 0.0 0.0 1.0 0.4047989249229431 0.4177280068397522 0 1.0 0 0.0 0 0.0 0 0.0 -0.00503993034362793 -0.11710859835147858 0.21605446934700012 0.0 6.103701889514923e-05 1.0 0.4926895201206207 0.40502452850341797 0 1.0 0 0.0 0 0.0 0 0.0 -0.008450031280517578 -0.1167498230934143 0.21605446934700012 0.0 0.0 1.0 0.4904281795024872 0.4055290222167969 0 1.0 0 0.0 0 0.0 0 0.0 0.00626826286315918 -0.11729954183101654 0.21605446934700012 0.0 0.0 1.0 0.5001758337020874 0.4047499895095825 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 0.21605446934700012 0.0 0.0 1.0 0.5518236756324768 0.39705806970596313 0 1.0 0 0.0 0 0.0 0 0.0 0.010361909866333008 -0.11701130121946335 0.21605446934700012 0.0 0.0 1.0 0.5028718709945679 0.4051510691642761 0 1.0 0 0.0 0 0.0 0 0.0 -0.1487255096435547 -0.11909829080104828 0.21605446934700012 0.0 0.0 1.0 0.4047989249229431 0.4177280068397522 0 1.0 0 0.0 0 0.0 0 0.0 -0.0015227794647216797 -0.1173238605260849 0.21605446934700012 0.0 -0.0001831110566854477 1.0 0.4950215816497803 0.4047200679779053 0 1.0 0 0.0 0 0.0 0 0.0 -0.00503993034362793 -0.11710859835147858 0.21605446934700012 0.0 6.103701889514923e-05 1.0 0.4926895201206207 0.40502452850341797 0 1.0 0 0.0 0 0.0 0 0.0 0.0021016597747802734 -0.11739562451839447 0.21605446934700012 0.0 0.0 1.0 0.4974221885204315 0.4046170711517334 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 0.21605446934700012 0.0 0.0 1.0 0.5518236756324768 0.39705806970596313 0 1.0 0 0.0 0 0.0 0 0.0 0.00626826286315918 -0.11729954183101654 0.21605446934700012 0.0 0.0 1.0 0.5001758337020874 0.4047499895095825 0 1.0 0 0.0 0 0.0 0 0.0 -0.1487255096435547 -0.11909829080104828 0.21605446934700012 0.0 0.0 1.0 0.4047989249229431 0.4177280068397522 0 1.0 0 0.0 0 0.0 0 0.0 0.0021016597747802734 -0.11739562451839447 0.21605446934700012 0.0 0.0 1.0 0.4974221885204315 0.4046170711517334 0 1.0 0 0.0 0 0.0 0 0.0 -0.0015227794647216797 -0.1173238605260849 0.21605446934700012 0.0 -0.0001831110566854477 1.0 0.4950215816497803 0.4047200679779053 0 1.0 0 0.0 0 0.0 0 0.0 -0.1487255096435547 -0.11909829080104828 0.21605446934700012 0.0 0.0 1.0 0.4047989249229431 0.4177280068397522 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 0.21605446934700012 0.0 0.0 1.0 0.5518236756324768 0.39705806970596313 0 1.0 0 0.0 0 0.0 0 0.0 0.0021016597747802734 -0.11739562451839447 0.21605446934700012 0.0 0.0 1.0 0.4974221885204315 0.4046170711517334 0 1.0 0 0.0 0 0.0 0 0.0 -0.14678454399108887 -0.12453465908765793 0.21605446934700012 0.0 0.0 1.0 0.40534508228302 0.41134870052337646 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 0.21605446934700012 0.0 0.0 1.0 0.5518236756324768 0.39705806970596313 0 1.0 0 0.0 0 0.0 0 0.0 -0.1487255096435547 -0.11909829080104828 0.21605446934700012 0.0 0.0 1.0 0.4047989249229431 0.4177280068397522 0 1.0 0 0.0 0 0.0 0 0.0 -0.14465856552124023 -0.12965482473373413 0.21605446934700012 0.0 0.0 1.0 0.40602123737335205 0.40526485443115234 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 0.21605446934700012 0.0 0.0 1.0 0.5518236756324768 0.39705806970596313 0 1.0 0 0.0 0 0.0 0 0.0 -0.14678454399108887 -0.12453465908765793 0.21605446934700012 0.0 0.0 1.0 0.40534508228302 0.41134870052337646 0 1.0 0 0.0 0 0.0 0 0.0 -0.14465856552124023 -0.12965482473373413 0.21605446934700012 0.0 0.0 1.0 0.40602123737335205 0.40526485443115234 0 1.0 0 0.0 0 0.0 0 0.0 0.08549213409423828 -0.13312825560569763 0.21605446934700012 0.0 0.0 1.0 0.5500854253768921 0.39095473289489746 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 0.21605446934700012 0.0 0.0 1.0 0.5518236756324768 0.39705806970596313 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.5546995401382446 0.3343638777732849 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.6000452637672424 0.3568435311317444 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 0.21605446934700012 0.0 0.0 1.0 0.5518236756324768 0.39705806970596313 0 1.0 0 0.0 0 0.0 0 0.0 -0.14232611656188965 -0.13452443480491638 0.21605446934700012 0.0 0.0 1.0 0.40683630108833313 0.3993995785713196 0 1.0 0 0.0 0 0.0 0 0.0 0.08549213409423828 -0.13312825560569763 0.21605446934700012 0.0 0.0 1.0 0.5500854253768921 0.39095473289489746 0 1.0 0 0.0 0 0.0 0 0.0 -0.14465856552124023 -0.12965482473373413 0.21605446934700012 0.0 0.0 1.0 0.40602123737335205 0.40526485443115234 0 1.0 0 0.0 0 0.0 0 0.0 -0.14232611656188965 -0.13452443480491638 0.21605446934700012 0.0 0.0 1.0 0.40683630108833313 0.3993995785713196 0 1.0 0 0.0 0 0.0 0 0.0 0.08183979988098145 -0.13782760500907898 0.21605446934700012 0.0 0.0 1.0 0.548201322555542 0.385007381439209 0 1.0 0 0.0 0 0.0 0 0.0 0.08549213409423828 -0.13312825560569763 0.21605446934700012 0.0 0.0 1.0 0.5500854253768921 0.39095473289489746 0 1.0 0 0.0 0 0.0 0 0.0 -0.13976478576660156 -0.13920921087265015 0.21605446934700012 0.0 0.0 1.0 0.4078006148338318 0.3936748504638672 0 1.0 0 0.0 0 0.0 0 0.0 0.08183979988098145 -0.13782760500907898 0.21605446934700012 0.0 0.0 1.0 0.548201322555542 0.385007381439209 0 1.0 0 0.0 0 0.0 0 0.0 -0.14232611656188965 -0.13452443480491638 0.21605446934700012 0.0 0.0 1.0 0.40683630108833313 0.3993995785713196 0 1.0 0 0.0 0 0.0 0 0.0 -0.13976478576660156 -0.13920921087265015 0.21605446934700012 0.0 0.0 1.0 0.4078006148338318 0.3936748504638672 0 1.0 0 0.0 0 0.0 0 0.0 0.07801008224487305 -0.14235183596611023 0.21605446934700012 0.0 0.0 1.0 0.5461670756340027 0.3792210817337036 0 1.0 0 0.0 0 0.0 0 0.0 0.08183979988098145 -0.13782760500907898 0.21605446934700012 0.0 0.0 1.0 0.548201322555542 0.385007381439209 0 1.0 0 0.0 0 0.0 0 0.0 -0.13697481155395508 -0.14370910823345184 0.21605446934700012 0.0 0.0 1.0 0.40891844034194946 0.38809001445770264 0 1.0 0 0.0 0 0.0 0 0.0 0.07801008224487305 -0.14235183596611023 0.21605446934700012 0.0 0.0 1.0 0.5461670756340027 0.3792210817337036 0 1.0 0 0.0 0 0.0 0 0.0 -0.13976478576660156 -0.13920921087265015 0.21605446934700012 0.0 0.0 1.0 0.4078006148338318 0.3936748504638672 0 1.0 0 0.0 0 0.0 0 0.0 -0.13697481155395508 -0.14370910823345184 0.21605446934700012 0.0 0.0 1.0 0.40891844034194946 0.38809001445770264 0 1.0 0 0.0 0 0.0 0 0.0 0.07400274276733398 -0.1467009335756302 0.21605446934700012 0.0 0.0 1.0 0.5439779758453369 0.373601496219635 0 1.0 0 0.0 0 0.0 0 0.0 0.07801008224487305 -0.14235183596611023 0.21605446934700012 0.0 0.0 1.0 0.5461670756340027 0.3792210817337036 0 1.0 0 0.0 0 0.0 0 0.0 -0.1339561939239502 -0.14802414178848267 0.21605446934700012 0.0 0.0 1.0 0.410194456577301 0.38264477252960205 0 1.0 0 0.0 0 0.0 0 0.0 0.07400274276733398 -0.1467009335756302 0.21605446934700012 0.0 0.0 1.0 0.5439779758453369 0.373601496219635 0 1.0 0 0.0 0 0.0 0 0.0 -0.13697481155395508 -0.14370910823345184 0.21605446934700012 0.0 0.0 1.0 0.40891844034194946 0.38809001445770264 0 1.0 0 0.0 0 0.0 0 0.0 -0.1339561939239502 -0.14802414178848267 0.21605446934700012 0.0 0.0 1.0 0.410194456577301 0.38264477252960205 0 1.0 0 0.0 0 0.0 0 0.0 0.06981778144836426 -0.15087489783763885 0.21605446934700012 0.0 0.0 1.0 0.5416295528411865 0.3681548833847046 0 1.0 0 0.0 0 0.0 0 0.0 0.07400274276733398 -0.1467009335756302 0.21605446934700012 0.0 0.0 1.0 0.5439779758453369 0.373601496219635 0 1.0 0 0.0 0 0.0 0 0.0 -0.13070893287658691 -0.1521543264389038 0.21605446934700012 0.0 0.0 1.0 0.41163375973701477 0.37733936309814453 0 1.0 0 0.0 0 0.0 0 0.0 0.06981778144836426 -0.15087489783763885 0.21605446934700012 0.0 0.0 1.0 0.5416295528411865 0.3681548833847046 0 1.0 0 0.0 0 0.0 0 0.0 -0.1339561939239502 -0.14802414178848267 0.21605446934700012 0.0 0.0 1.0 0.410194456577301 0.38264477252960205 0 1.0 0 0.0 0 0.0 0 0.0 -0.13070893287658691 -0.1521543264389038 0.21605446934700012 0.0 0.0 1.0 0.41163375973701477 0.37733936309814453 0 1.0 0 0.0 0 0.0 0 0.0 0.06545519828796387 -0.15487372875213623 0.21605446934700012 0.0 0.0 1.0 0.5391175150871277 0.3628878593444824 0 1.0 0 0.0 0 0.0 0 0.0 0.06981778144836426 -0.15087489783763885 0.21605446934700012 0.0 0.0 1.0 0.5416295528411865 0.3681548833847046 0 1.0 0 0.0 0 0.0 0 0.0 -0.12723302841186523 -0.15609964728355408 0.21605446934700012 0.0 0.0 0.999969482421875 0.4132416844367981 0.3721746802330017 0 1.0 0 0.0 0 0.0 0 0.0 0.06545519828796387 -0.15487372875213623 0.21605446934700012 0.0 0.0 1.0 0.5391175150871277 0.3628878593444824 0 1.0 0 0.0 0 0.0 0 0.0 -0.13070893287658691 -0.1521543264389038 0.21605446934700012 0.0 0.0 1.0 0.41163375973701477 0.37733936309814453 0 1.0 0 0.0 0 0.0 0 0.0 -0.12723302841186523 -0.15609964728355408 0.21605446934700012 0.0 0.0 0.999969482421875 0.4132416844367981 0.3721746802330017 0 1.0 0 0.0 0 0.0 0 0.0 0.060915231704711914 -0.15869742631912231 0.21605446934700012 0.0 0.0 1.0 0.5364377498626709 0.35780781507492065 0 1.0 0 0.0 0 0.0 0 0.0 0.06545519828796387 -0.15487372875213623 0.21605446934700012 0.0 0.0 1.0 0.5391175150871277 0.3628878593444824 0 1.0 0 0.0 0 0.0 0 0.0 -0.12352848052978516 -0.15986010432243347 0.21605446934700012 0.0 0.0 1.0 0.41502389311790466 0.36715227365493774 0 1.0 0 0.0 0 0.0 0 0.0 0.060915231704711914 -0.15869742631912231 0.21605446934700012 0.0 0.0 1.0 0.5364377498626709 0.35780781507492065 0 1.0 0 0.0 0 0.0 0 0.0 -0.12723302841186523 -0.15609964728355408 0.21605446934700012 0.0 0.0 0.999969482421875 0.4132416844367981 0.3721746802330017 0 1.0 0 0.0 0 0.0 0 0.0 -0.12352848052978516 -0.15986010432243347 0.21605446934700012 0.0 0.0 1.0 0.41502389311790466 0.36715227365493774 0 1.0 0 0.0 0 0.0 0 0.0 0.0561976432800293 -0.1623460054397583 0.21605446934700012 0.0 0.0 1.0 0.5335861444473267 0.3529229164123535 0 1.0 0 0.0 0 0.0 0 0.0 0.060915231704711914 -0.15869742631912231 0.21605446934700012 0.0 0.0 1.0 0.5364377498626709 0.35780781507492065 0 1.0 0 0.0 0 0.0 0 0.0 -0.11959528923034668 -0.16343571245670319 0.21605446934700012 0.0 0.0 0.999969482421875 0.4169861674308777 0.36227452754974365 0 1.0 0 0.0 0 0.0 0 0.0 0.0561976432800293 -0.1623460054397583 0.21605446934700012 0.0 0.0 1.0 0.5335861444473267 0.3529229164123535 0 1.0 0 0.0 0 0.0 0 0.0 -0.12352848052978516 -0.15986010432243347 0.21605446934700012 0.0 0.0 1.0 0.41502389311790466 0.36715227365493774 0 1.0 0 0.0 0 0.0 0 0.0 -0.11959528923034668 -0.16343571245670319 0.21605446934700012 0.0 0.0 0.999969482421875 0.4169861674308777 0.36227452754974365 0 1.0 0 0.0 0 0.0 0 0.0 0.051302433013916016 -0.1658194363117218 0.21605446934700012 0.0 0.0 1.0 0.5305591821670532 0.3482418656349182 0 1.0 0 0.0 0 0.0 0 0.0 0.0561976432800293 -0.1623460054397583 0.21605446934700012 0.0 0.0 1.0 0.5335861444473267 0.3529229164123535 0 1.0 0 0.0 0 0.0 0 0.0 -0.1154334545135498 -0.16682644188404083 0.21605446934700012 0.0 0.0 1.0 0.41913461685180664 0.35754483938217163 0 1.0 0 0.0 0 0.0 0 0.0 0.051302433013916016 -0.1658194363117218 0.21605446934700012 0.0 0.0 1.0 0.5305591821670532 0.3482418656349182 0 1.0 0 0.0 0 0.0 0 0.0 -0.11959528923034668 -0.16343571245670319 0.21605446934700012 0.0 0.0 0.999969482421875 0.4169861674308777 0.36227452754974365 0 1.0 0 0.0 0 0.0 0 0.0 -0.1154334545135498 -0.16682644188404083 0.21605446934700012 0.0 0.0 1.0 0.41913461685180664 0.35754483938217163 0 1.0 0 0.0 0 0.0 0 0.0 0.04622983932495117 -0.1691177487373352 0.21605446934700012 0.0 0.0 1.0 0.5273538827896118 0.3437744975090027 0 1.0 0 0.0 0 0.0 0 0.0 0.051302433013916016 -0.1658194363117218 0.21605446934700012 0.0 0.0 1.0 0.5305591821670532 0.3482418656349182 0 1.0 0 0.0 0 0.0 0 0.0 -0.11104297637939453 -0.1700323224067688 0.21605446934700012 0.0 0.0 1.0 0.4214754104614258 0.35296761989593506 0 1.0 0 0.0 0 0.0 0 0.0 0.04622983932495117 -0.1691177487373352 0.21605446934700012 0.0 0.0 1.0 0.5273538827896118 0.3437744975090027 0 1.0 0 0.0 0 0.0 0 0.0 -0.1154334545135498 -0.16682644188404083 0.21605446934700012 0.0 0.0 1.0 0.41913461685180664 0.35754483938217163 0 1.0 0 0.0 0 0.0 0 0.0 -0.11104297637939453 -0.1700323224067688 0.21605446934700012 0.0 0.0 1.0 0.4214754104614258 0.35296761989593506 0 1.0 0 0.0 0 0.0 0 0.0 0.040979623794555664 -0.17224091291427612 0.21605443954467773 0.0 0.0 1.0 0.5239675045013428 0.3395310640335083 0 1.0 0 0.0 0 0.0 0 0.0 0.04622983932495117 -0.1691177487373352 0.21605446934700012 0.0 0.0 1.0 0.5273538827896118 0.3437744975090027 0 1.0 0 0.0 0 0.0 0 0.0 -0.10642385482788086 -0.1730533391237259 0.21605445444583893 0.0 0.0 1.0 0.4240148663520813 0.3485482335090637 0 1.0 0 0.0 0 0.0 0 0.0 0.040979623794555664 -0.17224091291427612 0.21605443954467773 0.0 0.0 1.0 0.5239675045013428 0.3395310640335083 0 1.0 0 0.0 0 0.0 0 0.0 -0.11104297637939453 -0.1700323224067688 0.21605446934700012 0.0 0.0 1.0 0.4214754104614258 0.35296761989593506 0 1.0 0 0.0 0 0.0 0 0.0 -0.10642385482788086 -0.1730533391237259 0.21605445444583893 0.0 0.0 1.0 0.4240148663520813 0.3485482335090637 0 1.0 0 0.0 0 0.0 0 0.0 0.03555178642272949 -0.17518897354602814 0.21605445444583893 0.0 0.0 1.0 0.5203983187675476 0.33552277088165283 0 1.0 0 0.0 0 0.0 0 0.0 0.040979623794555664 -0.17224091291427612 0.21605443954467773 0.0 0.0 1.0 0.5239675045013428 0.3395310640335083 0 1.0 0 0.0 0 0.0 0 0.0 -0.10157608985900879 -0.1758894920349121 0.21605445444583893 0.0 0.0 1.0 0.42675918340682983 0.34429383277893066 0 1.0 0 0.0 0 0.0 0 0.0 0.03555178642272949 -0.17518897354602814 0.21605445444583893 0.0 0.0 1.0 0.5203983187675476 0.33552277088165283 0 1.0 0 0.0 0 0.0 0 0.0 -0.10642385482788086 -0.1730533391237259 0.21605445444583893 0.0 0.0 1.0 0.4240148663520813 0.3485482335090637 0 1.0 0 0.0 0 0.0 0 0.0 -0.10157608985900879 -0.1758894920349121 0.21605445444583893 0.0 0.0 1.0 0.42675918340682983 0.34429383277893066 0 1.0 0 0.0 0 0.0 0 0.0 0.03000950813293457 -0.17793026566505432 0.21605445444583893 0.0 0.0 1.0 0.5166881084442139 0.33180397748947144 0 1.0 0 0.0 0 0.0 0 0.0 0.03555178642272949 -0.17518897354602814 0.21605445444583893 0.0 0.0 1.0 0.5203983187675476 0.33552277088165283 0 1.0 0 0.0 0 0.0 0 0.0 -0.09656071662902832 -0.1785188913345337 0.21605445444583893 0.0 0.0 0.999969482421875 0.42967790365219116 0.3402499556541443 0 1.0 0 0.0 0 0.0 0 0.0 0.03000950813293457 -0.17793026566505432 0.21605445444583893 0.0 0.0 1.0 0.5166881084442139 0.33180397748947144 0 1.0 0 0.0 0 0.0 0 0.0 -0.10157608985900879 -0.1758894920349121 0.21605445444583893 0.0 0.0 1.0 0.42675918340682983 0.34429383277893066 0 1.0 0 0.0 0 0.0 0 0.0 -0.09656071662902832 -0.1785188913345337 0.21605445444583893 0.0 0.0 0.999969482421875 0.42967790365219116 0.3402499556541443 0 1.0 0 0.0 0 0.0 0 0.0 0.024416208267211914 -0.18043318390846252 0.21605445444583893 0.0 0.0 1.0 0.5128822922706604 0.3284263610839844 0 1.0 0 0.0 0 0.0 0 0.0 0.03000950813293457 -0.17793026566505432 0.21605445444583893 0.0 0.0 1.0 0.5166881084442139 0.33180397748947144 0 1.0 0 0.0 0 0.0 0 0.0 -0.09143805503845215 -0.18091964721679688 0.21605445444583893 0.0 0.0 1.0 0.43273794651031494 0.3364626169204712 0 1.0 0 0.0 0 0.0 0 0.0 0.024416208267211914 -0.18043318390846252 0.21605445444583893 0.0 0.0 1.0 0.5128822922706604 0.3284263610839844 0 1.0 0 0.0 0 0.0 0 0.0 -0.09656071662902832 -0.1785188913345337 0.21605445444583893 0.0 0.0 0.999969482421875 0.42967790365219116 0.3402499556541443 0 1.0 0 0.0 0 0.0 0 0.0 -0.09143805503845215 -0.18091964721679688 0.21605445444583893 0.0 0.0 1.0 0.43273794651031494 0.3364626169204712 0 1.0 0 0.0 0 0.0 0 0.0 0.018771886825561523 -0.18269772827625275 0.21605445444583893 0.0 0.0 1.0 0.508985698223114 0.32539719343185425 0 1.0 0 0.0 0 0.0 0 0.0 0.024416208267211914 -0.18043318390846252 0.21605445444583893 0.0 0.0 1.0 0.5128822922706604 0.3284263610839844 0 1.0 0 0.0 0 0.0 0 0.0 -0.08620834350585938 -0.18309177458286285 0.21605445444583893 0.0 0.0 1.0 0.43594032526016235 0.3329399824142456 0 1.0 0 0.0 0 0.0 0 0.0 0.018771886825561523 -0.18269772827625275 0.21605445444583893 0.0 0.0 1.0 0.508985698223114 0.32539719343185425 0 1.0 0 0.0 0 0.0 0 0.0 -0.09143805503845215 -0.18091964721679688 0.21605445444583893 0.0 0.0 1.0 0.43273794651031494 0.3364626169204712 0 1.0 0 0.0 0 0.0 0 0.0 -0.08620834350585938 -0.18309177458286285 0.21605445444583893 0.0 0.0 1.0 0.43594032526016235 0.3329399824142456 0 1.0 0 0.0 0 0.0 0 0.0 0.013076543807983398 -0.184723898768425 0.21605445444583893 0.0 0.0 1.0 0.5050041079521179 0.32272303104400635 0 1.0 0 0.0 0 0.0 0 0.0 0.018771886825561523 -0.18269772827625275 0.21605445444583893 0.0 0.0 1.0 0.508985698223114 0.32539719343185425 0 1.0 0 0.0 0 0.0 0 0.0 -0.0808718204498291 -0.18503524363040924 0.21605445444583893 0.0 0.0 1.0 0.4392855167388916 0.3296908140182495 0 1.0 0 0.0 0 0.0 0 0.0 0.013076543807983398 -0.184723898768425 0.21605445444583893 0.0 0.0 1.0 0.5050041079521179 0.32272303104400635 0 1.0 0 0.0 0 0.0 0 0.0 -0.08620834350585938 -0.18309177458286285 0.21605445444583893 0.0 0.0 1.0 0.43594032526016235 0.3329399824142456 0 1.0 0 0.0 0 0.0 0 0.0 -0.0808718204498291 -0.18503524363040924 0.21605445444583893 0.0 0.0 1.0 0.4392855167388916 0.3296908140182495 0 1.0 0 0.0 0 0.0 0 0.0 0.0073299407958984375 -0.18651169538497925 0.21605445444583893 0.0 0.0 1.0 0.5009436011314392 0.32041001319885254 0 1.0 0 0.0 0 0.0 0 0.0 0.013076543807983398 -0.184723898768425 0.21605445444583893 0.0 0.0 1.0 0.5050041079521179 0.32272303104400635 0 1.0 0 0.0 0 0.0 0 0.0 -0.07542824745178223 -0.18675006926059723 0.21605445444583893 0.0 0.0 0.999969482421875 0.4427735507488251 0.326724112033844 0 1.0 0 0.0 0 0.0 0 0.0 0.0073299407958984375 -0.18651169538497925 0.21605445444583893 0.0 0.0 1.0 0.5009436011314392 0.32041001319885254 0 1.0 0 0.0 0 0.0 0 0.0 -0.0808718204498291 -0.18503524363040924 0.21605445444583893 0.0 0.0 1.0 0.4392855167388916 0.3296908140182495 0 1.0 0 0.0 0 0.0 0 0.0 -0.07542824745178223 -0.18675006926059723 0.21605445444583893 0.0 0.0 0.999969482421875 0.4427735507488251 0.326724112033844 0 1.0 0 0.0 0 0.0 0 0.0 0.0015323162078857422 -0.18806111812591553 0.21605445444583893 0.0 0.0 1.0 0.49681156873703003 0.31846362352371216 0 1.0 0 0.0 0 0.0 0 0.0 0.0073299407958984375 -0.18651169538497925 0.21605445444583893 0.0 0.0 1.0 0.5009436011314392 0.32041001319885254 0 1.0 0 0.0 0 0.0 0 0.0 -0.06987762451171875 -0.18823625147342682 0.21605445444583893 0.0 0.0 1.0 0.4464035928249359 0.32404953241348267 0 1.0 0 0.0 0 0.0 0 0.0 0.0015323162078857422 -0.18806111812591553 0.21605445444583893 0.0 0.0 1.0 0.49681156873703003 0.31846362352371216 0 1.0 0 0.0 0 0.0 0 0.0 -0.07542824745178223 -0.18675006926059723 0.21605445444583893 0.0 0.0 0.999969482421875 0.4427735507488251 0.326724112033844 0 1.0 0 0.0 0 0.0 0 0.0 -0.06987762451171875 -0.18823625147342682 0.21605445444583893 0.0 0.0 1.0 0.4464035928249359 0.32404953241348267 0 1.0 0 0.0 0 0.0 0 0.0 -0.0043163299560546875 -0.18937218189239502 0.21605445444583893 0.0 0.0 1.0 0.49261587858200073 0.3168887495994568 0 1.0 0 0.0 0 0.0 0 0.0 0.0015323162078857422 -0.18806111812591553 0.21605445444583893 0.0 0.0 1.0 0.49681156873703003 0.31846362352371216 0 1.0 0 0.0 0 0.0 0 0.0 -0.06421995162963867 -0.189493790268898 0.21605445444583893 0.0 0.0 1.0 0.45017388463020325 0.32167673110961914 0 1.0 0 0.0 0 0.0 0 0.0 -0.0043163299560546875 -0.18937218189239502 0.21605445444583893 0.0 0.0 1.0 0.49261587858200073 0.3168887495994568 0 1.0 0 0.0 0 0.0 0 0.0 -0.06987762451171875 -0.18823625147342682 0.21605445444583893 0.0 0.0 1.0 0.4464035928249359 0.32404953241348267 0 1.0 0 0.0 0 0.0 0 0.0 -0.06421995162963867 -0.189493790268898 0.21605445444583893 0.0 0.0 1.0 0.45017388463020325 0.32167673110961914 0 1.0 0 0.0 0 0.0 0 0.0 -0.010215997695922852 -0.19044485688209534 0.21605445444583893 0.0 0.0 1.0 0.4883649945259094 0.3156893849372864 0 1.0 0 0.0 0 0.0 0 0.0 -0.0043163299560546875 -0.18937218189239502 0.21605445444583893 0.0 0.0 1.0 0.49261587858200073 0.3168887495994568 0 1.0 0 0.0 0 0.0 0 0.0 -0.05845522880554199 -0.1905226856470108 0.21605445444583893 0.0 0.0 1.0 0.4540817141532898 0.3196159601211548 0 1.0 0 0.0 0 0.0 0 0.0 -0.010215997695922852 -0.19044485688209534 0.21605445444583893 0.0 0.0 1.0 0.4883649945259094 0.3156893849372864 0 1.0 0 0.0 0 0.0 0 0.0 -0.06421995162963867 -0.189493790268898 0.21605445444583893 0.0 0.0 1.0 0.45017388463020325 0.32167673110961914 0 1.0 0 0.0 0 0.0 0 0.0 -0.05845522880554199 -0.1905226856470108 0.21605445444583893 0.0 0.0 1.0 0.4540817141532898 0.3196159601211548 0 1.0 0 0.0 0 0.0 0 0.0 -0.01616692543029785 -0.19127915799617767 0.21605445444583893 0.0 0.0 1.0 0.48406782746315 0.3148688077926636 0 1.0 0 0.0 0 0.0 0 0.0 -0.010215997695922852 -0.19044485688209534 0.21605445444583893 0.0 0.0 1.0 0.4883649945259094 0.3156893849372864 0 1.0 0 0.0 0 0.0 0 0.0 -0.05258345603942871 -0.1913229376077652 0.21605445444583893 0.0 0.0 1.0 0.45812341570854187 0.3178775906562805 0 1.0 0 0.0 0 0.0 0 0.0 -0.01616692543029785 -0.19127915799617767 0.21605445444583893 0.0 0.0 1.0 0.48406782746315 0.3148688077926636 0 1.0 0 0.0 0 0.0 0 0.0 -0.05845522880554199 -0.1905226856470108 0.21605445444583893 0.0 0.0 1.0 0.4540817141532898 0.3196159601211548 0 1.0 0 0.0 0 0.0 0 0.0 -0.05258345603942871 -0.1913229376077652 0.21605445444583893 0.0 0.0 1.0 0.45812341570854187 0.3178775906562805 0 1.0 0 0.0 0 0.0 0 0.0 -0.022168874740600586 -0.19187510013580322 0.21605445444583893 0.0 0.0 1.0 0.4797341823577881 0.3144296407699585 0 1.0 0 0.0 0 0.0 0 0.0 -0.01616692543029785 -0.19127915799617767 0.21605445444583893 0.0 0.0 1.0 0.48406782746315 0.3148688077926636 0 1.0 0 0.0 0 0.0 0 0.0 -0.04660463333129883 -0.1918945610523224 0.21605446934700012 0.0 6.103701889514923e-05 1.0 0.4622941017150879 0.3164721131324768 0 1.0 0 0.0 0 0.0 0 0.0 -0.022168874740600586 -0.19187510013580322 0.21605445444583893 0.0 0.0 1.0 0.4797341823577881 0.3144296407699585 0 1.0 0 0.0 0 0.0 0 0.0 -0.05258345603942871 -0.1913229376077652 0.21605445444583893 0.0 0.0 1.0 0.45812341570854187 0.3178775906562805 0 1.0 0 0.0 0 0.0 0 0.0 -0.04660463333129883 -0.1918945610523224 0.21605446934700012 0.0 6.103701889514923e-05 1.0 0.4622941017150879 0.3164721131324768 0 1.0 0 0.0 0 0.0 0 0.0 -0.028221845626831055 -0.1922326534986496 0.21605445444583893 0.0 -3.0518509447574615e-05 0.999969482421875 0.4753739535808563 0.3143734931945801 0 1.0 0 0.0 0 0.0 0 0.0 -0.022168874740600586 -0.19187510013580322 0.21605445444583893 0.0 0.0 1.0 0.4797341823577881 0.3144296407699585 0 1.0 0 0.0 0 0.0 0 0.0 -0.040518760681152344 -0.19223752617835999 0.21605445444583893 0.0 0.0 1.0 0.4665878415107727 0.31540971994400024 0 1.0 0 0.0 0 0.0 0 0.0 -0.028221845626831055 -0.1922326534986496 0.21605445444583893 0.0 -3.0518509447574615e-05 0.999969482421875 0.4753739535808563 0.3143734931945801 0 1.0 0 0.0 0 0.0 0 0.0 -0.04660463333129883 -0.1918945610523224 0.21605446934700012 0.0 6.103701889514923e-05 1.0 0.4622941017150879 0.3164721131324768 0 1.0 0 0.0 0 0.0 0 0.0 -0.040518760681152344 -0.19223752617835999 0.21605445444583893 0.0 0.0 1.0 0.4665878415107727 0.31540971994400024 0 1.0 0 0.0 0 0.0 0 0.0 -0.03432583808898926 -0.19235184788703918 0.21605445444583893 0.0 0.00015259254723787308 0.999969482421875 0.4709974229335785 0.31470078229904175 0 1.0 0 0.0 0 0.0 0 0.0 -0.028221845626831055 -0.1922326534986496 0.21605445444583893 0.0 -3.0518509447574615e-05 0.999969482421875 0.4753739535808563 0.3143734931945801 0 1.0 0 0.0 0 0.0 0 0.0 -0.1012258529663086 0.24932944774627686 0.21605448424816132 0.0 0.0 1.0 0.44902312755584717 0.7215856313705444 0 1.0 0 0.0 0 0.0 0 0.0 0.1243431568145752 0.314128041267395 0.21605446934700012 0.0 0.0 1.0 0.5506380796432495 0.7342168092727661 0 1.0 0 0.0 0 0.0 0 0.0 -0.1012258529663086 0.314128041267395 0.21605446934700012 0.0 0.0 1.0 0.4513011574745178 0.7462323307991028 0 1.0 0 0.0 0 0.0 0 0.0 -0.1012258529663086 0.24932944774627686 0.21605448424816132 0.0 0.0 1.0 0.44902312755584717 0.7215856313705444 0 1.0 0 0.0 0 0.0 0 0.0 0.1243431568145752 0.24932944774627686 0.21605448424816132 0.0 0.0 1.0 0.5528576970100403 0.7088805437088013 0 1.0 0 0.0 0 0.0 0 0.0 0.1243431568145752 0.314128041267395 0.21605446934700012 0.0 0.0 1.0 0.5506380796432495 0.7342168092727661 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.32953959703445435 0.21605446934700012 0.0 0.0 0.999969482421875 0.43876373767852783 0.7131302356719971 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 0.32953959703445435 0.21605446934700012 0.0 0.0 1.0 0.39915820956230164 0.6972336173057556 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.42958128452301025 0.5941163897514343 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.32953959703445435 0.21605446934700012 0.0 0.0 0.999969482421875 0.43876373767852783 0.7131302356719971 0 1.0 0 0.0 0 0.0 0 0.0 -0.4022181034088135 0.19607976078987122 0.21605448424816132 0.0 0.0 1.0 0.48317551612854004 0.6406345367431641 0 1.0 0 0.0 0 0.0 0 0.0 -0.3807816505432129 0.19609802961349487 0.21605448424816132 0.0 0.0 1.0 0.494787335395813 0.6400524377822876 0 1.0 0 0.0 0 0.0 0 0.0 -0.39194393157958984 0.19643977284431458 0.21605448424816132 0.0 -6.103701889514923e-05 1.0 0.48874813318252563 0.6407021284103394 0 1.0 0 0.0 0 0.0 0 0.0 -0.4022181034088135 0.19607976078987122 0.21605448424816132 0.0 0.0 1.0 0.48317551612854004 0.6406345367431641 0 1.0 0 0.0 0 0.0 0 0.0 -0.3699455261230469 0.19507277011871338 0.21605448424816132 0.0 0.0 1.0 0.5006298422813416 0.6387298703193665 0 1.0 0 0.0 0 0.0 0 0.0 -0.3807816505432129 0.19609802961349487 0.21605448424816132 0.0 0.0 1.0 0.494787335395813 0.6400524377822876 0 1.0 0 0.0 0 0.0 0 0.0 -0.4122591018676758 0.1949997842311859 0.21605448424816132 0.0 0.0 1.0 0.4777190089225769 0.6398723721504211 0 1.0 0 0.0 0 0.0 0 0.0 -0.3699455261230469 0.19507277011871338 0.21605448424816132 0.0 0.0 1.0 0.5006298422813416 0.6387298703193665 0 1.0 0 0.0 0 0.0 0 0.0 -0.4022181034088135 0.19607976078987122 0.21605448424816132 0.0 0.0 1.0 0.48317551612854004 0.6406345367431641 0 1.0 0 0.0 0 0.0 0 0.0 -0.4122591018676758 0.1949997842311859 0.21605448424816132 0.0 0.0 1.0 0.4777190089225769 0.6398723721504211 0 1.0 0 0.0 0 0.0 0 0.0 -0.3594350814819336 0.19336402416229248 0.21605448424816132 0.0 0.0 1.0 0.5062727332115173 0.636748731136322 0 1.0 0 0.0 0 0.0 0 0.0 -0.3699455261230469 0.19507277011871338 0.21605448424816132 0.0 0.0 1.0 0.5006298422813416 0.6387298703193665 0 1.0 0 0.0 0 0.0 0 0.0 -0.42206645011901855 0.19319981336593628 0.21605448424816132 0.0 0.0 1.0 0.47238123416900635 0.638421893119812 0 1.0 0 0.0 0 0.0 0 0.0 -0.3594350814819336 0.19336402416229248 0.21605448424816132 0.0 0.0 1.0 0.5062727332115173 0.636748731136322 0 1.0 0 0.0 0 0.0 0 0.0 -0.4122591018676758 0.1949997842311859 0.21605448424816132 0.0 0.0 1.0 0.4777190089225769 0.6398723721504211 0 1.0 0 0.0 0 0.0 0 0.0 -0.42206645011901855 0.19319981336593628 0.21605448424816132 0.0 0.0 1.0 0.47238123416900635 0.638421893119812 0 1.0 0 0.0 0 0.0 0 0.0 -0.34925079345703125 0.19097179174423218 0.21605448424816132 0.0 0.0 1.0 0.5117148160934448 0.6341213583946228 0 1.0 0 0.0 0 0.0 0 0.0 -0.3594350814819336 0.19336402416229248 0.21605448424816132 0.0 0.0 1.0 0.5062727332115173 0.636748731136322 0 1.0 0 0.0 0 0.0 0 0.0 -0.4316401481628418 0.1906798779964447 0.21605448424816132 0.0 0.0 1.0 0.46716344356536865 0.6362869739532471 0 1.0 0 0.0 0 0.0 0 0.0 -0.34925079345703125 0.19097179174423218 0.21605448424816132 0.0 0.0 1.0 0.5117148160934448 0.6341213583946228 0 1.0 0 0.0 0 0.0 0 0.0 -0.42206645011901855 0.19319981336593628 0.21605448424816132 0.0 0.0 1.0 0.47238123416900635 0.638421893119812 0 1.0 0 0.0 0 0.0 0 0.0 -0.4316401481628418 0.1906798779964447 0.21605448424816132 0.0 0.0 1.0 0.46716344356536865 0.6362869739532471 0 1.0 0 0.0 0 0.0 0 0.0 -0.33939218521118164 0.18789604306221008 0.21605448424816132 0.0 0.0 0.999969482421875 0.5169574022293091 0.6308568716049194 0 1.0 0 0.0 0 0.0 0 0.0 -0.34925079345703125 0.19097179174423218 0.21605448424816132 0.0 0.0 1.0 0.5117148160934448 0.6341213583946228 0 1.0 0 0.0 0 0.0 0 0.0 -0.4409806728363037 0.1874399483203888 0.21605448424816132 0.0 0.0 1.0 0.46206551790237427 0.6334686875343323 0 1.0 0 0.0 0 0.0 0 0.0 -0.33939218521118164 0.18789604306221008 0.21605448424816132 0.0 0.0 0.999969482421875 0.5169574022293091 0.6308568716049194 0 1.0 0 0.0 0 0.0 0 0.0 -0.4316401481628418 0.1906798779964447 0.21605448424816132 0.0 0.0 1.0 0.46716344356536865 0.6362869739532471 0 1.0 0 0.0 0 0.0 0 0.0 -0.4409806728363037 0.1874399483203888 0.21605448424816132 0.0 0.0 1.0 0.46206551790237427 0.6334686875343323 0 1.0 0 0.0 0 0.0 0 0.0 -0.32985973358154297 0.18413680791854858 0.21605448424816132 0.0 0.0 0.999969482421875 0.5220027565956116 0.6269617676734924 0 1.0 0 0.0 0 0.0 0 0.0 -0.33939218521118164 0.18789604306221008 0.21605448424816132 0.0 0.0 0.999969482421875 0.5169574022293091 0.6308568716049194 0 1.0 0 0.0 0 0.0 0 0.0 -0.4500875473022461 0.18348002433776855 0.21605448424816132 0.0 0.0 1.0 0.4570869505405426 0.6299653649330139 0 1.0 0 0.0 0 0.0 0 0.0 -0.32985973358154297 0.18413680791854858 0.21605448424816132 0.0 0.0 0.999969482421875 0.5220027565956116 0.6269617676734924 0 1.0 0 0.0 0 0.0 0 0.0 -0.4409806728363037 0.1874399483203888 0.21605448424816132 0.0 0.0 1.0 0.46206551790237427 0.6334686875343323 0 1.0 0 0.0 0 0.0 0 0.0 -0.4500875473022461 0.18348002433776855 0.21605448424816132 0.0 0.0 1.0 0.4570869505405426 0.6299653649330139 0 1.0 0 0.0 0 0.0 0 0.0 -0.32065320014953613 0.1796940565109253 0.21605448424816132 0.0 0.0 1.0 0.5268549919128418 0.6224387288093567 0 1.0 0 0.0 0 0.0 0 0.0 -0.32985973358154297 0.18413680791854858 0.21605448424816132 0.0 0.0 0.999969482421875 0.5220027565956116 0.6269617676734924 0 1.0 0 0.0 0 0.0 0 0.0 -0.45896077156066895 0.17880013585090637 0.21605448424816132 0.0 0.0 0.999969482421875 0.45222604274749756 0.6257724165916443 0 1.0 0 0.0 0 0.0 0 0.0 -0.32065320014953613 0.1796940565109253 0.21605448424816132 0.0 0.0 1.0 0.5268549919128418 0.6224387288093567 0 1.0 0 0.0 0 0.0 0 0.0 -0.4500875473022461 0.18348002433776855 0.21605448424816132 0.0 0.0 1.0 0.4570869505405426 0.6299653649330139 0 1.0 0 0.0 0 0.0 0 0.0 -0.45896077156066895 0.17880013585090637 0.21605448424816132 0.0 0.0 0.999969482421875 0.45222604274749756 0.6257724165916443 0 1.0 0 0.0 0 0.0 0 0.0 -0.31177258491516113 0.1745678186416626 0.21605448424816132 0.0 0.0 1.0 0.5315191745758057 0.6172875761985779 0 1.0 0 0.0 0 0.0 0 0.0 -0.32065320014953613 0.1796940565109253 0.21605448424816132 0.0 0.0 1.0 0.5268549919128418 0.6224387288093567 0 1.0 0 0.0 0 0.0 0 0.0 -0.46760058403015137 0.17340025305747986 0.21605448424816132 0.0 0.0 0.999969482421875 0.44748032093048096 0.6208823919296265 0 1.0 0 0.0 0 0.0 0 0.0 -0.31177258491516113 0.1745678186416626 0.21605448424816132 0.0 0.0 1.0 0.5315191745758057 0.6172875761985779 0 1.0 0 0.0 0 0.0 0 0.0 -0.45896077156066895 0.17880013585090637 0.21605448424816132 0.0 0.0 0.999969482421875 0.45222604274749756 0.6257724165916443 0 1.0 0 0.0 0 0.0 0 0.0 -0.46760058403015137 0.17340025305747986 0.21605448424816132 0.0 0.0 0.999969482421875 0.44748032093048096 0.6208823919296265 0 1.0 0 0.0 0 0.0 0 0.0 -0.30321788787841797 0.1687580645084381 0.21605446934700012 0.0 0.0 1.0 0.5360012650489807 0.6115046739578247 0 1.0 0 0.0 0 0.0 0 0.0 -0.31177258491516113 0.1745678186416626 0.21605448424816132 0.0 0.0 1.0 0.5315191745758057 0.6172875761985779 0 1.0 0 0.0 0 0.0 0 0.0 -0.47600698471069336 0.167280375957489 0.21605446934700012 0.0 0.0 1.0 0.44284671545028687 0.6152850389480591 0 1.0 0 0.0 0 0.0 0 0.0 -0.30321788787841797 0.1687580645084381 0.21605446934700012 0.0 0.0 1.0 0.5360012650489807 0.6115046739578247 0 1.0 0 0.0 0 0.0 0 0.0 -0.46760058403015137 0.17340025305747986 0.21605448424816132 0.0 0.0 0.999969482421875 0.44748032093048096 0.6208823919296265 0 1.0 0 0.0 0 0.0 0 0.0 -0.47600698471069336 0.167280375957489 0.21605446934700012 0.0 0.0 1.0 0.44284671545028687 0.6152850389480591 0 1.0 0 0.0 0 0.0 0 0.0 -0.29498910903930664 0.16226482391357422 0.21605446934700012 0.0 0.0 1.0 0.540307879447937 0.6050833463668823 0 1.0 0 0.0 0 0.0 0 0.0 -0.30321788787841797 0.1687580645084381 0.21605446934700012 0.0 0.0 1.0 0.5360012650489807 0.6115046739578247 0 1.0 0 0.0 0 0.0 0 0.0 -0.4841797351837158 0.16044053435325623 0.21605446934700012 0.0 0.0 1.0 0.4383218288421631 0.6089680790901184 0 1.0 0 0.0 0 0.0 0 0.0 -0.29498910903930664 0.16226482391357422 0.21605446934700012 0.0 0.0 1.0 0.540307879447937 0.6050833463668823 0 1.0 0 0.0 0 0.0 0 0.0 -0.47600698471069336 0.167280375957489 0.21605446934700012 0.0 0.0 1.0 0.44284671545028687 0.6152850389480591 0 1.0 0 0.0 0 0.0 0 0.0 -0.4841797351837158 0.16044053435325623 0.21605446934700012 0.0 0.0 1.0 0.4383218288421631 0.6089680790901184 0 1.0 0 0.0 0 0.0 0 0.0 -0.28708624839782715 0.15508809685707092 0.21605446934700012 0.0 0.0 1.0 0.5444459915161133 0.5980141162872314 0 1.0 0 0.0 0 0.0 0 0.0 -0.29498910903930664 0.16226482391357422 0.21605446934700012 0.0 0.0 1.0 0.540307879447937 0.6050833463668823 0 1.0 0 0.0 0 0.0 0 0.0 -0.49211907386779785 0.1528806984424591 0.21605446934700012 0.0 0.0 1.0 0.43390145897865295 0.601917028427124 0 1.0 0 0.0 0 0.0 0 0.0 -0.28708624839782715 0.15508809685707092 0.21605446934700012 0.0 0.0 1.0 0.5444459915161133 0.5980141162872314 0 1.0 0 0.0 0 0.0 0 0.0 -0.4841797351837158 0.16044053435325623 0.21605446934700012 0.0 0.0 1.0 0.4383218288421631 0.6089680790901184 0 1.0 0 0.0 0 0.0 0 0.0 -0.49211907386779785 0.1528806984424591 0.21605446934700012 0.0 0.0 1.0 0.43390145897865295 0.601917028427124 0 1.0 0 0.0 0 0.0 0 0.0 -0.2795095443725586 0.14722785353660583 0.21605446934700012 0.0 0.0 1.0 0.5484229326248169 0.5902849435806274 0 1.0 0 0.0 0 0.0 0 0.0 -0.28708624839782715 0.15508809685707092 0.21605446934700012 0.0 0.0 1.0 0.5444459915161133 0.5980141162872314 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.42958128452301025 0.5941163897514343 0 1.0 0 0.0 0 0.0 0 0.0 -0.2795095443725586 0.14722785353660583 0.21605446934700012 0.0 0.0 1.0 0.5484229326248169 0.5902849435806274 0 1.0 0 0.0 0 0.0 0 0.0 -0.49211907386779785 0.1528806984424591 0.21605446934700012 0.0 0.0 1.0 0.43390145897865295 0.601917028427124 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.42958128452301025 0.5941163897514343 0 1.0 0 0.0 0 0.0 0 0.0 -0.27240467071533203 0.13872790336608887 0.21605446934700012 0.0 0.0 0.999969482421875 0.5521750450134277 0.5819390416145325 0 1.0 0 0.0 0 0.0 0 0.0 -0.2795095443725586 0.14722785353660583 0.21605446934700012 0.0 0.0 1.0 0.5484229326248169 0.5902849435806274 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -0.4900953769683838 0.07213538885116577 0.21605446934700012 0.0 0.0 1.0 0.430381178855896 0.5236064195632935 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.42958128452301025 0.5941163897514343 0 1.0 0 0.0 0 0.0 0 0.0 -0.4900953769683838 0.07213538885116577 0.21605446934700012 0.0 0.0 1.0 0.430381178855896 0.5236064195632935 0 1.0 0 0.0 0 0.0 0 0.0 -0.48732495307922363 0.07810565829277039 0.21605446934700012 0.0 0.0 1.0 0.4322170615196228 0.5300252437591553 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.42958128452301025 0.5941163897514343 0 1.0 0 0.0 0 0.0 0 0.0 -0.48732495307922363 0.07810565829277039 0.21605446934700012 0.0 0.0 1.0 0.4322170615196228 0.5300252437591553 0 1.0 0 0.0 0 0.0 0 0.0 -0.48422837257385254 0.08367946743965149 0.21605446934700012 0.0 0.0 1.0 0.4342000186443329 0.5359824895858765 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.42958128452301025 0.5941163897514343 0 1.0 0 0.0 0 0.0 0 0.0 -0.48422837257385254 0.08367946743965149 0.21605446934700012 0.0 0.0 1.0 0.4342000186443329 0.5359824895858765 0 1.0 0 0.0 0 0.0 0 0.0 -0.4808061122894287 0.0888567864894867 0.21605446934700012 0.0 0.0 1.0 0.43633294105529785 0.5414889454841614 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.42958128452301025 0.5941163897514343 0 1.0 0 0.0 0 0.0 0 0.0 -0.4808061122894287 0.0888567864894867 0.21605446934700012 0.0 0.0 1.0 0.43633294105529785 0.5414889454841614 0 1.0 0 0.0 0 0.0 0 0.0 -0.47705769538879395 0.09363764524459839 0.21605446934700012 0.0 0.0 1.0 0.43861955404281616 0.5465542078018188 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.42958128452301025 0.5941163897514343 0 1.0 0 0.0 0 0.0 0 0.0 -0.47705769538879395 0.09363764524459839 0.21605446934700012 0.0 0.0 1.0 0.43861955404281616 0.5465542078018188 0 1.0 0 0.0 0 0.0 0 0.0 -0.47306370735168457 0.09802931547164917 0.21605446934700012 0.0 0.0 1.0 0.44102004170417786 0.5511919260025024 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.42958128452301025 0.5941163897514343 0 1.0 0 0.0 0 0.0 0 0.0 -0.47306370735168457 0.09802931547164917 0.21605446934700012 0.0 0.0 1.0 0.44102004170417786 0.5511919260025024 0 1.0 0 0.0 0 0.0 0 0.0 -0.4689042568206787 0.10203909873962402 0.21605446934700012 0.0 0.0 1.0 0.4434939920902252 0.5554137825965881 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.42958128452301025 0.5941163897514343 0 1.0 0 0.0 0 0.0 0 0.0 -0.4689042568206787 0.10203909873962402 0.21605446934700012 0.0 0.0 1.0 0.4434939920902252 0.5554137825965881 0 1.0 0 0.0 0 0.0 0 0.0 -0.46457958221435547 0.10566699504852295 0.21605446934700012 0.0 0.0 1.0 0.44604381918907166 0.5592247247695923 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.42958128452301025 0.5941163897514343 0 1.0 0 0.0 0 0.0 0 0.0 -0.46457958221435547 0.10566699504852295 0.21605446934700012 0.0 0.0 1.0 0.44604381918907166 0.5592247247695923 0 1.0 0 0.0 0 0.0 0 0.0 -0.46008944511413574 0.10891300439834595 0.21605446934700012 0.0 0.0 1.0 0.4486721456050873 0.562628984451294 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.42958128452301025 0.5941163897514343 0 1.0 0 0.0 0 0.0 0 0.0 -0.46008944511413574 0.10891300439834595 0.21605446934700012 0.0 0.0 1.0 0.4486721456050873 0.562628984451294 0 1.0 0 0.0 0 0.0 0 0.0 -0.45543384552001953 0.11177712678909302 0.21605446934700012 0.0 0.0 1.0 0.4513814449310303 0.5656299591064453 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.42958128452301025 0.5941163897514343 0 1.0 0 0.0 0 0.0 0 0.0 -0.45543384552001953 0.11177712678909302 0.21605446934700012 0.0 0.0 1.0 0.4513814449310303 0.5656299591064453 0 1.0 0 0.0 0 0.0 0 0.0 -0.45061278343200684 0.11425936222076416 0.21605446934700012 0.0 0.0 1.0 0.4541741907596588 0.5682300329208374 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.42958128452301025 0.5941163897514343 0 1.0 0 0.0 0 0.0 0 0.0 -0.45061278343200684 0.11425936222076416 0.21605446934700012 0.0 0.0 1.0 0.4541741907596588 0.5682300329208374 0 1.0 0 0.0 0 0.0 0 0.0 -0.44562649726867676 0.11635971069335938 0.21605446934700012 0.0 0.0 1.0 0.45705264806747437 0.5704306364059448 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.42958128452301025 0.5941163897514343 0 1.0 0 0.0 0 0.0 0 0.0 -0.44562649726867676 0.11635971069335938 0.21605446934700012 0.0 0.0 1.0 0.45705264806747437 0.5704306364059448 0 1.0 0 0.0 0 0.0 0 0.0 -0.4404747486114502 0.11807817220687866 0.21605446934700012 0.0 0.0 1.0 0.4600192606449127 0.5722322463989258 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.42958128452301025 0.5941163897514343 0 1.0 0 0.0 0 0.0 0 0.0 -0.4404747486114502 0.11807817220687866 0.21605446934700012 0.0 0.0 1.0 0.4600192606449127 0.5722322463989258 0 1.0 0 0.0 0 0.0 0 0.0 -0.43515753746032715 0.11941477656364441 0.21605446934700012 0.0 0.0 1.0 0.46307632327079773 0.573634147644043 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.42958128452301025 0.5941163897514343 0 1.0 0 0.0 0 0.0 0 0.0 -0.43515753746032715 0.11941477656364441 0.21605446934700012 0.0 0.0 1.0 0.46307632327079773 0.573634147644043 0 1.0 0 0.0 0 0.0 0 0.0 -0.4296748638153076 0.12036949396133423 0.21605446934700012 0.0 0.0 1.0 0.46622589230537415 0.5746346116065979 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.42958128452301025 0.5941163897514343 0 1.0 0 0.0 0 0.0 0 0.0 -0.4296748638153076 0.12036949396133423 0.21605446934700012 0.0 0.0 1.0 0.46622589230537415 0.5746346116065979 0 1.0 0 0.0 0 0.0 0 0.0 -0.27240467071533203 0.13872790336608887 0.21605446934700012 0.0 0.0 0.999969482421875 0.5521750450134277 0.5819390416145325 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.42958128452301025 0.5941163897514343 0 1.0 0 0.0 0 0.0 0 0.0 -0.4296748638153076 0.12036949396133423 0.21605446934700012 0.0 0.0 1.0 0.46622589230537415 0.5746346116065979 0 1.0 0 0.0 0 0.0 0 0.0 -0.4240269660949707 0.12094232439994812 0.21605446934700012 0.0 0.0 1.0 0.4694697856903076 0.5752311944961548 0 1.0 0 0.0 0 0.0 0 0.0 -0.27240467071533203 0.13872790336608887 0.21605446934700012 0.0 0.0 0.999969482421875 0.5521750450134277 0.5819390416145325 0 1.0 0 0.0 0 0.0 0 0.0 -0.4240269660949707 0.12094232439994812 0.21605446934700012 0.0 0.0 1.0 0.4694697856903076 0.5752311944961548 0 1.0 0 0.0 0 0.0 0 0.0 -0.2659175395965576 0.12963202595710754 0.21605446934700012 0.0 0.0 0.999969482421875 0.5556415319442749 0.5730181932449341 0 1.0 0 0.0 0 0.0 0 0.0 -0.27240467071533203 0.13872790336608887 0.21605446934700012 0.0 0.0 0.999969482421875 0.5521750450134277 0.5819390416145325 0 1.0 0 0.0 0 0.0 0 0.0 -0.4240269660949707 0.12094232439994812 0.21605446934700012 0.0 0.0 1.0 0.4694697856903076 0.5752311944961548 0 1.0 0 0.0 0 0.0 0 0.0 -0.4182136058807373 0.12113326787948608 0.21605446934700012 0.0 0.0 1.0 0.47280994057655334 0.5754200220108032 0 1.0 0 0.0 0 0.0 0 0.0 -0.2659175395965576 0.12963202595710754 0.21605446934700012 0.0 0.0 0.999969482421875 0.5556415319442749 0.5730181932449341 0 1.0 0 0.0 0 0.0 0 0.0 -0.4182136058807373 0.12113326787948608 0.21605446934700012 0.0 0.0 1.0 0.47280994057655334 0.5754200220108032 0 1.0 0 0.0 0 0.0 0 0.0 -0.26004815101623535 0.11994022130966187 0.21605446934700012 0.0 0.0 1.0 0.5588341355323792 0.5635035634040833 0 1.0 0 0.0 0 0.0 0 0.0 -0.2659175395965576 0.12963202595710754 0.21605446934700012 0.0 0.0 0.999969482421875 0.5556415319442749 0.5730181932449341 0 1.0 0 0.0 0 0.0 0 0.0 -0.4122908115386963 0.12093746662139893 0.21605446934700012 0.0 0.0 1.0 0.4762154221534729 0.5751924514770508 0 1.0 0 0.0 0 0.0 0 0.0 -0.26004815101623535 0.11994022130966187 0.21605446934700012 0.0 0.0 1.0 0.5588341355323792 0.5635035634040833 0 1.0 0 0.0 0 0.0 0 0.0 -0.4182136058807373 0.12113326787948608 0.21605446934700012 0.0 0.0 1.0 0.47280994057655334 0.5754200220108032 0 1.0 0 0.0 0 0.0 0 0.0 -0.40654802322387695 0.12035006284713745 0.21605446934700012 0.0 0.0 1.0 0.4795198440551758 0.5745433568954468 0 1.0 0 0.0 0 0.0 0 0.0 -0.26004815101623535 0.11994022130966187 0.21605446934700012 0.0 0.0 1.0 0.5588341355323792 0.5635035634040833 0 1.0 0 0.0 0 0.0 0 0.0 -0.4122908115386963 0.12093746662139893 0.21605446934700012 0.0 0.0 1.0 0.4762154221534729 0.5751924514770508 0 1.0 0 0.0 0 0.0 0 0.0 -0.4009850025177002 0.11937102675437927 0.21605446934700012 0.0 0.0 0.999969482421875 0.4827231168746948 0.5734726786613464 0 1.0 0 0.0 0 0.0 0 0.0 -0.26004815101623535 0.11994022130966187 0.21605446934700012 0.0 0.0 1.0 0.5588341355323792 0.5635035634040833 0 1.0 0 0.0 0 0.0 0 0.0 -0.40654802322387695 0.12035006284713745 0.21605446934700012 0.0 0.0 1.0 0.4795198440551758 0.5745433568954468 0 1.0 0 0.0 0 0.0 0 0.0 -0.4009850025177002 0.11937102675437927 0.21605446934700012 0.0 0.0 0.999969482421875 0.4827231168746948 0.5734726786613464 0 1.0 0 0.0 0 0.0 0 0.0 -0.25479650497436523 0.10965245962142944 0.21605446934700012 0.0 0.0 1.0 0.5617637038230896 0.5533726215362549 0 1.0 0 0.0 0 0.0 0 0.0 -0.26004815101623535 0.11994022130966187 0.21605446934700012 0.0 0.0 1.0 0.5588341355323792 0.5635035634040833 0 1.0 0 0.0 0 0.0 0 0.0 -0.3956022262573242 0.11800038814544678 0.21605446934700012 0.0 0.0 1.0 0.48582515120506287 0.5719797611236572 0 1.0 0 0.0 0 0.0 0 0.0 -0.25479650497436523 0.10965245962142944 0.21605446934700012 0.0 0.0 1.0 0.5617637038230896 0.5533726215362549 0 1.0 0 0.0 0 0.0 0 0.0 -0.4009850025177002 0.11937102675437927 0.21605446934700012 0.0 0.0 0.999969482421875 0.4827231168746948 0.5734726786613464 0 1.0 0 0.0 0 0.0 0 0.0 -0.3903992176055908 0.11623811721801758 0.21605446934700012 0.0 0.0 1.0 0.4888266324996948 0.5700627565383911 0 1.0 0 0.0 0 0.0 0 0.0 -0.25479650497436523 0.10965245962142944 0.21605446934700012 0.0 0.0 1.0 0.5617637038230896 0.5533726215362549 0 1.0 0 0.0 0 0.0 0 0.0 -0.3956022262573242 0.11800038814544678 0.21605446934700012 0.0 0.0 1.0 0.48582515120506287 0.5719797611236572 0 1.0 0 0.0 0 0.0 0 0.0 -0.3853764533996582 0.11408424377441406 0.21605446934700012 0.0 0.0 1.0 0.49172791838645935 0.5677193403244019 0 1.0 0 0.0 0 0.0 0 0.0 -0.25479650497436523 0.10965245962142944 0.21605446934700012 0.0 0.0 1.0 0.5617637038230896 0.5533726215362549 0 1.0 0 0.0 0 0.0 0 0.0 -0.3903992176055908 0.11623811721801758 0.21605446934700012 0.0 0.0 1.0 0.4888266324996948 0.5700627565383911 0 1.0 0 0.0 0 0.0 0 0.0 -0.38053345680236816 0.11153876781463623 0.21605446934700012 0.0 0.0 1.0 0.49453020095825195 0.564945638179779 0 1.0 0 0.0 0 0.0 0 0.0 -0.25479650497436523 0.10965245962142944 0.21605446934700012 0.0 0.0 1.0 0.5617637038230896 0.5533726215362549 0 1.0 0 0.0 0 0.0 0 0.0 -0.3853764533996582 0.11408424377441406 0.21605446934700012 0.0 0.0 1.0 0.49172791838645935 0.5677193403244019 0 1.0 0 0.0 0 0.0 0 0.0 -0.3758707046508789 0.1086016595363617 0.21605446934700012 0.0 0.0 1.0 0.4972342252731323 0.5617371201515198 0 1.0 0 0.0 0 0.0 0 0.0 -0.25479650497436523 0.10965245962142944 0.21605446934700012 0.0 0.0 1.0 0.5617637038230896 0.5533726215362549 0 1.0 0 0.0 0 0.0 0 0.0 -0.38053345680236816 0.11153876781463623 0.21605446934700012 0.0 0.0 1.0 0.49453020095825195 0.564945638179779 0 1.0 0 0.0 0 0.0 0 0.0 -0.3758707046508789 0.1086016595363617 0.21605446934700012 0.0 0.0 1.0 0.4972342252731323 0.5617371201515198 0 1.0 0 0.0 0 0.0 0 0.0 -0.25016283988952637 0.09876877069473267 0.21605446934700012 0.0 0.0 1.0 0.5644399523735046 0.5426000356674194 0 1.0 0 0.0 0 0.0 0 0.0 -0.25479650497436523 0.10965245962142944 0.21605446934700012 0.0 0.0 1.0 0.5617637038230896 0.5533726215362549 0 1.0 0 0.0 0 0.0 0 0.0 -0.3713877201080322 0.10527294874191284 0.21605446934700012 0.0 0.0 1.0 0.49984145164489746 0.5580880641937256 0 1.0 0 0.0 0 0.0 0 0.0 -0.25016283988952637 0.09876877069473267 0.21605446934700012 0.0 0.0 1.0 0.5644399523735046 0.5426000356674194 0 1.0 0 0.0 0 0.0 0 0.0 -0.3758707046508789 0.1086016595363617 0.21605446934700012 0.0 0.0 1.0 0.4972342252731323 0.5617371201515198 0 1.0 0 0.0 0 0.0 0 0.0 -0.36708498001098633 0.10155263543128967 0.21605446934700012 0.0 0.0 1.0 0.5023529529571533 0.5539916753768921 0 1.0 0 0.0 0 0.0 0 0.0 -0.25016283988952637 0.09876877069473267 0.21605446934700012 0.0 0.0 1.0 0.5644399523735046 0.5426000356674194 0 1.0 0 0.0 0 0.0 0 0.0 -0.3713877201080322 0.10527294874191284 0.21605446934700012 0.0 0.0 1.0 0.49984145164489746 0.5580880641937256 0 1.0 0 0.0 0 0.0 0 0.0 -0.362962007522583 0.0974406898021698 0.21605446934700012 0.0 0.0 1.0 0.5047703385353088 0.5494404435157776 0 1.0 0 0.0 0 0.0 0 0.0 -0.25016283988952637 0.09876877069473267 0.21605446934700012 0.0 0.0 1.0 0.5644399523735046 0.5426000356674194 0 1.0 0 0.0 0 0.0 0 0.0 -0.36708498001098633 0.10155263543128967 0.21605446934700012 0.0 0.0 1.0 0.5023529529571533 0.5539916753768921 0 1.0 0 0.0 0 0.0 0 0.0 -0.362962007522583 0.0974406898021698 0.21605446934700012 0.0 0.0 1.0 0.5047703385353088 0.5494404435157776 0 1.0 0 0.0 0 0.0 0 0.0 -0.24614691734313965 0.08728915452957153 0.21605446934700012 0.0 0.0 1.0 0.5668718218803406 0.5311582088470459 0 1.0 0 0.0 0 0.0 0 0.0 -0.25016283988952637 0.09876877069473267 0.21605446934700012 0.0 0.0 1.0 0.5644399523735046 0.5426000356674194 0 1.0 0 0.0 0 0.0 0 0.0 -0.35901927947998047 0.09293714165687561 0.21605446934700012 0.0 0.0 1.0 0.5070947408676147 0.5444257855415344 0 1.0 0 0.0 0 0.0 0 0.0 -0.24614691734313965 0.08728915452957153 0.21605446934700012 0.0 0.0 1.0 0.5668718218803406 0.5311582088470459 0 1.0 0 0.0 0 0.0 0 0.0 -0.362962007522583 0.0974406898021698 0.21605446934700012 0.0 0.0 1.0 0.5047703385353088 0.5494404435157776 0 1.0 0 0.0 0 0.0 0 0.0 -0.35532689094543457 0.08799093961715698 0.21605446934700012 0.0 0.0 1.0 0.5092871785163879 0.5388861894607544 0 1.0 0 0.0 0 0.0 0 0.0 -0.24614691734313965 0.08728915452957153 0.21605446934700012 0.0 0.0 1.0 0.5668718218803406 0.5311582088470459 0 1.0 0 0.0 0 0.0 0 0.0 -0.35901927947998047 0.09293714165687561 0.21605446934700012 0.0 0.0 1.0 0.5070947408676147 0.5444257855415344 0 1.0 0 0.0 0 0.0 0 0.0 -0.3519556522369385 0.08255091309547424 0.21605446934700012 0.0 0.0 1.0 0.5113084316253662 0.5327562093734741 0 1.0 0 0.0 0 0.0 0 0.0 -0.24614691734313965 0.08728915452957153 0.21605446934700012 0.0 0.0 1.0 0.5668718218803406 0.5311582088470459 0 1.0 0 0.0 0 0.0 0 0.0 -0.35532689094543457 0.08799093961715698 0.21605446934700012 0.0 0.0 1.0 0.5092871785163879 0.5388861894607544 0 1.0 0 0.0 0 0.0 0 0.0 -0.3519556522369385 0.08255091309547424 0.21605446934700012 0.0 0.0 1.0 0.5113084316253662 0.5327562093734741 0 1.0 0 0.0 0 0.0 0 0.0 -0.24274897575378418 0.07521361112594604 0.21605446934700012 0.0 0.0 1.0 0.5690667629241943 0.5190191268920898 0 1.0 0 0.0 0 0.0 0 0.0 -0.24614691734313965 0.08728915452957153 0.21605446934700012 0.0 0.0 1.0 0.5668718218803406 0.5311582088470459 0 1.0 0 0.0 0 0.0 0 0.0 -0.3489053249359131 0.07661712169647217 0.21605446934700012 0.0 0.0 1.0 0.513160228729248 0.5260202884674072 0 1.0 0 0.0 0 0.0 0 0.0 -0.24274897575378418 0.07521361112594604 0.21605446934700012 0.0 0.0 1.0 0.5690667629241943 0.5190191268920898 0 1.0 0 0.0 0 0.0 0 0.0 -0.3519556522369385 0.08255091309547424 0.21605446934700012 0.0 0.0 1.0 0.5113084316253662 0.5327562093734741 0 1.0 0 0.0 0 0.0 0 0.0 -0.3461761474609375 0.07018956542015076 0.21605446934700012 0.0 0.0 1.0 0.5148437023162842 0.5186618566513062 0 1.0 0 0.0 0 0.0 0 0.0 -0.24274897575378418 0.07521361112594604 0.21605446934700012 0.0 0.0 1.0 0.5690667629241943 0.5190191268920898 0 1.0 0 0.0 0 0.0 0 0.0 -0.3489053249359131 0.07661712169647217 0.21605446934700012 0.0 0.0 1.0 0.513160228729248 0.5260202884674072 0 1.0 0 0.0 0 0.0 0 0.0 -0.3461761474609375 0.07018956542015076 0.21605446934700012 0.0 0.0 1.0 0.5148437023162842 0.5186618566513062 0 1.0 0 0.0 0 0.0 0 0.0 -0.23996877670288086 0.06254212558269501 0.21605446934700012 0.0 0.0 1.0 0.5710310339927673 0.506155252456665 0 1.0 0 0.0 0 0.0 0 0.0 -0.24274897575378418 0.07521361112594604 0.21605446934700012 0.0 0.0 1.0 0.5690667629241943 0.5190191268920898 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -0.4925398826599121 0.06576862931251526 0.21605446934700012 0.0 -3.0518509447574615e-05 0.999969482421875 0.42868953943252563 0.5167142152786255 0 1.0 0 0.0 0 0.0 0 0.0 -0.4900953769683838 0.07213538885116577 0.21605446934700012 0.0 0.0 1.0 0.430381178855896 0.5236064195632935 0 1.0 0 0.0 0 0.0 0 0.0 -0.3437681198120117 0.06326821446418762 0.21605446934700012 0.0 0.0 1.0 0.516359806060791 0.510663628578186 0 1.0 0 0.0 0 0.0 0 0.0 -0.23996877670288086 0.06254212558269501 0.21605446934700012 0.0 0.0 1.0 0.5710310339927673 0.506155252456665 0 1.0 0 0.0 0 0.0 0 0.0 -0.3461761474609375 0.07018956542015076 0.21605446934700012 0.0 0.0 1.0 0.5148437023162842 0.5186618566513062 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -0.4946584701538086 0.05900539457798004 0.21605446934700012 0.0 0.0 1.0 0.42713963985443115 0.509336531162262 0 1.0 0 0.0 0 0.0 0 0.0 -0.4925398826599121 0.06576862931251526 0.21605446934700012 0.0 -3.0518509447574615e-05 0.999969482421875 0.42868953943252563 0.5167142152786255 0 1.0 0 0.0 0 0.0 0 0.0 -0.34168124198913574 0.05585309863090515 0.21605446934700012 0.0 0.0 1.0 0.5177088975906372 0.5020086765289307 0 1.0 0 0.0 0 0.0 0 0.0 -0.23996877670288086 0.06254212558269501 0.21605446934700012 0.0 0.0 1.0 0.5710310339927673 0.506155252456665 0 1.0 0 0.0 0 0.0 0 0.0 -0.3437681198120117 0.06326821446418762 0.21605446934700012 0.0 0.0 1.0 0.516359806060791 0.510663628578186 0 1.0 0 0.0 0 0.0 0 0.0 -0.34168124198913574 0.05585309863090515 0.21605446934700012 0.0 0.0 1.0 0.5177088975906372 0.5020086765289307 0 1.0 0 0.0 0 0.0 0 0.0 -0.2378063201904297 0.049274712800979614 0.21605446934700012 0.0 0.0 1.0 0.5727694630622864 0.4925420880317688 0 1.0 0 0.0 0 0.0 0 0.0 -0.23996877670288086 0.06254212558269501 0.21605446934700012 0.0 0.0 1.0 0.5710310339927673 0.506155252456665 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -0.49645113945007324 0.05184568464756012 0.21605446934700012 0.0 0.0 1.0 0.4257296025753021 0.5014607906341553 0 1.0 0 0.0 0 0.0 0 0.0 -0.4946584701538086 0.05900539457798004 0.21605446934700012 0.0 0.0 1.0 0.42713963985443115 0.509336531162262 0 1.0 0 0.0 0 0.0 0 0.0 -0.33991527557373047 0.04794420301914215 0.21605446934700012 0.0 0.0 1.0 0.5188910961151123 0.49268102645874023 0 1.0 0 0.0 0 0.0 0 0.0 -0.2378063201904297 0.049274712800979614 0.21605446934700012 0.0 0.0 1.0 0.5727694630622864 0.4925420880317688 0 1.0 0 0.0 0 0.0 0 0.0 -0.34168124198913574 0.05585309863090515 0.21605446934700012 0.0 0.0 1.0 0.5177088975906372 0.5020086765289307 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -0.49791789054870605 0.04428949952125549 0.21605446934700012 0.0 0.0 0.999969482421875 0.424457848072052 0.4930746555328369 0 1.0 0 0.0 0 0.0 0 0.0 -0.49645113945007324 0.05184568464756012 0.21605446934700012 0.0 0.0 1.0 0.4257296025753021 0.5014607906341553 0 1.0 0 0.0 0 0.0 0 0.0 -0.33991527557373047 0.04794420301914215 0.21605446934700012 0.0 0.0 1.0 0.5188910961151123 0.49268102645874023 0 1.0 0 0.0 0 0.0 0 0.0 -0.23626184463500977 0.03541135787963867 0.21605446934700012 0.0 0.0 1.0 0.5742851495742798 0.47815972566604614 0 1.0 0 0.0 0 0.0 0 0.0 -0.2378063201904297 0.049274712800979614 0.21605446934700012 0.0 0.0 1.0 0.5727694630622864 0.4925420880317688 0 1.0 0 0.0 0 0.0 0 0.0 -0.338470458984375 0.039541542530059814 0.21605446934700012 0.0 0.0 1.0 0.5199055075645447 0.4826669692993164 0 1.0 0 0.0 0 0.0 0 0.0 -0.23626184463500977 0.03541135787963867 0.21605446934700012 0.0 0.0 1.0 0.5742851495742798 0.47815972566604614 0 1.0 0 0.0 0 0.0 0 0.0 -0.33991527557373047 0.04794420301914215 0.21605446934700012 0.0 0.0 1.0 0.5188910961151123 0.49268102645874023 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -0.49905872344970703 0.03633683919906616 0.21605446934700012 0.0 0.0 1.0 0.4233233332633972 0.48416680097579956 0 1.0 0 0.0 0 0.0 0 0.0 -0.49791789054870605 0.04428949952125549 0.21605446934700012 0.0 0.0 0.999969482421875 0.424457848072052 0.4930746555328369 0 1.0 0 0.0 0 0.0 0 0.0 -0.33734679222106934 0.030645102262496948 0.21605446934700012 0.0 0.0 1.0 0.5207509398460388 0.47195643186569214 0 1.0 0 0.0 0 0.0 0 0.0 -0.23626184463500977 0.03541135787963867 0.21605446934700012 0.0 0.0 1.0 0.5742851495742798 0.47815972566604614 0 1.0 0 0.0 0 0.0 0 0.0 -0.338470458984375 0.039541542530059814 0.21605446934700012 0.0 0.0 1.0 0.5199055075645447 0.4826669692993164 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -0.49987339973449707 0.027987703680992126 0.21605446934700012 0.0 0.0 1.0 0.42232567071914673 0.4747272729873657 0 1.0 0 0.0 0 0.0 0 0.0 -0.49905872344970703 0.03633683919906616 0.21605446934700012 0.0 0.0 1.0 0.4233233332633972 0.48416680097579956 0 1.0 0 0.0 0 0.0 0 0.0 -0.33734679222106934 0.030645102262496948 0.21605446934700012 0.0 0.0 1.0 0.5207509398460388 0.47195643186569214 0 1.0 0 0.0 0 0.0 0 0.0 -0.235335111618042 0.020952075719833374 0.21605446934700012 0.0 0.0 0.999969482421875 0.575579822063446 0.46299588680267334 0 1.0 0 0.0 0 0.0 0 0.0 -0.23626184463500977 0.03541135787963867 0.21605446934700012 0.0 0.0 1.0 0.5742851495742798 0.47815972566604614 0 1.0 0 0.0 0 0.0 0 0.0 -0.3365440368652344 0.021254897117614746 0.21605446934700012 0.0 0.0 0.999969482421875 0.5214253664016724 0.46054428815841675 0 1.0 0 0.0 0 0.0 0 0.0 -0.235335111618042 0.020952075719833374 0.21605446934700012 0.0 0.0 0.999969482421875 0.575579822063446 0.46299588680267334 0 1.0 0 0.0 0 0.0 0 0.0 -0.33734679222106934 0.030645102262496948 0.21605446934700012 0.0 0.0 1.0 0.5207509398460388 0.47195643186569214 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -0.5003623962402344 0.019242078065872192 0.21605446934700012 0.0 0.0 1.0 0.4214646518230438 0.4647483229637146 0 1.0 0 0.0 0 0.0 0 0.0 -0.49987339973449707 0.027987703680992126 0.21605446934700012 0.0 0.0 1.0 0.42232567071914673 0.4747272729873657 0 1.0 0 0.0 0 0.0 0 0.0 -0.3360624313354492 0.011370927095413208 0.21605446934700012 0.0 0.0 0.999969482421875 0.5219259262084961 0.44843196868896484 0 1.0 0 0.0 0 0.0 0 0.0 -0.235335111618042 0.020952075719833374 0.21605446934700012 0.0 0.0 0.999969482421875 0.575579822063446 0.46299588680267334 0 1.0 0 0.0 0 0.0 0 0.0 -0.3365440368652344 0.021254897117614746 0.21605446934700012 0.0 0.0 0.999969482421875 0.5214253664016724 0.46054428815841675 0 1.0 0 0.0 0 0.0 0 0.0 -0.3360624313354492 0.011370927095413208 0.21605446934700012 0.0 0.0 0.999969482421875 0.5219259262084961 0.44843196868896484 0 1.0 0 0.0 0 0.0 0 0.0 -0.23502612113952637 0.005896851420402527 0.21605446934700012 0.0 0.0 1.0 0.5766531825065613 0.44704872369766235 0 1.0 0 0.0 0 0.0 0 0.0 -0.235335111618042 0.020952075719833374 0.21605446934700012 0.0 0.0 0.999969482421875 0.575579822063446 0.46299588680267334 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -0.5005252361297607 0.010100007057189941 0.21605446934700012 0.0 0.0 1.0 0.42074114084243774 0.4542253017425537 0 1.0 0 0.0 0 0.0 0 0.0 -0.5003623962402344 0.019242078065872192 0.21605446934700012 0.0 0.0 1.0 0.4214646518230438 0.4647483229637146 0 1.0 0 0.0 0 0.0 0 0.0 -0.33590197563171387 0.0009931772947311401 0.21605446934700012 0.0 0.0 1.0 0.5222489237785339 0.4356297254562378 0 1.0 0 0.0 0 0.0 0 0.0 -0.23502612113952637 0.005896851420402527 0.21605446934700012 0.0 0.0 1.0 0.5766531825065613 0.44704872369766235 0 1.0 0 0.0 0 0.0 0 0.0 -0.3360624313354492 0.011370927095413208 0.21605446934700012 0.0 0.0 0.999969482421875 0.5219259262084961 0.44843196868896484 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -0.5003988742828369 0.000676959753036499 0.21605446934700012 0.0 0.0 1.0 0.4201444983482361 0.44329583644866943 0 1.0 0 0.0 0 0.0 0 0.0 -0.5005252361297607 0.010100007057189941 0.21605446934700012 0.0 0.0 1.0 0.42074114084243774 0.4542253017425537 0 1.0 0 0.0 0 0.0 0 0.0 -0.33590197563171387 0.0009931772947311401 0.21605446934700012 0.0 0.0 1.0 0.5222489237785339 0.4356297254562378 0 1.0 0 0.0 0 0.0 0 0.0 -0.23534107208251953 -0.009677678346633911 0.21605446934700012 0.0 0.0 1.0 0.5774952173233032 0.430411159992218 0 1.0 0 0.0 0 0.0 0 0.0 -0.23502612113952637 0.005896851420402527 0.21605446934700012 0.0 0.0 1.0 0.5766531825065613 0.44704872369766235 0 1.0 0 0.0 0 0.0 0 0.0 -0.3360614776611328 -0.00876675546169281 0.21605446934700012 0.0 0.0 1.0 0.5223656892776489 0.42353588342666626 0 1.0 0 0.0 0 0.0 0 0.0 -0.23534107208251953 -0.009677678346633911 0.21605446934700012 0.0 0.0 1.0 0.5774952173233032 0.430411159992218 0 1.0 0 0.0 0 0.0 0 0.0 -0.33590197563171387 0.0009931772947311401 0.21605446934700012 0.0 0.0 1.0 0.5222489237785339 0.4356297254562378 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -0.5000193119049072 -0.008327707648277283 0.21605446934700012 0.0 0.0 0.999969482421875 0.4197072982788086 0.4327854514122009 0 1.0 0 0.0 0 0.0 0 0.0 -0.5003988742828369 0.000676959753036499 0.21605446934700012 0.0 0.0 1.0 0.4201444983482361 0.44329583644866943 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -0.4993870258331299 -0.016914010047912598 0.21605446934700012 0.0 0.0 1.0 0.41943296790122986 0.42270857095718384 0 1.0 0 0.0 0 0.0 0 0.0 -0.5000193119049072 -0.008327707648277283 0.21605446934700012 0.0 0.0 0.999969482421875 0.4197072982788086 0.4327854514122009 0 1.0 0 0.0 0 0.0 0 0.0 -0.33653950691223145 -0.018081560730934143 0.21605446934700012 0.0 0.0 1.0 0.5222747325897217 0.41196632385253906 0 1.0 0 0.0 0 0.0 0 0.0 -0.23534107208251953 -0.009677678346633911 0.21605446934700012 0.0 0.0 1.0 0.5774952173233032 0.430411159992218 0 1.0 0 0.0 0 0.0 0 0.0 -0.3360614776611328 -0.00876675546169281 0.21605446934700012 0.0 0.0 1.0 0.5223656892776489 0.42353588342666626 0 1.0 0 0.0 0 0.0 0 0.0 -0.33653950691223145 -0.018081560730934143 0.21605446934700012 0.0 0.0 1.0 0.5222747325897217 0.41196632385253906 0 1.0 0 0.0 0 0.0 0 0.0 -0.23628616333007812 -0.02464410662651062 0.21605446934700012 0.0 0.0 1.0 0.5780245661735535 0.41431325674057007 0 1.0 0 0.0 0 0.0 0 0.0 -0.23534107208251953 -0.009677678346633911 0.21605446934700012 0.0 0.0 1.0 0.5774952173233032 0.430411159992218 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -0.4985015392303467 -0.025081947445869446 0.21605446934700012 0.0 0.0 1.0 0.4193257689476013 0.41307467222213745 0 1.0 0 0.0 0 0.0 0 0.0 -0.4993870258331299 -0.016914010047912598 0.21605446934700012 0.0 0.0 1.0 0.41943296790122986 0.42270857095718384 0 1.0 0 0.0 0 0.0 0 0.0 -0.33733606338500977 -0.02695123851299286 0.21605446934700012 0.0 0.0 0.999969482421875 0.5219700336456299 0.4009416699409485 0 1.0 0 0.0 0 0.0 0 0.0 -0.23628616333007812 -0.02464410662651062 0.21605446934700012 0.0 0.0 1.0 0.5780245661735535 0.41431325674057007 0 1.0 0 0.0 0 0.0 0 0.0 -0.33653950691223145 -0.018081560730934143 0.21605446934700012 0.0 0.0 1.0 0.5222747325897217 0.41196632385253906 0 1.0 0 0.0 0 0.0 0 0.0 -0.33733606338500977 -0.02695123851299286 0.21605446934700012 0.0 0.0 0.999969482421875 0.5219700336456299 0.4009416699409485 0 1.0 0 0.0 0 0.0 0 0.0 -0.23786115646362305 -0.039002448320388794 0.21605446934700012 0.0 0.0 1.0 0.5782297849655151 0.39878058433532715 0 1.0 0 0.0 0 0.0 0 0.0 -0.23628616333007812 -0.02464410662651062 0.21605446934700012 0.0 0.0 1.0 0.5780245661735535 0.41431325674057007 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -0.4973633289337158 -0.03283150494098663 0.21605446934700012 0.0 0.0 1.0 0.41938960552215576 0.40388965606689453 0 1.0 0 0.0 0 0.0 0 0.0 -0.4985015392303467 -0.025081947445869446 0.21605446934700012 0.0 0.0 1.0 0.4193257689476013 0.41307467222213745 0 1.0 0 0.0 0 0.0 0 0.0 -0.3384511470794678 -0.03537578880786896 0.21605446934700012 0.0 0.0 0.999969482421875 0.5214453935623169 0.3904763460159302 0 1.0 0 0.0 0 0.0 0 0.0 -0.23786115646362305 -0.039002448320388794 0.21605446934700012 0.0 0.0 1.0 0.5782297849655151 0.39878058433532715 0 1.0 0 0.0 0 0.0 0 0.0 -0.33733606338500977 -0.02695123851299286 0.21605446934700012 0.0 0.0 0.999969482421875 0.5219700336456299 0.4009416699409485 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -0.4959719181060791 -0.040162697434425354 0.21605446934700012 0.0 0.0 0.999969482421875 0.41962891817092896 0.39515578746795654 0 1.0 0 0.0 0 0.0 0 0.0 -0.4973633289337158 -0.03283150494098663 0.21605446934700012 0.0 0.0 1.0 0.41938960552215576 0.40388965606689453 0 1.0 0 0.0 0 0.0 0 0.0 -0.33988499641418457 -0.04335521161556244 0.21605446934700012 0.0 0.0 0.999969482421875 0.5206946134567261 0.38057905435562134 0 1.0 0 0.0 0 0.0 0 0.0 -0.23786115646362305 -0.039002448320388794 0.21605446934700012 0.0 0.0 1.0 0.5782297849655151 0.39878058433532715 0 1.0 0 0.0 0 0.0 0 0.0 -0.3384511470794678 -0.03537578880786896 0.21605446934700012 0.0 0.0 0.999969482421875 0.5214453935623169 0.3904763460159302 0 1.0 0 0.0 0 0.0 0 0.0 -0.33988499641418457 -0.04335521161556244 0.21605446934700012 0.0 0.0 0.999969482421875 0.5206946134567261 0.38057905435562134 0 1.0 0 0.0 0 0.0 0 0.0 -0.2400660514831543 -0.05275268852710724 0.21605446934700012 0.0 0.0 1.0 0.5780972838401794 0.38382643461227417 0 1.0 0 0.0 0 0.0 0 0.0 -0.23786115646362305 -0.039002448320388794 0.21605446934700012 0.0 0.0 1.0 0.5782297849655151 0.39878058433532715 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -0.4943277835845947 -0.04707552492618561 0.21605446934700012 0.0 0.0 1.0 0.4200480282306671 0.38687312602996826 0 1.0 0 0.0 0 0.0 0 0.0 -0.4959719181060791 -0.040162697434425354 0.21605446934700012 0.0 0.0 0.999969482421875 0.41962891817092896 0.39515578746795654 0 1.0 0 0.0 0 0.0 0 0.0 -0.34163761138916016 -0.0508895069360733 0.21605446934700012 0.0 0.0 0.999969482421875 0.5197115540504456 0.37125450372695923 0 1.0 0 0.0 0 0.0 0 0.0 -0.2400660514831543 -0.05275268852710724 0.21605446934700012 0.0 0.0 1.0 0.5780972838401794 0.38382643461227417 0 1.0 0 0.0 0 0.0 0 0.0 -0.33988499641418457 -0.04335521161556244 0.21605446934700012 0.0 0.0 0.999969482421875 0.5206946134567261 0.38057905435562134 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -0.4924304485321045 -0.0535699725151062 0.21605446934700012 0.0 0.0 0.999969482421875 0.4206518530845642 0.3790395259857178 0 1.0 0 0.0 0 0.0 0 0.0 -0.4943277835845947 -0.04707552492618561 0.21605446934700012 0.0 0.0 1.0 0.4200480282306671 0.38687312602996826 0 1.0 0 0.0 0 0.0 0 0.0 -0.34370875358581543 -0.05797867476940155 0.21605446934700012 0.0 0.0 1.0 0.5184904336929321 0.36250418424606323 0 1.0 0 0.0 0 0.0 0 0.0 -0.2400660514831543 -0.05275268852710724 0.21605446934700012 0.0 0.0 1.0 0.5780972838401794 0.38382643461227417 0 1.0 0 0.0 0 0.0 0 0.0 -0.34163761138916016 -0.0508895069360733 0.21605446934700012 0.0 0.0 0.999969482421875 0.5197115540504456 0.37125450372695923 0 1.0 0 0.0 0 0.0 0 0.0 -0.34370875358581543 -0.05797867476940155 0.21605446934700012 0.0 0.0 1.0 0.5184904336929321 0.36250418424606323 0 1.0 0 0.0 0 0.0 0 0.0 -0.24290084838867188 -0.06589483469724655 0.21605446934700012 0.0 0.0 1.0 0.5776110291481018 0.3694540858268738 0 1.0 0 0.0 0 0.0 0 0.0 -0.2400660514831543 -0.05275268852710724 0.21605446934700012 0.0 0.0 1.0 0.5780972838401794 0.38382643461227417 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -0.4902803897857666 -0.05964605510234833 0.21605446934700012 0.0 0.0 1.0 0.42144501209259033 0.3716520071029663 0 1.0 0 0.0 0 0.0 0 0.0 -0.4924304485321045 -0.0535699725151062 0.21605446934700012 0.0 0.0 0.999969482421875 0.4206518530845642 0.3790395259857178 0 1.0 0 0.0 0 0.0 0 0.0 -0.3460984230041504 -0.06462271511554718 0.21605446934700012 0.0 0.0 1.0 0.517025351524353 0.35432738065719604 0 1.0 0 0.0 0 0.0 0 0.0 -0.24290084838867188 -0.06589483469724655 0.21605446934700012 0.0 0.0 1.0 0.5776110291481018 0.3694540858268738 0 1.0 0 0.0 0 0.0 0 0.0 -0.34370875358581543 -0.05797867476940155 0.21605446934700012 0.0 0.0 1.0 0.5184904336929321 0.36250418424606323 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -0.48787713050842285 -0.06530377268791199 0.21605446934700012 0.0 0.0 1.0 0.4224327802658081 0.36470645666122437 0 1.0 0 0.0 0 0.0 0 0.0 -0.4902803897857666 -0.05964605510234833 0.21605446934700012 0.0 0.0 1.0 0.42144501209259033 0.3716520071029663 0 1.0 0 0.0 0 0.0 0 0.0 -0.34880685806274414 -0.07082163542509079 0.21605446934700012 0.0 0.0 0.999969482421875 0.5153106451034546 0.34672248363494873 0 1.0 0 0.0 0 0.0 0 0.0 -0.24290084838867188 -0.06589483469724655 0.21605446934700012 0.0 0.0 1.0 0.5776110291481018 0.3694540858268738 0 1.0 0 0.0 0 0.0 0 0.0 -0.3460984230041504 -0.06462271511554718 0.21605446934700012 0.0 0.0 1.0 0.517025351524353 0.35432738065719604 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -0.48522114753723145 -0.07054311782121658 0.21605446934700012 0.0 0.0 0.999969482421875 0.4236200749874115 0.3581991195678711 0 1.0 0 0.0 0 0.0 0 0.0 -0.48787713050842285 -0.06530377268791199 0.21605446934700012 0.0 0.0 1.0 0.4224327802658081 0.36470645666122437 0 1.0 0 0.0 0 0.0 0 0.0 -0.34880685806274414 -0.07082163542509079 0.21605446934700012 0.0 0.0 0.999969482421875 0.5153106451034546 0.34672248363494873 0 1.0 0 0.0 0 0.0 0 0.0 -0.24636578559875488 -0.07842888683080673 0.21605446934700012 0.0 0.0 1.0 0.576752245426178 0.35565972328186035 0 1.0 0 0.0 0 0.0 0 0.0 -0.24290084838867188 -0.06589483469724655 0.21605446934700012 0.0 0.0 1.0 0.5776110291481018 0.3694540858268738 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -0.4823117256164551 -0.07536409795284271 0.21605446934700012 0.0 0.0 1.0 0.42501261830329895 0.3521260619163513 0 1.0 0 0.0 0 0.0 0 0.0 -0.48522114753723145 -0.07054311782121658 0.21605446934700012 0.0 0.0 0.999969482421875 0.4236200749874115 0.3581991195678711 0 1.0 0 0.0 0 0.0 0 0.0 -0.3518340587615967 -0.07657542824745178 0.21605446934700012 0.0 0.0 0.999969482421875 0.5133412480354309 0.33968716859817505 0 1.0 0 0.0 0 0.0 0 0.0 -0.24636578559875488 -0.07842888683080673 0.21605446934700012 0.0 0.0 1.0 0.576752245426178 0.35565972328186035 0 1.0 0 0.0 0 0.0 0 0.0 -0.34880685806274414 -0.07082163542509079 0.21605446934700012 0.0 0.0 0.999969482421875 0.5153106451034546 0.34672248363494873 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -0.477933406829834 -0.0816299095749855 0.21605446934700012 0.0 0.0 1.0 0.4272269308567047 0.3441292643547058 0 1.0 0 0.0 0 0.0 0 0.0 -0.4823117256164551 -0.07536409795284271 0.21605446934700012 0.0 0.0 1.0 0.42501261830329895 0.3521260619163513 0 1.0 0 0.0 0 0.0 0 0.0 -0.3551797866821289 -0.08188409358263016 0.21605446934700012 0.0 0.0 1.0 0.511112630367279 0.33321988582611084 0 1.0 0 0.0 0 0.0 0 0.0 -0.24636578559875488 -0.07842888683080673 0.21605446934700012 0.0 0.0 1.0 0.576752245426178 0.35565972328186035 0 1.0 0 0.0 0 0.0 0 0.0 -0.3518340587615967 -0.07657542824745178 0.21605446934700012 0.0 0.0 0.999969482421875 0.5133412480354309 0.33968716859817505 0 1.0 0 0.0 0 0.0 0 0.0 -0.3551797866821289 -0.08188409358263016 0.21605446934700012 0.0 0.0 1.0 0.511112630367279 0.33321988582611084 0 1.0 0 0.0 0 0.0 0 0.0 -0.2504608631134033 -0.09035484492778778 0.21605446934700012 0.0 0.0 1.0 0.5754992365837097 0.3424345850944519 0 1.0 0 0.0 0 0.0 0 0.0 -0.24636578559875488 -0.07842888683080673 0.21605446934700012 0.0 0.0 1.0 0.576752245426178 0.35565972328186035 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -0.47332167625427246 -0.08735086768865585 0.21605446934700012 0.0 0.0 0.999969482421875 0.42968177795410156 0.3367283344268799 0 1.0 0 0.0 0 0.0 0 0.0 -0.477933406829834 -0.0816299095749855 0.21605446934700012 0.0 0.0 1.0 0.4272269308567047 0.3441292643547058 0 1.0 0 0.0 0 0.0 0 0.0 -0.3588440418243408 -0.08674763888120651 0.21605446934700012 0.0 0.0 1.0 0.5086210370063782 0.3273197412490845 0 1.0 0 0.0 0 0.0 0 0.0 -0.2504608631134033 -0.09035484492778778 0.21605446934700012 0.0 0.0 1.0 0.5754992365837097 0.3424345850944519 0 1.0 0 0.0 0 0.0 0 0.0 -0.3551797866821289 -0.08188409358263016 0.21605446934700012 0.0 0.0 1.0 0.511112630367279 0.33321988582611084 0 1.0 0 0.0 0 0.0 0 0.0 -0.3627345561981201 -0.0911952406167984 0.21605446934700012 0.0 0.0 1.0 0.5059289336204529 0.32195907831192017 0 1.0 0 0.0 0 0.0 0 0.0 -0.2504608631134033 -0.09035484492778778 0.21605446934700012 0.0 0.0 1.0 0.5754992365837097 0.3424345850944519 0 1.0 0 0.0 0 0.0 0 0.0 -0.3588440418243408 -0.08674763888120651 0.21605446934700012 0.0 0.0 1.0 0.5086210370063782 0.3273197412490845 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -0.4684762954711914 -0.09252697229385376 0.21605446934700012 0.0 0.0 1.0 0.43238383531570435 0.3299248218536377 0 1.0 0 0.0 0 0.0 0 0.0 -0.47332167625427246 -0.08735086768865585 0.21605446934700012 0.0 0.0 0.999969482421875 0.42968177795410156 0.3367283344268799 0 1.0 0 0.0 0 0.0 0 0.0 -0.3627345561981201 -0.0911952406167984 0.21605446934700012 0.0 0.0 1.0 0.5059289336204529 0.32195907831192017 0 1.0 0 0.0 0 0.0 0 0.0 -0.255185604095459 -0.1016727089881897 0.21605446934700012 0.0 0.0 1.0 0.5738273859024048 0.3297680616378784 0 1.0 0 0.0 0 0.0 0 0.0 -0.2504608631134033 -0.09035484492778778 0.21605446934700012 0.0 0.0 1.0 0.5754992365837097 0.3424345850944519 0 1.0 0 0.0 0 0.0 0 0.0 -0.3667590618133545 -0.09525609761476517 0.21605446934700012 0.0 0.0 1.0 0.5031017065048218 0.3171094059944153 0 1.0 0 0.0 0 0.0 0 0.0 -0.255185604095459 -0.1016727089881897 0.21605446934700012 0.0 0.0 1.0 0.5738273859024048 0.3297680616378784 0 1.0 0 0.0 0 0.0 0 0.0 -0.3627345561981201 -0.0911952406167984 0.21605446934700012 0.0 0.0 1.0 0.5059289336204529 0.32195907831192017 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -0.4633975028991699 -0.09715822339057922 0.21605446934700012 0.0 0.0 1.0 0.43533870577812195 0.32372188568115234 0 1.0 0 0.0 0 0.0 0 0.0 -0.4684762954711914 -0.09252697229385376 0.21605446934700012 0.0 0.0 1.0 0.43238383531570435 0.3299248218536377 0 1.0 0 0.0 0 0.0 0 0.0 -0.37091708183288574 -0.09893020987510681 0.21605446934700012 0.0 0.0 1.0 0.5001419186592102 0.3127697706222534 0 1.0 0 0.0 0 0.0 0 0.0 -0.255185604095459 -0.1016727089881897 0.21605446934700012 0.0 0.0 1.0 0.5738273859024048 0.3297680616378784 0 1.0 0 0.0 0 0.0 0 0.0 -0.3667590618133545 -0.09525609761476517 0.21605446934700012 0.0 0.0 1.0 0.5031017065048218 0.3171094059944153 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 0.21605446934700012 0.0 0.0 1.0 0.40608155727386475 0.3021705150604248 0 1.0 0 0.0 0 0.0 0 0.0 -0.4633975028991699 -0.09715822339057922 0.21605446934700012 0.0 0.0 1.0 0.43533870577812195 0.32372188568115234 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 0.21605446934700012 0.0 0.0 1.0 0.40608155727386475 0.3021705150604248 0 1.0 0 0.0 0 0.0 0 0.0 -0.458085298538208 -0.10124462097883224 0.21605446934700012 0.0 0.0 1.0 0.43855130672454834 0.31812357902526855 0 1.0 0 0.0 0 0.0 0 0.0 -0.4633975028991699 -0.09715822339057922 0.21605446934700012 0.0 0.0 1.0 0.43533870577812195 0.32372188568115234 0 1.0 0 0.0 0 0.0 0 0.0 -0.37520909309387207 -0.10221756994724274 0.21605446934700012 0.0 0.0 1.0 0.49705228209495544 0.30893921852111816 0 1.0 0 0.0 0 0.0 0 0.0 -0.255185604095459 -0.1016727089881897 0.21605446934700012 0.0 0.0 1.0 0.5738273859024048 0.3297680616378784 0 1.0 0 0.0 0 0.0 0 0.0 -0.37091708183288574 -0.09893020987510681 0.21605446934700012 0.0 0.0 1.0 0.5001419186592102 0.3127697706222534 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 0.21605446934700012 0.0 0.0 1.0 0.40608155727386475 0.3021705150604248 0 1.0 0 0.0 0 0.0 0 0.0 -0.45253944396972656 -0.10478616505861282 0.21605446934700012 0.0 0.0 1.0 0.4420255124568939 0.31313610076904297 0 1.0 0 0.0 0 0.0 0 0.0 -0.458085298538208 -0.10124462097883224 0.21605446934700012 0.0 0.0 1.0 0.43855130672454834 0.31812357902526855 0 1.0 0 0.0 0 0.0 0 0.0 -0.37520909309387207 -0.10221756994724274 0.21605446934700012 0.0 0.0 1.0 0.49705228209495544 0.30893921852111816 0 1.0 0 0.0 0 0.0 0 0.0 -0.2605404853820801 -0.11238247901201248 0.21605446934700012 0.0 0.0 1.0 0.5717080235481262 0.31764930486679077 0 1.0 0 0.0 0 0.0 0 0.0 -0.255185604095459 -0.1016727089881897 0.21605446934700012 0.0 0.0 1.0 0.5738273859024048 0.3297680616378784 0 1.0 0 0.0 0 0.0 0 0.0 -0.3796348571777344 -0.10511818528175354 0.21605446934700012 0.0 0.0 1.0 0.4938368499279022 0.3056175708770752 0 1.0 0 0.0 0 0.0 0 0.0 -0.2605404853820801 -0.11238247901201248 0.21605446934700012 0.0 0.0 1.0 0.5717080235481262 0.31764930486679077 0 1.0 0 0.0 0 0.0 0 0.0 -0.37520909309387207 -0.10221756994724274 0.21605446934700012 0.0 0.0 1.0 0.49705228209495544 0.30893921852111816 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 0.21605446934700012 0.0 0.0 1.0 0.40608155727386475 0.3021705150604248 0 1.0 0 0.0 0 0.0 0 0.0 -0.4467599391937256 -0.10778285562992096 0.21605446934700012 0.0 0.0 1.0 0.4457634687423706 0.30876803398132324 0 1.0 0 0.0 0 0.0 0 0.0 -0.45253944396972656 -0.10478616505861282 0.21605446934700012 0.0 0.0 1.0 0.4420255124568939 0.31313610076904297 0 1.0 0 0.0 0 0.0 0 0.0 -0.38419437408447266 -0.10763204842805862 0.21605446934700012 0.0 0.0 0.999969482421875 0.4905005395412445 0.3028048276901245 0 1.0 0 0.0 0 0.0 0 0.0 -0.2605404853820801 -0.11238247901201248 0.21605446934700012 0.0 0.0 1.0 0.5717080235481262 0.31764930486679077 0 1.0 0 0.0 0 0.0 0 0.0 -0.3796348571777344 -0.10511818528175354 0.21605446934700012 0.0 0.0 1.0 0.4938368499279022 0.3056175708770752 0 1.0 0 0.0 0 0.0 0 0.0 -0.3888876438140869 -0.10975916683673859 0.21605446934700012 0.0 0.0 0.999969482421875 0.48704904317855835 0.30050182342529297 0 1.0 0 0.0 0 0.0 0 0.0 -0.2605404853820801 -0.11238247901201248 0.21605446934700012 0.0 0.0 1.0 0.5717080235481262 0.31764930486679077 0 1.0 0 0.0 0 0.0 0 0.0 -0.38419437408447266 -0.10763204842805862 0.21605446934700012 0.0 0.0 0.999969482421875 0.4905005395412445 0.3028048276901245 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 0.21605446934700012 0.0 0.0 1.0 0.40608155727386475 0.3021705150604248 0 1.0 0 0.0 0 0.0 0 0.0 -0.4407472610473633 -0.11023469269275665 0.21605446934700012 0.0 0.0 1.0 0.449765145778656 0.3050304651260376 0 1.0 0 0.0 0 0.0 0 0.0 -0.4467599391937256 -0.10778285562992096 0.21605446934700012 0.0 0.0 1.0 0.4457634687423706 0.30876803398132324 0 1.0 0 0.0 0 0.0 0 0.0 -0.39371466636657715 -0.11149953305721283 0.21605446934700012 0.0 0.0 1.0 0.48348918557167053 0.2987098693847656 0 1.0 0 0.0 0 0.0 0 0.0 -0.2605404853820801 -0.11238247901201248 0.21605446934700012 0.0 0.0 1.0 0.5717080235481262 0.31764930486679077 0 1.0 0 0.0 0 0.0 0 0.0 -0.3888876438140869 -0.10975916683673859 0.21605446934700012 0.0 0.0 0.999969482421875 0.48704904317855835 0.30050182342529297 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 0.21605446934700012 0.0 0.0 1.0 0.40608155727386475 0.3021705150604248 0 1.0 0 0.0 0 0.0 0 0.0 -0.43450093269348145 -0.1121416762471199 0.21605446934700012 0.0 0.0 1.0 0.4540289342403412 0.30193692445755005 0 1.0 0 0.0 0 0.0 0 0.0 -0.4407472610473633 -0.11023469269275665 0.21605446934700012 0.0 0.0 1.0 0.449765145778656 0.3050304651260376 0 1.0 0 0.0 0 0.0 0 0.0 -0.39867544174194336 -0.11285315454006195 0.21605446934700012 0.0 0.0 1.0 0.4798286557197571 0.29743075370788574 0 1.0 0 0.0 0 0.0 0 0.0 -0.2605404853820801 -0.11238247901201248 0.21605446934700012 0.0 0.0 1.0 0.5717080235481262 0.31764930486679077 0 1.0 0 0.0 0 0.0 0 0.0 -0.39371466636657715 -0.11149953305721283 0.21605446934700012 0.0 0.0 1.0 0.48348918557167053 0.2987098693847656 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 0.21605446934700012 0.0 0.0 1.0 0.40608155727386475 0.3021705150604248 0 1.0 0 0.0 0 0.0 0 0.0 -0.4280209541320801 -0.11350381374359131 0.21605446934700012 0.0 0.0 1.0 0.4585503935813904 0.2995036840438843 0 1.0 0 0.0 0 0.0 0 0.0 -0.43450093269348145 -0.1121416762471199 0.21605446934700012 0.0 0.0 1.0 0.4540289342403412 0.30193692445755005 0 1.0 0 0.0 0 0.0 0 0.0 -0.39867544174194336 -0.11285315454006195 0.21605446934700012 0.0 0.0 1.0 0.4798286557197571 0.29743075370788574 0 1.0 0 0.0 0 0.0 0 0.0 -0.2665255069732666 -0.12248415499925613 0.21605446934700012 0.0 0.0 0.999969482421875 0.5691090226173401 0.30606985092163086 0 1.0 0 0.0 0 0.0 0 0.0 -0.2605404853820801 -0.11238247901201248 0.21605446934700012 0.0 0.0 1.0 0.5717080235481262 0.31764930486679077 0 1.0 0 0.0 0 0.0 0 0.0 -0.40377020835876465 -0.11382002383470535 0.21605446934700012 0.0 0.0 1.0 0.4760758876800537 0.29666680097579956 0 1.0 0 0.0 0 0.0 0 0.0 -0.2665255069732666 -0.12248415499925613 0.21605446934700012 0.0 0.0 0.999969482421875 0.5691090226173401 0.30606985092163086 0 1.0 0 0.0 0 0.0 0 0.0 -0.39867544174194336 -0.11285315454006195 0.21605446934700012 0.0 0.0 1.0 0.4798286557197571 0.29743075370788574 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 0.21605446934700012 0.0 0.0 1.0 0.40608155727386475 0.3021705150604248 0 1.0 0 0.0 0 0.0 0 0.0 -0.4213075637817383 -0.11432109773159027 0.21605446934700012 0.0 0.0 1.0 0.4633219242095947 0.2977495789527893 0 1.0 0 0.0 0 0.0 0 0.0 -0.4280209541320801 -0.11350381374359131 0.21605446934700012 0.0 0.0 1.0 0.4585503935813904 0.2995036840438843 0 1.0 0 0.0 0 0.0 0 0.0 -0.4089984893798828 -0.11440014839172363 0.21605446934700012 0.0 0.0 0.999969482421875 0.472240686416626 0.2964206337928772 0 1.0 0 0.0 0 0.0 0 0.0 -0.2665255069732666 -0.12248415499925613 0.21605446934700012 0.0 0.0 0.999969482421875 0.5691090226173401 0.30606985092163086 0 1.0 0 0.0 0 0.0 0 0.0 -0.40377020835876465 -0.11382002383470535 0.21605446934700012 0.0 0.0 1.0 0.4760758876800537 0.29666680097579956 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 0.21605446934700012 0.0 0.0 1.0 0.40608155727386475 0.3021705150604248 0 1.0 0 0.0 0 0.0 0 0.0 -0.41436076164245605 -0.1145935207605362 0.21605446934700012 0.0 0.0 0.999969482421875 0.468332976102829 0.29669511318206787 0 1.0 0 0.0 0 0.0 0 0.0 -0.4213075637817383 -0.11432109773159027 0.21605446934700012 0.0 0.0 1.0 0.4633219242095947 0.2977495789527893 0 1.0 0 0.0 0 0.0 0 0.0 -0.41436076164245605 -0.1145935207605362 0.21605446934700012 0.0 0.0 0.999969482421875 0.468332976102829 0.29669511318206787 0 1.0 0 0.0 0 0.0 0 0.0 -0.2665255069732666 -0.12248415499925613 0.21605446934700012 0.0 0.0 0.999969482421875 0.5691090226173401 0.30606985092163086 0 1.0 0 0.0 0 0.0 0 0.0 -0.4089984893798828 -0.11440014839172363 0.21605446934700012 0.0 0.0 0.999969482421875 0.472240686416626 0.2964206337928772 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 0.21605446934700012 0.0 0.0 1.0 0.40608155727386475 0.3021705150604248 0 1.0 0 0.0 0 0.0 0 0.0 -0.2665255069732666 -0.12248415499925613 0.21605446934700012 0.0 0.0 0.999969482421875 0.5691090226173401 0.30606985092163086 0 1.0 0 0.0 0 0.0 0 0.0 -0.41436076164245605 -0.1145935207605362 0.21605446934700012 0.0 0.0 0.999969482421875 0.468332976102829 0.29669511318206787 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 0.21605446934700012 0.0 0.0 1.0 0.40608155727386475 0.3021705150604248 0 1.0 0 0.0 0 0.0 0 0.0 -0.27314019203186035 -0.13197773694992065 0.21605446934700012 0.0 0.0 1.0 0.5659947991371155 0.29502570629119873 0 1.0 0 0.0 0 0.0 0 0.0 -0.2665255069732666 -0.12248415499925613 0.21605446934700012 0.0 0.0 0.999969482421875 0.5691090226173401 0.30606985092163086 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.4008871912956238 0.25336402654647827 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 0.21605446934700012 0.0 0.0 1.0 0.40608155727386475 0.3021705150604248 0 1.0 0 0.0 0 0.0 0 0.0 -0.5030343532562256 -0.1343943178653717 0.21605446934700012 0.0 0.0 1.0 0.40782004594802856 0.29606229066848755 0 1.0 0 0.0 0 0.0 0 0.0 -0.27314019203186035 -0.13197773694992065 0.21605446934700012 0.0 0.0 1.0 0.5659947991371155 0.29502570629119873 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 0.21605446934700012 0.0 0.0 1.0 0.40608155727386475 0.3021705150604248 0 1.0 0 0.0 0 0.0 0 0.0 -0.5030343532562256 -0.1343943178653717 0.21605446934700012 0.0 0.0 1.0 0.40782004594802856 0.29606229066848755 0 1.0 0 0.0 0 0.0 0 0.0 -0.28038525581359863 -0.14086322486400604 0.21605446934700012 0.0 0.0 1.0 0.562325656414032 0.2845187783241272 0 1.0 0 0.0 0 0.0 0 0.0 -0.27314019203186035 -0.13197773694992065 0.21605446934700012 0.0 0.0 1.0 0.5659947991371155 0.29502570629119873 0 1.0 0 0.0 0 0.0 0 0.0 -0.49911928176879883 -0.13927245140075684 0.21605446934700012 0.0 0.0 1.0 0.40969035029411316 0.2901642918586731 0 1.0 0 0.0 0 0.0 0 0.0 -0.28038525581359863 -0.14086322486400604 0.21605446934700012 0.0 0.0 1.0 0.562325656414032 0.2845187783241272 0 1.0 0 0.0 0 0.0 0 0.0 -0.5030343532562256 -0.1343943178653717 0.21605446934700012 0.0 0.0 1.0 0.40782004594802856 0.29606229066848755 0 1.0 0 0.0 0 0.0 0 0.0 -0.4950852394104004 -0.14393897354602814 0.21605446934700012 0.0 0.0 1.0 0.41169679164886475 0.2844768166542053 0 1.0 0 0.0 0 0.0 0 0.0 -0.28038525581359863 -0.14086322486400604 0.21605446934700012 0.0 0.0 1.0 0.562325656414032 0.2845187783241272 0 1.0 0 0.0 0 0.0 0 0.0 -0.49911928176879883 -0.13927245140075684 0.21605446934700012 0.0 0.0 1.0 0.40969035029411316 0.2901642918586731 0 1.0 0 0.0 0 0.0 0 0.0 -0.4950852394104004 -0.14393897354602814 0.21605446934700012 0.0 0.0 1.0 0.41169679164886475 0.2844768166542053 0 1.0 0 0.0 0 0.0 0 0.0 -0.28807997703552246 -0.1490871012210846 0.21605446934700012 0.0 0.0 1.0 0.5581673979759216 0.27465975284576416 0 1.0 0 0.0 0 0.0 0 0.0 -0.28038525581359863 -0.14086322486400604 0.21605446934700012 0.0 0.0 1.0 0.562325656414032 0.2845187783241272 0 1.0 0 0.0 0 0.0 0 0.0 -0.49093198776245117 -0.14839386940002441 0.21605446934700012 0.0 0.0 1.0 0.4138440191745758 0.27900052070617676 0 1.0 0 0.0 0 0.0 0 0.0 -0.28807997703552246 -0.1490871012210846 0.21605446934700012 0.0 0.0 1.0 0.5581673979759216 0.27465975284576416 0 1.0 0 0.0 0 0.0 0 0.0 -0.4950852394104004 -0.14393897354602814 0.21605446934700012 0.0 0.0 1.0 0.41169679164886475 0.2844768166542053 0 1.0 0 0.0 0 0.0 0 0.0 -0.48665952682495117 -0.15263715386390686 0.21605446934700012 0.0 0.0 1.0 0.41613665223121643 0.27373653650283813 0 1.0 0 0.0 0 0.0 0 0.0 -0.28807997703552246 -0.1490871012210846 0.21605446934700012 0.0 0.0 1.0 0.5581673979759216 0.27465975284576416 0 1.0 0 0.0 0 0.0 0 0.0 -0.49093198776245117 -0.14839386940002441 0.21605446934700012 0.0 0.0 1.0 0.4138440191745758 0.27900052070617676 0 1.0 0 0.0 0 0.0 0 0.0 -0.48665952682495117 -0.15263715386390686 0.21605446934700012 0.0 0.0 1.0 0.41613665223121643 0.27373653650283813 0 1.0 0 0.0 0 0.0 0 0.0 -0.29604482650756836 -0.1565958559513092 0.21605446934700012 0.0 0.0 1.0 0.553600549697876 0.2655588388442993 0 1.0 0 0.0 0 0.0 0 0.0 -0.28807997703552246 -0.1490871012210846 0.21605446934700012 0.0 0.0 1.0 0.5581673979759216 0.27465975284576416 0 1.0 0 0.0 0 0.0 0 0.0 -0.4822678565979004 -0.15666882693767548 0.21605446934700012 0.0 0.0 0.999969482421875 0.41857919096946716 0.26868611574172974 0 1.0 0 0.0 0 0.0 0 0.0 -0.29604482650756836 -0.1565958559513092 0.21605446934700012 0.0 0.0 1.0 0.553600549697876 0.2655588388442993 0 1.0 0 0.0 0 0.0 0 0.0 -0.48665952682495117 -0.15263715386390686 0.21605446934700012 0.0 0.0 1.0 0.41613665223121643 0.27373653650283813 0 1.0 0 0.0 0 0.0 0 0.0 -0.4822678565979004 -0.15666882693767548 0.21605446934700012 0.0 0.0 0.999969482421875 0.41857919096946716 0.26868611574172974 0 1.0 0 0.0 0 0.0 0 0.0 -0.30427980422973633 -0.16338948905467987 0.21605446934700012 0.0 0.0 1.0 0.5486077070236206 0.2572265863418579 0 1.0 0 0.0 0 0.0 0 0.0 -0.29604482650756836 -0.1565958559513092 0.21605446934700012 0.0 0.0 1.0 0.553600549697876 0.2655588388442993 0 1.0 0 0.0 0 0.0 0 0.0 -0.47775697708129883 -0.16048887372016907 0.21605446934700012 0.0 0.0 1.0 0.4211760461330414 0.2638515830039978 0 1.0 0 0.0 0 0.0 0 0.0 -0.30427980422973633 -0.16338948905467987 0.21605446934700012 0.0 0.0 1.0 0.5486077070236206 0.2572265863418579 0 1.0 0 0.0 0 0.0 0 0.0 -0.4822678565979004 -0.15666882693767548 0.21605446934700012 0.0 0.0 0.999969482421875 0.41857919096946716 0.26868611574172974 0 1.0 0 0.0 0 0.0 0 0.0 -0.4731268882751465 -0.16409730911254883 0.21605446934700012 0.0 0.0 1.0 0.42393144965171814 0.2592355012893677 0 1.0 0 0.0 0 0.0 0 0.0 -0.30427980422973633 -0.16338948905467987 0.21605446934700012 0.0 0.0 1.0 0.5486077070236206 0.2572265863418579 0 1.0 0 0.0 0 0.0 0 0.0 -0.47775697708129883 -0.16048887372016907 0.21605446934700012 0.0 0.0 1.0 0.4211760461330414 0.2638515830039978 0 1.0 0 0.0 0 0.0 0 0.0 -0.4731268882751465 -0.16409730911254883 0.21605446934700012 0.0 0.0 1.0 0.42393144965171814 0.2592355012893677 0 1.0 0 0.0 0 0.0 0 0.0 -0.31278467178344727 -0.1694680154323578 0.21605446934700012 0.0 0.0 1.0 0.5431747436523438 0.24967700242996216 0 1.0 0 0.0 0 0.0 0 0.0 -0.30427980422973633 -0.16338948905467987 0.21605446934700012 0.0 0.0 1.0 0.5486077070236206 0.2572265863418579 0 1.0 0 0.0 0 0.0 0 0.0 -0.46837782859802246 -0.16749413311481476 0.21605446934700012 0.0 0.0 1.0 0.4268491864204407 0.25484126806259155 0 1.0 0 0.0 0 0.0 0 0.0 -0.31278467178344727 -0.1694680154323578 0.21605446934700012 0.0 0.0 1.0 0.5431747436523438 0.24967700242996216 0 1.0 0 0.0 0 0.0 0 0.0 -0.4731268882751465 -0.16409730911254883 0.21605446934700012 0.0 0.0 1.0 0.42393144965171814 0.2592355012893677 0 1.0 0 0.0 0 0.0 0 0.0 -0.46350932121276855 -0.17067933082580566 0.21605445444583893 0.0 0.0 1.0 0.429933100938797 0.2506728768348694 0 1.0 0 0.0 0 0.0 0 0.0 -0.31278467178344727 -0.1694680154323578 0.21605446934700012 0.0 0.0 1.0 0.5431747436523438 0.24967700242996216 0 1.0 0 0.0 0 0.0 0 0.0 -0.46837782859802246 -0.16749413311481476 0.21605446934700012 0.0 0.0 1.0 0.4268491864204407 0.25484126806259155 0 1.0 0 0.0 0 0.0 0 0.0 -0.46350932121276855 -0.17067933082580566 0.21605445444583893 0.0 0.0 1.0 0.429933100938797 0.2506728768348694 0 1.0 0 0.0 0 0.0 0 0.0 -0.32155942916870117 -0.17483140528202057 0.21605445444583893 0.0 0.0 1.0 0.5372918844223022 0.24292826652526855 0 1.0 0 0.0 0 0.0 0 0.0 -0.31278467178344727 -0.1694680154323578 0.21605446934700012 0.0 0.0 1.0 0.5431747436523438 0.24967700242996216 0 1.0 0 0.0 0 0.0 0 0.0 -0.45852184295654297 -0.17365291714668274 0.21605445444583893 0.0 0.0 1.0 0.43318602442741394 0.2467350959777832 0 1.0 0 0.0 0 0.0 0 0.0 -0.32155942916870117 -0.17483140528202057 0.21605445444583893 0.0 0.0 1.0 0.5372918844223022 0.24292826652526855 0 1.0 0 0.0 0 0.0 0 0.0 -0.46350932121276855 -0.17067933082580566 0.21605445444583893 0.0 0.0 1.0 0.429933100938797 0.2506728768348694 0 1.0 0 0.0 0 0.0 0 0.0 -0.4534149169921875 -0.17641489207744598 0.21605445444583893 0.0 0.0 1.0 0.43661075830459595 0.24303346872329712 0 1.0 0 0.0 0 0.0 0 0.0 -0.32155942916870117 -0.17483140528202057 0.21605445444583893 0.0 0.0 1.0 0.5372918844223022 0.24292826652526855 0 1.0 0 0.0 0 0.0 0 0.0 -0.45852184295654297 -0.17365291714668274 0.21605445444583893 0.0 0.0 1.0 0.43318602442741394 0.2467350959777832 0 1.0 0 0.0 0 0.0 0 0.0 -0.4534149169921875 -0.17641489207744598 0.21605445444583893 0.0 0.0 1.0 0.43661075830459595 0.24303346872329712 0 1.0 0 0.0 0 0.0 0 0.0 -0.33060407638549805 -0.1794796884059906 0.21605445444583893 0.0 0.0 0.999969482421875 0.5309553146362305 0.2370031476020813 0 1.0 0 0.0 0 0.0 0 0.0 -0.32155942916870117 -0.17483140528202057 0.21605445444583893 0.0 0.0 1.0 0.5372918844223022 0.24292826652526855 0 1.0 0 0.0 0 0.0 0 0.0 -0.4482426643371582 -0.17896036803722382 0.21605445444583893 0.0 0.0 1.0 0.4401699900627136 0.23959076404571533 0 1.0 0 0.0 0 0.0 0 0.0 -0.33060407638549805 -0.1794796884059906 0.21605445444583893 0.0 0.0 0.999969482421875 0.5309553146362305 0.2370031476020813 0 1.0 0 0.0 0 0.0 0 0.0 -0.4534149169921875 -0.17641489207744598 0.21605445444583893 0.0 0.0 1.0 0.43661075830459595 0.24303346872329712 0 1.0 0 0.0 0 0.0 0 0.0 -0.4430580139160156 -0.18128451704978943 0.21605445444583893 0.0 0.0 1.0 0.4438236653804779 0.23642700910568237 0 1.0 0 0.0 0 0.0 0 0.0 -0.33060407638549805 -0.1794796884059906 0.21605445444583893 0.0 0.0 0.999969482421875 0.5309553146362305 0.2370031476020813 0 1.0 0 0.0 0 0.0 0 0.0 -0.4482426643371582 -0.17896036803722382 0.21605445444583893 0.0 0.0 1.0 0.4401699900627136 0.23959076404571533 0 1.0 0 0.0 0 0.0 0 0.0 -0.4430580139160156 -0.18128451704978943 0.21605445444583893 0.0 0.0 1.0 0.4438236653804779 0.23642700910568237 0 1.0 0 0.0 0 0.0 0 0.0 -0.339918851852417 -0.1834128499031067 0.21605445444583893 0.0 0.0 1.0 0.5241689682006836 0.2319294810295105 0 1.0 0 0.0 0 0.0 0 0.0 -0.33060407638549805 -0.1794796884059906 0.21605445444583893 0.0 0.0 0.999969482421875 0.5309553146362305 0.2370031476020813 0 1.0 0 0.0 0 0.0 0 0.0 -0.43786120414733887 -0.18338730931282043 0.21605445444583893 0.0 0.0 1.0 0.447567880153656 0.23354434967041016 0 1.0 0 0.0 0 0.0 0 0.0 -0.339918851852417 -0.1834128499031067 0.21605445444583893 0.0 0.0 1.0 0.5241689682006836 0.2319294810295105 0 1.0 0 0.0 0 0.0 0 0.0 -0.4430580139160156 -0.18128451704978943 0.21605445444583893 0.0 0.0 1.0 0.4438236653804779 0.23642700910568237 0 1.0 0 0.0 0 0.0 0 0.0 -0.43265223503112793 -0.18526874482631683 0.21605445444583893 0.0 0.0 1.0 0.4513981342315674 0.23094463348388672 0 1.0 0 0.0 0 0.0 0 0.0 -0.339918851852417 -0.1834128499031067 0.21605445444583893 0.0 0.0 1.0 0.5241689682006836 0.2319294810295105 0 1.0 0 0.0 0 0.0 0 0.0 -0.43786120414733887 -0.18338730931282043 0.21605445444583893 0.0 0.0 1.0 0.447567880153656 0.23354434967041016 0 1.0 0 0.0 0 0.0 0 0.0 -0.43265223503112793 -0.18526874482631683 0.21605445444583893 0.0 0.0 1.0 0.4513981342315674 0.23094463348388672 0 1.0 0 0.0 0 0.0 0 0.0 -0.349503755569458 -0.18663088977336884 0.21605445444583893 0.0 0.0 0.999969482421875 0.5169462561607361 0.2277390956878662 0 1.0 0 0.0 0 0.0 0 0.0 -0.339918851852417 -0.1834128499031067 0.21605445444583893 0.0 0.0 1.0 0.5241689682006836 0.2319294810295105 0 1.0 0 0.0 0 0.0 0 0.0 -0.4274311065673828 -0.186928853392601 0.21605445444583893 0.0 0.0 1.0 0.4553092122077942 0.22862982749938965 0 1.0 0 0.0 0 0.0 0 0.0 -0.349503755569458 -0.18663088977336884 0.21605445444583893 0.0 0.0 0.999969482421875 0.5169462561607361 0.2277390956878662 0 1.0 0 0.0 0 0.0 0 0.0 -0.43265223503112793 -0.18526874482631683 0.21605445444583893 0.0 0.0 1.0 0.4513981342315674 0.23094463348388672 0 1.0 0 0.0 0 0.0 0 0.0 -0.4274311065673828 -0.186928853392601 0.21605445444583893 0.0 0.0 1.0 0.4553092122077942 0.22862982749938965 0 1.0 0 0.0 0 0.0 0 0.0 -0.359358549118042 -0.18913380801677704 0.21605445444583893 0.0 0.0 1.0 0.5093119740486145 0.224467933177948 0 1.0 0 0.0 0 0.0 0 0.0 -0.349503755569458 -0.18663088977336884 0.21605445444583893 0.0 0.0 0.999969482421875 0.5169462561607361 0.2277390956878662 0 1.0 0 0.0 0 0.0 0 0.0 -0.4221978187561035 -0.18836760520935059 0.21605445444583893 0.0 0.0 1.0 0.4592951536178589 0.22660183906555176 0 1.0 0 0.0 0 0.0 0 0.0 -0.359358549118042 -0.18913380801677704 0.21605445444583893 0.0 0.0 1.0 0.5093119740486145 0.224467933177948 0 1.0 0 0.0 0 0.0 0 0.0 -0.4274311065673828 -0.186928853392601 0.21605445444583893 0.0 0.0 1.0 0.4553092122077942 0.22862982749938965 0 1.0 0 0.0 0 0.0 0 0.0 -0.41695237159729004 -0.18958501517772675 0.21605445444583893 0.0 0.0 1.0 0.46334928274154663 0.22486257553100586 0 1.0 0 0.0 0 0.0 0 0.0 -0.359358549118042 -0.18913380801677704 0.21605445444583893 0.0 0.0 1.0 0.5093119740486145 0.224467933177948 0 1.0 0 0.0 0 0.0 0 0.0 -0.4221978187561035 -0.18836760520935059 0.21605445444583893 0.0 0.0 1.0 0.4592951536178589 0.22660183906555176 0 1.0 0 0.0 0 0.0 0 0.0 -0.41695237159729004 -0.18958501517772675 0.21605445444583893 0.0 0.0 1.0 0.46334928274154663 0.22486257553100586 0 1.0 0 0.0 0 0.0 0 0.0 -0.36948323249816895 -0.1909216046333313 0.21605445444583893 0.0 0.0 1.0 0.5013026595115662 0.22215431928634644 0 1.0 0 0.0 0 0.0 0 0.0 -0.359358549118042 -0.18913380801677704 0.21605445444583893 0.0 0.0 1.0 0.5093119740486145 0.224467933177948 0 1.0 0 0.0 0 0.0 0 0.0 -0.4116947650909424 -0.1905810683965683 0.21605445444583893 0.0 0.0 1.0 0.4674643576145172 0.22341382503509521 0 1.0 0 0.0 0 0.0 0 0.0 -0.36948323249816895 -0.1909216046333313 0.21605445444583893 0.0 0.0 1.0 0.5013026595115662 0.22215431928634644 0 1.0 0 0.0 0 0.0 0 0.0 -0.41695237159729004 -0.18958501517772675 0.21605445444583893 0.0 0.0 1.0 0.46334928274154663 0.22486257553100586 0 1.0 0 0.0 0 0.0 0 0.0 -0.40642499923706055 -0.19135577976703644 0.21605445444583893 0.0 3.0518509447574615e-05 1.0 0.4716324210166931 0.2222573161125183 0 1.0 0 0.0 0 0.0 0 0.0 -0.36948323249816895 -0.1909216046333313 0.21605445444583893 0.0 0.0 1.0 0.5013026595115662 0.22215431928634644 0 1.0 0 0.0 0 0.0 0 0.0 -0.4116947650909424 -0.1905810683965683 0.21605445444583893 0.0 0.0 1.0 0.4674643576145172 0.22341382503509521 0 1.0 0 0.0 0 0.0 0 0.0 -0.40642499923706055 -0.19135577976703644 0.21605445444583893 0.0 3.0518509447574615e-05 1.0 0.4716324210166931 0.2222573161125183 0 1.0 0 0.0 0 0.0 0 0.0 -0.37987804412841797 -0.19199427962303162 0.21605445444583893 0.0 0.0 1.0 0.49296727776527405 0.22083759307861328 0 1.0 0 0.0 0 0.0 0 0.0 -0.36948323249816895 -0.1909216046333313 0.21605445444583893 0.0 0.0 1.0 0.5013026595115662 0.22215431928634644 0 1.0 0 0.0 0 0.0 0 0.0 -0.40114307403564453 -0.19190914928913116 0.21605445444583893 0.0 0.0 1.0 0.47584494948387146 0.2213945984840393 0 1.0 0 0.0 0 0.0 0 0.0 -0.37987804412841797 -0.19199427962303162 0.21605445444583893 0.0 0.0 1.0 0.49296727776527405 0.22083759307861328 0 1.0 0 0.0 0 0.0 0 0.0 -0.40642499923706055 -0.19135577976703644 0.21605445444583893 0.0 3.0518509447574615e-05 1.0 0.4716324210166931 0.2222573161125183 0 1.0 0 0.0 0 0.0 0 0.0 -0.39584898948669434 -0.19224116206169128 0.21605445444583893 0.0 0.0 1.0 0.48009300231933594 0.2208271622657776 0 1.0 0 0.0 0 0.0 0 0.0 -0.37987804412841797 -0.19199427962303162 0.21605445444583893 0.0 0.0 1.0 0.49296727776527405 0.22083759307861328 0 1.0 0 0.0 0 0.0 0 0.0 -0.40114307403564453 -0.19190914928913116 0.21605445444583893 0.0 0.0 1.0 0.47584494948387146 0.2213945984840393 0 1.0 0 0.0 0 0.0 0 0.0 -0.39584898948669434 -0.19224116206169128 0.21605445444583893 0.0 0.0 1.0 0.48009300231933594 0.2208271622657776 0 1.0 0 0.0 0 0.0 0 0.0 -0.39054274559020996 -0.19235184788703918 0.21605445444583893 0.0 0.0 1.0 0.4843671917915344 0.22055619955062866 0 1.0 0 0.0 0 0.0 0 0.0 -0.37987804412841797 -0.19199427962303162 0.21605445444583893 0.0 0.0 1.0 0.49296727776527405 0.22083759307861328 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.5881415009498596 0.5820229053497314 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 0.32953959703445435 0.21605446934700012 0.0 0.0 1.0 0.6138039231300354 0.688823938369751 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.32953959703445435 0.21605446934700012 0.0 0.0 1.0 0.5745580792427063 0.6996983289718628 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.5881415009498596 0.5820229053497314 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6724605560302734 0.28865742683410645 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 0.32953959703445435 0.21605446934700012 0.0 0.0 1.0 0.6138039231300354 0.688823938369751 0 1.0 0 0.0 0 0.0 0 0.0 -1.1078346967697144 0.19609802961349487 0.21605448424816132 0.0 0.0 1.0 0.522833526134491 0.6211022734642029 0 1.0 0 0.0 0 0.0 0 0.0 -1.0863980054855347 0.1960797905921936 0.21605448424816132 0.0 0.0 0.999969482421875 0.5341312289237976 0.6226881742477417 0 1.0 0 0.0 0 0.0 0 0.0 -1.0966724157333374 0.19643977284431458 0.21605448424816132 0.0 -6.103701889514923e-05 1.0 0.5286993384361267 0.6222618818283081 0 1.0 0 0.0 0 0.0 0 0.0 -1.11867094039917 0.19507277011871338 0.21605448424816132 0.0 0.0 1.0 0.5171758532524109 0.6193115711212158 0 1.0 0 0.0 0 0.0 0 0.0 -1.0863980054855347 0.1960797905921936 0.21605448424816132 0.0 0.0 0.999969482421875 0.5341312289237976 0.6226881742477417 0 1.0 0 0.0 0 0.0 0 0.0 -1.1078346967697144 0.19609802961349487 0.21605448424816132 0.0 0.0 1.0 0.522833526134491 0.6211022734642029 0 1.0 0 0.0 0 0.0 0 0.0 -1.11867094039917 0.19507277011871338 0.21605448424816132 0.0 0.0 1.0 0.5171758532524109 0.6193115711212158 0 1.0 0 0.0 0 0.0 0 0.0 -1.076357126235962 0.1949998140335083 0.21605448424816132 0.0 0.0 1.0 0.5394721627235413 0.6224310398101807 0 1.0 0 0.0 0 0.0 0 0.0 -1.0863980054855347 0.1960797905921936 0.21605448424816132 0.0 0.0 0.999969482421875 0.5341312289237976 0.6226881742477417 0 1.0 0 0.0 0 0.0 0 0.0 -1.1291812658309937 0.19336402416229248 0.21605448424816132 0.0 0.0 1.0 0.5117258429527283 0.6169023513793945 0 1.0 0 0.0 0 0.0 0 0.0 -1.076357126235962 0.1949998140335083 0.21605448424816132 0.0 0.0 1.0 0.5394721627235413 0.6224310398101807 0 1.0 0 0.0 0 0.0 0 0.0 -1.11867094039917 0.19507277011871338 0.21605448424816132 0.0 0.0 1.0 0.5171758532524109 0.6193115711212158 0 1.0 0 0.0 0 0.0 0 0.0 -1.1291812658309937 0.19336402416229248 0.21605448424816132 0.0 0.0 1.0 0.5117258429527283 0.6169023513793945 0 1.0 0 0.0 0 0.0 0 0.0 -1.0665497779846191 0.19319984316825867 0.21605448424816132 0.0 0.0 1.0 0.544721782207489 0.6214948892593384 0 1.0 0 0.0 0 0.0 0 0.0 -1.076357126235962 0.1949998140335083 0.21605448424816132 0.0 0.0 1.0 0.5394721627235413 0.6224310398101807 0 1.0 0 0.0 0 0.0 0 0.0 -1.139365553855896 0.19097179174423218 0.21605448424816132 0.0 0.0 1.0 0.5064813494682312 0.6138845086097717 0 1.0 0 0.0 0 0.0 0 0.0 -1.0665497779846191 0.19319984316825867 0.21605448424816132 0.0 0.0 1.0 0.544721782207489 0.6214948892593384 0 1.0 0 0.0 0 0.0 0 0.0 -1.1291812658309937 0.19336402416229248 0.21605448424816132 0.0 0.0 1.0 0.5117258429527283 0.6169023513793945 0 1.0 0 0.0 0 0.0 0 0.0 -1.139365553855896 0.19097179174423218 0.21605448424816132 0.0 0.0 1.0 0.5064813494682312 0.6138845086097717 0 1.0 0 0.0 0 0.0 0 0.0 -1.0569759607315063 0.1906799077987671 0.21605448424816132 0.0 0.0 1.0 0.5498804450035095 0.6198821067810059 0 1.0 0 0.0 0 0.0 0 0.0 -1.0665497779846191 0.19319984316825867 0.21605448424816132 0.0 0.0 1.0 0.544721782207489 0.6214948892593384 0 1.0 0 0.0 0 0.0 0 0.0 -1.1492239236831665 0.18789604306221008 0.21605448424816132 0.0 0.0 1.0 0.5014384388923645 0.6102650165557861 0 1.0 0 0.0 0 0.0 0 0.0 -1.0569759607315063 0.1906799077987671 0.21605448424816132 0.0 0.0 1.0 0.5498804450035095 0.6198821067810059 0 1.0 0 0.0 0 0.0 0 0.0 -1.139365553855896 0.19097179174423218 0.21605448424816132 0.0 0.0 1.0 0.5064813494682312 0.6138845086097717 0 1.0 0 0.0 0 0.0 0 0.0 -1.1492239236831665 0.18789604306221008 0.21605448424816132 0.0 0.0 1.0 0.5014384388923645 0.6102650165557861 0 1.0 0 0.0 0 0.0 0 0.0 -1.047635555267334 0.18743997812271118 0.21605448424816132 0.0 0.0 1.0 0.5549494028091431 0.6175920963287354 0 1.0 0 0.0 0 0.0 0 0.0 -1.0569759607315063 0.1906799077987671 0.21605448424816132 0.0 0.0 1.0 0.5498804450035095 0.6198821067810059 0 1.0 0 0.0 0 0.0 0 0.0 -1.1587563753128052 0.18413680791854858 0.21605448424816132 0.0 0.0 1.0 0.49659207463264465 0.6060476303100586 0 1.0 0 0.0 0 0.0 0 0.0 -1.047635555267334 0.18743997812271118 0.21605448424816132 0.0 0.0 1.0 0.5549494028091431 0.6175920963287354 0 1.0 0 0.0 0 0.0 0 0.0 -1.1492239236831665 0.18789604306221008 0.21605448424816132 0.0 0.0 1.0 0.5014384388923645 0.6102650165557861 0 1.0 0 0.0 0 0.0 0 0.0 -1.1587563753128052 0.18413680791854858 0.21605448424816132 0.0 0.0 1.0 0.49659207463264465 0.6060476303100586 0 1.0 0 0.0 0 0.0 0 0.0 -1.0385286808013916 0.18348005414009094 0.21605448424816132 0.0 0.0 1.0 0.5599304437637329 0.6146221160888672 0 1.0 0 0.0 0 0.0 0 0.0 -1.047635555267334 0.18743997812271118 0.21605448424816132 0.0 0.0 1.0 0.5549494028091431 0.6175920963287354 0 1.0 0 0.0 0 0.0 0 0.0 -1.167962908744812 0.1796940565109253 0.21605448424816132 0.0 0.0 1.0 0.4919360876083374 0.6012330055236816 0 1.0 0 0.0 0 0.0 0 0.0 -1.0385286808013916 0.18348005414009094 0.21605448424816132 0.0 0.0 1.0 0.5599304437637329 0.6146221160888672 0 1.0 0 0.0 0 0.0 0 0.0 -1.1587563753128052 0.18413680791854858 0.21605448424816132 0.0 0.0 1.0 0.49659207463264465 0.6060476303100586 0 1.0 0 0.0 0 0.0 0 0.0 -1.167962908744812 0.1796940565109253 0.21605448424816132 0.0 0.0 1.0 0.4919360876083374 0.6012330055236816 0 1.0 0 0.0 0 0.0 0 0.0 -1.0296553373336792 0.17880016565322876 0.21605448424816132 0.0 0.0 1.0 0.5648260116577148 0.610966145992279 0 1.0 0 0.0 0 0.0 0 0.0 -1.0385286808013916 0.18348005414009094 0.21605448424816132 0.0 0.0 1.0 0.5599304437637329 0.6146221160888672 0 1.0 0 0.0 0 0.0 0 0.0 -1.176843523979187 0.1745678186416626 0.21605448424816132 0.0 0.0 0.999969482421875 0.4874635338783264 0.595818281173706 0 1.0 0 0.0 0 0.0 0 0.0 -1.0296553373336792 0.17880016565322876 0.21605448424816132 0.0 0.0 1.0 0.5648260116577148 0.610966145992279 0 1.0 0 0.0 0 0.0 0 0.0 -1.167962908744812 0.1796940565109253 0.21605448424816132 0.0 0.0 1.0 0.4919360876083374 0.6012330055236816 0 1.0 0 0.0 0 0.0 0 0.0 -1.176843523979187 0.1745678186416626 0.21605448424816132 0.0 0.0 0.999969482421875 0.4874635338783264 0.595818281173706 0 1.0 0 0.0 0 0.0 0 0.0 -1.0210155248641968 0.17340028285980225 0.21605448424816132 0.0 0.0 1.0 0.5696391463279724 0.6066159009933472 0 1.0 0 0.0 0 0.0 0 0.0 -1.0296553373336792 0.17880016565322876 0.21605448424816132 0.0 0.0 1.0 0.5648260116577148 0.610966145992279 0 1.0 0 0.0 0 0.0 0 0.0 -1.1853982210159302 0.1687580645084381 0.21605446934700012 0.0 0.0 1.0 0.48316690325737 0.5897977352142334 0 1.0 0 0.0 0 0.0 0 0.0 -1.0210155248641968 0.17340028285980225 0.21605448424816132 0.0 0.0 1.0 0.5696391463279724 0.6066159009933472 0 1.0 0 0.0 0 0.0 0 0.0 -1.176843523979187 0.1745678186416626 0.21605448424816132 0.0 0.0 0.999969482421875 0.4874635338783264 0.595818281173706 0 1.0 0 0.0 0 0.0 0 0.0 -1.1853982210159302 0.1687580645084381 0.21605446934700012 0.0 0.0 1.0 0.48316690325737 0.5897977352142334 0 1.0 0 0.0 0 0.0 0 0.0 -1.0126092433929443 0.1672804057598114 0.21605446934700012 0.0 0.0 1.0 0.574373185634613 0.6015603542327881 0 1.0 0 0.0 0 0.0 0 0.0 -1.0210155248641968 0.17340028285980225 0.21605448424816132 0.0 0.0 1.0 0.5696391463279724 0.6066159009933472 0 1.0 0 0.0 0 0.0 0 0.0 -1.1936269998550415 0.16226482391357422 0.21605446934700012 0.0 0.0 0.999969482421875 0.4790382981300354 0.5831623077392578 0 1.0 0 0.0 0 0.0 0 0.0 -1.0126092433929443 0.1672804057598114 0.21605446934700012 0.0 0.0 1.0 0.574373185634613 0.6015603542327881 0 1.0 0 0.0 0 0.0 0 0.0 -1.1853982210159302 0.1687580645084381 0.21605446934700012 0.0 0.0 1.0 0.48316690325737 0.5897977352142334 0 1.0 0 0.0 0 0.0 0 0.0 -1.1936269998550415 0.16226482391357422 0.21605446934700012 0.0 0.0 0.999969482421875 0.4790382981300354 0.5831623077392578 0 1.0 0 0.0 0 0.0 0 0.0 -1.0044364929199219 0.1604405641555786 0.21605446934700012 0.0 0.0 1.0 0.5790320634841919 0.595786452293396 0 1.0 0 0.0 0 0.0 0 0.0 -1.0126092433929443 0.1672804057598114 0.21605446934700012 0.0 0.0 1.0 0.574373185634613 0.6015603542327881 0 1.0 0 0.0 0 0.0 0 0.0 -1.201529860496521 0.15508809685707092 0.21605446934700012 0.0 0.0 1.0 0.47506946325302124 0.5759004354476929 0 1.0 0 0.0 0 0.0 0 0.0 -1.0044364929199219 0.1604405641555786 0.21605446934700012 0.0 0.0 1.0 0.5790320634841919 0.595786452293396 0 1.0 0 0.0 0 0.0 0 0.0 -1.1936269998550415 0.16226482391357422 0.21605446934700012 0.0 0.0 0.999969482421875 0.4790382981300354 0.5831623077392578 0 1.0 0 0.0 0 0.0 0 0.0 -1.201529860496521 0.15508809685707092 0.21605446934700012 0.0 0.0 1.0 0.47506946325302124 0.5759004354476929 0 1.0 0 0.0 0 0.0 0 0.0 -0.9964971542358398 0.1528807282447815 0.21605446934700012 0.0 0.0 1.0 0.583620011806488 0.589279294013977 0 1.0 0 0.0 0 0.0 0 0.0 -1.0044364929199219 0.1604405641555786 0.21605446934700012 0.0 0.0 1.0 0.5790320634841919 0.595786452293396 0 1.0 0 0.0 0 0.0 0 0.0 -1.2091068029403687 0.14722785353660583 0.21605446934700012 0.0 0.0 1.0 0.4712521433830261 0.5679982900619507 0 1.0 0 0.0 0 0.0 0 0.0 -0.9964971542358398 0.1528807282447815 0.21605446934700012 0.0 0.0 1.0 0.583620011806488 0.589279294013977 0 1.0 0 0.0 0 0.0 0 0.0 -1.201529860496521 0.15508809685707092 0.21605446934700012 0.0 0.0 1.0 0.47506946325302124 0.5759004354476929 0 1.0 0 0.0 0 0.0 0 0.0 -1.2091068029403687 0.14722785353660583 0.21605446934700012 0.0 0.0 1.0 0.4712521433830261 0.5679982900619507 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.5881415009498596 0.5820229053497314 0 1.0 0 0.0 0 0.0 0 0.0 -0.9964971542358398 0.1528807282447815 0.21605446934700012 0.0 0.0 1.0 0.583620011806488 0.589279294013977 0 1.0 0 0.0 0 0.0 0 0.0 -1.2162116765975952 0.1387108862400055 0.21605446934700012 0.0 0.0 1.0 0.4676472246646881 0.5594847202301025 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.5881415009498596 0.5820229053497314 0 1.0 0 0.0 0 0.0 0 0.0 -1.2091068029403687 0.14722785353660583 0.21605446934700012 0.0 0.0 1.0 0.4712521433830261 0.5679982900619507 0 1.0 0 0.0 0 0.0 0 0.0 -1.2162116765975952 0.1387108862400055 0.21605446934700012 0.0 0.0 1.0 0.4676472246646881 0.5594847202301025 0 1.0 0 0.0 0 0.0 0 0.0 -1.0590872764587402 0.12035006284713745 0.21605446934700012 0.0 0.0 1.0 0.5524991154670715 0.5583648085594177 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.5881415009498596 0.5820229053497314 0 1.0 0 0.0 0 0.0 0 0.0 -1.0590872764587402 0.12035006284713745 0.21605446934700012 0.0 0.0 1.0 0.5524991154670715 0.5583648085594177 0 1.0 0 0.0 0 0.0 0 0.0 -1.053524374961853 0.11937102675437927 0.21605446934700012 0.0 0.0 1.0 0.5556848645210266 0.5576752424240112 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.5881415009498596 0.5820229053497314 0 1.0 0 0.0 0 0.0 0 0.0 -1.053524374961853 0.11937102675437927 0.21605446934700012 0.0 0.0 1.0 0.5556848645210266 0.5576752424240112 0 1.0 0 0.0 0 0.0 0 0.0 -1.0481414794921875 0.11800038814544678 0.21605446934700012 0.0 0.0 1.0 0.5587841272354126 0.556570291519165 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.5881415009498596 0.5820229053497314 0 1.0 0 0.0 0 0.0 0 0.0 -1.0481414794921875 0.11800038814544678 0.21605446934700012 0.0 0.0 1.0 0.5587841272354126 0.556570291519165 0 1.0 0 0.0 0 0.0 0 0.0 -1.0429385900497437 0.11623811721801758 0.21605446934700012 0.0 0.0 0.999969482421875 0.5617994070053101 0.5550513863563538 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.5881415009498596 0.5820229053497314 0 1.0 0 0.0 0 0.0 0 0.0 -1.0429385900497437 0.11623811721801758 0.21605446934700012 0.0 0.0 0.999969482421875 0.5617994070053101 0.5550513863563538 0 1.0 0 0.0 0 0.0 0 0.0 -1.0379157066345215 0.11408424377441406 0.21605446934700012 0.0 0.0 1.0 0.5647335052490234 0.5531189441680908 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.5881415009498596 0.5820229053497314 0 1.0 0 0.0 0 0.0 0 0.0 -1.0379157066345215 0.11408424377441406 0.21605446934700012 0.0 0.0 1.0 0.5647335052490234 0.5531189441680908 0 1.0 0 0.0 0 0.0 0 0.0 -1.033072829246521 0.11153876781463623 0.21605446934700012 0.0 0.0 1.0 0.567589282989502 0.5507723093032837 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.5881415009498596 0.5820229053497314 0 1.0 0 0.0 0 0.0 0 0.0 -1.033072829246521 0.11153876781463623 0.21605446934700012 0.0 0.0 1.0 0.567589282989502 0.5507723093032837 0 1.0 0 0.0 0 0.0 0 0.0 -1.0284099578857422 0.1086016595363617 0.21605446934700012 0.0 0.0 1.0 0.5703694224357605 0.5480096936225891 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.5881415009498596 0.5820229053497314 0 1.0 0 0.0 0 0.0 0 0.0 -1.0284099578857422 0.1086016595363617 0.21605446934700012 0.0 0.0 1.0 0.5703694224357605 0.5480096936225891 0 1.0 0 0.0 0 0.0 0 0.0 -1.023927092552185 0.10527294874191284 0.21605446934700012 0.0 0.0 1.0 0.5730769038200378 0.5448282957077026 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.5881415009498596 0.5820229053497314 0 1.0 0 0.0 0 0.0 0 0.0 -1.023927092552185 0.10527294874191284 0.21605446934700012 0.0 0.0 1.0 0.5730769038200378 0.5448282957077026 0 1.0 0 0.0 0 0.0 0 0.0 -1.0196242332458496 0.10155263543128967 0.21605446934700012 0.0 0.0 1.0 0.5757145881652832 0.5412243604660034 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.5881415009498596 0.5820229053497314 0 1.0 0 0.0 0 0.0 0 0.0 -1.0196242332458496 0.10155263543128967 0.21605446934700012 0.0 0.0 1.0 0.5757145881652832 0.5412243604660034 0 1.0 0 0.0 0 0.0 0 0.0 -1.0155013799667358 0.0974406898021698 0.21605446934700012 0.0 0.0 1.0 0.5782853364944458 0.5371930599212646 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.5881415009498596 0.5820229053497314 0 1.0 0 0.0 0 0.0 0 0.0 -1.0155013799667358 0.0974406898021698 0.21605446934700012 0.0 0.0 1.0 0.5782853364944458 0.5371930599212646 0 1.0 0 0.0 0 0.0 0 0.0 -1.0115585327148438 0.09293714165687561 0.21605446934700012 0.0 0.0 1.0 0.5807920694351196 0.5327289700508118 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.5881415009498596 0.5820229053497314 0 1.0 0 0.0 0 0.0 0 0.0 -1.0115585327148438 0.09293714165687561 0.21605446934700012 0.0 0.0 1.0 0.5807920694351196 0.5327289700508118 0 1.0 0 0.0 0 0.0 0 0.0 -1.0078662633895874 0.08798837661743164 0.21605446934700012 0.0 0.0 1.0 0.5832045078277588 0.5277668237686157 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.5881415009498596 0.5820229053497314 0 1.0 0 0.0 0 0.0 0 0.0 -1.0078662633895874 0.08798837661743164 0.21605446934700012 0.0 0.0 1.0 0.5832045078277588 0.5277668237686157 0 1.0 0 0.0 0 0.0 0 0.0 -1.0044950246810913 0.0825410783290863 0.21605446934700012 0.0 0.0 1.0 0.5854932069778442 0.5222377777099609 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.5881415009498596 0.5820229053497314 0 1.0 0 0.0 0 0.0 0 0.0 -1.0044950246810913 0.0825410783290863 0.21605446934700012 0.0 0.0 1.0 0.5854932069778442 0.5222377777099609 0 1.0 0 0.0 0 0.0 0 0.0 -1.0014448165893555 0.07659512758255005 0.21605446934700012 0.0 0.0 1.0 0.5876625180244446 0.5161285400390625 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.5881415009498596 0.5820229053497314 0 1.0 0 0.0 0 0.0 0 0.0 -1.0014448165893555 0.07659512758255005 0.21605446934700012 0.0 0.0 1.0 0.5876625180244446 0.5161285400390625 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6724605560302734 0.28865742683410645 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 0.21605446934700012 0.0 0.0 1.0 0.5881415009498596 0.5820229053497314 0 1.0 0 0.0 0 0.0 0 0.0 -1.2226988077163696 0.12956392765045166 0.21605446934700012 0.0 0.0 1.0 0.46431317925453186 0.5503852367401123 0 1.0 0 0.0 0 0.0 0 0.0 -1.0648301839828491 0.12093746662139893 0.21605446934700012 0.0 0.0 1.0 0.549224317073822 0.5586365461349487 0 1.0 0 0.0 0 0.0 0 0.0 -1.2162116765975952 0.1387108862400055 0.21605446934700012 0.0 0.0 1.0 0.4676472246646881 0.5594847202301025 0 1.0 0 0.0 0 0.0 0 0.0 -1.0648301839828491 0.12093746662139893 0.21605446934700012 0.0 0.0 1.0 0.549224317073822 0.5586365461349487 0 1.0 0 0.0 0 0.0 0 0.0 -1.0590872764587402 0.12035006284713745 0.21605446934700012 0.0 0.0 1.0 0.5524991154670715 0.5583648085594177 0 1.0 0 0.0 0 0.0 0 0.0 -1.2162116765975952 0.1387108862400055 0.21605446934700012 0.0 0.0 1.0 0.4676472246646881 0.5594847202301025 0 1.0 0 0.0 0 0.0 0 0.0 -1.228568196296692 0.11978697776794434 0.21605446934700012 0.0 0.0 0.999969482421875 0.4612388014793396 0.5406763553619385 0 1.0 0 0.0 0 0.0 0 0.0 -1.0707529783248901 0.12113326787948608 0.21605446934700012 0.0 0.0 1.0 0.5458582043647766 0.558487057685852 0 1.0 0 0.0 0 0.0 0 0.0 -1.2226988077163696 0.12956392765045166 0.21605446934700012 0.0 0.0 1.0 0.46431317925453186 0.5503852367401123 0 1.0 0 0.0 0 0.0 0 0.0 -1.0707529783248901 0.12113326787948608 0.21605446934700012 0.0 0.0 1.0 0.5458582043647766 0.558487057685852 0 1.0 0 0.0 0 0.0 0 0.0 -1.0648301839828491 0.12093746662139893 0.21605446934700012 0.0 0.0 1.0 0.549224317073822 0.5586365461349487 0 1.0 0 0.0 0 0.0 0 0.0 -1.2226988077163696 0.12956392765045166 0.21605446934700012 0.0 0.0 1.0 0.46431317925453186 0.5503852367401123 0 1.0 0 0.0 0 0.0 0 0.0 -1.228568196296692 0.11978697776794434 0.21605446934700012 0.0 0.0 0.999969482421875 0.4612388014793396 0.5406763553619385 0 1.0 0 0.0 0 0.0 0 0.0 -1.0765116214752197 0.12093991041183472 0.21605446934700012 0.0 3.0518509447574615e-05 1.0 0.542594313621521 0.5579367280006409 0 1.0 0 0.0 0 0.0 0 0.0 -1.0707529783248901 0.12113326787948608 0.21605446934700012 0.0 0.0 1.0 0.5458582043647766 0.558487057685852 0 1.0 0 0.0 0 0.0 0 0.0 -1.228568196296692 0.11978697776794434 0.21605446934700012 0.0 0.0 0.999969482421875 0.4612388014793396 0.5406763553619385 0 1.0 0 0.0 0 0.0 0 0.0 -1.082112193107605 0.12035977840423584 0.21605446934700012 0.0 -3.0518509447574615e-05 0.999969482421875 0.5394285321235657 0.5569874048233032 0 1.0 0 0.0 0 0.0 0 0.0 -1.0765116214752197 0.12093991041183472 0.21605446934700012 0.0 3.0518509447574615e-05 1.0 0.542594313621521 0.5579367280006409 0 1.0 0 0.0 0 0.0 0 0.0 -1.228568196296692 0.11978697776794434 0.21605446934700012 0.0 0.0 0.999969482421875 0.4612388014793396 0.5406763553619385 0 1.0 0 0.0 0 0.0 0 0.0 -1.087554693222046 0.11939290165901184 0.21605446934700012 0.0 0.0 1.0 0.5363602638244629 0.5556380748748779 0 1.0 0 0.0 0 0.0 0 0.0 -1.082112193107605 0.12035977840423584 0.21605446934700012 0.0 -3.0518509447574615e-05 0.999969482421875 0.5394285321235657 0.5569874048233032 0 1.0 0 0.0 0 0.0 0 0.0 -1.2338197231292725 0.10938003659248352 0.21605446934700012 0.0 0.0 1.0 0.45841383934020996 0.530331015586853 0 1.0 0 0.0 0 0.0 0 0.0 -1.087554693222046 0.11939290165901184 0.21605446934700012 0.0 0.0 1.0 0.5363602638244629 0.5556380748748779 0 1.0 0 0.0 0 0.0 0 0.0 -1.228568196296692 0.11978697776794434 0.21605446934700012 0.0 0.0 0.999969482421875 0.4612388014793396 0.5406763553619385 0 1.0 0 0.0 0 0.0 0 0.0 -1.2338197231292725 0.10938003659248352 0.21605446934700012 0.0 0.0 1.0 0.45841383934020996 0.530331015586853 0 1.0 0 0.0 0 0.0 0 0.0 -1.092839002609253 0.11803928017616272 0.21605446934700012 0.0 0.0 1.0 0.5333884954452515 0.553887128829956 0 1.0 0 0.0 0 0.0 0 0.0 -1.087554693222046 0.11939290165901184 0.21605446934700012 0.0 0.0 1.0 0.5363602638244629 0.5556380748748779 0 1.0 0 0.0 0 0.0 0 0.0 -1.2338197231292725 0.10938003659248352 0.21605446934700012 0.0 0.0 1.0 0.45841383934020996 0.530331015586853 0 1.0 0 0.0 0 0.0 0 0.0 -1.0979652404785156 0.11629891395568848 0.21605446934700012 0.0 0.0 0.999969482421875 0.5305119752883911 0.5517319440841675 0 1.0 0 0.0 0 0.0 0 0.0 -1.092839002609253 0.11803928017616272 0.21605446934700012 0.0 0.0 1.0 0.5333884954452515 0.553887128829956 0 1.0 0 0.0 0 0.0 0 0.0 -1.2338197231292725 0.10938003659248352 0.21605446934700012 0.0 0.0 1.0 0.45841383934020996 0.530331015586853 0 1.0 0 0.0 0 0.0 0 0.0 -1.102933406829834 0.11417180299758911 0.21605446934700012 0.0 0.0 1.0 0.5277293920516968 0.5491690635681152 0 1.0 0 0.0 0 0.0 0 0.0 -1.0979652404785156 0.11629891395568848 0.21605446934700012 0.0 0.0 0.999969482421875 0.5305119752883911 0.5517319440841675 0 1.0 0 0.0 0 0.0 0 0.0 -1.2338197231292725 0.10938003659248352 0.21605446934700012 0.0 0.0 1.0 0.45841383934020996 0.530331015586853 0 1.0 0 0.0 0 0.0 0 0.0 -1.1077433824539185 0.11165794730186462 0.21605446934700012 0.0 0.0 1.0 0.5250393152236938 0.5461939573287964 0 1.0 0 0.0 0 0.0 0 0.0 -1.102933406829834 0.11417180299758911 0.21605446934700012 0.0 0.0 1.0 0.5277293920516968 0.5491690635681152 0 1.0 0 0.0 0 0.0 0 0.0 -1.2338197231292725 0.10938003659248352 0.21605446934700012 0.0 0.0 1.0 0.45841383934020996 0.530331015586853 0 1.0 0 0.0 0 0.0 0 0.0 -1.1123952865600586 0.10875734686851501 0.21605446934700012 0.0 0.0 1.0 0.5224400758743286 0.5428013801574707 0 1.0 0 0.0 0 0.0 0 0.0 -1.1077433824539185 0.11165794730186462 0.21605446934700012 0.0 0.0 1.0 0.5250393152236938 0.5461939573287964 0 1.0 0 0.0 0 0.0 0 0.0 -1.2384533882141113 0.09834310412406921 0.21605446934700012 0.0 0.0 1.0 0.4558292329311371 0.5193195939064026 0 1.0 0 0.0 0 0.0 0 0.0 -1.1123952865600586 0.10875734686851501 0.21605446934700012 0.0 0.0 1.0 0.5224400758743286 0.5428013801574707 0 1.0 0 0.0 0 0.0 0 0.0 -1.2338197231292725 0.10938003659248352 0.21605446934700012 0.0 0.0 1.0 0.45841383934020996 0.530331015586853 0 1.0 0 0.0 0 0.0 0 0.0 -1.2384533882141113 0.09834310412406921 0.21605446934700012 0.0 0.0 1.0 0.4558292329311371 0.5193195939064026 0 1.0 0 0.0 0 0.0 0 0.0 -1.1168891191482544 0.1054699718952179 0.21605446934700012 0.0 0.0 1.0 0.5199300646781921 0.5389848947525024 0 1.0 0 0.0 0 0.0 0 0.0 -1.1123952865600586 0.10875734686851501 0.21605446934700012 0.0 0.0 1.0 0.5224400758743286 0.5428013801574707 0 1.0 0 0.0 0 0.0 0 0.0 -1.2384533882141113 0.09834310412406921 0.21605446934700012 0.0 0.0 1.0 0.4558292329311371 0.5193195939064026 0 1.0 0 0.0 0 0.0 0 0.0 -1.1212248802185059 0.10179585218429565 0.21605446934700012 0.0 0.0 1.0 0.5175074934959412 0.5347373485565186 0 1.0 0 0.0 0 0.0 0 0.0 -1.1168891191482544 0.1054699718952179 0.21605446934700012 0.0 0.0 1.0 0.5199300646781921 0.5389848947525024 0 1.0 0 0.0 0 0.0 0 0.0 -1.2384533882141113 0.09834310412406921 0.21605446934700012 0.0 0.0 1.0 0.4558292329311371 0.5193195939064026 0 1.0 0 0.0 0 0.0 0 0.0 -1.1254024505615234 0.09773498773574829 0.21605446934700012 0.0 0.0 1.0 0.5151707530021667 0.5300506353378296 0 1.0 0 0.0 0 0.0 0 0.0 -1.1212248802185059 0.10179585218429565 0.21605446934700012 0.0 0.0 1.0 0.5175074934959412 0.5347373485565186 0 1.0 0 0.0 0 0.0 0 0.0 -1.2424691915512085 0.08667618036270142 0.21605446934700012 0.0 0.0 0.999969482421875 0.45347699522972107 0.5076109170913696 0 1.0 0 0.0 0 0.0 0 0.0 -1.1254024505615234 0.09773498773574829 0.21605446934700012 0.0 0.0 1.0 0.5151707530021667 0.5300506353378296 0 1.0 0 0.0 0 0.0 0 0.0 -1.2384533882141113 0.09834310412406921 0.21605446934700012 0.0 0.0 1.0 0.4558292329311371 0.5193195939064026 0 1.0 0 0.0 0 0.0 0 0.0 -1.2424691915512085 0.08667618036270142 0.21605446934700012 0.0 0.0 0.999969482421875 0.45347699522972107 0.5076109170913696 0 1.0 0 0.0 0 0.0 0 0.0 -1.1294219493865967 0.0932874083518982 0.21605446934700012 0.0 0.0 1.0 0.5129179954528809 0.5249159336090088 0 1.0 0 0.0 0 0.0 0 0.0 -1.1254024505615234 0.09773498773574829 0.21605446934700012 0.0 0.0 1.0 0.5151707530021667 0.5300506353378296 0 1.0 0 0.0 0 0.0 0 0.0 -1.2424691915512085 0.08667618036270142 0.21605446934700012 0.0 0.0 0.999969482421875 0.45347699522972107 0.5076109170913696 0 1.0 0 0.0 0 0.0 0 0.0 -1.1331982612609863 0.08845549821853638 0.21605446934700012 0.0 0.0 1.0 0.510796844959259 0.5193343758583069 0 1.0 0 0.0 0 0.0 0 0.0 -1.1294219493865967 0.0932874083518982 0.21605446934700012 0.0 0.0 1.0 0.5129179954528809 0.5249159336090088 0 1.0 0 0.0 0 0.0 0 0.0 -1.2424691915512085 0.08667618036270142 0.21605446934700012 0.0 0.0 0.999969482421875 0.45347699522972107 0.5076109170913696 0 1.0 0 0.0 0 0.0 0 0.0 -1.1366461515426636 0.08324170112609863 0.21605446934700012 0.0 0.0 1.0 0.5088552236557007 0.5133059024810791 0 1.0 0 0.0 0 0.0 0 0.0 -1.1331982612609863 0.08845549821853638 0.21605446934700012 0.0 0.0 1.0 0.510796844959259 0.5193343758583069 0 1.0 0 0.0 0 0.0 0 0.0 -1.245867371559143 0.07437929511070251 0.21605446934700012 0.0 0.0 1.0 0.45135048031806946 0.49517351388931274 0 1.0 0 0.0 0 0.0 0 0.0 -1.1366461515426636 0.08324170112609863 0.21605446934700012 0.0 0.0 1.0 0.5088552236557007 0.5133059024810791 0 1.0 0 0.0 0 0.0 0 0.0 -1.2424691915512085 0.08667618036270142 0.21605446934700012 0.0 0.0 0.999969482421875 0.45347699522972107 0.5076109170913696 0 1.0 0 0.0 0 0.0 0 0.0 -1.245867371559143 0.07437929511070251 0.21605446934700012 0.0 0.0 1.0 0.45135048031806946 0.49517351388931274 0 1.0 0 0.0 0 0.0 0 0.0 -1.139765739440918 0.07764601707458496 0.21605446934700012 0.0 0.0 1.0 0.5070923566818237 0.5068193078041077 0 1.0 0 0.0 0 0.0 0 0.0 -1.1366461515426636 0.08324170112609863 0.21605446934700012 0.0 0.0 1.0 0.5088552236557007 0.5133059024810791 0 1.0 0 0.0 0 0.0 0 0.0 -1.245867371559143 0.07437929511070251 0.21605446934700012 0.0 0.0 1.0 0.45135048031806946 0.49517351388931274 0 1.0 0 0.0 0 0.0 0 0.0 -1.14255690574646 0.07166844606399536 0.21605446934700012 0.0 0.0 0.999969482421875 0.50550776720047 0.49986231327056885 0 1.0 0 0.0 0 0.0 0 0.0 -1.139765739440918 0.07764601707458496 0.21605446934700012 0.0 0.0 1.0 0.5070923566818237 0.5068193078041077 0 1.0 0 0.0 0 0.0 0 0.0 -0.9987156391143799 0.07015055418014526 0.21605446934700012 0.0 0.0 0.999969482421875 0.5897163152694702 0.5094247460365295 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6724605560302734 0.28865742683410645 0 1.0 0 0.0 0 0.0 0 0.0 -1.0014448165893555 0.07659512758255005 0.21605446934700012 0.0 0.0 1.0 0.5876625180244446 0.5161285400390625 0 1.0 0 0.0 0 0.0 0 0.0 -1.2486475706100464 0.06145240366458893 0.21605446934700012 0.0 0.0 1.0 0.4494447708129883 0.48197758197784424 0 1.0 0 0.0 0 0.0 0 0.0 -1.14255690574646 0.07166844606399536 0.21605446934700012 0.0 0.0 0.999969482421875 0.50550776720047 0.49986231327056885 0 1.0 0 0.0 0 0.0 0 0.0 -1.245867371559143 0.07437929511070251 0.21605446934700012 0.0 0.0 1.0 0.45135048031806946 0.49517351388931274 0 1.0 0 0.0 0 0.0 0 0.0 -1.2486475706100464 0.06145240366458893 0.21605446934700012 0.0 0.0 1.0 0.4494447708129883 0.48197758197784424 0 1.0 0 0.0 0 0.0 0 0.0 -1.1450196504592896 0.06530898809432983 0.21605446934700012 0.0 0.0 1.0 0.5041013956069946 0.4924224019050598 0 1.0 0 0.0 0 0.0 0 0.0 -1.14255690574646 0.07166844606399536 0.21605446934700012 0.0 0.0 0.999969482421875 0.50550776720047 0.49986231327056885 0 1.0 0 0.0 0 0.0 0 0.0 -0.9963076114654541 0.06320734322071075 0.21605446934700012 0.0 0.0 1.0 0.5916581749916077 0.5021109580993652 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6724605560302734 0.28865742683410645 0 1.0 0 0.0 0 0.0 0 0.0 -0.9987156391143799 0.07015055418014526 0.21605446934700012 0.0 0.0 0.999969482421875 0.5897163152694702 0.5094247460365295 0 1.0 0 0.0 0 0.0 0 0.0 -1.2486475706100464 0.06145240366458893 0.21605446934700012 0.0 0.0 1.0 0.4494447708129883 0.48197758197784424 0 1.0 0 0.0 0 0.0 0 0.0 -1.1471540927886963 0.05856764316558838 0.21605446934700012 0.0 0.0 1.0 0.5028736591339111 0.4844869375228882 0 1.0 0 0.0 0 0.0 0 0.0 -1.1450196504592896 0.06530898809432983 0.21605446934700012 0.0 0.0 1.0 0.5041013956069946 0.4924224019050598 0 1.0 0 0.0 0 0.0 0 0.0 -0.9942206144332886 0.05576547980308533 0.21605446934700012 0.0 0.0 1.0 0.5934914350509644 0.4941715598106384 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6724605560302734 0.28865742683410645 0 1.0 0 0.0 0 0.0 0 0.0 -0.9963076114654541 0.06320734322071075 0.21605446934700012 0.0 0.0 1.0 0.5916581749916077 0.5021109580993652 0 1.0 0 0.0 0 0.0 0 0.0 -1.250809907913208 0.047895535826683044 0.21605446934700012 0.0 0.0 0.999969482421875 0.44775623083114624 0.4679969549179077 0 1.0 0 0.0 0 0.0 0 0.0 -1.1471540927886963 0.05856764316558838 0.21605446934700012 0.0 0.0 1.0 0.5028736591339111 0.4844869375228882 0 1.0 0 0.0 0 0.0 0 0.0 -1.2486475706100464 0.06145240366458893 0.21605446934700012 0.0 0.0 1.0 0.4494447708129883 0.48197758197784424 0 1.0 0 0.0 0 0.0 0 0.0 -1.250809907913208 0.047895535826683044 0.21605446934700012 0.0 0.0 0.999969482421875 0.44775623083114624 0.4679969549179077 0 1.0 0 0.0 0 0.0 0 0.0 -1.1489601135253906 0.051444411277770996 0.21605446934700012 0.0 0.0 1.0 0.5018256902694702 0.476043701171875 0 1.0 0 0.0 0 0.0 0 0.0 -1.1471540927886963 0.05856764316558838 0.21605446934700012 0.0 0.0 1.0 0.5028736591339111 0.4844869375228882 0 1.0 0 0.0 0 0.0 0 0.0 -0.9924546480178833 0.047824978828430176 0.21605446934700012 0.0 0.0 1.0 0.5952191948890686 0.4855912923812866 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6724605560302734 0.28865742683410645 0 1.0 0 0.0 0 0.0 0 0.0 -0.9942206144332886 0.05576547980308533 0.21605446934700012 0.0 0.0 1.0 0.5934914350509644 0.4941715598106384 0 1.0 0 0.0 0 0.0 0 0.0 -1.250809907913208 0.047895535826683044 0.21605446934700012 0.0 0.0 0.999969482421875 0.44775623083114624 0.4679969549179077 0 1.0 0 0.0 0 0.0 0 0.0 -1.150437831878662 0.04393930733203888 0.21605446934700012 0.0 0.0 1.0 0.5009591579437256 0.4670816659927368 0 1.0 0 0.0 0 0.0 0 0.0 -1.1489601135253906 0.051444411277770996 0.21605446934700012 0.0 0.0 1.0 0.5018256902694702 0.476043701171875 0 1.0 0 0.0 0 0.0 0 0.0 -1.2523545026779175 0.03370867669582367 0.21605446934700012 0.0 0.0 1.0 0.4462829530239105 0.45321154594421387 0 1.0 0 0.0 0 0.0 0 0.0 -1.150437831878662 0.04393930733203888 0.21605446934700012 0.0 0.0 1.0 0.5009591579437256 0.4670816659927368 0 1.0 0 0.0 0 0.0 0 0.0 -1.250809907913208 0.047895535826683044 0.21605446934700012 0.0 0.0 0.999969482421875 0.44775623083114624 0.4679969549179077 0 1.0 0 0.0 0 0.0 0 0.0 -0.9910098314285278 0.0393858402967453 0.21605446934700012 0.0 0.0 1.0 0.596843957901001 0.47635602951049805 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6724605560302734 0.28865742683410645 0 1.0 0 0.0 0 0.0 0 0.0 -0.9924546480178833 0.047824978828430176 0.21605446934700012 0.0 0.0 1.0 0.5952191948890686 0.4855912923812866 0 1.0 0 0.0 0 0.0 0 0.0 -1.2523545026779175 0.03370867669582367 0.21605446934700012 0.0 0.0 1.0 0.4462829530239105 0.45321154594421387 0 1.0 0 0.0 0 0.0 0 0.0 -1.1515871286392212 0.036052316427230835 0.21605446934700012 0.0 0.0 1.0 0.500276505947113 0.45759135484695435 0 1.0 0 0.0 0 0.0 0 0.0 -1.150437831878662 0.04393930733203888 0.21605446934700012 0.0 0.0 1.0 0.5009591579437256 0.4670816659927368 0 1.0 0 0.0 0 0.0 0 0.0 -0.9898860454559326 0.0304480642080307 0.21605446934700012 0.0 0.0 1.0 0.5983680486679077 0.4664538502693176 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6724605560302734 0.28865742683410645 0 1.0 0 0.0 0 0.0 0 0.0 -0.9910098314285278 0.0393858402967453 0.21605446934700012 0.0 0.0 1.0 0.596843957901001 0.47635602951049805 0 1.0 0 0.0 0 0.0 0 0.0 -1.2523545026779175 0.03370867669582367 0.21605446934700012 0.0 0.0 1.0 0.4462829530239105 0.45321154594421387 0 1.0 0 0.0 0 0.0 0 0.0 -1.1524080038070679 0.027783438563346863 0.21605446934700012 0.0 0.0 1.0 0.49978107213974 0.44756609201431274 0 1.0 0 0.0 0 0.0 0 0.0 -1.1515871286392212 0.036052316427230835 0.21605446934700012 0.0 0.0 1.0 0.500276505947113 0.45759135484695435 0 1.0 0 0.0 0 0.0 0 0.0 -1.2532812356948853 0.018891841173171997 0.21605446934700012 0.0 0.0 0.999969482421875 0.44502511620521545 0.437610387802124 0 1.0 0 0.0 0 0.0 0 0.0 -1.1524080038070679 0.027783438563346863 0.21605446934700012 0.0 0.0 1.0 0.49978107213974 0.44756609201431274 0 1.0 0 0.0 0 0.0 0 0.0 -1.2523545026779175 0.03370867669582367 0.21605446934700012 0.0 0.0 1.0 0.4462829530239105 0.45321154594421387 0 1.0 0 0.0 0 0.0 0 0.0 -0.9890834093093872 0.021011650562286377 0.21605446934700012 0.0 0.0 1.0 0.5997934341430664 0.4558762311935425 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6724605560302734 0.28865742683410645 0 1.0 0 0.0 0 0.0 0 0.0 -0.9898860454559326 0.0304480642080307 0.21605446934700012 0.0 0.0 1.0 0.5983680486679077 0.4664538502693176 0 1.0 0 0.0 0 0.0 0 0.0 -1.2532812356948853 0.018891841173171997 0.21605446934700012 0.0 0.0 0.999969482421875 0.44502511620521545 0.437610387802124 0 1.0 0 0.0 0 0.0 0 0.0 -1.1529005765914917 0.019132673740386963 0.21605446934700012 0.0 0.0 1.0 0.49947699904441833 0.4370027780532837 0 1.0 0 0.0 0 0.0 0 0.0 -1.1524080038070679 0.027783438563346863 0.21605446934700012 0.0 0.0 1.0 0.49978107213974 0.44756609201431274 0 1.0 0 0.0 0 0.0 0 0.0 -0.988601803779602 0.011076599359512329 0.21605446934700012 0.0 0.0 1.0 0.6011215448379517 0.44461947679519653 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6724605560302734 0.28865742683410645 0 1.0 0 0.0 0 0.0 0 0.0 -0.9890834093093872 0.021011650562286377 0.21605446934700012 0.0 0.0 1.0 0.5997934341430664 0.4558762311935425 0 1.0 0 0.0 0 0.0 0 0.0 -1.2532812356948853 0.018891841173171997 0.21605446934700012 0.0 0.0 0.999969482421875 0.44502511620521545 0.437610387802124 0 1.0 0 0.0 0 0.0 0 0.0 -1.1530647277832031 0.010100007057189941 0.21605446934700012 0.0 0.0 1.0 0.4993695318698883 0.4259029030799866 0 1.0 0 0.0 0 0.0 0 0.0 -1.1529005765914917 0.019132673740386963 0.21605446934700012 0.0 0.0 1.0 0.49947699904441833 0.4370027780532837 0 1.0 0 0.0 0 0.0 0 0.0 -1.2535901069641113 0.0034450143575668335 0.21605446934700012 0.0 0.0 1.0 0.4439847469329834 0.42119497060775757 0 1.0 0 0.0 0 0.0 0 0.0 -1.1530647277832031 0.010100007057189941 0.21605446934700012 0.0 0.0 1.0 0.4993695318698883 0.4259029030799866 0 1.0 0 0.0 0 0.0 0 0.0 -1.2532812356948853 0.018891841173171997 0.21605446934700012 0.0 0.0 0.999969482421875 0.44502511620521545 0.437610387802124 0 1.0 0 0.0 0 0.0 0 0.0 -0.9884412288665771 0.0006429105997085571 0.21605446934700012 0.0 0.0 1.0 0.6023536920547485 0.432685911655426 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6724605560302734 0.28865742683410645 0 1.0 0 0.0 0 0.0 0 0.0 -0.988601803779602 0.011076599359512329 0.21605446934700012 0.0 0.0 1.0 0.6011215448379517 0.44461947679519653 0 1.0 0 0.0 0 0.0 0 0.0 -1.2535901069641113 0.0034450143575668335 0.21605446934700012 0.0 0.0 1.0 0.4439847469329834 0.42119497060775757 0 1.0 0 0.0 0 0.0 0 0.0 -1.152950406074524 0.00040453672409057617 0.21605446934700012 0.0 0.0 1.0 0.4994335174560547 0.4139253497123718 0 1.0 0 0.0 0 0.0 0 0.0 -1.1530647277832031 0.010100007057189941 0.21605446934700012 0.0 0.0 1.0 0.4993695318698883 0.4259029030799866 0 1.0 0 0.0 0 0.0 0 0.0 -1.2532728910446167 -0.011683180928230286 0.21605446934700012 0.0 0.0 1.0 0.4432278871536255 0.40499669313430786 0 1.0 0 0.0 0 0.0 0 0.0 -1.152950406074524 0.00040453672409057617 0.21605446934700012 0.0 0.0 1.0 0.4994335174560547 0.4139253497123718 0 1.0 0 0.0 0 0.0 0 0.0 -1.2535901069641113 0.0034450143575668335 0.21605446934700012 0.0 0.0 1.0 0.4439847469329834 0.42119497060775757 0 1.0 0 0.0 0 0.0 0 0.0 -0.9886071681976318 -0.008732706308364868 0.21605446934700012 0.0 0.0 1.0 0.6033116579055786 0.4218752980232239 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6724605560302734 0.28865742683410645 0 1.0 0 0.0 0 0.0 0 0.0 -0.9884412288665771 0.0006429105997085571 0.21605446934700012 0.0 0.0 1.0 0.6023536920547485 0.432685911655426 0 1.0 0 0.0 0 0.0 0 0.0 -1.2532728910446167 -0.011683180928230286 0.21605446934700012 0.0 0.0 1.0 0.4432278871536255 0.40499669313430786 0 1.0 0 0.0 0 0.0 0 0.0 -1.1526074409484863 -0.008833646774291992 0.21605446934700012 0.0 0.0 1.0 0.49964436888694763 0.40247344970703125 0 1.0 0 0.0 0 0.0 0 0.0 -1.152950406074524 0.00040453672409057617 0.21605446934700012 0.0 0.0 1.0 0.4994335174560547 0.4139253497123718 0 1.0 0 0.0 0 0.0 0 0.0 -0.9891033172607422 -0.017711833119392395 0.21605446934700012 0.0 0.0 0.999969482421875 0.604060173034668 0.4114415645599365 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6724605560302734 0.28865742683410645 0 1.0 0 0.0 0 0.0 0 0.0 -0.9886071681976318 -0.008732706308364868 0.21605446934700012 0.0 0.0 1.0 0.6033116579055786 0.4218752980232239 0 1.0 0 0.0 0 0.0 0 0.0 -1.2532728910446167 -0.011683180928230286 0.21605446934700012 0.0 0.0 1.0 0.4432278871536255 0.40499669313430786 0 1.0 0 0.0 0 0.0 0 0.0 -1.1520358324050903 -0.017614543437957764 0.21605446934700012 0.0 0.0 1.0 0.5000072121620178 0.39157402515411377 0 1.0 0 0.0 0 0.0 0 0.0 -1.1526074409484863 -0.008833646774291992 0.21605446934700012 0.0 0.0 1.0 0.49964436888694763 0.40247344970703125 0 1.0 0 0.0 0 0.0 0 0.0 -1.2523205280303955 -0.026244625449180603 0.21605446934700012 0.0 0.0 1.0 0.4427863359451294 0.38930970430374146 0 1.0 0 0.0 0 0.0 0 0.0 -1.1520358324050903 -0.017614543437957764 0.21605446934700012 0.0 0.0 1.0 0.5000072121620178 0.39157402515411377 0 1.0 0 0.0 0 0.0 0 0.0 -1.2532728910446167 -0.011683180928230286 0.21605446934700012 0.0 0.0 1.0 0.4432278871536255 0.40499669313430786 0 1.0 0 0.0 0 0.0 0 0.0 -1.2523205280303955 -0.026244625449180603 0.21605446934700012 0.0 0.0 1.0 0.4427863359451294 0.38930970430374146 0 1.0 0 0.0 0 0.0 0 0.0 -1.151235580444336 -0.02593815326690674 0.21605446934700012 0.0 0.0 1.0 0.5005269646644592 0.3812466263771057 0 1.0 0 0.0 0 0.0 0 0.0 -1.1520358324050903 -0.017614543437957764 0.21605446934700012 0.0 0.0 1.0 0.5000072121620178 0.39157402515411377 0 1.0 0 0.0 0 0.0 0 0.0 -0.989930272102356 -0.026294484734535217 0.21605446934700012 0.0 0.0 1.0 0.6045933961868286 0.40139156579971313 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6724605560302734 0.28865742683410645 0 1.0 0 0.0 0 0.0 0 0.0 -0.9891033172607422 -0.017711833119392395 0.21605446934700012 0.0 0.0 0.999969482421875 0.604060173034668 0.4114415645599365 0 1.0 0 0.0 0 0.0 0 0.0 -1.2523205280303955 -0.026244625449180603 0.21605446934700012 0.0 0.0 1.0 0.4427863359451294 0.38930970430374146 0 1.0 0 0.0 0 0.0 0 0.0 -1.1502066850662231 -0.033804476261138916 0.21605446934700012 0.0 0.0 1.0 0.5012085437774658 0.3715049624443054 0 1.0 0 0.0 0 0.0 0 0.0 -1.151235580444336 -0.02593815326690674 0.21605446934700012 0.0 0.0 1.0 0.5005269646644592 0.3812466263771057 0 1.0 0 0.0 0 0.0 0 0.0 -1.2507333755493164 -0.04023931920528412 0.21605446934700012 0.0 0.0 1.0 0.44267547130584717 0.37415337562561035 0 1.0 0 0.0 0 0.0 0 0.0 -1.1502066850662231 -0.033804476261138916 0.21605446934700012 0.0 0.0 1.0 0.5012085437774658 0.3715049624443054 0 1.0 0 0.0 0 0.0 0 0.0 -1.2523205280303955 -0.026244625449180603 0.21605446934700012 0.0 0.0 1.0 0.4427863359451294 0.38930970430374146 0 1.0 0 0.0 0 0.0 0 0.0 -0.9910880327224731 -0.034480661153793335 0.21605446934700012 0.0 0.0 1.0 0.6049054265022278 0.3917279839515686 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6724605560302734 0.28865742683410645 0 1.0 0 0.0 0 0.0 0 0.0 -0.989930272102356 -0.026294484734535217 0.21605446934700012 0.0 0.0 1.0 0.6045933961868286 0.40139156579971313 0 1.0 0 0.0 0 0.0 0 0.0 -1.2507333755493164 -0.04023931920528412 0.21605446934700012 0.0 0.0 1.0 0.44267547130584717 0.37415337562561035 0 1.0 0 0.0 0 0.0 0 0.0 -1.148949146270752 -0.0412134975194931 0.21605446934700012 0.0 0.0 0.999969482421875 0.5020564794540405 0.36235707998275757 0 1.0 0 0.0 0 0.0 0 0.0 -1.1502066850662231 -0.033804476261138916 0.21605446934700012 0.0 0.0 1.0 0.5012085437774658 0.3715049624443054 0 1.0 0 0.0 0 0.0 0 0.0 -0.9925765991210938 -0.04227036237716675 0.21605446934700012 0.0 0.0 0.999969482421875 0.6049898862838745 0.38245081901550293 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6724605560302734 0.28865742683410645 0 1.0 0 0.0 0 0.0 0 0.0 -0.9910880327224731 -0.034480661153793335 0.21605446934700012 0.0 0.0 1.0 0.6049054265022278 0.3917279839515686 0 1.0 0 0.0 0 0.0 0 0.0 -1.2485114336013794 -0.053667277097702026 0.21605446934700012 0.0 0.0 1.0 0.4429131746292114 0.3595367670059204 0 1.0 0 0.0 0 0.0 0 0.0 -1.148949146270752 -0.0412134975194931 0.21605446934700012 0.0 0.0 0.999969482421875 0.5020564794540405 0.36235707998275757 0 1.0 0 0.0 0 0.0 0 0.0 -1.2507333755493164 -0.04023931920528412 0.21605446934700012 0.0 0.0 1.0 0.44267547130584717 0.37415337562561035 0 1.0 0 0.0 0 0.0 0 0.0 -1.2485114336013794 -0.053667277097702026 0.21605446934700012 0.0 0.0 1.0 0.4429131746292114 0.3595367670059204 0 1.0 0 0.0 0 0.0 0 0.0 -1.1474629640579224 -0.04816523194313049 0.21605446934700012 0.0 0.0 1.0 0.5030751824378967 0.35380715131759644 0 1.0 0 0.0 0 0.0 0 0.0 -1.148949146270752 -0.0412134975194931 0.21605446934700012 0.0 0.0 0.999969482421875 0.5020564794540405 0.36235707998275757 0 1.0 0 0.0 0 0.0 0 0.0 -0.9943959712982178 -0.04966357350349426 0.21605446934700012 0.0 0.0 1.0 0.6048398613929749 0.3735578656196594 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6724605560302734 0.28865742683410645 0 1.0 0 0.0 0 0.0 0 0.0 -0.9925765991210938 -0.04227036237716675 0.21605446934700012 0.0 0.0 0.999969482421875 0.6049898862838745 0.38245081901550293 0 1.0 0 0.0 0 0.0 0 0.0 -1.2485114336013794 -0.053667277097702026 0.21605446934700012 0.0 0.0 1.0 0.4429131746292114 0.3595367670059204 0 1.0 0 0.0 0 0.0 0 0.0 -1.1457481384277344 -0.054659679532051086 0.21605446934700012 0.0 0.0 0.999969482421875 0.5042688250541687 0.3458558917045593 0 1.0 0 0.0 0 0.0 0 0.0 -1.1474629640579224 -0.04816523194313049 0.21605446934700012 0.0 0.0 1.0 0.5030751824378967 0.35380715131759644 0 1.0 0 0.0 0 0.0 0 0.0 -0.9965461492538452 -0.05666030943393707 0.21605446934700012 0.0 0.0 1.0 0.6044479608535767 0.3650451898574829 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6724605560302734 0.28865742683410645 0 1.0 0 0.0 0 0.0 0 0.0 -0.9943959712982178 -0.04966357350349426 0.21605446934700012 0.0 0.0 1.0 0.6048398613929749 0.3735578656196594 0 1.0 0 0.0 0 0.0 0 0.0 -1.2456544637680054 -0.06652848422527313 0.21605446934700012 0.0 0.0 1.0 0.44352030754089355 0.3454611897468567 0 1.0 0 0.0 0 0.0 0 0.0 -1.1457481384277344 -0.054659679532051086 0.21605446934700012 0.0 0.0 0.999969482421875 0.5042688250541687 0.3458558917045593 0 1.0 0 0.0 0 0.0 0 0.0 -1.2485114336013794 -0.053667277097702026 0.21605446934700012 0.0 0.0 1.0 0.4429131746292114 0.3595367670059204 0 1.0 0 0.0 0 0.0 0 0.0 -1.2456544637680054 -0.06652848422527313 0.21605446934700012 0.0 0.0 1.0 0.44352030754089355 0.3454611897468567 0 1.0 0 0.0 0 0.0 0 0.0 -1.143804669380188 -0.06069684773683548 0.21605446934700012 0.0 0.0 1.0 0.505640983581543 0.33850187063217163 0 1.0 0 0.0 0 0.0 0 0.0 -1.1457481384277344 -0.054659679532051086 0.21605446934700012 0.0 0.0 0.999969482421875 0.5042688250541687 0.3458558917045593 0 1.0 0 0.0 0 0.0 0 0.0 -0.9990271329879761 -0.06326057016849518 0.21605446934700012 0.0 0.0 0.999969482421875 0.60380619764328 0.35690802335739136 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6724605560302734 0.28865742683410645 0 1.0 0 0.0 0 0.0 0 0.0 -0.9965461492538452 -0.05666030943393707 0.21605446934700012 0.0 0.0 1.0 0.6044479608535767 0.3650451898574829 0 1.0 0 0.0 0 0.0 0 0.0 -1.2456544637680054 -0.06652848422527313 0.21605446934700012 0.0 0.0 1.0 0.44352030754089355 0.3454611897468567 0 1.0 0 0.0 0 0.0 0 0.0 -1.1416325569152832 -0.06627672910690308 0.21605446934700012 0.0 0.0 1.0 0.5071949362754822 0.33174222707748413 0 1.0 0 0.0 0 0.0 0 0.0 -1.143804669380188 -0.06069684773683548 0.21605446934700012 0.0 0.0 1.0 0.505640983581543 0.33850187063217163 0 1.0 0 0.0 0 0.0 0 0.0 -1.0018389225006104 -0.06946435570716858 0.21605446934700012 0.0 0.0 0.999969482421875 0.6029060482978821 0.34914159774780273 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6724605560302734 0.28865742683410645 0 1.0 0 0.0 0 0.0 0 0.0 -0.9990271329879761 -0.06326057016849518 0.21605446934700012 0.0 0.0 0.999969482421875 0.60380619764328 0.35690802335739136 0 1.0 0 0.0 0 0.0 0 0.0 -1.2456544637680054 -0.06652848422527313 0.21605446934700012 0.0 0.0 1.0 0.44352030754089355 0.3454611897468567 0 1.0 0 0.0 0 0.0 0 0.0 -1.13923180103302 -0.07139932364225388 0.21605446934700012 0.0 0.0 1.0 0.5089333653450012 0.32557326555252075 0 1.0 0 0.0 0 0.0 0 0.0 -1.1416325569152832 -0.06627672910690308 0.21605446934700012 0.0 0.0 1.0 0.5071949362754822 0.33174222707748413 0 1.0 0 0.0 0 0.0 0 0.0 -1.242162823677063 -0.07882294803857803 0.21605446934700012 0.0 0.0 1.0 0.44452062249183655 0.33192235231399536 0 1.0 0 0.0 0 0.0 0 0.0 -1.13923180103302 -0.07139932364225388 0.21605446934700012 0.0 0.0 1.0 0.5089333653450012 0.32557326555252075 0 1.0 0 0.0 0 0.0 0 0.0 -1.2456544637680054 -0.06652848422527313 0.21605446934700012 0.0 0.0 1.0 0.44352030754089355 0.3454611897468567 0 1.0 0 0.0 0 0.0 0 0.0 -1.004981517791748 -0.07527166604995728 0.21605446934700012 0.0 0.0 0.999969482421875 0.6017383337020874 0.3417413830757141 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6724605560302734 0.28865742683410645 0 1.0 0 0.0 0 0.0 0 0.0 -1.0018389225006104 -0.06946435570716858 0.21605446934700012 0.0 0.0 0.999969482421875 0.6029060482978821 0.34914159774780273 0 1.0 0 0.0 0 0.0 0 0.0 -1.242162823677063 -0.07882294803857803 0.21605446934700012 0.0 0.0 1.0 0.44452062249183655 0.33192235231399536 0 1.0 0 0.0 0 0.0 0 0.0 -1.1366022825241089 -0.07606462389230728 0.21605446934700012 0.0 0.0 1.0 0.510858416557312 0.31999123096466064 0 1.0 0 0.0 0 0.0 0 0.0 -1.13923180103302 -0.07139932364225388 0.21605446934700012 0.0 0.0 1.0 0.5089333653450012 0.32557326555252075 0 1.0 0 0.0 0 0.0 0 0.0 -1.0084549188613892 -0.08068249374628067 0.21605446934700012 0.0 0.0 0.999969482421875 0.6002932786941528 0.33470362424850464 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6724605560302734 0.28865742683410645 0 1.0 0 0.0 0 0.0 0 0.0 -1.004981517791748 -0.07527166604995728 0.21605446934700012 0.0 0.0 0.999969482421875 0.6017383337020874 0.3417413830757141 0 1.0 0 0.0 0 0.0 0 0.0 -1.242162823677063 -0.07882294803857803 0.21605446934700012 0.0 0.0 1.0 0.44452062249183655 0.33192235231399536 0 1.0 0 0.0 0 0.0 0 0.0 -1.132501244544983 -0.08221854269504547 0.21605446934700012 0.0 0.0 1.0 0.5139024257659912 0.3127002716064453 0 1.0 0 0.0 0 0.0 0 0.0 -1.1366022825241089 -0.07606462389230728 0.21605446934700012 0.0 0.0 1.0 0.510858416557312 0.31999123096466064 0 1.0 0 0.0 0 0.0 0 0.0 -1.2380362749099731 -0.09055066853761673 0.21605446934700012 0.0 0.0 1.0 0.44594162702560425 0.31891322135925293 0 1.0 0 0.0 0 0.0 0 0.0 -1.132501244544983 -0.08221854269504547 0.21605446934700012 0.0 0.0 1.0 0.5139024257659912 0.3127002716064453 0 1.0 0 0.0 0 0.0 0 0.0 -1.242162823677063 -0.07882294803857803 0.21605446934700012 0.0 0.0 1.0 0.44452062249183655 0.33192235231399536 0 1.0 0 0.0 0 0.0 0 0.0 -1.0122591257095337 -0.08569684624671936 0.21605446934700012 0.0 0.0 1.0 0.5985607504844666 0.32802635431289673 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6724605560302734 0.28865742683410645 0 1.0 0 0.0 0 0.0 0 0.0 -1.0084549188613892 -0.08068249374628067 0.21605446934700012 0.0 0.0 0.999969482421875 0.6002932786941528 0.33470362424850464 0 1.0 0 0.0 0 0.0 0 0.0 -1.2380362749099731 -0.09055066853761673 0.21605446934700012 0.0 0.0 1.0 0.44594162702560425 0.31891322135925293 0 1.0 0 0.0 0 0.0 0 0.0 -1.1281375885009766 -0.0878373384475708 0.21605446934700012 0.0 0.0 0.999969482421875 0.5171929597854614 0.30614006519317627 0 1.0 0 0.0 0 0.0 0 0.0 -1.132501244544983 -0.08221854269504547 0.21605446934700012 0.0 0.0 1.0 0.5139024257659912 0.3127002716064453 0 1.0 0 0.0 0 0.0 0 0.0 -1.0162993669509888 -0.09031227976083755 0.21605446934700012 0.0 0.0 1.0 0.5965896844863892 0.32174062728881836 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6724605560302734 0.28865742683410645 0 1.0 0 0.0 0 0.0 0 0.0 -1.0122591257095337 -0.08569684624671936 0.21605446934700012 0.0 0.0 1.0 0.5985607504844666 0.32802635431289673 0 1.0 0 0.0 0 0.0 0 0.0 -1.2380362749099731 -0.09055066853761673 0.21605446934700012 0.0 0.0 1.0 0.44594162702560425 0.31891322135925293 0 1.0 0 0.0 0 0.0 0 0.0 -1.1235111951828003 -0.09292101114988327 0.21605446934700012 0.0 0.0 1.0 0.5207288265228271 0.3003121018409729 0 1.0 0 0.0 0 0.0 0 0.0 -1.1281375885009766 -0.0878373384475708 0.21605446934700012 0.0 0.0 0.999969482421875 0.5171929597854614 0.30614006519317627 0 1.0 0 0.0 0 0.0 0 0.0 -1.0204806327819824 -0.09452638030052185 0.21605446934700012 0.0 0.0 0.999969482421875 0.5944331288337708 0.3158789873123169 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6724605560302734 0.28865742683410645 0 1.0 0 0.0 0 0.0 0 0.0 -1.0162993669509888 -0.09031227976083755 0.21605446934700012 0.0 0.0 1.0 0.5965896844863892 0.32174062728881836 0 1.0 0 0.0 0 0.0 0 0.0 -1.2332748174667358 -0.10171164572238922 0.21605446934700012 0.0 0.0 1.0 0.4478146731853485 0.3064257502555847 0 1.0 0 0.0 0 0.0 0 0.0 -1.1235111951828003 -0.09292101114988327 0.21605446934700012 0.0 0.0 1.0 0.5207288265228271 0.3003121018409729 0 1.0 0 0.0 0 0.0 0 0.0 -1.2380362749099731 -0.09055066853761673 0.21605446934700012 0.0 0.0 1.0 0.44594162702560425 0.31891322135925293 0 1.0 0 0.0 0 0.0 0 0.0 -1.2332748174667358 -0.10171164572238922 0.21605446934700012 0.0 0.0 1.0 0.4478146731853485 0.3064257502555847 0 1.0 0 0.0 0 0.0 0 0.0 -1.118622064590454 -0.09746956080198288 0.21605446934700012 0.0 0.0 1.0 0.5245062708854675 0.2952185273170471 0 1.0 0 0.0 0 0.0 0 0.0 -1.1235111951828003 -0.09292101114988327 0.21605446934700012 0.0 0.0 1.0 0.5207288265228271 0.3003121018409729 0 1.0 0 0.0 0 0.0 0 0.0 -1.0248029232025146 -0.09833913296461105 0.21605446934700012 0.0 0.0 0.999969482421875 0.5920868515968323 0.31044334173202515 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6724605560302734 0.28865742683410645 0 1.0 0 0.0 0 0.0 0 0.0 -1.0204806327819824 -0.09452638030052185 0.21605446934700012 0.0 0.0 0.999969482421875 0.5944331288337708 0.3158789873123169 0 1.0 0 0.0 0 0.0 0 0.0 -1.2332748174667358 -0.10171164572238922 0.21605446934700012 0.0 0.0 1.0 0.4478146731853485 0.3064257502555847 0 1.0 0 0.0 0 0.0 0 0.0 -1.1134703159332275 -0.10148298740386963 0.21605446934700012 0.0 0.0 1.0 0.5285190939903259 0.2908620238304138 0 1.0 0 0.0 0 0.0 0 0.0 -1.118622064590454 -0.09746956080198288 0.21605446934700012 0.0 0.0 1.0 0.5245062708854675 0.2952185273170471 0 1.0 0 0.0 0 0.0 0 0.0 -1.029266357421875 -0.10175054520368576 0.21605446934700012 0.0 0.0 1.0 0.5895469188690186 0.30543601512908936 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 0.21605446934700012 0.0 0.0 1.0 0.6224963665008545 0.2940528988838196 0 1.0 0 0.0 0 0.0 0 0.0 -1.0248029232025146 -0.09833913296461105 0.21605446934700012 0.0 0.0 0.999969482421875 0.5920868515968323 0.31044334173202515 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 0.21605446934700012 0.0 0.0 1.0 0.6224963665008545 0.2940528988838196 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6724605560302734 0.28865742683410645 0 1.0 0 0.0 0 0.0 0 0.0 -1.0248029232025146 -0.09833913296461105 0.21605446934700012 0.0 0.0 0.999969482421875 0.5920868515968323 0.31044334173202515 0 1.0 0 0.0 0 0.0 0 0.0 -1.2332748174667358 -0.10171164572238922 0.21605446934700012 0.0 0.0 1.0 0.4478146731853485 0.3064257502555847 0 1.0 0 0.0 0 0.0 0 0.0 -1.108055830001831 -0.10496129095554352 0.21605446934700012 0.0 0.0 1.0 0.5327584743499756 0.28724706172943115 0 1.0 0 0.0 0 0.0 0 0.0 -1.1134703159332275 -0.10148298740386963 0.21605446934700012 0.0 0.0 1.0 0.5285190939903259 0.2908620238304138 0 1.0 0 0.0 0 0.0 0 0.0 -1.2278786897659302 -0.11230587214231491 0.21605446934700012 0.0 0.0 1.0 0.4501752555370331 0.29445379972457886 0 1.0 0 0.0 0 0.0 0 0.0 -1.108055830001831 -0.10496129095554352 0.21605446934700012 0.0 0.0 1.0 0.5327584743499756 0.28724706172943115 0 1.0 0 0.0 0 0.0 0 0.0 -1.2332748174667358 -0.10171164572238922 0.21605446934700012 0.0 0.0 1.0 0.4478146731853485 0.3064257502555847 0 1.0 0 0.0 0 0.0 0 0.0 -1.033870816230774 -0.10476061701774597 0.21605446934700012 0.0 0.0 1.0 0.586810290813446 0.30086058378219604 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 0.21605446934700012 0.0 0.0 1.0 0.6224963665008545 0.2940528988838196 0 1.0 0 0.0 0 0.0 0 0.0 -1.029266357421875 -0.10175054520368576 0.21605446934700012 0.0 0.0 1.0 0.5895469188690186 0.30543601512908936 0 1.0 0 0.0 0 0.0 0 0.0 -1.038616418838501 -0.10736934840679169 0.21605446934700012 0.0 0.0 1.0 0.5838744640350342 0.2967216968536377 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 0.21605446934700012 0.0 0.0 1.0 0.6224963665008545 0.2940528988838196 0 1.0 0 0.0 0 0.0 0 0.0 -1.033870816230774 -0.10476061701774597 0.21605446934700012 0.0 0.0 1.0 0.586810290813446 0.30086058378219604 0 1.0 0 0.0 0 0.0 0 0.0 -1.2278786897659302 -0.11230587214231491 0.21605446934700012 0.0 0.0 1.0 0.4501752555370331 0.29445379972457886 0 1.0 0 0.0 0 0.0 0 0.0 -1.1023786067962646 -0.10790447145700455 0.21605446934700012 0.0 0.0 1.0 0.537212610244751 0.28437894582748413 0 1.0 0 0.0 0 0.0 0 0.0 -1.108055830001831 -0.10496129095554352 0.21605446934700012 0.0 0.0 1.0 0.5327584743499756 0.28724706172943115 0 1.0 0 0.0 0 0.0 0 0.0 -1.0435030460357666 -0.10957673192024231 0.21605446934700012 0.0 0.0 1.0 0.5807379484176636 0.2930253744125366 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 0.21605446934700012 0.0 0.0 1.0 0.6224963665008545 0.2940528988838196 0 1.0 0 0.0 0 0.0 0 0.0 -1.038616418838501 -0.10736934840679169 0.21605446934700012 0.0 0.0 1.0 0.5838744640350342 0.2967216968536377 0 1.0 0 0.0 0 0.0 0 0.0 -1.2278786897659302 -0.11230587214231491 0.21605446934700012 0.0 0.0 1.0 0.4501752555370331 0.29445379972457886 0 1.0 0 0.0 0 0.0 0 0.0 -1.0964387655258179 -0.11031252890825272 0.21605446934700012 0.0 0.0 1.0 0.5418664813041687 0.2822644114494324 0 1.0 0 0.0 0 0.0 0 0.0 -1.1023786067962646 -0.10790447145700455 0.21605446934700012 0.0 0.0 1.0 0.537212610244751 0.28437894582748413 0 1.0 0 0.0 0 0.0 0 0.0 -1.0485308170318604 -0.11138277500867844 0.21605446934700012 0.0 0.0 1.0 0.5774003267288208 0.2897791862487793 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 0.21605446934700012 0.0 0.0 1.0 0.6224963665008545 0.2940528988838196 0 1.0 0 0.0 0 0.0 0 0.0 -1.0435030460357666 -0.10957673192024231 0.21605446934700012 0.0 0.0 1.0 0.5807379484176636 0.2930253744125366 0 1.0 0 0.0 0 0.0 0 0.0 -1.2278786897659302 -0.11230587214231491 0.21605446934700012 0.0 0.0 1.0 0.4501752555370331 0.29445379972457886 0 1.0 0 0.0 0 0.0 0 0.0 -1.0902361869812012 -0.11218546330928802 0.21605446934700012 0.0 0.0 0.999969482421875 0.5467023253440857 0.2809107303619385 0 1.0 0 0.0 0 0.0 0 0.0 -1.0964387655258179 -0.11031252890825272 0.21605446934700012 0.0 0.0 1.0 0.5418664813041687 0.2822644114494324 0 1.0 0 0.0 0 0.0 0 0.0 -1.0536996126174927 -0.11278747767210007 0.21605446934700012 0.0 0.0 1.0 0.5738626718521118 0.28699201345443726 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 0.21605446934700012 0.0 0.0 1.0 0.6224963665008545 0.2940528988838196 0 1.0 0 0.0 0 0.0 0 0.0 -1.0485308170318604 -0.11138277500867844 0.21605446934700012 0.0 0.0 1.0 0.5774003267288208 0.2897791862487793 0 1.0 0 0.0 0 0.0 0 0.0 -1.2278786897659302 -0.11230587214231491 0.21605446934700012 0.0 0.0 1.0 0.4501752555370331 0.29445379972457886 0 1.0 0 0.0 0 0.0 0 0.0 -1.0837708711624146 -0.11352327466011047 0.21605446934700012 0.0 0.0 1.0 0.5516993403434753 0.28032606840133667 0 1.0 0 0.0 0 0.0 0 0.0 -1.0902361869812012 -0.11218546330928802 0.21605446934700012 0.0 0.0 0.999969482421875 0.5467023253440857 0.2809107303619385 0 1.0 0 0.0 0 0.0 0 0.0 -1.2218475341796875 -0.1223333552479744 0.21605446934700012 0.0 0.0 1.0 0.45306360721588135 0.28299450874328613 0 1.0 0 0.0 0 0.0 0 0.0 -1.0837708711624146 -0.11352327466011047 0.21605446934700012 0.0 0.0 1.0 0.5516993403434753 0.28032606840133667 0 1.0 0 0.0 0 0.0 0 0.0 -1.2278786897659302 -0.11230587214231491 0.21605446934700012 0.0 0.0 1.0 0.4501752555370331 0.29445379972457886 0 1.0 0 0.0 0 0.0 0 0.0 -1.0590094327926636 -0.1137908324599266 0.21605446934700012 0.0 0.0 1.0 0.5701271891593933 0.28467416763305664 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 0.21605446934700012 0.0 0.0 1.0 0.6224963665008545 0.2940528988838196 0 1.0 0 0.0 0 0.0 0 0.0 -1.0536996126174927 -0.11278747767210007 0.21605446934700012 0.0 0.0 1.0 0.5738626718521118 0.28699201345443726 0 1.0 0 0.0 0 0.0 0 0.0 -1.2218475341796875 -0.1223333552479744 0.21605446934700012 0.0 0.0 1.0 0.45306360721588135 0.28299450874328613 0 1.0 0 0.0 0 0.0 0 0.0 -1.0770429372787476 -0.11432596296072006 0.21605446934700012 0.0 0.0 1.0 0.5568340420722961 0.28051841259002686 0 1.0 0 0.0 0 0.0 0 0.0 -1.0837708711624146 -0.11352327466011047 0.21605446934700012 0.0 0.0 1.0 0.5516993403434753 0.28032606840133667 0 1.0 0 0.0 0 0.0 0 0.0 -1.0644603967666626 -0.11439284682273865 0.21605446934700012 0.0 -3.0518509447574615e-05 1.0 0.5661978721618652 0.28283756971359253 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 0.21605446934700012 0.0 0.0 1.0 0.6224963665008545 0.2940528988838196 0 1.0 0 0.0 0 0.0 0 0.0 -1.0590094327926636 -0.1137908324599266 0.21605446934700012 0.0 0.0 1.0 0.5701271891593933 0.28467416763305664 0 1.0 0 0.0 0 0.0 0 0.0 -1.2218475341796875 -0.1223333552479744 0.21605446934700012 0.0 0.0 1.0 0.45306360721588135 0.28299450874328613 0 1.0 0 0.0 0 0.0 0 0.0 -1.0700523853302002 -0.1145935207605362 0.21605446934700012 0.0 0.0 1.0 0.5620806217193604 0.2814953923225403 0 1.0 0 0.0 0 0.0 0 0.0 -1.0770429372787476 -0.11432596296072006 0.21605446934700012 0.0 0.0 1.0 0.5568340420722961 0.28051841259002686 0 1.0 0 0.0 0 0.0 0 0.0 -1.0700523853302002 -0.1145935207605362 0.21605446934700012 0.0 0.0 1.0 0.5620806217193604 0.2814953923225403 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 0.21605446934700012 0.0 0.0 1.0 0.6224963665008545 0.2940528988838196 0 1.0 0 0.0 0 0.0 0 0.0 -1.0644603967666626 -0.11439284682273865 0.21605446934700012 0.0 -3.0518509447574615e-05 1.0 0.5661978721618652 0.28283756971359253 0 1.0 0 0.0 0 0.0 0 0.0 -1.2218475341796875 -0.1223333552479744 0.21605446934700012 0.0 0.0 1.0 0.45306360721588135 0.28299450874328613 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 0.21605446934700012 0.0 0.0 1.0 0.6224963665008545 0.2940528988838196 0 1.0 0 0.0 0 0.0 0 0.0 -1.0700523853302002 -0.1145935207605362 0.21605446934700012 0.0 0.0 1.0 0.5620806217193604 0.2814953923225403 0 1.0 0 0.0 0 0.0 0 0.0 -1.215181589126587 -0.13179409503936768 0.21605446934700012 0.0 0.0 0.999969482421875 0.4565242528915405 0.27205127477645874 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 0.21605446934700012 0.0 0.0 1.0 0.6224963665008545 0.2940528988838196 0 1.0 0 0.0 0 0.0 0 0.0 -1.2218475341796875 -0.1223333552479744 0.21605446934700012 0.0 0.0 1.0 0.45306360721588135 0.28299450874328613 0 1.0 0 0.0 0 0.0 0 0.0 -1.215181589126587 -0.13179409503936768 0.21605446934700012 0.0 0.0 0.999969482421875 0.4565242528915405 0.27205127477645874 0 1.0 0 0.0 0 0.0 0 0.0 -0.985637903213501 -0.13450376689434052 0.21605446934700012 0.0 0.0 0.999969482421875 0.6210468411445618 0.2876055836677551 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 0.21605446934700012 0.0 0.0 1.0 0.6224963665008545 0.2940528988838196 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6307469606399536 0.2462201714515686 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6724605560302734 0.28865742683410645 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 0.21605446934700012 0.0 0.0 1.0 0.6224963665008545 0.2940528988838196 0 1.0 0 0.0 0 0.0 0 0.0 -1.2078808546066284 -0.14068809151649475 0.21605446934700012 0.0 0.0 1.0 0.46060603857040405 0.26163506507873535 0 1.0 0 0.0 0 0.0 0 0.0 -0.985637903213501 -0.13450376689434052 0.21605446934700012 0.0 0.0 0.999969482421875 0.6210468411445618 0.2876055836677551 0 1.0 0 0.0 0 0.0 0 0.0 -1.215181589126587 -0.13179409503936768 0.21605446934700012 0.0 0.0 0.999969482421875 0.4565242528915405 0.27205127477645874 0 1.0 0 0.0 0 0.0 0 0.0 -1.2078808546066284 -0.14068809151649475 0.21605446934700012 0.0 0.0 1.0 0.46060603857040405 0.26163506507873535 0 1.0 0 0.0 0 0.0 0 0.0 -0.9896038770675659 -0.13947677612304688 0.21605446934700012 0.0 0.0 0.999969482421875 0.619458019733429 0.2813679575920105 0 1.0 0 0.0 0 0.0 0 0.0 -0.985637903213501 -0.13450376689434052 0.21605446934700012 0.0 0.0 0.999969482421875 0.6210468411445618 0.2876055836677551 0 1.0 0 0.0 0 0.0 0 0.0 -1.2078808546066284 -0.14068809151649475 0.21605446934700012 0.0 0.0 1.0 0.46060603857040405 0.26163506507873535 0 1.0 0 0.0 0 0.0 0 0.0 -0.9936841726303101 -0.14422355592250824 0.21605446934700012 0.0 0.0 1.0 0.6177242398262024 0.2753394842147827 0 1.0 0 0.0 0 0.0 0 0.0 -0.9896038770675659 -0.13947677612304688 0.21605446934700012 0.0 0.0 0.999969482421875 0.619458019733429 0.2813679575920105 0 1.0 0 0.0 0 0.0 0 0.0 -1.2001348733901978 -0.14893993735313416 0.21605446934700012 0.0 0.0 1.0 0.4652387797832489 0.2518855929374695 0 1.0 0 0.0 0 0.0 0 0.0 -0.9936841726303101 -0.14422355592250824 0.21605446934700012 0.0 0.0 1.0 0.6177242398262024 0.2753394842147827 0 1.0 0 0.0 0 0.0 0 0.0 -1.2078808546066284 -0.14068809151649475 0.21605446934700012 0.0 0.0 1.0 0.46060603857040405 0.26163506507873535 0 1.0 0 0.0 0 0.0 0 0.0 -1.2001348733901978 -0.14893993735313416 0.21605446934700012 0.0 0.0 1.0 0.4652387797832489 0.2518855929374695 0 1.0 0 0.0 0 0.0 0 0.0 -0.9978787899017334 -0.148744136095047 0.21605446934700012 0.0 0.0 1.0 0.6158398389816284 0.26952022314071655 0 1.0 0 0.0 0 0.0 0 0.0 -0.9936841726303101 -0.14422355592250824 0.21605446934700012 0.0 0.0 1.0 0.6177242398262024 0.2753394842147827 0 1.0 0 0.0 0 0.0 0 0.0 -1.2001348733901978 -0.14893993735313416 0.21605446934700012 0.0 0.0 1.0 0.4652387797832489 0.2518855929374695 0 1.0 0 0.0 0 0.0 0 0.0 -1.002187728881836 -0.15303850173950195 0.21605446934700012 0.0 0.0 1.0 0.6137987971305847 0.26391035318374634 0 1.0 0 0.0 0 0.0 0 0.0 -0.9978787899017334 -0.148744136095047 0.21605446934700012 0.0 0.0 1.0 0.6158398389816284 0.26952022314071655 0 1.0 0 0.0 0 0.0 0 0.0 -1.1921335458755493 -0.15647423267364502 0.21605446934700012 0.0 0.0 1.0 0.4703311324119568 0.24293971061706543 0 1.0 0 0.0 0 0.0 0 0.0 -1.002187728881836 -0.15303850173950195 0.21605446934700012 0.0 0.0 1.0 0.6137987971305847 0.26391035318374634 0 1.0 0 0.0 0 0.0 0 0.0 -1.2001348733901978 -0.14893993735313416 0.21605446934700012 0.0 0.0 1.0 0.4652387797832489 0.2518855929374695 0 1.0 0 0.0 0 0.0 0 0.0 -1.1921335458755493 -0.15647423267364502 0.21605446934700012 0.0 0.0 1.0 0.4703311324119568 0.24293971061706543 0 1.0 0 0.0 0 0.0 0 0.0 -1.0066109895706177 -0.1571066677570343 0.21605446934700012 0.0 0.0 1.0 0.6115951538085938 0.25851088762283325 0 1.0 0 0.0 0 0.0 0 0.0 -1.002187728881836 -0.15303850173950195 0.21605446934700012 0.0 0.0 1.0 0.6137987971305847 0.26391035318374634 0 1.0 0 0.0 0 0.0 0 0.0 -1.183876872062683 -0.16329097747802734 0.21605446934700012 0.0 0.0 1.0 0.4759005308151245 0.23481398820877075 0 1.0 0 0.0 0 0.0 0 0.0 -1.0066109895706177 -0.1571066677570343 0.21605446934700012 0.0 0.0 1.0 0.6115951538085938 0.25851088762283325 0 1.0 0 0.0 0 0.0 0 0.0 -1.1921335458755493 -0.15647423267364502 0.21605446934700012 0.0 0.0 1.0 0.4703311324119568 0.24293971061706543 0 1.0 0 0.0 0 0.0 0 0.0 -1.183876872062683 -0.16329097747802734 0.21605446934700012 0.0 0.0 1.0 0.4759005308151245 0.23481398820877075 0 1.0 0 0.0 0 0.0 0 0.0 -1.0111485719680786 -0.16094860434532166 0.21605446934700012 0.0 0.0 0.999969482421875 0.6092228889465332 0.25332319736480713 0 1.0 0 0.0 0 0.0 0 0.0 -1.0066109895706177 -0.1571066677570343 0.21605446934700012 0.0 0.0 1.0 0.6115951538085938 0.25851088762283325 0 1.0 0 0.0 0 0.0 0 0.0 -1.183876872062683 -0.16329097747802734 0.21605446934700012 0.0 0.0 1.0 0.4759005308151245 0.23481398820877075 0 1.0 0 0.0 0 0.0 0 0.0 -1.0158004760742188 -0.1645643413066864 0.21605446934700012 0.0 0.0 1.0 0.6066759824752808 0.24834954738616943 0 1.0 0 0.0 0 0.0 0 0.0 -1.0111485719680786 -0.16094860434532166 0.21605446934700012 0.0 0.0 0.999969482421875 0.6092228889465332 0.25332319736480713 0 1.0 0 0.0 0 0.0 0 0.0 -1.1753647327423096 -0.16939017176628113 0.21605446934700012 0.0 0.0 1.0 0.48195916414260864 0.22752833366394043 0 1.0 0 0.0 0 0.0 0 0.0 -1.0158004760742188 -0.1645643413066864 0.21605446934700012 0.0 0.0 1.0 0.6066759824752808 0.24834954738616943 0 1.0 0 0.0 0 0.0 0 0.0 -1.183876872062683 -0.16329097747802734 0.21605446934700012 0.0 0.0 1.0 0.4759005308151245 0.23481398820877075 0 1.0 0 0.0 0 0.0 0 0.0 -1.1753647327423096 -0.16939017176628113 0.21605446934700012 0.0 0.0 1.0 0.48195916414260864 0.22752833366394043 0 1.0 0 0.0 0 0.0 0 0.0 -1.020566701889038 -0.16795386373996735 0.21605446934700012 0.0 0.0 1.0 0.6039486527442932 0.24359291791915894 0 1.0 0 0.0 0 0.0 0 0.0 -1.0158004760742188 -0.1645643413066864 0.21605446934700012 0.0 0.0 1.0 0.6066759824752808 0.24834954738616943 0 1.0 0 0.0 0 0.0 0 0.0 -1.1753647327423096 -0.16939017176628113 0.21605446934700012 0.0 0.0 1.0 0.48195916414260864 0.22752833366394043 0 1.0 0 0.0 0 0.0 0 0.0 -1.0254472494125366 -0.1711171716451645 0.21605445444583893 0.0 0.0 0.999969482421875 0.6010351181030273 0.23905706405639648 0 1.0 0 0.0 0 0.0 0 0.0 -1.020566701889038 -0.16795386373996735 0.21605446934700012 0.0 0.0 1.0 0.6039486527442932 0.24359291791915894 0 1.0 0 0.0 0 0.0 0 0.0 -1.1665972471237183 -0.17477181553840637 0.21605445444583893 0.0 0.0 1.0 0.48851171135902405 0.22110700607299805 0 1.0 0 0.0 0 0.0 0 0.0 -1.0254472494125366 -0.1711171716451645 0.21605445444583893 0.0 0.0 0.999969482421875 0.6010351181030273 0.23905706405639648 0 1.0 0 0.0 0 0.0 0 0.0 -1.1753647327423096 -0.16939017176628113 0.21605446934700012 0.0 0.0 1.0 0.48195916414260864 0.22752833366394043 0 1.0 0 0.0 0 0.0 0 0.0 -1.1665972471237183 -0.17477181553840637 0.21605445444583893 0.0 0.0 1.0 0.48851171135902405 0.22110700607299805 0 1.0 0 0.0 0 0.0 0 0.0 -1.0304421186447144 -0.17405426502227783 0.21605445444583893 0.0 0.0 1.0 0.5979301333427429 0.23474663496017456 0 1.0 0 0.0 0 0.0 0 0.0 -1.0254472494125366 -0.1711171716451645 0.21605445444583893 0.0 0.0 0.999969482421875 0.6010351181030273 0.23905706405639648 0 1.0 0 0.0 0 0.0 0 0.0 -1.1665972471237183 -0.17477181553840637 0.21605445444583893 0.0 0.0 1.0 0.48851171135902405 0.22110700607299805 0 1.0 0 0.0 0 0.0 0 0.0 -1.0355515480041504 -0.17676514387130737 0.21605443954467773 0.0 0.0 1.0 0.5946286916732788 0.2306671142578125 0 1.0 0 0.0 0 0.0 0 0.0 -1.0304421186447144 -0.17405426502227783 0.21605445444583893 0.0 0.0 1.0 0.5979301333427429 0.23474663496017456 0 1.0 0 0.0 0 0.0 0 0.0 -1.1575742959976196 -0.17943590879440308 0.21605445444583893 0.0 0.0 0.999969482421875 0.49555355310440063 0.2155786156654358 0 1.0 0 0.0 0 0.0 0 0.0 -1.0355515480041504 -0.17676514387130737 0.21605443954467773 0.0 0.0 1.0 0.5946286916732788 0.2306671142578125 0 1.0 0 0.0 0 0.0 0 0.0 -1.1665972471237183 -0.17477181553840637 0.21605445444583893 0.0 0.0 1.0 0.48851171135902405 0.22110700607299805 0 1.0 0 0.0 0 0.0 0 0.0 -1.1575742959976196 -0.17943590879440308 0.21605445444583893 0.0 0.0 0.999969482421875 0.49555355310440063 0.2155786156654358 0 1.0 0 0.0 0 0.0 0 0.0 -1.0407215356826782 -0.1792546957731247 0.21605445444583893 0.0 0.0 1.0 0.5911673903465271 0.22683840990066528 0 1.0 0 0.0 0 0.0 0 0.0 -1.0355515480041504 -0.17676514387130737 0.21605443954467773 0.0 0.0 1.0 0.5946286916732788 0.2306671142578125 0 1.0 0 0.0 0 0.0 0 0.0 -1.1575742959976196 -0.17943590879440308 0.21605445444583893 0.0 0.0 0.999969482421875 0.49555355310440063 0.2155786156654358 0 1.0 0 0.0 0 0.0 0 0.0 -1.0458989143371582 -0.1815277487039566 0.21605445444583893 0.0 0.0 1.0 0.5875861644744873 0.22327786684036255 0 1.0 0 0.0 0 0.0 0 0.0 -1.0407215356826782 -0.1792546957731247 0.21605445444583893 0.0 0.0 1.0 0.5911673903465271 0.22683840990066528 0 1.0 0 0.0 0 0.0 0 0.0 -1.1482959985733032 -0.18338243663311005 0.21605445444583893 0.0 0.0 1.0 0.5030680298805237 0.2109755277633667 0 1.0 0 0.0 0 0.0 0 0.0 -1.0458989143371582 -0.1815277487039566 0.21605445444583893 0.0 0.0 1.0 0.5875861644744873 0.22327786684036255 0 1.0 0 0.0 0 0.0 0 0.0 -1.1575742959976196 -0.17943590879440308 0.21605445444583893 0.0 0.0 0.999969482421875 0.49555355310440063 0.2155786156654358 0 1.0 0 0.0 0 0.0 0 0.0 -1.1482959985733032 -0.18338243663311005 0.21605445444583893 0.0 0.0 1.0 0.5030680298805237 0.2109755277633667 0 1.0 0 0.0 0 0.0 0 0.0 -1.0510835647583008 -0.1835843324661255 0.21605445444583893 0.0 0.0 1.0 0.5838873982429504 0.2199886441230774 0 1.0 0 0.0 0 0.0 0 0.0 -1.0458989143371582 -0.1815277487039566 0.21605445444583893 0.0 0.0 1.0 0.5875861644744873 0.22327786684036255 0 1.0 0 0.0 0 0.0 0 0.0 -1.1387622356414795 -0.18661142885684967 0.21605445444583893 0.0 0.0 1.0 0.5110252499580383 0.20733344554901123 0 1.0 0 0.0 0 0.0 0 0.0 -1.0510835647583008 -0.1835843324661255 0.21605445444583893 0.0 0.0 1.0 0.5838873982429504 0.2199886441230774 0 1.0 0 0.0 0 0.0 0 0.0 -1.1482959985733032 -0.18338243663311005 0.21605445444583893 0.0 0.0 1.0 0.5030680298805237 0.2109755277633667 0 1.0 0 0.0 0 0.0 0 0.0 -1.1387622356414795 -0.18661142885684967 0.21605445444583893 0.0 0.0 1.0 0.5110252499580383 0.20733344554901123 0 1.0 0 0.0 0 0.0 0 0.0 -1.056275486946106 -0.18542441725730896 0.21605445444583893 0.0 0.0 1.0 0.5800744295120239 0.21697372198104858 0 1.0 0 0.0 0 0.0 0 0.0 -1.0510835647583008 -0.1835843324661255 0.21605445444583893 0.0 0.0 1.0 0.5838873982429504 0.2199886441230774 0 1.0 0 0.0 0 0.0 0 0.0 -1.1387622356414795 -0.18661142885684967 0.21605445444583893 0.0 0.0 1.0 0.5110252499580383 0.20733344554901123 0 1.0 0 0.0 0 0.0 0 0.0 -1.0614746809005737 -0.1870480328798294 0.21605445444583893 0.0 0.0 0.999969482421875 0.5761512517929077 0.21423637866973877 0 1.0 0 0.0 0 0.0 0 0.0 -1.056275486946106 -0.18542441725730896 0.21605445444583893 0.0 0.0 1.0 0.5800744295120239 0.21697372198104858 0 1.0 0 0.0 0 0.0 0 0.0 -1.128973126411438 -0.18912285566329956 0.21605445444583893 0.0 0.0 1.0 0.5193799734115601 0.20468991994857788 0 1.0 0 0.0 0 0.0 0 0.0 -1.0614746809005737 -0.1870480328798294 0.21605445444583893 0.0 0.0 0.999969482421875 0.5761512517929077 0.21423637866973877 0 1.0 0 0.0 0 0.0 0 0.0 -1.1387622356414795 -0.18661142885684967 0.21605445444583893 0.0 0.0 1.0 0.5110252499580383 0.20733344554901123 0 1.0 0 0.0 0 0.0 0 0.0 -1.128973126411438 -0.18912285566329956 0.21605445444583893 0.0 0.0 1.0 0.5193799734115601 0.20468991994857788 0 1.0 0 0.0 0 0.0 0 0.0 -1.066681146621704 -0.18845516443252563 0.21605445444583893 0.0 0.0 1.0 0.5721230506896973 0.21177977323532104 0 1.0 0 0.0 0 0.0 0 0.0 -1.0614746809005737 -0.1870480328798294 0.21605445444583893 0.0 0.0 0.999969482421875 0.5761512517929077 0.21423637866973877 0 1.0 0 0.0 0 0.0 0 0.0 -1.128973126411438 -0.18912285566329956 0.21605445444583893 0.0 0.0 1.0 0.5193799734115601 0.20468991994857788 0 1.0 0 0.0 0 0.0 0 0.0 -1.0718950033187866 -0.18964582681655884 0.21605445444583893 0.0 0.0 1.0 0.5679959058761597 0.20960724353790283 0 1.0 0 0.0 0 0.0 0 0.0 -1.066681146621704 -0.18845516443252563 0.21605445444583893 0.0 0.0 1.0 0.5721230506896973 0.21177977323532104 0 1.0 0 0.0 0 0.0 0 0.0 -1.1189286708831787 -0.1909167319536209 0.21605445444583893 0.0 0.0 1.0 0.5280721187591553 0.20308256149291992 0 1.0 0 0.0 0 0.0 0 0.0 -1.0718950033187866 -0.18964582681655884 0.21605445444583893 0.0 0.0 1.0 0.5679959058761597 0.20960724353790283 0 1.0 0 0.0 0 0.0 0 0.0 -1.128973126411438 -0.18912285566329956 0.21605445444583893 0.0 0.0 1.0 0.5193799734115601 0.20468991994857788 0 1.0 0 0.0 0 0.0 0 0.0 -1.1189286708831787 -0.1909167319536209 0.21605445444583893 0.0 0.0 1.0 0.5280721187591553 0.20308256149291992 0 1.0 0 0.0 0 0.0 0 0.0 -1.0771161317825317 -0.19061999022960663 0.21605445444583893 0.0 0.0 1.0 0.563776969909668 0.20772206783294678 0 1.0 0 0.0 0 0.0 0 0.0 -1.0718950033187866 -0.18964582681655884 0.21605445444583893 0.0 0.0 1.0 0.5679959058761597 0.20960724353790283 0 1.0 0 0.0 0 0.0 0 0.0 -1.1189286708831787 -0.1909167319536209 0.21605445444583893 0.0 0.0 1.0 0.5280721187591553 0.20308256149291992 0 1.0 0 0.0 0 0.0 0 0.0 -1.0823445320129395 -0.1913776695728302 0.21605445444583893 0.0 0.0 1.0 0.5594743490219116 0.20612728595733643 0 1.0 0 0.0 0 0.0 0 0.0 -1.0771161317825317 -0.19061999022960663 0.21605445444583893 0.0 0.0 1.0 0.563776969909668 0.20772206783294678 0 1.0 0 0.0 0 0.0 0 0.0 -1.108628749847412 -0.19199305772781372 0.21605443954467773 0.0 -3.0518509447574615e-05 1.0 0.5370272397994995 0.2025470733642578 0 1.0 0 0.0 0 0.0 0 0.0 -1.0823445320129395 -0.1913776695728302 0.21605445444583893 0.0 0.0 1.0 0.5594743490219116 0.20612728595733643 0 1.0 0 0.0 0 0.0 0 0.0 -1.1189286708831787 -0.1909167319536209 0.21605445444583893 0.0 0.0 1.0 0.5280721187591553 0.20308256149291992 0 1.0 0 0.0 0 0.0 0 0.0 -1.108628749847412 -0.19199305772781372 0.21605443954467773 0.0 -3.0518509447574615e-05 1.0 0.5370272397994995 0.2025470733642578 0 1.0 0 0.0 0 0.0 0 0.0 -1.0875802040100098 -0.19191887974739075 0.21605445444583893 0.0 3.0518509447574615e-05 0.999969482421875 0.5550970435142517 0.20482593774795532 0 1.0 0 0.0 0 0.0 0 0.0 -1.0823445320129395 -0.1913776695728302 0.21605445444583893 0.0 0.0 1.0 0.5594743490219116 0.20612728595733643 0 1.0 0 0.0 0 0.0 0 0.0 -1.108628749847412 -0.19199305772781372 0.21605443954467773 0.0 -3.0518509447574615e-05 1.0 0.5370272397994995 0.2025470733642578 0 1.0 0 0.0 0 0.0 0 0.0 -1.0928231477737427 -0.19224360585212708 0.21605445444583893 0.0 0.0 1.0 0.5506551265716553 0.203821063041687 0 1.0 0 0.0 0 0.0 0 0.0 -1.0875802040100098 -0.19191887974739075 0.21605445444583893 0.0 3.0518509447574615e-05 0.999969482421875 0.5550970435142517 0.20482593774795532 0 1.0 0 0.0 0 0.0 0 0.0 -1.0980734825134277 -0.19235184788703918 0.21605445444583893 0.0 0.00015259254723787308 1.0 0.546159029006958 0.2031153440475464 0 1.0 0 0.0 0 0.0 0 0.0 -1.0928231477737427 -0.19224360585212708 0.21605445444583893 0.0 0.0 1.0 0.5506551265716553 0.203821063041687 0 1.0 0 0.0 0 0.0 0 0.0 -1.108628749847412 -0.19199305772781372 0.21605443954467773 0.0 -3.0518509447574615e-05 1.0 0.5370272397994995 0.2025470733642578 0 1.0 0 0.0 0 0.0 0 0.0 -1.4969496726989746 0.1962597668170929 0.21605448424816132 0.0 0.0 0.999969482421875 0.5233350992202759 0.6290465593338013 0 1.0 0 0.0 0 0.0 0 0.0 -1.4743722677230835 0.19633153080940247 0.21605448424816132 0.0 -3.0518509447574615e-05 1.0 0.5351086258888245 0.6307108402252197 0 1.0 0 0.0 0 0.0 0 0.0 -1.4851137399673462 0.19643977284431458 0.21605448424816132 0.0 0.0 1.0 0.529496967792511 0.6301011443138123 0 1.0 0 0.0 0 0.0 0 0.0 -1.4969496726989746 0.1962597668170929 0.21605448424816132 0.0 0.0 0.999969482421875 0.5233350992202759 0.6290465593338013 0 1.0 0 0.0 0 0.0 0 0.0 -1.4640979766845703 0.19600680470466614 0.21605448424816132 0.0 0.0 1.0 0.5404836535453796 0.6309982538223267 0 1.0 0 0.0 0 0.0 0 0.0 -1.4743722677230835 0.19633153080940247 0.21605448424816132 0.0 -3.0518509447574615e-05 1.0 0.5351086258888245 0.6307108402252197 0 1.0 0 0.0 0 0.0 0 0.0 -1.5082894563674927 0.19571977853775024 0.21605448424816132 0.0 0.0 1.0 0.5174651741981506 0.6276100873947144 0 1.0 0 0.0 0 0.0 0 0.0 -1.4640979766845703 0.19600680470466614 0.21605448424816132 0.0 0.0 1.0 0.5404836535453796 0.6309982538223267 0 1.0 0 0.0 0 0.0 0 0.0 -1.4969496726989746 0.1962597668170929 0.21605448424816132 0.0 0.0 0.999969482421875 0.5233350992202759 0.6290465593338013 0 1.0 0 0.0 0 0.0 0 0.0 -1.5082894563674927 0.19571977853775024 0.21605448424816132 0.0 0.0 1.0 0.5174651741981506 0.6276100873947144 0 1.0 0 0.0 0 0.0 0 0.0 -1.4542906284332275 0.1954655945301056 0.21605448424816132 0.0 0.0 1.0 0.5456142425537109 0.6309813857078552 0 1.0 0 0.0 0 0.0 0 0.0 -1.4640979766845703 0.19600680470466614 0.21605448424816132 0.0 0.0 1.0 0.5404836535453796 0.6309982538223267 0 1.0 0 0.0 0 0.0 0 0.0 -1.5191329717636108 0.19481980800628662 0.21605448424816132 0.0 0.0 1.0 0.5118923187255859 0.6258165240287781 0 1.0 0 0.0 0 0.0 0 0.0 -1.4542906284332275 0.1954655945301056 0.21605448424816132 0.0 0.0 1.0 0.5456142425537109 0.6309813857078552 0 1.0 0 0.0 0 0.0 0 0.0 -1.5082894563674927 0.19571977853775024 0.21605448424816132 0.0 0.0 1.0 0.5174651741981506 0.6276100873947144 0 1.0 0 0.0 0 0.0 0 0.0 -1.5191329717636108 0.19481980800628662 0.21605448424816132 0.0 0.0 1.0 0.5118923187255859 0.6258165240287781 0 1.0 0 0.0 0 0.0 0 0.0 -1.4449502229690552 0.19470790028572083 0.21605448424816132 0.0 0.0 1.0 0.550495445728302 0.6306784749031067 0 1.0 0 0.0 0 0.0 0 0.0 -1.4542906284332275 0.1954655945301056 0.21605448424816132 0.0 0.0 1.0 0.5456142425537109 0.6309813857078552 0 1.0 0 0.0 0 0.0 0 0.0 -1.5294803380966187 0.19355982542037964 0.21605448424816132 0.0 0.0 0.999969482421875 0.5066177845001221 0.6236889958381653 0 1.0 0 0.0 0 0.0 0 0.0 -1.4449502229690552 0.19470790028572083 0.21605448424816132 0.0 0.0 1.0 0.550495445728302 0.6306784749031067 0 1.0 0 0.0 0 0.0 0 0.0 -1.5191329717636108 0.19481980800628662 0.21605448424816132 0.0 0.0 1.0 0.5118923187255859 0.6258165240287781 0 1.0 0 0.0 0 0.0 0 0.0 -1.5294803380966187 0.19355982542037964 0.21605448424816132 0.0 0.0 0.999969482421875 0.5066177845001221 0.6236889958381653 0 1.0 0 0.0 0 0.0 0 0.0 -1.4360769987106323 0.19373372197151184 0.21605448424816132 0.0 0.0 1.0 0.5551243424415588 0.6301071643829346 0 1.0 0 0.0 0 0.0 0 0.0 -1.4449502229690552 0.19470790028572083 0.21605448424816132 0.0 0.0 1.0 0.550495445728302 0.6306784749031067 0 1.0 0 0.0 0 0.0 0 0.0 -1.5294803380966187 0.19355982542037964 0.21605448424816132 0.0 0.0 0.999969482421875 0.5066177845001221 0.6236889958381653 0 1.0 0 0.0 0 0.0 0 0.0 -1.4276705980300903 0.19254305958747864 0.21605448424816132 0.0 0.0 0.999969482421875 0.5595005750656128 0.6292844414710999 0 1.0 0 0.0 0 0.0 0 0.0 -1.4360769987106323 0.19373372197151184 0.21605448424816132 0.0 0.0 1.0 0.5551243424415588 0.6301071643829346 0 1.0 0 0.0 0 0.0 0 0.0 -1.5393314361572266 0.19193986058235168 0.21605448424816132 0.0 0.0 1.0 0.5016401410102844 0.6212486028671265 0 1.0 0 0.0 0 0.0 0 0.0 -1.4276705980300903 0.19254305958747864 0.21605448424816132 0.0 0.0 0.999969482421875 0.5595005750656128 0.6292844414710999 0 1.0 0 0.0 0 0.0 0 0.0 -1.5294803380966187 0.19355982542037964 0.21605448424816132 0.0 0.0 0.999969482421875 0.5066177845001221 0.6236889958381653 0 1.0 0 0.0 0 0.0 0 0.0 -1.5393314361572266 0.19193986058235168 0.21605448424816132 0.0 0.0 1.0 0.5016401410102844 0.6212486028671265 0 1.0 0 0.0 0 0.0 0 0.0 -1.4197313785552979 0.19113591313362122 0.21605448424816132 0.0 0.0 1.0 0.563625156879425 0.6282258033752441 0 1.0 0 0.0 0 0.0 0 0.0 -1.4276705980300903 0.19254305958747864 0.21605448424816132 0.0 0.0 0.999969482421875 0.5595005750656128 0.6292844414710999 0 1.0 0 0.0 0 0.0 0 0.0 -1.5486863851547241 0.18995991349220276 0.21605448424816132 0.0 0.0 1.0 0.4969555139541626 0.6185140609741211 0 1.0 0 0.0 0 0.0 0 0.0 -1.4197313785552979 0.19113591313362122 0.21605448424816132 0.0 0.0 1.0 0.563625156879425 0.6282258033752441 0 1.0 0 0.0 0 0.0 0 0.0 -1.5393314361572266 0.19193986058235168 0.21605448424816132 0.0 0.0 1.0 0.5016401410102844 0.6212486028671265 0 1.0 0 0.0 0 0.0 0 0.0 -1.5486863851547241 0.18995991349220276 0.21605448424816132 0.0 0.0 1.0 0.4969555139541626 0.6185140609741211 0 1.0 0 0.0 0 0.0 0 0.0 -1.4122591018676758 0.18951231241226196 0.21605448424816132 0.0 0.0 1.0 0.5675007104873657 0.6269457340240479 0 1.0 0 0.0 0 0.0 0 0.0 -1.4197313785552979 0.19113591313362122 0.21605448424816132 0.0 0.0 1.0 0.563625156879425 0.6282258033752441 0 1.0 0 0.0 0 0.0 0 0.0 -1.5575450658798218 0.18761995434761047 0.21605448424816132 0.0 0.0 0.999969482421875 0.4925583004951477 0.6155014038085938 0 1.0 0 0.0 0 0.0 0 0.0 -1.4122591018676758 0.18951231241226196 0.21605448424816132 0.0 0.0 1.0 0.5675007104873657 0.6269457340240479 0 1.0 0 0.0 0 0.0 0 0.0 -1.5486863851547241 0.18995991349220276 0.21605448424816132 0.0 0.0 1.0 0.4969555139541626 0.6185140609741211 0 1.0 0 0.0 0 0.0 0 0.0 -1.5575450658798218 0.18761995434761047 0.21605448424816132 0.0 0.0 0.999969482421875 0.4925583004951477 0.6155014038085938 0 1.0 0 0.0 0 0.0 0 0.0 -1.4052537679672241 0.1876722276210785 0.21605448424816132 0.0 0.0 1.0 0.5711308121681213 0.6254566311836243 0 1.0 0 0.0 0 0.0 0 0.0 -1.4122591018676758 0.18951231241226196 0.21605448424816132 0.0 0.0 1.0 0.5675007104873657 0.6269457340240479 0 1.0 0 0.0 0 0.0 0 0.0 -1.5575450658798218 0.18761995434761047 0.21605448424816132 0.0 0.0 0.999969482421875 0.4925583004951477 0.6155014038085938 0 1.0 0 0.0 0 0.0 0 0.0 -1.398715615272522 0.1856156587600708 0.21605448424816132 0.0 0.0 1.0 0.5745198130607605 0.6237694025039673 0 1.0 0 0.0 0 0.0 0 0.0 -1.4052537679672241 0.1876722276210785 0.21605448424816132 0.0 0.0 1.0 0.5711308121681213 0.6254566311836243 0 1.0 0 0.0 0 0.0 0 0.0 -1.565907597541809 0.18492001295089722 0.21605448424816132 0.0 0.0 0.999969482421875 0.48844146728515625 0.6122236251831055 0 1.0 0 0.0 0 0.0 0 0.0 -1.398715615272522 0.1856156587600708 0.21605448424816132 0.0 0.0 1.0 0.5745198130607605 0.6237694025039673 0 1.0 0 0.0 0 0.0 0 0.0 -1.5575450658798218 0.18761995434761047 0.21605448424816132 0.0 0.0 0.999969482421875 0.4925583004951477 0.6155014038085938 0 1.0 0 0.0 0 0.0 0 0.0 -1.565907597541809 0.18492001295089722 0.21605448424816132 0.0 0.0 0.999969482421875 0.48844146728515625 0.6122236251831055 0 1.0 0 0.0 0 0.0 0 0.0 -1.3926442861557007 0.1833426058292389 0.21605448424816132 0.0 0.0 0.999969482421875 0.5776726603507996 0.6218934059143066 0 1.0 0 0.0 0 0.0 0 0.0 -1.398715615272522 0.1856156587600708 0.21605448424816132 0.0 0.0 1.0 0.5745198130607605 0.6237694025039673 0 1.0 0 0.0 0 0.0 0 0.0 -1.573773980140686 0.181860089302063 0.21605448424816132 0.0 0.0 0.999969482421875 0.4845971167087555 0.6086910367012024 0 1.0 0 0.0 0 0.0 0 0.0 -1.3926442861557007 0.1833426058292389 0.21605448424816132 0.0 0.0 0.999969482421875 0.5776726603507996 0.6218934059143066 0 1.0 0 0.0 0 0.0 0 0.0 -1.565907597541809 0.18492001295089722 0.21605448424816132 0.0 0.0 0.999969482421875 0.48844146728515625 0.6122236251831055 0 1.0 0 0.0 0 0.0 0 0.0 -1.573773980140686 0.181860089302063 0.21605448424816132 0.0 0.0 0.999969482421875 0.4845971167087555 0.6086910367012024 0 1.0 0 0.0 0 0.0 0 0.0 -1.387040138244629 0.18085306882858276 0.21605448424816132 0.0 0.0 1.0 0.580594539642334 0.6198358535766602 0 1.0 0 0.0 0 0.0 0 0.0 -1.3926442861557007 0.1833426058292389 0.21605448424816132 0.0 0.0 0.999969482421875 0.5776726603507996 0.6218934059143066 0 1.0 0 0.0 0 0.0 0 0.0 -1.581144094467163 0.1784401535987854 0.21605448424816132 0.0 0.0 1.0 0.48101699352264404 0.6049108505249023 0 1.0 0 0.0 0 0.0 0 0.0 -1.387040138244629 0.18085306882858276 0.21605448424816132 0.0 0.0 1.0 0.580594539642334 0.6198358535766602 0 1.0 0 0.0 0 0.0 0 0.0 -1.573773980140686 0.181860089302063 0.21605448424816132 0.0 0.0 0.999969482421875 0.4845971167087555 0.6086910367012024 0 1.0 0 0.0 0 0.0 0 0.0 -1.581144094467163 0.1784401535987854 0.21605448424816132 0.0 0.0 1.0 0.48101699352264404 0.6049108505249023 0 1.0 0 0.0 0 0.0 0 0.0 -1.381801962852478 0.17819690704345703 0.21605448424816132 0.0 0.0 0.999969482421875 0.5833354592323303 0.6176351308822632 0 1.0 0 0.0 0 0.0 0 0.0 -1.387040138244629 0.18085306882858276 0.21605448424816132 0.0 0.0 1.0 0.580594539642334 0.6198358535766602 0 1.0 0 0.0 0 0.0 0 0.0 -1.5880180597305298 0.17466023564338684 0.21605448424816132 0.0 0.0 1.0 0.4776924252510071 0.6008874773979187 0 1.0 0 0.0 0 0.0 0 0.0 -1.381801962852478 0.17819690704345703 0.21605448424816132 0.0 0.0 0.999969482421875 0.5833354592323303 0.6176351308822632 0 1.0 0 0.0 0 0.0 0 0.0 -1.581144094467163 0.1784401535987854 0.21605448424816132 0.0 0.0 1.0 0.48101699352264404 0.6049108505249023 0 1.0 0 0.0 0 0.0 0 0.0 -1.5880180597305298 0.17466023564338684 0.21605448424816132 0.0 0.0 1.0 0.4776924252510071 0.6008874773979187 0 1.0 0 0.0 0 0.0 0 0.0 -1.3768290281295776 0.1754239797592163 0.21605448424816132 0.0 0.0 1.0 0.5859435200691223 0.6153281331062317 0 1.0 0 0.0 0 0.0 0 0.0 -1.381801962852478 0.17819690704345703 0.21605448424816132 0.0 0.0 0.999969482421875 0.5833354592323303 0.6176351308822632 0 1.0 0 0.0 0 0.0 0 0.0 -1.5880180597305298 0.17466023564338684 0.21605448424816132 0.0 0.0 1.0 0.4776924252510071 0.6008874773979187 0 1.0 0 0.0 0 0.0 0 0.0 -1.3721212148666382 0.17253431677818298 0.21605448424816132 0.0 0.0 1.0 0.5884212851524353 0.612917423248291 0 1.0 0 0.0 0 0.0 0 0.0 -1.3768290281295776 0.1754239797592163 0.21605448424816132 0.0 0.0 1.0 0.5859435200691223 0.6153281331062317 0 1.0 0 0.0 0 0.0 0 0.0 -1.5943957567214966 0.1705203354358673 0.21605448424816132 0.0 0.0 1.0 0.4746149778366089 0.5966225862503052 0 1.0 0 0.0 0 0.0 0 0.0 -1.3721212148666382 0.17253431677818298 0.21605448424816132 0.0 0.0 1.0 0.5884212851524353 0.612917423248291 0 1.0 0 0.0 0 0.0 0 0.0 -1.5880180597305298 0.17466023564338684 0.21605448424816132 0.0 0.0 1.0 0.4776924252510071 0.6008874773979187 0 1.0 0 0.0 0 0.0 0 0.0 -1.5943957567214966 0.1705203354358673 0.21605448424816132 0.0 0.0 1.0 0.4746149778366089 0.5966225862503052 0 1.0 0 0.0 0 0.0 0 0.0 -1.3676784038543701 0.16952788829803467 0.21605446934700012 0.0 0.0 0.999969482421875 0.5907711982727051 0.6104052066802979 0 1.0 0 0.0 0 0.0 0 0.0 -1.3721212148666382 0.17253431677818298 0.21605448424816132 0.0 0.0 1.0 0.5884212851524353 0.612917423248291 0 1.0 0 0.0 0 0.0 0 0.0 -1.600374460220337 0.16600584983825684 0.21605446934700012 0.0 0.0 1.0 0.47173115611076355 0.5920871496200562 0 1.0 0 0.0 0 0.0 0 0.0 -1.3676784038543701 0.16952788829803467 0.21605446934700012 0.0 0.0 0.999969482421875 0.5907711982727051 0.6104052066802979 0 1.0 0 0.0 0 0.0 0 0.0 -1.5943957567214966 0.1705203354358673 0.21605448424816132 0.0 0.0 1.0 0.4746149778366089 0.5966225862503052 0 1.0 0 0.0 0 0.0 0 0.0 -1.600374460220337 0.16600584983825684 0.21605446934700012 0.0 0.0 1.0 0.47173115611076355 0.5920871496200562 0 1.0 0 0.0 0 0.0 0 0.0 -1.363500714302063 0.16640472412109375 0.21605446934700012 0.0 0.0 0.999969482421875 0.5929959416389465 0.6077929735183716 0 1.0 0 0.0 0 0.0 0 0.0 -1.3676784038543701 0.16952788829803467 0.21605446934700012 0.0 0.0 0.999969482421875 0.5907711982727051 0.6104052066802979 0 1.0 0 0.0 0 0.0 0 0.0 -1.600374460220337 0.16600584983825684 0.21605446934700012 0.0 0.0 1.0 0.47173115611076355 0.5920871496200562 0 1.0 0 0.0 0 0.0 0 0.0 -1.3595882654190063 0.16316479444503784 0.21605446934700012 0.0 0.0 1.0 0.5950978398323059 0.6050815582275391 0 1.0 0 0.0 0 0.0 0 0.0 -1.363500714302063 0.16640472412109375 0.21605446934700012 0.0 0.0 0.999969482421875 0.5929959416389465 0.6077929735183716 0 1.0 0 0.0 0 0.0 0 0.0 -1.6060515642166138 0.16110217571258545 0.21605446934700012 0.0 0.0 1.0 0.46898940205574036 0.5872495174407959 0 1.0 0 0.0 0 0.0 0 0.0 -1.3595882654190063 0.16316479444503784 0.21605446934700012 0.0 0.0 1.0 0.5950978398323059 0.6050815582275391 0 1.0 0 0.0 0 0.0 0 0.0 -1.600374460220337 0.16600584983825684 0.21605446934700012 0.0 0.0 1.0 0.47173115611076355 0.5920871496200562 0 1.0 0 0.0 0 0.0 0 0.0 -1.6060515642166138 0.16110217571258545 0.21605446934700012 0.0 0.0 1.0 0.46898940205574036 0.5872495174407959 0 1.0 0 0.0 0 0.0 0 0.0 -1.3559409379959106 0.15980809926986694 0.21605446934700012 0.0 0.0 1.0 0.5970795750617981 0.602271318435669 0 1.0 0 0.0 0 0.0 0 0.0 -1.3595882654190063 0.16316479444503784 0.21605446934700012 0.0 0.0 1.0 0.5950978398323059 0.6050815582275391 0 1.0 0 0.0 0 0.0 0 0.0 -1.6114271879196167 0.15580931305885315 0.21605446934700012 0.0 0.0 0.999969482421875 0.46638426184654236 0.5821032524108887 0 1.0 0 0.0 0 0.0 0 0.0 -1.3559409379959106 0.15980809926986694 0.21605446934700012 0.0 0.0 1.0 0.5970795750617981 0.602271318435669 0 1.0 0 0.0 0 0.0 0 0.0 -1.6060515642166138 0.16110217571258545 0.21605446934700012 0.0 0.0 1.0 0.46898940205574036 0.5872495174407959 0 1.0 0 0.0 0 0.0 0 0.0 -1.6114271879196167 0.15580931305885315 0.21605446934700012 0.0 0.0 0.999969482421875 0.46638426184654236 0.5821032524108887 0 1.0 0 0.0 0 0.0 0 0.0 -1.3525587320327759 0.15633466839790344 0.21605446934700012 0.0 0.0 1.0 0.5989435911178589 0.5993620157241821 0 1.0 0 0.0 0 0.0 0 0.0 -1.3559409379959106 0.15980809926986694 0.21605446934700012 0.0 0.0 1.0 0.5970795750617981 0.602271318435669 0 1.0 0 0.0 0 0.0 0 0.0 -1.6114271879196167 0.15580931305885315 0.21605446934700012 0.0 0.0 0.999969482421875 0.46638426184654236 0.5821032524108887 0 1.0 0 0.0 0 0.0 0 0.0 -1.349441647529602 0.15274447202682495 0.21605446934700012 0.0 0.0 1.0 0.600692093372345 0.5963525772094727 0 1.0 0 0.0 0 0.0 0 0.0 -1.3525587320327759 0.15633466839790344 0.21605446934700012 0.0 0.0 1.0 0.5989435911178589 0.5993620157241821 0 1.0 0 0.0 0 0.0 0 0.0 -1.6165012121200562 0.15012726187705994 0.21605446934700012 0.0 0.0 1.0 0.46391069889068604 0.5766407251358032 0 1.0 0 0.0 0 0.0 0 0.0 -1.349441647529602 0.15274447202682495 0.21605446934700012 0.0 0.0 1.0 0.600692093372345 0.5963525772094727 0 1.0 0 0.0 0 0.0 0 0.0 -1.6114271879196167 0.15580931305885315 0.21605446934700012 0.0 0.0 0.999969482421875 0.46638426184654236 0.5821032524108887 0 1.0 0 0.0 0 0.0 0 0.0 -1.6165012121200562 0.15012726187705994 0.21605446934700012 0.0 0.0 1.0 0.46391069889068604 0.5766407251358032 0 1.0 0 0.0 0 0.0 0 0.0 -1.3465896844863892 0.14903751015663147 0.21605446934700012 0.0 0.0 1.0 0.6023273468017578 0.5932416915893555 0 1.0 0 0.0 0 0.0 0 0.0 -1.349441647529602 0.15274447202682495 0.21605446934700012 0.0 0.0 1.0 0.600692093372345 0.5963525772094727 0 1.0 0 0.0 0 0.0 0 0.0 -1.621273398399353 0.1440560519695282 0.21605446934700012 0.0 0.0 1.0 0.4615637958049774 0.5708528161048889 0 1.0 0 0.0 0 0.0 0 0.0 -1.3465896844863892 0.14903751015663147 0.21605446934700012 0.0 0.0 1.0 0.6023273468017578 0.5932416915893555 0 1.0 0 0.0 0 0.0 0 0.0 -1.6165012121200562 0.15012726187705994 0.21605446934700012 0.0 0.0 1.0 0.46391069889068604 0.5766407251358032 0 1.0 0 0.0 0 0.0 0 0.0 -1.621273398399353 0.1440560519695282 0.21605446934700012 0.0 0.0 1.0 0.4615637958049774 0.5708528161048889 0 1.0 0 0.0 0 0.0 0 0.0 -1.3440028429031372 0.14521381258964539 0.21605446934700012 0.0 0.0 1.0 0.6038513779640198 0.5900272727012634 0 1.0 0 0.0 0 0.0 0 0.0 -1.3465896844863892 0.14903751015663147 0.21605446934700012 0.0 0.0 1.0 0.6023273468017578 0.5932416915893555 0 1.0 0 0.0 0 0.0 0 0.0 -1.621273398399353 0.1440560519695282 0.21605446934700012 0.0 0.0 1.0 0.4615637958049774 0.5708528161048889 0 1.0 0 0.0 0 0.0 0 0.0 -1.3416811227798462 0.1412733793258667 0.21605446934700012 0.0 0.0 1.0 0.6052660942077637 0.586706817150116 0 1.0 0 0.0 0 0.0 0 0.0 -1.3440028429031372 0.14521381258964539 0.21605446934700012 0.0 0.0 1.0 0.6038513779640198 0.5900272727012634 0 1.0 0 0.0 0 0.0 0 0.0 -1.6257442235946655 0.13759565353393555 0.21605446934700012 0.0 0.0 1.0 0.4593387544155121 0.5647287964820862 0 1.0 0 0.0 0 0.0 0 0.0 -1.3416811227798462 0.1412733793258667 0.21605446934700012 0.0 0.0 1.0 0.6052660942077637 0.586706817150116 0 1.0 0 0.0 0 0.0 0 0.0 -1.621273398399353 0.1440560519695282 0.21605446934700012 0.0 0.0 1.0 0.4615637958049774 0.5708528161048889 0 1.0 0 0.0 0 0.0 0 0.0 -1.6257442235946655 0.13759565353393555 0.21605446934700012 0.0 0.0 1.0 0.4593387544155121 0.5647287964820862 0 1.0 0 0.0 0 0.0 0 0.0 -1.3395832777023315 0.13699603080749512 0.21605446934700012 0.0 0.0 1.0 0.6066126227378845 0.5830934643745422 0 1.0 0 0.0 0 0.0 0 0.0 -1.3416811227798462 0.1412733793258667 0.21605446934700012 0.0 0.0 1.0 0.6052660942077637 0.586706817150116 0 1.0 0 0.0 0 0.0 0 0.0 -1.6299132108688354 0.13074606657028198 0.21605446934700012 0.0 0.0 1.0 0.457231342792511 0.5582568645477295 0 1.0 0 0.0 0 0.0 0 0.0 -1.3395832777023315 0.13699603080749512 0.21605446934700012 0.0 0.0 1.0 0.6066126227378845 0.5830934643745422 0 1.0 0 0.0 0 0.0 0 0.0 -1.6257442235946655 0.13759565353393555 0.21605446934700012 0.0 0.0 1.0 0.4593387544155121 0.5647287964820862 0 1.0 0 0.0 0 0.0 0 0.0 -1.6299132108688354 0.13074606657028198 0.21605446934700012 0.0 0.0 1.0 0.457231342792511 0.5582568645477295 0 1.0 0 0.0 0 0.0 0 0.0 -1.33766770362854 0.1321616768836975 0.21605446934700012 0.0 0.0 1.0 0.6079329252243042 0.5789923667907715 0 1.0 0 0.0 0 0.0 0 0.0 -1.3395832777023315 0.13699603080749512 0.21605446934700012 0.0 0.0 1.0 0.6066126227378845 0.5830934643745422 0 1.0 0 0.0 0 0.0 0 0.0 -1.6299132108688354 0.13074606657028198 0.21605446934700012 0.0 0.0 1.0 0.457231342792511 0.5582568645477295 0 1.0 0 0.0 0 0.0 0 0.0 -1.3359346389770508 0.12677031755447388 0.21605446934700012 0.0 0.0 1.0 0.6092292666435242 0.574386715888977 0 1.0 0 0.0 0 0.0 0 0.0 -1.33766770362854 0.1321616768836975 0.21605446934700012 0.0 0.0 1.0 0.6079329252243042 0.5789923667907715 0 1.0 0 0.0 0 0.0 0 0.0 -1.633780837059021 0.1235072910785675 0.21605446934700012 0.0 0.0 1.0 0.4552372395992279 0.5514237880706787 0 1.0 0 0.0 0 0.0 0 0.0 -1.3359346389770508 0.12677031755447388 0.21605446934700012 0.0 0.0 1.0 0.6092292666435242 0.574386715888977 0 1.0 0 0.0 0 0.0 0 0.0 -1.6299132108688354 0.13074606657028198 0.21605446934700012 0.0 0.0 1.0 0.457231342792511 0.5582568645477295 0 1.0 0 0.0 0 0.0 0 0.0 -1.633780837059021 0.1235072910785675 0.21605446934700012 0.0 0.0 1.0 0.4552372395992279 0.5514237880706787 0 1.0 0 0.0 0 0.0 0 0.0 -1.3343840837478638 0.12082192301750183 0.21605446934700012 0.0 0.0 1.0 0.6105040311813354 0.569257378578186 0 1.0 0 0.0 0 0.0 0 0.0 -1.3359346389770508 0.12677031755447388 0.21605446934700012 0.0 0.0 1.0 0.6092292666435242 0.574386715888977 0 1.0 0 0.0 0 0.0 0 0.0 -1.637346625328064 0.1158793568611145 0.21605446934700012 0.0 0.0 0.999969482421875 0.4533528983592987 0.5442155599594116 0 1.0 0 0.0 0 0.0 0 0.0 -1.4964169263839722 0.1210615336894989 0.21605446934700012 0.0 0.0 1.0 0.5255527496337891 0.5660300254821777 0 1.0 0 0.0 0 0.0 0 0.0 -1.633780837059021 0.1235072910785675 0.21605446934700012 0.0 0.0 1.0 0.4552372395992279 0.5514237880706787 0 1.0 0 0.0 0 0.0 0 0.0 -1.4964169263839722 0.1210615336894989 0.21605446934700012 0.0 0.0 1.0 0.5255527496337891 0.5660300254821777 0 1.0 0 0.0 0 0.0 0 0.0 -1.4921189546585083 0.12113326787948608 0.21605446934700012 0.0 0.0 0.999969482421875 0.527971625328064 0.5664610266685486 0 1.0 0 0.0 0 0.0 0 0.0 -1.633780837059021 0.1235072910785675 0.21605446934700012 0.0 0.0 1.0 0.4552372395992279 0.5514237880706787 0 1.0 0 0.0 0 0.0 0 0.0 -1.4921189546585083 0.12113326787948608 0.21605446934700012 0.0 0.0 0.999969482421875 0.527971625328064 0.5664610266685486 0 1.0 0 0.0 0 0.0 0 0.0 -1.3343840837478638 0.12082192301750183 0.21605446934700012 0.0 0.0 1.0 0.6105040311813354 0.569257378578186 0 1.0 0 0.0 0 0.0 0 0.0 -1.633780837059021 0.1235072910785675 0.21605446934700012 0.0 0.0 1.0 0.4552372395992279 0.5514237880706787 0 1.0 0 0.0 0 0.0 0 0.0 -1.4858118295669556 0.12104934453964233 0.21605446934700012 0.0 0.0 1.0 0.5315316915512085 0.566885232925415 0 1.0 0 0.0 0 0.0 0 0.0 -1.3343840837478638 0.12082192301750183 0.21605446934700012 0.0 0.0 1.0 0.6105040311813354 0.569257378578186 0 1.0 0 0.0 0 0.0 0 0.0 -1.4921189546585083 0.12113326787948608 0.21605446934700012 0.0 0.0 0.999969482421875 0.527971625328064 0.5664610266685486 0 1.0 0 0.0 0 0.0 0 0.0 -1.637346625328064 0.1158793568611145 0.21605446934700012 0.0 0.0 0.999969482421875 0.4533528983592987 0.5442155599594116 0 1.0 0 0.0 0 0.0 0 0.0 -1.5005544424057007 0.12084627151489258 0.21605446934700012 0.0 0.00015259254723787308 0.999969482421875 0.5232311487197876 0.565461277961731 0 1.0 0 0.0 0 0.0 0 0.0 -1.4964169263839722 0.1210615336894989 0.21605446934700012 0.0 0.0 1.0 0.5255527496337891 0.5660300254821777 0 1.0 0 0.0 0 0.0 0 0.0 -1.479849934577942 0.12079760432243347 0.21605446934700012 0.0 -0.0001831110566854477 0.999969482421875 0.534906268119812 0.5670909881591797 0 1.0 0 0.0 0 0.0 0 0.0 -1.3343840837478638 0.12082192301750183 0.21605446934700012 0.0 0.0 1.0 0.6105040311813354 0.569257378578186 0 1.0 0 0.0 0 0.0 0 0.0 -1.4858118295669556 0.12104934453964233 0.21605446934700012 0.0 0.0 1.0 0.5315316915512085 0.566885232925415 0 1.0 0 0.0 0 0.0 0 0.0 -1.637346625328064 0.1158793568611145 0.21605446934700012 0.0 0.0 0.999969482421875 0.4533528983592987 0.5442155599594116 0 1.0 0 0.0 0 0.0 0 0.0 -1.5045313835144043 0.1204875111579895 0.21605446934700012 0.0 -3.0518509447574615e-05 1.0 0.5210064053535461 0.5647562146186829 0 1.0 0 0.0 0 0.0 0 0.0 -1.5005544424057007 0.12084627151489258 0.21605446934700012 0.0 0.00015259254723787308 0.999969482421875 0.5232311487197876 0.565461277961731 0 1.0 0 0.0 0 0.0 0 0.0 -1.479849934577942 0.12079760432243347 0.21605446934700012 0.0 -0.0001831110566854477 0.999969482421875 0.534906268119812 0.5670909881591797 0 1.0 0 0.0 0 0.0 0 0.0 -1.3330157995224 0.11431652307510376 0.21605446934700012 0.0 0.0 1.0 0.6117595434188843 0.5635828971862793 0 1.0 0 0.0 0 0.0 0 0.0 -1.3343840837478638 0.12082192301750183 0.21605446934700012 0.0 0.0 1.0 0.6105040311813354 0.569257378578186 0 1.0 0 0.0 0 0.0 0 0.0 -1.474233627319336 0.12037801742553711 0.21605446934700012 0.0 0.0 1.0 0.5380936861038208 0.5670830011367798 0 1.0 0 0.0 0 0.0 0 0.0 -1.3330157995224 0.11431652307510376 0.21605446934700012 0.0 0.0 1.0 0.6117595434188843 0.5635828971862793 0 1.0 0 0.0 0 0.0 0 0.0 -1.479849934577942 0.12079760432243347 0.21605446934700012 0.0 -0.0001831110566854477 0.999969482421875 0.534906268119812 0.5670909881591797 0 1.0 0 0.0 0 0.0 0 0.0 -1.637346625328064 0.1158793568611145 0.21605446934700012 0.0 0.0 0.999969482421875 0.4533528983592987 0.5442155599594116 0 1.0 0 0.0 0 0.0 0 0.0 -1.5083478689193726 0.11998522281646729 0.21605446934700012 0.0 0.0 0.999969482421875 0.5188777446746826 0.5639165043830872 0 1.0 0 0.0 0 0.0 0 0.0 -1.5045313835144043 0.1204875111579895 0.21605446934700012 0.0 -3.0518509447574615e-05 1.0 0.5210064053535461 0.5647562146186829 0 1.0 0 0.0 0 0.0 0 0.0 -1.4689626693725586 0.11979058384895325 0.21605446934700012 0.0 0.0 1.0 0.5410932898521423 0.5668658018112183 0 1.0 0 0.0 0 0.0 0 0.0 -1.3330157995224 0.11431652307510376 0.21605446934700012 0.0 0.0 1.0 0.6117595434188843 0.5635828971862793 0 1.0 0 0.0 0 0.0 0 0.0 -1.474233627319336 0.12037801742553711 0.21605446934700012 0.0 0.0 1.0 0.5380936861038208 0.5670830011367798 0 1.0 0 0.0 0 0.0 0 0.0 -1.637346625328064 0.1158793568611145 0.21605446934700012 0.0 0.0 0.999969482421875 0.4533528983592987 0.5442155599594116 0 1.0 0 0.0 0 0.0 0 0.0 -1.5120036602020264 0.11933943629264832 0.21605446934700012 0.0 0.0 0.999969482421875 0.516844630241394 0.5629432797431946 0 1.0 0 0.0 0 0.0 0 0.0 -1.5083478689193726 0.11998522281646729 0.21605446934700012 0.0 0.0 0.999969482421875 0.5188777446746826 0.5639165043830872 0 1.0 0 0.0 0 0.0 0 0.0 -1.4640370607376099 0.11903533339500427 0.21605446934700012 0.0 0.0 1.0 0.5439050197601318 0.5664436221122742 0 1.0 0 0.0 0 0.0 0 0.0 -1.3330157995224 0.11431652307510376 0.21605446934700012 0.0 0.0 1.0 0.6117595434188843 0.5635828971862793 0 1.0 0 0.0 0 0.0 0 0.0 -1.4689626693725586 0.11979058384895325 0.21605446934700012 0.0 0.0 1.0 0.5410932898521423 0.5668658018112183 0 1.0 0 0.0 0 0.0 0 0.0 -1.637346625328064 0.1158793568611145 0.21605446934700012 0.0 0.0 0.999969482421875 0.4533528983592987 0.5442155599594116 0 1.0 0 0.0 0 0.0 0 0.0 -1.5154989957809448 0.1185501217842102 0.21605446934700012 0.0 0.0 1.0 0.514906108379364 0.5618376135826111 0 1.0 0 0.0 0 0.0 0 0.0 -1.5120036602020264 0.11933943629264832 0.21605446934700012 0.0 0.0 0.999969482421875 0.516844630241394 0.5629432797431946 0 1.0 0 0.0 0 0.0 0 0.0 -1.4594570398330688 0.1181122362613678 0.21605446934700012 0.0 0.0 1.0 0.5465291142463684 0.5658203363418579 0 1.0 0 0.0 0 0.0 0 0.0 -1.3330157995224 0.11431652307510376 0.21605446934700012 0.0 0.0 1.0 0.6117595434188843 0.5635828971862793 0 1.0 0 0.0 0 0.0 0 0.0 -1.4640370607376099 0.11903533339500427 0.21605446934700012 0.0 0.0 1.0 0.5439050197601318 0.5664436221122742 0 1.0 0 0.0 0 0.0 0 0.0 -1.637346625328064 0.1158793568611145 0.21605446934700012 0.0 0.0 0.999969482421875 0.4533528983592987 0.5442155599594116 0 1.0 0 0.0 0 0.0 0 0.0 -1.5188337564468384 0.11761730909347534 0.21605446934700012 0.0 0.0 1.0 0.5130614042282104 0.5606002807617188 0 1.0 0 0.0 0 0.0 0 0.0 -1.5154989957809448 0.1185501217842102 0.21605446934700012 0.0 0.0 1.0 0.514906108379364 0.5618376135826111 0 1.0 0 0.0 0 0.0 0 0.0 -1.455222249031067 0.11702132225036621 0.21605446934700012 0.0 0.0 0.999969482421875 0.5489665269851685 0.5649992227554321 0 1.0 0 0.0 0 0.0 0 0.0 -1.3330157995224 0.11431652307510376 0.21605446934700012 0.0 0.0 1.0 0.6117595434188843 0.5635828971862793 0 1.0 0 0.0 0 0.0 0 0.0 -1.4594570398330688 0.1181122362613678 0.21605446934700012 0.0 0.0 1.0 0.5465291142463684 0.5658203363418579 0 1.0 0 0.0 0 0.0 0 0.0 -1.637346625328064 0.1158793568611145 0.21605446934700012 0.0 0.0 0.999969482421875 0.4533528983592987 0.5442155599594116 0 1.0 0 0.0 0 0.0 0 0.0 -1.5220080614089966 0.11654096841812134 0.21605446934700012 0.0 0.0 1.0 0.5113095641136169 0.5592316389083862 0 1.0 0 0.0 0 0.0 0 0.0 -1.5188337564468384 0.11761730909347534 0.21605446934700012 0.0 0.0 1.0 0.5130614042282104 0.5606002807617188 0 1.0 0 0.0 0 0.0 0 0.0 -1.4513328075408936 0.11576256155967712 0.21605446934700012 0.0 0.0 1.0 0.5512181520462036 0.5639832019805908 0 1.0 0 0.0 0 0.0 0 0.0 -1.3330157995224 0.11431652307510376 0.21605446934700012 0.0 0.0 1.0 0.6117595434188843 0.5635828971862793 0 1.0 0 0.0 0 0.0 0 0.0 -1.455222249031067 0.11702132225036621 0.21605446934700012 0.0 0.0 0.999969482421875 0.5489665269851685 0.5649992227554321 0 1.0 0 0.0 0 0.0 0 0.0 -1.637346625328064 0.1158793568611145 0.21605446934700012 0.0 0.0 0.999969482421875 0.4533528983592987 0.5442155599594116 0 1.0 0 0.0 0 0.0 0 0.0 -1.5250217914581299 0.11532112956047058 0.21605446934700012 0.0 0.0 1.0 0.5096496939659119 0.5577319860458374 0 1.0 0 0.0 0 0.0 0 0.0 -1.5220080614089966 0.11654096841812134 0.21605446934700012 0.0 0.0 1.0 0.5113095641136169 0.5592316389083862 0 1.0 0 0.0 0 0.0 0 0.0 -1.6406108140945435 0.10786223411560059 0.21605446934700012 0.0 0.0 1.0 0.4515746533870697 0.5366171598434448 0 1.0 0 0.0 0 0.0 0 0.0 -1.5250217914581299 0.11532112956047058 0.21605446934700012 0.0 0.0 1.0 0.5096496939659119 0.5577319860458374 0 1.0 0 0.0 0 0.0 0 0.0 -1.637346625328064 0.1158793568611145 0.21605446934700012 0.0 0.0 0.999969482421875 0.4533528983592987 0.5442155599594116 0 1.0 0 0.0 0 0.0 0 0.0 -1.4477888345718384 0.11433598399162292 0.21605446934700012 0.0 0.0 0.999969482421875 0.5532851219177246 0.5627743005752563 0 1.0 0 0.0 0 0.0 0 0.0 -1.3330157995224 0.11431652307510376 0.21605446934700012 0.0 0.0 1.0 0.6117595434188843 0.5635828971862793 0 1.0 0 0.0 0 0.0 0 0.0 -1.4513328075408936 0.11576256155967712 0.21605446934700012 0.0 0.0 1.0 0.5512181520462036 0.5639832019805908 0 1.0 0 0.0 0 0.0 0 0.0 -1.6406108140945435 0.10786223411560059 0.21605446934700012 0.0 0.0 1.0 0.4515746533870697 0.5366171598434448 0 1.0 0 0.0 0 0.0 0 0.0 -1.5278749465942383 0.11395779252052307 0.21605446934700012 0.0 0.0 0.999969482421875 0.5080809593200684 0.5561013221740723 0 1.0 0 0.0 0 0.0 0 0.0 -1.5250217914581299 0.11532112956047058 0.21605446934700012 0.0 0.0 1.0 0.5096496939659119 0.5577319860458374 0 1.0 0 0.0 0 0.0 0 0.0 -1.4445902109146118 0.11274155974388123 0.21605446934700012 0.0 0.0 1.0 0.5551687479019165 0.5613738298416138 0 1.0 0 0.0 0 0.0 0 0.0 -1.3330157995224 0.11431652307510376 0.21605446934700012 0.0 0.0 1.0 0.6117595434188843 0.5635828971862793 0 1.0 0 0.0 0 0.0 0 0.0 -1.4477888345718384 0.11433598399162292 0.21605446934700012 0.0 0.0 0.999969482421875 0.5532851219177246 0.5627743005752563 0 1.0 0 0.0 0 0.0 0 0.0 -1.4445902109146118 0.11274155974388123 0.21605446934700012 0.0 0.0 1.0 0.5551687479019165 0.5613738298416138 0 1.0 0 0.0 0 0.0 0 0.0 -1.3318300247192383 0.10725411772727966 0.21605446934700012 0.0 0.0 1.0 0.6129981279373169 0.5573402047157288 0 1.0 0 0.0 0 0.0 0 0.0 -1.3330157995224 0.11431652307510376 0.21605446934700012 0.0 0.0 1.0 0.6117595434188843 0.5635828971862793 0 1.0 0 0.0 0 0.0 0 0.0 -1.6406108140945435 0.10786223411560059 0.21605446934700012 0.0 0.0 1.0 0.4515746533870697 0.5366171598434448 0 1.0 0 0.0 0 0.0 0 0.0 -1.5305675268173218 0.11245092749595642 0.21605446934700012 0.0 0.0 1.0 0.5066025257110596 0.5543391704559326 0 1.0 0 0.0 0 0.0 0 0.0 -1.5278749465942383 0.11395779252052307 0.21605446934700012 0.0 0.0 0.999969482421875 0.5080809593200684 0.5561013221740723 0 1.0 0 0.0 0 0.0 0 0.0 -1.4417370557785034 0.11097931861877441 0.21605446934700012 0.0 0.0 1.0 0.55687016248703 0.5597825050354004 0 1.0 0 0.0 0 0.0 0 0.0 -1.3318300247192383 0.10725411772727966 0.21605446934700012 0.0 0.0 1.0 0.6129981279373169 0.5573402047157288 0 1.0 0 0.0 0 0.0 0 0.0 -1.4445902109146118 0.11274155974388123 0.21605446934700012 0.0 0.0 1.0 0.5551687479019165 0.5613738298416138 0 1.0 0 0.0 0 0.0 0 0.0 -1.6406108140945435 0.10786223411560059 0.21605446934700012 0.0 0.0 1.0 0.4515746533870697 0.5366171598434448 0 1.0 0 0.0 0 0.0 0 0.0 -1.5330997705459595 0.11080053448677063 0.21605446934700012 0.0 0.0 1.0 0.5052133798599243 0.5524446964263916 0 1.0 0 0.0 0 0.0 0 0.0 -1.5305675268173218 0.11245092749595642 0.21605446934700012 0.0 0.0 1.0 0.5066025257110596 0.5543391704559326 0 1.0 0 0.0 0 0.0 0 0.0 -1.4392293691635132 0.1090492308139801 0.21605446934700012 0.0 0.0 0.999969482421875 0.5583904981613159 0.5580000877380371 0 1.0 0 0.0 0 0.0 0 0.0 -1.3318300247192383 0.10725411772727966 0.21605446934700012 0.0 0.0 1.0 0.6129981279373169 0.5573402047157288 0 1.0 0 0.0 0 0.0 0 0.0 -1.4417370557785034 0.11097931861877441 0.21605446934700012 0.0 0.0 1.0 0.55687016248703 0.5597825050354004 0 1.0 0 0.0 0 0.0 0 0.0 -1.6406108140945435 0.10786223411560059 0.21605446934700012 0.0 0.0 1.0 0.4515746533870697 0.5366171598434448 0 1.0 0 0.0 0 0.0 0 0.0 -1.5355125665664673 0.10897016525268555 0.21605446934700012 0.0 0.0 1.0 0.503890335559845 0.5503765344619751 0 1.0 0 0.0 0 0.0 0 0.0 -1.5330997705459595 0.11080053448677063 0.21605446934700012 0.0 0.0 1.0 0.5052133798599243 0.5524446964263916 0 1.0 0 0.0 0 0.0 0 0.0 -1.4369914531707764 0.10692211985588074 0.21605446934700012 0.0 0.0 1.0 0.5597748756408691 0.5560001134872437 0 1.0 0 0.0 0 0.0 0 0.0 -1.3318300247192383 0.10725411772727966 0.21605446934700012 0.0 0.0 1.0 0.6129981279373169 0.5573402047157288 0 1.0 0 0.0 0 0.0 0 0.0 -1.4392293691635132 0.1090492308139801 0.21605446934700012 0.0 0.0 0.999969482421875 0.5583904981613159 0.5580000877380371 0 1.0 0 0.0 0 0.0 0 0.0 -1.6406108140945435 0.10786223411560059 0.21605446934700012 0.0 0.0 1.0 0.4515746533870697 0.5366171598434448 0 1.0 0 0.0 0 0.0 0 0.0 -1.537847638130188 0.10692331194877625 0.21605446934700012 0.0 0.0 1.0 0.5026096105575562 0.5480918884277344 0 1.0 0 0.0 0 0.0 0 0.0 -1.5355125665664673 0.10897016525268555 0.21605446934700012 0.0 0.0 1.0 0.503890335559845 0.5503765344619751 0 1.0 0 0.0 0 0.0 0 0.0 -1.643573522567749 0.09945592284202576 0.21605446934700012 0.0 0.0 1.0 0.4498993456363678 0.5286128520965576 0 1.0 0 0.0 0 0.0 0 0.0 -1.537847638130188 0.10692331194877625 0.21605446934700012 0.0 0.0 1.0 0.5026096105575562 0.5480918884277344 0 1.0 0 0.0 0 0.0 0 0.0 -1.6406108140945435 0.10786223411560059 0.21605446934700012 0.0 0.0 1.0 0.4515746533870697 0.5366171598434448 0 1.0 0 0.0 0 0.0 0 0.0 -1.4369914531707764 0.10692211985588074 0.21605446934700012 0.0 0.0 1.0 0.5597748756408691 0.5560001134872437 0 1.0 0 0.0 0 0.0 0 0.0 -1.3308266401290894 0.09963467717170715 0.21605446934700012 0.0 0.0 1.0 0.6142219305038452 0.550504207611084 0 1.0 0 0.0 0 0.0 0 0.0 -1.3318300247192383 0.10725411772727966 0.21605446934700012 0.0 0.0 1.0 0.6129981279373169 0.5573402047157288 0 1.0 0 0.0 0 0.0 0 0.0 -1.643573522567749 0.09945592284202576 0.21605446934700012 0.0 0.0 1.0 0.4498993456363678 0.5286128520965576 0 1.0 0 0.0 0 0.0 0 0.0 -1.5401049852371216 0.10465997457504272 0.21605446934700012 0.0 0.0 0.999969482421875 0.5013704895973206 0.545587956905365 0 1.0 0 0.0 0 0.0 0 0.0 -1.537847638130188 0.10692331194877625 0.21605446934700012 0.0 0.0 1.0 0.5026096105575562 0.5480918884277344 0 1.0 0 0.0 0 0.0 0 0.0 -1.4349483251571655 0.10456877946853638 0.21605446934700012 0.0 0.0 1.0 0.5610678791999817 0.5537543296813965 0 1.0 0 0.0 0 0.0 0 0.0 -1.3308266401290894 0.09963467717170715 0.21605446934700012 0.0 0.0 1.0 0.6142219305038452 0.550504207611084 0 1.0 0 0.0 0 0.0 0 0.0 -1.4369914531707764 0.10692211985588074 0.21605446934700012 0.0 0.0 1.0 0.5597748756408691 0.5560001134872437 0 1.0 0 0.0 0 0.0 0 0.0 -1.643573522567749 0.09945592284202576 0.21605446934700012 0.0 0.0 1.0 0.4498993456363678 0.5286128520965576 0 1.0 0 0.0 0 0.0 0 0.0 -1.542284369468689 0.10218015313148499 0.21605446934700012 0.0 0.0 1.0 0.5001721382141113 0.5428614020347595 0 1.0 0 0.0 0 0.0 0 0.0 -1.5401049852371216 0.10465997457504272 0.21605446934700012 0.0 0.0 0.999969482421875 0.5013704895973206 0.545587956905365 0 1.0 0 0.0 0 0.0 0 0.0 -1.433099627494812 0.10198923945426941 0.21605446934700012 0.0 0.0 1.0 0.5622706413269043 0.5512592792510986 0 1.0 0 0.0 0 0.0 0 0.0 -1.3308266401290894 0.09963467717170715 0.21605446934700012 0.0 0.0 1.0 0.6142219305038452 0.550504207611084 0 1.0 0 0.0 0 0.0 0 0.0 -1.4349483251571655 0.10456877946853638 0.21605446934700012 0.0 0.0 1.0 0.5610678791999817 0.5537543296813965 0 1.0 0 0.0 0 0.0 0 0.0 -1.643573522567749 0.09945592284202576 0.21605446934700012 0.0 0.0 1.0 0.4498993456363678 0.5286128520965576 0 1.0 0 0.0 0 0.0 0 0.0 -1.5443859100341797 0.09948384761810303 0.21605446934700012 0.0 0.0 1.0 0.4990137815475464 0.539908766746521 0 1.0 0 0.0 0 0.0 0 0.0 -1.542284369468689 0.10218015313148499 0.21605446934700012 0.0 0.0 1.0 0.5001721382141113 0.5428614020347595 0 1.0 0 0.0 0 0.0 0 0.0 -1.4314457178115845 0.09918349981307983 0.21605446934700012 0.0 0.0 1.0 0.5633835792541504 0.5485106706619263 0 1.0 0 0.0 0 0.0 0 0.0 -1.3308266401290894 0.09963467717170715 0.21605446934700012 0.0 0.0 1.0 0.6142219305038452 0.550504207611084 0 1.0 0 0.0 0 0.0 0 0.0 -1.433099627494812 0.10198923945426941 0.21605446934700012 0.0 0.0 1.0 0.5622706413269043 0.5512592792510986 0 1.0 0 0.0 0 0.0 0 0.0 -1.4314457178115845 0.09918349981307983 0.21605446934700012 0.0 0.0 1.0 0.5633835792541504 0.5485106706619263 0 1.0 0 0.0 0 0.0 0 0.0 -1.3300057649612427 0.09145823121070862 0.21605446934700012 0.0 0.0 1.0 0.6154331564903259 0.5430489778518677 0 1.0 0 0.0 0 0.0 0 0.0 -1.3308266401290894 0.09963467717170715 0.21605446934700012 0.0 0.0 1.0 0.6142219305038452 0.550504207611084 0 1.0 0 0.0 0 0.0 0 0.0 -1.643573522567749 0.09945592284202576 0.21605446934700012 0.0 0.0 1.0 0.4498993456363678 0.5286128520965576 0 1.0 0 0.0 0 0.0 0 0.0 -1.5464097261428833 0.09657105803489685 0.21605446934700012 0.0 0.0 1.0 0.4978945851325989 0.5367259383201599 0 1.0 0 0.0 0 0.0 0 0.0 -1.5443859100341797 0.09948384761810303 0.21605446934700012 0.0 0.0 1.0 0.4990137815475464 0.539908766746521 0 1.0 0 0.0 0 0.0 0 0.0 -1.6462346315383911 0.09066042304039001 0.21605446934700012 0.0 0.0 1.0 0.4483241140842438 0.5201866626739502 0 1.0 0 0.0 0 0.0 0 0.0 -1.5464097261428833 0.09657105803489685 0.21605446934700012 0.0 0.0 1.0 0.4978945851325989 0.5367259383201599 0 1.0 0 0.0 0 0.0 0 0.0 -1.643573522567749 0.09945592284202576 0.21605446934700012 0.0 0.0 1.0 0.4498993456363678 0.5286128520965576 0 1.0 0 0.0 0 0.0 0 0.0 -1.4299862384796143 0.09615153074264526 0.21605446934700012 0.0 0.0 1.0 0.5644075870513916 0.545503556728363 0 1.0 0 0.0 0 0.0 0 0.0 -1.3300057649612427 0.09145823121070862 0.21605446934700012 0.0 0.0 1.0 0.6154331564903259 0.5430489778518677 0 1.0 0 0.0 0 0.0 0 0.0 -1.4314457178115845 0.09918349981307983 0.21605446934700012 0.0 0.0 1.0 0.5633835792541504 0.5485106706619263 0 1.0 0 0.0 0 0.0 0 0.0 -1.6462346315383911 0.09066042304039001 0.21605446934700012 0.0 0.0 1.0 0.4483241140842438 0.5201866626739502 0 1.0 0 0.0 0 0.0 0 0.0 -1.5483555793762207 0.09344181418418884 0.21605446934700012 0.0 0.0 1.0 0.49681398272514343 0.533308744430542 0 1.0 0 0.0 0 0.0 0 0.0 -1.5464097261428833 0.09657105803489685 0.21605446934700012 0.0 0.0 1.0 0.4978945851325989 0.5367259383201599 0 1.0 0 0.0 0 0.0 0 0.0 -1.4287214279174805 0.09289336204528809 0.21605446934700012 0.0 0.0 1.0 0.565342903137207 0.5422323942184448 0 1.0 0 0.0 0 0.0 0 0.0 -1.3300057649612427 0.09145823121070862 0.21605446934700012 0.0 0.0 1.0 0.6154331564903259 0.5430489778518677 0 1.0 0 0.0 0 0.0 0 0.0 -1.4299862384796143 0.09615153074264526 0.21605446934700012 0.0 0.0 1.0 0.5644075870513916 0.545503556728363 0 1.0 0 0.0 0 0.0 0 0.0 -1.6462346315383911 0.09066042304039001 0.21605446934700012 0.0 0.0 1.0 0.4483241140842438 0.5201866626739502 0 1.0 0 0.0 0 0.0 0 0.0 -1.550223708152771 0.09009608626365662 0.21605446934700012 0.0 0.0 0.999969482421875 0.495771199464798 0.5296525955200195 0 1.0 0 0.0 0 0.0 0 0.0 -1.5483555793762207 0.09344181418418884 0.21605446934700012 0.0 0.0 1.0 0.49681398272514343 0.533308744430542 0 1.0 0 0.0 0 0.0 0 0.0 -1.4276511669158936 0.08940896391868591 0.21605446934700012 0.0 0.0 1.0 0.5661900043487549 0.5386909246444702 0 1.0 0 0.0 0 0.0 0 0.0 -1.3300057649612427 0.09145823121070862 0.21605446934700012 0.0 0.0 1.0 0.6154331564903259 0.5430489778518677 0 1.0 0 0.0 0 0.0 0 0.0 -1.4287214279174805 0.09289336204528809 0.21605446934700012 0.0 0.0 1.0 0.565342903137207 0.5422323942184448 0 1.0 0 0.0 0 0.0 0 0.0 -1.4276511669158936 0.08940896391868591 0.21605446934700012 0.0 0.0 1.0 0.5661900043487549 0.5386909246444702 0 1.0 0 0.0 0 0.0 0 0.0 -1.3293672800064087 0.08272477984428406 0.21605446934700012 0.0 0.0 1.0 0.6166341304779053 0.5349475145339966 0 1.0 0 0.0 0 0.0 0 0.0 -1.3300057649612427 0.09145823121070862 0.21605446934700012 0.0 0.0 1.0 0.6154331564903259 0.5430489778518677 0 1.0 0 0.0 0 0.0 0 0.0 -1.5569175481796265 0.07454833388328552 0.21605446934700012 0.0 0.0 1.0 0.4919670522212982 0.5125381350517273 0 1.0 0 0.0 0 0.0 0 0.0 -1.5553607940673828 0.07875999808311462 0.21605446934700012 0.0 0.0 1.0 0.49286413192749023 0.5172007083892822 0 1.0 0 0.0 0 0.0 0 0.0 -1.6462346315383911 0.09066042304039001 0.21605446934700012 0.0 0.0 1.0 0.4483241140842438 0.5201866626739502 0 1.0 0 0.0 0 0.0 0 0.0 -1.5553607940673828 0.07875999808311462 0.21605446934700012 0.0 0.0 1.0 0.49286413192749023 0.5172007083892822 0 1.0 0 0.0 0 0.0 0 0.0 -1.553726315498352 0.0827551782131195 0.21605446934700012 0.0 0.0 1.0 0.49379682540893555 0.5216037034988403 0 1.0 0 0.0 0 0.0 0 0.0 -1.6462346315383911 0.09066042304039001 0.21605446934700012 0.0 0.0 1.0 0.4483241140842438 0.5201866626739502 0 1.0 0 0.0 0 0.0 0 0.0 -1.553726315498352 0.0827551782131195 0.21605446934700012 0.0 0.0 1.0 0.49379682540893555 0.5216037034988403 0 1.0 0 0.0 0 0.0 0 0.0 -1.552013874053955 0.08653387427330017 0.21605446934700012 0.0 0.0 1.0 0.4947656989097595 0.5257526636123657 0 1.0 0 0.0 0 0.0 0 0.0 -1.6462346315383911 0.09066042304039001 0.21605446934700012 0.0 0.0 1.0 0.4483241140842438 0.5201866626739502 0 1.0 0 0.0 0 0.0 0 0.0 -1.552013874053955 0.08653387427330017 0.21605446934700012 0.0 0.0 1.0 0.4947656989097595 0.5257526636123657 0 1.0 0 0.0 0 0.0 0 0.0 -1.550223708152771 0.09009608626365662 0.21605446934700012 0.0 0.0 0.999969482421875 0.495771199464798 0.5296525955200195 0 1.0 0 0.0 0 0.0 0 0.0 -1.6462346315383911 0.09066042304039001 0.21605446934700012 0.0 0.0 1.0 0.4483241140842438 0.5201866626739502 0 1.0 0 0.0 0 0.0 0 0.0 -1.426775574684143 0.08569836616516113 0.21605446934700012 0.0 0.0 1.0 0.5669488906860352 0.5348721742630005 0 1.0 0 0.0 0 0.0 0 0.0 -1.3293672800064087 0.08272477984428406 0.21605446934700012 0.0 0.0 1.0 0.6166341304779053 0.5349475145339966 0 1.0 0 0.0 0 0.0 0 0.0 -1.4276511669158936 0.08940896391868591 0.21605446934700012 0.0 0.0 1.0 0.5661900043487549 0.5386909246444702 0 1.0 0 0.0 0 0.0 0 0.0 -1.42609441280365 0.08176156878471375 0.21605446934700012 0.0 0.0 1.0 0.5676197409629822 0.5307688117027283 0 1.0 0 0.0 0 0.0 0 0.0 -1.3293672800064087 0.08272477984428406 0.21605446934700012 0.0 0.0 1.0 0.6166341304779053 0.5349475145339966 0 1.0 0 0.0 0 0.0 0 0.0 -1.426775574684143 0.08569836616516113 0.21605446934700012 0.0 0.0 1.0 0.5669488906860352 0.5348721742630005 0 1.0 0 0.0 0 0.0 0 0.0 -1.42609441280365 0.08176156878471375 0.21605446934700012 0.0 0.0 1.0 0.5676197409629822 0.5307688117027283 0 1.0 0 0.0 0 0.0 0 0.0 -1.3289111852645874 0.07343429327011108 0.21605446934700012 0.0 0.0 1.0 0.6178270578384399 0.526172935962677 0 1.0 0 0.0 0 0.0 0 0.0 -1.3293672800064087 0.08272477984428406 0.21605446934700012 0.0 0.0 1.0 0.6166341304779053 0.5349475145339966 0 1.0 0 0.0 0 0.0 0 0.0 -1.4256080389022827 0.07759854197502136 0.21605446934700012 0.0 0.0 0.999969482421875 0.5682021379470825 0.5263727903366089 0 1.0 0 0.0 0 0.0 0 0.0 -1.3289111852645874 0.07343429327011108 0.21605446934700012 0.0 0.0 1.0 0.6178270578384399 0.526172935962677 0 1.0 0 0.0 0 0.0 0 0.0 -1.42609441280365 0.08176156878471375 0.21605446934700012 0.0 0.0 1.0 0.5676197409629822 0.5307688117027283 0 1.0 0 0.0 0 0.0 0 0.0 -1.4253160953521729 0.07320931553840637 0.21605446934700012 0.0 0.0 1.0 0.5686959028244019 0.5216755270957947 0 1.0 0 0.0 0 0.0 0 0.0 -1.3289111852645874 0.07343429327011108 0.21605446934700012 0.0 0.0 1.0 0.6178270578384399 0.526172935962677 0 1.0 0 0.0 0 0.0 0 0.0 -1.4256080389022827 0.07759854197502136 0.21605446934700012 0.0 0.0 0.999969482421875 0.5682021379470825 0.5263727903366089 0 1.0 0 0.0 0 0.0 0 0.0 -1.4253160953521729 0.07320931553840637 0.21605446934700012 0.0 0.0 1.0 0.5686959028244019 0.5216755270957947 0 1.0 0 0.0 0 0.0 0 0.0 -1.3286374807357788 0.06358680129051208 0.21605446934700012 0.0 0.0 1.0 0.6190141439437866 0.5166995525360107 0 1.0 0 0.0 0 0.0 0 0.0 -1.3289111852645874 0.07343429327011108 0.21605446934700012 0.0 0.0 1.0 0.6178270578384399 0.526172935962677 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 0.06859388947486877 0.21605446934700012 0.0 0.0 1.0 0.5691002607345581 0.5166683197021484 0 1.0 0 0.0 0 0.0 0 0.0 -1.3286374807357788 0.06358680129051208 0.21605446934700012 0.0 0.0 1.0 0.6190141439437866 0.5166995525360107 0 1.0 0 0.0 0 0.0 0 0.0 -1.4253160953521729 0.07320931553840637 0.21605446934700012 0.0 0.0 1.0 0.5686959028244019 0.5216755270957947 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 0.05878652632236481 0.21605446934700012 0.0 0.0 1.0 0.5698535442352295 0.5058304071426392 0 1.0 0 0.0 0 0.0 0 0.0 -1.3286374807357788 0.06358680129051208 0.21605446934700012 0.0 0.0 1.0 0.6190141439437866 0.5166995525360107 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 0.06859388947486877 0.21605446934700012 0.0 0.0 1.0 0.5691002607345581 0.5166683197021484 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 0.05878652632236481 0.21605446934700012 0.0 0.0 1.0 0.5698535442352295 0.5058304071426392 0 1.0 0 0.0 0 0.0 0 0.0 -1.3285462856292725 0.053182318806648254 0.21605446934700012 0.0 0.0 1.0 0.6201977729797363 0.5065033435821533 0 1.0 0 0.0 0 0.0 0 0.0 -1.3286374807357788 0.06358680129051208 0.21605446934700012 0.0 0.0 1.0 0.6190141439437866 0.5166995525360107 0 1.0 0 0.0 0 0.0 0 0.0 -1.4299498796463013 0.056906312704086304 0.21605446934700012 0.0 0.0 0.999969482421875 0.5672665238380432 0.5033541917800903 0 1.0 0 0.0 0 0.0 0 0.0 -1.3285462856292725 0.053182318806648254 0.21605446934700012 0.0 0.0 1.0 0.6201977729797363 0.5065033435821533 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 0.05878652632236481 0.21605446934700012 0.0 0.0 1.0 0.5698535442352295 0.5058304071426392 0 1.0 0 0.0 0 0.0 0 0.0 -1.4352694749832153 0.05500175058841705 0.21605446934700012 0.0 0.0 1.0 0.5643073916435242 0.5007731914520264 0 1.0 0 0.0 0 0.0 0 0.0 -1.3285462856292725 0.053182318806648254 0.21605446934700012 0.0 0.0 1.0 0.6201977729797363 0.5065033435821533 0 1.0 0 0.0 0 0.0 0 0.0 -1.4299498796463013 0.056906312704086304 0.21605446934700012 0.0 0.0 0.999969482421875 0.5672665238380432 0.5033541917800903 0 1.0 0 0.0 0 0.0 0 0.0 -1.4411777257919312 0.05307286977767944 0.21605446934700012 0.0 0.0 1.0 0.5609673261642456 0.49808448553085327 0 1.0 0 0.0 0 0.0 0 0.0 -1.3285462856292725 0.053182318806648254 0.21605446934700012 0.0 0.0 1.0 0.6201977729797363 0.5065033435821533 0 1.0 0 0.0 0 0.0 0 0.0 -1.4352694749832153 0.05500175058841705 0.21605446934700012 0.0 0.0 1.0 0.5643073916435242 0.5007731914520264 0 1.0 0 0.0 0 0.0 0 0.0 -1.4411777257919312 0.05307286977767944 0.21605446934700012 0.0 0.0 1.0 0.5609673261642456 0.49808448553085327 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 0.21605446934700012 0.0 0.0 1.0 0.6335775852203369 0.3873562812805176 0 1.0 0 0.0 0 0.0 0 0.0 -1.3285462856292725 0.053182318806648254 0.21605446934700012 0.0 0.0 1.0 0.6201977729797363 0.5065033435821533 0 1.0 0 0.0 0 0.0 0 0.0 -1.4476746320724487 0.051119670271873474 0.21605446934700012 0.0 0.0 1.0 0.5572380423545837 0.495286762714386 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 0.21605446934700012 0.0 0.0 1.0 0.6335775852203369 0.3873562812805176 0 1.0 0 0.0 0 0.0 0 0.0 -1.4411777257919312 0.05307286977767944 0.21605446934700012 0.0 0.0 1.0 0.5609673261642456 0.49808448553085327 0 1.0 0 0.0 0 0.0 0 0.0 -1.4547600746154785 0.04914213716983795 0.21605446934700012 0.0 0.0 1.0 0.5531123876571655 0.4923807382583618 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 0.21605446934700012 0.0 0.0 1.0 0.6335775852203369 0.3873562812805176 0 1.0 0 0.0 0 0.0 0 0.0 -1.4476746320724487 0.051119670271873474 0.21605446934700012 0.0 0.0 1.0 0.5572380423545837 0.495286762714386 0 1.0 0 0.0 0 0.0 0 0.0 -1.46243417263031 0.04714028537273407 0.21605446934700012 0.0 0.0 1.0 0.5485851168632507 0.48936909437179565 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 0.21605446934700012 0.0 0.0 1.0 0.6335775852203369 0.3873562812805176 0 1.0 0 0.0 0 0.0 0 0.0 -1.4547600746154785 0.04914213716983795 0.21605446934700012 0.0 0.0 1.0 0.5531123876571655 0.4923807382583618 0 1.0 0 0.0 0 0.0 0 0.0 -1.470697045326233 0.04511411488056183 0.21605446934700012 0.0 0.0 1.0 0.5436533093452454 0.4862578511238098 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 0.21605446934700012 0.0 0.0 1.0 0.6335775852203369 0.3873562812805176 0 1.0 0 0.0 0 0.0 0 0.0 -1.46243417263031 0.04714028537273407 0.21605446934700012 0.0 0.0 1.0 0.5485851168632507 0.48936909437179565 0 1.0 0 0.0 0 0.0 0 0.0 -1.479548454284668 0.043063610792160034 0.21605446934700012 0.0 0.0 1.0 0.5383179187774658 0.4830561876296997 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 0.21605446934700012 0.0 0.0 1.0 0.6335775852203369 0.3873562812805176 0 1.0 0 0.0 0 0.0 0 0.0 -1.470697045326233 0.04511411488056183 0.21605446934700012 0.0 0.0 1.0 0.5436533093452454 0.4862578511238098 0 1.0 0 0.0 0 0.0 0 0.0 -1.4889885187149048 0.04098878800868988 0.21605446934700012 0.0 0.0 0.999969482421875 0.5325842499732971 0.47977715730667114 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 0.21605446934700012 0.0 0.0 1.0 0.6335775852203369 0.3873562812805176 0 1.0 0 0.0 0 0.0 0 0.0 -1.479548454284668 0.043063610792160034 0.21605446934700012 0.0 0.0 1.0 0.5383179187774658 0.4830561876296997 0 1.0 0 0.0 0 0.0 0 0.0 -1.4990172386169434 0.03888964653015137 0.21605446934700012 0.0 0.0 1.0 0.5264630317687988 0.4764382839202881 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 0.21605446934700012 0.0 0.0 1.0 0.6335775852203369 0.3873562812805176 0 1.0 0 0.0 0 0.0 0 0.0 -1.4889885187149048 0.04098878800868988 0.21605446934700012 0.0 0.0 0.999969482421875 0.5325842499732971 0.47977715730667114 0 1.0 0 0.0 0 0.0 0 0.0 -1.5096346139907837 0.036766186356544495 0.21605446934700012 0.0 0.0 0.999969482421875 0.519971489906311 0.473061203956604 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.5751795768737793 0.43024682998657227 0 1.0 0 0.0 0 0.0 0 0.0 -1.4990172386169434 0.03888964653015137 0.21605446934700012 0.0 0.0 1.0 0.5264630317687988 0.4764382839202881 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.5751795768737793 0.43024682998657227 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 0.21605446934700012 0.0 0.0 1.0 0.6335775852203369 0.3873562812805176 0 1.0 0 0.0 0 0.0 0 0.0 -1.4990172386169434 0.03888964653015137 0.21605446934700012 0.0 0.0 1.0 0.5264630317687988 0.4764382839202881 0 1.0 0 0.0 0 0.0 0 0.0 -1.5208405256271362 0.03461839258670807 0.21605446934700012 0.0 0.0 0.999969482421875 0.5131340026855469 0.46967190504074097 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.5751795768737793 0.43024682998657227 0 1.0 0 0.0 0 0.0 0 0.0 -1.5096346139907837 0.036766186356544495 0.21605446934700012 0.0 0.0 0.999969482421875 0.519971489906311 0.473061203956604 0 1.0 0 0.0 0 0.0 0 0.0 -1.529197096824646 0.03296072781085968 0.21605446934700012 0.0 0.0 1.0 0.5080614686012268 0.46713006496429443 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.5751795768737793 0.43024682998657227 0 1.0 0 0.0 0 0.0 0 0.0 -1.5208405256271362 0.03461839258670807 0.21605446934700012 0.0 0.0 0.999969482421875 0.5131340026855469 0.46967190504074097 0 1.0 0 0.0 0 0.0 0 0.0 -1.5372202396392822 0.031256839632987976 0.21605446934700012 0.0 0.0 1.0 0.5032224059104919 0.46460527181625366 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.5751795768737793 0.43024682998657227 0 1.0 0 0.0 0 0.0 0 0.0 -1.529197096824646 0.03296072781085968 0.21605446934700012 0.0 0.0 1.0 0.5080614686012268 0.46713006496429443 0 1.0 0 0.0 0 0.0 0 0.0 -1.544910192489624 0.02950674295425415 0.21605446934700012 0.0 0.0 1.0 0.4986191391944885 0.46209830045700073 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.5751795768737793 0.43024682998657227 0 1.0 0 0.0 0 0.0 0 0.0 -1.5372202396392822 0.031256839632987976 0.21605446934700012 0.0 0.0 1.0 0.5032224059104919 0.46460527181625366 0 1.0 0 0.0 0 0.0 0 0.0 -1.5522669553756714 0.027710437774658203 0.21605446934700012 0.0 0.0 1.0 0.49425211548805237 0.459608793258667 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.5751795768737793 0.43024682998657227 0 1.0 0 0.0 0 0.0 0 0.0 -1.544910192489624 0.02950674295425415 0.21605446934700012 0.0 0.0 1.0 0.4986191391944885 0.46209830045700073 0 1.0 0 0.0 0 0.0 0 0.0 -1.5592904090881348 0.02586790919303894 0.21605446934700012 0.0 0.0 1.0 0.4901202917098999 0.4571353793144226 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.5751795768737793 0.43024682998657227 0 1.0 0 0.0 0 0.0 0 0.0 -1.5522669553756714 0.027710437774658203 0.21605446934700012 0.0 0.0 1.0 0.49425211548805237 0.459608793258667 0 1.0 0 0.0 0 0.0 0 0.0 -1.5659806728363037 0.023979172110557556 0.21605446934700012 0.0 0.0 1.0 0.4862211048603058 0.45467615127563477 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.5751795768737793 0.43024682998657227 0 1.0 0 0.0 0 0.0 0 0.0 -1.5592904090881348 0.02586790919303894 0.21605446934700012 0.0 0.0 1.0 0.4901202917098999 0.4571353793144226 0 1.0 0 0.0 0 0.0 0 0.0 -1.5723377466201782 0.022044211626052856 0.21605446934700012 0.0 0.0 1.0 0.4825509786605835 0.452228307723999 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.5751795768737793 0.43024682998657227 0 1.0 0 0.0 0 0.0 0 0.0 -1.5659806728363037 0.023979172110557556 0.21605446934700012 0.0 0.0 1.0 0.4862211048603058 0.45467615127563477 0 1.0 0 0.0 0 0.0 0 0.0 -1.5783613920211792 0.020063042640686035 0.21605446934700012 0.0 0.0 1.0 0.47910571098327637 0.44978851079940796 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.5751795768737793 0.43024682998657227 0 1.0 0 0.0 0 0.0 0 0.0 -1.5723377466201782 0.022044211626052856 0.21605446934700012 0.0 0.0 1.0 0.4825509786605835 0.452228307723999 0 1.0 0 0.0 0 0.0 0 0.0 -1.5840519666671753 0.0180356502532959 0.21605446934700012 0.0 0.0 1.0 0.47588011622428894 0.4473530650138855 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.5751795768737793 0.43024682998657227 0 1.0 0 0.0 0 0.0 0 0.0 -1.5783613920211792 0.020063042640686035 0.21605446934700012 0.0 0.0 1.0 0.47910571098327637 0.44978851079940796 0 1.0 0 0.0 0 0.0 0 0.0 -1.589409351348877 0.01596204936504364 0.21605446934700012 0.0 0.0 1.0 0.47286897897720337 0.4449179768562317 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.5751795768737793 0.43024682998657227 0 1.0 0 0.0 0 0.0 0 0.0 -1.5840519666671753 0.0180356502532959 0.21605446934700012 0.0 0.0 1.0 0.47588011622428894 0.4473530650138855 0 1.0 0 0.0 0 0.0 0 0.0 -1.5944334268569946 0.013842225074768066 0.21605446934700012 0.0 0.0 1.0 0.4700668454170227 0.4424787759780884 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.5751795768737793 0.43024682998657227 0 1.0 0 0.0 0 0.0 0 0.0 -1.589409351348877 0.01596204936504364 0.21605446934700012 0.0 0.0 1.0 0.47286897897720337 0.4449179768562317 0 1.0 0 0.0 0 0.0 0 0.0 -1.5991243124008179 0.011676192283630371 0.21605446934700012 0.0 0.0 1.0 0.4674680829048157 0.44003111124038696 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.5751795768737793 0.43024682998657227 0 1.0 0 0.0 0 0.0 0 0.0 -1.5944334268569946 0.013842225074768066 0.21605446934700012 0.0 0.0 1.0 0.4700668454170227 0.4424787759780884 0 1.0 0 0.0 0 0.0 0 0.0 -1.6035646200180054 0.009406790137290955 0.21605446934700012 0.0 0.0 1.0 0.4650213122367859 0.43750661611557007 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.5751795768737793 0.43024682998657227 0 1.0 0 0.0 0 0.0 0 0.0 -1.5991243124008179 0.011676192283630371 0.21605446934700012 0.0 0.0 1.0 0.4674680829048157 0.44003111124038696 0 1.0 0 0.0 0 0.0 0 0.0 -1.6078370809555054 0.0069768428802490234 0.21605446934700012 0.0 0.0 1.0 0.4626764953136444 0.43484050035476685 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.5751795768737793 0.43024682998657227 0 1.0 0 0.0 0 0.0 0 0.0 -1.6035646200180054 0.009406790137290955 0.21605446934700012 0.0 0.0 1.0 0.4650213122367859 0.43750661611557007 0 1.0 0 0.0 0 0.0 0 0.0 -1.6119416952133179 0.004386350512504578 0.21605446934700012 0.0 0.0 0.999969482421875 0.46043041348457336 0.4320330023765564 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.5751795768737793 0.43024682998657227 0 1.0 0 0.0 0 0.0 0 0.0 -1.6078370809555054 0.0069768428802490234 0.21605446934700012 0.0 0.0 1.0 0.4626764953136444 0.43484050035476685 0 1.0 0 0.0 0 0.0 0 0.0 -1.6158784627914429 0.001635327935218811 0.21605446934700012 0.0 0.0 1.0 0.4582798480987549 0.4290844798088074 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.5751795768737793 0.43024682998657227 0 1.0 0 0.0 0 0.0 0 0.0 -1.6119416952133179 0.004386350512504578 0.21605446934700012 0.0 0.0 0.999969482421875 0.46043041348457336 0.4320330023765564 0 1.0 0 0.0 0 0.0 0 0.0 -1.6196473836898804 -0.0012762397527694702 0.21605446934700012 0.0 0.0 1.0 0.4562217891216278 0.425994873046875 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.5751795768737793 0.43024682998657227 0 1.0 0 0.0 0 0.0 0 0.0 -1.6158784627914429 0.001635327935218811 0.21605446934700012 0.0 0.0 1.0 0.4582798480987549 0.4290844798088074 0 1.0 0 0.0 0 0.0 0 0.0 -1.62324857711792 -0.004348337650299072 0.21605446934700012 0.0 0.0 1.0 0.4542531371116638 0.4227641224861145 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.5751795768737793 0.43024682998657227 0 1.0 0 0.0 0 0.0 0 0.0 -1.6196473836898804 -0.0012762397527694702 0.21605446934700012 0.0 0.0 1.0 0.4562217891216278 0.425994873046875 0 1.0 0 0.0 0 0.0 0 0.0 -1.626681923866272 -0.007580965757369995 0.21605446934700012 0.0 0.0 1.0 0.45237112045288086 0.4193921685218811 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.5751795768737793 0.43024682998657227 0 1.0 0 0.0 0 0.0 0 0.0 -1.62324857711792 -0.004348337650299072 0.21605446934700012 0.0 0.0 1.0 0.4542531371116638 0.4227641224861145 0 1.0 0 0.0 0 0.0 0 0.0 -1.626681923866272 -0.007580965757369995 0.21605446934700012 0.0 0.0 1.0 0.45237112045288086 0.4193921685218811 0 1.0 0 0.0 0 0.0 0 0.0 -1.428524374961853 -0.006379365921020508 0.21605446934700012 0.0 0.0 1.0 0.5732494592666626 0.4284428358078003 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.5751795768737793 0.43024682998657227 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.024926260113716125 0.21605446934700012 0.0 0.0 1.0 0.5769625306129456 0.40624701976776123 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 0.21605446934700012 0.0 0.0 1.0 0.6335775852203369 0.3873562812805176 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 0.21605446934700012 0.0 -6.103701889514923e-05 1.0 0.5751795768737793 0.43024682998657227 0 1.0 0 0.0 0 0.0 0 0.0 -1.626681923866272 -0.007580965757369995 0.21605446934700012 0.0 0.0 1.0 0.45237112045288086 0.4193921685218811 0 1.0 0 0.0 0 0.0 0 0.0 -1.4321365356445312 -0.007481232285499573 0.21605446934700012 0.0 0.0 1.0 0.5711151957511902 0.42655032873153687 0 1.0 0 0.0 0 0.0 0 0.0 -1.428524374961853 -0.006379365921020508 0.21605446934700012 0.0 0.0 1.0 0.5732494592666626 0.4284428358078003 0 1.0 0 0.0 0 0.0 0 0.0 -1.626681923866272 -0.007580965757369995 0.21605446934700012 0.0 0.0 1.0 0.45237112045288086 0.4193921685218811 0 1.0 0 0.0 0 0.0 0 0.0 -1.436055064201355 -0.00861714780330658 0.21605446934700012 0.0 0.0 0.999969482421875 0.5687727928161621 0.424571692943573 0 1.0 0 0.0 0 0.0 0 0.0 -1.4321365356445312 -0.007481232285499573 0.21605446934700012 0.0 0.0 1.0 0.5711151957511902 0.42655032873153687 0 1.0 0 0.0 0 0.0 0 0.0 -1.629947304725647 -0.010974138975143433 0.21605446934700012 0.0 0.0 1.0 0.45057305693626404 0.4158787727355957 0 1.0 0 0.0 0 0.0 0 0.0 -1.436055064201355 -0.00861714780330658 0.21605446934700012 0.0 0.0 0.999969482421875 0.5687727928161621 0.424571692943573 0 1.0 0 0.0 0 0.0 0 0.0 -1.626681923866272 -0.007580965757369995 0.21605446934700012 0.0 0.0 1.0 0.45237112045288086 0.4193921685218811 0 1.0 0 0.0 0 0.0 0 0.0 -1.629947304725647 -0.010974138975143433 0.21605446934700012 0.0 0.0 1.0 0.45057305693626404 0.4158787727355957 0 1.0 0 0.0 0 0.0 0 0.0 -1.4402800798416138 -0.009787127375602722 0.21605446934700012 0.0 0.0 0.999969482421875 0.5662178993225098 0.4225098490715027 0 1.0 0 0.0 0 0.0 0 0.0 -1.436055064201355 -0.00861714780330658 0.21605446934700012 0.0 0.0 0.999969482421875 0.5687727928161621 0.424571692943573 0 1.0 0 0.0 0 0.0 0 0.0 -1.629947304725647 -0.010974138975143433 0.21605446934700012 0.0 0.0 1.0 0.45057305693626404 0.4158787727355957 0 1.0 0 0.0 0 0.0 0 0.0 -1.4448117017745972 -0.010991156101226807 0.21605446934700012 0.0 0.0 1.0 0.5634464025497437 0.4203687906265259 0 1.0 0 0.0 0 0.0 0 0.0 -1.4402800798416138 -0.009787127375602722 0.21605446934700012 0.0 0.0 0.999969482421875 0.5662178993225098 0.4225098490715027 0 1.0 0 0.0 0 0.0 0 0.0 -1.6330450773239136 -0.014527842402458191 0.21605446934700012 0.0 0.0 1.0 0.4488561451435089 0.4122235178947449 0 1.0 0 0.0 0 0.0 0 0.0 -1.4448117017745972 -0.010991156101226807 0.21605446934700012 0.0 0.0 1.0 0.5634464025497437 0.4203687906265259 0 1.0 0 0.0 0 0.0 0 0.0 -1.629947304725647 -0.010974138975143433 0.21605446934700012 0.0 0.0 1.0 0.45057305693626404 0.4158787727355957 0 1.0 0 0.0 0 0.0 0 0.0 -1.6330450773239136 -0.014527842402458191 0.21605446934700012 0.0 0.0 1.0 0.4488561451435089 0.4122235178947449 0 1.0 0 0.0 0 0.0 0 0.0 -1.449649691581726 -0.012229233980178833 0.21605446934700012 0.0 0.0 1.0 0.5604545474052429 0.41815340518951416 0 1.0 0 0.0 0 0.0 0 0.0 -1.4448117017745972 -0.010991156101226807 0.21605446934700012 0.0 0.0 1.0 0.5634464025497437 0.4203687906265259 0 1.0 0 0.0 0 0.0 0 0.0 -1.6330450773239136 -0.014527842402458191 0.21605446934700012 0.0 0.0 1.0 0.4488561451435089 0.4122235178947449 0 1.0 0 0.0 0 0.0 0 0.0 -1.4547940492630005 -0.013501375913619995 0.21605446934700012 0.0 0.0 1.0 0.5572388768196106 0.4158700704574585 0 1.0 0 0.0 0 0.0 0 0.0 -1.449649691581726 -0.012229233980178833 0.21605446934700012 0.0 0.0 1.0 0.5604545474052429 0.41815340518951416 0 1.0 0 0.0 0 0.0 0 0.0 -1.6330450773239136 -0.014527842402458191 0.21605446934700012 0.0 0.0 1.0 0.4488561451435089 0.4122235178947449 0 1.0 0 0.0 0 0.0 0 0.0 -1.4602450132369995 -0.014807567000389099 0.21605446934700012 0.0 0.0 1.0 0.5537964105606079 0.41352611780166626 0 1.0 0 0.0 0 0.0 0 0.0 -1.4547940492630005 -0.013501375913619995 0.21605446934700012 0.0 0.0 1.0 0.5572388768196106 0.4158700704574585 0 1.0 0 0.0 0 0.0 0 0.0 -1.6359747648239136 -0.018242090940475464 0.21605446934700012 0.0 0.0 1.0 0.4472181797027588 0.4084261655807495 0 1.0 0 0.0 0 0.0 0 0.0 -1.4602450132369995 -0.014807567000389099 0.21605446934700012 0.0 0.0 1.0 0.5537964105606079 0.41352611780166626 0 1.0 0 0.0 0 0.0 0 0.0 -1.6330450773239136 -0.014527842402458191 0.21605446934700012 0.0 0.0 1.0 0.4488561451435089 0.4122235178947449 0 1.0 0 0.0 0 0.0 0 0.0 -1.6359747648239136 -0.018242090940475464 0.21605446934700012 0.0 0.0 1.0 0.4472181797027588 0.4084261655807495 0 1.0 0 0.0 0 0.0 0 0.0 -1.4660025835037231 -0.016147807240486145 0.21605446934700012 0.0 0.0 1.0 0.550125002861023 0.4111306071281433 0 1.0 0 0.0 0 0.0 0 0.0 -1.4602450132369995 -0.014807567000389099 0.21605446934700012 0.0 0.0 1.0 0.5537964105606079 0.41352611780166626 0 1.0 0 0.0 0 0.0 0 0.0 -1.6359747648239136 -0.018242090940475464 0.21605446934700012 0.0 0.0 1.0 0.4472181797027588 0.4084261655807495 0 1.0 0 0.0 0 0.0 0 0.0 -1.4720665216445923 -0.017522096633911133 0.21605446934700012 0.0 0.0 1.0 0.5462237000465393 0.40869390964508057 0 1.0 0 0.0 0 0.0 0 0.0 -1.4660025835037231 -0.016147807240486145 0.21605446934700012 0.0 0.0 1.0 0.550125002861023 0.4111306071281433 0 1.0 0 0.0 0 0.0 0 0.0 -1.6359747648239136 -0.018242090940475464 0.21605446934700012 0.0 0.0 1.0 0.4472181797027588 0.4084261655807495 0 1.0 0 0.0 0 0.0 0 0.0 -1.478436827659607 -0.018930450081825256 0.21605446934700012 0.0 0.0 1.0 0.5420928001403809 0.4062280058860779 0 1.0 0 0.0 0 0.0 0 0.0 -1.4720665216445923 -0.017522096633911133 0.21605446934700012 0.0 0.0 1.0 0.5462237000465393 0.40869390964508057 0 1.0 0 0.0 0 0.0 0 0.0 -1.6387368440628052 -0.022116869688034058 0.21605446934700012 0.0 0.0 1.0 0.44565656781196594 0.4044862389564514 0 1.0 0 0.0 0 0.0 0 0.0 -1.478436827659607 -0.018930450081825256 0.21605446934700012 0.0 0.0 1.0 0.5420928001403809 0.4062280058860779 0 1.0 0 0.0 0 0.0 0 0.0 -1.6359747648239136 -0.018242090940475464 0.21605446934700012 0.0 0.0 1.0 0.4472181797027588 0.4084261655807495 0 1.0 0 0.0 0 0.0 0 0.0 -1.6387368440628052 -0.022116869688034058 0.21605446934700012 0.0 0.0 1.0 0.44565656781196594 0.4044862389564514 0 1.0 0 0.0 0 0.0 0 0.0 -1.4851137399673462 -0.020372852683067322 0.21605446934700012 0.0 0.0 0.999969482421875 0.5377336740493774 0.4037465453147888 0 1.0 0 0.0 0 0.0 0 0.0 -1.478436827659607 -0.018930450081825256 0.21605446934700012 0.0 0.0 1.0 0.5420928001403809 0.4062280058860779 0 1.0 0 0.0 0 0.0 0 0.0 -1.6387368440628052 -0.022116869688034058 0.21605446934700012 0.0 0.0 1.0 0.44565656781196594 0.4044862389564514 0 1.0 0 0.0 0 0.0 0 0.0 -1.4917467832565308 -0.021829843521118164 0.21605446934700012 0.0 0.0 0.999969482421875 0.5333826541900635 0.40131789445877075 0 1.0 0 0.0 0 0.0 0 0.0 -1.4851137399673462 -0.020372852683067322 0.21605446934700012 0.0 0.0 0.999969482421875 0.5377336740493774 0.4037465453147888 0 1.0 0 0.0 0 0.0 0 0.0 -1.6387368440628052 -0.022116869688034058 0.21605446934700012 0.0 0.0 1.0 0.44565656781196594 0.4044862389564514 0 1.0 0 0.0 0 0.0 0 0.0 -1.4979859590530396 -0.023281976580619812 0.21605446934700012 0.0 0.0 1.0 0.5292789340019226 0.3989958167076111 0 1.0 0 0.0 0 0.0 0 0.0 -1.4917467832565308 -0.021829843521118164 0.21605446934700012 0.0 0.0 0.999969482421875 0.5333826541900635 0.40131789445877075 0 1.0 0 0.0 0 0.0 0 0.0 -1.6413308382034302 -0.026152193546295166 0.21605446934700012 0.0 0.0 0.999969482421875 0.44416937232017517 0.4004032611846924 0 1.0 0 0.0 0 0.0 0 0.0 -1.4979859590530396 -0.023281976580619812 0.21605446934700012 0.0 0.0 1.0 0.5292789340019226 0.3989958167076111 0 1.0 0 0.0 0 0.0 0 0.0 -1.6387368440628052 -0.022116869688034058 0.21605446934700012 0.0 0.0 1.0 0.44565656781196594 0.4044862389564514 0 1.0 0 0.0 0 0.0 0 0.0 -1.6413308382034302 -0.026152193546295166 0.21605446934700012 0.0 0.0 0.999969482421875 0.44416937232017517 0.4004032611846924 0 1.0 0 0.0 0 0.0 0 0.0 -1.503830909729004 -0.024729236960411072 0.21605446934700012 0.0 0.0 1.0 0.5254290699958801 0.39677244424819946 0 1.0 0 0.0 0 0.0 0 0.0 -1.4979859590530396 -0.023281976580619812 0.21605446934700012 0.0 0.0 1.0 0.5292789340019226 0.3989958167076111 0 1.0 0 0.0 0 0.0 0 0.0 -1.6413308382034302 -0.026152193546295166 0.21605446934700012 0.0 0.0 0.999969482421875 0.44416937232017517 0.4004032611846924 0 1.0 0 0.0 0 0.0 0 0.0 -1.509281873703003 -0.026171639561653137 0.21605446934700012 0.0 0.0 1.0 0.5218374133110046 0.39463919401168823 0 1.0 0 0.0 0 0.0 0 0.0 -1.503830909729004 -0.024729236960411072 0.21605446934700012 0.0 0.0 1.0 0.5254290699958801 0.39677244424819946 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252455234527588 -0.030664265155792236 0.21605446934700012 0.0 0.0 1.0 0.5774822235107422 0.39922070503234863 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 0.21605446934700012 0.0 0.0 1.0 0.6335775852203369 0.3873562812805176 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.024926260113716125 0.21605446934700012 0.0 0.0 1.0 0.5769625306129456 0.40624701976776123 0 1.0 0 0.0 0 0.0 0 0.0 -1.6437366008758545 -0.03031519055366516 0.21605446934700012 0.0 0.0 1.0 0.44276612997055054 0.396209716796875 0 1.0 0 0.0 0 0.0 0 0.0 -1.509281873703003 -0.026171639561653137 0.21605446934700012 0.0 0.0 1.0 0.5218374133110046 0.39463919401168823 0 1.0 0 0.0 0 0.0 0 0.0 -1.6413308382034302 -0.026152193546295166 0.21605446934700012 0.0 0.0 0.999969482421875 0.44416937232017517 0.4004032611846924 0 1.0 0 0.0 0 0.0 0 0.0 -1.6437366008758545 -0.03031519055366516 0.21605446934700012 0.0 0.0 1.0 0.44276612997055054 0.396209716796875 0 1.0 0 0.0 0 0.0 0 0.0 -1.5143388509750366 -0.027609169483184814 0.21605446934700012 0.0 0.0 1.0 0.5185067653656006 0.39258718490600586 0 1.0 0 0.0 0 0.0 0 0.0 -1.509281873703003 -0.026171639561653137 0.21605446934700012 0.0 0.0 1.0 0.5218374133110046 0.39463919401168823 0 1.0 0 0.0 0 0.0 0 0.0 -1.6437366008758545 -0.03031519055366516 0.21605446934700012 0.0 0.0 1.0 0.44276612997055054 0.396209716796875 0 1.0 0 0.0 0 0.0 0 0.0 -1.5190016031265259 -0.029041841626167297 0.21605446934700012 0.0 0.0 1.0 0.5154390335083008 0.39060717821121216 0 1.0 0 0.0 0 0.0 0 0.0 -1.5143388509750366 -0.027609169483184814 0.21605446934700012 0.0 0.0 1.0 0.5185067653656006 0.39258718490600586 0 1.0 0 0.0 0 0.0 0 0.0 -1.6437366008758545 -0.03031519055366516 0.21605446934700012 0.0 0.0 1.0 0.44276612997055054 0.396209716796875 0 1.0 0 0.0 0 0.0 0 0.0 -1.5232704877853394 -0.030469655990600586 0.21605446934700012 0.0 0.0 1.0 0.5126344561576843 0.38869017362594604 0 1.0 0 0.0 0 0.0 0 0.0 -1.5190016031265259 -0.029041841626167297 0.21605446934700012 0.0 0.0 1.0 0.5154390335083008 0.39060717821121216 0 1.0 0 0.0 0 0.0 0 0.0 -1.6459330320358276 -0.03457307815551758 0.21605446934700012 0.0 0.0 1.0 0.44145694375038147 0.39193618297576904 0 1.0 0 0.0 0 0.0 0 0.0 -1.5232704877853394 -0.030469655990600586 0.21605446934700012 0.0 0.0 1.0 0.5126344561576843 0.38869017362594604 0 1.0 0 0.0 0 0.0 0 0.0 -1.6437366008758545 -0.03031519055366516 0.21605446934700012 0.0 0.0 1.0 0.44276612997055054 0.396209716796875 0 1.0 0 0.0 0 0.0 0 0.0 -1.6459330320358276 -0.03457307815551758 0.21605446934700012 0.0 0.0 1.0 0.44145694375038147 0.39193618297576904 0 1.0 0 0.0 0 0.0 0 0.0 -1.527145266532898 -0.031892597675323486 0.21605446934700012 0.0 0.0 1.0 0.5100929737091064 0.38682734966278076 0 1.0 0 0.0 0 0.0 0 0.0 -1.5232704877853394 -0.030469655990600586 0.21605446934700012 0.0 0.0 1.0 0.5126344561576843 0.38869017362594604 0 1.0 0 0.0 0 0.0 0 0.0 -1.4253257513046265 -0.03608603775501251 0.21605446934700012 0.0 0.0 1.0 0.5779449343681335 0.3925821781158447 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 0.21605446934700012 0.0 0.0 1.0 0.6335775852203369 0.3873562812805176 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252455234527588 -0.030664265155792236 0.21605446934700012 0.0 0.0 1.0 0.5774822235107422 0.39922070503234863 0 1.0 0 0.0 0 0.0 0 0.0 -1.6459330320358276 -0.03457307815551758 0.21605446934700012 0.0 0.0 1.0 0.44145694375038147 0.39193618297576904 0 1.0 0 0.0 0 0.0 0 0.0 -1.5306259393692017 -0.03331068158149719 0.21605446934700012 0.0 0.0 1.0 0.5078138709068298 0.3850102424621582 0 1.0 0 0.0 0 0.0 0 0.0 -1.527145266532898 -0.031892597675323486 0.21605446934700012 0.0 0.0 1.0 0.5100929737091064 0.38682734966278076 0 1.0 0 0.0 0 0.0 0 0.0 -1.6459330320358276 -0.03457307815551758 0.21605446934700012 0.0 0.0 1.0 0.44145694375038147 0.39193618297576904 0 1.0 0 0.0 0 0.0 0 0.0 -1.5337127447128296 -0.03472389280796051 0.21605446934700012 0.0 0.0 1.0 0.5057958364486694 0.3832308053970337 0 1.0 0 0.0 0 0.0 0 0.0 -1.5306259393692017 -0.03331068158149719 0.21605446934700012 0.0 0.0 1.0 0.5078138709068298 0.3850102424621582 0 1.0 0 0.0 0 0.0 0 0.0 -1.6479202508926392 -0.03892582654953003 0.21605446934700012 0.0 0.0 1.0 0.4402400553226471 0.3875800371170044 0 1.0 0 0.0 0 0.0 0 0.0 -1.5337127447128296 -0.03472389280796051 0.21605446934700012 0.0 0.0 1.0 0.5057958364486694 0.3832308053970337 0 1.0 0 0.0 0 0.0 0 0.0 -1.6459330320358276 -0.03457307815551758 0.21605446934700012 0.0 0.0 1.0 0.44145694375038147 0.39193618297576904 0 1.0 0 0.0 0 0.0 0 0.0 -1.6479202508926392 -0.03892582654953003 0.21605446934700012 0.0 0.0 1.0 0.4402400553226471 0.3875800371170044 0 1.0 0 0.0 0 0.0 0 0.0 -1.536405324935913 -0.036132246255874634 0.21605446934700012 0.0 0.0 1.0 0.5040379166603088 0.3814815282821655 0 1.0 0 0.0 0 0.0 0 0.0 -1.5337127447128296 -0.03472389280796051 0.21605446934700012 0.0 0.0 1.0 0.5057958364486694 0.3832308053970337 0 1.0 0 0.0 0 0.0 0 0.0 -1.4254595041275024 -0.04119160771369934 0.21605446934700012 0.0 0.0 0.999969482421875 0.5783491134643555 0.38633376359939575 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 0.21605446934700012 0.0 0.0 1.0 0.6335775852203369 0.3873562812805176 0 1.0 0 0.0 0 0.0 0 0.0 -1.4253257513046265 -0.03608603775501251 0.21605446934700012 0.0 0.0 1.0 0.5779449343681335 0.3925821781158447 0 1.0 0 0.0 0 0.0 0 0.0 -1.6479202508926392 -0.03892582654953003 0.21605446934700012 0.0 0.0 1.0 0.4402400553226471 0.3875800371170044 0 1.0 0 0.0 0 0.0 0 0.0 -1.5387039184570312 -0.03753572702407837 0.21605446934700012 0.0 0.0 0.999969482421875 0.5025386214256287 0.3797556757926941 0 1.0 0 0.0 0 0.0 0 0.0 -1.536405324935913 -0.036132246255874634 0.21605446934700012 0.0 0.0 1.0 0.5040379166603088 0.3814815282821655 0 1.0 0 0.0 0 0.0 0 0.0 -1.6479202508926392 -0.03892582654953003 0.21605446934700012 0.0 0.0 1.0 0.4402400553226471 0.3875800371170044 0 1.0 0 0.0 0 0.0 0 0.0 -1.5417808294296265 -0.03986351191997528 0.21605446934700012 0.0 0.0 1.0 0.5005322694778442 0.37691736221313477 0 1.0 0 0.0 0 0.0 0 0.0 -1.5387039184570312 -0.03753572702407837 0.21605446934700012 0.0 0.0 0.999969482421875 0.5025386214256287 0.3797556757926941 0 1.0 0 0.0 0 0.0 0 0.0 -1.6496983766555786 -0.043373435735702515 0.21605446934700012 0.0 0.0 1.0 0.4391138553619385 0.38313859701156616 0 1.0 0 0.0 0 0.0 0 0.0 -1.5417808294296265 -0.03986351191997528 0.21605446934700012 0.0 0.0 1.0 0.5005322694778442 0.37691736221313477 0 1.0 0 0.0 0 0.0 0 0.0 -1.6479202508926392 -0.03892582654953003 0.21605446934700012 0.0 0.0 1.0 0.4402400553226471 0.3875800371170044 0 1.0 0 0.0 0 0.0 0 0.0 -1.6496983766555786 -0.043373435735702515 0.21605446934700012 0.0 0.0 1.0 0.4391138553619385 0.38313859701156616 0 1.0 0 0.0 0 0.0 0 0.0 -1.5445903539657593 -0.04229345917701721 0.21605446934700012 0.0 0.0 0.999969482421875 0.4986985921859741 0.373982310295105 0 1.0 0 0.0 0 0.0 0 0.0 -1.5417808294296265 -0.03986351191997528 0.21605446934700012 0.0 0.0 1.0 0.5005322694778442 0.37691736221313477 0 1.0 0 0.0 0 0.0 0 0.0 -1.4256469011306763 -0.04598096013069153 0.21605446934700012 0.0 0.0 1.0 0.5786933898925781 0.3804762363433838 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 0.21605446934700012 0.0 0.0 1.0 0.6335775852203369 0.3873562812805176 0 1.0 0 0.0 0 0.0 0 0.0 -1.4254595041275024 -0.04119160771369934 0.21605446934700012 0.0 0.0 0.999969482421875 0.5783491134643555 0.38633376359939575 0 1.0 0 0.0 0 0.0 0 0.0 -1.6496983766555786 -0.043373435735702515 0.21605446934700012 0.0 0.0 1.0 0.4391138553619385 0.38313859701156616 0 1.0 0 0.0 0 0.0 0 0.0 -1.547132134437561 -0.04482556879520416 0.21605446934700012 0.0 0.0 1.0 0.49703651666641235 0.370947003364563 0 1.0 0 0.0 0 0.0 0 0.0 -1.5445903539657593 -0.04229345917701721 0.21605446934700012 0.0 0.0 0.999969482421875 0.4986985921859741 0.373982310295105 0 1.0 0 0.0 0 0.0 0 0.0 -1.651267170906067 -0.047915905714035034 0.21605446934700012 0.0 0.0 1.0 0.43807706236839294 0.3786091208457947 0 1.0 0 0.0 0 0.0 0 0.0 -1.547132134437561 -0.04482556879520416 0.21605446934700012 0.0 0.0 1.0 0.49703651666641235 0.370947003364563 0 1.0 0 0.0 0 0.0 0 0.0 -1.6496983766555786 -0.043373435735702515 0.21605446934700012 0.0 0.0 1.0 0.4391138553619385 0.38313859701156616 0 1.0 0 0.0 0 0.0 0 0.0 -1.651267170906067 -0.047915905714035034 0.21605446934700012 0.0 0.0 1.0 0.43807706236839294 0.3786091208457947 0 1.0 0 0.0 0 0.0 0 0.0 -1.5494064092636108 -0.04745984077453613 0.21605446934700012 0.0 0.0 0.999969482421875 0.49554482102394104 0.3678079843521118 0 1.0 0 0.0 0 0.0 0 0.0 -1.547132134437561 -0.04482556879520416 0.21605446934700012 0.0 0.0 1.0 0.49703651666641235 0.370947003364563 0 1.0 0 0.0 0 0.0 0 0.0 -1.4258877038955688 -0.05045410990715027 0.21605446934700012 0.0 0.0 1.0 0.5789764523506165 0.3750090003013611 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 0.21605446934700012 0.0 0.0 1.0 0.6335775852203369 0.3873562812805176 0 1.0 0 0.0 0 0.0 0 0.0 -1.4256469011306763 -0.04598096013069153 0.21605446934700012 0.0 0.0 1.0 0.5786933898925781 0.3804762363433838 0 1.0 0 0.0 0 0.0 0 0.0 -1.651267170906067 -0.047915905714035034 0.21605446934700012 0.0 0.0 1.0 0.43807706236839294 0.3786091208457947 0 1.0 0 0.0 0 0.0 0 0.0 -1.5514131784439087 -0.05019627511501312 0.21605446934700012 0.0 0.0 1.0 0.49422264099121094 0.3645620346069336 0 1.0 0 0.0 0 0.0 0 0.0 -1.5494064092636108 -0.04745984077453613 0.21605446934700012 0.0 0.0 0.999969482421875 0.49554482102394104 0.3678079843521118 0 1.0 0 0.0 0 0.0 0 0.0 -1.652626872062683 -0.05255323648452759 0.21605446934700012 0.0 0.0 1.0 0.437128484249115 0.3739891052246094 0 1.0 0 0.0 0 0.0 0 0.0 -1.5514131784439087 -0.05019627511501312 0.21605446934700012 0.0 0.0 1.0 0.49422264099121094 0.3645620346069336 0 1.0 0 0.0 0 0.0 0 0.0 -1.651267170906067 -0.047915905714035034 0.21605446934700012 0.0 0.0 1.0 0.43807706236839294 0.3786091208457947 0 1.0 0 0.0 0 0.0 0 0.0 -1.652626872062683 -0.05255323648452759 0.21605446934700012 0.0 0.0 1.0 0.437128484249115 0.3739891052246094 0 1.0 0 0.0 0 0.0 0 0.0 -1.5531522035598755 -0.05303485691547394 0.21605446934700012 0.0 0.0 1.0 0.49306946992874146 0.36120617389678955 0 1.0 0 0.0 0 0.0 0 0.0 -1.5514131784439087 -0.05019627511501312 0.21605446934700012 0.0 0.0 1.0 0.49422264099121094 0.3645620346069336 0 1.0 0 0.0 0 0.0 0 0.0 -1.4261819124221802 -0.05461104214191437 0.21605446934700012 0.0 0.0 1.0 0.579197108745575 0.3699303865432739 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 0.21605446934700012 0.0 0.0 1.0 0.6335775852203369 0.3873562812805176 0 1.0 0 0.0 0 0.0 0 0.0 -1.4258877038955688 -0.05045410990715027 0.21605446934700012 0.0 0.0 1.0 0.5789764523506165 0.3750090003013611 0 1.0 0 0.0 0 0.0 0 0.0 -1.6537773609161377 -0.057285428047180176 0.21605446934700012 0.0 0.0 0.999969482421875 0.436267226934433 0.3692759871482849 0 1.0 0 0.0 0 0.0 0 0.0 -1.5531522035598755 -0.05303485691547394 0.21605446934700012 0.0 0.0 1.0 0.49306946992874146 0.36120617389678955 0 1.0 0 0.0 0 0.0 0 0.0 -1.652626872062683 -0.05255323648452759 0.21605446934700012 0.0 0.0 1.0 0.437128484249115 0.3739891052246094 0 1.0 0 0.0 0 0.0 0 0.0 -1.6537773609161377 -0.057285428047180176 0.21605446934700012 0.0 0.0 0.999969482421875 0.436267226934433 0.3692759871482849 0 1.0 0 0.0 0 0.0 0 0.0 -1.5546238422393799 -0.05597560107707977 0.21605446934700012 0.0 0.0 0.999969482421875 0.49208465218544006 0.35773760080337524 0 1.0 0 0.0 0 0.0 0 0.0 -1.5531522035598755 -0.05303485691547394 0.21605446934700012 0.0 0.0 1.0 0.49306946992874146 0.36120617389678955 0 1.0 0 0.0 0 0.0 0 0.0 -1.4265297651290894 -0.05845177173614502 0.21605446934700012 0.0 0.0 1.0 0.5793541073799133 0.3652379512786865 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 0.21605446934700012 0.0 0.0 1.0 0.6335775852203369 0.3873562812805176 0 1.0 0 0.0 0 0.0 0 0.0 -1.4261819124221802 -0.05461104214191437 0.21605446934700012 0.0 0.0 1.0 0.579197108745575 0.3699303865432739 0 1.0 0 0.0 0 0.0 0 0.0 -1.6537773609161377 -0.057285428047180176 0.21605446934700012 0.0 0.0 0.999969482421875 0.436267226934433 0.3692759871482849 0 1.0 0 0.0 0 0.0 0 0.0 -1.5558278560638428 -0.05901850759983063 0.21605446934700012 0.0 0.0 1.0 0.4912683963775635 0.3541536331176758 0 1.0 0 0.0 0 0.0 0 0.0 -1.5546238422393799 -0.05597560107707977 0.21605446934700012 0.0 0.0 0.999969482421875 0.49208465218544006 0.35773760080337524 0 1.0 0 0.0 0 0.0 0 0.0 -1.6547187566757202 -0.062112487852573395 0.21605446934700012 0.0 0.0 0.999969482421875 0.4354926347732544 0.3644673228263855 0 1.0 0 0.0 0 0.0 0 0.0 -1.5558278560638428 -0.05901850759983063 0.21605446934700012 0.0 0.0 1.0 0.4912683963775635 0.3541536331176758 0 1.0 0 0.0 0 0.0 0 0.0 -1.6537773609161377 -0.057285428047180176 0.21605446934700012 0.0 0.0 0.999969482421875 0.436267226934433 0.3692759871482849 0 1.0 0 0.0 0 0.0 0 0.0 -1.4269311428070068 -0.06197628378868103 0.21605446934700012 0.0 0.0 0.999969482421875 0.5794463753700256 0.36092859506607056 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 0.21605446934700012 0.0 0.0 1.0 0.6335775852203369 0.3873562812805176 0 1.0 0 0.0 0 0.0 0 0.0 -1.4265297651290894 -0.05845177173614502 0.21605446934700012 0.0 0.0 1.0 0.5793541073799133 0.3652379512786865 0 1.0 0 0.0 0 0.0 0 0.0 -1.6547187566757202 -0.062112487852573395 0.21605446934700012 0.0 0.0 0.999969482421875 0.4354926347732544 0.3644673228263855 0 1.0 0 0.0 0 0.0 0 0.0 -1.5567642450332642 -0.0621635764837265 0.21605446934700012 0.0 0.0 1.0 0.4906209409236908 0.35045212507247925 0 1.0 0 0.0 0 0.0 0 0.0 -1.5558278560638428 -0.05901850759983063 0.21605446934700012 0.0 0.0 1.0 0.4912683963775635 0.3541536331176758 0 1.0 0 0.0 0 0.0 0 0.0 -1.4269311428070068 -0.06197628378868103 0.21605446934700012 0.0 0.0 0.999969482421875 0.5794463753700256 0.36092859506607056 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295642137527466 -0.06969787180423737 0.21605446934700012 0.0 0.0 1.0 0.6346471905708313 0.37915945053100586 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 0.21605446934700012 0.0 0.0 1.0 0.6335775852203369 0.3873562812805176 0 1.0 0 0.0 0 0.0 0 0.0 -1.427385926246643 -0.0651845932006836 0.21605446934700012 0.0 0.0 1.0 0.579473078250885 0.3569989800453186 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295642137527466 -0.06969787180423737 0.21605446934700012 0.0 0.0 1.0 0.6346471905708313 0.37915945053100586 0 1.0 0 0.0 0 0.0 0 0.0 -1.4269311428070068 -0.06197628378868103 0.21605446934700012 0.0 0.0 0.999969482421875 0.5794463753700256 0.36092859506607056 0 1.0 0 0.0 0 0.0 0 0.0 -1.6554508209228516 -0.06703440845012665 0.21605446934700012 0.0 0.0 1.0 0.43480435013771057 0.3595607280731201 0 1.0 0 0.0 0 0.0 0 0.0 -1.5567642450332642 -0.0621635764837265 0.21605446934700012 0.0 0.0 1.0 0.4906209409236908 0.35045212507247925 0 1.0 0 0.0 0 0.0 0 0.0 -1.6547187566757202 -0.062112487852573395 0.21605446934700012 0.0 0.0 0.999969482421875 0.4354926347732544 0.3644673228263855 0 1.0 0 0.0 0 0.0 0 0.0 -1.6554508209228516 -0.06703440845012665 0.21605446934700012 0.0 0.0 1.0 0.43480435013771057 0.3595607280731201 0 1.0 0 0.0 0 0.0 0 0.0 -1.5574332475662231 -0.0654108077287674 0.21605446934700012 0.0 0.0 0.999969482421875 0.49014294147491455 0.3466310501098633 0 1.0 0 0.0 0 0.0 0 0.0 -1.5567642450332642 -0.0621635764837265 0.21605446934700012 0.0 0.0 1.0 0.4906209409236908 0.35045212507247925 0 1.0 0 0.0 0 0.0 0 0.0 -1.4278943538665771 -0.06807669252157211 0.21605446934700012 0.0 0.0 1.0 0.5794331431388855 0.3534455895423889 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295642137527466 -0.06969787180423737 0.21605446934700012 0.0 0.0 1.0 0.6346471905708313 0.37915945053100586 0 1.0 0 0.0 0 0.0 0 0.0 -1.427385926246643 -0.0651845932006836 0.21605446934700012 0.0 0.0 1.0 0.579473078250885 0.3569989800453186 0 1.0 0 0.0 0 0.0 0 0.0 -1.6554508209228516 -0.06703440845012665 0.21605446934700012 0.0 0.0 1.0 0.43480435013771057 0.3595607280731201 0 1.0 0 0.0 0 0.0 0 0.0 -1.557834506034851 -0.06876019388437271 0.21605446934700012 0.0 0.0 1.0 0.4898357689380646 0.3426889181137085 0 1.0 0 0.0 0 0.0 0 0.0 -1.5574332475662231 -0.0654108077287674 0.21605446934700012 0.0 0.0 0.999969482421875 0.49014294147491455 0.3466310501098633 0 1.0 0 0.0 0 0.0 0 0.0 -1.6559737920761108 -0.07205118983983994 0.21605446934700012 0.0 0.0 1.0 0.4342021346092224 0.35455411672592163 0 1.0 0 0.0 0 0.0 0 0.0 -1.557834506034851 -0.06876019388437271 0.21605446934700012 0.0 0.0 1.0 0.4898357689380646 0.3426889181137085 0 1.0 0 0.0 0 0.0 0 0.0 -1.6554508209228516 -0.06703440845012665 0.21605446934700012 0.0 0.0 1.0 0.43480435013771057 0.3595607280731201 0 1.0 0 0.0 0 0.0 0 0.0 -1.42845618724823 -0.07065258175134659 0.21605446934700012 0.0 0.0 0.999969482421875 0.5793260335922241 0.35026490688323975 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295642137527466 -0.06969787180423737 0.21605446934700012 0.0 0.0 1.0 0.6346471905708313 0.37915945053100586 0 1.0 0 0.0 0 0.0 0 0.0 -1.4278943538665771 -0.06807669252157211 0.21605446934700012 0.0 0.0 1.0 0.5794331431388855 0.3534455895423889 0 1.0 0 0.0 0 0.0 0 0.0 -1.6559737920761108 -0.07205118983983994 0.21605446934700012 0.0 0.0 1.0 0.4342021346092224 0.35455411672592163 0 1.0 0 0.0 0 0.0 0 0.0 -1.5579683780670166 -0.07221173495054245 0.21605446934700012 0.0 0.0 0.999969482421875 0.4897008240222931 0.33862465620040894 0 1.0 0 0.0 0 0.0 0 0.0 -1.557834506034851 -0.06876019388437271 0.21605446934700012 0.0 0.0 1.0 0.4898357689380646 0.3426889181137085 0 1.0 0 0.0 0 0.0 0 0.0 -1.42845618724823 -0.07065258175134659 0.21605446934700012 0.0 0.0 0.999969482421875 0.5793260335922241 0.35026490688323975 0 1.0 0 0.0 0 0.0 0 0.0 -1.3294657468795776 -0.07733432948589325 0.21605446934700012 0.0 0.0 1.0 0.635711669921875 0.371421754360199 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295642137527466 -0.06969787180423737 0.21605446934700012 0.0 0.0 1.0 0.6346471905708313 0.37915945053100586 0 1.0 0 0.0 0 0.0 0 0.0 -1.4290716648101807 -0.07291226089000702 0.21605446934700012 0.0 0.0 1.0 0.579150915145874 0.3474537134170532 0 1.0 0 0.0 0 0.0 0 0.0 -1.3294657468795776 -0.07733432948589325 0.21605446934700012 0.0 0.0 1.0 0.635711669921875 0.371421754360199 0 1.0 0 0.0 0 0.0 0 0.0 -1.42845618724823 -0.07065258175134659 0.21605446934700012 0.0 0.0 0.999969482421875 0.5793260335922241 0.35026490688323975 0 1.0 0 0.0 0 0.0 0 0.0 -1.6562875509262085 -0.07716283947229385 0.21605446934700012 0.0 0.0 1.0 0.4336860775947571 0.34944528341293335 0 1.0 0 0.0 0 0.0 0 0.0 -1.5579683780670166 -0.07221173495054245 0.21605446934700012 0.0 0.0 0.999969482421875 0.4897008240222931 0.33862465620040894 0 1.0 0 0.0 0 0.0 0 0.0 -1.6559737920761108 -0.07205118983983994 0.21605446934700012 0.0 0.0 1.0 0.4342021346092224 0.35455411672592163 0 1.0 0 0.0 0 0.0 0 0.0 -1.6562875509262085 -0.07716283947229385 0.21605446934700012 0.0 0.0 1.0 0.4336860775947571 0.34944528341293335 0 1.0 0 0.0 0 0.0 0 0.0 -1.557861328125 -0.07561706751585007 0.21605446934700012 0.0 0.0 1.0 0.489724725484848 0.33461397886276245 0 1.0 0 0.0 0 0.0 0 0.0 -1.5579683780670166 -0.07221173495054245 0.21605446934700012 0.0 0.0 0.999969482421875 0.4897008240222931 0.33862465620040894 0 1.0 0 0.0 0 0.0 0 0.0 -1.4300907850265503 -0.07608164101839066 0.21605446934700012 0.0 0.0 1.0 0.5788003206253052 0.3434860110282898 0 1.0 0 0.0 0 0.0 0 0.0 -1.3294657468795776 -0.07733432948589325 0.21605446934700012 0.0 0.0 1.0 0.635711669921875 0.371421754360199 0 1.0 0 0.0 0 0.0 0 0.0 -1.4290716648101807 -0.07291226089000702 0.21605446934700012 0.0 0.0 1.0 0.579150915145874 0.3474537134170532 0 1.0 0 0.0 0 0.0 0 0.0 -1.6562875509262085 -0.07716283947229385 0.21605446934700012 0.0 0.0 1.0 0.4336860775947571 0.34944528341293335 0 1.0 0 0.0 0 0.0 0 0.0 -1.5575402975082397 -0.07894456386566162 0.21605446934700012 0.0 0.0 1.0 0.48989224433898926 0.3306938409805298 0 1.0 0 0.0 0 0.0 0 0.0 -1.557861328125 -0.07561706751585007 0.21605446934700012 0.0 0.0 1.0 0.489724725484848 0.33461397886276245 0 1.0 0 0.0 0 0.0 0 0.0 -1.431280255317688 -0.07916833460330963 0.21605446934700012 0.0 0.0 1.0 0.5783247351646423 0.3395894765853882 0 1.0 0 0.0 0 0.0 0 0.0 -1.3294657468795776 -0.07733432948589325 0.21605446934700012 0.0 0.0 1.0 0.635711669921875 0.371421754360199 0 1.0 0 0.0 0 0.0 0 0.0 -1.4300907850265503 -0.07608164101839066 0.21605446934700012 0.0 0.0 1.0 0.5788003206253052 0.3434860110282898 0 1.0 0 0.0 0 0.0 0 0.0 -1.656392216682434 -0.0823693498969078 0.21605446934700012 0.0 0.0 1.0 0.43325650691986084 0.34423261880874634 0 1.0 0 0.0 0 0.0 0 0.0 -1.5575402975082397 -0.07894456386566162 0.21605446934700012 0.0 0.0 1.0 0.48989224433898926 0.3306938409805298 0 1.0 0 0.0 0 0.0 0 0.0 -1.6562875509262085 -0.07716283947229385 0.21605446934700012 0.0 0.0 1.0 0.4336860775947571 0.34944528341293335 0 1.0 0 0.0 0 0.0 0 0.0 -1.431280255317688 -0.07916833460330963 0.21605446934700012 0.0 0.0 1.0 0.5783247351646423 0.3395894765853882 0 1.0 0 0.0 0 0.0 0 0.0 -1.3293014764785767 -0.08461322635412216 0.21605446934700012 0.0 0.0 1.0 0.6367695331573486 0.36414480209350586 0 1.0 0 0.0 0 0.0 0 0.0 -1.3294657468795776 -0.07733432948589325 0.21605446934700012 0.0 0.0 1.0 0.635711669921875 0.371421754360199 0 1.0 0 0.0 0 0.0 0 0.0 -1.656392216682434 -0.0823693498969078 0.21605446934700012 0.0 0.0 1.0 0.43325650691986084 0.34423261880874634 0 1.0 0 0.0 0 0.0 0 0.0 -1.5570050477981567 -0.08219422399997711 0.21605446934700012 0.0 0.0 1.0 0.4902057349681854 0.32686203718185425 0 1.0 0 0.0 0 0.0 0 0.0 -1.5575402975082397 -0.07894456386566162 0.21605446934700012 0.0 0.0 1.0 0.48989224433898926 0.3306938409805298 0 1.0 0 0.0 0 0.0 0 0.0 -1.4326399564743042 -0.08217232674360275 0.21605446934700012 0.0 0.0 1.0 0.5777221322059631 0.3357633352279663 0 1.0 0 0.0 0 0.0 0 0.0 -1.3293014764785767 -0.08461322635412216 0.21605446934700012 0.0 0.0 1.0 0.6367695331573486 0.36414480209350586 0 1.0 0 0.0 0 0.0 0 0.0 -1.431280255317688 -0.07916833460330963 0.21605446934700012 0.0 0.0 1.0 0.5783247351646423 0.3395894765853882 0 1.0 0 0.0 0 0.0 0 0.0 -1.434169888496399 -0.08509361743927002 0.21605446934700012 0.0 0.0 1.0 0.5769903659820557 0.3320075273513794 0 1.0 0 0.0 0 0.0 0 0.0 -1.3293014764785767 -0.08461322635412216 0.21605446934700012 0.0 0.0 1.0 0.6367695331573486 0.36414480209350586 0 1.0 0 0.0 0 0.0 0 0.0 -1.4326399564743042 -0.08217232674360275 0.21605446934700012 0.0 0.0 1.0 0.5777221322059631 0.3357633352279663 0 1.0 0 0.0 0 0.0 0 0.0 -1.656392216682434 -0.0823693498969078 0.21605446934700012 0.0 0.0 1.0 0.43325650691986084 0.34423261880874634 0 1.0 0 0.0 0 0.0 0 0.0 -1.5562559366226196 -0.08536604791879654 0.21605446934700012 0.0 0.0 1.0 0.49066728353500366 0.32311660051345825 0 1.0 0 0.0 0 0.0 0 0.0 -1.5570050477981567 -0.08219422399997711 0.21605446934700012 0.0 0.0 1.0 0.4902057349681854 0.32686203718185425 0 1.0 0 0.0 0 0.0 0 0.0 -1.6561623811721802 -0.09019431471824646 0.21605446934700012 0.0 0.0 0.999969482421875 0.4327855110168457 0.3363778591156006 0 1.0 0 0.0 0 0.0 0 0.0 -1.5562559366226196 -0.08536604791879654 0.21605446934700012 0.0 0.0 1.0 0.49066728353500366 0.32311660051345825 0 1.0 0 0.0 0 0.0 0 0.0 -1.656392216682434 -0.0823693498969078 0.21605446934700012 0.0 0.0 1.0 0.43325650691986084 0.34423261880874634 0 1.0 0 0.0 0 0.0 0 0.0 -1.434169888496399 -0.08509361743927002 0.21605446934700012 0.0 0.0 1.0 0.5769903659820557 0.3320075273513794 0 1.0 0 0.0 0 0.0 0 0.0 -1.3290716409683228 -0.0915345624089241 0.21605446934700012 0.0 0.0 1.0 0.6378192901611328 0.35732704401016235 0 1.0 0 0.0 0 0.0 0 0.0 -1.3293014764785767 -0.08461322635412216 0.21605446934700012 0.0 0.0 1.0 0.6367695331573486 0.36414480209350586 0 1.0 0 0.0 0 0.0 0 0.0 -1.4358701705932617 -0.08793220669031143 0.21605446934700012 0.0 0.0 1.0 0.5761270523071289 0.3283221125602722 0 1.0 0 0.0 0 0.0 0 0.0 -1.3290716409683228 -0.0915345624089241 0.21605446934700012 0.0 0.0 1.0 0.6378192901611328 0.35732704401016235 0 1.0 0 0.0 0 0.0 0 0.0 -1.434169888496399 -0.08509361743927002 0.21605446934700012 0.0 0.0 1.0 0.5769903659820557 0.3320075273513794 0 1.0 0 0.0 0 0.0 0 0.0 -1.6561623811721802 -0.09019431471824646 0.21605446934700012 0.0 0.0 0.999969482421875 0.4327855110168457 0.3363778591156006 0 1.0 0 0.0 0 0.0 0 0.0 -1.5552927255630493 -0.0884600356221199 0.21605446934700012 0.0 0.0 1.0 0.49127960205078125 0.31945616006851196 0 1.0 0 0.0 0 0.0 0 0.0 -1.5562559366226196 -0.08536604791879654 0.21605446934700012 0.0 0.0 1.0 0.49066728353500366 0.32311660051345825 0 1.0 0 0.0 0 0.0 0 0.0 -1.437740683555603 -0.09068809449672699 0.21605446934700012 0.0 0.0 0.999969482421875 0.5751299858093262 0.32470762729644775 0 1.0 0 0.0 0 0.0 0 0.0 -1.3290716409683228 -0.0915345624089241 0.21605446934700012 0.0 0.0 1.0 0.6378192901611328 0.35732704401016235 0 1.0 0 0.0 0 0.0 0 0.0 -1.4358701705932617 -0.08793220669031143 0.21605446934700012 0.0 0.0 1.0 0.5761270523071289 0.3283221125602722 0 1.0 0 0.0 0 0.0 0 0.0 -1.6561623811721802 -0.09019431471824646 0.21605446934700012 0.0 0.0 0.999969482421875 0.4327855110168457 0.3363778591156006 0 1.0 0 0.0 0 0.0 0 0.0 -1.5541154146194458 -0.0914761871099472 0.21605446934700012 0.0 0.0 1.0 0.4920453131198883 0.3158797025680542 0 1.0 0 0.0 0 0.0 0 0.0 -1.5552927255630493 -0.0884600356221199 0.21605446934700012 0.0 0.0 1.0 0.49127960205078125 0.31945616006851196 0 1.0 0 0.0 0 0.0 0 0.0 -1.655472755432129 -0.09779063612222672 0.21605446934700012 0.0 0.0 0.999969482421875 0.43254271149635315 0.3287145495414734 0 1.0 0 0.0 0 0.0 0 0.0 -1.5541154146194458 -0.0914761871099472 0.21605446934700012 0.0 0.0 1.0 0.4920453131198883 0.3158797025680542 0 1.0 0 0.0 0 0.0 0 0.0 -1.6561623811721802 -0.09019431471824646 0.21605446934700012 0.0 0.0 0.999969482421875 0.4327855110168457 0.3363778591156006 0 1.0 0 0.0 0 0.0 0 0.0 -1.4397814273834229 -0.0933612808585167 0.21605446934700012 0.0 0.0 1.0 0.5739966630935669 0.32116496562957764 0 1.0 0 0.0 0 0.0 0 0.0 -1.3290716409683228 -0.0915345624089241 0.21605446934700012 0.0 0.0 1.0 0.6378192901611328 0.35732704401016235 0 1.0 0 0.0 0 0.0 0 0.0 -1.437740683555603 -0.09068809449672699 0.21605446934700012 0.0 0.0 0.999969482421875 0.5751299858093262 0.32470762729644775 0 1.0 0 0.0 0 0.0 0 0.0 -1.655472755432129 -0.09779063612222672 0.21605446934700012 0.0 0.0 0.999969482421875 0.43254271149635315 0.3287145495414734 0 1.0 0 0.0 0 0.0 0 0.0 -1.5527241230010986 -0.09441450238227844 0.21605446934700012 0.0 0.0 0.999969482421875 0.4929672181606293 0.31238698959350586 0 1.0 0 0.0 0 0.0 0 0.0 -1.5541154146194458 -0.0914761871099472 0.21605446934700012 0.0 0.0 1.0 0.4920453131198883 0.3158797025680542 0 1.0 0 0.0 0 0.0 0 0.0 -1.4397814273834229 -0.0933612808585167 0.21605446934700012 0.0 0.0 1.0 0.5739966630935669 0.32116496562957764 0 1.0 0 0.0 0 0.0 0 0.0 -1.328776240348816 -0.09809833765029907 0.21605446934700012 0.0 0.0 1.0 0.6388593912124634 0.3509647846221924 0 1.0 0 0.0 0 0.0 0 0.0 -1.3290716409683228 -0.0915345624089241 0.21605446934700012 0.0 0.0 1.0 0.6378192901611328 0.35732704401016235 0 1.0 0 0.0 0 0.0 0 0.0 -1.4419924020767212 -0.09595176577568054 0.21605446934700012 0.0 0.0 1.0 0.5727245807647705 0.31769561767578125 0 1.0 0 0.0 0 0.0 0 0.0 -1.328776240348816 -0.09809833765029907 0.21605446934700012 0.0 0.0 1.0 0.6388593912124634 0.3509647846221924 0 1.0 0 0.0 0 0.0 0 0.0 -1.4397814273834229 -0.0933612808585167 0.21605446934700012 0.0 0.0 1.0 0.5739966630935669 0.32116496562957764 0 1.0 0 0.0 0 0.0 0 0.0 -1.655472755432129 -0.09779063612222672 0.21605446934700012 0.0 0.0 0.999969482421875 0.43254271149635315 0.3287145495414734 0 1.0 0 0.0 0 0.0 0 0.0 -1.5511187314987183 -0.09727498143911362 0.21605446934700012 0.0 0.0 0.999969482421875 0.4940483868122101 0.3089780807495117 0 1.0 0 0.0 0 0.0 0 0.0 -1.5527241230010986 -0.09441450238227844 0.21605446934700012 0.0 0.0 0.999969482421875 0.4929672181606293 0.31238698959350586 0 1.0 0 0.0 0 0.0 0 0.0 -1.4443737268447876 -0.09845954924821854 0.21605446934700012 0.0 0.0 1.0 0.5713112354278564 0.3143012523651123 0 1.0 0 0.0 0 0.0 0 0.0 -1.328776240348816 -0.09809833765029907 0.21605446934700012 0.0 0.0 1.0 0.6388593912124634 0.3509647846221924 0 1.0 0 0.0 0 0.0 0 0.0 -1.4419924020767212 -0.09595176577568054 0.21605446934700012 0.0 0.0 1.0 0.5727245807647705 0.31769561767578125 0 1.0 0 0.0 0 0.0 0 0.0 -1.655472755432129 -0.09779063612222672 0.21605446934700012 0.0 0.0 0.999969482421875 0.43254271149635315 0.3287145495414734 0 1.0 0 0.0 0 0.0 0 0.0 -1.5492993593215942 -0.10005762428045273 0.21605446934700012 0.0 0.0 1.0 0.4952918291091919 0.30565404891967773 0 1.0 0 0.0 0 0.0 0 0.0 -1.5511187314987183 -0.09727498143911362 0.21605446934700012 0.0 0.0 0.999969482421875 0.4940483868122101 0.3089780807495117 0 1.0 0 0.0 0 0.0 0 0.0 -1.6543234586715698 -0.10515831410884857 0.21605446934700012 0.0 0.0 1.0 0.43253403902053833 0.32122570276260376 0 1.0 0 0.0 0 0.0 0 0.0 -1.5492993593215942 -0.10005762428045273 0.21605446934700012 0.0 0.0 1.0 0.4952918291091919 0.30565404891967773 0 1.0 0 0.0 0 0.0 0 0.0 -1.655472755432129 -0.09779063612222672 0.21605446934700012 0.0 0.0 0.999969482421875 0.43254271149635315 0.3287145495414734 0 1.0 0 0.0 0 0.0 0 0.0 -1.4443737268447876 -0.09845954924821854 0.21605446934700012 0.0 0.0 1.0 0.5713112354278564 0.3143012523651123 0 1.0 0 0.0 0 0.0 0 0.0 -1.328415036201477 -0.10430455207824707 0.21605446934700012 0.0 0.0 1.0 0.6398884057998657 0.34505248069763184 0 1.0 0 0.0 0 0.0 0 0.0 -1.328776240348816 -0.09809833765029907 0.21605446934700012 0.0 0.0 1.0 0.6388593912124634 0.3509647846221924 0 1.0 0 0.0 0 0.0 0 0.0 -1.4469252824783325 -0.10088463127613068 0.21605446934700012 0.0 0.0 1.0 0.5697541236877441 0.31098443269729614 0 1.0 0 0.0 0 0.0 0 0.0 -1.328415036201477 -0.10430455207824707 0.21605446934700012 0.0 0.0 1.0 0.6398884057998657 0.34505248069763184 0 1.0 0 0.0 0 0.0 0 0.0 -1.4443737268447876 -0.09845954924821854 0.21605446934700012 0.0 0.0 1.0 0.5713112354278564 0.3143012523651123 0 1.0 0 0.0 0 0.0 0 0.0 -1.6543234586715698 -0.10515831410884857 0.21605446934700012 0.0 0.0 1.0 0.43253403902053833 0.32122570276260376 0 1.0 0 0.0 0 0.0 0 0.0 -1.547265887260437 -0.10276243090629578 0.21605446934700012 0.0 0.0 1.0 0.49670082330703735 0.30241620540618896 0 1.0 0 0.0 0 0.0 0 0.0 -1.5492993593215942 -0.10005762428045273 0.21605446934700012 0.0 0.0 1.0 0.4952918291091919 0.30565404891967773 0 1.0 0 0.0 0 0.0 0 0.0 -1.4496471881866455 -0.10322701185941696 0.21605446934700012 0.0 0.0 0.999969482421875 0.5680505633354187 0.30774790048599243 0 1.0 0 0.0 0 0.0 0 0.0 -1.328415036201477 -0.10430455207824707 0.21605446934700012 0.0 0.0 1.0 0.6398884057998657 0.34505248069763184 0 1.0 0 0.0 0 0.0 0 0.0 -1.4469252824783325 -0.10088463127613068 0.21605446934700012 0.0 0.0 1.0 0.5697541236877441 0.31098443269729614 0 1.0 0 0.0 0 0.0 0 0.0 -1.6543234586715698 -0.10515831410884857 0.21605446934700012 0.0 0.0 1.0 0.43253403902053833 0.32122570276260376 0 1.0 0 0.0 0 0.0 0 0.0 -1.5450183153152466 -0.10538940131664276 0.21605446934700012 0.0 0.0 1.0 0.4982786476612091 0.2992667555809021 0 1.0 0 0.0 0 0.0 0 0.0 -1.547265887260437 -0.10276243090629578 0.21605446934700012 0.0 0.0 1.0 0.49670082330703735 0.30241620540618896 0 1.0 0 0.0 0 0.0 0 0.0 -1.452539324760437 -0.10548669099807739 0.21605446934700012 0.0 0.0 1.0 0.5661982893943787 0.3045951724052429 0 1.0 0 0.0 0 0.0 0 0.0 -1.328415036201477 -0.10430455207824707 0.21605446934700012 0.0 0.0 1.0 0.6398884057998657 0.34505248069763184 0 1.0 0 0.0 0 0.0 0 0.0 -1.4496471881866455 -0.10322701185941696 0.21605446934700012 0.0 0.0 0.999969482421875 0.5680505633354187 0.30774790048599243 0 1.0 0 0.0 0 0.0 0 0.0 -1.452539324760437 -0.10548669099807739 0.21605446934700012 0.0 0.0 1.0 0.5661982893943787 0.3045951724052429 0 1.0 0 0.0 0 0.0 0 0.0 -1.3279880285263062 -0.1101532131433487 0.21605446934700012 0.0 0.0 0.999969482421875 0.64090496301651 0.3395833373069763 0 1.0 0 0.0 0 0.0 0 0.0 -1.328415036201477 -0.10430455207824707 0.21605446934700012 0.0 0.0 1.0 0.6398884057998657 0.34505248069763184 0 1.0 0 0.0 0 0.0 0 0.0 -1.6527143716812134 -0.11229734867811203 0.21605446934700012 0.0 0.0 1.0 0.43276700377464294 0.3138952851295471 0 1.0 0 0.0 0 0.0 0 0.0 -1.5450183153152466 -0.10538940131664276 0.21605446934700012 0.0 0.0 1.0 0.4982786476612091 0.2992667555809021 0 1.0 0 0.0 0 0.0 0 0.0 -1.6543234586715698 -0.10515831410884857 0.21605446934700012 0.0 0.0 1.0 0.43253403902053833 0.32122570276260376 0 1.0 0 0.0 0 0.0 0 0.0 -1.6527143716812134 -0.11229734867811203 0.21605446934700012 0.0 0.0 1.0 0.43276700377464294 0.3138952851295471 0 1.0 0 0.0 0 0.0 0 0.0 -1.5425567626953125 -0.10793852806091309 0.21605446934700012 0.0 0.0 1.0 0.5000284910202026 0.29620879888534546 0 1.0 0 0.0 0 0.0 0 0.0 -1.5450183153152466 -0.10538940131664276 0.21605446934700012 0.0 0.0 1.0 0.4982786476612091 0.2992667555809021 0 1.0 0 0.0 0 0.0 0 0.0 -1.4565843343734741 -0.10828392952680588 0.21605446934700012 0.0 0.0 1.0 0.5635403990745544 0.3006412386894226 0 1.0 0 0.0 0 0.0 0 0.0 -1.3279880285263062 -0.1101532131433487 0.21605446934700012 0.0 0.0 0.999969482421875 0.64090496301651 0.3395833373069763 0 1.0 0 0.0 0 0.0 0 0.0 -1.452539324760437 -0.10548669099807739 0.21605446934700012 0.0 0.0 1.0 0.5661982893943787 0.3045951724052429 0 1.0 0 0.0 0 0.0 0 0.0 -1.6527143716812134 -0.11229734867811203 0.21605446934700012 0.0 0.0 1.0 0.43276700377464294 0.3138952851295471 0 1.0 0 0.0 0 0.0 0 0.0 -1.539929747581482 -0.11034414917230606 0.21605446934700012 0.0 0.0 1.0 0.5019184947013855 0.2933226227760315 0 1.0 0 0.0 0 0.0 0 0.0 -1.5425567626953125 -0.10793852806091309 0.21605446934700012 0.0 0.0 1.0 0.5000284910202026 0.29620879888534546 0 1.0 0 0.0 0 0.0 0 0.0 -1.4606634378433228 -0.11083792895078659 0.21605446934700012 0.0 0.0 1.0 0.5607984662055969 0.2970088720321655 0 1.0 0 0.0 0 0.0 0 0.0 -1.3279880285263062 -0.1101532131433487 0.21605446934700012 0.0 0.0 0.999969482421875 0.64090496301651 0.3395833373069763 0 1.0 0 0.0 0 0.0 0 0.0 -1.4565843343734741 -0.10828392952680588 0.21605446934700012 0.0 0.0 1.0 0.5635403990745544 0.3006412386894226 0 1.0 0 0.0 0 0.0 0 0.0 -1.4606634378433228 -0.11083792895078659 0.21605446934700012 0.0 0.0 1.0 0.5607984662055969 0.2970088720321655 0 1.0 0 0.0 0 0.0 0 0.0 -1.3274954557418823 -0.11564431339502335 0.21605446934700012 0.0 0.0 0.999969482421875 0.6419074535369873 0.33454930782318115 0 1.0 0 0.0 0 0.0 0 0.0 -1.3279880285263062 -0.1101532131433487 0.21605446934700012 0.0 0.0 0.999969482421875 0.64090496301651 0.3395833373069763 0 1.0 0 0.0 0 0.0 0 0.0 -1.6527143716812134 -0.11229734867811203 0.21605446934700012 0.0 0.0 1.0 0.43276700377464294 0.3138952851295471 0 1.0 0 0.0 0 0.0 0 0.0 -1.5371860265731812 -0.1125405877828598 0.21605446934700012 0.0 0.0 1.0 0.503914475440979 0.29068702459335327 0 1.0 0 0.0 0 0.0 0 0.0 -1.539929747581482 -0.11034414917230606 0.21605446934700012 0.0 0.0 1.0 0.5019184947013855 0.2933226227760315 0 1.0 0 0.0 0 0.0 0 0.0 -1.4647765159606934 -0.11314868927001953 0.21605446934700012 0.0 0.0 1.0 0.5579749345779419 0.29369932413101196 0 1.0 0 0.0 0 0.0 0 0.0 -1.3274954557418823 -0.11564431339502335 0.21605446934700012 0.0 0.0 0.999969482421875 0.6419074535369873 0.33454930782318115 0 1.0 0 0.0 0 0.0 0 0.0 -1.4606634378433228 -0.11083792895078659 0.21605446934700012 0.0 0.0 1.0 0.5607984662055969 0.2970088720321655 0 1.0 0 0.0 0 0.0 0 0.0 -1.6506456136703491 -0.11920773983001709 0.21605446934700012 0.0 0.0 1.0 0.433250367641449 0.3067089319229126 0 1.0 0 0.0 0 0.0 0 0.0 -1.5371860265731812 -0.1125405877828598 0.21605446934700012 0.0 0.0 1.0 0.503914475440979 0.29068702459335327 0 1.0 0 0.0 0 0.0 0 0.0 -1.6527143716812134 -0.11229734867811203 0.21605446934700012 0.0 0.0 1.0 0.43276700377464294 0.3138952851295471 0 1.0 0 0.0 0 0.0 0 0.0 -1.6506456136703491 -0.11920773983001709 0.21605446934700012 0.0 0.0 1.0 0.433250367641449 0.3067089319229126 0 1.0 0 0.0 0 0.0 0 0.0 -1.5343255996704102 -0.11452784389257431 0.21605446934700012 0.0 0.0 0.999969482421875 0.5060164332389832 0.2883031964302063 0 1.0 0 0.0 0 0.0 0 0.0 -1.5371860265731812 -0.1125405877828598 0.21605446934700012 0.0 0.0 1.0 0.503914475440979 0.29068702459335327 0 1.0 0 0.0 0 0.0 0 0.0 -1.4689236879348755 -0.1152162104845047 0.21605446934700012 0.0 0.0 1.0 0.5550726652145386 0.2907138466835022 0 1.0 0 0.0 0 0.0 0 0.0 -1.3274954557418823 -0.11564431339502335 0.21605446934700012 0.0 0.0 0.999969482421875 0.6419074535369873 0.33454930782318115 0 1.0 0 0.0 0 0.0 0 0.0 -1.4647765159606934 -0.11314868927001953 0.21605446934700012 0.0 0.0 1.0 0.5579749345779419 0.29369932413101196 0 1.0 0 0.0 0 0.0 0 0.0 -1.6506456136703491 -0.11920773983001709 0.21605446934700012 0.0 0.0 1.0 0.433250367641449 0.3067089319229126 0 1.0 0 0.0 0 0.0 0 0.0 -1.5313483476638794 -0.11630591750144958 0.21605446934700012 0.0 0.0 1.0 0.5082241296768188 0.2861729860305786 0 1.0 0 0.0 0 0.0 0 0.0 -1.5343255996704102 -0.11452784389257431 0.21605446934700012 0.0 0.0 0.999969482421875 0.5060164332389832 0.2883031964302063 0 1.0 0 0.0 0 0.0 0 0.0 -1.4731050729751587 -0.1170404925942421 0.21605446934700012 0.0 0.0 1.0 0.5520947575569153 0.2880534529685974 0 1.0 0 0.0 0 0.0 0 0.0 -1.3274954557418823 -0.11564431339502335 0.21605446934700012 0.0 0.0 0.999969482421875 0.6419074535369873 0.33454930782318115 0 1.0 0 0.0 0 0.0 0 0.0 -1.4689236879348755 -0.1152162104845047 0.21605446934700012 0.0 0.0 1.0 0.5550726652145386 0.2907138466835022 0 1.0 0 0.0 0 0.0 0 0.0 -1.4731050729751587 -0.1170404925942421 0.21605446934700012 0.0 0.0 1.0 0.5520947575569153 0.2880534529685974 0 1.0 0 0.0 0 0.0 0 0.0 -1.3269373178482056 -0.12077785283327103 0.21605446934700012 0.0 0.0 0.999969482421875 0.6428943872451782 0.32994168996810913 0 1.0 0 0.0 0 0.0 0 0.0 -1.3274954557418823 -0.11564431339502335 0.21605446934700012 0.0 0.0 0.999969482421875 0.6419074535369873 0.33454930782318115 0 1.0 0 0.0 0 0.0 0 0.0 -1.6506456136703491 -0.11920773983001709 0.21605446934700012 0.0 0.0 1.0 0.433250367641449 0.3067089319229126 0 1.0 0 0.0 0 0.0 0 0.0 -1.5282543897628784 -0.11787480115890503 0.21605446934700012 0.0 0.0 1.0 0.5105367302894592 0.2842988967895508 0 1.0 0 0.0 0 0.0 0 0.0 -1.5313483476638794 -0.11630591750144958 0.21605446934700012 0.0 0.0 1.0 0.5082241296768188 0.2861729860305786 0 1.0 0 0.0 0 0.0 0 0.0 -1.4773203134536743 -0.11862154304981232 0.21605446934700012 0.0 0.0 1.0 0.5490454435348511 0.2857193946838379 0 1.0 0 0.0 0 0.0 0 0.0 -1.3269373178482056 -0.12077785283327103 0.21605446934700012 0.0 0.0 0.999969482421875 0.6428943872451782 0.32994168996810913 0 1.0 0 0.0 0 0.0 0 0.0 -1.4731050729751587 -0.1170404925942421 0.21605446934700012 0.0 0.0 1.0 0.5520947575569153 0.2880534529685974 0 1.0 0 0.0 0 0.0 0 0.0 -1.6506456136703491 -0.11920773983001709 0.21605446934700012 0.0 0.0 1.0 0.433250367641449 0.3067089319229126 0 1.0 0 0.0 0 0.0 0 0.0 -1.5250436067581177 -0.11923450231552124 0.21605446934700012 0.0 0.0 0.999969482421875 0.5129532814025879 0.28268343210220337 0 1.0 0 0.0 0 0.0 0 0.0 -1.5282543897628784 -0.11787480115890503 0.21605446934700012 0.0 0.0 1.0 0.5105367302894592 0.2842988967895508 0 1.0 0 0.0 0 0.0 0 0.0 -1.4815696477890015 -0.11995935440063477 0.21605446934700012 0.0 -3.0518509447574615e-05 0.999969482421875 0.5459287166595459 0.2837129235267639 0 1.0 0 0.0 0 0.0 0 0.0 -1.3269373178482056 -0.12077785283327103 0.21605446934700012 0.0 0.0 0.999969482421875 0.6428943872451782 0.32994168996810913 0 1.0 0 0.0 0 0.0 0 0.0 -1.4773203134536743 -0.11862154304981232 0.21605446934700012 0.0 0.0 1.0 0.5490454435348511 0.2857193946838379 0 1.0 0 0.0 0 0.0 0 0.0 -1.648117184638977 -0.12588948011398315 0.21605446934700012 0.0 0.0 1.0 0.4339945912361145 0.2996535301208496 0 1.0 0 0.0 0 0.0 0 0.0 -1.5250436067581177 -0.11923450231552124 0.21605446934700012 0.0 0.0 0.999969482421875 0.5129532814025879 0.28268343210220337 0 1.0 0 0.0 0 0.0 0 0.0 -1.6506456136703491 -0.11920773983001709 0.21605446934700012 0.0 0.0 1.0 0.433250367641449 0.3067089319229126 0 1.0 0 0.0 0 0.0 0 0.0 -1.648117184638977 -0.12588948011398315 0.21605446934700012 0.0 0.0 1.0 0.4339945912361145 0.2996535301208496 0 1.0 0 0.0 0 0.0 0 0.0 -1.5217162370681763 -0.12038502097129822 0.21605446934700012 0.0 0.0 1.0 0.5154720544815063 0.28133004903793335 0 1.0 0 0.0 0 0.0 0 0.0 -1.5250436067581177 -0.11923450231552124 0.21605446934700012 0.0 0.0 0.999969482421875 0.5129532814025879 0.28268343210220337 0 1.0 0 0.0 0 0.0 0 0.0 -1.4858530759811401 -0.12105392664670944 0.21605446934700012 0.0 0.0 1.0 0.5427493453025818 0.28203511238098145 0 1.0 0 0.0 0 0.0 0 0.0 -1.3269373178482056 -0.12077785283327103 0.21605446934700012 0.0 0.0 0.999969482421875 0.6428943872451782 0.32994168996810913 0 1.0 0 0.0 0 0.0 0 0.0 -1.4815696477890015 -0.11995935440063477 0.21605446934700012 0.0 -3.0518509447574615e-05 0.999969482421875 0.5459287166595459 0.2837129235267639 0 1.0 0 0.0 0 0.0 0 0.0 -1.648117184638977 -0.12588948011398315 0.21605446934700012 0.0 0.0 1.0 0.4339945912361145 0.2996535301208496 0 1.0 0 0.0 0 0.0 0 0.0 -1.5182719230651855 -0.12132634967565536 0.21605446934700012 0.0 0.0 0.999969482421875 0.5180913805961609 0.28024226427078247 0 1.0 0 0.0 0 0.0 0 0.0 -1.5217162370681763 -0.12038502097129822 0.21605446934700012 0.0 0.0 1.0 0.5154720544815063 0.28133004903793335 0 1.0 0 0.0 0 0.0 0 0.0 -1.4858530759811401 -0.12105392664670944 0.21605446934700012 0.0 0.0 1.0 0.5427493453025818 0.28203511238098145 0 1.0 0 0.0 0 0.0 0 0.0 -1.3263133764266968 -0.12555383145809174 0.21605446934700012 0.0 0.0 0.999969482421875 0.6438645124435425 0.3257516026496887 0 1.0 0 0.0 0 0.0 0 0.0 -1.3269373178482056 -0.12077785283327103 0.21605446934700012 0.0 0.0 0.999969482421875 0.6428943872451782 0.32994168996810913 0 1.0 0 0.0 0 0.0 0 0.0 -1.4901705980300903 -0.12190525233745575 0.21605446934700012 0.0 0.0 1.0 0.5395126342773438 0.2806873917579651 0 1.0 0 0.0 0 0.0 0 0.0 -1.3263133764266968 -0.12555383145809174 0.21605446934700012 0.0 0.0 0.999969482421875 0.6438645124435425 0.3257516026496887 0 1.0 0 0.0 0 0.0 0 0.0 -1.4858530759811401 -0.12105392664670944 0.21605446934700012 0.0 0.0 1.0 0.5427493453025818 0.28203511238098145 0 1.0 0 0.0 0 0.0 0 0.0 -1.648117184638977 -0.12588948011398315 0.21605446934700012 0.0 0.0 1.0 0.4339945912361145 0.2996535301208496 0 1.0 0 0.0 0 0.0 0 0.0 -1.5147109031677246 -0.12205849587917328 0.21605446934700012 0.0 0.0 1.0 0.5208086371421814 0.27942436933517456 0 1.0 0 0.0 0 0.0 0 0.0 -1.5182719230651855 -0.12132634967565536 0.21605446934700012 0.0 0.0 0.999969482421875 0.5180913805961609 0.28024226427078247 0 1.0 0 0.0 0 0.0 0 0.0 -1.494522213935852 -0.12251335382461548 0.21605446934700012 0.0 0.0 1.0 0.5362241268157959 0.2796708345413208 0 1.0 0 0.0 0 0.0 0 0.0 -1.3263133764266968 -0.12555383145809174 0.21605446934700012 0.0 0.0 0.999969482421875 0.6438645124435425 0.3257516026496887 0 1.0 0 0.0 0 0.0 0 0.0 -1.4901705980300903 -0.12190525233745575 0.21605446934700012 0.0 0.0 1.0 0.5395126342773438 0.2806873917579651 0 1.0 0 0.0 0 0.0 0 0.0 -1.648117184638977 -0.12588948011398315 0.21605446934700012 0.0 0.0 1.0 0.4339945912361145 0.2996535301208496 0 1.0 0 0.0 0 0.0 0 0.0 -1.5110331773757935 -0.12258145213127136 0.21605446934700012 0.0 -3.0518509447574615e-05 1.0 0.5236209630966187 0.27888089418411255 0 1.0 0 0.0 0 0.0 0 0.0 -1.5147109031677246 -0.12205849587917328 0.21605446934700012 0.0 0.0 1.0 0.5208086371421814 0.27942436933517456 0 1.0 0 0.0 0 0.0 0 0.0 -1.4989076852798462 -0.12287820875644684 0.21605446934700012 0.0 0.0 1.0 0.5328900814056396 0.2789868116378784 0 1.0 0 0.0 0 0.0 0 0.0 -1.3263133764266968 -0.12555383145809174 0.21605446934700012 0.0 0.0 0.999969482421875 0.6438645124435425 0.3257516026496887 0 1.0 0 0.0 0 0.0 0 0.0 -1.494522213935852 -0.12251335382461548 0.21605446934700012 0.0 0.0 1.0 0.5362241268157959 0.2796708345413208 0 1.0 0 0.0 0 0.0 0 0.0 -1.648117184638977 -0.12588948011398315 0.21605446934700012 0.0 0.0 1.0 0.4339945912361145 0.2996535301208496 0 1.0 0 0.0 0 0.0 0 0.0 -1.5072386264801025 -0.12289523333311081 0.21605446934700012 0.0 0.00015259254723787308 1.0 0.5265249013900757 0.2786164879798889 0 1.0 0 0.0 0 0.0 0 0.0 -1.5110331773757935 -0.12258145213127136 0.21605446934700012 0.0 -3.0518509447574615e-05 1.0 0.5236209630966187 0.27888089418411255 0 1.0 0 0.0 0 0.0 0 0.0 -1.5033273696899414 -0.12299982458353043 0.21605446934700012 0.0 0.0 0.999969482421875 0.5295165181159973 0.2786363959312439 0 1.0 0 0.0 0 0.0 0 0.0 -1.3263133764266968 -0.12555383145809174 0.21605446934700012 0.0 0.0 0.999969482421875 0.6438645124435425 0.3257516026496887 0 1.0 0 0.0 0 0.0 0 0.0 -1.4989076852798462 -0.12287820875644684 0.21605446934700012 0.0 0.0 1.0 0.5328900814056396 0.2789868116378784 0 1.0 0 0.0 0 0.0 0 0.0 -1.648117184638977 -0.12588948011398315 0.21605446934700012 0.0 0.0 1.0 0.4339945912361145 0.2996535301208496 0 1.0 0 0.0 0 0.0 0 0.0 -1.5033273696899414 -0.12299982458353043 0.21605446934700012 0.0 0.0 0.999969482421875 0.5295165181159973 0.2786363959312439 0 1.0 0 0.0 0 0.0 0 0.0 -1.5072386264801025 -0.12289523333311081 0.21605446934700012 0.0 0.00015259254723787308 1.0 0.5265249013900757 0.2786164879798889 0 1.0 0 0.0 0 0.0 0 0.0 -1.648117184638977 -0.12588948011398315 0.21605446934700012 0.0 0.0 1.0 0.4339945912361145 0.2996535301208496 0 1.0 0 0.0 0 0.0 0 0.0 -1.3263133764266968 -0.12555383145809174 0.21605446934700012 0.0 0.0 0.999969482421875 0.6438645124435425 0.3257516026496887 0 1.0 0 0.0 0 0.0 0 0.0 -1.5033273696899414 -0.12299982458353043 0.21605446934700012 0.0 0.0 0.999969482421875 0.5295165181159973 0.2786363959312439 0 1.0 0 0.0 0 0.0 0 0.0 -1.648117184638977 -0.12588948011398315 0.21605446934700012 0.0 0.0 1.0 0.4339945912361145 0.2996535301208496 0 1.0 0 0.0 0 0.0 0 0.0 -1.325623869895935 -0.12997224926948547 0.21605446934700012 0.0 0.0 0.999969482421875 0.6448163986206055 0.32196974754333496 0 1.0 0 0.0 0 0.0 0 0.0 -1.3263133764266968 -0.12555383145809174 0.21605446934700012 0.0 0.0 0.999969482421875 0.6438645124435425 0.3257516026496887 0 1.0 0 0.0 0 0.0 0 0.0 -1.6451290845870972 -0.13234259188175201 0.21605446934700012 0.0 0.0 1.0 0.43501198291778564 0.29271793365478516 0 1.0 0 0.0 0 0.0 0 0.0 -1.325623869895935 -0.12997224926948547 0.21605446934700012 0.0 0.0 0.999969482421875 0.6448163986206055 0.32196974754333496 0 1.0 0 0.0 0 0.0 0 0.0 -1.648117184638977 -0.12588948011398315 0.21605446934700012 0.0 0.0 1.0 0.4339945912361145 0.2996535301208496 0 1.0 0 0.0 0 0.0 0 0.0 -1.6451290845870972 -0.13234259188175201 0.21605446934700012 0.0 0.0 1.0 0.43501198291778564 0.29271793365478516 0 1.0 0 0.0 0 0.0 0 0.0 -1.3248685598373413 -0.13403309881687164 0.21605446934700012 0.0 0.0 1.0 0.6457487344741821 0.31858688592910767 0 1.0 0 0.0 0 0.0 0 0.0 -1.325623869895935 -0.12997224926948547 0.21605446934700012 0.0 0.0 0.999969482421875 0.6448163986206055 0.32196974754333496 0 1.0 0 0.0 0 0.0 0 0.0 -1.64168119430542 -0.13856706023216248 0.21605446934700012 0.0 0.0 0.999969482421875 0.4363168179988861 0.2858927845954895 0 1.0 0 0.0 0 0.0 0 0.0 -1.3248685598373413 -0.13403309881687164 0.21605446934700012 0.0 0.0 1.0 0.6457487344741821 0.31858688592910767 0 1.0 0 0.0 0 0.0 0 0.0 -1.6451290845870972 -0.13234259188175201 0.21605446934700012 0.0 0.0 1.0 0.43501198291778564 0.29271793365478516 0 1.0 0 0.0 0 0.0 0 0.0 -1.64168119430542 -0.13856706023216248 0.21605446934700012 0.0 0.0 0.999969482421875 0.4363168179988861 0.2858927845954895 0 1.0 0 0.0 0 0.0 0 0.0 -1.3240233659744263 -0.13793829083442688 0.21605446934700012 0.0 0.0 1.0 0.6467007398605347 0.3154236078262329 0 1.0 0 0.0 0 0.0 0 0.0 -1.3248685598373413 -0.13403309881687164 0.21605446934700012 0.0 0.0 1.0 0.6457487344741821 0.31858688592910767 0 1.0 0 0.0 0 0.0 0 0.0 -1.64168119430542 -0.13856706023216248 0.21605446934700012 0.0 0.0 0.999969482421875 0.4363168179988861 0.2858927845954895 0 1.0 0 0.0 0 0.0 0 0.0 -1.3230637311935425 -0.14188969135284424 0.21605446934700012 0.0 0.0 1.0 0.6477121114730835 0.31230872869491577 0 1.0 0 0.0 0 0.0 0 0.0 -1.3240233659744263 -0.13793829083442688 0.21605446934700012 0.0 0.0 1.0 0.6467007398605347 0.3154236078262329 0 1.0 0 0.0 0 0.0 0 0.0 -1.6377736330032349 -0.14456287026405334 0.21605446934700012 0.0 0.0 1.0 0.4379253089427948 0.27917128801345825 0 1.0 0 0.0 0 0.0 0 0.0 -1.3230637311935425 -0.14188969135284424 0.21605446934700012 0.0 0.0 1.0 0.6477121114730835 0.31230872869491577 0 1.0 0 0.0 0 0.0 0 0.0 -1.64168119430542 -0.13856706023216248 0.21605446934700012 0.0 0.0 0.999969482421875 0.4363168179988861 0.2858927845954895 0 1.0 0 0.0 0 0.0 0 0.0 -1.6377736330032349 -0.14456287026405334 0.21605446934700012 0.0 0.0 1.0 0.4379253089427948 0.27917128801345825 0 1.0 0 0.0 0 0.0 0 0.0 -1.4175130128860474 -0.14331506192684174 0.21605446934700012 0.0 0.0 1.0 0.5948898792266846 0.2739698886871338 0 1.0 0 0.0 0 0.0 0 0.0 -1.3230637311935425 -0.14188969135284424 0.21605446934700012 0.0 0.0 1.0 0.6477121114730835 0.31230872869491577 0 1.0 0 0.0 0 0.0 0 0.0 -1.4175130128860474 -0.14331506192684174 0.21605446934700012 0.0 0.0 1.0 0.5948898792266846 0.2739698886871338 0 1.0 0 0.0 0 0.0 0 0.0 -1.321989893913269 -0.14588730037212372 0.21605446934700012 0.0 0.0 1.0 0.6487820148468018 0.3092452883720398 0 1.0 0 0.0 0 0.0 0 0.0 -1.3230637311935425 -0.14188969135284424 0.21605446934700012 0.0 0.0 1.0 0.6477121114730835 0.31230872869491577 0 1.0 0 0.0 0 0.0 0 0.0 -1.6377736330032349 -0.14456287026405334 0.21605446934700012 0.0 0.0 1.0 0.4379253089427948 0.27917128801345825 0 1.0 0 0.0 0 0.0 0 0.0 -1.4217404127120972 -0.1473163217306137 0.21605446934700012 0.0 0.0 1.0 0.5925045013427734 0.26866674423217773 0 1.0 0 0.0 0 0.0 0 0.0 -1.4175130128860474 -0.14331506192684174 0.21605446934700012 0.0 0.0 1.0 0.5948898792266846 0.2739698886871338 0 1.0 0 0.0 0 0.0 0 0.0 -1.4173282384872437 -0.14382342994213104 0.21605446934700012 0.0 0.0 1.0 0.595079779624939 0.27352941036224365 0 1.0 0 0.0 0 0.0 0 0.0 -1.321989893913269 -0.14588730037212372 0.21605446934700012 0.0 0.0 1.0 0.6487820148468018 0.3092452883720398 0 1.0 0 0.0 0 0.0 0 0.0 -1.4175130128860474 -0.14331506192684174 0.21605446934700012 0.0 0.0 1.0 0.5948898792266846 0.2739698886871338 0 1.0 0 0.0 0 0.0 0 0.0 -1.4171239137649536 -0.1444144994020462 0.21605446934700012 0.0 0.0 1.0 0.5952936410903931 0.27301520109176636 0 1.0 0 0.0 0 0.0 0 0.0 -1.321989893913269 -0.14588730037212372 0.21605446934700012 0.0 0.0 1.0 0.6487820148468018 0.3092452883720398 0 1.0 0 0.0 0 0.0 0 0.0 -1.4173282384872437 -0.14382342994213104 0.21605446934700012 0.0 0.0 1.0 0.595079779624939 0.27352941036224365 0 1.0 0 0.0 0 0.0 0 0.0 -1.4169000387191772 -0.14508827030658722 0.21605446934700012 0.0 0.0 1.0 0.5955314636230469 0.27242761850357056 0 1.0 0 0.0 0 0.0 0 0.0 -1.321989893913269 -0.14588730037212372 0.21605446934700012 0.0 0.0 1.0 0.6487820148468018 0.3092452883720398 0 1.0 0 0.0 0 0.0 0 0.0 -1.4171239137649536 -0.1444144994020462 0.21605446934700012 0.0 0.0 1.0 0.5952936410903931 0.27301520109176636 0 1.0 0 0.0 0 0.0 0 0.0 -1.6334062814712524 -0.15033003687858582 0.21605446934700012 0.0 0.0 1.0 0.43985608220100403 0.2725491523742676 0 1.0 0 0.0 0 0.0 0 0.0 -1.4217404127120972 -0.1473163217306137 0.21605446934700012 0.0 0.0 1.0 0.5925045013427734 0.26866674423217773 0 1.0 0 0.0 0 0.0 0 0.0 -1.6377736330032349 -0.14456287026405334 0.21605446934700012 0.0 0.0 1.0 0.4379253089427948 0.27917128801345825 0 1.0 0 0.0 0 0.0 0 0.0 -1.4166568517684937 -0.1458447277545929 0.21605446934700012 0.0 0.0 1.0 0.5957931876182556 0.27176743745803833 0 1.0 0 0.0 0 0.0 0 0.0 -1.321989893913269 -0.14588730037212372 0.21605446934700012 0.0 0.0 1.0 0.6487820148468018 0.3092452883720398 0 1.0 0 0.0 0 0.0 0 0.0 -1.4169000387191772 -0.14508827030658722 0.21605446934700012 0.0 0.0 1.0 0.5955314636230469 0.27242761850357056 0 1.0 0 0.0 0 0.0 0 0.0 -1.4163941144943237 -0.14668390154838562 0.21605446934700012 0.0 0.0 0.999969482421875 0.5960790514945984 0.27103519439697266 0 1.0 0 0.0 0 0.0 0 0.0 -1.321989893913269 -0.14588730037212372 0.21605446934700012 0.0 0.0 1.0 0.6487820148468018 0.3092452883720398 0 1.0 0 0.0 0 0.0 0 0.0 -1.4166568517684937 -0.1458447277545929 0.21605446934700012 0.0 0.0 1.0 0.5957931876182556 0.27176743745803833 0 1.0 0 0.0 0 0.0 0 0.0 -1.4163941144943237 -0.14668390154838562 0.21605446934700012 0.0 0.0 0.999969482421875 0.5960790514945984 0.27103519439697266 0 1.0 0 0.0 0 0.0 0 0.0 -1.3208016157150269 -0.1499311327934265 0.21605446934700012 0.0 0.0 1.0 0.6499096751213074 0.3062366247177124 0 1.0 0 0.0 0 0.0 0 0.0 -1.321989893913269 -0.14588730037212372 0.21605446934700012 0.0 0.0 1.0 0.6487820148468018 0.3092452883720398 0 1.0 0 0.0 0 0.0 0 0.0 -1.4161120653152466 -0.1476057767868042 0.21605446934700012 0.0 0.0 1.0 0.5963889360427856 0.2702317237854004 0 1.0 0 0.0 0 0.0 0 0.0 -1.3208016157150269 -0.1499311327934265 0.21605446934700012 0.0 0.0 1.0 0.6499096751213074 0.3062366247177124 0 1.0 0 0.0 0 0.0 0 0.0 -1.4163941144943237 -0.14668390154838562 0.21605446934700012 0.0 0.0 0.999969482421875 0.5960790514945984 0.27103519439697266 0 1.0 0 0.0 0 0.0 0 0.0 -1.6334062814712524 -0.15033003687858582 0.21605446934700012 0.0 0.0 1.0 0.43985608220100403 0.2725491523742676 0 1.0 0 0.0 0 0.0 0 0.0 -1.4260165691375732 -0.15114732086658478 0.21605446934700012 0.0 0.0 1.0 0.5900063514709473 0.26357966661453247 0 1.0 0 0.0 0 0.0 0 0.0 -1.4217404127120972 -0.1473163217306137 0.21605446934700012 0.0 0.0 1.0 0.5925045013427734 0.26866674423217773 0 1.0 0 0.0 0 0.0 0 0.0 -1.415810465812683 -0.14861035346984863 0.21605446934700012 0.0 0.0 1.0 0.5967231392860413 0.2693578600883484 0 1.0 0 0.0 0 0.0 0 0.0 -1.3208016157150269 -0.1499311327934265 0.21605446934700012 0.0 0.0 1.0 0.6499096751213074 0.3062366247177124 0 1.0 0 0.0 0 0.0 0 0.0 -1.4161120653152466 -0.1476057767868042 0.21605446934700012 0.0 0.0 1.0 0.5963889360427856 0.2702317237854004 0 1.0 0 0.0 0 0.0 0 0.0 -1.4154893159866333 -0.14969763159751892 0.21605446934700012 0.0 0.0 1.0 0.5970817804336548 0.26841461658477783 0 1.0 0 0.0 0 0.0 0 0.0 -1.3208016157150269 -0.1499311327934265 0.21605446934700012 0.0 0.0 1.0 0.6499096751213074 0.3062366247177124 0 1.0 0 0.0 0 0.0 0 0.0 -1.415810465812683 -0.14861035346984863 0.21605446934700012 0.0 0.0 1.0 0.5967231392860413 0.2693578600883484 0 1.0 0 0.0 0 0.0 0 0.0 -1.4151488542556763 -0.15086759626865387 0.21605446934700012 0.0 0.0 1.0 0.5974647998809814 0.2674028277397156 0 1.0 0 0.0 0 0.0 0 0.0 -1.3208016157150269 -0.1499311327934265 0.21605446934700012 0.0 0.0 1.0 0.6499096751213074 0.3062366247177124 0 1.0 0 0.0 0 0.0 0 0.0 -1.4154893159866333 -0.14969763159751892 0.21605446934700012 0.0 0.0 1.0 0.5970817804336548 0.26841461658477783 0 1.0 0 0.0 0 0.0 0 0.0 -1.4151488542556763 -0.15086759626865387 0.21605446934700012 0.0 0.0 1.0 0.5974647998809814 0.2674028277397156 0 1.0 0 0.0 0 0.0 0 0.0 -1.319499135017395 -0.15402118861675262 0.21605446934700012 0.0 0.0 1.0 0.6510940194129944 0.30328530073165894 0 1.0 0 0.0 0 0.0 0 0.0 -1.3208016157150269 -0.1499311327934265 0.21605446934700012 0.0 0.0 1.0 0.6499096751213074 0.3062366247177124 0 1.0 0 0.0 0 0.0 0 0.0 -1.6285791397094727 -0.15586857497692108 0.21605446934700012 0.0 0.0 1.0 0.44213002920150757 0.2660250663757324 0 1.0 0 0.0 0 0.0 0 0.0 -1.4260165691375732 -0.15114732086658478 0.21605446934700012 0.0 0.0 1.0 0.5900063514709473 0.26357966661453247 0 1.0 0 0.0 0 0.0 0 0.0 -1.6334062814712524 -0.15033003687858582 0.21605446934700012 0.0 0.0 1.0 0.43985608220100403 0.2725491523742676 0 1.0 0 0.0 0 0.0 0 0.0 -1.414788842201233 -0.15212027728557587 0.21605446934700012 0.0 0.0 1.0 0.5978724956512451 0.26632362604141235 0 1.0 0 0.0 0 0.0 0 0.0 -1.319499135017395 -0.15402118861675262 0.21605446934700012 0.0 0.0 1.0 0.6510940194129944 0.30328530073165894 0 1.0 0 0.0 0 0.0 0 0.0 -1.4151488542556763 -0.15086759626865387 0.21605446934700012 0.0 0.0 1.0 0.5974647998809814 0.2674028277397156 0 1.0 0 0.0 0 0.0 0 0.0 -1.6285791397094727 -0.15586857497692108 0.21605446934700012 0.0 0.0 1.0 0.44213002920150757 0.2660250663757324 0 1.0 0 0.0 0 0.0 0 0.0 -1.430341362953186 -0.15480805933475494 0.21605446934700012 0.0 0.0 1.0 0.5873936414718628 0.25871068239212036 0 1.0 0 0.0 0 0.0 0 0.0 -1.4260165691375732 -0.15114732086658478 0.21605446934700012 0.0 0.0 1.0 0.5900063514709473 0.26357966661453247 0 1.0 0 0.0 0 0.0 0 0.0 -1.4144092798233032 -0.15345565974712372 0.21605446934700012 0.0 0.0 0.999969482421875 0.5983049869537354 0.26517820358276367 0 1.0 0 0.0 0 0.0 0 0.0 -1.319499135017395 -0.15402118861675262 0.21605446934700012 0.0 0.0 1.0 0.6510940194129944 0.30328530073165894 0 1.0 0 0.0 0 0.0 0 0.0 -1.414788842201233 -0.15212027728557587 0.21605446934700012 0.0 0.0 1.0 0.5978724956512451 0.26632362604141235 0 1.0 0 0.0 0 0.0 0 0.0 -1.4140104055404663 -0.15487372875213623 0.21605446934700012 0.0 0.0 1.0 0.5987622737884521 0.26396769285202026 0 1.0 0 0.0 0 0.0 0 0.0 -1.319499135017395 -0.15402118861675262 0.21605446934700012 0.0 0.0 1.0 0.6510940194129944 0.30328530073165894 0 1.0 0 0.0 0 0.0 0 0.0 -1.4144092798233032 -0.15345565974712372 0.21605446934700012 0.0 0.0 0.999969482421875 0.5983049869537354 0.26517820358276367 0 1.0 0 0.0 0 0.0 0 0.0 -1.4140104055404663 -0.15487372875213623 0.21605446934700012 0.0 0.0 1.0 0.5987622737884521 0.26396769285202026 0 1.0 0 0.0 0 0.0 0 0.0 -1.3180822134017944 -0.15815743803977966 0.21605446934700012 0.0 0.0 1.0 0.6523339748382568 0.3003944158554077 0 1.0 0 0.0 0 0.0 0 0.0 -1.319499135017395 -0.15402118861675262 0.21605446934700012 0.0 0.0 1.0 0.6510940194129944 0.30328530073165894 0 1.0 0 0.0 0 0.0 0 0.0 -1.6285791397094727 -0.15586857497692108 0.21605446934700012 0.0 0.0 1.0 0.44213002920150757 0.2660250663757324 0 1.0 0 0.0 0 0.0 0 0.0 -1.4347147941589355 -0.158298522233963 0.21605446934700012 0.0 0.0 1.0 0.5846648812294006 0.254062294960022 0 1.0 0 0.0 0 0.0 0 0.0 -1.430341362953186 -0.15480805933475494 0.21605446934700012 0.0 0.0 1.0 0.5873936414718628 0.25871068239212036 0 1.0 0 0.0 0 0.0 0 0.0 -1.4130885601043701 -0.1580187976360321 0.21605446934700012 0.0 0.0 1.0 0.5998045206069946 0.2613224983215332 0 1.0 0 0.0 0 0.0 0 0.0 -1.3180822134017944 -0.15815743803977966 0.21605446934700012 0.0 0.0 1.0 0.6523339748382568 0.3003944158554077 0 1.0 0 0.0 0 0.0 0 0.0 -1.4140104055404663 -0.15487372875213623 0.21605446934700012 0.0 0.0 1.0 0.5987622737884521 0.26396769285202026 0 1.0 0 0.0 0 0.0 0 0.0 -1.623292326927185 -0.16117845475673676 0.21605446934700012 0.0 0.0 0.999969482421875 0.44477057456970215 0.2596014142036438 0 1.0 0 0.0 0 0.0 0 0.0 -1.4347147941589355 -0.158298522233963 0.21605446934700012 0.0 0.0 1.0 0.5846648812294006 0.254062294960022 0 1.0 0 0.0 0 0.0 0 0.0 -1.6285791397094727 -0.15586857497692108 0.21605446934700012 0.0 0.0 1.0 0.44213002920150757 0.2660250663757324 0 1.0 0 0.0 0 0.0 0 0.0 -1.4121910333633423 -0.1610325127840042 0.21605446934700012 0.0 0.0 1.0 0.6008166074752808 0.25882768630981445 0 1.0 0 0.0 0 0.0 0 0.0 -1.3180822134017944 -0.15815743803977966 0.21605446934700012 0.0 0.0 1.0 0.6523339748382568 0.3003944158554077 0 1.0 0 0.0 0 0.0 0 0.0 -1.4130885601043701 -0.1580187976360321 0.21605446934700012 0.0 0.0 1.0 0.5998045206069946 0.2613224983215332 0 1.0 0 0.0 0 0.0 0 0.0 -1.4121910333633423 -0.1610325127840042 0.21605446934700012 0.0 0.0 1.0 0.6008166074752808 0.25882768630981445 0 1.0 0 0.0 0 0.0 0 0.0 -1.3165510892868042 -0.1623399257659912 0.21605446934700012 0.0 0.0 0.999969482421875 0.6536282896995544 0.29756665229797363 0 1.0 0 0.0 0 0.0 0 0.0 -1.3180822134017944 -0.15815743803977966 0.21605446934700012 0.0 0.0 1.0 0.6523339748382568 0.3003944158554077 0 1.0 0 0.0 0 0.0 0 0.0 -1.623292326927185 -0.16117845475673676 0.21605446934700012 0.0 0.0 0.999969482421875 0.44477057456970215 0.2596014142036438 0 1.0 0 0.0 0 0.0 0 0.0 -1.4391368627548218 -0.16161872446537018 0.21605446934700012 0.0 0.0 1.0 0.5818189978599548 0.24963682889938354 0 1.0 0 0.0 0 0.0 0 0.0 -1.4347147941589355 -0.158298522233963 0.21605446934700012 0.0 0.0 1.0 0.5846648812294006 0.254062294960022 0 1.0 0 0.0 0 0.0 0 0.0 -1.4113178253173828 -0.16391488909721375 0.21605446934700012 0.0 0.0 1.0 0.6017979383468628 0.2564786672592163 0 1.0 0 0.0 0 0.0 0 0.0 -1.3165510892868042 -0.1623399257659912 0.21605446934700012 0.0 0.0 0.999969482421875 0.6536282896995544 0.29756665229797363 0 1.0 0 0.0 0 0.0 0 0.0 -1.4121910333633423 -0.1610325127840042 0.21605446934700012 0.0 0.0 1.0 0.6008166074752808 0.25882768630981445 0 1.0 0 0.0 0 0.0 0 0.0 -1.6176066398620605 -0.1661575436592102 0.21605446934700012 0.0 0.0 1.0 0.44777432084083557 0.2533940076828003 0 1.0 0 0.0 0 0.0 0 0.0 -1.4391368627548218 -0.16161872446537018 0.21605446934700012 0.0 0.0 1.0 0.5818189978599548 0.24963682889938354 0 1.0 0 0.0 0 0.0 0 0.0 -1.623292326927185 -0.16117845475673676 0.21605446934700012 0.0 0.0 0.999969482421875 0.44477057456970215 0.2596014142036438 0 1.0 0 0.0 0 0.0 0 0.0 -1.6176066398620605 -0.1661575436592102 0.21605446934700012 0.0 0.0 1.0 0.44777432084083557 0.2533940076828003 0 1.0 0 0.0 0 0.0 0 0.0 -1.4436075687408447 -0.16476865112781525 0.21605446934700012 0.0 0.0 1.0 0.5788551568984985 0.2454366683959961 0 1.0 0 0.0 0 0.0 0 0.0 -1.4391368627548218 -0.16161872446537018 0.21605446934700012 0.0 0.0 1.0 0.5818189978599548 0.24963682889938354 0 1.0 0 0.0 0 0.0 0 0.0 -1.4113178253173828 -0.16391488909721375 0.21605446934700012 0.0 0.0 1.0 0.6017979383468628 0.2564786672592163 0 1.0 0 0.0 0 0.0 0 0.0 -1.3149055242538452 -0.1665686070919037 0.21605446934700012 0.0 0.0 1.0 0.6549756526947021 0.2948046922683716 0 1.0 0 0.0 0 0.0 0 0.0 -1.3165510892868042 -0.1623399257659912 0.21605446934700012 0.0 0.0 0.999969482421875 0.6536282896995544 0.29756665229797363 0 1.0 0 0.0 0 0.0 0 0.0 -1.4104689359664917 -0.1666659116744995 0.21605446934700012 0.0 0.0 1.0 0.6027480363845825 0.25427156686782837 0 1.0 0 0.0 0 0.0 0 0.0 -1.3149055242538452 -0.1665686070919037 0.21605446934700012 0.0 0.0 1.0 0.6549756526947021 0.2948046922683716 0 1.0 0 0.0 0 0.0 0 0.0 -1.4113178253173828 -0.16391488909721375 0.21605446934700012 0.0 0.0 1.0 0.6017979383468628 0.2564786672592163 0 1.0 0 0.0 0 0.0 0 0.0 -1.6176066398620605 -0.1661575436592102 0.21605446934700012 0.0 0.0 1.0 0.44777432084083557 0.2533940076828003 0 1.0 0 0.0 0 0.0 0 0.0 -1.4481269121170044 -0.1677483171224594 0.21605446934700012 0.0 0.0 1.0 0.5757732391357422 0.2414644956588745 0 1.0 0 0.0 0 0.0 0 0.0 -1.4436075687408447 -0.16476865112781525 0.21605446934700012 0.0 0.0 1.0 0.5788551568984985 0.2454366683959961 0 1.0 0 0.0 0 0.0 0 0.0 -1.61158287525177 -0.17070366442203522 0.21605445444583893 0.0 0.0 1.0 0.4511343836784363 0.24751901626586914 0 1.0 0 0.0 0 0.0 0 0.0 -1.4481269121170044 -0.1677483171224594 0.21605446934700012 0.0 0.0 1.0 0.5757732391357422 0.2414644956588745 0 1.0 0 0.0 0 0.0 0 0.0 -1.6176066398620605 -0.1661575436592102 0.21605446934700012 0.0 0.0 1.0 0.44777432084083557 0.2533940076828003 0 1.0 0 0.0 0 0.0 0 0.0 -1.4104689359664917 -0.1666659116744995 0.21605446934700012 0.0 0.0 1.0 0.6027480363845825 0.25427156686782837 0 1.0 0 0.0 0 0.0 0 0.0 -1.3131457567214966 -0.17084351181983948 0.21605445444583893 0.0 0.0 1.0 0.656374454498291 0.2921108603477478 0 1.0 0 0.0 0 0.0 0 0.0 -1.3149055242538452 -0.1665686070919037 0.21605446934700012 0.0 0.0 1.0 0.6549756526947021 0.2948046922683716 0 1.0 0 0.0 0 0.0 0 0.0 -1.409644365310669 -0.1692855805158615 0.21605446934700012 0.0 0.0 1.0 0.6036663055419922 0.2522021532058716 0 1.0 0 0.0 0 0.0 0 0.0 -1.3131457567214966 -0.17084351181983948 0.21605445444583893 0.0 0.0 1.0 0.656374454498291 0.2921108603477478 0 1.0 0 0.0 0 0.0 0 0.0 -1.4104689359664917 -0.1666659116744995 0.21605446934700012 0.0 0.0 1.0 0.6027480363845825 0.25427156686782837 0 1.0 0 0.0 0 0.0 0 0.0 -1.61158287525177 -0.17070366442203522 0.21605445444583893 0.0 0.0 1.0 0.4511343836784363 0.24751901626586914 0 1.0 0 0.0 0 0.0 0 0.0 -1.4526948928833008 -0.17055772244930267 0.21605445444583893 0.0 0.0 1.0 0.5725734233856201 0.23772281408309937 0 1.0 0 0.0 0 0.0 0 0.0 -1.4481269121170044 -0.1677483171224594 0.21605446934700012 0.0 0.0 1.0 0.5757732391357422 0.2414644956588745 0 1.0 0 0.0 0 0.0 0 0.0 -1.4088441133499146 -0.17177391052246094 0.21605445444583893 0.0 0.0 1.0 0.6045523881912231 0.2502666711807251 0 1.0 0 0.0 0 0.0 0 0.0 -1.3131457567214966 -0.17084351181983948 0.21605445444583893 0.0 0.0 1.0 0.656374454498291 0.2921108603477478 0 1.0 0 0.0 0 0.0 0 0.0 -1.409644365310669 -0.1692855805158615 0.21605446934700012 0.0 0.0 1.0 0.6036663055419922 0.2522021532058716 0 1.0 0 0.0 0 0.0 0 0.0 -1.61158287525177 -0.17070366442203522 0.21605445444583893 0.0 0.0 1.0 0.4511343836784363 0.24751901626586914 0 1.0 0 0.0 0 0.0 0 0.0 -1.4573115110397339 -0.17319685220718384 0.21605445444583893 0.0 0.0 1.0 0.569256603717804 0.23421460390090942 0 1.0 0 0.0 0 0.0 0 0.0 -1.4526948928833008 -0.17055772244930267 0.21605445444583893 0.0 0.0 1.0 0.5725734233856201 0.23772281408309937 0 1.0 0 0.0 0 0.0 0 0.0 -1.605220913887024 -0.1748168170452118 0.21605445444583893 0.0 0.0 1.0 0.45487111806869507 0.24198591709136963 0 1.0 0 0.0 0 0.0 0 0.0 -1.4573115110397339 -0.17319685220718384 0.21605445444583893 0.0 0.0 1.0 0.569256603717804 0.23421460390090942 0 1.0 0 0.0 0 0.0 0 0.0 -1.61158287525177 -0.17070366442203522 0.21605445444583893 0.0 0.0 1.0 0.4511343836784363 0.24751901626586914 0 1.0 0 0.0 0 0.0 0 0.0 -1.4088441133499146 -0.17177391052246094 0.21605445444583893 0.0 0.0 1.0 0.6045523881912231 0.2502666711807251 0 1.0 0 0.0 0 0.0 0 0.0 -1.3112715482711792 -0.17516463994979858 0.21605445444583893 0.0 0.0 1.0 0.6578232645988464 0.2894875407218933 0 1.0 0 0.0 0 0.0 0 0.0 -1.3131457567214966 -0.17084351181983948 0.21605445444583893 0.0 0.0 1.0 0.656374454498291 0.2921108603477478 0 1.0 0 0.0 0 0.0 0 0.0 -1.4080681800842285 -0.1741308867931366 0.21605445444583893 0.0 0.0 1.0 0.6054056882858276 0.2484617829322815 0 1.0 0 0.0 0 0.0 0 0.0 -1.3112715482711792 -0.17516463994979858 0.21605445444583893 0.0 0.0 1.0 0.6578232645988464 0.2894875407218933 0 1.0 0 0.0 0 0.0 0 0.0 -1.4088441133499146 -0.17177391052246094 0.21605445444583893 0.0 0.0 1.0 0.6045523881912231 0.2502666711807251 0 1.0 0 0.0 0 0.0 0 0.0 -1.605220913887024 -0.1748168170452118 0.21605445444583893 0.0 0.0 1.0 0.45487111806869507 0.24198591709136963 0 1.0 0 0.0 0 0.0 0 0.0 -1.4619768857955933 -0.1756657212972641 0.21605445444583893 0.0 0.0 1.0 0.5658243298530579 0.23094266653060913 0 1.0 0 0.0 0 0.0 0 0.0 -1.4573115110397339 -0.17319685220718384 0.21605445444583893 0.0 0.0 1.0 0.569256603717804 0.23421460390090942 0 1.0 0 0.0 0 0.0 0 0.0 -1.4073165655136108 -0.1763565093278885 0.21605445444583893 0.0 0.0 1.0 0.606225848197937 0.24678385257720947 0 1.0 0 0.0 0 0.0 0 0.0 -1.3112715482711792 -0.17516463994979858 0.21605445444583893 0.0 0.0 1.0 0.6578232645988464 0.2894875407218933 0 1.0 0 0.0 0 0.0 0 0.0 -1.4080681800842285 -0.1741308867931366 0.21605445444583893 0.0 0.0 1.0 0.6054056882858276 0.2484617829322815 0 1.0 0 0.0 0 0.0 0 0.0 -1.5985209941864014 -0.17849700152873993 0.21605445444583893 0.0 0.0 1.0 0.459004670381546 0.2368086576461792 0 1.0 0 0.0 0 0.0 0 0.0 -1.4619768857955933 -0.1756657212972641 0.21605445444583893 0.0 0.0 1.0 0.5658243298530579 0.23094266653060913 0 1.0 0 0.0 0 0.0 0 0.0 -1.605220913887024 -0.1748168170452118 0.21605445444583893 0.0 0.0 1.0 0.45487111806869507 0.24198591709136963 0 1.0 0 0.0 0 0.0 0 0.0 -1.4073165655136108 -0.1763565093278885 0.21605445444583893 0.0 0.0 1.0 0.606225848197937 0.24678385257720947 0 1.0 0 0.0 0 0.0 0 0.0 -1.3092831373214722 -0.1795319765806198 0.21605445444583893 0.0 0.0 1.0 0.6593202352523804 0.28693681955337524 0 1.0 0 0.0 0 0.0 0 0.0 -1.3112715482711792 -0.17516463994979858 0.21605445444583893 0.0 0.0 1.0 0.6578232645988464 0.2894875407218933 0 1.0 0 0.0 0 0.0 0 0.0 -1.5985209941864014 -0.17849700152873993 0.21605445444583893 0.0 0.0 1.0 0.459004670381546 0.2368086576461792 0 1.0 0 0.0 0 0.0 0 0.0 -1.4666908979415894 -0.17796431481838226 0.21605445444583893 0.0 0.0 1.0 0.5622788071632385 0.22790998220443726 0 1.0 0 0.0 0 0.0 0 0.0 -1.4619768857955933 -0.1756657212972641 0.21605445444583893 0.0 0.0 1.0 0.5658243298530579 0.23094266653060913 0 1.0 0 0.0 0 0.0 0 0.0 -1.4065892696380615 -0.1784507930278778 0.21605445444583893 0.0 0.0 0.999969482421875 0.6070125102996826 0.24522966146469116 0 1.0 0 0.0 0 0.0 0 0.0 -1.3092831373214722 -0.1795319765806198 0.21605445444583893 0.0 0.0 1.0 0.6593202352523804 0.28693681955337524 0 1.0 0 0.0 0 0.0 0 0.0 -1.4073165655136108 -0.1763565093278885 0.21605445444583893 0.0 0.0 1.0 0.606225848197937 0.24678385257720947 0 1.0 0 0.0 0 0.0 0 0.0 -1.5985209941864014 -0.17849700152873993 0.21605445444583893 0.0 0.0 1.0 0.459004670381546 0.2368086576461792 0 1.0 0 0.0 0 0.0 0 0.0 -1.4714535474777222 -0.18009264767169952 0.21605445444583893 0.0 0.0 0.999969482421875 0.5586231350898743 0.22511959075927734 0 1.0 0 0.0 0 0.0 0 0.0 -1.4666908979415894 -0.17796431481838226 0.21605445444583893 0.0 0.0 1.0 0.5622788071632385 0.22790998220443726 0 1.0 0 0.0 0 0.0 0 0.0 -1.4058862924575806 -0.18041372299194336 0.21605445444583893 0.0 0.0 1.0 0.607765257358551 0.24379628896713257 0 1.0 0 0.0 0 0.0 0 0.0 -1.3092831373214722 -0.1795319765806198 0.21605445444583893 0.0 0.0 1.0 0.6593202352523804 0.28693681955337524 0 1.0 0 0.0 0 0.0 0 0.0 -1.4065892696380615 -0.1784507930278778 0.21605445444583893 0.0 0.0 0.999969482421875 0.6070125102996826 0.24522966146469116 0 1.0 0 0.0 0 0.0 0 0.0 -1.5914828777313232 -0.18174423277378082 0.21605445444583893 0.0 0.0 1.0 0.46355491876602173 0.23200583457946777 0 1.0 0 0.0 0 0.0 0 0.0 -1.4714535474777222 -0.18009264767169952 0.21605445444583893 0.0 0.0 0.999969482421875 0.5586231350898743 0.22511959075927734 0 1.0 0 0.0 0 0.0 0 0.0 -1.5985209941864014 -0.17849700152873993 0.21605445444583893 0.0 0.0 1.0 0.459004670381546 0.2368086576461792 0 1.0 0 0.0 0 0.0 0 0.0 -1.4058862924575806 -0.18041372299194336 0.21605445444583893 0.0 0.0 1.0 0.607765257358551 0.24379628896713257 0 1.0 0 0.0 0 0.0 0 0.0 -1.3071802854537964 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6608636379241943 0.2844606637954712 0 1.0 0 0.0 0 0.0 0 0.0 -1.3092831373214722 -0.1795319765806198 0.21605445444583893 0.0 0.0 1.0 0.6593202352523804 0.28693681955337524 0 1.0 0 0.0 0 0.0 0 0.0 -1.5914828777313232 -0.18174423277378082 0.21605445444583893 0.0 0.0 1.0 0.46355491876602173 0.23200583457946777 0 1.0 0 0.0 0 0.0 0 0.0 -1.4762672185897827 -0.18205071985721588 0.21605445444583893 0.0 0.0 1.0 0.5548592209815979 0.2225743532180786 0 1.0 0 0.0 0 0.0 0 0.0 -1.4714535474777222 -0.18009264767169952 0.21605445444583893 0.0 0.0 0.999969482421875 0.5586231350898743 0.22511959075927734 0 1.0 0 0.0 0 0.0 0 0.0 -1.405207633972168 -0.18224529922008514 0.21605445444583893 0.0 0.0 1.0 0.6084837913513184 0.2424808144569397 0 1.0 0 0.0 0 0.0 0 0.0 -1.3071802854537964 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6608636379241943 0.2844606637954712 0 1.0 0 0.0 0 0.0 0 0.0 -1.4058862924575806 -0.18041372299194336 0.21605445444583893 0.0 0.0 1.0 0.607765257358551 0.24379628896713257 0 1.0 0 0.0 0 0.0 0 0.0 -1.584106683731079 -0.18455849587917328 0.21605445444583893 0.0 0.0 0.999969482421875 0.46853989362716675 0.22760164737701416 0 1.0 0 0.0 0 0.0 0 0.0 -1.4762672185897827 -0.18205071985721588 0.21605445444583893 0.0 0.0 1.0 0.5548592209815979 0.2225743532180786 0 1.0 0 0.0 0 0.0 0 0.0 -1.5914828777313232 -0.18174423277378082 0.21605445444583893 0.0 0.0 1.0 0.46355491876602173 0.23200583457946777 0 1.0 0 0.0 0 0.0 0 0.0 -1.584106683731079 -0.18455849587917328 0.21605445444583893 0.0 0.0 0.999969482421875 0.46853989362716675 0.22760164737701416 0 1.0 0 0.0 0 0.0 0 0.0 -1.481134295463562 -0.18383851647377014 0.21605445444583893 0.0 0.0 0.999969482421875 0.55098956823349 0.22027724981307983 0 1.0 0 0.0 0 0.0 0 0.0 -1.4762672185897827 -0.18205071985721588 0.21605445444583893 0.0 0.0 1.0 0.5548592209815979 0.2225743532180786 0 1.0 0 0.0 0 0.0 0 0.0 -1.4045532941818237 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.609167754650116 0.24128073453903198 0 1.0 0 0.0 0 0.0 0 0.0 -1.3071802854537964 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.6608636379241943 0.2844606637954712 0 1.0 0 0.0 0 0.0 0 0.0 -1.405207633972168 -0.18224529922008514 0.21605445444583893 0.0 0.0 1.0 0.6084837913513184 0.2424808144569397 0 1.0 0 0.0 0 0.0 0 0.0 -1.584106683731079 -0.18455849587917328 0.21605445444583893 0.0 0.0 0.999969482421875 0.46853989362716675 0.22760164737701416 0 1.0 0 0.0 0 0.0 0 0.0 -1.4860550165176392 -0.1854560375213623 0.21605445444583893 0.0 0.0 1.0 0.5470194220542908 0.2182314395904541 0 1.0 0 0.0 0 0.0 0 0.0 -1.481134295463562 -0.18383851647377014 0.21605445444583893 0.0 0.0 0.999969482421875 0.55098956823349 0.22027724981307983 0 1.0 0 0.0 0 0.0 0 0.0 -1.576392412185669 -0.1869397908449173 0.21605445444583893 0.0 0.0 1.0 0.47397521138191223 0.22362583875656128 0 1.0 0 0.0 0 0.0 0 0.0 -1.4860550165176392 -0.1854560375213623 0.21605445444583893 0.0 0.0 1.0 0.5470194220542908 0.2182314395904541 0 1.0 0 0.0 0 0.0 0 0.0 -1.584106683731079 -0.18455849587917328 0.21605445444583893 0.0 0.0 0.999969482421875 0.46853989362716675 0.22760164737701416 0 1.0 0 0.0 0 0.0 0 0.0 -1.576392412185669 -0.1869397908449173 0.21605445444583893 0.0 0.0 1.0 0.47397521138191223 0.22362583875656128 0 1.0 0 0.0 0 0.0 0 0.0 -1.4910292625427246 -0.18690331280231476 0.21605445444583893 0.0 0.0 1.0 0.5429552793502808 0.21644043922424316 0 1.0 0 0.0 0 0.0 0 0.0 -1.4860550165176392 -0.1854560375213623 0.21605445444583893 0.0 0.0 1.0 0.5470194220542908 0.2182314395904541 0 1.0 0 0.0 0 0.0 0 0.0 -1.576392412185669 -0.1869397908449173 0.21605445444583893 0.0 0.0 1.0 0.47397521138191223 0.22362583875656128 0 1.0 0 0.0 0 0.0 0 0.0 -1.4960569143295288 -0.18818031251430511 0.21605445444583893 0.0 0.0 1.0 0.5388044118881226 0.21490734815597534 0 1.0 0 0.0 0 0.0 0 0.0 -1.4910292625427246 -0.18690331280231476 0.21605445444583893 0.0 0.0 1.0 0.5429552793502808 0.21644043922424316 0 1.0 0 0.0 0 0.0 0 0.0 -1.5683399438858032 -0.18888813257217407 0.21605445444583893 0.0 0.0 1.0 0.47987258434295654 0.22011399269104004 0 1.0 0 0.0 0 0.0 0 0.0 -1.4960569143295288 -0.18818031251430511 0.21605445444583893 0.0 0.0 1.0 0.5388044118881226 0.21490734815597534 0 1.0 0 0.0 0 0.0 0 0.0 -1.576392412185669 -0.1869397908449173 0.21605445444583893 0.0 0.0 1.0 0.47397521138191223 0.22362583875656128 0 1.0 0 0.0 0 0.0 0 0.0 -1.5683399438858032 -0.18888813257217407 0.21605445444583893 0.0 0.0 1.0 0.47987258434295654 0.22011399269104004 0 1.0 0 0.0 0 0.0 0 0.0 -1.5011382102966309 -0.18928703665733337 0.21605445444583893 0.0 0.0 1.0 0.5345746278762817 0.21363526582717896 0 1.0 0 0.0 0 0.0 0 0.0 -1.4960569143295288 -0.18818031251430511 0.21605445444583893 0.0 0.0 1.0 0.5388044118881226 0.21490734815597534 0 1.0 0 0.0 0 0.0 0 0.0 -1.559949517250061 -0.1904035061597824 0.21605445444583893 0.0 0.0 0.999969482421875 0.48623794317245483 0.2171075940132141 0 1.0 0 0.0 0 0.0 0 0.0 -1.5011382102966309 -0.18928703665733337 0.21605445444583893 0.0 0.0 1.0 0.5345746278762817 0.21363526582717896 0 1.0 0 0.0 0 0.0 0 0.0 -1.5683399438858032 -0.18888813257217407 0.21605445444583893 0.0 0.0 1.0 0.47987258434295654 0.22011399269104004 0 1.0 0 0.0 0 0.0 0 0.0 -1.559949517250061 -0.1904035061597824 0.21605445444583893 0.0 0.0 0.999969482421875 0.48623794317245483 0.2171075940132141 0 1.0 0 0.0 0 0.0 0 0.0 -1.5062729120254517 -0.19022351503372192 0.21605445444583893 0.0 0.0 1.0 0.5302750468254089 0.21262699365615845 0 1.0 0 0.0 0 0.0 0 0.0 -1.5011382102966309 -0.18928703665733337 0.21605445444583893 0.0 0.0 1.0 0.5345746278762817 0.21363526582717896 0 1.0 0 0.0 0 0.0 0 0.0 -1.559949517250061 -0.1904035061597824 0.21605445444583893 0.0 0.0 0.999969482421875 0.48623794317245483 0.2171075940132141 0 1.0 0 0.0 0 0.0 0 0.0 -1.5114612579345703 -0.19098970293998718 0.21605445444583893 0.0 -3.0518509447574615e-05 1.0 0.5259150266647339 0.21188491582870483 0 1.0 0 0.0 0 0.0 0 0.0 -1.5062729120254517 -0.19022351503372192 0.21605445444583893 0.0 0.0 1.0 0.5302750468254089 0.21262699365615845 0 1.0 0 0.0 0 0.0 0 0.0 -1.5512208938598633 -0.1914859116077423 0.21605445444583893 0.0 3.0518509447574615e-05 1.0 0.4930703639984131 0.21465349197387695 0 1.0 0 0.0 0 0.0 0 0.0 -1.5114612579345703 -0.19098970293998718 0.21605445444583893 0.0 -3.0518509447574615e-05 1.0 0.5259150266647339 0.21188491582870483 0 1.0 0 0.0 0 0.0 0 0.0 -1.559949517250061 -0.1904035061597824 0.21605445444583893 0.0 0.0 0.999969482421875 0.48623794317245483 0.2171075940132141 0 1.0 0 0.0 0 0.0 0 0.0 -1.5512208938598633 -0.1914859116077423 0.21605445444583893 0.0 3.0518509447574615e-05 1.0 0.4930703639984131 0.21465349197387695 0 1.0 0 0.0 0 0.0 0 0.0 -1.5167030096054077 -0.19158564507961273 0.21605445444583893 0.0 0.0 1.0 0.5215050578117371 0.21141117811203003 0 1.0 0 0.0 0 0.0 0 0.0 -1.5114612579345703 -0.19098970293998718 0.21605445444583893 0.0 -3.0518509447574615e-05 1.0 0.5259150266647339 0.21188491582870483 0 1.0 0 0.0 0 0.0 0 0.0 -1.5421541929244995 -0.19213536381721497 0.21605445444583893 0.0 0.0 0.999969482421875 0.5003594756126404 0.21280395984649658 0 1.0 0 0.0 0 0.0 0 0.0 -1.5167030096054077 -0.19158564507961273 0.21605445444583893 0.0 0.0 1.0 0.5215050578117371 0.21141117811203003 0 1.0 0 0.0 0 0.0 0 0.0 -1.5512208938598633 -0.1914859116077423 0.21605445444583893 0.0 3.0518509447574615e-05 1.0 0.4930703639984131 0.21465349197387695 0 1.0 0 0.0 0 0.0 0 0.0 -1.5421541929244995 -0.19213536381721497 0.21605445444583893 0.0 0.0 0.999969482421875 0.5003594756126404 0.21280395984649658 0 1.0 0 0.0 0 0.0 0 0.0 -1.5219982862472534 -0.19201131165027618 0.21605445444583893 0.0 3.0518509447574615e-05 1.0 0.5170558094978333 0.2112075686454773 0 1.0 0 0.0 0 0.0 0 0.0 -1.5167030096054077 -0.19158564507961273 0.21605445444583893 0.0 0.0 1.0 0.5215050578117371 0.21141117811203003 0 1.0 0 0.0 0 0.0 0 0.0 -1.5421541929244995 -0.19213536381721497 0.21605445444583893 0.0 0.0 0.999969482421875 0.5003594756126404 0.21280395984649658 0 1.0 0 0.0 0 0.0 0 0.0 -1.5273470878601074 -0.19226670265197754 0.21605445444583893 0.0 -3.0518509447574615e-05 1.0 0.5125783681869507 0.21127527952194214 0 1.0 0 0.0 0 0.0 0 0.0 -1.5219982862472534 -0.19201131165027618 0.21605445444583893 0.0 3.0518509447574615e-05 1.0 0.5170558094978333 0.2112075686454773 0 1.0 0 0.0 0 0.0 0 0.0 -1.5327494144439697 -0.19235184788703918 0.21605445444583893 0.0 0.0 0.999969482421875 0.5080843567848206 0.21161502599716187 0 1.0 0 0.0 0 0.0 0 0.0 -1.5273470878601074 -0.19226670265197754 0.21605445444583893 0.0 -3.0518509447574615e-05 1.0 0.5125783681869507 0.21127527952194214 0 1.0 0 0.0 0 0.0 0 0.0 -1.5421541929244995 -0.19213536381721497 0.21605445444583893 0.0 0.0 0.999969482421875 0.5003594756126404 0.21280395984649658 0 1.0 0 0.0 0 0.0 0 0.0 -2.146409511566162 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.45949652791023254 0.11472934484481812 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 0.32953959703445435 0.21605446934700012 0.0 0.0 1.0 0.5239897966384888 0.5807267427444458 0 1.0 0 0.0 0 0.0 0 0.0 -2.146409511566162 0.32953959703445435 0.21605446934700012 0.0 0.0 1.0 0.48620134592056274 0.5522602796554565 0 1.0 0 0.0 0 0.0 0 0.0 -2.146409511566162 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.45949652791023254 0.11472934484481812 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 0.10151857137680054 0.21605446934700012 0.0 0.0 1.0 0.5355800986289978 0.37752383947372437 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 0.32953959703445435 0.21605446934700012 0.0 0.0 1.0 0.5239897966384888 0.5807267427444458 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 0.10151857137680054 0.21605446934700012 0.0 0.0 1.0 0.5355800986289978 0.37752383947372437 0 1.0 0 0.0 0 0.0 0 0.0 -1.6938703060150146 0.32953959703445435 0.21605446934700012 0.0 0.0 1.0 0.6648842692375183 0.6340523362159729 0 1.0 0 0.0 0 0.0 0 0.0 -1.8332748413085938 0.32953959703445435 0.21605446934700012 0.0 0.0 1.0 0.6141318082809448 0.6253429651260376 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 0.10151857137680054 0.21605446934700012 0.0 0.0 1.0 0.5355800986289978 0.37752383947372437 0 1.0 0 0.0 0 0.0 0 0.0 -1.8872151374816895 0.1295395791530609 0.21605446934700012 0.0 0.0 1.0 0.6251898407936096 0.4582964777946472 0 1.0 0 0.0 0 0.0 0 0.0 -1.6938703060150146 0.32953959703445435 0.21605446934700012 0.0 0.0 1.0 0.6648842692375183 0.6340523362159729 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 0.10151857137680054 0.21605446934700012 0.0 0.0 1.0 0.5355800986289978 0.37752383947372437 0 1.0 0 0.0 0 0.0 0 0.0 -1.9586687088012695 0.057035207748413086 0.21605446934700012 0.0 0.0 1.0 0.5975133776664734 0.3468474745750427 0 1.0 0 0.0 0 0.0 0 0.0 -1.8872151374816895 0.1295395791530609 0.21605446934700012 0.0 0.0 1.0 0.6251898407936096 0.4582964777946472 0 1.0 0 0.0 0 0.0 0 0.0 -1.9586687088012695 0.057035207748413086 0.21605446934700012 0.0 0.0 1.0 0.5975133776664734 0.3468474745750427 0 1.0 0 0.0 0 0.0 0 0.0 -1.683362364768982 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.7767902612686157 0.3119933009147644 0 1.0 0 0.0 0 0.0 0 0.0 -1.8872151374816895 0.1295395791530609 0.21605446934700012 0.0 0.0 1.0 0.6251898407936096 0.4582964777946472 0 1.0 0 0.0 0 0.0 0 0.0 -2.146409511566162 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.45949652791023254 0.11472934484481812 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 -0.02877916395664215 0.21605446934700012 0.0 0.0 0.999969482421875 0.5489316582679749 0.22549867630004883 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 0.10151857137680054 0.21605446934700012 0.0 0.0 1.0 0.5355800986289978 0.37752383947372437 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 -0.02877916395664215 0.21605446934700012 0.0 0.0 0.999969482421875 0.5489316582679749 0.22549867630004883 0 1.0 0 0.0 0 0.0 0 0.0 -1.9586687088012695 0.057035207748413086 0.21605446934700012 0.0 0.0 1.0 0.5975133776664734 0.3468474745750427 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 0.10151857137680054 0.21605446934700012 0.0 0.0 1.0 0.5355800986289978 0.37752383947372437 0 1.0 0 0.0 0 0.0 0 0.0 -1.8175129890441895 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.7532170414924622 0.2296181321144104 0 1.0 0 0.0 0 0.0 0 0.0 -1.683362364768982 -0.18394553661346436 0.21605445444583893 0.0 0.0 0.999969482421875 0.7767902612686157 0.3119933009147644 0 1.0 0 0.0 0 0.0 0 0.0 -1.9586687088012695 0.057035207748413086 0.21605446934700012 0.0 0.0 1.0 0.5975133776664734 0.3468474745750427 0 1.0 0 0.0 0 0.0 0 0.0 -2.146409511566162 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.45949652791023254 0.11472934484481812 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 -0.18394553661346436 0.21605445444583893 0.0 0.0 1.0 0.5862001776695251 0.0954430103302002 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 -0.02877916395664215 0.21605446934700012 0.0 0.0 0.999969482421875 0.5489316582679749 0.22549867630004883 0 1.0 0 0.0 0 0.0 0 0.0 2.073303461074829 0.3344895839691162 -0.2839455306529999 0.0 3.0518509447574615e-05 -0.999969482421875 1.0169769525527954 0.7806612253189087 0 1.0 0 0.0 0 0.0 0 0.0 2.086514711380005 0.3347935080528259 -0.2839455306529999 0.0 9.155552834272385e-05 -1.0 1.0064716339111328 0.7823371291160583 0 1.0 0 0.0 0 0.0 0 0.0 2.1004011631011963 0.33448582887649536 -0.2839455306529999 0.0 0.0 -1.0 0.9952402710914612 0.7828429341316223 0 1.0 0 0.0 0 0.0 0 0.0 2.0605223178863525 0.3335774540901184 -0.2839455306529999 0.0 0.0 -1.0 1.0268683433532715 0.7779173851013184 0 1.0 0 0.0 0 0.0 0 0.0 2.073303461074829 0.3344895839691162 -0.2839455306529999 0.0 3.0518509447574615e-05 -0.999969482421875 1.0169769525527954 0.7806612253189087 0 1.0 0 0.0 0 0.0 0 0.0 2.1004011631011963 0.33448582887649536 -0.2839455306529999 0.0 0.0 -1.0 0.9952402710914612 0.7828429341316223 0 1.0 0 0.0 0 0.0 0 0.0 2.0605223178863525 0.3335774540901184 -0.2839455306529999 0.0 0.0 -1.0 1.0268683433532715 0.7779173851013184 0 1.0 0 0.0 0 0.0 0 0.0 2.1004011631011963 0.33448582887649536 -0.2839455306529999 0.0 0.0 -1.0 0.9952402710914612 0.7828429341316223 0 1.0 0 0.0 0 0.0 0 0.0 2.1138060092926025 0.3335627317428589 -0.2839455306529999 0.0 0.0 -1.0 0.9843412637710571 0.7820700407028198 0 1.0 0 0.0 0 0.0 0 0.0 2.0481717586517334 0.3320571780204773 -0.2839455306529999 0.0 0.0 -1.0 1.0360887050628662 0.7742131352424622 0 1.0 0 0.0 0 0.0 0 0.0 2.0605223178863525 0.3335774540901184 -0.2839455306529999 0.0 0.0 -1.0 1.0268683433532715 0.7779173851013184 0 1.0 0 0.0 0 0.0 0 0.0 2.1138060092926025 0.3335627317428589 -0.2839455306529999 0.0 0.0 -1.0 0.9843412637710571 0.7820700407028198 0 1.0 0 0.0 0 0.0 0 0.0 2.0481717586517334 0.3320571780204773 -0.2839455306529999 0.0 0.0 -1.0 1.0360887050628662 0.7742131352424622 0 1.0 0 0.0 0 0.0 0 0.0 2.1138060092926025 0.3335627317428589 -0.2839455306529999 0.0 0.0 -1.0 0.9843412637710571 0.7820700407028198 0 1.0 0 0.0 0 0.0 0 0.0 2.1267292499542236 0.3320242762565613 -0.2839455306529999 0.0 0.0 -1.0 0.9739037156105042 0.7800891399383545 0 1.0 0 0.0 0 0.0 0 0.0 2.0362517833709717 0.32992881536483765 -0.2839455306529999 0.0 0.0 -1.0 1.044609785079956 0.769651472568512 0 1.0 0 0.0 0 0.0 0 0.0 2.0481717586517334 0.3320571780204773 -0.2839455306529999 0.0 0.0 -1.0 1.0360887050628662 0.7742131352424622 0 1.0 0 0.0 0 0.0 0 0.0 2.1267292499542236 0.3320242762565613 -0.2839455306529999 0.0 0.0 -1.0 0.9739037156105042 0.7800891399383545 0 1.0 0 0.0 0 0.0 0 0.0 2.0362517833709717 0.32992881536483765 -0.2839455306529999 0.0 0.0 -1.0 1.044609785079956 0.769651472568512 0 1.0 0 0.0 0 0.0 0 0.0 2.1267292499542236 0.3320242762565613 -0.2839455306529999 0.0 0.0 -1.0 0.9739037156105042 0.7800891399383545 0 1.0 0 0.0 0 0.0 0 0.0 2.1391708850860596 0.32987040281295776 -0.2839455306529999 0.0 0.0 -1.0 0.9640299081802368 0.7769839763641357 0 1.0 0 0.0 0 0.0 0 0.0 2.0247623920440674 0.32719236612319946 -0.2839455306529999 0.0 0.0 -1.0 1.0524262189865112 0.7643268704414368 0 1.0 0 0.0 0 0.0 0 0.0 2.0362517833709717 0.32992881536483765 -0.2839455306529999 0.0 0.0 -1.0 1.044609785079956 0.769651472568512 0 1.0 0 0.0 0 0.0 0 0.0 2.1391708850860596 0.32987040281295776 -0.2839455306529999 0.0 0.0 -1.0 0.9640299081802368 0.7769839763641357 0 1.0 0 0.0 0 0.0 0 0.0 2.0247623920440674 0.32719236612319946 -0.2839455306529999 0.0 0.0 -1.0 1.0524262189865112 0.7643268704414368 0 1.0 0 0.0 0 0.0 0 0.0 2.1391708850860596 0.32987040281295776 -0.2839455306529999 0.0 0.0 -1.0 0.9640299081802368 0.7769839763641357 0 1.0 0 0.0 0 0.0 0 0.0 2.1511309146881104 0.32710111141204834 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9547929763793945 0.7728448510169983 0 1.0 0 0.0 0 0.0 0 0.0 2.0137035846710205 0.32384783029556274 -0.2839455306529999 0.0 0.0 -1.0 1.0595505237579346 0.758323073387146 0 1.0 0 0.0 0 0.0 0 0.0 2.0247623920440674 0.32719236612319946 -0.2839455306529999 0.0 0.0 -1.0 1.0524262189865112 0.7643268704414368 0 1.0 0 0.0 0 0.0 0 0.0 2.1511309146881104 0.32710111141204834 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9547929763793945 0.7728448510169983 0 1.0 0 0.0 0 0.0 0 0.0 2.0137035846710205 0.32384783029556274 -0.2839455306529999 0.0 0.0 -1.0 1.0595505237579346 0.758323073387146 0 1.0 0 0.0 0 0.0 0 0.0 2.1511309146881104 0.32710111141204834 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9547929763793945 0.7728448510169983 0 1.0 0 0.0 0 0.0 0 0.0 2.162609338760376 0.3237164616584778 -0.2839455306529999 0.0 0.0 -1.0 0.9462374448776245 0.767762303352356 0 1.0 0 0.0 0 0.0 0 0.0 2.003075361251831 0.3198952078819275 -0.2839455306529999 0.0 0.0 -1.0 1.0660085678100586 0.7517114877700806 0 1.0 0 0.0 0 0.0 0 0.0 2.0137035846710205 0.32384783029556274 -0.2839455306529999 0.0 0.0 -1.0 1.0595505237579346 0.758323073387146 0 1.0 0 0.0 0 0.0 0 0.0 2.162609338760376 0.3237164616584778 -0.2839455306529999 0.0 0.0 -1.0 0.9462374448776245 0.767762303352356 0 1.0 0 0.0 0 0.0 0 0.0 2.003075361251831 0.3198952078819275 -0.2839455306529999 0.0 0.0 -1.0 1.0660085678100586 0.7517114877700806 0 1.0 0 0.0 0 0.0 0 0.0 2.162609338760376 0.3237164616584778 -0.2839455306529999 0.0 0.0 -1.0 0.9462374448776245 0.767762303352356 0 1.0 0 0.0 0 0.0 0 0.0 2.1736061573028564 0.3197163939476013 -0.2839455306529999 0.0 0.0 -1.0 0.9383829832077026 0.7618219256401062 0 1.0 0 0.0 0 0.0 0 0.0 1.992877721786499 0.3153344988822937 -0.2839455306529999 0.0 0.0 -1.0 1.071833610534668 0.7445515394210815 0 1.0 0 0.0 0 0.0 0 0.0 2.003075361251831 0.3198952078819275 -0.2839455306529999 0.0 0.0 -1.0 1.0660085678100586 0.7517114877700806 0 1.0 0 0.0 0 0.0 0 0.0 2.1736061573028564 0.3197163939476013 -0.2839455306529999 0.0 0.0 -1.0 0.9383829832077026 0.7618219256401062 0 1.0 0 0.0 0 0.0 0 0.0 1.992877721786499 0.3153344988822937 -0.2839455306529999 0.0 0.0 -1.0 1.071833610534668 0.7445515394210815 0 1.0 0 0.0 0 0.0 0 0.0 2.1736061573028564 0.3197163939476013 -0.2839455306529999 0.0 0.0 -1.0 0.9383829832077026 0.7618219256401062 0 1.0 0 0.0 0 0.0 0 0.0 2.1841213703155518 0.3151009678840637 -0.2839455306529999 0.0 0.0 -1.0 0.9312289953231812 0.7551016211509705 0 1.0 0 0.0 0 0.0 0 0.0 1.9831106662750244 0.3101657032966614 -0.2839455306529999 0.0 0.0 -1.0 1.0770642757415771 0.7368909120559692 0 1.0 0 0.0 0 0.0 0 0.0 1.992877721786499 0.3153344988822937 -0.2839455306529999 0.0 0.0 -1.0 1.071833610534668 0.7445515394210815 0 1.0 0 0.0 0 0.0 0 0.0 2.1841213703155518 0.3151009678840637 -0.2839455306529999 0.0 0.0 -1.0 0.9312289953231812 0.7551016211509705 0 1.0 0 0.0 0 0.0 0 0.0 1.9831106662750244 0.3101657032966614 -0.2839455306529999 0.0 0.0 -1.0 1.0770642757415771 0.7368909120559692 0 1.0 0 0.0 0 0.0 0 0.0 2.1841213703155518 0.3151009678840637 -0.2839455306529999 0.0 0.0 -1.0 0.9312289953231812 0.7551016211509705 0 1.0 0 0.0 0 0.0 0 0.0 2.194154977798462 0.3098701238632202 -0.2839455306529999 0.0 0.0 -1.0 0.9247593283653259 0.7476687431335449 0 1.0 0 0.0 0 0.0 0 0.0 1.9737741947174072 0.30438879132270813 -0.2839455306529999 0.0 0.0 -1.0 1.0817406177520752 0.728766679763794 0 1.0 0 0.0 0 0.0 0 0.0 1.9831106662750244 0.3101657032966614 -0.2839455306529999 0.0 0.0 -1.0 1.0770642757415771 0.7368909120559692 0 1.0 0 0.0 0 0.0 0 0.0 2.194154977798462 0.3098701238632202 -0.2839455306529999 0.0 0.0 -1.0 0.9247593283653259 0.7476687431335449 0 1.0 0 0.0 0 0.0 0 0.0 1.9737741947174072 0.30438879132270813 -0.2839455306529999 0.0 0.0 -1.0 1.0817406177520752 0.728766679763794 0 1.0 0 0.0 0 0.0 0 0.0 2.194154977798462 0.3098701238632202 -0.2839455306529999 0.0 0.0 -1.0 0.9247593283653259 0.7476687431335449 0 1.0 0 0.0 0 0.0 0 0.0 2.203706979751587 0.3040238916873932 -0.2839455306529999 0.0 0.0 -1.0 0.9189475774765015 0.7395798563957214 0 1.0 0 0.0 0 0.0 0 0.0 1.9648678302764893 0.29800379276275635 -0.2839455306529999 0.0 0.0 -1.0 1.0859029293060303 0.7202064990997314 0 1.0 0 0.0 0 0.0 0 0.0 1.9737741947174072 0.30438879132270813 -0.2839455306529999 0.0 0.0 -1.0 1.0817406177520752 0.728766679763794 0 1.0 0 0.0 0 0.0 0 0.0 2.203706979751587 0.3040238916873932 -0.2839455306529999 0.0 0.0 -1.0 0.9189475774765015 0.7395798563957214 0 1.0 0 0.0 0 0.0 0 0.0 1.9648678302764893 0.29800379276275635 -0.2839455306529999 0.0 0.0 -1.0 1.0859029293060303 0.7202064990997314 0 1.0 0 0.0 0 0.0 0 0.0 2.203706979751587 0.3040238916873932 -0.2839455306529999 0.0 0.0 -1.0 0.9189475774765015 0.7395798563957214 0 1.0 0 0.0 0 0.0 0 0.0 2.2127773761749268 0.29756227135658264 -0.2839455306529999 0.0 0.0 -1.0 0.9137606024742126 0.7308803200721741 0 1.0 0 0.0 0 0.0 0 0.0 1.9563920497894287 0.29101070761680603 -0.2839455306529999 0.0 0.0 -1.0 1.0895897150039673 0.7112299203872681 0 1.0 0 0.0 0 0.0 0 0.0 1.9648678302764893 0.29800379276275635 -0.2839455306529999 0.0 0.0 -1.0 1.0859029293060303 0.7202064990997314 0 1.0 0 0.0 0 0.0 0 0.0 2.2127773761749268 0.29756227135658264 -0.2839455306529999 0.0 0.0 -1.0 0.9137606024742126 0.7308803200721741 0 1.0 0 0.0 0 0.0 0 0.0 1.9563920497894287 0.29101070761680603 -0.2839455306529999 0.0 0.0 -1.0 1.0895897150039673 0.7112299203872681 0 1.0 0 0.0 0 0.0 0 0.0 2.2127773761749268 0.29756227135658264 -0.2839455306529999 0.0 0.0 -1.0 0.9137606024742126 0.7308803200721741 0 1.0 0 0.0 0 0.0 0 0.0 2.2213656902313232 0.29048529267311096 -0.2839455306529999 0.0 0.0 -1.0 0.9091619849205017 0.7216052412986755 0 1.0 0 0.0 0 0.0 0 0.0 1.948448896408081 0.2835822105407715 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0928035974502563 0.7020356059074402 0 1.0 0 0.0 0 0.0 0 0.0 1.9563920497894287 0.29101070761680603 -0.2839455306529999 0.0 0.0 -1.0 1.0895897150039673 0.7112299203872681 0 1.0 0 0.0 0 0.0 0 0.0 2.2213656902313232 0.29048529267311096 -0.2839455306529999 0.0 0.0 -1.0 0.9091619849205017 0.7216052412986755 0 1.0 0 0.0 0 0.0 0 0.0 1.948448896408081 0.2835822105407715 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0928035974502563 0.7020356059074402 0 1.0 0 0.0 0 0.0 0 0.0 2.2213656902313232 0.29048529267311096 -0.2839455306529999 0.0 0.0 -1.0 0.9091619849205017 0.7216052412986755 0 1.0 0 0.0 0 0.0 0 0.0 2.2293660640716553 0.2829996347427368 -0.2839455306529999 0.0 0.0 -1.0 0.9051555395126343 0.7120082378387451 0 1.0 0 0.0 0 0.0 0 0.0 1.94114089012146 0.2758910357952118 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0955517292022705 0.6928189992904663 0 1.0 0 0.0 0 0.0 0 0.0 1.948448896408081 0.2835822105407715 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0928035974502563 0.7020356059074402 0 1.0 0 0.0 0 0.0 0 0.0 2.2293660640716553 0.2829996347427368 -0.2839455306529999 0.0 0.0 -1.0 0.9051555395126343 0.7120082378387451 0 1.0 0 0.0 0 0.0 0 0.0 1.94114089012146 0.2758910357952118 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0955517292022705 0.6928189992904663 0 1.0 0 0.0 0 0.0 0 0.0 2.2293660640716553 0.2829996347427368 -0.2839455306529999 0.0 0.0 -1.0 0.9051555395126343 0.7120082378387451 0 1.0 0 0.0 0 0.0 0 0.0 2.236670732498169 0.2753120958805084 -0.2839455306529999 0.0 0.0 -1.0 0.9017375707626343 0.7023459672927856 0 1.0 0 0.0 0 0.0 0 0.0 1.9344675540924072 0.26793715357780457 -0.2839455306529999 0.0 0.0 -1.0 1.0978741645812988 0.6835832595825195 0 1.0 0 0.0 0 0.0 0 0.0 1.94114089012146 0.2758910357952118 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0955517292022705 0.6928189992904663 0 1.0 0 0.0 0 0.0 0 0.0 2.236670732498169 0.2753120958805084 -0.2839455306529999 0.0 0.0 -1.0 0.9017375707626343 0.7023459672927856 0 1.0 0 0.0 0 0.0 0 0.0 1.9344675540924072 0.26793715357780457 -0.2839455306529999 0.0 0.0 -1.0 1.0978741645812988 0.6835832595825195 0 1.0 0 0.0 0 0.0 0 0.0 2.236670732498169 0.2753120958805084 -0.2839455306529999 0.0 0.0 -1.0 0.9017375707626343 0.7023459672927856 0 1.0 0 0.0 0 0.0 0 0.0 2.2432796955108643 0.2674226760864258 -0.2839455306529999 0.0 0.0 -1.0 0.898861289024353 0.6926416158676147 0 1.0 0 0.0 0 0.0 0 0.0 1.928429365158081 0.2597205638885498 -0.2839455306529999 0.0 0.0 -1.0 1.0998048782348633 0.6743261814117432 0 1.0 0 0.0 0 0.0 0 0.0 1.9344675540924072 0.26793715357780457 -0.2839455306529999 0.0 0.0 -1.0 1.0978741645812988 0.6835832595825195 0 1.0 0 0.0 0 0.0 0 0.0 2.2432796955108643 0.2674226760864258 -0.2839455306529999 0.0 0.0 -1.0 0.898861289024353 0.6926416158676147 0 1.0 0 0.0 0 0.0 0 0.0 1.928429365158081 0.2597205638885498 -0.2839455306529999 0.0 0.0 -1.0 1.0998048782348633 0.6743261814117432 0 1.0 0 0.0 0 0.0 0 0.0 2.2432796955108643 0.2674226760864258 -0.2839455306529999 0.0 0.0 -1.0 0.898861289024353 0.6926416158676147 0 1.0 0 0.0 0 0.0 0 0.0 2.0907180309295654 0.2598372995853424 -0.2839455306529999 0.0 0.0 -1.0 1.002812147140503 0.7115545868873596 0 1.0 0 0.0 0 0.0 0 0.0 2.0907180309295654 0.2598372995853424 -0.2839455306529999 0.0 0.0 -1.0 1.002812147140503 0.7115545868873596 0 1.0 0 0.0 0 0.0 0 0.0 2.2432796955108643 0.2674226760864258 -0.2839455306529999 0.0 0.0 -1.0 0.898861289024353 0.6926416158676147 0 1.0 0 0.0 0 0.0 0 0.0 2.249192953109741 0.2593313753604889 -0.2839455306529999 0.0 0.0 -1.0 0.8964853882789612 0.6829080581665039 0 1.0 0 0.0 0 0.0 0 0.0 1.928429365158081 0.2597205638885498 -0.2839455306529999 0.0 0.0 -1.0 0.09980490803718567 0.6743261814117432 0 1.0 0 0.0 0 0.0 0 0.0 2.0907180309295654 0.2598372995853424 -0.2839455306529999 0.0 0.0 -1.0 0.002812206745147705 0.7115545868873596 0 1.0 0 0.0 0 0.0 0 0.0 2.084556818008423 0.2596889138221741 -0.2839455306529999 0.0 0.0 -1.0 0.007328629493713379 0.7110196352005005 0 1.0 0 0.0 0 0.0 0 0.0 2.0970871448516846 0.25969499349594116 -0.2839455306529999 0.0 0.0 -1.0 0.9981156587600708 0.7116611003875732 0 1.0 0 0.0 0 0.0 0 0.0 2.0907180309295654 0.2598372995853424 -0.2839455306529999 0.0 0.0 -1.0 1.002812147140503 0.7115545868873596 0 1.0 0 0.0 0 0.0 0 0.0 2.249192953109741 0.2593313753604889 -0.2839455306529999 0.0 0.0 -1.0 0.8964853882789612 0.6829080581665039 0 1.0 0 0.0 0 0.0 0 0.0 1.9230258464813232 0.2512412965297699 -0.2839455306529999 0.0 0.0 -1.0 0.10137379169464111 0.6650401949882507 0 1.0 0 0.0 0 0.0 0 0.0 1.928429365158081 0.2597205638885498 -0.2839455306529999 0.0 0.0 -1.0 0.09980490803718567 0.6743261814117432 0 1.0 0 0.0 0 0.0 0 0.0 2.084556818008423 0.2596889138221741 -0.2839455306529999 0.0 0.0 -1.0 0.007328629493713379 0.7110196352005005 0 1.0 0 0.0 0 0.0 0 0.0 2.1032350063323975 0.2592681050300598 -0.2839455306529999 0.0 0.0 -1.0 0.9935676455497742 0.7113252878189087 0 1.0 0 0.0 0 0.0 0 0.0 2.0970871448516846 0.25969499349594116 -0.2839455306529999 0.0 0.0 -1.0 0.9981156587600708 0.7116611003875732 0 1.0 0 0.0 0 0.0 0 0.0 2.249192953109741 0.2593313753604889 -0.2839455306529999 0.0 0.0 -1.0 0.8964853882789612 0.6829080581665039 0 1.0 0 0.0 0 0.0 0 0.0 1.9230258464813232 0.2512412965297699 -0.2839455306529999 0.0 0.0 -1.0 0.10137379169464111 0.6650401949882507 0 1.0 0 0.0 0 0.0 0 0.0 2.084556818008423 0.2596889138221741 -0.2839455306529999 0.0 0.0 -1.0 0.007328629493713379 0.7110196352005005 0 1.0 0 0.0 0 0.0 0 0.0 2.078565835952759 0.25924378633499146 -0.2839455306529999 0.0 0.0 -1.0 0.011683493852615356 0.7100631594657898 0 1.0 0 0.0 0 0.0 0 0.0 2.1032350063323975 0.2592681050300598 -0.2839455306529999 0.0 0.0 -1.0 0.9935676455497742 0.7113252878189087 0 1.0 0 0.0 0 0.0 0 0.0 2.249192953109741 0.2593313753604889 -0.2839455306529999 0.0 0.0 -1.0 0.8964853882789612 0.6829080581665039 0 1.0 0 0.0 0 0.0 0 0.0 2.2544105052948 0.25103816390037537 -0.2839455306529999 0.0 0.0 -1.0 0.8945741653442383 0.6731503009796143 0 1.0 0 0.0 0 0.0 0 0.0 2.109161615371704 0.25855663418769836 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.989181399345398 0.7105580568313599 0 1.0 0 0.0 0 0.0 0 0.0 2.1032350063323975 0.2592681050300598 -0.2839455306529999 0.0 0.0 -1.0 0.9935676455497742 0.7113252878189087 0 1.0 0 0.0 0 0.0 0 0.0 2.2544105052948 0.25103816390037537 -0.2839455306529999 0.0 0.0 -1.0 0.8945741653442383 0.6731503009796143 0 1.0 0 0.0 0 0.0 0 0.0 1.9230258464813232 0.2512412965297699 -0.2839455306529999 0.0 0.0 -1.0 0.10137379169464111 0.6650401949882507 0 1.0 0 0.0 0 0.0 0 0.0 2.078565835952759 0.25924378633499146 -0.2839455306529999 0.0 0.0 -1.0 0.011683493852615356 0.7100631594657898 0 1.0 0 0.0 0 0.0 0 0.0 2.0727450847625732 0.25850191712379456 -0.2839455306529999 0.0 0.0 -1.0 0.015869349241256714 0.7086991667747498 0 1.0 0 0.0 0 0.0 0 0.0 2.1148669719696045 0.2575605809688568 -0.2839455306529999 0.0 -6.103701889514923e-05 -1.0 0.9849684238433838 0.7093707323074341 0 1.0 0 0.0 0 0.0 0 0.0 2.109161615371704 0.25855663418769836 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.989181399345398 0.7105580568313599 0 1.0 0 0.0 0 0.0 0 0.0 2.2544105052948 0.25103816390037537 -0.2839455306529999 0.0 0.0 -1.0 0.8945741653442383 0.6731503009796143 0 1.0 0 0.0 0 0.0 0 0.0 1.9230258464813232 0.2512412965297699 -0.2839455306529999 0.0 0.0 -1.0 0.10137379169464111 0.6650401949882507 0 1.0 0 0.0 0 0.0 0 0.0 2.0727450847625732 0.25850191712379456 -0.2839455306529999 0.0 0.0 -1.0 0.015869349241256714 0.7086991667747498 0 1.0 0 0.0 0 0.0 0 0.0 2.067094564437866 0.2574633061885834 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.01988041400909424 0.7069413065910339 0 1.0 0 0.0 0 0.0 0 0.0 2.1203505992889404 0.25627994537353516 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.9809385538101196 0.7077746987342834 0 1.0 0 0.0 0 0.0 0 0.0 2.1148669719696045 0.2575605809688568 -0.2839455306529999 0.0 -6.103701889514923e-05 -1.0 0.9849684238433838 0.7093707323074341 0 1.0 0 0.0 0 0.0 0 0.0 2.2544105052948 0.25103816390037537 -0.2839455306529999 0.0 0.0 -1.0 0.8945741653442383 0.6731503009796143 0 1.0 0 0.0 0 0.0 0 0.0 1.9230258464813232 0.2512412965297699 -0.2839455306529999 0.0 0.0 -1.0 0.10137379169464111 0.6650401949882507 0 1.0 0 0.0 0 0.0 0 0.0 2.067094564437866 0.2574633061885834 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.01988041400909424 0.7069413065910339 0 1.0 0 0.0 0 0.0 0 0.0 2.0616142749786377 0.2561279237270355 -0.2839455306529999 0.0 0.0 -1.0 0.02371254563331604 0.704802393913269 0 1.0 0 0.0 0 0.0 0 0.0 2.12561297416687 0.254714697599411 -0.2839455306529999 0.0 0.0 -1.0 0.9770991802215576 0.7057809829711914 0 1.0 0 0.0 0 0.0 0 0.0 2.1203505992889404 0.25627994537353516 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.9809385538101196 0.7077746987342834 0 1.0 0 0.0 0 0.0 0 0.0 2.2544105052948 0.25103816390037537 -0.2839455306529999 0.0 0.0 -1.0 0.8945741653442383 0.6731503009796143 0 1.0 0 0.0 0 0.0 0 0.0 1.9230258464813232 0.2512412965297699 -0.2839455306529999 0.0 0.0 -1.0 0.10137379169464111 0.6650401949882507 0 1.0 0 0.0 0 0.0 0 0.0 2.0616142749786377 0.2561279237270355 -0.2839455306529999 0.0 0.0 -1.0 0.02371254563331604 0.704802393913269 0 1.0 0 0.0 0 0.0 0 0.0 2.0563042163848877 0.2544957995414734 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.02736303210258484 0.7022942900657654 0 1.0 0 0.0 0 0.0 0 0.0 2.1306540966033936 0.25286486744880676 -0.2839455306529999 0.0 0.0 -1.0 0.9734561443328857 0.7034001350402832 0 1.0 0 0.0 0 0.0 0 0.0 2.12561297416687 0.254714697599411 -0.2839455306529999 0.0 0.0 -1.0 0.9770991802215576 0.7057809829711914 0 1.0 0 0.0 0 0.0 0 0.0 2.2544105052948 0.25103816390037537 -0.2839455306529999 0.0 0.0 -1.0 0.8945741653442383 0.6731503009796143 0 1.0 0 0.0 0 0.0 0 0.0 1.9230258464813232 0.2512412965297699 -0.2839455306529999 0.0 0.0 -1.0 0.10137379169464111 0.6650401949882507 0 1.0 0 0.0 0 0.0 0 0.0 2.0563042163848877 0.2544957995414734 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.02736303210258484 0.7022942900657654 0 1.0 0 0.0 0 0.0 0 0.0 2.051164388656616 0.252566933631897 -0.2839455306529999 0.0 0.0 -1.0 0.030830442905426025 0.6994280815124512 0 1.0 0 0.0 0 0.0 0 0.0 2.1354739665985107 0.2507304549217224 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9700139164924622 0.7006418704986572 0 1.0 0 0.0 0 0.0 0 0.0 2.1306540966033936 0.25286486744880676 -0.2839455306529999 0.0 0.0 -1.0 0.9734561443328857 0.7034001350402832 0 1.0 0 0.0 0 0.0 0 0.0 2.2544105052948 0.25103816390037537 -0.2839455306529999 0.0 0.0 -1.0 0.8945741653442383 0.6731503009796143 0 1.0 0 0.0 0 0.0 0 0.0 1.9230258464813232 0.2512412965297699 -0.2839455306529999 0.0 0.0 -1.0 0.10137379169464111 0.6650401949882507 0 1.0 0 0.0 0 0.0 0 0.0 2.051164388656616 0.252566933631897 -0.2839455306529999 0.0 0.0 -1.0 0.030830442905426025 0.6994280815124512 0 1.0 0 0.0 0 0.0 0 0.0 2.0461952686309814 0.2503412961959839 -0.2839455306529999 0.0 0.0 -1.0 0.034114301204681396 0.6962137818336487 0 1.0 0 0.0 0 0.0 0 0.0 1.9182569980621338 0.24249932169914246 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.10260581970214844 0.6557139158248901 0 1.0 0 0.0 0 0.0 0 0.0 1.9230258464813232 0.2512412965297699 -0.2839455306529999 0.0 0.0 -1.0 0.10137379169464111 0.6650401949882507 0 1.0 0 0.0 0 0.0 0 0.0 2.0461952686309814 0.2503412961959839 -0.2839455306529999 0.0 0.0 -1.0 0.034114301204681396 0.6962137818336487 0 1.0 0 0.0 0 0.0 0 0.0 2.1354739665985107 0.2507304549217224 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9700139164924622 0.7006418704986572 0 1.0 0 0.0 0 0.0 0 0.0 2.2544105052948 0.25103816390037537 -0.2839455306529999 0.0 0.0 -1.0 0.8945741653442383 0.6731503009796143 0 1.0 0 0.0 0 0.0 0 0.0 2.25893235206604 0.2425430715084076 -0.2839455306529999 0.0 0.0 -1.0 0.8930968046188354 0.6633660793304443 0 1.0 0 0.0 0 0.0 0 0.0 2.1400725841522217 0.24831146001815796 -0.2839455306529999 0.0 0.0 -1.0 0.9667751789093018 0.697515070438385 0 1.0 0 0.0 0 0.0 0 0.0 2.1354739665985107 0.2507304549217224 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9700139164924622 0.7006418704986572 0 1.0 0 0.0 0 0.0 0 0.0 2.25893235206604 0.2425430715084076 -0.2839455306529999 0.0 0.0 -1.0 0.8930968046188354 0.6633660793304443 0 1.0 0 0.0 0 0.0 0 0.0 1.9182569980621338 0.24249932169914246 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.10260581970214844 0.6557139158248901 0 1.0 0 0.0 0 0.0 0 0.0 2.0461952686309814 0.2503412961959839 -0.2839455306529999 0.0 0.0 -1.0 0.034114301204681396 0.6962137818336487 0 1.0 0 0.0 0 0.0 0 0.0 2.041396379470825 0.24781891703605652 -0.2839455306529999 0.0 0.0 -1.0 0.03721565008163452 0.6926599740982056 0 1.0 0 0.0 0 0.0 0 0.0 2.144449472427368 0.2456078827381134 -0.2839455306529999 0.0 0.0 -1.0 0.9637418985366821 0.6940274238586426 0 1.0 0 0.0 0 0.0 0 0.0 2.1400725841522217 0.24831146001815796 -0.2839455306529999 0.0 0.0 -1.0 0.9667751789093018 0.697515070438385 0 1.0 0 0.0 0 0.0 0 0.0 2.25893235206604 0.2425430715084076 -0.2839455306529999 0.0 0.0 -1.0 0.8930968046188354 0.6633660793304443 0 1.0 0 0.0 0 0.0 0 0.0 1.9182569980621338 0.24249932169914246 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.10260581970214844 0.6557139158248901 0 1.0 0 0.0 0 0.0 0 0.0 2.041396379470825 0.24781891703605652 -0.2839455306529999 0.0 0.0 -1.0 0.03721565008163452 0.6926599740982056 0 1.0 0 0.0 0 0.0 0 0.0 2.0367677211761475 0.24499979615211487 -0.2839455306529999 0.0 0.0 -1.0 0.0401361882686615 0.6887743473052979 0 1.0 0 0.0 0 0.0 0 0.0 2.1486051082611084 0.24261972308158875 -0.2839455306529999 0.0 0.0 -1.0 0.960913896560669 0.690185546875 0 1.0 0 0.0 0 0.0 0 0.0 2.144449472427368 0.2456078827381134 -0.2839455306529999 0.0 0.0 -1.0 0.9637418985366821 0.6940274238586426 0 1.0 0 0.0 0 0.0 0 0.0 2.25893235206604 0.2425430715084076 -0.2839455306529999 0.0 0.0 -1.0 0.8930968046188354 0.6633660793304443 0 1.0 0 0.0 0 0.0 0 0.0 1.9182569980621338 0.24249932169914246 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.10260581970214844 0.6557139158248901 0 1.0 0 0.0 0 0.0 0 0.0 2.0367677211761475 0.24499979615211487 -0.2839455306529999 0.0 0.0 -1.0 0.0401361882686615 0.6887743473052979 0 1.0 0 0.0 0 0.0 0 0.0 2.0323092937469482 0.24188390374183655 -0.2839455306529999 0.0 0.0 -1.0 0.04287832975387573 0.684563398361206 0 1.0 0 0.0 0 0.0 0 0.0 2.1525394916534424 0.2393469512462616 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.958290696144104 0.6859949827194214 0 1.0 0 0.0 0 0.0 0 0.0 2.1486051082611084 0.24261972308158875 -0.2839455306529999 0.0 0.0 -1.0 0.960913896560669 0.690185546875 0 1.0 0 0.0 0 0.0 0 0.0 2.25893235206604 0.2425430715084076 -0.2839455306529999 0.0 0.0 -1.0 0.8930968046188354 0.6633660793304443 0 1.0 0 0.0 0 0.0 0 0.0 2.1525394916534424 0.2393469512462616 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.958290696144104 0.6859949827194214 0 1.0 0 0.0 0 0.0 0 0.0 2.25893235206604 0.2425430715084076 -0.2839455306529999 0.0 0.0 -1.0 0.8930968046188354 0.6633660793304443 0 1.0 0 0.0 0 0.0 0 0.0 2.262758493423462 0.23384609818458557 -0.2839455306529999 0.0 0.0 -1.0 0.8920276165008545 0.6535477638244629 0 1.0 0 0.0 0 0.0 0 0.0 1.914123296737671 0.23349463939666748 -0.2839455306529999 0.0 0.0 -1.0 0.10352206230163574 0.646332859992981 0 1.0 0 0.0 0 0.0 0 0.0 1.9182569980621338 0.24249932169914246 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.10260581970214844 0.6557139158248901 0 1.0 0 0.0 0 0.0 0 0.0 2.0323092937469482 0.24188390374183655 -0.2839455306529999 0.0 0.0 -1.0 0.04287832975387573 0.684563398361206 0 1.0 0 0.0 0 0.0 0 0.0 1.914123296737671 0.23349463939666748 -0.2839455306529999 0.0 0.0 -1.0 0.10352206230163574 0.646332859992981 0 1.0 0 0.0 0 0.0 0 0.0 2.0323092937469482 0.24188390374183655 -0.2839455306529999 0.0 0.0 -1.0 0.04287832975387573 0.684563398361206 0 1.0 0 0.0 0 0.0 0 0.0 2.0280210971832275 0.23847129940986633 -0.2839455306529999 0.0 0.0 -1.0 0.045444995164871216 0.6800327301025391 0 1.0 0 0.0 0 0.0 0 0.0 2.1562039852142334 0.23587459325790405 -0.2839455306529999 0.0 0.0 -1.0 0.9559001922607422 0.6815630197525024 0 1.0 0 0.0 0 0.0 0 0.0 2.1525394916534424 0.2393469512462616 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.958290696144104 0.6859949827194214 0 1.0 0 0.0 0 0.0 0 0.0 2.262758493423462 0.23384609818458557 -0.2839455306529999 0.0 0.0 -1.0 0.8920276165008545 0.6535477638244629 0 1.0 0 0.0 0 0.0 0 0.0 1.914123296737671 0.23349463939666748 -0.2839455306529999 0.0 0.0 -1.0 0.10352206230163574 0.646332859992981 0 1.0 0 0.0 0 0.0 0 0.0 2.0280210971832275 0.23847129940986633 -0.2839455306529999 0.0 0.0 -1.0 0.045444995164871216 0.6800327301025391 0 1.0 0 0.0 0 0.0 0 0.0 2.0239274501800537 0.23475462198257446 -0.2839455306529999 0.0 0.0 -1.0 0.04782417416572571 0.6751836538314819 0 1.0 0 0.0 0 0.0 0 0.0 2.1595494747161865 0.23228806257247925 -0.2839455306529999 0.0 0.0 -1.0 0.9537681341171265 0.6770002841949463 0 1.0 0 0.0 0 0.0 0 0.0 2.1562039852142334 0.23587459325790405 -0.2839455306529999 0.0 0.0 -1.0 0.9559001922607422 0.6815630197525024 0 1.0 0 0.0 0 0.0 0 0.0 2.262758493423462 0.23384609818458557 -0.2839455306529999 0.0 0.0 -1.0 0.8920276165008545 0.6535477638244629 0 1.0 0 0.0 0 0.0 0 0.0 1.914123296737671 0.23349463939666748 -0.2839455306529999 0.0 0.0 -1.0 0.10352206230163574 0.646332859992981 0 1.0 0 0.0 0 0.0 0 0.0 2.0239274501800537 0.23475462198257446 -0.2839455306529999 0.0 0.0 -1.0 0.04782417416572571 0.6751836538314819 0 1.0 0 0.0 0 0.0 0 0.0 2.020052671432495 0.23072659969329834 -0.2839455306529999 0.0 0.0 -1.0 0.05000510811805725 0.6700170040130615 0 1.0 0 0.0 0 0.0 0 0.0 2.1595494747161865 0.23228806257247925 -0.2839455306529999 0.0 0.0 -1.0 0.9537681341171265 0.6770002841949463 0 1.0 0 0.0 0 0.0 0 0.0 2.262758493423462 0.23384609818458557 -0.2839455306529999 0.0 0.0 -1.0 0.8920276165008545 0.6535477638244629 0 1.0 0 0.0 0 0.0 0 0.0 2.2658889293670654 0.2249472439289093 -0.2839455306529999 0.0 0.0 -1.0 0.8913447856903076 0.6436830163002014 0 1.0 0 0.0 0 0.0 0 0.0 1.9106242656707764 0.22422727942466736 -0.2839455306529999 0.0 0.0 -1.0 0.10414043068885803 0.6368800401687622 0 1.0 0 0.0 0 0.0 0 0.0 1.914123296737671 0.23349463939666748 -0.2839455306529999 0.0 0.0 -1.0 0.10352206230163574 0.646332859992981 0 1.0 0 0.0 0 0.0 0 0.0 2.020052671432495 0.23072659969329834 -0.2839455306529999 0.0 0.0 -1.0 0.05000510811805725 0.6700170040130615 0 1.0 0 0.0 0 0.0 0 0.0 2.16257643699646 0.22858721017837524 -0.2839455306529999 0.0 0.0 -1.0 0.9518887996673584 0.6723135113716125 0 1.0 0 0.0 0 0.0 0 0.0 2.1595494747161865 0.23228806257247925 -0.2839455306529999 0.0 0.0 -1.0 0.9537681341171265 0.6770002841949463 0 1.0 0 0.0 0 0.0 0 0.0 2.2658889293670654 0.2249472439289093 -0.2839455306529999 0.0 0.0 -1.0 0.8913447856903076 0.6436830163002014 0 1.0 0 0.0 0 0.0 0 0.0 1.9106242656707764 0.22422727942466736 -0.2839455306529999 0.0 0.0 -1.0 0.10414043068885803 0.6368800401687622 0 1.0 0 0.0 0 0.0 0 0.0 2.020052671432495 0.23072659969329834 -0.2839455306529999 0.0 0.0 -1.0 0.05000510811805725 0.6700170040130615 0 1.0 0 0.0 0 0.0 0 0.0 2.0163967609405518 0.22638723254203796 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.051993101835250854 0.6645351648330688 0 1.0 0 0.0 0 0.0 0 0.0 2.1652848720550537 0.22477203607559204 -0.2839455306529999 0.0 0.0 -1.0 0.95025634765625 0.6675083637237549 0 1.0 0 0.0 0 0.0 0 0.0 2.16257643699646 0.22858721017837524 -0.2839455306529999 0.0 0.0 -1.0 0.9518887996673584 0.6723135113716125 0 1.0 0 0.0 0 0.0 0 0.0 2.2658889293670654 0.2249472439289093 -0.2839455306529999 0.0 0.0 -1.0 0.8913447856903076 0.6436830163002014 0 1.0 0 0.0 0 0.0 0 0.0 1.9106242656707764 0.22422727942466736 -0.2839455306529999 0.0 0.0 -1.0 0.10414043068885803 0.6368800401687622 0 1.0 0 0.0 0 0.0 0 0.0 2.0163967609405518 0.22638723254203796 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.051993101835250854 0.6645351648330688 0 1.0 0 0.0 0 0.0 0 0.0 2.0129597187042236 0.22173652052879333 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.05379372835159302 0.6587395071983337 0 1.0 0 0.0 0 0.0 0 0.0 2.1652848720550537 0.22477203607559204 -0.2839455306529999 0.0 0.0 -1.0 0.95025634765625 0.6675083637237549 0 1.0 0 0.0 0 0.0 0 0.0 2.2658889293670654 0.2249472439289093 -0.2839455306529999 0.0 0.0 -1.0 0.8913447856903076 0.6436830163002014 0 1.0 0 0.0 0 0.0 0 0.0 2.2683236598968506 0.2158464789390564 -0.2839455306529999 0.0 0.0 -1.0 0.8910309076309204 0.6337556838989258 0 1.0 0 0.0 0 0.0 0 0.0 2.1676747798919678 0.22084254026412964 -0.2839455306529999 0.0 0.0 -1.0 0.9488654136657715 0.6625887155532837 0 1.0 0 0.0 0 0.0 0 0.0 2.1652848720550537 0.22477203607559204 -0.2839455306529999 0.0 0.0 -1.0 0.95025634765625 0.6675083637237549 0 1.0 0 0.0 0 0.0 0 0.0 2.2683236598968506 0.2158464789390564 -0.2839455306529999 0.0 0.0 -1.0 0.8910309076309204 0.6337556838989258 0 1.0 0 0.0 0 0.0 0 0.0 1.9077603816986084 0.2146972119808197 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.10447537899017334 0.6273366212844849 0 1.0 0 0.0 0 0.0 0 0.0 1.9106242656707764 0.22422727942466736 -0.2839455306529999 0.0 0.0 -1.0 0.10414043068885803 0.6368800401687622 0 1.0 0 0.0 0 0.0 0 0.0 2.0129597187042236 0.22173652052879333 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.05379372835159302 0.6587395071983337 0 1.0 0 0.0 0 0.0 0 0.0 1.9077603816986084 0.2146972119808197 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.10447537899017334 0.6273366212844849 0 1.0 0 0.0 0 0.0 0 0.0 2.0129597187042236 0.22173652052879333 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.05379372835159302 0.6587395071983337 0 1.0 0 0.0 0 0.0 0 0.0 2.0097415447235107 0.21677446365356445 -0.2839455306529999 0.0 0.0 -1.0 0.0554124116897583 0.652630627155304 0 1.0 0 0.0 0 0.0 0 0.0 2.169746160507202 0.21679872274398804 -0.2839455306529999 0.0 0.0 -1.0 0.9477107524871826 0.6575570106506348 0 1.0 0 0.0 0 0.0 0 0.0 2.1676747798919678 0.22084254026412964 -0.2839455306529999 0.0 0.0 -1.0 0.9488654136657715 0.6625887155532837 0 1.0 0 0.0 0 0.0 0 0.0 2.2683236598968506 0.2158464789390564 -0.2839455306529999 0.0 0.0 -1.0 0.8910309076309204 0.6337556838989258 0 1.0 0 0.0 0 0.0 0 0.0 2.1714985370635986 0.21264058351516724 -0.2839455306529999 0.0 0.0 -1.0 0.9467873573303223 0.6524146795272827 0 1.0 0 0.0 0 0.0 0 0.0 2.169746160507202 0.21679872274398804 -0.2839455306529999 0.0 0.0 -1.0 0.9477107524871826 0.6575570106506348 0 1.0 0 0.0 0 0.0 0 0.0 2.2683236598968506 0.2158464789390564 -0.2839455306529999 0.0 0.0 -1.0 0.8910309076309204 0.6337556838989258 0 1.0 0 0.0 0 0.0 0 0.0 1.9077603816986084 0.2146972119808197 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.10447537899017334 0.6273366212844849 0 1.0 0 0.0 0 0.0 0 0.0 2.0097415447235107 0.21677446365356445 -0.2839455306529999 0.0 0.0 -1.0 0.0554124116897583 0.652630627155304 0 1.0 0 0.0 0 0.0 0 0.0 2.006742238998413 0.21150106191635132 -0.2839455306529999 0.0 0.0 -1.0 0.05685460567474365 0.6462084054946899 0 1.0 0 0.0 0 0.0 0 0.0 2.1714985370635986 0.21264058351516724 -0.2839455306529999 0.0 0.0 -1.0 0.9467873573303223 0.6524146795272827 0 1.0 0 0.0 0 0.0 0 0.0 2.2683236598968506 0.2158464789390564 -0.2839455306529999 0.0 0.0 -1.0 0.8910309076309204 0.6337556838989258 0 1.0 0 0.0 0 0.0 0 0.0 2.2700626850128174 0.20654383301734924 -0.2839455306529999 0.0 0.0 -1.0 0.8910720348358154 0.6237470507621765 0 1.0 0 0.0 0 0.0 0 0.0 1.9055311679840088 0.2049044370651245 -0.2839455306529999 0.0 0.0 -1.0 0.10453879833221436 0.6176819205284119 0 1.0 0 0.0 0 0.0 0 0.0 1.9077603816986084 0.2146972119808197 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.10447537899017334 0.6273366212844849 0 1.0 0 0.0 0 0.0 0 0.0 2.006742238998413 0.21150106191635132 -0.2839455306529999 0.0 0.0 -1.0 0.05685460567474365 0.6462084054946899 0 1.0 0 0.0 0 0.0 0 0.0 2.1729323863983154 0.20836812257766724 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9460904598236084 0.6471614837646484 0 1.0 0 0.0 0 0.0 0 0.0 2.1714985370635986 0.21264058351516724 -0.2839455306529999 0.0 0.0 -1.0 0.9467873573303223 0.6524146795272827 0 1.0 0 0.0 0 0.0 0 0.0 2.2700626850128174 0.20654383301734924 -0.2839455306529999 0.0 0.0 -1.0 0.8910720348358154 0.6237470507621765 0 1.0 0 0.0 0 0.0 0 0.0 1.9055311679840088 0.2049044370651245 -0.2839455306529999 0.0 0.0 -1.0 0.10453879833221436 0.6176819205284119 0 1.0 0 0.0 0 0.0 0 0.0 2.006742238998413 0.21150106191635132 -0.2839455306529999 0.0 0.0 -1.0 0.05685460567474365 0.6462084054946899 0 1.0 0 0.0 0 0.0 0 0.0 2.0039618015289307 0.20591631531715393 -0.2839455306529999 0.0 0.0 -1.0 0.058125704526901245 0.6394720077514648 0 1.0 0 0.0 0 0.0 0 0.0 2.1740477085113525 0.20398133993148804 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.945615291595459 0.6417965888977051 0 1.0 0 0.0 0 0.0 0 0.0 2.1729323863983154 0.20836812257766724 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9460904598236084 0.6471614837646484 0 1.0 0 0.0 0 0.0 0 0.0 2.2700626850128174 0.20654383301734924 -0.2839455306529999 0.0 0.0 -1.0 0.8910720348358154 0.6237470507621765 0 1.0 0 0.0 0 0.0 0 0.0 2.1740477085113525 0.20398133993148804 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.945615291595459 0.6417965888977051 0 1.0 0 0.0 0 0.0 0 0.0 2.2700626850128174 0.20654383301734924 -0.2839455306529999 0.0 0.0 -1.0 0.8910720348358154 0.6237470507621765 0 1.0 0 0.0 0 0.0 0 0.0 2.271106004714966 0.19703930616378784 -0.2839455306529999 0.0 0.0 -1.0 0.8914575576782227 0.6136360168457031 0 1.0 0 0.0 0 0.0 0 0.0 1.9055311679840088 0.2049044370651245 -0.2839455306529999 0.0 0.0 -1.0 0.10453879833221436 0.6176819205284119 0 1.0 0 0.0 0 0.0 0 0.0 2.0039618015289307 0.20591631531715393 -0.2839455306529999 0.0 0.0 -1.0 0.058125704526901245 0.6394720077514648 0 1.0 0 0.0 0 0.0 0 0.0 2.0014007091522217 0.2000202238559723 -0.2839455306529999 0.0 0.0 -1.0 0.05923062562942505 0.6324205994606018 0 1.0 0 0.0 0 0.0 0 0.0 1.9039366245269775 0.19484898447990417 -0.2839455306529999 0.0 0.0 -1.0 0.10434016585350037 0.6078946590423584 0 1.0 0 0.0 0 0.0 0 0.0 1.9055311679840088 0.2049044370651245 -0.2839455306529999 0.0 0.0 -1.0 0.10453879833221436 0.6176819205284119 0 1.0 0 0.0 0 0.0 0 0.0 2.0014007091522217 0.2000202238559723 -0.2839455306529999 0.0 0.0 -1.0 0.05923062562942505 0.6324205994606018 0 1.0 0 0.0 0 0.0 0 0.0 2.17484450340271 0.19948023557662964 -0.2839455306529999 0.0 0.0 -1.0 0.9453579187393188 0.6363179683685303 0 1.0 0 0.0 0 0.0 0 0.0 2.1740477085113525 0.20398133993148804 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.945615291595459 0.6417965888977051 0 1.0 0 0.0 0 0.0 0 0.0 2.271106004714966 0.19703930616378784 -0.2839455306529999 0.0 0.0 -1.0 0.8914575576782227 0.6136360168457031 0 1.0 0 0.0 0 0.0 0 0.0 1.9039366245269775 0.19484898447990417 -0.2839455306529999 0.0 0.0 -1.0 0.10434016585350037 0.6078946590423584 0 1.0 0 0.0 0 0.0 0 0.0 2.0014007091522217 0.2000202238559723 -0.2839455306529999 0.0 0.0 -1.0 0.05923062562942505 0.6324205994606018 0 1.0 0 0.0 0 0.0 0 0.0 1.999058485031128 0.1938127875328064 -0.2839455306529999 0.0 0.0 -1.0 0.060174643993377686 0.6250530481338501 0 1.0 0 0.0 0 0.0 0 0.0 2.1753222942352295 0.19486480951309204 -0.2839455306529999 0.0 0.0 -1.0 0.9453150033950806 0.6307230591773987 0 1.0 0 0.0 0 0.0 0 0.0 2.17484450340271 0.19948023557662964 -0.2839455306529999 0.0 0.0 -1.0 0.9453579187393188 0.6363179683685303 0 1.0 0 0.0 0 0.0 0 0.0 2.271106004714966 0.19703930616378784 -0.2839455306529999 0.0 0.0 -1.0 0.8914575576782227 0.6136360168457031 0 1.0 0 0.0 0 0.0 0 0.0 2.1753222942352295 0.19486480951309204 -0.2839455306529999 0.0 0.0 -1.0 0.9453150033950806 0.6307230591773987 0 1.0 0 0.0 0 0.0 0 0.0 2.271106004714966 0.19703930616378784 -0.2839455306529999 0.0 0.0 -1.0 0.8914575576782227 0.6136360168457031 0 1.0 0 0.0 0 0.0 0 0.0 2.271453619003296 0.18733292818069458 -0.2839455306529999 0.0 0.0 -1.0 0.8921797275543213 0.6034001111984253 0 1.0 0 0.0 0 0.0 0 0.0 2.1754815578460693 0.19013503193855286 -0.2839455306529999 0.0 0.0 -1.0 0.9454828500747681 0.6250084638595581 0 1.0 0 0.0 0 0.0 0 0.0 2.1753222942352295 0.19486480951309204 -0.2839455306529999 0.0 0.0 -1.0 0.9453150033950806 0.6307230591773987 0 1.0 0 0.0 0 0.0 0 0.0 2.271453619003296 0.18733292818069458 -0.2839455306529999 0.0 0.0 -1.0 0.8921797275543213 0.6034001111984253 0 1.0 0 0.0 0 0.0 0 0.0 1.9029772281646729 0.1845308244228363 -0.2839455306529999 0.0 0.0 -1.0 0.10388633608818054 0.5979529023170471 0 1.0 0 0.0 0 0.0 0 0.0 1.9039366245269775 0.19484898447990417 -0.2839455306529999 0.0 0.0 -1.0 0.10434016585350037 0.6078946590423584 0 1.0 0 0.0 0 0.0 0 0.0 1.999058485031128 0.1938127875328064 -0.2839455306529999 0.0 0.0 -1.0 0.060174643993377686 0.6250530481338501 0 1.0 0 0.0 0 0.0 0 0.0 1.9029772281646729 0.1845308244228363 -0.2839455306529999 0.0 0.0 -1.0 0.10388633608818054 0.5979529023170471 0 1.0 0 0.0 0 0.0 0 0.0 1.999058485031128 0.1938127875328064 -0.2839455306529999 0.0 0.0 -1.0 0.060174643993377686 0.6250530481338501 0 1.0 0 0.0 0 0.0 0 0.0 1.9969351291656494 0.18729400634765625 -0.2839455306529999 0.0 0.0 -1.0 0.06096261739730835 0.6173686385154724 0 1.0 0 0.0 0 0.0 0 0.0 2.175391912460327 0.18671512603759766 -0.2839455306529999 0.0 0.0 -1.0 0.9457338452339172 0.6208869218826294 0 1.0 0 0.0 0 0.0 0 0.0 2.1754815578460693 0.19013503193855286 -0.2839455306529999 0.0 0.0 -1.0 0.9454828500747681 0.6250084638595581 0 1.0 0 0.0 0 0.0 0 0.0 2.271453619003296 0.18733292818069458 -0.2839455306529999 0.0 0.0 -1.0 0.8921797275543213 0.6034001111984253 0 1.0 0 0.0 0 0.0 0 0.0 2.175391912460327 0.18671512603759766 -0.2839455306529999 0.0 0.0 -1.0 0.9457338452339172 0.6208869218826294 0 1.0 0 0.0 0 0.0 0 0.0 2.271453619003296 0.18733292818069458 -0.2839455306529999 0.0 0.0 -1.0 0.8921797275543213 0.6034001111984253 0 1.0 0 0.0 0 0.0 0 0.0 2.2713258266448975 0.18192818760871887 -0.2839455306529999 0.0 0.0 -1.0 0.892727255821228 0.597734272480011 0 1.0 0 0.0 0 0.0 0 0.0 1.9029772281646729 0.1845308244228363 -0.2839455306529999 0.0 0.0 -1.0 0.10388633608818054 0.5979529023170471 0 1.0 0 0.0 0 0.0 0 0.0 1.9969351291656494 0.18729400634765625 -0.2839455306529999 0.0 0.0 -1.0 0.06096261739730835 0.6173686385154724 0 1.0 0 0.0 0 0.0 0 0.0 1.9950306415557861 0.18046388030052185 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.061599165201187134 0.6093670129776001 0 1.0 0 0.0 0 0.0 0 0.0 2.175122022628784 0.18334385752677917 -0.2839455306529999 0.0 0.0 -1.0 0.9460951685905457 0.6168336868286133 0 1.0 0 0.0 0 0.0 0 0.0 2.175391912460327 0.18671512603759766 -0.2839455306529999 0.0 0.0 -1.0 0.9457338452339172 0.6208869218826294 0 1.0 0 0.0 0 0.0 0 0.0 2.2713258266448975 0.18192818760871887 -0.2839455306529999 0.0 0.0 -1.0 0.892727255821228 0.597734272480011 0 1.0 0 0.0 0 0.0 0 0.0 1.993345022201538 0.17332243919372559 -0.2839455306529999 0.0 0.0 -1.0 0.062088608741760254 0.6010488271713257 0 1.0 0 0.0 0 0.0 0 0.0 1.9029772281646729 0.1845308244228363 -0.2839455306529999 0.0 0.0 -1.0 0.10388633608818054 0.5979529023170471 0 1.0 0 0.0 0 0.0 0 0.0 1.9950306415557861 0.18046388030052185 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.061599165201187134 0.6093670129776001 0 1.0 0 0.0 0 0.0 0 0.0 2.1746718883514404 0.1800212264060974 -0.2839455306529999 0.0 0.0 -1.0 0.946566104888916 0.612848162651062 0 1.0 0 0.0 0 0.0 0 0.0 2.175122022628784 0.18334385752677917 -0.2839455306529999 0.0 0.0 -1.0 0.9460951685905457 0.6168336868286133 0 1.0 0 0.0 0 0.0 0 0.0 2.2713258266448975 0.18192818760871887 -0.2839455306529999 0.0 0.0 -1.0 0.892727255821228 0.597734272480011 0 1.0 0 0.0 0 0.0 0 0.0 2.1746718883514404 0.1800212264060974 -0.2839455306529999 0.0 0.0 -1.0 0.946566104888916 0.612848162651062 0 1.0 0 0.0 0 0.0 0 0.0 2.2713258266448975 0.18192818760871887 -0.2839455306529999 0.0 0.0 -1.0 0.892727255821228 0.597734272480011 0 1.0 0 0.0 0 0.0 0 0.0 2.2709429264068604 0.17657208442687988 -0.2839455306529999 0.0 0.0 -1.0 0.8933857083320618 0.5921443700790405 0 1.0 0 0.0 0 0.0 0 0.0 2.174041986465454 0.17674723267555237 -0.2839455306529999 0.0 0.0 -1.0 0.9471457004547119 0.6089298129081726 0 1.0 0 0.0 0 0.0 0 0.0 2.1746718883514404 0.1800212264060974 -0.2839455306529999 0.0 0.0 -1.0 0.946566104888916 0.612848162651062 0 1.0 0 0.0 0 0.0 0 0.0 2.2709429264068604 0.17657208442687988 -0.2839455306529999 0.0 0.0 -1.0 0.8933857083320618 0.5921443700790405 0 1.0 0 0.0 0 0.0 0 0.0 2.173231840133667 0.17352190613746643 -0.2839455306529999 0.0 0.0 -1.0 0.947833776473999 0.6050781011581421 0 1.0 0 0.0 0 0.0 0 0.0 2.174041986465454 0.17674723267555237 -0.2839455306529999 0.0 0.0 -1.0 0.9471457004547119 0.6089298129081726 0 1.0 0 0.0 0 0.0 0 0.0 2.2709429264068604 0.17657208442687988 -0.2839455306529999 0.0 0.0 -1.0 0.8933857083320618 0.5921443700790405 0 1.0 0 0.0 0 0.0 0 0.0 2.173231840133667 0.17352190613746643 -0.2839455306529999 0.0 0.0 -1.0 0.947833776473999 0.6050781011581421 0 1.0 0 0.0 0 0.0 0 0.0 2.2709429264068604 0.17657208442687988 -0.2839455306529999 0.0 0.0 -1.0 0.8933857083320618 0.5921443700790405 0 1.0 0 0.0 0 0.0 0 0.0 2.2703044414520264 0.1712646186351776 -0.2839455306529999 0.0 0.0 -1.0 0.8941553831100464 0.5866265892982483 0 1.0 0 0.0 0 0.0 0 0.0 2.1722419261932373 0.1703452169895172 -0.2839455306529999 0.0 0.0 -1.0 0.9486297369003296 0.6012919545173645 0 1.0 0 0.0 0 0.0 0 0.0 2.173231840133667 0.17352190613746643 -0.2839455306529999 0.0 0.0 -1.0 0.947833776473999 0.6050781011581421 0 1.0 0 0.0 0 0.0 0 0.0 2.2703044414520264 0.1712646186351776 -0.2839455306529999 0.0 0.0 -1.0 0.8941553831100464 0.5866265892982483 0 1.0 0 0.0 0 0.0 0 0.0 2.1722419261932373 0.1703452169895172 -0.2839455306529999 0.0 0.0 -1.0 0.9486297369003296 0.6012919545173645 0 1.0 0 0.0 0 0.0 0 0.0 2.2703044414520264 0.1712646186351776 -0.2839455306529999 0.0 0.0 -1.0 0.8941553831100464 0.5866265892982483 0 1.0 0 0.0 0 0.0 0 0.0 2.2694103717803955 0.16600582003593445 -0.2839455306529999 0.0 0.0 -1.0 0.8950365781784058 0.5811769962310791 0 1.0 0 0.0 0 0.0 0 0.0 2.171071767807007 0.1672171652317047 -0.2839455306529999 0.0 0.0 -1.0 0.9495338201522827 0.5975706577301025 0 1.0 0 0.0 0 0.0 0 0.0 2.1722419261932373 0.1703452169895172 -0.2839455306529999 0.0 0.0 -1.0 0.9486297369003296 0.6012919545173645 0 1.0 0 0.0 0 0.0 0 0.0 2.2694103717803955 0.16600582003593445 -0.2839455306529999 0.0 0.0 -1.0 0.8950365781784058 0.5811769962310791 0 1.0 0 0.0 0 0.0 0 0.0 2.169721841812134 0.16413778066635132 -0.2839455306529999 0.0 0.0 -1.0 0.9505453109741211 0.593913197517395 0 1.0 0 0.0 0 0.0 0 0.0 2.171071767807007 0.1672171652317047 -0.2839455306529999 0.0 0.0 -1.0 0.9495338201522827 0.5975706577301025 0 1.0 0 0.0 0 0.0 0 0.0 2.2694103717803955 0.16600582003593445 -0.2839455306529999 0.0 0.0 -1.0 0.8950365781784058 0.5811769962310791 0 1.0 0 0.0 0 0.0 0 0.0 2.169721841812134 0.16413778066635132 -0.2839455306529999 0.0 0.0 -1.0 0.9505453109741211 0.593913197517395 0 1.0 0 0.0 0 0.0 0 0.0 2.2694103717803955 0.16600582003593445 -0.2839455306529999 0.0 0.0 -1.0 0.8950365781784058 0.5811769962310791 0 1.0 0 0.0 0 0.0 0 0.0 2.268261194229126 0.160795658826828 -0.2839455306529999 0.0 0.0 -1.0 0.8960297703742981 0.5757913589477539 0 1.0 0 0.0 0 0.0 0 0.0 2.16819167137146 0.16110703349113464 -0.2839455306529999 0.0 0.0 -1.0 0.9516648054122925 0.5903184413909912 0 1.0 0 0.0 0 0.0 0 0.0 2.169721841812134 0.16413778066635132 -0.2839455306529999 0.0 0.0 -1.0 0.9505453109741211 0.593913197517395 0 1.0 0 0.0 0 0.0 0 0.0 2.268261194229126 0.160795658826828 -0.2839455306529999 0.0 0.0 -1.0 0.8960297703742981 0.5757913589477539 0 1.0 0 0.0 0 0.0 0 0.0 2.1664817333221436 0.1581249237060547 -0.2839455306529999 0.0 0.0 -1.0 0.9528919458389282 0.5867855548858643 0 1.0 0 0.0 0 0.0 0 0.0 2.16819167137146 0.16110703349113464 -0.2839455306529999 0.0 0.0 -1.0 0.9516648054122925 0.5903184413909912 0 1.0 0 0.0 0 0.0 0 0.0 2.268261194229126 0.160795658826828 -0.2839455306529999 0.0 0.0 -1.0 0.8960297703742981 0.5757913589477539 0 1.0 0 0.0 0 0.0 0 0.0 2.1664817333221436 0.1581249237060547 -0.2839455306529999 0.0 0.0 -1.0 0.9528919458389282 0.5867855548858643 0 1.0 0 0.0 0 0.0 0 0.0 2.268261194229126 0.160795658826828 -0.2839455306529999 0.0 0.0 -1.0 0.8960297703742981 0.5757913589477539 0 1.0 0 0.0 0 0.0 0 0.0 2.2668564319610596 0.15563416481018066 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8971360921859741 0.5704658031463623 0 1.0 0 0.0 0 0.0 0 0.0 2.1645915508270264 0.15519148111343384 -0.2839455306529999 0.0 0.0 -1.0 0.9542272686958313 0.5833134055137634 0 1.0 0 0.0 0 0.0 0 0.0 2.1664817333221436 0.1581249237060547 -0.2839455306529999 0.0 0.0 -1.0 0.9528919458389282 0.5867855548858643 0 1.0 0 0.0 0 0.0 0 0.0 2.2668564319610596 0.15563416481018066 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8971360921859741 0.5704658031463623 0 1.0 0 0.0 0 0.0 0 0.0 2.1645915508270264 0.15519148111343384 -0.2839455306529999 0.0 0.0 -1.0 0.9542272686958313 0.5833134055137634 0 1.0 0 0.0 0 0.0 0 0.0 2.2668564319610596 0.15563416481018066 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8971360921859741 0.5704658031463623 0 1.0 0 0.0 0 0.0 0 0.0 2.2651965618133545 0.15052130818367004 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8983566761016846 0.5651962161064148 0 1.0 0 0.0 0 0.0 0 0.0 2.1625216007232666 0.1523066759109497 -0.2839455306529999 0.0 0.0 -1.0 0.9556704759597778 0.5799009799957275 0 1.0 0 0.0 0 0.0 0 0.0 2.1645915508270264 0.15519148111343384 -0.2839455306529999 0.0 0.0 -1.0 0.9542272686958313 0.5833134055137634 0 1.0 0 0.0 0 0.0 0 0.0 2.2651965618133545 0.15052130818367004 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8983566761016846 0.5651962161064148 0 1.0 0 0.0 0 0.0 0 0.0 2.1608784198760986 0.15032914280891418 -0.2839455306529999 0.0 0.0 -1.0 0.9567999243736267 0.5775706768035889 0 1.0 0 0.0 0 0.0 0 0.0 2.1625216007232666 0.1523066759109497 -0.2839455306529999 0.0 0.0 -1.0 0.9556704759597778 0.5799009799957275 0 1.0 0 0.0 0 0.0 0 0.0 2.2651965618133545 0.15052130818367004 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8983566761016846 0.5651962161064148 0 1.0 0 0.0 0 0.0 0 0.0 2.1608784198760986 0.15032914280891418 -0.2839455306529999 0.0 0.0 -1.0 0.9567999243736267 0.5775706768035889 0 1.0 0 0.0 0 0.0 0 0.0 2.2651965618133545 0.15052130818367004 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8983566761016846 0.5651962161064148 0 1.0 0 0.0 0 0.0 0 0.0 2.2632811069488525 0.14545708894729614 -0.2839455306529999 0.0 0.0 -1.0 0.8996932506561279 0.5599786043167114 0 1.0 0 0.0 0 0.0 0 0.0 2.15875506401062 0.14801594614982605 -0.2839455306529999 0.0 0.0 -1.0 0.958246648311615 0.5748494267463684 0 1.0 0 0.0 0 0.0 0 0.0 2.1608784198760986 0.15032914280891418 -0.2839455306529999 0.0 0.0 -1.0 0.9567999243736267 0.5775706768035889 0 1.0 0 0.0 0 0.0 0 0.0 2.2632811069488525 0.14545708894729614 -0.2839455306529999 0.0 0.0 -1.0 0.8996932506561279 0.5599786043167114 0 1.0 0 0.0 0 0.0 0 0.0 2.1561501026153564 0.1453670859336853 -0.2839455306529999 0.0 0.0 -1.0 0.9600106477737427 0.5717301964759827 0 1.0 0 0.0 0 0.0 0 0.0 2.15875506401062 0.14801594614982605 -0.2839455306529999 0.0 0.0 -1.0 0.958246648311615 0.5748494267463684 0 1.0 0 0.0 0 0.0 0 0.0 2.2632811069488525 0.14545708894729614 -0.2839455306529999 0.0 0.0 -1.0 0.8996932506561279 0.5599786043167114 0 1.0 0 0.0 0 0.0 0 0.0 2.1561501026153564 0.1453670859336853 -0.2839455306529999 0.0 0.0 -1.0 0.9600106477737427 0.5717301964759827 0 1.0 0 0.0 0 0.0 0 0.0 2.2632811069488525 0.14545708894729614 -0.2839455306529999 0.0 0.0 -1.0 0.8996932506561279 0.5599786043167114 0 1.0 0 0.0 0 0.0 0 0.0 2.2611100673675537 0.14044153690338135 -0.2839455306529999 0.0 0.0 -1.0 0.9011474847793579 0.5548092126846313 0 1.0 0 0.0 0 0.0 0 0.0 2.1530635356903076 0.14238256216049194 -0.2839455306529999 0.0 0.0 -1.0 0.9620909690856934 0.5682055354118347 0 1.0 0 0.0 0 0.0 0 0.0 2.1561501026153564 0.1453670859336853 -0.2839455306529999 0.0 0.0 -1.0 0.9600106477737427 0.5717301964759827 0 1.0 0 0.0 0 0.0 0 0.0 2.2611100673675537 0.14044153690338135 -0.2839455306529999 0.0 0.0 -1.0 0.9011474847793579 0.5548092126846313 0 1.0 0 0.0 0 0.0 0 0.0 2.1494953632354736 0.13906237483024597 -0.2839455306529999 0.0 0.0 -1.0 0.9644855260848999 0.5642683506011963 0 1.0 0 0.0 0 0.0 0 0.0 2.1530635356903076 0.14238256216049194 -0.2839455306529999 0.0 0.0 -1.0 0.9620909690856934 0.5682055354118347 0 1.0 0 0.0 0 0.0 0 0.0 2.2611100673675537 0.14044153690338135 -0.2839455306529999 0.0 0.0 -1.0 0.9011474847793579 0.5548092126846313 0 1.0 0 0.0 0 0.0 0 0.0 2.1494953632354736 0.13906237483024597 -0.2839455306529999 0.0 0.0 -1.0 0.9644855260848999 0.5642683506011963 0 1.0 0 0.0 0 0.0 0 0.0 2.2611100673675537 0.14044153690338135 -0.2839455306529999 0.0 0.0 -1.0 0.9011474847793579 0.5548092126846313 0 1.0 0 0.0 0 0.0 0 0.0 2.258683919906616 0.13547462224960327 -0.2839455306529999 0.0 0.0 -1.0 0.9027214050292969 0.5496842861175537 0 1.0 0 0.0 0 0.0 0 0.0 2.1454455852508545 0.135406494140625 -0.2839455306529999 0.0 0.0 -1.0 0.9671920537948608 0.5599122643470764 0 1.0 0 0.0 0 0.0 0 0.0 2.1494953632354736 0.13906237483024597 -0.2839455306529999 0.0 0.0 -1.0 0.9644855260848999 0.5642683506011963 0 1.0 0 0.0 0 0.0 0 0.0 2.258683919906616 0.13547462224960327 -0.2839455306529999 0.0 0.0 -1.0 0.9027214050292969 0.5496842861175537 0 1.0 0 0.0 0 0.0 0 0.0 2.1454455852508545 0.135406494140625 -0.2839455306529999 0.0 0.0 -1.0 0.9671920537948608 0.5599122643470764 0 1.0 0 0.0 0 0.0 0 0.0 2.258683919906616 0.13547462224960327 -0.2839455306529999 0.0 0.0 -1.0 0.9027214050292969 0.5496842861175537 0 1.0 0 0.0 0 0.0 0 0.0 2.256002187728882 0.13055634498596191 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9044173359870911 0.5446003675460815 0 1.0 0 0.0 0 0.0 0 0.0 2.14091420173645 0.13141494989395142 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9702067375183105 0.5551329851150513 0 1.0 0 0.0 0 0.0 0 0.0 2.1454455852508545 0.135406494140625 -0.2839455306529999 0.0 0.0 -1.0 0.9671920537948608 0.5599122643470764 0 1.0 0 0.0 0 0.0 0 0.0 2.256002187728882 0.13055634498596191 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9044173359870911 0.5446003675460815 0 1.0 0 0.0 0 0.0 0 0.0 2.1359012126922607 0.12708774209022522 -0.2839455306529999 0.0 0.0 -1.0 0.9735246300697327 0.5499288439750671 0 1.0 0 0.0 0 0.0 0 0.0 2.14091420173645 0.13141494989395142 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9702067375183105 0.5551329851150513 0 1.0 0 0.0 0 0.0 0 0.0 2.256002187728882 0.13055634498596191 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9044173359870911 0.5446003675460815 0 1.0 0 0.0 0 0.0 0 0.0 2.1359012126922607 0.12708774209022522 -0.2839455306529999 0.0 0.0 -1.0 0.9735246300697327 0.5499288439750671 0 1.0 0 0.0 0 0.0 0 0.0 2.256002187728882 0.13055634498596191 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9044173359870911 0.5446003675460815 0 1.0 0 0.0 0 0.0 0 0.0 2.2530648708343506 0.12568670511245728 -0.2839455306529999 0.0 0.0 -1.0 0.9062378406524658 0.5395541191101074 0 1.0 0 0.0 0 0.0 0 0.0 2.130406618118286 0.12242487072944641 -0.2839455306529999 0.0 0.0 -1.0 0.9771391153335571 0.5443018674850464 0 1.0 0 0.0 0 0.0 0 0.0 2.1359012126922607 0.12708774209022522 -0.2839455306529999 0.0 0.0 -1.0 0.9735246300697327 0.5499288439750671 0 1.0 0 0.0 0 0.0 0 0.0 2.2530648708343506 0.12568670511245728 -0.2839455306529999 0.0 0.0 -1.0 0.9062378406524658 0.5395541191101074 0 1.0 0 0.0 0 0.0 0 0.0 2.130406618118286 0.12242487072944641 -0.2839455306529999 0.0 0.0 -1.0 0.9771391153335571 0.5443018674850464 0 1.0 0 0.0 0 0.0 0 0.0 2.2530648708343506 0.12568670511245728 -0.2839455306529999 0.0 0.0 -1.0 0.9062378406524658 0.5395541191101074 0 1.0 0 0.0 0 0.0 0 0.0 2.249709367752075 0.12069547176361084 -0.2839455306529999 0.0 0.0 -1.0 0.9082791805267334 0.5343690514564514 0 1.0 0 0.0 0 0.0 0 0.0 2.1244304180145264 0.11742633581161499 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9810415506362915 0.5382588505744934 0 1.0 0 0.0 0 0.0 0 0.0 2.130406618118286 0.12242487072944641 -0.2839455306529999 0.0 0.0 -1.0 0.9771391153335571 0.5443018674850464 0 1.0 0 0.0 0 0.0 0 0.0 2.249709367752075 0.12069547176361084 -0.2839455306529999 0.0 0.0 -1.0 0.9082791805267334 0.5343690514564514 0 1.0 0 0.0 0 0.0 0 0.0 2.1244304180145264 0.11742633581161499 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9810415506362915 0.5382588505744934 0 1.0 0 0.0 0 0.0 0 0.0 2.249709367752075 0.12069547176361084 -0.2839455306529999 0.0 0.0 -1.0 0.9082791805267334 0.5343690514564514 0 1.0 0 0.0 0 0.0 0 0.0 2.24577260017395 0.11541235446929932 -0.2839455306529999 0.0 0.0 -1.0 0.910639762878418 0.5288608074188232 0 1.0 0 0.0 0 0.0 0 0.0 2.1179726123809814 0.11209213733673096 -0.2839455306529999 0.0 0.0 -1.0 0.9852210283279419 0.5318124890327454 0 1.0 0 0.0 0 0.0 0 0.0 2.1244304180145264 0.11742633581161499 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9810415506362915 0.5382588505744934 0 1.0 0 0.0 0 0.0 0 0.0 2.24577260017395 0.11541235446929932 -0.2839455306529999 0.0 0.0 -1.0 0.910639762878418 0.5288608074188232 0 1.0 0 0.0 0 0.0 0 0.0 2.1179726123809814 0.11209213733673096 -0.2839455306529999 0.0 0.0 -1.0 0.9852210283279419 0.5318124890327454 0 1.0 0 0.0 0 0.0 0 0.0 2.24577260017395 0.11541235446929932 -0.2839455306529999 0.0 0.0 -1.0 0.910639762878418 0.5288608074188232 0 1.0 0 0.0 0 0.0 0 0.0 2.2412545680999756 0.1098373532295227 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9133265018463135 0.5230157375335693 0 1.0 0 0.0 0 0.0 0 0.0 2.1110332012176514 0.10642224550247192 -0.2839455306529999 0.0 0.0 -1.0 0.9896643757820129 0.5249820947647095 0 1.0 0 0.0 0 0.0 0 0.0 2.1179726123809814 0.11209213733673096 -0.2839455306529999 0.0 0.0 -1.0 0.9852210283279419 0.5318124890327454 0 1.0 0 0.0 0 0.0 0 0.0 2.2412545680999756 0.1098373532295227 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9133265018463135 0.5230157375335693 0 1.0 0 0.0 0 0.0 0 0.0 2.1110332012176514 0.10642224550247192 -0.2839455306529999 0.0 0.0 -1.0 0.9896643757820129 0.5249820947647095 0 1.0 0 0.0 0 0.0 0 0.0 2.2412545680999756 0.1098373532295227 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9133265018463135 0.5230157375335693 0 1.0 0 0.0 0 0.0 0 0.0 2.2361552715301514 0.10397043824195862 -0.2839455306529999 0.0 0.0 -1.0 0.9163463115692139 0.5168219804763794 0 1.0 0 0.0 0 0.0 0 0.0 2.1040523052215576 0.10063314437866211 -0.2839455306529999 0.0 0.0 -1.0 0.9940800070762634 0.5180487632751465 0 1.0 0 0.0 0 0.0 0 0.0 2.1110332012176514 0.10642224550247192 -0.2839455306529999 0.0 0.0 -1.0 0.9896643757820129 0.5249820947647095 0 1.0 0 0.0 0 0.0 0 0.0 2.2361552715301514 0.10397043824195862 -0.2839455306529999 0.0 0.0 -1.0 0.9163463115692139 0.5168219804763794 0 1.0 0 0.0 0 0.0 0 0.0 2.1040523052215576 0.10063314437866211 -0.2839455306529999 0.0 0.0 -1.0 0.9940800070762634 0.5180487632751465 0 1.0 0 0.0 0 0.0 0 0.0 2.2361552715301514 0.10397043824195862 -0.2839455306529999 0.0 0.0 -1.0 0.9163463115692139 0.5168219804763794 0 1.0 0 0.0 0 0.0 0 0.0 2.2304742336273193 0.09781163930892944 -0.2839455306529999 0.0 0.0 -1.0 0.9197068810462952 0.5102700591087341 0 1.0 0 0.0 0 0.0 0 0.0 2.0974700450897217 0.09494137763977051 -0.2839455306529999 0.0 0.0 -1.0 0.9981878995895386 0.5112894177436829 0 1.0 0 0.0 0 0.0 0 0.0 2.1040523052215576 0.10063314437866211 -0.2839455306529999 0.0 0.0 -1.0 0.9940800070762634 0.5180487632751465 0 1.0 0 0.0 0 0.0 0 0.0 2.2304742336273193 0.09781163930892944 -0.2839455306529999 0.0 0.0 -1.0 0.9197068810462952 0.5102700591087341 0 1.0 0 0.0 0 0.0 0 0.0 2.0974700450897217 0.09494137763977051 -0.2839455306529999 0.0 0.0 -1.0 0.9981878995895386 0.5112894177436829 0 1.0 0 0.0 0 0.0 0 0.0 2.2304742336273193 0.09781163930892944 -0.2839455306529999 0.0 0.0 -1.0 0.9197068810462952 0.5102700591087341 0 1.0 0 0.0 0 0.0 0 0.0 2.2242119312286377 0.09136095643043518 -0.2839455306529999 0.0 0.0 -1.0 0.923414945602417 0.5033544301986694 0 1.0 0 0.0 0 0.0 0 0.0 2.0912868976593018 0.08934691548347473 -0.2839455306529999 0.0 0.0 -1.0 1.0019910335540771 0.5047188401222229 0 1.0 0 0.0 0 0.0 0 0.0 2.0974700450897217 0.09494137763977051 -0.2839455306529999 0.0 0.0 -1.0 0.9981878995895386 0.5112894177436829 0 1.0 0 0.0 0 0.0 0 0.0 2.2242119312286377 0.09136095643043518 -0.2839455306529999 0.0 0.0 -1.0 0.923414945602417 0.5033544301986694 0 1.0 0 0.0 0 0.0 0 0.0 2.0912868976593018 0.08934691548347473 -0.2839455306529999 0.0 0.0 -1.0 1.0019910335540771 0.5047188401222229 0 1.0 0 0.0 0 0.0 0 0.0 2.2242119312286377 0.09136095643043518 -0.2839455306529999 0.0 0.0 -1.0 0.923414945602417 0.5033544301986694 0 1.0 0 0.0 0 0.0 0 0.0 2.2173683643341064 0.08461838960647583 -0.2839455306529999 0.0 0.0 -1.0 0.927477240562439 0.4960745573043823 0 1.0 0 0.0 0 0.0 0 0.0 2.085502862930298 0.08384972810745239 -0.2839455306529999 0.0 0.0 -1.0 1.0054943561553955 0.49834656715393066 0 1.0 0 0.0 0 0.0 0 0.0 2.0912868976593018 0.08934691548347473 -0.2839455306529999 0.0 0.0 -1.0 1.0019910335540771 0.5047188401222229 0 1.0 0 0.0 0 0.0 0 0.0 2.2173683643341064 0.08461838960647583 -0.2839455306529999 0.0 0.0 -1.0 0.927477240562439 0.4960745573043823 0 1.0 0 0.0 0 0.0 0 0.0 2.085502862930298 0.08384972810745239 -0.2839455306529999 0.0 0.0 -1.0 1.0054943561553955 0.49834656715393066 0 1.0 0 0.0 0 0.0 0 0.0 2.2173683643341064 0.08461838960647583 -0.2839455306529999 0.0 0.0 -1.0 0.927477240562439 0.4960745573043823 0 1.0 0 0.0 0 0.0 0 0.0 2.2099435329437256 0.07758393883705139 -0.2839455306529999 0.0 0.0 -1.0 0.9318990707397461 0.4884364604949951 0 1.0 0 0.0 0 0.0 0 0.0 2.0801174640655518 0.07844984531402588 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0087041854858398 0.4921778440475464 0 1.0 0 0.0 0 0.0 0 0.0 2.085502862930298 0.08384972810745239 -0.2839455306529999 0.0 0.0 -1.0 1.0054943561553955 0.49834656715393066 0 1.0 0 0.0 0 0.0 0 0.0 2.2099435329437256 0.07758393883705139 -0.2839455306529999 0.0 0.0 -1.0 0.9318990707397461 0.4884364604949951 0 1.0 0 0.0 0 0.0 0 0.0 2.0751311779022217 0.07314726710319519 -0.2839455306529999 0.0 0.0 -1.0 1.011627435684204 0.4862140417098999 0 1.0 0 0.0 0 0.0 0 0.0 2.0801174640655518 0.07844984531402588 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0087041854858398 0.4921778440475464 0 1.0 0 0.0 0 0.0 0 0.0 2.2099435329437256 0.07758393883705139 -0.2839455306529999 0.0 0.0 -1.0 0.9318990707397461 0.4884364604949951 0 1.0 0 0.0 0 0.0 0 0.0 2.0751311779022217 0.07314726710319519 -0.2839455306529999 0.0 0.0 -1.0 1.011627435684204 0.4862140417098999 0 1.0 0 0.0 0 0.0 0 0.0 2.2099435329437256 0.07758393883705139 -0.2839455306529999 0.0 0.0 -1.0 0.9318990707397461 0.4884364604949951 0 1.0 0 0.0 0 0.0 0 0.0 2.201937437057495 0.07025760412216187 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9366838932037354 0.48045414686203003 0 1.0 0 0.0 0 0.0 0 0.0 2.0705435276031494 0.06794196367263794 -0.2839455306529999 0.0 0.0 -1.0 1.0142714977264404 0.4804534316062927 0 1.0 0 0.0 0 0.0 0 0.0 2.0751311779022217 0.07314726710319519 -0.2839455306529999 0.0 0.0 -1.0 1.011627435684204 0.4862140417098999 0 1.0 0 0.0 0 0.0 0 0.0 2.201937437057495 0.07025760412216187 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9366838932037354 0.48045414686203003 0 1.0 0 0.0 0 0.0 0 0.0 2.0705435276031494 0.06794196367263794 -0.2839455306529999 0.0 0.0 -1.0 1.0142714977264404 0.4804534316062927 0 1.0 0 0.0 0 0.0 0 0.0 2.201937437057495 0.07025760412216187 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9366838932037354 0.48045414686203003 0 1.0 0 0.0 0 0.0 0 0.0 2.193350076675415 0.06263938546180725 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9418329000473022 0.47215110063552856 0 1.0 0 0.0 0 0.0 0 0.0 2.066354990005493 0.06283397972583771 -0.2839455306529999 0.0 0.0 -1.0 1.01664400100708 0.4748919606208801 0 1.0 0 0.0 0 0.0 0 0.0 2.0705435276031494 0.06794196367263794 -0.2839455306529999 0.0 0.0 -1.0 1.0142714977264404 0.4804534316062927 0 1.0 0 0.0 0 0.0 0 0.0 2.193350076675415 0.06263938546180725 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9418329000473022 0.47215110063552856 0 1.0 0 0.0 0 0.0 0 0.0 2.062565565109253 0.05782328546047211 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0187523365020752 0.46952366828918457 0 1.0 0 0.0 0 0.0 0 0.0 2.066354990005493 0.06283397972583771 -0.2839455306529999 0.0 0.0 -1.0 1.01664400100708 0.4748919606208801 0 1.0 0 0.0 0 0.0 0 0.0 2.193350076675415 0.06263938546180725 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9418329000473022 0.47215110063552856 0 1.0 0 0.0 0 0.0 0 0.0 2.062565565109253 0.05782328546047211 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0187523365020752 0.46952366828918457 0 1.0 0 0.0 0 0.0 0 0.0 2.193350076675415 0.06263938546180725 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9418329000473022 0.47215110063552856 0 1.0 0 0.0 0 0.0 0 0.0 2.184180974960327 0.05472928285598755 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9473441243171692 0.46356165409088135 0 1.0 0 0.0 0 0.0 0 0.0 2.0591747760772705 0.05290988087654114 -0.2839455306529999 0.0 0.0 -1.0 1.020604133605957 0.464341402053833 0 1.0 0 0.0 0 0.0 0 0.0 2.062565565109253 0.05782328546047211 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0187523365020752 0.46952366828918457 0 1.0 0 0.0 0 0.0 0 0.0 2.184180974960327 0.05472928285598755 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9473441243171692 0.46356165409088135 0 1.0 0 0.0 0 0.0 0 0.0 2.0591747760772705 0.05290988087654114 -0.2839455306529999 0.0 0.0 -1.0 1.020604133605957 0.464341402053833 0 1.0 0 0.0 0 0.0 0 0.0 2.184180974960327 0.05472928285598755 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9473441243171692 0.46356165409088135 0 1.0 0 0.0 0 0.0 0 0.0 2.1744306087493896 0.046527326107025146 -0.2839455306529999 0.0 0.0 -1.0 0.9532111287117004 0.45473164319992065 0 1.0 0 0.0 0 0.0 0 0.0 2.056183099746704 0.0480937659740448 -0.2839455306529999 0.0 0.0 -1.0 1.0222060680389404 0.45933693647384644 0 1.0 0 0.0 0 0.0 0 0.0 2.0591747760772705 0.05290988087654114 -0.2839455306529999 0.0 0.0 -1.0 1.020604133605957 0.464341402053833 0 1.0 0 0.0 0 0.0 0 0.0 2.1744306087493896 0.046527326107025146 -0.2839455306529999 0.0 0.0 -1.0 0.9532111287117004 0.45473164319992065 0 1.0 0 0.0 0 0.0 0 0.0 2.0535900592803955 0.04337495565414429 -0.2839455306529999 0.0 0.0 -1.0 1.0235652923583984 0.45450156927108765 0 1.0 0 0.0 0 0.0 0 0.0 2.056183099746704 0.0480937659740448 -0.2839455306529999 0.0 0.0 -1.0 1.0222060680389404 0.45933693647384644 0 1.0 0 0.0 0 0.0 0 0.0 2.1744306087493896 0.046527326107025146 -0.2839455306529999 0.0 0.0 -1.0 0.9532111287117004 0.45473164319992065 0 1.0 0 0.0 0 0.0 0 0.0 2.0535900592803955 0.04337495565414429 -0.2839455306529999 0.0 0.0 -1.0 1.0235652923583984 0.45450156927108765 0 1.0 0 0.0 0 0.0 0 0.0 2.1744306087493896 0.046527326107025146 -0.2839455306529999 0.0 0.0 -1.0 0.9532111287117004 0.45473164319992065 0 1.0 0 0.0 0 0.0 0 0.0 2.1693994998931885 0.04227796196937561 -0.2839455306529999 0.0 0.0 -1.0 0.9562410712242126 0.4502038359642029 0 1.0 0 0.0 0 0.0 0 0.0 2.0512959957122803 0.03859776258468628 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0247397422790527 0.44967198371887207 0 1.0 0 0.0 0 0.0 0 0.0 2.0535900592803955 0.04337495565414429 -0.2839455306529999 0.0 0.0 -1.0 1.0235652923583984 0.45450156927108765 0 1.0 0 0.0 0 0.0 0 0.0 2.1693994998931885 0.04227796196937561 -0.2839455306529999 0.0 0.0 -1.0 0.9562410712242126 0.4502038359642029 0 1.0 0 0.0 0 0.0 0 0.0 2.0512959957122803 0.03859776258468628 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0247397422790527 0.44967198371887207 0 1.0 0 0.0 0 0.0 0 0.0 2.1693994998931885 0.04227796196937561 -0.2839455306529999 0.0 0.0 -1.0 0.9562410712242126 0.4502038359642029 0 1.0 0 0.0 0 0.0 0 0.0 2.164696455001831 0.03816966712474823 -0.2839455306529999 0.0 0.0 -1.0 0.9590770602226257 0.4458661675453186 0 1.0 0 0.0 0 0.0 0 0.0 2.049201726913452 0.03360651433467865 -0.2839455306529999 0.0 0.0 -1.0 1.0257843732833862 0.4446961283683777 0 1.0 0 0.0 0 0.0 0 0.0 2.0512959957122803 0.03859776258468628 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0247397422790527 0.44967198371887207 0 1.0 0 0.0 0 0.0 0 0.0 2.164696455001831 0.03816966712474823 -0.2839455306529999 0.0 0.0 -1.0 0.9590770602226257 0.4458661675453186 0 1.0 0 0.0 0 0.0 0 0.0 2.049201726913452 0.03360651433467865 -0.2839455306529999 0.0 0.0 -1.0 1.0257843732833862 0.4446961283683777 0 1.0 0 0.0 0 0.0 0 0.0 2.164696455001831 0.03816966712474823 -0.2839455306529999 0.0 0.0 -1.0 0.9590770602226257 0.4458661675453186 0 1.0 0 0.0 0 0.0 0 0.0 2.1603219509124756 0.0342024564743042 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9617165923118591 0.441719651222229 0 1.0 0 0.0 0 0.0 0 0.0 2.049201726913452 0.03360651433467865 -0.2839455306529999 0.0 0.0 -1.0 1.0257843732833862 0.4446961283683777 0 1.0 0 0.0 0 0.0 0 0.0 2.1603219509124756 0.0342024564743042 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9617165923118591 0.441719651222229 0 1.0 0 0.0 0 0.0 0 0.0 2.156275510787964 0.030376330018043518 -0.2839455306529999 0.0 0.0 -1.0 0.9641584157943726 0.43776363134384155 0 1.0 0 0.0 0 0.0 0 0.0 2.047306776046753 0.028401225805282593 -0.2839455306529999 0.0 0.0 -1.0 1.0267016887664795 0.4395824074745178 0 1.0 0 0.0 0 0.0 0 0.0 2.049201726913452 0.03360651433467865 -0.2839455306529999 0.0 0.0 -1.0 1.0257843732833862 0.4446961283683777 0 1.0 0 0.0 0 0.0 0 0.0 2.156275510787964 0.030376330018043518 -0.2839455306529999 0.0 0.0 -1.0 0.9641584157943726 0.43776363134384155 0 1.0 0 0.0 0 0.0 0 0.0 2.047306776046753 0.028401225805282593 -0.2839455306529999 0.0 0.0 -1.0 1.0267016887664795 0.4395824074745178 0 1.0 0 0.0 0 0.0 0 0.0 2.156275510787964 0.030376330018043518 -0.2839455306529999 0.0 0.0 -1.0 0.9641584157943726 0.43776363134384155 0 1.0 0 0.0 0 0.0 0 0.0 2.152557611465454 0.026691272854804993 -0.2839455306529999 0.0 0.0 -1.0 0.9664015173912048 0.43399637937545776 0 1.0 0 0.0 0 0.0 0 0.0 2.045611619949341 0.022981882095336914 -0.2839455306529999 0.0 0.0 -1.0 1.0274937152862549 0.4343390464782715 0 1.0 0 0.0 0 0.0 0 0.0 2.047306776046753 0.028401225805282593 -0.2839455306529999 0.0 0.0 -1.0 1.0267016887664795 0.4395824074745178 0 1.0 0 0.0 0 0.0 0 0.0 2.152557611465454 0.026691272854804993 -0.2839455306529999 0.0 0.0 -1.0 0.9664015173912048 0.43399637937545776 0 1.0 0 0.0 0 0.0 0 0.0 2.045611619949341 0.022981882095336914 -0.2839455306529999 0.0 0.0 -1.0 1.0274937152862549 0.4343390464782715 0 1.0 0 0.0 0 0.0 0 0.0 2.152557611465454 0.026691272854804993 -0.2839455306529999 0.0 0.0 -1.0 0.9664015173912048 0.43399637937545776 0 1.0 0 0.0 0 0.0 0 0.0 2.1491682529449463 0.023147299885749817 -0.2839455306529999 0.0 0.0 -1.0 0.9684454798698425 0.4304148554801941 0 1.0 0 0.0 0 0.0 0 0.0 2.045611619949341 0.022981882095336914 -0.2839455306529999 0.0 0.0 -1.0 1.0274937152862549 0.4343390464782715 0 1.0 0 0.0 0 0.0 0 0.0 2.1491682529449463 0.023147299885749817 -0.2839455306529999 0.0 0.0 -1.0 0.9684454798698425 0.4304148554801941 0 1.0 0 0.0 0 0.0 0 0.0 2.1461069583892822 0.019744396209716797 -0.2839455306529999 0.0 0.0 -1.0 0.9702909588813782 0.4270155429840088 0 1.0 0 0.0 0 0.0 0 0.0 2.0441157817840576 0.017348498106002808 -0.2839455306529999 0.0 0.0 -1.0 1.028162956237793 0.42897486686706543 0 1.0 0 0.0 0 0.0 0 0.0 2.045611619949341 0.022981882095336914 -0.2839455306529999 0.0 0.0 -1.0 1.0274937152862549 0.4343390464782715 0 1.0 0 0.0 0 0.0 0 0.0 2.1461069583892822 0.019744396209716797 -0.2839455306529999 0.0 0.0 -1.0 0.9702909588813782 0.4270155429840088 0 1.0 0 0.0 0 0.0 0 0.0 2.0441157817840576 0.017348498106002808 -0.2839455306529999 0.0 0.0 -1.0 1.028162956237793 0.42897486686706543 0 1.0 0 0.0 0 0.0 0 0.0 2.1461069583892822 0.019744396209716797 -0.2839455306529999 0.0 0.0 -1.0 0.9702909588813782 0.4270155429840088 0 1.0 0 0.0 0 0.0 0 0.0 2.14337420463562 0.016482576727867126 -0.2839455306529999 0.0 0.0 -1.0 0.9719381332397461 0.4237942695617676 0 1.0 0 0.0 0 0.0 0 0.0 2.0428192615509033 0.01150105893611908 -0.2839455306529999 0.0 0.0 -1.0 1.0287117958068848 0.4234986901283264 0 1.0 0 0.0 0 0.0 0 0.0 2.0441157817840576 0.017348498106002808 -0.2839455306529999 0.0 0.0 -1.0 1.028162956237793 0.42897486686706543 0 1.0 0 0.0 0 0.0 0 0.0 2.14337420463562 0.016482576727867126 -0.2839455306529999 0.0 0.0 -1.0 0.9719381332397461 0.4237942695617676 0 1.0 0 0.0 0 0.0 0 0.0 2.0428192615509033 0.01150105893611908 -0.2839455306529999 0.0 0.0 -1.0 1.0287117958068848 0.4234986901283264 0 1.0 0 0.0 0 0.0 0 0.0 2.14337420463562 0.016482576727867126 -0.2839455306529999 0.0 0.0 -1.0 0.9719381332397461 0.4237942695617676 0 1.0 0 0.0 0 0.0 0 0.0 2.14096999168396 0.013361826539039612 -0.2839455306529999 0.0 0.0 -1.0 0.9733879566192627 0.4207465648651123 0 1.0 0 0.0 0 0.0 0 0.0 2.0428192615509033 0.01150105893611908 -0.2839455306529999 0.0 0.0 -1.0 1.0287117958068848 0.4234986901283264 0 1.0 0 0.0 0 0.0 0 0.0 2.14096999168396 0.013361826539039612 -0.2839455306529999 0.0 0.0 -1.0 0.9733879566192627 0.4207465648651123 0 1.0 0 0.0 0 0.0 0 0.0 2.1388938426971436 0.010382160544395447 -0.2839455306529999 0.0 0.0 -1.0 0.9746416807174683 0.4178677797317505 0 1.0 0 0.0 0 0.0 0 0.0 2.041722059249878 0.00543956458568573 -0.2839455306529999 0.0 0.0 -1.0 1.0291422605514526 0.4179196357727051 0 1.0 0 0.0 0 0.0 0 0.0 2.0428192615509033 0.01150105893611908 -0.2839455306529999 0.0 0.0 -1.0 1.0287117958068848 0.4234986901283264 0 1.0 0 0.0 0 0.0 0 0.0 2.1388938426971436 0.010382160544395447 -0.2839455306529999 0.0 0.0 -1.0 0.9746416807174683 0.4178677797317505 0 1.0 0 0.0 0 0.0 0 0.0 2.041722059249878 0.00543956458568573 -0.2839455306529999 0.0 0.0 -1.0 1.0291422605514526 0.4179196357727051 0 1.0 0 0.0 0 0.0 0 0.0 2.1388938426971436 0.010382160544395447 -0.2839455306529999 0.0 0.0 -1.0 0.9746416807174683 0.4178677797317505 0 1.0 0 0.0 0 0.0 0 0.0 2.137146234512329 0.0075435638427734375 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9757001996040344 0.4151532053947449 0 1.0 0 0.0 0 0.0 0 0.0 2.041722059249878 0.00543956458568573 -0.2839455306529999 0.0 0.0 -1.0 1.0291422605514526 0.4179196357727051 0 1.0 0 0.0 0 0.0 0 0.0 2.137146234512329 0.0075435638427734375 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9757001996040344 0.4151532053947449 0 1.0 0 0.0 0 0.0 0 0.0 2.1357266902923584 0.004846066236495972 -0.2839455306529999 0.0 0.0 -1.0 0.9765651226043701 0.4125983715057373 0 1.0 0 0.0 0 0.0 0 0.0 2.0408246517181396 -0.0008359700441360474 -0.2839455306529999 0.0 0.0 -1.0 1.0294564962387085 0.4122468829154968 0 1.0 0 0.0 0 0.0 0 0.0 2.041722059249878 0.00543956458568573 -0.2839455306529999 0.0 0.0 -1.0 1.0291422605514526 0.4179196357727051 0 1.0 0 0.0 0 0.0 0 0.0 2.1357266902923584 0.004846066236495972 -0.2839455306529999 0.0 0.0 -1.0 0.9765651226043701 0.4125983715057373 0 1.0 0 0.0 0 0.0 0 0.0 2.0408246517181396 -0.0008359700441360474 -0.2839455306529999 0.0 0.0 -1.0 1.0294564962387085 0.4122468829154968 0 1.0 0 0.0 0 0.0 0 0.0 2.1357266902923584 0.004846066236495972 -0.2839455306529999 0.0 0.0 -1.0 0.9765651226043701 0.4125983715057373 0 1.0 0 0.0 0 0.0 0 0.0 2.134528875350952 0.0020464062690734863 -0.2839455306529999 0.0 0.0 -1.0 0.9773029088973999 0.4099716544151306 0 1.0 0 0.0 0 0.0 0 0.0 2.0408246517181396 -0.0008359700441360474 -0.2839455306529999 0.0 0.0 -1.0 1.0294564962387085 0.4122468829154968 0 1.0 0 0.0 0 0.0 0 0.0 2.134528875350952 0.0020464062690734863 -0.2839455306529999 0.0 0.0 -1.0 0.9773029088973999 0.4099716544151306 0 1.0 0 0.0 0 0.0 0 0.0 2.1334450244903564 -0.0010986626148223877 -0.2839455306529999 0.0 0.0 -1.0 0.9779797792434692 0.4070509076118469 0 1.0 0 0.0 0 0.0 0 0.0 2.0401265621185303 -0.007325559854507446 -0.2839455306529999 0.0 0.0 -1.0 1.0296567678451538 0.4064900279045105 0 1.0 0 0.0 0 0.0 0 0.0 2.0408246517181396 -0.0008359700441360474 -0.2839455306529999 0.0 0.0 -1.0 1.0294564962387085 0.4122468829154968 0 1.0 0 0.0 0 0.0 0 0.0 2.1334450244903564 -0.0010986626148223877 -0.2839455306529999 0.0 0.0 -1.0 0.9779797792434692 0.4070509076118469 0 1.0 0 0.0 0 0.0 0 0.0 2.0401265621185303 -0.007325559854507446 -0.2839455306529999 0.0 0.0 -1.0 1.0296567678451538 0.4064900279045105 0 1.0 0 0.0 0 0.0 0 0.0 2.1334450244903564 -0.0010986626148223877 -0.2839455306529999 0.0 0.0 -1.0 0.9779797792434692 0.4070509076118469 0 1.0 0 0.0 0 0.0 0 0.0 2.1324756145477295 -0.0045891255140304565 -0.2839455306529999 0.0 0.0 -1.0 0.9785953760147095 0.40384650230407715 0 1.0 0 0.0 0 0.0 0 0.0 2.0401265621185303 -0.007325559854507446 -0.2839455306529999 0.0 0.0 -1.0 1.0296567678451538 0.4064900279045105 0 1.0 0 0.0 0 0.0 0 0.0 2.1324756145477295 -0.0045891255140304565 -0.2839455306529999 0.0 0.0 -1.0 0.9785953760147095 0.40384650230407715 0 1.0 0 0.0 0 0.0 0 0.0 2.1316206455230713 -0.00842498242855072 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9791495203971863 0.40036994218826294 0 1.0 0 0.0 0 0.0 0 0.0 2.03962779045105 -0.014029204845428467 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.02974534034729 0.40065884590148926 0 1.0 0 0.0 0 0.0 0 0.0 2.0401265621185303 -0.007325559854507446 -0.2839455306529999 0.0 0.0 -1.0 1.0296567678451538 0.4064900279045105 0 1.0 0 0.0 0 0.0 0 0.0 2.1316206455230713 -0.00842498242855072 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9791495203971863 0.40036994218826294 0 1.0 0 0.0 0 0.0 0 0.0 2.03962779045105 -0.014029204845428467 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.02974534034729 0.40065884590148926 0 1.0 0 0.0 0 0.0 0 0.0 2.1316206455230713 -0.00842498242855072 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9791495203971863 0.40036994218826294 0 1.0 0 0.0 0 0.0 0 0.0 2.130880117416382 -0.012606248259544373 -0.2839455306529999 0.0 0.0 -1.0 0.9796422719955444 0.39663392305374146 0 1.0 0 0.0 0 0.0 0 0.0 2.03962779045105 -0.014029204845428467 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.02974534034729 0.40065884590148926 0 1.0 0 0.0 0 0.0 0 0.0 2.130880117416382 -0.012606248259544373 -0.2839455306529999 0.0 0.0 -1.0 0.9796422719955444 0.39663392305374146 0 1.0 0 0.0 0 0.0 0 0.0 2.130253553390503 -0.01713290810585022 -0.2839455306529999 0.0 0.0 -1.0 0.9800739884376526 0.3926522135734558 0 1.0 0 0.0 0 0.0 0 0.0 2.0393288135528564 -0.020946890115737915 -0.2839455306529999 0.0 0.0 -1.0 1.0297237634658813 0.39476317167282104 0 1.0 0 0.0 0 0.0 0 0.0 2.03962779045105 -0.014029204845428467 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.02974534034729 0.40065884590148926 0 1.0 0 0.0 0 0.0 0 0.0 2.130253553390503 -0.01713290810585022 -0.2839455306529999 0.0 0.0 -1.0 0.9800739884376526 0.3926522135734558 0 1.0 0 0.0 0 0.0 0 0.0 2.0393288135528564 -0.020946890115737915 -0.2839455306529999 0.0 0.0 -1.0 1.0297237634658813 0.39476317167282104 0 1.0 0 0.0 0 0.0 0 0.0 2.130253553390503 -0.01713290810585022 -0.2839455306529999 0.0 0.0 -1.0 0.9800739884376526 0.3926522135734558 0 1.0 0 0.0 0 0.0 0 0.0 2.1297414302825928 -0.02200496196746826 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9804447889328003 0.3884395360946655 0 1.0 0 0.0 0 0.0 0 0.0 2.039229154586792 -0.028078630566596985 -0.2839455306529999 0.0 0.0 -1.0 1.0295944213867188 0.38881319761276245 0 1.0 0 0.0 0 0.0 0 0.0 2.0393288135528564 -0.020946890115737915 -0.2839455306529999 0.0 0.0 -1.0 1.0297237634658813 0.39476317167282104 0 1.0 0 0.0 0 0.0 0 0.0 2.1297414302825928 -0.02200496196746826 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9804447889328003 0.3884395360946655 0 1.0 0 0.0 0 0.0 0 0.0 2.039229154586792 -0.028078630566596985 -0.2839455306529999 0.0 0.0 -1.0 1.0295944213867188 0.38881319761276245 0 1.0 0 0.0 0 0.0 0 0.0 2.1297414302825928 -0.02200496196746826 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9804447889328003 0.3884395360946655 0 1.0 0 0.0 0 0.0 0 0.0 2.1293437480926514 -0.027222424745559692 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.980755090713501 0.38401156663894653 0 1.0 0 0.0 0 0.0 0 0.0 2.039229154586792 -0.028078630566596985 -0.2839455306529999 0.0 0.0 -1.0 1.0295944213867188 0.38881319761276245 0 1.0 0 0.0 0 0.0 0 0.0 2.1293437480926514 -0.027222424745559692 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.980755090713501 0.38401156663894653 0 1.0 0 0.0 0 0.0 0 0.0 2.1290605068206787 -0.03278528153896332 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9810053706169128 0.37938469648361206 0 1.0 0 0.0 0 0.0 0 0.0 2.039231538772583 -0.028883740305900574 -0.2839455306529999 0.0 0.0 -1.0 1.0295729637145996 0.3881494998931885 0 1.0 0 0.0 0 0.0 0 0.0 2.039229154586792 -0.028078630566596985 -0.2839455306529999 0.0 0.0 -1.0 1.0295944213867188 0.38881319761276245 0 1.0 0 0.0 0 0.0 0 0.0 2.1290605068206787 -0.03278528153896332 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9810053706169128 0.37938469648361206 0 1.0 0 0.0 0 0.0 0 0.0 2.039238691329956 -0.02989804744720459 -0.2839455306529999 0.0 0.0 -1.0 1.0295437574386597 0.387315571308136 0 1.0 0 0.0 0 0.0 0 0.0 2.039231538772583 -0.028883740305900574 -0.2839455306529999 0.0 0.0 -1.0 1.0295729637145996 0.3881494998931885 0 1.0 0 0.0 0 0.0 0 0.0 2.1290605068206787 -0.03278528153896332 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9810053706169128 0.37938469648361206 0 1.0 0 0.0 0 0.0 0 0.0 2.0392510890960693 -0.03112153708934784 -0.2839455306529999 0.0 0.0 -1.0 1.0295066833496094 0.386313259601593 0 1.0 0 0.0 0 0.0 0 0.0 2.039238691329956 -0.02989804744720459 -0.2839455306529999 0.0 0.0 -1.0 1.0295437574386597 0.387315571308136 0 1.0 0 0.0 0 0.0 0 0.0 2.1290605068206787 -0.03278528153896332 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9810053706169128 0.37938469648361206 0 1.0 0 0.0 0 0.0 0 0.0 2.0392682552337646 -0.03255420923233032 -0.2839455306529999 0.0 0.0 -1.0 1.0294619798660278 0.3851448893547058 0 1.0 0 0.0 0 0.0 0 0.0 2.0392510890960693 -0.03112153708934784 -0.2839455306529999 0.0 0.0 -1.0 1.0295066833496094 0.386313259601593 0 1.0 0 0.0 0 0.0 0 0.0 2.1290605068206787 -0.03278528153896332 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9810053706169128 0.37938469648361206 0 1.0 0 0.0 0 0.0 0 0.0 2.039290189743042 -0.03419606387615204 -0.2839455306529999 0.0 0.0 -1.0 1.0294097661972046 0.38381296396255493 0 1.0 0 0.0 0 0.0 0 0.0 2.0392682552337646 -0.03255420923233032 -0.2839455306529999 0.0 0.0 -1.0 1.0294619798660278 0.3851448893547058 0 1.0 0 0.0 0 0.0 0 0.0 2.1290605068206787 -0.03278528153896332 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9810053706169128 0.37938469648361206 0 1.0 0 0.0 0 0.0 0 0.0 2.039290189743042 -0.03419606387615204 -0.2839455306529999 0.0 0.0 -1.0 1.0294097661972046 0.38381296396255493 0 1.0 0 0.0 0 0.0 0 0.0 2.1290605068206787 -0.03278528153896332 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9810053706169128 0.37938469648361206 0 1.0 0 0.0 0 0.0 0 0.0 2.1288912296295166 -0.03869353234767914 -0.2839455306529999 0.0 0.0 -1.0 0.9811965227127075 0.37457603216171265 0 1.0 0 0.0 0 0.0 0 0.0 2.0393168926239014 -0.03604710102081299 -0.2839455306529999 0.0 0.0 -1.0 1.0293500423431396 0.3823206424713135 0 1.0 0 0.0 0 0.0 0 0.0 2.039290189743042 -0.03419606387615204 -0.2839455306529999 0.0 0.0 -1.0 1.0294097661972046 0.38381296396255493 0 1.0 0 0.0 0 0.0 0 0.0 2.1288912296295166 -0.03869353234767914 -0.2839455306529999 0.0 0.0 -1.0 0.9811965227127075 0.37457603216171265 0 1.0 0 0.0 0 0.0 0 0.0 2.0393483638763428 -0.03810732066631317 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.029282808303833 0.38067108392715454 0 1.0 0 0.0 0 0.0 0 0.0 2.0393168926239014 -0.03604710102081299 -0.2839455306529999 0.0 0.0 -1.0 1.0293500423431396 0.3823206424713135 0 1.0 0 0.0 0 0.0 0 0.0 2.1288912296295166 -0.03869353234767914 -0.2839455306529999 0.0 0.0 -1.0 0.9811965227127075 0.37457603216171265 0 1.0 0 0.0 0 0.0 0 0.0 2.0393850803375244 -0.04037673771381378 -0.2839455306529999 0.0 0.0 -1.0 1.0292080640792847 0.3788679838180542 0 1.0 0 0.0 0 0.0 0 0.0 2.0393483638763428 -0.03810732066631317 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.029282808303833 0.38067108392715454 0 1.0 0 0.0 0 0.0 0 0.0 2.1288912296295166 -0.03869353234767914 -0.2839455306529999 0.0 0.0 -1.0 0.9811965227127075 0.37457603216171265 0 1.0 0 0.0 0 0.0 0 0.0 2.0393850803375244 -0.04037673771381378 -0.2839455306529999 0.0 0.0 -1.0 1.0292080640792847 0.3788679838180542 0 1.0 0 0.0 0 0.0 0 0.0 2.1288912296295166 -0.03869353234767914 -0.2839455306529999 0.0 0.0 -1.0 0.9811965227127075 0.37457603216171265 0 1.0 0 0.0 0 0.0 0 0.0 2.1288363933563232 -0.04494717717170715 -0.2839455306529999 0.0 0.0 -1.0 0.9813289642333984 0.3696032762527466 0 1.0 0 0.0 0 0.0 0 0.0 2.039426565170288 -0.042855337262153625 -0.2839455306529999 0.0 0.0 -1.0 1.0291260480880737 0.37691545486450195 0 1.0 0 0.0 0 0.0 0 0.0 2.0393850803375244 -0.04037673771381378 -0.2839455306529999 0.0 0.0 -1.0 1.0292080640792847 0.3788679838180542 0 1.0 0 0.0 0 0.0 0 0.0 2.1288363933563232 -0.04494717717170715 -0.2839455306529999 0.0 0.0 -1.0 0.9813289642333984 0.3696032762527466 0 1.0 0 0.0 0 0.0 0 0.0 2.039472818374634 -0.0455431193113327 -0.2839455306529999 0.0 0.0 -1.0 1.0290367603302002 0.3748179078102112 0 1.0 0 0.0 0 0.0 0 0.0 2.039426565170288 -0.042855337262153625 -0.2839455306529999 0.0 0.0 -1.0 1.0291260480880737 0.37691545486450195 0 1.0 0 0.0 0 0.0 0 0.0 2.1288363933563232 -0.04494717717170715 -0.2839455306529999 0.0 0.0 -1.0 0.9813289642333984 0.3696032762527466 0 1.0 0 0.0 0 0.0 0 0.0 2.039472818374634 -0.0455431193113327 -0.2839455306529999 0.0 0.0 -1.0 1.0290367603302002 0.3748179078102112 0 1.0 0 0.0 0 0.0 0 0.0 2.1288363933563232 -0.04494717717170715 -0.2839455306529999 0.0 0.0 -1.0 0.9813289642333984 0.3696032762527466 0 1.0 0 0.0 0 0.0 0 0.0 2.128896474838257 -0.05154623091220856 -0.2839455306529999 0.0 0.0 -1.0 0.9814033508300781 0.3644845485687256 0 1.0 0 0.0 0 0.0 0 0.0 2.0395238399505615 -0.04844008386135101 -0.2839455306529999 0.0 0.0 -1.0 1.0289404392242432 0.3725799322128296 0 1.0 0 0.0 0 0.0 0 0.0 2.039472818374634 -0.0455431193113327 -0.2839455306529999 0.0 0.0 -1.0 1.0290367603302002 0.3748179078102112 0 1.0 0 0.0 0 0.0 0 0.0 2.128896474838257 -0.05154623091220856 -0.2839455306529999 0.0 0.0 -1.0 0.9814033508300781 0.3644845485687256 0 1.0 0 0.0 0 0.0 0 0.0 2.0395796298980713 -0.05154623091220856 -0.2839455306529999 0.0 0.0 -1.0 1.0288370847702026 0.3702065348625183 0 1.0 0 0.0 0 0.0 0 0.0 2.0395238399505615 -0.04844008386135101 -0.2839455306529999 0.0 0.0 -1.0 1.0289404392242432 0.3725799322128296 0 1.0 0 0.0 0 0.0 0 0.0 2.128896474838257 -0.05154623091220856 -0.2839455306529999 0.0 0.0 -1.0 0.9814033508300781 0.3644845485687256 0 1.0 0 0.0 0 0.0 0 0.0 2.0395796298980713 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 1.0259606838226318 0.29135721921920776 0 1.0 0 0.0 0 0.0 0 0.0 2.0395796298980713 -0.08552171289920807 -0.2839455306529999 0.0 0.0 -1.0 1.0280404090881348 0.3460407257080078 0 1.0 0 0.0 0 0.0 0 0.0 2.1380035877227783 -0.08552171289920807 -0.2839455306529999 0.0 0.0 -1.0 0.9771514534950256 0.34017306566238403 0 1.0 0 0.0 0 0.0 0 0.0 2.0395796298980713 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 1.0259606838226318 0.29135721921920776 0 1.0 0 0.0 0 0.0 0 0.0 2.1380035877227783 -0.08552171289920807 -0.2839455306529999 0.0 0.0 -1.0 0.9771514534950256 0.34017306566238403 0 1.0 0 0.0 0 0.0 0 0.0 2.1380035877227783 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.9788987040519714 0.285663366317749 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.2619388997554779 -0.2839455306529999 0.0 0.0 -1.0 1.0583765506744385 0.8830084204673767 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.3193819522857666 -0.2839455306529999 0.0 0.0 -1.0 0.9526037573814392 0.9118335843086243 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.18803346157073975 -0.2839455306529999 0.0 0.0 -1.0 0.9619265794754028 0.8576733469963074 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.18803346157073975 -0.2839455306529999 0.0 0.0 -1.0 1.052425503730774 0.8490404486656189 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.2619388997554779 -0.2839455306529999 0.0 0.0 -1.0 1.0583765506744385 0.8830084204673767 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.18803346157073975 -0.2839455306529999 0.0 0.0 -1.0 0.9619265794754028 0.8576733469963074 0 1.0 0 0.0 0 0.0 0 0.0 1.6378281116485596 0.10957461595535278 -0.2839455306529999 0.0 0.0 -1.0 0.0777084231376648 0.7862430810928345 0 1.0 0 0.0 0 0.0 0 0.0 1.6378281116485596 0.18803346157073975 -0.2839455306529999 0.0 0.0 -1.0 0.08506765961647034 0.8339129686355591 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.18803346157073975 -0.2839455306529999 0.0 0.0 -1.0 0.052425503730773926 0.8490404486656189 0 1.0 0 0.0 0 0.0 0 0.0 1.6378281116485596 0.10957461595535278 -0.2839455306529999 0.0 0.0 -1.0 1.0777084827423096 0.7862430810928345 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.18803346157073975 -0.2839455306529999 0.0 0.0 -1.0 1.052425503730774 0.8490404486656189 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.18803346157073975 -0.2839455306529999 0.0 0.0 -1.0 0.9619265794754028 0.8576733469963074 0 1.0 0 0.0 0 0.0 0 0.0 1.6378281116485596 0.10957461595535278 -0.2839455306529999 0.0 0.0 -1.0 1.0777084827423096 0.7862430810928345 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.18803346157073975 -0.2839455306529999 0.0 0.0 -1.0 0.9619265794754028 0.8576733469963074 0 1.0 0 0.0 0 0.0 0 0.0 1.8490369319915771 0.18803346157073975 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9053249359130859 0.8409206867218018 0 1.0 0 0.0 0 0.0 0 0.0 1.6378281116485596 0.10957461595535278 -0.2839455306529999 0.0 0.0 -1.0 1.0777084827423096 0.7862430810928345 0 1.0 0 0.0 0 0.0 0 0.0 1.8490369319915771 0.18803346157073975 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9053249359130859 0.8409206867218018 0 1.0 0 0.0 0 0.0 0 0.0 1.8490369319915771 0.10957461595535278 -0.2839455306529999 0.0 0.0 -1.0 0.9139398336410522 0.793278694152832 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.10957461595535278 -0.2839455306529999 0.0 -1.0 -0.0 1.0472700595855713 0.8007837533950806 0 1.0 0 0.0 0 0.0 0 0.0 1.6378281116485596 0.10957461595535278 -0.2839455306529999 0.983153760433197 0.06576738506555557 -0.17044587433338165 1.0777084827423096 0.7862430810928345 0 1.0 0 0.0 0 0.0 0 0.0 1.8490369319915771 0.10957461595535278 -0.2839455306529999 0.0 -0.999969482421875 -0.0 0.9139398336410522 0.793278694152832 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 -0.05259701609611511 -0.2839455306529999 0.0 0.0 -1.0 1.0392301082611084 0.6476972699165344 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.10957461595535278 -0.2839455306529999 0.0 0.0 -1.0 1.0472700595855713 0.8007837533950806 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.10957461595535278 -0.2839455306529999 0.0 0.0 -1.0 0.9659538269042969 0.8092734813690186 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.10957461595535278 -0.2839455306529999 0.0 1.0 -0.0 0.9659538269042969 0.8092734813690186 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.10957461595535278 -0.2839455306529999 0.0 0.999969482421875 -0.0 1.0472700595855713 0.8007837533950806 0 1.0 0 0.0 0 0.0 0 0.0 1.8490369319915771 0.10957461595535278 -0.2839455306529999 0.0 0.999969482421875 -0.0 0.9139398336410522 0.793278694152832 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 -0.05259701609611511 -0.2839455306529999 0.0 0.0 -1.0 1.0392301082611084 0.6476972699165344 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.10957461595535278 -0.2839455306529999 0.0 0.0 -1.0 0.9659538269042969 0.8092734813690186 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 -0.040337830781936646 -0.2839455306529999 0.0 0.0 -1.0 0.9716988801956177 0.6664947867393494 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 -0.05259701609611511 -0.2839455306529999 0.0 0.0 -1.0 1.0392301082611084 0.6476972699165344 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 -0.040337830781936646 -0.2839455306529999 0.0 0.0 -1.0 0.9716988801956177 0.6664947867393494 0 1.0 0 0.0 0 0.0 0 0.0 1.781799554824829 -0.047662943601608276 -0.2839455306529999 0.0 0.0 -1.0 0.9719215631484985 0.6577943563461304 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 -0.05259701609611511 -0.2839455306529999 0.0 0.0 -1.0 1.0392301082611084 0.6476972699165344 0 1.0 0 0.0 0 0.0 0 0.0 1.781799554824829 -0.047662943601608276 -0.2839455306529999 0.0 0.0 -1.0 0.9719215631484985 0.6577943563461304 0 1.0 0 0.0 0 0.0 0 0.0 1.7818396091461182 -0.054460227489471436 -0.2839455306529999 0.0 0.0 -1.0 0.9721057415008545 0.6496121883392334 0 1.0 0 0.0 0 0.0 0 0.0 1.6830341815948486 -0.06105197221040726 -0.2839455306529999 0.0 0.0 -1.0 1.038870096206665 0.6378592848777771 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 -0.05259701609611511 -0.2839455306529999 0.0 0.0 -1.0 1.0392301082611084 0.6476972699165344 0 1.0 0 0.0 0 0.0 0 0.0 1.7818396091461182 -0.054460227489471436 -0.2839455306529999 0.0 0.0 -1.0 0.9721057415008545 0.6496121883392334 0 1.0 0 0.0 0 0.0 0 0.0 1.6830341815948486 -0.06105197221040726 -0.2839455306529999 0.0 0.0 -1.0 1.038870096206665 0.6378592848777771 0 1.0 0 0.0 0 0.0 0 0.0 1.7818396091461182 -0.054460227489471436 -0.2839455306529999 0.0 0.0 -1.0 0.9721057415008545 0.6496121883392334 0 1.0 0 0.0 0 0.0 0 0.0 1.7819068431854248 -0.06072968244552612 -0.2839455306529999 0.0 0.0 -1.0 0.9722524285316467 0.6419804692268372 0 1.0 0 0.0 0 0.0 0 0.0 1.6830341815948486 -0.06105197221040726 -0.2839455306529999 0.0 0.0 -1.0 1.038870096206665 0.6378592848777771 0 1.0 0 0.0 0 0.0 0 0.0 1.7819068431854248 -0.06072968244552612 -0.2839455306529999 0.0 0.0 -1.0 0.9722524285316467 0.6419804692268372 0 1.0 0 0.0 0 0.0 0 0.0 1.7820003032684326 -0.06647131592035294 -0.2839455306529999 0.0 0.0 -1.0 0.9723632335662842 0.6349261999130249 0 1.0 0 0.0 0 0.0 0 0.0 1.6830995082855225 -0.06902045011520386 -0.2839455306529999 0.0 0.0 -1.0 1.0385088920593262 0.6284879446029663 0 1.0 0 0.0 0 0.0 0 0.0 1.6830341815948486 -0.06105197221040726 -0.2839455306529999 0.0 0.0 -1.0 1.038870096206665 0.6378592848777771 0 1.0 0 0.0 0 0.0 0 0.0 1.7820003032684326 -0.06647131592035294 -0.2839455306529999 0.0 0.0 -1.0 0.9723632335662842 0.6349261999130249 0 1.0 0 0.0 0 0.0 0 0.0 1.6830995082855225 -0.06902045011520386 -0.2839455306529999 0.0 0.0 -1.0 1.0385088920593262 0.6284879446029663 0 1.0 0 0.0 0 0.0 0 0.0 1.7820003032684326 -0.06647131592035294 -0.2839455306529999 0.0 0.0 -1.0 0.9723632335662842 0.6349261999130249 0 1.0 0 0.0 0 0.0 0 0.0 1.782120943069458 -0.07168512046337128 -0.2839455306529999 0.0 0.0 -1.0 0.9724383354187012 0.6284713745117188 0 1.0 0 0.0 0 0.0 0 0.0 1.6832091808319092 -0.07650244981050491 -0.2839455306529999 0.0 0.0 -1.0 1.0381453037261963 0.6196141839027405 0 1.0 0 0.0 0 0.0 0 0.0 1.6830995082855225 -0.06902045011520386 -0.2839455306529999 0.0 0.0 -1.0 1.0385088920593262 0.6284879446029663 0 1.0 0 0.0 0 0.0 0 0.0 1.782120943069458 -0.07168512046337128 -0.2839455306529999 0.0 0.0 -1.0 0.9724383354187012 0.6284713745117188 0 1.0 0 0.0 0 0.0 0 0.0 1.6832091808319092 -0.07650244981050491 -0.2839455306529999 0.0 0.0 -1.0 1.0381453037261963 0.6196141839027405 0 1.0 0 0.0 0 0.0 0 0.0 1.782120943069458 -0.07168512046337128 -0.2839455306529999 0.0 0.0 -1.0 0.9724383354187012 0.6284713745117188 0 1.0 0 0.0 0 0.0 0 0.0 1.7822678089141846 -0.07637109607458115 -0.2839455306529999 0.0 0.0 -1.0 0.9724791049957275 0.6226339936256409 0 1.0 0 0.0 0 0.0 0 0.0 1.6832091808319092 -0.07650244981050491 -0.2839455306529999 0.0 0.0 -1.0 1.0381453037261963 0.6196141839027405 0 1.0 0 0.0 0 0.0 0 0.0 1.7822678089141846 -0.07637109607458115 -0.2839455306529999 0.0 0.0 -1.0 0.9724791049957275 0.6226339936256409 0 1.0 0 0.0 0 0.0 0 0.0 1.7824418544769287 -0.08052925020456314 -0.2839455306529999 0.0 0.0 -1.0 0.9724854826927185 0.6174278855323792 0 1.0 0 0.0 0 0.0 0 0.0 1.6833622455596924 -0.08349797874689102 -0.2839455306529999 0.0 0.0 -1.0 1.0377793312072754 0.6112633943557739 0 1.0 0 0.0 0 0.0 0 0.0 1.6832091808319092 -0.07650244981050491 -0.2839455306529999 0.0 0.0 -1.0 1.0381453037261963 0.6196141839027405 0 1.0 0 0.0 0 0.0 0 0.0 1.7824418544769287 -0.08052925020456314 -0.2839455306529999 0.0 0.0 -1.0 0.9724854826927185 0.6174278855323792 0 1.0 0 0.0 0 0.0 0 0.0 1.6833622455596924 -0.08349797874689102 -0.2839455306529999 0.0 0.0 -1.0 1.0377793312072754 0.6112633943557739 0 1.0 0 0.0 0 0.0 0 0.0 1.7824418544769287 -0.08052925020456314 -0.2839455306529999 0.0 0.0 -1.0 0.9724854826927185 0.6174278855323792 0 1.0 0 0.0 0 0.0 0 0.0 1.7826426029205322 -0.08415957540273666 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9724583625793457 0.6128637790679932 0 1.0 0 0.0 0 0.0 0 0.0 1.6835591793060303 -0.09000702947378159 -0.2839455306529999 0.0 0.0 -1.0 1.0374102592468262 0.6034562587738037 0 1.0 0 0.0 0 0.0 0 0.0 1.6833622455596924 -0.08349797874689102 -0.2839455306529999 0.0 0.0 -1.0 1.0377793312072754 0.6112633943557739 0 1.0 0 0.0 0 0.0 0 0.0 1.7826426029205322 -0.08415957540273666 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9724583625793457 0.6128637790679932 0 1.0 0 0.0 0 0.0 0 0.0 1.6835591793060303 -0.09000702947378159 -0.2839455306529999 0.0 0.0 -1.0 1.0374102592468262 0.6034562587738037 0 1.0 0 0.0 0 0.0 0 0.0 1.7826426029205322 -0.08415957540273666 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9724583625793457 0.6128637790679932 0 1.0 0 0.0 0 0.0 0 0.0 1.7828700542449951 -0.08726207166910172 -0.2839455306529999 0.0 0.0 -1.0 0.9723979234695435 0.6089496612548828 0 1.0 0 0.0 0 0.0 0 0.0 1.6835591793060303 -0.09000702947378159 -0.2839455306529999 0.0 0.0 -1.0 1.0374102592468262 0.6034562587738037 0 1.0 0 0.0 0 0.0 0 0.0 1.7828700542449951 -0.08726207166910172 -0.2839455306529999 0.0 0.0 -1.0 0.9723979234695435 0.6089496612548828 0 1.0 0 0.0 0 0.0 0 0.0 1.7831242084503174 -0.08983674645423889 -0.2839455306529999 0.0 0.0 -1.0 0.9723045825958252 0.6056911945343018 0 1.0 0 0.0 0 0.0 0 0.0 1.6835591793060303 -0.09000702947378159 -0.2839455306529999 0.0 0.0 -1.0 1.0374102592468262 0.6034562587738037 0 1.0 0 0.0 0 0.0 0 0.0 1.7831242084503174 -0.08983674645423889 -0.2839455306529999 0.0 0.0 -1.0 0.9723045825958252 0.6056911945343018 0 1.0 0 0.0 0 0.0 0 0.0 1.783405065536499 -0.0918835923075676 -0.2839455306529999 0.0 0.0 -1.0 0.9721783995628357 0.6030924320220947 0 1.0 0 0.0 0 0.0 0 0.0 1.6837999820709229 -0.0960296019911766 -0.2839455306529999 0.0 0.0 -1.0 1.0370373725891113 0.5962085127830505 0 1.0 0 0.0 0 0.0 0 0.0 1.6835591793060303 -0.09000702947378159 -0.2839455306529999 0.0 0.0 -1.0 1.0374102592468262 0.6034562587738037 0 1.0 0 0.0 0 0.0 0 0.0 1.783405065536499 -0.0918835923075676 -0.2839455306529999 0.0 0.0 -1.0 0.9721783995628357 0.6030924320220947 0 1.0 0 0.0 0 0.0 0 0.0 1.6837999820709229 -0.0960296019911766 -0.2839455306529999 0.0 0.0 -1.0 1.0370373725891113 0.5962085127830505 0 1.0 0 0.0 0 0.0 0 0.0 1.783405065536499 -0.0918835923075676 -0.2839455306529999 0.0 0.0 -1.0 0.9721783995628357 0.6030924320220947 0 1.0 0 0.0 0 0.0 0 0.0 1.78371262550354 -0.09340262413024902 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9720193147659302 0.6011558771133423 0 1.0 0 0.0 0 0.0 0 0.0 1.6837999820709229 -0.0960296019911766 -0.2839455306529999 0.0 0.0 -1.0 1.0370373725891113 0.5962085127830505 0 1.0 0 0.0 0 0.0 0 0.0 1.78371262550354 -0.09340262413024902 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9720193147659302 0.6011558771133423 0 1.0 0 0.0 0 0.0 0 0.0 1.7840678691864014 -0.09463948756456375 -0.2839455306529999 0.0 0.0 -1.0 0.9718208312988281 0.5995715856552124 0 1.0 0 0.0 0 0.0 0 0.0 1.6837999820709229 -0.0960296019911766 -0.2839455306529999 0.0 0.0 -1.0 1.0370373725891113 0.5962085127830505 0 1.0 0 0.0 0 0.0 0 0.0 1.7840678691864014 -0.09463948756456375 -0.2839455306529999 0.0 0.0 -1.0 0.9718208312988281 0.5995715856552124 0 1.0 0 0.0 0 0.0 0 0.0 1.7844913005828857 -0.09583986550569534 -0.2839455306529999 0.0 0.0 -1.0 0.9715766310691833 0.5980284214019775 0 1.0 0 0.0 0 0.0 0 0.0 1.6837999820709229 -0.0960296019911766 -0.2839455306529999 0.0 0.0 -1.0 1.0370373725891113 0.5962085127830505 0 1.0 0 0.0 0 0.0 0 0.0 1.7844913005828857 -0.09583986550569534 -0.2839455306529999 0.0 0.0 -1.0 0.9715766310691833 0.5980284214019775 0 1.0 0 0.0 0 0.0 0 0.0 1.784982442855835 -0.0970037579536438 -0.2839455306529999 0.0 0.0 -1.0 0.9712873697280884 0.5965265035629272 0 1.0 0 0.0 0 0.0 0 0.0 1.6840846538543701 -0.10156569629907608 -0.2839455306529999 0.0 0.0 -1.0 1.0366603136062622 0.589532196521759 0 1.0 0 0.0 0 0.0 0 0.0 1.6837999820709229 -0.0960296019911766 -0.2839455306529999 0.0 0.0 -1.0 1.0370373725891113 0.5962085127830505 0 1.0 0 0.0 0 0.0 0 0.0 1.784982442855835 -0.0970037579536438 -0.2839455306529999 0.0 0.0 -1.0 0.9712873697280884 0.5965265035629272 0 1.0 0 0.0 0 0.0 0 0.0 1.6840846538543701 -0.10156569629907608 -0.2839455306529999 0.0 0.0 -1.0 1.0366603136062622 0.589532196521759 0 1.0 0 0.0 0 0.0 0 0.0 1.784982442855835 -0.0970037579536438 -0.2839455306529999 0.0 0.0 -1.0 0.9712873697280884 0.5965265035629272 0 1.0 0 0.0 0 0.0 0 0.0 1.7855417728424072 -0.09813116490840912 -0.2839455306529999 0.0 0.0 -1.0 0.9709528684616089 0.5950659513473511 0 1.0 0 0.0 0 0.0 0 0.0 1.6840846538543701 -0.10156569629907608 -0.2839455306529999 0.0 0.0 -1.0 1.0366603136062622 0.589532196521759 0 1.0 0 0.0 0 0.0 0 0.0 1.7855417728424072 -0.09813116490840912 -0.2839455306529999 0.0 0.0 -1.0 0.9709528684616089 0.5950659513473511 0 1.0 0 0.0 0 0.0 0 0.0 1.7861692905426025 -0.0992220863699913 -0.2839455306529999 0.0 0.0 -1.0 0.9705733060836792 0.5936467051506042 0 1.0 0 0.0 0 0.0 0 0.0 1.6840846538543701 -0.10156569629907608 -0.2839455306529999 0.0 0.0 -1.0 1.0366603136062622 0.589532196521759 0 1.0 0 0.0 0 0.0 0 0.0 1.7861692905426025 -0.0992220863699913 -0.2839455306529999 0.0 0.0 -1.0 0.9705733060836792 0.5936467051506042 0 1.0 0 0.0 0 0.0 0 0.0 1.786864995956421 -0.10027652233839035 -0.2839455306529999 0.0 0.0 -1.0 0.9701488018035889 0.5922689437866211 0 1.0 0 0.0 0 0.0 0 0.0 1.6840846538543701 -0.10156569629907608 -0.2839455306529999 0.0 0.0 -1.0 1.0366603136062622 0.589532196521759 0 1.0 0 0.0 0 0.0 0 0.0 1.786864995956421 -0.10027652233839035 -0.2839455306529999 0.0 0.0 -1.0 0.9701488018035889 0.5922689437866211 0 1.0 0 0.0 0 0.0 0 0.0 1.7876288890838623 -0.10129447281360626 -0.2839455306529999 0.0 0.0 -1.0 0.9696797132492065 0.5909324884414673 0 1.0 0 0.0 0 0.0 0 0.0 1.844451665878296 -0.10279404371976852 -0.2839455306529999 0.0 0.0 -1.0 0.934057891368866 0.5834326148033142 0 1.0 0 0.0 0 0.0 0 0.0 1.8486864566802979 -0.10128353536128998 -0.2839455306529999 0.0 0.0 -1.0 0.9314653873443604 0.5846927165985107 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.6840846538543701 -0.10156569629907608 -0.2839455306529999 0.0 0.0 -1.0 1.0366603136062622 0.589532196521759 0 1.0 0 0.0 0 0.0 0 0.0 1.7876288890838623 -0.10129447281360626 -0.2839455306529999 0.0 0.0 -1.0 0.9696797132492065 0.5909324884414673 0 1.0 0 0.0 0 0.0 0 0.0 1.7884604930877686 -0.10227593779563904 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9691663384437561 0.5896375179290771 0 1.0 0 0.0 0 0.0 0 0.0 1.684413194656372 -0.10661531984806061 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.036278486251831 0.5834358334541321 0 1.0 0 0.0 0 0.0 0 0.0 1.6840846538543701 -0.10156569629907608 -0.2839455306529999 0.0 0.0 -1.0 1.0366603136062622 0.589532196521759 0 1.0 0 0.0 0 0.0 0 0.0 1.7884604930877686 -0.10227593779563904 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9691663384437561 0.5896375179290771 0 1.0 0 0.0 0 0.0 0 0.0 1.684413194656372 -0.10661531984806061 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.036278486251831 0.5834358334541321 0 1.0 0 0.0 0 0.0 0 0.0 1.7884604930877686 -0.10227593779563904 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9691663384437561 0.5896375179290771 0 1.0 0 0.0 0 0.0 0 0.0 1.789360761642456 -0.10322091728448868 -0.2839455306529999 0.0 0.0 -1.0 0.9686083793640137 0.5883837938308716 0 1.0 0 0.0 0 0.0 0 0.0 1.8403871059417725 -0.1041732057929039 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9365617036819458 0.5822762250900269 0 1.0 0 0.0 0 0.0 0 0.0 1.844451665878296 -0.10279404371976852 -0.2839455306529999 0.0 0.0 -1.0 0.934057891368866 0.5834326148033142 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.684413194656372 -0.10661531984806061 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.036278486251831 0.5834358334541321 0 1.0 0 0.0 0 0.0 0 0.0 1.789360761642456 -0.10322091728448868 -0.2839455306529999 0.0 0.0 -1.0 0.9686083793640137 0.5883837938308716 0 1.0 0 0.0 0 0.0 0 0.0 1.7903287410736084 -0.10412941128015518 -0.2839455306529999 0.0 0.0 -1.0 0.9680066108703613 0.5871713161468506 0 1.0 0 0.0 0 0.0 0 0.0 1.684413194656372 -0.10661531984806061 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.036278486251831 0.5834358334541321 0 1.0 0 0.0 0 0.0 0 0.0 1.7903287410736084 -0.10412941128015518 -0.2839455306529999 0.0 0.0 -1.0 0.9680066108703613 0.5871713161468506 0 1.0 0 0.0 0 0.0 0 0.0 1.7913649082183838 -0.10500141978263855 -0.2839455306529999 0.0 0.0 -1.0 0.9673608541488647 0.5859999656677246 0 1.0 0 0.0 0 0.0 0 0.0 1.8364927768707275 -0.10542101413011551 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9389737844467163 0.5812290906906128 0 1.0 0 0.0 0 0.0 0 0.0 1.8403871059417725 -0.1041732057929039 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9365617036819458 0.5822762250900269 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.684413194656372 -0.10661531984806061 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.036278486251831 0.5834358334541321 0 1.0 0 0.0 0 0.0 0 0.0 1.7913649082183838 -0.10500141978263855 -0.2839455306529999 0.0 0.0 -1.0 0.9673608541488647 0.5859999656677246 0 1.0 0 0.0 0 0.0 0 0.0 1.7924692630767822 -0.10583695024251938 -0.2839455306529999 0.0 0.0 -1.0 0.9666714072227478 0.5848695635795593 0 1.0 0 0.0 0 0.0 0 0.0 1.8327686786651611 -0.10653747618198395 -0.2839455306529999 0.0 0.0 -1.0 0.9412914514541626 0.5802960395812988 0 1.0 0 0.0 0 0.0 0 0.0 1.8364927768707275 -0.10542101413011551 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9389737844467163 0.5812290906906128 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.684413194656372 -0.10661531984806061 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.036278486251831 0.5834358334541321 0 1.0 0 0.0 0 0.0 0 0.0 1.7924692630767822 -0.10583695024251938 -0.2839455306529999 0.0 0.0 -1.0 0.9666714072227478 0.5848695635795593 0 1.0 0 0.0 0 0.0 0 0.0 1.793628454208374 -0.1066201776266098 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9659465551376343 0.5838009119033813 0 1.0 0 0.0 0 0.0 0 0.0 1.8292148113250732 -0.10752259194850922 -0.2839455306529999 0.0 0.0 -1.0 0.9435123205184937 0.579481840133667 0 1.0 0 0.0 0 0.0 0 0.0 1.8327686786651611 -0.10653747618198395 -0.2839455306529999 0.0 0.0 -1.0 0.9412914514541626 0.5802960395812988 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 -0.2839455306529999 0.0 0.0 -1.0 1.0358915328979492 0.5779250860214233 0 1.0 0 0.0 0 0.0 0 0.0 1.684413194656372 -0.10661531984806061 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.036278486251831 0.5834358334541321 0 1.0 0 0.0 0 0.0 0 0.0 1.793628454208374 -0.1066201776266098 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9659465551376343 0.5838009119033813 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 -0.2839455306529999 0.0 0.0 -1.0 1.0358915328979492 0.5779250860214233 0 1.0 0 0.0 0 0.0 0 0.0 1.793628454208374 -0.1066201776266098 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9659465551376343 0.5838009119033813 0 1.0 0 0.0 0 0.0 0 0.0 1.7948286533355713 -0.10733529925346375 -0.2839455306529999 0.0 -3.0518509447574615e-05 -0.999969482421875 0.9651947021484375 0.5828148126602173 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 -0.2839455306529999 0.0 0.0 -1.0 1.0358915328979492 0.5779250860214233 0 1.0 0 0.0 0 0.0 0 0.0 1.7948286533355713 -0.10733529925346375 -0.2839455306529999 0.0 -3.0518509447574615e-05 -0.999969482421875 0.9651947021484375 0.5828148126602173 0 1.0 0 0.0 0 0.0 0 0.0 1.7960703372955322 -0.10798231512308121 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.9644157290458679 0.5819108486175537 0 1.0 0 0.0 0 0.0 0 0.0 1.8258311748504639 -0.10837635397911072 -0.2839455306529999 0.0 0.0 -1.0 0.9456341862678528 0.5787909030914307 0 1.0 0 0.0 0 0.0 0 0.0 1.8292148113250732 -0.10752259194850922 -0.2839455306529999 0.0 0.0 -1.0 0.9435123205184937 0.579481840133667 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 -0.2839455306529999 0.0 0.0 -1.0 1.0358915328979492 0.5779250860214233 0 1.0 0 0.0 0 0.0 0 0.0 1.7960703372955322 -0.10798231512308121 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.9644157290458679 0.5819108486175537 0 1.0 0 0.0 0 0.0 0 0.0 1.7973535060882568 -0.10856122523546219 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9636095762252808 0.5810889005661011 0 1.0 0 0.0 0 0.0 0 0.0 1.8226182460784912 -0.10909876972436905 -0.2839455306529999 0.0 0.0 -1.0 0.9476549029350281 0.5782271027565002 0 1.0 0 0.0 0 0.0 0 0.0 1.8258311748504639 -0.10837635397911072 -0.2839455306529999 0.0 0.0 -1.0 0.9456341862678528 0.5787909030914307 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 -0.2839455306529999 0.0 0.0 -1.0 1.0358915328979492 0.5779250860214233 0 1.0 0 0.0 0 0.0 0 0.0 1.7973535060882568 -0.10856122523546219 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9636095762252808 0.5810889005661011 0 1.0 0 0.0 0 0.0 0 0.0 1.798677682876587 -0.10907202214002609 -0.2839455306529999 0.0 -6.103701889514923e-05 -1.0 0.9627766609191895 0.5803487300872803 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 -0.2839455306529999 0.0 0.0 -1.0 1.0358915328979492 0.5779250860214233 0 1.0 0 0.0 0 0.0 0 0.0 1.798677682876587 -0.10907202214002609 -0.2839455306529999 0.0 -6.103701889514923e-05 -1.0 0.9627766609191895 0.5803487300872803 0 1.0 0 0.0 0 0.0 0 0.0 1.8000438213348389 -0.10951471328735352 -0.2839455306529999 0.0 9.155552834272385e-05 -1.0 0.9619163274765015 0.5796900987625122 0 1.0 0 0.0 0 0.0 0 0.0 1.819575548171997 -0.10968983918428421 -0.2839455306529999 0.0 0.0 -1.0 0.9495729804039001 0.577794075012207 0 1.0 0 0.0 0 0.0 0 0.0 1.8226182460784912 -0.10909876972436905 -0.2839455306529999 0.0 0.0 -1.0 0.9476549029350281 0.5782271027565002 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 -0.2839455306529999 0.0 0.0 -1.0 1.0358915328979492 0.5779250860214233 0 1.0 0 0.0 0 0.0 0 0.0 1.8000438213348389 -0.10951471328735352 -0.2839455306529999 0.0 9.155552834272385e-05 -1.0 0.9619163274765015 0.5796900987625122 0 1.0 0 0.0 0 0.0 0 0.0 1.8014509677886963 -0.10988929867744446 -0.2839455306529999 0.0 0.0 -1.0 0.9610292911529541 0.5791126489639282 0 1.0 0 0.0 0 0.0 0 0.0 1.8167030811309814 -0.1101495623588562 -0.2839455306529999 0.0 0.0 -1.0 0.9513869285583496 0.5774950981140137 0 1.0 0 0.0 0 0.0 0 0.0 1.819575548171997 -0.10968983918428421 -0.2839455306529999 0.0 0.0 -1.0 0.9495729804039001 0.577794075012207 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 -0.2839455306529999 0.0 0.0 -1.0 1.0358915328979492 0.5779250860214233 0 1.0 0 0.0 0 0.0 0 0.0 1.8014509677886963 -0.10988929867744446 -0.2839455306529999 0.0 0.0 -1.0 0.9610292911529541 0.5791126489639282 0 1.0 0 0.0 0 0.0 0 0.0 1.8028995990753174 -0.11019577831029892 -0.2839455306529999 0.0 0.0 -1.0 0.9601153135299683 0.5786160230636597 0 1.0 0 0.0 0 0.0 0 0.0 1.8140008449554443 -0.11047793179750443 -0.2839455306529999 0.0 0.0 -1.0 0.953095555305481 0.5773330926895142 0 1.0 0 0.0 0 0.0 0 0.0 1.8167030811309814 -0.1101495623588562 -0.2839455306529999 0.0 0.0 -1.0 0.9513869285583496 0.5774950981140137 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 -0.2839455306529999 0.0 0.0 -1.0 1.0358915328979492 0.5779250860214233 0 1.0 0 0.0 0 0.0 0 0.0 1.8028995990753174 -0.11019577831029892 -0.2839455306529999 0.0 0.0 -1.0 0.9601153135299683 0.5786160230636597 0 1.0 0 0.0 0 0.0 0 0.0 1.804389238357544 -0.1104341521859169 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.9591747522354126 0.5781999826431274 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 -0.2839455306529999 0.0 0.0 -1.0 1.0358915328979492 0.5779250860214233 0 1.0 0 0.0 0 0.0 0 0.0 1.804389238357544 -0.1104341521859169 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.9591747522354126 0.5781999826431274 0 1.0 0 0.0 0 0.0 0 0.0 1.8059203624725342 -0.1106044203042984 -0.2839455306529999 0.0 -0.00045777764171361923 -0.999969482421875 0.9582072496414185 0.5778639912605286 0 1.0 0 0.0 0 0.0 0 0.0 1.8114688396453857 -0.11067495495080948 -0.2839455306529999 0.0 0.0 -1.0 0.9546976089477539 0.5773108601570129 0 1.0 0 0.0 0 0.0 0 0.0 1.8140008449554443 -0.11047793179750443 -0.2839455306529999 0.0 0.0 -1.0 0.953095555305481 0.5773330926895142 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 -0.2839455306529999 0.0 0.0 -1.0 1.0358915328979492 0.5779250860214233 0 1.0 0 0.0 0 0.0 0 0.0 1.8059203624725342 -0.1106044203042984 -0.2839455306529999 0.0 -0.00045777764171361923 -0.999969482421875 0.9582072496414185 0.5778639912605286 0 1.0 0 0.0 0 0.0 0 0.0 1.807492971420288 -0.11070658266544342 -0.2839455306529999 0.0 9.155552834272385e-05 -0.999969482421875 0.9572130441665649 0.5776077508926392 0 1.0 0 0.0 0 0.0 0 0.0 1.8091070652008057 -0.11074063181877136 -0.2839455306529999 0.0 0.0 -1.0 0.9561920166015625 0.5774307250976562 0 1.0 0 0.0 0 0.0 0 0.0 1.8114688396453857 -0.11067495495080948 -0.2839455306529999 0.0 0.0 -1.0 0.9546976089477539 0.5773108601570129 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 -0.2839455306529999 0.0 0.0 -1.0 1.0358915328979492 0.5779250860214233 0 1.0 0 0.0 0 0.0 0 0.0 1.807492971420288 -0.11070658266544342 -0.2839455306529999 0.0 9.155552834272385e-05 -0.999969482421875 0.9572130441665649 0.5776077508926392 0 1.0 0 0.0 0 0.0 0 0.0 1.8091070652008057 -0.11074063181877136 -0.2839455306529999 0.0 0.0 -1.0 0.9561920166015625 0.5774307250976562 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 -0.2839455306529999 0.0 0.0 -1.0 1.0358915328979492 0.5779250860214233 0 1.0 0 0.0 0 0.0 0 0.0 1.8091070652008057 -0.11074063181877136 -0.2839455306529999 0.0 0.0 -1.0 0.9561920166015625 0.5774307250976562 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.6852014064788818 -0.11525513231754303 -0.2839455306529999 0.0 0.0 -1.0 1.0354984998703003 0.5730034112930298 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 -0.2839455306529999 0.0 0.0 -1.0 1.0358915328979492 0.5779250860214233 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.6856610774993896 -0.11884532123804092 -0.2839455306529999 0.0 0.0 -1.0 1.0350993871688843 0.5686724185943604 0 1.0 0 0.0 0 0.0 0 0.0 1.6852014064788818 -0.11525513231754303 -0.2839455306529999 0.0 0.0 -1.0 1.0354984998703003 0.5730034112930298 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.6861646175384521 -0.12194903194904327 -0.2839455306529999 0.0 0.0 -1.0 1.0346932411193848 0.5649328231811523 0 1.0 0 0.0 0 0.0 0 0.0 1.6856610774993896 -0.11884532123804092 -0.2839455306529999 0.0 0.0 -1.0 1.0350993871688843 0.5686724185943604 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.6868493556976318 -0.12590773403644562 -0.2839455306529999 0.0 0.0 -1.0 1.0341529846191406 0.5601645112037659 0 1.0 0 0.0 0 0.0 0 0.0 1.6861646175384521 -0.12194903194904327 -0.2839455306529999 0.0 0.0 -1.0 1.0346932411193848 0.5649328231811523 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.6876194477081299 -0.1297277808189392 -0.2839455306529999 0.0 0.0 -1.0 1.0335702896118164 0.5555682182312012 0 1.0 0 0.0 0 0.0 0 0.0 1.6868493556976318 -0.12590773403644562 -0.2839455306529999 0.0 0.0 -1.0 1.0341529846191406 0.5601645112037659 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.688474416732788 -0.13340918719768524 -0.2839455306529999 0.0 0.0 -1.0 1.032945156097412 0.5511438846588135 0 1.0 0 0.0 0 0.0 0 0.0 1.6876194477081299 -0.1297277808189392 -0.2839455306529999 0.0 0.0 -1.0 1.0335702896118164 0.5555682182312012 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.6894142627716064 -0.13695195317268372 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0322777032852173 0.5468913316726685 0 1.0 0 0.0 0 0.0 0 0.0 1.688474416732788 -0.13340918719768524 -0.2839455306529999 0.0 0.0 -1.0 1.032945156097412 0.5511438846588135 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.6904394626617432 -0.14035606384277344 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0315674543380737 0.5428102016448975 0 1.0 0 0.0 0 0.0 0 0.0 1.6894142627716064 -0.13695195317268372 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0322777032852173 0.5468913316726685 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.6915500164031982 -0.1436215341091156 -0.2839455306529999 0.0 0.0 -1.0 1.030814290046692 0.5388997793197632 0 1.0 0 0.0 0 0.0 0 0.0 1.6904394626617432 -0.14035606384277344 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0315674543380737 0.5428102016448975 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.6927454471588135 -0.1467483639717102 -0.2839455306529999 0.0 0.0 -1.0 1.0300182104110718 0.5351594090461731 0 1.0 0 0.0 0 0.0 0 0.0 1.6915500164031982 -0.1436215341091156 -0.2839455306529999 0.0 0.0 -1.0 1.030814290046692 0.5388997793197632 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.6940257549285889 -0.14973653852939606 -0.2839455306529999 0.0 0.0 -1.0 1.0291790962219238 0.5315882563591003 0 1.0 0 0.0 0 0.0 0 0.0 1.6927454471588135 -0.1467483639717102 -0.2839455306529999 0.0 0.0 -1.0 1.0300182104110718 0.5351594090461731 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.6953914165496826 -0.15258607268333435 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0282961130142212 0.5281853675842285 0 1.0 0 0.0 0 0.0 0 0.0 1.6940257549285889 -0.14973653852939606 -0.2839455306529999 0.0 0.0 -1.0 1.0291790962219238 0.5315882563591003 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.6968424320220947 -0.15529696643352509 -0.2839455306529999 0.0 0.0 -1.0 1.0273691415786743 0.5249497294425964 0 1.0 0 0.0 0 0.0 0 0.0 1.6953914165496826 -0.15258607268333435 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0282961130142212 0.5281853675842285 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.6983788013458252 -0.15786920487880707 -0.2839455306529999 0.0 0.0 -1.0 1.026397705078125 0.5218805074691772 0 1.0 0 0.0 0 0.0 0 0.0 1.6968424320220947 -0.15529696643352509 -0.2839455306529999 0.0 0.0 -1.0 1.0273691415786743 0.5249497294425964 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.7000000476837158 -0.1603028029203415 -0.2839455306529999 0.0 0.0 -1.0 1.0253818035125732 0.5189765691757202 0 1.0 0 0.0 0 0.0 0 0.0 1.6983788013458252 -0.15786920487880707 -0.2839455306529999 0.0 0.0 -1.0 1.026397705078125 0.5218805074691772 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.7017428874969482 -0.1626305878162384 -0.2839455306529999 0.0 0.0 -1.0 1.0242984294891357 0.516197681427002 0 1.0 0 0.0 0 0.0 0 0.0 1.7000000476837158 -0.1603028029203415 -0.2839455306529999 0.0 0.0 -1.0 1.0253818035125732 0.5189765691757202 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.703643560409546 -0.16488540172576904 -0.2839455306529999 0.0 0.0 -1.0 1.0231249332427979 0.5135035514831543 0 1.0 0 0.0 0 0.0 0 0.0 1.7017428874969482 -0.1626305878162384 -0.2839455306529999 0.0 0.0 -1.0 1.0242984294891357 0.516197681427002 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.705702543258667 -0.1670672595500946 -0.2839455306529999 0.0 0.0 -1.0 1.0218608379364014 0.5108931660652161 0 1.0 0 0.0 0 0.0 0 0.0 1.703643560409546 -0.16488540172576904 -0.2839455306529999 0.0 0.0 -1.0 1.0231249332427979 0.5135035514831543 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.7079198360443115 -0.1691761314868927 -0.2839455306529999 0.0 0.0 -1.0 1.020505428314209 0.5083656311035156 0 1.0 0 0.0 0 0.0 0 0.0 1.705702543258667 -0.1670672595500946 -0.2839455306529999 0.0 0.0 -1.0 1.0218608379364014 0.5108931660652161 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.7102949619293213 -0.17121203243732452 -0.2839455306529999 0.0 0.0 -1.0 1.019058346748352 0.5059202909469604 0 1.0 0 0.0 0 0.0 0 0.0 1.7079198360443115 -0.1691761314868927 -0.2839455306529999 0.0 0.0 -1.0 1.020505428314209 0.5083656311035156 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.7128283977508545 -0.17317496240139008 -0.2839455306529999 0.0 0.0 -1.0 1.0175189971923828 0.5035566091537476 0 1.0 0 0.0 0 0.0 0 0.0 1.7102949619293213 -0.17121203243732452 -0.2839455306529999 0.0 0.0 -1.0 1.019058346748352 0.5059202909469604 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.715519666671753 -0.17506492137908936 -0.2839455306529999 0.0 0.0 -1.0 1.0158870220184326 0.5012739896774292 0 1.0 0 0.0 0 0.0 0 0.0 1.7128283977508545 -0.17317496240139008 -0.2839455306529999 0.0 0.0 -1.0 1.0175189971923828 0.5035566091537476 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.7183692455291748 -0.17688190937042236 -0.2839455306529999 0.0 0.0 -1.0 1.014161467552185 0.49907225370407104 0 1.0 0 0.0 0 0.0 0 0.0 1.715519666671753 -0.17506492137908936 -0.2839455306529999 0.0 0.0 -1.0 1.0158870220184326 0.5012739896774292 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.7213771343231201 -0.1786259263753891 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.012341856956482 0.49695128202438354 0 1.0 0 0.0 0 0.0 0 0.0 1.7183692455291748 -0.17688190937042236 -0.2839455306529999 0.0 0.0 -1.0 1.014161467552185 0.49907225370407104 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.7213771343231201 -0.1786259263753891 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.012341856956482 0.49695128202438354 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.851309061050415 -0.1799904853105545 -0.2839455306529999 0.0 0.0 -1.0 0.9349046945571899 0.4923299551010132 0 1.0 0 0.0 0 0.0 0 0.0 1.7245428562164307 -0.18029697239398956 -0.2839455306529999 0.0 0.0 -1.0 1.0104280710220337 0.4949110746383667 0 1.0 0 0.0 0 0.0 0 0.0 1.7213771343231201 -0.1786259263753891 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.012341856956482 0.49695128202438354 0 1.0 0 0.0 0 0.0 0 0.0 1.851309061050415 -0.1799904853105545 -0.2839455306529999 0.0 0.0 -1.0 0.9349046945571899 0.4923299551010132 0 1.0 0 0.0 0 0.0 0 0.0 1.7245428562164307 -0.18029697239398956 -0.2839455306529999 0.0 0.0 -1.0 1.0104280710220337 0.4949110746383667 0 1.0 0 0.0 0 0.0 0 0.0 1.851309061050415 -0.1799904853105545 -0.2839455306529999 0.0 0.0 -1.0 0.9349046945571899 0.4923299551010132 0 1.0 0 0.0 0 0.0 0 0.0 1.845398187637329 -0.18213585019111633 -0.2839455306529999 0.0 0.0 -1.0 0.938292920589447 0.4900234341621399 0 1.0 0 0.0 0 0.0 0 0.0 1.7278664112091064 -0.18189504742622375 -0.2839455306529999 0.0 0.0 -1.0 1.0084195137023926 0.4929516911506653 0 1.0 0 0.0 0 0.0 0 0.0 1.7245428562164307 -0.18029697239398956 -0.2839455306529999 0.0 0.0 -1.0 1.0104280710220337 0.4949110746383667 0 1.0 0 0.0 0 0.0 0 0.0 1.845398187637329 -0.18213585019111633 -0.2839455306529999 0.0 0.0 -1.0 0.938292920589447 0.4900234341621399 0 1.0 0 0.0 0 0.0 0 0.0 1.7313482761383057 -0.18342013657093048 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0063157081604004 0.4910735487937927 0 1.0 0 0.0 0 0.0 0 0.0 1.7278664112091064 -0.18189504742622375 -0.2839455306529999 0.0 0.0 -1.0 1.0084195137023926 0.4929516911506653 0 1.0 0 0.0 0 0.0 0 0.0 1.845398187637329 -0.18213585019111633 -0.2839455306529999 0.0 0.0 -1.0 0.938292920589447 0.4900234341621399 0 1.0 0 0.0 0 0.0 0 0.0 1.7313482761383057 -0.18342013657093048 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0063157081604004 0.4910735487937927 0 1.0 0 0.0 0 0.0 0 0.0 1.845398187637329 -0.18213585019111633 -0.2839455306529999 0.0 0.0 -1.0 0.938292920589447 0.4900234341621399 0 1.0 0 0.0 0 0.0 0 0.0 1.8393609523773193 -0.18407689034938812 -0.2839455306529999 0.0 0.0 -1.0 0.9417729377746582 0.4879313111305237 0 1.0 0 0.0 0 0.0 0 0.0 1.7349460124969482 -0.18484672904014587 -0.2839455306529999 0.0 0.0 -1.0 1.0041418075561523 0.4893079400062561 0 1.0 0 0.0 0 0.0 0 0.0 1.7313482761383057 -0.18342013657093048 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0063157081604004 0.4910735487937927 0 1.0 0 0.0 0 0.0 0 0.0 1.8393609523773193 -0.18407689034938812 -0.2839455306529999 0.0 0.0 -1.0 0.9417729377746582 0.4879313111305237 0 1.0 0 0.0 0 0.0 0 0.0 1.7349460124969482 -0.18484672904014587 -0.2839455306529999 0.0 0.0 -1.0 1.0041418075561523 0.4893079400062561 0 1.0 0 0.0 0 0.0 0 0.0 1.8393609523773193 -0.18407689034938812 -0.2839455306529999 0.0 0.0 -1.0 0.9417729377746582 0.4879313111305237 0 1.0 0 0.0 0 0.0 0 0.0 1.8331973552703857 -0.18581360578536987 -0.2839455306529999 0.0 0.0 -1.0 0.9453461170196533 0.4860578179359436 0 1.0 0 0.0 0 0.0 0 0.0 1.738616704940796 -0.18614926934242249 -0.2839455306529999 0.0 0.0 -1.0 1.00192391872406 0.48768627643585205 0 1.0 0 0.0 0 0.0 0 0.0 1.7349460124969482 -0.18484672904014587 -0.2839455306529999 0.0 0.0 -1.0 1.0041418075561523 0.4893079400062561 0 1.0 0 0.0 0 0.0 0 0.0 1.8331973552703857 -0.18581360578536987 -0.2839455306529999 0.0 0.0 -1.0 0.9453461170196533 0.4860578179359436 0 1.0 0 0.0 0 0.0 0 0.0 1.738616704940796 -0.18614926934242249 -0.2839455306529999 0.0 0.0 -1.0 1.00192391872406 0.48768627643585205 0 1.0 0 0.0 0 0.0 0 0.0 1.8331973552703857 -0.18581360578536987 -0.2839455306529999 0.0 0.0 -1.0 0.9453461170196533 0.4860578179359436 0 1.0 0 0.0 0 0.0 0 0.0 1.8269073963165283 -0.18734599649906158 -0.2839455306529999 0.0 0.0 -1.0 0.9490134716033936 0.48440754413604736 0 1.0 0 0.0 0 0.0 0 0.0 1.7423598766326904 -0.18732775747776031 -0.2839455306529999 0.0 0.0 -1.0 0.9996620416641235 0.48620885610580444 0 1.0 0 0.0 0 0.0 0 0.0 1.738616704940796 -0.18614926934242249 -0.2839455306529999 0.0 0.0 -1.0 1.00192391872406 0.48768627643585205 0 1.0 0 0.0 0 0.0 0 0.0 1.8269073963165283 -0.18734599649906158 -0.2839455306529999 0.0 0.0 -1.0 0.9490134716033936 0.48440754413604736 0 1.0 0 0.0 0 0.0 0 0.0 1.7461764812469482 -0.18838219344615936 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9973554611206055 0.48487597703933716 0 1.0 0 0.0 0 0.0 0 0.0 1.7423598766326904 -0.18732775747776031 -0.2839455306529999 0.0 0.0 -1.0 0.9996620416641235 0.48620885610580444 0 1.0 0 0.0 0 0.0 0 0.0 1.8269073963165283 -0.18734599649906158 -0.2839455306529999 0.0 0.0 -1.0 0.9490134716033936 0.48440754413604736 0 1.0 0 0.0 0 0.0 0 0.0 1.7461764812469482 -0.18838219344615936 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9973554611206055 0.48487597703933716 0 1.0 0 0.0 0 0.0 0 0.0 1.8269073963165283 -0.18734599649906158 -0.2839455306529999 0.0 0.0 -1.0 0.9490134716033936 0.48440754413604736 0 1.0 0 0.0 0 0.0 0 0.0 1.8204905986785889 -0.18867407739162445 -0.2839455306529999 0.0 0.0 -1.0 0.9527758359909058 0.482984721660614 0 1.0 0 0.0 0 0.0 0 0.0 1.750065565109253 -0.18931257724761963 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9950048923492432 0.4836880564689636 0 1.0 0 0.0 0 0.0 0 0.0 1.7461764812469482 -0.18838219344615936 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9973554611206055 0.48487597703933716 0 1.0 0 0.0 0 0.0 0 0.0 1.8204905986785889 -0.18867407739162445 -0.2839455306529999 0.0 0.0 -1.0 0.9527758359909058 0.482984721660614 0 1.0 0 0.0 0 0.0 0 0.0 1.750065565109253 -0.18931257724761963 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9950048923492432 0.4836880564689636 0 1.0 0 0.0 0 0.0 0 0.0 1.8204905986785889 -0.18867407739162445 -0.2839455306529999 0.0 0.0 -1.0 0.9527758359909058 0.482984721660614 0 1.0 0 0.0 0 0.0 0 0.0 1.8139474391937256 -0.18979783356189728 -0.2839455306529999 0.0 0.0 -1.0 0.9566332101821899 0.48179370164871216 0 1.0 0 0.0 0 0.0 0 0.0 1.754028081893921 -0.1901189088821411 -0.2839455306529999 0.0 -6.103701889514923e-05 -1.0 0.9926097393035889 0.48264533281326294 0 1.0 0 0.0 0 0.0 0 0.0 1.750065565109253 -0.18931257724761963 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9950048923492432 0.4836880564689636 0 1.0 0 0.0 0 0.0 0 0.0 1.8139474391937256 -0.18979783356189728 -0.2839455306529999 0.0 0.0 -1.0 0.9566332101821899 0.48179370164871216 0 1.0 0 0.0 0 0.0 0 0.0 1.754028081893921 -0.1901189088821411 -0.2839455306529999 0.0 -6.103701889514923e-05 -1.0 0.9926097393035889 0.48264533281326294 0 1.0 0 0.0 0 0.0 0 0.0 1.8139474391937256 -0.18979783356189728 -0.2839455306529999 0.0 0.0 -1.0 0.9566332101821899 0.48179370164871216 0 1.0 0 0.0 0 0.0 0 0.0 1.8072779178619385 -0.19071727991104126 -0.2839455306529999 0.0 0.0 -1.0 0.9605854749679565 0.4808386564254761 0 1.0 0 0.0 0 0.0 0 0.0 1.7580630779266357 -0.190801203250885 -0.2839455306529999 0.0 3.0518509447574615e-05 -0.999969482421875 0.9901707172393799 0.48174822330474854 0 1.0 0 0.0 0 0.0 0 0.0 1.754028081893921 -0.1901189088821411 -0.2839455306529999 0.0 -6.103701889514923e-05 -1.0 0.9926097393035889 0.48264533281326294 0 1.0 0 0.0 0 0.0 0 0.0 1.8072779178619385 -0.19071727991104126 -0.2839455306529999 0.0 0.0 -1.0 0.9605854749679565 0.4808386564254761 0 1.0 0 0.0 0 0.0 0 0.0 1.7580630779266357 -0.190801203250885 -0.2839455306529999 0.0 3.0518509447574615e-05 -0.999969482421875 0.9901707172393799 0.48174822330474854 0 1.0 0 0.0 0 0.0 0 0.0 1.8072779178619385 -0.19071727991104126 -0.2839455306529999 0.0 0.0 -1.0 0.9605854749679565 0.4808386564254761 0 1.0 0 0.0 0 0.0 0 0.0 1.8004820346832275 -0.1914324015378952 -0.2839455306529999 0.0 -3.0518509447574615e-05 -0.999969482421875 0.9646320343017578 0.4801236391067505 0 1.0 0 0.0 0 0.0 0 0.0 1.7621715068817139 -0.19135943055152893 -0.2839455306529999 0.0 0.0 -1.0 0.9876875281333923 0.4809969663619995 0 1.0 0 0.0 0 0.0 0 0.0 1.7580630779266357 -0.190801203250885 -0.2839455306529999 0.0 3.0518509447574615e-05 -0.999969482421875 0.9901707172393799 0.48174822330474854 0 1.0 0 0.0 0 0.0 0 0.0 1.8004820346832275 -0.1914324015378952 -0.2839455306529999 0.0 -3.0518509447574615e-05 -0.999969482421875 0.9646320343017578 0.4801236391067505 0 1.0 0 0.0 0 0.0 0 0.0 1.7663524150848389 -0.19179360568523407 -0.2839455306529999 0.0 0.0 -1.0 0.9851610660552979 0.48039180040359497 0 1.0 0 0.0 0 0.0 0 0.0 1.7621715068817139 -0.19135943055152893 -0.2839455306529999 0.0 0.0 -1.0 0.9876875281333923 0.4809969663619995 0 1.0 0 0.0 0 0.0 0 0.0 1.8004820346832275 -0.1914324015378952 -0.2839455306529999 0.0 -3.0518509447574615e-05 -0.999969482421875 0.9646320343017578 0.4801236391067505 0 1.0 0 0.0 0 0.0 0 0.0 1.7663524150848389 -0.19179360568523407 -0.2839455306529999 0.0 0.0 -1.0 0.9851610660552979 0.48039180040359497 0 1.0 0 0.0 0 0.0 0 0.0 1.8004820346832275 -0.1914324015378952 -0.2839455306529999 0.0 -3.0518509447574615e-05 -0.999969482421875 0.9646320343017578 0.4801236391067505 0 1.0 0 0.0 0 0.0 0 0.0 1.7935593128204346 -0.1919431984424591 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.9687719941139221 0.47965240478515625 0 1.0 0 0.0 0 0.0 0 0.0 1.7706067562103271 -0.19210374355316162 -0.2839455306529999 0.0 0.0 -1.0 0.9825912714004517 0.47993284463882446 0 1.0 0 0.0 0 0.0 0 0.0 1.7663524150848389 -0.19179360568523407 -0.2839455306529999 0.0 0.0 -1.0 0.9851610660552979 0.48039180040359497 0 1.0 0 0.0 0 0.0 0 0.0 1.7935593128204346 -0.1919431984424591 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.9687719941139221 0.47965240478515625 0 1.0 0 0.0 0 0.0 0 0.0 1.7706067562103271 -0.19210374355316162 -0.2839455306529999 0.0 0.0 -1.0 0.9825912714004517 0.47993284463882446 0 1.0 0 0.0 0 0.0 0 0.0 1.7935593128204346 -0.1919431984424591 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.9687719941139221 0.47965240478515625 0 1.0 0 0.0 0 0.0 0 0.0 1.7865102291107178 -0.19224967062473297 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.9730034470558167 0.4794282913208008 0 1.0 0 0.0 0 0.0 0 0.0 1.7749340534210205 -0.1922898143529892 -0.2839455306529999 0.0 0.0 -1.0 0.9799787998199463 0.4796203374862671 0 1.0 0 0.0 0 0.0 0 0.0 1.7706067562103271 -0.19210374355316162 -0.2839455306529999 0.0 0.0 -1.0 0.9825912714004517 0.47993284463882446 0 1.0 0 0.0 0 0.0 0 0.0 1.7865102291107178 -0.19224967062473297 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.9730034470558167 0.4794282913208008 0 1.0 0 0.0 0 0.0 0 0.0 1.7749340534210205 -0.1922898143529892 -0.2839455306529999 0.0 0.0 -1.0 0.9799787998199463 0.4796203374862671 0 1.0 0 0.0 0 0.0 0 0.0 1.7865102291107178 -0.19224967062473297 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.9730034470558167 0.4794282913208008 0 1.0 0 0.0 0 0.0 0 0.0 1.779334306716919 -0.19235184788703918 -0.2839455306529999 0.0 -0.0005188146606087685 -0.999969482421875 0.9773244857788086 0.4794541597366333 0 1.0 0 0.0 0 0.0 0 0.0 1.4019849300384521 0.1962110698223114 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.9996871948242188 0.7901116609573364 0 1.0 0 0.0 0 0.0 0 0.0 1.4150612354278564 0.19643977284431458 -0.2839455306529999 0.0 0.0 -1.0 0.9889234304428101 0.7905939221382141 0 1.0 0 0.0 0 0.0 0 0.0 1.4275152683258057 0.19626706838607788 -0.2839455306529999 0.0 3.0518509447574615e-05 -0.999969482421875 0.978659987449646 0.7900841236114502 0 1.0 0 0.0 0 0.0 0 0.0 1.4019849300384521 0.1962110698223114 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.9996871948242188 0.7901116609573364 0 1.0 0 0.0 0 0.0 0 0.0 1.4275152683258057 0.19626706838607788 -0.2839455306529999 0.0 3.0518509447574615e-05 -0.999969482421875 0.978659987449646 0.7900841236114502 0 1.0 0 0.0 0 0.0 0 0.0 1.4394242763519287 0.19574898481369019 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.968928337097168 0.7887187600135803 0 1.0 0 0.0 0 0.0 0 0.0 1.3894922733306885 0.1955251395702362 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0098533630371094 0.7886281609535217 0 1.0 0 0.0 0 0.0 0 0.0 1.4019849300384521 0.1962110698223114 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.9996871948242188 0.7901116609573364 0 1.0 0 0.0 0 0.0 0 0.0 1.4394242763519287 0.19574898481369019 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.968928337097168 0.7887187600135803 0 1.0 0 0.0 0 0.0 0 0.0 1.3894922733306885 0.1955251395702362 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0098533630371094 0.7886281609535217 0 1.0 0 0.0 0 0.0 0 0.0 1.4394242763519287 0.19574898481369019 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.968928337097168 0.7887187600135803 0 1.0 0 0.0 0 0.0 0 0.0 1.4507882595062256 0.1948854923248291 -0.2839455306529999 0.0 0.0 -1.0 0.9597978591918945 0.7865923643112183 0 1.0 0 0.0 0 0.0 0 0.0 1.3775832653045654 0.1943819224834442 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0193462371826172 0.7862545847892761 0 1.0 0 0.0 0 0.0 0 0.0 1.3894922733306885 0.1955251395702362 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0098533630371094 0.7886281609535217 0 1.0 0 0.0 0 0.0 0 0.0 1.4507882595062256 0.1948854923248291 -0.2839455306529999 0.0 0.0 -1.0 0.9597978591918945 0.7865923643112183 0 1.0 0 0.0 0 0.0 0 0.0 1.3775832653045654 0.1943819224834442 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0193462371826172 0.7862545847892761 0 1.0 0 0.0 0 0.0 0 0.0 1.4507882595062256 0.1948854923248291 -0.2839455306529999 0.0 0.0 -1.0 0.9597978591918945 0.7865923643112183 0 1.0 0 0.0 0 0.0 0 0.0 1.4616072177886963 0.19367659091949463 -0.2839455306529999 0.0 0.0 -1.0 0.9513123035430908 0.7838001847267151 0 1.0 0 0.0 0 0.0 0 0.0 1.3662583827972412 0.19278141856193542 -0.2839455306529999 0.0 0.0 -1.0 1.0281201601028442 0.7831013202667236 0 1.0 0 0.0 0 0.0 0 0.0 1.3775832653045654 0.1943819224834442 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0193462371826172 0.7862545847892761 0 1.0 0 0.0 0 0.0 0 0.0 1.4616072177886963 0.19367659091949463 -0.2839455306529999 0.0 0.0 -1.0 0.9513123035430908 0.7838001847267151 0 1.0 0 0.0 0 0.0 0 0.0 1.3662583827972412 0.19278141856193542 -0.2839455306529999 0.0 0.0 -1.0 1.0281201601028442 0.7831013202667236 0 1.0 0 0.0 0 0.0 0 0.0 1.4616072177886963 0.19367659091949463 -0.2839455306529999 0.0 0.0 -1.0 0.9513123035430908 0.7838001847267151 0 1.0 0 0.0 0 0.0 0 0.0 1.471881628036499 0.19212231040000916 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9434927105903625 0.7804336547851562 0 1.0 0 0.0 0 0.0 0 0.0 1.3555166721343994 0.19072362780570984 -0.2839455306529999 0.0 0.0 -1.0 1.036157250404358 0.7792714238166809 0 1.0 0 0.0 0 0.0 0 0.0 1.3662583827972412 0.19278141856193542 -0.2839455306529999 0.0 0.0 -1.0 1.0281201601028442 0.7831013202667236 0 1.0 0 0.0 0 0.0 0 0.0 1.471881628036499 0.19212231040000916 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9434927105903625 0.7804336547851562 0 1.0 0 0.0 0 0.0 0 0.0 1.3555166721343994 0.19072362780570984 -0.2839455306529999 0.0 0.0 -1.0 1.036157250404358 0.7792714238166809 0 1.0 0 0.0 0 0.0 0 0.0 1.471881628036499 0.19212231040000916 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9434927105903625 0.7804336547851562 0 1.0 0 0.0 0 0.0 0 0.0 1.4816114902496338 0.1902226209640503 -0.2839455306529999 0.0 0.0 -1.0 0.9363420009613037 0.7765767574310303 0 1.0 0 0.0 0 0.0 0 0.0 1.3453590869903564 0.18820855021476746 -0.2839455306529999 0.0 0.0 -1.0 1.0434596538543701 0.7748583555221558 0 1.0 0 0.0 0 0.0 0 0.0 1.3555166721343994 0.19072362780570984 -0.2839455306529999 0.0 0.0 -1.0 1.036157250404358 0.7792714238166809 0 1.0 0 0.0 0 0.0 0 0.0 1.4816114902496338 0.1902226209640503 -0.2839455306529999 0.0 0.0 -1.0 0.9363420009613037 0.7765767574310303 0 1.0 0 0.0 0 0.0 0 0.0 1.3453590869903564 0.18820855021476746 -0.2839455306529999 0.0 0.0 -1.0 1.0434596538543701 0.7748583555221558 0 1.0 0 0.0 0 0.0 0 0.0 1.4816114902496338 0.1902226209640503 -0.2839455306529999 0.0 0.0 -1.0 0.9363420009613037 0.7765767574310303 0 1.0 0 0.0 0 0.0 0 0.0 1.4907958507537842 0.18797752261161804 -0.2839455306529999 0.0 0.0 -1.0 0.9298497438430786 0.7723049521446228 0 1.0 0 0.0 0 0.0 0 0.0 1.335785150527954 0.18523618578910828 -0.2839455306529999 0.0 0.0 -1.0 1.0500460863113403 0.7699426412582397 0 1.0 0 0.0 0 0.0 0 0.0 1.3453590869903564 0.18820855021476746 -0.2839455306529999 0.0 0.0 -1.0 1.0434596538543701 0.7748583555221558 0 1.0 0 0.0 0 0.0 0 0.0 1.4907958507537842 0.18797752261161804 -0.2839455306529999 0.0 0.0 -1.0 0.9298497438430786 0.7723049521446228 0 1.0 0 0.0 0 0.0 0 0.0 1.335785150527954 0.18523618578910828 -0.2839455306529999 0.0 0.0 -1.0 1.0500460863113403 0.7699426412582397 0 1.0 0 0.0 0 0.0 0 0.0 1.4907958507537842 0.18797752261161804 -0.2839455306529999 0.0 0.0 -1.0 0.9298497438430786 0.7723049521446228 0 1.0 0 0.0 0 0.0 0 0.0 1.4994356632232666 0.1853870451450348 -0.2839455306529999 0.0 0.0 -1.0 0.9239938855171204 0.767682671546936 0 1.0 0 0.0 0 0.0 0 0.0 1.335785150527954 0.18523618578910828 -0.2839455306529999 0.0 0.0 -1.0 1.0500460863113403 0.7699426412582397 0 1.0 0 0.0 0 0.0 0 0.0 1.4994356632232666 0.1853870451450348 -0.2839455306529999 0.0 0.0 -1.0 0.9239938855171204 0.767682671546936 0 1.0 0 0.0 0 0.0 0 0.0 1.507530927658081 0.18245115876197815 -0.2839455306529999 0.0 0.0 -1.0 0.9187467098236084 0.7627642154693604 0 1.0 0 0.0 0 0.0 0 0.0 1.3267953395843506 0.1818065345287323 -0.2839455306529999 0.0 0.0 -1.0 1.0559453964233398 0.7645923495292664 0 1.0 0 0.0 0 0.0 0 0.0 1.335785150527954 0.18523618578910828 -0.2839455306529999 0.0 0.0 -1.0 1.0500460863113403 0.7699426412582397 0 1.0 0 0.0 0 0.0 0 0.0 1.507530927658081 0.18245115876197815 -0.2839455306529999 0.0 0.0 -1.0 0.9187467098236084 0.7627642154693604 0 1.0 0 0.0 0 0.0 0 0.0 1.3267953395843506 0.1818065345287323 -0.2839455306529999 0.0 0.0 -1.0 1.0559453964233398 0.7645923495292664 0 1.0 0 0.0 0 0.0 0 0.0 1.507530927658081 0.18245115876197815 -0.2839455306529999 0.0 0.0 -1.0 0.9187467098236084 0.7627642154693604 0 1.0 0 0.0 0 0.0 0 0.0 1.5150806903839111 0.17916986346244812 -0.2839455306529999 0.0 0.0 -1.0 0.914077639579773 0.7575942277908325 0 1.0 0 0.0 0 0.0 0 0.0 1.3183887004852295 0.17791959643363953 -0.2839455306529999 0.0 0.0 -1.0 1.0611937046051025 0.7588618993759155 0 1.0 0 0.0 0 0.0 0 0.0 1.3267953395843506 0.1818065345287323 -0.2839455306529999 0.0 0.0 -1.0 1.0559453964233398 0.7645923495292664 0 1.0 0 0.0 0 0.0 0 0.0 1.5150806903839111 0.17916986346244812 -0.2839455306529999 0.0 0.0 -1.0 0.914077639579773 0.7575942277908325 0 1.0 0 0.0 0 0.0 0 0.0 1.3183887004852295 0.17791959643363953 -0.2839455306529999 0.0 0.0 -1.0 1.0611937046051025 0.7588618993759155 0 1.0 0 0.0 0 0.0 0 0.0 1.5150806903839111 0.17916986346244812 -0.2839455306529999 0.0 0.0 -1.0 0.914077639579773 0.7575942277908325 0 1.0 0 0.0 0 0.0 0 0.0 1.5220859050750732 0.1755431890487671 -0.2839455306529999 0.0 0.0 -1.0 0.9099534153938293 0.7522071599960327 0 1.0 0 0.0 0 0.0 0 0.0 1.3105661869049072 0.17357537150382996 -0.2839455306529999 0.0 0.0 -1.0 1.0658286809921265 0.7527941465377808 0 1.0 0 0.0 0 0.0 0 0.0 1.3183887004852295 0.17791959643363953 -0.2839455306529999 0.0 0.0 -1.0 1.0611937046051025 0.7588618993759155 0 1.0 0 0.0 0 0.0 0 0.0 1.5220859050750732 0.1755431890487671 -0.2839455306529999 0.0 0.0 -1.0 0.9099534153938293 0.7522071599960327 0 1.0 0 0.0 0 0.0 0 0.0 1.3105661869049072 0.17357537150382996 -0.2839455306529999 0.0 0.0 -1.0 1.0658286809921265 0.7527941465377808 0 1.0 0 0.0 0 0.0 0 0.0 1.5220859050750732 0.1755431890487671 -0.2839455306529999 0.0 0.0 -1.0 0.9099534153938293 0.7522071599960327 0 1.0 0 0.0 0 0.0 0 0.0 1.5285465717315674 0.17157110571861267 -0.2839455306529999 0.0 0.0 -1.0 0.9063416719436646 0.7466293573379517 0 1.0 0 0.0 0 0.0 0 0.0 1.3033273220062256 0.1687738597393036 -0.2839455306529999 0.0 0.0 -1.0 1.069889783859253 0.7464204430580139 0 1.0 0 0.0 0 0.0 0 0.0 1.3105661869049072 0.17357537150382996 -0.2839455306529999 0.0 0.0 -1.0 1.0658286809921265 0.7527941465377808 0 1.0 0 0.0 0 0.0 0 0.0 1.5285465717315674 0.17157110571861267 -0.2839455306529999 0.0 0.0 -1.0 0.9063416719436646 0.7466293573379517 0 1.0 0 0.0 0 0.0 0 0.0 1.3033273220062256 0.1687738597393036 -0.2839455306529999 0.0 0.0 -1.0 1.069889783859253 0.7464204430580139 0 1.0 0 0.0 0 0.0 0 0.0 1.5285465717315674 0.17157110571861267 -0.2839455306529999 0.0 0.0 -1.0 0.9063416719436646 0.7466293573379517 0 1.0 0 0.0 0 0.0 0 0.0 1.5345737934112549 0.16726094484329224 -0.2839455306529999 0.0 0.0 -1.0 0.9031447768211365 0.740845263004303 0 1.0 0 0.0 0 0.0 0 0.0 1.2966725826263428 0.16351506114006042 -0.2839455306529999 0.0 0.0 -1.0 1.0734143257141113 0.7397623658180237 0 1.0 0 0.0 0 0.0 0 0.0 1.3033273220062256 0.1687738597393036 -0.2839455306529999 0.0 0.0 -1.0 1.069889783859253 0.7464204430580139 0 1.0 0 0.0 0 0.0 0 0.0 1.5345737934112549 0.16726094484329224 -0.2839455306529999 0.0 0.0 -1.0 0.9031447768211365 0.740845263004303 0 1.0 0 0.0 0 0.0 0 0.0 1.2966725826263428 0.16351506114006042 -0.2839455306529999 0.0 0.0 -1.0 1.0734143257141113 0.7397623658180237 0 1.0 0 0.0 0 0.0 0 0.0 1.5345737934112549 0.16726094484329224 -0.2839455306529999 0.0 0.0 -1.0 0.9031447768211365 0.740845263004303 0 1.0 0 0.0 0 0.0 0 0.0 1.5402801036834717 0.16261997818946838 -0.2839455306529999 0.0 0.0 -1.0 0.9002732038497925 0.7348307967185974 0 1.0 0 0.0 0 0.0 0 0.0 1.290574312210083 0.15792062878608704 -0.2839455306529999 0.0 0.0 -1.0 1.0764634609222412 0.7329279184341431 0 1.0 0 0.0 0 0.0 0 0.0 1.2966725826263428 0.16351506114006042 -0.2839455306529999 0.0 0.0 -1.0 1.0734143257141113 0.7397623658180237 0 1.0 0 0.0 0 0.0 0 0.0 1.5402801036834717 0.16261997818946838 -0.2839455306529999 0.0 0.0 -1.0 0.9002732038497925 0.7348307967185974 0 1.0 0 0.0 0 0.0 0 0.0 1.290574312210083 0.15792062878608704 -0.2839455306529999 0.0 0.0 -1.0 1.0764634609222412 0.7329279184341431 0 1.0 0 0.0 0 0.0 0 0.0 1.5402801036834717 0.16261997818946838 -0.2839455306529999 0.0 0.0 -1.0 0.9002732038497925 0.7348307967185974 0 1.0 0 0.0 0 0.0 0 0.0 1.5456655025482178 0.1576482057571411 -0.2839455306529999 0.0 0.0 -1.0 0.8977097272872925 0.7285913228988647 0 1.0 0 0.0 0 0.0 0 0.0 1.2850067615509033 0.15211209654808044 -0.2839455306529999 0.0 0.0 -1.0 1.0790928602218628 0.7260227799415588 0 1.0 0 0.0 0 0.0 0 0.0 1.290574312210083 0.15792062878608704 -0.2839455306529999 0.0 0.0 -1.0 1.0764634609222412 0.7329279184341431 0 1.0 0 0.0 0 0.0 0 0.0 1.5456655025482178 0.1576482057571411 -0.2839455306529999 0.0 0.0 -1.0 0.8977097272872925 0.7285913228988647 0 1.0 0 0.0 0 0.0 0 0.0 1.2850067615509033 0.15211209654808044 -0.2839455306529999 0.0 0.0 -1.0 1.0790928602218628 0.7260227799415588 0 1.0 0 0.0 0 0.0 0 0.0 1.5456655025482178 0.1576482057571411 -0.2839455306529999 0.0 0.0 -1.0 0.8977097272872925 0.7285913228988647 0 1.0 0 0.0 0 0.0 0 0.0 1.5507299900054932 0.15234562754631042 -0.2839455306529999 0.0 0.0 -1.0 0.8954375982284546 0.7221292853355408 0 1.0 0 0.0 0 0.0 0 0.0 1.2850067615509033 0.15211209654808044 -0.2839455306529999 0.0 0.0 -1.0 1.0790928602218628 0.7260227799415588 0 1.0 0 0.0 0 0.0 0 0.0 1.5507299900054932 0.15234562754631042 -0.2839455306529999 0.0 0.0 -1.0 0.8954375982284546 0.7221292853355408 0 1.0 0 0.0 0 0.0 0 0.0 1.5554730892181396 0.14671224355697632 -0.2839455306529999 0.0 0.0 -1.0 0.8934417963027954 0.7154445648193359 0 1.0 0 0.0 0 0.0 0 0.0 1.2799692153930664 0.14608952403068542 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0813308954238892 0.7190530300140381 0 1.0 0 0.0 0 0.0 0 0.0 1.2850067615509033 0.15211209654808044 -0.2839455306529999 0.0 0.0 -1.0 1.0790928602218628 0.7260227799415588 0 1.0 0 0.0 0 0.0 0 0.0 1.5554730892181396 0.14671224355697632 -0.2839455306529999 0.0 0.0 -1.0 0.8934417963027954 0.7154445648193359 0 1.0 0 0.0 0 0.0 0 0.0 1.2799692153930664 0.14608952403068542 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0813308954238892 0.7190530300140381 0 1.0 0 0.0 0 0.0 0 0.0 1.5554730892181396 0.14671224355697632 -0.2839455306529999 0.0 0.0 -1.0 0.8934417963027954 0.7154445648193359 0 1.0 0 0.0 0 0.0 0 0.0 1.5598952770233154 0.1407480537891388 -0.2839455306529999 0.0 0.0 -1.0 0.8917075395584106 0.708534300327301 0 1.0 0 0.0 0 0.0 0 0.0 1.2754619121551514 0.13985291123390198 -0.2839455306529999 0.0 0.0 -1.0 1.0832023620605469 0.7120205163955688 0 1.0 0 0.0 0 0.0 0 0.0 1.2799692153930664 0.14608952403068542 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0813308954238892 0.7190530300140381 0 1.0 0 0.0 0 0.0 0 0.0 1.5598952770233154 0.1407480537891388 -0.2839455306529999 0.0 0.0 -1.0 0.8917075395584106 0.708534300327301 0 1.0 0 0.0 0 0.0 0 0.0 1.2754619121551514 0.13985291123390198 -0.2839455306529999 0.0 0.0 -1.0 1.0832023620605469 0.7120205163955688 0 1.0 0 0.0 0 0.0 0 0.0 1.5598952770233154 0.1407480537891388 -0.2839455306529999 0.0 0.0 -1.0 0.8917075395584106 0.708534300327301 0 1.0 0 0.0 0 0.0 0 0.0 1.5639960765838623 0.13445305824279785 -0.2839455306529999 0.0 0.0 -1.0 0.8902221322059631 0.7013939619064331 0 1.0 0 0.0 0 0.0 0 0.0 1.2714848518371582 0.13340222835540771 -0.2839455306529999 0.0 0.0 -1.0 1.0847290754318237 0.7049227952957153 0 1.0 0 0.0 0 0.0 0 0.0 1.2754619121551514 0.13985291123390198 -0.2839455306529999 0.0 0.0 -1.0 1.0832023620605469 0.7120205163955688 0 1.0 0 0.0 0 0.0 0 0.0 1.5639960765838623 0.13445305824279785 -0.2839455306529999 0.0 0.0 -1.0 0.8902221322059631 0.7013939619064331 0 1.0 0 0.0 0 0.0 0 0.0 1.2714848518371582 0.13340222835540771 -0.2839455306529999 0.0 0.0 -1.0 1.0847290754318237 0.7049227952957153 0 1.0 0 0.0 0 0.0 0 0.0 1.5639960765838623 0.13445305824279785 -0.2839455306529999 0.0 0.0 -1.0 0.8902221322059631 0.7013939619064331 0 1.0 0 0.0 0 0.0 0 0.0 1.5677759647369385 0.1278272569179535 -0.2839455306529999 0.0 0.0 -1.0 0.8889729976654053 0.694016695022583 0 1.0 0 0.0 0 0.0 0 0.0 1.268038272857666 0.12673750519752502 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0859298706054688 0.6977540254592896 0 1.0 0 0.0 0 0.0 0 0.0 1.2714848518371582 0.13340222835540771 -0.2839455306529999 0.0 0.0 -1.0 1.0847290754318237 0.7049227952957153 0 1.0 0 0.0 0 0.0 0 0.0 1.5677759647369385 0.1278272569179535 -0.2839455306529999 0.0 0.0 -1.0 0.8889729976654053 0.694016695022583 0 1.0 0 0.0 0 0.0 0 0.0 1.268038272857666 0.12673750519752502 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0859298706054688 0.6977540254592896 0 1.0 0 0.0 0 0.0 0 0.0 1.5677759647369385 0.1278272569179535 -0.2839455306529999 0.0 0.0 -1.0 0.8889729976654053 0.694016695022583 0 1.0 0 0.0 0 0.0 0 0.0 1.4168126583099365 0.12568670511245728 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9885505437850952 0.7259107828140259 0 1.0 0 0.0 0 0.0 0 0.0 1.4168126583099365 0.12568670511245728 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9885505437850952 0.7259107828140259 0 1.0 0 0.0 0 0.0 0 0.0 1.5677759647369385 0.1278272569179535 -0.2839455306529999 0.0 0.0 -1.0 0.8889729976654053 0.694016695022583 0 1.0 0 0.0 0 0.0 0 0.0 1.421851396560669 0.1256064474582672 -0.2839455306529999 0.0 0.00030518509447574615 -0.999969482421875 0.9847497940063477 0.7257237434387207 0 1.0 0 0.0 0 0.0 0 0.0 1.421851396560669 0.1256064474582672 -0.2839455306529999 0.0 0.00030518509447574615 -0.999969482421875 0.9847497940063477 0.7257237434387207 0 1.0 0 0.0 0 0.0 0 0.0 1.5677759647369385 0.1278272569179535 -0.2839455306529999 0.0 0.0 -1.0 0.8889729976654053 0.694016695022583 0 1.0 0 0.0 0 0.0 0 0.0 1.571234941482544 0.12087064981460571 -0.2839455306529999 0.0 0.0 -1.0 0.8879491686820984 0.6863942742347717 0 1.0 0 0.0 0 0.0 0 0.0 1.2651219367980957 0.1198587417602539 -0.2839455306529999 0.0 0.0 -1.0 1.0868213176727295 0.6905054450035095 0 1.0 0 0.0 0 0.0 0 0.0 1.268038272857666 0.12673750519752502 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0859298706054688 0.6977540254592896 0 1.0 0 0.0 0 0.0 0 0.0 1.404465913772583 0.1253851056098938 -0.2839455306529999 0.0 0.0 -1.0 0.9978524446487427 0.7254770994186401 0 1.0 0 0.0 0 0.0 0 0.0 1.404465913772583 0.1253851056098938 -0.2839455306529999 0.0 0.0 -1.0 0.9978524446487427 0.7254770994186401 0 1.0 0 0.0 0 0.0 0 0.0 1.268038272857666 0.12673750519752502 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0859298706054688 0.6977540254592896 0 1.0 0 0.0 0 0.0 0 0.0 1.4104859828948975 0.1256113052368164 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.993322491645813 0.7258370518684387 0 1.0 0 0.0 0 0.0 0 0.0 1.4104859828948975 0.1256113052368164 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.993322491645813 0.7258370518684387 0 1.0 0 0.0 0 0.0 0 0.0 1.268038272857666 0.12673750519752502 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0859298706054688 0.6977540254592896 0 1.0 0 0.0 0 0.0 0 0.0 1.4168126583099365 0.12568670511245728 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9885505437850952 0.7259107828140259 0 1.0 0 0.0 0 0.0 0 0.0 1.4266927242279053 0.12536564469337463 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9811047315597534 0.725290834903717 0 1.0 0 0.0 0 0.0 0 0.0 1.421851396560669 0.1256064474582672 -0.2839455306529999 0.0 0.00030518509447574615 -0.999969482421875 0.9847497940063477 0.7257237434387207 0 1.0 0 0.0 0 0.0 0 0.0 1.571234941482544 0.12087064981460571 -0.2839455306529999 0.0 0.0 -1.0 0.8879491686820984 0.6863942742347717 0 1.0 0 0.0 0 0.0 0 0.0 1.2651219367980957 0.1198587417602539 -0.2839455306529999 0.0 0.0 -1.0 1.0868213176727295 0.6905054450035095 0 1.0 0 0.0 0 0.0 0 0.0 1.404465913772583 0.1253851056098938 -0.2839455306529999 0.0 0.0 -1.0 0.9978524446487427 0.7254770994186401 0 1.0 0 0.0 0 0.0 0 0.0 1.398751974105835 0.12500807642936707 -0.2839455306529999 0.0 -0.0001831110566854477 -0.999969482421875 1.0021334886550903 0.7248518466949463 0 1.0 0 0.0 0 0.0 0 0.0 1.431337594985962 0.12496429681777954 -0.2839455306529999 0.0 0.0 -1.0 0.9776201248168945 0.724622368812561 0 1.0 0 0.0 0 0.0 0 0.0 1.4266927242279053 0.12536564469337463 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9811047315597534 0.725290834903717 0 1.0 0 0.0 0 0.0 0 0.0 1.571234941482544 0.12087064981460571 -0.2839455306529999 0.0 0.0 -1.0 0.8879491686820984 0.6863942742347717 0 1.0 0 0.0 0 0.0 0 0.0 1.2651219367980957 0.1198587417602539 -0.2839455306529999 0.0 0.0 -1.0 0.08682137727737427 0.6905054450035095 0 1.0 0 0.0 0 0.0 0 0.0 1.398751974105835 0.12500807642936707 -0.2839455306529999 0.0 -0.0001831110566854477 -0.999969482421875 0.0021335184574127197 0.7248518466949463 0 1.0 0 0.0 0 0.0 0 0.0 1.3933451175689697 0.1244802474975586 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.006159782409667969 0.7239813804626465 0 1.0 0 0.0 0 0.0 0 0.0 1.4357850551605225 0.12440240383148193 -0.2839455306529999 0.0 0.0 -1.0 0.974300742149353 0.7237285375595093 0 1.0 0 0.0 0 0.0 0 0.0 1.431337594985962 0.12496429681777954 -0.2839455306529999 0.0 0.0 -1.0 0.9776201248168945 0.724622368812561 0 1.0 0 0.0 0 0.0 0 0.0 1.571234941482544 0.12087064981460571 -0.2839455306529999 0.0 0.0 -1.0 0.8879491686820984 0.6863942742347717 0 1.0 0 0.0 0 0.0 0 0.0 1.2651219367980957 0.1198587417602539 -0.2839455306529999 0.0 0.0 -1.0 0.08682137727737427 0.6905054450035095 0 1.0 0 0.0 0 0.0 0 0.0 1.3933451175689697 0.1244802474975586 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.006159782409667969 0.7239813804626465 0 1.0 0 0.0 0 0.0 0 0.0 1.388244390487671 0.12380161881446838 -0.2839455306529999 0.0 0.0 -1.0 0.009929001331329346 0.7228847742080688 0 1.0 0 0.0 0 0.0 0 0.0 1.4400355815887451 0.1236799955368042 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.971149206161499 0.7226189374923706 0 1.0 0 0.0 0 0.0 0 0.0 1.4357850551605225 0.12440240383148193 -0.2839455306529999 0.0 0.0 -1.0 0.974300742149353 0.7237285375595093 0 1.0 0 0.0 0 0.0 0 0.0 1.571234941482544 0.12087064981460571 -0.2839455306529999 0.0 0.0 -1.0 0.8879491686820984 0.6863942742347717 0 1.0 0 0.0 0 0.0 0 0.0 1.2651219367980957 0.1198587417602539 -0.2839455306529999 0.0 0.0 -1.0 0.08682137727737427 0.6905054450035095 0 1.0 0 0.0 0 0.0 0 0.0 1.388244390487671 0.12380161881446838 -0.2839455306529999 0.0 0.0 -1.0 0.009929001331329346 0.7228847742080688 0 1.0 0 0.0 0 0.0 0 0.0 1.3834502696990967 0.12297219038009644 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.013439804315567017 0.7215794920921326 0 1.0 0 0.0 0 0.0 0 0.0 1.4440891742706299 0.12279704213142395 -0.2839455306529999 0.0 0.0 -1.0 0.968167781829834 0.7213026285171509 0 1.0 0 0.0 0 0.0 0 0.0 1.4400355815887451 0.1236799955368042 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.971149206161499 0.7226189374923706 0 1.0 0 0.0 0 0.0 0 0.0 1.571234941482544 0.12087064981460571 -0.2839455306529999 0.0 0.0 -1.0 0.8879491686820984 0.6863942742347717 0 1.0 0 0.0 0 0.0 0 0.0 1.2651219367980957 0.1198587417602539 -0.2839455306529999 0.0 0.0 -1.0 0.08682137727737427 0.6905054450035095 0 1.0 0 0.0 0 0.0 0 0.0 1.3834502696990967 0.12297219038009644 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.013439804315567017 0.7215794920921326 0 1.0 0 0.0 0 0.0 0 0.0 1.3789622783660889 0.12199193239212036 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.016692906618118286 0.7200816869735718 0 1.0 0 0.0 0 0.0 0 0.0 1.4479458332061768 0.12175354361534119 -0.2839455306529999 0.0 0.0 -1.0 0.9653576612472534 0.7197879552841187 0 1.0 0 0.0 0 0.0 0 0.0 1.4440891742706299 0.12279704213142395 -0.2839455306529999 0.0 0.0 -1.0 0.968167781829834 0.7213026285171509 0 1.0 0 0.0 0 0.0 0 0.0 1.571234941482544 0.12087064981460571 -0.2839455306529999 0.0 0.0 -1.0 0.8879491686820984 0.6863942742347717 0 1.0 0 0.0 0 0.0 0 0.0 1.2651219367980957 0.1198587417602539 -0.2839455306529999 0.0 0.0 -1.0 0.08682137727737427 0.6905054450035095 0 1.0 0 0.0 0 0.0 0 0.0 1.3789622783660889 0.12199193239212036 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.016692906618118286 0.7200816869735718 0 1.0 0 0.0 0 0.0 0 0.0 1.3747813701629639 0.12086087465286255 -0.2839455306529999 0.0 0.0 -1.0 0.01968926191329956 0.7184059023857117 0 1.0 0 0.0 0 0.0 0 0.0 1.4516055583953857 0.12054949998855591 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9627194404602051 0.7180825471878052 0 1.0 0 0.0 0 0.0 0 0.0 1.4479458332061768 0.12175354361534119 -0.2839455306529999 0.0 0.0 -1.0 0.9653576612472534 0.7197879552841187 0 1.0 0 0.0 0 0.0 0 0.0 1.571234941482544 0.12087064981460571 -0.2839455306529999 0.0 0.0 -1.0 0.8879491686820984 0.6863942742347717 0 1.0 0 0.0 0 0.0 0 0.0 1.4516055583953857 0.12054949998855591 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9627194404602051 0.7180825471878052 0 1.0 0 0.0 0 0.0 0 0.0 1.571234941482544 0.12087064981460571 -0.2839455306529999 0.0 0.0 -1.0 0.8879491686820984 0.6863942742347717 0 1.0 0 0.0 0 0.0 0 0.0 1.5743725299835205 0.11358323693275452 -0.2839455306529999 0.0 0.0 -1.0 0.8871409893035889 0.6785174608230591 0 1.0 0 0.0 0 0.0 0 0.0 1.2651219367980957 0.1198587417602539 -0.2839455306529999 0.0 0.0 -1.0 0.08682137727737427 0.6905054450035095 0 1.0 0 0.0 0 0.0 0 0.0 1.3747813701629639 0.12086087465286255 -0.2839455306529999 0.0 0.0 -1.0 0.01968926191329956 0.7184059023857117 0 1.0 0 0.0 0 0.0 0 0.0 1.3709065914154053 0.119579017162323 -0.2839455306529999 0.0 0.0 -1.0 0.02243223786354065 0.7165648937225342 0 1.0 0 0.0 0 0.0 0 0.0 1.4550678730010986 0.1191849410533905 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9602533578872681 0.716193675994873 0 1.0 0 0.0 0 0.0 0 0.0 1.4516055583953857 0.12054949998855591 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9627194404602051 0.7180825471878052 0 1.0 0 0.0 0 0.0 0 0.0 1.5743725299835205 0.11358323693275452 -0.2839455306529999 0.0 0.0 -1.0 0.8871409893035889 0.6785174608230591 0 1.0 0 0.0 0 0.0 0 0.0 1.2627358436584473 0.11276590824127197 -0.2839455306529999 0.0 0.0 -1.0 0.08741724491119385 0.6831651926040649 0 1.0 0 0.0 0 0.0 0 0.0 1.2651219367980957 0.1198587417602539 -0.2839455306529999 0.0 0.0 -1.0 0.08682137727737427 0.6905054450035095 0 1.0 0 0.0 0 0.0 0 0.0 1.3709065914154053 0.119579017162323 -0.2839455306529999 0.0 0.0 -1.0 0.02243223786354065 0.7165648937225342 0 1.0 0 0.0 0 0.0 0 0.0 1.2627358436584473 0.11276590824127197 -0.2839455306529999 0.0 0.0 -1.0 0.08741724491119385 0.6831651926040649 0 1.0 0 0.0 0 0.0 0 0.0 1.3709065914154053 0.119579017162323 -0.2839455306529999 0.0 0.0 -1.0 0.02243223786354065 0.7165648937225342 0 1.0 0 0.0 0 0.0 0 0.0 1.367337942123413 0.11814635992050171 -0.2839455306529999 0.0 0.0 -1.0 0.0249251127243042 0.7145698070526123 0 1.0 0 0.0 0 0.0 0 0.0 1.4583332538604736 0.11765983700752258 -0.2839455306529999 0.0 0.0 -1.0 0.9579584002494812 0.7141270637512207 0 1.0 0 0.0 0 0.0 0 0.0 1.4550678730010986 0.1191849410533905 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9602533578872681 0.716193675994873 0 1.0 0 0.0 0 0.0 0 0.0 1.5743725299835205 0.11358323693275452 -0.2839455306529999 0.0 0.0 -1.0 0.8871409893035889 0.6785174608230591 0 1.0 0 0.0 0 0.0 0 0.0 1.2627358436584473 0.11276590824127197 -0.2839455306529999 0.0 0.0 -1.0 0.08741724491119385 0.6831651926040649 0 1.0 0 0.0 0 0.0 0 0.0 1.367337942123413 0.11814635992050171 -0.2839455306529999 0.0 0.0 -1.0 0.0249251127243042 0.7145698070526123 0 1.0 0 0.0 0 0.0 0 0.0 1.3640763759613037 0.1165628731250763 -0.2839455306529999 0.0 0.0 -1.0 0.02717110514640808 0.7124300003051758 0 1.0 0 0.0 0 0.0 0 0.0 1.4614017009735107 0.11597418785095215 -0.2839455306529999 0.0 0.0 -1.0 0.9558334350585938 0.7118881940841675 0 1.0 0 0.0 0 0.0 0 0.0 1.4583332538604736 0.11765983700752258 -0.2839455306529999 0.0 0.0 -1.0 0.9579584002494812 0.7141270637512207 0 1.0 0 0.0 0 0.0 0 0.0 1.5743725299835205 0.11358323693275452 -0.2839455306529999 0.0 0.0 -1.0 0.8871409893035889 0.6785174608230591 0 1.0 0 0.0 0 0.0 0 0.0 1.2627358436584473 0.11276590824127197 -0.2839455306529999 0.0 0.0 -1.0 0.08741724491119385 0.6831651926040649 0 1.0 0 0.0 0 0.0 0 0.0 1.3640763759613037 0.1165628731250763 -0.2839455306529999 0.0 0.0 -1.0 0.02717110514640808 0.7124300003051758 0 1.0 0 0.0 0 0.0 0 0.0 1.3611209392547607 0.11482855677604675 -0.2839455306529999 0.0 0.0 -1.0 0.02917507290840149 0.7101532816886902 0 1.0 0 0.0 0 0.0 0 0.0 1.46427321434021 0.11412802338600159 -0.2839455306529999 0.0 0.0 -1.0 0.9538769721984863 0.7094813585281372 0 1.0 0 0.0 0 0.0 0 0.0 1.4614017009735107 0.11597418785095215 -0.2839455306529999 0.0 0.0 -1.0 0.9558334350585938 0.7118881940841675 0 1.0 0 0.0 0 0.0 0 0.0 1.5743725299835205 0.11358323693275452 -0.2839455306529999 0.0 0.0 -1.0 0.8871409893035889 0.6785174608230591 0 1.0 0 0.0 0 0.0 0 0.0 1.2627358436584473 0.11276590824127197 -0.2839455306529999 0.0 0.0 -1.0 0.08741724491119385 0.6831651926040649 0 1.0 0 0.0 0 0.0 0 0.0 1.3611209392547607 0.11482855677604675 -0.2839455306529999 0.0 0.0 -1.0 0.02917507290840149 0.7101532816886902 0 1.0 0 0.0 0 0.0 0 0.0 1.359330415725708 0.11351263523101807 -0.2839455306529999 0.0 0.0 -1.0 0.03036937117576599 0.7084847688674927 0 1.0 0 0.0 0 0.0 0 0.0 1.4669716358184814 0.1121310293674469 -0.2839455306529999 0.0 0.0 -1.0 0.9520698189735413 0.7069165110588074 0 1.0 0 0.0 0 0.0 0 0.0 1.46427321434021 0.11412802338600159 -0.2839455306529999 0.0 0.0 -1.0 0.9538769721984863 0.7094813585281372 0 1.0 0 0.0 0 0.0 0 0.0 1.5743725299835205 0.11358323693275452 -0.2839455306529999 0.0 0.0 -1.0 0.8871409893035889 0.6785174608230591 0 1.0 0 0.0 0 0.0 0 0.0 1.4669716358184814 0.1121310293674469 -0.2839455306529999 0.0 0.0 -1.0 0.9520698189735413 0.7069165110588074 0 1.0 0 0.0 0 0.0 0 0.0 1.5743725299835205 0.11358323693275452 -0.2839455306529999 0.0 0.0 -1.0 0.8871409893035889 0.6785174608230591 0 1.0 0 0.0 0 0.0 0 0.0 1.5771892070770264 0.1059650182723999 -0.2839455306529999 0.0 0.0 -1.0 0.8865392804145813 0.6703754663467407 0 1.0 0 0.0 0 0.0 0 0.0 1.2627358436584473 0.11276590824127197 -0.2839455306529999 0.0 0.0 -1.0 0.08741724491119385 0.6831651926040649 0 1.0 0 0.0 0 0.0 0 0.0 1.359330415725708 0.11351263523101807 -0.2839455306529999 0.0 0.0 -1.0 0.03036937117576599 0.7084847688674927 0 1.0 0 0.0 0 0.0 0 0.0 1.3576958179473877 0.11213347315788269 -0.2839455306529999 0.0 0.0 -1.0 0.03144568204879761 0.7067665457725525 0 1.0 0 0.0 0 0.0 0 0.0 1.2608799934387207 0.10545903444290161 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08772903680801392 0.6757194399833679 0 1.0 0 0.0 0 0.0 0 0.0 1.2627358436584473 0.11276590824127197 -0.2839455306529999 0.0 0.0 -1.0 0.08741724491119385 0.6831651926040649 0 1.0 0 0.0 0 0.0 0 0.0 1.3576958179473877 0.11213347315788269 -0.2839455306529999 0.0 0.0 -1.0 0.03144568204879761 0.7067665457725525 0 1.0 0 0.0 0 0.0 0 0.0 1.2608799934387207 0.10545903444290161 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08772903680801392 0.6757194399833679 0 1.0 0 0.0 0 0.0 0 0.0 1.3576958179473877 0.11213347315788269 -0.2839455306529999 0.0 0.0 -1.0 0.03144568204879761 0.7067665457725525 0 1.0 0 0.0 0 0.0 0 0.0 1.3562171459197998 0.11069107055664062 -0.2839455306529999 0.0 0.0 -1.0 0.03240564465522766 0.7049999833106995 0 1.0 0 0.0 0 0.0 0 0.0 1.46952223777771 0.10999298095703125 -0.2839455306529999 0.0 0.0 -1.0 0.9503920078277588 0.7042019963264465 0 1.0 0 0.0 0 0.0 0 0.0 1.4669716358184814 0.1121310293674469 -0.2839455306529999 0.0 0.0 -1.0 0.9520698189735413 0.7069165110588074 0 1.0 0 0.0 0 0.0 0 0.0 1.5771892070770264 0.1059650182723999 -0.2839455306529999 0.0 0.0 -1.0 0.8865392804145813 0.6703754663467407 0 1.0 0 0.0 0 0.0 0 0.0 1.2608799934387207 0.10545903444290161 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08772903680801392 0.6757194399833679 0 1.0 0 0.0 0 0.0 0 0.0 1.3562171459197998 0.11069107055664062 -0.2839455306529999 0.0 0.0 -1.0 0.03240564465522766 0.7049999833106995 0 1.0 0 0.0 0 0.0 0 0.0 1.3548939228057861 0.10918542742729187 -0.2839455306529999 0.0 0.0 -1.0 0.03325092792510986 0.7031859159469604 0 1.0 0 0.0 0 0.0 0 0.0 1.471924066543579 0.10771384835243225 -0.2839455306529999 0.0 0.0 -1.0 0.9488427639007568 0.701339602470398 0 1.0 0 0.0 0 0.0 0 0.0 1.46952223777771 0.10999298095703125 -0.2839455306529999 0.0 0.0 -1.0 0.9503920078277588 0.7042019963264465 0 1.0 0 0.0 0 0.0 0 0.0 1.5771892070770264 0.1059650182723999 -0.2839455306529999 0.0 0.0 -1.0 0.8865392804145813 0.6703754663467407 0 1.0 0 0.0 0 0.0 0 0.0 1.2608799934387207 0.10545903444290161 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08772903680801392 0.6757194399833679 0 1.0 0 0.0 0 0.0 0 0.0 1.3548939228057861 0.10918542742729187 -0.2839455306529999 0.0 0.0 -1.0 0.03325092792510986 0.7031859159469604 0 1.0 0 0.0 0 0.0 0 0.0 1.3537261486053467 0.10761654376983643 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.0339830219745636 0.7013248801231384 0 1.0 0 0.0 0 0.0 0 0.0 1.474177598953247 0.1052936315536499 -0.2839455306529999 0.0 0.0 -1.0 0.9474200010299683 0.6983304023742676 0 1.0 0 0.0 0 0.0 0 0.0 1.471924066543579 0.10771384835243225 -0.2839455306529999 0.0 0.0 -1.0 0.9488427639007568 0.701339602470398 0 1.0 0 0.0 0 0.0 0 0.0 1.5771892070770264 0.1059650182723999 -0.2839455306529999 0.0 0.0 -1.0 0.8865392804145813 0.6703754663467407 0 1.0 0 0.0 0 0.0 0 0.0 1.2608799934387207 0.10545903444290161 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08772903680801392 0.6757194399833679 0 1.0 0 0.0 0 0.0 0 0.0 1.3537261486053467 0.10761654376983643 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.0339830219745636 0.7013248801231384 0 1.0 0 0.0 0 0.0 0 0.0 1.3527143001556396 0.10598441958427429 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.03460294008255005 0.6994173526763916 0 1.0 0 0.0 0 0.0 0 0.0 1.2608799934387207 0.10545903444290161 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08772903680801392 0.6757194399833679 0 1.0 0 0.0 0 0.0 0 0.0 1.3527143001556396 0.10598441958427429 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.03460294008255005 0.6994173526763916 0 1.0 0 0.0 0 0.0 0 0.0 1.351858377456665 0.10428905487060547 -0.2839455306529999 0.0 0.0 -1.0 0.03511199355125427 0.6974631547927856 0 1.0 0 0.0 0 0.0 0 0.0 1.474177598953247 0.1052936315536499 -0.2839455306529999 0.0 0.0 -1.0 0.9474200010299683 0.6983304023742676 0 1.0 0 0.0 0 0.0 0 0.0 1.5771892070770264 0.1059650182723999 -0.2839455306529999 0.0 0.0 -1.0 0.8865392804145813 0.6703754663467407 0 1.0 0 0.0 0 0.0 0 0.0 1.5796849727630615 0.0980159342288971 -0.2839455306529999 0.0 0.0 -1.0 0.8861360549926758 0.6619568467140198 0 1.0 0 0.0 0 0.0 0 0.0 1.259554386138916 0.09793812036514282 -0.2839455306529999 0.0 0.0 -1.0 0.08776611089706421 0.6681519746780396 0 1.0 0 0.0 0 0.0 0 0.0 1.2608799934387207 0.10545903444290161 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08772903680801392 0.6757194399833679 0 1.0 0 0.0 0 0.0 0 0.0 1.351858377456665 0.10428905487060547 -0.2839455306529999 0.0 0.0 -1.0 0.03511199355125427 0.6974631547927856 0 1.0 0 0.0 0 0.0 0 0.0 1.4762828350067139 0.1027323305606842 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9461220502853394 0.6951749324798584 0 1.0 0 0.0 0 0.0 0 0.0 1.474177598953247 0.1052936315536499 -0.2839455306529999 0.0 0.0 -1.0 0.9474200010299683 0.6983304023742676 0 1.0 0 0.0 0 0.0 0 0.0 1.5796849727630615 0.0980159342288971 -0.2839455306529999 0.0 0.0 -1.0 0.8861360549926758 0.6619568467140198 0 1.0 0 0.0 0 0.0 0 0.0 1.259554386138916 0.09793812036514282 -0.2839455306529999 0.0 0.0 -1.0 0.08776611089706421 0.6681519746780396 0 1.0 0 0.0 0 0.0 0 0.0 1.351858377456665 0.10428905487060547 -0.2839455306529999 0.0 0.0 -1.0 0.03511199355125427 0.6974631547927856 0 1.0 0 0.0 0 0.0 0 0.0 1.3511579036712646 0.10253044962882996 -0.2839455306529999 0.0 0.0 -1.0 0.03551158308982849 0.6954619884490967 0 1.0 0 0.0 0 0.0 0 0.0 1.4782397747039795 0.10002994537353516 -0.2839455306529999 0.0 0.0 -1.0 0.9449471235275269 0.6918734312057495 0 1.0 0 0.0 0 0.0 0 0.0 1.4762828350067139 0.1027323305606842 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9461220502853394 0.6951749324798584 0 1.0 0 0.0 0 0.0 0 0.0 1.5796849727630615 0.0980159342288971 -0.2839455306529999 0.0 0.0 -1.0 0.8861360549926758 0.6619568467140198 0 1.0 0 0.0 0 0.0 0 0.0 1.259554386138916 0.09793812036514282 -0.2839455306529999 0.0 0.0 -1.0 0.08776611089706421 0.6681519746780396 0 1.0 0 0.0 0 0.0 0 0.0 1.3511579036712646 0.10253044962882996 -0.2839455306529999 0.0 0.0 -1.0 0.03551158308982849 0.6954619884490967 0 1.0 0 0.0 0 0.0 0 0.0 1.3506128787994385 0.10070860385894775 -0.2839455306529999 0.0 0.0 -1.0 0.03580290079116821 0.6934131383895874 0 1.0 0 0.0 0 0.0 0 0.0 1.259554386138916 0.09793812036514282 -0.2839455306529999 0.0 0.0 -1.0 0.08776611089706421 0.6681519746780396 0 1.0 0 0.0 0 0.0 0 0.0 1.3506128787994385 0.10070860385894775 -0.2839455306529999 0.0 0.0 -1.0 0.03580290079116821 0.6934131383895874 0 1.0 0 0.0 0 0.0 0 0.0 1.3502237796783447 0.09882351756095886 -0.2839455306529999 0.0 0.0 -1.0 0.03598657250404358 0.691315770149231 0 1.0 0 0.0 0 0.0 0 0.0 1.480048418045044 0.09718650579452515 -0.2839455306529999 0.0 0.0 -1.0 0.9438934922218323 0.688425600528717 0 1.0 0 0.0 0 0.0 0 0.0 1.4782397747039795 0.10002994537353516 -0.2839455306529999 0.0 0.0 -1.0 0.9449471235275269 0.6918734312057495 0 1.0 0 0.0 0 0.0 0 0.0 1.5796849727630615 0.0980159342288971 -0.2839455306529999 0.0 0.0 -1.0 0.8861360549926758 0.6619568467140198 0 1.0 0 0.0 0 0.0 0 0.0 1.259554386138916 0.09793812036514282 -0.2839455306529999 0.0 0.0 -1.0 0.08776611089706421 0.6681519746780396 0 1.0 0 0.0 0 0.0 0 0.0 1.3502237796783447 0.09882351756095886 -0.2839455306529999 0.0 0.0 -1.0 0.03598657250404358 0.691315770149231 0 1.0 0 0.0 0 0.0 0 0.0 1.3499906063079834 0.09687519073486328 -0.2839455306529999 0.0 0.0 -1.0 0.03606346249580383 0.6891689300537109 0 1.0 0 0.0 0 0.0 0 0.0 1.480048418045044 0.09718650579452515 -0.2839455306529999 0.0 0.0 -1.0 0.9438934922218323 0.688425600528717 0 1.0 0 0.0 0 0.0 0 0.0 1.5796849727630615 0.0980159342288971 -0.2839455306529999 0.0 0.0 -1.0 0.8861360549926758 0.6619568467140198 0 1.0 0 0.0 0 0.0 0 0.0 1.481708288192749 0.09420198202133179 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9429594278335571 0.6848307847976685 0 1.0 0 0.0 0 0.0 0 0.0 1.481708288192749 0.09420198202133179 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9429594278335571 0.6848307847976685 0 1.0 0 0.0 0 0.0 0 0.0 1.5796849727630615 0.0980159342288971 -0.2839455306529999 0.0 0.0 -1.0 0.8861360549926758 0.6619568467140198 0 1.0 0 0.0 0 0.0 0 0.0 1.4832203388214111 0.09107637405395508 -0.2839455306529999 0.0 0.0 -1.0 0.9421427249908447 0.6810876131057739 0 1.0 0 0.0 0 0.0 0 0.0 1.4832203388214111 0.09107637405395508 -0.2839455306529999 0.0 0.0 -1.0 0.9421427249908447 0.6810876131057739 0 1.0 0 0.0 0 0.0 0 0.0 1.5796849727630615 0.0980159342288971 -0.2839455306529999 0.0 0.0 -1.0 0.8861360549926758 0.6619568467140198 0 1.0 0 0.0 0 0.0 0 0.0 1.4845836162567139 0.08780968189239502 -0.2839455306529999 0.0 0.0 -1.0 0.9414418935775757 0.6771947145462036 0 1.0 0 0.0 0 0.0 0 0.0 1.4845836162567139 0.08780968189239502 -0.2839455306529999 0.0 0.0 -1.0 0.9414418935775757 0.6771947145462036 0 1.0 0 0.0 0 0.0 0 0.0 1.5796849727630615 0.0980159342288971 -0.2839455306529999 0.0 0.0 -1.0 0.8861360549926758 0.6619568467140198 0 1.0 0 0.0 0 0.0 0 0.0 1.4857985973358154 0.08440190553665161 -0.2839455306529999 0.0 0.0 -1.0 0.940855085849762 0.6731501817703247 0 1.0 0 0.0 0 0.0 0 0.0 1.4857985973358154 0.08440190553665161 -0.2839455306529999 0.0 0.0 -1.0 0.940855085849762 0.6731501817703247 0 1.0 0 0.0 0 0.0 0 0.0 1.5796849727630615 0.0980159342288971 -0.2839455306529999 0.0 0.0 -1.0 0.8861360549926758 0.6619568467140198 0 1.0 0 0.0 0 0.0 0 0.0 1.4868652820587158 0.08085307478904724 -0.2839455306529999 0.0 0.0 -1.0 0.9403803944587708 0.6689517498016357 0 1.0 0 0.0 0 0.0 0 0.0 1.2587590217590332 0.09020313620567322 -0.2839455306529999 0.0 0.0 -1.0 0.08753597736358643 0.6604448556900024 0 1.0 0 0.0 0 0.0 0 0.0 1.259554386138916 0.09793812036514282 -0.2839455306529999 0.0 0.0 -1.0 0.08776611089706421 0.6681519746780396 0 1.0 0 0.0 0 0.0 0 0.0 1.3499906063079834 0.09687519073486328 -0.2839455306529999 0.0 0.0 -1.0 0.03606346249580383 0.6891689300537109 0 1.0 0 0.0 0 0.0 0 0.0 1.2587590217590332 0.09020313620567322 -0.2839455306529999 0.0 0.0 -1.0 0.08753597736358643 0.6604448556900024 0 1.0 0 0.0 0 0.0 0 0.0 1.3499906063079834 0.09687519073486328 -0.2839455306529999 0.0 0.0 -1.0 0.03606346249580383 0.6891689300537109 0 1.0 0 0.0 0 0.0 0 0.0 1.349912405014038 0.09486359357833862 -0.2839455306529999 0.0 0.0 -1.0 0.03603509068489075 0.6869707107543945 0 1.0 0 0.0 0 0.0 0 0.0 1.2587590217590332 0.09020313620567322 -0.2839455306529999 0.0 0.0 -1.0 0.08753597736358643 0.6604448556900024 0 1.0 0 0.0 0 0.0 0 0.0 1.349912405014038 0.09486359357833862 -0.2839455306529999 0.0 0.0 -1.0 0.03603509068489075 0.6869707107543945 0 1.0 0 0.0 0 0.0 0 0.0 1.3499805927276611 0.09313416481018066 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.035921454429626465 0.6850959062576294 0 1.0 0 0.0 0 0.0 0 0.0 1.2587590217590332 0.09020313620567322 -0.2839455306529999 0.0 0.0 -1.0 0.08753597736358643 0.6604448556900024 0 1.0 0 0.0 0 0.0 0 0.0 1.3499805927276611 0.09313416481018066 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.035921454429626465 0.6850959062576294 0 1.0 0 0.0 0 0.0 0 0.0 1.3501851558685303 0.09144851565361023 -0.2839455306529999 0.0 0.0 -1.0 0.03572002053260803 0.6832842230796814 0 1.0 0 0.0 0 0.0 0 0.0 1.2587590217590332 0.09020313620567322 -0.2839455306529999 0.0 0.0 -1.0 0.08753597736358643 0.6604448556900024 0 1.0 0 0.0 0 0.0 0 0.0 1.3501851558685303 0.09144851565361023 -0.2839455306529999 0.0 0.0 -1.0 0.03572002053260803 0.6832842230796814 0 1.0 0 0.0 0 0.0 0 0.0 1.3505256175994873 0.08980664610862732 -0.2839455306529999 0.0 0.0 -1.0 0.035431504249572754 0.6815354228019714 0 1.0 0 0.0 0 0.0 0 0.0 1.2584939002990723 0.08225411176681519 -0.2839455306529999 0.0 0.0 -1.0 0.08704417943954468 0.6525783538818359 0 1.0 0 0.0 0 0.0 0 0.0 1.2587590217590332 0.09020313620567322 -0.2839455306529999 0.0 0.0 -1.0 0.08753597736358643 0.6604448556900024 0 1.0 0 0.0 0 0.0 0 0.0 1.3505256175994873 0.08980664610862732 -0.2839455306529999 0.0 0.0 -1.0 0.035431504249572754 0.6815354228019714 0 1.0 0 0.0 0 0.0 0 0.0 1.2584939002990723 0.08225411176681519 -0.2839455306529999 0.0 0.0 -1.0 0.08704417943954468 0.6525783538818359 0 1.0 0 0.0 0 0.0 0 0.0 1.3505256175994873 0.08980664610862732 -0.2839455306529999 0.0 0.0 -1.0 0.035431504249572754 0.6815354228019714 0 1.0 0 0.0 0 0.0 0 0.0 1.3510024547576904 0.08820855617523193 -0.2839455306529999 0.0 0.0 -1.0 0.03505560755729675 0.6798492670059204 0 1.0 0 0.0 0 0.0 0 0.0 1.2584939002990723 0.08225411176681519 -0.2839455306529999 0.0 0.0 -1.0 0.08704417943954468 0.6525783538818359 0 1.0 0 0.0 0 0.0 0 0.0 1.3510024547576904 0.08820855617523193 -0.2839455306529999 0.0 0.0 -1.0 0.03505560755729675 0.6798492670059204 0 1.0 0 0.0 0 0.0 0 0.0 1.3516151905059814 0.08665427565574646 -0.2839455306529999 0.0 0.0 -1.0 0.034592777490615845 0.6782253980636597 0 1.0 0 0.0 0 0.0 0 0.0 1.2584939002990723 0.08225411176681519 -0.2839455306529999 0.0 0.0 -1.0 0.08704417943954468 0.6525783538818359 0 1.0 0 0.0 0 0.0 0 0.0 1.3516151905059814 0.08665427565574646 -0.2839455306529999 0.0 0.0 -1.0 0.034592777490615845 0.6782253980636597 0 1.0 0 0.0 0 0.0 0 0.0 1.3523643016815186 0.08514377474784851 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.034042567014694214 0.6766630411148071 0 1.0 0 0.0 0 0.0 0 0.0 1.2584939002990723 0.08225411176681519 -0.2839455306529999 0.0 0.0 -1.0 0.08704417943954468 0.6525783538818359 0 1.0 0 0.0 0 0.0 0 0.0 1.3523643016815186 0.08514377474784851 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.034042567014694214 0.6766630411148071 0 1.0 0 0.0 0 0.0 0 0.0 1.3532497882843018 0.08367705345153809 -0.2839455306529999 0.0 0.0 -1.0 0.0334048867225647 0.6751617789268494 0 1.0 0 0.0 0 0.0 0 0.0 1.2584939002990723 0.08225411176681519 -0.2839455306529999 0.0 0.0 -1.0 0.08704417943954468 0.6525783538818359 0 1.0 0 0.0 0 0.0 0 0.0 1.3532497882843018 0.08367705345153809 -0.2839455306529999 0.0 0.0 -1.0 0.0334048867225647 0.6751617789268494 0 1.0 0 0.0 0 0.0 0 0.0 1.354271650314331 0.08225411176681519 -0.2839455306529999 0.0 0.0 -1.0 0.032679468393325806 0.6737208366394043 0 1.0 0 0.0 0 0.0 0 0.0 1.258800745010376 0.0734853744506836 -0.2839455306529999 0.0 0.0 -1.0 0.08622920513153076 0.6439353227615356 0 1.0 0 0.0 0 0.0 0 0.0 1.2584939002990723 0.08225411176681519 -0.2839455306529999 0.0 0.0 -1.0 0.08704417943954468 0.6525783538818359 0 1.0 0 0.0 0 0.0 0 0.0 1.354271650314331 0.08225411176681519 -0.2839455306529999 0.0 0.0 -1.0 0.032679468393325806 0.6737208366394043 0 1.0 0 0.0 0 0.0 0 0.0 1.258800745010376 0.0734853744506836 -0.2839455306529999 0.0 0.0 -1.0 0.08622920513153076 0.6439353227615356 0 1.0 0 0.0 0 0.0 0 0.0 1.354271650314331 0.08225411176681519 -0.2839455306529999 0.0 0.0 -1.0 0.032679468393325806 0.6737208366394043 0 1.0 0 0.0 0 0.0 0 0.0 1.3554294109344482 0.08087494969367981 -0.2839455306529999 0.0 0.0 -1.0 0.0318661630153656 0.6723392009735107 0 1.0 0 0.0 0 0.0 0 0.0 1.258800745010376 0.0734853744506836 -0.2839455306529999 0.0 0.0 -1.0 0.08622920513153076 0.6439353227615356 0 1.0 0 0.0 0 0.0 0 0.0 1.3554294109344482 0.08087494969367981 -0.2839455306529999 0.0 0.0 -1.0 0.0318661630153656 0.6723392009735107 0 1.0 0 0.0 0 0.0 0 0.0 1.3567235469818115 0.07953956723213196 -0.2839455306529999 0.0 0.0 -1.0 0.030964285135269165 0.6710160970687866 0 1.0 0 0.0 0 0.0 0 0.0 1.258800745010376 0.0734853744506836 -0.2839455306529999 0.0 0.0 -1.0 0.08622920513153076 0.6439353227615356 0 1.0 0 0.0 0 0.0 0 0.0 1.3567235469818115 0.07953956723213196 -0.2839455306529999 0.0 0.0 -1.0 0.030964285135269165 0.6710160970687866 0 1.0 0 0.0 0 0.0 0 0.0 1.3581535816192627 0.07824796438217163 -0.2839455306529999 0.0 0.0 -1.0 0.029973596334457397 0.6697502732276917 0 1.0 0 0.0 0 0.0 0 0.0 1.258800745010376 0.0734853744506836 -0.2839455306529999 0.0 0.0 -1.0 0.08622920513153076 0.6439353227615356 0 1.0 0 0.0 0 0.0 0 0.0 1.3581535816192627 0.07824796438217163 -0.2839455306529999 0.0 0.0 -1.0 0.029973596334457397 0.6697502732276917 0 1.0 0 0.0 0 0.0 0 0.0 1.35971999168396 0.07700017094612122 -0.2839455306529999 0.0 0.0 -1.0 0.02889317274093628 0.6685408353805542 0 1.0 0 0.0 0 0.0 0 0.0 1.258800745010376 0.0734853744506836 -0.2839455306529999 0.0 0.0 -1.0 0.08622920513153076 0.6439353227615356 0 1.0 0 0.0 0 0.0 0 0.0 1.35971999168396 0.07700017094612122 -0.2839455306529999 0.0 0.0 -1.0 0.02889317274093628 0.6685408353805542 0 1.0 0 0.0 0 0.0 0 0.0 1.362391710281372 0.07530966401100159 -0.2839455306529999 0.0 0.0 -1.0 0.02706146240234375 0.6669514179229736 0 1.0 0 0.0 0 0.0 0 0.0 1.258800745010376 0.0734853744506836 -0.2839455306529999 0.0 0.0 -1.0 0.08622920513153076 0.6439353227615356 0 1.0 0 0.0 0 0.0 0 0.0 1.362391710281372 0.07530966401100159 -0.2839455306529999 0.0 0.0 -1.0 0.02706146240234375 0.6669514179229736 0 1.0 0 0.0 0 0.0 0 0.0 1.3659708499908447 0.07350727915763855 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.0246143639087677 0.6653087139129639 0 1.0 0 0.0 0 0.0 0 0.0 1.258800745010376 0.0734853744506836 -0.2839455306529999 0.0 0.0 -1.0 0.08622920513153076 0.6439353227615356 0 1.0 0 0.0 0 0.0 0 0.0 1.3659708499908447 0.07350727915763855 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.0246143639087677 0.6653087139129639 0 1.0 0 0.0 0 0.0 0 0.0 1.370457410812378 0.07159298658370972 -0.2839455306529999 0.0 0.0 -1.0 0.021543771028518677 0.6635836362838745 0 1.0 0 0.0 0 0.0 0 0.0 1.2597200870513916 0.06504258513450623 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08516228199005127 0.6356387138366699 0 1.0 0 0.0 0 0.0 0 0.0 1.258800745010376 0.0734853744506836 -0.2839455306529999 0.0 0.0 -1.0 0.08622920513153076 0.6439353227615356 0 1.0 0 0.0 0 0.0 0 0.0 1.370457410812378 0.07159298658370972 -0.2839455306529999 0.0 0.0 -1.0 0.021543771028518677 0.6635836362838745 0 1.0 0 0.0 0 0.0 0 0.0 1.2597200870513916 0.06504258513450623 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08516228199005127 0.6356387138366699 0 1.0 0 0.0 0 0.0 0 0.0 1.370457410812378 0.07159298658370972 -0.2839455306529999 0.0 0.0 -1.0 0.021543771028518677 0.6635836362838745 0 1.0 0 0.0 0 0.0 0 0.0 1.3758513927459717 0.06956681609153748 -0.2839455306529999 0.0 0.0 -1.0 0.017840862274169922 0.6617412567138672 0 1.0 0 0.0 0 0.0 0 0.0 1.2597200870513916 0.06504258513450623 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08516228199005127 0.6356387138366699 0 1.0 0 0.0 0 0.0 0 0.0 1.3758513927459717 0.06956681609153748 -0.2839455306529999 0.0 0.0 -1.0 0.017840862274169922 0.6617412567138672 0 1.0 0 0.0 0 0.0 0 0.0 1.3821523189544678 0.06742876768112183 -0.2839455306529999 0.0 0.0 -1.0 0.013497740030288696 0.6597400307655334 0 1.0 0 0.0 0 0.0 0 0.0 1.2597200870513916 0.06504258513450623 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08516228199005127 0.6356387138366699 0 1.0 0 0.0 0 0.0 0 0.0 1.3821523189544678 0.06742876768112183 -0.2839455306529999 0.0 0.0 -1.0 0.013497740030288696 0.6597400307655334 0 1.0 0 0.0 0 0.0 0 0.0 1.3893606662750244 0.06517881155014038 -0.2839455306529999 0.0 0.0 -1.0 0.008508294820785522 0.6575323343276978 0 1.0 0 0.0 0 0.0 0 0.0 1.2597200870513916 0.06504258513450623 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08516228199005127 0.6356387138366699 0 1.0 0 0.0 0 0.0 0 0.0 1.3893606662750244 0.06517881155014038 -0.2839455306529999 0.0 0.0 -1.0 0.008508294820785522 0.6575323343276978 0 1.0 0 0.0 0 0.0 0 0.0 1.3974764347076416 0.06281697750091553 -0.2839455306529999 0.0 0.0 -1.0 0.002871215343475342 0.6550651788711548 0 1.0 0 0.0 0 0.0 0 0.0 1.2612524032592773 0.05692572891712189 -0.2839455306529999 0.0 0.0 -1.0 0.08384203910827637 0.6276835203170776 0 1.0 0 0.0 0 0.0 0 0.0 1.2597200870513916 0.06504258513450623 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08516228199005127 0.6356387138366699 0 1.0 0 0.0 0 0.0 0 0.0 1.3974764347076416 0.06281697750091553 -0.2839455306529999 0.0 0.0 -1.0 0.002871215343475342 0.6550651788711548 0 1.0 0 0.0 0 0.0 0 0.0 1.2612524032592773 0.05692572891712189 -0.2839455306529999 0.0 0.0 -1.0 1.0838420391082764 0.6276835203170776 0 1.0 0 0.0 0 0.0 0 0.0 1.3974764347076416 0.06281697750091553 -0.2839455306529999 0.0 0.0 -1.0 1.0028712749481201 0.6550651788711548 0 1.0 0 0.0 0 0.0 0 0.0 1.4064991474151611 0.06034325063228607 -0.2839455306529999 0.0 0.0 -1.0 0.99659264087677 0.6522814631462097 0 1.0 0 0.0 0 0.0 0 0.0 1.2612524032592773 0.05692572891712189 -0.2839455306529999 0.0 0.0 -1.0 1.0838420391082764 0.6276835203170776 0 1.0 0 0.0 0 0.0 0 0.0 1.4064991474151611 0.06034325063228607 -0.2839455306529999 0.0 0.0 -1.0 0.99659264087677 0.6522814631462097 0 1.0 0 0.0 0 0.0 0 0.0 1.4164292812347412 0.057757630944252014 -0.2839455306529999 0.0 0.0 -1.0 0.9896879196166992 0.6491220593452454 0 1.0 0 0.0 0 0.0 0 0.0 1.2612524032592773 0.05692572891712189 -0.2839455306529999 0.0 0.0 -1.0 1.0838420391082764 0.6276835203170776 0 1.0 0 0.0 0 0.0 0 0.0 1.4164292812347412 0.057757630944252014 -0.2839455306529999 0.0 0.0 -1.0 0.9896879196166992 0.6491220593452454 0 1.0 0 0.0 0 0.0 0 0.0 1.4272668361663818 0.055060118436813354 -0.2839455306529999 0.0 0.0 -1.0 0.9821848273277283 0.6455293893814087 0 1.0 0 0.0 0 0.0 0 0.0 1.2633976936340332 0.04913482069969177 -0.2839455306529999 0.0 0.0 -1.0 1.0822651386260986 0.6200631856918335 0 1.0 0 0.0 0 0.0 0 0.0 1.2612524032592773 0.05692572891712189 -0.2839455306529999 0.0 0.0 -1.0 1.0838420391082764 0.6276835203170776 0 1.0 0 0.0 0 0.0 0 0.0 1.4272668361663818 0.055060118436813354 -0.2839455306529999 0.0 0.0 -1.0 0.9821848273277283 0.6455293893814087 0 1.0 0 0.0 0 0.0 0 0.0 1.2633976936340332 0.04913482069969177 -0.2839455306529999 0.0 0.0 -1.0 1.0822651386260986 0.6200631856918335 0 1.0 0 0.0 0 0.0 0 0.0 1.4272668361663818 0.055060118436813354 -0.2839455306529999 0.0 0.0 -1.0 0.9821848273277283 0.6455293893814087 0 1.0 0 0.0 0 0.0 0 0.0 1.439011812210083 0.05225071310997009 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9741263389587402 0.6414514780044556 0 1.0 0 0.0 0 0.0 0 0.0 1.2633976936340332 0.04913482069969177 -0.2839455306529999 0.0 0.0 -1.0 1.0822651386260986 0.6200631856918335 0 1.0 0 0.0 0 0.0 0 0.0 1.439011812210083 0.05225071310997009 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9741263389587402 0.6414514780044556 0 1.0 0 0.0 0 0.0 0 0.0 1.4516637325286865 0.04932942986488342 -0.2839455306529999 0.0 0.0 -1.0 0.9655718803405762 0.6368474364280701 0 1.0 0 0.0 0 0.0 0 0.0 1.2633976936340332 0.04913482069969177 -0.2839455306529999 0.0 0.0 -1.0 1.0822651386260986 0.6200631856918335 0 1.0 0 0.0 0 0.0 0 0.0 1.4516637325286865 0.04932942986488342 -0.2839455306529999 0.0 0.0 -1.0 0.9655718803405762 0.6368474364280701 0 1.0 0 0.0 0 0.0 0 0.0 1.464440107345581 0.04629625380039215 -0.2839455306529999 0.0 0.0 -1.0 0.9571168422698975 0.6317853927612305 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 0.04166984558105469 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0804260969161987 0.6127701997756958 0 1.0 0 0.0 0 0.0 0 0.0 1.2633976936340332 0.04913482069969177 -0.2839455306529999 0.0 0.0 -1.0 1.0822651386260986 0.6200631856918335 0 1.0 0 0.0 0 0.0 0 0.0 1.464440107345581 0.04629625380039215 -0.2839455306529999 0.0 0.0 -1.0 0.9571168422698975 0.6317853927612305 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 0.04166984558105469 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0804260969161987 0.6127701997756958 0 1.0 0 0.0 0 0.0 0 0.0 1.464440107345581 0.04629625380039215 -0.2839455306529999 0.0 0.0 -1.0 0.9571168422698975 0.6317853927612305 0 1.0 0 0.0 0 0.0 0 0.0 1.4765570163726807 0.04315118491649628 -0.2839455306529999 0.0 0.0 -1.0 0.949317455291748 0.6264196634292603 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 0.04166984558105469 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0804260969161987 0.6127701997756958 0 1.0 0 0.0 0 0.0 0 0.0 1.4765570163726807 0.04315118491649628 -0.2839455306529999 0.0 0.0 -1.0 0.949317455291748 0.6264196634292603 0 1.0 0 0.0 0 0.0 0 0.0 1.4880144596099854 0.0398942232131958 -0.2839455306529999 0.0 0.0 -1.0 0.9421727657318115 0.6208406090736389 0 1.0 0 0.0 0 0.0 0 0.0 1.2695271968841553 0.034530818462371826 -0.2839455306529999 0.0 0.0 -1.0 1.078317642211914 0.6057960987091064 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 0.04166984558105469 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0804260969161987 0.6127701997756958 0 1.0 0 0.0 0 0.0 0 0.0 1.4880144596099854 0.0398942232131958 -0.2839455306529999 0.0 0.0 -1.0 0.9421727657318115 0.6208406090736389 0 1.0 0 0.0 0 0.0 0 0.0 1.2695271968841553 0.034530818462371826 -0.2839455306529999 0.0 0.0 -1.0 1.078317642211914 0.6057960987091064 0 1.0 0 0.0 0 0.0 0 0.0 1.4880144596099854 0.0398942232131958 -0.2839455306529999 0.0 0.0 -1.0 0.9421727657318115 0.6208406090736389 0 1.0 0 0.0 0 0.0 0 0.0 1.4988129138946533 0.036525383591651917 -0.2839455306529999 0.0 0.0 -1.0 0.9356687068939209 0.6151248216629028 0 1.0 0 0.0 0 0.0 0 0.0 1.2695271968841553 0.034530818462371826 -0.2839455306529999 0.0 0.0 -1.0 1.078317642211914 0.6057960987091064 0 1.0 0 0.0 0 0.0 0 0.0 1.4988129138946533 0.036525383591651917 -0.2839455306529999 0.0 0.0 -1.0 0.9356687068939209 0.6151248216629028 0 1.0 0 0.0 0 0.0 0 0.0 1.5089523792266846 0.03304465115070343 -0.2839455306529999 0.0 0.0 -1.0 0.9297826290130615 0.6093347072601318 0 1.0 0 0.0 0 0.0 0 0.0 1.2735114097595215 0.027717724442481995 -0.2839455306529999 0.0 0.0 -1.0 1.0759305953979492 0.5991321802139282 0 1.0 0 0.0 0 0.0 0 0.0 1.2695271968841553 0.034530818462371826 -0.2839455306529999 0.0 0.0 -1.0 1.078317642211914 0.6057960987091064 0 1.0 0 0.0 0 0.0 0 0.0 1.5089523792266846 0.03304465115070343 -0.2839455306529999 0.0 0.0 -1.0 0.9297826290130615 0.6093347072601318 0 1.0 0 0.0 0 0.0 0 0.0 1.2735114097595215 0.027717724442481995 -0.2839455306529999 0.0 0.0 -1.0 1.0759305953979492 0.5991321802139282 0 1.0 0 0.0 0 0.0 0 0.0 1.5089523792266846 0.03304465115070343 -0.2839455306529999 0.0 0.0 -1.0 0.9297826290130615 0.6093347072601318 0 1.0 0 0.0 0 0.0 0 0.0 1.518432855606079 0.029452025890350342 -0.2839455306529999 0.0 0.0 -1.0 0.9244864583015442 0.6035186052322388 0 1.0 0 0.0 0 0.0 0 0.0 1.2735114097595215 0.027717724442481995 -0.2839455306529999 0.0 0.0 -1.0 1.0759305953979492 0.5991321802139282 0 1.0 0 0.0 0 0.0 0 0.0 1.518432855606079 0.029452025890350342 -0.2839455306529999 0.0 0.0 -1.0 0.9244864583015442 0.6035186052322388 0 1.0 0 0.0 0 0.0 0 0.0 1.5272538661956787 0.02574750781059265 -0.2839455306529999 0.0 0.0 -1.0 0.9197492003440857 0.5977128744125366 0 1.0 0 0.0 0 0.0 0 0.0 1.2781085968017578 0.021230563521385193 -0.2839455306529999 0.0 0.0 -1.0 1.0732536315917969 0.5927698612213135 0 1.0 0 0.0 0 0.0 0 0.0 1.2735114097595215 0.027717724442481995 -0.2839455306529999 0.0 0.0 -1.0 1.0759305953979492 0.5991321802139282 0 1.0 0 0.0 0 0.0 0 0.0 1.5272538661956787 0.02574750781059265 -0.2839455306529999 0.0 0.0 -1.0 0.9197492003440857 0.5977128744125366 0 1.0 0 0.0 0 0.0 0 0.0 1.2781085968017578 0.021230563521385193 -0.2839455306529999 0.0 0.0 -1.0 1.0732536315917969 0.5927698612213135 0 1.0 0 0.0 0 0.0 0 0.0 1.5272538661956787 0.02574750781059265 -0.2839455306529999 0.0 0.0 -1.0 0.9197492003440857 0.5977128744125366 0 1.0 0 0.0 0 0.0 0 0.0 1.5354154109954834 0.02193109691143036 -0.2839455306529999 0.0 0.0 -1.0 0.9155389070510864 0.5919426679611206 0 1.0 0 0.0 0 0.0 0 0.0 1.2781085968017578 0.021230563521385193 -0.2839455306529999 0.0 0.0 -1.0 1.0732536315917969 0.5927698612213135 0 1.0 0 0.0 0 0.0 0 0.0 1.5354154109954834 0.02193109691143036 -0.2839455306529999 0.0 0.0 -1.0 0.9155389070510864 0.5919426679611206 0 1.0 0 0.0 0 0.0 0 0.0 1.5429184436798096 0.018002808094024658 -0.2839455306529999 0.0 0.0 -1.0 0.9118235111236572 0.5862239599227905 0 1.0 0 0.0 0 0.0 0 0.0 1.2833187580108643 0.015069350600242615 -0.2839455306529999 0.0 0.0 -1.0 1.070273995399475 0.5867006778717041 0 1.0 0 0.0 0 0.0 0 0.0 1.2781085968017578 0.021230563521385193 -0.2839455306529999 0.0 0.0 -1.0 1.0732536315917969 0.5927698612213135 0 1.0 0 0.0 0 0.0 0 0.0 1.5429184436798096 0.018002808094024658 -0.2839455306529999 0.0 0.0 -1.0 0.9118235111236572 0.5862239599227905 0 1.0 0 0.0 0 0.0 0 0.0 1.2833187580108643 0.015069350600242615 -0.2839455306529999 0.0 0.0 -1.0 1.070273995399475 0.5867006778717041 0 1.0 0 0.0 0 0.0 0 0.0 1.5429184436798096 0.018002808094024658 -0.2839455306529999 0.0 0.0 -1.0 0.9118235111236572 0.5862239599227905 0 1.0 0 0.0 0 0.0 0 0.0 1.5497620105743408 0.013962626457214355 -0.2839455306529999 0.0 0.0 -1.0 0.9085736274719238 0.5805654525756836 0 1.0 0 0.0 0 0.0 0 0.0 1.2891418933868408 0.009234070777893066 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0669773817062378 0.5809162855148315 0 1.0 0 0.0 0 0.0 0 0.0 1.2833187580108643 0.015069350600242615 -0.2839455306529999 0.0 0.0 -1.0 1.070273995399475 0.5867006778717041 0 1.0 0 0.0 0 0.0 0 0.0 1.5497620105743408 0.013962626457214355 -0.2839455306529999 0.0 0.0 -1.0 0.9085736274719238 0.5805654525756836 0 1.0 0 0.0 0 0.0 0 0.0 1.2891418933868408 0.009234070777893066 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0669773817062378 0.5809162855148315 0 1.0 0 0.0 0 0.0 0 0.0 1.5497620105743408 0.013962626457214355 -0.2839455306529999 0.0 0.0 -1.0 0.9085736274719238 0.5805654525756836 0 1.0 0 0.0 0 0.0 0 0.0 1.5559461116790771 0.00981055200099945 -0.2839455306529999 0.0 0.0 -1.0 0.9057615399360657 0.574970006942749 0 1.0 0 0.0 0 0.0 0 0.0 1.2891418933868408 0.009234070777893066 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0669773817062378 0.5809162855148315 0 1.0 0 0.0 0 0.0 0 0.0 1.5559461116790771 0.00981055200099945 -0.2839455306529999 0.0 0.0 -1.0 0.9057615399360657 0.574970006942749 0 1.0 0 0.0 0 0.0 0 0.0 1.5614712238311768 0.005546584725379944 -0.2839455306529999 0.0 0.0 -1.0 0.9033616185188293 0.5694353580474854 0 1.0 0 0.0 0 0.0 0 0.0 1.2955777645111084 0.0037247389554977417 -0.2839455306529999 0.0 0.0 -1.0 1.0633478164672852 0.5754095315933228 0 1.0 0 0.0 0 0.0 0 0.0 1.2891418933868408 0.009234070777893066 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0669773817062378 0.5809162855148315 0 1.0 0 0.0 0 0.0 0 0.0 1.5614712238311768 0.005546584725379944 -0.2839455306529999 0.0 0.0 -1.0 0.9033616185188293 0.5694353580474854 0 1.0 0 0.0 0 0.0 0 0.0 1.2955777645111084 0.0037247389554977417 -0.2839455306529999 0.0 0.0 -1.0 1.0633478164672852 0.5754095315933228 0 1.0 0 0.0 0 0.0 0 0.0 1.5614712238311768 0.005546584725379944 -0.2839455306529999 0.0 0.0 -1.0 0.9033616185188293 0.5694353580474854 0 1.0 0 0.0 0 0.0 0 0.0 1.5663940906524658 0.0010247975587844849 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9013361930847168 0.5637887716293335 0 1.0 0 0.0 0 0.0 0 0.0 1.3026268482208252 -0.0014586597681045532 -0.2839455306529999 0.0 0.0 -1.0 1.0593676567077637 0.5701737403869629 0 1.0 0 0.0 0 0.0 0 0.0 1.2955777645111084 0.0037247389554977417 -0.2839455306529999 0.0 0.0 -1.0 1.0633478164672852 0.5754095315933228 0 1.0 0 0.0 0 0.0 0 0.0 1.5663940906524658 0.0010247975587844849 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9013361930847168 0.5637887716293335 0 1.0 0 0.0 0 0.0 0 0.0 1.3026268482208252 -0.0014586597681045532 -0.2839455306529999 0.0 0.0 -1.0 1.0593676567077637 0.5701737403869629 0 1.0 0 0.0 0 0.0 0 0.0 1.5663940906524658 0.0010247975587844849 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9013361930847168 0.5637887716293335 0 1.0 0 0.0 0 0.0 0 0.0 1.5708892345428467 -0.0037840157747268677 -0.2839455306529999 0.0 0.0 -1.0 0.8995866775512695 0.5579736828804016 0 1.0 0 0.0 0 0.0 0 0.0 1.3085453510284424 -0.005109667778015137 -0.2839455306529999 0.0 0.0 -1.0 1.0560197830200195 0.5664651393890381 0 1.0 0 0.0 0 0.0 0 0.0 1.3026268482208252 -0.0014586597681045532 -0.2839455306529999 0.0 0.0 -1.0 1.0593676567077637 0.5701737403869629 0 1.0 0 0.0 0 0.0 0 0.0 1.5708892345428467 -0.0037840157747268677 -0.2839455306529999 0.0 0.0 -1.0 0.8995866775512695 0.5579736828804016 0 1.0 0 0.0 0 0.0 0 0.0 1.3085453510284424 -0.005109667778015137 -0.2839455306529999 0.0 0.0 -1.0 1.0560197830200195 0.5664651393890381 0 1.0 0 0.0 0 0.0 0 0.0 1.5708892345428467 -0.0037840157747268677 -0.2839455306529999 0.0 0.0 -1.0 0.8995866775512695 0.5579736828804016 0 1.0 0 0.0 0 0.0 0 0.0 1.5749561786651611 -0.008879855275154114 -0.2839455306529999 0.0 0.0 -1.0 0.8981013298034668 0.5519905090332031 0 1.0 0 0.0 0 0.0 0 0.0 1.3156745433807373 -0.00882391631603241 -0.2839455306529999 0.0 0.0 -1.0 1.0519672632217407 0.5626709461212158 0 1.0 0 0.0 0 0.0 0 0.0 1.3085453510284424 -0.005109667778015137 -0.2839455306529999 0.0 0.0 -1.0 1.0560197830200195 0.5664651393890381 0 1.0 0 0.0 0 0.0 0 0.0 1.5749561786651611 -0.008879855275154114 -0.2839455306529999 0.0 0.0 -1.0 0.8981013298034668 0.5519905090332031 0 1.0 0 0.0 0 0.0 0 0.0 1.3240149021148682 -0.012601405382156372 -0.2839455306529999 0.0 0.0 -1.0 1.0471773147583008 0.5587553977966309 0 1.0 0 0.0 0 0.0 0 0.0 1.3156745433807373 -0.00882391631603241 -0.2839455306529999 0.0 0.0 -1.0 1.0519672632217407 0.5626709461212158 0 1.0 0 0.0 0 0.0 0 0.0 1.5749561786651611 -0.008879855275154114 -0.2839455306529999 0.0 0.0 -1.0 0.8981013298034668 0.5519905090332031 0 1.0 0 0.0 0 0.0 0 0.0 1.3240149021148682 -0.012601405382156372 -0.2839455306529999 0.0 0.0 -1.0 1.0471773147583008 0.5587553977966309 0 1.0 0 0.0 0 0.0 0 0.0 1.5749561786651611 -0.008879855275154114 -0.2839455306529999 0.0 0.0 -1.0 0.8981013298034668 0.5519905090332031 0 1.0 0 0.0 0 0.0 0 0.0 1.5785949230194092 -0.01426270604133606 -0.2839455306529999 0.0 0.0 -1.0 0.8968690633773804 0.5458383560180664 0 1.0 0 0.0 0 0.0 0 0.0 1.3335669040679932 -0.016442134976387024 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0416150093078613 0.554681658744812 0 1.0 0 0.0 0 0.0 0 0.0 1.3240149021148682 -0.012601405382156372 -0.2839455306529999 0.0 0.0 -1.0 1.0471773147583008 0.5587553977966309 0 1.0 0 0.0 0 0.0 0 0.0 1.5785949230194092 -0.01426270604133606 -0.2839455306529999 0.0 0.0 -1.0 0.8968690633773804 0.5458383560180664 0 1.0 0 0.0 0 0.0 0 0.0 1.3335669040679932 -0.016442134976387024 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0416150093078613 0.554681658744812 0 1.0 0 0.0 0 0.0 0 0.0 1.5785949230194092 -0.01426270604133606 -0.2839455306529999 0.0 0.0 -1.0 0.8968690633773804 0.5458383560180664 0 1.0 0 0.0 0 0.0 0 0.0 1.581805944442749 -0.0199325829744339 -0.2839455306529999 0.0 0.0 -1.0 0.8958801031112671 0.5395151972770691 0 1.0 0 0.0 0 0.0 0 0.0 1.344330072402954 -0.020346105098724365 -0.2839455306529999 0.0 0.0 -1.0 1.035246729850769 0.5504133701324463 0 1.0 0 0.0 0 0.0 0 0.0 1.3335669040679932 -0.016442134976387024 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0416150093078613 0.554681658744812 0 1.0 0 0.0 0 0.0 0 0.0 1.581805944442749 -0.0199325829744339 -0.2839455306529999 0.0 0.0 -1.0 0.8958801031112671 0.5395151972770691 0 1.0 0 0.0 0 0.0 0 0.0 1.344330072402954 -0.020346105098724365 -0.2839455306529999 0.0 0.0 -1.0 1.035246729850769 0.5504133701324463 0 1.0 0 0.0 0 0.0 0 0.0 1.581805944442749 -0.0199325829744339 -0.2839455306529999 0.0 0.0 -1.0 0.8958801031112671 0.5395151972770691 0 1.0 0 0.0 0 0.0 0 0.0 1.5845882892608643 -0.025889486074447632 -0.2839455306529999 0.0 0.0 -1.0 0.8951258659362793 0.5330184698104858 0 1.0 0 0.0 0 0.0 0 0.0 1.3563048839569092 -0.024313315749168396 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0280433893203735 0.545917272567749 0 1.0 0 0.0 0 0.0 0 0.0 1.344330072402954 -0.020346105098724365 -0.2839455306529999 0.0 0.0 -1.0 1.035246729850769 0.5504133701324463 0 1.0 0 0.0 0 0.0 0 0.0 1.5845882892608643 -0.025889486074447632 -0.2839455306529999 0.0 0.0 -1.0 0.8951258659362793 0.5330184698104858 0 1.0 0 0.0 0 0.0 0 0.0 1.3694908618927002 -0.028343766927719116 -0.2839455306529999 0.0 0.0 -1.0 1.0199857950210571 0.541165828704834 0 1.0 0 0.0 0 0.0 0 0.0 1.3563048839569092 -0.024313315749168396 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0280433893203735 0.545917272567749 0 1.0 0 0.0 0 0.0 0 0.0 1.5845882892608643 -0.025889486074447632 -0.2839455306529999 0.0 0.0 -1.0 0.8951258659362793 0.5330184698104858 0 1.0 0 0.0 0 0.0 0 0.0 1.3694908618927002 -0.028343766927719116 -0.2839455306529999 0.0 0.0 -1.0 1.0199857950210571 0.541165828704834 0 1.0 0 0.0 0 0.0 0 0.0 1.5845882892608643 -0.025889486074447632 -0.2839455306529999 0.0 0.0 -1.0 0.8951258659362793 0.5330184698104858 0 1.0 0 0.0 0 0.0 0 0.0 1.5869429111480713 -0.032133400440216064 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8945986032485962 0.5263450145721436 0 1.0 0 0.0 0 0.0 0 0.0 1.3838880062103271 -0.032437458634376526 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0110712051391602 0.5361419320106506 0 1.0 0 0.0 0 0.0 0 0.0 1.3694908618927002 -0.028343766927719116 -0.2839455306529999 0.0 0.0 -1.0 1.0199857950210571 0.541165828704834 0 1.0 0 0.0 0 0.0 0 0.0 1.5869429111480713 -0.032133400440216064 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8945986032485962 0.5263450145721436 0 1.0 0 0.0 0 0.0 0 0.0 1.3838880062103271 -0.032437458634376526 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0110712051391602 0.5361419320106506 0 1.0 0 0.0 0 0.0 0 0.0 1.5869429111480713 -0.032133400440216064 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8945986032485962 0.5263450145721436 0 1.0 0 0.0 0 0.0 0 0.0 1.588869333267212 -0.03866434097290039 -0.2839455306529999 0.0 0.0 -1.0 0.8942915797233582 0.5194913744926453 0 1.0 0 0.0 0 0.0 0 0.0 1.3994967937469482 -0.036594390869140625 -0.2839455306529999 0.0 0.0 -1.0 1.0013197660446167 0.5308443307876587 0 1.0 0 0.0 0 0.0 0 0.0 1.3838880062103271 -0.032437458634376526 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0110712051391602 0.5361419320106506 0 1.0 0 0.0 0 0.0 0 0.0 1.588869333267212 -0.03866434097290039 -0.2839455306529999 0.0 0.0 -1.0 0.8942915797233582 0.5194913744926453 0 1.0 0 0.0 0 0.0 0 0.0 1.4163167476654053 -0.040814563632011414 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9907829761505127 0.5252926349639893 0 1.0 0 0.0 0 0.0 0 0.0 1.3994967937469482 -0.036594390869140625 -0.2839455306529999 0.0 0.0 -1.0 1.0013197660446167 0.5308443307876587 0 1.0 0 0.0 0 0.0 0 0.0 1.588869333267212 -0.03866434097290039 -0.2839455306529999 0.0 0.0 -1.0 0.8942915797233582 0.5194913744926453 0 1.0 0 0.0 0 0.0 0 0.0 1.4163167476654053 -0.040814563632011414 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9907829761505127 0.5252926349639893 0 1.0 0 0.0 0 0.0 0 0.0 1.588869333267212 -0.03866434097290039 -0.2839455306529999 0.0 0.0 -1.0 0.8942915797233582 0.5194913744926453 0 1.0 0 0.0 0 0.0 0 0.0 1.5903680324554443 -0.04548230767250061 -0.2839455306529999 0.0 0.0 -1.0 0.8941991329193115 0.5124543905258179 0 1.0 0 0.0 0 0.0 0 0.0 1.4343478679656982 -0.045097991824150085 -0.2839455306529999 0.0 0.0 -1.0 0.9795480966567993 0.5195319652557373 0 1.0 0 0.0 0 0.0 0 0.0 1.4163167476654053 -0.040814563632011414 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9907829761505127 0.5252926349639893 0 1.0 0 0.0 0 0.0 0 0.0 1.5903680324554443 -0.04548230767250061 -0.2839455306529999 0.0 0.0 -1.0 0.8941991329193115 0.5124543905258179 0 1.0 0 0.0 0 0.0 0 0.0 1.4535901546478271 -0.04944466054439545 -0.2839455306529999 0.0 0.0 -1.0 0.9677410125732422 0.513634443283081 0 1.0 0 0.0 0 0.0 0 0.0 1.4343478679656982 -0.045097991824150085 -0.2839455306529999 0.0 0.0 -1.0 0.9795480966567993 0.5195319652557373 0 1.0 0 0.0 0 0.0 0 0.0 1.5903680324554443 -0.04548230767250061 -0.2839455306529999 0.0 0.0 -1.0 0.8941991329193115 0.5124543905258179 0 1.0 0 0.0 0 0.0 0 0.0 1.4535901546478271 -0.04944466054439545 -0.2839455306529999 0.0 0.0 -1.0 0.9677410125732422 0.513634443283081 0 1.0 0 0.0 0 0.0 0 0.0 1.5903680324554443 -0.04548230767250061 -0.2839455306529999 0.0 0.0 -1.0 0.8941991329193115 0.5124543905258179 0 1.0 0 0.0 0 0.0 0 0.0 1.5914380550384521 -0.05258728563785553 -0.2839455306529999 0.0 0.0 -1.0 0.8943167924880981 0.5052310228347778 0 1.0 0 0.0 0 0.0 0 0.0 1.4577252864837646 -0.05044436454772949 -0.2839455306529999 0.0 0.0 -1.0 0.9652423858642578 0.5122944116592407 0 1.0 0 0.0 0 0.0 0 0.0 1.4535901546478271 -0.04944466054439545 -0.2839455306529999 0.0 0.0 -1.0 0.9677410125732422 0.513634443283081 0 1.0 0 0.0 0 0.0 0 0.0 1.5914380550384521 -0.05258728563785553 -0.2839455306529999 0.0 0.0 -1.0 0.8943167924880981 0.5052310228347778 0 1.0 0 0.0 0 0.0 0 0.0 1.4616072177886963 -0.05145867168903351 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9629137516021729 0.5109500885009766 0 1.0 0 0.0 0 0.0 0 0.0 1.4577252864837646 -0.05044436454772949 -0.2839455306529999 0.0 0.0 -1.0 0.9652423858642578 0.5122944116592407 0 1.0 0 0.0 0 0.0 0 0.0 1.5914380550384521 -0.05258728563785553 -0.2839455306529999 0.0 0.0 -1.0 0.8943167924880981 0.5052310228347778 0 1.0 0 0.0 0 0.0 0 0.0 1.4652364253997803 -0.0524875670671463 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9607535004615784 0.5096025466918945 0 1.0 0 0.0 0 0.0 0 0.0 1.4616072177886963 -0.05145867168903351 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9629137516021729 0.5109500885009766 0 1.0 0 0.0 0 0.0 0 0.0 1.5914380550384521 -0.05258728563785553 -0.2839455306529999 0.0 0.0 -1.0 0.8943167924880981 0.5052310228347778 0 1.0 0 0.0 0 0.0 0 0.0 1.4686124324798584 -0.05353105068206787 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.9587600827217102 0.5082523822784424 0 1.0 0 0.0 0 0.0 0 0.0 1.4652364253997803 -0.0524875670671463 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9607535004615784 0.5096025466918945 0 1.0 0 0.0 0 0.0 0 0.0 1.5914380550384521 -0.05258728563785553 -0.2839455306529999 0.0 0.0 -1.0 0.8943167924880981 0.5052310228347778 0 1.0 0 0.0 0 0.0 0 0.0 1.4686124324798584 -0.05353105068206787 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.9587600827217102 0.5082523822784424 0 1.0 0 0.0 0 0.0 0 0.0 1.5914380550384521 -0.05258728563785553 -0.2839455306529999 0.0 0.0 -1.0 0.8943167924880981 0.5052310228347778 0 1.0 0 0.0 0 0.0 0 0.0 1.5920803546905518 -0.05997928977012634 -0.2839455306529999 0.0 0.0 -1.0 0.894640326499939 0.4978189468383789 0 1.0 0 0.0 0 0.0 0 0.0 1.4717357158660889 -0.05458913743495941 -0.2839455306529999 0.0 0.0 -1.0 0.9569313526153564 0.5069000720977783 0 1.0 0 0.0 0 0.0 0 0.0 1.4686124324798584 -0.05353105068206787 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.9587600827217102 0.5082523822784424 0 1.0 0 0.0 0 0.0 0 0.0 1.5920803546905518 -0.05997928977012634 -0.2839455306529999 0.0 0.0 -1.0 0.894640326499939 0.4978189468383789 0 1.0 0 0.0 0 0.0 0 0.0 1.4746057987213135 -0.05566181242465973 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.9552655220031738 0.5055458545684814 0 1.0 0 0.0 0 0.0 0 0.0 1.4717357158660889 -0.05458913743495941 -0.2839455306529999 0.0 0.0 -1.0 0.9569313526153564 0.5069000720977783 0 1.0 0 0.0 0 0.0 0 0.0 1.5920803546905518 -0.05997928977012634 -0.2839455306529999 0.0 0.0 -1.0 0.894640326499939 0.4978189468383789 0 1.0 0 0.0 0 0.0 0 0.0 1.4772231578826904 -0.05674909055233002 -0.2839455306529999 0.0 0.0 -1.0 0.9537605047225952 0.5041895508766174 0 1.0 0 0.0 0 0.0 0 0.0 1.4746057987213135 -0.05566181242465973 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.9552655220031738 0.5055458545684814 0 1.0 0 0.0 0 0.0 0 0.0 1.5920803546905518 -0.05997928977012634 -0.2839455306529999 0.0 0.0 -1.0 0.894640326499939 0.4978189468383789 0 1.0 0 0.0 0 0.0 0 0.0 1.4795873165130615 -0.05785095691680908 -0.2839455306529999 0.0 0.0 -1.0 0.9524144530296326 0.502831220626831 0 1.0 0 0.0 0 0.0 0 0.0 1.4772231578826904 -0.05674909055233002 -0.2839455306529999 0.0 0.0 -1.0 0.9537605047225952 0.5041895508766174 0 1.0 0 0.0 0 0.0 0 0.0 1.5920803546905518 -0.05997928977012634 -0.2839455306529999 0.0 0.0 -1.0 0.894640326499939 0.4978189468383789 0 1.0 0 0.0 0 0.0 0 0.0 1.481698751449585 -0.05896741896867752 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9512251019477844 0.5014703273773193 0 1.0 0 0.0 0 0.0 0 0.0 1.4795873165130615 -0.05785095691680908 -0.2839455306529999 0.0 0.0 -1.0 0.9524144530296326 0.502831220626831 0 1.0 0 0.0 0 0.0 0 0.0 1.5920803546905518 -0.05997928977012634 -0.2839455306529999 0.0 0.0 -1.0 0.894640326499939 0.4978189468383789 0 1.0 0 0.0 0 0.0 0 0.0 1.4835569858551025 -0.06009847670793533 -0.2839455306529999 0.0 3.0518509447574615e-05 -0.999969482421875 0.9501909017562866 0.5001065731048584 0 1.0 0 0.0 0 0.0 0 0.0 1.481698751449585 -0.05896741896867752 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9512251019477844 0.5014703273773193 0 1.0 0 0.0 0 0.0 0 0.0 1.5920803546905518 -0.05997928977012634 -0.2839455306529999 0.0 0.0 -1.0 0.894640326499939 0.4978189468383789 0 1.0 0 0.0 0 0.0 0 0.0 1.4835569858551025 -0.06009847670793533 -0.2839455306529999 0.0 3.0518509447574615e-05 -0.999969482421875 0.9501909017562866 0.5001065731048584 0 1.0 0 0.0 0 0.0 0 0.0 1.5920803546905518 -0.05997928977012634 -0.2839455306529999 0.0 0.0 -1.0 0.894640326499939 0.4978189468383789 0 1.0 0 0.0 0 0.0 0 0.0 1.592294454574585 -0.06765832006931305 -0.2839455306529999 0.0 0.0 -1.0 0.8951667547225952 0.4902169108390808 0 1.0 0 0.0 0 0.0 0 0.0 1.4851624965667725 -0.06124413013458252 -0.2839455306529999 0.0 0.0 -1.0 0.9493098258972168 0.4987393021583557 0 1.0 0 0.0 0 0.0 0 0.0 1.4835569858551025 -0.06009847670793533 -0.2839455306529999 0.0 3.0518509447574615e-05 -0.999969482421875 0.9501909017562866 0.5001065731048584 0 1.0 0 0.0 0 0.0 0 0.0 1.592294454574585 -0.06765832006931305 -0.2839455306529999 0.0 0.0 -1.0 0.8951667547225952 0.4902169108390808 0 1.0 0 0.0 0 0.0 0 0.0 1.4865148067474365 -0.06240437924861908 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9485805034637451 0.49736785888671875 0 1.0 0 0.0 0 0.0 0 0.0 1.4851624965667725 -0.06124413013458252 -0.2839455306529999 0.0 0.0 -1.0 0.9493098258972168 0.4987393021583557 0 1.0 0 0.0 0 0.0 0 0.0 1.592294454574585 -0.06765832006931305 -0.2839455306529999 0.0 0.0 -1.0 0.8951667547225952 0.4902169108390808 0 1.0 0 0.0 0 0.0 0 0.0 1.4876339435577393 -0.06365705281496048 -0.2839455306529999 0.0 0.0 -1.0 0.9479937553405762 0.49590182304382324 0 1.0 0 0.0 0 0.0 0 0.0 1.4865148067474365 -0.06240437924861908 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9485805034637451 0.49736785888671875 0 1.0 0 0.0 0 0.0 0 0.0 1.592294454574585 -0.06765832006931305 -0.2839455306529999 0.0 0.0 -1.0 0.8951667547225952 0.4902169108390808 0 1.0 0 0.0 0 0.0 0 0.0 1.2448337078094482 -0.0778159350156784 -0.2839455306529999 0.0 0.0 -1.0 0.08192142844200134 0.48803091049194336 0 1.0 0 0.0 0 0.0 0 0.0 1.3436076641082764 -0.06275463849306107 -0.2839455306529999 0.0 0.0 -1.0 0.034252822399139404 0.5006027221679688 0 1.0 0 0.0 0 0.0 0 0.0 1.3447487354278564 -0.06744548678398132 -0.2839455306529999 0.0 0.0 -1.0 0.03346306085586548 0.4952545762062073 0 1.0 0 0.0 0 0.0 0 0.0 1.4886553287506104 -0.06496324390172958 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9474684596061707 0.49438297748565674 0 1.0 0 0.0 0 0.0 0 0.0 1.4876339435577393 -0.06365705281496048 -0.2839455306529999 0.0 0.0 -1.0 0.9479937553405762 0.49590182304382324 0 1.0 0 0.0 0 0.0 0 0.0 1.592294454574585 -0.06765832006931305 -0.2839455306529999 0.0 0.0 -1.0 0.8951667547225952 0.4902169108390808 0 1.0 0 0.0 0 0.0 0 0.0 1.4895799160003662 -0.0663229450583458 -0.2839455306529999 0.0 0.0 -1.0 0.9470036625862122 0.4928116202354431 0 1.0 0 0.0 0 0.0 0 0.0 1.4886553287506104 -0.06496324390172958 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9474684596061707 0.49438297748565674 0 1.0 0 0.0 0 0.0 0 0.0 1.592294454574585 -0.06765832006931305 -0.2839455306529999 0.0 0.0 -1.0 0.8951667547225952 0.4902169108390808 0 1.0 0 0.0 0 0.0 0 0.0 1.4904067516326904 -0.06773615628480911 -0.2839455306529999 0.0 0.0 -1.0 0.9465994834899902 0.4911881685256958 0 1.0 0 0.0 0 0.0 0 0.0 1.4895799160003662 -0.0663229450583458 -0.2839455306529999 0.0 0.0 -1.0 0.9470036625862122 0.4928116202354431 0 1.0 0 0.0 0 0.0 0 0.0 1.592294454574585 -0.06765832006931305 -0.2839455306529999 0.0 0.0 -1.0 0.8951667547225952 0.4902169108390808 0 1.0 0 0.0 0 0.0 0 0.0 1.2448337078094482 -0.0778159350156784 -0.2839455306529999 0.0 0.0 -1.0 0.08192142844200134 0.48803091049194336 0 1.0 0 0.0 0 0.0 0 0.0 1.3447487354278564 -0.06744548678398132 -0.2839455306529999 0.0 0.0 -1.0 0.03346306085586548 0.4952545762062073 0 1.0 0 0.0 0 0.0 0 0.0 1.346069574356079 -0.07194417715072632 -0.2839455306529999 0.0 0.0 -1.0 0.032583266496658325 0.49015122652053833 0 1.0 0 0.0 0 0.0 0 0.0 1.4904067516326904 -0.06773615628480911 -0.2839455306529999 0.0 0.0 -1.0 0.9465994834899902 0.4911881685256958 0 1.0 0 0.0 0 0.0 0 0.0 1.592294454574585 -0.06765832006931305 -0.2839455306529999 0.0 0.0 -1.0 0.8951667547225952 0.4902169108390808 0 1.0 0 0.0 0 0.0 0 0.0 1.5919973850250244 -0.07608164846897125 -0.2839455306529999 0.0 0.0 -1.0 0.8959654569625854 0.4819793105125427 0 1.0 0 0.0 0 0.0 0 0.0 1.4911367893218994 -0.06920288503170013 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9462549090385437 0.48951268196105957 0 1.0 0 0.0 0 0.0 0 0.0 1.4904067516326904 -0.06773615628480911 -0.2839455306529999 0.0 0.0 -1.0 0.9465994834899902 0.4911881685256958 0 1.0 0 0.0 0 0.0 0 0.0 1.5919973850250244 -0.07608164846897125 -0.2839455306529999 0.0 0.0 -1.0 0.8959654569625854 0.4819793105125427 0 1.0 0 0.0 0 0.0 0 0.0 1.4917690753936768 -0.07072312384843826 -0.2839455306529999 0.0 0.0 -1.0 0.9459701180458069 0.4877855181694031 0 1.0 0 0.0 0 0.0 0 0.0 1.4911367893218994 -0.06920288503170013 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9462549090385437 0.48951268196105957 0 1.0 0 0.0 0 0.0 0 0.0 1.5919973850250244 -0.07608164846897125 -0.2839455306529999 0.0 0.0 -1.0 0.8959654569625854 0.4819793105125427 0 1.0 0 0.0 0 0.0 0 0.0 1.4923040866851807 -0.0722968727350235 -0.2839455306529999 0.0 0.0 -1.0 0.945744514465332 0.48600685596466064 0 1.0 0 0.0 0 0.0 0 0.0 1.4917690753936768 -0.07072312384843826 -0.2839455306529999 0.0 0.0 -1.0 0.9459701180458069 0.4877855181694031 0 1.0 0 0.0 0 0.0 0 0.0 1.5919973850250244 -0.07608164846897125 -0.2839455306529999 0.0 0.0 -1.0 0.8959654569625854 0.4819793105125427 0 1.0 0 0.0 0 0.0 0 0.0 1.2448337078094482 -0.0778159350156784 -0.2839455306529999 0.0 0.0 -1.0 0.08192142844200134 0.48803091049194336 0 1.0 0 0.0 0 0.0 0 0.0 1.346069574356079 -0.07194417715072632 -0.2839455306529999 0.0 0.0 -1.0 0.032583266496658325 0.49015122652053833 0 1.0 0 0.0 0 0.0 0 0.0 1.3475701808929443 -0.07625070214271545 -0.2839455306529999 0.0 0.0 -1.0 0.03161323070526123 0.4852879047393799 0 1.0 0 0.0 0 0.0 0 0.0 1.4927418231964111 -0.07392413169145584 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9455776214599609 0.4841769337654114 0 1.0 0 0.0 0 0.0 0 0.0 1.4923040866851807 -0.0722968727350235 -0.2839455306529999 0.0 0.0 -1.0 0.945744514465332 0.48600685596466064 0 1.0 0 0.0 0 0.0 0 0.0 1.5919973850250244 -0.07608164846897125 -0.2839455306529999 0.0 0.0 -1.0 0.8959654569625854 0.4819793105125427 0 1.0 0 0.0 0 0.0 0 0.0 1.4930822849273682 -0.07560490816831589 -0.2839455306529999 0.0 0.0 -1.0 0.9454691410064697 0.4822959899902344 0 1.0 0 0.0 0 0.0 0 0.0 1.4927418231964111 -0.07392413169145584 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9455776214599609 0.4841769337654114 0 1.0 0 0.0 0 0.0 0 0.0 1.5919973850250244 -0.07608164846897125 -0.2839455306529999 0.0 0.0 -1.0 0.8959654569625854 0.4819793105125427 0 1.0 0 0.0 0 0.0 0 0.0 1.4933254718780518 -0.07733919471502304 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9454188346862793 0.4803643226623535 0 1.0 0 0.0 0 0.0 0 0.0 1.4930822849273682 -0.07560490816831589 -0.2839455306529999 0.0 0.0 -1.0 0.9454691410064697 0.4822959899902344 0 1.0 0 0.0 0 0.0 0 0.0 1.5919973850250244 -0.07608164846897125 -0.2839455306529999 0.0 0.0 -1.0 0.8959654569625854 0.4819793105125427 0 1.0 0 0.0 0 0.0 0 0.0 1.4933254718780518 -0.07733919471502304 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9454188346862793 0.4803643226623535 0 1.0 0 0.0 0 0.0 0 0.0 1.5919973850250244 -0.07608164846897125 -0.2839455306529999 0.0 0.0 -1.0 0.8959654569625854 0.4819793105125427 0 1.0 0 0.0 0 0.0 0 0.0 1.5911071300506592 -0.0843055248260498 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8969948291778564 0.47402477264404297 0 1.0 0 0.0 0 0.0 0 0.0 1.2448337078094482 -0.0778159350156784 -0.2839455306529999 0.0 0.0 -1.0 0.08192142844200134 0.48803091049194336 0 1.0 0 0.0 0 0.0 0 0.0 1.3475701808929443 -0.07625070214271545 -0.2839455306529999 0.0 0.0 -1.0 0.03161323070526123 0.4852879047393799 0 1.0 0 0.0 0 0.0 0 0.0 1.3492510318756104 -0.08036507666110992 -0.2839455306529999 0.0 0.0 -1.0 0.030552387237548828 0.480659544467926 0 1.0 0 0.0 0 0.0 0 0.0 1.493471384048462 -0.0791269913315773 -0.2839455306529999 0.0 0.0 -1.0 0.9454262256622314 0.4783821105957031 0 1.0 0 0.0 0 0.0 0 0.0 1.4933254718780518 -0.07733919471502304 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9454188346862793 0.4803643226623535 0 1.0 0 0.0 0 0.0 0 0.0 1.5911071300506592 -0.0843055248260498 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8969948291778564 0.47402477264404297 0 1.0 0 0.0 0 0.0 0 0.0 1.2473232746124268 -0.08647764474153519 -0.2839455306529999 0.0 0.0 -1.0 0.08034449815750122 0.47963446378707886 0 1.0 0 0.0 0 0.0 0 0.0 1.2448337078094482 -0.0778159350156784 -0.2839455306529999 0.0 0.0 -1.0 0.08192142844200134 0.48803091049194336 0 1.0 0 0.0 0 0.0 0 0.0 1.3492510318756104 -0.08036507666110992 -0.2839455306529999 0.0 0.0 -1.0 0.030552387237548828 0.480659544467926 0 1.0 0 0.0 0 0.0 0 0.0 1.4935200214385986 -0.08096829801797867 -0.2839455306529999 0.0 0.0 -1.0 0.9454910755157471 0.47634971141815186 0 1.0 0 0.0 0 0.0 0 0.0 1.493471384048462 -0.0791269913315773 -0.2839455306529999 0.0 0.0 -1.0 0.9454262256622314 0.4783821105957031 0 1.0 0 0.0 0 0.0 0 0.0 1.5911071300506592 -0.0843055248260498 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8969948291778564 0.47402477264404297 0 1.0 0 0.0 0 0.0 0 0.0 1.2473232746124268 -0.08647764474153519 -0.2839455306529999 0.0 0.0 -1.0 0.08034449815750122 0.47963446378707886 0 1.0 0 0.0 0 0.0 0 0.0 1.3492510318756104 -0.08036507666110992 -0.2839455306529999 0.0 0.0 -1.0 0.030552387237548828 0.480659544467926 0 1.0 0 0.0 0 0.0 0 0.0 1.3511121273040771 -0.08428728580474854 -0.2839455306529999 0.0 0.0 -1.0 0.029400289058685303 0.4762616753578186 0 1.0 0 0.0 0 0.0 0 0.0 1.49342942237854 -0.08366581052541733 -0.2839455306529999 0.0 0.0 -1.0 0.9456768035888672 0.4733878970146179 0 1.0 0 0.0 0 0.0 0 0.0 1.4935200214385986 -0.08096829801797867 -0.2839455306529999 0.0 0.0 -1.0 0.9454910755157471 0.47634971141815186 0 1.0 0 0.0 0 0.0 0 0.0 1.5911071300506592 -0.0843055248260498 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8969948291778564 0.47402477264404297 0 1.0 0 0.0 0 0.0 0 0.0 1.493159532546997 -0.08627089112997055 -0.2839455306529999 0.0 0.0 -1.0 0.9459576606750488 0.47054433822631836 0 1.0 0 0.0 0 0.0 0 0.0 1.49342942237854 -0.08366581052541733 -0.2839455306529999 0.0 0.0 -1.0 0.9456768035888672 0.4733878970146179 0 1.0 0 0.0 0 0.0 0 0.0 1.5911071300506592 -0.0843055248260498 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8969948291778564 0.47402477264404297 0 1.0 0 0.0 0 0.0 0 0.0 1.2473232746124268 -0.08647764474153519 -0.2839455306529999 0.0 0.0 -1.0 0.08034449815750122 0.47963446378707886 0 1.0 0 0.0 0 0.0 0 0.0 1.3511121273040771 -0.08428728580474854 -0.2839455306529999 0.0 0.0 -1.0 0.029400289058685303 0.4762616753578186 0 1.0 0 0.0 0 0.0 0 0.0 1.3531529903411865 -0.08801734447479248 -0.2839455306529999 0.0 0.0 -1.0 0.028156548738479614 0.4720897674560547 0 1.0 0 0.0 0 0.0 0 0.0 1.493159532546997 -0.08627089112997055 -0.2839455306529999 0.0 0.0 -1.0 0.9459576606750488 0.47054433822631836 0 1.0 0 0.0 0 0.0 0 0.0 1.5911071300506592 -0.0843055248260498 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8969948291778564 0.47402477264404297 0 1.0 0 0.0 0 0.0 0 0.0 1.5896236896514893 -0.0923299491405487 -0.2839455306529999 0.0 0.0 -1.0 0.8982555270195007 0.4663318991661072 0 1.0 0 0.0 0 0.0 0 0.0 1.4927098751068115 -0.08878353983163834 -0.2839455306529999 0.0 0.0 -1.0 0.9463337659835815 0.46781617403030396 0 1.0 0 0.0 0 0.0 0 0.0 1.493159532546997 -0.08627089112997055 -0.2839455306529999 0.0 0.0 -1.0 0.9459576606750488 0.47054433822631836 0 1.0 0 0.0 0 0.0 0 0.0 1.5896236896514893 -0.0923299491405487 -0.2839455306529999 0.0 0.0 -1.0 0.8982555270195007 0.4663318991661072 0 1.0 0 0.0 0 0.0 0 0.0 1.2502384185791016 -0.09483286738395691 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07861322164535522 0.47155576944351196 0 1.0 0 0.0 0 0.0 0 0.0 1.2473232746124268 -0.08647764474153519 -0.2839455306529999 0.0 0.0 -1.0 0.08034449815750122 0.47963446378707886 0 1.0 0 0.0 0 0.0 0 0.0 1.3531529903411865 -0.08801734447479248 -0.2839455306529999 0.0 0.0 -1.0 0.028156548738479614 0.4720897674560547 0 1.0 0 0.0 0 0.0 0 0.0 1.2502384185791016 -0.09483286738395691 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07861322164535522 0.47155576944351196 0 1.0 0 0.0 0 0.0 0 0.0 1.3531529903411865 -0.08801734447479248 -0.2839455306529999 0.0 0.0 -1.0 0.028156548738479614 0.4720897674560547 0 1.0 0 0.0 0 0.0 0 0.0 1.3553736209869385 -0.09155523777008057 -0.2839455306529999 0.0 0.0 -1.0 0.026820480823516846 0.46813976764678955 0 1.0 0 0.0 0 0.0 0 0.0 1.4920799732208252 -0.09120375663042068 -0.2839455306529999 0.0 0.0 -1.0 0.9468050003051758 0.46520084142684937 0 1.0 0 0.0 0 0.0 0 0.0 1.4927098751068115 -0.08878353983163834 -0.2839455306529999 0.0 0.0 -1.0 0.9463337659835815 0.46781617403030396 0 1.0 0 0.0 0 0.0 0 0.0 1.5896236896514893 -0.0923299491405487 -0.2839455306529999 0.0 0.0 -1.0 0.8982555270195007 0.4663318991661072 0 1.0 0 0.0 0 0.0 0 0.0 1.491269826889038 -0.0935315415263176 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.947371244430542 0.4626959562301636 0 1.0 0 0.0 0 0.0 0 0.0 1.4920799732208252 -0.09120375663042068 -0.2839455306529999 0.0 0.0 -1.0 0.9468050003051758 0.46520084142684937 0 1.0 0 0.0 0 0.0 0 0.0 1.5896236896514893 -0.0923299491405487 -0.2839455306529999 0.0 0.0 -1.0 0.8982555270195007 0.4663318991661072 0 1.0 0 0.0 0 0.0 0 0.0 1.2502384185791016 -0.09483286738395691 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07861322164535522 0.47155576944351196 0 1.0 0 0.0 0 0.0 0 0.0 1.3553736209869385 -0.09155523777008057 -0.2839455306529999 0.0 0.0 -1.0 0.026820480823516846 0.46813976764678955 0 1.0 0 0.0 0 0.0 0 0.0 1.3577744960784912 -0.09490098059177399 -0.2839455306529999 0.0 0.0 -1.0 0.02539101243019104 0.464407742023468 0 1.0 0 0.0 0 0.0 0 0.0 1.491269826889038 -0.0935315415263176 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.947371244430542 0.4626959562301636 0 1.0 0 0.0 0 0.0 0 0.0 1.5896236896514893 -0.0923299491405487 -0.2839455306529999 0.0 0.0 -1.0 0.8982555270195007 0.4663318991661072 0 1.0 0 0.0 0 0.0 0 0.0 1.5875461101531982 -0.10015491396188736 -0.2839455306529999 0.0 0.0 -1.0 0.8997503519058228 0.4588809609413147 0 1.0 0 0.0 0 0.0 0 0.0 1.4902799129486084 -0.09576690196990967 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9480323791503906 0.4602992534637451 0 1.0 0 0.0 0 0.0 0 0.0 1.491269826889038 -0.0935315415263176 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.947371244430542 0.4626959562301636 0 1.0 0 0.0 0 0.0 0 0.0 1.5875461101531982 -0.10015491396188736 -0.2839455306529999 0.0 0.0 -1.0 0.8997503519058228 0.4588809609413147 0 1.0 0 0.0 0 0.0 0 0.0 1.2535793781280518 -0.10288161039352417 -0.2839455306529999 0.0 0.0 -1.0 0.07672339677810669 0.4637816548347473 0 1.0 0 0.0 0 0.0 0 0.0 1.2502384185791016 -0.09483286738395691 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07861322164535522 0.47155576944351196 0 1.0 0 0.0 0 0.0 0 0.0 1.3577744960784912 -0.09490098059177399 -0.2839455306529999 0.0 0.0 -1.0 0.02539101243019104 0.464407742023468 0 1.0 0 0.0 0 0.0 0 0.0 1.2535793781280518 -0.10288161039352417 -0.2839455306529999 0.0 0.0 -1.0 0.07672339677810669 0.4637816548347473 0 1.0 0 0.0 0 0.0 0 0.0 1.3577744960784912 -0.09490098059177399 -0.2839455306529999 0.0 0.0 -1.0 0.02539101243019104 0.464407742023468 0 1.0 0 0.0 0 0.0 0 0.0 1.3603556156158447 -0.09805455803871155 -0.2839455306529999 0.0 0.0 -1.0 0.023867100477218628 0.46089041233062744 0 1.0 0 0.0 0 0.0 0 0.0 1.4891102313995361 -0.0979098305106163 -0.2839455306529999 0.0 0.0 -1.0 0.9487885236740112 0.45800888538360596 0 1.0 0 0.0 0 0.0 0 0.0 1.4902799129486084 -0.09576690196990967 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9480323791503906 0.4602992534637451 0 1.0 0 0.0 0 0.0 0 0.0 1.5875461101531982 -0.10015491396188736 -0.2839455306529999 0.0 0.0 -1.0 0.8997503519058228 0.4588809609413147 0 1.0 0 0.0 0 0.0 0 0.0 1.487760305404663 -0.0999603271484375 -0.2839455306529999 0.0 0.0 -1.0 0.9496400952339172 0.45582300424575806 0 1.0 0 0.0 0 0.0 0 0.0 1.4891102313995361 -0.0979098305106163 -0.2839455306529999 0.0 0.0 -1.0 0.9487885236740112 0.45800888538360596 0 1.0 0 0.0 0 0.0 0 0.0 1.5875461101531982 -0.10015491396188736 -0.2839455306529999 0.0 0.0 -1.0 0.8997503519058228 0.4588809609413147 0 1.0 0 0.0 0 0.0 0 0.0 1.2535793781280518 -0.10288161039352417 -0.2839455306529999 0.0 0.0 -1.0 0.07672339677810669 0.4637816548347473 0 1.0 0 0.0 0 0.0 0 0.0 1.3603556156158447 -0.09805455803871155 -0.2839455306529999 0.0 0.0 -1.0 0.023867100477218628 0.46089041233062744 0 1.0 0 0.0 0 0.0 0 0.0 1.3631165027618408 -0.10101598501205444 -0.2839455306529999 0.0 0.0 -1.0 0.022248119115829468 0.45758455991744995 0 1.0 0 0.0 0 0.0 0 0.0 1.4862301349639893 -0.10191839188337326 -0.2839455306529999 0.0 0.0 -1.0 0.9505875706672668 0.4537401795387268 0 1.0 0 0.0 0 0.0 0 0.0 1.487760305404663 -0.0999603271484375 -0.2839455306529999 0.0 0.0 -1.0 0.9496400952339172 0.45582300424575806 0 1.0 0 0.0 0 0.0 0 0.0 1.5875461101531982 -0.10015491396188736 -0.2839455306529999 0.0 0.0 -1.0 0.8997503519058228 0.4588809609413147 0 1.0 0 0.0 0 0.0 0 0.0 1.4862301349639893 -0.10191839188337326 -0.2839455306529999 0.0 0.0 -1.0 0.9505875706672668 0.4537401795387268 0 1.0 0 0.0 0 0.0 0 0.0 1.5875461101531982 -0.10015491396188736 -0.2839455306529999 0.0 0.0 -1.0 0.8997503519058228 0.4588809609413147 0 1.0 0 0.0 0 0.0 0 0.0 1.5848753452301025 -0.10778042674064636 -0.2839455306529999 0.0 0.0 -1.0 0.901482343673706 0.4516540765762329 0 1.0 0 0.0 0 0.0 0 0.0 1.2535793781280518 -0.10288161039352417 -0.2839455306529999 0.0 0.0 -1.0 0.07672339677810669 0.4637816548347473 0 1.0 0 0.0 0 0.0 0 0.0 1.3631165027618408 -0.10101598501205444 -0.2839455306529999 0.0 0.0 -1.0 0.022248119115829468 0.45758455991744995 0 1.0 0 0.0 0 0.0 0 0.0 1.3660571575164795 -0.10378524661064148 -0.2839455306529999 0.0 0.0 -1.0 0.020532876253128052 0.4544876217842102 0 1.0 0 0.0 0 0.0 0 0.0 1.4845201969146729 -0.10378402471542358 -0.2839455306529999 0.0 0.0 -1.0 0.9516310691833496 0.4517591595649719 0 1.0 0 0.0 0 0.0 0 0.0 1.4862301349639893 -0.10191839188337326 -0.2839455306529999 0.0 0.0 -1.0 0.9505875706672668 0.4537401795387268 0 1.0 0 0.0 0 0.0 0 0.0 1.5848753452301025 -0.10778042674064636 -0.2839455306529999 0.0 0.0 -1.0 0.901482343673706 0.4516540765762329 0 1.0 0 0.0 0 0.0 0 0.0 1.2573459148406982 -0.11062387377023697 -0.2839455306529999 0.0 0.0 -1.0 0.07467031478881836 0.45629990100860596 0 1.0 0 0.0 0 0.0 0 0.0 1.2535793781280518 -0.10288161039352417 -0.2839455306529999 0.0 0.0 -1.0 0.07672339677810669 0.4637816548347473 0 1.0 0 0.0 0 0.0 0 0.0 1.3660571575164795 -0.10378524661064148 -0.2839455306529999 0.0 0.0 -1.0 0.020532876253128052 0.4544876217842102 0 1.0 0 0.0 0 0.0 0 0.0 1.4826304912567139 -0.10555722564458847 -0.2839455306529999 0.0 0.0 -1.0 0.9527712464332581 0.44987887144088745 0 1.0 0 0.0 0 0.0 0 0.0 1.4845201969146729 -0.10378402471542358 -0.2839455306529999 0.0 0.0 -1.0 0.9516310691833496 0.4517591595649719 0 1.0 0 0.0 0 0.0 0 0.0 1.5848753452301025 -0.10778042674064636 -0.2839455306529999 0.0 0.0 -1.0 0.901482343673706 0.4516540765762329 0 1.0 0 0.0 0 0.0 0 0.0 1.2573459148406982 -0.11062387377023697 -0.2839455306529999 0.0 0.0 -1.0 0.07467031478881836 0.45629990100860596 0 1.0 0 0.0 0 0.0 0 0.0 1.3660571575164795 -0.10378524661064148 -0.2839455306529999 0.0 0.0 -1.0 0.020532876253128052 0.4544876217842102 0 1.0 0 0.0 0 0.0 0 0.0 1.3691771030426025 -0.10636235028505325 -0.2839455306529999 0.0 0.0 -1.0 0.018720537424087524 0.45159733295440674 0 1.0 0 0.0 0 0.0 0 0.0 1.480560541152954 -0.10723800212144852 -0.2839455306529999 0.0 0.0 -1.0 0.9540088772773743 0.4480985999107361 0 1.0 0 0.0 0 0.0 0 0.0 1.4826304912567139 -0.10555722564458847 -0.2839455306529999 0.0 0.0 -1.0 0.9527712464332581 0.44987887144088745 0 1.0 0 0.0 0 0.0 0 0.0 1.5848753452301025 -0.10778042674064636 -0.2839455306529999 0.0 0.0 -1.0 0.901482343673706 0.4516540765762329 0 1.0 0 0.0 0 0.0 0 0.0 1.2573459148406982 -0.11062387377023697 -0.2839455306529999 0.0 0.0 -1.0 0.07467031478881836 0.45629990100860596 0 1.0 0 0.0 0 0.0 0 0.0 1.3691771030426025 -0.10636235028505325 -0.2839455306529999 0.0 0.0 -1.0 0.018720537424087524 0.45159733295440674 0 1.0 0 0.0 0 0.0 0 0.0 1.3724949359893799 -0.10874000191688538 -0.2839455306529999 0.0 0.0 -1.0 0.01679942011833191 0.44891852140426636 0 1.0 0 0.0 0 0.0 0 0.0 1.4772183895111084 -0.10947578400373459 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9559882879257202 0.44572991132736206 0 1.0 0 0.0 0 0.0 0 0.0 1.480560541152954 -0.10723800212144852 -0.2839455306529999 0.0 0.0 -1.0 0.9540088772773743 0.4480985999107361 0 1.0 0 0.0 0 0.0 0 0.0 1.5848753452301025 -0.10778042674064636 -0.2839455306529999 0.0 0.0 -1.0 0.901482343673706 0.4516540765762329 0 1.0 0 0.0 0 0.0 0 0.0 1.4772183895111084 -0.10947578400373459 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9559882879257202 0.44572991132736206 0 1.0 0 0.0 0 0.0 0 0.0 1.5848753452301025 -0.10778042674064636 -0.2839455306529999 0.0 0.0 -1.0 0.901482343673706 0.4516540765762329 0 1.0 0 0.0 0 0.0 0 0.0 1.5816113948822021 -0.11520648002624512 -0.2839455306529999 0.0 0.0 -1.0 0.9034565687179565 0.4446355104446411 0 1.0 0 0.0 0 0.0 0 0.0 1.2573459148406982 -0.11062387377023697 -0.2839455306529999 0.0 0.0 -1.0 0.07467031478881836 0.45629990100860596 0 1.0 0 0.0 0 0.0 0 0.0 1.3724949359893799 -0.10874000191688538 -0.2839455306529999 0.0 0.0 -1.0 0.01679942011833191 0.44891852140426636 0 1.0 0 0.0 0 0.0 0 0.0 1.3760263919830322 -0.11091089993715286 -0.2839455306529999 0.0 0.0 -1.0 0.014759421348571777 0.4464564919471741 0 1.0 0 0.0 0 0.0 0 0.0 1.4736135005950928 -0.1115189865231514 -0.2839455306529999 0.0 0.0 -1.0 0.9581106901168823 0.4435710906982422 0 1.0 0 0.0 0 0.0 0 0.0 1.4772183895111084 -0.10947578400373459 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9559882879257202 0.44572991132736206 0 1.0 0 0.0 0 0.0 0 0.0 1.5816113948822021 -0.11520648002624512 -0.2839455306529999 0.0 0.0 -1.0 0.9034565687179565 0.4446355104446411 0 1.0 0 0.0 0 0.0 0 0.0 1.261538028717041 -0.1180596575140953 -0.2839455306529999 0.0 0.0 -1.0 0.07244861125946045 0.44909894466400146 0 1.0 0 0.0 0 0.0 0 0.0 1.2573459148406982 -0.11062387377023697 -0.2839455306529999 0.0 0.0 -1.0 0.07467031478881836 0.45629990100860596 0 1.0 0 0.0 0 0.0 0 0.0 1.3760263919830322 -0.11091089993715286 -0.2839455306529999 0.0 0.0 -1.0 0.014759421348571777 0.4464564919471741 0 1.0 0 0.0 0 0.0 0 0.0 1.261538028717041 -0.1180596575140953 -0.2839455306529999 0.0 0.0 -1.0 0.07244861125946045 0.44909894466400146 0 1.0 0 0.0 0 0.0 0 0.0 1.3760263919830322 -0.11091089993715286 -0.2839455306529999 0.0 0.0 -1.0 0.014759421348571777 0.4464564919471741 0 1.0 0 0.0 0 0.0 0 0.0 1.379772424697876 -0.11287504434585571 -0.2839455306529999 0.0 0.0 -1.0 0.012598484754562378 0.4442101716995239 0 1.0 0 0.0 0 0.0 0 0.0 1.4697458744049072 -0.11336759477853775 -0.2839455306529999 0.0 0.0 -1.0 0.9603778123855591 0.441622257232666 0 1.0 0 0.0 0 0.0 0 0.0 1.4736135005950928 -0.1115189865231514 -0.2839455306529999 0.0 0.0 -1.0 0.9581106901168823 0.4435710906982422 0 1.0 0 0.0 0 0.0 0 0.0 1.5816113948822021 -0.11520648002624512 -0.2839455306529999 0.0 0.0 -1.0 0.9034565687179565 0.4446355104446411 0 1.0 0 0.0 0 0.0 0 0.0 1.261538028717041 -0.1180596575140953 -0.2839455306529999 0.0 0.0 -1.0 0.07244861125946045 0.44909894466400146 0 1.0 0 0.0 0 0.0 0 0.0 1.379772424697876 -0.11287504434585571 -0.2839455306529999 0.0 0.0 -1.0 0.012598484754562378 0.4442101716995239 0 1.0 0 0.0 0 0.0 0 0.0 1.3837320804595947 -0.11463243514299393 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.01031571626663208 0.4421793818473816 0 1.0 0 0.0 0 0.0 0 0.0 1.46561598777771 -0.11502161622047424 -0.2839455306529999 0.0 0.0 -1.0 0.9627910852432251 0.43988388776779175 0 1.0 0 0.0 0 0.0 0 0.0 1.4697458744049072 -0.11336759477853775 -0.2839455306529999 0.0 0.0 -1.0 0.9603778123855591 0.441622257232666 0 1.0 0 0.0 0 0.0 0 0.0 1.5816113948822021 -0.11520648002624512 -0.2839455306529999 0.0 0.0 -1.0 0.9034565687179565 0.4446355104446411 0 1.0 0 0.0 0 0.0 0 0.0 1.261538028717041 -0.1180596575140953 -0.2839455306529999 0.0 0.0 -1.0 0.07244861125946045 0.44909894466400146 0 1.0 0 0.0 0 0.0 0 0.0 1.3837320804595947 -0.11463243514299393 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.01031571626663208 0.4421793818473816 0 1.0 0 0.0 0 0.0 0 0.0 1.3879063129425049 -0.1161830797791481 -0.2839455306529999 0.0 0.0 -1.0 0.007909178733825684 0.4403642416000366 0 1.0 0 0.0 0 0.0 0 0.0 1.4612228870391846 -0.11648104339838028 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.9653527736663818 0.43835723400115967 0 1.0 0 0.0 0 0.0 0 0.0 1.46561598777771 -0.11502161622047424 -0.2839455306529999 0.0 0.0 -1.0 0.9627910852432251 0.43988388776779175 0 1.0 0 0.0 0 0.0 0 0.0 1.5816113948822021 -0.11520648002624512 -0.2839455306529999 0.0 0.0 -1.0 0.9034565687179565 0.4446355104446411 0 1.0 0 0.0 0 0.0 0 0.0 1.4612228870391846 -0.11648104339838028 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.9653527736663818 0.43835723400115967 0 1.0 0 0.0 0 0.0 0 0.0 1.5816113948822021 -0.11520648002624512 -0.2839455306529999 0.0 0.0 -1.0 0.9034565687179565 0.4446355104446411 0 1.0 0 0.0 0 0.0 0 0.0 1.5777533054351807 -0.12243308126926422 -0.2839455306529999 0.0 0.0 -1.0 0.9056793451309204 0.43781161308288574 0 1.0 0 0.0 0 0.0 0 0.0 1.261538028717041 -0.1180596575140953 -0.2839455306529999 0.0 0.0 -1.0 0.07244861125946045 0.44909894466400146 0 1.0 0 0.0 0 0.0 0 0.0 1.3879063129425049 -0.1161830797791481 -0.2839455306529999 0.0 0.0 -1.0 0.007909178733825684 0.4403642416000366 0 1.0 0 0.0 0 0.0 0 0.0 1.39229416847229 -0.11752697080373764 -0.2839455306529999 0.0 0.0 -1.0 0.005378127098083496 0.43876564502716064 0 1.0 0 0.0 0 0.0 0 0.0 1.4565675258636475 -0.11774588376283646 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9680638909339905 0.43704426288604736 0 1.0 0 0.0 0 0.0 0 0.0 1.4612228870391846 -0.11648104339838028 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.9653527736663818 0.43835723400115967 0 1.0 0 0.0 0 0.0 0 0.0 1.5777533054351807 -0.12243308126926422 -0.2839455306529999 0.0 0.0 -1.0 0.9056793451309204 0.43781161308288574 0 1.0 0 0.0 0 0.0 0 0.0 1.261538028717041 -0.1180596575140953 -0.2839455306529999 0.0 0.0 -1.0 0.07244861125946045 0.44909894466400146 0 1.0 0 0.0 0 0.0 0 0.0 1.39229416847229 -0.11752697080373764 -0.2839455306529999 0.0 0.0 -1.0 0.005378127098083496 0.43876564502716064 0 1.0 0 0.0 0 0.0 0 0.0 1.3968961238861084 -0.11866410821676254 -0.2839455306529999 0.0 0.0 -1.0 0.002721160650253296 0.4373849034309387 0 1.0 0 0.0 0 0.0 0 0.0 1.4516489505767822 -0.11881612986326218 -0.2839455306529999 0.0 0.0 -1.0 0.9709261655807495 0.4359474182128906 0 1.0 0 0.0 0 0.0 0 0.0 1.4565675258636475 -0.11774588376283646 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9680638909339905 0.43704426288604736 0 1.0 0 0.0 0 0.0 0 0.0 1.5777533054351807 -0.12243308126926422 -0.2839455306529999 0.0 0.0 -1.0 0.9056793451309204 0.43781161308288574 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 -0.12518896162509918 -0.2839455306529999 0.0 0.0 -1.0 0.07005223631858826 0.44216883182525635 0 1.0 0 0.0 0 0.0 0 0.0 1.261538028717041 -0.1180596575140953 -0.2839455306529999 0.0 0.0 -1.0 0.07244861125946045 0.44909894466400146 0 1.0 0 0.0 0 0.0 0 0.0 1.3968961238861084 -0.11866410821676254 -0.2839455306529999 0.0 0.0 -1.0 0.002721160650253296 0.4373849034309387 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 -0.12518896162509918 -0.2839455306529999 0.0 0.0 -1.0 1.0700522661209106 0.44216883182525635 0 1.0 0 0.0 0 0.0 0 0.0 1.3968961238861084 -0.11866410821676254 -0.2839455306529999 0.0 0.0 -1.0 1.0027211904525757 0.4373849034309387 0 1.0 0 0.0 0 0.0 0 0.0 1.40171217918396 -0.11959449201822281 -0.2839455306529999 0.0 0.0 -1.0 0.9999371767044067 0.43622368574142456 0 1.0 0 0.0 0 0.0 0 0.0 1.4464681148529053 -0.11969178915023804 -0.2839455306529999 0.0 0.0 -1.0 0.9739401340484619 0.43506962060928345 0 1.0 0 0.0 0 0.0 0 0.0 1.4516489505767822 -0.11881612986326218 -0.2839455306529999 0.0 0.0 -1.0 0.9709261655807495 0.4359474182128906 0 1.0 0 0.0 0 0.0 0 0.0 1.5777533054351807 -0.12243308126926422 -0.2839455306529999 0.0 0.0 -1.0 0.9056793451309204 0.43781161308288574 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 -0.12518896162509918 -0.2839455306529999 0.0 0.0 -1.0 1.0700522661209106 0.44216883182525635 0 1.0 0 0.0 0 0.0 0 0.0 1.40171217918396 -0.11959449201822281 -0.2839455306529999 0.0 0.0 -1.0 0.9999371767044067 0.43622368574142456 0 1.0 0 0.0 0 0.0 0 0.0 1.4067423343658447 -0.12031812220811844 -0.2839455306529999 0.0 0.0 -1.0 0.9970256090164185 0.43528425693511963 0 1.0 0 0.0 0 0.0 0 0.0 1.4410245418548584 -0.12037285417318344 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9771068096160889 0.43441450595855713 0 1.0 0 0.0 0 0.0 0 0.0 1.4464681148529053 -0.11969178915023804 -0.2839455306529999 0.0 0.0 -1.0 0.9739401340484619 0.43506962060928345 0 1.0 0 0.0 0 0.0 0 0.0 1.5777533054351807 -0.12243308126926422 -0.2839455306529999 0.0 0.0 -1.0 0.9056793451309204 0.43781161308288574 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 -0.12518896162509918 -0.2839455306529999 0.0 0.0 -1.0 1.0700522661209106 0.44216883182525635 0 1.0 0 0.0 0 0.0 0 0.0 1.4067423343658447 -0.12031812220811844 -0.2839455306529999 0.0 0.0 -1.0 0.9970256090164185 0.43528425693511963 0 1.0 0 0.0 0 0.0 0 0.0 1.4119865894317627 -0.12083500623703003 -0.2839455306529999 0.0 -3.0518509447574615e-05 -0.999969482421875 0.9939858913421631 0.43456923961639404 0 1.0 0 0.0 0 0.0 0 0.0 1.4353182315826416 -0.12085933238267899 -0.2839455306529999 0.0 0.0 -1.0 0.9804263114929199 0.4339858293533325 0 1.0 0 0.0 0 0.0 0 0.0 1.4410245418548584 -0.12037285417318344 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9771068096160889 0.43441450595855713 0 1.0 0 0.0 0 0.0 0 0.0 1.5777533054351807 -0.12243308126926422 -0.2839455306529999 0.0 0.0 -1.0 0.9056793451309204 0.43781161308288574 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 -0.12518896162509918 -0.2839455306529999 0.0 0.0 -1.0 1.0700522661209106 0.44216883182525635 0 1.0 0 0.0 0 0.0 0 0.0 1.4119865894317627 -0.12083500623703003 -0.2839455306529999 0.0 -3.0518509447574615e-05 -0.999969482421875 0.9939858913421631 0.43456923961639404 0 1.0 0 0.0 0 0.0 0 0.0 1.4174449443817139 -0.12114513665437698 -0.2839455306529999 0.0 9.155552834272385e-05 -1.0 0.9908179044723511 0.434081494808197 0 1.0 0 0.0 0 0.0 0 0.0 1.4293491840362549 -0.12115121632814407 -0.2839455306529999 0.0 0.0 -1.0 0.9838982820510864 0.43378758430480957 0 1.0 0 0.0 0 0.0 0 0.0 1.4353182315826416 -0.12085933238267899 -0.2839455306529999 0.0 0.0 -1.0 0.9804263114929199 0.4339858293533325 0 1.0 0 0.0 0 0.0 0 0.0 1.5777533054351807 -0.12243308126926422 -0.2839455306529999 0.0 0.0 -1.0 0.9056793451309204 0.43781161308288574 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 -0.12518896162509918 -0.2839455306529999 0.0 0.0 -1.0 1.0700522661209106 0.44216883182525635 0 1.0 0 0.0 0 0.0 0 0.0 1.4174449443817139 -0.12114513665437698 -0.2839455306529999 0.0 9.155552834272385e-05 -1.0 0.9908179044723511 0.434081494808197 0 1.0 0 0.0 0 0.0 0 0.0 1.4231173992156982 -0.1212485134601593 -0.2839455306529999 0.0 0.0 -1.0 0.9875220060348511 0.43382418155670166 0 1.0 0 0.0 0 0.0 0 0.0 1.4231173992156982 -0.1212485134601593 -0.2839455306529999 0.0 0.0 -1.0 0.9875220060348511 0.43382418155670166 0 1.0 0 0.0 0 0.0 0 0.0 1.4293491840362549 -0.12115121632814407 -0.2839455306529999 0.0 0.0 -1.0 0.9838982820510864 0.43378758430480957 0 1.0 0 0.0 0 0.0 0 0.0 1.5777533054351807 -0.12243308126926422 -0.2839455306529999 0.0 0.0 -1.0 0.9056793451309204 0.43781161308288574 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 -0.12518896162509918 -0.2839455306529999 0.0 0.0 -1.0 1.0700522661209106 0.44216883182525635 0 1.0 0 0.0 0 0.0 0 0.0 1.4231173992156982 -0.1212485134601593 -0.2839455306529999 0.0 0.0 -1.0 0.9875220060348511 0.43382418155670166 0 1.0 0 0.0 0 0.0 0 0.0 1.5777533054351807 -0.12243308126926422 -0.2839455306529999 0.0 0.0 -1.0 0.9056793451309204 0.43781161308288574 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 -0.12518896162509918 -0.2839455306529999 0.0 0.0 -1.0 1.0700522661209106 0.44216883182525635 0 1.0 0 0.0 0 0.0 0 0.0 1.5777533054351807 -0.12243308126926422 -0.2839455306529999 0.0 0.0 -1.0 0.9056793451309204 0.43781161308288574 0 1.0 0 0.0 0 0.0 0 0.0 1.5733020305633545 -0.12946023046970367 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9081575274467468 0.43117111921310425 0 1.0 0 0.0 0 0.0 0 0.0 1.2711994647979736 -0.1320118010044098 -0.2839455306529999 0.0 0.0 -1.0 1.0674748420715332 0.4355006217956543 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 -0.12518896162509918 -0.2839455306529999 0.0 0.0 -1.0 1.0700522661209106 0.44216883182525635 0 1.0 0 0.0 0 0.0 0 0.0 1.5733020305633545 -0.12946023046970367 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9081575274467468 0.43117111921310425 0 1.0 0 0.0 0 0.0 0 0.0 1.2711994647979736 -0.1320118010044098 -0.2839455306529999 0.0 0.0 -1.0 1.0674748420715332 0.4355006217956543 0 1.0 0 0.0 0 0.0 0 0.0 1.5733020305633545 -0.12946023046970367 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9081575274467468 0.43117111921310425 0 1.0 0 0.0 0 0.0 0 0.0 1.5682575702667236 -0.13628791272640228 -0.2839455306529999 0.0 0.0 -1.0 0.91089928150177 0.42470550537109375 0 1.0 0 0.0 0 0.0 0 0.0 1.2766687870025635 -0.13852813839912415 -0.2839455306529999 0.0 0.0 -1.0 1.064708948135376 0.4290871024131775 0 1.0 0 0.0 0 0.0 0 0.0 1.2711994647979736 -0.1320118010044098 -0.2839455306529999 0.0 0.0 -1.0 1.0674748420715332 0.4355006217956543 0 1.0 0 0.0 0 0.0 0 0.0 1.5682575702667236 -0.13628791272640228 -0.2839455306529999 0.0 0.0 -1.0 0.91089928150177 0.42470550537109375 0 1.0 0 0.0 0 0.0 0 0.0 1.2766687870025635 -0.13852813839912415 -0.2839455306529999 0.0 0.0 -1.0 1.064708948135376 0.4290871024131775 0 1.0 0 0.0 0 0.0 0 0.0 1.5682575702667236 -0.13628791272640228 -0.2839455306529999 0.0 0.0 -1.0 0.91089928150177 0.42470550537109375 0 1.0 0 0.0 0 0.0 0 0.0 1.5626189708709717 -0.14291614294052124 -0.2839455306529999 0.0 0.0 -1.0 0.9139140844345093 0.41840875148773193 0 1.0 0 0.0 0 0.0 0 0.0 1.2825636863708496 -0.14473800361156464 -0.2839455306529999 0.0 0.0 -1.0 1.061747670173645 0.42292261123657227 0 1.0 0 0.0 0 0.0 0 0.0 1.2766687870025635 -0.13852813839912415 -0.2839455306529999 0.0 0.0 -1.0 1.064708948135376 0.4290871024131775 0 1.0 0 0.0 0 0.0 0 0.0 1.5626189708709717 -0.14291614294052124 -0.2839455306529999 0.0 0.0 -1.0 0.9139140844345093 0.41840875148773193 0 1.0 0 0.0 0 0.0 0 0.0 1.2825636863708496 -0.14473800361156464 -0.2839455306529999 0.0 0.0 -1.0 1.061747670173645 0.42292261123657227 0 1.0 0 0.0 0 0.0 0 0.0 1.5626189708709717 -0.14291614294052124 -0.2839455306529999 0.0 0.0 -1.0 0.9139140844345093 0.41840875148773193 0 1.0 0 0.0 0 0.0 0 0.0 1.556387186050415 -0.14934493601322174 -0.2839455306529999 0.0 0.0 -1.0 0.9172113537788391 0.4122779965400696 0 1.0 0 0.0 0 0.0 0 0.0 1.288883924484253 -0.15064138174057007 -0.2839455306529999 0.0 0.0 -1.0 1.0585827827453613 0.41700345277786255 0 1.0 0 0.0 0 0.0 0 0.0 1.2825636863708496 -0.14473800361156464 -0.2839455306529999 0.0 0.0 -1.0 1.061747670173645 0.42292261123657227 0 1.0 0 0.0 0 0.0 0 0.0 1.556387186050415 -0.14934493601322174 -0.2839455306529999 0.0 0.0 -1.0 0.9172113537788391 0.4122779965400696 0 1.0 0 0.0 0 0.0 0 0.0 1.288883924484253 -0.15064138174057007 -0.2839455306529999 0.0 0.0 -1.0 1.0585827827453613 0.41700345277786255 0 1.0 0 0.0 0 0.0 0 0.0 1.556387186050415 -0.14934493601322174 -0.2839455306529999 0.0 0.0 -1.0 0.9172113537788391 0.4122779965400696 0 1.0 0 0.0 0 0.0 0 0.0 1.5495622158050537 -0.1555742621421814 -0.2839455306529999 0.0 0.0 -1.0 0.9208014011383057 0.4063137173652649 0 1.0 0 0.0 0 0.0 0 0.0 1.2956302165985107 -0.15623830258846283 -0.2839455306529999 0.0 0.0 -1.0 1.0552059412002563 0.4113277792930603 0 1.0 0 0.0 0 0.0 0 0.0 1.288883924484253 -0.15064138174057007 -0.2839455306529999 0.0 0.0 -1.0 1.0585827827453613 0.41700345277786255 0 1.0 0 0.0 0 0.0 0 0.0 1.5495622158050537 -0.1555742621421814 -0.2839455306529999 0.0 0.0 -1.0 0.9208014011383057 0.4063137173652649 0 1.0 0 0.0 0 0.0 0 0.0 1.2956302165985107 -0.15623830258846283 -0.2839455306529999 0.0 0.0 -1.0 1.0552059412002563 0.4113277792930603 0 1.0 0 0.0 0 0.0 0 0.0 1.5495622158050537 -0.1555742621421814 -0.2839455306529999 0.0 0.0 -1.0 0.9208014011383057 0.4063137173652649 0 1.0 0 0.0 0 0.0 0 0.0 1.5421555042266846 -0.16144844889640808 -0.2839455306529999 0.0 0.0 -1.0 0.9246799349784851 0.40065109729766846 0 1.0 0 0.0 0 0.0 0 0.0 1.302802324295044 -0.16152872145175934 -0.2839455306529999 0.0 0.0 -1.0 1.0516088008880615 0.40589576959609985 0 1.0 0 0.0 0 0.0 0 0.0 1.2956302165985107 -0.15623830258846283 -0.2839455306529999 0.0 0.0 -1.0 1.0552059412002563 0.4113277792930603 0 1.0 0 0.0 0 0.0 0 0.0 1.5421555042266846 -0.16144844889640808 -0.2839455306529999 0.0 0.0 -1.0 0.9246799349784851 0.40065109729766846 0 1.0 0 0.0 0 0.0 0 0.0 1.302802324295044 -0.16152872145175934 -0.2839455306529999 0.0 0.0 -1.0 1.0516088008880615 0.40589576959609985 0 1.0 0 0.0 0 0.0 0 0.0 1.5421555042266846 -0.16144844889640808 -0.2839455306529999 0.0 0.0 -1.0 0.9246799349784851 0.40065109729766846 0 1.0 0 0.0 0 0.0 0 0.0 1.534179925918579 -0.16681185364723206 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9288433790206909 0.39542311429977417 0 1.0 0 0.0 0 0.0 0 0.0 1.3104074001312256 -0.1664518564939499 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0477819442749023 0.40075987577438354 0 1.0 0 0.0 0 0.0 0 0.0 1.302802324295044 -0.16152872145175934 -0.2839455306529999 0.0 0.0 -1.0 1.0516088008880615 0.40589576959609985 0 1.0 0 0.0 0 0.0 0 0.0 1.534179925918579 -0.16681185364723206 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9288433790206909 0.39542311429977417 0 1.0 0 0.0 0 0.0 0 0.0 1.3184521198272705 -0.1709468960762024 -0.2839455306529999 0.0 0.0 -1.0 1.043715238571167 0.3959727883338928 0 1.0 0 0.0 0 0.0 0 0.0 1.3104074001312256 -0.1664518564939499 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0477819442749023 0.40075987577438354 0 1.0 0 0.0 0 0.0 0 0.0 1.534179925918579 -0.16681185364723206 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9288433790206909 0.39542311429977417 0 1.0 0 0.0 0 0.0 0 0.0 1.3184521198272705 -0.1709468960762024 -0.2839455306529999 0.0 0.0 -1.0 1.043715238571167 0.3959727883338928 0 1.0 0 0.0 0 0.0 0 0.0 1.534179925918579 -0.16681185364723206 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9288433790206909 0.39542311429977417 0 1.0 0 0.0 0 0.0 0 0.0 1.525635004043579 -0.17166444659233093 -0.2839455306529999 0.0 0.0 -1.0 0.9333043694496155 0.3906322121620178 0 1.0 0 0.0 0 0.0 0 0.0 1.3269374370574951 -0.17501384019851685 -0.2839455306529999 0.0 0.0 -1.0 1.0393989086151123 0.3915392756462097 0 1.0 0 0.0 0 0.0 0 0.0 1.3184521198272705 -0.1709468960762024 -0.2839455306529999 0.0 0.0 -1.0 1.043715238571167 0.3959727883338928 0 1.0 0 0.0 0 0.0 0 0.0 1.525635004043579 -0.17166444659233093 -0.2839455306529999 0.0 0.0 -1.0 0.9333043694496155 0.3906322121620178 0 1.0 0 0.0 0 0.0 0 0.0 1.3269374370574951 -0.17501384019851685 -0.2839455306529999 0.0 0.0 -1.0 1.0393989086151123 0.3915392756462097 0 1.0 0 0.0 0 0.0 0 0.0 1.525635004043579 -0.17166444659233093 -0.2839455306529999 0.0 0.0 -1.0 0.9333043694496155 0.3906322121620178 0 1.0 0 0.0 0 0.0 0 0.0 1.5165207386016846 -0.1760062575340271 -0.2839455306529999 0.0 0.0 -1.0 0.9380753040313721 0.3862854242324829 0 1.0 0 0.0 0 0.0 0 0.0 1.3358633518218994 -0.17865267395973206 -0.2839455306529999 0.0 0.0 -1.0 1.0348238945007324 0.38746732473373413 0 1.0 0 0.0 0 0.0 0 0.0 1.3269374370574951 -0.17501384019851685 -0.2839455306529999 0.0 0.0 -1.0 1.0393989086151123 0.3915392756462097 0 1.0 0 0.0 0 0.0 0 0.0 1.5165207386016846 -0.1760062575340271 -0.2839455306529999 0.0 0.0 -1.0 0.9380753040313721 0.3862854242324829 0 1.0 0 0.0 0 0.0 0 0.0 1.3358633518218994 -0.17865267395973206 -0.2839455306529999 0.0 0.0 -1.0 1.0348238945007324 0.38746732473373413 0 1.0 0 0.0 0 0.0 0 0.0 1.5165207386016846 -0.1760062575340271 -0.2839455306529999 0.0 0.0 -1.0 0.9380753040313721 0.3862854242324829 0 1.0 0 0.0 0 0.0 0 0.0 1.5068376064300537 -0.17983725666999817 -0.2839455306529999 0.0 0.0 -1.0 0.9431672096252441 0.38239455223083496 0 1.0 0 0.0 0 0.0 0 0.0 1.345228910446167 -0.18186341226100922 -0.2839455306529999 0.0 0.0 -1.0 1.0299824476242065 0.3837679624557495 0 1.0 0 0.0 0 0.0 0 0.0 1.3358633518218994 -0.17865267395973206 -0.2839455306529999 0.0 0.0 -1.0 1.0348238945007324 0.38746732473373413 0 1.0 0 0.0 0 0.0 0 0.0 1.5068376064300537 -0.17983725666999817 -0.2839455306529999 0.0 0.0 -1.0 0.9431672096252441 0.38239455223083496 0 1.0 0 0.0 0 0.0 0 0.0 1.345228910446167 -0.18186341226100922 -0.2839455306529999 0.0 0.0 -1.0 1.0299824476242065 0.3837679624557495 0 1.0 0 0.0 0 0.0 0 0.0 1.5068376064300537 -0.17983725666999817 -0.2839455306529999 0.0 0.0 -1.0 0.9431672096252441 0.38239455223083496 0 1.0 0 0.0 0 0.0 0 0.0 1.4965851306915283 -0.18315744400024414 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9485904574394226 0.37897586822509766 0 1.0 0 0.0 0 0.0 0 0.0 1.3550350666046143 -0.18464605510234833 -0.2839455306529999 0.0 0.0 -1.0 1.024867057800293 0.3804551362991333 0 1.0 0 0.0 0 0.0 0 0.0 1.345228910446167 -0.18186341226100922 -0.2839455306529999 0.0 0.0 -1.0 1.0299824476242065 0.3837679624557495 0 1.0 0 0.0 0 0.0 0 0.0 1.4965851306915283 -0.18315744400024414 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9485904574394226 0.37897586822509766 0 1.0 0 0.0 0 0.0 0 0.0 1.3550350666046143 -0.18464605510234833 -0.2839455306529999 0.0 0.0 -1.0 1.024867057800293 0.3804551362991333 0 1.0 0 0.0 0 0.0 0 0.0 1.4965851306915283 -0.18315744400024414 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9485904574394226 0.37897586822509766 0 1.0 0 0.0 0 0.0 0 0.0 1.4857633113861084 -0.1859668493270874 -0.2839455306529999 0.0 0.0 -1.0 0.9543532133102417 0.3760504722595215 0 1.0 0 0.0 0 0.0 0 0.0 1.365281343460083 -0.1870006024837494 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.019472360610962 0.37754589319229126 0 1.0 0 0.0 0 0.0 0 0.0 1.3550350666046143 -0.18464605510234833 -0.2839455306529999 0.0 0.0 -1.0 1.024867057800293 0.3804551362991333 0 1.0 0 0.0 0 0.0 0 0.0 1.4857633113861084 -0.1859668493270874 -0.2839455306529999 0.0 0.0 -1.0 0.9543532133102417 0.3760504722595215 0 1.0 0 0.0 0 0.0 0 0.0 1.365281343460083 -0.1870006024837494 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.019472360610962 0.37754589319229126 0 1.0 0 0.0 0 0.0 0 0.0 1.4857633113861084 -0.1859668493270874 -0.2839455306529999 0.0 0.0 -1.0 0.9543532133102417 0.3760504722595215 0 1.0 0 0.0 0 0.0 0 0.0 1.4743726253509521 -0.18826544284820557 -0.2839455306529999 0.0 0.0 -1.0 0.9604605436325073 0.37364357709884644 0 1.0 0 0.0 0 0.0 0 0.0 1.3759682178497314 -0.1889270544052124 -0.2839455306529999 0.0 0.0 -1.0 1.013795018196106 0.3750600218772888 0 1.0 0 0.0 0 0.0 0 0.0 1.365281343460083 -0.1870006024837494 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.019472360610962 0.37754589319229126 0 1.0 0 0.0 0 0.0 0 0.0 1.4743726253509521 -0.18826544284820557 -0.2839455306529999 0.0 0.0 -1.0 0.9604605436325073 0.37364357709884644 0 1.0 0 0.0 0 0.0 0 0.0 1.3759682178497314 -0.1889270544052124 -0.2839455306529999 0.0 0.0 -1.0 1.013795018196106 0.3750600218772888 0 1.0 0 0.0 0 0.0 0 0.0 1.4743726253509521 -0.18826544284820557 -0.2839455306529999 0.0 0.0 -1.0 0.9604605436325073 0.37364357709884644 0 1.0 0 0.0 0 0.0 0 0.0 1.4624125957489014 -0.19005325436592102 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9669144153594971 0.3717842102050781 0 1.0 0 0.0 0 0.0 0 0.0 1.3870952129364014 -0.19042539596557617 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0078344345092773 0.3730197548866272 0 1.0 0 0.0 0 0.0 0 0.0 1.3759682178497314 -0.1889270544052124 -0.2839455306529999 0.0 0.0 -1.0 1.013795018196106 0.3750600218772888 0 1.0 0 0.0 0 0.0 0 0.0 1.4624125957489014 -0.19005325436592102 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9669144153594971 0.3717842102050781 0 1.0 0 0.0 0 0.0 0 0.0 1.3870952129364014 -0.19042539596557617 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0078344345092773 0.3730197548866272 0 1.0 0 0.0 0 0.0 0 0.0 1.4624125957489014 -0.19005325436592102 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9669144153594971 0.3717842102050781 0 1.0 0 0.0 0 0.0 0 0.0 1.449883222579956 -0.19133025407791138 -0.2839455306529999 0.0 0.0 -1.0 0.9737119674682617 0.37050437927246094 0 1.0 0 0.0 0 0.0 0 0.0 1.3986623287200928 -0.1914956420660019 -0.2839455306529999 0.0 0.0 -1.0 1.0015931129455566 0.37144917249679565 0 1.0 0 0.0 0 0.0 0 0.0 1.3870952129364014 -0.19042539596557617 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0078344345092773 0.3730197548866272 0 1.0 0 0.0 0 0.0 0 0.0 1.449883222579956 -0.19133025407791138 -0.2839455306529999 0.0 0.0 -1.0 0.9737119674682617 0.37050437927246094 0 1.0 0 0.0 0 0.0 0 0.0 1.3986623287200928 -0.1914956420660019 -0.2839455306529999 0.0 0.0 -1.0 1.0015931129455566 0.37144917249679565 0 1.0 0 0.0 0 0.0 0 0.0 1.449883222579956 -0.19133025407791138 -0.2839455306529999 0.0 0.0 -1.0 0.9737119674682617 0.37050437927246094 0 1.0 0 0.0 0 0.0 0 0.0 1.4367849826812744 -0.19209645688533783 -0.2839455306529999 0.0 0.0 -1.0 0.9808444976806641 0.36983776092529297 0 1.0 0 0.0 0 0.0 0 0.0 1.4106695652008057 -0.19213779270648956 -0.2839455306529999 0.0 -9.155552834272385e-05 -1.0 0.9950774908065796 0.37037354707717896 0 1.0 0 0.0 0 0.0 0 0.0 1.3986623287200928 -0.1914956420660019 -0.2839455306529999 0.0 0.0 -1.0 1.0015931129455566 0.37144917249679565 0 1.0 0 0.0 0 0.0 0 0.0 1.4367849826812744 -0.19209645688533783 -0.2839455306529999 0.0 0.0 -1.0 0.9808444976806641 0.36983776092529297 0 1.0 0 0.0 0 0.0 0 0.0 1.4106695652008057 -0.19213779270648956 -0.2839455306529999 0.0 -9.155552834272385e-05 -1.0 0.9950774908065796 0.37037354707717896 0 1.0 0 0.0 0 0.0 0 0.0 1.4367849826812744 -0.19209645688533783 -0.2839455306529999 0.0 0.0 -1.0 0.9808444976806641 0.36983776092529297 0 1.0 0 0.0 0 0.0 0 0.0 1.4231173992156982 -0.19235184788703918 -0.2839455306529999 0.0 0.0 -1.0 0.9882978200912476 0.3698185086250305 0 1.0 0 0.0 0 0.0 0 0.0 1.0102767944335938 0.19607609510421753 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.9941284656524658 0.7937484979629517 0 1.0 0 0.0 0 0.0 0 0.0 1.0224170684814453 0.19643977284431458 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.9840543270111084 0.7939989566802979 0 1.0 0 0.0 0 0.0 0 0.0 1.0360093116760254 0.19605910778045654 -0.2839455306529999 0.0 0.0 -1.0 0.9728249311447144 0.7929335236549377 0 1.0 0 0.0 0 0.0 0 0.0 0.9984920024871826 0.19498518109321594 -0.2839455306529999 0.0 0.0 -1.0 1.0038418769836426 0.7923401594161987 0 1.0 0 0.0 0 0.0 0 0.0 1.0102767944335938 0.19607609510421753 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.9941284656524658 0.7937484979629517 0 1.0 0 0.0 0 0.0 0 0.0 1.0360093116760254 0.19605910778045654 -0.2839455306529999 0.0 0.0 -1.0 0.9728249311447144 0.7929335236549377 0 1.0 0 0.0 0 0.0 0 0.0 0.9984920024871826 0.19498518109321594 -0.2839455306529999 0.0 0.0 -1.0 1.0038418769836426 0.7923401594161987 0 1.0 0 0.0 0 0.0 0 0.0 1.0360093116760254 0.19605910778045654 -0.2839455306529999 0.0 0.0 -1.0 0.9728249311447144 0.7929335236549377 0 1.0 0 0.0 0 0.0 0 0.0 1.0491149425506592 0.19491711258888245 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9621782302856445 0.7905840873718262 0 1.0 0 0.0 0 0.0 0 0.0 0.9870622158050537 0.19316697120666504 -0.2839455306529999 0.0 0.0 -1.0 1.013106107711792 0.7898356914520264 0 1.0 0 0.0 0 0.0 0 0.0 0.9984920024871826 0.19498518109321594 -0.2839455306529999 0.0 0.0 -1.0 1.0038418769836426 0.7923401594161987 0 1.0 0 0.0 0 0.0 0 0.0 1.0491149425506592 0.19491711258888245 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9621782302856445 0.7905840873718262 0 1.0 0 0.0 0 0.0 0 0.0 0.9870622158050537 0.19316697120666504 -0.2839455306529999 0.0 0.0 -1.0 1.013106107711792 0.7898356914520264 0 1.0 0 0.0 0 0.0 0 0.0 1.0491149425506592 0.19491711258888245 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9621782302856445 0.7905840873718262 0 1.0 0 0.0 0 0.0 0 0.0 1.0617341995239258 0.19301378726959229 -0.2839455306529999 0.0 0.0 -1.0 0.9522119760513306 0.7870548367500305 0 1.0 0 0.0 0 0.0 0 0.0 0.9759876728057861 0.1906214952468872 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0218535661697388 0.7862992882728577 0 1.0 0 0.0 0 0.0 0 0.0 0.9870622158050537 0.19316697120666504 -0.2839455306529999 0.0 0.0 -1.0 1.013106107711792 0.7898356914520264 0 1.0 0 0.0 0 0.0 0 0.0 1.0617341995239258 0.19301378726959229 -0.2839455306529999 0.0 0.0 -1.0 0.9522119760513306 0.7870548367500305 0 1.0 0 0.0 0 0.0 0 0.0 0.9759876728057861 0.1906214952468872 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0218535661697388 0.7862992882728577 0 1.0 0 0.0 0 0.0 0 0.0 1.0617341995239258 0.19301378726959229 -0.2839455306529999 0.0 0.0 -1.0 0.9522119760513306 0.7870548367500305 0 1.0 0 0.0 0 0.0 0 0.0 1.073866844177246 0.19034910202026367 -0.2839455306529999 0.0 0.0 -1.0 0.9429885149002075 0.7824501991271973 0 1.0 0 0.0 0 0.0 0 0.0 0.9652681350708008 0.18734872341156006 -0.2839455306529999 0.0 0.0 -1.0 1.030038595199585 0.781794548034668 0 1.0 0 0.0 0 0.0 0 0.0 0.9759876728057861 0.1906214952468872 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0218535661697388 0.7862992882728577 0 1.0 0 0.0 0 0.0 0 0.0 1.073866844177246 0.19034910202026367 -0.2839455306529999 0.0 0.0 -1.0 0.9429885149002075 0.7824501991271973 0 1.0 0 0.0 0 0.0 0 0.0 0.9652681350708008 0.18734872341156006 -0.2839455306529999 0.0 0.0 -1.0 1.030038595199585 0.781794548034668 0 1.0 0 0.0 0 0.0 0 0.0 1.073866844177246 0.19034910202026367 -0.2839455306529999 0.0 0.0 -1.0 0.9429885149002075 0.7824501991271973 0 1.0 0 0.0 0 0.0 0 0.0 1.0855131149291992 0.186923086643219 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9345377087593079 0.7768685817718506 0 1.0 0 0.0 0 0.0 0 0.0 0.9549038410186768 0.18334868550300598 -0.2839455306529999 0.0 0.0 -1.0 1.0376348495483398 0.776381254196167 0 1.0 0 0.0 0 0.0 0 0.0 0.9652681350708008 0.18734872341156006 -0.2839455306529999 0.0 0.0 -1.0 1.030038595199585 0.781794548034668 0 1.0 0 0.0 0 0.0 0 0.0 1.0855131149291992 0.186923086643219 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9345377087593079 0.7768685817718506 0 1.0 0 0.0 0 0.0 0 0.0 0.9549038410186768 0.18334868550300598 -0.2839455306529999 0.0 0.0 -1.0 1.0376348495483398 0.776381254196167 0 1.0 0 0.0 0 0.0 0 0.0 1.0855131149291992 0.186923086643219 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9345377087593079 0.7768685817718506 0 1.0 0 0.0 0 0.0 0 0.0 1.096672773361206 0.18273574113845825 -0.2839455306529999 0.0 0.0 -1.0 0.9268628358840942 0.7703980207443237 0 1.0 0 0.0 0 0.0 0 0.0 0.944894552230835 0.1786213517189026 -0.2839455306529999 0.0 0.0 -1.0 1.044634222984314 0.7701126933097839 0 1.0 0 0.0 0 0.0 0 0.0 0.9549038410186768 0.18334868550300598 -0.2839455306529999 0.0 0.0 -1.0 1.0376348495483398 0.776381254196167 0 1.0 0 0.0 0 0.0 0 0.0 1.096672773361206 0.18273574113845825 -0.2839455306529999 0.0 0.0 -1.0 0.9268628358840942 0.7703980207443237 0 1.0 0 0.0 0 0.0 0 0.0 0.944894552230835 0.1786213517189026 -0.2839455306529999 0.0 0.0 -1.0 1.044634222984314 0.7701126933097839 0 1.0 0 0.0 0 0.0 0 0.0 1.096672773361206 0.18273574113845825 -0.2839455306529999 0.0 0.0 -1.0 0.9268628358840942 0.7703980207443237 0 1.0 0 0.0 0 0.0 0 0.0 1.1073460578918457 0.17778706550598145 -0.2839455306529999 0.0 0.0 -1.0 0.9199471473693848 0.7631135582923889 0 1.0 0 0.0 0 0.0 0 0.0 0.9352405071258545 0.17316675186157227 -0.2839455306529999 0.0 0.0 -1.0 1.051041603088379 0.763035237789154 0 1.0 0 0.0 0 0.0 0 0.0 0.944894552230835 0.1786213517189026 -0.2839455306529999 0.0 0.0 -1.0 1.044634222984314 0.7701126933097839 0 1.0 0 0.0 0 0.0 0 0.0 1.1073460578918457 0.17778706550598145 -0.2839455306529999 0.0 0.0 -1.0 0.9199471473693848 0.7631135582923889 0 1.0 0 0.0 0 0.0 0 0.0 0.9352405071258545 0.17316675186157227 -0.2839455306529999 0.0 0.0 -1.0 1.051041603088379 0.763035237789154 0 1.0 0 0.0 0 0.0 0 0.0 1.1073460578918457 0.17778706550598145 -0.2839455306529999 0.0 0.0 -1.0 0.9199471473693848 0.7631135582923889 0 1.0 0 0.0 0 0.0 0 0.0 1.1175329685211182 0.17207705974578857 -0.2839455306529999 0.0 0.0 -1.0 0.9137599468231201 0.7550764679908752 0 1.0 0 0.0 0 0.0 0 0.0 0.9259414672851562 0.16698485612869263 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0568726062774658 0.7551867961883545 0 1.0 0 0.0 0 0.0 0 0.0 0.9352405071258545 0.17316675186157227 -0.2839455306529999 0.0 0.0 -1.0 1.051041603088379 0.763035237789154 0 1.0 0 0.0 0 0.0 0 0.0 1.1175329685211182 0.17207705974578857 -0.2839455306529999 0.0 0.0 -1.0 0.9137599468231201 0.7550764679908752 0 1.0 0 0.0 0 0.0 0 0.0 0.9259414672851562 0.16698485612869263 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0568726062774658 0.7551867961883545 0 1.0 0 0.0 0 0.0 0 0.0 1.1175329685211182 0.17207705974578857 -0.2839455306529999 0.0 0.0 -1.0 0.9137599468231201 0.7550764679908752 0 1.0 0 0.0 0 0.0 0 0.0 1.1272332668304443 0.16560572385787964 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9082623720169067 0.7463341951370239 0 1.0 0 0.0 0 0.0 0 0.0 0.9169976711273193 0.16007569432258606 -0.2839455306529999 0.0 0.0 -1.0 1.0621501207351685 0.7465975880622864 0 1.0 0 0.0 0 0.0 0 0.0 0.9259414672851562 0.16698485612869263 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0568726062774658 0.7551867961883545 0 1.0 0 0.0 0 0.0 0 0.0 1.1272332668304443 0.16560572385787964 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9082623720169067 0.7463341951370239 0 1.0 0 0.0 0 0.0 0 0.0 0.9169976711273193 0.16007569432258606 -0.2839455306529999 0.0 0.0 -1.0 1.0621501207351685 0.7465975880622864 0 1.0 0 0.0 0 0.0 0 0.0 1.1272332668304443 0.16560572385787964 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9082623720169067 0.7463341951370239 0 1.0 0 0.0 0 0.0 0 0.0 1.1364471912384033 0.15837302803993225 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9034109115600586 0.7369210720062256 0 1.0 0 0.0 0 0.0 0 0.0 0.9084088802337646 0.15243923664093018 -0.2839455306529999 0.0 0.0 -1.0 1.066901683807373 0.7372899651527405 0 1.0 0 0.0 0 0.0 0 0.0 0.9169976711273193 0.16007569432258606 -0.2839455306529999 0.0 0.0 -1.0 1.0621501207351685 0.7465975880622864 0 1.0 0 0.0 0 0.0 0 0.0 1.1364471912384033 0.15837302803993225 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9034109115600586 0.7369210720062256 0 1.0 0 0.0 0 0.0 0 0.0 0.9084088802337646 0.15243923664093018 -0.2839455306529999 0.0 0.0 -1.0 1.066901683807373 0.7372899651527405 0 1.0 0 0.0 0 0.0 0 0.0 1.1364471912384033 0.15837302803993225 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9034109115600586 0.7369210720062256 0 1.0 0 0.0 0 0.0 0 0.0 1.145174503326416 0.1503790020942688 -0.2839455306529999 0.0 0.0 -1.0 0.8991608619689941 0.7268599271774292 0 1.0 0 0.0 0 0.0 0 0.0 0.9001753330230713 0.14407548308372498 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0711573362350464 0.7272799015045166 0 1.0 0 0.0 0 0.0 0 0.0 0.9084088802337646 0.15243923664093018 -0.2839455306529999 0.0 0.0 -1.0 1.066901683807373 0.7372899651527405 0 1.0 0 0.0 0 0.0 0 0.0 1.145174503326416 0.1503790020942688 -0.2839455306529999 0.0 0.0 -1.0 0.8991608619689941 0.7268599271774292 0 1.0 0 0.0 0 0.0 0 0.0 0.9001753330230713 0.14407548308372498 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0711573362350464 0.7272799015045166 0 1.0 0 0.0 0 0.0 0 0.0 1.145174503326416 0.1503790020942688 -0.2839455306529999 0.0 0.0 -1.0 0.8991608619689941 0.7268599271774292 0 1.0 0 0.0 0 0.0 0 0.0 1.1534152030944824 0.14162364602088928 -0.2839455306529999 0.0 0.0 -1.0 0.8954682946205139 0.7161635160446167 0 1.0 0 0.0 0 0.0 0 0.0 0.8924548625946045 0.1350696086883545 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.074866533279419 0.7167055606842041 0 1.0 0 0.0 0 0.0 0 0.0 0.9001753330230713 0.14407548308372498 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0711573362350464 0.7272799015045166 0 1.0 0 0.0 0 0.0 0 0.0 1.1534152030944824 0.14162364602088928 -0.2839455306529999 0.0 0.0 -1.0 0.8954682946205139 0.7161635160446167 0 1.0 0 0.0 0 0.0 0 0.0 0.8924548625946045 0.1350696086883545 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.074866533279419 0.7167055606842041 0 1.0 0 0.0 0 0.0 0 0.0 1.1534152030944824 0.14162364602088928 -0.2839455306529999 0.0 0.0 -1.0 0.8954682946205139 0.7161635160446167 0 1.0 0 0.0 0 0.0 0 0.0 1.1610651016235352 0.13208264112472534 -0.2839455306529999 0.0 0.0 -1.0 0.8923484086990356 0.7048517465591431 0 1.0 0 0.0 0 0.0 0 0.0 0.8854057788848877 0.1255066990852356 -0.2839455306529999 0.0 0.0 -1.0 1.0779918432235718 0.7057040929794312 0 1.0 0 0.0 0 0.0 0 0.0 0.8924548625946045 0.1350696086883545 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.074866533279419 0.7167055606842041 0 1.0 0 0.0 0 0.0 0 0.0 1.1610651016235352 0.13208264112472534 -0.2839455306529999 0.0 0.0 -1.0 0.8923484086990356 0.7048517465591431 0 1.0 0 0.0 0 0.0 0 0.0 0.8854057788848877 0.1255066990852356 -0.2839455306529999 0.0 0.0 -1.0 1.0779918432235718 0.7057040929794312 0 1.0 0 0.0 0 0.0 0 0.0 1.1610651016235352 0.13208264112472534 -0.2839455306529999 0.0 0.0 -1.0 0.8923484086990356 0.7048517465591431 0 1.0 0 0.0 0 0.0 0 0.0 1.1680192947387695 0.12173163890838623 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8898118734359741 0.6929334402084351 0 1.0 0 0.0 0 0.0 0 0.0 0.8790280818939209 0.11538678407669067 -0.2839455306529999 0.0 0.0 -1.0 1.0805798768997192 0.6942784786224365 0 1.0 0 0.0 0 0.0 0 0.0 0.8854057788848877 0.1255066990852356 -0.2839455306529999 0.0 0.0 -1.0 1.0779918432235718 0.7057040929794312 0 1.0 0 0.0 0 0.0 0 0.0 1.0230786800384521 0.12097030878067017 -0.2839455306529999 0.0 0.0 -1.0 0.9850102663040161 0.7255008220672607 0 1.0 0 0.0 0 0.0 0 0.0 1.0230786800384521 0.12097030878067017 -0.2839455306529999 0.0 0.0 -1.0 0.9850102663040161 0.7255008220672607 0 1.0 0 0.0 0 0.0 0 0.0 0.8854057788848877 0.1255066990852356 -0.2839455306529999 0.0 0.0 -1.0 1.0779918432235718 0.7057040929794312 0 1.0 0 0.0 0 0.0 0 0.0 1.0283715724945068 0.12113326787948608 -0.2839455306529999 0.0 0.0 -1.0 0.9810165762901306 0.7254688739776611 0 1.0 0 0.0 0 0.0 0 0.0 1.0283715724945068 0.12113326787948608 -0.2839455306529999 0.0 0.0 -1.0 0.9810165762901306 0.7254688739776611 0 1.0 0 0.0 0 0.0 0 0.0 0.8854057788848877 0.1255066990852356 -0.2839455306529999 0.0 0.0 -1.0 1.0779918432235718 0.7057040929794312 0 1.0 0 0.0 0 0.0 0 0.0 1.1680192947387695 0.12173163890838623 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8898118734359741 0.6929334402084351 0 1.0 0 0.0 0 0.0 0 0.0 1.0283715724945068 0.12113326787948608 -0.2839455306529999 0.0 0.0 -1.0 0.9810165762901306 0.7254688739776611 0 1.0 0 0.0 0 0.0 0 0.0 1.1680192947387695 0.12173163890838623 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8898118734359741 0.6929334402084351 0 1.0 0 0.0 0 0.0 0 0.0 1.0333290100097656 0.12097880244255066 -0.2839455306529999 0.0 0.0 -1.0 0.9772898554801941 0.725033164024353 0 1.0 0 0.0 0 0.0 0 0.0 1.0333290100097656 0.12097880244255066 -0.2839455306529999 0.0 0.0 -1.0 0.9772898554801941 0.725033164024353 0 1.0 0 0.0 0 0.0 0 0.0 1.1680192947387695 0.12173163890838623 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8898118734359741 0.6929334402084351 0 1.0 0 0.0 0 0.0 0 0.0 1.1742777824401855 0.11057066917419434 -0.2839455306529999 0.0 0.0 -1.0 0.8878135681152344 0.680391788482666 0 1.0 0 0.0 0 0.0 0 0.0 1.0381596088409424 0.12051543593406677 -0.2839455306529999 0.0 0.0 -1.0 0.9736800193786621 0.7242040634155273 0 1.0 0 0.0 0 0.0 0 0.0 1.0333290100097656 0.12097880244255066 -0.2839455306529999 0.0 0.0 -1.0 0.9772898554801941 0.725033164024353 0 1.0 0 0.0 0 0.0 0 0.0 1.1742777824401855 0.11057066917419434 -0.2839455306529999 0.0 0.0 -1.0 0.8878135681152344 0.680391788482666 0 1.0 0 0.0 0 0.0 0 0.0 0.8790280818939209 0.11538678407669067 -0.2839455306529999 0.0 0.0 -1.0 1.0805798768997192 0.6942784786224365 0 1.0 0 0.0 0 0.0 0 0.0 1.0230786800384521 0.12097030878067017 -0.2839455306529999 0.0 0.0 -1.0 0.9850102663040161 0.7255008220672607 0 1.0 0 0.0 0 0.0 0 0.0 1.0179414749145508 0.12048140168190002 -0.2839455306529999 0.0 -0.00012207403779029846 -1.0 0.9888919591903687 0.7250957489013672 0 1.0 0 0.0 0 0.0 0 0.0 1.0428638458251953 0.11974316835403442 -0.2839455306529999 0.0 0.0 -1.0 0.9701930284500122 0.7229883670806885 0 1.0 0 0.0 0 0.0 0 0.0 1.0381596088409424 0.12051543593406677 -0.2839455306529999 0.0 0.0 -1.0 0.9736800193786621 0.7242040634155273 0 1.0 0 0.0 0 0.0 0 0.0 1.1742777824401855 0.11057066917419434 -0.2839455306529999 0.0 0.0 -1.0 0.8878135681152344 0.680391788482666 0 1.0 0 0.0 0 0.0 0 0.0 0.8790280818939209 0.11538678407669067 -0.2839455306529999 0.0 0.0 -1.0 1.0805798768997192 0.6942784786224365 0 1.0 0 0.0 0 0.0 0 0.0 1.0179414749145508 0.12048140168190002 -0.2839455306529999 0.0 -0.00012207403779029846 -1.0 0.9888919591903687 0.7250957489013672 0 1.0 0 0.0 0 0.0 0 0.0 1.0129599571228027 0.11966654658317566 -0.2839455306529999 0.0 3.0518509447574615e-05 -0.999969482421875 0.9926527738571167 0.7242611050605774 0 1.0 0 0.0 0 0.0 0 0.0 1.0474414825439453 0.11866196990013123 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9668347239494324 0.7213927507400513 0 1.0 0 0.0 0 0.0 0 0.0 1.0428638458251953 0.11974316835403442 -0.2839455306529999 0.0 0.0 -1.0 0.9701930284500122 0.7229883670806885 0 1.0 0 0.0 0 0.0 0 0.0 1.1742777824401855 0.11057066917419434 -0.2839455306529999 0.0 0.0 -1.0 0.8878135681152344 0.680391788482666 0 1.0 0 0.0 0 0.0 0 0.0 0.8790280818939209 0.11538678407669067 -0.2839455306529999 0.0 0.0 -1.0 1.0805798768997192 0.6942784786224365 0 1.0 0 0.0 0 0.0 0 0.0 1.0129599571228027 0.11966654658317566 -0.2839455306529999 0.0 3.0518509447574615e-05 -0.999969482421875 0.9926527738571167 0.7242611050605774 0 1.0 0 0.0 0 0.0 0 0.0 1.008134126663208 0.11852577328681946 -0.2839455306529999 0.0 0.0 -1.0 0.9962847232818604 0.7230038642883301 0 1.0 0 0.0 0 0.0 0 0.0 1.0518927574157715 0.11727187037467957 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9636092185974121 0.7194227576255798 0 1.0 0 0.0 0 0.0 0 0.0 1.0474414825439453 0.11866196990013123 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9668347239494324 0.7213927507400513 0 1.0 0 0.0 0 0.0 0 0.0 1.1742777824401855 0.11057066917419434 -0.2839455306529999 0.0 0.0 -1.0 0.8878135681152344 0.680391788482666 0 1.0 0 0.0 0 0.0 0 0.0 0.8790280818939209 0.11538678407669067 -0.2839455306529999 0.0 0.0 -1.0 1.0805798768997192 0.6942784786224365 0 1.0 0 0.0 0 0.0 0 0.0 1.008134126663208 0.11852577328681946 -0.2839455306529999 0.0 0.0 -1.0 0.9962847232818604 0.7230038642883301 0 1.0 0 0.0 0 0.0 0 0.0 1.0034639835357666 0.11705905199050903 -0.2839455306529999 0.0 0.0 -1.0 0.9997810125350952 0.7213302850723267 0 1.0 0 0.0 0 0.0 0 0.0 1.0562174320220947 0.11557283997535706 -0.2839455306529999 0.0 0.0 -1.0 0.9605203866958618 0.7170834541320801 0 1.0 0 0.0 0 0.0 0 0.0 1.0518927574157715 0.11727187037467957 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9636092185974121 0.7194227576255798 0 1.0 0 0.0 0 0.0 0 0.0 1.1742777824401855 0.11057066917419434 -0.2839455306529999 0.0 0.0 -1.0 0.8878135681152344 0.680391788482666 0 1.0 0 0.0 0 0.0 0 0.0 0.8790280818939209 0.11538678407669067 -0.2839455306529999 0.0 0.0 -1.0 1.0805798768997192 0.6942784786224365 0 1.0 0 0.0 0 0.0 0 0.0 1.0034639835357666 0.11705905199050903 -0.2839455306529999 0.0 0.0 -1.0 0.9997810125350952 0.7213302850723267 0 1.0 0 0.0 0 0.0 0 0.0 0.9989495277404785 0.11526638269424438 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0031362771987915 0.7192459106445312 0 1.0 0 0.0 0 0.0 0 0.0 1.0604157447814941 0.11356490850448608 -0.2839455306529999 0.0 0.0 -1.0 0.9575706124305725 0.7143791913986206 0 1.0 0 0.0 0 0.0 0 0.0 1.0562174320220947 0.11557283997535706 -0.2839455306529999 0.0 0.0 -1.0 0.9605203866958618 0.7170834541320801 0 1.0 0 0.0 0 0.0 0 0.0 1.1742777824401855 0.11057066917419434 -0.2839455306529999 0.0 0.0 -1.0 0.8878135681152344 0.680391788482666 0 1.0 0 0.0 0 0.0 0 0.0 0.8733217716217041 0.10470986366271973 -0.2839455306529999 0.0 0.0 -1.0 0.08267199993133545 0.6824241280555725 0 1.0 0 0.0 0 0.0 0 0.0 0.8790280818939209 0.11538678407669067 -0.2839455306529999 0.0 0.0 -1.0 0.08057984709739685 0.6942784786224365 0 1.0 0 0.0 0 0.0 0 0.0 0.9989495277404785 0.11526638269424438 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.003136277198791504 0.7192459106445312 0 1.0 0 0.0 0 0.0 0 0.0 0.8733217716217041 0.10470986366271973 -0.2839455306529999 0.0 0.0 -1.0 0.08267199993133545 0.6824241280555725 0 1.0 0 0.0 0 0.0 0 0.0 0.9989495277404785 0.11526638269424438 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.003136277198791504 0.7192459106445312 0 1.0 0 0.0 0 0.0 0 0.0 0.9945907592773438 0.11314776539802551 -0.2839455306529999 0.0 0.0 -1.0 0.006345778703689575 0.7167558670043945 0 1.0 0 0.0 0 0.0 0 0.0 1.0644874572753906 0.11124807596206665 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9547619819641113 0.7113131284713745 0 1.0 0 0.0 0 0.0 0 0.0 1.0604157447814941 0.11356490850448608 -0.2839455306529999 0.0 0.0 -1.0 0.9575706124305725 0.7143791913986206 0 1.0 0 0.0 0 0.0 0 0.0 1.1742777824401855 0.11057066917419434 -0.2839455306529999 0.0 0.0 -1.0 0.8878135681152344 0.680391788482666 0 1.0 0 0.0 0 0.0 0 0.0 0.8733217716217041 0.10470986366271973 -0.2839455306529999 0.0 0.0 -1.0 0.08267199993133545 0.6824241280555725 0 1.0 0 0.0 0 0.0 0 0.0 0.9945907592773438 0.11314776539802551 -0.2839455306529999 0.0 0.0 -1.0 0.006345778703689575 0.7167558670043945 0 1.0 0 0.0 0 0.0 0 0.0 0.9903876781463623 0.1107032299041748 -0.2839455306529999 0.0 0.0 -1.0 0.00940614938735962 0.7138638496398926 0 1.0 0 0.0 0 0.0 0 0.0 1.0684328079223633 0.10862231254577637 -0.2839455306529999 0.0 0.0 -1.0 0.9520952701568604 0.7078877687454224 0 1.0 0 0.0 0 0.0 0 0.0 1.0644874572753906 0.11124807596206665 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9547619819641113 0.7113131284713745 0 1.0 0 0.0 0 0.0 0 0.0 1.1742777824401855 0.11057066917419434 -0.2839455306529999 0.0 0.0 -1.0 0.8878135681152344 0.680391788482666 0 1.0 0 0.0 0 0.0 0 0.0 0.8733217716217041 0.10470986366271973 -0.2839455306529999 0.0 0.0 -1.0 0.08267199993133545 0.6824241280555725 0 1.0 0 0.0 0 0.0 0 0.0 0.9903876781463623 0.1107032299041748 -0.2839455306529999 0.0 0.0 -1.0 0.00940614938735962 0.7138638496398926 0 1.0 0 0.0 0 0.0 0 0.0 0.9863402843475342 0.10793274641036987 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.012314856052398682 0.7105729579925537 0 1.0 0 0.0 0 0.0 0 0.0 1.0684328079223633 0.10862231254577637 -0.2839455306529999 0.0 0.0 -1.0 0.9520952701568604 0.7078877687454224 0 1.0 0 0.0 0 0.0 0 0.0 1.1742777824401855 0.11057066917419434 -0.2839455306529999 0.0 0.0 -1.0 0.8878135681152344 0.680391788482666 0 1.0 0 0.0 0 0.0 0 0.0 1.1798405647277832 0.09859970211982727 -0.2839455306529999 0.0 0.0 -1.0 0.8863137364387512 0.667203426361084 0 1.0 0 0.0 0 0.0 0 0.0 1.072251558303833 0.10568764805793762 -0.2839455306529999 0.0 0.0 -1.0 0.9495713114738464 0.7041049003601074 0 1.0 0 0.0 0 0.0 0 0.0 1.0684328079223633 0.10862231254577637 -0.2839455306529999 0.0 0.0 -1.0 0.9520952701568604 0.7078877687454224 0 1.0 0 0.0 0 0.0 0 0.0 1.1798405647277832 0.09859970211982727 -0.2839455306529999 0.0 0.0 -1.0 0.8863137364387512 0.667203426361084 0 1.0 0 0.0 0 0.0 0 0.0 0.8733217716217041 0.10470986366271973 -0.2839455306529999 0.0 0.0 -1.0 0.08267199993133545 0.6824241280555725 0 1.0 0 0.0 0 0.0 0 0.0 0.9863402843475342 0.10793274641036987 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.012314856052398682 0.7105729579925537 0 1.0 0 0.0 0 0.0 0 0.0 0.9824485778808594 0.10483631491661072 -0.2839455306529999 0.0 0.0 -1.0 0.015070319175720215 0.7068853378295898 0 1.0 0 0.0 0 0.0 0 0.0 1.075943946838379 0.10244408249855042 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9471895694732666 0.699965238571167 0 1.0 0 0.0 0 0.0 0 0.0 1.072251558303833 0.10568764805793762 -0.2839455306529999 0.0 0.0 -1.0 0.9495713114738464 0.7041049003601074 0 1.0 0 0.0 0 0.0 0 0.0 1.1798405647277832 0.09859970211982727 -0.2839455306529999 0.0 0.0 -1.0 0.8863137364387512 0.667203426361084 0 1.0 0 0.0 0 0.0 0 0.0 0.8733217716217041 0.10470986366271973 -0.2839455306529999 0.0 0.0 -1.0 0.08267199993133545 0.6824241280555725 0 1.0 0 0.0 0 0.0 0 0.0 0.9824485778808594 0.10483631491661072 -0.2839455306529999 0.0 0.0 -1.0 0.015070319175720215 0.7068853378295898 0 1.0 0 0.0 0 0.0 0 0.0 0.9787123203277588 0.10141396522521973 -0.2839455306529999 0.0 0.0 -1.0 0.017671942710876465 0.7028019428253174 0 1.0 0 0.0 0 0.0 0 0.0 0.8682868480682373 0.09347590804100037 -0.2839455306529999 0.0 0.0 -1.0 0.08430463075637817 0.6701304316520691 0 1.0 0 0.0 0 0.0 0 0.0 0.8733217716217041 0.10470986366271973 -0.2839455306529999 0.0 0.0 -1.0 0.08267199993133545 0.6824241280555725 0 1.0 0 0.0 0 0.0 0 0.0 0.9787123203277588 0.10141396522521973 -0.2839455306529999 0.0 0.0 -1.0 0.017671942710876465 0.7028019428253174 0 1.0 0 0.0 0 0.0 0 0.0 1.0795097351074219 0.09889158606529236 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9449496269226074 0.6954689025878906 0 1.0 0 0.0 0 0.0 0 0.0 1.075943946838379 0.10244408249855042 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9471895694732666 0.699965238571167 0 1.0 0 0.0 0 0.0 0 0.0 1.1798405647277832 0.09859970211982727 -0.2839455306529999 0.0 0.0 -1.0 0.8863137364387512 0.667203426361084 0 1.0 0 0.0 0 0.0 0 0.0 0.8682868480682373 0.09347590804100037 -0.2839455306529999 0.0 0.0 -1.0 0.08430463075637817 0.6701304316520691 0 1.0 0 0.0 0 0.0 0 0.0 0.9787123203277588 0.10141396522521973 -0.2839455306529999 0.0 0.0 -1.0 0.017671942710876465 0.7028019428253174 0 1.0 0 0.0 0 0.0 0 0.0 0.9751315116882324 0.09766566753387451 -0.2839455306529999 0.0 0.0 -1.0 0.020119577646255493 0.698323130607605 0 1.0 0 0.0 0 0.0 0 0.0 1.082874059677124 0.09504234790802002 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9429000616073608 0.6906435489654541 0 1.0 0 0.0 0 0.0 0 0.0 1.0795097351074219 0.09889158606529236 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9449496269226074 0.6954689025878906 0 1.0 0 0.0 0 0.0 0 0.0 1.1798405647277832 0.09859970211982727 -0.2839455306529999 0.0 0.0 -1.0 0.8863137364387512 0.667203426361084 0 1.0 0 0.0 0 0.0 0 0.0 1.082874059677124 0.09504234790802002 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9429000616073608 0.6906435489654541 0 1.0 0 0.0 0 0.0 0 0.0 1.1798405647277832 0.09859970211982727 -0.2839455306529999 0.0 0.0 -1.0 0.8863137364387512 0.667203426361084 0 1.0 0 0.0 0 0.0 0 0.0 1.1847076416015625 0.08581876754760742 -0.2839455306529999 0.0 0.0 -1.0 0.885278046131134 0.65334153175354 0 1.0 0 0.0 0 0.0 0 0.0 0.8682868480682373 0.09347590804100037 -0.2839455306529999 0.0 0.0 -1.0 0.08430463075637817 0.6701304316520691 0 1.0 0 0.0 0 0.0 0 0.0 0.9751315116882324 0.09766566753387451 -0.2839455306529999 0.0 0.0 -1.0 0.020119577646255493 0.698323130607605 0 1.0 0 0.0 0 0.0 0 0.0 0.9717772006988525 0.09363764524459839 -0.2839455306529999 0.0 0.0 -1.0 0.022365719079971313 0.6935079097747803 0 1.0 0 0.0 0 0.0 0 0.0 1.085960865020752 0.09090852737426758 -0.2839455306529999 0.0 0.0 -1.0 0.941087543964386 0.6855176687240601 0 1.0 0 0.0 0 0.0 0 0.0 1.082874059677124 0.09504234790802002 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9429000616073608 0.6906435489654541 0 1.0 0 0.0 0 0.0 0 0.0 1.1847076416015625 0.08581876754760742 -0.2839455306529999 0.0 0.0 -1.0 0.885278046131134 0.65334153175354 0 1.0 0 0.0 0 0.0 0 0.0 0.8682868480682373 0.09347590804100037 -0.2839455306529999 0.0 0.0 -1.0 0.08430463075637817 0.6701304316520691 0 1.0 0 0.0 0 0.0 0 0.0 0.9717772006988525 0.09363764524459839 -0.2839455306529999 0.0 0.0 -1.0 0.022365719079971313 0.6935079097747803 0 1.0 0 0.0 0 0.0 0 0.0 0.9687197208404541 0.08937612175941467 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.024366289377212524 0.6884176731109619 0 1.0 0 0.0 0 0.0 0 0.0 0.8639230728149414 0.08168494701385498 -0.2839455306529999 0.0 0.0 -1.0 0.08550941944122314 0.6573827266693115 0 1.0 0 0.0 0 0.0 0 0.0 0.8682868480682373 0.09347590804100037 -0.2839455306529999 0.0 0.0 -1.0 0.08430463075637817 0.6701304316520691 0 1.0 0 0.0 0 0.0 0 0.0 0.9687197208404541 0.08937612175941467 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.024366289377212524 0.6884176731109619 0 1.0 0 0.0 0 0.0 0 0.0 1.0887703895568848 0.08649012446403503 -0.2839455306529999 0.0 0.0 -1.0 0.939506471157074 0.6800910234451294 0 1.0 0 0.0 0 0.0 0 0.0 1.085960865020752 0.09090852737426758 -0.2839455306529999 0.0 0.0 -1.0 0.941087543964386 0.6855176687240601 0 1.0 0 0.0 0 0.0 0 0.0 1.1847076416015625 0.08581876754760742 -0.2839455306529999 0.0 0.0 -1.0 0.885278046131134 0.65334153175354 0 1.0 0 0.0 0 0.0 0 0.0 0.8639230728149414 0.08168494701385498 -0.2839455306529999 0.0 0.0 -1.0 0.08550941944122314 0.6573827266693115 0 1.0 0 0.0 0 0.0 0 0.0 0.9687197208404541 0.08937612175941467 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.024366289377212524 0.6884176731109619 0 1.0 0 0.0 0 0.0 0 0.0 0.9659590721130371 0.08488109707832336 -0.2839455306529999 0.0 0.0 -1.0 0.026126623153686523 0.6830544471740723 0 1.0 0 0.0 0 0.0 0 0.0 1.0913023948669434 0.081787109375 -0.2839455306529999 0.0 0.0 -1.0 0.938151478767395 0.6743619441986084 0 1.0 0 0.0 0 0.0 0 0.0 1.0887703895568848 0.08649012446403503 -0.2839455306529999 0.0 0.0 -1.0 0.939506471157074 0.6800910234451294 0 1.0 0 0.0 0 0.0 0 0.0 1.1847076416015625 0.08581876754760742 -0.2839455306529999 0.0 0.0 -1.0 0.885278046131134 0.65334153175354 0 1.0 0 0.0 0 0.0 0 0.0 1.0913023948669434 0.081787109375 -0.2839455306529999 0.0 0.0 -1.0 0.938151478767395 0.6743619441986084 0 1.0 0 0.0 0 0.0 0 0.0 1.1847076416015625 0.08581876754760742 -0.2839455306529999 0.0 0.0 -1.0 0.885278046131134 0.65334153175354 0 1.0 0 0.0 0 0.0 0 0.0 1.1888792514801025 0.0722278356552124 -0.2839455306529999 0.0 0.0 -1.0 0.884676992893219 0.6387784481048584 0 1.0 0 0.0 0 0.0 0 0.0 0.8639230728149414 0.08168494701385498 -0.2839455306529999 0.0 0.0 -1.0 0.08550941944122314 0.6573827266693115 0 1.0 0 0.0 0 0.0 0 0.0 0.9659590721130371 0.08488109707832336 -0.2839455306529999 0.0 0.0 -1.0 0.026126623153686523 0.6830544471740723 0 1.0 0 0.0 0 0.0 0 0.0 0.9634950160980225 0.08015254139900208 -0.2839455306529999 0.0 0.0 -1.0 0.027652353048324585 0.6774187088012695 0 1.0 0 0.0 0 0.0 0 0.0 1.0935571193695068 0.07679951190948486 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9370168447494507 0.6683270931243896 0 1.0 0 0.0 0 0.0 0 0.0 1.0913023948669434 0.081787109375 -0.2839455306529999 0.0 0.0 -1.0 0.938151478767395 0.6743619441986084 0 1.0 0 0.0 0 0.0 0 0.0 1.1888792514801025 0.0722278356552124 -0.2839455306529999 0.0 0.0 -1.0 0.884676992893219 0.6387784481048584 0 1.0 0 0.0 0 0.0 0 0.0 0.8602306842803955 0.06933698058128357 -0.2839455306529999 0.0 0.0 -1.0 0.08631324768066406 0.644163966178894 0 1.0 0 0.0 0 0.0 0 0.0 0.8639230728149414 0.08168494701385498 -0.2839455306529999 0.0 0.0 -1.0 0.08550941944122314 0.6573827266693115 0 1.0 0 0.0 0 0.0 0 0.0 0.9634950160980225 0.08015254139900208 -0.2839455306529999 0.0 0.0 -1.0 0.027652353048324585 0.6774187088012695 0 1.0 0 0.0 0 0.0 0 0.0 0.8602306842803955 0.06933698058128357 -0.2839455306529999 0.0 0.0 -1.0 0.08631324768066406 0.644163966178894 0 1.0 0 0.0 0 0.0 0 0.0 0.9634950160980225 0.08015254139900208 -0.2839455306529999 0.0 0.0 -1.0 0.027652353048324585 0.6774187088012695 0 1.0 0 0.0 0 0.0 0 0.0 0.9613277912139893 0.0751904845237732 -0.2839455306529999 0.0 0.0 -1.0 0.028948843479156494 0.6715095043182373 0 1.0 0 0.0 0 0.0 0 0.0 1.0955345630645752 0.07152733206748962 -0.2839455306529999 0.0 0.0 -1.0 0.936097264289856 0.6619822978973389 0 1.0 0 0.0 0 0.0 0 0.0 1.0935571193695068 0.07679951190948486 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9370168447494507 0.6683270931243896 0 1.0 0 0.0 0 0.0 0 0.0 1.1888792514801025 0.0722278356552124 -0.2839455306529999 0.0 0.0 -1.0 0.884676992893219 0.6387784481048584 0 1.0 0 0.0 0 0.0 0 0.0 0.8602306842803955 0.06933698058128357 -0.2839455306529999 0.0 0.0 -1.0 0.08631324768066406 0.644163966178894 0 1.0 0 0.0 0 0.0 0 0.0 0.9613277912139893 0.0751904845237732 -0.2839455306529999 0.0 0.0 -1.0 0.028948843479156494 0.6715095043182373 0 1.0 0 0.0 0 0.0 0 0.0 0.9594573974609375 0.06999492645263672 -0.2839455306529999 0.0 0.0 -1.0 0.03002151846885681 0.6653246879577637 0 1.0 0 0.0 0 0.0 0 0.0 1.0955345630645752 0.07152733206748962 -0.2839455306529999 0.0 0.0 -1.0 0.936097264289856 0.6619822978973389 0 1.0 0 0.0 0 0.0 0 0.0 1.1888792514801025 0.0722278356552124 -0.2839455306529999 0.0 0.0 -1.0 0.884676992893219 0.6387784481048584 0 1.0 0 0.0 0 0.0 0 0.0 1.1923551559448242 0.0578269362449646 -0.2839455306529999 0.0 0.0 -1.0 0.8844856023788452 0.6234896779060364 0 1.0 0 0.0 0 0.0 0 0.0 1.0972347259521484 0.06597055494785309 -0.2839455306529999 0.0 0.0 -1.0 0.9353874921798706 0.6553221940994263 0 1.0 0 0.0 0 0.0 0 0.0 1.0955345630645752 0.07152733206748962 -0.2839455306529999 0.0 0.0 -1.0 0.936097264289856 0.6619822978973389 0 1.0 0 0.0 0 0.0 0 0.0 1.1923551559448242 0.0578269362449646 -0.2839455306529999 0.0 0.0 -1.0 0.8844856023788452 0.6234896779060364 0 1.0 0 0.0 0 0.0 0 0.0 0.8602306842803955 0.06933698058128357 -0.2839455306529999 0.0 0.0 -1.0 0.08631324768066406 0.644163966178894 0 1.0 0 0.0 0 0.0 0 0.0 0.9594573974609375 0.06999492645263672 -0.2839455306529999 0.0 0.0 -1.0 0.03002151846885681 0.6653246879577637 0 1.0 0 0.0 0 0.0 0 0.0 0.9578835964202881 0.06456585228443146 -0.2839455306529999 0.0 0.0 -1.0 0.030875861644744873 0.6588609218597412 0 1.0 0 0.0 0 0.0 0 0.0 0.8572096824645996 0.056431978940963745 -0.2839455306529999 0.0 0.0 -1.0 0.08673921227455139 0.6304571628570557 0 1.0 0 0.0 0 0.0 0 0.0 0.8602306842803955 0.06933698058128357 -0.2839455306529999 0.0 0.0 -1.0 0.08631324768066406 0.644163966178894 0 1.0 0 0.0 0 0.0 0 0.0 0.9578835964202881 0.06456585228443146 -0.2839455306529999 0.0 0.0 -1.0 0.030875861644744873 0.6588609218597412 0 1.0 0 0.0 0 0.0 0 0.0 1.0986576080322266 0.06012919545173645 -0.2839455306529999 0.0 0.0 -1.0 0.9348825812339783 0.6483409404754639 0 1.0 0 0.0 0 0.0 0 0.0 1.0972347259521484 0.06597055494785309 -0.2839455306529999 0.0 0.0 -1.0 0.9353874921798706 0.6553221940994263 0 1.0 0 0.0 0 0.0 0 0.0 1.1923551559448242 0.0578269362449646 -0.2839455306529999 0.0 0.0 -1.0 0.8844856023788452 0.6234896779060364 0 1.0 0 0.0 0 0.0 0 0.0 0.8572096824645996 0.056431978940963745 -0.2839455306529999 0.0 0.0 -1.0 0.08673921227455139 0.6304571628570557 0 1.0 0 0.0 0 0.0 0 0.0 0.9578835964202881 0.06456585228443146 -0.2839455306529999 0.0 0.0 -1.0 0.030875861644744873 0.6588609218597412 0 1.0 0 0.0 0 0.0 0 0.0 0.9566066265106201 0.058903276920318604 -0.2839455306529999 0.0 0.0 -1.0 0.031516820192337036 0.6521144509315491 0 1.0 0 0.0 0 0.0 0 0.0 1.0998032093048096 0.05400325357913971 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9345777034759521 0.6410322189331055 0 1.0 0 0.0 0 0.0 0 0.0 1.0986576080322266 0.06012919545173645 -0.2839455306529999 0.0 0.0 -1.0 0.9348825812339783 0.6483409404754639 0 1.0 0 0.0 0 0.0 0 0.0 1.1923551559448242 0.0578269362449646 -0.2839455306529999 0.0 0.0 -1.0 0.8844856023788452 0.6234896779060364 0 1.0 0 0.0 0 0.0 0 0.0 0.8572096824645996 0.056431978940963745 -0.2839455306529999 0.0 0.0 -1.0 0.08673921227455139 0.6304571628570557 0 1.0 0 0.0 0 0.0 0 0.0 0.9566066265106201 0.058903276920318604 -0.2839455306529999 0.0 0.0 -1.0 0.031516820192337036 0.6521144509315491 0 1.0 0 0.0 0 0.0 0 0.0 0.9556264877319336 0.05300718545913696 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.03194934129714966 0.64508056640625 0 1.0 0 0.0 0 0.0 0 0.0 1.0998032093048096 0.05400325357913971 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9345777034759521 0.6410322189331055 0 1.0 0 0.0 0 0.0 0 0.0 1.1923551559448242 0.0578269362449646 -0.2839455306529999 0.0 0.0 -1.0 0.8844856023788452 0.6234896779060364 0 1.0 0 0.0 0 0.0 0 0.0 1.1951353549957275 0.04261605441570282 -0.2839455306529999 0.0 0.0 -1.0 0.8846826553344727 0.6074569225311279 0 1.0 0 0.0 0 0.0 0 0.0 0.8548600673675537 0.042969971895217896 -0.2839455306529999 0.0 0.0 -1.0 0.08680680394172668 0.6162465214729309 0 1.0 0 0.0 0 0.0 0 0.0 0.8572096824645996 0.056431978940963745 -0.2839455306529999 0.0 0.0 -1.0 0.08673921227455139 0.6304571628570557 0 1.0 0 0.0 0 0.0 0 0.0 0.9556264877319336 0.05300718545913696 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.03194934129714966 0.64508056640625 0 1.0 0 0.0 0 0.0 0 0.0 1.1006715297698975 0.04759271442890167 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9344682097434998 0.6333895921707153 0 1.0 0 0.0 0 0.0 0 0.0 1.0998032093048096 0.05400325357913971 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9345777034759521 0.6410322189331055 0 1.0 0 0.0 0 0.0 0 0.0 1.1951353549957275 0.04261605441570282 -0.2839455306529999 0.0 0.0 -1.0 0.8846826553344727 0.6074569225311279 0 1.0 0 0.0 0 0.0 0 0.0 0.8548600673675537 0.042969971895217896 -0.2839455306529999 0.0 0.0 -1.0 0.08680680394172668 0.6162465214729309 0 1.0 0 0.0 0 0.0 0 0.0 0.9556264877319336 0.05300718545913696 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.03194934129714966 0.64508056640625 0 1.0 0 0.0 0 0.0 0 0.0 0.9549429416656494 0.04687759280204773 -0.2839455306529999 0.0 0.0 -1.0 0.032178282737731934 0.6377542018890381 0 1.0 0 0.0 0 0.0 0 0.0 1.1012625694274902 0.04089759290218353 -0.2839455306529999 0.0 0.0 -1.0 0.9345499277114868 0.6254070997238159 0 1.0 0 0.0 0 0.0 0 0.0 1.1006715297698975 0.04759271442890167 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9344682097434998 0.6333895921707153 0 1.0 0 0.0 0 0.0 0 0.0 1.1951353549957275 0.04261605441570282 -0.2839455306529999 0.0 0.0 -1.0 0.8846826553344727 0.6074569225311279 0 1.0 0 0.0 0 0.0 0 0.0 0.8548600673675537 0.042969971895217896 -0.2839455306529999 0.0 0.0 -1.0 0.08680680394172668 0.6162465214729309 0 1.0 0 0.0 0 0.0 0 0.0 0.9549429416656494 0.04687759280204773 -0.2839455306529999 0.0 0.0 -1.0 0.032178282737731934 0.6377542018890381 0 1.0 0 0.0 0 0.0 0 0.0 0.9545562267303467 0.04051448404788971 -0.2839455306529999 0.0 0.0 -1.0 0.032207876443862915 0.6301307082176208 0 1.0 0 0.0 0 0.0 0 0.0 0.8531818389892578 0.028950944542884827 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08653220534324646 0.6015206575393677 0 1.0 0 0.0 0 0.0 0 0.0 0.8548600673675537 0.042969971895217896 -0.2839455306529999 0.0 0.0 -1.0 0.08680680394172668 0.6162465214729309 0 1.0 0 0.0 0 0.0 0 0.0 0.9545562267303467 0.04051448404788971 -0.2839455306529999 0.0 0.0 -1.0 0.032207876443862915 0.6301307082176208 0 1.0 0 0.0 0 0.0 0 0.0 1.1012625694274902 0.04089759290218353 -0.2839455306529999 0.0 0.0 -1.0 0.9345499277114868 0.6254070997238159 0 1.0 0 0.0 0 0.0 0 0.0 1.1951353549957275 0.04261605441570282 -0.2839455306529999 0.0 0.0 -1.0 0.8846826553344727 0.6074569225311279 0 1.0 0 0.0 0 0.0 0 0.0 1.1972198486328125 0.026595190167427063 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8852506279945374 0.5906726121902466 0 1.0 0 0.0 0 0.0 0 0.0 1.101576328277588 0.0339178740978241 -0.2839455306529999 0.0 0.0 -1.0 0.9348187446594238 0.6170793771743774 0 1.0 0 0.0 0 0.0 0 0.0 1.1012625694274902 0.04089759290218353 -0.2839455306529999 0.0 0.0 -1.0 0.9345499277114868 0.6254070997238159 0 1.0 0 0.0 0 0.0 0 0.0 1.1972198486328125 0.026595190167427063 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8852506279945374 0.5906726121902466 0 1.0 0 0.0 0 0.0 0 0.0 0.8531818389892578 0.028950944542884827 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08653220534324646 0.6015206575393677 0 1.0 0 0.0 0 0.0 0 0.0 0.9545562267303467 0.04051448404788971 -0.2839455306529999 0.0 0.0 -1.0 0.032207876443862915 0.6301307082176208 0 1.0 0 0.0 0 0.0 0 0.0 0.9544661045074463 0.0339178740978241 -0.2839455306529999 0.0 0.0 -1.0 0.03204253315925598 0.6222053170204163 0 1.0 0 0.0 0 0.0 0 0.0 0.8531818389892578 0.028950944542884827 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0865322351455688 0.6015206575393677 0 1.0 0 0.0 0 0.0 0 0.0 0.9544661045074463 0.0339178740978241 -0.2839455306529999 0.0 0.0 -1.0 1.0320425033569336 0.6222053170204163 0 1.0 0 0.0 0 0.0 0 0.0 1.101576328277588 0.0339178740978241 -0.2839455306529999 0.0 0.0 -1.0 0.9348187446594238 0.6170793771743774 0 1.0 0 0.0 0 0.0 0 0.0 0.8531818389892578 0.028950944542884827 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0865322351455688 0.6015206575393677 0 1.0 0 0.0 0 0.0 0 0.0 1.101576328277588 0.0339178740978241 -0.2839455306529999 0.0 0.0 -1.0 0.9348187446594238 0.6170793771743774 0 1.0 0 0.0 0 0.0 0 0.0 1.1972198486328125 0.026595190167427063 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8852506279945374 0.5906726121902466 0 1.0 0 0.0 0 0.0 0 0.0 0.8521747589111328 0.014374911785125732 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0859289169311523 0.5862740278244019 0 1.0 0 0.0 0 0.0 0 0.0 0.8531818389892578 0.028950944542884827 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0865322351455688 0.6015206575393677 0 1.0 0 0.0 0 0.0 0 0.0 1.1972198486328125 0.026595190167427063 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8852506279945374 0.5906726121902466 0 1.0 0 0.0 0 0.0 0 0.0 0.8521747589111328 0.014374911785125732 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0859289169311523 0.5862740278244019 0 1.0 0 0.0 0 0.0 0 0.0 1.1972198486328125 0.026595190167427063 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8852506279945374 0.5906726121902466 0 1.0 0 0.0 0 0.0 0 0.0 1.198608636856079 0.009764343500137329 -0.2839455306529999 0.0 0.0 -1.0 0.886174738407135 0.5731443166732788 0 1.0 0 0.0 0 0.0 0 0.0 0.8518390655517578 -0.0007581412792205811 -0.2839455306529999 0.0 0.0 -1.0 1.085007905960083 0.5705099701881409 0 1.0 0 0.0 0 0.0 0 0.0 0.8521747589111328 0.014374911785125732 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0859289169311523 0.5862740278244019 0 1.0 0 0.0 0 0.0 0 0.0 1.198608636856079 0.009764343500137329 -0.2839455306529999 0.0 0.0 -1.0 0.886174738407135 0.5731443166732788 0 1.0 0 0.0 0 0.0 0 0.0 0.8518390655517578 -0.0007581412792205811 -0.2839455306529999 0.0 0.0 -1.0 1.085007905960083 0.5705099701881409 0 1.0 0 0.0 0 0.0 0 0.0 1.198608636856079 0.009764343500137329 -0.2839455306529999 0.0 0.0 -1.0 0.886174738407135 0.5731443166732788 0 1.0 0 0.0 0 0.0 0 0.0 1.1993017196655273 -0.007876485586166382 -0.2839455306529999 0.0 0.0 -1.0 0.8874428272247314 0.5548990964889526 0 1.0 0 0.0 0 0.0 0 0.0 0.8520944118499756 -0.013474613428115845 -0.2839455306529999 0.0 0.0 -1.0 1.0840163230895996 0.5573220252990723 0 1.0 0 0.0 0 0.0 0 0.0 0.8518390655517578 -0.0007581412792205811 -0.2839455306529999 0.0 0.0 -1.0 1.085007905960083 0.5705099701881409 0 1.0 0 0.0 0 0.0 0 0.0 1.1993017196655273 -0.007876485586166382 -0.2839455306529999 0.0 0.0 -1.0 0.8874428272247314 0.5548990964889526 0 1.0 0 0.0 0 0.0 0 0.0 0.8520944118499756 -0.013474613428115845 -0.2839455306529999 0.0 0.0 -1.0 1.0840163230895996 0.5573220252990723 0 1.0 0 0.0 0 0.0 0 0.0 1.1993017196655273 -0.007876485586166382 -0.2839455306529999 0.0 0.0 -1.0 0.8874428272247314 0.5548990964889526 0 1.0 0 0.0 0 0.0 0 0.0 1.1992995738983154 -0.026327311992645264 -0.2839455306529999 0.0 0.0 -1.0 0.8890448212623596 0.535987377166748 0 1.0 0 0.0 0 0.0 0 0.0 0.852860689163208 -0.025821372866630554 -0.2839455306529999 0.0 0.0 -1.0 1.0828447341918945 0.5445805788040161 0 1.0 0 0.0 0 0.0 0 0.0 0.8520944118499756 -0.013474613428115845 -0.2839455306529999 0.0 0.0 -1.0 1.0840163230895996 0.5573220252990723 0 1.0 0 0.0 0 0.0 0 0.0 1.1992995738983154 -0.026327311992645264 -0.2839455306529999 0.0 0.0 -1.0 0.8890448212623596 0.535987377166748 0 1.0 0 0.0 0 0.0 0 0.0 0.854137659072876 -0.03779841959476471 -0.2839455306529999 0.0 0.0 -1.0 0.08149310946464539 0.532286524772644 0 1.0 0 0.0 0 0.0 0 0.0 0.852860689163208 -0.025821372866630554 -0.2839455306529999 0.0 0.0 -1.0 0.08284473419189453 0.5445805788040161 0 1.0 0 0.0 0 0.0 0 0.0 0.9527146816253662 -0.026327311992645264 -0.2839455306529999 0.0 0.0 -1.0 0.03118249773979187 0.5487100481987 0 1.0 0 0.0 0 0.0 0 0.0 0.9527146816253662 -0.026327311992645264 -0.2839455306529999 0.0 0.0 -1.0 1.0311825275421143 0.5487100481987 0 1.0 0 0.0 0 0.0 0 0.0 0.852860689163208 -0.025821372866630554 -0.2839455306529999 0.0 0.0 -1.0 1.0828447341918945 0.5445805788040161 0 1.0 0 0.0 0 0.0 0 0.0 1.1992995738983154 -0.026327311992645264 -0.2839455306529999 0.0 0.0 -1.0 0.8890448212623596 0.535987377166748 0 1.0 0 0.0 0 0.0 0 0.0 0.854137659072876 -0.03779841959476471 -0.2839455306529999 0.0 0.0 -1.0 0.08149310946464539 0.532286524772644 0 1.0 0 0.0 0 0.0 0 0.0 0.9527146816253662 -0.026327311992645264 -0.2839455306529999 0.0 0.0 -1.0 0.03118249773979187 0.5487100481987 0 1.0 0 0.0 0 0.0 0 0.0 0.953040599822998 -0.03348945081233978 -0.2839455306529999 0.0 0.0 -1.0 0.03077256679534912 0.540071964263916 0 1.0 0 0.0 0 0.0 0 0.0 0.854137659072876 -0.03779841959476471 -0.2839455306529999 0.0 0.0 -1.0 0.08149310946464539 0.532286524772644 0 1.0 0 0.0 0 0.0 0 0.0 0.953040599822998 -0.03348945081233978 -0.2839455306529999 0.0 0.0 -1.0 0.03077256679534912 0.540071964263916 0 1.0 0 0.0 0 0.0 0 0.0 0.9536681175231934 -0.040381595492362976 -0.2839455306529999 0.0 0.0 -1.0 0.03019922971725464 0.5318121910095215 0 1.0 0 0.0 0 0.0 0 0.0 0.8559255599975586 -0.04940573871135712 -0.2839455306529999 0.0 0.0 -1.0 0.07996010780334473 0.5204365253448486 0 1.0 0 0.0 0 0.0 0 0.0 0.854137659072876 -0.03779841959476471 -0.2839455306529999 0.0 0.0 -1.0 0.08149310946464539 0.532286524772644 0 1.0 0 0.0 0 0.0 0 0.0 0.9536681175231934 -0.040381595492362976 -0.2839455306529999 0.0 0.0 -1.0 0.03019922971725464 0.5318121910095215 0 1.0 0 0.0 0 0.0 0 0.0 0.8559255599975586 -0.04940573871135712 -0.2839455306529999 0.0 0.0 -1.0 0.07996010780334473 0.5204365253448486 0 1.0 0 0.0 0 0.0 0 0.0 0.9536681175231934 -0.040381595492362976 -0.2839455306529999 0.0 0.0 -1.0 0.03019922971725464 0.5318121910095215 0 1.0 0 0.0 0 0.0 0 0.0 0.9545972347259521 -0.047003746032714844 -0.2839455306529999 0.0 0.0 -1.0 0.029464364051818848 0.5239272117614746 0 1.0 0 0.0 0 0.0 0 0.0 0.8559255599975586 -0.04940573871135712 -0.2839455306529999 0.0 0.0 -1.0 0.07996010780334473 0.5204365253448486 0 1.0 0 0.0 0 0.0 0 0.0 0.9545972347259521 -0.047003746032714844 -0.2839455306529999 0.0 0.0 -1.0 0.029464364051818848 0.5239272117614746 0 1.0 0 0.0 0 0.0 0 0.0 0.9558279514312744 -0.053355902433395386 -0.2839455306529999 0.0 0.0 -1.0 0.028569430112838745 0.5164120197296143 0 1.0 0 0.0 0 0.0 0 0.0 0.8582241535186768 -0.06064333766698837 -0.2839455306529999 0.0 0.0 -1.0 0.07824346423149109 0.5090236663818359 0 1.0 0 0.0 0 0.0 0 0.0 0.8559255599975586 -0.04940573871135712 -0.2839455306529999 0.0 0.0 -1.0 0.07996010780334473 0.5204365253448486 0 1.0 0 0.0 0 0.0 0 0.0 0.9558279514312744 -0.053355902433395386 -0.2839455306529999 0.0 0.0 -1.0 0.028569430112838745 0.5164120197296143 0 1.0 0 0.0 0 0.0 0 0.0 0.8582241535186768 -0.06064333766698837 -0.2839455306529999 0.0 0.0 -1.0 0.07824346423149109 0.5090236663818359 0 1.0 0 0.0 0 0.0 0 0.0 0.9558279514312744 -0.053355902433395386 -0.2839455306529999 0.0 0.0 -1.0 0.028569430112838745 0.5164120197296143 0 1.0 0 0.0 0 0.0 0 0.0 0.9573602676391602 -0.0594380721449852 -0.2839455306529999 0.0 0.0 -1.0 0.027515262365341187 0.5092605352401733 0 1.0 0 0.0 0 0.0 0 0.0 0.8582241535186768 -0.06064333766698837 -0.2839455306529999 0.0 0.0 -1.0 0.07824346423149109 0.5090236663818359 0 1.0 0 0.0 0 0.0 0 0.0 0.9573602676391602 -0.0594380721449852 -0.2839455306529999 0.0 0.0 -1.0 0.027515262365341187 0.5092605352401733 0 1.0 0 0.0 0 0.0 0 0.0 0.9591941833496094 -0.06525024771690369 -0.2839455306529999 0.0 0.0 -1.0 0.026302307844161987 0.5024663209915161 0 1.0 0 0.0 0 0.0 0 0.0 0.8610334396362305 -0.07151120901107788 -0.2839455306529999 0.0 0.0 -1.0 0.07633981108665466 0.4980389475822449 0 1.0 0 0.0 0 0.0 0 0.0 0.8582241535186768 -0.06064333766698837 -0.2839455306529999 0.0 0.0 -1.0 0.07824346423149109 0.5090236663818359 0 1.0 0 0.0 0 0.0 0 0.0 0.9591941833496094 -0.06525024771690369 -0.2839455306529999 0.0 0.0 -1.0 0.026302307844161987 0.5024663209915161 0 1.0 0 0.0 0 0.0 0 0.0 0.8610334396362305 -0.07151120901107788 -0.2839455306529999 0.0 0.0 -1.0 0.07633981108665466 0.4980389475822449 0 1.0 0 0.0 0 0.0 0 0.0 0.9591941833496094 -0.06525024771690369 -0.2839455306529999 0.0 0.0 -1.0 0.026302307844161987 0.5024663209915161 0 1.0 0 0.0 0 0.0 0 0.0 0.9613299369812012 -0.07079242914915085 -0.2839455306529999 0.0 0.0 -1.0 0.02493041753768921 0.4960223436355591 0 1.0 0 0.0 0 0.0 0 0.0 1.094576120376587 -0.07011988759040833 -0.2839455306529999 0.0 0.0 -1.0 0.9450085163116455 0.49344611167907715 0 1.0 0 0.0 0 0.0 0 0.0 1.0959722995758057 -0.06555674225091934 -0.2839455306529999 0.0 0.0 -1.0 0.9439747929573059 0.4986279010772705 0 1.0 0 0.0 0 0.0 0 0.0 1.1940457820892334 -0.08201909065246582 -0.2839455306529999 0.0 0.0 -1.0 0.895880401134491 0.4805034399032593 0 1.0 0 0.0 0 0.0 0 0.0 1.0930728912353516 -0.07446898519992828 -0.2839455306529999 0.0 0.0 -1.0 0.946087121963501 0.488539457321167 0 1.0 0 0.0 0 0.0 0 0.0 1.094576120376587 -0.07011988759040833 -0.2839455306529999 0.0 0.0 -1.0 0.9450085163116455 0.49344611167907715 0 1.0 0 0.0 0 0.0 0 0.0 1.1940457820892334 -0.08201909065246582 -0.2839455306529999 0.0 0.0 -1.0 0.895880401134491 0.4805034399032593 0 1.0 0 0.0 0 0.0 0 0.0 0.8610334396362305 -0.07151120901107788 -0.2839455306529999 0.0 0.0 -1.0 0.07633981108665466 0.4980389475822449 0 1.0 0 0.0 0 0.0 0 0.0 0.9613299369812012 -0.07079242914915085 -0.2839455306529999 0.0 0.0 -1.0 0.02493041753768921 0.4960223436355591 0 1.0 0 0.0 0 0.0 0 0.0 0.9637672901153564 -0.07606461644172668 -0.2839455306529999 0.0 0.0 -1.0 0.023399382829666138 0.4899216294288635 0 1.0 0 0.0 0 0.0 0 0.0 0.8643536567687988 -0.08200936019420624 -0.2839455306529999 0.0 0.0 -1.0 0.07424464821815491 0.48747164011001587 0 1.0 0 0.0 0 0.0 0 0.0 0.8610334396362305 -0.07151120901107788 -0.2839455306529999 0.0 0.0 -1.0 0.07633981108665466 0.4980389475822449 0 1.0 0 0.0 0 0.0 0 0.0 0.9637672901153564 -0.07606461644172668 -0.2839455306529999 0.0 0.0 -1.0 0.023399382829666138 0.4899216294288635 0 1.0 0 0.0 0 0.0 0 0.0 1.0914626121520996 -0.07860402762889862 -0.2839455306529999 0.0 0.0 -1.0 0.9472108483314514 0.48390400409698486 0 1.0 0 0.0 0 0.0 0 0.0 1.0930728912353516 -0.07446898519992828 -0.2839455306529999 0.0 0.0 -1.0 0.946087121963501 0.488539457321167 0 1.0 0 0.0 0 0.0 0 0.0 1.1940457820892334 -0.08201909065246582 -0.2839455306529999 0.0 0.0 -1.0 0.895880401134491 0.4805034399032593 0 1.0 0 0.0 0 0.0 0 0.0 0.8643536567687988 -0.08200936019420624 -0.2839455306529999 0.0 0.0 -1.0 0.07424464821815491 0.48747164011001587 0 1.0 0 0.0 0 0.0 0 0.0 0.9637672901153564 -0.07606461644172668 -0.2839455306529999 0.0 0.0 -1.0 0.023399382829666138 0.4899216294288635 0 1.0 0 0.0 0 0.0 0 0.0 0.9665062427520752 -0.0810668095946312 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.021708518266677856 0.4841575026512146 0 1.0 0 0.0 0 0.0 0 0.0 1.089745283126831 -0.08252502232789993 -0.2839455306529999 0.0 0.0 -1.0 0.9483804702758789 0.47953569889068604 0 1.0 0 0.0 0 0.0 0 0.0 1.0914626121520996 -0.07860402762889862 -0.2839455306529999 0.0 0.0 -1.0 0.9472108483314514 0.48390400409698486 0 1.0 0 0.0 0 0.0 0 0.0 1.1940457820892334 -0.08201909065246582 -0.2839455306529999 0.0 0.0 -1.0 0.895880401134491 0.4805034399032593 0 1.0 0 0.0 0 0.0 0 0.0 0.8643536567687988 -0.08200936019420624 -0.2839455306529999 0.0 0.0 -1.0 0.07424464821815491 0.48747164011001587 0 1.0 0 0.0 0 0.0 0 0.0 0.9665062427520752 -0.0810668095946312 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.021708518266677856 0.4841575026512146 0 1.0 0 0.0 0 0.0 0 0.0 0.9695467948913574 -0.08579900860786438 -0.2839455306529999 0.0 0.0 -1.0 0.019856750965118408 0.47872352600097656 0 1.0 0 0.0 0 0.0 0 0.0 0.8681845664978027 -0.09213779121637344 -0.2839455306529999 0.0 0.0 -1.0 0.07195284962654114 0.4773102402687073 0 1.0 0 0.0 0 0.0 0 0.0 0.8643536567687988 -0.08200936019420624 -0.2839455306529999 0.0 0.0 -1.0 0.07424464821815491 0.48747164011001587 0 1.0 0 0.0 0 0.0 0 0.0 0.9695467948913574 -0.08579900860786438 -0.2839455306529999 0.0 0.0 -1.0 0.019856750965118408 0.47872352600097656 0 1.0 0 0.0 0 0.0 0 0.0 1.089745283126831 -0.08252502232789993 -0.2839455306529999 0.0 0.0 -1.0 0.9483804702758789 0.47953569889068604 0 1.0 0 0.0 0 0.0 0 0.0 1.1940457820892334 -0.08201909065246582 -0.2839455306529999 0.0 0.0 -1.0 0.895880401134491 0.4805034399032593 0 1.0 0 0.0 0 0.0 0 0.0 1.1907413005828857 -0.09083038568496704 -0.2839455306529999 0.0 0.0 -1.0 0.8979910612106323 0.4719502925872803 0 1.0 0 0.0 0 0.0 0 0.0 1.087920904159546 -0.08623196929693222 -0.2839455306529999 0.0 0.0 -1.0 0.9495965242385864 0.47543054819107056 0 1.0 0 0.0 0 0.0 0 0.0 1.089745283126831 -0.08252502232789993 -0.2839455306529999 0.0 0.0 -1.0 0.9483804702758789 0.47953569889068604 0 1.0 0 0.0 0 0.0 0 0.0 1.1907413005828857 -0.09083038568496704 -0.2839455306529999 0.0 0.0 -1.0 0.8979910612106323 0.4719502925872803 0 1.0 0 0.0 0 0.0 0 0.0 0.8681845664978027 -0.09213779121637344 -0.2839455306529999 0.0 0.0 -1.0 0.07195284962654114 0.4773102402687073 0 1.0 0 0.0 0 0.0 0 0.0 0.9695467948913574 -0.08579900860786438 -0.2839455306529999 0.0 0.0 -1.0 0.019856750965118408 0.47872352600097656 0 1.0 0 0.0 0 0.0 0 0.0 0.9728889465332031 -0.09026120603084564 -0.2839455306529999 0.0 0.0 -1.0 0.01784294843673706 0.4736138582229614 0 1.0 0 0.0 0 0.0 0 0.0 1.0859894752502441 -0.08972486853599548 -0.2839455306529999 0.0 0.0 -1.0 0.9508596658706665 0.4715844988822937 0 1.0 0 0.0 0 0.0 0 0.0 1.087920904159546 -0.08623196929693222 -0.2839455306529999 0.0 0.0 -1.0 0.9495965242385864 0.47543054819107056 0 1.0 0 0.0 0 0.0 0 0.0 1.1907413005828857 -0.09083038568496704 -0.2839455306529999 0.0 0.0 -1.0 0.8979910612106323 0.4719502925872803 0 1.0 0 0.0 0 0.0 0 0.0 1.0839512348175049 -0.09300372004508972 -0.2839455306529999 0.0 0.0 -1.0 0.9521704912185669 0.46799367666244507 0 1.0 0 0.0 0 0.0 0 0.0 1.0859894752502441 -0.08972486853599548 -0.2839455306529999 0.0 0.0 -1.0 0.9508596658706665 0.4715844988822937 0 1.0 0 0.0 0 0.0 0 0.0 1.1907413005828857 -0.09083038568496704 -0.2839455306529999 0.0 0.0 -1.0 0.8979910612106323 0.4719502925872803 0 1.0 0 0.0 0 0.0 0 0.0 0.8681845664978027 -0.09213779121637344 -0.2839455306529999 0.0 0.0 -1.0 0.07195284962654114 0.4773102402687073 0 1.0 0 0.0 0 0.0 0 0.0 0.9728889465332031 -0.09026120603084564 -0.2839455306529999 0.0 0.0 -1.0 0.01784294843673706 0.4736138582229614 0 1.0 0 0.0 0 0.0 0 0.0 0.9765326976776123 -0.09445341676473618 -0.2839455306529999 0.0 0.0 -1.0 0.015665769577026367 0.4688234329223633 0 1.0 0 0.0 0 0.0 0 0.0 1.0839512348175049 -0.09300372004508972 -0.2839455306529999 0.0 0.0 -1.0 0.9521704912185669 0.46799367666244507 0 1.0 0 0.0 0 0.0 0 0.0 1.1907413005828857 -0.09083038568496704 -0.2839455306529999 0.0 0.0 -1.0 0.8979910612106323 0.4719502925872803 0 1.0 0 0.0 0 0.0 0 0.0 1.1871328353881836 -0.09928411990404129 -0.2839455306529999 0.0 0.0 -1.0 0.9002060294151306 0.4637722969055176 0 1.0 0 0.0 0 0.0 0 0.0 0.8725264072418213 -0.1018965020775795 -0.2839455306529999 0.0 0.0 -1.0 0.06945812702178955 0.4675431251525879 0 1.0 0 0.0 0 0.0 0 0.0 0.8681845664978027 -0.09213779121637344 -0.2839455306529999 0.0 0.0 -1.0 0.07195284962654114 0.4773102402687073 0 1.0 0 0.0 0 0.0 0 0.0 0.9765326976776123 -0.09445341676473618 -0.2839455306529999 0.0 0.0 -1.0 0.015665769577026367 0.4688234329223633 0 1.0 0 0.0 0 0.0 0 0.0 1.081805944442749 -0.09606851637363434 -0.2839455306529999 0.0 0.0 -1.0 0.9535298347473145 0.46465450525283813 0 1.0 0 0.0 0 0.0 0 0.0 1.0839512348175049 -0.09300372004508972 -0.2839455306529999 0.0 0.0 -1.0 0.9521704912185669 0.46799367666244507 0 1.0 0 0.0 0 0.0 0 0.0 1.1871328353881836 -0.09928411990404129 -0.2839455306529999 0.0 0.0 -1.0 0.9002060294151306 0.4637722969055176 0 1.0 0 0.0 0 0.0 0 0.0 0.8725264072418213 -0.1018965020775795 -0.2839455306529999 0.0 0.0 -1.0 0.06945812702178955 0.4675431251525879 0 1.0 0 0.0 0 0.0 0 0.0 0.9765326976776123 -0.09445341676473618 -0.2839455306529999 0.0 0.0 -1.0 0.015665769577026367 0.4688234329223633 0 1.0 0 0.0 0 0.0 0 0.0 0.9804050922393799 -0.09834157675504684 -0.2839455306529999 0.0 0.0 -1.0 0.013366401195526123 0.464388370513916 0 1.0 0 0.0 0 0.0 0 0.0 1.0795536041259766 -0.09891926497220993 -0.2839455306529999 0.0 0.0 -1.0 0.954938530921936 0.4615635275840759 0 1.0 0 0.0 0 0.0 0 0.0 1.081805944442749 -0.09606851637363434 -0.2839455306529999 0.0 0.0 -1.0 0.9535298347473145 0.46465450525283813 0 1.0 0 0.0 0 0.0 0 0.0 1.1871328353881836 -0.09928411990404129 -0.2839455306529999 0.0 0.0 -1.0 0.9002060294151306 0.4637722969055176 0 1.0 0 0.0 0 0.0 0 0.0 0.8725264072418213 -0.1018965020775795 -0.2839455306529999 0.0 0.0 -1.0 0.06945812702178955 0.4675431251525879 0 1.0 0 0.0 0 0.0 0 0.0 0.9804050922393799 -0.09834157675504684 -0.2839455306529999 0.0 0.0 -1.0 0.013366401195526123 0.464388370513916 0 1.0 0 0.0 0 0.0 0 0.0 0.9844331741333008 -0.10189163684844971 -0.2839455306529999 0.0 0.0 -1.0 0.010986119508743286 0.46034443378448486 0 1.0 0 0.0 0 0.0 0 0.0 1.0771942138671875 -0.1015559658408165 -0.2839455306529999 0.0 0.0 -1.0 0.9563973546028137 0.4587175250053406 0 1.0 0 0.0 0 0.0 0 0.0 1.0795536041259766 -0.09891926497220993 -0.2839455306529999 0.0 0.0 -1.0 0.954938530921936 0.4615635275840759 0 1.0 0 0.0 0 0.0 0 0.0 1.1871328353881836 -0.09928411990404129 -0.2839455306529999 0.0 0.0 -1.0 0.9002060294151306 0.4637722969055176 0 1.0 0 0.0 0 0.0 0 0.0 1.0771942138671875 -0.1015559658408165 -0.2839455306529999 0.0 0.0 -1.0 0.9563973546028137 0.4587175250053406 0 1.0 0 0.0 0 0.0 0 0.0 1.1871328353881836 -0.09928411990404129 -0.2839455306529999 0.0 0.0 -1.0 0.9002060294151306 0.4637722969055176 0 1.0 0 0.0 0 0.0 0 0.0 1.183220386505127 -0.10738029330968857 -0.2839455306529999 0.0 0.0 -1.0 0.9025294780731201 0.45596277713775635 0 1.0 0 0.0 0 0.0 0 0.0 1.0747277736663818 -0.10397861897945404 -0.2839455306529999 0.0 0.0 -1.0 0.9579070806503296 0.4561135172843933 0 1.0 0 0.0 0 0.0 0 0.0 1.0771942138671875 -0.1015559658408165 -0.2839455306529999 0.0 0.0 -1.0 0.9563973546028137 0.4587175250053406 0 1.0 0 0.0 0 0.0 0 0.0 1.183220386505127 -0.10738029330968857 -0.2839455306529999 0.0 0.0 -1.0 0.9025294780731201 0.45596277713775635 0 1.0 0 0.0 0 0.0 0 0.0 0.8725264072418213 -0.1018965020775795 -0.2839455306529999 0.0 0.0 -1.0 0.06945812702178955 0.4675431251525879 0 1.0 0 0.0 0 0.0 0 0.0 0.9844331741333008 -0.10189163684844971 -0.2839455306529999 0.0 0.0 -1.0 0.010986119508743286 0.46034443378448486 0 1.0 0 0.0 0 0.0 0 0.0 0.988616943359375 -0.10510359704494476 -0.2839455306529999 0.0 0.0 -1.0 0.008523315191268921 0.4566870927810669 0 1.0 0 0.0 0 0.0 0 0.0 0.8773789405822754 -0.1112854853272438 -0.2839455306529999 0.0 0.0 -1.0 0.06675374507904053 0.4581591486930847 0 1.0 0 0.0 0 0.0 0 0.0 0.8725264072418213 -0.1018965020775795 -0.2839455306529999 0.0 0.0 -1.0 0.06945812702178955 0.4675431251525879 0 1.0 0 0.0 0 0.0 0 0.0 0.988616943359375 -0.10510359704494476 -0.2839455306529999 0.0 0.0 -1.0 0.008523315191268921 0.4566870927810669 0 1.0 0 0.0 0 0.0 0 0.0 1.0721542835235596 -0.10618721693754196 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9594686031341553 0.4537491202354431 0 1.0 0 0.0 0 0.0 0 0.0 1.0747277736663818 -0.10397861897945404 -0.2839455306529999 0.0 0.0 -1.0 0.9579070806503296 0.4561135172843933 0 1.0 0 0.0 0 0.0 0 0.0 1.183220386505127 -0.10738029330968857 -0.2839455306529999 0.0 0.0 -1.0 0.9025294780731201 0.45596277713775635 0 1.0 0 0.0 0 0.0 0 0.0 0.8773789405822754 -0.1112854853272438 -0.2839455306529999 0.0 0.0 -1.0 0.06675374507904053 0.4581591486930847 0 1.0 0 0.0 0 0.0 0 0.0 0.988616943359375 -0.10510359704494476 -0.2839455306529999 0.0 0.0 -1.0 0.008523315191268921 0.4566870927810669 0 1.0 0 0.0 0 0.0 0 0.0 0.9929563999176025 -0.10797744989395142 -0.2839455306529999 0.0 0.0 -1.0 0.0059764087200164795 0.45341217517852783 0 1.0 0 0.0 0 0.0 0 0.0 1.06947660446167 -0.10820123553276062 -0.2839455306529999 0.0 0.0 -1.0 0.9610819220542908 0.45160144567489624 0 1.0 0 0.0 0 0.0 0 0.0 1.0721542835235596 -0.10618721693754196 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9594686031341553 0.4537491202354431 0 1.0 0 0.0 0 0.0 0 0.0 1.183220386505127 -0.10738029330968857 -0.2839455306529999 0.0 0.0 -1.0 0.9025294780731201 0.45596277713775635 0 1.0 0 0.0 0 0.0 0 0.0 1.06947660446167 -0.10820123553276062 -0.2839455306529999 0.0 0.0 -1.0 0.9610819220542908 0.45160144567489624 0 1.0 0 0.0 0 0.0 0 0.0 1.183220386505127 -0.10738029330968857 -0.2839455306529999 0.0 0.0 -1.0 0.9025294780731201 0.45596277713775635 0 1.0 0 0.0 0 0.0 0 0.0 1.1790039539337158 -0.11511890590190887 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9049659967422485 0.44851458072662354 0 1.0 0 0.0 0 0.0 0 0.0 0.8773789405822754 -0.1112854853272438 -0.2839455306529999 0.0 0.0 -1.0 0.06675374507904053 0.4581591486930847 0 1.0 0 0.0 0 0.0 0 0.0 0.9929563999176025 -0.10797744989395142 -0.2839455306529999 0.0 0.0 -1.0 0.0059764087200164795 0.45341217517852783 0 1.0 0 0.0 0 0.0 0 0.0 0.9974515438079834 -0.11051320284605026 -0.2839455306529999 0.0 0.0 -1.0 0.0033438801765441895 0.4505161643028259 0 1.0 0 0.0 0 0.0 0 0.0 1.0666964054107666 -0.11004011332988739 -0.2839455306529999 0.0 0.0 -1.0 0.9627474546432495 0.44964832067489624 0 1.0 0 0.0 0 0.0 0 0.0 1.06947660446167 -0.10820123553276062 -0.2839455306529999 0.0 0.0 -1.0 0.9610819220542908 0.45160144567489624 0 1.0 0 0.0 0 0.0 0 0.0 1.1790039539337158 -0.11511890590190887 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9049659967422485 0.44851458072662354 0 1.0 0 0.0 0 0.0 0 0.0 1.0638139247894287 -0.11170385777950287 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.964465856552124 0.44788867235183716 0 1.0 0 0.0 0 0.0 0 0.0 1.0666964054107666 -0.11004011332988739 -0.2839455306529999 0.0 0.0 -1.0 0.9627474546432495 0.44964832067489624 0 1.0 0 0.0 0 0.0 0 0.0 1.1790039539337158 -0.11511890590190887 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9049659967422485 0.44851458072662354 0 1.0 0 0.0 0 0.0 0 0.0 0.8773789405822754 -0.1112854853272438 -0.2839455306529999 0.0 0.0 -1.0 0.06675374507904053 0.4581591486930847 0 1.0 0 0.0 0 0.0 0 0.0 0.9974515438079834 -0.11051320284605026 -0.2839455306529999 0.0 0.0 -1.0 0.0033438801765441895 0.4505161643028259 0 1.0 0 0.0 0 0.0 0 0.0 1.0021021366119385 -0.1127108559012413 -0.2839455306529999 0.0 0.0 -1.0 0.0006244778633117676 0.4479961395263672 0 1.0 0 0.0 0 0.0 0 0.0 0.8827424049377441 -0.12030474841594696 -0.2839455306529999 0.0 0.0 -1.0 0.06383192539215088 0.4491479992866516 0 1.0 0 0.0 0 0.0 0 0.0 0.8773789405822754 -0.1112854853272438 -0.2839455306529999 0.0 0.0 -1.0 0.06675374507904053 0.4581591486930847 0 1.0 0 0.0 0 0.0 0 0.0 1.0021021366119385 -0.1127108559012413 -0.2839455306529999 0.0 0.0 -1.0 0.0006244778633117676 0.4479961395263672 0 1.0 0 0.0 0 0.0 0 0.0 1.0608294010162354 -0.11319247633218765 -0.2839455306529999 0.0 0.0 -1.0 0.9662376642227173 0.44632160663604736 0 1.0 0 0.0 0 0.0 0 0.0 1.0638139247894287 -0.11170385777950287 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.964465856552124 0.44788867235183716 0 1.0 0 0.0 0 0.0 0 0.0 1.1790039539337158 -0.11511890590190887 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9049659967422485 0.44851458072662354 0 1.0 0 0.0 0 0.0 0 0.0 0.8827424049377441 -0.12030474841594696 -0.2839455306529999 0.0 0.0 -1.0 1.0638319253921509 0.4491479992866516 0 1.0 0 0.0 0 0.0 0 0.0 1.0021021366119385 -0.1127108559012413 -0.2839455306529999 0.0 0.0 -1.0 1.000624418258667 0.4479961395263672 0 1.0 0 0.0 0 0.0 0 0.0 1.0069084167480469 -0.11457040905952454 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9978166818618774 0.4458499550819397 0 1.0 0 0.0 0 0.0 0 0.0 1.0577425956726074 -0.11450596153736115 -0.2839455306529999 0.0 0.0 -1.0 0.9680637121200562 0.4449465274810791 0 1.0 0 0.0 0 0.0 0 0.0 1.0608294010162354 -0.11319247633218765 -0.2839455306529999 0.0 0.0 -1.0 0.9662376642227173 0.44632160663604736 0 1.0 0 0.0 0 0.0 0 0.0 1.1790039539337158 -0.11511890590190887 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9049659967422485 0.44851458072662354 0 1.0 0 0.0 0 0.0 0 0.0 1.054553747177124 -0.11564431339502335 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.9699445366859436 0.44376295804977417 0 1.0 0 0.0 0 0.0 0 0.0 1.0577425956726074 -0.11450596153736115 -0.2839455306529999 0.0 0.0 -1.0 0.9680637121200562 0.4449465274810791 0 1.0 0 0.0 0 0.0 0 0.0 1.1790039539337158 -0.11511890590190887 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9049659967422485 0.44851458072662354 0 1.0 0 0.0 0 0.0 0 0.0 0.8827424049377441 -0.12030474841594696 -0.2839455306529999 0.0 0.0 -1.0 1.0638319253921509 0.4491479992866516 0 1.0 0 0.0 0 0.0 0 0.0 1.0069084167480469 -0.11457040905952454 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9978166818618774 0.4458499550819397 0 1.0 0 0.0 0 0.0 0 0.0 1.0118703842163086 -0.11609186232089996 -0.2839455306529999 0.0 0.0 -1.0 0.9949193596839905 0.4440760612487793 0 1.0 0 0.0 0 0.0 0 0.0 1.054553747177124 -0.11564431339502335 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.9699445366859436 0.44376295804977417 0 1.0 0 0.0 0 0.0 0 0.0 1.1790039539337158 -0.11511890590190887 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9049659967422485 0.44851458072662354 0 1.0 0 0.0 0 0.0 0 0.0 1.174483299255371 -0.12249995768070221 -0.2839455306529999 0.0 0.0 -1.0 0.9075202941894531 0.4414207935333252 0 1.0 0 0.0 0 0.0 0 0.0 1.051262617111206 -0.11660753190517426 -0.2839455306529999 0.0 0.0 -1.0 0.9718810319900513 0.44277089834213257 0 1.0 0 0.0 0 0.0 0 0.0 1.054553747177124 -0.11564431339502335 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.9699445366859436 0.44376295804977417 0 1.0 0 0.0 0 0.0 0 0.0 1.174483299255371 -0.12249995768070221 -0.2839455306529999 0.0 0.0 -1.0 0.9075202941894531 0.4414207935333252 0 1.0 0 0.0 0 0.0 0 0.0 0.8827424049377441 -0.12030474841594696 -0.2839455306529999 0.0 0.0 -1.0 1.0638319253921509 0.4491479992866516 0 1.0 0 0.0 0 0.0 0 0.0 1.0118703842163086 -0.11609186232089996 -0.2839455306529999 0.0 0.0 -1.0 0.9949193596839905 0.4440760612487793 0 1.0 0 0.0 0 0.0 0 0.0 1.0169880390167236 -0.11727521568536758 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9919314384460449 0.4426735043525696 0 1.0 0 0.0 0 0.0 0 0.0 1.0478694438934326 -0.11739562451839447 -0.2839455306529999 0.0 0.0 -1.0 0.9738736152648926 0.4419704079627991 0 1.0 0 0.0 0 0.0 0 0.0 1.051262617111206 -0.11660753190517426 -0.2839455306529999 0.0 0.0 -1.0 0.9718810319900513 0.44277089834213257 0 1.0 0 0.0 0 0.0 0 0.0 1.174483299255371 -0.12249995768070221 -0.2839455306529999 0.0 0.0 -1.0 0.9075202941894531 0.4414207935333252 0 1.0 0 0.0 0 0.0 0 0.0 0.8827424049377441 -0.12030474841594696 -0.2839455306529999 0.0 0.0 -1.0 1.0638319253921509 0.4491479992866516 0 1.0 0 0.0 0 0.0 0 0.0 1.0169880390167236 -0.11727521568536758 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9919314384460449 0.4426735043525696 0 1.0 0 0.0 0 0.0 0 0.0 1.022261381149292 -0.1181204691529274 -0.2839455306529999 0.0 0.0 -1.0 0.9888521432876587 0.4416421055793762 0 1.0 0 0.0 0 0.0 0 0.0 1.0443739891052246 -0.1180085837841034 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9759230017662048 0.44136184453964233 0 1.0 0 0.0 0 0.0 0 0.0 1.0478694438934326 -0.11739562451839447 -0.2839455306529999 0.0 0.0 -1.0 0.9738736152648926 0.4419704079627991 0 1.0 0 0.0 0 0.0 0 0.0 1.174483299255371 -0.12249995768070221 -0.2839455306529999 0.0 0.0 -1.0 0.9075202941894531 0.4414207935333252 0 1.0 0 0.0 0 0.0 0 0.0 1.0407764911651611 -0.11844640970230103 -0.2839455306529999 0.0 0.0 -1.0 0.978029727935791 0.44094574451446533 0 1.0 0 0.0 0 0.0 0 0.0 1.0443739891052246 -0.1180085837841034 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9759230017662048 0.44136184453964233 0 1.0 0 0.0 0 0.0 0 0.0 1.174483299255371 -0.12249995768070221 -0.2839455306529999 0.0 0.0 -1.0 0.9075202941894531 0.4414207935333252 0 1.0 0 0.0 0 0.0 0 0.0 0.8827424049377441 -0.12030474841594696 -0.2839455306529999 0.0 0.0 -1.0 1.0638319253921509 0.4491479992866516 0 1.0 0 0.0 0 0.0 0 0.0 1.022261381149292 -0.1181204691529274 -0.2839455306529999 0.0 0.0 -1.0 0.9888521432876587 0.4416421055793762 0 1.0 0 0.0 0 0.0 0 0.0 1.0276904106140137 -0.1186276227235794 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9856808185577393 0.4409821033477783 0 1.0 0 0.0 0 0.0 0 0.0 1.0370769500732422 -0.11870910972356796 -0.2839455306529999 0.0 0.0 -1.0 0.9801942110061646 0.4407229423522949 0 1.0 0 0.0 0 0.0 0 0.0 1.0407764911651611 -0.11844640970230103 -0.2839455306529999 0.0 0.0 -1.0 0.978029727935791 0.44094574451446533 0 1.0 0 0.0 0 0.0 0 0.0 1.174483299255371 -0.12249995768070221 -0.2839455306529999 0.0 0.0 -1.0 0.9075202941894531 0.4414207935333252 0 1.0 0 0.0 0 0.0 0 0.0 0.8827424049377441 -0.12030474841594696 -0.2839455306529999 0.0 0.0 -1.0 1.0638319253921509 0.4491479992866516 0 1.0 0 0.0 0 0.0 0 0.0 1.0276904106140137 -0.1186276227235794 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9856808185577393 0.4409821033477783 0 1.0 0 0.0 0 0.0 0 0.0 1.0332751274108887 -0.11879667639732361 -0.2839455306529999 0.0 0.0 -1.0 0.982417106628418 0.4406943917274475 0 1.0 0 0.0 0 0.0 0 0.0 1.0332751274108887 -0.11879667639732361 -0.2839455306529999 0.0 0.0 -1.0 0.982417106628418 0.4406943917274475 0 1.0 0 0.0 0 0.0 0 0.0 1.0370769500732422 -0.11870910972356796 -0.2839455306529999 0.0 0.0 -1.0 0.9801942110061646 0.4407229423522949 0 1.0 0 0.0 0 0.0 0 0.0 1.174483299255371 -0.12249995768070221 -0.2839455306529999 0.0 0.0 -1.0 0.9075202941894531 0.4414207935333252 0 1.0 0 0.0 0 0.0 0 0.0 0.8827424049377441 -0.12030474841594696 -0.2839455306529999 0.0 0.0 -1.0 1.0638319253921509 0.4491479992866516 0 1.0 0 0.0 0 0.0 0 0.0 1.0332751274108887 -0.11879667639732361 -0.2839455306529999 0.0 0.0 -1.0 0.982417106628418 0.4406943917274475 0 1.0 0 0.0 0 0.0 0 0.0 1.174483299255371 -0.12249995768070221 -0.2839455306529999 0.0 0.0 -1.0 0.9075202941894531 0.4414207935333252 0 1.0 0 0.0 0 0.0 0 0.0 0.8886165618896484 -0.12895429134368896 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0606844425201416 0.4405009150505066 0 1.0 0 0.0 0 0.0 0 0.0 0.8827424049377441 -0.12030474841594696 -0.2839455306529999 0.0 0.0 -1.0 1.0638319253921509 0.4491479992866516 0 1.0 0 0.0 0 0.0 0 0.0 1.174483299255371 -0.12249995768070221 -0.2839455306529999 0.0 0.0 -1.0 0.9075202941894531 0.4414207935333252 0 1.0 0 0.0 0 0.0 0 0.0 0.8886165618896484 -0.12895429134368896 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0606844425201416 0.4405009150505066 0 1.0 0 0.0 0 0.0 0 0.0 1.174483299255371 -0.12249995768070221 -0.2839455306529999 0.0 0.0 -1.0 0.9075202941894531 0.4414207935333252 0 1.0 0 0.0 0 0.0 0 0.0 1.1696586608886719 -0.12952345609664917 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9101971983909607 0.4346746802330017 0 1.0 0 0.0 0 0.0 0 0.0 0.896730899810791 -0.13908028602600098 -0.2839455306529999 0.0 0.0 -1.0 1.0564019680023193 0.43033796548843384 0 1.0 0 0.0 0 0.0 0 0.0 0.8886165618896484 -0.12895429134368896 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0606844425201416 0.4405009150505066 0 1.0 0 0.0 0 0.0 0 0.0 1.1696586608886719 -0.12952345609664917 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9101971983909607 0.4346746802330017 0 1.0 0 0.0 0 0.0 0 0.0 0.896730899810791 -0.13908028602600098 -0.2839455306529999 0.0 0.0 -1.0 1.0564019680023193 0.43033796548843384 0 1.0 0 0.0 0 0.0 0 0.0 1.1696586608886719 -0.12952345609664917 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9101971983909607 0.4346746802330017 0 1.0 0 0.0 0 0.0 0 0.0 1.1645300388336182 -0.13618940114974976 -0.2839455306529999 0.0 0.0 -1.0 0.9130018949508667 0.4282703995704651 0 1.0 0 0.0 0 0.0 0 0.0 0.896730899810791 -0.13908028602600098 -0.2839455306529999 0.0 0.0 -1.0 1.0564019680023193 0.43033796548843384 0 1.0 0 0.0 0 0.0 0 0.0 1.1645300388336182 -0.13618940114974976 -0.2839455306529999 0.0 0.0 -1.0 0.9130018949508667 0.4282703995704651 0 1.0 0 0.0 0 0.0 0 0.0 1.15909743309021 -0.14249777793884277 -0.2839455306529999 0.0 0.0 -1.0 0.9159396886825562 0.4222024083137512 0 1.0 0 0.0 0 0.0 0 0.0 0.9055459499359131 -0.14832577109336853 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.051793098449707 0.4209994077682495 0 1.0 0 0.0 0 0.0 0 0.0 0.896730899810791 -0.13908028602600098 -0.2839455306529999 0.0 0.0 -1.0 1.0564019680023193 0.43033796548843384 0 1.0 0 0.0 0 0.0 0 0.0 1.15909743309021 -0.14249777793884277 -0.2839455306529999 0.0 0.0 -1.0 0.9159396886825562 0.4222024083137512 0 1.0 0 0.0 0 0.0 0 0.0 0.9055459499359131 -0.14832577109336853 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.051793098449707 0.4209994077682495 0 1.0 0 0.0 0 0.0 0 0.0 1.15909743309021 -0.14249777793884277 -0.2839455306529999 0.0 0.0 -1.0 0.9159396886825562 0.4222024083137512 0 1.0 0 0.0 0 0.0 0 0.0 1.1533606052398682 -0.14844858646392822 -0.2839455306529999 0.0 0.0 -1.0 0.9190158843994141 0.41646647453308105 0 1.0 0 0.0 0 0.0 0 0.0 0.9150614738464355 -0.15669071674346924 -0.2839455306529999 0.0 0.0 -1.0 1.0468385219573975 0.41246914863586426 0 1.0 0 0.0 0 0.0 0 0.0 0.9055459499359131 -0.14832577109336853 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.051793098449707 0.4209994077682495 0 1.0 0 0.0 0 0.0 0 0.0 1.1533606052398682 -0.14844858646392822 -0.2839455306529999 0.0 0.0 -1.0 0.9190158843994141 0.41646647453308105 0 1.0 0 0.0 0 0.0 0 0.0 0.9150614738464355 -0.15669071674346924 -0.2839455306529999 0.0 0.0 -1.0 1.0468385219573975 0.41246914863586426 0 1.0 0 0.0 0 0.0 0 0.0 1.1533606052398682 -0.14844858646392822 -0.2839455306529999 0.0 0.0 -1.0 0.9190158843994141 0.41646647453308105 0 1.0 0 0.0 0 0.0 0 0.0 1.1473197937011719 -0.1540418416261673 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9222360253334045 0.4110592007637024 0 1.0 0 0.0 0 0.0 0 0.0 0.9150614738464355 -0.15669071674346924 -0.2839455306529999 0.0 0.0 -1.0 1.0468385219573975 0.41246914863586426 0 1.0 0 0.0 0 0.0 0 0.0 1.1473197937011719 -0.1540418416261673 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9222360253334045 0.4110592007637024 0 1.0 0 0.0 0 0.0 0 0.0 1.140974998474121 -0.15927754342556 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9256055355072021 0.4059785008430481 0 1.0 0 0.0 0 0.0 0 0.0 0.9252774715423584 -0.1641751527786255 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0415186882019043 0.40473806858062744 0 1.0 0 0.0 0 0.0 0 0.0 0.9150614738464355 -0.15669071674346924 -0.2839455306529999 0.0 0.0 -1.0 1.0468385219573975 0.41246914863586426 0 1.0 0 0.0 0 0.0 0 0.0 1.140974998474121 -0.15927754342556 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9256055355072021 0.4059785008430481 0 1.0 0 0.0 0 0.0 0 0.0 0.9252774715423584 -0.1641751527786255 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0415186882019043 0.40473806858062744 0 1.0 0 0.0 0 0.0 0 0.0 1.140974998474121 -0.15927754342556 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9256055355072021 0.4059785008430481 0 1.0 0 0.0 0 0.0 0 0.0 1.1343259811401367 -0.16415569186210632 -0.2839455306529999 0.0 0.0 -1.0 0.9291298389434814 0.4012235999107361 0 1.0 0 0.0 0 0.0 0 0.0 0.9252774715423584 -0.1641751527786255 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0415186882019043 0.40473806858062744 0 1.0 0 0.0 0 0.0 0 0.0 1.1343259811401367 -0.16415569186210632 -0.2839455306529999 0.0 0.0 -1.0 0.9291298389434814 0.4012235999107361 0 1.0 0 0.0 0 0.0 0 0.0 1.127382755279541 -0.1686592400074005 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9328085780143738 0.3968101739883423 0 1.0 0 0.0 0 0.0 0 0.0 0.9361939430236816 -0.1707790642976761 -0.2839455306529999 0.0 0.0 -1.0 1.0358147621154785 0.39780449867248535 0 1.0 0 0.0 0 0.0 0 0.0 0.9252774715423584 -0.1641751527786255 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0415186882019043 0.40473806858062744 0 1.0 0 0.0 0 0.0 0 0.0 1.127382755279541 -0.1686592400074005 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9328085780143738 0.3968101739883423 0 1.0 0 0.0 0 0.0 0 0.0 0.9361939430236816 -0.1707790642976761 -0.2839455306529999 0.0 0.0 -1.0 1.0358147621154785 0.39780449867248535 0 1.0 0 0.0 0 0.0 0 0.0 1.127382755279541 -0.1686592400074005 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9328085780143738 0.3968101739883423 0 1.0 0 0.0 0 0.0 0 0.0 1.120154857635498 -0.17277118563652039 -0.2839455306529999 0.0 0.0 -1.0 0.9366409182548523 0.39275485277175903 0 1.0 0 0.0 0 0.0 0 0.0 0.9478108882904053 -0.17650245130062103 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0297091007232666 0.3916749358177185 0 1.0 0 0.0 0 0.0 0 0.0 0.9361939430236816 -0.1707790642976761 -0.2839455306529999 0.0 0.0 -1.0 1.0358147621154785 0.39780449867248535 0 1.0 0 0.0 0 0.0 0 0.0 1.120154857635498 -0.17277118563652039 -0.2839455306529999 0.0 0.0 -1.0 0.9366409182548523 0.39275485277175903 0 1.0 0 0.0 0 0.0 0 0.0 0.9478108882904053 -0.17650245130062103 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0297091007232666 0.3916749358177185 0 1.0 0 0.0 0 0.0 0 0.0 1.120154857635498 -0.17277118563652039 -0.2839455306529999 0.0 0.0 -1.0 0.9366409182548523 0.39275485277175903 0 1.0 0 0.0 0 0.0 0 0.0 1.112642526626587 -0.17649151384830475 -0.2839455306529999 0.0 0.0 -1.0 0.9406315088272095 0.38906025886535645 0 1.0 0 0.0 0 0.0 0 0.0 0.9478108882904053 -0.17650245130062103 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0297091007232666 0.3916749358177185 0 1.0 0 0.0 0 0.0 0 0.0 1.112642526626587 -0.17649151384830475 -0.2839455306529999 0.0 0.0 -1.0 0.9406315088272095 0.38906025886535645 0 1.0 0 0.0 0 0.0 0 0.0 1.1048455238342285 -0.1798202246427536 -0.2839455306529999 0.0 0.0 -1.0 0.9447846412658691 0.3857303857803345 0 1.0 0 0.0 0 0.0 0 0.0 0.9601285457611084 -0.18134532868862152 -0.2839455306529999 0.0 0.0 -1.0 1.023186206817627 0.3863646388053894 0 1.0 0 0.0 0 0.0 0 0.0 0.9478108882904053 -0.17650245130062103 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0297091007232666 0.3916749358177185 0 1.0 0 0.0 0 0.0 0 0.0 1.1048455238342285 -0.1798202246427536 -0.2839455306529999 0.0 0.0 -1.0 0.9447846412658691 0.3857303857803345 0 1.0 0 0.0 0 0.0 0 0.0 0.9601285457611084 -0.18134532868862152 -0.2839455306529999 0.0 0.0 -1.0 1.023186206817627 0.3863646388053894 0 1.0 0 0.0 0 0.0 0 0.0 1.1048455238342285 -0.1798202246427536 -0.2839455306529999 0.0 0.0 -1.0 0.9447846412658691 0.3857303857803345 0 1.0 0 0.0 0 0.0 0 0.0 1.0967638492584229 -0.18275731801986694 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9491041898727417 0.382770836353302 0 1.0 0 0.0 0 0.0 0 0.0 0.9731466770172119 -0.18530766665935516 -0.2839455306529999 0.0 0.0 -1.0 1.0162346363067627 0.3818973898887634 0 1.0 0 0.0 0 0.0 0 0.0 0.9601285457611084 -0.18134532868862152 -0.2839455306529999 0.0 0.0 -1.0 1.023186206817627 0.3863646388053894 0 1.0 0 0.0 0 0.0 0 0.0 1.0967638492584229 -0.18275731801986694 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9491041898727417 0.382770836353302 0 1.0 0 0.0 0 0.0 0 0.0 0.9731466770172119 -0.18530766665935516 -0.2839455306529999 0.0 0.0 -1.0 1.0162346363067627 0.3818973898887634 0 1.0 0 0.0 0 0.0 0 0.0 1.0967638492584229 -0.18275731801986694 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9491041898727417 0.382770836353302 0 1.0 0 0.0 0 0.0 0 0.0 1.088397741317749 -0.18530280888080597 -0.2839455306529999 0.0 0.0 -1.0 0.9535930156707764 0.3801887631416321 0 1.0 0 0.0 0 0.0 0 0.0 0.9731466770172119 -0.18530766665935516 -0.2839455306529999 0.0 0.0 -1.0 1.0162346363067627 0.3818973898887634 0 1.0 0 0.0 0 0.0 0 0.0 1.088397741317749 -0.18530280888080597 -0.2839455306529999 0.0 0.0 -1.0 0.9535930156707764 0.3801887631416321 0 1.0 0 0.0 0 0.0 0 0.0 1.079746961593628 -0.18745668232440948 -0.2839455306529999 0.0 0.0 -1.0 0.9582534432411194 0.3779926896095276 0 1.0 0 0.0 0 0.0 0 0.0 0.9868652820587158 -0.18838949501514435 -0.2839455306529999 0.0 0.0 -1.0 1.0088480710983276 0.3783048391342163 0 1.0 0 0.0 0 0.0 0 0.0 0.9731466770172119 -0.18530766665935516 -0.2839455306529999 0.0 0.0 -1.0 1.0162346363067627 0.3818973898887634 0 1.0 0 0.0 0 0.0 0 0.0 1.079746961593628 -0.18745668232440948 -0.2839455306529999 0.0 0.0 -1.0 0.9582534432411194 0.3779926896095276 0 1.0 0 0.0 0 0.0 0 0.0 0.9868652820587158 -0.18838949501514435 -0.2839455306529999 0.0 0.0 -1.0 1.0088480710983276 0.3783048391342163 0 1.0 0 0.0 0 0.0 0 0.0 1.079746961593628 -0.18745668232440948 -0.2839455306529999 0.0 0.0 -1.0 0.9582534432411194 0.3779926896095276 0 1.0 0 0.0 0 0.0 0 0.0 1.0708115100860596 -0.1892189383506775 -0.2839455306529999 0.0 0.0 -1.0 0.963086724281311 0.376192569732666 0 1.0 0 0.0 0 0.0 0 0.0 1.0012843608856201 -0.19059079885482788 -0.2839455306529999 0.0 0.0 -1.0 1.0010268688201904 0.3756256103515625 0 1.0 0 0.0 0 0.0 0 0.0 0.9868652820587158 -0.18838949501514435 -0.2839455306529999 0.0 0.0 -1.0 1.0088480710983276 0.3783048391342163 0 1.0 0 0.0 0 0.0 0 0.0 1.0708115100860596 -0.1892189383506775 -0.2839455306529999 0.0 0.0 -1.0 0.963086724281311 0.376192569732666 0 1.0 0 0.0 0 0.0 0 0.0 1.0012843608856201 -0.19059079885482788 -0.2839455306529999 0.0 0.0 -1.0 1.0010268688201904 0.3756256103515625 0 1.0 0 0.0 0 0.0 0 0.0 1.0708115100860596 -0.1892189383506775 -0.2839455306529999 0.0 0.0 -1.0 0.963086724281311 0.376192569732666 0 1.0 0 0.0 0 0.0 0 0.0 1.061591625213623 -0.19058957695960999 -0.2839455306529999 0.0 0.0 -1.0 0.968092679977417 0.37479931116104126 0 1.0 0 0.0 0 0.0 0 0.0 1.0012843608856201 -0.19059079885482788 -0.2839455306529999 0.0 0.0 -1.0 1.0010268688201904 0.3756256103515625 0 1.0 0 0.0 0 0.0 0 0.0 1.061591625213623 -0.19058957695960999 -0.2839455306529999 0.0 0.0 -1.0 0.968092679977417 0.37479931116104126 0 1.0 0 0.0 0 0.0 0 0.0 1.0520870685577393 -0.19156861305236816 -0.2839455306529999 0.0 0.0 -1.0 0.973270058631897 0.3738250136375427 0 1.0 0 0.0 0 0.0 0 0.0 1.016404151916504 -0.19191157817840576 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9927797317504883 0.37390339374542236 0 1.0 0 0.0 0 0.0 0 0.0 1.0012843608856201 -0.19059079885482788 -0.2839455306529999 0.0 0.0 -1.0 1.0010268688201904 0.3756256103515625 0 1.0 0 0.0 0 0.0 0 0.0 1.0520870685577393 -0.19156861305236816 -0.2839455306529999 0.0 0.0 -1.0 0.973270058631897 0.3738250136375427 0 1.0 0 0.0 0 0.0 0 0.0 1.016404151916504 -0.19191157817840576 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9927797317504883 0.37390339374542236 0 1.0 0 0.0 0 0.0 0 0.0 1.0520870685577393 -0.19156861305236816 -0.2839455306529999 0.0 0.0 -1.0 0.973270058631897 0.3738250136375427 0 1.0 0 0.0 0 0.0 0 0.0 1.0422980785369873 -0.19215603172779083 -0.2839455306529999 0.0 0.0 -1.0 0.9786159992218018 0.373282253742218 0 1.0 0 0.0 0 0.0 0 0.0 1.032224416732788 -0.19235184788703918 -0.2839455306529999 0.0 0.0 -1.0 0.9841258525848389 0.3731839060783386 0 1.0 0 0.0 0 0.0 0 0.0 1.016404151916504 -0.19191157817840576 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9927797317504883 0.37390339374542236 0 1.0 0 0.0 0 0.0 0 0.0 1.0422980785369873 -0.19215603172779083 -0.2839455306529999 0.0 0.0 -1.0 0.9786159992218018 0.373282253742218 0 1.0 0 0.0 0 0.0 0 0.0 0.914886474609375 0.24932944774627686 -0.2839455306529999 0.0 0.0 -1.0 1.0703219175338745 0.8121410012245178 0 1.0 0 0.0 0 0.0 0 0.0 0.914886474609375 0.314128041267395 -0.2839455306529999 0.0 0.0 -1.0 1.0762239694595337 0.8483100533485413 0 1.0 0 0.0 0 0.0 0 0.0 1.1404554843902588 0.314128041267395 -0.2839455306529999 0.0 0.0 -1.0 0.8829363584518433 0.837841272354126 0 1.0 0 0.0 0 0.0 0 0.0 0.914886474609375 0.24932944774627686 -0.2839455306529999 0.0 0.0 -1.0 1.0703219175338745 0.8121410012245178 0 1.0 0 0.0 0 0.0 0 0.0 1.1404554843902588 0.314128041267395 -0.2839455306529999 0.0 0.0 -1.0 0.8829363584518433 0.837841272354126 0 1.0 0 0.0 0 0.0 0 0.0 1.1404554843902588 0.24932944774627686 -0.2839455306529999 0.0 0.0 -1.0 0.8911066055297852 0.8022257685661316 0 1.0 0 0.0 0 0.0 0 0.0 0.4047873020172119 0.1962110698223114 -0.2839455306529999 0.0 0.0 -1.0 0.9996861219406128 0.790111780166626 0 1.0 0 0.0 0 0.0 0 0.0 0.4178636074066162 0.19643977284431458 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.9889223575592041 0.7905939221382141 0 1.0 0 0.0 0 0.0 0 0.0 0.43031740188598633 0.19626706838607788 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.9786590337753296 0.7900840640068054 0 1.0 0 0.0 0 0.0 0 0.0 0.4047873020172119 0.1962110698223114 -0.2839455306529999 0.0 0.0 -1.0 0.9996861219406128 0.790111780166626 0 1.0 0 0.0 0 0.0 0 0.0 0.43031740188598633 0.19626706838607788 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.9786590337753296 0.7900840640068054 0 1.0 0 0.0 0 0.0 0 0.0 0.4422264099121094 0.19574898481369019 -0.2839455306529999 0.0 0.0 -1.0 0.9689275026321411 0.7887187004089355 0 1.0 0 0.0 0 0.0 0 0.0 0.39229464530944824 0.1955251395702362 -0.2839455306529999 0.0 0.0 -1.0 1.009852409362793 0.7886282801628113 0 1.0 0 0.0 0 0.0 0 0.0 0.4047873020172119 0.1962110698223114 -0.2839455306529999 0.0 0.0 -1.0 0.9996861219406128 0.790111780166626 0 1.0 0 0.0 0 0.0 0 0.0 0.4422264099121094 0.19574898481369019 -0.2839455306529999 0.0 0.0 -1.0 0.9689275026321411 0.7887187004089355 0 1.0 0 0.0 0 0.0 0 0.0 0.39229464530944824 0.1955251395702362 -0.2839455306529999 0.0 0.0 -1.0 1.009852409362793 0.7886282801628113 0 1.0 0 0.0 0 0.0 0 0.0 0.4422264099121094 0.19574898481369019 -0.2839455306529999 0.0 0.0 -1.0 0.9689275026321411 0.7887187004089355 0 1.0 0 0.0 0 0.0 0 0.0 0.45359039306640625 0.1948854923248291 -0.2839455306529999 0.0 0.0 -1.0 0.9597970247268677 0.7865921854972839 0 1.0 0 0.0 0 0.0 0 0.0 0.3803856372833252 0.1943819224834442 -0.2839455306529999 0.0 0.0 -1.0 1.0193452835083008 0.7862547636032104 0 1.0 0 0.0 0 0.0 0 0.0 0.39229464530944824 0.1955251395702362 -0.2839455306529999 0.0 0.0 -1.0 1.009852409362793 0.7886282801628113 0 1.0 0 0.0 0 0.0 0 0.0 0.45359039306640625 0.1948854923248291 -0.2839455306529999 0.0 0.0 -1.0 0.9597970247268677 0.7865921854972839 0 1.0 0 0.0 0 0.0 0 0.0 0.3803856372833252 0.1943819224834442 -0.2839455306529999 0.0 0.0 -1.0 1.0193452835083008 0.7862547636032104 0 1.0 0 0.0 0 0.0 0 0.0 0.45359039306640625 0.1948854923248291 -0.2839455306529999 0.0 0.0 -1.0 0.9597970247268677 0.7865921854972839 0 1.0 0 0.0 0 0.0 0 0.0 0.46440958976745605 0.19367659091949463 -0.2839455306529999 0.0 0.0 -1.0 0.9513112306594849 0.7838000059127808 0 1.0 0 0.0 0 0.0 0 0.0 0.3690605163574219 0.19278141856193542 -0.2839455306529999 0.0 0.0 -1.0 1.0281193256378174 0.783101499080658 0 1.0 0 0.0 0 0.0 0 0.0 0.3803856372833252 0.1943819224834442 -0.2839455306529999 0.0 0.0 -1.0 1.0193452835083008 0.7862547636032104 0 1.0 0 0.0 0 0.0 0 0.0 0.46440958976745605 0.19367659091949463 -0.2839455306529999 0.0 0.0 -1.0 0.9513112306594849 0.7838000059127808 0 1.0 0 0.0 0 0.0 0 0.0 0.3690605163574219 0.19278141856193542 -0.2839455306529999 0.0 0.0 -1.0 1.0281193256378174 0.783101499080658 0 1.0 0 0.0 0 0.0 0 0.0 0.46440958976745605 0.19367659091949463 -0.2839455306529999 0.0 0.0 -1.0 0.9513112306594849 0.7838000059127808 0 1.0 0 0.0 0 0.0 0 0.0 0.4746840000152588 0.19212231040000916 -0.2839455306529999 0.0 0.0 -1.0 0.9434916973114014 0.7804332971572876 0 1.0 0 0.0 0 0.0 0 0.0 0.3583190441131592 0.19072362780570984 -0.2839455306529999 0.0 0.0 -1.0 1.0361562967300415 0.7792717218399048 0 1.0 0 0.0 0 0.0 0 0.0 0.3690605163574219 0.19278141856193542 -0.2839455306529999 0.0 0.0 -1.0 1.0281193256378174 0.783101499080658 0 1.0 0 0.0 0 0.0 0 0.0 0.4746840000152588 0.19212231040000916 -0.2839455306529999 0.0 0.0 -1.0 0.9434916973114014 0.7804332971572876 0 1.0 0 0.0 0 0.0 0 0.0 0.3583190441131592 0.19072362780570984 -0.2839455306529999 0.0 0.0 -1.0 1.0361562967300415 0.7792717218399048 0 1.0 0 0.0 0 0.0 0 0.0 0.4746840000152588 0.19212231040000916 -0.2839455306529999 0.0 0.0 -1.0 0.9434916973114014 0.7804332971572876 0 1.0 0 0.0 0 0.0 0 0.0 0.48441362380981445 0.1902226209640503 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9363412857055664 0.7765765190124512 0 1.0 0 0.0 0 0.0 0 0.0 0.3481614589691162 0.18820855021476746 -0.2839455306529999 0.0 0.0 -1.0 1.0434587001800537 0.7748587131500244 0 1.0 0 0.0 0 0.0 0 0.0 0.3583190441131592 0.19072362780570984 -0.2839455306529999 0.0 0.0 -1.0 1.0361562967300415 0.7792717218399048 0 1.0 0 0.0 0 0.0 0 0.0 0.48441362380981445 0.1902226209640503 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9363412857055664 0.7765765190124512 0 1.0 0 0.0 0 0.0 0 0.0 0.3481614589691162 0.18820855021476746 -0.2839455306529999 0.0 0.0 -1.0 1.0434587001800537 0.7748587131500244 0 1.0 0 0.0 0 0.0 0 0.0 0.48441362380981445 0.1902226209640503 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9363412857055664 0.7765765190124512 0 1.0 0 0.0 0 0.0 0 0.0 0.49359822273254395 0.18797752261161804 -0.2839455306529999 0.0 0.0 -1.0 0.929848849773407 0.7723045945167542 0 1.0 0 0.0 0 0.0 0 0.0 0.33858752250671387 0.18523618578910828 -0.2839455306529999 0.0 0.0 -1.0 1.050045132637024 0.769943118095398 0 1.0 0 0.0 0 0.0 0 0.0 0.3481614589691162 0.18820855021476746 -0.2839455306529999 0.0 0.0 -1.0 1.0434587001800537 0.7748587131500244 0 1.0 0 0.0 0 0.0 0 0.0 0.49359822273254395 0.18797752261161804 -0.2839455306529999 0.0 0.0 -1.0 0.929848849773407 0.7723045945167542 0 1.0 0 0.0 0 0.0 0 0.0 0.33858752250671387 0.18523618578910828 -0.2839455306529999 0.0 0.0 -1.0 1.050045132637024 0.769943118095398 0 1.0 0 0.0 0 0.0 0 0.0 0.49359822273254395 0.18797752261161804 -0.2839455306529999 0.0 0.0 -1.0 0.929848849773407 0.7723045945167542 0 1.0 0 0.0 0 0.0 0 0.0 0.5022380352020264 0.1853870451450348 -0.2839455306529999 0.0 0.0 -1.0 0.9239929914474487 0.7676823139190674 0 1.0 0 0.0 0 0.0 0 0.0 0.33858752250671387 0.18523618578910828 -0.2839455306529999 0.0 0.0 -1.0 1.050045132637024 0.769943118095398 0 1.0 0 0.0 0 0.0 0 0.0 0.5022380352020264 0.1853870451450348 -0.2839455306529999 0.0 0.0 -1.0 0.9239929914474487 0.7676823139190674 0 1.0 0 0.0 0 0.0 0 0.0 0.5103330612182617 0.18245115876197815 -0.2839455306529999 0.0 0.0 -1.0 0.9187459945678711 0.7627639174461365 0 1.0 0 0.0 0 0.0 0 0.0 0.32959747314453125 0.1818065345287323 -0.2839455306529999 0.0 0.0 -1.0 1.0559446811676025 0.7645926475524902 0 1.0 0 0.0 0 0.0 0 0.0 0.33858752250671387 0.18523618578910828 -0.2839455306529999 0.0 0.0 -1.0 1.050045132637024 0.769943118095398 0 1.0 0 0.0 0 0.0 0 0.0 0.5103330612182617 0.18245115876197815 -0.2839455306529999 0.0 0.0 -1.0 0.9187459945678711 0.7627639174461365 0 1.0 0 0.0 0 0.0 0 0.0 0.32959747314453125 0.1818065345287323 -0.2839455306529999 0.0 0.0 -1.0 1.0559446811676025 0.7645926475524902 0 1.0 0 0.0 0 0.0 0 0.0 0.5103330612182617 0.18245115876197815 -0.2839455306529999 0.0 0.0 -1.0 0.9187459945678711 0.7627639174461365 0 1.0 0 0.0 0 0.0 0 0.0 0.5178830623626709 0.17916986346244812 -0.2839455306529999 0.0 0.0 -1.0 0.9140768051147461 0.7575938105583191 0 1.0 0 0.0 0 0.0 0 0.0 0.32119107246398926 0.17791959643363953 -0.2839455306529999 0.0 0.0 -1.0 1.0611928701400757 0.7588622570037842 0 1.0 0 0.0 0 0.0 0 0.0 0.32959747314453125 0.1818065345287323 -0.2839455306529999 0.0 0.0 -1.0 1.0559446811676025 0.7645926475524902 0 1.0 0 0.0 0 0.0 0 0.0 0.5178830623626709 0.17916986346244812 -0.2839455306529999 0.0 0.0 -1.0 0.9140768051147461 0.7575938105583191 0 1.0 0 0.0 0 0.0 0 0.0 0.32119107246398926 0.17791959643363953 -0.2839455306529999 0.0 0.0 -1.0 1.0611928701400757 0.7588622570037842 0 1.0 0 0.0 0 0.0 0 0.0 0.5178830623626709 0.17916986346244812 -0.2839455306529999 0.0 0.0 -1.0 0.9140768051147461 0.7575938105583191 0 1.0 0 0.0 0 0.0 0 0.0 0.524888277053833 0.1755431890487671 -0.2839455306529999 0.0 0.0 -1.0 0.9099525809288025 0.7522066831588745 0 1.0 0 0.0 0 0.0 0 0.0 0.313368558883667 0.17357537150382996 -0.2839455306529999 0.0 0.0 -1.0 1.0658278465270996 0.7527945637702942 0 1.0 0 0.0 0 0.0 0 0.0 0.32119107246398926 0.17791959643363953 -0.2839455306529999 0.0 0.0 -1.0 1.0611928701400757 0.7588622570037842 0 1.0 0 0.0 0 0.0 0 0.0 0.524888277053833 0.1755431890487671 -0.2839455306529999 0.0 0.0 -1.0 0.9099525809288025 0.7522066831588745 0 1.0 0 0.0 0 0.0 0 0.0 0.313368558883667 0.17357537150382996 -0.2839455306529999 0.0 0.0 -1.0 1.0658278465270996 0.7527945637702942 0 1.0 0 0.0 0 0.0 0 0.0 0.524888277053833 0.1755431890487671 -0.2839455306529999 0.0 0.0 -1.0 0.9099525809288025 0.7522066831588745 0 1.0 0 0.0 0 0.0 0 0.0 0.531348705291748 0.17157110571861267 -0.2839455306529999 0.0 0.0 -1.0 0.9063409566879272 0.7466289401054382 0 1.0 0 0.0 0 0.0 0 0.0 0.30612969398498535 0.1687738597393036 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.069888949394226 0.7464208602905273 0 1.0 0 0.0 0 0.0 0 0.0 0.313368558883667 0.17357537150382996 -0.2839455306529999 0.0 0.0 -1.0 1.0658278465270996 0.7527945637702942 0 1.0 0 0.0 0 0.0 0 0.0 0.531348705291748 0.17157110571861267 -0.2839455306529999 0.0 0.0 -1.0 0.9063409566879272 0.7466289401054382 0 1.0 0 0.0 0 0.0 0 0.0 0.30612969398498535 0.1687738597393036 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.069888949394226 0.7464208602905273 0 1.0 0 0.0 0 0.0 0 0.0 0.531348705291748 0.17157110571861267 -0.2839455306529999 0.0 0.0 -1.0 0.9063409566879272 0.7466289401054382 0 1.0 0 0.0 0 0.0 0 0.0 0.5373761653900146 0.16726094484329224 -0.2839455306529999 0.0 0.0 -1.0 0.9031440019607544 0.7408447861671448 0 1.0 0 0.0 0 0.0 0 0.0 0.29947471618652344 0.16351506114006042 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0734137296676636 0.7397626638412476 0 1.0 0 0.0 0 0.0 0 0.0 0.30612969398498535 0.1687738597393036 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.069888949394226 0.7464208602905273 0 1.0 0 0.0 0 0.0 0 0.0 0.5373761653900146 0.16726094484329224 -0.2839455306529999 0.0 0.0 -1.0 0.9031440019607544 0.7408447861671448 0 1.0 0 0.0 0 0.0 0 0.0 0.29947471618652344 0.16351506114006042 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0734137296676636 0.7397626638412476 0 1.0 0 0.0 0 0.0 0 0.0 0.5373761653900146 0.16726094484329224 -0.2839455306529999 0.0 0.0 -1.0 0.9031440019607544 0.7408447861671448 0 1.0 0 0.0 0 0.0 0 0.0 0.5430824756622314 0.16261997818946838 -0.2839455306529999 0.0 0.0 -1.0 0.9002724885940552 0.7348303198814392 0 1.0 0 0.0 0 0.0 0 0.0 0.2933766841888428 0.15792062878608704 -0.2839455306529999 0.0 0.0 -1.0 1.076462745666504 0.7329283952713013 0 1.0 0 0.0 0 0.0 0 0.0 0.29947471618652344 0.16351506114006042 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0734137296676636 0.7397626638412476 0 1.0 0 0.0 0 0.0 0 0.0 0.5430824756622314 0.16261997818946838 -0.2839455306529999 0.0 0.0 -1.0 0.9002724885940552 0.7348303198814392 0 1.0 0 0.0 0 0.0 0 0.0 0.2933766841888428 0.15792062878608704 -0.2839455306529999 0.0 0.0 -1.0 1.076462745666504 0.7329283952713013 0 1.0 0 0.0 0 0.0 0 0.0 0.5430824756622314 0.16261997818946838 -0.2839455306529999 0.0 0.0 -1.0 0.9002724885940552 0.7348303198814392 0 1.0 0 0.0 0 0.0 0 0.0 0.5484678745269775 0.1576482057571411 -0.2839455306529999 0.0 0.0 -1.0 0.8977089524269104 0.7285908460617065 0 1.0 0 0.0 0 0.0 0 0.0 0.287808895111084 0.15211209654808044 -0.2839455306529999 0.0 0.0 -1.0 1.079092264175415 0.7260230779647827 0 1.0 0 0.0 0 0.0 0 0.0 0.2933766841888428 0.15792062878608704 -0.2839455306529999 0.0 0.0 -1.0 1.076462745666504 0.7329283952713013 0 1.0 0 0.0 0 0.0 0 0.0 0.5484678745269775 0.1576482057571411 -0.2839455306529999 0.0 0.0 -1.0 0.8977089524269104 0.7285908460617065 0 1.0 0 0.0 0 0.0 0 0.0 0.287808895111084 0.15211209654808044 -0.2839455306529999 0.0 0.0 -1.0 1.079092264175415 0.7260230779647827 0 1.0 0 0.0 0 0.0 0 0.0 0.5484678745269775 0.1576482057571411 -0.2839455306529999 0.0 0.0 -1.0 0.8977089524269104 0.7285908460617065 0 1.0 0 0.0 0 0.0 0 0.0 0.5535321235656738 0.15234562754631042 -0.2839455306529999 0.0 0.0 -1.0 0.8954370021820068 0.7221288681030273 0 1.0 0 0.0 0 0.0 0 0.0 0.287808895111084 0.15211209654808044 -0.2839455306529999 0.0 0.0 -1.0 1.079092264175415 0.7260230779647827 0 1.0 0 0.0 0 0.0 0 0.0 0.5535321235656738 0.15234562754631042 -0.2839455306529999 0.0 0.0 -1.0 0.8954370021820068 0.7221288681030273 0 1.0 0 0.0 0 0.0 0 0.0 0.5582752227783203 0.14671224355697632 -0.2839455306529999 0.0 0.0 -1.0 0.8934412002563477 0.7154441475868225 0 1.0 0 0.0 0 0.0 0 0.0 0.28277134895324707 0.14608952403068542 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0813302993774414 0.7190533876419067 0 1.0 0 0.0 0 0.0 0 0.0 0.287808895111084 0.15211209654808044 -0.2839455306529999 0.0 0.0 -1.0 1.079092264175415 0.7260230779647827 0 1.0 0 0.0 0 0.0 0 0.0 0.5582752227783203 0.14671224355697632 -0.2839455306529999 0.0 0.0 -1.0 0.8934412002563477 0.7154441475868225 0 1.0 0 0.0 0 0.0 0 0.0 0.28277134895324707 0.14608952403068542 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0813302993774414 0.7190533876419067 0 1.0 0 0.0 0 0.0 0 0.0 0.5582752227783203 0.14671224355697632 -0.2839455306529999 0.0 0.0 -1.0 0.8934412002563477 0.7154441475868225 0 1.0 0 0.0 0 0.0 0 0.0 0.562697172164917 0.1407480537891388 -0.2839455306529999 0.0 0.0 -1.0 0.891707181930542 0.7085340023040771 0 1.0 0 0.0 0 0.0 0 0.0 0.27826404571533203 0.13985291123390198 -0.2839455306529999 0.0 0.0 -1.0 1.0832017660140991 0.7120208144187927 0 1.0 0 0.0 0 0.0 0 0.0 0.28277134895324707 0.14608952403068542 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0813302993774414 0.7190533876419067 0 1.0 0 0.0 0 0.0 0 0.0 0.562697172164917 0.1407480537891388 -0.2839455306529999 0.0 0.0 -1.0 0.891707181930542 0.7085340023040771 0 1.0 0 0.0 0 0.0 0 0.0 0.27826404571533203 0.13985291123390198 -0.2839455306529999 0.0 0.0 -1.0 1.0832017660140991 0.7120208144187927 0 1.0 0 0.0 0 0.0 0 0.0 0.562697172164917 0.1407480537891388 -0.2839455306529999 0.0 0.0 -1.0 0.891707181930542 0.7085340023040771 0 1.0 0 0.0 0 0.0 0 0.0 0.566798210144043 0.13445305824279785 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8902215957641602 0.7013935446739197 0 1.0 0 0.0 0 0.0 0 0.0 0.27428698539733887 0.13340222835540771 -0.2839455306529999 0.0 0.0 -1.0 1.084728479385376 0.7049230933189392 0 1.0 0 0.0 0 0.0 0 0.0 0.27826404571533203 0.13985291123390198 -0.2839455306529999 0.0 0.0 -1.0 1.0832017660140991 0.7120208144187927 0 1.0 0 0.0 0 0.0 0 0.0 0.566798210144043 0.13445305824279785 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8902215957641602 0.7013935446739197 0 1.0 0 0.0 0 0.0 0 0.0 0.27428698539733887 0.13340222835540771 -0.2839455306529999 0.0 0.0 -1.0 1.084728479385376 0.7049230933189392 0 1.0 0 0.0 0 0.0 0 0.0 0.566798210144043 0.13445305824279785 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8902215957641602 0.7013935446739197 0 1.0 0 0.0 0 0.0 0 0.0 0.5705780982971191 0.1278272569179535 -0.2839455306529999 0.0 0.0 -1.0 0.8889724016189575 0.6940163373947144 0 1.0 0 0.0 0 0.0 0 0.0 0.2708404064178467 0.12673750519752502 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0859293937683105 0.6977543830871582 0 1.0 0 0.0 0 0.0 0 0.0 0.27428698539733887 0.13340222835540771 -0.2839455306529999 0.0 0.0 -1.0 1.084728479385376 0.7049230933189392 0 1.0 0 0.0 0 0.0 0 0.0 0.5705780982971191 0.1278272569179535 -0.2839455306529999 0.0 0.0 -1.0 0.8889724016189575 0.6940163373947144 0 1.0 0 0.0 0 0.0 0 0.0 0.2708404064178467 0.12673750519752502 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0859293937683105 0.6977543830871582 0 1.0 0 0.0 0 0.0 0 0.0 0.5705780982971191 0.1278272569179535 -0.2839455306529999 0.0 0.0 -1.0 0.8889724016189575 0.6940163373947144 0 1.0 0 0.0 0 0.0 0 0.0 0.4196147918701172 0.12568670511245728 -0.2839455306529999 0.0 0.0 -1.0 0.9885497689247131 0.7259107828140259 0 1.0 0 0.0 0 0.0 0 0.0 0.4196147918701172 0.12568670511245728 -0.2839455306529999 0.0 0.0 -1.0 0.9885497689247131 0.7259107828140259 0 1.0 0 0.0 0 0.0 0 0.0 0.5705780982971191 0.1278272569179535 -0.2839455306529999 0.0 0.0 -1.0 0.8889724016189575 0.6940163373947144 0 1.0 0 0.0 0 0.0 0 0.0 0.4246535301208496 0.1256064474582672 -0.2839455306529999 0.0 0.00030518509447574615 -0.999969482421875 0.9847489595413208 0.7257236838340759 0 1.0 0 0.0 0 0.0 0 0.0 0.4246535301208496 0.1256064474582672 -0.2839455306529999 0.0 0.00030518509447574615 -0.999969482421875 0.9847489595413208 0.7257236838340759 0 1.0 0 0.0 0 0.0 0 0.0 0.5705780982971191 0.1278272569179535 -0.2839455306529999 0.0 0.0 -1.0 0.8889724016189575 0.6940163373947144 0 1.0 0 0.0 0 0.0 0 0.0 0.5740368366241455 0.12087064981460571 -0.2839455306529999 0.0 0.0 -1.0 0.887948751449585 0.6863940358161926 0 1.0 0 0.0 0 0.0 0 0.0 0.26792407035827637 0.1198587417602539 -0.2839455306529999 0.0 0.0 -1.0 1.0868208408355713 0.6905057430267334 0 1.0 0 0.0 0 0.0 0 0.0 0.2708404064178467 0.12673750519752502 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0859293937683105 0.6977543830871582 0 1.0 0 0.0 0 0.0 0 0.0 0.40726804733276367 0.1253851056098938 -0.2839455306529999 0.0 0.0 -1.0 0.9978516697883606 0.7254770994186401 0 1.0 0 0.0 0 0.0 0 0.0 0.40726804733276367 0.1253851056098938 -0.2839455306529999 0.0 0.0 -1.0 0.9978516697883606 0.7254770994186401 0 1.0 0 0.0 0 0.0 0 0.0 0.2708404064178467 0.12673750519752502 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0859293937683105 0.6977543830871582 0 1.0 0 0.0 0 0.0 0 0.0 0.4132881164550781 0.1256113052368164 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9933216571807861 0.7258370518684387 0 1.0 0 0.0 0 0.0 0 0.0 0.4132881164550781 0.1256113052368164 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9933216571807861 0.7258370518684387 0 1.0 0 0.0 0 0.0 0 0.0 0.2708404064178467 0.12673750519752502 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0859293937683105 0.6977543830871582 0 1.0 0 0.0 0 0.0 0 0.0 0.4196147918701172 0.12568670511245728 -0.2839455306529999 0.0 0.0 -1.0 0.9885497689247131 0.7259107828140259 0 1.0 0 0.0 0 0.0 0 0.0 0.42949509620666504 0.12536564469337463 -0.2839455306529999 0.0 0.0 -1.0 0.9811038374900818 0.7252907752990723 0 1.0 0 0.0 0 0.0 0 0.0 0.4246535301208496 0.1256064474582672 -0.2839455306529999 0.0 0.00030518509447574615 -0.999969482421875 0.9847489595413208 0.7257236838340759 0 1.0 0 0.0 0 0.0 0 0.0 0.5740368366241455 0.12087064981460571 -0.2839455306529999 0.0 0.0 -1.0 0.887948751449585 0.6863940358161926 0 1.0 0 0.0 0 0.0 0 0.0 0.26792407035827637 0.1198587417602539 -0.2839455306529999 0.0 0.0 -1.0 1.0868208408355713 0.6905057430267334 0 1.0 0 0.0 0 0.0 0 0.0 0.40726804733276367 0.1253851056098938 -0.2839455306529999 0.0 0.0 -1.0 0.9978516697883606 0.7254770994186401 0 1.0 0 0.0 0 0.0 0 0.0 0.4015543460845947 0.12500807642936707 -0.2839455306529999 0.0 9.155552834272385e-05 -1.0 1.002132534980774 0.7248519659042358 0 1.0 0 0.0 0 0.0 0 0.0 0.4341397285461426 0.12496429681777954 -0.2839455306529999 0.0 0.0 -1.0 0.9776194095611572 0.7246223092079163 0 1.0 0 0.0 0 0.0 0 0.0 0.42949509620666504 0.12536564469337463 -0.2839455306529999 0.0 0.0 -1.0 0.9811038374900818 0.7252907752990723 0 1.0 0 0.0 0 0.0 0 0.0 0.5740368366241455 0.12087064981460571 -0.2839455306529999 0.0 0.0 -1.0 0.887948751449585 0.6863940358161926 0 1.0 0 0.0 0 0.0 0 0.0 0.26792407035827637 0.1198587417602539 -0.2839455306529999 0.0 0.0 -1.0 0.08682084083557129 0.6905057430267334 0 1.0 0 0.0 0 0.0 0 0.0 0.4015543460845947 0.12500807642936707 -0.2839455306529999 0.0 9.155552834272385e-05 -1.0 0.0021325647830963135 0.7248519659042358 0 1.0 0 0.0 0 0.0 0 0.0 0.3961472511291504 0.1244802474975586 -0.2839455306529999 0.0 -9.155552834272385e-05 -0.999969482421875 0.006159007549285889 0.723981499671936 0 1.0 0 0.0 0 0.0 0 0.0 0.4385874271392822 0.12440240383148193 -0.2839455306529999 0.0 0.0 -1.0 0.9742997884750366 0.7237284183502197 0 1.0 0 0.0 0 0.0 0 0.0 0.4341397285461426 0.12496429681777954 -0.2839455306529999 0.0 0.0 -1.0 0.9776194095611572 0.7246223092079163 0 1.0 0 0.0 0 0.0 0 0.0 0.5740368366241455 0.12087064981460571 -0.2839455306529999 0.0 0.0 -1.0 0.887948751449585 0.6863940358161926 0 1.0 0 0.0 0 0.0 0 0.0 0.26792407035827637 0.1198587417602539 -0.2839455306529999 0.0 0.0 -1.0 0.08682084083557129 0.6905057430267334 0 1.0 0 0.0 0 0.0 0 0.0 0.3961472511291504 0.1244802474975586 -0.2839455306529999 0.0 -9.155552834272385e-05 -0.999969482421875 0.006159007549285889 0.723981499671936 0 1.0 0 0.0 0 0.0 0 0.0 0.39104652404785156 0.12380161881446838 -0.2839455306529999 0.0 0.0 -1.0 0.009928256273269653 0.7228847742080688 0 1.0 0 0.0 0 0.0 0 0.0 0.4428379535675049 0.1236799955368042 -0.2839455306529999 0.0 0.0 -1.0 0.9711482524871826 0.7226188778877258 0 1.0 0 0.0 0 0.0 0 0.0 0.4385874271392822 0.12440240383148193 -0.2839455306529999 0.0 0.0 -1.0 0.9742997884750366 0.7237284183502197 0 1.0 0 0.0 0 0.0 0 0.0 0.5740368366241455 0.12087064981460571 -0.2839455306529999 0.0 0.0 -1.0 0.887948751449585 0.6863940358161926 0 1.0 0 0.0 0 0.0 0 0.0 0.26792407035827637 0.1198587417602539 -0.2839455306529999 0.0 0.0 -1.0 0.08682084083557129 0.6905057430267334 0 1.0 0 0.0 0 0.0 0 0.0 0.39104652404785156 0.12380161881446838 -0.2839455306529999 0.0 0.0 -1.0 0.009928256273269653 0.7228847742080688 0 1.0 0 0.0 0 0.0 0 0.0 0.38625240325927734 0.12297219038009644 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.013439029455184937 0.7215795516967773 0 1.0 0 0.0 0 0.0 0 0.0 0.44689154624938965 0.12279704213142395 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9681668281555176 0.7213025093078613 0 1.0 0 0.0 0 0.0 0 0.0 0.4428379535675049 0.1236799955368042 -0.2839455306529999 0.0 0.0 -1.0 0.9711482524871826 0.7226188778877258 0 1.0 0 0.0 0 0.0 0 0.0 0.5740368366241455 0.12087064981460571 -0.2839455306529999 0.0 0.0 -1.0 0.887948751449585 0.6863940358161926 0 1.0 0 0.0 0 0.0 0 0.0 0.26792407035827637 0.1198587417602539 -0.2839455306529999 0.0 0.0 -1.0 0.08682084083557129 0.6905057430267334 0 1.0 0 0.0 0 0.0 0 0.0 0.38625240325927734 0.12297219038009644 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.013439029455184937 0.7215795516967773 0 1.0 0 0.0 0 0.0 0 0.0 0.38176465034484863 0.12199193239212036 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.01669195294380188 0.7200818061828613 0 1.0 0 0.0 0 0.0 0 0.0 0.4507482051849365 0.12175354361534119 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.965356707572937 0.7197878360748291 0 1.0 0 0.0 0 0.0 0 0.0 0.44689154624938965 0.12279704213142395 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9681668281555176 0.7213025093078613 0 1.0 0 0.0 0 0.0 0 0.0 0.5740368366241455 0.12087064981460571 -0.2839455306529999 0.0 0.0 -1.0 0.887948751449585 0.6863940358161926 0 1.0 0 0.0 0 0.0 0 0.0 0.26792407035827637 0.1198587417602539 -0.2839455306529999 0.0 0.0 -1.0 0.08682084083557129 0.6905057430267334 0 1.0 0 0.0 0 0.0 0 0.0 0.38176465034484863 0.12199193239212036 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.01669195294380188 0.7200818061828613 0 1.0 0 0.0 0 0.0 0 0.0 0.37758350372314453 0.12086087465286255 -0.2839455306529999 0.0 0.0 -1.0 0.019688516855239868 0.718406081199646 0 1.0 0 0.0 0 0.0 0 0.0 0.4544076919555664 0.12054949998855591 -0.2839455306529999 0.0 0.0 -1.0 0.9627187252044678 0.7180824279785156 0 1.0 0 0.0 0 0.0 0 0.0 0.4507482051849365 0.12175354361534119 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.965356707572937 0.7197878360748291 0 1.0 0 0.0 0 0.0 0 0.0 0.5740368366241455 0.12087064981460571 -0.2839455306529999 0.0 0.0 -1.0 0.887948751449585 0.6863940358161926 0 1.0 0 0.0 0 0.0 0 0.0 0.4544076919555664 0.12054949998855591 -0.2839455306529999 0.0 0.0 -1.0 0.9627187252044678 0.7180824279785156 0 1.0 0 0.0 0 0.0 0 0.0 0.5740368366241455 0.12087064981460571 -0.2839455306529999 0.0 0.0 -1.0 0.887948751449585 0.6863940358161926 0 1.0 0 0.0 0 0.0 0 0.0 0.5771746635437012 0.11358323693275452 -0.2839455306529999 0.0 0.0 -1.0 0.8871405124664307 0.6785171031951904 0 1.0 0 0.0 0 0.0 0 0.0 0.26792407035827637 0.1198587417602539 -0.2839455306529999 0.0 0.0 -1.0 0.08682084083557129 0.6905057430267334 0 1.0 0 0.0 0 0.0 0 0.0 0.37758350372314453 0.12086087465286255 -0.2839455306529999 0.0 0.0 -1.0 0.019688516855239868 0.718406081199646 0 1.0 0 0.0 0 0.0 0 0.0 0.37370872497558594 0.119579017162323 -0.2839455306529999 0.0 0.0 -1.0 0.022431492805480957 0.7165650129318237 0 1.0 0 0.0 0 0.0 0 0.0 0.4578702449798584 0.1191849410533905 -0.2839455306529999 0.0 0.0 -1.0 0.9602524042129517 0.716193437576294 0 1.0 0 0.0 0 0.0 0 0.0 0.4544076919555664 0.12054949998855591 -0.2839455306529999 0.0 0.0 -1.0 0.9627187252044678 0.7180824279785156 0 1.0 0 0.0 0 0.0 0 0.0 0.5771746635437012 0.11358323693275452 -0.2839455306529999 0.0 0.0 -1.0 0.8871405124664307 0.6785171031951904 0 1.0 0 0.0 0 0.0 0 0.0 0.26553797721862793 0.11276590824127197 -0.2839455306529999 0.0 0.0 -1.0 0.08741673827171326 0.6831655502319336 0 1.0 0 0.0 0 0.0 0 0.0 0.26792407035827637 0.1198587417602539 -0.2839455306529999 0.0 0.0 -1.0 0.08682084083557129 0.6905057430267334 0 1.0 0 0.0 0 0.0 0 0.0 0.37370872497558594 0.119579017162323 -0.2839455306529999 0.0 0.0 -1.0 0.022431492805480957 0.7165650129318237 0 1.0 0 0.0 0 0.0 0 0.0 0.26553797721862793 0.11276590824127197 -0.2839455306529999 0.0 0.0 -1.0 0.08741673827171326 0.6831655502319336 0 1.0 0 0.0 0 0.0 0 0.0 0.37370872497558594 0.119579017162323 -0.2839455306529999 0.0 0.0 -1.0 0.022431492805480957 0.7165650129318237 0 1.0 0 0.0 0 0.0 0 0.0 0.37014031410217285 0.11814635992050171 -0.2839455306529999 0.0 0.0 -1.0 0.02492421865463257 0.7145699262619019 0 1.0 0 0.0 0 0.0 0 0.0 0.4611356258392334 0.11765983700752258 -0.2839455306529999 0.0 0.0 -1.0 0.9579575061798096 0.7141268253326416 0 1.0 0 0.0 0 0.0 0 0.0 0.4578702449798584 0.1191849410533905 -0.2839455306529999 0.0 0.0 -1.0 0.9602524042129517 0.716193437576294 0 1.0 0 0.0 0 0.0 0 0.0 0.5771746635437012 0.11358323693275452 -0.2839455306529999 0.0 0.0 -1.0 0.8871405124664307 0.6785171031951904 0 1.0 0 0.0 0 0.0 0 0.0 0.26553797721862793 0.11276590824127197 -0.2839455306529999 0.0 0.0 -1.0 0.08741673827171326 0.6831655502319336 0 1.0 0 0.0 0 0.0 0 0.0 0.37014031410217285 0.11814635992050171 -0.2839455306529999 0.0 0.0 -1.0 0.02492421865463257 0.7145699262619019 0 1.0 0 0.0 0 0.0 0 0.0 0.3668785095214844 0.1165628731250763 -0.2839455306529999 0.0 0.0 -1.0 0.027170389890670776 0.7124302387237549 0 1.0 0 0.0 0 0.0 0 0.0 0.4642040729522705 0.11597418785095215 -0.2839455306529999 0.0 0.0 -1.0 0.9558324813842773 0.7118879556655884 0 1.0 0 0.0 0 0.0 0 0.0 0.4611356258392334 0.11765983700752258 -0.2839455306529999 0.0 0.0 -1.0 0.9579575061798096 0.7141268253326416 0 1.0 0 0.0 0 0.0 0 0.0 0.5771746635437012 0.11358323693275452 -0.2839455306529999 0.0 0.0 -1.0 0.8871405124664307 0.6785171031951904 0 1.0 0 0.0 0 0.0 0 0.0 0.26553797721862793 0.11276590824127197 -0.2839455306529999 0.0 0.0 -1.0 0.08741673827171326 0.6831655502319336 0 1.0 0 0.0 0 0.0 0 0.0 0.3668785095214844 0.1165628731250763 -0.2839455306529999 0.0 0.0 -1.0 0.027170389890670776 0.7124302387237549 0 1.0 0 0.0 0 0.0 0 0.0 0.3639230728149414 0.11482855677604675 -0.2839455306529999 0.0 0.0 -1.0 0.029174327850341797 0.7101534605026245 0 1.0 0 0.0 0 0.0 0 0.0 0.4670755863189697 0.11412802338600159 -0.2839455306529999 0.0 0.0 -1.0 0.9538760185241699 0.7094811201095581 0 1.0 0 0.0 0 0.0 0 0.0 0.4642040729522705 0.11597418785095215 -0.2839455306529999 0.0 0.0 -1.0 0.9558324813842773 0.7118879556655884 0 1.0 0 0.0 0 0.0 0 0.0 0.5771746635437012 0.11358323693275452 -0.2839455306529999 0.0 0.0 -1.0 0.8871405124664307 0.6785171031951904 0 1.0 0 0.0 0 0.0 0 0.0 0.26553797721862793 0.11276590824127197 -0.2839455306529999 0.0 0.0 -1.0 0.08741673827171326 0.6831655502319336 0 1.0 0 0.0 0 0.0 0 0.0 0.3639230728149414 0.11482855677604675 -0.2839455306529999 0.0 0.0 -1.0 0.029174327850341797 0.7101534605026245 0 1.0 0 0.0 0 0.0 0 0.0 0.3621327877044678 0.11351263523101807 -0.2839455306529999 0.0 0.0 -1.0 0.030368447303771973 0.708484947681427 0 1.0 0 0.0 0 0.0 0 0.0 0.4697740077972412 0.1121310293674469 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9520689249038696 0.706916332244873 0 1.0 0 0.0 0 0.0 0 0.0 0.4670755863189697 0.11412802338600159 -0.2839455306529999 0.0 0.0 -1.0 0.9538760185241699 0.7094811201095581 0 1.0 0 0.0 0 0.0 0 0.0 0.5771746635437012 0.11358323693275452 -0.2839455306529999 0.0 0.0 -1.0 0.8871405124664307 0.6785171031951904 0 1.0 0 0.0 0 0.0 0 0.0 0.4697740077972412 0.1121310293674469 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9520689249038696 0.706916332244873 0 1.0 0 0.0 0 0.0 0 0.0 0.5771746635437012 0.11358323693275452 -0.2839455306529999 0.0 0.0 -1.0 0.8871405124664307 0.6785171031951904 0 1.0 0 0.0 0 0.0 0 0.0 0.579991340637207 0.1059650182723999 -0.2839455306529999 0.0 0.0 -1.0 0.8865388035774231 0.6703751087188721 0 1.0 0 0.0 0 0.0 0 0.0 0.26553797721862793 0.11276590824127197 -0.2839455306529999 0.0 0.0 -1.0 0.08741673827171326 0.6831655502319336 0 1.0 0 0.0 0 0.0 0 0.0 0.3621327877044678 0.11351263523101807 -0.2839455306529999 0.0 0.0 -1.0 0.030368447303771973 0.708484947681427 0 1.0 0 0.0 0 0.0 0 0.0 0.36049818992614746 0.11213347315788269 -0.2839455306529999 0.0 0.0 -1.0 0.031444817781448364 0.7067667841911316 0 1.0 0 0.0 0 0.0 0 0.0 0.26368212699890137 0.10545903444290161 -0.2839455306529999 0.0 0.0 -1.0 0.08772853016853333 0.6757197380065918 0 1.0 0 0.0 0 0.0 0 0.0 0.26553797721862793 0.11276590824127197 -0.2839455306529999 0.0 0.0 -1.0 0.08741673827171326 0.6831655502319336 0 1.0 0 0.0 0 0.0 0 0.0 0.36049818992614746 0.11213347315788269 -0.2839455306529999 0.0 0.0 -1.0 0.031444817781448364 0.7067667841911316 0 1.0 0 0.0 0 0.0 0 0.0 0.26368212699890137 0.10545903444290161 -0.2839455306529999 0.0 0.0 -1.0 0.08772853016853333 0.6757197380065918 0 1.0 0 0.0 0 0.0 0 0.0 0.36049818992614746 0.11213347315788269 -0.2839455306529999 0.0 0.0 -1.0 0.031444817781448364 0.7067667841911316 0 1.0 0 0.0 0 0.0 0 0.0 0.35901927947998047 0.11069107055664062 -0.2839455306529999 0.0 0.0 -1.0 0.032404929399490356 0.7050001621246338 0 1.0 0 0.0 0 0.0 0 0.0 0.4723243713378906 0.10999298095703125 -0.2839455306529999 0.0 0.0 -1.0 0.9503912925720215 0.7042018175125122 0 1.0 0 0.0 0 0.0 0 0.0 0.4697740077972412 0.1121310293674469 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9520689249038696 0.706916332244873 0 1.0 0 0.0 0 0.0 0 0.0 0.579991340637207 0.1059650182723999 -0.2839455306529999 0.0 0.0 -1.0 0.8865388035774231 0.6703751087188721 0 1.0 0 0.0 0 0.0 0 0.0 0.26368212699890137 0.10545903444290161 -0.2839455306529999 0.0 0.0 -1.0 0.08772853016853333 0.6757197380065918 0 1.0 0 0.0 0 0.0 0 0.0 0.35901927947998047 0.11069107055664062 -0.2839455306529999 0.0 0.0 -1.0 0.032404929399490356 0.7050001621246338 0 1.0 0 0.0 0 0.0 0 0.0 0.3576960563659668 0.10918542742729187 -0.2839455306529999 0.0 0.0 -1.0 0.033250242471694946 0.7031860947608948 0 1.0 0 0.0 0 0.0 0 0.0 0.47472643852233887 0.10771384835243225 -0.2839455306529999 0.0 0.0 -1.0 0.9488418102264404 0.7013393640518188 0 1.0 0 0.0 0 0.0 0 0.0 0.4723243713378906 0.10999298095703125 -0.2839455306529999 0.0 0.0 -1.0 0.9503912925720215 0.7042018175125122 0 1.0 0 0.0 0 0.0 0 0.0 0.579991340637207 0.1059650182723999 -0.2839455306529999 0.0 0.0 -1.0 0.8865388035774231 0.6703751087188721 0 1.0 0 0.0 0 0.0 0 0.0 0.26368212699890137 0.10545903444290161 -0.2839455306529999 0.0 0.0 -1.0 0.08772853016853333 0.6757197380065918 0 1.0 0 0.0 0 0.0 0 0.0 0.3576960563659668 0.10918542742729187 -0.2839455306529999 0.0 0.0 -1.0 0.033250242471694946 0.7031860947608948 0 1.0 0 0.0 0 0.0 0 0.0 0.35652852058410645 0.10761654376983643 -0.2839455306529999 0.0 0.0 -1.0 0.033982157707214355 0.7013251185417175 0 1.0 0 0.0 0 0.0 0 0.0 0.47697997093200684 0.1052936315536499 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9474191069602966 0.6983301043510437 0 1.0 0 0.0 0 0.0 0 0.0 0.47472643852233887 0.10771384835243225 -0.2839455306529999 0.0 0.0 -1.0 0.9488418102264404 0.7013393640518188 0 1.0 0 0.0 0 0.0 0 0.0 0.579991340637207 0.1059650182723999 -0.2839455306529999 0.0 0.0 -1.0 0.8865388035774231 0.6703751087188721 0 1.0 0 0.0 0 0.0 0 0.0 0.26368212699890137 0.10545903444290161 -0.2839455306529999 0.0 0.0 -1.0 0.08772853016853333 0.6757197380065918 0 1.0 0 0.0 0 0.0 0 0.0 0.35652852058410645 0.10761654376983643 -0.2839455306529999 0.0 0.0 -1.0 0.033982157707214355 0.7013251185417175 0 1.0 0 0.0 0 0.0 0 0.0 0.3555166721343994 0.10598441958427429 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.03460210561752319 0.6994175910949707 0 1.0 0 0.0 0 0.0 0 0.0 0.26368212699890137 0.10545903444290161 -0.2839455306529999 0.0 0.0 -1.0 0.08772853016853333 0.6757197380065918 0 1.0 0 0.0 0 0.0 0 0.0 0.3555166721343994 0.10598441958427429 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.03460210561752319 0.6994175910949707 0 1.0 0 0.0 0 0.0 0 0.0 0.3546605110168457 0.10428905487060547 -0.2839455306529999 0.0 0.0 -1.0 0.03511127829551697 0.6974632740020752 0 1.0 0 0.0 0 0.0 0 0.0 0.47697997093200684 0.1052936315536499 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9474191069602966 0.6983301043510437 0 1.0 0 0.0 0 0.0 0 0.0 0.579991340637207 0.1059650182723999 -0.2839455306529999 0.0 0.0 -1.0 0.8865388035774231 0.6703751087188721 0 1.0 0 0.0 0 0.0 0 0.0 0.5824871063232422 0.0980159342288971 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8861355781555176 0.6619564890861511 0 1.0 0 0.0 0 0.0 0 0.0 0.2623565196990967 0.09793812036514282 -0.2839455306529999 0.0 0.0 -1.0 0.0877656638622284 0.6681522727012634 0 1.0 0 0.0 0 0.0 0 0.0 0.26368212699890137 0.10545903444290161 -0.2839455306529999 0.0 0.0 -1.0 0.08772853016853333 0.6757197380065918 0 1.0 0 0.0 0 0.0 0 0.0 0.3546605110168457 0.10428905487060547 -0.2839455306529999 0.0 0.0 -1.0 0.03511127829551697 0.6974632740020752 0 1.0 0 0.0 0 0.0 0 0.0 0.47908520698547363 0.1027323305606842 -0.2839455306529999 0.0 0.0 -1.0 0.9461212158203125 0.6951746940612793 0 1.0 0 0.0 0 0.0 0 0.0 0.47697997093200684 0.1052936315536499 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9474191069602966 0.6983301043510437 0 1.0 0 0.0 0 0.0 0 0.0 0.5824871063232422 0.0980159342288971 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8861355781555176 0.6619564890861511 0 1.0 0 0.0 0 0.0 0 0.0 0.2623565196990967 0.09793812036514282 -0.2839455306529999 0.0 0.0 -1.0 0.0877656638622284 0.6681522727012634 0 1.0 0 0.0 0 0.0 0 0.0 0.3546605110168457 0.10428905487060547 -0.2839455306529999 0.0 0.0 -1.0 0.03511127829551697 0.6974632740020752 0 1.0 0 0.0 0 0.0 0 0.0 0.3539600372314453 0.10253044962882996 -0.2839455306529999 0.0 0.0 -1.0 0.035510897636413574 0.6954621076583862 0 1.0 0 0.0 0 0.0 0 0.0 0.48104214668273926 0.10002994537353516 -0.2839455306529999 0.0 0.0 -1.0 0.9449462890625 0.6918731927871704 0 1.0 0 0.0 0 0.0 0 0.0 0.47908520698547363 0.1027323305606842 -0.2839455306529999 0.0 0.0 -1.0 0.9461212158203125 0.6951746940612793 0 1.0 0 0.0 0 0.0 0 0.0 0.5824871063232422 0.0980159342288971 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8861355781555176 0.6619564890861511 0 1.0 0 0.0 0 0.0 0 0.0 0.2623565196990967 0.09793812036514282 -0.2839455306529999 0.0 0.0 -1.0 0.0877656638622284 0.6681522727012634 0 1.0 0 0.0 0 0.0 0 0.0 0.3539600372314453 0.10253044962882996 -0.2839455306529999 0.0 0.0 -1.0 0.035510897636413574 0.6954621076583862 0 1.0 0 0.0 0 0.0 0 0.0 0.35341525077819824 0.10070860385894775 -0.2839455306529999 0.0 0.0 -1.0 0.03580203652381897 0.6934133172035217 0 1.0 0 0.0 0 0.0 0 0.0 0.2623565196990967 0.09793812036514282 -0.2839455306529999 0.0 0.0 -1.0 0.0877656638622284 0.6681522727012634 0 1.0 0 0.0 0 0.0 0 0.0 0.35341525077819824 0.10070860385894775 -0.2839455306529999 0.0 0.0 -1.0 0.03580203652381897 0.6934133172035217 0 1.0 0 0.0 0 0.0 0 0.0 0.3530261516571045 0.09882351756095886 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.03598567843437195 0.6913160681724548 0 1.0 0 0.0 0 0.0 0 0.0 0.4828505516052246 0.09718650579452515 -0.2839455306529999 0.0 0.0 -1.0 0.943892776966095 0.6884253621101379 0 1.0 0 0.0 0 0.0 0 0.0 0.48104214668273926 0.10002994537353516 -0.2839455306529999 0.0 0.0 -1.0 0.9449462890625 0.6918731927871704 0 1.0 0 0.0 0 0.0 0 0.0 0.5824871063232422 0.0980159342288971 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8861355781555176 0.6619564890861511 0 1.0 0 0.0 0 0.0 0 0.0 0.2623565196990967 0.09793812036514282 -0.2839455306529999 0.0 0.0 -1.0 0.0877656638622284 0.6681522727012634 0 1.0 0 0.0 0 0.0 0 0.0 0.3530261516571045 0.09882351756095886 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.03598567843437195 0.6913160681724548 0 1.0 0 0.0 0 0.0 0 0.0 0.35279273986816406 0.09687519073486328 -0.2839455306529999 0.0 0.0 -1.0 0.036062777042388916 0.6891690492630005 0 1.0 0 0.0 0 0.0 0 0.0 0.4828505516052246 0.09718650579452515 -0.2839455306529999 0.0 0.0 -1.0 0.943892776966095 0.6884253621101379 0 1.0 0 0.0 0 0.0 0 0.0 0.5824871063232422 0.0980159342288971 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8861355781555176 0.6619564890861511 0 1.0 0 0.0 0 0.0 0 0.0 0.4845106601715088 0.09420198202133179 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9429585933685303 0.6848305463790894 0 1.0 0 0.0 0 0.0 0 0.0 0.4845106601715088 0.09420198202133179 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9429585933685303 0.6848305463790894 0 1.0 0 0.0 0 0.0 0 0.0 0.5824871063232422 0.0980159342288971 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8861355781555176 0.6619564890861511 0 1.0 0 0.0 0 0.0 0 0.0 0.4860224723815918 0.09107637405395508 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9421420097351074 0.6810873746871948 0 1.0 0 0.0 0 0.0 0 0.0 0.4860224723815918 0.09107637405395508 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9421420097351074 0.6810873746871948 0 1.0 0 0.0 0 0.0 0 0.0 0.5824871063232422 0.0980159342288971 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8861355781555176 0.6619564890861511 0 1.0 0 0.0 0 0.0 0 0.0 0.48738574981689453 0.08780968189239502 -0.2839455306529999 0.0 0.0 -1.0 0.9414411783218384 0.6771945357322693 0 1.0 0 0.0 0 0.0 0 0.0 0.48738574981689453 0.08780968189239502 -0.2839455306529999 0.0 0.0 -1.0 0.9414411783218384 0.6771945357322693 0 1.0 0 0.0 0 0.0 0 0.0 0.5824871063232422 0.0980159342288971 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8861355781555176 0.6619564890861511 0 1.0 0 0.0 0 0.0 0 0.0 0.4886007308959961 0.08440190553665161 -0.2839455306529999 0.0 0.0 -1.0 0.9408544301986694 0.6731500029563904 0 1.0 0 0.0 0 0.0 0 0.0 0.4886007308959961 0.08440190553665161 -0.2839455306529999 0.0 0.0 -1.0 0.9408544301986694 0.6731500029563904 0 1.0 0 0.0 0 0.0 0 0.0 0.5824871063232422 0.0980159342288971 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8861355781555176 0.6619564890861511 0 1.0 0 0.0 0 0.0 0 0.0 0.4896674156188965 0.08085307478904724 -0.2839455306529999 0.0 0.0 -1.0 0.9403797388076782 0.6689515113830566 0 1.0 0 0.0 0 0.0 0 0.0 0.26156115531921387 0.09020313620567322 -0.2839455306529999 0.0 0.0 -1.0 0.08753547072410583 0.6604450941085815 0 1.0 0 0.0 0 0.0 0 0.0 0.2623565196990967 0.09793812036514282 -0.2839455306529999 0.0 0.0 -1.0 0.0877656638622284 0.6681522727012634 0 1.0 0 0.0 0 0.0 0 0.0 0.35279273986816406 0.09687519073486328 -0.2839455306529999 0.0 0.0 -1.0 0.036062777042388916 0.6891690492630005 0 1.0 0 0.0 0 0.0 0 0.0 0.26156115531921387 0.09020313620567322 -0.2839455306529999 0.0 0.0 -1.0 0.08753547072410583 0.6604450941085815 0 1.0 0 0.0 0 0.0 0 0.0 0.35279273986816406 0.09687519073486328 -0.2839455306529999 0.0 0.0 -1.0 0.036062777042388916 0.6891690492630005 0 1.0 0 0.0 0 0.0 0 0.0 0.35271477699279785 0.09486359357833862 -0.2839455306529999 0.0 0.0 -1.0 0.036034226417541504 0.6869708895683289 0 1.0 0 0.0 0 0.0 0 0.0 0.26156115531921387 0.09020313620567322 -0.2839455306529999 0.0 0.0 -1.0 0.08753547072410583 0.6604450941085815 0 1.0 0 0.0 0 0.0 0 0.0 0.35271477699279785 0.09486359357833862 -0.2839455306529999 0.0 0.0 -1.0 0.036034226417541504 0.6869708895683289 0 1.0 0 0.0 0 0.0 0 0.0 0.3527829647064209 0.09313416481018066 -0.2839455306529999 0.0 0.0 -1.0 0.035920560359954834 0.6850960850715637 0 1.0 0 0.0 0 0.0 0 0.0 0.26156115531921387 0.09020313620567322 -0.2839455306529999 0.0 0.0 -1.0 0.08753547072410583 0.6604450941085815 0 1.0 0 0.0 0 0.0 0 0.0 0.3527829647064209 0.09313416481018066 -0.2839455306529999 0.0 0.0 -1.0 0.035920560359954834 0.6850960850715637 0 1.0 0 0.0 0 0.0 0 0.0 0.35298728942871094 0.09144851565361023 -0.2839455306529999 0.0 0.0 -1.0 0.035719335079193115 0.6832844018936157 0 1.0 0 0.0 0 0.0 0 0.0 0.26156115531921387 0.09020313620567322 -0.2839455306529999 0.0 0.0 -1.0 0.08753547072410583 0.6604450941085815 0 1.0 0 0.0 0 0.0 0 0.0 0.35298728942871094 0.09144851565361023 -0.2839455306529999 0.0 0.0 -1.0 0.035719335079193115 0.6832844018936157 0 1.0 0 0.0 0 0.0 0 0.0 0.35332775115966797 0.08980664610862732 -0.2839455306529999 0.0 0.0 -1.0 0.03543075919151306 0.6815356016159058 0 1.0 0 0.0 0 0.0 0 0.0 0.26129603385925293 0.08225411176681519 -0.2839455306529999 0.0 0.0 -1.0 0.08704373240470886 0.652578592300415 0 1.0 0 0.0 0 0.0 0 0.0 0.26156115531921387 0.09020313620567322 -0.2839455306529999 0.0 0.0 -1.0 0.08753547072410583 0.6604450941085815 0 1.0 0 0.0 0 0.0 0 0.0 0.35332775115966797 0.08980664610862732 -0.2839455306529999 0.0 0.0 -1.0 0.03543075919151306 0.6815356016159058 0 1.0 0 0.0 0 0.0 0 0.0 0.26129603385925293 0.08225411176681519 -0.2839455306529999 0.0 0.0 -1.0 0.08704373240470886 0.652578592300415 0 1.0 0 0.0 0 0.0 0 0.0 0.35332775115966797 0.08980664610862732 -0.2839455306529999 0.0 0.0 -1.0 0.03543075919151306 0.6815356016159058 0 1.0 0 0.0 0 0.0 0 0.0 0.3538045883178711 0.08820855617523193 -0.2839455306529999 0.0 0.0 -1.0 0.035054922103881836 0.6798495054244995 0 1.0 0 0.0 0 0.0 0 0.0 0.26129603385925293 0.08225411176681519 -0.2839455306529999 0.0 0.0 -1.0 0.08704373240470886 0.652578592300415 0 1.0 0 0.0 0 0.0 0 0.0 0.3538045883178711 0.08820855617523193 -0.2839455306529999 0.0 0.0 -1.0 0.035054922103881836 0.6798495054244995 0 1.0 0 0.0 0 0.0 0 0.0 0.3544175624847412 0.08665427565574646 -0.2839455306529999 0.0 0.0 -1.0 0.0345919132232666 0.6782255172729492 0 1.0 0 0.0 0 0.0 0 0.0 0.26129603385925293 0.08225411176681519 -0.2839455306529999 0.0 0.0 -1.0 0.08704373240470886 0.652578592300415 0 1.0 0 0.0 0 0.0 0 0.0 0.3544175624847412 0.08665427565574646 -0.2839455306529999 0.0 0.0 -1.0 0.0345919132232666 0.6782255172729492 0 1.0 0 0.0 0 0.0 0 0.0 0.3551666736602783 0.08514377474784851 -0.2839455306529999 0.0 0.0 -1.0 0.03404173254966736 0.6766632795333862 0 1.0 0 0.0 0 0.0 0 0.0 0.26129603385925293 0.08225411176681519 -0.2839455306529999 0.0 0.0 -1.0 0.08704373240470886 0.652578592300415 0 1.0 0 0.0 0 0.0 0 0.0 0.3551666736602783 0.08514377474784851 -0.2839455306529999 0.0 0.0 -1.0 0.03404173254966736 0.6766632795333862 0 1.0 0 0.0 0 0.0 0 0.0 0.3560521602630615 0.08367705345153809 -0.2839455306529999 0.0 0.0 -1.0 0.03340405225753784 0.6751619577407837 0 1.0 0 0.0 0 0.0 0 0.0 0.26129603385925293 0.08225411176681519 -0.2839455306529999 0.0 0.0 -1.0 0.08704373240470886 0.652578592300415 0 1.0 0 0.0 0 0.0 0 0.0 0.3560521602630615 0.08367705345153809 -0.2839455306529999 0.0 0.0 -1.0 0.03340405225753784 0.6751619577407837 0 1.0 0 0.0 0 0.0 0 0.0 0.3570737838745117 0.08225411176681519 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.03267878293991089 0.6737209558486938 0 1.0 0 0.0 0 0.0 0 0.0 0.26160287857055664 0.0734853744506836 -0.2839455306529999 0.0 0.0 -1.0 0.08622869849205017 0.6439356207847595 0 1.0 0 0.0 0 0.0 0 0.0 0.26129603385925293 0.08225411176681519 -0.2839455306529999 0.0 0.0 -1.0 0.08704373240470886 0.652578592300415 0 1.0 0 0.0 0 0.0 0 0.0 0.3570737838745117 0.08225411176681519 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.03267878293991089 0.6737209558486938 0 1.0 0 0.0 0 0.0 0 0.0 0.26160287857055664 0.0734853744506836 -0.2839455306529999 0.0 0.0 -1.0 0.08622869849205017 0.6439356207847595 0 1.0 0 0.0 0 0.0 0 0.0 0.3570737838745117 0.08225411176681519 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.03267878293991089 0.6737209558486938 0 1.0 0 0.0 0 0.0 0 0.0 0.3582315444946289 0.08087494969367981 -0.2839455306529999 0.0 0.0 -1.0 0.031865477561950684 0.6723393201828003 0 1.0 0 0.0 0 0.0 0 0.0 0.26160287857055664 0.0734853744506836 -0.2839455306529999 0.0 0.0 -1.0 0.08622869849205017 0.6439356207847595 0 1.0 0 0.0 0 0.0 0 0.0 0.3582315444946289 0.08087494969367981 -0.2839455306529999 0.0 0.0 -1.0 0.031865477561950684 0.6723393201828003 0 1.0 0 0.0 0 0.0 0 0.0 0.3595256805419922 0.07953956723213196 -0.2839455306529999 0.0 0.0 -1.0 0.030963599681854248 0.6710162162780762 0 1.0 0 0.0 0 0.0 0 0.0 0.26160287857055664 0.0734853744506836 -0.2839455306529999 0.0 0.0 -1.0 0.08622869849205017 0.6439356207847595 0 1.0 0 0.0 0 0.0 0 0.0 0.3595256805419922 0.07953956723213196 -0.2839455306529999 0.0 0.0 -1.0 0.030963599681854248 0.6710162162780762 0 1.0 0 0.0 0 0.0 0 0.0 0.36095595359802246 0.07824796438217163 -0.2839455306529999 0.0 0.0 -1.0 0.029972761869430542 0.669750452041626 0 1.0 0 0.0 0 0.0 0 0.0 0.26160287857055664 0.0734853744506836 -0.2839455306529999 0.0 0.0 -1.0 0.08622869849205017 0.6439356207847595 0 1.0 0 0.0 0 0.0 0 0.0 0.36095595359802246 0.07824796438217163 -0.2839455306529999 0.0 0.0 -1.0 0.029972761869430542 0.669750452041626 0 1.0 0 0.0 0 0.0 0 0.0 0.3625221252441406 0.07700017094612122 -0.2839455306529999 0.0 0.0 -1.0 0.028892487287521362 0.668540894985199 0 1.0 0 0.0 0 0.0 0 0.0 0.26160287857055664 0.0734853744506836 -0.2839455306529999 0.0 0.0 -1.0 0.08622869849205017 0.6439356207847595 0 1.0 0 0.0 0 0.0 0 0.0 0.3625221252441406 0.07700017094612122 -0.2839455306529999 0.0 0.0 -1.0 0.028892487287521362 0.668540894985199 0 1.0 0 0.0 0 0.0 0 0.0 0.36519408226013184 0.07530966401100159 -0.2839455306529999 0.0 0.0 -1.0 0.027060627937316895 0.6669516563415527 0 1.0 0 0.0 0 0.0 0 0.0 0.26160287857055664 0.0734853744506836 -0.2839455306529999 0.0 0.0 -1.0 0.08622869849205017 0.6439356207847595 0 1.0 0 0.0 0 0.0 0 0.0 0.36519408226013184 0.07530966401100159 -0.2839455306529999 0.0 0.0 -1.0 0.027060627937316895 0.6669516563415527 0 1.0 0 0.0 0 0.0 0 0.0 0.3687732219696045 0.07350727915763855 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.024613529443740845 0.6653088331222534 0 1.0 0 0.0 0 0.0 0 0.0 0.26160287857055664 0.0734853744506836 -0.2839455306529999 0.0 0.0 -1.0 0.08622869849205017 0.6439356207847595 0 1.0 0 0.0 0 0.0 0 0.0 0.3687732219696045 0.07350727915763855 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.024613529443740845 0.6653088331222534 0 1.0 0 0.0 0 0.0 0 0.0 0.3732597827911377 0.07159298658370972 -0.2839455306529999 0.0 0.0 -1.0 0.021542906761169434 0.6635837554931641 0 1.0 0 0.0 0 0.0 0 0.0 0.26252222061157227 0.06504258513450623 -0.2839455306529999 0.0 0.0 -1.0 0.08516183495521545 0.635638952255249 0 1.0 0 0.0 0 0.0 0 0.0 0.26160287857055664 0.0734853744506836 -0.2839455306529999 0.0 0.0 -1.0 0.08622869849205017 0.6439356207847595 0 1.0 0 0.0 0 0.0 0 0.0 0.3732597827911377 0.07159298658370972 -0.2839455306529999 0.0 0.0 -1.0 0.021542906761169434 0.6635837554931641 0 1.0 0 0.0 0 0.0 0 0.0 0.26252222061157227 0.06504258513450623 -0.2839455306529999 0.0 0.0 -1.0 0.08516183495521545 0.635638952255249 0 1.0 0 0.0 0 0.0 0 0.0 0.3732597827911377 0.07159298658370972 -0.2839455306529999 0.0 0.0 -1.0 0.021542906761169434 0.6635837554931641 0 1.0 0 0.0 0 0.0 0 0.0 0.37865352630615234 0.06956681609153748 -0.2839455306529999 0.0 0.0 -1.0 0.017840147018432617 0.6617413759231567 0 1.0 0 0.0 0 0.0 0 0.0 0.26252222061157227 0.06504258513450623 -0.2839455306529999 0.0 0.0 -1.0 0.08516183495521545 0.635638952255249 0 1.0 0 0.0 0 0.0 0 0.0 0.37865352630615234 0.06956681609153748 -0.2839455306529999 0.0 0.0 -1.0 0.017840147018432617 0.6617413759231567 0 1.0 0 0.0 0 0.0 0 0.0 0.38495469093322754 0.06742876768112183 -0.2839455306529999 0.0 0.0 -1.0 0.013496875762939453 0.6597400903701782 0 1.0 0 0.0 0 0.0 0 0.0 0.26252222061157227 0.06504258513450623 -0.2839455306529999 0.0 0.0 -1.0 0.08516183495521545 0.635638952255249 0 1.0 0 0.0 0 0.0 0 0.0 0.38495469093322754 0.06742876768112183 -0.2839455306529999 0.0 0.0 -1.0 0.013496875762939453 0.6597400903701782 0 1.0 0 0.0 0 0.0 0 0.0 0.3921630382537842 0.06517881155014038 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.008507370948791504 0.6575324535369873 0 1.0 0 0.0 0 0.0 0 0.0 0.26252222061157227 0.06504258513450623 -0.2839455306529999 0.0 0.0 -1.0 0.08516183495521545 0.635638952255249 0 1.0 0 0.0 0 0.0 0 0.0 0.3921630382537842 0.06517881155014038 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.008507370948791504 0.6575324535369873 0 1.0 0 0.0 0 0.0 0 0.0 0.40027856826782227 0.06281697750091553 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.002870500087738037 0.6550652384757996 0 1.0 0 0.0 0 0.0 0 0.0 0.264054536819458 0.05692572891712189 -0.2839455306529999 0.0 0.0 -1.0 0.08384156227111816 0.6276837587356567 0 1.0 0 0.0 0 0.0 0 0.0 0.26252222061157227 0.06504258513450623 -0.2839455306529999 0.0 0.0 -1.0 0.08516183495521545 0.635638952255249 0 1.0 0 0.0 0 0.0 0 0.0 0.40027856826782227 0.06281697750091553 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.002870500087738037 0.6550652384757996 0 1.0 0 0.0 0 0.0 0 0.0 0.264054536819458 0.05692572891712189 -0.2839455306529999 0.0 0.0 -1.0 1.0838415622711182 0.6276837587356567 0 1.0 0 0.0 0 0.0 0 0.0 0.40027856826782227 0.06281697750091553 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0028705596923828 0.6550652384757996 0 1.0 0 0.0 0 0.0 0 0.0 0.4093015193939209 0.06034325063228607 -0.2839455306529999 0.0 0.0 -1.0 0.9965918064117432 0.6522815227508545 0 1.0 0 0.0 0 0.0 0 0.0 0.264054536819458 0.05692572891712189 -0.2839455306529999 0.0 0.0 -1.0 1.0838415622711182 0.6276837587356567 0 1.0 0 0.0 0 0.0 0 0.0 0.4093015193939209 0.06034325063228607 -0.2839455306529999 0.0 0.0 -1.0 0.9965918064117432 0.6522815227508545 0 1.0 0 0.0 0 0.0 0 0.0 0.419231653213501 0.057757630944252014 -0.2839455306529999 0.0 0.0 -1.0 0.9896869659423828 0.6491220593452454 0 1.0 0 0.0 0 0.0 0 0.0 0.264054536819458 0.05692572891712189 -0.2839455306529999 0.0 0.0 -1.0 1.0838415622711182 0.6276837587356567 0 1.0 0 0.0 0 0.0 0 0.0 0.419231653213501 0.057757630944252014 -0.2839455306529999 0.0 0.0 -1.0 0.9896869659423828 0.6491220593452454 0 1.0 0 0.0 0 0.0 0 0.0 0.4300692081451416 0.055060118436813354 -0.2839455306529999 0.0 0.0 -1.0 0.9821839332580566 0.6455293893814087 0 1.0 0 0.0 0 0.0 0 0.0 0.26619982719421387 0.04913482069969177 -0.2839455306529999 0.0 0.0 -1.0 1.0822646617889404 0.6200634241104126 0 1.0 0 0.0 0 0.0 0 0.0 0.264054536819458 0.05692572891712189 -0.2839455306529999 0.0 0.0 -1.0 1.0838415622711182 0.6276837587356567 0 1.0 0 0.0 0 0.0 0 0.0 0.4300692081451416 0.055060118436813354 -0.2839455306529999 0.0 0.0 -1.0 0.9821839332580566 0.6455293893814087 0 1.0 0 0.0 0 0.0 0 0.0 0.26619982719421387 0.04913482069969177 -0.2839455306529999 0.0 0.0 -1.0 1.0822646617889404 0.6200634241104126 0 1.0 0 0.0 0 0.0 0 0.0 0.4300692081451416 0.055060118436813354 -0.2839455306529999 0.0 0.0 -1.0 0.9821839332580566 0.6455293893814087 0 1.0 0 0.0 0 0.0 0 0.0 0.44181394577026367 0.05225071310997009 -0.2839455306529999 0.0 0.0 -1.0 0.9741256237030029 0.6414514183998108 0 1.0 0 0.0 0 0.0 0 0.0 0.26619982719421387 0.04913482069969177 -0.2839455306529999 0.0 0.0 -1.0 1.0822646617889404 0.6200634241104126 0 1.0 0 0.0 0 0.0 0 0.0 0.44181394577026367 0.05225071310997009 -0.2839455306529999 0.0 0.0 -1.0 0.9741256237030029 0.6414514183998108 0 1.0 0 0.0 0 0.0 0 0.0 0.4544661045074463 0.04932942986488342 -0.2839455306529999 0.0 0.0 -1.0 0.9655709862709045 0.6368472576141357 0 1.0 0 0.0 0 0.0 0 0.0 0.26619982719421387 0.04913482069969177 -0.2839455306529999 0.0 0.0 -1.0 1.0822646617889404 0.6200634241104126 0 1.0 0 0.0 0 0.0 0 0.0 0.4544661045074463 0.04932942986488342 -0.2839455306529999 0.0 0.0 -1.0 0.9655709862709045 0.6368472576141357 0 1.0 0 0.0 0 0.0 0 0.0 0.4672422409057617 0.04629625380039215 -0.2839455306529999 0.0 0.0 -1.0 0.9571162462234497 0.6317852735519409 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 0.04166984558105469 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0804256200790405 0.6127703785896301 0 1.0 0 0.0 0 0.0 0 0.0 0.26619982719421387 0.04913482069969177 -0.2839455306529999 0.0 0.0 -1.0 1.0822646617889404 0.6200634241104126 0 1.0 0 0.0 0 0.0 0 0.0 0.4672422409057617 0.04629625380039215 -0.2839455306529999 0.0 0.0 -1.0 0.9571162462234497 0.6317852735519409 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 0.04166984558105469 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0804256200790405 0.6127703785896301 0 1.0 0 0.0 0 0.0 0 0.0 0.4672422409057617 0.04629625380039215 -0.2839455306529999 0.0 0.0 -1.0 0.9571162462234497 0.6317852735519409 0 1.0 0 0.0 0 0.0 0 0.0 0.47935914993286133 0.04315118491649628 -0.2839455306529999 0.0 0.0 -1.0 0.9493167996406555 0.6264195442199707 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 0.04166984558105469 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0804256200790405 0.6127703785896301 0 1.0 0 0.0 0 0.0 0 0.0 0.47935914993286133 0.04315118491649628 -0.2839455306529999 0.0 0.0 -1.0 0.9493167996406555 0.6264195442199707 0 1.0 0 0.0 0 0.0 0 0.0 0.4908168315887451 0.0398942232131958 -0.2839455306529999 0.0 0.0 -1.0 0.9421719908714294 0.6208404302597046 0 1.0 0 0.0 0 0.0 0 0.0 0.27232933044433594 0.034530818462371826 -0.2839455306529999 0.0 0.0 -1.0 1.0783171653747559 0.605796217918396 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 0.04166984558105469 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0804256200790405 0.6127703785896301 0 1.0 0 0.0 0 0.0 0 0.0 0.4908168315887451 0.0398942232131958 -0.2839455306529999 0.0 0.0 -1.0 0.9421719908714294 0.6208404302597046 0 1.0 0 0.0 0 0.0 0 0.0 0.27232933044433594 0.034530818462371826 -0.2839455306529999 0.0 0.0 -1.0 1.0783171653747559 0.605796217918396 0 1.0 0 0.0 0 0.0 0 0.0 0.4908168315887451 0.0398942232131958 -0.2839455306529999 0.0 0.0 -1.0 0.9421719908714294 0.6208404302597046 0 1.0 0 0.0 0 0.0 0 0.0 0.5016152858734131 0.036525383591651917 -0.2839455306529999 0.0 0.0 -1.0 0.9356679320335388 0.6151246428489685 0 1.0 0 0.0 0 0.0 0 0.0 0.27232933044433594 0.034530818462371826 -0.2839455306529999 0.0 0.0 -1.0 1.0783171653747559 0.605796217918396 0 1.0 0 0.0 0 0.0 0 0.0 0.5016152858734131 0.036525383591651917 -0.2839455306529999 0.0 0.0 -1.0 0.9356679320335388 0.6151246428489685 0 1.0 0 0.0 0 0.0 0 0.0 0.5117547512054443 0.03304465115070343 -0.2839455306529999 0.0 0.0 -1.0 0.9297819137573242 0.6093344688415527 0 1.0 0 0.0 0 0.0 0 0.0 0.27631354331970215 0.027717724442481995 -0.2839455306529999 0.0 0.0 -1.0 1.0759299993515015 0.5991324186325073 0 1.0 0 0.0 0 0.0 0 0.0 0.27232933044433594 0.034530818462371826 -0.2839455306529999 0.0 0.0 -1.0 1.0783171653747559 0.605796217918396 0 1.0 0 0.0 0 0.0 0 0.0 0.5117547512054443 0.03304465115070343 -0.2839455306529999 0.0 0.0 -1.0 0.9297819137573242 0.6093344688415527 0 1.0 0 0.0 0 0.0 0 0.0 0.27631354331970215 0.027717724442481995 -0.2839455306529999 0.0 0.0 -1.0 1.0759299993515015 0.5991324186325073 0 1.0 0 0.0 0 0.0 0 0.0 0.5117547512054443 0.03304465115070343 -0.2839455306529999 0.0 0.0 -1.0 0.9297819137573242 0.6093344688415527 0 1.0 0 0.0 0 0.0 0 0.0 0.5212349891662598 0.029452025890350342 -0.2839455306529999 0.0 0.0 -1.0 0.9244858622550964 0.6035184860229492 0 1.0 0 0.0 0 0.0 0 0.0 0.27631354331970215 0.027717724442481995 -0.2839455306529999 0.0 0.0 -1.0 1.0759299993515015 0.5991324186325073 0 1.0 0 0.0 0 0.0 0 0.0 0.5212349891662598 0.029452025890350342 -0.2839455306529999 0.0 0.0 -1.0 0.9244858622550964 0.6035184860229492 0 1.0 0 0.0 0 0.0 0 0.0 0.5300559997558594 0.02574750781059265 -0.2839455306529999 0.0 0.0 -1.0 0.9197486042976379 0.5977127552032471 0 1.0 0 0.0 0 0.0 0 0.0 0.2809107303619385 0.021230563521385193 -0.2839455306529999 0.0 0.0 -1.0 1.0732531547546387 0.5927700996398926 0 1.0 0 0.0 0 0.0 0 0.0 0.27631354331970215 0.027717724442481995 -0.2839455306529999 0.0 0.0 -1.0 1.0759299993515015 0.5991324186325073 0 1.0 0 0.0 0 0.0 0 0.0 0.5300559997558594 0.02574750781059265 -0.2839455306529999 0.0 0.0 -1.0 0.9197486042976379 0.5977127552032471 0 1.0 0 0.0 0 0.0 0 0.0 0.2809107303619385 0.021230563521385193 -0.2839455306529999 0.0 0.0 -1.0 1.0732531547546387 0.5927700996398926 0 1.0 0 0.0 0 0.0 0 0.0 0.5300559997558594 0.02574750781059265 -0.2839455306529999 0.0 0.0 -1.0 0.9197486042976379 0.5977127552032471 0 1.0 0 0.0 0 0.0 0 0.0 0.5382177829742432 0.02193109691143036 -0.2839455306529999 0.0 0.0 -1.0 0.9155381917953491 0.5919424295425415 0 1.0 0 0.0 0 0.0 0 0.0 0.2809107303619385 0.021230563521385193 -0.2839455306529999 0.0 0.0 -1.0 1.0732531547546387 0.5927700996398926 0 1.0 0 0.0 0 0.0 0 0.0 0.5382177829742432 0.02193109691143036 -0.2839455306529999 0.0 0.0 -1.0 0.9155381917953491 0.5919424295425415 0 1.0 0 0.0 0 0.0 0 0.0 0.5457203388214111 0.018002808094024658 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9118230938911438 0.5862237811088562 0 1.0 0 0.0 0 0.0 0 0.0 0.2861208915710449 0.015069350600242615 -0.2839455306529999 0.0 0.0 -1.0 1.070273518562317 0.5867007374763489 0 1.0 0 0.0 0 0.0 0 0.0 0.2809107303619385 0.021230563521385193 -0.2839455306529999 0.0 0.0 -1.0 1.0732531547546387 0.5927700996398926 0 1.0 0 0.0 0 0.0 0 0.0 0.5457203388214111 0.018002808094024658 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9118230938911438 0.5862237811088562 0 1.0 0 0.0 0 0.0 0 0.0 0.2861208915710449 0.015069350600242615 -0.2839455306529999 0.0 0.0 -1.0 1.070273518562317 0.5867007374763489 0 1.0 0 0.0 0 0.0 0 0.0 0.5457203388214111 0.018002808094024658 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9118230938911438 0.5862237811088562 0 1.0 0 0.0 0 0.0 0 0.0 0.5525639057159424 0.013962626457214355 -0.2839455306529999 0.0 0.0 -1.0 0.9085732102394104 0.580565333366394 0 1.0 0 0.0 0 0.0 0 0.0 0.2919440269470215 0.009234070777893066 -0.2839455306529999 0.0 0.0 -1.0 1.06697678565979 0.5809164047241211 0 1.0 0 0.0 0 0.0 0 0.0 0.2861208915710449 0.015069350600242615 -0.2839455306529999 0.0 0.0 -1.0 1.070273518562317 0.5867007374763489 0 1.0 0 0.0 0 0.0 0 0.0 0.5525639057159424 0.013962626457214355 -0.2839455306529999 0.0 0.0 -1.0 0.9085732102394104 0.580565333366394 0 1.0 0 0.0 0 0.0 0 0.0 0.2919440269470215 0.009234070777893066 -0.2839455306529999 0.0 0.0 -1.0 1.06697678565979 0.5809164047241211 0 1.0 0 0.0 0 0.0 0 0.0 0.5525639057159424 0.013962626457214355 -0.2839455306529999 0.0 0.0 -1.0 0.9085732102394104 0.580565333366394 0 1.0 0 0.0 0 0.0 0 0.0 0.5587482452392578 0.00981055200099945 -0.2839455306529999 0.0 0.0 -1.0 0.9057610034942627 0.5749698281288147 0 1.0 0 0.0 0 0.0 0 0.0 0.2919440269470215 0.009234070777893066 -0.2839455306529999 0.0 0.0 -1.0 1.06697678565979 0.5809164047241211 0 1.0 0 0.0 0 0.0 0 0.0 0.5587482452392578 0.00981055200099945 -0.2839455306529999 0.0 0.0 -1.0 0.9057610034942627 0.5749698281288147 0 1.0 0 0.0 0 0.0 0 0.0 0.5642733573913574 0.005546584725379944 -0.2839455306529999 0.0 0.0 -1.0 0.9033610820770264 0.569435179233551 0 1.0 0 0.0 0 0.0 0 0.0 0.29838013648986816 0.0037247389554977417 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0633471012115479 0.5754096508026123 0 1.0 0 0.0 0 0.0 0 0.0 0.2919440269470215 0.009234070777893066 -0.2839455306529999 0.0 0.0 -1.0 1.06697678565979 0.5809164047241211 0 1.0 0 0.0 0 0.0 0 0.0 0.5642733573913574 0.005546584725379944 -0.2839455306529999 0.0 0.0 -1.0 0.9033610820770264 0.569435179233551 0 1.0 0 0.0 0 0.0 0 0.0 0.29838013648986816 0.0037247389554977417 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0633471012115479 0.5754096508026123 0 1.0 0 0.0 0 0.0 0 0.0 0.5642733573913574 0.005546584725379944 -0.2839455306529999 0.0 0.0 -1.0 0.9033610820770264 0.569435179233551 0 1.0 0 0.0 0 0.0 0 0.0 0.5691964626312256 0.0010247975587844849 -0.2839455306529999 0.0 0.0 -1.0 0.901335597038269 0.563788652420044 0 1.0 0 0.0 0 0.0 0 0.0 0.30542922019958496 -0.0014586597681045532 -0.2839455306529999 0.0 0.0 -1.0 1.059367060661316 0.5701738595962524 0 1.0 0 0.0 0 0.0 0 0.0 0.29838013648986816 0.0037247389554977417 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0633471012115479 0.5754096508026123 0 1.0 0 0.0 0 0.0 0 0.0 0.5691964626312256 0.0010247975587844849 -0.2839455306529999 0.0 0.0 -1.0 0.901335597038269 0.563788652420044 0 1.0 0 0.0 0 0.0 0 0.0 0.30542922019958496 -0.0014586597681045532 -0.2839455306529999 0.0 0.0 -1.0 1.059367060661316 0.5701738595962524 0 1.0 0 0.0 0 0.0 0 0.0 0.5691964626312256 0.0010247975587844849 -0.2839455306529999 0.0 0.0 -1.0 0.901335597038269 0.563788652420044 0 1.0 0 0.0 0 0.0 0 0.0 0.5736916065216064 -0.0037840157747268677 -0.2839455306529999 0.0 0.0 -1.0 0.8995860815048218 0.5579735040664673 0 1.0 0 0.0 0 0.0 0 0.0 0.31134724617004395 -0.005109667778015137 -0.2839455306529999 0.0 0.0 -1.0 1.0560194253921509 0.5664652585983276 0 1.0 0 0.0 0 0.0 0 0.0 0.30542922019958496 -0.0014586597681045532 -0.2839455306529999 0.0 0.0 -1.0 1.059367060661316 0.5701738595962524 0 1.0 0 0.0 0 0.0 0 0.0 0.5736916065216064 -0.0037840157747268677 -0.2839455306529999 0.0 0.0 -1.0 0.8995860815048218 0.5579735040664673 0 1.0 0 0.0 0 0.0 0 0.0 0.31134724617004395 -0.005109667778015137 -0.2839455306529999 0.0 0.0 -1.0 1.0560194253921509 0.5664652585983276 0 1.0 0 0.0 0 0.0 0 0.0 0.5736916065216064 -0.0037840157747268677 -0.2839455306529999 0.0 0.0 -1.0 0.8995860815048218 0.5579735040664673 0 1.0 0 0.0 0 0.0 0 0.0 0.5777585506439209 -0.008879855275154114 -0.2839455306529999 0.0 0.0 -1.0 0.898100733757019 0.5519903302192688 0 1.0 0 0.0 0 0.0 0 0.0 0.31847643852233887 -0.00882391631603241 -0.2839455306529999 0.0 0.0 -1.0 1.051966905593872 0.5626710653305054 0 1.0 0 0.0 0 0.0 0 0.0 0.31134724617004395 -0.005109667778015137 -0.2839455306529999 0.0 0.0 -1.0 1.0560194253921509 0.5664652585983276 0 1.0 0 0.0 0 0.0 0 0.0 0.5777585506439209 -0.008879855275154114 -0.2839455306529999 0.0 0.0 -1.0 0.898100733757019 0.5519903302192688 0 1.0 0 0.0 0 0.0 0 0.0 0.32681703567504883 -0.012601405382156372 -0.2839455306529999 0.0 0.0 -1.0 1.047176718711853 0.5587554574012756 0 1.0 0 0.0 0 0.0 0 0.0 0.31847643852233887 -0.00882391631603241 -0.2839455306529999 0.0 0.0 -1.0 1.051966905593872 0.5626710653305054 0 1.0 0 0.0 0 0.0 0 0.0 0.5777585506439209 -0.008879855275154114 -0.2839455306529999 0.0 0.0 -1.0 0.898100733757019 0.5519903302192688 0 1.0 0 0.0 0 0.0 0 0.0 0.32681703567504883 -0.012601405382156372 -0.2839455306529999 0.0 0.0 -1.0 1.047176718711853 0.5587554574012756 0 1.0 0 0.0 0 0.0 0 0.0 0.5777585506439209 -0.008879855275154114 -0.2839455306529999 0.0 0.0 -1.0 0.898100733757019 0.5519903302192688 0 1.0 0 0.0 0 0.0 0 0.0 0.581397294998169 -0.01426270604133606 -0.2839455306529999 0.0 0.0 -1.0 0.8968684673309326 0.5458382368087769 0 1.0 0 0.0 0 0.0 0 0.0 0.33636903762817383 -0.016442134976387024 -0.2839455306529999 0.0 0.0 -1.0 1.041614294052124 0.554681658744812 0 1.0 0 0.0 0 0.0 0 0.0 0.32681703567504883 -0.012601405382156372 -0.2839455306529999 0.0 0.0 -1.0 1.047176718711853 0.5587554574012756 0 1.0 0 0.0 0 0.0 0 0.0 0.581397294998169 -0.01426270604133606 -0.2839455306529999 0.0 0.0 -1.0 0.8968684673309326 0.5458382368087769 0 1.0 0 0.0 0 0.0 0 0.0 0.33636903762817383 -0.016442134976387024 -0.2839455306529999 0.0 0.0 -1.0 1.041614294052124 0.554681658744812 0 1.0 0 0.0 0 0.0 0 0.0 0.581397294998169 -0.01426270604133606 -0.2839455306529999 0.0 0.0 -1.0 0.8968684673309326 0.5458382368087769 0 1.0 0 0.0 0 0.0 0 0.0 0.5846080780029297 -0.0199325829744339 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8958795666694641 0.5395151376724243 0 1.0 0 0.0 0 0.0 0 0.0 0.34713220596313477 -0.020346105098724365 -0.2839455306529999 0.0 0.0 -1.0 1.0352461338043213 0.5504134297370911 0 1.0 0 0.0 0 0.0 0 0.0 0.33636903762817383 -0.016442134976387024 -0.2839455306529999 0.0 0.0 -1.0 1.041614294052124 0.554681658744812 0 1.0 0 0.0 0 0.0 0 0.0 0.5846080780029297 -0.0199325829744339 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8958795666694641 0.5395151376724243 0 1.0 0 0.0 0 0.0 0 0.0 0.34713220596313477 -0.020346105098724365 -0.2839455306529999 0.0 0.0 -1.0 1.0352461338043213 0.5504134297370911 0 1.0 0 0.0 0 0.0 0 0.0 0.5846080780029297 -0.0199325829744339 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8958795666694641 0.5395151376724243 0 1.0 0 0.0 0 0.0 0 0.0 0.587390661239624 -0.025889486074447632 -0.2839455306529999 0.0 0.0 -1.0 0.8951253294944763 0.5330183506011963 0 1.0 0 0.0 0 0.0 0 0.0 0.35910677909851074 -0.024313315749168396 -0.2839455306529999 0.0 0.0 -1.0 1.0280427932739258 0.545917272567749 0 1.0 0 0.0 0 0.0 0 0.0 0.34713220596313477 -0.020346105098724365 -0.2839455306529999 0.0 0.0 -1.0 1.0352461338043213 0.5504134297370911 0 1.0 0 0.0 0 0.0 0 0.0 0.587390661239624 -0.025889486074447632 -0.2839455306529999 0.0 0.0 -1.0 0.8951253294944763 0.5330183506011963 0 1.0 0 0.0 0 0.0 0 0.0 0.37229275703430176 -0.028343766927719116 -0.2839455306529999 0.0 0.0 -1.0 1.019985318183899 0.541165828704834 0 1.0 0 0.0 0 0.0 0 0.0 0.35910677909851074 -0.024313315749168396 -0.2839455306529999 0.0 0.0 -1.0 1.0280427932739258 0.545917272567749 0 1.0 0 0.0 0 0.0 0 0.0 0.587390661239624 -0.025889486074447632 -0.2839455306529999 0.0 0.0 -1.0 0.8951253294944763 0.5330183506011963 0 1.0 0 0.0 0 0.0 0 0.0 0.37229275703430176 -0.028343766927719116 -0.2839455306529999 0.0 0.0 -1.0 1.019985318183899 0.541165828704834 0 1.0 0 0.0 0 0.0 0 0.0 0.587390661239624 -0.025889486074447632 -0.2839455306529999 0.0 0.0 -1.0 0.8951253294944763 0.5330183506011963 0 1.0 0 0.0 0 0.0 0 0.0 0.589745283126831 -0.032133400440216064 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8945980072021484 0.526344895362854 0 1.0 0 0.0 0 0.0 0 0.0 0.3866901397705078 -0.032437458634376526 -0.2839455306529999 0.0 0.0 -1.0 1.0110704898834229 0.5361419320106506 0 1.0 0 0.0 0 0.0 0 0.0 0.37229275703430176 -0.028343766927719116 -0.2839455306529999 0.0 0.0 -1.0 1.019985318183899 0.541165828704834 0 1.0 0 0.0 0 0.0 0 0.0 0.589745283126831 -0.032133400440216064 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8945980072021484 0.526344895362854 0 1.0 0 0.0 0 0.0 0 0.0 0.3866901397705078 -0.032437458634376526 -0.2839455306529999 0.0 0.0 -1.0 1.0110704898834229 0.5361419320106506 0 1.0 0 0.0 0 0.0 0 0.0 0.589745283126831 -0.032133400440216064 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8945980072021484 0.526344895362854 0 1.0 0 0.0 0 0.0 0 0.0 0.5916717052459717 -0.03866434097290039 -0.2839455306529999 0.0 0.0 -1.0 0.8942910432815552 0.5194913148880005 0 1.0 0 0.0 0 0.0 0 0.0 0.4022986888885498 -0.036594390869140625 -0.2839455306529999 0.0 0.0 -1.0 1.0013192892074585 0.5308443307876587 0 1.0 0 0.0 0 0.0 0 0.0 0.3866901397705078 -0.032437458634376526 -0.2839455306529999 0.0 0.0 -1.0 1.0110704898834229 0.5361419320106506 0 1.0 0 0.0 0 0.0 0 0.0 0.5916717052459717 -0.03866434097290039 -0.2839455306529999 0.0 0.0 -1.0 0.8942910432815552 0.5194913148880005 0 1.0 0 0.0 0 0.0 0 0.0 0.41911864280700684 -0.040814563632011414 -0.2839455306529999 0.0 0.0 -1.0 0.9907824397087097 0.5252926349639893 0 1.0 0 0.0 0 0.0 0 0.0 0.4022986888885498 -0.036594390869140625 -0.2839455306529999 0.0 0.0 -1.0 1.0013192892074585 0.5308443307876587 0 1.0 0 0.0 0 0.0 0 0.0 0.5916717052459717 -0.03866434097290039 -0.2839455306529999 0.0 0.0 -1.0 0.8942910432815552 0.5194913148880005 0 1.0 0 0.0 0 0.0 0 0.0 0.41911864280700684 -0.040814563632011414 -0.2839455306529999 0.0 0.0 -1.0 0.9907824397087097 0.5252926349639893 0 1.0 0 0.0 0 0.0 0 0.0 0.5916717052459717 -0.03866434097290039 -0.2839455306529999 0.0 0.0 -1.0 0.8942910432815552 0.5194913148880005 0 1.0 0 0.0 0 0.0 0 0.0 0.593170166015625 -0.04548230767250061 -0.2839455306529999 0.0 0.0 -1.0 0.8941986560821533 0.5124542713165283 0 1.0 0 0.0 0 0.0 0 0.0 0.4371500015258789 -0.045097991824150085 -0.2839455306529999 0.0 0.0 -1.0 0.9795475006103516 0.5195319652557373 0 1.0 0 0.0 0 0.0 0 0.0 0.41911864280700684 -0.040814563632011414 -0.2839455306529999 0.0 0.0 -1.0 0.9907824397087097 0.5252926349639893 0 1.0 0 0.0 0 0.0 0 0.0 0.593170166015625 -0.04548230767250061 -0.2839455306529999 0.0 0.0 -1.0 0.8941986560821533 0.5124542713165283 0 1.0 0 0.0 0 0.0 0 0.0 0.4563925266265869 -0.04944466054439545 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9677401781082153 0.513634443283081 0 1.0 0 0.0 0 0.0 0 0.0 0.4371500015258789 -0.045097991824150085 -0.2839455306529999 0.0 0.0 -1.0 0.9795475006103516 0.5195319652557373 0 1.0 0 0.0 0 0.0 0 0.0 0.593170166015625 -0.04548230767250061 -0.2839455306529999 0.0 0.0 -1.0 0.8941986560821533 0.5124542713165283 0 1.0 0 0.0 0 0.0 0 0.0 0.4563925266265869 -0.04944466054439545 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9677401781082153 0.513634443283081 0 1.0 0 0.0 0 0.0 0 0.0 0.593170166015625 -0.04548230767250061 -0.2839455306529999 0.0 0.0 -1.0 0.8941986560821533 0.5124542713165283 0 1.0 0 0.0 0 0.0 0 0.0 0.5942404270172119 -0.05258728563785553 -0.2839455306529999 0.0 0.0 -1.0 0.8943162560462952 0.5052309036254883 0 1.0 0 0.0 0 0.0 0 0.0 0.4605276584625244 -0.05044436454772949 -0.2839455306529999 0.0 0.0 -1.0 0.965241551399231 0.512294352054596 0 1.0 0 0.0 0 0.0 0 0.0 0.4563925266265869 -0.04944466054439545 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9677401781082153 0.513634443283081 0 1.0 0 0.0 0 0.0 0 0.0 0.5942404270172119 -0.05258728563785553 -0.2839455306529999 0.0 0.0 -1.0 0.8943162560462952 0.5052309036254883 0 1.0 0 0.0 0 0.0 0 0.0 0.46440958976745605 -0.05145867168903351 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9629130363464355 0.5109500885009766 0 1.0 0 0.0 0 0.0 0 0.0 0.4605276584625244 -0.05044436454772949 -0.2839455306529999 0.0 0.0 -1.0 0.965241551399231 0.512294352054596 0 1.0 0 0.0 0 0.0 0 0.0 0.5942404270172119 -0.05258728563785553 -0.2839455306529999 0.0 0.0 -1.0 0.8943162560462952 0.5052309036254883 0 1.0 0 0.0 0 0.0 0 0.0 0.46803879737854004 -0.0524875670671463 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9607527256011963 0.5096024870872498 0 1.0 0 0.0 0 0.0 0 0.0 0.46440958976745605 -0.05145867168903351 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9629130363464355 0.5109500885009766 0 1.0 0 0.0 0 0.0 0 0.0 0.5942404270172119 -0.05258728563785553 -0.2839455306529999 0.0 0.0 -1.0 0.8943162560462952 0.5052309036254883 0 1.0 0 0.0 0 0.0 0 0.0 0.47141480445861816 -0.05353105068206787 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.9587593078613281 0.5082523822784424 0 1.0 0 0.0 0 0.0 0 0.0 0.46803879737854004 -0.0524875670671463 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9607527256011963 0.5096024870872498 0 1.0 0 0.0 0 0.0 0 0.0 0.5942404270172119 -0.05258728563785553 -0.2839455306529999 0.0 0.0 -1.0 0.8943162560462952 0.5052309036254883 0 1.0 0 0.0 0 0.0 0 0.0 0.47141480445861816 -0.05353105068206787 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.9587593078613281 0.5082523822784424 0 1.0 0 0.0 0 0.0 0 0.0 0.5942404270172119 -0.05258728563785553 -0.2839455306529999 0.0 0.0 -1.0 0.8943162560462952 0.5052309036254883 0 1.0 0 0.0 0 0.0 0 0.0 0.5948824882507324 -0.05997928977012634 -0.2839455306529999 0.0 0.0 -1.0 0.8946398496627808 0.4978189468383789 0 1.0 0 0.0 0 0.0 0 0.0 0.47453808784484863 -0.05458913743495941 -0.2839455306529999 0.0 0.0 -1.0 0.9569305777549744 0.5069000124931335 0 1.0 0 0.0 0 0.0 0 0.0 0.47141480445861816 -0.05353105068206787 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.9587593078613281 0.5082523822784424 0 1.0 0 0.0 0 0.0 0 0.0 0.5948824882507324 -0.05997928977012634 -0.2839455306529999 0.0 0.0 -1.0 0.8946398496627808 0.4978189468383789 0 1.0 0 0.0 0 0.0 0 0.0 0.47740817070007324 -0.05566181242465973 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.9552648067474365 0.5055457353591919 0 1.0 0 0.0 0 0.0 0 0.0 0.47453808784484863 -0.05458913743495941 -0.2839455306529999 0.0 0.0 -1.0 0.9569305777549744 0.5069000124931335 0 1.0 0 0.0 0 0.0 0 0.0 0.5948824882507324 -0.05997928977012634 -0.2839455306529999 0.0 0.0 -1.0 0.8946398496627808 0.4978189468383789 0 1.0 0 0.0 0 0.0 0 0.0 0.4800255298614502 -0.05674909055233002 -0.2839455306529999 0.0 0.0 -1.0 0.9537597894668579 0.5041894912719727 0 1.0 0 0.0 0 0.0 0 0.0 0.47740817070007324 -0.05566181242465973 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.9552648067474365 0.5055457353591919 0 1.0 0 0.0 0 0.0 0 0.0 0.5948824882507324 -0.05997928977012634 -0.2839455306529999 0.0 0.0 -1.0 0.8946398496627808 0.4978189468383789 0 1.0 0 0.0 0 0.0 0 0.0 0.4823896884918213 -0.05785095691680908 -0.2839455306529999 0.0 0.0 -1.0 0.9524136781692505 0.5028311610221863 0 1.0 0 0.0 0 0.0 0 0.0 0.4800255298614502 -0.05674909055233002 -0.2839455306529999 0.0 0.0 -1.0 0.9537597894668579 0.5041894912719727 0 1.0 0 0.0 0 0.0 0 0.0 0.5948824882507324 -0.05997928977012634 -0.2839455306529999 0.0 0.0 -1.0 0.8946398496627808 0.4978189468383789 0 1.0 0 0.0 0 0.0 0 0.0 0.4845011234283447 -0.05896741896867752 -0.2839455306529999 0.0 0.0 -1.0 0.9512243270874023 0.5014703273773193 0 1.0 0 0.0 0 0.0 0 0.0 0.4823896884918213 -0.05785095691680908 -0.2839455306529999 0.0 0.0 -1.0 0.9524136781692505 0.5028311610221863 0 1.0 0 0.0 0 0.0 0 0.0 0.5948824882507324 -0.05997928977012634 -0.2839455306529999 0.0 0.0 -1.0 0.8946398496627808 0.4978189468383789 0 1.0 0 0.0 0 0.0 0 0.0 0.4863593578338623 -0.06009847670793533 -0.2839455306529999 0.0 0.0 -1.0 0.9501901865005493 0.5001065731048584 0 1.0 0 0.0 0 0.0 0 0.0 0.4845011234283447 -0.05896741896867752 -0.2839455306529999 0.0 0.0 -1.0 0.9512243270874023 0.5014703273773193 0 1.0 0 0.0 0 0.0 0 0.0 0.5948824882507324 -0.05997928977012634 -0.2839455306529999 0.0 0.0 -1.0 0.8946398496627808 0.4978189468383789 0 1.0 0 0.0 0 0.0 0 0.0 0.4863593578338623 -0.06009847670793533 -0.2839455306529999 0.0 0.0 -1.0 0.9501901865005493 0.5001065731048584 0 1.0 0 0.0 0 0.0 0 0.0 0.5948824882507324 -0.05997928977012634 -0.2839455306529999 0.0 0.0 -1.0 0.8946398496627808 0.4978189468383789 0 1.0 0 0.0 0 0.0 0 0.0 0.5950965881347656 -0.06765832006931305 -0.2839455306529999 0.0 0.0 -1.0 0.895166277885437 0.4902169108390808 0 1.0 0 0.0 0 0.0 0 0.0 0.4879648685455322 -0.06124413013458252 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9493091106414795 0.49873924255371094 0 1.0 0 0.0 0 0.0 0 0.0 0.4863593578338623 -0.06009847670793533 -0.2839455306529999 0.0 0.0 -1.0 0.9501901865005493 0.5001065731048584 0 1.0 0 0.0 0 0.0 0 0.0 0.5950965881347656 -0.06765832006931305 -0.2839455306529999 0.0 0.0 -1.0 0.895166277885437 0.4902169108390808 0 1.0 0 0.0 0 0.0 0 0.0 0.4893171787261963 -0.06240437924861908 -0.2839455306529999 0.0 0.0 -1.0 0.9485797882080078 0.49736785888671875 0 1.0 0 0.0 0 0.0 0 0.0 0.4879648685455322 -0.06124413013458252 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9493091106414795 0.49873924255371094 0 1.0 0 0.0 0 0.0 0 0.0 0.5950965881347656 -0.06765832006931305 -0.2839455306529999 0.0 0.0 -1.0 0.895166277885437 0.4902169108390808 0 1.0 0 0.0 0 0.0 0 0.0 0.4904360771179199 -0.06365705281496048 -0.2839455306529999 0.0 0.0 -1.0 0.9479931592941284 0.49590176343917847 0 1.0 0 0.0 0 0.0 0 0.0 0.4893171787261963 -0.06240437924861908 -0.2839455306529999 0.0 0.0 -1.0 0.9485797882080078 0.49736785888671875 0 1.0 0 0.0 0 0.0 0 0.0 0.5950965881347656 -0.06765832006931305 -0.2839455306529999 0.0 0.0 -1.0 0.895166277885437 0.4902169108390808 0 1.0 0 0.0 0 0.0 0 0.0 0.2476358413696289 -0.0778159350156784 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08192101120948792 0.4880308508872986 0 1.0 0 0.0 0 0.0 0 0.0 0.34641003608703613 -0.06275463849306107 -0.2839455306529999 0.0 0.0 -1.0 0.0342521071434021 0.500602662563324 0 1.0 0 0.0 0 0.0 0 0.0 0.3475508689880371 -0.06744548678398132 -0.2839455306529999 0.0 0.0 -1.0 0.03346249461174011 0.4952545166015625 0 1.0 0 0.0 0 0.0 0 0.0 0.4914577007293701 -0.06496324390172958 -0.2839455306529999 0.0 0.0 -1.0 0.9474676847457886 0.49438291788101196 0 1.0 0 0.0 0 0.0 0 0.0 0.4904360771179199 -0.06365705281496048 -0.2839455306529999 0.0 0.0 -1.0 0.9479931592941284 0.49590176343917847 0 1.0 0 0.0 0 0.0 0 0.0 0.5950965881347656 -0.06765832006931305 -0.2839455306529999 0.0 0.0 -1.0 0.895166277885437 0.4902169108390808 0 1.0 0 0.0 0 0.0 0 0.0 0.4923820495605469 -0.0663229450583458 -0.2839455306529999 0.0 0.0 -1.0 0.9470030069351196 0.4928116202354431 0 1.0 0 0.0 0 0.0 0 0.0 0.4914577007293701 -0.06496324390172958 -0.2839455306529999 0.0 0.0 -1.0 0.9474676847457886 0.49438291788101196 0 1.0 0 0.0 0 0.0 0 0.0 0.5950965881347656 -0.06765832006931305 -0.2839455306529999 0.0 0.0 -1.0 0.895166277885437 0.4902169108390808 0 1.0 0 0.0 0 0.0 0 0.0 0.4932091236114502 -0.06773615628480911 -0.2839455306529999 0.0 0.0 -1.0 0.9465987682342529 0.4911881685256958 0 1.0 0 0.0 0 0.0 0 0.0 0.4923820495605469 -0.0663229450583458 -0.2839455306529999 0.0 0.0 -1.0 0.9470030069351196 0.4928116202354431 0 1.0 0 0.0 0 0.0 0 0.0 0.5950965881347656 -0.06765832006931305 -0.2839455306529999 0.0 0.0 -1.0 0.895166277885437 0.4902169108390808 0 1.0 0 0.0 0 0.0 0 0.0 0.2476358413696289 -0.0778159350156784 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08192101120948792 0.4880308508872986 0 1.0 0 0.0 0 0.0 0 0.0 0.3475508689880371 -0.06744548678398132 -0.2839455306529999 0.0 0.0 -1.0 0.03346249461174011 0.4952545166015625 0 1.0 0 0.0 0 0.0 0 0.0 0.34887170791625977 -0.07194417715072632 -0.2839455306529999 0.0 0.0 -1.0 0.03258267045021057 0.49015122652053833 0 1.0 0 0.0 0 0.0 0 0.0 0.4932091236114502 -0.06773615628480911 -0.2839455306529999 0.0 0.0 -1.0 0.9465987682342529 0.4911881685256958 0 1.0 0 0.0 0 0.0 0 0.0 0.5950965881347656 -0.06765832006931305 -0.2839455306529999 0.0 0.0 -1.0 0.895166277885437 0.4902169108390808 0 1.0 0 0.0 0 0.0 0 0.0 0.5947997570037842 -0.07608164846897125 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8959649205207825 0.4819793105125427 0 1.0 0 0.0 0 0.0 0 0.0 0.4939389228820801 -0.06920288503170013 -0.2839455306529999 0.0 0.0 -1.0 0.946254312992096 0.48951268196105957 0 1.0 0 0.0 0 0.0 0 0.0 0.4932091236114502 -0.06773615628480911 -0.2839455306529999 0.0 0.0 -1.0 0.9465987682342529 0.4911881685256958 0 1.0 0 0.0 0 0.0 0 0.0 0.5947997570037842 -0.07608164846897125 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8959649205207825 0.4819793105125427 0 1.0 0 0.0 0 0.0 0 0.0 0.4945714473724365 -0.07072312384843826 -0.2839455306529999 0.0 0.0 -1.0 0.9459694027900696 0.4877854585647583 0 1.0 0 0.0 0 0.0 0 0.0 0.4939389228820801 -0.06920288503170013 -0.2839455306529999 0.0 0.0 -1.0 0.946254312992096 0.48951268196105957 0 1.0 0 0.0 0 0.0 0 0.0 0.5947997570037842 -0.07608164846897125 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8959649205207825 0.4819793105125427 0 1.0 0 0.0 0 0.0 0 0.0 0.49510645866394043 -0.0722968727350235 -0.2839455306529999 0.0 0.0 -1.0 0.9457437992095947 0.48600679636001587 0 1.0 0 0.0 0 0.0 0 0.0 0.4945714473724365 -0.07072312384843826 -0.2839455306529999 0.0 0.0 -1.0 0.9459694027900696 0.4877854585647583 0 1.0 0 0.0 0 0.0 0 0.0 0.5947997570037842 -0.07608164846897125 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8959649205207825 0.4819793105125427 0 1.0 0 0.0 0 0.0 0 0.0 0.2476358413696289 -0.0778159350156784 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08192101120948792 0.4880308508872986 0 1.0 0 0.0 0 0.0 0 0.0 0.34887170791625977 -0.07194417715072632 -0.2839455306529999 0.0 0.0 -1.0 0.03258267045021057 0.49015122652053833 0 1.0 0 0.0 0 0.0 0 0.0 0.3503725528717041 -0.07625070214271545 -0.2839455306529999 0.0 0.0 -1.0 0.031612515449523926 0.4852878451347351 0 1.0 0 0.0 0 0.0 0 0.0 0.4955441951751709 -0.07392413169145584 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9455769062042236 0.4841769337654114 0 1.0 0 0.0 0 0.0 0 0.0 0.49510645866394043 -0.0722968727350235 -0.2839455306529999 0.0 0.0 -1.0 0.9457437992095947 0.48600679636001587 0 1.0 0 0.0 0 0.0 0 0.0 0.5947997570037842 -0.07608164846897125 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8959649205207825 0.4819793105125427 0 1.0 0 0.0 0 0.0 0 0.0 0.49588465690612793 -0.07560490816831589 -0.2839455306529999 0.0 0.0 -1.0 0.9454684257507324 0.4822959899902344 0 1.0 0 0.0 0 0.0 0 0.0 0.4955441951751709 -0.07392413169145584 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9455769062042236 0.4841769337654114 0 1.0 0 0.0 0 0.0 0 0.0 0.5947997570037842 -0.07608164846897125 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8959649205207825 0.4819793105125427 0 1.0 0 0.0 0 0.0 0 0.0 0.4961278438568115 -0.07733919471502304 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.945418119430542 0.4803643226623535 0 1.0 0 0.0 0 0.0 0 0.0 0.49588465690612793 -0.07560490816831589 -0.2839455306529999 0.0 0.0 -1.0 0.9454684257507324 0.4822959899902344 0 1.0 0 0.0 0 0.0 0 0.0 0.5947997570037842 -0.07608164846897125 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8959649205207825 0.4819793105125427 0 1.0 0 0.0 0 0.0 0 0.0 0.4961278438568115 -0.07733919471502304 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.945418119430542 0.4803643226623535 0 1.0 0 0.0 0 0.0 0 0.0 0.5947997570037842 -0.07608164846897125 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8959649205207825 0.4819793105125427 0 1.0 0 0.0 0 0.0 0 0.0 0.593909502029419 -0.0843055248260498 -0.2839455306529999 0.0 0.0 -1.0 0.8969942331314087 0.47402477264404297 0 1.0 0 0.0 0 0.0 0 0.0 0.2476358413696289 -0.0778159350156784 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08192101120948792 0.4880308508872986 0 1.0 0 0.0 0 0.0 0 0.0 0.3503725528717041 -0.07625070214271545 -0.2839455306529999 0.0 0.0 -1.0 0.031612515449523926 0.4852878451347351 0 1.0 0 0.0 0 0.0 0 0.0 0.3520534038543701 -0.08036507666110992 -0.2839455306529999 0.0 0.0 -1.0 0.030551671981811523 0.48065948486328125 0 1.0 0 0.0 0 0.0 0 0.0 0.4962737560272217 -0.0791269913315773 -0.2839455306529999 0.0 0.0 -1.0 0.9454255104064941 0.4783821105957031 0 1.0 0 0.0 0 0.0 0 0.0 0.4961278438568115 -0.07733919471502304 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.945418119430542 0.4803643226623535 0 1.0 0 0.0 0 0.0 0 0.0 0.593909502029419 -0.0843055248260498 -0.2839455306529999 0.0 0.0 -1.0 0.8969942331314087 0.47402477264404297 0 1.0 0 0.0 0 0.0 0 0.0 0.2501254081726074 -0.08647764474153519 -0.2839455306529999 0.0 0.0 -1.0 0.08034408092498779 0.4796344041824341 0 1.0 0 0.0 0 0.0 0 0.0 0.2476358413696289 -0.0778159350156784 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08192101120948792 0.4880308508872986 0 1.0 0 0.0 0 0.0 0 0.0 0.3520534038543701 -0.08036507666110992 -0.2839455306529999 0.0 0.0 -1.0 0.030551671981811523 0.48065948486328125 0 1.0 0 0.0 0 0.0 0 0.0 0.4963223934173584 -0.08096829801797867 -0.2839455306529999 0.0 0.0 -1.0 0.9454903602600098 0.4763496518135071 0 1.0 0 0.0 0 0.0 0 0.0 0.4962737560272217 -0.0791269913315773 -0.2839455306529999 0.0 0.0 -1.0 0.9454255104064941 0.4783821105957031 0 1.0 0 0.0 0 0.0 0 0.0 0.593909502029419 -0.0843055248260498 -0.2839455306529999 0.0 0.0 -1.0 0.8969942331314087 0.47402477264404297 0 1.0 0 0.0 0 0.0 0 0.0 0.2501254081726074 -0.08647764474153519 -0.2839455306529999 0.0 0.0 -1.0 0.08034408092498779 0.4796344041824341 0 1.0 0 0.0 0 0.0 0 0.0 0.3520534038543701 -0.08036507666110992 -0.2839455306529999 0.0 0.0 -1.0 0.030551671981811523 0.48065948486328125 0 1.0 0 0.0 0 0.0 0 0.0 0.3539142608642578 -0.08428728580474854 -0.2839455306529999 0.0 0.0 -1.0 0.02939966320991516 0.47626161575317383 0 1.0 0 0.0 0 0.0 0 0.0 0.4962317943572998 -0.08366581052541733 -0.2839455306529999 0.0 0.0 -1.0 0.9456760883331299 0.4733878970146179 0 1.0 0 0.0 0 0.0 0 0.0 0.4963223934173584 -0.08096829801797867 -0.2839455306529999 0.0 0.0 -1.0 0.9454903602600098 0.4763496518135071 0 1.0 0 0.0 0 0.0 0 0.0 0.593909502029419 -0.0843055248260498 -0.2839455306529999 0.0 0.0 -1.0 0.8969942331314087 0.47402477264404297 0 1.0 0 0.0 0 0.0 0 0.0 0.49596190452575684 -0.08627089112997055 -0.2839455306529999 0.0 0.0 -1.0 0.9459569454193115 0.47054433822631836 0 1.0 0 0.0 0 0.0 0 0.0 0.4962317943572998 -0.08366581052541733 -0.2839455306529999 0.0 0.0 -1.0 0.9456760883331299 0.4733878970146179 0 1.0 0 0.0 0 0.0 0 0.0 0.593909502029419 -0.0843055248260498 -0.2839455306529999 0.0 0.0 -1.0 0.8969942331314087 0.47402477264404297 0 1.0 0 0.0 0 0.0 0 0.0 0.2501254081726074 -0.08647764474153519 -0.2839455306529999 0.0 0.0 -1.0 0.08034408092498779 0.4796344041824341 0 1.0 0 0.0 0 0.0 0 0.0 0.3539142608642578 -0.08428728580474854 -0.2839455306529999 0.0 0.0 -1.0 0.02939966320991516 0.47626161575317383 0 1.0 0 0.0 0 0.0 0 0.0 0.3559551239013672 -0.08801734447479248 -0.2839455306529999 0.0 0.0 -1.0 0.028155982494354248 0.4720897078514099 0 1.0 0 0.0 0 0.0 0 0.0 0.49596190452575684 -0.08627089112997055 -0.2839455306529999 0.0 0.0 -1.0 0.9459569454193115 0.47054433822631836 0 1.0 0 0.0 0 0.0 0 0.0 0.593909502029419 -0.0843055248260498 -0.2839455306529999 0.0 0.0 -1.0 0.8969942331314087 0.47402477264404297 0 1.0 0 0.0 0 0.0 0 0.0 0.5924258232116699 -0.0923299491405487 -0.2839455306529999 0.0 0.0 -1.0 0.8982551097869873 0.46633195877075195 0 1.0 0 0.0 0 0.0 0 0.0 0.4955120086669922 -0.08878353983163834 -0.2839455306529999 0.0 0.0 -1.0 0.9463331699371338 0.46781617403030396 0 1.0 0 0.0 0 0.0 0 0.0 0.49596190452575684 -0.08627089112997055 -0.2839455306529999 0.0 0.0 -1.0 0.9459569454193115 0.47054433822631836 0 1.0 0 0.0 0 0.0 0 0.0 0.5924258232116699 -0.0923299491405487 -0.2839455306529999 0.0 0.0 -1.0 0.8982551097869873 0.46633195877075195 0 1.0 0 0.0 0 0.0 0 0.0 0.2530405521392822 -0.09483286738395691 -0.2839455306529999 0.0 0.0 -1.0 0.0786128044128418 0.4715557098388672 0 1.0 0 0.0 0 0.0 0 0.0 0.2501254081726074 -0.08647764474153519 -0.2839455306529999 0.0 0.0 -1.0 0.08034408092498779 0.4796344041824341 0 1.0 0 0.0 0 0.0 0 0.0 0.3559551239013672 -0.08801734447479248 -0.2839455306529999 0.0 0.0 -1.0 0.028155982494354248 0.4720897078514099 0 1.0 0 0.0 0 0.0 0 0.0 0.2530405521392822 -0.09483286738395691 -0.2839455306529999 0.0 0.0 -1.0 0.0786128044128418 0.4715557098388672 0 1.0 0 0.0 0 0.0 0 0.0 0.3559551239013672 -0.08801734447479248 -0.2839455306529999 0.0 0.0 -1.0 0.028155982494354248 0.4720897078514099 0 1.0 0 0.0 0 0.0 0 0.0 0.35817599296569824 -0.09155523777008057 -0.2839455306529999 0.0 0.0 -1.0 0.02681976556777954 0.4681397080421448 0 1.0 0 0.0 0 0.0 0 0.0 0.49488210678100586 -0.09120375663042068 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.946804404258728 0.46520084142684937 0 1.0 0 0.0 0 0.0 0 0.0 0.4955120086669922 -0.08878353983163834 -0.2839455306529999 0.0 0.0 -1.0 0.9463331699371338 0.46781617403030396 0 1.0 0 0.0 0 0.0 0 0.0 0.5924258232116699 -0.0923299491405487 -0.2839455306529999 0.0 0.0 -1.0 0.8982551097869873 0.46633195877075195 0 1.0 0 0.0 0 0.0 0 0.0 0.49407219886779785 -0.0935315415263176 -0.2839455306529999 0.0 0.0 -1.0 0.9473705291748047 0.4626959562301636 0 1.0 0 0.0 0 0.0 0 0.0 0.49488210678100586 -0.09120375663042068 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.946804404258728 0.46520084142684937 0 1.0 0 0.0 0 0.0 0 0.0 0.5924258232116699 -0.0923299491405487 -0.2839455306529999 0.0 0.0 -1.0 0.8982551097869873 0.46633195877075195 0 1.0 0 0.0 0 0.0 0 0.0 0.2530405521392822 -0.09483286738395691 -0.2839455306529999 0.0 0.0 -1.0 0.0786128044128418 0.4715557098388672 0 1.0 0 0.0 0 0.0 0 0.0 0.35817599296569824 -0.09155523777008057 -0.2839455306529999 0.0 0.0 -1.0 0.02681976556777954 0.4681397080421448 0 1.0 0 0.0 0 0.0 0 0.0 0.360576868057251 -0.09490098059177399 -0.2839455306529999 0.0 0.0 -1.0 0.025390267372131348 0.464407742023468 0 1.0 0 0.0 0 0.0 0 0.0 0.49407219886779785 -0.0935315415263176 -0.2839455306529999 0.0 0.0 -1.0 0.9473705291748047 0.4626959562301636 0 1.0 0 0.0 0 0.0 0 0.0 0.5924258232116699 -0.0923299491405487 -0.2839455306529999 0.0 0.0 -1.0 0.8982551097869873 0.46633195877075195 0 1.0 0 0.0 0 0.0 0 0.0 0.590348482131958 -0.10015491396188736 -0.2839455306529999 0.0 0.0 -1.0 0.899749755859375 0.4588810205459595 0 1.0 0 0.0 0 0.0 0 0.0 0.49308228492736816 -0.09576690196990967 -0.2839455306529999 0.0 0.0 -1.0 0.9480316638946533 0.4602993130683899 0 1.0 0 0.0 0 0.0 0 0.0 0.49407219886779785 -0.0935315415263176 -0.2839455306529999 0.0 0.0 -1.0 0.9473705291748047 0.4626959562301636 0 1.0 0 0.0 0 0.0 0 0.0 0.590348482131958 -0.10015491396188736 -0.2839455306529999 0.0 0.0 -1.0 0.899749755859375 0.4588810205459595 0 1.0 0 0.0 0 0.0 0 0.0 0.2563815116882324 -0.10288161039352417 -0.2839455306529999 0.0 0.0 -1.0 0.07672294974327087 0.46378159523010254 0 1.0 0 0.0 0 0.0 0 0.0 0.2530405521392822 -0.09483286738395691 -0.2839455306529999 0.0 0.0 -1.0 0.0786128044128418 0.4715557098388672 0 1.0 0 0.0 0 0.0 0 0.0 0.360576868057251 -0.09490098059177399 -0.2839455306529999 0.0 0.0 -1.0 0.025390267372131348 0.464407742023468 0 1.0 0 0.0 0 0.0 0 0.0 0.2563815116882324 -0.10288161039352417 -0.2839455306529999 0.0 0.0 -1.0 0.07672294974327087 0.46378159523010254 0 1.0 0 0.0 0 0.0 0 0.0 0.360576868057251 -0.09490098059177399 -0.2839455306529999 0.0 0.0 -1.0 0.025390267372131348 0.464407742023468 0 1.0 0 0.0 0 0.0 0 0.0 0.3631577491760254 -0.09805455803871155 -0.2839455306529999 0.0 0.0 -1.0 0.02386653423309326 0.46089035272598267 0 1.0 0 0.0 0 0.0 0 0.0 0.4919123649597168 -0.0979098305106163 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9487879276275635 0.45800888538360596 0 1.0 0 0.0 0 0.0 0 0.0 0.49308228492736816 -0.09576690196990967 -0.2839455306529999 0.0 0.0 -1.0 0.9480316638946533 0.4602993130683899 0 1.0 0 0.0 0 0.0 0 0.0 0.590348482131958 -0.10015491396188736 -0.2839455306529999 0.0 0.0 -1.0 0.899749755859375 0.4588810205459595 0 1.0 0 0.0 0 0.0 0 0.0 0.49056243896484375 -0.0999603271484375 -0.2839455306529999 0.0 0.0 -1.0 0.9496395587921143 0.45582300424575806 0 1.0 0 0.0 0 0.0 0 0.0 0.4919123649597168 -0.0979098305106163 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9487879276275635 0.45800888538360596 0 1.0 0 0.0 0 0.0 0 0.0 0.590348482131958 -0.10015491396188736 -0.2839455306529999 0.0 0.0 -1.0 0.899749755859375 0.4588810205459595 0 1.0 0 0.0 0 0.0 0 0.0 0.2563815116882324 -0.10288161039352417 -0.2839455306529999 0.0 0.0 -1.0 0.07672294974327087 0.46378159523010254 0 1.0 0 0.0 0 0.0 0 0.0 0.3631577491760254 -0.09805455803871155 -0.2839455306529999 0.0 0.0 -1.0 0.02386653423309326 0.46089035272598267 0 1.0 0 0.0 0 0.0 0 0.0 0.3659186363220215 -0.10101598501205444 -0.2839455306529999 0.0 0.0 -1.0 0.022247523069381714 0.4575845003128052 0 1.0 0 0.0 0 0.0 0 0.0 0.489032506942749 -0.10191839188337326 -0.2839455306529999 0.0 0.0 -1.0 0.9505868554115295 0.4537402391433716 0 1.0 0 0.0 0 0.0 0 0.0 0.49056243896484375 -0.0999603271484375 -0.2839455306529999 0.0 0.0 -1.0 0.9496395587921143 0.45582300424575806 0 1.0 0 0.0 0 0.0 0 0.0 0.590348482131958 -0.10015491396188736 -0.2839455306529999 0.0 0.0 -1.0 0.899749755859375 0.4588810205459595 0 1.0 0 0.0 0 0.0 0 0.0 0.489032506942749 -0.10191839188337326 -0.2839455306529999 0.0 0.0 -1.0 0.9505868554115295 0.4537402391433716 0 1.0 0 0.0 0 0.0 0 0.0 0.590348482131958 -0.10015491396188736 -0.2839455306529999 0.0 0.0 -1.0 0.899749755859375 0.4588810205459595 0 1.0 0 0.0 0 0.0 0 0.0 0.5876777172088623 -0.10778042674064636 -0.2839455306529999 0.0 0.0 -1.0 0.9014818072319031 0.4516541361808777 0 1.0 0 0.0 0 0.0 0 0.0 0.2563815116882324 -0.10288161039352417 -0.2839455306529999 0.0 0.0 -1.0 0.07672294974327087 0.46378159523010254 0 1.0 0 0.0 0 0.0 0 0.0 0.3659186363220215 -0.10101598501205444 -0.2839455306529999 0.0 0.0 -1.0 0.022247523069381714 0.4575845003128052 0 1.0 0 0.0 0 0.0 0 0.0 0.36885952949523926 -0.10378524661064148 -0.2839455306529999 0.0 0.0 -1.0 0.020532160997390747 0.45448750257492065 0 1.0 0 0.0 0 0.0 0 0.0 0.4873225688934326 -0.10378402471542358 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9516303539276123 0.4517591595649719 0 1.0 0 0.0 0 0.0 0 0.0 0.489032506942749 -0.10191839188337326 -0.2839455306529999 0.0 0.0 -1.0 0.9505868554115295 0.4537402391433716 0 1.0 0 0.0 0 0.0 0 0.0 0.5876777172088623 -0.10778042674064636 -0.2839455306529999 0.0 0.0 -1.0 0.9014818072319031 0.4516541361808777 0 1.0 0 0.0 0 0.0 0 0.0 0.2601480484008789 -0.11062387377023697 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07466986775398254 0.4562997817993164 0 1.0 0 0.0 0 0.0 0 0.0 0.2563815116882324 -0.10288161039352417 -0.2839455306529999 0.0 0.0 -1.0 0.07672294974327087 0.46378159523010254 0 1.0 0 0.0 0 0.0 0 0.0 0.36885952949523926 -0.10378524661064148 -0.2839455306529999 0.0 0.0 -1.0 0.020532160997390747 0.45448750257492065 0 1.0 0 0.0 0 0.0 0 0.0 0.48543262481689453 -0.10555722564458847 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9527706503868103 0.44987887144088745 0 1.0 0 0.0 0 0.0 0 0.0 0.4873225688934326 -0.10378402471542358 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9516303539276123 0.4517591595649719 0 1.0 0 0.0 0 0.0 0 0.0 0.5876777172088623 -0.10778042674064636 -0.2839455306529999 0.0 0.0 -1.0 0.9014818072319031 0.4516541361808777 0 1.0 0 0.0 0 0.0 0 0.0 0.2601480484008789 -0.11062387377023697 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07466986775398254 0.4562997817993164 0 1.0 0 0.0 0 0.0 0 0.0 0.36885952949523926 -0.10378524661064148 -0.2839455306529999 0.0 0.0 -1.0 0.020532160997390747 0.45448750257492065 0 1.0 0 0.0 0 0.0 0 0.0 0.3719792366027832 -0.10636235028505325 -0.2839455306529999 0.0 0.0 -1.0 0.01871994137763977 0.45159727334976196 0 1.0 0 0.0 0 0.0 0 0.0 0.48336267471313477 -0.10723800212144852 -0.2839455306529999 0.0 0.0 -1.0 0.9540083408355713 0.4480985999107361 0 1.0 0 0.0 0 0.0 0 0.0 0.48543262481689453 -0.10555722564458847 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9527706503868103 0.44987887144088745 0 1.0 0 0.0 0 0.0 0 0.0 0.5876777172088623 -0.10778042674064636 -0.2839455306529999 0.0 0.0 -1.0 0.9014818072319031 0.4516541361808777 0 1.0 0 0.0 0 0.0 0 0.0 0.2601480484008789 -0.11062387377023697 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07466986775398254 0.4562997817993164 0 1.0 0 0.0 0 0.0 0 0.0 0.3719792366027832 -0.10636235028505325 -0.2839455306529999 0.0 0.0 -1.0 0.01871994137763977 0.45159727334976196 0 1.0 0 0.0 0 0.0 0 0.0 0.37529706954956055 -0.10874000191688538 -0.2839455306529999 0.0 0.0 -1.0 0.016798853874206543 0.44891852140426636 0 1.0 0 0.0 0 0.0 0 0.0 0.48002052307128906 -0.10947578400373459 -0.2839455306529999 0.0 0.0 -1.0 0.9559876918792725 0.44572991132736206 0 1.0 0 0.0 0 0.0 0 0.0 0.48336267471313477 -0.10723800212144852 -0.2839455306529999 0.0 0.0 -1.0 0.9540083408355713 0.4480985999107361 0 1.0 0 0.0 0 0.0 0 0.0 0.5876777172088623 -0.10778042674064636 -0.2839455306529999 0.0 0.0 -1.0 0.9014818072319031 0.4516541361808777 0 1.0 0 0.0 0 0.0 0 0.0 0.48002052307128906 -0.10947578400373459 -0.2839455306529999 0.0 0.0 -1.0 0.9559876918792725 0.44572991132736206 0 1.0 0 0.0 0 0.0 0 0.0 0.5876777172088623 -0.10778042674064636 -0.2839455306529999 0.0 0.0 -1.0 0.9014818072319031 0.4516541361808777 0 1.0 0 0.0 0 0.0 0 0.0 0.5844135284423828 -0.11520648002624512 -0.2839455306529999 0.0 0.0 -1.0 0.9034560918807983 0.4446355700492859 0 1.0 0 0.0 0 0.0 0 0.0 0.2601480484008789 -0.11062387377023697 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07466986775398254 0.4562997817993164 0 1.0 0 0.0 0 0.0 0 0.0 0.37529706954956055 -0.10874000191688538 -0.2839455306529999 0.0 0.0 -1.0 0.016798853874206543 0.44891852140426636 0 1.0 0 0.0 0 0.0 0 0.0 0.378828763961792 -0.11091089993715286 -0.2839455306529999 0.0 0.0 -1.0 0.014758676290512085 0.4464564323425293 0 1.0 0 0.0 0 0.0 0 0.0 0.47641563415527344 -0.1115189865231514 -0.2839455306529999 0.0 0.0 -1.0 0.9581100940704346 0.44357115030288696 0 1.0 0 0.0 0 0.0 0 0.0 0.48002052307128906 -0.10947578400373459 -0.2839455306529999 0.0 0.0 -1.0 0.9559876918792725 0.44572991132736206 0 1.0 0 0.0 0 0.0 0 0.0 0.5844135284423828 -0.11520648002624512 -0.2839455306529999 0.0 0.0 -1.0 0.9034560918807983 0.4446355700492859 0 1.0 0 0.0 0 0.0 0 0.0 0.2643401622772217 -0.1180596575140953 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07244819402694702 0.4490988850593567 0 1.0 0 0.0 0 0.0 0 0.0 0.2601480484008789 -0.11062387377023697 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07466986775398254 0.4562997817993164 0 1.0 0 0.0 0 0.0 0 0.0 0.378828763961792 -0.11091089993715286 -0.2839455306529999 0.0 0.0 -1.0 0.014758676290512085 0.4464564323425293 0 1.0 0 0.0 0 0.0 0 0.0 0.2643401622772217 -0.1180596575140953 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07244819402694702 0.4490988850593567 0 1.0 0 0.0 0 0.0 0 0.0 0.378828763961792 -0.11091089993715286 -0.2839455306529999 0.0 0.0 -1.0 0.014758676290512085 0.4464564323425293 0 1.0 0 0.0 0 0.0 0 0.0 0.38257455825805664 -0.11287504434585571 -0.2839455306529999 0.0 0.0 -1.0 0.012597858905792236 0.44421011209487915 0 1.0 0 0.0 0 0.0 0 0.0 0.472548246383667 -0.11336759477853775 -0.2839455306529999 0.0 0.0 -1.0 0.960377037525177 0.441622257232666 0 1.0 0 0.0 0 0.0 0 0.0 0.47641563415527344 -0.1115189865231514 -0.2839455306529999 0.0 0.0 -1.0 0.9581100940704346 0.44357115030288696 0 1.0 0 0.0 0 0.0 0 0.0 0.5844135284423828 -0.11520648002624512 -0.2839455306529999 0.0 0.0 -1.0 0.9034560918807983 0.4446355700492859 0 1.0 0 0.0 0 0.0 0 0.0 0.2643401622772217 -0.1180596575140953 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07244819402694702 0.4490988850593567 0 1.0 0 0.0 0 0.0 0 0.0 0.38257455825805664 -0.11287504434585571 -0.2839455306529999 0.0 0.0 -1.0 0.012597858905792236 0.44421011209487915 0 1.0 0 0.0 0 0.0 0 0.0 0.3865344524383545 -0.11463243514299393 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.01031494140625 0.4421793222427368 0 1.0 0 0.0 0 0.0 0 0.0 0.4684181213378906 -0.11502161622047424 -0.2839455306529999 0.0 0.0 -1.0 0.9627904891967773 0.43988388776779175 0 1.0 0 0.0 0 0.0 0 0.0 0.472548246383667 -0.11336759477853775 -0.2839455306529999 0.0 0.0 -1.0 0.960377037525177 0.441622257232666 0 1.0 0 0.0 0 0.0 0 0.0 0.5844135284423828 -0.11520648002624512 -0.2839455306529999 0.0 0.0 -1.0 0.9034560918807983 0.4446355700492859 0 1.0 0 0.0 0 0.0 0 0.0 0.2643401622772217 -0.1180596575140953 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07244819402694702 0.4490988850593567 0 1.0 0 0.0 0 0.0 0 0.0 0.3865344524383545 -0.11463243514299393 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.01031494140625 0.4421793222427368 0 1.0 0 0.0 0 0.0 0 0.0 0.39070844650268555 -0.1161830797791481 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.007908552885055542 0.4403642416000366 0 1.0 0 0.0 0 0.0 0 0.0 0.46402525901794434 -0.11648104339838028 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.9653520584106445 0.43835723400115967 0 1.0 0 0.0 0 0.0 0 0.0 0.4684181213378906 -0.11502161622047424 -0.2839455306529999 0.0 0.0 -1.0 0.9627904891967773 0.43988388776779175 0 1.0 0 0.0 0 0.0 0 0.0 0.5844135284423828 -0.11520648002624512 -0.2839455306529999 0.0 0.0 -1.0 0.9034560918807983 0.4446355700492859 0 1.0 0 0.0 0 0.0 0 0.0 0.46402525901794434 -0.11648104339838028 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.9653520584106445 0.43835723400115967 0 1.0 0 0.0 0 0.0 0 0.0 0.5844135284423828 -0.11520648002624512 -0.2839455306529999 0.0 0.0 -1.0 0.9034560918807983 0.4446355700492859 0 1.0 0 0.0 0 0.0 0 0.0 0.5805556774139404 -0.12243308126926422 -0.2839455306529999 0.0 0.0 -1.0 0.9056787490844727 0.4378116726875305 0 1.0 0 0.0 0 0.0 0 0.0 0.2643401622772217 -0.1180596575140953 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07244819402694702 0.4490988850593567 0 1.0 0 0.0 0 0.0 0 0.0 0.39070844650268555 -0.1161830797791481 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.007908552885055542 0.4403642416000366 0 1.0 0 0.0 0 0.0 0 0.0 0.3950965404510498 -0.11752697080373764 -0.2839455306529999 0.0 0.0 -1.0 0.005377382040023804 0.43876558542251587 0 1.0 0 0.0 0 0.0 0 0.0 0.4593696594238281 -0.11774588376283646 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9680632948875427 0.43704426288604736 0 1.0 0 0.0 0 0.0 0 0.0 0.46402525901794434 -0.11648104339838028 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.9653520584106445 0.43835723400115967 0 1.0 0 0.0 0 0.0 0 0.0 0.5805556774139404 -0.12243308126926422 -0.2839455306529999 0.0 0.0 -1.0 0.9056787490844727 0.4378116726875305 0 1.0 0 0.0 0 0.0 0 0.0 0.2643401622772217 -0.1180596575140953 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07244819402694702 0.4490988850593567 0 1.0 0 0.0 0 0.0 0 0.0 0.3950965404510498 -0.11752697080373764 -0.2839455306529999 0.0 0.0 -1.0 0.005377382040023804 0.43876558542251587 0 1.0 0 0.0 0 0.0 0 0.0 0.39969849586486816 -0.11866410821676254 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.002720385789871216 0.43738478422164917 0 1.0 0 0.0 0 0.0 0 0.0 0.454451322555542 -0.11881612986326218 -0.2839455306529999 0.0 0.0 -1.0 0.9709254503250122 0.43594735860824585 0 1.0 0 0.0 0 0.0 0 0.0 0.4593696594238281 -0.11774588376283646 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9680632948875427 0.43704426288604736 0 1.0 0 0.0 0 0.0 0 0.0 0.5805556774139404 -0.12243308126926422 -0.2839455306529999 0.0 0.0 -1.0 0.9056787490844727 0.4378116726875305 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 -0.12518896162509918 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07005178928375244 0.4421687126159668 0 1.0 0 0.0 0 0.0 0 0.0 0.2643401622772217 -0.1180596575140953 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07244819402694702 0.4490988850593567 0 1.0 0 0.0 0 0.0 0 0.0 0.39969849586486816 -0.11866410821676254 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.002720385789871216 0.43738478422164917 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 -0.12518896162509918 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0700517892837524 0.4421687126159668 0 1.0 0 0.0 0 0.0 0 0.0 0.39969849586486816 -0.11866410821676254 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 1.0027203559875488 0.43738478422164917 0 1.0 0 0.0 0 0.0 0 0.0 0.4045145511627197 -0.11959449201822281 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9999364614486694 0.4362236261367798 0 1.0 0 0.0 0 0.0 0 0.0 0.44927024841308594 -0.11969178915023804 -0.2839455306529999 0.0 0.0 -1.0 0.9739395380020142 0.43506962060928345 0 1.0 0 0.0 0 0.0 0 0.0 0.454451322555542 -0.11881612986326218 -0.2839455306529999 0.0 0.0 -1.0 0.9709254503250122 0.43594735860824585 0 1.0 0 0.0 0 0.0 0 0.0 0.5805556774139404 -0.12243308126926422 -0.2839455306529999 0.0 0.0 -1.0 0.9056787490844727 0.4378116726875305 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 -0.12518896162509918 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0700517892837524 0.4421687126159668 0 1.0 0 0.0 0 0.0 0 0.0 0.4045145511627197 -0.11959449201822281 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9999364614486694 0.4362236261367798 0 1.0 0 0.0 0 0.0 0 0.0 0.4095447063446045 -0.12031812220811844 -0.2839455306529999 0.0 0.0 -1.0 0.9970248341560364 0.43528419733047485 0 1.0 0 0.0 0 0.0 0 0.0 0.44382667541503906 -0.12037285417318344 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9771062135696411 0.43441450595855713 0 1.0 0 0.0 0 0.0 0 0.0 0.44927024841308594 -0.11969178915023804 -0.2839455306529999 0.0 0.0 -1.0 0.9739395380020142 0.43506962060928345 0 1.0 0 0.0 0 0.0 0 0.0 0.5805556774139404 -0.12243308126926422 -0.2839455306529999 0.0 0.0 -1.0 0.9056787490844727 0.4378116726875305 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 -0.12518896162509918 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0700517892837524 0.4421687126159668 0 1.0 0 0.0 0 0.0 0 0.0 0.4095447063446045 -0.12031812220811844 -0.2839455306529999 0.0 0.0 -1.0 0.9970248341560364 0.43528419733047485 0 1.0 0 0.0 0 0.0 0 0.0 0.41478896141052246 -0.12083500623703003 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.9939851760864258 0.43456918001174927 0 1.0 0 0.0 0 0.0 0 0.0 0.43812036514282227 -0.12085933238267899 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9804256558418274 0.43398576974868774 0 1.0 0 0.0 0 0.0 0 0.0 0.44382667541503906 -0.12037285417318344 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9771062135696411 0.43441450595855713 0 1.0 0 0.0 0 0.0 0 0.0 0.5805556774139404 -0.12243308126926422 -0.2839455306529999 0.0 0.0 -1.0 0.9056787490844727 0.4378116726875305 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 -0.12518896162509918 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0700517892837524 0.4421687126159668 0 1.0 0 0.0 0 0.0 0 0.0 0.41478896141052246 -0.12083500623703003 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.9939851760864258 0.43456918001174927 0 1.0 0 0.0 0 0.0 0 0.0 0.42024731636047363 -0.12114513665437698 -0.2839455306529999 0.0 0.00012207403779029846 -1.0 0.9908171892166138 0.434081494808197 0 1.0 0 0.0 0 0.0 0 0.0 0.43215131759643555 -0.12115121632814407 -0.2839455306529999 0.0 0.0 -1.0 0.9838976860046387 0.43378758430480957 0 1.0 0 0.0 0 0.0 0 0.0 0.43812036514282227 -0.12085933238267899 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9804256558418274 0.43398576974868774 0 1.0 0 0.0 0 0.0 0 0.0 0.5805556774139404 -0.12243308126926422 -0.2839455306529999 0.0 0.0 -1.0 0.9056787490844727 0.4378116726875305 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 -0.12518896162509918 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0700517892837524 0.4421687126159668 0 1.0 0 0.0 0 0.0 0 0.0 0.42024731636047363 -0.12114513665437698 -0.2839455306529999 0.0 0.00012207403779029846 -1.0 0.9908171892166138 0.434081494808197 0 1.0 0 0.0 0 0.0 0 0.0 0.4259195327758789 -0.1212485134601593 -0.2839455306529999 0.0 0.0 -1.0 0.9875213503837585 0.4338241219520569 0 1.0 0 0.0 0 0.0 0 0.0 0.4259195327758789 -0.1212485134601593 -0.2839455306529999 0.0 0.0 -1.0 0.9875213503837585 0.4338241219520569 0 1.0 0 0.0 0 0.0 0 0.0 0.43215131759643555 -0.12115121632814407 -0.2839455306529999 0.0 0.0 -1.0 0.9838976860046387 0.43378758430480957 0 1.0 0 0.0 0 0.0 0 0.0 0.5805556774139404 -0.12243308126926422 -0.2839455306529999 0.0 0.0 -1.0 0.9056787490844727 0.4378116726875305 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 -0.12518896162509918 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0700517892837524 0.4421687126159668 0 1.0 0 0.0 0 0.0 0 0.0 0.4259195327758789 -0.1212485134601593 -0.2839455306529999 0.0 0.0 -1.0 0.9875213503837585 0.4338241219520569 0 1.0 0 0.0 0 0.0 0 0.0 0.5805556774139404 -0.12243308126926422 -0.2839455306529999 0.0 0.0 -1.0 0.9056787490844727 0.4378116726875305 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 -0.12518896162509918 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0700517892837524 0.4421687126159668 0 1.0 0 0.0 0 0.0 0 0.0 0.5805556774139404 -0.12243308126926422 -0.2839455306529999 0.0 0.0 -1.0 0.9056787490844727 0.4378116726875305 0 1.0 0 0.0 0 0.0 0 0.0 0.5761044025421143 -0.12946023046970367 -0.2839455306529999 0.0 0.0 -1.0 0.9081569910049438 0.431171178817749 0 1.0 0 0.0 0 0.0 0 0.0 0.2740015983581543 -0.1320118010044098 -0.2839455306529999 0.0 0.0 -1.0 1.067474365234375 0.43550050258636475 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 -0.12518896162509918 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0700517892837524 0.4421687126159668 0 1.0 0 0.0 0 0.0 0 0.0 0.5761044025421143 -0.12946023046970367 -0.2839455306529999 0.0 0.0 -1.0 0.9081569910049438 0.431171178817749 0 1.0 0 0.0 0 0.0 0 0.0 0.2740015983581543 -0.1320118010044098 -0.2839455306529999 0.0 0.0 -1.0 1.067474365234375 0.43550050258636475 0 1.0 0 0.0 0 0.0 0 0.0 0.5761044025421143 -0.12946023046970367 -0.2839455306529999 0.0 0.0 -1.0 0.9081569910049438 0.431171178817749 0 1.0 0 0.0 0 0.0 0 0.0 0.5710597038269043 -0.13628791272640228 -0.2839455306529999 0.0 0.0 -1.0 0.9108988046646118 0.4247055649757385 0 1.0 0 0.0 0 0.0 0 0.0 0.27947092056274414 -0.13852813839912415 -0.2839455306529999 0.0 0.0 -1.0 1.0647085905075073 0.42908698320388794 0 1.0 0 0.0 0 0.0 0 0.0 0.2740015983581543 -0.1320118010044098 -0.2839455306529999 0.0 0.0 -1.0 1.067474365234375 0.43550050258636475 0 1.0 0 0.0 0 0.0 0 0.0 0.5710597038269043 -0.13628791272640228 -0.2839455306529999 0.0 0.0 -1.0 0.9108988046646118 0.4247055649757385 0 1.0 0 0.0 0 0.0 0 0.0 0.27947092056274414 -0.13852813839912415 -0.2839455306529999 0.0 0.0 -1.0 1.0647085905075073 0.42908698320388794 0 1.0 0 0.0 0 0.0 0 0.0 0.5710597038269043 -0.13628791272640228 -0.2839455306529999 0.0 0.0 -1.0 0.9108988046646118 0.4247055649757385 0 1.0 0 0.0 0 0.0 0 0.0 0.5654213428497314 -0.14291614294052124 -0.2839455306529999 0.0 0.0 -1.0 0.9139134883880615 0.4184088706970215 0 1.0 0 0.0 0 0.0 0 0.0 0.2853658199310303 -0.14473800361156464 -0.2839455306529999 0.0 0.0 -1.0 1.0617470741271973 0.42292243242263794 0 1.0 0 0.0 0 0.0 0 0.0 0.27947092056274414 -0.13852813839912415 -0.2839455306529999 0.0 0.0 -1.0 1.0647085905075073 0.42908698320388794 0 1.0 0 0.0 0 0.0 0 0.0 0.5654213428497314 -0.14291614294052124 -0.2839455306529999 0.0 0.0 -1.0 0.9139134883880615 0.4184088706970215 0 1.0 0 0.0 0 0.0 0 0.0 0.2853658199310303 -0.14473800361156464 -0.2839455306529999 0.0 0.0 -1.0 1.0617470741271973 0.42292243242263794 0 1.0 0 0.0 0 0.0 0 0.0 0.5654213428497314 -0.14291614294052124 -0.2839455306529999 0.0 0.0 -1.0 0.9139134883880615 0.4184088706970215 0 1.0 0 0.0 0 0.0 0 0.0 0.5591895580291748 -0.14934493601322174 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9172108173370361 0.41227811574935913 0 1.0 0 0.0 0 0.0 0 0.0 0.2916862964630127 -0.15064138174057007 -0.2839455306529999 0.0 0.0 -1.0 1.0585821866989136 0.4170032739639282 0 1.0 0 0.0 0 0.0 0 0.0 0.2853658199310303 -0.14473800361156464 -0.2839455306529999 0.0 0.0 -1.0 1.0617470741271973 0.42292243242263794 0 1.0 0 0.0 0 0.0 0 0.0 0.5591895580291748 -0.14934493601322174 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9172108173370361 0.41227811574935913 0 1.0 0 0.0 0 0.0 0 0.0 0.2916862964630127 -0.15064138174057007 -0.2839455306529999 0.0 0.0 -1.0 1.0585821866989136 0.4170032739639282 0 1.0 0 0.0 0 0.0 0 0.0 0.5591895580291748 -0.14934493601322174 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9172108173370361 0.41227811574935913 0 1.0 0 0.0 0 0.0 0 0.0 0.5523643493652344 -0.1555742621421814 -0.2839455306529999 0.0 0.0 -1.0 0.9208009243011475 0.40631377696990967 0 1.0 0 0.0 0 0.0 0 0.0 0.2984325885772705 -0.15623830258846283 -0.2839455306529999 0.0 0.0 -1.0 1.0552053451538086 0.411327600479126 0 1.0 0 0.0 0 0.0 0 0.0 0.2916862964630127 -0.15064138174057007 -0.2839455306529999 0.0 0.0 -1.0 1.0585821866989136 0.4170032739639282 0 1.0 0 0.0 0 0.0 0 0.0 0.5523643493652344 -0.1555742621421814 -0.2839455306529999 0.0 0.0 -1.0 0.9208009243011475 0.40631377696990967 0 1.0 0 0.0 0 0.0 0 0.0 0.2984325885772705 -0.15623830258846283 -0.2839455306529999 0.0 0.0 -1.0 1.0552053451538086 0.411327600479126 0 1.0 0 0.0 0 0.0 0 0.0 0.5523643493652344 -0.1555742621421814 -0.2839455306529999 0.0 0.0 -1.0 0.9208009243011475 0.40631377696990967 0 1.0 0 0.0 0 0.0 0 0.0 0.5449578762054443 -0.16144844889640808 -0.2839455306529999 0.0 0.0 -1.0 0.9246793389320374 0.40065115690231323 0 1.0 0 0.0 0 0.0 0 0.0 0.3056044578552246 -0.16152872145175934 -0.2839455306529999 0.0 0.0 -1.0 1.0516083240509033 0.4058956503868103 0 1.0 0 0.0 0 0.0 0 0.0 0.2984325885772705 -0.15623830258846283 -0.2839455306529999 0.0 0.0 -1.0 1.0552053451538086 0.411327600479126 0 1.0 0 0.0 0 0.0 0 0.0 0.5449578762054443 -0.16144844889640808 -0.2839455306529999 0.0 0.0 -1.0 0.9246793389320374 0.40065115690231323 0 1.0 0 0.0 0 0.0 0 0.0 0.3056044578552246 -0.16152872145175934 -0.2839455306529999 0.0 0.0 -1.0 1.0516083240509033 0.4058956503868103 0 1.0 0 0.0 0 0.0 0 0.0 0.5449578762054443 -0.16144844889640808 -0.2839455306529999 0.0 0.0 -1.0 0.9246793389320374 0.40065115690231323 0 1.0 0 0.0 0 0.0 0 0.0 0.5369820594787598 -0.16681185364723206 -0.2839455306529999 0.0 0.0 -1.0 0.9288429021835327 0.3954232335090637 0 1.0 0 0.0 0 0.0 0 0.0 0.31320953369140625 -0.1664518564939499 -0.2839455306529999 0.0 0.0 -1.0 1.0477814674377441 0.400759756565094 0 1.0 0 0.0 0 0.0 0 0.0 0.3056044578552246 -0.16152872145175934 -0.2839455306529999 0.0 0.0 -1.0 1.0516083240509033 0.4058956503868103 0 1.0 0 0.0 0 0.0 0 0.0 0.5369820594787598 -0.16681185364723206 -0.2839455306529999 0.0 0.0 -1.0 0.9288429021835327 0.3954232335090637 0 1.0 0 0.0 0 0.0 0 0.0 0.3212544918060303 -0.1709468960762024 -0.2839455306529999 0.0 0.0 -1.0 1.0437146425247192 0.3959726095199585 0 1.0 0 0.0 0 0.0 0 0.0 0.31320953369140625 -0.1664518564939499 -0.2839455306529999 0.0 0.0 -1.0 1.0477814674377441 0.400759756565094 0 1.0 0 0.0 0 0.0 0 0.0 0.5369820594787598 -0.16681185364723206 -0.2839455306529999 0.0 0.0 -1.0 0.9288429021835327 0.3954232335090637 0 1.0 0 0.0 0 0.0 0 0.0 0.3212544918060303 -0.1709468960762024 -0.2839455306529999 0.0 0.0 -1.0 1.0437146425247192 0.3959726095199585 0 1.0 0 0.0 0 0.0 0 0.0 0.5369820594787598 -0.16681185364723206 -0.2839455306529999 0.0 0.0 -1.0 0.9288429021835327 0.3954232335090637 0 1.0 0 0.0 0 0.0 0 0.0 0.5284371376037598 -0.17166444659233093 -0.2839455306529999 0.0 0.0 -1.0 0.9333038926124573 0.3906322717666626 0 1.0 0 0.0 0 0.0 0 0.0 0.3297398090362549 -0.17501384019851685 -0.2839455306529999 0.0 0.0 -1.0 1.0393983125686646 0.39153915643692017 0 1.0 0 0.0 0 0.0 0 0.0 0.3212544918060303 -0.1709468960762024 -0.2839455306529999 0.0 0.0 -1.0 1.0437146425247192 0.3959726095199585 0 1.0 0 0.0 0 0.0 0 0.0 0.5284371376037598 -0.17166444659233093 -0.2839455306529999 0.0 0.0 -1.0 0.9333038926124573 0.3906322717666626 0 1.0 0 0.0 0 0.0 0 0.0 0.3297398090362549 -0.17501384019851685 -0.2839455306529999 0.0 0.0 -1.0 1.0393983125686646 0.39153915643692017 0 1.0 0 0.0 0 0.0 0 0.0 0.5284371376037598 -0.17166444659233093 -0.2839455306529999 0.0 0.0 -1.0 0.9333038926124573 0.3906322717666626 0 1.0 0 0.0 0 0.0 0 0.0 0.5193231105804443 -0.1760062575340271 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9380745887756348 0.38628554344177246 0 1.0 0 0.0 0 0.0 0 0.0 0.3386654853820801 -0.17865267395973206 -0.2839455306529999 0.0 0.0 -1.0 1.0348234176635742 0.3874672055244446 0 1.0 0 0.0 0 0.0 0 0.0 0.3297398090362549 -0.17501384019851685 -0.2839455306529999 0.0 0.0 -1.0 1.0393983125686646 0.39153915643692017 0 1.0 0 0.0 0 0.0 0 0.0 0.5193231105804443 -0.1760062575340271 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9380745887756348 0.38628554344177246 0 1.0 0 0.0 0 0.0 0 0.0 0.3386654853820801 -0.17865267395973206 -0.2839455306529999 0.0 0.0 -1.0 1.0348234176635742 0.3874672055244446 0 1.0 0 0.0 0 0.0 0 0.0 0.5193231105804443 -0.1760062575340271 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9380745887756348 0.38628554344177246 0 1.0 0 0.0 0 0.0 0 0.0 0.5096397399902344 -0.17983725666999817 -0.2839455306529999 0.0 0.0 -1.0 0.9431666135787964 0.38239461183547974 0 1.0 0 0.0 0 0.0 0 0.0 0.34803128242492676 -0.18186341226100922 -0.2839455306529999 0.0 0.0 -1.0 1.0299818515777588 0.3837677836418152 0 1.0 0 0.0 0 0.0 0 0.0 0.3386654853820801 -0.17865267395973206 -0.2839455306529999 0.0 0.0 -1.0 1.0348234176635742 0.3874672055244446 0 1.0 0 0.0 0 0.0 0 0.0 0.5096397399902344 -0.17983725666999817 -0.2839455306529999 0.0 0.0 -1.0 0.9431666135787964 0.38239461183547974 0 1.0 0 0.0 0 0.0 0 0.0 0.34803128242492676 -0.18186341226100922 -0.2839455306529999 0.0 0.0 -1.0 1.0299818515777588 0.3837677836418152 0 1.0 0 0.0 0 0.0 0 0.0 0.5096397399902344 -0.17983725666999817 -0.2839455306529999 0.0 0.0 -1.0 0.9431666135787964 0.38239461183547974 0 1.0 0 0.0 0 0.0 0 0.0 0.499387264251709 -0.18315744400024414 -0.2839455306529999 0.0 0.0 -1.0 0.9485899209976196 0.37897592782974243 0 1.0 0 0.0 0 0.0 0 0.0 0.357837438583374 -0.18464605510234833 -0.2839455306529999 0.0 0.0 -1.0 1.0248663425445557 0.38045501708984375 0 1.0 0 0.0 0 0.0 0 0.0 0.34803128242492676 -0.18186341226100922 -0.2839455306529999 0.0 0.0 -1.0 1.0299818515777588 0.3837677836418152 0 1.0 0 0.0 0 0.0 0 0.0 0.499387264251709 -0.18315744400024414 -0.2839455306529999 0.0 0.0 -1.0 0.9485899209976196 0.37897592782974243 0 1.0 0 0.0 0 0.0 0 0.0 0.357837438583374 -0.18464605510234833 -0.2839455306529999 0.0 0.0 -1.0 1.0248663425445557 0.38045501708984375 0 1.0 0 0.0 0 0.0 0 0.0 0.499387264251709 -0.18315744400024414 -0.2839455306529999 0.0 0.0 -1.0 0.9485899209976196 0.37897592782974243 0 1.0 0 0.0 0 0.0 0 0.0 0.48856568336486816 -0.1859668493270874 -0.2839455306529999 0.0 0.0 -1.0 0.9543525576591492 0.37605053186416626 0 1.0 0 0.0 0 0.0 0 0.0 0.3680837154388428 -0.1870006024837494 -0.2839455306529999 0.0 0.0 -1.0 1.0194717645645142 0.3775457739830017 0 1.0 0 0.0 0 0.0 0 0.0 0.357837438583374 -0.18464605510234833 -0.2839455306529999 0.0 0.0 -1.0 1.0248663425445557 0.38045501708984375 0 1.0 0 0.0 0 0.0 0 0.0 0.48856568336486816 -0.1859668493270874 -0.2839455306529999 0.0 0.0 -1.0 0.9543525576591492 0.37605053186416626 0 1.0 0 0.0 0 0.0 0 0.0 0.3680837154388428 -0.1870006024837494 -0.2839455306529999 0.0 0.0 -1.0 1.0194717645645142 0.3775457739830017 0 1.0 0 0.0 0 0.0 0 0.0 0.48856568336486816 -0.1859668493270874 -0.2839455306529999 0.0 0.0 -1.0 0.9543525576591492 0.37605053186416626 0 1.0 0 0.0 0 0.0 0 0.0 0.4771747589111328 -0.18826544284820557 -0.2839455306529999 0.0 0.0 -1.0 0.9604600667953491 0.3736436367034912 0 1.0 0 0.0 0 0.0 0 0.0 0.3787703514099121 -0.1889270544052124 -0.2839455306529999 0.0 0.0 -1.0 1.0137944221496582 0.37505996227264404 0 1.0 0 0.0 0 0.0 0 0.0 0.3680837154388428 -0.1870006024837494 -0.2839455306529999 0.0 0.0 -1.0 1.0194717645645142 0.3775457739830017 0 1.0 0 0.0 0 0.0 0 0.0 0.4771747589111328 -0.18826544284820557 -0.2839455306529999 0.0 0.0 -1.0 0.9604600667953491 0.3736436367034912 0 1.0 0 0.0 0 0.0 0 0.0 0.3787703514099121 -0.1889270544052124 -0.2839455306529999 0.0 0.0 -1.0 1.0137944221496582 0.37505996227264404 0 1.0 0 0.0 0 0.0 0 0.0 0.4771747589111328 -0.18826544284820557 -0.2839455306529999 0.0 0.0 -1.0 0.9604600667953491 0.3736436367034912 0 1.0 0 0.0 0 0.0 0 0.0 0.46521472930908203 -0.19005325436592102 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9669138193130493 0.3717842698097229 0 1.0 0 0.0 0 0.0 0 0.0 0.38989734649658203 -0.19042539596557617 -0.2839455306529999 0.0 0.0 -1.0 1.0078338384628296 0.3730196952819824 0 1.0 0 0.0 0 0.0 0 0.0 0.3787703514099121 -0.1889270544052124 -0.2839455306529999 0.0 0.0 -1.0 1.0137944221496582 0.37505996227264404 0 1.0 0 0.0 0 0.0 0 0.0 0.46521472930908203 -0.19005325436592102 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9669138193130493 0.3717842698097229 0 1.0 0 0.0 0 0.0 0 0.0 0.38989734649658203 -0.19042539596557617 -0.2839455306529999 0.0 0.0 -1.0 1.0078338384628296 0.3730196952819824 0 1.0 0 0.0 0 0.0 0 0.0 0.46521472930908203 -0.19005325436592102 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9669138193130493 0.3717842698097229 0 1.0 0 0.0 0 0.0 0 0.0 0.4526855945587158 -0.19133025407791138 -0.2839455306529999 0.0 0.0 -1.0 0.9737112522125244 0.37050437927246094 0 1.0 0 0.0 0 0.0 0 0.0 0.40146446228027344 -0.1914956420660019 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0015926361083984 0.3714491128921509 0 1.0 0 0.0 0 0.0 0 0.0 0.38989734649658203 -0.19042539596557617 -0.2839455306529999 0.0 0.0 -1.0 1.0078338384628296 0.3730196952819824 0 1.0 0 0.0 0 0.0 0 0.0 0.4526855945587158 -0.19133025407791138 -0.2839455306529999 0.0 0.0 -1.0 0.9737112522125244 0.37050437927246094 0 1.0 0 0.0 0 0.0 0 0.0 0.40146446228027344 -0.1914956420660019 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0015926361083984 0.3714491128921509 0 1.0 0 0.0 0 0.0 0 0.0 0.4526855945587158 -0.19133025407791138 -0.2839455306529999 0.0 0.0 -1.0 0.9737112522125244 0.37050437927246094 0 1.0 0 0.0 0 0.0 0 0.0 0.4395871162414551 -0.19209645688533783 -0.2839455306529999 0.0 0.0 -1.0 0.9808439016342163 0.36983782052993774 0 1.0 0 0.0 0 0.0 0 0.0 0.41347193717956543 -0.19213779270648956 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9950767755508423 0.37037354707717896 0 1.0 0 0.0 0 0.0 0 0.0 0.40146446228027344 -0.1914956420660019 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0015926361083984 0.3714491128921509 0 1.0 0 0.0 0 0.0 0 0.0 0.4395871162414551 -0.19209645688533783 -0.2839455306529999 0.0 0.0 -1.0 0.9808439016342163 0.36983782052993774 0 1.0 0 0.0 0 0.0 0 0.0 0.41347193717956543 -0.19213779270648956 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9950767755508423 0.37037354707717896 0 1.0 0 0.0 0 0.0 0 0.0 0.4395871162414551 -0.19209645688533783 -0.2839455306529999 0.0 0.0 -1.0 0.9808439016342163 0.36983782052993774 0 1.0 0 0.0 0 0.0 0 0.0 0.4259195327758789 -0.19235184788703918 -0.2839455306529999 0.0 0.0 -1.0 0.9882972240447998 0.3698185086250305 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 -0.04734307527542114 -0.2839455306529999 0.0 0.0 -1.0 0.07294094562530518 0.635789155960083 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 0.18803346157073975 -0.2839455306529999 0.0 0.0 -1.0 0.09209313988685608 0.823844313621521 0 1.0 0 0.0 0 0.0 0 0.0 -0.05954456329345703 0.18803346157073975 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.018389105796813965 0.8526803851127625 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 -0.04734307527542114 -0.2839455306529999 0.0 0.0 -1.0 0.07294094562530518 0.635789155960083 0 1.0 0 0.0 0 0.0 0 0.0 -0.05954456329345703 0.18803346157073975 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.018389105796813965 0.8526803851127625 0 1.0 0 0.0 0 0.0 0 0.0 -0.05954456329345703 0.01710525155067444 -0.2839455306529999 0.0 0.0 -1.0 0.014768153429031372 0.7227939367294312 0 1.0 0 0.0 0 0.0 0 0.0 0.08196139335632324 0.03111577033996582 -0.2839455306529999 0.0 0.0 -1.0 0.9129189848899841 0.7195390462875366 0 1.0 0 0.0 0 0.0 0 0.0 0.08196139335632324 0.18803346157073975 -0.2839455306529999 0.0 0.0 -1.0 0.896752655506134 0.8321271538734436 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 0.18803346157073975 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8460309505462646 0.7894145250320435 0 1.0 0 0.0 0 0.0 0 0.0 0.08196139335632324 0.03111577033996582 -0.2839455306529999 0.0 0.0 -1.0 0.9129189848899841 0.7195390462875366 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 0.18803346157073975 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8460309505462646 0.7894145250320435 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8834002017974854 0.4818020462989807 0 1.0 0 0.0 0 0.0 0 0.0 0.08191061019897461 0.01821810007095337 -0.2839455306529999 0.0 0.0 -1.0 0.9140788316726685 0.7073009014129639 0 1.0 0 0.0 0 0.0 0 0.0 0.08196139335632324 0.03111577033996582 -0.2839455306529999 0.0 0.0 -1.0 0.9129189848899841 0.7195390462875366 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8834002017974854 0.4818020462989807 0 1.0 0 0.0 0 0.0 0 0.0 0.0817573070526123 0.006144970655441284 -0.2839455306529999 0.0 0.0 -1.0 0.9152042865753174 0.6954561471939087 0 1.0 0 0.0 0 0.0 0 0.0 0.08191061019897461 0.01821810007095337 -0.2839455306529999 0.0 0.0 -1.0 0.9140788316726685 0.7073009014129639 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8834002017974854 0.4818020462989807 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 -0.04734307527542114 -0.2839455306529999 0.0 0.0 -1.0 0.07294094562530518 0.635789155960083 0 1.0 0 0.0 0 0.0 0 0.0 -0.05954456329345703 0.01710525155067444 -0.2839455306529999 0.0 0.0 -1.0 0.014768153429031372 0.7227939367294312 0 1.0 0 0.0 0 0.0 0 0.0 -0.059506893157958984 0.004450798034667969 -0.2839455306529999 0.0 0.0 -1.0 0.014528810977935791 0.7096704244613647 0 1.0 0 0.0 0 0.0 0 0.0 0.08150196075439453 -0.005103573203086853 -0.2839455306529999 0.0 0.0 -1.0 0.9162991046905518 0.6840966939926147 0 1.0 0 0.0 0 0.0 0 0.0 0.0817573070526123 0.006144970655441284 -0.2839455306529999 0.0 0.0 -1.0 0.9152042865753174 0.6954561471939087 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8834002017974854 0.4818020462989807 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 -0.04734307527542114 -0.2839455306529999 0.0 0.0 -1.0 0.07294094562530518 0.635789155960083 0 1.0 0 0.0 0 0.0 0 0.0 -0.059506893157958984 0.004450798034667969 -0.2839455306529999 0.0 0.0 -1.0 0.014528810977935791 0.7096704244613647 0 1.0 0 0.0 0 0.0 0 0.0 -0.059393882751464844 -0.007359623908996582 -0.2839455306529999 0.0 0.0 -1.0 0.014256507158279419 0.6969905495643616 0 1.0 0 0.0 0 0.0 0 0.0 0.08114433288574219 -0.015527546405792236 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9173672795295715 0.6733074188232422 0 1.0 0 0.0 0 0.0 0 0.0 0.08150196075439453 -0.005103573203086853 -0.2839455306529999 0.0 0.0 -1.0 0.9162991046905518 0.6840966939926147 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8834002017974854 0.4818020462989807 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 -0.04734307527542114 -0.2839455306529999 0.0 0.0 -1.0 0.07294094562530518 0.635789155960083 0 1.0 0 0.0 0 0.0 0 0.0 -0.059393882751464844 -0.007359623908996582 -0.2839455306529999 0.0 0.0 -1.0 0.014256507158279419 0.6969905495643616 0 1.0 0 0.0 0 0.0 0 0.0 -0.05920529365539551 -0.018326014280319214 -0.2839455306529999 0.0 0.0 -1.0 0.01395145058631897 0.6848616600036621 0 1.0 0 0.0 0 0.0 0 0.0 0.08068466186523438 -0.025126934051513672 -0.2839455306529999 0.0 0.0 -1.0 0.9184120893478394 0.6631647944450378 0 1.0 0 0.0 0 0.0 0 0.0 0.08114433288574219 -0.015527546405792236 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9173672795295715 0.6733074188232422 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8834002017974854 0.4818020462989807 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 -0.04734307527542114 -0.2839455306529999 0.0 0.0 -1.0 0.07294094562530518 0.635789155960083 0 1.0 0 0.0 0 0.0 0 0.0 -0.05920529365539551 -0.018326014280319214 -0.2839455306529999 0.0 0.0 -1.0 0.01395145058631897 0.6848616600036621 0 1.0 0 0.0 0 0.0 0 0.0 -0.05894136428833008 -0.028448358178138733 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.013614147901535034 0.6733810901641846 0 1.0 0 0.0 0 0.0 0 0.0 0.08012270927429199 -0.033901751041412354 -0.2839455306529999 0.0 0.0 -1.0 0.9194369316101074 0.6537357568740845 0 1.0 0 0.0 0 0.0 0 0.0 0.08068466186523438 -0.025126934051513672 -0.2839455306529999 0.0 0.0 -1.0 0.9184120893478394 0.6631647944450378 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8834002017974854 0.4818020462989807 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 -0.04734307527542114 -0.2839455306529999 0.0 0.0 -1.0 0.07294094562530518 0.635789155960083 0 1.0 0 0.0 0 0.0 0 0.0 -0.05894136428833008 -0.028448358178138733 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.013614147901535034 0.6733810901641846 0 1.0 0 0.0 0 0.0 0 0.0 -0.058602094650268555 -0.03772667050361633 -0.2839455306529999 0.0 0.0 -1.0 0.013244688510894775 0.6626352667808533 0 1.0 0 0.0 0 0.0 0 0.0 0.07945871353149414 -0.04185198247432709 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9204447269439697 0.6450778245925903 0 1.0 0 0.0 0 0.0 0 0.0 0.08012270927429199 -0.033901751041412354 -0.2839455306529999 0.0 0.0 -1.0 0.9194369316101074 0.6537357568740845 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8834002017974854 0.4818020462989807 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 -0.04734307527542114 -0.2839455306529999 0.0 0.0 -1.0 0.07294094562530518 0.635789155960083 0 1.0 0 0.0 0 0.0 0 0.0 -0.058602094650268555 -0.03772667050361633 -0.2839455306529999 0.0 0.0 -1.0 0.013244688510894775 0.6626352667808533 0 1.0 0 0.0 0 0.0 0 0.0 -0.05818748474121094 -0.046160951256752014 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.012842893600463867 0.6526980996131897 0 1.0 0 0.0 0 0.0 0 0.0 0.07869243621826172 -0.04897764325141907 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9214386343955994 0.6372390985488892 0 1.0 0 0.0 0 0.0 0 0.0 0.07945871353149414 -0.04185198247432709 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9204447269439697 0.6450778245925903 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8834002017974854 0.4818020462989807 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 -0.04734307527542114 -0.2839455306529999 0.0 0.0 -1.0 0.07294094562530518 0.635789155960083 0 1.0 0 0.0 0 0.0 0 0.0 -0.05818748474121094 -0.046160951256752014 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.012842893600463867 0.6526980996131897 0 1.0 0 0.0 0 0.0 0 0.0 -0.057697296142578125 -0.053751200437545776 -0.2839455306529999 0.0 0.0 -1.0 0.012408286333084106 0.6436313390731812 0 1.0 0 0.0 0 0.0 0 0.0 -0.15787625312805176 -0.05594152212142944 -0.2839455306529999 0.0 0.0 -1.0 0.07233351469039917 0.6266542673110962 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 -0.04734307527542114 -0.2839455306529999 0.0 0.0 -1.0 0.07294094562530518 0.635789155960083 0 1.0 0 0.0 0 0.0 0 0.0 -0.057697296142578125 -0.053751200437545776 -0.2839455306529999 0.0 0.0 -1.0 0.012408286333084106 0.6436313390731812 0 1.0 0 0.0 0 0.0 0 0.0 0.07782411575317383 -0.0552787184715271 -0.2839455306529999 0.0 0.0 -1.0 0.9224212169647217 0.6302591562271118 0 1.0 0 0.0 0 0.0 0 0.0 0.07869243621826172 -0.04897764325141907 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9214386343955994 0.6372390985488892 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8834002017974854 0.4818020462989807 0 1.0 0 0.0 0 0.0 0 0.0 -0.15787625312805176 -0.05594152212142944 -0.2839455306529999 0.0 0.0 -1.0 0.07233351469039917 0.6266542673110962 0 1.0 0 0.0 0 0.0 0 0.0 -0.057697296142578125 -0.053751200437545776 -0.2839455306529999 0.0 0.0 -1.0 0.012408286333084106 0.6436313390731812 0 1.0 0 0.0 0 0.0 0 0.0 -0.05713176727294922 -0.06049741059541702 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.011940598487854004 0.6354849934577942 0 1.0 0 0.0 0 0.0 0 0.0 0.07685351371765137 -0.06075522303581238 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9233952164649963 0.6241699457168579 0 1.0 0 0.0 0 0.0 0 0.0 0.07782411575317383 -0.0552787184715271 -0.2839455306529999 0.0 0.0 -1.0 0.9224212169647217 0.6302591562271118 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8834002017974854 0.4818020462989807 0 1.0 0 0.0 0 0.0 0 0.0 -0.15759897232055664 -0.06422378122806549 -0.2839455306529999 0.0 0.0 -1.0 0.07166120409965515 0.6177982091903687 0 1.0 0 0.0 0 0.0 0 0.0 -0.15787625312805176 -0.05594152212142944 -0.2839455306529999 0.0 0.0 -1.0 0.07233351469039917 0.6266542673110962 0 1.0 0 0.0 0 0.0 0 0.0 -0.05713176727294922 -0.06049741059541702 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.011940598487854004 0.6354849934577942 0 1.0 0 0.0 0 0.0 0 0.0 -0.15759897232055664 -0.06422378122806549 -0.2839455306529999 0.0 0.0 -1.0 0.07166120409965515 0.6177982091903687 0 1.0 0 0.0 0 0.0 0 0.0 -0.05713176727294922 -0.06049741059541702 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.011940598487854004 0.6354849934577942 0 1.0 0 0.0 0 0.0 0 0.0 -0.05649089813232422 -0.06639958173036575 -0.2839455306529999 0.0 0.0 -1.0 0.01143917441368103 0.628298282623291 0 1.0 0 0.0 0 0.0 0 0.0 0.07578086853027344 -0.0654071494936943 -0.2839455306529999 0.0 0.0 -1.0 0.9243631362915039 0.6189967393875122 0 1.0 0 0.0 0 0.0 0 0.0 0.07685351371765137 -0.06075522303581238 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9233952164649963 0.6241699457168579 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8834002017974854 0.4818020462989807 0 1.0 0 0.0 0 0.0 0 0.0 -0.1571369171142578 -0.0721898302435875 -0.2839455306529999 0.0 0.0 -1.0 0.0709240734577179 0.6092349290847778 0 1.0 0 0.0 0 0.0 0 0.0 -0.15759897232055664 -0.06422378122806549 -0.2839455306529999 0.0 0.0 -1.0 0.07166120409965515 0.6177982091903687 0 1.0 0 0.0 0 0.0 0 0.0 -0.05649089813232422 -0.06639958173036575 -0.2839455306529999 0.0 0.0 -1.0 0.01143917441368103 0.628298282623291 0 1.0 0 0.0 0 0.0 0 0.0 0.07460594177246094 -0.06923449784517288 -0.2839455306529999 0.0 0.0 -1.0 0.925327718257904 0.6147598028182983 0 1.0 0 0.0 0 0.0 0 0.0 0.07578086853027344 -0.0654071494936943 -0.2839455306529999 0.0 0.0 -1.0 0.9243631362915039 0.6189967393875122 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8834002017974854 0.4818020462989807 0 1.0 0 0.0 0 0.0 0 0.0 -0.1571369171142578 -0.0721898302435875 -0.2839455306529999 0.0 0.0 -1.0 0.0709240734577179 0.6092349290847778 0 1.0 0 0.0 0 0.0 0 0.0 -0.05649089813232422 -0.06639958173036575 -0.2839455306529999 0.0 0.0 -1.0 0.01143917441368103 0.628298282623291 0 1.0 0 0.0 0 0.0 0 0.0 -0.05577445030212402 -0.07145771384239197 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.010903030633926392 0.6221014261245728 0 1.0 0 0.0 0 0.0 0 0.0 0.07329249382019043 -0.07260335236787796 -0.2839455306529999 0.0 0.0 -1.0 0.9263383150100708 0.6110518574714661 0 1.0 0 0.0 0 0.0 0 0.0 0.07460594177246094 -0.06923449784517288 -0.2839455306529999 0.0 0.0 -1.0 0.925327718257904 0.6147598028182983 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8834002017974854 0.4818020462989807 0 1.0 0 0.0 0 0.0 0 0.0 -0.1571369171142578 -0.0721898302435875 -0.2839455306529999 0.0 0.0 -1.0 0.0709240734577179 0.6092349290847778 0 1.0 0 0.0 0 0.0 0 0.0 -0.05577445030212402 -0.07145771384239197 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.010903030633926392 0.6221014261245728 0 1.0 0 0.0 0 0.0 0 0.0 -0.054982662200927734 -0.07567181438207626 -0.2839455306529999 0.0 0.0 -1.0 0.010331302881240845 0.6169167160987854 0 1.0 0 0.0 0 0.0 0 0.0 -0.15648984909057617 -0.07983966916799545 -0.2839455306529999 0.0 0.0 -1.0 0.0701218843460083 0.6009762287139893 0 1.0 0 0.0 0 0.0 0 0.0 -0.1571369171142578 -0.0721898302435875 -0.2839455306529999 0.0 0.0 -1.0 0.0709240734577179 0.6092349290847778 0 1.0 0 0.0 0 0.0 0 0.0 -0.054982662200927734 -0.07567181438207626 -0.2839455306529999 0.0 0.0 -1.0 0.010331302881240845 0.6169167160987854 0 1.0 0 0.0 0 0.0 0 0.0 0.07180380821228027 -0.075879767537117 -0.2839455306529999 0.0 0.0 -1.0 0.9274437427520752 0.6074543595314026 0 1.0 0 0.0 0 0.0 0 0.0 0.07329249382019043 -0.07260335236787796 -0.2839455306529999 0.0 0.0 -1.0 0.9263383150100708 0.6110518574714661 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8834002017974854 0.4818020462989807 0 1.0 0 0.0 0 0.0 0 0.0 -0.15648984909057617 -0.07983966916799545 -0.2839455306529999 0.0 0.0 -1.0 0.0701218843460083 0.6009762287139893 0 1.0 0 0.0 0 0.0 0 0.0 -0.054982662200927734 -0.07567181438207626 -0.2839455306529999 0.0 0.0 -1.0 0.010331302881240845 0.6169167160987854 0 1.0 0 0.0 0 0.0 0 0.0 -0.05411553382873535 -0.07904185354709625 -0.2839455306529999 0.0 0.0 -1.0 0.009722918272018433 0.6127604246139526 0 1.0 0 0.0 0 0.0 0 0.0 0.07014012336730957 -0.07906375080347061 -0.2839455306529999 0.0 0.0 -1.0 0.9286445379257202 0.603966474533081 0 1.0 0 0.0 0 0.0 0 0.0 0.07180380821228027 -0.075879767537117 -0.2839455306529999 0.0 0.0 -1.0 0.9274437427520752 0.6074543595314026 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8834002017974854 0.4818020462989807 0 1.0 0 0.0 0 0.0 0 0.0 -0.15648984909057617 -0.07983966916799545 -0.2839455306529999 0.0 0.0 -1.0 0.0701218843460083 0.6009762287139893 0 1.0 0 0.0 0 0.0 0 0.0 -0.05411553382873535 -0.07904185354709625 -0.2839455306529999 0.0 0.0 -1.0 0.009722918272018433 0.6127604246139526 0 1.0 0 0.0 0 0.0 0 0.0 -0.053148746490478516 -0.08193881809711456 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.009056895971298218 0.6091814041137695 0 1.0 0 0.0 0 0.0 0 0.0 0.06830120086669922 -0.08215530216693878 -0.2839455306529999 0.0 0.0 -1.0 0.9299417734146118 0.6005876064300537 0 1.0 0 0.0 0 0.0 0 0.0 0.07014012336730957 -0.07906375080347061 -0.2839455306529999 0.0 0.0 -1.0 0.9286445379257202 0.603966474533081 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8834002017974854 0.4818020462989807 0 1.0 0 0.0 0 0.0 0 0.0 -0.15565800666809082 -0.08717329800128937 -0.2839455306529999 0.0 0.0 -1.0 0.06925424933433533 0.593031644821167 0 1.0 0 0.0 0 0.0 0 0.0 -0.15648984909057617 -0.07983966916799545 -0.2839455306529999 0.0 0.0 -1.0 0.0701218843460083 0.6009762287139893 0 1.0 0 0.0 0 0.0 0 0.0 -0.053148746490478516 -0.08193881809711456 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.009056895971298218 0.6091814041137695 0 1.0 0 0.0 0 0.0 0 0.0 -0.15565800666809082 -0.08717329800128937 -0.2839455306529999 0.0 0.0 -1.0 0.06925424933433533 0.593031644821167 0 1.0 0 0.0 0 0.0 0 0.0 -0.053148746490478516 -0.08193881809711456 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.009056895971298218 0.6091814041137695 0 1.0 0 0.0 0 0.0 0 0.0 -0.052057743072509766 -0.08473362028598785 -0.2839455306529999 0.0 0.0 -1.0 0.00831332802772522 0.6057209968566895 0 1.0 0 0.0 0 0.0 0 0.0 0.06628727912902832 -0.08515442907810211 -0.2839455306529999 0.0 0.0 -1.0 0.9313363432884216 0.5973168015480042 0 1.0 0 0.0 0 0.0 0 0.0 0.06830120086669922 -0.08215530216693878 -0.2839455306529999 0.0 0.0 -1.0 0.9299417734146118 0.6005876064300537 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8834002017974854 0.4818020462989807 0 1.0 0 0.0 0 0.0 0 0.0 -0.15565800666809082 -0.08717329800128937 -0.2839455306529999 0.0 0.0 -1.0 0.06925424933433533 0.593031644821167 0 1.0 0 0.0 0 0.0 0 0.0 -0.052057743072509766 -0.08473362028598785 -0.2839455306529999 0.0 0.0 -1.0 0.00831332802772522 0.6057209968566895 0 1.0 0 0.0 0 0.0 0 0.0 -0.0508427619934082 -0.08742626756429672 -0.2839455306529999 0.0 0.0 -1.0 0.00749245285987854 0.602379560470581 0 1.0 0 0.0 0 0.0 0 0.0 0.06409811973571777 -0.08806112408638 -0.2839455306529999 0.0 0.0 -1.0 0.9328294992446899 0.5941532850265503 0 1.0 0 0.0 0 0.0 0 0.0 0.06628727912902832 -0.08515442907810211 -0.2839455306529999 0.0 0.0 -1.0 0.9313363432884216 0.5973168015480042 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8834002017974854 0.4818020462989807 0 1.0 0 0.0 0 0.0 0 0.0 -0.15464115142822266 -0.09419071674346924 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.06832051277160645 0.5854088664054871 0 1.0 0 0.0 0 0.0 0 0.0 -0.15565800666809082 -0.08717329800128937 -0.2839455306529999 0.0 0.0 -1.0 0.06925424933433533 0.593031644821167 0 1.0 0 0.0 0 0.0 0 0.0 -0.0508427619934082 -0.08742626756429672 -0.2839455306529999 0.0 0.0 -1.0 0.00749245285987854 0.602379560470581 0 1.0 0 0.0 0 0.0 0 0.0 -0.15464115142822266 -0.09419071674346924 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.06832051277160645 0.5854088664054871 0 1.0 0 0.0 0 0.0 0 0.0 -0.0508427619934082 -0.08742626756429672 -0.2839455306529999 0.0 0.0 -1.0 0.00749245285987854 0.602379560470581 0 1.0 0 0.0 0 0.0 0 0.0 -0.04950380325317383 -0.09001675248146057 -0.2839455306529999 0.0 0.0 -1.0 0.006594359874725342 0.5991576910018921 0 1.0 0 0.0 0 0.0 0 0.0 0.06173396110534668 -0.09087538719177246 -0.2839455306529999 0.0 0.0 -1.0 0.9344223737716675 0.5910961627960205 0 1.0 0 0.0 0 0.0 0 0.0 0.06409811973571777 -0.08806112408638 -0.2839455306529999 0.0 0.0 -1.0 0.9328294992446899 0.5941532850265503 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8834002017974854 0.4818020462989807 0 1.0 0 0.0 0 0.0 0 0.0 -0.15464115142822266 -0.09419071674346924 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.06832051277160645 0.5854088664054871 0 1.0 0 0.0 0 0.0 0 0.0 -0.04950380325317383 -0.09001675248146057 -0.2839455306529999 0.0 0.0 -1.0 0.006594359874725342 0.5991576910018921 0 1.0 0 0.0 0 0.0 0 0.0 -0.04804062843322754 -0.0925050750374794 -0.2839455306529999 0.0 0.0 -1.0 0.005618959665298462 0.5960554480552673 0 1.0 0 0.0 0 0.0 0 0.0 0.05919456481933594 -0.09359721839427948 -0.2839455306529999 0.0 0.0 -1.0 0.9361163377761841 0.5881446599960327 0 1.0 0 0.0 0 0.0 0 0.0 0.06173396110534668 -0.09087538719177246 -0.2839455306529999 0.0 0.0 -1.0 0.9344223737716675 0.5910961627960205 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8834002017974854 0.4818020462989807 0 1.0 0 0.0 0 0.0 0 0.0 -0.15464115142822266 -0.09419071674346924 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.06832051277160645 0.5854088664054871 0 1.0 0 0.0 0 0.0 0 0.0 -0.04804062843322754 -0.0925050750374794 -0.2839455306529999 0.0 0.0 -1.0 0.005618959665298462 0.5960554480552673 0 1.0 0 0.0 0 0.0 0 0.0 -0.04645347595214844 -0.09489124268293381 -0.2839455306529999 0.0 0.0 -1.0 0.004566401243209839 0.5930731296539307 0 1.0 0 0.0 0 0.0 0 0.0 0.05647993087768555 -0.09622661769390106 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9379128217697144 0.5852980613708496 0 1.0 0 0.0 0 0.0 0 0.0 0.05919456481933594 -0.09359721839427948 -0.2839455306529999 0.0 0.0 -1.0 0.9361163377761841 0.5881446599960327 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8834002017974854 0.4818020462989807 0 1.0 0 0.0 0 0.0 0 0.0 -0.15343952178955078 -0.10089192539453506 -0.2839455306529999 0.0 0.0 -1.0 0.06731992959976196 0.5781137943267822 0 1.0 0 0.0 0 0.0 0 0.0 -0.15464115142822266 -0.09419071674346924 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.06832051277160645 0.5854088664054871 0 1.0 0 0.0 0 0.0 0 0.0 -0.04645347595214844 -0.09489124268293381 -0.2839455306529999 0.0 0.0 -1.0 0.004566401243209839 0.5930731296539307 0 1.0 0 0.0 0 0.0 0 0.0 -0.15343952178955078 -0.10089192539453506 -0.2839455306529999 0.0 0.0 -1.0 0.06731992959976196 0.5781137943267822 0 1.0 0 0.0 0 0.0 0 0.0 -0.04645347595214844 -0.09489124268293381 -0.2839455306529999 0.0 0.0 -1.0 0.004566401243209839 0.5930731296539307 0 1.0 0 0.0 0 0.0 0 0.0 -0.04474234580993652 -0.0971752479672432 -0.2839455306529999 0.0 0.0 -1.0 0.003436654806137085 0.5902106761932373 0 1.0 0 0.0 0 0.0 0 0.0 0.05359029769897461 -0.0987635925412178 -0.2839455306529999 0.0 0.0 -1.0 0.9398130178451538 0.5825554728507996 0 1.0 0 0.0 0 0.0 0 0.0 0.05647993087768555 -0.09622661769390106 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9379128217697144 0.5852980613708496 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8834002017974854 0.4818020462989807 0 1.0 0 0.0 0 0.0 0 0.0 -0.15343952178955078 -0.10089192539453506 -0.2839455306529999 0.0 0.0 -1.0 0.06731992959976196 0.5781137943267822 0 1.0 0 0.0 0 0.0 0 0.0 -0.04474234580993652 -0.0971752479672432 -0.2839455306529999 0.0 0.0 -1.0 0.003436654806137085 0.5902106761932373 0 1.0 0 0.0 0 0.0 0 0.0 -0.0429072380065918 -0.09935709089040756 -0.2839455306529999 0.0 0.0 -1.0 0.0022296011447906494 0.5874682068824768 0 1.0 0 0.0 0 0.0 0 0.0 0.05052542686462402 -0.10120813548564911 -0.2839455306529999 0.0 0.0 -1.0 0.9418185949325562 0.5799161791801453 0 1.0 0 0.0 0 0.0 0 0.0 0.05359029769897461 -0.0987635925412178 -0.2839455306529999 0.0 0.0 -1.0 0.9398130178451538 0.5825554728507996 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8834002017974854 0.4818020462989807 0 1.0 0 0.0 0 0.0 0 0.0 -0.15343952178955078 -0.10089192539453506 -0.2839455306529999 0.0 0.0 -1.0 0.06731992959976196 0.5781137943267822 0 1.0 0 0.0 0 0.0 0 0.0 -0.0429072380065918 -0.09935709089040756 -0.2839455306529999 0.0 0.0 -1.0 0.0022296011447906494 0.5874682068824768 0 1.0 0 0.0 0 0.0 0 0.0 -0.040947914123535156 -0.10143677890300751 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.0009450018405914307 0.5848455429077148 0 1.0 0 0.0 0 0.0 0 0.0 -0.1520531177520752 -0.10727692395448685 -0.2839455306529999 0.0 0.0 -1.0 0.06625154614448547 0.5711506009101868 0 1.0 0 0.0 0 0.0 0 0.0 -0.15343952178955078 -0.10089192539453506 -0.2839455306529999 0.0 0.0 -1.0 0.06731992959976196 0.5781137943267822 0 1.0 0 0.0 0 0.0 0 0.0 -0.040947914123535156 -0.10143677890300751 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.0009450018405914307 0.5848455429077148 0 1.0 0 0.0 0 0.0 0 0.0 0.04728555679321289 -0.10356024652719498 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9439307451248169 0.5773794651031494 0 1.0 0 0.0 0 0.0 0 0.0 0.05052542686462402 -0.10120813548564911 -0.2839455306529999 0.0 0.0 -1.0 0.9418185949325562 0.5799161791801453 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 -0.2839455306529999 0.0 0.0 -1.0 0.9213816523551941 0.5436801314353943 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 -0.2839455306529999 0.0 0.0 -1.0 0.9213816523551941 0.5436801314353943 0 1.0 0 0.0 0 0.0 0 0.0 0.05052542686462402 -0.10120813548564911 -0.2839455306529999 0.0 0.0 -1.0 0.9418185949325562 0.5799161791801453 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8834002017974854 0.4818020462989807 0 1.0 0 0.0 0 0.0 0 0.0 -0.1520531177520752 -0.10727692395448685 -0.2839455306529999 0.0 0.0 -1.0 1.066251516342163 0.5711506009101868 0 1.0 0 0.0 0 0.0 0 0.0 -0.040947914123535156 -0.10143677890300751 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.000944972038269 0.5848455429077148 0 1.0 0 0.0 0 0.0 0 0.0 -0.0388646125793457 -0.10341430455446243 -0.2839455306529999 0.0 0.0 -1.0 0.999582827091217 0.5823426246643066 0 1.0 0 0.0 0 0.0 0 0.0 -0.1520531177520752 -0.10727692395448685 -0.2839455306529999 0.0 0.0 -1.0 1.066251516342163 0.5711506009101868 0 1.0 0 0.0 0 0.0 0 0.0 -0.0388646125793457 -0.10341430455446243 -0.2839455306529999 0.0 0.0 -1.0 0.999582827091217 0.5823426246643066 0 1.0 0 0.0 0 0.0 0 0.0 -0.03665733337402344 -0.10528966784477234 -0.2839455306529999 0.0 0.0 -1.0 0.9981430768966675 0.5799591541290283 0 1.0 0 0.0 0 0.0 0 0.0 0.043921709060668945 -0.1057700365781784 -0.2839455306529999 0.0 0.0 -1.0 0.9461168050765991 0.5750011205673218 0 1.0 0 0.0 0 0.0 0 0.0 0.04728555679321289 -0.10356024652719498 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9439307451248169 0.5773794651031494 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 -0.2839455306529999 0.0 0.0 -1.0 0.9213816523551941 0.5436801314353943 0 1.0 0 0.0 0 0.0 0 0.0 -0.1520531177520752 -0.10727692395448685 -0.2839455306529999 0.0 0.0 -1.0 1.066251516342163 0.5711506009101868 0 1.0 0 0.0 0 0.0 0 0.0 -0.03665733337402344 -0.10528966784477234 -0.2839455306529999 0.0 0.0 -1.0 0.9981430768966675 0.5799591541290283 0 1.0 0 0.0 0 0.0 0 0.0 -0.03432583808898926 -0.10706286877393723 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9966254830360413 0.5776949524879456 0 1.0 0 0.0 0 0.0 0 0.0 0.04048466682434082 -0.10778769105672836 -0.2839455306529999 0.0 0.0 -1.0 0.9483439922332764 0.5728389024734497 0 1.0 0 0.0 0 0.0 0 0.0 0.043921709060668945 -0.1057700365781784 -0.2839455306529999 0.0 0.0 -1.0 0.9461168050765991 0.5750011205673218 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 -0.2839455306529999 0.0 0.0 -1.0 0.9213816523551941 0.5436801314353943 0 1.0 0 0.0 0 0.0 0 0.0 -0.1520531177520752 -0.10727692395448685 -0.2839455306529999 0.0 0.0 -1.0 1.066251516342163 0.5711506009101868 0 1.0 0 0.0 0 0.0 0 0.0 -0.03432583808898926 -0.10706286877393723 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9966254830360413 0.5776949524879456 0 1.0 0 0.0 0 0.0 0 0.0 -0.03187894821166992 -0.10871323943138123 -0.2839455306529999 0.0 0.0 -1.0 0.9950354695320129 0.57557612657547 0 1.0 0 0.0 0 0.0 0 0.0 -0.1504817008972168 -0.11334571242332458 -0.2839455306529999 0.0 0.0 -1.0 1.0651140213012695 0.564522385597229 0 1.0 0 0.0 0 0.0 0 0.0 -0.1520531177520752 -0.10727692395448685 -0.2839455306529999 0.0 0.0 -1.0 1.066251516342163 0.5711506009101868 0 1.0 0 0.0 0 0.0 0 0.0 -0.03187894821166992 -0.10871323943138123 -0.2839455306529999 0.0 0.0 -1.0 0.9950354695320129 0.57557612657547 0 1.0 0 0.0 0 0.0 0 0.0 0.03697466850280762 -0.10961319506168365 -0.2839455306529999 0.0 0.0 -1.0 0.9506131410598755 0.5708950757980347 0 1.0 0 0.0 0 0.0 0 0.0 0.04048466682434082 -0.10778769105672836 -0.2839455306529999 0.0 0.0 -1.0 0.9483439922332764 0.5728389024734497 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 -0.2839455306529999 0.0 0.0 -1.0 0.9213816523551941 0.5436801314353943 0 1.0 0 0.0 0 0.0 0 0.0 -0.1504817008972168 -0.11334571242332458 -0.2839455306529999 0.0 0.0 -1.0 1.0651140213012695 0.564522385597229 0 1.0 0 0.0 0 0.0 0 0.0 -0.03187894821166992 -0.10871323943138123 -0.2839455306529999 0.0 0.0 -1.0 0.9950354695320129 0.57557612657547 0 1.0 0 0.0 0 0.0 0 0.0 -0.029325008392333984 -0.11022009700536728 -0.2839455306529999 0.0 0.0 -1.0 0.9933782815933228 0.5736287832260132 0 1.0 0 0.0 0 0.0 0 0.0 0.033391714096069336 -0.11124654114246368 -0.2839455306529999 0.0 0.0 -1.0 0.9529252052307129 0.569171667098999 0 1.0 0 0.0 0 0.0 0 0.0 0.03697466850280762 -0.10961319506168365 -0.2839455306529999 0.0 0.0 -1.0 0.9506131410598755 0.5708950757980347 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 -0.2839455306529999 0.0 0.0 -1.0 0.9213816523551941 0.5436801314353943 0 1.0 0 0.0 0 0.0 0 0.0 -0.1504817008972168 -0.11334571242332458 -0.2839455306529999 0.0 0.0 -1.0 1.0651140213012695 0.564522385597229 0 1.0 0 0.0 0 0.0 0 0.0 -0.029325008392333984 -0.11022009700536728 -0.2839455306529999 0.0 0.0 -1.0 0.9933782815933228 0.5736287832260132 0 1.0 0 0.0 0 0.0 0 0.0 -0.026664018630981445 -0.11158344894647598 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.9916535019874573 0.5718526840209961 0 1.0 0 0.0 0 0.0 0 0.0 0.029735803604125977 -0.11268772929906845 -0.2839455306529999 0.0 0.0 -1.0 0.9552810788154602 0.567670464515686 0 1.0 0 0.0 0 0.0 0 0.0 0.033391714096069336 -0.11124654114246368 -0.2839455306529999 0.0 0.0 -1.0 0.9529252052307129 0.569171667098999 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 -0.2839455306529999 0.0 0.0 -1.0 0.9213816523551941 0.5436801314353943 0 1.0 0 0.0 0 0.0 0 0.0 -0.1504817008972168 -0.11334571242332458 -0.2839455306529999 0.0 0.0 -1.0 1.0651140213012695 0.564522385597229 0 1.0 0 0.0 0 0.0 0 0.0 -0.026664018630981445 -0.11158344894647598 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.9916535019874573 0.5718526840209961 0 1.0 0 0.0 0 0.0 0 0.0 -0.023895978927612305 -0.11280328780412674 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.989861011505127 0.5702477097511292 0 1.0 0 0.0 0 0.0 0 0.0 0.02600693702697754 -0.11393675953149796 -0.2839455306529999 0.0 0.0 -1.0 0.9576817154884338 0.5663930773735046 0 1.0 0 0.0 0 0.0 0 0.0 0.029735803604125977 -0.11268772929906845 -0.2839455306529999 0.0 0.0 -1.0 0.9552810788154602 0.567670464515686 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 -0.2839455306529999 0.0 0.0 -1.0 0.9213816523551941 0.5436801314353943 0 1.0 0 0.0 0 0.0 0 0.0 -0.1504817008972168 -0.11334571242332458 -0.2839455306529999 0.0 0.0 -1.0 1.0651140213012695 0.564522385597229 0 1.0 0 0.0 0 0.0 0 0.0 -0.023895978927612305 -0.11280328780412674 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.989861011505127 0.5702477097511292 0 1.0 0 0.0 0 0.0 0 0.0 -0.021020889282226562 -0.11387961357831955 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9880005121231079 0.5688133239746094 0 1.0 0 0.0 0 0.0 0 0.0 -0.1487255096435547 -0.11909829080104828 -0.2839455306529999 0.0 0.0 -1.0 1.063905954360962 0.558230996131897 0 1.0 0 0.0 0 0.0 0 0.0 -0.1504817008972168 -0.11334571242332458 -0.2839455306529999 0.0 0.0 -1.0 1.0651140213012695 0.564522385597229 0 1.0 0 0.0 0 0.0 0 0.0 -0.021020889282226562 -0.11387961357831955 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9880005121231079 0.5688133239746094 0 1.0 0 0.0 0 0.0 0 0.0 -0.1487255096435547 -0.11909829080104828 -0.2839455306529999 0.0 0.0 -1.0 1.063905954360962 0.558230996131897 0 1.0 0 0.0 0 0.0 0 0.0 -0.021020889282226562 -0.11387961357831955 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9880005121231079 0.5688133239746094 0 1.0 0 0.0 0 0.0 0 0.0 -0.01803874969482422 -0.11481243371963501 -0.2839455306529999 0.0 0.0 -1.0 0.9860718846321106 0.5675491690635681 0 1.0 0 0.0 0 0.0 0 0.0 0.022205114364624023 -0.1149936318397522 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9601279497146606 0.5653409957885742 0 1.0 0 0.0 0 0.0 0 0.0 0.02600693702697754 -0.11393675953149796 -0.2839455306529999 0.0 0.0 -1.0 0.9576817154884338 0.5663930773735046 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 -0.2839455306529999 0.0 0.0 -1.0 0.9213816523551941 0.5436801314353943 0 1.0 0 0.0 0 0.0 0 0.0 -0.1487255096435547 -0.11909829080104828 -0.2839455306529999 0.0 0.0 -1.0 1.063905954360962 0.558230996131897 0 1.0 0 0.0 0 0.0 0 0.0 -0.01803874969482422 -0.11481243371963501 -0.2839455306529999 0.0 0.0 -1.0 0.9860718846321106 0.5675491690635681 0 1.0 0 0.0 0 0.0 0 0.0 -0.014949560165405273 -0.11560174077749252 -0.2839455306529999 0.0 0.0 -1.0 0.9840749502182007 0.5664546489715576 0 1.0 0 0.0 0 0.0 0 0.0 0.01833033561706543 -0.11585834622383118 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9626204967498779 0.5645154714584351 0 1.0 0 0.0 0 0.0 0 0.0 0.022205114364624023 -0.1149936318397522 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9601279497146606 0.5653409957885742 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 -0.2839455306529999 0.0 0.0 -1.0 0.9213816523551941 0.5436801314353943 0 1.0 0 0.0 0 0.0 0 0.0 -0.1487255096435547 -0.11909829080104828 -0.2839455306529999 0.0 0.0 -1.0 1.063905954360962 0.558230996131897 0 1.0 0 0.0 0 0.0 0 0.0 -0.014949560165405273 -0.11560174077749252 -0.2839455306529999 0.0 0.0 -1.0 0.9840749502182007 0.5664546489715576 0 1.0 0 0.0 0 0.0 0 0.0 -0.011753320693969727 -0.11624753475189209 -0.2839455306529999 0.0 0.0 -1.0 0.982009768486023 0.5655289888381958 0 1.0 0 0.0 0 0.0 0 0.0 0.014382600784301758 -0.1165309026837349 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.9651601314544678 0.5639175772666931 0 1.0 0 0.0 0 0.0 0 0.0 0.01833033561706543 -0.11585834622383118 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9626204967498779 0.5645154714584351 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 -0.2839455306529999 0.0 0.0 -1.0 0.9213816523551941 0.5436801314353943 0 1.0 0 0.0 0 0.0 0 0.0 -0.1487255096435547 -0.11909829080104828 -0.2839455306529999 0.0 0.0 -1.0 1.063905954360962 0.558230996131897 0 1.0 0 0.0 0 0.0 0 0.0 -0.011753320693969727 -0.11624753475189209 -0.2839455306529999 0.0 0.0 -1.0 0.982009768486023 0.5655289888381958 0 1.0 0 0.0 0 0.0 0 0.0 -0.008450031280517578 -0.1167498230934143 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.9798762798309326 0.5647714138031006 0 1.0 0 0.0 0 0.0 0 0.0 0.010361909866333008 -0.11701130121946335 -0.2839455306529999 0.0 0.0 -1.0 0.9677476286888123 0.5635481476783752 0 1.0 0 0.0 0 0.0 0 0.0 0.014382600784301758 -0.1165309026837349 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.9651601314544678 0.5639175772666931 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 -0.2839455306529999 0.0 0.0 -1.0 0.9213816523551941 0.5436801314353943 0 1.0 0 0.0 0 0.0 0 0.0 -0.1487255096435547 -0.11909829080104828 -0.2839455306529999 0.0 0.0 -1.0 1.063905954360962 0.558230996131897 0 1.0 0 0.0 0 0.0 0 0.0 -0.008450031280517578 -0.1167498230934143 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.9798762798309326 0.5647714138031006 0 1.0 0 0.0 0 0.0 0 0.0 -0.00503993034362793 -0.11710859835147858 -0.2839455306529999 0.0 0.0 -1.0 0.9776747822761536 0.5641809701919556 0 1.0 0 0.0 0 0.0 0 0.0 0.00626826286315918 -0.11729954183101654 -0.2839455306529999 0.0 0.0 -1.0 0.9703834056854248 0.5634076595306396 0 1.0 0 0.0 0 0.0 0 0.0 0.010361909866333008 -0.11701130121946335 -0.2839455306529999 0.0 0.0 -1.0 0.9677476286888123 0.5635481476783752 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 -0.2839455306529999 0.0 0.0 -1.0 0.9213816523551941 0.5436801314353943 0 1.0 0 0.0 0 0.0 0 0.0 -0.1487255096435547 -0.11909829080104828 -0.2839455306529999 0.0 0.0 -1.0 1.063905954360962 0.558230996131897 0 1.0 0 0.0 0 0.0 0 0.0 -0.00503993034362793 -0.11710859835147858 -0.2839455306529999 0.0 0.0 -1.0 0.9776747822761536 0.5641809701919556 0 1.0 0 0.0 0 0.0 0 0.0 -0.0015227794647216797 -0.1173238605260849 -0.2839455306529999 0.0 0.0001831110566854477 -1.0 0.9754053354263306 0.5637564659118652 0 1.0 0 0.0 0 0.0 0 0.0 0.0021016597747802734 -0.11739562451839447 -0.2839455306529999 0.0 0.0 -1.0 0.973068118095398 0.5634965896606445 0 1.0 0 0.0 0 0.0 0 0.0 0.00626826286315918 -0.11729954183101654 -0.2839455306529999 0.0 0.0 -1.0 0.9703834056854248 0.5634076595306396 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 -0.2839455306529999 0.0 0.0 -1.0 0.9213816523551941 0.5436801314353943 0 1.0 0 0.0 0 0.0 0 0.0 -0.1487255096435547 -0.11909829080104828 -0.2839455306529999 0.0 0.0 -1.0 1.063905954360962 0.558230996131897 0 1.0 0 0.0 0 0.0 0 0.0 -0.0015227794647216797 -0.1173238605260849 -0.2839455306529999 0.0 0.0001831110566854477 -1.0 0.9754053354263306 0.5637564659118652 0 1.0 0 0.0 0 0.0 0 0.0 0.0021016597747802734 -0.11739562451839447 -0.2839455306529999 0.0 0.0 -1.0 0.973068118095398 0.5634965896606445 0 1.0 0 0.0 0 0.0 0 0.0 -0.1487255096435547 -0.11909829080104828 -0.2839455306529999 0.0 0.0 -1.0 1.063905954360962 0.558230996131897 0 1.0 0 0.0 0 0.0 0 0.0 0.0021016597747802734 -0.11739562451839447 -0.2839455306529999 0.0 0.0 -1.0 0.973068118095398 0.5634965896606445 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 -0.2839455306529999 0.0 0.0 -1.0 0.9213816523551941 0.5436801314353943 0 1.0 0 0.0 0 0.0 0 0.0 -0.14678454399108887 -0.12453465908765793 -0.2839455306529999 0.0 0.0 -1.0 1.0626260042190552 0.5522772073745728 0 1.0 0 0.0 0 0.0 0 0.0 -0.1487255096435547 -0.11909829080104828 -0.2839455306529999 0.0 0.0 -1.0 1.063905954360962 0.558230996131897 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 -0.2839455306529999 0.0 0.0 -1.0 0.9213816523551941 0.5436801314353943 0 1.0 0 0.0 0 0.0 0 0.0 -0.14465856552124023 -0.12965482473373413 -0.2839455306529999 0.0 0.0 -1.0 1.061272144317627 0.546661376953125 0 1.0 0 0.0 0 0.0 0 0.0 -0.14678454399108887 -0.12453465908765793 -0.2839455306529999 0.0 0.0 -1.0 1.0626260042190552 0.5522772073745728 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 -0.2839455306529999 0.0 0.0 -1.0 0.9213816523551941 0.5436801314353943 0 1.0 0 0.0 0 0.0 0 0.0 -0.14465856552124023 -0.12965482473373413 -0.2839455306529999 0.0 0.0 -1.0 1.061272144317627 0.546661376953125 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 -0.2839455306529999 0.0 0.0 -1.0 0.9213816523551941 0.5436801314353943 0 1.0 0 0.0 0 0.0 0 0.0 0.08549213409423828 -0.13312825560569763 -0.2839455306529999 0.0 0.0 -1.0 0.92360520362854 0.5383328199386597 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.9250865578651428 0.48120373487472534 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 -0.2839455306529999 0.0 0.0 -1.0 0.9213816523551941 0.5436801314353943 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8834002017974854 0.4818020462989807 0 1.0 0 0.0 0 0.0 0 0.0 -0.14232611656188965 -0.13452443480491638 -0.2839455306529999 0.0 0.0 -1.0 1.0598280429840088 0.5413103103637695 0 1.0 0 0.0 0 0.0 0 0.0 -0.14465856552124023 -0.12965482473373413 -0.2839455306529999 0.0 0.0 -1.0 1.061272144317627 0.546661376953125 0 1.0 0 0.0 0 0.0 0 0.0 0.08549213409423828 -0.13312825560569763 -0.2839455306529999 0.0 0.0 -1.0 0.92360520362854 0.5383328199386597 0 1.0 0 0.0 0 0.0 0 0.0 -0.14232611656188965 -0.13452443480491638 -0.2839455306529999 0.0 0.0 -1.0 1.0598280429840088 0.5413103103637695 0 1.0 0 0.0 0 0.0 0 0.0 0.08549213409423828 -0.13312825560569763 -0.2839455306529999 0.0 0.0 -1.0 0.92360520362854 0.5383328199386597 0 1.0 0 0.0 0 0.0 0 0.0 0.08183979988098145 -0.13782760500907898 -0.2839455306529999 0.0 0.0 -1.0 0.9259190559387207 0.5331619381904602 0 1.0 0 0.0 0 0.0 0 0.0 -0.13976478576660156 -0.13920921087265015 -0.2839455306529999 0.0 0.0 -1.0 1.0582770109176636 0.5361497402191162 0 1.0 0 0.0 0 0.0 0 0.0 -0.14232611656188965 -0.13452443480491638 -0.2839455306529999 0.0 0.0 -1.0 1.0598280429840088 0.5413103103637695 0 1.0 0 0.0 0 0.0 0 0.0 0.08183979988098145 -0.13782760500907898 -0.2839455306529999 0.0 0.0 -1.0 0.9259190559387207 0.5331619381904602 0 1.0 0 0.0 0 0.0 0 0.0 -0.13976478576660156 -0.13920921087265015 -0.2839455306529999 0.0 0.0 -1.0 1.0582770109176636 0.5361497402191162 0 1.0 0 0.0 0 0.0 0 0.0 0.08183979988098145 -0.13782760500907898 -0.2839455306529999 0.0 0.0 -1.0 0.9259190559387207 0.5331619381904602 0 1.0 0 0.0 0 0.0 0 0.0 0.07801008224487305 -0.14235183596611023 -0.2839455306529999 0.0 0.0 -1.0 0.9283249378204346 0.5281692743301392 0 1.0 0 0.0 0 0.0 0 0.0 -0.13697481155395508 -0.14370910823345184 -0.2839455306529999 0.0 0.0 -1.0 1.0566167831420898 0.5311776399612427 0 1.0 0 0.0 0 0.0 0 0.0 -0.13976478576660156 -0.13920921087265015 -0.2839455306529999 0.0 0.0 -1.0 1.0582770109176636 0.5361497402191162 0 1.0 0 0.0 0 0.0 0 0.0 0.07801008224487305 -0.14235183596611023 -0.2839455306529999 0.0 0.0 -1.0 0.9283249378204346 0.5281692743301392 0 1.0 0 0.0 0 0.0 0 0.0 -0.13697481155395508 -0.14370910823345184 -0.2839455306529999 0.0 0.0 -1.0 1.0566167831420898 0.5311776399612427 0 1.0 0 0.0 0 0.0 0 0.0 0.07801008224487305 -0.14235183596611023 -0.2839455306529999 0.0 0.0 -1.0 0.9283249378204346 0.5281692743301392 0 1.0 0 0.0 0 0.0 0 0.0 0.07400274276733398 -0.1467009335756302 -0.2839455306529999 0.0 0.0 -1.0 0.9308251142501831 0.5233567953109741 0 1.0 0 0.0 0 0.0 0 0.0 -0.1339561939239502 -0.14802414178848267 -0.2839455306529999 0.0 0.0 -1.0 1.0548452138900757 0.5263919830322266 0 1.0 0 0.0 0 0.0 0 0.0 -0.13697481155395508 -0.14370910823345184 -0.2839455306529999 0.0 0.0 -1.0 1.0566167831420898 0.5311776399612427 0 1.0 0 0.0 0 0.0 0 0.0 0.07400274276733398 -0.1467009335756302 -0.2839455306529999 0.0 0.0 -1.0 0.9308251142501831 0.5233567953109741 0 1.0 0 0.0 0 0.0 0 0.0 -0.1339561939239502 -0.14802414178848267 -0.2839455306529999 0.0 0.0 -1.0 1.0548452138900757 0.5263919830322266 0 1.0 0 0.0 0 0.0 0 0.0 0.07400274276733398 -0.1467009335756302 -0.2839455306529999 0.0 0.0 -1.0 0.9308251142501831 0.5233567953109741 0 1.0 0 0.0 0 0.0 0 0.0 0.06981778144836426 -0.15087489783763885 -0.2839455306529999 0.0 0.0 -1.0 0.9334215521812439 0.5187262892723083 0 1.0 0 0.0 0 0.0 0 0.0 -0.13070893287658691 -0.1521543264389038 -0.2839455306529999 0.0 0.0 -1.0 1.0529595613479614 0.5217910408973694 0 1.0 0 0.0 0 0.0 0 0.0 -0.1339561939239502 -0.14802414178848267 -0.2839455306529999 0.0 0.0 -1.0 1.0548452138900757 0.5263919830322266 0 1.0 0 0.0 0 0.0 0 0.0 0.06981778144836426 -0.15087489783763885 -0.2839455306529999 0.0 0.0 -1.0 0.9334215521812439 0.5187262892723083 0 1.0 0 0.0 0 0.0 0 0.0 -0.13070893287658691 -0.1521543264389038 -0.2839455306529999 0.0 0.0 -1.0 1.0529595613479614 0.5217910408973694 0 1.0 0 0.0 0 0.0 0 0.0 0.06981778144836426 -0.15087489783763885 -0.2839455306529999 0.0 0.0 -1.0 0.9334215521812439 0.5187262892723083 0 1.0 0 0.0 0 0.0 0 0.0 0.06545519828796387 -0.15487372875213623 -0.2839455306529999 0.0 0.0 -1.0 0.9361163377761841 0.514279842376709 0 1.0 0 0.0 0 0.0 0 0.0 -0.12723302841186523 -0.15609964728355408 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.050957202911377 0.5173731446266174 0 1.0 0 0.0 0 0.0 0 0.0 -0.13070893287658691 -0.1521543264389038 -0.2839455306529999 0.0 0.0 -1.0 1.0529595613479614 0.5217910408973694 0 1.0 0 0.0 0 0.0 0 0.0 0.06545519828796387 -0.15487372875213623 -0.2839455306529999 0.0 0.0 -1.0 0.9361163377761841 0.514279842376709 0 1.0 0 0.0 0 0.0 0 0.0 -0.12723302841186523 -0.15609964728355408 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.050957202911377 0.5173731446266174 0 1.0 0 0.0 0 0.0 0 0.0 0.06545519828796387 -0.15487372875213623 -0.2839455306529999 0.0 0.0 -1.0 0.9361163377761841 0.514279842376709 0 1.0 0 0.0 0 0.0 0 0.0 0.060915231704711914 -0.15869742631912231 -0.2839455306529999 0.0 0.0 -1.0 0.9389110207557678 0.5100195407867432 0 1.0 0 0.0 0 0.0 0 0.0 -0.12352848052978516 -0.15986010432243347 -0.2839455306529999 0.0 0.0 -1.0 1.048835039138794 0.5131371021270752 0 1.0 0 0.0 0 0.0 0 0.0 -0.12723302841186523 -0.15609964728355408 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.050957202911377 0.5173731446266174 0 1.0 0 0.0 0 0.0 0 0.0 0.060915231704711914 -0.15869742631912231 -0.2839455306529999 0.0 0.0 -1.0 0.9389110207557678 0.5100195407867432 0 1.0 0 0.0 0 0.0 0 0.0 -0.12352848052978516 -0.15986010432243347 -0.2839455306529999 0.0 0.0 -1.0 1.048835039138794 0.5131371021270752 0 1.0 0 0.0 0 0.0 0 0.0 0.060915231704711914 -0.15869742631912231 -0.2839455306529999 0.0 0.0 -1.0 0.9389110207557678 0.5100195407867432 0 1.0 0 0.0 0 0.0 0 0.0 0.0561976432800293 -0.1623460054397583 -0.2839455306529999 0.0 0.0 -1.0 0.9418076276779175 0.5059475302696228 0 1.0 0 0.0 0 0.0 0 0.0 -0.11959528923034668 -0.16343571245670319 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0465903282165527 0.5090819597244263 0 1.0 0 0.0 0 0.0 0 0.0 -0.12352848052978516 -0.15986010432243347 -0.2839455306529999 0.0 0.0 -1.0 1.048835039138794 0.5131371021270752 0 1.0 0 0.0 0 0.0 0 0.0 0.0561976432800293 -0.1623460054397583 -0.2839455306529999 0.0 0.0 -1.0 0.9418076276779175 0.5059475302696228 0 1.0 0 0.0 0 0.0 0 0.0 -0.11959528923034668 -0.16343571245670319 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0465903282165527 0.5090819597244263 0 1.0 0 0.0 0 0.0 0 0.0 0.0561976432800293 -0.1623460054397583 -0.2839455306529999 0.0 0.0 -1.0 0.9418076276779175 0.5059475302696228 0 1.0 0 0.0 0 0.0 0 0.0 0.051302433013916016 -0.1658194363117218 -0.2839455306529999 0.0 0.0 -1.0 0.944807767868042 0.5020663142204285 0 1.0 0 0.0 0 0.0 0 0.0 -0.1154334545135498 -0.16682644188404083 -0.2839455306529999 0.0 0.0 -1.0 1.044219732284546 0.5052071809768677 0 1.0 0 0.0 0 0.0 0 0.0 -0.11959528923034668 -0.16343571245670319 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0465903282165527 0.5090819597244263 0 1.0 0 0.0 0 0.0 0 0.0 0.051302433013916016 -0.1658194363117218 -0.2839455306529999 0.0 0.0 -1.0 0.944807767868042 0.5020663142204285 0 1.0 0 0.0 0 0.0 0 0.0 -0.1154334545135498 -0.16682644188404083 -0.2839455306529999 0.0 0.0 -1.0 1.044219732284546 0.5052071809768677 0 1.0 0 0.0 0 0.0 0 0.0 0.051302433013916016 -0.1658194363117218 -0.2839455306529999 0.0 0.0 -1.0 0.944807767868042 0.5020663142204285 0 1.0 0 0.0 0 0.0 0 0.0 0.04622983932495117 -0.1691177487373352 -0.2839455306529999 0.0 0.0 -1.0 0.9479126930236816 0.4983783960342407 0 1.0 0 0.0 0 0.0 0 0.0 -0.11104297637939453 -0.1700323224067688 -0.2839455306529999 0.0 0.0 -1.0 1.0417201519012451 0.5015124082565308 0 1.0 0 0.0 0 0.0 0 0.0 -0.1154334545135498 -0.16682644188404083 -0.2839455306529999 0.0 0.0 -1.0 1.044219732284546 0.5052071809768677 0 1.0 0 0.0 0 0.0 0 0.0 0.04622983932495117 -0.1691177487373352 -0.2839455306529999 0.0 0.0 -1.0 0.9479126930236816 0.4983783960342407 0 1.0 0 0.0 0 0.0 0 0.0 -0.11104297637939453 -0.1700323224067688 -0.2839455306529999 0.0 0.0 -1.0 1.0417201519012451 0.5015124082565308 0 1.0 0 0.0 0 0.0 0 0.0 0.04622983932495117 -0.1691177487373352 -0.2839455306529999 0.0 0.0 -1.0 0.9479126930236816 0.4983783960342407 0 1.0 0 0.0 0 0.0 0 0.0 0.040979623794555664 -0.17224091291427612 -0.2839455306529999 0.0 0.0 -1.0 0.9511236548423767 0.49488651752471924 0 1.0 0 0.0 0 0.0 0 0.0 -0.10642385482788086 -0.1730533391237259 -0.2839455306529999 0.0 0.0 -1.0 1.039088249206543 0.49799811840057373 0 1.0 0 0.0 0 0.0 0 0.0 -0.11104297637939453 -0.1700323224067688 -0.2839455306529999 0.0 0.0 -1.0 1.0417201519012451 0.5015124082565308 0 1.0 0 0.0 0 0.0 0 0.0 0.040979623794555664 -0.17224091291427612 -0.2839455306529999 0.0 0.0 -1.0 0.9511236548423767 0.49488651752471924 0 1.0 0 0.0 0 0.0 0 0.0 -0.10642385482788086 -0.1730533391237259 -0.2839455306529999 0.0 0.0 -1.0 1.039088249206543 0.49799811840057373 0 1.0 0 0.0 0 0.0 0 0.0 0.040979623794555664 -0.17224091291427612 -0.2839455306529999 0.0 0.0 -1.0 0.9511236548423767 0.49488651752471924 0 1.0 0 0.0 0 0.0 0 0.0 0.03555178642272949 -0.17518897354602814 -0.2839455306529999 0.0 0.0 -1.0 0.9544415473937988 0.49159348011016846 0 1.0 0 0.0 0 0.0 0 0.0 -0.10157608985900879 -0.1758894920349121 -0.2839455306529999 0.0 0.0 -1.0 1.0363209247589111 0.49466484785079956 0 1.0 0 0.0 0 0.0 0 0.0 -0.10642385482788086 -0.1730533391237259 -0.2839455306529999 0.0 0.0 -1.0 1.039088249206543 0.49799811840057373 0 1.0 0 0.0 0 0.0 0 0.0 0.03555178642272949 -0.17518897354602814 -0.2839455306529999 0.0 0.0 -1.0 0.9544415473937988 0.49159348011016846 0 1.0 0 0.0 0 0.0 0 0.0 -0.10157608985900879 -0.1758894920349121 -0.2839455306529999 0.0 0.0 -1.0 1.0363209247589111 0.49466484785079956 0 1.0 0 0.0 0 0.0 0 0.0 0.03555178642272949 -0.17518897354602814 -0.2839455306529999 0.0 0.0 -1.0 0.9544415473937988 0.49159348011016846 0 1.0 0 0.0 0 0.0 0 0.0 0.03000950813293457 -0.17793026566505432 -0.2839455306529999 0.0 0.0 -1.0 0.9578284025192261 0.48853766918182373 0 1.0 0 0.0 0 0.0 0 0.0 -0.09656071662902832 -0.1785188913345337 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0334495306015015 0.49154067039489746 0 1.0 0 0.0 0 0.0 0 0.0 -0.10157608985900879 -0.1758894920349121 -0.2839455306529999 0.0 0.0 -1.0 1.0363209247589111 0.49466484785079956 0 1.0 0 0.0 0 0.0 0 0.0 0.03000950813293457 -0.17793026566505432 -0.2839455306529999 0.0 0.0 -1.0 0.9578284025192261 0.48853766918182373 0 1.0 0 0.0 0 0.0 0 0.0 -0.09656071662902832 -0.1785188913345337 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0334495306015015 0.49154067039489746 0 1.0 0 0.0 0 0.0 0 0.0 0.03000950813293457 -0.17793026566505432 -0.2839455306529999 0.0 0.0 -1.0 0.9578284025192261 0.48853766918182373 0 1.0 0 0.0 0 0.0 0 0.0 0.024416208267211914 -0.18043318390846252 -0.2839455306529999 0.0 0.0 -1.0 0.9612451195716858 0.48575735092163086 0 1.0 0 0.0 0 0.0 0 0.0 -0.09143805503845215 -0.18091964721679688 -0.2839455306529999 0.0 0.0 -1.0 1.0305064916610718 0.48865455389022827 0 1.0 0 0.0 0 0.0 0 0.0 -0.09656071662902832 -0.1785188913345337 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0334495306015015 0.49154067039489746 0 1.0 0 0.0 0 0.0 0 0.0 0.024416208267211914 -0.18043318390846252 -0.2839455306529999 0.0 0.0 -1.0 0.9612451195716858 0.48575735092163086 0 1.0 0 0.0 0 0.0 0 0.0 -0.09143805503845215 -0.18091964721679688 -0.2839455306529999 0.0 0.0 -1.0 1.0305064916610718 0.48865455389022827 0 1.0 0 0.0 0 0.0 0 0.0 0.024416208267211914 -0.18043318390846252 -0.2839455306529999 0.0 0.0 -1.0 0.9612451195716858 0.48575735092163086 0 1.0 0 0.0 0 0.0 0 0.0 0.018771886825561523 -0.18269772827625275 -0.2839455306529999 0.0 0.0 -1.0 0.9646912813186646 0.48325538635253906 0 1.0 0 0.0 0 0.0 0 0.0 -0.08620834350585938 -0.18309177458286285 -0.2839455306529999 0.0 0.0 -1.0 1.0274903774261475 0.48600929975509644 0 1.0 0 0.0 0 0.0 0 0.0 -0.09143805503845215 -0.18091964721679688 -0.2839455306529999 0.0 0.0 -1.0 1.0305064916610718 0.48865455389022827 0 1.0 0 0.0 0 0.0 0 0.0 0.018771886825561523 -0.18269772827625275 -0.2839455306529999 0.0 0.0 -1.0 0.9646912813186646 0.48325538635253906 0 1.0 0 0.0 0 0.0 0 0.0 -0.08620834350585938 -0.18309177458286285 -0.2839455306529999 0.0 0.0 -1.0 1.0274903774261475 0.48600929975509644 0 1.0 0 0.0 0 0.0 0 0.0 0.018771886825561523 -0.18269772827625275 -0.2839455306529999 0.0 0.0 -1.0 0.9646912813186646 0.48325538635253906 0 1.0 0 0.0 0 0.0 0 0.0 0.013076543807983398 -0.184723898768425 -0.2839455306529999 0.0 0.0 -1.0 0.9681662321090698 0.4810340404510498 0 1.0 0 0.0 0 0.0 0 0.0 -0.0808718204498291 -0.18503524363040924 -0.2839455306529999 0.0 0.0 -1.0 1.0244001150131226 0.48360782861709595 0 1.0 0 0.0 0 0.0 0 0.0 -0.08620834350585938 -0.18309177458286285 -0.2839455306529999 0.0 0.0 -1.0 1.0274903774261475 0.48600929975509644 0 1.0 0 0.0 0 0.0 0 0.0 0.013076543807983398 -0.184723898768425 -0.2839455306529999 0.0 0.0 -1.0 0.9681662321090698 0.4810340404510498 0 1.0 0 0.0 0 0.0 0 0.0 -0.0808718204498291 -0.18503524363040924 -0.2839455306529999 0.0 0.0 -1.0 1.0244001150131226 0.48360782861709595 0 1.0 0 0.0 0 0.0 0 0.0 0.013076543807983398 -0.184723898768425 -0.2839455306529999 0.0 0.0 -1.0 0.9681662321090698 0.4810340404510498 0 1.0 0 0.0 0 0.0 0 0.0 0.0073299407958984375 -0.18651169538497925 -0.2839455306529999 0.0 0.0 -1.0 0.9716694355010986 0.4790952801704407 0 1.0 0 0.0 0 0.0 0 0.0 -0.07542824745178223 -0.18675006926059723 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0212342739105225 0.481453001499176 0 1.0 0 0.0 0 0.0 0 0.0 -0.0808718204498291 -0.18503524363040924 -0.2839455306529999 0.0 0.0 -1.0 1.0244001150131226 0.48360782861709595 0 1.0 0 0.0 0 0.0 0 0.0 0.0073299407958984375 -0.18651169538497925 -0.2839455306529999 0.0 0.0 -1.0 0.9716694355010986 0.4790952801704407 0 1.0 0 0.0 0 0.0 0 0.0 -0.07542824745178223 -0.18675006926059723 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0212342739105225 0.481453001499176 0 1.0 0 0.0 0 0.0 0 0.0 0.0073299407958984375 -0.18651169538497925 -0.2839455306529999 0.0 0.0 -1.0 0.9716694355010986 0.4790952801704407 0 1.0 0 0.0 0 0.0 0 0.0 0.0015323162078857422 -0.18806111812591553 -0.2839455306529999 0.0 0.0 -1.0 0.9751999378204346 0.4774407744407654 0 1.0 0 0.0 0 0.0 0 0.0 -0.06987762451171875 -0.18823625147342682 -0.2839455306529999 0.0 0.0 -1.0 1.0179916620254517 0.4795478582382202 0 1.0 0 0.0 0 0.0 0 0.0 -0.07542824745178223 -0.18675006926059723 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0212342739105225 0.481453001499176 0 1.0 0 0.0 0 0.0 0 0.0 0.0015323162078857422 -0.18806111812591553 -0.2839455306529999 0.0 0.0 -1.0 0.9751999378204346 0.4774407744407654 0 1.0 0 0.0 0 0.0 0 0.0 -0.06987762451171875 -0.18823625147342682 -0.2839455306529999 0.0 0.0 -1.0 1.0179916620254517 0.4795478582382202 0 1.0 0 0.0 0 0.0 0 0.0 0.0015323162078857422 -0.18806111812591553 -0.2839455306529999 0.0 0.0 -1.0 0.9751999378204346 0.4774407744407654 0 1.0 0 0.0 0 0.0 0 0.0 -0.0043163299560546875 -0.18937218189239502 -0.2839455306529999 0.0 0.0 -1.0 0.9787569046020508 0.4760715961456299 0 1.0 0 0.0 0 0.0 0 0.0 -0.06421995162963867 -0.189493790268898 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 1.0146715641021729 0.47789525985717773 0 1.0 0 0.0 0 0.0 0 0.0 -0.06987762451171875 -0.18823625147342682 -0.2839455306529999 0.0 0.0 -1.0 1.0179916620254517 0.4795478582382202 0 1.0 0 0.0 0 0.0 0 0.0 -0.0043163299560546875 -0.18937218189239502 -0.2839455306529999 0.0 0.0 -1.0 0.9787569046020508 0.4760715961456299 0 1.0 0 0.0 0 0.0 0 0.0 -0.06421995162963867 -0.189493790268898 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 1.0146715641021729 0.47789525985717773 0 1.0 0 0.0 0 0.0 0 0.0 -0.0043163299560546875 -0.18937218189239502 -0.2839455306529999 0.0 0.0 -1.0 0.9787569046020508 0.4760715961456299 0 1.0 0 0.0 0 0.0 0 0.0 -0.010215997695922852 -0.19044485688209534 -0.2839455306529999 0.0 0.0 -1.0 0.9823390245437622 0.47498881816864014 0 1.0 0 0.0 0 0.0 0 0.0 -0.05845522880554199 -0.1905226856470108 -0.2839455306529999 0.0 0.0 -1.0 1.0112733840942383 0.4764983654022217 0 1.0 0 0.0 0 0.0 0 0.0 -0.06421995162963867 -0.189493790268898 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 1.0146715641021729 0.47789525985717773 0 1.0 0 0.0 0 0.0 0 0.0 -0.010215997695922852 -0.19044485688209534 -0.2839455306529999 0.0 0.0 -1.0 0.9823390245437622 0.47498881816864014 0 1.0 0 0.0 0 0.0 0 0.0 -0.05845522880554199 -0.1905226856470108 -0.2839455306529999 0.0 0.0 -1.0 1.0112733840942383 0.4764983654022217 0 1.0 0 0.0 0 0.0 0 0.0 -0.010215997695922852 -0.19044485688209534 -0.2839455306529999 0.0 0.0 -1.0 0.9823390245437622 0.47498881816864014 0 1.0 0 0.0 0 0.0 0 0.0 -0.01616692543029785 -0.19127915799617767 -0.2839455306529999 0.0 0.0 -1.0 0.9859455823898315 0.4741927981376648 0 1.0 0 0.0 0 0.0 0 0.0 -0.05258345603942871 -0.1913229376077652 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 1.0077967643737793 0.47536009550094604 0 1.0 0 0.0 0 0.0 0 0.0 -0.05845522880554199 -0.1905226856470108 -0.2839455306529999 0.0 0.0 -1.0 1.0112733840942383 0.4764983654022217 0 1.0 0 0.0 0 0.0 0 0.0 -0.01616692543029785 -0.19127915799617767 -0.2839455306529999 0.0 0.0 -1.0 0.9859455823898315 0.4741927981376648 0 1.0 0 0.0 0 0.0 0 0.0 -0.05258345603942871 -0.1913229376077652 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 1.0077967643737793 0.47536009550094604 0 1.0 0 0.0 0 0.0 0 0.0 -0.01616692543029785 -0.19127915799617767 -0.2839455306529999 0.0 0.0 -1.0 0.9859455823898315 0.4741927981376648 0 1.0 0 0.0 0 0.0 0 0.0 -0.022168874740600586 -0.19187510013580322 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.9895748496055603 0.47368383407592773 0 1.0 0 0.0 0 0.0 0 0.0 -0.04660463333129883 -0.1918945610523224 -0.2839455306529999 0.0 0.0 -1.0 1.0042415857315063 0.4744833707809448 0 1.0 0 0.0 0 0.0 0 0.0 -0.05258345603942871 -0.1913229376077652 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 1.0077967643737793 0.47536009550094604 0 1.0 0 0.0 0 0.0 0 0.0 -0.022168874740600586 -0.19187510013580322 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.9895748496055603 0.47368383407592773 0 1.0 0 0.0 0 0.0 0 0.0 -0.04660463333129883 -0.1918945610523224 -0.2839455306529999 0.0 0.0 -1.0 1.0042415857315063 0.4744833707809448 0 1.0 0 0.0 0 0.0 0 0.0 -0.022168874740600586 -0.19187510013580322 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.9895748496055603 0.47368383407592773 0 1.0 0 0.0 0 0.0 0 0.0 -0.028221845626831055 -0.1922326534986496 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9932255744934082 0.47346174716949463 0 1.0 0 0.0 0 0.0 0 0.0 -0.040518760681152344 -0.19223752617835999 -0.2839455306529999 0.0 0.0 -1.0 1.0006078481674194 0.47387105226516724 0 1.0 0 0.0 0 0.0 0 0.0 -0.04660463333129883 -0.1918945610523224 -0.2839455306529999 0.0 0.0 -1.0 1.0042415857315063 0.4744833707809448 0 1.0 0 0.0 0 0.0 0 0.0 -0.028221845626831055 -0.1922326534986496 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9932255744934082 0.47346174716949463 0 1.0 0 0.0 0 0.0 0 0.0 -0.040518760681152344 -0.19223752617835999 -0.2839455306529999 0.0 0.0 -1.0 1.0006078481674194 0.47387105226516724 0 1.0 0 0.0 0 0.0 0 0.0 -0.028221845626831055 -0.1922326534986496 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9932255744934082 0.47346174716949463 0 1.0 0 0.0 0 0.0 0 0.0 -0.03432583808898926 -0.19235184788703918 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9968962669372559 0.4735258221626282 0 1.0 0 0.0 0 0.0 0 0.0 -0.1012258529663086 0.24932944774627686 -0.2839455306529999 0.0 0.0 -1.0 1.0582492351531982 0.8729636073112488 0 1.0 0 0.0 0 0.0 0 0.0 -0.1012258529663086 0.314128041267395 -0.2839455306529999 0.0 0.0 -1.0 1.0641034841537476 0.897499144077301 0 1.0 0 0.0 0 0.0 0 0.0 0.1243431568145752 0.314128041267395 -0.2839455306529999 0.0 0.0 -1.0 0.8537107706069946 0.8676877617835999 0 1.0 0 0.0 0 0.0 0 0.0 -0.1012258529663086 0.24932944774627686 -0.2839455306529999 0.0 0.0 -1.0 1.0582492351531982 0.8729636073112488 0 1.0 0 0.0 0 0.0 0 0.0 0.1243431568145752 0.314128041267395 -0.2839455306529999 0.0 0.0 -1.0 0.8537107706069946 0.8676877617835999 0 1.0 0 0.0 0 0.0 0 0.0 0.1243431568145752 0.24932944774627686 -0.2839455306529999 0.0 0.0 -1.0 0.8631843328475952 0.8435003757476807 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 0.32953959703445435 -0.2839455306529999 0.0 0.0 -1.0 0.12790176272392273 0.820160448551178 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.32953959703445435 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07377690076828003 0.8601027727127075 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.32953959703445435 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07377690076828003 0.8601027727127075 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.05936384201049805 0.7411052584648132 0 1.0 0 0.0 0 0.0 0 0.0 -0.4022181034088135 0.19607976078987122 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.9880318641662598 0.799943745136261 0 1.0 0 0.0 0 0.0 0 0.0 -0.39194393157958984 0.19643977284431458 -0.2839455306529999 0.0 0.0 -1.0 0.9794628620147705 0.7999661564826965 0 1.0 0 0.0 0 0.0 0 0.0 -0.3807816505432129 0.19609802961349487 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.970216691493988 0.7989437580108643 0 1.0 0 0.0 0 0.0 0 0.0 -0.4022181034088135 0.19607976078987122 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.9880318641662598 0.799943745136261 0 1.0 0 0.0 0 0.0 0 0.0 -0.3807816505432129 0.19609802961349487 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.970216691493988 0.7989437580108643 0 1.0 0 0.0 0 0.0 0 0.0 -0.3699455261230469 0.19507277011871338 -0.2839455306529999 0.0 0.0 -1.0 0.9613829851150513 0.7969457507133484 0 1.0 0 0.0 0 0.0 0 0.0 -0.4122591018676758 0.1949997842311859 -0.2839455306529999 0.0 0.0 -1.0 0.9963911771774292 0.7989473342895508 0 1.0 0 0.0 0 0.0 0 0.0 -0.4022181034088135 0.19607976078987122 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.9880318641662598 0.799943745136261 0 1.0 0 0.0 0 0.0 0 0.0 -0.3699455261230469 0.19507277011871338 -0.2839455306529999 0.0 0.0 -1.0 0.9613829851150513 0.7969457507133484 0 1.0 0 0.0 0 0.0 0 0.0 -0.4122591018676758 0.1949997842311859 -0.2839455306529999 0.0 0.0 -1.0 0.9963911771774292 0.7989473342895508 0 1.0 0 0.0 0 0.0 0 0.0 -0.3699455261230469 0.19507277011871338 -0.2839455306529999 0.0 0.0 -1.0 0.9613829851150513 0.7969457507133484 0 1.0 0 0.0 0 0.0 0 0.0 -0.3594350814819336 0.19336402416229248 -0.2839455306529999 0.0 0.0 -1.0 0.9530216455459595 0.7940287590026855 0 1.0 0 0.0 0 0.0 0 0.0 -0.42206645011901855 0.19319981336593628 -0.2839455306529999 0.0 0.0 -1.0 1.0044747591018677 0.7970054745674133 0 1.0 0 0.0 0 0.0 0 0.0 -0.4122591018676758 0.1949997842311859 -0.2839455306529999 0.0 0.0 -1.0 0.9963911771774292 0.7989473342895508 0 1.0 0 0.0 0 0.0 0 0.0 -0.3594350814819336 0.19336402416229248 -0.2839455306529999 0.0 0.0 -1.0 0.9530216455459595 0.7940287590026855 0 1.0 0 0.0 0 0.0 0 0.0 -0.42206645011901855 0.19319981336593628 -0.2839455306529999 0.0 0.0 -1.0 1.0044747591018677 0.7970054745674133 0 1.0 0 0.0 0 0.0 0 0.0 -0.3594350814819336 0.19336402416229248 -0.2839455306529999 0.0 0.0 -1.0 0.9530216455459595 0.7940287590026855 0 1.0 0 0.0 0 0.0 0 0.0 -0.34925079345703125 0.19097179174423218 -0.2839455306529999 0.0 0.0 -1.0 0.945175290107727 0.7902482748031616 0 1.0 0 0.0 0 0.0 0 0.0 -0.4316401481628418 0.1906798779964447 -0.2839455306529999 0.0 0.0 -1.0 1.0122272968292236 0.7941473126411438 0 1.0 0 0.0 0 0.0 0 0.0 -0.42206645011901855 0.19319981336593628 -0.2839455306529999 0.0 0.0 -1.0 1.0044747591018677 0.7970054745674133 0 1.0 0 0.0 0 0.0 0 0.0 -0.34925079345703125 0.19097179174423218 -0.2839455306529999 0.0 0.0 -1.0 0.945175290107727 0.7902482748031616 0 1.0 0 0.0 0 0.0 0 0.0 -0.4316401481628418 0.1906798779964447 -0.2839455306529999 0.0 0.0 -1.0 1.0122272968292236 0.7941473126411438 0 1.0 0 0.0 0 0.0 0 0.0 -0.34925079345703125 0.19097179174423218 -0.2839455306529999 0.0 0.0 -1.0 0.945175290107727 0.7902482748031616 0 1.0 0 0.0 0 0.0 0 0.0 -0.33939218521118164 0.18789604306221008 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9378687143325806 0.7856563329696655 0 1.0 0 0.0 0 0.0 0 0.0 -0.4409806728363037 0.1874399483203888 -0.2839455306529999 0.0 0.0 -1.0 1.0196059942245483 0.7904014587402344 0 1.0 0 0.0 0 0.0 0 0.0 -0.4316401481628418 0.1906798779964447 -0.2839455306529999 0.0 0.0 -1.0 1.0122272968292236 0.7941473126411438 0 1.0 0 0.0 0 0.0 0 0.0 -0.33939218521118164 0.18789604306221008 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9378687143325806 0.7856563329696655 0 1.0 0 0.0 0 0.0 0 0.0 -0.4409806728363037 0.1874399483203888 -0.2839455306529999 0.0 0.0 -1.0 1.0196059942245483 0.7904014587402344 0 1.0 0 0.0 0 0.0 0 0.0 -0.33939218521118164 0.18789604306221008 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9378687143325806 0.7856563329696655 0 1.0 0 0.0 0 0.0 0 0.0 -0.32985973358154297 0.18413680791854858 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9311127662658691 0.7802994251251221 0 1.0 0 0.0 0 0.0 0 0.0 -0.4500875473022461 0.18348002433776855 -0.2839455306529999 0.0 0.0 -1.0 1.026578664779663 0.7857947945594788 0 1.0 0 0.0 0 0.0 0 0.0 -0.4409806728363037 0.1874399483203888 -0.2839455306529999 0.0 0.0 -1.0 1.0196059942245483 0.7904014587402344 0 1.0 0 0.0 0 0.0 0 0.0 -0.32985973358154297 0.18413680791854858 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9311127662658691 0.7802994251251221 0 1.0 0 0.0 0 0.0 0 0.0 -0.4500875473022461 0.18348002433776855 -0.2839455306529999 0.0 0.0 -1.0 1.026578664779663 0.7857947945594788 0 1.0 0 0.0 0 0.0 0 0.0 -0.32985973358154297 0.18413680791854858 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9311127662658691 0.7802994251251221 0 1.0 0 0.0 0 0.0 0 0.0 -0.32065320014953613 0.1796940565109253 -0.2839455306529999 0.0 0.0 -1.0 0.9249056577682495 0.7742172479629517 0 1.0 0 0.0 0 0.0 0 0.0 -0.45896077156066895 0.17880013585090637 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0331246852874756 0.7803508043289185 0 1.0 0 0.0 0 0.0 0 0.0 -0.4500875473022461 0.18348002433776855 -0.2839455306529999 0.0 0.0 -1.0 1.026578664779663 0.7857947945594788 0 1.0 0 0.0 0 0.0 0 0.0 -0.32065320014953613 0.1796940565109253 -0.2839455306529999 0.0 0.0 -1.0 0.9249056577682495 0.7742172479629517 0 1.0 0 0.0 0 0.0 0 0.0 -0.45896077156066895 0.17880013585090637 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0331246852874756 0.7803508043289185 0 1.0 0 0.0 0 0.0 0 0.0 -0.32065320014953613 0.1796940565109253 -0.2839455306529999 0.0 0.0 -1.0 0.9249056577682495 0.7742172479629517 0 1.0 0 0.0 0 0.0 0 0.0 -0.31177258491516113 0.1745678186416626 -0.2839455306529999 0.0 0.0 -1.0 0.9192360639572144 0.7674424052238464 0 1.0 0 0.0 0 0.0 0 0.0 -0.46760058403015137 0.17340025305747986 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0392340421676636 0.7740890979766846 0 1.0 0 0.0 0 0.0 0 0.0 -0.45896077156066895 0.17880013585090637 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0331246852874756 0.7803508043289185 0 1.0 0 0.0 0 0.0 0 0.0 -0.31177258491516113 0.1745678186416626 -0.2839455306529999 0.0 0.0 -1.0 0.9192360639572144 0.7674424052238464 0 1.0 0 0.0 0 0.0 0 0.0 -0.46760058403015137 0.17340025305747986 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0392340421676636 0.7740890979766846 0 1.0 0 0.0 0 0.0 0 0.0 -0.31177258491516113 0.1745678186416626 -0.2839455306529999 0.0 0.0 -1.0 0.9192360639572144 0.7674424052238464 0 1.0 0 0.0 0 0.0 0 0.0 -0.30321788787841797 0.1687580645084381 -0.2839455306529999 0.0 0.0 -1.0 0.9140862226486206 0.7599997520446777 0 1.0 0 0.0 0 0.0 0 0.0 -0.47600698471069336 0.167280375957489 -0.2839455306529999 0.0 0.0 -1.0 1.0449049472808838 0.7670250535011292 0 1.0 0 0.0 0 0.0 0 0.0 -0.46760058403015137 0.17340025305747986 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0392340421676636 0.7740890979766846 0 1.0 0 0.0 0 0.0 0 0.0 -0.30321788787841797 0.1687580645084381 -0.2839455306529999 0.0 0.0 -1.0 0.9140862226486206 0.7599997520446777 0 1.0 0 0.0 0 0.0 0 0.0 -0.47600698471069336 0.167280375957489 -0.2839455306529999 0.0 0.0 -1.0 1.0449049472808838 0.7670250535011292 0 1.0 0 0.0 0 0.0 0 0.0 -0.30321788787841797 0.1687580645084381 -0.2839455306529999 0.0 0.0 -1.0 0.9140862226486206 0.7599997520446777 0 1.0 0 0.0 0 0.0 0 0.0 -0.29498910903930664 0.16226482391357422 -0.2839455306529999 0.0 0.0 -1.0 0.9094334840774536 0.7519071102142334 0 1.0 0 0.0 0 0.0 0 0.0 -0.4841797351837158 0.16044053435325623 -0.2839455306529999 0.0 0.0 -1.0 1.0501424074172974 0.7591694593429565 0 1.0 0 0.0 0 0.0 0 0.0 -0.47600698471069336 0.167280375957489 -0.2839455306529999 0.0 0.0 -1.0 1.0449049472808838 0.7670250535011292 0 1.0 0 0.0 0 0.0 0 0.0 -0.29498910903930664 0.16226482391357422 -0.2839455306529999 0.0 0.0 -1.0 0.9094334840774536 0.7519071102142334 0 1.0 0 0.0 0 0.0 0 0.0 -0.4841797351837158 0.16044053435325623 -0.2839455306529999 0.0 0.0 -1.0 1.0501424074172974 0.7591694593429565 0 1.0 0 0.0 0 0.0 0 0.0 -0.29498910903930664 0.16226482391357422 -0.2839455306529999 0.0 0.0 -1.0 0.9094334840774536 0.7519071102142334 0 1.0 0 0.0 0 0.0 0 0.0 -0.28708624839782715 0.15508809685707092 -0.2839455306529999 0.0 0.0 -1.0 0.9052527546882629 0.7431755065917969 0 1.0 0 0.0 0 0.0 0 0.0 -0.49211907386779785 0.1528806984424591 -0.2839455306529999 0.0 0.0 -1.0 1.0549571514129639 0.7505285739898682 0 1.0 0 0.0 0 0.0 0 0.0 -0.4841797351837158 0.16044053435325623 -0.2839455306529999 0.0 0.0 -1.0 1.0501424074172974 0.7591694593429565 0 1.0 0 0.0 0 0.0 0 0.0 -0.28708624839782715 0.15508809685707092 -0.2839455306529999 0.0 0.0 -1.0 0.9052527546882629 0.7431755065917969 0 1.0 0 0.0 0 0.0 0 0.0 -0.49211907386779785 0.1528806984424591 -0.2839455306529999 0.0 0.0 -1.0 1.0549571514129639 0.7505285739898682 0 1.0 0 0.0 0 0.0 0 0.0 -0.28708624839782715 0.15508809685707092 -0.2839455306529999 0.0 0.0 -1.0 0.9052527546882629 0.7431755065917969 0 1.0 0 0.0 0 0.0 0 0.0 -0.2795095443725586 0.14722785353660583 -0.2839455306529999 0.0 0.0 -1.0 0.9015175104141235 0.7338099479675293 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 1.059363842010498 0.7411052584648132 0 1.0 0 0.0 0 0.0 0 0.0 -0.49211907386779785 0.1528806984424591 -0.2839455306529999 0.0 0.0 -1.0 1.0549571514129639 0.7505285739898682 0 1.0 0 0.0 0 0.0 0 0.0 -0.2795095443725586 0.14722785353660583 -0.2839455306529999 0.0 0.0 -1.0 0.9015175104141235 0.7338099479675293 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 1.059363842010498 0.7411052584648132 0 1.0 0 0.0 0 0.0 0 0.0 -0.2795095443725586 0.14722785353660583 -0.2839455306529999 0.0 0.0 -1.0 0.9015175104141235 0.7338099479675293 0 1.0 0 0.0 0 0.0 0 0.0 -0.27240467071533203 0.13872790336608887 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8982787132263184 0.7239008545875549 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.05936384201049805 0.7411052584648132 0 1.0 0 0.0 0 0.0 0 0.0 -0.4900953769683838 0.07213538885116577 -0.2839455306529999 0.0 0.0 -1.0 0.04923892021179199 0.6724258065223694 0 1.0 0 0.0 0 0.0 0 0.0 -0.4900953769683838 0.07213538885116577 -0.2839455306529999 0.0 0.0 -1.0 0.04923892021179199 0.6724258065223694 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.05936384201049805 0.7411052584648132 0 1.0 0 0.0 0 0.0 0 0.0 -0.48732495307922363 0.07810565829277039 -0.2839455306529999 0.0 0.0 -1.0 0.0478324294090271 0.6794154644012451 0 1.0 0 0.0 0 0.0 0 0.0 -0.48732495307922363 0.07810565829277039 -0.2839455306529999 0.0 0.0 -1.0 0.0478324294090271 0.6794154644012451 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.05936384201049805 0.7411052584648132 0 1.0 0 0.0 0 0.0 0 0.0 -0.48422837257385254 0.08367946743965149 -0.2839455306529999 0.0 0.0 -1.0 0.04617246985435486 0.685994029045105 0 1.0 0 0.0 0 0.0 0 0.0 -0.48422837257385254 0.08367946743965149 -0.2839455306529999 0.0 0.0 -1.0 0.04617246985435486 0.685994029045105 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.05936384201049805 0.7411052584648132 0 1.0 0 0.0 0 0.0 0 0.0 -0.4808061122894287 0.0888567864894867 -0.2839455306529999 0.0 0.0 -1.0 0.044251084327697754 0.6921672821044922 0 1.0 0 0.0 0 0.0 0 0.0 -0.4808061122894287 0.0888567864894867 -0.2839455306529999 0.0 0.0 -1.0 0.044251084327697754 0.6921672821044922 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.05936384201049805 0.7411052584648132 0 1.0 0 0.0 0 0.0 0 0.0 -0.47705769538879395 0.09363764524459839 -0.2839455306529999 0.0 0.0 -1.0 0.04205942153930664 0.6979392766952515 0 1.0 0 0.0 0 0.0 0 0.0 -0.47705769538879395 0.09363764524459839 -0.2839455306529999 0.0 0.0 -1.0 0.04205942153930664 0.6979392766952515 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.05936384201049805 0.7411052584648132 0 1.0 0 0.0 0 0.0 0 0.0 -0.47306370735168457 0.09802931547164917 -0.2839455306529999 0.0 0.0 -1.0 0.039642542600631714 0.7033029794692993 0 1.0 0 0.0 0 0.0 0 0.0 -0.47306370735168457 0.09802931547164917 -0.2839455306529999 0.0 0.0 -1.0 0.039642542600631714 0.7033029794692993 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.05936384201049805 0.7411052584648132 0 1.0 0 0.0 0 0.0 0 0.0 -0.4689042568206787 0.10203909873962402 -0.2839455306529999 0.0 0.0 -1.0 0.03704848885536194 0.7082504034042358 0 1.0 0 0.0 0 0.0 0 0.0 -0.4689042568206787 0.10203909873962402 -0.2839455306529999 0.0 0.0 -1.0 0.03704848885536194 0.7082504034042358 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.05936384201049805 0.7411052584648132 0 1.0 0 0.0 0 0.0 0 0.0 -0.46457958221435547 0.10566699504852295 -0.2839455306529999 0.0 0.0 -1.0 0.03427475690841675 0.712781548500061 0 1.0 0 0.0 0 0.0 0 0.0 -0.46457958221435547 0.10566699504852295 -0.2839455306529999 0.0 0.0 -1.0 0.03427475690841675 0.712781548500061 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.05936384201049805 0.7411052584648132 0 1.0 0 0.0 0 0.0 0 0.0 -0.46008944511413574 0.10891300439834595 -0.2839455306529999 0.0 0.0 -1.0 0.031319111585617065 0.7168951034545898 0 1.0 0 0.0 0 0.0 0 0.0 -0.46008944511413574 0.10891300439834595 -0.2839455306529999 0.0 0.0 -1.0 0.031319111585617065 0.7168951034545898 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.05936384201049805 0.7411052584648132 0 1.0 0 0.0 0 0.0 0 0.0 -0.45543384552001953 0.11177712678909302 -0.2839455306529999 0.0 0.0 -1.0 0.028180181980133057 0.7205884456634521 0 1.0 0 0.0 0 0.0 0 0.0 -0.45543384552001953 0.11177712678909302 -0.2839455306529999 0.0 0.0 -1.0 0.028180181980133057 0.7205884456634521 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.05936384201049805 0.7411052584648132 0 1.0 0 0.0 0 0.0 0 0.0 -0.45061278343200684 0.11425936222076416 -0.2839455306529999 0.0 0.0 -1.0 0.024857670068740845 0.7238576412200928 0 1.0 0 0.0 0 0.0 0 0.0 -0.45061278343200684 0.11425936222076416 -0.2839455306529999 0.0 0.0 -1.0 0.024857670068740845 0.7238576412200928 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.05936384201049805 0.7411052584648132 0 1.0 0 0.0 0 0.0 0 0.0 -0.44562649726867676 0.11635971069335938 -0.2839455306529999 0.0 0.0 -1.0 0.021352380514144897 0.7266969680786133 0 1.0 0 0.0 0 0.0 0 0.0 -0.44562649726867676 0.11635971069335938 -0.2839455306529999 0.0 0.0 -1.0 0.021352380514144897 0.7266969680786133 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.05936384201049805 0.7411052584648132 0 1.0 0 0.0 0 0.0 0 0.0 -0.4404747486114502 0.11807817220687866 -0.2839455306529999 0.0 0.0 -1.0 0.0176660418510437 0.7290995121002197 0 1.0 0 0.0 0 0.0 0 0.0 -0.4404747486114502 0.11807817220687866 -0.2839455306529999 0.0 0.0 -1.0 0.0176660418510437 0.7290995121002197 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.05936384201049805 0.7411052584648132 0 1.0 0 0.0 0 0.0 0 0.0 -0.43515753746032715 0.11941477656364441 -0.2839455306529999 0.0 0.0 -1.0 0.013802021741867065 0.7310566306114197 0 1.0 0 0.0 0 0.0 0 0.0 -0.43515753746032715 0.11941477656364441 -0.2839455306529999 0.0 0.0 -1.0 0.013802021741867065 0.7310566306114197 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.05936384201049805 0.7411052584648132 0 1.0 0 0.0 0 0.0 0 0.0 -0.4296748638153076 0.12036949396133423 -0.2839455306529999 0.0 0.0 -1.0 0.009765088558197021 0.7325584888458252 0 1.0 0 0.0 0 0.0 0 0.0 -0.4296748638153076 0.12036949396133423 -0.2839455306529999 0.0 0.0 -1.0 1.0097651481628418 0.7325584888458252 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 1.059363842010498 0.7411052584648132 0 1.0 0 0.0 0 0.0 0 0.0 -0.27240467071533203 0.13872790336608887 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8982787132263184 0.7239008545875549 0 1.0 0 0.0 0 0.0 0 0.0 -0.4296748638153076 0.12036949396133423 -0.2839455306529999 0.0 0.0 -1.0 1.0097651481628418 0.7325584888458252 0 1.0 0 0.0 0 0.0 0 0.0 -0.27240467071533203 0.13872790336608887 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8982787132263184 0.7239008545875549 0 1.0 0 0.0 0 0.0 0 0.0 -0.4240269660949707 0.12094232439994812 -0.2839455306529999 0.0 0.0 -1.0 1.0055617094039917 0.7335937023162842 0 1.0 0 0.0 0 0.0 0 0.0 -0.4240269660949707 0.12094232439994812 -0.2839455306529999 0.0 0.0 -1.0 1.0055617094039917 0.7335937023162842 0 1.0 0 0.0 0 0.0 0 0.0 -0.27240467071533203 0.13872790336608887 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8982787132263184 0.7239008545875549 0 1.0 0 0.0 0 0.0 0 0.0 -0.2659175395965576 0.12963202595710754 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8955774307250977 0.7135368585586548 0 1.0 0 0.0 0 0.0 0 0.0 -0.4240269660949707 0.12094232439994812 -0.2839455306529999 0.0 0.0 -1.0 1.0055617094039917 0.7335937023162842 0 1.0 0 0.0 0 0.0 0 0.0 -0.2659175395965576 0.12963202595710754 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8955774307250977 0.7135368585586548 0 1.0 0 0.0 0 0.0 0 0.0 -0.4182136058807373 0.12113326787948608 -0.2839455306529999 0.0 0.0 -1.0 1.0011998414993286 0.7341498732566833 0 1.0 0 0.0 0 0.0 0 0.0 -0.4182136058807373 0.12113326787948608 -0.2839455306529999 0.0 0.0 -1.0 1.0011998414993286 0.7341498732566833 0 1.0 0 0.0 0 0.0 0 0.0 -0.2659175395965576 0.12963202595710754 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8955774307250977 0.7135368585586548 0 1.0 0 0.0 0 0.0 0 0.0 -0.26004815101623535 0.11994022130966187 -0.2839455306529999 0.0 0.0 -1.0 0.8933745622634888 0.7027099132537842 0 1.0 0 0.0 0 0.0 0 0.0 -0.4122908115386963 0.12093746662139893 -0.2839455306529999 0.0 0.0 -1.0 0.9967317581176758 0.7342070937156677 0 1.0 0 0.0 0 0.0 0 0.0 -0.4182136058807373 0.12113326787948608 -0.2839455306529999 0.0 0.0 -1.0 1.0011998414993286 0.7341498732566833 0 1.0 0 0.0 0 0.0 0 0.0 -0.26004815101623535 0.11994022130966187 -0.2839455306529999 0.0 0.0 -1.0 0.8933745622634888 0.7027099132537842 0 1.0 0 0.0 0 0.0 0 0.0 -0.40654802322387695 0.12035006284713745 -0.2839455306529999 0.0 0.0 -1.0 0.9923887252807617 0.7337468862533569 0 1.0 0 0.0 0 0.0 0 0.0 -0.4122908115386963 0.12093746662139893 -0.2839455306529999 0.0 0.0 -1.0 0.9967317581176758 0.7342070937156677 0 1.0 0 0.0 0 0.0 0 0.0 -0.26004815101623535 0.11994022130966187 -0.2839455306529999 0.0 0.0 -1.0 0.8933745622634888 0.7027099132537842 0 1.0 0 0.0 0 0.0 0 0.0 -0.4009850025177002 0.11937102675437927 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9881839752197266 0.7327767610549927 0 1.0 0 0.0 0 0.0 0 0.0 -0.40654802322387695 0.12035006284713745 -0.2839455306529999 0.0 0.0 -1.0 0.9923887252807617 0.7337468862533569 0 1.0 0 0.0 0 0.0 0 0.0 -0.26004815101623535 0.11994022130966187 -0.2839455306529999 0.0 0.0 -1.0 0.8933745622634888 0.7027099132537842 0 1.0 0 0.0 0 0.0 0 0.0 -0.4009850025177002 0.11937102675437927 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9881839752197266 0.7327767610549927 0 1.0 0 0.0 0 0.0 0 0.0 -0.26004815101623535 0.11994022130966187 -0.2839455306529999 0.0 0.0 -1.0 0.8933745622634888 0.7027099132537842 0 1.0 0 0.0 0 0.0 0 0.0 -0.25479650497436523 0.10965245962142944 -0.2839455306529999 0.0 0.0 -1.0 0.8916356563568115 0.691405177116394 0 1.0 0 0.0 0 0.0 0 0.0 -0.3956022262573242 0.11800038814544678 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.9841297268867493 0.7313036918640137 0 1.0 0 0.0 0 0.0 0 0.0 -0.4009850025177002 0.11937102675437927 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9881839752197266 0.7327767610549927 0 1.0 0 0.0 0 0.0 0 0.0 -0.25479650497436523 0.10965245962142944 -0.2839455306529999 0.0 0.0 -1.0 0.8916356563568115 0.691405177116394 0 1.0 0 0.0 0 0.0 0 0.0 -0.3903992176055908 0.11623811721801758 -0.2839455306529999 0.0 0.0 -1.0 0.9802356958389282 0.7293342351913452 0 1.0 0 0.0 0 0.0 0 0.0 -0.3956022262573242 0.11800038814544678 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.9841297268867493 0.7313036918640137 0 1.0 0 0.0 0 0.0 0 0.0 -0.25479650497436523 0.10965245962142944 -0.2839455306529999 0.0 0.0 -1.0 0.8916356563568115 0.691405177116394 0 1.0 0 0.0 0 0.0 0 0.0 -0.3853764533996582 0.11408424377441406 -0.2839455306529999 0.0 0.0 -1.0 0.976510763168335 0.7268737554550171 0 1.0 0 0.0 0 0.0 0 0.0 -0.3903992176055908 0.11623811721801758 -0.2839455306529999 0.0 0.0 -1.0 0.9802356958389282 0.7293342351913452 0 1.0 0 0.0 0 0.0 0 0.0 -0.25479650497436523 0.10965245962142944 -0.2839455306529999 0.0 0.0 -1.0 0.8916356563568115 0.691405177116394 0 1.0 0 0.0 0 0.0 0 0.0 -0.38053345680236816 0.11153876781463623 -0.2839455306529999 0.0 0.0 -1.0 0.9729613661766052 0.7239266633987427 0 1.0 0 0.0 0 0.0 0 0.0 -0.3853764533996582 0.11408424377441406 -0.2839455306529999 0.0 0.0 -1.0 0.976510763168335 0.7268737554550171 0 1.0 0 0.0 0 0.0 0 0.0 -0.25479650497436523 0.10965245962142944 -0.2839455306529999 0.0 0.0 -1.0 0.8916356563568115 0.691405177116394 0 1.0 0 0.0 0 0.0 0 0.0 -0.3758707046508789 0.1086016595363617 -0.2839455306529999 0.0 0.0 -1.0 0.9695932269096375 0.7204959988594055 0 1.0 0 0.0 0 0.0 0 0.0 -0.38053345680236816 0.11153876781463623 -0.2839455306529999 0.0 0.0 -1.0 0.9729613661766052 0.7239266633987427 0 1.0 0 0.0 0 0.0 0 0.0 -0.25479650497436523 0.10965245962142944 -0.2839455306529999 0.0 0.0 -1.0 0.8916356563568115 0.691405177116394 0 1.0 0 0.0 0 0.0 0 0.0 -0.3758707046508789 0.1086016595363617 -0.2839455306529999 0.0 0.0 -1.0 0.9695932269096375 0.7204959988594055 0 1.0 0 0.0 0 0.0 0 0.0 -0.25479650497436523 0.10965245962142944 -0.2839455306529999 0.0 0.0 -1.0 0.8916356563568115 0.691405177116394 0 1.0 0 0.0 0 0.0 0 0.0 -0.25016283988952637 0.09876877069473267 -0.2839455306529999 0.0 0.0 -1.0 0.8903305530548096 0.6796026229858398 0 1.0 0 0.0 0 0.0 0 0.0 -0.3713877201080322 0.10527294874191284 -0.2839455306529999 0.0 0.0 -1.0 0.9664097428321838 0.7165837287902832 0 1.0 0 0.0 0 0.0 0 0.0 -0.3758707046508789 0.1086016595363617 -0.2839455306529999 0.0 0.0 -1.0 0.9695932269096375 0.7204959988594055 0 1.0 0 0.0 0 0.0 0 0.0 -0.25016283988952637 0.09876877069473267 -0.2839455306529999 0.0 0.0 -1.0 0.8903305530548096 0.6796026229858398 0 1.0 0 0.0 0 0.0 0 0.0 -0.36708498001098633 0.10155263543128967 -0.2839455306529999 0.0 0.0 -1.0 0.9634137153625488 0.7121903896331787 0 1.0 0 0.0 0 0.0 0 0.0 -0.3713877201080322 0.10527294874191284 -0.2839455306529999 0.0 0.0 -1.0 0.9664097428321838 0.7165837287902832 0 1.0 0 0.0 0 0.0 0 0.0 -0.25016283988952637 0.09876877069473267 -0.2839455306529999 0.0 0.0 -1.0 0.8903305530548096 0.6796026229858398 0 1.0 0 0.0 0 0.0 0 0.0 -0.362962007522583 0.0974406898021698 -0.2839455306529999 0.0 0.0 -1.0 0.9606061577796936 0.7073150277137756 0 1.0 0 0.0 0 0.0 0 0.0 -0.36708498001098633 0.10155263543128967 -0.2839455306529999 0.0 0.0 -1.0 0.9634137153625488 0.7121903896331787 0 1.0 0 0.0 0 0.0 0 0.0 -0.25016283988952637 0.09876877069473267 -0.2839455306529999 0.0 0.0 -1.0 0.8903305530548096 0.6796026229858398 0 1.0 0 0.0 0 0.0 0 0.0 -0.362962007522583 0.0974406898021698 -0.2839455306529999 0.0 0.0 -1.0 0.9606061577796936 0.7073150277137756 0 1.0 0 0.0 0 0.0 0 0.0 -0.25016283988952637 0.09876877069473267 -0.2839455306529999 0.0 0.0 -1.0 0.8903305530548096 0.6796026229858398 0 1.0 0 0.0 0 0.0 0 0.0 -0.24614691734313965 0.08728915452957153 -0.2839455306529999 0.0 0.0 -1.0 0.8894327878952026 0.667277991771698 0 1.0 0 0.0 0 0.0 0 0.0 -0.35901927947998047 0.09293714165687561 -0.2839455306529999 0.0 0.0 -1.0 0.9579875469207764 0.7019557952880859 0 1.0 0 0.0 0 0.0 0 0.0 -0.362962007522583 0.0974406898021698 -0.2839455306529999 0.0 0.0 -1.0 0.9606061577796936 0.7073150277137756 0 1.0 0 0.0 0 0.0 0 0.0 -0.24614691734313965 0.08728915452957153 -0.2839455306529999 0.0 0.0 -1.0 0.8894327878952026 0.667277991771698 0 1.0 0 0.0 0 0.0 0 0.0 -0.35532689094543457 0.08799093961715698 -0.2839455306529999 0.0 0.0 -1.0 0.9556089639663696 0.6960643529891968 0 1.0 0 0.0 0 0.0 0 0.0 -0.35901927947998047 0.09293714165687561 -0.2839455306529999 0.0 0.0 -1.0 0.9579875469207764 0.7019557952880859 0 1.0 0 0.0 0 0.0 0 0.0 -0.24614691734313965 0.08728915452957153 -0.2839455306529999 0.0 0.0 -1.0 0.8894327878952026 0.667277991771698 0 1.0 0 0.0 0 0.0 0 0.0 -0.3519556522369385 0.08255091309547424 -0.2839455306529999 0.0 0.0 -1.0 0.953519344329834 0.689590573310852 0 1.0 0 0.0 0 0.0 0 0.0 -0.35532689094543457 0.08799093961715698 -0.2839455306529999 0.0 0.0 -1.0 0.9556089639663696 0.6960643529891968 0 1.0 0 0.0 0 0.0 0 0.0 -0.24614691734313965 0.08728915452957153 -0.2839455306529999 0.0 0.0 -1.0 0.8894327878952026 0.667277991771698 0 1.0 0 0.0 0 0.0 0 0.0 -0.3519556522369385 0.08255091309547424 -0.2839455306529999 0.0 0.0 -1.0 0.953519344329834 0.689590573310852 0 1.0 0 0.0 0 0.0 0 0.0 -0.24614691734313965 0.08728915452957153 -0.2839455306529999 0.0 0.0 -1.0 0.8894327878952026 0.667277991771698 0 1.0 0 0.0 0 0.0 0 0.0 -0.24274897575378418 0.07521361112594604 -0.2839455306529999 0.0 0.0 -1.0 0.8889200687408447 0.6544054746627808 0 1.0 0 0.0 0 0.0 0 0.0 -0.3489053249359131 0.07661712169647217 -0.2839455306529999 0.0 0.0 -1.0 0.9517133235931396 0.6825268268585205 0 1.0 0 0.0 0 0.0 0 0.0 -0.3519556522369385 0.08255091309547424 -0.2839455306529999 0.0 0.0 -1.0 0.953519344329834 0.689590573310852 0 1.0 0 0.0 0 0.0 0 0.0 -0.24274897575378418 0.07521361112594604 -0.2839455306529999 0.0 0.0 -1.0 0.8889200687408447 0.6544054746627808 0 1.0 0 0.0 0 0.0 0 0.0 -0.3461761474609375 0.07018956542015076 -0.2839455306529999 0.0 0.0 -1.0 0.9501850008964539 0.6748630404472351 0 1.0 0 0.0 0 0.0 0 0.0 -0.3489053249359131 0.07661712169647217 -0.2839455306529999 0.0 0.0 -1.0 0.9517133235931396 0.6825268268585205 0 1.0 0 0.0 0 0.0 0 0.0 -0.24274897575378418 0.07521361112594604 -0.2839455306529999 0.0 0.0 -1.0 0.8889200687408447 0.6544054746627808 0 1.0 0 0.0 0 0.0 0 0.0 -0.3461761474609375 0.07018956542015076 -0.2839455306529999 0.0 0.0 -1.0 0.9501850008964539 0.6748630404472351 0 1.0 0 0.0 0 0.0 0 0.0 -0.24274897575378418 0.07521361112594604 -0.2839455306529999 0.0 0.0 -1.0 0.8889200687408447 0.6544054746627808 0 1.0 0 0.0 0 0.0 0 0.0 -0.23996877670288086 0.06254212558269501 -0.2839455306529999 0.0 0.0 -1.0 0.88877272605896 0.6409586668014526 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.4900953769683838 0.07213538885116577 -0.2839455306529999 0.0 0.0 -1.0 0.04923892021179199 0.6724258065223694 0 1.0 0 0.0 0 0.0 0 0.0 -0.4925398826599121 0.06576862931251526 -0.2839455306529999 0.0 3.0518509447574615e-05 -0.999969482421875 0.05040016770362854 0.6650172472000122 0 1.0 0 0.0 0 0.0 0 0.0 -0.3437681198120117 0.06326821446418762 -0.2839455306529999 0.0 0.0 -1.0 0.9489279985427856 0.6665880680084229 0 1.0 0 0.0 0 0.0 0 0.0 -0.3461761474609375 0.07018956542015076 -0.2839455306529999 0.0 0.0 -1.0 0.9501850008964539 0.6748630404472351 0 1.0 0 0.0 0 0.0 0 0.0 -0.23996877670288086 0.06254212558269501 -0.2839455306529999 0.0 0.0 -1.0 0.88877272605896 0.6409586668014526 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.4925398826599121 0.06576862931251526 -0.2839455306529999 0.0 3.0518509447574615e-05 -0.999969482421875 0.05040016770362854 0.6650172472000122 0 1.0 0 0.0 0 0.0 0 0.0 -0.4946584701538086 0.05900539457798004 -0.2839455306529999 0.0 0.0 -1.0 0.05132386088371277 0.657180666923523 0 1.0 0 0.0 0 0.0 0 0.0 -0.34168124198913574 0.05585309863090515 -0.2839455306529999 0.0 0.0 -1.0 0.9479355216026306 0.6576895713806152 0 1.0 0 0.0 0 0.0 0 0.0 -0.3437681198120117 0.06326821446418762 -0.2839455306529999 0.0 0.0 -1.0 0.9489279985427856 0.6665880680084229 0 1.0 0 0.0 0 0.0 0 0.0 -0.23996877670288086 0.06254212558269501 -0.2839455306529999 0.0 0.0 -1.0 0.88877272605896 0.6409586668014526 0 1.0 0 0.0 0 0.0 0 0.0 -0.34168124198913574 0.05585309863090515 -0.2839455306529999 0.0 0.0 -1.0 0.9479355216026306 0.6576895713806152 0 1.0 0 0.0 0 0.0 0 0.0 -0.23996877670288086 0.06254212558269501 -0.2839455306529999 0.0 0.0 -1.0 0.88877272605896 0.6409586668014526 0 1.0 0 0.0 0 0.0 0 0.0 -0.2378063201904297 0.049274712800979614 -0.2839455306529999 0.0 0.0 -1.0 0.8889747858047485 0.6269134283065796 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.4946584701538086 0.05900539457798004 -0.2839455306529999 0.0 0.0 -1.0 0.05132386088371277 0.657180666923523 0 1.0 0 0.0 0 0.0 0 0.0 -0.49645113945007324 0.05184568464756012 -0.2839455306529999 0.0 0.0 -1.0 0.052017420530319214 0.6489062309265137 0 1.0 0 0.0 0 0.0 0 0.0 -0.33991527557373047 0.04794420301914215 -0.2839455306529999 0.0 0.0 -1.0 0.9472004771232605 0.6481556296348572 0 1.0 0 0.0 0 0.0 0 0.0 -0.34168124198913574 0.05585309863090515 -0.2839455306529999 0.0 0.0 -1.0 0.9479355216026306 0.6576895713806152 0 1.0 0 0.0 0 0.0 0 0.0 -0.2378063201904297 0.049274712800979614 -0.2839455306529999 0.0 0.0 -1.0 0.8889747858047485 0.6269134283065796 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.49645113945007324 0.05184568464756012 -0.2839455306529999 0.0 0.0 -1.0 0.052017420530319214 0.6489062309265137 0 1.0 0 0.0 0 0.0 0 0.0 -0.49791789054870605 0.04428949952125549 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.052487730979919434 0.6401838064193726 0 1.0 0 0.0 0 0.0 0 0.0 -0.33991527557373047 0.04794420301914215 -0.2839455306529999 0.0 0.0 -1.0 0.9472004771232605 0.6481556296348572 0 1.0 0 0.0 0 0.0 0 0.0 -0.2378063201904297 0.049274712800979614 -0.2839455306529999 0.0 0.0 -1.0 0.8889747858047485 0.6269134283065796 0 1.0 0 0.0 0 0.0 0 0.0 -0.23626184463500977 0.03541135787963867 -0.2839455306529999 0.0 0.0 -1.0 0.8895126581192017 0.6122499108314514 0 1.0 0 0.0 0 0.0 0 0.0 -0.338470458984375 0.039541542530059814 -0.2839455306529999 0.0 0.0 -1.0 0.9467159509658813 0.637975811958313 0 1.0 0 0.0 0 0.0 0 0.0 -0.33991527557373047 0.04794420301914215 -0.2839455306529999 0.0 0.0 -1.0 0.9472004771232605 0.6481556296348572 0 1.0 0 0.0 0 0.0 0 0.0 -0.23626184463500977 0.03541135787963867 -0.2839455306529999 0.0 0.0 -1.0 0.8895126581192017 0.6122499108314514 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.49791789054870605 0.04428949952125549 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.052487730979919434 0.6401838064193726 0 1.0 0 0.0 0 0.0 0 0.0 -0.49905872344970703 0.03633683919906616 -0.2839455306529999 0.0 0.0 -1.0 0.05274131894111633 0.6310035586357117 0 1.0 0 0.0 0 0.0 0 0.0 -0.33734679222106934 0.030645102262496948 -0.2839455306529999 0.0 0.0 -1.0 0.9464748501777649 0.6271423101425171 0 1.0 0 0.0 0 0.0 0 0.0 -0.338470458984375 0.039541542530059814 -0.2839455306529999 0.0 0.0 -1.0 0.9467159509658813 0.637975811958313 0 1.0 0 0.0 0 0.0 0 0.0 -0.23626184463500977 0.03541135787963867 -0.2839455306529999 0.0 0.0 -1.0 0.8895126581192017 0.6122499108314514 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.49905872344970703 0.03633683919906616 -0.2839455306529999 0.0 0.0 -1.0 0.05274131894111633 0.6310035586357117 0 1.0 0 0.0 0 0.0 0 0.0 -0.49987339973449707 0.027987703680992126 -0.2839455306529999 0.0 0.0 -1.0 0.05278405547142029 0.6213566064834595 0 1.0 0 0.0 0 0.0 0 0.0 -0.33734679222106934 0.030645102262496948 -0.2839455306529999 0.0 0.0 -1.0 0.9464748501777649 0.6271423101425171 0 1.0 0 0.0 0 0.0 0 0.0 -0.23626184463500977 0.03541135787963867 -0.2839455306529999 0.0 0.0 -1.0 0.8895126581192017 0.6122499108314514 0 1.0 0 0.0 0 0.0 0 0.0 -0.235335111618042 0.020952075719833374 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8903750777244568 0.5969552993774414 0 1.0 0 0.0 0 0.0 0 0.0 -0.3365440368652344 0.021254897117614746 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9464700222015381 0.6156516075134277 0 1.0 0 0.0 0 0.0 0 0.0 -0.33734679222106934 0.030645102262496948 -0.2839455306529999 0.0 0.0 -1.0 0.9464748501777649 0.6271423101425171 0 1.0 0 0.0 0 0.0 0 0.0 -0.235335111618042 0.020952075719833374 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8903750777244568 0.5969552993774414 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.49987339973449707 0.027987703680992126 -0.2839455306529999 0.0 0.0 -1.0 0.05278405547142029 0.6213566064834595 0 1.0 0 0.0 0 0.0 0 0.0 -0.5003623962402344 0.019242078065872192 -0.2839455306529999 0.0 0.0 -1.0 0.052621930837631226 0.6112359762191772 0 1.0 0 0.0 0 0.0 0 0.0 -0.3360624313354492 0.011370927095413208 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9466947317123413 0.6035062670707703 0 1.0 0 0.0 0 0.0 0 0.0 -0.3365440368652344 0.021254897117614746 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9464700222015381 0.6156516075134277 0 1.0 0 0.0 0 0.0 0 0.0 -0.235335111618042 0.020952075719833374 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8903750777244568 0.5969552993774414 0 1.0 0 0.0 0 0.0 0 0.0 -0.3360624313354492 0.011370927095413208 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9466947317123413 0.6035062670707703 0 1.0 0 0.0 0 0.0 0 0.0 -0.235335111618042 0.020952075719833374 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.8903750777244568 0.5969552993774414 0 1.0 0 0.0 0 0.0 0 0.0 -0.23502612113952637 0.005896851420402527 -0.2839455306529999 0.0 0.0 -1.0 0.8915530443191528 0.5810273289680481 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.5003623962402344 0.019242078065872192 -0.2839455306529999 0.0 0.0 -1.0 0.052621930837631226 0.6112359762191772 0 1.0 0 0.0 0 0.0 0 0.0 -0.5005252361297607 0.010100007057189941 -0.2839455306529999 0.0 0.0 -1.0 0.05225995182991028 0.600637674331665 0 1.0 0 0.0 0 0.0 0 0.0 -0.33590197563171387 0.0009931772947311401 -0.2839455306529999 0.0 0.0 -1.0 0.9471420049667358 0.5907166004180908 0 1.0 0 0.0 0 0.0 0 0.0 -0.3360624313354492 0.011370927095413208 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9466947317123413 0.6035062670707703 0 1.0 0 0.0 0 0.0 0 0.0 -0.23502612113952637 0.005896851420402527 -0.2839455306529999 0.0 0.0 -1.0 0.8915530443191528 0.5810273289680481 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.5005252361297607 0.010100007057189941 -0.2839455306529999 0.0 0.0 -1.0 0.05225995182991028 0.600637674331665 0 1.0 0 0.0 0 0.0 0 0.0 -0.5003988742828369 0.000676959753036499 -0.2839455306529999 0.0 0.0 -1.0 0.0517292320728302 0.5896918773651123 0 1.0 0 0.0 0 0.0 0 0.0 -0.33590197563171387 0.0009931772947311401 -0.2839455306529999 0.0 0.0 -1.0 0.9471420049667358 0.5907166004180908 0 1.0 0 0.0 0 0.0 0 0.0 -0.23502612113952637 0.005896851420402527 -0.2839455306529999 0.0 0.0 -1.0 0.8915530443191528 0.5810273289680481 0 1.0 0 0.0 0 0.0 0 0.0 -0.23534107208251953 -0.009677678346633911 -0.2839455306529999 0.0 0.0 -1.0 0.8930354118347168 0.5645591020584106 0 1.0 0 0.0 0 0.0 0 0.0 -0.3360614776611328 -0.00876675546169281 -0.2839455306529999 0.0 0.0 -1.0 0.9477471709251404 0.5786771774291992 0 1.0 0 0.0 0 0.0 0 0.0 -0.33590197563171387 0.0009931772947311401 -0.2839455306529999 0.0 0.0 -1.0 0.9471420049667358 0.5907166004180908 0 1.0 0 0.0 0 0.0 0 0.0 -0.23534107208251953 -0.009677678346633911 -0.2839455306529999 0.0 0.0 -1.0 0.8930354118347168 0.5645591020584106 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.5003988742828369 0.000676959753036499 -0.2839455306529999 0.0 0.0 -1.0 0.0517292320728302 0.5896918773651123 0 1.0 0 0.0 0 0.0 0 0.0 -0.5000193119049072 -0.008327707648277283 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.051086753606796265 0.5792196989059448 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.5000193119049072 -0.008327707648277283 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.051086753606796265 0.5792196989059448 0 1.0 0 0.0 0 0.0 0 0.0 -0.4993870258331299 -0.016914010047912598 -0.2839455306529999 0.0 0.0 -1.0 0.05033385753631592 0.5692355036735535 0 1.0 0 0.0 0 0.0 0 0.0 -0.33653950691223145 -0.018081560730934143 -0.2839455306529999 0.0 0.0 -1.0 0.9485154747962952 0.5672034025192261 0 1.0 0 0.0 0 0.0 0 0.0 -0.3360614776611328 -0.00876675546169281 -0.2839455306529999 0.0 0.0 -1.0 0.9477471709251404 0.5786771774291992 0 1.0 0 0.0 0 0.0 0 0.0 -0.23534107208251953 -0.009677678346633911 -0.2839455306529999 0.0 0.0 -1.0 0.8930354118347168 0.5645591020584106 0 1.0 0 0.0 0 0.0 0 0.0 -0.33653950691223145 -0.018081560730934143 -0.2839455306529999 0.0 0.0 -1.0 0.9485154747962952 0.5672034025192261 0 1.0 0 0.0 0 0.0 0 0.0 -0.23534107208251953 -0.009677678346633911 -0.2839455306529999 0.0 0.0 -1.0 0.8930354118347168 0.5645591020584106 0 1.0 0 0.0 0 0.0 0 0.0 -0.23628616333007812 -0.02464410662651062 -0.2839455306529999 0.0 0.0 -1.0 0.894726037979126 0.5487753748893738 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.4993870258331299 -0.016914010047912598 -0.2839455306529999 0.0 0.0 -1.0 0.05033385753631592 0.5692355036735535 0 1.0 0 0.0 0 0.0 0 0.0 -0.4985015392303467 -0.025081947445869446 -0.2839455306529999 0.0 0.0 -1.0 0.049470871686935425 0.5597488880157471 0 1.0 0 0.0 0 0.0 0 0.0 -0.33733606338500977 -0.02695123851299286 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9494444131851196 0.5563149452209473 0 1.0 0 0.0 0 0.0 0 0.0 -0.33653950691223145 -0.018081560730934143 -0.2839455306529999 0.0 0.0 -1.0 0.9485154747962952 0.5672034025192261 0 1.0 0 0.0 0 0.0 0 0.0 -0.23628616333007812 -0.02464410662651062 -0.2839455306529999 0.0 0.0 -1.0 0.894726037979126 0.5487753748893738 0 1.0 0 0.0 0 0.0 0 0.0 -0.33733606338500977 -0.02695123851299286 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9494444131851196 0.5563149452209473 0 1.0 0 0.0 0 0.0 0 0.0 -0.23628616333007812 -0.02464410662651062 -0.2839455306529999 0.0 0.0 -1.0 0.894726037979126 0.5487753748893738 0 1.0 0 0.0 0 0.0 0 0.0 -0.23786115646362305 -0.039002448320388794 -0.2839455306529999 0.0 0.0 -1.0 0.8966271877288818 0.53370201587677 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.4985015392303467 -0.025081947445869446 -0.2839455306529999 0.0 0.0 -1.0 0.049470871686935425 0.5597488880157471 0 1.0 0 0.0 0 0.0 0 0.0 -0.4973633289337158 -0.03283150494098663 -0.2839455306529999 0.0 0.0 -1.0 0.04849809408187866 0.5507650375366211 0 1.0 0 0.0 0 0.0 0 0.0 -0.3384511470794678 -0.03537578880786896 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9505323171615601 0.5460243225097656 0 1.0 0 0.0 0 0.0 0 0.0 -0.33733606338500977 -0.02695123851299286 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9494444131851196 0.5563149452209473 0 1.0 0 0.0 0 0.0 0 0.0 -0.23786115646362305 -0.039002448320388794 -0.2839455306529999 0.0 0.0 -1.0 0.8966271877288818 0.53370201587677 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.4973633289337158 -0.03283150494098663 -0.2839455306529999 0.0 0.0 -1.0 0.04849809408187866 0.5507650375366211 0 1.0 0 0.0 0 0.0 0 0.0 -0.4959719181060791 -0.040162697434425354 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.04741498827934265 0.5422860383987427 0 1.0 0 0.0 0 0.0 0 0.0 -0.33988499641418457 -0.04335521161556244 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9517782330513 0.5363379716873169 0 1.0 0 0.0 0 0.0 0 0.0 -0.3384511470794678 -0.03537578880786896 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9505323171615601 0.5460243225097656 0 1.0 0 0.0 0 0.0 0 0.0 -0.23786115646362305 -0.039002448320388794 -0.2839455306529999 0.0 0.0 -1.0 0.8966271877288818 0.53370201587677 0 1.0 0 0.0 0 0.0 0 0.0 -0.33988499641418457 -0.04335521161556244 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9517782330513 0.5363379716873169 0 1.0 0 0.0 0 0.0 0 0.0 -0.23786115646362305 -0.039002448320388794 -0.2839455306529999 0.0 0.0 -1.0 0.8966271877288818 0.53370201587677 0 1.0 0 0.0 0 0.0 0 0.0 -0.2400660514831543 -0.05275268852710724 -0.2839455306529999 0.0 0.0 -1.0 0.8987429141998291 0.5193524956703186 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.4959719181060791 -0.040162697434425354 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.04741498827934265 0.5422860383987427 0 1.0 0 0.0 0 0.0 0 0.0 -0.4943277835845947 -0.04707552492618561 -0.2839455306529999 0.0 0.0 -1.0 0.046220988035202026 0.5343106985092163 0 1.0 0 0.0 0 0.0 0 0.0 -0.34163761138916016 -0.0508895069360733 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9531815648078918 0.5272574424743652 0 1.0 0 0.0 0 0.0 0 0.0 -0.33988499641418457 -0.04335521161556244 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9517782330513 0.5363379716873169 0 1.0 0 0.0 0 0.0 0 0.0 -0.2400660514831543 -0.05275268852710724 -0.2839455306529999 0.0 0.0 -1.0 0.8987429141998291 0.5193524956703186 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.4943277835845947 -0.04707552492618561 -0.2839455306529999 0.0 0.0 -1.0 0.046220988035202026 0.5343106985092163 0 1.0 0 0.0 0 0.0 0 0.0 -0.4924304485321045 -0.0535699725151062 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.04491466283798218 0.5268359780311584 0 1.0 0 0.0 0 0.0 0 0.0 -0.34370875358581543 -0.05797867476940155 -0.2839455306529999 0.0 0.0 -1.0 0.9547421932220459 0.518780529499054 0 1.0 0 0.0 0 0.0 0 0.0 -0.34163761138916016 -0.0508895069360733 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9531815648078918 0.5272574424743652 0 1.0 0 0.0 0 0.0 0 0.0 -0.2400660514831543 -0.05275268852710724 -0.2839455306529999 0.0 0.0 -1.0 0.8987429141998291 0.5193524956703186 0 1.0 0 0.0 0 0.0 0 0.0 -0.34370875358581543 -0.05797867476940155 -0.2839455306529999 0.0 0.0 -1.0 0.9547421932220459 0.518780529499054 0 1.0 0 0.0 0 0.0 0 0.0 -0.2400660514831543 -0.05275268852710724 -0.2839455306529999 0.0 0.0 -1.0 0.8987429141998291 0.5193524956703186 0 1.0 0 0.0 0 0.0 0 0.0 -0.24290084838867188 -0.06589483469724655 -0.2839455306529999 0.0 0.0 -1.0 0.9010788798332214 0.5057295560836792 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.4924304485321045 -0.0535699725151062 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.04491466283798218 0.5268359780311584 0 1.0 0 0.0 0 0.0 0 0.0 -0.4902803897857666 -0.05964605510234833 -0.2839455306529999 0.0 0.0 -1.0 0.0434948205947876 0.5198570489883423 0 1.0 0 0.0 0 0.0 0 0.0 -0.3460984230041504 -0.06462271511554718 -0.2839455306529999 0.0 0.0 -1.0 0.9564605951309204 0.5109021067619324 0 1.0 0 0.0 0 0.0 0 0.0 -0.34370875358581543 -0.05797867476940155 -0.2839455306529999 0.0 0.0 -1.0 0.9547421932220459 0.518780529499054 0 1.0 0 0.0 0 0.0 0 0.0 -0.24290084838867188 -0.06589483469724655 -0.2839455306529999 0.0 0.0 -1.0 0.9010788798332214 0.5057295560836792 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.4902803897857666 -0.05964605510234833 -0.2839455306529999 0.0 0.0 -1.0 0.0434948205947876 0.5198570489883423 0 1.0 0 0.0 0 0.0 0 0.0 -0.48787713050842285 -0.06530377268791199 -0.2839455306529999 0.0 0.0 -1.0 0.04195922613143921 0.5133682489395142 0 1.0 0 0.0 0 0.0 0 0.0 -0.34880685806274414 -0.07082163542509079 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.958337664604187 0.5036150813102722 0 1.0 0 0.0 0 0.0 0 0.0 -0.3460984230041504 -0.06462271511554718 -0.2839455306529999 0.0 0.0 -1.0 0.9564605951309204 0.5109021067619324 0 1.0 0 0.0 0 0.0 0 0.0 -0.24290084838867188 -0.06589483469724655 -0.2839455306529999 0.0 0.0 -1.0 0.9010788798332214 0.5057295560836792 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.48787713050842285 -0.06530377268791199 -0.2839455306529999 0.0 0.0 -1.0 0.04195922613143921 0.5133682489395142 0 1.0 0 0.0 0 0.0 0 0.0 -0.48522114753723145 -0.07054311782121658 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.0403059720993042 0.5073632597923279 0 1.0 0 0.0 0 0.0 0 0.0 -0.34880685806274414 -0.07082163542509079 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.958337664604187 0.5036150813102722 0 1.0 0 0.0 0 0.0 0 0.0 -0.24290084838867188 -0.06589483469724655 -0.2839455306529999 0.0 0.0 -1.0 0.9010788798332214 0.5057295560836792 0 1.0 0 0.0 0 0.0 0 0.0 -0.24636578559875488 -0.07842888683080673 -0.2839455306529999 0.0 0.0 -1.0 0.903641939163208 0.4928281903266907 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.48522114753723145 -0.07054311782121658 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.0403059720993042 0.5073632597923279 0 1.0 0 0.0 0 0.0 0 0.0 -0.4823117256164551 -0.07536409795284271 -0.2839455306529999 0.0 0.0 -1.0 0.03853201866149902 0.5018355250358582 0 1.0 0 0.0 0 0.0 0 0.0 -0.3518340587615967 -0.07657542824745178 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.960374653339386 0.4969112277030945 0 1.0 0 0.0 0 0.0 0 0.0 -0.34880685806274414 -0.07082163542509079 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.958337664604187 0.5036150813102722 0 1.0 0 0.0 0 0.0 0 0.0 -0.24636578559875488 -0.07842888683080673 -0.2839455306529999 0.0 0.0 -1.0 0.903641939163208 0.4928281903266907 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.4823117256164551 -0.07536409795284271 -0.2839455306529999 0.0 0.0 -1.0 0.03853201866149902 0.5018355250358582 0 1.0 0 0.0 0 0.0 0 0.0 -0.477933406829834 -0.0816299095749855 -0.2839455306529999 0.0 0.0 -1.0 0.03590008616447449 0.4946441054344177 0 1.0 0 0.0 0 0.0 0 0.0 -0.3551797866821289 -0.08188409358263016 -0.2839455306529999 0.0 0.0 -1.0 0.9625728130340576 0.4907815456390381 0 1.0 0 0.0 0 0.0 0 0.0 -0.3518340587615967 -0.07657542824745178 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.960374653339386 0.4969112277030945 0 1.0 0 0.0 0 0.0 0 0.0 -0.24636578559875488 -0.07842888683080673 -0.2839455306529999 0.0 0.0 -1.0 0.903641939163208 0.4928281903266907 0 1.0 0 0.0 0 0.0 0 0.0 -0.3551797866821289 -0.08188409358263016 -0.2839455306529999 0.0 0.0 -1.0 0.9625728130340576 0.4907815456390381 0 1.0 0 0.0 0 0.0 0 0.0 -0.24636578559875488 -0.07842888683080673 -0.2839455306529999 0.0 0.0 -1.0 0.903641939163208 0.4928281903266907 0 1.0 0 0.0 0 0.0 0 0.0 -0.2504608631134033 -0.09035484492778778 -0.2839455306529999 0.0 0.0 -1.0 0.9064401388168335 0.4806376099586487 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.477933406829834 -0.0816299095749855 -0.2839455306529999 0.0 0.0 -1.0 0.03590008616447449 0.4946441054344177 0 1.0 0 0.0 0 0.0 0 0.0 -0.47332167625427246 -0.08735086768865585 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.033157676458358765 0.48806750774383545 0 1.0 0 0.0 0 0.0 0 0.0 -0.3588440418243408 -0.08674763888120651 -0.2839455306529999 0.0 0.0 -1.0 0.9649338722229004 0.4852173924446106 0 1.0 0 0.0 0 0.0 0 0.0 -0.3551797866821289 -0.08188409358263016 -0.2839455306529999 0.0 0.0 -1.0 0.9625728130340576 0.4907815456390381 0 1.0 0 0.0 0 0.0 0 0.0 -0.2504608631134033 -0.09035484492778778 -0.2839455306529999 0.0 0.0 -1.0 0.9064401388168335 0.4806376099586487 0 1.0 0 0.0 0 0.0 0 0.0 -0.3627345561981201 -0.0911952406167984 -0.2839455306529999 0.0 0.0 -1.0 0.9674052000045776 0.4801751375198364 0 1.0 0 0.0 0 0.0 0 0.0 -0.3588440418243408 -0.08674763888120651 -0.2839455306529999 0.0 0.0 -1.0 0.9649338722229004 0.4852173924446106 0 1.0 0 0.0 0 0.0 0 0.0 -0.2504608631134033 -0.09035484492778778 -0.2839455306529999 0.0 0.0 -1.0 0.9064401388168335 0.4806376099586487 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.47332167625427246 -0.08735086768865585 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.033157676458358765 0.48806750774383545 0 1.0 0 0.0 0 0.0 0 0.0 -0.4684762954711914 -0.09252697229385376 -0.2839455306529999 0.0 0.0 -1.0 0.030300259590148926 0.4821009039878845 0 1.0 0 0.0 0 0.0 0 0.0 -0.3627345561981201 -0.0911952406167984 -0.2839455306529999 0.0 0.0 -1.0 0.9674052000045776 0.4801751375198364 0 1.0 0 0.0 0 0.0 0 0.0 -0.2504608631134033 -0.09035484492778778 -0.2839455306529999 0.0 0.0 -1.0 0.9064401388168335 0.4806376099586487 0 1.0 0 0.0 0 0.0 0 0.0 -0.255185604095459 -0.1016727089881897 -0.2839455306529999 0.0 0.0 -1.0 0.9094827175140381 0.4691436290740967 0 1.0 0 0.0 0 0.0 0 0.0 -0.3667590618133545 -0.09525609761476517 -0.2839455306529999 0.0 0.0 -1.0 0.9699341058731079 0.47561323642730713 0 1.0 0 0.0 0 0.0 0 0.0 -0.3627345561981201 -0.0911952406167984 -0.2839455306529999 0.0 0.0 -1.0 0.9674052000045776 0.4801751375198364 0 1.0 0 0.0 0 0.0 0 0.0 -0.255185604095459 -0.1016727089881897 -0.2839455306529999 0.0 0.0 -1.0 0.9094827175140381 0.4691436290740967 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.4684762954711914 -0.09252697229385376 -0.2839455306529999 0.0 0.0 -1.0 0.030300259590148926 0.4821009039878845 0 1.0 0 0.0 0 0.0 0 0.0 -0.4633975028991699 -0.09715822339057922 -0.2839455306529999 0.0 0.0 -1.0 0.027323424816131592 0.47673940658569336 0 1.0 0 0.0 0 0.0 0 0.0 -0.37091708183288574 -0.09893020987510681 -0.2839455306529999 0.0 0.0 -1.0 0.9725217819213867 0.47152602672576904 0 1.0 0 0.0 0 0.0 0 0.0 -0.3667590618133545 -0.09525609761476517 -0.2839455306529999 0.0 0.0 -1.0 0.9699341058731079 0.47561323642730713 0 1.0 0 0.0 0 0.0 0 0.0 -0.255185604095459 -0.1016727089881897 -0.2839455306529999 0.0 0.0 -1.0 0.9094827175140381 0.4691436290740967 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.4633975028991699 -0.09715822339057922 -0.2839455306529999 0.0 0.0 -1.0 0.027323424816131592 0.47673940658569336 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 -0.2839455306529999 0.0 0.0 -1.0 0.049333542585372925 0.44634634256362915 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 -0.2839455306529999 0.0 0.0 -1.0 0.049333542585372925 0.44634634256362915 0 1.0 0 0.0 0 0.0 0 0.0 -0.4633975028991699 -0.09715822339057922 -0.2839455306529999 0.0 0.0 -1.0 0.027323424816131592 0.47673940658569336 0 1.0 0 0.0 0 0.0 0 0.0 -0.458085298538208 -0.10124462097883224 -0.2839455306529999 0.0 0.0 -1.0 0.02422255277633667 0.4719785451889038 0 1.0 0 0.0 0 0.0 0 0.0 -0.37520909309387207 -0.10221756994724274 -0.2839455306529999 0.0 0.0 -1.0 0.9751698970794678 0.46790796518325806 0 1.0 0 0.0 0 0.0 0 0.0 -0.37091708183288574 -0.09893020987510681 -0.2839455306529999 0.0 0.0 -1.0 0.9725217819213867 0.47152602672576904 0 1.0 0 0.0 0 0.0 0 0.0 -0.255185604095459 -0.1016727089881897 -0.2839455306529999 0.0 0.0 -1.0 0.9094827175140381 0.4691436290740967 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 -0.2839455306529999 0.0 0.0 -1.0 0.049333542585372925 0.44634634256362915 0 1.0 0 0.0 0 0.0 0 0.0 -0.458085298538208 -0.10124462097883224 -0.2839455306529999 0.0 0.0 -1.0 0.02422255277633667 0.4719785451889038 0 1.0 0 0.0 0 0.0 0 0.0 -0.45253944396972656 -0.10478616505861282 -0.2839455306529999 0.0 0.0 -1.0 0.02099284529685974 0.46781474351882935 0 1.0 0 0.0 0 0.0 0 0.0 -0.37520909309387207 -0.10221756994724274 -0.2839455306529999 0.0 0.0 -1.0 0.9751698970794678 0.46790796518325806 0 1.0 0 0.0 0 0.0 0 0.0 -0.255185604095459 -0.1016727089881897 -0.2839455306529999 0.0 0.0 -1.0 0.9094827175140381 0.4691436290740967 0 1.0 0 0.0 0 0.0 0 0.0 -0.2605404853820801 -0.11238247901201248 -0.2839455306529999 0.0 0.0 -1.0 0.9127802848815918 0.45833027362823486 0 1.0 0 0.0 0 0.0 0 0.0 -0.3796348571777344 -0.10511818528175354 -0.2839455306529999 0.0 0.0 -1.0 0.9778796434402466 0.46475380659103394 0 1.0 0 0.0 0 0.0 0 0.0 -0.37520909309387207 -0.10221756994724274 -0.2839455306529999 0.0 0.0 -1.0 0.9751698970794678 0.46790796518325806 0 1.0 0 0.0 0 0.0 0 0.0 -0.2605404853820801 -0.11238247901201248 -0.2839455306529999 0.0 0.0 -1.0 0.9127802848815918 0.45833027362823486 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 -0.2839455306529999 0.0 0.0 -1.0 0.049333542585372925 0.44634634256362915 0 1.0 0 0.0 0 0.0 0 0.0 -0.45253944396972656 -0.10478616505861282 -0.2839455306529999 0.0 0.0 -1.0 0.02099284529685974 0.46781474351882935 0 1.0 0 0.0 0 0.0 0 0.0 -0.4467599391937256 -0.10778285562992096 -0.2839455306529999 0.0 0.0 -1.0 0.01762986183166504 0.4642455577850342 0 1.0 0 0.0 0 0.0 0 0.0 -0.38419437408447266 -0.10763204842805862 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.980652391910553 0.4620588421821594 0 1.0 0 0.0 0 0.0 0 0.0 -0.3796348571777344 -0.10511818528175354 -0.2839455306529999 0.0 0.0 -1.0 0.9778796434402466 0.46475380659103394 0 1.0 0 0.0 0 0.0 0 0.0 -0.2605404853820801 -0.11238247901201248 -0.2839455306529999 0.0 0.0 -1.0 0.9127802848815918 0.45833027362823486 0 1.0 0 0.0 0 0.0 0 0.0 -0.3888876438140869 -0.10975916683673859 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9834892749786377 0.45981884002685547 0 1.0 0 0.0 0 0.0 0 0.0 -0.38419437408447266 -0.10763204842805862 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.980652391910553 0.4620588421821594 0 1.0 0 0.0 0 0.0 0 0.0 -0.2605404853820801 -0.11238247901201248 -0.2839455306529999 0.0 0.0 -1.0 0.9127802848815918 0.45833027362823486 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 -0.2839455306529999 0.0 0.0 -1.0 0.049333542585372925 0.44634634256362915 0 1.0 0 0.0 0 0.0 0 0.0 -0.4467599391937256 -0.10778285562992096 -0.2839455306529999 0.0 0.0 -1.0 0.01762986183166504 0.4642455577850342 0 1.0 0 0.0 0 0.0 0 0.0 -0.4407472610473633 -0.11023469269275665 -0.2839455306529999 0.0 0.0 -1.0 0.014129281044006348 0.46126997470855713 0 1.0 0 0.0 0 0.0 0 0.0 -0.39371466636657715 -0.11149953305721283 -0.2839455306529999 0.0 0.0 -1.0 0.9863911867141724 0.4580300450325012 0 1.0 0 0.0 0 0.0 0 0.0 -0.3888876438140869 -0.10975916683673859 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9834892749786377 0.45981884002685547 0 1.0 0 0.0 0 0.0 0 0.0 -0.2605404853820801 -0.11238247901201248 -0.2839455306529999 0.0 0.0 -1.0 0.9127802848815918 0.45833027362823486 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 -0.2839455306529999 0.0 0.0 -1.0 0.049333542585372925 0.44634634256362915 0 1.0 0 0.0 0 0.0 0 0.0 -0.4407472610473633 -0.11023469269275665 -0.2839455306529999 0.0 0.0 -1.0 0.014129281044006348 0.46126997470855713 0 1.0 0 0.0 0 0.0 0 0.0 -0.43450093269348145 -0.1121416762471199 -0.2839455306529999 0.0 0.0 -1.0 0.010486572980880737 0.4588884115219116 0 1.0 0 0.0 0 0.0 0 0.0 -0.39867544174194336 -0.11285315454006195 -0.2839455306529999 0.0 0.0 -1.0 0.9893592596054077 0.4566894769668579 0 1.0 0 0.0 0 0.0 0 0.0 -0.39371466636657715 -0.11149953305721283 -0.2839455306529999 0.0 0.0 -1.0 0.9863911867141724 0.4580300450325012 0 1.0 0 0.0 0 0.0 0 0.0 -0.2605404853820801 -0.11238247901201248 -0.2839455306529999 0.0 0.0 -1.0 0.9127802848815918 0.45833027362823486 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 -0.2839455306529999 0.0 0.0 -1.0 0.049333542585372925 0.44634634256362915 0 1.0 0 0.0 0 0.0 0 0.0 -0.43450093269348145 -0.1121416762471199 -0.2839455306529999 0.0 0.0 -1.0 0.010486572980880737 0.4588884115219116 0 1.0 0 0.0 0 0.0 0 0.0 -0.4280209541320801 -0.11350381374359131 -0.2839455306529999 0.0 0.0 -1.0 0.006697714328765869 0.45710289478302 0 1.0 0 0.0 0 0.0 0 0.0 -0.39867544174194336 -0.11285315454006195 -0.2839455306529999 0.0 0.0 -1.0 0.9893592596054077 0.4566894769668579 0 1.0 0 0.0 0 0.0 0 0.0 -0.2605404853820801 -0.11238247901201248 -0.2839455306529999 0.0 0.0 -1.0 0.9127802848815918 0.45833027362823486 0 1.0 0 0.0 0 0.0 0 0.0 -0.2665255069732666 -0.12248415499925613 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9163439869880676 0.4481813907623291 0 1.0 0 0.0 0 0.0 0 0.0 -0.40377020835876465 -0.11382002383470535 -0.2839455306529999 0.0 0.0 -1.0 0.9923943281173706 0.4557947516441345 0 1.0 0 0.0 0 0.0 0 0.0 -0.39867544174194336 -0.11285315454006195 -0.2839455306529999 0.0 0.0 -1.0 0.9893592596054077 0.4566894769668579 0 1.0 0 0.0 0 0.0 0 0.0 -0.2665255069732666 -0.12248415499925613 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9163439869880676 0.4481813907623291 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 -0.2839455306529999 0.0 0.0 -1.0 0.049333542585372925 0.44634634256362915 0 1.0 0 0.0 0 0.0 0 0.0 -0.4280209541320801 -0.11350381374359131 -0.2839455306529999 0.0 0.0 -1.0 0.006697714328765869 0.45710289478302 0 1.0 0 0.0 0 0.0 0 0.0 -0.4213075637817383 -0.11432109773159027 -0.2839455306529999 0.0 0.0 -1.0 0.0027590692043304443 0.4559170603752136 0 1.0 0 0.0 0 0.0 0 0.0 -0.4089984893798828 -0.11440014839172363 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9954967498779297 0.45534396171569824 0 1.0 0 0.0 0 0.0 0 0.0 -0.40377020835876465 -0.11382002383470535 -0.2839455306529999 0.0 0.0 -1.0 0.9923943281173706 0.4557947516441345 0 1.0 0 0.0 0 0.0 0 0.0 -0.2665255069732666 -0.12248415499925613 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9163439869880676 0.4481813907623291 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 -0.2839455306529999 0.0 0.0 -1.0 1.0493335723876953 0.44634634256362915 0 1.0 0 0.0 0 0.0 0 0.0 -0.4213075637817383 -0.11432109773159027 -0.2839455306529999 0.0 0.0 -1.0 1.0027590990066528 0.4559170603752136 0 1.0 0 0.0 0 0.0 0 0.0 -0.41436076164245605 -0.1145935207605362 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9986672401428223 0.4553358554840088 0 1.0 0 0.0 0 0.0 0 0.0 -0.41436076164245605 -0.1145935207605362 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9986672401428223 0.4553358554840088 0 1.0 0 0.0 0 0.0 0 0.0 -0.4089984893798828 -0.11440014839172363 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9954967498779297 0.45534396171569824 0 1.0 0 0.0 0 0.0 0 0.0 -0.2665255069732666 -0.12248415499925613 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9163439869880676 0.4481813907623291 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 -0.2839455306529999 0.0 0.0 -1.0 1.0493335723876953 0.44634634256362915 0 1.0 0 0.0 0 0.0 0 0.0 -0.41436076164245605 -0.1145935207605362 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9986672401428223 0.4553358554840088 0 1.0 0 0.0 0 0.0 0 0.0 -0.2665255069732666 -0.12248415499925613 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9163439869880676 0.4481813907623291 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 -0.2839455306529999 0.0 0.0 -1.0 1.0493335723876953 0.44634634256362915 0 1.0 0 0.0 0 0.0 0 0.0 -0.2665255069732666 -0.12248415499925613 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9163439869880676 0.4481813907623291 0 1.0 0 0.0 0 0.0 0 0.0 -0.27314019203186035 -0.13197773694992065 -0.2839455306529999 0.0 0.0 -1.0 0.9201858043670654 0.4386823773384094 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 -0.2839455306529999 0.0 0.0 -1.0 0.049333542585372925 0.44634634256362915 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.047188133001327515 0.39707428216934204 0 1.0 0 0.0 0 0.0 0 0.0 -0.5030343532562256 -0.1343943178653717 -0.2839455306529999 0.0 0.0 -1.0 1.047232747077942 0.4410468339920044 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 -0.2839455306529999 0.0 0.0 -1.0 1.0493335723876953 0.44634634256362915 0 1.0 0 0.0 0 0.0 0 0.0 -0.27314019203186035 -0.13197773694992065 -0.2839455306529999 0.0 0.0 -1.0 0.9201858043670654 0.4386823773384094 0 1.0 0 0.0 0 0.0 0 0.0 -0.5030343532562256 -0.1343943178653717 -0.2839455306529999 0.0 0.0 -1.0 1.047232747077942 0.4410468339920044 0 1.0 0 0.0 0 0.0 0 0.0 -0.27314019203186035 -0.13197773694992065 -0.2839455306529999 0.0 0.0 -1.0 0.9201858043670654 0.4386823773384094 0 1.0 0 0.0 0 0.0 0 0.0 -0.28038525581359863 -0.14086322486400604 -0.2839455306529999 0.0 0.0 -1.0 0.9243186712265015 0.4298208951950073 0 1.0 0 0.0 0 0.0 0 0.0 -0.49911928176879883 -0.13927245140075684 -0.2839455306529999 0.0 0.0 -1.0 1.045076608657837 0.4359728693962097 0 1.0 0 0.0 0 0.0 0 0.0 -0.5030343532562256 -0.1343943178653717 -0.2839455306529999 0.0 0.0 -1.0 1.047232747077942 0.4410468339920044 0 1.0 0 0.0 0 0.0 0 0.0 -0.28038525581359863 -0.14086322486400604 -0.2839455306529999 0.0 0.0 -1.0 0.9243186712265015 0.4298208951950073 0 1.0 0 0.0 0 0.0 0 0.0 -0.4950852394104004 -0.14393897354602814 -0.2839455306529999 0.0 0.0 -1.0 1.0428640842437744 0.43112242221832275 0 1.0 0 0.0 0 0.0 0 0.0 -0.49911928176879883 -0.13927245140075684 -0.2839455306529999 0.0 0.0 -1.0 1.045076608657837 0.4359728693962097 0 1.0 0 0.0 0 0.0 0 0.0 -0.28038525581359863 -0.14086322486400604 -0.2839455306529999 0.0 0.0 -1.0 0.9243186712265015 0.4298208951950073 0 1.0 0 0.0 0 0.0 0 0.0 -0.4950852394104004 -0.14393897354602814 -0.2839455306529999 0.0 0.0 -1.0 1.0428640842437744 0.43112242221832275 0 1.0 0 0.0 0 0.0 0 0.0 -0.28038525581359863 -0.14086322486400604 -0.2839455306529999 0.0 0.0 -1.0 0.9243186712265015 0.4298208951950073 0 1.0 0 0.0 0 0.0 0 0.0 -0.28807997703552246 -0.1490871012210846 -0.2839455306529999 0.0 0.0 -1.0 0.9286611676216125 0.4216494560241699 0 1.0 0 0.0 0 0.0 0 0.0 -0.49093198776245117 -0.14839386940002441 -0.2839455306529999 0.0 0.0 -1.0 1.0405933856964111 0.42649346590042114 0 1.0 0 0.0 0 0.0 0 0.0 -0.4950852394104004 -0.14393897354602814 -0.2839455306529999 0.0 0.0 -1.0 1.0428640842437744 0.43112242221832275 0 1.0 0 0.0 0 0.0 0 0.0 -0.28807997703552246 -0.1490871012210846 -0.2839455306529999 0.0 0.0 -1.0 0.9286611676216125 0.4216494560241699 0 1.0 0 0.0 0 0.0 0 0.0 -0.48665952682495117 -0.15263715386390686 -0.2839455306529999 0.0 0.0 -1.0 1.0382630825042725 0.42208415269851685 0 1.0 0 0.0 0 0.0 0 0.0 -0.49093198776245117 -0.14839386940002441 -0.2839455306529999 0.0 0.0 -1.0 1.0405933856964111 0.42649346590042114 0 1.0 0 0.0 0 0.0 0 0.0 -0.28807997703552246 -0.1490871012210846 -0.2839455306529999 0.0 0.0 -1.0 0.9286611676216125 0.4216494560241699 0 1.0 0 0.0 0 0.0 0 0.0 -0.48665952682495117 -0.15263715386390686 -0.2839455306529999 0.0 0.0 -1.0 1.0382630825042725 0.42208415269851685 0 1.0 0 0.0 0 0.0 0 0.0 -0.28807997703552246 -0.1490871012210846 -0.2839455306529999 0.0 0.0 -1.0 0.9286611676216125 0.4216494560241699 0 1.0 0 0.0 0 0.0 0 0.0 -0.29604482650756836 -0.1565958559513092 -0.2839455306529999 0.0 0.0 -1.0 0.9331279993057251 0.41422218084335327 0 1.0 0 0.0 0 0.0 0 0.0 -0.4822678565979004 -0.15666882693767548 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0358721017837524 0.4178926348686218 0 1.0 0 0.0 0 0.0 0 0.0 -0.48665952682495117 -0.15263715386390686 -0.2839455306529999 0.0 0.0 -1.0 1.0382630825042725 0.42208415269851685 0 1.0 0 0.0 0 0.0 0 0.0 -0.29604482650756836 -0.1565958559513092 -0.2839455306529999 0.0 0.0 -1.0 0.9331279993057251 0.41422218084335327 0 1.0 0 0.0 0 0.0 0 0.0 -0.4822678565979004 -0.15666882693767548 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0358721017837524 0.4178926348686218 0 1.0 0 0.0 0 0.0 0 0.0 -0.29604482650756836 -0.1565958559513092 -0.2839455306529999 0.0 0.0 -1.0 0.9331279993057251 0.41422218084335327 0 1.0 0 0.0 0 0.0 0 0.0 -0.30427980422973633 -0.16338948905467987 -0.2839455306529999 0.0 0.0 -1.0 0.9377249479293823 0.4075313210487366 0 1.0 0 0.0 0 0.0 0 0.0 -0.47775697708129883 -0.16048887372016907 -0.2839455306529999 0.0 0.0 -1.0 1.0334187746047974 0.4139173626899719 0 1.0 0 0.0 0 0.0 0 0.0 -0.4822678565979004 -0.15666882693767548 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0358721017837524 0.4178926348686218 0 1.0 0 0.0 0 0.0 0 0.0 -0.30427980422973633 -0.16338948905467987 -0.2839455306529999 0.0 0.0 -1.0 0.9377249479293823 0.4075313210487366 0 1.0 0 0.0 0 0.0 0 0.0 -0.4731268882751465 -0.16409730911254883 -0.2839455306529999 0.0 0.0 -1.0 1.0309019088745117 0.41015708446502686 0 1.0 0 0.0 0 0.0 0 0.0 -0.47775697708129883 -0.16048887372016907 -0.2839455306529999 0.0 0.0 -1.0 1.0334187746047974 0.4139173626899719 0 1.0 0 0.0 0 0.0 0 0.0 -0.30427980422973633 -0.16338948905467987 -0.2839455306529999 0.0 0.0 -1.0 0.9377249479293823 0.4075313210487366 0 1.0 0 0.0 0 0.0 0 0.0 -0.4731268882751465 -0.16409730911254883 -0.2839455306529999 0.0 0.0 -1.0 1.0309019088745117 0.41015708446502686 0 1.0 0 0.0 0 0.0 0 0.0 -0.30427980422973633 -0.16338948905467987 -0.2839455306529999 0.0 0.0 -1.0 0.9377249479293823 0.4075313210487366 0 1.0 0 0.0 0 0.0 0 0.0 -0.31278467178344727 -0.1694680154323578 -0.2839455306529999 0.0 0.0 -1.0 0.9424571990966797 0.4015697240829468 0 1.0 0 0.0 0 0.0 0 0.0 -0.46837782859802246 -0.16749413311481476 -0.2839455306529999 0.0 0.0 -1.0 1.0283204317092896 0.40661054849624634 0 1.0 0 0.0 0 0.0 0 0.0 -0.4731268882751465 -0.16409730911254883 -0.2839455306529999 0.0 0.0 -1.0 1.0309019088745117 0.41015708446502686 0 1.0 0 0.0 0 0.0 0 0.0 -0.31278467178344727 -0.1694680154323578 -0.2839455306529999 0.0 0.0 -1.0 0.9424571990966797 0.4015697240829468 0 1.0 0 0.0 0 0.0 0 0.0 -0.46350932121276855 -0.17067933082580566 -0.2839455306529999 0.0 0.0 -1.0 1.0256727933883667 0.4032769203186035 0 1.0 0 0.0 0 0.0 0 0.0 -0.46837782859802246 -0.16749413311481476 -0.2839455306529999 0.0 0.0 -1.0 1.0283204317092896 0.40661054849624634 0 1.0 0 0.0 0 0.0 0 0.0 -0.31278467178344727 -0.1694680154323578 -0.2839455306529999 0.0 0.0 -1.0 0.9424571990966797 0.4015697240829468 0 1.0 0 0.0 0 0.0 0 0.0 -0.46350932121276855 -0.17067933082580566 -0.2839455306529999 0.0 0.0 -1.0 1.0256727933883667 0.4032769203186035 0 1.0 0 0.0 0 0.0 0 0.0 -0.31278467178344727 -0.1694680154323578 -0.2839455306529999 0.0 0.0 -1.0 0.9424571990966797 0.4015697240829468 0 1.0 0 0.0 0 0.0 0 0.0 -0.32155942916870117 -0.17483140528202057 -0.2839455306529999 0.0 0.0 -1.0 0.9473295211791992 0.39633166790008545 0 1.0 0 0.0 0 0.0 0 0.0 -0.45852184295654297 -0.17365291714668274 -0.2839455306529999 0.0 0.0 -1.0 1.0229582786560059 0.40015560388565063 0 1.0 0 0.0 0 0.0 0 0.0 -0.46350932121276855 -0.17067933082580566 -0.2839455306529999 0.0 0.0 -1.0 1.0256727933883667 0.4032769203186035 0 1.0 0 0.0 0 0.0 0 0.0 -0.32155942916870117 -0.17483140528202057 -0.2839455306529999 0.0 0.0 -1.0 0.9473295211791992 0.39633166790008545 0 1.0 0 0.0 0 0.0 0 0.0 -0.4534149169921875 -0.17641489207744598 -0.2839455306529999 0.0 0.0 -1.0 1.0201754570007324 0.3972463607788086 0 1.0 0 0.0 0 0.0 0 0.0 -0.45852184295654297 -0.17365291714668274 -0.2839455306529999 0.0 0.0 -1.0 1.0229582786560059 0.40015560388565063 0 1.0 0 0.0 0 0.0 0 0.0 -0.32155942916870117 -0.17483140528202057 -0.2839455306529999 0.0 0.0 -1.0 0.9473295211791992 0.39633166790008545 0 1.0 0 0.0 0 0.0 0 0.0 -0.4534149169921875 -0.17641489207744598 -0.2839455306529999 0.0 0.0 -1.0 1.0201754570007324 0.3972463607788086 0 1.0 0 0.0 0 0.0 0 0.0 -0.32155942916870117 -0.17483140528202057 -0.2839455306529999 0.0 0.0 -1.0 0.9473295211791992 0.39633166790008545 0 1.0 0 0.0 0 0.0 0 0.0 -0.33060407638549805 -0.1794796884059906 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9523460268974304 0.3918129801750183 0 1.0 0 0.0 0 0.0 0 0.0 -0.4482426643371582 -0.17896036803722382 -0.2839455306529999 0.0 0.0 -1.0 1.0173530578613281 0.39455825090408325 0 1.0 0 0.0 0 0.0 0 0.0 -0.4534149169921875 -0.17641489207744598 -0.2839455306529999 0.0 0.0 -1.0 1.0201754570007324 0.3972463607788086 0 1.0 0 0.0 0 0.0 0 0.0 -0.33060407638549805 -0.1794796884059906 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9523460268974304 0.3918129801750183 0 1.0 0 0.0 0 0.0 0 0.0 -0.4430580139160156 -0.18128451704978943 -0.2839455306529999 0.0 0.0 -1.0 1.0145189762115479 0.3920992612838745 0 1.0 0 0.0 0 0.0 0 0.0 -0.4482426643371582 -0.17896036803722382 -0.2839455306529999 0.0 0.0 -1.0 1.0173530578613281 0.39455825090408325 0 1.0 0 0.0 0 0.0 0 0.0 -0.33060407638549805 -0.1794796884059906 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9523460268974304 0.3918129801750183 0 1.0 0 0.0 0 0.0 0 0.0 -0.4430580139160156 -0.18128451704978943 -0.2839455306529999 0.0 0.0 -1.0 1.0145189762115479 0.3920992612838745 0 1.0 0 0.0 0 0.0 0 0.0 -0.33060407638549805 -0.1794796884059906 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9523460268974304 0.3918129801750183 0 1.0 0 0.0 0 0.0 0 0.0 -0.339918851852417 -0.1834128499031067 -0.2839455306529999 0.0 0.0 -1.0 0.957510232925415 0.3880120515823364 0 1.0 0 0.0 0 0.0 0 0.0 -0.43786120414733887 -0.18338730931282043 -0.2839455306529999 0.0 0.0 -1.0 1.011673927307129 0.38986819982528687 0 1.0 0 0.0 0 0.0 0 0.0 -0.4430580139160156 -0.18128451704978943 -0.2839455306529999 0.0 0.0 -1.0 1.0145189762115479 0.3920992612838745 0 1.0 0 0.0 0 0.0 0 0.0 -0.339918851852417 -0.1834128499031067 -0.2839455306529999 0.0 0.0 -1.0 0.957510232925415 0.3880120515823364 0 1.0 0 0.0 0 0.0 0 0.0 -0.43265223503112793 -0.18526874482631683 -0.2839455306529999 0.0 0.0 -1.0 1.0088175535202026 0.3878638744354248 0 1.0 0 0.0 0 0.0 0 0.0 -0.43786120414733887 -0.18338730931282043 -0.2839455306529999 0.0 0.0 -1.0 1.011673927307129 0.38986819982528687 0 1.0 0 0.0 0 0.0 0 0.0 -0.339918851852417 -0.1834128499031067 -0.2839455306529999 0.0 0.0 -1.0 0.957510232925415 0.3880120515823364 0 1.0 0 0.0 0 0.0 0 0.0 -0.43265223503112793 -0.18526874482631683 -0.2839455306529999 0.0 0.0 -1.0 1.0088175535202026 0.3878638744354248 0 1.0 0 0.0 0 0.0 0 0.0 -0.339918851852417 -0.1834128499031067 -0.2839455306529999 0.0 0.0 -1.0 0.957510232925415 0.3880120515823364 0 1.0 0 0.0 0 0.0 0 0.0 -0.349503755569458 -0.18663088977336884 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9628244638442993 0.384929358959198 0 1.0 0 0.0 0 0.0 0 0.0 -0.4274311065673828 -0.186928853392601 -0.2839455306529999 0.0 0.0 -1.0 1.0059502124786377 0.38608503341674805 0 1.0 0 0.0 0 0.0 0 0.0 -0.43265223503112793 -0.18526874482631683 -0.2839455306529999 0.0 0.0 -1.0 1.0088175535202026 0.3878638744354248 0 1.0 0 0.0 0 0.0 0 0.0 -0.349503755569458 -0.18663088977336884 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9628244638442993 0.384929358959198 0 1.0 0 0.0 0 0.0 0 0.0 -0.4274311065673828 -0.186928853392601 -0.2839455306529999 0.0 0.0 -1.0 1.0059502124786377 0.38608503341674805 0 1.0 0 0.0 0 0.0 0 0.0 -0.349503755569458 -0.18663088977336884 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9628244638442993 0.384929358959198 0 1.0 0 0.0 0 0.0 0 0.0 -0.359358549118042 -0.18913380801677704 -0.2839455306529999 0.0 0.0 -1.0 0.968289852142334 0.38256824016571045 0 1.0 0 0.0 0 0.0 0 0.0 -0.4221978187561035 -0.18836760520935059 -0.2839455306529999 0.0 0.0 -1.0 1.0030720233917236 0.38453078269958496 0 1.0 0 0.0 0 0.0 0 0.0 -0.4274311065673828 -0.186928853392601 -0.2839455306529999 0.0 0.0 -1.0 1.0059502124786377 0.38608503341674805 0 1.0 0 0.0 0 0.0 0 0.0 -0.359358549118042 -0.18913380801677704 -0.2839455306529999 0.0 0.0 -1.0 0.968289852142334 0.38256824016571045 0 1.0 0 0.0 0 0.0 0 0.0 -0.41695237159729004 -0.18958501517772675 -0.2839455306529999 0.0 0.0 -1.0 1.00018310546875 0.38320016860961914 0 1.0 0 0.0 0 0.0 0 0.0 -0.4221978187561035 -0.18836760520935059 -0.2839455306529999 0.0 0.0 -1.0 1.0030720233917236 0.38453078269958496 0 1.0 0 0.0 0 0.0 0 0.0 -0.359358549118042 -0.18913380801677704 -0.2839455306529999 0.0 0.0 -1.0 0.968289852142334 0.38256824016571045 0 1.0 0 0.0 0 0.0 0 0.0 -0.41695237159729004 -0.18958501517772675 -0.2839455306529999 0.0 0.0 -1.0 1.00018310546875 0.38320016860961914 0 1.0 0 0.0 0 0.0 0 0.0 -0.359358549118042 -0.18913380801677704 -0.2839455306529999 0.0 0.0 -1.0 0.968289852142334 0.38256824016571045 0 1.0 0 0.0 0 0.0 0 0.0 -0.36948323249816895 -0.1909216046333313 -0.2839455306529999 0.0 0.0 -1.0 0.9739063382148743 0.38093429803848267 0 1.0 0 0.0 0 0.0 0 0.0 -0.4116947650909424 -0.1905810683965683 -0.2839455306529999 0.0 0.0 -1.0 0.9972836971282959 0.3820924758911133 0 1.0 0 0.0 0 0.0 0 0.0 -0.41695237159729004 -0.18958501517772675 -0.2839455306529999 0.0 0.0 -1.0 1.00018310546875 0.38320016860961914 0 1.0 0 0.0 0 0.0 0 0.0 -0.36948323249816895 -0.1909216046333313 -0.2839455306529999 0.0 0.0 -1.0 0.9739063382148743 0.38093429803848267 0 1.0 0 0.0 0 0.0 0 0.0 -0.40642499923706055 -0.19135577976703644 -0.2839455306529999 0.0 0.0 -1.0 0.9943739771842957 0.3812071681022644 0 1.0 0 0.0 0 0.0 0 0.0 -0.4116947650909424 -0.1905810683965683 -0.2839455306529999 0.0 0.0 -1.0 0.9972836971282959 0.3820924758911133 0 1.0 0 0.0 0 0.0 0 0.0 -0.36948323249816895 -0.1909216046333313 -0.2839455306529999 0.0 0.0 -1.0 0.9739063382148743 0.38093429803848267 0 1.0 0 0.0 0 0.0 0 0.0 -0.40642499923706055 -0.19135577976703644 -0.2839455306529999 0.0 0.0 -1.0 0.9943739771842957 0.3812071681022644 0 1.0 0 0.0 0 0.0 0 0.0 -0.36948323249816895 -0.1909216046333313 -0.2839455306529999 0.0 0.0 -1.0 0.9739063382148743 0.38093429803848267 0 1.0 0 0.0 0 0.0 0 0.0 -0.37987804412841797 -0.19199427962303162 -0.2839455306529999 0.0 0.0 -1.0 0.9796726107597351 0.38003551959991455 0 1.0 0 0.0 0 0.0 0 0.0 -0.40114307403564453 -0.19190914928913116 -0.2839455306529999 0.0 0.0 -1.0 0.9914541840553284 0.38054370880126953 0 1.0 0 0.0 0 0.0 0 0.0 -0.40642499923706055 -0.19135577976703644 -0.2839455306529999 0.0 0.0 -1.0 0.9943739771842957 0.3812071681022644 0 1.0 0 0.0 0 0.0 0 0.0 -0.37987804412841797 -0.19199427962303162 -0.2839455306529999 0.0 0.0 -1.0 0.9796726107597351 0.38003551959991455 0 1.0 0 0.0 0 0.0 0 0.0 -0.39584898948669434 -0.19224116206169128 -0.2839455306529999 0.0 0.00012207403779029846 -1.0 0.9885245561599731 0.38010191917419434 0 1.0 0 0.0 0 0.0 0 0.0 -0.40114307403564453 -0.19190914928913116 -0.2839455306529999 0.0 0.0 -1.0 0.9914541840553284 0.38054370880126953 0 1.0 0 0.0 0 0.0 0 0.0 -0.37987804412841797 -0.19199427962303162 -0.2839455306529999 0.0 0.0 -1.0 0.9796726107597351 0.38003551959991455 0 1.0 0 0.0 0 0.0 0 0.0 -0.39584898948669434 -0.19224116206169128 -0.2839455306529999 0.0 0.00012207403779029846 -1.0 0.9885245561599731 0.38010191917419434 0 1.0 0 0.0 0 0.0 0 0.0 -0.37987804412841797 -0.19199427962303162 -0.2839455306529999 0.0 0.0 -1.0 0.9796726107597351 0.38003551959991455 0 1.0 0 0.0 0 0.0 0 0.0 -0.39054274559020996 -0.19235184788703918 -0.2839455306529999 0.0 0.0 -1.0 0.9855853915214539 0.37988173961639404 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.9632974863052368 0.7633605003356934 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.32953959703445435 -0.2839455306529999 0.0 0.0 -1.0 0.9500210285186768 0.8827873468399048 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 0.32953959703445435 -0.2839455306529999 0.0 0.0 -1.0 0.8878573775291443 0.842465877532959 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.9632974863052368 0.7633605003356934 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 0.32953959703445435 -0.2839455306529999 0.0 0.0 -1.0 0.8878573775291443 0.842465877532959 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.934088408946991 0.4341752529144287 0 1.0 0 0.0 0 0.0 0 0.0 -1.1078346967697144 0.19609802961349487 -0.2839455306529999 0.0 0.0 -1.0 0.06184554100036621 0.8146851658821106 0 1.0 0 0.0 0 0.0 0 0.0 -1.0966724157333374 0.19643977284431458 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.052008867263793945 0.8166701197624207 0 1.0 0 0.0 0 0.0 0 0.0 -1.0863980054855347 0.1960797905921936 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.042767733335494995 0.8174909353256226 0 1.0 0 0.0 0 0.0 0 0.0 -1.11867094039917 0.19507277011871338 -0.2839455306529999 0.0 0.0 -1.0 0.07110142707824707 0.8117210865020752 0 1.0 0 0.0 0 0.0 0 0.0 -1.1078346967697144 0.19609802961349487 -0.2839455306529999 0.0 0.0 -1.0 0.06184554100036621 0.8146851658821106 0 1.0 0 0.0 0 0.0 0 0.0 -1.0863980054855347 0.1960797905921936 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.042767733335494995 0.8174909353256226 0 1.0 0 0.0 0 0.0 0 0.0 -1.11867094039917 0.19507277011871338 -0.2839455306529999 0.0 0.0 -1.0 0.07110142707824707 0.8117210865020752 0 1.0 0 0.0 0 0.0 0 0.0 -1.0863980054855347 0.1960797905921936 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.042767733335494995 0.8174909353256226 0 1.0 0 0.0 0 0.0 0 0.0 -1.076357126235962 0.1949998140335083 -0.2839455306529999 0.0 0.0 -1.0 0.033646225929260254 0.817267894744873 0 1.0 0 0.0 0 0.0 0 0.0 -1.1291812658309937 0.19336402416229248 -0.2839455306529999 0.0 0.0 -1.0 0.07971975207328796 0.8078523278236389 0 1.0 0 0.0 0 0.0 0 0.0 -1.11867094039917 0.19507277011871338 -0.2839455306529999 0.0 0.0 -1.0 0.07110142707824707 0.8117210865020752 0 1.0 0 0.0 0 0.0 0 0.0 -1.076357126235962 0.1949998140335083 -0.2839455306529999 0.0 0.0 -1.0 0.033646225929260254 0.817267894744873 0 1.0 0 0.0 0 0.0 0 0.0 -1.1291812658309937 0.19336402416229248 -0.2839455306529999 0.0 0.0 -1.0 0.07971975207328796 0.8078523278236389 0 1.0 0 0.0 0 0.0 0 0.0 -1.076357126235962 0.1949998140335083 -0.2839455306529999 0.0 0.0 -1.0 0.033646225929260254 0.817267894744873 0 1.0 0 0.0 0 0.0 0 0.0 -1.0665497779846191 0.19319984316825867 -0.2839455306529999 0.0 0.0 -1.0 0.024738222360610962 0.8160241842269897 0 1.0 0 0.0 0 0.0 0 0.0 -1.139365553855896 0.19097179174423218 -0.2839455306529999 0.0 0.0 -1.0 0.08766904473304749 0.8031498789787292 0 1.0 0 0.0 0 0.0 0 0.0 -1.1291812658309937 0.19336402416229248 -0.2839455306529999 0.0 0.0 -1.0 0.07971975207328796 0.8078523278236389 0 1.0 0 0.0 0 0.0 0 0.0 -1.0665497779846191 0.19319984316825867 -0.2839455306529999 0.0 0.0 -1.0 0.024738222360610962 0.8160241842269897 0 1.0 0 0.0 0 0.0 0 0.0 -1.139365553855896 0.19097179174423218 -0.2839455306529999 0.0 0.0 -1.0 0.08766904473304749 0.8031498789787292 0 1.0 0 0.0 0 0.0 0 0.0 -1.0665497779846191 0.19319984316825867 -0.2839455306529999 0.0 0.0 -1.0 0.024738222360610962 0.8160241842269897 0 1.0 0 0.0 0 0.0 0 0.0 -1.0569759607315063 0.1906799077987671 -0.2839455306529999 0.0 0.0 -1.0 0.016127586364746094 0.8137865662574768 0 1.0 0 0.0 0 0.0 0 0.0 -1.1492239236831665 0.18789604306221008 -0.2839455306529999 0.0 0.0 -1.0 0.09493982791900635 0.7976773977279663 0 1.0 0 0.0 0 0.0 0 0.0 -1.139365553855896 0.19097179174423218 -0.2839455306529999 0.0 0.0 -1.0 0.08766904473304749 0.8031498789787292 0 1.0 0 0.0 0 0.0 0 0.0 -1.0569759607315063 0.1906799077987671 -0.2839455306529999 0.0 0.0 -1.0 0.016127586364746094 0.8137865662574768 0 1.0 0 0.0 0 0.0 0 0.0 -1.1492239236831665 0.18789604306221008 -0.2839455306529999 0.0 0.0 -1.0 0.09493982791900635 0.7976773977279663 0 1.0 0 0.0 0 0.0 0 0.0 -1.0569759607315063 0.1906799077987671 -0.2839455306529999 0.0 0.0 -1.0 0.016127586364746094 0.8137865662574768 0 1.0 0 0.0 0 0.0 0 0.0 -1.047635555267334 0.18743997812271118 -0.2839455306529999 0.0 0.0 -1.0 0.007884740829467773 0.810584545135498 0 1.0 0 0.0 0 0.0 0 0.0 -1.1587563753128052 0.18413680791854858 -0.2839455306529999 0.0 0.0 -1.0 0.10153970122337341 0.7914900183677673 0 1.0 0 0.0 0 0.0 0 0.0 -1.1492239236831665 0.18789604306221008 -0.2839455306529999 0.0 0.0 -1.0 0.09493982791900635 0.7976773977279663 0 1.0 0 0.0 0 0.0 0 0.0 -1.047635555267334 0.18743997812271118 -0.2839455306529999 0.0 0.0 -1.0 0.007884740829467773 0.810584545135498 0 1.0 0 0.0 0 0.0 0 0.0 -1.1587563753128052 0.18413680791854858 -0.2839455306529999 0.0 0.0 -1.0 0.10153970122337341 0.7914900183677673 0 1.0 0 0.0 0 0.0 0 0.0 -1.047635555267334 0.18743997812271118 -0.2839455306529999 0.0 0.0 -1.0 0.007884740829467773 0.810584545135498 0 1.0 0 0.0 0 0.0 0 0.0 -1.0385286808013916 0.18348005414009094 -0.2839455306529999 0.0 0.0 -1.0 6.493926048278809e-05 0.8064477443695068 0 1.0 0 0.0 0 0.0 0 0.0 -1.167962908744812 0.1796940565109253 -0.2839455306529999 0.0 0.0 -1.0 0.10748907923698425 0.7846333980560303 0 1.0 0 0.0 0 0.0 0 0.0 -1.1587563753128052 0.18413680791854858 -0.2839455306529999 0.0 0.0 -1.0 0.10153970122337341 0.7914900183677673 0 1.0 0 0.0 0 0.0 0 0.0 -1.0385286808013916 0.18348005414009094 -0.2839455306529999 0.0 0.0 -1.0 6.493926048278809e-05 0.8064477443695068 0 1.0 0 0.0 0 0.0 0 0.0 -1.167962908744812 0.1796940565109253 -0.2839455306529999 0.0 0.0 -1.0 1.1074891090393066 0.7846333980560303 0 1.0 0 0.0 0 0.0 0 0.0 -1.0385286808013916 0.18348005414009094 -0.2839455306529999 0.0 0.0 -1.0 1.0000649690628052 0.8064477443695068 0 1.0 0 0.0 0 0.0 0 0.0 -1.0296553373336792 0.17880016565322876 -0.2839455306529999 0.0 0.0 -1.0 0.9927076101303101 0.8014048933982849 0 1.0 0 0.0 0 0.0 0 0.0 -1.176843523979187 0.1745678186416626 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.1128166913986206 0.7771431803703308 0 1.0 0 0.0 0 0.0 0 0.0 -1.167962908744812 0.1796940565109253 -0.2839455306529999 0.0 0.0 -1.0 1.1074891090393066 0.7846333980560303 0 1.0 0 0.0 0 0.0 0 0.0 -1.0296553373336792 0.17880016565322876 -0.2839455306529999 0.0 0.0 -1.0 0.9927076101303101 0.8014048933982849 0 1.0 0 0.0 0 0.0 0 0.0 -1.176843523979187 0.1745678186416626 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.1128166913986206 0.7771431803703308 0 1.0 0 0.0 0 0.0 0 0.0 -1.0296553373336792 0.17880016565322876 -0.2839455306529999 0.0 0.0 -1.0 0.9927076101303101 0.8014048933982849 0 1.0 0 0.0 0 0.0 0 0.0 -1.0210155248641968 0.17340028285980225 -0.2839455306529999 0.0 0.0 -1.0 0.9858372211456299 0.7954815626144409 0 1.0 0 0.0 0 0.0 0 0.0 -1.1853982210159302 0.1687580645084381 -0.2839455306529999 0.0 0.0 -1.0 1.1175563335418701 0.769045889377594 0 1.0 0 0.0 0 0.0 0 0.0 -1.176843523979187 0.1745678186416626 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.1128166913986206 0.7771431803703308 0 1.0 0 0.0 0 0.0 0 0.0 -1.0210155248641968 0.17340028285980225 -0.2839455306529999 0.0 0.0 -1.0 0.9858372211456299 0.7954815626144409 0 1.0 0 0.0 0 0.0 0 0.0 -1.1853982210159302 0.1687580645084381 -0.2839455306529999 0.0 0.0 -1.0 1.1175563335418701 0.769045889377594 0 1.0 0 0.0 0 0.0 0 0.0 -1.0210155248641968 0.17340028285980225 -0.2839455306529999 0.0 0.0 -1.0 0.9858372211456299 0.7954815626144409 0 1.0 0 0.0 0 0.0 0 0.0 -1.0126092433929443 0.1672804057598114 -0.2839455306529999 0.0 0.0 -1.0 0.9794652462005615 0.7886999249458313 0 1.0 0 0.0 0 0.0 0 0.0 -1.1936269998550415 0.16226482391357422 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.1217445135116577 0.760358989238739 0 1.0 0 0.0 0 0.0 0 0.0 -1.1853982210159302 0.1687580645084381 -0.2839455306529999 0.0 0.0 -1.0 1.1175563335418701 0.769045889377594 0 1.0 0 0.0 0 0.0 0 0.0 -1.0126092433929443 0.1672804057598114 -0.2839455306529999 0.0 0.0 -1.0 0.9794652462005615 0.7886999249458313 0 1.0 0 0.0 0 0.0 0 0.0 -1.1936269998550415 0.16226482391357422 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.1217445135116577 0.760358989238739 0 1.0 0 0.0 0 0.0 0 0.0 -1.0126092433929443 0.1672804057598114 -0.2839455306529999 0.0 0.0 -1.0 0.9794652462005615 0.7886999249458313 0 1.0 0 0.0 0 0.0 0 0.0 -1.0044364929199219 0.1604405641555786 -0.2839455306529999 0.0 0.0 -1.0 0.9735915064811707 0.7810776829719543 0 1.0 0 0.0 0 0.0 0 0.0 -1.201529860496521 0.15508809685707092 -0.2839455306529999 0.0 0.0 -1.0 1.1254181861877441 0.7510921955108643 0 1.0 0 0.0 0 0.0 0 0.0 -1.1936269998550415 0.16226482391357422 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.1217445135116577 0.760358989238739 0 1.0 0 0.0 0 0.0 0 0.0 -1.0044364929199219 0.1604405641555786 -0.2839455306529999 0.0 0.0 -1.0 0.9735915064811707 0.7810776829719543 0 1.0 0 0.0 0 0.0 0 0.0 -1.201529860496521 0.15508809685707092 -0.2839455306529999 0.0 0.0 -1.0 1.1254181861877441 0.7510921955108643 0 1.0 0 0.0 0 0.0 0 0.0 -1.0044364929199219 0.1604405641555786 -0.2839455306529999 0.0 0.0 -1.0 0.9735915064811707 0.7810776829719543 0 1.0 0 0.0 0 0.0 0 0.0 -0.9964971542358398 0.1528807282447815 -0.2839455306529999 0.0 0.0 -1.0 0.9682073593139648 0.772628128528595 0 1.0 0 0.0 0 0.0 0 0.0 -1.2091068029403687 0.14722785353660583 -0.2839455306529999 0.0 0.0 -1.0 1.1286132335662842 0.7412484288215637 0 1.0 0 0.0 0 0.0 0 0.0 -1.201529860496521 0.15508809685707092 -0.2839455306529999 0.0 0.0 -1.0 1.1254181861877441 0.7510921955108643 0 1.0 0 0.0 0 0.0 0 0.0 -0.9964971542358398 0.1528807282447815 -0.2839455306529999 0.0 0.0 -1.0 0.9682073593139648 0.772628128528595 0 1.0 0 0.0 0 0.0 0 0.0 -1.2091068029403687 0.14722785353660583 -0.2839455306529999 0.0 0.0 -1.0 1.1286132335662842 0.7412484288215637 0 1.0 0 0.0 0 0.0 0 0.0 -0.9964971542358398 0.1528807282447815 -0.2839455306529999 0.0 0.0 -1.0 0.9682073593139648 0.772628128528595 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.9632974863052368 0.7633605003356934 0 1.0 0 0.0 0 0.0 0 0.0 -1.2162116765975952 0.1387108862400055 -0.2839455306529999 0.0 0.0 -1.0 1.1312880516052246 0.7309117317199707 0 1.0 0 0.0 0 0.0 0 0.0 -1.2091068029403687 0.14722785353660583 -0.2839455306529999 0.0 0.0 -1.0 1.1286132335662842 0.7412484288215637 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.9632974863052368 0.7633605003356934 0 1.0 0 0.0 0 0.0 0 0.0 -1.2162116765975952 0.1387108862400055 -0.2839455306529999 0.0 0.0 -1.0 1.1312880516052246 0.7309117317199707 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.9632974863052368 0.7633605003356934 0 1.0 0 0.0 0 0.0 0 0.0 -1.0590872764587402 0.12035006284713745 -0.2839455306529999 0.0 0.0 -1.0 1.0160439014434814 0.7520646452903748 0 1.0 0 0.0 0 0.0 0 0.0 -1.0590872764587402 0.12035006284713745 -0.2839455306529999 0.0 0.0 -1.0 1.0160439014434814 0.7520646452903748 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.9632974863052368 0.7633605003356934 0 1.0 0 0.0 0 0.0 0 0.0 -1.053524374961853 0.11937102675437927 -0.2839455306529999 0.0 0.0 -1.0 1.0116513967514038 0.7508395314216614 0 1.0 0 0.0 0 0.0 0 0.0 -1.053524374961853 0.11937102675437927 -0.2839455306529999 0.0 0.0 -1.0 1.0116513967514038 0.7508395314216614 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.9632974863052368 0.7633605003356934 0 1.0 0 0.0 0 0.0 0 0.0 -1.0481414794921875 0.11800038814544678 -0.2839455306529999 0.0 0.0 -1.0 1.007440447807312 0.7491217851638794 0 1.0 0 0.0 0 0.0 0 0.0 -1.0481414794921875 0.11800038814544678 -0.2839455306529999 0.0 0.0 -1.0 1.007440447807312 0.7491217851638794 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.9632974863052368 0.7633605003356934 0 1.0 0 0.0 0 0.0 0 0.0 -1.0429385900497437 0.11623811721801758 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0034195184707642 0.7469233274459839 0 1.0 0 0.0 0 0.0 0 0.0 -1.0429385900497437 0.11623811721801758 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0034195184707642 0.7469233274459839 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.9632974863052368 0.7633605003356934 0 1.0 0 0.0 0 0.0 0 0.0 -1.0379157066345215 0.11408424377441406 -0.2839455306529999 0.0 0.0 -1.0 0.9995948672294617 0.7442548871040344 0 1.0 0 0.0 0 0.0 0 0.0 -1.0379157066345215 0.11408424377441406 -0.2839455306529999 0.0 0.0 -1.0 0.9995948672294617 0.7442548871040344 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.9632974863052368 0.7633605003356934 0 1.0 0 0.0 0 0.0 0 0.0 -1.033072829246521 0.11153876781463623 -0.2839455306529999 0.0 0.0 -1.0 0.9959707856178284 0.7411254644393921 0 1.0 0 0.0 0 0.0 0 0.0 -1.033072829246521 0.11153876781463623 -0.2839455306529999 0.0 0.0 -1.0 0.9959707856178284 0.7411254644393921 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.9632974863052368 0.7633605003356934 0 1.0 0 0.0 0 0.0 0 0.0 -1.0284099578857422 0.1086016595363617 -0.2839455306529999 0.0 0.0 -1.0 0.9925497770309448 0.7375422716140747 0 1.0 0 0.0 0 0.0 0 0.0 -1.0284099578857422 0.1086016595363617 -0.2839455306529999 0.0 0.0 -1.0 0.9925497770309448 0.7375422716140747 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.9632974863052368 0.7633605003356934 0 1.0 0 0.0 0 0.0 0 0.0 -1.023927092552185 0.10527294874191284 -0.2839455306529999 0.0 0.0 -1.0 0.989332914352417 0.7335114479064941 0 1.0 0 0.0 0 0.0 0 0.0 -1.023927092552185 0.10527294874191284 -0.2839455306529999 0.0 0.0 -1.0 0.989332914352417 0.7335114479064941 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.9632974863052368 0.7633605003356934 0 1.0 0 0.0 0 0.0 0 0.0 -1.0196242332458496 0.10155263543128967 -0.2839455306529999 0.0 0.0 -1.0 0.9863194823265076 0.7290369868278503 0 1.0 0 0.0 0 0.0 0 0.0 -1.0196242332458496 0.10155263543128967 -0.2839455306529999 0.0 0.0 -1.0 0.9863194823265076 0.7290369868278503 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.9632974863052368 0.7633605003356934 0 1.0 0 0.0 0 0.0 0 0.0 -1.0155013799667358 0.0974406898021698 -0.2839455306529999 0.0 0.0 -1.0 0.9835079908370972 0.7241215705871582 0 1.0 0 0.0 0 0.0 0 0.0 -1.0155013799667358 0.0974406898021698 -0.2839455306529999 0.0 0.0 -1.0 0.9835079908370972 0.7241215705871582 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.9632974863052368 0.7633605003356934 0 1.0 0 0.0 0 0.0 0 0.0 -1.0115585327148438 0.09293714165687561 -0.2839455306529999 0.0 0.0 -1.0 0.9808957576751709 0.7187663316726685 0 1.0 0 0.0 0 0.0 0 0.0 -1.0115585327148438 0.09293714165687561 -0.2839455306529999 0.0 0.0 -1.0 0.9808957576751709 0.7187663316726685 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.9632974863052368 0.7633605003356934 0 1.0 0 0.0 0 0.0 0 0.0 -1.0078662633895874 0.08798837661743164 -0.2839455306529999 0.0 0.0 -1.0 0.9785283803939819 0.7129271030426025 0 1.0 0 0.0 0 0.0 0 0.0 -1.0078662633895874 0.08798837661743164 -0.2839455306529999 0.0 0.0 -1.0 0.9785283803939819 0.7129271030426025 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.9632974863052368 0.7633605003356934 0 1.0 0 0.0 0 0.0 0 0.0 -1.0044950246810913 0.0825410783290863 -0.2839455306529999 0.0 0.0 -1.0 0.9764478802680969 0.7065575122833252 0 1.0 0 0.0 0 0.0 0 0.0 -1.0044950246810913 0.0825410783290863 -0.2839455306529999 0.0 0.0 -1.0 0.9764478802680969 0.7065575122833252 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.9632974863052368 0.7633605003356934 0 1.0 0 0.0 0 0.0 0 0.0 -1.0014448165893555 0.07659512758255005 -0.2839455306529999 0.0 0.0 -1.0 0.9746454954147339 0.6996514797210693 0 1.0 0 0.0 0 0.0 0 0.0 -1.0014448165893555 0.07659512758255005 -0.2839455306529999 0.0 0.0 -1.0 0.9746454954147339 0.6996514797210693 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 -0.2839455306529999 0.0 0.0 -1.0 0.9632974863052368 0.7633605003356934 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.934088408946991 0.4341752529144287 0 1.0 0 0.0 0 0.0 0 0.0 -1.2226988077163696 0.12956392765045166 -0.2839455306529999 0.0 0.0 -1.0 0.13340923190116882 0.7201611995697021 0 1.0 0 0.0 0 0.0 0 0.0 -1.2162116765975952 0.1387108862400055 -0.2839455306529999 0.0 0.0 -1.0 0.13128799200057983 0.7309117317199707 0 1.0 0 0.0 0 0.0 0 0.0 -1.0648301839828491 0.12093746662139893 -0.2839455306529999 0.0 0.0 -1.0 0.02060776948928833 0.7527838349342346 0 1.0 0 0.0 0 0.0 0 0.0 -1.0648301839828491 0.12093746662139893 -0.2839455306529999 0.0 0.0 -1.0 0.02060776948928833 0.7527838349342346 0 1.0 0 0.0 0 0.0 0 0.0 -1.2162116765975952 0.1387108862400055 -0.2839455306529999 0.0 0.0 -1.0 0.13128799200057983 0.7309117317199707 0 1.0 0 0.0 0 0.0 0 0.0 -1.0590872764587402 0.12035006284713745 -0.2839455306529999 0.0 0.0 -1.0 0.01604396104812622 0.7520646452903748 0 1.0 0 0.0 0 0.0 0 0.0 -1.228568196296692 0.11978697776794434 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.1350199580192566 0.7089823484420776 0 1.0 0 0.0 0 0.0 0 0.0 -1.2226988077163696 0.12956392765045166 -0.2839455306529999 0.0 0.0 -1.0 0.13340923190116882 0.7201611995697021 0 1.0 0 0.0 0 0.0 0 0.0 -1.0707529783248901 0.12113326787948608 -0.2839455306529999 0.0 0.0 -1.0 0.025330007076263428 0.7529829144477844 0 1.0 0 0.0 0 0.0 0 0.0 -1.0707529783248901 0.12113326787948608 -0.2839455306529999 0.0 0.0 -1.0 0.025330007076263428 0.7529829144477844 0 1.0 0 0.0 0 0.0 0 0.0 -1.2226988077163696 0.12956392765045166 -0.2839455306529999 0.0 0.0 -1.0 0.13340923190116882 0.7201611995697021 0 1.0 0 0.0 0 0.0 0 0.0 -1.0648301839828491 0.12093746662139893 -0.2839455306529999 0.0 0.0 -1.0 0.02060776948928833 0.7527838349342346 0 1.0 0 0.0 0 0.0 0 0.0 -1.228568196296692 0.11978697776794434 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.1350199580192566 0.7089823484420776 0 1.0 0 0.0 0 0.0 0 0.0 -1.0707529783248901 0.12113326787948608 -0.2839455306529999 0.0 0.0 -1.0 0.025330007076263428 0.7529829144477844 0 1.0 0 0.0 0 0.0 0 0.0 -1.0765116214752197 0.12093991041183472 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.02992081642150879 0.7526613473892212 0 1.0 0 0.0 0 0.0 0 0.0 -1.228568196296692 0.11978697776794434 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.1350199580192566 0.7089823484420776 0 1.0 0 0.0 0 0.0 0 0.0 -1.0765116214752197 0.12093991041183472 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.02992081642150879 0.7526613473892212 0 1.0 0 0.0 0 0.0 0 0.0 -1.082112193107605 0.12035977840423584 -0.2839455306529999 0.0 3.0518509447574615e-05 -0.999969482421875 0.03436863422393799 0.7518304586410522 0 1.0 0 0.0 0 0.0 0 0.0 -1.228568196296692 0.11978697776794434 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.1350199580192566 0.7089823484420776 0 1.0 0 0.0 0 0.0 0 0.0 -1.082112193107605 0.12035977840423584 -0.2839455306529999 0.0 3.0518509447574615e-05 -0.999969482421875 0.03436863422393799 0.7518304586410522 0 1.0 0 0.0 0 0.0 0 0.0 -1.087554693222046 0.11939290165901184 -0.2839455306529999 0.0 0.0 -1.0 0.038658708333969116 0.7504989504814148 0 1.0 0 0.0 0 0.0 0 0.0 -1.2338197231292725 0.10938003659248352 -0.2839455306529999 0.0 0.0 -1.0 0.13615745306015015 0.6973543167114258 0 1.0 0 0.0 0 0.0 0 0.0 -1.228568196296692 0.11978697776794434 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.1350199580192566 0.7089823484420776 0 1.0 0 0.0 0 0.0 0 0.0 -1.087554693222046 0.11939290165901184 -0.2839455306529999 0.0 0.0 -1.0 0.038658708333969116 0.7504989504814148 0 1.0 0 0.0 0 0.0 0 0.0 -1.2338197231292725 0.10938003659248352 -0.2839455306529999 0.0 0.0 -1.0 0.13615745306015015 0.6973543167114258 0 1.0 0 0.0 0 0.0 0 0.0 -1.087554693222046 0.11939290165901184 -0.2839455306529999 0.0 0.0 -1.0 0.038658708333969116 0.7504989504814148 0 1.0 0 0.0 0 0.0 0 0.0 -1.092839002609253 0.11803928017616272 -0.2839455306529999 0.0 0.0 -1.0 0.0427783727645874 0.7486751079559326 0 1.0 0 0.0 0 0.0 0 0.0 -1.2338197231292725 0.10938003659248352 -0.2839455306529999 0.0 0.0 -1.0 0.13615745306015015 0.6973543167114258 0 1.0 0 0.0 0 0.0 0 0.0 -1.092839002609253 0.11803928017616272 -0.2839455306529999 0.0 0.0 -1.0 0.0427783727645874 0.7486751079559326 0 1.0 0 0.0 0 0.0 0 0.0 -1.0979652404785156 0.11629891395568848 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.04671713709831238 0.7463663816452026 0 1.0 0 0.0 0 0.0 0 0.0 -1.2338197231292725 0.10938003659248352 -0.2839455306529999 0.0 0.0 -1.0 0.13615745306015015 0.6973543167114258 0 1.0 0 0.0 0 0.0 0 0.0 -1.0979652404785156 0.11629891395568848 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.04671713709831238 0.7463663816452026 0 1.0 0 0.0 0 0.0 0 0.0 -1.102933406829834 0.11417180299758911 -0.2839455306529999 0.0 0.0 -1.0 0.050466328859329224 0.7435793876647949 0 1.0 0 0.0 0 0.0 0 0.0 -1.2338197231292725 0.10938003659248352 -0.2839455306529999 0.0 0.0 -1.0 0.13615745306015015 0.6973543167114258 0 1.0 0 0.0 0 0.0 0 0.0 -1.102933406829834 0.11417180299758911 -0.2839455306529999 0.0 0.0 -1.0 0.050466328859329224 0.7435793876647949 0 1.0 0 0.0 0 0.0 0 0.0 -1.1077433824539185 0.11165794730186462 -0.2839455306529999 0.0 0.0 -1.0 0.05401936173439026 0.7403191328048706 0 1.0 0 0.0 0 0.0 0 0.0 -1.2338197231292725 0.10938003659248352 -0.2839455306529999 0.0 0.0 -1.0 0.13615745306015015 0.6973543167114258 0 1.0 0 0.0 0 0.0 0 0.0 -1.1077433824539185 0.11165794730186462 -0.2839455306529999 0.0 0.0 -1.0 0.05401936173439026 0.7403191328048706 0 1.0 0 0.0 0 0.0 0 0.0 -1.1123952865600586 0.10875734686851501 -0.2839455306529999 0.0 0.0 -1.0 0.05737152695655823 0.7365900278091431 0 1.0 0 0.0 0 0.0 0 0.0 -1.2384533882141113 0.09834310412406921 -0.2839455306529999 0.0 0.0 -1.0 0.1368536651134491 0.685250997543335 0 1.0 0 0.0 0 0.0 0 0.0 -1.2338197231292725 0.10938003659248352 -0.2839455306529999 0.0 0.0 -1.0 0.13615745306015015 0.6973543167114258 0 1.0 0 0.0 0 0.0 0 0.0 -1.1123952865600586 0.10875734686851501 -0.2839455306529999 0.0 0.0 -1.0 0.05737152695655823 0.7365900278091431 0 1.0 0 0.0 0 0.0 0 0.0 -1.2384533882141113 0.09834310412406921 -0.2839455306529999 0.0 0.0 -1.0 0.1368536651134491 0.685250997543335 0 1.0 0 0.0 0 0.0 0 0.0 -1.1123952865600586 0.10875734686851501 -0.2839455306529999 0.0 0.0 -1.0 0.05737152695655823 0.7365900278091431 0 1.0 0 0.0 0 0.0 0 0.0 -1.1168891191482544 0.1054699718952179 -0.2839455306529999 0.0 0.0 -1.0 0.06051981449127197 0.7323944568634033 0 1.0 0 0.0 0 0.0 0 0.0 -1.2384533882141113 0.09834310412406921 -0.2839455306529999 0.0 0.0 -1.0 0.1368536651134491 0.685250997543335 0 1.0 0 0.0 0 0.0 0 0.0 -1.1168891191482544 0.1054699718952179 -0.2839455306529999 0.0 0.0 -1.0 0.06051981449127197 0.7323944568634033 0 1.0 0 0.0 0 0.0 0 0.0 -1.1212248802185059 0.10179585218429565 -0.2839455306529999 0.0 0.0 -1.0 0.06346258521080017 0.7277339696884155 0 1.0 0 0.0 0 0.0 0 0.0 -1.2384533882141113 0.09834310412406921 -0.2839455306529999 0.0 0.0 -1.0 0.1368536651134491 0.685250997543335 0 1.0 0 0.0 0 0.0 0 0.0 -1.1212248802185059 0.10179585218429565 -0.2839455306529999 0.0 0.0 -1.0 0.06346258521080017 0.7277339696884155 0 1.0 0 0.0 0 0.0 0 0.0 -1.1254024505615234 0.09773498773574829 -0.2839455306529999 0.0 0.0 -1.0 0.0661996603012085 0.7226083278656006 0 1.0 0 0.0 0 0.0 0 0.0 -1.2424691915512085 0.08667618036270142 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.13713571429252625 0.6726433038711548 0 1.0 0 0.0 0 0.0 0 0.0 -1.2384533882141113 0.09834310412406921 -0.2839455306529999 0.0 0.0 -1.0 0.1368536651134491 0.685250997543335 0 1.0 0 0.0 0 0.0 0 0.0 -1.1254024505615234 0.09773498773574829 -0.2839455306529999 0.0 0.0 -1.0 0.0661996603012085 0.7226083278656006 0 1.0 0 0.0 0 0.0 0 0.0 -1.2424691915512085 0.08667618036270142 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.13713571429252625 0.6726433038711548 0 1.0 0 0.0 0 0.0 0 0.0 -1.1254024505615234 0.09773498773574829 -0.2839455306529999 0.0 0.0 -1.0 0.0661996603012085 0.7226083278656006 0 1.0 0 0.0 0 0.0 0 0.0 -1.1294219493865967 0.0932874083518982 -0.2839455306529999 0.0 0.0 -1.0 0.06873214244842529 0.7170165777206421 0 1.0 0 0.0 0 0.0 0 0.0 -1.2424691915512085 0.08667618036270142 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.13713571429252625 0.6726433038711548 0 1.0 0 0.0 0 0.0 0 0.0 -1.1294219493865967 0.0932874083518982 -0.2839455306529999 0.0 0.0 -1.0 0.06873214244842529 0.7170165777206421 0 1.0 0 0.0 0 0.0 0 0.0 -1.1331982612609863 0.08845549821853638 -0.2839455306529999 0.0 0.0 -1.0 0.07100096344947815 0.7109781503677368 0 1.0 0 0.0 0 0.0 0 0.0 -1.2424691915512085 0.08667618036270142 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.13713571429252625 0.6726433038711548 0 1.0 0 0.0 0 0.0 0 0.0 -1.1331982612609863 0.08845549821853638 -0.2839455306529999 0.0 0.0 -1.0 0.07100096344947815 0.7109781503677368 0 1.0 0 0.0 0 0.0 0 0.0 -1.1366461515426636 0.08324170112609863 -0.2839455306529999 0.0 0.0 -1.0 0.07295101881027222 0.7045143842697144 0 1.0 0 0.0 0 0.0 0 0.0 -1.245867371559143 0.07437929511070251 -0.2839455306529999 0.0 0.0 -1.0 0.13702672719955444 0.659500241279602 0 1.0 0 0.0 0 0.0 0 0.0 -1.2424691915512085 0.08667618036270142 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.13713571429252625 0.6726433038711548 0 1.0 0 0.0 0 0.0 0 0.0 -1.1366461515426636 0.08324170112609863 -0.2839455306529999 0.0 0.0 -1.0 0.07295101881027222 0.7045143842697144 0 1.0 0 0.0 0 0.0 0 0.0 -1.245867371559143 0.07437929511070251 -0.2839455306529999 0.0 0.0 -1.0 0.13702672719955444 0.659500241279602 0 1.0 0 0.0 0 0.0 0 0.0 -1.1366461515426636 0.08324170112609863 -0.2839455306529999 0.0 0.0 -1.0 0.07295101881027222 0.7045143842697144 0 1.0 0 0.0 0 0.0 0 0.0 -1.139765739440918 0.07764601707458496 -0.2839455306529999 0.0 0.0 -1.0 0.07459104061126709 0.6976232528686523 0 1.0 0 0.0 0 0.0 0 0.0 -1.245867371559143 0.07437929511070251 -0.2839455306529999 0.0 0.0 -1.0 0.13702672719955444 0.659500241279602 0 1.0 0 0.0 0 0.0 0 0.0 -1.139765739440918 0.07764601707458496 -0.2839455306529999 0.0 0.0 -1.0 0.07459104061126709 0.6976232528686523 0 1.0 0 0.0 0 0.0 0 0.0 -1.14255690574646 0.07166844606399536 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07592976093292236 0.6903005838394165 0 1.0 0 0.0 0 0.0 0 0.0 -0.9987156391143799 0.07015055418014526 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9731119275093079 0.6922006011009216 0 1.0 0 0.0 0 0.0 0 0.0 -1.0014448165893555 0.07659512758255005 -0.2839455306529999 0.0 0.0 -1.0 0.9746454954147339 0.6996514797210693 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.934088408946991 0.4341752529144287 0 1.0 0 0.0 0 0.0 0 0.0 -1.2486475706100464 0.06145240366458893 -0.2839455306529999 0.0 0.0 -1.0 0.13654586672782898 0.6457922458648682 0 1.0 0 0.0 0 0.0 0 0.0 -1.245867371559143 0.07437929511070251 -0.2839455306529999 0.0 0.0 -1.0 0.13702672719955444 0.659500241279602 0 1.0 0 0.0 0 0.0 0 0.0 -1.14255690574646 0.07166844606399536 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07592976093292236 0.6903005838394165 0 1.0 0 0.0 0 0.0 0 0.0 -1.2486475706100464 0.06145240366458893 -0.2839455306529999 0.0 0.0 -1.0 0.13654586672782898 0.6457922458648682 0 1.0 0 0.0 0 0.0 0 0.0 -1.14255690574646 0.07166844606399536 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07592976093292236 0.6903005838394165 0 1.0 0 0.0 0 0.0 0 0.0 -1.1450196504592896 0.06530898809432983 -0.2839455306529999 0.0 0.0 -1.0 0.07697618007659912 0.6825403571128845 0 1.0 0 0.0 0 0.0 0 0.0 -0.9963076114654541 0.06320734322071075 -0.2839455306529999 0.0 0.0 -1.0 0.9718380570411682 0.6841946840286255 0 1.0 0 0.0 0 0.0 0 0.0 -0.9987156391143799 0.07015055418014526 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9731119275093079 0.6922006011009216 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.934088408946991 0.4341752529144287 0 1.0 0 0.0 0 0.0 0 0.0 -1.2486475706100464 0.06145240366458893 -0.2839455306529999 0.0 0.0 -1.0 0.13654586672782898 0.6457922458648682 0 1.0 0 0.0 0 0.0 0 0.0 -1.1450196504592896 0.06530898809432983 -0.2839455306529999 0.0 0.0 -1.0 0.07697618007659912 0.6825403571128845 0 1.0 0 0.0 0 0.0 0 0.0 -1.1471540927886963 0.05856764316558838 -0.2839455306529999 0.0 0.0 -1.0 0.07773932814598083 0.6743353605270386 0 1.0 0 0.0 0 0.0 0 0.0 -0.9942206144332886 0.05576547980308533 -0.2839455306529999 0.0 0.0 -1.0 0.9708145260810852 0.6756221055984497 0 1.0 0 0.0 0 0.0 0 0.0 -0.9963076114654541 0.06320734322071075 -0.2839455306529999 0.0 0.0 -1.0 0.9718380570411682 0.6841946840286255 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.934088408946991 0.4341752529144287 0 1.0 0 0.0 0 0.0 0 0.0 -1.250809907913208 0.047895535826683044 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.1357092559337616 0.6314922571182251 0 1.0 0 0.0 0 0.0 0 0.0 -1.2486475706100464 0.06145240366458893 -0.2839455306529999 0.0 0.0 -1.0 0.13654586672782898 0.6457922458648682 0 1.0 0 0.0 0 0.0 0 0.0 -1.1471540927886963 0.05856764316558838 -0.2839455306529999 0.0 0.0 -1.0 0.07773932814598083 0.6743353605270386 0 1.0 0 0.0 0 0.0 0 0.0 -1.250809907913208 0.047895535826683044 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.1357092559337616 0.6314922571182251 0 1.0 0 0.0 0 0.0 0 0.0 -1.1471540927886963 0.05856764316558838 -0.2839455306529999 0.0 0.0 -1.0 0.07773932814598083 0.6743353605270386 0 1.0 0 0.0 0 0.0 0 0.0 -1.1489601135253906 0.051444411277770996 -0.2839455306529999 0.0 0.0 -1.0 0.07822781801223755 0.6656776666641235 0 1.0 0 0.0 0 0.0 0 0.0 -0.9924546480178833 0.047824978828430176 -0.2839455306529999 0.0 0.0 -1.0 0.9700321555137634 0.6664710640907288 0 1.0 0 0.0 0 0.0 0 0.0 -0.9942206144332886 0.05576547980308533 -0.2839455306529999 0.0 0.0 -1.0 0.9708145260810852 0.6756221055984497 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.934088408946991 0.4341752529144287 0 1.0 0 0.0 0 0.0 0 0.0 -1.250809907913208 0.047895535826683044 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.1357092559337616 0.6314922571182251 0 1.0 0 0.0 0 0.0 0 0.0 -1.1489601135253906 0.051444411277770996 -0.2839455306529999 0.0 0.0 -1.0 0.07822781801223755 0.6656776666641235 0 1.0 0 0.0 0 0.0 0 0.0 -1.150437831878662 0.04393930733203888 -0.2839455306529999 0.0 0.0 -1.0 0.07845044136047363 0.65655916929245 0 1.0 0 0.0 0 0.0 0 0.0 -1.2523545026779175 0.03370867669582367 -0.2839455306529999 0.0 0.0 -1.0 0.13453033566474915 0.6165791153907776 0 1.0 0 0.0 0 0.0 0 0.0 -1.250809907913208 0.047895535826683044 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.1357092559337616 0.6314922571182251 0 1.0 0 0.0 0 0.0 0 0.0 -1.150437831878662 0.04393930733203888 -0.2839455306529999 0.0 0.0 -1.0 0.07845044136047363 0.65655916929245 0 1.0 0 0.0 0 0.0 0 0.0 -0.9910098314285278 0.0393858402967453 -0.2839455306529999 0.0 0.0 -1.0 0.9694821834564209 0.656730055809021 0 1.0 0 0.0 0 0.0 0 0.0 -0.9924546480178833 0.047824978828430176 -0.2839455306529999 0.0 0.0 -1.0 0.9700321555137634 0.6664710640907288 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.934088408946991 0.4341752529144287 0 1.0 0 0.0 0 0.0 0 0.0 -1.2523545026779175 0.03370867669582367 -0.2839455306529999 0.0 0.0 -1.0 0.13453033566474915 0.6165791153907776 0 1.0 0 0.0 0 0.0 0 0.0 -1.150437831878662 0.04393930733203888 -0.2839455306529999 0.0 0.0 -1.0 0.07845044136047363 0.65655916929245 0 1.0 0 0.0 0 0.0 0 0.0 -1.1515871286392212 0.036052316427230835 -0.2839455306529999 0.0 0.0 -1.0 0.0784153938293457 0.6469727158546448 0 1.0 0 0.0 0 0.0 0 0.0 -0.9898860454559326 0.0304480642080307 -0.2839455306529999 0.0 0.0 -1.0 0.9691557884216309 0.6463892459869385 0 1.0 0 0.0 0 0.0 0 0.0 -0.9910098314285278 0.0393858402967453 -0.2839455306529999 0.0 0.0 -1.0 0.9694821834564209 0.656730055809021 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.934088408946991 0.4341752529144287 0 1.0 0 0.0 0 0.0 0 0.0 -1.2523545026779175 0.03370867669582367 -0.2839455306529999 0.0 0.0 -1.0 0.13453033566474915 0.6165791153907776 0 1.0 0 0.0 0 0.0 0 0.0 -1.1515871286392212 0.036052316427230835 -0.2839455306529999 0.0 0.0 -1.0 0.0784153938293457 0.6469727158546448 0 1.0 0 0.0 0 0.0 0 0.0 -1.1524080038070679 0.027783438563346863 -0.2839455306529999 0.0 0.0 -1.0 0.0781308114528656 0.6369128227233887 0 1.0 0 0.0 0 0.0 0 0.0 -1.2532812356948853 0.018891841173171997 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.13302001357078552 0.6010407209396362 0 1.0 0 0.0 0 0.0 0 0.0 -1.2523545026779175 0.03370867669582367 -0.2839455306529999 0.0 0.0 -1.0 0.13453033566474915 0.6165791153907776 0 1.0 0 0.0 0 0.0 0 0.0 -1.1524080038070679 0.027783438563346863 -0.2839455306529999 0.0 0.0 -1.0 0.0781308114528656 0.6369128227233887 0 1.0 0 0.0 0 0.0 0 0.0 -0.9890834093093872 0.021011650562286377 -0.2839455306529999 0.0 0.0 -1.0 0.9690446853637695 0.6354416608810425 0 1.0 0 0.0 0 0.0 0 0.0 -0.9898860454559326 0.0304480642080307 -0.2839455306529999 0.0 0.0 -1.0 0.9691557884216309 0.6463892459869385 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.934088408946991 0.4341752529144287 0 1.0 0 0.0 0 0.0 0 0.0 -1.2532812356948853 0.018891841173171997 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.13302001357078552 0.6010407209396362 0 1.0 0 0.0 0 0.0 0 0.0 -1.1524080038070679 0.027783438563346863 -0.2839455306529999 0.0 0.0 -1.0 0.0781308114528656 0.6369128227233887 0 1.0 0 0.0 0 0.0 0 0.0 -1.1529005765914917 0.019132673740386963 -0.2839455306529999 0.0 0.0 -1.0 0.0776045024394989 0.6263766288757324 0 1.0 0 0.0 0 0.0 0 0.0 -0.988601803779602 0.011076599359512329 -0.2839455306529999 0.0 0.0 -1.0 0.9691407680511475 0.6238844990730286 0 1.0 0 0.0 0 0.0 0 0.0 -0.9890834093093872 0.021011650562286377 -0.2839455306529999 0.0 0.0 -1.0 0.9690446853637695 0.6354416608810425 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.934088408946991 0.4341752529144287 0 1.0 0 0.0 0 0.0 0 0.0 -1.2532812356948853 0.018891841173171997 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.13302001357078552 0.6010407209396362 0 1.0 0 0.0 0 0.0 0 0.0 -1.1529005765914917 0.019132673740386963 -0.2839455306529999 0.0 0.0 -1.0 0.0776045024394989 0.6263766288757324 0 1.0 0 0.0 0 0.0 0 0.0 -1.1530647277832031 0.010100007057189941 -0.2839455306529999 0.0 0.0 -1.0 0.07684415578842163 0.6153649091720581 0 1.0 0 0.0 0 0.0 0 0.0 -1.2535901069641113 0.0034450143575668335 -0.2839455306529999 0.0 0.0 -1.0 0.13118746876716614 0.5848770141601562 0 1.0 0 0.0 0 0.0 0 0.0 -1.2532812356948853 0.018891841173171997 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.13302001357078552 0.6010407209396362 0 1.0 0 0.0 0 0.0 0 0.0 -1.1530647277832031 0.010100007057189941 -0.2839455306529999 0.0 0.0 -1.0 0.07684415578842163 0.6153649091720581 0 1.0 0 0.0 0 0.0 0 0.0 -0.9884412288665771 0.0006429105997085571 -0.2839455306529999 0.0 0.0 -1.0 0.9694360494613647 0.6117208003997803 0 1.0 0 0.0 0 0.0 0 0.0 -0.988601803779602 0.011076599359512329 -0.2839455306529999 0.0 0.0 -1.0 0.9691407680511475 0.6238844990730286 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.934088408946991 0.4341752529144287 0 1.0 0 0.0 0 0.0 0 0.0 -1.2535901069641113 0.0034450143575668335 -0.2839455306529999 0.0 0.0 -1.0 0.13118746876716614 0.5848770141601562 0 1.0 0 0.0 0 0.0 0 0.0 -1.1530647277832031 0.010100007057189941 -0.2839455306529999 0.0 0.0 -1.0 0.07684415578842163 0.6153649091720581 0 1.0 0 0.0 0 0.0 0 0.0 -1.152950406074524 0.00040453672409057617 -0.2839455306529999 0.0 0.0 -1.0 0.07586252689361572 0.6035301685333252 0 1.0 0 0.0 0 0.0 0 0.0 -1.2532728910446167 -0.011683180928230286 -0.2839455306529999 0.0 0.0 -1.0 0.12915363907814026 0.5690999031066895 0 1.0 0 0.0 0 0.0 0 0.0 -1.2535901069641113 0.0034450143575668335 -0.2839455306529999 0.0 0.0 -1.0 0.13118746876716614 0.5848770141601562 0 1.0 0 0.0 0 0.0 0 0.0 -1.152950406074524 0.00040453672409057617 -0.2839455306529999 0.0 0.0 -1.0 0.07586252689361572 0.6035301685333252 0 1.0 0 0.0 0 0.0 0 0.0 -0.9886071681976318 -0.008732706308364868 -0.2839455306529999 0.0 0.0 -1.0 0.9698705673217773 0.6007810831069946 0 1.0 0 0.0 0 0.0 0 0.0 -0.9884412288665771 0.0006429105997085571 -0.2839455306529999 0.0 0.0 -1.0 0.9694360494613647 0.6117208003997803 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.934088408946991 0.4341752529144287 0 1.0 0 0.0 0 0.0 0 0.0 -1.2532728910446167 -0.011683180928230286 -0.2839455306529999 0.0 0.0 -1.0 0.12915363907814026 0.5690999031066895 0 1.0 0 0.0 0 0.0 0 0.0 -1.152950406074524 0.00040453672409057617 -0.2839455306529999 0.0 0.0 -1.0 0.07586252689361572 0.6035301685333252 0 1.0 0 0.0 0 0.0 0 0.0 -1.1526074409484863 -0.008833646774291992 -0.2839455306529999 0.0 0.0 -1.0 0.07480058073997498 0.5922513008117676 0 1.0 0 0.0 0 0.0 0 0.0 -0.9891033172607422 -0.017711833119392395 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9704671502113342 0.5903095006942749 0 1.0 0 0.0 0 0.0 0 0.0 -0.9886071681976318 -0.008732706308364868 -0.2839455306529999 0.0 0.0 -1.0 0.9698705673217773 0.6007810831069946 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.934088408946991 0.4341752529144287 0 1.0 0 0.0 0 0.0 0 0.0 -1.2532728910446167 -0.011683180928230286 -0.2839455306529999 0.0 0.0 -1.0 0.12915363907814026 0.5690999031066895 0 1.0 0 0.0 0 0.0 0 0.0 -1.1526074409484863 -0.008833646774291992 -0.2839455306529999 0.0 0.0 -1.0 0.07480058073997498 0.5922513008117676 0 1.0 0 0.0 0 0.0 0 0.0 -1.1520358324050903 -0.017614543437957764 -0.2839455306529999 0.0 0.0 -1.0 0.07365843653678894 0.5815540552139282 0 1.0 0 0.0 0 0.0 0 0.0 -1.2523205280303955 -0.026244625449180603 -0.2839455306529999 0.0 0.0 -1.0 0.12694236636161804 0.5540019273757935 0 1.0 0 0.0 0 0.0 0 0.0 -1.2532728910446167 -0.011683180928230286 -0.2839455306529999 0.0 0.0 -1.0 0.12915363907814026 0.5690999031066895 0 1.0 0 0.0 0 0.0 0 0.0 -1.1520358324050903 -0.017614543437957764 -0.2839455306529999 0.0 0.0 -1.0 0.07365843653678894 0.5815540552139282 0 1.0 0 0.0 0 0.0 0 0.0 -1.2523205280303955 -0.026244625449180603 -0.2839455306529999 0.0 0.0 -1.0 0.12694236636161804 0.5540019273757935 0 1.0 0 0.0 0 0.0 0 0.0 -1.1520358324050903 -0.017614543437957764 -0.2839455306529999 0.0 0.0 -1.0 0.07365843653678894 0.5815540552139282 0 1.0 0 0.0 0 0.0 0 0.0 -1.151235580444336 -0.02593815326690674 -0.2839455306529999 0.0 0.0 -1.0 0.07243585586547852 0.5714563131332397 0 1.0 0 0.0 0 0.0 0 0.0 -0.989930272102356 -0.026294484734535217 -0.2839455306529999 0.0 0.0 -1.0 0.9712231159210205 0.580313503742218 0 1.0 0 0.0 0 0.0 0 0.0 -0.9891033172607422 -0.017711833119392395 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9704671502113342 0.5903095006942749 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.934088408946991 0.4341752529144287 0 1.0 0 0.0 0 0.0 0 0.0 -1.2523205280303955 -0.026244625449180603 -0.2839455306529999 0.0 0.0 -1.0 0.12694236636161804 0.5540019273757935 0 1.0 0 0.0 0 0.0 0 0.0 -1.151235580444336 -0.02593815326690674 -0.2839455306529999 0.0 0.0 -1.0 0.07243585586547852 0.5714563131332397 0 1.0 0 0.0 0 0.0 0 0.0 -1.1502066850662231 -0.033804476261138916 -0.2839455306529999 0.0 0.0 -1.0 0.07113239169120789 0.5619699954986572 0 1.0 0 0.0 0 0.0 0 0.0 -1.2507333755493164 -0.04023931920528412 -0.2839455306529999 0.0 0.0 -1.0 0.12454873323440552 0.5396028161048889 0 1.0 0 0.0 0 0.0 0 0.0 -1.2523205280303955 -0.026244625449180603 -0.2839455306529999 0.0 0.0 -1.0 0.12694236636161804 0.5540019273757935 0 1.0 0 0.0 0 0.0 0 0.0 -1.1502066850662231 -0.033804476261138916 -0.2839455306529999 0.0 0.0 -1.0 0.07113239169120789 0.5619699954986572 0 1.0 0 0.0 0 0.0 0 0.0 -0.9910880327224731 -0.034480661153793335 -0.2839455306529999 0.0 0.0 -1.0 0.972136378288269 0.570796012878418 0 1.0 0 0.0 0 0.0 0 0.0 -0.989930272102356 -0.026294484734535217 -0.2839455306529999 0.0 0.0 -1.0 0.9712231159210205 0.580313503742218 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.934088408946991 0.4341752529144287 0 1.0 0 0.0 0 0.0 0 0.0 -1.2507333755493164 -0.04023931920528412 -0.2839455306529999 0.0 0.0 -1.0 0.12454873323440552 0.5396028161048889 0 1.0 0 0.0 0 0.0 0 0.0 -1.1502066850662231 -0.033804476261138916 -0.2839455306529999 0.0 0.0 -1.0 0.07113239169120789 0.5619699954986572 0 1.0 0 0.0 0 0.0 0 0.0 -1.148949146270752 -0.0412134975194931 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.06974729895591736 0.5531009435653687 0 1.0 0 0.0 0 0.0 0 0.0 -0.9925765991210938 -0.04227036237716675 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9732059240341187 0.5617566108703613 0 1.0 0 0.0 0 0.0 0 0.0 -0.9910880327224731 -0.034480661153793335 -0.2839455306529999 0.0 0.0 -1.0 0.972136378288269 0.570796012878418 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.934088408946991 0.4341752529144287 0 1.0 0 0.0 0 0.0 0 0.0 -1.2485114336013794 -0.053667277097702026 -0.2839455306529999 0.0 0.0 -1.0 0.12196633219718933 0.525911808013916 0 1.0 0 0.0 0 0.0 0 0.0 -1.2507333755493164 -0.04023931920528412 -0.2839455306529999 0.0 0.0 -1.0 0.12454873323440552 0.5396028161048889 0 1.0 0 0.0 0 0.0 0 0.0 -1.148949146270752 -0.0412134975194931 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.06974729895591736 0.5531009435653687 0 1.0 0 0.0 0 0.0 0 0.0 -1.2485114336013794 -0.053667277097702026 -0.2839455306529999 0.0 0.0 -1.0 0.12196633219718933 0.525911808013916 0 1.0 0 0.0 0 0.0 0 0.0 -1.148949146270752 -0.0412134975194931 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.06974729895591736 0.5531009435653687 0 1.0 0 0.0 0 0.0 0 0.0 -1.1474629640579224 -0.04816523194313049 -0.2839455306529999 0.0 0.0 -1.0 0.06827953457832336 0.5448507070541382 0 1.0 0 0.0 0 0.0 0 0.0 -0.9943959712982178 -0.04966357350349426 -0.2839455306529999 0.0 0.0 -1.0 0.9744312167167664 0.553192138671875 0 1.0 0 0.0 0 0.0 0 0.0 -0.9925765991210938 -0.04227036237716675 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9732059240341187 0.5617566108703613 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.934088408946991 0.4341752529144287 0 1.0 0 0.0 0 0.0 0 0.0 -1.2485114336013794 -0.053667277097702026 -0.2839455306529999 0.0 0.0 -1.0 0.12196633219718933 0.525911808013916 0 1.0 0 0.0 0 0.0 0 0.0 -1.1474629640579224 -0.04816523194313049 -0.2839455306529999 0.0 0.0 -1.0 0.06827953457832336 0.5448507070541382 0 1.0 0 0.0 0 0.0 0 0.0 -1.1457481384277344 -0.054659679532051086 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.06672787666320801 0.5372171401977539 0 1.0 0 0.0 0 0.0 0 0.0 -0.9965461492538452 -0.05666030943393707 -0.2839455306529999 0.0 0.0 -1.0 0.9758127927780151 0.5450972318649292 0 1.0 0 0.0 0 0.0 0 0.0 -0.9943959712982178 -0.04966357350349426 -0.2839455306529999 0.0 0.0 -1.0 0.9744312167167664 0.553192138671875 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.934088408946991 0.4341752529144287 0 1.0 0 0.0 0 0.0 0 0.0 -1.2456544637680054 -0.06652848422527313 -0.2839455306529999 0.0 0.0 -1.0 0.11918789148330688 0.5129293203353882 0 1.0 0 0.0 0 0.0 0 0.0 -1.2485114336013794 -0.053667277097702026 -0.2839455306529999 0.0 0.0 -1.0 0.12196633219718933 0.525911808013916 0 1.0 0 0.0 0 0.0 0 0.0 -1.1457481384277344 -0.054659679532051086 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.06672787666320801 0.5372171401977539 0 1.0 0 0.0 0 0.0 0 0.0 -1.2456544637680054 -0.06652848422527313 -0.2839455306529999 0.0 0.0 -1.0 0.11918789148330688 0.5129293203353882 0 1.0 0 0.0 0 0.0 0 0.0 -1.1457481384277344 -0.054659679532051086 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.06672787666320801 0.5372171401977539 0 1.0 0 0.0 0 0.0 0 0.0 -1.143804669380188 -0.06069684773683548 -0.2839455306529999 0.0 0.0 -1.0 0.0650908350944519 0.5301951169967651 0 1.0 0 0.0 0 0.0 0 0.0 -0.9990271329879761 -0.06326057016849518 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.977351725101471 0.53746497631073 0 1.0 0 0.0 0 0.0 0 0.0 -0.9965461492538452 -0.05666030943393707 -0.2839455306529999 0.0 0.0 -1.0 0.9758127927780151 0.5450972318649292 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.934088408946991 0.4341752529144287 0 1.0 0 0.0 0 0.0 0 0.0 -1.2456544637680054 -0.06652848422527313 -0.2839455306529999 0.0 0.0 -1.0 0.11918789148330688 0.5129293203353882 0 1.0 0 0.0 0 0.0 0 0.0 -1.143804669380188 -0.06069684773683548 -0.2839455306529999 0.0 0.0 -1.0 0.0650908350944519 0.5301951169967651 0 1.0 0 0.0 0 0.0 0 0.0 -1.1416325569152832 -0.06627672910690308 -0.2839455306529999 0.0 0.0 -1.0 0.06336680054664612 0.523777961730957 0 1.0 0 0.0 0 0.0 0 0.0 -1.0018389225006104 -0.06946435570716858 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.979049801826477 0.5302878022193909 0 1.0 0 0.0 0 0.0 0 0.0 -0.9990271329879761 -0.06326057016849518 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.977351725101471 0.53746497631073 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.934088408946991 0.4341752529144287 0 1.0 0 0.0 0 0.0 0 0.0 -1.2456544637680054 -0.06652848422527313 -0.2839455306529999 0.0 0.0 -1.0 0.11918789148330688 0.5129293203353882 0 1.0 0 0.0 0 0.0 0 0.0 -1.1416325569152832 -0.06627672910690308 -0.2839455306529999 0.0 0.0 -1.0 0.06336680054664612 0.523777961730957 0 1.0 0 0.0 0 0.0 0 0.0 -1.13923180103302 -0.07139932364225388 -0.2839455306529999 0.0 0.0 -1.0 0.06155392527580261 0.5179575085639954 0 1.0 0 0.0 0 0.0 0 0.0 -1.242162823677063 -0.07882294803857803 -0.2839455306529999 0.0 0.0 -1.0 0.11620524525642395 0.5006495714187622 0 1.0 0 0.0 0 0.0 0 0.0 -1.2456544637680054 -0.06652848422527313 -0.2839455306529999 0.0 0.0 -1.0 0.11918789148330688 0.5129293203353882 0 1.0 0 0.0 0 0.0 0 0.0 -1.13923180103302 -0.07139932364225388 -0.2839455306529999 0.0 0.0 -1.0 0.06155392527580261 0.5179575085639954 0 1.0 0 0.0 0 0.0 0 0.0 -1.004981517791748 -0.07527166604995728 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9809092879295349 0.5235574245452881 0 1.0 0 0.0 0 0.0 0 0.0 -1.0018389225006104 -0.06946435570716858 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.979049801826477 0.5302878022193909 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.934088408946991 0.4341752529144287 0 1.0 0 0.0 0 0.0 0 0.0 -1.242162823677063 -0.07882294803857803 -0.2839455306529999 0.0 0.0 -1.0 0.11620524525642395 0.5006495714187622 0 1.0 0 0.0 0 0.0 0 0.0 -1.13923180103302 -0.07139932364225388 -0.2839455306529999 0.0 0.0 -1.0 0.06155392527580261 0.5179575085639954 0 1.0 0 0.0 0 0.0 0 0.0 -1.1366022825241089 -0.07606462389230728 -0.2839455306529999 0.0 0.0 -1.0 0.05965006351470947 0.5127252340316772 0 1.0 0 0.0 0 0.0 0 0.0 -1.0084549188613892 -0.08068249374628067 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9829331636428833 0.5172655582427979 0 1.0 0 0.0 0 0.0 0 0.0 -1.004981517791748 -0.07527166604995728 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9809092879295349 0.5235574245452881 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.934088408946991 0.4341752529144287 0 1.0 0 0.0 0 0.0 0 0.0 -1.242162823677063 -0.07882294803857803 -0.2839455306529999 0.0 0.0 -1.0 0.11620524525642395 0.5006495714187622 0 1.0 0 0.0 0 0.0 0 0.0 -1.1366022825241089 -0.07606462389230728 -0.2839455306529999 0.0 0.0 -1.0 0.05965006351470947 0.5127252340316772 0 1.0 0 0.0 0 0.0 0 0.0 -1.132501244544983 -0.08221854269504547 -0.2839455306529999 0.0 0.0 -1.0 0.05678075551986694 0.505921483039856 0 1.0 0 0.0 0 0.0 0 0.0 -1.2380362749099731 -0.09055066853761673 -0.2839455306529999 0.0 0.0 -1.0 0.11300912499427795 0.48906201124191284 0 1.0 0 0.0 0 0.0 0 0.0 -1.242162823677063 -0.07882294803857803 -0.2839455306529999 0.0 0.0 -1.0 0.11620524525642395 0.5006495714187622 0 1.0 0 0.0 0 0.0 0 0.0 -1.132501244544983 -0.08221854269504547 -0.2839455306529999 0.0 0.0 -1.0 0.05678075551986694 0.505921483039856 0 1.0 0 0.0 0 0.0 0 0.0 -1.0122591257095337 -0.08569684624671936 -0.2839455306529999 0.0 0.0 -1.0 0.9851247668266296 0.5114044547080994 0 1.0 0 0.0 0 0.0 0 0.0 -1.0084549188613892 -0.08068249374628067 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9829331636428833 0.5172655582427979 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.934088408946991 0.4341752529144287 0 1.0 0 0.0 0 0.0 0 0.0 -1.2380362749099731 -0.09055066853761673 -0.2839455306529999 0.0 0.0 -1.0 0.11300912499427795 0.48906201124191284 0 1.0 0 0.0 0 0.0 0 0.0 -1.132501244544983 -0.08221854269504547 -0.2839455306529999 0.0 0.0 -1.0 0.05678075551986694 0.505921483039856 0 1.0 0 0.0 0 0.0 0 0.0 -1.1281375885009766 -0.0878373384475708 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.05381375551223755 0.4998077154159546 0 1.0 0 0.0 0 0.0 0 0.0 -1.0162993669509888 -0.09031227976083755 -0.2839455306529999 0.0 0.0 -1.0 0.9874353408813477 0.5059763193130493 0 1.0 0 0.0 0 0.0 0 0.0 -1.0122591257095337 -0.08569684624671936 -0.2839455306529999 0.0 0.0 -1.0 0.9851247668266296 0.5114044547080994 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.934088408946991 0.4341752529144287 0 1.0 0 0.0 0 0.0 0 0.0 -1.2380362749099731 -0.09055066853761673 -0.2839455306529999 0.0 0.0 -1.0 0.11300912499427795 0.48906201124191284 0 1.0 0 0.0 0 0.0 0 0.0 -1.1281375885009766 -0.0878373384475708 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.05381375551223755 0.4998077154159546 0 1.0 0 0.0 0 0.0 0 0.0 -1.1235111951828003 -0.09292101114988327 -0.2839455306529999 0.0 0.0 -1.0 0.05074578523635864 0.49437379837036133 0 1.0 0 0.0 0 0.0 0 0.0 -1.0204806327819824 -0.09452638030052185 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.989815354347229 0.5009863376617432 0 1.0 0 0.0 0 0.0 0 0.0 -1.0162993669509888 -0.09031227976083755 -0.2839455306529999 0.0 0.0 -1.0 0.9874353408813477 0.5059763193130493 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.934088408946991 0.4341752529144287 0 1.0 0 0.0 0 0.0 0 0.0 -1.2332748174667358 -0.10171164572238922 -0.2839455306529999 0.0 0.0 -1.0 0.1095895767211914 0.47815340757369995 0 1.0 0 0.0 0 0.0 0 0.0 -1.2380362749099731 -0.09055066853761673 -0.2839455306529999 0.0 0.0 -1.0 0.11300912499427795 0.48906201124191284 0 1.0 0 0.0 0 0.0 0 0.0 -1.1235111951828003 -0.09292101114988327 -0.2839455306529999 0.0 0.0 -1.0 0.05074578523635864 0.49437379837036133 0 1.0 0 0.0 0 0.0 0 0.0 -1.2332748174667358 -0.10171164572238922 -0.2839455306529999 0.0 0.0 -1.0 0.1095895767211914 0.47815340757369995 0 1.0 0 0.0 0 0.0 0 0.0 -1.1235111951828003 -0.09292101114988327 -0.2839455306529999 0.0 0.0 -1.0 0.05074578523635864 0.49437379837036133 0 1.0 0 0.0 0 0.0 0 0.0 -1.118622064590454 -0.09746956080198288 -0.2839455306529999 0.0 0.0 -1.0 0.04757365584373474 0.48960989713668823 0 1.0 0 0.0 0 0.0 0 0.0 -1.0248029232025146 -0.09833913296461105 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9922680258750916 0.4964311718940735 0 1.0 0 0.0 0 0.0 0 0.0 -1.0204806327819824 -0.09452638030052185 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.989815354347229 0.5009863376617432 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.934088408946991 0.4341752529144287 0 1.0 0 0.0 0 0.0 0 0.0 -1.2332748174667358 -0.10171164572238922 -0.2839455306529999 0.0 0.0 -1.0 0.1095895767211914 0.47815340757369995 0 1.0 0 0.0 0 0.0 0 0.0 -1.118622064590454 -0.09746956080198288 -0.2839455306529999 0.0 0.0 -1.0 0.04757365584373474 0.48960989713668823 0 1.0 0 0.0 0 0.0 0 0.0 -1.1134703159332275 -0.10148298740386963 -0.2839455306529999 0.0 0.0 -1.0 0.044294536113739014 0.48550617694854736 0 1.0 0 0.0 0 0.0 0 0.0 -1.029266357421875 -0.10175054520368576 -0.2839455306529999 0.0 0.0 -1.0 0.9947965145111084 0.4923076033592224 0 1.0 0 0.0 0 0.0 0 0.0 -1.0248029232025146 -0.09833913296461105 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9922680258750916 0.4964311718940735 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 -0.2839455306529999 0.0 0.0 -1.0 0.9702714085578918 0.46846210956573486 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 -0.2839455306529999 0.0 0.0 -1.0 0.9702714085578918 0.46846210956573486 0 1.0 0 0.0 0 0.0 0 0.0 -1.0248029232025146 -0.09833913296461105 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9922680258750916 0.4964311718940735 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.934088408946991 0.4341752529144287 0 1.0 0 0.0 0 0.0 0 0.0 -1.2332748174667358 -0.10171164572238922 -0.2839455306529999 0.0 0.0 -1.0 0.1095895767211914 0.47815340757369995 0 1.0 0 0.0 0 0.0 0 0.0 -1.1134703159332275 -0.10148298740386963 -0.2839455306529999 0.0 0.0 -1.0 0.044294536113739014 0.48550617694854736 0 1.0 0 0.0 0 0.0 0 0.0 -1.108055830001831 -0.10496129095554352 -0.2839455306529999 0.0 0.0 -1.0 0.04090547561645508 0.4820537567138672 0 1.0 0 0.0 0 0.0 0 0.0 -1.2278786897659302 -0.11230587214231491 -0.2839455306529999 0.0 0.0 -1.0 0.10593611001968384 0.467909574508667 0 1.0 0 0.0 0 0.0 0 0.0 -1.2332748174667358 -0.10171164572238922 -0.2839455306529999 0.0 0.0 -1.0 0.1095895767211914 0.47815340757369995 0 1.0 0 0.0 0 0.0 0 0.0 -1.108055830001831 -0.10496129095554352 -0.2839455306529999 0.0 0.0 -1.0 0.04090547561645508 0.4820537567138672 0 1.0 0 0.0 0 0.0 0 0.0 -1.033870816230774 -0.10476061701774597 -0.2839455306529999 0.0 0.0 -1.0 0.9974039793014526 0.4886128902435303 0 1.0 0 0.0 0 0.0 0 0.0 -1.029266357421875 -0.10175054520368576 -0.2839455306529999 0.0 0.0 -1.0 0.9947965145111084 0.4923076033592224 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 -0.2839455306529999 0.0 0.0 -1.0 0.9702714085578918 0.46846210956573486 0 1.0 0 0.0 0 0.0 0 0.0 -1.038616418838501 -0.10736934840679169 -0.2839455306529999 0.0 0.0 -1.0 1.000093698501587 0.4853445887565613 0 1.0 0 0.0 0 0.0 0 0.0 -1.033870816230774 -0.10476061701774597 -0.2839455306529999 0.0 0.0 -1.0 0.9974039793014526 0.4886128902435303 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 -0.2839455306529999 0.0 0.0 -1.0 0.9702714085578918 0.46846210956573486 0 1.0 0 0.0 0 0.0 0 0.0 -1.2278786897659302 -0.11230587214231491 -0.2839455306529999 0.0 0.0 -1.0 0.10593611001968384 0.467909574508667 0 1.0 0 0.0 0 0.0 0 0.0 -1.108055830001831 -0.10496129095554352 -0.2839455306529999 0.0 0.0 -1.0 0.04090547561645508 0.4820537567138672 0 1.0 0 0.0 0 0.0 0 0.0 -1.1023786067962646 -0.10790447145700455 -0.2839455306529999 0.0 0.0 -1.0 0.03740385174751282 0.4792447090148926 0 1.0 0 0.0 0 0.0 0 0.0 -1.0435030460357666 -0.10957673192024231 -0.2839455306529999 0.0 0.0 -1.0 1.0028687715530396 0.48250114917755127 0 1.0 0 0.0 0 0.0 0 0.0 -1.038616418838501 -0.10736934840679169 -0.2839455306529999 0.0 0.0 -1.0 1.000093698501587 0.4853445887565613 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 -0.2839455306529999 0.0 0.0 -1.0 0.9702714085578918 0.46846210956573486 0 1.0 0 0.0 0 0.0 0 0.0 -1.2278786897659302 -0.11230587214231491 -0.2839455306529999 0.0 0.0 -1.0 0.10593611001968384 0.467909574508667 0 1.0 0 0.0 0 0.0 0 0.0 -1.1023786067962646 -0.10790447145700455 -0.2839455306529999 0.0 0.0 -1.0 0.03740385174751282 0.4792447090148926 0 1.0 0 0.0 0 0.0 0 0.0 -1.0964387655258179 -0.11031252890825272 -0.2839455306529999 0.0 0.0 -1.0 0.03378739953041077 0.47707217931747437 0 1.0 0 0.0 0 0.0 0 0.0 -1.0485308170318604 -0.11138277500867844 -0.2839455306529999 0.0 0.0 -1.0 1.005732536315918 0.48008131980895996 0 1.0 0 0.0 0 0.0 0 0.0 -1.0435030460357666 -0.10957673192024231 -0.2839455306529999 0.0 0.0 -1.0 1.0028687715530396 0.48250114917755127 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 -0.2839455306529999 0.0 0.0 -1.0 0.9702714085578918 0.46846210956573486 0 1.0 0 0.0 0 0.0 0 0.0 -1.2278786897659302 -0.11230587214231491 -0.2839455306529999 0.0 0.0 -1.0 0.10593611001968384 0.467909574508667 0 1.0 0 0.0 0 0.0 0 0.0 -1.0964387655258179 -0.11031252890825272 -0.2839455306529999 0.0 0.0 -1.0 0.03378739953041077 0.47707217931747437 0 1.0 0 0.0 0 0.0 0 0.0 -1.0902361869812012 -0.11218546330928802 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.030053943395614624 0.47553038597106934 0 1.0 0 0.0 0 0.0 0 0.0 -1.0536996126174927 -0.11278747767210007 -0.2839455306529999 0.0 0.0 -1.0 1.0086880922317505 0.47808516025543213 0 1.0 0 0.0 0 0.0 0 0.0 -1.0485308170318604 -0.11138277500867844 -0.2839455306529999 0.0 0.0 -1.0 1.005732536315918 0.48008131980895996 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 -0.2839455306529999 0.0 0.0 -1.0 0.9702714085578918 0.46846210956573486 0 1.0 0 0.0 0 0.0 0 0.0 -1.2278786897659302 -0.11230587214231491 -0.2839455306529999 0.0 0.0 -1.0 0.10593611001968384 0.467909574508667 0 1.0 0 0.0 0 0.0 0 0.0 -1.0902361869812012 -0.11218546330928802 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.030053943395614624 0.47553038597106934 0 1.0 0 0.0 0 0.0 0 0.0 -1.0837708711624146 -0.11352327466011047 -0.2839455306529999 0.0 0.0 -1.0 0.026201844215393066 0.4746147394180298 0 1.0 0 0.0 0 0.0 0 0.0 -1.2218475341796875 -0.1223333552479744 -0.2839455306529999 0.0 0.0 -1.0 0.10203734040260315 0.4583163857460022 0 1.0 0 0.0 0 0.0 0 0.0 -1.2278786897659302 -0.11230587214231491 -0.2839455306529999 0.0 0.0 -1.0 0.10593611001968384 0.467909574508667 0 1.0 0 0.0 0 0.0 0 0.0 -1.0837708711624146 -0.11352327466011047 -0.2839455306529999 0.0 0.0 -1.0 0.026201844215393066 0.4746147394180298 0 1.0 0 0.0 0 0.0 0 0.0 -1.0590094327926636 -0.1137908324599266 -0.2839455306529999 0.0 0.0 -1.0 1.0117387771606445 0.47651296854019165 0 1.0 0 0.0 0 0.0 0 0.0 -1.0536996126174927 -0.11278747767210007 -0.2839455306529999 0.0 0.0 -1.0 1.0086880922317505 0.47808516025543213 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 -0.2839455306529999 0.0 0.0 -1.0 0.9702714085578918 0.46846210956573486 0 1.0 0 0.0 0 0.0 0 0.0 -1.2218475341796875 -0.1223333552479744 -0.2839455306529999 0.0 0.0 -1.0 0.10203734040260315 0.4583163857460022 0 1.0 0 0.0 0 0.0 0 0.0 -1.0837708711624146 -0.11352327466011047 -0.2839455306529999 0.0 0.0 -1.0 0.026201844215393066 0.4746147394180298 0 1.0 0 0.0 0 0.0 0 0.0 -1.0770429372787476 -0.11432596296072006 -0.2839455306529999 0.0 0.0 -1.0 0.022230058908462524 0.4743214249610901 0 1.0 0 0.0 0 0.0 0 0.0 -1.0644603967666626 -0.11439284682273865 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 1.0148876905441284 0.4753662943840027 0 1.0 0 0.0 0 0.0 0 0.0 -1.0590094327926636 -0.1137908324599266 -0.2839455306529999 0.0 0.0 -1.0 1.0117387771606445 0.47651296854019165 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 -0.2839455306529999 0.0 0.0 -1.0 0.9702714085578918 0.46846210956573486 0 1.0 0 0.0 0 0.0 0 0.0 -1.2218475341796875 -0.1223333552479744 -0.2839455306529999 0.0 0.0 -1.0 0.10203734040260315 0.4583163857460022 0 1.0 0 0.0 0 0.0 0 0.0 -1.0770429372787476 -0.11432596296072006 -0.2839455306529999 0.0 0.0 -1.0 0.022230058908462524 0.4743214249610901 0 1.0 0 0.0 0 0.0 0 0.0 -1.0700523853302002 -0.1145935207605362 -0.2839455306529999 0.0 0.0 -1.0 0.01813778281211853 0.4746472239494324 0 1.0 0 0.0 0 0.0 0 0.0 -1.0700523853302002 -0.1145935207605362 -0.2839455306529999 0.0 0.0 -1.0 1.018137812614441 0.4746472239494324 0 1.0 0 0.0 0 0.0 0 0.0 -1.0644603967666626 -0.11439284682273865 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 1.0148876905441284 0.4753662943840027 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 -0.2839455306529999 0.0 0.0 -1.0 0.9702714085578918 0.46846210956573486 0 1.0 0 0.0 0 0.0 0 0.0 -1.2218475341796875 -0.1223333552479744 -0.2839455306529999 0.0 0.0 -1.0 1.1020373106002808 0.4583163857460022 0 1.0 0 0.0 0 0.0 0 0.0 -1.0700523853302002 -0.1145935207605362 -0.2839455306529999 0.0 0.0 -1.0 1.018137812614441 0.4746472239494324 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 -0.2839455306529999 0.0 0.0 -1.0 0.9702714085578918 0.46846210956573486 0 1.0 0 0.0 0 0.0 0 0.0 -1.215181589126587 -0.13179409503936768 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.09788179397583 0.44936132431030273 0 1.0 0 0.0 0 0.0 0 0.0 -1.2218475341796875 -0.1223333552479744 -0.2839455306529999 0.0 0.0 -1.0 1.1020373106002808 0.4583163857460022 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 -0.2839455306529999 0.0 0.0 -1.0 0.9702714085578918 0.46846210956573486 0 1.0 0 0.0 0 0.0 0 0.0 -1.215181589126587 -0.13179409503936768 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.09788179397583 0.44936132431030273 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 -0.2839455306529999 0.0 0.0 -1.0 0.9702714085578918 0.46846210956573486 0 1.0 0 0.0 0 0.0 0 0.0 -0.985637903213501 -0.13450376689434052 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9723237752914429 0.46296828985214233 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.9718600511550903 0.41916149854660034 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 -0.2839455306529999 0.0 0.0 -1.0 0.9702714085578918 0.46846210956573486 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.934088408946991 0.4341752529144287 0 1.0 0 0.0 0 0.0 0 0.0 -1.2078808546066284 -0.14068809151649475 -0.2839455306529999 0.0 0.0 -1.0 1.0934579372406006 0.44103407859802246 0 1.0 0 0.0 0 0.0 0 0.0 -1.215181589126587 -0.13179409503936768 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.09788179397583 0.44936132431030273 0 1.0 0 0.0 0 0.0 0 0.0 -0.985637903213501 -0.13450376689434052 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9723237752914429 0.46296828985214233 0 1.0 0 0.0 0 0.0 0 0.0 -1.2078808546066284 -0.14068809151649475 -0.2839455306529999 0.0 0.0 -1.0 1.0934579372406006 0.44103407859802246 0 1.0 0 0.0 0 0.0 0 0.0 -0.985637903213501 -0.13450376689434052 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9723237752914429 0.46296828985214233 0 1.0 0 0.0 0 0.0 0 0.0 -0.9896038770675659 -0.13947677612304688 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9744249582290649 0.45770955085754395 0 1.0 0 0.0 0 0.0 0 0.0 -1.2078808546066284 -0.14068809151649475 -0.2839455306529999 0.0 0.0 -1.0 1.0934579372406006 0.44103407859802246 0 1.0 0 0.0 0 0.0 0 0.0 -0.9896038770675659 -0.13947677612304688 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9744249582290649 0.45770955085754395 0 1.0 0 0.0 0 0.0 0 0.0 -0.9936841726303101 -0.14422355592250824 -0.2839455306529999 0.0 0.0 -1.0 0.9765768051147461 0.45268338918685913 0 1.0 0 0.0 0 0.0 0 0.0 -1.2001348733901978 -0.14893993735313416 -0.2839455306529999 0.0 0.0 -1.0 1.0888556241989136 0.4333972930908203 0 1.0 0 0.0 0 0.0 0 0.0 -1.2078808546066284 -0.14068809151649475 -0.2839455306529999 0.0 0.0 -1.0 1.0934579372406006 0.44103407859802246 0 1.0 0 0.0 0 0.0 0 0.0 -0.9936841726303101 -0.14422355592250824 -0.2839455306529999 0.0 0.0 -1.0 0.9765768051147461 0.45268338918685913 0 1.0 0 0.0 0 0.0 0 0.0 -1.2001348733901978 -0.14893993735313416 -0.2839455306529999 0.0 0.0 -1.0 1.0888556241989136 0.4333972930908203 0 1.0 0 0.0 0 0.0 0 0.0 -0.9936841726303101 -0.14422355592250824 -0.2839455306529999 0.0 0.0 -1.0 0.9765768051147461 0.45268338918685913 0 1.0 0 0.0 0 0.0 0 0.0 -0.9978787899017334 -0.148744136095047 -0.2839455306529999 0.0 0.0 -1.0 0.9787807464599609 0.447887122631073 0 1.0 0 0.0 0 0.0 0 0.0 -1.2001348733901978 -0.14893993735313416 -0.2839455306529999 0.0 0.0 -1.0 1.0888556241989136 0.4333972930908203 0 1.0 0 0.0 0 0.0 0 0.0 -0.9978787899017334 -0.148744136095047 -0.2839455306529999 0.0 0.0 -1.0 0.9787807464599609 0.447887122631073 0 1.0 0 0.0 0 0.0 0 0.0 -1.002187728881836 -0.15303850173950195 -0.2839455306529999 0.0 0.0 -1.0 0.9810384511947632 0.44331806898117065 0 1.0 0 0.0 0 0.0 0 0.0 -1.1921335458755493 -0.15647423267364502 -0.2839455306529999 0.0 0.0 -1.0 1.084169626235962 0.4265134930610657 0 1.0 0 0.0 0 0.0 0 0.0 -1.2001348733901978 -0.14893993735313416 -0.2839455306529999 0.0 0.0 -1.0 1.0888556241989136 0.4333972930908203 0 1.0 0 0.0 0 0.0 0 0.0 -1.002187728881836 -0.15303850173950195 -0.2839455306529999 0.0 0.0 -1.0 0.9810384511947632 0.44331806898117065 0 1.0 0 0.0 0 0.0 0 0.0 -1.1921335458755493 -0.15647423267364502 -0.2839455306529999 0.0 0.0 -1.0 1.084169626235962 0.4265134930610657 0 1.0 0 0.0 0 0.0 0 0.0 -1.002187728881836 -0.15303850173950195 -0.2839455306529999 0.0 0.0 -1.0 0.9810384511947632 0.44331806898117065 0 1.0 0 0.0 0 0.0 0 0.0 -1.0066109895706177 -0.1571066677570343 -0.2839455306529999 0.0 0.0 -1.0 0.983351469039917 0.4389737844467163 0 1.0 0 0.0 0 0.0 0 0.0 -1.183876872062683 -0.16329097747802734 -0.2839455306529999 0.0 0.0 -1.0 1.0793944597244263 0.42037463188171387 0 1.0 0 0.0 0 0.0 0 0.0 -1.1921335458755493 -0.15647423267364502 -0.2839455306529999 0.0 0.0 -1.0 1.084169626235962 0.4265134930610657 0 1.0 0 0.0 0 0.0 0 0.0 -1.0066109895706177 -0.1571066677570343 -0.2839455306529999 0.0 0.0 -1.0 0.983351469039917 0.4389737844467163 0 1.0 0 0.0 0 0.0 0 0.0 -1.183876872062683 -0.16329097747802734 -0.2839455306529999 0.0 0.0 -1.0 1.0793944597244263 0.42037463188171387 0 1.0 0 0.0 0 0.0 0 0.0 -1.0066109895706177 -0.1571066677570343 -0.2839455306529999 0.0 0.0 -1.0 0.983351469039917 0.4389737844467163 0 1.0 0 0.0 0 0.0 0 0.0 -1.0111485719680786 -0.16094860434532166 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9857213497161865 0.4348520040512085 0 1.0 0 0.0 0 0.0 0 0.0 -1.183876872062683 -0.16329097747802734 -0.2839455306529999 0.0 0.0 -1.0 1.0793944597244263 0.42037463188171387 0 1.0 0 0.0 0 0.0 0 0.0 -1.0111485719680786 -0.16094860434532166 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9857213497161865 0.4348520040512085 0 1.0 0 0.0 0 0.0 0 0.0 -1.0158004760742188 -0.1645643413066864 -0.2839455306529999 0.0 0.0 -1.0 0.9881497621536255 0.4309505224227905 0 1.0 0 0.0 0 0.0 0 0.0 -1.1753647327423096 -0.16939017176628113 -0.2839455306529999 0.0 0.0 -1.0 1.0745253562927246 0.4149724841117859 0 1.0 0 0.0 0 0.0 0 0.0 -1.183876872062683 -0.16329097747802734 -0.2839455306529999 0.0 0.0 -1.0 1.0793944597244263 0.42037463188171387 0 1.0 0 0.0 0 0.0 0 0.0 -1.0158004760742188 -0.1645643413066864 -0.2839455306529999 0.0 0.0 -1.0 0.9881497621536255 0.4309505224227905 0 1.0 0 0.0 0 0.0 0 0.0 -1.1753647327423096 -0.16939017176628113 -0.2839455306529999 0.0 0.0 -1.0 1.0745253562927246 0.4149724841117859 0 1.0 0 0.0 0 0.0 0 0.0 -1.0158004760742188 -0.1645643413066864 -0.2839455306529999 0.0 0.0 -1.0 0.9881497621536255 0.4309505224227905 0 1.0 0 0.0 0 0.0 0 0.0 -1.020566701889038 -0.16795386373996735 -0.2839455306529999 0.0 0.0 -1.0 0.9906381964683533 0.4272674322128296 0 1.0 0 0.0 0 0.0 0 0.0 -1.1753647327423096 -0.16939017176628113 -0.2839455306529999 0.0 0.0 -1.0 1.0745253562927246 0.4149724841117859 0 1.0 0 0.0 0 0.0 0 0.0 -1.020566701889038 -0.16795386373996735 -0.2839455306529999 0.0 0.0 -1.0 0.9906381964683533 0.4272674322128296 0 1.0 0 0.0 0 0.0 0 0.0 -1.0254472494125366 -0.1711171716451645 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9931881427764893 0.4238011837005615 0 1.0 0 0.0 0 0.0 0 0.0 -1.1665972471237183 -0.17477181553840637 -0.2839455306529999 0.0 0.0 -1.0 1.0695576667785645 0.41030001640319824 0 1.0 0 0.0 0 0.0 0 0.0 -1.1753647327423096 -0.16939017176628113 -0.2839455306529999 0.0 0.0 -1.0 1.0745253562927246 0.4149724841117859 0 1.0 0 0.0 0 0.0 0 0.0 -1.0254472494125366 -0.1711171716451645 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9931881427764893 0.4238011837005615 0 1.0 0 0.0 0 0.0 0 0.0 -1.1665972471237183 -0.17477181553840637 -0.2839455306529999 0.0 0.0 -1.0 1.0695576667785645 0.41030001640319824 0 1.0 0 0.0 0 0.0 0 0.0 -1.0254472494125366 -0.1711171716451645 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9931881427764893 0.4238011837005615 0 1.0 0 0.0 0 0.0 0 0.0 -1.0304421186447144 -0.17405426502227783 -0.2839455306529999 0.0 0.0 -1.0 0.9958009719848633 0.4205503463745117 0 1.0 0 0.0 0 0.0 0 0.0 -1.1665972471237183 -0.17477181553840637 -0.2839455306529999 0.0 0.0 -1.0 1.0695576667785645 0.41030001640319824 0 1.0 0 0.0 0 0.0 0 0.0 -1.0304421186447144 -0.17405426502227783 -0.2839455306529999 0.0 0.0 -1.0 0.9958009719848633 0.4205503463745117 0 1.0 0 0.0 0 0.0 0 0.0 -1.0355515480041504 -0.17676514387130737 -0.2839455306529999 0.0 0.0 -1.0 0.9984782338142395 0.41751396656036377 0 1.0 0 0.0 0 0.0 0 0.0 -1.1575742959976196 -0.17943590879440308 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.064487338066101 0.40635156631469727 0 1.0 0 0.0 0 0.0 0 0.0 -1.1665972471237183 -0.17477181553840637 -0.2839455306529999 0.0 0.0 -1.0 1.0695576667785645 0.41030001640319824 0 1.0 0 0.0 0 0.0 0 0.0 -1.0355515480041504 -0.17676514387130737 -0.2839455306529999 0.0 0.0 -1.0 0.9984782338142395 0.41751396656036377 0 1.0 0 0.0 0 0.0 0 0.0 -1.1575742959976196 -0.17943590879440308 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.064487338066101 0.40635156631469727 0 1.0 0 0.0 0 0.0 0 0.0 -1.0355515480041504 -0.17676514387130737 -0.2839455306529999 0.0 0.0 -1.0 0.9984782338142395 0.41751396656036377 0 1.0 0 0.0 0 0.0 0 0.0 -1.0407215356826782 -0.1792546957731247 -0.2839455306529999 0.0 0.0 -1.0 1.0011929273605347 0.41469377279281616 0 1.0 0 0.0 0 0.0 0 0.0 -1.1575742959976196 -0.17943590879440308 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.06448733806610107 0.40635156631469727 0 1.0 0 0.0 0 0.0 0 0.0 -1.0407215356826782 -0.1792546957731247 -0.2839455306529999 0.0 0.0 -1.0 0.0011928975582122803 0.41469377279281616 0 1.0 0 0.0 0 0.0 0 0.0 -1.0458989143371582 -0.1815277487039566 -0.2839455306529999 0.0 0.0 -1.0 0.0039174556732177734 0.41209107637405396 0 1.0 0 0.0 0 0.0 0 0.0 -1.1482959985733032 -0.18338243663311005 -0.2839455306529999 0.0 0.0 -1.0 0.059311121702194214 0.4031233787536621 0 1.0 0 0.0 0 0.0 0 0.0 -1.1575742959976196 -0.17943590879440308 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.06448733806610107 0.40635156631469727 0 1.0 0 0.0 0 0.0 0 0.0 -1.0458989143371582 -0.1815277487039566 -0.2839455306529999 0.0 0.0 -1.0 0.0039174556732177734 0.41209107637405396 0 1.0 0 0.0 0 0.0 0 0.0 -1.1482959985733032 -0.18338243663311005 -0.2839455306529999 0.0 0.0 -1.0 0.059311121702194214 0.4031233787536621 0 1.0 0 0.0 0 0.0 0 0.0 -1.0458989143371582 -0.1815277487039566 -0.2839455306529999 0.0 0.0 -1.0 0.0039174556732177734 0.41209107637405396 0 1.0 0 0.0 0 0.0 0 0.0 -1.0510835647583008 -0.1835843324661255 -0.2839455306529999 0.0 0.0 -1.0 0.0066522955894470215 0.4097048044204712 0 1.0 0 0.0 0 0.0 0 0.0 -1.1387622356414795 -0.18661142885684967 -0.2839455306529999 0.0 0.0 -1.0 0.05402609705924988 0.4006136655807495 0 1.0 0 0.0 0 0.0 0 0.0 -1.1482959985733032 -0.18338243663311005 -0.2839455306529999 0.0 0.0 -1.0 0.059311121702194214 0.4031233787536621 0 1.0 0 0.0 0 0.0 0 0.0 -1.0510835647583008 -0.1835843324661255 -0.2839455306529999 0.0 0.0 -1.0 0.0066522955894470215 0.4097048044204712 0 1.0 0 0.0 0 0.0 0 0.0 -1.1387622356414795 -0.18661142885684967 -0.2839455306529999 0.0 0.0 -1.0 0.05402609705924988 0.4006136655807495 0 1.0 0 0.0 0 0.0 0 0.0 -1.0510835647583008 -0.1835843324661255 -0.2839455306529999 0.0 0.0 -1.0 0.0066522955894470215 0.4097048044204712 0 1.0 0 0.0 0 0.0 0 0.0 -1.056275486946106 -0.18542441725730896 -0.2839455306529999 0.0 0.0 -1.0 0.009397745132446289 0.40753376483917236 0 1.0 0 0.0 0 0.0 0 0.0 -1.1387622356414795 -0.18661142885684967 -0.2839455306529999 0.0 0.0 -1.0 0.05402609705924988 0.4006136655807495 0 1.0 0 0.0 0 0.0 0 0.0 -1.056275486946106 -0.18542441725730896 -0.2839455306529999 0.0 0.0 -1.0 0.009397745132446289 0.40753376483917236 0 1.0 0 0.0 0 0.0 0 0.0 -1.0614746809005737 -0.1870480328798294 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.012153983116149902 0.4055767059326172 0 1.0 0 0.0 0 0.0 0 0.0 -1.128973126411438 -0.18912285566329956 -0.2839455306529999 0.0 0.0 -1.0 0.04863038659095764 0.39882320165634155 0 1.0 0 0.0 0 0.0 0 0.0 -1.1387622356414795 -0.18661142885684967 -0.2839455306529999 0.0 0.0 -1.0 0.05402609705924988 0.4006136655807495 0 1.0 0 0.0 0 0.0 0 0.0 -1.0614746809005737 -0.1870480328798294 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.012153983116149902 0.4055767059326172 0 1.0 0 0.0 0 0.0 0 0.0 -1.128973126411438 -0.18912285566329956 -0.2839455306529999 0.0 0.0 -1.0 0.04863038659095764 0.39882320165634155 0 1.0 0 0.0 0 0.0 0 0.0 -1.0614746809005737 -0.1870480328798294 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.012153983116149902 0.4055767059326172 0 1.0 0 0.0 0 0.0 0 0.0 -1.066681146621704 -0.18845516443252563 -0.2839455306529999 0.0 0.0 -1.0 0.014921396970748901 0.4038327932357788 0 1.0 0 0.0 0 0.0 0 0.0 -1.128973126411438 -0.18912285566329956 -0.2839455306529999 0.0 0.0 -1.0 0.04863038659095764 0.39882320165634155 0 1.0 0 0.0 0 0.0 0 0.0 -1.066681146621704 -0.18845516443252563 -0.2839455306529999 0.0 0.0 -1.0 0.014921396970748901 0.4038327932357788 0 1.0 0 0.0 0 0.0 0 0.0 -1.0718950033187866 -0.18964582681655884 -0.2839455306529999 0.0 0.0 -1.0 0.0177001953125 0.4023010730743408 0 1.0 0 0.0 0 0.0 0 0.0 -1.1189286708831787 -0.1909167319536209 -0.2839455306529999 0.0 0.0 -1.0 0.04312288761138916 0.3977545499801636 0 1.0 0 0.0 0 0.0 0 0.0 -1.128973126411438 -0.18912285566329956 -0.2839455306529999 0.0 0.0 -1.0 0.04863038659095764 0.39882320165634155 0 1.0 0 0.0 0 0.0 0 0.0 -1.0718950033187866 -0.18964582681655884 -0.2839455306529999 0.0 0.0 -1.0 0.0177001953125 0.4023010730743408 0 1.0 0 0.0 0 0.0 0 0.0 -1.1189286708831787 -0.1909167319536209 -0.2839455306529999 0.0 0.0 -1.0 0.04312288761138916 0.3977545499801636 0 1.0 0 0.0 0 0.0 0 0.0 -1.0718950033187866 -0.18964582681655884 -0.2839455306529999 0.0 0.0 -1.0 0.0177001953125 0.4023010730743408 0 1.0 0 0.0 0 0.0 0 0.0 -1.0771161317825317 -0.19061999022960663 -0.2839455306529999 0.0 0.0 -1.0 0.020490676164627075 0.40098077058792114 0 1.0 0 0.0 0 0.0 0 0.0 -1.1189286708831787 -0.1909167319536209 -0.2839455306529999 0.0 0.0 -1.0 0.04312288761138916 0.3977545499801636 0 1.0 0 0.0 0 0.0 0 0.0 -1.0771161317825317 -0.19061999022960663 -0.2839455306529999 0.0 0.0 -1.0 0.020490676164627075 0.40098077058792114 0 1.0 0 0.0 0 0.0 0 0.0 -1.0823445320129395 -0.1913776695728302 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.023293018341064453 0.399871289730072 0 1.0 0 0.0 0 0.0 0 0.0 -1.108628749847412 -0.19199305772781372 -0.2839455306529999 0.0 0.0 -1.0 0.03750342130661011 0.3974127173423767 0 1.0 0 0.0 0 0.0 0 0.0 -1.1189286708831787 -0.1909167319536209 -0.2839455306529999 0.0 0.0 -1.0 0.04312288761138916 0.3977545499801636 0 1.0 0 0.0 0 0.0 0 0.0 -1.0823445320129395 -0.1913776695728302 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.023293018341064453 0.399871289730072 0 1.0 0 0.0 0 0.0 0 0.0 -1.108628749847412 -0.19199305772781372 -0.2839455306529999 0.0 0.0 -1.0 0.03750342130661011 0.3974127173423767 0 1.0 0 0.0 0 0.0 0 0.0 -1.0823445320129395 -0.1913776695728302 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.023293018341064453 0.399871289730072 0 1.0 0 0.0 0 0.0 0 0.0 -1.0875802040100098 -0.19191887974739075 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.02610740065574646 0.39897215366363525 0 1.0 0 0.0 0 0.0 0 0.0 -1.108628749847412 -0.19199305772781372 -0.2839455306529999 0.0 0.0 -1.0 0.03750342130661011 0.3974127173423767 0 1.0 0 0.0 0 0.0 0 0.0 -1.0875802040100098 -0.19191887974739075 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.02610740065574646 0.39897215366363525 0 1.0 0 0.0 0 0.0 0 0.0 -1.0928231477737427 -0.19224360585212708 -0.2839455306529999 0.0 -9.155552834272385e-05 -1.0 0.028934001922607422 0.3982831835746765 0 1.0 0 0.0 0 0.0 0 0.0 -1.0980734825134277 -0.19235184788703918 -0.2839455306529999 0.0 0.00030518509447574615 -0.999969482421875 0.031773000955581665 0.3978040814399719 0 1.0 0 0.0 0 0.0 0 0.0 -1.108628749847412 -0.19199305772781372 -0.2839455306529999 0.0 0.0 -1.0 0.03750342130661011 0.3974127173423767 0 1.0 0 0.0 0 0.0 0 0.0 -1.0928231477737427 -0.19224360585212708 -0.2839455306529999 0.0 -9.155552834272385e-05 -1.0 0.028934001922607422 0.3982831835746765 0 1.0 0 0.0 0 0.0 0 0.0 -1.4969496726989746 0.1962597668170929 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.0616915225982666 0.8226818442344666 0 1.0 0 0.0 0 0.0 0 0.0 -1.4851137399673462 0.19643977284431458 -0.2839455306529999 0.0 0.00012207403779029846 -1.0 0.051040977239608765 0.8245793581008911 0 1.0 0 0.0 0 0.0 0 0.0 -1.4743722677230835 0.19633153080940247 -0.2839455306529999 0.0 0.0 -1.0 0.041211605072021484 0.8255455493927002 0 1.0 0 0.0 0 0.0 0 0.0 -1.4969496726989746 0.1962597668170929 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.0616915225982666 0.8226818442344666 0 1.0 0 0.0 0 0.0 0 0.0 -1.4743722677230835 0.19633153080940247 -0.2839455306529999 0.0 0.0 -1.0 0.041211605072021484 0.8255455493927002 0 1.0 0 0.0 0 0.0 0 0.0 -1.4640979766845703 0.19600680470466614 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.03174707293510437 0.825800359249115 0 1.0 0 0.0 0 0.0 0 0.0 -1.5082894563674927 0.19571977853775024 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.07161593437194824 0.8200180530548096 0 1.0 0 0.0 0 0.0 0 0.0 -1.4969496726989746 0.1962597668170929 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.0616915225982666 0.8226818442344666 0 1.0 0 0.0 0 0.0 0 0.0 -1.4640979766845703 0.19600680470466614 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.03174707293510437 0.825800359249115 0 1.0 0 0.0 0 0.0 0 0.0 -1.5082894563674927 0.19571977853775024 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.07161593437194824 0.8200180530548096 0 1.0 0 0.0 0 0.0 0 0.0 -1.4640979766845703 0.19600680470466614 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.03174707293510437 0.825800359249115 0 1.0 0 0.0 0 0.0 0 0.0 -1.4542906284332275 0.1954655945301056 -0.2839455306529999 0.0 0.0 -1.0 0.022726356983184814 0.8254101276397705 0 1.0 0 0.0 0 0.0 0 0.0 -1.5191329717636108 0.19481980800628662 -0.2839455306529999 0.0 0.0 -1.0 0.08076804876327515 0.8166956305503845 0 1.0 0 0.0 0 0.0 0 0.0 -1.5082894563674927 0.19571977853775024 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.07161593437194824 0.8200180530548096 0 1.0 0 0.0 0 0.0 0 0.0 -1.4542906284332275 0.1954655945301056 -0.2839455306529999 0.0 0.0 -1.0 0.022726356983184814 0.8254101276397705 0 1.0 0 0.0 0 0.0 0 0.0 -1.5191329717636108 0.19481980800628662 -0.2839455306529999 0.0 0.0 -1.0 0.08076804876327515 0.8166956305503845 0 1.0 0 0.0 0 0.0 0 0.0 -1.4542906284332275 0.1954655945301056 -0.2839455306529999 0.0 0.0 -1.0 0.022726356983184814 0.8254101276397705 0 1.0 0 0.0 0 0.0 0 0.0 -1.4449502229690552 0.19470790028572083 -0.2839455306529999 0.0 0.0 -1.0 0.014209866523742676 0.8244448900222778 0 1.0 0 0.0 0 0.0 0 0.0 -1.5294803380966187 0.19355982542037964 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08913213014602661 0.8128165006637573 0 1.0 0 0.0 0 0.0 0 0.0 -1.5191329717636108 0.19481980800628662 -0.2839455306529999 0.0 0.0 -1.0 0.08076804876327515 0.8166956305503845 0 1.0 0 0.0 0 0.0 0 0.0 -1.4449502229690552 0.19470790028572083 -0.2839455306529999 0.0 0.0 -1.0 0.014209866523742676 0.8244448900222778 0 1.0 0 0.0 0 0.0 0 0.0 -1.5294803380966187 0.19355982542037964 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08913213014602661 0.8128165006637573 0 1.0 0 0.0 0 0.0 0 0.0 -1.4449502229690552 0.19470790028572083 -0.2839455306529999 0.0 0.0 -1.0 0.014209866523742676 0.8244448900222778 0 1.0 0 0.0 0 0.0 0 0.0 -1.4360769987106323 0.19373372197151184 -0.2839455306529999 0.0 0.0 -1.0 0.006239652633666992 0.8229754567146301 0 1.0 0 0.0 0 0.0 0 0.0 -1.5294803380966187 0.19355982542037964 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0891320705413818 0.8128165006637573 0 1.0 0 0.0 0 0.0 0 0.0 -1.4360769987106323 0.19373372197151184 -0.2839455306529999 0.0 0.0 -1.0 1.006239652633667 0.8229754567146301 0 1.0 0 0.0 0 0.0 0 0.0 -1.4276705980300903 0.19254305958747864 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9988397359848022 0.8210697174072266 0 1.0 0 0.0 0 0.0 0 0.0 -1.5393314361572266 0.19193986058235168 -0.2839455306529999 0.0 0.0 -1.0 1.096716046333313 0.8084730505943298 0 1.0 0 0.0 0 0.0 0 0.0 -1.5294803380966187 0.19355982542037964 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0891320705413818 0.8128165006637573 0 1.0 0 0.0 0 0.0 0 0.0 -1.4276705980300903 0.19254305958747864 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9988397359848022 0.8210697174072266 0 1.0 0 0.0 0 0.0 0 0.0 -1.5393314361572266 0.19193986058235168 -0.2839455306529999 0.0 0.0 -1.0 1.096716046333313 0.8084730505943298 0 1.0 0 0.0 0 0.0 0 0.0 -1.4276705980300903 0.19254305958747864 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9988397359848022 0.8210697174072266 0 1.0 0 0.0 0 0.0 0 0.0 -1.4197313785552979 0.19113591313362122 -0.2839455306529999 0.0 0.0 -1.0 0.9920201301574707 0.8187916874885559 0 1.0 0 0.0 0 0.0 0 0.0 -1.5486863851547241 0.18995991349220276 -0.2839455306529999 0.0 0.0 -1.0 1.1035447120666504 0.8037464022636414 0 1.0 0 0.0 0 0.0 0 0.0 -1.5393314361572266 0.19193986058235168 -0.2839455306529999 0.0 0.0 -1.0 1.096716046333313 0.8084730505943298 0 1.0 0 0.0 0 0.0 0 0.0 -1.4197313785552979 0.19113591313362122 -0.2839455306529999 0.0 0.0 -1.0 0.9920201301574707 0.8187916874885559 0 1.0 0 0.0 0 0.0 0 0.0 -1.5486863851547241 0.18995991349220276 -0.2839455306529999 0.0 0.0 -1.0 1.1035447120666504 0.8037464022636414 0 1.0 0 0.0 0 0.0 0 0.0 -1.4197313785552979 0.19113591313362122 -0.2839455306529999 0.0 0.0 -1.0 0.9920201301574707 0.8187916874885559 0 1.0 0 0.0 0 0.0 0 0.0 -1.4122591018676758 0.18951231241226196 -0.2839455306529999 0.0 0.0 -1.0 0.9857782125473022 0.8161996603012085 0 1.0 0 0.0 0 0.0 0 0.0 -1.5575450658798218 0.18761995434761047 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.1096538305282593 0.7987056970596313 0 1.0 0 0.0 0 0.0 0 0.0 -1.5486863851547241 0.18995991349220276 -0.2839455306529999 0.0 0.0 -1.0 1.1035447120666504 0.8037464022636414 0 1.0 0 0.0 0 0.0 0 0.0 -1.4122591018676758 0.18951231241226196 -0.2839455306529999 0.0 0.0 -1.0 0.9857782125473022 0.8161996603012085 0 1.0 0 0.0 0 0.0 0 0.0 -1.5575450658798218 0.18761995434761047 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.1096538305282593 0.7987056970596313 0 1.0 0 0.0 0 0.0 0 0.0 -1.4122591018676758 0.18951231241226196 -0.2839455306529999 0.0 0.0 -1.0 0.9857782125473022 0.8161996603012085 0 1.0 0 0.0 0 0.0 0 0.0 -1.4052537679672241 0.1876722276210785 -0.2839455306529999 0.0 0.0 -1.0 0.9801024794578552 0.8133453130722046 0 1.0 0 0.0 0 0.0 0 0.0 -1.5575450658798218 0.18761995434761047 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.1096538305282593 0.7987056970596313 0 1.0 0 0.0 0 0.0 0 0.0 -1.4052537679672241 0.1876722276210785 -0.2839455306529999 0.0 0.0 -1.0 0.9801024794578552 0.8133453130722046 0 1.0 0 0.0 0 0.0 0 0.0 -1.398715615272522 0.1856156587600708 -0.2839455306529999 0.0 0.0 -1.0 0.9749752879142761 0.8102735877037048 0 1.0 0 0.0 0 0.0 0 0.0 -1.565907597541809 0.18492001295089722 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.1150856018066406 0.793408215045929 0 1.0 0 0.0 0 0.0 0 0.0 -1.5575450658798218 0.18761995434761047 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.1096538305282593 0.7987056970596313 0 1.0 0 0.0 0 0.0 0 0.0 -1.398715615272522 0.1856156587600708 -0.2839455306529999 0.0 0.0 -1.0 0.9749752879142761 0.8102735877037048 0 1.0 0 0.0 0 0.0 0 0.0 -1.565907597541809 0.18492001295089722 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.1150856018066406 0.793408215045929 0 1.0 0 0.0 0 0.0 0 0.0 -1.398715615272522 0.1856156587600708 -0.2839455306529999 0.0 0.0 -1.0 0.9749752879142761 0.8102735877037048 0 1.0 0 0.0 0 0.0 0 0.0 -1.3926442861557007 0.1833426058292389 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9703744649887085 0.8070228099822998 0 1.0 0 0.0 0 0.0 0 0.0 -1.573773980140686 0.181860089302063 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.119884729385376 0.7878999710083008 0 1.0 0 0.0 0 0.0 0 0.0 -1.565907597541809 0.18492001295089722 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.1150856018066406 0.793408215045929 0 1.0 0 0.0 0 0.0 0 0.0 -1.3926442861557007 0.1833426058292389 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9703744649887085 0.8070228099822998 0 1.0 0 0.0 0 0.0 0 0.0 -1.573773980140686 0.181860089302063 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.119884729385376 0.7878999710083008 0 1.0 0 0.0 0 0.0 0 0.0 -1.3926442861557007 0.1833426058292389 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9703744649887085 0.8070228099822998 0 1.0 0 0.0 0 0.0 0 0.0 -1.387040138244629 0.18085306882858276 -0.2839455306529999 0.0 0.0 -1.0 0.9662760496139526 0.8036254048347473 0 1.0 0 0.0 0 0.0 0 0.0 -1.581144094467163 0.1784401535987854 -0.2839455306529999 0.0 0.0 -1.0 1.1240952014923096 0.7822171449661255 0 1.0 0 0.0 0 0.0 0 0.0 -1.573773980140686 0.181860089302063 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.119884729385376 0.7878999710083008 0 1.0 0 0.0 0 0.0 0 0.0 -1.387040138244629 0.18085306882858276 -0.2839455306529999 0.0 0.0 -1.0 0.9662760496139526 0.8036254048347473 0 1.0 0 0.0 0 0.0 0 0.0 -1.581144094467163 0.1784401535987854 -0.2839455306529999 0.0 0.0 -1.0 1.1240952014923096 0.7822171449661255 0 1.0 0 0.0 0 0.0 0 0.0 -1.387040138244629 0.18085306882858276 -0.2839455306529999 0.0 0.0 -1.0 0.9662760496139526 0.8036254048347473 0 1.0 0 0.0 0 0.0 0 0.0 -1.381801962852478 0.17819690704345703 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.962579071521759 0.8001152873039246 0 1.0 0 0.0 0 0.0 0 0.0 -1.5880180597305298 0.17466023564338684 -0.2839455306529999 0.0 0.0 -1.0 1.1277600526809692 0.7763864398002625 0 1.0 0 0.0 0 0.0 0 0.0 -1.581144094467163 0.1784401535987854 -0.2839455306529999 0.0 0.0 -1.0 1.1240952014923096 0.7822171449661255 0 1.0 0 0.0 0 0.0 0 0.0 -1.381801962852478 0.17819690704345703 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.962579071521759 0.8001152873039246 0 1.0 0 0.0 0 0.0 0 0.0 -1.5880180597305298 0.17466023564338684 -0.2839455306529999 0.0 0.0 -1.0 1.1277600526809692 0.7763864398002625 0 1.0 0 0.0 0 0.0 0 0.0 -1.381801962852478 0.17819690704345703 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.962579071521759 0.8001152873039246 0 1.0 0 0.0 0 0.0 0 0.0 -1.3768290281295776 0.1754239797592163 -0.2839455306529999 0.0 0.0 -1.0 0.959189236164093 0.7965185046195984 0 1.0 0 0.0 0 0.0 0 0.0 -1.5880180597305298 0.17466023564338684 -0.2839455306529999 0.0 0.0 -1.0 1.1277600526809692 0.7763864398002625 0 1.0 0 0.0 0 0.0 0 0.0 -1.3768290281295776 0.1754239797592163 -0.2839455306529999 0.0 0.0 -1.0 0.959189236164093 0.7965185046195984 0 1.0 0 0.0 0 0.0 0 0.0 -1.3721212148666382 0.17253431677818298 -0.2839455306529999 0.0 0.0 -1.0 0.9560917615890503 0.7928478717803955 0 1.0 0 0.0 0 0.0 0 0.0 -1.5943957567214966 0.1705203354358673 -0.2839455306529999 0.0 0.0 -1.0 1.1309187412261963 0.7704271078109741 0 1.0 0 0.0 0 0.0 0 0.0 -1.5880180597305298 0.17466023564338684 -0.2839455306529999 0.0 0.0 -1.0 1.1277600526809692 0.7763864398002625 0 1.0 0 0.0 0 0.0 0 0.0 -1.3721212148666382 0.17253431677818298 -0.2839455306529999 0.0 0.0 -1.0 0.9560917615890503 0.7928478717803955 0 1.0 0 0.0 0 0.0 0 0.0 -1.5943957567214966 0.1705203354358673 -0.2839455306529999 0.0 0.0 -1.0 1.1309187412261963 0.7704271078109741 0 1.0 0 0.0 0 0.0 0 0.0 -1.3721212148666382 0.17253431677818298 -0.2839455306529999 0.0 0.0 -1.0 0.9560917615890503 0.7928478717803955 0 1.0 0 0.0 0 0.0 0 0.0 -1.3676784038543701 0.16952788829803467 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9532722234725952 0.7891139984130859 0 1.0 0 0.0 0 0.0 0 0.0 -1.600374460220337 0.16600584983825684 -0.2839455306529999 0.0 0.0 -1.0 1.133660912513733 0.7642955780029297 0 1.0 0 0.0 0 0.0 0 0.0 -1.5943957567214966 0.1705203354358673 -0.2839455306529999 0.0 0.0 -1.0 1.1309187412261963 0.7704271078109741 0 1.0 0 0.0 0 0.0 0 0.0 -1.3676784038543701 0.16952788829803467 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9532722234725952 0.7891139984130859 0 1.0 0 0.0 0 0.0 0 0.0 -1.600374460220337 0.16600584983825684 -0.2839455306529999 0.0 0.0 -1.0 1.133660912513733 0.7642955780029297 0 1.0 0 0.0 0 0.0 0 0.0 -1.3676784038543701 0.16952788829803467 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9532722234725952 0.7891139984130859 0 1.0 0 0.0 0 0.0 0 0.0 -1.363500714302063 0.16640472412109375 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9507166147232056 0.7853257656097412 0 1.0 0 0.0 0 0.0 0 0.0 -1.600374460220337 0.16600584983825684 -0.2839455306529999 0.0 0.0 -1.0 1.133660912513733 0.7642955780029297 0 1.0 0 0.0 0 0.0 0 0.0 -1.363500714302063 0.16640472412109375 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9507166147232056 0.7853257656097412 0 1.0 0 0.0 0 0.0 0 0.0 -1.3595882654190063 0.16316479444503784 -0.2839455306529999 0.0 0.0 -1.0 0.9484119415283203 0.7814901471138 0 1.0 0 0.0 0 0.0 0 0.0 -1.6060515642166138 0.16110217571258545 -0.2839455306529999 0.0 0.0 -1.0 1.1360664367675781 0.7579406499862671 0 1.0 0 0.0 0 0.0 0 0.0 -1.600374460220337 0.16600584983825684 -0.2839455306529999 0.0 0.0 -1.0 1.133660912513733 0.7642955780029297 0 1.0 0 0.0 0 0.0 0 0.0 -1.3595882654190063 0.16316479444503784 -0.2839455306529999 0.0 0.0 -1.0 0.9484119415283203 0.7814901471138 0 1.0 0 0.0 0 0.0 0 0.0 -1.6060515642166138 0.16110217571258545 -0.2839455306529999 0.0 0.0 -1.0 1.1360664367675781 0.7579406499862671 0 1.0 0 0.0 0 0.0 0 0.0 -1.3595882654190063 0.16316479444503784 -0.2839455306529999 0.0 0.0 -1.0 0.9484119415283203 0.7814901471138 0 1.0 0 0.0 0 0.0 0 0.0 -1.3559409379959106 0.15980809926986694 -0.2839455306529999 0.0 0.0 -1.0 0.9463456273078918 0.777612566947937 0 1.0 0 0.0 0 0.0 0 0.0 -1.6114271879196167 0.15580931305885315 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.1381559371948242 0.751362144947052 0 1.0 0 0.0 0 0.0 0 0.0 -1.6060515642166138 0.16110217571258545 -0.2839455306529999 0.0 0.0 -1.0 1.1360664367675781 0.7579406499862671 0 1.0 0 0.0 0 0.0 0 0.0 -1.3559409379959106 0.15980809926986694 -0.2839455306529999 0.0 0.0 -1.0 0.9463456273078918 0.777612566947937 0 1.0 0 0.0 0 0.0 0 0.0 -1.6114271879196167 0.15580931305885315 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.1381559371948242 0.751362144947052 0 1.0 0 0.0 0 0.0 0 0.0 -1.3559409379959106 0.15980809926986694 -0.2839455306529999 0.0 0.0 -1.0 0.9463456273078918 0.777612566947937 0 1.0 0 0.0 0 0.0 0 0.0 -1.3525587320327759 0.15633466839790344 -0.2839455306529999 0.0 0.0 -1.0 0.944506049156189 0.7736969590187073 0 1.0 0 0.0 0 0.0 0 0.0 -1.6114271879196167 0.15580931305885315 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.1381559371948242 0.751362144947052 0 1.0 0 0.0 0 0.0 0 0.0 -1.3525587320327759 0.15633466839790344 -0.2839455306529999 0.0 0.0 -1.0 0.944506049156189 0.7736969590187073 0 1.0 0 0.0 0 0.0 0 0.0 -1.349441647529602 0.15274447202682495 -0.2839455306529999 0.0 0.0 -1.0 0.9428825378417969 0.7697458267211914 0 1.0 0 0.0 0 0.0 0 0.0 -1.6165012121200562 0.15012726187705994 -0.2839455306529999 0.0 0.0 -1.0 1.1399489641189575 0.7445569038391113 0 1.0 0 0.0 0 0.0 0 0.0 -1.6114271879196167 0.15580931305885315 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.1381559371948242 0.751362144947052 0 1.0 0 0.0 0 0.0 0 0.0 -1.349441647529602 0.15274447202682495 -0.2839455306529999 0.0 0.0 -1.0 0.9428825378417969 0.7697458267211914 0 1.0 0 0.0 0 0.0 0 0.0 -1.6165012121200562 0.15012726187705994 -0.2839455306529999 0.0 0.0 -1.0 1.1399489641189575 0.7445569038391113 0 1.0 0 0.0 0 0.0 0 0.0 -1.349441647529602 0.15274447202682495 -0.2839455306529999 0.0 0.0 -1.0 0.9428825378417969 0.7697458267211914 0 1.0 0 0.0 0 0.0 0 0.0 -1.3465896844863892 0.14903751015663147 -0.2839455306529999 0.0 0.0 -1.0 0.9414651393890381 0.7657605409622192 0 1.0 0 0.0 0 0.0 0 0.0 -1.621273398399353 0.1440560519695282 -0.2839455306529999 0.0 0.0 -1.0 1.1414625644683838 0.7375191450119019 0 1.0 0 0.0 0 0.0 0 0.0 -1.6165012121200562 0.15012726187705994 -0.2839455306529999 0.0 0.0 -1.0 1.1399489641189575 0.7445569038391113 0 1.0 0 0.0 0 0.0 0 0.0 -1.3465896844863892 0.14903751015663147 -0.2839455306529999 0.0 0.0 -1.0 0.9414651393890381 0.7657605409622192 0 1.0 0 0.0 0 0.0 0 0.0 -1.621273398399353 0.1440560519695282 -0.2839455306529999 0.0 0.0 -1.0 1.1414625644683838 0.7375191450119019 0 1.0 0 0.0 0 0.0 0 0.0 -1.3465896844863892 0.14903751015663147 -0.2839455306529999 0.0 0.0 -1.0 0.9414651393890381 0.7657605409622192 0 1.0 0 0.0 0 0.0 0 0.0 -1.3440028429031372 0.14521381258964539 -0.2839455306529999 0.0 0.0 -1.0 0.9402449131011963 0.7617413997650146 0 1.0 0 0.0 0 0.0 0 0.0 -1.621273398399353 0.1440560519695282 -0.2839455306529999 0.0 0.0 -1.0 1.1414625644683838 0.7375191450119019 0 1.0 0 0.0 0 0.0 0 0.0 -1.3440028429031372 0.14521381258964539 -0.2839455306529999 0.0 0.0 -1.0 0.9402449131011963 0.7617413997650146 0 1.0 0 0.0 0 0.0 0 0.0 -1.3416811227798462 0.1412733793258667 -0.2839455306529999 0.0 0.0 -1.0 0.9392135143280029 0.7576877474784851 0 1.0 0 0.0 0 0.0 0 0.0 -1.6257442235946655 0.13759565353393555 -0.2839455306529999 0.0 0.0 -1.0 1.1427130699157715 0.7302404642105103 0 1.0 0 0.0 0 0.0 0 0.0 -1.621273398399353 0.1440560519695282 -0.2839455306529999 0.0 0.0 -1.0 1.1414625644683838 0.7375191450119019 0 1.0 0 0.0 0 0.0 0 0.0 -1.3416811227798462 0.1412733793258667 -0.2839455306529999 0.0 0.0 -1.0 0.9392135143280029 0.7576877474784851 0 1.0 0 0.0 0 0.0 0 0.0 -1.6257442235946655 0.13759565353393555 -0.2839455306529999 0.0 0.0 -1.0 1.1427130699157715 0.7302404642105103 0 1.0 0 0.0 0 0.0 0 0.0 -1.3416811227798462 0.1412733793258667 -0.2839455306529999 0.0 0.0 -1.0 0.9392135143280029 0.7576877474784851 0 1.0 0 0.0 0 0.0 0 0.0 -1.3395832777023315 0.13699603080749512 -0.2839455306529999 0.0 0.0 -1.0 0.9383580684661865 0.7533990740776062 0 1.0 0 0.0 0 0.0 0 0.0 -1.6299132108688354 0.13074606657028198 -0.2839455306529999 0.0 0.0 -1.0 1.1437146663665771 0.7227109670639038 0 1.0 0 0.0 0 0.0 0 0.0 -1.6257442235946655 0.13759565353393555 -0.2839455306529999 0.0 0.0 -1.0 1.1427130699157715 0.7302404642105103 0 1.0 0 0.0 0 0.0 0 0.0 -1.3395832777023315 0.13699603080749512 -0.2839455306529999 0.0 0.0 -1.0 0.9383580684661865 0.7533990740776062 0 1.0 0 0.0 0 0.0 0 0.0 -1.6299132108688354 0.13074606657028198 -0.2839455306529999 0.0 0.0 -1.0 1.1437146663665771 0.7227109670639038 0 1.0 0 0.0 0 0.0 0 0.0 -1.3395832777023315 0.13699603080749512 -0.2839455306529999 0.0 0.0 -1.0 0.9383580684661865 0.7533990740776062 0 1.0 0 0.0 0 0.0 0 0.0 -1.33766770362854 0.1321616768836975 -0.2839455306529999 0.0 0.0 -1.0 0.9376671314239502 0.7486661672592163 0 1.0 0 0.0 0 0.0 0 0.0 -1.6299132108688354 0.13074606657028198 -0.2839455306529999 0.0 0.0 -1.0 1.1437146663665771 0.7227109670639038 0 1.0 0 0.0 0 0.0 0 0.0 -1.33766770362854 0.1321616768836975 -0.2839455306529999 0.0 0.0 -1.0 0.9376671314239502 0.7486661672592163 0 1.0 0 0.0 0 0.0 0 0.0 -1.3359346389770508 0.12677031755447388 -0.2839455306529999 0.0 0.0 -1.0 0.9371362924575806 0.7434725761413574 0 1.0 0 0.0 0 0.0 0 0.0 -1.633780837059021 0.1235072910785675 -0.2839455306529999 0.0 0.0 -1.0 1.1444804668426514 0.7149181365966797 0 1.0 0 0.0 0 0.0 0 0.0 -1.6299132108688354 0.13074606657028198 -0.2839455306529999 0.0 0.0 -1.0 1.1437146663665771 0.7227109670639038 0 1.0 0 0.0 0 0.0 0 0.0 -1.3359346389770508 0.12677031755447388 -0.2839455306529999 0.0 0.0 -1.0 0.9371362924575806 0.7434725761413574 0 1.0 0 0.0 0 0.0 0 0.0 -1.633780837059021 0.1235072910785675 -0.2839455306529999 0.0 0.0 -1.0 1.1444804668426514 0.7149181365966797 0 1.0 0 0.0 0 0.0 0 0.0 -1.3359346389770508 0.12677031755447388 -0.2839455306529999 0.0 0.0 -1.0 0.9371362924575806 0.7434725761413574 0 1.0 0 0.0 0 0.0 0 0.0 -1.3343840837478638 0.12082192301750183 -0.2839455306529999 0.0 0.0 -1.0 0.9367607831954956 0.7377991676330566 0 1.0 0 0.0 0 0.0 0 0.0 -1.637346625328064 0.1158793568611145 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.14502182602882385 0.7068488597869873 0 1.0 0 0.0 0 0.0 0 0.0 -1.633780837059021 0.1235072910785675 -0.2839455306529999 0.0 0.0 -1.0 0.14448046684265137 0.7149181365966797 0 1.0 0 0.0 0 0.0 0 0.0 -1.4964169263839722 0.1210615336894989 -0.2839455306529999 0.0 0.0 -1.0 0.05416753888130188 0.7601801156997681 0 1.0 0 0.0 0 0.0 0 0.0 -1.4964169263839722 0.1210615336894989 -0.2839455306529999 0.0 0.0 -1.0 0.05416753888130188 0.7601801156997681 0 1.0 0 0.0 0 0.0 0 0.0 -1.633780837059021 0.1235072910785675 -0.2839455306529999 0.0 0.0 -1.0 0.14448046684265137 0.7149181365966797 0 1.0 0 0.0 0 0.0 0 0.0 -1.4921189546585083 0.12113326787948608 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.05072706937789917 0.7608742713928223 0 1.0 0 0.0 0 0.0 0 0.0 -1.4921189546585083 0.12113326787948608 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.050727128982544 0.7608742713928223 0 1.0 0 0.0 0 0.0 0 0.0 -1.633780837059021 0.1235072910785675 -0.2839455306529999 0.0 0.0 -1.0 1.1444804668426514 0.7149181365966797 0 1.0 0 0.0 0 0.0 0 0.0 -1.3343840837478638 0.12082192301750183 -0.2839455306529999 0.0 0.0 -1.0 0.9367607831954956 0.7377991676330566 0 1.0 0 0.0 0 0.0 0 0.0 -1.4858118295669556 0.12104934453964233 -0.2839455306529999 0.0 0.0 -1.0 1.0456355810165405 0.7615771293640137 0 1.0 0 0.0 0 0.0 0 0.0 -1.4921189546585083 0.12113326787948608 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.050727128982544 0.7608742713928223 0 1.0 0 0.0 0 0.0 0 0.0 -1.3343840837478638 0.12082192301750183 -0.2839455306529999 0.0 0.0 -1.0 0.9367607831954956 0.7377991676330566 0 1.0 0 0.0 0 0.0 0 0.0 -1.637346625328064 0.1158793568611145 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.14502182602882385 0.7068488597869873 0 1.0 0 0.0 0 0.0 0 0.0 -1.4964169263839722 0.1210615336894989 -0.2839455306529999 0.0 0.0 -1.0 0.05416753888130188 0.7601801156997681 0 1.0 0 0.0 0 0.0 0 0.0 -1.5005544424057007 0.12084627151489258 -0.2839455306529999 0.0 0.0006408886983990669 -0.999969482421875 0.057448118925094604 0.7593033909797668 0 1.0 0 0.0 0 0.0 0 0.0 -1.479849934577942 0.12079760432243347 -0.2839455306529999 0.0 0.0001831110566854477 -0.999969482421875 1.0407905578613281 0.761926531791687 0 1.0 0 0.0 0 0.0 0 0.0 -1.4858118295669556 0.12104934453964233 -0.2839455306529999 0.0 0.0 -1.0 1.0456355810165405 0.7615771293640137 0 1.0 0 0.0 0 0.0 0 0.0 -1.3343840837478638 0.12082192301750183 -0.2839455306529999 0.0 0.0 -1.0 0.9367607831954956 0.7377991676330566 0 1.0 0 0.0 0 0.0 0 0.0 -1.637346625328064 0.1158793568611145 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.14502182602882385 0.7068488597869873 0 1.0 0 0.0 0 0.0 0 0.0 -1.5005544424057007 0.12084627151489258 -0.2839455306529999 0.0 0.0006408886983990669 -0.999969482421875 0.057448118925094604 0.7593033909797668 0 1.0 0 0.0 0 0.0 0 0.0 -1.5045313835144043 0.1204875111579895 -0.2839455306529999 0.0 -9.155552834272385e-05 -1.0 0.060566484928131104 0.7582532167434692 0 1.0 0 0.0 0 0.0 0 0.0 -1.479849934577942 0.12079760432243347 -0.2839455306529999 0.0 0.0001831110566854477 -0.999969482421875 1.0407905578613281 0.761926531791687 0 1.0 0 0.0 0 0.0 0 0.0 -1.3343840837478638 0.12082192301750183 -0.2839455306529999 0.0 0.0 -1.0 0.9367607831954956 0.7377991676330566 0 1.0 0 0.0 0 0.0 0 0.0 -1.3330157995224 0.11431652307510376 -0.2839455306529999 0.0 0.0 -1.0 0.9365357160568237 0.7316248416900635 0 1.0 0 0.0 0 0.0 0 0.0 -1.474233627319336 0.12037801742553711 -0.2839455306529999 0.0 0.0 -1.0 1.0362075567245483 0.7619456648826599 0 1.0 0 0.0 0 0.0 0 0.0 -1.479849934577942 0.12079760432243347 -0.2839455306529999 0.0 0.0001831110566854477 -0.999969482421875 1.0407905578613281 0.761926531791687 0 1.0 0 0.0 0 0.0 0 0.0 -1.3330157995224 0.11431652307510376 -0.2839455306529999 0.0 0.0 -1.0 0.9365357160568237 0.7316248416900635 0 1.0 0 0.0 0 0.0 0 0.0 -1.637346625328064 0.1158793568611145 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.14502182602882385 0.7068488597869873 0 1.0 0 0.0 0 0.0 0 0.0 -1.5045313835144043 0.1204875111579895 -0.2839455306529999 0.0 -9.155552834272385e-05 -1.0 0.060566484928131104 0.7582532167434692 0 1.0 0 0.0 0 0.0 0 0.0 -1.5083478689193726 0.11998522281646729 -0.2839455306529999 0.0 -6.103701889514923e-05 -0.999969482421875 0.06352132558822632 0.757038414478302 0 1.0 0 0.0 0 0.0 0 0.0 -1.4689626693725586 0.11979058384895325 -0.2839455306529999 0.0 0.0 -1.0 1.0318984985351562 0.76165771484375 0 1.0 0 0.0 0 0.0 0 0.0 -1.474233627319336 0.12037801742553711 -0.2839455306529999 0.0 0.0 -1.0 1.0362075567245483 0.7619456648826599 0 1.0 0 0.0 0 0.0 0 0.0 -1.3330157995224 0.11431652307510376 -0.2839455306529999 0.0 0.0 -1.0 0.9365357160568237 0.7316248416900635 0 1.0 0 0.0 0 0.0 0 0.0 -1.637346625328064 0.1158793568611145 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.14502182602882385 0.7068488597869873 0 1.0 0 0.0 0 0.0 0 0.0 -1.5083478689193726 0.11998522281646729 -0.2839455306529999 0.0 -6.103701889514923e-05 -0.999969482421875 0.06352132558822632 0.757038414478302 0 1.0 0 0.0 0 0.0 0 0.0 -1.5120036602020264 0.11933943629264832 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.06631192564964294 0.7556670308113098 0 1.0 0 0.0 0 0.0 0 0.0 -1.4640370607376099 0.11903533339500427 -0.2839455306529999 0.0 0.0 -1.0 1.027872085571289 0.7610847353935242 0 1.0 0 0.0 0 0.0 0 0.0 -1.4689626693725586 0.11979058384895325 -0.2839455306529999 0.0 0.0 -1.0 1.0318984985351562 0.76165771484375 0 1.0 0 0.0 0 0.0 0 0.0 -1.3330157995224 0.11431652307510376 -0.2839455306529999 0.0 0.0 -1.0 0.9365357160568237 0.7316248416900635 0 1.0 0 0.0 0 0.0 0 0.0 -1.637346625328064 0.1158793568611145 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.14502182602882385 0.7068488597869873 0 1.0 0 0.0 0 0.0 0 0.0 -1.5120036602020264 0.11933943629264832 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.06631192564964294 0.7556670308113098 0 1.0 0 0.0 0 0.0 0 0.0 -1.5154989957809448 0.1185501217842102 -0.2839455306529999 0.0 0.0 -1.0 0.06893846392631531 0.7541464567184448 0 1.0 0 0.0 0 0.0 0 0.0 -1.4594570398330688 0.1181122362613678 -0.2839455306529999 0.0 0.0 -1.0 1.0241351127624512 0.7602477073669434 0 1.0 0 0.0 0 0.0 0 0.0 -1.4640370607376099 0.11903533339500427 -0.2839455306529999 0.0 0.0 -1.0 1.027872085571289 0.7610847353935242 0 1.0 0 0.0 0 0.0 0 0.0 -1.3330157995224 0.11431652307510376 -0.2839455306529999 0.0 0.0 -1.0 0.9365357160568237 0.7316248416900635 0 1.0 0 0.0 0 0.0 0 0.0 -1.637346625328064 0.1158793568611145 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.14502182602882385 0.7068488597869873 0 1.0 0 0.0 0 0.0 0 0.0 -1.5154989957809448 0.1185501217842102 -0.2839455306529999 0.0 0.0 -1.0 0.06893846392631531 0.7541464567184448 0 1.0 0 0.0 0 0.0 0 0.0 -1.5188337564468384 0.11761730909347534 -0.2839455306529999 0.0 0.0 -1.0 0.07140150666236877 0.7524835467338562 0 1.0 0 0.0 0 0.0 0 0.0 -1.455222249031067 0.11702132225036621 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.02069091796875 0.75916588306427 0 1.0 0 0.0 0 0.0 0 0.0 -1.4594570398330688 0.1181122362613678 -0.2839455306529999 0.0 0.0 -1.0 1.0241351127624512 0.7602477073669434 0 1.0 0 0.0 0 0.0 0 0.0 -1.3330157995224 0.11431652307510376 -0.2839455306529999 0.0 0.0 -1.0 0.9365357160568237 0.7316248416900635 0 1.0 0 0.0 0 0.0 0 0.0 -1.637346625328064 0.1158793568611145 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.14502182602882385 0.7068488597869873 0 1.0 0 0.0 0 0.0 0 0.0 -1.5188337564468384 0.11761730909347534 -0.2839455306529999 0.0 0.0 -1.0 0.07140150666236877 0.7524835467338562 0 1.0 0 0.0 0 0.0 0 0.0 -1.5220080614089966 0.11654096841812134 -0.2839455306529999 0.0 0.0 -1.0 0.07370230555534363 0.7506841421127319 0 1.0 0 0.0 0 0.0 0 0.0 -1.4513328075408936 0.11576256155967712 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 1.0175414085388184 0.7578567266464233 0 1.0 0 0.0 0 0.0 0 0.0 -1.455222249031067 0.11702132225036621 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.02069091796875 0.75916588306427 0 1.0 0 0.0 0 0.0 0 0.0 -1.3330157995224 0.11431652307510376 -0.2839455306529999 0.0 0.0 -1.0 0.9365357160568237 0.7316248416900635 0 1.0 0 0.0 0 0.0 0 0.0 -1.637346625328064 0.1158793568611145 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.14502182602882385 0.7068488597869873 0 1.0 0 0.0 0 0.0 0 0.0 -1.5220080614089966 0.11654096841812134 -0.2839455306529999 0.0 0.0 -1.0 0.07370230555534363 0.7506841421127319 0 1.0 0 0.0 0 0.0 0 0.0 -1.5250217914581299 0.11532112956047058 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.0758422315120697 0.7487537860870361 0 1.0 0 0.0 0 0.0 0 0.0 -1.6406108140945435 0.10786223411560059 -0.2839455306529999 0.0 0.0 -1.0 0.14534926414489746 0.6984879970550537 0 1.0 0 0.0 0 0.0 0 0.0 -1.637346625328064 0.1158793568611145 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.14502182602882385 0.7068488597869873 0 1.0 0 0.0 0 0.0 0 0.0 -1.5250217914581299 0.11532112956047058 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.0758422315120697 0.7487537860870361 0 1.0 0 0.0 0 0.0 0 0.0 -1.4477888345718384 0.11433598399162292 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0146870613098145 0.7563359141349792 0 1.0 0 0.0 0 0.0 0 0.0 -1.4513328075408936 0.11576256155967712 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 1.0175414085388184 0.7578567266464233 0 1.0 0 0.0 0 0.0 0 0.0 -1.3330157995224 0.11431652307510376 -0.2839455306529999 0.0 0.0 -1.0 0.9365357160568237 0.7316248416900635 0 1.0 0 0.0 0 0.0 0 0.0 -1.6406108140945435 0.10786223411560059 -0.2839455306529999 0.0 0.0 -1.0 0.14534926414489746 0.6984879970550537 0 1.0 0 0.0 0 0.0 0 0.0 -1.5250217914581299 0.11532112956047058 -0.2839455306529999 0.0 3.0518509447574615e-05 -1.0 0.0758422315120697 0.7487537860870361 0 1.0 0 0.0 0 0.0 0 0.0 -1.5278749465942383 0.11395779252052307 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.0778232216835022 0.746696949005127 0 1.0 0 0.0 0 0.0 0 0.0 -1.4445902109146118 0.11274155974388123 -0.2839455306529999 0.0 0.0 -1.0 1.012126088142395 0.7546167373657227 0 1.0 0 0.0 0 0.0 0 0.0 -1.4477888345718384 0.11433598399162292 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0146870613098145 0.7563359141349792 0 1.0 0 0.0 0 0.0 0 0.0 -1.3330157995224 0.11431652307510376 -0.2839455306529999 0.0 0.0 -1.0 0.9365357160568237 0.7316248416900635 0 1.0 0 0.0 0 0.0 0 0.0 -1.4445902109146118 0.11274155974388123 -0.2839455306529999 0.0 0.0 -1.0 1.012126088142395 0.7546167373657227 0 1.0 0 0.0 0 0.0 0 0.0 -1.3330157995224 0.11431652307510376 -0.2839455306529999 0.0 0.0 -1.0 0.9365357160568237 0.7316248416900635 0 1.0 0 0.0 0 0.0 0 0.0 -1.3318300247192383 0.10725411772727966 -0.2839455306529999 0.0 0.0 -1.0 0.9364566206932068 0.7249259948730469 0 1.0 0 0.0 0 0.0 0 0.0 -1.6406108140945435 0.10786223411560059 -0.2839455306529999 0.0 0.0 -1.0 0.14534926414489746 0.6984879970550537 0 1.0 0 0.0 0 0.0 0 0.0 -1.5278749465942383 0.11395779252052307 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.0778232216835022 0.746696949005127 0 1.0 0 0.0 0 0.0 0 0.0 -1.5305675268173218 0.11245092749595642 -0.2839455306529999 0.0 0.0 -1.0 0.07964730262756348 0.74451744556427 0 1.0 0 0.0 0 0.0 0 0.0 -1.4417370557785034 0.11097931861877441 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 1.0098564624786377 0.7527108192443848 0 1.0 0 0.0 0 0.0 0 0.0 -1.4445902109146118 0.11274155974388123 -0.2839455306529999 0.0 0.0 -1.0 1.012126088142395 0.7546167373657227 0 1.0 0 0.0 0 0.0 0 0.0 -1.3318300247192383 0.10725411772727966 -0.2839455306529999 0.0 0.0 -1.0 0.9364566206932068 0.7249259948730469 0 1.0 0 0.0 0 0.0 0 0.0 -1.6406108140945435 0.10786223411560059 -0.2839455306529999 0.0 0.0 -1.0 0.14534926414489746 0.6984879970550537 0 1.0 0 0.0 0 0.0 0 0.0 -1.5305675268173218 0.11245092749595642 -0.2839455306529999 0.0 0.0 -1.0 0.07964730262756348 0.74451744556427 0 1.0 0 0.0 0 0.0 0 0.0 -1.5330997705459595 0.11080053448677063 -0.2839455306529999 0.0 0.0 -1.0 0.0813169777393341 0.7422186136245728 0 1.0 0 0.0 0 0.0 0 0.0 -1.4392293691635132 0.1090492308139801 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0078752040863037 0.7506272792816162 0 1.0 0 0.0 0 0.0 0 0.0 -1.4417370557785034 0.11097931861877441 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 1.0098564624786377 0.7527108192443848 0 1.0 0 0.0 0 0.0 0 0.0 -1.3318300247192383 0.10725411772727966 -0.2839455306529999 0.0 0.0 -1.0 0.9364566206932068 0.7249259948730469 0 1.0 0 0.0 0 0.0 0 0.0 -1.6406108140945435 0.10786223411560059 -0.2839455306529999 0.0 0.0 -1.0 0.14534926414489746 0.6984879970550537 0 1.0 0 0.0 0 0.0 0 0.0 -1.5330997705459595 0.11080053448677063 -0.2839455306529999 0.0 0.0 -1.0 0.0813169777393341 0.7422186136245728 0 1.0 0 0.0 0 0.0 0 0.0 -1.5355125665664673 0.10897016525268555 -0.2839455306529999 0.0 0.0 -1.0 0.08286002278327942 0.7397554516792297 0 1.0 0 0.0 0 0.0 0 0.0 -1.4369914531707764 0.10692211985588074 -0.2839455306529999 0.0 0.0 -1.0 1.006119728088379 0.7483381628990173 0 1.0 0 0.0 0 0.0 0 0.0 -1.4392293691635132 0.1090492308139801 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0078752040863037 0.7506272792816162 0 1.0 0 0.0 0 0.0 0 0.0 -1.3318300247192383 0.10725411772727966 -0.2839455306529999 0.0 0.0 -1.0 0.9364566206932068 0.7249259948730469 0 1.0 0 0.0 0 0.0 0 0.0 -1.6406108140945435 0.10786223411560059 -0.2839455306529999 0.0 0.0 -1.0 0.14534926414489746 0.6984879970550537 0 1.0 0 0.0 0 0.0 0 0.0 -1.5355125665664673 0.10897016525268555 -0.2839455306529999 0.0 0.0 -1.0 0.08286002278327942 0.7397554516792297 0 1.0 0 0.0 0 0.0 0 0.0 -1.537847638130188 0.10692331194877625 -0.2839455306529999 0.0 0.0 -1.0 0.08430370688438416 0.7370809316635132 0 1.0 0 0.0 0 0.0 0 0.0 -1.643573522567749 0.09945592284202576 -0.2839455306529999 0.0 0.0 -1.0 0.14547201991081238 0.6898198127746582 0 1.0 0 0.0 0 0.0 0 0.0 -1.6406108140945435 0.10786223411560059 -0.2839455306529999 0.0 0.0 -1.0 0.14534926414489746 0.6984879970550537 0 1.0 0 0.0 0 0.0 0 0.0 -1.537847638130188 0.10692331194877625 -0.2839455306529999 0.0 0.0 -1.0 0.08430370688438416 0.7370809316635132 0 1.0 0 0.0 0 0.0 0 0.0 -1.4369914531707764 0.10692211985588074 -0.2839455306529999 0.0 0.0 -1.0 1.006119728088379 0.7483381628990173 0 1.0 0 0.0 0 0.0 0 0.0 -1.3318300247192383 0.10725411772727966 -0.2839455306529999 0.0 0.0 -1.0 0.9364566206932068 0.7249259948730469 0 1.0 0 0.0 0 0.0 0 0.0 -1.3308266401290894 0.09963467717170715 -0.2839455306529999 0.0 0.0 -1.0 0.9365185499191284 0.7176774144172668 0 1.0 0 0.0 0 0.0 0 0.0 -1.643573522567749 0.09945592284202576 -0.2839455306529999 0.0 0.0 -1.0 0.14547201991081238 0.6898198127746582 0 1.0 0 0.0 0 0.0 0 0.0 -1.537847638130188 0.10692331194877625 -0.2839455306529999 0.0 0.0 -1.0 0.08430370688438416 0.7370809316635132 0 1.0 0 0.0 0 0.0 0 0.0 -1.5401049852371216 0.10465997457504272 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08564883470535278 0.7341939210891724 0 1.0 0 0.0 0 0.0 0 0.0 -1.4349483251571655 0.10456877946853638 -0.2839455306529999 0.0 0.0 -1.0 1.0045299530029297 0.7458109259605408 0 1.0 0 0.0 0 0.0 0 0.0 -1.4369914531707764 0.10692211985588074 -0.2839455306529999 0.0 0.0 -1.0 1.006119728088379 0.7483381628990173 0 1.0 0 0.0 0 0.0 0 0.0 -1.3308266401290894 0.09963467717170715 -0.2839455306529999 0.0 0.0 -1.0 0.9365185499191284 0.7176774144172668 0 1.0 0 0.0 0 0.0 0 0.0 -1.643573522567749 0.09945592284202576 -0.2839455306529999 0.0 0.0 -1.0 0.14547201991081238 0.6898198127746582 0 1.0 0 0.0 0 0.0 0 0.0 -1.5401049852371216 0.10465997457504272 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08564883470535278 0.7341939210891724 0 1.0 0 0.0 0 0.0 0 0.0 -1.542284369468689 0.10218015313148499 -0.2839455306529999 0.0 0.0 -1.0 0.08689627051353455 0.7310928106307983 0 1.0 0 0.0 0 0.0 0 0.0 -1.433099627494812 0.10198923945426941 -0.2839455306529999 0.0 0.0 -1.0 1.0031040906906128 0.7430456280708313 0 1.0 0 0.0 0 0.0 0 0.0 -1.4349483251571655 0.10456877946853638 -0.2839455306529999 0.0 0.0 -1.0 1.0045299530029297 0.7458109259605408 0 1.0 0 0.0 0 0.0 0 0.0 -1.3308266401290894 0.09963467717170715 -0.2839455306529999 0.0 0.0 -1.0 0.9365185499191284 0.7176774144172668 0 1.0 0 0.0 0 0.0 0 0.0 -1.643573522567749 0.09945592284202576 -0.2839455306529999 0.0 0.0 -1.0 0.14547201991081238 0.6898198127746582 0 1.0 0 0.0 0 0.0 0 0.0 -1.542284369468689 0.10218015313148499 -0.2839455306529999 0.0 0.0 -1.0 0.08689627051353455 0.7310928106307983 0 1.0 0 0.0 0 0.0 0 0.0 -1.5443859100341797 0.09948384761810303 -0.2839455306529999 0.0 0.0 -1.0 0.08804729580879211 0.727775514125824 0 1.0 0 0.0 0 0.0 0 0.0 -1.4314457178115845 0.09918349981307983 -0.2839455306529999 0.0 0.0 -1.0 1.001840591430664 0.740041196346283 0 1.0 0 0.0 0 0.0 0 0.0 -1.433099627494812 0.10198923945426941 -0.2839455306529999 0.0 0.0 -1.0 1.0031040906906128 0.7430456280708313 0 1.0 0 0.0 0 0.0 0 0.0 -1.3308266401290894 0.09963467717170715 -0.2839455306529999 0.0 0.0 -1.0 0.9365185499191284 0.7176774144172668 0 1.0 0 0.0 0 0.0 0 0.0 -1.4314457178115845 0.09918349981307983 -0.2839455306529999 0.0 0.0 -1.0 1.001840591430664 0.740041196346283 0 1.0 0 0.0 0 0.0 0 0.0 -1.3308266401290894 0.09963467717170715 -0.2839455306529999 0.0 0.0 -1.0 0.9365185499191284 0.7176774144172668 0 1.0 0 0.0 0 0.0 0 0.0 -1.3300057649612427 0.09145823121070862 -0.2839455306529999 0.0 0.0 -1.0 0.9367170333862305 0.7098526954650879 0 1.0 0 0.0 0 0.0 0 0.0 -1.643573522567749 0.09945592284202576 -0.2839455306529999 0.0 0.0 -1.0 0.14547201991081238 0.6898198127746582 0 1.0 0 0.0 0 0.0 0 0.0 -1.5443859100341797 0.09948384761810303 -0.2839455306529999 0.0 0.0 -1.0 0.08804729580879211 0.727775514125824 0 1.0 0 0.0 0 0.0 0 0.0 -1.5464097261428833 0.09657105803489685 -0.2839455306529999 0.0 0.0 -1.0 0.08910319209098816 0.7242394685745239 0 1.0 0 0.0 0 0.0 0 0.0 -1.6462346315383911 0.09066042304039001 -0.2839455306529999 0.0 0.0 -1.0 0.14539822936058044 0.6808279752731323 0 1.0 0 0.0 0 0.0 0 0.0 -1.643573522567749 0.09945592284202576 -0.2839455306529999 0.0 0.0 -1.0 0.14547201991081238 0.6898198127746582 0 1.0 0 0.0 0 0.0 0 0.0 -1.5464097261428833 0.09657105803489685 -0.2839455306529999 0.0 0.0 -1.0 0.08910319209098816 0.7242394685745239 0 1.0 0 0.0 0 0.0 0 0.0 -1.4299862384796143 0.09615153074264526 -0.2839455306529999 0.0 0.0 -1.0 1.000737190246582 0.7367956042289734 0 1.0 0 0.0 0 0.0 0 0.0 -1.4314457178115845 0.09918349981307983 -0.2839455306529999 0.0 0.0 -1.0 1.001840591430664 0.740041196346283 0 1.0 0 0.0 0 0.0 0 0.0 -1.3300057649612427 0.09145823121070862 -0.2839455306529999 0.0 0.0 -1.0 0.9367170333862305 0.7098526954650879 0 1.0 0 0.0 0 0.0 0 0.0 -1.6462346315383911 0.09066042304039001 -0.2839455306529999 0.0 0.0 -1.0 0.14539822936058044 0.6808279752731323 0 1.0 0 0.0 0 0.0 0 0.0 -1.5464097261428833 0.09657105803489685 -0.2839455306529999 0.0 0.0 -1.0 0.08910319209098816 0.7242394685745239 0 1.0 0 0.0 0 0.0 0 0.0 -1.5483555793762207 0.09344181418418884 -0.2839455306529999 0.0 0.0 -1.0 0.09006515145301819 0.7204816341400146 0 1.0 0 0.0 0 0.0 0 0.0 -1.4287214279174805 0.09289336204528809 -0.2839455306529999 0.0 0.0 -1.0 0.9997917413711548 0.733305811882019 0 1.0 0 0.0 0 0.0 0 0.0 -1.4299862384796143 0.09615153074264526 -0.2839455306529999 0.0 0.0 -1.0 1.000737190246582 0.7367956042289734 0 1.0 0 0.0 0 0.0 0 0.0 -1.3300057649612427 0.09145823121070862 -0.2839455306529999 0.0 0.0 -1.0 0.9367170333862305 0.7098526954650879 0 1.0 0 0.0 0 0.0 0 0.0 -1.6462346315383911 0.09066042304039001 -0.2839455306529999 0.0 0.0 -1.0 0.14539822936058044 0.6808279752731323 0 1.0 0 0.0 0 0.0 0 0.0 -1.5483555793762207 0.09344181418418884 -0.2839455306529999 0.0 0.0 -1.0 0.09006515145301819 0.7204816341400146 0 1.0 0 0.0 0 0.0 0 0.0 -1.550223708152771 0.09009608626365662 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.09093481302261353 0.716498613357544 0 1.0 0 0.0 0 0.0 0 0.0 -1.4276511669158936 0.08940896391868591 -0.2839455306529999 0.0 0.0 -1.0 0.999001681804657 0.7295677661895752 0 1.0 0 0.0 0 0.0 0 0.0 -1.4287214279174805 0.09289336204528809 -0.2839455306529999 0.0 0.0 -1.0 0.9997917413711548 0.733305811882019 0 1.0 0 0.0 0 0.0 0 0.0 -1.3300057649612427 0.09145823121070862 -0.2839455306529999 0.0 0.0 -1.0 0.9367170333862305 0.7098526954650879 0 1.0 0 0.0 0 0.0 0 0.0 -1.4276511669158936 0.08940896391868591 -0.2839455306529999 0.0 0.0 -1.0 0.999001681804657 0.7295677661895752 0 1.0 0 0.0 0 0.0 0 0.0 -1.3300057649612427 0.09145823121070862 -0.2839455306529999 0.0 0.0 -1.0 0.9367170333862305 0.7098526954650879 0 1.0 0 0.0 0 0.0 0 0.0 -1.3293672800064087 0.08272477984428406 -0.2839455306529999 0.0 0.0 -1.0 0.9370471835136414 0.7014241814613342 0 1.0 0 0.0 0 0.0 0 0.0 -1.5569175481796265 0.07454833388328552 -0.2839455306529999 0.0 0.0 -1.0 0.09352043271064758 0.6982331871986389 0 1.0 0 0.0 0 0.0 0 0.0 -1.6462346315383911 0.09066042304039001 -0.2839455306529999 0.0 0.0 -1.0 0.14539822936058044 0.6808279752731323 0 1.0 0 0.0 0 0.0 0 0.0 -1.5553607940673828 0.07875999808311462 -0.2839455306529999 0.0 0.0 -1.0 0.09300467371940613 0.7031583786010742 0 1.0 0 0.0 0 0.0 0 0.0 -1.5553607940673828 0.07875999808311462 -0.2839455306529999 0.0 0.0 -1.0 0.09300467371940613 0.7031583786010742 0 1.0 0 0.0 0 0.0 0 0.0 -1.6462346315383911 0.09066042304039001 -0.2839455306529999 0.0 0.0 -1.0 0.14539822936058044 0.6808279752731323 0 1.0 0 0.0 0 0.0 0 0.0 -1.553726315498352 0.0827551782131195 -0.2839455306529999 0.0 0.0 -1.0 0.09240296483039856 0.7078412771224976 0 1.0 0 0.0 0 0.0 0 0.0 -1.553726315498352 0.0827551782131195 -0.2839455306529999 0.0 0.0 -1.0 0.09240296483039856 0.7078412771224976 0 1.0 0 0.0 0 0.0 0 0.0 -1.6462346315383911 0.09066042304039001 -0.2839455306529999 0.0 0.0 -1.0 0.14539822936058044 0.6808279752731323 0 1.0 0 0.0 0 0.0 0 0.0 -1.552013874053955 0.08653387427330017 -0.2839455306529999 0.0 0.0 -1.0 0.09171348810195923 0.7122865319252014 0 1.0 0 0.0 0 0.0 0 0.0 -1.552013874053955 0.08653387427330017 -0.2839455306529999 0.0 0.0 -1.0 0.09171348810195923 0.7122865319252014 0 1.0 0 0.0 0 0.0 0 0.0 -1.6462346315383911 0.09066042304039001 -0.2839455306529999 0.0 0.0 -1.0 0.14539822936058044 0.6808279752731323 0 1.0 0 0.0 0 0.0 0 0.0 -1.550223708152771 0.09009608626365662 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.09093481302261353 0.716498613357544 0 1.0 0 0.0 0 0.0 0 0.0 -1.426775574684143 0.08569836616516113 -0.2839455306529999 0.0 0.0 -1.0 0.9983647465705872 0.7255765199661255 0 1.0 0 0.0 0 0.0 0 0.0 -1.4276511669158936 0.08940896391868591 -0.2839455306529999 0.0 0.0 -1.0 0.999001681804657 0.7295677661895752 0 1.0 0 0.0 0 0.0 0 0.0 -1.3293672800064087 0.08272477984428406 -0.2839455306529999 0.0 0.0 -1.0 0.9370471835136414 0.7014241814613342 0 1.0 0 0.0 0 0.0 0 0.0 -1.42609441280365 0.08176156878471375 -0.2839455306529999 0.0 0.0 -1.0 0.9978780746459961 0.7213261127471924 0 1.0 0 0.0 0 0.0 0 0.0 -1.426775574684143 0.08569836616516113 -0.2839455306529999 0.0 0.0 -1.0 0.9983647465705872 0.7255765199661255 0 1.0 0 0.0 0 0.0 0 0.0 -1.3293672800064087 0.08272477984428406 -0.2839455306529999 0.0 0.0 -1.0 0.9370471835136414 0.7014241814613342 0 1.0 0 0.0 0 0.0 0 0.0 -1.42609441280365 0.08176156878471375 -0.2839455306529999 0.0 0.0 -1.0 0.9978780746459961 0.7213261127471924 0 1.0 0 0.0 0 0.0 0 0.0 -1.3293672800064087 0.08272477984428406 -0.2839455306529999 0.0 0.0 -1.0 0.9370471835136414 0.7014241814613342 0 1.0 0 0.0 0 0.0 0 0.0 -1.3289111852645874 0.07343429327011108 -0.2839455306529999 0.0 0.0 -1.0 0.9375044107437134 0.6923645734786987 0 1.0 0 0.0 0 0.0 0 0.0 -1.4256080389022827 0.07759854197502136 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9975391626358032 0.7168097496032715 0 1.0 0 0.0 0 0.0 0 0.0 -1.42609441280365 0.08176156878471375 -0.2839455306529999 0.0 0.0 -1.0 0.9978780746459961 0.7213261127471924 0 1.0 0 0.0 0 0.0 0 0.0 -1.3289111852645874 0.07343429327011108 -0.2839455306529999 0.0 0.0 -1.0 0.9375044107437134 0.6923645734786987 0 1.0 0 0.0 0 0.0 0 0.0 -1.4253160953521729 0.07320931553840637 -0.2839455306529999 0.0 0.0 -1.0 0.9973450899124146 0.7120200395584106 0 1.0 0 0.0 0 0.0 0 0.0 -1.4256080389022827 0.07759854197502136 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9975391626358032 0.7168097496032715 0 1.0 0 0.0 0 0.0 0 0.0 -1.3289111852645874 0.07343429327011108 -0.2839455306529999 0.0 0.0 -1.0 0.9375044107437134 0.6923645734786987 0 1.0 0 0.0 0 0.0 0 0.0 -1.4253160953521729 0.07320931553840637 -0.2839455306529999 0.0 0.0 -1.0 0.9973450899124146 0.7120200395584106 0 1.0 0 0.0 0 0.0 0 0.0 -1.3289111852645874 0.07343429327011108 -0.2839455306529999 0.0 0.0 -1.0 0.9375044107437134 0.6923645734786987 0 1.0 0 0.0 0 0.0 0 0.0 -1.3286374807357788 0.06358680129051208 -0.2839455306529999 0.0 0.0 -1.0 0.9380841851234436 0.6826471090316772 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 0.06859388947486877 -0.2839455306529999 0.0 0.0 -1.0 0.9972931146621704 0.7069487571716309 0 1.0 0 0.0 0 0.0 0 0.0 -1.4253160953521729 0.07320931553840637 -0.2839455306529999 0.0 0.0 -1.0 0.9973450899124146 0.7120200395584106 0 1.0 0 0.0 0 0.0 0 0.0 -1.3286374807357788 0.06358680129051208 -0.2839455306529999 0.0 0.0 -1.0 0.9380841851234436 0.6826471090316772 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 0.05878652632236481 -0.2839455306529999 0.0 0.0 -1.0 0.9973304867744446 0.6960070133209229 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 0.06859388947486877 -0.2839455306529999 0.0 0.0 -1.0 0.9972931146621704 0.7069487571716309 0 1.0 0 0.0 0 0.0 0 0.0 -1.3286374807357788 0.06358680129051208 -0.2839455306529999 0.0 0.0 -1.0 0.9380841851234436 0.6826471090316772 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 0.05878652632236481 -0.2839455306529999 0.0 0.0 -1.0 0.9973304867744446 0.6960070133209229 0 1.0 0 0.0 0 0.0 0 0.0 -1.3286374807357788 0.06358680129051208 -0.2839455306529999 0.0 0.0 -1.0 0.9380841851234436 0.6826471090316772 0 1.0 0 0.0 0 0.0 0 0.0 -1.3285462856292725 0.053182318806648254 -0.2839455306529999 0.0 0.0 -1.0 0.9387819170951843 0.6722474098205566 0 1.0 0 0.0 0 0.0 0 0.0 -1.4299498796463013 0.056906312704086304 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0006707906723022 0.6942631006240845 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 0.05878652632236481 -0.2839455306529999 0.0 0.0 -1.0 0.9973304867744446 0.6960070133209229 0 1.0 0 0.0 0 0.0 0 0.0 -1.3285462856292725 0.053182318806648254 -0.2839455306529999 0.0 0.0 -1.0 0.9387819170951843 0.6722474098205566 0 1.0 0 0.0 0 0.0 0 0.0 -1.4352694749832153 0.05500175058841705 -0.2839455306529999 0.0 0.0 -1.0 1.0044422149658203 0.692439079284668 0 1.0 0 0.0 0 0.0 0 0.0 -1.4299498796463013 0.056906312704086304 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0006707906723022 0.6942631006240845 0 1.0 0 0.0 0 0.0 0 0.0 -1.3285462856292725 0.053182318806648254 -0.2839455306529999 0.0 0.0 -1.0 0.9387819170951843 0.6722474098205566 0 1.0 0 0.0 0 0.0 0 0.0 -1.4411777257919312 0.05307286977767944 -0.2839455306529999 0.0 0.0 -1.0 1.0086486339569092 0.6905044317245483 0 1.0 0 0.0 0 0.0 0 0.0 -1.4352694749832153 0.05500175058841705 -0.2839455306529999 0.0 0.0 -1.0 1.0044422149658203 0.692439079284668 0 1.0 0 0.0 0 0.0 0 0.0 -1.3285462856292725 0.053182318806648254 -0.2839455306529999 0.0 0.0 -1.0 0.9387819170951843 0.6722474098205566 0 1.0 0 0.0 0 0.0 0 0.0 -1.4411777257919312 0.05307286977767944 -0.2839455306529999 0.0 0.0 -1.0 1.0086486339569092 0.6905044317245483 0 1.0 0 0.0 0 0.0 0 0.0 -1.3285462856292725 0.053182318806648254 -0.2839455306529999 0.0 0.0 -1.0 0.9387819170951843 0.6722474098205566 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 -0.2839455306529999 0.0 0.0 -1.0 0.9464728236198425 0.5510927438735962 0 1.0 0 0.0 0 0.0 0 0.0 -1.4476746320724487 0.051119670271873474 -0.2839455306529999 0.0 0.0 -1.0 1.0132920742034912 0.6884256601333618 0 1.0 0 0.0 0 0.0 0 0.0 -1.4411777257919312 0.05307286977767944 -0.2839455306529999 0.0 0.0 -1.0 1.0086486339569092 0.6905044317245483 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 -0.2839455306529999 0.0 0.0 -1.0 0.9464728236198425 0.5510927438735962 0 1.0 0 0.0 0 0.0 0 0.0 -1.4547600746154785 0.04914213716983795 -0.2839455306529999 0.0 0.0 -1.0 1.0183712244033813 0.6861664056777954 0 1.0 0 0.0 0 0.0 0 0.0 -1.4476746320724487 0.051119670271873474 -0.2839455306529999 0.0 0.0 -1.0 1.0132920742034912 0.6884256601333618 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 -0.2839455306529999 0.0 0.0 -1.0 0.9464728236198425 0.5510927438735962 0 1.0 0 0.0 0 0.0 0 0.0 -1.46243417263031 0.04714028537273407 -0.2839455306529999 0.0 0.0 -1.0 1.0238808393478394 0.6836882829666138 0 1.0 0 0.0 0 0.0 0 0.0 -1.4547600746154785 0.04914213716983795 -0.2839455306529999 0.0 0.0 -1.0 1.0183712244033813 0.6861664056777954 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 -0.2839455306529999 0.0 0.0 -1.0 0.9464728236198425 0.5510927438735962 0 1.0 0 0.0 0 0.0 0 0.0 -1.470697045326233 0.04511411488056183 -0.2839455306529999 0.0 0.0 -1.0 1.029810905456543 0.6809518337249756 0 1.0 0 0.0 0 0.0 0 0.0 -1.46243417263031 0.04714028537273407 -0.2839455306529999 0.0 0.0 -1.0 1.0238808393478394 0.6836882829666138 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 -0.2839455306529999 0.0 0.0 -1.0 0.9464728236198425 0.5510927438735962 0 1.0 0 0.0 0 0.0 0 0.0 -1.479548454284668 0.043063610792160034 -0.2839455306529999 0.0 0.0 -1.0 1.0361446142196655 0.6779175996780396 0 1.0 0 0.0 0 0.0 0 0.0 -1.470697045326233 0.04511411488056183 -0.2839455306529999 0.0 0.0 -1.0 1.029810905456543 0.6809518337249756 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 -0.2839455306529999 0.0 0.0 -1.0 0.9464728236198425 0.5510927438735962 0 1.0 0 0.0 0 0.0 0 0.0 -1.4889885187149048 0.04098878800868988 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0428584814071655 0.6745481491088867 0 1.0 0 0.0 0 0.0 0 0.0 -1.479548454284668 0.043063610792160034 -0.2839455306529999 0.0 0.0 -1.0 1.0361446142196655 0.6779175996780396 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 -0.2839455306529999 0.0 0.0 -1.0 0.9464728236198425 0.5510927438735962 0 1.0 0 0.0 0 0.0 0 0.0 -1.4990172386169434 0.03888964653015137 -0.2839455306529999 0.0 0.0 -1.0 1.0499213933944702 0.6708100438117981 0 1.0 0 0.0 0 0.0 0 0.0 -1.4889885187149048 0.04098878800868988 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0428584814071655 0.6745481491088867 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 -0.2839455306529999 0.0 0.0 -1.0 0.9464728236198425 0.5510927438735962 0 1.0 0 0.0 0 0.0 0 0.0 -1.5096346139907837 0.036766186356544495 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0572938919067383 0.6666763424873352 0 1.0 0 0.0 0 0.0 0 0.0 -1.4990172386169434 0.03888964653015137 -0.2839455306529999 0.0 0.0 -1.0 1.0499213933944702 0.6708100438117981 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.9975510835647583 0.6196885108947754 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.9975510835647583 0.6196885108947754 0 1.0 0 0.0 0 0.0 0 0.0 -1.4990172386169434 0.03888964653015137 -0.2839455306529999 0.0 0.0 -1.0 1.0499213933944702 0.6708100438117981 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 -0.2839455306529999 0.0 0.0 -1.0 0.9464728236198425 0.5510927438735962 0 1.0 0 0.0 0 0.0 0 0.0 -1.5208405256271362 0.03461839258670807 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0649290084838867 0.6621288657188416 0 1.0 0 0.0 0 0.0 0 0.0 -1.5096346139907837 0.036766186356544495 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0572938919067383 0.6666763424873352 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.9975510835647583 0.6196885108947754 0 1.0 0 0.0 0 0.0 0 0.0 -1.529197096824646 0.03296072781085968 -0.2839455306529999 0.0 0.0 -1.0 1.0704984664916992 0.6584956645965576 0 1.0 0 0.0 0 0.0 0 0.0 -1.5208405256271362 0.03461839258670807 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0649290084838867 0.6621288657188416 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.9975510835647583 0.6196885108947754 0 1.0 0 0.0 0 0.0 0 0.0 -1.5372202396392822 0.031256839632987976 -0.2839455306529999 0.0 0.0 -1.0 1.0757272243499756 0.6547515392303467 0 1.0 0 0.0 0 0.0 0 0.0 -1.529197096824646 0.03296072781085968 -0.2839455306529999 0.0 0.0 -1.0 1.0704984664916992 0.6584956645965576 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.9975510835647583 0.6196885108947754 0 1.0 0 0.0 0 0.0 0 0.0 -1.544910192489624 0.02950674295425415 -0.2839455306529999 0.0 0.0 -1.0 1.0806195735931396 0.6509283781051636 0 1.0 0 0.0 0 0.0 0 0.0 -1.5372202396392822 0.031256839632987976 -0.2839455306529999 0.0 0.0 -1.0 1.0757272243499756 0.6547515392303467 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.9975510835647583 0.6196885108947754 0 1.0 0 0.0 0 0.0 0 0.0 -1.5522669553756714 0.027710437774658203 -0.2839455306529999 0.0 0.0 -1.0 1.0851824283599854 0.6470544338226318 0 1.0 0 0.0 0 0.0 0 0.0 -1.544910192489624 0.02950674295425415 -0.2839455306529999 0.0 0.0 -1.0 1.0806195735931396 0.6509283781051636 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.9975510835647583 0.6196885108947754 0 1.0 0 0.0 0 0.0 0 0.0 -1.5592904090881348 0.02586790919303894 -0.2839455306529999 0.0 0.0 -1.0 1.0894246101379395 0.6431540250778198 0 1.0 0 0.0 0 0.0 0 0.0 -1.5522669553756714 0.027710437774658203 -0.2839455306529999 0.0 0.0 -1.0 1.0851824283599854 0.6470544338226318 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.9975510835647583 0.6196885108947754 0 1.0 0 0.0 0 0.0 0 0.0 -1.5659806728363037 0.023979172110557556 -0.2839455306529999 0.0 0.0 -1.0 1.0933563709259033 0.6392477750778198 0 1.0 0 0.0 0 0.0 0 0.0 -1.5592904090881348 0.02586790919303894 -0.2839455306529999 0.0 0.0 -1.0 1.0894246101379395 0.6431540250778198 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.9975510835647583 0.6196885108947754 0 1.0 0 0.0 0 0.0 0 0.0 -1.5723377466201782 0.022044211626052856 -0.2839455306529999 0.0 0.0 -1.0 1.0969890356063843 0.6353528499603271 0 1.0 0 0.0 0 0.0 0 0.0 -1.5659806728363037 0.023979172110557556 -0.2839455306529999 0.0 0.0 -1.0 1.0933563709259033 0.6392477750778198 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.9975510835647583 0.6196885108947754 0 1.0 0 0.0 0 0.0 0 0.0 -1.5783613920211792 0.020063042640686035 -0.2839455306529999 0.0 0.0 -1.0 1.1003341674804688 0.6314833760261536 0 1.0 0 0.0 0 0.0 0 0.0 -1.5723377466201782 0.022044211626052856 -0.2839455306529999 0.0 0.0 -1.0 1.0969890356063843 0.6353528499603271 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.9975510835647583 0.6196885108947754 0 1.0 0 0.0 0 0.0 0 0.0 -1.5840519666671753 0.0180356502532959 -0.2839455306529999 0.0 0.0 -1.0 1.1034035682678223 0.6276503801345825 0 1.0 0 0.0 0 0.0 0 0.0 -1.5783613920211792 0.020063042640686035 -0.2839455306529999 0.0 0.0 -1.0 1.1003341674804688 0.6314833760261536 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.9975510835647583 0.6196885108947754 0 1.0 0 0.0 0 0.0 0 0.0 -1.589409351348877 0.01596204936504364 -0.2839455306529999 0.0 0.0 -1.0 1.1062092781066895 0.6238624453544617 0 1.0 0 0.0 0 0.0 0 0.0 -1.5840519666671753 0.0180356502532959 -0.2839455306529999 0.0 0.0 -1.0 1.1034035682678223 0.6276503801345825 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.9975510835647583 0.6196885108947754 0 1.0 0 0.0 0 0.0 0 0.0 -1.5944334268569946 0.013842225074768066 -0.2839455306529999 0.0 0.0 -1.0 1.1087620258331299 0.6201258897781372 0 1.0 0 0.0 0 0.0 0 0.0 -1.589409351348877 0.01596204936504364 -0.2839455306529999 0.0 0.0 -1.0 1.1062092781066895 0.6238624453544617 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.9975510835647583 0.6196885108947754 0 1.0 0 0.0 0 0.0 0 0.0 -1.5991243124008179 0.011676192283630371 -0.2839455306529999 0.0 0.0 -1.0 1.1110731363296509 0.616445004940033 0 1.0 0 0.0 0 0.0 0 0.0 -1.5944334268569946 0.013842225074768066 -0.2839455306529999 0.0 0.0 -1.0 1.1087620258331299 0.6201258897781372 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.9975510835647583 0.6196885108947754 0 1.0 0 0.0 0 0.0 0 0.0 -1.6035646200180054 0.009406790137290955 -0.2839455306529999 0.0 0.0 -1.0 1.1131898164749146 0.6127371788024902 0 1.0 0 0.0 0 0.0 0 0.0 -1.5991243124008179 0.011676192283630371 -0.2839455306529999 0.0 0.0 -1.0 1.1110731363296509 0.616445004940033 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.9975510835647583 0.6196885108947754 0 1.0 0 0.0 0 0.0 0 0.0 -1.6078370809555054 0.0069768428802490234 -0.2839455306529999 0.0 0.0 -1.0 1.115155816078186 0.6089204549789429 0 1.0 0 0.0 0 0.0 0 0.0 -1.6035646200180054 0.009406790137290955 -0.2839455306529999 0.0 0.0 -1.0 1.1131898164749146 0.6127371788024902 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.9975510835647583 0.6196885108947754 0 1.0 0 0.0 0 0.0 0 0.0 -1.6119416952133179 0.004386350512504578 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.116976022720337 0.6049986481666565 0 1.0 0 0.0 0 0.0 0 0.0 -1.6078370809555054 0.0069768428802490234 -0.2839455306529999 0.0 0.0 -1.0 1.115155816078186 0.6089204549789429 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.9975510835647583 0.6196885108947754 0 1.0 0 0.0 0 0.0 0 0.0 -1.6158784627914429 0.001635327935218811 -0.2839455306529999 0.0 0.0 -1.0 1.1186549663543701 0.6009750366210938 0 1.0 0 0.0 0 0.0 0 0.0 -1.6119416952133179 0.004386350512504578 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.116976022720337 0.6049986481666565 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.9975510835647583 0.6196885108947754 0 1.0 0 0.0 0 0.0 0 0.0 -1.6196473836898804 -0.0012762397527694702 -0.2839455306529999 0.0 0.0 -1.0 1.1201975345611572 0.59685218334198 0 1.0 0 0.0 0 0.0 0 0.0 -1.6158784627914429 0.001635327935218811 -0.2839455306529999 0.0 0.0 -1.0 1.1186549663543701 0.6009750366210938 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.9975510835647583 0.6196885108947754 0 1.0 0 0.0 0 0.0 0 0.0 -1.62324857711792 -0.004348337650299072 -0.2839455306529999 0.0 0.0 -1.0 1.1216081380844116 0.5926323533058167 0 1.0 0 0.0 0 0.0 0 0.0 -1.6196473836898804 -0.0012762397527694702 -0.2839455306529999 0.0 0.0 -1.0 1.1201975345611572 0.59685218334198 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.9975510835647583 0.6196885108947754 0 1.0 0 0.0 0 0.0 0 0.0 -1.626681923866272 -0.007580965757369995 -0.2839455306529999 0.0 0.0 -1.0 1.1228907108306885 0.5883170366287231 0 1.0 0 0.0 0 0.0 0 0.0 -1.62324857711792 -0.004348337650299072 -0.2839455306529999 0.0 0.0 -1.0 1.1216081380844116 0.5926323533058167 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.9975510835647583 0.6196885108947754 0 1.0 0 0.0 0 0.0 0 0.0 -1.626681923866272 -0.007580965757369995 -0.2839455306529999 0.0 0.0 -1.0 1.1228907108306885 0.5883170366287231 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.9975510835647583 0.6196885108947754 0 1.0 0 0.0 0 0.0 0 0.0 -1.428524374961853 -0.006379365921020508 -0.2839455306529999 0.0 0.0 -1.0 0.9996907711029053 0.6184368133544922 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.024926260113716125 -0.2839455306529999 0.0 0.0 -1.0 0.9976115226745605 0.5954424738883972 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 -0.2839455306529999 0.0 6.103701889514923e-05 -1.0 0.9975510835647583 0.6196885108947754 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 -0.2839455306529999 0.0 0.0 -1.0 0.9464728236198425 0.5510927438735962 0 1.0 0 0.0 0 0.0 0 0.0 -1.626681923866272 -0.007580965757369995 -0.2839455306529999 0.0 0.0 -1.0 1.1228907108306885 0.5883170366287231 0 1.0 0 0.0 0 0.0 0 0.0 -1.428524374961853 -0.006379365921020508 -0.2839455306529999 0.0 0.0 -1.0 0.9996907711029053 0.6184368133544922 0 1.0 0 0.0 0 0.0 0 0.0 -1.4321365356445312 -0.007481232285499573 -0.2839455306529999 0.0 0.0 -1.0 1.002036690711975 0.6171183586120605 0 1.0 0 0.0 0 0.0 0 0.0 -1.626681923866272 -0.007580965757369995 -0.2839455306529999 0.0 0.0 -1.0 0.12289077043533325 0.5883170366287231 0 1.0 0 0.0 0 0.0 0 0.0 -1.4321365356445312 -0.007481232285499573 -0.2839455306529999 0.0 0.0 -1.0 0.0020366907119750977 0.6171183586120605 0 1.0 0 0.0 0 0.0 0 0.0 -1.436055064201355 -0.00861714780330658 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.004590243101119995 0.615726113319397 0 1.0 0 0.0 0 0.0 0 0.0 -1.629947304725647 -0.010974138975143433 -0.2839455306529999 0.0 0.0 -1.0 0.12404951453208923 0.5839077234268188 0 1.0 0 0.0 0 0.0 0 0.0 -1.626681923866272 -0.007580965757369995 -0.2839455306529999 0.0 0.0 -1.0 0.12289077043533325 0.5883170366287231 0 1.0 0 0.0 0 0.0 0 0.0 -1.436055064201355 -0.00861714780330658 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.004590243101119995 0.615726113319397 0 1.0 0 0.0 0 0.0 0 0.0 -1.629947304725647 -0.010974138975143433 -0.2839455306529999 0.0 0.0 -1.0 0.12404951453208923 0.5839077234268188 0 1.0 0 0.0 0 0.0 0 0.0 -1.436055064201355 -0.00861714780330658 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.004590243101119995 0.615726113319397 0 1.0 0 0.0 0 0.0 0 0.0 -1.4402800798416138 -0.009787127375602722 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.007352739572525024 0.6142528057098389 0 1.0 0 0.0 0 0.0 0 0.0 -1.629947304725647 -0.010974138975143433 -0.2839455306529999 0.0 0.0 -1.0 0.12404951453208923 0.5839077234268188 0 1.0 0 0.0 0 0.0 0 0.0 -1.4402800798416138 -0.009787127375602722 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.007352739572525024 0.6142528057098389 0 1.0 0 0.0 0 0.0 0 0.0 -1.4448117017745972 -0.010991156101226807 -0.2839455306529999 0.0 0.0 -1.0 0.010325044393539429 0.6126905679702759 0 1.0 0 0.0 0 0.0 0 0.0 -1.6330450773239136 -0.014527842402458191 -0.2839455306529999 0.0 0.0 -1.0 0.12508833408355713 0.5794050693511963 0 1.0 0 0.0 0 0.0 0 0.0 -1.629947304725647 -0.010974138975143433 -0.2839455306529999 0.0 0.0 -1.0 0.12404951453208923 0.5839077234268188 0 1.0 0 0.0 0 0.0 0 0.0 -1.4448117017745972 -0.010991156101226807 -0.2839455306529999 0.0 0.0 -1.0 0.010325044393539429 0.6126905679702759 0 1.0 0 0.0 0 0.0 0 0.0 -1.6330450773239136 -0.014527842402458191 -0.2839455306529999 0.0 0.0 -1.0 0.12508833408355713 0.5794050693511963 0 1.0 0 0.0 0 0.0 0 0.0 -1.4448117017745972 -0.010991156101226807 -0.2839455306529999 0.0 0.0 -1.0 0.010325044393539429 0.6126905679702759 0 1.0 0 0.0 0 0.0 0 0.0 -1.449649691581726 -0.012229233980178833 -0.2839455306529999 0.0 0.0 -1.0 0.013507217168807983 0.6110315918922424 0 1.0 0 0.0 0 0.0 0 0.0 -1.6330450773239136 -0.014527842402458191 -0.2839455306529999 0.0 0.0 -1.0 0.12508833408355713 0.5794050693511963 0 1.0 0 0.0 0 0.0 0 0.0 -1.449649691581726 -0.012229233980178833 -0.2839455306529999 0.0 0.0 -1.0 0.013507217168807983 0.6110315918922424 0 1.0 0 0.0 0 0.0 0 0.0 -1.4547940492630005 -0.013501375913619995 -0.2839455306529999 0.0 0.0 -1.0 0.016898751258850098 0.6092678904533386 0 1.0 0 0.0 0 0.0 0 0.0 -1.6330450773239136 -0.014527842402458191 -0.2839455306529999 0.0 0.0 -1.0 0.12508833408355713 0.5794050693511963 0 1.0 0 0.0 0 0.0 0 0.0 -1.4547940492630005 -0.013501375913619995 -0.2839455306529999 0.0 0.0 -1.0 0.016898751258850098 0.6092678904533386 0 1.0 0 0.0 0 0.0 0 0.0 -1.4602450132369995 -0.014807567000389099 -0.2839455306529999 0.0 0.0 -1.0 0.020498305559158325 0.6073914766311646 0 1.0 0 0.0 0 0.0 0 0.0 -1.6359747648239136 -0.018242090940475464 -0.2839455306529999 0.0 0.0 -1.0 0.12601065635681152 0.5748099088668823 0 1.0 0 0.0 0 0.0 0 0.0 -1.6330450773239136 -0.014527842402458191 -0.2839455306529999 0.0 0.0 -1.0 0.12508833408355713 0.5794050693511963 0 1.0 0 0.0 0 0.0 0 0.0 -1.4602450132369995 -0.014807567000389099 -0.2839455306529999 0.0 0.0 -1.0 0.020498305559158325 0.6073914766311646 0 1.0 0 0.0 0 0.0 0 0.0 -1.6359747648239136 -0.018242090940475464 -0.2839455306529999 0.0 0.0 -1.0 0.12601065635681152 0.5748099088668823 0 1.0 0 0.0 0 0.0 0 0.0 -1.4602450132369995 -0.014807567000389099 -0.2839455306529999 0.0 0.0 -1.0 0.020498305559158325 0.6073914766311646 0 1.0 0 0.0 0 0.0 0 0.0 -1.4660025835037231 -0.016147807240486145 -0.2839455306529999 0.0 0.0 -1.0 0.0243033766746521 0.6053946018218994 0 1.0 0 0.0 0 0.0 0 0.0 -1.6359747648239136 -0.018242090940475464 -0.2839455306529999 0.0 0.0 -1.0 0.12601065635681152 0.5748099088668823 0 1.0 0 0.0 0 0.0 0 0.0 -1.4660025835037231 -0.016147807240486145 -0.2839455306529999 0.0 0.0 -1.0 0.0243033766746521 0.6053946018218994 0 1.0 0 0.0 0 0.0 0 0.0 -1.4720665216445923 -0.017522096633911133 -0.2839455306529999 0.0 0.0 -1.0 0.028309911489486694 0.6032699346542358 0 1.0 0 0.0 0 0.0 0 0.0 -1.6359747648239136 -0.018242090940475464 -0.2839455306529999 0.0 0.0 -1.0 0.12601065635681152 0.5748099088668823 0 1.0 0 0.0 0 0.0 0 0.0 -1.4720665216445923 -0.017522096633911133 -0.2839455306529999 0.0 0.0 -1.0 0.028309911489486694 0.6032699346542358 0 1.0 0 0.0 0 0.0 0 0.0 -1.478436827659607 -0.018930450081825256 -0.2839455306529999 0.0 0.0 -1.0 0.032512813806533813 0.601010799407959 0 1.0 0 0.0 0 0.0 0 0.0 -1.6387368440628052 -0.022116869688034058 -0.2839455306529999 0.0 0.0 -1.0 0.1268201470375061 0.570122480392456 0 1.0 0 0.0 0 0.0 0 0.0 -1.6359747648239136 -0.018242090940475464 -0.2839455306529999 0.0 0.0 -1.0 0.12601065635681152 0.5748099088668823 0 1.0 0 0.0 0 0.0 0 0.0 -1.478436827659607 -0.018930450081825256 -0.2839455306529999 0.0 0.0 -1.0 0.032512813806533813 0.601010799407959 0 1.0 0 0.0 0 0.0 0 0.0 -1.6387368440628052 -0.022116869688034058 -0.2839455306529999 0.0 0.0 -1.0 0.1268201470375061 0.570122480392456 0 1.0 0 0.0 0 0.0 0 0.0 -1.478436827659607 -0.018930450081825256 -0.2839455306529999 0.0 0.0 -1.0 0.032512813806533813 0.601010799407959 0 1.0 0 0.0 0 0.0 0 0.0 -1.4851137399673462 -0.020372852683067322 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.036905378103256226 0.59861159324646 0 1.0 0 0.0 0 0.0 0 0.0 -1.6387368440628052 -0.022116869688034058 -0.2839455306529999 0.0 0.0 -1.0 0.1268201470375061 0.570122480392456 0 1.0 0 0.0 0 0.0 0 0.0 -1.4851137399673462 -0.020372852683067322 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.036905378103256226 0.59861159324646 0 1.0 0 0.0 0 0.0 0 0.0 -1.4917467832565308 -0.021829843521118164 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.04124736785888672 0.5961276888847351 0 1.0 0 0.0 0 0.0 0 0.0 -1.6387368440628052 -0.022116869688034058 -0.2839455306529999 0.0 0.0 -1.0 0.1268201470375061 0.570122480392456 0 1.0 0 0.0 0 0.0 0 0.0 -1.4917467832565308 -0.021829843521118164 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.04124736785888672 0.5961276888847351 0 1.0 0 0.0 0 0.0 0 0.0 -1.4979859590530396 -0.023281976580619812 -0.2839455306529999 0.0 0.0 -1.0 0.045302391052246094 0.5936297178268433 0 1.0 0 0.0 0 0.0 0 0.0 -1.6413308382034302 -0.026152193546295166 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.12751969695091248 0.5653431415557861 0 1.0 0 0.0 0 0.0 0 0.0 -1.6387368440628052 -0.022116869688034058 -0.2839455306529999 0.0 0.0 -1.0 0.1268201470375061 0.570122480392456 0 1.0 0 0.0 0 0.0 0 0.0 -1.4979859590530396 -0.023281976580619812 -0.2839455306529999 0.0 0.0 -1.0 0.045302391052246094 0.5936297178268433 0 1.0 0 0.0 0 0.0 0 0.0 -1.6413308382034302 -0.026152193546295166 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.12751969695091248 0.5653431415557861 0 1.0 0 0.0 0 0.0 0 0.0 -1.4979859590530396 -0.023281976580619812 -0.2839455306529999 0.0 0.0 -1.0 0.045302391052246094 0.5936297178268433 0 1.0 0 0.0 0 0.0 0 0.0 -1.503830909729004 -0.024729236960411072 -0.2839455306529999 0.0 0.0 -1.0 0.049069106578826904 0.591133713722229 0 1.0 0 0.0 0 0.0 0 0.0 -1.6413308382034302 -0.026152193546295166 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.12751969695091248 0.5653431415557861 0 1.0 0 0.0 0 0.0 0 0.0 -1.503830909729004 -0.024729236960411072 -0.2839455306529999 0.0 0.0 -1.0 0.049069106578826904 0.591133713722229 0 1.0 0 0.0 0 0.0 0 0.0 -1.509281873703003 -0.026171639561653137 -0.2839455306529999 0.0 0.0 -1.0 0.05254825949668884 0.5886538028717041 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252455234527588 -0.030664265155792236 -0.2839455306529999 0.0 0.0 -1.0 0.9976453185081482 0.5883469581604004 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.024926260113716125 -0.2839455306529999 0.0 0.0 -1.0 0.9976115226745605 0.5954424738883972 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 -0.2839455306529999 0.0 0.0 -1.0 0.9464728236198425 0.5510927438735962 0 1.0 0 0.0 0 0.0 0 0.0 -1.6437366008758545 -0.03031519055366516 -0.2839455306529999 0.0 0.0 -1.0 0.1281072497367859 0.5605101585388184 0 1.0 0 0.0 0 0.0 0 0.0 -1.6413308382034302 -0.026152193546295166 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.12751969695091248 0.5653431415557861 0 1.0 0 0.0 0 0.0 0 0.0 -1.509281873703003 -0.026171639561653137 -0.2839455306529999 0.0 0.0 -1.0 0.05254825949668884 0.5886538028717041 0 1.0 0 0.0 0 0.0 0 0.0 -1.6437366008758545 -0.03031519055366516 -0.2839455306529999 0.0 0.0 -1.0 0.1281072497367859 0.5605101585388184 0 1.0 0 0.0 0 0.0 0 0.0 -1.509281873703003 -0.026171639561653137 -0.2839455306529999 0.0 0.0 -1.0 0.05254825949668884 0.5886538028717041 0 1.0 0 0.0 0 0.0 0 0.0 -1.5143388509750366 -0.027609169483184814 -0.2839455306529999 0.0 0.0 -1.0 0.05574190616607666 0.5862020254135132 0 1.0 0 0.0 0 0.0 0 0.0 -1.6437366008758545 -0.03031519055366516 -0.2839455306529999 0.0 0.0 -1.0 0.1281072497367859 0.5605101585388184 0 1.0 0 0.0 0 0.0 0 0.0 -1.5143388509750366 -0.027609169483184814 -0.2839455306529999 0.0 0.0 -1.0 0.05574190616607666 0.5862020254135132 0 1.0 0 0.0 0 0.0 0 0.0 -1.5190016031265259 -0.029041841626167297 -0.2839455306529999 0.0 0.0 -1.0 0.05865311622619629 0.5837885141372681 0 1.0 0 0.0 0 0.0 0 0.0 -1.6437366008758545 -0.03031519055366516 -0.2839455306529999 0.0 0.0 -1.0 0.1281072497367859 0.5605101585388184 0 1.0 0 0.0 0 0.0 0 0.0 -1.5190016031265259 -0.029041841626167297 -0.2839455306529999 0.0 0.0 -1.0 0.05865311622619629 0.5837885141372681 0 1.0 0 0.0 0 0.0 0 0.0 -1.5232704877853394 -0.030469655990600586 -0.2839455306529999 0.0 0.0 -1.0 0.06128603219985962 0.5814216136932373 0 1.0 0 0.0 0 0.0 0 0.0 -1.6459330320358276 -0.03457307815551758 -0.2839455306529999 0.0 0.0 -1.0 0.12858033180236816 0.5556603074073792 0 1.0 0 0.0 0 0.0 0 0.0 -1.6437366008758545 -0.03031519055366516 -0.2839455306529999 0.0 0.0 -1.0 0.1281072497367859 0.5605101585388184 0 1.0 0 0.0 0 0.0 0 0.0 -1.5232704877853394 -0.030469655990600586 -0.2839455306529999 0.0 0.0 -1.0 0.06128603219985962 0.5814216136932373 0 1.0 0 0.0 0 0.0 0 0.0 -1.6459330320358276 -0.03457307815551758 -0.2839455306529999 0.0 0.0 -1.0 0.12858033180236816 0.5556603074073792 0 1.0 0 0.0 0 0.0 0 0.0 -1.5232704877853394 -0.030469655990600586 -0.2839455306529999 0.0 0.0 -1.0 0.06128603219985962 0.5814216136932373 0 1.0 0 0.0 0 0.0 0 0.0 -1.527145266532898 -0.031892597675323486 -0.2839455306529999 0.0 0.0 -1.0 0.0636448860168457 0.5791078805923462 0 1.0 0 0.0 0 0.0 0 0.0 -1.4253257513046265 -0.03608603775501251 -0.2839455306529999 0.0 0.0 -1.0 0.9977109432220459 0.581652045249939 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252455234527588 -0.030664265155792236 -0.2839455306529999 0.0 0.0 -1.0 0.9976453185081482 0.5883469581604004 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 -0.2839455306529999 0.0 0.0 -1.0 0.9464728236198425 0.5510927438735962 0 1.0 0 0.0 0 0.0 0 0.0 -1.6459330320358276 -0.03457307815551758 -0.2839455306529999 0.0 0.0 -1.0 0.12858033180236816 0.5556603074073792 0 1.0 0 0.0 0 0.0 0 0.0 -1.527145266532898 -0.031892597675323486 -0.2839455306529999 0.0 0.0 -1.0 0.0636448860168457 0.5791078805923462 0 1.0 0 0.0 0 0.0 0 0.0 -1.5306259393692017 -0.03331068158149719 -0.2839455306529999 0.0 0.0 -1.0 0.06573435664176941 0.5768525004386902 0 1.0 0 0.0 0 0.0 0 0.0 -1.6459330320358276 -0.03457307815551758 -0.2839455306529999 0.0 0.0 -1.0 0.12858033180236816 0.5556603074073792 0 1.0 0 0.0 0 0.0 0 0.0 -1.5306259393692017 -0.03331068158149719 -0.2839455306529999 0.0 0.0 -1.0 0.06573435664176941 0.5768525004386902 0 1.0 0 0.0 0 0.0 0 0.0 -1.5337127447128296 -0.03472389280796051 -0.2839455306529999 0.0 0.0 -1.0 0.06755927205085754 0.5746594667434692 0 1.0 0 0.0 0 0.0 0 0.0 -1.6479202508926392 -0.03892582654953003 -0.2839455306529999 0.0 0.0 -1.0 0.12894189357757568 0.5507911443710327 0 1.0 0 0.0 0 0.0 0 0.0 -1.6459330320358276 -0.03457307815551758 -0.2839455306529999 0.0 0.0 -1.0 0.12858033180236816 0.5556603074073792 0 1.0 0 0.0 0 0.0 0 0.0 -1.5337127447128296 -0.03472389280796051 -0.2839455306529999 0.0 0.0 -1.0 0.06755927205085754 0.5746594667434692 0 1.0 0 0.0 0 0.0 0 0.0 -1.6479202508926392 -0.03892582654953003 -0.2839455306529999 0.0 0.0 -1.0 0.12894189357757568 0.5507911443710327 0 1.0 0 0.0 0 0.0 0 0.0 -1.5337127447128296 -0.03472389280796051 -0.2839455306529999 0.0 0.0 -1.0 0.06755927205085754 0.5746594667434692 0 1.0 0 0.0 0 0.0 0 0.0 -1.536405324935913 -0.036132246255874634 -0.2839455306529999 0.0 0.0 -1.0 0.06912404298782349 0.5725313425064087 0 1.0 0 0.0 0 0.0 0 0.0 -1.4254595041275024 -0.04119160771369934 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9978078603744507 0.5753602981567383 0 1.0 0 0.0 0 0.0 0 0.0 -1.4253257513046265 -0.03608603775501251 -0.2839455306529999 0.0 0.0 -1.0 0.9977109432220459 0.581652045249939 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 -0.2839455306529999 0.0 0.0 -1.0 0.9464728236198425 0.5510927438735962 0 1.0 0 0.0 0 0.0 0 0.0 -1.6479202508926392 -0.03892582654953003 -0.2839455306529999 0.0 0.0 -1.0 0.12894189357757568 0.5507911443710327 0 1.0 0 0.0 0 0.0 0 0.0 -1.536405324935913 -0.036132246255874634 -0.2839455306529999 0.0 0.0 -1.0 0.06912404298782349 0.5725313425064087 0 1.0 0 0.0 0 0.0 0 0.0 -1.5387039184570312 -0.03753572702407837 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.070433109998703 0.5704699754714966 0 1.0 0 0.0 0 0.0 0 0.0 -1.6479202508926392 -0.03892582654953003 -0.2839455306529999 0.0 0.0 -1.0 0.12894189357757568 0.5507911443710327 0 1.0 0 0.0 0 0.0 0 0.0 -1.5387039184570312 -0.03753572702407837 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.070433109998703 0.5704699754714966 0 1.0 0 0.0 0 0.0 0 0.0 -1.5417808294296265 -0.03986351191997528 -0.2839455306529999 0.0 0.0 -1.0 0.07213199138641357 0.5671678185462952 0 1.0 0 0.0 0 0.0 0 0.0 -1.6496983766555786 -0.043373435735702515 -0.2839455306529999 0.0 0.0 -1.0 0.1291947066783905 0.5459003448486328 0 1.0 0 0.0 0 0.0 0 0.0 -1.6479202508926392 -0.03892582654953003 -0.2839455306529999 0.0 0.0 -1.0 0.12894189357757568 0.5507911443710327 0 1.0 0 0.0 0 0.0 0 0.0 -1.5417808294296265 -0.03986351191997528 -0.2839455306529999 0.0 0.0 -1.0 0.07213199138641357 0.5671678185462952 0 1.0 0 0.0 0 0.0 0 0.0 -1.6496983766555786 -0.043373435735702515 -0.2839455306529999 0.0 0.0 -1.0 0.1291947066783905 0.5459003448486328 0 1.0 0 0.0 0 0.0 0 0.0 -1.5417808294296265 -0.03986351191997528 -0.2839455306529999 0.0 0.0 -1.0 0.07213199138641357 0.5671678185462952 0 1.0 0 0.0 0 0.0 0 0.0 -1.5445903539657593 -0.04229345917701721 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07364055514335632 0.5637936592102051 0 1.0 0 0.0 0 0.0 0 0.0 -1.4256469011306763 -0.04598096013069153 -0.2839455306529999 0.0 0.0 -1.0 0.9979357123374939 0.5694729089736938 0 1.0 0 0.0 0 0.0 0 0.0 -1.4254595041275024 -0.04119160771369934 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9978078603744507 0.5753602981567383 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 -0.2839455306529999 0.0 0.0 -1.0 0.9464728236198425 0.5510927438735962 0 1.0 0 0.0 0 0.0 0 0.0 -1.6496983766555786 -0.043373435735702515 -0.2839455306529999 0.0 0.0 -1.0 0.1291947066783905 0.5459003448486328 0 1.0 0 0.0 0 0.0 0 0.0 -1.5445903539657593 -0.04229345917701721 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07364055514335632 0.5637936592102051 0 1.0 0 0.0 0 0.0 0 0.0 -1.547132134437561 -0.04482556879520416 -0.2839455306529999 0.0 0.0 -1.0 0.07496204972267151 0.5603500008583069 0 1.0 0 0.0 0 0.0 0 0.0 -1.651267170906067 -0.047915905714035034 -0.2839455306529999 0.0 0.0 -1.0 0.12934094667434692 0.5409854650497437 0 1.0 0 0.0 0 0.0 0 0.0 -1.6496983766555786 -0.043373435735702515 -0.2839455306529999 0.0 0.0 -1.0 0.1291947066783905 0.5459003448486328 0 1.0 0 0.0 0 0.0 0 0.0 -1.547132134437561 -0.04482556879520416 -0.2839455306529999 0.0 0.0 -1.0 0.07496204972267151 0.5603500008583069 0 1.0 0 0.0 0 0.0 0 0.0 -1.651267170906067 -0.047915905714035034 -0.2839455306529999 0.0 0.0 -1.0 0.12934094667434692 0.5409854650497437 0 1.0 0 0.0 0 0.0 0 0.0 -1.547132134437561 -0.04482556879520416 -0.2839455306529999 0.0 0.0 -1.0 0.07496204972267151 0.5603500008583069 0 1.0 0 0.0 0 0.0 0 0.0 -1.5494064092636108 -0.04745984077453613 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07609990239143372 0.5568383932113647 0 1.0 0 0.0 0 0.0 0 0.0 -1.4258877038955688 -0.05045410990715027 -0.2839455306529999 0.0 0.0 -1.0 0.9980939626693726 0.5639892220497131 0 1.0 0 0.0 0 0.0 0 0.0 -1.4256469011306763 -0.04598096013069153 -0.2839455306529999 0.0 0.0 -1.0 0.9979357123374939 0.5694729089736938 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 -0.2839455306529999 0.0 0.0 -1.0 0.9464728236198425 0.5510927438735962 0 1.0 0 0.0 0 0.0 0 0.0 -1.651267170906067 -0.047915905714035034 -0.2839455306529999 0.0 0.0 -1.0 0.12934094667434692 0.5409854650497437 0 1.0 0 0.0 0 0.0 0 0.0 -1.5494064092636108 -0.04745984077453613 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07609990239143372 0.5568383932113647 0 1.0 0 0.0 0 0.0 0 0.0 -1.5514131784439087 -0.05019627511501312 -0.2839455306529999 0.0 0.0 -1.0 0.07705748081207275 0.5532599687576294 0 1.0 0 0.0 0 0.0 0 0.0 -1.652626872062683 -0.05255323648452759 -0.2839455306529999 0.0 0.0 -1.0 0.1293828785419464 0.5360437631607056 0 1.0 0 0.0 0 0.0 0 0.0 -1.651267170906067 -0.047915905714035034 -0.2839455306529999 0.0 0.0 -1.0 0.12934094667434692 0.5409854650497437 0 1.0 0 0.0 0 0.0 0 0.0 -1.5514131784439087 -0.05019627511501312 -0.2839455306529999 0.0 0.0 -1.0 0.07705748081207275 0.5532599687576294 0 1.0 0 0.0 0 0.0 0 0.0 -1.652626872062683 -0.05255323648452759 -0.2839455306529999 0.0 0.0 -1.0 0.1293828785419464 0.5360437631607056 0 1.0 0 0.0 0 0.0 0 0.0 -1.5514131784439087 -0.05019627511501312 -0.2839455306529999 0.0 0.0 -1.0 0.07705748081207275 0.5532599687576294 0 1.0 0 0.0 0 0.0 0 0.0 -1.5531522035598755 -0.05303485691547394 -0.2839455306529999 0.0 0.0 -1.0 0.07783758640289307 0.5496155023574829 0 1.0 0 0.0 0 0.0 0 0.0 -1.4261819124221802 -0.05461104214191437 -0.2839455306529999 0.0 0.0 -1.0 0.9982823729515076 0.5589078664779663 0 1.0 0 0.0 0 0.0 0 0.0 -1.4258877038955688 -0.05045410990715027 -0.2839455306529999 0.0 0.0 -1.0 0.9980939626693726 0.5639892220497131 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 -0.2839455306529999 0.0 0.0 -1.0 0.9464728236198425 0.5510927438735962 0 1.0 0 0.0 0 0.0 0 0.0 -1.6537773609161377 -0.057285428047180176 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.129322350025177 0.5310729742050171 0 1.0 0 0.0 0 0.0 0 0.0 -1.652626872062683 -0.05255323648452759 -0.2839455306529999 0.0 0.0 -1.0 0.1293828785419464 0.5360437631607056 0 1.0 0 0.0 0 0.0 0 0.0 -1.5531522035598755 -0.05303485691547394 -0.2839455306529999 0.0 0.0 -1.0 0.07783758640289307 0.5496155023574829 0 1.0 0 0.0 0 0.0 0 0.0 -1.6537773609161377 -0.057285428047180176 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.129322350025177 0.5310729742050171 0 1.0 0 0.0 0 0.0 0 0.0 -1.5531522035598755 -0.05303485691547394 -0.2839455306529999 0.0 0.0 -1.0 0.07783758640289307 0.5496155023574829 0 1.0 0 0.0 0 0.0 0 0.0 -1.5546238422393799 -0.05597560107707977 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.0784434974193573 0.5459051728248596 0 1.0 0 0.0 0 0.0 0 0.0 -1.4265297651290894 -0.05845177173614502 -0.2839455306529999 0.0 0.0 -1.0 0.9985008239746094 0.554226279258728 0 1.0 0 0.0 0 0.0 0 0.0 -1.4261819124221802 -0.05461104214191437 -0.2839455306529999 0.0 0.0 -1.0 0.9982823729515076 0.5589078664779663 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 -0.2839455306529999 0.0 0.0 -1.0 0.9464728236198425 0.5510927438735962 0 1.0 0 0.0 0 0.0 0 0.0 -1.6537773609161377 -0.057285428047180176 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.129322350025177 0.5310729742050171 0 1.0 0 0.0 0 0.0 0 0.0 -1.5546238422393799 -0.05597560107707977 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.0784434974193573 0.5459051728248596 0 1.0 0 0.0 0 0.0 0 0.0 -1.5558278560638428 -0.05901850759983063 -0.2839455306529999 0.0 0.0 -1.0 0.07887768745422363 0.5421288013458252 0 1.0 0 0.0 0 0.0 0 0.0 -1.6547187566757202 -0.062112487852573395 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.12916091084480286 0.5260705351829529 0 1.0 0 0.0 0 0.0 0 0.0 -1.6537773609161377 -0.057285428047180176 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.129322350025177 0.5310729742050171 0 1.0 0 0.0 0 0.0 0 0.0 -1.5558278560638428 -0.05901850759983063 -0.2839455306529999 0.0 0.0 -1.0 0.07887768745422363 0.5421288013458252 0 1.0 0 0.0 0 0.0 0 0.0 -1.4269311428070068 -0.06197628378868103 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9987492561340332 0.5499416589736938 0 1.0 0 0.0 0 0.0 0 0.0 -1.4265297651290894 -0.05845177173614502 -0.2839455306529999 0.0 0.0 -1.0 0.9985008239746094 0.554226279258728 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 -0.2839455306529999 0.0 0.0 -1.0 0.9464728236198425 0.5510927438735962 0 1.0 0 0.0 0 0.0 0 0.0 -1.6547187566757202 -0.062112487852573395 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.12916091084480286 0.5260705351829529 0 1.0 0 0.0 0 0.0 0 0.0 -1.5558278560638428 -0.05901850759983063 -0.2839455306529999 0.0 0.0 -1.0 0.07887768745422363 0.5421288013458252 0 1.0 0 0.0 0 0.0 0 0.0 -1.5567642450332642 -0.0621635764837265 -0.2839455306529999 0.0 0.0 -1.0 0.07914271950721741 0.5382862091064453 0 1.0 0 0.0 0 0.0 0 0.0 -1.4269311428070068 -0.06197628378868103 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9987492561340332 0.5499416589736938 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 -0.2839455306529999 0.0 0.0 -1.0 0.9464728236198425 0.5510927438735962 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295642137527466 -0.06969787180423737 -0.2839455306529999 0.0 0.0 -1.0 0.946895956993103 0.5426977872848511 0 1.0 0 0.0 0 0.0 0 0.0 -1.427385926246643 -0.0651845932006836 -0.2839455306529999 0.0 0.0 -1.0 0.9990274310112 0.5460504293441772 0 1.0 0 0.0 0 0.0 0 0.0 -1.4269311428070068 -0.06197628378868103 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9987492561340332 0.5499416589736938 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295642137527466 -0.06969787180423737 -0.2839455306529999 0.0 0.0 -1.0 0.946895956993103 0.5426977872848511 0 1.0 0 0.0 0 0.0 0 0.0 -1.6554508209228516 -0.06703440845012665 -0.2839455306529999 0.0 0.0 -1.0 0.1288999617099762 0.5210342407226562 0 1.0 0 0.0 0 0.0 0 0.0 -1.6547187566757202 -0.062112487852573395 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.12916091084480286 0.5260705351829529 0 1.0 0 0.0 0 0.0 0 0.0 -1.5567642450332642 -0.0621635764837265 -0.2839455306529999 0.0 0.0 -1.0 0.07914271950721741 0.5382862091064453 0 1.0 0 0.0 0 0.0 0 0.0 -1.6554508209228516 -0.06703440845012665 -0.2839455306529999 0.0 0.0 -1.0 0.1288999617099762 0.5210342407226562 0 1.0 0 0.0 0 0.0 0 0.0 -1.5567642450332642 -0.0621635764837265 -0.2839455306529999 0.0 0.0 -1.0 0.07914271950721741 0.5382862091064453 0 1.0 0 0.0 0 0.0 0 0.0 -1.5574332475662231 -0.0654108077287674 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07924100756645203 0.5343766212463379 0 1.0 0 0.0 0 0.0 0 0.0 -1.4278943538665771 -0.06807669252157211 -0.2839455306529999 0.0 0.0 -1.0 0.9993356466293335 0.5425490736961365 0 1.0 0 0.0 0 0.0 0 0.0 -1.427385926246643 -0.0651845932006836 -0.2839455306529999 0.0 0.0 -1.0 0.9990274310112 0.5460504293441772 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295642137527466 -0.06969787180423737 -0.2839455306529999 0.0 0.0 -1.0 0.946895956993103 0.5426977872848511 0 1.0 0 0.0 0 0.0 0 0.0 -1.6554508209228516 -0.06703440845012665 -0.2839455306529999 0.0 0.0 -1.0 0.1288999617099762 0.5210342407226562 0 1.0 0 0.0 0 0.0 0 0.0 -1.5574332475662231 -0.0654108077287674 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07924100756645203 0.5343766212463379 0 1.0 0 0.0 0 0.0 0 0.0 -1.557834506034851 -0.06876019388437271 -0.2839455306529999 0.0 0.0 -1.0 0.07917439937591553 0.5303995609283447 0 1.0 0 0.0 0 0.0 0 0.0 -1.6559737920761108 -0.07205118983983994 -0.2839455306529999 0.0 0.0 -1.0 0.1285407841205597 0.515961766242981 0 1.0 0 0.0 0 0.0 0 0.0 -1.6554508209228516 -0.06703440845012665 -0.2839455306529999 0.0 0.0 -1.0 0.1288999617099762 0.5210342407226562 0 1.0 0 0.0 0 0.0 0 0.0 -1.557834506034851 -0.06876019388437271 -0.2839455306529999 0.0 0.0 -1.0 0.07917439937591553 0.5303995609283447 0 1.0 0 0.0 0 0.0 0 0.0 -1.42845618724823 -0.07065258175134659 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9996737241744995 0.5394340753555298 0 1.0 0 0.0 0 0.0 0 0.0 -1.4278943538665771 -0.06807669252157211 -0.2839455306529999 0.0 0.0 -1.0 0.9993356466293335 0.5425490736961365 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295642137527466 -0.06969787180423737 -0.2839455306529999 0.0 0.0 -1.0 0.946895956993103 0.5426977872848511 0 1.0 0 0.0 0 0.0 0 0.0 -1.6559737920761108 -0.07205118983983994 -0.2839455306529999 0.0 0.0 -1.0 0.1285407841205597 0.515961766242981 0 1.0 0 0.0 0 0.0 0 0.0 -1.557834506034851 -0.06876019388437271 -0.2839455306529999 0.0 0.0 -1.0 0.07917439937591553 0.5303995609283447 0 1.0 0 0.0 0 0.0 0 0.0 -1.5579683780670166 -0.07221173495054245 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07894507050514221 0.5263540744781494 0 1.0 0 0.0 0 0.0 0 0.0 -1.42845618724823 -0.07065258175134659 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9996737241744995 0.5394340753555298 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295642137527466 -0.06969787180423737 -0.2839455306529999 0.0 0.0 -1.0 0.946895956993103 0.5426977872848511 0 1.0 0 0.0 0 0.0 0 0.0 -1.3294657468795776 -0.07733432948589325 -0.2839455306529999 0.0 0.0 -1.0 0.9472634792327881 0.5347473621368408 0 1.0 0 0.0 0 0.0 0 0.0 -1.4290716648101807 -0.07291226089000702 -0.2839455306529999 0.0 0.0 -1.0 1.000042200088501 0.5367017984390259 0 1.0 0 0.0 0 0.0 0 0.0 -1.42845618724823 -0.07065258175134659 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9996737241744995 0.5394340753555298 0 1.0 0 0.0 0 0.0 0 0.0 -1.3294657468795776 -0.07733432948589325 -0.2839455306529999 0.0 0.0 -1.0 0.9472634792327881 0.5347473621368408 0 1.0 0 0.0 0 0.0 0 0.0 -1.6562875509262085 -0.07716283947229385 -0.2839455306529999 0.0 0.0 -1.0 0.1280842125415802 0.5108512043952942 0 1.0 0 0.0 0 0.0 0 0.0 -1.6559737920761108 -0.07205118983983994 -0.2839455306529999 0.0 0.0 -1.0 0.1285407841205597 0.515961766242981 0 1.0 0 0.0 0 0.0 0 0.0 -1.5579683780670166 -0.07221173495054245 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07894507050514221 0.5263540744781494 0 1.0 0 0.0 0 0.0 0 0.0 -1.6562875509262085 -0.07716283947229385 -0.2839455306529999 0.0 0.0 -1.0 0.1280842125415802 0.5108512043952942 0 1.0 0 0.0 0 0.0 0 0.0 -1.5579683780670166 -0.07221173495054245 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07894507050514221 0.5263540744781494 0 1.0 0 0.0 0 0.0 0 0.0 -1.557861328125 -0.07561706751585007 -0.2839455306529999 0.0 0.0 -1.0 0.07858288288116455 0.5224087238311768 0 1.0 0 0.0 0 0.0 0 0.0 -1.4300907850265503 -0.07608164101839066 -0.2839455306529999 0.0 0.0 -1.0 1.0006492137908936 0.532871663570404 0 1.0 0 0.0 0 0.0 0 0.0 -1.4290716648101807 -0.07291226089000702 -0.2839455306529999 0.0 0.0 -1.0 1.000042200088501 0.5367017984390259 0 1.0 0 0.0 0 0.0 0 0.0 -1.3294657468795776 -0.07733432948589325 -0.2839455306529999 0.0 0.0 -1.0 0.9472634792327881 0.5347473621368408 0 1.0 0 0.0 0 0.0 0 0.0 -1.6562875509262085 -0.07716283947229385 -0.2839455306529999 0.0 0.0 -1.0 0.1280842125415802 0.5108512043952942 0 1.0 0 0.0 0 0.0 0 0.0 -1.557861328125 -0.07561706751585007 -0.2839455306529999 0.0 0.0 -1.0 0.07858288288116455 0.5224087238311768 0 1.0 0 0.0 0 0.0 0 0.0 -1.5575402975082397 -0.07894456386566162 -0.2839455306529999 0.0 0.0 -1.0 0.07810711860656738 0.5185943841934204 0 1.0 0 0.0 0 0.0 0 0.0 -1.431280255317688 -0.07916833460330963 -0.2839455306529999 0.0 0.0 -1.0 1.0013539791107178 0.5291415452957153 0 1.0 0 0.0 0 0.0 0 0.0 -1.4300907850265503 -0.07608164101839066 -0.2839455306529999 0.0 0.0 -1.0 1.0006492137908936 0.532871663570404 0 1.0 0 0.0 0 0.0 0 0.0 -1.3294657468795776 -0.07733432948589325 -0.2839455306529999 0.0 0.0 -1.0 0.9472634792327881 0.5347473621368408 0 1.0 0 0.0 0 0.0 0 0.0 -1.656392216682434 -0.0823693498969078 -0.2839455306529999 0.0 0.0 -1.0 0.12753111124038696 0.5057005882263184 0 1.0 0 0.0 0 0.0 0 0.0 -1.6562875509262085 -0.07716283947229385 -0.2839455306529999 0.0 0.0 -1.0 0.1280842125415802 0.5108512043952942 0 1.0 0 0.0 0 0.0 0 0.0 -1.5575402975082397 -0.07894456386566162 -0.2839455306529999 0.0 0.0 -1.0 0.07810711860656738 0.5185943841934204 0 1.0 0 0.0 0 0.0 0 0.0 -1.431280255317688 -0.07916833460330963 -0.2839455306529999 0.0 0.0 -1.0 1.0013539791107178 0.5291415452957153 0 1.0 0 0.0 0 0.0 0 0.0 -1.3294657468795776 -0.07733432948589325 -0.2839455306529999 0.0 0.0 -1.0 0.9472634792327881 0.5347473621368408 0 1.0 0 0.0 0 0.0 0 0.0 -1.3293014764785767 -0.08461322635412216 -0.2839455306529999 0.0 0.0 -1.0 0.9475767612457275 0.5272431373596191 0 1.0 0 0.0 0 0.0 0 0.0 -1.656392216682434 -0.0823693498969078 -0.2839455306529999 0.0 0.0 -1.0 0.12753111124038696 0.5057005882263184 0 1.0 0 0.0 0 0.0 0 0.0 -1.5575402975082397 -0.07894456386566162 -0.2839455306529999 0.0 0.0 -1.0 0.07810711860656738 0.5185943841934204 0 1.0 0 0.0 0 0.0 0 0.0 -1.5570050477981567 -0.08219422399997711 -0.2839455306529999 0.0 0.0 -1.0 0.07751825451850891 0.514907956123352 0 1.0 0 0.0 0 0.0 0 0.0 -1.4326399564743042 -0.08217232674360275 -0.2839455306529999 0.0 0.0 -1.0 1.002156376838684 0.5255098938941956 0 1.0 0 0.0 0 0.0 0 0.0 -1.431280255317688 -0.07916833460330963 -0.2839455306529999 0.0 0.0 -1.0 1.0013539791107178 0.5291415452957153 0 1.0 0 0.0 0 0.0 0 0.0 -1.3293014764785767 -0.08461322635412216 -0.2839455306529999 0.0 0.0 -1.0 0.9475767612457275 0.5272431373596191 0 1.0 0 0.0 0 0.0 0 0.0 -1.434169888496399 -0.08509361743927002 -0.2839455306529999 0.0 0.0 -1.0 1.0030560493469238 0.5219749212265015 0 1.0 0 0.0 0 0.0 0 0.0 -1.4326399564743042 -0.08217232674360275 -0.2839455306529999 0.0 0.0 -1.0 1.002156376838684 0.5255098938941956 0 1.0 0 0.0 0 0.0 0 0.0 -1.3293014764785767 -0.08461322635412216 -0.2839455306529999 0.0 0.0 -1.0 0.9475767612457275 0.5272431373596191 0 1.0 0 0.0 0 0.0 0 0.0 -1.656392216682434 -0.0823693498969078 -0.2839455306529999 0.0 0.0 -1.0 0.12753111124038696 0.5057005882263184 0 1.0 0 0.0 0 0.0 0 0.0 -1.5570050477981567 -0.08219422399997711 -0.2839455306529999 0.0 0.0 -1.0 0.07751825451850891 0.514907956123352 0 1.0 0 0.0 0 0.0 0 0.0 -1.5562559366226196 -0.08536604791879654 -0.2839455306529999 0.0 0.0 -1.0 0.07681694626808167 0.5113465785980225 0 1.0 0 0.0 0 0.0 0 0.0 -1.6561623811721802 -0.09019431471824646 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.12654244899749756 0.49805402755737305 0 1.0 0 0.0 0 0.0 0 0.0 -1.656392216682434 -0.0823693498969078 -0.2839455306529999 0.0 0.0 -1.0 0.12753111124038696 0.5057005882263184 0 1.0 0 0.0 0 0.0 0 0.0 -1.5562559366226196 -0.08536604791879654 -0.2839455306529999 0.0 0.0 -1.0 0.07681694626808167 0.5113465785980225 0 1.0 0 0.0 0 0.0 0 0.0 -1.434169888496399 -0.08509361743927002 -0.2839455306529999 0.0 0.0 -1.0 1.0030560493469238 0.5219749212265015 0 1.0 0 0.0 0 0.0 0 0.0 -1.3293014764785767 -0.08461322635412216 -0.2839455306529999 0.0 0.0 -1.0 0.9475767612457275 0.5272431373596191 0 1.0 0 0.0 0 0.0 0 0.0 -1.3290716409683228 -0.0915345624089241 -0.2839455306529999 0.0 0.0 -1.0 0.947837233543396 0.5201842188835144 0 1.0 0 0.0 0 0.0 0 0.0 -1.4358701705932617 -0.08793220669031143 -0.2839455306529999 0.0 0.0 -1.0 1.004052996635437 0.5185349583625793 0 1.0 0 0.0 0 0.0 0 0.0 -1.434169888496399 -0.08509361743927002 -0.2839455306529999 0.0 0.0 -1.0 1.0030560493469238 0.5219749212265015 0 1.0 0 0.0 0 0.0 0 0.0 -1.3290716409683228 -0.0915345624089241 -0.2839455306529999 0.0 0.0 -1.0 0.947837233543396 0.5201842188835144 0 1.0 0 0.0 0 0.0 0 0.0 -1.6561623811721802 -0.09019431471824646 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.12654244899749756 0.49805402755737305 0 1.0 0 0.0 0 0.0 0 0.0 -1.5562559366226196 -0.08536604791879654 -0.2839455306529999 0.0 0.0 -1.0 0.07681694626808167 0.5113465785980225 0 1.0 0 0.0 0 0.0 0 0.0 -1.5552927255630493 -0.0884600356221199 -0.2839455306529999 0.0 0.0 -1.0 0.07600328326225281 0.5079073905944824 0 1.0 0 0.0 0 0.0 0 0.0 -1.437740683555603 -0.09068809449672699 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0051469802856445 0.5151885747909546 0 1.0 0 0.0 0 0.0 0 0.0 -1.4358701705932617 -0.08793220669031143 -0.2839455306529999 0.0 0.0 -1.0 1.004052996635437 0.5185349583625793 0 1.0 0 0.0 0 0.0 0 0.0 -1.3290716409683228 -0.0915345624089241 -0.2839455306529999 0.0 0.0 -1.0 0.947837233543396 0.5201842188835144 0 1.0 0 0.0 0 0.0 0 0.0 -1.6561623811721802 -0.09019431471824646 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.12654244899749756 0.49805402755737305 0 1.0 0 0.0 0 0.0 0 0.0 -1.5552927255630493 -0.0884600356221199 -0.2839455306529999 0.0 0.0 -1.0 0.07600328326225281 0.5079073905944824 0 1.0 0 0.0 0 0.0 0 0.0 -1.5541154146194458 -0.0914761871099472 -0.2839455306529999 0.0 0.0 -1.0 0.07507732510566711 0.5045878887176514 0 1.0 0 0.0 0 0.0 0 0.0 -1.655472755432129 -0.09779063612222672 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.12539279460906982 0.4907315969467163 0 1.0 0 0.0 0 0.0 0 0.0 -1.6561623811721802 -0.09019431471824646 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.12654244899749756 0.49805402755737305 0 1.0 0 0.0 0 0.0 0 0.0 -1.5541154146194458 -0.0914761871099472 -0.2839455306529999 0.0 0.0 -1.0 0.07507732510566711 0.5045878887176514 0 1.0 0 0.0 0 0.0 0 0.0 -1.4397814273834229 -0.0933612808585167 -0.2839455306529999 0.0 0.0 -1.0 1.006338119506836 0.5119343400001526 0 1.0 0 0.0 0 0.0 0 0.0 -1.437740683555603 -0.09068809449672699 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0051469802856445 0.5151885747909546 0 1.0 0 0.0 0 0.0 0 0.0 -1.3290716409683228 -0.0915345624089241 -0.2839455306529999 0.0 0.0 -1.0 0.947837233543396 0.5201842188835144 0 1.0 0 0.0 0 0.0 0 0.0 -1.655472755432129 -0.09779063612222672 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.12539279460906982 0.4907315969467163 0 1.0 0 0.0 0 0.0 0 0.0 -1.5541154146194458 -0.0914761871099472 -0.2839455306529999 0.0 0.0 -1.0 0.07507732510566711 0.5045878887176514 0 1.0 0 0.0 0 0.0 0 0.0 -1.5527241230010986 -0.09441450238227844 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07403913140296936 0.5013856887817383 0 1.0 0 0.0 0 0.0 0 0.0 -1.4397814273834229 -0.0933612808585167 -0.2839455306529999 0.0 0.0 -1.0 1.006338119506836 0.5119343400001526 0 1.0 0 0.0 0 0.0 0 0.0 -1.3290716409683228 -0.0915345624089241 -0.2839455306529999 0.0 0.0 -1.0 0.947837233543396 0.5201842188835144 0 1.0 0 0.0 0 0.0 0 0.0 -1.328776240348816 -0.09809833765029907 -0.2839455306529999 0.0 0.0 -1.0 0.9480462074279785 0.5135672092437744 0 1.0 0 0.0 0 0.0 0 0.0 -1.4419924020767212 -0.09595176577568054 -0.2839455306529999 0.0 0.0 -1.0 1.0076266527175903 0.5087709426879883 0 1.0 0 0.0 0 0.0 0 0.0 -1.4397814273834229 -0.0933612808585167 -0.2839455306529999 0.0 0.0 -1.0 1.006338119506836 0.5119343400001526 0 1.0 0 0.0 0 0.0 0 0.0 -1.328776240348816 -0.09809833765029907 -0.2839455306529999 0.0 0.0 -1.0 0.9480462074279785 0.5135672092437744 0 1.0 0 0.0 0 0.0 0 0.0 -1.655472755432129 -0.09779063612222672 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.12539279460906982 0.4907315969467163 0 1.0 0 0.0 0 0.0 0 0.0 -1.5527241230010986 -0.09441450238227844 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07403913140296936 0.5013856887817383 0 1.0 0 0.0 0 0.0 0 0.0 -1.5511187314987183 -0.09727498143911362 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07288837432861328 0.49829840660095215 0 1.0 0 0.0 0 0.0 0 0.0 -1.4443737268447876 -0.09845954924821854 -0.2839455306529999 0.0 0.0 -1.0 1.0090125799179077 0.5056973695755005 0 1.0 0 0.0 0 0.0 0 0.0 -1.4419924020767212 -0.09595176577568054 -0.2839455306529999 0.0 0.0 -1.0 1.0076266527175903 0.5087709426879883 0 1.0 0 0.0 0 0.0 0 0.0 -1.328776240348816 -0.09809833765029907 -0.2839455306529999 0.0 0.0 -1.0 0.9480462074279785 0.5135672092437744 0 1.0 0 0.0 0 0.0 0 0.0 -1.655472755432129 -0.09779063612222672 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.12539279460906982 0.4907315969467163 0 1.0 0 0.0 0 0.0 0 0.0 -1.5511187314987183 -0.09727498143911362 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07288837432861328 0.49829840660095215 0 1.0 0 0.0 0 0.0 0 0.0 -1.5492993593215942 -0.10005762428045273 -0.2839455306529999 0.0 0.0 -1.0 0.07162481546401978 0.49532419443130493 0 1.0 0 0.0 0 0.0 0 0.0 -1.6543234586715698 -0.10515831410884857 -0.2839455306529999 0.0 0.0 -1.0 0.12408101558685303 0.4837164282798767 0 1.0 0 0.0 0 0.0 0 0.0 -1.655472755432129 -0.09779063612222672 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.12539279460906982 0.4907315969467163 0 1.0 0 0.0 0 0.0 0 0.0 -1.5492993593215942 -0.10005762428045273 -0.2839455306529999 0.0 0.0 -1.0 0.07162481546401978 0.49532419443130493 0 1.0 0 0.0 0 0.0 0 0.0 -1.4443737268447876 -0.09845954924821854 -0.2839455306529999 0.0 0.0 -1.0 1.0090125799179077 0.5056973695755005 0 1.0 0 0.0 0 0.0 0 0.0 -1.328776240348816 -0.09809833765029907 -0.2839455306529999 0.0 0.0 -1.0 0.9480462074279785 0.5135672092437744 0 1.0 0 0.0 0 0.0 0 0.0 -1.328415036201477 -0.10430455207824707 -0.2839455306529999 0.0 0.0 -1.0 0.9482048749923706 0.5073869228363037 0 1.0 0 0.0 0 0.0 0 0.0 -1.4469252824783325 -0.10088463127613068 -0.2839455306529999 0.0 0.0 -1.0 1.0104960203170776 0.5027124881744385 0 1.0 0 0.0 0 0.0 0 0.0 -1.4443737268447876 -0.09845954924821854 -0.2839455306529999 0.0 0.0 -1.0 1.0090125799179077 0.5056973695755005 0 1.0 0 0.0 0 0.0 0 0.0 -1.328415036201477 -0.10430455207824707 -0.2839455306529999 0.0 0.0 -1.0 0.9482048749923706 0.5073869228363037 0 1.0 0 0.0 0 0.0 0 0.0 -1.6543234586715698 -0.10515831410884857 -0.2839455306529999 0.0 0.0 -1.0 0.12408101558685303 0.4837164282798767 0 1.0 0 0.0 0 0.0 0 0.0 -1.5492993593215942 -0.10005762428045273 -0.2839455306529999 0.0 0.0 -1.0 0.07162481546401978 0.49532419443130493 0 1.0 0 0.0 0 0.0 0 0.0 -1.547265887260437 -0.10276243090629578 -0.2839455306529999 0.0 0.0 -1.0 0.07024794816970825 0.49246126413345337 0 1.0 0 0.0 0 0.0 0 0.0 -1.4496471881866455 -0.10322701185941696 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0120773315429688 0.49981552362442017 0 1.0 0 0.0 0 0.0 0 0.0 -1.4469252824783325 -0.10088463127613068 -0.2839455306529999 0.0 0.0 -1.0 1.0104960203170776 0.5027124881744385 0 1.0 0 0.0 0 0.0 0 0.0 -1.328415036201477 -0.10430455207824707 -0.2839455306529999 0.0 0.0 -1.0 0.9482048749923706 0.5073869228363037 0 1.0 0 0.0 0 0.0 0 0.0 -1.6543234586715698 -0.10515831410884857 -0.2839455306529999 0.0 0.0 -1.0 0.12408101558685303 0.4837164282798767 0 1.0 0 0.0 0 0.0 0 0.0 -1.547265887260437 -0.10276243090629578 -0.2839455306529999 0.0 0.0 -1.0 0.07024794816970825 0.49246126413345337 0 1.0 0 0.0 0 0.0 0 0.0 -1.5450183153152466 -0.10538940131664276 -0.2839455306529999 0.0 0.0 -1.0 0.06875726580619812 0.48970818519592285 0 1.0 0 0.0 0 0.0 0 0.0 -1.452539324760437 -0.10548669099807739 -0.2839455306529999 0.0 0.0 -1.0 1.0137566328048706 0.49700599908828735 0 1.0 0 0.0 0 0.0 0 0.0 -1.4496471881866455 -0.10322701185941696 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0120773315429688 0.49981552362442017 0 1.0 0 0.0 0 0.0 0 0.0 -1.328415036201477 -0.10430455207824707 -0.2839455306529999 0.0 0.0 -1.0 0.9482048749923706 0.5073869228363037 0 1.0 0 0.0 0 0.0 0 0.0 -1.452539324760437 -0.10548669099807739 -0.2839455306529999 0.0 0.0 -1.0 1.0137566328048706 0.49700599908828735 0 1.0 0 0.0 0 0.0 0 0.0 -1.328415036201477 -0.10430455207824707 -0.2839455306529999 0.0 0.0 -1.0 0.9482048749923706 0.5073869228363037 0 1.0 0 0.0 0 0.0 0 0.0 -1.3279880285263062 -0.1101532131433487 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9483141899108887 0.5016369223594666 0 1.0 0 0.0 0 0.0 0 0.0 -1.6527143716812134 -0.11229734867811203 -0.2839455306529999 0.0 0.0 -1.0 0.12260499596595764 0.47699278593063354 0 1.0 0 0.0 0 0.0 0 0.0 -1.6543234586715698 -0.10515831410884857 -0.2839455306529999 0.0 0.0 -1.0 0.12408101558685303 0.4837164282798767 0 1.0 0 0.0 0 0.0 0 0.0 -1.5450183153152466 -0.10538940131664276 -0.2839455306529999 0.0 0.0 -1.0 0.06875726580619812 0.48970818519592285 0 1.0 0 0.0 0 0.0 0 0.0 -1.6527143716812134 -0.11229734867811203 -0.2839455306529999 0.0 0.0 -1.0 0.12260499596595764 0.47699278593063354 0 1.0 0 0.0 0 0.0 0 0.0 -1.5450183153152466 -0.10538940131664276 -0.2839455306529999 0.0 0.0 -1.0 0.06875726580619812 0.48970818519592285 0 1.0 0 0.0 0 0.0 0 0.0 -1.5425567626953125 -0.10793852806091309 -0.2839455306529999 0.0 0.0 -1.0 0.06715226173400879 0.48706352710723877 0 1.0 0 0.0 0 0.0 0 0.0 -1.4565843343734741 -0.10828392952680588 -0.2839455306529999 0.0 0.0 -1.0 1.016105055809021 0.493499755859375 0 1.0 0 0.0 0 0.0 0 0.0 -1.452539324760437 -0.10548669099807739 -0.2839455306529999 0.0 0.0 -1.0 1.0137566328048706 0.49700599908828735 0 1.0 0 0.0 0 0.0 0 0.0 -1.3279880285263062 -0.1101532131433487 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9483141899108887 0.5016369223594666 0 1.0 0 0.0 0 0.0 0 0.0 -1.6527143716812134 -0.11229734867811203 -0.2839455306529999 0.0 0.0 -1.0 0.12260499596595764 0.47699278593063354 0 1.0 0 0.0 0 0.0 0 0.0 -1.5425567626953125 -0.10793852806091309 -0.2839455306529999 0.0 0.0 -1.0 0.06715226173400879 0.48706352710723877 0 1.0 0 0.0 0 0.0 0 0.0 -1.539929747581482 -0.11034414917230606 -0.2839455306529999 0.0 0.0 -1.0 0.06546497344970703 0.4845954179763794 0 1.0 0 0.0 0 0.0 0 0.0 -1.4606634378433228 -0.11083792895078659 -0.2839455306529999 0.0 0.0 -1.0 1.018471598625183 0.4902775287628174 0 1.0 0 0.0 0 0.0 0 0.0 -1.4565843343734741 -0.10828392952680588 -0.2839455306529999 0.0 0.0 -1.0 1.016105055809021 0.493499755859375 0 1.0 0 0.0 0 0.0 0 0.0 -1.3279880285263062 -0.1101532131433487 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9483141899108887 0.5016369223594666 0 1.0 0 0.0 0 0.0 0 0.0 -1.4606634378433228 -0.11083792895078659 -0.2839455306529999 0.0 0.0 -1.0 1.018471598625183 0.4902775287628174 0 1.0 0 0.0 0 0.0 0 0.0 -1.3279880285263062 -0.1101532131433487 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9483141899108887 0.5016369223594666 0 1.0 0 0.0 0 0.0 0 0.0 -1.3274954557418823 -0.11564431339502335 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9483753442764282 0.49630945920944214 0 1.0 0 0.0 0 0.0 0 0.0 -1.6527143716812134 -0.11229734867811203 -0.2839455306529999 0.0 0.0 -1.0 0.12260499596595764 0.47699278593063354 0 1.0 0 0.0 0 0.0 0 0.0 -1.539929747581482 -0.11034414917230606 -0.2839455306529999 0.0 0.0 -1.0 0.06546497344970703 0.4845954179763794 0 1.0 0 0.0 0 0.0 0 0.0 -1.5371860265731812 -0.1125405877828598 -0.2839455306529999 0.0 0.0 -1.0 0.06372728943824768 0.48237109184265137 0 1.0 0 0.0 0 0.0 0 0.0 -1.4647765159606934 -0.11314868927001953 -0.2839455306529999 0.0 0.0 -1.0 1.0208572149276733 0.48733770847320557 0 1.0 0 0.0 0 0.0 0 0.0 -1.4606634378433228 -0.11083792895078659 -0.2839455306529999 0.0 0.0 -1.0 1.018471598625183 0.4902775287628174 0 1.0 0 0.0 0 0.0 0 0.0 -1.3274954557418823 -0.11564431339502335 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9483753442764282 0.49630945920944214 0 1.0 0 0.0 0 0.0 0 0.0 -1.6506456136703491 -0.11920773983001709 -0.2839455306529999 0.0 0.0 -1.0 0.12096211314201355 0.47054606676101685 0 1.0 0 0.0 0 0.0 0 0.0 -1.6527143716812134 -0.11229734867811203 -0.2839455306529999 0.0 0.0 -1.0 0.12260499596595764 0.47699278593063354 0 1.0 0 0.0 0 0.0 0 0.0 -1.5371860265731812 -0.1125405877828598 -0.2839455306529999 0.0 0.0 -1.0 0.06372728943824768 0.48237109184265137 0 1.0 0 0.0 0 0.0 0 0.0 -1.6506456136703491 -0.11920773983001709 -0.2839455306529999 0.0 0.0 -1.0 0.12096211314201355 0.47054606676101685 0 1.0 0 0.0 0 0.0 0 0.0 -1.5371860265731812 -0.1125405877828598 -0.2839455306529999 0.0 0.0 -1.0 0.06372728943824768 0.48237109184265137 0 1.0 0 0.0 0 0.0 0 0.0 -1.5343255996704102 -0.11452784389257431 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.06193813681602478 0.4803890585899353 0 1.0 0 0.0 0 0.0 0 0.0 -1.4689236879348755 -0.1152162104845047 -0.2839455306529999 0.0 0.0 -1.0 1.023262858390808 0.48467862606048584 0 1.0 0 0.0 0 0.0 0 0.0 -1.4647765159606934 -0.11314868927001953 -0.2839455306529999 0.0 0.0 -1.0 1.0208572149276733 0.48733770847320557 0 1.0 0 0.0 0 0.0 0 0.0 -1.3274954557418823 -0.11564431339502335 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9483753442764282 0.49630945920944214 0 1.0 0 0.0 0 0.0 0 0.0 -1.6506456136703491 -0.11920773983001709 -0.2839455306529999 0.0 0.0 -1.0 0.12096211314201355 0.47054606676101685 0 1.0 0 0.0 0 0.0 0 0.0 -1.5343255996704102 -0.11452784389257431 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.06193813681602478 0.4803890585899353 0 1.0 0 0.0 0 0.0 0 0.0 -1.5313483476638794 -0.11630591750144958 -0.2839455306529999 0.0 0.0 -1.0 0.06009626388549805 0.4786478877067566 0 1.0 0 0.0 0 0.0 0 0.0 -1.4731050729751587 -0.1170404925942421 -0.2839455306529999 0.0 0.0 -1.0 1.0256896018981934 0.48229867219924927 0 1.0 0 0.0 0 0.0 0 0.0 -1.4689236879348755 -0.1152162104845047 -0.2839455306529999 0.0 0.0 -1.0 1.023262858390808 0.48467862606048584 0 1.0 0 0.0 0 0.0 0 0.0 -1.3274954557418823 -0.11564431339502335 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9483753442764282 0.49630945920944214 0 1.0 0 0.0 0 0.0 0 0.0 -1.4731050729751587 -0.1170404925942421 -0.2839455306529999 0.0 0.0 -1.0 1.0256896018981934 0.48229867219924927 0 1.0 0 0.0 0 0.0 0 0.0 -1.3274954557418823 -0.11564431339502335 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9483753442764282 0.49630945920944214 0 1.0 0 0.0 0 0.0 0 0.0 -1.3269373178482056 -0.12077785283327103 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9483891725540161 0.4913962483406067 0 1.0 0 0.0 0 0.0 0 0.0 -1.6506456136703491 -0.11920773983001709 -0.2839455306529999 0.0 0.0 -1.0 0.12096211314201355 0.47054606676101685 0 1.0 0 0.0 0 0.0 0 0.0 -1.5313483476638794 -0.11630591750144958 -0.2839455306529999 0.0 0.0 -1.0 0.06009626388549805 0.4786478877067566 0 1.0 0 0.0 0 0.0 0 0.0 -1.5282543897628784 -0.11787480115890503 -0.2839455306529999 0.0 0.0 -1.0 0.058200687170028687 0.47714662551879883 0 1.0 0 0.0 0 0.0 0 0.0 -1.4773203134536743 -0.11862154304981232 -0.2839455306529999 0.0 0.0 -1.0 1.0281380414962769 0.4801962971687317 0 1.0 0 0.0 0 0.0 0 0.0 -1.4731050729751587 -0.1170404925942421 -0.2839455306529999 0.0 0.0 -1.0 1.0256896018981934 0.48229867219924927 0 1.0 0 0.0 0 0.0 0 0.0 -1.3269373178482056 -0.12077785283327103 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9483891725540161 0.4913962483406067 0 1.0 0 0.0 0 0.0 0 0.0 -1.6506456136703491 -0.11920773983001709 -0.2839455306529999 0.0 0.0 -1.0 0.12096211314201355 0.47054606676101685 0 1.0 0 0.0 0 0.0 0 0.0 -1.5282543897628784 -0.11787480115890503 -0.2839455306529999 0.0 0.0 -1.0 0.058200687170028687 0.47714662551879883 0 1.0 0 0.0 0 0.0 0 0.0 -1.5250436067581177 -0.11923450231552124 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.056250184774398804 0.47588449716567993 0 1.0 0 0.0 0 0.0 0 0.0 -1.4815696477890015 -0.11995935440063477 -0.2839455306529999 0.0 3.0518509447574615e-05 -0.999969482421875 1.030609130859375 0.47836989164352417 0 1.0 0 0.0 0 0.0 0 0.0 -1.4773203134536743 -0.11862154304981232 -0.2839455306529999 0.0 0.0 -1.0 1.0281380414962769 0.4801962971687317 0 1.0 0 0.0 0 0.0 0 0.0 -1.3269373178482056 -0.12077785283327103 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9483891725540161 0.4913962483406067 0 1.0 0 0.0 0 0.0 0 0.0 -1.648117184638977 -0.12588948011398315 -0.2839455306529999 0.0 0.0 -1.0 0.11914879083633423 0.4643626809120178 0 1.0 0 0.0 0 0.0 0 0.0 -1.6506456136703491 -0.11920773983001709 -0.2839455306529999 0.0 0.0 -1.0 0.12096211314201355 0.47054606676101685 0 1.0 0 0.0 0 0.0 0 0.0 -1.5250436067581177 -0.11923450231552124 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.056250184774398804 0.47588449716567993 0 1.0 0 0.0 0 0.0 0 0.0 -1.648117184638977 -0.12588948011398315 -0.2839455306529999 0.0 0.0 -1.0 0.11914879083633423 0.4643626809120178 0 1.0 0 0.0 0 0.0 0 0.0 -1.5250436067581177 -0.11923450231552124 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.056250184774398804 0.47588449716567993 0 1.0 0 0.0 0 0.0 0 0.0 -1.5217162370681763 -0.12038502097129822 -0.2839455306529999 0.0 0.0 -1.0 0.05424368381500244 0.47486114501953125 0 1.0 0 0.0 0 0.0 0 0.0 -1.4858530759811401 -0.12105392664670944 -0.2839455306529999 0.0 0.0 -1.0 1.0331037044525146 0.4768180847167969 0 1.0 0 0.0 0 0.0 0 0.0 -1.4815696477890015 -0.11995935440063477 -0.2839455306529999 0.0 3.0518509447574615e-05 -0.999969482421875 1.030609130859375 0.47836989164352417 0 1.0 0 0.0 0 0.0 0 0.0 -1.3269373178482056 -0.12077785283327103 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9483891725540161 0.4913962483406067 0 1.0 0 0.0 0 0.0 0 0.0 -1.648117184638977 -0.12588948011398315 -0.2839455306529999 0.0 0.0 -1.0 0.11914879083633423 0.4643626809120178 0 1.0 0 0.0 0 0.0 0 0.0 -1.5217162370681763 -0.12038502097129822 -0.2839455306529999 0.0 0.0 -1.0 0.05424368381500244 0.47486114501953125 0 1.0 0 0.0 0 0.0 0 0.0 -1.5182719230651855 -0.12132634967565536 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.052179962396621704 0.4740765690803528 0 1.0 0 0.0 0 0.0 0 0.0 -1.4858530759811401 -0.12105392664670944 -0.2839455306529999 0.0 0.0 -1.0 1.0331037044525146 0.4768180847167969 0 1.0 0 0.0 0 0.0 0 0.0 -1.3269373178482056 -0.12077785283327103 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9483891725540161 0.4913962483406067 0 1.0 0 0.0 0 0.0 0 0.0 -1.3263133764266968 -0.12555383145809174 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9483564496040344 0.4868885278701782 0 1.0 0 0.0 0 0.0 0 0.0 -1.4901705980300903 -0.12190525233745575 -0.2839455306529999 0.0 0.0 -1.0 1.0356225967407227 0.47553956508636475 0 1.0 0 0.0 0 0.0 0 0.0 -1.4858530759811401 -0.12105392664670944 -0.2839455306529999 0.0 0.0 -1.0 1.0331037044525146 0.4768180847167969 0 1.0 0 0.0 0 0.0 0 0.0 -1.3263133764266968 -0.12555383145809174 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9483564496040344 0.4868885278701782 0 1.0 0 0.0 0 0.0 0 0.0 -1.648117184638977 -0.12588948011398315 -0.2839455306529999 0.0 0.0 -1.0 0.11914879083633423 0.4643626809120178 0 1.0 0 0.0 0 0.0 0 0.0 -1.5182719230651855 -0.12132634967565536 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.052179962396621704 0.4740765690803528 0 1.0 0 0.0 0 0.0 0 0.0 -1.5147109031677246 -0.12205849587917328 -0.2839455306529999 0.0 0.0 -1.0 0.050057947635650635 0.47353076934814453 0 1.0 0 0.0 0 0.0 0 0.0 -1.494522213935852 -0.12251335382461548 -0.2839455306529999 0.0 0.0 -1.0 1.0381664037704468 0.4745330810546875 0 1.0 0 0.0 0 0.0 0 0.0 -1.4901705980300903 -0.12190525233745575 -0.2839455306529999 0.0 0.0 -1.0 1.0356225967407227 0.47553956508636475 0 1.0 0 0.0 0 0.0 0 0.0 -1.3263133764266968 -0.12555383145809174 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9483564496040344 0.4868885278701782 0 1.0 0 0.0 0 0.0 0 0.0 -1.648117184638977 -0.12588948011398315 -0.2839455306529999 0.0 0.0 -1.0 0.11914879083633423 0.4643626809120178 0 1.0 0 0.0 0 0.0 0 0.0 -1.5147109031677246 -0.12205849587917328 -0.2839455306529999 0.0 0.0 -1.0 0.050057947635650635 0.47353076934814453 0 1.0 0 0.0 0 0.0 0 0.0 -1.5110331773757935 -0.12258145213127136 -0.2839455306529999 0.0 -6.103701889514923e-05 -1.0 0.047876596450805664 0.47322434186935425 0 1.0 0 0.0 0 0.0 0 0.0 -1.4989076852798462 -0.12287820875644684 -0.2839455306529999 0.0 0.0 -1.0 1.0407357215881348 0.4737977385520935 0 1.0 0 0.0 0 0.0 0 0.0 -1.494522213935852 -0.12251335382461548 -0.2839455306529999 0.0 0.0 -1.0 1.0381664037704468 0.4745330810546875 0 1.0 0 0.0 0 0.0 0 0.0 -1.3263133764266968 -0.12555383145809174 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9483564496040344 0.4868885278701782 0 1.0 0 0.0 0 0.0 0 0.0 -1.648117184638977 -0.12588948011398315 -0.2839455306529999 0.0 0.0 -1.0 0.11914879083633423 0.4643626809120178 0 1.0 0 0.0 0 0.0 0 0.0 -1.5110331773757935 -0.12258145213127136 -0.2839455306529999 0.0 -6.103701889514923e-05 -1.0 0.047876596450805664 0.47322434186935425 0 1.0 0 0.0 0 0.0 0 0.0 -1.5072386264801025 -0.12289523333311081 -0.2839455306529999 0.0 0.0 -1.0 0.045634716749191284 0.47315794229507446 0 1.0 0 0.0 0 0.0 0 0.0 -1.5033273696899414 -0.12299982458353043 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0433313846588135 0.47333264350891113 0 1.0 0 0.0 0 0.0 0 0.0 -1.4989076852798462 -0.12287820875644684 -0.2839455306529999 0.0 0.0 -1.0 1.0407357215881348 0.4737977385520935 0 1.0 0 0.0 0 0.0 0 0.0 -1.3263133764266968 -0.12555383145809174 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9483564496040344 0.4868885278701782 0 1.0 0 0.0 0 0.0 0 0.0 -1.648117184638977 -0.12588948011398315 -0.2839455306529999 0.0 0.0 -1.0 0.11914879083633423 0.4643626809120178 0 1.0 0 0.0 0 0.0 0 0.0 -1.5072386264801025 -0.12289523333311081 -0.2839455306529999 0.0 0.0 -1.0 0.045634716749191284 0.47315794229507446 0 1.0 0 0.0 0 0.0 0 0.0 -1.5033273696899414 -0.12299982458353043 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.04333144426345825 0.47333264350891113 0 1.0 0 0.0 0 0.0 0 0.0 -1.648117184638977 -0.12588948011398315 -0.2839455306529999 0.0 0.0 -1.0 1.1191487312316895 0.4643626809120178 0 1.0 0 0.0 0 0.0 0 0.0 -1.5033273696899414 -0.12299982458353043 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.0433313846588135 0.47333264350891113 0 1.0 0 0.0 0 0.0 0 0.0 -1.3263133764266968 -0.12555383145809174 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9483564496040344 0.4868885278701782 0 1.0 0 0.0 0 0.0 0 0.0 -1.648117184638977 -0.12588948011398315 -0.2839455306529999 0.0 0.0 -1.0 1.1191487312316895 0.4643626809120178 0 1.0 0 0.0 0 0.0 0 0.0 -1.3263133764266968 -0.12555383145809174 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9483564496040344 0.4868885278701782 0 1.0 0 0.0 0 0.0 0 0.0 -1.325623869895935 -0.12997224926948547 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.94827800989151 0.48277735710144043 0 1.0 0 0.0 0 0.0 0 0.0 -1.6451290845870972 -0.13234259188175201 -0.2839455306529999 0.0 0.0 -1.0 1.1171609163284302 0.45843058824539185 0 1.0 0 0.0 0 0.0 0 0.0 -1.648117184638977 -0.12588948011398315 -0.2839455306529999 0.0 0.0 -1.0 1.1191487312316895 0.4643626809120178 0 1.0 0 0.0 0 0.0 0 0.0 -1.325623869895935 -0.12997224926948547 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.94827800989151 0.48277735710144043 0 1.0 0 0.0 0 0.0 0 0.0 -1.6451290845870972 -0.13234259188175201 -0.2839455306529999 0.0 0.0 -1.0 1.1171609163284302 0.45843058824539185 0 1.0 0 0.0 0 0.0 0 0.0 -1.325623869895935 -0.12997224926948547 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.94827800989151 0.48277735710144043 0 1.0 0 0.0 0 0.0 0 0.0 -1.3248685598373413 -0.13403309881687164 -0.2839455306529999 0.0 0.0 -1.0 0.9481543302536011 0.47905391454696655 0 1.0 0 0.0 0 0.0 0 0.0 -1.64168119430542 -0.13856706023216248 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.1149934530258179 0.45273905992507935 0 1.0 0 0.0 0 0.0 0 0.0 -1.6451290845870972 -0.13234259188175201 -0.2839455306529999 0.0 0.0 -1.0 1.1171609163284302 0.45843058824539185 0 1.0 0 0.0 0 0.0 0 0.0 -1.3248685598373413 -0.13403309881687164 -0.2839455306529999 0.0 0.0 -1.0 0.9481543302536011 0.47905391454696655 0 1.0 0 0.0 0 0.0 0 0.0 -1.64168119430542 -0.13856706023216248 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.1149934530258179 0.45273905992507935 0 1.0 0 0.0 0 0.0 0 0.0 -1.3248685598373413 -0.13403309881687164 -0.2839455306529999 0.0 0.0 -1.0 0.9481543302536011 0.47905391454696655 0 1.0 0 0.0 0 0.0 0 0.0 -1.3240233659744263 -0.13793829083442688 -0.2839455306529999 0.0 0.0 -1.0 0.947985827922821 0.47552597522735596 0 1.0 0 0.0 0 0.0 0 0.0 -1.64168119430542 -0.13856706023216248 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.1149934530258179 0.45273905992507935 0 1.0 0 0.0 0 0.0 0 0.0 -1.3240233659744263 -0.13793829083442688 -0.2839455306529999 0.0 0.0 -1.0 0.947985827922821 0.47552597522735596 0 1.0 0 0.0 0 0.0 0 0.0 -1.3230637311935425 -0.14188969135284424 -0.2839455306529999 0.0 0.0 -1.0 0.9477726221084595 0.4720093607902527 0 1.0 0 0.0 0 0.0 0 0.0 -1.6377736330032349 -0.14456287026405334 -0.2839455306529999 0.0 0.0 -1.0 1.1126412153244019 0.4472789764404297 0 1.0 0 0.0 0 0.0 0 0.0 -1.64168119430542 -0.13856706023216248 -0.2839455306529999 0.0 0.0 -0.999969482421875 1.1149934530258179 0.45273905992507935 0 1.0 0 0.0 0 0.0 0 0.0 -1.3230637311935425 -0.14188969135284424 -0.2839455306529999 0.0 0.0 -1.0 0.9477726221084595 0.4720093607902527 0 1.0 0 0.0 0 0.0 0 0.0 -1.6377736330032349 -0.14456287026405334 -0.2839455306529999 0.0 0.0 -1.0 1.1126412153244019 0.4472789764404297 0 1.0 0 0.0 0 0.0 0 0.0 -1.3230637311935425 -0.14188969135284424 -0.2839455306529999 0.0 0.0 -1.0 0.9477726221084595 0.4720093607902527 0 1.0 0 0.0 0 0.0 0 0.0 -1.4175130128860474 -0.14331506192684174 -0.2839455306529999 0.0 0.0 -1.0 0.993724524974823 0.45980244874954224 0 1.0 0 0.0 0 0.0 0 0.0 -1.4175130128860474 -0.14331506192684174 -0.2839455306529999 0.0 0.0 -1.0 0.993724524974823 0.45980244874954224 0 1.0 0 0.0 0 0.0 0 0.0 -1.3230637311935425 -0.14188969135284424 -0.2839455306529999 0.0 0.0 -1.0 0.9477726221084595 0.4720093607902527 0 1.0 0 0.0 0 0.0 0 0.0 -1.321989893913269 -0.14588730037212372 -0.2839455306529999 0.0 0.0 -1.0 0.9475157260894775 0.46850723028182983 0 1.0 0 0.0 0 0.0 0 0.0 -1.6377736330032349 -0.14456287026405334 -0.2839455306529999 0.0 0.0 -1.0 1.1126412153244019 0.4472789764404297 0 1.0 0 0.0 0 0.0 0 0.0 -1.4175130128860474 -0.14331506192684174 -0.2839455306529999 0.0 0.0 -1.0 0.993724524974823 0.45980244874954224 0 1.0 0 0.0 0 0.0 0 0.0 -1.4217404127120972 -0.1473163217306137 -0.2839455306529999 0.0 0.0 -1.0 0.9960373640060425 0.4553300738334656 0 1.0 0 0.0 0 0.0 0 0.0 -1.4173282384872437 -0.14382342994213104 -0.2839455306529999 0.0 0.0 -1.0 0.9936280846595764 0.4593122601509094 0 1.0 0 0.0 0 0.0 0 0.0 -1.4175130128860474 -0.14331506192684174 -0.2839455306529999 0.0 0.0 -1.0 0.993724524974823 0.45980244874954224 0 1.0 0 0.0 0 0.0 0 0.0 -1.321989893913269 -0.14588730037212372 -0.2839455306529999 0.0 0.0 -1.0 0.9475157260894775 0.46850723028182983 0 1.0 0 0.0 0 0.0 0 0.0 -1.4171239137649536 -0.1444144994020462 -0.2839455306529999 0.0 0.0 -1.0 0.9935218095779419 0.4587423801422119 0 1.0 0 0.0 0 0.0 0 0.0 -1.4173282384872437 -0.14382342994213104 -0.2839455306529999 0.0 0.0 -1.0 0.9936280846595764 0.4593122601509094 0 1.0 0 0.0 0 0.0 0 0.0 -1.321989893913269 -0.14588730037212372 -0.2839455306529999 0.0 0.0 -1.0 0.9475157260894775 0.46850723028182983 0 1.0 0 0.0 0 0.0 0 0.0 -1.4169000387191772 -0.14508827030658722 -0.2839455306529999 0.0 0.0 -1.0 0.9934057593345642 0.45809316635131836 0 1.0 0 0.0 0 0.0 0 0.0 -1.4171239137649536 -0.1444144994020462 -0.2839455306529999 0.0 0.0 -1.0 0.9935218095779419 0.4587423801422119 0 1.0 0 0.0 0 0.0 0 0.0 -1.321989893913269 -0.14588730037212372 -0.2839455306529999 0.0 0.0 -1.0 0.9475157260894775 0.46850723028182983 0 1.0 0 0.0 0 0.0 0 0.0 -1.6334062814712524 -0.15033003687858582 -0.2839455306529999 0.0 0.0 -1.0 1.110098123550415 0.44204282760620117 0 1.0 0 0.0 0 0.0 0 0.0 -1.6377736330032349 -0.14456287026405334 -0.2839455306529999 0.0 0.0 -1.0 1.1126412153244019 0.4472789764404297 0 1.0 0 0.0 0 0.0 0 0.0 -1.4217404127120972 -0.1473163217306137 -0.2839455306529999 0.0 0.0 -1.0 0.9960373640060425 0.4553300738334656 0 1.0 0 0.0 0 0.0 0 0.0 -1.4166568517684937 -0.1458447277545929 -0.2839455306529999 0.0 0.0 -1.0 0.9932801127433777 0.4573652744293213 0 1.0 0 0.0 0 0.0 0 0.0 -1.4169000387191772 -0.14508827030658722 -0.2839455306529999 0.0 0.0 -1.0 0.9934057593345642 0.45809316635131836 0 1.0 0 0.0 0 0.0 0 0.0 -1.321989893913269 -0.14588730037212372 -0.2839455306529999 0.0 0.0 -1.0 0.9475157260894775 0.46850723028182983 0 1.0 0 0.0 0 0.0 0 0.0 -1.4163941144943237 -0.14668390154838562 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9931448698043823 0.45655930042266846 0 1.0 0 0.0 0 0.0 0 0.0 -1.4166568517684937 -0.1458447277545929 -0.2839455306529999 0.0 0.0 -1.0 0.9932801127433777 0.4573652744293213 0 1.0 0 0.0 0 0.0 0 0.0 -1.321989893913269 -0.14588730037212372 -0.2839455306529999 0.0 0.0 -1.0 0.9475157260894775 0.46850723028182983 0 1.0 0 0.0 0 0.0 0 0.0 -1.4163941144943237 -0.14668390154838562 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9931448698043823 0.45655930042266846 0 1.0 0 0.0 0 0.0 0 0.0 -1.321989893913269 -0.14588730037212372 -0.2839455306529999 0.0 0.0 -1.0 0.9475157260894775 0.46850723028182983 0 1.0 0 0.0 0 0.0 0 0.0 -1.3208016157150269 -0.1499311327934265 -0.2839455306529999 0.0 0.0 -1.0 0.9472158551216125 0.46502256393432617 0 1.0 0 0.0 0 0.0 0 0.0 -1.4161120653152466 -0.1476057767868042 -0.2839455306529999 0.0 0.0 -1.0 0.9930000901222229 0.45567595958709717 0 1.0 0 0.0 0 0.0 0 0.0 -1.4163941144943237 -0.14668390154838562 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9931448698043823 0.45655930042266846 0 1.0 0 0.0 0 0.0 0 0.0 -1.3208016157150269 -0.1499311327934265 -0.2839455306529999 0.0 0.0 -1.0 0.9472158551216125 0.46502256393432617 0 1.0 0 0.0 0 0.0 0 0.0 -1.6334062814712524 -0.15033003687858582 -0.2839455306529999 0.0 0.0 -1.0 1.110098123550415 0.44204282760620117 0 1.0 0 0.0 0 0.0 0 0.0 -1.4217404127120972 -0.1473163217306137 -0.2839455306529999 0.0 0.0 -1.0 0.9960373640060425 0.4553300738334656 0 1.0 0 0.0 0 0.0 0 0.0 -1.4260165691375732 -0.15114732086658478 -0.2839455306529999 0.0 0.0 -1.0 0.9983725547790527 0.4510546922683716 0 1.0 0 0.0 0 0.0 0 0.0 -1.415810465812683 -0.14861035346984863 -0.2839455306529999 0.0 0.0 -1.0 0.992845892906189 0.4547160267829895 0 1.0 0 0.0 0 0.0 0 0.0 -1.4161120653152466 -0.1476057767868042 -0.2839455306529999 0.0 0.0 -1.0 0.9930000901222229 0.45567595958709717 0 1.0 0 0.0 0 0.0 0 0.0 -1.3208016157150269 -0.1499311327934265 -0.2839455306529999 0.0 0.0 -1.0 0.9472158551216125 0.46502256393432617 0 1.0 0 0.0 0 0.0 0 0.0 -1.4154893159866333 -0.14969763159751892 -0.2839455306529999 0.0 0.0 -1.0 0.9926822185516357 0.4536803960800171 0 1.0 0 0.0 0 0.0 0 0.0 -1.415810465812683 -0.14861035346984863 -0.2839455306529999 0.0 0.0 -1.0 0.992845892906189 0.4547160267829895 0 1.0 0 0.0 0 0.0 0 0.0 -1.3208016157150269 -0.1499311327934265 -0.2839455306529999 0.0 0.0 -1.0 0.9472158551216125 0.46502256393432617 0 1.0 0 0.0 0 0.0 0 0.0 -1.4151488542556763 -0.15086759626865387 -0.2839455306529999 0.0 0.0 -1.0 0.9925094842910767 0.4525699019432068 0 1.0 0 0.0 0 0.0 0 0.0 -1.4154893159866333 -0.14969763159751892 -0.2839455306529999 0.0 0.0 -1.0 0.9926822185516357 0.4536803960800171 0 1.0 0 0.0 0 0.0 0 0.0 -1.3208016157150269 -0.1499311327934265 -0.2839455306529999 0.0 0.0 -1.0 0.9472158551216125 0.46502256393432617 0 1.0 0 0.0 0 0.0 0 0.0 -1.4151488542556763 -0.15086759626865387 -0.2839455306529999 0.0 0.0 -1.0 0.9925094842910767 0.4525699019432068 0 1.0 0 0.0 0 0.0 0 0.0 -1.3208016157150269 -0.1499311327934265 -0.2839455306529999 0.0 0.0 -1.0 0.9472158551216125 0.46502256393432617 0 1.0 0 0.0 0 0.0 0 0.0 -1.319499135017395 -0.15402118861675262 -0.2839455306529999 0.0 0.0 -1.0 0.9468740224838257 0.46155840158462524 0 1.0 0 0.0 0 0.0 0 0.0 -1.6285791397094727 -0.15586857497692108 -0.2839455306529999 0.0 0.0 -1.0 1.1073575019836426 0.4370245933532715 0 1.0 0 0.0 0 0.0 0 0.0 -1.6334062814712524 -0.15033003687858582 -0.2839455306529999 0.0 0.0 -1.0 1.110098123550415 0.44204282760620117 0 1.0 0 0.0 0 0.0 0 0.0 -1.4260165691375732 -0.15114732086658478 -0.2839455306529999 0.0 0.0 -1.0 0.9983725547790527 0.4510546922683716 0 1.0 0 0.0 0 0.0 0 0.0 -1.414788842201233 -0.15212027728557587 -0.2839455306529999 0.0 0.0 -1.0 0.9923274517059326 0.451385498046875 0 1.0 0 0.0 0 0.0 0 0.0 -1.4151488542556763 -0.15086759626865387 -0.2839455306529999 0.0 0.0 -1.0 0.9925094842910767 0.4525699019432068 0 1.0 0 0.0 0 0.0 0 0.0 -1.319499135017395 -0.15402118861675262 -0.2839455306529999 0.0 0.0 -1.0 0.9468740224838257 0.46155840158462524 0 1.0 0 0.0 0 0.0 0 0.0 -1.6285791397094727 -0.15586857497692108 -0.2839455306529999 0.0 0.0 -1.0 1.1073575019836426 0.4370245933532715 0 1.0 0 0.0 0 0.0 0 0.0 -1.4260165691375732 -0.15114732086658478 -0.2839455306529999 0.0 0.0 -1.0 0.9983725547790527 0.4510546922683716 0 1.0 0 0.0 0 0.0 0 0.0 -1.430341362953186 -0.15480805933475494 -0.2839455306529999 0.0 0.0 -1.0 1.0007305145263672 0.44697535037994385 0 1.0 0 0.0 0 0.0 0 0.0 -1.4144092798233032 -0.15345565974712372 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9921363592147827 0.45012837648391724 0 1.0 0 0.0 0 0.0 0 0.0 -1.414788842201233 -0.15212027728557587 -0.2839455306529999 0.0 0.0 -1.0 0.9923274517059326 0.451385498046875 0 1.0 0 0.0 0 0.0 0 0.0 -1.319499135017395 -0.15402118861675262 -0.2839455306529999 0.0 0.0 -1.0 0.9468740224838257 0.46155840158462524 0 1.0 0 0.0 0 0.0 0 0.0 -1.4140104055404663 -0.15487372875213623 -0.2839455306529999 0.0 0.0 -1.0 0.9919363260269165 0.4487995505332947 0 1.0 0 0.0 0 0.0 0 0.0 -1.4144092798233032 -0.15345565974712372 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9921363592147827 0.45012837648391724 0 1.0 0 0.0 0 0.0 0 0.0 -1.319499135017395 -0.15402118861675262 -0.2839455306529999 0.0 0.0 -1.0 0.9468740224838257 0.46155840158462524 0 1.0 0 0.0 0 0.0 0 0.0 -1.4140104055404663 -0.15487372875213623 -0.2839455306529999 0.0 0.0 -1.0 0.9919363260269165 0.4487995505332947 0 1.0 0 0.0 0 0.0 0 0.0 -1.319499135017395 -0.15402118861675262 -0.2839455306529999 0.0 0.0 -1.0 0.9468740224838257 0.46155840158462524 0 1.0 0 0.0 0 0.0 0 0.0 -1.3180822134017944 -0.15815743803977966 -0.2839455306529999 0.0 0.0 -1.0 0.946491003036499 0.4581177234649658 0 1.0 0 0.0 0 0.0 0 0.0 -1.6285791397094727 -0.15586857497692108 -0.2839455306529999 0.0 0.0 -1.0 0.10735753178596497 0.4370245933532715 0 1.0 0 0.0 0 0.0 0 0.0 -1.430341362953186 -0.15480805933475494 -0.2839455306529999 0.0 0.0 -1.0 0.0007304549217224121 0.44697535037994385 0 1.0 0 0.0 0 0.0 0 0.0 -1.4347147941589355 -0.158298522233963 -0.2839455306529999 0.0 0.0 -1.0 0.003111541271209717 0.4430910348892212 0 1.0 0 0.0 0 0.0 0 0.0 -1.4130885601043701 -0.1580187976360321 -0.2839455306529999 0.0 0.0 -1.0 0.9914758205413818 0.4458812475204468 0 1.0 0 0.0 0 0.0 0 0.0 -1.4140104055404663 -0.15487372875213623 -0.2839455306529999 0.0 0.0 -1.0 0.9919363260269165 0.4487995505332947 0 1.0 0 0.0 0 0.0 0 0.0 -1.3180822134017944 -0.15815743803977966 -0.2839455306529999 0.0 0.0 -1.0 0.946491003036499 0.4581177234649658 0 1.0 0 0.0 0 0.0 0 0.0 -1.623292326927185 -0.16117845475673676 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.10441264510154724 0.4322202205657959 0 1.0 0 0.0 0 0.0 0 0.0 -1.6285791397094727 -0.15586857497692108 -0.2839455306529999 0.0 0.0 -1.0 0.10735753178596497 0.4370245933532715 0 1.0 0 0.0 0 0.0 0 0.0 -1.4347147941589355 -0.158298522233963 -0.2839455306529999 0.0 0.0 -1.0 0.003111541271209717 0.4430910348892212 0 1.0 0 0.0 0 0.0 0 0.0 -1.4121910333633423 -0.1610325127840042 -0.2839455306529999 0.0 0.0 -1.0 0.9910306334495544 0.4431183338165283 0 1.0 0 0.0 0 0.0 0 0.0 -1.4130885601043701 -0.1580187976360321 -0.2839455306529999 0.0 0.0 -1.0 0.9914758205413818 0.4458812475204468 0 1.0 0 0.0 0 0.0 0 0.0 -1.3180822134017944 -0.15815743803977966 -0.2839455306529999 0.0 0.0 -1.0 0.946491003036499 0.4581177234649658 0 1.0 0 0.0 0 0.0 0 0.0 -1.4121910333633423 -0.1610325127840042 -0.2839455306529999 0.0 0.0 -1.0 0.9910306334495544 0.4431183338165283 0 1.0 0 0.0 0 0.0 0 0.0 -1.3180822134017944 -0.15815743803977966 -0.2839455306529999 0.0 0.0 -1.0 0.946491003036499 0.4581177234649658 0 1.0 0 0.0 0 0.0 0 0.0 -1.3165510892868042 -0.1623399257659912 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9460681080818176 0.45470309257507324 0 1.0 0 0.0 0 0.0 0 0.0 -1.623292326927185 -0.16117845475673676 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.10441264510154724 0.4322202205657959 0 1.0 0 0.0 0 0.0 0 0.0 -1.4347147941589355 -0.158298522233963 -0.2839455306529999 0.0 0.0 -1.0 0.003111541271209717 0.4430910348892212 0 1.0 0 0.0 0 0.0 0 0.0 -1.4391368627548218 -0.16161872446537018 -0.2839455306529999 0.0 0.0 -1.0 0.005516260862350464 0.4394006133079529 0 1.0 0 0.0 0 0.0 0 0.0 -1.4113178253173828 -0.16391488909721375 -0.2839455306529999 0.0 0.0 -1.0 0.9906004667282104 0.4405066967010498 0 1.0 0 0.0 0 0.0 0 0.0 -1.4121910333633423 -0.1610325127840042 -0.2839455306529999 0.0 0.0 -1.0 0.9910306334495544 0.4431183338165283 0 1.0 0 0.0 0 0.0 0 0.0 -1.3165510892868042 -0.1623399257659912 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9460681080818176 0.45470309257507324 0 1.0 0 0.0 0 0.0 0 0.0 -1.6176066398620605 -0.1661575436592102 -0.2839455306529999 0.0 0.0 -1.0 0.10129424929618835 0.42771822214126587 0 1.0 0 0.0 0 0.0 0 0.0 -1.623292326927185 -0.16117845475673676 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.10441264510154724 0.4322202205657959 0 1.0 0 0.0 0 0.0 0 0.0 -1.4391368627548218 -0.16161872446537018 -0.2839455306529999 0.0 0.0 -1.0 0.005516260862350464 0.4394006133079529 0 1.0 0 0.0 0 0.0 0 0.0 -1.6176066398620605 -0.1661575436592102 -0.2839455306529999 0.0 0.0 -1.0 0.10129424929618835 0.42771822214126587 0 1.0 0 0.0 0 0.0 0 0.0 -1.4391368627548218 -0.16161872446537018 -0.2839455306529999 0.0 0.0 -1.0 0.005516260862350464 0.4394006133079529 0 1.0 0 0.0 0 0.0 0 0.0 -1.4436075687408447 -0.16476865112781525 -0.2839455306529999 0.0 0.0 -1.0 0.007945001125335693 0.43590283393859863 0 1.0 0 0.0 0 0.0 0 0.0 -1.4113178253173828 -0.16391488909721375 -0.2839455306529999 0.0 0.0 -1.0 0.9906004667282104 0.4405066967010498 0 1.0 0 0.0 0 0.0 0 0.0 -1.3165510892868042 -0.1623399257659912 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9460681080818176 0.45470309257507324 0 1.0 0 0.0 0 0.0 0 0.0 -1.3149055242538452 -0.1665686070919037 -0.2839455306529999 0.0 0.0 -1.0 0.9456060528755188 0.45131754875183105 0 1.0 0 0.0 0 0.0 0 0.0 -1.4104689359664917 -0.1666659116744995 -0.2839455306529999 0.0 0.0 -1.0 0.9901849031448364 0.4380425810813904 0 1.0 0 0.0 0 0.0 0 0.0 -1.4113178253173828 -0.16391488909721375 -0.2839455306529999 0.0 0.0 -1.0 0.9906004667282104 0.4405066967010498 0 1.0 0 0.0 0 0.0 0 0.0 -1.3149055242538452 -0.1665686070919037 -0.2839455306529999 0.0 0.0 -1.0 0.9456060528755188 0.45131754875183105 0 1.0 0 0.0 0 0.0 0 0.0 -1.6176066398620605 -0.1661575436592102 -0.2839455306529999 0.0 0.0 -1.0 0.10129424929618835 0.42771822214126587 0 1.0 0 0.0 0 0.0 0 0.0 -1.4436075687408447 -0.16476865112781525 -0.2839455306529999 0.0 0.0 -1.0 0.007945001125335693 0.43590283393859863 0 1.0 0 0.0 0 0.0 0 0.0 -1.4481269121170044 -0.1677483171224594 -0.2839455306529999 0.0 0.0 -1.0 0.01039820909500122 0.43259626626968384 0 1.0 0 0.0 0 0.0 0 0.0 -1.61158287525177 -0.17070366442203522 -0.2839455306529999 0.0 0.0 -1.0 0.09803354740142822 0.4236064553260803 0 1.0 0 0.0 0 0.0 0 0.0 -1.6176066398620605 -0.1661575436592102 -0.2839455306529999 0.0 0.0 -1.0 0.10129424929618835 0.42771822214126587 0 1.0 0 0.0 0 0.0 0 0.0 -1.4481269121170044 -0.1677483171224594 -0.2839455306529999 0.0 0.0 -1.0 0.01039820909500122 0.43259626626968384 0 1.0 0 0.0 0 0.0 0 0.0 -1.4104689359664917 -0.1666659116744995 -0.2839455306529999 0.0 0.0 -1.0 0.9901849031448364 0.4380425810813904 0 1.0 0 0.0 0 0.0 0 0.0 -1.3149055242538452 -0.1665686070919037 -0.2839455306529999 0.0 0.0 -1.0 0.9456060528755188 0.45131754875183105 0 1.0 0 0.0 0 0.0 0 0.0 -1.3131457567214966 -0.17084351181983948 -0.2839455306529999 0.0 0.0 -1.0 0.945106029510498 0.4479633569717407 0 1.0 0 0.0 0 0.0 0 0.0 -1.409644365310669 -0.1692855805158615 -0.2839455306529999 0.0 0.0 -1.0 0.9897835850715637 0.4357222318649292 0 1.0 0 0.0 0 0.0 0 0.0 -1.4104689359664917 -0.1666659116744995 -0.2839455306529999 0.0 0.0 -1.0 0.9901849031448364 0.4380425810813904 0 1.0 0 0.0 0 0.0 0 0.0 -1.3131457567214966 -0.17084351181983948 -0.2839455306529999 0.0 0.0 -1.0 0.945106029510498 0.4479633569717407 0 1.0 0 0.0 0 0.0 0 0.0 -1.61158287525177 -0.17070366442203522 -0.2839455306529999 0.0 0.0 -1.0 0.09803354740142822 0.4236064553260803 0 1.0 0 0.0 0 0.0 0 0.0 -1.4481269121170044 -0.1677483171224594 -0.2839455306529999 0.0 0.0 -1.0 0.01039820909500122 0.43259626626968384 0 1.0 0 0.0 0 0.0 0 0.0 -1.4526948928833008 -0.17055772244930267 -0.2839455306529999 0.0 0.0 -1.0 0.012876123189926147 0.42947977781295776 0 1.0 0 0.0 0 0.0 0 0.0 -1.4088441133499146 -0.17177391052246094 -0.2839455306529999 0.0 0.0 -1.0 0.9893962144851685 0.4335421919822693 0 1.0 0 0.0 0 0.0 0 0.0 -1.409644365310669 -0.1692855805158615 -0.2839455306529999 0.0 0.0 -1.0 0.9897835850715637 0.4357222318649292 0 1.0 0 0.0 0 0.0 0 0.0 -1.3131457567214966 -0.17084351181983948 -0.2839455306529999 0.0 0.0 -1.0 0.945106029510498 0.4479633569717407 0 1.0 0 0.0 0 0.0 0 0.0 -1.61158287525177 -0.17070366442203522 -0.2839455306529999 0.0 0.0 -1.0 0.09803354740142822 0.4236064553260803 0 1.0 0 0.0 0 0.0 0 0.0 -1.4526948928833008 -0.17055772244930267 -0.2839455306529999 0.0 0.0 -1.0 0.012876123189926147 0.42947977781295776 0 1.0 0 0.0 0 0.0 0 0.0 -1.4573115110397339 -0.17319685220718384 -0.2839455306529999 0.0 0.0 -1.0 0.01537904143333435 0.426551878452301 0 1.0 0 0.0 0 0.0 0 0.0 -1.605220913887024 -0.1748168170452118 -0.2839455306529999 0.0 0.0 -1.0 0.09462365508079529 0.419883131980896 0 1.0 0 0.0 0 0.0 0 0.0 -1.61158287525177 -0.17070366442203522 -0.2839455306529999 0.0 0.0 -1.0 0.09803354740142822 0.4236064553260803 0 1.0 0 0.0 0 0.0 0 0.0 -1.4573115110397339 -0.17319685220718384 -0.2839455306529999 0.0 0.0 -1.0 0.01537904143333435 0.426551878452301 0 1.0 0 0.0 0 0.0 0 0.0 -1.4088441133499146 -0.17177391052246094 -0.2839455306529999 0.0 0.0 -1.0 0.9893962144851685 0.4335421919822693 0 1.0 0 0.0 0 0.0 0 0.0 -1.3131457567214966 -0.17084351181983948 -0.2839455306529999 0.0 0.0 -1.0 0.945106029510498 0.4479633569717407 0 1.0 0 0.0 0 0.0 0 0.0 -1.3112715482711792 -0.17516463994979858 -0.2839455306529999 0.0 0.0 -1.0 0.9445689916610718 0.44464319944381714 0 1.0 0 0.0 0 0.0 0 0.0 -1.4080681800842285 -0.1741308867931366 -0.2839455306529999 0.0 0.0 -1.0 0.989022433757782 0.43149906396865845 0 1.0 0 0.0 0 0.0 0 0.0 -1.4088441133499146 -0.17177391052246094 -0.2839455306529999 0.0 0.0 -1.0 0.9893962144851685 0.4335421919822693 0 1.0 0 0.0 0 0.0 0 0.0 -1.3112715482711792 -0.17516463994979858 -0.2839455306529999 0.0 0.0 -1.0 0.9445689916610718 0.44464319944381714 0 1.0 0 0.0 0 0.0 0 0.0 -1.605220913887024 -0.1748168170452118 -0.2839455306529999 0.0 0.0 -1.0 0.09462365508079529 0.419883131980896 0 1.0 0 0.0 0 0.0 0 0.0 -1.4573115110397339 -0.17319685220718384 -0.2839455306529999 0.0 0.0 -1.0 0.01537904143333435 0.426551878452301 0 1.0 0 0.0 0 0.0 0 0.0 -1.4619768857955933 -0.1756657212972641 -0.2839455306529999 0.0 0.0 -1.0 0.017907321453094482 0.42381131649017334 0 1.0 0 0.0 0 0.0 0 0.0 -1.4073165655136108 -0.1763565093278885 -0.2839455306529999 0.0 0.0 -1.0 0.9886620044708252 0.42958980798721313 0 1.0 0 0.0 0 0.0 0 0.0 -1.4080681800842285 -0.1741308867931366 -0.2839455306529999 0.0 0.0 -1.0 0.989022433757782 0.43149906396865845 0 1.0 0 0.0 0 0.0 0 0.0 -1.3112715482711792 -0.17516463994979858 -0.2839455306529999 0.0 0.0 -1.0 0.9445689916610718 0.44464319944381714 0 1.0 0 0.0 0 0.0 0 0.0 -1.5985209941864014 -0.17849700152873993 -0.2839455306529999 0.0 0.0 -1.0 0.09105780720710754 0.41654813289642334 0 1.0 0 0.0 0 0.0 0 0.0 -1.605220913887024 -0.1748168170452118 -0.2839455306529999 0.0 0.0 -1.0 0.09462365508079529 0.419883131980896 0 1.0 0 0.0 0 0.0 0 0.0 -1.4619768857955933 -0.1756657212972641 -0.2839455306529999 0.0 0.0 -1.0 0.017907321453094482 0.42381131649017334 0 1.0 0 0.0 0 0.0 0 0.0 -1.4073165655136108 -0.1763565093278885 -0.2839455306529999 0.0 0.0 -1.0 0.9886620044708252 0.42958980798721313 0 1.0 0 0.0 0 0.0 0 0.0 -1.3112715482711792 -0.17516463994979858 -0.2839455306529999 0.0 0.0 -1.0 0.9445689916610718 0.44464319944381714 0 1.0 0 0.0 0 0.0 0 0.0 -1.3092831373214722 -0.1795319765806198 -0.2839455306529999 0.0 0.0 -1.0 0.943996250629425 0.4413594603538513 0 1.0 0 0.0 0 0.0 0 0.0 -1.5985209941864014 -0.17849700152873993 -0.2839455306529999 0.0 0.0 -1.0 0.09105780720710754 0.41654813289642334 0 1.0 0 0.0 0 0.0 0 0.0 -1.4619768857955933 -0.1756657212972641 -0.2839455306529999 0.0 0.0 -1.0 0.017907321453094482 0.42381131649017334 0 1.0 0 0.0 0 0.0 0 0.0 -1.4666908979415894 -0.17796431481838226 -0.2839455306529999 0.0 0.0 -1.0 0.02046099305152893 0.42125678062438965 0 1.0 0 0.0 0 0.0 0 0.0 -1.4065892696380615 -0.1784507930278778 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9883145093917847 0.4278113842010498 0 1.0 0 0.0 0 0.0 0 0.0 -1.4073165655136108 -0.1763565093278885 -0.2839455306529999 0.0 0.0 -1.0 0.9886620044708252 0.42958980798721313 0 1.0 0 0.0 0 0.0 0 0.0 -1.3092831373214722 -0.1795319765806198 -0.2839455306529999 0.0 0.0 -1.0 0.943996250629425 0.4413594603538513 0 1.0 0 0.0 0 0.0 0 0.0 -1.5985209941864014 -0.17849700152873993 -0.2839455306529999 0.0 0.0 -1.0 0.09105780720710754 0.41654813289642334 0 1.0 0 0.0 0 0.0 0 0.0 -1.4666908979415894 -0.17796431481838226 -0.2839455306529999 0.0 0.0 -1.0 0.02046099305152893 0.42125678062438965 0 1.0 0 0.0 0 0.0 0 0.0 -1.4714535474777222 -0.18009264767169952 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.02304023504257202 0.41888707876205444 0 1.0 0 0.0 0 0.0 0 0.0 -1.4058862924575806 -0.18041372299194336 -0.2839455306529999 0.0 0.0 -1.0 0.9879797697067261 0.4261610507965088 0 1.0 0 0.0 0 0.0 0 0.0 -1.4065892696380615 -0.1784507930278778 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9883145093917847 0.4278113842010498 0 1.0 0 0.0 0 0.0 0 0.0 -1.3092831373214722 -0.1795319765806198 -0.2839455306529999 0.0 0.0 -1.0 0.943996250629425 0.4413594603538513 0 1.0 0 0.0 0 0.0 0 0.0 -1.5914828777313232 -0.18174423277378082 -0.2839455306529999 0.0 0.0 -1.0 0.08732900023460388 0.41360336542129517 0 1.0 0 0.0 0 0.0 0 0.0 -1.5985209941864014 -0.17849700152873993 -0.2839455306529999 0.0 0.0 -1.0 0.09105780720710754 0.41654813289642334 0 1.0 0 0.0 0 0.0 0 0.0 -1.4714535474777222 -0.18009264767169952 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.02304023504257202 0.41888707876205444 0 1.0 0 0.0 0 0.0 0 0.0 -1.4058862924575806 -0.18041372299194336 -0.2839455306529999 0.0 0.0 -1.0 0.9879797697067261 0.4261610507965088 0 1.0 0 0.0 0 0.0 0 0.0 -1.3092831373214722 -0.1795319765806198 -0.2839455306529999 0.0 0.0 -1.0 0.943996250629425 0.4413594603538513 0 1.0 0 0.0 0 0.0 0 0.0 -1.3071802854537964 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.9433887004852295 0.43811434507369995 0 1.0 0 0.0 0 0.0 0 0.0 -1.5914828777313232 -0.18174423277378082 -0.2839455306529999 0.0 0.0 -1.0 0.08732900023460388 0.41360336542129517 0 1.0 0 0.0 0 0.0 0 0.0 -1.4714535474777222 -0.18009264767169952 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.02304023504257202 0.41888707876205444 0 1.0 0 0.0 0 0.0 0 0.0 -1.4762672185897827 -0.18205071985721588 -0.2839455306529999 0.0 0.0 -1.0 0.025646448135375977 0.4167007803916931 0 1.0 0 0.0 0 0.0 0 0.0 -1.405207633972168 -0.18224529922008514 -0.2839455306529999 0.0 0.0 -1.0 0.9876574277877808 0.4246361255645752 0 1.0 0 0.0 0 0.0 0 0.0 -1.4058862924575806 -0.18041372299194336 -0.2839455306529999 0.0 0.0 -1.0 0.9879797697067261 0.4261610507965088 0 1.0 0 0.0 0 0.0 0 0.0 -1.3071802854537964 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.9433887004852295 0.43811434507369995 0 1.0 0 0.0 0 0.0 0 0.0 -1.584106683731079 -0.18455849587917328 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08343049883842468 0.4110526442527771 0 1.0 0 0.0 0 0.0 0 0.0 -1.5914828777313232 -0.18174423277378082 -0.2839455306529999 0.0 0.0 -1.0 0.08732900023460388 0.41360336542129517 0 1.0 0 0.0 0 0.0 0 0.0 -1.4762672185897827 -0.18205071985721588 -0.2839455306529999 0.0 0.0 -1.0 0.025646448135375977 0.4167007803916931 0 1.0 0 0.0 0 0.0 0 0.0 -1.584106683731079 -0.18455849587917328 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08343049883842468 0.4110526442527771 0 1.0 0 0.0 0 0.0 0 0.0 -1.4762672185897827 -0.18205071985721588 -0.2839455306529999 0.0 0.0 -1.0 0.025646448135375977 0.4167007803916931 0 1.0 0 0.0 0 0.0 0 0.0 -1.481134295463562 -0.18383851647377014 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.028280913829803467 0.41469669342041016 0 1.0 0 0.0 0 0.0 0 0.0 -1.4045532941818237 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.9873474836349487 0.42323416471481323 0 1.0 0 0.0 0 0.0 0 0.0 -1.405207633972168 -0.18224529922008514 -0.2839455306529999 0.0 0.0 -1.0 0.9876574277877808 0.4246361255645752 0 1.0 0 0.0 0 0.0 0 0.0 -1.3071802854537964 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.9433887004852295 0.43811434507369995 0 1.0 0 0.0 0 0.0 0 0.0 -1.584106683731079 -0.18455849587917328 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08343049883842468 0.4110526442527771 0 1.0 0 0.0 0 0.0 0 0.0 -1.481134295463562 -0.18383851647377014 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.028280913829803467 0.41469669342041016 0 1.0 0 0.0 0 0.0 0 0.0 -1.4860550165176392 -0.1854560375213623 -0.2839455306529999 0.0 0.0 -1.0 0.030943751335144043 0.41287368535995483 0 1.0 0 0.0 0 0.0 0 0.0 -1.576392412185669 -0.1869397908449173 -0.2839455306529999 0.0 0.0 -1.0 0.07935571670532227 0.40890204906463623 0 1.0 0 0.0 0 0.0 0 0.0 -1.584106683731079 -0.18455849587917328 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.08343049883842468 0.4110526442527771 0 1.0 0 0.0 0 0.0 0 0.0 -1.4860550165176392 -0.1854560375213623 -0.2839455306529999 0.0 0.0 -1.0 0.030943751335144043 0.41287368535995483 0 1.0 0 0.0 0 0.0 0 0.0 -1.576392412185669 -0.1869397908449173 -0.2839455306529999 0.0 0.0 -1.0 0.07935571670532227 0.40890204906463623 0 1.0 0 0.0 0 0.0 0 0.0 -1.4860550165176392 -0.1854560375213623 -0.2839455306529999 0.0 0.0 -1.0 0.030943751335144043 0.41287368535995483 0 1.0 0 0.0 0 0.0 0 0.0 -1.4910292625427246 -0.18690331280231476 -0.2839455306529999 0.0 0.0 -1.0 0.033634722232818604 0.41123098134994507 0 1.0 0 0.0 0 0.0 0 0.0 -1.576392412185669 -0.1869397908449173 -0.2839455306529999 0.0 0.0 -1.0 0.07935571670532227 0.40890204906463623 0 1.0 0 0.0 0 0.0 0 0.0 -1.4910292625427246 -0.18690331280231476 -0.2839455306529999 0.0 0.0 -1.0 0.033634722232818604 0.41123098134994507 0 1.0 0 0.0 0 0.0 0 0.0 -1.4960569143295288 -0.18818031251430511 -0.2839455306529999 0.0 0.0 -1.0 0.03635364770889282 0.40976768732070923 0 1.0 0 0.0 0 0.0 0 0.0 -1.5683399438858032 -0.18888813257217407 -0.2839455306529999 0.0 0.0 -1.0 0.07509827613830566 0.40715938806533813 0 1.0 0 0.0 0 0.0 0 0.0 -1.576392412185669 -0.1869397908449173 -0.2839455306529999 0.0 0.0 -1.0 0.07935571670532227 0.40890204906463623 0 1.0 0 0.0 0 0.0 0 0.0 -1.4960569143295288 -0.18818031251430511 -0.2839455306529999 0.0 0.0 -1.0 0.03635364770889282 0.40976768732070923 0 1.0 0 0.0 0 0.0 0 0.0 -1.5683399438858032 -0.18888813257217407 -0.2839455306529999 0.0 0.0 -1.0 0.07509827613830566 0.40715938806533813 0 1.0 0 0.0 0 0.0 0 0.0 -1.4960569143295288 -0.18818031251430511 -0.2839455306529999 0.0 0.0 -1.0 0.03635364770889282 0.40976768732070923 0 1.0 0 0.0 0 0.0 0 0.0 -1.5011382102966309 -0.18928703665733337 -0.2839455306529999 0.0 0.0 -1.0 0.039100319147109985 0.4084831476211548 0 1.0 0 0.0 0 0.0 0 0.0 -1.559949517250061 -0.1904035061597824 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07065242528915405 0.40583473443984985 0 1.0 0 0.0 0 0.0 0 0.0 -1.5683399438858032 -0.18888813257217407 -0.2839455306529999 0.0 0.0 -1.0 0.07509827613830566 0.40715938806533813 0 1.0 0 0.0 0 0.0 0 0.0 -1.5011382102966309 -0.18928703665733337 -0.2839455306529999 0.0 0.0 -1.0 0.039100319147109985 0.4084831476211548 0 1.0 0 0.0 0 0.0 0 0.0 -1.559949517250061 -0.1904035061597824 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07065242528915405 0.40583473443984985 0 1.0 0 0.0 0 0.0 0 0.0 -1.5011382102966309 -0.18928703665733337 -0.2839455306529999 0.0 0.0 -1.0 0.039100319147109985 0.4084831476211548 0 1.0 0 0.0 0 0.0 0 0.0 -1.5062729120254517 -0.19022351503372192 -0.2839455306529999 0.0 0.0 -1.0 0.041874319314956665 0.40737658739089966 0 1.0 0 0.0 0 0.0 0 0.0 -1.559949517250061 -0.1904035061597824 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07065242528915405 0.40583473443984985 0 1.0 0 0.0 0 0.0 0 0.0 -1.5062729120254517 -0.19022351503372192 -0.2839455306529999 0.0 0.0 -1.0 0.041874319314956665 0.40737658739089966 0 1.0 0 0.0 0 0.0 0 0.0 -1.5114612579345703 -0.19098970293998718 -0.2839455306529999 0.0 0.0 -1.0 0.04467529058456421 0.40644752979278564 0 1.0 0 0.0 0 0.0 0 0.0 -1.5512208938598633 -0.1914859116077423 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.06601288914680481 0.40493983030319214 0 1.0 0 0.0 0 0.0 0 0.0 -1.559949517250061 -0.1904035061597824 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.07065242528915405 0.40583473443984985 0 1.0 0 0.0 0 0.0 0 0.0 -1.5114612579345703 -0.19098970293998718 -0.2839455306529999 0.0 0.0 -1.0 0.04467529058456421 0.40644752979278564 0 1.0 0 0.0 0 0.0 0 0.0 -1.5512208938598633 -0.1914859116077423 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.06601288914680481 0.40493983030319214 0 1.0 0 0.0 0 0.0 0 0.0 -1.5114612579345703 -0.19098970293998718 -0.2839455306529999 0.0 0.0 -1.0 0.04467529058456421 0.40644752979278564 0 1.0 0 0.0 0 0.0 0 0.0 -1.5167030096054077 -0.19158564507961273 -0.2839455306529999 0.0 0.0 -1.0 0.04750263690948486 0.405695378780365 0 1.0 0 0.0 0 0.0 0 0.0 -1.5421541929244995 -0.19213536381721497 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.06117549538612366 0.40448832511901855 0 1.0 0 0.0 0 0.0 0 0.0 -1.5512208938598633 -0.1914859116077423 -0.2839455306529999 0.0 -3.0518509447574615e-05 -1.0 0.06601288914680481 0.40493983030319214 0 1.0 0 0.0 0 0.0 0 0.0 -1.5167030096054077 -0.19158564507961273 -0.2839455306529999 0.0 0.0 -1.0 0.04750263690948486 0.405695378780365 0 1.0 0 0.0 0 0.0 0 0.0 -1.5421541929244995 -0.19213536381721497 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.06117549538612366 0.40448832511901855 0 1.0 0 0.0 0 0.0 0 0.0 -1.5167030096054077 -0.19158564507961273 -0.2839455306529999 0.0 0.0 -1.0 0.04750263690948486 0.405695378780365 0 1.0 0 0.0 0 0.0 0 0.0 -1.5219982862472534 -0.19201131165027618 -0.2839455306529999 0.0 0.0 -1.0 0.05035579204559326 0.40511953830718994 0 1.0 0 0.0 0 0.0 0 0.0 -1.5421541929244995 -0.19213536381721497 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.06117549538612366 0.40448832511901855 0 1.0 0 0.0 0 0.0 0 0.0 -1.5219982862472534 -0.19201131165027618 -0.2839455306529999 0.0 0.0 -1.0 0.05035579204559326 0.40511953830718994 0 1.0 0 0.0 0 0.0 0 0.0 -1.5273470878601074 -0.19226670265197754 -0.2839455306529999 0.0 0.0 -1.0 0.05323415994644165 0.40471965074539185 0 1.0 0 0.0 0 0.0 0 0.0 -1.5327494144439697 -0.19235184788703918 -0.2839455306529999 0.0 -0.00045777764171361923 -0.999969482421875 0.05613693594932556 0.4044952392578125 0 1.0 0 0.0 0 0.0 0 0.0 -1.5421541929244995 -0.19213536381721497 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.06117549538612366 0.40448832511901855 0 1.0 0 0.0 0 0.0 0 0.0 -1.5273470878601074 -0.19226670265197754 -0.2839455306529999 0.0 0.0 -1.0 0.05323415994644165 0.40471965074539185 0 1.0 0 0.0 0 0.0 0 0.0 -2.146409511566162 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.14069145917892456 0.3820388913154602 0 1.0 0 0.0 0 0.0 0 0.0 -2.146409511566162 0.32953959703445435 -0.2839455306529999 0.0 0.0 -1.0 0.2695856988430023 0.7537210583686829 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 0.32953959703445435 -0.2839455306529999 0.0 0.0 -1.0 0.2427637279033661 0.8259592056274414 0 1.0 0 0.0 0 0.0 0 0.0 -2.146409511566162 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.14069145917892456 0.3820388913154602 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 0.32953959703445435 -0.2839455306529999 0.0 0.0 -1.0 0.2427637279033661 0.8259592056274414 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 0.10151857137680054 -0.2839455306529999 0.0 0.0 -1.0 0.1574673056602478 0.6584711074829102 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 0.10151857137680054 -0.2839455306529999 0.0 0.0 -1.0 1.1574673652648926 0.6584711074829102 0 1.0 0 0.0 0 0.0 0 0.0 -1.8332748413085938 0.32953959703445435 -0.2839455306529999 0.0 0.0 -1.0 1.0224628448486328 0.9180190563201904 0 1.0 0 0.0 0 0.0 0 0.0 -1.6938703060150146 0.32953959703445435 -0.2839455306529999 0.0 0.0 -1.0 0.9051481485366821 0.8624878525733948 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 0.10151857137680054 -0.2839455306529999 0.0 0.0 -1.0 1.1574673652648926 0.6584711074829102 0 1.0 0 0.0 0 0.0 0 0.0 -1.6938703060150146 0.32953959703445435 -0.2839455306529999 0.0 0.0 -1.0 0.9051481485366821 0.8624878525733948 0 1.0 0 0.0 0 0.0 0 0.0 -1.8872151374816895 0.1295395791530609 -0.2839455306529999 0.0 0.0 -1.0 1.0517487525939941 0.751492440700531 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 0.10151857137680054 -0.2839455306529999 0.0 0.0 -1.0 0.1574673056602478 0.6584711074829102 0 1.0 0 0.0 0 0.0 0 0.0 -1.8872151374816895 0.1295395791530609 -0.2839455306529999 0.0 0.0 -1.0 0.051748692989349365 0.751492440700531 0 1.0 0 0.0 0 0.0 0 0.0 -1.9586687088012695 0.057035207748413086 -0.2839455306529999 0.0 0.0 -1.0 0.09213393926620483 0.6466642618179321 0 1.0 0 0.0 0 0.0 0 0.0 -1.9586687088012695 0.057035207748413086 -0.2839455306529999 0.0 0.0 -1.0 1.0921339988708496 0.6466642618179321 0 1.0 0 0.0 0 0.0 0 0.0 -1.8872151374816895 0.1295395791530609 -0.2839455306529999 0.0 0.0 -1.0 1.0517487525939941 0.751492440700531 0 1.0 0 0.0 0 0.0 0 0.0 -1.683362364768982 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9581927061080933 0.48435938358306885 0 1.0 0 0.0 0 0.0 0 0.0 -2.146409511566162 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.14069145917892456 0.3820388913154602 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 0.10151857137680054 -0.2839455306529999 0.0 0.0 -1.0 0.1574673056602478 0.6584711074829102 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 -0.02877916395664215 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.12446880340576172 0.5184248089790344 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 -0.02877916395664215 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.12446880340576172 0.5184248089790344 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 0.10151857137680054 -0.2839455306529999 0.0 0.0 -1.0 0.1574673056602478 0.6584711074829102 0 1.0 0 0.0 0 0.0 0 0.0 -1.9586687088012695 0.057035207748413086 -0.2839455306529999 0.0 0.0 -1.0 0.09213393926620483 0.6466642618179321 0 1.0 0 0.0 0 0.0 0 0.0 -1.8175129890441895 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 1.000122308731079 0.4517623782157898 0 1.0 0 0.0 0 0.0 0 0.0 -1.9586687088012695 0.057035207748413086 -0.2839455306529999 0.0 0.0 -1.0 1.0921339988708496 0.6466642618179321 0 1.0 0 0.0 0 0.0 0 0.0 -1.683362364768982 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.9581927061080933 0.48435938358306885 0 1.0 0 0.0 0 0.0 0 0.0 -2.146409511566162 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.14069145917892456 0.3820388913154602 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 -0.02877916395664215 -0.2839455306529999 0.0 0.0 -0.999969482421875 0.12446880340576172 0.5184248089790344 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 -0.18394553661346436 -0.2839455306529999 0.0 0.0 -1.0 0.0974959135055542 0.39517903327941895 0 1.0 0 0.0 0 0.0 0 0.0 -0.15648984909057617 -0.07983966916799545 -0.2839455306529999 -0.9951170086860657 -0.09848322719335556 -0.0 0.0701218843460083 0.6009762287139893 0 1.0 0 0.0 0 0.0 0 0.0 -0.15565800666809082 -0.08717329800128937 0.21605446934700012 -0.9917600154876709 -0.1280556619167328 -0.0 0.40391385555267334 0.45400524139404297 0 1.0 0 0.0 0 0.0 0 0.0 -0.15648984909057617 -0.07983966916799545 0.21605446934700012 -0.9951170086860657 -0.09848322719335556 -0.0 0.40408778190612793 0.46211308240890503 0 1.0 0 0.0 0 0.0 0 0.0 1.8204905986785889 -0.18867407739162445 -0.2839455306529999 0.18597979843616486 -0.982543408870697 -0.0 0.9527758359909058 0.482984721660614 0 1.0 0 0.0 0 0.0 0 0.0 1.8269073963165283 -0.18734599649906158 0.21605445444583893 0.21970275044441223 -0.9755546450614929 -0.0 0.5298887491226196 0.3255653381347656 0 1.0 0 0.0 0 0.0 0 0.0 1.8204905986785889 -0.18867407739162445 0.21605445444583893 0.18597979843616486 -0.982543408870697 -0.0 0.5256187319755554 0.3231980800628662 0 1.0 0 0.0 0 0.0 0 0.0 -1.1235111951828003 -0.09292101114988327 -0.2839455306529999 0.7109591960906982 0.7032074928283691 -0.0 0.05074578523635864 0.49437379837036133 0 1.0 0 0.0 0 0.0 0 0.0 -1.1281375885009766 -0.0878373384475708 0.21605446934700012 0.765251636505127 0.6436964273452759 -0.0 0.5171929597854614 0.30614006519317627 0 1.0 0 0.0 0 0.0 0 0.0 -1.1235111951828003 -0.09292101114988327 0.21605446934700012 0.7109591960906982 0.7032074928283691 -0.0 0.5207288265228271 0.3003121018409729 0 1.0 0 0.0 0 0.0 0 0.0 -1.5450183153152466 -0.10538940131664276 -0.2839455306529999 0.7399212718009949 0.6726584434509277 -0.0 0.06875726580619812 0.48970818519592285 0 1.0 0 0.0 0 0.0 0 0.0 -1.547265887260437 -0.10276243090629578 0.21605446934700012 0.7799615263938904 0.6258125305175781 -0.0 0.49670082330703735 0.30241620540618896 0 1.0 0 0.0 0 0.0 0 0.0 -1.5450183153152466 -0.10538940131664276 0.21605446934700012 0.7399212718009949 0.6726584434509277 -0.0 0.4982786476612091 0.2992667555809021 0 1.0 0 0.0 0 0.0 0 0.0 1.7461764812469482 -0.18838219344615936 -0.2839455306529999 -0.24948881566524506 -0.9683523178100586 -0.0 0.9973554611206055 0.48487597703933716 0 1.0 0 0.0 0 0.0 0 0.0 1.750065565109253 -0.18931257724761963 0.21605445444583893 -0.21604052186012268 -0.9763786792755127 -0.0 1.4758096933364868 0.32011890411376953 0 1.0 0 0.0 0 0.0 0 0.0 1.7461764812469482 -0.18838219344615936 0.21605445444583893 -0.24951933324337006 -0.9683523178100586 -0.0 1.473060965538025 0.32147711515426636 0 1.0 0 0.0 0 0.0 0 0.0 -1.0162993669509888 -0.09031227976083755 -0.2839455306529999 -0.7314981818199158 0.6818140149116516 -0.0 0.9874353408813477 0.5059763193130493 0 1.0 0 0.0 0 0.0 0 0.0 -1.0204806327819824 -0.09452638030052185 0.21605446934700012 -0.6860560774803162 0.7275307178497314 -0.0 0.5944331288337708 0.3158789873123169 0 1.0 0 0.0 0 0.0 0 0.0 -1.0162993669509888 -0.09031227976083755 0.21605446934700012 -0.7314981818199158 0.6818140149116516 -0.0 0.5965896844863892 0.32174062728881836 0 1.0 0 0.0 0 0.0 0 0.0 0.9573602676391602 -0.0594380721449852 -0.2839455306529999 0.9620655179023743 0.27271339297294617 -0.0 0.027515262365341187 0.5092605352401733 0 1.0 0 0.0 0 0.0 0 0.0 0.9558279514312744 -0.053355902433395386 0.21605446934700012 0.9760735034942627 0.21732230484485626 -0.0 0.439240425825119 0.35869020223617554 0 1.0 0 0.0 0 0.0 0 0.0 0.9573602676391602 -0.0594380721449852 0.21605446934700012 0.9620655179023743 0.27271339297294617 -0.0 0.43983423709869385 0.3513116240501404 0 1.0 0 0.0 0 0.0 0 0.0 -1.4496471881866455 -0.10322701185941696 -0.2839455306529999 -0.634144127368927 0.773186445236206 -0.0 1.0120773315429688 0.49981552362442017 0 1.0 0 0.0 0 0.0 0 0.0 -1.452539324760437 -0.10548669099807739 0.21605446934700012 -0.5924558043479919 0.8055665493011475 -0.0 0.5661982893943787 0.3045951724052429 0 1.0 0 0.0 0 0.0 0 0.0 -1.4496471881866455 -0.10322701185941696 0.21605446934700012 -0.634144127368927 0.773186445236206 -0.0 0.5680505633354187 0.30774790048599243 0 1.0 0 0.0 0 0.0 0 0.0 -0.052057743072509766 -0.08473362028598785 -0.2839455306529999 0.921811580657959 0.3875850737094879 -0.0 0.00831332802772522 0.6057209968566895 0 1.0 0 0.0 0 0.0 0 0.0 -0.053148746490478516 -0.08193881809711456 0.21605446934700012 0.940336287021637 0.3401898145675659 -0.0 0.4622611999511719 0.45150309801101685 0 1.0 0 0.0 0 0.0 0 0.0 -0.052057743072509766 -0.08473362028598785 0.21605446934700012 0.921811580657959 0.3875850737094879 -0.0 0.4628440737724304 0.44795089960098267 0 1.0 0 0.0 0 0.0 0 0.0 -1.2380362749099731 -0.09055066853761673 -0.2839455306529999 -0.9320352673530579 -0.36234626173973083 -0.0 0.11300912499427795 0.48906201124191284 0 1.0 0 0.0 0 0.0 0 0.0 -1.2332748174667358 -0.10171164572238922 0.21605446934700012 -0.9059419631958008 -0.42335277795791626 -0.0 0.4478146731853485 0.3064257502555847 0 1.0 0 0.0 0 0.0 0 0.0 -1.2380362749099731 -0.09055066853761673 0.21605446934700012 -0.9320352673530579 -0.36234626173973083 -0.0 0.44594162702560425 0.31891322135925293 0 1.0 0 0.0 0 0.0 0 0.0 0.9591941833496094 -0.06525024771690369 -0.2839455306529999 0.9438154101371765 0.33039337396621704 -0.0 0.026302307844161987 0.5024663209915161 0 1.0 0 0.0 0 0.0 0 0.0 0.9573602676391602 -0.0594380721449852 0.21605446934700012 0.9620655179023743 0.27271339297294617 -0.0 0.43983423709869385 0.3513116240501404 0 1.0 0 0.0 0 0.0 0 0.0 0.9591941833496094 -0.06525024771690369 0.21605446934700012 0.9438154101371765 0.33039337396621704 -0.0 0.4406500458717346 0.3442443609237671 0 1.0 0 0.0 0 0.0 0 0.0 0.06830120086669922 -0.08215530216693878 -0.2839455306529999 -0.8451185822486877 0.5345317125320435 -0.0 0.9299417734146118 0.6005876064300537 0 1.0 0 0.0 0 0.0 0 0.0 0.06628727912902832 -0.08515442907810211 0.21605446934700012 -0.8147831559181213 0.5797296166419983 -0.0 0.5370199084281921 0.4463580846786499 0 1.0 0 0.0 0 0.0 0 0.0 0.06830120086669922 -0.08215530216693878 0.21605446934700012 -0.8451185822486877 0.5345317125320435 -0.0 0.5380769968032837 0.45001834630966187 0 1.0 0 0.0 0 0.0 0 0.0 1.8139474391937256 -0.18979783356189728 -0.2839455306529999 0.15292824804782867 -0.9882198572158813 -0.0 0.9566332101821899 0.48179370164871216 0 1.0 0 0.0 0 0.0 0 0.0 1.8204905986785889 -0.18867407739162445 0.21605445444583893 0.18597979843616486 -0.982543408870697 -0.0 0.5256187319755554 0.3231980800628662 0 1.0 0 0.0 0 0.0 0 0.0 1.8139474391937256 -0.18979783356189728 0.21605445444583893 0.15292824804782867 -0.9882198572158813 -0.0 0.5211864709854126 0.3211352229118347 0 1.0 0 0.0 0 0.0 0 0.0 0.8582241535186768 -0.06064333766698837 -0.2839455306529999 -0.9742423892021179 -0.22537919878959656 -0.0 0.07824346423149109 0.5090236663818359 0 1.0 0 0.0 0 0.0 0 0.0 0.8610334396362305 -0.07151120901107788 0.21605446934700012 -0.9611499309539795 -0.2759788930416107 -0.0 0.3854953348636627 0.3617415428161621 0 1.0 0 0.0 0 0.0 0 0.0 0.8582241535186768 -0.06064333766698837 0.21605446934700012 -0.9742423892021179 -0.22537919878959656 -0.0 0.3852550685405731 0.37335896492004395 0 1.0 0 0.0 0 0.0 0 0.0 -1.3279880285263062 -0.1101532131433487 -0.2839455306529999 0.9967039823532104 0.08105716109275818 -0.0 0.9483141899108887 0.5016369223594666 0 1.0 0 0.0 0 0.0 0 0.0 -1.328415036201477 -0.10430455207824707 0.21605446934700012 0.9978331923484802 0.06543168425559998 -0.0 0.6398884057998657 0.34505248069763184 0 1.0 0 0.0 0 0.0 0 0.0 -1.3279880285263062 -0.1101532131433487 0.21605446934700012 0.9967039823532104 0.08105716109275818 -0.0 0.64090496301651 0.3395833373069763 0 1.0 0 0.0 0 0.0 0 0.0 1.750065565109253 -0.18931257724761963 -0.2839455306529999 -0.21604052186012268 -0.9763786792755127 -0.0 0.9950048923492432 0.4836880564689636 0 1.0 0 0.0 0 0.0 0 0.0 1.754028081893921 -0.1901189088821411 0.21605443954467773 -0.1830805391073227 -0.983092725276947 -0.0 1.4786269664764404 0.31894344091415405 0 1.0 0 0.0 0 0.0 0 0.0 1.750065565109253 -0.18931257724761963 0.21605445444583893 -0.21604052186012268 -0.9763786792755127 -0.0 1.4758096933364868 0.32011890411376953 0 1.0 0 0.0 0 0.0 0 0.0 -1.6543234586715698 -0.10515831410884857 -0.2839455306529999 -0.982329785823822 -0.18707846105098724 -0.0 0.12408101558685303 0.4837164282798767 0 1.0 0 0.0 0 0.0 0 0.0 -1.6527143716812134 -0.11229734867811203 0.21605446934700012 -0.9673146605491638 -0.2534867525100708 -0.0 0.43276700377464294 0.3138952851295471 0 1.0 0 0.0 0 0.0 0 0.0 -1.6543234586715698 -0.10515831410884857 0.21605446934700012 -0.982329785823822 -0.18707846105098724 -0.0 0.43253403902053833 0.32122570276260376 0 1.0 0 0.0 0 0.0 0 0.0 -1.118622064590454 -0.09746956080198288 -0.2839455306529999 0.6484572887420654 0.7612231969833374 -0.0 0.04757365584373474 0.48960989713668823 0 1.0 0 0.0 0 0.0 0 0.0 -1.1235111951828003 -0.09292101114988327 0.21605446934700012 0.7109591960906982 0.7032074928283691 -0.0 0.5207288265228271 0.3003121018409729 0 1.0 0 0.0 0 0.0 0 0.0 -1.118622064590454 -0.09746956080198288 0.21605446934700012 0.6484572887420654 0.7612231969833374 -0.0 0.5245062708854675 0.2952185273170471 0 1.0 0 0.0 0 0.0 0 0.0 -0.0508427619934082 -0.08742626756429672 -0.2839455306529999 0.9002349972724915 0.4353770613670349 -0.0 0.00749245285987854 0.602379560470581 0 1.0 0 0.0 0 0.0 0 0.0 -0.052057743072509766 -0.08473362028598785 0.21605446934700012 0.921811580657959 0.3875850737094879 -0.0 0.4628440737724304 0.44795089960098267 0 1.0 0 0.0 0 0.0 0 0.0 -0.0508427619934082 -0.08742626756429672 0.21605446934700012 0.9002349972724915 0.4353770613670349 -0.0 0.46351292729377747 0.44450944662094116 0 1.0 0 0.0 0 0.0 0 0.0 -1.0204806327819824 -0.09452638030052185 -0.2839455306529999 -0.6860560774803162 0.7275307178497314 -0.0 0.989815354347229 0.5009863376617432 0 1.0 0 0.0 0 0.0 0 0.0 -1.0248029232025146 -0.09833913296461105 0.21605446934700012 -0.634754478931427 0.772667646408081 -0.0 0.5920868515968323 0.31044334173202515 0 1.0 0 0.0 0 0.0 0 0.0 -1.0204806327819824 -0.09452638030052185 0.21605446934700012 -0.6860560774803162 0.7275307178497314 -0.0 0.5944331288337708 0.3158789873123169 0 1.0 0 0.0 0 0.0 0 0.0 0.9613299369812012 -0.07079242914915085 -0.2839455306529999 0.9208654761314392 0.3898129165172577 -0.0 0.02493041753768921 0.4960223436355591 0 1.0 0 0.0 0 0.0 0 0.0 0.9591941833496094 -0.06525024771690369 0.21605446934700012 0.9438154101371765 0.33039337396621704 -0.0 0.4406500458717346 0.3442443609237671 0 1.0 0 0.0 0 0.0 0 0.0 0.9613299369812012 -0.07079242914915085 0.21605446934700012 0.9208654761314392 0.3898129165172577 -0.0 0.44169366359710693 0.33748435974121094 0 1.0 0 0.0 0 0.0 0 0.0 0.06628727912902832 -0.08515442907810211 -0.2839455306529999 -0.8147831559181213 0.5797296166419983 -0.0 0.9313363432884216 0.5973168015480042 0 1.0 0 0.0 0 0.0 0 0.0 0.06409811973571777 -0.08806112408638 0.21605446934700012 -0.7824946045875549 0.6226081252098083 -0.0 0.5358461737632751 0.44278061389923096 0 1.0 0 0.0 0 0.0 0 0.0 0.06628727912902832 -0.08515442907810211 0.21605446934700012 -0.8147831559181213 0.5797296166419983 -0.0 0.5370199084281921 0.4463580846786499 0 1.0 0 0.0 0 0.0 0 0.0 1.8072779178619385 -0.19071727991104126 -0.2839455306529999 0.12060914933681488 -0.9926755428314209 -0.0 0.9605854749679565 0.4808386564254761 0 1.0 0 0.0 0 0.0 0 0.0 1.8139474391937256 -0.18979783356189728 0.21605445444583893 0.15292824804782867 -0.9882198572158813 -0.0 0.5211864709854126 0.3211352229118347 0 1.0 0 0.0 0 0.0 0 0.0 1.8072779178619385 -0.19071727991104126 0.21605445444583893 0.12060914933681488 -0.9926755428314209 -0.0 0.5165964961051941 0.31939154863357544 0 1.0 0 0.0 0 0.0 0 0.0 1.0959722995758057 -0.06555674225091934 -0.2839455306529999 -0.9562364816665649 0.2925504446029663 -0.0 0.9439747929573059 0.4986279010772705 0 1.0 0 0.0 0 0.0 0 0.0 1.094576120376587 -0.07011988759040833 0.21605446934700012 -0.9508346915245056 0.3096713125705719 -0.0 0.5337579846382141 0.33563095331192017 0 1.0 0 0.0 0 0.0 0 0.0 1.0959722995758057 -0.06555674225091934 0.21605446934700012 -0.9562364816665649 0.2925504446029663 -0.0 0.5344954133033752 0.34105902910232544 0 1.0 0 0.0 0 0.0 0 0.0 -1.5425567626953125 -0.10793852806091309 -0.2839455306529999 0.6976531147956848 0.7163915038108826 -0.0 0.06715226173400879 0.48706352710723877 0 1.0 0 0.0 0 0.0 0 0.0 -1.5450183153152466 -0.10538940131664276 0.21605446934700012 0.7399212718009949 0.6726584434509277 -0.0 0.4982786476612091 0.2992667555809021 0 1.0 0 0.0 0 0.0 0 0.0 -1.5425567626953125 -0.10793852806091309 0.21605446934700012 0.6976531147956848 0.7163915038108826 -0.0 0.5000284910202026 0.29620879888534546 0 1.0 0 0.0 0 0.0 0 0.0 1.754028081893921 -0.1901189088821411 0.21605443954467773 -0.1830805391073227 -0.983092725276947 -0.0 1.4786269664764404 0.31894344091415405 0 1.0 0 0.0 0 0.0 0 0.0 1.7580630779266357 -0.190801203250885 -0.2839455306529999 -0.1507004052400589 -0.9885555505752563 -0.0 0.9901707172393799 0.48174822330474854 0 1.0 0 0.0 0 0.0 0 0.0 1.7580630779266357 -0.190801203250885 0.21605445444583893 -0.1507004052400589 -0.9885555505752563 -0.0 1.4815094470977783 0.3179537057876587 0 1.0 0 0.0 0 0.0 0 0.0 -1.452539324760437 -0.10548669099807739 -0.2839455306529999 -0.5924558043479919 0.8055665493011475 -0.0 1.0137566328048706 0.49700599908828735 0 1.0 0 0.0 0 0.0 0 0.0 -1.4565843343734741 -0.10828392952680588 0.21605446934700012 -0.5498520135879517 0.8352305889129639 -0.0 0.5635403990745544 0.3006412386894226 0 1.0 0 0.0 0 0.0 0 0.0 -1.452539324760437 -0.10548669099807739 0.21605446934700012 -0.5924558043479919 0.8055665493011475 -0.0 0.5661982893943787 0.3045951724052429 0 1.0 0 0.0 0 0.0 0 0.0 -0.15565800666809082 -0.08717329800128937 -0.2839455306529999 -0.9917600154876709 -0.1280556619167328 -0.0 0.06925424933433533 0.593031644821167 0 1.0 0 0.0 0 0.0 0 0.0 -0.15464115142822266 -0.09419071674346924 0.21605446934700012 -0.9870906472206116 -0.15994751453399658 -0.0 0.40385371446609497 0.4461749792098999 0 1.0 0 0.0 0 0.0 0 0.0 -0.15565800666809082 -0.08717329800128937 0.21605446934700012 -0.9917600154876709 -0.1280556619167328 -0.0 0.40391385555267334 0.45400524139404297 0 1.0 0 0.0 0 0.0 0 0.0 -1.1134703159332275 -0.10148298740386963 -0.2839455306529999 0.5781121253967285 0.8159428834915161 -0.0 0.044294536113739014 0.48550617694854736 0 1.0 0 0.0 0 0.0 0 0.0 -1.118622064590454 -0.09746956080198288 0.21605446934700012 0.6484572887420654 0.7612231969833374 -0.0 0.5245062708854675 0.2952185273170471 0 1.0 0 0.0 0 0.0 0 0.0 -1.1134703159332275 -0.10148298740386963 0.21605446934700012 0.5781121253967285 0.8159428834915161 -0.0 0.5285190939903259 0.2908620238304138 0 1.0 0 0.0 0 0.0 0 0.0 1.1940457820892334 -0.08201909065246582 -0.2839455306529999 0.16553239524364471 0.9861751198768616 -0.0 0.895880401134491 0.4805034399032593 0 1.0 0 0.0 0 0.0 0 0.0 1.0959722995758057 -0.06555674225091934 0.21605446934700012 0.16553239524364471 0.9861751198768616 -0.0 0.5344954133033752 0.34105902910232544 0 1.0 0 0.0 0 0.0 0 0.0 1.1940457820892334 -0.08201909065246582 0.21605446934700012 0.16553239524364471 0.9861751198768616 -0.0 0.5900315642356873 0.3451066017150879 0 1.0 0 0.0 0 0.0 0 0.0 -1.0248029232025146 -0.09833913296461105 -0.2839455306529999 -0.634754478931427 0.772667646408081 -0.0 0.9922680258750916 0.4964311718940735 0 1.0 0 0.0 0 0.0 0 0.0 -1.029266357421875 -0.10175054520368576 0.21605446934700012 -0.5775933265686035 0.8163090944290161 -0.0 0.5895469188690186 0.30543601512908936 0 1.0 0 0.0 0 0.0 0 0.0 -1.0248029232025146 -0.09833913296461105 0.21605446934700012 -0.634754478931427 0.772667646408081 -0.0 0.5920868515968323 0.31044334173202515 0 1.0 0 0.0 0 0.0 0 0.0 1.094576120376587 -0.07011988759040833 -0.2839455306529999 -0.9508346915245056 0.3096713125705719 -0.0 0.9450085163116455 0.49344611167907715 0 1.0 0 0.0 0 0.0 0 0.0 1.0930728912353516 -0.07446898519992828 0.21605446934700012 -0.938657820224762 0.34482863545417786 -0.0 0.5329328179359436 0.33046531677246094 0 1.0 0 0.0 0 0.0 0 0.0 1.094576120376587 -0.07011988759040833 0.21605446934700012 -0.9508346915245056 0.3096713125705719 -0.0 0.5337579846382141 0.33563095331192017 0 1.0 0 0.0 0 0.0 0 0.0 1.8004820346832275 -0.1914324015378952 -0.2839455306529999 0.08911404758691788 -0.9960020780563354 -0.0 0.9646320343017578 0.4801236391067505 0 1.0 0 0.0 0 0.0 0 0.0 1.8072779178619385 -0.19071727991104126 0.21605445444583893 0.12060914933681488 -0.9926755428314209 -0.0 0.5165964961051941 0.31939154863357544 0 1.0 0 0.0 0 0.0 0 0.0 1.8004820346832275 -0.1914324015378952 0.21605445444583893 0.08911404758691788 -0.9960020780563354 -0.0 0.5118548274040222 0.317981481552124 0 1.0 0 0.0 0 0.0 0 0.0 -1.539929747581482 -0.11034414917230606 -0.2839455306529999 0.6505020260810852 0.7594836354255676 -0.0 0.06546497344970703 0.4845954179763794 0 1.0 0 0.0 0 0.0 0 0.0 -1.5425567626953125 -0.10793852806091309 0.21605446934700012 0.6976531147956848 0.7163915038108826 -0.0 0.5000284910202026 0.29620879888534546 0 1.0 0 0.0 0 0.0 0 0.0 -1.539929747581482 -0.11034414917230606 0.21605446934700012 0.6505020260810852 0.7594836354255676 -0.0 0.5019184947013855 0.2933226227760315 0 1.0 0 0.0 0 0.0 0 0.0 -0.04950380325317383 -0.09001675248146057 -0.2839455306529999 0.8754844665527344 0.4831995666027069 -0.0 0.006594359874725342 0.5991576910018921 0 1.0 0 0.0 0 0.0 0 0.0 -0.0508427619934082 -0.08742626756429672 0.21605446934700012 0.9002349972724915 0.4353770613670349 -0.0 0.46351292729377747 0.44450944662094116 0 1.0 0 0.0 0 0.0 0 0.0 -0.04950380325317383 -0.09001675248146057 0.21605446934700012 0.8754844665527344 0.4831995666027069 -0.0 0.4642685651779175 0.4411802887916565 0 1.0 0 0.0 0 0.0 0 0.0 1.7580630779266357 -0.190801203250885 -0.2839455306529999 -0.1507004052400589 -0.9885555505752563 -0.0 0.9901707172393799 0.48174822330474854 0 1.0 0 0.0 0 0.0 0 0.0 1.7621715068817139 -0.19135943055152893 0.21605445444583893 -0.1189611479640007 -0.9928891658782959 -0.0 1.4844553470611572 0.31715285778045654 0 1.0 0 0.0 0 0.0 0 0.0 1.7580630779266357 -0.190801203250885 0.21605445444583893 -0.1507004052400589 -0.9885555505752563 -0.0 1.4815094470977783 0.3179537057876587 0 1.0 0 0.0 0 0.0 0 0.0 -1.4565843343734741 -0.10828392952680588 -0.2839455306529999 -0.5498520135879517 0.8352305889129639 -0.0 1.016105055809021 0.493499755859375 0 1.0 0 0.0 0 0.0 0 0.0 -1.4606634378433228 -0.11083792895078659 0.21605446934700012 -0.5103610157966614 0.8599200248718262 -0.0 0.5607984662055969 0.2970088720321655 0 1.0 0 0.0 0 0.0 0 0.0 -1.4565843343734741 -0.10828392952680588 0.21605446934700012 -0.5498520135879517 0.8352305889129639 -0.0 0.5635403990745544 0.3006412386894226 0 1.0 0 0.0 0 0.0 0 0.0 0.06409811973571777 -0.08806112408638 -0.2839455306529999 -0.7824946045875549 0.6226081252098083 -0.0 0.9328294992446899 0.5941532850265503 0 1.0 0 0.0 0 0.0 0 0.0 0.06173396110534668 -0.09087538719177246 0.21605446934700012 -0.748680055141449 0.6629230380058289 -0.0 0.5345537662506104 0.43928706645965576 0 1.0 0 0.0 0 0.0 0 0.0 0.06409811973571777 -0.08806112408638 0.21605446934700012 -0.7824946045875549 0.6226081252098083 -0.0 0.5358461737632751 0.44278061389923096 0 1.0 0 0.0 0 0.0 0 0.0 0.9637672901153564 -0.07606461644172668 -0.2839455306529999 0.8929105401039124 0.4501785337924957 -0.0 0.023399382829666138 0.4899216294288635 0 1.0 0 0.0 0 0.0 0 0.0 0.9613299369812012 -0.07079242914915085 0.21605446934700012 0.9208654761314392 0.3898129165172577 -0.0 0.44169366359710693 0.33748435974121094 0 1.0 0 0.0 0 0.0 0 0.0 0.9637672901153564 -0.07606461644172668 0.21605446934700012 0.8929105401039124 0.4502090513706207 -0.0 0.442970871925354 0.3310282826423645 0 1.0 0 0.0 0 0.0 0 0.0 1.7621715068817139 -0.19135943055152893 -0.2839455306529999 -0.1189611479640007 -0.9928891658782959 -0.0 0.9876875281333923 0.4809969663619995 0 1.0 0 0.0 0 0.0 0 0.0 1.7663524150848389 -0.19179360568523407 0.21605445444583893 -0.08798485994338989 -0.9960936307907104 -0.0 1.4874608516693115 0.3165437579154968 0 1.0 0 0.0 0 0.0 0 0.0 1.7621715068817139 -0.19135943055152893 0.21605445444583893 -0.1189611479640007 -0.9928891658782959 -0.0 1.4844553470611572 0.31715285778045654 0 1.0 0 0.0 0 0.0 0 0.0 0.8610334396362305 -0.07151120901107788 -0.2839455306529999 -0.9611499309539795 -0.2759788930416107 -0.0 0.07633981108665466 0.4980389475822449 0 1.0 0 0.0 0 0.0 0 0.0 0.8643536567687988 -0.08200936019420624 0.21605446934700012 -0.9447309970855713 -0.32776880264282227 -0.0 0.3860163688659668 0.35041290521621704 0 1.0 0 0.0 0 0.0 0 0.0 0.8610334396362305 -0.07151120901107788 0.21605446934700012 -0.9611499309539795 -0.2759788930416107 -0.0 0.3854953348636627 0.3617415428161621 0 1.0 0 0.0 0 0.0 0 0.0 -1.108055830001831 -0.10496129095554352 -0.2839455306529999 0.5009002685546875 0.8654744029045105 -0.0 0.04090547561645508 0.4820537567138672 0 1.0 0 0.0 0 0.0 0 0.0 -1.1134703159332275 -0.10148298740386963 0.21605446934700012 0.5781121253967285 0.8159428834915161 -0.0 0.5285190939903259 0.2908620238304138 0 1.0 0 0.0 0 0.0 0 0.0 -1.108055830001831 -0.10496129095554352 0.21605446934700012 0.5009002685546875 0.8654744029045105 -0.0 0.5327584743499756 0.28724706172943115 0 1.0 0 0.0 0 0.0 0 0.0 -1.3274954557418823 -0.11564431339502335 -0.2839455306529999 0.9950864911079407 0.09869685769081116 -0.0 0.9483753442764282 0.49630945920944214 0 1.0 0 0.0 0 0.0 0 0.0 -1.3279880285263062 -0.1101532131433487 0.21605446934700012 0.9967039823532104 0.08105716109275818 -0.0 0.64090496301651 0.3395833373069763 0 1.0 0 0.0 0 0.0 0 0.0 -1.3274954557418823 -0.11564431339502335 0.21605446934700012 0.9950864911079407 0.09869685769081116 -0.0 0.6419074535369873 0.33454930782318115 0 1.0 0 0.0 0 0.0 0 0.0 -0.04804062843322754 -0.0925050750374794 -0.2839455306529999 0.8476210832595825 0.5305337905883789 -0.0 0.005618959665298462 0.5960554480552673 0 1.0 0 0.0 0 0.0 0 0.0 -0.04950380325317383 -0.09001675248146057 0.21605446934700012 0.8754844665527344 0.4831995666027069 -0.0 0.4642685651779175 0.4411802887916565 0 1.0 0 0.0 0 0.0 0 0.0 -0.04804062843322754 -0.0925050750374794 0.21605446934700012 0.8476210832595825 0.5305337905883789 -0.0 0.4651119112968445 0.4379647970199585 0 1.0 0 0.0 0 0.0 0 0.0 -1.2332748174667358 -0.10171164572238922 -0.2839455306529999 -0.9059419631958008 -0.42335277795791626 -0.0 0.1095895767211914 0.47815340757369995 0 1.0 0 0.0 0 0.0 0 0.0 -1.2278786897659302 -0.11230587214231491 0.21605446934700012 -0.8745384216308594 -0.4849391281604767 -0.0 0.4501752555370331 0.29445379972457886 0 1.0 0 0.0 0 0.0 0 0.0 -1.2332748174667358 -0.10171164572238922 0.21605446934700012 -0.9059419631958008 -0.42335277795791626 -0.0 0.4478146731853485 0.3064257502555847 0 1.0 0 0.0 0 0.0 0 0.0 1.0930728912353516 -0.07446898519992828 -0.2839455306529999 -0.938657820224762 0.34482863545417786 -0.0 0.946087121963501 0.488539457321167 0 1.0 0 0.0 0 0.0 0 0.0 1.0914626121520996 -0.07860402762889862 0.21605446934700012 -0.9241004586219788 0.3820917308330536 -0.0 0.5320184826850891 0.325559139251709 0 1.0 0 0.0 0 0.0 0 0.0 1.0930728912353516 -0.07446898519992828 0.21605446934700012 -0.938657820224762 0.34482863545417786 -0.0 0.5329328179359436 0.33046531677246094 0 1.0 0 0.0 0 0.0 0 0.0 0.06173396110534668 -0.09087538719177246 -0.2839455306529999 -0.748680055141449 0.6629230380058289 -0.0 0.9344223737716675 0.5910961627960205 0 1.0 0 0.0 0 0.0 0 0.0 0.05919456481933594 -0.09359721839427948 0.21605446934700012 -0.713675320148468 0.7004303336143494 -0.0 0.5331403017044067 0.4358789324760437 0 1.0 0 0.0 0 0.0 0 0.0 0.06173396110534668 -0.09087538719177246 0.21605446934700012 -0.748680055141449 0.6629230380058289 -0.0 0.5345537662506104 0.43928706645965576 0 1.0 0 0.0 0 0.0 0 0.0 1.7935593128204346 -0.1919431984424591 -0.2839455306529999 0.05850398167967796 -0.9982604384422302 -0.0 0.9687719941139221 0.47965240478515625 0 1.0 0 0.0 0 0.0 0 0.0 1.8004820346832275 -0.1914324015378952 0.21605445444583893 0.08911404758691788 -0.9960020780563354 -0.0 0.5118548274040222 0.317981481552124 0 1.0 0 0.0 0 0.0 0 0.0 1.7935593128204346 -0.1919431984424591 0.21605445444583893 0.05850398167967796 -0.9982604384422302 -0.0 0.5069688558578491 0.31691932678222656 0 1.0 0 0.0 0 0.0 0 0.0 -1.5371860265731812 -0.1125405877828598 -0.2839455306529999 0.5980712175369263 0.8014160394668579 -0.0 0.06372728943824768 0.48237109184265137 0 1.0 0 0.0 0 0.0 0 0.0 -1.539929747581482 -0.11034414917230606 0.21605446934700012 0.6505020260810852 0.7594836354255676 -0.0 0.5019184947013855 0.2933226227760315 0 1.0 0 0.0 0 0.0 0 0.0 -1.5371860265731812 -0.1125405877828598 0.21605446934700012 0.5980712175369263 0.8014160394668579 -0.0 0.503914475440979 0.29068702459335327 0 1.0 0 0.0 0 0.0 0 0.0 1.7663524150848389 -0.19179360568523407 -0.2839455306529999 -0.08798485994338989 -0.9960936307907104 -0.0 0.9851610660552979 0.48039180040359497 0 1.0 0 0.0 0 0.0 0 0.0 1.7706067562103271 -0.19210374355316162 0.21605445444583893 -0.05783257633447647 -0.9983214735984802 -0.0 0.49052339792251587 0.3161289691925049 0 1.0 0 0.0 0 0.0 0 0.0 1.7663524150848389 -0.19179360568523407 0.21605445444583893 -0.08798485994338989 -0.9960936307907104 -0.0 0.48746082186698914 0.3165437579154968 0 1.0 0 0.0 0 0.0 0 0.0 -1.029266357421875 -0.10175054520368576 -0.2839455306529999 -0.5775933265686035 0.8163090944290161 -0.0 0.9947965145111084 0.4923076033592224 0 1.0 0 0.0 0 0.0 0 0.0 -1.033870816230774 -0.10476061701774597 0.21605446934700012 -0.5148167610168457 0.8572649359703064 -0.0 0.586810290813446 0.30086058378219604 0 1.0 0 0.0 0 0.0 0 0.0 -1.029266357421875 -0.10175054520368576 0.21605446934700012 -0.5775933265686035 0.8163090944290161 -0.0 0.5895469188690186 0.30543601512908936 0 1.0 0 0.0 0 0.0 0 0.0 -1.4606634378433228 -0.11083792895078659 -0.2839455306529999 -0.5103610157966614 0.8599200248718262 -0.0 1.018471598625183 0.4902775287628174 0 1.0 0 0.0 0 0.0 0 0.0 -1.4647765159606934 -0.11314868927001953 0.21605446934700012 -0.4681234061717987 0.8836328983306885 -0.0 0.5579749345779419 0.29369932413101196 0 1.0 0 0.0 0 0.0 0 0.0 -1.4606634378433228 -0.11083792895078659 0.21605446934700012 -0.5103610157966614 0.8599200248718262 -0.0 0.5607984662055969 0.2970088720321655 0 1.0 0 0.0 0 0.0 0 0.0 0.9665062427520752 -0.0810668095946312 -0.2839455306529999 0.8597369194030762 0.5107272267341614 -0.0 0.021708518266677856 0.4841575026512146 0 1.0 0 0.0 0 0.0 0 0.0 0.9637672901153564 -0.07606461644172668 0.21605446934700012 0.8929105401039124 0.4502090513706207 -0.0 0.442970871925354 0.3310282826423645 0 1.0 0 0.0 0 0.0 0 0.0 0.9665062427520752 -0.0810668095946312 0.21605446934700012 0.8597369194030762 0.5107272267341614 -0.0 0.44448772072792053 0.3248738646507263 0 1.0 0 0.0 0 0.0 0 0.0 -0.04645347595214844 -0.09489124268293381 -0.2839455306529999 0.8167668581008911 0.5769218802452087 -0.0 0.004566401243209839 0.5930731296539307 0 1.0 0 0.0 0 0.0 0 0.0 -0.04804062843322754 -0.0925050750374794 0.21605446934700012 0.8476210832595825 0.5305337905883789 -0.0 0.4651119112968445 0.4379647970199585 0 1.0 0 0.0 0 0.0 0 0.0 -0.04645347595214844 -0.09489124268293381 0.21605446934700012 0.8167668581008911 0.5769218802452087 -0.0 0.4660434424877167 0.43486452102661133 0 1.0 0 0.0 0 0.0 0 0.0 -1.033870816230774 -0.10476061701774597 -0.2839455306529999 -0.5148167610168457 0.8572649359703064 -0.0 0.9974039793014526 0.4886128902435303 0 1.0 0 0.0 0 0.0 0 0.0 -1.038616418838501 -0.10736934840679169 0.21605446934700012 -0.44703513383865356 0.8944975137710571 -0.0 0.5838744640350342 0.2967216968536377 0 1.0 0 0.0 0 0.0 0 0.0 -1.033870816230774 -0.10476061701774597 0.21605446934700012 -0.5148167610168457 0.8572649359703064 -0.0 0.586810290813446 0.30086058378219604 0 1.0 0 0.0 0 0.0 0 0.0 1.0914626121520996 -0.07860402762889862 -0.2839455306529999 -0.9241004586219788 0.3820917308330536 -0.0 0.9472108483314514 0.48390400409698486 0 1.0 0 0.0 0 0.0 0 0.0 1.089745283126831 -0.08252502232789993 0.21605446934700012 -0.9068269729614258 0.4214606285095215 -0.0 0.5310134887695312 0.3209095001220703 0 1.0 0 0.0 0 0.0 0 0.0 1.0914626121520996 -0.07860402762889862 0.21605446934700012 -0.9241004586219788 0.3820917308330536 -0.0 0.5320184826850891 0.325559139251709 0 1.0 0 0.0 0 0.0 0 0.0 -1.6527143716812134 -0.11229734867811203 -0.2839455306529999 -0.9673146605491638 -0.2534867525100708 -0.0 0.12260499596595764 0.47699278593063354 0 1.0 0 0.0 0 0.0 0 0.0 -1.6506456136703491 -0.11920773983001709 0.21605446934700012 -0.9472029805183411 -0.32053589820861816 -0.0 0.433250367641449 0.3067089319229126 0 1.0 0 0.0 0 0.0 0 0.0 -1.6527143716812134 -0.11229734867811203 0.21605446934700012 -0.9673146605491638 -0.2534867525100708 -0.0 0.43276700377464294 0.3138952851295471 0 1.0 0 0.0 0 0.0 0 0.0 0.05919456481933594 -0.09359721839427948 -0.2839455306529999 -0.713675320148468 0.7004303336143494 -0.0 0.9361163377761841 0.5881446599960327 0 1.0 0 0.0 0 0.0 0 0.0 0.05647993087768555 -0.09622661769390106 0.21605446934700012 -0.6779381632804871 0.7350993156433105 -0.0 0.5316035151481628 0.43255800008773804 0 1.0 0 0.0 0 0.0 0 0.0 0.05919456481933594 -0.09359721839427948 0.21605446934700012 -0.713675320148468 0.7004303336143494 -0.0 0.5331403017044067 0.4358789324760437 0 1.0 0 0.0 0 0.0 0 0.0 1.7865102291107178 -0.19224967062473297 -0.2839455306529999 0.028839990496635437 -0.99957275390625 -0.0 0.9730034470558167 0.4794282913208008 0 1.0 0 0.0 0 0.0 0 0.0 1.7935593128204346 -0.1919431984424591 0.21605445444583893 0.05850398167967796 -0.9982604384422302 -0.0 0.5069688558578491 0.31691932678222656 0 1.0 0 0.0 0 0.0 0 0.0 1.7865102291107178 -0.19224967062473297 0.21605445444583893 0.028809472918510437 -0.99957275390625 -0.0 0.5019482970237732 0.31621891260147095 0 1.0 0 0.0 0 0.0 0 0.0 1.7706067562103271 -0.19210374355316162 -0.2839455306529999 -0.05783257633447647 -0.9983214735984802 -0.0 0.9825912714004517 0.47993284463882446 0 1.0 0 0.0 0 0.0 0 0.0 1.7749340534210205 -0.1922898143529892 0.21605445444583893 -0.02850428782403469 -0.99957275390625 -0.0 0.4936390817165375 0.31591135263442993 0 1.0 0 0.0 0 0.0 0 0.0 1.7706067562103271 -0.19210374355316162 0.21605445444583893 -0.05783257633447647 -0.9983214735984802 -0.0 0.49052339792251587 0.3161289691925049 0 1.0 0 0.0 0 0.0 0 0.0 -0.15464115142822266 -0.09419071674346924 -0.2839455306529999 -0.9870906472206116 -0.15994751453399658 -0.0 0.06832051277160645 0.5854088664054871 0 1.0 0 0.0 0 0.0 0 0.0 -0.15343952178955078 -0.10089192539453506 0.21605446934700012 -0.9809259176254272 -0.19437238574028015 -0.0 0.4039095640182495 0.43862825632095337 0 1.0 0 0.0 0 0.0 0 0.0 -0.15464115142822266 -0.09419071674346924 0.21605446934700012 -0.9870906472206116 -0.15994751453399658 -0.0 0.40385371446609497 0.4461749792098999 0 1.0 0 0.0 0 0.0 0 0.0 -1.1023786067962646 -0.10790447145700455 -0.2839455306529999 0.41840875148773193 0.9082308411598206 -0.0 0.03740385174751282 0.4792447090148926 0 1.0 0 0.0 0 0.0 0 0.0 -1.108055830001831 -0.10496129095554352 0.21605446934700012 0.5009002685546875 0.8654744029045105 -0.0 0.5327584743499756 0.28724706172943115 0 1.0 0 0.0 0 0.0 0 0.0 -1.1023786067962646 -0.10790447145700455 0.21605446934700012 0.41840875148773193 0.9082308411598206 -0.0 0.537212610244751 0.28437894582748413 0 1.0 0 0.0 0 0.0 0 0.0 0.9695467948913574 -0.08579900860786438 -0.2839455306529999 0.8213446736335754 0.5703604221343994 -0.0 0.019856750965118408 0.47872352600097656 0 1.0 0 0.0 0 0.0 0 0.0 0.9665062427520752 -0.0810668095946312 0.21605446934700012 0.8597369194030762 0.5107272267341614 -0.0 0.44448772072792053 0.3248738646507263 0 1.0 0 0.0 0 0.0 0 0.0 0.9695467948913574 -0.08579900860786438 0.21605446934700012 0.8213446736335754 0.5703604221343994 -0.0 0.446250319480896 0.3190198540687561 0 1.0 0 0.0 0 0.0 0 0.0 -1.5343255996704102 -0.11452784389257431 -0.2839455306529999 0.5419476628303528 0.8403881788253784 -0.0 0.06193813681602478 0.4803890585899353 0 1.0 0 0.0 0 0.0 0 0.0 -1.5371860265731812 -0.1125405877828598 0.21605446934700012 0.5980712175369263 0.8014160394668579 -0.0 0.503914475440979 0.29068702459335327 0 1.0 0 0.0 0 0.0 0 0.0 -1.5343255996704102 -0.11452784389257431 0.21605446934700012 0.5419476628303528 0.8403881788253784 -0.0 0.5060164332389832 0.2883031964302063 0 1.0 0 0.0 0 0.0 0 0.0 1.7749340534210205 -0.1922898143529892 -0.2839455306529999 -0.02850428782403469 -0.99957275390625 -0.0 0.9799787998199463 0.4796203374862671 0 1.0 0 0.0 0 0.0 0 0.0 1.779334306716919 -0.19235184788703918 0.21605445444583893 6.103701889514923e-05 -1.0 -0.0 0.49680399894714355 0.3158932328224182 0 1.0 0 0.0 0 0.0 0 0.0 1.7749340534210205 -0.1922898143529892 0.21605445444583893 -0.02850428782403469 -0.99957275390625 -0.0 0.4936390817165375 0.31591135263442993 0 1.0 0 0.0 0 0.0 0 0.0 -1.038616418838501 -0.10736934840679169 -0.2839455306529999 -0.44703513383865356 0.8944975137710571 -0.0 1.000093698501587 0.4853445887565613 0 1.0 0 0.0 0 0.0 0 0.0 -1.0435030460357666 -0.10957673192024231 0.21605446934700012 -0.3751335144042969 0.9269387125968933 -0.0 0.5807379484176636 0.2930253744125366 0 1.0 0 0.0 0 0.0 0 0.0 -1.038616418838501 -0.10736934840679169 0.21605446934700012 -0.44703513383865356 0.8944975137710571 -0.0 0.5838744640350342 0.2967216968536377 0 1.0 0 0.0 0 0.0 0 0.0 0.8643536567687988 -0.08200936019420624 -0.2839455306529999 -0.9447309970855713 -0.32776880264282227 -0.0 0.07424464821815491 0.48747164011001587 0 1.0 0 0.0 0 0.0 0 0.0 0.8681845664978027 -0.09213779121637344 0.21605446934700012 -0.9248634576797485 -0.3802911341190338 -0.0 0.3868318498134613 0.33936208486557007 0 1.0 0 0.0 0 0.0 0 0.0 0.8643536567687988 -0.08200936019420624 0.21605446934700012 -0.9447309970855713 -0.32776880264282227 -0.0 0.3860163688659668 0.35041290521621704 0 1.0 0 0.0 0 0.0 0 0.0 -1.4647765159606934 -0.11314868927001953 -0.2839455306529999 -0.4681234061717987 0.8836328983306885 -0.0 1.0208572149276733 0.48733770847320557 0 1.0 0 0.0 0 0.0 0 0.0 -1.4689236879348755 -0.1152162104845047 0.21605446934700012 -0.42313912510871887 0.9060335159301758 -0.0 0.5550726652145386 0.2907138466835022 0 1.0 0 0.0 0 0.0 0 0.0 -1.4647765159606934 -0.11314868927001953 0.21605446934700012 -0.4681234061717987 0.8836328983306885 -0.0 0.5579749345779419 0.29369932413101196 0 1.0 0 0.0 0 0.0 0 0.0 1.779334306716919 -0.19235184788703918 -0.2839455306529999 6.103701889514923e-05 -1.0 -0.0 0.9773244857788086 0.4794541597366333 0 1.0 0 0.0 0 0.0 0 0.0 1.7865102291107178 -0.19224967062473297 0.21605445444583893 0.028809472918510437 -0.99957275390625 -0.0 0.5019482970237732 0.31621891260147095 0 1.0 0 0.0 0 0.0 0 0.0 1.779334306716919 -0.19235184788703918 0.21605445444583893 6.103701889514923e-05 -1.0 -0.0 0.49680399894714355 0.3158932328224182 0 1.0 0 0.0 0 0.0 0 0.0 -0.04474234580993652 -0.0971752479672432 -0.2839455306529999 0.7831049561500549 0.6218451261520386 -0.0 0.003436654806137085 0.5902106761932373 0 1.0 0 0.0 0 0.0 0 0.0 -0.04645347595214844 -0.09489124268293381 0.21605446934700012 0.8167668581008911 0.5769218802452087 -0.0 0.4660434424877167 0.43486452102661133 0 1.0 0 0.0 0 0.0 0 0.0 -0.04474234580993652 -0.0971752479672432 0.21605446934700012 0.7831049561500549 0.6218451261520386 -0.0 0.46706393361091614 0.4318809509277344 0 1.0 0 0.0 0 0.0 0 0.0 1.4150612354278564 0.19643977284431458 -0.2839455306529999 -0.0018005920574069023 0.999969482421875 -0.0 0.9889234304428101 0.7905939221382141 0 1.0 0 0.0 0 0.0 0 0.0 1.4019849300384521 0.1962110698223114 0.21605448424816132 -0.036133915185928345 0.99932861328125 -0.0 1.4772617816925049 0.6266326904296875 0 1.0 0 0.0 0 0.0 0 0.0 1.4150612354278564 0.19643977284431458 0.21605448424816132 -0.0018005920574069023 0.999969482421875 -0.0 1.4844118356704712 0.626757025718689 0 1.0 0 0.0 0 0.0 0 0.0 0.05647993087768555 -0.09622661769390106 -0.2839455306529999 -0.6779381632804871 0.7350993156433105 -0.0 0.9379128217697144 0.5852980613708496 0 1.0 0 0.0 0 0.0 0 0.0 0.05359029769897461 -0.0987635925412178 0.21605446934700012 -0.6418347954750061 0.7668386101722717 -0.0 0.5299412608146667 0.42932629585266113 0 1.0 0 0.0 0 0.0 0 0.0 0.05647993087768555 -0.09622661769390106 0.21605446934700012 -0.6779381632804871 0.7350993156433105 -0.0 0.5316035151481628 0.43255800008773804 0 1.0 0 0.0 0 0.0 0 0.0 -1.0964387655258179 -0.11031252890825272 -0.2839455306529999 0.3327127993106842 0.9429914355278015 -0.0 1.0337873697280884 0.47707217931747437 0 1.0 0 0.0 0 0.0 0 0.0 -1.1023786067962646 -0.10790447145700455 0.21605446934700012 0.41840875148773193 0.9082308411598206 -0.0 0.537212610244751 0.28437894582748413 0 1.0 0 0.0 0 0.0 0 0.0 -1.0964387655258179 -0.11031252890825272 0.21605446934700012 0.3327127993106842 0.9429914355278015 -0.0 0.5418664813041687 0.2822644114494324 0 1.0 0 0.0 0 0.0 0 0.0 1.1907413005828857 -0.09083038568496704 -0.2839455306529999 0.9282204508781433 -0.3719290792942047 -0.0 0.8979910612106323 0.4719502925872803 0 1.0 0 0.0 0 0.0 0 0.0 1.1940457820892334 -0.08201909065246582 0.21605446934700012 0.9363078474998474 -0.35114598274230957 -0.0 0.5900315642356873 0.3451066017150879 0 1.0 0 0.0 0 0.0 0 0.0 1.1907413005828857 -0.09083038568496704 0.21605446934700012 0.9282204508781433 -0.3719290792942047 -0.0 0.5891975164413452 0.3356865644454956 0 1.0 0 0.0 0 0.0 0 0.0 -1.5313483476638794 -0.11630591750144958 -0.2839455306529999 0.4827722907066345 0.8757286071777344 -0.0 0.06009626388549805 0.4786478877067566 0 1.0 0 0.0 0 0.0 0 0.0 -1.5343255996704102 -0.11452784389257431 0.21605446934700012 0.5419476628303528 0.8403881788253784 -0.0 0.5060164332389832 0.2883031964302063 0 1.0 0 0.0 0 0.0 0 0.0 -1.5313483476638794 -0.11630591750144958 0.21605446934700012 0.4827722907066345 0.8757286071777344 -0.0 0.5082241296768188 0.2861729860305786 0 1.0 0 0.0 0 0.0 0 0.0 1.4275152683258057 0.19626706838607788 -0.2839455306529999 0.02865688130259514 0.99957275390625 -0.0 0.978659987449646 0.7900841236114502 0 1.0 0 0.0 0 0.0 0 0.0 1.4150612354278564 0.19643977284431458 0.21605448424816132 -0.0018005920574069023 0.999969482421875 -0.0 1.4844118356704712 0.626757025718689 0 1.0 0 0.0 0 0.0 0 0.0 1.4275152683258057 0.19626706838607788 0.21605448424816132 0.02865688130259514 0.99957275390625 -0.0 0.4912264943122864 0.6263492107391357 0 1.0 0 0.0 0 0.0 0 0.0 -1.0435030460357666 -0.10957673192024231 -0.2839455306529999 -0.3751335144042969 0.9269387125968933 -0.0 1.0028687715530396 0.48250114917755127 0 1.0 0 0.0 0 0.0 0 0.0 -1.0485308170318604 -0.11138277500867844 0.21605446934700012 -0.3003937005996704 0.9537949562072754 -0.0 0.5774003267288208 0.2897791862487793 0 1.0 0 0.0 0 0.0 0 0.0 -1.0435030460357666 -0.10957673192024231 0.21605446934700012 -0.3751335144042969 0.9269387125968933 -0.0 0.5807379484176636 0.2930253744125366 0 1.0 0 0.0 0 0.0 0 0.0 1.089745283126831 -0.08252502232789993 -0.2839455306529999 -0.9068269729614258 0.4214606285095215 -0.0 0.9483804702758789 0.47953569889068604 0 1.0 0 0.0 0 0.0 0 0.0 1.087920904159546 -0.08623196929693222 0.21605446934700012 -0.886410117149353 0.46284371614456177 -0.0 0.5299165844917297 0.3165135383605957 0 1.0 0 0.0 0 0.0 0 0.0 1.089745283126831 -0.08252502232789993 0.21605446934700012 -0.9068269729614258 0.4214606285095215 -0.0 0.5310134887695312 0.3209095001220703 0 1.0 0 0.0 0 0.0 0 0.0 -1.4689236879348755 -0.1152162104845047 -0.2839455306529999 -0.42313912510871887 0.9060335159301758 -0.0 1.023262858390808 0.48467862606048584 0 1.0 0 0.0 0 0.0 0 0.0 -1.4731050729751587 -0.1170404925942421 0.21605446934700012 -0.37565234303474426 0.9267250299453735 -0.0 0.5520947575569153 0.2880534529685974 0 1.0 0 0.0 0 0.0 0 0.0 -1.4689236879348755 -0.1152162104845047 0.21605446934700012 -0.42313912510871887 0.9060335159301758 -0.0 0.5550726652145386 0.2907138466835022 0 1.0 0 0.0 0 0.0 0 0.0 1.4394242763519287 0.19574898481369019 -0.2839455306529999 0.05960264801979065 0.9981994032859802 -0.0 0.968928337097168 0.7887187600135803 0 1.0 0 0.0 0 0.0 0 0.0 1.4275152683258057 0.19626706838607788 0.21605448424816132 0.02865688130259514 0.99957275390625 -0.0 0.4912264943122864 0.6263492107391357 0 1.0 0 0.0 0 0.0 0 0.0 1.4394242763519287 0.19574898481369019 0.21605448424816132 0.05960264801979065 0.9981994032859802 -0.0 0.49773043394088745 0.625482439994812 0 1.0 0 0.0 0 0.0 0 0.0 -0.0429072380065918 -0.09935709089040756 -0.2839455306529999 0.7468489408493042 0.6649677753448486 -0.0 0.0022296011447906494 0.5874682068824768 0 1.0 0 0.0 0 0.0 0 0.0 -0.04474234580993652 -0.0971752479672432 0.21605446934700012 0.7831049561500549 0.6218451261520386 -0.0 0.46706393361091614 0.4318809509277344 0 1.0 0 0.0 0 0.0 0 0.0 -0.0429072380065918 -0.09935709089040756 0.21605446934700012 0.7468489408493042 0.6649372577667236 -0.0 0.46817395091056824 0.4290156364440918 0 1.0 0 0.0 0 0.0 0 0.0 1.4019849300384521 0.1962110698223114 -0.2839455306529999 -0.036133915185928345 0.99932861328125 -0.0 0.9996871948242188 0.7901116609573364 0 1.0 0 0.0 0 0.0 0 0.0 1.3894922733306885 0.1955251395702362 0.21605448424816132 -0.07519760727882385 0.9971618056297302 -0.0 1.4704526662826538 0.6259280443191528 0 1.0 0 0.0 0 0.0 0 0.0 1.4019849300384521 0.1962110698223114 0.21605448424816132 -0.036133915185928345 0.99932861328125 -0.0 1.4772617816925049 0.6266326904296875 0 1.0 0 0.0 0 0.0 0 0.0 0.05359029769897461 -0.0987635925412178 -0.2839455306529999 -0.6418042778968811 0.7668386101722717 -0.0 0.9398130178451538 0.5825554728507996 0 1.0 0 0.0 0 0.0 0 0.0 0.05052542686462402 -0.10120813548564911 0.21605446934700012 -0.6056703329086304 0.7957090735435486 -0.0 0.5281510353088379 0.42618632316589355 0 1.0 0 0.0 0 0.0 0 0.0 0.05359029769897461 -0.0987635925412178 0.21605446934700012 -0.6418347954750061 0.7668386101722717 -0.0 0.5299412608146667 0.42932629585266113 0 1.0 0 0.0 0 0.0 0 0.0 -1.0902361869812012 -0.11218546330928802 -0.2839455306529999 0.2460707426071167 0.9692373275756836 -0.0 1.030053973197937 0.47553038597106934 0 1.0 0 0.0 0 0.0 0 0.0 -1.0964387655258179 -0.11031252890825272 0.21605446934700012 0.3327127993106842 0.9429914355278015 -0.0 0.5418664813041687 0.2822644114494324 0 1.0 0 0.0 0 0.0 0 0.0 -1.0902361869812012 -0.11218546330928802 0.21605446934700012 0.2460707426071167 0.9692373275756836 -0.0 0.5467023253440857 0.2809107303619385 0 1.0 0 0.0 0 0.0 0 0.0 0.9728889465332031 -0.09026120603084564 -0.2839455306529999 0.7780693769454956 0.6281319856643677 -0.0 0.01784294843673706 0.4736138582229614 0 1.0 0 0.0 0 0.0 0 0.0 0.9695467948913574 -0.08579900860786438 0.21605446934700012 0.8213446736335754 0.5703604221343994 -0.0 0.446250319480896 0.3190198540687561 0 1.0 0 0.0 0 0.0 0 0.0 0.9728889465332031 -0.09026120603084564 0.21605446934700012 0.7780693769454956 0.6281319856643677 -0.0 0.4482648968696594 0.3134663701057434 0 1.0 0 0.0 0 0.0 0 0.0 -1.3269373178482056 -0.12077785283327103 -0.2839455306529999 0.9928891658782959 0.1188085600733757 -0.0 0.9483891725540161 0.4913962483406067 0 1.0 0 0.0 0 0.0 0 0.0 -1.3274954557418823 -0.11564431339502335 0.21605446934700012 0.9950864911079407 0.09869685769081116 -0.0 0.6419074535369873 0.33454930782318115 0 1.0 0 0.0 0 0.0 0 0.0 -1.3269373178482056 -0.12077785283327103 0.21605446934700012 0.9928891658782959 0.1188085600733757 -0.0 0.6428943872451782 0.32994168996810913 0 1.0 0 0.0 0 0.0 0 0.0 -1.0485308170318604 -0.11138277500867844 -0.2839455306529999 -0.3003937005996704 0.9537949562072754 -0.0 1.005732536315918 0.48008131980895996 0 1.0 0 0.0 0 0.0 0 0.0 -1.0536996126174927 -0.11278747767210007 0.21605446934700012 -0.22412793338298798 0.9745475649833679 -0.0 0.5738626718521118 0.28699201345443726 0 1.0 0 0.0 0 0.0 0 0.0 -1.0485308170318604 -0.11138277500867844 0.21605446934700012 -0.3003937005996704 0.9537949562072754 -0.0 0.5774003267288208 0.2897791862487793 0 1.0 0 0.0 0 0.0 0 0.0 1.087920904159546 -0.08623196929693222 -0.2839455306529999 -0.886410117149353 0.46284371614456177 -0.0 0.9495965242385864 0.47543054819107056 0 1.0 0 0.0 0 0.0 0 0.0 1.0859894752502441 -0.08972486853599548 0.21605446934700012 -0.8624531030654907 0.5060579180717468 -0.0 0.5287265181541443 0.3123684525489807 0 1.0 0 0.0 0 0.0 0 0.0 1.087920904159546 -0.08623196929693222 0.21605446934700012 -0.886410117149353 0.46284371614456177 -0.0 0.5299165844917297 0.3165135383605957 0 1.0 0 0.0 0 0.0 0 0.0 -1.5282543897628784 -0.11787480115890503 -0.2839455306529999 0.4213385283946991 0.9068880081176758 -0.0 0.058200687170028687 0.47714662551879883 0 1.0 0 0.0 0 0.0 0 0.0 -1.5313483476638794 -0.11630591750144958 0.21605446934700012 0.4827722907066345 0.8757286071777344 -0.0 0.5082241296768188 0.2861729860305786 0 1.0 0 0.0 0 0.0 0 0.0 -1.5282543897628784 -0.11787480115890503 0.21605446934700012 0.4213385283946991 0.9068880081176758 -0.0 0.5105367302894592 0.2842988967895508 0 1.0 0 0.0 0 0.0 0 0.0 1.4507882595062256 0.1948854923248291 -0.2839455306529999 0.09341716021299362 0.9956053495407104 -0.0 0.9597978591918945 0.7865923643112183 0 1.0 0 0.0 0 0.0 0 0.0 1.4394242763519287 0.19574898481369019 0.21605448424816132 0.05960264801979065 0.9981994032859802 -0.0 0.49773043394088745 0.625482439994812 0 1.0 0 0.0 0 0.0 0 0.0 1.4507882595062256 0.1948854923248291 0.21605448424816132 0.09341716021299362 0.9956053495407104 -0.0 0.5039108395576477 0.6241855025291443 0 1.0 0 0.0 0 0.0 0 0.0 -0.040947914123535156 -0.10143677890300751 -0.2839455306529999 0.7084261775016785 0.7057710289955139 -0.0 0.0009450018405914307 0.5848455429077148 0 1.0 0 0.0 0 0.0 0 0.0 -0.0429072380065918 -0.09935709089040756 0.21605446934700012 0.7468489408493042 0.6649372577667236 -0.0 0.46817395091056824 0.4290156364440918 0 1.0 0 0.0 0 0.0 0 0.0 -0.040947914123535156 -0.10143677890300751 0.21605446934700012 0.7084261775016785 0.7057710289955139 -0.0 0.4693742096424103 0.42627018690109253 0 1.0 0 0.0 0 0.0 0 0.0 1.0859894752502441 -0.08972486853599548 -0.2839455306529999 -0.8624531030654907 0.5060579180717468 -0.0 0.9508596658706665 0.4715844988822937 0 1.0 0 0.0 0 0.0 0 0.0 1.0839512348175049 -0.09300372004508972 0.21605446934700012 -0.8345591425895691 0.5508896112442017 -0.0 0.527442216873169 0.30847179889678955 0 1.0 0 0.0 0 0.0 0 0.0 1.0859894752502441 -0.08972486853599548 0.21605446934700012 -0.8624531030654907 0.5060579180717468 -0.0 0.5287265181541443 0.3123684525489807 0 1.0 0 0.0 0 0.0 0 0.0 -1.4731050729751587 -0.1170404925942421 -0.2839455306529999 -0.37565234303474426 0.9267250299453735 -0.0 1.0256896018981934 0.48229867219924927 0 1.0 0 0.0 0 0.0 0 0.0 -1.4773203134536743 -0.11862154304981232 0.21605446934700012 -0.3258461356163025 0.9454023838043213 -0.0 0.5490454435348511 0.2857193946838379 0 1.0 0 0.0 0 0.0 0 0.0 -1.4731050729751587 -0.1170404925942421 0.21605446934700012 -0.37565234303474426 0.9267250299453735 -0.0 0.5520947575569153 0.2880534529685974 0 1.0 0 0.0 0 0.0 0 0.0 1.3894922733306885 0.1955251395702362 -0.2839455306529999 -0.07519760727882385 0.9971618056297302 -0.0 0.00985342264175415 0.7886281609535217 0 1.0 0 0.0 0 0.0 0 0.0 1.3775832653045654 0.1943819224834442 0.21605448424816132 -0.11777092516422272 0.9930112361907959 -0.0 0.4639950394630432 0.6246772408485413 0 1.0 0 0.0 0 0.0 0 0.0 1.3894922733306885 0.1955251395702362 0.21605448424816132 -0.07519760727882385 0.9971618056297302 -0.0 0.4704526364803314 0.6259280443191528 0 1.0 0 0.0 0 0.0 0 0.0 -0.15343952178955078 -0.10089192539453506 -0.2839455306529999 -0.9809259176254272 -0.19437238574028015 -0.0 0.06731992959976196 0.5781137943267822 0 1.0 0 0.0 0 0.0 0 0.0 -0.1520531177520752 -0.10727692395448685 0.21605446934700012 -0.9728385210037231 -0.23145237565040588 -0.0 0.4040839374065399 0.4313696026802063 0 1.0 0 0.0 0 0.0 0 0.0 -0.15343952178955078 -0.10089192539453506 0.21605446934700012 -0.9809259176254272 -0.19437238574028015 -0.0 0.4039095640182495 0.43862825632095337 0 1.0 0 0.0 0 0.0 0 0.0 -1.0837708711624146 -0.11352327466011047 -0.2839455306529999 0.16067995131015778 0.9869990944862366 -0.0 1.026201844215393 0.4746147394180298 0 1.0 0 0.0 0 0.0 0 0.0 -1.0902361869812012 -0.11218546330928802 0.21605446934700012 0.2460707426071167 0.9692373275756836 -0.0 0.5467023253440857 0.2809107303619385 0 1.0 0 0.0 0 0.0 0 0.0 -1.0837708711624146 -0.11352327466011047 0.21605446934700012 0.16067995131015778 0.9869990944862366 -0.0 0.5516993403434753 0.28032606840133667 0 1.0 0 0.0 0 0.0 0 0.0 -1.2278786897659302 -0.11230587214231491 -0.2839455306529999 -0.8745384216308594 -0.4849391281604767 -0.0 0.10593611001968384 0.467909574508667 0 1.0 0 0.0 0 0.0 0 0.0 -1.2218475341796875 -0.1223333552479744 0.21605446934700012 -0.8377330899238586 -0.5460371971130371 -0.0 0.45306360721588135 0.28299450874328613 0 1.0 0 0.0 0 0.0 0 0.0 -1.2278786897659302 -0.11230587214231491 0.21605446934700012 -0.8745384216308594 -0.4849391281604767 -0.0 0.4501752555370331 0.29445379972457886 0 1.0 0 0.0 0 0.0 0 0.0 0.05052542686462402 -0.10120813548564911 -0.2839455306529999 -0.6056703329086304 0.7957090735435486 -0.0 0.9418185949325562 0.5799161791801453 0 1.0 0 0.0 0 0.0 0 0.0 0.04728555679321289 -0.10356024652719498 0.21605446934700012 -0.5684072375297546 0.8227179646492004 -0.0 0.5262308716773987 0.42314088344573975 0 1.0 0 0.0 0 0.0 0 0.0 0.05052542686462402 -0.10120813548564911 0.21605446934700012 -0.6056703329086304 0.7957090735435486 -0.0 0.5281510353088379 0.42618632316589355 0 1.0 0 0.0 0 0.0 0 0.0 0.9765326976776123 -0.09445341676473618 -0.2839455306529999 0.7320474982261658 0.6812036633491516 -0.0 0.015665769577026367 0.4688234329223633 0 1.0 0 0.0 0 0.0 0 0.0 0.9728889465332031 -0.09026120603084564 0.21605446934700012 0.7780693769454956 0.6281319856643677 -0.0 0.4482648968696594 0.3134663701057434 0 1.0 0 0.0 0 0.0 0 0.0 0.9765326976776123 -0.09445341676473618 0.21605446934700012 0.7320474982261658 0.6812036633491516 -0.0 0.45053744316101074 0.3082153797149658 0 1.0 0 0.0 0 0.0 0 0.0 -1.5250436067581177 -0.11923450231552124 -0.2839455306529999 0.3585619628429413 0.9334696531295776 -0.0 0.056250184774398804 0.47588449716567993 0 1.0 0 0.0 0 0.0 0 0.0 -1.5282543897628784 -0.11787480115890503 0.21605446934700012 0.4213385283946991 0.9068880081176758 -0.0 0.5105367302894592 0.2842988967895508 0 1.0 0 0.0 0 0.0 0 0.0 -1.5250436067581177 -0.11923450231552124 0.21605446934700012 0.3585619628429413 0.9334696531295776 -0.0 0.5129532814025879 0.28268343210220337 0 1.0 0 0.0 0 0.0 0 0.0 1.4616072177886963 0.19367659091949463 -0.2839455306529999 0.13031403720378876 0.9914548397064209 -0.0 0.9513123035430908 0.7838001847267151 0 1.0 0 0.0 0 0.0 0 0.0 1.4507882595062256 0.1948854923248291 0.21605448424816132 0.09341716021299362 0.9956053495407104 -0.0 0.5039108395576477 0.6241855025291443 0 1.0 0 0.0 0 0.0 0 0.0 1.4616072177886963 0.19367659091949463 0.21605448424816132 0.13031403720378876 0.9914548397064209 -0.0 0.5097600817680359 0.6224872469902039 0 1.0 0 0.0 0 0.0 0 0.0 -1.0536996126174927 -0.11278747767210007 -0.2839455306529999 -0.22412793338298798 0.9745475649833679 -0.0 1.0086880922317505 0.47808516025543213 0 1.0 0 0.0 0 0.0 0 0.0 -1.0590094327926636 -0.1137908324599266 0.21605446934700012 -0.14783166348934174 0.9889827966690063 -0.0 0.5701271891593933 0.28467416763305664 0 1.0 0 0.0 0 0.0 0 0.0 -1.0536996126174927 -0.11278747767210007 0.21605446934700012 -0.22412793338298798 0.9745475649833679 -0.0 0.5738626718521118 0.28699201345443726 0 1.0 0 0.0 0 0.0 0 0.0 -1.4773203134536743 -0.11862154304981232 -0.2839455306529999 -0.3258461356163025 0.9454023838043213 -0.0 1.0281380414962769 0.4801962971687317 0 1.0 0 0.0 0 0.0 0 0.0 -1.4815696477890015 -0.11995935440063477 0.21605446934700012 -0.27402570843696594 0.9616992473602295 -0.0 0.5459287166595459 0.2837129235267639 0 1.0 0 0.0 0 0.0 0 0.0 -1.4773203134536743 -0.11862154304981232 0.21605446934700012 -0.3258461356163025 0.9454023838043213 -0.0 0.5490454435348511 0.2857193946838379 0 1.0 0 0.0 0 0.0 0 0.0 1.3775832653045654 0.1943819224834442 -0.2839455306529999 -0.11777092516422272 0.9930112361907959 -0.0 0.019346296787261963 0.7862545847892761 0 1.0 0 0.0 0 0.0 0 0.0 1.3662583827972412 0.19278141856193542 0.21605448424816132 -0.16406750679016113 0.9864192605018616 -0.0 0.4578937888145447 0.6229137778282166 0 1.0 0 0.0 0 0.0 0 0.0 1.3775832653045654 0.1943819224834442 0.21605448424816132 -0.11777092516422272 0.9930112361907959 -0.0 0.4639950394630432 0.6246772408485413 0 1.0 0 0.0 0 0.0 0 0.0 1.1871328353881836 -0.09928411990404129 -0.2839455306529999 0.9102755784988403 -0.4139530658721924 -0.0 0.9002060294151306 0.4637722969055176 0 1.0 0 0.0 0 0.0 0 0.0 1.1907413005828857 -0.09083038568496704 0.21605446934700012 0.9282204508781433 -0.3719290792942047 -0.0 0.5891975164413452 0.3356865644454956 0 1.0 0 0.0 0 0.0 0 0.0 1.1871328353881836 -0.09928411990404129 0.21605446934700012 0.9102755784988403 -0.4139530658721924 -0.0 0.5881662368774414 0.3265685439109802 0 1.0 0 0.0 0 0.0 0 0.0 0.8681845664978027 -0.09213779121637344 -0.2839455306529999 -0.9248634576797485 -0.3802911341190338 -0.0 0.07195284962654114 0.4773102402687073 0 1.0 0 0.0 0 0.0 0 0.0 0.8725264072418213 -0.1018965020775795 0.21605446934700012 -0.9013641476631165 -0.43299660086631775 -0.0 0.38795796036720276 0.32857829332351685 0 1.0 0 0.0 0 0.0 0 0.0 0.8681845664978027 -0.09213779121637344 0.21605446934700012 -0.9248634576797485 -0.3802911341190338 -0.0 0.3868318498134613 0.33936208486557007 0 1.0 0 0.0 0 0.0 0 0.0 -1.6506456136703491 -0.11920773983001709 -0.2839455306529999 -0.9472029805183411 -0.32053589820861816 -0.0 0.12096211314201355 0.47054606676101685 0 1.0 0 0.0 0 0.0 0 0.0 -1.648117184638977 -0.12588948011398315 0.21605446934700012 -0.921933650970459 -0.3872798979282379 -0.0 0.4339945912361145 0.2996535301208496 0 1.0 0 0.0 0 0.0 0 0.0 -1.6506456136703491 -0.11920773983001709 0.21605446934700012 -0.9472029805183411 -0.32053589820861816 -0.0 0.433250367641449 0.3067089319229126 0 1.0 0 0.0 0 0.0 0 0.0 -1.0770429372787476 -0.11432596296072006 -0.2839455306529999 0.07840204983949661 0.9969176054000854 -0.0 1.0222300291061401 0.4743214249610901 0 1.0 0 0.0 0 0.0 0 0.0 -1.0837708711624146 -0.11352327466011047 0.21605446934700012 0.16067995131015778 0.9869990944862366 -0.0 0.5516993403434753 0.28032606840133667 0 1.0 0 0.0 0 0.0 0 0.0 -1.0770429372787476 -0.11432596296072006 0.21605446934700012 0.07840204983949661 0.9969176054000854 -0.0 0.5568340420722961 0.28051841259002686 0 1.0 0 0.0 0 0.0 0 0.0 1.471881628036499 0.19212231040000916 -0.2839455306529999 0.17062897980213165 0.9853205680847168 -0.0 0.9434927105903625 0.7804336547851562 0 1.0 0 0.0 0 0.0 0 0.0 1.4616072177886963 0.19367659091949463 0.21605448424816132 0.13031403720378876 0.9914548397064209 -0.0 0.5097600817680359 0.6224872469902039 0 1.0 0 0.0 0 0.0 0 0.0 1.471881628036499 0.19212231040000916 0.21605448424816132 0.17062897980213165 0.9853205680847168 -0.0 0.5152754187583923 0.6204149723052979 0 1.0 0 0.0 0 0.0 0 0.0 -0.0388646125793457 -0.10341430455446243 -0.2839455306529999 0.6682027578353882 0.7439497113227844 -0.0 0.999582827091217 0.5823426246643066 0 1.0 0 0.0 0 0.0 0 0.0 -0.040947914123535156 -0.10143677890300751 0.21605446934700012 0.7084261775016785 0.7057710289955139 -0.0 1.469374179840088 0.42627018690109253 0 1.0 0 0.0 0 0.0 0 0.0 -0.0388646125793457 -0.10341430455446243 0.21605446934700012 0.6682027578353882 0.7439497113227844 -0.0 1.4706650972366333 0.42364639043807983 0 1.0 0 0.0 0 0.0 0 0.0 -1.0590094327926636 -0.1137908324599266 -0.2839455306529999 -0.14783166348934174 0.9889827966690063 -0.0 1.0117387771606445 0.47651296854019165 0 1.0 0 0.0 0 0.0 0 0.0 -1.0644603967666626 -0.11439284682273865 0.21605446934700012 -0.07284767925739288 0.9973143935203552 -0.0 0.5661978721618652 0.28283756971359253 0 1.0 0 0.0 0 0.0 0 0.0 -1.0590094327926636 -0.1137908324599266 0.21605446934700012 -0.14783166348934174 0.9889827966690063 -0.0 0.5701271891593933 0.28467416763305664 0 1.0 0 0.0 0 0.0 0 0.0 1.0839512348175049 -0.09300372004508972 -0.2839455306529999 -0.8345591425895691 0.5508896112442017 -0.0 0.9521704912185669 0.46799367666244507 0 1.0 0 0.0 0 0.0 0 0.0 1.081805944442749 -0.09606851637363434 0.21605446934700012 -0.8022705912590027 0.5969420671463013 -0.0 0.5260624289512634 0.3048214912414551 0 1.0 0 0.0 0 0.0 0 0.0 1.0839512348175049 -0.09300372004508972 0.21605446934700012 -0.8345591425895691 0.5508896112442017 -0.0 0.527442216873169 0.30847179889678955 0 1.0 0 0.0 0 0.0 0 0.0 1.3662583827972412 0.19278141856193542 -0.2839455306529999 -0.16406750679016113 0.9864192605018616 -0.0 0.02812016010284424 0.7831013202667236 0 1.0 0 0.0 0 0.0 0 0.0 1.3555166721343994 0.19072362780570984 0.21605448424816132 -0.2143009752035141 0.9767448902130127 -0.0 0.45214810967445374 0.6206684112548828 0 1.0 0 0.0 0 0.0 0 0.0 1.3662583827972412 0.19278141856193542 0.21605448424816132 -0.16406750679016113 0.9864192605018616 -0.0 0.4578937888145447 0.6229137778282166 0 1.0 0 0.0 0 0.0 0 0.0 -1.5217162370681763 -0.12038502097129822 -0.2839455306529999 0.2953581213951111 0.9553819298744202 -0.0 0.05424368381500244 0.47486114501953125 0 1.0 0 0.0 0 0.0 0 0.0 -1.5250436067581177 -0.11923450231552124 0.21605446934700012 0.3585619628429413 0.9334696531295776 -0.0 0.5129532814025879 0.28268343210220337 0 1.0 0 0.0 0 0.0 0 0.0 -1.5217162370681763 -0.12038502097129822 0.21605446934700012 0.2953581213951111 0.9553819298744202 -0.0 0.5154720544815063 0.28133004903793335 0 1.0 0 0.0 0 0.0 0 0.0 -0.03665733337402344 -0.10528966784477234 -0.2839455306529999 0.6266365647315979 0.7792901396751404 -0.0 0.9981430768966675 0.5799591541290283 0 1.0 0 0.0 0 0.0 0 0.0 -0.0388646125793457 -0.10341430455446243 0.21605446934700012 0.6682027578353882 0.7439497113227844 -0.0 1.4706650972366333 0.42364639043807983 0 1.0 0 0.0 0 0.0 0 0.0 -0.03665733337402344 -0.10528966784477234 0.21605446934700012 0.6266365647315979 0.7792901396751404 -0.0 1.472046971321106 0.421146035194397 0 1.0 0 0.0 0 0.0 0 0.0 -1.4815696477890015 -0.11995935440063477 -0.2839455306529999 -0.27402570843696594 0.9616992473602295 -0.0 1.030609130859375 0.47836989164352417 0 1.0 0 0.0 0 0.0 0 0.0 -1.4858530759811401 -0.12105392664670944 0.21605446934700012 -0.22058779001235962 0.9753410220146179 -0.0 0.5427493453025818 0.28203511238098145 0 1.0 0 0.0 0 0.0 0 0.0 -1.4815696477890015 -0.11995935440063477 0.21605446934700012 -0.27402570843696594 0.9616992473602295 -0.0 0.5459287166595459 0.2837129235267639 0 1.0 0 0.0 0 0.0 0 0.0 0.04728555679321289 -0.10356024652719498 -0.2839455306529999 -0.5684072375297546 0.8227179646492004 -0.0 0.9439307451248169 0.5773794651031494 0 1.0 0 0.0 0 0.0 0 0.0 0.043921709060668945 -0.1057700365781784 0.21605446934700012 -0.5277870893478394 0.8493301272392273 -0.0 0.5242090225219727 0.42025721073150635 0 1.0 0 0.0 0 0.0 0 0.0 0.04728555679321289 -0.10356024652719498 0.21605446934700012 -0.5684072375297546 0.8227179646492004 -0.0 0.5262308716773987 0.42314088344573975 0 1.0 0 0.0 0 0.0 0 0.0 -1.0700523853302002 -0.1145935207605362 -0.2839455306529999 0.00119022186845541 0.999969482421875 -0.0 1.018137812614441 0.4746472239494324 0 1.0 0 0.0 0 0.0 0 0.0 -1.0770429372787476 -0.11432596296072006 0.21605446934700012 0.07840204983949661 0.9969176054000854 -0.0 0.5568340420722961 0.28051841259002686 0 1.0 0 0.0 0 0.0 0 0.0 -1.0700523853302002 -0.1145935207605362 0.21605446934700012 0.00119022186845541 0.999969482421875 -0.0 0.5620806217193604 0.2814953923225403 0 1.0 0 0.0 0 0.0 0 0.0 0.9804050922393799 -0.09834157675504684 -0.2839455306529999 0.6852015852928162 0.7283242344856262 -0.0 0.013366401195526123 0.464388370513916 0 1.0 0 0.0 0 0.0 0 0.0 0.9765326976776123 -0.09445341676473618 0.21605446934700012 0.7320474982261658 0.6812036633491516 -0.0 0.45053744316101074 0.3082153797149658 0 1.0 0 0.0 0 0.0 0 0.0 0.9804050922393799 -0.09834157675504684 0.21605446934700012 0.6852015852928162 0.7283242344856262 -0.0 0.45302438735961914 0.30331945419311523 0 1.0 0 0.0 0 0.0 0 0.0 1.4816114902496338 0.1902226209640503 -0.2839455306529999 0.2145756334066391 0.9766838550567627 -0.0 0.9363420009613037 0.7765767574310303 0 1.0 0 0.0 0 0.0 0 0.0 1.471881628036499 0.19212231040000916 0.21605448424816132 0.17062897980213165 0.9853205680847168 -0.0 0.5152754187583923 0.6204149723052979 0 1.0 0 0.0 0 0.0 0 0.0 1.4816114902496338 0.1902226209640503 0.21605448424816132 0.2145756334066391 0.9766838550567627 -0.0 0.5204575657844543 0.6179937124252319 0 1.0 0 0.0 0 0.0 0 0.0 -1.0644603967666626 -0.11439284682273865 -0.2839455306529999 -0.07284767925739288 0.9973143935203552 -0.0 1.0148876905441284 0.4753662943840027 0 1.0 0 0.0 0 0.0 0 0.0 -1.0700523853302002 -0.1145935207605362 0.21605446934700012 0.00119022186845541 0.999969482421875 -0.0 0.5620806217193604 0.2814953923225403 0 1.0 0 0.0 0 0.0 0 0.0 -1.0644603967666626 -0.11439284682273865 0.21605446934700012 -0.07284767925739288 0.9973143935203552 -0.0 0.5661978721618652 0.28283756971359253 0 1.0 0 0.0 0 0.0 0 0.0 1.081805944442749 -0.09606851637363434 -0.2839455306529999 -0.8022705912590027 0.5969420671463013 -0.0 0.9535298347473145 0.46465450525283813 0 1.0 0 0.0 0 0.0 0 0.0 1.0795536041259766 -0.09891926497220993 0.21605446934700012 -0.765282154083252 0.6436659097671509 -0.0 0.5245863199234009 0.30141550302505493 0 1.0 0 0.0 0 0.0 0 0.0 1.081805944442749 -0.09606851637363434 0.21605446934700012 -0.8022705912590027 0.5969420671463013 -0.0 0.5260624289512634 0.3048214912414551 0 1.0 0 0.0 0 0.0 0 0.0 1.3555166721343994 0.19072362780570984 -0.2839455306529999 -0.2143009752035141 0.9767448902130127 -0.0 0.03615725040435791 0.7792714238166809 0 1.0 0 0.0 0 0.0 0 0.0 1.3453590869903564 0.18820855021476746 0.21605448424816132 -0.2685323655605316 0.9632557034492493 -0.0 0.44675424695014954 0.6179689168930054 0 1.0 0 0.0 0 0.0 0 0.0 1.3555166721343994 0.19072362780570984 0.21605448424816132 -0.2143009752035141 0.9767448902130127 -0.0 0.45214810967445374 0.6206684112548828 0 1.0 0 0.0 0 0.0 0 0.0 -1.5182719230651855 -0.12132634967565536 -0.2839455306529999 0.23261207342147827 0.9725638628005981 -0.0 0.052179962396621704 0.4740765690803528 0 1.0 0 0.0 0 0.0 0 0.0 -1.5217162370681763 -0.12038502097129822 0.21605446934700012 0.2953581213951111 0.9553819298744202 -0.0 0.5154720544815063 0.28133004903793335 0 1.0 0 0.0 0 0.0 0 0.0 -1.5182719230651855 -0.12132634967565536 0.21605446934700012 0.23261207342147827 0.9725638628005981 -0.0 0.5180913805961609 0.28024226427078247 0 1.0 0 0.0 0 0.0 0 0.0 -0.03432583808898926 -0.10706286877393723 -0.2839455306529999 0.5824762582778931 0.8127994537353516 -0.0 0.9966254830360413 0.5776949524879456 0 1.0 0 0.0 0 0.0 0 0.0 -0.03665733337402344 -0.10528966784477234 0.21605446934700012 0.6266365647315979 0.7792901396751404 -0.0 1.472046971321106 0.421146035194397 0 1.0 0 0.0 0 0.0 0 0.0 -0.03432583808898926 -0.10706286877393723 0.21605446934700012 0.5824762582778931 0.8128299713134766 -0.0 1.473520278930664 0.418770968914032 0 1.0 0 0.0 0 0.0 0 0.0 0.043921709060668945 -0.1057700365781784 -0.2839455306529999 -0.5277870893478394 0.8493301272392273 -0.0 0.9461168050765991 0.5750011205673218 0 1.0 0 0.0 0 0.0 0 0.0 0.04048466682434082 -0.10778769105672836 0.21605446934700012 -0.4839625358581543 0.8750572204589844 -0.0 0.5221152901649475 0.4176033139228821 0 1.0 0 0.0 0 0.0 0 0.0 0.043921709060668945 -0.1057700365781784 0.21605446934700012 -0.5277870893478394 0.8493301272392273 -0.0 0.5242090225219727 0.42025721073150635 0 1.0 0 0.0 0 0.0 0 0.0 -1.2218475341796875 -0.1223333552479744 -0.2839455306529999 -0.8377330899238586 -0.5460371971130371 -0.0 0.10203734040260315 0.4583163857460022 0 1.0 0 0.0 0 0.0 0 0.0 -1.215181589126587 -0.13179409503936768 0.21605446934700012 -0.7957395911216736 -0.6056092977523804 -0.0 0.4565242528915405 0.27205127477645874 0 1.0 0 0.0 0 0.0 0 0.0 -1.2218475341796875 -0.1223333552479744 0.21605446934700012 -0.8377330899238586 -0.5460371971130371 -0.0 0.45306360721588135 0.28299450874328613 0 1.0 0 0.0 0 0.0 0 0.0 0.9844331741333008 -0.10189163684844971 -0.2839455306529999 0.635425865650177 0.7721487879753113 -0.0 0.010986119508743286 0.46034443378448486 0 1.0 0 0.0 0 0.0 0 0.0 0.9804050922393799 -0.09834157675504684 0.21605446934700012 0.6852015852928162 0.7283242344856262 -0.0 0.45302438735961914 0.30331945419311523 0 1.0 0 0.0 0 0.0 0 0.0 0.9844331741333008 -0.10189163684844971 0.21605446934700012 0.635425865650177 0.7721487879753113 -0.0 0.45567893981933594 0.2988291382789612 0 1.0 0 0.0 0 0.0 0 0.0 -1.3263133764266968 -0.12555383145809174 -0.2839455306529999 0.9898678660392761 0.14185002446174622 -0.0 0.9483564496040344 0.4868885278701782 0 1.0 0 0.0 0 0.0 0 0.0 -1.3269373178482056 -0.12077785283327103 0.21605446934700012 0.9928891658782959 0.1188085600733757 -0.0 0.6428943872451782 0.32994168996810913 0 1.0 0 0.0 0 0.0 0 0.0 -1.3263133764266968 -0.12555383145809174 0.21605446934700012 0.9898678660392761 0.14185002446174622 -0.0 0.6438645124435425 0.3257516026496887 0 1.0 0 0.0 0 0.0 0 0.0 1.4907958507537842 0.18797752261161804 -0.2839455306529999 0.2623981535434723 0.964934229850769 -0.0 0.9298497438430786 0.7723049521446228 0 1.0 0 0.0 0 0.0 0 0.0 1.4816114902496338 0.1902226209640503 0.21605448424816132 0.2145756334066391 0.9766838550567627 -0.0 0.5204575657844543 0.6179937124252319 0 1.0 0 0.0 0 0.0 0 0.0 1.4907958507537842 0.18797752261161804 0.21605448424816132 0.2623981535434723 0.964934229850769 -0.0 0.5253098607063293 0.6152458190917969 0 1.0 0 0.0 0 0.0 0 0.0 1.0795536041259766 -0.09891926497220993 -0.2839455306529999 -0.765282154083252 0.6436659097671509 -0.0 0.954938530921936 0.4615635275840759 0 1.0 0 0.0 0 0.0 0 0.0 1.0771942138671875 -0.1015559658408165 0.21605446934700012 -0.7233496904373169 0.6904507875442505 -0.0 0.5230129957199097 0.2982526421546936 0 1.0 0 0.0 0 0.0 0 0.0 1.0795536041259766 -0.09891926497220993 0.21605446934700012 -0.765282154083252 0.6436659097671509 -0.0 0.5245863199234009 0.30141550302505493 0 1.0 0 0.0 0 0.0 0 0.0 -1.4858530759811401 -0.12105392664670944 -0.2839455306529999 -0.22058779001235962 0.9753410220146179 -0.0 1.0331037044525146 0.4768180847167969 0 1.0 0 0.0 0 0.0 0 0.0 -1.4901705980300903 -0.12190525233745575 0.21605446934700012 -0.1659596562385559 0.9861140847206116 -0.0 0.5395126342773438 0.2806873917579651 0 1.0 0 0.0 0 0.0 0 0.0 -1.4858530759811401 -0.12105392664670944 0.21605446934700012 -0.22058779001235962 0.9753410220146179 -0.0 0.5427493453025818 0.28203511238098145 0 1.0 0 0.0 0 0.0 0 0.0 1.3453590869903564 0.18820855021476746 -0.2839455306529999 -0.2685323655605316 0.9632557034492493 -0.0 0.04345959424972534 0.7748583555221558 0 1.0 0 0.0 0 0.0 0 0.0 1.335785150527954 0.18523618578910828 0.21605448424816132 -0.3266090750694275 0.9451277256011963 -0.0 0.44170477986335754 0.6148389577865601 0 1.0 0 0.0 0 0.0 0 0.0 1.3453590869903564 0.18820855021476746 0.21605448424816132 -0.2685323655605316 0.9632557034492493 -0.0 0.44675424695014954 0.6179689168930054 0 1.0 0 0.0 0 0.0 0 0.0 -0.03187894821166992 -0.10871323943138123 -0.2839455306529999 0.5338907837867737 0.8455153107643127 -0.0 0.9950354695320129 0.57557612657547 0 1.0 0 0.0 0 0.0 0 0.0 -0.03432583808898926 -0.10706286877393723 0.21605446934700012 0.5824762582778931 0.8128299713134766 -0.0 1.473520278930664 0.418770968914032 0 1.0 0 0.0 0 0.0 0 0.0 -0.03187894821166992 -0.10871323943138123 0.21605446934700012 0.5338907837867737 0.8455153107643127 -0.0 1.4750800132751465 0.4165498614311218 0 1.0 0 0.0 0 0.0 0 0.0 -0.985637903213501 -0.13450376689434052 -0.2839455306529999 0.7927793264389038 -0.6094546318054199 -0.0 0.9723237752914429 0.46296828985214233 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 0.21605446934700012 0.8035218119621277 -0.5952635407447815 -0.0 0.6224963665008545 0.2940528988838196 0 1.0 0 0.0 0 0.0 0 0.0 -0.985637903213501 -0.13450376689434052 0.21605446934700012 0.7927793264389038 -0.6094546318054199 -0.0 0.6210468411445618 0.2876055836677551 0 1.0 0 0.0 0 0.0 0 0.0 -0.1520531177520752 -0.10727692395448685 -0.2839455306529999 -0.9728385210037231 -0.23145237565040588 -0.0 0.06625154614448547 0.5711506009101868 0 1.0 0 0.0 0 0.0 0 0.0 -0.1504817008972168 -0.11334571242332458 0.21605446934700012 -0.9624622464179993 -0.2713705897331238 -0.0 0.4043794870376587 0.424402117729187 0 1.0 0 0.0 0 0.0 0 0.0 -0.1520531177520752 -0.10727692395448685 0.21605446934700012 -0.9728385210037231 -0.23145237565040588 -0.0 0.4040839374065399 0.4313696026802063 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 -0.2839455306529999 -0.999969482421875 0.0 -0.0 0.9702714085578918 0.46846210956573486 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.18394553661346436 0.21605445444583893 -1.0 0.0 -0.0 0.6307469606399536 0.2462201714515686 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 0.21605446934700012 -1.0 0.0 -0.0 0.6224963665008545 0.2940528988838196 0 1.0 0 0.0 0 0.0 0 0.0 1.183220386505127 -0.10738029330968857 -0.2839455306529999 0.8894924521446228 -0.45689260959625244 -0.0 0.9025294780731201 0.45596277713775635 0 1.0 0 0.0 0 0.0 0 0.0 1.1871328353881836 -0.09928411990404129 0.21605446934700012 0.9102755784988403 -0.4139530658721924 -0.0 0.5881662368774414 0.3265685439109802 0 1.0 0 0.0 0 0.0 0 0.0 1.183220386505127 -0.10738029330968857 0.21605446934700012 0.8894924521446228 -0.45689260959625244 -0.0 0.5869276523590088 0.31774646043777466 0 1.0 0 0.0 0 0.0 0 0.0 -1.5147109031677246 -0.12205849587917328 -0.2839455306529999 0.17114779353141785 0.9852290153503418 -0.0 0.050057947635650635 0.47353076934814453 0 1.0 0 0.0 0 0.0 0 0.0 -1.5182719230651855 -0.12132634967565536 0.21605446934700012 0.23261207342147827 0.9725638628005981 -0.0 0.5180913805961609 0.28024226427078247 0 1.0 0 0.0 0 0.0 0 0.0 -1.5147109031677246 -0.12205849587917328 0.21605446934700012 0.17114779353141785 0.9852290153503418 -0.0 0.5208086371421814 0.27942436933517456 0 1.0 0 0.0 0 0.0 0 0.0 1.4994356632232666 0.1853870451450348 -0.2839455306529999 0.31418806314468384 0.9493392705917358 -0.0 0.9239938855171204 0.767682671546936 0 1.0 0 0.0 0 0.0 0 0.0 1.4907958507537842 0.18797752261161804 0.21605448424816132 0.2623981535434723 0.964934229850769 -0.0 0.5253098607063293 0.6152458190917969 0 1.0 0 0.0 0 0.0 0 0.0 1.4994356632232666 0.1853870451450348 0.21605448424816132 0.31418806314468384 0.9493392705917358 -0.0 0.5298388004302979 0.6121903657913208 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.18394553661346436 -0.2839455306529999 0.0 -1.0 -0.0 0.9718600511550903 0.41916149854660034 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 0.21605445444583893 0.0 -1.0 -0.0 0.6724605560302734 0.28865742683410645 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.18394553661346436 0.21605445444583893 0.0 -1.0 -0.0 0.6307469606399536 0.2462201714515686 0 1.0 0 0.0 0 0.0 0 0.0 1.0771942138671875 -0.1015559658408165 -0.2839455306529999 -0.7233496904373169 0.6904507875442505 -0.0 0.9563973546028137 0.4587175250053406 0 1.0 0 0.0 0 0.0 0 0.0 1.0747277736663818 -0.10397861897945404 0.21605446934700012 -0.6763817071914673 0.7365337014198303 -0.0 0.5213418006896973 0.29533177614212036 0 1.0 0 0.0 0 0.0 0 0.0 1.0771942138671875 -0.1015559658408165 0.21605446934700012 -0.7233496904373169 0.6904507875442505 -0.0 0.5230129957199097 0.2982526421546936 0 1.0 0 0.0 0 0.0 0 0.0 -1.4901705980300903 -0.12190525233745575 -0.2839455306529999 -0.1659901738166809 0.9861140847206116 -0.0 1.0356225967407227 0.47553956508636475 0 1.0 0 0.0 0 0.0 0 0.0 -1.494522213935852 -0.12251335382461548 0.21605446934700012 -0.1106906309723854 0.9938352704048157 -0.0 0.5362241268157959 0.2796708345413208 0 1.0 0 0.0 0 0.0 0 0.0 -1.4901705980300903 -0.12190525233745575 0.21605446934700012 -0.1659596562385559 0.9861140847206116 -0.0 0.5395126342773438 0.2806873917579651 0 1.0 0 0.0 0 0.0 0 0.0 0.04048466682434082 -0.10778769105672836 -0.2839455306529999 -0.4839625358581543 0.8750572204589844 -0.0 0.9483439922332764 0.5728389024734497 0 1.0 0 0.0 0 0.0 0 0.0 0.03697466850280762 -0.10961319506168365 0.21605446934700012 -0.4382458031177521 0.8988311290740967 -0.0 0.5199500918388367 0.4151836633682251 0 1.0 0 0.0 0 0.0 0 0.0 0.04048466682434082 -0.10778769105672836 0.21605446934700012 -0.4839625358581543 0.8750572204589844 -0.0 0.5221152901649475 0.4176033139228821 0 1.0 0 0.0 0 0.0 0 0.0 -1.215181589126587 -0.13179409503936768 -0.2839455306529999 -0.7957395911216736 -0.6056092977523804 -0.0 0.09788185358047485 0.44936132431030273 0 1.0 0 0.0 0 0.0 0 0.0 -1.2078808546066284 -0.14068809151649475 0.21605446934700012 -0.7514267563819885 -0.6597796678543091 -0.0 0.46060603857040405 0.26163506507873535 0 1.0 0 0.0 0 0.0 0 0.0 -1.215181589126587 -0.13179409503936768 0.21605446934700012 -0.7957395911216736 -0.6056092977523804 -0.0 0.4565242528915405 0.27205127477645874 0 1.0 0 0.0 0 0.0 0 0.0 1.507530927658081 0.18245115876197815 -0.2839455306529999 0.36994537711143494 0.9290444850921631 -0.0 0.9187467098236084 0.7627642154693604 0 1.0 0 0.0 0 0.0 0 0.0 1.4994356632232666 0.1853870451450348 0.21605448424816132 0.31418806314468384 0.9493392705917358 -0.0 0.5298388004302979 0.6121903657913208 0 1.0 0 0.0 0 0.0 0 0.0 1.507530927658081 0.18245115876197815 0.21605448424816132 0.36994537711143494 0.9290444850921631 -0.0 0.5340521335601807 0.6088429689407349 0 1.0 0 0.0 0 0.0 0 0.0 1.335785150527954 0.18523618578910828 -0.2839455306529999 -0.3266090750694275 0.9451277256011963 -0.0 0.05004608631134033 0.7699426412582397 0 1.0 0 0.0 0 0.0 0 0.0 1.3267953395843506 0.1818065345287323 0.21605448424816132 -0.3882870078086853 0.921536922454834 -0.0 0.4369904398918152 0.6112979650497437 0 1.0 0 0.0 0 0.0 0 0.0 1.335785150527954 0.18523618578910828 0.21605448424816132 -0.3266090750694275 0.9451277256011963 -0.0 0.44170477986335754 0.6148389577865601 0 1.0 0 0.0 0 0.0 0 0.0 0.988616943359375 -0.10510359704494476 -0.2839455306529999 0.5808892846107483 0.8139591813087463 -0.0 0.008523315191268921 0.4566870927810669 0 1.0 0 0.0 0 0.0 0 0.0 0.9844331741333008 -0.10189163684844971 0.21605446934700012 0.635425865650177 0.7721487879753113 -0.0 0.45567893981933594 0.2988291382789612 0 1.0 0 0.0 0 0.0 0 0.0 0.988616943359375 -0.10510359704494476 0.21605446934700012 0.5808892846107483 0.8139591813087463 -0.0 0.4585016369819641 0.29474544525146484 0 1.0 0 0.0 0 0.0 0 0.0 -1.5110331773757935 -0.12258145213127136 -0.2839455306529999 0.1116367056965828 0.9937437176704407 -0.0 0.047876596450805664 0.47322434186935425 0 1.0 0 0.0 0 0.0 0 0.0 -1.5147109031677246 -0.12205849587917328 0.21605446934700012 0.17114779353141785 0.9852290153503418 -0.0 0.5208086371421814 0.27942436933517456 0 1.0 0 0.0 0 0.0 0 0.0 -1.5110331773757935 -0.12258145213127136 0.21605446934700012 0.1116367056965828 0.9937437176704407 -0.0 0.5236209630966187 0.27888089418411255 0 1.0 0 0.0 0 0.0 0 0.0 -0.029325008392333984 -0.11022009700536728 -0.2839455306529999 0.4822840094566345 0.8760032653808594 -0.0 0.9933782815933228 0.5736287832260132 0 1.0 0 0.0 0 0.0 0 0.0 -0.03187894821166992 -0.10871323943138123 0.21605446934700012 0.5338907837867737 0.8455153107643127 -0.0 1.4750800132751465 0.4165498614311218 0 1.0 0 0.0 0 0.0 0 0.0 -0.029325008392333984 -0.11022009700536728 0.21605446934700012 0.4822534918785095 0.8760032653808594 -0.0 1.476720929145813 0.4145115613937378 0 1.0 0 0.0 0 0.0 0 0.0 -0.9896038770675659 -0.13947677612304688 -0.2839455306529999 0.7701956033706665 -0.6377758383750916 -0.0 0.9744249582290649 0.45770955085754395 0 1.0 0 0.0 0 0.0 0 0.0 -0.985637903213501 -0.13450376689434052 0.21605446934700012 0.7927793264389038 -0.6094546318054199 -0.0 0.6210468411445618 0.2876055836677551 0 1.0 0 0.0 0 0.0 0 0.0 -0.9896038770675659 -0.13947677612304688 0.21605446934700012 0.7701956033706665 -0.6377758383750916 -0.0 0.619458019733429 0.2813679575920105 0 1.0 0 0.0 0 0.0 0 0.0 0.8725264072418213 -0.1018965020775795 -0.2839455306529999 -0.9013641476631165 -0.43299660086631775 -0.0 0.06945812702178955 0.4675431251525879 0 1.0 0 0.0 0 0.0 0 0.0 0.8773789405822754 -0.1112854853272438 0.21605446934700012 -0.8742942810058594 -0.4853358566761017 -0.0 0.3894132971763611 0.3180522322654724 0 1.0 0 0.0 0 0.0 0 0.0 0.8725264072418213 -0.1018965020775795 0.21605446934700012 -0.9013641476631165 -0.43299660086631775 -0.0 0.38795796036720276 0.32857829332351685 0 1.0 0 0.0 0 0.0 0 0.0 -1.494522213935852 -0.12251335382461548 -0.2839455306529999 -0.1106906309723854 0.9938352704048157 -0.0 0.03816637396812439 0.4745330810546875 0 1.0 0 0.0 0 0.0 0 0.0 -1.4989076852798462 -0.12287820875644684 0.21605446934700012 -0.055207982659339905 0.9984435439109802 -0.0 0.5328900814056396 0.2789868116378784 0 1.0 0 0.0 0 0.0 0 0.0 -1.494522213935852 -0.12251335382461548 0.21605446934700012 -0.1106906309723854 0.9938352704048157 -0.0 0.5362241268157959 0.2796708345413208 0 1.0 0 0.0 0 0.0 0 0.0 0.03697466850280762 -0.10961319506168365 -0.2839455306529999 -0.4382458031177521 0.8988311290740967 -0.0 0.9506131410598755 0.5708950757980347 0 1.0 0 0.0 0 0.0 0 0.0 0.033391714096069336 -0.11124654114246368 0.21605446934700012 -0.3908810615539551 0.9204077124595642 -0.0 0.5177140831947327 0.41300249099731445 0 1.0 0 0.0 0 0.0 0 0.0 0.03697466850280762 -0.10961319506168365 0.21605446934700012 -0.4382458031177521 0.8988311290740967 -0.0 0.5199500918388367 0.4151836633682251 0 1.0 0 0.0 0 0.0 0 0.0 1.5150806903839111 0.17916986346244812 -0.2839455306529999 0.4293954372406006 0.9030731916427612 -0.0 0.914077639579773 0.7575942277908325 0 1.0 0 0.0 0 0.0 0 0.0 1.507530927658081 0.18245115876197815 0.21605448424816132 0.36994537711143494 0.9290444850921631 -0.0 0.5340521335601807 0.6088429689407349 0 1.0 0 0.0 0 0.0 0 0.0 1.5150806903839111 0.17916986346244812 0.21605448424816132 0.4293954372406006 0.9030731916427612 -0.0 0.5379581451416016 0.6052162051200867 0 1.0 0 0.0 0 0.0 0 0.0 -0.9936841726303101 -0.14422355592250824 -0.2839455306529999 0.7458113431930542 -0.6661275029182434 -0.0 0.9765768051147461 0.45268338918685913 0 1.0 0 0.0 0 0.0 0 0.0 -0.9896038770675659 -0.13947677612304688 0.21605446934700012 0.7701956033706665 -0.6377758383750916 -0.0 0.619458019733429 0.2813679575920105 0 1.0 0 0.0 0 0.0 0 0.0 -0.9936841726303101 -0.14422355592250824 0.21605446934700012 0.7458113431930542 -0.6661275029182434 -0.0 0.6177242398262024 0.2753394842147827 0 1.0 0 0.0 0 0.0 0 0.0 1.0747277736663818 -0.10397861897945404 -0.2839455306529999 -0.6763817071914673 0.7365337014198303 -0.0 0.9579070806503296 0.4561135172843933 0 1.0 0 0.0 0 0.0 0 0.0 1.0721542835235596 -0.10618721693754196 0.21605446934700012 -0.6264839768409729 0.7794122099876404 -0.0 0.5195723176002502 0.292652428150177 0 1.0 0 0.0 0 0.0 0 0.0 1.0747277736663818 -0.10397861897945404 0.21605446934700012 -0.6763817071914673 0.7365337014198303 -0.0 0.5213418006896973 0.29533177614212036 0 1.0 0 0.0 0 0.0 0 0.0 1.3267953395843506 0.1818065345287323 -0.2839455306529999 -0.3882870078086853 0.921536922454834 -0.0 0.05594542622566223 0.7645923495292664 0 1.0 0 0.0 0 0.0 0 0.0 1.3183887004852295 0.17791959643363953 0.21605448424816132 -0.4528946876525879 0.8915371894836426 -0.0 0.43259984254837036 0.6073609590530396 0 1.0 0 0.0 0 0.0 0 0.0 1.3267953395843506 0.1818065345287323 0.21605448424816132 -0.3882870078086853 0.921536922454834 -0.0 0.4369904398918152 0.6112979650497437 0 1.0 0 0.0 0 0.0 0 0.0 -1.2078808546066284 -0.14068809151649475 -0.2839455306529999 -0.7514267563819885 -0.6597796678543091 -0.0 0.0934579074382782 0.44103407859802246 0 1.0 0 0.0 0 0.0 0 0.0 -1.2001348733901978 -0.14893993735313416 0.21605446934700012 -0.7076326608657837 -0.7065340280532837 -0.0 0.4652387797832489 0.2518855929374695 0 1.0 0 0.0 0 0.0 0 0.0 -1.2078808546066284 -0.14068809151649475 0.21605446934700012 -0.7514267563819885 -0.6597796678543091 -0.0 0.46060603857040405 0.26163506507873535 0 1.0 0 0.0 0 0.0 0 0.0 -1.5072386264801025 -0.12289523333311081 -0.2839455306529999 0.05456709489226341 0.9985045790672302 -0.0 0.045634716749191284 0.47315794229507446 0 1.0 0 0.0 0 0.0 0 0.0 -1.5110331773757935 -0.12258145213127136 0.21605446934700012 0.1116367056965828 0.9937437176704407 -0.0 0.5236209630966187 0.27888089418411255 0 1.0 0 0.0 0 0.0 0 0.0 -1.5072386264801025 -0.12289523333311081 0.21605446934700012 0.05456709489226341 0.9985045790672302 -0.0 0.5265249013900757 0.2786164879798889 0 1.0 0 0.0 0 0.0 0 0.0 -0.026664018630981445 -0.11158344894647598 -0.2839455306529999 0.4297921657562256 0.9028900861740112 -0.0 0.9916535019874573 0.5718526840209961 0 1.0 0 0.0 0 0.0 0 0.0 -0.029325008392333984 -0.11022009700536728 0.21605446934700012 0.4822534918785095 0.8760032653808594 -0.0 1.476720929145813 0.4145115613937378 0 1.0 0 0.0 0 0.0 0 0.0 -0.026664018630981445 -0.11158344894647598 0.21605446934700012 0.4297921657562256 0.9028900861740112 -0.0 1.478442907333374 0.4126579165458679 0 1.0 0 0.0 0 0.0 0 0.0 -1.4989076852798462 -0.12287820875644684 -0.2839455306529999 -0.055207982659339905 0.9984435439109802 -0.0 0.04073569178581238 0.4737977385520935 0 1.0 0 0.0 0 0.0 0 0.0 -1.5033273696899414 -0.12299982458353043 0.21605446934700012 -0.0003662221133708954 0.999969482421875 -0.0 0.5295165181159973 0.2786363959312439 0 1.0 0 0.0 0 0.0 0 0.0 -1.4989076852798462 -0.12287820875644684 0.21605446934700012 -0.055207982659339905 0.9984435439109802 -0.0 0.5328900814056396 0.2789868116378784 0 1.0 0 0.0 0 0.0 0 0.0 0.033391714096069336 -0.11124654114246368 -0.2839455306529999 -0.3908810615539551 0.9204077124595642 -0.0 0.9529252052307129 0.569171667098999 0 1.0 0 0.0 0 0.0 0 0.0 0.029735803604125977 -0.11268772929906845 0.21605446934700012 -0.3422650694847107 0.939573347568512 -0.0 0.5154080986976624 0.4110640287399292 0 1.0 0 0.0 0 0.0 0 0.0 0.033391714096069336 -0.11124654114246368 0.21605446934700012 -0.3908810615539551 0.9204077124595642 -0.0 0.5177140831947327 0.41300249099731445 0 1.0 0 0.0 0 0.0 0 0.0 0.9929563999176025 -0.10797744989395142 -0.2839455306529999 0.522049605846405 0.8529008030891418 -0.0 0.0059764087200164795 0.45341217517852783 0 1.0 0 0.0 0 0.0 0 0.0 0.988616943359375 -0.10510359704494476 0.21605446934700012 0.5808892846107483 0.8139591813087463 -0.0 0.4585016369819641 0.29474544525146484 0 1.0 0 0.0 0 0.0 0 0.0 0.9929563999176025 -0.10797744989395142 0.21605446934700012 0.522049605846405 0.8529008030891418 -0.0 0.46149224042892456 0.29107022285461426 0 1.0 0 0.0 0 0.0 0 0.0 1.5220859050750732 0.1755431890487671 -0.2839455306529999 0.4920499324798584 0.8705404996871948 -0.0 0.9099534153938293 0.7522071599960327 0 1.0 0 0.0 0 0.0 0 0.0 1.5150806903839111 0.17916986346244812 0.21605448424816132 0.4293954372406006 0.9030731916427612 -0.0 0.5379581451416016 0.6052162051200867 0 1.0 0 0.0 0 0.0 0 0.0 1.5220859050750732 0.1755431890487671 0.21605448424816132 0.4920499324798584 0.8705404996871948 -0.0 0.5415668487548828 0.6013186573982239 0 1.0 0 0.0 0 0.0 0 0.0 -0.9978787899017334 -0.148744136095047 -0.2839455306529999 0.7195959091186523 -0.69435715675354 -0.0 0.9787807464599609 0.447887122631073 0 1.0 0 0.0 0 0.0 0 0.0 -0.9936841726303101 -0.14422355592250824 0.21605446934700012 0.7458113431930542 -0.6661275029182434 -0.0 0.6177242398262024 0.2753394842147827 0 1.0 0 0.0 0 0.0 0 0.0 -0.9978787899017334 -0.148744136095047 0.21605446934700012 0.7195959091186523 -0.69435715675354 -0.0 0.6158398389816284 0.26952022314071655 0 1.0 0 0.0 0 0.0 0 0.0 1.0721542835235596 -0.10618721693754196 -0.2839455306529999 -0.6264839768409729 0.7794122099876404 -0.0 0.9594686031341553 0.4537491202354431 0 1.0 0 0.0 0 0.0 0 0.0 1.06947660446167 -0.10820123553276062 0.21605446934700012 -0.5766472220420837 0.8169804811477661 -0.0 0.5177067518234253 0.29019415378570557 0 1.0 0 0.0 0 0.0 0 0.0 1.0721542835235596 -0.10618721693754196 0.21605446934700012 -0.6264839768409729 0.7794122099876404 -0.0 0.5195723176002502 0.292652428150177 0 1.0 0 0.0 0 0.0 0 0.0 1.3183887004852295 0.17791959643363953 -0.2839455306529999 -0.4528946876525879 0.8915371894836426 -0.0 0.06119370460510254 0.7588618993759155 0 1.0 0 0.0 0 0.0 0 0.0 1.3105661869049072 0.17357537150382996 0.21605448424816132 -0.5195165872573853 0.8544266819953918 -0.0 0.42852169275283813 0.6030383110046387 0 1.0 0 0.0 0 0.0 0 0.0 1.3183887004852295 0.17791959643363953 0.21605448424816132 -0.4528946876525879 0.8915371894836426 -0.0 0.43259984254837036 0.6073609590530396 0 1.0 0 0.0 0 0.0 0 0.0 -1.5033273696899414 -0.12299982458353043 -0.2839455306529999 -0.0003662221133708954 0.999969482421875 -0.0 0.04333144426345825 0.47333264350891113 0 1.0 0 0.0 0 0.0 0 0.0 -1.5072386264801025 -0.12289523333311081 0.21605446934700012 0.05456709489226341 0.9985045790672302 -0.0 0.5265249013900757 0.2786164879798889 0 1.0 0 0.0 0 0.0 0 0.0 -1.5033273696899414 -0.12299982458353043 0.21605446934700012 -0.0003662221133708954 0.999969482421875 -0.0 0.5295165181159973 0.2786363959312439 0 1.0 0 0.0 0 0.0 0 0.0 -0.023895978927612305 -0.11280328780412674 -0.2839455306529999 0.37705618143081665 0.9261757135391235 -0.0 0.989861011505127 0.5702477097511292 0 1.0 0 0.0 0 0.0 0 0.0 -0.026664018630981445 -0.11158344894647598 0.21605446934700012 0.4297921657562256 0.9028900861740112 -0.0 1.478442907333374 0.4126579165458679 0 1.0 0 0.0 0 0.0 0 0.0 -0.023895978927612305 -0.11280328780412674 0.21605446934700012 0.37705618143081665 0.9261757135391235 -0.0 1.4802451133728027 0.4109910726547241 0 1.0 0 0.0 0 0.0 0 0.0 -1.002187728881836 -0.15303850173950195 -0.2839455306529999 0.6915494203567505 -0.7223120927810669 -0.0 0.9810384511947632 0.44331806898117065 0 1.0 0 0.0 0 0.0 0 0.0 -0.9978787899017334 -0.148744136095047 0.21605446934700012 0.7195959091186523 -0.69435715675354 -0.0 0.6158398389816284 0.26952022314071655 0 1.0 0 0.0 0 0.0 0 0.0 -1.002187728881836 -0.15303850173950195 0.21605446934700012 0.6915494203567505 -0.7223120927810669 -0.0 0.6137987971305847 0.26391035318374634 0 1.0 0 0.0 0 0.0 0 0.0 0.029735803604125977 -0.11268772929906845 -0.2839455306529999 -0.3422955870628357 0.939573347568512 -0.0 0.9552810788154602 0.567670464515686 0 1.0 0 0.0 0 0.0 0 0.0 0.02600693702697754 -0.11393675953149796 0.21605446934700012 -0.2927945852279663 0.9561449289321899 -0.0 0.5130330324172974 0.40937238931655884 0 1.0 0 0.0 0 0.0 0 0.0 0.029735803604125977 -0.11268772929906845 0.21605446934700012 -0.3422650694847107 0.939573347568512 -0.0 0.5154080986976624 0.4110640287399292 0 1.0 0 0.0 0 0.0 0 0.0 -1.2001348733901978 -0.14893993735313416 -0.2839455306529999 -0.7076326608657837 -0.7065340280532837 -0.0 0.08885562419891357 0.4333972930908203 0 1.0 0 0.0 0 0.0 0 0.0 -1.1921335458755493 -0.15647423267364502 0.21605446934700012 -0.6614276766777039 -0.7499618530273438 -0.0 0.4703311324119568 0.24293971061706543 0 1.0 0 0.0 0 0.0 0 0.0 -1.2001348733901978 -0.14893993735313416 0.21605446934700012 -0.7076326608657837 -0.7065340280532837 -0.0 0.4652387797832489 0.2518855929374695 0 1.0 0 0.0 0 0.0 0 0.0 1.1790039539337158 -0.11511890590190887 -0.2839455306529999 0.8657185435295105 -0.5005035400390625 -0.0 0.9049659967422485 0.44851458072662354 0 1.0 0 0.0 0 0.0 0 0.0 1.183220386505127 -0.10738029330968857 0.21605446934700012 0.8894924521446228 -0.45689260959625244 -0.0 0.5869276523590088 0.31774646043777466 0 1.0 0 0.0 0 0.0 0 0.0 1.1790039539337158 -0.11511890590190887 0.21605446934700012 0.8657185435295105 -0.5005035400390625 -0.0 0.5854707956314087 0.30921435356140137 0 1.0 0 0.0 0 0.0 0 0.0 1.5285465717315674 0.17157110571861267 -0.2839455306529999 0.5530259013175964 0.8331248164176941 -0.0 0.9063416719436646 0.7466293573379517 0 1.0 0 0.0 0 0.0 0 0.0 1.5220859050750732 0.1755431890487671 0.21605448424816132 0.4920499324798584 0.8705404996871948 -0.0 0.5415668487548828 0.6013186573982239 0 1.0 0 0.0 0 0.0 0 0.0 1.5285465717315674 0.17157110571861267 0.21605448424816132 0.5530259013175964 0.8331248164176941 -0.0 0.5448878407478333 0.597155749797821 0 1.0 0 0.0 0 0.0 0 0.0 -1.325623869895935 -0.12997224926948547 -0.2839455306529999 0.9856868386268616 0.16852320730686188 -0.0 0.94827800989151 0.48277735710144043 0 1.0 0 0.0 0 0.0 0 0.0 -1.3263133764266968 -0.12555383145809174 0.21605446934700012 0.9898678660392761 0.14185002446174622 -0.0 0.6438645124435425 0.3257516026496887 0 1.0 0 0.0 0 0.0 0 0.0 -1.325623869895935 -0.12997224926948547 0.21605446934700012 0.9856868386268616 0.16852320730686188 -0.0 0.6448163986206055 0.32196974754333496 0 1.0 0 0.0 0 0.0 0 0.0 1.3105661869049072 0.17357537150382996 -0.2839455306529999 -0.5195165872573853 0.8544266819953918 -0.0 0.06582871079444885 0.7527941465377808 0 1.0 0 0.0 0 0.0 0 0.0 1.3033273220062256 0.1687738597393036 0.21605446934700012 -0.5868709087371826 0.8096560835838318 -0.0 0.4247434735298157 0.5983360409736633 0 1.0 0 0.0 0 0.0 0 0.0 1.3105661869049072 0.17357537150382996 0.21605448424816132 -0.5195165872573853 0.8544266819953918 -0.0 0.42852169275283813 0.6030383110046387 0 1.0 0 0.0 0 0.0 0 0.0 0.9974515438079834 -0.11051320284605026 -0.2839455306529999 0.4595782458782196 0.8881191611289978 -0.0 0.0033438801765441895 0.4505161643028259 0 1.0 0 0.0 0 0.0 0 0.0 0.9929563999176025 -0.10797744989395142 0.21605446934700012 0.522049605846405 0.8529008030891418 -0.0 0.46149224042892456 0.29107022285461426 0 1.0 0 0.0 0 0.0 0 0.0 0.9974515438079834 -0.11051320284605026 0.21605446934700012 0.4595782458782196 0.8881191611289978 -0.0 0.46464958786964417 0.2878061532974243 0 1.0 0 0.0 0 0.0 0 0.0 -1.648117184638977 -0.12588948011398315 -0.2839455306529999 -0.921933650970459 -0.3872798979282379 -0.0 0.11914879083633423 0.4643626809120178 0 1.0 0 0.0 0 0.0 0 0.0 -1.6451290845870972 -0.13234259188175201 0.21605446934700012 -0.8916593194007874 -0.4526505470275879 -0.0 0.43501198291778564 0.29271793365478516 0 1.0 0 0.0 0 0.0 0 0.0 -1.648117184638977 -0.12588948011398315 0.21605446934700012 -0.921933650970459 -0.3872798979282379 -0.0 0.4339945912361145 0.2996535301208496 0 1.0 0 0.0 0 0.0 0 0.0 -0.021020889282226562 -0.11387961357831955 -0.2839455306529999 0.3246864080429077 0.9457991123199463 -0.0 0.9880005121231079 0.5688133239746094 0 1.0 0 0.0 0 0.0 0 0.0 -0.023895978927612305 -0.11280328780412674 0.21605446934700012 0.37705618143081665 0.9261757135391235 -0.0 1.4802451133728027 0.4109910726547241 0 1.0 0 0.0 0 0.0 0 0.0 -0.021020889282226562 -0.11387961357831955 0.21605446934700012 0.3246864080429077 0.9457991123199463 -0.0 1.4821268320083618 0.409512996673584 0 1.0 0 0.0 0 0.0 0 0.0 -1.0066109895706177 -0.1571066677570343 -0.2839455306529999 0.6617023348808289 -0.7497482299804688 -0.0 0.983351469039917 0.4389737844467163 0 1.0 0 0.0 0 0.0 0 0.0 -1.002187728881836 -0.15303850173950195 0.21605446934700012 0.6915494203567505 -0.7223120927810669 -0.0 0.6137987971305847 0.26391035318374634 0 1.0 0 0.0 0 0.0 0 0.0 -1.0066109895706177 -0.1571066677570343 0.21605446934700012 0.6617023348808289 -0.7497482299804688 -0.0 0.6115951538085938 0.25851088762283325 0 1.0 0 0.0 0 0.0 0 0.0 1.06947660446167 -0.10820123553276062 -0.2839455306529999 -0.5766167044639587 0.8169804811477661 -0.0 0.9610819220542908 0.45160144567489624 0 1.0 0 0.0 0 0.0 0 0.0 1.0666964054107666 -0.11004011332988739 0.21605446934700012 -0.5260170102119446 0.8504592776298523 -0.0 0.5157464742660522 0.2879374027252197 0 1.0 0 0.0 0 0.0 0 0.0 1.06947660446167 -0.10820123553276062 0.21605446934700012 -0.5766472220420837 0.8169804811477661 -0.0 0.5177067518234253 0.29019415378570557 0 1.0 0 0.0 0 0.0 0 0.0 -0.1504817008972168 -0.11334571242332458 -0.2839455306529999 -0.9624622464179993 -0.2713705897331238 -0.0 0.06511396169662476 0.564522385597229 0 1.0 0 0.0 0 0.0 0 0.0 -0.1487255096435547 -0.11909829080104828 0.21605446934700012 -0.9493392705917358 -0.31418806314468384 -0.0 0.4047989249229431 0.4177280068397522 0 1.0 0 0.0 0 0.0 0 0.0 -0.1504817008972168 -0.11334571242332458 0.21605446934700012 -0.9624622464179993 -0.2713705897331238 -0.0 0.4043794870376587 0.424402117729187 0 1.0 0 0.0 0 0.0 0 0.0 -1.1921335458755493 -0.15647423267364502 -0.2839455306529999 -0.6614276766777039 -0.7499618530273438 -0.0 0.08416959643363953 0.4265134930610657 0 1.0 0 0.0 0 0.0 0 0.0 -1.183876872062683 -0.16329097747802734 0.21605446934700012 -0.6098818778991699 -0.7924436330795288 -0.0 0.4759005308151245 0.23481398820877075 0 1.0 0 0.0 0 0.0 0 0.0 -1.1921335458755493 -0.15647423267364502 0.21605446934700012 -0.6614276766777039 -0.7499618530273438 -0.0 0.4703311324119568 0.24293971061706543 0 1.0 0 0.0 0 0.0 0 0.0 1.5345737934112549 0.16726094484329224 -0.2839455306529999 0.6066164374351501 0.7949766516685486 -0.0 0.9031447768211365 0.740845263004303 0 1.0 0 0.0 0 0.0 0 0.0 1.5285465717315674 0.17157110571861267 0.21605448424816132 0.5530259013175964 0.8331248164176941 -0.0 0.5448878407478333 0.597155749797821 0 1.0 0 0.0 0 0.0 0 0.0 1.5345737934112549 0.16726094484329224 0.21605446934700012 0.6066164374351501 0.7949766516685486 -0.0 0.5479841232299805 0.5927216410636902 0 1.0 0 0.0 0 0.0 0 0.0 1.0666964054107666 -0.11004011332988739 -0.2839455306529999 -0.5260170102119446 0.8504592776298523 -0.0 0.9627474546432495 0.44964832067489624 0 1.0 0 0.0 0 0.0 0 0.0 1.0638139247894287 -0.11170385777950287 0.21605446934700012 -0.47331157326698303 0.8808557391166687 -0.0 0.5136916637420654 0.28588324785232544 0 1.0 0 0.0 0 0.0 0 0.0 1.0666964054107666 -0.11004011332988739 0.21605446934700012 -0.5260170102119446 0.8504592776298523 -0.0 0.5157464742660522 0.2879374027252197 0 1.0 0 0.0 0 0.0 0 0.0 -1.3248685598373413 -0.13403309881687164 -0.2839455306529999 0.9803460836410522 0.19721060991287231 -0.0 0.9481543302536011 0.47905391454696655 0 1.0 0 0.0 0 0.0 0 0.0 -1.325623869895935 -0.12997224926948547 0.21605446934700012 0.9856868386268616 0.16852320730686188 -0.0 0.6448163986206055 0.32196974754333496 0 1.0 0 0.0 0 0.0 0 0.0 -1.3248685598373413 -0.13403309881687164 0.21605446934700012 0.9803460836410522 0.19721060991287231 -0.0 0.6457487344741821 0.31858688592910767 0 1.0 0 0.0 0 0.0 0 0.0 1.3033273220062256 0.1687738597393036 -0.2839455306529999 -0.5868709087371826 0.8096560835838318 -0.0 0.06988972425460815 0.7464204430580139 0 1.0 0 0.0 0 0.0 0 0.0 1.2966725826263428 0.16351506114006042 0.21605446934700012 -0.6484267711639404 0.7612537145614624 -0.0 0.4212533235549927 0.593255877494812 0 1.0 0 0.0 0 0.0 0 0.0 1.3033273220062256 0.1687738597393036 0.21605446934700012 -0.5868709087371826 0.8096560835838318 -0.0 0.4247434735298157 0.5983360409736633 0 1.0 0 0.0 0 0.0 0 0.0 -1.6451290845870972 -0.13234259188175201 -0.2839455306529999 -0.8916593194007874 -0.4526505470275879 -0.0 0.11716088652610779 0.45843058824539185 0 1.0 0 0.0 0 0.0 0 0.0 -1.64168119430542 -0.13856706023216248 0.21605446934700012 -0.8568071722984314 -0.5155797004699707 -0.0 0.4363168179988861 0.2858927845954895 0 1.0 0 0.0 0 0.0 0 0.0 -1.6451290845870972 -0.13234259188175201 0.21605446934700012 -0.8916593194007874 -0.4526505470275879 -0.0 0.43501198291778564 0.29271793365478516 0 1.0 0 0.0 0 0.0 0 0.0 -0.01803874969482422 -0.11481243371963501 -0.2839455306529999 0.27314066886901855 0.9619433879852295 -0.0 0.9860718846321106 0.5675491690635681 0 1.0 0 0.0 0 0.0 0 0.0 -0.021020889282226562 -0.11387961357831955 0.21605446934700012 0.3246864080429077 0.9457991123199463 -0.0 1.4821268320083618 0.409512996673584 0 1.0 0 0.0 0 0.0 0 0.0 -0.01803874969482422 -0.11481243371963501 0.21605446934700012 0.27311015129089355 0.9619739651679993 -0.0 1.484087347984314 0.40822577476501465 0 1.0 0 0.0 0 0.0 0 0.0 -1.0111485719680786 -0.16094860434532166 -0.2839455306529999 0.6300546526908875 -0.7765129804611206 -0.0 0.9857213497161865 0.4348520040512085 0 1.0 0 0.0 0 0.0 0 0.0 -1.0066109895706177 -0.1571066677570343 0.21605446934700012 0.6617023348808289 -0.7497482299804688 -0.0 0.6115951538085938 0.25851088762283325 0 1.0 0 0.0 0 0.0 0 0.0 -1.0111485719680786 -0.16094860434532166 0.21605446934700012 0.6300546526908875 -0.7765129804611206 -0.0 0.6092228889465332 0.25332319736480713 0 1.0 0 0.0 0 0.0 0 0.0 0.02600693702697754 -0.11393675953149796 -0.2839455306529999 -0.2928251028060913 0.9561449289321899 -0.0 0.9576817154884338 0.5663930773735046 0 1.0 0 0.0 0 0.0 0 0.0 0.022205114364624023 -0.1149936318397522 0.21605446934700012 -0.24289681017398834 0.9700308442115784 -0.0 0.5105903148651123 0.40793150663375854 0 1.0 0 0.0 0 0.0 0 0.0 0.02600693702697754 -0.11393675953149796 0.21605446934700012 -0.2927945852279663 0.9561449289321899 -0.0 0.5130330324172974 0.40937238931655884 0 1.0 0 0.0 0 0.0 0 0.0 1.0021021366119385 -0.1127108559012413 -0.2839455306529999 0.39429914951324463 0.9189733266830444 -0.0 0.0006244778633117676 0.4479961395263672 0 1.0 0 0.0 0 0.0 0 0.0 0.9974515438079834 -0.11051320284605026 0.21605446934700012 0.4595782458782196 0.8881191611289978 -0.0 0.46464958786964417 0.2878061532974243 0 1.0 0 0.0 0 0.0 0 0.0 1.0021021366119385 -0.1127108559012413 0.21605446934700012 0.39429914951324463 0.9189733266830444 -0.0 0.4679713547229767 0.28495705127716064 0 1.0 0 0.0 0 0.0 0 0.0 1.5402801036834717 0.16261997818946838 -0.2839455306529999 0.6549577116966248 0.7556383013725281 -0.0 0.9002732038497925 0.7348307967185974 0 1.0 0 0.0 0 0.0 0 0.0 1.5345737934112549 0.16726094484329224 0.21605446934700012 0.6066164374351501 0.7949766516685486 -0.0 0.5479841232299805 0.5927216410636902 0 1.0 0 0.0 0 0.0 0 0.0 1.5402801036834717 0.16261997818946838 0.21605446934700012 0.6549577116966248 0.7556383013725281 -0.0 0.5509166121482849 0.5880075693130493 0 1.0 0 0.0 0 0.0 0 0.0 -1.0158004760742188 -0.1645643413066864 -0.2839455306529999 0.5967284440994263 -0.8024231791496277 -0.0 0.9881497621536255 0.4309505224227905 0 1.0 0 0.0 0 0.0 0 0.0 -1.0111485719680786 -0.16094860434532166 0.21605446934700012 0.6300546526908875 -0.7765129804611206 -0.0 0.6092228889465332 0.25332319736480713 0 1.0 0 0.0 0 0.0 0 0.0 -1.0158004760742188 -0.1645643413066864 0.21605446934700012 0.5967284440994263 -0.8024231791496277 -0.0 0.6066759824752808 0.24834954738616943 0 1.0 0 0.0 0 0.0 0 0.0 0.8773789405822754 -0.1112854853272438 -0.2839455306529999 -0.8742942810058594 -0.4853358566761017 -0.0 0.06675374507904053 0.4581591486930847 0 1.0 0 0.0 0 0.0 0 0.0 0.8827424049377441 -0.12030474841594696 0.21605446934700012 -0.843745231628418 -0.5366985201835632 -0.0 0.3912193775177002 0.3077763319015503 0 1.0 0 0.0 0 0.0 0 0.0 0.8773789405822754 -0.1112854853272438 0.21605446934700012 -0.8742942810058594 -0.4853358566761017 -0.0 0.3894132971763611 0.3180522322654724 0 1.0 0 0.0 0 0.0 0 0.0 -1.3240233659744263 -0.13793829083442688 -0.2839455306529999 0.9746391177177429 0.22376170754432678 -0.0 0.947985827922821 0.47552597522735596 0 1.0 0 0.0 0 0.0 0 0.0 -1.3248685598373413 -0.13403309881687164 0.21605446934700012 0.9803460836410522 0.19721060991287231 -0.0 0.6457487344741821 0.31858688592910767 0 1.0 0 0.0 0 0.0 0 0.0 -1.3240233659744263 -0.13793829083442688 0.21605446934700012 0.9746086001396179 0.22376170754432678 -0.0 0.6467007398605347 0.3154236078262329 0 1.0 0 0.0 0 0.0 0 0.0 1.2966725826263428 0.16351506114006042 -0.2839455306529999 -0.6484267711639404 0.7612537145614624 -0.0 0.07341435551643372 0.7397623658180237 0 1.0 0 0.0 0 0.0 0 0.0 1.290574312210083 0.15792062878608704 0.21605446934700012 -0.6993011236190796 0.7147740125656128 -0.0 0.41803431510925293 0.5878973007202148 0 1.0 0 0.0 0 0.0 0 0.0 1.2966725826263428 0.16351506114006042 0.21605446934700012 -0.6484267711639404 0.7612537145614624 -0.0 0.4212533235549927 0.593255877494812 0 1.0 0 0.0 0 0.0 0 0.0 -1.183876872062683 -0.16329097747802734 -0.2839455306529999 -0.6098818778991699 -0.7924436330795288 -0.0 0.07939448952674866 0.42037463188171387 0 1.0 0 0.0 0 0.0 0 0.0 -1.1753647327423096 -0.16939017176628113 0.21605446934700012 -0.5531174540519714 -0.8330637812614441 -0.0 0.48195916414260864 0.22752833366394043 0 1.0 0 0.0 0 0.0 0 0.0 -1.183876872062683 -0.16329097747802734 0.21605446934700012 -0.6098818778991699 -0.7924436330795288 -0.0 0.4759005308151245 0.23481398820877075 0 1.0 0 0.0 0 0.0 0 0.0 -0.014949560165405273 -0.11560174077749252 -0.2839455306529999 0.2228461503982544 0.9748222231864929 -0.0 0.9840749502182007 0.5664546489715576 0 1.0 0 0.0 0 0.0 0 0.0 -0.01803874969482422 -0.11481243371963501 0.21605446934700012 0.27311015129089355 0.9619739651679993 -0.0 1.484087347984314 0.40822577476501465 0 1.0 0 0.0 0 0.0 0 0.0 -0.014949560165405273 -0.11560174077749252 0.21605446934700012 0.2228461503982544 0.9748222231864929 -0.0 0.48612532019615173 0.40713149309158325 0 1.0 0 0.0 0 0.0 0 0.0 1.0638139247894287 -0.11170385777950287 -0.2839455306529999 -0.47331157326698303 0.8808557391166687 -0.0 0.964465856552124 0.44788867235183716 0 1.0 0 0.0 0 0.0 0 0.0 1.0608294010162354 -0.11319247633218765 0.21605446934700012 -0.4191106855869293 0.9078951478004456 -0.0 0.5115428566932678 0.2840333580970764 0 1.0 0 0.0 0 0.0 0 0.0 1.0638139247894287 -0.11170385777950287 0.21605446934700012 -0.47331157326698303 0.8808557391166687 -0.0 0.5136916637420654 0.28588324785232544 0 1.0 0 0.0 0 0.0 0 0.0 -1.3230637311935425 -0.14188969135284424 -0.2839455306529999 0.9688100814819336 0.24771873652935028 -0.0 0.9477726221084595 0.4720093607902527 0 1.0 0 0.0 0 0.0 0 0.0 -1.3240233659744263 -0.13793829083442688 0.21605446934700012 0.9746086001396179 0.22376170754432678 -0.0 0.6467007398605347 0.3154236078262329 0 1.0 0 0.0 0 0.0 0 0.0 -1.3230637311935425 -0.14188969135284424 0.21605446934700012 0.9688100814819336 0.24771873652935028 -0.0 0.6477121114730835 0.31230872869491577 0 1.0 0 0.0 0 0.0 0 0.0 0.022205114364624023 -0.1149936318397522 -0.2839455306529999 -0.24289681017398834 0.9700308442115784 -0.0 0.9601279497146606 0.5653409957885742 0 1.0 0 0.0 0 0.0 0 0.0 0.01833033561706543 -0.11585834622383118 0.21605446934700012 -0.19290749728679657 0.9812005758285522 -0.0 0.5080812573432922 0.40674519538879395 0 1.0 0 0.0 0 0.0 0 0.0 0.022205114364624023 -0.1149936318397522 0.21605446934700012 -0.24289681017398834 0.9700308442115784 -0.0 0.5105903148651123 0.40793150663375854 0 1.0 0 0.0 0 0.0 0 0.0 -1.64168119430542 -0.13856706023216248 -0.2839455306529999 -0.8568071722984314 -0.5155797004699707 -0.0 0.11499348282814026 0.45273905992507935 0 1.0 0 0.0 0 0.0 0 0.0 -1.6377736330032349 -0.14456287026405334 0.21605446934700012 -0.8179876208305359 -0.575182318687439 -0.0 0.4379253089427948 0.27917128801345825 0 1.0 0 0.0 0 0.0 0 0.0 -1.64168119430542 -0.13856706023216248 0.21605446934700012 -0.8568071722984314 -0.5155797004699707 -0.0 0.4363168179988861 0.2858927845954895 0 1.0 0 0.0 0 0.0 0 0.0 1.5456655025482178 0.1576482057571411 -0.2839455306529999 0.7010712027549744 0.713064968585968 -0.0 0.8977097272872925 0.7285913228988647 0 1.0 0 0.0 0 0.0 0 0.0 1.5402801036834717 0.16261997818946838 0.21605446934700012 0.6549577116966248 0.7556383013725281 -0.0 0.5509166121482849 0.5880075693130493 0 1.0 0 0.0 0 0.0 0 0.0 1.5456655025482178 0.1576482057571411 0.21605446934700012 0.7010712027549744 0.713064968585968 -0.0 0.5536909103393555 0.583011269569397 0 1.0 0 0.0 0 0.0 0 0.0 -1.020566701889038 -0.16795386373996735 -0.2839455306529999 0.5618457794189453 -0.8272347450256348 -0.0 0.9906381964683533 0.4272674322128296 0 1.0 0 0.0 0 0.0 0 0.0 -1.0158004760742188 -0.1645643413066864 0.21605446934700012 0.5967284440994263 -0.8024231791496277 -0.0 0.6066759824752808 0.24834954738616943 0 1.0 0 0.0 0 0.0 0 0.0 -1.020566701889038 -0.16795386373996735 0.21605446934700012 0.5618457794189453 -0.8272347450256348 -0.0 0.6039486527442932 0.24359291791915894 0 1.0 0 0.0 0 0.0 0 0.0 1.290574312210083 0.15792062878608704 -0.2839455306529999 -0.6993011236190796 0.7147740125656128 -0.0 0.07646352052688599 0.7329279184341431 0 1.0 0 0.0 0 0.0 0 0.0 1.2850067615509033 0.15211209654808044 0.21605446934700012 -0.7448957562446594 0.6671346426010132 -0.0 0.4150726795196533 0.582361102104187 0 1.0 0 0.0 0 0.0 0 0.0 1.290574312210083 0.15792062878608704 0.21605446934700012 -0.6993011236190796 0.7147740125656128 -0.0 0.41803431510925293 0.5878973007202148 0 1.0 0 0.0 0 0.0 0 0.0 1.0069084167480469 -0.11457040905952454 -0.2839455306529999 0.3271889388561249 0.9449446201324463 -0.0 0.9978166818618774 0.4458499550819397 0 1.0 0 0.0 0 0.0 0 0.0 1.0021021366119385 -0.1127108559012413 0.21605446934700012 0.39429914951324463 0.9189733266830444 -0.0 1.4679713249206543 0.28495705127716064 0 1.0 0 0.0 0 0.0 0 0.0 1.0069084167480469 -0.11457040905952454 0.21605446934700012 0.3271889388561249 0.9449446201324463 -0.0 1.4714545011520386 0.2825276851654053 0 1.0 0 0.0 0 0.0 0 0.0 -0.011753320693969727 -0.11624753475189209 -0.2839455306529999 0.1742301732301712 0.9846796989440918 -0.0 0.982009768486023 0.5655289888381958 0 1.0 0 0.0 0 0.0 0 0.0 -0.014949560165405273 -0.11560174077749252 0.21605446934700012 0.2228461503982544 0.9748222231864929 -0.0 0.48612532019615173 0.40713149309158325 0 1.0 0 0.0 0 0.0 0 0.0 -0.011753320693969727 -0.11624753475189209 0.21605446934700012 0.1742301732301712 0.9846796989440918 -0.0 0.48823946714401245 0.4062318801879883 0 1.0 0 0.0 0 0.0 0 0.0 -1.0254472494125366 -0.1711171716451645 -0.2839455306529999 0.5254982113838196 -0.8507645130157471 -0.0 0.9931881427764893 0.4238011837005615 0 1.0 0 0.0 0 0.0 0 0.0 -1.020566701889038 -0.16795386373996735 0.21605446934700012 0.5618457794189453 -0.8272347450256348 -0.0 0.6039486527442932 0.24359291791915894 0 1.0 0 0.0 0 0.0 0 0.0 -1.0254472494125366 -0.1711171716451645 0.21605445444583893 0.5254982113838196 -0.8507645130157471 -0.0 0.6010351181030273 0.23905706405639648 0 1.0 0 0.0 0 0.0 0 0.0 1.0608294010162354 -0.11319247633218765 -0.2839455306529999 -0.4191106855869293 0.9079256653785706 -0.0 0.9662376642227173 0.44632160663604736 0 1.0 0 0.0 0 0.0 0 0.0 1.0577425956726074 -0.11450596153736115 0.21605446934700012 -0.3640247881412506 0.9313638806343079 -0.0 0.5093002319335938 0.28238970041275024 0 1.0 0 0.0 0 0.0 0 0.0 1.0608294010162354 -0.11319247633218765 0.21605446934700012 -0.4191106855869293 0.9078951478004456 -0.0 0.5115428566932678 0.2840333580970764 0 1.0 0 0.0 0 0.0 0 0.0 0.01833033561706543 -0.11585834622383118 -0.2839455306529999 -0.19293801486492157 0.9812005758285522 -0.0 0.9626204967498779 0.5645154714584351 0 1.0 0 0.0 0 0.0 0 0.0 0.014382600784301758 -0.1165309026837349 0.21605446934700012 -0.143314927816391 0.9896542429924011 -0.0 0.50550776720047 0.4058172106742859 0 1.0 0 0.0 0 0.0 0 0.0 0.01833033561706543 -0.11585834622383118 0.21605446934700012 -0.19290749728679657 0.9812005758285522 -0.0 0.5080812573432922 0.40674519538879395 0 1.0 0 0.0 0 0.0 0 0.0 -1.1753647327423096 -0.16939017176628113 -0.2839455306529999 -0.5531174540519714 -0.8330637812614441 -0.0 0.07452532649040222 0.4149724841117859 0 1.0 0 0.0 0 0.0 0 0.0 -1.1665972471237183 -0.17477181553840637 0.21605445444583893 -0.491470068693161 -0.8708761930465698 -0.0 0.48851171135902405 0.22110700607299805 0 1.0 0 0.0 0 0.0 0 0.0 -1.1753647327423096 -0.16939017176628113 0.21605446934700012 -0.5531174540519714 -0.8330637812614441 -0.0 0.48195916414260864 0.22752833366394043 0 1.0 0 0.0 0 0.0 0 0.0 1.5507299900054932 0.15234562754631042 -0.2839455306529999 0.7444074749946594 0.6676839590072632 -0.0 0.8954375982284546 0.7221292853355408 0 1.0 0 0.0 0 0.0 0 0.0 1.5456655025482178 0.1576482057571411 0.21605446934700012 0.7010712027549744 0.713064968585968 -0.0 0.5536909103393555 0.583011269569397 0 1.0 0 0.0 0 0.0 0 0.0 1.5507299900054932 0.15234562754631042 0.21605446934700012 0.7444074749946594 0.6676839590072632 -0.0 0.5563123226165771 0.5777289867401123 0 1.0 0 0.0 0 0.0 0 0.0 1.0577425956726074 -0.11450596153736115 -0.2839455306529999 -0.3640247881412506 0.9313638806343079 -0.0 0.9680637121200562 0.4449465274810791 0 1.0 0 0.0 0 0.0 0 0.0 1.054553747177124 -0.11564431339502335 0.21605446934700012 -0.3086642026901245 0.9511398673057556 -0.0 0.506964921951294 0.2809547185897827 0 1.0 0 0.0 0 0.0 0 0.0 1.0577425956726074 -0.11450596153736115 0.21605446934700012 -0.3640247881412506 0.9313638806343079 -0.0 0.5093002319335938 0.28238970041275024 0 1.0 0 0.0 0 0.0 0 0.0 -1.321989893913269 -0.14588730037212372 -0.2839455306529999 0.9626453518867493 0.2706686556339264 -0.0 0.9475157260894775 0.46850723028182983 0 1.0 0 0.0 0 0.0 0 0.0 -1.3230637311935425 -0.14188969135284424 0.21605446934700012 0.9688100814819336 0.24771873652935028 -0.0 0.6477121114730835 0.31230872869491577 0 1.0 0 0.0 0 0.0 0 0.0 -1.321989893913269 -0.14588730037212372 0.21605446934700012 0.9626453518867493 0.2706686556339264 -0.0 0.6487820148468018 0.3092452883720398 0 1.0 0 0.0 0 0.0 0 0.0 1.5554730892181396 0.14671224355697632 -0.2839455306529999 0.7844783067703247 0.6201055645942688 -0.0 0.8934417963027954 0.7154445648193359 0 1.0 0 0.0 0 0.0 0 0.0 1.5507299900054932 0.15234562754631042 0.21605446934700012 0.7444074749946594 0.6676839590072632 -0.0 0.5563123226165771 0.5777289867401123 0 1.0 0 0.0 0 0.0 0 0.0 1.5554730892181396 0.14671224355697632 0.21605446934700012 0.7844783067703247 0.6201055645942688 -0.0 0.5587857961654663 0.5721555948257446 0 1.0 0 0.0 0 0.0 0 0.0 -0.008450031280517578 -0.1167498230934143 -0.2839455306529999 0.1275063306093216 0.9918210506439209 -0.0 0.9798762798309326 0.5647714138031006 0 1.0 0 0.0 0 0.0 0 0.0 -0.011753320693969727 -0.11624753475189209 0.21605446934700012 0.1742301732301712 0.9846796989440918 -0.0 0.48823946714401245 0.4062318801879883 0 1.0 0 0.0 0 0.0 0 0.0 -0.008450031280517578 -0.1167498230934143 0.21605446934700012 0.1275063306093216 0.9918210506439209 -0.0 0.4904281795024872 0.4055290222167969 0 1.0 0 0.0 0 0.0 0 0.0 -1.0304421186447144 -0.17405426502227783 -0.2839455306529999 0.48789942264556885 -0.8728904128074646 -0.0 0.9958009719848633 0.4205503463745117 0 1.0 0 0.0 0 0.0 0 0.0 -1.0254472494125366 -0.1711171716451645 0.21605445444583893 0.5254982113838196 -0.8507645130157471 -0.0 0.6010351181030273 0.23905706405639648 0 1.0 0 0.0 0 0.0 0 0.0 -1.0304421186447144 -0.17405426502227783 0.21605445444583893 0.48786890506744385 -0.8728904128074646 -0.0 0.5979301333427429 0.23474663496017456 0 1.0 0 0.0 0 0.0 0 0.0 -1.4217404127120972 -0.1473163217306137 -0.2839455306529999 0.6773888468742371 -0.7355876564979553 -0.0 0.9960373640060425 0.4553300738334656 0 1.0 0 0.0 0 0.0 0 0.0 -1.4175130128860474 -0.14331506192684174 0.21605446934700012 0.6873989105224609 -0.7262489795684814 -0.0 0.5948898792266846 0.2739698886871338 0 1.0 0 0.0 0 0.0 0 0.0 -1.4217404127120972 -0.1473163217306137 0.21605446934700012 0.6773888468742371 -0.7355876564979553 -0.0 0.5925045013427734 0.26866674423217773 0 1.0 0 0.0 0 0.0 0 0.0 1.2850067615509033 0.15211209654808044 -0.2839455306529999 -0.7448957562446594 0.6671346426010132 -0.0 0.07909286022186279 0.7260227799415588 0 1.0 0 0.0 0 0.0 0 0.0 1.2799692153930664 0.14608952403068542 0.21605446934700012 -0.7892391681671143 0.6140323877334595 -0.0 0.41235947608947754 0.5766454935073853 0 1.0 0 0.0 0 0.0 0 0.0 1.2850067615509033 0.15211209654808044 0.21605446934700012 -0.7448957562446594 0.6671346426010132 -0.0 0.4150726795196533 0.582361102104187 0 1.0 0 0.0 0 0.0 0 0.0 0.014382600784301758 -0.1165309026837349 -0.2839455306529999 -0.143314927816391 0.9896542429924011 -0.0 0.9651601314544678 0.5639175772666931 0 1.0 0 0.0 0 0.0 0 0.0 0.010361909866333008 -0.11701130121946335 0.21605446934700012 -0.09445478767156601 0.9955137968063354 -0.0 0.5028718709945679 0.4051510691642761 0 1.0 0 0.0 0 0.0 0 0.0 0.014382600784301758 -0.1165309026837349 0.21605446934700012 -0.143314927816391 0.9896542429924011 -0.0 0.50550776720047 0.4058172106742859 0 1.0 0 0.0 0 0.0 0 0.0 1.0118703842163086 -0.11609186232089996 -0.2839455306529999 0.2593768239021301 0.965758204460144 -0.0 0.9949193596839905 0.4440760612487793 0 1.0 0 0.0 0 0.0 0 0.0 1.0069084167480469 -0.11457040905952454 0.21605446934700012 0.3271889388561249 0.9449446201324463 -0.0 1.4714545011520386 0.2825276851654053 0 1.0 0 0.0 0 0.0 0 0.0 1.0118703842163086 -0.11609186232089996 0.21605446934700012 0.2593768239021301 0.965758204460144 -0.0 1.4750945568084717 0.28052353858947754 0 1.0 0 0.0 0 0.0 0 0.0 -1.4175130128860474 -0.14331506192684174 -0.2839455306529999 -0.939817488193512 -0.3415936827659607 -0.0 0.993724524974823 0.45980244874954224 0 1.0 0 0.0 0 0.0 0 0.0 -1.4173282384872437 -0.14382342994213104 0.21605446934700012 -0.9425031542778015 -0.3341471552848816 -0.0 0.595079779624939 0.27352941036224365 0 1.0 0 0.0 0 0.0 0 0.0 -1.4175130128860474 -0.14331506192684174 0.21605446934700012 -0.939817488193512 -0.3415936827659607 -0.0 0.5948898792266846 0.2739698886871338 0 1.0 0 0.0 0 0.0 0 0.0 -1.0355515480041504 -0.17676514387130737 0.21605443954467773 0.4513382315635681 -0.8923307061195374 -0.0 0.5946286916732788 0.2306671142578125 0 1.0 0 0.0 0 0.0 0 0.0 -1.0304421186447144 -0.17405426502227783 -0.2839455306529999 0.48789942264556885 -0.8728904128074646 -0.0 0.9958009719848633 0.4205503463745117 0 1.0 0 0.0 0 0.0 0 0.0 -1.0304421186447144 -0.17405426502227783 0.21605445444583893 0.48786890506744385 -0.8728904128074646 -0.0 0.5979301333427429 0.23474663496017456 0 1.0 0 0.0 0 0.0 0 0.0 -1.1665972471237183 -0.17477181553840637 -0.2839455306529999 -0.491470068693161 -0.8708761930465698 -0.0 0.06955760717391968 0.41030001640319824 0 1.0 0 0.0 0 0.0 0 0.0 -1.1575742959976196 -0.17943590879440308 0.21605445444583893 -0.42558062076568604 -0.904904305934906 -0.0 0.49555355310440063 0.2155786156654358 0 1.0 0 0.0 0 0.0 0 0.0 -1.1665972471237183 -0.17477181553840637 0.21605445444583893 -0.491470068693161 -0.8708761930465698 -0.0 0.48851171135902405 0.22110700607299805 0 1.0 0 0.0 0 0.0 0 0.0 1.174483299255371 -0.12249995768070221 -0.2839455306529999 0.8388012051582336 -0.5444197058677673 -0.0 0.9075202941894531 0.4414207935333252 0 1.0 0 0.0 0 0.0 0 0.0 1.1790039539337158 -0.11511890590190887 0.21605446934700012 0.8657185435295105 -0.5005035400390625 -0.0 0.5854707956314087 0.30921435356140137 0 1.0 0 0.0 0 0.0 0 0.0 1.174483299255371 -0.12249995768070221 0.21605446934700012 0.8388012051582336 -0.5444197058677673 -0.0 0.5837835669517517 0.3009667992591858 0 1.0 0 0.0 0 0.0 0 0.0 -1.4173282384872437 -0.14382342994213104 -0.2839455306529999 -0.9425031542778015 -0.3341471552848816 -0.0 0.9936280846595764 0.4593122601509094 0 1.0 0 0.0 0 0.0 0 0.0 -1.4171239137649536 -0.1444144994020462 0.21605446934700012 -0.9470503926277161 -0.32102420926094055 -0.0 0.5952936410903931 0.27301520109176636 0 1.0 0 0.0 0 0.0 0 0.0 -1.4173282384872437 -0.14382342994213104 0.21605446934700012 -0.9425031542778015 -0.3341471552848816 -0.0 0.595079779624939 0.27352941036224365 0 1.0 0 0.0 0 0.0 0 0.0 1.5598952770233154 0.1407480537891388 -0.2839455306529999 0.8209478855133057 0.5709707736968994 -0.0 0.8917075395584106 0.708534300327301 0 1.0 0 0.0 0 0.0 0 0.0 1.5554730892181396 0.14671224355697632 0.21605446934700012 0.7844783067703247 0.6201055645942688 -0.0 0.5587857961654663 0.5721555948257446 0 1.0 0 0.0 0 0.0 0 0.0 1.5598952770233154 0.1407480537891388 0.21605446934700012 0.8209478855133057 0.5709707736968994 -0.0 0.561116635799408 0.5662844777107239 0 1.0 0 0.0 0 0.0 0 0.0 -0.00503993034362793 -0.11710859835147858 -0.2839455306529999 0.08285775035619736 0.9965513944625854 -0.0 0.9776747822761536 0.5641809701919556 0 1.0 0 0.0 0 0.0 0 0.0 -0.008450031280517578 -0.1167498230934143 0.21605446934700012 0.1275063306093216 0.9918210506439209 -0.0 0.4904281795024872 0.4055290222167969 0 1.0 0 0.0 0 0.0 0 0.0 -0.00503993034362793 -0.11710859835147858 0.21605446934700012 0.08285775035619736 0.9965513944625854 -0.0 0.4926895201206207 0.40502452850341797 0 1.0 0 0.0 0 0.0 0 0.0 1.054553747177124 -0.11564431339502335 -0.2839455306529999 -0.3086642026901245 0.9511398673057556 -0.0 0.9699445366859436 0.44376295804977417 0 1.0 0 0.0 0 0.0 0 0.0 1.051262617111206 -0.11660753190517426 0.21605446934700012 -0.2536393404006958 0.9672841429710388 -0.0 0.5045377612113953 0.2797309160232544 0 1.0 0 0.0 0 0.0 0 0.0 1.054553747177124 -0.11564431339502335 0.21605446934700012 -0.3086642026901245 0.9511398673057556 -0.0 0.506964921951294 0.2809547185897827 0 1.0 0 0.0 0 0.0 0 0.0 1.2799692153930664 0.14608952403068542 -0.2839455306529999 -0.7892391681671143 0.6140323877334595 -0.0 0.08133089542388916 0.7190530300140381 0 1.0 0 0.0 0 0.0 0 0.0 1.2754619121551514 0.13985291123390198 0.21605446934700012 -0.8313852548599243 0.5556504726409912 -0.0 0.4098869264125824 0.5707464218139648 0 1.0 0 0.0 0 0.0 0 0.0 1.2799692153930664 0.14608952403068542 0.21605446934700012 -0.7892391681671143 0.6140323877334595 -0.0 0.41235947608947754 0.5766454935073853 0 1.0 0 0.0 0 0.0 0 0.0 0.010361909866333008 -0.11701130121946335 -0.2839455306529999 -0.09445478767156601 0.9955137968063354 -0.0 0.9677476286888123 0.5635481476783752 0 1.0 0 0.0 0 0.0 0 0.0 0.00626826286315918 -0.11729954183101654 0.21605446934700012 -0.04663228243589401 0.9989013075828552 -0.0 0.5001758337020874 0.4047499895095825 0 1.0 0 0.0 0 0.0 0 0.0 0.010361909866333008 -0.11701130121946335 0.21605446934700012 -0.09445478767156601 0.9955137968063354 -0.0 0.5028718709945679 0.4051510691642761 0 1.0 0 0.0 0 0.0 0 0.0 -1.4171239137649536 -0.1444144994020462 -0.2839455306529999 -0.9470503926277161 -0.32102420926094055 -0.0 0.9935218095779419 0.4587423801422119 0 1.0 0 0.0 0 0.0 0 0.0 -1.4169000387191772 -0.14508827030658722 0.21605446934700012 -0.9504989981651306 -0.3106784224510193 -0.0 0.5955314636230469 0.27242761850357056 0 1.0 0 0.0 0 0.0 0 0.0 -1.4171239137649536 -0.1444144994020462 0.21605446934700012 -0.9470503926277161 -0.32102420926094055 -0.0 0.5952936410903931 0.27301520109176636 0 1.0 0 0.0 0 0.0 0 0.0 -1.0407215356826782 -0.1792546957731247 -0.2839455306529999 0.41798150539398193 -0.9084444642066956 -0.0 1.0011929273605347 0.41469377279281616 0 1.0 0 0.0 0 0.0 0 0.0 -1.0355515480041504 -0.17676514387130737 0.21605443954467773 0.4513382315635681 -0.8923307061195374 -0.0 0.5946286916732788 0.2306671142578125 0 1.0 0 0.0 0 0.0 0 0.0 -1.0407215356826782 -0.1792546957731247 0.21605445444583893 0.41798150539398193 -0.9084444642066956 -0.0 0.5911673903465271 0.22683840990066528 0 1.0 0 0.0 0 0.0 0 0.0 1.0169880390167236 -0.11727521568536758 -0.2839455306529999 0.19186986982822418 0.9814141988754272 -0.0 0.9919314384460449 0.4426735043525696 0 1.0 0 0.0 0 0.0 0 0.0 1.0118703842163086 -0.11609186232089996 0.21605446934700012 0.2593768239021301 0.965758204460144 -0.0 1.4750945568084717 0.28052353858947754 0 1.0 0 0.0 0 0.0 0 0.0 1.0169880390167236 -0.11727521568536758 0.21605446934700012 0.19186986982822418 0.9814141988754272 -0.0 1.4788858890533447 0.2789512276649475 0 1.0 0 0.0 0 0.0 0 0.0 -1.6377736330032349 -0.14456287026405334 -0.2839455306529999 -0.8179876208305359 -0.575182318687439 -0.0 0.11264124512672424 0.4472789764404297 0 1.0 0 0.0 0 0.0 0 0.0 -1.6334062814712524 -0.15033003687858582 0.21605446934700012 -0.7759636044502258 -0.6307260394096375 -0.0 0.43985608220100403 0.2725491523742676 0 1.0 0 0.0 0 0.0 0 0.0 -1.6377736330032349 -0.14456287026405334 0.21605446934700012 -0.8179876208305359 -0.575182318687439 -0.0 0.4379253089427948 0.27917128801345825 0 1.0 0 0.0 0 0.0 0 0.0 1.5639960765838623 0.13445305824279785 -0.2839455306529999 0.8536027073860168 0.520889937877655 -0.0 0.8902221322059631 0.7013939619064331 0 1.0 0 0.0 0 0.0 0 0.0 1.5598952770233154 0.1407480537891388 0.21605446934700012 0.8209478855133057 0.5709707736968994 -0.0 0.561116635799408 0.5662844777107239 0 1.0 0 0.0 0 0.0 0 0.0 1.5639960765838623 0.13445305824279785 0.21605446934700012 0.8536027073860168 0.520889937877655 -0.0 0.5633092522621155 0.5601080656051636 0 1.0 0 0.0 0 0.0 0 0.0 -0.0015227794647216797 -0.1173238605260849 -0.2839455306529999 0.04043702408671379 0.999176025390625 -0.0 0.9754053354263306 0.5637564659118652 0 1.0 0 0.0 0 0.0 0 0.0 -0.00503993034362793 -0.11710859835147858 0.21605446934700012 0.08285775035619736 0.9965513944625854 -0.0 0.4926895201206207 0.40502452850341797 0 1.0 0 0.0 0 0.0 0 0.0 -0.0015227794647216797 -0.1173238605260849 0.21605446934700012 0.04043702408671379 0.999176025390625 -0.0 0.4950215816497803 0.4047200679779053 0 1.0 0 0.0 0 0.0 0 0.0 -1.0458989143371582 -0.1815277487039566 -0.2839455306529999 0.38541826605796814 -0.922727108001709 -0.0 1.0039174556732178 0.41209107637405396 0 1.0 0 0.0 0 0.0 0 0.0 -1.0407215356826782 -0.1792546957731247 0.21605445444583893 0.41798150539398193 -0.9084444642066956 -0.0 0.5911673903465271 0.22683840990066528 0 1.0 0 0.0 0 0.0 0 0.0 -1.0458989143371582 -0.1815277487039566 0.21605445444583893 0.38541826605796814 -0.922727108001709 -0.0 0.5875861644744873 0.22327786684036255 0 1.0 0 0.0 0 0.0 0 0.0 1.051262617111206 -0.11660753190517426 -0.2839455306529999 -0.2536393404006958 0.9672841429710388 -0.0 0.9718810319900513 0.44277089834213257 0 1.0 0 0.0 0 0.0 0 0.0 1.0478694438934326 -0.11739562451839447 0.21605446934700012 -0.19953002035617828 0.9798578023910522 -0.0 0.5020204186439514 0.2787216305732727 0 1.0 0 0.0 0 0.0 0 0.0 1.051262617111206 -0.11660753190517426 0.21605446934700012 -0.2536393404006958 0.9672841429710388 -0.0 0.5045377612113953 0.2797309160232544 0 1.0 0 0.0 0 0.0 0 0.0 1.2754619121551514 0.13985291123390198 -0.2839455306529999 -0.8313852548599243 0.5556504726409912 -0.0 0.08320233225822449 0.7120205163955688 0 1.0 0 0.0 0 0.0 0 0.0 1.2714848518371582 0.13340222835540771 0.21605446934700012 -0.8703268766403198 0.4924161434173584 -0.0 0.40764760971069336 0.5646572709083557 0 1.0 0 0.0 0 0.0 0 0.0 1.2754619121551514 0.13985291123390198 0.21605446934700012 -0.8313852548599243 0.5556504726409912 -0.0 0.4098869264125824 0.5707464218139648 0 1.0 0 0.0 0 0.0 0 0.0 0.00626826286315918 -0.11729954183101654 -0.2839455306529999 -0.04663228243589401 0.9989013075828552 -0.0 0.9703834056854248 0.5634076595306396 0 1.0 0 0.0 0 0.0 0 0.0 0.0021016597747802734 -0.11739562451839447 0.21605446934700012 -0.0016174810007214546 0.999969482421875 -0.0 0.4974221885204315 0.4046170711517334 0 1.0 0 0.0 0 0.0 0 0.0 0.00626826286315918 -0.11729954183101654 0.21605446934700012 -0.04663228243589401 0.9989013075828552 -0.0 0.5001758337020874 0.4047499895095825 0 1.0 0 0.0 0 0.0 0 0.0 -1.1575742959976196 -0.17943590879440308 -0.2839455306529999 -0.42558062076568604 -0.904904305934906 -0.0 0.06448733806610107 0.40635156631469727 0 1.0 0 0.0 0 0.0 0 0.0 -1.1482959985733032 -0.18338243663311005 0.21605445444583893 -0.3563341200351715 -0.9343241453170776 -0.0 0.5030680298805237 0.2109755277633667 0 1.0 0 0.0 0 0.0 0 0.0 -1.1575742959976196 -0.17943590879440308 0.21605445444583893 -0.42558062076568604 -0.904904305934906 -0.0 0.49555355310440063 0.2155786156654358 0 1.0 0 0.0 0 0.0 0 0.0 -1.4169000387191772 -0.14508827030658722 -0.2839455306529999 -0.9504989981651306 -0.3106784224510193 -0.0 0.9934057593345642 0.45809316635131836 0 1.0 0 0.0 0 0.0 0 0.0 -1.4166568517684937 -0.1458447277545929 0.21605446934700012 -0.9531540870666504 -0.3024079203605652 -0.0 0.5957931876182556 0.27176743745803833 0 1.0 0 0.0 0 0.0 0 0.0 -1.4169000387191772 -0.14508827030658722 0.21605446934700012 -0.9504989981651306 -0.3106784224510193 -0.0 0.5955314636230469 0.27242761850357056 0 1.0 0 0.0 0 0.0 0 0.0 1.022261381149292 -0.1181204691529274 -0.2839455306529999 0.12570573389530182 0.9920651912689209 -0.0 0.9888521432876587 0.4416421055793762 0 1.0 0 0.0 0 0.0 0 0.0 1.0169880390167236 -0.11727521568536758 0.21605446934700012 0.19186986982822418 0.9814141988754272 -0.0 1.4788858890533447 0.2789512276649475 0 1.0 0 0.0 0 0.0 0 0.0 1.022261381149292 -0.1181204691529274 0.21605446934700012 0.12570573389530182 0.9920651912689209 -0.0 1.4828212261199951 0.27781784534454346 0 1.0 0 0.0 0 0.0 0 0.0 -1.4166568517684937 -0.1458447277545929 -0.2839455306529999 -0.9531540870666504 -0.3024079203605652 -0.0 0.9932801127433777 0.4573652744293213 0 1.0 0 0.0 0 0.0 0 0.0 -1.4163941144943237 -0.14668390154838562 0.21605446934700012 -0.9552598595619202 -0.29566332697868347 -0.0 0.5960790514945984 0.27103519439697266 0 1.0 0 0.0 0 0.0 0 0.0 -1.4166568517684937 -0.1458447277545929 0.21605446934700012 -0.9531540870666504 -0.3024079203605652 -0.0 0.5957931876182556 0.27176743745803833 0 1.0 0 0.0 0 0.0 0 0.0 1.5677759647369385 0.1278272569179535 -0.2839455306529999 0.8823511600494385 0.47053438425064087 -0.0 0.8889729976654053 0.694016695022583 0 1.0 0 0.0 0 0.0 0 0.0 1.5639960765838623 0.13445305824279785 0.21605446934700012 0.8536027073860168 0.520889937877655 -0.0 0.5633092522621155 0.5601080656051636 0 1.0 0 0.0 0 0.0 0 0.0 1.5677759647369385 0.1278272569179535 0.21605446934700012 0.8823511600494385 0.47053438425064087 -0.0 0.5653682947158813 0.5536173582077026 0 1.0 0 0.0 0 0.0 0 0.0 0.0021016597747802734 -0.11739562451839447 -0.2839455306529999 -0.0016174810007214546 0.999969482421875 -0.0 0.973068118095398 0.5634965896606445 0 1.0 0 0.0 0 0.0 0 0.0 -0.0015227794647216797 -0.1173238605260849 0.21605446934700012 0.04043702408671379 0.999176025390625 -0.0 0.4950215816497803 0.4047200679779053 0 1.0 0 0.0 0 0.0 0 0.0 0.0021016597747802734 -0.11739562451839447 0.21605446934700012 -0.0016174810007214546 0.999969482421875 -0.0 0.4974221885204315 0.4046170711517334 0 1.0 0 0.0 0 0.0 0 0.0 -1.0510835647583008 -0.1835843324661255 -0.2839455306529999 0.35142064094543457 -0.9361857771873474 -0.0 1.0066523551940918 0.4097048044204712 0 1.0 0 0.0 0 0.0 0 0.0 -1.0458989143371582 -0.1815277487039566 0.21605445444583893 0.38541826605796814 -0.922727108001709 -0.0 0.5875861644744873 0.22327786684036255 0 1.0 0 0.0 0 0.0 0 0.0 -1.0510835647583008 -0.1835843324661255 0.21605445444583893 0.35142064094543457 -0.9361857771873474 -0.0 0.5838873982429504 0.2199886441230774 0 1.0 0 0.0 0 0.0 0 0.0 1.0478694438934326 -0.11739562451839447 -0.2839455306529999 -0.19953002035617828 0.9798578023910522 -0.0 0.9738736152648926 0.4419704079627991 0 1.0 0 0.0 0 0.0 0 0.0 1.0443739891052246 -0.1180085837841034 0.21605446934700012 -0.14679403603076935 0.9891353845596313 -0.0 0.49941444396972656 0.27793002128601074 0 1.0 0 0.0 0 0.0 0 0.0 1.0478694438934326 -0.11739562451839447 0.21605446934700012 -0.19953002035617828 0.9798578023910522 -0.0 0.5020204186439514 0.2787216305732727 0 1.0 0 0.0 0 0.0 0 0.0 1.2714848518371582 0.13340222835540771 -0.2839455306529999 -0.8703268766403198 0.4924161434173584 -0.0 0.08472907543182373 0.7049227952957153 0 1.0 0 0.0 0 0.0 0 0.0 1.268038272857666 0.12673750519752502 0.21605446934700012 -0.905117928981781 0.42512282729148865 -0.0 0.40563517808914185 0.5583691596984863 0 1.0 0 0.0 0 0.0 0 0.0 1.2714848518371582 0.13340222835540771 0.21605446934700012 -0.8703268766403198 0.4924161434173584 -0.0 0.40764760971069336 0.5646572709083557 0 1.0 0 0.0 0 0.0 0 0.0 -1.1482959985733032 -0.18338243663311005 -0.2839455306529999 -0.3563341200351715 -0.9343241453170776 -0.0 0.059311121702194214 0.4031233787536621 0 1.0 0 0.0 0 0.0 0 0.0 -1.1387622356414795 -0.18661142885684967 0.21605445444583893 -0.2848292589187622 -0.9585558772087097 -0.0 0.5110252499580383 0.20733344554901123 0 1.0 0 0.0 0 0.0 0 0.0 -1.1482959985733032 -0.18338243663311005 0.21605445444583893 -0.3563341200351715 -0.9343241453170776 -0.0 0.5030680298805237 0.2109755277633667 0 1.0 0 0.0 0 0.0 0 0.0 -0.1487255096435547 -0.11909829080104828 -0.2839455306529999 -0.9493392705917358 -0.31418806314468384 -0.0 0.0639059841632843 0.558230996131897 0 1.0 0 0.0 0 0.0 0 0.0 -0.14678454399108887 -0.12453465908765793 0.21605446934700012 -0.9329508543014526 -0.35996583104133606 -0.0 0.40534508228302 0.41134870052337646 0 1.0 0 0.0 0 0.0 0 0.0 -0.1487255096435547 -0.11909829080104828 0.21605446934700012 -0.9493392705917358 -0.31418806314468384 -0.0 0.4047989249229431 0.4177280068397522 0 1.0 0 0.0 0 0.0 0 0.0 1.0443739891052246 -0.1180085837841034 -0.2839455306529999 -0.14679403603076935 0.9891353845596313 -0.0 0.9759230017662048 0.44136184453964233 0 1.0 0 0.0 0 0.0 0 0.0 1.0407764911651611 -0.11844640970230103 0.21605446934700012 -0.095828115940094 0.9953917264938354 -0.0 0.4967222511768341 0.2773597836494446 0 1.0 0 0.0 0 0.0 0 0.0 1.0443739891052246 -0.1180085837841034 0.21605446934700012 -0.14679403603076935 0.9891353845596313 -0.0 0.49941444396972656 0.27793002128601074 0 1.0 0 0.0 0 0.0 0 0.0 -1.3208016157150269 -0.1499311327934265 -0.2839455306529999 0.9561754465103149 0.2926725149154663 -0.0 0.9472158551216125 0.46502256393432617 0 1.0 0 0.0 0 0.0 0 0.0 -1.321989893913269 -0.14588730037212372 0.21605446934700012 0.9626453518867493 0.2706686556339264 -0.0 0.6487820148468018 0.3092452883720398 0 1.0 0 0.0 0 0.0 0 0.0 -1.3208016157150269 -0.1499311327934265 0.21605446934700012 0.9561754465103149 0.2926725149154663 -0.0 0.6499096751213074 0.3062366247177124 0 1.0 0 0.0 0 0.0 0 0.0 -1.4163941144943237 -0.14668390154838562 -0.2839455306529999 -0.9552598595619202 -0.29566332697868347 -0.0 0.9931448698043823 0.45655930042266846 0 1.0 0 0.0 0 0.0 0 0.0 -1.4161120653152466 -0.1476057767868042 0.21605446934700012 -0.9569994211196899 -0.29004791378974915 -0.0 0.5963889360427856 0.2702317237854004 0 1.0 0 0.0 0 0.0 0 0.0 -1.4163941144943237 -0.14668390154838562 0.21605446934700012 -0.9552598595619202 -0.29566332697868347 -0.0 0.5960790514945984 0.27103519439697266 0 1.0 0 0.0 0 0.0 0 0.0 -0.14678454399108887 -0.12453465908765793 -0.2839455306529999 -0.9329508543014526 -0.35996583104133606 -0.0 0.06262597441673279 0.5522772073745728 0 1.0 0 0.0 0 0.0 0 0.0 -0.14465856552124023 -0.12965482473373413 0.21605446934700012 -0.9130222201347351 -0.40784937143325806 -0.0 0.40602123737335205 0.40526485443115234 0 1.0 0 0.0 0 0.0 0 0.0 -0.14678454399108887 -0.12453465908765793 0.21605446934700012 -0.9329508543014526 -0.35996583104133606 -0.0 0.40534508228302 0.41134870052337646 0 1.0 0 0.0 0 0.0 0 0.0 -1.056275486946106 -0.18542441725730896 -0.2839455306529999 0.3161107301712036 -0.9486984014511108 -0.0 1.0093977451324463 0.40753376483917236 0 1.0 0 0.0 0 0.0 0 0.0 -1.0510835647583008 -0.1835843324661255 0.21605445444583893 0.35142064094543457 -0.9361857771873474 -0.0 0.5838873982429504 0.2199886441230774 0 1.0 0 0.0 0 0.0 0 0.0 -1.056275486946106 -0.18542441725730896 0.21605445444583893 0.3161107301712036 -0.9486984014511108 -0.0 0.5800744295120239 0.21697372198104858 0 1.0 0 0.0 0 0.0 0 0.0 1.4168126583099365 0.12568670511245728 -0.2839455306529999 -0.00198370311409235 -0.999969482421875 -0.0 0.9885505437850952 0.7259107828140259 0 1.0 0 0.0 0 0.0 0 0.0 1.421851396560669 0.1256064474582672 0.21605446934700012 -0.03277687728404999 -0.99945068359375 -0.0 1.487341284751892 0.5618768334388733 0 1.0 0 0.0 0 0.0 0 0.0 1.4168126583099365 0.12568670511245728 0.21605446934700012 -0.00198370311409235 -0.999969482421875 -0.0 1.484402060508728 0.5620718598365784 0 1.0 0 0.0 0 0.0 0 0.0 1.0276904106140137 -0.1186276227235794 -0.2839455306529999 0.06164738908410072 0.9980773329734802 -0.0 0.9856808185577393 0.4409821033477783 0 1.0 0 0.0 0 0.0 0 0.0 1.022261381149292 -0.1181204691529274 0.21605446934700012 0.12570573389530182 0.9920651912689209 -0.0 1.4828212261199951 0.27781784534454346 0 1.0 0 0.0 0 0.0 0 0.0 1.0276904106140137 -0.1186276227235794 0.21605446934700012 0.06164738908410072 0.9980773329734802 -0.0 1.4868923425674438 0.27713125944137573 0 1.0 0 0.0 0 0.0 0 0.0 -1.0614746809005737 -0.1870480328798294 -0.2839455306529999 0.2795190215110779 -0.9601123332977295 -0.0 1.01215398311615 0.4055767059326172 0 1.0 0 0.0 0 0.0 0 0.0 -1.056275486946106 -0.18542441725730896 0.21605445444583893 0.3161107301712036 -0.9486984014511108 -0.0 0.5800744295120239 0.21697372198104858 0 1.0 0 0.0 0 0.0 0 0.0 -1.0614746809005737 -0.1870480328798294 0.21605445444583893 0.2795190215110779 -0.9601123332977295 -0.0 0.5761512517929077 0.21423637866973877 0 1.0 0 0.0 0 0.0 0 0.0 1.0407764911651611 -0.11844640970230103 -0.2839455306529999 -0.095828115940094 0.9953917264938354 -0.0 0.978029727935791 0.44094574451446533 0 1.0 0 0.0 0 0.0 0 0.0 1.0370769500732422 -0.11870910972356796 0.21605446934700012 -0.04693746566772461 0.9988707900047302 -0.0 0.4939463436603546 0.2770150303840637 0 1.0 0 0.0 0 0.0 0 0.0 1.0407764911651611 -0.11844640970230103 0.21605446934700012 -0.095828115940094 0.9953917264938354 -0.0 0.4967222511768341 0.2773597836494446 0 1.0 0 0.0 0 0.0 0 0.0 -1.4260165691375732 -0.15114732086658478 -0.2839455306529999 0.6567277908325195 -0.7541123628616333 -0.0 0.9983725547790527 0.4510546922683716 0 1.0 0 0.0 0 0.0 0 0.0 -1.4217404127120972 -0.1473163217306137 0.21605446934700012 0.6773888468742371 -0.7355876564979553 -0.0 0.5925045013427734 0.26866674423217773 0 1.0 0 0.0 0 0.0 0 0.0 -1.4260165691375732 -0.15114732086658478 0.21605446934700012 0.6567277908325195 -0.7541123628616333 -0.0 0.5900063514709473 0.26357966661453247 0 1.0 0 0.0 0 0.0 0 0.0 0.08549213409423828 -0.13312825560569763 -0.2839455306529999 0.8020874857902527 -0.5971556901931763 -0.0 0.92360520362854 0.5383328199386597 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 0.21605446934700012 0.8142643570899963 -0.5804315209388733 -0.0 0.5518236756324768 0.39705806970596313 0 1.0 0 0.0 0 0.0 0 0.0 0.08549213409423828 -0.13312825560569763 0.21605446934700012 0.8020874857902527 -0.5971556901931763 -0.0 0.5500854253768921 0.39095473289489746 0 1.0 0 0.0 0 0.0 0 0.0 -1.1387622356414795 -0.18661142885684967 -0.2839455306529999 -0.2848292589187622 -0.9585558772087097 -0.0 0.05402609705924988 0.4006136655807495 0 1.0 0 0.0 0 0.0 0 0.0 -1.128973126411438 -0.18912285566329956 0.21605445444583893 -0.21228675544261932 -0.9772026538848877 -0.0 0.5193799734115601 0.20468991994857788 0 1.0 0 0.0 0 0.0 0 0.0 -1.1387622356414795 -0.18661142885684967 0.21605445444583893 -0.2848292589187622 -0.9585558772087097 -0.0 0.5110252499580383 0.20733344554901123 0 1.0 0 0.0 0 0.0 0 0.0 -1.4161120653152466 -0.1476057767868042 -0.2839455306529999 -0.9569994211196899 -0.29004791378974915 -0.0 0.9930000901222229 0.45567595958709717 0 1.0 0 0.0 0 0.0 0 0.0 -1.415810465812683 -0.14861035346984863 0.21605446934700012 -0.9584032893180847 -0.2854090929031372 -0.0 0.5967231392860413 0.2693578600883484 0 1.0 0 0.0 0 0.0 0 0.0 -1.4161120653152466 -0.1476057767868042 0.21605446934700012 -0.9569994211196899 -0.29004791378974915 -0.0 0.5963889360427856 0.2702317237854004 0 1.0 0 0.0 0 0.0 0 0.0 1.571234941482544 0.12087064981460571 -0.2839455306529999 0.9072847962379456 0.4204840362071991 -0.0 0.8879491686820984 0.6863942742347717 0 1.0 0 0.0 0 0.0 0 0.0 1.5677759647369385 0.1278272569179535 0.21605446934700012 0.8823511600494385 0.47053438425064087 -0.0 0.5653682947158813 0.5536173582077026 0 1.0 0 0.0 0 0.0 0 0.0 1.571234941482544 0.12087064981460571 0.21605446934700012 0.9072847962379456 0.4204840362071991 -0.0 0.5672978758811951 0.5468026995658875 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 -0.2839455306529999 -1.0 0.0 -0.0 0.9213816523551941 0.5436801314353943 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.18394553661346436 0.21605445444583893 -1.0 0.0 -0.0 0.5546995401382446 0.3343638777732849 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 0.21605446934700012 -1.0 0.0 -0.0 0.5518236756324768 0.39705806970596313 0 1.0 0 0.0 0 0.0 0 0.0 1.268038272857666 0.12673750519752502 -0.2839455306529999 -0.905117928981781 0.42512282729148865 -0.0 0.08592993021011353 0.6977540254592896 0 1.0 0 0.0 0 0.0 0 0.0 1.2651219367980957 0.1198587417602539 0.21605446934700012 -0.9349040389060974 0.35483869910240173 -0.0 0.4038437008857727 0.5518712997436523 0 1.0 0 0.0 0 0.0 0 0.0 1.268038272857666 0.12673750519752502 0.21605446934700012 -0.905117928981781 0.42512282729148865 -0.0 0.40563517808914185 0.5583691596984863 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.18394553661346436 -0.2839455306529999 0.0 -1.0 -0.0 0.9250865578651428 0.48120373487472534 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 0.21605445444583893 0.0 -1.0 -0.0 0.6000452637672424 0.3568435311317444 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.18394553661346436 0.21605445444583893 0.0 -1.0 -0.0 0.5546995401382446 0.3343638777732849 0 1.0 0 0.0 0 0.0 0 0.0 1.0332751274108887 -0.11879667639732361 -0.2839455306529999 0.0036011841148138046 0.999969482421875 -0.0 0.982417106628418 0.4406943917274475 0 1.0 0 0.0 0 0.0 0 0.0 1.0276904106140137 -0.1186276227235794 0.21605446934700012 0.06164738908410072 0.9980773329734802 -0.0 0.48689237236976624 0.27713125944137573 0 1.0 0 0.0 0 0.0 0 0.0 1.0332751274108887 -0.11879667639732361 0.21605446934700012 0.0036011841148138046 0.999969482421875 -0.0 0.49108949303627014 0.2768997550010681 0 1.0 0 0.0 0 0.0 0 0.0 -1.415810465812683 -0.14861035346984863 -0.2839455306529999 -0.9584032893180847 -0.2854090929031372 -0.0 0.992845892906189 0.4547160267829895 0 1.0 0 0.0 0 0.0 0 0.0 -1.4154893159866333 -0.14969763159751892 0.21605446934700012 -0.9595934748649597 -0.28131961822509766 -0.0 0.5970817804336548 0.26841461658477783 0 1.0 0 0.0 0 0.0 0 0.0 -1.415810465812683 -0.14861035346984863 0.21605446934700012 -0.9584032893180847 -0.2854090929031372 -0.0 0.5967231392860413 0.2693578600883484 0 1.0 0 0.0 0 0.0 0 0.0 -0.14465856552124023 -0.12965482473373413 -0.2839455306529999 -0.9130222201347351 -0.40784937143325806 -0.0 0.061272114515304565 0.546661376953125 0 1.0 0 0.0 0 0.0 0 0.0 -0.14232611656188965 -0.13452443480491638 0.21605446934700012 -0.8899502754211426 -0.45600757002830505 -0.0 0.40683630108833313 0.3993995785713196 0 1.0 0 0.0 0 0.0 0 0.0 -0.14465856552124023 -0.12965482473373413 0.21605446934700012 -0.9130222201347351 -0.40784937143325806 -0.0 0.40602123737335205 0.40526485443115234 0 1.0 0 0.0 0 0.0 0 0.0 -1.066681146621704 -0.18845516443252563 -0.2839455306529999 0.24179814755916595 -0.9703055024147034 -0.0 1.0149214267730713 0.4038327932357788 0 1.0 0 0.0 0 0.0 0 0.0 -1.0614746809005737 -0.1870480328798294 0.21605445444583893 0.2795190215110779 -0.9601123332977295 -0.0 0.5761512517929077 0.21423637866973877 0 1.0 0 0.0 0 0.0 0 0.0 -1.066681146621704 -0.18845516443252563 0.21605445444583893 0.24179814755916595 -0.9703055024147034 -0.0 0.5721230506896973 0.21177977323532104 0 1.0 0 0.0 0 0.0 0 0.0 1.0370769500732422 -0.11870910972356796 -0.2839455306529999 -0.04693746566772461 0.9988707900047302 -0.0 0.9801942110061646 0.4407229423522949 0 1.0 0 0.0 0 0.0 0 0.0 1.0332751274108887 -0.11879667639732361 0.21605446934700012 0.0036011841148138046 0.999969482421875 -0.0 0.49108949303627014 0.2768997550010681 0 1.0 0 0.0 0 0.0 0 0.0 1.0370769500732422 -0.11870910972356796 0.21605446934700012 -0.04693746566772461 0.9988707900047302 -0.0 0.4939463436603546 0.2770150303840637 0 1.0 0 0.0 0 0.0 0 0.0 -1.4154893159866333 -0.14969763159751892 -0.2839455306529999 -0.9595934748649597 -0.28131961822509766 -0.0 0.9926822185516357 0.4536803960800171 0 1.0 0 0.0 0 0.0 0 0.0 -1.4151488542556763 -0.15086759626865387 0.21605446934700012 -0.9606311321258545 -0.2778099775314331 -0.0 0.5974647998809814 0.2674028277397156 0 1.0 0 0.0 0 0.0 0 0.0 -1.4154893159866333 -0.14969763159751892 0.21605446934700012 -0.9595934748649597 -0.28131961822509766 -0.0 0.5970817804336548 0.26841461658477783 0 1.0 0 0.0 0 0.0 0 0.0 1.404465913772583 0.1253851056098938 -0.2839455306529999 0.05169835686683655 -0.9986571669578552 -0.0 0.9978524446487427 0.7254770994186401 0 1.0 0 0.0 0 0.0 0 0.0 1.4104859828948975 0.1256113052368164 0.21605446934700012 0.02471999265253544 -0.999664306640625 -0.0 1.4807119369506836 0.5621060132980347 0 1.0 0 0.0 0 0.0 0 0.0 1.404465913772583 0.1253851056098938 0.21605446934700012 0.05169835686683655 -0.9986571669578552 -0.0 1.4772032499313354 0.5619494318962097 0 1.0 0 0.0 0 0.0 0 0.0 -1.0718950033187866 -0.18964582681655884 -0.2839455306529999 0.20303964614868164 -0.9791558384895325 -0.0 1.0177001953125 0.4023010730743408 0 1.0 0 0.0 0 0.0 0 0.0 -1.066681146621704 -0.18845516443252563 0.21605445444583893 0.24179814755916595 -0.9703055024147034 -0.0 0.5721230506896973 0.21177977323532104 0 1.0 0 0.0 0 0.0 0 0.0 -1.0718950033187866 -0.18964582681655884 0.21605445444583893 0.20303964614868164 -0.9791558384895325 -0.0 0.5679959058761597 0.20960724353790283 0 1.0 0 0.0 0 0.0 0 0.0 0.08183979988098145 -0.13782760500907898 -0.2839455306529999 0.7765740156173706 -0.6299936175346375 -0.0 0.9259190559387207 0.5331619381904602 0 1.0 0 0.0 0 0.0 0 0.0 0.08549213409423828 -0.13312825560569763 0.21605446934700012 0.8020874857902527 -0.5971556901931763 -0.0 0.5500854253768921 0.39095473289489746 0 1.0 0 0.0 0 0.0 0 0.0 0.08183979988098145 -0.13782760500907898 0.21605446934700012 0.7765740156173706 -0.6299936175346375 -0.0 0.548201322555542 0.385007381439209 0 1.0 0 0.0 0 0.0 0 0.0 -1.128973126411438 -0.18912285566329956 -0.2839455306529999 -0.21228675544261932 -0.9772026538848877 -0.0 0.04863038659095764 0.39882320165634155 0 1.0 0 0.0 0 0.0 0 0.0 -1.1189286708831787 -0.1909167319536209 0.21605445444583893 -0.13995788991451263 -0.9901425242424011 -0.0 0.5280721187591553 0.20308256149291992 0 1.0 0 0.0 0 0.0 0 0.0 -1.128973126411438 -0.18912285566329956 0.21605445444583893 -0.21228675544261932 -0.9772026538848877 -0.0 0.5193799734115601 0.20468991994857788 0 1.0 0 0.0 0 0.0 0 0.0 0.8827424049377441 -0.12030474841594696 -0.2839455306529999 -0.843745231628418 -0.5366985201835632 -0.0 0.06383192539215088 0.4491479992866516 0 1.0 0 0.0 0 0.0 0 0.0 0.8886165618896484 -0.12895429134368896 0.21605446934700012 -0.8044373989105225 -0.5940122604370117 -0.0 0.39340054988861084 0.29774606227874756 0 1.0 0 0.0 0 0.0 0 0.0 0.8827424049377441 -0.12030474841594696 0.21605446934700012 -0.843745231628418 -0.5366985201835632 -0.0 0.3912193775177002 0.3077763319015503 0 1.0 0 0.0 0 0.0 0 0.0 1.4104859828948975 0.1256113052368164 -0.2839455306529999 0.02471999265253544 -0.999664306640625 -0.0 0.993322491645813 0.7258370518684387 0 1.0 0 0.0 0 0.0 0 0.0 1.4168126583099365 0.12568670511245728 0.21605446934700012 -0.00198370311409235 -0.999969482421875 -0.0 1.484402060508728 0.5620718598365784 0 1.0 0 0.0 0 0.0 0 0.0 1.4104859828948975 0.1256113052368164 0.21605446934700012 0.02471999265253544 -0.999664306640625 -0.0 1.4807119369506836 0.5621060132980347 0 1.0 0 0.0 0 0.0 0 0.0 -0.14232611656188965 -0.13452443480491638 -0.2839455306529999 -0.8899502754211426 -0.45600757002830505 -0.0 0.059828102588653564 0.5413103103637695 0 1.0 0 0.0 0 0.0 0 0.0 -0.13976478576660156 -0.13920921087265015 0.21605446934700012 -0.8639789819717407 -0.503494381904602 -0.0 0.4078006148338318 0.3936748504638672 0 1.0 0 0.0 0 0.0 0 0.0 -0.14232611656188965 -0.13452443480491638 0.21605446934700012 -0.8899502754211426 -0.45600757002830505 -0.0 0.40683630108833313 0.3993995785713196 0 1.0 0 0.0 0 0.0 0 0.0 -1.319499135017395 -0.15402118861675262 -0.2839455306529999 0.9494918584823608 0.31376078724861145 -0.0 0.9468740224838257 0.46155840158462524 0 1.0 0 0.0 0 0.0 0 0.0 -1.3208016157150269 -0.1499311327934265 0.21605446934700012 0.9561754465103149 0.2926725149154663 -0.0 0.6499096751213074 0.3062366247177124 0 1.0 0 0.0 0 0.0 0 0.0 -1.319499135017395 -0.15402118861675262 0.21605446934700012 0.9494918584823608 0.31376078724861145 -0.0 0.6510940194129944 0.30328530073165894 0 1.0 0 0.0 0 0.0 0 0.0 1.421851396560669 0.1256064474582672 -0.2839455306529999 -0.03277687728404999 -0.99945068359375 -0.0 0.9847497940063477 0.7257237434387207 0 1.0 0 0.0 0 0.0 0 0.0 1.4266927242279053 0.12536564469337463 0.21605446934700012 -0.06787316501140594 -0.9976806044578552 -0.0 0.49016404151916504 0.5615012645721436 0 1.0 0 0.0 0 0.0 0 0.0 1.421851396560669 0.1256064474582672 0.21605446934700012 -0.03277687728404999 -0.99945068359375 -0.0 0.4873412549495697 0.5618768334388733 0 1.0 0 0.0 0 0.0 0 0.0 -1.6334062814712524 -0.15033003687858582 -0.2839455306529999 -0.7759636044502258 -0.6307260394096375 -0.0 0.11009809374809265 0.44204282760620117 0 1.0 0 0.0 0 0.0 0 0.0 -1.6285791397094727 -0.15586857497692108 0.21605446934700012 -0.7316507697105408 -0.6816614270210266 -0.0 0.44213002920150757 0.2660250663757324 0 1.0 0 0.0 0 0.0 0 0.0 -1.6334062814712524 -0.15033003687858582 0.21605446934700012 -0.7759636044502258 -0.6307260394096375 -0.0 0.43985608220100403 0.2725491523742676 0 1.0 0 0.0 0 0.0 0 0.0 -1.0771161317825317 -0.19061999022960663 -0.2839455306529999 0.16342662274837494 -0.9865413308143616 -0.0 1.0204906463623047 0.40098077058792114 0 1.0 0 0.0 0 0.0 0 0.0 -1.0718950033187866 -0.18964582681655884 0.21605445444583893 0.20303964614868164 -0.9791558384895325 -0.0 0.5679959058761597 0.20960724353790283 0 1.0 0 0.0 0 0.0 0 0.0 -1.0771161317825317 -0.19061999022960663 0.21605445444583893 0.16342662274837494 -0.9865413308143616 -0.0 0.563776969909668 0.20772206783294678 0 1.0 0 0.0 0 0.0 0 0.0 1.1696586608886719 -0.12952345609664917 -0.2839455306529999 0.808679461479187 -0.5881832242012024 -0.0 0.9101971983909607 0.4346746802330017 0 1.0 0 0.0 0 0.0 0 0.0 1.174483299255371 -0.12249995768070221 0.21605446934700012 0.8388012051582336 -0.5444197058677673 -0.0 0.5837835669517517 0.3009667992591858 0 1.0 0 0.0 0 0.0 0 0.0 1.1696586608886719 -0.12952345609664917 0.21605446934700012 0.808679461479187 -0.5881832242012024 -0.0 0.5818529725074768 0.2929994463920593 0 1.0 0 0.0 0 0.0 0 0.0 0.07801008224487305 -0.14235183596611023 -0.2839455306529999 0.7494735717773438 -0.6619769930839539 -0.0 0.9283249378204346 0.5281692743301392 0 1.0 0 0.0 0 0.0 0 0.0 0.08183979988098145 -0.13782760500907898 0.21605446934700012 0.7765740156173706 -0.6299936175346375 -0.0 0.548201322555542 0.385007381439209 0 1.0 0 0.0 0 0.0 0 0.0 0.07801008224487305 -0.14235183596611023 0.21605446934700012 0.7494735717773438 -0.6619769930839539 -0.0 0.5461670756340027 0.3792210817337036 0 1.0 0 0.0 0 0.0 0 0.0 0.8886165618896484 -0.12895429134368896 -0.2839455306529999 -0.8044373989105225 -0.5940122604370117 -0.0 0.06068447232246399 0.4405009150505066 0 1.0 0 0.0 0 0.0 0 0.0 0.896730899810791 -0.13908028602600098 0.21605446934700012 -0.7527390122413635 -0.6582842469215393 -0.0 0.39674311876296997 0.28568243980407715 0 1.0 0 0.0 0 0.0 0 0.0 0.8886165618896484 -0.12895429134368896 0.21605446934700012 -0.8044373989105225 -0.5940122604370117 -0.0 0.39340054988861084 0.29774606227874756 0 1.0 0 0.0 0 0.0 0 0.0 -1.4151488542556763 -0.15086759626865387 -0.2839455306529999 -0.9606311321258545 -0.2778099775314331 -0.0 0.9925094842910767 0.4525699019432068 0 1.0 0 0.0 0 0.0 0 0.0 -1.414788842201233 -0.15212027728557587 0.21605446934700012 -0.9614856243133545 -0.27478864789009094 -0.0 0.5978724956512451 0.26632362604141235 0 1.0 0 0.0 0 0.0 0 0.0 -1.4151488542556763 -0.15086759626865387 0.21605446934700012 -0.9606311321258545 -0.2778099775314331 -0.0 0.5974647998809814 0.2674028277397156 0 1.0 0 0.0 0 0.0 0 0.0 1.398751974105835 0.12500807642936707 -0.2839455306529999 0.08148442208766937 -0.9966429471969604 -0.0 1.0021334886550903 0.7248518466949463 0 1.0 0 0.0 0 0.0 0 0.0 1.404465913772583 0.1253851056098938 0.21605446934700012 0.05169835686683655 -0.9986571669578552 -0.0 1.4772032499313354 0.5619494318962097 0 1.0 0 0.0 0 0.0 0 0.0 1.398751974105835 0.12500807642936707 0.21605446934700012 0.08148442208766937 -0.9966429471969604 -0.0 1.4738764762878418 0.5616071224212646 0 1.0 0 0.0 0 0.0 0 0.0 -0.13976478576660156 -0.13920921087265015 -0.2839455306529999 -0.8639789819717407 -0.503494381904602 -0.0 0.05827704071998596 0.5361497402191162 0 1.0 0 0.0 0 0.0 0 0.0 -0.13697481155395508 -0.14370910823345184 0.21605446934700012 -0.8349558711051941 -0.5502792596817017 -0.0 0.40891844034194946 0.38809001445770264 0 1.0 0 0.0 0 0.0 0 0.0 -0.13976478576660156 -0.13920921087265015 0.21605446934700012 -0.8639789819717407 -0.503494381904602 -0.0 0.4078006148338318 0.3936748504638672 0 1.0 0 0.0 0 0.0 0 0.0 -1.0823445320129395 -0.1913776695728302 -0.2839455306529999 0.12314218282699585 -0.9923703670501709 -0.0 1.0232930183410645 0.399871289730072 0 1.0 0 0.0 0 0.0 0 0.0 -1.0771161317825317 -0.19061999022960663 0.21605445444583893 0.16342662274837494 -0.9865413308143616 -0.0 0.563776969909668 0.20772206783294678 0 1.0 0 0.0 0 0.0 0 0.0 -1.0823445320129395 -0.1913776695728302 0.21605445444583893 0.12314218282699585 -0.9923703670501709 -0.0 0.5594743490219116 0.20612728595733643 0 1.0 0 0.0 0 0.0 0 0.0 1.4266927242279053 0.12536564469337463 -0.2839455306529999 -0.06787316501140594 -0.9976806044578552 -0.0 0.9811047315597534 0.725290834903717 0 1.0 0 0.0 0 0.0 0 0.0 1.431337594985962 0.12496429681777954 0.21605446934700012 -0.10571611672639847 -0.9943845868110657 -0.0 0.492870569229126 0.5609473586082458 0 1.0 0 0.0 0 0.0 0 0.0 1.4266927242279053 0.12536564469337463 0.21605446934700012 -0.06787316501140594 -0.9976806044578552 -0.0 0.49016404151916504 0.5615012645721436 0 1.0 0 0.0 0 0.0 0 0.0 -1.1189286708831787 -0.1909167319536209 -0.2839455306529999 -0.13995788991451263 -0.9901425242424011 -0.0 0.04312288761138916 0.3977545499801636 0 1.0 0 0.0 0 0.0 0 0.0 -1.108628749847412 -0.19199305772781372 0.21605443954467773 -0.06897182762622833 -0.9975890517234802 -0.0 0.5370272397994995 0.2025470733642578 0 1.0 0 0.0 0 0.0 0 0.0 -1.1189286708831787 -0.1909167319536209 0.21605445444583893 -0.13995788991451263 -0.9901425242424011 -0.0 0.5280721187591553 0.20308256149291992 0 1.0 0 0.0 0 0.0 0 0.0 1.1645300388336182 -0.13618940114974976 -0.2839455306529999 0.7754448056221008 -0.6313974261283875 -0.0 0.9130018949508667 0.4282703995704651 0 1.0 0 0.0 0 0.0 0 0.0 1.1696586608886719 -0.12952345609664917 0.21605446934700012 0.808679461479187 -0.5881832242012024 -0.0 0.5818529725074768 0.2929994463920593 0 1.0 0 0.0 0 0.0 0 0.0 1.1645300388336182 -0.13618940114974976 0.21605446934700012 0.7754448056221008 -0.6313974261283875 -0.0 0.5796647667884827 0.28530943393707275 0 1.0 0 0.0 0 0.0 0 0.0 -1.430341362953186 -0.15480805933475494 -0.2839455306529999 0.634998619556427 -0.772484540939331 -0.0 1.0007305145263672 0.44697535037994385 0 1.0 0 0.0 0 0.0 0 0.0 -1.4260165691375732 -0.15114732086658478 0.21605446934700012 0.6567277908325195 -0.7541123628616333 -0.0 0.5900063514709473 0.26357966661453247 0 1.0 0 0.0 0 0.0 0 0.0 -1.430341362953186 -0.15480805933475494 0.21605446934700012 0.634998619556427 -0.772484540939331 -0.0 0.5873936414718628 0.25871068239212036 0 1.0 0 0.0 0 0.0 0 0.0 0.07400274276733398 -0.1467009335756302 -0.2839455306529999 0.7209387421607971 -0.6929532885551453 -0.0 0.9308251142501831 0.5233567953109741 0 1.0 0 0.0 0 0.0 0 0.0 0.07801008224487305 -0.14235183596611023 0.21605446934700012 0.7494735717773438 -0.6619769930839539 -0.0 0.5461670756340027 0.3792210817337036 0 1.0 0 0.0 0 0.0 0 0.0 0.07400274276733398 -0.1467009335756302 0.21605446934700012 0.7209387421607971 -0.6929532885551453 -0.0 0.5439779758453369 0.373601496219635 0 1.0 0 0.0 0 0.0 0 0.0 -1.414788842201233 -0.15212027728557587 -0.2839455306529999 -0.9614856243133545 -0.27478864789009094 -0.0 0.9923274517059326 0.451385498046875 0 1.0 0 0.0 0 0.0 0 0.0 -1.4144092798233032 -0.15345565974712372 0.21605446934700012 -0.9622486233711243 -0.27207252383232117 -0.0 0.5983049869537354 0.26517820358276367 0 1.0 0 0.0 0 0.0 0 0.0 -1.414788842201233 -0.15212027728557587 0.21605446934700012 -0.9614856243133545 -0.27478864789009094 -0.0 0.5978724956512451 0.26632362604141235 0 1.0 0 0.0 0 0.0 0 0.0 1.3933451175689697 0.1244802474975586 -0.2839455306529999 0.11453596502542496 -0.9934080243110657 -0.0 0.006159782409667969 0.7239813804626465 0 1.0 0 0.0 0 0.0 0 0.0 1.398751974105835 0.12500807642936707 0.21605446934700012 0.08148442208766937 -0.9966429471969604 -0.0 0.473876416683197 0.5616071224212646 0 1.0 0 0.0 0 0.0 0 0.0 1.3933451175689697 0.1244802474975586 0.21605446934700012 0.11453596502542496 -0.9934080243110657 -0.0 0.4707322120666504 0.5610840916633606 0 1.0 0 0.0 0 0.0 0 0.0 -0.13697481155395508 -0.14370910823345184 -0.2839455306529999 -0.8349558711051941 -0.5502792596817017 -0.0 0.05661684274673462 0.5311776399612427 0 1.0 0 0.0 0 0.0 0 0.0 -0.1339561939239502 -0.14802414178848267 0.21605446934700012 -0.8030640482902527 -0.5958738923072815 -0.0 0.410194456577301 0.38264477252960205 0 1.0 0 0.0 0 0.0 0 0.0 -0.13697481155395508 -0.14370910823345184 0.21605446934700012 -0.8349558711051941 -0.5502792596817017 -0.0 0.40891844034194946 0.38809001445770264 0 1.0 0 0.0 0 0.0 0 0.0 -1.0875802040100098 -0.19191887974739075 -0.2839455306529999 0.08230841904878616 -0.9965819120407104 -0.0 1.0261074304580688 0.39897215366363525 0 1.0 0 0.0 0 0.0 0 0.0 -1.0823445320129395 -0.1913776695728302 0.21605445444583893 0.12314218282699585 -0.9923703670501709 -0.0 0.5594743490219116 0.20612728595733643 0 1.0 0 0.0 0 0.0 0 0.0 -1.0875802040100098 -0.19191887974739075 0.21605445444583893 0.08230841904878616 -0.9965819120407104 -0.0 0.5550970435142517 0.20482593774795532 0 1.0 0 0.0 0 0.0 0 0.0 1.15909743309021 -0.14249777793884277 -0.2839455306529999 0.7391277551651001 -0.6735435128211975 -0.0 0.9159396886825562 0.4222024083137512 0 1.0 0 0.0 0 0.0 0 0.0 1.1645300388336182 -0.13618940114974976 0.21605446934700012 0.7754448056221008 -0.6313974261283875 -0.0 0.5796647667884827 0.28530943393707275 0 1.0 0 0.0 0 0.0 0 0.0 1.15909743309021 -0.14249777793884277 0.21605446934700012 0.7391277551651001 -0.6735435128211975 -0.0 0.5772037506103516 0.2778952717781067 0 1.0 0 0.0 0 0.0 0 0.0 1.431337594985962 0.12496429681777954 -0.2839455306529999 -0.10571611672639847 -0.9943845868110657 -0.0 0.9776201248168945 0.724622368812561 0 1.0 0 0.0 0 0.0 0 0.0 1.4357850551605225 0.12440240383148193 0.21605446934700012 -0.14645832777023315 -0.9891964197158813 -0.0 0.4954600930213928 0.5602172613143921 0 1.0 0 0.0 0 0.0 0 0.0 1.431337594985962 0.12496429681777954 0.21605446934700012 -0.10571611672639847 -0.9943845868110657 -0.0 0.492870569229126 0.5609473586082458 0 1.0 0 0.0 0 0.0 0 0.0 0.896730899810791 -0.13908028602600098 -0.2839455306529999 -0.7527390122413635 -0.6582842469215393 -0.0 0.05640202760696411 0.43033796548843384 0 1.0 0 0.0 0 0.0 0 0.0 0.9055459499359131 -0.14832577109336853 0.21605446934700012 -0.6926481127738953 -0.7212439179420471 -0.0 0.4007539749145508 0.274305522441864 0 1.0 0 0.0 0 0.0 0 0.0 0.896730899810791 -0.13908028602600098 0.21605446934700012 -0.7527390122413635 -0.6582842469215393 -0.0 0.39674311876296997 0.28568243980407715 0 1.0 0 0.0 0 0.0 0 0.0 -1.4144092798233032 -0.15345565974712372 -0.2839455306529999 -0.9622486233711243 -0.27207252383232117 -0.0 0.9921363592147827 0.45012837648391724 0 1.0 0 0.0 0 0.0 0 0.0 -1.4140104055404663 -0.15487372875213623 0.21605446934700012 -0.9611499309539795 -0.2760094106197357 -0.0 0.5987622737884521 0.26396769285202026 0 1.0 0 0.0 0 0.0 0 0.0 -1.4144092798233032 -0.15345565974712372 0.21605446934700012 -0.9622486233711243 -0.27207252383232117 -0.0 0.5983049869537354 0.26517820358276367 0 1.0 0 0.0 0 0.0 0 0.0 -1.0928231477737427 -0.19224360585212708 -0.2839455306529999 0.04119998961687088 -0.9991455078125 -0.0 1.0289340019226074 0.3982831835746765 0 1.0 0 0.0 0 0.0 0 0.0 -1.0875802040100098 -0.19191887974739075 0.21605445444583893 0.08230841904878616 -0.9965819120407104 -0.0 0.5550970435142517 0.20482593774795532 0 1.0 0 0.0 0 0.0 0 0.0 -1.0928231477737427 -0.19224360585212708 0.21605445444583893 0.04119998961687088 -0.9991455078125 -0.0 0.5506551265716553 0.203821063041687 0 1.0 0 0.0 0 0.0 0 0.0 0.06981778144836426 -0.15087489783763885 -0.2839455306529999 0.6910916566848755 -0.7227393388748169 -0.0 0.9334215521812439 0.5187262892723083 0 1.0 0 0.0 0 0.0 0 0.0 0.07400274276733398 -0.1467009335756302 0.21605446934700012 0.7209387421607971 -0.6929532885551453 -0.0 0.5439779758453369 0.373601496219635 0 1.0 0 0.0 0 0.0 0 0.0 0.06981778144836426 -0.15087489783763885 0.21605446934700012 0.6910916566848755 -0.7227393388748169 -0.0 0.5416295528411865 0.3681548833847046 0 1.0 0 0.0 0 0.0 0 0.0 -1.108628749847412 -0.19199305772781372 0.21605443954467773 -0.06897182762622833 -0.9975890517234802 -0.0 0.5370272397994995 0.2025470733642578 0 1.0 0 0.0 0 0.0 0 0.0 -1.0980734825134277 -0.19235184788703918 -0.2839455306529999 -0.006653035059571266 -0.999969482421875 -0.0 1.0317729711532593 0.3978040814399719 0 1.0 0 0.0 0 0.0 0 0.0 -1.0980734825134277 -0.19235184788703918 0.21605445444583893 -0.006683553569018841 -0.999969482421875 -0.0 0.546159029006958 0.2031153440475464 0 1.0 0 0.0 0 0.0 0 0.0 1.388244390487671 0.12380161881446838 -0.2839455306529999 0.1511887013912201 -0.9884945154190063 -0.0 0.009929001331329346 0.7228847742080688 0 1.0 0 0.0 0 0.0 0 0.0 1.3933451175689697 0.1244802474975586 0.21605446934700012 0.11453596502542496 -0.9934080243110657 -0.0 0.4707322120666504 0.5610840916633606 0 1.0 0 0.0 0 0.0 0 0.0 1.388244390487671 0.12380161881446838 0.21605446934700012 0.1511887013912201 -0.9884945154190063 -0.0 0.46776947379112244 0.5603847503662109 0 1.0 0 0.0 0 0.0 0 0.0 -0.1339561939239502 -0.14802414178848267 -0.2839455306529999 -0.8030640482902527 -0.5958738923072815 -0.0 0.054845213890075684 0.5263919830322266 0 1.0 0 0.0 0 0.0 0 0.0 -0.13070893287658691 -0.1521543264389038 0.21605446934700012 -0.7685170769691467 -0.6397900581359863 -0.0 0.41163375973701477 0.37733936309814453 0 1.0 0 0.0 0 0.0 0 0.0 -0.1339561939239502 -0.14802414178848267 0.21605446934700012 -0.8030640482902527 -0.5958738923072815 -0.0 0.410194456577301 0.38264477252960205 0 1.0 0 0.0 0 0.0 0 0.0 -1.0980734825134277 -0.19235184788703918 -0.2839455306529999 -0.006653035059571266 -0.999969482421875 -0.0 1.0317729711532593 0.3978040814399719 0 1.0 0 0.0 0 0.0 0 0.0 -1.0928231477737427 -0.19224360585212708 0.21605445444583893 0.04119998961687088 -0.9991455078125 -0.0 0.5506551265716553 0.203821063041687 0 1.0 0 0.0 0 0.0 0 0.0 -1.0980734825134277 -0.19235184788703918 0.21605445444583893 -0.006683553569018841 -0.999969482421875 -0.0 0.546159029006958 0.2031153440475464 0 1.0 0 0.0 0 0.0 0 0.0 1.1533606052398682 -0.14844858646392822 -0.2839455306529999 0.6999419927597046 -0.7141636610031128 -0.0 0.9190158843994141 0.41646647453308105 0 1.0 0 0.0 0 0.0 0 0.0 1.15909743309021 -0.14249777793884277 0.21605446934700012 0.7391277551651001 -0.6735435128211975 -0.0 0.5772037506103516 0.2778952717781067 0 1.0 0 0.0 0 0.0 0 0.0 1.1533606052398682 -0.14844858646392822 0.21605446934700012 0.6999419927597046 -0.7141636610031128 -0.0 0.5744532942771912 0.270757794380188 0 1.0 0 0.0 0 0.0 0 0.0 -1.3180822134017944 -0.15815743803977966 -0.2839455306529999 0.9425641894340515 0.3339335322380066 -0.0 0.946491003036499 0.4581177234649658 0 1.0 0 0.0 0 0.0 0 0.0 -1.319499135017395 -0.15402118861675262 0.21605446934700012 0.9494918584823608 0.31376078724861145 -0.0 0.6510940194129944 0.30328530073165894 0 1.0 0 0.0 0 0.0 0 0.0 -1.3180822134017944 -0.15815743803977966 0.21605446934700012 0.9425641894340515 0.3339335322380066 -0.0 0.6523339748382568 0.3003944158554077 0 1.0 0 0.0 0 0.0 0 0.0 1.4357850551605225 0.12440240383148193 -0.2839455306529999 -0.14645832777023315 -0.9891964197158813 -0.0 0.974300742149353 0.7237285375595093 0 1.0 0 0.0 0 0.0 0 0.0 1.4400355815887451 0.1236799955368042 0.21605446934700012 -0.1902218759059906 -0.981719434261322 -0.0 0.497933030128479 0.5593129396438599 0 1.0 0 0.0 0 0.0 0 0.0 1.4357850551605225 0.12440240383148193 0.21605446934700012 -0.14645832777023315 -0.9891964197158813 -0.0 0.4954600930213928 0.5602172613143921 0 1.0 0 0.0 0 0.0 0 0.0 -1.4851137399673462 0.19643977284431458 -0.2839455306529999 -0.0025635547935962677 0.999969482421875 -0.0 0.051040977239608765 0.8245793581008911 0 1.0 0 0.0 0 0.0 0 0.0 -1.4969496726989746 0.1962597668170929 0.21605448424816132 -0.031373027712106705 0.999481201171875 -0.0 0.5233350992202759 0.6290465593338013 0 1.0 0 0.0 0 0.0 0 0.0 -1.4851137399673462 0.19643977284431458 0.21605448424816132 -0.0025635547935962677 0.999969482421875 -0.0 0.529496967792511 0.6301011443138123 0 1.0 0 0.0 0 0.0 0 0.0 0.9055459499359131 -0.14832577109336853 -0.2839455306529999 -0.6926481127738953 -0.7212439179420471 -0.0 0.05179312825202942 0.4209994077682495 0 1.0 0 0.0 0 0.0 0 0.0 0.9150614738464355 -0.15669071674346924 0.21605446934700012 -0.6262093186378479 -0.7796258330345154 -0.0 0.40549376606941223 0.2636224627494812 0 1.0 0 0.0 0 0.0 0 0.0 0.9055459499359131 -0.14832577109336853 0.21605446934700012 -0.6926481127738953 -0.7212439179420471 -0.0 0.4007539749145508 0.274305522441864 0 1.0 0 0.0 0 0.0 0 0.0 -1.4347147941589355 -0.158298522233963 -0.2839455306529999 0.6121707558631897 -0.790704071521759 -0.0 1.0031116008758545 0.4430910348892212 0 1.0 0 0.0 0 0.0 0 0.0 -1.430341362953186 -0.15480805933475494 0.21605446934700012 0.634998619556427 -0.772484540939331 -0.0 0.5873936414718628 0.25871068239212036 0 1.0 0 0.0 0 0.0 0 0.0 -1.4347147941589355 -0.158298522233963 0.21605446934700012 0.6121707558631897 -0.790704071521759 -0.0 0.5846648812294006 0.254062294960022 0 1.0 0 0.0 0 0.0 0 0.0 0.06545519828796387 -0.15487372875213623 -0.2839455306529999 0.6600848436355591 -0.7511520981788635 -0.0 0.9361163377761841 0.514279842376709 0 1.0 0 0.0 0 0.0 0 0.0 0.06981778144836426 -0.15087489783763885 0.21605446934700012 0.6910916566848755 -0.7227393388748169 -0.0 0.5416295528411865 0.3681548833847046 0 1.0 0 0.0 0 0.0 0 0.0 0.06545519828796387 -0.15487372875213623 0.21605446934700012 0.6600848436355591 -0.7511826157569885 -0.0 0.5391175150871277 0.3628878593444824 0 1.0 0 0.0 0 0.0 0 0.0 -1.4743722677230835 0.19633153080940247 -0.2839455306529999 0.020813623443245888 0.999755859375 -0.0 0.041211605072021484 0.8255455493927002 0 1.0 0 0.0 0 0.0 0 0.0 -1.4851137399673462 0.19643977284431458 0.21605448424816132 -0.0025635547935962677 0.999969482421875 -0.0 0.529496967792511 0.6301011443138123 0 1.0 0 0.0 0 0.0 0 0.0 -1.4743722677230835 0.19633153080940247 0.21605448424816132 0.020813623443245888 0.999755859375 -0.0 0.5351086258888245 0.6307108402252197 0 1.0 0 0.0 0 0.0 0 0.0 -1.4140104055404663 -0.15487372875213623 -0.2839455306529999 -0.9611194133758545 -0.2760094106197357 -0.0 0.9919363260269165 0.4487995505332947 0 1.0 0 0.0 0 0.0 0 0.0 -1.4130885601043701 -0.1580187976360321 0.21605446934700012 -0.9590136408805847 -0.28333383798599243 -0.0 0.5998045206069946 0.2613224983215332 0 1.0 0 0.0 0 0.0 0 0.0 -1.4140104055404663 -0.15487372875213623 0.21605446934700012 -0.9611499309539795 -0.2760094106197357 -0.0 0.5987622737884521 0.26396769285202026 0 1.0 0 0.0 0 0.0 0 0.0 1.3834502696990967 0.12297219038009644 -0.2839455306529999 0.19196142256259918 -0.9813836812973022 -0.0 0.013439804315567017 0.7215794920921326 0 1.0 0 0.0 0 0.0 0 0.0 1.388244390487671 0.12380161881446838 0.21605446934700012 0.1511887013912201 -0.9884945154190063 -0.0 0.46776947379112244 0.5603847503662109 0 1.0 0 0.0 0 0.0 0 0.0 1.3834502696990967 0.12297219038009644 0.21605446934700012 0.19196142256259918 -0.9813836812973022 -0.0 0.4649874269962311 0.55951327085495 0 1.0 0 0.0 0 0.0 0 0.0 -0.13070893287658691 -0.1521543264389038 -0.2839455306529999 -0.7685170769691467 -0.6397900581359863 -0.0 0.052959591150283813 0.5217910408973694 0 1.0 0 0.0 0 0.0 0 0.0 -0.12723302841186523 -0.15609964728355408 0.21605446934700012 -0.7316202521324158 -0.6816614270210266 -0.0 0.4132416844367981 0.3721746802330017 0 1.0 0 0.0 0 0.0 0 0.0 -0.13070893287658691 -0.1521543264389038 0.21605446934700012 -0.7685170769691467 -0.6397900581359863 -0.0 0.41163375973701477 0.37733936309814453 0 1.0 0 0.0 0 0.0 0 0.0 1.1473197937011719 -0.1540418416261673 -0.2839455306529999 0.6581926941871643 -0.7528305649757385 -0.0 0.9222360253334045 0.4110592007637024 0 1.0 0 0.0 0 0.0 0 0.0 1.1533606052398682 -0.14844858646392822 0.21605446934700012 0.6999419927597046 -0.7141636610031128 -0.0 0.5744532942771912 0.270757794380188 0 1.0 0 0.0 0 0.0 0 0.0 1.1473197937011719 -0.1540418416261673 0.21605446934700012 0.6581926941871643 -0.7528305649757385 -0.0 0.5713964104652405 0.2639002203941345 0 1.0 0 0.0 0 0.0 0 0.0 1.4400355815887451 0.1236799955368042 -0.2839455306529999 -0.1902218759059906 -0.981719434261322 -0.0 0.971149206161499 0.7226189374923706 0 1.0 0 0.0 0 0.0 0 0.0 1.4440891742706299 0.12279704213142395 0.21605446934700012 -0.2370677888393402 -0.9714651703834534 -0.0 0.5002896785736084 0.5582361221313477 0 1.0 0 0.0 0 0.0 0 0.0 1.4400355815887451 0.1236799955368042 0.21605446934700012 -0.1902218759059906 -0.981719434261322 -0.0 0.497933030128479 0.5593129396438599 0 1.0 0 0.0 0 0.0 0 0.0 -1.4640979766845703 0.19600680470466614 -0.2839455306529999 0.043336283415555954 0.999053955078125 -0.0 1.0317471027374268 0.825800359249115 0 1.0 0 0.0 0 0.0 0 0.0 -1.4743722677230835 0.19633153080940247 0.21605448424816132 0.020813623443245888 0.999755859375 -0.0 0.5351086258888245 0.6307108402252197 0 1.0 0 0.0 0 0.0 0 0.0 -1.4640979766845703 0.19600680470466614 0.21605448424816132 0.043336283415555954 0.999053955078125 -0.0 0.5404836535453796 0.6309982538223267 0 1.0 0 0.0 0 0.0 0 0.0 -1.6285791397094727 -0.15586857497692108 -0.2839455306529999 -0.7316507697105408 -0.6816614270210266 -0.0 0.10735753178596497 0.4370245933532715 0 1.0 0 0.0 0 0.0 0 0.0 -1.623292326927185 -0.16117845475673676 0.21605446934700012 -0.6841028928756714 -0.7293313145637512 -0.0 0.44477057456970215 0.2596014142036438 0 1.0 0 0.0 0 0.0 0 0.0 -1.6285791397094727 -0.15586857497692108 0.21605446934700012 -0.7316507697105408 -0.6816614270210266 -0.0 0.44213002920150757 0.2660250663757324 0 1.0 0 0.0 0 0.0 0 0.0 -1.4969496726989746 0.1962597668170929 -0.2839455306529999 -0.031373027712106705 0.999481201171875 -0.0 0.0616915225982666 0.8226818442344666 0 1.0 0 0.0 0 0.0 0 0.0 -1.5082894563674927 0.19571977853775024 0.21605448424816132 -0.06512650102376938 0.9978637099266052 -0.0 0.5174651741981506 0.6276100873947144 0 1.0 0 0.0 0 0.0 0 0.0 -1.4969496726989746 0.1962597668170929 0.21605448424816132 -0.031373027712106705 0.999481201171875 -0.0 0.5233350992202759 0.6290465593338013 0 1.0 0 0.0 0 0.0 0 0.0 1.140974998474121 -0.15927754342556 -0.2839455306529999 0.6142460107803345 -0.7890865802764893 -0.0 0.9256055355072021 0.4059785008430481 0 1.0 0 0.0 0 0.0 0 0.0 1.1473197937011719 -0.1540418416261673 0.21605446934700012 0.6581926941871643 -0.7528305649757385 -0.0 0.5713964104652405 0.2639002203941345 0 1.0 0 0.0 0 0.0 0 0.0 1.140974998474121 -0.15927754342556 0.21605446934700012 0.6142460107803345 -0.7890865802764893 -0.0 0.5680148601531982 0.2573285698890686 0 1.0 0 0.0 0 0.0 0 0.0 0.060915231704711914 -0.15869742631912231 -0.2839455306529999 0.6281014680862427 -0.7780998945236206 -0.0 0.9389110207557678 0.5100195407867432 0 1.0 0 0.0 0 0.0 0 0.0 0.06545519828796387 -0.15487372875213623 0.21605446934700012 0.6600848436355591 -0.7511826157569885 -0.0 0.5391175150871277 0.3628878593444824 0 1.0 0 0.0 0 0.0 0 0.0 0.060915231704711914 -0.15869742631912231 0.21605446934700012 0.6281014680862427 -0.7780998945236206 -0.0 0.5364377498626709 0.35780781507492065 0 1.0 0 0.0 0 0.0 0 0.0 0.9150614738464355 -0.15669071674346924 -0.2839455306529999 -0.6262093186378479 -0.7796258330345154 -0.0 0.04683852195739746 0.41246914863586426 0 1.0 0 0.0 0 0.0 0 0.0 0.9252774715423584 -0.1641751527786255 0.21605446934700012 -0.5548264980316162 -0.8319345712661743 -0.0 0.4110276997089386 0.2536557912826538 0 1.0 0 0.0 0 0.0 0 0.0 0.9150614738464355 -0.15669071674346924 0.21605446934700012 -0.6262093186378479 -0.7796258330345154 -0.0 0.40549376606941223 0.2636224627494812 0 1.0 0 0.0 0 0.0 0 0.0 -1.4130885601043701 -0.1580187976360321 -0.2839455306529999 -0.9590136408805847 -0.28333383798599243 -0.0 0.9914758205413818 0.4458812475204468 0 1.0 0 0.0 0 0.0 0 0.0 -1.4121910333633423 -0.1610325127840042 0.21605446934700012 -0.9577013254165649 -0.28766748309135437 -0.0 0.6008166074752808 0.25882768630981445 0 1.0 0 0.0 0 0.0 0 0.0 -1.4130885601043701 -0.1580187976360321 0.21605446934700012 -0.9590136408805847 -0.28333383798599243 -0.0 0.5998045206069946 0.2613224983215332 0 1.0 0 0.0 0 0.0 0 0.0 1.3789622783660889 0.12199193239212036 -0.2839455306529999 0.2373119294643402 -0.9714041352272034 -0.0 0.016692906618118286 0.7200816869735718 0 1.0 0 0.0 0 0.0 0 0.0 1.3834502696990967 0.12297219038009644 0.21605446934700012 0.19196142256259918 -0.9813836812973022 -0.0 0.4649874269962311 0.55951327085495 0 1.0 0 0.0 0 0.0 0 0.0 1.3789622783660889 0.12199193239212036 0.21605446934700012 0.2373119294643402 -0.9714041352272034 -0.0 0.46238431334495544 0.5584733486175537 0 1.0 0 0.0 0 0.0 0 0.0 -0.12723302841186523 -0.15609964728355408 -0.2839455306529999 -0.7316202521324158 -0.6816614270210266 -0.0 0.05095714330673218 0.5173731446266174 0 1.0 0 0.0 0 0.0 0 0.0 -0.12352848052978516 -0.15986010432243347 0.21605446934700012 -0.6927701830863953 -0.7211218476295471 -0.0 0.41502389311790466 0.36715227365493774 0 1.0 0 0.0 0 0.0 0 0.0 -0.12723302841186523 -0.15609964728355408 0.21605446934700012 -0.7316202521324158 -0.6816614270210266 -0.0 0.4132416844367981 0.3721746802330017 0 1.0 0 0.0 0 0.0 0 0.0 1.4440891742706299 0.12279704213142395 -0.2839455306529999 -0.2370677888393402 -0.9714651703834534 -0.0 0.968167781829834 0.7213026285171509 0 1.0 0 0.0 0 0.0 0 0.0 1.4479458332061768 0.12175354361534119 0.21605446934700012 -0.286935031414032 -0.9579149484634399 -0.0 0.5025306344032288 0.556988000869751 0 1.0 0 0.0 0 0.0 0 0.0 1.4440891742706299 0.12279704213142395 0.21605446934700012 -0.2370677888393402 -0.9714651703834534 -0.0 0.5002896785736084 0.5582361221313477 0 1.0 0 0.0 0 0.0 0 0.0 -1.4542906284332275 0.1954655945301056 -0.2839455306529999 0.06796471774578094 0.9976806044578552 -0.0 1.02272629737854 0.8254101276397705 0 1.0 0 0.0 0 0.0 0 0.0 -1.4640979766845703 0.19600680470466614 0.21605448424816132 0.043336283415555954 0.999053955078125 -0.0 0.5404836535453796 0.6309982538223267 0 1.0 0 0.0 0 0.0 0 0.0 -1.4542906284332275 0.1954655945301056 0.21605448424816132 0.06796471774578094 0.9976806044578552 -0.0 0.5456142425537109 0.6309813857078552 0 1.0 0 0.0 0 0.0 0 0.0 -1.5082894563674927 0.19571977853775024 -0.2839455306529999 -0.06512650102376938 0.9978637099266052 -0.0 0.07161593437194824 0.8200180530548096 0 1.0 0 0.0 0 0.0 0 0.0 -1.5191329717636108 0.19481980800628662 0.21605448424816132 -0.10180974751710892 0.9947813153266907 -0.0 0.5118923187255859 0.6258165240287781 0 1.0 0 0.0 0 0.0 0 0.0 -1.5082894563674927 0.19571977853775024 0.21605448424816132 -0.06512650102376938 0.9978637099266052 -0.0 0.5174651741981506 0.6276100873947144 0 1.0 0 0.0 0 0.0 0 0.0 1.1343259811401367 -0.16415569186210632 -0.2839455306529999 0.5680715441703796 -0.8229621052742004 -0.0 0.9291298389434814 0.4012235999107361 0 1.0 0 0.0 0 0.0 0 0.0 1.140974998474121 -0.15927754342556 0.21605446934700012 0.6142460107803345 -0.7890865802764893 -0.0 0.5680148601531982 0.2573285698890686 0 1.0 0 0.0 0 0.0 0 0.0 1.1343259811401367 -0.16415569186210632 0.21605446934700012 0.5680715441703796 -0.8229621052742004 -0.0 0.5642899870872498 0.25105178356170654 0 1.0 0 0.0 0 0.0 0 0.0 -1.3165510892868042 -0.1623399257659912 -0.2839455306529999 0.9355143904685974 0.35322123765945435 -0.0 0.9460681080818176 0.45470309257507324 0 1.0 0 0.0 0 0.0 0 0.0 -1.3180822134017944 -0.15815743803977966 0.21605446934700012 0.9425641894340515 0.3339335322380066 -0.0 0.6523339748382568 0.3003944158554077 0 1.0 0 0.0 0 0.0 0 0.0 -1.3165510892868042 -0.1623399257659912 0.21605446934700012 0.9355143904685974 0.35322123765945435 -0.0 0.6536282896995544 0.29756665229797363 0 1.0 0 0.0 0 0.0 0 0.0 0.0561976432800293 -0.1623460054397583 -0.2839455306529999 0.5953550934791565 -0.8034607768058777 -0.0 0.9418076276779175 0.5059475302696228 0 1.0 0 0.0 0 0.0 0 0.0 0.060915231704711914 -0.15869742631912231 0.21605446934700012 0.6281014680862427 -0.7780998945236206 -0.0 0.5364377498626709 0.35780781507492065 0 1.0 0 0.0 0 0.0 0 0.0 0.0561976432800293 -0.1623460054397583 0.21605446934700012 0.5953550934791565 -0.8034607768058777 -0.0 0.5335861444473267 0.3529229164123535 0 1.0 0 0.0 0 0.0 0 0.0 1.3747813701629639 0.12086087465286255 -0.2839455306529999 0.28769800066947937 -0.9577013254165649 -0.0 0.01968926191329956 0.7184059023857117 0 1.0 0 0.0 0 0.0 0 0.0 1.3789622783660889 0.12199193239212036 0.21605446934700012 0.2373119294643402 -0.9714041352272034 -0.0 0.46238431334495544 0.5584733486175537 0 1.0 0 0.0 0 0.0 0 0.0 1.3747813701629639 0.12086087465286255 0.21605446934700012 0.28769800066947937 -0.9577013254165649 -0.0 0.4599589407444 0.5572682619094849 0 1.0 0 0.0 0 0.0 0 0.0 -0.12352848052978516 -0.15986010432243347 -0.2839455306529999 -0.6927701830863953 -0.7211218476295471 -0.0 0.04883506894111633 0.5131371021270752 0 1.0 0 0.0 0 0.0 0 0.0 -0.11959528923034668 -0.16343571245670319 0.21605446934700012 -0.652363657951355 -0.7578661441802979 -0.0 0.4169861674308777 0.36227452754974365 0 1.0 0 0.0 0 0.0 0 0.0 -0.12352848052978516 -0.15986010432243347 0.21605446934700012 -0.6927701830863953 -0.7211218476295471 -0.0 0.41502389311790466 0.36715227365493774 0 1.0 0 0.0 0 0.0 0 0.0 1.127382755279541 -0.1686592400074005 -0.2839455306529999 0.5195471048355103 -0.8544266819953918 -0.0 0.9328085780143738 0.3968101739883423 0 1.0 0 0.0 0 0.0 0 0.0 1.1343259811401367 -0.16415569186210632 0.21605446934700012 0.5680715441703796 -0.8229621052742004 -0.0 0.5642899870872498 0.25105178356170654 0 1.0 0 0.0 0 0.0 0 0.0 1.127382755279541 -0.1686592400074005 0.21605446934700012 0.5195471048355103 -0.8544266819953918 -0.0 0.5602080821990967 0.2450999617576599 0 1.0 0 0.0 0 0.0 0 0.0 -1.4391368627548218 -0.16161872446537018 -0.2839455306529999 0.5882442593574524 -0.808648943901062 -0.0 1.0055162906646729 0.4394006133079529 0 1.0 0 0.0 0 0.0 0 0.0 -1.4347147941589355 -0.158298522233963 0.21605446934700012 0.6121707558631897 -0.790704071521759 -0.0 0.5846648812294006 0.254062294960022 0 1.0 0 0.0 0 0.0 0 0.0 -1.4391368627548218 -0.16161872446537018 0.21605446934700012 0.5882442593574524 -0.808648943901062 -0.0 0.5818189978599548 0.24963682889938354 0 1.0 0 0.0 0 0.0 0 0.0 1.4479458332061768 0.12175354361534119 -0.2839455306529999 -0.286935031414032 -0.9579149484634399 -0.0 0.9653576612472534 0.7197879552841187 0 1.0 0 0.0 0 0.0 0 0.0 1.4516055583953857 0.12054949998855591 0.21605446934700012 -0.3397320508956909 -0.9405194520950317 -0.0 0.5046564340591431 0.5555700063705444 0 1.0 0 0.0 0 0.0 0 0.0 1.4479458332061768 0.12175354361534119 0.21605446934700012 -0.286935031414032 -0.9579149484634399 -0.0 0.5025306344032288 0.556988000869751 0 1.0 0 0.0 0 0.0 0 0.0 -1.4449502229690552 0.19470790028572083 -0.2839455306529999 0.0949736014008522 0.9954527616500854 -0.0 1.0142098665237427 0.8244448900222778 0 1.0 0 0.0 0 0.0 0 0.0 -1.4542906284332275 0.1954655945301056 0.21605448424816132 0.06796471774578094 0.9976806044578552 -0.0 0.5456142425537109 0.6309813857078552 0 1.0 0 0.0 0 0.0 0 0.0 -1.4449502229690552 0.19470790028572083 0.21605448424816132 0.0949736014008522 0.9954527616500854 -0.0 0.550495445728302 0.6306784749031067 0 1.0 0 0.0 0 0.0 0 0.0 0.9252774715423584 -0.1641751527786255 -0.2839455306529999 -0.5548264980316162 -0.8319345712661743 -0.0 0.04151874780654907 0.40473806858062744 0 1.0 0 0.0 0 0.0 0 0.0 0.9361939430236816 -0.1707790642976761 0.21605445444583893 -0.48020875453948975 -0.8771324753761292 -0.0 0.41742268204689026 0.24444663524627686 0 1.0 0 0.0 0 0.0 0 0.0 0.9252774715423584 -0.1641751527786255 0.21605446934700012 -0.5548264980316162 -0.8319345712661743 -0.0 0.4110276997089386 0.2536557912826538 0 1.0 0 0.0 0 0.0 0 0.0 -1.4121910333633423 -0.1610325127840042 -0.2839455306529999 -0.9577013254165649 -0.28766748309135437 -0.0 0.9910306334495544 0.4431183338165283 0 1.0 0 0.0 0 0.0 0 0.0 -1.4113178253173828 -0.16391488909721375 0.21605446934700012 -0.9562975168228149 -0.2923673093318939 -0.0 0.6017979383468628 0.2564786672592163 0 1.0 0 0.0 0 0.0 0 0.0 -1.4121910333633423 -0.1610325127840042 0.21605446934700012 -0.9577013254165649 -0.28766748309135437 -0.0 0.6008166074752808 0.25882768630981445 0 1.0 0 0.0 0 0.0 0 0.0 -1.5191329717636108 0.19481980800628662 -0.2839455306529999 -0.10180974751710892 0.9947813153266907 -0.0 0.08076804876327515 0.8166956305503845 0 1.0 0 0.0 0 0.0 0 0.0 -1.5294803380966187 0.19355982542037964 0.21605448424816132 -0.14157536625862122 0.9898983836174011 -0.0 0.5066177845001221 0.6236889958381653 0 1.0 0 0.0 0 0.0 0 0.0 -1.5191329717636108 0.19481980800628662 0.21605448424816132 -0.10180974751710892 0.9947813153266907 -0.0 0.5118923187255859 0.6258165240287781 0 1.0 0 0.0 0 0.0 0 0.0 0.051302433013916016 -0.1658194363117218 -0.2839455306529999 0.5619983673095703 -0.82711261510849 -0.0 0.944807767868042 0.5020663142204285 0 1.0 0 0.0 0 0.0 0 0.0 0.0561976432800293 -0.1623460054397583 0.21605446934700012 0.5953550934791565 -0.8034607768058777 -0.0 0.5335861444473267 0.3529229164123535 0 1.0 0 0.0 0 0.0 0 0.0 0.051302433013916016 -0.1658194363117218 0.21605446934700012 0.5619983673095703 -0.82711261510849 -0.0 0.5305591821670532 0.3482418656349182 0 1.0 0 0.0 0 0.0 0 0.0 -1.623292326927185 -0.16117845475673676 -0.2839455306529999 -0.6841028928756714 -0.7293618321418762 -0.0 0.10441264510154724 0.4322202205657959 0 1.0 0 0.0 0 0.0 0 0.0 -1.6176066398620605 -0.1661575436592102 0.21605446934700012 -0.6310006976127625 -0.7757499814033508 -0.0 0.44777432084083557 0.2533940076828003 0 1.0 0 0.0 0 0.0 0 0.0 -1.623292326927185 -0.16117845475673676 0.21605446934700012 -0.6841028928756714 -0.7293313145637512 -0.0 0.44477057456970215 0.2596014142036438 0 1.0 0 0.0 0 0.0 0 0.0 1.5743725299835205 0.11358323693275452 -0.2839455306529999 0.9285256266593933 0.3712271451950073 -0.0 0.8871409893035889 0.6785174608230591 0 1.0 0 0.0 0 0.0 0 0.0 1.571234941482544 0.12087064981460571 0.21605446934700012 0.9072847962379456 0.4204840362071991 -0.0 0.5672978758811951 0.5468026995658875 0 1.0 0 0.0 0 0.0 0 0.0 1.5743725299835205 0.11358323693275452 0.21605446934700012 0.9285256266593933 0.3712271451950073 -0.0 0.5691015720367432 0.5396533012390137 0 1.0 0 0.0 0 0.0 0 0.0 -0.11959528923034668 -0.16343571245670319 -0.2839455306529999 -0.652363657951355 -0.7578661441802979 -0.0 0.04659029841423035 0.5090819597244263 0 1.0 0 0.0 0 0.0 0 0.0 -0.1154334545135498 -0.16682644188404083 0.21605446934700012 -0.6108585000038147 -0.791711151599884 -0.0 0.41913461685180664 0.35754483938217163 0 1.0 0 0.0 0 0.0 0 0.0 -0.11959528923034668 -0.16343571245670319 0.21605446934700012 -0.652363657951355 -0.7578661441802979 -0.0 0.4169861674308777 0.36227452754974365 0 1.0 0 0.0 0 0.0 0 0.0 1.120154857635498 -0.17277118563652039 -0.2839455306529999 0.4693136513233185 -0.8830225467681885 -0.0 0.9366409182548523 0.39275485277175903 0 1.0 0 0.0 0 0.0 0 0.0 1.127382755279541 -0.1686592400074005 0.21605446934700012 0.5195471048355103 -0.8544266819953918 -0.0 0.5602080821990967 0.2450999617576599 0 1.0 0 0.0 0 0.0 0 0.0 1.120154857635498 -0.17277118563652039 0.21605445444583893 0.4693136513233185 -0.8830225467681885 -0.0 0.5557567477226257 0.23950564861297607 0 1.0 0 0.0 0 0.0 0 0.0 -1.4360769987106323 0.19373372197151184 -0.2839455306529999 0.12469863146543503 0.9921872615814209 -0.0 1.006239652633667 0.8229754567146301 0 1.0 0 0.0 0 0.0 0 0.0 -1.4449502229690552 0.19470790028572083 0.21605448424816132 0.0949736014008522 0.9954527616500854 -0.0 0.550495445728302 0.6306784749031067 0 1.0 0 0.0 0 0.0 0 0.0 -1.4360769987106323 0.19373372197151184 0.21605448424816132 0.12469863146543503 0.9921872615814209 -0.0 0.5551243424415588 0.6301071643829346 0 1.0 0 0.0 0 0.0 0 0.0 0.9361939430236816 -0.1707790642976761 -0.2839455306529999 -0.48020875453948975 -0.8771324753761292 -0.0 0.0358147919178009 0.39780449867248535 0 1.0 0 0.0 0 0.0 0 0.0 0.9478108882904053 -0.17650245130062103 0.21605445444583893 -0.4042481780052185 -0.9146091938018799 -0.0 0.4247432053089142 0.23605746030807495 0 1.0 0 0.0 0 0.0 0 0.0 0.9361939430236816 -0.1707790642976761 0.21605445444583893 -0.48020875453948975 -0.8771324753761292 -0.0 0.41742268204689026 0.24444663524627686 0 1.0 0 0.0 0 0.0 0 0.0 1.3709065914154053 0.119579017162323 -0.2839455306529999 0.34345531463623047 -0.939146101474762 -0.0 0.02243223786354065 0.7165648937225342 0 1.0 0 0.0 0 0.0 0 0.0 1.3747813701629639 0.12086087465286255 0.21605446934700012 0.28769800066947937 -0.9577013254165649 -0.0 0.4599589407444 0.5572682619094849 0 1.0 0 0.0 0 0.0 0 0.0 1.3709065914154053 0.119579017162323 0.21605446934700012 0.34345531463623047 -0.939146101474762 -0.0 0.45770883560180664 0.5559004545211792 0 1.0 0 0.0 0 0.0 0 0.0 -1.4436075687408447 -0.16476865112781525 -0.2839455306529999 0.5632495880126953 -0.82625812292099 -0.0 1.0079450607299805 0.43590283393859863 0 1.0 0 0.0 0 0.0 0 0.0 -1.4391368627548218 -0.16161872446537018 0.21605446934700012 0.5882442593574524 -0.808648943901062 -0.0 0.5818189978599548 0.24963682889938354 0 1.0 0 0.0 0 0.0 0 0.0 -1.4436075687408447 -0.16476865112781525 0.21605446934700012 0.5632495880126953 -0.82625812292099 -0.0 0.5788551568984985 0.2454366683959961 0 1.0 0 0.0 0 0.0 0 0.0 1.4516055583953857 0.12054949998855591 -0.2839455306529999 -0.3397320508956909 -0.9405194520950317 -0.0 0.9627194404602051 0.7180825471878052 0 1.0 0 0.0 0 0.0 0 0.0 1.4550678730010986 0.1191849410533905 0.21605446934700012 -0.395092636346817 -0.9186071157455444 -0.0 0.5066676139831543 0.553982675075531 0 1.0 0 0.0 0 0.0 0 0.0 1.4516055583953857 0.12054949998855591 0.21605446934700012 -0.3397320508956909 -0.9405194520950317 -0.0 0.5046564340591431 0.5555700063705444 0 1.0 0 0.0 0 0.0 0 0.0 0.04622983932495117 -0.1691177487373352 -0.2839455306529999 0.5282753705978394 -0.8490554690361023 -0.0 0.9479126930236816 0.4983783960342407 0 1.0 0 0.0 0 0.0 0 0.0 0.051302433013916016 -0.1658194363117218 0.21605446934700012 0.5619983673095703 -0.82711261510849 -0.0 0.5305591821670532 0.3482418656349182 0 1.0 0 0.0 0 0.0 0 0.0 0.04622983932495117 -0.1691177487373352 0.21605446934700012 0.5282753705978394 -0.8490554690361023 -0.0 0.5273538827896118 0.3437744975090027 0 1.0 0 0.0 0 0.0 0 0.0 -1.4276705980300903 0.19254305958747864 -0.2839455306529999 0.15738394856452942 0.9875179529190063 -0.0 0.9988397359848022 0.8210697174072266 0 1.0 0 0.0 0 0.0 0 0.0 -1.4360769987106323 0.19373372197151184 0.21605448424816132 0.12469863146543503 0.9921872615814209 -0.0 0.5551243424415588 0.6301071643829346 0 1.0 0 0.0 0 0.0 0 0.0 -1.4276705980300903 0.19254305958747864 0.21605448424816132 0.15738394856452942 0.9875179529190063 -0.0 0.5595005750656128 0.6292844414710999 0 1.0 0 0.0 0 0.0 0 0.0 -0.1154334545135498 -0.16682644188404083 -0.2839455306529999 -0.6108585000038147 -0.791711151599884 -0.0 0.0442197322845459 0.5052071809768677 0 1.0 0 0.0 0 0.0 0 0.0 -0.11104297637939453 -0.1700323224067688 0.21605446934700012 -0.5687124133110046 -0.8225043416023254 -0.0 0.4214754104614258 0.35296761989593506 0 1.0 0 0.0 0 0.0 0 0.0 -0.1154334545135498 -0.16682644188404083 0.21605446934700012 -0.6108585000038147 -0.791711151599884 -0.0 0.41913461685180664 0.35754483938217163 0 1.0 0 0.0 0 0.0 0 0.0 -1.5294803380966187 0.19355982542037964 -0.2839455306529999 -0.14157536625862122 0.9898983836174011 -0.0 0.08913213014602661 0.8128165006637573 0 1.0 0 0.0 0 0.0 0 0.0 -1.5393314361572266 0.19193986058235168 0.21605448424816132 -0.18469801545143127 0.982787549495697 -0.0 0.5016401410102844 0.6212486028671265 0 1.0 0 0.0 0 0.0 0 0.0 -1.5294803380966187 0.19355982542037964 0.21605448424816132 -0.14157536625862122 0.9898983836174011 -0.0 0.5066177845001221 0.6236889958381653 0 1.0 0 0.0 0 0.0 0 0.0 1.112642526626587 -0.17649151384830475 -0.2839455306529999 0.41837823390960693 -0.9082613587379456 -0.0 0.9406315088272095 0.38906025886535645 0 1.0 0 0.0 0 0.0 0 0.0 1.120154857635498 -0.17277118563652039 0.21605445444583893 0.4693136513233185 -0.8830225467681885 -0.0 0.5557567477226257 0.23950564861297607 0 1.0 0 0.0 0 0.0 0 0.0 1.112642526626587 -0.17649151384830475 0.21605445444583893 0.41837823390960693 -0.9082613587379456 -0.0 0.550920307636261 0.23428791761398315 0 1.0 0 0.0 0 0.0 0 0.0 -1.3149055242538452 -0.1665686070919037 -0.2839455306529999 0.9283425211906433 0.3716544210910797 -0.0 0.9456060528755188 0.45131754875183105 0 1.0 0 0.0 0 0.0 0 0.0 -1.3165510892868042 -0.1623399257659912 0.21605446934700012 0.9355143904685974 0.35322123765945435 -0.0 0.6536282896995544 0.29756665229797363 0 1.0 0 0.0 0 0.0 0 0.0 -1.3149055242538452 -0.1665686070919037 0.21605446934700012 0.9283425211906433 0.3716544210910797 -0.0 0.6549756526947021 0.2948046922683716 0 1.0 0 0.0 0 0.0 0 0.0 1.2651219367980957 0.1198587417602539 -0.2839455306529999 -0.9349040389060974 0.35483869910240173 -0.0 0.08682137727737427 0.6905054450035095 0 1.0 0 0.0 0 0.0 0 0.0 1.2627358436584473 0.11276590824127197 0.21605446934700012 -0.9591967463493347 0.28269293904304504 -0.0 0.4022684395313263 0.5451506972312927 0 1.0 0 0.0 0 0.0 0 0.0 1.2651219367980957 0.1198587417602539 0.21605446934700012 -0.9349040389060974 0.35483869910240173 -0.0 0.4038437008857727 0.5518712997436523 0 1.0 0 0.0 0 0.0 0 0.0 -1.4113178253173828 -0.16391488909721375 -0.2839455306529999 -0.9562669992446899 -0.2923673093318939 -0.0 0.9906004667282104 0.4405066967010498 0 1.0 0 0.0 0 0.0 0 0.0 -1.4104689359664917 -0.1666659116744995 0.21605446934700012 -0.9546800255775452 -0.29752495884895325 -0.0 0.6027480363845825 0.25427156686782837 0 1.0 0 0.0 0 0.0 0 0.0 -1.4113178253173828 -0.16391488909721375 0.21605446934700012 -0.9562975168228149 -0.2923673093318939 -0.0 0.6017979383468628 0.2564786672592163 0 1.0 0 0.0 0 0.0 0 0.0 1.1048455238342285 -0.1798202246427536 -0.2839455306529999 0.3672292232513428 -0.9301126003265381 -0.0 0.9447846412658691 0.3857303857803345 0 1.0 0 0.0 0 0.0 0 0.0 1.112642526626587 -0.17649151384830475 0.21605445444583893 0.41837823390960693 -0.9082613587379456 -0.0 0.550920307636261 0.23428791761398315 0 1.0 0 0.0 0 0.0 0 0.0 1.1048455238342285 -0.1798202246427536 0.21605445444583893 0.3672292232513428 -0.9301126003265381 -0.0 0.5456847548484802 0.2294696569442749 0 1.0 0 0.0 0 0.0 0 0.0 0.040979623794555664 -0.17224091291427612 0.21605443954467773 0.4943388104438782 -0.869228184223175 -0.0 0.5239675045013428 0.3395310640335083 0 1.0 0 0.0 0 0.0 0 0.0 0.04622983932495117 -0.1691177487373352 -0.2839455306529999 0.5282753705978394 -0.8490554690361023 -0.0 0.9479126930236816 0.4983783960342407 0 1.0 0 0.0 0 0.0 0 0.0 0.04622983932495117 -0.1691177487373352 0.21605446934700012 0.5282753705978394 -0.8490554690361023 -0.0 0.5273538827896118 0.3437744975090027 0 1.0 0 0.0 0 0.0 0 0.0 -1.4197313785552979 0.19113591313362122 -0.2839455306529999 0.19345682859420776 0.9810785055160522 -0.0 0.9920201301574707 0.8187916874885559 0 1.0 0 0.0 0 0.0 0 0.0 -1.4276705980300903 0.19254305958747864 0.21605448424816132 0.15738394856452942 0.9875179529190063 -0.0 0.5595005750656128 0.6292844414710999 0 1.0 0 0.0 0 0.0 0 0.0 -1.4197313785552979 0.19113591313362122 0.21605448424816132 0.19345682859420776 0.9810785055160522 -0.0 0.563625156879425 0.6282258033752441 0 1.0 0 0.0 0 0.0 0 0.0 0.9478108882904053 -0.17650245130062103 -0.2839455306529999 -0.4042481780052185 -0.9146091938018799 -0.0 0.029709041118621826 0.3916749358177185 0 1.0 0 0.0 0 0.0 0 0.0 0.9601285457611084 -0.18134532868862152 0.21605445444583893 -0.32877591252326965 -0.9443953037261963 -0.0 0.4330454468727112 0.22857457399368286 0 1.0 0 0.0 0 0.0 0 0.0 0.9478108882904053 -0.17650245130062103 0.21605445444583893 -0.4042481780052185 -0.9146091938018799 -0.0 0.4247432053089142 0.23605746030807495 0 1.0 0 0.0 0 0.0 0 0.0 1.367337942123413 0.11814635992050171 -0.2839455306529999 0.4048890769481659 -0.9143345355987549 -0.0 0.0249251127243042 0.7145698070526123 0 1.0 0 0.0 0 0.0 0 0.0 1.3709065914154053 0.119579017162323 0.21605446934700012 0.34345531463623047 -0.939146101474762 -0.0 0.45770883560180664 0.5559004545211792 0 1.0 0 0.0 0 0.0 0 0.0 1.367337942123413 0.11814635992050171 0.21605446934700012 0.4048890769481659 -0.9143345355987549 -0.0 0.4556320011615753 0.5543718338012695 0 1.0 0 0.0 0 0.0 0 0.0 -0.11104297637939453 -0.1700323224067688 -0.2839455306529999 -0.5687124133110046 -0.8225043416023254 -0.0 0.04172012209892273 0.5015124082565308 0 1.0 0 0.0 0 0.0 0 0.0 -0.10642385482788086 -0.1730533391237259 0.21605445444583893 -0.5263221859931946 -0.8502761721611023 -0.0 0.4240148663520813 0.3485482335090637 0 1.0 0 0.0 0 0.0 0 0.0 -0.11104297637939453 -0.1700323224067688 0.21605446934700012 -0.5687124133110046 -0.8225043416023254 -0.0 0.4214754104614258 0.35296761989593506 0 1.0 0 0.0 0 0.0 0 0.0 -1.5393314361572266 0.19193986058235168 -0.2839455306529999 -0.18469801545143127 0.982787549495697 -0.0 0.0967160165309906 0.8084730505943298 0 1.0 0 0.0 0 0.0 0 0.0 -1.5486863851547241 0.18995991349220276 0.21605448424816132 -0.23126927018165588 0.9728690385818481 -0.0 0.4969555139541626 0.6185140609741211 0 1.0 0 0.0 0 0.0 0 0.0 -1.5393314361572266 0.19193986058235168 0.21605448424816132 -0.18469801545143127 0.982787549495697 -0.0 0.5016401410102844 0.6212486028671265 0 1.0 0 0.0 0 0.0 0 0.0 -1.4481269121170044 -0.1677483171224594 -0.2839455306529999 0.5372173190116882 -0.843409538269043 -0.0 1.0103981494903564 0.43259626626968384 0 1.0 0 0.0 0 0.0 0 0.0 -1.4436075687408447 -0.16476865112781525 0.21605446934700012 0.5632495880126953 -0.82625812292099 -0.0 0.5788551568984985 0.2454366683959961 0 1.0 0 0.0 0 0.0 0 0.0 -1.4481269121170044 -0.1677483171224594 0.21605446934700012 0.5372173190116882 -0.843409538269043 -0.0 0.5757732391357422 0.2414644956588745 0 1.0 0 0.0 0 0.0 0 0.0 1.4550678730010986 0.1191849410533905 -0.2839455306529999 -0.395092636346817 -0.9186071157455444 -0.0 0.9602533578872681 0.716193675994873 0 1.0 0 0.0 0 0.0 0 0.0 1.4583332538604736 0.11765983700752258 0.21605446934700012 -0.4525589644908905 -0.8917203545570374 -0.0 0.5085653066635132 0.5522264838218689 0 1.0 0 0.0 0 0.0 0 0.0 1.4550678730010986 0.1191849410533905 0.21605446934700012 -0.395092636346817 -0.9186071157455444 -0.0 0.5066676139831543 0.553982675075531 0 1.0 0 0.0 0 0.0 0 0.0 -1.6176066398620605 -0.1661575436592102 -0.2839455306529999 -0.6310006976127625 -0.7757499814033508 -0.0 0.10129424929618835 0.42771822214126587 0 1.0 0 0.0 0 0.0 0 0.0 -1.61158287525177 -0.17070366442203522 0.21605445444583893 -0.5730155110359192 -0.8195135593414307 -0.0 0.4511343836784363 0.24751901626586914 0 1.0 0 0.0 0 0.0 0 0.0 -1.6176066398620605 -0.1661575436592102 0.21605446934700012 -0.6310006976127625 -0.7757499814033508 -0.0 0.44777432084083557 0.2533940076828003 0 1.0 0 0.0 0 0.0 0 0.0 1.0967638492584229 -0.18275731801986694 -0.2839455306529999 0.3164159059524536 -0.9486068487167358 -0.0 0.9491041898727417 0.382770836353302 0 1.0 0 0.0 0 0.0 0 0.0 1.1048455238342285 -0.1798202246427536 0.21605445444583893 0.3672292232513428 -0.9301126003265381 -0.0 0.5456847548484802 0.2294696569442749 0 1.0 0 0.0 0 0.0 0 0.0 1.0967638492584229 -0.18275731801986694 0.21605445444583893 0.3164159059524536 -0.9486068487167358 -0.0 0.5400393009185791 0.22507810592651367 0 1.0 0 0.0 0 0.0 0 0.0 0.03555178642272949 -0.17518897354602814 -0.2839455306529999 0.4603717029094696 -0.887691855430603 -0.0 0.9544415473937988 0.49159348011016846 0 1.0 0 0.0 0 0.0 0 0.0 0.040979623794555664 -0.17224091291427612 0.21605443954467773 0.4943388104438782 -0.869228184223175 -0.0 0.5239675045013428 0.3395310640335083 0 1.0 0 0.0 0 0.0 0 0.0 0.03555178642272949 -0.17518897354602814 0.21605445444583893 0.4603717029094696 -0.887691855430603 -0.0 0.5203983187675476 0.33552277088165283 0 1.0 0 0.0 0 0.0 0 0.0 -1.4122591018676758 0.18951231241226196 -0.2839455306529999 0.23322245478630066 0.9724112749099731 -0.0 0.9857782125473022 0.8161996603012085 0 1.0 0 0.0 0 0.0 0 0.0 -1.4197313785552979 0.19113591313362122 0.21605448424816132 0.19345682859420776 0.9810785055160522 -0.0 0.563625156879425 0.6282258033752441 0 1.0 0 0.0 0 0.0 0 0.0 -1.4122591018676758 0.18951231241226196 0.21605448424816132 0.23322245478630066 0.9724112749099731 -0.0 0.5675007104873657 0.6269457340240479 0 1.0 0 0.0 0 0.0 0 0.0 0.9601285457611084 -0.18134532868862152 -0.2839455306529999 -0.32877591252326965 -0.9443953037261963 -0.0 0.023186177015304565 0.3863646388053894 0 1.0 0 0.0 0 0.0 0 0.0 0.9731466770172119 -0.18530766665935516 0.21605445444583893 -0.2553483545780182 -0.9668263792991638 -0.0 0.4423677325248718 0.22210901975631714 0 1.0 0 0.0 0 0.0 0 0.0 0.9601285457611084 -0.18134532868862152 0.21605445444583893 -0.32877591252326965 -0.9443953037261963 -0.0 0.4330454468727112 0.22857457399368286 0 1.0 0 0.0 0 0.0 0 0.0 1.3640763759613037 0.1165628731250763 -0.2839455306529999 0.47178563475608826 -0.8816797137260437 -0.0 0.02717110514640808 0.7124300003051758 0 1.0 0 0.0 0 0.0 0 0.0 1.367337942123413 0.11814635992050171 0.21605446934700012 0.4048890769481659 -0.9143345355987549 -0.0 0.4556320011615753 0.5543718338012695 0 1.0 0 0.0 0 0.0 0 0.0 1.3640763759613037 0.1165628731250763 0.21605446934700012 0.47178563475608826 -0.8816797137260437 -0.0 0.4537268579006195 0.5526838302612305 0 1.0 0 0.0 0 0.0 0 0.0 -0.10642385482788086 -0.1730533391237259 -0.2839455306529999 -0.5263221859931946 -0.8502761721611023 -0.0 0.03908824920654297 0.49799811840057373 0 1.0 0 0.0 0 0.0 0 0.0 -0.10157608985900879 -0.1758894920349121 0.21605445444583893 -0.4847559928894043 -0.8746299743652344 -0.0 0.42675918340682983 0.34429383277893066 0 1.0 0 0.0 0 0.0 0 0.0 -0.10642385482788086 -0.1730533391237259 0.21605445444583893 -0.5263221859931946 -0.8502761721611023 -0.0 0.4240148663520813 0.3485482335090637 0 1.0 0 0.0 0 0.0 0 0.0 -1.5486863851547241 0.18995991349220276 -0.2839455306529999 -0.23126927018165588 0.9728690385818481 -0.0 0.10354465246200562 0.8037464022636414 0 1.0 0 0.0 0 0.0 0 0.0 -1.5575450658798218 0.18761995434761047 0.21605448424816132 -0.28141117095947266 0.9595629572868347 -0.0 0.4925583004951477 0.6155014038085938 0 1.0 0 0.0 0 0.0 0 0.0 -1.5486863851547241 0.18995991349220276 0.21605448424816132 -0.23126927018165588 0.9728690385818481 -0.0 0.4969555139541626 0.6185140609741211 0 1.0 0 0.0 0 0.0 0 0.0 -1.3131457567214966 -0.17084351181983948 -0.2839455306529999 0.921079158782959 0.3892941176891327 -0.0 0.945106029510498 0.4479633569717407 0 1.0 0 0.0 0 0.0 0 0.0 -1.3149055242538452 -0.1665686070919037 0.21605446934700012 0.9283425211906433 0.3716544210910797 -0.0 0.6549756526947021 0.2948046922683716 0 1.0 0 0.0 0 0.0 0 0.0 -1.3131457567214966 -0.17084351181983948 0.21605445444583893 0.921079158782959 0.3892941176891327 -0.0 0.656374454498291 0.2921108603477478 0 1.0 0 0.0 0 0.0 0 0.0 1.4583332538604736 0.11765983700752258 -0.2839455306529999 -0.4525589644908905 -0.8917203545570374 -0.0 0.9579584002494812 0.7141270637512207 0 1.0 0 0.0 0 0.0 0 0.0 1.4614017009735107 0.11597418785095215 0.21605446934700012 -0.5114291906356812 -0.8593096733093262 -0.0 0.5103503465652466 0.5503014326095581 0 1.0 0 0.0 0 0.0 0 0.0 1.4583332538604736 0.11765983700752258 0.21605446934700012 -0.4525589644908905 -0.8917203545570374 -0.0 0.5085653066635132 0.5522264838218689 0 1.0 0 0.0 0 0.0 0 0.0 -1.4104689359664917 -0.1666659116744995 -0.2839455306529999 -0.9546800255775452 -0.29752495884895325 -0.0 0.9901849031448364 0.4380425810813904 0 1.0 0 0.0 0 0.0 0 0.0 -1.409644365310669 -0.1692855805158615 0.21605446934700012 -0.9529099464416504 -0.3031708598136902 -0.0 0.6036663055419922 0.2522021532058716 0 1.0 0 0.0 0 0.0 0 0.0 -1.4104689359664917 -0.1666659116744995 0.21605446934700012 -0.9546800255775452 -0.29752495884895325 -0.0 0.6027480363845825 0.25427156686782837 0 1.0 0 0.0 0 0.0 0 0.0 1.088397741317749 -0.18530280888080597 -0.2839455306529999 0.26642659306526184 -0.9638355374336243 -0.0 0.9535930156707764 0.3801887631416321 0 1.0 0 0.0 0 0.0 0 0.0 1.0967638492584229 -0.18275731801986694 0.21605445444583893 0.3164159059524536 -0.9486068487167358 -0.0 0.5400393009185791 0.22507810592651367 0 1.0 0 0.0 0 0.0 0 0.0 1.088397741317749 -0.18530280888080597 0.21605445444583893 0.26642659306526184 -0.9638355374336243 -0.0 0.5339774489402771 0.22114479541778564 0 1.0 0 0.0 0 0.0 0 0.0 0.03000950813293457 -0.17793026566505432 -0.2839455306529999 0.42597734928131104 -0.904721200466156 -0.0 0.9578284025192261 0.48853766918182373 0 1.0 0 0.0 0 0.0 0 0.0 0.03555178642272949 -0.17518897354602814 0.21605445444583893 0.4603717029094696 -0.887691855430603 -0.0 0.5203983187675476 0.33552277088165283 0 1.0 0 0.0 0 0.0 0 0.0 0.03000950813293457 -0.17793026566505432 0.21605445444583893 0.42597734928131104 -0.904721200466156 -0.0 0.5166881084442139 0.33180397748947144 0 1.0 0 0.0 0 0.0 0 0.0 -1.4052537679672241 0.1876722276210785 -0.2839455306529999 0.2771080732345581 0.9608142375946045 -0.0 0.9801024794578552 0.8133453130722046 0 1.0 0 0.0 0 0.0 0 0.0 -1.4122591018676758 0.18951231241226196 0.21605448424816132 0.23322245478630066 0.9724112749099731 -0.0 0.5675007104873657 0.6269457340240479 0 1.0 0 0.0 0 0.0 0 0.0 -1.4052537679672241 0.1876722276210785 0.21605448424816132 0.2771080732345581 0.9608142375946045 -0.0 0.5711308121681213 0.6254566311836243 0 1.0 0 0.0 0 0.0 0 0.0 1.3611209392547607 0.11482855677604675 -0.2839455306529999 0.5498825311660767 -0.8352305889129639 -0.0 0.02917507290840149 0.7101532816886902 0 1.0 0 0.0 0 0.0 0 0.0 1.3640763759613037 0.1165628731250763 0.21605446934700012 0.47178563475608826 -0.8816797137260437 -0.0 0.4537268579006195 0.5526838302612305 0 1.0 0 0.0 0 0.0 0 0.0 1.3611209392547607 0.11482855677604675 0.21605446934700012 0.5498825311660767 -0.8352305889129639 -0.0 0.45199093222618103 0.5508368015289307 0 1.0 0 0.0 0 0.0 0 0.0 -0.10157608985900879 -0.1758894920349121 -0.2839455306529999 -0.4847559928894043 -0.8746299743652344 -0.0 0.03632086515426636 0.49466484785079956 0 1.0 0 0.0 0 0.0 0 0.0 -0.09656071662902832 -0.1785188913345337 0.21605445444583893 -0.4444410502910614 -0.8957793116569519 -0.0 0.42967790365219116 0.3402499556541443 0 1.0 0 0.0 0 0.0 0 0.0 -0.10157608985900879 -0.1758894920349121 0.21605445444583893 -0.4847559928894043 -0.8746299743652344 -0.0 0.42675918340682983 0.34429383277893066 0 1.0 0 0.0 0 0.0 0 0.0 1.079746961593628 -0.18745668232440948 -0.2839455306529999 0.21759697794914246 -0.9760124683380127 -0.0 0.9582534432411194 0.3779926896095276 0 1.0 0 0.0 0 0.0 0 0.0 1.088397741317749 -0.18530280888080597 0.21605445444583893 0.26642659306526184 -0.9638355374336243 -0.0 0.5339774489402771 0.22114479541778564 0 1.0 0 0.0 0 0.0 0 0.0 1.079746961593628 -0.18745668232440948 0.21605445444583893 0.21759697794914246 -0.9760124683380127 -0.0 0.5274980664253235 0.2177051305770874 0 1.0 0 0.0 0 0.0 0 0.0 -1.4526948928833008 -0.17055772244930267 -0.2839455306529999 0.5101473927497864 -0.8600726127624512 -0.0 1.0128761529922485 0.42947977781295776 0 1.0 0 0.0 0 0.0 0 0.0 -1.4481269121170044 -0.1677483171224594 0.21605446934700012 0.5372173190116882 -0.843409538269043 -0.0 0.5757732391357422 0.2414644956588745 0 1.0 0 0.0 0 0.0 0 0.0 -1.4526948928833008 -0.17055772244930267 0.21605445444583893 0.5101168751716614 -0.8600726127624512 -0.0 0.5725734233856201 0.23772281408309937 0 1.0 0 0.0 0 0.0 0 0.0 1.4614017009735107 0.11597418785095215 -0.2839455306529999 -0.5114291906356812 -0.8593096733093262 -0.0 0.9558334350585938 0.7118881940841675 0 1.0 0 0.0 0 0.0 0 0.0 1.46427321434021 0.11412802338600159 0.21605446934700012 -0.5681325793266296 -0.8229010701179504 -0.0 0.5120236873626709 0.54820716381073 0 1.0 0 0.0 0 0.0 0 0.0 1.4614017009735107 0.11597418785095215 0.21605446934700012 -0.5114291906356812 -0.8593096733093262 -0.0 0.5103503465652466 0.5503014326095581 0 1.0 0 0.0 0 0.0 0 0.0 -1.398715615272522 0.1856156587600708 -0.2839455306529999 0.3254493772983551 0.9455549716949463 -0.0 0.9749752879142761 0.8102735877037048 0 1.0 0 0.0 0 0.0 0 0.0 -1.4052537679672241 0.1876722276210785 0.21605448424816132 0.2771080732345581 0.9608142375946045 -0.0 0.5711308121681213 0.6254566311836243 0 1.0 0 0.0 0 0.0 0 0.0 -1.398715615272522 0.1856156587600708 0.21605448424816132 0.3254493772983551 0.9455549716949463 -0.0 0.5745198130607605 0.6237694025039673 0 1.0 0 0.0 0 0.0 0 0.0 0.9731466770172119 -0.18530766665935516 -0.2839455306529999 -0.2553483545780182 -0.9668263792991638 -0.0 0.016234666109085083 0.3818973898887634 0 1.0 0 0.0 0 0.0 0 0.0 0.9868652820587158 -0.18838949501514435 0.21605445444583893 -0.18515579402446747 -0.982695996761322 -0.0 0.45271965861320496 0.21679538488388062 0 1.0 0 0.0 0 0.0 0 0.0 0.9731466770172119 -0.18530766665935516 0.21605445444583893 -0.2553483545780182 -0.9668263792991638 -0.0 0.4423677325248718 0.22210901975631714 0 1.0 0 0.0 0 0.0 0 0.0 -1.409644365310669 -0.1692855805158615 -0.2839455306529999 -0.9529099464416504 -0.3032013773918152 -0.0 0.9897835850715637 0.4357222318649292 0 1.0 0 0.0 0 0.0 0 0.0 -1.4088441133499146 -0.17177391052246094 0.21605445444583893 -0.9508957266807556 -0.3094271719455719 -0.0 0.6045523881912231 0.2502666711807251 0 1.0 0 0.0 0 0.0 0 0.0 -1.409644365310669 -0.1692855805158615 0.21605446934700012 -0.9529099464416504 -0.3031708598136902 -0.0 0.6036663055419922 0.2522021532058716 0 1.0 0 0.0 0 0.0 0 0.0 -1.5575450658798218 0.18761995434761047 -0.2839455306529999 -0.28141117095947266 0.9595629572868347 -0.0 0.10965383052825928 0.7987056970596313 0 1.0 0 0.0 0 0.0 0 0.0 -1.565907597541809 0.18492001295089722 0.21605448424816132 -0.335001677274704 0.9421979188919067 -0.0 0.48844146728515625 0.6122236251831055 0 1.0 0 0.0 0 0.0 0 0.0 -1.5575450658798218 0.18761995434761047 0.21605448424816132 -0.28141117095947266 0.9595629572868347 -0.0 0.4925583004951477 0.6155014038085938 0 1.0 0 0.0 0 0.0 0 0.0 0.024416208267211914 -0.18043318390846252 -0.2839455306529999 0.3904538154602051 -0.9205908179283142 -0.0 0.9612451195716858 0.48575735092163086 0 1.0 0 0.0 0 0.0 0 0.0 0.03000950813293457 -0.17793026566505432 0.21605445444583893 0.42597734928131104 -0.904721200466156 -0.0 0.5166881084442139 0.33180397748947144 0 1.0 0 0.0 0 0.0 0 0.0 0.024416208267211914 -0.18043318390846252 0.21605445444583893 0.3904538154602051 -0.9205908179283142 -0.0 0.5128822922706604 0.3284263610839844 0 1.0 0 0.0 0 0.0 0 0.0 1.359330415725708 0.11351263523101807 -0.2839455306529999 0.6188543438911438 -0.7854548692703247 -0.0 0.03036937117576599 0.7084847688674927 0 1.0 0 0.0 0 0.0 0 0.0 1.3611209392547607 0.11482855677604675 0.21605446934700012 0.5498825311660767 -0.8352305889129639 -0.0 0.45199093222618103 0.5508368015289307 0 1.0 0 0.0 0 0.0 0 0.0 1.359330415725708 0.11351263523101807 0.21605446934700012 0.6188543438911438 -0.7854548692703247 -0.0 0.4509287476539612 0.5494382381439209 0 1.0 0 0.0 0 0.0 0 0.0 -0.09656071662902832 -0.1785188913345337 -0.2839455306529999 -0.4444410502910614 -0.8957793116569519 -0.0 0.033449530601501465 0.49154067039489746 0 1.0 0 0.0 0 0.0 0 0.0 -0.09143805503845215 -0.18091964721679688 0.21605445444583893 -0.4040650725364685 -0.9147007465362549 -0.0 0.43273794651031494 0.3364626169204712 0 1.0 0 0.0 0 0.0 0 0.0 -0.09656071662902832 -0.1785188913345337 0.21605445444583893 -0.4444410502910614 -0.8957793116569519 -0.0 0.42967790365219116 0.3402499556541443 0 1.0 0 0.0 0 0.0 0 0.0 1.0708115100860596 -0.1892189383506775 -0.2839455306529999 0.17029328644275665 -0.9853816032409668 -0.0 0.963086724281311 0.376192569732666 0 1.0 0 0.0 0 0.0 0 0.0 1.079746961593628 -0.18745668232440948 0.21605445444583893 0.21759697794914246 -0.9760124683380127 -0.0 0.5274980664253235 0.2177051305770874 0 1.0 0 0.0 0 0.0 0 0.0 1.0708115100860596 -0.1892189383506775 0.21605445444583893 0.17029328644275665 -0.9853816032409668 -0.0 0.5206069350242615 0.21479815244674683 0 1.0 0 0.0 0 0.0 0 0.0 -1.4573115110397339 -0.17319685220718384 -0.2839455306529999 0.4820703864097595 -0.8761253952980042 -0.0 1.0153790712356567 0.426551878452301 0 1.0 0 0.0 0 0.0 0 0.0 -1.4526948928833008 -0.17055772244930267 0.21605445444583893 0.5101168751716614 -0.8600726127624512 -0.0 0.5725734233856201 0.23772281408309937 0 1.0 0 0.0 0 0.0 0 0.0 -1.4573115110397339 -0.17319685220718384 0.21605445444583893 0.4820703864097595 -0.8761253952980042 -0.0 0.569256603717804 0.23421460390090942 0 1.0 0 0.0 0 0.0 0 0.0 1.46427321434021 0.11412802338600159 -0.2839455306529999 -0.5681325793266296 -0.8229010701179504 -0.0 0.9538769721984863 0.7094813585281372 0 1.0 0 0.0 0 0.0 0 0.0 1.4669716358184814 0.1121310293674469 0.21605446934700012 -0.6189153790473938 -0.7854243516921997 -0.0 0.5135997533798218 0.5459520816802979 0 1.0 0 0.0 0 0.0 0 0.0 1.46427321434021 0.11412802338600159 0.21605446934700012 -0.5681325793266296 -0.8229010701179504 -0.0 0.5120236873626709 0.54820716381073 0 1.0 0 0.0 0 0.0 0 0.0 -1.3926442861557007 0.1833426058292389 -0.2839455306529999 0.3784600496292114 0.9255958795547485 -0.0 0.9703744649887085 0.8070228099822998 0 1.0 0 0.0 0 0.0 0 0.0 -1.398715615272522 0.1856156587600708 0.21605448424816132 0.3254493772983551 0.9455549716949463 -0.0 0.5745198130607605 0.6237694025039673 0 1.0 0 0.0 0 0.0 0 0.0 -1.3926442861557007 0.1833426058292389 0.21605448424816132 0.3784600496292114 0.9255958795547485 -0.0 0.5776726603507996 0.6218934059143066 0 1.0 0 0.0 0 0.0 0 0.0 0.9868652820587158 -0.18838949501514435 -0.2839455306529999 -0.18515579402446747 -0.982695996761322 -0.0 0.008848100900650024 0.3783048391342163 0 1.0 0 0.0 0 0.0 0 0.0 1.0012843608856201 -0.19059079885482788 0.21605445444583893 -0.1190221905708313 -0.9928891658782959 -0.0 0.464069128036499 0.212787926197052 0 1.0 0 0.0 0 0.0 0 0.0 0.9868652820587158 -0.18838949501514435 0.21605445444583893 -0.18515579402446747 -0.982695996761322 -0.0 0.45271965861320496 0.21679538488388062 0 1.0 0 0.0 0 0.0 0 0.0 -1.61158287525177 -0.17070366442203522 -0.2839455306529999 -0.5730155110359192 -0.8195135593414307 -0.0 0.09803354740142822 0.4236064553260803 0 1.0 0 0.0 0 0.0 0 0.0 -1.605220913887024 -0.1748168170452118 0.21605445444583893 -0.5124973058700562 -0.8586688041687012 -0.0 0.45487111806869507 0.24198591709136963 0 1.0 0 0.0 0 0.0 0 0.0 -1.61158287525177 -0.17070366442203522 0.21605445444583893 -0.5730155110359192 -0.8195135593414307 -0.0 0.4511343836784363 0.24751901626586914 0 1.0 0 0.0 0 0.0 0 0.0 -1.565907597541809 0.18492001295089722 -0.2839455306529999 -0.335001677274704 0.9421979188919067 -0.0 0.1150856614112854 0.793408215045929 0 1.0 0 0.0 0 0.0 0 0.0 -1.573773980140686 0.181860089302063 0.21605448424816132 -0.39191868901252747 0.9199804663658142 -0.0 0.4845971167087555 0.6086910367012024 0 1.0 0 0.0 0 0.0 0 0.0 -1.565907597541809 0.18492001295089722 0.21605448424816132 -0.335001677274704 0.9421979188919067 -0.0 0.48844146728515625 0.6122236251831055 0 1.0 0 0.0 0 0.0 0 0.0 0.018771886825561523 -0.18269772827625275 -0.2839455306529999 0.35383158922195435 -0.9353007674217224 -0.0 0.9646912813186646 0.48325538635253906 0 1.0 0 0.0 0 0.0 0 0.0 0.024416208267211914 -0.18043318390846252 0.21605445444583893 0.3904538154602051 -0.9205908179283142 -0.0 0.5128822922706604 0.3284263610839844 0 1.0 0 0.0 0 0.0 0 0.0 0.018771886825561523 -0.18269772827625275 0.21605445444583893 0.35383158922195435 -0.9353007674217224 -0.0 0.508985698223114 0.32539719343185425 0 1.0 0 0.0 0 0.0 0 0.0 1.5771892070770264 0.1059650182723999 -0.2839455306529999 0.9462873935699463 0.3232520520687103 -0.0 0.8865392804145813 0.6703754663467407 0 1.0 0 0.0 0 0.0 0 0.0 1.5743725299835205 0.11358323693275452 0.21605446934700012 0.9285256266593933 0.3712271451950073 -0.0 0.5691015720367432 0.5396533012390137 0 1.0 0 0.0 0 0.0 0 0.0 1.5771892070770264 0.1059650182723999 0.21605446934700012 0.9462873935699463 0.3232520520687103 -0.0 0.5707830190658569 0.5321577787399292 0 1.0 0 0.0 0 0.0 0 0.0 -0.09143805503845215 -0.18091964721679688 -0.2839455306529999 -0.4040650725364685 -0.9147007465362549 -0.0 0.030506521463394165 0.48865455389022827 0 1.0 0 0.0 0 0.0 0 0.0 -0.08620834350585938 -0.18309177458286285 0.21605445444583893 -0.3629566431045532 -0.9317911267280579 -0.0 0.43594032526016235 0.3329399824142456 0 1.0 0 0.0 0 0.0 0 0.0 -0.09143805503845215 -0.18091964721679688 0.21605445444583893 -0.4040650725364685 -0.9147007465362549 -0.0 0.43273794651031494 0.3364626169204712 0 1.0 0 0.0 0 0.0 0 0.0 1.061591625213623 -0.19058957695960999 -0.2839455306529999 0.12475966662168503 -0.9921567440032959 -0.0 0.968092679977417 0.37479931116104126 0 1.0 0 0.0 0 0.0 0 0.0 1.0708115100860596 -0.1892189383506775 0.21605445444583893 0.17029328644275665 -0.9853816032409668 -0.0 0.5206069350242615 0.21479815244674683 0 1.0 0 0.0 0 0.0 0 0.0 1.061591625213623 -0.19058957695960999 0.21605445444583893 0.12475966662168503 -0.9921567440032959 -0.0 0.5133183598518372 0.21246552467346191 0 1.0 0 0.0 0 0.0 0 0.0 -1.3112715482711792 -0.17516463994979858 -0.2839455306529999 0.9137852191925049 0.4061403274536133 -0.0 0.9445689916610718 0.44464319944381714 0 1.0 0 0.0 0 0.0 0 0.0 -1.3131457567214966 -0.17084351181983948 0.21605445444583893 0.921079158782959 0.3892941176891327 -0.0 0.656374454498291 0.2921108603477478 0 1.0 0 0.0 0 0.0 0 0.0 -1.3112715482711792 -0.17516463994979858 0.21605445444583893 0.9137852191925049 0.4061403274536133 -0.0 0.6578232645988464 0.2894875407218933 0 1.0 0 0.0 0 0.0 0 0.0 -1.387040138244629 0.18085306882858276 -0.2839455306529999 0.4292428493499756 0.9031647443771362 -0.0 0.9662760496139526 0.8036254048347473 0 1.0 0 0.0 0 0.0 0 0.0 -1.3926442861557007 0.1833426058292389 0.21605448424816132 0.3784600496292114 0.9255958795547485 -0.0 0.5776726603507996 0.6218934059143066 0 1.0 0 0.0 0 0.0 0 0.0 -1.387040138244629 0.18085306882858276 0.21605448424816132 0.4292428493499756 0.9031647443771362 -0.0 0.580594539642334 0.6198358535766602 0 1.0 0 0.0 0 0.0 0 0.0 -1.4088441133499146 -0.17177391052246094 -0.2839455306529999 -0.9508957266807556 -0.3094271719455719 -0.0 0.9893962144851685 0.4335421919822693 0 1.0 0 0.0 0 0.0 0 0.0 -1.4080681800842285 -0.1741308867931366 0.21605445444583893 -0.9486373662948608 -0.3163243532180786 -0.0 0.6054056882858276 0.2484617829322815 0 1.0 0 0.0 0 0.0 0 0.0 -1.4088441133499146 -0.17177391052246094 0.21605445444583893 -0.9508957266807556 -0.3094271719455719 -0.0 0.6045523881912231 0.2502666711807251 0 1.0 0 0.0 0 0.0 0 0.0 1.3576958179473877 0.11213347315788269 -0.2839455306529999 0.6719870567321777 -0.7405316233634949 -0.0 0.03144568204879761 0.7067665457725525 0 1.0 0 0.0 0 0.0 0 0.0 1.359330415725708 0.11351263523101807 0.21605446934700012 0.6188543438911438 -0.7854548692703247 -0.0 0.4509287476539612 0.5494382381439209 0 1.0 0 0.0 0 0.0 0 0.0 1.3576958179473877 0.11213347315788269 0.21605446934700012 0.6719870567321777 -0.7405316233634949 -0.0 0.44995152950286865 0.5479726791381836 0 1.0 0 0.0 0 0.0 0 0.0 -1.573773980140686 0.181860089302063 -0.2839455306529999 -0.39191868901252747 0.9199804663658142 -0.0 0.11988469958305359 0.7878999710083008 0 1.0 0 0.0 0 0.0 0 0.0 -1.581144094467163 0.1784401535987854 0.21605448424816132 -0.4516434073448181 0.8921781182289124 -0.0 0.48101699352264404 0.6049108505249023 0 1.0 0 0.0 0 0.0 0 0.0 -1.573773980140686 0.181860089302063 0.21605448424816132 -0.39191868901252747 0.9199804663658142 -0.0 0.4845971167087555 0.6086910367012024 0 1.0 0 0.0 0 0.0 0 0.0 1.0520870685577393 -0.19156861305236816 -0.2839455306529999 0.08117923140525818 -0.9966734647750854 -0.0 0.973270058631897 0.3738250136375427 0 1.0 0 0.0 0 0.0 0 0.0 1.061591625213623 -0.19058957695960999 0.21605445444583893 0.12475966662168503 -0.9921567440032959 -0.0 0.5133183598518372 0.21246552467346191 0 1.0 0 0.0 0 0.0 0 0.0 1.0520870685577393 -0.19156861305236816 0.21605445444583893 0.08117923140525818 -0.9966734647750854 -0.0 0.5056557655334473 0.21075117588043213 0 1.0 0 0.0 0 0.0 0 0.0 1.2627358436584473 0.11276590824127197 -0.2839455306529999 -0.9591967463493347 0.28269293904304504 -0.0 0.08741724491119385 0.6831651926040649 0 1.0 0 0.0 0 0.0 0 0.0 1.2608799934387207 0.10545903444290161 0.21605446934700012 -0.9776909947395325 0.20999786257743835 -0.0 0.4009055495262146 0.538192629814148 0 1.0 0 0.0 0 0.0 0 0.0 1.2627358436584473 0.11276590824127197 0.21605446934700012 -0.9591967463493347 0.28269293904304504 -0.0 0.4022684395313263 0.5451506972312927 0 1.0 0 0.0 0 0.0 0 0.0 0.013076543807983398 -0.184723898768425 -0.2839455306529999 0.3161717653274536 -0.9486678838729858 -0.0 0.9681662321090698 0.4810340404510498 0 1.0 0 0.0 0 0.0 0 0.0 0.018771886825561523 -0.18269772827625275 0.21605445444583893 0.35383158922195435 -0.9353007674217224 -0.0 0.508985698223114 0.32539719343185425 0 1.0 0 0.0 0 0.0 0 0.0 0.013076543807983398 -0.184723898768425 0.21605445444583893 0.3161717653274536 -0.9486678838729858 -0.0 0.5050041079521179 0.32272303104400635 0 1.0 0 0.0 0 0.0 0 0.0 1.0012843608856201 -0.19059079885482788 -0.2839455306529999 -0.1190221905708313 -0.9928891658782959 -0.0 1.0010268688201904 0.3756256103515625 0 1.0 0 0.0 0 0.0 0 0.0 1.016404151916504 -0.19191157817840576 0.21605445444583893 -0.05743583291769028 -0.9983214735984802 -0.0 1.476330280303955 0.21025210618972778 0 1.0 0 0.0 0 0.0 0 0.0 1.0012843608856201 -0.19059079885482788 0.21605445444583893 -0.1190221905708313 -0.9928891658782959 -0.0 1.464069128036499 0.212787926197052 0 1.0 0 0.0 0 0.0 0 0.0 -0.08620834350585938 -0.18309177458286285 -0.2839455306529999 -0.3629566431045532 -0.9317911267280579 -0.0 0.027490437030792236 0.48600929975509644 0 1.0 0 0.0 0 0.0 0 0.0 -0.0808718204498291 -0.18503524363040924 0.21605445444583893 -0.32139042019844055 -0.9469283223152161 -0.0 0.4392855167388916 0.3296908140182495 0 1.0 0 0.0 0 0.0 0 0.0 -0.08620834350585938 -0.18309177458286285 0.21605445444583893 -0.3629566431045532 -0.9317911267280579 -0.0 0.43594032526016235 0.3329399824142456 0 1.0 0 0.0 0 0.0 0 0.0 -1.4619768857955933 -0.1756657212972641 -0.2839455306529999 0.4530472755432129 -0.8914456367492676 -0.0 1.0179073810577393 0.42381131649017334 0 1.0 0 0.0 0 0.0 0 0.0 -1.4573115110397339 -0.17319685220718384 0.21605445444583893 0.4820703864097595 -0.8761253952980042 -0.0 0.569256603717804 0.23421460390090942 0 1.0 0 0.0 0 0.0 0 0.0 -1.4619768857955933 -0.1756657212972641 0.21605445444583893 0.4530472755432129 -0.8914456367492676 -0.0 0.5658243298530579 0.23094266653060913 0 1.0 0 0.0 0 0.0 0 0.0 -1.381801962852478 0.17819690704345703 -0.2839455306529999 0.4697103798389435 0.8828089237213135 -0.0 0.962579071521759 0.8001152873039246 0 1.0 0 0.0 0 0.0 0 0.0 -1.387040138244629 0.18085306882858276 0.21605448424816132 0.4292428493499756 0.9031647443771362 -0.0 0.580594539642334 0.6198358535766602 0 1.0 0 0.0 0 0.0 0 0.0 -1.381801962852478 0.17819690704345703 0.21605448424816132 0.4697103798389435 0.8828089237213135 -0.0 0.5833354592323303 0.6176351308822632 0 1.0 0 0.0 0 0.0 0 0.0 -1.4080681800842285 -0.1741308867931366 -0.2839455306529999 -0.9486373662948608 -0.3163243532180786 -0.0 0.989022433757782 0.43149906396865845 0 1.0 0 0.0 0 0.0 0 0.0 -1.4073165655136108 -0.1763565093278885 0.21605445444583893 -0.9460432529449463 -0.3239845037460327 -0.0 0.606225848197937 0.24678385257720947 0 1.0 0 0.0 0 0.0 0 0.0 -1.4080681800842285 -0.1741308867931366 0.21605445444583893 -0.9486373662948608 -0.3163243532180786 -0.0 0.6054056882858276 0.2484617829322815 0 1.0 0 0.0 0 0.0 0 0.0 1.3562171459197998 0.11069107055664062 -0.2839455306529999 0.7252418398857117 -0.6884670257568359 -0.0 0.03240564465522766 0.7049999833106995 0 1.0 0 0.0 0 0.0 0 0.0 1.3576958179473877 0.11213347315788269 0.21605446934700012 0.6719870567321777 -0.7405316233634949 -0.0 0.44995152950286865 0.5479726791381836 0 1.0 0 0.0 0 0.0 0 0.0 1.3562171459197998 0.11069107055664062 0.21605446934700012 0.7252418398857117 -0.6884670257568359 -0.0 0.44905880093574524 0.5464398860931396 0 1.0 0 0.0 0 0.0 0 0.0 -1.581144094467163 0.1784401535987854 -0.2839455306529999 -0.4516434073448181 0.8921781182289124 -0.0 0.12409523129463196 0.7822171449661255 0 1.0 0 0.0 0 0.0 0 0.0 -1.5880180597305298 0.17466023564338684 0.21605448424816132 -0.5134739279747009 0.8580889105796814 -0.0 0.4776924252510071 0.6008874773979187 0 1.0 0 0.0 0 0.0 0 0.0 -1.581144094467163 0.1784401535987854 0.21605448424816132 -0.4516434073448181 0.8921781182289124 -0.0 0.48101699352264404 0.6049108505249023 0 1.0 0 0.0 0 0.0 0 0.0 1.0422980785369873 -0.19215603172779083 -0.2839455306529999 0.039674062281847 -0.99920654296875 -0.0 0.9786159992218018 0.373282253742218 0 1.0 0 0.0 0 0.0 0 0.0 1.0520870685577393 -0.19156861305236816 0.21605445444583893 0.08117923140525818 -0.9966734647750854 -0.0 0.5056557655334473 0.21075117588043213 0 1.0 0 0.0 0 0.0 0 0.0 1.0422980785369873 -0.19215603172779083 0.21605445444583893 0.039674062281847 -0.99920654296875 -0.0 0.49765321612358093 0.20969903469085693 0 1.0 0 0.0 0 0.0 0 0.0 1.4669716358184814 0.1121310293674469 -0.2839455306529999 -0.6189153790473938 -0.7854243516921997 -0.0 0.9520698189735413 0.7069165110588074 0 1.0 0 0.0 0 0.0 0 0.0 1.46952223777771 0.10999298095703125 0.21605446934700012 -0.6656697392463684 -0.7462080717086792 -0.0 0.5150936245918274 0.5435440540313721 0 1.0 0 0.0 0 0.0 0 0.0 1.4669716358184814 0.1121310293674469 0.21605446934700012 -0.6189153790473938 -0.7854243516921997 -0.0 0.5135997533798218 0.5459520816802979 0 1.0 0 0.0 0 0.0 0 0.0 0.0073299407958984375 -0.18651169538497925 -0.2839455306529999 0.2776573896408081 -0.9606616497039795 -0.0 0.9716694355010986 0.4790952801704407 0 1.0 0 0.0 0 0.0 0 0.0 0.013076543807983398 -0.184723898768425 0.21605445444583893 0.3161717653274536 -0.9486678838729858 -0.0 0.5050041079521179 0.32272303104400635 0 1.0 0 0.0 0 0.0 0 0.0 0.0073299407958984375 -0.18651169538497925 0.21605445444583893 0.2776573896408081 -0.9606616497039795 -0.0 0.5009436011314392 0.32041001319885254 0 1.0 0 0.0 0 0.0 0 0.0 1.016404151916504 -0.19191157817840576 -0.2839455306529999 -0.05743583291769028 -0.9983214735984802 -0.0 0.9927797317504883 0.37390339374542236 0 1.0 0 0.0 0 0.0 0 0.0 1.032224416732788 -0.19235184788703918 0.21605445444583893 -0.004181035794317722 -0.999969482421875 -0.0 1.4893549680709839 0.20935219526290894 0 1.0 0 0.0 0 0.0 0 0.0 1.016404151916504 -0.19191157817840576 0.21605445444583893 -0.05743583291769028 -0.9983214735984802 -0.0 1.476330280303955 0.21025210618972778 0 1.0 0 0.0 0 0.0 0 0.0 -1.605220913887024 -0.1748168170452118 -0.2839455306529999 -0.5124973058700562 -0.8586688041687012 -0.0 0.09462365508079529 0.419883131980896 0 1.0 0 0.0 0 0.0 0 0.0 -1.5985209941864014 -0.17849700152873993 0.21605445444583893 -0.4504531919956207 -0.8927884697914124 -0.0 0.459004670381546 0.2368086576461792 0 1.0 0 0.0 0 0.0 0 0.0 -1.605220913887024 -0.1748168170452118 0.21605445444583893 -0.5124973058700562 -0.8586688041687012 -0.0 0.45487111806869507 0.24198591709136963 0 1.0 0 0.0 0 0.0 0 0.0 -0.0808718204498291 -0.18503524363040924 -0.2839455306529999 -0.32139042019844055 -0.9469283223152161 -0.0 0.02440011501312256 0.48360782861709595 0 1.0 0 0.0 0 0.0 0 0.0 -0.07542824745178223 -0.18675006926059723 0.21605445444583893 -0.2796105742454529 -0.9600818157196045 -0.0 0.4427735507488251 0.326724112033844 0 1.0 0 0.0 0 0.0 0 0.0 -0.0808718204498291 -0.18503524363040924 0.21605445444583893 -0.32139042019844055 -0.9469283223152161 -0.0 0.4392855167388916 0.3296908140182495 0 1.0 0 0.0 0 0.0 0 0.0 1.032224416732788 -0.19235184788703918 -0.2839455306529999 -0.004181035794317722 -0.999969482421875 -0.0 0.9841258525848389 0.3731839060783386 0 1.0 0 0.0 0 0.0 0 0.0 1.0422980785369873 -0.19215603172779083 0.21605445444583893 0.039674062281847 -0.99920654296875 -0.0 0.49765321612358093 0.20969903469085693 0 1.0 0 0.0 0 0.0 0 0.0 1.032224416732788 -0.19235184788703918 0.21605445444583893 -0.004181035794317722 -0.999969482421875 -0.0 0.4893549680709839 0.20935219526290894 0 1.0 0 0.0 0 0.0 0 0.0 -1.3768290281295776 0.1754239797592163 -0.2839455306529999 0.5051729083061218 0.8630024194717407 -0.0 0.959189236164093 0.7965185046195984 0 1.0 0 0.0 0 0.0 0 0.0 -1.381801962852478 0.17819690704345703 0.21605448424816132 0.4697103798389435 0.8828089237213135 -0.0 0.5833354592323303 0.6176351308822632 0 1.0 0 0.0 0 0.0 0 0.0 -1.3768290281295776 0.1754239797592163 0.21605448424816132 0.5051729083061218 0.8630024194717407 -0.0 0.5859435200691223 0.6153281331062317 0 1.0 0 0.0 0 0.0 0 0.0 0.914886474609375 0.314128041267395 -0.2839455306529999 -1.0 0.0 -0.0 0.07622396945953369 0.8483100533485413 0 1.0 0 0.0 0 0.0 0 0.0 0.914886474609375 0.24932944774627686 0.21605448424816132 -1.0 0.0 -0.0 0.4341694116592407 0.6617535948753357 0 1.0 0 0.0 0 0.0 0 0.0 0.914886474609375 0.314128041267395 0.21605446934700012 -1.0 0.0 -0.0 0.4373004734516144 0.6980294585227966 0 1.0 0 0.0 0 0.0 0 0.0 1.3548939228057861 0.10918542742729187 -0.2839455306529999 0.7772759199142456 -0.6291085481643677 -0.0 0.03325092792510986 0.7031859159469604 0 1.0 0 0.0 0 0.0 0 0.0 1.3562171459197998 0.11069107055664062 0.21605446934700012 0.7252418398857117 -0.6884670257568359 -0.0 0.44905880093574524 0.5464398860931396 0 1.0 0 0.0 0 0.0 0 0.0 1.3548939228057861 0.10918542742729187 0.21605446934700012 0.7772759199142456 -0.6291085481643677 -0.0 0.44824984669685364 0.5448392033576965 0 1.0 0 0.0 0 0.0 0 0.0 -1.3092831373214722 -0.1795319765806198 -0.2839455306529999 0.9064607620239258 0.4222540855407715 -0.0 0.943996250629425 0.4413594603538513 0 1.0 0 0.0 0 0.0 0 0.0 -1.3112715482711792 -0.17516463994979858 0.21605445444583893 0.9137852191925049 0.4061403274536133 -0.0 0.6578232645988464 0.2894875407218933 0 1.0 0 0.0 0 0.0 0 0.0 -1.3092831373214722 -0.1795319765806198 0.21605445444583893 0.9064607620239258 0.4222540855407715 -0.0 0.6593202352523804 0.28693681955337524 0 1.0 0 0.0 0 0.0 0 0.0 1.46952223777771 0.10999298095703125 -0.2839455306529999 -0.6656697392463684 -0.7462080717086792 -0.0 0.9503920078277588 0.7042019963264465 0 1.0 0 0.0 0 0.0 0 0.0 1.471924066543579 0.10771384835243225 0.21605446934700012 -0.7104098796844482 -0.7037568092346191 -0.0 0.5165054798126221 0.5409820079803467 0 1.0 0 0.0 0 0.0 0 0.0 1.46952223777771 0.10999298095703125 0.21605446934700012 -0.6656697392463684 -0.7462080717086792 -0.0 0.5150936245918274 0.5435440540313721 0 1.0 0 0.0 0 0.0 0 0.0 0.0015323162078857422 -0.18806111812591553 -0.2839455306529999 0.2385021448135376 -0.9711294770240784 -0.0 0.9751999378204346 0.4774407744407654 0 1.0 0 0.0 0 0.0 0 0.0 0.0073299407958984375 -0.18651169538497925 0.21605445444583893 0.2776573896408081 -0.9606616497039795 -0.0 0.5009436011314392 0.32041001319885254 0 1.0 0 0.0 0 0.0 0 0.0 0.0015323162078857422 -0.18806111812591553 0.21605445444583893 0.2385021448135376 -0.9711294770240784 -0.0 0.49681156873703003 0.31846362352371216 0 1.0 0 0.0 0 0.0 0 0.0 -1.3721212148666382 0.17253431677818298 -0.2839455306529999 0.5418866276741028 0.8404186964035034 -0.0 0.9560917615890503 0.7928478717803955 0 1.0 0 0.0 0 0.0 0 0.0 -1.3768290281295776 0.1754239797592163 0.21605448424816132 0.5051729083061218 0.8630024194717407 -0.0 0.5859435200691223 0.6153281331062317 0 1.0 0 0.0 0 0.0 0 0.0 -1.3721212148666382 0.17253431677818298 0.21605448424816132 0.5418866276741028 0.8404186964035034 -0.0 0.5884212851524353 0.612917423248291 0 1.0 0 0.0 0 0.0 0 0.0 1.1404554843902588 0.314128041267395 -0.2839455306529999 0.0 1.0 -0.0 0.8829363584518433 0.837841272354126 0 1.0 0 0.0 0 0.0 0 0.0 0.914886474609375 0.314128041267395 0.21605446934700012 0.0 1.0 -0.0 0.4373004734516144 0.6980294585227966 0 1.0 0 0.0 0 0.0 0 0.0 1.1404554843902588 0.314128041267395 0.21605446934700012 0.0 1.0 -0.0 0.5445256233215332 0.6925103664398193 0 1.0 0 0.0 0 0.0 0 0.0 -0.07542824745178223 -0.18675006926059723 -0.2839455306529999 -0.2796105742454529 -0.9600818157196045 -0.0 0.021234214305877686 0.481453001499176 0 1.0 0 0.0 0 0.0 0 0.0 -0.06987762451171875 -0.18823625147342682 0.21605445444583893 -0.2378612607717514 -0.9712820649147034 -0.0 0.4464035928249359 0.32404953241348267 0 1.0 0 0.0 0 0.0 0 0.0 -0.07542824745178223 -0.18675006926059723 0.21605445444583893 -0.2796105742454529 -0.9600818157196045 -0.0 0.4427735507488251 0.326724112033844 0 1.0 0 0.0 0 0.0 0 0.0 -1.5880180597305298 0.17466023564338684 -0.2839455306529999 -0.5134739279747009 0.8580889105796814 -0.0 0.12776002287864685 0.7763864398002625 0 1.0 0 0.0 0 0.0 0 0.0 -1.5943957567214966 0.1705203354358673 0.21605448424816132 -0.573870062828064 0.8189031481742859 -0.0 0.4746149778366089 0.5966225862503052 0 1.0 0 0.0 0 0.0 0 0.0 -1.5880180597305298 0.17466023564338684 0.21605448424816132 -0.5134739279747009 0.8580889105796814 -0.0 0.4776924252510071 0.6008874773979187 0 1.0 0 0.0 0 0.0 0 0.0 0.914886474609375 0.24932944774627686 -0.2839455306529999 0.0 -1.0 -0.0 1.0703219175338745 0.8121410012245178 0 1.0 0 0.0 0 0.0 0 0.0 1.1404554843902588 0.24932944774627686 0.21605448424816132 0.0 -1.0 -0.0 0.5467431545257568 0.6560397148132324 0 1.0 0 0.0 0 0.0 0 0.0 0.914886474609375 0.24932944774627686 0.21605448424816132 0.0 -1.0 -0.0 0.4341694116592407 0.6617535948753357 0 1.0 0 0.0 0 0.0 0 0.0 -1.4666908979415894 -0.17796431481838226 -0.2839455306529999 0.42316964268684387 -0.9060335159301758 -0.0 1.0204609632492065 0.42125678062438965 0 1.0 0 0.0 0 0.0 0 0.0 -1.4619768857955933 -0.1756657212972641 0.21605445444583893 0.4530472755432129 -0.8914456367492676 -0.0 0.5658243298530579 0.23094266653060913 0 1.0 0 0.0 0 0.0 0 0.0 -1.4666908979415894 -0.17796431481838226 0.21605445444583893 0.42316964268684387 -0.9060335159301758 -0.0 0.5622788071632385 0.22790998220443726 0 1.0 0 0.0 0 0.0 0 0.0 1.1404554843902588 0.24932944774627686 -0.2839455306529999 1.0 0.0 -0.0 0.8911066055297852 0.8022257685661316 0 1.0 0 0.0 0 0.0 0 0.0 1.1404554843902588 0.314128041267395 0.21605446934700012 0.999969482421875 0.0 -0.0 0.5445256233215332 0.6925103664398193 0 1.0 0 0.0 0 0.0 0 0.0 1.1404554843902588 0.24932944774627686 0.21605448424816132 1.0 0.0 -0.0 0.5467431545257568 0.6560397148132324 0 1.0 0 0.0 0 0.0 0 0.0 -1.4073165655136108 -0.1763565093278885 -0.2839455306529999 -0.9460432529449463 -0.3239845037460327 -0.0 0.9886620044708252 0.42958980798721313 0 1.0 0 0.0 0 0.0 0 0.0 -1.4065892696380615 -0.1784507930278778 0.21605445444583893 -0.9430524706840515 -0.3325907289981842 -0.0 0.6070125102996826 0.24522966146469116 0 1.0 0 0.0 0 0.0 0 0.0 -1.4073165655136108 -0.1763565093278885 0.21605445444583893 -0.9460432529449463 -0.3239845037460327 -0.0 0.606225848197937 0.24678385257720947 0 1.0 0 0.0 0 0.0 0 0.0 1.3537261486053467 0.10761654376983643 -0.2839455306529999 0.826776921749115 -0.5624866485595703 -0.0 0.0339830219745636 0.7013248801231384 0 1.0 0 0.0 0 0.0 0 0.0 1.3548939228057861 0.10918542742729187 0.21605446934700012 0.7772759199142456 -0.6291085481643677 -0.0 0.44824984669685364 0.5448392033576965 0 1.0 0 0.0 0 0.0 0 0.0 1.3537261486053467 0.10761654376983643 0.21605446934700012 0.826776921749115 -0.5624866485595703 -0.0 0.4475242495536804 0.5431699752807617 0 1.0 0 0.0 0 0.0 0 0.0 0.4178636074066162 0.19643977284431458 -0.2839455306529999 -0.0018005920574069023 0.999969482421875 -0.0 0.9889223575592041 0.7905939221382141 0 1.0 0 0.0 0 0.0 0 0.0 0.4047873020172119 0.1962110698223114 0.21605448424816132 -0.036133915185928345 0.99932861328125 -0.0 1.4772623777389526 0.6266326904296875 0 1.0 0 0.0 0 0.0 0 0.0 0.4178636074066162 0.19643977284431458 0.21605448424816132 -0.0018005920574069023 0.999969482421875 -0.0 1.484412431716919 0.626757025718689 0 1.0 0 0.0 0 0.0 0 0.0 1.471924066543579 0.10771384835243225 -0.2839455306529999 -0.7104098796844482 -0.7037568092346191 -0.0 0.9488427639007568 0.701339602470398 0 1.0 0 0.0 0 0.0 0 0.0 1.474177598953247 0.1052936315536499 0.21605446934700012 -0.7525253891944885 -0.6585283875465393 -0.0 0.5178361535072327 0.5382644534111023 0 1.0 0 0.0 0 0.0 0 0.0 1.471924066543579 0.10771384835243225 0.21605446934700012 -0.7104098796844482 -0.7037568092346191 -0.0 0.5165054798126221 0.5409820079803467 0 1.0 0 0.0 0 0.0 0 0.0 -0.0043163299560546875 -0.18937218189239502 -0.2839455306529999 0.1988280862569809 -0.9800103902816772 -0.0 0.9787569046020508 0.4760715961456299 0 1.0 0 0.0 0 0.0 0 0.0 0.0015323162078857422 -0.18806111812591553 0.21605445444583893 0.2385021448135376 -0.9711294770240784 -0.0 0.49681156873703003 0.31846362352371216 0 1.0 0 0.0 0 0.0 0 0.0 -0.0043163299560546875 -0.18937218189239502 0.21605445444583893 0.1988280862569809 -0.9800103902816772 -0.0 0.49261587858200073 0.3168887495994568 0 1.0 0 0.0 0 0.0 0 0.0 -0.06987762451171875 -0.18823625147342682 -0.2839455306529999 -0.2378612607717514 -0.9712820649147034 -0.0 0.01799166202545166 0.4795478582382202 0 1.0 0 0.0 0 0.0 0 0.0 -0.06421995162963867 -0.189493790268898 0.21605445444583893 -0.19635608792304993 -0.9804986715316772 -0.0 0.45017388463020325 0.32167673110961914 0 1.0 0 0.0 0 0.0 0 0.0 -0.06987762451171875 -0.18823625147342682 0.21605445444583893 -0.2378612607717514 -0.9712820649147034 -0.0 0.4464035928249359 0.32404953241348267 0 1.0 0 0.0 0 0.0 0 0.0 0.43031740188598633 0.19626706838607788 -0.2839455306529999 0.02865688130259514 0.99957275390625 -0.0 0.9786590337753296 0.7900840640068054 0 1.0 0 0.0 0 0.0 0 0.0 0.4178636074066162 0.19643977284431458 0.21605448424816132 -0.0018005920574069023 0.999969482421875 -0.0 1.484412431716919 0.626757025718689 0 1.0 0 0.0 0 0.0 0 0.0 0.43031740188598633 0.19626706838607788 0.21605448424816132 0.02865688130259514 0.99957275390625 -0.0 0.49122709035873413 0.6263492107391357 0 1.0 0 0.0 0 0.0 0 0.0 -1.4714535474777222 -0.18009264767169952 -0.2839455306529999 0.39243751764297485 -0.9197668433189392 -0.0 1.0230402946472168 0.41888707876205444 0 1.0 0 0.0 0 0.0 0 0.0 -1.4666908979415894 -0.17796431481838226 0.21605445444583893 0.42316964268684387 -0.9060335159301758 -0.0 0.5622788071632385 0.22790998220443726 0 1.0 0 0.0 0 0.0 0 0.0 -1.4714535474777222 -0.18009264767169952 0.21605445444583893 0.39243751764297485 -0.9197668433189392 -0.0 0.5586231350898743 0.22511959075927734 0 1.0 0 0.0 0 0.0 0 0.0 -1.4065892696380615 -0.1784507930278778 -0.2839455306529999 -0.9430524706840515 -0.3325907289981842 -0.0 0.9883145093917847 0.4278113842010498 0 1.0 0 0.0 0 0.0 0 0.0 -1.4058862924575806 -0.18041372299194336 0.21605445444583893 -0.939573347568512 -0.3422955870628357 -0.0 0.607765257358551 0.24379628896713257 0 1.0 0 0.0 0 0.0 0 0.0 -1.4065892696380615 -0.1784507930278778 0.21605445444583893 -0.9430524706840515 -0.3325907289981842 -0.0 0.6070125102996826 0.24522966146469116 0 1.0 0 0.0 0 0.0 0 0.0 0.4746840000152588 0.19212231040000916 -0.2839455306529999 0.17062897980213165 0.9853205680847168 -0.0 0.9434916973114014 0.7804332971572876 0 1.0 0 0.0 0 0.0 0 0.0 0.46440958976745605 0.19367659091949463 0.21605448424816132 0.13031403720378876 0.9914548397064209 -0.0 0.5097607374191284 0.6224871873855591 0 1.0 0 0.0 0 0.0 0 0.0 0.4746840000152588 0.19212231040000916 0.21605448424816132 0.17062897980213165 0.9853205680847168 -0.0 0.5152760744094849 0.6204148530960083 0 1.0 0 0.0 0 0.0 0 0.0 1.3527143001556396 0.10598441958427429 -0.2839455306529999 0.8721274733543396 -0.48924222588539124 -0.0 0.03460294008255005 0.6994173526763916 0 1.0 0 0.0 0 0.0 0 0.0 1.3537261486053467 0.10761654376983643 0.21605446934700012 0.826776921749115 -0.5624866485595703 -0.0 0.4475242495536804 0.5431699752807617 0 1.0 0 0.0 0 0.0 0 0.0 1.3527143001556396 0.10598441958427429 0.21605446934700012 0.8721274733543396 -0.48924222588539124 -0.0 0.446882039308548 0.5414314270019531 0 1.0 0 0.0 0 0.0 0 0.0 0.4422264099121094 0.19574898481369019 -0.2839455306529999 0.05960264801979065 0.9981994032859802 -0.0 0.9689275026321411 0.7887187004089355 0 1.0 0 0.0 0 0.0 0 0.0 0.43031740188598633 0.19626706838607788 0.21605448424816132 0.02865688130259514 0.99957275390625 -0.0 0.49122709035873413 0.6263492107391357 0 1.0 0 0.0 0 0.0 0 0.0 0.4422264099121094 0.19574898481369019 0.21605448424816132 0.05960264801979065 0.9981994032859802 -0.0 0.4977310299873352 0.6254823803901672 0 1.0 0 0.0 0 0.0 0 0.0 0.3690605163574219 0.19278141856193542 -0.2839455306529999 -0.16406750679016113 0.9864192605018616 -0.0 0.02811935544013977 0.783101499080658 0 1.0 0 0.0 0 0.0 0 0.0 0.3583190441131592 0.19072362780570984 0.21605448424816132 -0.2143009752035141 0.9767448902130127 -0.0 0.45214876532554626 0.6206685304641724 0 1.0 0 0.0 0 0.0 0 0.0 0.3690605163574219 0.19278141856193542 0.21605448424816132 -0.16406750679016113 0.9864192605018616 -0.0 0.45789432525634766 0.6229138374328613 0 1.0 0 0.0 0 0.0 0 0.0 -0.010215997695922852 -0.19044485688209534 -0.2839455306529999 0.158879354596138 -0.9872737526893616 -0.0 0.9823390245437622 0.47498881816864014 0 1.0 0 0.0 0 0.0 0 0.0 -0.0043163299560546875 -0.18937218189239502 0.21605445444583893 0.1988280862569809 -0.9800103902816772 -0.0 0.49261587858200073 0.3168887495994568 0 1.0 0 0.0 0 0.0 0 0.0 -0.010215997695922852 -0.19044485688209534 0.21605445444583893 0.158879354596138 -0.9872737526893616 -0.0 0.4883649945259094 0.3156893849372864 0 1.0 0 0.0 0 0.0 0 0.0 0.4047873020172119 0.1962110698223114 -0.2839455306529999 -0.036133915185928345 0.99932861328125 -0.0 0.9996861219406128 0.790111780166626 0 1.0 0 0.0 0 0.0 0 0.0 0.39229464530944824 0.1955251395702362 0.21605448424816132 -0.07519760727882385 0.9971618056297302 -0.0 1.4704532623291016 0.6259280443191528 0 1.0 0 0.0 0 0.0 0 0.0 0.4047873020172119 0.1962110698223114 0.21605448424816132 -0.036133915185928345 0.99932861328125 -0.0 1.4772623777389526 0.6266326904296875 0 1.0 0 0.0 0 0.0 0 0.0 -1.5985209941864014 -0.17849700152873993 -0.2839455306529999 -0.4504531919956207 -0.8927884697914124 -0.0 0.09105780720710754 0.41654813289642334 0 1.0 0 0.0 0 0.0 0 0.0 -1.5914828777313232 -0.18174423277378082 0.21605445444583893 -0.3879207670688629 -0.921689510345459 -0.0 0.46355491876602173 0.23200583457946777 0 1.0 0 0.0 0 0.0 0 0.0 -1.5985209941864014 -0.17849700152873993 0.21605445444583893 -0.4504531919956207 -0.8927884697914124 -0.0 0.459004670381546 0.2368086576461792 0 1.0 0 0.0 0 0.0 0 0.0 1.351858377456665 0.10428905487060547 -0.2839455306529999 0.9117404818534851 -0.4107486307621002 -0.0 0.03511199355125427 0.6974631547927856 0 1.0 0 0.0 0 0.0 0 0.0 1.3527143001556396 0.10598441958427429 0.21605446934700012 0.8721274733543396 -0.48924222588539124 -0.0 0.446882039308548 0.5414314270019531 0 1.0 0 0.0 0 0.0 0 0.0 1.351858377456665 0.10428905487060547 0.21605446934700012 0.9117404818534851 -0.4107486307621002 -0.0 0.4463229477405548 0.5396226644515991 0 1.0 0 0.0 0 0.0 0 0.0 -0.06421995162963867 -0.189493790268898 -0.2839455306529999 -0.19635608792304993 -0.9804986715316772 -0.0 0.014671623706817627 0.47789525985717773 0 1.0 0 0.0 0 0.0 0 0.0 -0.05845522880554199 -0.1905226856470108 0.21605445444583893 -0.15540024638175964 -0.9878231287002563 -0.0 0.4540817141532898 0.3196159601211548 0 1.0 0 0.0 0 0.0 0 0.0 -0.06421995162963867 -0.189493790268898 0.21605445444583893 -0.19635608792304993 -0.9804986715316772 -0.0 0.45017388463020325 0.32167673110961914 0 1.0 0 0.0 0 0.0 0 0.0 0.48441362380981445 0.1902226209640503 -0.2839455306529999 0.2145756334066391 0.9766838550567627 -0.0 0.9363412857055664 0.7765765190124512 0 1.0 0 0.0 0 0.0 0 0.0 0.4746840000152588 0.19212231040000916 0.21605448424816132 0.17062897980213165 0.9853205680847168 -0.0 0.5152760744094849 0.6204148530960083 0 1.0 0 0.0 0 0.0 0 0.0 0.48441362380981445 0.1902226209640503 0.21605448424816132 0.2145756334066391 0.9766838550567627 -0.0 0.5204581022262573 0.6179935932159424 0 1.0 0 0.0 0 0.0 0 0.0 1.5796849727630615 0.0980159342288971 -0.2839455306529999 0.9540696144104004 0.299539178609848 -0.0 0.8861360549926758 0.6619568467140198 0 1.0 0 0.0 0 0.0 0 0.0 1.5771892070770264 0.1059650182723999 0.21605446934700012 0.9462873935699463 0.3232520520687103 -0.0 0.5707830190658569 0.5321577787399292 0 1.0 0 0.0 0 0.0 0 0.0 1.5796849727630615 0.0980159342288971 0.21605446934700012 0.9540696144104004 0.299539178609848 -0.0 0.5723452568054199 0.5243043899536133 0 1.0 0 0.0 0 0.0 0 0.0 0.45359039306640625 0.1948854923248291 -0.2839455306529999 0.09341716021299362 0.9956053495407104 -0.0 0.9597970247268677 0.7865921854972839 0 1.0 0 0.0 0 0.0 0 0.0 0.4422264099121094 0.19574898481369019 0.21605448424816132 0.05960264801979065 0.9981994032859802 -0.0 0.4977310299873352 0.6254823803901672 0 1.0 0 0.0 0 0.0 0 0.0 0.45359039306640625 0.1948854923248291 0.21605448424816132 0.09341716021299362 0.9956053495407104 -0.0 0.5039113759994507 0.6241854429244995 0 1.0 0 0.0 0 0.0 0 0.0 -1.3071802854537964 -0.18394553661346436 -0.2839455306529999 0.9027680158615112 0.4300973415374756 -0.0 0.9433887004852295 0.43811434507369995 0 1.0 0 0.0 0 0.0 0 0.0 -1.3092831373214722 -0.1795319765806198 0.21605445444583893 0.9064607620239258 0.4222540855407715 -0.0 0.6593202352523804 0.28693681955337524 0 1.0 0 0.0 0 0.0 0 0.0 -1.3071802854537964 -0.18394553661346436 0.21605445444583893 0.9027680158615112 0.4300973415374756 -0.0 0.6608636379241943 0.2844606637954712 0 1.0 0 0.0 0 0.0 0 0.0 0.3583190441131592 0.19072362780570984 -0.2839455306529999 -0.2143009752035141 0.9767448902130127 -0.0 0.036156296730041504 0.7792717218399048 0 1.0 0 0.0 0 0.0 0 0.0 0.3481614589691162 0.18820855021476746 0.21605448424816132 -0.2685323655605316 0.9632557034492493 -0.0 0.44675490260124207 0.6179690361022949 0 1.0 0 0.0 0 0.0 0 0.0 0.3583190441131592 0.19072362780570984 0.21605448424816132 -0.2143009752035141 0.9767448902130127 -0.0 0.45214876532554626 0.6206685304641724 0 1.0 0 0.0 0 0.0 0 0.0 1.2608799934387207 0.10545903444290161 -0.2839455306529999 -0.9776909947395325 0.20999786257743835 -0.0 0.08772903680801392 0.6757194399833679 0 1.0 0 0.0 0 0.0 0 0.0 1.259554386138916 0.09793812036514282 0.21605446934700012 -0.9904171824455261 0.13800470530986786 -0.0 0.39975225925445557 0.53098064661026 0 1.0 0 0.0 0 0.0 0 0.0 1.2608799934387207 0.10545903444290161 0.21605446934700012 -0.9776909947395325 0.20999786257743835 -0.0 0.4009055495262146 0.538192629814148 0 1.0 0 0.0 0 0.0 0 0.0 -0.01616692543029785 -0.19127915799617767 -0.2839455306529999 0.1188390776515007 -0.9928891658782959 -0.0 0.9859455823898315 0.4741927981376648 0 1.0 0 0.0 0 0.0 0 0.0 -0.010215997695922852 -0.19044485688209534 0.21605445444583893 0.158879354596138 -0.9872737526893616 -0.0 0.4883649945259094 0.3156893849372864 0 1.0 0 0.0 0 0.0 0 0.0 -0.01616692543029785 -0.19127915799617767 0.21605445444583893 0.1188390776515007 -0.9928891658782959 -0.0 1.4840677976608276 0.3148688077926636 0 1.0 0 0.0 0 0.0 0 0.0 0.39229464530944824 0.1955251395702362 -0.2839455306529999 -0.07519760727882385 0.9971618056297302 -0.0 0.009852409362792969 0.7886282801628113 0 1.0 0 0.0 0 0.0 0 0.0 0.3803856372833252 0.1943819224834442 0.21605448424816132 -0.11777092516422272 0.9930112361907959 -0.0 0.46399572491645813 0.624677300453186 0 1.0 0 0.0 0 0.0 0 0.0 0.39229464530944824 0.1955251395702362 0.21605448424816132 -0.07519760727882385 0.9971618056297302 -0.0 0.47045332193374634 0.6259280443191528 0 1.0 0 0.0 0 0.0 0 0.0 -0.05845522880554199 -0.1905226856470108 -0.2839455306529999 -0.15540024638175964 -0.9878231287002563 -0.0 0.011273443698883057 0.4764983654022217 0 1.0 0 0.0 0 0.0 0 0.0 -0.05258345603942871 -0.1913229376077652 0.21605445444583893 -0.11511582136154175 -0.9933469891548157 -0.0 0.45812341570854187 0.3178775906562805 0 1.0 0 0.0 0 0.0 0 0.0 -0.05845522880554199 -0.1905226856470108 0.21605445444583893 -0.15540024638175964 -0.9878231287002563 -0.0 0.4540817141532898 0.3196159601211548 0 1.0 0 0.0 0 0.0 0 0.0 -1.4762672185897827 -0.18205071985721588 -0.2839455306529999 0.36082032322883606 -0.9326151013374329 -0.0 1.025646448135376 0.4167007803916931 0 1.0 0 0.0 0 0.0 0 0.0 -1.4714535474777222 -0.18009264767169952 0.21605445444583893 0.39243751764297485 -0.9197668433189392 -0.0 0.5586231350898743 0.22511959075927734 0 1.0 0 0.0 0 0.0 0 0.0 -1.4762672185897827 -0.18205071985721588 0.21605445444583893 0.36082032322883606 -0.9326151013374329 -0.0 0.5548592209815979 0.2225743532180786 0 1.0 0 0.0 0 0.0 0 0.0 1.474177598953247 0.1052936315536499 -0.2839455306529999 -0.7525253891944885 -0.6585283875465393 -0.0 0.9474200010299683 0.6983304023742676 0 1.0 0 0.0 0 0.0 0 0.0 1.4762828350067139 0.1027323305606842 0.21605446934700012 -0.791589081287384 -0.6110110878944397 -0.0 0.5190862417221069 0.5353896021842957 0 1.0 0 0.0 0 0.0 0 0.0 1.474177598953247 0.1052936315536499 0.21605446934700012 -0.7525253891944885 -0.6585283875465393 -0.0 0.5178361535072327 0.5382644534111023 0 1.0 0 0.0 0 0.0 0 0.0 -1.4058862924575806 -0.18041372299194336 -0.2839455306529999 -0.939573347568512 -0.3422955870628357 -0.0 0.9879797697067261 0.4261610507965088 0 1.0 0 0.0 0 0.0 0 0.0 -1.405207633972168 -0.18224529922008514 0.21605445444583893 -0.9354838728904724 -0.35331279039382935 -0.0 0.6084837913513184 0.2424808144569397 0 1.0 0 0.0 0 0.0 0 0.0 -1.4058862924575806 -0.18041372299194336 0.21605445444583893 -0.939573347568512 -0.3422955870628357 -0.0 0.607765257358551 0.24379628896713257 0 1.0 0 0.0 0 0.0 0 0.0 0.49359822273254395 0.18797752261161804 -0.2839455306529999 0.2623981535434723 0.964934229850769 -0.0 0.929848849773407 0.7723045945167542 0 1.0 0 0.0 0 0.0 0 0.0 0.48441362380981445 0.1902226209640503 0.21605448424816132 0.2145756334066391 0.9766838550567627 -0.0 0.5204581022262573 0.6179935932159424 0 1.0 0 0.0 0 0.0 0 0.0 0.49359822273254395 0.18797752261161804 0.21605448424816132 0.2623981535434723 0.964934229850769 -0.0 0.5253105163574219 0.6152456402778625 0 1.0 0 0.0 0 0.0 0 0.0 0.46440958976745605 0.19367659091949463 -0.2839455306529999 0.13031403720378876 0.9914548397064209 -0.0 0.9513112306594849 0.7838000059127808 0 1.0 0 0.0 0 0.0 0 0.0 0.45359039306640625 0.1948854923248291 0.21605448424816132 0.09341716021299362 0.9956053495407104 -0.0 0.5039113759994507 0.6241854429244995 0 1.0 0 0.0 0 0.0 0 0.0 0.46440958976745605 0.19367659091949463 0.21605448424816132 0.13031403720378876 0.9914548397064209 -0.0 0.5097607374191284 0.6224871873855591 0 1.0 0 0.0 0 0.0 0 0.0 0.3481614589691162 0.18820855021476746 -0.2839455306529999 -0.2685323655605316 0.9632557034492493 -0.0 0.04345867037773132 0.7748587131500244 0 1.0 0 0.0 0 0.0 0 0.0 0.33858752250671387 0.18523618578910828 0.21605448424816132 -0.3266090750694275 0.9451277256011963 -0.0 0.4417054355144501 0.6148390769958496 0 1.0 0 0.0 0 0.0 0 0.0 0.3481614589691162 0.18820855021476746 0.21605448424816132 -0.2685323655605316 0.9632557034492493 -0.0 0.44675490260124207 0.6179690361022949 0 1.0 0 0.0 0 0.0 0 0.0 -0.022168874740600586 -0.19187510013580322 -0.2839455306529999 0.0788903459906578 -0.9968565702438354 -0.0 0.9895748496055603 0.47368383407592773 0 1.0 0 0.0 0 0.0 0 0.0 -0.01616692543029785 -0.19127915799617767 0.21605445444583893 0.1188390776515007 -0.9928891658782959 -0.0 1.4840677976608276 0.3148688077926636 0 1.0 0 0.0 0 0.0 0 0.0 -0.022168874740600586 -0.19187510013580322 0.21605445444583893 0.0788903459906578 -0.9968565702438354 -0.0 1.479734182357788 0.3144296407699585 0 1.0 0 0.0 0 0.0 0 0.0 0.3803856372833252 0.1943819224834442 -0.2839455306529999 -0.11777092516422272 0.9930112361907959 -0.0 0.019345253705978394 0.7862547636032104 0 1.0 0 0.0 0 0.0 0 0.0 0.3690605163574219 0.19278141856193542 0.21605448424816132 -0.16406750679016113 0.9864192605018616 -0.0 0.45789432525634766 0.6229138374328613 0 1.0 0 0.0 0 0.0 0 0.0 0.3803856372833252 0.1943819224834442 0.21605448424816132 -0.11777092516422272 0.9930112361907959 -0.0 0.46399572491645813 0.624677300453186 0 1.0 0 0.0 0 0.0 0 0.0 -1.5914828777313232 -0.18174423277378082 -0.2839455306529999 -0.3879207670688629 -0.921689510345459 -0.0 0.08732900023460388 0.41360336542129517 0 1.0 0 0.0 0 0.0 0 0.0 -1.584106683731079 -0.18455849587917328 0.21605445444583893 -0.3258766531944275 -0.9454023838043213 -0.0 0.46853989362716675 0.22760164737701416 0 1.0 0 0.0 0 0.0 0 0.0 -1.5914828777313232 -0.18174423277378082 0.21605445444583893 -0.3879207670688629 -0.921689510345459 -0.0 0.46355491876602173 0.23200583457946777 0 1.0 0 0.0 0 0.0 0 0.0 1.3511579036712646 0.10253044962882996 -0.2839455306529999 0.9444258213043213 -0.32862329483032227 -0.0 0.03551158308982849 0.6954619884490967 0 1.0 0 0.0 0 0.0 0 0.0 1.351858377456665 0.10428905487060547 0.21605446934700012 0.9117404818534851 -0.4107486307621002 -0.0 0.4463229477405548 0.5396226644515991 0 1.0 0 0.0 0 0.0 0 0.0 1.3511579036712646 0.10253044962882996 0.21605446934700012 0.9444258213043213 -0.32862329483032227 -0.0 0.4458465576171875 0.5377424359321594 0 1.0 0 0.0 0 0.0 0 0.0 -0.05258345603942871 -0.1913229376077652 -0.2839455306529999 -0.11511582136154175 -0.9933469891548157 -0.0 0.007796823978424072 0.47536009550094604 0 1.0 0 0.0 0 0.0 0 0.0 -0.04660463333129883 -0.1918945610523224 0.21605446934700012 -0.07571642100811005 -0.9971007108688354 -0.0 0.4622941017150879 0.3164721131324768 0 1.0 0 0.0 0 0.0 0 0.0 -0.05258345603942871 -0.1913229376077652 0.21605445444583893 -0.11511582136154175 -0.9933469891548157 -0.0 0.45812341570854187 0.3178775906562805 0 1.0 0 0.0 0 0.0 0 0.0 1.4762828350067139 0.1027323305606842 -0.2839455306529999 -0.791589081287384 -0.6110110878944397 -0.0 0.9461220502853394 0.6951749324798584 0 1.0 0 0.0 0 0.0 0 0.0 1.4782397747039795 0.10002994537353516 0.21605446934700012 -0.8272042274475098 -0.5618457794189453 -0.0 0.5202562808990479 0.532355546951294 0 1.0 0 0.0 0 0.0 0 0.0 1.4762828350067139 0.1027323305606842 0.21605446934700012 -0.791589081287384 -0.6110110878944397 -0.0 0.5190862417221069 0.5353896021842957 0 1.0 0 0.0 0 0.0 0 0.0 0.5022380352020264 0.1853870451450348 -0.2839455306529999 0.31418806314468384 0.9493392705917358 -0.0 0.9239929914474487 0.7676823139190674 0 1.0 0 0.0 0 0.0 0 0.0 0.49359822273254395 0.18797752261161804 0.21605448424816132 0.2623981535434723 0.964934229850769 -0.0 0.5253105163574219 0.6152456402778625 0 1.0 0 0.0 0 0.0 0 0.0 0.5022380352020264 0.1853870451450348 0.21605448424816132 0.31418806314468384 0.9493392705917358 -0.0 0.5298394560813904 0.6121901869773865 0 1.0 0 0.0 0 0.0 0 0.0 -1.481134295463562 -0.18383851647377014 -0.2839455306529999 0.32856225967407227 -0.9444563388824463 -0.0 1.0282809734344482 0.41469669342041016 0 1.0 0 0.0 0 0.0 0 0.0 -1.4762672185897827 -0.18205071985721588 0.21605445444583893 0.36082032322883606 -0.9326151013374329 -0.0 0.5548592209815979 0.2225743532180786 0 1.0 0 0.0 0 0.0 0 0.0 -1.481134295463562 -0.18383851647377014 0.21605445444583893 0.32856225967407227 -0.9444563388824463 -0.0 0.55098956823349 0.22027724981307983 0 1.0 0 0.0 0 0.0 0 0.0 2.086514711380005 0.3347935080528259 -0.2839455306529999 -0.00039674062281847 0.999969482421875 -0.0 0.0064716339111328125 0.7823371291160583 0 1.0 0 0.0 0 0.0 0 0.0 2.073303461074829 0.3344895839691162 0.21605446934700012 -0.047090061008930206 0.9988707900047302 -0.0 0.46527335047721863 0.618800163269043 0 1.0 0 0.0 0 0.0 0 0.0 2.086514711380005 0.3347935080528259 0.21605446934700012 -0.00039674062281847 0.999969482421875 -0.0 0.47247588634490967 0.6193457841873169 0 1.0 0 0.0 0 0.0 0 0.0 -0.028221845626831055 -0.1922326534986496 -0.2839455306529999 0.039246805012226105 -0.99920654296875 -0.0 0.9932255744934082 0.47346174716949463 0 1.0 0 0.0 0 0.0 0 0.0 -0.022168874740600586 -0.19187510013580322 0.21605445444583893 0.0788903459906578 -0.9968565702438354 -0.0 1.479734182357788 0.3144296407699585 0 1.0 0 0.0 0 0.0 0 0.0 -0.028221845626831055 -0.1922326534986496 0.21605445444583893 0.039246805012226105 -0.99920654296875 -0.0 1.4753739833831787 0.3143734931945801 0 1.0 0 0.0 0 0.0 0 0.0 -1.405207633972168 -0.18224529922008514 -0.2839455306529999 -0.9354838728904724 -0.35331279039382935 -0.0 0.9876574277877808 0.4246361255645752 0 1.0 0 0.0 0 0.0 0 0.0 -1.4045532941818237 -0.18394553661346436 0.21605445444583893 -0.9332560300827026 -0.35914182662963867 -0.0 0.609167754650116 0.24128073453903198 0 1.0 0 0.0 0 0.0 0 0.0 -1.405207633972168 -0.18224529922008514 0.21605445444583893 -0.9354838728904724 -0.35331279039382935 -0.0 0.6084837913513184 0.2424808144569397 0 1.0 0 0.0 0 0.0 0 0.0 0.5103330612182617 0.18245115876197815 -0.2839455306529999 0.36994537711143494 0.9290444850921631 -0.0 0.9187459945678711 0.7627639174461365 0 1.0 0 0.0 0 0.0 0 0.0 0.5022380352020264 0.1853870451450348 0.21605448424816132 0.31418806314468384 0.9493392705917358 -0.0 0.5298394560813904 0.6121901869773865 0 1.0 0 0.0 0 0.0 0 0.0 0.5103330612182617 0.18245115876197815 0.21605448424816132 0.36994537711143494 0.9290444850921631 -0.0 0.5340526103973389 0.6088428497314453 0 1.0 0 0.0 0 0.0 0 0.0 1.3506128787994385 0.10070860385894775 -0.2839455306529999 0.9696035385131836 -0.24460585415363312 -0.0 0.03580290079116821 0.6934131383895874 0 1.0 0 0.0 0 0.0 0 0.0 1.3511579036712646 0.10253044962882996 0.21605446934700012 0.9444258213043213 -0.32862329483032227 -0.0 0.4458465576171875 0.5377424359321594 0 1.0 0 0.0 0 0.0 0 0.0 1.3506128787994385 0.10070860385894775 0.21605446934700012 0.9696035385131836 -0.24460585415363312 -0.0 0.44545286893844604 0.5357896089553833 0 1.0 0 0.0 0 0.0 0 0.0 -0.04660463333129883 -0.1918945610523224 -0.2839455306529999 -0.07571642100811005 -0.9971007108688354 -0.0 0.00424155592918396 0.4744833707809448 0 1.0 0 0.0 0 0.0 0 0.0 -0.040518760681152344 -0.19223752617835999 0.21605445444583893 -0.03735465556383133 -0.999298095703125 -0.0 0.4665878415107727 0.31540971994400024 0 1.0 0 0.0 0 0.0 0 0.0 -0.04660463333129883 -0.1918945610523224 0.21605446934700012 -0.07571642100811005 -0.9971007108688354 -0.0 0.4622941017150879 0.3164721131324768 0 1.0 0 0.0 0 0.0 0 0.0 -1.4045532941818237 -0.18394553661346436 -0.2839455306529999 0.0 -0.999969482421875 -0.0 0.9873474836349487 0.42323416471481323 0 1.0 0 0.0 0 0.0 0 0.0 -1.3071802854537964 -0.18394553661346436 0.21605445444583893 0.0 -0.999969482421875 -0.0 0.6608636379241943 0.2844606637954712 0 1.0 0 0.0 0 0.0 0 0.0 -1.4045532941818237 -0.18394553661346436 0.21605445444583893 0.0 -1.0 -0.0 0.609167754650116 0.24128073453903198 0 1.0 0 0.0 0 0.0 0 0.0 2.1004011631011963 0.33448582887649536 -0.2839455306529999 0.04541154205799103 0.9989623427391052 -0.0 0.9952402710914612 0.7828429341316223 0 1.0 0 0.0 0 0.0 0 0.0 2.086514711380005 0.3347935080528259 0.21605446934700012 -0.00039674062281847 0.999969482421875 -0.0 1.4724758863449097 0.6193457841873169 0 1.0 0 0.0 0 0.0 0 0.0 2.1004011631011963 0.33448582887649536 0.21605446934700012 0.04541154205799103 0.9989623427391052 -0.0 1.4800961017608643 0.6191619634628296 0 1.0 0 0.0 0 0.0 0 0.0 0.33858752250671387 0.18523618578910828 -0.2839455306529999 -0.3266090750694275 0.9451277256011963 -0.0 0.050045162439346313 0.769943118095398 0 1.0 0 0.0 0 0.0 0 0.0 0.32959747314453125 0.1818065345287323 0.21605448424816132 -0.3882870078086853 0.921536922454834 -0.0 0.43699097633361816 0.6112980842590332 0 1.0 0 0.0 0 0.0 0 0.0 0.33858752250671387 0.18523618578910828 0.21605448424816132 -0.3266090750694275 0.9451277256011963 -0.0 0.4417054355144501 0.6148390769958496 0 1.0 0 0.0 0 0.0 0 0.0 2.073303461074829 0.3344895839691162 -0.2839455306529999 -0.047090061008930206 0.9988707900047302 -0.0 0.01697695255279541 0.7806612253189087 0 1.0 0 0.0 0 0.0 0 0.0 2.0605223178863525 0.3335774540901184 0.21605446934700012 -0.09668263792991638 0.9953001737594604 -0.0 0.45836377143859863 0.6175618171691895 0 1.0 0 0.0 0 0.0 0 0.0 2.073303461074829 0.3344895839691162 0.21605446934700012 -0.047090061008930206 0.9988707900047302 -0.0 0.46527335047721863 0.618800163269043 0 1.0 0 0.0 0 0.0 0 0.0 1.3502237796783447 0.09882351756095886 -0.2839455306529999 0.9869990944862366 -0.16061891615390778 -0.0 0.03598657250404358 0.691315770149231 0 1.0 0 0.0 0 0.0 0 0.0 1.3506128787994385 0.10070860385894775 0.21605446934700012 0.9696035385131836 -0.24460585415363312 -0.0 0.44545286893844604 0.5357896089553833 0 1.0 0 0.0 0 0.0 0 0.0 1.3502237796783447 0.09882351756095886 0.21605446934700012 0.9869990944862366 -0.16061891615390778 -0.0 0.44514212012290955 0.5337626934051514 0 1.0 0 0.0 0 0.0 0 0.0 -0.040518760681152344 -0.19223752617835999 -0.2839455306529999 -0.03735465556383133 -0.999298095703125 -0.0 1.0006078481674194 0.47387105226516724 0 1.0 0 0.0 0 0.0 0 0.0 -0.03432583808898926 -0.19235184788703918 0.21605445444583893 0.0005188146606087685 -0.999969482421875 -0.0 1.4709974527359009 0.31470078229904175 0 1.0 0 0.0 0 0.0 0 0.0 -0.040518760681152344 -0.19223752617835999 0.21605445444583893 -0.03735465556383133 -0.999298095703125 -0.0 1.466587781906128 0.31540971994400024 0 1.0 0 0.0 0 0.0 0 0.0 -1.4860550165176392 -0.1854560375213623 -0.2839455306529999 0.29584643244743347 -0.9552293419837952 -0.0 1.030943751335144 0.41287368535995483 0 1.0 0 0.0 0 0.0 0 0.0 -1.481134295463562 -0.18383851647377014 0.21605445444583893 0.32856225967407227 -0.9444563388824463 -0.0 0.55098956823349 0.22027724981307983 0 1.0 0 0.0 0 0.0 0 0.0 -1.4860550165176392 -0.1854560375213623 0.21605445444583893 0.29584643244743347 -0.9551988244056702 -0.0 0.5470194220542908 0.2182314395904541 0 1.0 0 0.0 0 0.0 0 0.0 1.4782397747039795 0.10002994537353516 -0.2839455306529999 -0.8272042274475098 -0.5618457794189453 -0.0 0.9449471235275269 0.6918734312057495 0 1.0 0 0.0 0 0.0 0 0.0 1.480048418045044 0.09718650579452515 0.21605446934700012 -0.8592181205749512 -0.5115817785263062 -0.0 0.5213466882705688 0.5291599035263062 0 1.0 0 0.0 0 0.0 0 0.0 1.4782397747039795 0.10002994537353516 0.21605446934700012 -0.8272042274475098 -0.5618457794189453 -0.0 0.5202562808990479 0.532355546951294 0 1.0 0 0.0 0 0.0 0 0.0 -0.03432583808898926 -0.19235184788703918 -0.2839455306529999 0.0005188146606087685 -0.999969482421875 -0.0 0.9968962669372559 0.4735258221626282 0 1.0 0 0.0 0 0.0 0 0.0 -0.028221845626831055 -0.1922326534986496 0.21605445444583893 0.039246805012226105 -0.99920654296875 -0.0 1.4753739833831787 0.3143734931945801 0 1.0 0 0.0 0 0.0 0 0.0 -0.03432583808898926 -0.19235184788703918 0.21605445444583893 0.0005188146606087685 -0.999969482421875 -0.0 1.4709974527359009 0.31470078229904175 0 1.0 0 0.0 0 0.0 0 0.0 -1.584106683731079 -0.18455849587917328 -0.2839455306529999 -0.3258766531944275 -0.9454023838043213 -0.0 0.08343049883842468 0.4110526442527771 0 1.0 0 0.0 0 0.0 0 0.0 -1.576392412185669 -0.1869397908449173 0.21605445444583893 -0.26517534255981445 -0.964171290397644 -0.0 0.47397521138191223 0.22362583875656128 0 1.0 0 0.0 0 0.0 0 0.0 -1.584106683731079 -0.18455849587917328 0.21605445444583893 -0.3258766531944275 -0.9454023838043213 -0.0 0.46853989362716675 0.22760164737701416 0 1.0 0 0.0 0 0.0 0 0.0 0.5178830623626709 0.17916986346244812 -0.2839455306529999 0.4293954372406006 0.9031037092208862 -0.0 0.9140768051147461 0.7575938105583191 0 1.0 0 0.0 0 0.0 0 0.0 0.5103330612182617 0.18245115876197815 0.21605448424816132 0.36994537711143494 0.9290444850921631 -0.0 0.5340526103973389 0.6088428497314453 0 1.0 0 0.0 0 0.0 0 0.0 0.5178830623626709 0.17916986346244812 0.21605448424816132 0.4293954372406006 0.9031037092208862 -0.0 0.5379588007926941 0.6052160263061523 0 1.0 0 0.0 0 0.0 0 0.0 -0.1012258529663086 0.314128041267395 -0.2839455306529999 -1.0 0.0 -0.0 0.06410348415374756 0.897499144077301 0 1.0 0 0.0 0 0.0 0 0.0 -0.1012258529663086 0.24932944774627686 0.21605448424816132 -1.0 0.0 -0.0 0.44902312755584717 0.7215856313705444 0 1.0 0 0.0 0 0.0 0 0.0 -0.1012258529663086 0.314128041267395 0.21605446934700012 -1.0 0.0 -0.0 0.4513011574745178 0.7462323307991028 0 1.0 0 0.0 0 0.0 0 0.0 2.1138060092926025 0.3335627317428589 -0.2839455306529999 0.09347819536924362 0.9956053495407104 -0.0 0.9843412637710571 0.7820700407028198 0 1.0 0 0.0 0 0.0 0 0.0 2.1004011631011963 0.33448582887649536 0.21605446934700012 0.04541154205799103 0.9989623427391052 -0.0 1.4800961017608643 0.6191619634628296 0 1.0 0 0.0 0 0.0 0 0.0 2.1138060092926025 0.3335627317428589 0.21605446934700012 0.09347819536924362 0.9956053495407104 -0.0 1.4874799251556396 0.618225634098053 0 1.0 0 0.0 0 0.0 0 0.0 0.32959747314453125 0.1818065345287323 -0.2839455306529999 -0.3882870078086853 0.921536922454834 -0.0 0.05594471096992493 0.7645926475524902 0 1.0 0 0.0 0 0.0 0 0.0 0.32119107246398926 0.17791959643363953 0.21605448424816132 -0.4528946876525879 0.8915371894836426 -0.0 0.4326004981994629 0.6073610782623291 0 1.0 0 0.0 0 0.0 0 0.0 0.32959747314453125 0.1818065345287323 0.21605448424816132 -0.3882870078086853 0.921536922454834 -0.0 0.43699097633361816 0.6112980842590332 0 1.0 0 0.0 0 0.0 0 0.0 2.0605223178863525 0.3335774540901184 -0.2839455306529999 -0.09668263792991638 0.9953001737594604 -0.0 0.02686828374862671 0.7779173851013184 0 1.0 0 0.0 0 0.0 0 0.0 2.0481717586517334 0.3320571780204773 0.21605446934700012 -0.14902187883853912 0.9888302087783813 -0.0 0.4517524838447571 0.6156635284423828 0 1.0 0 0.0 0 0.0 0 0.0 2.0605223178863525 0.3335774540901184 0.21605446934700012 -0.09668263792991638 0.9953001737594604 -0.0 0.45836377143859863 0.6175618171691895 0 1.0 0 0.0 0 0.0 0 0.0 1.3499906063079834 0.09687519073486328 -0.2839455306529999 0.9968565702438354 -0.0788903459906578 -0.0 0.03606346249580383 0.6891689300537109 0 1.0 0 0.0 0 0.0 0 0.0 1.3502237796783447 0.09882351756095886 0.21605446934700012 0.9869990944862366 -0.16061891615390778 -0.0 0.44514212012290955 0.5337626934051514 0 1.0 0 0.0 0 0.0 0 0.0 1.3499906063079834 0.09687519073486328 0.21605446934700012 0.9968565702438354 -0.0788903459906578 -0.0 0.44491448998451233 0.5316601991653442 0 1.0 0 0.0 0 0.0 0 0.0 0.1243431568145752 0.314128041267395 -0.2839455306529999 0.0 1.0 -0.0 0.8537107706069946 0.8676877617835999 0 1.0 0 0.0 0 0.0 0 0.0 -0.1012258529663086 0.314128041267395 0.21605446934700012 0.0 1.0 -0.0 0.4513011574745178 0.7462323307991028 0 1.0 0 0.0 0 0.0 0 0.0 0.1243431568145752 0.314128041267395 0.21605446934700012 0.0 1.0 -0.0 0.5506380796432495 0.7342168092727661 0 1.0 0 0.0 0 0.0 0 0.0 -1.4910292625427246 -0.18690331280231476 -0.2839455306529999 0.2627948820590973 -0.964842677116394 -0.0 1.0336346626281738 0.41123098134994507 0 1.0 0 0.0 0 0.0 0 0.0 -1.4860550165176392 -0.1854560375213623 0.21605445444583893 0.29584643244743347 -0.9551988244056702 -0.0 0.5470194220542908 0.2182314395904541 0 1.0 0 0.0 0 0.0 0 0.0 -1.4910292625427246 -0.18690331280231476 0.21605445444583893 0.2627948820590973 -0.964842677116394 -0.0 0.5429552793502808 0.21644043922424316 0 1.0 0 0.0 0 0.0 0 0.0 1.480048418045044 0.09718650579452515 -0.2839455306529999 -0.8592181205749512 -0.5115817785263062 -0.0 0.9438934922218323 0.688425600528717 0 1.0 0 0.0 0 0.0 0 0.0 1.481708288192749 0.09420198202133179 0.21605446934700012 -0.887417197227478 -0.460921049118042 -0.0 0.5223576426506042 0.5258004665374756 0 1.0 0 0.0 0 0.0 0 0.0 1.480048418045044 0.09718650579452515 0.21605446934700012 -0.8592181205749512 -0.5115817785263062 -0.0 0.5213466882705688 0.5291599035263062 0 1.0 0 0.0 0 0.0 0 0.0 -0.1012258529663086 0.24932944774627686 -0.2839455306529999 0.0 -1.0 -0.0 1.0582492351531982 0.8729636073112488 0 1.0 0 0.0 0 0.0 0 0.0 0.1243431568145752 0.24932944774627686 0.21605448424816132 0.0 -1.0 -0.0 0.5528576970100403 0.7088805437088013 0 1.0 0 0.0 0 0.0 0 0.0 -0.1012258529663086 0.24932944774627686 0.21605448424816132 0.0 -1.0 -0.0 0.44902312755584717 0.7215856313705444 0 1.0 0 0.0 0 0.0 0 0.0 0.524888277053833 0.1755431890487671 -0.2839455306529999 0.4920804500579834 0.8705404996871948 -0.0 0.9099525809288025 0.7522066831588745 0 1.0 0 0.0 0 0.0 0 0.0 0.5178830623626709 0.17916986346244812 0.21605448424816132 0.4293954372406006 0.9031037092208862 -0.0 0.5379588007926941 0.6052160263061523 0 1.0 0 0.0 0 0.0 0 0.0 0.524888277053833 0.1755431890487671 0.21605448424816132 0.4920804500579834 0.8705404996871948 -0.0 0.5415674448013306 0.6013184785842896 0 1.0 0 0.0 0 0.0 0 0.0 0.1243431568145752 0.24932944774627686 -0.2839455306529999 1.0 0.0 -0.0 0.8631843328475952 0.8435003757476807 0 1.0 0 0.0 0 0.0 0 0.0 0.1243431568145752 0.314128041267395 0.21605446934700012 0.999969482421875 0.0 -0.0 0.5506380796432495 0.7342168092727661 0 1.0 0 0.0 0 0.0 0 0.0 0.1243431568145752 0.24932944774627686 0.21605448424816132 1.0 0.0 -0.0 0.5528576970100403 0.7088805437088013 0 1.0 0 0.0 0 0.0 0 0.0 -1.4960569143295288 -0.18818031251430511 -0.2839455306529999 0.2294991910457611 -0.9732962846755981 -0.0 1.036353588104248 0.40976768732070923 0 1.0 0 0.0 0 0.0 0 0.0 -1.4910292625427246 -0.18690331280231476 0.21605445444583893 0.2627948820590973 -0.964842677116394 -0.0 0.5429552793502808 0.21644043922424316 0 1.0 0 0.0 0 0.0 0 0.0 -1.4960569143295288 -0.18818031251430511 0.21605445444583893 0.2295297086238861 -0.9732962846755981 -0.0 0.5388044118881226 0.21490734815597534 0 1.0 0 0.0 0 0.0 0 0.0 2.1267292499542236 0.3320242762565613 -0.2839455306529999 0.14444410800933838 0.9895016551017761 -0.0 0.9739037156105042 0.7800891399383545 0 1.0 0 0.0 0 0.0 0 0.0 2.1138060092926025 0.3335627317428589 0.21605446934700012 0.09347819536924362 0.9956053495407104 -0.0 0.48747992515563965 0.618225634098053 0 1.0 0 0.0 0 0.0 0 0.0 2.1267292499542236 0.3320242762565613 0.21605446934700012 0.14444410800933838 0.9895016551017761 -0.0 0.4946056604385376 0.6165568828582764 0 1.0 0 0.0 0 0.0 0 0.0 0.32119107246398926 0.17791959643363953 -0.2839455306529999 -0.4528946876525879 0.8915371894836426 -0.0 0.061192870140075684 0.7588622570037842 0 1.0 0 0.0 0 0.0 0 0.0 0.313368558883667 0.17357537150382996 0.21605448424816132 -0.5195165872573853 0.8544266819953918 -0.0 0.4285222887992859 0.6030384302139282 0 1.0 0 0.0 0 0.0 0 0.0 0.32119107246398926 0.17791959643363953 0.21605448424816132 -0.4528946876525879 0.8915371894836426 -0.0 0.4326004981994629 0.6073610782623291 0 1.0 0 0.0 0 0.0 0 0.0 1.481708288192749 0.09420198202133179 -0.2839455306529999 -0.887417197227478 -0.460921049118042 -0.0 0.9429594278335571 0.6848307847976685 0 1.0 0 0.0 0 0.0 0 0.0 1.4832203388214111 0.09107637405395508 0.21605446934700012 -0.9118625521659851 -0.41044342517852783 -0.0 0.5232900381088257 0.5222742557525635 0 1.0 0 0.0 0 0.0 0 0.0 1.481708288192749 0.09420198202133179 0.21605446934700012 -0.887417197227478 -0.460921049118042 -0.0 0.5223576426506042 0.5258004665374756 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 0.32953959703445435 -0.2839455306529999 -1.0 0.0 -0.0 0.12790176272392273 0.820160448551178 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 -1.0 0.0 -0.0 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 0.32953959703445435 0.21605446934700012 -1.0 0.0 -0.0 0.39915820956230164 0.6972336173057556 0 1.0 0 0.0 0 0.0 0 0.0 -1.576392412185669 -0.1869397908449173 -0.2839455306529999 -0.26517534255981445 -0.964171290397644 -0.0 0.07935571670532227 0.40890204906463623 0 1.0 0 0.0 0 0.0 0 0.0 -1.5683399438858032 -0.18888813257217407 0.21605445444583893 -0.20651875436306 -0.9784234166145325 -0.0 0.47987258434295654 0.22011399269104004 0 1.0 0 0.0 0 0.0 0 0.0 -1.576392412185669 -0.1869397908449173 0.21605445444583893 -0.26517534255981445 -0.964171290397644 -0.0 0.47397521138191223 0.22362583875656128 0 1.0 0 0.0 0 0.0 0 0.0 2.0481717586517334 0.3320571780204773 -0.2839455306529999 -0.14902187883853912 0.9888302087783813 -0.0 0.0360887348651886 0.7742131352424622 0 1.0 0 0.0 0 0.0 0 0.0 2.0362517833709717 0.32992881536483765 0.21605446934700012 -0.20380260050296783 0.9790032505989075 -0.0 0.4454401135444641 0.6131366491317749 0 1.0 0 0.0 0 0.0 0 0.0 2.0481717586517334 0.3320571780204773 0.21605446934700012 -0.14902187883853912 0.9888302087783813 -0.0 0.4517524838447571 0.6156635284423828 0 1.0 0 0.0 0 0.0 0 0.0 1.4832203388214111 0.09107637405395508 -0.2839455306529999 -0.9118625521659851 -0.41044342517852783 -0.0 0.9421427249908447 0.6810876131057739 0 1.0 0 0.0 0 0.0 0 0.0 1.4845836162567139 0.08780968189239502 0.21605446934700012 -0.9327067136764526 -0.36057618260383606 -0.0 0.5241435170173645 0.5185786485671997 0 1.0 0 0.0 0 0.0 0 0.0 1.4832203388214111 0.09107637405395508 0.21605446934700012 -0.9118625521659851 -0.41044342517852783 -0.0 0.5232900381088257 0.5222742557525635 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.32953959703445435 -0.2839455306529999 0.0 0.999969482421875 -0.0 0.07377690076828003 0.8601027727127075 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 0.32953959703445435 0.21605446934700012 0.0 0.999969482421875 -0.0 0.39915820956230164 0.6972336173057556 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.32953959703445435 0.21605446934700012 0.0 1.0 -0.0 0.43876373767852783 0.7131302356719971 0 1.0 0 0.0 0 0.0 0 0.0 0.531348705291748 0.17157110571861267 -0.2839455306529999 0.5530259013175964 0.8331248164176941 -0.0 0.9063409566879272 0.7466289401054382 0 1.0 0 0.0 0 0.0 0 0.0 0.524888277053833 0.1755431890487671 0.21605448424816132 0.4920804500579834 0.8705404996871948 -0.0 0.5415674448013306 0.6013184785842896 0 1.0 0 0.0 0 0.0 0 0.0 0.531348705291748 0.17157110571861267 0.21605448424816132 0.5530259013175964 0.8331248164176941 -0.0 0.5448883175849915 0.5971555709838867 0 1.0 0 0.0 0 0.0 0 0.0 -1.5011382102966309 -0.18928703665733337 -0.2839455306529999 0.19614246487617493 -0.9805597066879272 -0.0 0.039100319147109985 0.4084831476211548 0 1.0 0 0.0 0 0.0 0 0.0 -1.4960569143295288 -0.18818031251430511 0.21605445444583893 0.2295297086238861 -0.9732962846755981 -0.0 0.5388044118881226 0.21490734815597534 0 1.0 0 0.0 0 0.0 0 0.0 -1.5011382102966309 -0.18928703665733337 0.21605445444583893 0.19614246487617493 -0.9805597066879272 -0.0 0.5345746278762817 0.21363526582717896 0 1.0 0 0.0 0 0.0 0 0.0 2.1391708850860596 0.32987040281295776 -0.2839455306529999 0.1981566846370697 0.9801629781723022 -0.0 0.9640299081802368 0.7769839763641357 0 1.0 0 0.0 0 0.0 0 0.0 2.1267292499542236 0.3320242762565613 0.21605446934700012 0.14444410800933838 0.9895016551017761 -0.0 0.4946056604385376 0.6165568828582764 0 1.0 0 0.0 0 0.0 0 0.0 2.1391708850860596 0.32987040281295776 0.21605446934700012 0.1981566846370697 0.9801629781723022 -0.0 0.5014569759368896 0.6141777038574219 0 1.0 0 0.0 0 0.0 0 0.0 0.313368558883667 0.17357537150382996 -0.2839455306529999 -0.5195165872573853 0.8544266819953918 -0.0 0.06582790613174438 0.7527945637702942 0 1.0 0 0.0 0 0.0 0 0.0 0.30612969398498535 0.1687738597393036 0.21605446934700012 -0.5868709087371826 0.8096560835838318 -0.0 0.4247440695762634 0.5983362197875977 0 1.0 0 0.0 0 0.0 0 0.0 0.313368558883667 0.17357537150382996 0.21605448424816132 -0.5195165872573853 0.8544266819953918 -0.0 0.4285222887992859 0.6030384302139282 0 1.0 0 0.0 0 0.0 0 0.0 1.4845836162567139 0.08780968189239502 -0.2839455306529999 -0.9327067136764526 -0.36057618260383606 -0.0 0.9414418935775757 0.6771947145462036 0 1.0 0 0.0 0 0.0 0 0.0 1.4857985973358154 0.08440190553665161 0.21605446934700012 -0.9501022100448608 -0.3119296729564667 -0.0 0.5249184966087341 0.5147104263305664 0 1.0 0 0.0 0 0.0 0 0.0 1.4845836162567139 0.08780968189239502 0.21605446934700012 -0.9327067136764526 -0.36057618260383606 -0.0 0.5241435170173645 0.5185786485671997 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 -0.2839455306529999 1.0 0.0 -0.0 0.05936384201049805 0.7411052584648132 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.32953959703445435 0.21605446934700012 1.0 0.0 -0.0 0.43876373767852783 0.7131302356719971 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 0.21605446934700012 1.0 0.0 -0.0 0.42958128452301025 0.5941163897514343 0 1.0 0 0.0 0 0.0 0 0.0 -1.5683399438858032 -0.18888813257217407 -0.2839455306529999 -0.20651875436306 -0.9784234166145325 -0.0 0.07509827613830566 0.40715938806533813 0 1.0 0 0.0 0 0.0 0 0.0 -1.559949517250061 -0.1904035061597824 0.21605445444583893 -0.1504257321357727 -0.9886165857315063 -0.0 0.48623794317245483 0.2171075940132141 0 1.0 0 0.0 0 0.0 0 0.0 -1.5683399438858032 -0.18888813257217407 0.21605445444583893 -0.20651875436306 -0.9784234166145325 -0.0 0.47987258434295654 0.22011399269104004 0 1.0 0 0.0 0 0.0 0 0.0 2.0362517833709717 0.32992881536483765 -0.2839455306529999 -0.20380260050296783 0.9790032505989075 -0.0 0.04460981488227844 0.769651472568512 0 1.0 0 0.0 0 0.0 0 0.0 2.0247623920440674 0.32719236612319946 0.21605446934700012 -0.2606891095638275 0.965391993522644 -0.0 0.43942350149154663 0.6100096702575684 0 1.0 0 0.0 0 0.0 0 0.0 2.0362517833709717 0.32992881536483765 0.21605446934700012 -0.20380260050296783 0.9790032505989075 -0.0 0.4454401135444641 0.6131366491317749 0 1.0 0 0.0 0 0.0 0 0.0 -0.39194393157958984 0.19643977284431458 -0.2839455306529999 -0.0021973326802253723 0.999969482421875 -0.0 0.9794628620147705 0.7999661564826965 0 1.0 0 0.0 0 0.0 0 0.0 -0.4022181034088135 0.19607976078987122 0.21605448424816132 -0.0710165724158287 0.9974669814109802 -0.0 1.48317551612854 0.6406345367431641 0 1.0 0 0.0 0 0.0 0 0.0 -0.39194393157958984 0.19643977284431458 0.21605448424816132 -0.0021973326802253723 0.999969482421875 -0.0 0.48874813318252563 0.6407021284103394 0 1.0 0 0.0 0 0.0 0 0.0 1.4857985973358154 0.08440190553665161 -0.2839455306529999 -0.9501022100448608 -0.3119296729564667 -0.0 0.940855085849762 0.6731501817703247 0 1.0 0 0.0 0 0.0 0 0.0 1.4868652820587158 0.08085307478904724 0.21605446934700012 -0.9576708078384399 -0.28785058856010437 -0.0 0.5256151556968689 0.5106664299964905 0 1.0 0 0.0 0 0.0 0 0.0 1.4857985973358154 0.08440190553665161 0.21605446934700012 -0.9501022100448608 -0.3119296729564667 -0.0 0.5249184966087341 0.5147104263305664 0 1.0 0 0.0 0 0.0 0 0.0 0.5373761653900146 0.16726094484329224 -0.2839455306529999 0.6065859198570251 0.7949766516685486 -0.0 0.9031440019607544 0.7408447861671448 0 1.0 0 0.0 0 0.0 0 0.0 0.531348705291748 0.17157110571861267 0.21605448424816132 0.5530259013175964 0.8331248164176941 -0.0 0.5448883175849915 0.5971555709838867 0 1.0 0 0.0 0 0.0 0 0.0 0.5373761653900146 0.16726094484329224 0.21605446934700012 0.6065859198570251 0.7949766516685486 -0.0 0.5479847192764282 0.5927214622497559 0 1.0 0 0.0 0 0.0 0 0.0 1.4868652820587158 0.08085307478904724 -0.2839455306529999 0.1817987561225891 -0.983306348323822 -0.0 0.9403803944587708 0.6689517498016357 0 1.0 0 0.0 0 0.0 0 0.0 1.5796849727630615 0.0980159342288971 0.21605446934700012 0.1817987561225891 -0.983306348323822 -0.0 0.5723452568054199 0.5243043899536133 0 1.0 0 0.0 0 0.0 0 0.0 1.4868652820587158 0.08085307478904724 0.21605446934700012 0.1817987561225891 -0.983306348323822 -0.0 0.5256151556968689 0.5106664299964905 0 1.0 0 0.0 0 0.0 0 0.0 -0.3807816505432129 0.19609802961349487 -0.2839455306529999 0.062410350888967514 0.9980468153953552 -0.0 0.970216691493988 0.7989437580108643 0 1.0 0 0.0 0 0.0 0 0.0 -0.39194393157958984 0.19643977284431458 0.21605448424816132 -0.0021973326802253723 0.999969482421875 -0.0 0.48874813318252563 0.6407021284103394 0 1.0 0 0.0 0 0.0 0 0.0 -0.3807816505432129 0.19609802961349487 0.21605448424816132 0.062410350888967514 0.9980468153953552 -0.0 0.494787335395813 0.6400524377822876 0 1.0 0 0.0 0 0.0 0 0.0 -1.5062729120254517 -0.19022351503372192 -0.2839455306529999 0.16275520622730255 -0.9866328835487366 -0.0 0.041874319314956665 0.40737658739089966 0 1.0 0 0.0 0 0.0 0 0.0 -1.5011382102966309 -0.18928703665733337 0.21605445444583893 0.19614246487617493 -0.9805597066879272 -0.0 0.5345746278762817 0.21363526582717896 0 1.0 0 0.0 0 0.0 0 0.0 -1.5062729120254517 -0.19022351503372192 0.21605445444583893 0.16275520622730255 -0.9866328835487366 -0.0 0.5302750468254089 0.21262699365615845 0 1.0 0 0.0 0 0.0 0 0.0 2.1511309146881104 0.32710111141204834 -0.2839455306529999 0.2543107271194458 0.9671010375022888 -0.0 0.9547929763793945 0.7728448510169983 0 1.0 0 0.0 0 0.0 0 0.0 2.1391708850860596 0.32987040281295776 0.21605446934700012 0.1981566846370697 0.9801629781723022 -0.0 0.5014569759368896 0.6141777038574219 0 1.0 0 0.0 0 0.0 0 0.0 2.1511309146881104 0.32710111141204834 0.21605446934700012 0.2543107271194458 0.9671010375022888 -0.0 0.5080228447914124 0.6111105680465698 0 1.0 0 0.0 0 0.0 0 0.0 0.30612969398498535 0.1687738597393036 -0.2839455306529999 -0.5868709087371826 0.8096560835838318 -0.0 0.06988894939422607 0.7464208602905273 0 1.0 0 0.0 0 0.0 0 0.0 0.29947471618652344 0.16351506114006042 0.21605446934700012 -0.6484267711639404 0.7612537145614624 -0.0 0.4212538003921509 0.5932559967041016 0 1.0 0 0.0 0 0.0 0 0.0 0.30612969398498535 0.1687738597393036 0.21605446934700012 -0.5868709087371826 0.8096560835838318 -0.0 0.4247440695762634 0.5983362197875977 0 1.0 0 0.0 0 0.0 0 0.0 1.259554386138916 0.09793812036514282 -0.2839455306529999 -0.9904171824455261 0.13800470530986786 -0.0 0.08776611089706421 0.6681519746780396 0 1.0 0 0.0 0 0.0 0 0.0 1.2587590217590332 0.09020313620567322 0.21605446934700012 -0.9976806044578552 0.06784264743328094 -0.0 0.39880692958831787 0.5234965085983276 0 1.0 0 0.0 0 0.0 0 0.0 1.259554386138916 0.09793812036514282 0.21605446934700012 -0.9904171824455261 0.13800470530986786 -0.0 0.39975225925445557 0.53098064661026 0 1.0 0 0.0 0 0.0 0 0.0 2.0247623920440674 0.32719236612319946 -0.2839455306529999 -0.2606891095638275 0.965391993522644 -0.0 0.05242618918418884 0.7643268704414368 0 1.0 0 0.0 0 0.0 0 0.0 2.0137035846710205 0.32384783029556274 0.21605446934700012 -0.3191625773906708 0.9476912617683411 -0.0 0.4336964786052704 0.606307864189148 0 1.0 0 0.0 0 0.0 0 0.0 2.0247623920440674 0.32719236612319946 0.21605446934700012 -0.2606891095638275 0.965391993522644 -0.0 0.43942350149154663 0.6100096702575684 0 1.0 0 0.0 0 0.0 0 0.0 -0.3699455261230469 0.19507277011871338 -0.2839455306529999 0.1273842602968216 0.9918210506439209 -0.0 0.9613829851150513 0.7969457507133484 0 1.0 0 0.0 0 0.0 0 0.0 -0.3807816505432129 0.19609802961349487 0.21605448424816132 0.062410350888967514 0.9980468153953552 -0.0 0.494787335395813 0.6400524377822876 0 1.0 0 0.0 0 0.0 0 0.0 -0.3699455261230469 0.19507277011871338 0.21605448424816132 0.1273842602968216 0.9918210506439209 -0.0 0.5006298422813416 0.6387298703193665 0 1.0 0 0.0 0 0.0 0 0.0 -1.5114612579345703 -0.19098970293998718 -0.2839455306529999 0.12952055037021637 -0.9915463924407959 -0.0 0.04467529058456421 0.40644752979278564 0 1.0 0 0.0 0 0.0 0 0.0 -1.5062729120254517 -0.19022351503372192 0.21605445444583893 0.16275520622730255 -0.9866328835487366 -0.0 0.5302750468254089 0.21262699365615845 0 1.0 0 0.0 0 0.0 0 0.0 -1.5114612579345703 -0.19098970293998718 0.21605445444583893 0.12952055037021637 -0.9915463924407959 -0.0 0.5259150266647339 0.21188491582870483 0 1.0 0 0.0 0 0.0 0 0.0 -0.4022181034088135 0.19607976078987122 -0.2839455306529999 -0.0710165724158287 0.9974669814109802 -0.0 0.9880318641662598 0.799943745136261 0 1.0 0 0.0 0 0.0 0 0.0 -0.4122591018676758 0.1949997842311859 0.21605448424816132 -0.143803209066391 0.9895932078361511 -0.0 1.4777190685272217 0.6398723721504211 0 1.0 0 0.0 0 0.0 0 0.0 -0.4022181034088135 0.19607976078987122 0.21605448424816132 -0.0710165724158287 0.9974669814109802 -0.0 1.48317551612854 0.6406345367431641 0 1.0 0 0.0 0 0.0 0 0.0 -1.559949517250061 -0.1904035061597824 -0.2839455306529999 -0.1504257321357727 -0.9886165857315063 -0.0 0.07065242528915405 0.40583473443984985 0 1.0 0 0.0 0 0.0 0 0.0 -1.5512208938598633 -0.1914859116077423 0.21605445444583893 -0.09726248681545258 -0.9952391386032104 -0.0 0.4930703639984131 0.21465349197387695 0 1.0 0 0.0 0 0.0 0 0.0 -1.559949517250061 -0.1904035061597824 0.21605445444583893 -0.1504257321357727 -0.9886165857315063 -0.0 0.48623794317245483 0.2171075940132141 0 1.0 0 0.0 0 0.0 0 0.0 0.5430824756622314 0.16261997818946838 -0.2839455306529999 0.6549577116966248 0.7556383013725281 -0.0 0.9002724885940552 0.7348303198814392 0 1.0 0 0.0 0 0.0 0 0.0 0.5373761653900146 0.16726094484329224 0.21605446934700012 0.6065859198570251 0.7949766516685486 -0.0 0.5479847192764282 0.5927214622497559 0 1.0 0 0.0 0 0.0 0 0.0 0.5430824756622314 0.16261997818946838 0.21605446934700012 0.6549577116966248 0.7556383013725281 -0.0 0.5509172081947327 0.588007390499115 0 1.0 0 0.0 0 0.0 0 0.0 1.349912405014038 0.09486359357833862 -0.2839455306529999 1.0 0.00027466658502817154 -0.0 0.03603509068489075 0.6869707107543945 0 1.0 0 0.0 0 0.0 0 0.0 1.3499906063079834 0.09687519073486328 0.21605446934700012 0.9968565702438354 -0.0788903459906578 -0.0 0.44491448998451233 0.5316601991653442 0 1.0 0 0.0 0 0.0 0 0.0 1.349912405014038 0.09486359357833862 0.21605446934700012 0.999969482421875 0.00027466658502817154 -0.0 0.4447696805000305 0.5294804573059082 0 1.0 0 0.0 0 0.0 0 0.0 2.162609338760376 0.3237164616584778 -0.2839455306529999 0.31247901916503906 0.9499191045761108 -0.0 0.9462374448776245 0.767762303352356 0 1.0 0 0.0 0 0.0 0 0.0 2.1511309146881104 0.32710111141204834 0.21605446934700012 0.2543107271194458 0.9671010375022888 -0.0 0.5080228447914124 0.6111105680465698 0 1.0 0 0.0 0 0.0 0 0.0 2.162609338760376 0.3237164616584778 0.21605446934700012 0.31247901916503906 0.9499191045761108 -0.0 0.5142971873283386 0.6073771715164185 0 1.0 0 0.0 0 0.0 0 0.0 0.29947471618652344 0.16351506114006042 -0.2839455306529999 -0.6484267711639404 0.7612537145614624 -0.0 0.07341375946998596 0.7397626638412476 0 1.0 0 0.0 0 0.0 0 0.0 0.2933766841888428 0.15792062878608704 0.21605446934700012 -0.6993011236190796 0.7147740125656128 -0.0 0.4180349111557007 0.5878974199295044 0 1.0 0 0.0 0 0.0 0 0.0 0.29947471618652344 0.16351506114006042 0.21605446934700012 -0.6484267711639404 0.7612537145614624 -0.0 0.4212538003921509 0.5932559967041016 0 1.0 0 0.0 0 0.0 0 0.0 2.0137035846710205 0.32384783029556274 -0.2839455306529999 -0.3191625773906708 0.9476912617683411 -0.0 0.059550583362579346 0.758323073387146 0 1.0 0 0.0 0 0.0 0 0.0 2.003075361251831 0.3198952078819275 0.21605446934700012 -0.3786126375198364 0.9255348443984985 -0.0 0.4282504916191101 0.6020529270172119 0 1.0 0 0.0 0 0.0 0 0.0 2.0137035846710205 0.32384783029556274 0.21605446934700012 -0.3191625773906708 0.9476912617683411 -0.0 0.4336964786052704 0.606307864189148 0 1.0 0 0.0 0 0.0 0 0.0 1.3499805927276611 0.09313416481018066 -0.2839455306529999 0.9967650175094604 0.07998901605606079 -0.0 0.035921454429626465 0.6850959062576294 0 1.0 0 0.0 0 0.0 0 0.0 1.349912405014038 0.09486359357833862 0.21605446934700012 0.999969482421875 0.00027466658502817154 -0.0 0.4447696805000305 0.5294804573059082 0 1.0 0 0.0 0 0.0 0 0.0 1.3499805927276611 0.09313416481018066 0.21605446934700012 0.9967650175094604 0.07998901605606079 -0.0 0.44472062587738037 0.5275986194610596 0 1.0 0 0.0 0 0.0 0 0.0 -0.3594350814819336 0.19336402416229248 -0.2839455306529999 0.19467757642269135 0.9808648824691772 -0.0 0.9530216455459595 0.7940287590026855 0 1.0 0 0.0 0 0.0 0 0.0 -0.3699455261230469 0.19507277011871338 0.21605448424816132 0.1273842602968216 0.9918210506439209 -0.0 0.5006298422813416 0.6387298703193665 0 1.0 0 0.0 0 0.0 0 0.0 -0.3594350814819336 0.19336402416229248 0.21605448424816132 0.19467757642269135 0.9808648824691772 -0.0 0.5062727332115173 0.636748731136322 0 1.0 0 0.0 0 0.0 0 0.0 -1.5167030096054077 -0.19158564507961273 -0.2839455306529999 0.09653004258871078 -0.9953001737594604 -0.0 0.04750263690948486 0.405695378780365 0 1.0 0 0.0 0 0.0 0 0.0 -1.5114612579345703 -0.19098970293998718 0.21605445444583893 0.12952055037021637 -0.9915463924407959 -0.0 0.5259150266647339 0.21188491582870483 0 1.0 0 0.0 0 0.0 0 0.0 -1.5167030096054077 -0.19158564507961273 0.21605445444583893 0.09653004258871078 -0.9953001737594604 -0.0 0.5215050578117371 0.21141117811203003 0 1.0 0 0.0 0 0.0 0 0.0 -0.4122591018676758 0.1949997842311859 -0.2839455306529999 -0.143803209066391 0.9895932078361511 -0.0 0.9963911771774292 0.7989473342895508 0 1.0 0 0.0 0 0.0 0 0.0 -0.42206645011901855 0.19319981336593628 0.21605448424816132 -0.21765801310539246 0.9760124683380127 -0.0 1.4723812341690063 0.638421893119812 0 1.0 0 0.0 0 0.0 0 0.0 -0.4122591018676758 0.1949997842311859 0.21605448424816132 -0.143803209066391 0.9895932078361511 -0.0 1.4777190685272217 0.6398723721504211 0 1.0 0 0.0 0 0.0 0 0.0 -1.5512208938598633 -0.1914859116077423 -0.2839455306529999 -0.09726248681545258 -0.9952391386032104 -0.0 0.06601288914680481 0.40493983030319214 0 1.0 0 0.0 0 0.0 0 0.0 -1.5421541929244995 -0.19213536381721497 0.21605445444583893 -0.047242652624845505 -0.9988707900047302 -0.0 0.5003594756126404 0.21280395984649658 0 1.0 0 0.0 0 0.0 0 0.0 -1.5512208938598633 -0.1914859116077423 0.21605445444583893 -0.09726248681545258 -0.9952391386032104 -0.0 0.4930703639984131 0.21465349197387695 0 1.0 0 0.0 0 0.0 0 0.0 0.5484678745269775 0.1576482057571411 -0.2839455306529999 0.7010712027549744 0.713064968585968 -0.0 0.8977089524269104 0.7285908460617065 0 1.0 0 0.0 0 0.0 0 0.0 0.5430824756622314 0.16261997818946838 0.21605446934700012 0.6549577116966248 0.7556383013725281 -0.0 0.5509172081947327 0.588007390499115 0 1.0 0 0.0 0 0.0 0 0.0 0.5484678745269775 0.1576482057571411 0.21605446934700012 0.7010712027549744 0.713064968585968 -0.0 0.5536915063858032 0.5830111503601074 0 1.0 0 0.0 0 0.0 0 0.0 1.3501851558685303 0.09144851565361023 -0.2839455306529999 0.9867854714393616 0.16187018156051636 -0.0 0.03572002053260803 0.6832842230796814 0 1.0 0 0.0 0 0.0 0 0.0 1.3499805927276611 0.09313416481018066 0.21605446934700012 0.9967650175094604 0.07998901605606079 -0.0 0.44472062587738037 0.5275986194610596 0 1.0 0 0.0 0 0.0 0 0.0 1.3501851558685303 0.09144851565361023 0.21605446934700012 0.9867854714393616 0.16187018156051636 -0.0 0.4447501301765442 0.5257568359375 0 1.0 0 0.0 0 0.0 0 0.0 2.1736061573028564 0.3197163939476013 -0.2839455306529999 0.3720511496067047 0.9281899333000183 -0.0 0.9383829832077026 0.7618219256401062 0 1.0 0 0.0 0 0.0 0 0.0 2.162609338760376 0.3237164616584778 0.21605446934700012 0.31247901916503906 0.9499191045761108 -0.0 0.5142971873283386 0.6073771715164185 0 1.0 0 0.0 0 0.0 0 0.0 2.1736061573028564 0.3197163939476013 0.21605446934700012 0.3720511496067047 0.9281899333000183 -0.0 0.5202778577804565 0.602996826171875 0 1.0 0 0.0 0 0.0 0 0.0 0.2933766841888428 0.15792062878608704 -0.2839455306529999 -0.6993011236190796 0.7147740125656128 -0.0 0.0764627754688263 0.7329283952713013 0 1.0 0 0.0 0 0.0 0 0.0 0.287808895111084 0.15211209654808044 0.21605446934700012 -0.7448957562446594 0.6671651601791382 -0.0 0.41507312655448914 0.5823611617088318 0 1.0 0 0.0 0 0.0 0 0.0 0.2933766841888428 0.15792062878608704 0.21605446934700012 -0.6993011236190796 0.7147740125656128 -0.0 0.4180349111557007 0.5878974199295044 0 1.0 0 0.0 0 0.0 0 0.0 2.003075361251831 0.3198952078819275 -0.2839455306529999 -0.3786126375198364 0.9255348443984985 -0.0 0.06600850820541382 0.7517114877700806 0 1.0 0 0.0 0 0.0 0 0.0 1.992877721786499 0.3153344988822937 0.21605446934700012 -0.4382152855396271 0.8988311290740967 -0.0 0.42307525873184204 0.5972629189491272 0 1.0 0 0.0 0 0.0 0 0.0 2.003075361251831 0.3198952078819275 0.21605446934700012 -0.3786126375198364 0.9255348443984985 -0.0 0.4282504916191101 0.6020529270172119 0 1.0 0 0.0 0 0.0 0 0.0 1.3505256175994873 0.08980664610862732 -0.2839455306529999 0.9695730209350586 0.24469740688800812 -0.0 0.035431504249572754 0.6815354228019714 0 1.0 0 0.0 0 0.0 0 0.0 1.3501851558685303 0.09144851565361023 0.21605446934700012 0.9867854714393616 0.16187018156051636 -0.0 0.4447501301765442 0.5257568359375 0 1.0 0 0.0 0 0.0 0 0.0 1.3505256175994873 0.08980664610862732 0.21605446934700012 0.9695730209350586 0.24469740688800812 -0.0 0.4448583722114563 0.5239549279212952 0 1.0 0 0.0 0 0.0 0 0.0 -0.34925079345703125 0.19097179174423218 -0.2839455306529999 0.2634052634239197 0.964659571647644 -0.0 0.945175290107727 0.7902482748031616 0 1.0 0 0.0 0 0.0 0 0.0 -0.3594350814819336 0.19336402416229248 0.21605448424816132 0.19467757642269135 0.9808648824691772 -0.0 0.5062727332115173 0.636748731136322 0 1.0 0 0.0 0 0.0 0 0.0 -0.34925079345703125 0.19097179174423218 0.21605448424816132 0.2634052634239197 0.964659571647644 -0.0 0.5117148160934448 0.6341213583946228 0 1.0 0 0.0 0 0.0 0 0.0 -1.5219982862472534 -0.19201131165027618 -0.2839455306529999 0.0639057606458664 -0.9979247450828552 -0.0 0.05035579204559326 0.40511953830718994 0 1.0 0 0.0 0 0.0 0 0.0 -1.5167030096054077 -0.19158564507961273 0.21605445444583893 0.09653004258871078 -0.9953001737594604 -0.0 0.5215050578117371 0.21141117811203003 0 1.0 0 0.0 0 0.0 0 0.0 -1.5219982862472534 -0.19201131165027618 0.21605445444583893 0.0639057606458664 -0.9979247450828552 -0.0 0.5170558094978333 0.2112075686454773 0 1.0 0 0.0 0 0.0 0 0.0 1.2587590217590332 0.09020313620567322 -0.2839455306529999 -0.9976806044578552 0.06784264743328094 -0.0 0.08753597736358643 0.6604448556900024 0 1.0 0 0.0 0 0.0 0 0.0 1.2584939002990723 0.08225411176681519 0.21605446934700012 -0.999969482421875 -0.00079348124563694 -0.0 0.39806902408599854 0.5157207250595093 0 1.0 0 0.0 0 0.0 0 0.0 1.2587590217590332 0.09020313620567322 0.21605446934700012 -0.9976806044578552 0.06784264743328094 -0.0 0.39880692958831787 0.5234965085983276 0 1.0 0 0.0 0 0.0 0 0.0 -0.42206645011901855 0.19319981336593628 -0.2839455306529999 -0.21765801310539246 0.9760124683380127 -0.0 0.004474729299545288 0.7970054745674133 0 1.0 0 0.0 0 0.0 0 0.0 -0.4316401481628418 0.1906798779964447 0.21605448424816132 -0.29132968187332153 0.9566026926040649 -0.0 0.46716344356536865 0.6362869739532471 0 1.0 0 0.0 0 0.0 0 0.0 -0.42206645011901855 0.19319981336593628 0.21605448424816132 -0.21765801310539246 0.9760124683380127 -0.0 0.47238123416900635 0.638421893119812 0 1.0 0 0.0 0 0.0 0 0.0 0.5535321235656738 0.15234562754631042 -0.2839455306529999 0.7444074749946594 0.6676839590072632 -0.0 0.8954370021820068 0.7221288681030273 0 1.0 0 0.0 0 0.0 0 0.0 0.5484678745269775 0.1576482057571411 0.21605446934700012 0.7010712027549744 0.713064968585968 -0.0 0.5536915063858032 0.5830111503601074 0 1.0 0 0.0 0 0.0 0 0.0 0.5535321235656738 0.15234562754631042 0.21605446934700012 0.7444074749946594 0.6676839590072632 -0.0 0.5563127994537354 0.5777288675308228 0 1.0 0 0.0 0 0.0 0 0.0 -1.5273470878601074 -0.19226670265197754 -0.2839455306529999 0.0317087322473526 -0.999481201171875 -0.0 0.05323415994644165 0.40471965074539185 0 1.0 0 0.0 0 0.0 0 0.0 -1.5219982862472534 -0.19201131165027618 0.21605445444583893 0.0639057606458664 -0.9979247450828552 -0.0 0.5170558094978333 0.2112075686454773 0 1.0 0 0.0 0 0.0 0 0.0 -1.5273470878601074 -0.19226670265197754 0.21605445444583893 0.0317087322473526 -0.999481201171875 -0.0 0.5125783681869507 0.21127527952194214 0 1.0 0 0.0 0 0.0 0 0.0 2.1841213703155518 0.3151009678840637 -0.2839455306529999 0.43232521414756775 0.9016999006271362 -0.0 0.9312289953231812 0.7551016211509705 0 1.0 0 0.0 0 0.0 0 0.0 2.1736061573028564 0.3197163939476013 0.21605446934700012 0.3720511496067047 0.9281899333000183 -0.0 0.5202778577804565 0.602996826171875 0 1.0 0 0.0 0 0.0 0 0.0 2.1841213703155518 0.3151009678840637 0.21605446934700012 0.43232521414756775 0.9016999006271362 -0.0 0.5259664058685303 0.5979864597320557 0 1.0 0 0.0 0 0.0 0 0.0 -1.5421541929244995 -0.19213536381721497 -0.2839455306529999 -0.047242652624845505 -0.9988707900047302 -0.0 0.06117549538612366 0.40448832511901855 0 1.0 0 0.0 0 0.0 0 0.0 -1.5327494144439697 -0.19235184788703918 0.21605445444583893 -0.0036011841148138046 -0.999969482421875 -0.0 0.5080843567848206 0.21161502599716187 0 1.0 0 0.0 0 0.0 0 0.0 -1.5421541929244995 -0.19213536381721497 0.21605445444583893 -0.047242652624845505 -0.9988707900047302 -0.0 0.5003594756126404 0.21280395984649658 0 1.0 0 0.0 0 0.0 0 0.0 1.992877721786499 0.3153344988822937 -0.2839455306529999 -0.4382152855396271 0.8988311290740967 -0.0 0.07183364033699036 0.7445515394210815 0 1.0 0 0.0 0 0.0 0 0.0 1.9831106662750244 0.3101657032966614 0.21605446934700012 -0.49723806977272034 0.8676106929779053 -0.0 0.4181593060493469 0.591951847076416 0 1.0 0 0.0 0 0.0 0 0.0 1.992877721786499 0.3153344988822937 0.21605446934700012 -0.4382152855396271 0.8988311290740967 -0.0 0.42307525873184204 0.5972629189491272 0 1.0 0 0.0 0 0.0 0 0.0 0.5582752227783203 0.14671224355697632 -0.2839455306529999 0.7844783067703247 0.6201055645942688 -0.0 0.8934412002563477 0.7154441475868225 0 1.0 0 0.0 0 0.0 0 0.0 0.5535321235656738 0.15234562754631042 0.21605446934700012 0.7444074749946594 0.6676839590072632 -0.0 0.5563127994537354 0.5777288675308228 0 1.0 0 0.0 0 0.0 0 0.0 0.5582752227783203 0.14671224355697632 0.21605446934700012 0.7844783067703247 0.6201055645942688 -0.0 0.5587862730026245 0.5721554756164551 0 1.0 0 0.0 0 0.0 0 0.0 1.3510024547576904 0.08820855617523193 -0.2839455306529999 0.9451277256011963 0.3266090750694275 -0.0 0.03505560755729675 0.6798492670059204 0 1.0 0 0.0 0 0.0 0 0.0 1.3505256175994873 0.08980664610862732 0.21605446934700012 0.9695730209350586 0.24469740688800812 -0.0 0.4448583722114563 0.5239549279212952 0 1.0 0 0.0 0 0.0 0 0.0 1.3510024547576904 0.08820855617523193 0.21605446934700012 0.9451277256011963 0.3266090750694275 -0.0 0.44504600763320923 0.5221929550170898 0 1.0 0 0.0 0 0.0 0 0.0 -0.33939218521118164 0.18789604306221008 -0.2839455306529999 0.3325602114200592 0.9430524706840515 -0.0 0.9378687143325806 0.7856563329696655 0 1.0 0 0.0 0 0.0 0 0.0 -0.34925079345703125 0.19097179174423218 0.21605448424816132 0.2634052634239197 0.964659571647644 -0.0 0.5117148160934448 0.6341213583946228 0 1.0 0 0.0 0 0.0 0 0.0 -0.33939218521118164 0.18789604306221008 0.21605448424816132 0.3325602114200592 0.9430524706840515 -0.0 0.5169574022293091 0.6308568716049194 0 1.0 0 0.0 0 0.0 0 0.0 -1.5327494144439697 -0.19235184788703918 -0.2839455306529999 -0.0036011841148138046 -0.999969482421875 -0.0 0.05613693594932556 0.4044952392578125 0 1.0 0 0.0 0 0.0 0 0.0 -1.5273470878601074 -0.19226670265197754 0.21605445444583893 0.0317087322473526 -0.999481201171875 -0.0 0.5125783681869507 0.21127527952194214 0 1.0 0 0.0 0 0.0 0 0.0 -1.5327494144439697 -0.19235184788703918 0.21605445444583893 -0.0036011841148138046 -0.999969482421875 -0.0 0.5080843567848206 0.21161502599716187 0 1.0 0 0.0 0 0.0 0 0.0 0.287808895111084 0.15211209654808044 -0.2839455306529999 -0.7448957562446594 0.6671651601791382 -0.0 0.07909229397773743 0.7260230779647827 0 1.0 0 0.0 0 0.0 0 0.0 0.28277134895324707 0.14608952403068542 0.21605446934700012 -0.7892391681671143 0.6140323877334595 -0.0 0.41235995292663574 0.5766456127166748 0 1.0 0 0.0 0 0.0 0 0.0 0.287808895111084 0.15211209654808044 0.21605446934700012 -0.7448957562446594 0.6671651601791382 -0.0 0.41507312655448914 0.5823611617088318 0 1.0 0 0.0 0 0.0 0 0.0 -0.4316401481628418 0.1906798779964447 -0.2839455306529999 -0.29132968187332153 0.9566026926040649 -0.0 0.012227356433868408 0.7941473126411438 0 1.0 0 0.0 0 0.0 0 0.0 -0.4409806728363037 0.1874399483203888 0.21605448424816132 -0.3634754419326782 0.9315775036811829 -0.0 0.46206551790237427 0.6334686875343323 0 1.0 0 0.0 0 0.0 0 0.0 -0.4316401481628418 0.1906798779964447 0.21605448424816132 -0.29132968187332153 0.9566026926040649 -0.0 0.46716344356536865 0.6362869739532471 0 1.0 0 0.0 0 0.0 0 0.0 -2.146409511566162 0.32953959703445435 -0.2839455306529999 -1.0 0.0 -0.0 0.2695856988430023 0.7537210583686829 0 1.0 0 0.0 0 0.0 0 0.0 -2.146409511566162 -0.18394553661346436 0.21605445444583893 -1.0 0.0 -0.0 0.45949652791023254 0.11472934484481812 0 1.0 0 0.0 0 0.0 0 0.0 -2.146409511566162 0.32953959703445435 0.21605446934700012 -1.0 0.0 -0.0 0.48620134592056274 0.5522602796554565 0 1.0 0 0.0 0 0.0 0 0.0 1.3516151905059814 0.08665427565574646 -0.2839455306529999 0.9139072895050049 0.4058656692504883 -0.0 0.034592777490615845 0.6782253980636597 0 1.0 0 0.0 0 0.0 0 0.0 1.3510024547576904 0.08820855617523193 0.21605446934700012 0.9451277256011963 0.3266090750694275 -0.0 0.44504600763320923 0.5221929550170898 0 1.0 0 0.0 0 0.0 0 0.0 1.3516151905059814 0.08665427565574646 0.21605446934700012 0.9139072895050049 0.4058656692504883 -0.0 0.44531333446502686 0.5204707384109497 0 1.0 0 0.0 0 0.0 0 0.0 2.194154977798462 0.3098701238632202 -0.2839455306529999 0.4924161434173584 0.8703268766403198 -0.0 0.9247593283653259 0.7476687431335449 0 1.0 0 0.0 0 0.0 0 0.0 2.1841213703155518 0.3151009678840637 0.21605446934700012 0.43232521414756775 0.9016999006271362 -0.0 0.5259664058685303 0.5979864597320557 0 1.0 0 0.0 0 0.0 0 0.0 2.194154977798462 0.3098701238632202 0.21605446934700012 0.4924161434173584 0.8703268766403198 -0.0 0.5313672423362732 0.592359721660614 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 0.32953959703445435 -0.2839455306529999 0.0 1.0 -0.0 0.2427637279033661 0.8259592056274414 0 1.0 0 0.0 0 0.0 0 0.0 -2.146409511566162 0.32953959703445435 0.21605446934700012 0.0 1.0 -0.0 0.48620134592056274 0.5522602796554565 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 0.32953959703445435 0.21605446934700012 0.0 1.0 -0.0 0.5239897966384888 0.5807267427444458 0 1.0 0 0.0 0 0.0 0 0.0 1.9831106662750244 0.3101657032966614 -0.2839455306529999 -0.49723806977272034 0.8676106929779053 -0.0 0.07706430554389954 0.7368909120559692 0 1.0 0 0.0 0 0.0 0 0.0 1.9737741947174072 0.30438879132270813 0.2160544991493225 -0.5547044277191162 0.8320261240005493 -0.0 0.41349029541015625 0.5861303806304932 0 1.0 0 0.0 0 0.0 0 0.0 1.9831106662750244 0.3101657032966614 0.21605446934700012 -0.49723806977272034 0.8676106929779053 -0.0 0.4181593060493469 0.591951847076416 0 1.0 0 0.0 0 0.0 0 0.0 0.562697172164917 0.1407480537891388 -0.2839455306529999 0.8209478855133057 0.5709707736968994 -0.0 0.891707181930542 0.7085340023040771 0 1.0 0 0.0 0 0.0 0 0.0 0.5582752227783203 0.14671224355697632 0.21605446934700012 0.7844783067703247 0.6201055645942688 -0.0 0.5587862730026245 0.5721554756164551 0 1.0 0 0.0 0 0.0 0 0.0 0.562697172164917 0.1407480537891388 0.21605446934700012 0.8209478855133057 0.5709707736968994 -0.0 0.5611169934272766 0.5662843585014343 0 1.0 0 0.0 0 0.0 0 0.0 1.3523643016815186 0.08514377474784851 -0.2839455306529999 0.8767052292823792 0.48097169399261475 -0.0 0.034042567014694214 0.6766630411148071 0 1.0 0 0.0 0 0.0 0 0.0 1.3516151905059814 0.08665427565574646 0.21605446934700012 0.9139072895050049 0.4058656692504883 -0.0 0.44531333446502686 0.5204707384109497 0 1.0 0 0.0 0 0.0 0 0.0 1.3523643016815186 0.08514377474784851 0.21605446934700012 0.8767052292823792 0.48097169399261475 -0.0 0.44566109776496887 0.5187883377075195 0 1.0 0 0.0 0 0.0 0 0.0 -0.32985973358154297 0.18413680791854858 -0.2839455306529999 0.40098270773887634 0.9160435795783997 -0.0 0.9311127662658691 0.7802994251251221 0 1.0 0 0.0 0 0.0 0 0.0 -0.33939218521118164 0.18789604306221008 0.21605448424816132 0.3325602114200592 0.9430524706840515 -0.0 0.5169574022293091 0.6308568716049194 0 1.0 0 0.0 0 0.0 0 0.0 -0.32985973358154297 0.18413680791854858 0.21605448424816132 0.40098270773887634 0.9160435795783997 -0.0 0.5220027565956116 0.6269617676734924 0 1.0 0 0.0 0 0.0 0 0.0 0.28277134895324707 0.14608952403068542 -0.2839455306529999 -0.7892391681671143 0.6140323877334595 -0.0 0.08133035898208618 0.7190533876419067 0 1.0 0 0.0 0 0.0 0 0.0 0.27826404571533203 0.13985291123390198 0.21605446934700012 -0.8313852548599243 0.5556504726409912 -0.0 0.4098873734474182 0.5707465410232544 0 1.0 0 0.0 0 0.0 0 0.0 0.28277134895324707 0.14608952403068542 0.21605446934700012 -0.7892391681671143 0.6140323877334595 -0.0 0.41235995292663574 0.5766456127166748 0 1.0 0 0.0 0 0.0 0 0.0 -0.4409806728363037 0.1874399483203888 -0.2839455306529999 -0.3634754419326782 0.9315775036811829 -0.0 0.019606024026870728 0.7904014587402344 0 1.0 0 0.0 0 0.0 0 0.0 -0.4500875473022461 0.18348002433776855 0.21605448424816132 -0.43293556571006775 0.9013947248458862 -0.0 0.4570869505405426 0.6299653649330139 0 1.0 0 0.0 0 0.0 0 0.0 -0.4409806728363037 0.1874399483203888 0.21605448424816132 -0.3634754419326782 0.9315775036811829 -0.0 0.46206551790237427 0.6334686875343323 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 0.10151857137680054 -0.2839455306529999 1.0 0.0 -0.0 0.1574673056602478 0.6584711074829102 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 0.32953959703445435 0.21605446934700012 1.0 0.0 -0.0 0.5239897966384888 0.5807267427444458 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 0.10151857137680054 0.21605446934700012 1.0 0.0 -0.0 0.5355800986289978 0.37752383947372437 0 1.0 0 0.0 0 0.0 0 0.0 1.3532497882843018 0.08367705345153809 -0.2839455306529999 0.8348032832145691 0.5504928827285767 -0.0 0.0334048867225647 0.6751617789268494 0 1.0 0 0.0 0 0.0 0 0.0 1.3523643016815186 0.08514377474784851 0.21605446934700012 0.8767052292823792 0.48097169399261475 -0.0 0.44566109776496887 0.5187883377075195 0 1.0 0 0.0 0 0.0 0 0.0 1.3532497882843018 0.08367705345153809 0.21605446934700012 0.8348032832145691 0.5504928827285767 -0.0 0.4460899531841278 0.5171455144882202 0 1.0 0 0.0 0 0.0 0 0.0 -1.8332748413085938 0.32953959703445435 -0.2839455306529999 -0.7364421486854553 0.6764732599258423 -0.0 1.0224628448486328 0.9180190563201904 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 0.10151857137680054 0.21605446934700012 -0.7364421486854553 0.6764732599258423 -0.0 0.5355800986289978 0.37752383947372437 0 1.0 0 0.0 0 0.0 0 0.0 -1.8332748413085938 0.32953959703445435 0.21605446934700012 -0.7364421486854553 0.6764732599258423 -0.0 0.6141318082809448 0.6253429651260376 0 1.0 0 0.0 0 0.0 0 0.0 2.203706979751587 0.3040238916873932 -0.2839455306529999 0.5514389276504517 0.8341929316520691 -0.0 0.9189475774765015 0.7395798563957214 0 1.0 0 0.0 0 0.0 0 0.0 2.194154977798462 0.3098701238632202 0.21605446934700012 0.4924161434173584 0.8703268766403198 -0.0 0.5313672423362732 0.592359721660614 0 1.0 0 0.0 0 0.0 0 0.0 2.203706979751587 0.3040238916873932 0.2160544991493225 0.5514389276504517 0.8341929316520691 -0.0 0.5364871025085449 0.5861265063285828 0 1.0 0 0.0 0 0.0 0 0.0 1.9737741947174072 0.30438879132270813 -0.2839455306529999 -0.5547044277191162 0.8320261240005493 -0.0 0.0817406177520752 0.728766679763794 0 1.0 0 0.0 0 0.0 0 0.0 1.9648678302764893 0.29800379276275635 0.21605446934700012 -0.6098513603210449 0.7924741506576538 -0.0 0.40905532240867615 0.5798054933547974 0 1.0 0 0.0 0 0.0 0 0.0 1.9737741947174072 0.30438879132270813 0.2160544991493225 -0.5547044277191162 0.8320261240005493 -0.0 0.41349029541015625 0.5861303806304932 0 1.0 0 0.0 0 0.0 0 0.0 0.566798210144043 0.13445305824279785 -0.2839455306529999 0.8536027073860168 0.520889937877655 -0.0 0.8902215957641602 0.7013935446739197 0 1.0 0 0.0 0 0.0 0 0.0 0.562697172164917 0.1407480537891388 0.21605446934700012 0.8209478855133057 0.5709707736968994 -0.0 0.5611169934272766 0.5662843585014343 0 1.0 0 0.0 0 0.0 0 0.0 0.566798210144043 0.13445305824279785 0.21605446934700012 0.8536027073860168 0.520889937877655 -0.0 0.5633097290992737 0.560107946395874 0 1.0 0 0.0 0 0.0 0 0.0 1.354271650314331 0.08225411176681519 -0.2839455306529999 0.7896358966827393 0.6135441064834595 -0.0 0.032679468393325806 0.6737208366394043 0 1.0 0 0.0 0 0.0 0 0.0 1.3532497882843018 0.08367705345153809 0.21605446934700012 0.8348032832145691 0.5504928827285767 -0.0 0.4460899531841278 0.5171455144882202 0 1.0 0 0.0 0 0.0 0 0.0 1.354271650314331 0.08225411176681519 0.21605446934700012 0.7896358966827393 0.6135441064834595 -0.0 0.44660046696662903 0.5155422687530518 0 1.0 0 0.0 0 0.0 0 0.0 -0.32065320014953613 0.1796940565109253 -0.2839455306529999 0.4675740897655487 0.8839381337165833 -0.0 0.9249056577682495 0.7742172479629517 0 1.0 0 0.0 0 0.0 0 0.0 -0.32985973358154297 0.18413680791854858 0.21605448424816132 0.40098270773887634 0.9160435795783997 -0.0 0.5220027565956116 0.6269617676734924 0 1.0 0 0.0 0 0.0 0 0.0 -0.32065320014953613 0.1796940565109253 0.21605448424816132 0.4675740897655487 0.8839381337165833 -0.0 0.5268549919128418 0.6224387288093567 0 1.0 0 0.0 0 0.0 0 0.0 -1.6938703060150146 0.32953959703445435 -0.2839455306529999 0.0 0.999969482421875 -0.0 0.9051481485366821 0.8624878525733948 0 1.0 0 0.0 0 0.0 0 0.0 -1.8332748413085938 0.32953959703445435 0.21605446934700012 0.0 0.999969482421875 -0.0 0.6141318082809448 0.6253429651260376 0 1.0 0 0.0 0 0.0 0 0.0 -1.6938703060150146 0.32953959703445435 0.21605446934700012 0.0 1.0 -0.0 0.6648842692375183 0.6340523362159729 0 1.0 0 0.0 0 0.0 0 0.0 0.27826404571533203 0.13985291123390198 -0.2839455306529999 -0.8313852548599243 0.5556504726409912 -0.0 0.08320179581642151 0.7120208144187927 0 1.0 0 0.0 0 0.0 0 0.0 0.27428698539733887 0.13340222835540771 0.21605446934700012 -0.8703268766403198 0.4924161434173584 -0.0 0.40764808654785156 0.5646573305130005 0 1.0 0 0.0 0 0.0 0 0.0 0.27826404571533203 0.13985291123390198 0.21605446934700012 -0.8313852548599243 0.5556504726409912 -0.0 0.4098873734474182 0.5707465410232544 0 1.0 0 0.0 0 0.0 0 0.0 1.2584939002990723 0.08225411176681519 -0.2839455306529999 -0.999969482421875 -0.00079348124563694 -0.0 0.08704417943954468 0.6525783538818359 0 1.0 0 0.0 0 0.0 0 0.0 1.258800745010376 0.0734853744506836 0.21605446934700012 -0.9974059462547302 -0.0716574639081955 -0.0 0.3975094258785248 0.5070275068283081 0 1.0 0 0.0 0 0.0 0 0.0 1.2584939002990723 0.08225411176681519 0.21605446934700012 -0.999969482421875 -0.00079348124563694 -0.0 0.39806902408599854 0.5157207250595093 0 1.0 0 0.0 0 0.0 0 0.0 -0.4500875473022461 0.18348002433776855 -0.2839455306529999 -0.43293556571006775 0.9013947248458862 -0.0 0.02657860517501831 0.7857947945594788 0 1.0 0 0.0 0 0.0 0 0.0 -0.45896077156066895 0.17880013585090637 0.21605448424816132 -0.4985809028148651 0.8668172359466553 -0.0 0.45222604274749756 0.6257724165916443 0 1.0 0 0.0 0 0.0 0 0.0 -0.4500875473022461 0.18348002433776855 0.21605448424816132 -0.43293556571006775 0.9013947248458862 -0.0 0.4570869505405426 0.6299653649330139 0 1.0 0 0.0 0 0.0 0 0.0 -1.8872151374816895 0.1295395791530609 -0.2839455306529999 0.7189550399780273 -0.69502854347229 -0.0 1.0517487525939941 0.751492440700531 0 1.0 0 0.0 0 0.0 0 0.0 -1.6938703060150146 0.32953959703445435 0.21605446934700012 0.7189550399780273 -0.69502854347229 -0.0 0.6648842692375183 0.6340523362159729 0 1.0 0 0.0 0 0.0 0 0.0 -1.8872151374816895 0.1295395791530609 0.21605446934700012 0.7189550399780273 -0.69502854347229 -0.0 0.6251898407936096 0.4582964777946472 0 1.0 0 0.0 0 0.0 0 0.0 2.2127773761749268 0.29756227135658264 -0.2839455306529999 0.6084475517272949 0.7935727834701538 -0.0 0.9137606024742126 0.7308803200721741 0 1.0 0 0.0 0 0.0 0 0.0 2.203706979751587 0.3040238916873932 0.2160544991493225 0.5514389276504517 0.8341929316520691 -0.0 0.5364871025085449 0.5861265063285828 0 1.0 0 0.0 0 0.0 0 0.0 2.2127773761749268 0.29756227135658264 0.2160544991493225 0.6084475517272949 0.7935727834701538 -0.0 0.5413342714309692 0.5792933702468872 0 1.0 0 0.0 0 0.0 0 0.0 1.9648678302764893 0.29800379276275635 -0.2839455306529999 -0.6098513603210449 0.7924741506576538 -0.0 0.08590298891067505 0.7202064990997314 0 1.0 0 0.0 0 0.0 0 0.0 1.9563920497894287 0.29101070761680603 0.2160544991493225 -0.6600238084793091 0.7512131333351135 -0.0 0.4048417806625366 0.572981595993042 0 1.0 0 0.0 0 0.0 0 0.0 1.9648678302764893 0.29800379276275635 0.21605446934700012 -0.6098513603210449 0.7924741506576538 -0.0 0.40905532240867615 0.5798054933547974 0 1.0 0 0.0 0 0.0 0 0.0 0.5705780982971191 0.1278272569179535 -0.2839455306529999 0.8823511600494385 0.47053438425064087 -0.0 0.8889724016189575 0.6940163373947144 0 1.0 0 0.0 0 0.0 0 0.0 0.566798210144043 0.13445305824279785 0.21605446934700012 0.8536027073860168 0.520889937877655 -0.0 0.5633097290992737 0.560107946395874 0 1.0 0 0.0 0 0.0 0 0.0 0.5705780982971191 0.1278272569179535 0.21605446934700012 0.8823511600494385 0.47053438425064087 -0.0 0.5653687715530396 0.5536172986030579 0 1.0 0 0.0 0 0.0 0 0.0 1.3554294109344482 0.08087494969367981 -0.2839455306529999 0.7424542903900146 0.669850766658783 -0.0 0.0318661630153656 0.6723392009735107 0 1.0 0 0.0 0 0.0 0 0.0 1.354271650314331 0.08225411176681519 0.21605446934700012 0.7896358966827393 0.6135441064834595 -0.0 0.44660046696662903 0.5155422687530518 0 1.0 0 0.0 0 0.0 0 0.0 1.3554294109344482 0.08087494969367981 0.21605446934700012 0.7424542903900146 0.669850766658783 -0.0 0.44719308614730835 0.5139785408973694 0 1.0 0 0.0 0 0.0 0 0.0 -0.31177258491516113 0.1745678186416626 -0.2839455306529999 0.5312051773071289 0.8472243547439575 -0.0 0.9192360639572144 0.7674424052238464 0 1.0 0 0.0 0 0.0 0 0.0 -0.32065320014953613 0.1796940565109253 0.21605448424816132 0.4675740897655487 0.8839381337165833 -0.0 0.5268549919128418 0.6224387288093567 0 1.0 0 0.0 0 0.0 0 0.0 -0.31177258491516113 0.1745678186416626 0.21605448424816132 0.5312051773071289 0.8472243547439575 -0.0 0.5315191745758057 0.6172875761985779 0 1.0 0 0.0 0 0.0 0 0.0 0.27428698539733887 0.13340222835540771 -0.2839455306529999 -0.8703268766403198 0.4924161434173584 -0.0 0.08472853899002075 0.7049230933189392 0 1.0 0 0.0 0 0.0 0 0.0 0.2708404064178467 0.12673750519752502 0.21605446934700012 -0.905117928981781 0.42512282729148865 -0.0 0.40563562512397766 0.5583692789077759 0 1.0 0 0.0 0 0.0 0 0.0 0.27428698539733887 0.13340222835540771 0.21605446934700012 -0.8703268766403198 0.4924161434173584 -0.0 0.40764808654785156 0.5646573305130005 0 1.0 0 0.0 0 0.0 0 0.0 -0.45896077156066895 0.17880013585090637 -0.2839455306529999 -0.4985809028148651 0.8668172359466553 -0.0 0.03312462568283081 0.7803508043289185 0 1.0 0 0.0 0 0.0 0 0.0 -0.46760058403015137 0.17340025305747986 0.21605448424816132 -0.5596179366111755 0.8287301063537598 -0.0 0.44748032093048096 0.6208823919296265 0 1.0 0 0.0 0 0.0 0 0.0 -0.45896077156066895 0.17880013585090637 0.21605448424816132 -0.4985809028148651 0.8668172359466553 -0.0 0.45222604274749756 0.6257724165916443 0 1.0 0 0.0 0 0.0 0 0.0 1.3567235469818115 0.07953956723213196 -0.2839455306529999 0.694570779800415 0.7194128036499023 -0.0 0.030964285135269165 0.6710160970687866 0 1.0 0 0.0 0 0.0 0 0.0 1.3554294109344482 0.08087494969367981 0.21605446934700012 0.7424542903900146 0.669850766658783 -0.0 0.44719308614730835 0.5139785408973694 0 1.0 0 0.0 0 0.0 0 0.0 1.3567235469818115 0.07953956723213196 0.21605446934700012 0.694570779800415 0.7194128036499023 -0.0 0.4478687345981598 0.5124543905258179 0 1.0 0 0.0 0 0.0 0 0.0 -1.683362364768982 -0.18394553661346436 -0.2839455306529999 0.8383129239082336 0.5451521277427673 -0.0 0.9581927061080933 0.48435938358306885 0 1.0 0 0.0 0 0.0 0 0.0 -1.8872151374816895 0.1295395791530609 0.21605446934700012 0.8383129239082336 0.5451521277427673 -0.0 0.6251898407936096 0.4582964777946472 0 1.0 0 0.0 0 0.0 0 0.0 -1.683362364768982 -0.18394553661346436 0.21605445444583893 0.8383129239082336 0.5451521277427673 -0.0 0.7767902612686157 0.3119933009147644 0 1.0 0 0.0 0 0.0 0 0.0 2.2213656902313232 0.29048529267311096 -0.2839455306529999 0.6599017381668091 0.7513352036476135 -0.0 0.9091619849205017 0.7216052412986755 0 1.0 0 0.0 0 0.0 0 0.0 2.2127773761749268 0.29756227135658264 0.2160544991493225 0.6084475517272949 0.7935727834701538 -0.0 0.5413342714309692 0.5792933702468872 0 1.0 0 0.0 0 0.0 0 0.0 2.2213656902313232 0.29048529267311096 0.2160544991493225 0.6599017381668091 0.7513352036476135 -0.0 0.5459181070327759 0.5718633532524109 0 1.0 0 0.0 0 0.0 0 0.0 1.9563920497894287 0.29101070761680603 -0.2839455306529999 -0.6600238084793091 0.7512131333351135 -0.0 0.08958971500396729 0.7112299203872681 0 1.0 0 0.0 0 0.0 0 0.0 1.948448896408081 0.2835822105407715 0.21605446934700012 -0.7042756676673889 0.7098910212516785 -0.0 0.40089285373687744 0.5658196806907654 0 1.0 0 0.0 0 0.0 0 0.0 1.9563920497894287 0.29101070761680603 0.2160544991493225 -0.6600238084793091 0.7512131333351135 -0.0 0.4048417806625366 0.572981595993042 0 1.0 0 0.0 0 0.0 0 0.0 1.3581535816192627 0.07824796438217163 -0.2839455306529999 0.6469618678092957 0.7625049352645874 -0.0 0.029973596334457397 0.6697502732276917 0 1.0 0 0.0 0 0.0 0 0.0 1.3567235469818115 0.07953956723213196 0.21605446934700012 0.694570779800415 0.7194128036499023 -0.0 0.4478687345981598 0.5124543905258179 0 1.0 0 0.0 0 0.0 0 0.0 1.3581535816192627 0.07824796438217163 0.21605446934700012 0.6469618678092957 0.7625049352645874 -0.0 0.44862794876098633 0.5109697580337524 0 1.0 0 0.0 0 0.0 0 0.0 -0.30321788787841797 0.1687580645084381 -0.2839455306529999 0.5909909605979919 0.8066347241401672 -0.0 0.9140862226486206 0.7599997520446777 0 1.0 0 0.0 0 0.0 0 0.0 -0.31177258491516113 0.1745678186416626 0.21605448424816132 0.5312051773071289 0.8472243547439575 -0.0 0.5315191745758057 0.6172875761985779 0 1.0 0 0.0 0 0.0 0 0.0 -0.30321788787841797 0.1687580645084381 0.21605446934700012 0.5909909605979919 0.8066347241401672 -0.0 0.5360012650489807 0.6115046739578247 0 1.0 0 0.0 0 0.0 0 0.0 0.4196147918701172 0.12568670511245728 -0.2839455306529999 -0.00198370311409235 -0.999969482421875 -0.0 0.9885497689247131 0.7259107828140259 0 1.0 0 0.0 0 0.0 0 0.0 0.4246535301208496 0.1256064474582672 0.21605446934700012 -0.03277687728404999 -0.99945068359375 -0.0 1.4873418807983398 0.5618767738342285 0 1.0 0 0.0 0 0.0 0 0.0 0.4196147918701172 0.12568670511245728 0.21605446934700012 -0.00198370311409235 -0.999969482421875 -0.0 1.4844026565551758 0.5620718598365784 0 1.0 0 0.0 0 0.0 0 0.0 -0.46760058403015137 0.17340025305747986 -0.2839455306529999 -0.5596179366111755 0.8287301063537598 -0.0 0.039234012365341187 0.7740890979766846 0 1.0 0 0.0 0 0.0 0 0.0 -0.47600698471069336 0.167280375957489 0.21605446934700012 -0.6155278086662292 0.7881100177764893 -0.0 0.44284671545028687 0.6152850389480591 0 1.0 0 0.0 0 0.0 0 0.0 -0.46760058403015137 0.17340025305747986 0.21605448424816132 -0.5596179366111755 0.8287301063537598 -0.0 0.44748032093048096 0.6208823919296265 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 -0.02877916395664215 -0.2839455306529999 0.7143467664718628 -0.6997588872909546 -0.0 0.12446880340576172 0.5184248089790344 0 1.0 0 0.0 0 0.0 0 0.0 -1.9586687088012695 0.057035207748413086 0.21605446934700012 0.7143467664718628 -0.6997588872909546 -0.0 0.5975133776664734 0.3468474745750427 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 -0.02877916395664215 0.21605446934700012 0.7143467664718628 -0.6997588872909546 -0.0 0.5489316582679749 0.22549867630004883 0 1.0 0 0.0 0 0.0 0 0.0 1.35971999168396 0.07700017094612122 -0.2839455306529999 0.5797296166419983 0.8147831559181213 -0.0 0.02889317274093628 0.6685408353805542 0 1.0 0 0.0 0 0.0 0 0.0 1.3581535816192627 0.07824796438217163 0.21605446934700012 0.6469618678092957 0.7625049352645874 -0.0 0.44862794876098633 0.5109697580337524 0 1.0 0 0.0 0 0.0 0 0.0 1.35971999168396 0.07700017094612122 0.21605446934700012 0.5797296166419983 0.8147831559181213 -0.0 0.44947174191474915 0.5095247030258179 0 1.0 0 0.0 0 0.0 0 0.0 -1.9586687088012695 0.057035207748413086 -0.2839455306529999 -0.8628498315811157 -0.5054170489311218 -0.0 1.0921339988708496 0.6466642618179321 0 1.0 0 0.0 0 0.0 0 0.0 -1.8175129890441895 -0.18394553661346436 0.21605445444583893 -0.8628498315811157 -0.5054170489311218 -0.0 0.7532170414924622 0.2296181321144104 0 1.0 0 0.0 0 0.0 0 0.0 -1.9586687088012695 0.057035207748413086 0.21605446934700012 -0.8628498315811157 -0.5054170489311218 -0.0 0.5975133776664734 0.3468474745750427 0 1.0 0 0.0 0 0.0 0 0.0 2.2293660640716553 0.2829996347427368 -0.2839455306529999 0.7043672204017639 0.7097994685173035 -0.0 0.9051555395126343 0.7120082378387451 0 1.0 0 0.0 0 0.0 0 0.0 2.2213656902313232 0.29048529267311096 0.2160544991493225 0.6599017381668091 0.7513352036476135 -0.0 0.5459181070327759 0.5718633532524109 0 1.0 0 0.0 0 0.0 0 0.0 2.2293660640716553 0.2829996347427368 0.21605446934700012 0.7043672204017639 0.7097994685173035 -0.0 0.5501882433891296 0.564041256904602 0 1.0 0 0.0 0 0.0 0 0.0 -1.8175129890441895 -0.18394553661346436 -0.2839455306529999 0.0 -1.0 -0.0 1.000122308731079 0.4517623782157898 0 1.0 0 0.0 0 0.0 0 0.0 -1.683362364768982 -0.18394553661346436 0.21605445444583893 0.0 -1.0 -0.0 0.7767902612686157 0.3119933009147644 0 1.0 0 0.0 0 0.0 0 0.0 -1.8175129890441895 -0.18394553661346436 0.21605445444583893 0.0 -1.0 -0.0 0.7532170414924622 0.2296181321144104 0 1.0 0 0.0 0 0.0 0 0.0 1.948448896408081 0.2835822105407715 -0.2839455306529999 -0.7042756676673889 0.7098910212516785 -0.0 0.09280359745025635 0.7020356059074402 0 1.0 0 0.0 0 0.0 0 0.0 1.94114089012146 0.2758910357952118 0.2160544991493225 -0.7458418607711792 0.6660969853401184 -0.0 0.39724987745285034 0.5584805607795715 0 1.0 0 0.0 0 0.0 0 0.0 1.948448896408081 0.2835822105407715 0.21605446934700012 -0.7042756676673889 0.7098910212516785 -0.0 0.40089285373687744 0.5658196806907654 0 1.0 0 0.0 0 0.0 0 0.0 0.5740368366241455 0.12087064981460571 -0.2839455306529999 0.9072847962379456 0.4204840362071991 -0.0 0.887948751449585 0.6863940358161926 0 1.0 0 0.0 0 0.0 0 0.0 0.5705780982971191 0.1278272569179535 0.21605446934700012 0.8823511600494385 0.47053438425064087 -0.0 0.5653687715530396 0.5536172986030579 0 1.0 0 0.0 0 0.0 0 0.0 0.5740368366241455 0.12087064981460571 0.21605446934700012 0.9072847962379456 0.4204840362071991 -0.0 0.5672982335090637 0.5468026399612427 0 1.0 0 0.0 0 0.0 0 0.0 1.362391710281372 0.07530966401100159 -0.2839455306529999 0.4928129017353058 0.8701131939888 -0.0 0.02706146240234375 0.6669514179229736 0 1.0 0 0.0 0 0.0 0 0.0 1.35971999168396 0.07700017094612122 0.21605446934700012 0.5797296166419983 0.8147831559181213 -0.0 0.44947174191474915 0.5095247030258179 0 1.0 0 0.0 0 0.0 0 0.0 1.362391710281372 0.07530966401100159 0.21605446934700012 0.4928129017353058 0.8701131939888 -0.0 0.45094093680381775 0.5075438618659973 0 1.0 0 0.0 0 0.0 0 0.0 -0.29498910903930664 0.16226482391357422 -0.2839455306529999 0.6462294459342957 0.7631153464317322 -0.0 0.9094334840774536 0.7519071102142334 0 1.0 0 0.0 0 0.0 0 0.0 -0.30321788787841797 0.1687580645084381 0.21605446934700012 0.5909909605979919 0.8066347241401672 -0.0 0.5360012650489807 0.6115046739578247 0 1.0 0 0.0 0 0.0 0 0.0 -0.29498910903930664 0.16226482391357422 0.21605446934700012 0.6462294459342957 0.7631153464317322 -0.0 0.540307879447937 0.6050833463668823 0 1.0 0 0.0 0 0.0 0 0.0 -2.146409511566162 -0.18394553661346436 -0.2839455306529999 0.0 -0.999969482421875 -0.0 0.14069145917892456 0.3820388913154602 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 -0.18394553661346436 0.21605445444583893 0.0 -1.0 -0.0 0.5862001776695251 0.0954430103302002 0 1.0 0 0.0 0 0.0 0 0.0 -2.146409511566162 -0.18394553661346436 0.21605445444583893 0.0 -1.0 -0.0 0.45949652791023254 0.11472934484481812 0 1.0 0 0.0 0 0.0 0 0.0 0.2708404064178467 0.12673750519752502 -0.2839455306529999 -0.905117928981781 0.42512282729148865 -0.0 0.08592939376831055 0.6977543830871582 0 1.0 0 0.0 0 0.0 0 0.0 0.26792407035827637 0.1198587417602539 0.21605446934700012 -0.9349040389060974 0.35483869910240173 -0.0 0.4038441479206085 0.5518714189529419 0 1.0 0 0.0 0 0.0 0 0.0 0.2708404064178467 0.12673750519752502 0.21605446934700012 -0.905117928981781 0.42512282729148865 -0.0 0.40563562512397766 0.5583692789077759 0 1.0 0 0.0 0 0.0 0 0.0 -0.47600698471069336 0.167280375957489 -0.2839455306529999 -0.6155278086662292 0.7881100177764893 -0.0 0.044904887676239014 0.7670250535011292 0 1.0 0 0.0 0 0.0 0 0.0 -0.4841797351837158 0.16044053435325623 0.21605446934700012 -0.6660054326057434 0.7459028959274292 -0.0 0.4383218288421631 0.6089680790901184 0 1.0 0 0.0 0 0.0 0 0.0 -0.47600698471069336 0.167280375957489 0.21605446934700012 -0.6155278086662292 0.7881100177764893 -0.0 0.44284671545028687 0.6152850389480591 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 -0.18394553661346436 -0.2839455306529999 1.0 0.0 -0.0 0.0974959135055542 0.39517903327941895 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 -0.02877916395664215 0.21605446934700012 1.0 0.0 -0.0 0.5489316582679749 0.22549867630004883 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 -0.18394553661346436 0.21605445444583893 1.0 0.0 -0.0 0.5862001776695251 0.0954430103302002 0 1.0 0 0.0 0 0.0 0 0.0 1.3659708499908447 0.07350727915763855 -0.2839455306529999 0.4213080108165741 0.9068880081176758 -0.0 0.0246143639087677 0.6653087139129639 0 1.0 0 0.0 0 0.0 0 0.0 1.362391710281372 0.07530966401100159 0.21605446934700012 0.4928129017353058 0.8701131939888 -0.0 0.45094093680381775 0.5075438618659973 0 1.0 0 0.0 0 0.0 0 0.0 1.3659708499908447 0.07350727915763855 0.21605446934700012 0.4213080108165741 0.9068880081176758 -0.0 0.45294734835624695 0.5053983926773071 0 1.0 0 0.0 0 0.0 0 0.0 2.236670732498169 0.2753120958805084 -0.2839455306529999 0.7461165189743042 0.6657918095588684 -0.0 0.9017375707626343 0.7023459672927856 0 1.0 0 0.0 0 0.0 0 0.0 2.2293660640716553 0.2829996347427368 0.21605446934700012 0.7043672204017639 0.7097994685173035 -0.0 0.5501882433891296 0.564041256904602 0 1.0 0 0.0 0 0.0 0 0.0 2.236670732498169 0.2753120958805084 0.2160544991493225 0.7460860013961792 0.6657918095588684 -0.0 0.5540941953659058 0.5560380220413208 0 1.0 0 0.0 0 0.0 0 0.0 1.94114089012146 0.2758910357952118 -0.2839455306529999 -0.7458418607711792 0.6660969853401184 -0.0 0.0955517590045929 0.6928189992904663 0 1.0 0 0.0 0 0.0 0 0.0 1.9344675540924072 0.26793715357780457 0.2160544991493225 -0.7863399386405945 0.617755651473999 -0.0 0.39389708638191223 0.5509626269340515 0 1.0 0 0.0 0 0.0 0 0.0 1.94114089012146 0.2758910357952118 0.2160544991493225 -0.7458418607711792 0.6660969853401184 -0.0 0.39724987745285034 0.5584805607795715 0 1.0 0 0.0 0 0.0 0 0.0 0.40726804733276367 0.1253851056098938 -0.2839455306529999 0.05169835686683655 -0.9986571669578552 -0.0 0.9978516697883606 0.7254770994186401 0 1.0 0 0.0 0 0.0 0 0.0 0.4132881164550781 0.1256113052368164 0.21605446934700012 0.02471999265253544 -0.999664306640625 -0.0 1.4807125329971313 0.5621060132980347 0 1.0 0 0.0 0 0.0 0 0.0 0.40726804733276367 0.1253851056098938 0.21605446934700012 0.05169835686683655 -0.9986571669578552 -0.0 1.4772038459777832 0.5619494318962097 0 1.0 0 0.0 0 0.0 0 0.0 1.370457410812378 0.07159298658370972 -0.2839455306529999 0.3721121847629547 0.9281594157218933 -0.0 0.021543771028518677 0.6635836362838745 0 1.0 0 0.0 0 0.0 0 0.0 1.3659708499908447 0.07350727915763855 0.21605446934700012 0.4213080108165741 0.9068880081176758 -0.0 0.45294734835624695 0.5053983926773071 0 1.0 0 0.0 0 0.0 0 0.0 1.370457410812378 0.07159298658370972 0.21605446934700012 0.3721121847629547 0.9281594157218933 -0.0 0.45550280809402466 0.5030808448791504 0 1.0 0 0.0 0 0.0 0 0.0 -0.28708624839782715 0.15508809685707092 -0.2839455306529999 0.6964934468269348 0.7175206542015076 -0.0 0.9052527546882629 0.7431755065917969 0 1.0 0 0.0 0 0.0 0 0.0 -0.29498910903930664 0.16226482391357422 0.21605446934700012 0.6462294459342957 0.7631153464317322 -0.0 0.540307879447937 0.6050833463668823 0 1.0 0 0.0 0 0.0 0 0.0 -0.28708624839782715 0.15508809685707092 0.21605446934700012 0.6964934468269348 0.7175206542015076 -0.0 0.5444459915161133 0.5980141162872314 0 1.0 0 0.0 0 0.0 0 0.0 1.258800745010376 0.0734853744506836 -0.2839455306529999 -0.9974059462547302 -0.0716574639081955 -0.0 0.08622920513153076 0.6439353227615356 0 1.0 0 0.0 0 0.0 0 0.0 1.2597200870513916 0.06504258513450623 0.21605446934700012 -0.9891353845596313 -0.14697714149951935 -0.0 0.39723891019821167 0.49852633476257324 0 1.0 0 0.0 0 0.0 0 0.0 1.258800745010376 0.0734853744506836 0.21605446934700012 -0.9974059462547302 -0.0716574639081955 -0.0 0.3975094258785248 0.5070275068283081 0 1.0 0 0.0 0 0.0 0 0.0 -0.4841797351837158 0.16044053435325623 -0.2839455306529999 -0.6660054326057434 0.7459028959274292 -0.0 0.050142377614974976 0.7591694593429565 0 1.0 0 0.0 0 0.0 0 0.0 -0.49211907386779785 0.1528806984424591 0.21605446934700012 -0.7111117839813232 0.7030549049377441 -0.0 0.43390145897865295 0.601917028427124 0 1.0 0 0.0 0 0.0 0 0.0 -0.4841797351837158 0.16044053435325623 0.21605446934700012 -0.6660054326057434 0.7459028959274292 -0.0 0.4383218288421631 0.6089680790901184 0 1.0 0 0.0 0 0.0 0 0.0 0.4132881164550781 0.1256113052368164 -0.2839455306529999 0.02471999265253544 -0.999664306640625 -0.0 0.9933216571807861 0.7258370518684387 0 1.0 0 0.0 0 0.0 0 0.0 0.4196147918701172 0.12568670511245728 0.21605446934700012 -0.00198370311409235 -0.999969482421875 -0.0 1.4844026565551758 0.5620718598365784 0 1.0 0 0.0 0 0.0 0 0.0 0.4132881164550781 0.1256113052368164 0.21605446934700012 0.02471999265253544 -0.999664306640625 -0.0 1.4807125329971313 0.5621060132980347 0 1.0 0 0.0 0 0.0 0 0.0 2.2432796955108643 0.2674226760864258 -0.2839455306529999 0.7873775362968445 0.616412878036499 -0.0 0.898861289024353 0.6926416158676147 0 1.0 0 0.0 0 0.0 0 0.0 2.236670732498169 0.2753120958805084 0.2160544991493225 0.7460860013961792 0.6657918095588684 -0.0 0.5540941953659058 0.5560380220413208 0 1.0 0 0.0 0 0.0 0 0.0 2.2432796955108643 0.2674226760864258 0.21605446934700012 0.7873775362968445 0.616412878036499 -0.0 0.557647705078125 0.547858476638794 0 1.0 0 0.0 0 0.0 0 0.0 0.4246535301208496 0.1256064474582672 -0.2839455306529999 -0.03277687728404999 -0.99945068359375 -0.0 0.9847489595413208 0.7257236838340759 0 1.0 0 0.0 0 0.0 0 0.0 0.42949509620666504 0.12536564469337463 0.21605446934700012 -0.06787316501140594 -0.9976806044578552 -0.0 0.49016478657722473 0.5615012645721436 0 1.0 0 0.0 0 0.0 0 0.0 0.4246535301208496 0.1256064474582672 0.21605446934700012 -0.03277687728404999 -0.99945068359375 -0.0 0.48734185099601746 0.5618767738342285 0 1.0 0 0.0 0 0.0 0 0.0 1.9344675540924072 0.26793715357780457 -0.2839455306529999 -0.7863399386405945 0.617755651473999 -0.0 0.09787419438362122 0.6835832595825195 0 1.0 0 0.0 0 0.0 0 0.0 1.928429365158081 0.2597205638885498 0.21605446934700012 -0.8250068426132202 0.5650807023048401 -0.0 0.3908200263977051 0.5432608127593994 0 1.0 0 0.0 0 0.0 0 0.0 1.9344675540924072 0.26793715357780457 0.2160544991493225 -0.7863399386405945 0.617755651473999 -0.0 0.39389708638191223 0.5509626269340515 0 1.0 0 0.0 0 0.0 0 0.0 1.3758513927459717 0.06956681609153748 -0.2839455306529999 0.33652761578559875 0.9416486024856567 -0.0 0.017840862274169922 0.6617412567138672 0 1.0 0 0.0 0 0.0 0 0.0 1.370457410812378 0.07159298658370972 0.21605446934700012 0.3721121847629547 0.9281594157218933 -0.0 0.45550280809402466 0.5030808448791504 0 1.0 0 0.0 0 0.0 0 0.0 1.3758513927459717 0.06956681609153748 0.21605446934700012 0.33652761578559875 0.9416486024856567 -0.0 0.4586208760738373 0.5005841851234436 0 1.0 0 0.0 0 0.0 0 0.0 -0.2795095443725586 0.14722785353660583 -0.2839455306529999 0.7440717816352844 0.6680806875228882 -0.0 0.9015175104141235 0.7338099479675293 0 1.0 0 0.0 0 0.0 0 0.0 -0.28708624839782715 0.15508809685707092 0.21605446934700012 0.6964934468269348 0.7175206542015076 -0.0 0.5444459915161133 0.5980141162872314 0 1.0 0 0.0 0 0.0 0 0.0 -0.2795095443725586 0.14722785353660583 0.21605446934700012 0.7440717816352844 0.6680806875228882 -0.0 0.5484229326248169 0.5902849435806274 0 1.0 0 0.0 0 0.0 0 0.0 -0.49211907386779785 0.1528806984424591 -0.2839455306529999 -0.7111117839813232 0.7030549049377441 -0.0 0.05495721101760864 0.7505285739898682 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 0.21605446934700012 -0.7320169806480408 0.6812646985054016 -0.0 0.42958128452301025 0.5941163897514343 0 1.0 0 0.0 0 0.0 0 0.0 -0.49211907386779785 0.1528806984424591 0.21605446934700012 -0.7111117839813232 0.7030549049377441 -0.0 0.43390145897865295 0.601917028427124 0 1.0 0 0.0 0 0.0 0 0.0 0.4015543460845947 0.12500807642936707 -0.2839455306529999 0.08148442208766937 -0.9966429471969604 -0.0 1.002132534980774 0.7248519659042358 0 1.0 0 0.0 0 0.0 0 0.0 0.40726804733276367 0.1253851056098938 0.21605446934700012 0.05169835686683655 -0.9986571669578552 -0.0 1.4772038459777832 0.5619494318962097 0 1.0 0 0.0 0 0.0 0 0.0 0.4015543460845947 0.12500807642936707 0.21605446934700012 0.08148442208766937 -0.9966429471969604 -0.0 1.473877191543579 0.5616071224212646 0 1.0 0 0.0 0 0.0 0 0.0 1.3821523189544678 0.06742876768112183 -0.2839455306529999 0.3096407949924469 0.9508346915245056 -0.0 0.013497740030288696 0.6597400307655334 0 1.0 0 0.0 0 0.0 0 0.0 1.3758513927459717 0.06956681609153748 0.21605446934700012 0.33652761578559875 0.9416486024856567 -0.0 0.4586208760738373 0.5005841851234436 0 1.0 0 0.0 0 0.0 0 0.0 1.3821523189544678 0.06742876768112183 0.21605446934700012 0.3096407949924469 0.9508346915245056 -0.0 0.4623155891895294 0.49790245294570923 0 1.0 0 0.0 0 0.0 0 0.0 0.42949509620666504 0.12536564469337463 -0.2839455306529999 -0.06787316501140594 -0.9976806044578552 -0.0 0.9811038374900818 0.7252907752990723 0 1.0 0 0.0 0 0.0 0 0.0 0.4341397285461426 0.12496429681777954 0.21605446934700012 -0.10571611672639847 -0.9943845868110657 -0.0 0.49287116527557373 0.5609472990036011 0 1.0 0 0.0 0 0.0 0 0.0 0.42949509620666504 0.12536564469337463 0.21605446934700012 -0.06787316501140594 -0.9976806044578552 -0.0 0.49016478657722473 0.5615012645721436 0 1.0 0 0.0 0 0.0 0 0.0 1.3893606662750244 0.06517881155014038 -0.2839455306529999 0.28867459297180176 0.9573961496353149 -0.0 0.008508294820785522 0.6575323343276978 0 1.0 0 0.0 0 0.0 0 0.0 1.3821523189544678 0.06742876768112183 0.21605446934700012 0.3096407949924469 0.9508346915245056 -0.0 0.4623155891895294 0.49790245294570923 0 1.0 0 0.0 0 0.0 0 0.0 1.3893606662750244 0.06517881155014038 0.21605446934700012 0.28867459297180176 0.9573961496353149 -0.0 0.46660125255584717 0.49503183364868164 0 1.0 0 0.0 0 0.0 0 0.0 -0.27240467071533203 0.13872790336608887 -0.2839455306529999 0.791283905506134 0.6114383339881897 -0.0 0.8982787132263184 0.7239008545875549 0 1.0 0 0.0 0 0.0 0 0.0 -0.2795095443725586 0.14722785353660583 0.21605446934700012 0.7440717816352844 0.6680806875228882 -0.0 0.5484229326248169 0.5902849435806274 0 1.0 0 0.0 0 0.0 0 0.0 -0.27240467071533203 0.13872790336608887 0.21605446934700012 0.791283905506134 0.6114383339881897 -0.0 0.5521750450134277 0.5819390416145325 0 1.0 0 0.0 0 0.0 0 0.0 2.249192953109741 0.2593313753604889 -0.2839455306529999 0.8273873329162598 0.5616016387939453 -0.0 0.8964853882789612 0.6829080581665039 0 1.0 0 0.0 0 0.0 0 0.0 2.2432796955108643 0.2674226760864258 0.21605446934700012 0.7873775362968445 0.616412878036499 -0.0 0.557647705078125 0.547858476638794 0 1.0 0 0.0 0 0.0 0 0.0 2.249192953109741 0.2593313753604889 0.2160544991493225 0.8273873329162598 0.5616016387939453 -0.0 0.5608602166175842 0.5395023822784424 0 1.0 0 0.0 0 0.0 0 0.0 0.3961472511291504 0.1244802474975586 -0.2839455306529999 0.11453596502542496 -0.9934080243110657 -0.0 0.006159007549285889 0.723981499671936 0 1.0 0 0.0 0 0.0 0 0.0 0.4015543460845947 0.12500807642936707 0.21605446934700012 0.08148442208766937 -0.9966429471969604 -0.0 0.4738771617412567 0.5616071224212646 0 1.0 0 0.0 0 0.0 0 0.0 0.3961472511291504 0.1244802474975586 0.21605446934700012 0.11453596502542496 -0.9934080243110657 -0.0 0.47073280811309814 0.5610840916633606 0 1.0 0 0.0 0 0.0 0 0.0 1.3974764347076416 0.06281697750091553 -0.2839455306529999 0.2719199061393738 0.9623096585273743 -0.0 0.002871215343475342 0.6550651788711548 0 1.0 0 0.0 0 0.0 0 0.0 1.3893606662750244 0.06517881155014038 0.21605446934700012 0.28867459297180176 0.9573961496353149 -0.0 0.46660125255584717 0.49503183364868164 0 1.0 0 0.0 0 0.0 0 0.0 1.3974764347076416 0.06281697750091553 0.21605446934700012 0.2719199061393738 0.9623096585273743 -0.0 0.47149011492729187 0.49197161197662354 0 1.0 0 0.0 0 0.0 0 0.0 2.084556818008423 0.2596889138221741 -0.2839455306529999 0.04907376319169998 -0.9987792372703552 -0.0 0.007328629493713379 0.7110196352005005 0 1.0 0 0.0 0 0.0 0 0.0 2.0907180309295654 0.2598372995853424 0.2160544991493225 0.0008545182645320892 -0.999969482421875 -0.0 0.4729996919631958 0.548380970954895 0 1.0 0 0.0 0 0.0 0 0.0 2.084556818008423 0.2596889138221741 0.21605446934700012 0.04907376319169998 -0.9987792372703552 -0.0 0.46939122676849365 0.5482659339904785 0 1.0 0 0.0 0 0.0 0 0.0 0.4341397285461426 0.12496429681777954 -0.2839455306529999 -0.10571611672639847 -0.9943845868110657 -0.0 0.9776194095611572 0.7246223092079163 0 1.0 0 0.0 0 0.0 0 0.0 0.4385874271392822 0.12440240383148193 0.21605446934700012 -0.14645832777023315 -0.9891964197158813 -0.0 0.4954608380794525 0.5602172613143921 0 1.0 0 0.0 0 0.0 0 0.0 0.4341397285461426 0.12496429681777954 0.21605446934700012 -0.10571611672639847 -0.9943845868110657 -0.0 0.49287116527557373 0.5609472990036011 0 1.0 0 0.0 0 0.0 0 0.0 1.2597200870513916 0.06504258513450623 -0.2839455306529999 -0.9891353845596313 -0.14697714149951935 -0.0 0.08516228199005127 0.6356387138366699 0 1.0 0 0.0 0 0.0 0 0.0 1.2612524032592773 0.05692572891712189 0.21605446934700012 -0.9741813540458679 -0.22565385699272156 -0.0 0.39726346731185913 0.49021202325820923 0 1.0 0 0.0 0 0.0 0 0.0 1.2597200870513916 0.06504258513450623 0.21605446934700012 -0.9891353845596313 -0.14697714149951935 -0.0 0.39723891019821167 0.49852633476257324 0 1.0 0 0.0 0 0.0 0 0.0 -0.4900953769683838 0.07213538885116577 -0.2839455306529999 0.9208349585533142 -0.3899044692516327 -0.0 0.04923892021179199 0.6724258065223694 0 1.0 0 0.0 0 0.0 0 0.0 -0.48732495307922363 0.07810565829277039 0.21605446934700012 0.8912014961242676 -0.4535660743713379 -0.0 0.4322170615196228 0.5300252437591553 0 1.0 0 0.0 0 0.0 0 0.0 -0.4900953769683838 0.07213538885116577 0.21605446934700012 0.9208349585533142 -0.3899044692516327 -0.0 0.430381178855896 0.5236064195632935 0 1.0 0 0.0 0 0.0 0 0.0 2.0907180309295654 0.2598372995853424 -0.2839455306529999 0.0008545182645320892 -0.999969482421875 -0.0 1.002812147140503 0.7115545868873596 0 1.0 0 0.0 0 0.0 0 0.0 2.0970871448516846 0.25969499349594116 0.21605446934700012 -0.04580828174948692 -0.9989318251609802 -0.0 1.47673761844635 0.5481581687927246 0 1.0 0 0.0 0 0.0 0 0.0 2.0907180309295654 0.2598372995853424 0.2160544991493225 0.0008545182645320892 -0.999969482421875 -0.0 1.4729996919631958 0.548380970954895 0 1.0 0 0.0 0 0.0 0 0.0 -0.48732495307922363 0.07810565829277039 -0.2839455306529999 0.8912014961242676 -0.4535660743713379 -0.0 0.0478324294090271 0.6794154644012451 0 1.0 0 0.0 0 0.0 0 0.0 -0.48422837257385254 0.08367946743965149 0.21605446934700012 0.8547929525375366 -0.5189062356948853 -0.0 0.4342000186443329 0.5359824895858765 0 1.0 0 0.0 0 0.0 0 0.0 -0.48732495307922363 0.07810565829277039 0.21605446934700012 0.8912014961242676 -0.4535660743713379 -0.0 0.4322170615196228 0.5300252437591553 0 1.0 0 0.0 0 0.0 0 0.0 1.928429365158081 0.2597205638885498 -0.2839455306529999 -0.8250068426132202 0.5650807023048401 -0.0 0.09980490803718567 0.6743261814117432 0 1.0 0 0.0 0 0.0 0 0.0 1.9230258464813232 0.2512412965297699 0.2160544991493225 -0.861079752445221 0.5084383487701416 -0.0 0.38800495862960815 0.5353667140007019 0 1.0 0 0.0 0 0.0 0 0.0 1.928429365158081 0.2597205638885498 0.21605446934700012 -0.8250068426132202 0.5650807023048401 -0.0 0.3908200263977051 0.5432608127593994 0 1.0 0 0.0 0 0.0 0 0.0 0.39104652404785156 0.12380161881446838 -0.2839455306529999 0.1511887013912201 -0.9884945154190063 -0.0 0.009928256273269653 0.7228847742080688 0 1.0 0 0.0 0 0.0 0 0.0 0.3961472511291504 0.1244802474975586 0.21605446934700012 0.11453596502542496 -0.9934080243110657 -0.0 0.47073280811309814 0.5610840916633606 0 1.0 0 0.0 0 0.0 0 0.0 0.39104652404785156 0.12380161881446838 0.21605446934700012 0.1511887013912201 -0.9884945154190063 -0.0 0.4677700698375702 0.5603847503662109 0 1.0 0 0.0 0 0.0 0 0.0 1.4064991474151611 0.06034325063228607 -0.2839455306529999 0.25818657875061035 0.9660634398460388 -0.0 0.99659264087677 0.6522814631462097 0 1.0 0 0.0 0 0.0 0 0.0 1.3974764347076416 0.06281697750091553 0.21605446934700012 0.2719199061393738 0.9623096585273743 -0.0 1.4714901447296143 0.49197161197662354 0 1.0 0 0.0 0 0.0 0 0.0 1.4064991474151611 0.06034325063228607 0.21605446934700012 0.25818657875061035 0.9660634398460388 -0.0 1.4769904613494873 0.48872560262680054 0 1.0 0 0.0 0 0.0 0 0.0 0.4385874271392822 0.12440240383148193 -0.2839455306529999 -0.14645832777023315 -0.9891964197158813 -0.0 0.9742997884750366 0.7237284183502197 0 1.0 0 0.0 0 0.0 0 0.0 0.4428379535675049 0.1236799955368042 0.21605446934700012 -0.1902218759059906 -0.981719434261322 -0.0 0.4979337751865387 0.5593129396438599 0 1.0 0 0.0 0 0.0 0 0.0 0.4385874271392822 0.12440240383148193 0.21605446934700012 -0.14645832777023315 -0.9891964197158813 -0.0 0.4954608380794525 0.5602172613143921 0 1.0 0 0.0 0 0.0 0 0.0 -0.48422837257385254 0.08367946743965149 -0.2839455306529999 0.8547929525375366 -0.5189062356948853 -0.0 0.04617246985435486 0.685994029045105 0 1.0 0 0.0 0 0.0 0 0.0 -0.4808061122894287 0.0888567864894867 0.21605446934700012 0.8112429976463318 -0.5846735835075378 -0.0 0.43633294105529785 0.5414889454841614 0 1.0 0 0.0 0 0.0 0 0.0 -0.48422837257385254 0.08367946743965149 0.21605446934700012 0.8547929525375366 -0.5189062356948853 -0.0 0.4342000186443329 0.5359824895858765 0 1.0 0 0.0 0 0.0 0 0.0 2.0970871448516846 0.25969499349594116 -0.2839455306529999 -0.04580828174948692 -0.9989318251609802 -0.0 0.9981156587600708 0.7116611003875732 0 1.0 0 0.0 0 0.0 0 0.0 2.1032350063323975 0.2592681050300598 0.21605446934700012 -0.09424115717411041 -0.9955443143844604 -0.0 1.4803522825241089 0.5476068258285522 0 1.0 0 0.0 0 0.0 0 0.0 2.0970871448516846 0.25969499349594116 0.21605446934700012 -0.04580828174948692 -0.9989318251609802 -0.0 1.47673761844635 0.5481581687927246 0 1.0 0 0.0 0 0.0 0 0.0 1.4164292812347412 0.057757630944252014 -0.2839455306529999 0.2467421442270279 0.9690542221069336 -0.0 0.9896879196166992 0.6491220593452454 0 1.0 0 0.0 0 0.0 0 0.0 1.4064991474151611 0.06034325063228607 0.21605446934700012 0.25818657875061035 0.9660634398460388 -0.0 1.4769904613494873 0.48872560262680054 0 1.0 0 0.0 0 0.0 0 0.0 1.4164292812347412 0.057757630944252014 0.21605446934700012 0.2467421442270279 0.9690542221069336 -0.0 1.4831054210662842 0.4853035807609558 0 1.0 0 0.0 0 0.0 0 0.0 -0.4808061122894287 0.0888567864894867 -0.2839455306529999 0.8112429976463318 -0.5846735835075378 -0.0 0.044251084327697754 0.6921672821044922 0 1.0 0 0.0 0 0.0 0 0.0 -0.47705769538879395 0.09363764524459839 0.21605446934700012 0.7638782858848572 -0.6453138589859009 -0.0 0.43861955404281616 0.5465542078018188 0 1.0 0 0.0 0 0.0 0 0.0 -0.4808061122894287 0.0888567864894867 0.21605446934700012 0.8112429976463318 -0.5846735835075378 -0.0 0.43633294105529785 0.5414889454841614 0 1.0 0 0.0 0 0.0 0 0.0 0.38625240325927734 0.12297219038009644 -0.2839455306529999 0.19196142256259918 -0.9813836812973022 -0.0 0.013439029455184937 0.7215795516967773 0 1.0 0 0.0 0 0.0 0 0.0 0.39104652404785156 0.12380161881446838 0.21605446934700012 0.1511887013912201 -0.9884945154190063 -0.0 0.4677700698375702 0.5603847503662109 0 1.0 0 0.0 0 0.0 0 0.0 0.38625240325927734 0.12297219038009644 0.21605446934700012 0.19196142256259918 -0.9813836812973022 -0.0 0.46498802304267883 0.55951327085495 0 1.0 0 0.0 0 0.0 0 0.0 1.4272668361663818 0.055060118436813354 -0.2839455306529999 0.2370677888393402 0.9714651703834534 -0.0 0.9821848273277283 0.6455293893814087 0 1.0 0 0.0 0 0.0 0 0.0 1.4164292812347412 0.057757630944252014 0.21605446934700012 0.2467421442270279 0.9690542221069336 -0.0 1.4831054210662842 0.4853035807609558 0 1.0 0 0.0 0 0.0 0 0.0 1.4272668361663818 0.055060118436813354 0.21605446934700012 0.2370677888393402 0.9714651703834534 -0.0 0.48982954025268555 0.4817225933074951 0 1.0 0 0.0 0 0.0 0 0.0 2.078565835952759 0.25924378633499146 -0.2839455306529999 0.10028382390737534 -0.9949339032173157 -0.0 0.011683493852615356 0.7100631594657898 0 1.0 0 0.0 0 0.0 0 0.0 2.084556818008423 0.2596889138221741 0.21605446934700012 0.04907376319169998 -0.9987792372703552 -0.0 0.46939122676849365 0.5482659339904785 0 1.0 0 0.0 0 0.0 0 0.0 2.078565835952759 0.25924378633499146 0.21605446934700012 0.10028382390737534 -0.9949339032173157 -0.0 0.4658893346786499 0.5478110909461975 0 1.0 0 0.0 0 0.0 0 0.0 0.4428379535675049 0.1236799955368042 -0.2839455306529999 -0.1902218759059906 -0.981719434261322 -0.0 0.9711482524871826 0.7226188778877258 0 1.0 0 0.0 0 0.0 0 0.0 0.44689154624938965 0.12279704213142395 0.21605446934700012 -0.2370677888393402 -0.9714651703834534 -0.0 0.5002904534339905 0.5582360029220581 0 1.0 0 0.0 0 0.0 0 0.0 0.4428379535675049 0.1236799955368042 0.21605446934700012 -0.1902218759059906 -0.981719434261322 -0.0 0.4979337751865387 0.5593129396438599 0 1.0 0 0.0 0 0.0 0 0.0 1.2612524032592773 0.05692572891712189 -0.2839455306529999 -0.9741813540458679 -0.22565385699272156 -0.0 0.08384203910827637 0.6276835203170776 0 1.0 0 0.0 0 0.0 0 0.0 1.2633976936340332 0.04913482069969177 0.21605446934700012 -0.9519028067588806 -0.30628377199172974 -0.0 0.39759036898612976 0.48207831382751465 0 1.0 0 0.0 0 0.0 0 0.0 1.2612524032592773 0.05692572891712189 0.21605446934700012 -0.9741813540458679 -0.22565385699272156 -0.0 0.39726346731185913 0.49021202325820923 0 1.0 0 0.0 0 0.0 0 0.0 -0.47705769538879395 0.09363764524459839 -0.2839455306529999 0.7638782858848572 -0.6453138589859009 -0.0 0.04205942153930664 0.6979392766952515 0 1.0 0 0.0 0 0.0 0 0.0 -0.47306370735168457 0.09802931547164917 0.21605446934700012 0.7173070311546326 -0.6967375874519348 -0.0 0.44102004170417786 0.5511919260025024 0 1.0 0 0.0 0 0.0 0 0.0 -0.47705769538879395 0.09363764524459839 0.21605446934700012 0.7638782858848572 -0.6453138589859009 -0.0 0.43861955404281616 0.5465542078018188 0 1.0 0 0.0 0 0.0 0 0.0 2.2544105052948 0.25103816390037537 -0.2839455306529999 0.8651387095451355 0.5015106797218323 -0.0 0.8945741653442383 0.6731503009796143 0 1.0 0 0.0 0 0.0 0 0.0 2.249192953109741 0.2593313753604889 0.2160544991493225 0.8273873329162598 0.5616016387939453 -0.0 0.5608602166175842 0.5395023822784424 0 1.0 0 0.0 0 0.0 0 0.0 2.2544105052948 0.25103816390037537 0.2160544991493225 0.8651387095451355 0.5015106797218323 -0.0 0.5637426972389221 0.5309652090072632 0 1.0 0 0.0 0 0.0 0 0.0 -0.47306370735168457 0.09802931547164917 -0.2839455306529999 0.7173070311546326 -0.6967375874519348 -0.0 0.039642542600631714 0.7033029794692993 0 1.0 0 0.0 0 0.0 0 0.0 -0.4689042568206787 0.10203909873962402 0.21605446934700012 0.6687520742416382 -0.7434614300727844 -0.0 0.4434939920902252 0.5554137825965881 0 1.0 0 0.0 0 0.0 0 0.0 -0.47306370735168457 0.09802931547164917 0.21605446934700012 0.7173070311546326 -0.6967375874519348 -0.0 0.44102004170417786 0.5511919260025024 0 1.0 0 0.0 0 0.0 0 0.0 2.1032350063323975 0.2592681050300598 -0.2839455306529999 -0.09424115717411041 -0.9955443143844604 -0.0 0.9935676455497742 0.7113252878189087 0 1.0 0 0.0 0 0.0 0 0.0 2.109161615371704 0.25855663418769836 0.2160544991493225 -0.14563432335853577 -0.9893185496330261 -0.0 1.4838416576385498 0.5467280149459839 0 1.0 0 0.0 0 0.0 0 0.0 2.1032350063323975 0.2592681050300598 0.21605446934700012 -0.09424115717411041 -0.9955443143844604 -0.0 1.4803522825241089 0.5476068258285522 0 1.0 0 0.0 0 0.0 0 0.0 0.38176465034484863 0.12199193239212036 -0.2839455306529999 0.2373119294643402 -0.9714041352272034 -0.0 0.01669195294380188 0.7200818061828613 0 1.0 0 0.0 0 0.0 0 0.0 0.38625240325927734 0.12297219038009644 0.21605446934700012 0.19196142256259918 -0.9813836812973022 -0.0 0.46498802304267883 0.55951327085495 0 1.0 0 0.0 0 0.0 0 0.0 0.38176465034484863 0.12199193239212036 0.21605446934700012 0.2373119294643402 -0.9714041352272034 -0.0 0.46238505840301514 0.5584733486175537 0 1.0 0 0.0 0 0.0 0 0.0 1.439011812210083 0.05225071310997009 -0.2839455306529999 0.22879727184772491 0.9734488725662231 -0.0 0.9741263389587402 0.6414514780044556 0 1.0 0 0.0 0 0.0 0 0.0 1.4272668361663818 0.055060118436813354 0.21605446934700012 0.2370677888393402 0.9714651703834534 -0.0 0.48982954025268555 0.4817225933074951 0 1.0 0 0.0 0 0.0 0 0.0 1.439011812210083 0.05225071310997009 0.21605446934700012 0.22879727184772491 0.9734488725662231 -0.0 0.4971461296081543 0.4780082702636719 0 1.0 0 0.0 0 0.0 0 0.0 0.44689154624938965 0.12279704213142395 -0.2839455306529999 -0.2370677888393402 -0.9714651703834534 -0.0 0.9681668281555176 0.7213025093078613 0 1.0 0 0.0 0 0.0 0 0.0 0.4507482051849365 0.12175354361534119 0.21605446934700012 -0.286935031414032 -0.9579149484634399 -0.0 0.5025313496589661 0.556988000869751 0 1.0 0 0.0 0 0.0 0 0.0 0.44689154624938965 0.12279704213142395 0.21605446934700012 -0.2370677888393402 -0.9714651703834534 -0.0 0.5002904534339905 0.5582360029220581 0 1.0 0 0.0 0 0.0 0 0.0 -0.4689042568206787 0.10203909873962402 -0.2839455306529999 0.6687520742416382 -0.7434614300727844 -0.0 0.03704848885536194 0.7082504034042358 0 1.0 0 0.0 0 0.0 0 0.0 -0.46457958221435547 0.10566699504852295 0.21605446934700012 0.6146733164787292 -0.7887508869171143 -0.0 0.44604381918907166 0.5592247247695923 0 1.0 0 0.0 0 0.0 0 0.0 -0.4689042568206787 0.10203909873962402 0.21605446934700012 0.6687520742416382 -0.7434614300727844 -0.0 0.4434939920902252 0.5554137825965881 0 1.0 0 0.0 0 0.0 0 0.0 1.4516637325286865 0.04932942986488342 -0.2839455306529999 0.22797326743602753 0.9736624956130981 -0.0 0.9655718803405762 0.6368474364280701 0 1.0 0 0.0 0 0.0 0 0.0 1.439011812210083 0.05225071310997009 0.21605446934700012 0.22879727184772491 0.9734488725662231 -0.0 0.4971461296081543 0.4780082702636719 0 1.0 0 0.0 0 0.0 0 0.0 1.4516637325286865 0.04932942986488342 0.21605446934700012 0.22797326743602753 0.9736624956130981 -0.0 0.5050248503684998 0.4741957187652588 0 1.0 0 0.0 0 0.0 0 0.0 2.0727450847625732 0.25850191712379456 -0.2839455306529999 0.15363018214702606 -0.9880977869033813 -0.0 0.015869349241256714 0.7086991667747498 0 1.0 0 0.0 0 0.0 0 0.0 2.078565835952759 0.25924378633499146 0.21605446934700012 0.10028382390737534 -0.9949339032173157 -0.0 0.4658893346786499 0.5478110909461975 0 1.0 0 0.0 0 0.0 0 0.0 2.0727450847625732 0.25850191712379456 0.2160544991493225 0.15366069972515106 -0.9880977869033813 -0.0 0.46249303221702576 0.5470205545425415 0 1.0 0 0.0 0 0.0 0 0.0 -0.46457958221435547 0.10566699504852295 -0.2839455306529999 0.6146733164787292 -0.7887508869171143 -0.0 0.03427475690841675 0.712781548500061 0 1.0 0 0.0 0 0.0 0 0.0 -0.46008944511413574 0.10891300439834595 0.21605446934700012 0.5552842617034912 -0.8316293954849243 -0.0 0.4486721456050873 0.562628984451294 0 1.0 0 0.0 0 0.0 0 0.0 -0.46457958221435547 0.10566699504852295 0.21605446934700012 0.6146733164787292 -0.7887508869171143 -0.0 0.44604381918907166 0.5592247247695923 0 1.0 0 0.0 0 0.0 0 0.0 2.109161615371704 0.25855663418769836 -0.2839455306529999 -0.14563432335853577 -0.9893185496330261 -0.0 0.989181399345398 0.7105580568313599 0 1.0 0 0.0 0 0.0 0 0.0 2.1148669719696045 0.2575605809688568 0.2160544991493225 -0.19977416098117828 -0.9798272848129272 -0.0 1.4872045516967773 0.5455227494239807 0 1.0 0 0.0 0 0.0 0 0.0 2.109161615371704 0.25855663418769836 0.2160544991493225 -0.14563432335853577 -0.9893185496330261 -0.0 1.4838416576385498 0.5467280149459839 0 1.0 0 0.0 0 0.0 0 0.0 0.37758350372314453 0.12086087465286255 -0.2839455306529999 0.28769800066947937 -0.9577013254165649 -0.0 0.019688516855239868 0.718406081199646 0 1.0 0 0.0 0 0.0 0 0.0 0.38176465034484863 0.12199193239212036 0.21605446934700012 0.2373119294643402 -0.9714041352272034 -0.0 0.46238505840301514 0.5584733486175537 0 1.0 0 0.0 0 0.0 0 0.0 0.37758350372314453 0.12086087465286255 0.21605446934700012 0.28769800066947937 -0.9577013254165649 -0.0 0.4599595367908478 0.5572682619094849 0 1.0 0 0.0 0 0.0 0 0.0 1.464440107345581 0.04629625380039215 -0.2839455306529999 0.24109622836112976 0.9704886078834534 -0.0 0.9571168422698975 0.6317853927612305 0 1.0 0 0.0 0 0.0 0 0.0 1.4516637325286865 0.04932942986488342 0.21605446934700012 0.22797326743602753 0.9736624956130981 -0.0 0.5050248503684998 0.4741957187652588 0 1.0 0 0.0 0 0.0 0 0.0 1.464440107345581 0.04629625380039215 0.21605446934700012 0.24109622836112976 0.9704886078834534 -0.0 0.5129398107528687 0.47033530473709106 0 1.0 0 0.0 0 0.0 0 0.0 0.4507482051849365 0.12175354361534119 -0.2839455306529999 -0.286935031414032 -0.9579149484634399 -0.0 0.965356707572937 0.7197878360748291 0 1.0 0 0.0 0 0.0 0 0.0 0.4544076919555664 0.12054949998855591 0.21605446934700012 -0.3397320508956909 -0.9405194520950317 -0.0 0.5046570301055908 0.5555698871612549 0 1.0 0 0.0 0 0.0 0 0.0 0.4507482051849365 0.12175354361534119 0.21605446934700012 -0.286935031414032 -0.9579149484634399 -0.0 0.5025313496589661 0.556988000869751 0 1.0 0 0.0 0 0.0 0 0.0 1.2633976936340332 0.04913482069969177 -0.2839455306529999 -0.9519028067588806 -0.30628377199172974 -0.0 0.08226513862609863 0.6200631856918335 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 0.04166984558105469 0.21605446934700012 -0.921994686126709 -0.3871577978134155 -0.0 0.3982289433479309 0.47411829233169556 0 1.0 0 0.0 0 0.0 0 0.0 1.2633976936340332 0.04913482069969177 0.21605446934700012 -0.9519028067588806 -0.30628377199172974 -0.0 0.39759036898612976 0.48207831382751465 0 1.0 0 0.0 0 0.0 0 0.0 -0.46008944511413574 0.10891300439834595 -0.2839455306529999 0.5552842617034912 -0.8316293954849243 -0.0 0.031319111585617065 0.7168951034545898 0 1.0 0 0.0 0 0.0 0 0.0 -0.45543384552001953 0.11177712678909302 0.21605446934700012 0.491225928068161 -0.8710287809371948 -0.0 0.4513814449310303 0.5656299591064453 0 1.0 0 0.0 0 0.0 0 0.0 -0.46008944511413574 0.10891300439834595 0.21605446934700012 0.5552842617034912 -0.8316293954849243 -0.0 0.4486721456050873 0.562628984451294 0 1.0 0 0.0 0 0.0 0 0.0 2.067094564437866 0.2574633061885834 -0.2839455306529999 0.20883816480636597 -0.9779351353645325 -0.0 0.01988041400909424 0.7069413065910339 0 1.0 0 0.0 0 0.0 0 0.0 2.0727450847625732 0.25850191712379456 0.2160544991493225 0.15366069972515106 -0.9880977869033813 -0.0 0.46249303221702576 0.5470205545425415 0 1.0 0 0.0 0 0.0 0 0.0 2.067094564437866 0.2574633061885834 0.2160544991493225 0.20883816480636597 -0.9779351353645325 -0.0 0.459200918674469 0.5458978414535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.45543384552001953 0.11177712678909302 -0.2839455306529999 0.491225928068161 -0.8710287809371948 -0.0 0.028180181980133057 0.7205884456634521 0 1.0 0 0.0 0 0.0 0 0.0 -0.45061278343200684 0.11425936222076416 0.21605446934700012 0.42326119542121887 -0.9059724807739258 -0.0 0.4541741907596588 0.5682300329208374 0 1.0 0 0.0 0 0.0 0 0.0 -0.45543384552001953 0.11177712678909302 0.21605446934700012 0.491225928068161 -0.8710287809371948 -0.0 0.4513814449310303 0.5656299591064453 0 1.0 0 0.0 0 0.0 0 0.0 2.1148669719696045 0.2575605809688568 -0.2839455306529999 -0.19977416098117828 -0.9798272848129272 -0.0 0.9849684238433838 0.7093707323074341 0 1.0 0 0.0 0 0.0 0 0.0 2.1203505992889404 0.25627994537353516 0.21605446934700012 -0.2563554644584656 -0.9665517210960388 -0.0 0.49043959379196167 0.5439919233322144 0 1.0 0 0.0 0 0.0 0 0.0 2.1148669719696045 0.2575605809688568 0.2160544991493225 -0.19977416098117828 -0.9798272848129272 -0.0 0.48720449209213257 0.5455227494239807 0 1.0 0 0.0 0 0.0 0 0.0 0.5771746635437012 0.11358323693275452 -0.2839455306529999 0.9285256266593933 0.3712576627731323 -0.0 0.8871405124664307 0.6785171031951904 0 1.0 0 0.0 0 0.0 0 0.0 0.5740368366241455 0.12087064981460571 0.21605446934700012 0.9072847962379456 0.4204840362071991 -0.0 0.5672982335090637 0.5468026399612427 0 1.0 0 0.0 0 0.0 0 0.0 0.5771746635437012 0.11358323693275452 0.21605446934700012 0.9285256266593933 0.3712576627731323 -0.0 0.5691020488739014 0.5396531820297241 0 1.0 0 0.0 0 0.0 0 0.0 1.4765570163726807 0.04315118491649628 -0.2839455306529999 0.2623371183872223 0.964964747428894 -0.0 0.949317455291748 0.6264196634292603 0 1.0 0 0.0 0 0.0 0 0.0 1.464440107345581 0.04629625380039215 0.21605446934700012 0.24109622836112976 0.9704886078834534 -0.0 0.5129398107528687 0.47033530473709106 0 1.0 0 0.0 0 0.0 0 0.0 1.4765570163726807 0.04315118491649628 0.21605446934700012 0.2623371183872223 0.964964747428894 -0.0 0.520378828048706 0.4664573073387146 0 1.0 0 0.0 0 0.0 0 0.0 -0.45061278343200684 0.11425936222076416 -0.2839455306529999 0.42326119542121887 -0.9059724807739258 -0.0 0.024857670068740845 0.7238576412200928 0 1.0 0 0.0 0 0.0 0 0.0 -0.44562649726867676 0.11635971069335938 0.21605446934700012 0.35254982113838196 -0.9357585310935974 -0.0 0.45705264806747437 0.5704306364059448 0 1.0 0 0.0 0 0.0 0 0.0 -0.45061278343200684 0.11425936222076416 0.21605446934700012 0.42326119542121887 -0.9059724807739258 -0.0 0.4541741907596588 0.5682300329208374 0 1.0 0 0.0 0 0.0 0 0.0 0.37370872497558594 0.119579017162323 -0.2839455306529999 0.34348583221435547 -0.939146101474762 -0.0 0.022431492805480957 0.7165650129318237 0 1.0 0 0.0 0 0.0 0 0.0 0.37758350372314453 0.12086087465286255 0.21605446934700012 0.28769800066947937 -0.9577013254165649 -0.0 0.4599595367908478 0.5572682619094849 0 1.0 0 0.0 0 0.0 0 0.0 0.37370872497558594 0.119579017162323 0.21605446934700012 0.34348583221435547 -0.939146101474762 -0.0 0.4577094316482544 0.5559004545211792 0 1.0 0 0.0 0 0.0 0 0.0 1.4880144596099854 0.0398942232131958 -0.2839455306529999 0.2856227159500122 0.9583117365837097 -0.0 0.9421727657318115 0.6208406090736389 0 1.0 0 0.0 0 0.0 0 0.0 1.4765570163726807 0.04315118491649628 0.21605446934700012 0.2623371183872223 0.964964747428894 -0.0 0.520378828048706 0.4664573073387146 0 1.0 0 0.0 0 0.0 0 0.0 1.4880144596099854 0.0398942232131958 0.21605446934700012 0.2856227159500122 0.9583117365837097 -0.0 0.5273305177688599 0.46256983280181885 0 1.0 0 0.0 0 0.0 0 0.0 2.0616142749786377 0.2561279237270355 -0.2839455306529999 0.26538896560668945 -0.964140772819519 -0.0 0.02371254563331604 0.704802393913269 0 1.0 0 0.0 0 0.0 0 0.0 2.067094564437866 0.2574633061885834 0.2160544991493225 0.20883816480636597 -0.9779351353645325 -0.0 0.459200918674469 0.5458978414535522 0 1.0 0 0.0 0 0.0 0 0.0 2.0616142749786377 0.2561279237270355 0.2160544991493225 0.26535844802856445 -0.964140772819519 -0.0 0.45601141452789307 0.5444464683532715 0 1.0 0 0.0 0 0.0 0 0.0 0.4544076919555664 0.12054949998855591 -0.2839455306529999 -0.3397320508956909 -0.9405194520950317 -0.0 0.9627187252044678 0.7180824279785156 0 1.0 0 0.0 0 0.0 0 0.0 0.4578702449798584 0.1191849410533905 0.21605446934700012 -0.395092636346817 -0.9186376333236694 -0.0 0.5066683292388916 0.5539826154708862 0 1.0 0 0.0 0 0.0 0 0.0 0.4544076919555664 0.12054949998855591 0.21605446934700012 -0.3397320508956909 -0.9405194520950317 -0.0 0.5046570301055908 0.5555698871612549 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 0.04166984558105469 -0.2839455306529999 -0.921994686126709 -0.3871577978134155 -0.0 0.08042612671852112 0.6127701997756958 0 1.0 0 0.0 0 0.0 0 0.0 1.2695271968841553 0.034530818462371826 0.21605446934700012 -0.8845790028572083 -0.4663533568382263 -0.0 0.39919033646583557 0.46632468700408936 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 0.04166984558105469 0.21605446934700012 -0.921994686126709 -0.3871577978134155 -0.0 0.3982289433479309 0.47411829233169556 0 1.0 0 0.0 0 0.0 0 0.0 -0.44562649726867676 0.11635971069335938 -0.2839455306529999 0.35254982113838196 -0.9357585310935974 -0.0 0.021352380514144897 0.7266969680786133 0 1.0 0 0.0 0 0.0 0 0.0 -0.4404747486114502 0.11807817220687866 0.21605446934700012 0.28028199076652527 -0.9598986506462097 -0.0 0.4600192606449127 0.5722322463989258 0 1.0 0 0.0 0 0.0 0 0.0 -0.44562649726867676 0.11635971069335938 0.21605446934700012 0.35254982113838196 -0.9357585310935974 -0.0 0.45705264806747437 0.5704306364059448 0 1.0 0 0.0 0 0.0 0 0.0 2.1203505992889404 0.25627994537353516 -0.2839455306529999 -0.2563554644584656 -0.9665517210960388 -0.0 0.9809385538101196 0.7077746987342834 0 1.0 0 0.0 0 0.0 0 0.0 2.12561297416687 0.254714697599411 0.2160544991493225 -0.31492048501968384 -0.9490951299667358 -0.0 0.4935469329357147 0.5421359539031982 0 1.0 0 0.0 0 0.0 0 0.0 2.1203505992889404 0.25627994537353516 0.21605446934700012 -0.2563554644584656 -0.9665517210960388 -0.0 0.49043959379196167 0.5439919233322144 0 1.0 0 0.0 0 0.0 0 0.0 0.26792407035827637 0.1198587417602539 -0.2839455306529999 -0.9349040389060974 0.35483869910240173 -0.0 0.08682084083557129 0.6905057430267334 0 1.0 0 0.0 0 0.0 0 0.0 0.26553797721862793 0.11276590824127197 0.21605446934700012 -0.9591967463493347 0.28269293904304504 -0.0 0.4022688865661621 0.5451507568359375 0 1.0 0 0.0 0 0.0 0 0.0 0.26792407035827637 0.1198587417602539 0.21605446934700012 -0.9349040389060974 0.35483869910240173 -0.0 0.4038441479206085 0.5518714189529419 0 1.0 0 0.0 0 0.0 0 0.0 -0.4404747486114502 0.11807817220687866 -0.2839455306529999 0.28028199076652527 -0.9598986506462097 -0.0 0.0176660418510437 0.7290995121002197 0 1.0 0 0.0 0 0.0 0 0.0 -0.43515753746032715 0.11941477656364441 0.21605446934700012 0.20780053734779358 -0.9781487584114075 -0.0 0.46307632327079773 0.573634147644043 0 1.0 0 0.0 0 0.0 0 0.0 -0.4404747486114502 0.11807817220687866 0.21605446934700012 0.28028199076652527 -0.9598986506462097 -0.0 0.4600192606449127 0.5722322463989258 0 1.0 0 0.0 0 0.0 0 0.0 1.4988129138946533 0.036525383591651917 -0.2839455306529999 0.3112582862377167 0.9503158926963806 -0.0 0.9356687068939209 0.6151248216629028 0 1.0 0 0.0 0 0.0 0 0.0 1.4880144596099854 0.0398942232131958 0.21605446934700012 0.2856227159500122 0.9583117365837097 -0.0 0.5273305177688599 0.46256983280181885 0 1.0 0 0.0 0 0.0 0 0.0 1.4988129138946533 0.036525383591651917 0.21605446934700012 0.3112582862377167 0.9503158926963806 -0.0 0.5337929725646973 0.45867598056793213 0 1.0 0 0.0 0 0.0 0 0.0 2.0563042163848877 0.2544957995414734 -0.2839455306529999 0.32270270586013794 -0.9464705586433411 -0.0 0.02736303210258484 0.7022942900657654 0 1.0 0 0.0 0 0.0 0 0.0 2.0616142749786377 0.2561279237270355 0.2160544991493225 0.26535844802856445 -0.964140772819519 -0.0 0.45601141452789307 0.5444464683532715 0 1.0 0 0.0 0 0.0 0 0.0 2.0563042163848877 0.2544957995414734 0.21605446934700012 0.32270270586013794 -0.9464705586433411 -0.0 0.45292267203330994 0.5426691770553589 0 1.0 0 0.0 0 0.0 0 0.0 -0.43515753746032715 0.11941477656364441 -0.2839455306529999 0.20780053734779358 -0.9781487584114075 -0.0 0.013802021741867065 0.7310566306114197 0 1.0 0 0.0 0 0.0 0 0.0 -0.4296748638153076 0.12036949396133423 0.21605446934700012 0.13629566133022308 -0.9906613230705261 -0.0 0.46622589230537415 0.5746346116065979 0 1.0 0 0.0 0 0.0 0 0.0 -0.43515753746032715 0.11941477656364441 0.21605446934700012 0.20780053734779358 -0.9781487584114075 -0.0 0.46307632327079773 0.573634147644043 0 1.0 0 0.0 0 0.0 0 0.0 2.12561297416687 0.254714697599411 -0.2839455306529999 -0.31492048501968384 -0.9490951299667358 -0.0 0.9770991802215576 0.7057809829711914 0 1.0 0 0.0 0 0.0 0 0.0 2.1306540966033936 0.25286486744880676 0.2160544991493225 -0.3748893737792969 -0.9270607829093933 -0.0 0.4965265691280365 0.5399552583694458 0 1.0 0 0.0 0 0.0 0 0.0 2.12561297416687 0.254714697599411 0.2160544991493225 -0.31492048501968384 -0.9490951299667358 -0.0 0.4935469329357147 0.5421359539031982 0 1.0 0 0.0 0 0.0 0 0.0 0.37014031410217285 0.11814635992050171 -0.2839455306529999 0.4048890769481659 -0.9143345355987549 -0.0 0.02492421865463257 0.7145699262619019 0 1.0 0 0.0 0 0.0 0 0.0 0.37370872497558594 0.119579017162323 0.21605446934700012 0.34348583221435547 -0.939146101474762 -0.0 0.4577094316482544 0.5559004545211792 0 1.0 0 0.0 0 0.0 0 0.0 0.37014031410217285 0.11814635992050171 0.21605446934700012 0.4048890769481659 -0.9143345355987549 -0.0 0.4556327164173126 0.5543718338012695 0 1.0 0 0.0 0 0.0 0 0.0 1.5089523792266846 0.03304465115070343 -0.2839455306529999 0.3395489454269409 0.9405804872512817 -0.0 0.9297826290130615 0.6093347072601318 0 1.0 0 0.0 0 0.0 0 0.0 1.4988129138946533 0.036525383591651917 0.21605446934700012 0.3112582862377167 0.9503158926963806 -0.0 0.5337929725646973 0.45867598056793213 0 1.0 0 0.0 0 0.0 0 0.0 1.5089523792266846 0.03304465115070343 0.21605446934700012 0.3395489454269409 0.9405804872512817 -0.0 0.5397717952728271 0.45477455854415894 0 1.0 0 0.0 0 0.0 0 0.0 0.4578702449798584 0.1191849410533905 -0.2839455306529999 -0.395092636346817 -0.9186376333236694 -0.0 0.9602524042129517 0.716193437576294 0 1.0 0 0.0 0 0.0 0 0.0 0.4611356258392334 0.11765983700752258 0.21605446934700012 -0.4525589644908905 -0.8917203545570374 -0.0 0.5085660219192505 0.5522264242172241 0 1.0 0 0.0 0 0.0 0 0.0 0.4578702449798584 0.1191849410533905 0.21605446934700012 -0.395092636346817 -0.9186376333236694 -0.0 0.5066683292388916 0.5539826154708862 0 1.0 0 0.0 0 0.0 0 0.0 1.2695271968841553 0.034530818462371826 -0.2839455306529999 -0.8845790028572083 -0.4663533568382263 -0.0 0.07831767201423645 0.6057960987091064 0 1.0 0 0.0 0 0.0 0 0.0 1.2735114097595215 0.027717724442481995 0.21605446934700012 -0.8403576612472534 -0.5420087575912476 -0.0 0.40048789978027344 0.4586907625198364 0 1.0 0 0.0 0 0.0 0 0.0 1.2695271968841553 0.034530818462371826 0.21605446934700012 -0.8845790028572083 -0.4663533568382263 -0.0 0.39919033646583557 0.46632468700408936 0 1.0 0 0.0 0 0.0 0 0.0 -0.4296748638153076 0.12036949396133423 -0.2839455306529999 0.13629566133022308 -0.9906613230705261 -0.0 0.009765088558197021 0.7325584888458252 0 1.0 0 0.0 0 0.0 0 0.0 -0.4240269660949707 0.12094232439994812 0.21605446934700012 0.06689657270908356 -0.9977416396141052 -0.0 0.4694697856903076 0.5752311944961548 0 1.0 0 0.0 0 0.0 0 0.0 -0.4296748638153076 0.12036949396133423 0.21605446934700012 0.13629566133022308 -0.9906613230705261 -0.0 0.46622589230537415 0.5746346116065979 0 1.0 0 0.0 0 0.0 0 0.0 2.051164388656616 0.252566933631897 -0.2839455306529999 0.3802300989627838 -0.9248634576797485 -0.0 0.030830442905426025 0.6994280815124512 0 1.0 0 0.0 0 0.0 0 0.0 2.0563042163848877 0.2544957995414734 0.21605446934700012 0.32270270586013794 -0.9464705586433411 -0.0 0.45292267203330994 0.5426691770553589 0 1.0 0 0.0 0 0.0 0 0.0 2.051164388656616 0.252566933631897 0.21605446934700012 0.3802300989627838 -0.9248634576797485 -0.0 0.44993263483047485 0.5405683517456055 0 1.0 0 0.0 0 0.0 0 0.0 2.1306540966033936 0.25286486744880676 -0.2839455306529999 -0.3748893737792969 -0.9270607829093933 -0.0 0.9734561443328857 0.7034001350402832 0 1.0 0 0.0 0 0.0 0 0.0 2.1354739665985107 0.2507304549217224 0.21605446934700012 -0.4354686141014099 -0.9001739621162415 -0.0 0.49937885999679565 0.5374495983123779 0 1.0 0 0.0 0 0.0 0 0.0 2.1306540966033936 0.25286486744880676 0.2160544991493225 -0.3748893737792969 -0.9270607829093933 -0.0 0.4965265691280365 0.5399552583694458 0 1.0 0 0.0 0 0.0 0 0.0 0.3668785095214844 0.1165628731250763 -0.2839455306529999 0.47175511717796326 -0.8817102313041687 -0.0 0.027170389890670776 0.7124302387237549 0 1.0 0 0.0 0 0.0 0 0.0 0.37014031410217285 0.11814635992050171 0.21605446934700012 0.4048890769481659 -0.9143345355987549 -0.0 0.4556327164173126 0.5543718338012695 0 1.0 0 0.0 0 0.0 0 0.0 0.3668785095214844 0.1165628731250763 0.21605446934700012 0.47175511717796326 -0.8817102313041687 -0.0 0.45372745394706726 0.5526838302612305 0 1.0 0 0.0 0 0.0 0 0.0 1.518432855606079 0.029452025890350342 -0.2839455306529999 0.3708304166793823 0.9286782145500183 -0.0 0.9244864583015442 0.6035186052322388 0 1.0 0 0.0 0 0.0 0 0.0 1.5089523792266846 0.03304465115070343 0.21605446934700012 0.3395489454269409 0.9405804872512817 -0.0 0.5397717952728271 0.45477455854415894 0 1.0 0 0.0 0 0.0 0 0.0 1.518432855606079 0.029452025890350342 0.21605446934700012 0.3708304166793823 0.9286782145500183 -0.0 0.5452778935432434 0.45086079835891724 0 1.0 0 0.0 0 0.0 0 0.0 0.4611356258392334 0.11765983700752258 -0.2839455306529999 -0.4525589644908905 -0.8917203545570374 -0.0 0.9579575061798096 0.7141268253326416 0 1.0 0 0.0 0 0.0 0 0.0 0.4642040729522705 0.11597418785095215 0.21605446934700012 -0.5114291906356812 -0.8593096733093262 -0.0 0.5103511214256287 0.5503013730049133 0 1.0 0 0.0 0 0.0 0 0.0 0.4611356258392334 0.11765983700752258 0.21605446934700012 -0.4525589644908905 -0.8917203545570374 -0.0 0.5085660219192505 0.5522264242172241 0 1.0 0 0.0 0 0.0 0 0.0 -0.2659175395965576 0.12963202595710754 -0.2839455306529999 0.8353221416473389 0.5496993660926819 -0.0 0.8955774307250977 0.7135368585586548 0 1.0 0 0.0 0 0.0 0 0.0 -0.27240467071533203 0.13872790336608887 0.21605446934700012 0.791283905506134 0.6114383339881897 -0.0 0.5521750450134277 0.5819390416145325 0 1.0 0 0.0 0 0.0 0 0.0 -0.2659175395965576 0.12963202595710754 0.21605446934700012 0.8353221416473389 0.5496993660926819 -0.0 0.5556415319442749 0.5730181932449341 0 1.0 0 0.0 0 0.0 0 0.0 1.5272538661956787 0.02574750781059265 -0.2839455306529999 0.4054689109325409 0.9140903949737549 -0.0 0.9197492003440857 0.5977128744125366 0 1.0 0 0.0 0 0.0 0 0.0 1.518432855606079 0.029452025890350342 0.21605446934700012 0.3708304166793823 0.9286782145500183 -0.0 0.5452778935432434 0.45086079835891724 0 1.0 0 0.0 0 0.0 0 0.0 1.5272538661956787 0.02574750781059265 0.21605446934700012 0.4054689109325409 0.9140903949737549 -0.0 0.550325870513916 0.4469272494316101 0 1.0 0 0.0 0 0.0 0 0.0 -0.4240269660949707 0.12094232439994812 -0.2839455306529999 0.06689657270908356 -0.9977416396141052 -0.0 0.005561709403991699 0.7335937023162842 0 1.0 0 0.0 0 0.0 0 0.0 -0.4182136058807373 0.12113326787948608 0.21605446934700012 -9.155552834272385e-05 -1.0 -0.0 0.47280994057655334 0.5754200220108032 0 1.0 0 0.0 0 0.0 0 0.0 -0.4240269660949707 0.12094232439994812 0.21605446934700012 0.06689657270908356 -0.9977416396141052 -0.0 0.4694697856903076 0.5752311944961548 0 1.0 0 0.0 0 0.0 0 0.0 2.0461952686309814 0.2503412961959839 -0.2839455306529999 0.4372081756591797 -0.8993194103240967 -0.0 0.034114301204681396 0.6962137818336487 0 1.0 0 0.0 0 0.0 0 0.0 2.051164388656616 0.252566933631897 0.21605446934700012 0.3802300989627838 -0.9248634576797485 -0.0 0.44993263483047485 0.5405683517456055 0 1.0 0 0.0 0 0.0 0 0.0 2.0461952686309814 0.2503412961959839 0.21605446934700012 0.4372081756591797 -0.8993194103240967 -0.0 0.4470393657684326 0.5381458401679993 0 1.0 0 0.0 0 0.0 0 0.0 1.2735114097595215 0.027717724442481995 -0.2839455306529999 -0.8403576612472534 -0.5420087575912476 -0.0 0.07593053579330444 0.5991321802139282 0 1.0 0 0.0 0 0.0 0 0.0 1.2781085968017578 0.021230563521385193 0.21605446934700012 -0.790459930896759 -0.6125065088272095 -0.0 0.4021371603012085 0.45121073722839355 0 1.0 0 0.0 0 0.0 0 0.0 1.2735114097595215 0.027717724442481995 0.21605446934700012 -0.8403576612472534 -0.5420087575912476 -0.0 0.40048789978027344 0.4586907625198364 0 1.0 0 0.0 0 0.0 0 0.0 1.9230258464813232 0.2512412965297699 -0.2839455306529999 -0.861079752445221 0.5084383487701416 -0.0 0.10137379169464111 0.6650401949882507 0 1.0 0 0.0 0 0.0 0 0.0 1.9182569980621338 0.24249932169914246 0.21605448424816132 -0.8938566446304321 0.44828638434410095 -0.0 0.38543954491615295 0.5272694230079651 0 1.0 0 0.0 0 0.0 0 0.0 1.9230258464813232 0.2512412965297699 0.2160544991493225 -0.861079752445221 0.5084383487701416 -0.0 0.38800495862960815 0.5353667140007019 0 1.0 0 0.0 0 0.0 0 0.0 0.3639230728149414 0.11482855677604675 -0.2839455306529999 0.5499130487442017 -0.8352000713348389 -0.0 0.029174327850341797 0.7101534605026245 0 1.0 0 0.0 0 0.0 0 0.0 0.3668785095214844 0.1165628731250763 0.21605446934700012 0.47175511717796326 -0.8817102313041687 -0.0 0.45372745394706726 0.5526838302612305 0 1.0 0 0.0 0 0.0 0 0.0 0.3639230728149414 0.11482855677604675 0.21605446934700012 0.5499130487442017 -0.8352000713348389 -0.0 0.4519915282726288 0.5508368611335754 0 1.0 0 0.0 0 0.0 0 0.0 0.4642040729522705 0.11597418785095215 -0.2839455306529999 -0.5114291906356812 -0.8593096733093262 -0.0 0.9558324813842773 0.7118879556655884 0 1.0 0 0.0 0 0.0 0 0.0 0.4670755863189697 0.11412802338600159 0.21605446934700012 -0.5681325793266296 -0.8229010701179504 -0.0 0.512024462223053 0.54820716381073 0 1.0 0 0.0 0 0.0 0 0.0 0.4642040729522705 0.11597418785095215 0.21605446934700012 -0.5114291906356812 -0.8593096733093262 -0.0 0.5103511214256287 0.5503013730049133 0 1.0 0 0.0 0 0.0 0 0.0 -0.26004815101623535 0.11994022130966187 -0.2839455306529999 0.8735617995262146 0.4866481423377991 -0.0 0.8933745622634888 0.7027099132537842 0 1.0 0 0.0 0 0.0 0 0.0 -0.2659175395965576 0.12963202595710754 0.21605446934700012 0.8353221416473389 0.5496993660926819 -0.0 0.5556415319442749 0.5730181932449341 0 1.0 0 0.0 0 0.0 0 0.0 -0.26004815101623535 0.11994022130966187 0.21605446934700012 0.8735617995262146 0.4866481423377991 -0.0 0.5588341355323792 0.5635035634040833 0 1.0 0 0.0 0 0.0 0 0.0 1.5354154109954834 0.02193109691143036 -0.2839455306529999 0.443800151348114 0.8961150050163269 -0.0 0.9155389070510864 0.5919426679611206 0 1.0 0 0.0 0 0.0 0 0.0 1.5272538661956787 0.02574750781059265 0.21605446934700012 0.4054689109325409 0.9140903949737549 -0.0 0.550325870513916 0.4469272494316101 0 1.0 0 0.0 0 0.0 0 0.0 1.5354154109954834 0.02193109691143036 0.21605446934700012 0.443800151348114 0.8961150050163269 -0.0 0.5549329519271851 0.44296425580978394 0 1.0 0 0.0 0 0.0 0 0.0 -0.4182136058807373 0.12113326787948608 -0.2839455306529999 -9.155552834272385e-05 -1.0 -0.0 1.0011998414993286 0.7341498732566833 0 1.0 0 0.0 0 0.0 0 0.0 -0.4122908115386963 0.12093746662139893 0.21605446934700012 -0.06741538643836975 -0.9977111220359802 -0.0 1.4762153625488281 0.5751924514770508 0 1.0 0 0.0 0 0.0 0 0.0 -0.4182136058807373 0.12113326787948608 0.21605446934700012 -9.155552834272385e-05 -1.0 -0.0 1.472809910774231 0.5754200220108032 0 1.0 0 0.0 0 0.0 0 0.0 2.25893235206604 0.2425430715084076 -0.2839455306529999 0.8996551632881165 0.4365672767162323 -0.0 0.8930968046188354 0.6633660793304443 0 1.0 0 0.0 0 0.0 0 0.0 2.2544105052948 0.25103816390037537 0.2160544991493225 0.8651387095451355 0.5015106797218323 -0.0 0.5637426972389221 0.5309652090072632 0 1.0 0 0.0 0 0.0 0 0.0 2.25893235206604 0.2425430715084076 0.21605448424816132 0.8996551632881165 0.4365672767162323 -0.0 0.5663050413131714 0.5222381353378296 0 1.0 0 0.0 0 0.0 0 0.0 2.1354739665985107 0.2507304549217224 -0.2839455306529999 -0.4354686141014099 -0.9001739621162415 -0.0 0.9700139164924622 0.7006418704986572 0 1.0 0 0.0 0 0.0 0 0.0 2.1400725841522217 0.24831146001815796 0.21605448424816132 -0.49580371379852295 -0.8684042096138 -0.0 0.5021044611930847 0.5346182584762573 0 1.0 0 0.0 0 0.0 0 0.0 2.1354739665985107 0.2507304549217224 0.21605446934700012 -0.4354686141014099 -0.9001739621162415 -0.0 0.49937885999679565 0.5374495983123779 0 1.0 0 0.0 0 0.0 0 0.0 0.3621327877044678 0.11351263523101807 -0.2839455306529999 0.6188848614692688 -0.7854548692703247 -0.0 0.030368447303771973 0.708484947681427 0 1.0 0 0.0 0 0.0 0 0.0 0.3639230728149414 0.11482855677604675 0.21605446934700012 0.5499130487442017 -0.8352000713348389 -0.0 0.4519915282726288 0.5508368611335754 0 1.0 0 0.0 0 0.0 0 0.0 0.3621327877044678 0.11351263523101807 0.21605446934700012 0.6188848614692688 -0.7854548692703247 -0.0 0.4509294629096985 0.5494382381439209 0 1.0 0 0.0 0 0.0 0 0.0 1.5429184436798096 0.018002808094024658 -0.2839455306529999 0.4862514138221741 0.8738059401512146 -0.0 0.9118235111236572 0.5862239599227905 0 1.0 0 0.0 0 0.0 0 0.0 1.5354154109954834 0.02193109691143036 0.21605446934700012 0.443800151348114 0.8961150050163269 -0.0 0.5549329519271851 0.44296425580978394 0 1.0 0 0.0 0 0.0 0 0.0 1.5429184436798096 0.018002808094024658 0.21605446934700012 0.4862514138221741 0.8738059401512146 -0.0 0.5591180324554443 0.4389606714248657 0 1.0 0 0.0 0 0.0 0 0.0 -0.4122908115386963 0.12093746662139893 -0.2839455306529999 -0.06741538643836975 -0.9977111220359802 -0.0 0.9967317581176758 0.7342070937156677 0 1.0 0 0.0 0 0.0 0 0.0 -0.40654802322387695 0.12035006284713745 0.21605446934700012 -0.13760796189308167 -0.9904782176017761 -0.0 1.4795198440551758 0.5745433568954468 0 1.0 0 0.0 0 0.0 0 0.0 -0.4122908115386963 0.12093746662139893 0.21605446934700012 -0.06741538643836975 -0.9977111220359802 -0.0 1.4762153625488281 0.5751924514770508 0 1.0 0 0.0 0 0.0 0 0.0 0.4670755863189697 0.11412802338600159 -0.2839455306529999 -0.5681325793266296 -0.8229010701179504 -0.0 0.9538760185241699 0.7094811201095581 0 1.0 0 0.0 0 0.0 0 0.0 0.4697740077972412 0.1121310293674469 0.21605446934700012 -0.6189153790473938 -0.7854243516921997 -0.0 0.5136004686355591 0.5459519624710083 0 1.0 0 0.0 0 0.0 0 0.0 0.4670755863189697 0.11412802338600159 0.21605446934700012 -0.5681325793266296 -0.8229010701179504 -0.0 0.512024462223053 0.54820716381073 0 1.0 0 0.0 0 0.0 0 0.0 1.2781085968017578 0.021230563521385193 -0.2839455306529999 -0.790459930896759 -0.6125065088272095 -0.0 0.07325360178947449 0.5927698612213135 0 1.0 0 0.0 0 0.0 0 0.0 1.2833187580108643 0.015069350600242615 0.21605446934700012 -0.7363200783729553 -0.6765953302383423 -0.0 0.404155969619751 0.4438803195953369 0 1.0 0 0.0 0 0.0 0 0.0 1.2781085968017578 0.021230563521385193 0.21605446934700012 -0.790459930896759 -0.6125065088272095 -0.0 0.4021371603012085 0.45121073722839355 0 1.0 0 0.0 0 0.0 0 0.0 -0.40654802322387695 0.12035006284713745 -0.2839455306529999 -0.13760796189308167 -0.9904782176017761 -0.0 0.9923887252807617 0.7337468862533569 0 1.0 0 0.0 0 0.0 0 0.0 -0.4009850025177002 0.11937102675437927 0.21605446934700012 -0.21018096804618835 -0.9776299595832825 -0.0 1.4827231168746948 0.5734726786613464 0 1.0 0 0.0 0 0.0 0 0.0 -0.40654802322387695 0.12035006284713745 0.21605446934700012 -0.13760796189308167 -0.9904782176017761 -0.0 1.4795198440551758 0.5745433568954468 0 1.0 0 0.0 0 0.0 0 0.0 2.041396379470825 0.24781891703605652 -0.2839455306529999 0.4929349720478058 -0.870021641254425 -0.0 0.03721565008163452 0.6926599740982056 0 1.0 0 0.0 0 0.0 0 0.0 2.0461952686309814 0.2503412961959839 0.21605446934700012 0.4372081756591797 -0.8993194103240967 -0.0 0.4470393657684326 0.5381458401679993 0 1.0 0 0.0 0 0.0 0 0.0 2.041396379470825 0.24781891703605652 0.21605448424816132 0.4929349720478058 -0.870021641254425 -0.0 0.4442402422428131 0.5354030728340149 0 1.0 0 0.0 0 0.0 0 0.0 2.1400725841522217 0.24831146001815796 -0.2839455306529999 -0.49580371379852295 -0.8684042096138 -0.0 0.9667751789093018 0.697515070438385 0 1.0 0 0.0 0 0.0 0 0.0 2.144449472427368 0.2456078827381134 0.21605448424816132 -0.5549790859222412 -0.8318430185317993 -0.0 0.5047039985656738 0.5314600467681885 0 1.0 0 0.0 0 0.0 0 0.0 2.1400725841522217 0.24831146001815796 0.21605448424816132 -0.49580371379852295 -0.8684042096138 -0.0 0.5021044611930847 0.5346182584762573 0 1.0 0 0.0 0 0.0 0 0.0 0.579991340637207 0.1059650182723999 -0.2839455306529999 0.9462873935699463 0.3232520520687103 -0.0 0.8865388035774231 0.6703751087188721 0 1.0 0 0.0 0 0.0 0 0.0 0.5771746635437012 0.11358323693275452 0.21605446934700012 0.9285256266593933 0.3712576627731323 -0.0 0.5691020488739014 0.5396531820297241 0 1.0 0 0.0 0 0.0 0 0.0 0.579991340637207 0.1059650182723999 0.21605446934700012 0.9462873935699463 0.3232520520687103 -0.0 0.5707834959030151 0.5321577787399292 0 1.0 0 0.0 0 0.0 0 0.0 1.5497620105743408 0.013962626457214355 -0.2839455306529999 0.5330973267555237 0.8460341095924377 -0.0 0.9085736274719238 0.5805654525756836 0 1.0 0 0.0 0 0.0 0 0.0 1.5429184436798096 0.018002808094024658 0.21605446934700012 0.4862514138221741 0.8738059401512146 -0.0 0.5591180324554443 0.4389606714248657 0 1.0 0 0.0 0 0.0 0 0.0 1.5497620105743408 0.013962626457214355 0.21605446934700012 0.5330973267555237 0.8460341095924377 -0.0 0.5628992319107056 0.4349040985107422 0 1.0 0 0.0 0 0.0 0 0.0 1.2833187580108643 0.015069350600242615 -0.2839455306529999 -0.7363200783729553 -0.6765953302383423 -0.0 0.07027402520179749 0.5867006778717041 0 1.0 0 0.0 0 0.0 0 0.0 1.2891418933868408 0.009234070777893066 0.21605446934700012 -0.6795861721038818 -0.7335734367370605 -0.0 0.4065644145011902 0.43669772148132324 0 1.0 0 0.0 0 0.0 0 0.0 1.2833187580108643 0.015069350600242615 0.21605446934700012 -0.7363200783729553 -0.6765953302383423 -0.0 0.404155969619751 0.4438803195953369 0 1.0 0 0.0 0 0.0 0 0.0 -0.25479650497436523 0.10965245962142944 -0.2839455306529999 0.9059114456176758 0.42344433069229126 -0.0 0.8916356563568115 0.691405177116394 0 1.0 0 0.0 0 0.0 0 0.0 -0.26004815101623535 0.11994022130966187 0.21605446934700012 0.8735617995262146 0.4866481423377991 -0.0 0.5588341355323792 0.5635035634040833 0 1.0 0 0.0 0 0.0 0 0.0 -0.25479650497436523 0.10965245962142944 0.21605446934700012 0.9059114456176758 0.42344433069229126 -0.0 0.5617637038230896 0.5533726215362549 0 1.0 0 0.0 0 0.0 0 0.0 0.36049818992614746 0.11213347315788269 -0.2839455306529999 0.6719565391540527 -0.7405621409416199 -0.0 0.031444817781448364 0.7067667841911316 0 1.0 0 0.0 0 0.0 0 0.0 0.3621327877044678 0.11351263523101807 0.21605446934700012 0.6188848614692688 -0.7854548692703247 -0.0 0.4509294629096985 0.5494382381439209 0 1.0 0 0.0 0 0.0 0 0.0 0.36049818992614746 0.11213347315788269 0.21605446934700012 0.6719565391540527 -0.7405621409416199 -0.0 0.44995224475860596 0.5479727387428284 0 1.0 0 0.0 0 0.0 0 0.0 -0.4009850025177002 0.11937102675437927 -0.2839455306529999 -0.21018096804618835 -0.9776299595832825 -0.0 0.9881839752197266 0.7327767610549927 0 1.0 0 0.0 0 0.0 0 0.0 -0.3956022262573242 0.11800038814544678 0.21605446934700012 -0.2839747369289398 -0.9588000178337097 -0.0 1.4858251810073853 0.5719797611236572 0 1.0 0 0.0 0 0.0 0 0.0 -0.4009850025177002 0.11937102675437927 0.21605446934700012 -0.21018096804618835 -0.9776299595832825 -0.0 1.4827231168746948 0.5734726786613464 0 1.0 0 0.0 0 0.0 0 0.0 2.0367677211761475 0.24499979615211487 -0.2839455306529999 0.5467696189880371 -0.8372753262519836 -0.0 0.0401361882686615 0.6887743473052979 0 1.0 0 0.0 0 0.0 0 0.0 2.041396379470825 0.24781891703605652 0.21605448424816132 0.4929349720478058 -0.870021641254425 -0.0 0.4442402422428131 0.5354030728340149 0 1.0 0 0.0 0 0.0 0 0.0 2.0367677211761475 0.24499979615211487 0.21605448424816132 0.5467696189880371 -0.8372753262519836 -0.0 0.4415329396724701 0.5323407649993896 0 1.0 0 0.0 0 0.0 0 0.0 0.26553797721862793 0.11276590824127197 -0.2839455306529999 -0.9591967463493347 0.28269293904304504 -0.0 0.08741673827171326 0.6831655502319336 0 1.0 0 0.0 0 0.0 0 0.0 0.26368212699890137 0.10545903444290161 0.21605446934700012 -0.9776909947395325 0.20999786257743835 -0.0 0.4009059965610504 0.5381927490234375 0 1.0 0 0.0 0 0.0 0 0.0 0.26553797721862793 0.11276590824127197 0.21605446934700012 -0.9591967463493347 0.28269293904304504 -0.0 0.4022688865661621 0.5451507568359375 0 1.0 0 0.0 0 0.0 0 0.0 2.144449472427368 0.2456078827381134 -0.2839455306529999 -0.5549790859222412 -0.8318430185317993 -0.0 0.9637418985366821 0.6940274238586426 0 1.0 0 0.0 0 0.0 0 0.0 2.1486051082611084 0.24261972308158875 0.21605448424816132 -0.6120181679725647 -0.790826141834259 -0.0 0.507178783416748 0.527972936630249 0 1.0 0 0.0 0 0.0 0 0.0 2.144449472427368 0.2456078827381134 0.21605448424816132 -0.5549790859222412 -0.8318430185317993 -0.0 0.5047039985656738 0.5314600467681885 0 1.0 0 0.0 0 0.0 0 0.0 1.5559461116790771 0.00981055200099945 -0.2839455306529999 0.5844904780387878 0.8113650679588318 -0.0 0.9057615399360657 0.574970006942749 0 1.0 0 0.0 0 0.0 0 0.0 1.5497620105743408 0.013962626457214355 0.21605446934700012 0.5330973267555237 0.8460341095924377 -0.0 0.5628992319107056 0.4349040985107422 0 1.0 0 0.0 0 0.0 0 0.0 1.5559461116790771 0.00981055200099945 0.21605446934700012 0.5844904780387878 0.8113650679588318 -0.0 0.5662946105003357 0.43078118562698364 0 1.0 0 0.0 0 0.0 0 0.0 -0.3956022262573242 0.11800038814544678 -0.2839455306529999 -0.2839747369289398 -0.9588000178337097 -0.0 0.9841297268867493 0.7313036918640137 0 1.0 0 0.0 0 0.0 0 0.0 -0.3903992176055908 0.11623811721801758 0.21605446934700012 -0.3577074408531189 -0.9338053464889526 -0.0 0.4888266324996948 0.5700627565383911 0 1.0 0 0.0 0 0.0 0 0.0 -0.3956022262573242 0.11800038814544678 0.21605446934700012 -0.2839747369289398 -0.9588000178337097 -0.0 0.48582515120506287 0.5719797611236572 0 1.0 0 0.0 0 0.0 0 0.0 0.35901927947998047 0.11069107055664062 -0.2839455306529999 0.7252113223075867 -0.6884975433349609 -0.0 0.032404929399490356 0.7050001621246338 0 1.0 0 0.0 0 0.0 0 0.0 0.36049818992614746 0.11213347315788269 0.21605446934700012 0.6719565391540527 -0.7405621409416199 -0.0 0.44995224475860596 0.5479727387428284 0 1.0 0 0.0 0 0.0 0 0.0 0.35901927947998047 0.11069107055664062 0.21605446934700012 0.7252113223075867 -0.6884975433349609 -0.0 0.4490593671798706 0.5464398860931396 0 1.0 0 0.0 0 0.0 0 0.0 1.5614712238311768 0.005546584725379944 -0.2839455306529999 0.6442762613296509 0.764763355255127 -0.0 0.9033616185188293 0.5694353580474854 0 1.0 0 0.0 0 0.0 0 0.0 1.5559461116790771 0.00981055200099945 0.21605446934700012 0.5844904780387878 0.8113650679588318 -0.0 0.5662946105003357 0.43078118562698364 0 1.0 0 0.0 0 0.0 0 0.0 1.5614712238311768 0.005546584725379944 0.21605446934700012 0.6442762613296509 0.764763355255127 -0.0 0.5693216323852539 0.4265783429145813 0 1.0 0 0.0 0 0.0 0 0.0 -0.3903992176055908 0.11623811721801758 -0.2839455306529999 -0.3577074408531189 -0.9338053464889526 -0.0 0.9802356958389282 0.7293342351913452 0 1.0 0 0.0 0 0.0 0 0.0 -0.3853764533996582 0.11408424377441406 0.21605446934700012 -0.4300057888031006 -0.9027985334396362 -0.0 0.49172791838645935 0.5677193403244019 0 1.0 0 0.0 0 0.0 0 0.0 -0.3903992176055908 0.11623811721801758 0.21605446934700012 -0.3577074408531189 -0.9338053464889526 -0.0 0.4888266324996948 0.5700627565383911 0 1.0 0 0.0 0 0.0 0 0.0 2.0323092937469482 0.24188390374183655 -0.2839455306529999 0.5980406999588013 -0.8014465570449829 -0.0 0.04287832975387573 0.684563398361206 0 1.0 0 0.0 0 0.0 0 0.0 2.0367677211761475 0.24499979615211487 0.21605448424816132 0.5467696189880371 -0.8372753262519836 -0.0 0.4415329396724701 0.5323407649993896 0 1.0 0 0.0 0 0.0 0 0.0 2.0323092937469482 0.24188390374183655 0.21605448424816132 0.5980406999588013 -0.8014465570449829 -0.0 0.4389148950576782 0.5289592742919922 0 1.0 0 0.0 0 0.0 0 0.0 0.4697740077972412 0.1121310293674469 -0.2839455306529999 -0.6189153790473938 -0.7854243516921997 -0.0 0.9520689249038696 0.706916332244873 0 1.0 0 0.0 0 0.0 0 0.0 0.4723243713378906 0.10999298095703125 0.21605446934700012 -0.6656697392463684 -0.7462080717086792 -0.0 0.5150942206382751 0.5435440540313721 0 1.0 0 0.0 0 0.0 0 0.0 0.4697740077972412 0.1121310293674469 0.21605446934700012 -0.6189153790473938 -0.7854243516921997 -0.0 0.5136004686355591 0.5459519624710083 0 1.0 0 0.0 0 0.0 0 0.0 1.2891418933868408 0.009234070777893066 -0.2839455306529999 -0.6795861721038818 -0.7335734367370605 -0.0 0.0669773519039154 0.5809162855148315 0 1.0 0 0.0 0 0.0 0 0.0 1.2955777645111084 0.0037247389554977417 0.21605446934700012 -0.6217535734176636 -0.7831659913063049 -0.0 0.40938490629196167 0.42966437339782715 0 1.0 0 0.0 0 0.0 0 0.0 1.2891418933868408 0.009234070777893066 0.21605446934700012 -0.6795861721038818 -0.7335734367370605 -0.0 0.4065644145011902 0.43669772148132324 0 1.0 0 0.0 0 0.0 0 0.0 2.1486051082611084 0.24261972308158875 -0.2839455306529999 -0.6120181679725647 -0.790826141834259 -0.0 0.960913896560669 0.690185546875 0 1.0 0 0.0 0 0.0 0 0.0 2.1525394916534424 0.2393469512462616 0.21605448424816132 -0.6639912128448486 -0.747703492641449 -0.0 0.5095299482345581 0.5241546630859375 0 1.0 0 0.0 0 0.0 0 0.0 2.1486051082611084 0.24261972308158875 0.21605448424816132 -0.6120181679725647 -0.790826141834259 -0.0 0.507178783416748 0.527972936630249 0 1.0 0 0.0 0 0.0 0 0.0 -0.3853764533996582 0.11408424377441406 -0.2839455306529999 -0.4300057888031006 -0.9027985334396362 -0.0 0.976510763168335 0.7268737554550171 0 1.0 0 0.0 0 0.0 0 0.0 -0.38053345680236816 0.11153876781463623 0.21605446934700012 -0.4994964301586151 -0.8662984371185303 -0.0 0.49453020095825195 0.564945638179779 0 1.0 0 0.0 0 0.0 0 0.0 -0.3853764533996582 0.11408424377441406 0.21605446934700012 -0.4300057888031006 -0.9027985334396362 -0.0 0.49172791838645935 0.5677193403244019 0 1.0 0 0.0 0 0.0 0 0.0 0.3576960563659668 0.10918542742729187 -0.2839455306529999 0.7773064374923706 -0.6290780305862427 -0.0 0.033250242471694946 0.7031860947608948 0 1.0 0 0.0 0 0.0 0 0.0 0.35901927947998047 0.11069107055664062 0.21605446934700012 0.7252113223075867 -0.6884975433349609 -0.0 0.4490593671798706 0.5464398860931396 0 1.0 0 0.0 0 0.0 0 0.0 0.3576960563659668 0.10918542742729187 0.21605446934700012 0.7773064374923706 -0.6290780305862427 -0.0 0.448250412940979 0.5448392033576965 0 1.0 0 0.0 0 0.0 0 0.0 1.5663940906524658 0.0010247975587844849 -0.2839455306529999 0.7040009498596191 0.7101657390594482 -0.0 0.9013361930847168 0.5637887716293335 0 1.0 0 0.0 0 0.0 0 0.0 1.5614712238311768 0.005546584725379944 0.21605446934700012 0.6442762613296509 0.764763355255127 -0.0 0.5693216323852539 0.4265783429145813 0 1.0 0 0.0 0 0.0 0 0.0 1.5663940906524658 0.0010247975587844849 0.21605446934700012 0.7040009498596191 0.7101657390594482 -0.0 0.5720328688621521 0.42212748527526855 0 1.0 0 0.0 0 0.0 0 0.0 -0.38053345680236816 0.11153876781463623 -0.2839455306529999 -0.4994964301586151 -0.8662984371185303 -0.0 0.9729613661766052 0.7239266633987427 0 1.0 0 0.0 0 0.0 0 0.0 -0.3758707046508789 0.1086016595363617 0.21605446934700012 -0.5649586319923401 -0.8250983953475952 -0.0 0.4972342252731323 0.5617371201515198 0 1.0 0 0.0 0 0.0 0 0.0 -0.38053345680236816 0.11153876781463623 0.21605446934700012 -0.4994964301586151 -0.8662984371185303 -0.0 0.49453020095825195 0.564945638179779 0 1.0 0 0.0 0 0.0 0 0.0 2.262758493423462 0.23384609818458557 -0.2839455306529999 0.9299905300140381 0.3675343990325928 -0.0 0.8920276165008545 0.6535477638244629 0 1.0 0 0.0 0 0.0 0 0.0 2.25893235206604 0.2425430715084076 0.21605448424816132 0.8996551632881165 0.4365672767162323 -0.0 0.5663050413131714 0.5222381353378296 0 1.0 0 0.0 0 0.0 0 0.0 2.262758493423462 0.23384609818458557 0.21605448424816132 0.9299905300140381 0.3675343990325928 -0.0 0.5685557723045349 0.5133090019226074 0 1.0 0 0.0 0 0.0 0 0.0 0.4723243713378906 0.10999298095703125 -0.2839455306529999 -0.6656697392463684 -0.7462080717086792 -0.0 0.9503912925720215 0.7042018175125122 0 1.0 0 0.0 0 0.0 0 0.0 0.47472643852233887 0.10771384835243225 0.21605446934700012 -0.7104098796844482 -0.7037568092346191 -0.0 0.5165062546730042 0.5409820079803467 0 1.0 0 0.0 0 0.0 0 0.0 0.4723243713378906 0.10999298095703125 0.21605446934700012 -0.6656697392463684 -0.7462080717086792 -0.0 0.5150942206382751 0.5435440540313721 0 1.0 0 0.0 0 0.0 0 0.0 1.2955777645111084 0.0037247389554977417 -0.2839455306529999 -0.6217535734176636 -0.7831659913063049 -0.0 0.06334775686264038 0.5754095315933228 0 1.0 0 0.0 0 0.0 0 0.0 1.3026268482208252 -0.0014586597681045532 0.21605446934700012 -0.5591601133346558 -0.8290352821350098 -0.0 0.412642240524292 0.4227854609489441 0 1.0 0 0.0 0 0.0 0 0.0 1.2955777645111084 0.0037247389554977417 0.21605446934700012 -0.6217535734176636 -0.7831659913063049 -0.0 0.40938490629196167 0.42966437339782715 0 1.0 0 0.0 0 0.0 0 0.0 1.9182569980621338 0.24249932169914246 -0.2839455306529999 -0.8938566446304321 0.44828638434410095 -0.0 0.10260581970214844 0.6557139158248901 0 1.0 0 0.0 0 0.0 0 0.0 1.914123296737671 0.23349463939666748 0.21605448424816132 -0.922727108001709 0.38541826605796814 -0.0 0.38311290740966797 0.5189554691314697 0 1.0 0 0.0 0 0.0 0 0.0 1.9182569980621338 0.24249932169914246 0.21605448424816132 -0.8938566446304321 0.44828638434410095 -0.0 0.38543954491615295 0.5272694230079651 0 1.0 0 0.0 0 0.0 0 0.0 -0.25016283988952637 0.09876877069473267 -0.2839455306529999 0.9324930310249329 0.36115604639053345 -0.0 0.8903305530548096 0.6796026229858398 0 1.0 0 0.0 0 0.0 0 0.0 -0.25479650497436523 0.10965245962142944 0.21605446934700012 0.9059114456176758 0.42344433069229126 -0.0 0.5617637038230896 0.5533726215362549 0 1.0 0 0.0 0 0.0 0 0.0 -0.25016283988952637 0.09876877069473267 0.21605446934700012 0.9324930310249329 0.36115604639053345 -0.0 0.5644399523735046 0.5426000356674194 0 1.0 0 0.0 0 0.0 0 0.0 0.35652852058410645 0.10761654376983643 -0.2839455306529999 0.82680743932724 -0.5624561309814453 -0.0 0.033982157707214355 0.7013251185417175 0 1.0 0 0.0 0 0.0 0 0.0 0.3576960563659668 0.10918542742729187 0.21605446934700012 0.7773064374923706 -0.6290780305862427 -0.0 0.448250412940979 0.5448392033576965 0 1.0 0 0.0 0 0.0 0 0.0 0.35652852058410645 0.10761654376983643 0.21605446934700012 0.82680743932724 -0.5624561309814453 -0.0 0.4475249648094177 0.5431699752807617 0 1.0 0 0.0 0 0.0 0 0.0 1.5708892345428467 -0.0037840157747268677 -0.2839455306529999 0.7566148638725281 0.6538285613059998 -0.0 0.8995866775512695 0.5579736828804016 0 1.0 0 0.0 0 0.0 0 0.0 1.5663940906524658 0.0010247975587844849 0.21605446934700012 0.7040009498596191 0.7101657390594482 -0.0 0.5720328688621521 0.42212748527526855 0 1.0 0 0.0 0 0.0 0 0.0 1.5708892345428467 -0.0037840157747268677 0.21605446934700012 0.7566148638725281 0.6538285613059998 -0.0 0.5745283365249634 0.4174097776412964 0 1.0 0 0.0 0 0.0 0 0.0 -0.3758707046508789 0.1086016595363617 -0.2839455306529999 -0.5649586319923401 -0.8250983953475952 -0.0 0.9695932269096375 0.7204959988594055 0 1.0 0 0.0 0 0.0 0 0.0 -0.3713877201080322 0.10527294874191284 0.21605446934700012 -0.6255073547363281 -0.7801751494407654 -0.0 0.49984145164489746 0.5580880641937256 0 1.0 0 0.0 0 0.0 0 0.0 -0.3758707046508789 0.1086016595363617 0.21605446934700012 -0.5649586319923401 -0.8250983953475952 -0.0 0.4972342252731323 0.5617371201515198 0 1.0 0 0.0 0 0.0 0 0.0 2.0280210971832275 0.23847129940986633 -0.2839455306529999 0.6477859020233154 -0.7618030309677124 -0.0 0.045444995164871216 0.6800327301025391 0 1.0 0 0.0 0 0.0 0 0.0 2.0323092937469482 0.24188390374183655 0.21605448424816132 0.5980406999588013 -0.8014465570449829 -0.0 0.4389148950576782 0.5289592742919922 0 1.0 0 0.0 0 0.0 0 0.0 2.0280210971832275 0.23847129940986633 0.21605448424816132 0.6477859020233154 -0.7618030309677124 -0.0 0.4363836348056793 0.525258481502533 0 1.0 0 0.0 0 0.0 0 0.0 0.47472643852233887 0.10771384835243225 -0.2839455306529999 -0.7104098796844482 -0.7037568092346191 -0.0 0.9488418102264404 0.7013393640518188 0 1.0 0 0.0 0 0.0 0 0.0 0.47697997093200684 0.1052936315536499 0.21605446934700012 -0.7525253891944885 -0.6585283875465393 -0.0 0.5178369283676147 0.5382643938064575 0 1.0 0 0.0 0 0.0 0 0.0 0.47472643852233887 0.10771384835243225 0.21605446934700012 -0.7104098796844482 -0.7037568092346191 -0.0 0.5165062546730042 0.5409820079803467 0 1.0 0 0.0 0 0.0 0 0.0 1.3026268482208252 -0.0014586597681045532 -0.2839455306529999 -0.5591601133346558 -0.8290352821350098 -0.0 0.05936765670776367 0.5701737403869629 0 1.0 0 0.0 0 0.0 0 0.0 1.3085453510284424 -0.005109667778015137 0.21605446934700012 -0.4938505291938782 -0.869533360004425 -0.0 0.41551315784454346 0.4177248477935791 0 1.0 0 0.0 0 0.0 0 0.0 1.3026268482208252 -0.0014586597681045532 0.21605446934700012 -0.5591601133346558 -0.8290352821350098 -0.0 0.412642240524292 0.4227854609489441 0 1.0 0 0.0 0 0.0 0 0.0 2.1525394916534424 0.2393469512462616 -0.2839455306529999 -0.6639912128448486 -0.747703492641449 -0.0 0.958290696144104 0.6859949827194214 0 1.0 0 0.0 0 0.0 0 0.0 2.1562039852142334 0.23587459325790405 0.21605448424816132 -0.7098605036735535 -0.7043061852455139 -0.0 0.5117291212081909 0.5201003551483154 0 1.0 0 0.0 0 0.0 0 0.0 2.1525394916534424 0.2393469512462616 0.21605448424816132 -0.6639912128448486 -0.747703492641449 -0.0 0.5095299482345581 0.5241546630859375 0 1.0 0 0.0 0 0.0 0 0.0 -0.3713877201080322 0.10527294874191284 -0.2839455306529999 -0.6255073547363281 -0.7801751494407654 -0.0 0.9664097428321838 0.7165837287902832 0 1.0 0 0.0 0 0.0 0 0.0 -0.36708498001098633 0.10155263543128967 0.21605446934700012 -0.6805322170257568 -0.7326883673667908 -0.0 0.5023529529571533 0.5539916753768921 0 1.0 0 0.0 0 0.0 0 0.0 -0.3713877201080322 0.10527294874191284 0.21605446934700012 -0.6255073547363281 -0.7801751494407654 -0.0 0.49984145164489746 0.5580880641937256 0 1.0 0 0.0 0 0.0 0 0.0 0.3555166721343994 0.10598441958427429 -0.2839455306529999 0.8720968961715698 -0.48930326104164124 -0.0 0.03460210561752319 0.6994175910949707 0 1.0 0 0.0 0 0.0 0 0.0 0.35652852058410645 0.10761654376983643 0.21605446934700012 0.82680743932724 -0.5624561309814453 -0.0 0.4475249648094177 0.5431699752807617 0 1.0 0 0.0 0 0.0 0 0.0 0.3555166721343994 0.10598441958427429 0.21605446934700012 0.8720968961715698 -0.48930326104164124 -0.0 0.4468827545642853 0.5414315462112427 0 1.0 0 0.0 0 0.0 0 0.0 1.5749561786651611 -0.008879855275154114 -0.2839455306529999 0.8056581020355225 0.5923642516136169 -0.0 0.8981013298034668 0.5519905090332031 0 1.0 0 0.0 0 0.0 0 0.0 1.5708892345428467 -0.0037840157747268677 0.21605446934700012 0.7566148638725281 0.6538285613059998 -0.0 0.5745283365249634 0.4174097776412964 0 1.0 0 0.0 0 0.0 0 0.0 1.5749561786651611 -0.008879855275154114 0.21605446934700012 0.8056581020355225 0.5923642516136169 -0.0 0.5768167972564697 0.41242218017578125 0 1.0 0 0.0 0 0.0 0 0.0 -0.36708498001098633 0.10155263543128967 -0.2839455306529999 -0.6805322170257568 -0.7326883673667908 -0.0 0.9634137153625488 0.7121903896331787 0 1.0 0 0.0 0 0.0 0 0.0 -0.362962007522583 0.0974406898021698 0.21605446934700012 -0.729667067527771 -0.6837671995162964 -0.0 0.5047703385353088 0.5494404435157776 0 1.0 0 0.0 0 0.0 0 0.0 -0.36708498001098633 0.10155263543128967 0.21605446934700012 -0.6805322170257568 -0.7326883673667908 -0.0 0.5023529529571533 0.5539916753768921 0 1.0 0 0.0 0 0.0 0 0.0 2.0239274501800537 0.23475462198257446 -0.2839455306529999 0.6968291401863098 -0.7172154784202576 -0.0 0.04782417416572571 0.6751836538314819 0 1.0 0 0.0 0 0.0 0 0.0 2.0280210971832275 0.23847129940986633 0.21605448424816132 0.6477859020233154 -0.7618030309677124 -0.0 0.4363836348056793 0.525258481502533 0 1.0 0 0.0 0 0.0 0 0.0 2.0239274501800537 0.23475462198257446 0.21605448424816132 0.6968291401863098 -0.7172154784202576 -0.0 0.43394935131073 0.5212298631668091 0 1.0 0 0.0 0 0.0 0 0.0 1.3085453510284424 -0.005109667778015137 -0.2839455306529999 -0.4938505291938782 -0.869533360004425 -0.0 0.05601981282234192 0.5664651393890381 0 1.0 0 0.0 0 0.0 0 0.0 1.3156745433807373 -0.00882391631603241 0.21605446934700012 -0.4374523162841797 -0.8992278575897217 -0.0 0.4191212058067322 0.41234201192855835 0 1.0 0 0.0 0 0.0 0 0.0 1.3085453510284424 -0.005109667778015137 0.21605446934700012 -0.4938505291938782 -0.869533360004425 -0.0 0.41551315784454346 0.4177248477935791 0 1.0 0 0.0 0 0.0 0 0.0 2.1562039852142334 0.23587459325790405 -0.2839455306529999 -0.7098605036735535 -0.7043061852455139 -0.0 0.9559001922607422 0.6815630197525024 0 1.0 0 0.0 0 0.0 0 0.0 2.1595494747161865 0.23228806257247925 0.21605448424816132 -0.7530442476272583 -0.6579485535621643 -0.0 0.5137469172477722 0.5159071683883667 0 1.0 0 0.0 0 0.0 0 0.0 2.1562039852142334 0.23587459325790405 0.21605448424816132 -0.7098605036735535 -0.7043061852455139 -0.0 0.5117291212081909 0.5201003551483154 0 1.0 0 0.0 0 0.0 0 0.0 0.3546605110168457 0.10428905487060547 -0.2839455306529999 0.9117099642753601 -0.4108096659183502 -0.0 0.03511127829551697 0.6974632740020752 0 1.0 0 0.0 0 0.0 0 0.0 0.3555166721343994 0.10598441958427429 0.21605446934700012 0.8720968961715698 -0.48930326104164124 -0.0 0.4468827545642853 0.5414315462112427 0 1.0 0 0.0 0 0.0 0 0.0 0.3546605110168457 0.10428905487060547 0.21605446934700012 0.9117099642753601 -0.4108096659183502 -0.0 0.4463235139846802 0.5396226644515991 0 1.0 0 0.0 0 0.0 0 0.0 1.3156745433807373 -0.00882391631603241 -0.2839455306529999 -0.4374523162841797 -0.8992278575897217 -0.0 0.05196726322174072 0.5626709461212158 0 1.0 0 0.0 0 0.0 0 0.0 1.3240149021148682 -0.012601405382156372 0.21605446934700012 -0.39289528131484985 -0.9195532202720642 -0.0 0.42351773381233215 0.4066343903541565 0 1.0 0 0.0 0 0.0 0 0.0 1.3156745433807373 -0.00882391631603241 0.21605446934700012 -0.4374523162841797 -0.8992278575897217 -0.0 0.4191212058067322 0.41234201192855835 0 1.0 0 0.0 0 0.0 0 0.0 -0.24614691734313965 0.08728915452957153 -0.2839455306529999 0.9537034034729004 0.3006683588027954 -0.0 0.8894327878952026 0.667277991771698 0 1.0 0 0.0 0 0.0 0 0.0 -0.25016283988952637 0.09876877069473267 0.21605446934700012 0.9324930310249329 0.36115604639053345 -0.0 0.5644399523735046 0.5426000356674194 0 1.0 0 0.0 0 0.0 0 0.0 -0.24614691734313965 0.08728915452957153 0.21605446934700012 0.9537034034729004 0.3006683588027954 -0.0 0.5668718218803406 0.5311582088470459 0 1.0 0 0.0 0 0.0 0 0.0 0.5824871063232422 0.0980159342288971 -0.2839455306529999 0.9540696144104004 0.299539178609848 -0.0 0.8861355781555176 0.6619564890861511 0 1.0 0 0.0 0 0.0 0 0.0 0.579991340637207 0.1059650182723999 0.21605446934700012 0.9462873935699463 0.3232520520687103 -0.0 0.5707834959030151 0.5321577787399292 0 1.0 0 0.0 0 0.0 0 0.0 0.5824871063232422 0.0980159342288971 0.21605446934700012 0.9540696144104004 0.299539178609848 -0.0 0.5723457336425781 0.5243042707443237 0 1.0 0 0.0 0 0.0 0 0.0 -0.362962007522583 0.0974406898021698 -0.2839455306529999 -0.729667067527771 -0.6837671995162964 -0.0 0.9606061577796936 0.7073150277137756 0 1.0 0 0.0 0 0.0 0 0.0 -0.35901927947998047 0.09293714165687561 0.21605446934700012 -0.7774590253829956 -0.6289254426956177 -0.0 0.5070947408676147 0.5444257855415344 0 1.0 0 0.0 0 0.0 0 0.0 -0.362962007522583 0.0974406898021698 0.21605446934700012 -0.729667067527771 -0.6837671995162964 -0.0 0.5047703385353088 0.5494404435157776 0 1.0 0 0.0 0 0.0 0 0.0 2.020052671432495 0.23072659969329834 -0.2839455306529999 0.7431256771087646 -0.669148862361908 -0.0 0.05000510811805725 0.6700170040130615 0 1.0 0 0.0 0 0.0 0 0.0 2.0239274501800537 0.23475462198257446 0.21605448424816132 0.6968291401863098 -0.7172154784202576 -0.0 0.43394935131073 0.5212298631668091 0 1.0 0 0.0 0 0.0 0 0.0 2.020052671432495 0.23072659969329834 0.21605448424816132 0.7431256771087646 -0.669148862361908 -0.0 0.43162181973457336 0.5168639421463013 0 1.0 0 0.0 0 0.0 0 0.0 0.26368212699890137 0.10545903444290161 -0.2839455306529999 -0.9776909947395325 0.20999786257743835 -0.0 0.08772853016853333 0.6757197380065918 0 1.0 0 0.0 0 0.0 0 0.0 0.2623565196990967 0.09793812036514282 0.21605446934700012 -0.9904171824455261 0.13800470530986786 -0.0 0.39975273609161377 0.5309807062149048 0 1.0 0 0.0 0 0.0 0 0.0 0.26368212699890137 0.10545903444290161 0.21605446934700012 -0.9776909947395325 0.20999786257743835 -0.0 0.4009059965610504 0.5381927490234375 0 1.0 0 0.0 0 0.0 0 0.0 1.5785949230194092 -0.01426270604133606 -0.2839455306529999 0.8499709963798523 0.5268105268478394 -0.0 0.8968690633773804 0.5458383560180664 0 1.0 0 0.0 0 0.0 0 0.0 1.5749561786651611 -0.008879855275154114 0.21605446934700012 0.8056581020355225 0.5923642516136169 -0.0 0.5768167972564697 0.41242218017578125 0 1.0 0 0.0 0 0.0 0 0.0 1.5785949230194092 -0.01426270604133606 0.21605446934700012 0.8499709963798523 0.5268105268478394 -0.0 0.5789067149162292 0.4071614742279053 0 1.0 0 0.0 0 0.0 0 0.0 -0.35901927947998047 0.09293714165687561 -0.2839455306529999 -0.7774590253829956 -0.6289254426956177 -0.0 0.9579875469207764 0.7019557952880859 0 1.0 0 0.0 0 0.0 0 0.0 -0.35532689094543457 0.08799093961715698 0.21605446934700012 -0.82644122838974 -0.5630054473876953 -0.0 0.5092871785163879 0.5388861894607544 0 1.0 0 0.0 0 0.0 0 0.0 -0.35901927947998047 0.09293714165687561 0.21605446934700012 -0.7774590253829956 -0.6289254426956177 -0.0 0.5070947408676147 0.5444257855415344 0 1.0 0 0.0 0 0.0 0 0.0 0.47697997093200684 0.1052936315536499 -0.2839455306529999 -0.7525253891944885 -0.6585283875465393 -0.0 0.9474191069602966 0.6983301043510437 0 1.0 0 0.0 0 0.0 0 0.0 0.47908520698547363 0.1027323305606842 0.21605446934700012 -0.791589081287384 -0.6110110878944397 -0.0 0.519087016582489 0.5353895425796509 0 1.0 0 0.0 0 0.0 0 0.0 0.47697997093200684 0.1052936315536499 0.21605446934700012 -0.7525253891944885 -0.6585283875465393 -0.0 0.5178369283676147 0.5382643938064575 0 1.0 0 0.0 0 0.0 0 0.0 2.2658889293670654 0.2249472439289093 -0.2839455306529999 0.9553819298744202 0.2953581213951111 -0.0 0.8913447856903076 0.6436830163002014 0 1.0 0 0.0 0 0.0 0 0.0 2.262758493423462 0.23384609818458557 0.21605448424816132 0.9299905300140381 0.3675343990325928 -0.0 0.5685557723045349 0.5133090019226074 0 1.0 0 0.0 0 0.0 0 0.0 2.2658889293670654 0.2249472439289093 0.21605448424816132 0.9553819298744202 0.2953581213951111 -0.0 0.5705021023750305 0.5041624307632446 0 1.0 0 0.0 0 0.0 0 0.0 1.3240149021148682 -0.012601405382156372 -0.2839455306529999 -0.39289528131484985 -0.9195532202720642 -0.0 0.047177255153656006 0.5587553977966309 0 1.0 0 0.0 0 0.0 0 0.0 1.3335669040679932 -0.016442134976387024 0.21605446934700012 -0.3570665717124939 -0.9340494871139526 -0.0 0.42876115441322327 0.40061187744140625 0 1.0 0 0.0 0 0.0 0 0.0 1.3240149021148682 -0.012601405382156372 0.21605446934700012 -0.39289528131484985 -0.9195532202720642 -0.0 0.42351773381233215 0.4066343903541565 0 1.0 0 0.0 0 0.0 0 0.0 1.914123296737671 0.23349463939666748 -0.2839455306529999 -0.922727108001709 0.38541826605796814 -0.0 0.10352206230163574 0.646332859992981 0 1.0 0 0.0 0 0.0 0 0.0 1.9106242656707764 0.22422727942466736 0.21605448424816132 -0.9471724629402161 0.32068848609924316 -0.0 0.3810150623321533 0.5104093551635742 0 1.0 0 0.0 0 0.0 0 0.0 1.914123296737671 0.23349463939666748 0.21605448424816132 -0.922727108001709 0.38541826605796814 -0.0 0.38311290740966797 0.5189554691314697 0 1.0 0 0.0 0 0.0 0 0.0 -0.35532689094543457 0.08799093961715698 -0.2839455306529999 -0.82644122838974 -0.5630054473876953 -0.0 0.9556089639663696 0.6960643529891968 0 1.0 0 0.0 0 0.0 0 0.0 -0.3519556522369385 0.08255091309547424 0.21605446934700012 -0.8703573942184448 -0.4923551082611084 -0.0 0.5113084316253662 0.5327562093734741 0 1.0 0 0.0 0 0.0 0 0.0 -0.35532689094543457 0.08799093961715698 0.21605446934700012 -0.82644122838974 -0.5630054473876953 -0.0 0.5092871785163879 0.5388861894607544 0 1.0 0 0.0 0 0.0 0 0.0 0.3539600372314453 0.10253044962882996 -0.2839455306529999 0.9444563388824463 -0.32856225967407227 -0.0 0.035510897636413574 0.6954621076583862 0 1.0 0 0.0 0 0.0 0 0.0 0.3546605110168457 0.10428905487060547 0.21605446934700012 0.9117099642753601 -0.4108096659183502 -0.0 0.4463235139846802 0.5396226644515991 0 1.0 0 0.0 0 0.0 0 0.0 0.3539600372314453 0.10253044962882996 0.21605446934700012 0.9444563388824463 -0.32856225967407227 -0.0 0.44584715366363525 0.5377424955368042 0 1.0 0 0.0 0 0.0 0 0.0 2.1595494747161865 0.23228806257247925 -0.2839455306529999 -0.7530442476272583 -0.6579485535621643 -0.0 0.9537681341171265 0.6770002841949463 0 1.0 0 0.0 0 0.0 0 0.0 2.16257643699646 0.22858721017837524 0.21605448424816132 -0.7951902747154236 -0.6063417196273804 -0.0 0.5155841708183289 0.5115742087364197 0 1.0 0 0.0 0 0.0 0 0.0 2.1595494747161865 0.23228806257247925 0.21605448424816132 -0.7530442476272583 -0.6579485535621643 -0.0 0.5137469172477722 0.5159071683883667 0 1.0 0 0.0 0 0.0 0 0.0 1.581805944442749 -0.0199325829744339 -0.2839455306529999 0.8887600302696228 0.45832696557044983 -0.0 0.8958801031112671 0.5395151972770691 0 1.0 0 0.0 0 0.0 0 0.0 1.5785949230194092 -0.01426270604133606 0.21605446934700012 0.8499709963798523 0.5268105268478394 -0.0 0.5789067149162292 0.4071614742279053 0 1.0 0 0.0 0 0.0 0 0.0 1.581805944442749 -0.0199325829744339 0.21605446934700012 0.8887600302696228 0.45832696557044983 -0.0 0.5808056592941284 0.4016239047050476 0 1.0 0 0.0 0 0.0 0 0.0 0.47908520698547363 0.1027323305606842 -0.2839455306529999 -0.791589081287384 -0.6110110878944397 -0.0 0.9461212158203125 0.6951746940612793 0 1.0 0 0.0 0 0.0 0 0.0 0.48104214668273926 0.10002994537353516 0.21605446934700012 -0.8272347450256348 -0.5618152618408203 -0.0 0.5202569961547852 0.5323554277420044 0 1.0 0 0.0 0 0.0 0 0.0 0.47908520698547363 0.1027323305606842 0.21605446934700012 -0.791589081287384 -0.6110110878944397 -0.0 0.519087016582489 0.5353895425796509 0 1.0 0 0.0 0 0.0 0 0.0 -0.24274897575378418 0.07521361112594604 -0.2839455306529999 0.9700918793678284 0.24268318712711334 -0.0 0.8889200687408447 0.6544054746627808 0 1.0 0 0.0 0 0.0 0 0.0 -0.24614691734313965 0.08728915452957153 0.21605446934700012 0.9537034034729004 0.3006683588027954 -0.0 0.5668718218803406 0.5311582088470459 0 1.0 0 0.0 0 0.0 0 0.0 -0.24274897575378418 0.07521361112594604 0.21605446934700012 0.9700918793678284 0.24268318712711334 -0.0 0.5690667629241943 0.5190191268920898 0 1.0 0 0.0 0 0.0 0 0.0 1.3335669040679932 -0.016442134976387024 -0.2839455306529999 -0.3570665717124939 -0.9340494871139526 -0.0 0.04161494970321655 0.554681658744812 0 1.0 0 0.0 0 0.0 0 0.0 1.344330072402954 -0.020346105098724365 0.21605446934700012 -0.32773828506469727 -0.9447309970855713 -0.0 0.4349140524864197 0.3943028450012207 0 1.0 0 0.0 0 0.0 0 0.0 1.3335669040679932 -0.016442134976387024 0.21605446934700012 -0.3570665717124939 -0.9340494871139526 -0.0 0.42876115441322327 0.40061187744140625 0 1.0 0 0.0 0 0.0 0 0.0 -0.3519556522369385 0.08255091309547424 -0.2839455306529999 -0.8703573942184448 -0.4923551082611084 -0.0 0.953519344329834 0.689590573310852 0 1.0 0 0.0 0 0.0 0 0.0 -0.3489053249359131 0.07661712169647217 0.21605446934700012 -0.9055147171020508 -0.42426830530166626 -0.0 0.513160228729248 0.5260202884674072 0 1.0 0 0.0 0 0.0 0 0.0 -0.3519556522369385 0.08255091309547424 0.21605446934700012 -0.8703573942184448 -0.4923551082611084 -0.0 0.5113084316253662 0.5327562093734741 0 1.0 0 0.0 0 0.0 0 0.0 2.0163967609405518 0.22638723254203796 -0.2839455306529999 0.7848750352859497 -0.6196172833442688 -0.0 0.051993101835250854 0.6645351648330688 0 1.0 0 0.0 0 0.0 0 0.0 2.020052671432495 0.23072659969329834 0.21605448424816132 0.7431256771087646 -0.669148862361908 -0.0 0.43162181973457336 0.5168639421463013 0 1.0 0 0.0 0 0.0 0 0.0 2.0163967609405518 0.22638723254203796 0.21605448424816132 0.7848750352859497 -0.6196172833442688 -0.0 0.4293980002403259 0.5121585726737976 0 1.0 0 0.0 0 0.0 0 0.0 0.35341525077819824 0.10070860385894775 -0.2839455306529999 0.9696340560913086 -0.24454481899738312 -0.0 0.03580203652381897 0.6934133172035217 0 1.0 0 0.0 0 0.0 0 0.0 0.3539600372314453 0.10253044962882996 0.21605446934700012 0.9444563388824463 -0.32856225967407227 -0.0 0.44584715366363525 0.5377424955368042 0 1.0 0 0.0 0 0.0 0 0.0 0.35341525077819824 0.10070860385894775 0.21605446934700012 0.9696340560913086 -0.24454481899738312 -0.0 0.44545358419418335 0.5357896089553833 0 1.0 0 0.0 0 0.0 0 0.0 2.16257643699646 0.22858721017837524 -0.2839455306529999 -0.7951902747154236 -0.6063417196273804 -0.0 0.9518887996673584 0.6723135113716125 0 1.0 0 0.0 0 0.0 0 0.0 2.1652848720550537 0.22477203607559204 0.21605448424816132 -0.8354136943817139 -0.5495772957801819 -0.0 0.5172411203384399 0.5071002244949341 0 1.0 0 0.0 0 0.0 0 0.0 2.16257643699646 0.22858721017837524 0.21605448424816132 -0.7951902747154236 -0.6063417196273804 -0.0 0.5155841708183289 0.5115742087364197 0 1.0 0 0.0 0 0.0 0 0.0 -0.3489053249359131 0.07661712169647217 -0.2839455306529999 -0.9055147171020508 -0.42426830530166626 -0.0 0.9517133235931396 0.6825268268585205 0 1.0 0 0.0 0 0.0 0 0.0 -0.3461761474609375 0.07018956542015076 0.21605446934700012 -0.9329813718795776 -0.35990479588508606 -0.0 0.5148437023162842 0.5186618566513062 0 1.0 0 0.0 0 0.0 0 0.0 -0.3489053249359131 0.07661712169647217 0.21605446934700012 -0.9055147171020508 -0.42426830530166626 -0.0 0.513160228729248 0.5260202884674072 0 1.0 0 0.0 0 0.0 0 0.0 1.5845882892608643 -0.025889486074447632 -0.2839455306529999 0.921506404876709 0.3882870078086853 -0.0 0.8951258659362793 0.5330184698104858 0 1.0 0 0.0 0 0.0 0 0.0 1.581805944442749 -0.0199325829744339 0.21605446934700012 0.8887600302696228 0.45832696557044983 -0.0 0.5808056592941284 0.4016239047050476 0 1.0 0 0.0 0 0.0 0 0.0 1.5845882892608643 -0.025889486074447632 0.21605446934700012 0.921506404876709 0.3882870078086853 -0.0 0.5825195908546448 0.3958056569099426 0 1.0 0 0.0 0 0.0 0 0.0 1.344330072402954 -0.020346105098724365 -0.2839455306529999 -0.32773828506469727 -0.9447309970855713 -0.0 0.03524675965309143 0.5504133701324463 0 1.0 0 0.0 0 0.0 0 0.0 1.3563048839569092 -0.024313315749168396 0.21605446934700012 -0.3034150302410126 -0.9528489112854004 -0.0 0.44204047322273254 0.38775986433029175 0 1.0 0 0.0 0 0.0 0 0.0 1.344330072402954 -0.020346105098724365 0.21605446934700012 -0.32773828506469727 -0.9447309970855713 -0.0 0.4349140524864197 0.3943028450012207 0 1.0 0 0.0 0 0.0 0 0.0 0.3530261516571045 0.09882351756095886 -0.2839455306529999 0.9869990944862366 -0.16067995131015778 -0.0 0.03598567843437195 0.6913160681724548 0 1.0 0 0.0 0 0.0 0 0.0 0.35341525077819824 0.10070860385894775 0.21605446934700012 0.9696340560913086 -0.24454481899738312 -0.0 0.44545358419418335 0.5357896089553833 0 1.0 0 0.0 0 0.0 0 0.0 0.3530261516571045 0.09882351756095886 0.21605446934700012 0.9869990944862366 -0.16067995131015778 -0.0 0.44514283537864685 0.5337626934051514 0 1.0 0 0.0 0 0.0 0 0.0 0.48104214668273926 0.10002994537353516 -0.2839455306529999 -0.8272347450256348 -0.5618152618408203 -0.0 0.9449462890625 0.6918731927871704 0 1.0 0 0.0 0 0.0 0 0.0 0.4828505516052246 0.09718650579452515 0.21605446934700012 -0.8592181205749512 -0.5115817785263062 -0.0 0.5213472843170166 0.5291599035263062 0 1.0 0 0.0 0 0.0 0 0.0 0.48104214668273926 0.10002994537353516 0.21605446934700012 -0.8272347450256348 -0.5618152618408203 -0.0 0.5202569961547852 0.5323554277420044 0 1.0 0 0.0 0 0.0 0 0.0 2.0129597187042236 0.22173652052879333 -0.2839455306529999 0.8219855427742004 -0.5694754123687744 -0.0 0.05379372835159302 0.6587395071983337 0 1.0 0 0.0 0 0.0 0 0.0 2.0163967609405518 0.22638723254203796 0.21605448424816132 0.7848750352859497 -0.6196172833442688 -0.0 0.4293980002403259 0.5121585726737976 0 1.0 0 0.0 0 0.0 0 0.0 2.0129597187042236 0.22173652052879333 0.21605448424816132 0.8219855427742004 -0.5694754123687744 -0.0 0.4272748827934265 0.5071110725402832 0 1.0 0 0.0 0 0.0 0 0.0 -0.23996877670288086 0.06254212558269501 -0.2839455306529999 0.982207715511322 0.18762779235839844 -0.0 0.88877272605896 0.6409586668014526 0 1.0 0 0.0 0 0.0 0 0.0 -0.24274897575378418 0.07521361112594604 0.21605446934700012 0.9700918793678284 0.24268318712711334 -0.0 0.5690667629241943 0.5190191268920898 0 1.0 0 0.0 0 0.0 0 0.0 -0.23996877670288086 0.06254212558269501 0.21605446934700012 0.982207715511322 0.18762779235839844 -0.0 0.5710310339927673 0.506155252456665 0 1.0 0 0.0 0 0.0 0 0.0 1.3563048839569092 -0.024313315749168396 -0.2839455306529999 -0.3034150302410126 -0.9528489112854004 -0.0 0.028043359518051147 0.545917272567749 0 1.0 0 0.0 0 0.0 0 0.0 1.3694908618927002 -0.028343766927719116 0.21605446934700012 -0.28290659189224243 -0.9591357111930847 -0.0 0.4501991868019104 0.38106727600097656 0 1.0 0 0.0 0 0.0 0 0.0 1.3563048839569092 -0.024313315749168396 0.21605446934700012 -0.3034150302410126 -0.9528489112854004 -0.0 0.44204047322273254 0.38775986433029175 0 1.0 0 0.0 0 0.0 0 0.0 2.2683236598968506 0.2158464789390564 -0.2839455306529999 0.9751884341239929 0.2212591916322708 -0.0 0.8910309076309204 0.6337556838989258 0 1.0 0 0.0 0 0.0 0 0.0 2.2658889293670654 0.2249472439289093 0.21605448424816132 0.9553819298744202 0.2953581213951111 -0.0 0.5705021023750305 0.5041624307632446 0 1.0 0 0.0 0 0.0 0 0.0 2.2683236598968506 0.2158464789390564 0.21605448424816132 0.9751884341239929 0.2212591916322708 -0.0 0.5721495151519775 0.4947805404663086 0 1.0 0 0.0 0 0.0 0 0.0 -0.4925398826599121 0.06576862931251526 -0.2839455306529999 0.9443647861480713 -0.32883694767951965 -0.0 0.05040016770362854 0.6650172472000122 0 1.0 0 0.0 0 0.0 0 0.0 -0.4900953769683838 0.07213538885116577 0.21605446934700012 0.9208349585533142 -0.3899044692516327 -0.0 0.430381178855896 0.5236064195632935 0 1.0 0 0.0 0 0.0 0 0.0 -0.4925398826599121 0.06576862931251526 0.21605446934700012 0.9443647861480713 -0.32883694767951965 -0.0 0.42868953943252563 0.5167142152786255 0 1.0 0 0.0 0 0.0 0 0.0 0.35279273986816406 0.09687519073486328 -0.2839455306529999 0.9968565702438354 -0.0788903459906578 -0.0 0.036062777042388916 0.6891690492630005 0 1.0 0 0.0 0 0.0 0 0.0 0.3530261516571045 0.09882351756095886 0.21605446934700012 0.9869990944862366 -0.16067995131015778 -0.0 0.44514283537864685 0.5337626934051514 0 1.0 0 0.0 0 0.0 0 0.0 0.35279273986816406 0.09687519073486328 0.21605446934700012 0.9968565702438354 -0.0788903459906578 -0.0 0.4449150860309601 0.5316601991653442 0 1.0 0 0.0 0 0.0 0 0.0 2.1652848720550537 0.22477203607559204 -0.2839455306529999 -0.8354136943817139 -0.5495772957801819 -0.0 0.95025634765625 0.6675083637237549 0 1.0 0 0.0 0 0.0 0 0.0 2.1676747798919678 0.22084254026412964 0.21605448424816132 -0.8727683424949646 -0.48808252811431885 -0.0 0.5187181234359741 0.5024833083152771 0 1.0 0 0.0 0 0.0 0 0.0 2.1652848720550537 0.22477203607559204 0.21605448424816132 -0.8354136943817139 -0.5495772957801819 -0.0 0.5172411203384399 0.5071002244949341 0 1.0 0 0.0 0 0.0 0 0.0 -0.3461761474609375 0.07018956542015076 -0.2839455306529999 -0.9329813718795776 -0.35990479588508606 -0.0 0.9501850008964539 0.6748630404472351 0 1.0 0 0.0 0 0.0 0 0.0 -0.3437681198120117 0.06326821446418762 0.21605446934700012 -0.9539475440979004 -0.299874871969223 -0.0 0.516359806060791 0.510663628578186 0 1.0 0 0.0 0 0.0 0 0.0 -0.3461761474609375 0.07018956542015076 0.21605446934700012 -0.9329813718795776 -0.35990479588508606 -0.0 0.5148437023162842 0.5186618566513062 0 1.0 0 0.0 0 0.0 0 0.0 1.5869429111480713 -0.032133400440216064 -0.2839455306529999 0.9480269551277161 0.3180944323539734 -0.0 0.8945986032485962 0.5263450145721436 0 1.0 0 0.0 0 0.0 0 0.0 1.5845882892608643 -0.025889486074447632 0.21605446934700012 0.921506404876709 0.3882870078086853 -0.0 0.5825195908546448 0.3958056569099426 0 1.0 0 0.0 0 0.0 0 0.0 1.5869429111480713 -0.032133400440216064 0.21605446934700012 0.9480269551277161 0.3180944323539734 -0.0 0.5840545892715454 0.38970285654067993 0 1.0 0 0.0 0 0.0 0 0.0 0.4828505516052246 0.09718650579452515 -0.2839455306529999 -0.8592181205749512 -0.5115817785263062 -0.0 0.943892776966095 0.6884253621101379 0 1.0 0 0.0 0 0.0 0 0.0 0.4845106601715088 0.09420198202133179 0.21605446934700012 -0.887417197227478 -0.460921049118042 -0.0 0.5223584175109863 0.5258004069328308 0 1.0 0 0.0 0 0.0 0 0.0 0.4828505516052246 0.09718650579452515 0.21605446934700012 -0.8592181205749512 -0.5115817785263062 -0.0 0.5213472843170166 0.5291599035263062 0 1.0 0 0.0 0 0.0 0 0.0 1.3694908618927002 -0.028343766927719116 -0.2839455306529999 -0.28290659189224243 -0.9591357111930847 -0.0 0.01998576521873474 0.541165828704834 0 1.0 0 0.0 0 0.0 0 0.0 1.3838880062103271 -0.032437458634376526 0.21605446934700012 -0.26541948318481445 -0.964110255241394 -0.0 0.4594356119632721 0.37434643507003784 0 1.0 0 0.0 0 0.0 0 0.0 1.3694908618927002 -0.028343766927719116 0.21605446934700012 -0.28290659189224243 -0.9591357111930847 -0.0 0.4501991868019104 0.38106727600097656 0 1.0 0 0.0 0 0.0 0 0.0 1.9106242656707764 0.22422727942466736 -0.2839455306529999 -0.9471724629402161 0.32068848609924316 -0.0 0.10414043068885803 0.6368800401687622 0 1.0 0 0.0 0 0.0 0 0.0 1.9077603816986084 0.2146972119808197 0.21605448424816132 -0.9669179320335388 0.2550126612186432 -0.0 0.3791377544403076 0.5016137361526489 0 1.0 0 0.0 0 0.0 0 0.0 1.9106242656707764 0.22422727942466736 0.21605448424816132 -0.9471724629402161 0.32068848609924316 -0.0 0.3810150623321533 0.5104093551635742 0 1.0 0 0.0 0 0.0 0 0.0 0.4845106601715088 0.09420198202133179 -0.2839455306529999 -0.887417197227478 -0.460921049118042 -0.0 0.9429585933685303 0.6848305463790894 0 1.0 0 0.0 0 0.0 0 0.0 0.4860224723815918 0.09107637405395508 0.21605446934700012 -0.9118625521659851 -0.41041290760040283 -0.0 0.5232906341552734 0.5222742557525635 0 1.0 0 0.0 0 0.0 0 0.0 0.4845106601715088 0.09420198202133179 0.21605446934700012 -0.887417197227478 -0.460921049118042 -0.0 0.5223584175109863 0.5258004069328308 0 1.0 0 0.0 0 0.0 0 0.0 -0.4946584701538086 0.05900539457798004 -0.2839455306529999 0.9625537991523743 -0.2710043787956238 -0.0 0.05132386088371277 0.657180666923523 0 1.0 0 0.0 0 0.0 0 0.0 -0.4925398826599121 0.06576862931251526 0.21605446934700012 0.9443647861480713 -0.32883694767951965 -0.0 0.42868953943252563 0.5167142152786255 0 1.0 0 0.0 0 0.0 0 0.0 -0.4946584701538086 0.05900539457798004 0.21605446934700012 0.9625537991523743 -0.2710043787956238 -0.0 0.42713963985443115 0.509336531162262 0 1.0 0 0.0 0 0.0 0 0.0 -0.3437681198120117 0.06326821446418762 -0.2839455306529999 -0.9539475440979004 -0.299874871969223 -0.0 0.9489279985427856 0.6665880680084229 0 1.0 0 0.0 0 0.0 0 0.0 -0.34168124198913574 0.05585309863090515 0.21605446934700012 -0.9696340560913086 -0.24448378384113312 -0.0 0.5177088975906372 0.5020086765289307 0 1.0 0 0.0 0 0.0 0 0.0 -0.3437681198120117 0.06326821446418762 0.21605446934700012 -0.9539475440979004 -0.299874871969223 -0.0 0.516359806060791 0.510663628578186 0 1.0 0 0.0 0 0.0 0 0.0 1.588869333267212 -0.03866434097290039 -0.2839455306529999 0.9685049057006836 0.24893948435783386 -0.0 0.8942915797233582 0.5194913744926453 0 1.0 0 0.0 0 0.0 0 0.0 1.5869429111480713 -0.032133400440216064 0.21605446934700012 0.9480269551277161 0.3180944323539734 -0.0 0.5840545892715454 0.38970285654067993 0 1.0 0 0.0 0 0.0 0 0.0 1.588869333267212 -0.03866434097290039 0.21605446934700012 0.9685049057006836 0.24893948435783386 -0.0 0.5854150056838989 0.38331174850463867 0 1.0 0 0.0 0 0.0 0 0.0 0.4860224723815918 0.09107637405395508 -0.2839455306529999 -0.9118625521659851 -0.41041290760040283 -0.0 0.9421420097351074 0.6810873746871948 0 1.0 0 0.0 0 0.0 0 0.0 0.48738574981689453 0.08780968189239502 0.21605446934700012 -0.9327067136764526 -0.36057618260383606 -0.0 0.5241441130638123 0.5185786485671997 0 1.0 0 0.0 0 0.0 0 0.0 0.4860224723815918 0.09107637405395508 0.21605446934700012 -0.9118625521659851 -0.41041290760040283 -0.0 0.5232906341552734 0.5222742557525635 0 1.0 0 0.0 0 0.0 0 0.0 2.0097415447235107 0.21677446365356445 -0.2839455306529999 0.8544571995735168 -0.5194555521011353 -0.0 0.0554124116897583 0.652630627155304 0 1.0 0 0.0 0 0.0 0 0.0 2.0129597187042236 0.22173652052879333 0.21605448424816132 0.8219855427742004 -0.5694754123687744 -0.0 0.4272748827934265 0.5071110725402832 0 1.0 0 0.0 0 0.0 0 0.0 2.0097415447235107 0.21677446365356445 0.21605448424816132 0.8544571995735168 -0.5194555521011353 -0.0 0.4252496063709259 0.5017184019088745 0 1.0 0 0.0 0 0.0 0 0.0 1.3838880062103271 -0.032437458634376526 -0.2839455306529999 -0.26541948318481445 -0.964110255241394 -0.0 0.011071175336837769 0.5361419320106506 0 1.0 0 0.0 0 0.0 0 0.0 1.3994967937469482 -0.036594390869140625 0.21605446934700012 -0.25034332275390625 -0.9681386947631836 -0.0 0.46977055072784424 0.3677605390548706 0 1.0 0 0.0 0 0.0 0 0.0 1.3838880062103271 -0.032437458634376526 0.21605446934700012 -0.26541948318481445 -0.964110255241394 -0.0 0.4594356119632721 0.37434643507003784 0 1.0 0 0.0 0 0.0 0 0.0 2.1676747798919678 0.22084254026412964 -0.2839455306529999 -0.8727683424949646 -0.48808252811431885 -0.0 0.9488654136657715 0.6625887155532837 0 1.0 0 0.0 0 0.0 0 0.0 2.169746160507202 0.21679872274398804 0.21605448424816132 -0.9063692092895508 -0.42240670323371887 -0.0 0.5200154185295105 0.4977208375930786 0 1.0 0 0.0 0 0.0 0 0.0 2.1676747798919678 0.22084254026412964 0.21605448424816132 -0.8727683424949646 -0.48808252811431885 -0.0 0.5187181234359741 0.5024833083152771 0 1.0 0 0.0 0 0.0 0 0.0 0.48738574981689453 0.08780968189239502 -0.2839455306529999 -0.9327067136764526 -0.36057618260383606 -0.0 0.9414411783218384 0.6771945357322693 0 1.0 0 0.0 0 0.0 0 0.0 0.4886007308959961 0.08440190553665161 0.21605446934700012 -0.9501022100448608 -0.3119296729564667 -0.0 0.5249190926551819 0.5147103667259216 0 1.0 0 0.0 0 0.0 0 0.0 0.48738574981689453 0.08780968189239502 0.21605446934700012 -0.9327067136764526 -0.36057618260383606 -0.0 0.5241441130638123 0.5185786485671997 0 1.0 0 0.0 0 0.0 0 0.0 -0.2378063201904297 0.049274712800979614 -0.2839455306529999 0.9907223582267761 0.1358378827571869 -0.0 0.8889747858047485 0.6269134283065796 0 1.0 0 0.0 0 0.0 0 0.0 -0.23996877670288086 0.06254212558269501 0.21605446934700012 0.982207715511322 0.18762779235839844 -0.0 0.5710310339927673 0.506155252456665 0 1.0 0 0.0 0 0.0 0 0.0 -0.2378063201904297 0.049274712800979614 0.21605446934700012 0.9907223582267761 0.1358378827571869 -0.0 0.5727694630622864 0.4925420880317688 0 1.0 0 0.0 0 0.0 0 0.0 1.3994967937469482 -0.036594390869140625 -0.2839455306529999 -0.25034332275390625 -0.9681386947631836 -0.0 1.0013197660446167 0.5308443307876587 0 1.0 0 0.0 0 0.0 0 0.0 1.4163167476654053 -0.040814563632011414 0.21605446934700012 -0.2372203767299652 -0.9714346528053284 -0.0 1.4811851978302002 0.3615119457244873 0 1.0 0 0.0 0 0.0 0 0.0 1.3994967937469482 -0.036594390869140625 0.21605446934700012 -0.25034332275390625 -0.9681386947631836 -0.0 1.4697705507278442 0.3677605390548706 0 1.0 0 0.0 0 0.0 0 0.0 2.169746160507202 0.21679872274398804 -0.2839455306529999 -0.9063692092895508 -0.42240670323371887 -0.0 0.9477107524871826 0.6575570106506348 0 1.0 0 0.0 0 0.0 0 0.0 2.1714985370635986 0.21264058351516724 0.21605448424816132 -0.9354228377342224 -0.35349589586257935 -0.0 0.5211325287818909 0.4928099513053894 0 1.0 0 0.0 0 0.0 0 0.0 2.169746160507202 0.21679872274398804 0.21605448424816132 -0.9063692092895508 -0.42240670323371887 -0.0 0.5200154185295105 0.4977208375930786 0 1.0 0 0.0 0 0.0 0 0.0 0.4886007308959961 0.08440190553665161 -0.2839455306529999 -0.9501022100448608 -0.3119296729564667 -0.0 0.9408544301986694 0.6731500029563904 0 1.0 0 0.0 0 0.0 0 0.0 0.4896674156188965 0.08085307478904724 0.21605446934700012 -0.9576708078384399 -0.28785058856010437 -0.0 0.5256157517433167 0.5106663703918457 0 1.0 0 0.0 0 0.0 0 0.0 0.4886007308959961 0.08440190553665161 0.21605446934700012 -0.9501022100448608 -0.3119296729564667 -0.0 0.5249190926551819 0.5147103667259216 0 1.0 0 0.0 0 0.0 0 0.0 -0.49645113945007324 0.05184568464756012 -0.2839455306529999 0.9761955738067627 -0.21677297353744507 -0.0 0.052017420530319214 0.6489062309265137 0 1.0 0 0.0 0 0.0 0 0.0 -0.4946584701538086 0.05900539457798004 0.21605446934700012 0.9625537991523743 -0.2710043787956238 -0.0 0.42713963985443115 0.509336531162262 0 1.0 0 0.0 0 0.0 0 0.0 -0.49645113945007324 0.05184568464756012 0.21605446934700012 0.9761955738067627 -0.21677297353744507 -0.0 0.4257296025753021 0.5014607906341553 0 1.0 0 0.0 0 0.0 0 0.0 0.4896674156188965 0.08085307478904724 -0.2839455306529999 0.1817987561225891 -0.983306348323822 -0.0 0.9403797388076782 0.6689515113830566 0 1.0 0 0.0 0 0.0 0 0.0 0.5824871063232422 0.0980159342288971 0.21605446934700012 0.1817987561225891 -0.983306348323822 -0.0 0.5723457336425781 0.5243042707443237 0 1.0 0 0.0 0 0.0 0 0.0 0.4896674156188965 0.08085307478904724 0.21605446934700012 0.1817987561225891 -0.983306348323822 -0.0 0.5256157517433167 0.5106663703918457 0 1.0 0 0.0 0 0.0 0 0.0 -0.34168124198913574 0.05585309863090515 -0.2839455306529999 -0.9696340560913086 -0.24448378384113312 -0.0 0.9479355216026306 0.6576895713806152 0 1.0 0 0.0 0 0.0 0 0.0 -0.33991527557373047 0.04794420301914215 0.21605446934700012 -0.9810479879379272 -0.19373150169849396 -0.0 0.5188910961151123 0.49268102645874023 0 1.0 0 0.0 0 0.0 0 0.0 -0.34168124198913574 0.05585309863090515 0.21605446934700012 -0.9696340560913086 -0.24448378384113312 -0.0 0.5177088975906372 0.5020086765289307 0 1.0 0 0.0 0 0.0 0 0.0 1.5903680324554443 -0.04548230767250061 -0.2839455306529999 0.983306348323822 0.1818903088569641 -0.0 0.8941991329193115 0.5124543905258179 0 1.0 0 0.0 0 0.0 0 0.0 1.588869333267212 -0.03866434097290039 0.21605446934700012 0.9685049057006836 0.24893948435783386 -0.0 0.5854150056838989 0.38331174850463867 0 1.0 0 0.0 0 0.0 0 0.0 1.5903680324554443 -0.04548230767250061 0.21605446934700012 0.983306348323822 0.1818903088569641 -0.0 0.5866047143936157 0.37662893533706665 0 1.0 0 0.0 0 0.0 0 0.0 0.2623565196990967 0.09793812036514282 -0.2839455306529999 -0.9904171824455261 0.13800470530986786 -0.0 0.0877656638622284 0.6681522727012634 0 1.0 0 0.0 0 0.0 0 0.0 0.26156115531921387 0.09020313620567322 0.21605446934700012 -0.9976806044578552 0.06784264743328094 -0.0 0.3988074064254761 0.5234965085983276 0 1.0 0 0.0 0 0.0 0 0.0 0.2623565196990967 0.09793812036514282 0.21605446934700012 -0.9904171824455261 0.13800470530986786 -0.0 0.39975273609161377 0.5309807062149048 0 1.0 0 0.0 0 0.0 0 0.0 2.006742238998413 0.21150106191635132 -0.2839455306529999 0.8825342655181885 -0.4701986610889435 -0.0 0.05685460567474365 0.6462084054946899 0 1.0 0 0.0 0 0.0 0 0.0 2.0097415447235107 0.21677446365356445 0.21605448424816132 0.8544571995735168 -0.5194555521011353 -0.0 0.4252496063709259 0.5017184019088745 0 1.0 0 0.0 0 0.0 0 0.0 2.006742238998413 0.21150106191635132 0.21605448424816132 0.8825342655181885 -0.4701986610889435 -0.0 0.4233194589614868 0.49597716331481934 0 1.0 0 0.0 0 0.0 0 0.0 1.4163167476654053 -0.040814563632011414 -0.2839455306529999 -0.2372203767299652 -0.9714346528053284 -0.0 0.9907829761505127 0.5252926349639893 0 1.0 0 0.0 0 0.0 0 0.0 1.4343478679656982 -0.045097991824150085 0.21605446934700012 -0.22571489214897156 -0.9741813540458679 -0.0 0.4936075210571289 0.35583263635635376 0 1.0 0 0.0 0 0.0 0 0.0 1.4163167476654053 -0.040814563632011414 0.21605446934700012 -0.2372203767299652 -0.9714346528053284 -0.0 1.4811851978302002 0.3615119457244873 0 1.0 0 0.0 0 0.0 0 0.0 2.2700626850128174 0.20654383301734924 -0.2839455306529999 0.9891964197158813 0.14651936292648315 -0.0 0.8910720348358154 0.6237470507621765 0 1.0 0 0.0 0 0.0 0 0.0 2.2683236598968506 0.2158464789390564 0.21605448424816132 0.9751884341239929 0.2212591916322708 -0.0 0.5721495151519775 0.4947805404663086 0 1.0 0 0.0 0 0.0 0 0.0 2.2700626850128174 0.20654383301734924 0.21605448424816132 0.9891964197158813 0.14651936292648315 -0.0 0.5735015273094177 0.48514336347579956 0 1.0 0 0.0 0 0.0 0 0.0 -0.49791789054870605 0.04428949952125549 -0.2839455306529999 0.9860530495643616 -0.1663258820772171 -0.0 0.052487730979919434 0.6401838064193726 0 1.0 0 0.0 0 0.0 0 0.0 -0.49645113945007324 0.05184568464756012 0.21605446934700012 0.9761955738067627 -0.21677297353744507 -0.0 0.4257296025753021 0.5014607906341553 0 1.0 0 0.0 0 0.0 0 0.0 -0.49791789054870605 0.04428949952125549 0.21605446934700012 0.9860530495643616 -0.1663258820772171 -0.0 0.424457848072052 0.4930746555328369 0 1.0 0 0.0 0 0.0 0 0.0 1.4343478679656982 -0.045097991824150085 -0.2839455306529999 -0.22571489214897156 -0.9741813540458679 -0.0 0.9795480966567993 0.5195319652557373 0 1.0 0 0.0 0 0.0 0 0.0 1.4535901546478271 -0.04944466054439545 0.21605446934700012 -0.22766807675361633 -0.9737235903739929 -0.0 0.5069013833999634 0.3509639501571655 0 1.0 0 0.0 0 0.0 0 0.0 1.4343478679656982 -0.045097991824150085 0.21605446934700012 -0.22571489214897156 -0.9741813540458679 -0.0 0.4936075210571289 0.35583263635635376 0 1.0 0 0.0 0 0.0 0 0.0 0.35271477699279785 0.09486359357833862 -0.2839455306529999 1.0 0.00030518509447574615 -0.0 0.036034226417541504 0.6869708895683289 0 1.0 0 0.0 0 0.0 0 0.0 0.35279273986816406 0.09687519073486328 0.21605446934700012 0.9968565702438354 -0.0788903459906578 -0.0 0.4449150860309601 0.5316601991653442 0 1.0 0 0.0 0 0.0 0 0.0 0.35271477699279785 0.09486359357833862 0.21605446934700012 0.999969482421875 0.00030518509447574615 -0.0 0.4447703957557678 0.5294804573059082 0 1.0 0 0.0 0 0.0 0 0.0 1.9077603816986084 0.2146972119808197 -0.2839455306529999 -0.9669179320335388 0.2550126612186432 -0.0 0.10447537899017334 0.6273366212844849 0 1.0 0 0.0 0 0.0 0 0.0 1.9055311679840088 0.2049044370651245 0.21605448424816132 -0.981872022151947 0.1893673539161682 -0.0 0.37747377157211304 0.4925498366355896 0 1.0 0 0.0 0 0.0 0 0.0 1.9077603816986084 0.2146972119808197 0.21605448424816132 -0.9669179320335388 0.2550126612186432 -0.0 0.3791377544403076 0.5016137361526489 0 1.0 0 0.0 0 0.0 0 0.0 -0.23626184463500977 0.03541135787963867 -0.2839455306529999 0.9961546659469604 0.0873439759016037 -0.0 0.8895126581192017 0.6122499108314514 0 1.0 0 0.0 0 0.0 0 0.0 -0.2378063201904297 0.049274712800979614 0.21605446934700012 0.9907223582267761 0.1358378827571869 -0.0 0.5727694630622864 0.4925420880317688 0 1.0 0 0.0 0 0.0 0 0.0 -0.23626184463500977 0.03541135787963867 0.21605446934700012 0.9961546659469604 0.0873439759016037 -0.0 0.5742851495742798 0.47815972566604614 0 1.0 0 0.0 0 0.0 0 0.0 0.3527829647064209 0.09313416481018066 -0.2839455306529999 0.9967955350875854 0.0799279734492302 -0.0 0.035920560359954834 0.6850960850715637 0 1.0 0 0.0 0 0.0 0 0.0 0.35271477699279785 0.09486359357833862 0.21605446934700012 0.999969482421875 0.00030518509447574615 -0.0 0.4447703957557678 0.5294804573059082 0 1.0 0 0.0 0 0.0 0 0.0 0.3527829647064209 0.09313416481018066 0.21605446934700012 0.9967955350875854 0.0799279734492302 -0.0 0.4447213411331177 0.5275986194610596 0 1.0 0 0.0 0 0.0 0 0.0 2.1714985370635986 0.21264058351516724 -0.2839455306529999 -0.9354228377342224 -0.35349589586257935 -0.0 0.9467873573303223 0.6524146795272827 0 1.0 0 0.0 0 0.0 0 0.0 2.1729323863983154 0.20836812257766724 0.21605448424816132 -0.9592577815055847 -0.28247931599617004 -0.0 0.5220695734024048 0.48774731159210205 0 1.0 0 0.0 0 0.0 0 0.0 2.1714985370635986 0.21264058351516724 0.21605448424816132 -0.9354228377342224 -0.35349589586257935 -0.0 0.5211325287818909 0.4928099513053894 0 1.0 0 0.0 0 0.0 0 0.0 -0.33991527557373047 0.04794420301914215 -0.2839455306529999 -0.9810479879379272 -0.19373150169849396 -0.0 0.9472004771232605 0.6481556296348572 0 1.0 0 0.0 0 0.0 0 0.0 -0.338470458984375 0.039541542530059814 0.21605446934700012 -0.9890438318252563 -0.14740440249443054 -0.0 0.5199055075645447 0.4826669692993164 0 1.0 0 0.0 0 0.0 0 0.0 -0.33991527557373047 0.04794420301914215 0.21605446934700012 -0.9810479879379272 -0.19373150169849396 -0.0 0.5188910961151123 0.49268102645874023 0 1.0 0 0.0 0 0.0 0 0.0 1.5914380550384521 -0.05258728563785553 -0.2839455306529999 0.9930112361907959 0.11780144274234772 -0.0 0.8943167924880981 0.5052310228347778 0 1.0 0 0.0 0 0.0 0 0.0 1.5903680324554443 -0.04548230767250061 0.21605446934700012 0.983306348323822 0.1818903088569641 -0.0 0.5866047143936157 0.37662893533706665 0 1.0 0 0.0 0 0.0 0 0.0 1.5914380550384521 -0.05258728563785553 0.21605446934700012 0.9930112361907959 0.11780144274234772 -0.0 0.5876259803771973 0.36965125799179077 0 1.0 0 0.0 0 0.0 0 0.0 1.4535901546478271 -0.04944466054439545 -0.2839455306529999 -0.22766807675361633 -0.9737235903739929 -0.0 0.9677410125732422 0.513634443283081 0 1.0 0 0.0 0 0.0 0 0.0 1.4577252864837646 -0.05044436454772949 0.21605446934700012 -0.24390393495559692 -0.9697867035865784 -0.0 0.5097460150718689 0.3499676585197449 0 1.0 0 0.0 0 0.0 0 0.0 1.4535901546478271 -0.04944466054439545 0.21605446934700012 -0.22766807675361633 -0.9737235903739929 -0.0 0.5069013833999634 0.3509639501571655 0 1.0 0 0.0 0 0.0 0 0.0 0.35298728942871094 0.09144851565361023 -0.2839455306529999 0.9868159890174866 0.16180913150310516 -0.0 0.035719335079193115 0.6832844018936157 0 1.0 0 0.0 0 0.0 0 0.0 0.3527829647064209 0.09313416481018066 0.21605446934700012 0.9967955350875854 0.0799279734492302 -0.0 0.4447213411331177 0.5275986194610596 0 1.0 0 0.0 0 0.0 0 0.0 0.35298728942871094 0.09144851565361023 0.21605446934700012 0.9868159890174866 0.16180913150310516 -0.0 0.44475072622299194 0.5257568359375 0 1.0 0 0.0 0 0.0 0 0.0 2.0039618015289307 0.20591631531715393 -0.2839455306529999 0.9064912796020508 -0.4221625328063965 -0.0 0.058125704526901245 0.6394720077514648 0 1.0 0 0.0 0 0.0 0 0.0 2.006742238998413 0.21150106191635132 0.21605448424816132 0.8825342655181885 -0.4701986610889435 -0.0 0.4233194589614868 0.49597716331481934 0 1.0 0 0.0 0 0.0 0 0.0 2.0039618015289307 0.20591631531715393 0.21605448424816132 0.9064912796020508 -0.4221625328063965 -0.0 0.42148181796073914 0.4898841977119446 0 1.0 0 0.0 0 0.0 0 0.0 -0.49905872344970703 0.03633683919906616 -0.2839455306529999 0.9927976131439209 -0.11957152187824249 -0.0 0.05274131894111633 0.6310035586357117 0 1.0 0 0.0 0 0.0 0 0.0 -0.49791789054870605 0.04428949952125549 0.21605446934700012 0.9860530495643616 -0.1663258820772171 -0.0 0.424457848072052 0.4930746555328369 0 1.0 0 0.0 0 0.0 0 0.0 -0.49905872344970703 0.03633683919906616 0.21605446934700012 0.9927976131439209 -0.11957152187824249 -0.0 0.4233233332633972 0.48416680097579956 0 1.0 0 0.0 0 0.0 0 0.0 1.4577252864837646 -0.05044436454772949 -0.2839455306529999 -0.24390393495559692 -0.9697867035865784 -0.0 0.9652423858642578 0.5122944116592407 0 1.0 0 0.0 0 0.0 0 0.0 1.4616072177886963 -0.05145867168903351 0.21605446934700012 -0.2627643644809723 -0.964842677116394 -0.0 0.512410044670105 0.34898412227630615 0 1.0 0 0.0 0 0.0 0 0.0 1.4577252864837646 -0.05044436454772949 0.21605446934700012 -0.24390393495559692 -0.9697867035865784 -0.0 0.5097460150718689 0.3499676585197449 0 1.0 0 0.0 0 0.0 0 0.0 0.35332775115966797 0.08980664610862732 -0.2839455306529999 0.9695730209350586 0.24469740688800812 -0.0 0.03543075919151306 0.6815356016159058 0 1.0 0 0.0 0 0.0 0 0.0 0.35298728942871094 0.09144851565361023 0.21605446934700012 0.9868159890174866 0.16180913150310516 -0.0 0.44475072622299194 0.5257568359375 0 1.0 0 0.0 0 0.0 0 0.0 0.35332775115966797 0.08980664610862732 0.21605446934700012 0.9695730209350586 0.24469740688800812 -0.0 0.44485893845558167 0.5239549279212952 0 1.0 0 0.0 0 0.0 0 0.0 2.1729323863983154 0.20836812257766724 -0.2839455306529999 -0.9592577815055847 -0.28247931599617004 -0.0 0.9460904598236084 0.6471614837646484 0 1.0 0 0.0 0 0.0 0 0.0 2.1740477085113525 0.20398133993148804 0.21605448424816132 -0.9775688648223877 -0.21048615872859955 -0.0 0.5228258371353149 0.4825291633605957 0 1.0 0 0.0 0 0.0 0 0.0 2.1729323863983154 0.20836812257766724 0.21605448424816132 -0.9592577815055847 -0.28247931599617004 -0.0 0.5220695734024048 0.48774731159210205 0 1.0 0 0.0 0 0.0 0 0.0 -0.338470458984375 0.039541542530059814 -0.2839455306529999 -0.9890438318252563 -0.14740440249443054 -0.0 0.9467159509658813 0.637975811958313 0 1.0 0 0.0 0 0.0 0 0.0 -0.33734679222106934 0.030645102262496948 0.21605446934700012 -0.9944151043891907 -0.10525833815336227 -0.0 0.5207509398460388 0.47195643186569214 0 1.0 0 0.0 0 0.0 0 0.0 -0.338470458984375 0.039541542530059814 0.21605446934700012 -0.9890438318252563 -0.14740440249443054 -0.0 0.5199055075645447 0.4826669692993164 0 1.0 0 0.0 0 0.0 0 0.0 0.26156115531921387 0.09020313620567322 -0.2839455306529999 -0.9976806044578552 0.06784264743328094 -0.0 0.08753547072410583 0.6604450941085815 0 1.0 0 0.0 0 0.0 0 0.0 0.26129603385925293 0.08225411176681519 0.21605446934700012 -0.999969482421875 -0.00079348124563694 -0.0 0.39806950092315674 0.5157207250595093 0 1.0 0 0.0 0 0.0 0 0.0 0.26156115531921387 0.09020313620567322 0.21605446934700012 -0.9976806044578552 0.06784264743328094 -0.0 0.3988074064254761 0.5234965085983276 0 1.0 0 0.0 0 0.0 0 0.0 1.4616072177886963 -0.05145867168903351 -0.2839455306529999 -0.2627643644809723 -0.964842677116394 -0.0 0.9629137516021729 0.5109500885009766 0 1.0 0 0.0 0 0.0 0 0.0 1.4652364253997803 -0.0524875670671463 0.21605446934700012 -0.2840357720851898 -0.9588000178337097 -0.0 0.5148946046829224 0.34800630807876587 0 1.0 0 0.0 0 0.0 0 0.0 1.4616072177886963 -0.05145867168903351 0.21605446934700012 -0.2627643644809723 -0.964842677116394 -0.0 0.512410044670105 0.34898412227630615 0 1.0 0 0.0 0 0.0 0 0.0 2.271106004714966 0.19703930616378784 -0.2839455306529999 0.9973449110984802 0.07248146086931229 -0.0 0.8914575576782227 0.6136360168457031 0 1.0 0 0.0 0 0.0 0 0.0 2.2700626850128174 0.20654383301734924 0.21605448424816132 0.9891964197158813 0.14651936292648315 -0.0 0.5735015273094177 0.48514336347579956 0 1.0 0 0.0 0 0.0 0 0.0 2.271106004714966 0.19703930616378784 0.21605448424816132 0.9973449110984802 0.07248146086931229 -0.0 0.5745598077774048 0.4752293825149536 0 1.0 0 0.0 0 0.0 0 0.0 -0.49987339973449707 0.027987703680992126 -0.2839455306529999 0.9970701932907104 -0.07647938281297684 -0.0 0.05278405547142029 0.6213566064834595 0 1.0 0 0.0 0 0.0 0 0.0 -0.49905872344970703 0.03633683919906616 0.21605446934700012 0.9927976131439209 -0.11957152187824249 -0.0 0.4233233332633972 0.48416680097579956 0 1.0 0 0.0 0 0.0 0 0.0 -0.49987339973449707 0.027987703680992126 0.21605446934700012 0.9970701932907104 -0.07647938281297684 -0.0 0.42232567071914673 0.4747272729873657 0 1.0 0 0.0 0 0.0 0 0.0 1.4652364253997803 -0.0524875670671463 -0.2839455306529999 -0.2840357720851898 -0.9588000178337097 -0.0 0.9607535004615784 0.5096025466918945 0 1.0 0 0.0 0 0.0 0 0.0 1.4686124324798584 -0.05353105068206787 0.21605446934700012 -0.3080843389034271 -0.9513229727745056 -0.0 0.5172003507614136 0.3470277190208435 0 1.0 0 0.0 0 0.0 0 0.0 1.4652364253997803 -0.0524875670671463 0.21605446934700012 -0.2840357720851898 -0.9588000178337097 -0.0 0.5148946046829224 0.34800630807876587 0 1.0 0 0.0 0 0.0 0 0.0 0.3538045883178711 0.08820855617523193 -0.2839455306529999 0.9451277256011963 0.3266701102256775 -0.0 0.035054922103881836 0.6798495054244995 0 1.0 0 0.0 0 0.0 0 0.0 0.35332775115966797 0.08980664610862732 0.21605446934700012 0.9695730209350586 0.24469740688800812 -0.0 0.44485893845558167 0.5239549279212952 0 1.0 0 0.0 0 0.0 0 0.0 0.3538045883178711 0.08820855617523193 0.21605446934700012 0.9451277256011963 0.3266701102256775 -0.0 0.445046603679657 0.5221929550170898 0 1.0 0 0.0 0 0.0 0 0.0 2.0014007091522217 0.2000202238559723 -0.2839455306529999 0.9266639947891235 -0.37580493092536926 -0.0 0.05923062562942505 0.6324205994606018 0 1.0 0 0.0 0 0.0 0 0.0 2.0039618015289307 0.20591631531715393 0.21605448424816132 0.9064912796020508 -0.4221625328063965 -0.0 0.42148181796073914 0.4898841977119446 0 1.0 0 0.0 0 0.0 0 0.0 2.0014007091522217 0.2000202238559723 0.21605448424816132 0.9266639947891235 -0.37580493092536926 -0.0 0.41973450779914856 0.4834361672401428 0 1.0 0 0.0 0 0.0 0 0.0 -0.235335111618042 0.020952075719833374 -0.2839455306529999 0.99908447265625 0.04223761707544327 -0.0 0.8903750777244568 0.5969552993774414 0 1.0 0 0.0 0 0.0 0 0.0 -0.23626184463500977 0.03541135787963867 0.21605446934700012 0.9961546659469604 0.0873439759016037 -0.0 0.5742851495742798 0.47815972566604614 0 1.0 0 0.0 0 0.0 0 0.0 -0.235335111618042 0.020952075719833374 0.21605446934700012 0.99908447265625 0.04223761707544327 -0.0 0.575579822063446 0.46299588680267334 0 1.0 0 0.0 0 0.0 0 0.0 0.3544175624847412 0.08665427565574646 -0.2839455306529999 0.9138767719268799 0.4059267044067383 -0.0 0.0345919132232666 0.6782255172729492 0 1.0 0 0.0 0 0.0 0 0.0 0.3538045883178711 0.08820855617523193 0.21605446934700012 0.9451277256011963 0.3266701102256775 -0.0 0.445046603679657 0.5221929550170898 0 1.0 0 0.0 0 0.0 0 0.0 0.3544175624847412 0.08665427565574646 0.21605446934700012 0.9138767719268799 0.4059267044067383 -0.0 0.44531404972076416 0.5204707384109497 0 1.0 0 0.0 0 0.0 0 0.0 1.9055311679840088 0.2049044370651245 -0.2839455306529999 -0.981872022151947 0.1893673539161682 -0.0 0.10453879833221436 0.6176819205284119 0 1.0 0 0.0 0 0.0 0 0.0 1.9039366245269775 0.19484898447990417 0.21605448424816132 -0.9921872615814209 0.12463758885860443 -0.0 0.3760174810886383 0.4831979274749756 0 1.0 0 0.0 0 0.0 0 0.0 1.9055311679840088 0.2049044370651245 0.21605448424816132 -0.981872022151947 0.1893673539161682 -0.0 0.37747377157211304 0.4925498366355896 0 1.0 0 0.0 0 0.0 0 0.0 -0.33734679222106934 0.030645102262496948 -0.2839455306529999 -0.9944151043891907 -0.10525833815336227 -0.0 0.9464748501777649 0.6271423101425171 0 1.0 0 0.0 0 0.0 0 0.0 -0.3365440368652344 0.021254897117614746 0.21605446934700012 -0.9977416396141052 -0.06692709028720856 -0.0 0.5214253664016724 0.46054428815841675 0 1.0 0 0.0 0 0.0 0 0.0 -0.33734679222106934 0.030645102262496948 0.21605446934700012 -0.9944151043891907 -0.10525833815336227 -0.0 0.5207509398460388 0.47195643186569214 0 1.0 0 0.0 0 0.0 0 0.0 1.5920803546905518 -0.05997928977012634 -0.2839455306529999 0.9983519911766052 0.05722220614552498 -0.0 0.894640326499939 0.4978189468383789 0 1.0 0 0.0 0 0.0 0 0.0 1.5914380550384521 -0.05258728563785553 0.21605446934700012 0.9930112361907959 0.11780144274234772 -0.0 0.5876259803771973 0.36965125799179077 0 1.0 0 0.0 0 0.0 0 0.0 1.5920803546905518 -0.05997928977012634 0.21605446934700012 0.9983519911766052 0.05722220614552498 -0.0 0.5884809494018555 0.36237651109695435 0 1.0 0 0.0 0 0.0 0 0.0 1.4686124324798584 -0.05353105068206787 -0.2839455306529999 -0.3080843389034271 -0.9513229727745056 -0.0 0.9587600827217102 0.5082523822784424 0 1.0 0 0.0 0 0.0 0 0.0 1.4717357158660889 -0.05458913743495941 0.21605446934700012 -0.33548998832702637 -0.9420148134231567 -0.0 0.5193288922309875 0.3460422158241272 0 1.0 0 0.0 0 0.0 0 0.0 1.4686124324798584 -0.05353105068206787 0.21605446934700012 -0.3080843389034271 -0.9513229727745056 -0.0 0.5172003507614136 0.3470277190208435 0 1.0 0 0.0 0 0.0 0 0.0 0.3551666736602783 0.08514377474784851 -0.2839455306529999 0.8767052292823792 0.48097169399261475 -0.0 0.03404173254966736 0.6766632795333862 0 1.0 0 0.0 0 0.0 0 0.0 0.3544175624847412 0.08665427565574646 0.21605446934700012 0.9138767719268799 0.4059267044067383 -0.0 0.44531404972076416 0.5204707384109497 0 1.0 0 0.0 0 0.0 0 0.0 0.3551666736602783 0.08514377474784851 0.21605446934700012 0.8767052292823792 0.48097169399261475 -0.0 0.44566184282302856 0.5187883377075195 0 1.0 0 0.0 0 0.0 0 0.0 2.1740477085113525 0.20398133993148804 -0.2839455306529999 -0.9775688648223877 -0.21048615872859955 -0.0 0.945615291595459 0.6417965888977051 0 1.0 0 0.0 0 0.0 0 0.0 2.17484450340271 0.19948023557662964 0.21605448424816132 -0.9903256297111511 -0.13870662450790405 -0.0 0.5234003663063049 0.47715163230895996 0 1.0 0 0.0 0 0.0 0 0.0 2.1740477085113525 0.20398133993148804 0.21605448424816132 -0.9775688648223877 -0.21048615872859955 -0.0 0.5228258371353149 0.4825291633605957 0 1.0 0 0.0 0 0.0 0 0.0 -0.5003623962402344 0.019242078065872192 -0.2839455306529999 0.999298095703125 -0.036805324256420135 -0.0 0.052621930837631226 0.6112359762191772 0 1.0 0 0.0 0 0.0 0 0.0 -0.49987339973449707 0.027987703680992126 0.21605446934700012 0.9970701932907104 -0.07647938281297684 -0.0 0.42232567071914673 0.4747272729873657 0 1.0 0 0.0 0 0.0 0 0.0 -0.5003623962402344 0.019242078065872192 0.21605446934700012 0.999298095703125 -0.036805324256420135 -0.0 0.4214646518230438 0.4647483229637146 0 1.0 0 0.0 0 0.0 0 0.0 1.4717357158660889 -0.05458913743495941 -0.2839455306529999 -0.33548998832702637 -0.9420148134231567 -0.0 0.9569313526153564 0.5069000720977783 0 1.0 0 0.0 0 0.0 0 0.0 1.4746057987213135 -0.05566181242465973 0.21605446934700012 -0.3668935298919678 -0.9302346706390381 -0.0 0.5212814807891846 0.34504401683807373 0 1.0 0 0.0 0 0.0 0 0.0 1.4717357158660889 -0.05458913743495941 0.21605446934700012 -0.33548998832702637 -0.9420148134231567 -0.0 0.5193288922309875 0.3460422158241272 0 1.0 0 0.0 0 0.0 0 0.0 0.3560521602630615 0.08367705345153809 -0.2839455306529999 0.8348338007926941 0.5504318475723267 -0.0 0.03340405225753784 0.6751619577407837 0 1.0 0 0.0 0 0.0 0 0.0 0.3551666736602783 0.08514377474784851 0.21605446934700012 0.8767052292823792 0.48097169399261475 -0.0 0.44566184282302856 0.5187883377075195 0 1.0 0 0.0 0 0.0 0 0.0 0.3560521602630615 0.08367705345153809 0.21605446934700012 0.8348338007926941 0.5504318475723267 -0.0 0.4460906684398651 0.5171455144882202 0 1.0 0 0.0 0 0.0 0 0.0 -0.3365440368652344 0.021254897117614746 -0.2839455306529999 -0.9977416396141052 -0.06692709028720856 -0.0 0.9464700222015381 0.6156516075134277 0 1.0 0 0.0 0 0.0 0 0.0 -0.3360624313354492 0.011370927095413208 0.21605446934700012 -0.999481201171875 -0.0320444330573082 -0.0 0.5219259262084961 0.44843196868896484 0 1.0 0 0.0 0 0.0 0 0.0 -0.3365440368652344 0.021254897117614746 0.21605446934700012 -0.9977416396141052 -0.06692709028720856 -0.0 0.5214253664016724 0.46054428815841675 0 1.0 0 0.0 0 0.0 0 0.0 1.999058485031128 0.1938127875328064 -0.2839455306529999 0.9434491991996765 -0.33143100142478943 -0.0 0.060174643993377686 0.6250530481338501 0 1.0 0 0.0 0 0.0 0 0.0 2.0014007091522217 0.2000202238559723 0.21605448424816132 0.9266639947891235 -0.37580493092536926 -0.0 0.41973450779914856 0.4834361672401428 0 1.0 0 0.0 0 0.0 0 0.0 1.999058485031128 0.1938127875328064 0.21605448424816132 0.9434491991996765 -0.33143100142478943 -0.0 0.41807496547698975 0.4766302704811096 0 1.0 0 0.0 0 0.0 0 0.0 1.4746057987213135 -0.05566181242465973 -0.2839455306529999 -0.3668935298919678 -0.9302346706390381 -0.0 0.9552655220031738 0.5055458545684814 0 1.0 0 0.0 0 0.0 0 0.0 1.4772231578826904 -0.05674909055233002 0.21605446934700012 -0.4031189978122711 -0.9151280522346497 -0.0 0.5230599045753479 0.3440280556678772 0 1.0 0 0.0 0 0.0 0 0.0 1.4746057987213135 -0.05566181242465973 0.21605446934700012 -0.3668935298919678 -0.9302346706390381 -0.0 0.5212814807891846 0.34504401683807373 0 1.0 0 0.0 0 0.0 0 0.0 0.3570737838745117 0.08225411176681519 -0.2839455306529999 0.7896664142608643 0.6135135889053345 -0.0 0.03267878293991089 0.6737209558486938 0 1.0 0 0.0 0 0.0 0 0.0 0.3560521602630615 0.08367705345153809 0.21605446934700012 0.8348338007926941 0.5504318475723267 -0.0 0.4460906684398651 0.5171455144882202 0 1.0 0 0.0 0 0.0 0 0.0 0.3570737838745117 0.08225411176681519 0.21605446934700012 0.7896664142608643 0.6135135889053345 -0.0 0.4466010630130768 0.5155422687530518 0 1.0 0 0.0 0 0.0 0 0.0 2.17484450340271 0.19948023557662964 -0.2839455306529999 -0.9903256297111511 -0.13870662450790405 -0.0 0.9453579187393188 0.6363179683685303 0 1.0 0 0.0 0 0.0 0 0.0 2.1753222942352295 0.19486480951309204 0.21605448424816132 -0.9976500868797302 -0.06833094358444214 -0.0 0.523791491985321 0.4716107249259949 0 1.0 0 0.0 0 0.0 0 0.0 2.17484450340271 0.19948023557662964 0.21605448424816132 -0.9903256297111511 -0.13870662450790405 -0.0 0.5234003663063049 0.47715163230895996 0 1.0 0 0.0 0 0.0 0 0.0 0.26129603385925293 0.08225411176681519 -0.2839455306529999 -0.999969482421875 -0.00079348124563694 -0.0 0.08704373240470886 0.652578592300415 0 1.0 0 0.0 0 0.0 0 0.0 0.26160287857055664 0.0734853744506836 0.21605446934700012 -0.9974059462547302 -0.0716574639081955 -0.0 0.3975098729133606 0.5070275068283081 0 1.0 0 0.0 0 0.0 0 0.0 0.26129603385925293 0.08225411176681519 0.21605446934700012 -0.999969482421875 -0.00079348124563694 -0.0 0.39806950092315674 0.5157207250595093 0 1.0 0 0.0 0 0.0 0 0.0 -0.23502612113952637 0.005896851420402527 -0.2839455306529999 1.0 0.00012207403779029846 -0.0 0.8915530443191528 0.5810273289680481 0 1.0 0 0.0 0 0.0 0 0.0 -0.235335111618042 0.020952075719833374 0.21605446934700012 0.99908447265625 0.04223761707544327 -0.0 0.575579822063446 0.46299588680267334 0 1.0 0 0.0 0 0.0 0 0.0 -0.23502612113952637 0.005896851420402527 0.21605446934700012 1.0 0.00012207403779029846 -0.0 0.5766531825065613 0.44704872369766235 0 1.0 0 0.0 0 0.0 0 0.0 1.4772231578826904 -0.05674909055233002 -0.2839455306529999 -0.4031189978122711 -0.9151280522346497 -0.0 0.9537605047225952 0.5041895508766174 0 1.0 0 0.0 0 0.0 0 0.0 1.4795873165130615 -0.05785095691680908 0.21605446934700012 -0.4450819492340088 -0.8954740762710571 -0.0 0.5246654152870178 0.34298932552337646 0 1.0 0 0.0 0 0.0 0 0.0 1.4772231578826904 -0.05674909055233002 0.21605446934700012 -0.4031189978122711 -0.9151280522346497 -0.0 0.5230599045753479 0.3440280556678772 0 1.0 0 0.0 0 0.0 0 0.0 2.271453619003296 0.18733292818069458 -0.2839455306529999 0.999969482421875 0.0060731833800673485 -0.0 0.8921797275543213 0.6034001111984253 0 1.0 0 0.0 0 0.0 0 0.0 2.271106004714966 0.19703930616378784 0.21605448424816132 0.9973449110984802 0.07248146086931229 -0.0 0.5745598077774048 0.4752293825149536 0 1.0 0 0.0 0 0.0 0 0.0 2.271453619003296 0.18733292818069458 0.21605448424816132 0.999969482421875 0.0060731833800673485 -0.0 0.5753237009048462 0.46501606702804565 0 1.0 0 0.0 0 0.0 0 0.0 -0.5005252361297607 0.010100007057189941 -0.2839455306529999 0.999969482421875 -0.0021973326802253723 -0.0 0.05225995182991028 0.600637674331665 0 1.0 0 0.0 0 0.0 0 0.0 -0.5003623962402344 0.019242078065872192 0.21605446934700012 0.999298095703125 -0.036805324256420135 -0.0 0.4214646518230438 0.4647483229637146 0 1.0 0 0.0 0 0.0 0 0.0 -0.5005252361297607 0.010100007057189941 0.21605446934700012 0.999969482421875 -0.0021973326802253723 -0.0 0.42074114084243774 0.4542253017425537 0 1.0 0 0.0 0 0.0 0 0.0 1.4795873165130615 -0.05785095691680908 -0.2839455306529999 -0.4450819492340088 -0.8954740762710571 -0.0 0.9524144530296326 0.502831220626831 0 1.0 0 0.0 0 0.0 0 0.0 1.481698751449585 -0.05896741896867752 0.21605446934700012 -0.4939115643501282 -0.8695028424263 -0.0 0.5260999202728271 0.34192365407943726 0 1.0 0 0.0 0 0.0 0 0.0 1.4795873165130615 -0.05785095691680908 0.21605446934700012 -0.4450819492340088 -0.8954740762710571 -0.0 0.5246654152870178 0.34298932552337646 0 1.0 0 0.0 0 0.0 0 0.0 0.3582315444946289 0.08087494969367981 -0.2839455306529999 0.7424542903900146 0.669850766658783 -0.0 0.031865477561950684 0.6723393201828003 0 1.0 0 0.0 0 0.0 0 0.0 0.3570737838745117 0.08225411176681519 0.21605446934700012 0.7896664142608643 0.6135135889053345 -0.0 0.4466010630130768 0.5155422687530518 0 1.0 0 0.0 0 0.0 0 0.0 0.3582315444946289 0.08087494969367981 0.21605446934700012 0.7424542903900146 0.669850766658783 -0.0 0.4471936523914337 0.5139785408973694 0 1.0 0 0.0 0 0.0 0 0.0 2.1753222942352295 0.19486480951309204 -0.2839455306529999 -0.9976500868797302 -0.06833094358444214 -0.0 0.9453150033950806 0.6307230591773987 0 1.0 0 0.0 0 0.0 0 0.0 2.1754815578460693 0.19013503193855286 0.21605448424816132 -0.999969482421875 -0.003723258152604103 -0.0 0.5239977240562439 0.46590250730514526 0 1.0 0 0.0 0 0.0 0 0.0 2.1753222942352295 0.19486480951309204 0.21605448424816132 -0.9976500868797302 -0.06833094358444214 -0.0 0.523791491985321 0.4716107249259949 0 1.0 0 0.0 0 0.0 0 0.0 -0.3360624313354492 0.011370927095413208 -0.2839455306529999 -0.999481201171875 -0.0320444330573082 -0.0 0.9466947317123413 0.6035062670707703 0 1.0 0 0.0 0 0.0 0 0.0 -0.33590197563171387 0.0009931772947311401 0.21605446934700012 -0.999969482421875 0.0004272591322660446 -0.0 0.5222489237785339 0.4356297254562378 0 1.0 0 0.0 0 0.0 0 0.0 -0.3360624313354492 0.011370927095413208 0.21605446934700012 -0.999481201171875 -0.0320444330573082 -0.0 0.5219259262084961 0.44843196868896484 0 1.0 0 0.0 0 0.0 0 0.0 1.481698751449585 -0.05896741896867752 -0.2839455306529999 -0.4939115643501282 -0.8695028424263 -0.0 0.9512251019477844 0.5014703273773193 0 1.0 0 0.0 0 0.0 0 0.0 1.4835569858551025 -0.06009847670793533 0.21605446934700012 -0.5507370233535767 -0.8346506953239441 -0.0 0.5273644328117371 0.3408268690109253 0 1.0 0 0.0 0 0.0 0 0.0 1.481698751449585 -0.05896741896867752 0.21605446934700012 -0.4939115643501282 -0.8695028424263 -0.0 0.5260999202728271 0.34192365407943726 0 1.0 0 0.0 0 0.0 0 0.0 0.3595256805419922 0.07953956723213196 -0.2839455306529999 0.69454026222229 0.7194433212280273 -0.0 0.030963599681854248 0.6710162162780762 0 1.0 0 0.0 0 0.0 0 0.0 0.3582315444946289 0.08087494969367981 0.21605446934700012 0.7424542903900146 0.669850766658783 -0.0 0.4471936523914337 0.5139785408973694 0 1.0 0 0.0 0 0.0 0 0.0 0.3595256805419922 0.07953956723213196 0.21605446934700012 0.69454026222229 0.7194433212280273 -0.0 0.44786933064460754 0.5124543905258179 0 1.0 0 0.0 0 0.0 0 0.0 1.9039366245269775 0.19484898447990417 -0.2839455306529999 -0.9921872615814209 0.12463758885860443 -0.0 0.10434016585350037 0.6078946590423584 0 1.0 0 0.0 0 0.0 0 0.0 1.9029772281646729 0.1845308244228363 0.21605448424816132 -0.9956969022750854 0.09256263822317123 -0.0 0.3747648000717163 0.4735370874404907 0 1.0 0 0.0 0 0.0 0 0.0 1.9039366245269775 0.19484898447990417 0.21605448424816132 -0.9921872615814209 0.12463758885860443 -0.0 0.3760174810886383 0.4831979274749756 0 1.0 0 0.0 0 0.0 0 0.0 -0.5003988742828369 0.000676959753036499 -0.2839455306529999 0.999603271484375 0.02774132415652275 -0.0 0.0517292320728302 0.5896918773651123 0 1.0 0 0.0 0 0.0 0 0.0 -0.5005252361297607 0.010100007057189941 0.21605446934700012 0.999969482421875 -0.0021973326802253723 -0.0 0.42074114084243774 0.4542253017425537 0 1.0 0 0.0 0 0.0 0 0.0 -0.5003988742828369 0.000676959753036499 0.21605446934700012 0.999603271484375 0.02774132415652275 -0.0 0.4201444983482361 0.44329583644866943 0 1.0 0 0.0 0 0.0 0 0.0 0.36095595359802246 0.07824796438217163 -0.2839455306529999 0.6469618678092957 0.7625049352645874 -0.0 0.029972761869430542 0.669750452041626 0 1.0 0 0.0 0 0.0 0 0.0 0.3595256805419922 0.07953956723213196 0.21605446934700012 0.69454026222229 0.7194433212280273 -0.0 0.44786933064460754 0.5124543905258179 0 1.0 0 0.0 0 0.0 0 0.0 0.36095595359802246 0.07824796438217163 0.21605446934700012 0.6469618678092957 0.7625049352645874 -0.0 0.448628693819046 0.5109696984291077 0 1.0 0 0.0 0 0.0 0 0.0 1.592294454574585 -0.06765832006931305 -0.2839455306529999 0.999969482421875 -0.003662221133708954 -0.0 0.8951667547225952 0.4902169108390808 0 1.0 0 0.0 0 0.0 0 0.0 1.5920803546905518 -0.05997928977012634 0.21605446934700012 0.9983519911766052 0.05722220614552498 -0.0 0.5884809494018555 0.36237651109695435 0 1.0 0 0.0 0 0.0 0 0.0 1.592294454574585 -0.06765832006931305 0.21605446934700012 0.999969482421875 -0.003662221133708954 -0.0 0.5891700387001038 0.35480350255966187 0 1.0 0 0.0 0 0.0 0 0.0 1.9969351291656494 0.18729400634765625 -0.2839455306529999 0.9572435617446899 -0.28919339179992676 -0.0 0.06096261739730835 0.6173686385154724 0 1.0 0 0.0 0 0.0 0 0.0 1.999058485031128 0.1938127875328064 0.21605448424816132 0.9434491991996765 -0.33143100142478943 -0.0 0.41807496547698975 0.4766302704811096 0 1.0 0 0.0 0 0.0 0 0.0 1.9969351291656494 0.18729400634765625 0.21605448424816132 0.9572435617446899 -0.28919339179992676 -0.0 0.41650107502937317 0.4694640636444092 0 1.0 0 0.0 0 0.0 0 0.0 -0.23534107208251953 -0.009677678346633911 -0.2839455306529999 0.999114990234375 -0.041627246886491776 -0.0 0.8930354118347168 0.5645591020584106 0 1.0 0 0.0 0 0.0 0 0.0 -0.23502612113952637 0.005896851420402527 0.21605446934700012 1.0 0.00012207403779029846 -0.0 0.5766531825065613 0.44704872369766235 0 1.0 0 0.0 0 0.0 0 0.0 -0.23534107208251953 -0.009677678346633911 0.21605446934700012 0.999114990234375 -0.041627246886491776 -0.0 0.5774952173233032 0.430411159992218 0 1.0 0 0.0 0 0.0 0 0.0 1.4835569858551025 -0.06009847670793533 -0.2839455306529999 -0.5507370233535767 -0.8346506953239441 -0.0 0.9501909017562866 0.5001065731048584 0 1.0 0 0.0 0 0.0 0 0.0 1.4851624965667725 -0.06124413013458252 0.21605446934700012 -0.616595983505249 -0.7872554659843445 -0.0 0.528460681438446 0.3396955132484436 0 1.0 0 0.0 0 0.0 0 0.0 1.4835569858551025 -0.06009847670793533 0.21605446934700012 -0.5507370233535767 -0.8346506953239441 -0.0 0.5273644328117371 0.3408268690109253 0 1.0 0 0.0 0 0.0 0 0.0 0.3625221252441406 0.07700017094612122 -0.2839455306529999 0.5797296166419983 0.8147831559181213 -0.0 0.028892487287521362 0.668540894985199 0 1.0 0 0.0 0 0.0 0 0.0 0.36095595359802246 0.07824796438217163 0.21605446934700012 0.6469618678092957 0.7625049352645874 -0.0 0.448628693819046 0.5109696984291077 0 1.0 0 0.0 0 0.0 0 0.0 0.3625221252441406 0.07700017094612122 0.21605446934700012 0.5797296166419983 0.8147831559181213 -0.0 0.4494723379611969 0.5095247030258179 0 1.0 0 0.0 0 0.0 0 0.0 2.1754815578460693 0.19013503193855286 -0.2839455306529999 -0.999969482421875 -0.003723258152604103 -0.0 0.9454828500747681 0.6250084638595581 0 1.0 0 0.0 0 0.0 0 0.0 2.175391912460327 0.18671512603759766 0.21605448424816132 -0.9985656142234802 0.05301064997911453 -0.0 0.5240249633789062 0.4617552161216736 0 1.0 0 0.0 0 0.0 0 0.0 2.1754815578460693 0.19013503193855286 0.21605448424816132 -0.999969482421875 -0.003723258152604103 -0.0 0.5239977240562439 0.46590250730514526 0 1.0 0 0.0 0 0.0 0 0.0 -0.33590197563171387 0.0009931772947311401 -0.2839455306529999 -0.999969482421875 0.0004272591322660446 -0.0 0.9471420049667358 0.5907166004180908 0 1.0 0 0.0 0 0.0 0 0.0 -0.3360614776611328 -0.00876675546169281 0.21605446934700012 -0.999420166015625 0.033783990889787674 -0.0 0.5223656892776489 0.42353588342666626 0 1.0 0 0.0 0 0.0 0 0.0 -0.33590197563171387 0.0009931772947311401 0.21605446934700012 -0.999969482421875 0.0004272591322660446 -0.0 0.5222489237785339 0.4356297254562378 0 1.0 0 0.0 0 0.0 0 0.0 1.4851624965667725 -0.06124413013458252 -0.2839455306529999 -0.616595983505249 -0.7872554659843445 -0.0 0.9493098258972168 0.4987393021583557 0 1.0 0 0.0 0 0.0 0 0.0 1.4865148067474365 -0.06240437924861908 0.21605446934700012 -0.6999725103378296 -0.7141331434249878 -0.0 0.5293893814086914 0.33852624893188477 0 1.0 0 0.0 0 0.0 0 0.0 1.4851624965667725 -0.06124413013458252 0.21605446934700012 -0.616595983505249 -0.7872554659843445 -0.0 0.528460681438446 0.3396955132484436 0 1.0 0 0.0 0 0.0 0 0.0 0.36519408226013184 0.07530966401100159 -0.2839455306529999 0.4927823841571808 0.8701131939888 -0.0 0.027060627937316895 0.6669516563415527 0 1.0 0 0.0 0 0.0 0 0.0 0.3625221252441406 0.07700017094612122 0.21605446934700012 0.5797296166419983 0.8147831559181213 -0.0 0.4494723379611969 0.5095247030258179 0 1.0 0 0.0 0 0.0 0 0.0 0.36519408226013184 0.07530966401100159 0.21605446934700012 0.4927823841571808 0.8701131939888 -0.0 0.45094168186187744 0.5075438022613525 0 1.0 0 0.0 0 0.0 0 0.0 2.2713258266448975 0.18192818760871887 -0.2839455306529999 0.9988707900047302 -0.0474562831223011 -0.0 0.892727255821228 0.597734272480011 0 1.0 0 0.0 0 0.0 0 0.0 2.271453619003296 0.18733292818069458 0.21605448424816132 0.999969482421875 0.0060731833800673485 -0.0 0.5753237009048462 0.46501606702804565 0 1.0 0 0.0 0 0.0 0 0.0 2.2713258266448975 0.18192818760871887 0.21605448424816132 0.9988707900047302 -0.0474562831223011 -0.0 0.5756058096885681 0.45928263664245605 0 1.0 0 0.0 0 0.0 0 0.0 -0.5000193119049072 -0.008327707648277283 -0.2839455306529999 0.9983214735984802 0.05777153745293617 -0.0 0.051086753606796265 0.5792196989059448 0 1.0 0 0.0 0 0.0 0 0.0 -0.5003988742828369 0.000676959753036499 0.21605446934700012 0.999603271484375 0.02774132415652275 -0.0 0.4201444983482361 0.44329583644866943 0 1.0 0 0.0 0 0.0 0 0.0 -0.5000193119049072 -0.008327707648277283 0.21605446934700012 0.9983214735984802 0.05777153745293617 -0.0 0.4197072982788086 0.4327854514122009 0 1.0 0 0.0 0 0.0 0 0.0 1.4865148067474365 -0.06240437924861908 -0.2839455306529999 -0.6999725103378296 -0.7141331434249878 -0.0 0.9485805034637451 0.49736785888671875 0 1.0 0 0.0 0 0.0 0 0.0 1.4876339435577393 -0.06365705281496048 0.21605446934700012 -0.7671437859535217 -0.6414380073547363 -0.0 0.5301671624183655 0.3372293710708618 0 1.0 0 0.0 0 0.0 0 0.0 1.4865148067474365 -0.06240437924861908 0.21605446934700012 -0.6999725103378296 -0.7141331434249878 -0.0 0.5293893814086914 0.33852624893188477 0 1.0 0 0.0 0 0.0 0 0.0 0.3687732219696045 0.07350727915763855 -0.2839455306529999 0.4213080108165741 0.9068880081176758 -0.0 0.024613529443740845 0.6653088331222534 0 1.0 0 0.0 0 0.0 0 0.0 0.36519408226013184 0.07530966401100159 0.21605446934700012 0.4927823841571808 0.8701131939888 -0.0 0.45094168186187744 0.5075438022613525 0 1.0 0 0.0 0 0.0 0 0.0 0.3687732219696045 0.07350727915763855 0.21605446934700012 0.4213080108165741 0.9068880081176758 -0.0 0.45294809341430664 0.5053983926773071 0 1.0 0 0.0 0 0.0 0 0.0 1.9950306415557861 0.18046388030052185 -0.2839455306529999 0.9684438705444336 -0.24918362498283386 -0.0 0.061599165201187134 0.6093670129776001 0 1.0 0 0.0 0 0.0 0 0.0 1.9969351291656494 0.18729400634765625 0.21605448424816132 0.9572435617446899 -0.28919339179992676 -0.0 0.41650107502937317 0.4694640636444092 0 1.0 0 0.0 0 0.0 0 0.0 1.9950306415557861 0.18046388030052185 0.21605448424816132 0.9684438705444336 -0.24918362498283386 -0.0 0.41501089930534363 0.46193617582321167 0 1.0 0 0.0 0 0.0 0 0.0 -0.4993870258331299 -0.016914010047912598 -0.2839455306529999 0.9958800077438354 0.09060945361852646 -0.0 0.05033385753631592 0.5692355036735535 0 1.0 0 0.0 0 0.0 0 0.0 -0.5000193119049072 -0.008327707648277283 0.21605446934700012 0.9983214735984802 0.05777153745293617 -0.0 0.4197072982788086 0.4327854514122009 0 1.0 0 0.0 0 0.0 0 0.0 -0.4993870258331299 -0.016914010047912598 0.21605446934700012 0.9958800077438354 0.09060945361852646 -0.0 0.41943296790122986 0.42270857095718384 0 1.0 0 0.0 0 0.0 0 0.0 1.3436076641082764 -0.06275463849306107 -0.2839455306529999 -0.1507309228181839 0.9885555505752563 -0.0 0.034252822399139404 0.5006027221679688 0 1.0 0 0.0 0 0.0 0 0.0 1.2448337078094482 -0.0778159350156784 0.21605446934700012 -0.1507309228181839 0.9885555505752563 -0.0 0.3779359459877014 0.35555046796798706 0 1.0 0 0.0 0 0.0 0 0.0 1.3436076641082764 -0.06275463849306107 0.21605446934700012 -0.1507309228181839 0.9885555505752563 -0.0 0.4315911829471588 0.34482574462890625 0 1.0 0 0.0 0 0.0 0 0.0 0.3732597827911377 0.07159298658370972 -0.2839455306529999 0.3721121847629547 0.9281594157218933 -0.0 0.021542906761169434 0.6635837554931641 0 1.0 0 0.0 0 0.0 0 0.0 0.3687732219696045 0.07350727915763855 0.21605446934700012 0.4213080108165741 0.9068880081176758 -0.0 0.45294809341430664 0.5053983926773071 0 1.0 0 0.0 0 0.0 0 0.0 0.3732597827911377 0.07159298658370972 0.21605446934700012 0.3721121847629547 0.9281594157218933 -0.0 0.45550355315208435 0.5030808448791504 0 1.0 0 0.0 0 0.0 0 0.0 2.175391912460327 0.18671512603759766 -0.2839455306529999 -0.9985656142234802 0.05301064997911453 -0.0 0.9457338452339172 0.6208869218826294 0 1.0 0 0.0 0 0.0 0 0.0 2.175122022628784 0.18334385752677917 0.21605448424816132 -0.9942319989204407 0.10705892741680145 -0.0 0.5239424109458923 0.45764970779418945 0 1.0 0 0.0 0 0.0 0 0.0 2.175391912460327 0.18671512603759766 0.21605448424816132 -0.9985656142234802 0.05301064997911453 -0.0 0.5240249633789062 0.4617552161216736 0 1.0 0 0.0 0 0.0 0 0.0 -0.3360614776611328 -0.00876675546169281 -0.2839455306529999 -0.999420166015625 0.033783990889787674 -0.0 0.9477471709251404 0.5786771774291992 0 1.0 0 0.0 0 0.0 0 0.0 -0.33653950691223145 -0.018081560730934143 0.21605446934700012 -0.9974974989891052 0.07034516334533691 -0.0 0.5222747325897217 0.41196632385253906 0 1.0 0 0.0 0 0.0 0 0.0 -0.3360614776611328 -0.00876675546169281 0.21605446934700012 -0.999420166015625 0.033783990889787674 -0.0 0.5223656892776489 0.42353588342666626 0 1.0 0 0.0 0 0.0 0 0.0 0.26160287857055664 0.0734853744506836 -0.2839455306529999 -0.9974059462547302 -0.0716574639081955 -0.0 0.08622869849205017 0.6439356207847595 0 1.0 0 0.0 0 0.0 0 0.0 0.26252222061157227 0.06504258513450623 0.21605446934700012 -0.9891353845596313 -0.14697714149951935 -0.0 0.3972393870353699 0.49852627515792847 0 1.0 0 0.0 0 0.0 0 0.0 0.26160287857055664 0.0734853744506836 0.21605446934700012 -0.9974059462547302 -0.0716574639081955 -0.0 0.3975098729133606 0.5070275068283081 0 1.0 0 0.0 0 0.0 0 0.0 1.3447487354278564 -0.06744548678398132 -0.2839455306529999 0.965819239616394 0.25910213589668274 -0.0 0.03346306085586548 0.4952545762062073 0 1.0 0 0.0 0 0.0 0 0.0 1.3436076641082764 -0.06275463849306107 0.21605446934700012 0.9716482758522034 0.23633533716201782 -0.0 0.4315911829471588 0.34482574462890625 0 1.0 0 0.0 0 0.0 0 0.0 1.3447487354278564 -0.06744548678398132 0.21605446934700012 0.965819239616394 0.25910213589668274 -0.0 0.4319748282432556 0.3392902612686157 0 1.0 0 0.0 0 0.0 0 0.0 1.9029772281646729 0.1845308244228363 -0.2839455306529999 -0.12308114767074585 -0.9923703670501709 -0.0 0.10388633608818054 0.5979529023170471 0 1.0 0 0.0 0 0.0 0 0.0 1.993345022201538 0.17332243919372559 0.21605448424816132 -0.12308114767074585 -0.9923703670501709 -0.0 0.41360267996788025 0.4540458917617798 0 1.0 0 0.0 0 0.0 0 0.0 1.9029772281646729 0.1845308244228363 0.21605448424816132 -0.12308114767074585 -0.9923703670501709 -0.0 0.3747648000717163 0.4735370874404907 0 1.0 0 0.0 0 0.0 0 0.0 1.4876339435577393 -0.06365705281496048 -0.2839455306529999 -0.7671437859535217 -0.6414380073547363 -0.0 0.9479937553405762 0.49590182304382324 0 1.0 0 0.0 0 0.0 0 0.0 1.4886553287506104 -0.06496324390172958 0.21605446934700012 -0.807763934135437 -0.5894650220870972 -0.0 0.5308826565742493 0.33586663007736206 0 1.0 0 0.0 0 0.0 0 0.0 1.4876339435577393 -0.06365705281496048 0.21605446934700012 -0.7671437859535217 -0.6414380073547363 -0.0 0.5301671624183655 0.3372293710708618 0 1.0 0 0.0 0 0.0 0 0.0 1.993345022201538 0.17332243919372559 -0.2839455306529999 0.9732352495193481 -0.2297128140926361 -0.0 0.062088608741760254 0.6010488271713257 0 1.0 0 0.0 0 0.0 0 0.0 1.9950306415557861 0.18046388030052185 0.21605448424816132 0.9684438705444336 -0.24918362498283386 -0.0 0.41501089930534363 0.46193617582321167 0 1.0 0 0.0 0 0.0 0 0.0 1.993345022201538 0.17332243919372559 0.21605448424816132 0.9732352495193481 -0.2297128140926361 -0.0 0.41360267996788025 0.4540458917617798 0 1.0 0 0.0 0 0.0 0 0.0 -0.23628616333007812 -0.02464410662651062 -0.2839455306529999 0.9962767362594604 -0.08603167533874512 -0.0 0.894726037979126 0.5487753748893738 0 1.0 0 0.0 0 0.0 0 0.0 -0.23534107208251953 -0.009677678346633911 0.21605446934700012 0.999114990234375 -0.041627246886491776 -0.0 0.5774952173233032 0.430411159992218 0 1.0 0 0.0 0 0.0 0 0.0 -0.23628616333007812 -0.02464410662651062 0.21605446934700012 0.9962767362594604 -0.08603167533874512 -0.0 0.5780245661735535 0.41431325674057007 0 1.0 0 0.0 0 0.0 0 0.0 0.37865352630615234 0.06956681609153748 -0.2839455306529999 0.33652761578559875 0.9416486024856567 -0.0 0.017840147018432617 0.6617413759231567 0 1.0 0 0.0 0 0.0 0 0.0 0.3732597827911377 0.07159298658370972 0.21605446934700012 0.3721121847629547 0.9281594157218933 -0.0 0.45550355315208435 0.5030808448791504 0 1.0 0 0.0 0 0.0 0 0.0 0.37865352630615234 0.06956681609153748 0.21605446934700012 0.33652761578559875 0.9416486024856567 -0.0 0.4586215019226074 0.5005841851234436 0 1.0 0 0.0 0 0.0 0 0.0 2.175122022628784 0.18334385752677917 -0.2839455306529999 -0.9942319989204407 0.10705892741680145 -0.0 0.9460951685905457 0.6168336868286133 0 1.0 0 0.0 0 0.0 0 0.0 2.1746718883514404 0.1800212264060974 0.21605448424816132 -0.9868465065956116 0.16162602603435516 -0.0 0.5237489342689514 0.45358604192733765 0 1.0 0 0.0 0 0.0 0 0.0 2.175122022628784 0.18334385752677917 0.21605448424816132 -0.9942319989204407 0.10705892741680145 -0.0 0.5239424109458923 0.45764970779418945 0 1.0 0 0.0 0 0.0 0 0.0 1.4886553287506104 -0.06496324390172958 -0.2839455306529999 -0.807763934135437 -0.5894650220870972 -0.0 0.9474684596061707 0.49438297748565674 0 1.0 0 0.0 0 0.0 0 0.0 1.4895799160003662 -0.0663229450583458 0.21605446934700012 -0.8454847931861877 -0.5339518189430237 -0.0 0.5315366387367249 0.3344380259513855 0 1.0 0 0.0 0 0.0 0 0.0 1.4886553287506104 -0.06496324390172958 0.21605446934700012 -0.807763934135437 -0.5894650220870972 -0.0 0.5308826565742493 0.33586663007736206 0 1.0 0 0.0 0 0.0 0 0.0 -0.4985015392303467 -0.025081947445869446 -0.2839455306529999 0.9919431209564209 0.1265602558851242 -0.0 0.049470871686935425 0.5597488880157471 0 1.0 0 0.0 0 0.0 0 0.0 -0.4993870258331299 -0.016914010047912598 0.21605446934700012 0.9958800077438354 0.09060945361852646 -0.0 0.41943296790122986 0.42270857095718384 0 1.0 0 0.0 0 0.0 0 0.0 -0.4985015392303467 -0.025081947445869446 0.21605446934700012 0.9919431209564209 0.1265602558851242 -0.0 0.4193257689476013 0.41307467222213745 0 1.0 0 0.0 0 0.0 0 0.0 -1.3676784038543701 0.16952788829803467 -0.2839455306529999 0.5797296166419983 0.8147831559181213 -0.0 0.9532722234725952 0.7891139984130859 0 1.0 0 0.0 0 0.0 0 0.0 -1.3721212148666382 0.17253431677818298 0.21605448424816132 0.5418866276741028 0.8404186964035034 -0.0 0.5884212851524353 0.612917423248291 0 1.0 0 0.0 0 0.0 0 0.0 -1.3676784038543701 0.16952788829803467 0.21605446934700012 0.5797296166419983 0.8147831559181213 -0.0 0.5907711982727051 0.6104052066802979 0 1.0 0 0.0 0 0.0 0 0.0 0.38495469093322754 0.06742876768112183 -0.2839455306529999 0.3096407949924469 0.9508346915245056 -0.0 0.013496875762939453 0.6597400903701782 0 1.0 0 0.0 0 0.0 0 0.0 0.37865352630615234 0.06956681609153748 0.21605446934700012 0.33652761578559875 0.9416486024856567 -0.0 0.4586215019226074 0.5005841851234436 0 1.0 0 0.0 0 0.0 0 0.0 0.38495469093322754 0.06742876768112183 0.21605446934700012 0.3096407949924469 0.9508346915245056 -0.0 0.4623163640499115 0.49790239334106445 0 1.0 0 0.0 0 0.0 0 0.0 -0.33653950691223145 -0.018081560730934143 -0.2839455306529999 -0.9974974989891052 0.07034516334533691 -0.0 0.9485154747962952 0.5672034025192261 0 1.0 0 0.0 0 0.0 0 0.0 -0.33733606338500977 -0.02695123851299286 0.21605446934700012 -0.9938657879829407 0.11035493016242981 -0.0 0.5219700336456299 0.4009416699409485 0 1.0 0 0.0 0 0.0 0 0.0 -0.33653950691223145 -0.018081560730934143 0.21605446934700012 -0.9974974989891052 0.07034516334533691 -0.0 0.5222747325897217 0.41196632385253906 0 1.0 0 0.0 0 0.0 0 0.0 1.4895799160003662 -0.0663229450583458 -0.2839455306529999 -0.8454847931861877 -0.5339518189430237 -0.0 0.9470036625862122 0.4928116202354431 0 1.0 0 0.0 0 0.0 0 0.0 1.4904067516326904 -0.06773615628480911 0.21605446934700012 -0.8796654939651489 -0.4755394160747528 -0.0 0.5321288108825684 0.33294278383255005 0 1.0 0 0.0 0 0.0 0 0.0 1.4895799160003662 -0.0663229450583458 0.21605446934700012 -0.8454847931861877 -0.5339518189430237 -0.0 0.5315366387367249 0.3344380259513855 0 1.0 0 0.0 0 0.0 0 0.0 -1.5943957567214966 0.1705203354358673 -0.2839455306529999 -0.573870062828064 0.8189031481742859 -0.0 0.1309186816215515 0.7704271078109741 0 1.0 0 0.0 0 0.0 0 0.0 -1.600374460220337 0.16600584983825684 0.21605446934700012 -0.6284676790237427 0.7778252363204956 -0.0 0.47173115611076355 0.5920871496200562 0 1.0 0 0.0 0 0.0 0 0.0 -1.5943957567214966 0.1705203354358673 0.21605448424816132 -0.573870062828064 0.8189031481742859 -0.0 0.4746149778366089 0.5966225862503052 0 1.0 0 0.0 0 0.0 0 0.0 2.2709429264068604 0.17657208442687988 -0.2839455306529999 0.9954222440719604 -0.0953703448176384 -0.0 0.8933857083320618 0.5921443700790405 0 1.0 0 0.0 0 0.0 0 0.0 2.2713258266448975 0.18192818760871887 0.21605448424816132 0.9988707900047302 -0.0474562831223011 -0.0 0.5756058096885681 0.45928263664245605 0 1.0 0 0.0 0 0.0 0 0.0 2.2709429264068604 0.17657208442687988 0.21605448424816132 0.9954222440719604 -0.0953703448176384 -0.0 0.5757695436477661 0.4535619616508484 0 1.0 0 0.0 0 0.0 0 0.0 0.3921630382537842 0.06517881155014038 -0.2839455306529999 0.28870511054992676 0.9573961496353149 -0.0 0.008507370948791504 0.6575324535369873 0 1.0 0 0.0 0 0.0 0 0.0 0.38495469093322754 0.06742876768112183 0.21605446934700012 0.3096407949924469 0.9508346915245056 -0.0 0.4623163640499115 0.49790239334106445 0 1.0 0 0.0 0 0.0 0 0.0 0.3921630382537842 0.06517881155014038 0.21605446934700012 0.28870511054992676 0.9573961496353149 -0.0 0.46660202741622925 0.49503177404403687 0 1.0 0 0.0 0 0.0 0 0.0 2.1746718883514404 0.1800212264060974 -0.2839455306529999 -0.9868465065956116 0.16162602603435516 -0.0 0.946566104888916 0.612848162651062 0 1.0 0 0.0 0 0.0 0 0.0 2.174041986465454 0.17674723267555237 0.21605448424816132 -0.9762871265411377 0.21634571254253387 -0.0 0.5234435200691223 0.4495640993118286 0 1.0 0 0.0 0 0.0 0 0.0 2.1746718883514404 0.1800212264060974 0.21605448424816132 -0.9868465065956116 0.16162602603435516 -0.0 0.5237489342689514 0.45358604192733765 0 1.0 0 0.0 0 0.0 0 0.0 -0.23786115646362305 -0.039002448320388794 -0.2839455306529999 0.9909970164299011 -0.13370159268379211 -0.0 0.8966271877288818 0.53370201587677 0 1.0 0 0.0 0 0.0 0 0.0 -0.23628616333007812 -0.02464410662651062 0.21605446934700012 0.9962767362594604 -0.08603167533874512 -0.0 0.5780245661735535 0.41431325674057007 0 1.0 0 0.0 0 0.0 0 0.0 -0.23786115646362305 -0.039002448320388794 0.21605446934700012 0.9909970164299011 -0.13370159268379211 -0.0 0.5782297849655151 0.39878058433532715 0 1.0 0 0.0 0 0.0 0 0.0 1.346069574356079 -0.07194417715072632 -0.2839455306529999 0.9521775245666504 0.30545976758003235 -0.0 0.032583266496658325 0.49015122652053833 0 1.0 0 0.0 0 0.0 0 0.0 1.3447487354278564 -0.06744548678398132 0.21605446934700012 0.965819239616394 0.25910213589668274 -0.0 0.4319748282432556 0.3392902612686157 0 1.0 0 0.0 0 0.0 0 0.0 1.346069574356079 -0.07194417715072632 0.21605446934700012 0.9521775245666504 0.30545976758003235 -0.0 0.4324910044670105 0.3339676856994629 0 1.0 0 0.0 0 0.0 0 0.0 -1.363500714302063 0.16640472412109375 -0.2839455306529999 0.6184576153755188 0.7857905626296997 -0.0 0.9507166147232056 0.7853257656097412 0 1.0 0 0.0 0 0.0 0 0.0 -1.3676784038543701 0.16952788829803467 0.21605446934700012 0.5797296166419983 0.8147831559181213 -0.0 0.5907711982727051 0.6104052066802979 0 1.0 0 0.0 0 0.0 0 0.0 -1.363500714302063 0.16640472412109375 0.21605446934700012 0.6184576153755188 0.7857905626296997 -0.0 0.5929959416389465 0.6077929735183716 0 1.0 0 0.0 0 0.0 0 0.0 0.40027856826782227 0.06281697750091553 -0.2839455306529999 0.2719199061393738 0.9623096585273743 -0.0 0.002870500087738037 0.6550652384757996 0 1.0 0 0.0 0 0.0 0 0.0 0.3921630382537842 0.06517881155014038 0.21605446934700012 0.28870511054992676 0.9573961496353149 -0.0 0.46660202741622925 0.49503177404403687 0 1.0 0 0.0 0 0.0 0 0.0 0.40027856826782227 0.06281697750091553 0.21605446934700012 0.2719199061393738 0.9623096585273743 -0.0 0.4714907705783844 0.49197155237197876 0 1.0 0 0.0 0 0.0 0 0.0 2.174041986465454 0.17674723267555237 -0.2839455306529999 -0.9762871265411377 0.21634571254253387 -0.0 0.9471457004547119 0.6089298129081726 0 1.0 0 0.0 0 0.0 0 0.0 2.173231840133667 0.17352190613746643 0.21605448424816132 -0.9626453518867493 0.2706381380558014 -0.0 0.5230244994163513 0.4455840587615967 0 1.0 0 0.0 0 0.0 0 0.0 2.174041986465454 0.17674723267555237 0.21605448424816132 -0.9762871265411377 0.21634571254253387 -0.0 0.5234435200691223 0.4495640993118286 0 1.0 0 0.0 0 0.0 0 0.0 0.26252222061157227 0.06504258513450623 -0.2839455306529999 -0.9891353845596313 -0.14697714149951935 -0.0 0.08516183495521545 0.635638952255249 0 1.0 0 0.0 0 0.0 0 0.0 0.264054536819458 0.05692572891712189 0.21605446934700012 -0.9741813540458679 -0.22565385699272156 -0.0 0.39726391434669495 0.49021196365356445 0 1.0 0 0.0 0 0.0 0 0.0 0.26252222061157227 0.06504258513450623 0.21605446934700012 -0.9891353845596313 -0.14697714149951935 -0.0 0.3972393870353699 0.49852627515792847 0 1.0 0 0.0 0 0.0 0 0.0 -0.4973633289337158 -0.03283150494098663 -0.2839455306529999 0.9861140847206116 0.1658986210823059 -0.0 0.04849809408187866 0.5507650375366211 0 1.0 0 0.0 0 0.0 0 0.0 -0.4985015392303467 -0.025081947445869446 0.21605446934700012 0.9919431209564209 0.1265602558851242 -0.0 0.4193257689476013 0.41307467222213745 0 1.0 0 0.0 0 0.0 0 0.0 -0.4973633289337158 -0.03283150494098663 0.21605446934700012 0.9861140847206116 0.1658986210823059 -0.0 0.41938960552215576 0.40388965606689453 0 1.0 0 0.0 0 0.0 0 0.0 1.5919973850250244 -0.07608164846897125 -0.2839455306529999 0.9974364638328552 -0.0714743509888649 -0.0 0.8959654569625854 0.4819793105125427 0 1.0 0 0.0 0 0.0 0 0.0 1.592294454574585 -0.06765832006931305 0.21605446934700012 0.999969482421875 -0.003662221133708954 -0.0 0.5891700387001038 0.35480350255966187 0 1.0 0 0.0 0 0.0 0 0.0 1.5919973850250244 -0.07608164846897125 0.21605446934700012 0.9974364638328552 -0.0714743509888649 -0.0 0.5896905660629272 0.34646421670913696 0 1.0 0 0.0 0 0.0 0 0.0 -1.3595882654190063 0.16316479444503784 -0.2839455306529999 0.6577044129371643 0.7532578706741333 -0.0 0.9484119415283203 0.7814901471138 0 1.0 0 0.0 0 0.0 0 0.0 -1.363500714302063 0.16640472412109375 0.21605446934700012 0.6184576153755188 0.7857905626296997 -0.0 0.5929959416389465 0.6077929735183716 0 1.0 0 0.0 0 0.0 0 0.0 -1.3595882654190063 0.16316479444503784 0.21605446934700012 0.6577044129371643 0.7532578706741333 -0.0 0.5950978398323059 0.6050815582275391 0 1.0 0 0.0 0 0.0 0 0.0 -0.33733606338500977 -0.02695123851299286 -0.2839455306529999 -0.9938657879829407 0.11035493016242981 -0.0 0.9494444131851196 0.5563149452209473 0 1.0 0 0.0 0 0.0 0 0.0 -0.3384511470794678 -0.03537578880786896 0.21605446934700012 -0.9880367517471313 0.15405744314193726 -0.0 0.5214453935623169 0.3904763460159302 0 1.0 0 0.0 0 0.0 0 0.0 -0.33733606338500977 -0.02695123851299286 0.21605446934700012 -0.9938657879829407 0.11035493016242981 -0.0 0.5219700336456299 0.4009416699409485 0 1.0 0 0.0 0 0.0 0 0.0 1.4904067516326904 -0.06773615628480911 -0.2839455306529999 -0.8796654939651489 -0.4755394160747528 -0.0 0.9465994834899902 0.4911881685256958 0 1.0 0 0.0 0 0.0 0 0.0 1.4911367893218994 -0.06920288503170013 0.21605446934700012 -0.9097872972488403 -0.41502121090888977 -0.0 0.5326599478721619 0.3313811421394348 0 1.0 0 0.0 0 0.0 0 0.0 1.4904067516326904 -0.06773615628480911 0.21605446934700012 -0.8796654939651489 -0.4755394160747528 -0.0 0.5321288108825684 0.33294278383255005 0 1.0 0 0.0 0 0.0 0 0.0 -1.600374460220337 0.16600584983825684 -0.2839455306529999 -0.6284676790237427 0.7778252363204956 -0.0 0.13366088271141052 0.7642955780029297 0 1.0 0 0.0 0 0.0 0 0.0 -1.6060515642166138 0.16110217571258545 0.21605446934700012 -0.6779686808586121 0.7350382804870605 -0.0 0.46898940205574036 0.5872495174407959 0 1.0 0 0.0 0 0.0 0 0.0 -1.600374460220337 0.16600584983825684 0.21605446934700012 -0.6284676790237427 0.7778252363204956 -0.0 0.47173115611076355 0.5920871496200562 0 1.0 0 0.0 0 0.0 0 0.0 2.2703044414520264 0.1712646186351776 -0.2839455306529999 0.9896237254142761 -0.143559068441391 -0.0 0.8941553831100464 0.5866265892982483 0 1.0 0 0.0 0 0.0 0 0.0 2.2709429264068604 0.17657208442687988 0.21605448424816132 0.9954222440719604 -0.0953703448176384 -0.0 0.5757695436477661 0.4535619616508484 0 1.0 0 0.0 0 0.0 0 0.0 2.2703044414520264 0.1712646186351776 0.21605448424816132 0.9896237254142761 -0.143559068441391 -0.0 0.5758130550384521 0.4478500485420227 0 1.0 0 0.0 0 0.0 0 0.0 0.4093015193939209 0.06034325063228607 -0.2839455306529999 0.25818657875061035 0.9660634398460388 -0.0 0.9965918064117432 0.6522815227508545 0 1.0 0 0.0 0 0.0 0 0.0 0.40027856826782227 0.06281697750091553 0.21605446934700012 0.2719199061393738 0.9623096585273743 -0.0 1.471490740776062 0.49197155237197876 0 1.0 0 0.0 0 0.0 0 0.0 0.4093015193939209 0.06034325063228607 0.21605446934700012 0.25818657875061035 0.9660634398460388 -0.0 1.4769912958145142 0.48872554302215576 0 1.0 0 0.0 0 0.0 0 0.0 2.173231840133667 0.17352190613746643 -0.2839455306529999 -0.9626453518867493 0.2706381380558014 -0.0 0.947833776473999 0.6050781011581421 0 1.0 0 0.0 0 0.0 0 0.0 2.1722419261932373 0.1703452169895172 0.21605446934700012 -0.9460127353668213 0.3240455389022827 -0.0 0.5224907398223877 0.44164609909057617 0 1.0 0 0.0 0 0.0 0 0.0 2.173231840133667 0.17352190613746643 0.21605448424816132 -0.9626453518867493 0.2706381380558014 -0.0 0.5230244994163513 0.4455840587615967 0 1.0 0 0.0 0 0.0 0 0.0 1.4911367893218994 -0.06920288503170013 -0.2839455306529999 -0.9097872972488403 -0.41502121090888977 -0.0 0.9462549090385437 0.48951268196105957 0 1.0 0 0.0 0 0.0 0 0.0 1.4917690753936768 -0.07072312384843826 0.21605446934700012 -0.9355449080467224 -0.35312968492507935 -0.0 0.5331296324729919 0.3297526240348816 0 1.0 0 0.0 0 0.0 0 0.0 1.4911367893218994 -0.06920288503170013 0.21605446934700012 -0.9097872972488403 -0.41502121090888977 -0.0 0.5326599478721619 0.3313811421394348 0 1.0 0 0.0 0 0.0 0 0.0 -0.4959719181060791 -0.040162697434425354 -0.2839455306529999 0.9779046177864075 0.20896023511886597 -0.0 0.04741498827934265 0.5422860383987427 0 1.0 0 0.0 0 0.0 0 0.0 -0.4973633289337158 -0.03283150494098663 0.21605446934700012 0.9861140847206116 0.1658986210823059 -0.0 0.41938960552215576 0.40388965606689453 0 1.0 0 0.0 0 0.0 0 0.0 -0.4959719181060791 -0.040162697434425354 0.21605446934700012 0.9779046177864075 0.20896023511886597 -0.0 0.41962891817092896 0.39515578746795654 0 1.0 0 0.0 0 0.0 0 0.0 -1.3559409379959106 0.15980809926986694 -0.2839455306529999 0.6970732808113098 0.7169713377952576 -0.0 0.9463456273078918 0.777612566947937 0 1.0 0 0.0 0 0.0 0 0.0 -1.3595882654190063 0.16316479444503784 0.21605446934700012 0.6577044129371643 0.7532578706741333 -0.0 0.5950978398323059 0.6050815582275391 0 1.0 0 0.0 0 0.0 0 0.0 -1.3559409379959106 0.15980809926986694 0.21605446934700012 0.6970732808113098 0.7169713377952576 -0.0 0.5970795750617981 0.602271318435669 0 1.0 0 0.0 0 0.0 0 0.0 0.419231653213501 0.057757630944252014 -0.2839455306529999 0.2467421442270279 0.9690542221069336 -0.0 0.9896869659423828 0.6491220593452454 0 1.0 0 0.0 0 0.0 0 0.0 0.4093015193939209 0.06034325063228607 0.21605446934700012 0.25818657875061035 0.9660634398460388 -0.0 1.4769912958145142 0.48872554302215576 0 1.0 0 0.0 0 0.0 0 0.0 0.419231653213501 0.057757630944252014 0.21605446934700012 0.2467421442270279 0.9690542221069336 -0.0 1.483106255531311 0.48530352115631104 0 1.0 0 0.0 0 0.0 0 0.0 -0.3384511470794678 -0.03537578880786896 -0.2839455306529999 -0.9880367517471313 0.15405744314193726 -0.0 0.9505323171615601 0.5460243225097656 0 1.0 0 0.0 0 0.0 0 0.0 -0.33988499641418457 -0.04335521161556244 0.21605446934700012 -0.9794304966926575 0.20175786316394806 -0.0 0.5206946134567261 0.38057905435562134 0 1.0 0 0.0 0 0.0 0 0.0 -0.3384511470794678 -0.03537578880786896 0.21605446934700012 -0.9880367517471313 0.15405744314193726 -0.0 0.5214453935623169 0.3904763460159302 0 1.0 0 0.0 0 0.0 0 0.0 1.4917690753936768 -0.07072312384843826 -0.2839455306529999 -0.9355449080467224 -0.35312968492507935 -0.0 0.9459701180458069 0.4877855181694031 0 1.0 0 0.0 0 0.0 0 0.0 1.4923040866851807 -0.0722968727350235 0.21605446934700012 -0.9567247629165649 -0.29096347093582153 -0.0 0.5335382223129272 0.3280572295188904 0 1.0 0 0.0 0 0.0 0 0.0 1.4917690753936768 -0.07072312384843826 0.21605446934700012 -0.9355449080467224 -0.35312968492507935 -0.0 0.5331296324729919 0.3297526240348816 0 1.0 0 0.0 0 0.0 0 0.0 -1.6060515642166138 0.16110217571258545 -0.2839455306529999 -0.6779686808586121 0.7350382804870605 -0.0 0.13606640696525574 0.7579406499862671 0 1.0 0 0.0 0 0.0 0 0.0 -1.6114271879196167 0.15580931305885315 0.21605446934700012 -0.7241126894950867 0.6896572709083557 -0.0 0.46638426184654236 0.5821032524108887 0 1.0 0 0.0 0 0.0 0 0.0 -1.6060515642166138 0.16110217571258545 0.21605446934700012 -0.6779686808586121 0.7350382804870605 -0.0 0.46898940205574036 0.5872495174407959 0 1.0 0 0.0 0 0.0 0 0.0 2.2694103717803955 0.16600582003593445 -0.2839455306529999 0.9814752340316772 -0.191534161567688 -0.0 0.8950365781784058 0.5811769962310791 0 1.0 0 0.0 0 0.0 0 0.0 2.2703044414520264 0.1712646186351776 0.21605448424816132 0.9896237254142761 -0.143559068441391 -0.0 0.5758130550384521 0.4478500485420227 0 1.0 0 0.0 0 0.0 0 0.0 2.2694103717803955 0.16600582003593445 0.21605446934700012 0.9814752340316772 -0.191534161567688 -0.0 0.575734555721283 0.4421430826187134 0 1.0 0 0.0 0 0.0 0 0.0 0.4300692081451416 0.055060118436813354 -0.2839455306529999 0.2370677888393402 0.9714651703834534 -0.0 0.9821839332580566 0.6455293893814087 0 1.0 0 0.0 0 0.0 0 0.0 0.419231653213501 0.057757630944252014 0.21605446934700012 0.2467421442270279 0.9690542221069336 -0.0 1.483106255531311 0.48530352115631104 0 1.0 0 0.0 0 0.0 0 0.0 0.4300692081451416 0.055060118436813354 0.21605446934700012 0.2370677888393402 0.9714651703834534 -0.0 0.48983034491539 0.48172253370285034 0 1.0 0 0.0 0 0.0 0 0.0 2.1722419261932373 0.1703452169895172 -0.2839455306529999 -0.9460127353668213 0.3240455389022827 -0.0 0.9486297369003296 0.6012919545173645 0 1.0 0 0.0 0 0.0 0 0.0 2.171071767807007 0.1672171652317047 0.21605446934700012 -0.9265724420547485 0.37604907155036926 -0.0 0.5218402743339539 0.43775051832199097 0 1.0 0 0.0 0 0.0 0 0.0 2.1722419261932373 0.1703452169895172 0.21605446934700012 -0.9460127353668213 0.3240455389022827 -0.0 0.5224907398223877 0.44164609909057617 0 1.0 0 0.0 0 0.0 0 0.0 0.264054536819458 0.05692572891712189 -0.2839455306529999 -0.9741813540458679 -0.22565385699272156 -0.0 0.08384156227111816 0.6276837587356567 0 1.0 0 0.0 0 0.0 0 0.0 0.26619982719421387 0.04913482069969177 0.21605446934700012 -0.9519028067588806 -0.30628377199172974 -0.0 0.39759084582328796 0.4820782542228699 0 1.0 0 0.0 0 0.0 0 0.0 0.264054536819458 0.05692572891712189 0.21605446934700012 -0.9741813540458679 -0.22565385699272156 -0.0 0.39726391434669495 0.49021196365356445 0 1.0 0 0.0 0 0.0 0 0.0 -0.2400660514831543 -0.05275268852710724 -0.2839455306529999 0.982787549495697 -0.18463698029518127 -0.0 0.8987429141998291 0.5193524956703186 0 1.0 0 0.0 0 0.0 0 0.0 -0.23786115646362305 -0.039002448320388794 0.21605446934700012 0.9909970164299011 -0.13370159268379211 -0.0 0.5782297849655151 0.39878058433532715 0 1.0 0 0.0 0 0.0 0 0.0 -0.2400660514831543 -0.05275268852710724 0.21605446934700012 0.982787549495697 -0.18463698029518127 -0.0 0.5780972838401794 0.38382643461227417 0 1.0 0 0.0 0 0.0 0 0.0 1.3475701808929443 -0.07625070214271545 -0.2839455306529999 0.9353312849998474 0.35370951890945435 -0.0 0.03161323070526123 0.4852879047393799 0 1.0 0 0.0 0 0.0 0 0.0 1.346069574356079 -0.07194417715072632 0.21605446934700012 0.9521775245666504 0.30545976758003235 -0.0 0.4324910044670105 0.3339676856994629 0 1.0 0 0.0 0 0.0 0 0.0 1.3475701808929443 -0.07625070214271545 0.21605446934700012 0.9353312849998474 0.35370951890945435 -0.0 0.4331422448158264 0.3288542628288269 0 1.0 0 0.0 0 0.0 0 0.0 -1.3525587320327759 0.15633466839790344 -0.2839455306529999 0.7360759377479553 0.6768700480461121 -0.0 0.944506049156189 0.7736969590187073 0 1.0 0 0.0 0 0.0 0 0.0 -1.3559409379959106 0.15980809926986694 0.21605446934700012 0.6970732808113098 0.7169713377952576 -0.0 0.5970795750617981 0.602271318435669 0 1.0 0 0.0 0 0.0 0 0.0 -1.3525587320327759 0.15633466839790344 0.21605446934700012 0.7360759377479553 0.6768700480461121 -0.0 0.5989435911178589 0.5993620157241821 0 1.0 0 0.0 0 0.0 0 0.0 2.171071767807007 0.1672171652317047 -0.2839455306529999 -0.9265724420547485 0.37604907155036926 -0.0 0.9495338201522827 0.5975706577301025 0 1.0 0 0.0 0 0.0 0 0.0 2.169721841812134 0.16413778066635132 0.21605446934700012 -0.904599130153656 0.42622148990631104 -0.0 0.5210717916488647 0.4338977336883545 0 1.0 0 0.0 0 0.0 0 0.0 2.171071767807007 0.1672171652317047 0.21605446934700012 -0.9265724420547485 0.37604907155036926 -0.0 0.5218402743339539 0.43775051832199097 0 1.0 0 0.0 0 0.0 0 0.0 1.4923040866851807 -0.0722968727350235 -0.2839455306529999 -0.9567247629165649 -0.29096347093582153 -0.0 0.945744514465332 0.48600685596466064 0 1.0 0 0.0 0 0.0 0 0.0 1.4927418231964111 -0.07392413169145584 0.21605446934700012 -0.9733573198318481 -0.2292550504207611 -0.0 0.5338857173919678 0.3262949585914612 0 1.0 0 0.0 0 0.0 0 0.0 1.4923040866851807 -0.0722968727350235 0.21605446934700012 -0.9567247629165649 -0.29096347093582153 -0.0 0.5335382223129272 0.3280572295188904 0 1.0 0 0.0 0 0.0 0 0.0 -0.4943277835845947 -0.04707552492618561 -0.2839455306529999 0.9666737914085388 0.2559587359428406 -0.0 0.046220988035202026 0.5343106985092163 0 1.0 0 0.0 0 0.0 0 0.0 -0.4959719181060791 -0.040162697434425354 0.21605446934700012 0.9779046177864075 0.20896023511886597 -0.0 0.41962891817092896 0.39515578746795654 0 1.0 0 0.0 0 0.0 0 0.0 -0.4943277835845947 -0.04707552492618561 0.21605446934700012 0.9666737914085388 0.2559587359428406 -0.0 0.4200480282306671 0.38687312602996826 0 1.0 0 0.0 0 0.0 0 0.0 -1.349441647529602 0.15274447202682495 -0.2839455306529999 0.774163007736206 0.6329538822174072 -0.0 0.9428825378417969 0.7697458267211914 0 1.0 0 0.0 0 0.0 0 0.0 -1.3525587320327759 0.15633466839790344 0.21605446934700012 0.7360759377479553 0.6768700480461121 -0.0 0.5989435911178589 0.5993620157241821 0 1.0 0 0.0 0 0.0 0 0.0 -1.349441647529602 0.15274447202682495 0.21605446934700012 0.774163007736206 0.6329538822174072 -0.0 0.600692093372345 0.5963525772094727 0 1.0 0 0.0 0 0.0 0 0.0 0.44181394577026367 0.05225071310997009 -0.2839455306529999 0.22879727184772491 0.9734488725662231 -0.0 0.9741256237030029 0.6414514183998108 0 1.0 0 0.0 0 0.0 0 0.0 0.4300692081451416 0.055060118436813354 0.21605446934700012 0.2370677888393402 0.9714651703834534 -0.0 0.48983034491539 0.48172253370285034 0 1.0 0 0.0 0 0.0 0 0.0 0.44181394577026367 0.05225071310997009 0.21605446934700012 0.22879727184772491 0.9734488725662231 -0.0 0.4971467852592468 0.4780082106590271 0 1.0 0 0.0 0 0.0 0 0.0 -0.33988499641418457 -0.04335521161556244 -0.2839455306529999 -0.9794304966926575 0.20175786316394806 -0.0 0.9517782330513 0.5363379716873169 0 1.0 0 0.0 0 0.0 0 0.0 -0.34163761138916016 -0.0508895069360733 0.21605446934700012 -0.9672841429710388 0.2535783052444458 -0.0 0.5197115540504456 0.37125450372695923 0 1.0 0 0.0 0 0.0 0 0.0 -0.33988499641418457 -0.04335521161556244 0.21605446934700012 -0.9794304966926575 0.20175786316394806 -0.0 0.5206946134567261 0.38057905435562134 0 1.0 0 0.0 0 0.0 0 0.0 1.4927418231964111 -0.07392413169145584 -0.2839455306529999 -0.9733573198318481 -0.2292550504207611 -0.0 0.9455776214599609 0.4841769337654114 0 1.0 0 0.0 0 0.0 0 0.0 1.4930822849273682 -0.07560490816831589 0.21605446934700012 -0.9856258034706116 -0.16876736283302307 -0.0 0.5341720581054688 0.3244657516479492 0 1.0 0 0.0 0 0.0 0 0.0 1.4927418231964111 -0.07392413169145584 0.21605446934700012 -0.9733573198318481 -0.2292550504207611 -0.0 0.5338857173919678 0.3262949585914612 0 1.0 0 0.0 0 0.0 0 0.0 -1.6114271879196167 0.15580931305885315 -0.2839455306529999 -0.7241126894950867 0.6896572709083557 -0.0 0.1381559669971466 0.751362144947052 0 1.0 0 0.0 0 0.0 0 0.0 -1.6165012121200562 0.15012726187705994 0.21605446934700012 -0.766411304473877 0.6423230767250061 -0.0 0.46391069889068604 0.5766407251358032 0 1.0 0 0.0 0 0.0 0 0.0 -1.6114271879196167 0.15580931305885315 0.21605446934700012 -0.7241126894950867 0.6896572709083557 -0.0 0.46638426184654236 0.5821032524108887 0 1.0 0 0.0 0 0.0 0 0.0 2.268261194229126 0.160795658826828 -0.2839455306529999 0.9709768891334534 -0.23905149102210999 -0.0 0.8960297703742981 0.5757913589477539 0 1.0 0 0.0 0 0.0 0 0.0 2.2694103717803955 0.16600582003593445 0.21605446934700012 0.9814752340316772 -0.191534161567688 -0.0 0.575734555721283 0.4421430826187134 0 1.0 0 0.0 0 0.0 0 0.0 2.268261194229126 0.160795658826828 0.21605446934700012 0.9709768891334534 -0.23905149102210999 -0.0 0.5755319595336914 0.4364372491836548 0 1.0 0 0.0 0 0.0 0 0.0 0.4544661045074463 0.04932942986488342 -0.2839455306529999 0.22797326743602753 0.9736624956130981 -0.0 0.9655709862709045 0.6368472576141357 0 1.0 0 0.0 0 0.0 0 0.0 0.44181394577026367 0.05225071310997009 0.21605446934700012 0.22879727184772491 0.9734488725662231 -0.0 0.4971467852592468 0.4780082106590271 0 1.0 0 0.0 0 0.0 0 0.0 0.4544661045074463 0.04932942986488342 0.21605446934700012 0.22797326743602753 0.9736624956130981 -0.0 0.5050256252288818 0.4741957187652588 0 1.0 0 0.0 0 0.0 0 0.0 2.169721841812134 0.16413778066635132 -0.2839455306529999 -0.904599130153656 0.42622148990631104 -0.0 0.9505453109741211 0.593913197517395 0 1.0 0 0.0 0 0.0 0 0.0 2.16819167137146 0.16110703349113464 0.21605446934700012 -0.8803979754447937 0.4742271304130554 -0.0 0.5201833248138428 0.4300884008407593 0 1.0 0 0.0 0 0.0 0 0.0 2.169721841812134 0.16413778066635132 0.21605446934700012 -0.904599130153656 0.42622148990631104 -0.0 0.5210717916488647 0.4338977336883545 0 1.0 0 0.0 0 0.0 0 0.0 1.4930822849273682 -0.07560490816831589 -0.2839455306529999 -0.9856258034706116 -0.16876736283302307 -0.0 0.9454691410064697 0.4822959899902344 0 1.0 0 0.0 0 0.0 0 0.0 1.4933254718780518 -0.07733919471502304 0.21605446934700012 -0.9938963055610657 -0.11014129966497421 -0.0 0.5343972444534302 0.3225697875022888 0 1.0 0 0.0 0 0.0 0 0.0 1.4930822849273682 -0.07560490816831589 0.21605446934700012 -0.9856258034706116 -0.16876736283302307 -0.0 0.5341720581054688 0.3244657516479492 0 1.0 0 0.0 0 0.0 0 0.0 -0.4924304485321045 -0.0535699725151062 -0.2839455306529999 0.9516586661338806 0.30710774660110474 -0.0 0.04491466283798218 0.5268359780311584 0 1.0 0 0.0 0 0.0 0 0.0 -0.4943277835845947 -0.04707552492618561 0.21605446934700012 0.9666737914085388 0.2559587359428406 -0.0 0.4200480282306671 0.38687312602996826 0 1.0 0 0.0 0 0.0 0 0.0 -0.4924304485321045 -0.0535699725151062 0.21605446934700012 0.9516586661338806 0.30710774660110474 -0.0 0.4206518530845642 0.3790395259857178 0 1.0 0 0.0 0 0.0 0 0.0 -1.3465896844863892 0.14903751015663147 -0.2839455306529999 0.8107852339744568 0.5853145122528076 -0.0 0.9414651393890381 0.7657605409622192 0 1.0 0 0.0 0 0.0 0 0.0 -1.349441647529602 0.15274447202682495 0.21605446934700012 0.774163007736206 0.6329538822174072 -0.0 0.600692093372345 0.5963525772094727 0 1.0 0 0.0 0 0.0 0 0.0 -1.3465896844863892 0.14903751015663147 0.21605446934700012 0.8107852339744568 0.5853145122528076 -0.0 0.6023273468017578 0.5932416915893555 0 1.0 0 0.0 0 0.0 0 0.0 0.4672422409057617 0.04629625380039215 -0.2839455306529999 0.24109622836112976 0.9704886078834534 -0.0 0.9571162462234497 0.6317852735519409 0 1.0 0 0.0 0 0.0 0 0.0 0.4544661045074463 0.04932942986488342 0.21605446934700012 0.22797326743602753 0.9736624956130981 -0.0 0.5050256252288818 0.4741957187652588 0 1.0 0 0.0 0 0.0 0 0.0 0.4672422409057617 0.04629625380039215 0.21605446934700012 0.24109622836112976 0.9704886078834534 -0.0 0.5129404664039612 0.47033530473709106 0 1.0 0 0.0 0 0.0 0 0.0 2.16819167137146 0.16110703349113464 -0.2839455306529999 -0.8803979754447937 0.4742271304130554 -0.0 0.9516648054122925 0.5903184413909912 0 1.0 0 0.0 0 0.0 0 0.0 2.1664817333221436 0.1581249237060547 0.21605446934700012 -0.8543351292610168 0.5196996927261353 -0.0 0.5191733241081238 0.4263235330581665 0 1.0 0 0.0 0 0.0 0 0.0 2.16819167137146 0.16110703349113464 0.21605446934700012 -0.8803979754447937 0.4742271304130554 -0.0 0.5201833248138428 0.4300884008407593 0 1.0 0 0.0 0 0.0 0 0.0 -0.34163761138916016 -0.0508895069360733 -0.2839455306529999 -0.9672841429710388 0.2535783052444458 -0.0 0.9531815648078918 0.5272574424743652 0 1.0 0 0.0 0 0.0 0 0.0 -0.34370875358581543 -0.05797867476940155 0.21605446934700012 -0.9508652091026306 0.3095797598361969 -0.0 0.5184904336929321 0.36250418424606323 0 1.0 0 0.0 0 0.0 0 0.0 -0.34163761138916016 -0.0508895069360733 0.21605446934700012 -0.9672841429710388 0.2535783052444458 -0.0 0.5197115540504456 0.37125450372695923 0 1.0 0 0.0 0 0.0 0 0.0 -1.6165012121200562 0.15012726187705994 -0.2839455306529999 -0.766411304473877 0.6423230767250061 -0.0 0.13994893431663513 0.7445569038391113 0 1.0 0 0.0 0 0.0 0 0.0 -1.621273398399353 0.1440560519695282 0.21605446934700012 -0.8045899868011475 0.5937681198120117 -0.0 0.4615637958049774 0.5708528161048889 0 1.0 0 0.0 0 0.0 0 0.0 -1.6165012121200562 0.15012726187705994 0.21605446934700012 -0.766411304473877 0.6423230767250061 -0.0 0.46391069889068604 0.5766407251358032 0 1.0 0 0.0 0 0.0 0 0.0 0.26619982719421387 0.04913482069969177 -0.2839455306529999 -0.9519028067588806 -0.30628377199172974 -0.0 0.08226463198661804 0.6200634241104126 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 0.04166984558105469 0.21605446934700012 -0.921994686126709 -0.3871577978134155 -0.0 0.3982294201850891 0.4741182327270508 0 1.0 0 0.0 0 0.0 0 0.0 0.26619982719421387 0.04913482069969177 0.21605446934700012 -0.9519028067588806 -0.30628377199172974 -0.0 0.39759084582328796 0.4820782542228699 0 1.0 0 0.0 0 0.0 0 0.0 1.5911071300506592 -0.0843055248260498 -0.2839455306529999 0.9894406199455261 -0.14477980136871338 -0.0 0.8969948291778564 0.47402477264404297 0 1.0 0 0.0 0 0.0 0 0.0 1.5919973850250244 -0.07608164846897125 0.21605446934700012 0.9974364638328552 -0.0714743509888649 -0.0 0.5896905660629272 0.34646421670913696 0 1.0 0 0.0 0 0.0 0 0.0 1.5911071300506592 -0.0843055248260498 0.21605446934700012 0.9894406199455261 -0.14477980136871338 -0.0 0.5899286270141602 0.33825957775115967 0 1.0 0 0.0 0 0.0 0 0.0 2.2668564319610596 0.15563416481018066 -0.2839455306529999 0.9582812190055847 -0.2857753336429596 -0.0 0.8971360921859741 0.5704658031463623 0 1.0 0 0.0 0 0.0 0 0.0 2.268261194229126 0.160795658826828 0.21605446934700012 0.9709768891334534 -0.23905149102210999 -0.0 0.5755319595336914 0.4364372491836548 0 1.0 0 0.0 0 0.0 0 0.0 2.2668564319610596 0.15563416481018066 0.21605446934700012 0.9582812190055847 -0.2857753336429596 -0.0 0.5752025246620178 0.43072861433029175 0 1.0 0 0.0 0 0.0 0 0.0 -0.24290084838867188 -0.06589483469724655 -0.2839455306529999 0.9710684418678284 -0.2387463003396988 -0.0 0.9010788798332214 0.5057295560836792 0 1.0 0 0.0 0 0.0 0 0.0 -0.2400660514831543 -0.05275268852710724 0.21605446934700012 0.982787549495697 -0.18463698029518127 -0.0 0.5780972838401794 0.38382643461227417 0 1.0 0 0.0 0 0.0 0 0.0 -0.24290084838867188 -0.06589483469724655 0.21605446934700012 0.9710684418678284 -0.2387463003396988 -0.0 0.5776110291481018 0.3694540858268738 0 1.0 0 0.0 0 0.0 0 0.0 1.3492510318756104 -0.08036507666110992 -0.2839455306529999 0.9149143695831299 0.4035767614841461 -0.0 0.030552387237548828 0.480659544467926 0 1.0 0 0.0 0 0.0 0 0.0 1.3475701808929443 -0.07625070214271545 0.21605446934700012 0.9353312849998474 0.35370951890945435 -0.0 0.4331422448158264 0.3288542628288269 0 1.0 0 0.0 0 0.0 0 0.0 1.3492510318756104 -0.08036507666110992 0.21605446934700012 0.9149143695831299 0.4035767614841461 -0.0 0.4339316487312317 0.3239462971687317 0 1.0 0 0.0 0 0.0 0 0.0 -1.3440028429031372 0.14521381258964539 -0.2839455306529999 0.8453016877174377 0.5342265367507935 -0.0 0.9402449131011963 0.7617413997650146 0 1.0 0 0.0 0 0.0 0 0.0 -1.3465896844863892 0.14903751015663147 0.21605446934700012 0.8107852339744568 0.5853145122528076 -0.0 0.6023273468017578 0.5932416915893555 0 1.0 0 0.0 0 0.0 0 0.0 -1.3440028429031372 0.14521381258964539 0.21605446934700012 0.8453016877174377 0.5342265367507935 -0.0 0.6038513779640198 0.5900272727012634 0 1.0 0 0.0 0 0.0 0 0.0 0.47935914993286133 0.04315118491649628 -0.2839455306529999 0.2623371183872223 0.964964747428894 -0.0 0.9493167996406555 0.6264195442199707 0 1.0 0 0.0 0 0.0 0 0.0 0.4672422409057617 0.04629625380039215 0.21605446934700012 0.24109622836112976 0.9704886078834534 -0.0 0.5129404664039612 0.47033530473709106 0 1.0 0 0.0 0 0.0 0 0.0 0.47935914993286133 0.04315118491649628 0.21605446934700012 0.2623371183872223 0.964964747428894 -0.0 0.5203794836997986 0.4664573073387146 0 1.0 0 0.0 0 0.0 0 0.0 2.1664817333221436 0.1581249237060547 -0.2839455306529999 -0.8543351292610168 0.5196996927261353 -0.0 0.9528919458389282 0.5867855548858643 0 1.0 0 0.0 0 0.0 0 0.0 2.1645915508270264 0.15519148111343384 0.21605446934700012 -0.826776921749115 0.5624866485595703 -0.0 0.5180397033691406 0.42260414361953735 0 1.0 0 0.0 0 0.0 0 0.0 2.1664817333221436 0.1581249237060547 0.21605446934700012 -0.8543351292610168 0.5196996927261353 -0.0 0.5191733241081238 0.4263235330581665 0 1.0 0 0.0 0 0.0 0 0.0 1.4933254718780518 -0.07733919471502304 -0.2839455306529999 -0.9938963055610657 -0.11014129966497421 -0.0 0.9454188346862793 0.4803643226623535 0 1.0 0 0.0 0 0.0 0 0.0 1.493471384048462 -0.0791269913315773 0.21605446934700012 -0.9985350966453552 -0.05386516824364662 -0.0 0.534561038017273 0.3206070065498352 0 1.0 0 0.0 0 0.0 0 0.0 1.4933254718780518 -0.07733919471502304 0.21605446934700012 -0.9938963055610657 -0.11014129966497421 -0.0 0.5343972444534302 0.3225697875022888 0 1.0 0 0.0 0 0.0 0 0.0 -0.4902803897857666 -0.05964605510234833 -0.2839455306529999 0.9319742321968079 0.36243781447410583 -0.0 0.0434948205947876 0.5198570489883423 0 1.0 0 0.0 0 0.0 0 0.0 -0.4924304485321045 -0.0535699725151062 0.21605446934700012 0.9516586661338806 0.30710774660110474 -0.0 0.4206518530845642 0.3790395259857178 0 1.0 0 0.0 0 0.0 0 0.0 -0.4902803897857666 -0.05964605510234833 0.21605446934700012 0.9319742321968079 0.36243781447410583 -0.0 0.42144501209259033 0.3716520071029663 0 1.0 0 0.0 0 0.0 0 0.0 -1.3416811227798462 0.1412733793258667 -0.2839455306529999 0.8803369402885437 0.4743186831474304 -0.0 0.9392135143280029 0.7576877474784851 0 1.0 0 0.0 0 0.0 0 0.0 -1.3440028429031372 0.14521381258964539 0.21605446934700012 0.8453016877174377 0.5342265367507935 -0.0 0.6038513779640198 0.5900272727012634 0 1.0 0 0.0 0 0.0 0 0.0 -1.3416811227798462 0.1412733793258667 0.21605446934700012 0.8803369402885437 0.4743186831474304 -0.0 0.6052660942077637 0.586706817150116 0 1.0 0 0.0 0 0.0 0 0.0 0.4908168315887451 0.0398942232131958 -0.2839455306529999 0.2856227159500122 0.9583117365837097 -0.0 0.9421719908714294 0.6208404302597046 0 1.0 0 0.0 0 0.0 0 0.0 0.47935914993286133 0.04315118491649628 0.21605446934700012 0.2623371183872223 0.964964747428894 -0.0 0.5203794836997986 0.4664573073387146 0 1.0 0 0.0 0 0.0 0 0.0 0.4908168315887451 0.0398942232131958 0.21605446934700012 0.2856227159500122 0.9583117365837097 -0.0 0.5273312330245972 0.46256983280181885 0 1.0 0 0.0 0 0.0 0 0.0 -0.34370875358581543 -0.05797867476940155 -0.2839455306529999 -0.9508652091026306 0.3095797598361969 -0.0 0.9547421932220459 0.518780529499054 0 1.0 0 0.0 0 0.0 0 0.0 -0.3460984230041504 -0.06462271511554718 0.21605446934700012 -0.9291665554046631 0.36960965394973755 -0.0 0.517025351524353 0.35432738065719604 0 1.0 0 0.0 0 0.0 0 0.0 -0.34370875358581543 -0.05797867476940155 0.21605446934700012 -0.9508652091026306 0.3095797598361969 -0.0 0.5184904336929321 0.36250418424606323 0 1.0 0 0.0 0 0.0 0 0.0 1.2448337078094482 -0.0778159350156784 -0.2839455306529999 -0.9610888957977295 -0.2762230336666107 -0.0 0.08192142844200134 0.48803091049194336 0 1.0 0 0.0 0 0.0 0 0.0 1.2473232746124268 -0.08647764474153519 0.21605446934700012 -0.9530014991760254 -0.3029267191886902 -0.0 0.37815624475479126 0.34659135341644287 0 1.0 0 0.0 0 0.0 0 0.0 1.2448337078094482 -0.0778159350156784 0.21605446934700012 -0.9610888957977295 -0.2762230336666107 -0.0 0.3779359459877014 0.35555046796798706 0 1.0 0 0.0 0 0.0 0 0.0 -1.621273398399353 0.1440560519695282 -0.2839455306529999 -0.8045899868011475 0.5937681198120117 -0.0 0.14146259427070618 0.7375191450119019 0 1.0 0 0.0 0 0.0 0 0.0 -1.6257442235946655 0.13759565353393555 0.21605446934700012 -0.8385875821113586 0.5446943640708923 -0.0 0.4593387544155121 0.5647287964820862 0 1.0 0 0.0 0 0.0 0 0.0 -1.621273398399353 0.1440560519695282 0.21605446934700012 -0.8045899868011475 0.5937681198120117 -0.0 0.4615637958049774 0.5708528161048889 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 0.04166984558105469 -0.2839455306529999 -0.921994686126709 -0.3871577978134155 -0.0 0.08042562007904053 0.6127703785896301 0 1.0 0 0.0 0 0.0 0 0.0 0.27232933044433594 0.034530818462371826 0.21605446934700012 -0.8845790028572083 -0.4663533568382263 -0.0 0.3991908133029938 0.4663246273994446 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 0.04166984558105469 0.21605446934700012 -0.921994686126709 -0.3871577978134155 -0.0 0.3982294201850891 0.4741182327270508 0 1.0 0 0.0 0 0.0 0 0.0 2.2651965618133545 0.15052130818367004 -0.2839455306529999 0.9434797167778015 -0.33136996626853943 -0.0 0.8983566761016846 0.5651962161064148 0 1.0 0 0.0 0 0.0 0 0.0 2.2668564319610596 0.15563416481018066 0.21605446934700012 0.9582812190055847 -0.2857753336429596 -0.0 0.5752025246620178 0.43072861433029175 0 1.0 0 0.0 0 0.0 0 0.0 2.2651965618133545 0.15052130818367004 0.21605446934700012 0.9434797167778015 -0.33136996626853943 -0.0 0.574743390083313 0.4250136613845825 0 1.0 0 0.0 0 0.0 0 0.0 2.1645915508270264 0.15519148111343384 -0.2839455306529999 -0.826776921749115 0.5624866485595703 -0.0 0.9542272686958313 0.5833134055137634 0 1.0 0 0.0 0 0.0 0 0.0 2.1625216007232666 0.1523066759109497 0.21605446934700012 -0.791283905506134 0.6114078164100647 -0.0 0.5167807936668396 0.41893166303634644 0 1.0 0 0.0 0 0.0 0 0.0 2.1645915508270264 0.15519148111343384 0.21605446934700012 -0.826776921749115 0.5624866485595703 -0.0 0.5180397033691406 0.42260414361953735 0 1.0 0 0.0 0 0.0 0 0.0 1.493471384048462 -0.0791269913315773 -0.2839455306529999 -0.9985350966453552 -0.05386516824364662 -0.0 0.9454262256622314 0.4783821105957031 0 1.0 0 0.0 0 0.0 0 0.0 1.4935200214385986 -0.08096829801797867 0.21605446934700012 -0.999969482421875 0.00357066560536623 -0.0 0.534663200378418 0.31857776641845703 0 1.0 0 0.0 0 0.0 0 0.0 1.493471384048462 -0.0791269913315773 0.21605446934700012 -0.9985350966453552 -0.05386516824364662 -0.0 0.534561038017273 0.3206070065498352 0 1.0 0 0.0 0 0.0 0 0.0 -0.48787713050842285 -0.06530377268791199 -0.2839455306529999 0.9066743850708008 0.4217963218688965 -0.0 0.04195922613143921 0.5133682489395142 0 1.0 0 0.0 0 0.0 0 0.0 -0.4902803897857666 -0.05964605510234833 0.21605446934700012 0.9319742321968079 0.36243781447410583 -0.0 0.42144501209259033 0.3716520071029663 0 1.0 0 0.0 0 0.0 0 0.0 -0.48787713050842285 -0.06530377268791199 0.21605446934700012 0.9066743850708008 0.4217963218688965 -0.0 0.4224327802658081 0.36470645666122437 0 1.0 0 0.0 0 0.0 0 0.0 -1.3395832777023315 0.13699603080749512 -0.2839455306529999 0.9144566059112549 0.4046449065208435 -0.0 0.9383580684661865 0.7533990740776062 0 1.0 0 0.0 0 0.0 0 0.0 -1.3416811227798462 0.1412733793258667 0.21605446934700012 0.8803369402885437 0.4743186831474304 -0.0 0.6052660942077637 0.586706817150116 0 1.0 0 0.0 0 0.0 0 0.0 -1.3395832777023315 0.13699603080749512 0.21605446934700012 0.9144566059112549 0.4046449065208435 -0.0 0.6066126227378845 0.5830934643745422 0 1.0 0 0.0 0 0.0 0 0.0 0.5016152858734131 0.036525383591651917 -0.2839455306529999 0.3112582862377167 0.9503158926963806 -0.0 0.9356679320335388 0.6151246428489685 0 1.0 0 0.0 0 0.0 0 0.0 0.4908168315887451 0.0398942232131958 0.21605446934700012 0.2856227159500122 0.9583117365837097 -0.0 0.5273312330245972 0.46256983280181885 0 1.0 0 0.0 0 0.0 0 0.0 0.5016152858734131 0.036525383591651917 0.21605446934700012 0.3112582862377167 0.9503158926963806 -0.0 0.5337937474250793 0.4586760401725769 0 1.0 0 0.0 0 0.0 0 0.0 2.1625216007232666 0.1523066759109497 -0.2839455306529999 -0.791283905506134 0.6114078164100647 -0.0 0.9556704759597778 0.5799009799957275 0 1.0 0 0.0 0 0.0 0 0.0 2.1608784198760986 0.15032914280891418 0.21605446934700012 -0.7531358003616333 0.6578570008277893 -0.0 0.5157681703567505 0.4164031744003296 0 1.0 0 0.0 0 0.0 0 0.0 2.1625216007232666 0.1523066759109497 0.21605446934700012 -0.791283905506134 0.6114078164100647 -0.0 0.5167807936668396 0.41893166303634644 0 1.0 0 0.0 0 0.0 0 0.0 -0.3460984230041504 -0.06462271511554718 -0.2839455306529999 -0.9291665554046631 0.36960965394973755 -0.0 0.9564605951309204 0.5109021067619324 0 1.0 0 0.0 0 0.0 0 0.0 -0.34880685806274414 -0.07082163542509079 0.21605446934700012 -0.9012420773506165 0.43327128887176514 -0.0 0.5153106451034546 0.34672248363494873 0 1.0 0 0.0 0 0.0 0 0.0 -0.3460984230041504 -0.06462271511554718 0.21605446934700012 -0.9291665554046631 0.36960965394973755 -0.0 0.517025351524353 0.35432738065719604 0 1.0 0 0.0 0 0.0 0 0.0 -1.6257442235946655 0.13759565353393555 -0.2839455306529999 -0.8385875821113586 0.5446943640708923 -0.0 0.14271312952041626 0.7302404642105103 0 1.0 0 0.0 0 0.0 0 0.0 -1.6299132108688354 0.13074606657028198 0.21605446934700012 -0.868434727191925 0.49577319622039795 -0.0 0.457231342792511 0.5582568645477295 0 1.0 0 0.0 0 0.0 0 0.0 -1.6257442235946655 0.13759565353393555 0.21605446934700012 -0.8385875821113586 0.5446943640708923 -0.0 0.4593387544155121 0.5647287964820862 0 1.0 0 0.0 0 0.0 0 0.0 1.3511121273040771 -0.08428728580474854 -0.2839455306529999 0.8907132148742676 0.4545121490955353 -0.0 0.029400289058685303 0.4762616753578186 0 1.0 0 0.0 0 0.0 0 0.0 1.3492510318756104 -0.08036507666110992 0.21605446934700012 0.9149143695831299 0.4035767614841461 -0.0 0.4339316487312317 0.3239462971687317 0 1.0 0 0.0 0 0.0 0 0.0 1.3511121273040771 -0.08428728580474854 0.21605446934700012 0.8907132148742676 0.4545121490955353 -0.0 0.43486201763153076 0.3192406892776489 0 1.0 0 0.0 0 0.0 0 0.0 0.5117547512054443 0.03304465115070343 -0.2839455306529999 0.3395489454269409 0.9405804872512817 -0.0 0.9297819137573242 0.6093344688415527 0 1.0 0 0.0 0 0.0 0 0.0 0.5016152858734131 0.036525383591651917 0.21605446934700012 0.3112582862377167 0.9503158926963806 -0.0 0.5337937474250793 0.4586760401725769 0 1.0 0 0.0 0 0.0 0 0.0 0.5117547512054443 0.03304465115070343 0.21605446934700012 0.3395489454269409 0.9405804872512817 -0.0 0.5397725105285645 0.4547746181488037 0 1.0 0 0.0 0 0.0 0 0.0 1.4935200214385986 -0.08096829801797867 -0.2839455306529999 -0.999969482421875 0.00357066560536623 -0.0 0.9454910755157471 0.47634971141815186 0 1.0 0 0.0 0 0.0 0 0.0 1.49342942237854 -0.08366581052541733 0.21605446934700012 -0.9976500868797302 0.06833094358444214 -0.0 0.5347064137458801 0.3155938982963562 0 1.0 0 0.0 0 0.0 0 0.0 1.4935200214385986 -0.08096829801797867 0.21605446934700012 -0.999969482421875 0.00357066560536623 -0.0 0.534663200378418 0.31857776641845703 0 1.0 0 0.0 0 0.0 0 0.0 0.27232933044433594 0.034530818462371826 -0.2839455306529999 -0.8845790028572083 -0.4663533568382263 -0.0 0.07831719517707825 0.605796217918396 0 1.0 0 0.0 0 0.0 0 0.0 0.27631354331970215 0.027717724442481995 0.21605446934700012 -0.8403576612472534 -0.5420087575912476 -0.0 0.40048840641975403 0.45869070291519165 0 1.0 0 0.0 0 0.0 0 0.0 0.27232933044433594 0.034530818462371826 0.21605446934700012 -0.8845790028572083 -0.4663533568382263 -0.0 0.3991908133029938 0.4663246273994446 0 1.0 0 0.0 0 0.0 0 0.0 2.2632811069488525 0.14545708894729614 -0.2839455306529999 0.9267555475234985 -0.37559130787849426 -0.0 0.8996932506561279 0.5599786043167114 0 1.0 0 0.0 0 0.0 0 0.0 2.2651965618133545 0.15052130818367004 0.21605446934700012 0.9434797167778015 -0.33136996626853943 -0.0 0.574743390083313 0.4250136613845825 0 1.0 0 0.0 0 0.0 0 0.0 2.2632811069488525 0.14545708894729614 0.21605446934700012 0.9267555475234985 -0.37559130787849426 -0.0 0.5741510391235352 0.4192887544631958 0 1.0 0 0.0 0 0.0 0 0.0 -0.48522114753723145 -0.07054311782121658 -0.2839455306529999 0.8746299743652344 0.4847254753112793 -0.0 0.0403059720993042 0.5073632597923279 0 1.0 0 0.0 0 0.0 0 0.0 -0.48787713050842285 -0.06530377268791199 0.21605446934700012 0.9066743850708008 0.4217963218688965 -0.0 0.4224327802658081 0.36470645666122437 0 1.0 0 0.0 0 0.0 0 0.0 -0.48522114753723145 -0.07054311782121658 0.21605446934700012 0.8746299743652344 0.4847254753112793 -0.0 0.4236200749874115 0.3581991195678711 0 1.0 0 0.0 0 0.0 0 0.0 -1.33766770362854 0.1321616768836975 -0.2839455306529999 0.9413434267044067 0.33738210797309875 -0.0 0.9376671314239502 0.7486661672592163 0 1.0 0 0.0 0 0.0 0 0.0 -1.3395832777023315 0.13699603080749512 0.21605446934700012 0.9144566059112549 0.4046449065208435 -0.0 0.6066126227378845 0.5830934643745422 0 1.0 0 0.0 0 0.0 0 0.0 -1.33766770362854 0.1321616768836975 0.21605446934700012 0.9413434267044067 0.33738210797309875 -0.0 0.6079329252243042 0.5789923667907715 0 1.0 0 0.0 0 0.0 0 0.0 2.1608784198760986 0.15032914280891418 -0.2839455306529999 -0.7531358003616333 0.6578570008277893 -0.0 0.9567999243736267 0.5775706768035889 0 1.0 0 0.0 0 0.0 0 0.0 2.15875506401062 0.14801594614982605 0.21605446934700012 -0.7249366641044617 0.6888027787208557 -0.0 0.5144461989402771 0.4134361743927002 0 1.0 0 0.0 0 0.0 0 0.0 2.1608784198760986 0.15032914280891418 0.21605446934700012 -0.7531358003616333 0.6578570008277893 -0.0 0.5157681703567505 0.4164031744003296 0 1.0 0 0.0 0 0.0 0 0.0 1.49342942237854 -0.08366581052541733 -0.2839455306529999 -0.9976500868797302 0.06833094358444214 -0.0 0.9456768035888672 0.4733878970146179 0 1.0 0 0.0 0 0.0 0 0.0 1.493159532546997 -0.08627089112997055 0.21605446934700012 -0.9901730418205261 0.13968321681022644 -0.0 0.5346271991729736 0.31269872188568115 0 1.0 0 0.0 0 0.0 0 0.0 1.49342942237854 -0.08366581052541733 0.21605446934700012 -0.9976500868797302 0.06833094358444214 -0.0 0.5347064137458801 0.3155938982963562 0 1.0 0 0.0 0 0.0 0 0.0 -0.24636578559875488 -0.07842888683080673 -0.2839455306529999 0.9552598595619202 -0.29572436213493347 -0.0 0.903641939163208 0.4928281903266907 0 1.0 0 0.0 0 0.0 0 0.0 -0.24290084838867188 -0.06589483469724655 0.21605446934700012 0.9710684418678284 -0.2387463003396988 -0.0 0.5776110291481018 0.3694540858268738 0 1.0 0 0.0 0 0.0 0 0.0 -0.24636578559875488 -0.07842888683080673 0.21605446934700012 0.9552598595619202 -0.29572436213493347 -0.0 0.576752245426178 0.35565972328186035 0 1.0 0 0.0 0 0.0 0 0.0 -1.3359346389770508 0.12677031755447388 -0.2839455306529999 0.9602038860321045 0.2792138457298279 -0.0 0.9371362924575806 0.7434725761413574 0 1.0 0 0.0 0 0.0 0 0.0 -1.33766770362854 0.1321616768836975 0.21605446934700012 0.9413434267044067 0.33738210797309875 -0.0 0.6079329252243042 0.5789923667907715 0 1.0 0 0.0 0 0.0 0 0.0 -1.3359346389770508 0.12677031755447388 0.21605446934700012 0.9602038860321045 0.2792138457298279 -0.0 0.6092292666435242 0.574386715888977 0 1.0 0 0.0 0 0.0 0 0.0 0.5212349891662598 0.029452025890350342 -0.2839455306529999 0.3708304166793823 0.9286782145500183 -0.0 0.9244858622550964 0.6035184860229492 0 1.0 0 0.0 0 0.0 0 0.0 0.5117547512054443 0.03304465115070343 0.21605446934700012 0.3395489454269409 0.9405804872512817 -0.0 0.5397725105285645 0.4547746181488037 0 1.0 0 0.0 0 0.0 0 0.0 0.5212349891662598 0.029452025890350342 0.21605446934700012 0.3708304166793823 0.9286782145500183 -0.0 0.5452784299850464 0.450860857963562 0 1.0 0 0.0 0 0.0 0 0.0 2.15875506401062 0.14801594614982605 -0.2839455306529999 -0.7249366641044617 0.6888027787208557 -0.0 0.958246648311615 0.5748494267463684 0 1.0 0 0.0 0 0.0 0 0.0 2.1561501026153564 0.1453670859336853 0.21605446934700012 -0.7040925025939941 0.7100741863250732 -0.0 0.5128077268600464 0.41003090143203735 0 1.0 0 0.0 0 0.0 0 0.0 2.15875506401062 0.14801594614982605 0.21605446934700012 -0.7249366641044617 0.6888027787208557 -0.0 0.5144461989402771 0.4134361743927002 0 1.0 0 0.0 0 0.0 0 0.0 -1.6299132108688354 0.13074606657028198 -0.2839455306529999 -0.868434727191925 0.49577319622039795 -0.0 0.14371469616889954 0.7227109670639038 0 1.0 0 0.0 0 0.0 0 0.0 -1.633780837059021 0.1235072910785675 0.21605446934700012 -0.8942533731460571 0.44749289751052856 -0.0 0.4552372395992279 0.5514237880706787 0 1.0 0 0.0 0 0.0 0 0.0 -1.6299132108688354 0.13074606657028198 0.21605446934700012 -0.868434727191925 0.49577319622039795 -0.0 0.457231342792511 0.5582568645477295 0 1.0 0 0.0 0 0.0 0 0.0 -0.4823117256164551 -0.07536409795284271 -0.2839455306529999 0.8384044766426086 0.5450300574302673 -0.0 0.03853201866149902 0.5018355250358582 0 1.0 0 0.0 0 0.0 0 0.0 -0.48522114753723145 -0.07054311782121658 0.21605446934700012 0.8746299743652344 0.4847254753112793 -0.0 0.4236200749874115 0.3581991195678711 0 1.0 0 0.0 0 0.0 0 0.0 -0.4823117256164551 -0.07536409795284271 0.21605446934700012 0.8384044766426086 0.5450300574302673 -0.0 0.42501261830329895 0.3521260619163513 0 1.0 0 0.0 0 0.0 0 0.0 1.3531529903411865 -0.08801734447479248 -0.2839455306529999 0.8624836206436157 0.5060274004936218 -0.0 0.028156548738479614 0.4720897674560547 0 1.0 0 0.0 0 0.0 0 0.0 1.3511121273040771 -0.08428728580474854 0.21605446934700012 0.8907132148742676 0.4545121490955353 -0.0 0.43486201763153076 0.3192406892776489 0 1.0 0 0.0 0 0.0 0 0.0 1.3531529903411865 -0.08801734447479248 0.21605446934700012 0.8624836206436157 0.5060274004936218 -0.0 0.435935914516449 0.31473487615585327 0 1.0 0 0.0 0 0.0 0 0.0 0.5300559997558594 0.02574750781059265 -0.2839455306529999 0.4054689109325409 0.9140903949737549 -0.0 0.9197486042976379 0.5977127552032471 0 1.0 0 0.0 0 0.0 0 0.0 0.5212349891662598 0.029452025890350342 0.21605446934700012 0.3708304166793823 0.9286782145500183 -0.0 0.5452784299850464 0.450860857963562 0 1.0 0 0.0 0 0.0 0 0.0 0.5300559997558594 0.02574750781059265 0.21605446934700012 0.4054689109325409 0.9140903949737549 -0.0 0.550326406955719 0.4469273090362549 0 1.0 0 0.0 0 0.0 0 0.0 -0.34880685806274414 -0.07082163542509079 -0.2839455306529999 -0.9012420773506165 0.43327128887176514 -0.0 0.958337664604187 0.5036150813102722 0 1.0 0 0.0 0 0.0 0 0.0 -0.3518340587615967 -0.07657542824745178 0.21605446934700012 -0.8661457896232605 0.4997711181640625 -0.0 0.5133412480354309 0.33968716859817505 0 1.0 0 0.0 0 0.0 0 0.0 -0.34880685806274414 -0.07082163542509079 0.21605446934700012 -0.9012420773506165 0.43327128887176514 -0.0 0.5153106451034546 0.34672248363494873 0 1.0 0 0.0 0 0.0 0 0.0 0.27631354331970215 0.027717724442481995 -0.2839455306529999 -0.8403576612472534 -0.5420087575912476 -0.0 0.07593002915382385 0.5991324186325073 0 1.0 0 0.0 0 0.0 0 0.0 0.2809107303619385 0.021230563521385193 0.21605446934700012 -0.790459930896759 -0.6125065088272095 -0.0 0.4021376669406891 0.451210618019104 0 1.0 0 0.0 0 0.0 0 0.0 0.27631354331970215 0.027717724442481995 0.21605446934700012 -0.8403576612472534 -0.5420087575912476 -0.0 0.40048840641975403 0.45869070291519165 0 1.0 0 0.0 0 0.0 0 0.0 2.2611100673675537 0.14044153690338135 -0.2839455306529999 0.9083529114723206 -0.41816461086273193 -0.0 0.9011474847793579 0.5548092126846313 0 1.0 0 0.0 0 0.0 0 0.0 2.2632811069488525 0.14545708894729614 0.21605446934700012 0.9267555475234985 -0.37559130787849426 -0.0 0.5741510391235352 0.4192887544631958 0 1.0 0 0.0 0 0.0 0 0.0 2.2611100673675537 0.14044153690338135 0.21605446934700012 0.9083529114723206 -0.41816461086273193 -0.0 0.5734215378761292 0.4135507345199585 0 1.0 0 0.0 0 0.0 0 0.0 1.5896236896514893 -0.0923299491405487 -0.2839455306529999 0.9756157398223877 -0.21933652460575104 -0.0 0.8982555270195007 0.4663318991661072 0 1.0 0 0.0 0 0.0 0 0.0 1.5911071300506592 -0.0843055248260498 0.21605446934700012 0.9894406199455261 -0.14477980136871338 -0.0 0.5899286270141602 0.33825957775115967 0 1.0 0 0.0 0 0.0 0 0.0 1.5896236896514893 -0.0923299491405487 0.21605446934700012 0.9756157398223877 -0.21933652460575104 -0.0 0.5898779034614563 0.3301680088043213 0 1.0 0 0.0 0 0.0 0 0.0 -1.3343840837478638 0.12082192301750183 -0.2839455306529999 0.9733878374099731 0.22907193005084991 -0.0 0.9367607831954956 0.7377991676330566 0 1.0 0 0.0 0 0.0 0 0.0 -1.3359346389770508 0.12677031755447388 0.21605446934700012 0.9602038860321045 0.2792138457298279 -0.0 0.6092292666435242 0.574386715888977 0 1.0 0 0.0 0 0.0 0 0.0 -1.3343840837478638 0.12082192301750183 0.21605446934700012 0.9733878374099731 0.22907193005084991 -0.0 0.6105040311813354 0.569257378578186 0 1.0 0 0.0 0 0.0 0 0.0 2.1561501026153564 0.1453670859336853 -0.2839455306529999 -0.7040925025939941 0.7100741863250732 -0.0 0.9600106477737427 0.5717301964759827 0 1.0 0 0.0 0 0.0 0 0.0 2.1530635356903076 0.14238256216049194 0.21605446934700012 -0.6881923675537109 0.7255164980888367 -0.0 0.5108454823493958 0.406189501285553 0 1.0 0 0.0 0 0.0 0 0.0 2.1561501026153564 0.1453670859336853 0.21605446934700012 -0.7040925025939941 0.7100741863250732 -0.0 0.5128077268600464 0.41003090143203735 0 1.0 0 0.0 0 0.0 0 0.0 1.493159532546997 -0.08627089112997055 -0.2839455306529999 -0.9901730418205261 0.13968321681022644 -0.0 0.9459576606750488 0.47054433822631836 0 1.0 0 0.0 0 0.0 0 0.0 1.4927098751068115 -0.08878353983163834 0.21605446934700012 -0.9767754077911377 0.2141483873128891 -0.0 0.5344240665435791 0.30988991260528564 0 1.0 0 0.0 0 0.0 0 0.0 1.493159532546997 -0.08627089112997055 0.21605446934700012 -0.9901730418205261 0.13968321681022644 -0.0 0.5346271991729736 0.31269872188568115 0 1.0 0 0.0 0 0.0 0 0.0 -1.633780837059021 0.1235072910785675 -0.2839455306529999 -0.8942533731460571 0.44749289751052856 -0.0 0.14448046684265137 0.7149181365966797 0 1.0 0 0.0 0 0.0 0 0.0 -1.637346625328064 0.1158793568611145 0.21605446934700012 -0.9163182377815247 0.40040284395217896 -0.0 0.4533528983592987 0.5442155599594116 0 1.0 0 0.0 0 0.0 0 0.0 -1.633780837059021 0.1235072910785675 0.21605446934700012 -0.8942533731460571 0.44749289751052856 -0.0 0.4552372395992279 0.5514237880706787 0 1.0 0 0.0 0 0.0 0 0.0 -0.477933406829834 -0.0816299095749855 -0.2839455306529999 0.7995849251747131 0.600512683391571 -0.0 0.03590008616447449 0.4946441054344177 0 1.0 0 0.0 0 0.0 0 0.0 -0.4823117256164551 -0.07536409795284271 0.21605446934700012 0.8384044766426086 0.5450300574302673 -0.0 0.42501261830329895 0.3521260619163513 0 1.0 0 0.0 0 0.0 0 0.0 -0.477933406829834 -0.0816299095749855 0.21605446934700012 0.7995849251747131 0.600512683391571 -0.0 0.4272269308567047 0.3441292643547058 0 1.0 0 0.0 0 0.0 0 0.0 2.1530635356903076 0.14238256216049194 -0.2839455306529999 -0.6881923675537109 0.7255164980888367 -0.0 0.9620909690856934 0.5682055354118347 0 1.0 0 0.0 0 0.0 0 0.0 2.1494953632354736 0.13906237483024597 0.21605446934700012 -0.6756492853164673 0.7372050881385803 -0.0 0.5085511207580566 0.40191638469696045 0 1.0 0 0.0 0 0.0 0 0.0 2.1530635356903076 0.14238256216049194 0.21605446934700012 -0.6881923675537109 0.7255164980888367 -0.0 0.5108454823493958 0.406189501285553 0 1.0 0 0.0 0 0.0 0 0.0 0.5382177829742432 0.02193109691143036 -0.2839455306529999 0.443800151348114 0.8960844874382019 -0.0 0.9155381917953491 0.5919424295425415 0 1.0 0 0.0 0 0.0 0 0.0 0.5300559997558594 0.02574750781059265 0.21605446934700012 0.4054689109325409 0.9140903949737549 -0.0 0.550326406955719 0.4469273090362549 0 1.0 0 0.0 0 0.0 0 0.0 0.5382177829742432 0.02193109691143036 0.21605446934700012 0.443800151348114 0.8960844874382019 -0.0 0.5549336075782776 0.4429643750190735 0 1.0 0 0.0 0 0.0 0 0.0 1.2473232746124268 -0.08647764474153519 -0.2839455306529999 -0.9530014991760254 -0.3029267191886902 -0.0 0.08034449815750122 0.47963446378707886 0 1.0 0 0.0 0 0.0 0 0.0 1.2502384185791016 -0.09483286738395691 0.21605446934700012 -0.9342631101608276 -0.3565477430820465 -0.0 0.3786007761955261 0.33784085512161255 0 1.0 0 0.0 0 0.0 0 0.0 1.2473232746124268 -0.08647764474153519 0.21605446934700012 -0.9530014991760254 -0.3029267191886902 -0.0 0.37815624475479126 0.34659135341644287 0 1.0 0 0.0 0 0.0 0 0.0 -0.3518340587615967 -0.07657542824745178 -0.2839455306529999 -0.8661457896232605 0.4997711181640625 -0.0 0.960374653339386 0.4969112277030945 0 1.0 0 0.0 0 0.0 0 0.0 -0.3551797866821289 -0.08188409358263016 0.21605446934700012 -0.8230536580085754 0.5679494738578796 -0.0 0.511112630367279 0.33321988582611084 0 1.0 0 0.0 0 0.0 0 0.0 -0.3518340587615967 -0.07657542824745178 0.21605446934700012 -0.8661457896232605 0.4997711181640625 -0.0 0.5133412480354309 0.33968716859817505 0 1.0 0 0.0 0 0.0 0 0.0 -1.4964169263839722 0.1210615336894989 -0.2839455306529999 0.03430280461907387 -0.9993896484375 -0.0 0.05416753888130188 0.7601801156997681 0 1.0 0 0.0 0 0.0 0 0.0 -1.4921189546585083 0.12113326787948608 0.21605446934700012 0.0016785180196166039 -0.999969482421875 -0.0 0.527971625328064 0.5664610266685486 0 1.0 0 0.0 0 0.0 0 0.0 -1.4964169263839722 0.1210615336894989 0.21605446934700012 0.03430280461907387 -0.9993896484375 -0.0 0.5255527496337891 0.5660300254821777 0 1.0 0 0.0 0 0.0 0 0.0 0.5457203388214111 0.018002808094024658 -0.2839455306529999 0.4862514138221741 0.8737754225730896 -0.0 0.9118230938911438 0.5862237811088562 0 1.0 0 0.0 0 0.0 0 0.0 0.5382177829742432 0.02193109691143036 0.21605446934700012 0.443800151348114 0.8960844874382019 -0.0 0.5549336075782776 0.4429643750190735 0 1.0 0 0.0 0 0.0 0 0.0 0.5457203388214111 0.018002808094024658 0.21605446934700012 0.4862514138221741 0.8737754225730896 -0.0 0.5591184496879578 0.4389607310295105 0 1.0 0 0.0 0 0.0 0 0.0 2.258683919906616 0.13547462224960327 -0.2839455306529999 0.8884548544883728 -0.4589068293571472 -0.0 0.9027214050292969 0.5496842861175537 0 1.0 0 0.0 0 0.0 0 0.0 2.2611100673675537 0.14044153690338135 0.21605446934700012 0.9083529114723206 -0.41816461086273193 -0.0 0.5734215378761292 0.4135507345199585 0 1.0 0 0.0 0 0.0 0 0.0 2.258683919906616 0.13547462224960327 0.21605446934700012 0.8884548544883728 -0.4589068293571472 -0.0 0.5725508332252502 0.4077966809272766 0 1.0 0 0.0 0 0.0 0 0.0 0.2809107303619385 0.021230563521385193 -0.2839455306529999 -0.790459930896759 -0.6125065088272095 -0.0 0.0732530951499939 0.5927700996398926 0 1.0 0 0.0 0 0.0 0 0.0 0.2861208915710449 0.015069350600242615 0.21605446934700012 -0.7363200783729553 -0.6765953302383423 -0.0 0.40415647625923157 0.4438801407814026 0 1.0 0 0.0 0 0.0 0 0.0 0.2809107303619385 0.021230563521385193 0.21605446934700012 -0.790459930896759 -0.6125065088272095 -0.0 0.4021376669406891 0.451210618019104 0 1.0 0 0.0 0 0.0 0 0.0 1.3553736209869385 -0.09155523777008057 -0.2839455306529999 0.8301034569740295 0.557573139667511 -0.0 0.026820480823516846 0.46813976764678955 0 1.0 0 0.0 0 0.0 0 0.0 1.3531529903411865 -0.08801734447479248 0.21605446934700012 0.8624836206436157 0.5060274004936218 -0.0 0.435935914516449 0.31473487615585327 0 1.0 0 0.0 0 0.0 0 0.0 1.3553736209869385 -0.09155523777008057 0.21605446934700012 0.8301034569740295 0.557573139667511 -0.0 0.4371563494205475 0.3104267716407776 0 1.0 0 0.0 0 0.0 0 0.0 -0.2504608631134033 -0.09035484492778778 -0.2839455306529999 0.9347819685935974 -0.3551744222640991 -0.0 0.9064401388168335 0.4806376099586487 0 1.0 0 0.0 0 0.0 0 0.0 -0.24636578559875488 -0.07842888683080673 0.21605446934700012 0.9552598595619202 -0.29572436213493347 -0.0 0.576752245426178 0.35565972328186035 0 1.0 0 0.0 0 0.0 0 0.0 -0.2504608631134033 -0.09035484492778778 0.21605446934700012 0.9347819685935974 -0.3551744222640991 -0.0 0.5754992365837097 0.3424345850944519 0 1.0 0 0.0 0 0.0 0 0.0 2.1494953632354736 0.13906237483024597 -0.2839455306529999 -0.6756492853164673 0.7372050881385803 -0.0 0.9644855260848999 0.5642683506011963 0 1.0 0 0.0 0 0.0 0 0.0 2.1454455852508545 0.135406494140625 0.21605446934700012 -0.6655476689338684 0.7463301420211792 -0.0 0.505915641784668 0.3972187638282776 0 1.0 0 0.0 0 0.0 0 0.0 2.1494953632354736 0.13906237483024597 0.21605446934700012 -0.6756492853164673 0.7372050881385803 -0.0 0.5085511207580566 0.40191638469696045 0 1.0 0 0.0 0 0.0 0 0.0 1.4927098751068115 -0.08878353983163834 -0.2839455306529999 -0.9767754077911377 0.2141483873128891 -0.0 0.9463337659835815 0.46781617403030396 0 1.0 0 0.0 0 0.0 0 0.0 1.4920799732208252 -0.09120375663042068 0.21605446934700012 -0.9568468332290649 0.29050567746162415 -0.0 0.534095287322998 0.30716514587402344 0 1.0 0 0.0 0 0.0 0 0.0 1.4927098751068115 -0.08878353983163834 0.21605446934700012 -0.9767754077911377 0.2141483873128891 -0.0 0.5344240665435791 0.30988991260528564 0 1.0 0 0.0 0 0.0 0 0.0 -1.4921189546585083 0.12113326787948608 -0.2839455306529999 0.0016785180196166039 -0.999969482421875 -0.0 0.05072706937789917 0.7608742713928223 0 1.0 0 0.0 0 0.0 0 0.0 -1.4858118295669556 0.12104934453964233 0.21605446934700012 -0.02774132415652275 -0.999603271484375 -0.0 0.5315316915512085 0.566885232925415 0 1.0 0 0.0 0 0.0 0 0.0 -1.4921189546585083 0.12113326787948608 0.21605446934700012 0.0016785180196166039 -0.999969482421875 -0.0 0.527971625328064 0.5664610266685486 0 1.0 0 0.0 0 0.0 0 0.0 -0.47332167625427246 -0.08735086768865585 -0.2839455306529999 0.7547837495803833 0.6559343338012695 -0.0 0.033157676458358765 0.48806750774383545 0 1.0 0 0.0 0 0.0 0 0.0 -0.477933406829834 -0.0816299095749855 0.21605446934700012 0.7995849251747131 0.600512683391571 -0.0 0.4272269308567047 0.3441292643547058 0 1.0 0 0.0 0 0.0 0 0.0 -0.47332167625427246 -0.08735086768865585 0.21605446934700012 0.7547837495803833 0.6559343338012695 -0.0 0.42968177795410156 0.3367283344268799 0 1.0 0 0.0 0 0.0 0 0.0 0.5525639057159424 0.013962626457214355 -0.2839455306529999 0.5330973267555237 0.8460341095924377 -0.0 0.9085732102394104 0.580565333366394 0 1.0 0 0.0 0 0.0 0 0.0 0.5457203388214111 0.018002808094024658 0.21605446934700012 0.4862514138221741 0.8737754225730896 -0.0 0.5591184496879578 0.4389607310295105 0 1.0 0 0.0 0 0.0 0 0.0 0.5525639057159424 0.013962626457214355 0.21605446934700012 0.5330973267555237 0.8460341095924377 -0.0 0.562899649143219 0.4349040985107422 0 1.0 0 0.0 0 0.0 0 0.0 1.4920799732208252 -0.09120375663042068 -0.2839455306529999 -0.9568468332290649 0.29050567746162415 -0.0 0.9468050003051758 0.46520084142684937 0 1.0 0 0.0 0 0.0 0 0.0 1.491269826889038 -0.0935315415263176 0.21605446934700012 -0.9301736354827881 0.3671071529388428 -0.0 0.5336395502090454 0.30452263355255127 0 1.0 0 0.0 0 0.0 0 0.0 1.4920799732208252 -0.09120375663042068 0.21605446934700012 -0.9568468332290649 0.29050567746162415 -0.0 0.534095287322998 0.30716514587402344 0 1.0 0 0.0 0 0.0 0 0.0 -0.3551797866821289 -0.08188409358263016 -0.2839455306529999 -0.8230536580085754 0.5679494738578796 -0.0 0.9625728130340576 0.4907815456390381 0 1.0 0 0.0 0 0.0 0 0.0 -0.3588440418243408 -0.08674763888120651 0.21605446934700012 -0.7761772274971008 0.6304818987846375 -0.0 0.5086210370063782 0.3273197412490845 0 1.0 0 0.0 0 0.0 0 0.0 -0.3551797866821289 -0.08188409358263016 0.21605446934700012 -0.8230536580085754 0.5679494738578796 -0.0 0.511112630367279 0.33321988582611084 0 1.0 0 0.0 0 0.0 0 0.0 2.256002187728882 0.13055634498596191 -0.2839455306529999 0.8673055171966553 -0.4977263808250427 -0.0 0.9044173359870911 0.5446003675460815 0 1.0 0 0.0 0 0.0 0 0.0 2.258683919906616 0.13547462224960327 0.21605446934700012 0.8884548544883728 -0.4589068293571472 -0.0 0.5725508332252502 0.4077966809272766 0 1.0 0 0.0 0 0.0 0 0.0 2.256002187728882 0.13055634498596191 0.21605446934700012 0.8673055171966553 -0.4977263808250427 -0.0 0.5715339183807373 0.4020240902900696 0 1.0 0 0.0 0 0.0 0 0.0 0.2861208915710449 0.015069350600242615 -0.2839455306529999 -0.7363200783729553 -0.6765953302383423 -0.0 0.0702734887599945 0.5867007374763489 0 1.0 0 0.0 0 0.0 0 0.0 0.2919440269470215 0.009234070777893066 0.21605446934700012 -0.6795861721038818 -0.7335734367370605 -0.0 0.40656495094299316 0.4366976022720337 0 1.0 0 0.0 0 0.0 0 0.0 0.2861208915710449 0.015069350600242615 0.21605446934700012 -0.7363200783729553 -0.6765953302383423 -0.0 0.40415647625923157 0.4438801407814026 0 1.0 0 0.0 0 0.0 0 0.0 -1.5005544424057007 0.12084627151489258 -0.2839455306529999 0.07089449465274811 -0.9974669814109802 -0.0 0.057448118925094604 0.7593033909797668 0 1.0 0 0.0 0 0.0 0 0.0 -1.4964169263839722 0.1210615336894989 0.21605446934700012 0.03430280461907387 -0.9993896484375 -0.0 0.5255527496337891 0.5660300254821777 0 1.0 0 0.0 0 0.0 0 0.0 -1.5005544424057007 0.12084627151489258 0.21605446934700012 0.07089449465274811 -0.9974669814109802 -0.0 0.5232311487197876 0.565461277961731 0 1.0 0 0.0 0 0.0 0 0.0 2.1454455852508545 0.135406494140625 -0.2839455306529999 -0.6655476689338684 0.7463301420211792 -0.0 0.9671920537948608 0.5599122643470764 0 1.0 0 0.0 0 0.0 0 0.0 2.14091420173645 0.13141494989395142 0.21605446934700012 -0.6572160720825195 0.7536851167678833 -0.0 0.5029294490814209 0.39210838079452515 0 1.0 0 0.0 0 0.0 0 0.0 2.1454455852508545 0.135406494140625 0.21605446934700012 -0.6655476689338684 0.7463301420211792 -0.0 0.505915641784668 0.3972187638282776 0 1.0 0 0.0 0 0.0 0 0.0 -0.3588440418243408 -0.08674763888120651 -0.2839455306529999 -0.7761772274971008 0.6304818987846375 -0.0 0.9649338722229004 0.4852173924446106 0 1.0 0 0.0 0 0.0 0 0.0 -0.3627345561981201 -0.0911952406167984 0.21605446934700012 -0.7318033576011658 0.6814783215522766 -0.0 0.5059289336204529 0.32195907831192017 0 1.0 0 0.0 0 0.0 0 0.0 -0.3588440418243408 -0.08674763888120651 0.21605446934700012 -0.7761772274971008 0.6304818987846375 -0.0 0.5086210370063782 0.3273197412490845 0 1.0 0 0.0 0 0.0 0 0.0 -1.4858118295669556 0.12104934453964233 -0.2839455306529999 -0.02774132415652275 -0.999603271484375 -0.0 0.04563558101654053 0.7615771293640137 0 1.0 0 0.0 0 0.0 0 0.0 -1.479849934577942 0.12079760432243347 0.21605446934700012 -0.058351390063762665 -0.9982909560203552 -0.0 0.534906268119812 0.5670909881591797 0 1.0 0 0.0 0 0.0 0 0.0 -1.4858118295669556 0.12104934453964233 0.21605446934700012 -0.02774132415652275 -0.999603271484375 -0.0 0.5315316915512085 0.566885232925415 0 1.0 0 0.0 0 0.0 0 0.0 1.3577744960784912 -0.09490098059177399 -0.2839455306529999 0.7935422658920288 0.6084780693054199 -0.0 0.02539101243019104 0.464407742023468 0 1.0 0 0.0 0 0.0 0 0.0 1.3553736209869385 -0.09155523777008057 0.21605446934700012 0.8301034569740295 0.557573139667511 -0.0 0.4371563494205475 0.3104267716407776 0 1.0 0 0.0 0 0.0 0 0.0 1.3577744960784912 -0.09490098059177399 0.21605446934700012 0.7935422658920288 0.6084780693054199 -0.0 0.43852657079696655 0.30631476640701294 0 1.0 0 0.0 0 0.0 0 0.0 2.14091420173645 0.13141494989395142 -0.2839455306529999 -0.6572160720825195 0.7536851167678833 -0.0 0.9702067375183105 0.5551329851150513 0 1.0 0 0.0 0 0.0 0 0.0 2.1359012126922607 0.12708774209022522 0.21605446934700012 -0.6502273678779602 0.7596972584724426 -0.0 0.4995826780796051 0.3866015672683716 0 1.0 0 0.0 0 0.0 0 0.0 2.14091420173645 0.13141494989395142 0.21605446934700012 -0.6572160720825195 0.7536851167678833 -0.0 0.5029294490814209 0.39210838079452515 0 1.0 0 0.0 0 0.0 0 0.0 0.5587482452392578 0.00981055200099945 -0.2839455306529999 0.5844904780387878 0.8113650679588318 -0.0 0.9057610034942627 0.5749698281288147 0 1.0 0 0.0 0 0.0 0 0.0 0.5525639057159424 0.013962626457214355 0.21605446934700012 0.5330973267555237 0.8460341095924377 -0.0 0.562899649143219 0.4349040985107422 0 1.0 0 0.0 0 0.0 0 0.0 0.5587482452392578 0.00981055200099945 0.21605446934700012 0.5844904780387878 0.8113650679588318 -0.0 0.5662951469421387 0.4307813048362732 0 1.0 0 0.0 0 0.0 0 0.0 1.5875461101531982 -0.10015491396188736 -0.2839455306529999 0.9558396935462952 -0.2938016951084137 -0.0 0.8997503519058228 0.4588809609413147 0 1.0 0 0.0 0 0.0 0 0.0 1.5896236896514893 -0.0923299491405487 0.21605446934700012 0.9756157398223877 -0.21933652460575104 -0.0 0.5898779034614563 0.3301680088043213 0 1.0 0 0.0 0 0.0 0 0.0 1.5875461101531982 -0.10015491396188736 0.21605446934700012 0.9558396935462952 -0.2938016951084137 -0.0 0.589529275894165 0.3221694827079773 0 1.0 0 0.0 0 0.0 0 0.0 -0.4684762954711914 -0.09252697229385376 -0.2839455306529999 0.7024445533752441 0.7116916179656982 -0.0 0.030300259590148926 0.4821009039878845 0 1.0 0 0.0 0 0.0 0 0.0 -0.47332167625427246 -0.08735086768865585 0.21605446934700012 0.7547837495803833 0.6559343338012695 -0.0 0.42968177795410156 0.3367283344268799 0 1.0 0 0.0 0 0.0 0 0.0 -0.4684762954711914 -0.09252697229385376 0.21605446934700012 0.7024445533752441 0.7116916179656982 -0.0 0.43238383531570435 0.3299248218536377 0 1.0 0 0.0 0 0.0 0 0.0 -1.5045313835144043 0.1204875111579895 -0.2839455306529999 0.11017181724309921 -0.9938963055610657 -0.0 0.060566484928131104 0.7582532167434692 0 1.0 0 0.0 0 0.0 0 0.0 -1.5005544424057007 0.12084627151489258 0.21605446934700012 0.07089449465274811 -0.9974669814109802 -0.0 0.5232311487197876 0.565461277961731 0 1.0 0 0.0 0 0.0 0 0.0 -1.5045313835144043 0.1204875111579895 0.21605446934700012 0.11017181724309921 -0.9938963055610657 -0.0 0.5210064053535461 0.5647562146186829 0 1.0 0 0.0 0 0.0 0 0.0 0.5642733573913574 0.005546584725379944 -0.2839455306529999 0.6442762613296509 0.764763355255127 -0.0 0.9033610820770264 0.569435179233551 0 1.0 0 0.0 0 0.0 0 0.0 0.5587482452392578 0.00981055200099945 0.21605446934700012 0.5844904780387878 0.8113650679588318 -0.0 0.5662951469421387 0.4307813048362732 0 1.0 0 0.0 0 0.0 0 0.0 0.5642733573913574 0.005546584725379944 0.21605446934700012 0.6442762613296509 0.764763355255127 -0.0 0.5693221092224121 0.4265784025192261 0 1.0 0 0.0 0 0.0 0 0.0 1.491269826889038 -0.0935315415263176 -0.2839455306529999 -0.9301736354827881 0.3671071529388428 -0.0 0.947371244430542 0.4626959562301636 0 1.0 0 0.0 0 0.0 0 0.0 1.4902799129486084 -0.09576690196990967 0.21605446934700012 -0.8968169093132019 0.4423657953739166 -0.0 0.5330555438995361 0.30196118354797363 0 1.0 0 0.0 0 0.0 0 0.0 1.491269826889038 -0.0935315415263176 0.21605446934700012 -0.9301736354827881 0.3671071529388428 -0.0 0.5336395502090454 0.30452263355255127 0 1.0 0 0.0 0 0.0 0 0.0 2.2530648708343506 0.12568670511245728 -0.2839455306529999 0.843317985534668 -0.5373699069023132 -0.0 0.9062378406524658 0.5395541191101074 0 1.0 0 0.0 0 0.0 0 0.0 2.256002187728882 0.13055634498596191 0.21605446934700012 0.8673055171966553 -0.4977263808250427 -0.0 0.5715339183807373 0.4020240902900696 0 1.0 0 0.0 0 0.0 0 0.0 2.2530648708343506 0.12568670511245728 0.21605446934700012 0.843317985534668 -0.5373699069023132 -0.0 0.5703655481338501 0.39623093605041504 0 1.0 0 0.0 0 0.0 0 0.0 0.2919440269470215 0.009234070777893066 -0.2839455306529999 -0.6795861721038818 -0.7335734367370605 -0.0 0.06697684526443481 0.5809164047241211 0 1.0 0 0.0 0 0.0 0 0.0 0.29838013648986816 0.0037247389554977417 0.21605446934700012 -0.6217535734176636 -0.7831659913063049 -0.0 0.4093855619430542 0.42966413497924805 0 1.0 0 0.0 0 0.0 0 0.0 0.2919440269470215 0.009234070777893066 0.21605446934700012 -0.6795861721038818 -0.7335734367370605 -0.0 0.40656495094299316 0.4366976022720337 0 1.0 0 0.0 0 0.0 0 0.0 -0.255185604095459 -0.1016727089881897 -0.2839455306529999 0.9091463685035706 -0.41645556688308716 -0.0 0.9094827175140381 0.4691436290740967 0 1.0 0 0.0 0 0.0 0 0.0 -0.2504608631134033 -0.09035484492778778 0.21605446934700012 0.9347819685935974 -0.3551744222640991 -0.0 0.5754992365837097 0.3424345850944519 0 1.0 0 0.0 0 0.0 0 0.0 -0.255185604095459 -0.1016727089881897 0.21605446934700012 0.9091463685035706 -0.41645556688308716 -0.0 0.5738273859024048 0.3297680616378784 0 1.0 0 0.0 0 0.0 0 0.0 -1.3330157995224 0.11431652307510376 -0.2839455306529999 0.982573926448822 0.18573564291000366 -0.0 0.9365357160568237 0.7316248416900635 0 1.0 0 0.0 0 0.0 0 0.0 -1.3343840837478638 0.12082192301750183 0.21605446934700012 0.9733878374099731 0.22907193005084991 -0.0 0.6105040311813354 0.569257378578186 0 1.0 0 0.0 0 0.0 0 0.0 -1.3330157995224 0.11431652307510376 0.21605446934700012 0.982573926448822 0.18573564291000366 -0.0 0.6117595434188843 0.5635828971862793 0 1.0 0 0.0 0 0.0 0 0.0 2.1359012126922607 0.12708774209022522 -0.2839455306529999 -0.6502273678779602 0.7596972584724426 -0.0 0.9735246300697327 0.5499288439750671 0 1.0 0 0.0 0 0.0 0 0.0 2.130406618118286 0.12242487072944641 0.21605446934700012 -0.6443067789077759 0.764732837677002 -0.0 0.4958657920360565 0.380720853805542 0 1.0 0 0.0 0 0.0 0 0.0 2.1359012126922607 0.12708774209022522 0.21605446934700012 -0.6502273678779602 0.7596972584724426 -0.0 0.4995826780796051 0.3866015672683716 0 1.0 0 0.0 0 0.0 0 0.0 1.2502384185791016 -0.09483286738395691 -0.2839455306529999 -0.9342631101608276 -0.3565477430820465 -0.0 0.07861322164535522 0.47155576944351196 0 1.0 0 0.0 0 0.0 0 0.0 1.2535793781280518 -0.10288161039352417 0.21605446934700012 -0.9118015170097351 -0.41059601306915283 -0.0 0.3792789578437805 0.3292854428291321 0 1.0 0 0.0 0 0.0 0 0.0 1.2502384185791016 -0.09483286738395691 0.21605446934700012 -0.9342631101608276 -0.3565477430820465 -0.0 0.3786007761955261 0.33784085512161255 0 1.0 0 0.0 0 0.0 0 0.0 -0.3627345561981201 -0.0911952406167984 -0.2839455306529999 -0.7318033576011658 0.6814783215522766 -0.0 0.9674052000045776 0.4801751375198364 0 1.0 0 0.0 0 0.0 0 0.0 -0.3667590618133545 -0.09525609761476517 0.21605446934700012 -0.6865749359130859 0.7270119190216064 -0.0 0.5031017065048218 0.3171094059944153 0 1.0 0 0.0 0 0.0 0 0.0 -0.3627345561981201 -0.0911952406167984 0.21605446934700012 -0.7318033576011658 0.6814783215522766 -0.0 0.5059289336204529 0.32195907831192017 0 1.0 0 0.0 0 0.0 0 0.0 -1.479849934577942 0.12079760432243347 -0.2839455306529999 -0.058351390063762665 -0.9982909560203552 -0.0 0.04079052805900574 0.761926531791687 0 1.0 0 0.0 0 0.0 0 0.0 -1.474233627319336 0.12037801742553711 0.21605446934700012 -0.09262367337942123 -0.9956969022750854 -0.0 0.5380936861038208 0.5670830011367798 0 1.0 0 0.0 0 0.0 0 0.0 -1.479849934577942 0.12079760432243347 0.21605446934700012 -0.058351390063762665 -0.9982909560203552 -0.0 0.534906268119812 0.5670909881591797 0 1.0 0 0.0 0 0.0 0 0.0 0.5691964626312256 0.0010247975587844849 -0.2839455306529999 0.7040009498596191 0.7101962566375732 -0.0 0.901335597038269 0.563788652420044 0 1.0 0 0.0 0 0.0 0 0.0 0.5642733573913574 0.005546584725379944 0.21605446934700012 0.6442762613296509 0.764763355255127 -0.0 0.5693221092224121 0.4265784025192261 0 1.0 0 0.0 0 0.0 0 0.0 0.5691964626312256 0.0010247975587844849 0.21605446934700012 0.7040009498596191 0.7101962566375732 -0.0 0.5720335245132446 0.4221276044845581 0 1.0 0 0.0 0 0.0 0 0.0 2.249709367752075 0.12069547176361084 -0.2839455306529999 0.8160954713821411 -0.5778679847717285 -0.0 0.9082791805267334 0.5343690514564514 0 1.0 0 0.0 0 0.0 0 0.0 2.2530648708343506 0.12568670511245728 0.21605446934700012 0.843317985534668 -0.5373699069023132 -0.0 0.5703655481338501 0.39623093605041504 0 1.0 0 0.0 0 0.0 0 0.0 2.249709367752075 0.12069547176361084 0.21605446934700012 0.8160954713821411 -0.5778679847717285 -0.0 0.5689668655395508 0.39020174741744995 0 1.0 0 0.0 0 0.0 0 0.0 0.29838013648986816 0.0037247389554977417 -0.2839455306529999 -0.6217535734176636 -0.7831659913063049 -0.0 0.06334707140922546 0.5754096508026123 0 1.0 0 0.0 0 0.0 0 0.0 0.30542922019958496 -0.0014586597681045532 0.21605446934700012 -0.5591906309127808 -0.8290352821350098 -0.0 0.4126429259777069 0.42278528213500977 0 1.0 0 0.0 0 0.0 0 0.0 0.29838013648986816 0.0037247389554977417 0.21605446934700012 -0.6217535734176636 -0.7831659913063049 -0.0 0.4093855619430542 0.42966413497924805 0 1.0 0 0.0 0 0.0 0 0.0 1.3603556156158447 -0.09805455803871155 -0.2839455306529999 0.7530137300491333 0.6579790711402893 -0.0 0.023867100477218628 0.46089041233062744 0 1.0 0 0.0 0 0.0 0 0.0 1.3577744960784912 -0.09490098059177399 0.21605446934700012 0.7935422658920288 0.6084780693054199 -0.0 0.43852657079696655 0.30631476640701294 0 1.0 0 0.0 0 0.0 0 0.0 1.3603556156158447 -0.09805455803871155 0.21605446934700012 0.7530137300491333 0.6579790711402893 -0.0 0.44004958868026733 0.30239802598953247 0 1.0 0 0.0 0 0.0 0 0.0 -0.4633975028991699 -0.09715822339057922 -0.2839455306529999 0.6422925591468811 0.766411304473877 -0.0 0.027323424816131592 0.47673940658569336 0 1.0 0 0.0 0 0.0 0 0.0 -0.4684762954711914 -0.09252697229385376 0.21605446934700012 0.7024445533752441 0.7116916179656982 -0.0 0.43238383531570435 0.3299248218536377 0 1.0 0 0.0 0 0.0 0 0.0 -0.4633975028991699 -0.09715822339057922 0.21605446934700012 0.6422925591468811 0.766411304473877 -0.0 0.43533870577812195 0.32372188568115234 0 1.0 0 0.0 0 0.0 0 0.0 -1.5083478689193726 0.11998522281646729 -0.2839455306529999 0.15222632884979248 -0.9883114099502563 -0.0 0.06352132558822632 0.757038414478302 0 1.0 0 0.0 0 0.0 0 0.0 -1.5045313835144043 0.1204875111579895 0.21605446934700012 0.11017181724309921 -0.9938963055610657 -0.0 0.5210064053535461 0.5647562146186829 0 1.0 0 0.0 0 0.0 0 0.0 -1.5083478689193726 0.11998522281646729 0.21605446934700012 0.15222632884979248 -0.9883114099502563 -0.0 0.5188777446746826 0.5639165043830872 0 1.0 0 0.0 0 0.0 0 0.0 2.130406618118286 0.12242487072944641 -0.2839455306529999 -0.6443067789077759 0.764732837677002 -0.0 0.9771391153335571 0.5443018674850464 0 1.0 0 0.0 0 0.0 0 0.0 2.1244304180145264 0.11742633581161499 0.21605446934700012 -0.6392101645469666 0.7690054178237915 -0.0 0.49176985025405884 0.37449586391448975 0 1.0 0 0.0 0 0.0 0 0.0 2.130406618118286 0.12242487072944641 0.21605446934700012 -0.6443067789077759 0.764732837677002 -0.0 0.4958657920360565 0.380720853805542 0 1.0 0 0.0 0 0.0 0 0.0 1.4902799129486084 -0.09576690196990967 -0.2839455306529999 -0.8968169093132019 0.4423657953739166 -0.0 0.9480323791503906 0.4602992534637451 0 1.0 0 0.0 0 0.0 0 0.0 1.4891102313995361 -0.0979098305106163 0.21605446934700012 -0.8572039008140564 0.5149083137512207 -0.0 0.532341718673706 0.29947996139526367 0 1.0 0 0.0 0 0.0 0 0.0 1.4902799129486084 -0.09576690196990967 0.21605446934700012 -0.8968169093132019 0.4423657953739166 -0.0 0.5330555438995361 0.30196118354797363 0 1.0 0 0.0 0 0.0 0 0.0 -0.3667590618133545 -0.09525609761476517 -0.2839455306529999 -0.6865749359130859 0.7270119190216064 -0.0 0.9699341058731079 0.47561323642730713 0 1.0 0 0.0 0 0.0 0 0.0 -0.37091708183288574 -0.09893020987510681 0.21605446934700012 -0.635486900806427 0.7720877528190613 -0.0 0.5001419186592102 0.3127697706222534 0 1.0 0 0.0 0 0.0 0 0.0 -0.3667590618133545 -0.09525609761476517 0.21605446934700012 -0.6865749359130859 0.7270119190216064 -0.0 0.5031017065048218 0.3171094059944153 0 1.0 0 0.0 0 0.0 0 0.0 -1.474233627319336 0.12037801742553711 -0.2839455306529999 -0.09262367337942123 -0.9956969022750854 -0.0 1.0362075567245483 0.7619456648826599 0 1.0 0 0.0 0 0.0 0 0.0 -1.4689626693725586 0.11979058384895325 0.21605446934700012 -0.13116855919361115 -0.9913327693939209 -0.0 0.5410932898521423 0.5668658018112183 0 1.0 0 0.0 0 0.0 0 0.0 -1.474233627319336 0.12037801742553711 0.21605446934700012 -0.09262367337942123 -0.9956969022750854 -0.0 0.5380936861038208 0.5670830011367798 0 1.0 0 0.0 0 0.0 0 0.0 0.5736916065216064 -0.0037840157747268677 -0.2839455306529999 0.7566148638725281 0.6538285613059998 -0.0 0.8995860815048218 0.5579735040664673 0 1.0 0 0.0 0 0.0 0 0.0 0.5691964626312256 0.0010247975587844849 0.21605446934700012 0.7040009498596191 0.7101962566375732 -0.0 0.5720335245132446 0.4221276044845581 0 1.0 0 0.0 0 0.0 0 0.0 0.5736916065216064 -0.0037840157747268677 0.21605446934700012 0.7566148638725281 0.6538285613059998 -0.0 0.5745289325714111 0.41740989685058594 0 1.0 0 0.0 0 0.0 0 0.0 1.4891102313995361 -0.0979098305106163 -0.2839455306529999 -0.8572039008140564 0.5149083137512207 -0.0 0.9487885236740112 0.45800888538360596 0 1.0 0 0.0 0 0.0 0 0.0 1.487760305404663 -0.0999603271484375 0.21605446934700012 -0.8122501373291016 0.5832697749137878 -0.0 0.5314958691596985 0.29707831144332886 0 1.0 0 0.0 0 0.0 0 0.0 1.4891102313995361 -0.0979098305106163 0.21605446934700012 -0.8572039008140564 0.5149083137512207 -0.0 0.532341718673706 0.29947996139526367 0 1.0 0 0.0 0 0.0 0 0.0 2.24577260017395 0.11541235446929932 -0.2839455306529999 0.7895443439483643 -0.6136661767959595 -0.0 0.910639762878418 0.5288608074188232 0 1.0 0 0.0 0 0.0 0 0.0 2.249709367752075 0.12069547176361084 0.21605446934700012 0.8160954713821411 -0.5778679847717285 -0.0 0.5689668655395508 0.39020174741744995 0 1.0 0 0.0 0 0.0 0 0.0 2.24577260017395 0.11541235446929932 0.21605446934700012 0.7895443439483643 -0.6136661767959595 -0.0 0.5672522187232971 0.3837152123451233 0 1.0 0 0.0 0 0.0 0 0.0 0.30542922019958496 -0.0014586597681045532 -0.2839455306529999 -0.5591906309127808 -0.8290352821350098 -0.0 0.05936703085899353 0.5701738595962524 0 1.0 0 0.0 0 0.0 0 0.0 0.31134724617004395 -0.005109667778015137 0.21605446934700012 -0.4938505291938782 -0.869533360004425 -0.0 0.4155136048793793 0.41772472858428955 0 1.0 0 0.0 0 0.0 0 0.0 0.30542922019958496 -0.0014586597681045532 0.21605446934700012 -0.5591906309127808 -0.8290352821350098 -0.0 0.4126429259777069 0.42278528213500977 0 1.0 0 0.0 0 0.0 0 0.0 -1.5120036602020264 0.11933943629264832 -0.2839455306529999 0.19714957475662231 -0.9803460836410522 -0.0 0.06631192564964294 0.7556670308113098 0 1.0 0 0.0 0 0.0 0 0.0 -1.5083478689193726 0.11998522281646729 0.21605446934700012 0.15222632884979248 -0.9883114099502563 -0.0 0.5188777446746826 0.5639165043830872 0 1.0 0 0.0 0 0.0 0 0.0 -1.5120036602020264 0.11933943629264832 0.21605446934700012 0.19714957475662231 -0.9803460836410522 -0.0 0.516844630241394 0.5629432797431946 0 1.0 0 0.0 0 0.0 0 0.0 2.1244304180145264 0.11742633581161499 -0.2839455306529999 -0.6392101645469666 0.7690054178237915 -0.0 0.9810415506362915 0.5382588505744934 0 1.0 0 0.0 0 0.0 0 0.0 2.1179726123809814 0.11209213733673096 0.21605446934700012 -0.634754478931427 0.772667646408081 -0.0 0.487287312746048 0.36796391010284424 0 1.0 0 0.0 0 0.0 0 0.0 2.1244304180145264 0.11742633581161499 0.21605446934700012 -0.6392101645469666 0.7690054178237915 -0.0 0.49176985025405884 0.37449586391448975 0 1.0 0 0.0 0 0.0 0 0.0 -1.4689626693725586 0.11979058384895325 -0.2839455306529999 -0.13116855919361115 -0.9913327693939209 -0.0 1.0318984985351562 0.76165771484375 0 1.0 0 0.0 0 0.0 0 0.0 -1.4640370607376099 0.11903533339500427 0.21605446934700012 -0.1745963990688324 -0.9846186637878418 -0.0 0.5439050197601318 0.5664436221122742 0 1.0 0 0.0 0 0.0 0 0.0 -1.4689626693725586 0.11979058384895325 0.21605446934700012 -0.13116855919361115 -0.9913327693939209 -0.0 0.5410932898521423 0.5668658018112183 0 1.0 0 0.0 0 0.0 0 0.0 1.3631165027618408 -0.10101598501205444 -0.2839455306529999 0.7088534235954285 0.7053132653236389 -0.0 0.022248119115829468 0.45758455991744995 0 1.0 0 0.0 0 0.0 0 0.0 1.3603556156158447 -0.09805455803871155 0.21605446934700012 0.7530137300491333 0.6579790711402893 -0.0 0.44004958868026733 0.30239802598953247 0 1.0 0 0.0 0 0.0 0 0.0 1.3631165027618408 -0.10101598501205444 0.21605446934700012 0.7088534235954285 0.7053132653236389 -0.0 0.44172802567481995 0.29867666959762573 0 1.0 0 0.0 0 0.0 0 0.0 -0.458085298538208 -0.10124462097883224 -0.2839455306529999 0.574510931968689 0.8184759020805359 -0.0 0.02422255277633667 0.4719785451889038 0 1.0 0 0.0 0 0.0 0 0.0 -0.4633975028991699 -0.09715822339057922 0.21605446934700012 0.6422925591468811 0.766411304473877 -0.0 0.43533870577812195 0.32372188568115234 0 1.0 0 0.0 0 0.0 0 0.0 -0.458085298538208 -0.10124462097883224 0.21605446934700012 0.574510931968689 0.8184759020805359 -0.0 0.43855130672454834 0.31812357902526855 0 1.0 0 0.0 0 0.0 0 0.0 0.5777585506439209 -0.008879855275154114 -0.2839455306529999 0.8056581020355225 0.5923642516136169 -0.0 0.898100733757019 0.5519903302192688 0 1.0 0 0.0 0 0.0 0 0.0 0.5736916065216064 -0.0037840157747268677 0.21605446934700012 0.7566148638725281 0.6538285613059998 -0.0 0.5745289325714111 0.41740989685058594 0 1.0 0 0.0 0 0.0 0 0.0 0.5777585506439209 -0.008879855275154114 0.21605446934700012 0.8056581020355225 0.5923642516136169 -0.0 0.5768174529075623 0.4124223589897156 0 1.0 0 0.0 0 0.0 0 0.0 1.487760305404663 -0.0999603271484375 -0.2839455306529999 -0.8122501373291016 0.5832697749137878 -0.0 0.9496400952339172 0.45582300424575806 0 1.0 0 0.0 0 0.0 0 0.0 1.4862301349639893 -0.10191839188337326 0.21605446934700012 -0.7631458640098572 0.6461989283561707 -0.0 0.5305162668228149 0.29475635290145874 0 1.0 0 0.0 0 0.0 0 0.0 1.487760305404663 -0.0999603271484375 0.21605446934700012 -0.8122501373291016 0.5832697749137878 -0.0 0.5314958691596985 0.29707831144332886 0 1.0 0 0.0 0 0.0 0 0.0 -0.37091708183288574 -0.09893020987510681 -0.2839455306529999 -0.635486900806427 0.7720877528190613 -0.0 0.9725217819213867 0.47152602672576904 0 1.0 0 0.0 0 0.0 0 0.0 -0.37520909309387207 -0.10221756994724274 0.21605446934700012 -0.5784783363342285 0.8156682252883911 -0.0 0.49705228209495544 0.30893921852111816 0 1.0 0 0.0 0 0.0 0 0.0 -0.37091708183288574 -0.09893020987510681 0.21605446934700012 -0.635486900806427 0.7720877528190613 -0.0 0.5001419186592102 0.3127697706222534 0 1.0 0 0.0 0 0.0 0 0.0 2.2412545680999756 0.1098373532295227 -0.2839455306529999 0.765923023223877 -0.6429029107093811 -0.0 0.9133265018463135 0.5230157375335693 0 1.0 0 0.0 0 0.0 0 0.0 2.24577260017395 0.11541235446929932 0.21605446934700012 0.7895443439483643 -0.6136661767959595 -0.0 0.5672522187232971 0.3837152123451233 0 1.0 0 0.0 0 0.0 0 0.0 2.2412545680999756 0.1098373532295227 0.21605446934700012 0.765923023223877 -0.6429029107093811 -0.0 0.5652036666870117 0.3767634630203247 0 1.0 0 0.0 0 0.0 0 0.0 0.31134724617004395 -0.005109667778015137 -0.2839455306529999 -0.4938505291938782 -0.869533360004425 -0.0 0.05601939558982849 0.5664652585983276 0 1.0 0 0.0 0 0.0 0 0.0 0.31847643852233887 -0.00882391631603241 0.21605446934700012 -0.4374523162841797 -0.8992278575897217 -0.0 0.4191216230392456 0.4123419523239136 0 1.0 0 0.0 0 0.0 0 0.0 0.31134724617004395 -0.005109667778015137 0.21605446934700012 -0.4938505291938782 -0.869533360004425 -0.0 0.4155136048793793 0.41772472858428955 0 1.0 0 0.0 0 0.0 0 0.0 -1.5154989957809448 0.1185501217842102 -0.2839455306529999 0.2448805272579193 -0.9695425033569336 -0.0 0.06893846392631531 0.7541464567184448 0 1.0 0 0.0 0 0.0 0 0.0 -1.5120036602020264 0.11933943629264832 0.21605446934700012 0.19714957475662231 -0.9803460836410522 -0.0 0.516844630241394 0.5629432797431946 0 1.0 0 0.0 0 0.0 0 0.0 -1.5154989957809448 0.1185501217842102 0.21605446934700012 0.2448805272579193 -0.9695425033569336 -0.0 0.514906108379364 0.5618376135826111 0 1.0 0 0.0 0 0.0 0 0.0 2.1179726123809814 0.11209213733673096 -0.2839455306529999 -0.634754478931427 0.772667646408081 -0.0 0.9852210283279419 0.5318124890327454 0 1.0 0 0.0 0 0.0 0 0.0 2.1110332012176514 0.10642224550247192 0.21605446934700012 -0.635517418384552 0.7720572352409363 -0.0 1.482412576675415 0.36117082834243774 0 1.0 0 0.0 0 0.0 0 0.0 2.1179726123809814 0.11209213733673096 0.21605446934700012 -0.634754478931427 0.772667646408081 -0.0 1.4872872829437256 0.36796391010284424 0 1.0 0 0.0 0 0.0 0 0.0 -1.4640370607376099 0.11903533339500427 -0.2839455306529999 -0.1745963990688324 -0.9846186637878418 -0.0 1.027872085571289 0.7610847353935242 0 1.0 0 0.0 0 0.0 0 0.0 -1.4594570398330688 0.1181122362613678 0.21605446934700012 -0.22357860207557678 -0.9746696352958679 -0.0 0.5465291142463684 0.5658203363418579 0 1.0 0 0.0 0 0.0 0 0.0 -1.4640370607376099 0.11903533339500427 0.21605446934700012 -0.1745963990688324 -0.9846186637878418 -0.0 0.5439050197601318 0.5664436221122742 0 1.0 0 0.0 0 0.0 0 0.0 0.31847643852233887 -0.00882391631603241 -0.2839455306529999 -0.4374523162841797 -0.8992278575897217 -0.0 0.051966845989227295 0.5626710653305054 0 1.0 0 0.0 0 0.0 0 0.0 0.32681703567504883 -0.012601405382156372 0.21605446934700012 -0.39289528131484985 -0.9195532202720642 -0.0 0.4235183298587799 0.40663421154022217 0 1.0 0 0.0 0 0.0 0 0.0 0.31847643852233887 -0.00882391631603241 0.21605446934700012 -0.4374523162841797 -0.8992278575897217 -0.0 0.4191216230392456 0.4123419523239136 0 1.0 0 0.0 0 0.0 0 0.0 1.5848753452301025 -0.10778042674064636 -0.2839455306529999 0.9302957057952881 -0.3667104244232178 -0.0 0.901482343673706 0.4516540765762329 0 1.0 0 0.0 0 0.0 0 0.0 1.5875461101531982 -0.10015491396188736 0.21605446934700012 0.9558396935462952 -0.2938016951084137 -0.0 0.589529275894165 0.3221694827079773 0 1.0 0 0.0 0 0.0 0 0.0 1.5848753452301025 -0.10778042674064636 0.21605446934700012 0.9302957057952881 -0.3667104244232178 -0.0 0.5888720750808716 0.3142467737197876 0 1.0 0 0.0 0 0.0 0 0.0 -0.45253944396972656 -0.10478616505861282 -0.2839455306529999 0.4997406005859375 0.8661457896232605 -0.0 0.02099284529685974 0.46781474351882935 0 1.0 0 0.0 0 0.0 0 0.0 -0.458085298538208 -0.10124462097883224 0.21605446934700012 0.574510931968689 0.8184759020805359 -0.0 0.43855130672454834 0.31812357902526855 0 1.0 0 0.0 0 0.0 0 0.0 -0.45253944396972656 -0.10478616505861282 0.21605446934700012 0.4997406005859375 0.8661457896232605 -0.0 0.4420255124568939 0.31313610076904297 0 1.0 0 0.0 0 0.0 0 0.0 2.2361552715301514 0.10397043824195862 -0.2839455306529999 0.7449567914009094 -0.6670736074447632 -0.0 0.9163463115692139 0.5168219804763794 0 1.0 0 0.0 0 0.0 0 0.0 2.2412545680999756 0.1098373532295227 0.21605446934700012 0.765923023223877 -0.6429029107093811 -0.0 0.5652036666870117 0.3767634630203247 0 1.0 0 0.0 0 0.0 0 0.0 2.2361552715301514 0.10397043824195862 0.21605446934700012 0.7449567914009094 -0.6670736074447632 -0.0 0.5628004670143127 0.3693418502807617 0 1.0 0 0.0 0 0.0 0 0.0 1.3660571575164795 -0.10378524661064148 -0.2839455306529999 0.6615497469902039 0.7498703002929688 -0.0 0.020532876253128052 0.4544876217842102 0 1.0 0 0.0 0 0.0 0 0.0 1.3631165027618408 -0.10101598501205444 0.21605446934700012 0.7088534235954285 0.7053132653236389 -0.0 0.44172802567481995 0.29867666959762573 0 1.0 0 0.0 0 0.0 0 0.0 1.3660571575164795 -0.10378524661064148 0.21605446934700012 0.6615497469902039 0.7498703002929688 -0.0 0.4435648024082184 0.2951512336730957 0 1.0 0 0.0 0 0.0 0 0.0 -0.2605404853820801 -0.11238247901201248 -0.2839455306529999 0.8779259324073792 -0.47877436876296997 -0.0 0.9127802848815918 0.45833027362823486 0 1.0 0 0.0 0 0.0 0 0.0 -0.255185604095459 -0.1016727089881897 0.21605446934700012 0.9091463685035706 -0.41645556688308716 -0.0 0.5738273859024048 0.3297680616378784 0 1.0 0 0.0 0 0.0 0 0.0 -0.2605404853820801 -0.11238247901201248 0.21605446934700012 0.8779259324073792 -0.47877436876296997 -0.0 0.5717080235481262 0.31764930486679077 0 1.0 0 0.0 0 0.0 0 0.0 -1.5188337564468384 0.11761730909347534 -0.2839455306529999 0.2953581213951111 -0.9553819298744202 -0.0 0.07140150666236877 0.7524835467338562 0 1.0 0 0.0 0 0.0 0 0.0 -1.5154989957809448 0.1185501217842102 0.21605446934700012 0.2448805272579193 -0.9695425033569336 -0.0 0.514906108379364 0.5618376135826111 0 1.0 0 0.0 0 0.0 0 0.0 -1.5188337564468384 0.11761730909347534 0.21605446934700012 0.2953581213951111 -0.9553819298744202 -0.0 0.5130614042282104 0.5606002807617188 0 1.0 0 0.0 0 0.0 0 0.0 2.1110332012176514 0.10642224550247192 -0.2839455306529999 -0.635517418384552 0.7720572352409363 -0.0 0.9896643757820129 0.5249820947647095 0 1.0 0 0.0 0 0.0 0 0.0 2.1040523052215576 0.10063314437866211 0.21605446934700012 -0.6462294459342957 0.7631153464317322 -0.0 1.4774537086486816 0.3544101119041443 0 1.0 0 0.0 0 0.0 0 0.0 2.1110332012176514 0.10642224550247192 0.21605446934700012 -0.635517418384552 0.7720572352409363 -0.0 1.482412576675415 0.36117082834243774 0 1.0 0 0.0 0 0.0 0 0.0 0.581397294998169 -0.01426270604133606 -0.2839455306529999 0.8499709963798523 0.5268105268478394 -0.0 0.8968684673309326 0.5458382368087769 0 1.0 0 0.0 0 0.0 0 0.0 0.5777585506439209 -0.008879855275154114 0.21605446934700012 0.8056581020355225 0.5923642516136169 -0.0 0.5768174529075623 0.4124223589897156 0 1.0 0 0.0 0 0.0 0 0.0 0.581397294998169 -0.01426270604133606 0.21605446934700012 0.8499709963798523 0.5268105268478394 -0.0 0.5789073705673218 0.4071616530418396 0 1.0 0 0.0 0 0.0 0 0.0 1.4862301349639893 -0.10191839188337326 -0.2839455306529999 -0.7631458640098572 0.6461989283561707 -0.0 0.9505875706672668 0.4537401795387268 0 1.0 0 0.0 0 0.0 0 0.0 1.4845201969146729 -0.10378402471542358 0.21605446934700012 -0.7112338542938232 0.7029328346252441 -0.0 0.5294012427330017 0.2925146222114563 0 1.0 0 0.0 0 0.0 0 0.0 1.4862301349639893 -0.10191839188337326 0.21605446934700012 -0.7631458640098572 0.6461989283561707 -0.0 0.5305162668228149 0.29475635290145874 0 1.0 0 0.0 0 0.0 0 0.0 -0.37520909309387207 -0.10221756994724274 -0.2839455306529999 -0.5784783363342285 0.8156682252883911 -0.0 0.9751698970794678 0.46790796518325806 0 1.0 0 0.0 0 0.0 0 0.0 -0.3796348571777344 -0.10511818528175354 0.21605446934700012 -0.5158543586730957 0.8566545844078064 -0.0 0.4938368499279022 0.3056175708770752 0 1.0 0 0.0 0 0.0 0 0.0 -0.37520909309387207 -0.10221756994724274 0.21605446934700012 -0.5784783363342285 0.8156682252883911 -0.0 0.49705228209495544 0.30893921852111816 0 1.0 0 0.0 0 0.0 0 0.0 -1.4594570398330688 0.1181122362613678 -0.2839455306529999 -0.22357860207557678 -0.9746696352958679 -0.0 1.0241351127624512 0.7602477073669434 0 1.0 0 0.0 0 0.0 0 0.0 -1.455222249031067 0.11702132225036621 0.21605446934700012 -0.2787865698337555 -0.9603259563446045 -0.0 0.5489665269851685 0.5649992227554321 0 1.0 0 0.0 0 0.0 0 0.0 -1.4594570398330688 0.1181122362613678 0.21605446934700012 -0.22357860207557678 -0.9746696352958679 -0.0 0.5465291142463684 0.5658203363418579 0 1.0 0 0.0 0 0.0 0 0.0 0.32681703567504883 -0.012601405382156372 -0.2839455306529999 -0.39289528131484985 -0.9195532202720642 -0.0 0.04717668890953064 0.5587554574012756 0 1.0 0 0.0 0 0.0 0 0.0 0.33636903762817383 -0.016442134976387024 0.21605446934700012 -0.3570665717124939 -0.9340494871139526 -0.0 0.4287617802619934 0.4006116986274719 0 1.0 0 0.0 0 0.0 0 0.0 0.32681703567504883 -0.012601405382156372 0.21605446934700012 -0.39289528131484985 -0.9195532202720642 -0.0 0.4235183298587799 0.40663421154022217 0 1.0 0 0.0 0 0.0 0 0.0 1.2535793781280518 -0.10288161039352417 -0.2839455306529999 -0.9118015170097351 -0.41059601306915283 -0.0 0.07672339677810669 0.4637816548347473 0 1.0 0 0.0 0 0.0 0 0.0 1.2573459148406982 -0.11062387377023697 0.21605446934700012 -0.8855555653572083 -0.46449172496795654 -0.0 0.380201518535614 0.32091307640075684 0 1.0 0 0.0 0 0.0 0 0.0 1.2535793781280518 -0.10288161039352417 0.21605446934700012 -0.9118015170097351 -0.41059601306915283 -0.0 0.3792789578437805 0.3292854428291321 0 1.0 0 0.0 0 0.0 0 0.0 2.2304742336273193 0.09781163930892944 -0.2839455306529999 0.7263100147247314 -0.6873378753662109 -0.0 0.9197068810462952 0.5102700591087341 0 1.0 0 0.0 0 0.0 0 0.0 2.2361552715301514 0.10397043824195862 0.21605446934700012 0.7449567914009094 -0.6670736074447632 -0.0 0.5628004670143127 0.3693418502807617 0 1.0 0 0.0 0 0.0 0 0.0 2.2304742336273193 0.09781163930892944 0.21605446934700012 0.7263100147247314 -0.6873378753662109 -0.0 0.5600180625915527 0.3614509701728821 0 1.0 0 0.0 0 0.0 0 0.0 -0.4467599391937256 -0.10778285562992096 -0.2839455306529999 0.4193548262119293 0.9078035950660706 -0.0 0.01762986183166504 0.4642455577850342 0 1.0 0 0.0 0 0.0 0 0.0 -0.45253944396972656 -0.10478616505861282 0.21605446934700012 0.4997406005859375 0.8661457896232605 -0.0 0.4420255124568939 0.31313610076904297 0 1.0 0 0.0 0 0.0 0 0.0 -0.4467599391937256 -0.10778285562992096 0.21605446934700012 0.4193548262119293 0.9078035950660706 -0.0 0.4457634687423706 0.30876803398132324 0 1.0 0 0.0 0 0.0 0 0.0 -1.5220080614089966 0.11654096841812134 -0.2839455306529999 0.3482772409915924 -0.9373760223388672 -0.0 0.07370230555534363 0.7506841421127319 0 1.0 0 0.0 0 0.0 0 0.0 -1.5188337564468384 0.11761730909347534 0.21605446934700012 0.2953581213951111 -0.9553819298744202 -0.0 0.5130614042282104 0.5606002807617188 0 1.0 0 0.0 0 0.0 0 0.0 -1.5220080614089966 0.11654096841812134 0.21605446934700012 0.3482772409915924 -0.9373760223388672 -0.0 0.5113095641136169 0.5592316389083862 0 1.0 0 0.0 0 0.0 0 0.0 2.1040523052215576 0.10063314437866211 -0.2839455306529999 -0.6462294459342957 0.7631153464317322 -0.0 0.9940800070762634 0.5180487632751465 0 1.0 0 0.0 0 0.0 0 0.0 2.0974700450897217 0.09494137763977051 0.21605446934700012 -0.6625263094902039 0.749015748500824 -0.0 1.4727293252944946 0.34793686866760254 0 1.0 0 0.0 0 0.0 0 0.0 2.1040523052215576 0.10063314437866211 0.21605446934700012 -0.6462294459342957 0.7631153464317322 -0.0 1.4774537086486816 0.3544101119041443 0 1.0 0 0.0 0 0.0 0 0.0 0.5846080780029297 -0.0199325829744339 -0.2839455306529999 0.8887600302696228 0.45832696557044983 -0.0 0.8958795666694641 0.5395151376724243 0 1.0 0 0.0 0 0.0 0 0.0 0.581397294998169 -0.01426270604133606 0.21605446934700012 0.8499709963798523 0.5268105268478394 -0.0 0.5789073705673218 0.4071616530418396 0 1.0 0 0.0 0 0.0 0 0.0 0.5846080780029297 -0.0199325829744339 0.21605446934700012 0.8887600302696228 0.45832696557044983 -0.0 0.5808061361312866 0.40162408351898193 0 1.0 0 0.0 0 0.0 0 0.0 1.4845201969146729 -0.10378402471542358 -0.2839455306529999 -0.7112338542938232 0.7029328346252441 -0.0 0.9516310691833496 0.4517591595649719 0 1.0 0 0.0 0 0.0 0 0.0 1.4826304912567139 -0.10555722564458847 0.21605446934700012 -0.6577044129371643 0.7532273530960083 -0.0 0.5281489491462708 0.29035401344299316 0 1.0 0 0.0 0 0.0 0 0.0 1.4845201969146729 -0.10378402471542358 0.21605446934700012 -0.7112338542938232 0.7029328346252441 -0.0 0.5294012427330017 0.2925146222114563 0 1.0 0 0.0 0 0.0 0 0.0 -0.3796348571777344 -0.10511818528175354 -0.2839455306529999 -0.5158543586730957 0.8566545844078064 -0.0 0.9778796434402466 0.46475380659103394 0 1.0 0 0.0 0 0.0 0 0.0 -0.38419437408447266 -0.10763204842805862 0.21605446934700012 -0.44813379645347595 0.8939481973648071 -0.0 0.4905005395412445 0.3028048276901245 0 1.0 0 0.0 0 0.0 0 0.0 -0.3796348571777344 -0.10511818528175354 0.21605446934700012 -0.5158543586730957 0.8566545844078064 -0.0 0.4938368499279022 0.3056175708770752 0 1.0 0 0.0 0 0.0 0 0.0 -1.455222249031067 0.11702132225036621 -0.2839455306529999 -0.2787865698337555 -0.9603259563446045 -0.0 1.02069091796875 0.75916588306427 0 1.0 0 0.0 0 0.0 0 0.0 -1.4513328075408936 0.11576256155967712 0.21605446934700012 -0.3408612310886383 -0.940092146396637 -0.0 0.5512181520462036 0.5639832019805908 0 1.0 0 0.0 0 0.0 0 0.0 -1.455222249031067 0.11702132225036621 0.21605446934700012 -0.2787865698337555 -0.9603259563446045 -0.0 0.5489665269851685 0.5649992227554321 0 1.0 0 0.0 0 0.0 0 0.0 0.33636903762817383 -0.016442134976387024 -0.2839455306529999 -0.3570665717124939 -0.9340494871139526 -0.0 0.0416143536567688 0.554681658744812 0 1.0 0 0.0 0 0.0 0 0.0 0.34713220596313477 -0.020346105098724365 0.21605446934700012 -0.32773828506469727 -0.9447309970855713 -0.0 0.4349146783351898 0.3943026661872864 0 1.0 0 0.0 0 0.0 0 0.0 0.33636903762817383 -0.016442134976387024 0.21605446934700012 -0.3570665717124939 -0.9340494871139526 -0.0 0.4287617802619934 0.4006116986274719 0 1.0 0 0.0 0 0.0 0 0.0 -0.38419437408447266 -0.10763204842805862 -0.2839455306529999 -0.44813379645347595 0.8939481973648071 -0.0 0.980652391910553 0.4620588421821594 0 1.0 0 0.0 0 0.0 0 0.0 -0.3888876438140869 -0.10975916683673859 0.21605446934700012 -0.37626269459724426 0.9264808893203735 -0.0 0.48704904317855835 0.30050182342529297 0 1.0 0 0.0 0 0.0 0 0.0 -0.38419437408447266 -0.10763204842805862 0.21605446934700012 -0.44813379645347595 0.8939481973648071 -0.0 0.4905005395412445 0.3028048276901245 0 1.0 0 0.0 0 0.0 0 0.0 2.2242119312286377 0.09136095643043518 -0.2839455306529999 0.7097079157829285 -0.7044892907142639 -0.0 0.923414945602417 0.5033544301986694 0 1.0 0 0.0 0 0.0 0 0.0 2.2304742336273193 0.09781163930892944 0.21605446934700012 0.7263100147247314 -0.6873378753662109 -0.0 0.5600180625915527 0.3614509701728821 0 1.0 0 0.0 0 0.0 0 0.0 2.2242119312286377 0.09136095643043518 0.21605446934700012 0.7097079157829285 -0.7044892907142639 -0.0 0.5568292737007141 0.3530978560447693 0 1.0 0 0.0 0 0.0 0 0.0 1.3691771030426025 -0.10636235028505325 -0.2839455306529999 0.6100039482116699 0.7923520803451538 -0.0 0.018720537424087524 0.45159733295440674 0 1.0 0 0.0 0 0.0 0 0.0 1.3660571575164795 -0.10378524661064148 0.21605446934700012 0.6615497469902039 0.7498703002929688 -0.0 0.4435648024082184 0.2951512336730957 0 1.0 0 0.0 0 0.0 0 0.0 1.3691771030426025 -0.10636235028505325 0.21605446934700012 0.6100039482116699 0.7923520803451538 -0.0 0.44556230306625366 0.2918233871459961 0 1.0 0 0.0 0 0.0 0 0.0 -1.5250217914581299 0.11532112956047058 -0.2839455306529999 0.4033326208591461 -0.9150364398956299 -0.0 0.0758422315120697 0.7487537860870361 0 1.0 0 0.0 0 0.0 0 0.0 -1.5220080614089966 0.11654096841812134 0.21605446934700012 0.3482772409915924 -0.9373760223388672 -0.0 0.5113095641136169 0.5592316389083862 0 1.0 0 0.0 0 0.0 0 0.0 -1.5250217914581299 0.11532112956047058 0.21605446934700012 0.4033326208591461 -0.9150364398956299 -0.0 0.5096496939659119 0.5577319860458374 0 1.0 0 0.0 0 0.0 0 0.0 2.0974700450897217 0.09494137763977051 -0.2839455306529999 -0.6625263094902039 0.749015748500824 -0.0 0.9981878995895386 0.5112894177436829 0 1.0 0 0.0 0 0.0 0 0.0 2.0912868976593018 0.08934691548347473 0.21605446934700012 -0.6799523830413818 0.7332376837730408 -0.0 1.4682507514953613 0.3417431116104126 0 1.0 0 0.0 0 0.0 0 0.0 2.0974700450897217 0.09494137763977051 0.21605446934700012 -0.6625263094902039 0.749015748500824 -0.0 1.4727293252944946 0.34793686866760254 0 1.0 0 0.0 0 0.0 0 0.0 0.587390661239624 -0.025889486074447632 -0.2839455306529999 0.921506404876709 0.3883175253868103 -0.0 0.8951253294944763 0.5330183506011963 0 1.0 0 0.0 0 0.0 0 0.0 0.5846080780029297 -0.0199325829744339 0.21605446934700012 0.8887600302696228 0.45832696557044983 -0.0 0.5808061361312866 0.40162408351898193 0 1.0 0 0.0 0 0.0 0 0.0 0.587390661239624 -0.025889486074447632 0.21605446934700012 0.921506404876709 0.3883175253868103 -0.0 0.5825201869010925 0.39580583572387695 0 1.0 0 0.0 0 0.0 0 0.0 1.4826304912567139 -0.10555722564458847 -0.2839455306529999 -0.6577044129371643 0.7532273530960083 -0.0 0.9527712464332581 0.44987887144088745 0 1.0 0 0.0 0 0.0 0 0.0 1.480560541152954 -0.10723800212144852 0.21605446934700012 -0.5939817428588867 0.8044679164886475 -0.0 0.526757001876831 0.2882760167121887 0 1.0 0 0.0 0 0.0 0 0.0 1.4826304912567139 -0.10555722564458847 0.21605446934700012 -0.6577044129371643 0.7532273530960083 -0.0 0.5281489491462708 0.29035401344299316 0 1.0 0 0.0 0 0.0 0 0.0 -1.637346625328064 0.1158793568611145 -0.2839455306529999 -0.9163182377815247 0.40040284395217896 -0.0 0.14502182602882385 0.7068488597869873 0 1.0 0 0.0 0 0.0 0 0.0 -1.6406108140945435 0.10786223411560059 0.21605446934700012 -0.9349040389060974 0.35483869910240173 -0.0 0.4515746533870697 0.5366171598434448 0 1.0 0 0.0 0 0.0 0 0.0 -1.637346625328064 0.1158793568611145 0.21605446934700012 -0.9163182377815247 0.40040284395217896 -0.0 0.4533528983592987 0.5442155599594116 0 1.0 0 0.0 0 0.0 0 0.0 0.34713220596313477 -0.020346105098724365 -0.2839455306529999 -0.32773828506469727 -0.9447309970855713 -0.0 0.03524616360664368 0.5504134297370911 0 1.0 0 0.0 0 0.0 0 0.0 0.35910677909851074 -0.024313315749168396 0.21605446934700012 -0.3034150302410126 -0.9528489112854004 -0.0 0.44204097986221313 0.387759804725647 0 1.0 0 0.0 0 0.0 0 0.0 0.34713220596313477 -0.020346105098724365 0.21605446934700012 -0.32773828506469727 -0.9447309970855713 -0.0 0.4349146783351898 0.3943026661872864 0 1.0 0 0.0 0 0.0 0 0.0 -0.4407472610473633 -0.11023469269275665 -0.2839455306529999 0.335123747587204 0.9421674013137817 -0.0 0.014129281044006348 0.46126997470855713 0 1.0 0 0.0 0 0.0 0 0.0 -0.4467599391937256 -0.10778285562992096 0.21605446934700012 0.4193548262119293 0.9078035950660706 -0.0 0.4457634687423706 0.30876803398132324 0 1.0 0 0.0 0 0.0 0 0.0 -0.4407472610473633 -0.11023469269275665 0.21605446934700012 0.335123747587204 0.9421674013137817 -0.0 0.449765145778656 0.3050304651260376 0 1.0 0 0.0 0 0.0 0 0.0 -0.3888876438140869 -0.10975916683673859 -0.2839455306529999 -0.37626269459724426 0.9264808893203735 -0.0 0.9834892749786377 0.45981884002685547 0 1.0 0 0.0 0 0.0 0 0.0 -0.39371466636657715 -0.11149953305721283 0.21605446934700012 -0.3014313280582428 0.9534592628479004 -0.0 1.4834891557693481 0.2987098693847656 0 1.0 0 0.0 0 0.0 0 0.0 -0.3888876438140869 -0.10975916683673859 0.21605446934700012 -0.37626269459724426 0.9264808893203735 -0.0 0.48704904317855835 0.30050182342529297 0 1.0 0 0.0 0 0.0 0 0.0 -1.4513328075408936 0.11576256155967712 -0.2839455306529999 -0.3408612310886383 -0.940092146396637 -0.0 1.0175414085388184 0.7578567266464233 0 1.0 0 0.0 0 0.0 0 0.0 -1.4477888345718384 0.11433598399162292 0.21605446934700012 -0.41007721424102783 -0.9120151400566101 -0.0 0.5532851219177246 0.5627743005752563 0 1.0 0 0.0 0 0.0 0 0.0 -1.4513328075408936 0.11576256155967712 0.21605446934700012 -0.3408612310886383 -0.940092146396637 -0.0 0.5512181520462036 0.5639832019805908 0 1.0 0 0.0 0 0.0 0 0.0 2.2173683643341064 0.08461838960647583 -0.2839455306529999 0.694814920425415 -0.7191686630249023 -0.0 0.927477240562439 0.4960745573043823 0 1.0 0 0.0 0 0.0 0 0.0 2.2242119312286377 0.09136095643043518 0.21605446934700012 0.7097079157829285 -0.7044892907142639 -0.0 0.5568292737007141 0.3530978560447693 0 1.0 0 0.0 0 0.0 0 0.0 2.2173683643341064 0.08461838960647583 0.21605446934700012 0.694814920425415 -0.7191686630249023 -0.0 0.5532031655311584 0.3442986011505127 0 1.0 0 0.0 0 0.0 0 0.0 0.35910677909851074 -0.024313315749168396 -0.2839455306529999 -0.3034150302410126 -0.9528489112854004 -0.0 0.028042852878570557 0.545917272567749 0 1.0 0 0.0 0 0.0 0 0.0 0.37229275703430176 -0.028343766927719116 0.21605446934700012 -0.28290659189224243 -0.9591357111930847 -0.0 0.450199693441391 0.381067156791687 0 1.0 0 0.0 0 0.0 0 0.0 0.35910677909851074 -0.024313315749168396 0.21605446934700012 -0.3034150302410126 -0.9528489112854004 -0.0 0.44204097986221313 0.387759804725647 0 1.0 0 0.0 0 0.0 0 0.0 1.3724949359893799 -0.10874000191688538 -0.2839455306529999 0.5534226298332214 0.8328806161880493 -0.0 0.01679942011833191 0.44891852140426636 0 1.0 0 0.0 0 0.0 0 0.0 1.3691771030426025 -0.10636235028505325 0.21605446934700012 0.6100039482116699 0.7923520803451538 -0.0 0.44556230306625366 0.2918233871459961 0 1.0 0 0.0 0 0.0 0 0.0 1.3724949359893799 -0.10874000191688538 0.21605446934700012 0.5534226298332214 0.8328806161880493 -0.0 0.44773662090301514 0.2886993885040283 0 1.0 0 0.0 0 0.0 0 0.0 2.0912868976593018 0.08934691548347473 -0.2839455306529999 -0.6799523830413818 0.7332376837730408 -0.0 0.0019910037517547607 0.5047188401222229 0 1.0 0 0.0 0 0.0 0 0.0 2.085502862930298 0.08384972810745239 0.21605446934700012 -0.6985381841659546 0.7155674695968628 -0.0 0.46402648091316223 0.3358168601989746 0 1.0 0 0.0 0 0.0 0 0.0 2.0912868976593018 0.08934691548347473 0.21605446934700012 -0.6799523830413818 0.7332376837730408 -0.0 0.46825069189071655 0.3417431116104126 0 1.0 0 0.0 0 0.0 0 0.0 1.480560541152954 -0.10723800212144852 -0.2839455306529999 -0.5939817428588867 0.8044679164886475 -0.0 0.9540088772773743 0.4480985999107361 0 1.0 0 0.0 0 0.0 0 0.0 1.4772183895111084 -0.10947578400373459 0.21605446934700012 -0.5250709652900696 0.8510391712188721 -0.0 0.5244709849357605 0.28544747829437256 0 1.0 0 0.0 0 0.0 0 0.0 1.480560541152954 -0.10723800212144852 0.21605446934700012 -0.5939817428588867 0.8044679164886475 -0.0 0.526757001876831 0.2882760167121887 0 1.0 0 0.0 0 0.0 0 0.0 -0.43450093269348145 -0.1121416762471199 -0.2839455306529999 0.24909207224845886 0.9684743881225586 -0.0 0.010486572980880737 0.4588884115219116 0 1.0 0 0.0 0 0.0 0 0.0 -0.4407472610473633 -0.11023469269275665 0.21605446934700012 0.335123747587204 0.9421674013137817 -0.0 0.449765145778656 0.3050304651260376 0 1.0 0 0.0 0 0.0 0 0.0 -0.43450093269348145 -0.1121416762471199 0.21605446934700012 0.24909207224845886 0.9684743881225586 -0.0 0.4540289342403412 0.30193692445755005 0 1.0 0 0.0 0 0.0 0 0.0 -1.5278749465942383 0.11395779252052307 -0.2839455306529999 0.4599749743938446 -0.8879055380821228 -0.0 0.0778232216835022 0.746696949005127 0 1.0 0 0.0 0 0.0 0 0.0 -1.5250217914581299 0.11532112956047058 0.21605446934700012 0.4033326208591461 -0.9150364398956299 -0.0 0.5096496939659119 0.5577319860458374 0 1.0 0 0.0 0 0.0 0 0.0 -1.5278749465942383 0.11395779252052307 0.21605446934700012 0.4599749743938446 -0.8879055380821228 -0.0 0.5080809593200684 0.5561013221740723 0 1.0 0 0.0 0 0.0 0 0.0 0.589745283126831 -0.032133400440216064 -0.2839455306529999 0.9480269551277161 0.3180944323539734 -0.0 0.8945980072021484 0.526344895362854 0 1.0 0 0.0 0 0.0 0 0.0 0.587390661239624 -0.025889486074447632 0.21605446934700012 0.921506404876709 0.3883175253868103 -0.0 0.5825201869010925 0.39580583572387695 0 1.0 0 0.0 0 0.0 0 0.0 0.589745283126831 -0.032133400440216064 0.21605446934700012 0.9480269551277161 0.3180944323539734 -0.0 0.5840551853179932 0.38970309495925903 0 1.0 0 0.0 0 0.0 0 0.0 -0.39371466636657715 -0.11149953305721283 -0.2839455306529999 -0.3014313280582428 0.9534592628479004 -0.0 0.9863911867141724 0.4580300450325012 0 1.0 0 0.0 0 0.0 0 0.0 -0.39867544174194336 -0.11285315454006195 0.21605446934700012 -0.22501297295093536 0.9743339419364929 -0.0 1.4798285961151123 0.29743075370788574 0 1.0 0 0.0 0 0.0 0 0.0 -0.39371466636657715 -0.11149953305721283 0.21605446934700012 -0.3014313280582428 0.9534592628479004 -0.0 1.4834891557693481 0.2987098693847656 0 1.0 0 0.0 0 0.0 0 0.0 -1.4477888345718384 0.11433598399162292 -0.2839455306529999 -0.41007721424102783 -0.9120151400566101 -0.0 1.0146870613098145 0.7563359141349792 0 1.0 0 0.0 0 0.0 0 0.0 -1.4445902109146118 0.11274155974388123 0.21605446934700012 -0.4862819314002991 -0.8737754225730896 -0.0 0.5551687479019165 0.5613738298416138 0 1.0 0 0.0 0 0.0 0 0.0 -1.4477888345718384 0.11433598399162292 0.21605446934700012 -0.41007721424102783 -0.9120151400566101 -0.0 0.5532851219177246 0.5627743005752563 0 1.0 0 0.0 0 0.0 0 0.0 2.2099435329437256 0.07758393883705139 -0.2839455306529999 0.6814478039741516 -0.7318338751792908 -0.0 0.9318990707397461 0.4884364604949951 0 1.0 0 0.0 0 0.0 0 0.0 2.2173683643341064 0.08461838960647583 0.21605446934700012 0.694814920425415 -0.7191686630249023 -0.0 0.5532031655311584 0.3442986011505127 0 1.0 0 0.0 0 0.0 0 0.0 2.2099435329437256 0.07758393883705139 0.21605446934700012 0.6814478039741516 -0.7318338751792908 -0.0 0.5491054058074951 0.3350799083709717 0 1.0 0 0.0 0 0.0 0 0.0 0.37229275703430176 -0.028343766927719116 -0.2839455306529999 -0.28290659189224243 -0.9591357111930847 -0.0 0.019985288381576538 0.541165828704834 0 1.0 0 0.0 0 0.0 0 0.0 0.3866901397705078 -0.032437458634376526 0.21605446934700012 -0.26541948318481445 -0.964110255241394 -0.0 0.459436297416687 0.37434637546539307 0 1.0 0 0.0 0 0.0 0 0.0 0.37229275703430176 -0.028343766927719116 0.21605446934700012 -0.28290659189224243 -0.9591357111930847 -0.0 0.450199693441391 0.381067156791687 0 1.0 0 0.0 0 0.0 0 0.0 1.5816113948822021 -0.11520648002624512 -0.2839455306529999 0.8994414806365967 -0.4369640052318573 -0.0 0.9034565687179565 0.4446355104446411 0 1.0 0 0.0 0 0.0 0 0.0 1.5848753452301025 -0.10778042674064636 0.21605446934700012 0.9302957057952881 -0.3667104244232178 -0.0 0.5888720750808716 0.3142467737197876 0 1.0 0 0.0 0 0.0 0 0.0 1.5816113948822021 -0.11520648002624512 0.21605446934700012 0.8994414806365967 -0.4369640052318573 -0.0 0.5878925919532776 0.306384801864624 0 1.0 0 0.0 0 0.0 0 0.0 2.085502862930298 0.08384972810745239 -0.2839455306529999 -0.6985381841659546 0.7155674695968628 -0.0 0.00549432635307312 0.49834656715393066 0 1.0 0 0.0 0 0.0 0 0.0 2.0801174640655518 0.07844984531402588 0.21605446934700012 -0.7183446884155273 0.695669412612915 -0.0 0.4600628614425659 0.3301432728767395 0 1.0 0 0.0 0 0.0 0 0.0 2.085502862930298 0.08384972810745239 0.21605446934700012 -0.6985381841659546 0.7155674695968628 -0.0 0.46402648091316223 0.3358168601989746 0 1.0 0 0.0 0 0.0 0 0.0 1.3760263919830322 -0.11091089993715286 -0.2839455306529999 0.4943082928657532 0.8692587018013 -0.0 0.014759421348571777 0.4464564919471741 0 1.0 0 0.0 0 0.0 0 0.0 1.3724949359893799 -0.10874000191688538 0.21605446934700012 0.5534226298332214 0.8328806161880493 -0.0 0.44773662090301514 0.2886993885040283 0 1.0 0 0.0 0 0.0 0 0.0 1.3760263919830322 -0.11091089993715286 0.21605446934700012 0.4943082928657532 0.8692587018013 -0.0 0.45010197162628174 0.28578758239746094 0 1.0 0 0.0 0 0.0 0 0.0 -0.4280209541320801 -0.11350381374359131 -0.2839455306529999 0.16342662274837494 0.9865413308143616 -0.0 0.006697714328765869 0.45710289478302 0 1.0 0 0.0 0 0.0 0 0.0 -0.43450093269348145 -0.1121416762471199 0.21605446934700012 0.24909207224845886 0.9684743881225586 -0.0 0.4540289342403412 0.30193692445755005 0 1.0 0 0.0 0 0.0 0 0.0 -0.4280209541320801 -0.11350381374359131 0.21605446934700012 0.16342662274837494 0.9865413308143616 -0.0 0.4585503935813904 0.2995036840438843 0 1.0 0 0.0 0 0.0 0 0.0 -1.3318300247192383 0.10725411772727966 -0.2839455306529999 0.9889522790908813 0.14807580411434174 -0.0 0.9364566206932068 0.7249259948730469 0 1.0 0 0.0 0 0.0 0 0.0 -1.3330157995224 0.11431652307510376 0.21605446934700012 0.982573926448822 0.18573564291000366 -0.0 0.6117595434188843 0.5635828971862793 0 1.0 0 0.0 0 0.0 0 0.0 -1.3318300247192383 0.10725411772727966 0.21605446934700012 0.9889522790908813 0.14807580411434174 -0.0 0.6129981279373169 0.5573402047157288 0 1.0 0 0.0 0 0.0 0 0.0 2.0801174640655518 0.07844984531402588 -0.2839455306529999 -0.7183446884155273 0.695669412612915 -0.0 0.00870424509048462 0.4921778440475464 0 1.0 0 0.0 0 0.0 0 0.0 2.0751311779022217 0.07314726710319519 0.21605446934700012 -0.7394329905509949 0.6732078194618225 -0.0 0.45636481046676636 0.32470518350601196 0 1.0 0 0.0 0 0.0 0 0.0 2.0801174640655518 0.07844984531402588 0.21605446934700012 -0.7183446884155273 0.695669412612915 -0.0 0.4600628614425659 0.3301432728767395 0 1.0 0 0.0 0 0.0 0 0.0 0.5916717052459717 -0.03866434097290039 -0.2839455306529999 0.9685049057006836 0.24893948435783386 -0.0 0.8942910432815552 0.5194913148880005 0 1.0 0 0.0 0 0.0 0 0.0 0.589745283126831 -0.032133400440216064 0.21605446934700012 0.9480269551277161 0.3180944323539734 -0.0 0.5840551853179932 0.38970309495925903 0 1.0 0 0.0 0 0.0 0 0.0 0.5916717052459717 -0.03866434097290039 0.21605446934700012 0.9685049057006836 0.24893948435783386 -0.0 0.5854156017303467 0.38331204652786255 0 1.0 0 0.0 0 0.0 0 0.0 1.4772183895111084 -0.10947578400373459 -0.2839455306529999 -0.5250709652900696 0.8510391712188721 -0.0 0.9559882879257202 0.44572991132736206 0 1.0 0 0.0 0 0.0 0 0.0 1.4736135005950928 -0.1115189865231514 0.21605446934700012 -0.46244698762893677 0.886623740196228 -0.0 0.5219641923904419 0.2828214764595032 0 1.0 0 0.0 0 0.0 0 0.0 1.4772183895111084 -0.10947578400373459 0.21605446934700012 -0.5250709652900696 0.8510391712188721 -0.0 0.5244709849357605 0.28544747829437256 0 1.0 0 0.0 0 0.0 0 0.0 0.3866901397705078 -0.032437458634376526 -0.2839455306529999 -0.26541948318481445 -0.964110255241394 -0.0 0.01107051968574524 0.5361419320106506 0 1.0 0 0.0 0 0.0 0 0.0 0.4022986888885498 -0.036594390869140625 0.21605446934700012 -0.25034332275390625 -0.9681386947631836 -0.0 0.4697710871696472 0.36776047945022583 0 1.0 0 0.0 0 0.0 0 0.0 0.3866901397705078 -0.032437458634376526 0.21605446934700012 -0.26541948318481445 -0.964110255241394 -0.0 0.459436297416687 0.37434637546539307 0 1.0 0 0.0 0 0.0 0 0.0 -0.2665255069732666 -0.12248415499925613 -0.2839455306529999 0.8409680724143982 -0.5410626530647278 -0.0 0.9163439869880676 0.4481813907623291 0 1.0 0 0.0 0 0.0 0 0.0 -0.2605404853820801 -0.11238247901201248 0.21605446934700012 0.8779259324073792 -0.47877436876296997 -0.0 0.5717080235481262 0.31764930486679077 0 1.0 0 0.0 0 0.0 0 0.0 -0.2665255069732666 -0.12248415499925613 0.21605446934700012 0.8409680724143982 -0.5410626530647278 -0.0 0.5691090226173401 0.30606985092163086 0 1.0 0 0.0 0 0.0 0 0.0 -1.5305675268173218 0.11245092749595642 -0.2839455306529999 0.5174718499183655 -0.8556779623031616 -0.0 0.07964730262756348 0.74451744556427 0 1.0 0 0.0 0 0.0 0 0.0 -1.5278749465942383 0.11395779252052307 0.21605446934700012 0.4599749743938446 -0.8879055380821228 -0.0 0.5080809593200684 0.5561013221740723 0 1.0 0 0.0 0 0.0 0 0.0 -1.5305675268173218 0.11245092749595642 0.21605446934700012 0.5174718499183655 -0.8556779623031616 -0.0 0.5066025257110596 0.5543391704559326 0 1.0 0 0.0 0 0.0 0 0.0 1.2573459148406982 -0.11062387377023697 -0.2839455306529999 -0.8855555653572083 -0.46449172496795654 -0.0 0.07467031478881836 0.45629990100860596 0 1.0 0 0.0 0 0.0 0 0.0 1.261538028717041 -0.1180596575140953 0.21605446934700012 -0.8555864095687866 -0.5175939202308655 -0.0 0.3813808858394623 0.3127126097679138 0 1.0 0 0.0 0 0.0 0 0.0 1.2573459148406982 -0.11062387377023697 0.21605446934700012 -0.8855555653572083 -0.46449172496795654 -0.0 0.380201518535614 0.32091307640075684 0 1.0 0 0.0 0 0.0 0 0.0 -0.39867544174194336 -0.11285315454006195 -0.2839455306529999 -0.22501297295093536 0.9743339419364929 -0.0 0.9893592596054077 0.4566894769668579 0 1.0 0 0.0 0 0.0 0 0.0 -0.40377020835876465 -0.11382002383470535 0.21605446934700012 -0.14847254753112793 0.9888912439346313 -0.0 1.4760758876800537 0.29666680097579956 0 1.0 0 0.0 0 0.0 0 0.0 -0.39867544174194336 -0.11285315454006195 0.21605446934700012 -0.22501297295093536 0.9743339419364929 -0.0 1.4798285961151123 0.29743075370788574 0 1.0 0 0.0 0 0.0 0 0.0 -1.4445902109146118 0.11274155974388123 -0.2839455306529999 -0.4862819314002991 -0.8737754225730896 -0.0 1.012126088142395 0.7546167373657227 0 1.0 0 0.0 0 0.0 0 0.0 -1.4417370557785034 0.11097931861877441 0.21605446934700012 -0.5684377551078796 -0.8226874470710754 -0.0 0.55687016248703 0.5597825050354004 0 1.0 0 0.0 0 0.0 0 0.0 -1.4445902109146118 0.11274155974388123 0.21605446934700012 -0.4862819314002991 -0.8737754225730896 -0.0 0.5551687479019165 0.5613738298416138 0 1.0 0 0.0 0 0.0 0 0.0 2.201937437057495 0.07025760412216187 -0.2839455306529999 0.669362485408783 -0.7429120540618896 -0.0 0.9366838932037354 0.48045414686203003 0 1.0 0 0.0 0 0.0 0 0.0 2.2099435329437256 0.07758393883705139 0.21605446934700012 0.6814478039741516 -0.7318338751792908 -0.0 0.5491054058074951 0.3350799083709717 0 1.0 0 0.0 0 0.0 0 0.0 2.201937437057495 0.07025760412216187 0.21605446934700012 0.669362485408783 -0.7429120540618896 -0.0 0.5444985628128052 0.3254818916320801 0 1.0 0 0.0 0 0.0 0 0.0 0.4022986888885498 -0.036594390869140625 -0.2839455306529999 -0.25034332275390625 -0.9681386947631836 -0.0 1.0013192892074585 0.5308443307876587 0 1.0 0 0.0 0 0.0 0 0.0 0.41911864280700684 -0.040814563632011414 0.21605446934700012 -0.2372203767299652 -0.9714346528053284 -0.0 1.4811856746673584 0.36151188611984253 0 1.0 0 0.0 0 0.0 0 0.0 0.4022986888885498 -0.036594390869140625 0.21605446934700012 -0.25034332275390625 -0.9681386947631836 -0.0 1.469771146774292 0.36776047945022583 0 1.0 0 0.0 0 0.0 0 0.0 2.0751311779022217 0.07314726710319519 -0.2839455306529999 -0.7394329905509949 0.6732078194618225 -0.0 0.011627405881881714 0.4862140417098999 0 1.0 0 0.0 0 0.0 0 0.0 2.0705435276031494 0.06794196367263794 0.21605446934700012 -0.7618335485458374 0.6477248668670654 -0.0 0.4529351592063904 0.31948477029800415 0 1.0 0 0.0 0 0.0 0 0.0 2.0751311779022217 0.07314726710319519 0.21605446934700012 -0.7394329905509949 0.6732078194618225 -0.0 0.45636481046676636 0.32470518350601196 0 1.0 0 0.0 0 0.0 0 0.0 1.379772424697876 -0.11287504434585571 -0.2839455306529999 0.4352244734764099 0.9002960324287415 -0.0 0.012598484754562378 0.4442101716995239 0 1.0 0 0.0 0 0.0 0 0.0 1.3760263919830322 -0.11091089993715286 0.21605446934700012 0.4943082928657532 0.8692587018013 -0.0 0.45010197162628174 0.28578758239746094 0 1.0 0 0.0 0 0.0 0 0.0 1.379772424697876 -0.11287504434585571 0.21605446934700012 0.4352244734764099 0.9002960324287415 -0.0 0.45266157388687134 0.2830924987792969 0 1.0 0 0.0 0 0.0 0 0.0 -0.4213075637817383 -0.11432109773159027 -0.2839455306529999 0.08008056879043579 0.9967650175094604 -0.0 0.0027590692043304443 0.4559170603752136 0 1.0 0 0.0 0 0.0 0 0.0 -0.4280209541320801 -0.11350381374359131 0.21605446934700012 0.16342662274837494 0.9865413308143616 -0.0 0.4585503935813904 0.2995036840438843 0 1.0 0 0.0 0 0.0 0 0.0 -0.4213075637817383 -0.11432109773159027 0.21605446934700012 0.08008056879043579 0.9967650175094604 -0.0 0.4633219242095947 0.2977495789527893 0 1.0 0 0.0 0 0.0 0 0.0 -1.5330997705459595 0.11080053448677063 -0.2839455306529999 0.5755485892295837 -0.8177434802055359 -0.0 0.0813169777393341 0.7422186136245728 0 1.0 0 0.0 0 0.0 0 0.0 -1.5305675268173218 0.11245092749595642 0.21605446934700012 0.5174718499183655 -0.8556779623031616 -0.0 0.5066025257110596 0.5543391704559326 0 1.0 0 0.0 0 0.0 0 0.0 -1.5330997705459595 0.11080053448677063 0.21605446934700012 0.5755485892295837 -0.8177434802055359 -0.0 0.5052133798599243 0.5524446964263916 0 1.0 0 0.0 0 0.0 0 0.0 0.593170166015625 -0.04548230767250061 -0.2839455306529999 0.983306348323822 0.1818903088569641 -0.0 0.8941986560821533 0.5124542713165283 0 1.0 0 0.0 0 0.0 0 0.0 0.5916717052459717 -0.03866434097290039 0.21605446934700012 0.9685049057006836 0.24893948435783386 -0.0 0.5854156017303467 0.38331204652786255 0 1.0 0 0.0 0 0.0 0 0.0 0.593170166015625 -0.04548230767250061 0.21605446934700012 0.983306348323822 0.1818903088569641 -0.0 0.5866051912307739 0.376629114151001 0 1.0 0 0.0 0 0.0 0 0.0 1.4736135005950928 -0.1115189865231514 -0.2839455306529999 -0.46244698762893677 0.886623740196228 -0.0 0.9581106901168823 0.4435710906982422 0 1.0 0 0.0 0 0.0 0 0.0 1.4697458744049072 -0.11336759477853775 0.21605446934700012 -0.40171512961387634 0.9157384037971497 -0.0 0.5192333459854126 0.28040528297424316 0 1.0 0 0.0 0 0.0 0 0.0 1.4736135005950928 -0.1115189865231514 0.21605446934700012 -0.46244698762893677 0.886623740196228 -0.0 0.5219641923904419 0.2828214764595032 0 1.0 0 0.0 0 0.0 0 0.0 -0.40377020835876465 -0.11382002383470535 -0.2839455306529999 -0.14847254753112793 0.9888912439346313 -0.0 0.9923943281173706 0.4557947516441345 0 1.0 0 0.0 0 0.0 0 0.0 -0.4089984893798828 -0.11440014839172363 0.21605446934700012 -0.07318338751792908 0.9973143935203552 -0.0 1.472240686416626 0.2964206337928772 0 1.0 0 0.0 0 0.0 0 0.0 -0.40377020835876465 -0.11382002383470535 0.21605446934700012 -0.14847254753112793 0.9888912439346313 -0.0 1.4760758876800537 0.29666680097579956 0 1.0 0 0.0 0 0.0 0 0.0 -1.4417370557785034 0.11097931861877441 -0.2839455306529999 -0.5684377551078796 -0.8226874470710754 -0.0 1.0098564624786377 0.7527108192443848 0 1.0 0 0.0 0 0.0 0 0.0 -1.4392293691635132 0.1090492308139801 0.21605446934700012 -0.6502884030342102 -0.7596667408943176 -0.0 0.5583904981613159 0.5580000877380371 0 1.0 0 0.0 0 0.0 0 0.0 -1.4417370557785034 0.11097931861877441 0.21605446934700012 -0.5684377551078796 -0.8226874470710754 -0.0 0.55687016248703 0.5597825050354004 0 1.0 0 0.0 0 0.0 0 0.0 2.193350076675415 0.06263938546180725 -0.2839455306529999 0.6584368348121643 -0.7526169419288635 -0.0 0.9418329000473022 0.47215110063552856 0 1.0 0 0.0 0 0.0 0 0.0 2.201937437057495 0.07025760412216187 0.21605446934700012 0.669362485408783 -0.7429120540618896 -0.0 0.5444985628128052 0.3254818916320801 0 1.0 0 0.0 0 0.0 0 0.0 2.193350076675415 0.06263938546180725 0.21605446934700012 0.6584368348121643 -0.7526169419288635 -0.0 0.5393425226211548 0.3155598044395447 0 1.0 0 0.0 0 0.0 0 0.0 0.41911864280700684 -0.040814563632011414 -0.2839455306529999 -0.2372203767299652 -0.9714346528053284 -0.0 0.9907824397087097 0.5252926349639893 0 1.0 0 0.0 0 0.0 0 0.0 0.4371500015258789 -0.045097991824150085 0.21605446934700012 -0.22571489214897156 -0.9741813540458679 -0.0 0.4936082363128662 0.35583263635635376 0 1.0 0 0.0 0 0.0 0 0.0 0.41911864280700684 -0.040814563632011414 0.21605446934700012 -0.2372203767299652 -0.9714346528053284 -0.0 1.4811856746673584 0.36151188611984253 0 1.0 0 0.0 0 0.0 0 0.0 2.0705435276031494 0.06794196367263794 -0.2839455306529999 -0.7618335485458374 0.6477248668670654 -0.0 0.014271557331085205 0.4804534316062927 0 1.0 0 0.0 0 0.0 0 0.0 2.066354990005493 0.06283397972583771 0.21605446934700012 -0.7855769395828247 0.6187322735786438 -0.0 0.4497760236263275 0.31446272134780884 0 1.0 0 0.0 0 0.0 0 0.0 2.0705435276031494 0.06794196367263794 0.21605446934700012 -0.7618335485458374 0.6477248668670654 -0.0 0.4529351592063904 0.31948477029800415 0 1.0 0 0.0 0 0.0 0 0.0 0.4371500015258789 -0.045097991824150085 -0.2839455306529999 -0.22571489214897156 -0.9741813540458679 -0.0 0.9795475006103516 0.5195319652557373 0 1.0 0 0.0 0 0.0 0 0.0 0.4563925266265869 -0.04944466054439545 0.21605446934700012 -0.22766807675361633 -0.9737235903739929 -0.0 0.506902277469635 0.3509640097618103 0 1.0 0 0.0 0 0.0 0 0.0 0.4371500015258789 -0.045097991824150085 0.21605446934700012 -0.22571489214897156 -0.9741813540458679 -0.0 0.4936082363128662 0.35583263635635376 0 1.0 0 0.0 0 0.0 0 0.0 1.3837320804595947 -0.11463243514299393 -0.2839455306529999 0.37711721658706665 0.9261451959609985 -0.0 0.01031571626663208 0.4421793818473816 0 1.0 0 0.0 0 0.0 0 0.0 1.379772424697876 -0.11287504434585571 0.21605446934700012 0.4352244734764099 0.9002960324287415 -0.0 0.45266157388687134 0.2830924987792969 0 1.0 0 0.0 0 0.0 0 0.0 1.3837320804595947 -0.11463243514299393 0.21605446934700012 0.37711721658706665 0.9261451959609985 -0.0 0.45541685819625854 0.2806207537651062 0 1.0 0 0.0 0 0.0 0 0.0 -0.41436076164245605 -0.1145935207605362 -0.2839455306529999 0.0015564439818263054 0.999969482421875 -0.0 0.9986672401428223 0.4553358554840088 0 1.0 0 0.0 0 0.0 0 0.0 -0.4213075637817383 -0.11432109773159027 0.21605446934700012 0.08008056879043579 0.9967650175094604 -0.0 1.4633219242095947 0.2977495789527893 0 1.0 0 0.0 0 0.0 0 0.0 -0.41436076164245605 -0.1145935207605362 0.21605446934700012 0.0015564439818263054 0.999969482421875 -0.0 1.4683330059051514 0.29669511318206787 0 1.0 0 0.0 0 0.0 0 0.0 -1.5355125665664673 0.10897016525268555 -0.2839455306529999 0.6321604251861572 -0.7748039364814758 -0.0 0.08286002278327942 0.7397554516792297 0 1.0 0 0.0 0 0.0 0 0.0 -1.5330997705459595 0.11080053448677063 0.21605446934700012 0.5755485892295837 -0.8177434802055359 -0.0 0.5052133798599243 0.5524446964263916 0 1.0 0 0.0 0 0.0 0 0.0 -1.5355125665664673 0.10897016525268555 0.21605446934700012 0.6321604251861572 -0.7748039364814758 -0.0 0.503890335559845 0.5503765344619751 0 1.0 0 0.0 0 0.0 0 0.0 2.066354990005493 0.06283397972583771 -0.2839455306529999 -0.7855769395828247 0.6187322735786438 -0.0 0.016644001007080078 0.4748919606208801 0 1.0 0 0.0 0 0.0 0 0.0 2.062565565109253 0.05782328546047211 0.21605446934700012 -0.8104800581932068 0.5857112407684326 -0.0 0.44688835740089417 0.3096204400062561 0 1.0 0 0.0 0 0.0 0 0.0 2.066354990005493 0.06283397972583771 0.21605446934700012 -0.7855769395828247 0.6187322735786438 -0.0 0.4497760236263275 0.31446272134780884 0 1.0 0 0.0 0 0.0 0 0.0 1.4697458744049072 -0.11336759477853775 -0.2839455306529999 -0.40171512961387634 0.9157384037971497 -0.0 0.9603778123855591 0.441622257232666 0 1.0 0 0.0 0 0.0 0 0.0 1.46561598777771 -0.11502161622047424 0.21605446934700012 -0.34366893768310547 0.939085066318512 -0.0 0.5162762403488159 0.2782074809074402 0 1.0 0 0.0 0 0.0 0 0.0 1.4697458744049072 -0.11336759477853775 0.21605446934700012 -0.40171512961387634 0.9157384037971497 -0.0 0.5192333459854126 0.28040528297424316 0 1.0 0 0.0 0 0.0 0 0.0 -0.4089984893798828 -0.11440014839172363 -0.2839455306529999 -0.07318338751792908 0.9973143935203552 -0.0 0.9954967498779297 0.45534396171569824 0 1.0 0 0.0 0 0.0 0 0.0 -0.41436076164245605 -0.1145935207605362 0.21605446934700012 0.0015564439818263054 0.999969482421875 -0.0 1.4683330059051514 0.29669511318206787 0 1.0 0 0.0 0 0.0 0 0.0 -0.4089984893798828 -0.11440014839172363 0.21605446934700012 -0.07318338751792908 0.9973143935203552 -0.0 1.472240686416626 0.2964206337928772 0 1.0 0 0.0 0 0.0 0 0.0 -1.4392293691635132 0.1090492308139801 -0.2839455306529999 -0.6502884030342102 -0.7596667408943176 -0.0 1.0078752040863037 0.7506272792816162 0 1.0 0 0.0 0 0.0 0 0.0 -1.4369914531707764 0.10692211985588074 0.21605446934700012 -0.7228308916091919 -0.6909695863723755 -0.0 0.5597748756408691 0.5560001134872437 0 1.0 0 0.0 0 0.0 0 0.0 -1.4392293691635132 0.1090492308139801 0.21605446934700012 -0.6502884030342102 -0.7596667408943176 -0.0 0.5583904981613159 0.5580000877380371 0 1.0 0 0.0 0 0.0 0 0.0 0.5942404270172119 -0.05258728563785553 -0.2839455306529999 0.9930112361907959 0.11780144274234772 -0.0 0.8943162560462952 0.5052309036254883 0 1.0 0 0.0 0 0.0 0 0.0 0.593170166015625 -0.04548230767250061 0.21605446934700012 0.983306348323822 0.1818903088569641 -0.0 0.5866051912307739 0.376629114151001 0 1.0 0 0.0 0 0.0 0 0.0 0.5942404270172119 -0.05258728563785553 0.21605446934700012 0.9930112361907959 0.11780144274234772 -0.0 0.587626576423645 0.3696514964103699 0 1.0 0 0.0 0 0.0 0 0.0 2.184180974960327 0.05472928285598755 -0.2839455306529999 0.6484572887420654 -0.7612231969833374 -0.0 0.9473441243171692 0.46356165409088135 0 1.0 0 0.0 0 0.0 0 0.0 2.193350076675415 0.06263938546180725 0.21605446934700012 0.6584368348121643 -0.7526169419288635 -0.0 0.5393425226211548 0.3155598044395447 0 1.0 0 0.0 0 0.0 0 0.0 2.184180974960327 0.05472928285598755 0.21605446934700012 0.6484572887420654 -0.7612231969833374 -0.0 0.5335952639579773 0.3053867816925049 0 1.0 0 0.0 0 0.0 0 0.0 0.4563925266265869 -0.04944466054439545 -0.2839455306529999 -0.22766807675361633 -0.9737235903739929 -0.0 0.9677401781082153 0.513634443283081 0 1.0 0 0.0 0 0.0 0 0.0 0.4605276584625244 -0.05044436454772949 0.21605446934700012 -0.24390393495559692 -0.9697867035865784 -0.0 0.5097468495368958 0.34996771812438965 0 1.0 0 0.0 0 0.0 0 0.0 0.4563925266265869 -0.04944466054439545 0.21605446934700012 -0.22766807675361633 -0.9737235903739929 -0.0 0.506902277469635 0.3509640097618103 0 1.0 0 0.0 0 0.0 0 0.0 1.3879063129425049 -0.1161830797791481 -0.2839455306529999 0.32065796852111816 0.9471724629402161 -0.0 0.007909178733825684 0.4403642416000366 0 1.0 0 0.0 0 0.0 0 0.0 1.3837320804595947 -0.11463243514299393 0.21605446934700012 0.37711721658706665 0.9261451959609985 -0.0 0.45541685819625854 0.2806207537651062 0 1.0 0 0.0 0 0.0 0 0.0 1.3879063129425049 -0.1161830797791481 0.21605446934700012 0.32065796852111816 0.9471724629402161 -0.0 0.45837000012397766 0.2783792018890381 0 1.0 0 0.0 0 0.0 0 0.0 -1.537847638130188 0.10692331194877625 -0.2839455306529999 0.6839808225631714 -0.7294839024543762 -0.0 0.08430370688438416 0.7370809316635132 0 1.0 0 0.0 0 0.0 0 0.0 -1.5355125665664673 0.10897016525268555 0.21605446934700012 0.6321604251861572 -0.7748039364814758 -0.0 0.503890335559845 0.5503765344619751 0 1.0 0 0.0 0 0.0 0 0.0 -1.537847638130188 0.10692331194877625 0.21605446934700012 0.6839808225631714 -0.7294839024543762 -0.0 0.5026096105575562 0.5480918884277344 0 1.0 0 0.0 0 0.0 0 0.0 2.062565565109253 0.05782328546047211 -0.2839455306529999 -0.8104800581932068 0.5857112407684326 -0.0 0.01875227689743042 0.46952366828918457 0 1.0 0 0.0 0 0.0 0 0.0 2.0591747760772705 0.05290988087654114 0.21605446934700012 -0.8364818096160889 0.5479598641395569 -0.0 0.4442720413208008 0.3049391508102417 0 1.0 0 0.0 0 0.0 0 0.0 2.062565565109253 0.05782328546047211 0.21605446934700012 -0.8104800581932068 0.5857112407684326 -0.0 0.44688835740089417 0.3096204400062561 0 1.0 0 0.0 0 0.0 0 0.0 1.46561598777771 -0.11502161622047424 -0.2839455306529999 -0.34366893768310547 0.939054548740387 -0.0 0.9627910852432251 0.43988388776779175 0 1.0 0 0.0 0 0.0 0 0.0 1.4612228870391846 -0.11648104339838028 0.21605446934700012 -0.28882718086242676 0.9573656320571899 -0.0 0.5130904912948608 0.2762381434440613 0 1.0 0 0.0 0 0.0 0 0.0 1.46561598777771 -0.11502161622047424 0.21605446934700012 -0.34366893768310547 0.939085066318512 -0.0 0.5162762403488159 0.2782074809074402 0 1.0 0 0.0 0 0.0 0 0.0 -0.27314019203186035 -0.13197773694992065 -0.2839455306529999 0.7983031868934631 -0.6022217273712158 -0.0 0.9201858043670654 0.4386823773384094 0 1.0 0 0.0 0 0.0 0 0.0 -0.2665255069732666 -0.12248415499925613 0.21605446934700012 0.8409680724143982 -0.5410626530647278 -0.0 0.5691090226173401 0.30606985092163086 0 1.0 0 0.0 0 0.0 0 0.0 -0.27314019203186035 -0.13197773694992065 0.21605446934700012 0.7983031868934631 -0.6022217273712158 -0.0 0.5659947991371155 0.29502570629119873 0 1.0 0 0.0 0 0.0 0 0.0 -1.6406108140945435 0.10786223411560059 -0.2839455306529999 -0.9349040389060974 0.35483869910240173 -0.0 0.14534926414489746 0.6984879970550537 0 1.0 0 0.0 0 0.0 0 0.0 -1.643573522567749 0.09945592284202576 0.21605446934700012 -0.9503769278526306 0.3110446333885193 -0.0 0.4498993456363678 0.5286128520965576 0 1.0 0 0.0 0 0.0 0 0.0 -1.6406108140945435 0.10786223411560059 0.21605446934700012 -0.9349040389060974 0.35483869910240173 -0.0 0.4515746533870697 0.5366171598434448 0 1.0 0 0.0 0 0.0 0 0.0 0.4605276584625244 -0.05044436454772949 -0.2839455306529999 -0.24390393495559692 -0.9697867035865784 -0.0 0.965241551399231 0.512294352054596 0 1.0 0 0.0 0 0.0 0 0.0 0.46440958976745605 -0.05145867168903351 0.21605446934700012 -0.2627643644809723 -0.964842677116394 -0.0 0.5124109387397766 0.3489842414855957 0 1.0 0 0.0 0 0.0 0 0.0 0.4605276584625244 -0.05044436454772949 0.21605446934700012 -0.24390393495559692 -0.9697867035865784 -0.0 0.5097468495368958 0.34996771812438965 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 0.0 -0.999969482421875 -0.0 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.18394553661346436 0.21605445444583893 0.0 -0.999969482421875 -0.0 0.4008871912956238 0.25336402654647827 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 0.0 -1.0 -0.0 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.18394553661346436 -0.2839455306529999 0.999969482421875 0.0 -0.0 0.047188133001327515 0.39707428216934204 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 0.21605446934700012 1.0 0.0 -0.0 0.40608155727386475 0.3021705150604248 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.18394553661346436 0.21605445444583893 1.0 0.0 -0.0 0.4008871912956238 0.25336402654647827 0 1.0 0 0.0 0 0.0 0 0.0 2.1744306087493896 0.046527326107025146 -0.2839455306529999 0.6444898843765259 -0.7645801901817322 -0.0 0.9532111287117004 0.45473164319992065 0 1.0 0 0.0 0 0.0 0 0.0 2.184180974960327 0.05472928285598755 0.21605446934700012 0.6484572887420654 -0.7612231969833374 -0.0 0.5335952639579773 0.3053867816925049 0 1.0 0 0.0 0 0.0 0 0.0 2.1744306087493896 0.046527326107025146 0.21605446934700012 0.6444898843765259 -0.7645801901817322 -0.0 0.527215301990509 0.29505491256713867 0 1.0 0 0.0 0 0.0 0 0.0 0.46440958976745605 -0.05145867168903351 -0.2839455306529999 -0.2627643644809723 -0.964842677116394 -0.0 0.9629130363464355 0.5109500885009766 0 1.0 0 0.0 0 0.0 0 0.0 0.46803879737854004 -0.0524875670671463 0.21605446934700012 -0.2840357720851898 -0.9588000178337097 -0.0 0.5148954391479492 0.3480064272880554 0 1.0 0 0.0 0 0.0 0 0.0 0.46440958976745605 -0.05145867168903351 0.21605446934700012 -0.2627643644809723 -0.964842677116394 -0.0 0.5124109387397766 0.3489842414855957 0 1.0 0 0.0 0 0.0 0 0.0 1.5777533054351807 -0.12243308126926422 -0.2839455306529999 0.8640400171279907 -0.503372311592102 -0.0 0.9056793451309204 0.43781161308288574 0 1.0 0 0.0 0 0.0 0 0.0 1.5816113948822021 -0.11520648002624512 0.21605446934700012 0.8994414806365967 -0.4369640052318573 -0.0 0.5878925919532776 0.306384801864624 0 1.0 0 0.0 0 0.0 0 0.0 1.5777533054351807 -0.12243308126926422 0.21605446934700012 0.8640400171279907 -0.503372311592102 -0.0 0.586573600769043 0.2985709309577942 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 -0.2839455306529999 -0.8016296625137329 -0.5977965593338013 -0.0 0.049333542585372925 0.44634634256362915 0 1.0 0 0.0 0 0.0 0 0.0 -0.5030343532562256 -0.1343943178653717 0.21605446934700012 -0.790887176990509 -0.6119571328163147 -0.0 0.40782004594802856 0.29606229066848755 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 0.21605446934700012 -0.8016296625137329 -0.5977965593338013 -0.0 0.40608155727386475 0.3021705150604248 0 1.0 0 0.0 0 0.0 0 0.0 -1.3308266401290894 0.09963467717170715 -0.2839455306529999 0.9933164715766907 0.11523789167404175 -0.0 0.9365185499191284 0.7176774144172668 0 1.0 0 0.0 0 0.0 0 0.0 -1.3318300247192383 0.10725411772727966 0.21605446934700012 0.9889522790908813 0.14807580411434174 -0.0 0.6129981279373169 0.5573402047157288 0 1.0 0 0.0 0 0.0 0 0.0 -1.3308266401290894 0.09963467717170715 0.21605446934700012 0.9933164715766907 0.11523789167404175 -0.0 0.6142219305038452 0.550504207611084 0 1.0 0 0.0 0 0.0 0 0.0 2.0591747760772705 0.05290988087654114 -0.2839455306529999 -0.8364818096160889 0.5479598641395569 -0.0 0.020604074001312256 0.464341402053833 0 1.0 0 0.0 0 0.0 0 0.0 2.056183099746704 0.0480937659740448 0.21605446934700012 -0.8632160425186157 0.504806637763977 -0.0 0.44192713499069214 0.3004010319709778 0 1.0 0 0.0 0 0.0 0 0.0 2.0591747760772705 0.05290988087654114 0.21605446934700012 -0.8364818096160889 0.5479598641395569 -0.0 0.4442720413208008 0.3049391508102417 0 1.0 0 0.0 0 0.0 0 0.0 0.46803879737854004 -0.0524875670671463 -0.2839455306529999 -0.2840357720851898 -0.9588000178337097 -0.0 0.9607527256011963 0.5096024870872498 0 1.0 0 0.0 0 0.0 0 0.0 0.47141480445861816 -0.05353105068206787 0.21605446934700012 -0.3080843389034271 -0.9513229727745056 -0.0 0.5172011852264404 0.3470277786254883 0 1.0 0 0.0 0 0.0 0 0.0 0.46803879737854004 -0.0524875670671463 0.21605446934700012 -0.2840357720851898 -0.9588000178337097 -0.0 0.5148954391479492 0.3480064272880554 0 1.0 0 0.0 0 0.0 0 0.0 1.39229416847229 -0.11752697080373764 -0.2839455306529999 0.26645711064338684 0.9638355374336243 -0.0 0.005378127098083496 0.43876564502716064 0 1.0 0 0.0 0 0.0 0 0.0 1.3879063129425049 -0.1161830797791481 0.21605446934700012 0.32065796852111816 0.9471724629402161 -0.0 0.45837000012397766 0.2783792018890381 0 1.0 0 0.0 0 0.0 0 0.0 1.39229416847229 -0.11752697080373764 0.21605446934700012 0.26645711064338684 0.9638355374336243 -0.0 0.46152105927467346 0.2763766050338745 0 1.0 0 0.0 0 0.0 0 0.0 -1.5401049852371216 0.10465997457504272 -0.2839455306529999 0.729941725730896 -0.6834925413131714 -0.0 0.08564883470535278 0.7341939210891724 0 1.0 0 0.0 0 0.0 0 0.0 -1.537847638130188 0.10692331194877625 0.21605446934700012 0.6839808225631714 -0.7294839024543762 -0.0 0.5026096105575562 0.5480918884277344 0 1.0 0 0.0 0 0.0 0 0.0 -1.5401049852371216 0.10465997457504272 0.21605446934700012 0.729941725730896 -0.6834925413131714 -0.0 0.5013704895973206 0.545587956905365 0 1.0 0 0.0 0 0.0 0 0.0 2.056183099746704 0.0480937659740448 -0.2839455306529999 -0.8632160425186157 0.504806637763977 -0.0 0.022206127643585205 0.45933693647384644 0 1.0 0 0.0 0 0.0 0 0.0 2.0535900592803955 0.04337495565414429 0.21605446934700012 -0.8892483115196228 0.45738089084625244 -0.0 0.4398529827594757 0.2959889769554138 0 1.0 0 0.0 0 0.0 0 0.0 2.056183099746704 0.0480937659740448 0.21605446934700012 -0.8632160425186157 0.504806637763977 -0.0 0.44192713499069214 0.3004010319709778 0 1.0 0 0.0 0 0.0 0 0.0 1.4612228870391846 -0.11648104339838028 -0.2839455306529999 -0.28882718086242676 0.9573656320571899 -0.0 0.9653527736663818 0.43835723400115967 0 1.0 0 0.0 0 0.0 0 0.0 1.4565675258636475 -0.11774588376283646 0.21605446934700012 -0.2374645173549652 0.9713736176490784 -0.0 0.5096758604049683 0.2745087742805481 0 1.0 0 0.0 0 0.0 0 0.0 1.4612228870391846 -0.11648104339838028 0.21605446934700012 -0.28882718086242676 0.9573656320571899 -0.0 0.5130904912948608 0.2762381434440613 0 1.0 0 0.0 0 0.0 0 0.0 -0.28038525581359863 -0.14086322486400604 -0.2839455306529999 0.7530442476272583 -0.6579485535621643 -0.0 0.9243186712265015 0.4298208951950073 0 1.0 0 0.0 0 0.0 0 0.0 -0.27314019203186035 -0.13197773694992065 0.21605446934700012 0.7983031868934631 -0.6022217273712158 -0.0 0.5659947991371155 0.29502570629119873 0 1.0 0 0.0 0 0.0 0 0.0 -0.28038525581359863 -0.14086322486400604 0.21605446934700012 0.7530442476272583 -0.6579485535621643 -0.0 0.562325656414032 0.2845187783241272 0 1.0 0 0.0 0 0.0 0 0.0 -1.4369914531707764 0.10692211985588074 -0.2839455306529999 -0.7228308916091919 -0.6909695863723755 -0.0 1.006119728088379 0.7483381628990173 0 1.0 0 0.0 0 0.0 0 0.0 -1.4349483251571655 0.10456877946853638 0.21605446934700012 -0.7848140001296997 -0.6197088360786438 -0.0 0.5610678791999817 0.5537543296813965 0 1.0 0 0.0 0 0.0 0 0.0 -1.4369914531707764 0.10692211985588074 0.21605446934700012 -0.7228308916091919 -0.6909695863723755 -0.0 0.5597748756408691 0.5560001134872437 0 1.0 0 0.0 0 0.0 0 0.0 -0.5030343532562256 -0.1343943178653717 -0.2839455306529999 -0.790887176990509 -0.6119571328163147 -0.0 0.04723277688026428 0.4410468339920044 0 1.0 0 0.0 0 0.0 0 0.0 -0.49911928176879883 -0.13927245140075684 0.21605446934700012 -0.7683034539222717 -0.6400341987609863 -0.0 0.40969035029411316 0.2901642918586731 0 1.0 0 0.0 0 0.0 0 0.0 -0.5030343532562256 -0.1343943178653717 0.21605446934700012 -0.790887176990509 -0.6119571328163147 -0.0 0.40782004594802856 0.29606229066848755 0 1.0 0 0.0 0 0.0 0 0.0 0.5948824882507324 -0.05997928977012634 -0.2839455306529999 0.9983519911766052 0.05722220614552498 -0.0 0.8946398496627808 0.4978189468383789 0 1.0 0 0.0 0 0.0 0 0.0 0.5942404270172119 -0.05258728563785553 0.21605446934700012 0.9930112361907959 0.11780144274234772 -0.0 0.587626576423645 0.3696514964103699 0 1.0 0 0.0 0 0.0 0 0.0 0.5948824882507324 -0.05997928977012634 0.21605446934700012 0.9983519911766052 0.05722220614552498 -0.0 0.5884814262390137 0.36237674951553345 0 1.0 0 0.0 0 0.0 0 0.0 2.1693994998931885 0.04227796196937561 -0.2839455306529999 0.651570200920105 -0.7585680484771729 -0.0 0.9562410712242126 0.4502038359642029 0 1.0 0 0.0 0 0.0 0 0.0 2.1744306087493896 0.046527326107025146 0.21605446934700012 0.6444898843765259 -0.7645801901817322 -0.0 0.527215301990509 0.29505491256713867 0 1.0 0 0.0 0 0.0 0 0.0 2.1693994998931885 0.04227796196937561 0.21605446934700012 0.651570200920105 -0.7585680484771729 -0.0 0.5238203406333923 0.28983134031295776 0 1.0 0 0.0 0 0.0 0 0.0 0.47141480445861816 -0.05353105068206787 -0.2839455306529999 -0.3080843389034271 -0.9513229727745056 -0.0 0.9587593078613281 0.5082523822784424 0 1.0 0 0.0 0 0.0 0 0.0 0.47453808784484863 -0.05458913743495941 0.21605446934700012 -0.33548998832702637 -0.9420148134231567 -0.0 0.5193297863006592 0.346042275428772 0 1.0 0 0.0 0 0.0 0 0.0 0.47141480445861816 -0.05353105068206787 0.21605446934700012 -0.3080843389034271 -0.9513229727745056 -0.0 0.5172011852264404 0.3470277786254883 0 1.0 0 0.0 0 0.0 0 0.0 1.3968961238861084 -0.11866410821676254 -0.2839455306529999 0.2148503065109253 0.9766228199005127 -0.0 0.002721160650253296 0.4373849034309387 0 1.0 0 0.0 0 0.0 0 0.0 1.39229416847229 -0.11752697080373764 0.21605446934700012 0.26645711064338684 0.9638355374336243 -0.0 0.46152105927467346 0.2763766050338745 0 1.0 0 0.0 0 0.0 0 0.0 1.3968961238861084 -0.11866410821676254 0.21605446934700012 0.2148503065109253 0.9766228199005127 -0.0 0.4648702144622803 0.27462238073349 0 1.0 0 0.0 0 0.0 0 0.0 -0.49911928176879883 -0.13927245140075684 -0.2839455306529999 -0.7683034539222717 -0.6400341987609863 -0.0 0.04507666826248169 0.4359728693962097 0 1.0 0 0.0 0 0.0 0 0.0 -0.4950852394104004 -0.14393897354602814 0.21605446934700012 -0.7441022992134094 -0.6680501699447632 -0.0 0.41169679164886475 0.2844768166542053 0 1.0 0 0.0 0 0.0 0 0.0 -0.49911928176879883 -0.13927245140075684 0.21605446934700012 -0.7683034539222717 -0.6400341987609863 -0.0 0.40969035029411316 0.2901642918586731 0 1.0 0 0.0 0 0.0 0 0.0 -1.542284369468689 0.10218015313148499 -0.2839455306529999 0.7702566385269165 -0.6377147436141968 -0.0 0.08689627051353455 0.7310928106307983 0 1.0 0 0.0 0 0.0 0 0.0 -1.5401049852371216 0.10465997457504272 0.21605446934700012 0.729941725730896 -0.6834925413131714 -0.0 0.5013704895973206 0.545587956905365 0 1.0 0 0.0 0 0.0 0 0.0 -1.542284369468689 0.10218015313148499 0.21605446934700012 0.7702566385269165 -0.6377147436141968 -0.0 0.5001721382141113 0.5428614020347595 0 1.0 0 0.0 0 0.0 0 0.0 2.0535900592803955 0.04337495565414429 -0.2839455306529999 -0.8892483115196228 0.45738089084625244 -0.0 0.023565351963043213 0.45450156927108765 0 1.0 0 0.0 0 0.0 0 0.0 2.0512959957122803 0.03859776258468628 0.21605446934700012 -0.9120456576347351 0.41001617908477783 -0.0 0.43797069787979126 0.29154956340789795 0 1.0 0 0.0 0 0.0 0 0.0 2.0535900592803955 0.04337495565414429 0.21605446934700012 -0.8892483115196228 0.45738089084625244 -0.0 0.4398529827594757 0.2959889769554138 0 1.0 0 0.0 0 0.0 0 0.0 1.4565675258636475 -0.11774588376283646 -0.2839455306529999 -0.2374645173549652 0.9713736176490784 -0.0 0.9680638909339905 0.43704426288604736 0 1.0 0 0.0 0 0.0 0 0.0 1.4516489505767822 -0.11881612986326218 0.21605446934700012 -0.1896725296974182 0.981841504573822 -0.0 0.5060319304466248 0.2730323076248169 0 1.0 0 0.0 0 0.0 0 0.0 1.4565675258636475 -0.11774588376283646 0.21605446934700012 -0.2374645173549652 0.9713736176490784 -0.0 0.5096758604049683 0.2745087742805481 0 1.0 0 0.0 0 0.0 0 0.0 -1.4349483251571655 0.10456877946853638 -0.2839455306529999 -0.7848140001296997 -0.6197088360786438 -0.0 1.0045299530029297 0.7458109259605408 0 1.0 0 0.0 0 0.0 0 0.0 -1.433099627494812 0.10198923945426941 0.21605446934700012 -0.8379467129707336 -0.5457014441490173 -0.0 0.5622706413269043 0.5512592792510986 0 1.0 0 0.0 0 0.0 0 0.0 -1.4349483251571655 0.10456877946853638 0.21605446934700012 -0.7848140001296997 -0.6197088360786438 -0.0 0.5610678791999817 0.5537543296813965 0 1.0 0 0.0 0 0.0 0 0.0 0.47453808784484863 -0.05458913743495941 -0.2839455306529999 -0.33548998832702637 -0.9420148134231567 -0.0 0.9569305777549744 0.5069000124931335 0 1.0 0 0.0 0 0.0 0 0.0 0.47740817070007324 -0.05566181242465973 0.21605446934700012 -0.3668935298919678 -0.9302346706390381 -0.0 0.5212823152542114 0.3450441360473633 0 1.0 0 0.0 0 0.0 0 0.0 0.47453808784484863 -0.05458913743495941 0.21605446934700012 -0.33548998832702637 -0.9420148134231567 -0.0 0.5193297863006592 0.346042275428772 0 1.0 0 0.0 0 0.0 0 0.0 1.261538028717041 -0.1180596575140953 -0.2839455306529999 -0.8555864095687866 -0.5175939202308655 -0.0 0.07244861125946045 0.44909894466400146 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 -0.12518896162509918 0.21605446934700012 -0.8221076130867004 -0.5692922472953796 -0.0 0.38283151388168335 0.30467474460601807 0 1.0 0 0.0 0 0.0 0 0.0 1.261538028717041 -0.1180596575140953 0.21605446934700012 -0.8555864095687866 -0.5175939202308655 -0.0 0.3813808858394623 0.3127126097679138 0 1.0 0 0.0 0 0.0 0 0.0 -0.28807997703552246 -0.1490871012210846 -0.2839455306529999 0.7084261775016785 -0.7057710289955139 -0.0 0.9286611676216125 0.4216494560241699 0 1.0 0 0.0 0 0.0 0 0.0 -0.28038525581359863 -0.14086322486400604 0.21605446934700012 0.7530442476272583 -0.6579485535621643 -0.0 0.562325656414032 0.2845187783241272 0 1.0 0 0.0 0 0.0 0 0.0 -0.28807997703552246 -0.1490871012210846 0.21605446934700012 0.7084261775016785 -0.7057710289955139 -0.0 0.5581673979759216 0.27465975284576416 0 1.0 0 0.0 0 0.0 0 0.0 2.164696455001831 0.03816966712474823 -0.2839455306529999 0.6648457050323486 -0.7469404935836792 -0.0 0.9590770602226257 0.4458661675453186 0 1.0 0 0.0 0 0.0 0 0.0 2.1693994998931885 0.04227796196937561 0.21605446934700012 0.651570200920105 -0.7585680484771729 -0.0 0.5238203406333923 0.28983134031295776 0 1.0 0 0.0 0 0.0 0 0.0 2.164696455001831 0.03816966712474823 0.21605446934700012 0.6648457050323486 -0.7469404935836792 -0.0 0.5205872654914856 0.2848947048187256 0 1.0 0 0.0 0 0.0 0 0.0 0.47740817070007324 -0.05566181242465973 -0.2839455306529999 -0.3668935298919678 -0.9302346706390381 -0.0 0.9552648067474365 0.5055457353591919 0 1.0 0 0.0 0 0.0 0 0.0 0.4800255298614502 -0.05674909055233002 0.21605446934700012 -0.4031189978122711 -0.9151280522346497 -0.0 0.5230607390403748 0.344028115272522 0 1.0 0 0.0 0 0.0 0 0.0 0.47740817070007324 -0.05566181242465973 0.21605446934700012 -0.3668935298919678 -0.9302346706390381 -0.0 0.5212823152542114 0.3450441360473633 0 1.0 0 0.0 0 0.0 0 0.0 -0.4950852394104004 -0.14393897354602814 -0.2839455306529999 -0.7441022992134094 -0.6680501699447632 -0.0 0.04286402463912964 0.43112242221832275 0 1.0 0 0.0 0 0.0 0 0.0 -0.49093198776245117 -0.14839386940002441 0.21605446934700012 -0.7181615829467773 -0.69582200050354 -0.0 0.4138440191745758 0.27900052070617676 0 1.0 0 0.0 0 0.0 0 0.0 -0.4950852394104004 -0.14393897354602814 0.21605446934700012 -0.7441022992134094 -0.6680501699447632 -0.0 0.41169679164886475 0.2844768166542053 0 1.0 0 0.0 0 0.0 0 0.0 -1.5443859100341797 0.09948384761810303 -0.2839455306529999 0.8052613735198975 -0.5928831100463867 -0.0 0.08804729580879211 0.727775514125824 0 1.0 0 0.0 0 0.0 0 0.0 -1.542284369468689 0.10218015313148499 0.21605446934700012 0.7702566385269165 -0.6377147436141968 -0.0 0.5001721382141113 0.5428614020347595 0 1.0 0 0.0 0 0.0 0 0.0 -1.5443859100341797 0.09948384761810303 0.21605446934700012 0.8052613735198975 -0.5928831100463867 -0.0 0.4990137815475464 0.539908766746521 0 1.0 0 0.0 0 0.0 0 0.0 2.0512959957122803 0.03859776258468628 -0.2839455306529999 -0.9120456576347351 0.41001617908477783 -0.0 0.024739772081375122 0.44967198371887207 0 1.0 0 0.0 0 0.0 0 0.0 2.049201726913452 0.03360651433467865 0.21605446934700012 -0.9311502575874329 0.3645741045475006 -0.0 0.43620121479034424 0.2869437336921692 0 1.0 0 0.0 0 0.0 0 0.0 2.0512959957122803 0.03859776258468628 0.21605446934700012 -0.9120456576347351 0.41001617908477783 -0.0 0.43797069787979126 0.29154956340789795 0 1.0 0 0.0 0 0.0 0 0.0 -1.433099627494812 0.10198923945426941 -0.2839455306529999 -0.8379467129707336 -0.5457014441490173 -0.0 1.0031040906906128 0.7430456280708313 0 1.0 0 0.0 0 0.0 0 0.0 -1.4314457178115845 0.09918349981307983 0.21605446934700012 -0.8820154666900635 -0.47117525339126587 -0.0 0.5633835792541504 0.5485106706619263 0 1.0 0 0.0 0 0.0 0 0.0 -1.433099627494812 0.10198923945426941 0.21605446934700012 -0.8379467129707336 -0.5457014441490173 -0.0 0.5622706413269043 0.5512592792510986 0 1.0 0 0.0 0 0.0 0 0.0 0.4800255298614502 -0.05674909055233002 -0.2839455306529999 -0.4031189978122711 -0.9151280522346497 -0.0 0.9537597894668579 0.5041894912719727 0 1.0 0 0.0 0 0.0 0 0.0 0.4823896884918213 -0.05785095691680908 0.21605446934700012 -0.4450819492340088 -0.8954740762710571 -0.0 0.5246662497520447 0.3429895043373108 0 1.0 0 0.0 0 0.0 0 0.0 0.4800255298614502 -0.05674909055233002 0.21605446934700012 -0.4031189978122711 -0.9151280522346497 -0.0 0.5230607390403748 0.344028115272522 0 1.0 0 0.0 0 0.0 0 0.0 1.40171217918396 -0.11959449201822281 -0.2839455306529999 0.1660817265510559 0.9860835671424866 -0.0 0.9999371767044067 0.43622368574142456 0 1.0 0 0.0 0 0.0 0 0.0 1.3968961238861084 -0.11866410821676254 0.21605446934700012 0.2148503065109253 0.9766228199005127 -0.0 1.4648702144622803 0.27462238073349 0 1.0 0 0.0 0 0.0 0 0.0 1.40171217918396 -0.11959449201822281 0.21605446934700012 0.1660817265510559 0.9860835671424866 -0.0 1.4684163331985474 0.2731272578239441 0 1.0 0 0.0 0 0.0 0 0.0 -0.49093198776245117 -0.14839386940002441 -0.2839455306529999 -0.7181615829467773 -0.69582200050354 -0.0 0.04059332609176636 0.42649346590042114 0 1.0 0 0.0 0 0.0 0 0.0 -0.48665952682495117 -0.15263715386390686 0.21605446934700012 -0.6906033754348755 -0.7232276201248169 -0.0 0.41613665223121643 0.27373653650283813 0 1.0 0 0.0 0 0.0 0 0.0 -0.49093198776245117 -0.14839386940002441 0.21605446934700012 -0.7181615829467773 -0.69582200050354 -0.0 0.4138440191745758 0.27900052070617676 0 1.0 0 0.0 0 0.0 0 0.0 1.4516489505767822 -0.11881612986326218 -0.2839455306529999 -0.1896725296974182 0.981841504573822 -0.0 0.9709261655807495 0.4359474182128906 0 1.0 0 0.0 0 0.0 0 0.0 1.4464681148529053 -0.11969178915023804 0.21605446934700012 -0.14542070031166077 0.9893490672111511 -0.0 0.5021612048149109 0.2718231678009033 0 1.0 0 0.0 0 0.0 0 0.0 1.4516489505767822 -0.11881612986326218 0.21605446934700012 -0.1896725296974182 0.981841504573822 -0.0 0.5060319304466248 0.2730323076248169 0 1.0 0 0.0 0 0.0 0 0.0 2.1603219509124756 0.0342024564743042 -0.2839455306529999 0.6794335842132568 -0.7336955070495605 -0.0 0.9617165923118591 0.441719651222229 0 1.0 0 0.0 0 0.0 0 0.0 2.164696455001831 0.03816966712474823 0.21605446934700012 0.6648457050323486 -0.7469404935836792 -0.0 0.5205872654914856 0.2848947048187256 0 1.0 0 0.0 0 0.0 0 0.0 2.1603219509124756 0.0342024564743042 0.21605446934700012 0.6794335842132568 -0.7336955070495605 -0.0 0.5175286531448364 0.2802373170852661 0 1.0 0 0.0 0 0.0 0 0.0 0.4823896884918213 -0.05785095691680908 -0.2839455306529999 -0.4450819492340088 -0.8954740762710571 -0.0 0.9524136781692505 0.5028311610221863 0 1.0 0 0.0 0 0.0 0 0.0 0.4845011234283447 -0.05896741896867752 0.21605446934700012 -0.4939115643501282 -0.8695028424263 -0.0 0.526100754737854 0.3419238328933716 0 1.0 0 0.0 0 0.0 0 0.0 0.4823896884918213 -0.05785095691680908 0.21605446934700012 -0.4450819492340088 -0.8954740762710571 -0.0 0.5246662497520447 0.3429895043373108 0 1.0 0 0.0 0 0.0 0 0.0 -1.3300057649612427 0.09145823121070862 -0.2839455306529999 0.9962462186813354 0.08639790117740631 -0.0 0.9367170333862305 0.7098526954650879 0 1.0 0 0.0 0 0.0 0 0.0 -1.3308266401290894 0.09963467717170715 0.21605446934700012 0.9933164715766907 0.11523789167404175 -0.0 0.6142219305038452 0.550504207611084 0 1.0 0 0.0 0 0.0 0 0.0 -1.3300057649612427 0.09145823121070862 0.21605446934700012 0.9962462186813354 0.08639790117740631 -0.0 0.6154331564903259 0.5430489778518677 0 1.0 0 0.0 0 0.0 0 0.0 -0.29604482650756836 -0.1565958559513092 -0.2839455306529999 0.6615192294120789 -0.7499008178710938 -0.0 0.9331279993057251 0.41422218084335327 0 1.0 0 0.0 0 0.0 0 0.0 -0.28807997703552246 -0.1490871012210846 0.21605446934700012 0.7084261775016785 -0.7057710289955139 -0.0 0.5581673979759216 0.27465975284576416 0 1.0 0 0.0 0 0.0 0 0.0 -0.29604482650756836 -0.1565958559513092 0.21605446934700012 0.6615192294120789 -0.7499008178710938 -0.0 0.553600549697876 0.2655588388442993 0 1.0 0 0.0 0 0.0 0 0.0 2.156275510787964 0.030376330018043518 -0.2839455306529999 0.695547342300415 -0.7184667587280273 -0.0 0.9641584157943726 0.43776363134384155 0 1.0 0 0.0 0 0.0 0 0.0 2.1603219509124756 0.0342024564743042 0.21605446934700012 0.6794335842132568 -0.7336955070495605 -0.0 0.5175286531448364 0.2802373170852661 0 1.0 0 0.0 0 0.0 0 0.0 2.156275510787964 0.030376330018043518 0.21605446934700012 0.695547342300415 -0.7184667587280273 -0.0 0.5146552920341492 0.27584993839263916 0 1.0 0 0.0 0 0.0 0 0.0 0.4845011234283447 -0.05896741896867752 -0.2839455306529999 -0.4939115643501282 -0.8695028424263 -0.0 0.9512243270874023 0.5014703273773193 0 1.0 0 0.0 0 0.0 0 0.0 0.4863593578338623 -0.06009847670793533 0.21605446934700012 -0.5507370233535767 -0.8346506953239441 -0.0 0.5273653268814087 0.3408270478248596 0 1.0 0 0.0 0 0.0 0 0.0 0.4845011234283447 -0.05896741896867752 0.21605446934700012 -0.4939115643501282 -0.8695028424263 -0.0 0.526100754737854 0.3419238328933716 0 1.0 0 0.0 0 0.0 0 0.0 1.4067423343658447 -0.12031812220811844 -0.2839455306529999 0.12024292349815369 0.9927365779876709 -0.0 0.9970256090164185 0.43528425693511963 0 1.0 0 0.0 0 0.0 0 0.0 1.40171217918396 -0.11959449201822281 0.21605446934700012 0.1660817265510559 0.9860835671424866 -0.0 1.4684163331985474 0.2731272578239441 0 1.0 0 0.0 0 0.0 0 0.0 1.4067423343658447 -0.12031812220811844 0.21605446934700012 0.12024292349815369 0.9927365779876709 -0.0 1.4721570014953613 0.2719026207923889 0 1.0 0 0.0 0 0.0 0 0.0 -0.48665952682495117 -0.15263715386390686 -0.2839455306529999 -0.6906033754348755 -0.7232276201248169 -0.0 0.038263142108917236 0.42208415269851685 0 1.0 0 0.0 0 0.0 0 0.0 -0.4822678565979004 -0.15666882693767548 0.21605446934700012 -0.6613666415214539 -0.7500228881835938 -0.0 0.41857919096946716 0.26868611574172974 0 1.0 0 0.0 0 0.0 0 0.0 -0.48665952682495117 -0.15263715386390686 0.21605446934700012 -0.6906033754348755 -0.7232276201248169 -0.0 0.41613665223121643 0.27373653650283813 0 1.0 0 0.0 0 0.0 0 0.0 -1.5464097261428833 0.09657105803489685 -0.2839455306529999 0.8354747295379639 -0.5494857430458069 -0.0 0.08910319209098816 0.7242394685745239 0 1.0 0 0.0 0 0.0 0 0.0 -1.5443859100341797 0.09948384761810303 0.21605446934700012 0.8052613735198975 -0.5928831100463867 -0.0 0.4990137815475464 0.539908766746521 0 1.0 0 0.0 0 0.0 0 0.0 -1.5464097261428833 0.09657105803489685 0.21605446934700012 0.8354747295379639 -0.5494857430458069 -0.0 0.4978945851325989 0.5367259383201599 0 1.0 0 0.0 0 0.0 0 0.0 2.049201726913452 0.03360651433467865 -0.2839455306529999 -0.9311502575874329 0.3645741045475006 -0.0 0.025784343481063843 0.4446961283683777 0 1.0 0 0.0 0 0.0 0 0.0 2.047306776046753 0.028401225805282593 0.21605446934700012 -0.9472640156745911 0.32038331031799316 -0.0 0.434542715549469 0.282177209854126 0 1.0 0 0.0 0 0.0 0 0.0 2.049201726913452 0.03360651433467865 0.21605446934700012 -0.9311502575874329 0.3645741045475006 -0.0 0.43620121479034424 0.2869437336921692 0 1.0 0 0.0 0 0.0 0 0.0 1.4464681148529053 -0.11969178915023804 -0.2839455306529999 -0.14542070031166077 0.9893490672111511 -0.0 0.9739401340484619 0.43506962060928345 0 1.0 0 0.0 0 0.0 0 0.0 1.4410245418548584 -0.12037285417318344 0.21605446934700012 -0.10455641150474548 0.9945066571235657 -0.0 0.4980665147304535 0.2708966135978699 0 1.0 0 0.0 0 0.0 0 0.0 1.4464681148529053 -0.11969178915023804 0.21605446934700012 -0.14542070031166077 0.9893490672111511 -0.0 0.5021612048149109 0.2718231678009033 0 1.0 0 0.0 0 0.0 0 0.0 -1.643573522567749 0.09945592284202576 -0.2839455306529999 -0.9503769278526306 0.3110446333885193 -0.0 0.14547201991081238 0.6898198127746582 0 1.0 0 0.0 0 0.0 0 0.0 -1.6462346315383911 0.09066042304039001 0.21605446934700012 -0.9571214914321899 0.28955960273742676 -0.0 0.4483241140842438 0.5201866626739502 0 1.0 0 0.0 0 0.0 0 0.0 -1.643573522567749 0.09945592284202576 0.21605446934700012 -0.9503769278526306 0.3110446333885193 -0.0 0.4498993456363678 0.5286128520965576 0 1.0 0 0.0 0 0.0 0 0.0 0.5950965881347656 -0.06765832006931305 -0.2839455306529999 0.999969482421875 -0.003662221133708954 -0.0 0.895166277885437 0.4902169108390808 0 1.0 0 0.0 0 0.0 0 0.0 0.5948824882507324 -0.05997928977012634 0.21605446934700012 0.9983519911766052 0.05722220614552498 -0.0 0.5884814262390137 0.36237674951553345 0 1.0 0 0.0 0 0.0 0 0.0 0.5950965881347656 -0.06765832006931305 0.21605446934700012 0.999969482421875 -0.003662221133708954 -0.0 0.589170515537262 0.35480374097824097 0 1.0 0 0.0 0 0.0 0 0.0 -0.30427980422973633 -0.16338948905467987 -0.2839455306529999 0.6092715263366699 -0.7929319143295288 -0.0 0.9377249479293823 0.4075313210487366 0 1.0 0 0.0 0 0.0 0 0.0 -0.29604482650756836 -0.1565958559513092 0.21605446934700012 0.6615192294120789 -0.7499008178710938 -0.0 0.553600549697876 0.2655588388442993 0 1.0 0 0.0 0 0.0 0 0.0 -0.30427980422973633 -0.16338948905467987 0.21605446934700012 0.6092715263366699 -0.7929319143295288 -0.0 0.5486077070236206 0.2572265863418579 0 1.0 0 0.0 0 0.0 0 0.0 -1.4314457178115845 0.09918349981307983 -0.2839455306529999 -0.8820154666900635 -0.47117525339126587 -0.0 1.001840591430664 0.740041196346283 0 1.0 0 0.0 0 0.0 0 0.0 -1.4299862384796143 0.09615153074264526 0.21605446934700012 -0.9173253774642944 -0.3980834484100342 -0.0 0.5644075870513916 0.545503556728363 0 1.0 0 0.0 0 0.0 0 0.0 -1.4314457178115845 0.09918349981307983 0.21605446934700012 -0.8820154666900635 -0.47117525339126587 -0.0 0.5633835792541504 0.5485106706619263 0 1.0 0 0.0 0 0.0 0 0.0 2.152557611465454 0.026691272854804993 -0.2839455306529999 0.713370144367218 -0.7007355093955994 -0.0 0.9664015173912048 0.43399637937545776 0 1.0 0 0.0 0 0.0 0 0.0 2.156275510787964 0.030376330018043518 0.21605446934700012 0.695547342300415 -0.7184667587280273 -0.0 0.5146552920341492 0.27584993839263916 0 1.0 0 0.0 0 0.0 0 0.0 2.152557611465454 0.026691272854804993 0.21605446934700012 0.713370144367218 -0.7007355093955994 -0.0 0.5119778513908386 0.2717220187187195 0 1.0 0 0.0 0 0.0 0 0.0 0.4863593578338623 -0.06009847670793533 -0.2839455306529999 -0.5507370233535767 -0.8346506953239441 -0.0 0.9501901865005493 0.5001065731048584 0 1.0 0 0.0 0 0.0 0 0.0 0.4879648685455322 -0.06124413013458252 0.21605446934700012 -0.616595983505249 -0.7872554659843445 -0.0 0.5284615159034729 0.33969563245773315 0 1.0 0 0.0 0 0.0 0 0.0 0.4863593578338623 -0.06009847670793533 0.21605446934700012 -0.5507370233535767 -0.8346506953239441 -0.0 0.5273653268814087 0.3408270478248596 0 1.0 0 0.0 0 0.0 0 0.0 1.4119865894317627 -0.12083500623703003 -0.2839455306529999 0.07739493995904922 0.9969786405563354 -0.0 0.9939858913421631 0.43456923961639404 0 1.0 0 0.0 0 0.0 0 0.0 1.4067423343658447 -0.12031812220811844 0.21605446934700012 0.12024292349815369 0.9927365779876709 -0.0 1.4721570014953613 0.2719026207923889 0 1.0 0 0.0 0 0.0 0 0.0 1.4119865894317627 -0.12083500623703003 0.21605446934700012 0.07739493995904922 0.9969786405563354 -0.0 1.476088285446167 0.2709609866142273 0 1.0 0 0.0 0 0.0 0 0.0 -0.4822678565979004 -0.15666882693767548 -0.2839455306529999 -0.6613666415214539 -0.7500228881835938 -0.0 0.035872071981430054 0.4178926348686218 0 1.0 0 0.0 0 0.0 0 0.0 -0.47775697708129883 -0.16048887372016907 0.21605446934700012 -0.6306039690971375 -0.7760856747627258 -0.0 0.4211760461330414 0.2638515830039978 0 1.0 0 0.0 0 0.0 0 0.0 -0.4822678565979004 -0.15666882693767548 0.21605446934700012 -0.6613666415214539 -0.7500228881835938 -0.0 0.41857919096946716 0.26868611574172974 0 1.0 0 0.0 0 0.0 0 0.0 2.047306776046753 0.028401225805282593 -0.2839455306529999 -0.9472640156745911 0.32038331031799316 -0.0 0.026701629161834717 0.4395824074745178 0 1.0 0 0.0 0 0.0 0 0.0 2.045611619949341 0.022981882095336914 0.21605446934700012 -0.9606616497039795 0.2776268720626831 -0.0 0.4329943060874939 0.2772558331489563 0 1.0 0 0.0 0 0.0 0 0.0 2.047306776046753 0.028401225805282593 0.21605446934700012 -0.9472640156745911 0.32038331031799316 -0.0 0.434542715549469 0.282177209854126 0 1.0 0 0.0 0 0.0 0 0.0 1.4410245418548584 -0.12037285417318344 -0.2839455306529999 -0.10455641150474548 0.9945066571235657 -0.0 0.9771068096160889 0.43441450595855713 0 1.0 0 0.0 0 0.0 0 0.0 1.4353182315826416 -0.12085933238267899 0.21605446934700012 -0.06689657270908356 0.9977416396141052 -0.0 0.4937530755996704 0.2702690362930298 0 1.0 0 0.0 0 0.0 0 0.0 1.4410245418548584 -0.12037285417318344 0.21605446934700012 -0.10455641150474548 0.9945066571235657 -0.0 0.4980665147304535 0.2708966135978699 0 1.0 0 0.0 0 0.0 0 0.0 0.4879648685455322 -0.06124413013458252 -0.2839455306529999 -0.616595983505249 -0.7872554659843445 -0.0 0.9493091106414795 0.49873924255371094 0 1.0 0 0.0 0 0.0 0 0.0 0.4893171787261963 -0.06240437924861908 0.21605446934700012 -0.7000030279159546 -0.7141026258468628 -0.0 0.5293902158737183 0.3385264277458191 0 1.0 0 0.0 0 0.0 0 0.0 0.4879648685455322 -0.06124413013458252 0.21605446934700012 -0.616595983505249 -0.7872554659843445 -0.0 0.5284615159034729 0.33969563245773315 0 1.0 0 0.0 0 0.0 0 0.0 -0.47775697708129883 -0.16048887372016907 -0.2839455306529999 -0.6306039690971375 -0.7760856747627258 -0.0 0.033418744802474976 0.4139173626899719 0 1.0 0 0.0 0 0.0 0 0.0 -0.4731268882751465 -0.16409730911254883 0.21605446934700012 -0.5983458757400513 -0.8012024164199829 -0.0 0.42393144965171814 0.2592355012893677 0 1.0 0 0.0 0 0.0 0 0.0 -0.47775697708129883 -0.16048887372016907 0.21605446934700012 -0.6306039690971375 -0.7760856747627258 -0.0 0.4211760461330414 0.2638515830039978 0 1.0 0 0.0 0 0.0 0 0.0 -1.5483555793762207 0.09344181418418884 -0.2839455306529999 0.861384928226471 -0.5079195499420166 -0.0 0.09006515145301819 0.7204816341400146 0 1.0 0 0.0 0 0.0 0 0.0 -1.5464097261428833 0.09657105803489685 0.21605446934700012 0.8354747295379639 -0.5494857430458069 -0.0 0.4978945851325989 0.5367259383201599 0 1.0 0 0.0 0 0.0 0 0.0 -1.5483555793762207 0.09344181418418884 0.21605446934700012 0.861384928226471 -0.5079195499420166 -0.0 0.49681398272514343 0.533308744430542 0 1.0 0 0.0 0 0.0 0 0.0 -1.4299862384796143 0.09615153074264526 -0.2839455306529999 -0.9173253774642944 -0.3980834484100342 -0.0 1.000737190246582 0.7367956042289734 0 1.0 0 0.0 0 0.0 0 0.0 -1.4287214279174805 0.09289336204528809 0.21605446934700012 -0.9446699619293213 -0.32795190811157227 -0.0 0.565342903137207 0.5422323942184448 0 1.0 0 0.0 0 0.0 0 0.0 -1.4299862384796143 0.09615153074264526 0.21605446934700012 -0.9173253774642944 -0.3980834484100342 -0.0 0.5644075870513916 0.545503556728363 0 1.0 0 0.0 0 0.0 0 0.0 2.1491682529449463 0.023147299885749817 -0.2839455306529999 0.7331461310386658 -0.6800439357757568 -0.0 0.9684454798698425 0.4304148554801941 0 1.0 0 0.0 0 0.0 0 0.0 2.152557611465454 0.026691272854804993 0.21605446934700012 0.713370144367218 -0.7007355093955994 -0.0 0.5119778513908386 0.2717220187187195 0 1.0 0 0.0 0 0.0 0 0.0 2.1491682529449463 0.023147299885749817 0.21605446934700012 0.7331461310386658 -0.6800439357757568 -0.0 0.5095055103302002 0.2678421139717102 0 1.0 0 0.0 0 0.0 0 0.0 0.4893171787261963 -0.06240437924861908 -0.2839455306529999 -0.7000030279159546 -0.7141026258468628 -0.0 0.9485797882080078 0.49736785888671875 0 1.0 0 0.0 0 0.0 0 0.0 0.4904360771179199 -0.06365705281496048 0.21605446934700012 -0.7671437859535217 -0.6414380073547363 -0.0 0.5301678776741028 0.33722954988479614 0 1.0 0 0.0 0 0.0 0 0.0 0.4893171787261963 -0.06240437924861908 0.21605446934700012 -0.7000030279159546 -0.7141026258468628 -0.0 0.5293902158737183 0.3385264277458191 0 1.0 0 0.0 0 0.0 0 0.0 1.4174449443817139 -0.12114513665437698 -0.2839455306529999 0.03747672960162163 0.999267578125 -0.0 0.9908179044723511 0.434081494808197 0 1.0 0 0.0 0 0.0 0 0.0 1.4119865894317627 -0.12083500623703003 0.21605446934700012 0.07739493995904922 0.9969786405563354 -0.0 1.476088285446167 0.2709609866142273 0 1.0 0 0.0 0 0.0 0 0.0 1.4174449443817139 -0.12114513665437698 0.21605446934700012 0.03747672960162163 0.999267578125 -0.0 1.4802052974700928 0.27031540870666504 0 1.0 0 0.0 0 0.0 0 0.0 1.4353182315826416 -0.12085933238267899 -0.2839455306529999 -0.06689657270908356 0.9977416396141052 -0.0 0.9804263114929199 0.4339858293533325 0 1.0 0 0.0 0 0.0 0 0.0 1.4293491840362549 -0.12115121632814407 0.21605446934700012 -0.032227545976638794 0.99945068359375 -0.0 0.4892280697822571 0.2699575424194336 0 1.0 0 0.0 0 0.0 0 0.0 1.4353182315826416 -0.12085933238267899 0.21605446934700012 -0.06689657270908356 0.9977416396141052 -0.0 0.4937530755996704 0.2702690362930298 0 1.0 0 0.0 0 0.0 0 0.0 -0.31278467178344727 -0.1694680154323578 -0.2839455306529999 0.5518357157707214 -0.8339182734489441 -0.0 0.9424571990966797 0.4015697240829468 0 1.0 0 0.0 0 0.0 0 0.0 -0.30427980422973633 -0.16338948905467987 0.21605446934700012 0.6092715263366699 -0.7929319143295288 -0.0 0.5486077070236206 0.2572265863418579 0 1.0 0 0.0 0 0.0 0 0.0 -0.31278467178344727 -0.1694680154323578 0.21605446934700012 0.5518357157707214 -0.8339182734489441 -0.0 0.5431747436523438 0.24967700242996216 0 1.0 0 0.0 0 0.0 0 0.0 2.1461069583892822 0.019744396209716797 -0.2839455306529999 0.7550889849662781 -0.6555986404418945 -0.0 0.9702909588813782 0.4270155429840088 0 1.0 0 0.0 0 0.0 0 0.0 2.1491682529449463 0.023147299885749817 0.21605446934700012 0.7331461310386658 -0.6800439357757568 -0.0 0.5095055103302002 0.2678421139717102 0 1.0 0 0.0 0 0.0 0 0.0 2.1461069583892822 0.019744396209716797 0.21605446934700012 0.7550889849662781 -0.6555986404418945 -0.0 0.5072463750839233 0.26419901847839355 0 1.0 0 0.0 0 0.0 0 0.0 0.34641003608703613 -0.06275463849306107 -0.2839455306529999 -0.1507309228181839 0.9885555505752563 -0.0 0.0342521071434021 0.500602662563324 0 1.0 0 0.0 0 0.0 0 0.0 0.2476358413696289 -0.0778159350156784 0.21605446934700012 -0.1507309228181839 0.9885555505752563 -0.0 0.37793639302253723 0.3555501699447632 0 1.0 0 0.0 0 0.0 0 0.0 0.34641003608703613 -0.06275463849306107 0.21605446934700012 -0.1507309228181839 0.9885555505752563 -0.0 0.4315919876098633 0.34482550621032715 0 1.0 0 0.0 0 0.0 0 0.0 -0.4731268882751465 -0.16409730911254883 -0.2839455306529999 -0.5983458757400513 -0.8012024164199829 -0.0 0.03090190887451172 0.41015708446502686 0 1.0 0 0.0 0 0.0 0 0.0 -0.46837782859802246 -0.16749413311481476 0.21605446934700012 -0.5647144913673401 -0.825251042842865 -0.0 0.4268491864204407 0.25484126806259155 0 1.0 0 0.0 0 0.0 0 0.0 -0.4731268882751465 -0.16409730911254883 0.21605446934700012 -0.5983458757400513 -0.8012024164199829 -0.0 0.42393144965171814 0.2592355012893677 0 1.0 0 0.0 0 0.0 0 0.0 -1.550223708152771 0.09009608626365662 -0.2839455306529999 0.8835108280181885 -0.4683675765991211 -0.0 0.09093481302261353 0.716498613357544 0 1.0 0 0.0 0 0.0 0 0.0 -1.5483555793762207 0.09344181418418884 0.21605446934700012 0.861384928226471 -0.5079195499420166 -0.0 0.49681398272514343 0.533308744430542 0 1.0 0 0.0 0 0.0 0 0.0 -1.550223708152771 0.09009608626365662 0.21605446934700012 0.8835108280181885 -0.4683675765991211 -0.0 0.495771199464798 0.5296525955200195 0 1.0 0 0.0 0 0.0 0 0.0 2.045611619949341 0.022981882095336914 -0.2839455306529999 -0.9606616497039795 0.2776268720626831 -0.0 0.027493685483932495 0.4343390464782715 0 1.0 0 0.0 0 0.0 0 0.0 2.0441157817840576 0.017348498106002808 0.21605446934700012 -0.9715872406959534 0.23657947778701782 -0.0 0.43155452609062195 0.2721865177154541 0 1.0 0 0.0 0 0.0 0 0.0 2.045611619949341 0.022981882095336914 0.21605446934700012 -0.9606616497039795 0.2776268720626831 -0.0 0.4329943060874939 0.2772558331489563 0 1.0 0 0.0 0 0.0 0 0.0 -1.4287214279174805 0.09289336204528809 -0.2839455306529999 -0.9446699619293213 -0.32795190811157227 -0.0 0.9997917413711548 0.733305811882019 0 1.0 0 0.0 0 0.0 0 0.0 -1.4276511669158936 0.08940896391868591 0.21605446934700012 -0.965117335319519 -0.2617572546005249 -0.0 0.5661900043487549 0.5386909246444702 0 1.0 0 0.0 0 0.0 0 0.0 -1.4287214279174805 0.09289336204528809 0.21605446934700012 -0.9446699619293213 -0.32795190811157227 -0.0 0.565342903137207 0.5422323942184448 0 1.0 0 0.0 0 0.0 0 0.0 0.3475508689880371 -0.06744548678398132 -0.2839455306529999 0.965849757194519 0.25907161831855774 -0.0 0.03346249461174011 0.4952545166015625 0 1.0 0 0.0 0 0.0 0 0.0 0.34641003608703613 -0.06275463849306107 0.21605446934700012 0.9716482758522034 0.23630481958389282 -0.0 0.4315919876098633 0.34482550621032715 0 1.0 0 0.0 0 0.0 0 0.0 0.3475508689880371 -0.06744548678398132 0.21605446934700012 0.965849757194519 0.25907161831855774 -0.0 0.43197548389434814 0.3392900228500366 0 1.0 0 0.0 0 0.0 0 0.0 1.4231173992156982 -0.1212485134601593 -0.2839455306529999 0.0012817773967981339 0.999969482421875 -0.0 0.9875220060348511 0.43382418155670166 0 1.0 0 0.0 0 0.0 0 0.0 1.4174449443817139 -0.12114513665437698 0.21605446934700012 0.03747672960162163 0.999267578125 -0.0 1.4802052974700928 0.27031540870666504 0 1.0 0 0.0 0 0.0 0 0.0 1.4231173992156982 -0.1212485134601593 0.21605446934700012 0.0012817773967981339 0.999969482421875 -0.0 1.484500765800476 0.2699793577194214 0 1.0 0 0.0 0 0.0 0 0.0 -0.46837782859802246 -0.16749413311481476 -0.2839455306529999 -0.5647450089454651 -0.825251042842865 -0.0 0.028320401906967163 0.40661054849624634 0 1.0 0 0.0 0 0.0 0 0.0 -0.46350932121276855 -0.17067933082580566 0.21605445444583893 -0.5298928618431091 -0.8480483293533325 -0.0 0.429933100938797 0.2506728768348694 0 1.0 0 0.0 0 0.0 0 0.0 -0.46837782859802246 -0.16749413311481476 0.21605446934700012 -0.5647144913673401 -0.825251042842865 -0.0 0.4268491864204407 0.25484126806259155 0 1.0 0 0.0 0 0.0 0 0.0 0.4904360771179199 -0.06365705281496048 -0.2839455306529999 -0.7671437859535217 -0.6414380073547363 -0.0 0.9479931592941284 0.49590176343917847 0 1.0 0 0.0 0 0.0 0 0.0 0.4914577007293701 -0.06496324390172958 0.21605446934700012 -0.807763934135437 -0.5894650220870972 -0.0 0.5308834910392761 0.33586686849594116 0 1.0 0 0.0 0 0.0 0 0.0 0.4904360771179199 -0.06365705281496048 0.21605446934700012 -0.7671437859535217 -0.6414380073547363 -0.0 0.5301678776741028 0.33722954988479614 0 1.0 0 0.0 0 0.0 0 0.0 1.4293491840362549 -0.12115121632814407 -0.2839455306529999 -0.032227545976638794 0.99945068359375 -0.0 0.9838982820510864 0.43378758430480957 0 1.0 0 0.0 0 0.0 0 0.0 1.4231173992156982 -0.1212485134601593 0.21605446934700012 0.0012817773967981339 0.999969482421875 -0.0 1.484500765800476 0.2699793577194214 0 1.0 0 0.0 0 0.0 0 0.0 1.4293491840362549 -0.12115121632814407 0.21605446934700012 -0.032227545976638794 0.99945068359375 -0.0 0.4892280697822571 0.2699575424194336 0 1.0 0 0.0 0 0.0 0 0.0 2.14337420463562 0.016482576727867126 -0.2839455306529999 0.7795037627220154 -0.6263619065284729 -0.0 0.9719381332397461 0.4237942695617676 0 1.0 0 0.0 0 0.0 0 0.0 2.1461069583892822 0.019744396209716797 0.21605446934700012 0.7550889849662781 -0.6555986404418945 -0.0 0.5072463750839233 0.26419901847839355 0 1.0 0 0.0 0 0.0 0 0.0 2.14337420463562 0.016482576727867126 0.21605446934700012 0.7795037627220154 -0.6263619065284729 -0.0 0.5052080750465393 0.2607806921005249 0 1.0 0 0.0 0 0.0 0 0.0 -1.3293672800064087 0.08272477984428406 -0.2839455306529999 0.9981383681297302 0.06097598373889923 -0.0 0.9370471835136414 0.7014241814613342 0 1.0 0 0.0 0 0.0 0 0.0 -1.3300057649612427 0.09145823121070862 0.21605446934700012 0.9962462186813354 0.08639790117740631 -0.0 0.6154331564903259 0.5430489778518677 0 1.0 0 0.0 0 0.0 0 0.0 -1.3293672800064087 0.08272477984428406 0.21605446934700012 0.9981383681297302 0.06097598373889923 -0.0 0.6166341304779053 0.5349475145339966 0 1.0 0 0.0 0 0.0 0 0.0 2.0441157817840576 0.017348498106002808 -0.2839455306529999 -0.9715872406959534 0.23657947778701782 -0.0 0.02816295623779297 0.42897486686706543 0 1.0 0 0.0 0 0.0 0 0.0 2.0428192615509033 0.01150105893611908 0.21605446934700012 -0.9803155660629272 0.19730216264724731 -0.0 0.4302225410938263 0.26697635650634766 0 1.0 0 0.0 0 0.0 0 0.0 2.0441157817840576 0.017348498106002808 0.21605446934700012 -0.9715872406959534 0.23657947778701782 -0.0 0.43155452609062195 0.2721865177154541 0 1.0 0 0.0 0 0.0 0 0.0 0.4914577007293701 -0.06496324390172958 -0.2839455306529999 -0.807763934135437 -0.5894650220870972 -0.0 0.9474676847457886 0.49438291788101196 0 1.0 0 0.0 0 0.0 0 0.0 0.4923820495605469 -0.0663229450583458 0.21605446934700012 -0.8454847931861877 -0.5339518189430237 -0.0 0.5315372943878174 0.3344380855560303 0 1.0 0 0.0 0 0.0 0 0.0 0.4914577007293701 -0.06496324390172958 0.21605446934700012 -0.807763934135437 -0.5894650220870972 -0.0 0.5308834910392761 0.33586686849594116 0 1.0 0 0.0 0 0.0 0 0.0 -0.32155942916870117 -0.17483140528202057 -0.2839455306529999 0.48963895440101624 -0.8719137907028198 -0.0 0.9473295211791992 0.39633166790008545 0 1.0 0 0.0 0 0.0 0 0.0 -0.31278467178344727 -0.1694680154323578 0.21605446934700012 0.5518357157707214 -0.8339182734489441 -0.0 0.5431747436523438 0.24967700242996216 0 1.0 0 0.0 0 0.0 0 0.0 -0.32155942916870117 -0.17483140528202057 0.21605445444583893 0.48963895440101624 -0.8719137907028198 -0.0 0.5372918844223022 0.24292826652526855 0 1.0 0 0.0 0 0.0 0 0.0 -1.6462346315383911 0.09066042304039001 -0.2839455306529999 -0.17752617597579956 -0.9840998649597168 -0.0 0.14539822936058044 0.6808279752731323 0 1.0 0 0.0 0 0.0 0 0.0 -1.5569175481796265 0.07454833388328552 0.21605446934700012 -0.17752617597579956 -0.9840998649597168 -0.0 0.4919670522212982 0.5125381350517273 0 1.0 0 0.0 0 0.0 0 0.0 -1.6462346315383911 0.09066042304039001 0.21605446934700012 -0.17752617597579956 -0.9840998649597168 -0.0 0.4483241140842438 0.5201866626739502 0 1.0 0 0.0 0 0.0 0 0.0 -0.46350932121276855 -0.17067933082580566 -0.2839455306529999 -0.5298928618431091 -0.8480483293533325 -0.0 0.0256727933883667 0.4032769203186035 0 1.0 0 0.0 0 0.0 0 0.0 -0.45852184295654297 -0.17365291714668274 0.21605445444583893 -0.4940031170845032 -0.86944180727005 -0.0 0.43318602442741394 0.2467350959777832 0 1.0 0 0.0 0 0.0 0 0.0 -0.46350932121276855 -0.17067933082580566 0.21605445444583893 -0.5298928618431091 -0.8480483293533325 -0.0 0.429933100938797 0.2506728768348694 0 1.0 0 0.0 0 0.0 0 0.0 -1.5569175481796265 0.07454833388328552 -0.2839455306529999 0.9379558563232422 -0.34669026732444763 -0.0 0.09352043271064758 0.6982331871986389 0 1.0 0 0.0 0 0.0 0 0.0 -1.5553607940673828 0.07875999808311462 0.21605446934700012 0.9318826794624329 -0.36271247267723083 -0.0 0.49286413192749023 0.5172007083892822 0 1.0 0 0.0 0 0.0 0 0.0 -1.5569175481796265 0.07454833388328552 0.21605446934700012 0.9379558563232422 -0.34669026732444763 -0.0 0.4919670522212982 0.5125381350517273 0 1.0 0 0.0 0 0.0 0 0.0 0.4923820495605469 -0.0663229450583458 -0.2839455306529999 -0.8454847931861877 -0.5339518189430237 -0.0 0.9470030069351196 0.4928116202354431 0 1.0 0 0.0 0 0.0 0 0.0 0.4932091236114502 -0.06773615628480911 0.21605446934700012 -0.8796654939651489 -0.4755394160747528 -0.0 0.5321296453475952 0.33294302225112915 0 1.0 0 0.0 0 0.0 0 0.0 0.4923820495605469 -0.0663229450583458 0.21605446934700012 -0.8454847931861877 -0.5339518189430237 -0.0 0.5315372943878174 0.3344380855560303 0 1.0 0 0.0 0 0.0 0 0.0 1.5733020305633545 -0.12946023046970367 -0.2839455306529999 0.8250373601913452 -0.5650196671485901 -0.0 0.9081575274467468 0.43117111921310425 0 1.0 0 0.0 0 0.0 0 0.0 1.5777533054351807 -0.12243308126926422 0.21605446934700012 0.8640400171279907 -0.503372311592102 -0.0 0.586573600769043 0.2985709309577942 0 1.0 0 0.0 0 0.0 0 0.0 1.5733020305633545 -0.12946023046970367 0.21605446934700012 0.8250373601913452 -0.5650196671485901 -0.0 0.5848955512046814 0.2907964587211609 0 1.0 0 0.0 0 0.0 0 0.0 2.14096999168396 0.013361826539039612 -0.2839455306529999 0.8065431714057922 -0.5911435484886169 -0.0 0.9733879566192627 0.4207465648651123 0 1.0 0 0.0 0 0.0 0 0.0 2.14337420463562 0.016482576727867126 0.21605446934700012 0.7795037627220154 -0.6263619065284729 -0.0 0.5052080750465393 0.2607806921005249 0 1.0 0 0.0 0 0.0 0 0.0 2.14096999168396 0.013361826539039612 0.21605446934700012 0.8065431714057922 -0.5911435484886169 -0.0 0.5033973455429077 0.2575761675834656 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 -0.12518896162509918 -0.2839455306529999 -0.8221076130867004 -0.5692922472953796 -0.0 0.07005223631858826 0.44216883182525635 0 1.0 0 0.0 0 0.0 0 0.0 1.2711994647979736 -0.1320118010044098 0.21605446934700012 -0.7854243516921997 -0.6189458966255188 -0.0 0.38456952571868896 0.296792209148407 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 -0.12518896162509918 0.21605446934700012 -0.8221076130867004 -0.5692922472953796 -0.0 0.38283151388168335 0.30467474460601807 0 1.0 0 0.0 0 0.0 0 0.0 -0.45852184295654297 -0.17365291714668274 -0.2839455306529999 -0.4940031170845032 -0.86944180727005 -0.0 0.02295824885368347 0.40015560388565063 0 1.0 0 0.0 0 0.0 0 0.0 -0.4534149169921875 -0.17641489207744598 0.21605445444583893 -0.4586932063102722 -0.8885769248008728 -0.0 0.43661075830459595 0.24303346872329712 0 1.0 0 0.0 0 0.0 0 0.0 -0.45852184295654297 -0.17365291714668274 0.21605445444583893 -0.4940031170845032 -0.86944180727005 -0.0 0.43318602442741394 0.2467350959777832 0 1.0 0 0.0 0 0.0 0 0.0 -1.5553607940673828 0.07875999808311462 -0.2839455306529999 0.9318826794624329 -0.36271247267723083 -0.0 0.09300467371940613 0.7031583786010742 0 1.0 0 0.0 0 0.0 0 0.0 -1.553726315498352 0.0827551782131195 0.21605446934700012 0.9183324575424194 -0.395764023065567 -0.0 0.49379682540893555 0.5216037034988403 0 1.0 0 0.0 0 0.0 0 0.0 -1.5553607940673828 0.07875999808311462 0.21605446934700012 0.9318826794624329 -0.36271247267723083 -0.0 0.49286413192749023 0.5172007083892822 0 1.0 0 0.0 0 0.0 0 0.0 2.1388938426971436 0.010382160544395447 -0.2839455306529999 0.8363292217254639 -0.5481734871864319 -0.0 0.9746416807174683 0.4178677797317505 0 1.0 0 0.0 0 0.0 0 0.0 2.14096999168396 0.013361826539039612 0.21605446934700012 0.8065431714057922 -0.5911435484886169 -0.0 0.5033973455429077 0.2575761675834656 0 1.0 0 0.0 0 0.0 0 0.0 2.1388938426971436 0.010382160544395447 0.21605446934700012 0.8363292217254639 -0.5481734871864319 -0.0 0.5018196105957031 0.2545742988586426 0 1.0 0 0.0 0 0.0 0 0.0 0.34887170791625977 -0.07194417715072632 -0.2839455306529999 0.9521775245666504 0.30549028515815735 -0.0 0.03258267045021057 0.49015122652053833 0 1.0 0 0.0 0 0.0 0 0.0 0.3475508689880371 -0.06744548678398132 0.21605446934700012 0.965849757194519 0.25907161831855774 -0.0 0.43197548389434814 0.3392900228500366 0 1.0 0 0.0 0 0.0 0 0.0 0.34887170791625977 -0.07194417715072632 0.21605446934700012 0.9521775245666504 0.30549028515815735 -0.0 0.432491660118103 0.33396750688552856 0 1.0 0 0.0 0 0.0 0 0.0 -1.553726315498352 0.0827551782131195 -0.2839455306529999 0.9183324575424194 -0.395764023065567 -0.0 0.09240296483039856 0.7078412771224976 0 1.0 0 0.0 0 0.0 0 0.0 -1.552013874053955 0.08653387427330017 0.21605446934700012 0.9023407697677612 -0.430982381105423 -0.0 0.4947656989097595 0.5257526636123657 0 1.0 0 0.0 0 0.0 0 0.0 -1.553726315498352 0.0827551782131195 0.21605446934700012 0.9183324575424194 -0.395764023065567 -0.0 0.49379682540893555 0.5216037034988403 0 1.0 0 0.0 0 0.0 0 0.0 2.0428192615509033 0.01150105893611908 -0.2839455306529999 -0.9803155660629272 0.19730216264724731 -0.0 0.02871173620223999 0.4234986901283264 0 1.0 0 0.0 0 0.0 0 0.0 2.041722059249878 0.00543956458568573 0.21605446934700012 -0.9871211647987366 0.1598559468984604 -0.0 0.4289977252483368 0.2616328001022339 0 1.0 0 0.0 0 0.0 0 0.0 2.0428192615509033 0.01150105893611908 0.21605446934700012 -0.9803155660629272 0.19730216264724731 -0.0 0.4302225410938263 0.26697635650634766 0 1.0 0 0.0 0 0.0 0 0.0 1.5682575702667236 -0.13628791272640228 -0.2839455306529999 0.7834406495094299 -0.6214483976364136 -0.0 0.91089928150177 0.42470550537109375 0 1.0 0 0.0 0 0.0 0 0.0 1.5733020305633545 -0.12946023046970367 0.21605446934700012 0.8250373601913452 -0.5650196671485901 -0.0 0.5848955512046814 0.2907964587211609 0 1.0 0 0.0 0 0.0 0 0.0 1.5682575702667236 -0.13628791272640228 0.21605446934700012 0.7834406495094299 -0.6214483976364136 -0.0 0.5828350782394409 0.28305596113204956 0 1.0 0 0.0 0 0.0 0 0.0 -0.33060407638549805 -0.1794796884059906 -0.2839455306529999 0.42332223057746887 -0.9059419631958008 -0.0 0.9523460268974304 0.3918129801750183 0 1.0 0 0.0 0 0.0 0 0.0 -0.32155942916870117 -0.17483140528202057 0.21605445444583893 0.48963895440101624 -0.8719137907028198 -0.0 0.5372918844223022 0.24292826652526855 0 1.0 0 0.0 0 0.0 0 0.0 -0.33060407638549805 -0.1794796884059906 0.21605445444583893 0.42332223057746887 -0.9059419631958008 -0.0 0.5309553146362305 0.2370031476020813 0 1.0 0 0.0 0 0.0 0 0.0 0.5947997570037842 -0.07608164846897125 -0.2839455306529999 0.9974364638328552 -0.0714438334107399 -0.0 0.8959649205207825 0.4819793105125427 0 1.0 0 0.0 0 0.0 0 0.0 0.5950965881347656 -0.06765832006931305 0.21605446934700012 0.999969482421875 -0.003662221133708954 -0.0 0.589170515537262 0.35480374097824097 0 1.0 0 0.0 0 0.0 0 0.0 0.5947997570037842 -0.07608164846897125 0.21605446934700012 0.9974364638328552 -0.0714438334107399 -0.0 0.589691162109375 0.3464645743370056 0 1.0 0 0.0 0 0.0 0 0.0 1.2711994647979736 -0.1320118010044098 -0.2839455306529999 -0.7854243516921997 -0.6189458966255188 -0.0 0.06747478246688843 0.4355006217956543 0 1.0 0 0.0 0 0.0 0 0.0 1.2766687870025635 -0.13852813839912415 0.21605446934700012 -0.7459334135055542 -0.6659749150276184 -0.0 0.3866134285926819 0.2890600562095642 0 1.0 0 0.0 0 0.0 0 0.0 1.2711994647979736 -0.1320118010044098 0.21605446934700012 -0.7854243516921997 -0.6189458966255188 -0.0 0.38456952571868896 0.296792209148407 0 1.0 0 0.0 0 0.0 0 0.0 -0.4534149169921875 -0.17641489207744598 -0.2839455306529999 -0.4587237238883972 -0.8885769248008728 -0.0 0.020175516605377197 0.3972463607788086 0 1.0 0 0.0 0 0.0 0 0.0 -0.4482426643371582 -0.17896036803722382 0.21605445444583893 -0.42536699771881104 -0.904995858669281 -0.0 0.4401699900627136 0.23959076404571533 0 1.0 0 0.0 0 0.0 0 0.0 -0.4534149169921875 -0.17641489207744598 0.21605445444583893 -0.4586932063102722 -0.8885769248008728 -0.0 0.43661075830459595 0.24303346872329712 0 1.0 0 0.0 0 0.0 0 0.0 -1.552013874053955 0.08653387427330017 -0.2839455306529999 0.9023407697677612 -0.430982381105423 -0.0 0.09171348810195923 0.7122865319252014 0 1.0 0 0.0 0 0.0 0 0.0 -1.550223708152771 0.09009608626365662 0.21605446934700012 0.8835108280181885 -0.4683675765991211 -0.0 0.495771199464798 0.5296525955200195 0 1.0 0 0.0 0 0.0 0 0.0 -1.552013874053955 0.08653387427330017 0.21605446934700012 0.9023407697677612 -0.430982381105423 -0.0 0.4947656989097595 0.5257526636123657 0 1.0 0 0.0 0 0.0 0 0.0 0.4932091236114502 -0.06773615628480911 -0.2839455306529999 -0.8796654939651489 -0.4755394160747528 -0.0 0.9465987682342529 0.4911881685256958 0 1.0 0 0.0 0 0.0 0 0.0 0.4939389228820801 -0.06920288503170013 0.21605446934700012 -0.9097872972488403 -0.41502121090888977 -0.0 0.5326606631278992 0.33138126134872437 0 1.0 0 0.0 0 0.0 0 0.0 0.4932091236114502 -0.06773615628480911 0.21605446934700012 -0.8796654939651489 -0.4755394160747528 -0.0 0.5321296453475952 0.33294302225112915 0 1.0 0 0.0 0 0.0 0 0.0 -1.4276511669158936 0.08940896391868591 -0.2839455306529999 -0.965117335319519 -0.2617572546005249 -0.0 0.999001681804657 0.7295677661895752 0 1.0 0 0.0 0 0.0 0 0.0 -1.426775574684143 0.08569836616516113 0.21605446934700012 -0.9797357320785522 -0.20014038681983948 -0.0 0.5669488906860352 0.5348721742630005 0 1.0 0 0.0 0 0.0 0 0.0 -1.4276511669158936 0.08940896391868591 0.21605446934700012 -0.965117335319519 -0.2617572546005249 -0.0 0.5661900043487549 0.5386909246444702 0 1.0 0 0.0 0 0.0 0 0.0 2.137146234512329 0.0075435638427734375 -0.2839455306529999 0.868739902973175 -0.49525436758995056 -0.0 0.9757001996040344 0.4151532053947449 0 1.0 0 0.0 0 0.0 0 0.0 2.1388938426971436 0.010382160544395447 0.21605446934700012 0.8363292217254639 -0.5481734871864319 -0.0 0.5018196105957031 0.2545742988586426 0 1.0 0 0.0 0 0.0 0 0.0 2.137146234512329 0.0075435638427734375 0.21605446934700012 0.868739902973175 -0.49525436758995056 -0.0 0.5004804134368896 0.2517651915550232 0 1.0 0 0.0 0 0.0 0 0.0 -0.4482426643371582 -0.17896036803722382 -0.2839455306529999 -0.42536699771881104 -0.904995858669281 -0.0 0.01735299825668335 0.39455825090408325 0 1.0 0 0.0 0 0.0 0 0.0 -0.4430580139160156 -0.18128451704978943 0.21605445444583893 -0.39213234186172485 -0.9198889136314392 -0.0 0.4438236653804779 0.23642700910568237 0 1.0 0 0.0 0 0.0 0 0.0 -0.4482426643371582 -0.17896036803722382 0.21605445444583893 -0.42536699771881104 -0.904995858669281 -0.0 0.4401699900627136 0.23959076404571533 0 1.0 0 0.0 0 0.0 0 0.0 0.4939389228820801 -0.06920288503170013 -0.2839455306529999 -0.9097872972488403 -0.41502121090888977 -0.0 0.946254312992096 0.48951268196105957 0 1.0 0 0.0 0 0.0 0 0.0 0.4945714473724365 -0.07072312384843826 0.21605446934700012 -0.9355449080467224 -0.35319072008132935 -0.0 0.5331304669380188 0.3297528028488159 0 1.0 0 0.0 0 0.0 0 0.0 0.4939389228820801 -0.06920288503170013 0.21605446934700012 -0.9097872972488403 -0.41502121090888977 -0.0 0.5326606631278992 0.33138126134872437 0 1.0 0 0.0 0 0.0 0 0.0 1.5626189708709717 -0.14291614294052124 -0.2839455306529999 0.7402264475822449 -0.6723227500915527 -0.0 0.9139140844345093 0.41840875148773193 0 1.0 0 0.0 0 0.0 0 0.0 1.5682575702667236 -0.13628791272640228 0.21605446934700012 0.7834406495094299 -0.6214483976364136 -0.0 0.5828350782394409 0.28305596113204956 0 1.0 0 0.0 0 0.0 0 0.0 1.5626189708709717 -0.14291614294052124 0.21605446934700012 0.7402264475822449 -0.6723227500915527 -0.0 0.5803644061088562 0.27534836530685425 0 1.0 0 0.0 0 0.0 0 0.0 -1.426775574684143 0.08569836616516113 -0.2839455306529999 -0.9797357320785522 -0.20014038681983948 -0.0 0.9983647465705872 0.7255765199661255 0 1.0 0 0.0 0 0.0 0 0.0 -1.42609441280365 0.08176156878471375 0.21605446934700012 -0.9896542429924011 -0.143314927816391 -0.0 0.5676197409629822 0.5307688117027283 0 1.0 0 0.0 0 0.0 0 0.0 -1.426775574684143 0.08569836616516113 0.21605446934700012 -0.9797357320785522 -0.20014038681983948 -0.0 0.5669488906860352 0.5348721742630005 0 1.0 0 0.0 0 0.0 0 0.0 2.1357266902923584 0.004846066236495972 -0.2839455306529999 0.9028900861740112 -0.4298532009124756 -0.0 0.9765651226043701 0.4125983715057373 0 1.0 0 0.0 0 0.0 0 0.0 2.137146234512329 0.0075435638427734375 0.21605446934700012 0.868739902973175 -0.49525436758995056 -0.0 0.5004804134368896 0.2517651915550232 0 1.0 0 0.0 0 0.0 0 0.0 2.1357266902923584 0.004846066236495972 0.21605446934700012 0.9028900861740112 -0.4298532009124756 -0.0 0.49938392639160156 0.2491394281387329 0 1.0 0 0.0 0 0.0 0 0.0 1.2766687870025635 -0.13852813839912415 -0.2839455306529999 -0.7459334135055542 -0.6659749150276184 -0.0 0.06470900774002075 0.4290871024131775 0 1.0 0 0.0 0 0.0 0 0.0 1.2825636863708496 -0.14473800361156464 0.21605446934700012 -0.7042451500892639 -0.7099520564079285 -0.0 0.38898372650146484 0.2814762592315674 0 1.0 0 0.0 0 0.0 0 0.0 1.2766687870025635 -0.13852813839912415 0.21605446934700012 -0.7459334135055542 -0.6659749150276184 -0.0 0.3866134285926819 0.2890600562095642 0 1.0 0 0.0 0 0.0 0 0.0 2.041722059249878 0.00543956458568573 -0.2839455306529999 -0.9871211647987366 0.1598559468984604 -0.0 0.029142290353775024 0.4179196357727051 0 1.0 0 0.0 0 0.0 0 0.0 2.0408246517181396 -0.0008359700441360474 0.21605446934700012 -0.9922177791595459 0.12427137047052383 -0.0 0.42788001894950867 0.25616389513015747 0 1.0 0 0.0 0 0.0 0 0.0 2.041722059249878 0.00543956458568573 0.21605446934700012 -0.9871211647987366 0.1598559468984604 -0.0 0.4289977252483368 0.2616328001022339 0 1.0 0 0.0 0 0.0 0 0.0 0.4945714473724365 -0.07072312384843826 -0.2839455306529999 -0.9355449080467224 -0.35319072008132935 -0.0 0.9459694027900696 0.4877854585647583 0 1.0 0 0.0 0 0.0 0 0.0 0.49510645866394043 -0.0722968727350235 0.21605446934700012 -0.9567247629165649 -0.29096347093582153 -0.0 0.5335390567779541 0.3280574083328247 0 1.0 0 0.0 0 0.0 0 0.0 0.4945714473724365 -0.07072312384843826 0.21605446934700012 -0.9355449080467224 -0.35319072008132935 -0.0 0.5331304669380188 0.3297528028488159 0 1.0 0 0.0 0 0.0 0 0.0 -0.339918851852417 -0.1834128499031067 -0.2839455306529999 0.35386210680007935 -0.9352702498435974 -0.0 0.957510232925415 0.3880120515823364 0 1.0 0 0.0 0 0.0 0 0.0 -0.33060407638549805 -0.1794796884059906 0.21605445444583893 0.42332223057746887 -0.9059419631958008 -0.0 0.5309553146362305 0.2370031476020813 0 1.0 0 0.0 0 0.0 0 0.0 -0.339918851852417 -0.1834128499031067 0.21605445444583893 0.35386210680007935 -0.9352702498435974 -0.0 0.5241689682006836 0.2319294810295105 0 1.0 0 0.0 0 0.0 0 0.0 -0.4430580139160156 -0.18128451704978943 -0.2839455306529999 -0.39213234186172485 -0.9198889136314392 -0.0 0.014519035816192627 0.3920992612838745 0 1.0 0 0.0 0 0.0 0 0.0 -0.43786120414733887 -0.18338730931282043 0.21605445444583893 -0.3574327826499939 -0.9338968992233276 -0.0 0.447567880153656 0.23354434967041016 0 1.0 0 0.0 0 0.0 0 0.0 -0.4430580139160156 -0.18128451704978943 0.21605445444583893 -0.39213234186172485 -0.9198889136314392 -0.0 0.4438236653804779 0.23642700910568237 0 1.0 0 0.0 0 0.0 0 0.0 -1.3289111852645874 0.07343429327011108 -0.2839455306529999 0.999237060546875 0.03839228302240372 -0.0 0.9375044107437134 0.6923645734786987 0 1.0 0 0.0 0 0.0 0 0.0 -1.3293672800064087 0.08272477984428406 0.21605446934700012 0.9981383681297302 0.06097598373889923 -0.0 0.6166341304779053 0.5349475145339966 0 1.0 0 0.0 0 0.0 0 0.0 -1.3289111852645874 0.07343429327011108 0.21605446934700012 0.999237060546875 0.03839228302240372 -0.0 0.6178270578384399 0.526172935962677 0 1.0 0 0.0 0 0.0 0 0.0 1.556387186050415 -0.14934493601322174 -0.2839455306529999 0.6964018940925598 -0.7176427245140076 -0.0 0.9172113537788391 0.4122779965400696 0 1.0 0 0.0 0 0.0 0 0.0 1.5626189708709717 -0.14291614294052124 0.21605446934700012 0.7402264475822449 -0.6723227500915527 -0.0 0.5803644061088562 0.27534836530685425 0 1.0 0 0.0 0 0.0 0 0.0 1.556387186050415 -0.14934493601322174 0.21605446934700012 0.6964018940925598 -0.7176427245140076 -0.0 0.5774527788162231 0.2676782011985779 0 1.0 0 0.0 0 0.0 0 0.0 -1.42609441280365 0.08176156878471375 -0.2839455306529999 -0.9896542429924011 -0.143314927816391 -0.0 0.9978780746459961 0.7213261127471924 0 1.0 0 0.0 0 0.0 0 0.0 -1.4256080389022827 0.07759854197502136 0.21605446934700012 -0.9958189725875854 -0.09121982753276825 -0.0 0.5682021379470825 0.5263727903366089 0 1.0 0 0.0 0 0.0 0 0.0 -1.42609441280365 0.08176156878471375 0.21605446934700012 -0.9896542429924011 -0.143314927816391 -0.0 0.5676197409629822 0.5307688117027283 0 1.0 0 0.0 0 0.0 0 0.0 2.134528875350952 0.0020464062690734863 -0.2839455306529999 0.9330118894577026 -0.35981321334838867 -0.0 0.9773029088973999 0.4099716544151306 0 1.0 0 0.0 0 0.0 0 0.0 2.1357266902923584 0.004846066236495972 0.21605446934700012 0.9028900861740112 -0.4298532009124756 -0.0 0.49938392639160156 0.2491394281387329 0 1.0 0 0.0 0 0.0 0 0.0 2.134528875350952 0.0020464062690734863 0.21605446934700012 0.9330118894577026 -0.35981321334838867 -0.0 0.49845102429389954 0.24645698070526123 0 1.0 0 0.0 0 0.0 0 0.0 0.3503725528717041 -0.07625070214271545 -0.2839455306529999 0.9353312849998474 0.35374003648757935 -0.0 0.031612515449523926 0.4852878451347351 0 1.0 0 0.0 0 0.0 0 0.0 0.34887170791625977 -0.07194417715072632 0.21605446934700012 0.9521775245666504 0.30549028515815735 -0.0 0.432491660118103 0.33396750688552856 0 1.0 0 0.0 0 0.0 0 0.0 0.3503725528717041 -0.07625070214271545 0.21605446934700012 0.9353312849998474 0.35374003648757935 -0.0 0.43314307928085327 0.3288540244102478 0 1.0 0 0.0 0 0.0 0 0.0 1.2825636863708496 -0.14473800361156464 -0.2839455306529999 -0.7042451500892639 -0.7099520564079285 -0.0 0.06174764037132263 0.42292261123657227 0 1.0 0 0.0 0 0.0 0 0.0 1.288883924484253 -0.15064138174057007 0.21605446934700012 -0.6608172655105591 -0.7505111694335938 -0.0 0.3917032480239868 0.2740423083305359 0 1.0 0 0.0 0 0.0 0 0.0 1.2825636863708496 -0.14473800361156464 0.21605446934700012 -0.7042451500892639 -0.7099520564079285 -0.0 0.38898372650146484 0.2814762592315674 0 1.0 0 0.0 0 0.0 0 0.0 -0.43786120414733887 -0.18338730931282043 -0.2839455306529999 -0.3574633002281189 -0.9338968992233276 -0.0 0.01167386770248413 0.38986819982528687 0 1.0 0 0.0 0 0.0 0 0.0 -0.43265223503112793 -0.18526874482631683 0.21605445444583893 -0.32139042019844055 -0.9469283223152161 -0.0 0.4513981342315674 0.23094463348388672 0 1.0 0 0.0 0 0.0 0 0.0 -0.43786120414733887 -0.18338730931282043 0.21605445444583893 -0.3574327826499939 -0.9338968992233276 -0.0 0.447567880153656 0.23354434967041016 0 1.0 0 0.0 0 0.0 0 0.0 0.49510645866394043 -0.0722968727350235 -0.2839455306529999 -0.9567247629165649 -0.29096347093582153 -0.0 0.9457437992095947 0.48600679636001587 0 1.0 0 0.0 0 0.0 0 0.0 0.4955441951751709 -0.07392413169145584 0.21605446934700012 -0.9733573198318481 -0.2292550504207611 -0.0 0.5338865518569946 0.3262951970100403 0 1.0 0 0.0 0 0.0 0 0.0 0.49510645866394043 -0.0722968727350235 0.21605446934700012 -0.9567247629165649 -0.29096347093582153 -0.0 0.5335390567779541 0.3280574083328247 0 1.0 0 0.0 0 0.0 0 0.0 -1.4256080389022827 0.07759854197502136 -0.2839455306529999 -0.9958189725875854 -0.09121982753276825 -0.0 0.9975391626358032 0.7168097496032715 0 1.0 0 0.0 0 0.0 0 0.0 -1.4253160953521729 0.07320931553840637 0.21605446934700012 -0.9990233778953552 -0.04370250552892685 -0.0 0.5686959028244019 0.5216755270957947 0 1.0 0 0.0 0 0.0 0 0.0 -1.4256080389022827 0.07759854197502136 0.21605446934700012 -0.9958189725875854 -0.09121982753276825 -0.0 0.5682021379470825 0.5263727903366089 0 1.0 0 0.0 0 0.0 0 0.0 2.1334450244903564 -0.0010986626148223877 -0.2839455306529999 0.9549241662025452 -0.29682302474975586 -0.0 0.9779797792434692 0.4070509076118469 0 1.0 0 0.0 0 0.0 0 0.0 2.134528875350952 0.0020464062690734863 0.21605446934700012 0.9330118894577026 -0.35981321334838867 -0.0 0.49845102429389954 0.24645698070526123 0 1.0 0 0.0 0 0.0 0 0.0 2.1334450244903564 -0.0010986626148223877 0.21605446934700012 0.9549241662025452 -0.29682302474975586 -0.0 0.49759870767593384 0.24348896741867065 0 1.0 0 0.0 0 0.0 0 0.0 2.0408246517181396 -0.0008359700441360474 -0.2839455306529999 -0.9922177791595459 0.12427137047052383 -0.0 0.029456526041030884 0.4122468829154968 0 1.0 0 0.0 0 0.0 0 0.0 2.0401265621185303 -0.007325559854507446 0.21605446934700012 -0.9958800077438354 0.09057893604040146 -0.0 0.4268689751625061 0.2505781054496765 0 1.0 0 0.0 0 0.0 0 0.0 2.0408246517181396 -0.0008359700441360474 0.21605446934700012 -0.9922177791595459 0.12427137047052383 -0.0 0.42788001894950867 0.25616389513015747 0 1.0 0 0.0 0 0.0 0 0.0 0.4955441951751709 -0.07392413169145584 -0.2839455306529999 -0.9733573198318481 -0.2292550504207611 -0.0 0.9455769062042236 0.4841769337654114 0 1.0 0 0.0 0 0.0 0 0.0 0.49588465690612793 -0.07560490816831589 0.21605446934700012 -0.9856258034706116 -0.16876736283302307 -0.0 0.5341729521751404 0.32446593046188354 0 1.0 0 0.0 0 0.0 0 0.0 0.4955441951751709 -0.07392413169145584 0.21605446934700012 -0.9733573198318481 -0.2292550504207611 -0.0 0.5338865518569946 0.3262951970100403 0 1.0 0 0.0 0 0.0 0 0.0 1.5495622158050537 -0.1555742621421814 -0.2839455306529999 0.6481521129608154 -0.7614978551864624 -0.0 0.9208014011383057 0.4063137173652649 0 1.0 0 0.0 0 0.0 0 0.0 1.556387186050415 -0.14934493601322174 0.21605446934700012 0.6964018940925598 -0.7176427245140076 -0.0 0.5774527788162231 0.2676782011985779 0 1.0 0 0.0 0 0.0 0 0.0 1.5495622158050537 -0.1555742621421814 0.21605446934700012 0.6481521129608154 -0.7614978551864624 -0.0 0.5740647315979004 0.2600557804107666 0 1.0 0 0.0 0 0.0 0 0.0 -0.349503755569458 -0.18663088977336884 -0.2839455306529999 0.28241828083992004 -0.9592882990837097 -0.0 0.9628244638442993 0.384929358959198 0 1.0 0 0.0 0 0.0 0 0.0 -0.339918851852417 -0.1834128499031067 0.21605445444583893 0.35386210680007935 -0.9352702498435974 -0.0 0.5241689682006836 0.2319294810295105 0 1.0 0 0.0 0 0.0 0 0.0 -0.349503755569458 -0.18663088977336884 0.21605445444583893 0.28241828083992004 -0.9592882990837097 -0.0 0.5169462561607361 0.2277390956878662 0 1.0 0 0.0 0 0.0 0 0.0 1.288883924484253 -0.15064138174057007 -0.2839455306529999 -0.6608172655105591 -0.7505111694335938 -0.0 0.05858275294303894 0.41700345277786255 0 1.0 0 0.0 0 0.0 0 0.0 1.2956302165985107 -0.15623830258846283 0.21605446934700012 -0.616290807723999 -0.7874996066093445 -0.0 0.3947977125644684 0.26676273345947266 0 1.0 0 0.0 0 0.0 0 0.0 1.288883924484253 -0.15064138174057007 0.21605446934700012 -0.6608172655105591 -0.7505111694335938 -0.0 0.3917032480239868 0.2740423083305359 0 1.0 0 0.0 0 0.0 0 0.0 -0.43265223503112793 -0.18526874482631683 -0.2839455306529999 -0.32142093777656555 -0.9469283223152161 -0.0 0.008817553520202637 0.3878638744354248 0 1.0 0 0.0 0 0.0 0 0.0 -0.4274311065673828 -0.186928853392601 0.21605445444583893 -0.2840968072414398 -0.9587695002555847 -0.0 0.4553092122077942 0.22862982749938965 0 1.0 0 0.0 0 0.0 0 0.0 -0.43265223503112793 -0.18526874482631683 0.21605445444583893 -0.32139042019844055 -0.9469283223152161 -0.0 0.4513981342315674 0.23094463348388672 0 1.0 0 0.0 0 0.0 0 0.0 -1.3286374807357788 0.06358680129051208 -0.2839455306529999 0.99981689453125 0.01825006864964962 -0.0 0.9380841851234436 0.6826471090316772 0 1.0 0 0.0 0 0.0 0 0.0 -1.3289111852645874 0.07343429327011108 0.21605446934700012 0.999237060546875 0.03839228302240372 -0.0 0.6178270578384399 0.526172935962677 0 1.0 0 0.0 0 0.0 0 0.0 -1.3286374807357788 0.06358680129051208 0.21605446934700012 0.99981689453125 0.01825006864964962 -0.0 0.6190141439437866 0.5166995525360107 0 1.0 0 0.0 0 0.0 0 0.0 0.49588465690612793 -0.07560490816831589 -0.2839455306529999 -0.9856258034706116 -0.16876736283302307 -0.0 0.9454684257507324 0.4822959899902344 0 1.0 0 0.0 0 0.0 0 0.0 0.4961278438568115 -0.07733919471502304 0.21605446934700012 -0.9938963055610657 -0.11014129966497421 -0.0 0.534398078918457 0.32256996631622314 0 1.0 0 0.0 0 0.0 0 0.0 0.49588465690612793 -0.07560490816831589 0.21605446934700012 -0.9856258034706116 -0.16876736283302307 -0.0 0.5341729521751404 0.32446593046188354 0 1.0 0 0.0 0 0.0 0 0.0 -1.4253160953521729 0.07320931553840637 -0.2839455306529999 -0.9990233778953552 -0.04370250552892685 -0.0 0.9973450899124146 0.7120200395584106 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 0.06859388947486877 0.21605446934700012 -0.99993896484375 -0.010528885759413242 -0.0 0.5691002607345581 0.5166683197021484 0 1.0 0 0.0 0 0.0 0 0.0 -1.4253160953521729 0.07320931553840637 0.21605446934700012 -0.9990233778953552 -0.04370250552892685 -0.0 0.5686959028244019 0.5216755270957947 0 1.0 0 0.0 0 0.0 0 0.0 2.1324756145477295 -0.0045891255140304565 -0.2839455306529999 0.9700918793678284 -0.24265266954898834 -0.0 0.9785953760147095 0.40384650230407715 0 1.0 0 0.0 0 0.0 0 0.0 2.1334450244903564 -0.0010986626148223877 0.21605446934700012 0.9549241662025452 -0.29682302474975586 -0.0 0.49759870767593384 0.24348896741867065 0 1.0 0 0.0 0 0.0 0 0.0 2.1324756145477295 -0.0045891255140304565 0.21605446934700012 0.9700918793678284 -0.24265266954898834 -0.0 0.4968274235725403 0.24024468660354614 0 1.0 0 0.0 0 0.0 0 0.0 1.5421555042266846 -0.16144844889640808 -0.2839455306529999 0.5901364088058472 -0.8072755932807922 -0.0 0.9246799349784851 0.40065109729766846 0 1.0 0 0.0 0 0.0 0 0.0 1.5495622158050537 -0.1555742621421814 0.21605446934700012 0.6481521129608154 -0.7614978551864624 -0.0 0.5740647315979004 0.2600557804107666 0 1.0 0 0.0 0 0.0 0 0.0 1.5421555042266846 -0.16144844889640808 0.21605446934700012 0.5901364088058472 -0.8072755932807922 -0.0 0.5701556205749512 0.25263315439224243 0 1.0 0 0.0 0 0.0 0 0.0 -0.359358549118042 -0.18913380801677704 -0.2839455306529999 0.21015045046806335 -0.9776604771614075 -0.0 0.968289852142334 0.38256824016571045 0 1.0 0 0.0 0 0.0 0 0.0 -0.349503755569458 -0.18663088977336884 0.21605445444583893 0.28241828083992004 -0.9592882990837097 -0.0 0.5169462561607361 0.2277390956878662 0 1.0 0 0.0 0 0.0 0 0.0 -0.359358549118042 -0.18913380801677704 0.21605445444583893 0.21015045046806335 -0.9776604771614075 -0.0 0.5093119740486145 0.224467933177948 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 0.06859388947486877 -0.2839455306529999 -0.99993896484375 -0.010528885759413242 -0.0 0.9972931146621704 0.7069487571716309 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 0.05878652632236481 0.21605446934700012 -1.0 0.0 -0.0 0.5698535442352295 0.5058304071426392 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 0.06859388947486877 0.21605446934700012 -0.99993896484375 -0.010528885759413242 -0.0 0.5691002607345581 0.5166683197021484 0 1.0 0 0.0 0 0.0 0 0.0 2.1316206455230713 -0.00842498242855072 -0.2839455306529999 0.9805902242660522 -0.19598986208438873 -0.0 0.9791495203971863 0.40036994218826294 0 1.0 0 0.0 0 0.0 0 0.0 2.1324756145477295 -0.0045891255140304565 0.21605446934700012 0.9700918793678284 -0.24265266954898834 -0.0 0.4968274235725403 0.24024468660354614 0 1.0 0 0.0 0 0.0 0 0.0 2.1316206455230713 -0.00842498242855072 0.21605446934700012 0.9805902242660522 -0.19598986208438873 -0.0 0.49613747000694275 0.23673486709594727 0 1.0 0 0.0 0 0.0 0 0.0 0.593909502029419 -0.0843055248260498 -0.2839455306529999 0.9894406199455261 -0.14481033384799957 -0.0 0.8969942331314087 0.47402477264404297 0 1.0 0 0.0 0 0.0 0 0.0 0.5947997570037842 -0.07608164846897125 0.21605446934700012 0.9974364638328552 -0.0714438334107399 -0.0 0.589691162109375 0.3464645743370056 0 1.0 0 0.0 0 0.0 0 0.0 0.593909502029419 -0.0843055248260498 0.21605446934700012 0.9894406199455261 -0.14481033384799957 -0.0 0.5899292230606079 0.3382599353790283 0 1.0 0 0.0 0 0.0 0 0.0 1.2956302165985107 -0.15623830258846283 -0.2839455306529999 -0.616290807723999 -0.7874996066093445 -0.0 0.05520591139793396 0.4113277792930603 0 1.0 0 0.0 0 0.0 0 0.0 1.302802324295044 -0.16152872145175934 0.21605446934700012 -0.5687734484672546 -0.8224738240242004 -0.0 0.3982948064804077 0.2596473693847656 0 1.0 0 0.0 0 0.0 0 0.0 1.2956302165985107 -0.15623830258846283 0.21605446934700012 -0.616290807723999 -0.7874996066093445 -0.0 0.3947977125644684 0.26676273345947266 0 1.0 0 0.0 0 0.0 0 0.0 -0.4274311065673828 -0.186928853392601 -0.2839455306529999 -0.2840968072414398 -0.9587695002555847 -0.0 0.005950242280960083 0.38608503341674805 0 1.0 0 0.0 0 0.0 0 0.0 -0.4221978187561035 -0.18836760520935059 0.21605445444583893 -0.2456129640340805 -0.9693593978881836 -0.0 0.4592951536178589 0.22660183906555176 0 1.0 0 0.0 0 0.0 0 0.0 -0.4274311065673828 -0.186928853392601 0.21605445444583893 -0.2840968072414398 -0.9587695002555847 -0.0 0.4553092122077942 0.22862982749938965 0 1.0 0 0.0 0 0.0 0 0.0 2.0401265621185303 -0.007325559854507446 -0.2839455306529999 -0.9958800077438354 0.09057893604040146 -0.0 0.029656797647476196 0.4064900279045105 0 1.0 0 0.0 0 0.0 0 0.0 2.03962779045105 -0.014029204845428467 0.21605446934700012 -0.9982604384422302 0.05868709459900856 -0.0 0.4259648323059082 0.244884192943573 0 1.0 0 0.0 0 0.0 0 0.0 2.0401265621185303 -0.007325559854507446 0.21605446934700012 -0.9958800077438354 0.09057893604040146 -0.0 0.4268689751625061 0.2505781054496765 0 1.0 0 0.0 0 0.0 0 0.0 0.3520534038543701 -0.08036507666110992 -0.2839455306529999 0.9149448871612549 0.4035462439060211 -0.0 0.030551671981811523 0.48065948486328125 0 1.0 0 0.0 0 0.0 0 0.0 0.3503725528717041 -0.07625070214271545 0.21605446934700012 0.9353312849998474 0.35374003648757935 -0.0 0.43314307928085327 0.3288540244102478 0 1.0 0 0.0 0 0.0 0 0.0 0.3520534038543701 -0.08036507666110992 0.21605446934700012 0.9149448871612549 0.4035462439060211 -0.0 0.43393248319625854 0.3239459991455078 0 1.0 0 0.0 0 0.0 0 0.0 -0.4221978187561035 -0.18836760520935059 -0.2839455306529999 -0.2456129640340805 -0.9693593978881836 -0.0 0.0030720531940460205 0.38453078269958496 0 1.0 0 0.0 0 0.0 0 0.0 -0.41695237159729004 -0.18958501517772675 0.21605445444583893 -0.2061525285243988 -0.9785149693489075 -0.0 0.46334928274154663 0.22486257553100586 0 1.0 0 0.0 0 0.0 0 0.0 -0.4221978187561035 -0.18836760520935059 0.21605445444583893 -0.2456129640340805 -0.9693593978881836 -0.0 0.4592951536178589 0.22660183906555176 0 1.0 0 0.0 0 0.0 0 0.0 -1.3285462856292725 0.053182318806648254 -0.2839455306529999 1.0 -0.0001831110566854477 -0.0 0.9387819170951843 0.6722474098205566 0 1.0 0 0.0 0 0.0 0 0.0 -1.3286374807357788 0.06358680129051208 0.21605446934700012 0.99981689453125 0.01825006864964962 -0.0 0.6190141439437866 0.5166995525360107 0 1.0 0 0.0 0 0.0 0 0.0 -1.3285462856292725 0.053182318806648254 0.21605446934700012 0.999969482421875 -0.0001831110566854477 -0.0 0.6201977729797363 0.5065033435821533 0 1.0 0 0.0 0 0.0 0 0.0 0.4961278438568115 -0.07733919471502304 -0.2839455306529999 -0.9938963055610657 -0.11014129966497421 -0.0 0.945418119430542 0.4803643226623535 0 1.0 0 0.0 0 0.0 0 0.0 0.4962737560272217 -0.0791269913315773 0.21605446934700012 -0.9985350966453552 -0.05386516824364662 -0.0 0.5345618724822998 0.3206072449684143 0 1.0 0 0.0 0 0.0 0 0.0 0.4961278438568115 -0.07733919471502304 0.21605446934700012 -0.9938963055610657 -0.11014129966497421 -0.0 0.534398078918457 0.32256996631622314 0 1.0 0 0.0 0 0.0 0 0.0 1.534179925918579 -0.16681185364723206 -0.2839455306529999 0.5262916684150696 -0.8502761721611023 -0.0 0.9288433790206909 0.39542311429977417 0 1.0 0 0.0 0 0.0 0 0.0 1.5421555042266846 -0.16144844889640808 0.21605446934700012 0.5901364088058472 -0.8072755932807922 -0.0 0.5701556205749512 0.25263315439224243 0 1.0 0 0.0 0 0.0 0 0.0 1.534179925918579 -0.16681185364723206 0.21605446934700012 0.5262916684150696 -0.8502761721611023 -0.0 0.5656803846359253 0.2455642819404602 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 0.05878652632236481 -0.2839455306529999 -0.36930447816848755 0.9292886257171631 -0.0 0.9973304867744446 0.6960070133209229 0 1.0 0 0.0 0 0.0 0 0.0 -1.4299498796463013 0.056906312704086304 0.21605446934700012 -0.35322123765945435 0.9355143904685974 -0.0 0.5672665238380432 0.5033541917800903 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 0.05878652632236481 0.21605446934700012 -0.36930447816848755 0.9292886257171631 -0.0 0.5698535442352295 0.5058304071426392 0 1.0 0 0.0 0 0.0 0 0.0 2.130880117416382 -0.012606248259544373 -0.2839455306529999 0.9877620935440063 -0.15576647222042084 -0.0 0.9796422719955444 0.39663392305374146 0 1.0 0 0.0 0 0.0 0 0.0 2.1316206455230713 -0.00842498242855072 0.21605446934700012 0.9805902242660522 -0.19598986208438873 -0.0 0.49613747000694275 0.23673486709594727 0 1.0 0 0.0 0 0.0 0 0.0 2.130880117416382 -0.012606248259544373 0.21605446934700012 0.9877620935440063 -0.15576647222042084 -0.0 0.4955292344093323 0.23297131061553955 0 1.0 0 0.0 0 0.0 0 0.0 1.302802324295044 -0.16152872145175934 -0.2839455306529999 -0.5687734484672546 -0.8224738240242004 -0.0 0.05160874128341675 0.40589576959609985 0 1.0 0 0.0 0 0.0 0 0.0 1.3104074001312256 -0.1664518564939499 0.21605446934700012 -0.5158543586730957 -0.8566545844078064 -0.0 0.40223488211631775 0.2527579665184021 0 1.0 0 0.0 0 0.0 0 0.0 1.302802324295044 -0.16152872145175934 0.21605446934700012 -0.5687734484672546 -0.8224738240242004 -0.0 0.3982948064804077 0.2596473693847656 0 1.0 0 0.0 0 0.0 0 0.0 0.2476358413696289 -0.0778159350156784 -0.2839455306529999 -0.9610888957977295 -0.2762230336666107 -0.0 0.08192101120948792 0.4880308508872986 0 1.0 0 0.0 0 0.0 0 0.0 0.2501254081726074 -0.08647764474153519 0.21605446934700012 -0.9530014991760254 -0.3029267191886902 -0.0 0.3781566917896271 0.346591055393219 0 1.0 0 0.0 0 0.0 0 0.0 0.2476358413696289 -0.0778159350156784 0.21605446934700012 -0.9610888957977295 -0.2762230336666107 -0.0 0.37793639302253723 0.3555501699447632 0 1.0 0 0.0 0 0.0 0 0.0 -0.36948323249816895 -0.1909216046333313 -0.2839455306529999 0.13834039866924286 -0.9903561472892761 -0.0 0.9739063382148743 0.38093429803848267 0 1.0 0 0.0 0 0.0 0 0.0 -0.359358549118042 -0.18913380801677704 0.21605445444583893 0.21015045046806335 -0.9776604771614075 -0.0 0.5093119740486145 0.224467933177948 0 1.0 0 0.0 0 0.0 0 0.0 -0.36948323249816895 -0.1909216046333313 0.21605445444583893 0.13834039866924286 -0.9903561472892761 -0.0 0.5013026595115662 0.22215431928634644 0 1.0 0 0.0 0 0.0 0 0.0 -1.4299498796463013 0.056906312704086304 -0.2839455306529999 -0.35322123765945435 0.9355143904685974 -0.0 1.0006707906723022 0.6942631006240845 0 1.0 0 0.0 0 0.0 0 0.0 -1.4352694749832153 0.05500175058841705 0.21605446934700012 -0.3237403631210327 0.9461348056793213 -0.0 0.5643073916435242 0.5007731914520264 0 1.0 0 0.0 0 0.0 0 0.0 -1.4299498796463013 0.056906312704086304 0.21605446934700012 -0.35322123765945435 0.9355143904685974 -0.0 0.5672665238380432 0.5033541917800903 0 1.0 0 0.0 0 0.0 0 0.0 2.130253553390503 -0.01713290810585022 -0.2839455306529999 0.9926450252532959 -0.12082277983427048 -0.0 0.9800739884376526 0.3926522135734558 0 1.0 0 0.0 0 0.0 0 0.0 2.130880117416382 -0.012606248259544373 0.21605446934700012 0.9877620935440063 -0.15576647222042084 -0.0 0.4955292344093323 0.23297131061553955 0 1.0 0 0.0 0 0.0 0 0.0 2.130253553390503 -0.01713290810585022 0.21605446934700012 0.9926450252532959 -0.12082277983427048 -0.0 0.49500298500061035 0.22896718978881836 0 1.0 0 0.0 0 0.0 0 0.0 1.3104074001312256 -0.1664518564939499 -0.2839455306529999 -0.5158543586730957 -0.8566545844078064 -0.0 0.047781914472579956 0.40075987577438354 0 1.0 0 0.0 0 0.0 0 0.0 1.3184521198272705 -0.1709468960762024 0.21605445444583893 -0.4602191150188446 -0.8877834677696228 -0.0 0.40666019916534424 0.24616098403930664 0 1.0 0 0.0 0 0.0 0 0.0 1.3104074001312256 -0.1664518564939499 0.21605446934700012 -0.5158543586730957 -0.8566545844078064 -0.0 0.40223488211631775 0.2527579665184021 0 1.0 0 0.0 0 0.0 0 0.0 -0.41695237159729004 -0.18958501517772675 -0.2839455306529999 -0.2061220109462738 -0.9785149693489075 -0.0 1.00018310546875 0.38320016860961914 0 1.0 0 0.0 0 0.0 0 0.0 -0.4116947650909424 -0.1905810683965683 0.21605445444583893 -0.1658070683479309 -0.9861446022987366 -0.0 1.4674643278121948 0.22341382503509521 0 1.0 0 0.0 0 0.0 0 0.0 -0.41695237159729004 -0.18958501517772675 0.21605445444583893 -0.2061525285243988 -0.9785149693489075 -0.0 1.4633493423461914 0.22486257553100586 0 1.0 0 0.0 0 0.0 0 0.0 2.03962779045105 -0.014029204845428467 -0.2839455306529999 -0.9982604384422302 0.05868709459900856 -0.0 0.029745280742645264 0.40065884590148926 0 1.0 0 0.0 0 0.0 0 0.0 2.0393288135528564 -0.020946890115737915 0.21605446934700012 -0.99957275390625 0.02856532484292984 -0.0 0.42516839504241943 0.23909145593643188 0 1.0 0 0.0 0 0.0 0 0.0 2.03962779045105 -0.014029204845428467 0.21605446934700012 -0.9982604384422302 0.05868709459900856 -0.0 0.4259648323059082 0.244884192943573 0 1.0 0 0.0 0 0.0 0 0.0 0.4962737560272217 -0.0791269913315773 -0.2839455306529999 -0.9985350966453552 -0.05386516824364662 -0.0 0.9454255104064941 0.4783821105957031 0 1.0 0 0.0 0 0.0 0 0.0 0.4963223934173584 -0.08096829801797867 0.21605446934700012 -0.999969482421875 0.00357066560536623 -0.0 0.5346640348434448 0.31857800483703613 0 1.0 0 0.0 0 0.0 0 0.0 0.4962737560272217 -0.0791269913315773 0.21605446934700012 -0.9985350966453552 -0.05386516824364662 -0.0 0.5345618724822998 0.3206072449684143 0 1.0 0 0.0 0 0.0 0 0.0 -1.4352694749832153 0.05500175058841705 -0.2839455306529999 -0.3237403631210327 0.9461348056793213 -0.0 1.0044422149658203 0.692439079284668 0 1.0 0 0.0 0 0.0 0 0.0 -1.4411777257919312 0.05307286977767944 0.21605446934700012 -0.29914242029190063 0.9541917443275452 -0.0 0.5609673261642456 0.49808448553085327 0 1.0 0 0.0 0 0.0 0 0.0 -1.4352694749832153 0.05500175058841705 0.21605446934700012 -0.3237403631210327 0.9461348056793213 -0.0 0.5643073916435242 0.5007731914520264 0 1.0 0 0.0 0 0.0 0 0.0 -0.4116947650909424 -0.1905810683965683 -0.2839455306529999 -0.1658070683479309 -0.9861446022987366 -0.0 0.9972836971282959 0.3820924758911133 0 1.0 0 0.0 0 0.0 0 0.0 -0.40642499923706055 -0.19135577976703644 0.21605445444583893 -0.12482070177793503 -0.9921567440032959 -0.0 1.471632480621338 0.2222573161125183 0 1.0 0 0.0 0 0.0 0 0.0 -0.4116947650909424 -0.1905810683965683 0.21605445444583893 -0.1658070683479309 -0.9861446022987366 -0.0 1.4674643278121948 0.22341382503509521 0 1.0 0 0.0 0 0.0 0 0.0 1.525635004043579 -0.17166444659233093 -0.2839455306529999 0.4622333347797394 -0.886745810508728 -0.0 0.9333043694496155 0.3906322121620178 0 1.0 0 0.0 0 0.0 0 0.0 1.534179925918579 -0.16681185364723206 0.21605446934700012 0.5262916684150696 -0.8502761721611023 -0.0 0.5656803846359253 0.2455642819404602 0 1.0 0 0.0 0 0.0 0 0.0 1.525635004043579 -0.17166444659233093 0.21605445444583893 0.4622333347797394 -0.886745810508728 -0.0 0.5605970621109009 0.238874614238739 0 1.0 0 0.0 0 0.0 0 0.0 2.1297414302825928 -0.02200496196746826 -0.2839455306529999 0.9959105253219604 -0.09027375280857086 -0.0 0.9804447889328003 0.3884395360946655 0 1.0 0 0.0 0 0.0 0 0.0 2.130253553390503 -0.01713290810585022 0.21605446934700012 0.9926450252532959 -0.12082277983427048 -0.0 0.49500298500061035 0.22896718978881836 0 1.0 0 0.0 0 0.0 0 0.0 2.1297414302825928 -0.02200496196746826 0.21605446934700012 0.9959105253219604 -0.09027375280857086 -0.0 0.4945599436759949 0.22473657131195068 0 1.0 0 0.0 0 0.0 0 0.0 0.3539142608642578 -0.08428728580474854 -0.2839455306529999 0.8907132148742676 0.4544816315174103 -0.0 0.02939966320991516 0.47626161575317383 0 1.0 0 0.0 0 0.0 0 0.0 0.3520534038543701 -0.08036507666110992 0.21605446934700012 0.9149448871612549 0.4035462439060211 -0.0 0.43393248319625854 0.3239459991455078 0 1.0 0 0.0 0 0.0 0 0.0 0.3539142608642578 -0.08428728580474854 0.21605446934700012 0.8907132148742676 0.4544816315174103 -0.0 0.4348626732826233 0.3192404508590698 0 1.0 0 0.0 0 0.0 0 0.0 1.3184521198272705 -0.1709468960762024 -0.2839455306529999 -0.4602191150188446 -0.8877834677696228 -0.0 0.04371529817581177 0.3959727883338928 0 1.0 0 0.0 0 0.0 0 0.0 1.3269374370574951 -0.17501384019851685 0.21605445444583893 -0.4050111472606659 -0.9142735004425049 -0.0 0.41160446405410767 0.23988109827041626 0 1.0 0 0.0 0 0.0 0 0.0 1.3184521198272705 -0.1709468960762024 0.21605445444583893 -0.4602191150188446 -0.8877834677696228 -0.0 0.40666019916534424 0.24616098403930664 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 -0.2839455306529999 0.999969482421875 -0.0025025177747011185 -0.0 0.9464728236198425 0.5510927438735962 0 1.0 0 0.0 0 0.0 0 0.0 -1.3285462856292725 0.053182318806648254 0.21605446934700012 0.999969482421875 -0.0001831110566854477 -0.0 0.6201977729797363 0.5065033435821533 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 0.21605446934700012 0.999969482421875 -0.0025025177747011185 -0.0 0.6335775852203369 0.3873562812805176 0 1.0 0 0.0 0 0.0 0 0.0 2.0393288135528564 -0.020946890115737915 -0.2839455306529999 -0.99957275390625 0.02856532484292984 -0.0 0.029723763465881348 0.39476317167282104 0 1.0 0 0.0 0 0.0 0 0.0 2.039229154586792 -0.028078630566596985 0.21605446934700012 -0.999969482421875 0.005493331700563431 -0.0 0.4244801998138428 0.23320960998535156 0 1.0 0 0.0 0 0.0 0 0.0 2.0393288135528564 -0.020946890115737915 0.21605446934700012 -0.99957275390625 0.02856532484292984 -0.0 0.42516839504241943 0.23909145593643188 0 1.0 0 0.0 0 0.0 0 0.0 0.4963223934173584 -0.08096829801797867 -0.2839455306529999 -0.999969482421875 0.00357066560536623 -0.0 0.9454903602600098 0.4763496518135071 0 1.0 0 0.0 0 0.0 0 0.0 0.4962317943572998 -0.08366581052541733 0.21605446934700012 -0.9976500868797302 0.06833094358444214 -0.0 0.534707248210907 0.3155941367149353 0 1.0 0 0.0 0 0.0 0 0.0 0.4963223934173584 -0.08096829801797867 0.21605446934700012 -0.999969482421875 0.00357066560536623 -0.0 0.5346640348434448 0.31857800483703613 0 1.0 0 0.0 0 0.0 0 0.0 -0.37987804412841797 -0.19199427962303162 -0.2839455306529999 0.06811731308698654 -0.9976500868797302 -0.0 0.9796726107597351 0.38003551959991455 0 1.0 0 0.0 0 0.0 0 0.0 -0.36948323249816895 -0.1909216046333313 0.21605445444583893 0.13834039866924286 -0.9903561472892761 -0.0 0.5013026595115662 0.22215431928634644 0 1.0 0 0.0 0 0.0 0 0.0 -0.37987804412841797 -0.19199427962303162 0.21605445444583893 0.06811731308698654 -0.9976500868797302 -0.0 0.49296727776527405 0.22083759307861328 0 1.0 0 0.0 0 0.0 0 0.0 -1.4411777257919312 0.05307286977767944 -0.2839455306529999 -0.29914242029190063 0.9541917443275452 -0.0 1.0086486339569092 0.6905044317245483 0 1.0 0 0.0 0 0.0 0 0.0 -1.4476746320724487 0.051119670271873474 0.21605446934700012 -0.2783593237400055 0.9604480266571045 -0.0 0.5572380423545837 0.495286762714386 0 1.0 0 0.0 0 0.0 0 0.0 -1.4411777257919312 0.05307286977767944 0.21605446934700012 -0.29914242029190063 0.9541917443275452 -0.0 0.5609673261642456 0.49808448553085327 0 1.0 0 0.0 0 0.0 0 0.0 -0.40642499923706055 -0.19135577976703644 -0.2839455306529999 -0.12482070177793503 -0.9921567440032959 -0.0 0.9943739771842957 0.3812071681022644 0 1.0 0 0.0 0 0.0 0 0.0 -0.40114307403564453 -0.19190914928913116 0.21605445444583893 -0.08340708911418915 -0.9964903593063354 -0.0 1.4758449792861938 0.2213945984840393 0 1.0 0 0.0 0 0.0 0 0.0 -0.40642499923706055 -0.19135577976703644 0.21605445444583893 -0.12482070177793503 -0.9921567440032959 -0.0 1.471632480621338 0.2222573161125183 0 1.0 0 0.0 0 0.0 0 0.0 0.4962317943572998 -0.08366581052541733 -0.2839455306529999 -0.9976500868797302 0.06833094358444214 -0.0 0.9456760883331299 0.4733878970146179 0 1.0 0 0.0 0 0.0 0 0.0 0.49596190452575684 -0.08627089112997055 0.21605446934700012 -0.9901730418205261 0.13974425196647644 -0.0 0.5346280336380005 0.31269896030426025 0 1.0 0 0.0 0 0.0 0 0.0 0.4962317943572998 -0.08366581052541733 0.21605446934700012 -0.9976500868797302 0.06833094358444214 -0.0 0.534707248210907 0.3155941367149353 0 1.0 0 0.0 0 0.0 0 0.0 1.5165207386016846 -0.1760062575340271 -0.2839455306529999 0.39918211102485657 -0.9168370366096497 -0.0 0.9380753040313721 0.3862854242324829 0 1.0 0 0.0 0 0.0 0 0.0 1.525635004043579 -0.17166444659233093 0.21605445444583893 0.4622333347797394 -0.886745810508728 -0.0 0.5605970621109009 0.238874614238739 0 1.0 0 0.0 0 0.0 0 0.0 1.5165207386016846 -0.1760062575340271 0.21605445444583893 0.39918211102485657 -0.9168370366096497 -0.0 0.554863452911377 0.23260116577148438 0 1.0 0 0.0 0 0.0 0 0.0 -1.4476746320724487 0.051119670271873474 -0.2839455306529999 -0.2783593237400055 0.9604480266571045 -0.0 1.0132920742034912 0.6884256601333618 0 1.0 0 0.0 0 0.0 0 0.0 -1.4547600746154785 0.04914213716983795 0.21605446934700012 -0.2605975568294525 0.965422511100769 -0.0 0.5531123876571655 0.4923807382583618 0 1.0 0 0.0 0 0.0 0 0.0 -1.4476746320724487 0.051119670271873474 0.21605446934700012 -0.2783593237400055 0.9604480266571045 -0.0 0.5572380423545837 0.495286762714386 0 1.0 0 0.0 0 0.0 0 0.0 2.1293437480926514 -0.027222424745559692 -0.2839455306529999 0.9979857802391052 -0.0634174644947052 -0.0 0.980755090713501 0.38401156663894653 0 1.0 0 0.0 0 0.0 0 0.0 2.1297414302825928 -0.02200496196746826 0.21605446934700012 0.9959105253219604 -0.09027375280857086 -0.0 0.4945599436759949 0.22473657131195068 0 1.0 0 0.0 0 0.0 0 0.0 2.1293437480926514 -0.027222424745559692 0.21605446934700012 0.9979857802391052 -0.0634174644947052 -0.0 0.4942011833190918 0.2202945351600647 0 1.0 0 0.0 0 0.0 0 0.0 1.3269374370574951 -0.17501384019851685 -0.2839455306529999 -0.4050111472606659 -0.9142735004425049 -0.0 0.03939896821975708 0.3915392756462097 0 1.0 0 0.0 0 0.0 0 0.0 1.3358633518218994 -0.17865267395973206 0.21605445444583893 -0.3510238826274872 -0.9363383650779724 -0.0 0.41710081696510315 0.2339511513710022 0 1.0 0 0.0 0 0.0 0 0.0 1.3269374370574951 -0.17501384019851685 0.21605445444583893 -0.4050111472606659 -0.9142735004425049 -0.0 0.41160446405410767 0.23988109827041626 0 1.0 0 0.0 0 0.0 0 0.0 -0.40114307403564453 -0.19190914928913116 -0.2839455306529999 -0.08340708911418915 -0.9964903593063354 -0.0 0.9914541840553284 0.38054370880126953 0 1.0 0 0.0 0 0.0 0 0.0 -0.39584898948669434 -0.19224116206169128 0.21605445444583893 -0.041718803346157074 -0.999114990234375 -0.0 1.480093002319336 0.2208271622657776 0 1.0 0 0.0 0 0.0 0 0.0 -0.40114307403564453 -0.19190914928913116 0.21605445444583893 -0.08340708911418915 -0.9964903593063354 -0.0 1.4758449792861938 0.2213945984840393 0 1.0 0 0.0 0 0.0 0 0.0 -1.4547600746154785 0.04914213716983795 -0.2839455306529999 -0.2605975568294525 0.965422511100769 -0.0 1.0183712244033813 0.6861664056777954 0 1.0 0 0.0 0 0.0 0 0.0 -1.46243417263031 0.04714028537273407 0.21605446934700012 -0.2452772557735443 0.9694204330444336 -0.0 0.5485851168632507 0.48936909437179565 0 1.0 0 0.0 0 0.0 0 0.0 -1.4547600746154785 0.04914213716983795 0.21605446934700012 -0.2605975568294525 0.965422511100769 -0.0 0.5531123876571655 0.4923807382583618 0 1.0 0 0.0 0 0.0 0 0.0 2.1290605068206787 -0.03278528153896332 -0.2839455306529999 0.99920654296875 -0.0397351011633873 -0.0 0.9810053706169128 0.37938469648361206 0 1.0 0 0.0 0 0.0 0 0.0 2.1293437480926514 -0.027222424745559692 0.21605446934700012 0.9979857802391052 -0.0634174644947052 -0.0 0.4942011833190918 0.2202945351600647 0 1.0 0 0.0 0 0.0 0 0.0 2.1290605068206787 -0.03278528153896332 0.21605446934700012 0.99920654296875 -0.0397351011633873 -0.0 0.4939279854297638 0.2156570553779602 0 1.0 0 0.0 0 0.0 0 0.0 0.3559551239013672 -0.08801734447479248 -0.2839455306529999 0.8624836206436157 0.5060274004936218 -0.0 0.028155982494354248 0.4720897078514099 0 1.0 0 0.0 0 0.0 0 0.0 0.3539142608642578 -0.08428728580474854 0.21605446934700012 0.8907132148742676 0.4544816315174103 -0.0 0.4348626732826233 0.3192404508590698 0 1.0 0 0.0 0 0.0 0 0.0 0.3559551239013672 -0.08801734447479248 0.21605446934700012 0.8624836206436157 0.5060274004936218 -0.0 0.4359365999698639 0.31473463773727417 0 1.0 0 0.0 0 0.0 0 0.0 -0.39584898948669434 -0.19224116206169128 -0.2839455306529999 -0.041718803346157074 -0.999114990234375 -0.0 0.9885245561599731 0.38010191917419434 0 1.0 0 0.0 0 0.0 0 0.0 -0.39054274559020996 -0.19235184788703918 0.21605445444583893 0.006317331455647945 -0.999969482421875 -0.0 1.4843671321868896 0.22055619955062866 0 1.0 0 0.0 0 0.0 0 0.0 -0.39584898948669434 -0.19224116206169128 0.21605445444583893 -0.041718803346157074 -0.999114990234375 -0.0 1.480093002319336 0.2208271622657776 0 1.0 0 0.0 0 0.0 0 0.0 2.039229154586792 -0.028078630566596985 -0.2839455306529999 -0.999969482421875 0.005493331700563431 -0.0 0.029594451189041138 0.38881319761276245 0 1.0 0 0.0 0 0.0 0 0.0 2.039231538772583 -0.028883740305900574 0.21605446934700012 -0.999969482421875 -0.005005035549402237 -0.0 0.4244113266468048 0.23255091905593872 0 1.0 0 0.0 0 0.0 0 0.0 2.039229154586792 -0.028078630566596985 0.21605446934700012 -0.999969482421875 0.005493331700563431 -0.0 0.4244801998138428 0.23320960998535156 0 1.0 0 0.0 0 0.0 0 0.0 1.5068376064300537 -0.17983725666999817 -0.2839455306529999 0.33814507722854614 -0.9410687685012817 -0.0 0.9431672096252441 0.38239455223083496 0 1.0 0 0.0 0 0.0 0 0.0 1.5165207386016846 -0.1760062575340271 0.21605445444583893 0.39918211102485657 -0.9168370366096497 -0.0 0.554863452911377 0.23260116577148438 0 1.0 0 0.0 0 0.0 0 0.0 1.5068376064300537 -0.17983725666999817 0.21605445444583893 0.33814507722854614 -0.9410687685012817 -0.0 0.5484396815299988 0.22679340839385986 0 1.0 0 0.0 0 0.0 0 0.0 -0.39054274559020996 -0.19235184788703918 -0.2839455306529999 0.006317331455647945 -0.999969482421875 -0.0 0.9855853915214539 0.37988173961639404 0 1.0 0 0.0 0 0.0 0 0.0 -0.37987804412841797 -0.19199427962303162 0.21605445444583893 0.06811731308698654 -0.9976500868797302 -0.0 0.49296727776527405 0.22083759307861328 0 1.0 0 0.0 0 0.0 0 0.0 -0.39054274559020996 -0.19235184788703918 0.21605445444583893 0.006317331455647945 -0.999969482421875 -0.0 1.4843671321868896 0.22055619955062866 0 1.0 0 0.0 0 0.0 0 0.0 -1.46243417263031 0.04714028537273407 -0.2839455306529999 -0.2452772557735443 0.9694204330444336 -0.0 1.0238808393478394 0.6836882829666138 0 1.0 0 0.0 0 0.0 0 0.0 -1.470697045326233 0.04511411488056183 0.21605446934700012 -0.23191015422344208 0.9727164506912231 -0.0 0.5436533093452454 0.4862578511238098 0 1.0 0 0.0 0 0.0 0 0.0 -1.46243417263031 0.04714028537273407 0.21605446934700012 -0.2452772557735443 0.9694204330444336 -0.0 0.5485851168632507 0.48936909437179565 0 1.0 0 0.0 0 0.0 0 0.0 0.5924258232116699 -0.0923299491405487 -0.2839455306529999 0.9756157398223877 -0.21933652460575104 -0.0 0.8982551097869873 0.46633195877075195 0 1.0 0 0.0 0 0.0 0 0.0 0.593909502029419 -0.0843055248260498 0.21605446934700012 0.9894406199455261 -0.14481033384799957 -0.0 0.5899292230606079 0.3382599353790283 0 1.0 0 0.0 0 0.0 0 0.0 0.5924258232116699 -0.0923299491405487 0.21605446934700012 0.9756157398223877 -0.21933652460575104 -0.0 0.5898783802986145 0.33016830682754517 0 1.0 0 0.0 0 0.0 0 0.0 1.3358633518218994 -0.17865267395973206 -0.2839455306529999 -0.3510238826274872 -0.9363383650779724 -0.0 0.0348239541053772 0.38746732473373413 0 1.0 0 0.0 0 0.0 0 0.0 1.345228910446167 -0.18186341226100922 0.21605445444583893 -0.29874569177627563 -0.9543138146400452 -0.0 0.4231798052787781 0.22841310501098633 0 1.0 0 0.0 0 0.0 0 0.0 1.3358633518218994 -0.17865267395973206 0.21605445444583893 -0.3510238826274872 -0.9363383650779724 -0.0 0.41710081696510315 0.2339511513710022 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.32953959703445435 -0.2839455306529999 -1.0 0.0 -0.0 0.9500210285186768 0.8827873468399048 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 0.21605446934700012 -1.0 0.0 -0.0 0.5881415009498596 0.5820229053497314 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.32953959703445435 0.21605446934700012 -1.0 0.0 -0.0 0.5745580792427063 0.6996983289718628 0 1.0 0 0.0 0 0.0 0 0.0 2.039231538772583 -0.028883740305900574 -0.2839455306529999 -0.999969482421875 -0.005005035549402237 -0.0 0.02957293391227722 0.3881494998931885 0 1.0 0 0.0 0 0.0 0 0.0 2.039238691329956 -0.02989804744720459 0.21605446934700012 -0.99993896484375 -0.008575701154768467 -0.0 0.4243272542953491 0.23172283172607422 0 1.0 0 0.0 0 0.0 0 0.0 2.039231538772583 -0.028883740305900574 0.21605446934700012 -0.999969482421875 -0.005005035549402237 -0.0 0.4244113266468048 0.23255091905593872 0 1.0 0 0.0 0 0.0 0 0.0 0.49596190452575684 -0.08627089112997055 -0.2839455306529999 -0.9901730418205261 0.13974425196647644 -0.0 0.9459569454193115 0.47054433822631836 0 1.0 0 0.0 0 0.0 0 0.0 0.4955120086669922 -0.08878353983163834 0.21605446934700012 -0.9767754077911377 0.2142094224691391 -0.0 0.5344247221946716 0.30989009141921997 0 1.0 0 0.0 0 0.0 0 0.0 0.49596190452575684 -0.08627089112997055 0.21605446934700012 -0.9901730418205261 0.13974425196647644 -0.0 0.5346280336380005 0.31269896030426025 0 1.0 0 0.0 0 0.0 0 0.0 -1.470697045326233 0.04511411488056183 -0.2839455306529999 -0.23191015422344208 0.9727164506912231 -0.0 1.029810905456543 0.6809518337249756 0 1.0 0 0.0 0 0.0 0 0.0 -1.479548454284668 0.043063610792160034 0.21605446934700012 -0.22016052901744843 0.9754325747489929 -0.0 0.5383179187774658 0.4830561876296997 0 1.0 0 0.0 0 0.0 0 0.0 -1.470697045326233 0.04511411488056183 0.21605446934700012 -0.23191015422344208 0.9727164506912231 -0.0 0.5436533093452454 0.4862578511238098 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 0.32953959703445435 -0.2839455306529999 0.0 1.0 -0.0 0.8878573775291443 0.842465877532959 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.32953959703445435 0.21605446934700012 0.0 1.0 -0.0 0.5745580792427063 0.6996983289718628 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 0.32953959703445435 0.21605446934700012 0.0 1.0 -0.0 0.6138039231300354 0.688823938369751 0 1.0 0 0.0 0 0.0 0 0.0 2.039238691329956 -0.02989804744720459 -0.2839455306529999 -0.99993896484375 -0.008575701154768467 -0.0 0.029543757438659668 0.387315571308136 0 1.0 0 0.0 0 0.0 0 0.0 2.0392510890960693 -0.03112153708934784 0.21605446934700012 -0.99993896484375 -0.01104770042002201 -0.0 0.4242281913757324 0.2307267189025879 0 1.0 0 0.0 0 0.0 0 0.0 2.039238691329956 -0.02989804744720459 0.21605446934700012 -0.99993896484375 -0.008575701154768467 -0.0 0.4243272542953491 0.23172283172607422 0 1.0 0 0.0 0 0.0 0 0.0 0.2501254081726074 -0.08647764474153519 -0.2839455306529999 -0.9530014991760254 -0.3029267191886902 -0.0 0.08034408092498779 0.4796344041824341 0 1.0 0 0.0 0 0.0 0 0.0 0.2530405521392822 -0.09483286738395691 0.21605446934700012 -0.9342631101608276 -0.3565477430820465 -0.0 0.3786012530326843 0.3378404974937439 0 1.0 0 0.0 0 0.0 0 0.0 0.2501254081726074 -0.08647764474153519 0.21605446934700012 -0.9530014991760254 -0.3029267191886902 -0.0 0.3781566917896271 0.346591055393219 0 1.0 0 0.0 0 0.0 0 0.0 1.4965851306915283 -0.18315744400024414 -0.2839455306529999 0.2797936797142029 -0.9600512981414795 -0.0 0.9485904574394226 0.37897586822509766 0 1.0 0 0.0 0 0.0 0 0.0 1.5068376064300537 -0.17983725666999817 0.21605445444583893 0.33814507722854614 -0.9410687685012817 -0.0 0.5484396815299988 0.22679340839385986 0 1.0 0 0.0 0 0.0 0 0.0 1.4965851306915283 -0.18315744400024414 0.21605445444583893 0.2797936797142029 -0.9600512981414795 -0.0 0.5412901043891907 0.22151345014572144 0 1.0 0 0.0 0 0.0 0 0.0 -1.479548454284668 0.043063610792160034 -0.2839455306529999 -0.22016052901744843 0.9754325747489929 -0.0 1.0361446142196655 0.6779175996780396 0 1.0 0 0.0 0 0.0 0 0.0 -1.4889885187149048 0.04098878800868988 0.21605446934700012 -0.20975372195243835 0.9777215123176575 -0.0 0.5325842499732971 0.47977715730667114 0 1.0 0 0.0 0 0.0 0 0.0 -1.479548454284668 0.043063610792160034 0.21605446934700012 -0.22016052901744843 0.9754325747489929 -0.0 0.5383179187774658 0.4830561876296997 0 1.0 0 0.0 0 0.0 0 0.0 1.345228910446167 -0.18186341226100922 -0.2839455306529999 -0.29874569177627563 -0.9543138146400452 -0.0 0.02998247742652893 0.3837679624557495 0 1.0 0 0.0 0 0.0 0 0.0 1.3550350666046143 -0.18464605510234833 0.21605445444583893 -0.24854274094104767 -0.9685964584350586 -0.0 0.4298694431781769 0.2233176827430725 0 1.0 0 0.0 0 0.0 0 0.0 1.345228910446167 -0.18186341226100922 0.21605445444583893 -0.29874569177627563 -0.9543138146400452 -0.0 0.4231798052787781 0.22841310501098633 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 -0.2839455306529999 1.0 0.0 -0.0 0.934088408946991 0.4341752529144287 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 0.32953959703445435 0.21605446934700012 1.0 0.0 -0.0 0.6138039231300354 0.688823938369751 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 0.21605445444583893 1.0 0.0 -0.0 0.6724605560302734 0.28865742683410645 0 1.0 0 0.0 0 0.0 0 0.0 2.0392510890960693 -0.03112153708934784 -0.2839455306529999 -0.999908447265625 -0.01104770042002201 -0.0 0.029506683349609375 0.386313259601593 0 1.0 0 0.0 0 0.0 0 0.0 2.0392682552337646 -0.03255420923233032 0.21605446934700012 -0.999908447265625 -0.012665181420743465 -0.0 0.4241137206554413 0.22956520318984985 0 1.0 0 0.0 0 0.0 0 0.0 2.0392510890960693 -0.03112153708934784 0.21605446934700012 -0.99993896484375 -0.01104770042002201 -0.0 0.4242281913757324 0.2307267189025879 0 1.0 0 0.0 0 0.0 0 0.0 -1.0966724157333374 0.19643977284431458 -0.2839455306529999 0.0021973326802253723 0.999969482421875 -0.0 0.052008867263793945 0.8166701197624207 0 1.0 0 0.0 0 0.0 0 0.0 -1.1078346967697144 0.19609802961349487 0.21605448424816132 -0.062410350888967514 0.9980468153953552 -0.0 0.522833526134491 0.6211022734642029 0 1.0 0 0.0 0 0.0 0 0.0 -1.0966724157333374 0.19643977284431458 0.21605448424816132 0.0021973326802253723 0.999969482421875 -0.0 0.5286993384361267 0.6222618818283081 0 1.0 0 0.0 0 0.0 0 0.0 -1.4889885187149048 0.04098878800868988 -0.2839455306529999 -0.20975372195243835 0.9777215123176575 -0.0 0.042858511209487915 0.6745481491088867 0 1.0 0 0.0 0 0.0 0 0.0 -1.4990172386169434 0.03888964653015137 0.21605446934700012 -0.20047609508037567 0.9796746969223022 -0.0 0.5264630317687988 0.4764382839202881 0 1.0 0 0.0 0 0.0 0 0.0 -1.4889885187149048 0.04098878800868988 0.21605446934700012 -0.20975372195243835 0.9777215123176575 -0.0 0.5325842499732971 0.47977715730667114 0 1.0 0 0.0 0 0.0 0 0.0 0.35817599296569824 -0.09155523777008057 -0.2839455306529999 0.8301034569740295 0.557603657245636 -0.0 0.02681976556777954 0.4681397080421448 0 1.0 0 0.0 0 0.0 0 0.0 0.3559551239013672 -0.08801734447479248 0.21605446934700012 0.8624836206436157 0.5060274004936218 -0.0 0.4359365999698639 0.31473463773727417 0 1.0 0 0.0 0 0.0 0 0.0 0.35817599296569824 -0.09155523777008057 0.21605446934700012 0.8301034569740295 0.557603657245636 -0.0 0.43715718388557434 0.3104264736175537 0 1.0 0 0.0 0 0.0 0 0.0 2.0392682552337646 -0.03255420923233032 -0.2839455306529999 -0.999908447265625 -0.012665181420743465 -0.0 0.029461979866027832 0.3851448893547058 0 1.0 0 0.0 0 0.0 0 0.0 2.039290189743042 -0.03419606387615204 0.21605446934700012 -0.9998779296875 -0.01388592179864645 -0.0 0.4239836633205414 0.22824078798294067 0 1.0 0 0.0 0 0.0 0 0.0 2.0392682552337646 -0.03255420923233032 0.21605446934700012 -0.999908447265625 -0.012665181420743465 -0.0 0.4241137206554413 0.22956520318984985 0 1.0 0 0.0 0 0.0 0 0.0 0.4955120086669922 -0.08878353983163834 -0.2839455306529999 -0.9767754077911377 0.2142094224691391 -0.0 0.9463331699371338 0.46781617403030396 0 1.0 0 0.0 0 0.0 0 0.0 0.49488210678100586 -0.09120375663042068 0.21605446934700012 -0.9568773508071899 0.29047515988349915 -0.0 0.5340960025787354 0.307165265083313 0 1.0 0 0.0 0 0.0 0 0.0 0.4955120086669922 -0.08878353983163834 0.21605446934700012 -0.9767754077911377 0.2142094224691391 -0.0 0.5344247221946716 0.30989009141921997 0 1.0 0 0.0 0 0.0 0 0.0 1.4857633113861084 -0.1859668493270874 -0.2839455306529999 0.22461622953414917 -0.9744254946708679 -0.0 0.9543532133102417 0.3760504722595215 0 1.0 0 0.0 0 0.0 0 0.0 1.4965851306915283 -0.18315744400024414 0.21605445444583893 0.2797936797142029 -0.9600512981414795 -0.0 0.5412901043891907 0.22151345014572144 0 1.0 0 0.0 0 0.0 0 0.0 1.4857633113861084 -0.1859668493270874 0.21605445444583893 0.22461622953414917 -0.9744254946708679 -0.0 0.5333886742591858 0.21683746576309204 0 1.0 0 0.0 0 0.0 0 0.0 -1.0863980054855347 0.1960797905921936 -0.2839455306529999 0.0710165724158287 0.9974669814109802 -0.0 0.042767733335494995 0.8174909353256226 0 1.0 0 0.0 0 0.0 0 0.0 -1.0966724157333374 0.19643977284431458 0.21605448424816132 0.0021973326802253723 0.999969482421875 -0.0 0.5286993384361267 0.6222618818283081 0 1.0 0 0.0 0 0.0 0 0.0 -1.0863980054855347 0.1960797905921936 0.21605448424816132 0.0710165724158287 0.9974669814109802 -0.0 0.5341312289237976 0.6226881742477417 0 1.0 0 0.0 0 0.0 0 0.0 -1.4990172386169434 0.03888964653015137 -0.2839455306529999 -0.20047609508037567 0.9796746969223022 -0.0 0.049921393394470215 0.6708100438117981 0 1.0 0 0.0 0 0.0 0 0.0 -1.5096346139907837 0.036766186356544495 0.21605446934700012 -0.19217506051063538 0.9813531637191772 -0.0 0.519971489906311 0.473061203956604 0 1.0 0 0.0 0 0.0 0 0.0 -1.4990172386169434 0.03888964653015137 0.21605446934700012 -0.20047609508037567 0.9796746969223022 -0.0 0.5264630317687988 0.4764382839202881 0 1.0 0 0.0 0 0.0 0 0.0 1.3550350666046143 -0.18464605510234833 -0.2839455306529999 -0.24854274094104767 -0.9685964584350586 -0.0 0.02486705780029297 0.3804551362991333 0 1.0 0 0.0 0 0.0 0 0.0 1.365281343460083 -0.1870006024837494 0.21605445444583893 -0.20072023570537567 -0.9796441793441772 -0.0 0.43718987703323364 0.21872544288635254 0 1.0 0 0.0 0 0.0 0 0.0 1.3550350666046143 -0.18464605510234833 0.21605445444583893 -0.24854274094104767 -0.9685964584350586 -0.0 0.4298694431781769 0.2233176827430725 0 1.0 0 0.0 0 0.0 0 0.0 -1.1078346967697144 0.19609802961349487 -0.2839455306529999 -0.062410350888967514 0.9980468153953552 -0.0 0.06184554100036621 0.8146851658821106 0 1.0 0 0.0 0 0.0 0 0.0 -1.11867094039917 0.19507277011871338 0.21605448424816132 -0.1273842602968216 0.9918210506439209 -0.0 0.5171758532524109 0.6193115711212158 0 1.0 0 0.0 0 0.0 0 0.0 -1.1078346967697144 0.19609802961349487 0.21605448424816132 -0.062410350888967514 0.9980468153953552 -0.0 0.522833526134491 0.6211022734642029 0 1.0 0 0.0 0 0.0 0 0.0 0.49488210678100586 -0.09120375663042068 -0.2839455306529999 -0.9568773508071899 0.29047515988349915 -0.0 0.946804404258728 0.46520084142684937 0 1.0 0 0.0 0 0.0 0 0.0 0.49407219886779785 -0.0935315415263176 0.21605446934700012 -0.9301736354827881 0.3670461177825928 -0.0 0.533640444278717 0.3045228123664856 0 1.0 0 0.0 0 0.0 0 0.0 0.49488210678100586 -0.09120375663042068 0.21605446934700012 -0.9568773508071899 0.29047515988349915 -0.0 0.5340960025787354 0.307165265083313 0 1.0 0 0.0 0 0.0 0 0.0 2.1288912296295166 -0.03869353234767914 -0.2839455306529999 0.99981689453125 -0.018677327781915665 -0.0 0.9811965227127075 0.37457603216171265 0 1.0 0 0.0 0 0.0 0 0.0 2.1290605068206787 -0.03278528153896332 0.21605446934700012 0.99920654296875 -0.0397351011633873 -0.0 0.4939279854297638 0.2156570553779602 0 1.0 0 0.0 0 0.0 0 0.0 2.1288912296295166 -0.03869353234767914 0.21605446934700012 0.99981689453125 -0.018677327781915665 -0.0 0.493741512298584 0.2108408808708191 0 1.0 0 0.0 0 0.0 0 0.0 2.039290189743042 -0.03419606387615204 -0.2839455306529999 -0.9998779296875 -0.01388592179864645 -0.0 0.029409736394882202 0.38381296396255493 0 1.0 0 0.0 0 0.0 0 0.0 2.0393168926239014 -0.03604710102081299 0.21605446934700012 -0.9998779296875 -0.014831995591521263 -0.0 0.4238378405570984 0.2267565131187439 0 1.0 0 0.0 0 0.0 0 0.0 2.039290189743042 -0.03419606387615204 0.21605446934700012 -0.9998779296875 -0.01388592179864645 -0.0 0.4239836633205414 0.22824078798294067 0 1.0 0 0.0 0 0.0 0 0.0 1.4743726253509521 -0.18826544284820557 -0.2839455306529999 0.17285683751106262 -0.9849238395690918 -0.0 0.9604605436325073 0.37364357709884644 0 1.0 0 0.0 0 0.0 0 0.0 1.4857633113861084 -0.1859668493270874 0.21605445444583893 0.22461622953414917 -0.9744254946708679 -0.0 0.5333886742591858 0.21683746576309204 0 1.0 0 0.0 0 0.0 0 0.0 1.4743726253509521 -0.18826544284820557 0.21605445444583893 0.17285683751106262 -0.9849238395690918 -0.0 0.5247240662574768 0.21285516023635864 0 1.0 0 0.0 0 0.0 0 0.0 -1.076357126235962 0.1949998140335083 -0.2839455306529999 0.143803209066391 0.9895932078361511 -0.0 1.0336462259292603 0.817267894744873 0 1.0 0 0.0 0 0.0 0 0.0 -1.0863980054855347 0.1960797905921936 0.21605448424816132 0.0710165724158287 0.9974669814109802 -0.0 0.5341312289237976 0.6226881742477417 0 1.0 0 0.0 0 0.0 0 0.0 -1.076357126235962 0.1949998140335083 0.21605448424816132 0.143803209066391 0.9895932078361511 -0.0 0.5394721627235413 0.6224310398101807 0 1.0 0 0.0 0 0.0 0 0.0 -1.5096346139907837 0.036766186356544495 -0.2839455306529999 -0.19217506051063538 0.9813531637191772 -0.0 0.05729389190673828 0.6666763424873352 0 1.0 0 0.0 0 0.0 0 0.0 -1.5208405256271362 0.03461839258670807 0.21605446934700012 -0.191381573677063 0.981505811214447 -0.0 0.5131340026855469 0.46967190504074097 0 1.0 0 0.0 0 0.0 0 0.0 -1.5096346139907837 0.036766186356544495 0.21605446934700012 -0.19217506051063538 0.9813531637191772 -0.0 0.519971489906311 0.473061203956604 0 1.0 0 0.0 0 0.0 0 0.0 0.360576868057251 -0.09490098059177399 -0.2839455306529999 0.7935422658920288 0.6084780693054199 -0.0 0.025390267372131348 0.464407742023468 0 1.0 0 0.0 0 0.0 0 0.0 0.35817599296569824 -0.09155523777008057 0.21605446934700012 0.8301034569740295 0.557603657245636 -0.0 0.43715718388557434 0.3104264736175537 0 1.0 0 0.0 0 0.0 0 0.0 0.360576868057251 -0.09490098059177399 0.21605446934700012 0.7935422658920288 0.6084780693054199 -0.0 0.4385274052619934 0.30631446838378906 0 1.0 0 0.0 0 0.0 0 0.0 1.365281343460083 -0.1870006024837494 -0.2839455306529999 -0.20072023570537567 -0.9796441793441772 -0.0 0.01947242021560669 0.37754589319229126 0 1.0 0 0.0 0 0.0 0 0.0 1.3759682178497314 -0.1889270544052124 0.21605445444583893 -0.15546128153800964 -0.9878231287002563 -0.0 0.44515177607536316 0.21470582485198975 0 1.0 0 0.0 0 0.0 0 0.0 1.365281343460083 -0.1870006024837494 0.21605445444583893 -0.20072023570537567 -0.9796441793441772 -0.0 0.43718987703323364 0.21872544288635254 0 1.0 0 0.0 0 0.0 0 0.0 -1.11867094039917 0.19507277011871338 -0.2839455306529999 -0.1273842602968216 0.9918210506439209 -0.0 0.07110142707824707 0.8117210865020752 0 1.0 0 0.0 0 0.0 0 0.0 -1.1291812658309937 0.19336402416229248 0.21605448424816132 -0.19467757642269135 0.9808648824691772 -0.0 0.5117258429527283 0.6169023513793945 0 1.0 0 0.0 0 0.0 0 0.0 -1.11867094039917 0.19507277011871338 0.21605448424816132 -0.1273842602968216 0.9918210506439209 -0.0 0.5171758532524109 0.6193115711212158 0 1.0 0 0.0 0 0.0 0 0.0 2.0393168926239014 -0.03604710102081299 -0.2839455306529999 -0.9998779296875 -0.014831995591521263 -0.0 0.02935001254081726 0.3823206424713135 0 1.0 0 0.0 0 0.0 0 0.0 2.0393483638763428 -0.03810732066631317 0.21605446934700012 -0.999847412109375 -0.0157170332968235 -0.0 0.423676073551178 0.22511571645736694 0 1.0 0 0.0 0 0.0 0 0.0 2.0393168926239014 -0.03604710102081299 0.21605446934700012 -0.9998779296875 -0.014831995591521263 -0.0 0.4238378405570984 0.2267565131187439 0 1.0 0 0.0 0 0.0 0 0.0 -1.5208405256271362 0.03461839258670807 -0.2839455306529999 -0.191381573677063 0.981505811214447 -0.0 0.0649290382862091 0.6621288657188416 0 1.0 0 0.0 0 0.0 0 0.0 -1.529197096824646 0.03296072781085968 0.21605446934700012 -0.20114749670028687 0.9795526266098022 -0.0 0.5080614686012268 0.46713006496429443 0 1.0 0 0.0 0 0.0 0 0.0 -1.5208405256271362 0.03461839258670807 0.21605446934700012 -0.191381573677063 0.981505811214447 -0.0 0.5131340026855469 0.46967190504074097 0 1.0 0 0.0 0 0.0 0 0.0 0.590348482131958 -0.10015491396188736 -0.2839455306529999 0.9558396935462952 -0.2937711775302887 -0.0 0.899749755859375 0.4588810205459595 0 1.0 0 0.0 0 0.0 0 0.0 0.5924258232116699 -0.0923299491405487 0.21605446934700012 0.9756157398223877 -0.21933652460575104 -0.0 0.5898783802986145 0.33016830682754517 0 1.0 0 0.0 0 0.0 0 0.0 0.590348482131958 -0.10015491396188736 0.21605446934700012 0.9558396935462952 -0.2937711775302887 -0.0 0.5895298719406128 0.32216984033584595 0 1.0 0 0.0 0 0.0 0 0.0 2.0393483638763428 -0.03810732066631317 -0.2839455306529999 -0.999847412109375 -0.0157170332968235 -0.0 0.029282838106155396 0.38067108392715454 0 1.0 0 0.0 0 0.0 0 0.0 2.0393850803375244 -0.04037673771381378 0.21605446934700012 -0.999847412109375 -0.016449477523565292 -0.0 0.4234984517097473 0.22332197427749634 0 1.0 0 0.0 0 0.0 0 0.0 2.0393483638763428 -0.03810732066631317 0.21605446934700012 -0.999847412109375 -0.0157170332968235 -0.0 0.423676073551178 0.22511571645736694 0 1.0 0 0.0 0 0.0 0 0.0 0.49407219886779785 -0.0935315415263176 -0.2839455306529999 -0.9301736354827881 0.3670461177825928 -0.0 0.9473705291748047 0.4626959562301636 0 1.0 0 0.0 0 0.0 0 0.0 0.49308228492736816 -0.09576690196990967 0.21605446934700012 -0.8967863917350769 0.4424268305301666 -0.0 0.5330564379692078 0.30196136236190796 0 1.0 0 0.0 0 0.0 0 0.0 0.49407219886779785 -0.0935315415263176 0.21605446934700012 -0.9301736354827881 0.3670461177825928 -0.0 0.533640444278717 0.3045228123664856 0 1.0 0 0.0 0 0.0 0 0.0 1.4624125957489014 -0.19005325436592102 -0.2839455306529999 0.12463758885860443 -0.9921872615814209 -0.0 0.9669144153594971 0.3717842102050781 0 1.0 0 0.0 0 0.0 0 0.0 1.4743726253509521 -0.18826544284820557 0.21605445444583893 0.17285683751106262 -0.9849238395690918 -0.0 0.5247240662574768 0.21285516023635864 0 1.0 0 0.0 0 0.0 0 0.0 1.4624125957489014 -0.19005325436592102 0.21605445444583893 0.12463758885860443 -0.9921872615814209 -0.0 0.5153047442436218 0.20966774225234985 0 1.0 0 0.0 0 0.0 0 0.0 -1.0665497779846191 0.19319984316825867 -0.2839455306529999 0.21765801310539246 0.9760124683380127 -0.0 1.0247381925582886 0.8160241842269897 0 1.0 0 0.0 0 0.0 0 0.0 -1.076357126235962 0.1949998140335083 0.21605448424816132 0.143803209066391 0.9895932078361511 -0.0 0.5394721627235413 0.6224310398101807 0 1.0 0 0.0 0 0.0 0 0.0 -1.0665497779846191 0.19319984316825867 0.21605448424816132 0.21765801310539246 0.9760124683380127 -0.0 0.544721782207489 0.6214948892593384 0 1.0 0 0.0 0 0.0 0 0.0 -1.529197096824646 0.03296072781085968 -0.2839455306529999 -0.20114749670028687 0.9795526266098022 -0.0 0.07049843668937683 0.6584956645965576 0 1.0 0 0.0 0 0.0 0 0.0 -1.5372202396392822 0.031256839632987976 0.21605446934700012 -0.2148197889328003 0.9766228199005127 -0.0 0.5032224059104919 0.46460527181625366 0 1.0 0 0.0 0 0.0 0 0.0 -1.529197096824646 0.03296072781085968 0.21605446934700012 -0.20114749670028687 0.9795526266098022 -0.0 0.5080614686012268 0.46713006496429443 0 1.0 0 0.0 0 0.0 0 0.0 1.3759682178497314 -0.1889270544052124 -0.2839455306529999 -0.15546128153800964 -0.9878231287002563 -0.0 0.013795018196105957 0.3750600218772888 0 1.0 0 0.0 0 0.0 0 0.0 1.3870952129364014 -0.19042539596557617 0.21605445444583893 -0.11279641091823578 -0.9935911297798157 -0.0 0.45375072956085205 0.211337149143219 0 1.0 0 0.0 0 0.0 0 0.0 1.3759682178497314 -0.1889270544052124 0.21605445444583893 -0.15546128153800964 -0.9878231287002563 -0.0 0.44515177607536316 0.21470582485198975 0 1.0 0 0.0 0 0.0 0 0.0 -1.1291812658309937 0.19336402416229248 -0.2839455306529999 -0.19467757642269135 0.9808648824691772 -0.0 0.07971975207328796 0.8078523278236389 0 1.0 0 0.0 0 0.0 0 0.0 -1.139365553855896 0.19097179174423218 0.21605448424816132 -0.2634052634239197 0.964659571647644 -0.0 0.5064813494682312 0.6138845086097717 0 1.0 0 0.0 0 0.0 0 0.0 -1.1291812658309937 0.19336402416229248 0.21605448424816132 -0.19467757642269135 0.9808648824691772 -0.0 0.5117258429527283 0.6169023513793945 0 1.0 0 0.0 0 0.0 0 0.0 0.2530405521392822 -0.09483286738395691 -0.2839455306529999 -0.9342631101608276 -0.3565477430820465 -0.0 0.0786128044128418 0.4715557098388672 0 1.0 0 0.0 0 0.0 0 0.0 0.2563815116882324 -0.10288161039352417 0.21605446934700012 -0.9118015170097351 -0.41059601306915283 -0.0 0.3792794346809387 0.3292851448059082 0 1.0 0 0.0 0 0.0 0 0.0 0.2530405521392822 -0.09483286738395691 0.21605446934700012 -0.9342631101608276 -0.3565477430820465 -0.0 0.3786012530326843 0.3378404974937439 0 1.0 0 0.0 0 0.0 0 0.0 -1.5372202396392822 0.031256839632987976 -0.2839455306529999 -0.2148197889328003 0.9766228199005127 -0.0 0.07572722434997559 0.6547515392303467 0 1.0 0 0.0 0 0.0 0 0.0 -1.544910192489624 0.02950674295425415 0.21605446934700012 -0.2295602262020111 0.9732657670974731 -0.0 0.4986191391944885 0.46209830045700073 0 1.0 0 0.0 0 0.0 0 0.0 -1.5372202396392822 0.031256839632987976 0.21605446934700012 -0.2148197889328003 0.9766228199005127 -0.0 0.5032224059104919 0.46460527181625366 0 1.0 0 0.0 0 0.0 0 0.0 2.1288363933563232 -0.04494717717170715 -0.2839455306529999 1.0 0.00015259254723787308 -0.0 0.9813289642333984 0.3696032762527466 0 1.0 0 0.0 0 0.0 0 0.0 2.1288912296295166 -0.03869353234767914 0.21605446934700012 0.99981689453125 -0.018677327781915665 -0.0 0.493741512298584 0.2108408808708191 0 1.0 0 0.0 0 0.0 0 0.0 2.1288363933563232 -0.04494717717170715 0.21605446934700012 0.999969482421875 0.00015259254723787308 -0.0 0.49364396929740906 0.20586365461349487 0 1.0 0 0.0 0 0.0 0 0.0 2.0393850803375244 -0.04037673771381378 -0.2839455306529999 -0.999847412109375 -0.016449477523565292 -0.0 0.029208064079284668 0.3788679838180542 0 1.0 0 0.0 0 0.0 0 0.0 2.039426565170288 -0.042855337262153625 0.21605446934700012 -0.999847412109375 -0.016968291252851486 -0.0 0.42330440878868103 0.22137945890426636 0 1.0 0 0.0 0 0.0 0 0.0 2.0393850803375244 -0.04037673771381378 0.21605446934700012 -0.999847412109375 -0.016449477523565292 -0.0 0.4234984517097473 0.22332197427749634 0 1.0 0 0.0 0 0.0 0 0.0 1.449883222579956 -0.19133025407791138 -0.2839455306529999 0.0798974558711052 -0.9967955350875854 -0.0 0.9737119674682617 0.37050437927246094 0 1.0 0 0.0 0 0.0 0 0.0 1.4624125957489014 -0.19005325436592102 0.21605445444583893 0.12463758885860443 -0.9921872615814209 -0.0 0.5153047442436218 0.20966774225234985 0 1.0 0 0.0 0 0.0 0 0.0 1.449883222579956 -0.19133025407791138 0.21605445444583893 0.0798974558711052 -0.9967955350875854 -0.0 0.5051661133766174 0.2073853611946106 0 1.0 0 0.0 0 0.0 0 0.0 -1.0569759607315063 0.1906799077987671 -0.2839455306529999 0.29132968187332153 0.9566026926040649 -0.0 1.016127586364746 0.8137865662574768 0 1.0 0 0.0 0 0.0 0 0.0 -1.0665497779846191 0.19319984316825867 0.21605448424816132 0.21765801310539246 0.9760124683380127 -0.0 0.544721782207489 0.6214948892593384 0 1.0 0 0.0 0 0.0 0 0.0 -1.0569759607315063 0.1906799077987671 0.21605448424816132 0.29132968187332153 0.9566026926040649 -0.0 0.5498804450035095 0.6198821067810059 0 1.0 0 0.0 0 0.0 0 0.0 -1.544910192489624 0.02950674295425415 -0.2839455306529999 -0.2295602262020111 0.9732657670974731 -0.0 0.08061960339546204 0.6509283781051636 0 1.0 0 0.0 0 0.0 0 0.0 -1.5522669553756714 0.027710437774658203 0.21605446934700012 -0.2454603761434555 0.9693899154663086 -0.0 0.49425211548805237 0.459608793258667 0 1.0 0 0.0 0 0.0 0 0.0 -1.544910192489624 0.02950674295425415 0.21605446934700012 -0.2295602262020111 0.9732657670974731 -0.0 0.4986191391944885 0.46209830045700073 0 1.0 0 0.0 0 0.0 0 0.0 0.3631577491760254 -0.09805455803871155 -0.2839455306529999 0.7530442476272583 0.6579485535621643 -0.0 0.02386653423309326 0.46089035272598267 0 1.0 0 0.0 0 0.0 0 0.0 0.360576868057251 -0.09490098059177399 0.21605446934700012 0.7935422658920288 0.6084780693054199 -0.0 0.4385274052619934 0.30631446838378906 0 1.0 0 0.0 0 0.0 0 0.0 0.3631577491760254 -0.09805455803871155 0.21605446934700012 0.7530442476272583 0.6579485535621643 -0.0 0.44005027413368225 0.30239778757095337 0 1.0 0 0.0 0 0.0 0 0.0 1.3870952129364014 -0.19042539596557617 -0.2839455306529999 -0.11279641091823578 -0.9935911297798157 -0.0 0.007834404706954956 0.3730197548866272 0 1.0 0 0.0 0 0.0 0 0.0 1.3986623287200928 -0.1914956420660019 0.21605445444583893 -0.07275612652301788 -0.9973449110984802 -0.0 0.4629644751548767 0.20870304107666016 0 1.0 0 0.0 0 0.0 0 0.0 1.3870952129364014 -0.19042539596557617 0.21605445444583893 -0.11279641091823578 -0.9935911297798157 -0.0 0.45375072956085205 0.211337149143219 0 1.0 0 0.0 0 0.0 0 0.0 -1.139365553855896 0.19097179174423218 -0.2839455306529999 -0.2634052634239197 0.964659571647644 -0.0 0.08766904473304749 0.8031498789787292 0 1.0 0 0.0 0 0.0 0 0.0 -1.1492239236831665 0.18789604306221008 0.21605448424816132 -0.3325602114200592 0.9430524706840515 -0.0 0.5014384388923645 0.6102650165557861 0 1.0 0 0.0 0 0.0 0 0.0 -1.139365553855896 0.19097179174423218 0.21605448424816132 -0.2634052634239197 0.964659571647644 -0.0 0.5064813494682312 0.6138845086097717 0 1.0 0 0.0 0 0.0 0 0.0 2.039426565170288 -0.042855337262153625 -0.2839455306529999 -0.999847412109375 -0.016968291252851486 -0.0 0.029126018285751343 0.37691545486450195 0 1.0 0 0.0 0 0.0 0 0.0 2.039472818374634 -0.0455431193113327 0.21605446934700012 -0.999847412109375 -0.01739555038511753 -0.0 0.42309364676475525 0.21929270029067993 0 1.0 0 0.0 0 0.0 0 0.0 2.039426565170288 -0.042855337262153625 0.21605446934700012 -0.999847412109375 -0.016968291252851486 -0.0 0.42330440878868103 0.22137945890426636 0 1.0 0 0.0 0 0.0 0 0.0 0.49308228492736816 -0.09576690196990967 -0.2839455306529999 -0.8967863917350769 0.4424268305301666 -0.0 0.9480316638946533 0.4602993130683899 0 1.0 0 0.0 0 0.0 0 0.0 0.4919123649597168 -0.0979098305106163 0.21605446934700012 -0.8572039008140564 0.5149388313293457 -0.0 0.5323424339294434 0.2994800806045532 0 1.0 0 0.0 0 0.0 0 0.0 0.49308228492736816 -0.09576690196990967 0.21605446934700012 -0.8967863917350769 0.4424268305301666 -0.0 0.5330564379692078 0.30196136236190796 0 1.0 0 0.0 0 0.0 0 0.0 -1.5522669553756714 0.027710437774658203 -0.2839455306529999 -0.2454603761434555 0.9693899154663086 -0.0 0.08518248796463013 0.6470544338226318 0 1.0 0 0.0 0 0.0 0 0.0 -1.5592904090881348 0.02586790919303894 0.21605446934700012 -0.2627033293247223 0.964842677116394 -0.0 0.4901202917098999 0.4571353793144226 0 1.0 0 0.0 0 0.0 0 0.0 -1.5522669553756714 0.027710437774658203 0.21605446934700012 -0.2454603761434555 0.9693899154663086 -0.0 0.49425211548805237 0.459608793258667 0 1.0 0 0.0 0 0.0 0 0.0 0.4919123649597168 -0.0979098305106163 -0.2839455306529999 -0.8572039008140564 0.5149693489074707 -0.0 0.9487879276275635 0.45800888538360596 0 1.0 0 0.0 0 0.0 0 0.0 0.49056243896484375 -0.0999603271484375 0.21605446934700012 -0.8122806549072266 0.5832392573356628 -0.0 0.5314965844154358 0.2970784902572632 0 1.0 0 0.0 0 0.0 0 0.0 0.4919123649597168 -0.0979098305106163 0.21605446934700012 -0.8572039008140564 0.5149388313293457 -0.0 0.5323424339294434 0.2994800806045532 0 1.0 0 0.0 0 0.0 0 0.0 1.4367849826812744 -0.19209645688533783 -0.2839455306529999 0.038544878363609314 -0.999237060546875 -0.0 0.9808444976806641 0.36983776092529297 0 1.0 0 0.0 0 0.0 0 0.0 1.449883222579956 -0.19133025407791138 0.21605445444583893 0.0798974558711052 -0.9967955350875854 -0.0 0.5051661133766174 0.2073853611946106 0 1.0 0 0.0 0 0.0 0 0.0 1.4367849826812744 -0.19209645688533783 0.21605445444583893 0.038544878363609314 -0.999237060546875 -0.0 0.49437573552131653 0.20612168312072754 0 1.0 0 0.0 0 0.0 0 0.0 -1.047635555267334 0.18743997812271118 -0.2839455306529999 0.3634754419326782 0.9315775036811829 -0.0 1.0078847408294678 0.810584545135498 0 1.0 0 0.0 0 0.0 0 0.0 -1.0569759607315063 0.1906799077987671 0.21605448424816132 0.29132968187332153 0.9566026926040649 -0.0 0.5498804450035095 0.6198821067810059 0 1.0 0 0.0 0 0.0 0 0.0 -1.047635555267334 0.18743997812271118 0.21605448424816132 0.3634754419326782 0.9315775036811829 -0.0 0.5549494028091431 0.6175920963287354 0 1.0 0 0.0 0 0.0 0 0.0 -1.5592904090881348 0.02586790919303894 -0.2839455306529999 -0.2627033293247223 0.964842677116394 -0.0 0.08942463994026184 0.6431540250778198 0 1.0 0 0.0 0 0.0 0 0.0 -1.5659806728363037 0.023979172110557556 0.21605446934700012 -0.28144168853759766 0.9595629572868347 -0.0 0.4862211048603058 0.45467615127563477 0 1.0 0 0.0 0 0.0 0 0.0 -1.5592904090881348 0.02586790919303894 0.21605446934700012 -0.2627033293247223 0.964842677116394 -0.0 0.4901202917098999 0.4571353793144226 0 1.0 0 0.0 0 0.0 0 0.0 2.128896474838257 -0.05154623091220856 -0.2839455306529999 0.99993896484375 0.009094515815377235 -0.0 0.9814033508300781 0.3644845485687256 0 1.0 0 0.0 0 0.0 0 0.0 2.1288363933563232 -0.04494717717170715 0.21605446934700012 0.999969482421875 0.00015259254723787308 -0.0 0.49364396929740906 0.20586365461349487 0 1.0 0 0.0 0 0.0 0 0.0 2.128896474838257 -0.05154623091220856 0.21605446934700012 0.99993896484375 0.009094515815377235 -0.0 0.4936378598213196 0.20074313879013062 0 1.0 0 0.0 0 0.0 0 0.0 1.3986623287200928 -0.1914956420660019 -0.2839455306529999 -0.07275612652301788 -0.9973449110984802 -0.0 1.0015931129455566 0.37144917249679565 0 1.0 0 0.0 0 0.0 0 0.0 1.4106695652008057 -0.19213779270648956 0.21605445444583893 -0.035279396921396255 -0.999359130859375 -0.0 1.4727486371994019 0.20689111948013306 0 1.0 0 0.0 0 0.0 0 0.0 1.3986623287200928 -0.1914956420660019 0.21605445444583893 -0.07275612652301788 -0.9973449110984802 -0.0 1.4629645347595215 0.20870304107666016 0 1.0 0 0.0 0 0.0 0 0.0 -1.1492239236831665 0.18789604306221008 -0.2839455306529999 -0.3325602114200592 0.9430524706840515 -0.0 0.09493982791900635 0.7976773977279663 0 1.0 0 0.0 0 0.0 0 0.0 -1.1587563753128052 0.18413680791854858 0.21605448424816132 -0.40098270773887634 0.9160435795783997 -0.0 0.49659207463264465 0.6060476303100586 0 1.0 0 0.0 0 0.0 0 0.0 -1.1492239236831665 0.18789604306221008 0.21605448424816132 -0.3325602114200592 0.9430524706840515 -0.0 0.5014384388923645 0.6102650165557861 0 1.0 0 0.0 0 0.0 0 0.0 2.039472818374634 -0.0455431193113327 -0.2839455306529999 -0.999847412109375 -0.01739555038511753 -0.0 0.029036760330200195 0.3748179078102112 0 1.0 0 0.0 0 0.0 0 0.0 2.0395238399505615 -0.04844008386135101 0.21605446934700012 -0.99981689453125 -0.017761772498488426 -0.0 0.4228658974170685 0.21706622838974 0 1.0 0 0.0 0 0.0 0 0.0 2.039472818374634 -0.0455431193113327 0.21605446934700012 -0.999847412109375 -0.01739555038511753 -0.0 0.42309364676475525 0.21929270029067993 0 1.0 0 0.0 0 0.0 0 0.0 -1.5659806728363037 0.023979172110557556 -0.2839455306529999 -0.28144168853759766 0.9595629572868347 -0.0 0.09335640072822571 0.6392477750778198 0 1.0 0 0.0 0 0.0 0 0.0 -1.5723377466201782 0.022044211626052856 0.21605446934700012 -0.3018280565738678 0.9533371925354004 -0.0 0.4825509786605835 0.452228307723999 0 1.0 0 0.0 0 0.0 0 0.0 -1.5659806728363037 0.023979172110557556 0.21605446934700012 -0.28144168853759766 0.9595629572868347 -0.0 0.4862211048603058 0.45467615127563477 0 1.0 0 0.0 0 0.0 0 0.0 0.3659186363220215 -0.10101598501205444 -0.2839455306529999 0.7088534235954285 0.7053132653236389 -0.0 0.022247523069381714 0.4575845003128052 0 1.0 0 0.0 0 0.0 0 0.0 0.3631577491760254 -0.09805455803871155 0.21605446934700012 0.7530442476272583 0.6579485535621643 -0.0 0.44005027413368225 0.30239778757095337 0 1.0 0 0.0 0 0.0 0 0.0 0.3659186363220215 -0.10101598501205444 0.21605446934700012 0.7088534235954285 0.7053132653236389 -0.0 0.44172874093055725 0.29867643117904663 0 1.0 0 0.0 0 0.0 0 0.0 1.4106695652008057 -0.19213779270648956 -0.2839455306529999 -0.035279396921396255 -0.999359130859375 -0.0 0.9950774908065796 0.37037354707717896 0 1.0 0 0.0 0 0.0 0 0.0 1.4231173992156982 -0.19235184788703918 0.21605445444583893 0.0007324442267417908 -0.999969482421875 -0.0 1.4830350875854492 0.20598739385604858 0 1.0 0 0.0 0 0.0 0 0.0 1.4106695652008057 -0.19213779270648956 0.21605445444583893 -0.035279396921396255 -0.999359130859375 -0.0 1.4727486371994019 0.20689111948013306 0 1.0 0 0.0 0 0.0 0 0.0 2.0395238399505615 -0.04844008386135101 -0.2839455306529999 -0.99981689453125 -0.017761772498488426 -0.0 0.028940409421920776 0.3725799322128296 0 1.0 0 0.0 0 0.0 0 0.0 2.0395796298980713 -0.05154623091220856 0.21605446934700012 -0.99981689453125 -0.017944883555173874 -0.0 0.4226208031177521 0.214705228805542 0 1.0 0 0.0 0 0.0 0 0.0 2.0395238399505615 -0.04844008386135101 0.21605446934700012 -0.99981689453125 -0.017761772498488426 -0.0 0.4228658974170685 0.21706622838974 0 1.0 0 0.0 0 0.0 0 0.0 0.49056243896484375 -0.0999603271484375 -0.2839455306529999 -0.8122806549072266 0.5832392573356628 -0.0 0.9496395587921143 0.45582300424575806 0 1.0 0 0.0 0 0.0 0 0.0 0.489032506942749 -0.10191839188337326 0.21605446934700012 -0.7631763815879822 0.6461684107780457 -0.0 0.5305171012878418 0.29475659132003784 0 1.0 0 0.0 0 0.0 0 0.0 0.49056243896484375 -0.0999603271484375 0.21605446934700012 -0.8122806549072266 0.5832392573356628 -0.0 0.5314965844154358 0.2970784902572632 0 1.0 0 0.0 0 0.0 0 0.0 1.4231173992156982 -0.19235184788703918 -0.2839455306529999 0.0007324442267417908 -0.999969482421875 -0.0 0.9882978200912476 0.3698185086250305 0 1.0 0 0.0 0 0.0 0 0.0 1.4367849826812744 -0.19209645688533783 0.21605445444583893 0.038544878363609314 -0.999237060546875 -0.0 0.49437573552131653 0.20612168312072754 0 1.0 0 0.0 0 0.0 0 0.0 1.4231173992156982 -0.19235184788703918 0.21605445444583893 0.0007324442267417908 -0.999969482421875 -0.0 1.4830350875854492 0.20598739385604858 0 1.0 0 0.0 0 0.0 0 0.0 -1.0385286808013916 0.18348005414009094 -0.2839455306529999 0.43293556571006775 0.9013947248458862 -0.0 1.0000649690628052 0.8064477443695068 0 1.0 0 0.0 0 0.0 0 0.0 -1.047635555267334 0.18743997812271118 0.21605448424816132 0.3634754419326782 0.9315775036811829 -0.0 0.5549494028091431 0.6175920963287354 0 1.0 0 0.0 0 0.0 0 0.0 -1.0385286808013916 0.18348005414009094 0.21605448424816132 0.43293556571006775 0.9013947248458862 -0.0 0.5599304437637329 0.6146221160888672 0 1.0 0 0.0 0 0.0 0 0.0 -1.5723377466201782 0.022044211626052856 -0.2839455306529999 -0.3018280565738678 0.9533371925354004 -0.0 0.09698906540870667 0.6353528499603271 0 1.0 0 0.0 0 0.0 0 0.0 -1.5783613920211792 0.020063042640686035 0.21605446934700012 -0.3240455389022827 0.9460127353668213 -0.0 0.47910571098327637 0.44978851079940796 0 1.0 0 0.0 0 0.0 0 0.0 -1.5723377466201782 0.022044211626052856 0.21605446934700012 -0.3018280565738678 0.9533371925354004 -0.0 0.4825509786605835 0.452228307723999 0 1.0 0 0.0 0 0.0 0 0.0 2.0395796298980713 -0.05154623091220856 -0.2839455306529999 0.0 -1.0 -0.0 1.0288370847702026 0.3702065348625183 0 1.0 0 0.0 0 0.0 0 0.0 2.128896474838257 -0.05154623091220856 0.21605446934700012 0.0 -1.0 -0.0 0.4936378598213196 0.20074313879013062 0 1.0 0 0.0 0 0.0 0 0.0 2.0395796298980713 -0.05154623091220856 0.21605446934700012 0.0 -1.0 -0.0 1.4226207733154297 0.214705228805542 0 1.0 0 0.0 0 0.0 0 0.0 1.0224170684814453 0.19643977284431458 -0.2839455306529999 -0.0009460737928748131 0.999969482421875 -0.0 0.9840543270111084 0.7939989566802979 0 1.0 0 0.0 0 0.0 0 0.0 1.0102767944335938 0.19607609510421753 0.21605448424816132 -0.06106753647327423 0.9981078505516052 -0.0 1.4810051918029785 0.630024254322052 0 1.0 0 0.0 0 0.0 0 0.0 1.0224170684814453 0.19643977284431458 0.21605448424816132 -0.0009460737928748131 0.999969482421875 -0.0 1.4876281023025513 0.6301566958427429 0 1.0 0 0.0 0 0.0 0 0.0 -1.1587563753128052 0.18413680791854858 -0.2839455306529999 -0.40098270773887634 0.9160435795783997 -0.0 0.10153970122337341 0.7914900183677673 0 1.0 0 0.0 0 0.0 0 0.0 -1.167962908744812 0.1796940565109253 0.21605448424816132 -0.4675740897655487 0.8839381337165833 -0.0 0.4919360876083374 0.6012330055236816 0 1.0 0 0.0 0 0.0 0 0.0 -1.1587563753128052 0.18413680791854858 0.21605448424816132 -0.40098270773887634 0.9160435795783997 -0.0 0.49659207463264465 0.6060476303100586 0 1.0 0 0.0 0 0.0 0 0.0 2.0395796298980713 -0.08552171289920807 -0.2839455306529999 -1.0 0.0 -0.0 0.02804046869277954 0.3460407257080078 0 1.0 0 0.0 0 0.0 0 0.0 2.0395796298980713 -0.18394553661346436 0.21605445444583893 -1.0 0.0 -0.0 0.40843620896339417 0.13705360889434814 0 1.0 0 0.0 0 0.0 0 0.0 2.0395796298980713 -0.08552171289920807 0.21605446934700012 -1.0 0.0 -0.0 0.4193791449069977 0.19080489873886108 0 1.0 0 0.0 0 0.0 0 0.0 -1.5783613920211792 0.020063042640686035 -0.2839455306529999 -0.3240455389022827 0.9460127353668213 -0.0 0.10033413767814636 0.6314833760261536 0 1.0 0 0.0 0 0.0 0 0.0 -1.5840519666671753 0.0180356502532959 0.21605446934700012 -0.3483077585697174 0.9373760223388672 -0.0 0.47588011622428894 0.4473530650138855 0 1.0 0 0.0 0 0.0 0 0.0 -1.5783613920211792 0.020063042640686035 0.21605446934700012 -0.3240455389022827 0.9460127353668213 -0.0 0.47910571098327637 0.44978851079940796 0 1.0 0 0.0 0 0.0 0 0.0 0.5876777172088623 -0.10778042674064636 -0.2839455306529999 0.9302957057952881 -0.3667409420013428 -0.0 0.9014818072319031 0.4516541361808777 0 1.0 0 0.0 0 0.0 0 0.0 0.590348482131958 -0.10015491396188736 0.21605446934700012 0.9558396935462952 -0.2937711775302887 -0.0 0.5895298719406128 0.32216984033584595 0 1.0 0 0.0 0 0.0 0 0.0 0.5876777172088623 -0.10778042674064636 0.21605446934700012 0.9302957057952881 -0.3667409420013428 -0.0 0.5888727307319641 0.314247190952301 0 1.0 0 0.0 0 0.0 0 0.0 1.0360093116760254 0.19605910778045654 -0.2839455306529999 0.05740531533956528 0.9983214735984802 -0.0 0.9728249311447144 0.7929335236549377 0 1.0 0 0.0 0 0.0 0 0.0 1.0224170684814453 0.19643977284431458 0.21605448424816132 -0.0009460737928748131 0.999969482421875 -0.0 0.48762810230255127 0.6301566958427429 0 1.0 0 0.0 0 0.0 0 0.0 1.0360093116760254 0.19605910778045654 0.21605448424816132 0.05740531533956528 0.9983214735984802 -0.0 0.49503153562545776 0.6294469833374023 0 1.0 0 0.0 0 0.0 0 0.0 2.1380035877227783 -0.08552171289920807 -0.2839455306529999 0.0 0.999969482421875 -0.0 0.9771514534950256 0.34017306566238403 0 1.0 0 0.0 0 0.0 0 0.0 2.0395796298980713 -0.08552171289920807 0.21605446934700012 0.0 0.999969482421875 -0.0 1.4193791151046753 0.19080489873886108 0 1.0 0 0.0 0 0.0 0 0.0 2.1380035877227783 -0.08552171289920807 0.21605446934700012 0.0 1.0 -0.0 0.5012896656990051 0.17674368619918823 0 1.0 0 0.0 0 0.0 0 0.0 1.0102767944335938 0.19607609510421753 -0.2839455306529999 -0.06106753647327423 0.9981078505516052 -0.0 0.9941284656524658 0.7937484979629517 0 1.0 0 0.0 0 0.0 0 0.0 0.9984920024871826 0.19498518109321594 0.21605448424816132 -0.12469863146543503 0.9921872615814209 -0.0 1.4745757579803467 0.6291228532791138 0 1.0 0 0.0 0 0.0 0 0.0 1.0102767944335938 0.19607609510421753 0.21605448424816132 -0.06106753647327423 0.9981078505516052 -0.0 1.4810051918029785 0.630024254322052 0 1.0 0 0.0 0 0.0 0 0.0 -1.0296553373336792 0.17880016565322876 -0.2839455306529999 0.4985809028148651 0.8668172359466553 -0.0 0.9927076101303101 0.8014048933982849 0 1.0 0 0.0 0 0.0 0 0.0 -1.0385286808013916 0.18348005414009094 0.21605448424816132 0.43293556571006775 0.9013947248458862 -0.0 0.5599304437637329 0.6146221160888672 0 1.0 0 0.0 0 0.0 0 0.0 -1.0296553373336792 0.17880016565322876 0.21605448424816132 0.4985809028148651 0.8668172359466553 -0.0 0.5648260116577148 0.610966145992279 0 1.0 0 0.0 0 0.0 0 0.0 -1.5840519666671753 0.0180356502532959 -0.2839455306529999 -0.3483077585697174 0.9373760223388672 -0.0 0.10340362787246704 0.6276503801345825 0 1.0 0 0.0 0 0.0 0 0.0 -1.589409351348877 0.01596204936504364 0.21605446934700012 -0.3748893737792969 0.9270607829093933 -0.0 0.47286897897720337 0.4449179768562317 0 1.0 0 0.0 0 0.0 0 0.0 -1.5840519666671753 0.0180356502532959 0.21605446934700012 -0.3483077585697174 0.9373760223388672 -0.0 0.47588011622428894 0.4473530650138855 0 1.0 0 0.0 0 0.0 0 0.0 2.0395796298980713 -0.18394553661346436 -0.2839455306529999 0.0 -0.999969482421875 -0.0 1.0259606838226318 0.29135721921920776 0 1.0 0 0.0 0 0.0 0 0.0 2.1380035877227783 -0.18394553661346436 0.21605445444583893 0.0 -0.999969482421875 -0.0 0.5014961957931519 0.1221572756767273 0 1.0 0 0.0 0 0.0 0 0.0 2.0395796298980713 -0.18394553661346436 0.21605445444583893 0.0 -1.0 -0.0 1.4084361791610718 0.13705360889434814 0 1.0 0 0.0 0 0.0 0 0.0 0.36885952949523926 -0.10378524661064148 -0.2839455306529999 0.6615497469902039 0.7498703002929688 -0.0 0.020532160997390747 0.45448750257492065 0 1.0 0 0.0 0 0.0 0 0.0 0.3659186363220215 -0.10101598501205444 0.21605446934700012 0.7088534235954285 0.7053132653236389 -0.0 0.44172874093055725 0.29867643117904663 0 1.0 0 0.0 0 0.0 0 0.0 0.36885952949523926 -0.10378524661064148 0.21605446934700012 0.6615497469902039 0.7498703002929688 -0.0 0.4435656666755676 0.2951509952545166 0 1.0 0 0.0 0 0.0 0 0.0 -1.167962908744812 0.1796940565109253 -0.2839455306529999 -0.4675740897655487 0.8839381337165833 -0.0 0.10748907923698425 0.7846333980560303 0 1.0 0 0.0 0 0.0 0 0.0 -1.176843523979187 0.1745678186416626 0.21605448424816132 -0.5312051773071289 0.8472243547439575 -0.0 0.4874635338783264 0.595818281173706 0 1.0 0 0.0 0 0.0 0 0.0 -1.167962908744812 0.1796940565109253 0.21605448424816132 -0.4675740897655487 0.8839381337165833 -0.0 0.4919360876083374 0.6012330055236816 0 1.0 0 0.0 0 0.0 0 0.0 2.1380035877227783 -0.18394553661346436 -0.2839455306529999 1.0 0.0 -0.0 0.9788987040519714 0.285663366317749 0 1.0 0 0.0 0 0.0 0 0.0 2.1380035877227783 -0.08552171289920807 0.21605446934700012 1.0 0.0 -0.0 0.5012896656990051 0.17674368619918823 0 1.0 0 0.0 0 0.0 0 0.0 2.1380035877227783 -0.18394553661346436 0.21605445444583893 1.0 0.0 -0.0 0.5014961957931519 0.1221572756767273 0 1.0 0 0.0 0 0.0 0 0.0 0.489032506942749 -0.10191839188337326 -0.2839455306529999 -0.7631763815879822 0.6461684107780457 -0.0 0.9505868554115295 0.4537402391433716 0 1.0 0 0.0 0 0.0 0 0.0 0.4873225688934326 -0.10378402471542358 0.21605446934700012 -0.7112033367156982 0.7029633522033691 -0.0 0.5294021368026733 0.29251474142074585 0 1.0 0 0.0 0 0.0 0 0.0 0.489032506942749 -0.10191839188337326 0.21605446934700012 -0.7631763815879822 0.6461684107780457 -0.0 0.5305171012878418 0.29475659132003784 0 1.0 0 0.0 0 0.0 0 0.0 -1.589409351348877 0.01596204936504364 -0.2839455306529999 -0.3748893737792969 0.9270607829093933 -0.0 0.10620921850204468 0.6238624453544617 0 1.0 0 0.0 0 0.0 0 0.0 -1.5944334268569946 0.013842225074768066 0.21605446934700012 -0.4040345549583435 0.9147312641143799 -0.0 0.4700668454170227 0.4424787759780884 0 1.0 0 0.0 0 0.0 0 0.0 -1.589409351348877 0.01596204936504364 0.21605446934700012 -0.3748893737792969 0.9270607829093933 -0.0 0.47286897897720337 0.4449179768562317 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.3193819522857666 -0.2839455306529999 -0.5027008652687073 0.8644368052482605 -0.0 0.9526037573814392 0.9118335843086243 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.2619388997554779 0.2160544991493225 -0.5027008652687073 0.8644368052482605 -0.0 0.45288121700286865 0.7265979051589966 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.3193819522857666 0.21605446934700012 -0.5027008652687073 0.8644368052482605 -0.0 0.4990980625152588 0.7493226528167725 0 1.0 0 0.0 0 0.0 0 0.0 1.0491149425506592 0.19491711258888245 -0.2839455306529999 0.11801507323980331 0.9929807186126709 -0.0 0.9621782302856445 0.7905840873718262 0 1.0 0 0.0 0 0.0 0 0.0 1.0360093116760254 0.19605910778045654 0.21605448424816132 0.05740531533956528 0.9983214735984802 -0.0 0.49503153562545776 0.6294469833374023 0 1.0 0 0.0 0 0.0 0 0.0 1.0491149425506592 0.19491711258888245 0.21605448424816132 0.11801507323980331 0.9929807186126709 -0.0 0.5021440386772156 0.627916157245636 0 1.0 0 0.0 0 0.0 0 0.0 0.2563815116882324 -0.10288161039352417 -0.2839455306529999 -0.9118015170097351 -0.41059601306915283 -0.0 0.07672294974327087 0.46378159523010254 0 1.0 0 0.0 0 0.0 0 0.0 0.2601480484008789 -0.11062387377023697 0.21605446934700012 -0.8855555653572083 -0.46449172496795654 -0.0 0.3802019953727722 0.3209127187728882 0 1.0 0 0.0 0 0.0 0 0.0 0.2563815116882324 -0.10288161039352417 0.21605446934700012 -0.9118015170097351 -0.41059601306915283 -0.0 0.3792794346809387 0.3292851448059082 0 1.0 0 0.0 0 0.0 0 0.0 0.9984920024871826 0.19498518109321594 -0.2839455306529999 -0.12469863146543503 0.9921872615814209 -0.0 0.0038418173789978027 0.7923401594161987 0 1.0 0 0.0 0 0.0 0 0.0 0.9870622158050537 0.19316697120666504 0.21605448424816132 -0.1906491219997406 0.981627881526947 -0.0 0.4683462977409363 0.6274691820144653 0 1.0 0 0.0 0 0.0 0 0.0 0.9984920024871826 0.19498518109321594 0.21605448424816132 -0.12469863146543503 0.9921872615814209 -0.0 0.4745757579803467 0.6291228532791138 0 1.0 0 0.0 0 0.0 0 0.0 -1.0210155248641968 0.17340028285980225 -0.2839455306529999 0.5596179366111755 0.8287301063537598 -0.0 0.9858372211456299 0.7954815626144409 0 1.0 0 0.0 0 0.0 0 0.0 -1.0296553373336792 0.17880016565322876 0.21605448424816132 0.4985809028148651 0.8668172359466553 -0.0 0.5648260116577148 0.610966145992279 0 1.0 0 0.0 0 0.0 0 0.0 -1.0210155248641968 0.17340028285980225 0.21605448424816132 0.5596179366111755 0.8287301063537598 -0.0 0.5696391463279724 0.6066159009933472 0 1.0 0 0.0 0 0.0 0 0.0 -1.5944334268569946 0.013842225074768066 -0.2839455306529999 -0.4040345549583435 0.9147312641143799 -0.0 0.10876205563545227 0.6201258897781372 0 1.0 0 0.0 0 0.0 0 0.0 -1.5991243124008179 0.011676192283630371 0.21605446934700012 -0.4372386932373047 0.8993194103240967 -0.0 0.4674680829048157 0.44003111124038696 0 1.0 0 0.0 0 0.0 0 0.0 -1.5944334268569946 0.013842225074768066 0.21605446934700012 -0.4040345549583435 0.9147312641143799 -0.0 0.4700668454170227 0.4424787759780884 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.18803346157073975 -0.2839455306529999 1.0 0.0 -0.0 0.9619265794754028 0.8576733469963074 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.3193819522857666 0.21605446934700012 1.0 0.0 -0.0 0.4990980625152588 0.7493226528167725 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.18803346157073975 0.21605448424816132 1.0 0.0 -0.0 0.49900293350219727 0.6947826147079468 0 1.0 0 0.0 0 0.0 0 0.0 -1.176843523979187 0.1745678186416626 -0.2839455306529999 -0.5312051773071289 0.8472243547439575 -0.0 0.11281666159629822 0.7771431803703308 0 1.0 0 0.0 0 0.0 0 0.0 -1.1853982210159302 0.1687580645084381 0.21605446934700012 -0.5909909605979919 0.8066347241401672 -0.0 0.48316690325737 0.5897977352142334 0 1.0 0 0.0 0 0.0 0 0.0 -1.176843523979187 0.1745678186416626 0.21605448424816132 -0.5312051773071289 0.8472243547439575 -0.0 0.4874635338783264 0.595818281173706 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.2619388997554779 -0.2839455306529999 -1.0 0.0 -0.0 0.05837661027908325 0.8830084204673767 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.18803346157073975 0.21605448424816132 -1.0 0.0 -0.0 0.45019370317459106 0.6925525665283203 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.2619388997554779 0.2160544991493225 -1.0 0.0 -0.0 0.45288121700286865 0.7265979051589966 0 1.0 0 0.0 0 0.0 0 0.0 0.4873225688934326 -0.10378402471542358 -0.2839455306529999 -0.7112033367156982 0.7029633522033691 -0.0 0.9516303539276123 0.4517591595649719 0 1.0 0 0.0 0 0.0 0 0.0 0.48543262481689453 -0.10555722564458847 0.21605446934700012 -0.6577044129371643 0.7532578706741333 -0.0 0.5281496644020081 0.2903541922569275 0 1.0 0 0.0 0 0.0 0 0.0 0.4873225688934326 -0.10378402471542358 0.21605446934700012 -0.7112033367156982 0.7029633522033691 -0.0 0.5294021368026733 0.29251474142074585 0 1.0 0 0.0 0 0.0 0 0.0 -1.5991243124008179 0.011676192283630371 -0.2839455306529999 -0.4372386932373047 0.8993194103240967 -0.0 0.11107313632965088 0.616445004940033 0 1.0 0 0.0 0 0.0 0 0.0 -1.6035646200180054 0.009406790137290955 0.21605446934700012 -0.4748374819755554 0.8800622820854187 -0.0 0.4650213122367859 0.43750661611557007 0 1.0 0 0.0 0 0.0 0 0.0 -1.5991243124008179 0.011676192283630371 0.21605446934700012 -0.4372386932373047 0.8993194103240967 -0.0 0.4674680829048157 0.44003111124038696 0 1.0 0 0.0 0 0.0 0 0.0 1.0617341995239258 0.19301378726959229 -0.2839455306529999 0.1819208413362503 0.983306348323822 -0.0 0.9522119760513306 0.7870548367500305 0 1.0 0 0.0 0 0.0 0 0.0 1.0491149425506592 0.19491711258888245 0.21605448424816132 0.11801507323980331 0.9929807186126709 -0.0 0.5021440386772156 0.627916157245636 0 1.0 0 0.0 0 0.0 0 0.0 1.0617341995239258 0.19301378726959229 0.21605448424816132 0.1819208413362503 0.983306348323822 -0.0 0.5089559555053711 0.6255924701690674 0 1.0 0 0.0 0 0.0 0 0.0 1.6378281116485596 0.18803346157073975 -0.2839455306529999 -1.0 0.0 -0.0 0.08506765961647034 0.8339129686355591 0 1.0 0 0.0 0 0.0 0 0.0 1.6378281116485596 0.10957461595535278 0.21605446934700012 -1.0 0.0 -0.0 0.42526912689208984 0.6394941806793213 0 1.0 0 0.0 0 0.0 0 0.0 1.6378281116485596 0.18803346157073975 0.21605448424816132 -1.0 0.0 -0.0 0.42952170968055725 0.6872974038124084 0 1.0 0 0.0 0 0.0 0 0.0 0.9870622158050537 0.19316697120666504 -0.2839455306529999 -0.1906491219997406 0.981627881526947 -0.0 0.013106107711791992 0.7898356914520264 0 1.0 0 0.0 0 0.0 0 0.0 0.9759876728057861 0.1906214952468872 0.21605448424816132 -0.25815606117248535 0.9660939574241638 -0.0 0.4623207747936249 0.6250783205032349 0 1.0 0 0.0 0 0.0 0 0.0 0.9870622158050537 0.19316697120666504 0.21605448424816132 -0.1906491219997406 0.981627881526947 -0.0 0.4683462977409363 0.6274691820144653 0 1.0 0 0.0 0 0.0 0 0.0 -1.0126092433929443 0.1672804057598114 -0.2839455306529999 0.6155278086662292 0.7881100177764893 -0.0 0.9794652462005615 0.7886999249458313 0 1.0 0 0.0 0 0.0 0 0.0 -1.0210155248641968 0.17340028285980225 0.21605448424816132 0.5596179366111755 0.8287301063537598 -0.0 0.5696391463279724 0.6066159009933472 0 1.0 0 0.0 0 0.0 0 0.0 -1.0126092433929443 0.1672804057598114 0.21605446934700012 0.6155278086662292 0.7881100177764893 -0.0 0.574373185634613 0.6015603542327881 0 1.0 0 0.0 0 0.0 0 0.0 -1.6035646200180054 0.009406790137290955 -0.2839455306529999 -0.4748374819755554 0.8800622820854187 -0.0 0.11318978667259216 0.6127371788024902 0 1.0 0 0.0 0 0.0 0 0.0 -1.6078370809555054 0.0069768428802490234 0.21605446934700012 -0.5141758322715759 0.8576616644859314 -0.0 0.4626764953136444 0.43484050035476685 0 1.0 0 0.0 0 0.0 0 0.0 -1.6035646200180054 0.009406790137290955 0.21605446934700012 -0.4748374819755554 0.8800622820854187 -0.0 0.4650213122367859 0.43750661611557007 0 1.0 0 0.0 0 0.0 0 0.0 0.3719792366027832 -0.10636235028505325 -0.2839455306529999 0.6100344657897949 0.7923520803451538 -0.0 0.01871994137763977 0.45159727334976196 0 1.0 0 0.0 0 0.0 0 0.0 0.36885952949523926 -0.10378524661064148 0.21605446934700012 0.6615497469902039 0.7498703002929688 -0.0 0.4435656666755676 0.2951509952545166 0 1.0 0 0.0 0 0.0 0 0.0 0.3719792366027832 -0.10636235028505325 0.21605446934700012 0.6100344657897949 0.7923520803451538 -0.0 0.44556304812431335 0.291823148727417 0 1.0 0 0.0 0 0.0 0 0.0 -1.1853982210159302 0.1687580645084381 -0.2839455306529999 -0.5909909605979919 0.8066347241401672 -0.0 0.1175563633441925 0.769045889377594 0 1.0 0 0.0 0 0.0 0 0.0 -1.1936269998550415 0.16226482391357422 0.21605446934700012 -0.6462294459342957 0.7631153464317322 -0.0 0.4790382981300354 0.5831623077392578 0 1.0 0 0.0 0 0.0 0 0.0 -1.1853982210159302 0.1687580645084381 0.21605446934700012 -0.5909909605979919 0.8066347241401672 -0.0 0.48316690325737 0.5897977352142334 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.18803346157073975 -0.2839455306529999 0.0 1.0 -0.0 0.052425503730773926 0.8490404486656189 0 1.0 0 0.0 0 0.0 0 0.0 1.6378281116485596 0.18803346157073975 0.21605448424816132 0.0 1.0 -0.0 0.42952170968055725 0.6872974038124084 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.18803346157073975 0.21605448424816132 0.0 1.0 -0.0 0.45019370317459106 0.6925525665283203 0 1.0 0 0.0 0 0.0 0 0.0 0.48543262481689453 -0.10555722564458847 -0.2839455306529999 -0.6577044129371643 0.7532578706741333 -0.0 0.9527706503868103 0.44987887144088745 0 1.0 0 0.0 0 0.0 0 0.0 0.48336267471313477 -0.10723800212144852 0.21605446934700012 -0.5939817428588867 0.8044679164886475 -0.0 0.5267577171325684 0.28827619552612305 0 1.0 0 0.0 0 0.0 0 0.0 0.48543262481689453 -0.10555722564458847 0.21605446934700012 -0.6577044129371643 0.7532578706741333 -0.0 0.5281496644020081 0.2903541922569275 0 1.0 0 0.0 0 0.0 0 0.0 -1.6078370809555054 0.0069768428802490234 -0.2839455306529999 -0.5141758322715759 0.8576616644859314 -0.0 0.11515578627586365 0.6089204549789429 0 1.0 0 0.0 0 0.0 0 0.0 -1.6119416952133179 0.004386350512504578 0.21605446934700012 -0.5533921122550964 0.8328806161880493 -0.0 0.46043041348457336 0.4320330023765564 0 1.0 0 0.0 0 0.0 0 0.0 -1.6078370809555054 0.0069768428802490234 0.21605446934700012 -0.5141758322715759 0.8576616644859314 -0.0 0.4626764953136444 0.43484050035476685 0 1.0 0 0.0 0 0.0 0 0.0 1.073866844177246 0.19034910202026367 -0.2839455306529999 0.24851222336292267 0.9686269760131836 -0.0 0.9429885149002075 0.7824501991271973 0 1.0 0 0.0 0 0.0 0 0.0 1.0617341995239258 0.19301378726959229 0.21605448424816132 0.1819208413362503 0.983306348323822 -0.0 0.5089559555053711 0.6255924701690674 0 1.0 0 0.0 0 0.0 0 0.0 1.073866844177246 0.19034910202026367 0.21605448424816132 0.24851222336292267 0.9686269760131836 -0.0 0.5154626369476318 0.6225020289421082 0 1.0 0 0.0 0 0.0 0 0.0 0.9759876728057861 0.1906214952468872 -0.2839455306529999 -0.25815606117248535 0.9660939574241638 -0.0 0.02185356616973877 0.7862992882728577 0 1.0 0 0.0 0 0.0 0 0.0 0.9652681350708008 0.18734872341156006 0.21605448424816132 -0.3262123465538025 0.9452803134918213 -0.0 0.4565003216266632 0.6219629049301147 0 1.0 0 0.0 0 0.0 0 0.0 0.9759876728057861 0.1906214952468872 0.21605448424816132 -0.25815606117248535 0.9660939574241638 -0.0 0.4623207747936249 0.6250783205032349 0 1.0 0 0.0 0 0.0 0 0.0 -1.0044364929199219 0.1604405641555786 -0.2839455306529999 0.6660054326057434 0.7459028959274292 -0.0 0.9735915064811707 0.7810776829719543 0 1.0 0 0.0 0 0.0 0 0.0 -1.0126092433929443 0.1672804057598114 0.21605446934700012 0.6155278086662292 0.7881100177764893 -0.0 0.574373185634613 0.6015603542327881 0 1.0 0 0.0 0 0.0 0 0.0 -1.0044364929199219 0.1604405641555786 0.21605446934700012 0.6660054326057434 0.7459028959274292 -0.0 0.5790320634841919 0.595786452293396 0 1.0 0 0.0 0 0.0 0 0.0 -1.6119416952133179 0.004386350512504578 -0.2839455306529999 -0.5533921122550964 0.8328806161880493 -0.0 0.11697599291801453 0.6049986481666565 0 1.0 0 0.0 0 0.0 0 0.0 -1.6158784627914429 0.001635327935218811 0.21605446934700012 -0.5922421813011169 0.8057497143745422 -0.0 0.4582798480987549 0.4290844798088074 0 1.0 0 0.0 0 0.0 0 0.0 -1.6119416952133179 0.004386350512504578 0.21605446934700012 -0.5533921122550964 0.8328806161880493 -0.0 0.46043041348457336 0.4320330023765564 0 1.0 0 0.0 0 0.0 0 0.0 1.8490369319915771 0.18803346157073975 -0.2839455306529999 0.0 0.999969482421875 -0.0 0.9053249359130859 0.8409206867218018 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.18803346157073975 0.21605448424816132 0.0 0.999969482421875 -0.0 0.49900293350219727 0.6947826147079468 0 1.0 0 0.0 0 0.0 0 0.0 1.8490369319915771 0.18803346157073975 0.21605448424816132 0.0 1.0 -0.0 0.531541109085083 0.6883732080459595 0 1.0 0 0.0 0 0.0 0 0.0 0.37529706954956055 -0.10874000191688538 -0.2839455306529999 0.5534226298332214 0.8328806161880493 -0.0 0.016798853874206543 0.44891852140426636 0 1.0 0 0.0 0 0.0 0 0.0 0.3719792366027832 -0.10636235028505325 0.21605446934700012 0.6100344657897949 0.7923520803451538 -0.0 0.44556304812431335 0.291823148727417 0 1.0 0 0.0 0 0.0 0 0.0 0.37529706954956055 -0.10874000191688538 0.21605446934700012 0.5534226298332214 0.8328806161880493 -0.0 0.44773736596107483 0.288699209690094 0 1.0 0 0.0 0 0.0 0 0.0 -1.1936269998550415 0.16226482391357422 -0.2839455306529999 -0.6462294459342957 0.7631153464317322 -0.0 0.12174451351165771 0.760358989238739 0 1.0 0 0.0 0 0.0 0 0.0 -1.201529860496521 0.15508809685707092 0.21605446934700012 -0.6964934468269348 0.7175511717796326 -0.0 0.47506946325302124 0.5759004354476929 0 1.0 0 0.0 0 0.0 0 0.0 -1.1936269998550415 0.16226482391357422 0.21605446934700012 -0.6462294459342957 0.7631153464317322 -0.0 0.4790382981300354 0.5831623077392578 0 1.0 0 0.0 0 0.0 0 0.0 0.48336267471313477 -0.10723800212144852 -0.2839455306529999 -0.5939817428588867 0.8044679164886475 -0.0 0.9540083408355713 0.4480985999107361 0 1.0 0 0.0 0 0.0 0 0.0 0.48002052307128906 -0.10947578400373459 0.21605446934700012 -0.5250709652900696 0.8510391712188721 -0.0 0.5244717597961426 0.2854476571083069 0 1.0 0 0.0 0 0.0 0 0.0 0.48336267471313477 -0.10723800212144852 0.21605446934700012 -0.5939817428588867 0.8044679164886475 -0.0 0.5267577171325684 0.28827619552612305 0 1.0 0 0.0 0 0.0 0 0.0 -1.6158784627914429 0.001635327935218811 -0.2839455306529999 -0.5922421813011169 0.8057497143745422 -0.0 0.11865502595901489 0.6009750366210938 0 1.0 0 0.0 0 0.0 0 0.0 -1.6196473836898804 -0.0012762397527694702 0.21605446934700012 -0.6303598284721375 0.7762992978096008 -0.0 0.4562217891216278 0.425994873046875 0 1.0 0 0.0 0 0.0 0 0.0 -1.6158784627914429 0.001635327935218811 0.21605446934700012 -0.5922421813011169 0.8057497143745422 -0.0 0.4582798480987549 0.4290844798088074 0 1.0 0 0.0 0 0.0 0 0.0 1.8490369319915771 0.10957461595535278 -0.2839455306529999 1.0 0.0 -0.0 0.9139398336410522 0.793278694152832 0 1.0 0 0.0 0 0.0 0 0.0 1.8490369319915771 0.18803346157073975 0.21605448424816132 1.0 0.0 -0.0 0.531541109085083 0.6883732080459595 0 1.0 0 0.0 0 0.0 0 0.0 1.8490369319915771 0.10957461595535278 0.21605446934700012 0.999969482421875 0.0 -0.0 0.5335628986358643 0.6399606466293335 0 1.0 0 0.0 0 0.0 0 0.0 1.0855131149291992 0.186923086643219 -0.2839455306529999 0.316965252161026 0.9484237432479858 -0.0 0.9345377087593079 0.7768685817718506 0 1.0 0 0.0 0 0.0 0 0.0 1.073866844177246 0.19034910202026367 0.21605448424816132 0.24851222336292267 0.9686269760131836 -0.0 0.5154626369476318 0.6225020289421082 0 1.0 0 0.0 0 0.0 0 0.0 1.0855131149291992 0.186923086643219 0.21605448424816132 0.316965252161026 0.9484237432479858 -0.0 0.5216641426086426 0.6186676621437073 0 1.0 0 0.0 0 0.0 0 0.0 1.6378281116485596 0.10957461595535278 -0.2839455306529999 0.0 -1.0 -0.0 0.0777084231376648 0.7862430810928345 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.10957461595535278 0.21605446934700012 0.0 -1.0 -0.0 0.4469967484474182 0.6443145275115967 0 1.0 0 0.0 0 0.0 0 0.0 1.6378281116485596 0.10957461595535278 0.21605446934700012 0.0 -1.0 -0.0 0.42526912689208984 0.6394941806793213 0 1.0 0 0.0 0 0.0 0 0.0 0.9652681350708008 0.18734872341156006 -0.2839455306529999 -0.3262123465538025 0.9452803134918213 -0.0 0.030038535594940186 0.781794548034668 0 1.0 0 0.0 0 0.0 0 0.0 0.9549038410186768 0.18334868550300598 0.21605448424816132 -0.39381083846092224 0.9191870093345642 -0.0 0.45088422298431396 0.6181330680847168 0 1.0 0 0.0 0 0.0 0 0.0 0.9652681350708008 0.18734872341156006 0.21605448424816132 -0.3262123465538025 0.9452803134918213 -0.0 0.4565003216266632 0.6219629049301147 0 1.0 0 0.0 0 0.0 0 0.0 -0.9964971542358398 0.1528807282447815 -0.2839455306529999 0.7111117839813232 0.7030549049377441 -0.0 0.9682073593139648 0.772628128528595 0 1.0 0 0.0 0 0.0 0 0.0 -1.0044364929199219 0.1604405641555786 0.21605446934700012 0.6660054326057434 0.7459028959274292 -0.0 0.5790320634841919 0.595786452293396 0 1.0 0 0.0 0 0.0 0 0.0 -0.9964971542358398 0.1528807282447815 0.21605446934700012 0.7111117839813232 0.7030549049377441 -0.0 0.583620011806488 0.589279294013977 0 1.0 0 0.0 0 0.0 0 0.0 -1.6196473836898804 -0.0012762397527694702 -0.2839455306529999 -0.6303598284721375 0.7762992978096008 -0.0 0.120197594165802 0.59685218334198 0 1.0 0 0.0 0 0.0 0 0.0 -1.62324857711792 -0.004348337650299072 0.21605446934700012 -0.6674398183822632 0.7446210980415344 -0.0 0.4542531371116638 0.4227641224861145 0 1.0 0 0.0 0 0.0 0 0.0 -1.6196473836898804 -0.0012762397527694702 0.21605446934700012 -0.6303598284721375 0.7762992978096008 -0.0 0.4562217891216278 0.425994873046875 0 1.0 0 0.0 0 0.0 0 0.0 0.5844135284423828 -0.11520648002624512 -0.2839455306529999 0.8994414806365967 -0.4369640052318573 -0.0 0.9034560918807983 0.4446355700492859 0 1.0 0 0.0 0 0.0 0 0.0 0.5876777172088623 -0.10778042674064636 0.21605446934700012 0.9302957057952881 -0.3667409420013428 -0.0 0.5888727307319641 0.314247190952301 0 1.0 0 0.0 0 0.0 0 0.0 0.5844135284423828 -0.11520648002624512 0.21605446934700012 0.8994414806365967 -0.4369640052318573 -0.0 0.5878931283950806 0.3063850998878479 0 1.0 0 0.0 0 0.0 0 0.0 -1.201529860496521 0.15508809685707092 -0.2839455306529999 -0.6964934468269348 0.7175511717796326 -0.0 0.12541812658309937 0.7510921955108643 0 1.0 0 0.0 0 0.0 0 0.0 -1.2091068029403687 0.14722785353660583 0.21605446934700012 -0.7443769574165344 0.6677144765853882 -0.0 0.4712521433830261 0.5679982900619507 0 1.0 0 0.0 0 0.0 0 0.0 -1.201529860496521 0.15508809685707092 0.21605446934700012 -0.6964934468269348 0.7175511717796326 -0.0 0.47506946325302124 0.5759004354476929 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.10957461595535278 -0.2839455306529999 -1.0 0.0 -0.0 0.04727005958557129 0.8007837533950806 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 -0.05259701609611511 0.21605446934700012 -0.999969482421875 -0.0012817773967981339 -0.0 0.4389623999595642 0.49155598878860474 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.10957461595535278 0.21605446934700012 -1.0 0.0 -0.0 0.4469967484474182 0.6443145275115967 0 1.0 0 0.0 0 0.0 0 0.0 -1.62324857711792 -0.004348337650299072 -0.2839455306529999 -0.6674398183822632 0.7446210980415344 -0.0 0.12160813808441162 0.5926323533058167 0 1.0 0 0.0 0 0.0 0 0.0 -1.626681923866272 -0.007580965757369995 0.21605446934700012 -0.7032380104064941 0.7109286785125732 -0.0 0.45237112045288086 0.4193921685218811 0 1.0 0 0.0 0 0.0 0 0.0 -1.62324857711792 -0.004348337650299072 0.21605446934700012 -0.6674398183822632 0.7446210980415344 -0.0 0.4542531371116638 0.4227641224861145 0 1.0 0 0.0 0 0.0 0 0.0 0.378828763961792 -0.11091089993715286 -0.2839455306529999 0.4943082928657532 0.8692587018013 -0.0 0.014758676290512085 0.4464564323425293 0 1.0 0 0.0 0 0.0 0 0.0 0.37529706954956055 -0.10874000191688538 0.21605446934700012 0.5534226298332214 0.8328806161880493 -0.0 0.44773736596107483 0.288699209690094 0 1.0 0 0.0 0 0.0 0 0.0 0.378828763961792 -0.11091089993715286 0.21605446934700012 0.4943082928657532 0.8692587018013 -0.0 0.45010286569595337 0.2857872247695923 0 1.0 0 0.0 0 0.0 0 0.0 1.096672773361206 0.18273574113845825 -0.2839455306529999 0.3862422704696655 0.922391414642334 -0.0 0.9268628358840942 0.7703980207443237 0 1.0 0 0.0 0 0.0 0 0.0 1.0855131149291992 0.186923086643219 0.21605448424816132 0.316965252161026 0.9484237432479858 -0.0 0.5216641426086426 0.6186676621437073 0 1.0 0 0.0 0 0.0 0 0.0 1.096672773361206 0.18273574113845825 0.21605448424816132 0.3862422704696655 0.922391414642334 -0.0 0.5275639891624451 0.6141082048416138 0 1.0 0 0.0 0 0.0 0 0.0 0.48002052307128906 -0.10947578400373459 -0.2839455306529999 -0.5250709652900696 0.8510391712188721 -0.0 0.9559876918792725 0.44572991132736206 0 1.0 0 0.0 0 0.0 0 0.0 0.47641563415527344 -0.1115189865231514 0.21605446934700012 -0.46244698762893677 0.886623740196228 -0.0 0.5219649076461792 0.2828216552734375 0 1.0 0 0.0 0 0.0 0 0.0 0.48002052307128906 -0.10947578400373459 0.21605446934700012 -0.5250709652900696 0.8510391712188721 -0.0 0.5244717597961426 0.2854476571083069 0 1.0 0 0.0 0 0.0 0 0.0 0.9549038410186768 0.18334868550300598 -0.2839455306529999 -0.39381083846092224 0.9191870093345642 -0.0 0.03763490915298462 0.776381254196167 0 1.0 0 0.0 0 0.0 0 0.0 0.944894552230835 0.1786213517189026 0.21605448424816132 -0.4597918689250946 0.8879970908164978 -0.0 0.44546952843666077 0.6135957837104797 0 1.0 0 0.0 0 0.0 0 0.0 0.9549038410186768 0.18334868550300598 0.21605448424816132 -0.39381083846092224 0.9191870093345642 -0.0 0.45088422298431396 0.6181330680847168 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 -0.2839455306529999 0.7320169806480408 0.6812646985054016 -0.0 0.9632974863052368 0.7633605003356934 0 1.0 0 0.0 0 0.0 0 0.0 -0.9964971542358398 0.1528807282447815 0.21605446934700012 0.7111117839813232 0.7030549049377441 -0.0 0.583620011806488 0.589279294013977 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 0.21605446934700012 0.7320169806480408 0.6812646985054016 -0.0 0.5881415009498596 0.5820229053497314 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.10957461595535278 -0.2839455306529999 0.0 -0.999969482421875 -0.0 0.9659538269042969 0.8092734813690186 0 1.0 0 0.0 0 0.0 0 0.0 1.8490369319915771 0.10957461595535278 0.21605446934700012 0.0 -0.999969482421875 -0.0 0.5335628986358643 0.6399606466293335 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.10957461595535278 0.21605446934700012 0.0 -1.0 -0.0 0.49893590807914734 0.6462191343307495 0 1.0 0 0.0 0 0.0 0 0.0 -1.2091068029403687 0.14722785353660583 -0.2839455306529999 -0.7443769574165344 0.6677144765853882 -0.0 0.1286132037639618 0.7412484288215637 0 1.0 0 0.0 0 0.0 0 0.0 -1.2162116765975952 0.1387108862400055 0.21605446934700012 -0.7923825979232788 0.6100039482116699 -0.0 0.4676472246646881 0.5594847202301025 0 1.0 0 0.0 0 0.0 0 0.0 -1.2091068029403687 0.14722785353660583 0.21605446934700012 -0.7443769574165344 0.6677144765853882 -0.0 0.4712521433830261 0.5679982900619507 0 1.0 0 0.0 0 0.0 0 0.0 -1.428524374961853 -0.006379365921020508 -0.2839455306529999 0.299569696187973 -0.9540390968322754 -0.0 0.9996907711029053 0.6184368133544922 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 0.21605446934700012 0.3073824346065521 -0.9515671133995056 -0.0 0.5751795768737793 0.43024682998657227 0 1.0 0 0.0 0 0.0 0 0.0 -1.428524374961853 -0.006379365921020508 0.21605446934700012 0.299569696187973 -0.9540390968322754 -0.0 0.5732494592666626 0.4284428358078003 0 1.0 0 0.0 0 0.0 0 0.0 0.2601480484008789 -0.11062387377023697 -0.2839455306529999 -0.8855555653572083 -0.46449172496795654 -0.0 0.07466986775398254 0.4562997817993164 0 1.0 0 0.0 0 0.0 0 0.0 0.2643401622772217 -0.1180596575140953 0.21605446934700012 -0.8555864095687866 -0.5175939202308655 -0.0 0.38138139247894287 0.31271225214004517 0 1.0 0 0.0 0 0.0 0 0.0 0.2601480484008789 -0.11062387377023697 0.21605446934700012 -0.8855555653572083 -0.46449172496795654 -0.0 0.3802019953727722 0.3209127187728882 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 -0.2839455306529999 -1.0 0.0 -0.0 0.9975510835647583 0.6196885108947754 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.024926260113716125 0.21605446934700012 -0.999969482421875 0.0023194067180156708 -0.0 0.5769625306129456 0.40624701976776123 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 0.21605446934700012 -1.0 0.0 -0.0 0.5751795768737793 0.43024682998657227 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 -0.040337830781936646 -0.2839455306529999 0.999969482421875 0.0008850367739796638 -0.0 0.9716988801956177 0.6664947867393494 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.10957461595535278 0.21605446934700012 1.0 0.0 -0.0 0.49893590807914734 0.6462191343307495 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 -0.040337830781936646 0.21605446934700012 0.999969482421875 0.0008850367739796638 -0.0 0.4987790882587433 0.5032071471214294 0 1.0 0 0.0 0 0.0 0 0.0 1.1073460578918457 0.17778706550598145 -0.2839455306529999 0.45512253046035767 0.8904080390930176 -0.0 0.9199471473693848 0.7631135582923889 0 1.0 0 0.0 0 0.0 0 0.0 1.096672773361206 0.18273574113845825 0.21605448424816132 0.3862422704696655 0.922391414642334 -0.0 0.5275639891624451 0.6141082048416138 0 1.0 0 0.0 0 0.0 0 0.0 1.1073460578918457 0.17778706550598145 0.21605448424816132 0.45512253046035767 0.8904080390930176 -0.0 0.5331688523292542 0.6088377237319946 0 1.0 0 0.0 0 0.0 0 0.0 0.944894552230835 0.1786213517189026 -0.2839455306529999 -0.4597918689250946 0.8879970908164978 -0.0 0.04463425278663635 0.7701126933097839 0 1.0 0 0.0 0 0.0 0 0.0 0.9352405071258545 0.17316675186157227 0.21605448424816132 -0.5230872631072998 0.8522598743438721 -0.0 0.44025203585624695 0.6083549857139587 0 1.0 0 0.0 0 0.0 0 0.0 0.944894552230835 0.1786213517189026 0.21605448424816132 -0.4597918689250946 0.8879970908164978 -0.0 0.44546952843666077 0.6135957837104797 0 1.0 0 0.0 0 0.0 0 0.0 1.781799554824829 -0.047662943601608276 -0.2839455306529999 0.999969482421875 0.0038453321903944016 -0.0 0.9719215631484985 0.6577943563461304 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 -0.040337830781936646 0.21605446934700012 0.999969482421875 0.0008850367739796638 -0.0 0.4987790882587433 0.5032071471214294 0 1.0 0 0.0 0 0.0 0 0.0 1.781799554824829 -0.047662943601608276 0.21605446934700012 0.999969482421875 0.0038453321903944016 -0.0 0.49877843260765076 0.49449795484542847 0 1.0 0 0.0 0 0.0 0 0.0 0.38257455825805664 -0.11287504434585571 -0.2839455306529999 0.4352244734764099 0.9002960324287415 -0.0 0.012597858905792236 0.44421011209487915 0 1.0 0 0.0 0 0.0 0 0.0 0.378828763961792 -0.11091089993715286 0.21605446934700012 0.4943082928657532 0.8692587018013 -0.0 0.45010286569595337 0.2857872247695923 0 1.0 0 0.0 0 0.0 0 0.0 0.38257455825805664 -0.11287504434585571 0.21605446934700012 0.4352244734764099 0.9002960324287415 -0.0 0.45266231894493103 0.2830923795700073 0 1.0 0 0.0 0 0.0 0 0.0 -1.0590872764587402 0.12035006284713745 -0.2839455306529999 -0.13760796189308167 -0.9904782176017761 -0.0 1.0160439014434814 0.7520646452903748 0 1.0 0 0.0 0 0.0 0 0.0 -1.053524374961853 0.11937102675437927 0.21605446934700012 -0.21018096804618835 -0.9776299595832825 -0.0 0.5556848645210266 0.5576752424240112 0 1.0 0 0.0 0 0.0 0 0.0 -1.0590872764587402 0.12035006284713745 0.21605446934700012 -0.13760796189308167 -0.9904782176017761 -0.0 0.5524991154670715 0.5583648085594177 0 1.0 0 0.0 0 0.0 0 0.0 -1.4321365356445312 -0.007481232285499573 -0.2839455306529999 0.2850733995437622 -0.9584948420524597 -0.0 1.002036690711975 0.6171183586120605 0 1.0 0 0.0 0 0.0 0 0.0 -1.428524374961853 -0.006379365921020508 0.21605446934700012 0.299569696187973 -0.9540390968322754 -0.0 0.5732494592666626 0.4284428358078003 0 1.0 0 0.0 0 0.0 0 0.0 -1.4321365356445312 -0.007481232285499573 0.21605446934700012 0.2850733995437622 -0.9584948420524597 -0.0 0.5711151957511902 0.42655032873153687 0 1.0 0 0.0 0 0.0 0 0.0 0.47641563415527344 -0.1115189865231514 -0.2839455306529999 -0.46244698762893677 0.886623740196228 -0.0 0.9581100940704346 0.44357115030288696 0 1.0 0 0.0 0 0.0 0 0.0 0.472548246383667 -0.11336759477853775 0.21605446934700012 -0.40171512961387634 0.9157384037971497 -0.0 0.5192342400550842 0.2804054617881775 0 1.0 0 0.0 0 0.0 0 0.0 0.47641563415527344 -0.1115189865231514 0.21605446934700012 -0.46244698762893677 0.886623740196228 -0.0 0.5219649076461792 0.2828216552734375 0 1.0 0 0.0 0 0.0 0 0.0 1.7818396091461182 -0.054460227489471436 -0.2839455306529999 0.99993896484375 0.008301034569740295 -0.0 0.9721057415008545 0.6496121883392334 0 1.0 0 0.0 0 0.0 0 0.0 1.781799554824829 -0.047662943601608276 0.21605446934700012 0.999969482421875 0.0038453321903944016 -0.0 0.49877843260765076 0.49449795484542847 0 1.0 0 0.0 0 0.0 0 0.0 1.7818396091461182 -0.054460227489471436 0.21605446934700012 0.99993896484375 0.008301034569740295 -0.0 0.49879494309425354 0.4863094091415405 0 1.0 0 0.0 0 0.0 0 0.0 1.1175329685211182 0.17207705974578857 -0.2839455306529999 0.52232426404953 0.8527176976203918 -0.0 0.9137599468231201 0.7550764679908752 0 1.0 0 0.0 0 0.0 0 0.0 1.1073460578918457 0.17778706550598145 0.21605448424816132 0.45512253046035767 0.8904080390930176 -0.0 0.5331688523292542 0.6088377237319946 0 1.0 0 0.0 0 0.0 0 0.0 1.1175329685211182 0.17207705974578857 0.21605448424816132 0.52232426404953 0.8527176976203918 -0.0 0.5384877324104309 0.60286545753479 0 1.0 0 0.0 0 0.0 0 0.0 -1.053524374961853 0.11937102675437927 -0.2839455306529999 -0.21018096804618835 -0.9776299595832825 -0.0 1.0116513967514038 0.7508395314216614 0 1.0 0 0.0 0 0.0 0 0.0 -1.0481414794921875 0.11800038814544678 0.21605446934700012 -0.2839747369289398 -0.9588000178337097 -0.0 0.5587841272354126 0.556570291519165 0 1.0 0 0.0 0 0.0 0 0.0 -1.053524374961853 0.11937102675437927 0.21605446934700012 -0.21018096804618835 -0.9776299595832825 -0.0 0.5556848645210266 0.5576752424240112 0 1.0 0 0.0 0 0.0 0 0.0 -1.436055064201355 -0.00861714780330658 -0.2839455306529999 0.27262184023857117 -0.9620960354804993 -0.0 1.0045902729034424 0.615726113319397 0 1.0 0 0.0 0 0.0 0 0.0 -1.4321365356445312 -0.007481232285499573 0.21605446934700012 0.2850733995437622 -0.9584948420524597 -0.0 0.5711151957511902 0.42655032873153687 0 1.0 0 0.0 0 0.0 0 0.0 -1.436055064201355 -0.00861714780330658 0.21605446934700012 0.27262184023857117 -0.9620960354804993 -0.0 0.5687727928161621 0.424571692943573 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 -0.05259701609611511 -0.2839455306529999 -0.999969482421875 -0.0012817773967981339 -0.0 0.0392301082611084 0.6476972699165344 0 1.0 0 0.0 0 0.0 0 0.0 1.6830341815948486 -0.06105197221040726 0.21605446934700012 -0.999969482421875 -0.005371257662773132 -0.0 0.4384920597076416 0.4817414879798889 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 -0.05259701609611511 0.21605446934700012 -0.999969482421875 -0.0012817773967981339 -0.0 0.4389623999595642 0.49155598878860474 0 1.0 0 0.0 0 0.0 0 0.0 0.9352405071258545 0.17316675186157227 -0.2839455306529999 -0.5230872631072998 0.8522598743438721 -0.0 0.05104157328605652 0.763035237789154 0 1.0 0 0.0 0 0.0 0 0.0 0.9259414672851562 0.16698485612869263 0.21605446934700012 -0.5828424692153931 0.8125553131103516 -0.0 0.4352259635925293 0.6024113893508911 0 1.0 0 0.0 0 0.0 0 0.0 0.9352405071258545 0.17316675186157227 0.21605448424816132 -0.5230872631072998 0.8522598743438721 -0.0 0.44025203585624695 0.6083549857139587 0 1.0 0 0.0 0 0.0 0 0.0 -1.626681923866272 -0.007580965757369995 -0.2839455306529999 -0.7032380104064941 0.7109286785125732 -0.0 0.12289077043533325 0.5883170366287231 0 1.0 0 0.0 0 0.0 0 0.0 -1.629947304725647 -0.010974138975143433 0.21605446934700012 -0.7373882532119751 0.6754356622695923 -0.0 0.45057305693626404 0.4158787727355957 0 1.0 0 0.0 0 0.0 0 0.0 -1.626681923866272 -0.007580965757369995 0.21605446934700012 -0.7032380104064941 0.7109286785125732 -0.0 0.45237112045288086 0.4193921685218811 0 1.0 0 0.0 0 0.0 0 0.0 0.3865344524383545 -0.11463243514299393 -0.2839455306529999 0.37711721658706665 0.9261451959609985 -0.0 0.01031494140625 0.4421793222427368 0 1.0 0 0.0 0 0.0 0 0.0 0.38257455825805664 -0.11287504434585571 0.21605446934700012 0.4352244734764099 0.9002960324287415 -0.0 0.45266231894493103 0.2830923795700073 0 1.0 0 0.0 0 0.0 0 0.0 0.3865344524383545 -0.11463243514299393 0.21605446934700012 0.37711721658706665 0.9261451959609985 -0.0 0.45541778206825256 0.2806205153465271 0 1.0 0 0.0 0 0.0 0 0.0 -1.0481414794921875 0.11800038814544678 -0.2839455306529999 -0.2839747369289398 -0.9588000178337097 -0.0 1.007440447807312 0.7491217851638794 0 1.0 0 0.0 0 0.0 0 0.0 -1.0429385900497437 0.11623811721801758 0.21605446934700012 -0.3577074408531189 -0.9338053464889526 -0.0 0.5617994070053101 0.5550513863563538 0 1.0 0 0.0 0 0.0 0 0.0 -1.0481414794921875 0.11800038814544678 0.21605446934700012 -0.2839747369289398 -0.9588000178337097 -0.0 0.5587841272354126 0.556570291519165 0 1.0 0 0.0 0 0.0 0 0.0 0.472548246383667 -0.11336759477853775 -0.2839455306529999 -0.40171512961387634 0.9157384037971497 -0.0 0.960377037525177 0.441622257232666 0 1.0 0 0.0 0 0.0 0 0.0 0.4684181213378906 -0.11502161622047424 0.21605446934700012 -0.34366893768310547 0.939085066318512 -0.0 0.516277015209198 0.2782076597213745 0 1.0 0 0.0 0 0.0 0 0.0 0.472548246383667 -0.11336759477853775 0.21605446934700012 -0.40171512961387634 0.9157384037971497 -0.0 0.5192342400550842 0.2804054617881775 0 1.0 0 0.0 0 0.0 0 0.0 1.7819068431854248 -0.06072968244552612 -0.2839455306529999 0.999908447265625 0.01348918117582798 -0.0 0.9722524285316467 0.6419804692268372 0 1.0 0 0.0 0 0.0 0 0.0 1.7818396091461182 -0.054460227489471436 0.21605446934700012 0.99993896484375 0.008301034569740295 -0.0 0.49879494309425354 0.4863094091415405 0 1.0 0 0.0 0 0.0 0 0.0 1.7819068431854248 -0.06072968244552612 0.21605446934700012 0.999908447265625 0.01348918117582798 -0.0 0.4988292455673218 0.47867339849472046 0 1.0 0 0.0 0 0.0 0 0.0 1.1272332668304443 0.16560572385787964 -0.2839455306529999 0.5866267681121826 0.8098391890525818 -0.0 0.9082623720169067 0.7463341951370239 0 1.0 0 0.0 0 0.0 0 0.0 1.1175329685211182 0.17207705974578857 0.21605448424816132 0.52232426404953 0.8527176976203918 -0.0 0.5384877324104309 0.60286545753479 0 1.0 0 0.0 0 0.0 0 0.0 1.1272332668304443 0.16560572385787964 0.21605446934700012 0.5866267681121826 0.8098391890525818 -0.0 0.5435309410095215 0.5961958169937134 0 1.0 0 0.0 0 0.0 0 0.0 -1.0429385900497437 0.11623811721801758 -0.2839455306529999 -0.3577074408531189 -0.9338053464889526 -0.0 1.0034195184707642 0.7469233274459839 0 1.0 0 0.0 0 0.0 0 0.0 -1.0379157066345215 0.11408424377441406 0.21605446934700012 -0.4300057888031006 -0.9027985334396362 -0.0 0.5647335052490234 0.5531189441680908 0 1.0 0 0.0 0 0.0 0 0.0 -1.0429385900497437 0.11623811721801758 0.21605446934700012 -0.3577074408531189 -0.9338053464889526 -0.0 0.5617994070053101 0.5550513863563538 0 1.0 0 0.0 0 0.0 0 0.0 -1.4402800798416138 -0.009787127375602722 -0.2839455306529999 0.2618182897567749 -0.965086817741394 -0.0 1.0073527097702026 0.6142528057098389 0 1.0 0 0.0 0 0.0 0 0.0 -1.436055064201355 -0.00861714780330658 0.21605446934700012 0.27262184023857117 -0.9620960354804993 -0.0 0.5687727928161621 0.424571692943573 0 1.0 0 0.0 0 0.0 0 0.0 -1.4402800798416138 -0.009787127375602722 0.21605446934700012 0.2618182897567749 -0.965086817741394 -0.0 0.5662178993225098 0.4225098490715027 0 1.0 0 0.0 0 0.0 0 0.0 0.9259414672851562 0.16698485612869263 -0.2839455306529999 -0.5828424692153931 0.8125553131103516 -0.0 0.05687263607978821 0.7551867961883545 0 1.0 0 0.0 0 0.0 0 0.0 0.9169976711273193 0.16007569432258606 0.21605446934700012 -0.6382641196250916 0.7697988748550415 -0.0 0.4303847849369049 0.5957629680633545 0 1.0 0 0.0 0 0.0 0 0.0 0.9259414672851562 0.16698485612869263 0.21605446934700012 -0.5828424692153931 0.8125553131103516 -0.0 0.4352259635925293 0.6024113893508911 0 1.0 0 0.0 0 0.0 0 0.0 1.7820003032684326 -0.06647131592035294 -0.2839455306529999 0.999786376953125 0.019684437662363052 -0.0 0.9723632335662842 0.6349261999130249 0 1.0 0 0.0 0 0.0 0 0.0 1.7819068431854248 -0.06072968244552612 0.21605446934700012 0.999908447265625 0.01348918117582798 -0.0 0.4988292455673218 0.47867339849472046 0 1.0 0 0.0 0 0.0 0 0.0 1.7820003032684326 -0.06647131592035294 0.21605446934700012 0.999786376953125 0.019684437662363052 -0.0 0.4988810122013092 0.4716169834136963 0 1.0 0 0.0 0 0.0 0 0.0 0.39070844650268555 -0.1161830797791481 -0.2839455306529999 0.32065796852111816 0.9471724629402161 -0.0 0.007908552885055542 0.4403642416000366 0 1.0 0 0.0 0 0.0 0 0.0 0.3865344524383545 -0.11463243514299393 0.21605446934700012 0.37711721658706665 0.9261451959609985 -0.0 0.45541778206825256 0.2806205153465271 0 1.0 0 0.0 0 0.0 0 0.0 0.39070844650268555 -0.1161830797791481 0.21605446934700012 0.32065796852111816 0.9471724629402161 -0.0 0.45837074518203735 0.27837908267974854 0 1.0 0 0.0 0 0.0 0 0.0 -1.0379157066345215 0.11408424377441406 -0.2839455306529999 -0.4300057888031006 -0.9027985334396362 -0.0 0.9995948672294617 0.7442548871040344 0 1.0 0 0.0 0 0.0 0 0.0 -1.033072829246521 0.11153876781463623 0.21605446934700012 -0.4994964301586151 -0.8662984371185303 -0.0 0.567589282989502 0.5507723093032837 0 1.0 0 0.0 0 0.0 0 0.0 -1.0379157066345215 0.11408424377441406 0.21605446934700012 -0.4300057888031006 -0.9027985334396362 -0.0 0.5647335052490234 0.5531189441680908 0 1.0 0 0.0 0 0.0 0 0.0 -1.4448117017745972 -0.010991156101226807 -0.2839455306529999 0.252327024936676 -0.9676198363304138 -0.0 1.0103250741958618 0.6126905679702759 0 1.0 0 0.0 0 0.0 0 0.0 -1.4402800798416138 -0.009787127375602722 0.21605446934700012 0.2618182897567749 -0.965086817741394 -0.0 0.5662178993225098 0.4225098490715027 0 1.0 0 0.0 0 0.0 0 0.0 -1.4448117017745972 -0.010991156101226807 0.21605446934700012 0.252327024936676 -0.9676198363304138 -0.0 0.5634464025497437 0.4203687906265259 0 1.0 0 0.0 0 0.0 0 0.0 1.6830341815948486 -0.06105197221040726 -0.2839455306529999 -0.999969482421875 -0.005371257662773132 -0.0 0.03887012600898743 0.6378592848777771 0 1.0 0 0.0 0 0.0 0 0.0 1.6830995082855225 -0.06902045011520386 0.21605446934700012 -0.999908447265625 -0.011413922533392906 -0.0 0.43806785345077515 0.47238510847091675 0 1.0 0 0.0 0 0.0 0 0.0 1.6830341815948486 -0.06105197221040726 0.21605446934700012 -0.999969482421875 -0.005371257662773132 -0.0 0.4384920597076416 0.4817414879798889 0 1.0 0 0.0 0 0.0 0 0.0 0.4684181213378906 -0.11502161622047424 -0.2839455306529999 -0.34366893768310547 0.939085066318512 -0.0 0.9627904891967773 0.43988388776779175 0 1.0 0 0.0 0 0.0 0 0.0 0.46402525901794434 -0.11648104339838028 0.21605446934700012 -0.28882718086242676 0.9573656320571899 -0.0 0.5130914449691772 0.27623826265335083 0 1.0 0 0.0 0 0.0 0 0.0 0.4684181213378906 -0.11502161622047424 0.21605446934700012 -0.34366893768310547 0.939085066318512 -0.0 0.516277015209198 0.2782076597213745 0 1.0 0 0.0 0 0.0 0 0.0 -1.629947304725647 -0.010974138975143433 -0.2839455306529999 -0.7373882532119751 0.6754356622695923 -0.0 0.12404951453208923 0.5839077234268188 0 1.0 0 0.0 0 0.0 0 0.0 -1.6330450773239136 -0.014527842402458191 0.21605446934700012 -0.7697073221206665 0.6383861899375916 -0.0 0.4488561451435089 0.4122235178947449 0 1.0 0 0.0 0 0.0 0 0.0 -1.629947304725647 -0.010974138975143433 0.21605446934700012 -0.7373882532119751 0.6754356622695923 -0.0 0.45057305693626404 0.4158787727355957 0 1.0 0 0.0 0 0.0 0 0.0 1.1364471912384033 0.15837302803993225 -0.2839455306529999 0.6469008326530457 0.7625354528427124 -0.0 0.9034109115600586 0.7369210720062256 0 1.0 0 0.0 0 0.0 0 0.0 1.1272332668304443 0.16560572385787964 0.21605446934700012 0.5866267681121826 0.8098391890525818 -0.0 0.5435309410095215 0.5961958169937134 0 1.0 0 0.0 0 0.0 0 0.0 1.1364471912384033 0.15837302803993225 0.21605446934700012 0.6469008326530457 0.7625354528427124 -0.0 0.5483102798461914 0.5888283848762512 0 1.0 0 0.0 0 0.0 0 0.0 -1.033072829246521 0.11153876781463623 -0.2839455306529999 -0.4994964301586151 -0.8662984371185303 -0.0 0.9959707856178284 0.7411254644393921 0 1.0 0 0.0 0 0.0 0 0.0 -1.0284099578857422 0.1086016595363617 0.21605446934700012 -0.5649586319923401 -0.8250983953475952 -0.0 0.5703694224357605 0.5480096936225891 0 1.0 0 0.0 0 0.0 0 0.0 -1.033072829246521 0.11153876781463623 0.21605446934700012 -0.4994964301586151 -0.8662984371185303 -0.0 0.567589282989502 0.5507723093032837 0 1.0 0 0.0 0 0.0 0 0.0 0.9169976711273193 0.16007569432258606 -0.2839455306529999 -0.6382641196250916 0.7697988748550415 -0.0 0.06215009093284607 0.7465975880622864 0 1.0 0 0.0 0 0.0 0 0.0 0.9084088802337646 0.15243923664093018 0.21605446934700012 -0.6889248490333557 0.7248145937919617 -0.0 0.4257209300994873 0.588405191898346 0 1.0 0 0.0 0 0.0 0 0.0 0.9169976711273193 0.16007569432258606 0.21605446934700012 -0.6382641196250916 0.7697988748550415 -0.0 0.4303847849369049 0.5957629680633545 0 1.0 0 0.0 0 0.0 0 0.0 1.782120943069458 -0.07168512046337128 -0.2839455306529999 0.999603271484375 0.027222510427236557 -0.0 0.9724383354187012 0.6284713745117188 0 1.0 0 0.0 0 0.0 0 0.0 1.7820003032684326 -0.06647131592035294 0.21605446934700012 0.999786376953125 0.019684437662363052 -0.0 0.4988810122013092 0.4716169834136963 0 1.0 0 0.0 0 0.0 0 0.0 1.782120943069458 -0.07168512046337128 0.21605446934700012 0.999603271484375 0.027222510427236557 -0.0 0.4989510476589203 0.4651622176170349 0 1.0 0 0.0 0 0.0 0 0.0 0.5805556774139404 -0.12243308126926422 -0.2839455306529999 0.8640400171279907 -0.503372311592102 -0.0 0.9056787490844727 0.4378116726875305 0 1.0 0 0.0 0 0.0 0 0.0 0.5844135284423828 -0.11520648002624512 0.21605446934700012 0.8994414806365967 -0.4369640052318573 -0.0 0.5878931283950806 0.3063850998878479 0 1.0 0 0.0 0 0.0 0 0.0 0.5805556774139404 -0.12243308126926422 0.21605446934700012 0.8640400171279907 -0.503372311592102 -0.0 0.5865741968154907 0.2985714077949524 0 1.0 0 0.0 0 0.0 0 0.0 -1.0284099578857422 0.1086016595363617 -0.2839455306529999 -0.5649586319923401 -0.8250983953475952 -0.0 0.9925497770309448 0.7375422716140747 0 1.0 0 0.0 0 0.0 0 0.0 -1.023927092552185 0.10527294874191284 0.21605446934700012 -0.6255073547363281 -0.7801751494407654 -0.0 0.5730769038200378 0.5448282957077026 0 1.0 0 0.0 0 0.0 0 0.0 -1.0284099578857422 0.1086016595363617 0.21605446934700012 -0.5649586319923401 -0.8250983953475952 -0.0 0.5703694224357605 0.5480096936225891 0 1.0 0 0.0 0 0.0 0 0.0 -1.449649691581726 -0.012229233980178833 -0.2839455306529999 0.24396497011184692 -0.9697561264038086 -0.0 1.0135072469711304 0.6110315918922424 0 1.0 0 0.0 0 0.0 0 0.0 -1.4448117017745972 -0.010991156101226807 0.21605446934700012 0.252327024936676 -0.9676198363304138 -0.0 0.5634464025497437 0.4203687906265259 0 1.0 0 0.0 0 0.0 0 0.0 -1.449649691581726 -0.012229233980178833 0.21605446934700012 0.24396497011184692 -0.9697561264038086 -0.0 0.5604545474052429 0.41815340518951416 0 1.0 0 0.0 0 0.0 0 0.0 1.6830995082855225 -0.06902045011520386 -0.2839455306529999 -0.999908447265625 -0.011413922533392906 -0.0 0.03850892186164856 0.6284879446029663 0 1.0 0 0.0 0 0.0 0 0.0 1.6832091808319092 -0.07650244981050491 0.21605446934700012 -0.99981689453125 -0.01825006864964962 -0.0 0.4376918077468872 0.463517427444458 0 1.0 0 0.0 0 0.0 0 0.0 1.6830995082855225 -0.06902045011520386 0.21605446934700012 -0.999908447265625 -0.011413922533392906 -0.0 0.43806785345077515 0.47238510847091675 0 1.0 0 0.0 0 0.0 0 0.0 0.3950965404510498 -0.11752697080373764 -0.2839455306529999 0.26645711064338684 0.9638355374336243 -0.0 0.005377382040023804 0.43876558542251587 0 1.0 0 0.0 0 0.0 0 0.0 0.39070844650268555 -0.1161830797791481 0.21605446934700012 0.32065796852111816 0.9471724629402161 -0.0 0.45837074518203735 0.27837908267974854 0 1.0 0 0.0 0 0.0 0 0.0 0.3950965404510498 -0.11752697080373764 0.21605446934700012 0.26645711064338684 0.9638355374336243 -0.0 0.4615219831466675 0.27637648582458496 0 1.0 0 0.0 0 0.0 0 0.0 1.145174503326416 0.1503790020942688 -0.2839455306529999 0.7022919654846191 0.7118747234344482 -0.0 0.8991608619689941 0.7268599271774292 0 1.0 0 0.0 0 0.0 0 0.0 1.1364471912384033 0.15837302803993225 0.21605446934700012 0.6469008326530457 0.7625354528427124 -0.0 0.5483102798461914 0.5888283848762512 0 1.0 0 0.0 0 0.0 0 0.0 1.145174503326416 0.1503790020942688 0.21605446934700012 0.7022919654846191 0.7118747234344482 -0.0 0.552838146686554 0.5807584524154663 0 1.0 0 0.0 0 0.0 0 0.0 -1.023927092552185 0.10527294874191284 -0.2839455306529999 -0.6255073547363281 -0.7801751494407654 -0.0 0.989332914352417 0.7335114479064941 0 1.0 0 0.0 0 0.0 0 0.0 -1.0196242332458496 0.10155263543128967 0.21605446934700012 -0.6805322170257568 -0.7326883673667908 -0.0 0.5757145881652832 0.5412243604660034 0 1.0 0 0.0 0 0.0 0 0.0 -1.023927092552185 0.10527294874191284 0.21605446934700012 -0.6255073547363281 -0.7801751494407654 -0.0 0.5730769038200378 0.5448282957077026 0 1.0 0 0.0 0 0.0 0 0.0 -1.4547940492630005 -0.013501375913619995 -0.2839455306529999 0.23651844263076782 -0.9716177582740784 -0.0 1.01689875125885 0.6092678904533386 0 1.0 0 0.0 0 0.0 0 0.0 -1.449649691581726 -0.012229233980178833 0.21605446934700012 0.24396497011184692 -0.9697561264038086 -0.0 0.5604545474052429 0.41815340518951416 0 1.0 0 0.0 0 0.0 0 0.0 -1.4547940492630005 -0.013501375913619995 0.21605446934700012 0.23651844263076782 -0.9716177582740784 -0.0 0.5572388768196106 0.4158700704574585 0 1.0 0 0.0 0 0.0 0 0.0 0.46402525901794434 -0.11648104339838028 -0.2839455306529999 -0.28882718086242676 0.9573656320571899 -0.0 0.9653520584106445 0.43835723400115967 0 1.0 0 0.0 0 0.0 0 0.0 0.4593696594238281 -0.11774588376283646 0.21605446934700012 -0.2374645173549652 0.9713736176490784 -0.0 0.5096766352653503 0.27450883388519287 0 1.0 0 0.0 0 0.0 0 0.0 0.46402525901794434 -0.11648104339838028 0.21605446934700012 -0.28882718086242676 0.9573656320571899 -0.0 0.5130914449691772 0.27623826265335083 0 1.0 0 0.0 0 0.0 0 0.0 0.9084088802337646 0.15243923664093018 -0.2839455306529999 -0.6889248490333557 0.7248145937919617 -0.0 0.06690171360969543 0.7372899651527405 0 1.0 0 0.0 0 0.0 0 0.0 0.9001753330230713 0.14407548308372498 0.21605446934700012 -0.7363505959510803 0.6765648126602173 -0.0 0.42122650146484375 0.580331563949585 0 1.0 0 0.0 0 0.0 0 0.0 0.9084088802337646 0.15243923664093018 0.21605446934700012 -0.6889248490333557 0.7248145937919617 -0.0 0.4257209300994873 0.588405191898346 0 1.0 0 0.0 0 0.0 0 0.0 1.7822678089141846 -0.07637109607458115 -0.2839455306529999 0.99932861328125 0.03656117618083954 -0.0 0.9724791049957275 0.6226339936256409 0 1.0 0 0.0 0 0.0 0 0.0 1.782120943069458 -0.07168512046337128 0.21605446934700012 0.999603271484375 0.027222510427236557 -0.0 0.4989510476589203 0.4651622176170349 0 1.0 0 0.0 0 0.0 0 0.0 1.7822678089141846 -0.07637109607458115 0.21605446934700012 0.99932861328125 0.03656117618083954 -0.0 0.4990389347076416 0.45932698249816895 0 1.0 0 0.0 0 0.0 0 0.0 -1.0196242332458496 0.10155263543128967 -0.2839455306529999 -0.6805322170257568 -0.7326883673667908 -0.0 0.9863194823265076 0.7290369868278503 0 1.0 0 0.0 0 0.0 0 0.0 -1.0155013799667358 0.0974406898021698 0.21605446934700012 -0.729667067527771 -0.6837671995162964 -0.0 0.5782853364944458 0.5371930599212646 0 1.0 0 0.0 0 0.0 0 0.0 -1.0196242332458496 0.10155263543128967 0.21605446934700012 -0.6805322170257568 -0.7326883673667908 -0.0 0.5757145881652832 0.5412243604660034 0 1.0 0 0.0 0 0.0 0 0.0 -1.4602450132369995 -0.014807567000389099 -0.2839455306529999 0.2298654168844223 -0.9732047319412231 -0.0 1.020498275756836 0.6073914766311646 0 1.0 0 0.0 0 0.0 0 0.0 -1.4547940492630005 -0.013501375913619995 0.21605446934700012 0.23651844263076782 -0.9716177582740784 -0.0 0.5572388768196106 0.4158700704574585 0 1.0 0 0.0 0 0.0 0 0.0 -1.4602450132369995 -0.014807567000389099 0.21605446934700012 0.2298654168844223 -0.9732047319412231 -0.0 0.5537964105606079 0.41352611780166626 0 1.0 0 0.0 0 0.0 0 0.0 -1.6330450773239136 -0.014527842402458191 -0.2839455306529999 -0.7697073221206665 0.6383861899375916 -0.0 0.12508833408355713 0.5794050693511963 0 1.0 0 0.0 0 0.0 0 0.0 -1.6359747648239136 -0.018242090940475464 0.21605446934700012 -0.7999511957168579 0.600054919719696 -0.0 0.4472181797027588 0.4084261655807495 0 1.0 0 0.0 0 0.0 0 0.0 -1.6330450773239136 -0.014527842402458191 0.21605446934700012 -0.7697073221206665 0.6383861899375916 -0.0 0.4488561451435089 0.4122235178947449 0 1.0 0 0.0 0 0.0 0 0.0 1.7824418544769287 -0.08052925020456314 -0.2839455306529999 0.9988097548484802 0.04849391058087349 -0.0 0.9724854826927185 0.6174278855323792 0 1.0 0 0.0 0 0.0 0 0.0 1.7822678089141846 -0.07637109607458115 0.21605446934700012 0.99932861328125 0.03656117618083954 -0.0 0.4990389347076416 0.45932698249816895 0 1.0 0 0.0 0 0.0 0 0.0 1.7824418544769287 -0.08052925020456314 0.21605446934700012 0.9988097548484802 0.04849391058087349 -0.0 0.49914538860321045 0.4541251063346863 0 1.0 0 0.0 0 0.0 0 0.0 0.39969849586486816 -0.11866410821676254 -0.2839455306529999 0.2148503065109253 0.9766228199005127 -0.0 0.002720385789871216 0.43738478422164917 0 1.0 0 0.0 0 0.0 0 0.0 0.3950965404510498 -0.11752697080373764 0.21605446934700012 0.26645711064338684 0.9638355374336243 -0.0 0.4615219831466675 0.27637648582458496 0 1.0 0 0.0 0 0.0 0 0.0 0.39969849586486816 -0.11866410821676254 0.21605446934700012 0.2148503065109253 0.9766228199005127 -0.0 0.4648711681365967 0.27462226152420044 0 1.0 0 0.0 0 0.0 0 0.0 1.1534152030944824 0.14162364602088928 -0.2839455306529999 0.7547532320022583 0.6559648513793945 -0.0 0.8954682946205139 0.7161635160446167 0 1.0 0 0.0 0 0.0 0 0.0 1.145174503326416 0.1503790020942688 0.21605446934700012 0.7022919654846191 0.7118747234344482 -0.0 0.552838146686554 0.5807584524154663 0 1.0 0 0.0 0 0.0 0 0.0 1.1534152030944824 0.14162364602088928 0.21605446934700012 0.7547532320022583 0.6559648513793945 -0.0 0.5571272969245911 0.5719776153564453 0 1.0 0 0.0 0 0.0 0 0.0 -1.0155013799667358 0.0974406898021698 -0.2839455306529999 -0.729667067527771 -0.6837671995162964 -0.0 0.9835079908370972 0.7241215705871582 0 1.0 0 0.0 0 0.0 0 0.0 -1.0115585327148438 0.09293714165687561 0.21605446934700012 -0.7775200605392456 -0.6288338899612427 -0.0 0.5807920694351196 0.5327289700508118 0 1.0 0 0.0 0 0.0 0 0.0 -1.0155013799667358 0.0974406898021698 0.21605446934700012 -0.729667067527771 -0.6837671995162964 -0.0 0.5782853364944458 0.5371930599212646 0 1.0 0 0.0 0 0.0 0 0.0 1.6832091808319092 -0.07650244981050491 -0.2839455306529999 -0.99981689453125 -0.01825006864964962 -0.0 0.03814530372619629 0.6196141839027405 0 1.0 0 0.0 0 0.0 0 0.0 1.6833622455596924 -0.08349797874689102 0.21605446934700012 -0.9996337890625 -0.026032287627458572 -0.0 0.4373648166656494 0.45516377687454224 0 1.0 0 0.0 0 0.0 0 0.0 1.6832091808319092 -0.07650244981050491 0.21605446934700012 -0.99981689453125 -0.01825006864964962 -0.0 0.4376918077468872 0.463517427444458 0 1.0 0 0.0 0 0.0 0 0.0 0.4593696594238281 -0.11774588376283646 -0.2839455306529999 -0.2374645173549652 0.9713736176490784 -0.0 0.9680632948875427 0.43704426288604736 0 1.0 0 0.0 0 0.0 0 0.0 0.454451322555542 -0.11881612986326218 0.21605446934700012 -0.1896725296974182 0.981841504573822 -0.0 0.5060328841209412 0.27303242683410645 0 1.0 0 0.0 0 0.0 0 0.0 0.4593696594238281 -0.11774588376283646 0.21605446934700012 -0.2374645173549652 0.9713736176490784 -0.0 0.5096766352653503 0.27450883388519287 0 1.0 0 0.0 0 0.0 0 0.0 0.9001753330230713 0.14407548308372498 -0.2839455306529999 -0.7363505959510803 0.6765648126602173 -0.0 0.07115733623504639 0.7272799015045166 0 1.0 0 0.0 0 0.0 0 0.0 0.8924548625946045 0.1350696086883545 0.21605446934700012 -0.7825861573219299 0.6225165724754333 -0.0 0.41697314381599426 0.571623682975769 0 1.0 0 0.0 0 0.0 0 0.0 0.9001753330230713 0.14407548308372498 0.21605446934700012 -0.7363505959510803 0.6765648126602173 -0.0 0.42122650146484375 0.580331563949585 0 1.0 0 0.0 0 0.0 0 0.0 -1.0115585327148438 0.09293714165687561 -0.2839455306529999 -0.7775200605392456 -0.6288338899612427 -0.0 0.9808957576751709 0.7187663316726685 0 1.0 0 0.0 0 0.0 0 0.0 -1.0078662633895874 0.08798837661743164 0.21605446934700012 -0.82668536901474 -0.5626392364501953 -0.0 0.5832045078277588 0.5277668237686157 0 1.0 0 0.0 0 0.0 0 0.0 -1.0115585327148438 0.09293714165687561 0.21605446934700012 -0.7775200605392456 -0.6288338899612427 -0.0 0.5807920694351196 0.5327289700508118 0 1.0 0 0.0 0 0.0 0 0.0 -1.4660025835037231 -0.016147807240486145 -0.2839455306529999 0.22385326027870178 -0.9746086001396179 -0.0 1.0243034362792969 0.6053946018218994 0 1.0 0 0.0 0 0.0 0 0.0 -1.4602450132369995 -0.014807567000389099 0.21605446934700012 0.2298654168844223 -0.9732047319412231 -0.0 0.5537964105606079 0.41352611780166626 0 1.0 0 0.0 0 0.0 0 0.0 -1.4660025835037231 -0.016147807240486145 0.21605446934700012 0.22385326027870178 -0.9746086001396179 -0.0 0.550125002861023 0.4111306071281433 0 1.0 0 0.0 0 0.0 0 0.0 0.2643401622772217 -0.1180596575140953 -0.2839455306529999 -0.8555864095687866 -0.5175939202308655 -0.0 0.07244819402694702 0.4490988850593567 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 -0.12518896162509918 0.21605446934700012 -0.8221076130867004 -0.5692922472953796 -0.0 0.38283199071884155 0.3046743869781494 0 1.0 0 0.0 0 0.0 0 0.0 0.2643401622772217 -0.1180596575140953 0.21605446934700012 -0.8555864095687866 -0.5175939202308655 -0.0 0.38138139247894287 0.31271225214004517 0 1.0 0 0.0 0 0.0 0 0.0 1.7826426029205322 -0.08415957540273666 -0.2839455306529999 0.9979247450828552 0.06414990872144699 -0.0 0.9724583625793457 0.6128637790679932 0 1.0 0 0.0 0 0.0 0 0.0 1.7824418544769287 -0.08052925020456314 0.21605446934700012 0.9988097548484802 0.04849391058087349 -0.0 0.49914538860321045 0.4541251063346863 0 1.0 0 0.0 0 0.0 0 0.0 1.7826426029205322 -0.08415957540273666 0.21605446934700012 0.9979247450828552 0.06414990872144699 -0.0 0.4992702007293701 0.44956737756729126 0 1.0 0 0.0 0 0.0 0 0.0 1.1610651016235352 0.13208264112472534 -0.2839455306529999 0.8058107495307922 0.5921201109886169 -0.0 0.8923484086990356 0.7048517465591431 0 1.0 0 0.0 0 0.0 0 0.0 1.1534152030944824 0.14162364602088928 0.21605446934700012 0.7547532320022583 0.6559648513793945 -0.0 0.5571272969245911 0.5719776153564453 0 1.0 0 0.0 0 0.0 0 0.0 1.1610651016235352 0.13208264112472534 0.21605446934700012 0.8058107495307922 0.5921201109886169 -0.0 0.5611436367034912 0.562463641166687 0 1.0 0 0.0 0 0.0 0 0.0 -1.0078662633895874 0.08798837661743164 -0.2839455306529999 -0.82668536901474 -0.5626392364501953 -0.0 0.9785283803939819 0.7129271030426025 0 1.0 0 0.0 0 0.0 0 0.0 -1.0044950246810913 0.0825410783290863 0.21605446934700012 -0.8707236051559448 -0.4917142391204834 -0.0 0.5854932069778442 0.5222377777099609 0 1.0 0 0.0 0 0.0 0 0.0 -1.0078662633895874 0.08798837661743164 0.21605446934700012 -0.82668536901474 -0.5626392364501953 -0.0 0.5832045078277588 0.5277668237686157 0 1.0 0 0.0 0 0.0 0 0.0 -1.4720665216445923 -0.017522096633911133 -0.2839455306529999 0.21842096745967865 -0.9758293628692627 -0.0 1.028309941291809 0.6032699346542358 0 1.0 0 0.0 0 0.0 0 0.0 -1.4660025835037231 -0.016147807240486145 0.21605446934700012 0.22385326027870178 -0.9746086001396179 -0.0 0.550125002861023 0.4111306071281433 0 1.0 0 0.0 0 0.0 0 0.0 -1.4720665216445923 -0.017522096633911133 0.21605446934700012 0.21842096745967865 -0.9758293628692627 -0.0 0.5462237000465393 0.40869390964508057 0 1.0 0 0.0 0 0.0 0 0.0 1.6833622455596924 -0.08349797874689102 -0.2839455306529999 -0.9996337890625 -0.026032287627458572 -0.0 0.03777933120727539 0.6112633943557739 0 1.0 0 0.0 0 0.0 0 0.0 1.6835591793060303 -0.09000702947378159 0.21605446934700012 -0.999359130859375 -0.03509628772735596 -0.0 0.4370885491371155 0.4473446011543274 0 1.0 0 0.0 0 0.0 0 0.0 1.6833622455596924 -0.08349797874689102 0.21605446934700012 -0.9996337890625 -0.026032287627458572 -0.0 0.4373648166656494 0.45516377687454224 0 1.0 0 0.0 0 0.0 0 0.0 0.8924548625946045 0.1350696086883545 -0.2839455306529999 -0.7825861573219299 0.6225165724754333 -0.0 0.07486656308174133 0.7167055606842041 0 1.0 0 0.0 0 0.0 0 0.0 0.8854057788848877 0.1255066990852356 0.21605446934700012 -0.82601398229599 0.5636158585548401 -0.0 0.4130285978317261 0.5623630285263062 0 1.0 0 0.0 0 0.0 0 0.0 0.8924548625946045 0.1350696086883545 0.21605446934700012 -0.7825861573219299 0.6225165724754333 -0.0 0.41697314381599426 0.571623682975769 0 1.0 0 0.0 0 0.0 0 0.0 0.4045145511627197 -0.11959449201822281 -0.2839455306529999 0.1660817265510559 0.9860835671424866 -0.0 0.9999364614486694 0.4362236261367798 0 1.0 0 0.0 0 0.0 0 0.0 0.39969849586486816 -0.11866410821676254 0.21605446934700012 0.2148503065109253 0.9766228199005127 -0.0 1.4648711681365967 0.27462226152420044 0 1.0 0 0.0 0 0.0 0 0.0 0.4045145511627197 -0.11959449201822281 0.21605446934700012 0.1660817265510559 0.9860835671424866 -0.0 1.4684172868728638 0.27312713861465454 0 1.0 0 0.0 0 0.0 0 0.0 -1.0044950246810913 0.0825410783290863 -0.2839455306529999 -0.8707236051559448 -0.4917142391204834 -0.0 0.9764478802680969 0.7065575122833252 0 1.0 0 0.0 0 0.0 0 0.0 -1.0014448165893555 0.07659512758255005 0.21605446934700012 -0.9058809280395508 -0.42347484827041626 -0.0 0.5876625180244446 0.5161285400390625 0 1.0 0 0.0 0 0.0 0 0.0 -1.0044950246810913 0.0825410783290863 0.21605446934700012 -0.8707236051559448 -0.4917142391204834 -0.0 0.5854932069778442 0.5222377777099609 0 1.0 0 0.0 0 0.0 0 0.0 -1.478436827659607 -0.018930450081825256 -0.2839455306529999 0.2135074883699417 -0.9769279956817627 -0.0 1.0325127840042114 0.601010799407959 0 1.0 0 0.0 0 0.0 0 0.0 -1.4720665216445923 -0.017522096633911133 0.21605446934700012 0.21842096745967865 -0.9758293628692627 -0.0 0.5462237000465393 0.40869390964508057 0 1.0 0 0.0 0 0.0 0 0.0 -1.478436827659607 -0.018930450081825256 0.21605446934700012 0.2135074883699417 -0.9769279956817627 -0.0 0.5420928001403809 0.4062280058860779 0 1.0 0 0.0 0 0.0 0 0.0 0.454451322555542 -0.11881612986326218 -0.2839455306529999 -0.1896725296974182 0.981841504573822 -0.0 0.9709254503250122 0.43594735860824585 0 1.0 0 0.0 0 0.0 0 0.0 0.44927024841308594 -0.11969178915023804 0.21605446934700012 -0.14542070031166077 0.9893490672111511 -0.0 0.502161979675293 0.2718232274055481 0 1.0 0 0.0 0 0.0 0 0.0 0.454451322555542 -0.11881612986326218 0.21605446934700012 -0.1896725296974182 0.981841504573822 -0.0 0.5060328841209412 0.27303242683410645 0 1.0 0 0.0 0 0.0 0 0.0 -1.6359747648239136 -0.018242090940475464 -0.2839455306529999 -0.7999511957168579 0.600054919719696 -0.0 0.12601065635681152 0.5748099088668823 0 1.0 0 0.0 0 0.0 0 0.0 -1.6387368440628052 -0.022116869688034058 0.21605446934700012 -0.8279671669006348 0.5607470870018005 -0.0 0.44565656781196594 0.4044862389564514 0 1.0 0 0.0 0 0.0 0 0.0 -1.6359747648239136 -0.018242090940475464 0.21605446934700012 -0.7999511957168579 0.600054919719696 -0.0 0.4472181797027588 0.4084261655807495 0 1.0 0 0.0 0 0.0 0 0.0 1.7828700542449951 -0.08726207166910172 -0.2839455306529999 0.9963072538375854 0.08566545695066452 -0.0 0.9723979234695435 0.6089496612548828 0 1.0 0 0.0 0 0.0 0 0.0 1.7826426029205322 -0.08415957540273666 0.21605446934700012 0.9979247450828552 0.06414990872144699 -0.0 0.4992702007293701 0.44956737756729126 0 1.0 0 0.0 0 0.0 0 0.0 1.7828700542449951 -0.08726207166910172 0.21605446934700012 0.9963072538375854 0.08566545695066452 -0.0 0.49941331148147583 0.4456617832183838 0 1.0 0 0.0 0 0.0 0 0.0 1.1680192947387695 0.12173163890838623 -0.2839455306529999 0.8518326282501221 0.5237891674041748 -0.0 0.8898118734359741 0.6929334402084351 0 1.0 0 0.0 0 0.0 0 0.0 1.1610651016235352 0.13208264112472534 0.21605446934700012 0.8058107495307922 0.5921201109886169 -0.0 0.5611436367034912 0.562463641166687 0 1.0 0 0.0 0 0.0 0 0.0 1.1680192947387695 0.12173163890838623 0.21605446934700012 0.8518326282501221 0.5237891674041748 -0.0 0.5648558139801025 0.5521864295005798 0 1.0 0 0.0 0 0.0 0 0.0 0.8854057788848877 0.1255066990852356 -0.2839455306529999 -0.82601398229599 0.5636158585548401 -0.0 0.07799184322357178 0.7057040929794312 0 1.0 0 0.0 0 0.0 0 0.0 0.8790280818939209 0.11538678407669067 0.21605446934700012 -0.8645283579826355 0.5025787949562073 -0.0 0.4093787670135498 0.5525389909744263 0 1.0 0 0.0 0 0.0 0 0.0 0.8854057788848877 0.1255066990852356 0.21605446934700012 -0.82601398229599 0.5636158585548401 -0.0 0.4130285978317261 0.5623630285263062 0 1.0 0 0.0 0 0.0 0 0.0 -1.2162116765975952 0.1387108862400055 -0.2839455306529999 -0.7923825979232788 0.6100039482116699 -0.0 0.13128799200057983 0.7309117317199707 0 1.0 0 0.0 0 0.0 0 0.0 -1.2226988077163696 0.12956392765045166 0.21605446934700012 -0.8371227383613586 0.5469832420349121 -0.0 0.46431317925453186 0.5503852367401123 0 1.0 0 0.0 0 0.0 0 0.0 -1.2162116765975952 0.1387108862400055 0.21605446934700012 -0.7923825979232788 0.6100039482116699 -0.0 0.4676472246646881 0.5594847202301025 0 1.0 0 0.0 0 0.0 0 0.0 1.7831242084503174 -0.08983674645423889 -0.2839455306529999 0.9931027889251709 0.11709952354431152 -0.0 0.9723045825958252 0.6056911945343018 0 1.0 0 0.0 0 0.0 0 0.0 1.7828700542449951 -0.08726207166910172 0.21605446934700012 0.9963072538375854 0.08566545695066452 -0.0 0.49941331148147583 0.4456617832183838 0 1.0 0 0.0 0 0.0 0 0.0 1.7831242084503174 -0.08983674645423889 0.21605446934700012 0.9931027889251709 0.11709952354431152 -0.0 0.4995746612548828 0.4424140453338623 0 1.0 0 0.0 0 0.0 0 0.0 0.4095447063446045 -0.12031812220811844 -0.2839455306529999 0.12024292349815369 0.9927365779876709 -0.0 0.9970248341560364 0.43528419733047485 0 1.0 0 0.0 0 0.0 0 0.0 0.4045145511627197 -0.11959449201822281 0.21605446934700012 0.1660817265510559 0.9860835671424866 -0.0 1.4684172868728638 0.27312713861465454 0 1.0 0 0.0 0 0.0 0 0.0 0.4095447063446045 -0.12031812220811844 0.21605446934700012 0.12024292349815369 0.9927365779876709 -0.0 1.4721579551696777 0.27190256118774414 0 1.0 0 0.0 0 0.0 0 0.0 -1.4851137399673462 -0.020372852683067322 -0.2839455306529999 0.21283608675003052 -0.9770805835723877 -0.0 1.0369054079055786 0.59861159324646 0 1.0 0 0.0 0 0.0 0 0.0 -1.478436827659607 -0.018930450081825256 0.21605446934700012 0.2135074883699417 -0.9769279956817627 -0.0 0.5420928001403809 0.4062280058860779 0 1.0 0 0.0 0 0.0 0 0.0 -1.4851137399673462 -0.020372852683067322 0.21605446934700012 0.21283608675003052 -0.9770805835723877 -0.0 0.5377336740493774 0.4037465453147888 0 1.0 0 0.0 0 0.0 0 0.0 0.44927024841308594 -0.11969178915023804 -0.2839455306529999 -0.14542070031166077 0.9893490672111511 -0.0 0.9739395380020142 0.43506962060928345 0 1.0 0 0.0 0 0.0 0 0.0 0.44382667541503906 -0.12037285417318344 0.21605446934700012 -0.10455641150474548 0.9945066571235657 -0.0 0.49806731939315796 0.27089667320251465 0 1.0 0 0.0 0 0.0 0 0.0 0.44927024841308594 -0.11969178915023804 0.21605446934700012 -0.14542070031166077 0.9893490672111511 -0.0 0.502161979675293 0.2718232274055481 0 1.0 0 0.0 0 0.0 0 0.0 1.783405065536499 -0.0918835923075676 -0.2839455306529999 0.9859004616737366 0.1672719568014145 -0.0 0.9721783995628357 0.6030924320220947 0 1.0 0 0.0 0 0.0 0 0.0 1.7831242084503174 -0.08983674645423889 0.21605446934700012 0.9931027889251709 0.11709952354431152 -0.0 0.4995746612548828 0.4424140453338623 0 1.0 0 0.0 0 0.0 0 0.0 1.783405065536499 -0.0918835923075676 0.21605446934700012 0.9859004616737366 0.1672719568014145 -0.0 0.4997541606426239 0.4398283362388611 0 1.0 0 0.0 0 0.0 0 0.0 1.0230786800384521 0.12097030878067017 -0.2839455306529999 0.06277657300233841 -0.9980162978172302 -0.0 0.9850102663040161 0.7255008220672607 0 1.0 0 0.0 0 0.0 0 0.0 1.0283715724945068 0.12113326787948608 0.21605446934700012 -0.0001831110566854477 -0.999969482421875 -0.0 0.49023085832595825 0.5616816878318787 0 1.0 0 0.0 0 0.0 0 0.0 1.0230786800384521 0.12097030878067017 0.21605446934700012 0.06277657300233841 -0.9980162978172302 -0.0 0.4871401786804199 0.5616525411605835 0 1.0 0 0.0 0 0.0 0 0.0 -1.0648301839828491 0.12093746662139893 -0.2839455306529999 -0.06741538643836975 -0.9977111220359802 -0.0 1.0206077098846436 0.7527838349342346 0 1.0 0 0.0 0 0.0 0 0.0 -1.0590872764587402 0.12035006284713745 0.21605446934700012 -0.13760796189308167 -0.9904782176017761 -0.0 0.5524991154670715 0.5583648085594177 0 1.0 0 0.0 0 0.0 0 0.0 -1.0648301839828491 0.12093746662139893 0.21605446934700012 -0.06741538643836975 -0.9977111220359802 -0.0 0.549224317073822 0.5586365461349487 0 1.0 0 0.0 0 0.0 0 0.0 -1.4917467832565308 -0.021829843521118164 -0.2839455306529999 0.22058779001235962 -0.9753410220146179 -0.0 0.04124736785888672 0.5961276888847351 0 1.0 0 0.0 0 0.0 0 0.0 -1.4851137399673462 -0.020372852683067322 0.21605446934700012 0.21283608675003052 -0.9770805835723877 -0.0 0.5377336740493774 0.4037465453147888 0 1.0 0 0.0 0 0.0 0 0.0 -1.4917467832565308 -0.021829843521118164 0.21605446934700012 0.22058779001235962 -0.9753410220146179 -0.0 0.5333826541900635 0.40131789445877075 0 1.0 0 0.0 0 0.0 0 0.0 1.6835591793060303 -0.09000702947378159 -0.2839455306529999 -0.999359130859375 -0.03509628772735596 -0.0 0.037410229444503784 0.6034562587738037 0 1.0 0 0.0 0 0.0 0 0.0 1.6837999820709229 -0.0960296019911766 0.21605446934700012 -0.9989318251609802 -0.045625172555446625 -0.0 0.4368642568588257 0.4400756359100342 0 1.0 0 0.0 0 0.0 0 0.0 1.6835591793060303 -0.09000702947378159 0.21605446934700012 -0.999359130859375 -0.03509628772735596 -0.0 0.4370885491371155 0.4473446011543274 0 1.0 0 0.0 0 0.0 0 0.0 -1.2226988077163696 0.12956392765045166 -0.2839455306529999 -0.8371227383613586 0.5469832420349121 -0.0 0.13340923190116882 0.7201611995697021 0 1.0 0 0.0 0 0.0 0 0.0 -1.228568196296692 0.11978697776794434 0.21605446934700012 -0.8756370544433594 0.4829248785972595 -0.0 0.4612388014793396 0.5406763553619385 0 1.0 0 0.0 0 0.0 0 0.0 -1.2226988077163696 0.12956392765045166 0.21605446934700012 -0.8371227383613586 0.5469832420349121 -0.0 0.46431317925453186 0.5503852367401123 0 1.0 0 0.0 0 0.0 0 0.0 0.41478896141052246 -0.12083500623703003 -0.2839455306529999 0.07739493995904922 0.9969786405563354 -0.0 0.9939851760864258 0.43456918001174927 0 1.0 0 0.0 0 0.0 0 0.0 0.4095447063446045 -0.12031812220811844 0.21605446934700012 0.12024292349815369 0.9927365779876709 -0.0 1.4721579551696777 0.27190256118774414 0 1.0 0 0.0 0 0.0 0 0.0 0.41478896141052246 -0.12083500623703003 0.21605446934700012 0.07739493995904922 0.9969786405563354 -0.0 1.4760892391204834 0.27096086740493774 0 1.0 0 0.0 0 0.0 0 0.0 -1.4979859590530396 -0.023281976580619812 -0.2839455306529999 0.23349711298942566 -0.9723502397537231 -0.0 0.045302391052246094 0.5936297178268433 0 1.0 0 0.0 0 0.0 0 0.0 -1.4917467832565308 -0.021829843521118164 0.21605446934700012 0.22058779001235962 -0.9753410220146179 -0.0 0.5333826541900635 0.40131789445877075 0 1.0 0 0.0 0 0.0 0 0.0 -1.4979859590530396 -0.023281976580619812 0.21605446934700012 0.23349711298942566 -0.9723502397537231 -0.0 0.5292789340019226 0.3989958167076111 0 1.0 0 0.0 0 0.0 0 0.0 0.44382667541503906 -0.12037285417318344 -0.2839455306529999 -0.10455641150474548 0.9945066571235657 -0.0 0.9771062135696411 0.43441450595855713 0 1.0 0 0.0 0 0.0 0 0.0 0.43812036514282227 -0.12085933238267899 0.21605446934700012 -0.06689657270908356 0.9977416396141052 -0.0 0.4937538802623749 0.2702690362930298 0 1.0 0 0.0 0 0.0 0 0.0 0.44382667541503906 -0.12037285417318344 0.21605446934700012 -0.10455641150474548 0.9945066571235657 -0.0 0.49806731939315796 0.27089667320251465 0 1.0 0 0.0 0 0.0 0 0.0 1.0283715724945068 0.12113326787948608 -0.2839455306529999 -0.0001831110566854477 -1.0 -0.0 0.9810165762901306 0.7254688739776611 0 1.0 0 0.0 0 0.0 0 0.0 1.0333290100097656 0.12097880244255066 0.21605446934700012 -0.0633259043097496 -0.9979857802391052 -0.0 0.4931207001209259 0.5613721013069153 0 1.0 0 0.0 0 0.0 0 0.0 1.0283715724945068 0.12113326787948608 0.21605446934700012 -0.0001831110566854477 -0.999969482421875 -0.0 0.49023085832595825 0.5616816878318787 0 1.0 0 0.0 0 0.0 0 0.0 -1.6387368440628052 -0.022116869688034058 -0.2839455306529999 -0.8279671669006348 0.5607470870018005 -0.0 0.1268201470375061 0.570122480392456 0 1.0 0 0.0 0 0.0 0 0.0 -1.6413308382034302 -0.026152193546295166 0.21605446934700012 -0.8537247776985168 0.52067631483078 -0.0 0.44416937232017517 0.4004032611846924 0 1.0 0 0.0 0 0.0 0 0.0 -1.6387368440628052 -0.022116869688034058 0.21605446934700012 -0.8279671669006348 0.5607470870018005 -0.0 0.44565656781196594 0.4044862389564514 0 1.0 0 0.0 0 0.0 0 0.0 1.78371262550354 -0.09340262413024902 -0.2839455306529999 0.9713736176490784 0.2374339997768402 -0.0 0.9720193147659302 0.6011558771133423 0 1.0 0 0.0 0 0.0 0 0.0 1.783405065536499 -0.0918835923075676 0.21605446934700012 0.9859004616737366 0.1672719568014145 -0.0 0.4997541606426239 0.4398283362388611 0 1.0 0 0.0 0 0.0 0 0.0 1.78371262550354 -0.09340262413024902 0.21605446934700012 0.9713736176490784 0.2374339997768402 -0.0 0.4999516010284424 0.43790704011917114 0 1.0 0 0.0 0 0.0 0 0.0 -1.0707529783248901 0.12113326787948608 -0.2839455306529999 0.0002441480755805969 -0.999969482421875 -0.0 1.0253300666809082 0.7529829144477844 0 1.0 0 0.0 0 0.0 0 0.0 -1.0648301839828491 0.12093746662139893 0.21605446934700012 -0.06741538643836975 -0.9977111220359802 -0.0 0.549224317073822 0.5586365461349487 0 1.0 0 0.0 0 0.0 0 0.0 -1.0707529783248901 0.12113326787948608 0.21605446934700012 0.0002441480755805969 -1.0 -0.0 0.5458582043647766 0.558487057685852 0 1.0 0 0.0 0 0.0 0 0.0 1.7840678691864014 -0.09463948756456375 -0.2839455306529999 0.9525132179260254 0.30448317527770996 -0.0 0.9718208312988281 0.5995715856552124 0 1.0 0 0.0 0 0.0 0 0.0 1.78371262550354 -0.09340262413024902 0.21605446934700012 0.9713736176490784 0.2374339997768402 -0.0 0.4999516010284424 0.43790704011917114 0 1.0 0 0.0 0 0.0 0 0.0 1.7840678691864014 -0.09463948756456375 0.21605446934700012 0.9525132179260254 0.30448317527770996 -0.0 0.5001802444458008 0.4363413453102112 0 1.0 0 0.0 0 0.0 0 0.0 0.42024731636047363 -0.12114513665437698 -0.2839455306529999 0.03747672960162163 0.999267578125 -0.0 0.9908171892166138 0.434081494808197 0 1.0 0 0.0 0 0.0 0 0.0 0.41478896141052246 -0.12083500623703003 0.21605446934700012 0.07739493995904922 0.9969786405563354 -0.0 1.4760892391204834 0.27096086740493774 0 1.0 0 0.0 0 0.0 0 0.0 0.42024731636047363 -0.12114513665437698 0.21605446934700012 0.03747672960162163 0.999267578125 -0.0 1.4802062511444092 0.27031534910202026 0 1.0 0 0.0 0 0.0 0 0.0 1.1742777824401855 0.11057066917419434 -0.2839455306529999 0.8901638984680176 0.45558029413223267 -0.0 0.8878135681152344 0.680391788482666 0 1.0 0 0.0 0 0.0 0 0.0 1.1680192947387695 0.12173163890838623 0.21605446934700012 0.8518326282501221 0.5237891674041748 -0.0 0.5648558139801025 0.5521864295005798 0 1.0 0 0.0 0 0.0 0 0.0 1.1742777824401855 0.11057066917419434 0.21605446934700012 0.8901638984680176 0.45558029413223267 -0.0 0.5682803988456726 0.5411200523376465 0 1.0 0 0.0 0 0.0 0 0.0 -1.0765116214752197 0.12093991041183472 -0.2839455306529999 0.06833094358444214 -0.9976500868797302 -0.0 1.0299208164215088 0.7526613473892212 0 1.0 0 0.0 0 0.0 0 0.0 -1.0707529783248901 0.12113326787948608 0.21605446934700012 0.0002441480755805969 -1.0 -0.0 0.5458582043647766 0.558487057685852 0 1.0 0 0.0 0 0.0 0 0.0 -1.0765116214752197 0.12093991041183472 0.21605446934700012 0.06833094358444214 -0.9976500868797302 -0.0 0.542594313621521 0.5579367280006409 0 1.0 0 0.0 0 0.0 0 0.0 -1.503830909729004 -0.024729236960411072 -0.2839455306529999 0.24808496236801147 -0.9687185287475586 -0.0 0.049069106578826904 0.591133713722229 0 1.0 0 0.0 0 0.0 0 0.0 -1.4979859590530396 -0.023281976580619812 0.21605446934700012 0.23349711298942566 -0.9723502397537231 -0.0 0.5292789340019226 0.3989958167076111 0 1.0 0 0.0 0 0.0 0 0.0 -1.503830909729004 -0.024729236960411072 0.21605446934700012 0.24808496236801147 -0.9687185287475586 -0.0 0.5254290699958801 0.39677244424819946 0 1.0 0 0.0 0 0.0 0 0.0 0.43812036514282227 -0.12085933238267899 -0.2839455306529999 -0.06689657270908356 0.9977416396141052 -0.0 0.9804256558418274 0.43398576974868774 0 1.0 0 0.0 0 0.0 0 0.0 0.43215131759643555 -0.12115121632814407 0.21605446934700012 -0.032227545976638794 0.99945068359375 -0.0 0.48922884464263916 0.2699575424194336 0 1.0 0 0.0 0 0.0 0 0.0 0.43812036514282227 -0.12085933238267899 0.21605446934700012 -0.06689657270908356 0.9977416396141052 -0.0 0.4937538802623749 0.2702690362930298 0 1.0 0 0.0 0 0.0 0 0.0 1.0333290100097656 0.12097880244255066 -0.2839455306529999 -0.0633259043097496 -0.9979857802391052 -0.0 0.9772898554801941 0.725033164024353 0 1.0 0 0.0 0 0.0 0 0.0 1.0381596088409424 0.12051543593406677 0.21605446934700012 -0.12878811359405518 -0.9916684627532959 -0.0 0.4959324598312378 0.5607290267944336 0 1.0 0 0.0 0 0.0 0 0.0 1.0333290100097656 0.12097880244255066 0.21605446934700012 -0.0633259043097496 -0.9979857802391052 -0.0 0.4931207001209259 0.5613721013069153 0 1.0 0 0.0 0 0.0 0 0.0 1.7844913005828857 -0.09583986550569534 -0.2839455306529999 0.9325845837593079 0.36088138818740845 -0.0 0.9715766310691833 0.5980284214019775 0 1.0 0 0.0 0 0.0 0 0.0 1.7840678691864014 -0.09463948756456375 0.21605446934700012 0.9525132179260254 0.30448317527770996 -0.0 0.5001802444458008 0.4363413453102112 0 1.0 0 0.0 0 0.0 0 0.0 1.7844913005828857 -0.09583986550569534 0.21605446934700012 0.9325845837593079 0.36088138818740845 -0.0 0.5004534125328064 0.43482106924057007 0 1.0 0 0.0 0 0.0 0 0.0 -1.082112193107605 0.12035977840423584 -0.2839455306529999 0.13904233276844025 -0.9902645945549011 -0.0 1.034368634223938 0.7518304586410522 0 1.0 0 0.0 0 0.0 0 0.0 -1.0765116214752197 0.12093991041183472 0.21605446934700012 0.06833094358444214 -0.9976500868797302 -0.0 0.542594313621521 0.5579367280006409 0 1.0 0 0.0 0 0.0 0 0.0 -1.082112193107605 0.12035977840423584 0.21605446934700012 0.13904233276844025 -0.9902645945549011 -0.0 0.5394285321235657 0.5569874048233032 0 1.0 0 0.0 0 0.0 0 0.0 -1.509281873703003 -0.026171639561653137 -0.2839455306529999 0.26462599635124207 -0.964323878288269 -0.0 0.05254825949668884 0.5886538028717041 0 1.0 0 0.0 0 0.0 0 0.0 -1.503830909729004 -0.024729236960411072 0.21605446934700012 0.24808496236801147 -0.9687185287475586 -0.0 0.5254290699958801 0.39677244424819946 0 1.0 0 0.0 0 0.0 0 0.0 -1.509281873703003 -0.026171639561653137 0.21605446934700012 0.26462599635124207 -0.964323878288269 -0.0 0.5218374133110046 0.39463919401168823 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.024926260113716125 -0.2839455306529999 -0.999969482421875 0.0023194067180156708 -0.0 0.9976115226745605 0.5954424738883972 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252455234527588 -0.030664265155792236 0.21605446934700012 -0.99993896484375 0.009704886004328728 -0.0 0.5774822235107422 0.39922070503234863 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.024926260113716125 0.21605446934700012 -0.999969482421875 0.0023194067180156708 -0.0 0.5769625306129456 0.40624701976776123 0 1.0 0 0.0 0 0.0 0 0.0 1.784982442855835 -0.0970037579536438 -0.2839455306529999 0.9089937806129456 0.41679129004478455 -0.0 0.9712873697280884 0.5965265035629272 0 1.0 0 0.0 0 0.0 0 0.0 1.7844913005828857 -0.09583986550569534 0.21605446934700012 0.9325845837593079 0.36088138818740845 -0.0 0.5004534125328064 0.43482106924057007 0 1.0 0 0.0 0 0.0 0 0.0 1.784982442855835 -0.0970037579536438 0.21605446934700012 0.9089937806129456 0.41679129004478455 -0.0 0.5007707476615906 0.4333465099334717 0 1.0 0 0.0 0 0.0 0 0.0 0.4259195327758789 -0.1212485134601593 -0.2839455306529999 0.0012817773967981339 0.999969482421875 -0.0 0.9875213503837585 0.4338241219520569 0 1.0 0 0.0 0 0.0 0 0.0 0.42024731636047363 -0.12114513665437698 0.21605446934700012 0.03747672960162163 0.999267578125 -0.0 1.4802062511444092 0.27031534910202026 0 1.0 0 0.0 0 0.0 0 0.0 0.4259195327758789 -0.1212485134601593 0.21605446934700012 0.0012817773967981339 0.999969482421875 -0.0 1.484501600265503 0.2699793577194214 0 1.0 0 0.0 0 0.0 0 0.0 1.0179414749145508 0.12048140168190002 -0.2839455306529999 0.1281472146511078 -0.9917294979095459 -0.0 0.9888919591903687 0.7250957489013672 0 1.0 0 0.0 0 0.0 0 0.0 1.0230786800384521 0.12097030878067017 0.21605446934700012 0.06277657300233841 -0.9980162978172302 -0.0 1.48714017868042 0.5616525411605835 0 1.0 0 0.0 0 0.0 0 0.0 1.0179414749145508 0.12048140168190002 0.21605446934700012 0.1281472146511078 -0.9917294979095459 -0.0 1.484134554862976 0.5612612962722778 0 1.0 0 0.0 0 0.0 0 0.0 -1.087554693222046 0.11939290165901184 -0.2839455306529999 0.21167638897895813 -0.9773247241973877 -0.0 1.0386587381362915 0.7504989504814148 0 1.0 0 0.0 0 0.0 0 0.0 -1.082112193107605 0.12035977840423584 0.21605446934700012 0.13904233276844025 -0.9902645945549011 -0.0 0.5394285321235657 0.5569874048233032 0 1.0 0 0.0 0 0.0 0 0.0 -1.087554693222046 0.11939290165901184 0.21605446934700012 0.21167638897895813 -0.9773247241973877 -0.0 0.5363602638244629 0.5556380748748779 0 1.0 0 0.0 0 0.0 0 0.0 1.6837999820709229 -0.0960296019911766 -0.2839455306529999 -0.9989318251609802 -0.045625172555446625 -0.0 0.03703737258911133 0.5962085127830505 0 1.0 0 0.0 0 0.0 0 0.0 1.6840846538543701 -0.10156569629907608 0.21605446934700012 -0.9982909560203552 -0.05813775956630707 -0.0 0.43669307231903076 0.4333688020706177 0 1.0 0 0.0 0 0.0 0 0.0 1.6837999820709229 -0.0960296019911766 0.21605446934700012 -0.9989318251609802 -0.045625172555446625 -0.0 0.4368642568588257 0.4400756359100342 0 1.0 0 0.0 0 0.0 0 0.0 0.43215131759643555 -0.12115121632814407 -0.2839455306529999 -0.032227545976638794 0.99945068359375 -0.0 0.9838976860046387 0.43378758430480957 0 1.0 0 0.0 0 0.0 0 0.0 0.4259195327758789 -0.1212485134601593 0.21605446934700012 0.0012817773967981339 0.999969482421875 -0.0 1.484501600265503 0.2699793577194214 0 1.0 0 0.0 0 0.0 0 0.0 0.43215131759643555 -0.12115121632814407 0.21605446934700012 -0.032227545976638794 0.99945068359375 -0.0 0.48922884464263916 0.2699575424194336 0 1.0 0 0.0 0 0.0 0 0.0 1.0381596088409424 0.12051543593406677 -0.2839455306529999 -0.12878811359405518 -0.9916684627532959 -0.0 0.9736800193786621 0.7242040634155273 0 1.0 0 0.0 0 0.0 0 0.0 1.0428638458251953 0.11974316835403442 0.21605446934700012 -0.19602037966251373 -0.9805902242660522 -0.0 0.49866729974746704 0.5597536563873291 0 1.0 0 0.0 0 0.0 0 0.0 1.0381596088409424 0.12051543593406677 0.21605446934700012 -0.12878811359405518 -0.9916684627532959 -0.0 0.4959324598312378 0.5607290267944336 0 1.0 0 0.0 0 0.0 0 0.0 -1.228568196296692 0.11978697776794434 -0.2839455306529999 -0.8756370544433594 0.4829248785972595 -0.0 0.1350199580192566 0.7089823484420776 0 1.0 0 0.0 0 0.0 0 0.0 -1.2338197231292725 0.10938003659248352 0.21605446934700012 -0.9079561829566956 0.4190496504306793 -0.0 0.45841383934020996 0.530331015586853 0 1.0 0 0.0 0 0.0 0 0.0 -1.228568196296692 0.11978697776794434 0.21605446934700012 -0.8756370544433594 0.4829248785972595 -0.0 0.4612388014793396 0.5406763553619385 0 1.0 0 0.0 0 0.0 0 0.0 -1.6413308382034302 -0.026152193546295166 -0.2839455306529999 -0.8537247776985168 0.52067631483078 -0.0 0.12751969695091248 0.5653431415557861 0 1.0 0 0.0 0 0.0 0 0.0 -1.6437366008758545 -0.03031519055366516 0.21605446934700012 -0.8774986863136292 0.47950682044029236 -0.0 0.44276612997055054 0.396209716796875 0 1.0 0 0.0 0 0.0 0 0.0 -1.6413308382034302 -0.026152193546295166 0.21605446934700012 -0.8537247776985168 0.52067631483078 -0.0 0.44416937232017517 0.4004032611846924 0 1.0 0 0.0 0 0.0 0 0.0 1.7855417728424072 -0.09813116490840912 -0.2839455306529999 0.8817102313041687 0.47172459959983826 -0.0 0.9709528684616089 0.5950659513473511 0 1.0 0 0.0 0 0.0 0 0.0 1.784982442855835 -0.0970037579536438 0.21605446934700012 0.9089937806129456 0.41679129004478455 -0.0 0.5007707476615906 0.4333465099334717 0 1.0 0 0.0 0 0.0 0 0.0 1.7855417728424072 -0.09813116490840912 0.21605446934700012 0.8817102313041687 0.47172459959983826 -0.0 0.5011327862739563 0.43191802501678467 0 1.0 0 0.0 0 0.0 0 0.0 1.0129599571228027 0.11966654658317566 -0.2839455306529999 0.19583727419376373 -0.9806207418441772 -0.0 0.9926527738571167 0.7242611050605774 0 1.0 0 0.0 0 0.0 0 0.0 1.0179414749145508 0.12048140168190002 0.21605446934700012 0.1281472146511078 -0.9917294979095459 -0.0 1.484134554862976 0.5612612962722778 0 1.0 0 0.0 0 0.0 0 0.0 1.0129599571228027 0.11966654658317566 0.21605446934700012 0.19583727419376373 -0.9806207418441772 -0.0 1.4812134504318237 0.5605089664459229 0 1.0 0 0.0 0 0.0 0 0.0 -1.092839002609253 0.11803928017616272 -0.2839455306529999 0.2850123643875122 -0.9584948420524597 -0.0 0.0427783727645874 0.7486751079559326 0 1.0 0 0.0 0 0.0 0 0.0 -1.087554693222046 0.11939290165901184 0.21605446934700012 0.21167638897895813 -0.9773247241973877 -0.0 0.5363602638244629 0.5556380748748779 0 1.0 0 0.0 0 0.0 0 0.0 -1.092839002609253 0.11803928017616272 0.21605446934700012 0.2850123643875122 -0.9584948420524597 -0.0 0.5333884954452515 0.553887128829956 0 1.0 0 0.0 0 0.0 0 0.0 -1.5143388509750366 -0.027609169483184814 -0.2839455306529999 0.28357797861099243 -0.9589220881462097 -0.0 0.05574190616607666 0.5862020254135132 0 1.0 0 0.0 0 0.0 0 0.0 -1.509281873703003 -0.026171639561653137 0.21605446934700012 0.26462599635124207 -0.964323878288269 -0.0 0.5218374133110046 0.39463919401168823 0 1.0 0 0.0 0 0.0 0 0.0 -1.5143388509750366 -0.027609169483184814 0.21605446934700012 0.28357797861099243 -0.9589220881462097 -0.0 0.5185067653656006 0.39258718490600586 0 1.0 0 0.0 0 0.0 0 0.0 0.5761044025421143 -0.12946023046970367 -0.2839455306529999 0.8250373601913452 -0.5650196671485901 -0.0 0.9081569910049438 0.431171178817749 0 1.0 0 0.0 0 0.0 0 0.0 0.5805556774139404 -0.12243308126926422 0.21605446934700012 0.8640400171279907 -0.503372311592102 -0.0 0.5865741968154907 0.2985714077949524 0 1.0 0 0.0 0 0.0 0 0.0 0.5761044025421143 -0.12946023046970367 0.21605446934700012 0.8250373601913452 -0.5650196671485901 -0.0 0.5848962068557739 0.2907968759536743 0 1.0 0 0.0 0 0.0 0 0.0 1.0428638458251953 0.11974316835403442 -0.2839455306529999 -0.19602037966251373 -0.9805902242660522 -0.0 0.9701930284500122 0.7229883670806885 0 1.0 0 0.0 0 0.0 0 0.0 1.0474414825439453 0.11866196990013123 0.21605446934700012 -0.2641376852989197 -0.964476466178894 -0.0 0.5013262033462524 0.5584465265274048 0 1.0 0 0.0 0 0.0 0 0.0 1.0428638458251953 0.11974316835403442 0.21605446934700012 -0.19602037966251373 -0.9805902242660522 -0.0 0.49866729974746704 0.5597536563873291 0 1.0 0 0.0 0 0.0 0 0.0 1.7861692905426025 -0.0992220863699913 -0.2839455306529999 0.8511307239532471 0.5248878598213196 -0.0 0.9705733060836792 0.5936467051506042 0 1.0 0 0.0 0 0.0 0 0.0 1.7855417728424072 -0.09813116490840912 0.21605446934700012 0.8817102313041687 0.47172459959983826 -0.0 0.5011327862739563 0.43191802501678467 0 1.0 0 0.0 0 0.0 0 0.0 1.7861692905426025 -0.0992220863699913 0.21605446934700012 0.8511307239532471 0.5248878598213196 -0.0 0.5015394687652588 0.43053603172302246 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 -0.12518896162509918 -0.2839455306529999 -0.8221076130867004 -0.5692922472953796 -0.0 0.07005178928375244 0.4421687126159668 0 1.0 0 0.0 0 0.0 0 0.0 0.2740015983581543 -0.1320118010044098 0.21605446934700012 -0.7854243516921997 -0.6189458966255188 -0.0 0.38457003235816956 0.29679185152053833 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 -0.12518896162509918 0.21605446934700012 -0.8221076130867004 -0.5692922472953796 -0.0 0.38283199071884155 0.3046743869781494 0 1.0 0 0.0 0 0.0 0 0.0 -1.0979652404785156 0.11629891395568848 -0.2839455306529999 0.3577989935874939 -0.9337748289108276 -0.0 0.04671713709831238 0.7463663816452026 0 1.0 0 0.0 0 0.0 0 0.0 -1.092839002609253 0.11803928017616272 0.21605446934700012 0.2850123643875122 -0.9584948420524597 -0.0 0.5333884954452515 0.553887128829956 0 1.0 0 0.0 0 0.0 0 0.0 -1.0979652404785156 0.11629891395568848 0.21605446934700012 0.3577989935874939 -0.9337748289108276 -0.0 0.5305119752883911 0.5517319440841675 0 1.0 0 0.0 0 0.0 0 0.0 -1.5190016031265259 -0.029041841626167297 -0.2839455306529999 0.30545976758003235 -0.9521775245666504 -0.0 0.05865311622619629 0.5837885141372681 0 1.0 0 0.0 0 0.0 0 0.0 -1.5143388509750366 -0.027609169483184814 0.21605446934700012 0.28357797861099243 -0.9589220881462097 -0.0 0.5185067653656006 0.39258718490600586 0 1.0 0 0.0 0 0.0 0 0.0 -1.5190016031265259 -0.029041841626167297 0.21605446934700012 0.30545976758003235 -0.9521775245666504 -0.0 0.5154390335083008 0.39060717821121216 0 1.0 0 0.0 0 0.0 0 0.0 1.786864995956421 -0.10027652233839035 -0.2839455306529999 0.8176214098930359 0.5757316946983337 -0.0 0.9701488018035889 0.5922689437866211 0 1.0 0 0.0 0 0.0 0 0.0 1.7861692905426025 -0.0992220863699913 0.21605446934700012 0.8511307239532471 0.5248878598213196 -0.0 0.5015394687652588 0.43053603172302246 0 1.0 0 0.0 0 0.0 0 0.0 1.786864995956421 -0.10027652233839035 0.21605446934700012 0.8176214098930359 0.5757011771202087 -0.0 0.5019909143447876 0.4292007088661194 0 1.0 0 0.0 0 0.0 0 0.0 1.008134126663208 0.11852577328681946 -0.2839455306529999 0.26499220728874207 -0.964232325553894 -0.0 0.9962847232818604 0.7230038642883301 0 1.0 0 0.0 0 0.0 0 0.0 1.0129599571228027 0.11966654658317566 0.21605446934700012 0.19583727419376373 -0.9806207418441772 -0.0 1.4812134504318237 0.5605089664459229 0 1.0 0 0.0 0 0.0 0 0.0 1.008134126663208 0.11852577328681946 0.21605446934700012 0.26499220728874207 -0.964232325553894 -0.0 1.478376030921936 0.5593962669372559 0 1.0 0 0.0 0 0.0 0 0.0 -1.102933406829834 0.11417180299758911 -0.2839455306529999 0.4286935031414032 -0.903439462184906 -0.0 0.050466328859329224 0.7435793876647949 0 1.0 0 0.0 0 0.0 0 0.0 -1.0979652404785156 0.11629891395568848 0.21605446934700012 0.3577989935874939 -0.9337748289108276 -0.0 0.5305119752883911 0.5517319440841675 0 1.0 0 0.0 0 0.0 0 0.0 -1.102933406829834 0.11417180299758911 0.21605446934700012 0.4286935031414032 -0.903439462184906 -0.0 0.5277293920516968 0.5491690635681152 0 1.0 0 0.0 0 0.0 0 0.0 -1.5232704877853394 -0.030469655990600586 -0.2839455306529999 0.33097323775291443 -0.9436323046684265 -0.0 0.06128603219985962 0.5814216136932373 0 1.0 0 0.0 0 0.0 0 0.0 -1.5190016031265259 -0.029041841626167297 0.21605446934700012 0.30545976758003235 -0.9521775245666504 -0.0 0.5154390335083008 0.39060717821121216 0 1.0 0 0.0 0 0.0 0 0.0 -1.5232704877853394 -0.030469655990600586 0.21605446934700012 0.33097323775291443 -0.9436323046684265 -0.0 0.5126344561576843 0.38869017362594604 0 1.0 0 0.0 0 0.0 0 0.0 0.5710597038269043 -0.13628791272640228 -0.2839455306529999 0.7834406495094299 -0.6214483976364136 -0.0 0.9108988046646118 0.4247055649757385 0 1.0 0 0.0 0 0.0 0 0.0 0.5761044025421143 -0.12946023046970367 0.21605446934700012 0.8250373601913452 -0.5650196671485901 -0.0 0.5848962068557739 0.2907968759536743 0 1.0 0 0.0 0 0.0 0 0.0 0.5710597038269043 -0.13628791272640228 0.21605446934700012 0.7834406495094299 -0.6214483976364136 -0.0 0.5828356146812439 0.2830563187599182 0 1.0 0 0.0 0 0.0 0 0.0 1.0474414825439453 0.11866196990013123 -0.2839455306529999 -0.2641376852989197 -0.964476466178894 -0.0 0.9668347239494324 0.7213927507400513 0 1.0 0 0.0 0 0.0 0 0.0 1.0518927574157715 0.11727187037467957 0.21605446934700012 -0.3320719003677368 -0.9432355761528015 -0.0 0.503910481929779 0.5568075776100159 0 1.0 0 0.0 0 0.0 0 0.0 1.0474414825439453 0.11866196990013123 0.21605446934700012 -0.2641376852989197 -0.964476466178894 -0.0 0.5013262033462524 0.5584465265274048 0 1.0 0 0.0 0 0.0 0 0.0 -1.6437366008758545 -0.03031519055366516 -0.2839455306529999 -0.8774986863136292 0.47950682044029236 -0.0 0.1281072497367859 0.5605101585388184 0 1.0 0 0.0 0 0.0 0 0.0 -1.6459330320358276 -0.03457307815551758 0.21605446934700012 -0.8994414806365967 0.4369945228099823 -0.0 0.44145694375038147 0.39193618297576904 0 1.0 0 0.0 0 0.0 0 0.0 -1.6437366008758545 -0.03031519055366516 0.21605446934700012 -0.8774986863136292 0.47950682044029236 -0.0 0.44276612997055054 0.396209716796875 0 1.0 0 0.0 0 0.0 0 0.0 1.7876288890838623 -0.10129447281360626 -0.2839455306529999 0.7817316055297852 0.6235846877098083 -0.0 0.9696797132492065 0.5909324884414673 0 1.0 0 0.0 0 0.0 0 0.0 1.786864995956421 -0.10027652233839035 0.21605446934700012 0.8176214098930359 0.5757011771202087 -0.0 0.5019909143447876 0.4292007088661194 0 1.0 0 0.0 0 0.0 0 0.0 1.7876288890838623 -0.10129447281360626 0.21605446934700012 0.7817316055297852 0.6235846877098083 -0.0 0.5024871230125427 0.42791253328323364 0 1.0 0 0.0 0 0.0 0 0.0 0.2740015983581543 -0.1320118010044098 -0.2839455306529999 -0.7854243516921997 -0.6189458966255188 -0.0 0.06747433543205261 0.43550050258636475 0 1.0 0 0.0 0 0.0 0 0.0 0.27947092056274414 -0.13852813839912415 0.21605446934700012 -0.7459334135055542 -0.6659749150276184 -0.0 0.38661396503448486 0.28905969858169556 0 1.0 0 0.0 0 0.0 0 0.0 0.2740015983581543 -0.1320118010044098 0.21605446934700012 -0.7854243516921997 -0.6189458966255188 -0.0 0.38457003235816956 0.29679185152053833 0 1.0 0 0.0 0 0.0 0 0.0 -1.1077433824539185 0.11165794730186462 -0.2839455306529999 0.49647510051727295 -0.8680074214935303 -0.0 0.05401936173439026 0.7403191328048706 0 1.0 0 0.0 0 0.0 0 0.0 -1.102933406829834 0.11417180299758911 0.21605446934700012 0.4286935031414032 -0.903439462184906 -0.0 0.5277293920516968 0.5491690635681152 0 1.0 0 0.0 0 0.0 0 0.0 -1.1077433824539185 0.11165794730186462 0.21605446934700012 0.49647510051727295 -0.8680074214935303 -0.0 0.5250393152236938 0.5461939573287964 0 1.0 0 0.0 0 0.0 0 0.0 1.8486864566802979 -0.10128353536128998 -0.2839455306529999 -0.33594775199890137 0.9418622255325317 -0.0 0.9314653873443604 0.5846927165985107 0 1.0 0 0.0 0 0.0 0 0.0 1.844451665878296 -0.10279404371976852 0.21605446934700012 -0.32862329483032227 0.9444258213043213 -0.0 0.537887454032898 0.42787182331085205 0 1.0 0 0.0 0 0.0 0 0.0 1.8486864566802979 -0.10128353536128998 0.21605446934700012 -0.33594775199890137 0.9418622255325317 -0.0 0.5403105616569519 0.4299470782279968 0 1.0 0 0.0 0 0.0 0 0.0 1.0034639835357666 0.11705905199050903 -0.2839455306529999 0.334574431180954 -0.9423505067825317 -0.0 0.9997810125350952 0.7213302850723267 0 1.0 0 0.0 0 0.0 0 0.0 1.008134126663208 0.11852577328681946 0.21605446934700012 0.26499220728874207 -0.964232325553894 -0.0 1.478376030921936 0.5593962669372559 0 1.0 0 0.0 0 0.0 0 0.0 1.0034639835357666 0.11705905199050903 0.21605446934700012 0.334574431180954 -0.9423505067825317 -0.0 1.4756214618682861 0.5579229593276978 0 1.0 0 0.0 0 0.0 0 0.0 -1.1123952865600586 0.10875734686851501 -0.2839455306529999 0.5601367354393005 -0.8283944129943848 -0.0 0.05737152695655823 0.7365900278091431 0 1.0 0 0.0 0 0.0 0 0.0 -1.1077433824539185 0.11165794730186462 0.21605446934700012 0.49647510051727295 -0.8680074214935303 -0.0 0.5250393152236938 0.5461939573287964 0 1.0 0 0.0 0 0.0 0 0.0 -1.1123952865600586 0.10875734686851501 0.21605446934700012 0.5601367354393005 -0.8283944129943848 -0.0 0.5224400758743286 0.5428013801574707 0 1.0 0 0.0 0 0.0 0 0.0 -1.527145266532898 -0.031892597675323486 -0.2839455306529999 0.36106449365615845 -0.9325235486030579 -0.0 0.0636448860168457 0.5791078805923462 0 1.0 0 0.0 0 0.0 0 0.0 -1.5232704877853394 -0.030469655990600586 0.21605446934700012 0.33097323775291443 -0.9436323046684265 -0.0 0.5126344561576843 0.38869017362594604 0 1.0 0 0.0 0 0.0 0 0.0 -1.527145266532898 -0.031892597675323486 0.21605446934700012 0.36106449365615845 -0.9325235486030579 -0.0 0.5100929737091064 0.38682734966278076 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.9939878582954407 0.10940885543823242 -0.0 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.8486864566802979 -0.10128353536128998 0.21605446934700012 0.9939878582954407 0.10940885543823242 -0.0 0.5403105616569519 0.4299470782279968 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.9939878582954407 0.10940885543823242 -0.0 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 0.5654213428497314 -0.14291614294052124 -0.2839455306529999 0.7402264475822449 -0.6723227500915527 -0.0 0.9139134883880615 0.4184088706970215 0 1.0 0 0.0 0 0.0 0 0.0 0.5710597038269043 -0.13628791272640228 0.21605446934700012 0.7834406495094299 -0.6214483976364136 -0.0 0.5828356146812439 0.2830563187599182 0 1.0 0 0.0 0 0.0 0 0.0 0.5654213428497314 -0.14291614294052124 0.21605446934700012 0.7402264475822449 -0.6723227500915527 -0.0 0.5803650617599487 0.27534884214401245 0 1.0 0 0.0 0 0.0 0 0.0 1.0518927574157715 0.11727187037467957 -0.2839455306529999 -0.3320719003677368 -0.9432355761528015 -0.0 0.9636092185974121 0.7194227576255798 0 1.0 0 0.0 0 0.0 0 0.0 1.0562174320220947 0.11557283997535706 0.21605446934700012 -0.3988158702850342 -0.9170202016830444 -0.0 0.5064213275909424 0.5548363924026489 0 1.0 0 0.0 0 0.0 0 0.0 1.0518927574157715 0.11727187037467957 0.21605446934700012 -0.3320719003677368 -0.9432355761528015 -0.0 0.503910481929779 0.5568075776100159 0 1.0 0 0.0 0 0.0 0 0.0 -1.2338197231292725 0.10938003659248352 -0.2839455306529999 -0.9079561829566956 0.4190496504306793 -0.0 0.13615745306015015 0.6973543167114258 0 1.0 0 0.0 0 0.0 0 0.0 -1.2384533882141113 0.09834310412406921 0.21605446934700012 -0.9342936277389526 0.3564561903476715 -0.0 0.4558292329311371 0.5193195939064026 0 1.0 0 0.0 0 0.0 0 0.0 -1.2338197231292725 0.10938003659248352 0.21605446934700012 -0.9079561829566956 0.4190496504306793 -0.0 0.45841383934020996 0.530331015586853 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252455234527588 -0.030664265155792236 -0.2839455306529999 -0.99993896484375 0.009704886004328728 -0.0 0.9976453185081482 0.5883469581604004 0 1.0 0 0.0 0 0.0 0 0.0 -1.4253257513046265 -0.03608603775501251 0.21605446934700012 -0.999786376953125 0.02047792077064514 -0.0 0.5779449343681335 0.3925821781158447 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252455234527588 -0.030664265155792236 0.21605446934700012 -0.99993896484375 0.009704886004328728 -0.0 0.5774822235107422 0.39922070503234863 0 1.0 0 0.0 0 0.0 0 0.0 0.27947092056274414 -0.13852813839912415 -0.2839455306529999 -0.7459334135055542 -0.6659749150276184 -0.0 0.06470856070518494 0.42908698320388794 0 1.0 0 0.0 0 0.0 0 0.0 0.2853658199310303 -0.14473800361156464 0.21605446934700012 -0.7042146325111389 -0.7099520564079285 -0.0 0.3889842629432678 0.28147590160369873 0 1.0 0 0.0 0 0.0 0 0.0 0.27947092056274414 -0.13852813839912415 0.21605446934700012 -0.7459334135055542 -0.6659749150276184 -0.0 0.38661396503448486 0.28905969858169556 0 1.0 0 0.0 0 0.0 0 0.0 1.7884604930877686 -0.10227593779563904 -0.2839455306529999 0.7437971234321594 0.6683858633041382 -0.0 0.9691663384437561 0.5896375179290771 0 1.0 0 0.0 0 0.0 0 0.0 1.7876288890838623 -0.10129447281360626 0.21605446934700012 0.7817316055297852 0.6235846877098083 -0.0 0.5024871230125427 0.42791253328323364 0 1.0 0 0.0 0 0.0 0 0.0 1.7884604930877686 -0.10227593779563904 0.21605446934700012 0.7437971234321594 0.6683858633041382 -0.0 0.5030277371406555 0.4266718029975891 0 1.0 0 0.0 0 0.0 0 0.0 1.6840846538543701 -0.10156569629907608 -0.2839455306529999 -0.9982909560203552 -0.05813775956630707 -0.0 0.03666028380393982 0.589532196521759 0 1.0 0 0.0 0 0.0 0 0.0 1.684413194656372 -0.10661531984806061 0.21605446934700012 -0.9973143935203552 -0.07306130975484848 -0.0 0.43657612800598145 0.42723244428634644 0 1.0 0 0.0 0 0.0 0 0.0 1.6840846538543701 -0.10156569629907608 0.21605446934700012 -0.9982909560203552 -0.05813775956630707 -0.0 0.43669307231903076 0.4333688020706177 0 1.0 0 0.0 0 0.0 0 0.0 0.9989495277404785 0.11526638269424438 -0.2839455306529999 0.4033631384372711 -0.9150059223175049 -0.0 1.0031362771987915 0.7192459106445312 0 1.0 0 0.0 0 0.0 0 0.0 1.0034639835357666 0.11705905199050903 0.21605446934700012 0.334574431180954 -0.9423505067825317 -0.0 1.4756214618682861 0.5579229593276978 0 1.0 0 0.0 0 0.0 0 0.0 0.9989495277404785 0.11526638269424438 0.21605446934700012 0.4033631384372711 -0.9150059223175049 -0.0 1.4729485511779785 0.5560883283615112 0 1.0 0 0.0 0 0.0 0 0.0 -1.1168891191482544 0.1054699718952179 -0.2839455306529999 0.6188238263130188 -0.7854853868484497 -0.0 0.06051981449127197 0.7323944568634033 0 1.0 0 0.0 0 0.0 0 0.0 -1.1123952865600586 0.10875734686851501 0.21605446934700012 0.5601367354393005 -0.8283944129943848 -0.0 0.5224400758743286 0.5428013801574707 0 1.0 0 0.0 0 0.0 0 0.0 -1.1168891191482544 0.1054699718952179 0.21605446934700012 0.6188238263130188 -0.7854853868484497 -0.0 0.5199300646781921 0.5389848947525024 0 1.0 0 0.0 0 0.0 0 0.0 -1.5306259393692017 -0.03331068158149719 -0.2839455306529999 0.3968626856803894 -0.9178441762924194 -0.0 0.06573435664176941 0.5768525004386902 0 1.0 0 0.0 0 0.0 0 0.0 -1.527145266532898 -0.031892597675323486 0.21605446934700012 0.36106449365615845 -0.9325235486030579 -0.0 0.5100929737091064 0.38682734966278076 0 1.0 0 0.0 0 0.0 0 0.0 -1.5306259393692017 -0.03331068158149719 0.21605446934700012 0.3968626856803894 -0.9178441762924194 -0.0 0.5078138709068298 0.3850102424621582 0 1.0 0 0.0 0 0.0 0 0.0 0.5591895580291748 -0.14934493601322174 -0.2839455306529999 0.6963713765144348 -0.7176427245140076 -0.0 0.9172108173370361 0.41227811574935913 0 1.0 0 0.0 0 0.0 0 0.0 0.5654213428497314 -0.14291614294052124 0.21605446934700012 0.7402264475822449 -0.6723227500915527 -0.0 0.5803650617599487 0.27534884214401245 0 1.0 0 0.0 0 0.0 0 0.0 0.5591895580291748 -0.14934493601322174 0.21605446934700012 0.6964018940925598 -0.7176427245140076 -0.0 0.5774534940719604 0.2676786184310913 0 1.0 0 0.0 0 0.0 0 0.0 1.0562174320220947 0.11557283997535706 -0.2839455306529999 -0.3988158702850342 -0.9170202016830444 -0.0 0.9605203866958618 0.7170834541320801 0 1.0 0 0.0 0 0.0 0 0.0 1.0604157447814941 0.11356490850448608 0.21605446934700012 -0.46327096223831177 -0.886196494102478 -0.0 0.508860170841217 0.5525315999984741 0 1.0 0 0.0 0 0.0 0 0.0 1.0562174320220947 0.11557283997535706 0.21605446934700012 -0.3988158702850342 -0.9170202016830444 -0.0 0.5064213275909424 0.5548363924026489 0 1.0 0 0.0 0 0.0 0 0.0 0.2853658199310303 -0.14473800361156464 -0.2839455306529999 -0.7042146325111389 -0.7099520564079285 -0.0 0.06174713373184204 0.42292243242263794 0 1.0 0 0.0 0 0.0 0 0.0 0.2916862964630127 -0.15064138174057007 0.21605446934700012 -0.6608172655105591 -0.7505111694335938 -0.0 0.39170393347740173 0.2740418314933777 0 1.0 0 0.0 0 0.0 0 0.0 0.2853658199310303 -0.14473800361156464 0.21605446934700012 -0.7042146325111389 -0.7099520564079285 -0.0 0.3889842629432678 0.28147590160369873 0 1.0 0 0.0 0 0.0 0 0.0 -1.1212248802185059 0.10179585218429565 -0.2839455306529999 0.6721396446228027 -0.7404095530509949 -0.0 0.06346258521080017 0.7277339696884155 0 1.0 0 0.0 0 0.0 0 0.0 -1.1168891191482544 0.1054699718952179 0.21605446934700012 0.6188238263130188 -0.7854853868484497 -0.0 0.5199300646781921 0.5389848947525024 0 1.0 0 0.0 0 0.0 0 0.0 -1.1212248802185059 0.10179585218429565 0.21605446934700012 0.6721396446228027 -0.7404095530509949 -0.0 0.5175074934959412 0.5347373485565186 0 1.0 0 0.0 0 0.0 0 0.0 -1.5337127447128296 -0.03472389280796051 -0.2839455306529999 0.44001588225364685 -0.8979766368865967 -0.0 0.06755927205085754 0.5746594667434692 0 1.0 0 0.0 0 0.0 0 0.0 -1.5306259393692017 -0.03331068158149719 0.21605446934700012 0.3968626856803894 -0.9178441762924194 -0.0 0.5078138709068298 0.3850102424621582 0 1.0 0 0.0 0 0.0 0 0.0 -1.5337127447128296 -0.03472389280796051 0.21605446934700012 0.44001588225364685 -0.8979766368865967 -0.0 0.5057958364486694 0.3832308053970337 0 1.0 0 0.0 0 0.0 0 0.0 1.789360761642456 -0.10322091728448868 -0.2839455306529999 0.7044587731361389 0.7097384333610535 -0.0 0.9686083793640137 0.5883837938308716 0 1.0 0 0.0 0 0.0 0 0.0 1.7884604930877686 -0.10227593779563904 0.21605446934700012 0.7437971234321594 0.6683858633041382 -0.0 0.5030277371406555 0.4266718029975891 0 1.0 0 0.0 0 0.0 0 0.0 1.789360761642456 -0.10322091728448868 0.21605446934700012 0.7044587731361389 0.7097384333610535 -0.0 0.5036134123802185 0.4254789352416992 0 1.0 0 0.0 0 0.0 0 0.0 0.8790280818939209 0.11538678407669067 -0.2839455306529999 -0.8645283579826355 0.5025787949562073 -0.0 0.08057984709739685 0.6942784786224365 0 1.0 0 0.0 0 0.0 0 0.0 0.8733217716217041 0.10470986366271973 0.21605446934700012 -0.8977630138397217 0.44041261076927185 -0.0 0.40601009130477905 0.5421374440193176 0 1.0 0 0.0 0 0.0 0 0.0 0.8790280818939209 0.11538678407669067 0.21605446934700012 -0.8645283579826355 0.5025787949562073 -0.0 0.4093787670135498 0.5525389909744263 0 1.0 0 0.0 0 0.0 0 0.0 -1.6459330320358276 -0.03457307815551758 -0.2839455306529999 -0.8994414806365967 0.4369945228099823 -0.0 0.12858033180236816 0.5556603074073792 0 1.0 0 0.0 0 0.0 0 0.0 -1.6479202508926392 -0.03892582654953003 0.21605446934700012 -0.9193701148033142 0.39335307478904724 -0.0 0.4402400553226471 0.3875800371170044 0 1.0 0 0.0 0 0.0 0 0.0 -1.6459330320358276 -0.03457307815551758 0.21605446934700012 -0.8994414806365967 0.4369945228099823 -0.0 0.44145694375038147 0.39193618297576904 0 1.0 0 0.0 0 0.0 0 0.0 1.844451665878296 -0.10279404371976852 -0.2839455306529999 -0.32862329483032227 0.9444258213043213 -0.0 0.934057891368866 0.5834326148033142 0 1.0 0 0.0 0 0.0 0 0.0 1.8403871059417725 -0.1041732057929039 0.21605446934700012 -0.31321147084236145 0.9496444463729858 -0.0 0.5355287790298462 0.42596107721328735 0 1.0 0 0.0 0 0.0 0 0.0 1.844451665878296 -0.10279404371976852 0.21605446934700012 -0.32862329483032227 0.9444258213043213 -0.0 0.537887454032898 0.42787182331085205 0 1.0 0 0.0 0 0.0 0 0.0 -1.1254024505615234 0.09773498773574829 -0.2839455306529999 0.7198401093482971 -0.6941129565238953 -0.0 0.0661996603012085 0.7226083278656006 0 1.0 0 0.0 0 0.0 0 0.0 -1.1212248802185059 0.10179585218429565 0.21605446934700012 0.6721396446228027 -0.7404095530509949 -0.0 0.5175074934959412 0.5347373485565186 0 1.0 0 0.0 0 0.0 0 0.0 -1.1254024505615234 0.09773498773574829 0.21605446934700012 0.7198401093482971 -0.6941129565238953 -0.0 0.5151707530021667 0.5300506353378296 0 1.0 0 0.0 0 0.0 0 0.0 0.5523643493652344 -0.1555742621421814 -0.2839455306529999 0.6481521129608154 -0.7614978551864624 -0.0 0.9208009243011475 0.40631377696990967 0 1.0 0 0.0 0 0.0 0 0.0 0.5591895580291748 -0.14934493601322174 0.21605446934700012 0.6964018940925598 -0.7176427245140076 -0.0 0.5774534940719604 0.2676786184310913 0 1.0 0 0.0 0 0.0 0 0.0 0.5523643493652344 -0.1555742621421814 0.21605446934700012 0.6481521129608154 -0.7614978551864624 -0.0 0.5740653872489929 0.26005619764328003 0 1.0 0 0.0 0 0.0 0 0.0 -1.2384533882141113 0.09834310412406921 -0.2839455306529999 -0.9342936277389526 0.3564561903476715 -0.0 0.1368536651134491 0.685250997543335 0 1.0 0 0.0 0 0.0 0 0.0 -1.2424691915512085 0.08667618036270142 0.21605446934700012 -0.9551683068275452 0.29602953791618347 -0.0 0.45347699522972107 0.5076109170913696 0 1.0 0 0.0 0 0.0 0 0.0 -1.2384533882141113 0.09834310412406921 0.21605446934700012 -0.9342936277389526 0.3564561903476715 -0.0 0.4558292329311371 0.5193195939064026 0 1.0 0 0.0 0 0.0 0 0.0 0.2916862964630127 -0.15064138174057007 -0.2839455306529999 -0.6608172655105591 -0.7505111694335938 -0.0 0.058582156896591187 0.4170032739639282 0 1.0 0 0.0 0 0.0 0 0.0 0.2984325885772705 -0.15623830258846283 0.21605446934700012 -0.616290807723999 -0.7874996066093445 -0.0 0.3947984278202057 0.26676231622695923 0 1.0 0 0.0 0 0.0 0 0.0 0.2916862964630127 -0.15064138174057007 0.21605446934700012 -0.6608172655105591 -0.7505111694335938 -0.0 0.39170393347740173 0.2740418314933777 0 1.0 0 0.0 0 0.0 0 0.0 0.9945907592773438 0.11314776539802551 -0.2839455306529999 0.47025972604751587 -0.8825037479400635 -0.0 0.006345778703689575 0.7167558670043945 0 1.0 0 0.0 0 0.0 0 0.0 0.9989495277404785 0.11526638269424438 0.21605446934700012 0.4033631384372711 -0.9150059223175049 -0.0 0.47294849157333374 0.5560883283615112 0 1.0 0 0.0 0 0.0 0 0.0 0.9945907592773438 0.11314776539802551 0.21605446934700012 0.47025972604751587 -0.8825037479400635 -0.0 0.4703560471534729 0.5538910627365112 0 1.0 0 0.0 0 0.0 0 0.0 -1.536405324935913 -0.036132246255874634 -0.2839455306529999 0.4925687313079834 -0.8702658414840698 -0.0 0.06912404298782349 0.5725313425064087 0 1.0 0 0.0 0 0.0 0 0.0 -1.5337127447128296 -0.03472389280796051 0.21605446934700012 0.44001588225364685 -0.8979766368865967 -0.0 0.5057958364486694 0.3832308053970337 0 1.0 0 0.0 0 0.0 0 0.0 -1.536405324935913 -0.036132246255874634 0.21605446934700012 0.4925687313079834 -0.8702658414840698 -0.0 0.5040379166603088 0.3814815282821655 0 1.0 0 0.0 0 0.0 0 0.0 1.7903287410736084 -0.10412941128015518 -0.2839455306529999 0.6643574237823486 0.747398316860199 -0.0 0.9680066108703613 0.5871713161468506 0 1.0 0 0.0 0 0.0 0 0.0 1.789360761642456 -0.10322091728448868 0.21605446934700012 0.7044587731361389 0.7097384333610535 -0.0 0.5036134123802185 0.4254789352416992 0 1.0 0 0.0 0 0.0 0 0.0 1.7903287410736084 -0.10412941128015518 0.21605446934700012 0.6643574237823486 0.747398316860199 -0.0 0.5042434334754944 0.42433422803878784 0 1.0 0 0.0 0 0.0 0 0.0 1.0604157447814941 0.11356490850448608 -0.2839455306529999 -0.46327096223831177 -0.886196494102478 -0.0 0.9575706124305725 0.7143791913986206 0 1.0 0 0.0 0 0.0 0 0.0 1.0644874572753906 0.11124807596206665 0.21605446934700012 -0.5246132016181946 -0.8513138294219971 -0.0 0.5112283229827881 0.5498915910720825 0 1.0 0 0.0 0 0.0 0 0.0 1.0604157447814941 0.11356490850448608 0.21605446934700012 -0.46327096223831177 -0.886196494102478 -0.0 0.508860170841217 0.5525315999984741 0 1.0 0 0.0 0 0.0 0 0.0 -1.4253257513046265 -0.03608603775501251 -0.2839455306529999 -0.999786376953125 0.02047792077064514 -0.0 0.9977109432220459 0.581652045249939 0 1.0 0 0.0 0 0.0 0 0.0 -1.4254595041275024 -0.04119160771369934 0.21605446934700012 -0.99945068359375 0.03262428566813469 -0.0 0.5783491134643555 0.38633376359939575 0 1.0 0 0.0 0 0.0 0 0.0 -1.4253257513046265 -0.03608603775501251 0.21605446934700012 -0.999786376953125 0.02047792077064514 -0.0 0.5779449343681335 0.3925821781158447 0 1.0 0 0.0 0 0.0 0 0.0 -1.1294219493865967 0.0932874083518982 -0.2839455306529999 0.765373706817627 -0.6435437798500061 -0.0 0.06873214244842529 0.7170165777206421 0 1.0 0 0.0 0 0.0 0 0.0 -1.1254024505615234 0.09773498773574829 0.21605446934700012 0.7198401093482971 -0.6941129565238953 -0.0 0.5151707530021667 0.5300506353378296 0 1.0 0 0.0 0 0.0 0 0.0 -1.1294219493865967 0.0932874083518982 0.21605446934700012 0.765373706817627 -0.6435437798500061 -0.0 0.5129179954528809 0.5249159336090088 0 1.0 0 0.0 0 0.0 0 0.0 1.7913649082183838 -0.10500141978263855 -0.2839455306529999 0.6238288283348083 0.7815485000610352 -0.0 0.9673608541488647 0.5859999656677246 0 1.0 0 0.0 0 0.0 0 0.0 1.7903287410736084 -0.10412941128015518 0.21605446934700012 0.6643574237823486 0.747398316860199 -0.0 0.5042434334754944 0.42433422803878784 0 1.0 0 0.0 0 0.0 0 0.0 1.7913649082183838 -0.10500141978263855 0.21605446934700012 0.6238288283348083 0.7815485000610352 -0.0 0.5049180388450623 0.4232381582260132 0 1.0 0 0.0 0 0.0 0 0.0 0.5449578762054443 -0.16144844889640808 -0.2839455306529999 0.5901364088058472 -0.8072755932807922 -0.0 0.9246793389320374 0.40065115690231323 0 1.0 0 0.0 0 0.0 0 0.0 0.5523643493652344 -0.1555742621421814 0.21605446934700012 0.6481521129608154 -0.7614978551864624 -0.0 0.5740653872489929 0.26005619764328003 0 1.0 0 0.0 0 0.0 0 0.0 0.5449578762054443 -0.16144844889640808 0.21605446934700012 0.5901364088058472 -0.8072755932807922 -0.0 0.5701563954353333 0.25263357162475586 0 1.0 0 0.0 0 0.0 0 0.0 1.8403871059417725 -0.1041732057929039 -0.2839455306529999 -0.31321147084236145 0.9496444463729858 -0.0 0.9365617036819458 0.5822762250900269 0 1.0 0 0.0 0 0.0 0 0.0 1.8364927768707275 -0.10542101413011551 0.21605446934700012 -0.29615160822868347 0.9551072716712952 -0.0 0.5332391262054443 0.42421799898147583 0 1.0 0 0.0 0 0.0 0 0.0 1.8403871059417725 -0.1041732057929039 0.21605446934700012 -0.31321147084236145 0.9496444463729858 -0.0 0.5355287790298462 0.42596107721328735 0 1.0 0 0.0 0 0.0 0 0.0 0.2984325885772705 -0.15623830258846283 -0.2839455306529999 -0.616290807723999 -0.7874996066093445 -0.0 0.055205315351486206 0.411327600479126 0 1.0 0 0.0 0 0.0 0 0.0 0.3056044578552246 -0.16152872145175934 0.21605446934700012 -0.5687734484672546 -0.8224738240242004 -0.0 0.39829540252685547 0.2596469521522522 0 1.0 0 0.0 0 0.0 0 0.0 0.2984325885772705 -0.15623830258846283 0.21605446934700012 -0.616290807723999 -0.7874996066093445 -0.0 0.3947984278202057 0.26676231622695923 0 1.0 0 0.0 0 0.0 0 0.0 0.9903876781463623 0.1107032299041748 -0.2839455306529999 0.5341349244117737 -0.8453627228736877 -0.0 0.00940614938735962 0.7138638496398926 0 1.0 0 0.0 0 0.0 0 0.0 0.9945907592773438 0.11314776539802551 0.21605446934700012 0.47025972604751587 -0.8825037479400635 -0.0 0.4703560471534729 0.5538910627365112 0 1.0 0 0.0 0 0.0 0 0.0 0.9903876781463623 0.1107032299041748 0.21605446934700012 0.5341349244117737 -0.8453627228736877 -0.0 0.46784284710884094 0.5513290166854858 0 1.0 0 0.0 0 0.0 0 0.0 -1.1331982612609863 0.08845549821853638 -0.2839455306529999 0.8116397857666016 -0.5841242671012878 -0.0 0.07100096344947815 0.7109781503677368 0 1.0 0 0.0 0 0.0 0 0.0 -1.1294219493865967 0.0932874083518982 0.21605446934700012 0.765373706817627 -0.6435437798500061 -0.0 0.5129179954528809 0.5249159336090088 0 1.0 0 0.0 0 0.0 0 0.0 -1.1331982612609863 0.08845549821853638 0.21605446934700012 0.8116397857666016 -0.5841242671012878 -0.0 0.510796844959259 0.5193343758583069 0 1.0 0 0.0 0 0.0 0 0.0 -1.5387039184570312 -0.03753572702407837 -0.2839455306529999 0.5629138946533203 -0.82650226354599 -0.0 0.070433109998703 0.5704699754714966 0 1.0 0 0.0 0 0.0 0 0.0 -1.536405324935913 -0.036132246255874634 0.21605446934700012 0.4925687313079834 -0.8702658414840698 -0.0 0.5040379166603088 0.3814815282821655 0 1.0 0 0.0 0 0.0 0 0.0 -1.5387039184570312 -0.03753572702407837 0.21605446934700012 0.5629138946533203 -0.82650226354599 -0.0 0.5025386214256287 0.3797556757926941 0 1.0 0 0.0 0 0.0 0 0.0 1.0644874572753906 0.11124807596206665 -0.2839455306529999 -0.5246132016181946 -0.8513138294219971 -0.0 0.9547619819641113 0.7113131284713745 0 1.0 0 0.0 0 0.0 0 0.0 1.0684328079223633 0.10862231254577637 0.21605446934700012 -0.5820184946060181 -0.8131656646728516 -0.0 0.5135274529457092 0.5469138622283936 0 1.0 0 0.0 0 0.0 0 0.0 1.0644874572753906 0.11124807596206665 0.21605446934700012 -0.5246132016181946 -0.8513138294219971 -0.0 0.5112283229827881 0.5498915910720825 0 1.0 0 0.0 0 0.0 0 0.0 -1.1366461515426636 0.08324170112609863 -0.2839455306529999 0.8543656468391418 -0.5196386575698853 -0.0 0.07295101881027222 0.7045143842697144 0 1.0 0 0.0 0 0.0 0 0.0 -1.1331982612609863 0.08845549821853638 0.21605446934700012 0.8116397857666016 -0.5841242671012878 -0.0 0.510796844959259 0.5193343758583069 0 1.0 0 0.0 0 0.0 0 0.0 -1.1366461515426636 0.08324170112609863 0.21605446934700012 0.8543656468391418 -0.5196386575698853 -0.0 0.5088552236557007 0.5133059024810791 0 1.0 0 0.0 0 0.0 0 0.0 -1.5417808294296265 -0.03986351191997528 -0.2839455306529999 0.6290780305862427 -0.7773369550704956 -0.0 0.07213199138641357 0.5671678185462952 0 1.0 0 0.0 0 0.0 0 0.0 -1.5387039184570312 -0.03753572702407837 0.21605446934700012 0.5629138946533203 -0.82650226354599 -0.0 0.5025386214256287 0.3797556757926941 0 1.0 0 0.0 0 0.0 0 0.0 -1.5417808294296265 -0.03986351191997528 0.21605446934700012 0.6290780305862427 -0.7773369550704956 -0.0 0.5005322694778442 0.37691736221313477 0 1.0 0 0.0 0 0.0 0 0.0 1.7924692630767822 -0.10583695024251938 -0.2839455306529999 0.5818048715591431 0.8133182525634766 -0.0 0.9666714072227478 0.5848695635795593 0 1.0 0 0.0 0 0.0 0 0.0 1.7913649082183838 -0.10500141978263855 0.21605446934700012 0.6238288283348083 0.7815485000610352 -0.0 0.5049180388450623 0.4232381582260132 0 1.0 0 0.0 0 0.0 0 0.0 1.7924692630767822 -0.10583695024251938 0.21605446934700012 0.5818048715591431 0.8133182525634766 -0.0 0.5056371688842773 0.4221910834312439 0 1.0 0 0.0 0 0.0 0 0.0 0.5369820594787598 -0.16681185364723206 -0.2839455306529999 0.5262916684150696 -0.8502761721611023 -0.0 0.9288429021835327 0.3954232335090637 0 1.0 0 0.0 0 0.0 0 0.0 0.5449578762054443 -0.16144844889640808 0.21605446934700012 0.5901364088058472 -0.8072755932807922 -0.0 0.5701563954353333 0.25263357162475586 0 1.0 0 0.0 0 0.0 0 0.0 0.5369820594787598 -0.16681185364723206 0.21605446934700012 0.5262916684150696 -0.8502761721611023 -0.0 0.5656810402870178 0.24556457996368408 0 1.0 0 0.0 0 0.0 0 0.0 -1.2424691915512085 0.08667618036270142 -0.2839455306529999 -0.9551683068275452 0.29602953791618347 -0.0 0.13713571429252625 0.6726433038711548 0 1.0 0 0.0 0 0.0 0 0.0 -1.245867371559143 0.07437929511070251 0.21605446934700012 -0.9711599946022034 0.2384105920791626 -0.0 0.45135048031806946 0.49517351388931274 0 1.0 0 0.0 0 0.0 0 0.0 -1.2424691915512085 0.08667618036270142 0.21605446934700012 -0.9551683068275452 0.29602953791618347 -0.0 0.45347699522972107 0.5076109170913696 0 1.0 0 0.0 0 0.0 0 0.0 -1.6479202508926392 -0.03892582654953003 -0.2839455306529999 -0.9193701148033142 0.39335307478904724 -0.0 0.12894189357757568 0.5507911443710327 0 1.0 0 0.0 0 0.0 0 0.0 -1.6496983766555786 -0.043373435735702515 0.21605446934700012 -0.9371318817138672 0.3489181101322174 -0.0 0.4391138553619385 0.38313859701156616 0 1.0 0 0.0 0 0.0 0 0.0 -1.6479202508926392 -0.03892582654953003 0.21605446934700012 -0.9193701148033142 0.39335307478904724 -0.0 0.4402400553226471 0.3875800371170044 0 1.0 0 0.0 0 0.0 0 0.0 1.8364927768707275 -0.10542101413011551 -0.2839455306529999 -0.29615160822868347 0.9551072716712952 -0.0 0.9389737844467163 0.5812290906906128 0 1.0 0 0.0 0 0.0 0 0.0 1.8327686786651611 -0.10653747618198395 0.21605446934700012 -0.2771385908126831 0.9608142375946045 -0.0 0.5310229659080505 0.4226453900337219 0 1.0 0 0.0 0 0.0 0 0.0 1.8364927768707275 -0.10542101413011551 0.21605446934700012 -0.29615160822868347 0.9551072716712952 -0.0 0.5332391262054443 0.42421799898147583 0 1.0 0 0.0 0 0.0 0 0.0 0.3056044578552246 -0.16152872145175934 -0.2839455306529999 -0.5687734484672546 -0.8224738240242004 -0.0 0.051608264446258545 0.4058956503868103 0 1.0 0 0.0 0 0.0 0 0.0 0.31320953369140625 -0.1664518564939499 0.21605446934700012 -0.5158543586730957 -0.8566545844078064 -0.0 0.4022355079650879 0.25275760889053345 0 1.0 0 0.0 0 0.0 0 0.0 0.3056044578552246 -0.16152872145175934 0.21605446934700012 -0.5687734484672546 -0.8224738240242004 -0.0 0.39829540252685547 0.2596469521522522 0 1.0 0 0.0 0 0.0 0 0.0 0.9863402843475342 0.10793274641036987 -0.2839455306529999 0.5941038131713867 -0.8043763637542725 -0.0 0.012314856052398682 0.7105729579925537 0 1.0 0 0.0 0 0.0 0 0.0 0.9903876781463623 0.1107032299041748 0.21605446934700012 0.5341349244117737 -0.8453627228736877 -0.0 0.46784284710884094 0.5513290166854858 0 1.0 0 0.0 0 0.0 0 0.0 0.9863402843475342 0.10793274641036987 0.21605446934700012 0.5941038131713867 -0.8043763637542725 -0.0 0.46540743112564087 0.5483993887901306 0 1.0 0 0.0 0 0.0 0 0.0 0.31320953369140625 -0.1664518564939499 -0.2839455306529999 -0.5158543586730957 -0.8566545844078064 -0.0 0.047781407833099365 0.400759756565094 0 1.0 0 0.0 0 0.0 0 0.0 0.3212544918060303 -0.1709468960762024 0.21605445444583893 -0.4601885974407196 -0.8877834677696228 -0.0 0.4066609740257263 0.2461605668067932 0 1.0 0 0.0 0 0.0 0 0.0 0.31320953369140625 -0.1664518564939499 0.21605446934700012 -0.5158543586730957 -0.8566545844078064 -0.0 0.4022355079650879 0.25275760889053345 0 1.0 0 0.0 0 0.0 0 0.0 1.1798405647277832 0.09859970211982727 -0.2839455306529999 0.921262264251709 0.3888668417930603 -0.0 0.8863137364387512 0.667203426361084 0 1.0 0 0.0 0 0.0 0 0.0 1.1742777824401855 0.11057066917419434 0.21605446934700012 0.8901638984680176 0.45558029413223267 -0.0 0.5682803988456726 0.5411200523376465 0 1.0 0 0.0 0 0.0 0 0.0 1.1798405647277832 0.09859970211982727 0.21605446934700012 0.921262264251709 0.3888668417930603 -0.0 0.5714326500892639 0.5292354226112366 0 1.0 0 0.0 0 0.0 0 0.0 -1.139765739440918 0.07764601707458496 -0.2839455306529999 0.8903164863586426 -0.45530563592910767 -0.0 0.07459104061126709 0.6976232528686523 0 1.0 0 0.0 0 0.0 0 0.0 -1.1366461515426636 0.08324170112609863 0.21605446934700012 0.8543656468391418 -0.5196386575698853 -0.0 0.5088552236557007 0.5133059024810791 0 1.0 0 0.0 0 0.0 0 0.0 -1.139765739440918 0.07764601707458496 0.21605446934700012 0.8903164863586426 -0.45530563592910767 -0.0 0.5070923566818237 0.5068193078041077 0 1.0 0 0.0 0 0.0 0 0.0 -1.5445903539657593 -0.04229345917701721 -0.2839455306529999 0.6803796291351318 -0.7328409552574158 -0.0 0.07364055514335632 0.5637936592102051 0 1.0 0 0.0 0 0.0 0 0.0 -1.5417808294296265 -0.03986351191997528 0.21605446934700012 0.6290780305862427 -0.7773369550704956 -0.0 0.5005322694778442 0.37691736221313477 0 1.0 0 0.0 0 0.0 0 0.0 -1.5445903539657593 -0.04229345917701721 0.21605446934700012 0.6803796291351318 -0.7328409552574158 -0.0 0.4986985921859741 0.373982310295105 0 1.0 0 0.0 0 0.0 0 0.0 1.793628454208374 -0.1066201776266098 -0.2839455306529999 0.5360575914382935 0.844141960144043 -0.0 0.9659465551376343 0.5838009119033813 0 1.0 0 0.0 0 0.0 0 0.0 1.7924692630767822 -0.10583695024251938 0.21605446934700012 0.5818048715591431 0.8133182525634766 -0.0 0.5056371688842773 0.4221910834312439 0 1.0 0 0.0 0 0.0 0 0.0 1.793628454208374 -0.1066201776266098 0.21605446934700012 0.5360575914382935 0.844141960144043 -0.0 0.5063918828964233 0.42121315002441406 0 1.0 0 0.0 0 0.0 0 0.0 1.0684328079223633 0.10862231254577637 -0.2839455306529999 -0.5820184946060181 -0.8131656646728516 -0.0 0.9520952701568604 0.7078877687454224 0 1.0 0 0.0 0 0.0 0 0.0 1.072251558303833 0.10568764805793762 0.21605446934700012 -0.634968101978302 -0.772515058517456 -0.0 0.5157588124275208 0.5435953140258789 0 1.0 0 0.0 0 0.0 0 0.0 1.0684328079223633 0.10862231254577637 0.21605446934700012 -0.5820184946060181 -0.8131656646728516 -0.0 0.5135274529457092 0.5469138622283936 0 1.0 0 0.0 0 0.0 0 0.0 -1.4254595041275024 -0.04119160771369934 -0.2839455306529999 -0.99945068359375 0.03262428566813469 -0.0 0.9978078603744507 0.5753602981567383 0 1.0 0 0.0 0 0.0 0 0.0 -1.4256469011306763 -0.04598096013069153 0.21605446934700012 -0.9989013075828552 0.046418651938438416 -0.0 0.5786933898925781 0.3804762363433838 0 1.0 0 0.0 0 0.0 0 0.0 -1.4254595041275024 -0.04119160771369934 0.21605446934700012 -0.99945068359375 0.03262428566813469 -0.0 0.5783491134643555 0.38633376359939575 0 1.0 0 0.0 0 0.0 0 0.0 1.8327686786651611 -0.10653747618198395 -0.2839455306529999 -0.2771385908126831 0.9608142375946045 -0.0 0.9412914514541626 0.5802960395812988 0 1.0 0 0.0 0 0.0 0 0.0 1.8292148113250732 -0.10752259194850922 0.21605446934700012 -0.2558977007865906 0.9666737914085388 -0.0 0.5288844108581543 0.4212455749511719 0 1.0 0 0.0 0 0.0 0 0.0 1.8327686786651611 -0.10653747618198395 0.21605446934700012 -0.2771385908126831 0.9608142375946045 -0.0 0.5310229659080505 0.4226453900337219 0 1.0 0 0.0 0 0.0 0 0.0 -1.14255690574646 0.07166844606399536 -0.2839455306529999 0.9197973608970642 -0.39231544733047485 -0.0 0.07592976093292236 0.6903005838394165 0 1.0 0 0.0 0 0.0 0 0.0 -1.139765739440918 0.07764601707458496 0.21605446934700012 0.8903164863586426 -0.45530563592910767 -0.0 0.5070923566818237 0.5068193078041077 0 1.0 0 0.0 0 0.0 0 0.0 -1.14255690574646 0.07166844606399536 0.21605446934700012 0.9197973608970642 -0.39231544733047485 -0.0 0.50550776720047 0.49986231327056885 0 1.0 0 0.0 0 0.0 0 0.0 0.5284371376037598 -0.17166444659233093 -0.2839455306529999 0.4622333347797394 -0.886745810508728 -0.0 0.9333038926124573 0.3906322717666626 0 1.0 0 0.0 0 0.0 0 0.0 0.5369820594787598 -0.16681185364723206 0.21605446934700012 0.5262916684150696 -0.8502761721611023 -0.0 0.5656810402870178 0.24556457996368408 0 1.0 0 0.0 0 0.0 0 0.0 0.5284371376037598 -0.17166444659233093 0.21605445444583893 0.4622333347797394 -0.886745810508728 -0.0 0.5605977177619934 0.2388749122619629 0 1.0 0 0.0 0 0.0 0 0.0 -1.0014448165893555 0.07659512758255005 -0.2839455306529999 -0.9058809280395508 -0.42347484827041626 -0.0 0.9746454954147339 0.6996514797210693 0 1.0 0 0.0 0 0.0 0 0.0 -0.9987156391143799 0.07015055418014526 0.21605446934700012 -0.9333170652389526 -0.35898923873901367 -0.0 0.5897163152694702 0.5094247460365295 0 1.0 0 0.0 0 0.0 0 0.0 -1.0014448165893555 0.07659512758255005 0.21605446934700012 -0.9058809280395508 -0.42347484827041626 -0.0 0.5876625180244446 0.5161285400390625 0 1.0 0 0.0 0 0.0 0 0.0 1.684413194656372 -0.10661531984806061 -0.2839455306529999 -0.9973143935203552 -0.07306130975484848 -0.0 0.03627842664718628 0.5834358334541321 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 0.21605446934700012 -0.9957884550094604 -0.09140293300151825 -0.0 0.43651407957077026 0.4216722249984741 0 1.0 0 0.0 0 0.0 0 0.0 1.684413194656372 -0.10661531984806061 0.21605446934700012 -0.9973143935203552 -0.07306130975484848 -0.0 0.43657612800598145 0.42723244428634644 0 1.0 0 0.0 0 0.0 0 0.0 0.3212544918060303 -0.1709468960762024 -0.2839455306529999 -0.4601885974407196 -0.8877834677696228 -0.0 0.04371464252471924 0.3959726095199585 0 1.0 0 0.0 0 0.0 0 0.0 0.3297398090362549 -0.17501384019851685 0.21605445444583893 -0.4050416648387909 -0.9142735004425049 -0.0 0.4116052985191345 0.23988062143325806 0 1.0 0 0.0 0 0.0 0 0.0 0.3212544918060303 -0.1709468960762024 0.21605445444583893 -0.4601885974407196 -0.8877834677696228 -0.0 0.4066609740257263 0.2461605668067932 0 1.0 0 0.0 0 0.0 0 0.0 0.9824485778808594 0.10483631491661072 -0.2839455306529999 0.6494033336639404 -0.7603991627693176 -0.0 0.015070319175720215 0.7068853378295898 0 1.0 0 0.0 0 0.0 0 0.0 0.9863402843475342 0.10793274641036987 0.21605446934700012 0.5941038131713867 -0.8043763637542725 -0.0 0.46540743112564087 0.5483993887901306 0 1.0 0 0.0 0 0.0 0 0.0 0.9824485778808594 0.10483631491661072 0.21605446934700012 0.6494033336639404 -0.7603991627693176 -0.0 0.46304842829704285 0.5450987815856934 0 1.0 0 0.0 0 0.0 0 0.0 -1.547132134437561 -0.04482556879520416 -0.2839455306529999 0.7318338751792908 -0.6814478039741516 -0.0 0.07496204972267151 0.5603500008583069 0 1.0 0 0.0 0 0.0 0 0.0 -1.5445903539657593 -0.04229345917701721 0.21605446934700012 0.6803796291351318 -0.7328409552574158 -0.0 0.4986985921859741 0.373982310295105 0 1.0 0 0.0 0 0.0 0 0.0 -1.547132134437561 -0.04482556879520416 0.21605446934700012 0.7318338751792908 -0.6814478039741516 -0.0 0.49703651666641235 0.370947003364563 0 1.0 0 0.0 0 0.0 0 0.0 1.072251558303833 0.10568764805793762 -0.2839455306529999 -0.634968101978302 -0.772515058517456 -0.0 0.9495713114738464 0.7041049003601074 0 1.0 0 0.0 0 0.0 0 0.0 1.075943946838379 0.10244408249855042 0.21605446934700012 -0.6831873655319214 -0.730216383934021 -0.0 0.5179241895675659 0.5399326086044312 0 1.0 0 0.0 0 0.0 0 0.0 1.072251558303833 0.10568764805793762 0.21605446934700012 -0.634968101978302 -0.772515058517456 -0.0 0.5157588124275208 0.5435953140258789 0 1.0 0 0.0 0 0.0 0 0.0 -1.245867371559143 0.07437929511070251 -0.2839455306529999 -0.9711599946022034 0.2384105920791626 -0.0 0.13702672719955444 0.659500241279602 0 1.0 0 0.0 0 0.0 0 0.0 -1.2486475706100464 0.06145240366458893 0.21605446934700012 -0.982909619808197 0.18393506109714508 -0.0 0.4494447708129883 0.48197758197784424 0 1.0 0 0.0 0 0.0 0 0.0 -1.245867371559143 0.07437929511070251 0.21605446934700012 -0.9711599946022034 0.2384105920791626 -0.0 0.45135048031806946 0.49517351388931274 0 1.0 0 0.0 0 0.0 0 0.0 -1.6496983766555786 -0.043373435735702515 -0.2839455306529999 -0.9371318817138672 0.3489181101322174 -0.0 0.1291947066783905 0.5459003448486328 0 1.0 0 0.0 0 0.0 0 0.0 -1.651267170906067 -0.047915905714035034 0.21605446934700012 -0.9526658058166504 0.3039643466472626 -0.0 0.43807706236839294 0.3786091208457947 0 1.0 0 0.0 0 0.0 0 0.0 -1.6496983766555786 -0.043373435735702515 0.21605446934700012 -0.9371318817138672 0.3489181101322174 -0.0 0.4391138553619385 0.38313859701156616 0 1.0 0 0.0 0 0.0 0 0.0 1.7948286533355713 -0.10733529925346375 -0.2839455306529999 0.48716697096824646 0.8732871413230896 -0.0 0.9651947021484375 0.5828148126602173 0 1.0 0 0.0 0 0.0 0 0.0 1.793628454208374 -0.1066201776266098 0.21605446934700012 0.5360575914382935 0.844141960144043 -0.0 0.5063918828964233 0.42121315002441406 0 1.0 0 0.0 0 0.0 0 0.0 1.7948286533355713 -0.10733529925346375 0.21605446934700012 0.48716697096824646 0.8732871413230896 -0.0 0.5071730017662048 0.42032450437545776 0 1.0 0 0.0 0 0.0 0 0.0 0.5193231105804443 -0.1760062575340271 -0.2839455306529999 0.39918211102485657 -0.9168370366096497 -0.0 0.9380745887756348 0.38628554344177246 0 1.0 0 0.0 0 0.0 0 0.0 0.5284371376037598 -0.17166444659233093 0.21605445444583893 0.4622333347797394 -0.886745810508728 -0.0 0.5605977177619934 0.2388749122619629 0 1.0 0 0.0 0 0.0 0 0.0 0.5193231105804443 -0.1760062575340271 0.21605445444583893 0.39918211102485657 -0.9168370366096497 -0.0 0.5548642873764038 0.2326015830039978 0 1.0 0 0.0 0 0.0 0 0.0 0.3297398090362549 -0.17501384019851685 -0.2839455306529999 -0.4050416648387909 -0.9142735004425049 -0.0 0.03939831256866455 0.39153915643692017 0 1.0 0 0.0 0 0.0 0 0.0 0.3386654853820801 -0.17865267395973206 0.21605445444583893 -0.3510238826274872 -0.9363383650779724 -0.0 0.41710150241851807 0.23395079374313354 0 1.0 0 0.0 0 0.0 0 0.0 0.3297398090362549 -0.17501384019851685 0.21605445444583893 -0.4050416648387909 -0.9142735004425049 -0.0 0.4116052985191345 0.23988062143325806 0 1.0 0 0.0 0 0.0 0 0.0 0.9787123203277588 0.10141396522521973 -0.2839455306529999 0.6996368169784546 -0.7144688367843628 -0.0 0.017671942710876465 0.7028019428253174 0 1.0 0 0.0 0 0.0 0 0.0 0.9824485778808594 0.10483631491661072 0.21605446934700012 0.6494033336639404 -0.7603991627693176 -0.0 0.46304842829704285 0.5450987815856934 0 1.0 0 0.0 0 0.0 0 0.0 0.9787123203277588 0.10141396522521973 0.21605446934700012 0.6996368169784546 -0.7144688367843628 -0.0 0.46076416969299316 0.541422963142395 0 1.0 0 0.0 0 0.0 0 0.0 -1.1450196504592896 0.06530898809432983 -0.2839455306529999 0.9433881640434265 -0.3316446542739868 -0.0 0.07697618007659912 0.6825403571128845 0 1.0 0 0.0 0 0.0 0 0.0 -1.14255690574646 0.07166844606399536 0.21605446934700012 0.9197973608970642 -0.39231544733047485 -0.0 0.50550776720047 0.49986231327056885 0 1.0 0 0.0 0 0.0 0 0.0 -1.1450196504592896 0.06530898809432983 0.21605446934700012 0.9433881640434265 -0.3316446542739868 -0.0 0.5041013956069946 0.4924224019050598 0 1.0 0 0.0 0 0.0 0 0.0 -1.5494064092636108 -0.04745984077453613 -0.2839455306529999 0.7822809815406799 -0.6229133009910583 -0.0 0.07609990239143372 0.5568383932113647 0 1.0 0 0.0 0 0.0 0 0.0 -1.547132134437561 -0.04482556879520416 0.21605446934700012 0.7318338751792908 -0.6814478039741516 -0.0 0.49703651666641235 0.370947003364563 0 1.0 0 0.0 0 0.0 0 0.0 -1.5494064092636108 -0.04745984077453613 0.21605446934700012 0.7822809815406799 -0.6229133009910583 -0.0 0.49554482102394104 0.3678079843521118 0 1.0 0 0.0 0 0.0 0 0.0 1.7960703372955322 -0.10798231512308121 -0.2839455306529999 0.4368419349193573 0.8995330929756165 -0.0 0.9644157290458679 0.5819108486175537 0 1.0 0 0.0 0 0.0 0 0.0 1.7948286533355713 -0.10733529925346375 0.21605446934700012 0.48716697096824646 0.8732871413230896 -0.0 0.5071730017662048 0.42032450437545776 0 1.0 0 0.0 0 0.0 0 0.0 1.7960703372955322 -0.10798231512308121 0.21605446934700012 0.4368419349193573 0.8995330929756165 -0.0 0.5079805254936218 0.4195253252983093 0 1.0 0 0.0 0 0.0 0 0.0 0.8733217716217041 0.10470986366271973 -0.2839455306529999 -0.8977630138397217 0.44041261076927185 -0.0 0.08267199993133545 0.6824241280555725 0 1.0 0 0.0 0 0.0 0 0.0 0.8682868480682373 0.09347590804100037 0.21605446934700012 -0.9256874322891235 0.37824639678001404 -0.0 0.4029099941253662 0.5311414003372192 0 1.0 0 0.0 0 0.0 0 0.0 0.8733217716217041 0.10470986366271973 0.21605446934700012 -0.8977630138397217 0.44041261076927185 -0.0 0.40601009130477905 0.5421374440193176 0 1.0 0 0.0 0 0.0 0 0.0 -0.9987156391143799 0.07015055418014526 -0.2839455306529999 -0.9333170652389526 -0.35898923873901367 -0.0 0.9731119275093079 0.6922006011009216 0 1.0 0 0.0 0 0.0 0 0.0 -0.9963076114654541 0.06320734322071075 0.21605446934700012 -0.9542527794837952 -0.29895931482315063 -0.0 0.5916581749916077 0.5021109580993652 0 1.0 0 0.0 0 0.0 0 0.0 -0.9987156391143799 0.07015055418014526 0.21605446934700012 -0.9333170652389526 -0.35898923873901367 -0.0 0.5897163152694702 0.5094247460365295 0 1.0 0 0.0 0 0.0 0 0.0 -1.4256469011306763 -0.04598096013069153 -0.2839455306529999 -0.9989013075828552 0.046418651938438416 -0.0 0.9979357123374939 0.5694729089736938 0 1.0 0 0.0 0 0.0 0 0.0 -1.4258877038955688 -0.05045410990715027 0.21605446934700012 -0.9980468153953552 0.06216620281338692 -0.0 0.5789764523506165 0.3750090003013611 0 1.0 0 0.0 0 0.0 0 0.0 -1.4256469011306763 -0.04598096013069153 0.21605446934700012 -0.9989013075828552 0.046418651938438416 -0.0 0.5786933898925781 0.3804762363433838 0 1.0 0 0.0 0 0.0 0 0.0 1.8292148113250732 -0.10752259194850922 -0.2839455306529999 -0.2558977007865906 0.9666737914085388 -0.0 0.9435123205184937 0.579481840133667 0 1.0 0 0.0 0 0.0 0 0.0 1.8258311748504639 -0.10837635397911072 0.21605446934700012 -0.23200170695781708 0.9726859331130981 -0.0 0.5268273949623108 0.42002010345458984 0 1.0 0 0.0 0 0.0 0 0.0 1.8292148113250732 -0.10752259194850922 0.21605446934700012 -0.2558977007865906 0.9666737914085388 -0.0 0.5288844108581543 0.4212455749511719 0 1.0 0 0.0 0 0.0 0 0.0 0.5096397399902344 -0.17983725666999817 -0.2839455306529999 0.33814507722854614 -0.9410687685012817 -0.0 0.9431666135787964 0.38239461183547974 0 1.0 0 0.0 0 0.0 0 0.0 0.5193231105804443 -0.1760062575340271 0.21605445444583893 0.39918211102485657 -0.9168370366096497 -0.0 0.5548642873764038 0.2326015830039978 0 1.0 0 0.0 0 0.0 0 0.0 0.5096397399902344 -0.17983725666999817 0.21605445444583893 0.33814507722854614 -0.9410687685012817 -0.0 0.5484403967857361 0.22679364681243896 0 1.0 0 0.0 0 0.0 0 0.0 1.075943946838379 0.10244408249855042 -0.2839455306529999 -0.6831873655319214 -0.730216383934021 -0.0 0.9471895694732666 0.699965238571167 0 1.0 0 0.0 0 0.0 0 0.0 1.0795097351074219 0.09889158606529236 0.21605446934700012 -0.729789137840271 -0.6836451292037964 -0.0 0.520024836063385 0.5359216332435608 0 1.0 0 0.0 0 0.0 0 0.0 1.075943946838379 0.10244408249855042 0.21605446934700012 -0.6831873655319214 -0.730216383934021 -0.0 0.5179241895675659 0.5399326086044312 0 1.0 0 0.0 0 0.0 0 0.0 0.3386654853820801 -0.17865267395973206 -0.2839455306529999 -0.3510238826274872 -0.9363383650779724 -0.0 0.03482341766357422 0.3874672055244446 0 1.0 0 0.0 0 0.0 0 0.0 0.34803128242492676 -0.18186341226100922 0.21605445444583893 -0.29871517419815063 -0.9543138146400452 -0.0 0.4231806993484497 0.22841274738311768 0 1.0 0 0.0 0 0.0 0 0.0 0.3386654853820801 -0.17865267395973206 0.21605445444583893 -0.3510238826274872 -0.9363383650779724 -0.0 0.41710150241851807 0.23395079374313354 0 1.0 0 0.0 0 0.0 0 0.0 -1.1471540927886963 0.05856764316558838 -0.2839455306529999 0.9617297649383545 -0.27390360832214355 -0.0 0.07773932814598083 0.6743353605270386 0 1.0 0 0.0 0 0.0 0 0.0 -1.1450196504592896 0.06530898809432983 0.21605446934700012 0.9433881640434265 -0.3316446542739868 -0.0 0.5041013956069946 0.4924224019050598 0 1.0 0 0.0 0 0.0 0 0.0 -1.1471540927886963 0.05856764316558838 0.21605446934700012 0.9617297649383545 -0.27390360832214355 -0.0 0.5028736591339111 0.4844869375228882 0 1.0 0 0.0 0 0.0 0 0.0 -1.5514131784439087 -0.05019627511501312 -0.2839455306529999 0.8302560448646545 -0.557359516620636 -0.0 0.07705748081207275 0.5532599687576294 0 1.0 0 0.0 0 0.0 0 0.0 -1.5494064092636108 -0.04745984077453613 0.21605446934700012 0.7822809815406799 -0.6229133009910583 -0.0 0.49554482102394104 0.3678079843521118 0 1.0 0 0.0 0 0.0 0 0.0 -1.5514131784439087 -0.05019627511501312 0.21605446934700012 0.8302560448646545 -0.557359516620636 -0.0 0.49422264099121094 0.3645620346069336 0 1.0 0 0.0 0 0.0 0 0.0 1.7973535060882568 -0.10856122523546219 -0.2839455306529999 0.38569292426109314 0.922605037689209 -0.0 0.9636095762252808 0.5810889005661011 0 1.0 0 0.0 0 0.0 0 0.0 1.7960703372955322 -0.10798231512308121 0.21605446934700012 0.4368419349193573 0.8995330929756165 -0.0 0.5079805254936218 0.4195253252983093 0 1.0 0 0.0 0 0.0 0 0.0 1.7973535060882568 -0.10856122523546219 0.21605446934700012 0.38569292426109314 0.922605037689209 -0.0 0.5088142156600952 0.4188156723976135 0 1.0 0 0.0 0 0.0 0 0.0 -0.9963076114654541 0.06320734322071075 -0.2839455306529999 -0.9542527794837952 -0.29895931482315063 -0.0 0.9718380570411682 0.6841946840286255 0 1.0 0 0.0 0 0.0 0 0.0 -0.9942206144332886 0.05576547980308533 0.21605446934700012 -0.9698477387428284 -0.24362926185131073 -0.0 0.5934914350509644 0.4941715598106384 0 1.0 0 0.0 0 0.0 0 0.0 -0.9963076114654541 0.06320734322071075 0.21605446934700012 -0.9542527794837952 -0.29895931482315063 -0.0 0.5916581749916077 0.5021109580993652 0 1.0 0 0.0 0 0.0 0 0.0 -1.651267170906067 -0.047915905714035034 -0.2839455306529999 -0.9526658058166504 0.3039643466472626 -0.0 0.12934094667434692 0.5409854650497437 0 1.0 0 0.0 0 0.0 0 0.0 -1.652626872062683 -0.05255323648452759 0.21605446934700012 -0.9659108519554138 0.25885799527168274 -0.0 0.437128484249115 0.3739891052246094 0 1.0 0 0.0 0 0.0 0 0.0 -1.651267170906067 -0.047915905714035034 0.21605446934700012 -0.9526658058166504 0.3039643466472626 -0.0 0.43807706236839294 0.3786091208457947 0 1.0 0 0.0 0 0.0 0 0.0 1.8258311748504639 -0.10837635397911072 -0.2839455306529999 -0.23200170695781708 0.9726859331130981 -0.0 0.9456341862678528 0.5787909030914307 0 1.0 0 0.0 0 0.0 0 0.0 1.8226182460784912 -0.10909876972436905 0.21605446934700012 -0.20502334833145142 0.9787285923957825 -0.0 0.5248557925224304 0.41897040605545044 0 1.0 0 0.0 0 0.0 0 0.0 1.8258311748504639 -0.10837635397911072 0.21605446934700012 -0.23200170695781708 0.9726859331130981 -0.0 0.5268273949623108 0.42002010345458984 0 1.0 0 0.0 0 0.0 0 0.0 0.9751315116882324 0.09766566753387451 -0.2839455306529999 0.7461775541305542 -0.6657002568244934 -0.0 0.020119577646255493 0.698323130607605 0 1.0 0 0.0 0 0.0 0 0.0 0.9787123203277588 0.10141396522521973 0.21605446934700012 0.6996368169784546 -0.7144688367843628 -0.0 0.46076416969299316 0.541422963142395 0 1.0 0 0.0 0 0.0 0 0.0 0.9751315116882324 0.09766566753387451 0.21605446934700012 0.7461775541305542 -0.6657002568244934 -0.0 0.4585532248020172 0.5373673439025879 0 1.0 0 0.0 0 0.0 0 0.0 0.499387264251709 -0.18315744400024414 -0.2839455306529999 0.2797936797142029 -0.9600512981414795 -0.0 0.9485899209976196 0.37897592782974243 0 1.0 0 0.0 0 0.0 0 0.0 0.5096397399902344 -0.17983725666999817 0.21605445444583893 0.33814507722854614 -0.9410687685012817 -0.0 0.5484403967857361 0.22679364681243896 0 1.0 0 0.0 0 0.0 0 0.0 0.499387264251709 -0.18315744400024414 0.21605445444583893 0.2797936797142029 -0.9600512981414795 -0.0 0.5412908792495728 0.22151362895965576 0 1.0 0 0.0 0 0.0 0 0.0 1.0795097351074219 0.09889158606529236 -0.2839455306529999 -0.729789137840271 -0.6836451292037964 -0.0 0.9449496269226074 0.6954689025878906 0 1.0 0 0.0 0 0.0 0 0.0 1.082874059677124 0.09504234790802002 0.21605446934700012 -0.7776726484298706 -0.6286507844924927 -0.0 0.5220193862915039 0.5315750241279602 0 1.0 0 0.0 0 0.0 0 0.0 1.0795097351074219 0.09889158606529236 0.21605446934700012 -0.729789137840271 -0.6836451292037964 -0.0 0.520024836063385 0.5359216332435608 0 1.0 0 0.0 0 0.0 0 0.0 -1.2486475706100464 0.06145240366458893 -0.2839455306529999 -0.982909619808197 0.18393506109714508 -0.0 0.13654586672782898 0.6457922458648682 0 1.0 0 0.0 0 0.0 0 0.0 -1.250809907913208 0.047895535826683044 0.21605446934700012 -0.9911190867424011 0.13290810585021973 -0.0 0.44775623083114624 0.4679969549179077 0 1.0 0 0.0 0 0.0 0 0.0 -1.2486475706100464 0.06145240366458893 0.21605446934700012 -0.982909619808197 0.18393506109714508 -0.0 0.4494447708129883 0.48197758197784424 0 1.0 0 0.0 0 0.0 0 0.0 0.34803128242492676 -0.18186341226100922 -0.2839455306529999 -0.29874569177627563 -0.9543138146400452 -0.0 0.029981791973114014 0.3837677836418152 0 1.0 0 0.0 0 0.0 0 0.0 0.357837438583374 -0.18464605510234833 0.21605445444583893 -0.24854274094104767 -0.9685964584350586 -0.0 0.4298703670501709 0.22331726551055908 0 1.0 0 0.0 0 0.0 0 0.0 0.34803128242492676 -0.18186341226100922 0.21605445444583893 -0.29871517419815063 -0.9543138146400452 -0.0 0.4231806993484497 0.22841274738311768 0 1.0 0 0.0 0 0.0 0 0.0 -1.5531522035598755 -0.05303485691547394 -0.2839455306529999 0.8742637634277344 -0.4853968918323517 -0.0 0.07783758640289307 0.5496155023574829 0 1.0 0 0.0 0 0.0 0 0.0 -1.5514131784439087 -0.05019627511501312 0.21605446934700012 0.8302560448646545 -0.557359516620636 -0.0 0.49422264099121094 0.3645620346069336 0 1.0 0 0.0 0 0.0 0 0.0 -1.5531522035598755 -0.05303485691547394 0.21605446934700012 0.8742637634277344 -0.4853968918323517 -0.0 0.49306946992874146 0.36120617389678955 0 1.0 0 0.0 0 0.0 0 0.0 1.798677682876587 -0.10907202214002609 -0.2839455306529999 0.3342081904411316 0.9424726366996765 -0.0 0.9627766609191895 0.5803487300872803 0 1.0 0 0.0 0 0.0 0 0.0 1.7973535060882568 -0.10856122523546219 0.21605446934700012 0.38569292426109314 0.922605037689209 -0.0 0.5088142156600952 0.4188156723976135 0 1.0 0 0.0 0 0.0 0 0.0 1.798677682876587 -0.10907202214002609 0.21605446934700012 0.3341776728630066 0.9424726366996765 -0.0 0.509673535823822 0.41819584369659424 0 1.0 0 0.0 0 0.0 0 0.0 -1.4258877038955688 -0.05045410990715027 -0.2839455306529999 -0.9980468153953552 0.06216620281338692 -0.0 0.9980939626693726 0.5639892220497131 0 1.0 0 0.0 0 0.0 0 0.0 -1.4261819124221802 -0.05461104214191437 0.21605446934700012 -0.9967344999313354 0.08038575202226639 -0.0 0.579197108745575 0.3699303865432739 0 1.0 0 0.0 0 0.0 0 0.0 -1.4258877038955688 -0.05045410990715027 0.21605446934700012 -0.9980468153953552 0.06216620281338692 -0.0 0.5789764523506165 0.3750090003013611 0 1.0 0 0.0 0 0.0 0 0.0 1.1847076416015625 0.08581876754760742 -0.2839455306529999 0.9457685947418213 0.3248085081577301 -0.0 0.885278046131134 0.65334153175354 0 1.0 0 0.0 0 0.0 0 0.0 1.1798405647277832 0.09859970211982727 0.21605446934700012 0.921262264251709 0.3888668417930603 -0.0 0.5714326500892639 0.5292354226112366 0 1.0 0 0.0 0 0.0 0 0.0 1.1847076416015625 0.08581876754760742 0.21605446934700012 0.9457685947418213 0.3248085081577301 -0.0 0.57432621717453 0.5165024995803833 0 1.0 0 0.0 0 0.0 0 0.0 -1.1489601135253906 0.051444411277770996 -0.2839455306529999 0.9755851626396179 -0.21955016255378723 -0.0 0.07822781801223755 0.6656776666641235 0 1.0 0 0.0 0 0.0 0 0.0 -1.1471540927886963 0.05856764316558838 0.21605446934700012 0.9617297649383545 -0.27390360832214355 -0.0 0.5028736591339111 0.4844869375228882 0 1.0 0 0.0 0 0.0 0 0.0 -1.1489601135253906 0.051444411277770996 0.21605446934700012 0.9755851626396179 -0.21955016255378723 -0.0 0.5018256902694702 0.476043701171875 0 1.0 0 0.0 0 0.0 0 0.0 1.8000438213348389 -0.10951471328735352 -0.2839455306529999 0.28284555673599243 0.9591357111930847 -0.0 0.9619163274765015 0.5796900987625122 0 1.0 0 0.0 0 0.0 0 0.0 1.798677682876587 -0.10907202214002609 0.21605446934700012 0.3341776728630066 0.9424726366996765 -0.0 0.509673535823822 0.41819584369659424 0 1.0 0 0.0 0 0.0 0 0.0 1.8000438213348389 -0.10951471328735352 0.21605446934700012 0.28284555673599243 0.9591357111930847 -0.0 0.5105586647987366 0.41766583919525146 0 1.0 0 0.0 0 0.0 0 0.0 0.48856568336486816 -0.1859668493270874 -0.2839455306529999 0.22461622953414917 -0.9744254946708679 -0.0 0.9543525576591492 0.37605053186416626 0 1.0 0 0.0 0 0.0 0 0.0 0.499387264251709 -0.18315744400024414 0.21605445444583893 0.2797936797142029 -0.9600512981414795 -0.0 0.5412908792495728 0.22151362895965576 0 1.0 0 0.0 0 0.0 0 0.0 0.48856568336486816 -0.1859668493270874 0.21605445444583893 0.22461622953414917 -0.9744254946708679 -0.0 0.5333896279335022 0.21683770418167114 0 1.0 0 0.0 0 0.0 0 0.0 -0.9942206144332886 0.05576547980308533 -0.2839455306529999 -0.9698477387428284 -0.24362926185131073 -0.0 0.9708145260810852 0.6756221055984497 0 1.0 0 0.0 0 0.0 0 0.0 -0.9924546480178833 0.047824978828430176 0.21605446934700012 -0.9812005758285522 -0.19296853244304657 -0.0 0.5952191948890686 0.4855912923812866 0 1.0 0 0.0 0 0.0 0 0.0 -0.9942206144332886 0.05576547980308533 0.21605446934700012 -0.9698477387428284 -0.24362926185131073 -0.0 0.5934914350509644 0.4941715598106384 0 1.0 0 0.0 0 0.0 0 0.0 -1.652626872062683 -0.05255323648452759 -0.2839455306529999 -0.9659108519554138 0.25885799527168274 -0.0 0.1293828785419464 0.5360437631607056 0 1.0 0 0.0 0 0.0 0 0.0 -1.6537773609161377 -0.057285428047180176 0.21605446934700012 -0.9768364429473877 0.2138737142086029 -0.0 0.436267226934433 0.3692759871482849 0 1.0 0 0.0 0 0.0 0 0.0 -1.652626872062683 -0.05255323648452759 0.21605446934700012 -0.9659108519554138 0.25885799527168274 -0.0 0.437128484249115 0.3739891052246094 0 1.0 0 0.0 0 0.0 0 0.0 1.8226182460784912 -0.10909876972436905 -0.2839455306529999 -0.20505386590957642 0.9787285923957825 -0.0 0.9476549029350281 0.5782271027565002 0 1.0 0 0.0 0 0.0 0 0.0 1.819575548171997 -0.10968983918428421 0.21605446934700012 -0.1743827611207962 0.9846491813659668 -0.0 0.5229727029800415 0.41809719800949097 0 1.0 0 0.0 0 0.0 0 0.0 1.8226182460784912 -0.10909876972436905 0.21605446934700012 -0.20502334833145142 0.9787285923957825 -0.0 0.5248557925224304 0.41897040605545044 0 1.0 0 0.0 0 0.0 0 0.0 0.357837438583374 -0.18464605510234833 -0.2839455306529999 -0.24854274094104767 -0.9685964584350586 -0.0 0.024866372346878052 0.38045501708984375 0 1.0 0 0.0 0 0.0 0 0.0 0.3680837154388428 -0.1870006024837494 0.21605445444583893 -0.20072023570537567 -0.9796441793441772 -0.0 0.43719086050987244 0.2187250852584839 0 1.0 0 0.0 0 0.0 0 0.0 0.357837438583374 -0.18464605510234833 0.21605445444583893 -0.24854274094104767 -0.9685964584350586 -0.0 0.4298703670501709 0.22331726551055908 0 1.0 0 0.0 0 0.0 0 0.0 0.9717772006988525 0.09363764524459839 -0.2839455306529999 0.790978729724884 -0.6118045449256897 -0.0 0.022365719079971313 0.6935079097747803 0 1.0 0 0.0 0 0.0 0 0.0 0.9751315116882324 0.09766566753387451 0.21605446934700012 0.7461775541305542 -0.6657002568244934 -0.0 0.4585532248020172 0.5373673439025879 0 1.0 0 0.0 0 0.0 0 0.0 0.9717772006988525 0.09363764524459839 0.21605446934700012 0.790978729724884 -0.6118045449256897 -0.0 0.45645686984062195 0.5329769849777222 0 1.0 0 0.0 0 0.0 0 0.0 1.082874059677124 0.09504234790802002 -0.2839455306529999 -0.7776726484298706 -0.6286507844924927 -0.0 0.9429000616073608 0.6906435489654541 0 1.0 0 0.0 0 0.0 0 0.0 1.085960865020752 0.09090852737426758 0.21605446934700012 -0.8231146931648254 -0.5678274035453796 -0.0 0.5238659977912903 0.5269047021865845 0 1.0 0 0.0 0 0.0 0 0.0 1.082874059677124 0.09504234790802002 0.21605446934700012 -0.7776726484298706 -0.6286507844924927 -0.0 0.5220193862915039 0.5315750241279602 0 1.0 0 0.0 0 0.0 0 0.0 -1.150437831878662 0.04393930733203888 -0.2839455306529999 0.9856563210487366 -0.16873684525489807 -0.0 0.07845044136047363 0.65655916929245 0 1.0 0 0.0 0 0.0 0 0.0 -1.1489601135253906 0.051444411277770996 0.21605446934700012 0.9755851626396179 -0.21955016255378723 -0.0 0.5018256902694702 0.476043701171875 0 1.0 0 0.0 0 0.0 0 0.0 -1.150437831878662 0.04393930733203888 0.21605446934700012 0.9856563210487366 -0.16873684525489807 -0.0 0.5009591579437256 0.4670816659927368 0 1.0 0 0.0 0 0.0 0 0.0 -1.5546238422393799 -0.05597560107707977 -0.2839455306529999 0.9129306674003601 -0.40809351205825806 -0.0 0.0784434974193573 0.5459051728248596 0 1.0 0 0.0 0 0.0 0 0.0 -1.5531522035598755 -0.05303485691547394 0.21605446934700012 0.8742637634277344 -0.4853968918323517 -0.0 0.49306946992874146 0.36120617389678955 0 1.0 0 0.0 0 0.0 0 0.0 -1.5546238422393799 -0.05597560107707977 0.21605446934700012 0.9129306674003601 -0.40809351205825806 -0.0 0.49208465218544006 0.35773760080337524 0 1.0 0 0.0 0 0.0 0 0.0 1.8014509677886963 -0.10988929867744446 -0.2839455306529999 0.23218482732772827 0.9726554155349731 -0.0 0.9610292911529541 0.5791126489639282 0 1.0 0 0.0 0 0.0 0 0.0 1.8000438213348389 -0.10951471328735352 0.21605446934700012 0.28284555673599243 0.9591357111930847 -0.0 0.5105586647987366 0.41766583919525146 0 1.0 0 0.0 0 0.0 0 0.0 1.8014509677886963 -0.10988929867744446 0.21605446934700012 0.23218482732772827 0.9726554155349731 -0.0 0.511468768119812 0.41722571849823 0 1.0 0 0.0 0 0.0 0 0.0 0.4771747589111328 -0.18826544284820557 -0.2839455306529999 0.17285683751106262 -0.9849238395690918 -0.0 0.9604600667953491 0.3736436367034912 0 1.0 0 0.0 0 0.0 0 0.0 0.48856568336486816 -0.1859668493270874 0.21605445444583893 0.22461622953414917 -0.9744254946708679 -0.0 0.5333896279335022 0.21683770418167114 0 1.0 0 0.0 0 0.0 0 0.0 0.4771747589111328 -0.18826544284820557 0.21605445444583893 0.17285683751106262 -0.9849238395690918 -0.0 0.5247248411178589 0.21285533905029297 0 1.0 0 0.0 0 0.0 0 0.0 -1.250809907913208 0.047895535826683044 -0.2839455306529999 -0.9911190867424011 0.13290810585021973 -0.0 0.1357092559337616 0.6314922571182251 0 1.0 0 0.0 0 0.0 0 0.0 -1.2523545026779175 0.03370867669582367 0.21605446934700012 -0.9963377714157104 0.08532975614070892 -0.0 0.4462829530239105 0.45321154594421387 0 1.0 0 0.0 0 0.0 0 0.0 -1.250809907913208 0.047895535826683044 0.21605446934700012 -0.9911190867424011 0.13290810585021973 -0.0 0.44775623083114624 0.4679969549179077 0 1.0 0 0.0 0 0.0 0 0.0 -1.4261819124221802 -0.05461104214191437 -0.2839455306529999 -0.9967344999313354 0.08038575202226639 -0.0 0.9982823729515076 0.5589078664779663 0 1.0 0 0.0 0 0.0 0 0.0 -1.4265297651290894 -0.05845177173614502 0.21605446934700012 -0.9948118329048157 0.10165715217590332 -0.0 0.5793541073799133 0.3652379512786865 0 1.0 0 0.0 0 0.0 0 0.0 -1.4261819124221802 -0.05461104214191437 0.21605446934700012 -0.9967344999313354 0.08038575202226639 -0.0 0.579197108745575 0.3699303865432739 0 1.0 0 0.0 0 0.0 0 0.0 1.819575548171997 -0.10968983918428421 -0.2839455306529999 -0.1743827611207962 0.9846491813659668 -0.0 0.9495729804039001 0.577794075012207 0 1.0 0 0.0 0 0.0 0 0.0 1.8167030811309814 -0.1101495623588562 0.21605446934700012 -0.13934750854969025 0.9902340769767761 -0.0 0.5211812257766724 0.4174010157585144 0 1.0 0 0.0 0 0.0 0 0.0 1.819575548171997 -0.10968983918428421 0.21605446934700012 -0.1743827611207962 0.9846491813659668 -0.0 0.5229727029800415 0.41809719800949097 0 1.0 0 0.0 0 0.0 0 0.0 0.3680837154388428 -0.1870006024837494 -0.2839455306529999 -0.20072023570537567 -0.9796441793441772 -0.0 0.019471734762191772 0.3775457739830017 0 1.0 0 0.0 0 0.0 0 0.0 0.3787703514099121 -0.1889270544052124 0.21605445444583893 -0.15546128153800964 -0.9878231287002563 -0.0 0.4451525807380676 0.21470564603805542 0 1.0 0 0.0 0 0.0 0 0.0 0.3680837154388428 -0.1870006024837494 0.21605445444583893 -0.20072023570537567 -0.9796441793441772 -0.0 0.43719086050987244 0.2187250852584839 0 1.0 0 0.0 0 0.0 0 0.0 0.9687197208404541 0.08937612175941467 -0.2839455306529999 0.8328500986099243 -0.5534836649894714 -0.0 0.024366289377212524 0.6884176731109619 0 1.0 0 0.0 0 0.0 0 0.0 0.9717772006988525 0.09363764524459839 0.21605446934700012 0.790978729724884 -0.6118045449256897 -0.0 0.45645686984062195 0.5329769849777222 0 1.0 0 0.0 0 0.0 0 0.0 0.9687197208404541 0.08937612175941467 0.21605446934700012 0.8328500986099243 -0.5534836649894714 -0.0 0.45451629161834717 0.5282981395721436 0 1.0 0 0.0 0 0.0 0 0.0 0.8682868480682373 0.09347590804100037 -0.2839455306529999 -0.9256874322891235 0.37824639678001404 -0.0 0.08430463075637817 0.6701304316520691 0 1.0 0 0.0 0 0.0 0 0.0 0.8639230728149414 0.08168494701385498 0.21605446934700012 -0.9484237432479858 0.316934734582901 -0.0 0.4000667333602905 0.5195320844650269 0 1.0 0 0.0 0 0.0 0 0.0 0.8682868480682373 0.09347590804100037 0.21605446934700012 -0.9256874322891235 0.37824639678001404 -0.0 0.4029099941253662 0.5311414003372192 0 1.0 0 0.0 0 0.0 0 0.0 -0.9924546480178833 0.047824978828430176 -0.2839455306529999 -0.9812005758285522 -0.19296853244304657 -0.0 0.9700321555137634 0.6664710640907288 0 1.0 0 0.0 0 0.0 0 0.0 -0.9910098314285278 0.0393858402967453 0.21605446934700012 -0.9891659021377563 -0.14676351845264435 -0.0 0.596843957901001 0.47635602951049805 0 1.0 0 0.0 0 0.0 0 0.0 -0.9924546480178833 0.047824978828430176 0.21605446934700012 -0.9812005758285522 -0.19296853244304657 -0.0 0.5952191948890686 0.4855912923812866 0 1.0 0 0.0 0 0.0 0 0.0 -1.5558278560638428 -0.05901850759983063 -0.2839455306529999 0.9450361728668213 -0.3269447982311249 -0.0 0.07887768745422363 0.5421288013458252 0 1.0 0 0.0 0 0.0 0 0.0 -1.5546238422393799 -0.05597560107707977 0.21605446934700012 0.9129306674003601 -0.40809351205825806 -0.0 0.49208465218544006 0.35773760080337524 0 1.0 0 0.0 0 0.0 0 0.0 -1.5558278560638428 -0.05901850759983063 0.21605446934700012 0.9450361728668213 -0.3269447982311249 -0.0 0.4912683963775635 0.3541536331176758 0 1.0 0 0.0 0 0.0 0 0.0 1.8028995990753174 -0.11019577831029892 -0.2839455306529999 0.1825312077999115 0.983184278011322 -0.0 0.9601153135299683 0.5786160230636597 0 1.0 0 0.0 0 0.0 0 0.0 1.8014509677886963 -0.10988929867744446 0.21605446934700012 0.23218482732772827 0.9726554155349731 -0.0 0.511468768119812 0.41722571849823 0 1.0 0 0.0 0 0.0 0 0.0 1.8028995990753174 -0.11019577831029892 0.21605446934700012 0.1825312077999115 0.983184278011322 -0.0 0.5124037265777588 0.4168756604194641 0 1.0 0 0.0 0 0.0 0 0.0 0.46521472930908203 -0.19005325436592102 -0.2839455306529999 0.12463758885860443 -0.9921872615814209 -0.0 0.9669138193130493 0.3717842698097229 0 1.0 0 0.0 0 0.0 0 0.0 0.4771747589111328 -0.18826544284820557 0.21605445444583893 0.17285683751106262 -0.9849238395690918 -0.0 0.5247248411178589 0.21285533905029297 0 1.0 0 0.0 0 0.0 0 0.0 0.46521472930908203 -0.19005325436592102 0.21605445444583893 0.12463758885860443 -0.9921872615814209 -0.0 0.5153055787086487 0.20966792106628418 0 1.0 0 0.0 0 0.0 0 0.0 1.085960865020752 0.09090852737426758 -0.2839455306529999 -0.8231146931648254 -0.5678274035453796 -0.0 0.941087543964386 0.6855176687240601 0 1.0 0 0.0 0 0.0 0 0.0 1.0887703895568848 0.08649012446403503 0.21605446934700012 -0.8627277612686157 -0.5056306719779968 -0.0 0.5255663990974426 0.5219049453735352 0 1.0 0 0.0 0 0.0 0 0.0 1.085960865020752 0.09090852737426758 0.21605446934700012 -0.8231146931648254 -0.5678274035453796 -0.0 0.5238659977912903 0.5269047021865845 0 1.0 0 0.0 0 0.0 0 0.0 -1.6537773609161377 -0.057285428047180176 -0.2839455306529999 -0.9768364429473877 0.2138737142086029 -0.0 0.129322350025177 0.5310729742050171 0 1.0 0 0.0 0 0.0 0 0.0 -1.6547187566757202 -0.062112487852573395 0.21605446934700012 -0.9855342507362366 0.16928617656230927 -0.0 0.4354926347732544 0.3644673228263855 0 1.0 0 0.0 0 0.0 0 0.0 -1.6537773609161377 -0.057285428047180176 0.21605446934700012 -0.9768364429473877 0.2138737142086029 -0.0 0.436267226934433 0.3692759871482849 0 1.0 0 0.0 0 0.0 0 0.0 1.8167030811309814 -0.1101495623588562 -0.2839455306529999 -0.13934750854969025 0.9902340769767761 -0.0 0.9513869285583496 0.5774950981140137 0 1.0 0 0.0 0 0.0 0 0.0 1.8140008449554443 -0.11047793179750443 0.21605446934700012 -0.09912411868572235 0.9950559735298157 -0.0 0.5194841623306274 0.41688209772109985 0 1.0 0 0.0 0 0.0 0 0.0 1.8167030811309814 -0.1101495623588562 0.21605446934700012 -0.13934750854969025 0.9902340769767761 -0.0 0.5211812257766724 0.4174010157585144 0 1.0 0 0.0 0 0.0 0 0.0 0.3787703514099121 -0.1889270544052124 -0.2839455306529999 -0.15546128153800964 -0.9878231287002563 -0.0 0.013794481754302979 0.37505996227264404 0 1.0 0 0.0 0 0.0 0 0.0 0.38989734649658203 -0.19042539596557617 0.21605445444583893 -0.11279641091823578 -0.9935911297798157 -0.0 0.4537515640258789 0.2113369107246399 0 1.0 0 0.0 0 0.0 0 0.0 0.3787703514099121 -0.1889270544052124 0.21605445444583893 -0.15546128153800964 -0.9878231287002563 -0.0 0.4451525807380676 0.21470564603805542 0 1.0 0 0.0 0 0.0 0 0.0 -1.1515871286392212 0.036052316427230835 -0.2839455306529999 0.9925839900970459 -0.12149418890476227 -0.0 0.0784153938293457 0.6469727158546448 0 1.0 0 0.0 0 0.0 0 0.0 -1.150437831878662 0.04393930733203888 0.21605446934700012 0.9856563210487366 -0.16873684525489807 -0.0 0.5009591579437256 0.4670816659927368 0 1.0 0 0.0 0 0.0 0 0.0 -1.1515871286392212 0.036052316427230835 0.21605446934700012 0.9925839900970459 -0.12149418890476227 -0.0 0.500276505947113 0.45759135484695435 0 1.0 0 0.0 0 0.0 0 0.0 -0.9910098314285278 0.0393858402967453 -0.2839455306529999 -0.9891659021377563 -0.14676351845264435 -0.0 0.9694821834564209 0.656730055809021 0 1.0 0 0.0 0 0.0 0 0.0 -0.9898860454559326 0.0304480642080307 0.21605446934700012 -0.9944761395454407 -0.10477004200220108 -0.0 0.5983680486679077 0.4664538502693176 0 1.0 0 0.0 0 0.0 0 0.0 -0.9910098314285278 0.0393858402967453 0.21605446934700012 -0.9891659021377563 -0.14676351845264435 -0.0 0.596843957901001 0.47635602951049805 0 1.0 0 0.0 0 0.0 0 0.0 -1.4265297651290894 -0.05845177173614502 -0.2839455306529999 -0.9948118329048157 0.10165715217590332 -0.0 0.9985008239746094 0.554226279258728 0 1.0 0 0.0 0 0.0 0 0.0 -1.4269311428070068 -0.06197628378868103 0.21605446934700012 -0.9919126033782959 0.1267433762550354 -0.0 0.5794463753700256 0.36092859506607056 0 1.0 0 0.0 0 0.0 0 0.0 -1.4265297651290894 -0.05845177173614502 0.21605446934700012 -0.9948118329048157 0.10165715217590332 -0.0 0.5793541073799133 0.3652379512786865 0 1.0 0 0.0 0 0.0 0 0.0 0.9659590721130371 0.08488109707832336 -0.2839455306529999 0.8699911236763 -0.4930265247821808 -0.0 0.026126623153686523 0.6830544471740723 0 1.0 0 0.0 0 0.0 0 0.0 0.9687197208404541 0.08937612175941467 0.21605446934700012 0.8328500986099243 -0.5534836649894714 -0.0 0.45451629161834717 0.5282981395721436 0 1.0 0 0.0 0 0.0 0 0.0 0.9659590721130371 0.08488109707832336 0.21605446934700012 0.8699911236763 -0.4930265247821808 -0.0 0.45273035764694214 0.52332603931427 0 1.0 0 0.0 0 0.0 0 0.0 1.804389238357544 -0.1104341521859169 -0.2839455306529999 0.1342814415693283 0.9909359812736511 -0.0 0.9591747522354126 0.5781999826431274 0 1.0 0 0.0 0 0.0 0 0.0 1.8028995990753174 -0.11019577831029892 0.21605446934700012 0.1825312077999115 0.983184278011322 -0.0 0.5124037265777588 0.4168756604194641 0 1.0 0 0.0 0 0.0 0 0.0 1.804389238357544 -0.1104341521859169 0.21605446934700012 0.1342814415693283 0.9909359812736511 -0.0 0.5133629441261292 0.4166155457496643 0 1.0 0 0.0 0 0.0 0 0.0 0.4526855945587158 -0.19133025407791138 -0.2839455306529999 0.0798974558711052 -0.9967955350875854 -0.0 0.9737112522125244 0.37050437927246094 0 1.0 0 0.0 0 0.0 0 0.0 0.46521472930908203 -0.19005325436592102 0.21605445444583893 0.12463758885860443 -0.9921872615814209 -0.0 0.5153055787086487 0.20966792106628418 0 1.0 0 0.0 0 0.0 0 0.0 0.4526855945587158 -0.19133025407791138 0.21605445444583893 0.0798974558711052 -0.9967955350875854 -0.0 0.5051671266555786 0.20738548040390015 0 1.0 0 0.0 0 0.0 0 0.0 1.0887703895568848 0.08649012446403503 -0.2839455306529999 -0.8627277612686157 -0.5056306719779968 -0.0 0.939506471157074 0.6800910234451294 0 1.0 0 0.0 0 0.0 0 0.0 1.0913023948669434 0.081787109375 0.21605446934700012 -0.8963896632194519 -0.443250834941864 -0.0 0.5271219611167908 0.5165688991546631 0 1.0 0 0.0 0 0.0 0 0.0 1.0887703895568848 0.08649012446403503 0.21605446934700012 -0.8627277612686157 -0.5056306719779968 -0.0 0.5255663990974426 0.5219049453735352 0 1.0 0 0.0 0 0.0 0 0.0 0.38989734649658203 -0.19042539596557617 -0.2839455306529999 -0.11279641091823578 -0.9935911297798157 -0.0 0.00783383846282959 0.3730196952819824 0 1.0 0 0.0 0 0.0 0 0.0 0.40146446228027344 -0.1914956420660019 0.21605445444583893 -0.07275612652301788 -0.9973449110984802 -0.0 0.46296530961990356 0.2087029218673706 0 1.0 0 0.0 0 0.0 0 0.0 0.38989734649658203 -0.19042539596557617 0.21605445444583893 -0.11279641091823578 -0.9935911297798157 -0.0 0.4537515640258789 0.2113369107246399 0 1.0 0 0.0 0 0.0 0 0.0 -1.1524080038070679 0.027783438563346863 -0.2839455306529999 0.9969481229782104 -0.07782220095396042 -0.0 0.0781308114528656 0.6369128227233887 0 1.0 0 0.0 0 0.0 0 0.0 -1.1515871286392212 0.036052316427230835 0.21605446934700012 0.9925839900970459 -0.12149418890476227 -0.0 0.500276505947113 0.45759135484695435 0 1.0 0 0.0 0 0.0 0 0.0 -1.1524080038070679 0.027783438563346863 0.21605446934700012 0.9969481229782104 -0.07782220095396042 -0.0 0.49978107213974 0.44756609201431274 0 1.0 0 0.0 0 0.0 0 0.0 -1.5567642450332642 -0.0621635764837265 -0.2839455306529999 0.9698172211647034 -0.24378184974193573 -0.0 0.07914271950721741 0.5382862091064453 0 1.0 0 0.0 0 0.0 0 0.0 -1.5558278560638428 -0.05901850759983063 0.21605446934700012 0.9450361728668213 -0.3269447982311249 -0.0 0.4912683963775635 0.3541536331176758 0 1.0 0 0.0 0 0.0 0 0.0 -1.5567642450332642 -0.0621635764837265 0.21605446934700012 0.9698172211647034 -0.24378184974193573 -0.0 0.4906209409236908 0.35045212507247925 0 1.0 0 0.0 0 0.0 0 0.0 1.8059203624725342 -0.1106044203042984 -0.2839455306529999 0.0876796767115593 0.9961241483688354 -0.0 0.9582072496414185 0.5778639912605286 0 1.0 0 0.0 0 0.0 0 0.0 1.804389238357544 -0.1104341521859169 0.21605446934700012 0.1342814415693283 0.9909359812736511 -0.0 0.5133629441261292 0.4166155457496643 0 1.0 0 0.0 0 0.0 0 0.0 1.8059203624725342 -0.1106044203042984 0.21605446934700012 0.0876796767115593 0.9961241483688354 -0.0 0.514346182346344 0.4164454936981201 0 1.0 0 0.0 0 0.0 0 0.0 -1.2523545026779175 0.03370867669582367 -0.2839455306529999 -0.9963377714157104 0.08532975614070892 -0.0 0.13453033566474915 0.6165791153907776 0 1.0 0 0.0 0 0.0 0 0.0 -1.2532812356948853 0.018891841173171997 0.21605446934700012 -0.9991455078125 0.04119998961687088 -0.0 0.44502511620521545 0.437610387802124 0 1.0 0 0.0 0 0.0 0 0.0 -1.2523545026779175 0.03370867669582367 0.21605446934700012 -0.9963377714157104 0.08532975614070892 -0.0 0.4462829530239105 0.45321154594421387 0 1.0 0 0.0 0 0.0 0 0.0 1.8140008449554443 -0.11047793179750443 -0.2839455306529999 -0.09912411868572235 0.9950559735298157 -0.0 0.953095555305481 0.5773330926895142 0 1.0 0 0.0 0 0.0 0 0.0 1.8114688396453857 -0.11067495495080948 0.21605446934700012 -0.052674949169158936 0.9985961318016052 -0.0 0.5178840756416321 0.41654032468795776 0 1.0 0 0.0 0 0.0 0 0.0 1.8140008449554443 -0.11047793179750443 0.21605446934700012 -0.09912411868572235 0.9950559735298157 -0.0 0.5194841623306274 0.41688209772109985 0 1.0 0 0.0 0 0.0 0 0.0 1.1888792514801025 0.0722278356552124 -0.2839455306529999 0.964476466178894 0.2641376852989197 -0.0 0.884676992893219 0.6387784481048584 0 1.0 0 0.0 0 0.0 0 0.0 1.1847076416015625 0.08581876754760742 0.21605446934700012 0.9457685947418213 0.3248085081577301 -0.0 0.57432621717453 0.5165024995803833 0 1.0 0 0.0 0 0.0 0 0.0 1.1888792514801025 0.0722278356552124 0.21605446934700012 0.964476466178894 0.2641376852989197 -0.0 0.5769736170768738 0.5028921365737915 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295642137527466 -0.06969787180423737 -0.2839455306529999 0.99993896484375 0.008484145626425743 -0.0 0.946895956993103 0.5426977872848511 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 0.21605446934700012 0.999969482421875 -0.0025025177747011185 -0.0 0.6335775852203369 0.3873562812805176 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295642137527466 -0.06969787180423737 0.21605446934700012 0.99993896484375 0.008484145626425743 -0.0 0.6346471905708313 0.37915945053100586 0 1.0 0 0.0 0 0.0 0 0.0 0.4395871162414551 -0.19209645688533783 -0.2839455306529999 0.038544878363609314 -0.999237060546875 -0.0 0.9808439016342163 0.36983782052993774 0 1.0 0 0.0 0 0.0 0 0.0 0.4526855945587158 -0.19133025407791138 0.21605445444583893 0.0798974558711052 -0.9967955350875854 -0.0 0.5051671266555786 0.20738548040390015 0 1.0 0 0.0 0 0.0 0 0.0 0.4395871162414551 -0.19209645688533783 0.21605445444583893 0.038544878363609314 -0.999237060546875 -0.0 0.49437659978866577 0.20612168312072754 0 1.0 0 0.0 0 0.0 0 0.0 -0.9898860454559326 0.0304480642080307 -0.2839455306529999 -0.9944761395454407 -0.10477004200220108 -0.0 0.9691557884216309 0.6463892459869385 0 1.0 0 0.0 0 0.0 0 0.0 -0.9890834093093872 0.021011650562286377 0.21605446934700012 -0.9977721571922302 -0.06659138947725296 -0.0 0.5997934341430664 0.4558762311935425 0 1.0 0 0.0 0 0.0 0 0.0 -0.9898860454559326 0.0304480642080307 0.21605446934700012 -0.9944761395454407 -0.10477004200220108 -0.0 0.5983680486679077 0.4664538502693176 0 1.0 0 0.0 0 0.0 0 0.0 -1.4269311428070068 -0.06197628378868103 -0.2839455306529999 -0.9919126033782959 0.1267433762550354 -0.0 0.9987492561340332 0.5499416589736938 0 1.0 0 0.0 0 0.0 0 0.0 -1.427385926246643 -0.0651845932006836 0.21605446934700012 -0.9876095056533813 0.15674306452274323 -0.0 0.579473078250885 0.3569989800453186 0 1.0 0 0.0 0 0.0 0 0.0 -1.4269311428070068 -0.06197628378868103 0.21605446934700012 -0.9919126033782959 0.1267433762550354 -0.0 0.5794463753700256 0.36092859506607056 0 1.0 0 0.0 0 0.0 0 0.0 0.40146446228027344 -0.1914956420660019 -0.2839455306529999 -0.07275612652301788 -0.9973449110984802 -0.0 1.0015926361083984 0.3714491128921509 0 1.0 0 0.0 0 0.0 0 0.0 0.41347193717956543 -0.19213779270648956 0.21605445444583893 -0.035279396921396255 -0.999359130859375 -0.0 1.4727497100830078 0.2068910002708435 0 1.0 0 0.0 0 0.0 0 0.0 0.40146446228027344 -0.1914956420660019 0.21605445444583893 -0.07275612652301788 -0.9973449110984802 -0.0 1.4629652500152588 0.2087029218673706 0 1.0 0 0.0 0 0.0 0 0.0 0.9634950160980225 0.08015254139900208 -0.2839455306529999 0.9021271467208862 -0.43140965700149536 -0.0 0.027652353048324585 0.6774187088012695 0 1.0 0 0.0 0 0.0 0 0.0 0.9659590721130371 0.08488109707832336 0.21605446934700012 0.8699911236763 -0.4930265247821808 -0.0 0.45273035764694214 0.52332603931427 0 1.0 0 0.0 0 0.0 0 0.0 0.9634950160980225 0.08015254139900208 0.21605446934700012 0.9021271467208862 -0.43140965700149536 -0.0 0.45109784603118896 0.5180555582046509 0 1.0 0 0.0 0 0.0 0 0.0 1.807492971420288 -0.11070658266544342 -0.2839455306529999 0.04293954372406006 0.999053955078125 -0.0 0.9572130441665649 0.5776077508926392 0 1.0 0 0.0 0 0.0 0 0.0 1.8059203624725342 -0.1106044203042984 0.21605446934700012 0.0876796767115593 0.9961241483688354 -0.0 0.514346182346344 0.4164454936981201 0 1.0 0 0.0 0 0.0 0 0.0 1.807492971420288 -0.11070658266544342 0.21605446934700012 0.04293954372406006 0.999053955078125 -0.0 0.5153530836105347 0.41636550426483154 0 1.0 0 0.0 0 0.0 0 0.0 1.0913023948669434 0.081787109375 -0.2839455306529999 -0.8963896632194519 -0.443250834941864 -0.0 0.938151478767395 0.6743619441986084 0 1.0 0 0.0 0 0.0 0 0.0 1.0935571193695068 0.07679951190948486 0.21605446934700012 -0.9242530465126038 -0.3817560374736786 -0.0 0.528533935546875 0.5108895301818848 0 1.0 0 0.0 0 0.0 0 0.0 1.0913023948669434 0.081787109375 0.21605446934700012 -0.8963896632194519 -0.443250834941864 -0.0 0.5271219611167908 0.5165688991546631 0 1.0 0 0.0 0 0.0 0 0.0 -1.6547187566757202 -0.062112487852573395 -0.2839455306529999 -0.9855342507362366 0.16928617656230927 -0.0 0.12916091084480286 0.5260705351829529 0 1.0 0 0.0 0 0.0 0 0.0 -1.6554508209228516 -0.06703440845012665 0.21605446934700012 -0.9920957088470459 0.12540055811405182 -0.0 0.43480435013771057 0.3595607280731201 0 1.0 0 0.0 0 0.0 0 0.0 -1.6547187566757202 -0.062112487852573395 0.21605446934700012 -0.9855342507362366 0.16928617656230927 -0.0 0.4354926347732544 0.3644673228263855 0 1.0 0 0.0 0 0.0 0 0.0 0.41347193717956543 -0.19213779270648956 -0.2839455306529999 -0.035279396921396255 -0.999359130859375 -0.0 0.9950767755508423 0.37037354707717896 0 1.0 0 0.0 0 0.0 0 0.0 0.4259195327758789 -0.19235184788703918 0.21605445444583893 0.0007324442267417908 -0.999969482421875 -0.0 1.483035922050476 0.2059873342514038 0 1.0 0 0.0 0 0.0 0 0.0 0.41347193717956543 -0.19213779270648956 0.21605445444583893 -0.035279396921396255 -0.999359130859375 -0.0 1.4727497100830078 0.2068910002708435 0 1.0 0 0.0 0 0.0 0 0.0 1.8114688396453857 -0.11067495495080948 -0.2839455306529999 -0.052705466747283936 0.9985961318016052 -0.0 0.9546976089477539 0.5773108601570129 0 1.0 0 0.0 0 0.0 0 0.0 1.8091070652008057 -0.11074063181877136 0.21605446934700012 -0.003326517529785633 0.999969482421875 -0.0 0.5163832306861877 0.4163755178451538 0 1.0 0 0.0 0 0.0 0 0.0 1.8114688396453857 -0.11067495495080948 0.21605446934700012 -0.052674949169158936 0.9985961318016052 -0.0 0.5178840756416321 0.41654032468795776 0 1.0 0 0.0 0 0.0 0 0.0 -1.1529005765914917 0.019132673740386963 -0.2839455306529999 0.999267578125 -0.03750724717974663 -0.0 0.0776045024394989 0.6263766288757324 0 1.0 0 0.0 0 0.0 0 0.0 -1.1524080038070679 0.027783438563346863 0.21605446934700012 0.9969481229782104 -0.07782220095396042 -0.0 0.49978107213974 0.44756609201431274 0 1.0 0 0.0 0 0.0 0 0.0 -1.1529005765914917 0.019132673740386963 0.21605446934700012 0.999267578125 -0.03750724717974663 -0.0 0.49947699904441833 0.4370027780532837 0 1.0 0 0.0 0 0.0 0 0.0 0.4259195327758789 -0.19235184788703918 -0.2839455306529999 0.0007324442267417908 -0.999969482421875 -0.0 0.9882972240447998 0.3698185086250305 0 1.0 0 0.0 0 0.0 0 0.0 0.4395871162414551 -0.19209645688533783 0.21605445444583893 0.038544878363609314 -0.999237060546875 -0.0 0.49437659978866577 0.20612168312072754 0 1.0 0 0.0 0 0.0 0 0.0 0.4259195327758789 -0.19235184788703918 0.21605445444583893 0.0007324442267417908 -0.999969482421875 -0.0 1.483035922050476 0.2059873342514038 0 1.0 0 0.0 0 0.0 0 0.0 -0.9890834093093872 0.021011650562286377 -0.2839455306529999 -0.9977721571922302 -0.06659138947725296 -0.0 0.9690446853637695 0.6354416608810425 0 1.0 0 0.0 0 0.0 0 0.0 -0.988601803779602 0.011076599359512329 0.21605446934700012 -0.999481201171875 -0.0318918414413929 -0.0 0.6011215448379517 0.44461947679519653 0 1.0 0 0.0 0 0.0 0 0.0 -0.9890834093093872 0.021011650562286377 0.21605446934700012 -0.9977721571922302 -0.06659138947725296 -0.0 0.5997934341430664 0.4558762311935425 0 1.0 0 0.0 0 0.0 0 0.0 0.8639230728149414 0.08168494701385498 -0.2839455306529999 -0.9484237432479858 0.316934734582901 -0.0 0.08550941944122314 0.6573827266693115 0 1.0 0 0.0 0 0.0 0 0.0 0.8602306842803955 0.06933698058128357 0.21605446934700012 -0.9663075804710388 0.25730153918266296 -0.0 0.39746999740600586 0.5072903633117676 0 1.0 0 0.0 0 0.0 0 0.0 0.8639230728149414 0.08168494701385498 0.21605446934700012 -0.9484237432479858 0.316934734582901 -0.0 0.4000667333602905 0.5195320844650269 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 0.18803346157073975 -0.2839455306529999 -1.0 0.0 -0.0 0.09209313988685608 0.823844313621521 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 -0.04734307527542114 0.21605446934700012 -0.999969482421875 -0.005340739153325558 -0.0 0.4058777093887329 0.4971381425857544 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 0.18803346157073975 0.21605448424816132 -1.0 0.0 -0.0 0.42104125022888184 0.6850046515464783 0 1.0 0 0.0 0 0.0 0 0.0 -1.5574332475662231 -0.0654108077287674 -0.2839455306529999 0.9870296120643616 -0.16049684584140778 -0.0 0.07924100756645203 0.5343766212463379 0 1.0 0 0.0 0 0.0 0 0.0 -1.5567642450332642 -0.0621635764837265 0.21605446934700012 0.9698172211647034 -0.24378184974193573 -0.0 0.4906209409236908 0.35045212507247925 0 1.0 0 0.0 0 0.0 0 0.0 -1.5574332475662231 -0.0654108077287674 0.21605446934700012 0.9870296120643616 -0.16049684584140778 -0.0 0.49014294147491455 0.3466310501098633 0 1.0 0 0.0 0 0.0 0 0.0 1.8091070652008057 -0.11074063181877136 -0.2839455306529999 -0.003326517529785633 0.999969482421875 -0.0 0.9561920166015625 0.5774307250976562 0 1.0 0 0.0 0 0.0 0 0.0 1.807492971420288 -0.11070658266544342 0.21605446934700012 0.04293954372406006 0.999053955078125 -0.0 0.5153530836105347 0.41636550426483154 0 1.0 0 0.0 0 0.0 0 0.0 1.8091070652008057 -0.11074063181877136 0.21605446934700012 -0.003326517529785633 0.999969482421875 -0.0 0.5163832306861877 0.4163755178451538 0 1.0 0 0.0 0 0.0 0 0.0 -1.427385926246643 -0.0651845932006836 -0.2839455306529999 -0.9876095056533813 0.15674306452274323 -0.0 0.9990274310112 0.5460504293441772 0 1.0 0 0.0 0 0.0 0 0.0 -1.4278943538665771 -0.06807669252157211 0.21605446934700012 -0.9811395406723022 0.19315165281295776 -0.0 0.5794331431388855 0.3534455895423889 0 1.0 0 0.0 0 0.0 0 0.0 -1.427385926246643 -0.0651845932006836 0.21605446934700012 -0.9876095056533813 0.15674306452274323 -0.0 0.579473078250885 0.3569989800453186 0 1.0 0 0.0 0 0.0 0 0.0 -0.05954456329345703 0.18803346157073975 -0.2839455306529999 0.0 0.999969482421875 -0.0 0.018389105796813965 0.8526803851127625 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 0.18803346157073975 0.21605448424816132 0.0 0.999969482421875 -0.0 0.42104125022888184 0.6850046515464783 0 1.0 0 0.0 0 0.0 0 0.0 -0.05954456329345703 0.18803346157073975 0.21605448424816132 0.0 1.0 -0.0 0.46700388193130493 0.6951695084571838 0 1.0 0 0.0 0 0.0 0 0.0 -1.1530647277832031 0.010100007057189941 -0.2839455306529999 0.999969482421875 -0.00317392498254776 -0.0 0.07684415578842163 0.6153649091720581 0 1.0 0 0.0 0 0.0 0 0.0 -1.1529005765914917 0.019132673740386963 0.21605446934700012 0.999267578125 -0.03750724717974663 -0.0 0.49947699904441833 0.4370027780532837 0 1.0 0 0.0 0 0.0 0 0.0 -1.1530647277832031 0.010100007057189941 0.21605446934700012 0.999969482421875 -0.00317392498254776 -0.0 0.4993695318698883 0.4259029030799866 0 1.0 0 0.0 0 0.0 0 0.0 0.9613277912139893 0.0751904845237732 -0.2839455306529999 0.9291360378265381 -0.36967071890830994 -0.0 0.028948843479156494 0.6715095043182373 0 1.0 0 0.0 0 0.0 0 0.0 0.9634950160980225 0.08015254139900208 0.21605446934700012 0.9021271467208862 -0.43140965700149536 -0.0 0.45109784603118896 0.5180555582046509 0 1.0 0 0.0 0 0.0 0 0.0 0.9613277912139893 0.0751904845237732 0.21605446934700012 0.9291360378265381 -0.36967071890830994 -0.0 0.4496181607246399 0.512480616569519 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 -0.2839455306529999 -0.9957884550094604 -0.09140293300151825 -0.0 0.03589153289794922 0.5779250860214233 0 1.0 0 0.0 0 0.0 0 0.0 1.6852014064788818 -0.11525513231754303 0.21605446934700012 -0.9934385418891907 -0.11429181694984436 -0.0 0.43650829792022705 0.4166916012763977 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 0.21605446934700012 -0.9957884550094604 -0.09140293300151825 -0.0 0.43651407957077026 0.4216722249984741 0 1.0 0 0.0 0 0.0 0 0.0 -1.2532812356948853 0.018891841173171997 -0.2839455306529999 -0.9991455078125 0.04119998961687088 -0.0 0.13302001357078552 0.6010407209396362 0 1.0 0 0.0 0 0.0 0 0.0 -1.2535901069641113 0.0034450143575668335 0.21605446934700012 -0.999969482421875 -0.00045777764171361923 -0.0 0.4439847469329834 0.42119497060775757 0 1.0 0 0.0 0 0.0 0 0.0 -1.2532812356948853 0.018891841173171997 0.21605446934700012 -0.9991455078125 0.04119998961687088 -0.0 0.44502511620521545 0.437610387802124 0 1.0 0 0.0 0 0.0 0 0.0 1.0935571193695068 0.07679951190948486 -0.2839455306529999 -0.9242530465126038 -0.3817560374736786 -0.0 0.9370168447494507 0.6683270931243896 0 1.0 0 0.0 0 0.0 0 0.0 1.0955345630645752 0.07152733206748962 0.21605446934700012 -0.9467146992683411 -0.32203131914138794 -0.0 0.5298032760620117 0.5048590898513794 0 1.0 0 0.0 0 0.0 0 0.0 1.0935571193695068 0.07679951190948486 0.21605446934700012 -0.9242530465126038 -0.3817560374736786 -0.0 0.528533935546875 0.5108895301818848 0 1.0 0 0.0 0 0.0 0 0.0 -0.05954456329345703 0.01710525155067444 -0.2839455306529999 0.999969482421875 0.0014648884534835815 -0.0 0.014768153429031372 0.7227939367294312 0 1.0 0 0.0 0 0.0 0 0.0 -0.05954456329345703 0.18803346157073975 0.21605448424816132 1.0 0.0 -0.0 0.46700388193130493 0.6951695084571838 0 1.0 0 0.0 0 0.0 0 0.0 -0.05954456329345703 0.01710525155067444 0.21605446934700012 0.999969482421875 0.0014648884534835815 -0.0 0.4619511365890503 0.5655359625816345 0 1.0 0 0.0 0 0.0 0 0.0 -1.557834506034851 -0.06876019388437271 -0.2839455306529999 0.9968565702438354 -0.0788903459906578 -0.0 0.07917439937591553 0.5303995609283447 0 1.0 0 0.0 0 0.0 0 0.0 -1.5574332475662231 -0.0654108077287674 0.21605446934700012 0.9870296120643616 -0.16049684584140778 -0.0 0.49014294147491455 0.3466310501098633 0 1.0 0 0.0 0 0.0 0 0.0 -1.557834506034851 -0.06876019388437271 0.21605446934700012 0.9968565702438354 -0.0788903459906578 -0.0 0.4898357689380646 0.3426889181137085 0 1.0 0 0.0 0 0.0 0 0.0 0.08196139335632324 0.18803346157073975 -0.2839455306529999 -1.0 0.0 -0.0 0.896752655506134 0.8321271538734436 0 1.0 0 0.0 0 0.0 0 0.0 0.08196139335632324 0.03111577033996582 0.21605446934700012 -0.999969482421875 0.0019531846046447754 -0.0 0.5414687395095825 0.5723863840103149 0 1.0 0 0.0 0 0.0 0 0.0 0.08196139335632324 0.18803346157073975 0.21605448424816132 -1.0 0.0 -0.0 0.536641538143158 0.6864609718322754 0 1.0 0 0.0 0 0.0 0 0.0 1.6852014064788818 -0.11525513231754303 -0.2839455306529999 -0.9934385418891907 -0.11429181694984436 -0.0 0.03549852967262268 0.5730034112930298 0 1.0 0 0.0 0 0.0 0 0.0 1.6856610774993896 -0.11884532123804092 0.21605446934700012 -0.9896237254142761 -0.143589586019516 -0.0 0.4365590512752533 0.4122923016548157 0 1.0 0 0.0 0 0.0 0 0.0 1.6852014064788818 -0.11525513231754303 0.21605446934700012 -0.9934385418891907 -0.11429181694984436 -0.0 0.43650829792022705 0.4166916012763977 0 1.0 0 0.0 0 0.0 0 0.0 -0.988601803779602 0.011076599359512329 -0.2839455306529999 -0.999481201171875 -0.0318918414413929 -0.0 0.9691407680511475 0.6238844990730286 0 1.0 0 0.0 0 0.0 0 0.0 -0.9884412288665771 0.0006429105997085571 0.21605446934700012 -0.999969482421875 0.0011291848495602608 -0.0 0.6023536920547485 0.432685911655426 0 1.0 0 0.0 0 0.0 0 0.0 -0.988601803779602 0.011076599359512329 0.21605446934700012 -0.999481201171875 -0.0318918414413929 -0.0 0.6011215448379517 0.44461947679519653 0 1.0 0 0.0 0 0.0 0 0.0 -1.6554508209228516 -0.06703440845012665 -0.2839455306529999 -0.9920957088470459 0.12540055811405182 -0.0 0.1288999617099762 0.5210342407226562 0 1.0 0 0.0 0 0.0 0 0.0 -1.6559737920761108 -0.07205118983983994 0.21605446934700012 -0.9965819120407104 0.08249153196811676 -0.0 0.4342021346092224 0.35455411672592163 0 1.0 0 0.0 0 0.0 0 0.0 -1.6554508209228516 -0.06703440845012665 0.21605446934700012 -0.9920957088470459 0.12540055811405182 -0.0 0.43480435013771057 0.3595607280731201 0 1.0 0 0.0 0 0.0 0 0.0 0.9594573974609375 0.06999492645263672 -0.2839455306529999 0.9511398673057556 -0.3086947202682495 -0.0 0.03002151846885681 0.6653246879577637 0 1.0 0 0.0 0 0.0 0 0.0 0.9613277912139893 0.0751904845237732 0.21605446934700012 0.9291360378265381 -0.36967071890830994 -0.0 0.4496181607246399 0.512480616569519 0 1.0 0 0.0 0 0.0 0 0.0 0.9594573974609375 0.06999492645263672 0.21605446934700012 0.9511398673057556 -0.3086947202682495 -0.0 0.44829061627388 0.5065951347351074 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 0.18803346157073975 -0.2839455306529999 0.0 0.999969482421875 -0.0 0.8460309505462646 0.7894145250320435 0 1.0 0 0.0 0 0.0 0 0.0 0.08196139335632324 0.18803346157073975 0.21605448424816132 0.0 0.999969482421875 -0.0 0.536641538143158 0.6864609718322754 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 0.18803346157073975 0.21605448424816132 0.0 1.0 -0.0 0.5768240690231323 0.6677558422088623 0 1.0 0 0.0 0 0.0 0 0.0 1.6856610774993896 -0.11884532123804092 -0.2839455306529999 -0.9896237254142761 -0.143589586019516 -0.0 0.03509938716888428 0.5686724185943604 0 1.0 0 0.0 0 0.0 0 0.0 1.6861646175384521 -0.12194903194904327 0.21605446934700012 -0.9862361550331116 -0.16528823971748352 -0.0 0.43666714429855347 0.4084749221801758 0 1.0 0 0.0 0 0.0 0 0.0 1.6856610774993896 -0.11884532123804092 0.21605446934700012 -0.9896237254142761 -0.143589586019516 -0.0 0.4365590512752533 0.4122923016548157 0 1.0 0 0.0 0 0.0 0 0.0 -1.4278943538665771 -0.06807669252157211 -0.2839455306529999 -0.9811395406723022 0.19315165281295776 -0.0 0.9993356466293335 0.5425490736961365 0 1.0 0 0.0 0 0.0 0 0.0 -1.42845618724823 -0.07065258175134659 0.21605446934700012 -0.9712515473365784 0.2380138486623764 -0.0 0.5793260335922241 0.35026490688323975 0 1.0 0 0.0 0 0.0 0 0.0 -1.4278943538665771 -0.06807669252157211 0.21605446934700012 -0.9811395406723022 0.19315165281295776 -0.0 0.5794331431388855 0.3534455895423889 0 1.0 0 0.0 0 0.0 0 0.0 -1.152950406074524 0.00040453672409057617 -0.2839455306529999 0.99969482421875 0.024445325136184692 -0.0 0.07586252689361572 0.6035301685333252 0 1.0 0 0.0 0 0.0 0 0.0 -1.1530647277832031 0.010100007057189941 0.21605446934700012 0.999969482421875 -0.00317392498254776 -0.0 0.4993695318698883 0.4259029030799866 0 1.0 0 0.0 0 0.0 0 0.0 -1.152950406074524 0.00040453672409057617 0.21605446934700012 0.99969482421875 0.024445325136184692 -0.0 0.4994335174560547 0.4139253497123718 0 1.0 0 0.0 0 0.0 0 0.0 1.1923551559448242 0.0578269362449646 -0.2839455306529999 0.9782708287239075 0.2072817087173462 -0.0 0.8844856023788452 0.6234896779060364 0 1.0 0 0.0 0 0.0 0 0.0 1.1888792514801025 0.0722278356552124 0.21605446934700012 0.964476466178894 0.2641376852989197 -0.0 0.5769736170768738 0.5028921365737915 0 1.0 0 0.0 0 0.0 0 0.0 1.1923551559448242 0.0578269362449646 0.21605446934700012 0.9782708287239075 0.2072817087173462 -0.0 0.5793853402137756 0.4883795976638794 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 -0.2839455306529999 1.0 0.0 -0.0 0.8834002017974854 0.4818020462989807 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 0.18803346157073975 0.21605448424816132 1.0 0.0 -0.0 0.5768240690231323 0.6677558422088623 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 0.21605445444583893 1.0 0.0 -0.0 0.6000452637672424 0.3568435311317444 0 1.0 0 0.0 0 0.0 0 0.0 1.6861646175384521 -0.12194903194904327 -0.2839455306529999 -0.9862361550331116 -0.16528823971748352 -0.0 0.03469330072402954 0.5649328231811523 0 1.0 0 0.0 0 0.0 0 0.0 1.6868493556976318 -0.12590773403644562 0.21605446934700012 -0.982909619808197 -0.18402661383152008 -0.0 0.43683189153671265 0.40360039472579956 0 1.0 0 0.0 0 0.0 0 0.0 1.6861646175384521 -0.12194903194904327 0.21605446934700012 -0.9862361550331116 -0.16528823971748352 -0.0 0.43666714429855347 0.4084749221801758 0 1.0 0 0.0 0 0.0 0 0.0 -1.2535901069641113 0.0034450143575668335 -0.2839455306529999 -0.999969482421875 -0.00045777764171361923 -0.0 0.13118746876716614 0.5848770141601562 0 1.0 0 0.0 0 0.0 0 0.0 -1.2532728910446167 -0.011683180928230286 0.21605446934700012 -0.999053955078125 -0.04312265291810036 -0.0 0.4432278871536255 0.40499669313430786 0 1.0 0 0.0 0 0.0 0 0.0 -1.2535901069641113 0.0034450143575668335 0.21605446934700012 -0.999969482421875 -0.00045777764171361923 -0.0 0.4439847469329834 0.42119497060775757 0 1.0 0 0.0 0 0.0 0 0.0 1.0955345630645752 0.07152733206748962 -0.2839455306529999 -0.9467146992683411 -0.32203131914138794 -0.0 0.936097264289856 0.6619822978973389 0 1.0 0 0.0 0 0.0 0 0.0 1.0972347259521484 0.06597055494785309 0.21605446934700012 -0.964293360710144 -0.26471754908561707 -0.0 0.5309305191040039 0.49846935272216797 0 1.0 0 0.0 0 0.0 0 0.0 1.0955345630645752 0.07152733206748962 0.21605446934700012 -0.9467146992683411 -0.32203131914138794 -0.0 0.5298032760620117 0.5048590898513794 0 1.0 0 0.0 0 0.0 0 0.0 0.08196139335632324 0.03111577033996582 -0.2839455306529999 -0.999969482421875 0.0019531846046447754 -0.0 0.9129189848899841 0.7195390462875366 0 1.0 0 0.0 0 0.0 0 0.0 0.08191061019897461 0.01821810007095337 0.21605446934700012 -0.99993896484375 0.008301034569740295 -0.0 0.5418952107429504 0.560042142868042 0 1.0 0 0.0 0 0.0 0 0.0 0.08196139335632324 0.03111577033996582 0.21605446934700012 -0.999969482421875 0.0019531846046447754 -0.0 0.5414687395095825 0.5723863840103149 0 1.0 0 0.0 0 0.0 0 0.0 -1.5579683780670166 -0.07221173495054245 -0.2839455306529999 0.999969482421875 -0.003662221133708954 -0.0 0.07894507050514221 0.5263540744781494 0 1.0 0 0.0 0 0.0 0 0.0 -1.557834506034851 -0.06876019388437271 0.21605446934700012 0.9968565702438354 -0.0788903459906578 -0.0 0.4898357689380646 0.3426889181137085 0 1.0 0 0.0 0 0.0 0 0.0 -1.5579683780670166 -0.07221173495054245 0.21605446934700012 0.999969482421875 -0.003662221133708954 -0.0 0.4897008240222931 0.33862465620040894 0 1.0 0 0.0 0 0.0 0 0.0 1.6868493556976318 -0.12590773403644562 -0.2839455306529999 -0.982909619808197 -0.18402661383152008 -0.0 0.0341530442237854 0.5601645112037659 0 1.0 0 0.0 0 0.0 0 0.0 1.6876194477081299 -0.1297277808189392 0.21605446934700012 -0.9772636890411377 -0.21192052960395813 -0.0 0.4370587468147278 0.39888298511505127 0 1.0 0 0.0 0 0.0 0 0.0 1.6868493556976318 -0.12590773403644562 0.21605446934700012 -0.982909619808197 -0.18402661383152008 -0.0 0.43683189153671265 0.40360039472579956 0 1.0 0 0.0 0 0.0 0 0.0 -0.9884412288665771 0.0006429105997085571 -0.2839455306529999 -0.999969482421875 0.0011291848495602608 -0.0 0.9694360494613647 0.6117208003997803 0 1.0 0 0.0 0 0.0 0 0.0 -0.9886071681976318 -0.008732706308364868 0.21605446934700012 -0.99932861328125 0.03643909841775894 -0.0 0.6033116579055786 0.4218752980232239 0 1.0 0 0.0 0 0.0 0 0.0 -0.9884412288665771 0.0006429105997085571 0.21605446934700012 -0.999969482421875 0.0011291848495602608 -0.0 0.6023536920547485 0.432685911655426 0 1.0 0 0.0 0 0.0 0 0.0 0.08191061019897461 0.01821810007095337 -0.2839455306529999 -0.99993896484375 0.008301034569740295 -0.0 0.9140788316726685 0.7073009014129639 0 1.0 0 0.0 0 0.0 0 0.0 0.0817573070526123 0.006144970655441284 0.21605446934700012 -0.99981689453125 0.017670217901468277 -0.0 0.5422479510307312 0.548079252243042 0 1.0 0 0.0 0 0.0 0 0.0 0.08191061019897461 0.01821810007095337 0.21605446934700012 -0.99993896484375 0.008301034569740295 -0.0 0.5418952107429504 0.560042142868042 0 1.0 0 0.0 0 0.0 0 0.0 0.9578835964202881 0.06456585228443146 -0.2839455306529999 0.9684133529663086 -0.24930571019649506 -0.0 0.030875861644744873 0.6588609218597412 0 1.0 0 0.0 0 0.0 0 0.0 0.9594573974609375 0.06999492645263672 0.21605446934700012 0.9511398673057556 -0.3086947202682495 -0.0 0.44829061627388 0.5065951347351074 0 1.0 0 0.0 0 0.0 0 0.0 0.9578835964202881 0.06456585228443146 0.21605446934700012 0.9684133529663086 -0.24930571019649506 -0.0 0.44711482524871826 0.5003923177719116 0 1.0 0 0.0 0 0.0 0 0.0 -1.3294657468795776 -0.07733432948589325 -0.2839455306529999 0.99981689453125 0.017700735479593277 -0.0 0.9472634792327881 0.5347473621368408 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295642137527466 -0.06969787180423737 0.21605446934700012 0.99993896484375 0.008484145626425743 -0.0 0.6346471905708313 0.37915945053100586 0 1.0 0 0.0 0 0.0 0 0.0 -1.3294657468795776 -0.07733432948589325 0.21605446934700012 0.99981689453125 0.017700735479593277 -0.0 0.635711669921875 0.371421754360199 0 1.0 0 0.0 0 0.0 0 0.0 1.6876194477081299 -0.1297277808189392 -0.2839455306529999 -0.9772636890411377 -0.21192052960395813 -0.0 0.03357023000717163 0.5555682182312012 0 1.0 0 0.0 0 0.0 0 0.0 1.688474416732788 -0.13340918719768524 0.21605446934700012 -0.9704275727272034 -0.24134036898612976 -0.0 0.4373483657836914 0.39432311058044434 0 1.0 0 0.0 0 0.0 0 0.0 1.6876194477081299 -0.1297277808189392 0.21605446934700012 -0.9772636890411377 -0.21192052960395813 -0.0 0.4370587468147278 0.39888298511505127 0 1.0 0 0.0 0 0.0 0 0.0 0.8602306842803955 0.06933698058128357 -0.2839455306529999 -0.9663075804710388 0.25730153918266296 -0.0 0.08631324768066406 0.644163966178894 0 1.0 0 0.0 0 0.0 0 0.0 0.8572096824645996 0.056431978940963745 0.21605446934700012 -0.9797662496566772 0.19998779892921448 -0.0 0.3951107859611511 0.4943978190422058 0 1.0 0 0.0 0 0.0 0 0.0 0.8602306842803955 0.06933698058128357 0.21605446934700012 -0.9663075804710388 0.25730153918266296 -0.0 0.39746999740600586 0.5072903633117676 0 1.0 0 0.0 0 0.0 0 0.0 -1.42845618724823 -0.07065258175134659 -0.2839455306529999 -0.9712515473365784 0.2380138486623764 -0.0 0.9996737241744995 0.5394340753555298 0 1.0 0 0.0 0 0.0 0 0.0 -1.4290716648101807 -0.07291226089000702 0.21605446934700012 -0.9586474299430847 0.2845240533351898 -0.0 0.579150915145874 0.3474537134170532 0 1.0 0 0.0 0 0.0 0 0.0 -1.42845618724823 -0.07065258175134659 0.21605446934700012 -0.9712515473365784 0.2380138486623764 -0.0 0.5793260335922241 0.35026490688323975 0 1.0 0 0.0 0 0.0 0 0.0 -1.1526074409484863 -0.008833646774291992 -0.2839455306529999 0.9986876845359802 0.05102694779634476 -0.0 0.07480058073997498 0.5922513008117676 0 1.0 0 0.0 0 0.0 0 0.0 -1.152950406074524 0.00040453672409057617 0.21605446934700012 0.99969482421875 0.024445325136184692 -0.0 0.4994335174560547 0.4139253497123718 0 1.0 0 0.0 0 0.0 0 0.0 -1.1526074409484863 -0.008833646774291992 0.21605446934700012 0.9986876845359802 0.05102694779634476 -0.0 0.49964436888694763 0.40247344970703125 0 1.0 0 0.0 0 0.0 0 0.0 -0.059506893157958984 0.004450798034667969 -0.2839455306529999 0.999969482421875 0.006256294436752796 -0.0 0.014528810977935791 0.7096704244613647 0 1.0 0 0.0 0 0.0 0 0.0 -0.05954456329345703 0.01710525155067444 0.21605446934700012 0.999969482421875 0.0014648884534835815 -0.0 0.4619511365890503 0.5655359625816345 0 1.0 0 0.0 0 0.0 0 0.0 -0.059506893157958984 0.004450798034667969 0.21605446934700012 0.999969482421875 0.006256294436752796 -0.0 0.46153777837753296 0.5524322390556335 0 1.0 0 0.0 0 0.0 0 0.0 1.688474416732788 -0.13340918719768524 -0.2839455306529999 -0.9704275727272034 -0.24134036898612976 -0.0 0.03294515609741211 0.5511438846588135 0 1.0 0 0.0 0 0.0 0 0.0 1.6894142627716064 -0.13695195317268372 0.21605446934700012 -0.9621570706367493 -0.27240821719169617 -0.0 0.4377015233039856 0.38992077112197876 0 1.0 0 0.0 0 0.0 0 0.0 1.688474416732788 -0.13340918719768524 0.21605446934700012 -0.9704275727272034 -0.24134036898612976 -0.0 0.4373483657836914 0.39432311058044434 0 1.0 0 0.0 0 0.0 0 0.0 -0.9886071681976318 -0.008732706308364868 -0.2839455306529999 -0.99932861328125 0.03643909841775894 -0.0 0.9698705673217773 0.6007810831069946 0 1.0 0 0.0 0 0.0 0 0.0 -0.9891033172607422 -0.017711833119392395 0.21605446934700012 -0.9971312880516052 0.07553330808877945 -0.0 0.604060173034668 0.4114415645599365 0 1.0 0 0.0 0 0.0 0 0.0 -0.9886071681976318 -0.008732706308364868 0.21605446934700012 -0.99932861328125 0.03643909841775894 -0.0 0.6033116579055786 0.4218752980232239 0 1.0 0 0.0 0 0.0 0 0.0 1.0972347259521484 0.06597055494785309 -0.2839455306529999 -0.964293360710144 -0.26471754908561707 -0.0 0.9353874921798706 0.6553221940994263 0 1.0 0 0.0 0 0.0 0 0.0 1.0986576080322266 0.06012919545173645 0.21605446934700012 -0.9776299595832825 -0.21030305325984955 -0.0 0.5319159626960754 0.49171215295791626 0 1.0 0 0.0 0 0.0 0 0.0 1.0972347259521484 0.06597055494785309 0.21605446934700012 -0.964293360710144 -0.26471754908561707 -0.0 0.5309305191040039 0.49846935272216797 0 1.0 0 0.0 0 0.0 0 0.0 -1.6559737920761108 -0.07205118983983994 -0.2839455306529999 -0.9965819120407104 0.08249153196811676 -0.0 0.1285407841205597 0.515961766242981 0 1.0 0 0.0 0 0.0 0 0.0 -1.6562875509262085 -0.07716283947229385 0.21605446934700012 -0.9991455078125 0.04068117216229439 -0.0 0.4336860775947571 0.34944528341293335 0 1.0 0 0.0 0 0.0 0 0.0 -1.6559737920761108 -0.07205118983983994 0.21605446934700012 -0.9965819120407104 0.08249153196811676 -0.0 0.4342021346092224 0.35455411672592163 0 1.0 0 0.0 0 0.0 0 0.0 0.0817573070526123 0.006144970655441284 -0.2839455306529999 -0.99981689453125 0.017670217901468277 -0.0 0.9152042865753174 0.6954561471939087 0 1.0 0 0.0 0 0.0 0 0.0 0.08150196075439453 -0.005103573203086853 0.21605446934700012 -0.99957275390625 0.02847376838326454 -0.0 0.5425242185592651 0.5365892648696899 0 1.0 0 0.0 0 0.0 0 0.0 0.0817573070526123 0.006144970655441284 0.21605446934700012 -0.99981689453125 0.017670217901468277 -0.0 0.5422479510307312 0.548079252243042 0 1.0 0 0.0 0 0.0 0 0.0 1.6894142627716064 -0.13695195317268372 -0.2839455306529999 -0.9621570706367493 -0.27240821719169617 -0.0 0.032277703285217285 0.5468913316726685 0 1.0 0 0.0 0 0.0 0 0.0 1.6904394626617432 -0.14035606384277344 0.21605446934700012 -0.9522690773010254 -0.30521562695503235 -0.0 0.4381193518638611 0.38567590713500977 0 1.0 0 0.0 0 0.0 0 0.0 1.6894142627716064 -0.13695195317268372 0.21605446934700012 -0.9621570706367493 -0.27240821719169617 -0.0 0.4377015233039856 0.38992077112197876 0 1.0 0 0.0 0 0.0 0 0.0 -1.1520358324050903 -0.017614543437957764 -0.2839455306529999 0.9967650175094604 0.08032471686601639 -0.0 0.07365843653678894 0.5815540552139282 0 1.0 0 0.0 0 0.0 0 0.0 -1.1526074409484863 -0.008833646774291992 0.21605446934700012 0.9986876845359802 0.05102694779634476 -0.0 0.49964436888694763 0.40247344970703125 0 1.0 0 0.0 0 0.0 0 0.0 -1.1520358324050903 -0.017614543437957764 0.21605446934700012 0.9967650175094604 0.08032471686601639 -0.0 0.5000072121620178 0.39157402515411377 0 1.0 0 0.0 0 0.0 0 0.0 0.9566066265106201 0.058903276920318604 -0.2839455306529999 0.9813531637191772 -0.19205297529697418 -0.0 0.031516820192337036 0.6521144509315491 0 1.0 0 0.0 0 0.0 0 0.0 0.9578835964202881 0.06456585228443146 0.21605446934700012 0.9684133529663086 -0.24930571019649506 -0.0 0.44711482524871826 0.5003923177719116 0 1.0 0 0.0 0 0.0 0 0.0 0.9566066265106201 0.058903276920318604 0.21605446934700012 0.9813531637191772 -0.19205297529697418 -0.0 0.4460909366607666 0.49386513233184814 0 1.0 0 0.0 0 0.0 0 0.0 -1.557861328125 -0.07561706751585007 -0.2839455306529999 0.9979552626609802 0.0637531653046608 -0.0 0.07858288288116455 0.5224087238311768 0 1.0 0 0.0 0 0.0 0 0.0 -1.5579683780670166 -0.07221173495054245 0.21605446934700012 0.999969482421875 -0.003662221133708954 -0.0 0.4897008240222931 0.33862465620040894 0 1.0 0 0.0 0 0.0 0 0.0 -1.557861328125 -0.07561706751585007 0.21605446934700012 0.9979552626609802 0.0637531653046608 -0.0 0.489724725484848 0.33461397886276245 0 1.0 0 0.0 0 0.0 0 0.0 -0.059393882751464844 -0.007359623908996582 -0.2839455306529999 0.999908447265625 0.013367107138037682 -0.0 0.014256507158279419 0.6969905495643616 0 1.0 0 0.0 0 0.0 0 0.0 -0.059506893157958984 0.004450798034667969 0.21605446934700012 0.999969482421875 0.006256294436752796 -0.0 0.46153777837753296 0.5524322390556335 0 1.0 0 0.0 0 0.0 0 0.0 -0.059393882751464844 -0.007359623908996582 0.21605446934700012 0.999908447265625 0.013367107138037682 -0.0 0.4611889123916626 0.5397636890411377 0 1.0 0 0.0 0 0.0 0 0.0 1.6904394626617432 -0.14035606384277344 -0.2839455306529999 -0.9522690773010254 -0.30521562695503235 -0.0 0.03156742453575134 0.5428102016448975 0 1.0 0 0.0 0 0.0 0 0.0 1.6915500164031982 -0.1436215341091156 0.21605446934700012 -0.9405499696731567 -0.3395794630050659 -0.0 0.4386027455329895 0.3815883994102478 0 1.0 0 0.0 0 0.0 0 0.0 1.6904394626617432 -0.14035606384277344 0.21605446934700012 -0.9522690773010254 -0.30521562695503235 -0.0 0.4381193518638611 0.38567590713500977 0 1.0 0 0.0 0 0.0 0 0.0 -1.2532728910446167 -0.011683180928230286 -0.2839455306529999 -0.999053955078125 -0.04312265291810036 -0.0 0.12915363907814026 0.5690999031066895 0 1.0 0 0.0 0 0.0 0 0.0 -1.2523205280303955 -0.026244625449180603 0.21605446934700012 -0.9960020780563354 -0.08899196982383728 -0.0 0.4427863359451294 0.38930970430374146 0 1.0 0 0.0 0 0.0 0 0.0 -1.2532728910446167 -0.011683180928230286 0.21605446934700012 -0.999053955078125 -0.04312265291810036 -0.0 0.4432278871536255 0.40499669313430786 0 1.0 0 0.0 0 0.0 0 0.0 1.0986576080322266 0.06012919545173645 -0.2839455306529999 -0.9776299595832825 -0.21030305325984955 -0.0 0.9348825812339783 0.6483409404754639 0 1.0 0 0.0 0 0.0 0 0.0 1.0998032093048096 0.05400325357913971 0.21605446934700012 -0.9872432351112366 -0.1590624749660492 -0.0 0.5327593684196472 0.4845793843269348 0 1.0 0 0.0 0 0.0 0 0.0 1.0986576080322266 0.06012919545173645 0.21605446934700012 -0.9776299595832825 -0.21030305325984955 -0.0 0.5319159626960754 0.49171215295791626 0 1.0 0 0.0 0 0.0 0 0.0 -1.4290716648101807 -0.07291226089000702 -0.2839455306529999 -0.9586474299430847 0.2845240533351898 -0.0 1.000042200088501 0.5367017984390259 0 1.0 0 0.0 0 0.0 0 0.0 -1.4300907850265503 -0.07608164101839066 0.21605446934700012 -0.9429304003715515 0.3329569399356842 -0.0 0.5788003206253052 0.3434860110282898 0 1.0 0 0.0 0 0.0 0 0.0 -1.4290716648101807 -0.07291226089000702 0.21605446934700012 -0.9586474299430847 0.2845240533351898 -0.0 0.579150915145874 0.3474537134170532 0 1.0 0 0.0 0 0.0 0 0.0 0.08150196075439453 -0.005103573203086853 -0.2839455306529999 -0.99957275390625 0.02847376838326454 -0.0 0.9162991046905518 0.6840966939926147 0 1.0 0 0.0 0 0.0 0 0.0 0.08114433288574219 -0.015527546405792236 0.21605446934700012 -0.9991455078125 0.04104739427566528 -0.0 0.542721152305603 0.5256565809249878 0 1.0 0 0.0 0 0.0 0 0.0 0.08150196075439453 -0.005103573203086853 0.21605446934700012 -0.99957275390625 0.02847376838326454 -0.0 0.5425242185592651 0.5365892648696899 0 1.0 0 0.0 0 0.0 0 0.0 1.6915500164031982 -0.1436215341091156 -0.2839455306529999 -0.9405499696731567 -0.3395794630050659 -0.0 0.030814290046691895 0.5388997793197632 0 1.0 0 0.0 0 0.0 0 0.0 1.6927454471588135 -0.1467483639717102 0.21605446934700012 -0.9267860651016235 -0.37553027272224426 -0.0 0.43915221095085144 0.37765800952911377 0 1.0 0 0.0 0 0.0 0 0.0 1.6915500164031982 -0.1436215341091156 0.21605446934700012 -0.9405499696731567 -0.3395794630050659 -0.0 0.4386027455329895 0.3815883994102478 0 1.0 0 0.0 0 0.0 0 0.0 -1.151235580444336 -0.02593815326690674 -0.2839455306529999 0.9936216473579407 0.11270485818386078 -0.0 0.07243585586547852 0.5714563131332397 0 1.0 0 0.0 0 0.0 0 0.0 -1.1520358324050903 -0.017614543437957764 0.21605446934700012 0.9967650175094604 0.08032471686601639 -0.0 0.5000072121620178 0.39157402515411377 0 1.0 0 0.0 0 0.0 0 0.0 -1.151235580444336 -0.02593815326690674 0.21605446934700012 0.9936216473579407 0.11270485818386078 -0.0 0.5005269646644592 0.3812466263771057 0 1.0 0 0.0 0 0.0 0 0.0 0.9556264877319336 0.05300718545913696 -0.2839455306529999 0.9904782176017761 -0.13745537400245667 -0.0 0.03194934129714966 0.64508056640625 0 1.0 0 0.0 0 0.0 0 0.0 0.9566066265106201 0.058903276920318604 0.21605446934700012 0.9813531637191772 -0.19205297529697418 -0.0 0.4460909366607666 0.49386513233184814 0 1.0 0 0.0 0 0.0 0 0.0 0.9556264877319336 0.05300718545913696 0.21605446934700012 0.9904782176017761 -0.13745537400245667 -0.0 0.4452192783355713 0.4870067834854126 0 1.0 0 0.0 0 0.0 0 0.0 -1.5575402975082397 -0.07894456386566162 -0.2839455306529999 0.9915769100189209 0.12933744490146637 -0.0 0.07810711860656738 0.5185943841934204 0 1.0 0 0.0 0 0.0 0 0.0 -1.557861328125 -0.07561706751585007 0.21605446934700012 0.9979552626609802 0.0637531653046608 -0.0 0.489724725484848 0.33461397886276245 0 1.0 0 0.0 0 0.0 0 0.0 -1.5575402975082397 -0.07894456386566162 0.21605446934700012 0.9915769100189209 0.12933744490146637 -0.0 0.48989224433898926 0.3306938409805298 0 1.0 0 0.0 0 0.0 0 0.0 -0.05920529365539551 -0.018326014280319214 -0.2839455306529999 0.999755859375 0.021607104688882828 -0.0 0.01395145058631897 0.6848616600036621 0 1.0 0 0.0 0 0.0 0 0.0 -0.059393882751464844 -0.007359623908996582 0.21605446934700012 0.999908447265625 0.013367107138037682 -0.0 0.4611889123916626 0.5397636890411377 0 1.0 0 0.0 0 0.0 0 0.0 -0.05920529365539551 -0.018326014280319214 0.21605446934700012 0.999755859375 0.021607104688882828 -0.0 0.4609074592590332 0.5276371240615845 0 1.0 0 0.0 0 0.0 0 0.0 1.6927454471588135 -0.1467483639717102 -0.2839455306529999 -0.9267860651016235 -0.37553027272224426 -0.0 0.030018210411071777 0.5351594090461731 0 1.0 0 0.0 0 0.0 0 0.0 1.6940257549285889 -0.14973653852939606 0.21605446934700012 -0.9106723070144653 -0.41309854388237 -0.0 0.43976858258247375 0.3738844394683838 0 1.0 0 0.0 0 0.0 0 0.0 1.6927454471588135 -0.1467483639717102 0.21605446934700012 -0.9267860651016235 -0.37553027272224426 -0.0 0.43915221095085144 0.37765800952911377 0 1.0 0 0.0 0 0.0 0 0.0 -0.9891033172607422 -0.017711833119392395 -0.2839455306529999 -0.9971312880516052 0.07553330808877945 -0.0 0.9704671502113342 0.5903095006942749 0 1.0 0 0.0 0 0.0 0 0.0 -0.989930272102356 -0.026294484734535217 0.21605446934700012 -0.9930112361907959 0.11798455566167831 -0.0 0.6045933961868286 0.40139156579971313 0 1.0 0 0.0 0 0.0 0 0.0 -0.9891033172607422 -0.017711833119392395 0.21605446934700012 -0.9971312880516052 0.07553330808877945 -0.0 0.604060173034668 0.4114415645599365 0 1.0 0 0.0 0 0.0 0 0.0 -1.4300907850265503 -0.07608164101839066 -0.2839455306529999 -0.9429304003715515 0.3329569399356842 -0.0 1.0006492137908936 0.532871663570404 0 1.0 0 0.0 0 0.0 0 0.0 -1.431280255317688 -0.07916833460330963 0.21605446934700012 -0.922421932220459 0.38612017035484314 -0.0 0.5783247351646423 0.3395894765853882 0 1.0 0 0.0 0 0.0 0 0.0 -1.4300907850265503 -0.07608164101839066 0.21605446934700012 -0.9429304003715515 0.3329569399356842 -0.0 0.5788003206253052 0.3434860110282898 0 1.0 0 0.0 0 0.0 0 0.0 0.08114433288574219 -0.015527546405792236 -0.2839455306529999 -0.9991455078125 0.04104739427566528 -0.0 0.9173672795295715 0.6733074188232422 0 1.0 0 0.0 0 0.0 0 0.0 0.08068466186523438 -0.025126934051513672 0.21605446934700012 -0.9984130263328552 0.055848874151706696 -0.0 0.5428363680839539 0.515357255935669 0 1.0 0 0.0 0 0.0 0 0.0 0.08114433288574219 -0.015527546405792236 0.21605446934700012 -0.9991455078125 0.04104739427566528 -0.0 0.542721152305603 0.5256565809249878 0 1.0 0 0.0 0 0.0 0 0.0 1.1951353549957275 0.04261605441570282 -0.2839455306529999 0.9879757165908813 0.15445417165756226 -0.0 0.8846826553344727 0.6074569225311279 0 1.0 0 0.0 0 0.0 0 0.0 1.1923551559448242 0.0578269362449646 0.21605446934700012 0.9782708287239075 0.2072817087173462 -0.0 0.5793853402137756 0.4883795976638794 0 1.0 0 0.0 0 0.0 0 0.0 1.1951353549957275 0.04261605441570282 0.21605446934700012 0.9879757165908813 0.15445417165756226 -0.0 0.5815703272819519 0.47294706106185913 0 1.0 0 0.0 0 0.0 0 0.0 1.6940257549285889 -0.14973653852939606 -0.2839455306529999 -0.9106723070144653 -0.41309854388237 -0.0 0.029179036617279053 0.5315882563591003 0 1.0 0 0.0 0 0.0 0 0.0 1.6953914165496826 -0.15258607268333435 0.21605446934700012 -0.8919339776039124 -0.4521317183971405 -0.0 0.4404529929161072 0.3702673316001892 0 1.0 0 0.0 0 0.0 0 0.0 1.6940257549285889 -0.14973653852939606 0.21605446934700012 -0.9106723070144653 -0.41309854388237 -0.0 0.43976858258247375 0.3738844394683838 0 1.0 0 0.0 0 0.0 0 0.0 0.8572096824645996 0.056431978940963745 -0.2839455306529999 -0.9797662496566772 0.19998779892921448 -0.0 0.08673921227455139 0.6304571628570557 0 1.0 0 0.0 0 0.0 0 0.0 0.8548600673675537 0.042969971895217896 0.21605446934700012 -0.9893490672111511 0.14545121788978577 -0.0 0.39298132061958313 0.48083871603012085 0 1.0 0 0.0 0 0.0 0 0.0 0.8572096824645996 0.056431978940963745 0.21605446934700012 -0.9797662496566772 0.19998779892921448 -0.0 0.3951107859611511 0.4943978190422058 0 1.0 0 0.0 0 0.0 0 0.0 -1.6562875509262085 -0.07716283947229385 -0.2839455306529999 -0.9991455078125 0.04068117216229439 -0.0 0.1280842125415802 0.5108512043952942 0 1.0 0 0.0 0 0.0 0 0.0 -1.656392216682434 -0.0823693498969078 0.21605446934700012 -0.999969482421875 -0.004608294926583767 -0.0 0.43325650691986084 0.34423261880874634 0 1.0 0 0.0 0 0.0 0 0.0 -1.6562875509262085 -0.07716283947229385 0.21605446934700012 -0.9991455078125 0.04068117216229439 -0.0 0.4336860775947571 0.34944528341293335 0 1.0 0 0.0 0 0.0 0 0.0 -1.1502066850662231 -0.033804476261138916 -0.2839455306529999 0.9888912439346313 0.14853358268737793 -0.0 0.07113239169120789 0.5619699954986572 0 1.0 0 0.0 0 0.0 0 0.0 -1.151235580444336 -0.02593815326690674 0.21605446934700012 0.9936216473579407 0.11270485818386078 -0.0 0.5005269646644592 0.3812466263771057 0 1.0 0 0.0 0 0.0 0 0.0 -1.1502066850662231 -0.033804476261138916 0.21605446934700012 0.9888912439346313 0.14853358268737793 -0.0 0.5012085437774658 0.3715049624443054 0 1.0 0 0.0 0 0.0 0 0.0 -0.05894136428833008 -0.028448358178138733 -0.2839455306529999 0.999481201171875 0.031281471252441406 -0.0 0.013614147901535034 0.6733810901641846 0 1.0 0 0.0 0 0.0 0 0.0 -0.05920529365539551 -0.018326014280319214 0.21605446934700012 0.999755859375 0.021607104688882828 -0.0 0.4609074592590332 0.5276371240615845 0 1.0 0 0.0 0 0.0 0 0.0 -0.05894136428833008 -0.028448358178138733 0.21605446934700012 0.999481201171875 0.031281471252441406 -0.0 0.4606959819793701 0.5161502361297607 0 1.0 0 0.0 0 0.0 0 0.0 1.6953914165496826 -0.15258607268333435 -0.2839455306529999 -0.8919339776039124 -0.4521317183971405 -0.0 0.02829611301422119 0.5281853675842285 0 1.0 0 0.0 0 0.0 0 0.0 1.6968424320220947 -0.15529696643352509 0.21605446934700012 -0.8702963590621948 -0.4924771785736084 -0.0 0.44120627641677856 0.3668063282966614 0 1.0 0 0.0 0 0.0 0 0.0 1.6953914165496826 -0.15258607268333435 0.21605446934700012 -0.8919339776039124 -0.4521317183971405 -0.0 0.4404529929161072 0.3702673316001892 0 1.0 0 0.0 0 0.0 0 0.0 -1.2523205280303955 -0.026244625449180603 -0.2839455306529999 -0.9960020780563354 -0.08899196982383728 -0.0 0.12694236636161804 0.5540019273757935 0 1.0 0 0.0 0 0.0 0 0.0 -1.2507333755493164 -0.04023931920528412 0.21605446934700012 -0.9904171824455261 -0.13800470530986786 -0.0 0.44267547130584717 0.37415337562561035 0 1.0 0 0.0 0 0.0 0 0.0 -1.2523205280303955 -0.026244625449180603 0.21605446934700012 -0.9960020780563354 -0.08899196982383728 -0.0 0.4427863359451294 0.38930970430374146 0 1.0 0 0.0 0 0.0 0 0.0 1.0998032093048096 0.05400325357913971 -0.2839455306529999 -0.9872432351112366 -0.1590624749660492 -0.0 0.9345777034759521 0.6410322189331055 0 1.0 0 0.0 0 0.0 0 0.0 1.1006715297698975 0.04759271442890167 0.21605446934700012 -0.9938047528266907 -0.1110873743891716 -0.0 0.533460259437561 0.47706329822540283 0 1.0 0 0.0 0 0.0 0 0.0 1.0998032093048096 0.05400325357913971 0.21605446934700012 -0.9872432351112366 -0.1590624749660492 -0.0 0.5327593684196472 0.4845793843269348 0 1.0 0 0.0 0 0.0 0 0.0 0.08068466186523438 -0.025126934051513672 -0.2839455306529999 -0.9984130263328552 0.055848874151706696 -0.0 0.9184120893478394 0.6631647944450378 0 1.0 0 0.0 0 0.0 0 0.0 0.08012270927429199 -0.033901751041412354 0.21605446934700012 -0.9972838759422302 0.07354960590600967 -0.0 0.5428673028945923 0.5057579278945923 0 1.0 0 0.0 0 0.0 0 0.0 0.08068466186523438 -0.025126934051513672 0.21605446934700012 -0.9984130263328552 0.055848874151706696 -0.0 0.5428363680839539 0.515357255935669 0 1.0 0 0.0 0 0.0 0 0.0 -1.3293014764785767 -0.08461322635412216 -0.2839455306529999 0.999603271484375 0.02786339819431305 -0.0 0.9475767612457275 0.5272431373596191 0 1.0 0 0.0 0 0.0 0 0.0 -1.3294657468795776 -0.07733432948589325 0.21605446934700012 0.99981689453125 0.017700735479593277 -0.0 0.635711669921875 0.371421754360199 0 1.0 0 0.0 0 0.0 0 0.0 -1.3293014764785767 -0.08461322635412216 0.21605446934700012 0.999603271484375 0.02786339819431305 -0.0 0.6367695331573486 0.36414480209350586 0 1.0 0 0.0 0 0.0 0 0.0 1.6968424320220947 -0.15529696643352509 -0.2839455306529999 -0.8702963590621948 -0.4924771785736084 -0.0 0.027369141578674316 0.5249497294425964 0 1.0 0 0.0 0 0.0 0 0.0 1.6983788013458252 -0.15786920487880707 0.21605446934700012 -0.8456068634986877 -0.5337381958961487 -0.0 0.4420292377471924 0.36350131034851074 0 1.0 0 0.0 0 0.0 0 0.0 1.6968424320220947 -0.15529696643352509 0.21605446934700012 -0.8702963590621948 -0.4924771785736084 -0.0 0.44120627641677856 0.3668063282966614 0 1.0 0 0.0 0 0.0 0 0.0 -0.989930272102356 -0.026294484734535217 -0.2839455306529999 -0.9930112361907959 0.11798455566167831 -0.0 0.9712231159210205 0.580313503742218 0 1.0 0 0.0 0 0.0 0 0.0 -0.9910880327224731 -0.034480661153793335 0.21605446934700012 -0.9864497780799866 0.16388440132141113 -0.0 0.6049054265022278 0.3917279839515686 0 1.0 0 0.0 0 0.0 0 0.0 -0.989930272102356 -0.026294484734535217 0.21605446934700012 -0.9930112361907959 0.11798455566167831 -0.0 0.6045933961868286 0.40139156579971313 0 1.0 0 0.0 0 0.0 0 0.0 0.9549429416656494 0.04687759280204773 -0.2839455306529999 0.9963072538375854 -0.08575700968503952 -0.0 0.032178282737731934 0.6377542018890381 0 1.0 0 0.0 0 0.0 0 0.0 0.9556264877319336 0.05300718545913696 0.21605446934700012 0.9904782176017761 -0.13745537400245667 -0.0 0.4452192783355713 0.4870067834854126 0 1.0 0 0.0 0 0.0 0 0.0 0.9549429416656494 0.04687759280204773 0.21605446934700012 0.9963072538375854 -0.08575700968503952 -0.0 0.44450050592422485 0.4798106551170349 0 1.0 0 0.0 0 0.0 0 0.0 -1.5570050477981567 -0.08219422399997711 -0.2839455306529999 0.9805291891098022 0.19629505276679993 -0.0 0.07751825451850891 0.514907956123352 0 1.0 0 0.0 0 0.0 0 0.0 -1.5575402975082397 -0.07894456386566162 0.21605446934700012 0.9915769100189209 0.12933744490146637 -0.0 0.48989224433898926 0.3306938409805298 0 1.0 0 0.0 0 0.0 0 0.0 -1.5570050477981567 -0.08219422399997711 0.21605446934700012 0.9805291891098022 0.19629505276679993 -0.0 0.4902057349681854 0.32686203718185425 0 1.0 0 0.0 0 0.0 0 0.0 -0.058602094650268555 -0.03772667050361633 -0.2839455306529999 0.999053955078125 0.04281746968626976 -0.0 0.013244688510894775 0.6626352667808533 0 1.0 0 0.0 0 0.0 0 0.0 -0.05894136428833008 -0.028448358178138733 0.21605446934700012 0.999481201171875 0.031281471252441406 -0.0 0.4606959819793701 0.5161502361297607 0 1.0 0 0.0 0 0.0 0 0.0 -0.058602094650268555 -0.03772667050361633 0.21605446934700012 0.999053955078125 0.04281746968626976 -0.0 0.46055692434310913 0.5053889751434326 0 1.0 0 0.0 0 0.0 0 0.0 1.6983788013458252 -0.15786920487880707 -0.2839455306529999 -0.8456068634986877 -0.5337381958961487 -0.0 0.026397764682769775 0.5218805074691772 0 1.0 0 0.0 0 0.0 0 0.0 1.7000000476837158 -0.1603028029203415 0.21605446934700012 -0.8166447877883911 -0.5770744681358337 -0.0 0.44292232394218445 0.360352098941803 0 1.0 0 0.0 0 0.0 0 0.0 1.6983788013458252 -0.15786920487880707 0.21605446934700012 -0.8456068634986877 -0.5337381958961487 -0.0 0.4420292377471924 0.36350131034851074 0 1.0 0 0.0 0 0.0 0 0.0 1.1006715297698975 0.04759271442890167 -0.2839455306529999 -0.9938047528266907 -0.1110873743891716 -0.0 0.9344682097434998 0.6333895921707153 0 1.0 0 0.0 0 0.0 0 0.0 1.1012625694274902 0.04089759290218353 0.21605446934700012 -0.9977721571922302 -0.06640827655792236 -0.0 0.5340175628662109 0.46915704011917114 0 1.0 0 0.0 0 0.0 0 0.0 1.1006715297698975 0.04759271442890167 0.21605446934700012 -0.9938047528266907 -0.1110873743891716 -0.0 0.533460259437561 0.47706329822540283 0 1.0 0 0.0 0 0.0 0 0.0 -1.431280255317688 -0.07916833460330963 -0.2839455306529999 -0.922421932220459 0.38612017035484314 -0.0 1.0013539791107178 0.5291415452957153 0 1.0 0 0.0 0 0.0 0 0.0 -1.4326399564743042 -0.08217232674360275 0.21605446934700012 -0.8988006114959717 0.4383068382740021 -0.0 0.5777221322059631 0.3357633352279663 0 1.0 0 0.0 0 0.0 0 0.0 -1.431280255317688 -0.07916833460330963 0.21605446934700012 -0.922421932220459 0.38612017035484314 -0.0 0.5783247351646423 0.3395894765853882 0 1.0 0 0.0 0 0.0 0 0.0 0.08012270927429199 -0.033901751041412354 -0.2839455306529999 -0.9972838759422302 0.07354960590600967 -0.0 0.9194369316101074 0.6537357568740845 0 1.0 0 0.0 0 0.0 0 0.0 0.07945871353149414 -0.04185198247432709 0.21605446934700012 -0.9954527616500854 0.0950651541352272 -0.0 0.5428118705749512 0.4969159960746765 0 1.0 0 0.0 0 0.0 0 0.0 0.08012270927429199 -0.033901751041412354 0.21605446934700012 -0.9972838759422302 0.07354960590600967 -0.0 0.5428673028945923 0.5057579278945923 0 1.0 0 0.0 0 0.0 0 0.0 -1.148949146270752 -0.0412134975194931 -0.2839455306529999 0.982116162776947 0.18823817372322083 -0.0 0.06974729895591736 0.5531009435653687 0 1.0 0 0.0 0 0.0 0 0.0 -1.1502066850662231 -0.033804476261138916 0.21605446934700012 0.9888912439346313 0.14853358268737793 -0.0 0.5012085437774658 0.3715049624443054 0 1.0 0 0.0 0 0.0 0 0.0 -1.148949146270752 -0.0412134975194931 0.21605446934700012 0.982116162776947 0.18823817372322083 -0.0 0.5020564794540405 0.36235707998275757 0 1.0 0 0.0 0 0.0 0 0.0 1.7000000476837158 -0.1603028029203415 -0.2839455306529999 -0.8166447877883911 -0.5770744681358337 -0.0 0.025381773710250854 0.5189765691757202 0 1.0 0 0.0 0 0.0 0 0.0 1.7017428874969482 -0.1626305878162384 0.21605446934700012 -0.7828608155250549 -0.6221808791160583 -0.0 0.44390809535980225 0.35731375217437744 0 1.0 0 0.0 0 0.0 0 0.0 1.7000000476837158 -0.1603028029203415 0.21605446934700012 -0.8166447877883911 -0.5770744681358337 -0.0 0.44292232394218445 0.360352098941803 0 1.0 0 0.0 0 0.0 0 0.0 -0.9910880327224731 -0.034480661153793335 -0.2839455306529999 -0.9864497780799866 0.16388440132141113 -0.0 0.972136378288269 0.570796012878418 0 1.0 0 0.0 0 0.0 0 0.0 -0.9925765991210938 -0.04227036237716675 0.21605446934700012 -0.9769585132598877 0.2133854180574417 -0.0 0.6049898862838745 0.38245081901550293 0 1.0 0 0.0 0 0.0 0 0.0 -0.9910880327224731 -0.034480661153793335 0.21605446934700012 -0.9864497780799866 0.16388440132141113 -0.0 0.6049054265022278 0.3917279839515686 0 1.0 0 0.0 0 0.0 0 0.0 -1.4326399564743042 -0.08217232674360275 -0.2839455306529999 -0.8988006114959717 0.4383068382740021 -0.0 1.002156376838684 0.5255098938941956 0 1.0 0 0.0 0 0.0 0 0.0 -1.434169888496399 -0.08509361743927002 0.21605446934700012 -0.8722190260887146 0.48908963799476624 -0.0 0.5769903659820557 0.3320075273513794 0 1.0 0 0.0 0 0.0 0 0.0 -1.4326399564743042 -0.08217232674360275 0.21605446934700012 -0.8988006114959717 0.4383068382740021 -0.0 0.5777221322059631 0.3357633352279663 0 1.0 0 0.0 0 0.0 0 0.0 0.9545562267303467 0.04051448404788971 -0.2839455306529999 0.999298095703125 -0.03717154264450073 -0.0 0.032207876443862915 0.6301307082176208 0 1.0 0 0.0 0 0.0 0 0.0 0.9549429416656494 0.04687759280204773 0.21605446934700012 0.9963072538375854 -0.08575700968503952 -0.0 0.44450050592422485 0.4798106551170349 0 1.0 0 0.0 0 0.0 0 0.0 0.9545562267303467 0.04051448404788971 0.21605446934700012 0.999298095703125 -0.03717154264450073 -0.0 0.44393593072891235 0.47227048873901367 0 1.0 0 0.0 0 0.0 0 0.0 -0.05818748474121094 -0.046160951256752014 -0.2839455306529999 0.9983825087547302 0.056764427572488785 -0.0 0.012842893600463867 0.6526980996131897 0 1.0 0 0.0 0 0.0 0 0.0 -0.058602094650268555 -0.03772667050361633 0.21605446934700012 0.999053955078125 0.04281746968626976 -0.0 0.46055692434310913 0.5053889751434326 0 1.0 0 0.0 0 0.0 0 0.0 -0.05818748474121094 -0.046160951256752014 0.21605446934700012 0.9983825087547302 0.056764427572488785 -0.0 0.46049249172210693 0.4954274892807007 0 1.0 0 0.0 0 0.0 0 0.0 1.7017428874969482 -0.1626305878162384 -0.2839455306529999 -0.7828608155250549 -0.6221808791160583 -0.0 0.024298399686813354 0.516197681427002 0 1.0 0 0.0 0 0.0 0 0.0 1.703643560409546 -0.16488540172576904 0.21605446934700012 -0.7462080717086792 -0.6656697392463684 -0.0 0.4450095295906067 0.35434210300445557 0 1.0 0 0.0 0 0.0 0 0.0 1.7017428874969482 -0.1626305878162384 0.21605446934700012 -0.7828608155250549 -0.6221808791160583 -0.0 0.44390809535980225 0.35731375217437744 0 1.0 0 0.0 0 0.0 0 0.0 -1.2507333755493164 -0.04023931920528412 -0.2839455306529999 -0.9904171824455261 -0.13800470530986786 -0.0 0.12454873323440552 0.5396028161048889 0 1.0 0 0.0 0 0.0 0 0.0 -1.2485114336013794 -0.053667277097702026 0.21605446934700012 -0.981749951839447 -0.1900997906923294 -0.0 0.4429131746292114 0.3595367670059204 0 1.0 0 0.0 0 0.0 0 0.0 -1.2507333755493164 -0.04023931920528412 0.21605446934700012 -0.9904171824455261 -0.13800470530986786 -0.0 0.44267547130584717 0.37415337562561035 0 1.0 0 0.0 0 0.0 0 0.0 0.8548600673675537 0.042969971895217896 -0.2839455306529999 -0.9893490672111511 0.14545121788978577 -0.0 0.08680680394172668 0.6162465214729309 0 1.0 0 0.0 0 0.0 0 0.0 0.8531818389892578 0.028950944542884827 0.21605446934700012 -0.9955748319625854 0.09390545636415482 -0.0 0.3910754919052124 0.46660172939300537 0 1.0 0 0.0 0 0.0 0 0.0 0.8548600673675537 0.042969971895217896 0.21605446934700012 -0.9893490672111511 0.14545121788978577 -0.0 0.39298132061958313 0.48083871603012085 0 1.0 0 0.0 0 0.0 0 0.0 0.07945871353149414 -0.04185198247432709 -0.2839455306529999 -0.9954527616500854 0.0950651541352272 -0.0 0.9204447269439697 0.6450778245925903 0 1.0 0 0.0 0 0.0 0 0.0 0.07869243621826172 -0.04897764325141907 0.21605446934700012 -0.9925534725189209 0.12170781195163727 -0.0 0.5426681041717529 0.4888794422149658 0 1.0 0 0.0 0 0.0 0 0.0 0.07945871353149414 -0.04185198247432709 0.21605446934700012 -0.9954527616500854 0.0950651541352272 -0.0 0.5428118705749512 0.4969159960746765 0 1.0 0 0.0 0 0.0 0 0.0 -1.5562559366226196 -0.08536604791879654 -0.2839455306529999 0.964598536491394 0.2636799216270447 -0.0 0.07681694626808167 0.5113465785980225 0 1.0 0 0.0 0 0.0 0 0.0 -1.5570050477981567 -0.08219422399997711 0.21605446934700012 0.9805291891098022 0.19629505276679993 -0.0 0.4902057349681854 0.32686203718185425 0 1.0 0 0.0 0 0.0 0 0.0 -1.5562559366226196 -0.08536604791879654 0.21605446934700012 0.964598536491394 0.2637104392051697 -0.0 0.49066728353500366 0.32311660051345825 0 1.0 0 0.0 0 0.0 0 0.0 1.703643560409546 -0.16488540172576904 -0.2839455306529999 -0.7462080717086792 -0.6656697392463684 -0.0 0.02312496304512024 0.5135035514831543 0 1.0 0 0.0 0 0.0 0 0.0 1.705702543258667 -0.1670672595500946 0.21605446934700012 -0.7084872126579285 -0.7057099938392639 -0.0 0.44622862339019775 0.35143786668777466 0 1.0 0 0.0 0 0.0 0 0.0 1.703643560409546 -0.16488540172576904 0.21605446934700012 -0.7462080717086792 -0.6656697392463684 -0.0 0.4450095295906067 0.35434210300445557 0 1.0 0 0.0 0 0.0 0 0.0 -1.656392216682434 -0.0823693498969078 -0.2839455306529999 -0.999969482421875 -0.004608294926583767 -0.0 0.12753111124038696 0.5057005882263184 0 1.0 0 0.0 0 0.0 0 0.0 -1.6561623811721802 -0.09019431471824646 0.21605446934700012 -0.9981994032859802 -0.059907834976911545 -0.0 0.4327855110168457 0.3363778591156006 0 1.0 0 0.0 0 0.0 0 0.0 -1.656392216682434 -0.0823693498969078 0.21605446934700012 -0.999969482421875 -0.004608294926583767 -0.0 0.43325650691986084 0.34423261880874634 0 1.0 0 0.0 0 0.0 0 0.0 -1.1474629640579224 -0.04816523194313049 -0.2839455306529999 0.9726554155349731 0.23221534490585327 -0.0 0.06827953457832336 0.5448507070541382 0 1.0 0 0.0 0 0.0 0 0.0 -1.148949146270752 -0.0412134975194931 0.21605446934700012 0.982116162776947 0.18823817372322083 -0.0 0.5020564794540405 0.36235707998275757 0 1.0 0 0.0 0 0.0 0 0.0 -1.1474629640579224 -0.04816523194313049 0.21605446934700012 0.9726554155349731 0.23221534490585327 -0.0 0.5030751824378967 0.35380715131759644 0 1.0 0 0.0 0 0.0 0 0.0 1.1972198486328125 0.026595190167427063 -0.2839455306529999 0.9943845868110657 0.10565508157014847 -0.0 0.8852506279945374 0.5906726121902466 0 1.0 0 0.0 0 0.0 0 0.0 1.1951353549957275 0.04261605441570282 0.21605446934700012 0.9879757165908813 0.15445417165756226 -0.0 0.5815703272819519 0.47294706106185913 0 1.0 0 0.0 0 0.0 0 0.0 1.1972198486328125 0.026595190167427063 0.21605446934700012 0.9943845868110657 0.10565508157014847 -0.0 0.58353590965271 0.4565879702568054 0 1.0 0 0.0 0 0.0 0 0.0 -0.057697296142578125 -0.053751200437545776 -0.2839455306529999 0.9972533583641052 0.07397686690092087 -0.0 0.012408286333084106 0.6436313390731812 0 1.0 0 0.0 0 0.0 0 0.0 -0.05818748474121094 -0.046160951256752014 0.21605446934700012 0.9983825087547302 0.056764427572488785 -0.0 0.46049249172210693 0.4954274892807007 0 1.0 0 0.0 0 0.0 0 0.0 -0.057697296142578125 -0.053751200437545776 0.21605446934700012 0.9972533583641052 0.07397686690092087 -0.0 0.46050482988357544 0.48632752895355225 0 1.0 0 0.0 0 0.0 0 0.0 1.705702543258667 -0.1670672595500946 -0.2839455306529999 -0.7084872126579285 -0.7057099938392639 -0.0 0.021860778331756592 0.5108931660652161 0 1.0 0 0.0 0 0.0 0 0.0 1.7079198360443115 -0.1691761314868927 0.21605446934700012 -0.670186460018158 -0.7421491146087646 -0.0 0.44756728410720825 0.3486024737358093 0 1.0 0 0.0 0 0.0 0 0.0 1.705702543258667 -0.1670672595500946 0.21605446934700012 -0.7084872126579285 -0.7057099938392639 -0.0 0.44622862339019775 0.35143786668777466 0 1.0 0 0.0 0 0.0 0 0.0 -0.9925765991210938 -0.04227036237716675 -0.2839455306529999 -0.9769585132598877 0.2133854180574417 -0.0 0.9732059240341187 0.5617566108703613 0 1.0 0 0.0 0 0.0 0 0.0 -0.9943959712982178 -0.04966357350349426 0.21605446934700012 -0.9638355374336243 0.26645711064338684 -0.0 0.6048398613929749 0.3735578656196594 0 1.0 0 0.0 0 0.0 0 0.0 -0.9925765991210938 -0.04227036237716675 0.21605446934700012 -0.9769585132598877 0.2133854180574417 -0.0 0.6049898862838745 0.38245081901550293 0 1.0 0 0.0 0 0.0 0 0.0 1.1012625694274902 0.04089759290218353 -0.2839455306529999 -0.9977721571922302 -0.06640827655792236 -0.0 0.9345499277114868 0.6254070997238159 0 1.0 0 0.0 0 0.0 0 0.0 1.101576328277588 0.0339178740978241 0.21605446934700012 -0.9989623427391052 -0.044892728328704834 -0.0 0.5344297289848328 0.460854709148407 0 1.0 0 0.0 0 0.0 0 0.0 1.1012625694274902 0.04089759290218353 0.21605446934700012 -0.9977721571922302 -0.06640827655792236 -0.0 0.5340175628662109 0.46915704011917114 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 -0.04734307527542114 -0.2839455306529999 -0.999969482421875 -0.005340739153325558 -0.0 0.07294094562530518 0.635789155960083 0 1.0 0 0.0 0 0.0 0 0.0 -0.15787625312805176 -0.05594152212142944 0.21605446934700012 -0.999725341796875 -0.02209540084004402 -0.0 0.4052700400352478 0.48801618814468384 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 -0.04734307527542114 0.21605446934700012 -0.999969482421875 -0.005340739153325558 -0.0 0.4058777093887329 0.4971381425857544 0 1.0 0 0.0 0 0.0 0 0.0 -1.3290716409683228 -0.0915345624089241 -0.2839455306529999 0.99920654296875 0.03906369209289551 -0.0 0.947837233543396 0.5201842188835144 0 1.0 0 0.0 0 0.0 0 0.0 -1.3293014764785767 -0.08461322635412216 0.21605446934700012 0.999603271484375 0.02786339819431305 -0.0 0.6367695331573486 0.36414480209350586 0 1.0 0 0.0 0 0.0 0 0.0 -1.3290716409683228 -0.0915345624089241 0.21605446934700012 0.99920654296875 0.03906369209289551 -0.0 0.6378192901611328 0.35732704401016235 0 1.0 0 0.0 0 0.0 0 0.0 1.7079198360443115 -0.1691761314868927 -0.2839455306529999 -0.670186460018158 -0.7421491146087646 -0.0 0.02050536870956421 0.5083656311035156 0 1.0 0 0.0 0 0.0 0 0.0 1.7102949619293213 -0.17121203243732452 0.21605445444583893 -0.6318246722221375 -0.7750785946846008 -0.0 0.4490269422531128 0.34583741426467896 0 1.0 0 0.0 0 0.0 0 0.0 1.7079198360443115 -0.1691761314868927 0.21605446934700012 -0.670186460018158 -0.7421491146087646 -0.0 0.44756728410720825 0.3486024737358093 0 1.0 0 0.0 0 0.0 0 0.0 -1.434169888496399 -0.08509361743927002 -0.2839455306529999 -0.8722190260887146 0.48908963799476624 -0.0 1.0030560493469238 0.5219749212265015 0 1.0 0 0.0 0 0.0 0 0.0 -1.4358701705932617 -0.08793220669031143 0.21605446934700012 -0.842982292175293 0.5379192233085632 -0.0 0.5761270523071289 0.3283221125602722 0 1.0 0 0.0 0 0.0 0 0.0 -1.434169888496399 -0.08509361743927002 0.21605446934700012 -0.8722190260887146 0.48908963799476624 -0.0 0.5769903659820557 0.3320075273513794 0 1.0 0 0.0 0 0.0 0 0.0 0.07869243621826172 -0.04897764325141907 -0.2839455306529999 -0.9925534725189209 0.12170781195163727 -0.0 0.9214386343955994 0.6372390985488892 0 1.0 0 0.0 0 0.0 0 0.0 0.07782411575317383 -0.0552787184715271 0.21605446934700012 -0.9878231287002563 0.15552231669425964 -0.0 0.5424344539642334 0.4816877245903015 0 1.0 0 0.0 0 0.0 0 0.0 0.07869243621826172 -0.04897764325141907 0.21605446934700012 -0.9925534725189209 0.12170781195163727 -0.0 0.5426681041717529 0.4888794422149658 0 1.0 0 0.0 0 0.0 0 0.0 -1.1457481384277344 -0.054659679532051086 -0.2839455306529999 0.9597155451774597 0.28095340728759766 -0.0 0.06672787666320801 0.5372171401977539 0 1.0 0 0.0 0 0.0 0 0.0 -1.1474629640579224 -0.04816523194313049 0.21605446934700012 0.9726554155349731 0.23221534490585327 -0.0 0.5030751824378967 0.35380715131759644 0 1.0 0 0.0 0 0.0 0 0.0 -1.1457481384277344 -0.054659679532051086 0.21605446934700012 0.9597155451774597 0.28095340728759766 -0.0 0.5042688250541687 0.3458558917045593 0 1.0 0 0.0 0 0.0 0 0.0 0.9544661045074463 0.0339178740978241 -0.2839455306529999 0.9998779296875 -0.013641773723065853 -0.0 0.03204253315925598 0.6222053170204163 0 1.0 0 0.0 0 0.0 0 0.0 0.9545562267303467 0.04051448404788971 0.21605446934700012 0.999298095703125 -0.03717154264450073 -0.0 0.44393593072891235 0.47227048873901367 0 1.0 0 0.0 0 0.0 0 0.0 0.9544661045074463 0.0339178740978241 0.21605446934700012 0.9998779296875 -0.013641773723065853 -0.0 0.44352710247039795 0.4643810987472534 0 1.0 0 0.0 0 0.0 0 0.0 1.7102949619293213 -0.17121203243732452 -0.2839455306529999 -0.6318246722221375 -0.7750785946846008 -0.0 0.01905834674835205 0.5059202909469604 0 1.0 0 0.0 0 0.0 0 0.0 1.7128283977508545 -0.17317496240139008 0.21605445444583893 -0.5937376022338867 -0.8046205043792725 -0.0 0.4506097733974457 0.34314483404159546 0 1.0 0 0.0 0 0.0 0 0.0 1.7102949619293213 -0.17121203243732452 0.21605445444583893 -0.6318246722221375 -0.7750785946846008 -0.0 0.4490269422531128 0.34583741426467896 0 1.0 0 0.0 0 0.0 0 0.0 -0.9943959712982178 -0.04966357350349426 -0.2839455306529999 -0.9638355374336243 0.26645711064338684 -0.0 0.9744312167167664 0.553192138671875 0 1.0 0 0.0 0 0.0 0 0.0 -0.9965461492538452 -0.05666030943393707 0.21605446934700012 -0.9464095234870911 0.3229468762874603 -0.0 0.6044479608535767 0.3650451898574829 0 1.0 0 0.0 0 0.0 0 0.0 -0.9943959712982178 -0.04966357350349426 0.21605446934700012 -0.9638355374336243 0.26645711064338684 -0.0 0.6048398613929749 0.3735578656196594 0 1.0 0 0.0 0 0.0 0 0.0 1.101576328277588 0.0339178740978241 -0.2839455306529999 0.0 0.999969482421875 -0.0 0.9348187446594238 0.6170793771743774 0 1.0 0 0.0 0 0.0 0 0.0 0.9544661045074463 0.0339178740978241 0.21605446934700012 0.0 0.999969482421875 -0.0 0.44352710247039795 0.4643810987472534 0 1.0 0 0.0 0 0.0 0 0.0 1.101576328277588 0.0339178740978241 0.21605446934700012 0.0 1.0 -0.0 0.5344297289848328 0.460854709148407 0 1.0 0 0.0 0 0.0 0 0.0 -1.5552927255630493 -0.0884600356221199 -0.2839455306529999 0.9437543749809265 0.33060702681541443 -0.0 0.07600328326225281 0.5079073905944824 0 1.0 0 0.0 0 0.0 0 0.0 -1.5562559366226196 -0.08536604791879654 0.21605446934700012 0.964598536491394 0.2637104392051697 -0.0 0.49066728353500366 0.32311660051345825 0 1.0 0 0.0 0 0.0 0 0.0 -1.5552927255630493 -0.0884600356221199 0.21605446934700012 0.9437543749809265 0.33060702681541443 -0.0 0.49127960205078125 0.31945616006851196 0 1.0 0 0.0 0 0.0 0 0.0 -0.05713176727294922 -0.06049741059541702 -0.2839455306529999 0.9953917264938354 0.095736563205719 -0.0 0.011940598487854004 0.6354849934577942 0 1.0 0 0.0 0 0.0 0 0.0 -0.057697296142578125 -0.053751200437545776 0.21605446934700012 0.9972533583641052 0.07397686690092087 -0.0 0.46050482988357544 0.48632752895355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.05713176727294922 -0.06049741059541702 0.21605446934700012 0.9953917264938354 0.095736563205719 -0.0 0.46059542894363403 0.4781392812728882 0 1.0 0 0.0 0 0.0 0 0.0 1.7128283977508545 -0.17317496240139008 -0.2839455306529999 -0.5937376022338867 -0.8046205043792725 -0.0 0.0175190269947052 0.5035566091537476 0 1.0 0 0.0 0 0.0 0 0.0 1.715519666671753 -0.17506492137908936 0.21605445444583893 -0.556291401386261 -0.8309579491615295 -0.0 0.4523172080516815 0.3405272960662842 0 1.0 0 0.0 0 0.0 0 0.0 1.7128283977508545 -0.17317496240139008 0.21605445444583893 -0.5937376022338867 -0.8046205043792725 -0.0 0.4506097733974457 0.34314483404159546 0 1.0 0 0.0 0 0.0 0 0.0 -1.2485114336013794 -0.053667277097702026 -0.2839455306529999 -0.981749951839447 -0.1900997906923294 -0.0 0.12196633219718933 0.525911808013916 0 1.0 0 0.0 0 0.0 0 0.0 -1.2456544637680054 -0.06652848422527313 0.21605446934700012 -0.9694814682006836 -0.2451246678829193 -0.0 0.44352030754089355 0.3454611897468567 0 1.0 0 0.0 0 0.0 0 0.0 -1.2485114336013794 -0.053667277097702026 0.21605446934700012 -0.981749951839447 -0.1900997906923294 -0.0 0.4429131746292114 0.3595367670059204 0 1.0 0 0.0 0 0.0 0 0.0 -1.4358701705932617 -0.08793220669031143 -0.2839455306529999 -0.842982292175293 0.5379192233085632 -0.0 1.004052996635437 0.5185349583625793 0 1.0 0 0.0 0 0.0 0 0.0 -1.437740683555603 -0.09068809449672699 0.21605446934700012 -0.8114261031150818 0.5843989253044128 -0.0 0.5751299858093262 0.32470762729644775 0 1.0 0 0.0 0 0.0 0 0.0 -1.4358701705932617 -0.08793220669031143 0.21605446934700012 -0.842982292175293 0.5379192233085632 -0.0 0.5761270523071289 0.3283221125602722 0 1.0 0 0.0 0 0.0 0 0.0 0.07782411575317383 -0.0552787184715271 -0.2839455306529999 -0.9878231287002563 0.15552231669425964 -0.0 0.9224212169647217 0.6302591562271118 0 1.0 0 0.0 0 0.0 0 0.0 0.07685351371765137 -0.06075522303581238 0.21605446934700012 -0.9798578023910522 0.19965209066867828 -0.0 0.5421093106269836 0.475372850894928 0 1.0 0 0.0 0 0.0 0 0.0 0.07782411575317383 -0.0552787184715271 0.21605446934700012 -0.9878231287002563 0.15552231669425964 -0.0 0.5424344539642334 0.4816877245903015 0 1.0 0 0.0 0 0.0 0 0.0 0.8531818389892578 0.028950944542884827 -0.2839455306529999 -0.9955748319625854 0.09390545636415482 -0.0 0.08653220534324646 0.6015206575393677 0 1.0 0 0.0 0 0.0 0 0.0 0.8521747589111328 0.014374911785125732 0.21605446934700012 -0.9989318251609802 0.045564133673906326 -0.0 0.3893885314464569 0.45168209075927734 0 1.0 0 0.0 0 0.0 0 0.0 0.8531818389892578 0.028950944542884827 0.21605446934700012 -0.9955748319625854 0.09390545636415482 -0.0 0.3910754919052124 0.46660172939300537 0 1.0 0 0.0 0 0.0 0 0.0 1.715519666671753 -0.17506492137908936 -0.2839455306529999 -0.556291401386261 -0.8309579491615295 -0.0 0.01588699221611023 0.5012739896774292 0 1.0 0 0.0 0 0.0 0 0.0 1.7183692455291748 -0.17688190937042236 0.21605445444583893 -0.5197302103042603 -0.8543046116828918 -0.0 0.45415133237838745 0.3379872441291809 0 1.0 0 0.0 0 0.0 0 0.0 1.715519666671753 -0.17506492137908936 0.21605445444583893 -0.556291401386261 -0.8309579491615295 -0.0 0.4523172080516815 0.3405272960662842 0 1.0 0 0.0 0 0.0 0 0.0 -0.15787625312805176 -0.05594152212142944 -0.2839455306529999 -0.999755859375 -0.02209540084004402 -0.0 0.07233351469039917 0.6266542673110962 0 1.0 0 0.0 0 0.0 0 0.0 -0.15759897232055664 -0.06422378122806549 0.21605446934700012 -0.9989318251609802 -0.045686207711696625 -0.0 0.4047679007053375 0.4791291356086731 0 1.0 0 0.0 0 0.0 0 0.0 -0.15787625312805176 -0.05594152212142944 0.21605446934700012 -0.999725341796875 -0.02209540084004402 -0.0 0.4052700400352478 0.48801618814468384 0 1.0 0 0.0 0 0.0 0 0.0 -1.143804669380188 -0.06069684773683548 -0.2839455306529999 0.9422894716262817 0.334727019071579 -0.0 0.0650908350944519 0.5301951169967651 0 1.0 0 0.0 0 0.0 0 0.0 -1.1457481384277344 -0.054659679532051086 0.21605446934700012 0.9597155451774597 0.28095340728759766 -0.0 0.5042688250541687 0.3458558917045593 0 1.0 0 0.0 0 0.0 0 0.0 -1.143804669380188 -0.06069684773683548 0.21605446934700012 0.9422894716262817 0.334727019071579 -0.0 0.505640983581543 0.33850187063217163 0 1.0 0 0.0 0 0.0 0 0.0 -1.5541154146194458 -0.0914761871099472 -0.2839455306529999 0.9182103872299194 0.3960081934928894 -0.0 0.07507732510566711 0.5045878887176514 0 1.0 0 0.0 0 0.0 0 0.0 -1.5552927255630493 -0.0884600356221199 0.21605446934700012 0.9437543749809265 0.33060702681541443 -0.0 0.49127960205078125 0.31945616006851196 0 1.0 0 0.0 0 0.0 0 0.0 -1.5541154146194458 -0.0914761871099472 0.21605446934700012 0.9182103872299194 0.3960081934928894 -0.0 0.4920453131198883 0.3158797025680542 0 1.0 0 0.0 0 0.0 0 0.0 1.7183692455291748 -0.17688190937042236 -0.2839455306529999 -0.5197302103042603 -0.8543046116828918 -0.0 0.014161437749862671 0.49907225370407104 0 1.0 0 0.0 0 0.0 0 0.0 1.7213771343231201 -0.1786259263753891 0.21605445444583893 -0.4842982292175293 -0.8748741149902344 -0.0 0.45611369609832764 0.33552831411361694 0 1.0 0 0.0 0 0.0 0 0.0 1.7183692455291748 -0.17688190937042236 0.21605445444583893 -0.5197302103042603 -0.8543046116828918 -0.0 0.45415133237838745 0.3379872441291809 0 1.0 0 0.0 0 0.0 0 0.0 -0.9965461492538452 -0.05666030943393707 -0.2839455306529999 -0.9464095234870911 0.3229468762874603 -0.0 0.9758127927780151 0.5450972318649292 0 1.0 0 0.0 0 0.0 0 0.0 -0.9990271329879761 -0.06326057016849518 0.21605446934700012 -0.9239173531532288 0.382519006729126 -0.0 0.60380619764328 0.35690802335739136 0 1.0 0 0.0 0 0.0 0 0.0 -0.9965461492538452 -0.05666030943393707 0.21605446934700012 -0.9464095234870911 0.3229468762874603 -0.0 0.6044479608535767 0.3650451898574829 0 1.0 0 0.0 0 0.0 0 0.0 1.198608636856079 0.009764343500137329 -0.2839455306529999 0.9981383681297302 0.060731835663318634 -0.0 0.886174738407135 0.5731443166732788 0 1.0 0 0.0 0 0.0 0 0.0 1.1972198486328125 0.026595190167427063 0.21605446934700012 0.9943845868110657 0.10565508157014847 -0.0 0.58353590965271 0.4565879702568054 0 1.0 0 0.0 0 0.0 0 0.0 1.198608636856079 0.009764343500137329 0.21605446934700012 0.9981383681297302 0.060731835663318634 -0.0 0.58528733253479 0.43931108713150024 0 1.0 0 0.0 0 0.0 0 0.0 -1.6561623811721802 -0.09019431471824646 -0.2839455306529999 -0.9981994032859802 -0.059907834976911545 -0.0 0.12654244899749756 0.49805402755737305 0 1.0 0 0.0 0 0.0 0 0.0 -1.655472755432129 -0.09779063612222672 0.21605446934700012 -0.9924619197845459 -0.12231818586587906 -0.0 0.43254271149635315 0.3287145495414734 0 1.0 0 0.0 0 0.0 0 0.0 -1.6561623811721802 -0.09019431471824646 0.21605446934700012 -0.9981994032859802 -0.059907834976911545 -0.0 0.4327855110168457 0.3363778591156006 0 1.0 0 0.0 0 0.0 0 0.0 0.8521747589111328 0.014374911785125732 -0.2839455306529999 -0.9989318251609802 0.045564133673906326 -0.0 0.08592897653579712 0.5862740278244019 0 1.0 0 0.0 0 0.0 0 0.0 0.8518390655517578 -0.0007581412792205811 0.21605446934700012 -0.999969482421875 0.001037629321217537 -0.0 0.3879176378250122 0.43608367443084717 0 1.0 0 0.0 0 0.0 0 0.0 0.8521747589111328 0.014374911785125732 0.21605446934700012 -0.9989318251609802 0.045564133673906326 -0.0 0.3893885314464569 0.45168209075927734 0 1.0 0 0.0 0 0.0 0 0.0 -0.05649089813232422 -0.06639958173036575 -0.2839455306529999 0.9922482967376709 0.12408825755119324 -0.0 0.01143917441368103 0.628298282623291 0 1.0 0 0.0 0 0.0 0 0.0 -0.05713176727294922 -0.06049741059541702 0.21605446934700012 0.9953917264938354 0.095736563205719 -0.0 0.46059542894363403 0.4781392812728882 0 1.0 0 0.0 0 0.0 0 0.0 -0.05649089813232422 -0.06639958173036575 0.21605446934700012 0.9922482967376709 0.12408825755119324 -0.0 0.4607657194137573 0.47090214490890503 0 1.0 0 0.0 0 0.0 0 0.0 -1.437740683555603 -0.09068809449672699 -0.2839455306529999 -0.8114261031150818 0.5843989253044128 -0.0 1.0051469802856445 0.5151885747909546 0 1.0 0 0.0 0 0.0 0 0.0 -1.4397814273834229 -0.0933612808585167 0.21605446934700012 -0.7780083417892456 0.6282235383987427 -0.0 0.5739966630935669 0.32116496562957764 0 1.0 0 0.0 0 0.0 0 0.0 -1.437740683555603 -0.09068809449672699 0.21605446934700012 -0.8114261031150818 0.5843989253044128 -0.0 0.5751299858093262 0.32470762729644775 0 1.0 0 0.0 0 0.0 0 0.0 0.07685351371765137 -0.06075522303581238 -0.2839455306529999 -0.9798578023910522 0.19965209066867828 -0.0 0.9233952164649963 0.6241699457168579 0 1.0 0 0.0 0 0.0 0 0.0 0.07578086853027344 -0.0654071494936943 0.21605446934700012 -0.965788722038269 0.25922420620918274 -0.0 0.5416918396949768 0.46996021270751953 0 1.0 0 0.0 0 0.0 0 0.0 0.07685351371765137 -0.06075522303581238 0.21605446934700012 -0.9798578023910522 0.19965209066867828 -0.0 0.5421093106269836 0.475372850894928 0 1.0 0 0.0 0 0.0 0 0.0 1.851309061050415 -0.1799904853105545 -0.2839455306529999 0.3588061034679413 -0.9333781003952026 -0.0 0.9349046945571899 0.4923299551010132 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.37635424733161926 -0.9264503717422485 -0.0 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 1.851309061050415 -0.1799904853105545 0.21605445444583893 0.3588061034679413 -0.9333781003952026 -0.0 0.5453030467033386 0.33780014514923096 0 1.0 0 0.0 0 0.0 0 0.0 -1.1416325569152832 -0.06627672910690308 -0.2839455306529999 0.9191870093345642 0.39378032088279724 -0.0 0.06336680054664612 0.523777961730957 0 1.0 0 0.0 0 0.0 0 0.0 -1.143804669380188 -0.06069684773683548 0.21605446934700012 0.9422894716262817 0.334727019071579 -0.0 0.505640983581543 0.33850187063217163 0 1.0 0 0.0 0 0.0 0 0.0 -1.1416325569152832 -0.06627672910690308 0.21605446934700012 0.9191870093345642 0.39378032088279724 -0.0 0.5071949362754822 0.33174222707748413 0 1.0 0 0.0 0 0.0 0 0.0 1.7213771343231201 -0.1786259263753891 -0.2839455306529999 -0.4842982292175293 -0.8748741149902344 -0.0 0.012341886758804321 0.49695128202438354 0 1.0 0 0.0 0 0.0 0 0.0 1.7245428562164307 -0.18029697239398956 0.21605445444583893 -0.4501480162143707 -0.8929410576820374 -0.0 0.4582054913043976 0.3331541419029236 0 1.0 0 0.0 0 0.0 0 0.0 1.7213771343231201 -0.1786259263753891 0.21605445444583893 -0.4842982292175293 -0.8748741149902344 -0.0 0.45611369609832764 0.33552831411361694 0 1.0 0 0.0 0 0.0 0 0.0 -0.9990271329879761 -0.06326057016849518 -0.2839455306529999 -0.9239173531532288 0.382519006729126 -0.0 0.977351725101471 0.53746497631073 0 1.0 0 0.0 0 0.0 0 0.0 -1.0018389225006104 -0.06946435570716858 0.21605446934700012 -0.8956877589225769 0.4446241557598114 -0.0 0.6029060482978821 0.34914159774780273 0 1.0 0 0.0 0 0.0 0 0.0 -0.9990271329879761 -0.06326057016849518 0.21605446934700012 -0.9239173531532288 0.382519006729126 -0.0 0.60380619764328 0.35690802335739136 0 1.0 0 0.0 0 0.0 0 0.0 1.1993017196655273 -0.007876485586166382 -0.2839455306529999 0.999786376953125 0.019562363624572754 -0.0 0.8874428272247314 0.5548990964889526 0 1.0 0 0.0 0 0.0 0 0.0 1.198608636856079 0.009764343500137329 0.21605446934700012 0.9981383681297302 0.060731835663318634 -0.0 0.58528733253479 0.43931108713150024 0 1.0 0 0.0 0 0.0 0 0.0 1.1993017196655273 -0.007876485586166382 0.21605446934700012 0.999786376953125 0.019562363624572754 -0.0 0.586828351020813 0.4211447238922119 0 1.0 0 0.0 0 0.0 0 0.0 -0.15759897232055664 -0.06422378122806549 -0.2839455306529999 -0.9989318251609802 -0.045686207711696625 -0.0 0.07166120409965515 0.6177982091903687 0 1.0 0 0.0 0 0.0 0 0.0 -0.1571369171142578 -0.0721898302435875 0.21605446934700012 -0.9974669814109802 -0.0710776075720787 -0.0 0.4043731093406677 0.4704909324645996 0 1.0 0 0.0 0 0.0 0 0.0 -0.15759897232055664 -0.06422378122806549 0.21605446934700012 -0.9989318251609802 -0.045686207711696625 -0.0 0.4047679007053375 0.4791291356086731 0 1.0 0 0.0 0 0.0 0 0.0 0.8518390655517578 -0.0007581412792205811 -0.2839455306529999 -0.999969482421875 0.001037629321217537 -0.0 0.08500796556472778 0.5705099701881409 0 1.0 0 0.0 0 0.0 0 0.0 0.8520944118499756 -0.013474613428115845 0.21605446934700012 -0.9991455078125 -0.04101687669754028 -0.0 0.3868945240974426 0.42290353775024414 0 1.0 0 0.0 0 0.0 0 0.0 0.8518390655517578 -0.0007581412792205811 0.21605446934700012 -0.999969482421875 0.001037629321217537 -0.0 0.3879176378250122 0.43608367443084717 0 1.0 0 0.0 0 0.0 0 0.0 -1.5527241230010986 -0.09441450238227844 -0.2839455306529999 0.8884548544883728 0.4589373469352722 -0.0 0.07403913140296936 0.5013856887817383 0 1.0 0 0.0 0 0.0 0 0.0 -1.5541154146194458 -0.0914761871099472 0.21605446934700012 0.9182103872299194 0.3960081934928894 -0.0 0.4920453131198883 0.3158797025680542 0 1.0 0 0.0 0 0.0 0 0.0 -1.5527241230010986 -0.09441450238227844 0.21605446934700012 0.8884548544883728 0.4589373469352722 -0.0 0.4929672181606293 0.31238698959350586 0 1.0 0 0.0 0 0.0 0 0.0 0.07578086853027344 -0.0654071494936943 -0.2839455306529999 -0.965788722038269 0.25922420620918274 -0.0 0.9243631362915039 0.6189967393875122 0 1.0 0 0.0 0 0.0 0 0.0 0.07460594177246094 -0.06923449784517288 0.21605446934700012 -0.9444563388824463 0.32856225967407227 -0.0 0.5411810278892517 0.4654701352119446 0 1.0 0 0.0 0 0.0 0 0.0 0.07578086853027344 -0.0654071494936943 0.21605446934700012 -0.965788722038269 0.25922420620918274 -0.0 0.5416918396949768 0.46996021270751953 0 1.0 0 0.0 0 0.0 0 0.0 1.845398187637329 -0.18213585019111633 -0.2839455306529999 0.3236792981624603 -0.9461653232574463 -0.0 0.938292920589447 0.4900234341621399 0 1.0 0 0.0 0 0.0 0 0.0 1.851309061050415 -0.1799904853105545 0.21605445444583893 0.3588061034679413 -0.9333781003952026 -0.0 0.5453030467033386 0.33780014514923096 0 1.0 0 0.0 0 0.0 0 0.0 1.845398187637329 -0.18213585019111633 0.21605445444583893 0.3236792981624603 -0.9461653232574463 -0.0 0.5417003035545349 0.33435338735580444 0 1.0 0 0.0 0 0.0 0 0.0 -1.13923180103302 -0.07139932364225388 -0.2839455306529999 0.8889431357383728 0.45799127221107483 -0.0 0.06155392527580261 0.5179575085639954 0 1.0 0 0.0 0 0.0 0 0.0 -1.1416325569152832 -0.06627672910690308 0.21605446934700012 0.9191870093345642 0.39378032088279724 -0.0 0.5071949362754822 0.33174222707748413 0 1.0 0 0.0 0 0.0 0 0.0 -1.13923180103302 -0.07139932364225388 0.21605446934700012 0.8889431357383728 0.45799127221107483 -0.0 0.5089333653450012 0.32557326555252075 0 1.0 0 0.0 0 0.0 0 0.0 -1.328776240348816 -0.09809833765029907 -0.2839455306529999 0.9986571669578552 0.05151524394750595 -0.0 0.9480462074279785 0.5135672092437744 0 1.0 0 0.0 0 0.0 0 0.0 -1.3290716409683228 -0.0915345624089241 0.21605446934700012 0.99920654296875 0.03906369209289551 -0.0 0.6378192901611328 0.35732704401016235 0 1.0 0 0.0 0 0.0 0 0.0 -1.328776240348816 -0.09809833765029907 0.21605446934700012 0.9986571669578552 0.05151524394750595 -0.0 0.6388593912124634 0.3509647846221924 0 1.0 0 0.0 0 0.0 0 0.0 1.7245428562164307 -0.18029697239398956 -0.2839455306529999 -0.4501480162143707 -0.8929410576820374 -0.0 0.010428071022033691 0.4949110746383667 0 1.0 0 0.0 0 0.0 0 0.0 1.7278664112091064 -0.18189504742622375 0.21605445444583893 -0.41734060645103455 -0.9087191224098206 -0.0 0.46042805910110474 0.3308688998222351 0 1.0 0 0.0 0 0.0 0 0.0 1.7245428562164307 -0.18029697239398956 0.21605445444583893 -0.4501480162143707 -0.8929410576820374 -0.0 0.4582054913043976 0.3331541419029236 0 1.0 0 0.0 0 0.0 0 0.0 -1.2456544637680054 -0.06652848422527313 -0.2839455306529999 -0.9694814682006836 -0.2451246678829193 -0.0 0.11918789148330688 0.5129293203353882 0 1.0 0 0.0 0 0.0 0 0.0 -1.242162823677063 -0.07882294803857803 0.21605446934700012 -0.9530625343322754 -0.3026825785636902 -0.0 0.44452062249183655 0.33192235231399536 0 1.0 0 0.0 0 0.0 0 0.0 -1.2456544637680054 -0.06652848422527313 0.21605446934700012 -0.9694814682006836 -0.2451246678829193 -0.0 0.44352030754089355 0.3454611897468567 0 1.0 0 0.0 0 0.0 0 0.0 1.1992995738983154 -0.026327311992645264 -0.2839455306529999 0.999969482421875 -9.155552834272385e-05 -0.0 0.8890448212623596 0.535987377166748 0 1.0 0 0.0 0 0.0 0 0.0 1.1993017196655273 -0.007876485586166382 0.21605446934700012 0.999786376953125 0.019562363624572754 -0.0 0.586828351020813 0.4211447238922119 0 1.0 0 0.0 0 0.0 0 0.0 1.1992995738983154 -0.026327311992645264 0.21605446934700012 1.0 -9.155552834272385e-05 -0.0 0.5881603956222534 0.40214085578918457 0 1.0 0 0.0 0 0.0 0 0.0 -1.4397814273834229 -0.0933612808585167 -0.2839455306529999 -0.7780083417892456 0.6282235383987427 -0.0 1.006338119506836 0.5119343400001526 0 1.0 0 0.0 0 0.0 0 0.0 -1.4419924020767212 -0.09595176577568054 0.21605446934700012 -0.7431256771087646 0.669118344783783 -0.0 0.5727245807647705 0.31769561767578125 0 1.0 0 0.0 0 0.0 0 0.0 -1.4397814273834229 -0.0933612808585167 0.21605446934700012 -0.7780083417892456 0.6282235383987427 -0.0 0.5739966630935669 0.32116496562957764 0 1.0 0 0.0 0 0.0 0 0.0 0.8520944118499756 -0.013474613428115845 -0.2839455306529999 -0.9991455078125 -0.04101687669754028 -0.0 0.08401632308959961 0.5573220252990723 0 1.0 0 0.0 0 0.0 0 0.0 0.852860689163208 -0.025821372866630554 0.21605446934700012 -0.9964598417282104 -0.08398693799972534 -0.0 0.3861108422279358 0.4100426435470581 0 1.0 0 0.0 0 0.0 0 0.0 0.8520944118499756 -0.013474613428115845 0.21605446934700012 -0.9991455078125 -0.04101687669754028 -0.0 0.3868945240974426 0.42290353775024414 0 1.0 0 0.0 0 0.0 0 0.0 -0.05577445030212402 -0.07145771384239197 -0.2839455306529999 0.9866939187049866 0.16248054802417755 -0.0 0.010903030633926392 0.6221014261245728 0 1.0 0 0.0 0 0.0 0 0.0 -0.05649089813232422 -0.06639958173036575 0.21605446934700012 0.9922482967376709 0.12408825755119324 -0.0 0.4607657194137573 0.47090214490890503 0 1.0 0 0.0 0 0.0 0 0.0 -0.05577445030212402 -0.07145771384239197 0.21605446934700012 0.9866939187049866 0.16248054802417755 -0.0 0.46101683378219604 0.46464651823043823 0 1.0 0 0.0 0 0.0 0 0.0 1.7278664112091064 -0.18189504742622375 -0.2839455306529999 -0.41731008887290955 -0.9087496399879456 -0.0 0.00841948390007019 0.4929516911506653 0 1.0 0 0.0 0 0.0 0 0.0 1.7313482761383057 -0.18342013657093048 0.21605445444583893 -0.38496047258377075 -0.9229102730751038 -0.0 0.46278277039527893 0.3286771774291992 0 1.0 0 0.0 0 0.0 0 0.0 1.7278664112091064 -0.18189504742622375 0.21605445444583893 -0.41734060645103455 -0.9087191224098206 -0.0 0.46042805910110474 0.3308688998222351 0 1.0 0 0.0 0 0.0 0 0.0 -1.0018389225006104 -0.06946435570716858 -0.2839455306529999 -0.8956877589225769 0.4446241557598114 -0.0 0.979049801826477 0.5302878022193909 0 1.0 0 0.0 0 0.0 0 0.0 -1.004981517791748 -0.07527166604995728 0.21605446934700012 -0.861079752445221 0.5084078311920166 -0.0 0.6017383337020874 0.3417413830757141 0 1.0 0 0.0 0 0.0 0 0.0 -1.0018389225006104 -0.06946435570716858 0.21605446934700012 -0.8956877589225769 0.4446241557598114 -0.0 0.6029060482978821 0.34914159774780273 0 1.0 0 0.0 0 0.0 0 0.0 0.07460594177246094 -0.06923449784517288 -0.2839455306529999 -0.9444563388824463 0.32856225967407227 -0.0 0.925327718257904 0.6147598028182983 0 1.0 0 0.0 0 0.0 0 0.0 0.07329249382019043 -0.07260335236787796 0.21605446934700012 -0.921384334564209 0.3885921835899353 -0.0 0.5405697822570801 0.46148681640625 0 1.0 0 0.0 0 0.0 0 0.0 0.07460594177246094 -0.06923449784517288 0.21605446934700012 -0.9444563388824463 0.32856225967407227 -0.0 0.5411810278892517 0.4654701352119446 0 1.0 0 0.0 0 0.0 0 0.0 0.852860689163208 -0.025821372866630554 -0.2839455306529999 -0.9964598417282104 -0.08398693799972534 -0.0 0.08284473419189453 0.5445805788040161 0 1.0 0 0.0 0 0.0 0 0.0 0.854137659072876 -0.03779841959476471 0.21605446934700012 -0.9916074275970459 -0.12915432453155518 -0.0 0.38557168841362 0.3975013494491577 0 1.0 0 0.0 0 0.0 0 0.0 0.852860689163208 -0.025821372866630554 0.21605446934700012 -0.9964598417282104 -0.08398693799972534 -0.0 0.3861108422279358 0.4100426435470581 0 1.0 0 0.0 0 0.0 0 0.0 -1.5511187314987183 -0.09727498143911362 -0.2839455306529999 0.8549760580062866 0.5186010599136353 -0.0 0.07288837432861328 0.49829840660095215 0 1.0 0 0.0 0 0.0 0 0.0 -1.5527241230010986 -0.09441450238227844 0.21605446934700012 0.8884548544883728 0.4589373469352722 -0.0 0.4929672181606293 0.31238698959350586 0 1.0 0 0.0 0 0.0 0 0.0 -1.5511187314987183 -0.09727498143911362 0.21605446934700012 0.8549760580062866 0.5186010599136353 -0.0 0.4940483868122101 0.3089780807495117 0 1.0 0 0.0 0 0.0 0 0.0 -1.4419924020767212 -0.09595176577568054 -0.2839455306529999 -0.7431256771087646 0.669118344783783 -0.0 1.0076266527175903 0.5087709426879883 0 1.0 0 0.0 0 0.0 0 0.0 -1.4443737268447876 -0.09845954924821854 0.21605446934700012 -0.7072664499282837 0.7069307565689087 -0.0 0.5713112354278564 0.3143012523651123 0 1.0 0 0.0 0 0.0 0 0.0 -1.4419924020767212 -0.09595176577568054 0.21605446934700012 -0.7431256771087646 0.669118344783783 -0.0 0.5727245807647705 0.31769561767578125 0 1.0 0 0.0 0 0.0 0 0.0 1.8393609523773193 -0.18407689034938812 -0.2839455306529999 0.28867459297180176 -0.9573961496353149 -0.0 0.9417729377746582 0.4879313111305237 0 1.0 0 0.0 0 0.0 0 0.0 1.845398187637329 -0.18213585019111633 0.21605445444583893 0.3236792981624603 -0.9461653232574463 -0.0 0.5417003035545349 0.33435338735580444 0 1.0 0 0.0 0 0.0 0 0.0 1.8393609523773193 -0.18407689034938812 0.21605445444583893 0.28867459297180176 -0.9573961496353149 -0.0 0.5379304885864258 0.33115673065185547 0 1.0 0 0.0 0 0.0 0 0.0 -1.1366022825241089 -0.07606462389230728 -0.2839455306529999 0.8522293567657471 0.5231177806854248 -0.0 0.05965006351470947 0.5127252340316772 0 1.0 0 0.0 0 0.0 0 0.0 -1.13923180103302 -0.07139932364225388 0.21605446934700012 0.8889431357383728 0.45799127221107483 -0.0 0.5089333653450012 0.32557326555252075 0 1.0 0 0.0 0 0.0 0 0.0 -1.1366022825241089 -0.07606462389230728 0.21605446934700012 0.8522293567657471 0.5231177806854248 -0.0 0.510858416557312 0.31999123096466064 0 1.0 0 0.0 0 0.0 0 0.0 -0.054982662200927734 -0.07567181438207626 -0.2839455306529999 0.9761345386505127 0.21701711416244507 -0.0 0.010331302881240845 0.6169167160987854 0 1.0 0 0.0 0 0.0 0 0.0 -0.05577445030212402 -0.07145771384239197 0.21605446934700012 0.9866939187049866 0.16248054802417755 -0.0 0.46101683378219604 0.46464651823043823 0 1.0 0 0.0 0 0.0 0 0.0 -0.054982662200927734 -0.07567181438207626 0.21605446934700012 0.9761345386505127 0.21701711416244507 -0.0 0.46134936809539795 0.4593951106071472 0 1.0 0 0.0 0 0.0 0 0.0 1.7313482761383057 -0.18342013657093048 -0.2839455306529999 -0.38496047258377075 -0.9229102730751038 -0.0 0.006315648555755615 0.4910735487937927 0 1.0 0 0.0 0 0.0 0 0.0 1.7349460124969482 -0.18484672904014587 0.21605445444583893 -0.35154271125793457 -0.9361552596092224 -0.0 0.4652417302131653 0.32661813497543335 0 1.0 0 0.0 0 0.0 0 0.0 1.7313482761383057 -0.18342013657093048 0.21605445444583893 -0.38496047258377075 -0.9229102730751038 -0.0 0.46278277039527893 0.3286771774291992 0 1.0 0 0.0 0 0.0 0 0.0 -1.004981517791748 -0.07527166604995728 -0.2839455306529999 -0.861079752445221 0.5084078311920166 -0.0 0.9809092879295349 0.5235574245452881 0 1.0 0 0.0 0 0.0 0 0.0 -1.0084549188613892 -0.08068249374628067 0.21605446934700012 -0.8197271823883057 0.5727408528327942 -0.0 0.6002932786941528 0.33470362424850464 0 1.0 0 0.0 0 0.0 0 0.0 -1.004981517791748 -0.07527166604995728 0.21605446934700012 -0.861079752445221 0.5084078311920166 -0.0 0.6017383337020874 0.3417413830757141 0 1.0 0 0.0 0 0.0 0 0.0 0.9527146816253662 -0.026327311992645264 -0.2839455306529999 0.0 -0.999969482421875 -0.0 1.0311825275421143 0.5487100481987 0 1.0 0 0.0 0 0.0 0 0.0 1.1992995738983154 -0.026327311992645264 0.21605446934700012 0.0 -0.999969482421875 -0.0 0.5881603956222534 0.40214085578918457 0 1.0 0 0.0 0 0.0 0 0.0 0.9527146816253662 -0.026327311992645264 0.21605446934700012 0.0 -1.0 -0.0 0.4389815330505371 0.39140015840530396 0 1.0 0 0.0 0 0.0 0 0.0 -0.1571369171142578 -0.0721898302435875 -0.2839455306529999 -0.9974669814109802 -0.0710776075720787 -0.0 0.0709240734577179 0.6092349290847778 0 1.0 0 0.0 0 0.0 0 0.0 -0.15648984909057617 -0.07983966916799545 0.21605446934700012 -0.9951170086860657 -0.09848322719335556 -0.0 0.40408778190612793 0.46211308240890503 0 1.0 0 0.0 0 0.0 0 0.0 -0.1571369171142578 -0.0721898302435875 0.21605446934700012 -0.9974669814109802 -0.0710776075720787 -0.0 0.4043731093406677 0.4704909324645996 0 1.0 0 0.0 0 0.0 0 0.0 -1.5492993593215942 -0.10005762428045273 -0.2839455306529999 0.8185674548149109 0.574358344078064 -0.0 0.07162481546401978 0.49532419443130493 0 1.0 0 0.0 0 0.0 0 0.0 -1.5511187314987183 -0.09727498143911362 0.21605446934700012 0.8549760580062866 0.5186010599136353 -0.0 0.4940483868122101 0.3089780807495117 0 1.0 0 0.0 0 0.0 0 0.0 -1.5492993593215942 -0.10005762428045273 0.21605446934700012 0.8185674548149109 0.574388861656189 -0.0 0.4952918291091919 0.30565404891967773 0 1.0 0 0.0 0 0.0 0 0.0 0.953040599822998 -0.03348945081233978 -0.2839455306529999 0.9976500868797302 0.06805627793073654 -0.0 0.03077256679534912 0.540071964263916 0 1.0 0 0.0 0 0.0 0 0.0 0.9527146816253662 -0.026327311992645264 0.21605446934700012 0.9989623427391052 0.04544205963611603 -0.0 0.4389815330505371 0.39140015840530396 0 1.0 0 0.0 0 0.0 0 0.0 0.953040599822998 -0.03348945081233978 0.21605446934700012 0.9976500868797302 0.06805627793073654 -0.0 0.43873849511146545 0.3827359676361084 0 1.0 0 0.0 0 0.0 0 0.0 -1.655472755432129 -0.09779063612222672 -0.2839455306529999 -0.9924619197845459 -0.12231818586587906 -0.0 0.12539279460906982 0.4907315969467163 0 1.0 0 0.0 0 0.0 0 0.0 -1.6543234586715698 -0.10515831410884857 0.21605446934700012 -0.982329785823822 -0.18707846105098724 -0.0 0.43253403902053833 0.32122570276260376 0 1.0 0 0.0 0 0.0 0 0.0 -1.655472755432129 -0.09779063612222672 0.21605446934700012 -0.9924619197845459 -0.12231818586587906 -0.0 0.43254271149635315 0.3287145495414734 0 1.0 0 0.0 0 0.0 0 0.0 0.07329249382019043 -0.07260335236787796 -0.2839455306529999 -0.921384334564209 0.3885921835899353 -0.0 0.9263383150100708 0.6110518574714661 0 1.0 0 0.0 0 0.0 0 0.0 0.07180380821228027 -0.075879767537117 0.21605446934700012 -0.8986785411834717 0.4385509788990021 -0.0 0.5398499369621277 0.45758336782455444 0 1.0 0 0.0 0 0.0 0 0.0 0.07329249382019043 -0.07260335236787796 0.21605446934700012 -0.921384334564209 0.3885921835899353 -0.0 0.5405697822570801 0.46148681640625 0 1.0 0 0.0 0 0.0 0 0.0 1.8331973552703857 -0.18581360578536987 -0.2839455306529999 0.2539750337600708 -0.9671925902366638 -0.0 0.9453461170196533 0.4860578179359436 0 1.0 0 0.0 0 0.0 0 0.0 1.8393609523773193 -0.18407689034938812 0.21605445444583893 0.28867459297180176 -0.9573961496353149 -0.0 0.5379304885864258 0.33115673065185547 0 1.0 0 0.0 0 0.0 0 0.0 1.8331973552703857 -0.18581360578536987 0.21605445444583893 0.2539750337600708 -0.9671925902366638 -0.0 0.533993124961853 0.32822293043136597 0 1.0 0 0.0 0 0.0 0 0.0 -1.132501244544983 -0.08221854269504547 -0.2839455306529999 0.8114871382713318 0.5843378901481628 -0.0 0.05678075551986694 0.505921483039856 0 1.0 0 0.0 0 0.0 0 0.0 -1.1366022825241089 -0.07606462389230728 0.21605446934700012 0.8522293567657471 0.5231177806854248 -0.0 0.510858416557312 0.31999123096466064 0 1.0 0 0.0 0 0.0 0 0.0 -1.132501244544983 -0.08221854269504547 0.21605446934700012 0.8114871382713318 0.5843378901481628 -0.0 0.5139024257659912 0.3127002716064453 0 1.0 0 0.0 0 0.0 0 0.0 1.7349460124969482 -0.18484672904014587 -0.2839455306529999 -0.35154271125793457 -0.9361552596092224 -0.0 0.004141867160797119 0.4893079400062561 0 1.0 0 0.0 0 0.0 0 0.0 1.738616704940796 -0.18614926934242249 0.21605445444583893 -0.317392498254776 -0.9482711553573608 -0.0 0.4677753150463104 0.3247298002243042 0 1.0 0 0.0 0 0.0 0 0.0 1.7349460124969482 -0.18484672904014587 0.21605445444583893 -0.35154271125793457 -0.9361552596092224 -0.0 0.4652417302131653 0.32661813497543335 0 1.0 0 0.0 0 0.0 0 0.0 -1.242162823677063 -0.07882294803857803 -0.2839455306529999 -0.9530625343322754 -0.3026825785636902 -0.0 0.11620524525642395 0.5006495714187622 0 1.0 0 0.0 0 0.0 0 0.0 -1.2380362749099731 -0.09055066853761673 0.21605446934700012 -0.9320352673530579 -0.36234626173973083 -0.0 0.44594162702560425 0.31891322135925293 0 1.0 0 0.0 0 0.0 0 0.0 -1.242162823677063 -0.07882294803857803 0.21605446934700012 -0.9530625343322754 -0.3026825785636902 -0.0 0.44452062249183655 0.33192235231399536 0 1.0 0 0.0 0 0.0 0 0.0 0.9536681175231934 -0.040381595492362976 -0.2839455306529999 0.9933775067329407 0.11484114825725555 -0.0 0.03019922971725464 0.5318121910095215 0 1.0 0 0.0 0 0.0 0 0.0 0.953040599822998 -0.03348945081233978 0.21605446934700012 0.9976500868797302 0.06805627793073654 -0.0 0.43873849511146545 0.3827359676361084 0 1.0 0 0.0 0 0.0 0 0.0 0.9536681175231934 -0.040381595492362976 0.21605446934700012 0.9933775067329407 0.11484114825725555 -0.0 0.43869754672050476 0.37439829111099243 0 1.0 0 0.0 0 0.0 0 0.0 0.854137659072876 -0.03779841959476471 -0.2839455306529999 -0.9916074275970459 -0.12915432453155518 -0.0 0.08149310946464539 0.532286524772644 0 1.0 0 0.0 0 0.0 0 0.0 0.8559255599975586 -0.04940573871135712 0.21605446934700012 -0.9843134880065918 -0.17636646330356598 -0.0 0.38528379797935486 0.38527578115463257 0 1.0 0 0.0 0 0.0 0 0.0 0.854137659072876 -0.03779841959476471 0.21605446934700012 -0.9916074275970459 -0.12915432453155518 -0.0 0.38557168841362 0.3975013494491577 0 1.0 0 0.0 0 0.0 0 0.0 -1.328415036201477 -0.10430455207824707 -0.2839455306529999 0.9978331923484802 0.06543168425559998 -0.0 0.9482048749923706 0.5073869228363037 0 1.0 0 0.0 0 0.0 0 0.0 -1.328776240348816 -0.09809833765029907 0.21605446934700012 0.9986571669578552 0.05151524394750595 -0.0 0.6388593912124634 0.3509647846221924 0 1.0 0 0.0 0 0.0 0 0.0 -1.328415036201477 -0.10430455207824707 0.21605446934700012 0.9978331923484802 0.06543168425559998 -0.0 0.6398884057998657 0.34505248069763184 0 1.0 0 0.0 0 0.0 0 0.0 -0.05411553382873535 -0.07904185354709625 -0.2839455306529999 0.9590746760368347 0.28302866220474243 -0.0 0.009722918272018433 0.6127604246139526 0 1.0 0 0.0 0 0.0 0 0.0 -0.054982662200927734 -0.07567181438207626 0.21605446934700012 0.9761345386505127 0.21701711416244507 -0.0 0.46134936809539795 0.4593951106071472 0 1.0 0 0.0 0 0.0 0 0.0 -0.05411553382873535 -0.07904185354709625 0.21605446934700012 0.9591051936149597 0.28302866220474243 -0.0 0.4617636799812317 0.45516467094421387 0 1.0 0 0.0 0 0.0 0 0.0 -1.0084549188613892 -0.08068249374628067 -0.2839455306529999 -0.8197271823883057 0.5727408528327942 -0.0 0.9829331636428833 0.5172655582427979 0 1.0 0 0.0 0 0.0 0 0.0 -1.0122591257095337 -0.08569684624671936 0.21605446934700012 -0.7750175595283508 0.6319162845611572 -0.0 0.5985607504844666 0.32802635431289673 0 1.0 0 0.0 0 0.0 0 0.0 -1.0084549188613892 -0.08068249374628067 0.21605446934700012 -0.8197271823883057 0.5727408528327942 -0.0 0.6002932786941528 0.33470362424850464 0 1.0 0 0.0 0 0.0 0 0.0 -1.4443737268447876 -0.09845954924821854 -0.2839455306529999 -0.7072664499282837 0.7069307565689087 -0.0 1.0090125799179077 0.5056973695755005 0 1.0 0 0.0 0 0.0 0 0.0 -1.4469252824783325 -0.10088463127613068 0.21605446934700012 -0.670796811580658 0.7416303157806396 -0.0 0.5697541236877441 0.31098443269729614 0 1.0 0 0.0 0 0.0 0 0.0 -1.4443737268447876 -0.09845954924821854 0.21605446934700012 -0.7072664499282837 0.7069307565689087 -0.0 0.5713112354278564 0.3143012523651123 0 1.0 0 0.0 0 0.0 0 0.0 0.07180380821228027 -0.075879767537117 -0.2839455306529999 -0.8986785411834717 0.4385509788990021 -0.0 0.9274437427520752 0.6074543595314026 0 1.0 0 0.0 0 0.0 0 0.0 0.07014012336730957 -0.07906375080347061 0.21605446934700012 -0.8731955885887146 0.48731955885887146 -0.0 0.5390197038650513 0.45376038551330566 0 1.0 0 0.0 0 0.0 0 0.0 0.07180380821228027 -0.075879767537117 0.21605446934700012 -0.8986785411834717 0.4385509788990021 -0.0 0.5398499369621277 0.45758336782455444 0 1.0 0 0.0 0 0.0 0 0.0 1.8269073963165283 -0.18734599649906158 -0.2839455306529999 0.21970275044441223 -0.9755546450614929 -0.0 0.9490134716033936 0.48440754413604736 0 1.0 0 0.0 0 0.0 0 0.0 1.8331973552703857 -0.18581360578536987 0.21605445444583893 0.2539750337600708 -0.9671925902366638 -0.0 0.533993124961853 0.32822293043136597 0 1.0 0 0.0 0 0.0 0 0.0 1.8269073963165283 -0.18734599649906158 0.21605445444583893 0.21970275044441223 -0.9755546450614929 -0.0 0.5298887491226196 0.3255653381347656 0 1.0 0 0.0 0 0.0 0 0.0 1.738616704940796 -0.18614926934242249 -0.2839455306529999 -0.317392498254776 -0.9482711553573608 -0.0 1.00192391872406 0.48768627643585205 0 1.0 0 0.0 0 0.0 0 0.0 1.7423598766326904 -0.18732775747776031 0.21605445444583893 -0.28333383798599243 -0.9590136408805847 -0.0 1.4703819751739502 0.32301509380340576 0 1.0 0 0.0 0 0.0 0 0.0 1.738616704940796 -0.18614926934242249 0.21605445444583893 -0.317392498254776 -0.9482711553573608 -0.0 1.4677753448486328 0.3247298002243042 0 1.0 0 0.0 0 0.0 0 0.0 0.9545972347259521 -0.047003746032714844 -0.2839455306529999 0.9863277077674866 0.16461683809757233 -0.0 0.029464364051818848 0.5239272117614746 0 1.0 0 0.0 0 0.0 0 0.0 0.9536681175231934 -0.040381595492362976 0.21605446934700012 0.9933775067329407 0.11484114825725555 -0.0 0.43869754672050476 0.37439829111099243 0 1.0 0 0.0 0 0.0 0 0.0 0.9545972347259521 -0.047003746032714844 0.21605446934700012 0.9863277077674866 0.16461683809757233 -0.0 0.43886324763298035 0.3663843274116516 0 1.0 0 0.0 0 0.0 0 0.0 -1.1281375885009766 -0.0878373384475708 -0.2839455306529999 0.765251636505127 0.6436964273452759 -0.0 0.05381375551223755 0.4998077154159546 0 1.0 0 0.0 0 0.0 0 0.0 -1.132501244544983 -0.08221854269504547 0.21605446934700012 0.8114871382713318 0.5843378901481628 -0.0 0.5139024257659912 0.3127002716064453 0 1.0 0 0.0 0 0.0 0 0.0 -1.1281375885009766 -0.0878373384475708 0.21605446934700012 0.765251636505127 0.6436964273452759 -0.0 0.5171929597854614 0.30614006519317627 0 1.0 0 0.0 0 0.0 0 0.0 -1.547265887260437 -0.10276243090629578 -0.2839455306529999 0.7799615263938904 0.6258125305175781 -0.0 0.07024794816970825 0.49246126413345337 0 1.0 0 0.0 0 0.0 0 0.0 -1.5492993593215942 -0.10005762428045273 0.21605446934700012 0.8185674548149109 0.574388861656189 -0.0 0.4952918291091919 0.30565404891967773 0 1.0 0 0.0 0 0.0 0 0.0 -1.547265887260437 -0.10276243090629578 0.21605446934700012 0.7799615263938904 0.6258125305175781 -0.0 0.49670082330703735 0.30241620540618896 0 1.0 0 0.0 0 0.0 0 0.0 -0.053148746490478516 -0.08193881809711456 -0.2839455306529999 0.940336287021637 0.3401898145675659 -0.0 0.009056895971298218 0.6091814041137695 0 1.0 0 0.0 0 0.0 0 0.0 -0.05411553382873535 -0.07904185354709625 0.21605446934700012 0.9591051936149597 0.28302866220474243 -0.0 0.4617636799812317 0.45516467094421387 0 1.0 0 0.0 0 0.0 0 0.0 -0.053148746490478516 -0.08193881809711456 0.21605446934700012 0.940336287021637 0.3401898145675659 -0.0 0.4622611999511719 0.45150309801101685 0 1.0 0 0.0 0 0.0 0 0.0 1.7423598766326904 -0.18732775747776031 -0.2839455306529999 -0.28333383798599243 -0.9590136408805847 -0.0 0.9996620416641235 0.48620885610580444 0 1.0 0 0.0 0 0.0 0 0.0 1.7461764812469482 -0.18838219344615936 0.21605445444583893 -0.24951933324337006 -0.9683523178100586 -0.0 1.473060965538025 0.32147711515426636 0 1.0 0 0.0 0 0.0 0 0.0 1.7423598766326904 -0.18732775747776031 0.21605445444583893 -0.28333383798599243 -0.9590136408805847 -0.0 1.4703819751739502 0.32301509380340576 0 1.0 0 0.0 0 0.0 0 0.0 -1.0122591257095337 -0.08569684624671936 -0.2839455306529999 -0.7750175595283508 0.6319162845611572 -0.0 0.9851247668266296 0.5114044547080994 0 1.0 0 0.0 0 0.0 0 0.0 -1.0162993669509888 -0.09031227976083755 0.21605446934700012 -0.7314981818199158 0.6818140149116516 -0.0 0.5965896844863892 0.32174062728881836 0 1.0 0 0.0 0 0.0 0 0.0 -1.0122591257095337 -0.08569684624671936 0.21605446934700012 -0.7750175595283508 0.6319162845611572 -0.0 0.5985607504844666 0.32802635431289673 0 1.0 0 0.0 0 0.0 0 0.0 0.9558279514312744 -0.053355902433395386 -0.2839455306529999 0.9760735034942627 0.21732230484485626 -0.0 0.028569430112838745 0.5164120197296143 0 1.0 0 0.0 0 0.0 0 0.0 0.9545972347259521 -0.047003746032714844 0.21605446934700012 0.9863277077674866 0.16461683809757233 -0.0 0.43886324763298035 0.3663843274116516 0 1.0 0 0.0 0 0.0 0 0.0 0.9558279514312744 -0.053355902433395386 0.21605446934700012 0.9760735034942627 0.21732230484485626 -0.0 0.439240425825119 0.35869020223617554 0 1.0 0 0.0 0 0.0 0 0.0 -1.4469252824783325 -0.10088463127613068 -0.2839455306529999 -0.670796811580658 0.7416303157806396 -0.0 1.0104960203170776 0.5027124881744385 0 1.0 0 0.0 0 0.0 0 0.0 -1.4496471881866455 -0.10322701185941696 0.21605446934700012 -0.634144127368927 0.773186445236206 -0.0 0.5680505633354187 0.30774790048599243 0 1.0 0 0.0 0 0.0 0 0.0 -1.4469252824783325 -0.10088463127613068 0.21605446934700012 -0.670796811580658 0.7416303157806396 -0.0 0.5697541236877441 0.31098443269729614 0 1.0 0 0.0 0 0.0 0 0.0 0.07014012336730957 -0.07906375080347061 -0.2839455306529999 -0.8731955885887146 0.48731955885887146 -0.0 0.9286445379257202 0.603966474533081 0 1.0 0 0.0 0 0.0 0 0.0 0.06830120086669922 -0.08215530216693878 0.21605446934700012 -0.8451185822486877 0.5345317125320435 -0.0 0.5380769968032837 0.45001834630966187 0 1.0 0 0.0 0 0.0 0 0.0 0.07014012336730957 -0.07906375080347061 0.21605446934700012 -0.8731955885887146 0.48731955885887146 -0.0 0.5390197038650513 0.45376038551330566 0 1.0 0 0.0 0 0.0 0 0.0 0.8559255599975586 -0.04940573871135712 -0.2839455306529999 -0.9843134880065918 -0.17636646330356598 -0.0 0.07996010780334473 0.5204365253448486 0 1.0 0 0.0 0 0.0 0 0.0 0.8582241535186768 -0.06064333766698837 0.21605446934700012 -0.9742423892021179 -0.22537919878959656 -0.0 0.3852550685405731 0.37335896492004395 0 1.0 0 0.0 0 0.0 0 0.0 0.8559255599975586 -0.04940573871135712 0.21605446934700012 -0.9843134880065918 -0.17636646330356598 -0.0 0.38528379797935486 0.38527578115463257 0 1.0 0 0.0 0 0.0 0 0.0 -0.15648984909057617 -0.07983966916799545 -0.2839455306529999 -0.9951170086860657 -0.09848322719335556 -0.0 0.0701218843460083 0.6009762287139893 0 1.0 0 0.0 0 0.0 0 0.0 -0.15565800666809082 -0.08717329800128937 -0.2839455306529999 -0.9917600154876709 -0.1280556619167328 -0.0 0.06925424933433533 0.593031644821167 0 1.0 0 0.0 0 0.0 0 0.0 -0.15565800666809082 -0.08717329800128937 0.21605446934700012 -0.9917600154876709 -0.1280556619167328 -0.0 0.40391385555267334 0.45400524139404297 0 1.0 0 0.0 0 0.0 0 0.0 1.8204905986785889 -0.18867407739162445 -0.2839455306529999 0.18597979843616486 -0.982543408870697 -0.0 0.9527758359909058 0.482984721660614 0 1.0 0 0.0 0 0.0 0 0.0 1.8269073963165283 -0.18734599649906158 -0.2839455306529999 0.21970275044441223 -0.9755546450614929 -0.0 0.9490134716033936 0.48440754413604736 0 1.0 0 0.0 0 0.0 0 0.0 1.8269073963165283 -0.18734599649906158 0.21605445444583893 0.21970275044441223 -0.9755546450614929 -0.0 0.5298887491226196 0.3255653381347656 0 1.0 0 0.0 0 0.0 0 0.0 -1.1235111951828003 -0.09292101114988327 -0.2839455306529999 0.7109591960906982 0.7032074928283691 -0.0 0.05074578523635864 0.49437379837036133 0 1.0 0 0.0 0 0.0 0 0.0 -1.1281375885009766 -0.0878373384475708 -0.2839455306529999 0.765251636505127 0.6436964273452759 -0.0 0.05381375551223755 0.4998077154159546 0 1.0 0 0.0 0 0.0 0 0.0 -1.1281375885009766 -0.0878373384475708 0.21605446934700012 0.765251636505127 0.6436964273452759 -0.0 0.5171929597854614 0.30614006519317627 0 1.0 0 0.0 0 0.0 0 0.0 -1.5450183153152466 -0.10538940131664276 -0.2839455306529999 0.7399212718009949 0.6726584434509277 -0.0 0.06875726580619812 0.48970818519592285 0 1.0 0 0.0 0 0.0 0 0.0 -1.547265887260437 -0.10276243090629578 -0.2839455306529999 0.7799615263938904 0.6258125305175781 -0.0 0.07024794816970825 0.49246126413345337 0 1.0 0 0.0 0 0.0 0 0.0 -1.547265887260437 -0.10276243090629578 0.21605446934700012 0.7799615263938904 0.6258125305175781 -0.0 0.49670082330703735 0.30241620540618896 0 1.0 0 0.0 0 0.0 0 0.0 1.7461764812469482 -0.18838219344615936 -0.2839455306529999 -0.24948881566524506 -0.9683523178100586 -0.0 0.9973554611206055 0.48487597703933716 0 1.0 0 0.0 0 0.0 0 0.0 1.750065565109253 -0.18931257724761963 -0.2839455306529999 -0.21604052186012268 -0.9763786792755127 -0.0 0.9950048923492432 0.4836880564689636 0 1.0 0 0.0 0 0.0 0 0.0 1.750065565109253 -0.18931257724761963 0.21605445444583893 -0.21604052186012268 -0.9763786792755127 -0.0 1.4758096933364868 0.32011890411376953 0 1.0 0 0.0 0 0.0 0 0.0 -1.0162993669509888 -0.09031227976083755 -0.2839455306529999 -0.7314981818199158 0.6818140149116516 -0.0 0.9874353408813477 0.5059763193130493 0 1.0 0 0.0 0 0.0 0 0.0 -1.0204806327819824 -0.09452638030052185 -0.2839455306529999 -0.6860560774803162 0.7275307178497314 -0.0 0.989815354347229 0.5009863376617432 0 1.0 0 0.0 0 0.0 0 0.0 -1.0204806327819824 -0.09452638030052185 0.21605446934700012 -0.6860560774803162 0.7275307178497314 -0.0 0.5944331288337708 0.3158789873123169 0 1.0 0 0.0 0 0.0 0 0.0 0.9573602676391602 -0.0594380721449852 -0.2839455306529999 0.9620655179023743 0.27271339297294617 -0.0 0.027515262365341187 0.5092605352401733 0 1.0 0 0.0 0 0.0 0 0.0 0.9558279514312744 -0.053355902433395386 -0.2839455306529999 0.9760735034942627 0.21732230484485626 -0.0 0.028569430112838745 0.5164120197296143 0 1.0 0 0.0 0 0.0 0 0.0 0.9558279514312744 -0.053355902433395386 0.21605446934700012 0.9760735034942627 0.21732230484485626 -0.0 0.439240425825119 0.35869020223617554 0 1.0 0 0.0 0 0.0 0 0.0 -1.4496471881866455 -0.10322701185941696 -0.2839455306529999 -0.634144127368927 0.773186445236206 -0.0 1.0120773315429688 0.49981552362442017 0 1.0 0 0.0 0 0.0 0 0.0 -1.452539324760437 -0.10548669099807739 -0.2839455306529999 -0.5924558043479919 0.8055665493011475 -0.0 1.0137566328048706 0.49700599908828735 0 1.0 0 0.0 0 0.0 0 0.0 -1.452539324760437 -0.10548669099807739 0.21605446934700012 -0.5924558043479919 0.8055665493011475 -0.0 0.5661982893943787 0.3045951724052429 0 1.0 0 0.0 0 0.0 0 0.0 -0.052057743072509766 -0.08473362028598785 -0.2839455306529999 0.921811580657959 0.3875850737094879 -0.0 0.00831332802772522 0.6057209968566895 0 1.0 0 0.0 0 0.0 0 0.0 -0.053148746490478516 -0.08193881809711456 -0.2839455306529999 0.940336287021637 0.3401898145675659 -0.0 0.009056895971298218 0.6091814041137695 0 1.0 0 0.0 0 0.0 0 0.0 -0.053148746490478516 -0.08193881809711456 0.21605446934700012 0.940336287021637 0.3401898145675659 -0.0 0.4622611999511719 0.45150309801101685 0 1.0 0 0.0 0 0.0 0 0.0 -1.2380362749099731 -0.09055066853761673 -0.2839455306529999 -0.9320352673530579 -0.36234626173973083 -0.0 0.11300912499427795 0.48906201124191284 0 1.0 0 0.0 0 0.0 0 0.0 -1.2332748174667358 -0.10171164572238922 -0.2839455306529999 -0.9059419631958008 -0.42335277795791626 -0.0 0.1095895767211914 0.47815340757369995 0 1.0 0 0.0 0 0.0 0 0.0 -1.2332748174667358 -0.10171164572238922 0.21605446934700012 -0.9059419631958008 -0.42335277795791626 -0.0 0.4478146731853485 0.3064257502555847 0 1.0 0 0.0 0 0.0 0 0.0 0.9591941833496094 -0.06525024771690369 -0.2839455306529999 0.9438154101371765 0.33039337396621704 -0.0 0.026302307844161987 0.5024663209915161 0 1.0 0 0.0 0 0.0 0 0.0 0.9573602676391602 -0.0594380721449852 -0.2839455306529999 0.9620655179023743 0.27271339297294617 -0.0 0.027515262365341187 0.5092605352401733 0 1.0 0 0.0 0 0.0 0 0.0 0.9573602676391602 -0.0594380721449852 0.21605446934700012 0.9620655179023743 0.27271339297294617 -0.0 0.43983423709869385 0.3513116240501404 0 1.0 0 0.0 0 0.0 0 0.0 0.06830120086669922 -0.08215530216693878 -0.2839455306529999 -0.8451185822486877 0.5345317125320435 -0.0 0.9299417734146118 0.6005876064300537 0 1.0 0 0.0 0 0.0 0 0.0 0.06628727912902832 -0.08515442907810211 -0.2839455306529999 -0.8147831559181213 0.5797296166419983 -0.0 0.9313363432884216 0.5973168015480042 0 1.0 0 0.0 0 0.0 0 0.0 0.06628727912902832 -0.08515442907810211 0.21605446934700012 -0.8147831559181213 0.5797296166419983 -0.0 0.5370199084281921 0.4463580846786499 0 1.0 0 0.0 0 0.0 0 0.0 1.8139474391937256 -0.18979783356189728 -0.2839455306529999 0.15292824804782867 -0.9882198572158813 -0.0 0.9566332101821899 0.48179370164871216 0 1.0 0 0.0 0 0.0 0 0.0 1.8204905986785889 -0.18867407739162445 -0.2839455306529999 0.18597979843616486 -0.982543408870697 -0.0 0.9527758359909058 0.482984721660614 0 1.0 0 0.0 0 0.0 0 0.0 1.8204905986785889 -0.18867407739162445 0.21605445444583893 0.18597979843616486 -0.982543408870697 -0.0 0.5256187319755554 0.3231980800628662 0 1.0 0 0.0 0 0.0 0 0.0 0.8582241535186768 -0.06064333766698837 -0.2839455306529999 -0.9742423892021179 -0.22537919878959656 -0.0 0.07824346423149109 0.5090236663818359 0 1.0 0 0.0 0 0.0 0 0.0 0.8610334396362305 -0.07151120901107788 -0.2839455306529999 -0.9611499309539795 -0.2759788930416107 -0.0 0.07633981108665466 0.4980389475822449 0 1.0 0 0.0 0 0.0 0 0.0 0.8610334396362305 -0.07151120901107788 0.21605446934700012 -0.9611499309539795 -0.2759788930416107 -0.0 0.3854953348636627 0.3617415428161621 0 1.0 0 0.0 0 0.0 0 0.0 -1.3279880285263062 -0.1101532131433487 -0.2839455306529999 0.9967039823532104 0.08105716109275818 -0.0 0.9483141899108887 0.5016369223594666 0 1.0 0 0.0 0 0.0 0 0.0 -1.328415036201477 -0.10430455207824707 -0.2839455306529999 0.9978331923484802 0.06543168425559998 -0.0 0.9482048749923706 0.5073869228363037 0 1.0 0 0.0 0 0.0 0 0.0 -1.328415036201477 -0.10430455207824707 0.21605446934700012 0.9978331923484802 0.06543168425559998 -0.0 0.6398884057998657 0.34505248069763184 0 1.0 0 0.0 0 0.0 0 0.0 1.750065565109253 -0.18931257724761963 -0.2839455306529999 -0.21604052186012268 -0.9763786792755127 -0.0 0.9950048923492432 0.4836880564689636 0 1.0 0 0.0 0 0.0 0 0.0 1.754028081893921 -0.1901189088821411 -0.2839455306529999 -0.1830805391073227 -0.983092725276947 -0.0 0.9926097393035889 0.48264533281326294 0 1.0 0 0.0 0 0.0 0 0.0 1.754028081893921 -0.1901189088821411 0.21605443954467773 -0.1830805391073227 -0.983092725276947 -0.0 1.4786269664764404 0.31894344091415405 0 1.0 0 0.0 0 0.0 0 0.0 -1.6543234586715698 -0.10515831410884857 -0.2839455306529999 -0.982329785823822 -0.18707846105098724 -0.0 0.12408101558685303 0.4837164282798767 0 1.0 0 0.0 0 0.0 0 0.0 -1.6527143716812134 -0.11229734867811203 -0.2839455306529999 -0.9673146605491638 -0.2534867525100708 -0.0 0.12260499596595764 0.47699278593063354 0 1.0 0 0.0 0 0.0 0 0.0 -1.6527143716812134 -0.11229734867811203 0.21605446934700012 -0.9673146605491638 -0.2534867525100708 -0.0 0.43276700377464294 0.3138952851295471 0 1.0 0 0.0 0 0.0 0 0.0 -1.118622064590454 -0.09746956080198288 -0.2839455306529999 0.6484572887420654 0.7612231969833374 -0.0 0.04757365584373474 0.48960989713668823 0 1.0 0 0.0 0 0.0 0 0.0 -1.1235111951828003 -0.09292101114988327 -0.2839455306529999 0.7109591960906982 0.7032074928283691 -0.0 0.05074578523635864 0.49437379837036133 0 1.0 0 0.0 0 0.0 0 0.0 -1.1235111951828003 -0.09292101114988327 0.21605446934700012 0.7109591960906982 0.7032074928283691 -0.0 0.5207288265228271 0.3003121018409729 0 1.0 0 0.0 0 0.0 0 0.0 -0.0508427619934082 -0.08742626756429672 -0.2839455306529999 0.9002349972724915 0.4353770613670349 -0.0 0.00749245285987854 0.602379560470581 0 1.0 0 0.0 0 0.0 0 0.0 -0.052057743072509766 -0.08473362028598785 -0.2839455306529999 0.921811580657959 0.3875850737094879 -0.0 0.00831332802772522 0.6057209968566895 0 1.0 0 0.0 0 0.0 0 0.0 -0.052057743072509766 -0.08473362028598785 0.21605446934700012 0.921811580657959 0.3875850737094879 -0.0 0.4628440737724304 0.44795089960098267 0 1.0 0 0.0 0 0.0 0 0.0 -1.0204806327819824 -0.09452638030052185 -0.2839455306529999 -0.6860560774803162 0.7275307178497314 -0.0 0.989815354347229 0.5009863376617432 0 1.0 0 0.0 0 0.0 0 0.0 -1.0248029232025146 -0.09833913296461105 -0.2839455306529999 -0.634754478931427 0.772667646408081 -0.0 0.9922680258750916 0.4964311718940735 0 1.0 0 0.0 0 0.0 0 0.0 -1.0248029232025146 -0.09833913296461105 0.21605446934700012 -0.634754478931427 0.772667646408081 -0.0 0.5920868515968323 0.31044334173202515 0 1.0 0 0.0 0 0.0 0 0.0 0.9613299369812012 -0.07079242914915085 -0.2839455306529999 0.9208654761314392 0.3898129165172577 -0.0 0.02493041753768921 0.4960223436355591 0 1.0 0 0.0 0 0.0 0 0.0 0.9591941833496094 -0.06525024771690369 -0.2839455306529999 0.9438154101371765 0.33039337396621704 -0.0 0.026302307844161987 0.5024663209915161 0 1.0 0 0.0 0 0.0 0 0.0 0.9591941833496094 -0.06525024771690369 0.21605446934700012 0.9438154101371765 0.33039337396621704 -0.0 0.4406500458717346 0.3442443609237671 0 1.0 0 0.0 0 0.0 0 0.0 0.06628727912902832 -0.08515442907810211 -0.2839455306529999 -0.8147831559181213 0.5797296166419983 -0.0 0.9313363432884216 0.5973168015480042 0 1.0 0 0.0 0 0.0 0 0.0 0.06409811973571777 -0.08806112408638 -0.2839455306529999 -0.7824946045875549 0.6226081252098083 -0.0 0.9328294992446899 0.5941532850265503 0 1.0 0 0.0 0 0.0 0 0.0 0.06409811973571777 -0.08806112408638 0.21605446934700012 -0.7824946045875549 0.6226081252098083 -0.0 0.5358461737632751 0.44278061389923096 0 1.0 0 0.0 0 0.0 0 0.0 1.8072779178619385 -0.19071727991104126 -0.2839455306529999 0.12060914933681488 -0.9926755428314209 -0.0 0.9605854749679565 0.4808386564254761 0 1.0 0 0.0 0 0.0 0 0.0 1.8139474391937256 -0.18979783356189728 -0.2839455306529999 0.15292824804782867 -0.9882198572158813 -0.0 0.9566332101821899 0.48179370164871216 0 1.0 0 0.0 0 0.0 0 0.0 1.8139474391937256 -0.18979783356189728 0.21605445444583893 0.15292824804782867 -0.9882198572158813 -0.0 0.5211864709854126 0.3211352229118347 0 1.0 0 0.0 0 0.0 0 0.0 1.0959722995758057 -0.06555674225091934 -0.2839455306529999 -0.9562364816665649 0.2925504446029663 -0.0 0.9439747929573059 0.4986279010772705 0 1.0 0 0.0 0 0.0 0 0.0 1.094576120376587 -0.07011988759040833 -0.2839455306529999 -0.9508346915245056 0.3096713125705719 -0.0 0.9450085163116455 0.49344611167907715 0 1.0 0 0.0 0 0.0 0 0.0 1.094576120376587 -0.07011988759040833 0.21605446934700012 -0.9508346915245056 0.3096713125705719 -0.0 0.5337579846382141 0.33563095331192017 0 1.0 0 0.0 0 0.0 0 0.0 -1.5425567626953125 -0.10793852806091309 -0.2839455306529999 0.6976531147956848 0.7163915038108826 -0.0 0.06715226173400879 0.48706352710723877 0 1.0 0 0.0 0 0.0 0 0.0 -1.5450183153152466 -0.10538940131664276 -0.2839455306529999 0.7399212718009949 0.6726584434509277 -0.0 0.06875726580619812 0.48970818519592285 0 1.0 0 0.0 0 0.0 0 0.0 -1.5450183153152466 -0.10538940131664276 0.21605446934700012 0.7399212718009949 0.6726584434509277 -0.0 0.4982786476612091 0.2992667555809021 0 1.0 0 0.0 0 0.0 0 0.0 1.754028081893921 -0.1901189088821411 0.21605443954467773 -0.1830805391073227 -0.983092725276947 -0.0 1.4786269664764404 0.31894344091415405 0 1.0 0 0.0 0 0.0 0 0.0 1.754028081893921 -0.1901189088821411 -0.2839455306529999 -0.1830805391073227 -0.983092725276947 -0.0 0.9926097393035889 0.48264533281326294 0 1.0 0 0.0 0 0.0 0 0.0 1.7580630779266357 -0.190801203250885 -0.2839455306529999 -0.1507004052400589 -0.9885555505752563 -0.0 0.9901707172393799 0.48174822330474854 0 1.0 0 0.0 0 0.0 0 0.0 -1.452539324760437 -0.10548669099807739 -0.2839455306529999 -0.5924558043479919 0.8055665493011475 -0.0 1.0137566328048706 0.49700599908828735 0 1.0 0 0.0 0 0.0 0 0.0 -1.4565843343734741 -0.10828392952680588 -0.2839455306529999 -0.5498520135879517 0.8352305889129639 -0.0 1.016105055809021 0.493499755859375 0 1.0 0 0.0 0 0.0 0 0.0 -1.4565843343734741 -0.10828392952680588 0.21605446934700012 -0.5498520135879517 0.8352305889129639 -0.0 0.5635403990745544 0.3006412386894226 0 1.0 0 0.0 0 0.0 0 0.0 -0.15565800666809082 -0.08717329800128937 -0.2839455306529999 -0.9917600154876709 -0.1280556619167328 -0.0 0.06925424933433533 0.593031644821167 0 1.0 0 0.0 0 0.0 0 0.0 -0.15464115142822266 -0.09419071674346924 -0.2839455306529999 -0.9870906472206116 -0.15994751453399658 -0.0 0.06832051277160645 0.5854088664054871 0 1.0 0 0.0 0 0.0 0 0.0 -0.15464115142822266 -0.09419071674346924 0.21605446934700012 -0.9870906472206116 -0.15994751453399658 -0.0 0.40385371446609497 0.4461749792098999 0 1.0 0 0.0 0 0.0 0 0.0 -1.1134703159332275 -0.10148298740386963 -0.2839455306529999 0.5781121253967285 0.8159428834915161 -0.0 0.044294536113739014 0.48550617694854736 0 1.0 0 0.0 0 0.0 0 0.0 -1.118622064590454 -0.09746956080198288 -0.2839455306529999 0.6484572887420654 0.7612231969833374 -0.0 0.04757365584373474 0.48960989713668823 0 1.0 0 0.0 0 0.0 0 0.0 -1.118622064590454 -0.09746956080198288 0.21605446934700012 0.6484572887420654 0.7612231969833374 -0.0 0.5245062708854675 0.2952185273170471 0 1.0 0 0.0 0 0.0 0 0.0 1.1940457820892334 -0.08201909065246582 -0.2839455306529999 0.16553239524364471 0.9861751198768616 -0.0 0.895880401134491 0.4805034399032593 0 1.0 0 0.0 0 0.0 0 0.0 1.0959722995758057 -0.06555674225091934 -0.2839455306529999 0.16553239524364471 0.9861751198768616 -0.0 0.9439747929573059 0.4986279010772705 0 1.0 0 0.0 0 0.0 0 0.0 1.0959722995758057 -0.06555674225091934 0.21605446934700012 0.16553239524364471 0.9861751198768616 -0.0 0.5344954133033752 0.34105902910232544 0 1.0 0 0.0 0 0.0 0 0.0 -1.0248029232025146 -0.09833913296461105 -0.2839455306529999 -0.634754478931427 0.772667646408081 -0.0 0.9922680258750916 0.4964311718940735 0 1.0 0 0.0 0 0.0 0 0.0 -1.029266357421875 -0.10175054520368576 -0.2839455306529999 -0.5775933265686035 0.8163090944290161 -0.0 0.9947965145111084 0.4923076033592224 0 1.0 0 0.0 0 0.0 0 0.0 -1.029266357421875 -0.10175054520368576 0.21605446934700012 -0.5775933265686035 0.8163090944290161 -0.0 0.5895469188690186 0.30543601512908936 0 1.0 0 0.0 0 0.0 0 0.0 1.094576120376587 -0.07011988759040833 -0.2839455306529999 -0.9508346915245056 0.3096713125705719 -0.0 0.9450085163116455 0.49344611167907715 0 1.0 0 0.0 0 0.0 0 0.0 1.0930728912353516 -0.07446898519992828 -0.2839455306529999 -0.938657820224762 0.34482863545417786 -0.0 0.946087121963501 0.488539457321167 0 1.0 0 0.0 0 0.0 0 0.0 1.0930728912353516 -0.07446898519992828 0.21605446934700012 -0.938657820224762 0.34482863545417786 -0.0 0.5329328179359436 0.33046531677246094 0 1.0 0 0.0 0 0.0 0 0.0 1.8004820346832275 -0.1914324015378952 -0.2839455306529999 0.08911404758691788 -0.9960020780563354 -0.0 0.9646320343017578 0.4801236391067505 0 1.0 0 0.0 0 0.0 0 0.0 1.8072779178619385 -0.19071727991104126 -0.2839455306529999 0.12060914933681488 -0.9926755428314209 -0.0 0.9605854749679565 0.4808386564254761 0 1.0 0 0.0 0 0.0 0 0.0 1.8072779178619385 -0.19071727991104126 0.21605445444583893 0.12060914933681488 -0.9926755428314209 -0.0 0.5165964961051941 0.31939154863357544 0 1.0 0 0.0 0 0.0 0 0.0 -1.539929747581482 -0.11034414917230606 -0.2839455306529999 0.6505020260810852 0.7594836354255676 -0.0 0.06546497344970703 0.4845954179763794 0 1.0 0 0.0 0 0.0 0 0.0 -1.5425567626953125 -0.10793852806091309 -0.2839455306529999 0.6976531147956848 0.7163915038108826 -0.0 0.06715226173400879 0.48706352710723877 0 1.0 0 0.0 0 0.0 0 0.0 -1.5425567626953125 -0.10793852806091309 0.21605446934700012 0.6976531147956848 0.7163915038108826 -0.0 0.5000284910202026 0.29620879888534546 0 1.0 0 0.0 0 0.0 0 0.0 -0.04950380325317383 -0.09001675248146057 -0.2839455306529999 0.8754844665527344 0.4831995666027069 -0.0 0.006594359874725342 0.5991576910018921 0 1.0 0 0.0 0 0.0 0 0.0 -0.0508427619934082 -0.08742626756429672 -0.2839455306529999 0.9002349972724915 0.4353770613670349 -0.0 0.00749245285987854 0.602379560470581 0 1.0 0 0.0 0 0.0 0 0.0 -0.0508427619934082 -0.08742626756429672 0.21605446934700012 0.9002349972724915 0.4353770613670349 -0.0 0.46351292729377747 0.44450944662094116 0 1.0 0 0.0 0 0.0 0 0.0 1.7580630779266357 -0.190801203250885 -0.2839455306529999 -0.1507004052400589 -0.9885555505752563 -0.0 0.9901707172393799 0.48174822330474854 0 1.0 0 0.0 0 0.0 0 0.0 1.7621715068817139 -0.19135943055152893 -0.2839455306529999 -0.1189611479640007 -0.9928891658782959 -0.0 0.9876875281333923 0.4809969663619995 0 1.0 0 0.0 0 0.0 0 0.0 1.7621715068817139 -0.19135943055152893 0.21605445444583893 -0.1189611479640007 -0.9928891658782959 -0.0 1.4844553470611572 0.31715285778045654 0 1.0 0 0.0 0 0.0 0 0.0 -1.4565843343734741 -0.10828392952680588 -0.2839455306529999 -0.5498520135879517 0.8352305889129639 -0.0 1.016105055809021 0.493499755859375 0 1.0 0 0.0 0 0.0 0 0.0 -1.4606634378433228 -0.11083792895078659 -0.2839455306529999 -0.5103610157966614 0.8599200248718262 -0.0 1.018471598625183 0.4902775287628174 0 1.0 0 0.0 0 0.0 0 0.0 -1.4606634378433228 -0.11083792895078659 0.21605446934700012 -0.5103610157966614 0.8599200248718262 -0.0 0.5607984662055969 0.2970088720321655 0 1.0 0 0.0 0 0.0 0 0.0 0.06409811973571777 -0.08806112408638 -0.2839455306529999 -0.7824946045875549 0.6226081252098083 -0.0 0.9328294992446899 0.5941532850265503 0 1.0 0 0.0 0 0.0 0 0.0 0.06173396110534668 -0.09087538719177246 -0.2839455306529999 -0.748680055141449 0.6629230380058289 -0.0 0.9344223737716675 0.5910961627960205 0 1.0 0 0.0 0 0.0 0 0.0 0.06173396110534668 -0.09087538719177246 0.21605446934700012 -0.748680055141449 0.6629230380058289 -0.0 0.5345537662506104 0.43928706645965576 0 1.0 0 0.0 0 0.0 0 0.0 0.9637672901153564 -0.07606461644172668 -0.2839455306529999 0.8929105401039124 0.4501785337924957 -0.0 0.023399382829666138 0.4899216294288635 0 1.0 0 0.0 0 0.0 0 0.0 0.9613299369812012 -0.07079242914915085 -0.2839455306529999 0.9208654761314392 0.3898129165172577 -0.0 0.02493041753768921 0.4960223436355591 0 1.0 0 0.0 0 0.0 0 0.0 0.9613299369812012 -0.07079242914915085 0.21605446934700012 0.9208654761314392 0.3898129165172577 -0.0 0.44169366359710693 0.33748435974121094 0 1.0 0 0.0 0 0.0 0 0.0 1.7621715068817139 -0.19135943055152893 -0.2839455306529999 -0.1189611479640007 -0.9928891658782959 -0.0 0.9876875281333923 0.4809969663619995 0 1.0 0 0.0 0 0.0 0 0.0 1.7663524150848389 -0.19179360568523407 -0.2839455306529999 -0.08798485994338989 -0.9960936307907104 -0.0 0.9851610660552979 0.48039180040359497 0 1.0 0 0.0 0 0.0 0 0.0 1.7663524150848389 -0.19179360568523407 0.21605445444583893 -0.08798485994338989 -0.9960936307907104 -0.0 1.4874608516693115 0.3165437579154968 0 1.0 0 0.0 0 0.0 0 0.0 0.8610334396362305 -0.07151120901107788 -0.2839455306529999 -0.9611499309539795 -0.2759788930416107 -0.0 0.07633981108665466 0.4980389475822449 0 1.0 0 0.0 0 0.0 0 0.0 0.8643536567687988 -0.08200936019420624 -0.2839455306529999 -0.9447309970855713 -0.32776880264282227 -0.0 0.07424464821815491 0.48747164011001587 0 1.0 0 0.0 0 0.0 0 0.0 0.8643536567687988 -0.08200936019420624 0.21605446934700012 -0.9447309970855713 -0.32776880264282227 -0.0 0.3860163688659668 0.35041290521621704 0 1.0 0 0.0 0 0.0 0 0.0 -1.108055830001831 -0.10496129095554352 -0.2839455306529999 0.5009002685546875 0.8654744029045105 -0.0 0.04090547561645508 0.4820537567138672 0 1.0 0 0.0 0 0.0 0 0.0 -1.1134703159332275 -0.10148298740386963 -0.2839455306529999 0.5781121253967285 0.8159428834915161 -0.0 0.044294536113739014 0.48550617694854736 0 1.0 0 0.0 0 0.0 0 0.0 -1.1134703159332275 -0.10148298740386963 0.21605446934700012 0.5781121253967285 0.8159428834915161 -0.0 0.5285190939903259 0.2908620238304138 0 1.0 0 0.0 0 0.0 0 0.0 -1.3274954557418823 -0.11564431339502335 -0.2839455306529999 0.9950864911079407 0.09869685769081116 -0.0 0.9483753442764282 0.49630945920944214 0 1.0 0 0.0 0 0.0 0 0.0 -1.3279880285263062 -0.1101532131433487 -0.2839455306529999 0.9967039823532104 0.08105716109275818 -0.0 0.9483141899108887 0.5016369223594666 0 1.0 0 0.0 0 0.0 0 0.0 -1.3279880285263062 -0.1101532131433487 0.21605446934700012 0.9967039823532104 0.08105716109275818 -0.0 0.64090496301651 0.3395833373069763 0 1.0 0 0.0 0 0.0 0 0.0 -0.04804062843322754 -0.0925050750374794 -0.2839455306529999 0.8476210832595825 0.5305337905883789 -0.0 0.005618959665298462 0.5960554480552673 0 1.0 0 0.0 0 0.0 0 0.0 -0.04950380325317383 -0.09001675248146057 -0.2839455306529999 0.8754844665527344 0.4831995666027069 -0.0 0.006594359874725342 0.5991576910018921 0 1.0 0 0.0 0 0.0 0 0.0 -0.04950380325317383 -0.09001675248146057 0.21605446934700012 0.8754844665527344 0.4831995666027069 -0.0 0.4642685651779175 0.4411802887916565 0 1.0 0 0.0 0 0.0 0 0.0 -1.2332748174667358 -0.10171164572238922 -0.2839455306529999 -0.9059419631958008 -0.42335277795791626 -0.0 0.1095895767211914 0.47815340757369995 0 1.0 0 0.0 0 0.0 0 0.0 -1.2278786897659302 -0.11230587214231491 -0.2839455306529999 -0.8745384216308594 -0.4849391281604767 -0.0 0.10593611001968384 0.467909574508667 0 1.0 0 0.0 0 0.0 0 0.0 -1.2278786897659302 -0.11230587214231491 0.21605446934700012 -0.8745384216308594 -0.4849391281604767 -0.0 0.4501752555370331 0.29445379972457886 0 1.0 0 0.0 0 0.0 0 0.0 1.0930728912353516 -0.07446898519992828 -0.2839455306529999 -0.938657820224762 0.34482863545417786 -0.0 0.946087121963501 0.488539457321167 0 1.0 0 0.0 0 0.0 0 0.0 1.0914626121520996 -0.07860402762889862 -0.2839455306529999 -0.9241004586219788 0.3820917308330536 -0.0 0.9472108483314514 0.48390400409698486 0 1.0 0 0.0 0 0.0 0 0.0 1.0914626121520996 -0.07860402762889862 0.21605446934700012 -0.9241004586219788 0.3820917308330536 -0.0 0.5320184826850891 0.325559139251709 0 1.0 0 0.0 0 0.0 0 0.0 0.06173396110534668 -0.09087538719177246 -0.2839455306529999 -0.748680055141449 0.6629230380058289 -0.0 0.9344223737716675 0.5910961627960205 0 1.0 0 0.0 0 0.0 0 0.0 0.05919456481933594 -0.09359721839427948 -0.2839455306529999 -0.713675320148468 0.7004303336143494 -0.0 0.9361163377761841 0.5881446599960327 0 1.0 0 0.0 0 0.0 0 0.0 0.05919456481933594 -0.09359721839427948 0.21605446934700012 -0.713675320148468 0.7004303336143494 -0.0 0.5331403017044067 0.4358789324760437 0 1.0 0 0.0 0 0.0 0 0.0 1.7935593128204346 -0.1919431984424591 -0.2839455306529999 0.05850398167967796 -0.9982604384422302 -0.0 0.9687719941139221 0.47965240478515625 0 1.0 0 0.0 0 0.0 0 0.0 1.8004820346832275 -0.1914324015378952 -0.2839455306529999 0.08911404758691788 -0.9960020780563354 -0.0 0.9646320343017578 0.4801236391067505 0 1.0 0 0.0 0 0.0 0 0.0 1.8004820346832275 -0.1914324015378952 0.21605445444583893 0.08911404758691788 -0.9960020780563354 -0.0 0.5118548274040222 0.317981481552124 0 1.0 0 0.0 0 0.0 0 0.0 -1.5371860265731812 -0.1125405877828598 -0.2839455306529999 0.5980712175369263 0.8014160394668579 -0.0 0.06372728943824768 0.48237109184265137 0 1.0 0 0.0 0 0.0 0 0.0 -1.539929747581482 -0.11034414917230606 -0.2839455306529999 0.6505020260810852 0.7594836354255676 -0.0 0.06546497344970703 0.4845954179763794 0 1.0 0 0.0 0 0.0 0 0.0 -1.539929747581482 -0.11034414917230606 0.21605446934700012 0.6505020260810852 0.7594836354255676 -0.0 0.5019184947013855 0.2933226227760315 0 1.0 0 0.0 0 0.0 0 0.0 1.7663524150848389 -0.19179360568523407 -0.2839455306529999 -0.08798485994338989 -0.9960936307907104 -0.0 0.9851610660552979 0.48039180040359497 0 1.0 0 0.0 0 0.0 0 0.0 1.7706067562103271 -0.19210374355316162 -0.2839455306529999 -0.05783257633447647 -0.9983214735984802 -0.0 0.9825912714004517 0.47993284463882446 0 1.0 0 0.0 0 0.0 0 0.0 1.7706067562103271 -0.19210374355316162 0.21605445444583893 -0.05783257633447647 -0.9983214735984802 -0.0 0.49052339792251587 0.3161289691925049 0 1.0 0 0.0 0 0.0 0 0.0 -1.029266357421875 -0.10175054520368576 -0.2839455306529999 -0.5775933265686035 0.8163090944290161 -0.0 0.9947965145111084 0.4923076033592224 0 1.0 0 0.0 0 0.0 0 0.0 -1.033870816230774 -0.10476061701774597 -0.2839455306529999 -0.5148167610168457 0.8572649359703064 -0.0 0.9974039793014526 0.4886128902435303 0 1.0 0 0.0 0 0.0 0 0.0 -1.033870816230774 -0.10476061701774597 0.21605446934700012 -0.5148167610168457 0.8572649359703064 -0.0 0.586810290813446 0.30086058378219604 0 1.0 0 0.0 0 0.0 0 0.0 -1.4606634378433228 -0.11083792895078659 -0.2839455306529999 -0.5103610157966614 0.8599200248718262 -0.0 1.018471598625183 0.4902775287628174 0 1.0 0 0.0 0 0.0 0 0.0 -1.4647765159606934 -0.11314868927001953 -0.2839455306529999 -0.4681234061717987 0.8836328983306885 -0.0 1.0208572149276733 0.48733770847320557 0 1.0 0 0.0 0 0.0 0 0.0 -1.4647765159606934 -0.11314868927001953 0.21605446934700012 -0.4681234061717987 0.8836328983306885 -0.0 0.5579749345779419 0.29369932413101196 0 1.0 0 0.0 0 0.0 0 0.0 0.9665062427520752 -0.0810668095946312 -0.2839455306529999 0.8597369194030762 0.5107272267341614 -0.0 0.021708518266677856 0.4841575026512146 0 1.0 0 0.0 0 0.0 0 0.0 0.9637672901153564 -0.07606461644172668 -0.2839455306529999 0.8929105401039124 0.4501785337924957 -0.0 0.023399382829666138 0.4899216294288635 0 1.0 0 0.0 0 0.0 0 0.0 0.9637672901153564 -0.07606461644172668 0.21605446934700012 0.8929105401039124 0.4502090513706207 -0.0 0.442970871925354 0.3310282826423645 0 1.0 0 0.0 0 0.0 0 0.0 -0.04645347595214844 -0.09489124268293381 -0.2839455306529999 0.8167668581008911 0.5769218802452087 -0.0 0.004566401243209839 0.5930731296539307 0 1.0 0 0.0 0 0.0 0 0.0 -0.04804062843322754 -0.0925050750374794 -0.2839455306529999 0.8476210832595825 0.5305337905883789 -0.0 0.005618959665298462 0.5960554480552673 0 1.0 0 0.0 0 0.0 0 0.0 -0.04804062843322754 -0.0925050750374794 0.21605446934700012 0.8476210832595825 0.5305337905883789 -0.0 0.4651119112968445 0.4379647970199585 0 1.0 0 0.0 0 0.0 0 0.0 -1.033870816230774 -0.10476061701774597 -0.2839455306529999 -0.5148167610168457 0.8572649359703064 -0.0 0.9974039793014526 0.4886128902435303 0 1.0 0 0.0 0 0.0 0 0.0 -1.038616418838501 -0.10736934840679169 -0.2839455306529999 -0.44703513383865356 0.8944975137710571 -0.0 1.000093698501587 0.4853445887565613 0 1.0 0 0.0 0 0.0 0 0.0 -1.038616418838501 -0.10736934840679169 0.21605446934700012 -0.44703513383865356 0.8944975137710571 -0.0 0.5838744640350342 0.2967216968536377 0 1.0 0 0.0 0 0.0 0 0.0 1.0914626121520996 -0.07860402762889862 -0.2839455306529999 -0.9241004586219788 0.3820917308330536 -0.0 0.9472108483314514 0.48390400409698486 0 1.0 0 0.0 0 0.0 0 0.0 1.089745283126831 -0.08252502232789993 -0.2839455306529999 -0.9068269729614258 0.4214606285095215 -0.0 0.9483804702758789 0.47953569889068604 0 1.0 0 0.0 0 0.0 0 0.0 1.089745283126831 -0.08252502232789993 0.21605446934700012 -0.9068269729614258 0.4214606285095215 -0.0 0.5310134887695312 0.3209095001220703 0 1.0 0 0.0 0 0.0 0 0.0 -1.6527143716812134 -0.11229734867811203 -0.2839455306529999 -0.9673146605491638 -0.2534867525100708 -0.0 0.12260499596595764 0.47699278593063354 0 1.0 0 0.0 0 0.0 0 0.0 -1.6506456136703491 -0.11920773983001709 -0.2839455306529999 -0.9472029805183411 -0.32053589820861816 -0.0 0.12096211314201355 0.47054606676101685 0 1.0 0 0.0 0 0.0 0 0.0 -1.6506456136703491 -0.11920773983001709 0.21605446934700012 -0.9472029805183411 -0.32053589820861816 -0.0 0.433250367641449 0.3067089319229126 0 1.0 0 0.0 0 0.0 0 0.0 0.05919456481933594 -0.09359721839427948 -0.2839455306529999 -0.713675320148468 0.7004303336143494 -0.0 0.9361163377761841 0.5881446599960327 0 1.0 0 0.0 0 0.0 0 0.0 0.05647993087768555 -0.09622661769390106 -0.2839455306529999 -0.6779381632804871 0.7350993156433105 -0.0 0.9379128217697144 0.5852980613708496 0 1.0 0 0.0 0 0.0 0 0.0 0.05647993087768555 -0.09622661769390106 0.21605446934700012 -0.6779381632804871 0.7350993156433105 -0.0 0.5316035151481628 0.43255800008773804 0 1.0 0 0.0 0 0.0 0 0.0 1.7865102291107178 -0.19224967062473297 -0.2839455306529999 0.028839990496635437 -0.99957275390625 -0.0 0.9730034470558167 0.4794282913208008 0 1.0 0 0.0 0 0.0 0 0.0 1.7935593128204346 -0.1919431984424591 -0.2839455306529999 0.05850398167967796 -0.9982604384422302 -0.0 0.9687719941139221 0.47965240478515625 0 1.0 0 0.0 0 0.0 0 0.0 1.7935593128204346 -0.1919431984424591 0.21605445444583893 0.05850398167967796 -0.9982604384422302 -0.0 0.5069688558578491 0.31691932678222656 0 1.0 0 0.0 0 0.0 0 0.0 1.7706067562103271 -0.19210374355316162 -0.2839455306529999 -0.05783257633447647 -0.9983214735984802 -0.0 0.9825912714004517 0.47993284463882446 0 1.0 0 0.0 0 0.0 0 0.0 1.7749340534210205 -0.1922898143529892 -0.2839455306529999 -0.02850428782403469 -0.99957275390625 -0.0 0.9799787998199463 0.4796203374862671 0 1.0 0 0.0 0 0.0 0 0.0 1.7749340534210205 -0.1922898143529892 0.21605445444583893 -0.02850428782403469 -0.99957275390625 -0.0 0.4936390817165375 0.31591135263442993 0 1.0 0 0.0 0 0.0 0 0.0 -0.15464115142822266 -0.09419071674346924 -0.2839455306529999 -0.9870906472206116 -0.15994751453399658 -0.0 0.06832051277160645 0.5854088664054871 0 1.0 0 0.0 0 0.0 0 0.0 -0.15343952178955078 -0.10089192539453506 -0.2839455306529999 -0.9809259176254272 -0.19437238574028015 -0.0 0.06731992959976196 0.5781137943267822 0 1.0 0 0.0 0 0.0 0 0.0 -0.15343952178955078 -0.10089192539453506 0.21605446934700012 -0.9809259176254272 -0.19437238574028015 -0.0 0.4039095640182495 0.43862825632095337 0 1.0 0 0.0 0 0.0 0 0.0 -1.1023786067962646 -0.10790447145700455 -0.2839455306529999 0.41840875148773193 0.9082308411598206 -0.0 0.03740385174751282 0.4792447090148926 0 1.0 0 0.0 0 0.0 0 0.0 -1.108055830001831 -0.10496129095554352 -0.2839455306529999 0.5009002685546875 0.8654744029045105 -0.0 0.04090547561645508 0.4820537567138672 0 1.0 0 0.0 0 0.0 0 0.0 -1.108055830001831 -0.10496129095554352 0.21605446934700012 0.5009002685546875 0.8654744029045105 -0.0 0.5327584743499756 0.28724706172943115 0 1.0 0 0.0 0 0.0 0 0.0 0.9695467948913574 -0.08579900860786438 -0.2839455306529999 0.8213446736335754 0.5703604221343994 -0.0 0.019856750965118408 0.47872352600097656 0 1.0 0 0.0 0 0.0 0 0.0 0.9665062427520752 -0.0810668095946312 -0.2839455306529999 0.8597369194030762 0.5107272267341614 -0.0 0.021708518266677856 0.4841575026512146 0 1.0 0 0.0 0 0.0 0 0.0 0.9665062427520752 -0.0810668095946312 0.21605446934700012 0.8597369194030762 0.5107272267341614 -0.0 0.44448772072792053 0.3248738646507263 0 1.0 0 0.0 0 0.0 0 0.0 -1.5343255996704102 -0.11452784389257431 -0.2839455306529999 0.5419476628303528 0.8403881788253784 -0.0 0.06193813681602478 0.4803890585899353 0 1.0 0 0.0 0 0.0 0 0.0 -1.5371860265731812 -0.1125405877828598 -0.2839455306529999 0.5980712175369263 0.8014160394668579 -0.0 0.06372728943824768 0.48237109184265137 0 1.0 0 0.0 0 0.0 0 0.0 -1.5371860265731812 -0.1125405877828598 0.21605446934700012 0.5980712175369263 0.8014160394668579 -0.0 0.503914475440979 0.29068702459335327 0 1.0 0 0.0 0 0.0 0 0.0 1.7749340534210205 -0.1922898143529892 -0.2839455306529999 -0.02850428782403469 -0.99957275390625 -0.0 0.9799787998199463 0.4796203374862671 0 1.0 0 0.0 0 0.0 0 0.0 1.779334306716919 -0.19235184788703918 -0.2839455306529999 6.103701889514923e-05 -1.0 -0.0 0.9773244857788086 0.4794541597366333 0 1.0 0 0.0 0 0.0 0 0.0 1.779334306716919 -0.19235184788703918 0.21605445444583893 6.103701889514923e-05 -1.0 -0.0 0.49680399894714355 0.3158932328224182 0 1.0 0 0.0 0 0.0 0 0.0 -1.038616418838501 -0.10736934840679169 -0.2839455306529999 -0.44703513383865356 0.8944975137710571 -0.0 1.000093698501587 0.4853445887565613 0 1.0 0 0.0 0 0.0 0 0.0 -1.0435030460357666 -0.10957673192024231 -0.2839455306529999 -0.3751335144042969 0.9269387125968933 -0.0 1.0028687715530396 0.48250114917755127 0 1.0 0 0.0 0 0.0 0 0.0 -1.0435030460357666 -0.10957673192024231 0.21605446934700012 -0.3751335144042969 0.9269387125968933 -0.0 0.5807379484176636 0.2930253744125366 0 1.0 0 0.0 0 0.0 0 0.0 0.8643536567687988 -0.08200936019420624 -0.2839455306529999 -0.9447309970855713 -0.32776880264282227 -0.0 0.07424464821815491 0.48747164011001587 0 1.0 0 0.0 0 0.0 0 0.0 0.8681845664978027 -0.09213779121637344 -0.2839455306529999 -0.9248634576797485 -0.3802911341190338 -0.0 0.07195284962654114 0.4773102402687073 0 1.0 0 0.0 0 0.0 0 0.0 0.8681845664978027 -0.09213779121637344 0.21605446934700012 -0.9248634576797485 -0.3802911341190338 -0.0 0.3868318498134613 0.33936208486557007 0 1.0 0 0.0 0 0.0 0 0.0 -1.4647765159606934 -0.11314868927001953 -0.2839455306529999 -0.4681234061717987 0.8836328983306885 -0.0 1.0208572149276733 0.48733770847320557 0 1.0 0 0.0 0 0.0 0 0.0 -1.4689236879348755 -0.1152162104845047 -0.2839455306529999 -0.42313912510871887 0.9060335159301758 -0.0 1.023262858390808 0.48467862606048584 0 1.0 0 0.0 0 0.0 0 0.0 -1.4689236879348755 -0.1152162104845047 0.21605446934700012 -0.42313912510871887 0.9060335159301758 -0.0 0.5550726652145386 0.2907138466835022 0 1.0 0 0.0 0 0.0 0 0.0 1.779334306716919 -0.19235184788703918 -0.2839455306529999 6.103701889514923e-05 -1.0 -0.0 0.9773244857788086 0.4794541597366333 0 1.0 0 0.0 0 0.0 0 0.0 1.7865102291107178 -0.19224967062473297 -0.2839455306529999 0.028839990496635437 -0.99957275390625 -0.0 0.9730034470558167 0.4794282913208008 0 1.0 0 0.0 0 0.0 0 0.0 1.7865102291107178 -0.19224967062473297 0.21605445444583893 0.028809472918510437 -0.99957275390625 -0.0 0.5019482970237732 0.31621891260147095 0 1.0 0 0.0 0 0.0 0 0.0 -0.04474234580993652 -0.0971752479672432 -0.2839455306529999 0.7831049561500549 0.6218451261520386 -0.0 0.003436654806137085 0.5902106761932373 0 1.0 0 0.0 0 0.0 0 0.0 -0.04645347595214844 -0.09489124268293381 -0.2839455306529999 0.8167668581008911 0.5769218802452087 -0.0 0.004566401243209839 0.5930731296539307 0 1.0 0 0.0 0 0.0 0 0.0 -0.04645347595214844 -0.09489124268293381 0.21605446934700012 0.8167668581008911 0.5769218802452087 -0.0 0.4660434424877167 0.43486452102661133 0 1.0 0 0.0 0 0.0 0 0.0 1.4150612354278564 0.19643977284431458 -0.2839455306529999 -0.0018005920574069023 0.999969482421875 -0.0 0.9889234304428101 0.7905939221382141 0 1.0 0 0.0 0 0.0 0 0.0 1.4019849300384521 0.1962110698223114 -0.2839455306529999 -0.036133915185928345 0.99932861328125 -0.0 0.9996871948242188 0.7901116609573364 0 1.0 0 0.0 0 0.0 0 0.0 1.4019849300384521 0.1962110698223114 0.21605448424816132 -0.036133915185928345 0.99932861328125 -0.0 1.4772617816925049 0.6266326904296875 0 1.0 0 0.0 0 0.0 0 0.0 0.05647993087768555 -0.09622661769390106 -0.2839455306529999 -0.6779381632804871 0.7350993156433105 -0.0 0.9379128217697144 0.5852980613708496 0 1.0 0 0.0 0 0.0 0 0.0 0.05359029769897461 -0.0987635925412178 -0.2839455306529999 -0.6418042778968811 0.7668386101722717 -0.0 0.9398130178451538 0.5825554728507996 0 1.0 0 0.0 0 0.0 0 0.0 0.05359029769897461 -0.0987635925412178 0.21605446934700012 -0.6418347954750061 0.7668386101722717 -0.0 0.5299412608146667 0.42932629585266113 0 1.0 0 0.0 0 0.0 0 0.0 -1.0964387655258179 -0.11031252890825272 -0.2839455306529999 0.3327127993106842 0.9429914355278015 -0.0 1.0337873697280884 0.47707217931747437 0 1.0 0 0.0 0 0.0 0 0.0 -1.1023786067962646 -0.10790447145700455 -0.2839455306529999 0.41840875148773193 0.9082308411598206 -0.0 1.0374038219451904 0.4792447090148926 0 1.0 0 0.0 0 0.0 0 0.0 -1.1023786067962646 -0.10790447145700455 0.21605446934700012 0.41840875148773193 0.9082308411598206 -0.0 0.537212610244751 0.28437894582748413 0 1.0 0 0.0 0 0.0 0 0.0 1.1907413005828857 -0.09083038568496704 -0.2839455306529999 0.9282204508781433 -0.3719290792942047 -0.0 0.8979910612106323 0.4719502925872803 0 1.0 0 0.0 0 0.0 0 0.0 1.1940457820892334 -0.08201909065246582 -0.2839455306529999 0.9363078474998474 -0.35114598274230957 -0.0 0.895880401134491 0.4805034399032593 0 1.0 0 0.0 0 0.0 0 0.0 1.1940457820892334 -0.08201909065246582 0.21605446934700012 0.9363078474998474 -0.35114598274230957 -0.0 0.5900315642356873 0.3451066017150879 0 1.0 0 0.0 0 0.0 0 0.0 -1.5313483476638794 -0.11630591750144958 -0.2839455306529999 0.4827722907066345 0.8757286071777344 -0.0 0.06009626388549805 0.4786478877067566 0 1.0 0 0.0 0 0.0 0 0.0 -1.5343255996704102 -0.11452784389257431 -0.2839455306529999 0.5419476628303528 0.8403881788253784 -0.0 0.06193813681602478 0.4803890585899353 0 1.0 0 0.0 0 0.0 0 0.0 -1.5343255996704102 -0.11452784389257431 0.21605446934700012 0.5419476628303528 0.8403881788253784 -0.0 0.5060164332389832 0.2883031964302063 0 1.0 0 0.0 0 0.0 0 0.0 1.4275152683258057 0.19626706838607788 -0.2839455306529999 0.02865688130259514 0.99957275390625 -0.0 0.978659987449646 0.7900841236114502 0 1.0 0 0.0 0 0.0 0 0.0 1.4150612354278564 0.19643977284431458 -0.2839455306529999 -0.0018005920574069023 0.999969482421875 -0.0 0.9889234304428101 0.7905939221382141 0 1.0 0 0.0 0 0.0 0 0.0 1.4150612354278564 0.19643977284431458 0.21605448424816132 -0.0018005920574069023 0.999969482421875 -0.0 1.4844118356704712 0.626757025718689 0 1.0 0 0.0 0 0.0 0 0.0 -1.0435030460357666 -0.10957673192024231 -0.2839455306529999 -0.3751335144042969 0.9269387125968933 -0.0 1.0028687715530396 0.48250114917755127 0 1.0 0 0.0 0 0.0 0 0.0 -1.0485308170318604 -0.11138277500867844 -0.2839455306529999 -0.3003937005996704 0.9537949562072754 -0.0 1.005732536315918 0.48008131980895996 0 1.0 0 0.0 0 0.0 0 0.0 -1.0485308170318604 -0.11138277500867844 0.21605446934700012 -0.3003937005996704 0.9537949562072754 -0.0 0.5774003267288208 0.2897791862487793 0 1.0 0 0.0 0 0.0 0 0.0 1.089745283126831 -0.08252502232789993 -0.2839455306529999 -0.9068269729614258 0.4214606285095215 -0.0 0.9483804702758789 0.47953569889068604 0 1.0 0 0.0 0 0.0 0 0.0 1.087920904159546 -0.08623196929693222 -0.2839455306529999 -0.886410117149353 0.46284371614456177 -0.0 0.9495965242385864 0.47543054819107056 0 1.0 0 0.0 0 0.0 0 0.0 1.087920904159546 -0.08623196929693222 0.21605446934700012 -0.886410117149353 0.46284371614456177 -0.0 0.5299165844917297 0.3165135383605957 0 1.0 0 0.0 0 0.0 0 0.0 -1.4689236879348755 -0.1152162104845047 -0.2839455306529999 -0.42313912510871887 0.9060335159301758 -0.0 1.023262858390808 0.48467862606048584 0 1.0 0 0.0 0 0.0 0 0.0 -1.4731050729751587 -0.1170404925942421 -0.2839455306529999 -0.37565234303474426 0.9267250299453735 -0.0 1.0256896018981934 0.48229867219924927 0 1.0 0 0.0 0 0.0 0 0.0 -1.4731050729751587 -0.1170404925942421 0.21605446934700012 -0.37565234303474426 0.9267250299453735 -0.0 0.5520947575569153 0.2880534529685974 0 1.0 0 0.0 0 0.0 0 0.0 1.4394242763519287 0.19574898481369019 -0.2839455306529999 0.05960264801979065 0.9981994032859802 -0.0 0.968928337097168 0.7887187600135803 0 1.0 0 0.0 0 0.0 0 0.0 1.4275152683258057 0.19626706838607788 -0.2839455306529999 0.02865688130259514 0.99957275390625 -0.0 0.978659987449646 0.7900841236114502 0 1.0 0 0.0 0 0.0 0 0.0 1.4275152683258057 0.19626706838607788 0.21605448424816132 0.02865688130259514 0.99957275390625 -0.0 0.4912264943122864 0.6263492107391357 0 1.0 0 0.0 0 0.0 0 0.0 -0.0429072380065918 -0.09935709089040756 -0.2839455306529999 0.7468489408493042 0.6649677753448486 -0.0 0.0022296011447906494 0.5874682068824768 0 1.0 0 0.0 0 0.0 0 0.0 -0.04474234580993652 -0.0971752479672432 -0.2839455306529999 0.7831049561500549 0.6218451261520386 -0.0 0.003436654806137085 0.5902106761932373 0 1.0 0 0.0 0 0.0 0 0.0 -0.04474234580993652 -0.0971752479672432 0.21605446934700012 0.7831049561500549 0.6218451261520386 -0.0 0.46706393361091614 0.4318809509277344 0 1.0 0 0.0 0 0.0 0 0.0 1.4019849300384521 0.1962110698223114 -0.2839455306529999 -0.036133915185928345 0.99932861328125 -0.0 0.9996871948242188 0.7901116609573364 0 1.0 0 0.0 0 0.0 0 0.0 1.3894922733306885 0.1955251395702362 -0.2839455306529999 -0.07519760727882385 0.9971618056297302 -0.0 1.0098533630371094 0.7886281609535217 0 1.0 0 0.0 0 0.0 0 0.0 1.3894922733306885 0.1955251395702362 0.21605448424816132 -0.07519760727882385 0.9971618056297302 -0.0 1.4704526662826538 0.6259280443191528 0 1.0 0 0.0 0 0.0 0 0.0 0.05359029769897461 -0.0987635925412178 -0.2839455306529999 -0.6418042778968811 0.7668386101722717 -0.0 0.9398130178451538 0.5825554728507996 0 1.0 0 0.0 0 0.0 0 0.0 0.05052542686462402 -0.10120813548564911 -0.2839455306529999 -0.6056703329086304 0.7957090735435486 -0.0 0.9418185949325562 0.5799161791801453 0 1.0 0 0.0 0 0.0 0 0.0 0.05052542686462402 -0.10120813548564911 0.21605446934700012 -0.6056703329086304 0.7957090735435486 -0.0 0.5281510353088379 0.42618632316589355 0 1.0 0 0.0 0 0.0 0 0.0 -1.0902361869812012 -0.11218546330928802 -0.2839455306529999 0.2460707426071167 0.9692373275756836 -0.0 1.030053973197937 0.47553038597106934 0 1.0 0 0.0 0 0.0 0 0.0 -1.0964387655258179 -0.11031252890825272 -0.2839455306529999 0.3327127993106842 0.9429914355278015 -0.0 1.0337873697280884 0.47707217931747437 0 1.0 0 0.0 0 0.0 0 0.0 -1.0964387655258179 -0.11031252890825272 0.21605446934700012 0.3327127993106842 0.9429914355278015 -0.0 0.5418664813041687 0.2822644114494324 0 1.0 0 0.0 0 0.0 0 0.0 0.9728889465332031 -0.09026120603084564 -0.2839455306529999 0.7780693769454956 0.6281319856643677 -0.0 0.01784294843673706 0.4736138582229614 0 1.0 0 0.0 0 0.0 0 0.0 0.9695467948913574 -0.08579900860786438 -0.2839455306529999 0.8213446736335754 0.5703604221343994 -0.0 0.019856750965118408 0.47872352600097656 0 1.0 0 0.0 0 0.0 0 0.0 0.9695467948913574 -0.08579900860786438 0.21605446934700012 0.8213446736335754 0.5703604221343994 -0.0 0.446250319480896 0.3190198540687561 0 1.0 0 0.0 0 0.0 0 0.0 -1.3269373178482056 -0.12077785283327103 -0.2839455306529999 0.9928891658782959 0.1188085600733757 -0.0 0.9483891725540161 0.4913962483406067 0 1.0 0 0.0 0 0.0 0 0.0 -1.3274954557418823 -0.11564431339502335 -0.2839455306529999 0.9950864911079407 0.09869685769081116 -0.0 0.9483753442764282 0.49630945920944214 0 1.0 0 0.0 0 0.0 0 0.0 -1.3274954557418823 -0.11564431339502335 0.21605446934700012 0.9950864911079407 0.09869685769081116 -0.0 0.6419074535369873 0.33454930782318115 0 1.0 0 0.0 0 0.0 0 0.0 -1.0485308170318604 -0.11138277500867844 -0.2839455306529999 -0.3003937005996704 0.9537949562072754 -0.0 1.005732536315918 0.48008131980895996 0 1.0 0 0.0 0 0.0 0 0.0 -1.0536996126174927 -0.11278747767210007 -0.2839455306529999 -0.22412793338298798 0.9745475649833679 -0.0 1.0086880922317505 0.47808516025543213 0 1.0 0 0.0 0 0.0 0 0.0 -1.0536996126174927 -0.11278747767210007 0.21605446934700012 -0.22412793338298798 0.9745475649833679 -0.0 0.5738626718521118 0.28699201345443726 0 1.0 0 0.0 0 0.0 0 0.0 1.087920904159546 -0.08623196929693222 -0.2839455306529999 -0.886410117149353 0.46284371614456177 -0.0 0.9495965242385864 0.47543054819107056 0 1.0 0 0.0 0 0.0 0 0.0 1.0859894752502441 -0.08972486853599548 -0.2839455306529999 -0.8624531030654907 0.5060579180717468 -0.0 0.9508596658706665 0.4715844988822937 0 1.0 0 0.0 0 0.0 0 0.0 1.0859894752502441 -0.08972486853599548 0.21605446934700012 -0.8624531030654907 0.5060579180717468 -0.0 0.5287265181541443 0.3123684525489807 0 1.0 0 0.0 0 0.0 0 0.0 -1.5282543897628784 -0.11787480115890503 -0.2839455306529999 0.4213385283946991 0.9068880081176758 -0.0 0.058200687170028687 0.47714662551879883 0 1.0 0 0.0 0 0.0 0 0.0 -1.5313483476638794 -0.11630591750144958 -0.2839455306529999 0.4827722907066345 0.8757286071777344 -0.0 0.06009626388549805 0.4786478877067566 0 1.0 0 0.0 0 0.0 0 0.0 -1.5313483476638794 -0.11630591750144958 0.21605446934700012 0.4827722907066345 0.8757286071777344 -0.0 0.5082241296768188 0.2861729860305786 0 1.0 0 0.0 0 0.0 0 0.0 1.4507882595062256 0.1948854923248291 -0.2839455306529999 0.09341716021299362 0.9956053495407104 -0.0 0.9597978591918945 0.7865923643112183 0 1.0 0 0.0 0 0.0 0 0.0 1.4394242763519287 0.19574898481369019 -0.2839455306529999 0.05960264801979065 0.9981994032859802 -0.0 0.968928337097168 0.7887187600135803 0 1.0 0 0.0 0 0.0 0 0.0 1.4394242763519287 0.19574898481369019 0.21605448424816132 0.05960264801979065 0.9981994032859802 -0.0 0.49773043394088745 0.625482439994812 0 1.0 0 0.0 0 0.0 0 0.0 -0.040947914123535156 -0.10143677890300751 -0.2839455306529999 0.7084261775016785 0.7057710289955139 -0.0 0.0009450018405914307 0.5848455429077148 0 1.0 0 0.0 0 0.0 0 0.0 -0.0429072380065918 -0.09935709089040756 -0.2839455306529999 0.7468489408493042 0.6649677753448486 -0.0 0.0022296011447906494 0.5874682068824768 0 1.0 0 0.0 0 0.0 0 0.0 -0.0429072380065918 -0.09935709089040756 0.21605446934700012 0.7468489408493042 0.6649372577667236 -0.0 0.46817395091056824 0.4290156364440918 0 1.0 0 0.0 0 0.0 0 0.0 1.0859894752502441 -0.08972486853599548 -0.2839455306529999 -0.8624531030654907 0.5060579180717468 -0.0 0.9508596658706665 0.4715844988822937 0 1.0 0 0.0 0 0.0 0 0.0 1.0839512348175049 -0.09300372004508972 -0.2839455306529999 -0.8345591425895691 0.5508896112442017 -0.0 0.9521704912185669 0.46799367666244507 0 1.0 0 0.0 0 0.0 0 0.0 1.0839512348175049 -0.09300372004508972 0.21605446934700012 -0.8345591425895691 0.5508896112442017 -0.0 0.527442216873169 0.30847179889678955 0 1.0 0 0.0 0 0.0 0 0.0 -1.4731050729751587 -0.1170404925942421 -0.2839455306529999 -0.37565234303474426 0.9267250299453735 -0.0 1.0256896018981934 0.48229867219924927 0 1.0 0 0.0 0 0.0 0 0.0 -1.4773203134536743 -0.11862154304981232 -0.2839455306529999 -0.3258461356163025 0.9454023838043213 -0.0 1.0281380414962769 0.4801962971687317 0 1.0 0 0.0 0 0.0 0 0.0 -1.4773203134536743 -0.11862154304981232 0.21605446934700012 -0.3258461356163025 0.9454023838043213 -0.0 0.5490454435348511 0.2857193946838379 0 1.0 0 0.0 0 0.0 0 0.0 1.3894922733306885 0.1955251395702362 -0.2839455306529999 -0.07519760727882385 0.9971618056297302 -0.0 0.00985342264175415 0.7886281609535217 0 1.0 0 0.0 0 0.0 0 0.0 1.3775832653045654 0.1943819224834442 -0.2839455306529999 -0.11777092516422272 0.9930112361907959 -0.0 0.019346296787261963 0.7862545847892761 0 1.0 0 0.0 0 0.0 0 0.0 1.3775832653045654 0.1943819224834442 0.21605448424816132 -0.11777092516422272 0.9930112361907959 -0.0 0.4639950394630432 0.6246772408485413 0 1.0 0 0.0 0 0.0 0 0.0 -0.15343952178955078 -0.10089192539453506 -0.2839455306529999 -0.9809259176254272 -0.19437238574028015 -0.0 0.06731992959976196 0.5781137943267822 0 1.0 0 0.0 0 0.0 0 0.0 -0.1520531177520752 -0.10727692395448685 -0.2839455306529999 -0.9728385210037231 -0.23145237565040588 -0.0 0.06625154614448547 0.5711506009101868 0 1.0 0 0.0 0 0.0 0 0.0 -0.1520531177520752 -0.10727692395448685 0.21605446934700012 -0.9728385210037231 -0.23145237565040588 -0.0 0.4040839374065399 0.4313696026802063 0 1.0 0 0.0 0 0.0 0 0.0 -1.0837708711624146 -0.11352327466011047 -0.2839455306529999 0.16067995131015778 0.9869990944862366 -0.0 1.026201844215393 0.4746147394180298 0 1.0 0 0.0 0 0.0 0 0.0 -1.0902361869812012 -0.11218546330928802 -0.2839455306529999 0.2460707426071167 0.9692373275756836 -0.0 1.030053973197937 0.47553038597106934 0 1.0 0 0.0 0 0.0 0 0.0 -1.0902361869812012 -0.11218546330928802 0.21605446934700012 0.2460707426071167 0.9692373275756836 -0.0 0.5467023253440857 0.2809107303619385 0 1.0 0 0.0 0 0.0 0 0.0 -1.2278786897659302 -0.11230587214231491 -0.2839455306529999 -0.8745384216308594 -0.4849391281604767 -0.0 0.10593611001968384 0.467909574508667 0 1.0 0 0.0 0 0.0 0 0.0 -1.2218475341796875 -0.1223333552479744 -0.2839455306529999 -0.8377330899238586 -0.5460371971130371 -0.0 0.10203734040260315 0.4583163857460022 0 1.0 0 0.0 0 0.0 0 0.0 -1.2218475341796875 -0.1223333552479744 0.21605446934700012 -0.8377330899238586 -0.5460371971130371 -0.0 0.45306360721588135 0.28299450874328613 0 1.0 0 0.0 0 0.0 0 0.0 0.05052542686462402 -0.10120813548564911 -0.2839455306529999 -0.6056703329086304 0.7957090735435486 -0.0 0.9418185949325562 0.5799161791801453 0 1.0 0 0.0 0 0.0 0 0.0 0.04728555679321289 -0.10356024652719498 -0.2839455306529999 -0.5684072375297546 0.8227179646492004 -0.0 0.9439307451248169 0.5773794651031494 0 1.0 0 0.0 0 0.0 0 0.0 0.04728555679321289 -0.10356024652719498 0.21605446934700012 -0.5684072375297546 0.8227179646492004 -0.0 0.5262308716773987 0.42314088344573975 0 1.0 0 0.0 0 0.0 0 0.0 0.9765326976776123 -0.09445341676473618 -0.2839455306529999 0.7320474982261658 0.6812036633491516 -0.0 0.015665769577026367 0.4688234329223633 0 1.0 0 0.0 0 0.0 0 0.0 0.9728889465332031 -0.09026120603084564 -0.2839455306529999 0.7780693769454956 0.6281319856643677 -0.0 0.01784294843673706 0.4736138582229614 0 1.0 0 0.0 0 0.0 0 0.0 0.9728889465332031 -0.09026120603084564 0.21605446934700012 0.7780693769454956 0.6281319856643677 -0.0 0.4482648968696594 0.3134663701057434 0 1.0 0 0.0 0 0.0 0 0.0 -1.5250436067581177 -0.11923450231552124 -0.2839455306529999 0.3585619628429413 0.9334696531295776 -0.0 0.056250184774398804 0.47588449716567993 0 1.0 0 0.0 0 0.0 0 0.0 -1.5282543897628784 -0.11787480115890503 -0.2839455306529999 0.4213385283946991 0.9068880081176758 -0.0 0.058200687170028687 0.47714662551879883 0 1.0 0 0.0 0 0.0 0 0.0 -1.5282543897628784 -0.11787480115890503 0.21605446934700012 0.4213385283946991 0.9068880081176758 -0.0 0.5105367302894592 0.2842988967895508 0 1.0 0 0.0 0 0.0 0 0.0 1.4616072177886963 0.19367659091949463 -0.2839455306529999 0.13031403720378876 0.9914548397064209 -0.0 0.9513123035430908 0.7838001847267151 0 1.0 0 0.0 0 0.0 0 0.0 1.4507882595062256 0.1948854923248291 -0.2839455306529999 0.09341716021299362 0.9956053495407104 -0.0 0.9597978591918945 0.7865923643112183 0 1.0 0 0.0 0 0.0 0 0.0 1.4507882595062256 0.1948854923248291 0.21605448424816132 0.09341716021299362 0.9956053495407104 -0.0 0.5039108395576477 0.6241855025291443 0 1.0 0 0.0 0 0.0 0 0.0 -1.0536996126174927 -0.11278747767210007 -0.2839455306529999 -0.22412793338298798 0.9745475649833679 -0.0 1.0086880922317505 0.47808516025543213 0 1.0 0 0.0 0 0.0 0 0.0 -1.0590094327926636 -0.1137908324599266 -0.2839455306529999 -0.14783166348934174 0.9889827966690063 -0.0 1.0117387771606445 0.47651296854019165 0 1.0 0 0.0 0 0.0 0 0.0 -1.0590094327926636 -0.1137908324599266 0.21605446934700012 -0.14783166348934174 0.9889827966690063 -0.0 0.5701271891593933 0.28467416763305664 0 1.0 0 0.0 0 0.0 0 0.0 -1.4773203134536743 -0.11862154304981232 -0.2839455306529999 -0.3258461356163025 0.9454023838043213 -0.0 1.0281380414962769 0.4801962971687317 0 1.0 0 0.0 0 0.0 0 0.0 -1.4815696477890015 -0.11995935440063477 -0.2839455306529999 -0.27402570843696594 0.9616992473602295 -0.0 1.030609130859375 0.47836989164352417 0 1.0 0 0.0 0 0.0 0 0.0 -1.4815696477890015 -0.11995935440063477 0.21605446934700012 -0.27402570843696594 0.9616992473602295 -0.0 0.5459287166595459 0.2837129235267639 0 1.0 0 0.0 0 0.0 0 0.0 1.3775832653045654 0.1943819224834442 -0.2839455306529999 -0.11777092516422272 0.9930112361907959 -0.0 0.019346296787261963 0.7862545847892761 0 1.0 0 0.0 0 0.0 0 0.0 1.3662583827972412 0.19278141856193542 -0.2839455306529999 -0.16406750679016113 0.9864192605018616 -0.0 0.02812016010284424 0.7831013202667236 0 1.0 0 0.0 0 0.0 0 0.0 1.3662583827972412 0.19278141856193542 0.21605448424816132 -0.16406750679016113 0.9864192605018616 -0.0 0.4578937888145447 0.6229137778282166 0 1.0 0 0.0 0 0.0 0 0.0 1.1871328353881836 -0.09928411990404129 -0.2839455306529999 0.9102755784988403 -0.4139530658721924 -0.0 0.9002060294151306 0.4637722969055176 0 1.0 0 0.0 0 0.0 0 0.0 1.1907413005828857 -0.09083038568496704 -0.2839455306529999 0.9282204508781433 -0.3719290792942047 -0.0 0.8979910612106323 0.4719502925872803 0 1.0 0 0.0 0 0.0 0 0.0 1.1907413005828857 -0.09083038568496704 0.21605446934700012 0.9282204508781433 -0.3719290792942047 -0.0 0.5891975164413452 0.3356865644454956 0 1.0 0 0.0 0 0.0 0 0.0 0.8681845664978027 -0.09213779121637344 -0.2839455306529999 -0.9248634576797485 -0.3802911341190338 -0.0 0.07195284962654114 0.4773102402687073 0 1.0 0 0.0 0 0.0 0 0.0 0.8725264072418213 -0.1018965020775795 -0.2839455306529999 -0.9013641476631165 -0.43299660086631775 -0.0 0.06945812702178955 0.4675431251525879 0 1.0 0 0.0 0 0.0 0 0.0 0.8725264072418213 -0.1018965020775795 0.21605446934700012 -0.9013641476631165 -0.43299660086631775 -0.0 0.38795796036720276 0.32857829332351685 0 1.0 0 0.0 0 0.0 0 0.0 -1.6506456136703491 -0.11920773983001709 -0.2839455306529999 -0.9472029805183411 -0.32053589820861816 -0.0 0.12096211314201355 0.47054606676101685 0 1.0 0 0.0 0 0.0 0 0.0 -1.648117184638977 -0.12588948011398315 -0.2839455306529999 -0.921933650970459 -0.3872798979282379 -0.0 0.11914879083633423 0.4643626809120178 0 1.0 0 0.0 0 0.0 0 0.0 -1.648117184638977 -0.12588948011398315 0.21605446934700012 -0.921933650970459 -0.3872798979282379 -0.0 0.4339945912361145 0.2996535301208496 0 1.0 0 0.0 0 0.0 0 0.0 -1.0770429372787476 -0.11432596296072006 -0.2839455306529999 0.07840204983949661 0.9969176054000854 -0.0 1.0222300291061401 0.4743214249610901 0 1.0 0 0.0 0 0.0 0 0.0 -1.0837708711624146 -0.11352327466011047 -0.2839455306529999 0.16067995131015778 0.9869990944862366 -0.0 1.026201844215393 0.4746147394180298 0 1.0 0 0.0 0 0.0 0 0.0 -1.0837708711624146 -0.11352327466011047 0.21605446934700012 0.16067995131015778 0.9869990944862366 -0.0 0.5516993403434753 0.28032606840133667 0 1.0 0 0.0 0 0.0 0 0.0 1.471881628036499 0.19212231040000916 -0.2839455306529999 0.17062897980213165 0.9853205680847168 -0.0 0.9434927105903625 0.7804336547851562 0 1.0 0 0.0 0 0.0 0 0.0 1.4616072177886963 0.19367659091949463 -0.2839455306529999 0.13031403720378876 0.9914548397064209 -0.0 0.9513123035430908 0.7838001847267151 0 1.0 0 0.0 0 0.0 0 0.0 1.4616072177886963 0.19367659091949463 0.21605448424816132 0.13031403720378876 0.9914548397064209 -0.0 0.5097600817680359 0.6224872469902039 0 1.0 0 0.0 0 0.0 0 0.0 -0.0388646125793457 -0.10341430455446243 -0.2839455306529999 0.6682027578353882 0.7439497113227844 -0.0 0.999582827091217 0.5823426246643066 0 1.0 0 0.0 0 0.0 0 0.0 -0.040947914123535156 -0.10143677890300751 -0.2839455306529999 0.7084261775016785 0.7057710289955139 -0.0 1.000944972038269 0.5848455429077148 0 1.0 0 0.0 0 0.0 0 0.0 -0.040947914123535156 -0.10143677890300751 0.21605446934700012 0.7084261775016785 0.7057710289955139 -0.0 1.469374179840088 0.42627018690109253 0 1.0 0 0.0 0 0.0 0 0.0 -1.0590094327926636 -0.1137908324599266 -0.2839455306529999 -0.14783166348934174 0.9889827966690063 -0.0 1.0117387771606445 0.47651296854019165 0 1.0 0 0.0 0 0.0 0 0.0 -1.0644603967666626 -0.11439284682273865 -0.2839455306529999 -0.07284767925739288 0.9973143935203552 -0.0 1.0148876905441284 0.4753662943840027 0 1.0 0 0.0 0 0.0 0 0.0 -1.0644603967666626 -0.11439284682273865 0.21605446934700012 -0.07284767925739288 0.9973143935203552 -0.0 0.5661978721618652 0.28283756971359253 0 1.0 0 0.0 0 0.0 0 0.0 1.0839512348175049 -0.09300372004508972 -0.2839455306529999 -0.8345591425895691 0.5508896112442017 -0.0 0.9521704912185669 0.46799367666244507 0 1.0 0 0.0 0 0.0 0 0.0 1.081805944442749 -0.09606851637363434 -0.2839455306529999 -0.8022705912590027 0.5969420671463013 -0.0 0.9535298347473145 0.46465450525283813 0 1.0 0 0.0 0 0.0 0 0.0 1.081805944442749 -0.09606851637363434 0.21605446934700012 -0.8022705912590027 0.5969420671463013 -0.0 0.5260624289512634 0.3048214912414551 0 1.0 0 0.0 0 0.0 0 0.0 1.3662583827972412 0.19278141856193542 -0.2839455306529999 -0.16406750679016113 0.9864192605018616 -0.0 0.02812016010284424 0.7831013202667236 0 1.0 0 0.0 0 0.0 0 0.0 1.3555166721343994 0.19072362780570984 -0.2839455306529999 -0.2143009752035141 0.9767448902130127 -0.0 0.03615725040435791 0.7792714238166809 0 1.0 0 0.0 0 0.0 0 0.0 1.3555166721343994 0.19072362780570984 0.21605448424816132 -0.2143009752035141 0.9767448902130127 -0.0 0.45214810967445374 0.6206684112548828 0 1.0 0 0.0 0 0.0 0 0.0 -1.5217162370681763 -0.12038502097129822 -0.2839455306529999 0.2953581213951111 0.9553819298744202 -0.0 0.05424368381500244 0.47486114501953125 0 1.0 0 0.0 0 0.0 0 0.0 -1.5250436067581177 -0.11923450231552124 -0.2839455306529999 0.3585619628429413 0.9334696531295776 -0.0 0.056250184774398804 0.47588449716567993 0 1.0 0 0.0 0 0.0 0 0.0 -1.5250436067581177 -0.11923450231552124 0.21605446934700012 0.3585619628429413 0.9334696531295776 -0.0 0.5129532814025879 0.28268343210220337 0 1.0 0 0.0 0 0.0 0 0.0 -0.03665733337402344 -0.10528966784477234 -0.2839455306529999 0.6266365647315979 0.7792901396751404 -0.0 0.9981430768966675 0.5799591541290283 0 1.0 0 0.0 0 0.0 0 0.0 -0.0388646125793457 -0.10341430455446243 -0.2839455306529999 0.6682027578353882 0.7439497113227844 -0.0 0.999582827091217 0.5823426246643066 0 1.0 0 0.0 0 0.0 0 0.0 -0.0388646125793457 -0.10341430455446243 0.21605446934700012 0.6682027578353882 0.7439497113227844 -0.0 1.4706650972366333 0.42364639043807983 0 1.0 0 0.0 0 0.0 0 0.0 -1.4815696477890015 -0.11995935440063477 -0.2839455306529999 -0.27402570843696594 0.9616992473602295 -0.0 1.030609130859375 0.47836989164352417 0 1.0 0 0.0 0 0.0 0 0.0 -1.4858530759811401 -0.12105392664670944 -0.2839455306529999 -0.22058779001235962 0.9753410220146179 -0.0 1.0331037044525146 0.4768180847167969 0 1.0 0 0.0 0 0.0 0 0.0 -1.4858530759811401 -0.12105392664670944 0.21605446934700012 -0.22058779001235962 0.9753410220146179 -0.0 0.5427493453025818 0.28203511238098145 0 1.0 0 0.0 0 0.0 0 0.0 0.04728555679321289 -0.10356024652719498 -0.2839455306529999 -0.5684072375297546 0.8227179646492004 -0.0 0.9439307451248169 0.5773794651031494 0 1.0 0 0.0 0 0.0 0 0.0 0.043921709060668945 -0.1057700365781784 -0.2839455306529999 -0.5277870893478394 0.8493301272392273 -0.0 0.9461168050765991 0.5750011205673218 0 1.0 0 0.0 0 0.0 0 0.0 0.043921709060668945 -0.1057700365781784 0.21605446934700012 -0.5277870893478394 0.8493301272392273 -0.0 0.5242090225219727 0.42025721073150635 0 1.0 0 0.0 0 0.0 0 0.0 -1.0700523853302002 -0.1145935207605362 -0.2839455306529999 0.00119022186845541 0.999969482421875 -0.0 1.018137812614441 0.4746472239494324 0 1.0 0 0.0 0 0.0 0 0.0 -1.0770429372787476 -0.11432596296072006 -0.2839455306529999 0.07840204983949661 0.9969176054000854 -0.0 1.0222300291061401 0.4743214249610901 0 1.0 0 0.0 0 0.0 0 0.0 -1.0770429372787476 -0.11432596296072006 0.21605446934700012 0.07840204983949661 0.9969176054000854 -0.0 0.5568340420722961 0.28051841259002686 0 1.0 0 0.0 0 0.0 0 0.0 0.9804050922393799 -0.09834157675504684 -0.2839455306529999 0.6852015852928162 0.7283242344856262 -0.0 0.013366401195526123 0.464388370513916 0 1.0 0 0.0 0 0.0 0 0.0 0.9765326976776123 -0.09445341676473618 -0.2839455306529999 0.7320474982261658 0.6812036633491516 -0.0 0.015665769577026367 0.4688234329223633 0 1.0 0 0.0 0 0.0 0 0.0 0.9765326976776123 -0.09445341676473618 0.21605446934700012 0.7320474982261658 0.6812036633491516 -0.0 0.45053744316101074 0.3082153797149658 0 1.0 0 0.0 0 0.0 0 0.0 1.4816114902496338 0.1902226209640503 -0.2839455306529999 0.2145756334066391 0.9766838550567627 -0.0 0.9363420009613037 0.7765767574310303 0 1.0 0 0.0 0 0.0 0 0.0 1.471881628036499 0.19212231040000916 -0.2839455306529999 0.17062897980213165 0.9853205680847168 -0.0 0.9434927105903625 0.7804336547851562 0 1.0 0 0.0 0 0.0 0 0.0 1.471881628036499 0.19212231040000916 0.21605448424816132 0.17062897980213165 0.9853205680847168 -0.0 0.5152754187583923 0.6204149723052979 0 1.0 0 0.0 0 0.0 0 0.0 -1.0644603967666626 -0.11439284682273865 -0.2839455306529999 -0.07284767925739288 0.9973143935203552 -0.0 1.0148876905441284 0.4753662943840027 0 1.0 0 0.0 0 0.0 0 0.0 -1.0700523853302002 -0.1145935207605362 -0.2839455306529999 0.00119022186845541 0.999969482421875 -0.0 1.018137812614441 0.4746472239494324 0 1.0 0 0.0 0 0.0 0 0.0 -1.0700523853302002 -0.1145935207605362 0.21605446934700012 0.00119022186845541 0.999969482421875 -0.0 0.5620806217193604 0.2814953923225403 0 1.0 0 0.0 0 0.0 0 0.0 1.081805944442749 -0.09606851637363434 -0.2839455306529999 -0.8022705912590027 0.5969420671463013 -0.0 0.9535298347473145 0.46465450525283813 0 1.0 0 0.0 0 0.0 0 0.0 1.0795536041259766 -0.09891926497220993 -0.2839455306529999 -0.765282154083252 0.6436659097671509 -0.0 0.954938530921936 0.4615635275840759 0 1.0 0 0.0 0 0.0 0 0.0 1.0795536041259766 -0.09891926497220993 0.21605446934700012 -0.765282154083252 0.6436659097671509 -0.0 0.5245863199234009 0.30141550302505493 0 1.0 0 0.0 0 0.0 0 0.0 1.3555166721343994 0.19072362780570984 -0.2839455306529999 -0.2143009752035141 0.9767448902130127 -0.0 0.03615725040435791 0.7792714238166809 0 1.0 0 0.0 0 0.0 0 0.0 1.3453590869903564 0.18820855021476746 -0.2839455306529999 -0.2685323655605316 0.9632557034492493 -0.0 0.04345959424972534 0.7748583555221558 0 1.0 0 0.0 0 0.0 0 0.0 1.3453590869903564 0.18820855021476746 0.21605448424816132 -0.2685323655605316 0.9632557034492493 -0.0 0.44675424695014954 0.6179689168930054 0 1.0 0 0.0 0 0.0 0 0.0 -1.5182719230651855 -0.12132634967565536 -0.2839455306529999 0.23261207342147827 0.9725638628005981 -0.0 0.052179962396621704 0.4740765690803528 0 1.0 0 0.0 0 0.0 0 0.0 -1.5217162370681763 -0.12038502097129822 -0.2839455306529999 0.2953581213951111 0.9553819298744202 -0.0 0.05424368381500244 0.47486114501953125 0 1.0 0 0.0 0 0.0 0 0.0 -1.5217162370681763 -0.12038502097129822 0.21605446934700012 0.2953581213951111 0.9553819298744202 -0.0 0.5154720544815063 0.28133004903793335 0 1.0 0 0.0 0 0.0 0 0.0 -0.03432583808898926 -0.10706286877393723 -0.2839455306529999 0.5824762582778931 0.8127994537353516 -0.0 0.9966254830360413 0.5776949524879456 0 1.0 0 0.0 0 0.0 0 0.0 -0.03665733337402344 -0.10528966784477234 -0.2839455306529999 0.6266365647315979 0.7792901396751404 -0.0 0.9981430768966675 0.5799591541290283 0 1.0 0 0.0 0 0.0 0 0.0 -0.03665733337402344 -0.10528966784477234 0.21605446934700012 0.6266365647315979 0.7792901396751404 -0.0 1.472046971321106 0.421146035194397 0 1.0 0 0.0 0 0.0 0 0.0 0.043921709060668945 -0.1057700365781784 -0.2839455306529999 -0.5277870893478394 0.8493301272392273 -0.0 0.9461168050765991 0.5750011205673218 0 1.0 0 0.0 0 0.0 0 0.0 0.04048466682434082 -0.10778769105672836 -0.2839455306529999 -0.4839625358581543 0.8750572204589844 -0.0 0.9483439922332764 0.5728389024734497 0 1.0 0 0.0 0 0.0 0 0.0 0.04048466682434082 -0.10778769105672836 0.21605446934700012 -0.4839625358581543 0.8750572204589844 -0.0 0.5221152901649475 0.4176033139228821 0 1.0 0 0.0 0 0.0 0 0.0 -1.2218475341796875 -0.1223333552479744 -0.2839455306529999 -0.8377330899238586 -0.5460371971130371 -0.0 0.10203734040260315 0.4583163857460022 0 1.0 0 0.0 0 0.0 0 0.0 -1.215181589126587 -0.13179409503936768 -0.2839455306529999 -0.7957395911216736 -0.6056092977523804 -0.0 0.09788185358047485 0.44936132431030273 0 1.0 0 0.0 0 0.0 0 0.0 -1.215181589126587 -0.13179409503936768 0.21605446934700012 -0.7957395911216736 -0.6056092977523804 -0.0 0.4565242528915405 0.27205127477645874 0 1.0 0 0.0 0 0.0 0 0.0 0.9844331741333008 -0.10189163684844971 -0.2839455306529999 0.635425865650177 0.7721487879753113 -0.0 0.010986119508743286 0.46034443378448486 0 1.0 0 0.0 0 0.0 0 0.0 0.9804050922393799 -0.09834157675504684 -0.2839455306529999 0.6852015852928162 0.7283242344856262 -0.0 0.013366401195526123 0.464388370513916 0 1.0 0 0.0 0 0.0 0 0.0 0.9804050922393799 -0.09834157675504684 0.21605446934700012 0.6852015852928162 0.7283242344856262 -0.0 0.45302438735961914 0.30331945419311523 0 1.0 0 0.0 0 0.0 0 0.0 -1.3263133764266968 -0.12555383145809174 -0.2839455306529999 0.9898678660392761 0.14185002446174622 -0.0 0.9483564496040344 0.4868885278701782 0 1.0 0 0.0 0 0.0 0 0.0 -1.3269373178482056 -0.12077785283327103 -0.2839455306529999 0.9928891658782959 0.1188085600733757 -0.0 0.9483891725540161 0.4913962483406067 0 1.0 0 0.0 0 0.0 0 0.0 -1.3269373178482056 -0.12077785283327103 0.21605446934700012 0.9928891658782959 0.1188085600733757 -0.0 0.6428943872451782 0.32994168996810913 0 1.0 0 0.0 0 0.0 0 0.0 1.4907958507537842 0.18797752261161804 -0.2839455306529999 0.2623981535434723 0.964934229850769 -0.0 0.9298497438430786 0.7723049521446228 0 1.0 0 0.0 0 0.0 0 0.0 1.4816114902496338 0.1902226209640503 -0.2839455306529999 0.2145756334066391 0.9766838550567627 -0.0 0.9363420009613037 0.7765767574310303 0 1.0 0 0.0 0 0.0 0 0.0 1.4816114902496338 0.1902226209640503 0.21605448424816132 0.2145756334066391 0.9766838550567627 -0.0 0.5204575657844543 0.6179937124252319 0 1.0 0 0.0 0 0.0 0 0.0 1.0795536041259766 -0.09891926497220993 -0.2839455306529999 -0.765282154083252 0.6436659097671509 -0.0 0.954938530921936 0.4615635275840759 0 1.0 0 0.0 0 0.0 0 0.0 1.0771942138671875 -0.1015559658408165 -0.2839455306529999 -0.7233496904373169 0.6904507875442505 -0.0 0.9563973546028137 0.4587175250053406 0 1.0 0 0.0 0 0.0 0 0.0 1.0771942138671875 -0.1015559658408165 0.21605446934700012 -0.7233496904373169 0.6904507875442505 -0.0 0.5230129957199097 0.2982526421546936 0 1.0 0 0.0 0 0.0 0 0.0 -1.4858530759811401 -0.12105392664670944 -0.2839455306529999 -0.22058779001235962 0.9753410220146179 -0.0 1.0331037044525146 0.4768180847167969 0 1.0 0 0.0 0 0.0 0 0.0 -1.4901705980300903 -0.12190525233745575 -0.2839455306529999 -0.1659901738166809 0.9861140847206116 -0.0 1.0356225967407227 0.47553956508636475 0 1.0 0 0.0 0 0.0 0 0.0 -1.4901705980300903 -0.12190525233745575 0.21605446934700012 -0.1659596562385559 0.9861140847206116 -0.0 0.5395126342773438 0.2806873917579651 0 1.0 0 0.0 0 0.0 0 0.0 1.3453590869903564 0.18820855021476746 -0.2839455306529999 -0.2685323655605316 0.9632557034492493 -0.0 0.04345959424972534 0.7748583555221558 0 1.0 0 0.0 0 0.0 0 0.0 1.335785150527954 0.18523618578910828 -0.2839455306529999 -0.3266090750694275 0.9451277256011963 -0.0 0.05004608631134033 0.7699426412582397 0 1.0 0 0.0 0 0.0 0 0.0 1.335785150527954 0.18523618578910828 0.21605448424816132 -0.3266090750694275 0.9451277256011963 -0.0 0.44170477986335754 0.6148389577865601 0 1.0 0 0.0 0 0.0 0 0.0 -0.03187894821166992 -0.10871323943138123 -0.2839455306529999 0.5338907837867737 0.8455153107643127 -0.0 0.9950354695320129 0.57557612657547 0 1.0 0 0.0 0 0.0 0 0.0 -0.03432583808898926 -0.10706286877393723 -0.2839455306529999 0.5824762582778931 0.8127994537353516 -0.0 0.9966254830360413 0.5776949524879456 0 1.0 0 0.0 0 0.0 0 0.0 -0.03432583808898926 -0.10706286877393723 0.21605446934700012 0.5824762582778931 0.8128299713134766 -0.0 1.473520278930664 0.418770968914032 0 1.0 0 0.0 0 0.0 0 0.0 -0.985637903213501 -0.13450376689434052 -0.2839455306529999 0.7927793264389038 -0.6094546318054199 -0.0 0.9723237752914429 0.46296828985214233 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 -0.2839455306529999 0.8035218119621277 -0.5952635407447815 -0.0 0.9702714085578918 0.46846210956573486 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 0.21605446934700012 0.8035218119621277 -0.5952635407447815 -0.0 0.6224963665008545 0.2940528988838196 0 1.0 0 0.0 0 0.0 0 0.0 -0.1520531177520752 -0.10727692395448685 -0.2839455306529999 -0.9728385210037231 -0.23145237565040588 -0.0 0.06625154614448547 0.5711506009101868 0 1.0 0 0.0 0 0.0 0 0.0 -0.1504817008972168 -0.11334571242332458 -0.2839455306529999 -0.9624622464179993 -0.2713705897331238 -0.0 0.06511396169662476 0.564522385597229 0 1.0 0 0.0 0 0.0 0 0.0 -0.1504817008972168 -0.11334571242332458 0.21605446934700012 -0.9624622464179993 -0.2713705897331238 -0.0 0.4043794870376587 0.424402117729187 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.12930455803871155 -0.2839455306529999 -0.999969482421875 0.0 -0.0 0.9702714085578918 0.46846210956573486 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.18394553661346436 -0.2839455306529999 -1.0 0.0 -0.0 0.9718600511550903 0.41916149854660034 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.18394553661346436 0.21605445444583893 -1.0 0.0 -0.0 0.6307469606399536 0.2462201714515686 0 1.0 0 0.0 0 0.0 0 0.0 1.183220386505127 -0.10738029330968857 -0.2839455306529999 0.8894924521446228 -0.45689260959625244 -0.0 0.9025294780731201 0.45596277713775635 0 1.0 0 0.0 0 0.0 0 0.0 1.1871328353881836 -0.09928411990404129 -0.2839455306529999 0.9102755784988403 -0.4139530658721924 -0.0 0.9002060294151306 0.4637722969055176 0 1.0 0 0.0 0 0.0 0 0.0 1.1871328353881836 -0.09928411990404129 0.21605446934700012 0.9102755784988403 -0.4139530658721924 -0.0 0.5881662368774414 0.3265685439109802 0 1.0 0 0.0 0 0.0 0 0.0 -1.5147109031677246 -0.12205849587917328 -0.2839455306529999 0.17114779353141785 0.9852290153503418 -0.0 0.050057947635650635 0.47353076934814453 0 1.0 0 0.0 0 0.0 0 0.0 -1.5182719230651855 -0.12132634967565536 -0.2839455306529999 0.23261207342147827 0.9725638628005981 -0.0 0.052179962396621704 0.4740765690803528 0 1.0 0 0.0 0 0.0 0 0.0 -1.5182719230651855 -0.12132634967565536 0.21605446934700012 0.23261207342147827 0.9725638628005981 -0.0 0.5180913805961609 0.28024226427078247 0 1.0 0 0.0 0 0.0 0 0.0 1.4994356632232666 0.1853870451450348 -0.2839455306529999 0.31418806314468384 0.9493392705917358 -0.0 0.9239938855171204 0.767682671546936 0 1.0 0 0.0 0 0.0 0 0.0 1.4907958507537842 0.18797752261161804 -0.2839455306529999 0.2623981535434723 0.964934229850769 -0.0 0.9298497438430786 0.7723049521446228 0 1.0 0 0.0 0 0.0 0 0.0 1.4907958507537842 0.18797752261161804 0.21605448424816132 0.2623981535434723 0.964934229850769 -0.0 0.5253098607063293 0.6152458190917969 0 1.0 0 0.0 0 0.0 0 0.0 -0.9817862510681152 -0.18394553661346436 -0.2839455306529999 0.0 -1.0 -0.0 0.9718600511550903 0.41916149854660034 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 -0.2839455306529999 0.0 -1.0 -0.0 0.934088408946991 0.4341752529144287 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 0.21605445444583893 0.0 -1.0 -0.0 0.6724605560302734 0.28865742683410645 0 1.0 0 0.0 0 0.0 0 0.0 1.0771942138671875 -0.1015559658408165 -0.2839455306529999 -0.7233496904373169 0.6904507875442505 -0.0 0.9563973546028137 0.4587175250053406 0 1.0 0 0.0 0 0.0 0 0.0 1.0747277736663818 -0.10397861897945404 -0.2839455306529999 -0.6763817071914673 0.7365337014198303 -0.0 0.9579070806503296 0.4561135172843933 0 1.0 0 0.0 0 0.0 0 0.0 1.0747277736663818 -0.10397861897945404 0.21605446934700012 -0.6763817071914673 0.7365337014198303 -0.0 0.5213418006896973 0.29533177614212036 0 1.0 0 0.0 0 0.0 0 0.0 -1.4901705980300903 -0.12190525233745575 -0.2839455306529999 -0.1659901738166809 0.9861140847206116 -0.0 1.0356225967407227 0.47553956508636475 0 1.0 0 0.0 0 0.0 0 0.0 -1.494522213935852 -0.12251335382461548 -0.2839455306529999 -0.1106906309723854 0.9938352704048157 -0.0 1.0381664037704468 0.4745330810546875 0 1.0 0 0.0 0 0.0 0 0.0 -1.494522213935852 -0.12251335382461548 0.21605446934700012 -0.1106906309723854 0.9938352704048157 -0.0 0.5362241268157959 0.2796708345413208 0 1.0 0 0.0 0 0.0 0 0.0 0.04048466682434082 -0.10778769105672836 -0.2839455306529999 -0.4839625358581543 0.8750572204589844 -0.0 0.9483439922332764 0.5728389024734497 0 1.0 0 0.0 0 0.0 0 0.0 0.03697466850280762 -0.10961319506168365 -0.2839455306529999 -0.4382458031177521 0.8988311290740967 -0.0 0.9506131410598755 0.5708950757980347 0 1.0 0 0.0 0 0.0 0 0.0 0.03697466850280762 -0.10961319506168365 0.21605446934700012 -0.4382458031177521 0.8988311290740967 -0.0 0.5199500918388367 0.4151836633682251 0 1.0 0 0.0 0 0.0 0 0.0 -1.215181589126587 -0.13179409503936768 -0.2839455306529999 -0.7957395911216736 -0.6056092977523804 -0.0 0.09788185358047485 0.44936132431030273 0 1.0 0 0.0 0 0.0 0 0.0 -1.2078808546066284 -0.14068809151649475 -0.2839455306529999 -0.7514267563819885 -0.6597796678543091 -0.0 0.0934579074382782 0.44103407859802246 0 1.0 0 0.0 0 0.0 0 0.0 -1.2078808546066284 -0.14068809151649475 0.21605446934700012 -0.7514267563819885 -0.6597796678543091 -0.0 0.46060603857040405 0.26163506507873535 0 1.0 0 0.0 0 0.0 0 0.0 1.507530927658081 0.18245115876197815 -0.2839455306529999 0.36994537711143494 0.9290444850921631 -0.0 0.9187467098236084 0.7627642154693604 0 1.0 0 0.0 0 0.0 0 0.0 1.4994356632232666 0.1853870451450348 -0.2839455306529999 0.31418806314468384 0.9493392705917358 -0.0 0.9239938855171204 0.767682671546936 0 1.0 0 0.0 0 0.0 0 0.0 1.4994356632232666 0.1853870451450348 0.21605448424816132 0.31418806314468384 0.9493392705917358 -0.0 0.5298388004302979 0.6121903657913208 0 1.0 0 0.0 0 0.0 0 0.0 1.335785150527954 0.18523618578910828 -0.2839455306529999 -0.3266090750694275 0.9451277256011963 -0.0 0.05004608631134033 0.7699426412582397 0 1.0 0 0.0 0 0.0 0 0.0 1.3267953395843506 0.1818065345287323 -0.2839455306529999 -0.3882870078086853 0.921536922454834 -0.0 0.05594542622566223 0.7645923495292664 0 1.0 0 0.0 0 0.0 0 0.0 1.3267953395843506 0.1818065345287323 0.21605448424816132 -0.3882870078086853 0.921536922454834 -0.0 0.4369904398918152 0.6112979650497437 0 1.0 0 0.0 0 0.0 0 0.0 0.988616943359375 -0.10510359704494476 -0.2839455306529999 0.5808892846107483 0.8139591813087463 -0.0 0.008523315191268921 0.4566870927810669 0 1.0 0 0.0 0 0.0 0 0.0 0.9844331741333008 -0.10189163684844971 -0.2839455306529999 0.635425865650177 0.7721487879753113 -0.0 0.010986119508743286 0.46034443378448486 0 1.0 0 0.0 0 0.0 0 0.0 0.9844331741333008 -0.10189163684844971 0.21605446934700012 0.635425865650177 0.7721487879753113 -0.0 0.45567893981933594 0.2988291382789612 0 1.0 0 0.0 0 0.0 0 0.0 -1.5110331773757935 -0.12258145213127136 -0.2839455306529999 0.1116367056965828 0.9937437176704407 -0.0 0.047876596450805664 0.47322434186935425 0 1.0 0 0.0 0 0.0 0 0.0 -1.5147109031677246 -0.12205849587917328 -0.2839455306529999 0.17114779353141785 0.9852290153503418 -0.0 0.050057947635650635 0.47353076934814453 0 1.0 0 0.0 0 0.0 0 0.0 -1.5147109031677246 -0.12205849587917328 0.21605446934700012 0.17114779353141785 0.9852290153503418 -0.0 0.5208086371421814 0.27942436933517456 0 1.0 0 0.0 0 0.0 0 0.0 -0.029325008392333984 -0.11022009700536728 -0.2839455306529999 0.4822840094566345 0.8760032653808594 -0.0 0.9933782815933228 0.5736287832260132 0 1.0 0 0.0 0 0.0 0 0.0 -0.03187894821166992 -0.10871323943138123 -0.2839455306529999 0.5338907837867737 0.8455153107643127 -0.0 0.9950354695320129 0.57557612657547 0 1.0 0 0.0 0 0.0 0 0.0 -0.03187894821166992 -0.10871323943138123 0.21605446934700012 0.5338907837867737 0.8455153107643127 -0.0 1.4750800132751465 0.4165498614311218 0 1.0 0 0.0 0 0.0 0 0.0 -0.9896038770675659 -0.13947677612304688 -0.2839455306529999 0.7701956033706665 -0.6377758383750916 -0.0 0.9744249582290649 0.45770955085754395 0 1.0 0 0.0 0 0.0 0 0.0 -0.985637903213501 -0.13450376689434052 -0.2839455306529999 0.7927793264389038 -0.6094546318054199 -0.0 0.9723237752914429 0.46296828985214233 0 1.0 0 0.0 0 0.0 0 0.0 -0.985637903213501 -0.13450376689434052 0.21605446934700012 0.7927793264389038 -0.6094546318054199 -0.0 0.6210468411445618 0.2876055836677551 0 1.0 0 0.0 0 0.0 0 0.0 0.8725264072418213 -0.1018965020775795 -0.2839455306529999 -0.9013641476631165 -0.43299660086631775 -0.0 0.06945812702178955 0.4675431251525879 0 1.0 0 0.0 0 0.0 0 0.0 0.8773789405822754 -0.1112854853272438 -0.2839455306529999 -0.8742942810058594 -0.4853358566761017 -0.0 0.06675374507904053 0.4581591486930847 0 1.0 0 0.0 0 0.0 0 0.0 0.8773789405822754 -0.1112854853272438 0.21605446934700012 -0.8742942810058594 -0.4853358566761017 -0.0 0.3894132971763611 0.3180522322654724 0 1.0 0 0.0 0 0.0 0 0.0 -1.494522213935852 -0.12251335382461548 -0.2839455306529999 -0.1106906309723854 0.9938352704048157 -0.0 0.03816637396812439 0.4745330810546875 0 1.0 0 0.0 0 0.0 0 0.0 -1.4989076852798462 -0.12287820875644684 -0.2839455306529999 -0.055207982659339905 0.9984435439109802 -0.0 0.04073569178581238 0.4737977385520935 0 1.0 0 0.0 0 0.0 0 0.0 -1.4989076852798462 -0.12287820875644684 0.21605446934700012 -0.055207982659339905 0.9984435439109802 -0.0 0.5328900814056396 0.2789868116378784 0 1.0 0 0.0 0 0.0 0 0.0 0.03697466850280762 -0.10961319506168365 -0.2839455306529999 -0.4382458031177521 0.8988311290740967 -0.0 0.9506131410598755 0.5708950757980347 0 1.0 0 0.0 0 0.0 0 0.0 0.033391714096069336 -0.11124654114246368 -0.2839455306529999 -0.3908810615539551 0.9204077124595642 -0.0 0.9529252052307129 0.569171667098999 0 1.0 0 0.0 0 0.0 0 0.0 0.033391714096069336 -0.11124654114246368 0.21605446934700012 -0.3908810615539551 0.9204077124595642 -0.0 0.5177140831947327 0.41300249099731445 0 1.0 0 0.0 0 0.0 0 0.0 1.5150806903839111 0.17916986346244812 -0.2839455306529999 0.4293954372406006 0.9030731916427612 -0.0 0.914077639579773 0.7575942277908325 0 1.0 0 0.0 0 0.0 0 0.0 1.507530927658081 0.18245115876197815 -0.2839455306529999 0.36994537711143494 0.9290444850921631 -0.0 0.9187467098236084 0.7627642154693604 0 1.0 0 0.0 0 0.0 0 0.0 1.507530927658081 0.18245115876197815 0.21605448424816132 0.36994537711143494 0.9290444850921631 -0.0 0.5340521335601807 0.6088429689407349 0 1.0 0 0.0 0 0.0 0 0.0 -0.9936841726303101 -0.14422355592250824 -0.2839455306529999 0.7458113431930542 -0.6661275029182434 -0.0 0.9765768051147461 0.45268338918685913 0 1.0 0 0.0 0 0.0 0 0.0 -0.9896038770675659 -0.13947677612304688 -0.2839455306529999 0.7701956033706665 -0.6377758383750916 -0.0 0.9744249582290649 0.45770955085754395 0 1.0 0 0.0 0 0.0 0 0.0 -0.9896038770675659 -0.13947677612304688 0.21605446934700012 0.7701956033706665 -0.6377758383750916 -0.0 0.619458019733429 0.2813679575920105 0 1.0 0 0.0 0 0.0 0 0.0 1.0747277736663818 -0.10397861897945404 -0.2839455306529999 -0.6763817071914673 0.7365337014198303 -0.0 0.9579070806503296 0.4561135172843933 0 1.0 0 0.0 0 0.0 0 0.0 1.0721542835235596 -0.10618721693754196 -0.2839455306529999 -0.6264839768409729 0.7794122099876404 -0.0 0.9594686031341553 0.4537491202354431 0 1.0 0 0.0 0 0.0 0 0.0 1.0721542835235596 -0.10618721693754196 0.21605446934700012 -0.6264839768409729 0.7794122099876404 -0.0 0.5195723176002502 0.292652428150177 0 1.0 0 0.0 0 0.0 0 0.0 1.3267953395843506 0.1818065345287323 -0.2839455306529999 -0.3882870078086853 0.921536922454834 -0.0 0.05594542622566223 0.7645923495292664 0 1.0 0 0.0 0 0.0 0 0.0 1.3183887004852295 0.17791959643363953 -0.2839455306529999 -0.4528946876525879 0.8915371894836426 -0.0 0.06119370460510254 0.7588618993759155 0 1.0 0 0.0 0 0.0 0 0.0 1.3183887004852295 0.17791959643363953 0.21605448424816132 -0.4528946876525879 0.8915371894836426 -0.0 0.43259984254837036 0.6073609590530396 0 1.0 0 0.0 0 0.0 0 0.0 -1.2078808546066284 -0.14068809151649475 -0.2839455306529999 -0.7514267563819885 -0.6597796678543091 -0.0 0.0934579074382782 0.44103407859802246 0 1.0 0 0.0 0 0.0 0 0.0 -1.2001348733901978 -0.14893993735313416 -0.2839455306529999 -0.7076326608657837 -0.7065340280532837 -0.0 0.08885562419891357 0.4333972930908203 0 1.0 0 0.0 0 0.0 0 0.0 -1.2001348733901978 -0.14893993735313416 0.21605446934700012 -0.7076326608657837 -0.7065340280532837 -0.0 0.4652387797832489 0.2518855929374695 0 1.0 0 0.0 0 0.0 0 0.0 -1.5072386264801025 -0.12289523333311081 -0.2839455306529999 0.05456709489226341 0.9985045790672302 -0.0 0.045634716749191284 0.47315794229507446 0 1.0 0 0.0 0 0.0 0 0.0 -1.5110331773757935 -0.12258145213127136 -0.2839455306529999 0.1116367056965828 0.9937437176704407 -0.0 0.047876596450805664 0.47322434186935425 0 1.0 0 0.0 0 0.0 0 0.0 -1.5110331773757935 -0.12258145213127136 0.21605446934700012 0.1116367056965828 0.9937437176704407 -0.0 0.5236209630966187 0.27888089418411255 0 1.0 0 0.0 0 0.0 0 0.0 -0.026664018630981445 -0.11158344894647598 -0.2839455306529999 0.4297921657562256 0.9028900861740112 -0.0 0.9916535019874573 0.5718526840209961 0 1.0 0 0.0 0 0.0 0 0.0 -0.029325008392333984 -0.11022009700536728 -0.2839455306529999 0.4822840094566345 0.8760032653808594 -0.0 0.9933782815933228 0.5736287832260132 0 1.0 0 0.0 0 0.0 0 0.0 -0.029325008392333984 -0.11022009700536728 0.21605446934700012 0.4822534918785095 0.8760032653808594 -0.0 1.476720929145813 0.4145115613937378 0 1.0 0 0.0 0 0.0 0 0.0 -1.4989076852798462 -0.12287820875644684 -0.2839455306529999 -0.055207982659339905 0.9984435439109802 -0.0 0.04073569178581238 0.4737977385520935 0 1.0 0 0.0 0 0.0 0 0.0 -1.5033273696899414 -0.12299982458353043 -0.2839455306529999 -0.0003662221133708954 0.999969482421875 -0.0 0.04333144426345825 0.47333264350891113 0 1.0 0 0.0 0 0.0 0 0.0 -1.5033273696899414 -0.12299982458353043 0.21605446934700012 -0.0003662221133708954 0.999969482421875 -0.0 0.5295165181159973 0.2786363959312439 0 1.0 0 0.0 0 0.0 0 0.0 0.033391714096069336 -0.11124654114246368 -0.2839455306529999 -0.3908810615539551 0.9204077124595642 -0.0 0.9529252052307129 0.569171667098999 0 1.0 0 0.0 0 0.0 0 0.0 0.029735803604125977 -0.11268772929906845 -0.2839455306529999 -0.3422955870628357 0.939573347568512 -0.0 0.9552810788154602 0.567670464515686 0 1.0 0 0.0 0 0.0 0 0.0 0.029735803604125977 -0.11268772929906845 0.21605446934700012 -0.3422650694847107 0.939573347568512 -0.0 0.5154080986976624 0.4110640287399292 0 1.0 0 0.0 0 0.0 0 0.0 0.9929563999176025 -0.10797744989395142 -0.2839455306529999 0.522049605846405 0.8529008030891418 -0.0 0.0059764087200164795 0.45341217517852783 0 1.0 0 0.0 0 0.0 0 0.0 0.988616943359375 -0.10510359704494476 -0.2839455306529999 0.5808892846107483 0.8139591813087463 -0.0 0.008523315191268921 0.4566870927810669 0 1.0 0 0.0 0 0.0 0 0.0 0.988616943359375 -0.10510359704494476 0.21605446934700012 0.5808892846107483 0.8139591813087463 -0.0 0.4585016369819641 0.29474544525146484 0 1.0 0 0.0 0 0.0 0 0.0 1.5220859050750732 0.1755431890487671 -0.2839455306529999 0.4920499324798584 0.8705404996871948 -0.0 0.9099534153938293 0.7522071599960327 0 1.0 0 0.0 0 0.0 0 0.0 1.5150806903839111 0.17916986346244812 -0.2839455306529999 0.4293954372406006 0.9030731916427612 -0.0 0.914077639579773 0.7575942277908325 0 1.0 0 0.0 0 0.0 0 0.0 1.5150806903839111 0.17916986346244812 0.21605448424816132 0.4293954372406006 0.9030731916427612 -0.0 0.5379581451416016 0.6052162051200867 0 1.0 0 0.0 0 0.0 0 0.0 -0.9978787899017334 -0.148744136095047 -0.2839455306529999 0.7195959091186523 -0.69435715675354 -0.0 0.9787807464599609 0.447887122631073 0 1.0 0 0.0 0 0.0 0 0.0 -0.9936841726303101 -0.14422355592250824 -0.2839455306529999 0.7458113431930542 -0.6661275029182434 -0.0 0.9765768051147461 0.45268338918685913 0 1.0 0 0.0 0 0.0 0 0.0 -0.9936841726303101 -0.14422355592250824 0.21605446934700012 0.7458113431930542 -0.6661275029182434 -0.0 0.6177242398262024 0.2753394842147827 0 1.0 0 0.0 0 0.0 0 0.0 1.0721542835235596 -0.10618721693754196 -0.2839455306529999 -0.6264839768409729 0.7794122099876404 -0.0 0.9594686031341553 0.4537491202354431 0 1.0 0 0.0 0 0.0 0 0.0 1.06947660446167 -0.10820123553276062 -0.2839455306529999 -0.5766167044639587 0.8169804811477661 -0.0 0.9610819220542908 0.45160144567489624 0 1.0 0 0.0 0 0.0 0 0.0 1.06947660446167 -0.10820123553276062 0.21605446934700012 -0.5766472220420837 0.8169804811477661 -0.0 0.5177067518234253 0.29019415378570557 0 1.0 0 0.0 0 0.0 0 0.0 1.3183887004852295 0.17791959643363953 -0.2839455306529999 -0.4528946876525879 0.8915371894836426 -0.0 0.06119370460510254 0.7588618993759155 0 1.0 0 0.0 0 0.0 0 0.0 1.3105661869049072 0.17357537150382996 -0.2839455306529999 -0.5195165872573853 0.8544266819953918 -0.0 0.06582871079444885 0.7527941465377808 0 1.0 0 0.0 0 0.0 0 0.0 1.3105661869049072 0.17357537150382996 0.21605448424816132 -0.5195165872573853 0.8544266819953918 -0.0 0.42852169275283813 0.6030383110046387 0 1.0 0 0.0 0 0.0 0 0.0 -1.5033273696899414 -0.12299982458353043 -0.2839455306529999 -0.0003662221133708954 0.999969482421875 -0.0 0.04333144426345825 0.47333264350891113 0 1.0 0 0.0 0 0.0 0 0.0 -1.5072386264801025 -0.12289523333311081 -0.2839455306529999 0.05456709489226341 0.9985045790672302 -0.0 0.045634716749191284 0.47315794229507446 0 1.0 0 0.0 0 0.0 0 0.0 -1.5072386264801025 -0.12289523333311081 0.21605446934700012 0.05456709489226341 0.9985045790672302 -0.0 0.5265249013900757 0.2786164879798889 0 1.0 0 0.0 0 0.0 0 0.0 -0.023895978927612305 -0.11280328780412674 -0.2839455306529999 0.37705618143081665 0.9261757135391235 -0.0 0.989861011505127 0.5702477097511292 0 1.0 0 0.0 0 0.0 0 0.0 -0.026664018630981445 -0.11158344894647598 -0.2839455306529999 0.4297921657562256 0.9028900861740112 -0.0 0.9916535019874573 0.5718526840209961 0 1.0 0 0.0 0 0.0 0 0.0 -0.026664018630981445 -0.11158344894647598 0.21605446934700012 0.4297921657562256 0.9028900861740112 -0.0 1.478442907333374 0.4126579165458679 0 1.0 0 0.0 0 0.0 0 0.0 -1.002187728881836 -0.15303850173950195 -0.2839455306529999 0.6915494203567505 -0.7223120927810669 -0.0 0.9810384511947632 0.44331806898117065 0 1.0 0 0.0 0 0.0 0 0.0 -0.9978787899017334 -0.148744136095047 -0.2839455306529999 0.7195959091186523 -0.69435715675354 -0.0 0.9787807464599609 0.447887122631073 0 1.0 0 0.0 0 0.0 0 0.0 -0.9978787899017334 -0.148744136095047 0.21605446934700012 0.7195959091186523 -0.69435715675354 -0.0 0.6158398389816284 0.26952022314071655 0 1.0 0 0.0 0 0.0 0 0.0 0.029735803604125977 -0.11268772929906845 -0.2839455306529999 -0.3422955870628357 0.939573347568512 -0.0 0.9552810788154602 0.567670464515686 0 1.0 0 0.0 0 0.0 0 0.0 0.02600693702697754 -0.11393675953149796 -0.2839455306529999 -0.2928251028060913 0.9561449289321899 -0.0 0.9576817154884338 0.5663930773735046 0 1.0 0 0.0 0 0.0 0 0.0 0.02600693702697754 -0.11393675953149796 0.21605446934700012 -0.2927945852279663 0.9561449289321899 -0.0 0.5130330324172974 0.40937238931655884 0 1.0 0 0.0 0 0.0 0 0.0 -1.2001348733901978 -0.14893993735313416 -0.2839455306529999 -0.7076326608657837 -0.7065340280532837 -0.0 0.08885562419891357 0.4333972930908203 0 1.0 0 0.0 0 0.0 0 0.0 -1.1921335458755493 -0.15647423267364502 -0.2839455306529999 -0.6614276766777039 -0.7499618530273438 -0.0 0.08416959643363953 0.4265134930610657 0 1.0 0 0.0 0 0.0 0 0.0 -1.1921335458755493 -0.15647423267364502 0.21605446934700012 -0.6614276766777039 -0.7499618530273438 -0.0 0.4703311324119568 0.24293971061706543 0 1.0 0 0.0 0 0.0 0 0.0 1.1790039539337158 -0.11511890590190887 -0.2839455306529999 0.8657185435295105 -0.5005035400390625 -0.0 0.9049659967422485 0.44851458072662354 0 1.0 0 0.0 0 0.0 0 0.0 1.183220386505127 -0.10738029330968857 -0.2839455306529999 0.8894924521446228 -0.45689260959625244 -0.0 0.9025294780731201 0.45596277713775635 0 1.0 0 0.0 0 0.0 0 0.0 1.183220386505127 -0.10738029330968857 0.21605446934700012 0.8894924521446228 -0.45689260959625244 -0.0 0.5869276523590088 0.31774646043777466 0 1.0 0 0.0 0 0.0 0 0.0 1.5285465717315674 0.17157110571861267 -0.2839455306529999 0.5530259013175964 0.8331248164176941 -0.0 0.9063416719436646 0.7466293573379517 0 1.0 0 0.0 0 0.0 0 0.0 1.5220859050750732 0.1755431890487671 -0.2839455306529999 0.4920499324798584 0.8705404996871948 -0.0 0.9099534153938293 0.7522071599960327 0 1.0 0 0.0 0 0.0 0 0.0 1.5220859050750732 0.1755431890487671 0.21605448424816132 0.4920499324798584 0.8705404996871948 -0.0 0.5415668487548828 0.6013186573982239 0 1.0 0 0.0 0 0.0 0 0.0 -1.325623869895935 -0.12997224926948547 -0.2839455306529999 0.9856868386268616 0.16852320730686188 -0.0 0.94827800989151 0.48277735710144043 0 1.0 0 0.0 0 0.0 0 0.0 -1.3263133764266968 -0.12555383145809174 -0.2839455306529999 0.9898678660392761 0.14185002446174622 -0.0 0.9483564496040344 0.4868885278701782 0 1.0 0 0.0 0 0.0 0 0.0 -1.3263133764266968 -0.12555383145809174 0.21605446934700012 0.9898678660392761 0.14185002446174622 -0.0 0.6438645124435425 0.3257516026496887 0 1.0 0 0.0 0 0.0 0 0.0 1.3105661869049072 0.17357537150382996 -0.2839455306529999 -0.5195165872573853 0.8544266819953918 -0.0 0.06582871079444885 0.7527941465377808 0 1.0 0 0.0 0 0.0 0 0.0 1.3033273220062256 0.1687738597393036 -0.2839455306529999 -0.5868709087371826 0.8096560835838318 -0.0 0.06988972425460815 0.7464204430580139 0 1.0 0 0.0 0 0.0 0 0.0 1.3033273220062256 0.1687738597393036 0.21605446934700012 -0.5868709087371826 0.8096560835838318 -0.0 0.4247434735298157 0.5983360409736633 0 1.0 0 0.0 0 0.0 0 0.0 0.9974515438079834 -0.11051320284605026 -0.2839455306529999 0.4595782458782196 0.8881191611289978 -0.0 0.0033438801765441895 0.4505161643028259 0 1.0 0 0.0 0 0.0 0 0.0 0.9929563999176025 -0.10797744989395142 -0.2839455306529999 0.522049605846405 0.8529008030891418 -0.0 0.0059764087200164795 0.45341217517852783 0 1.0 0 0.0 0 0.0 0 0.0 0.9929563999176025 -0.10797744989395142 0.21605446934700012 0.522049605846405 0.8529008030891418 -0.0 0.46149224042892456 0.29107022285461426 0 1.0 0 0.0 0 0.0 0 0.0 -1.648117184638977 -0.12588948011398315 -0.2839455306529999 -0.921933650970459 -0.3872798979282379 -0.0 0.11914879083633423 0.4643626809120178 0 1.0 0 0.0 0 0.0 0 0.0 -1.6451290845870972 -0.13234259188175201 -0.2839455306529999 -0.8916593194007874 -0.4526505470275879 -0.0 0.11716088652610779 0.45843058824539185 0 1.0 0 0.0 0 0.0 0 0.0 -1.6451290845870972 -0.13234259188175201 0.21605446934700012 -0.8916593194007874 -0.4526505470275879 -0.0 0.43501198291778564 0.29271793365478516 0 1.0 0 0.0 0 0.0 0 0.0 -0.021020889282226562 -0.11387961357831955 -0.2839455306529999 0.3246864080429077 0.9457991123199463 -0.0 0.9880005121231079 0.5688133239746094 0 1.0 0 0.0 0 0.0 0 0.0 -0.023895978927612305 -0.11280328780412674 -0.2839455306529999 0.37705618143081665 0.9261757135391235 -0.0 0.989861011505127 0.5702477097511292 0 1.0 0 0.0 0 0.0 0 0.0 -0.023895978927612305 -0.11280328780412674 0.21605446934700012 0.37705618143081665 0.9261757135391235 -0.0 1.4802451133728027 0.4109910726547241 0 1.0 0 0.0 0 0.0 0 0.0 -1.0066109895706177 -0.1571066677570343 -0.2839455306529999 0.6617023348808289 -0.7497482299804688 -0.0 0.983351469039917 0.4389737844467163 0 1.0 0 0.0 0 0.0 0 0.0 -1.002187728881836 -0.15303850173950195 -0.2839455306529999 0.6915494203567505 -0.7223120927810669 -0.0 0.9810384511947632 0.44331806898117065 0 1.0 0 0.0 0 0.0 0 0.0 -1.002187728881836 -0.15303850173950195 0.21605446934700012 0.6915494203567505 -0.7223120927810669 -0.0 0.6137987971305847 0.26391035318374634 0 1.0 0 0.0 0 0.0 0 0.0 1.06947660446167 -0.10820123553276062 -0.2839455306529999 -0.5766167044639587 0.8169804811477661 -0.0 0.9610819220542908 0.45160144567489624 0 1.0 0 0.0 0 0.0 0 0.0 1.0666964054107666 -0.11004011332988739 -0.2839455306529999 -0.5260170102119446 0.8504592776298523 -0.0 0.9627474546432495 0.44964832067489624 0 1.0 0 0.0 0 0.0 0 0.0 1.0666964054107666 -0.11004011332988739 0.21605446934700012 -0.5260170102119446 0.8504592776298523 -0.0 0.5157464742660522 0.2879374027252197 0 1.0 0 0.0 0 0.0 0 0.0 -0.1504817008972168 -0.11334571242332458 -0.2839455306529999 -0.9624622464179993 -0.2713705897331238 -0.0 0.06511396169662476 0.564522385597229 0 1.0 0 0.0 0 0.0 0 0.0 -0.1487255096435547 -0.11909829080104828 -0.2839455306529999 -0.9493392705917358 -0.31418806314468384 -0.0 0.0639059841632843 0.558230996131897 0 1.0 0 0.0 0 0.0 0 0.0 -0.1487255096435547 -0.11909829080104828 0.21605446934700012 -0.9493392705917358 -0.31418806314468384 -0.0 0.4047989249229431 0.4177280068397522 0 1.0 0 0.0 0 0.0 0 0.0 -1.1921335458755493 -0.15647423267364502 -0.2839455306529999 -0.6614276766777039 -0.7499618530273438 -0.0 0.08416959643363953 0.4265134930610657 0 1.0 0 0.0 0 0.0 0 0.0 -1.183876872062683 -0.16329097747802734 -0.2839455306529999 -0.6098818778991699 -0.7924436330795288 -0.0 0.07939448952674866 0.42037463188171387 0 1.0 0 0.0 0 0.0 0 0.0 -1.183876872062683 -0.16329097747802734 0.21605446934700012 -0.6098818778991699 -0.7924436330795288 -0.0 0.4759005308151245 0.23481398820877075 0 1.0 0 0.0 0 0.0 0 0.0 1.5345737934112549 0.16726094484329224 -0.2839455306529999 0.6066164374351501 0.7949766516685486 -0.0 0.9031447768211365 0.740845263004303 0 1.0 0 0.0 0 0.0 0 0.0 1.5285465717315674 0.17157110571861267 -0.2839455306529999 0.5530259013175964 0.8331248164176941 -0.0 0.9063416719436646 0.7466293573379517 0 1.0 0 0.0 0 0.0 0 0.0 1.5285465717315674 0.17157110571861267 0.21605448424816132 0.5530259013175964 0.8331248164176941 -0.0 0.5448878407478333 0.597155749797821 0 1.0 0 0.0 0 0.0 0 0.0 1.0666964054107666 -0.11004011332988739 -0.2839455306529999 -0.5260170102119446 0.8504592776298523 -0.0 0.9627474546432495 0.44964832067489624 0 1.0 0 0.0 0 0.0 0 0.0 1.0638139247894287 -0.11170385777950287 -0.2839455306529999 -0.47331157326698303 0.8808557391166687 -0.0 0.964465856552124 0.44788867235183716 0 1.0 0 0.0 0 0.0 0 0.0 1.0638139247894287 -0.11170385777950287 0.21605446934700012 -0.47331157326698303 0.8808557391166687 -0.0 0.5136916637420654 0.28588324785232544 0 1.0 0 0.0 0 0.0 0 0.0 -1.3248685598373413 -0.13403309881687164 -0.2839455306529999 0.9803460836410522 0.19721060991287231 -0.0 0.9481543302536011 0.47905391454696655 0 1.0 0 0.0 0 0.0 0 0.0 -1.325623869895935 -0.12997224926948547 -0.2839455306529999 0.9856868386268616 0.16852320730686188 -0.0 0.94827800989151 0.48277735710144043 0 1.0 0 0.0 0 0.0 0 0.0 -1.325623869895935 -0.12997224926948547 0.21605446934700012 0.9856868386268616 0.16852320730686188 -0.0 0.6448163986206055 0.32196974754333496 0 1.0 0 0.0 0 0.0 0 0.0 1.3033273220062256 0.1687738597393036 -0.2839455306529999 -0.5868709087371826 0.8096560835838318 -0.0 0.06988972425460815 0.7464204430580139 0 1.0 0 0.0 0 0.0 0 0.0 1.2966725826263428 0.16351506114006042 -0.2839455306529999 -0.6484267711639404 0.7612537145614624 -0.0 0.07341435551643372 0.7397623658180237 0 1.0 0 0.0 0 0.0 0 0.0 1.2966725826263428 0.16351506114006042 0.21605446934700012 -0.6484267711639404 0.7612537145614624 -0.0 0.4212533235549927 0.593255877494812 0 1.0 0 0.0 0 0.0 0 0.0 -1.6451290845870972 -0.13234259188175201 -0.2839455306529999 -0.8916593194007874 -0.4526505470275879 -0.0 0.11716088652610779 0.45843058824539185 0 1.0 0 0.0 0 0.0 0 0.0 -1.64168119430542 -0.13856706023216248 -0.2839455306529999 -0.8568071722984314 -0.5155797004699707 -0.0 0.11499348282814026 0.45273905992507935 0 1.0 0 0.0 0 0.0 0 0.0 -1.64168119430542 -0.13856706023216248 0.21605446934700012 -0.8568071722984314 -0.5155797004699707 -0.0 0.4363168179988861 0.2858927845954895 0 1.0 0 0.0 0 0.0 0 0.0 -0.01803874969482422 -0.11481243371963501 -0.2839455306529999 0.27314066886901855 0.9619433879852295 -0.0 0.9860718846321106 0.5675491690635681 0 1.0 0 0.0 0 0.0 0 0.0 -0.021020889282226562 -0.11387961357831955 -0.2839455306529999 0.3246864080429077 0.9457991123199463 -0.0 0.9880005121231079 0.5688133239746094 0 1.0 0 0.0 0 0.0 0 0.0 -0.021020889282226562 -0.11387961357831955 0.21605446934700012 0.3246864080429077 0.9457991123199463 -0.0 1.4821268320083618 0.409512996673584 0 1.0 0 0.0 0 0.0 0 0.0 -1.0111485719680786 -0.16094860434532166 -0.2839455306529999 0.6300546526908875 -0.7765129804611206 -0.0 0.9857213497161865 0.4348520040512085 0 1.0 0 0.0 0 0.0 0 0.0 -1.0066109895706177 -0.1571066677570343 -0.2839455306529999 0.6617023348808289 -0.7497482299804688 -0.0 0.983351469039917 0.4389737844467163 0 1.0 0 0.0 0 0.0 0 0.0 -1.0066109895706177 -0.1571066677570343 0.21605446934700012 0.6617023348808289 -0.7497482299804688 -0.0 0.6115951538085938 0.25851088762283325 0 1.0 0 0.0 0 0.0 0 0.0 0.02600693702697754 -0.11393675953149796 -0.2839455306529999 -0.2928251028060913 0.9561449289321899 -0.0 0.9576817154884338 0.5663930773735046 0 1.0 0 0.0 0 0.0 0 0.0 0.022205114364624023 -0.1149936318397522 -0.2839455306529999 -0.24289681017398834 0.9700308442115784 -0.0 0.9601279497146606 0.5653409957885742 0 1.0 0 0.0 0 0.0 0 0.0 0.022205114364624023 -0.1149936318397522 0.21605446934700012 -0.24289681017398834 0.9700308442115784 -0.0 0.5105903148651123 0.40793150663375854 0 1.0 0 0.0 0 0.0 0 0.0 1.0021021366119385 -0.1127108559012413 -0.2839455306529999 0.39429914951324463 0.9189733266830444 -0.0 0.0006244778633117676 0.4479961395263672 0 1.0 0 0.0 0 0.0 0 0.0 0.9974515438079834 -0.11051320284605026 -0.2839455306529999 0.4595782458782196 0.8881191611289978 -0.0 0.0033438801765441895 0.4505161643028259 0 1.0 0 0.0 0 0.0 0 0.0 0.9974515438079834 -0.11051320284605026 0.21605446934700012 0.4595782458782196 0.8881191611289978 -0.0 0.46464958786964417 0.2878061532974243 0 1.0 0 0.0 0 0.0 0 0.0 1.5402801036834717 0.16261997818946838 -0.2839455306529999 0.6549577116966248 0.7556383013725281 -0.0 0.9002732038497925 0.7348307967185974 0 1.0 0 0.0 0 0.0 0 0.0 1.5345737934112549 0.16726094484329224 -0.2839455306529999 0.6066164374351501 0.7949766516685486 -0.0 0.9031447768211365 0.740845263004303 0 1.0 0 0.0 0 0.0 0 0.0 1.5345737934112549 0.16726094484329224 0.21605446934700012 0.6066164374351501 0.7949766516685486 -0.0 0.5479841232299805 0.5927216410636902 0 1.0 0 0.0 0 0.0 0 0.0 -1.0158004760742188 -0.1645643413066864 -0.2839455306529999 0.5967284440994263 -0.8024231791496277 -0.0 0.9881497621536255 0.4309505224227905 0 1.0 0 0.0 0 0.0 0 0.0 -1.0111485719680786 -0.16094860434532166 -0.2839455306529999 0.6300546526908875 -0.7765129804611206 -0.0 0.9857213497161865 0.4348520040512085 0 1.0 0 0.0 0 0.0 0 0.0 -1.0111485719680786 -0.16094860434532166 0.21605446934700012 0.6300546526908875 -0.7765129804611206 -0.0 0.6092228889465332 0.25332319736480713 0 1.0 0 0.0 0 0.0 0 0.0 0.8773789405822754 -0.1112854853272438 -0.2839455306529999 -0.8742942810058594 -0.4853358566761017 -0.0 0.06675374507904053 0.4581591486930847 0 1.0 0 0.0 0 0.0 0 0.0 0.8827424049377441 -0.12030474841594696 -0.2839455306529999 -0.843745231628418 -0.5366985201835632 -0.0 0.06383192539215088 0.4491479992866516 0 1.0 0 0.0 0 0.0 0 0.0 0.8827424049377441 -0.12030474841594696 0.21605446934700012 -0.843745231628418 -0.5366985201835632 -0.0 0.3912193775177002 0.3077763319015503 0 1.0 0 0.0 0 0.0 0 0.0 -1.3240233659744263 -0.13793829083442688 -0.2839455306529999 0.9746391177177429 0.22376170754432678 -0.0 0.947985827922821 0.47552597522735596 0 1.0 0 0.0 0 0.0 0 0.0 -1.3248685598373413 -0.13403309881687164 -0.2839455306529999 0.9803460836410522 0.19721060991287231 -0.0 0.9481543302536011 0.47905391454696655 0 1.0 0 0.0 0 0.0 0 0.0 -1.3248685598373413 -0.13403309881687164 0.21605446934700012 0.9803460836410522 0.19721060991287231 -0.0 0.6457487344741821 0.31858688592910767 0 1.0 0 0.0 0 0.0 0 0.0 1.2966725826263428 0.16351506114006042 -0.2839455306529999 -0.6484267711639404 0.7612537145614624 -0.0 0.07341435551643372 0.7397623658180237 0 1.0 0 0.0 0 0.0 0 0.0 1.290574312210083 0.15792062878608704 -0.2839455306529999 -0.6993011236190796 0.7147740125656128 -0.0 0.07646352052688599 0.7329279184341431 0 1.0 0 0.0 0 0.0 0 0.0 1.290574312210083 0.15792062878608704 0.21605446934700012 -0.6993011236190796 0.7147740125656128 -0.0 0.41803431510925293 0.5878973007202148 0 1.0 0 0.0 0 0.0 0 0.0 -1.183876872062683 -0.16329097747802734 -0.2839455306529999 -0.6098818778991699 -0.7924436330795288 -0.0 0.07939448952674866 0.42037463188171387 0 1.0 0 0.0 0 0.0 0 0.0 -1.1753647327423096 -0.16939017176628113 -0.2839455306529999 -0.5531174540519714 -0.8330637812614441 -0.0 0.07452532649040222 0.4149724841117859 0 1.0 0 0.0 0 0.0 0 0.0 -1.1753647327423096 -0.16939017176628113 0.21605446934700012 -0.5531174540519714 -0.8330637812614441 -0.0 0.48195916414260864 0.22752833366394043 0 1.0 0 0.0 0 0.0 0 0.0 -0.014949560165405273 -0.11560174077749252 -0.2839455306529999 0.2228461503982544 0.9748222231864929 -0.0 0.9840749502182007 0.5664546489715576 0 1.0 0 0.0 0 0.0 0 0.0 -0.01803874969482422 -0.11481243371963501 -0.2839455306529999 0.27314066886901855 0.9619433879852295 -0.0 0.9860718846321106 0.5675491690635681 0 1.0 0 0.0 0 0.0 0 0.0 -0.01803874969482422 -0.11481243371963501 0.21605446934700012 0.27311015129089355 0.9619739651679993 -0.0 1.484087347984314 0.40822577476501465 0 1.0 0 0.0 0 0.0 0 0.0 1.0638139247894287 -0.11170385777950287 -0.2839455306529999 -0.47331157326698303 0.8808557391166687 -0.0 0.964465856552124 0.44788867235183716 0 1.0 0 0.0 0 0.0 0 0.0 1.0608294010162354 -0.11319247633218765 -0.2839455306529999 -0.4191106855869293 0.9079256653785706 -0.0 0.9662376642227173 0.44632160663604736 0 1.0 0 0.0 0 0.0 0 0.0 1.0608294010162354 -0.11319247633218765 0.21605446934700012 -0.4191106855869293 0.9078951478004456 -0.0 0.5115428566932678 0.2840333580970764 0 1.0 0 0.0 0 0.0 0 0.0 -1.3230637311935425 -0.14188969135284424 -0.2839455306529999 0.9688100814819336 0.24771873652935028 -0.0 0.9477726221084595 0.4720093607902527 0 1.0 0 0.0 0 0.0 0 0.0 -1.3240233659744263 -0.13793829083442688 -0.2839455306529999 0.9746391177177429 0.22376170754432678 -0.0 0.947985827922821 0.47552597522735596 0 1.0 0 0.0 0 0.0 0 0.0 -1.3240233659744263 -0.13793829083442688 0.21605446934700012 0.9746086001396179 0.22376170754432678 -0.0 0.6467007398605347 0.3154236078262329 0 1.0 0 0.0 0 0.0 0 0.0 0.022205114364624023 -0.1149936318397522 -0.2839455306529999 -0.24289681017398834 0.9700308442115784 -0.0 0.9601279497146606 0.5653409957885742 0 1.0 0 0.0 0 0.0 0 0.0 0.01833033561706543 -0.11585834622383118 -0.2839455306529999 -0.19293801486492157 0.9812005758285522 -0.0 0.9626204967498779 0.5645154714584351 0 1.0 0 0.0 0 0.0 0 0.0 0.01833033561706543 -0.11585834622383118 0.21605446934700012 -0.19290749728679657 0.9812005758285522 -0.0 0.5080812573432922 0.40674519538879395 0 1.0 0 0.0 0 0.0 0 0.0 -1.64168119430542 -0.13856706023216248 -0.2839455306529999 -0.8568071722984314 -0.5155797004699707 -0.0 0.11499348282814026 0.45273905992507935 0 1.0 0 0.0 0 0.0 0 0.0 -1.6377736330032349 -0.14456287026405334 -0.2839455306529999 -0.8179876208305359 -0.575182318687439 -0.0 0.11264124512672424 0.4472789764404297 0 1.0 0 0.0 0 0.0 0 0.0 -1.6377736330032349 -0.14456287026405334 0.21605446934700012 -0.8179876208305359 -0.575182318687439 -0.0 0.4379253089427948 0.27917128801345825 0 1.0 0 0.0 0 0.0 0 0.0 1.5456655025482178 0.1576482057571411 -0.2839455306529999 0.7010712027549744 0.713064968585968 -0.0 0.8977097272872925 0.7285913228988647 0 1.0 0 0.0 0 0.0 0 0.0 1.5402801036834717 0.16261997818946838 -0.2839455306529999 0.6549577116966248 0.7556383013725281 -0.0 0.9002732038497925 0.7348307967185974 0 1.0 0 0.0 0 0.0 0 0.0 1.5402801036834717 0.16261997818946838 0.21605446934700012 0.6549577116966248 0.7556383013725281 -0.0 0.5509166121482849 0.5880075693130493 0 1.0 0 0.0 0 0.0 0 0.0 -1.020566701889038 -0.16795386373996735 -0.2839455306529999 0.5618457794189453 -0.8272347450256348 -0.0 0.9906381964683533 0.4272674322128296 0 1.0 0 0.0 0 0.0 0 0.0 -1.0158004760742188 -0.1645643413066864 -0.2839455306529999 0.5967284440994263 -0.8024231791496277 -0.0 0.9881497621536255 0.4309505224227905 0 1.0 0 0.0 0 0.0 0 0.0 -1.0158004760742188 -0.1645643413066864 0.21605446934700012 0.5967284440994263 -0.8024231791496277 -0.0 0.6066759824752808 0.24834954738616943 0 1.0 0 0.0 0 0.0 0 0.0 1.290574312210083 0.15792062878608704 -0.2839455306529999 -0.6993011236190796 0.7147740125656128 -0.0 0.07646352052688599 0.7329279184341431 0 1.0 0 0.0 0 0.0 0 0.0 1.2850067615509033 0.15211209654808044 -0.2839455306529999 -0.7448957562446594 0.6671346426010132 -0.0 0.07909286022186279 0.7260227799415588 0 1.0 0 0.0 0 0.0 0 0.0 1.2850067615509033 0.15211209654808044 0.21605446934700012 -0.7448957562446594 0.6671346426010132 -0.0 0.4150726795196533 0.582361102104187 0 1.0 0 0.0 0 0.0 0 0.0 1.0069084167480469 -0.11457040905952454 -0.2839455306529999 0.3271889388561249 0.9449446201324463 -0.0 0.9978166818618774 0.4458499550819397 0 1.0 0 0.0 0 0.0 0 0.0 1.0021021366119385 -0.1127108559012413 -0.2839455306529999 0.39429914951324463 0.9189733266830444 -0.0 1.000624418258667 0.4479961395263672 0 1.0 0 0.0 0 0.0 0 0.0 1.0021021366119385 -0.1127108559012413 0.21605446934700012 0.39429914951324463 0.9189733266830444 -0.0 1.4679713249206543 0.28495705127716064 0 1.0 0 0.0 0 0.0 0 0.0 -0.011753320693969727 -0.11624753475189209 -0.2839455306529999 0.1742301732301712 0.9846796989440918 -0.0 0.982009768486023 0.5655289888381958 0 1.0 0 0.0 0 0.0 0 0.0 -0.014949560165405273 -0.11560174077749252 -0.2839455306529999 0.2228461503982544 0.9748222231864929 -0.0 0.9840749502182007 0.5664546489715576 0 1.0 0 0.0 0 0.0 0 0.0 -0.014949560165405273 -0.11560174077749252 0.21605446934700012 0.2228461503982544 0.9748222231864929 -0.0 0.48612532019615173 0.40713149309158325 0 1.0 0 0.0 0 0.0 0 0.0 -1.0254472494125366 -0.1711171716451645 -0.2839455306529999 0.5254982113838196 -0.8507645130157471 -0.0 0.9931881427764893 0.4238011837005615 0 1.0 0 0.0 0 0.0 0 0.0 -1.020566701889038 -0.16795386373996735 -0.2839455306529999 0.5618457794189453 -0.8272347450256348 -0.0 0.9906381964683533 0.4272674322128296 0 1.0 0 0.0 0 0.0 0 0.0 -1.020566701889038 -0.16795386373996735 0.21605446934700012 0.5618457794189453 -0.8272347450256348 -0.0 0.6039486527442932 0.24359291791915894 0 1.0 0 0.0 0 0.0 0 0.0 1.0608294010162354 -0.11319247633218765 -0.2839455306529999 -0.4191106855869293 0.9079256653785706 -0.0 0.9662376642227173 0.44632160663604736 0 1.0 0 0.0 0 0.0 0 0.0 1.0577425956726074 -0.11450596153736115 -0.2839455306529999 -0.3640247881412506 0.9313638806343079 -0.0 0.9680637121200562 0.4449465274810791 0 1.0 0 0.0 0 0.0 0 0.0 1.0577425956726074 -0.11450596153736115 0.21605446934700012 -0.3640247881412506 0.9313638806343079 -0.0 0.5093002319335938 0.28238970041275024 0 1.0 0 0.0 0 0.0 0 0.0 0.01833033561706543 -0.11585834622383118 -0.2839455306529999 -0.19293801486492157 0.9812005758285522 -0.0 0.9626204967498779 0.5645154714584351 0 1.0 0 0.0 0 0.0 0 0.0 0.014382600784301758 -0.1165309026837349 -0.2839455306529999 -0.143314927816391 0.9896542429924011 -0.0 0.9651601314544678 0.5639175772666931 0 1.0 0 0.0 0 0.0 0 0.0 0.014382600784301758 -0.1165309026837349 0.21605446934700012 -0.143314927816391 0.9896542429924011 -0.0 0.50550776720047 0.4058172106742859 0 1.0 0 0.0 0 0.0 0 0.0 -1.1753647327423096 -0.16939017176628113 -0.2839455306529999 -0.5531174540519714 -0.8330637812614441 -0.0 0.07452532649040222 0.4149724841117859 0 1.0 0 0.0 0 0.0 0 0.0 -1.1665972471237183 -0.17477181553840637 -0.2839455306529999 -0.491470068693161 -0.8708761930465698 -0.0 0.06955760717391968 0.41030001640319824 0 1.0 0 0.0 0 0.0 0 0.0 -1.1665972471237183 -0.17477181553840637 0.21605445444583893 -0.491470068693161 -0.8708761930465698 -0.0 0.48851171135902405 0.22110700607299805 0 1.0 0 0.0 0 0.0 0 0.0 1.5507299900054932 0.15234562754631042 -0.2839455306529999 0.7444074749946594 0.6676839590072632 -0.0 0.8954375982284546 0.7221292853355408 0 1.0 0 0.0 0 0.0 0 0.0 1.5456655025482178 0.1576482057571411 -0.2839455306529999 0.7010712027549744 0.713064968585968 -0.0 0.8977097272872925 0.7285913228988647 0 1.0 0 0.0 0 0.0 0 0.0 1.5456655025482178 0.1576482057571411 0.21605446934700012 0.7010712027549744 0.713064968585968 -0.0 0.5536909103393555 0.583011269569397 0 1.0 0 0.0 0 0.0 0 0.0 1.0577425956726074 -0.11450596153736115 -0.2839455306529999 -0.3640247881412506 0.9313638806343079 -0.0 0.9680637121200562 0.4449465274810791 0 1.0 0 0.0 0 0.0 0 0.0 1.054553747177124 -0.11564431339502335 -0.2839455306529999 -0.3086642026901245 0.9511398673057556 -0.0 0.9699445366859436 0.44376295804977417 0 1.0 0 0.0 0 0.0 0 0.0 1.054553747177124 -0.11564431339502335 0.21605446934700012 -0.3086642026901245 0.9511398673057556 -0.0 0.506964921951294 0.2809547185897827 0 1.0 0 0.0 0 0.0 0 0.0 -1.321989893913269 -0.14588730037212372 -0.2839455306529999 0.9626453518867493 0.2706686556339264 -0.0 0.9475157260894775 0.46850723028182983 0 1.0 0 0.0 0 0.0 0 0.0 -1.3230637311935425 -0.14188969135284424 -0.2839455306529999 0.9688100814819336 0.24771873652935028 -0.0 0.9477726221084595 0.4720093607902527 0 1.0 0 0.0 0 0.0 0 0.0 -1.3230637311935425 -0.14188969135284424 0.21605446934700012 0.9688100814819336 0.24771873652935028 -0.0 0.6477121114730835 0.31230872869491577 0 1.0 0 0.0 0 0.0 0 0.0 1.5554730892181396 0.14671224355697632 -0.2839455306529999 0.7844783067703247 0.6201055645942688 -0.0 0.8934417963027954 0.7154445648193359 0 1.0 0 0.0 0 0.0 0 0.0 1.5507299900054932 0.15234562754631042 -0.2839455306529999 0.7444074749946594 0.6676839590072632 -0.0 0.8954375982284546 0.7221292853355408 0 1.0 0 0.0 0 0.0 0 0.0 1.5507299900054932 0.15234562754631042 0.21605446934700012 0.7444074749946594 0.6676839590072632 -0.0 0.5563123226165771 0.5777289867401123 0 1.0 0 0.0 0 0.0 0 0.0 -0.008450031280517578 -0.1167498230934143 -0.2839455306529999 0.1275063306093216 0.9918210506439209 -0.0 0.9798762798309326 0.5647714138031006 0 1.0 0 0.0 0 0.0 0 0.0 -0.011753320693969727 -0.11624753475189209 -0.2839455306529999 0.1742301732301712 0.9846796989440918 -0.0 0.982009768486023 0.5655289888381958 0 1.0 0 0.0 0 0.0 0 0.0 -0.011753320693969727 -0.11624753475189209 0.21605446934700012 0.1742301732301712 0.9846796989440918 -0.0 0.48823946714401245 0.4062318801879883 0 1.0 0 0.0 0 0.0 0 0.0 -1.0304421186447144 -0.17405426502227783 -0.2839455306529999 0.48789942264556885 -0.8728904128074646 -0.0 0.9958009719848633 0.4205503463745117 0 1.0 0 0.0 0 0.0 0 0.0 -1.0254472494125366 -0.1711171716451645 -0.2839455306529999 0.5254982113838196 -0.8507645130157471 -0.0 0.9931881427764893 0.4238011837005615 0 1.0 0 0.0 0 0.0 0 0.0 -1.0254472494125366 -0.1711171716451645 0.21605445444583893 0.5254982113838196 -0.8507645130157471 -0.0 0.6010351181030273 0.23905706405639648 0 1.0 0 0.0 0 0.0 0 0.0 -1.4217404127120972 -0.1473163217306137 -0.2839455306529999 0.6773888468742371 -0.7355876564979553 -0.0 0.9960373640060425 0.4553300738334656 0 1.0 0 0.0 0 0.0 0 0.0 -1.4175130128860474 -0.14331506192684174 -0.2839455306529999 0.6873989105224609 -0.7262489795684814 -0.0 0.993724524974823 0.45980244874954224 0 1.0 0 0.0 0 0.0 0 0.0 -1.4175130128860474 -0.14331506192684174 0.21605446934700012 0.6873989105224609 -0.7262489795684814 -0.0 0.5948898792266846 0.2739698886871338 0 1.0 0 0.0 0 0.0 0 0.0 1.2850067615509033 0.15211209654808044 -0.2839455306529999 -0.7448957562446594 0.6671346426010132 -0.0 0.07909286022186279 0.7260227799415588 0 1.0 0 0.0 0 0.0 0 0.0 1.2799692153930664 0.14608952403068542 -0.2839455306529999 -0.7892391681671143 0.6140323877334595 -0.0 0.08133089542388916 0.7190530300140381 0 1.0 0 0.0 0 0.0 0 0.0 1.2799692153930664 0.14608952403068542 0.21605446934700012 -0.7892391681671143 0.6140323877334595 -0.0 0.41235947608947754 0.5766454935073853 0 1.0 0 0.0 0 0.0 0 0.0 0.014382600784301758 -0.1165309026837349 -0.2839455306529999 -0.143314927816391 0.9896542429924011 -0.0 0.9651601314544678 0.5639175772666931 0 1.0 0 0.0 0 0.0 0 0.0 0.010361909866333008 -0.11701130121946335 -0.2839455306529999 -0.09445478767156601 0.9955137968063354 -0.0 0.9677476286888123 0.5635481476783752 0 1.0 0 0.0 0 0.0 0 0.0 0.010361909866333008 -0.11701130121946335 0.21605446934700012 -0.09445478767156601 0.9955137968063354 -0.0 0.5028718709945679 0.4051510691642761 0 1.0 0 0.0 0 0.0 0 0.0 1.0118703842163086 -0.11609186232089996 -0.2839455306529999 0.2593768239021301 0.965758204460144 -0.0 0.9949193596839905 0.4440760612487793 0 1.0 0 0.0 0 0.0 0 0.0 1.0069084167480469 -0.11457040905952454 -0.2839455306529999 0.3271889388561249 0.9449446201324463 -0.0 0.9978166818618774 0.4458499550819397 0 1.0 0 0.0 0 0.0 0 0.0 1.0069084167480469 -0.11457040905952454 0.21605446934700012 0.3271889388561249 0.9449446201324463 -0.0 1.4714545011520386 0.2825276851654053 0 1.0 0 0.0 0 0.0 0 0.0 -1.4175130128860474 -0.14331506192684174 -0.2839455306529999 -0.939817488193512 -0.3415936827659607 -0.0 0.993724524974823 0.45980244874954224 0 1.0 0 0.0 0 0.0 0 0.0 -1.4173282384872437 -0.14382342994213104 -0.2839455306529999 -0.9425031542778015 -0.3341471552848816 -0.0 0.9936280846595764 0.4593122601509094 0 1.0 0 0.0 0 0.0 0 0.0 -1.4173282384872437 -0.14382342994213104 0.21605446934700012 -0.9425031542778015 -0.3341471552848816 -0.0 0.595079779624939 0.27352941036224365 0 1.0 0 0.0 0 0.0 0 0.0 -1.0355515480041504 -0.17676514387130737 0.21605443954467773 0.4513382315635681 -0.8923307061195374 -0.0 0.5946286916732788 0.2306671142578125 0 1.0 0 0.0 0 0.0 0 0.0 -1.0355515480041504 -0.17676514387130737 -0.2839455306529999 0.4513382315635681 -0.8923307061195374 -0.0 0.9984782338142395 0.41751396656036377 0 1.0 0 0.0 0 0.0 0 0.0 -1.0304421186447144 -0.17405426502227783 -0.2839455306529999 0.48789942264556885 -0.8728904128074646 -0.0 0.9958009719848633 0.4205503463745117 0 1.0 0 0.0 0 0.0 0 0.0 -1.1665972471237183 -0.17477181553840637 -0.2839455306529999 -0.491470068693161 -0.8708761930465698 -0.0 0.06955760717391968 0.41030001640319824 0 1.0 0 0.0 0 0.0 0 0.0 -1.1575742959976196 -0.17943590879440308 -0.2839455306529999 -0.42558062076568604 -0.904904305934906 -0.0 0.06448733806610107 0.40635156631469727 0 1.0 0 0.0 0 0.0 0 0.0 -1.1575742959976196 -0.17943590879440308 0.21605445444583893 -0.42558062076568604 -0.904904305934906 -0.0 0.49555355310440063 0.2155786156654358 0 1.0 0 0.0 0 0.0 0 0.0 1.174483299255371 -0.12249995768070221 -0.2839455306529999 0.8388012051582336 -0.5444197058677673 -0.0 0.9075202941894531 0.4414207935333252 0 1.0 0 0.0 0 0.0 0 0.0 1.1790039539337158 -0.11511890590190887 -0.2839455306529999 0.8657185435295105 -0.5005035400390625 -0.0 0.9049659967422485 0.44851458072662354 0 1.0 0 0.0 0 0.0 0 0.0 1.1790039539337158 -0.11511890590190887 0.21605446934700012 0.8657185435295105 -0.5005035400390625 -0.0 0.5854707956314087 0.30921435356140137 0 1.0 0 0.0 0 0.0 0 0.0 -1.4173282384872437 -0.14382342994213104 -0.2839455306529999 -0.9425031542778015 -0.3341471552848816 -0.0 0.9936280846595764 0.4593122601509094 0 1.0 0 0.0 0 0.0 0 0.0 -1.4171239137649536 -0.1444144994020462 -0.2839455306529999 -0.9470503926277161 -0.32102420926094055 -0.0 0.9935218095779419 0.4587423801422119 0 1.0 0 0.0 0 0.0 0 0.0 -1.4171239137649536 -0.1444144994020462 0.21605446934700012 -0.9470503926277161 -0.32102420926094055 -0.0 0.5952936410903931 0.27301520109176636 0 1.0 0 0.0 0 0.0 0 0.0 1.5598952770233154 0.1407480537891388 -0.2839455306529999 0.8209478855133057 0.5709707736968994 -0.0 0.8917075395584106 0.708534300327301 0 1.0 0 0.0 0 0.0 0 0.0 1.5554730892181396 0.14671224355697632 -0.2839455306529999 0.7844783067703247 0.6201055645942688 -0.0 0.8934417963027954 0.7154445648193359 0 1.0 0 0.0 0 0.0 0 0.0 1.5554730892181396 0.14671224355697632 0.21605446934700012 0.7844783067703247 0.6201055645942688 -0.0 0.5587857961654663 0.5721555948257446 0 1.0 0 0.0 0 0.0 0 0.0 -0.00503993034362793 -0.11710859835147858 -0.2839455306529999 0.08285775035619736 0.9965513944625854 -0.0 0.9776747822761536 0.5641809701919556 0 1.0 0 0.0 0 0.0 0 0.0 -0.008450031280517578 -0.1167498230934143 -0.2839455306529999 0.1275063306093216 0.9918210506439209 -0.0 0.9798762798309326 0.5647714138031006 0 1.0 0 0.0 0 0.0 0 0.0 -0.008450031280517578 -0.1167498230934143 0.21605446934700012 0.1275063306093216 0.9918210506439209 -0.0 0.4904281795024872 0.4055290222167969 0 1.0 0 0.0 0 0.0 0 0.0 1.054553747177124 -0.11564431339502335 -0.2839455306529999 -0.3086642026901245 0.9511398673057556 -0.0 0.9699445366859436 0.44376295804977417 0 1.0 0 0.0 0 0.0 0 0.0 1.051262617111206 -0.11660753190517426 -0.2839455306529999 -0.2536393404006958 0.9672841429710388 -0.0 0.9718810319900513 0.44277089834213257 0 1.0 0 0.0 0 0.0 0 0.0 1.051262617111206 -0.11660753190517426 0.21605446934700012 -0.2536393404006958 0.9672841429710388 -0.0 0.5045377612113953 0.2797309160232544 0 1.0 0 0.0 0 0.0 0 0.0 1.2799692153930664 0.14608952403068542 -0.2839455306529999 -0.7892391681671143 0.6140323877334595 -0.0 0.08133089542388916 0.7190530300140381 0 1.0 0 0.0 0 0.0 0 0.0 1.2754619121551514 0.13985291123390198 -0.2839455306529999 -0.8313852548599243 0.5556504726409912 -0.0 0.08320233225822449 0.7120205163955688 0 1.0 0 0.0 0 0.0 0 0.0 1.2754619121551514 0.13985291123390198 0.21605446934700012 -0.8313852548599243 0.5556504726409912 -0.0 0.4098869264125824 0.5707464218139648 0 1.0 0 0.0 0 0.0 0 0.0 0.010361909866333008 -0.11701130121946335 -0.2839455306529999 -0.09445478767156601 0.9955137968063354 -0.0 0.9677476286888123 0.5635481476783752 0 1.0 0 0.0 0 0.0 0 0.0 0.00626826286315918 -0.11729954183101654 -0.2839455306529999 -0.04663228243589401 0.9989013075828552 -0.0 0.9703834056854248 0.5634076595306396 0 1.0 0 0.0 0 0.0 0 0.0 0.00626826286315918 -0.11729954183101654 0.21605446934700012 -0.04663228243589401 0.9989013075828552 -0.0 0.5001758337020874 0.4047499895095825 0 1.0 0 0.0 0 0.0 0 0.0 -1.4171239137649536 -0.1444144994020462 -0.2839455306529999 -0.9470503926277161 -0.32102420926094055 -0.0 0.9935218095779419 0.4587423801422119 0 1.0 0 0.0 0 0.0 0 0.0 -1.4169000387191772 -0.14508827030658722 -0.2839455306529999 -0.9504989981651306 -0.3106784224510193 -0.0 0.9934057593345642 0.45809316635131836 0 1.0 0 0.0 0 0.0 0 0.0 -1.4169000387191772 -0.14508827030658722 0.21605446934700012 -0.9504989981651306 -0.3106784224510193 -0.0 0.5955314636230469 0.27242761850357056 0 1.0 0 0.0 0 0.0 0 0.0 -1.0407215356826782 -0.1792546957731247 -0.2839455306529999 0.41798150539398193 -0.9084444642066956 -0.0 1.0011929273605347 0.41469377279281616 0 1.0 0 0.0 0 0.0 0 0.0 -1.0355515480041504 -0.17676514387130737 -0.2839455306529999 0.4513382315635681 -0.8923307061195374 -0.0 0.9984782338142395 0.41751396656036377 0 1.0 0 0.0 0 0.0 0 0.0 -1.0355515480041504 -0.17676514387130737 0.21605443954467773 0.4513382315635681 -0.8923307061195374 -0.0 0.5946286916732788 0.2306671142578125 0 1.0 0 0.0 0 0.0 0 0.0 1.0169880390167236 -0.11727521568536758 -0.2839455306529999 0.19186986982822418 0.9814141988754272 -0.0 0.9919314384460449 0.4426735043525696 0 1.0 0 0.0 0 0.0 0 0.0 1.0118703842163086 -0.11609186232089996 -0.2839455306529999 0.2593768239021301 0.965758204460144 -0.0 0.9949193596839905 0.4440760612487793 0 1.0 0 0.0 0 0.0 0 0.0 1.0118703842163086 -0.11609186232089996 0.21605446934700012 0.2593768239021301 0.965758204460144 -0.0 1.4750945568084717 0.28052353858947754 0 1.0 0 0.0 0 0.0 0 0.0 -1.6377736330032349 -0.14456287026405334 -0.2839455306529999 -0.8179876208305359 -0.575182318687439 -0.0 0.11264124512672424 0.4472789764404297 0 1.0 0 0.0 0 0.0 0 0.0 -1.6334062814712524 -0.15033003687858582 -0.2839455306529999 -0.7759636044502258 -0.6307260394096375 -0.0 0.11009809374809265 0.44204282760620117 0 1.0 0 0.0 0 0.0 0 0.0 -1.6334062814712524 -0.15033003687858582 0.21605446934700012 -0.7759636044502258 -0.6307260394096375 -0.0 0.43985608220100403 0.2725491523742676 0 1.0 0 0.0 0 0.0 0 0.0 1.5639960765838623 0.13445305824279785 -0.2839455306529999 0.8536027073860168 0.520889937877655 -0.0 0.8902221322059631 0.7013939619064331 0 1.0 0 0.0 0 0.0 0 0.0 1.5598952770233154 0.1407480537891388 -0.2839455306529999 0.8209478855133057 0.5709707736968994 -0.0 0.8917075395584106 0.708534300327301 0 1.0 0 0.0 0 0.0 0 0.0 1.5598952770233154 0.1407480537891388 0.21605446934700012 0.8209478855133057 0.5709707736968994 -0.0 0.561116635799408 0.5662844777107239 0 1.0 0 0.0 0 0.0 0 0.0 -0.0015227794647216797 -0.1173238605260849 -0.2839455306529999 0.04043702408671379 0.999176025390625 -0.0 0.9754053354263306 0.5637564659118652 0 1.0 0 0.0 0 0.0 0 0.0 -0.00503993034362793 -0.11710859835147858 -0.2839455306529999 0.08285775035619736 0.9965513944625854 -0.0 0.9776747822761536 0.5641809701919556 0 1.0 0 0.0 0 0.0 0 0.0 -0.00503993034362793 -0.11710859835147858 0.21605446934700012 0.08285775035619736 0.9965513944625854 -0.0 0.4926895201206207 0.40502452850341797 0 1.0 0 0.0 0 0.0 0 0.0 -1.0458989143371582 -0.1815277487039566 -0.2839455306529999 0.38541826605796814 -0.922727108001709 -0.0 1.0039174556732178 0.41209107637405396 0 1.0 0 0.0 0 0.0 0 0.0 -1.0407215356826782 -0.1792546957731247 -0.2839455306529999 0.41798150539398193 -0.9084444642066956 -0.0 1.0011929273605347 0.41469377279281616 0 1.0 0 0.0 0 0.0 0 0.0 -1.0407215356826782 -0.1792546957731247 0.21605445444583893 0.41798150539398193 -0.9084444642066956 -0.0 0.5911673903465271 0.22683840990066528 0 1.0 0 0.0 0 0.0 0 0.0 1.051262617111206 -0.11660753190517426 -0.2839455306529999 -0.2536393404006958 0.9672841429710388 -0.0 0.9718810319900513 0.44277089834213257 0 1.0 0 0.0 0 0.0 0 0.0 1.0478694438934326 -0.11739562451839447 -0.2839455306529999 -0.19953002035617828 0.9798578023910522 -0.0 0.9738736152648926 0.4419704079627991 0 1.0 0 0.0 0 0.0 0 0.0 1.0478694438934326 -0.11739562451839447 0.21605446934700012 -0.19953002035617828 0.9798578023910522 -0.0 0.5020204186439514 0.2787216305732727 0 1.0 0 0.0 0 0.0 0 0.0 1.2754619121551514 0.13985291123390198 -0.2839455306529999 -0.8313852548599243 0.5556504726409912 -0.0 0.08320233225822449 0.7120205163955688 0 1.0 0 0.0 0 0.0 0 0.0 1.2714848518371582 0.13340222835540771 -0.2839455306529999 -0.8703268766403198 0.4924161434173584 -0.0 0.08472907543182373 0.7049227952957153 0 1.0 0 0.0 0 0.0 0 0.0 1.2714848518371582 0.13340222835540771 0.21605446934700012 -0.8703268766403198 0.4924161434173584 -0.0 0.40764760971069336 0.5646572709083557 0 1.0 0 0.0 0 0.0 0 0.0 0.00626826286315918 -0.11729954183101654 -0.2839455306529999 -0.04663228243589401 0.9989013075828552 -0.0 0.9703834056854248 0.5634076595306396 0 1.0 0 0.0 0 0.0 0 0.0 0.0021016597747802734 -0.11739562451839447 -0.2839455306529999 -0.0016174810007214546 0.999969482421875 -0.0 0.973068118095398 0.5634965896606445 0 1.0 0 0.0 0 0.0 0 0.0 0.0021016597747802734 -0.11739562451839447 0.21605446934700012 -0.0016174810007214546 0.999969482421875 -0.0 0.4974221885204315 0.4046170711517334 0 1.0 0 0.0 0 0.0 0 0.0 -1.1575742959976196 -0.17943590879440308 -0.2839455306529999 -0.42558062076568604 -0.904904305934906 -0.0 0.06448733806610107 0.40635156631469727 0 1.0 0 0.0 0 0.0 0 0.0 -1.1482959985733032 -0.18338243663311005 -0.2839455306529999 -0.3563341200351715 -0.9343241453170776 -0.0 0.059311121702194214 0.4031233787536621 0 1.0 0 0.0 0 0.0 0 0.0 -1.1482959985733032 -0.18338243663311005 0.21605445444583893 -0.3563341200351715 -0.9343241453170776 -0.0 0.5030680298805237 0.2109755277633667 0 1.0 0 0.0 0 0.0 0 0.0 -1.4169000387191772 -0.14508827030658722 -0.2839455306529999 -0.9504989981651306 -0.3106784224510193 -0.0 0.9934057593345642 0.45809316635131836 0 1.0 0 0.0 0 0.0 0 0.0 -1.4166568517684937 -0.1458447277545929 -0.2839455306529999 -0.9531540870666504 -0.3024079203605652 -0.0 0.9932801127433777 0.4573652744293213 0 1.0 0 0.0 0 0.0 0 0.0 -1.4166568517684937 -0.1458447277545929 0.21605446934700012 -0.9531540870666504 -0.3024079203605652 -0.0 0.5957931876182556 0.27176743745803833 0 1.0 0 0.0 0 0.0 0 0.0 1.022261381149292 -0.1181204691529274 -0.2839455306529999 0.12570573389530182 0.9920651912689209 -0.0 0.9888521432876587 0.4416421055793762 0 1.0 0 0.0 0 0.0 0 0.0 1.0169880390167236 -0.11727521568536758 -0.2839455306529999 0.19186986982822418 0.9814141988754272 -0.0 0.9919314384460449 0.4426735043525696 0 1.0 0 0.0 0 0.0 0 0.0 1.0169880390167236 -0.11727521568536758 0.21605446934700012 0.19186986982822418 0.9814141988754272 -0.0 1.4788858890533447 0.2789512276649475 0 1.0 0 0.0 0 0.0 0 0.0 -1.4166568517684937 -0.1458447277545929 -0.2839455306529999 -0.9531540870666504 -0.3024079203605652 -0.0 0.9932801127433777 0.4573652744293213 0 1.0 0 0.0 0 0.0 0 0.0 -1.4163941144943237 -0.14668390154838562 -0.2839455306529999 -0.9552598595619202 -0.29566332697868347 -0.0 0.9931448698043823 0.45655930042266846 0 1.0 0 0.0 0 0.0 0 0.0 -1.4163941144943237 -0.14668390154838562 0.21605446934700012 -0.9552598595619202 -0.29566332697868347 -0.0 0.5960790514945984 0.27103519439697266 0 1.0 0 0.0 0 0.0 0 0.0 1.5677759647369385 0.1278272569179535 -0.2839455306529999 0.8823511600494385 0.47053438425064087 -0.0 0.8889729976654053 0.694016695022583 0 1.0 0 0.0 0 0.0 0 0.0 1.5639960765838623 0.13445305824279785 -0.2839455306529999 0.8536027073860168 0.520889937877655 -0.0 0.8902221322059631 0.7013939619064331 0 1.0 0 0.0 0 0.0 0 0.0 1.5639960765838623 0.13445305824279785 0.21605446934700012 0.8536027073860168 0.520889937877655 -0.0 0.5633092522621155 0.5601080656051636 0 1.0 0 0.0 0 0.0 0 0.0 0.0021016597747802734 -0.11739562451839447 -0.2839455306529999 -0.0016174810007214546 0.999969482421875 -0.0 0.973068118095398 0.5634965896606445 0 1.0 0 0.0 0 0.0 0 0.0 -0.0015227794647216797 -0.1173238605260849 -0.2839455306529999 0.04043702408671379 0.999176025390625 -0.0 0.9754053354263306 0.5637564659118652 0 1.0 0 0.0 0 0.0 0 0.0 -0.0015227794647216797 -0.1173238605260849 0.21605446934700012 0.04043702408671379 0.999176025390625 -0.0 0.4950215816497803 0.4047200679779053 0 1.0 0 0.0 0 0.0 0 0.0 -1.0510835647583008 -0.1835843324661255 -0.2839455306529999 0.35142064094543457 -0.9361857771873474 -0.0 1.0066523551940918 0.4097048044204712 0 1.0 0 0.0 0 0.0 0 0.0 -1.0458989143371582 -0.1815277487039566 -0.2839455306529999 0.38541826605796814 -0.922727108001709 -0.0 1.0039174556732178 0.41209107637405396 0 1.0 0 0.0 0 0.0 0 0.0 -1.0458989143371582 -0.1815277487039566 0.21605445444583893 0.38541826605796814 -0.922727108001709 -0.0 0.5875861644744873 0.22327786684036255 0 1.0 0 0.0 0 0.0 0 0.0 1.0478694438934326 -0.11739562451839447 -0.2839455306529999 -0.19953002035617828 0.9798578023910522 -0.0 0.9738736152648926 0.4419704079627991 0 1.0 0 0.0 0 0.0 0 0.0 1.0443739891052246 -0.1180085837841034 -0.2839455306529999 -0.14679403603076935 0.9891353845596313 -0.0 0.9759230017662048 0.44136184453964233 0 1.0 0 0.0 0 0.0 0 0.0 1.0443739891052246 -0.1180085837841034 0.21605446934700012 -0.14679403603076935 0.9891353845596313 -0.0 0.49941444396972656 0.27793002128601074 0 1.0 0 0.0 0 0.0 0 0.0 1.2714848518371582 0.13340222835540771 -0.2839455306529999 -0.8703268766403198 0.4924161434173584 -0.0 0.08472907543182373 0.7049227952957153 0 1.0 0 0.0 0 0.0 0 0.0 1.268038272857666 0.12673750519752502 -0.2839455306529999 -0.905117928981781 0.42512282729148865 -0.0 0.08592993021011353 0.6977540254592896 0 1.0 0 0.0 0 0.0 0 0.0 1.268038272857666 0.12673750519752502 0.21605446934700012 -0.905117928981781 0.42512282729148865 -0.0 0.40563517808914185 0.5583691596984863 0 1.0 0 0.0 0 0.0 0 0.0 -1.1482959985733032 -0.18338243663311005 -0.2839455306529999 -0.3563341200351715 -0.9343241453170776 -0.0 0.059311121702194214 0.4031233787536621 0 1.0 0 0.0 0 0.0 0 0.0 -1.1387622356414795 -0.18661142885684967 -0.2839455306529999 -0.2848292589187622 -0.9585558772087097 -0.0 0.05402609705924988 0.4006136655807495 0 1.0 0 0.0 0 0.0 0 0.0 -1.1387622356414795 -0.18661142885684967 0.21605445444583893 -0.2848292589187622 -0.9585558772087097 -0.0 0.5110252499580383 0.20733344554901123 0 1.0 0 0.0 0 0.0 0 0.0 -0.1487255096435547 -0.11909829080104828 -0.2839455306529999 -0.9493392705917358 -0.31418806314468384 -0.0 0.0639059841632843 0.558230996131897 0 1.0 0 0.0 0 0.0 0 0.0 -0.14678454399108887 -0.12453465908765793 -0.2839455306529999 -0.9329508543014526 -0.35996583104133606 -0.0 0.06262597441673279 0.5522772073745728 0 1.0 0 0.0 0 0.0 0 0.0 -0.14678454399108887 -0.12453465908765793 0.21605446934700012 -0.9329508543014526 -0.35996583104133606 -0.0 0.40534508228302 0.41134870052337646 0 1.0 0 0.0 0 0.0 0 0.0 1.0443739891052246 -0.1180085837841034 -0.2839455306529999 -0.14679403603076935 0.9891353845596313 -0.0 0.9759230017662048 0.44136184453964233 0 1.0 0 0.0 0 0.0 0 0.0 1.0407764911651611 -0.11844640970230103 -0.2839455306529999 -0.095828115940094 0.9953917264938354 -0.0 0.978029727935791 0.44094574451446533 0 1.0 0 0.0 0 0.0 0 0.0 1.0407764911651611 -0.11844640970230103 0.21605446934700012 -0.095828115940094 0.9953917264938354 -0.0 0.4967222511768341 0.2773597836494446 0 1.0 0 0.0 0 0.0 0 0.0 -1.3208016157150269 -0.1499311327934265 -0.2839455306529999 0.9561754465103149 0.2926725149154663 -0.0 0.9472158551216125 0.46502256393432617 0 1.0 0 0.0 0 0.0 0 0.0 -1.321989893913269 -0.14588730037212372 -0.2839455306529999 0.9626453518867493 0.2706686556339264 -0.0 0.9475157260894775 0.46850723028182983 0 1.0 0 0.0 0 0.0 0 0.0 -1.321989893913269 -0.14588730037212372 0.21605446934700012 0.9626453518867493 0.2706686556339264 -0.0 0.6487820148468018 0.3092452883720398 0 1.0 0 0.0 0 0.0 0 0.0 -1.4163941144943237 -0.14668390154838562 -0.2839455306529999 -0.9552598595619202 -0.29566332697868347 -0.0 0.9931448698043823 0.45655930042266846 0 1.0 0 0.0 0 0.0 0 0.0 -1.4161120653152466 -0.1476057767868042 -0.2839455306529999 -0.9569994211196899 -0.29004791378974915 -0.0 0.9930000901222229 0.45567595958709717 0 1.0 0 0.0 0 0.0 0 0.0 -1.4161120653152466 -0.1476057767868042 0.21605446934700012 -0.9569994211196899 -0.29004791378974915 -0.0 0.5963889360427856 0.2702317237854004 0 1.0 0 0.0 0 0.0 0 0.0 -0.14678454399108887 -0.12453465908765793 -0.2839455306529999 -0.9329508543014526 -0.35996583104133606 -0.0 0.06262597441673279 0.5522772073745728 0 1.0 0 0.0 0 0.0 0 0.0 -0.14465856552124023 -0.12965482473373413 -0.2839455306529999 -0.9130222201347351 -0.40784937143325806 -0.0 0.061272114515304565 0.546661376953125 0 1.0 0 0.0 0 0.0 0 0.0 -0.14465856552124023 -0.12965482473373413 0.21605446934700012 -0.9130222201347351 -0.40784937143325806 -0.0 0.40602123737335205 0.40526485443115234 0 1.0 0 0.0 0 0.0 0 0.0 -1.056275486946106 -0.18542441725730896 -0.2839455306529999 0.3161107301712036 -0.9486984014511108 -0.0 1.0093977451324463 0.40753376483917236 0 1.0 0 0.0 0 0.0 0 0.0 -1.0510835647583008 -0.1835843324661255 -0.2839455306529999 0.35142064094543457 -0.9361857771873474 -0.0 1.0066523551940918 0.4097048044204712 0 1.0 0 0.0 0 0.0 0 0.0 -1.0510835647583008 -0.1835843324661255 0.21605445444583893 0.35142064094543457 -0.9361857771873474 -0.0 0.5838873982429504 0.2199886441230774 0 1.0 0 0.0 0 0.0 0 0.0 1.4168126583099365 0.12568670511245728 -0.2839455306529999 -0.00198370311409235 -0.999969482421875 -0.0 0.9885505437850952 0.7259107828140259 0 1.0 0 0.0 0 0.0 0 0.0 1.421851396560669 0.1256064474582672 -0.2839455306529999 -0.03277687728404999 -0.99945068359375 -0.0 0.9847497940063477 0.7257237434387207 0 1.0 0 0.0 0 0.0 0 0.0 1.421851396560669 0.1256064474582672 0.21605446934700012 -0.03277687728404999 -0.99945068359375 -0.0 1.487341284751892 0.5618768334388733 0 1.0 0 0.0 0 0.0 0 0.0 1.0276904106140137 -0.1186276227235794 -0.2839455306529999 0.06164738908410072 0.9980773329734802 -0.0 0.9856808185577393 0.4409821033477783 0 1.0 0 0.0 0 0.0 0 0.0 1.022261381149292 -0.1181204691529274 -0.2839455306529999 0.12570573389530182 0.9920651912689209 -0.0 0.9888521432876587 0.4416421055793762 0 1.0 0 0.0 0 0.0 0 0.0 1.022261381149292 -0.1181204691529274 0.21605446934700012 0.12570573389530182 0.9920651912689209 -0.0 1.4828212261199951 0.27781784534454346 0 1.0 0 0.0 0 0.0 0 0.0 -1.0614746809005737 -0.1870480328798294 -0.2839455306529999 0.2795190215110779 -0.9601123332977295 -0.0 1.01215398311615 0.4055767059326172 0 1.0 0 0.0 0 0.0 0 0.0 -1.056275486946106 -0.18542441725730896 -0.2839455306529999 0.3161107301712036 -0.9486984014511108 -0.0 1.0093977451324463 0.40753376483917236 0 1.0 0 0.0 0 0.0 0 0.0 -1.056275486946106 -0.18542441725730896 0.21605445444583893 0.3161107301712036 -0.9486984014511108 -0.0 0.5800744295120239 0.21697372198104858 0 1.0 0 0.0 0 0.0 0 0.0 1.0407764911651611 -0.11844640970230103 -0.2839455306529999 -0.095828115940094 0.9953917264938354 -0.0 0.978029727935791 0.44094574451446533 0 1.0 0 0.0 0 0.0 0 0.0 1.0370769500732422 -0.11870910972356796 -0.2839455306529999 -0.04693746566772461 0.9988707900047302 -0.0 0.9801942110061646 0.4407229423522949 0 1.0 0 0.0 0 0.0 0 0.0 1.0370769500732422 -0.11870910972356796 0.21605446934700012 -0.04693746566772461 0.9988707900047302 -0.0 0.4939463436603546 0.2770150303840637 0 1.0 0 0.0 0 0.0 0 0.0 -1.4260165691375732 -0.15114732086658478 -0.2839455306529999 0.6567277908325195 -0.7541123628616333 -0.0 0.9983725547790527 0.4510546922683716 0 1.0 0 0.0 0 0.0 0 0.0 -1.4217404127120972 -0.1473163217306137 -0.2839455306529999 0.6773888468742371 -0.7355876564979553 -0.0 0.9960373640060425 0.4553300738334656 0 1.0 0 0.0 0 0.0 0 0.0 -1.4217404127120972 -0.1473163217306137 0.21605446934700012 0.6773888468742371 -0.7355876564979553 -0.0 0.5925045013427734 0.26866674423217773 0 1.0 0 0.0 0 0.0 0 0.0 0.08549213409423828 -0.13312825560569763 -0.2839455306529999 0.8020874857902527 -0.5971556901931763 -0.0 0.92360520362854 0.5383328199386597 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 -0.2839455306529999 0.8142643570899963 -0.5804315209388733 -0.0 0.9213816523551941 0.5436801314353943 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 0.21605446934700012 0.8142643570899963 -0.5804315209388733 -0.0 0.5518236756324768 0.39705806970596313 0 1.0 0 0.0 0 0.0 0 0.0 -1.1387622356414795 -0.18661142885684967 -0.2839455306529999 -0.2848292589187622 -0.9585558772087097 -0.0 0.05402609705924988 0.4006136655807495 0 1.0 0 0.0 0 0.0 0 0.0 -1.128973126411438 -0.18912285566329956 -0.2839455306529999 -0.21228675544261932 -0.9772026538848877 -0.0 0.04863038659095764 0.39882320165634155 0 1.0 0 0.0 0 0.0 0 0.0 -1.128973126411438 -0.18912285566329956 0.21605445444583893 -0.21228675544261932 -0.9772026538848877 -0.0 0.5193799734115601 0.20468991994857788 0 1.0 0 0.0 0 0.0 0 0.0 -1.4161120653152466 -0.1476057767868042 -0.2839455306529999 -0.9569994211196899 -0.29004791378974915 -0.0 0.9930000901222229 0.45567595958709717 0 1.0 0 0.0 0 0.0 0 0.0 -1.415810465812683 -0.14861035346984863 -0.2839455306529999 -0.9584032893180847 -0.2854090929031372 -0.0 0.992845892906189 0.4547160267829895 0 1.0 0 0.0 0 0.0 0 0.0 -1.415810465812683 -0.14861035346984863 0.21605446934700012 -0.9584032893180847 -0.2854090929031372 -0.0 0.5967231392860413 0.2693578600883484 0 1.0 0 0.0 0 0.0 0 0.0 1.571234941482544 0.12087064981460571 -0.2839455306529999 0.9072847962379456 0.4204840362071991 -0.0 0.8879491686820984 0.6863942742347717 0 1.0 0 0.0 0 0.0 0 0.0 1.5677759647369385 0.1278272569179535 -0.2839455306529999 0.8823511600494385 0.47053438425064087 -0.0 0.8889729976654053 0.694016695022583 0 1.0 0 0.0 0 0.0 0 0.0 1.5677759647369385 0.1278272569179535 0.21605446934700012 0.8823511600494385 0.47053438425064087 -0.0 0.5653682947158813 0.5536173582077026 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.1282537579536438 -0.2839455306529999 -1.0 0.0 -0.0 0.9213816523551941 0.5436801314353943 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.18394553661346436 -0.2839455306529999 -1.0 0.0 -0.0 0.9250865578651428 0.48120373487472534 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.18394553661346436 0.21605445444583893 -1.0 0.0 -0.0 0.5546995401382446 0.3343638777732849 0 1.0 0 0.0 0 0.0 0 0.0 1.268038272857666 0.12673750519752502 -0.2839455306529999 -0.905117928981781 0.42512282729148865 -0.0 0.08592993021011353 0.6977540254592896 0 1.0 0 0.0 0 0.0 0 0.0 1.2651219367980957 0.1198587417602539 -0.2839455306529999 -0.9349040389060974 0.35483869910240173 -0.0 0.08682137727737427 0.6905054450035095 0 1.0 0 0.0 0 0.0 0 0.0 1.2651219367980957 0.1198587417602539 0.21605446934700012 -0.9349040389060974 0.35483869910240173 -0.0 0.4038437008857727 0.5518712997436523 0 1.0 0 0.0 0 0.0 0 0.0 0.08896684646606445 -0.18394553661346436 -0.2839455306529999 0.0 -1.0 -0.0 0.9250865578651428 0.48120373487472534 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 -0.2839455306529999 0.0 -1.0 -0.0 0.8834002017974854 0.4818020462989807 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 0.21605445444583893 0.0 -1.0 -0.0 0.6000452637672424 0.3568435311317444 0 1.0 0 0.0 0 0.0 0 0.0 1.0332751274108887 -0.11879667639732361 -0.2839455306529999 0.0036011841148138046 0.999969482421875 -0.0 0.982417106628418 0.4406943917274475 0 1.0 0 0.0 0 0.0 0 0.0 1.0276904106140137 -0.1186276227235794 -0.2839455306529999 0.06164738908410072 0.9980773329734802 -0.0 0.9856808185577393 0.4409821033477783 0 1.0 0 0.0 0 0.0 0 0.0 1.0276904106140137 -0.1186276227235794 0.21605446934700012 0.06164738908410072 0.9980773329734802 -0.0 0.48689237236976624 0.27713125944137573 0 1.0 0 0.0 0 0.0 0 0.0 -1.415810465812683 -0.14861035346984863 -0.2839455306529999 -0.9584032893180847 -0.2854090929031372 -0.0 0.992845892906189 0.4547160267829895 0 1.0 0 0.0 0 0.0 0 0.0 -1.4154893159866333 -0.14969763159751892 -0.2839455306529999 -0.9595934748649597 -0.28131961822509766 -0.0 0.9926822185516357 0.4536803960800171 0 1.0 0 0.0 0 0.0 0 0.0 -1.4154893159866333 -0.14969763159751892 0.21605446934700012 -0.9595934748649597 -0.28131961822509766 -0.0 0.5970817804336548 0.26841461658477783 0 1.0 0 0.0 0 0.0 0 0.0 -0.14465856552124023 -0.12965482473373413 -0.2839455306529999 -0.9130222201347351 -0.40784937143325806 -0.0 0.061272114515304565 0.546661376953125 0 1.0 0 0.0 0 0.0 0 0.0 -0.14232611656188965 -0.13452443480491638 -0.2839455306529999 -0.8899502754211426 -0.45600757002830505 -0.0 0.059828102588653564 0.5413103103637695 0 1.0 0 0.0 0 0.0 0 0.0 -0.14232611656188965 -0.13452443480491638 0.21605446934700012 -0.8899502754211426 -0.45600757002830505 -0.0 0.40683630108833313 0.3993995785713196 0 1.0 0 0.0 0 0.0 0 0.0 -1.066681146621704 -0.18845516443252563 -0.2839455306529999 0.24179814755916595 -0.9703055024147034 -0.0 1.0149214267730713 0.4038327932357788 0 1.0 0 0.0 0 0.0 0 0.0 -1.0614746809005737 -0.1870480328798294 -0.2839455306529999 0.2795190215110779 -0.9601123332977295 -0.0 1.01215398311615 0.4055767059326172 0 1.0 0 0.0 0 0.0 0 0.0 -1.0614746809005737 -0.1870480328798294 0.21605445444583893 0.2795190215110779 -0.9601123332977295 -0.0 0.5761512517929077 0.21423637866973877 0 1.0 0 0.0 0 0.0 0 0.0 1.0370769500732422 -0.11870910972356796 -0.2839455306529999 -0.04693746566772461 0.9988707900047302 -0.0 0.9801942110061646 0.4407229423522949 0 1.0 0 0.0 0 0.0 0 0.0 1.0332751274108887 -0.11879667639732361 -0.2839455306529999 0.0036011841148138046 0.999969482421875 -0.0 0.982417106628418 0.4406943917274475 0 1.0 0 0.0 0 0.0 0 0.0 1.0332751274108887 -0.11879667639732361 0.21605446934700012 0.0036011841148138046 0.999969482421875 -0.0 0.49108949303627014 0.2768997550010681 0 1.0 0 0.0 0 0.0 0 0.0 -1.4154893159866333 -0.14969763159751892 -0.2839455306529999 -0.9595934748649597 -0.28131961822509766 -0.0 0.9926822185516357 0.4536803960800171 0 1.0 0 0.0 0 0.0 0 0.0 -1.4151488542556763 -0.15086759626865387 -0.2839455306529999 -0.9606311321258545 -0.2778099775314331 -0.0 0.9925094842910767 0.4525699019432068 0 1.0 0 0.0 0 0.0 0 0.0 -1.4151488542556763 -0.15086759626865387 0.21605446934700012 -0.9606311321258545 -0.2778099775314331 -0.0 0.5974647998809814 0.2674028277397156 0 1.0 0 0.0 0 0.0 0 0.0 1.404465913772583 0.1253851056098938 -0.2839455306529999 0.05169835686683655 -0.9986571669578552 -0.0 0.9978524446487427 0.7254770994186401 0 1.0 0 0.0 0 0.0 0 0.0 1.4104859828948975 0.1256113052368164 -0.2839455306529999 0.02471999265253544 -0.999664306640625 -0.0 0.993322491645813 0.7258370518684387 0 1.0 0 0.0 0 0.0 0 0.0 1.4104859828948975 0.1256113052368164 0.21605446934700012 0.02471999265253544 -0.999664306640625 -0.0 1.4807119369506836 0.5621060132980347 0 1.0 0 0.0 0 0.0 0 0.0 -1.0718950033187866 -0.18964582681655884 -0.2839455306529999 0.20303964614868164 -0.9791558384895325 -0.0 1.0177001953125 0.4023010730743408 0 1.0 0 0.0 0 0.0 0 0.0 -1.066681146621704 -0.18845516443252563 -0.2839455306529999 0.24179814755916595 -0.9703055024147034 -0.0 1.0149214267730713 0.4038327932357788 0 1.0 0 0.0 0 0.0 0 0.0 -1.066681146621704 -0.18845516443252563 0.21605445444583893 0.24179814755916595 -0.9703055024147034 -0.0 0.5721230506896973 0.21177977323532104 0 1.0 0 0.0 0 0.0 0 0.0 0.08183979988098145 -0.13782760500907898 -0.2839455306529999 0.7765740156173706 -0.6299936175346375 -0.0 0.9259190559387207 0.5331619381904602 0 1.0 0 0.0 0 0.0 0 0.0 0.08549213409423828 -0.13312825560569763 -0.2839455306529999 0.8020874857902527 -0.5971556901931763 -0.0 0.92360520362854 0.5383328199386597 0 1.0 0 0.0 0 0.0 0 0.0 0.08549213409423828 -0.13312825560569763 0.21605446934700012 0.8020874857902527 -0.5971556901931763 -0.0 0.5500854253768921 0.39095473289489746 0 1.0 0 0.0 0 0.0 0 0.0 -1.128973126411438 -0.18912285566329956 -0.2839455306529999 -0.21228675544261932 -0.9772026538848877 -0.0 0.04863038659095764 0.39882320165634155 0 1.0 0 0.0 0 0.0 0 0.0 -1.1189286708831787 -0.1909167319536209 -0.2839455306529999 -0.13995788991451263 -0.9901425242424011 -0.0 0.04312288761138916 0.3977545499801636 0 1.0 0 0.0 0 0.0 0 0.0 -1.1189286708831787 -0.1909167319536209 0.21605445444583893 -0.13995788991451263 -0.9901425242424011 -0.0 0.5280721187591553 0.20308256149291992 0 1.0 0 0.0 0 0.0 0 0.0 0.8827424049377441 -0.12030474841594696 -0.2839455306529999 -0.843745231628418 -0.5366985201835632 -0.0 0.06383192539215088 0.4491479992866516 0 1.0 0 0.0 0 0.0 0 0.0 0.8886165618896484 -0.12895429134368896 -0.2839455306529999 -0.8044373989105225 -0.5940122604370117 -0.0 0.06068447232246399 0.4405009150505066 0 1.0 0 0.0 0 0.0 0 0.0 0.8886165618896484 -0.12895429134368896 0.21605446934700012 -0.8044373989105225 -0.5940122604370117 -0.0 0.39340054988861084 0.29774606227874756 0 1.0 0 0.0 0 0.0 0 0.0 1.4104859828948975 0.1256113052368164 -0.2839455306529999 0.02471999265253544 -0.999664306640625 -0.0 0.993322491645813 0.7258370518684387 0 1.0 0 0.0 0 0.0 0 0.0 1.4168126583099365 0.12568670511245728 -0.2839455306529999 -0.00198370311409235 -0.999969482421875 -0.0 0.9885505437850952 0.7259107828140259 0 1.0 0 0.0 0 0.0 0 0.0 1.4168126583099365 0.12568670511245728 0.21605446934700012 -0.00198370311409235 -0.999969482421875 -0.0 1.484402060508728 0.5620718598365784 0 1.0 0 0.0 0 0.0 0 0.0 -0.14232611656188965 -0.13452443480491638 -0.2839455306529999 -0.8899502754211426 -0.45600757002830505 -0.0 0.059828102588653564 0.5413103103637695 0 1.0 0 0.0 0 0.0 0 0.0 -0.13976478576660156 -0.13920921087265015 -0.2839455306529999 -0.8639789819717407 -0.503494381904602 -0.0 0.05827704071998596 0.5361497402191162 0 1.0 0 0.0 0 0.0 0 0.0 -0.13976478576660156 -0.13920921087265015 0.21605446934700012 -0.8639789819717407 -0.503494381904602 -0.0 0.4078006148338318 0.3936748504638672 0 1.0 0 0.0 0 0.0 0 0.0 -1.319499135017395 -0.15402118861675262 -0.2839455306529999 0.9494918584823608 0.31376078724861145 -0.0 0.9468740224838257 0.46155840158462524 0 1.0 0 0.0 0 0.0 0 0.0 -1.3208016157150269 -0.1499311327934265 -0.2839455306529999 0.9561754465103149 0.2926725149154663 -0.0 0.9472158551216125 0.46502256393432617 0 1.0 0 0.0 0 0.0 0 0.0 -1.3208016157150269 -0.1499311327934265 0.21605446934700012 0.9561754465103149 0.2926725149154663 -0.0 0.6499096751213074 0.3062366247177124 0 1.0 0 0.0 0 0.0 0 0.0 1.421851396560669 0.1256064474582672 -0.2839455306529999 -0.03277687728404999 -0.99945068359375 -0.0 0.9847497940063477 0.7257237434387207 0 1.0 0 0.0 0 0.0 0 0.0 1.4266927242279053 0.12536564469337463 -0.2839455306529999 -0.06787316501140594 -0.9976806044578552 -0.0 0.9811047315597534 0.725290834903717 0 1.0 0 0.0 0 0.0 0 0.0 1.4266927242279053 0.12536564469337463 0.21605446934700012 -0.06787316501140594 -0.9976806044578552 -0.0 0.49016404151916504 0.5615012645721436 0 1.0 0 0.0 0 0.0 0 0.0 -1.6334062814712524 -0.15033003687858582 -0.2839455306529999 -0.7759636044502258 -0.6307260394096375 -0.0 0.11009809374809265 0.44204282760620117 0 1.0 0 0.0 0 0.0 0 0.0 -1.6285791397094727 -0.15586857497692108 -0.2839455306529999 -0.7316507697105408 -0.6816614270210266 -0.0 0.10735753178596497 0.4370245933532715 0 1.0 0 0.0 0 0.0 0 0.0 -1.6285791397094727 -0.15586857497692108 0.21605446934700012 -0.7316507697105408 -0.6816614270210266 -0.0 0.44213002920150757 0.2660250663757324 0 1.0 0 0.0 0 0.0 0 0.0 -1.0771161317825317 -0.19061999022960663 -0.2839455306529999 0.16342662274837494 -0.9865413308143616 -0.0 1.0204906463623047 0.40098077058792114 0 1.0 0 0.0 0 0.0 0 0.0 -1.0718950033187866 -0.18964582681655884 -0.2839455306529999 0.20303964614868164 -0.9791558384895325 -0.0 1.0177001953125 0.4023010730743408 0 1.0 0 0.0 0 0.0 0 0.0 -1.0718950033187866 -0.18964582681655884 0.21605445444583893 0.20303964614868164 -0.9791558384895325 -0.0 0.5679959058761597 0.20960724353790283 0 1.0 0 0.0 0 0.0 0 0.0 1.1696586608886719 -0.12952345609664917 -0.2839455306529999 0.808679461479187 -0.5881832242012024 -0.0 0.9101971983909607 0.4346746802330017 0 1.0 0 0.0 0 0.0 0 0.0 1.174483299255371 -0.12249995768070221 -0.2839455306529999 0.8388012051582336 -0.5444197058677673 -0.0 0.9075202941894531 0.4414207935333252 0 1.0 0 0.0 0 0.0 0 0.0 1.174483299255371 -0.12249995768070221 0.21605446934700012 0.8388012051582336 -0.5444197058677673 -0.0 0.5837835669517517 0.3009667992591858 0 1.0 0 0.0 0 0.0 0 0.0 0.07801008224487305 -0.14235183596611023 -0.2839455306529999 0.7494735717773438 -0.6619769930839539 -0.0 0.9283249378204346 0.5281692743301392 0 1.0 0 0.0 0 0.0 0 0.0 0.08183979988098145 -0.13782760500907898 -0.2839455306529999 0.7765740156173706 -0.6299936175346375 -0.0 0.9259190559387207 0.5331619381904602 0 1.0 0 0.0 0 0.0 0 0.0 0.08183979988098145 -0.13782760500907898 0.21605446934700012 0.7765740156173706 -0.6299936175346375 -0.0 0.548201322555542 0.385007381439209 0 1.0 0 0.0 0 0.0 0 0.0 0.8886165618896484 -0.12895429134368896 -0.2839455306529999 -0.8044373989105225 -0.5940122604370117 -0.0 0.06068447232246399 0.4405009150505066 0 1.0 0 0.0 0 0.0 0 0.0 0.896730899810791 -0.13908028602600098 -0.2839455306529999 -0.7527390122413635 -0.6582842469215393 -0.0 0.05640202760696411 0.43033796548843384 0 1.0 0 0.0 0 0.0 0 0.0 0.896730899810791 -0.13908028602600098 0.21605446934700012 -0.7527390122413635 -0.6582842469215393 -0.0 0.39674311876296997 0.28568243980407715 0 1.0 0 0.0 0 0.0 0 0.0 -1.4151488542556763 -0.15086759626865387 -0.2839455306529999 -0.9606311321258545 -0.2778099775314331 -0.0 0.9925094842910767 0.4525699019432068 0 1.0 0 0.0 0 0.0 0 0.0 -1.414788842201233 -0.15212027728557587 -0.2839455306529999 -0.9614856243133545 -0.27478864789009094 -0.0 0.9923274517059326 0.451385498046875 0 1.0 0 0.0 0 0.0 0 0.0 -1.414788842201233 -0.15212027728557587 0.21605446934700012 -0.9614856243133545 -0.27478864789009094 -0.0 0.5978724956512451 0.26632362604141235 0 1.0 0 0.0 0 0.0 0 0.0 1.398751974105835 0.12500807642936707 -0.2839455306529999 0.08148442208766937 -0.9966429471969604 -0.0 1.0021334886550903 0.7248518466949463 0 1.0 0 0.0 0 0.0 0 0.0 1.404465913772583 0.1253851056098938 -0.2839455306529999 0.05169835686683655 -0.9986571669578552 -0.0 0.9978524446487427 0.7254770994186401 0 1.0 0 0.0 0 0.0 0 0.0 1.404465913772583 0.1253851056098938 0.21605446934700012 0.05169835686683655 -0.9986571669578552 -0.0 1.4772032499313354 0.5619494318962097 0 1.0 0 0.0 0 0.0 0 0.0 -0.13976478576660156 -0.13920921087265015 -0.2839455306529999 -0.8639789819717407 -0.503494381904602 -0.0 0.05827704071998596 0.5361497402191162 0 1.0 0 0.0 0 0.0 0 0.0 -0.13697481155395508 -0.14370910823345184 -0.2839455306529999 -0.8349558711051941 -0.5502792596817017 -0.0 0.05661684274673462 0.5311776399612427 0 1.0 0 0.0 0 0.0 0 0.0 -0.13697481155395508 -0.14370910823345184 0.21605446934700012 -0.8349558711051941 -0.5502792596817017 -0.0 0.40891844034194946 0.38809001445770264 0 1.0 0 0.0 0 0.0 0 0.0 -1.0823445320129395 -0.1913776695728302 -0.2839455306529999 0.12314218282699585 -0.9923703670501709 -0.0 1.0232930183410645 0.399871289730072 0 1.0 0 0.0 0 0.0 0 0.0 -1.0771161317825317 -0.19061999022960663 -0.2839455306529999 0.16342662274837494 -0.9865413308143616 -0.0 1.0204906463623047 0.40098077058792114 0 1.0 0 0.0 0 0.0 0 0.0 -1.0771161317825317 -0.19061999022960663 0.21605445444583893 0.16342662274837494 -0.9865413308143616 -0.0 0.563776969909668 0.20772206783294678 0 1.0 0 0.0 0 0.0 0 0.0 1.4266927242279053 0.12536564469337463 -0.2839455306529999 -0.06787316501140594 -0.9976806044578552 -0.0 0.9811047315597534 0.725290834903717 0 1.0 0 0.0 0 0.0 0 0.0 1.431337594985962 0.12496429681777954 -0.2839455306529999 -0.10571611672639847 -0.9943845868110657 -0.0 0.9776201248168945 0.724622368812561 0 1.0 0 0.0 0 0.0 0 0.0 1.431337594985962 0.12496429681777954 0.21605446934700012 -0.10571611672639847 -0.9943845868110657 -0.0 0.492870569229126 0.5609473586082458 0 1.0 0 0.0 0 0.0 0 0.0 -1.1189286708831787 -0.1909167319536209 -0.2839455306529999 -0.13995788991451263 -0.9901425242424011 -0.0 0.04312288761138916 0.3977545499801636 0 1.0 0 0.0 0 0.0 0 0.0 -1.108628749847412 -0.19199305772781372 -0.2839455306529999 -0.06897182762622833 -0.9975890517234802 -0.0 0.03750342130661011 0.3974127173423767 0 1.0 0 0.0 0 0.0 0 0.0 -1.108628749847412 -0.19199305772781372 0.21605443954467773 -0.06897182762622833 -0.9975890517234802 -0.0 0.5370272397994995 0.2025470733642578 0 1.0 0 0.0 0 0.0 0 0.0 1.1645300388336182 -0.13618940114974976 -0.2839455306529999 0.7754448056221008 -0.6313974261283875 -0.0 0.9130018949508667 0.4282703995704651 0 1.0 0 0.0 0 0.0 0 0.0 1.1696586608886719 -0.12952345609664917 -0.2839455306529999 0.808679461479187 -0.5881832242012024 -0.0 0.9101971983909607 0.4346746802330017 0 1.0 0 0.0 0 0.0 0 0.0 1.1696586608886719 -0.12952345609664917 0.21605446934700012 0.808679461479187 -0.5881832242012024 -0.0 0.5818529725074768 0.2929994463920593 0 1.0 0 0.0 0 0.0 0 0.0 -1.430341362953186 -0.15480805933475494 -0.2839455306529999 0.634998619556427 -0.772484540939331 -0.0 1.0007305145263672 0.44697535037994385 0 1.0 0 0.0 0 0.0 0 0.0 -1.4260165691375732 -0.15114732086658478 -0.2839455306529999 0.6567277908325195 -0.7541123628616333 -0.0 0.9983725547790527 0.4510546922683716 0 1.0 0 0.0 0 0.0 0 0.0 -1.4260165691375732 -0.15114732086658478 0.21605446934700012 0.6567277908325195 -0.7541123628616333 -0.0 0.5900063514709473 0.26357966661453247 0 1.0 0 0.0 0 0.0 0 0.0 0.07400274276733398 -0.1467009335756302 -0.2839455306529999 0.7209387421607971 -0.6929532885551453 -0.0 0.9308251142501831 0.5233567953109741 0 1.0 0 0.0 0 0.0 0 0.0 0.07801008224487305 -0.14235183596611023 -0.2839455306529999 0.7494735717773438 -0.6619769930839539 -0.0 0.9283249378204346 0.5281692743301392 0 1.0 0 0.0 0 0.0 0 0.0 0.07801008224487305 -0.14235183596611023 0.21605446934700012 0.7494735717773438 -0.6619769930839539 -0.0 0.5461670756340027 0.3792210817337036 0 1.0 0 0.0 0 0.0 0 0.0 -1.414788842201233 -0.15212027728557587 -0.2839455306529999 -0.9614856243133545 -0.27478864789009094 -0.0 0.9923274517059326 0.451385498046875 0 1.0 0 0.0 0 0.0 0 0.0 -1.4144092798233032 -0.15345565974712372 -0.2839455306529999 -0.9622486233711243 -0.27207252383232117 -0.0 0.9921363592147827 0.45012837648391724 0 1.0 0 0.0 0 0.0 0 0.0 -1.4144092798233032 -0.15345565974712372 0.21605446934700012 -0.9622486233711243 -0.27207252383232117 -0.0 0.5983049869537354 0.26517820358276367 0 1.0 0 0.0 0 0.0 0 0.0 1.3933451175689697 0.1244802474975586 -0.2839455306529999 0.11453596502542496 -0.9934080243110657 -0.0 0.006159782409667969 0.7239813804626465 0 1.0 0 0.0 0 0.0 0 0.0 1.398751974105835 0.12500807642936707 -0.2839455306529999 0.08148442208766937 -0.9966429471969604 -0.0 0.0021335184574127197 0.7248518466949463 0 1.0 0 0.0 0 0.0 0 0.0 1.398751974105835 0.12500807642936707 0.21605446934700012 0.08148442208766937 -0.9966429471969604 -0.0 0.473876416683197 0.5616071224212646 0 1.0 0 0.0 0 0.0 0 0.0 -0.13697481155395508 -0.14370910823345184 -0.2839455306529999 -0.8349558711051941 -0.5502792596817017 -0.0 0.05661684274673462 0.5311776399612427 0 1.0 0 0.0 0 0.0 0 0.0 -0.1339561939239502 -0.14802414178848267 -0.2839455306529999 -0.8030640482902527 -0.5958738923072815 -0.0 0.054845213890075684 0.5263919830322266 0 1.0 0 0.0 0 0.0 0 0.0 -0.1339561939239502 -0.14802414178848267 0.21605446934700012 -0.8030640482902527 -0.5958738923072815 -0.0 0.410194456577301 0.38264477252960205 0 1.0 0 0.0 0 0.0 0 0.0 -1.0875802040100098 -0.19191887974739075 -0.2839455306529999 0.08230841904878616 -0.9965819120407104 -0.0 1.0261074304580688 0.39897215366363525 0 1.0 0 0.0 0 0.0 0 0.0 -1.0823445320129395 -0.1913776695728302 -0.2839455306529999 0.12314218282699585 -0.9923703670501709 -0.0 1.0232930183410645 0.399871289730072 0 1.0 0 0.0 0 0.0 0 0.0 -1.0823445320129395 -0.1913776695728302 0.21605445444583893 0.12314218282699585 -0.9923703670501709 -0.0 0.5594743490219116 0.20612728595733643 0 1.0 0 0.0 0 0.0 0 0.0 1.15909743309021 -0.14249777793884277 -0.2839455306529999 0.7391277551651001 -0.6735435128211975 -0.0 0.9159396886825562 0.4222024083137512 0 1.0 0 0.0 0 0.0 0 0.0 1.1645300388336182 -0.13618940114974976 -0.2839455306529999 0.7754448056221008 -0.6313974261283875 -0.0 0.9130018949508667 0.4282703995704651 0 1.0 0 0.0 0 0.0 0 0.0 1.1645300388336182 -0.13618940114974976 0.21605446934700012 0.7754448056221008 -0.6313974261283875 -0.0 0.5796647667884827 0.28530943393707275 0 1.0 0 0.0 0 0.0 0 0.0 1.431337594985962 0.12496429681777954 -0.2839455306529999 -0.10571611672639847 -0.9943845868110657 -0.0 0.9776201248168945 0.724622368812561 0 1.0 0 0.0 0 0.0 0 0.0 1.4357850551605225 0.12440240383148193 -0.2839455306529999 -0.14645832777023315 -0.9891964197158813 -0.0 0.974300742149353 0.7237285375595093 0 1.0 0 0.0 0 0.0 0 0.0 1.4357850551605225 0.12440240383148193 0.21605446934700012 -0.14645832777023315 -0.9891964197158813 -0.0 0.4954600930213928 0.5602172613143921 0 1.0 0 0.0 0 0.0 0 0.0 0.896730899810791 -0.13908028602600098 -0.2839455306529999 -0.7527390122413635 -0.6582842469215393 -0.0 0.05640202760696411 0.43033796548843384 0 1.0 0 0.0 0 0.0 0 0.0 0.9055459499359131 -0.14832577109336853 -0.2839455306529999 -0.6926481127738953 -0.7212439179420471 -0.0 0.05179312825202942 0.4209994077682495 0 1.0 0 0.0 0 0.0 0 0.0 0.9055459499359131 -0.14832577109336853 0.21605446934700012 -0.6926481127738953 -0.7212439179420471 -0.0 0.4007539749145508 0.274305522441864 0 1.0 0 0.0 0 0.0 0 0.0 -1.4144092798233032 -0.15345565974712372 -0.2839455306529999 -0.9622486233711243 -0.27207252383232117 -0.0 0.9921363592147827 0.45012837648391724 0 1.0 0 0.0 0 0.0 0 0.0 -1.4140104055404663 -0.15487372875213623 -0.2839455306529999 -0.9611194133758545 -0.2760094106197357 -0.0 0.9919363260269165 0.4487995505332947 0 1.0 0 0.0 0 0.0 0 0.0 -1.4140104055404663 -0.15487372875213623 0.21605446934700012 -0.9611499309539795 -0.2760094106197357 -0.0 0.5987622737884521 0.26396769285202026 0 1.0 0 0.0 0 0.0 0 0.0 -1.0928231477737427 -0.19224360585212708 -0.2839455306529999 0.04119998961687088 -0.9991455078125 -0.0 1.0289340019226074 0.3982831835746765 0 1.0 0 0.0 0 0.0 0 0.0 -1.0875802040100098 -0.19191887974739075 -0.2839455306529999 0.08230841904878616 -0.9965819120407104 -0.0 1.0261074304580688 0.39897215366363525 0 1.0 0 0.0 0 0.0 0 0.0 -1.0875802040100098 -0.19191887974739075 0.21605445444583893 0.08230841904878616 -0.9965819120407104 -0.0 0.5550970435142517 0.20482593774795532 0 1.0 0 0.0 0 0.0 0 0.0 0.06981778144836426 -0.15087489783763885 -0.2839455306529999 0.6910916566848755 -0.7227393388748169 -0.0 0.9334215521812439 0.5187262892723083 0 1.0 0 0.0 0 0.0 0 0.0 0.07400274276733398 -0.1467009335756302 -0.2839455306529999 0.7209387421607971 -0.6929532885551453 -0.0 0.9308251142501831 0.5233567953109741 0 1.0 0 0.0 0 0.0 0 0.0 0.07400274276733398 -0.1467009335756302 0.21605446934700012 0.7209387421607971 -0.6929532885551453 -0.0 0.5439779758453369 0.373601496219635 0 1.0 0 0.0 0 0.0 0 0.0 -1.108628749847412 -0.19199305772781372 0.21605443954467773 -0.06897182762622833 -0.9975890517234802 -0.0 0.5370272397994995 0.2025470733642578 0 1.0 0 0.0 0 0.0 0 0.0 -1.108628749847412 -0.19199305772781372 -0.2839455306529999 -0.06897182762622833 -0.9975890517234802 -0.0 1.0375034809112549 0.3974127173423767 0 1.0 0 0.0 0 0.0 0 0.0 -1.0980734825134277 -0.19235184788703918 -0.2839455306529999 -0.006653035059571266 -0.999969482421875 -0.0 1.0317729711532593 0.3978040814399719 0 1.0 0 0.0 0 0.0 0 0.0 1.388244390487671 0.12380161881446838 -0.2839455306529999 0.1511887013912201 -0.9884945154190063 -0.0 0.009929001331329346 0.7228847742080688 0 1.0 0 0.0 0 0.0 0 0.0 1.3933451175689697 0.1244802474975586 -0.2839455306529999 0.11453596502542496 -0.9934080243110657 -0.0 0.006159782409667969 0.7239813804626465 0 1.0 0 0.0 0 0.0 0 0.0 1.3933451175689697 0.1244802474975586 0.21605446934700012 0.11453596502542496 -0.9934080243110657 -0.0 0.4707322120666504 0.5610840916633606 0 1.0 0 0.0 0 0.0 0 0.0 -0.1339561939239502 -0.14802414178848267 -0.2839455306529999 -0.8030640482902527 -0.5958738923072815 -0.0 0.054845213890075684 0.5263919830322266 0 1.0 0 0.0 0 0.0 0 0.0 -0.13070893287658691 -0.1521543264389038 -0.2839455306529999 -0.7685170769691467 -0.6397900581359863 -0.0 0.052959591150283813 0.5217910408973694 0 1.0 0 0.0 0 0.0 0 0.0 -0.13070893287658691 -0.1521543264389038 0.21605446934700012 -0.7685170769691467 -0.6397900581359863 -0.0 0.41163375973701477 0.37733936309814453 0 1.0 0 0.0 0 0.0 0 0.0 -1.0980734825134277 -0.19235184788703918 -0.2839455306529999 -0.006653035059571266 -0.999969482421875 -0.0 1.0317729711532593 0.3978040814399719 0 1.0 0 0.0 0 0.0 0 0.0 -1.0928231477737427 -0.19224360585212708 -0.2839455306529999 0.04119998961687088 -0.9991455078125 -0.0 1.0289340019226074 0.3982831835746765 0 1.0 0 0.0 0 0.0 0 0.0 -1.0928231477737427 -0.19224360585212708 0.21605445444583893 0.04119998961687088 -0.9991455078125 -0.0 0.5506551265716553 0.203821063041687 0 1.0 0 0.0 0 0.0 0 0.0 1.1533606052398682 -0.14844858646392822 -0.2839455306529999 0.6999419927597046 -0.7141636610031128 -0.0 0.9190158843994141 0.41646647453308105 0 1.0 0 0.0 0 0.0 0 0.0 1.15909743309021 -0.14249777793884277 -0.2839455306529999 0.7391277551651001 -0.6735435128211975 -0.0 0.9159396886825562 0.4222024083137512 0 1.0 0 0.0 0 0.0 0 0.0 1.15909743309021 -0.14249777793884277 0.21605446934700012 0.7391277551651001 -0.6735435128211975 -0.0 0.5772037506103516 0.2778952717781067 0 1.0 0 0.0 0 0.0 0 0.0 -1.3180822134017944 -0.15815743803977966 -0.2839455306529999 0.9425641894340515 0.3339335322380066 -0.0 0.946491003036499 0.4581177234649658 0 1.0 0 0.0 0 0.0 0 0.0 -1.319499135017395 -0.15402118861675262 -0.2839455306529999 0.9494918584823608 0.31376078724861145 -0.0 0.9468740224838257 0.46155840158462524 0 1.0 0 0.0 0 0.0 0 0.0 -1.319499135017395 -0.15402118861675262 0.21605446934700012 0.9494918584823608 0.31376078724861145 -0.0 0.6510940194129944 0.30328530073165894 0 1.0 0 0.0 0 0.0 0 0.0 1.4357850551605225 0.12440240383148193 -0.2839455306529999 -0.14645832777023315 -0.9891964197158813 -0.0 0.974300742149353 0.7237285375595093 0 1.0 0 0.0 0 0.0 0 0.0 1.4400355815887451 0.1236799955368042 -0.2839455306529999 -0.1902218759059906 -0.981719434261322 -0.0 0.971149206161499 0.7226189374923706 0 1.0 0 0.0 0 0.0 0 0.0 1.4400355815887451 0.1236799955368042 0.21605446934700012 -0.1902218759059906 -0.981719434261322 -0.0 0.497933030128479 0.5593129396438599 0 1.0 0 0.0 0 0.0 0 0.0 -1.4851137399673462 0.19643977284431458 -0.2839455306529999 -0.0025635547935962677 0.999969482421875 -0.0 0.051040977239608765 0.8245793581008911 0 1.0 0 0.0 0 0.0 0 0.0 -1.4969496726989746 0.1962597668170929 -0.2839455306529999 -0.031373027712106705 0.999481201171875 -0.0 0.0616915225982666 0.8226818442344666 0 1.0 0 0.0 0 0.0 0 0.0 -1.4969496726989746 0.1962597668170929 0.21605448424816132 -0.031373027712106705 0.999481201171875 -0.0 0.5233350992202759 0.6290465593338013 0 1.0 0 0.0 0 0.0 0 0.0 0.9055459499359131 -0.14832577109336853 -0.2839455306529999 -0.6926481127738953 -0.7212439179420471 -0.0 0.05179312825202942 0.4209994077682495 0 1.0 0 0.0 0 0.0 0 0.0 0.9150614738464355 -0.15669071674346924 -0.2839455306529999 -0.6262093186378479 -0.7796258330345154 -0.0 0.04683852195739746 0.41246914863586426 0 1.0 0 0.0 0 0.0 0 0.0 0.9150614738464355 -0.15669071674346924 0.21605446934700012 -0.6262093186378479 -0.7796258330345154 -0.0 0.40549376606941223 0.2636224627494812 0 1.0 0 0.0 0 0.0 0 0.0 -1.4347147941589355 -0.158298522233963 -0.2839455306529999 0.6121707558631897 -0.790704071521759 -0.0 1.0031116008758545 0.4430910348892212 0 1.0 0 0.0 0 0.0 0 0.0 -1.430341362953186 -0.15480805933475494 -0.2839455306529999 0.634998619556427 -0.772484540939331 -0.0 1.0007305145263672 0.44697535037994385 0 1.0 0 0.0 0 0.0 0 0.0 -1.430341362953186 -0.15480805933475494 0.21605446934700012 0.634998619556427 -0.772484540939331 -0.0 0.5873936414718628 0.25871068239212036 0 1.0 0 0.0 0 0.0 0 0.0 0.06545519828796387 -0.15487372875213623 -0.2839455306529999 0.6600848436355591 -0.7511520981788635 -0.0 0.9361163377761841 0.514279842376709 0 1.0 0 0.0 0 0.0 0 0.0 0.06981778144836426 -0.15087489783763885 -0.2839455306529999 0.6910916566848755 -0.7227393388748169 -0.0 0.9334215521812439 0.5187262892723083 0 1.0 0 0.0 0 0.0 0 0.0 0.06981778144836426 -0.15087489783763885 0.21605446934700012 0.6910916566848755 -0.7227393388748169 -0.0 0.5416295528411865 0.3681548833847046 0 1.0 0 0.0 0 0.0 0 0.0 -1.4743722677230835 0.19633153080940247 -0.2839455306529999 0.020813623443245888 0.999755859375 -0.0 0.041211605072021484 0.8255455493927002 0 1.0 0 0.0 0 0.0 0 0.0 -1.4851137399673462 0.19643977284431458 -0.2839455306529999 -0.0025635547935962677 0.999969482421875 -0.0 0.051040977239608765 0.8245793581008911 0 1.0 0 0.0 0 0.0 0 0.0 -1.4851137399673462 0.19643977284431458 0.21605448424816132 -0.0025635547935962677 0.999969482421875 -0.0 0.529496967792511 0.6301011443138123 0 1.0 0 0.0 0 0.0 0 0.0 -1.4140104055404663 -0.15487372875213623 -0.2839455306529999 -0.9611194133758545 -0.2760094106197357 -0.0 0.9919363260269165 0.4487995505332947 0 1.0 0 0.0 0 0.0 0 0.0 -1.4130885601043701 -0.1580187976360321 -0.2839455306529999 -0.9590136408805847 -0.28333383798599243 -0.0 0.9914758205413818 0.4458812475204468 0 1.0 0 0.0 0 0.0 0 0.0 -1.4130885601043701 -0.1580187976360321 0.21605446934700012 -0.9590136408805847 -0.28333383798599243 -0.0 0.5998045206069946 0.2613224983215332 0 1.0 0 0.0 0 0.0 0 0.0 1.3834502696990967 0.12297219038009644 -0.2839455306529999 0.19196142256259918 -0.9813836812973022 -0.0 0.013439804315567017 0.7215794920921326 0 1.0 0 0.0 0 0.0 0 0.0 1.388244390487671 0.12380161881446838 -0.2839455306529999 0.1511887013912201 -0.9884945154190063 -0.0 0.009929001331329346 0.7228847742080688 0 1.0 0 0.0 0 0.0 0 0.0 1.388244390487671 0.12380161881446838 0.21605446934700012 0.1511887013912201 -0.9884945154190063 -0.0 0.46776947379112244 0.5603847503662109 0 1.0 0 0.0 0 0.0 0 0.0 -0.13070893287658691 -0.1521543264389038 -0.2839455306529999 -0.7685170769691467 -0.6397900581359863 -0.0 0.052959591150283813 0.5217910408973694 0 1.0 0 0.0 0 0.0 0 0.0 -0.12723302841186523 -0.15609964728355408 -0.2839455306529999 -0.7316202521324158 -0.6816614270210266 -0.0 0.05095714330673218 0.5173731446266174 0 1.0 0 0.0 0 0.0 0 0.0 -0.12723302841186523 -0.15609964728355408 0.21605446934700012 -0.7316202521324158 -0.6816614270210266 -0.0 0.4132416844367981 0.3721746802330017 0 1.0 0 0.0 0 0.0 0 0.0 1.1473197937011719 -0.1540418416261673 -0.2839455306529999 0.6581926941871643 -0.7528305649757385 -0.0 0.9222360253334045 0.4110592007637024 0 1.0 0 0.0 0 0.0 0 0.0 1.1533606052398682 -0.14844858646392822 -0.2839455306529999 0.6999419927597046 -0.7141636610031128 -0.0 0.9190158843994141 0.41646647453308105 0 1.0 0 0.0 0 0.0 0 0.0 1.1533606052398682 -0.14844858646392822 0.21605446934700012 0.6999419927597046 -0.7141636610031128 -0.0 0.5744532942771912 0.270757794380188 0 1.0 0 0.0 0 0.0 0 0.0 1.4400355815887451 0.1236799955368042 -0.2839455306529999 -0.1902218759059906 -0.981719434261322 -0.0 0.971149206161499 0.7226189374923706 0 1.0 0 0.0 0 0.0 0 0.0 1.4440891742706299 0.12279704213142395 -0.2839455306529999 -0.2370677888393402 -0.9714651703834534 -0.0 0.968167781829834 0.7213026285171509 0 1.0 0 0.0 0 0.0 0 0.0 1.4440891742706299 0.12279704213142395 0.21605446934700012 -0.2370677888393402 -0.9714651703834534 -0.0 0.5002896785736084 0.5582361221313477 0 1.0 0 0.0 0 0.0 0 0.0 -1.4640979766845703 0.19600680470466614 -0.2839455306529999 0.043336283415555954 0.999053955078125 -0.0 1.0317471027374268 0.825800359249115 0 1.0 0 0.0 0 0.0 0 0.0 -1.4743722677230835 0.19633153080940247 -0.2839455306529999 0.020813623443245888 0.999755859375 -0.0 0.041211605072021484 0.8255455493927002 0 1.0 0 0.0 0 0.0 0 0.0 -1.4743722677230835 0.19633153080940247 0.21605448424816132 0.020813623443245888 0.999755859375 -0.0 0.5351086258888245 0.6307108402252197 0 1.0 0 0.0 0 0.0 0 0.0 -1.6285791397094727 -0.15586857497692108 -0.2839455306529999 -0.7316507697105408 -0.6816614270210266 -0.0 0.10735753178596497 0.4370245933532715 0 1.0 0 0.0 0 0.0 0 0.0 -1.623292326927185 -0.16117845475673676 -0.2839455306529999 -0.6841028928756714 -0.7293618321418762 -0.0 0.10441264510154724 0.4322202205657959 0 1.0 0 0.0 0 0.0 0 0.0 -1.623292326927185 -0.16117845475673676 0.21605446934700012 -0.6841028928756714 -0.7293313145637512 -0.0 0.44477057456970215 0.2596014142036438 0 1.0 0 0.0 0 0.0 0 0.0 -1.4969496726989746 0.1962597668170929 -0.2839455306529999 -0.031373027712106705 0.999481201171875 -0.0 0.0616915225982666 0.8226818442344666 0 1.0 0 0.0 0 0.0 0 0.0 -1.5082894563674927 0.19571977853775024 -0.2839455306529999 -0.06512650102376938 0.9978637099266052 -0.0 0.07161593437194824 0.8200180530548096 0 1.0 0 0.0 0 0.0 0 0.0 -1.5082894563674927 0.19571977853775024 0.21605448424816132 -0.06512650102376938 0.9978637099266052 -0.0 0.5174651741981506 0.6276100873947144 0 1.0 0 0.0 0 0.0 0 0.0 1.140974998474121 -0.15927754342556 -0.2839455306529999 0.6142460107803345 -0.7890865802764893 -0.0 0.9256055355072021 0.4059785008430481 0 1.0 0 0.0 0 0.0 0 0.0 1.1473197937011719 -0.1540418416261673 -0.2839455306529999 0.6581926941871643 -0.7528305649757385 -0.0 0.9222360253334045 0.4110592007637024 0 1.0 0 0.0 0 0.0 0 0.0 1.1473197937011719 -0.1540418416261673 0.21605446934700012 0.6581926941871643 -0.7528305649757385 -0.0 0.5713964104652405 0.2639002203941345 0 1.0 0 0.0 0 0.0 0 0.0 0.060915231704711914 -0.15869742631912231 -0.2839455306529999 0.6281014680862427 -0.7780998945236206 -0.0 0.9389110207557678 0.5100195407867432 0 1.0 0 0.0 0 0.0 0 0.0 0.06545519828796387 -0.15487372875213623 -0.2839455306529999 0.6600848436355591 -0.7511520981788635 -0.0 0.9361163377761841 0.514279842376709 0 1.0 0 0.0 0 0.0 0 0.0 0.06545519828796387 -0.15487372875213623 0.21605446934700012 0.6600848436355591 -0.7511826157569885 -0.0 0.5391175150871277 0.3628878593444824 0 1.0 0 0.0 0 0.0 0 0.0 0.9150614738464355 -0.15669071674346924 -0.2839455306529999 -0.6262093186378479 -0.7796258330345154 -0.0 0.04683852195739746 0.41246914863586426 0 1.0 0 0.0 0 0.0 0 0.0 0.9252774715423584 -0.1641751527786255 -0.2839455306529999 -0.5548264980316162 -0.8319345712661743 -0.0 0.04151874780654907 0.40473806858062744 0 1.0 0 0.0 0 0.0 0 0.0 0.9252774715423584 -0.1641751527786255 0.21605446934700012 -0.5548264980316162 -0.8319345712661743 -0.0 0.4110276997089386 0.2536557912826538 0 1.0 0 0.0 0 0.0 0 0.0 -1.4130885601043701 -0.1580187976360321 -0.2839455306529999 -0.9590136408805847 -0.28333383798599243 -0.0 0.9914758205413818 0.4458812475204468 0 1.0 0 0.0 0 0.0 0 0.0 -1.4121910333633423 -0.1610325127840042 -0.2839455306529999 -0.9577013254165649 -0.28766748309135437 -0.0 0.9910306334495544 0.4431183338165283 0 1.0 0 0.0 0 0.0 0 0.0 -1.4121910333633423 -0.1610325127840042 0.21605446934700012 -0.9577013254165649 -0.28766748309135437 -0.0 0.6008166074752808 0.25882768630981445 0 1.0 0 0.0 0 0.0 0 0.0 1.3789622783660889 0.12199193239212036 -0.2839455306529999 0.2373119294643402 -0.9714041352272034 -0.0 0.016692906618118286 0.7200816869735718 0 1.0 0 0.0 0 0.0 0 0.0 1.3834502696990967 0.12297219038009644 -0.2839455306529999 0.19196142256259918 -0.9813836812973022 -0.0 0.013439804315567017 0.7215794920921326 0 1.0 0 0.0 0 0.0 0 0.0 1.3834502696990967 0.12297219038009644 0.21605446934700012 0.19196142256259918 -0.9813836812973022 -0.0 0.4649874269962311 0.55951327085495 0 1.0 0 0.0 0 0.0 0 0.0 -0.12723302841186523 -0.15609964728355408 -0.2839455306529999 -0.7316202521324158 -0.6816614270210266 -0.0 0.05095714330673218 0.5173731446266174 0 1.0 0 0.0 0 0.0 0 0.0 -0.12352848052978516 -0.15986010432243347 -0.2839455306529999 -0.6927701830863953 -0.7211218476295471 -0.0 0.04883506894111633 0.5131371021270752 0 1.0 0 0.0 0 0.0 0 0.0 -0.12352848052978516 -0.15986010432243347 0.21605446934700012 -0.6927701830863953 -0.7211218476295471 -0.0 0.41502389311790466 0.36715227365493774 0 1.0 0 0.0 0 0.0 0 0.0 1.4440891742706299 0.12279704213142395 -0.2839455306529999 -0.2370677888393402 -0.9714651703834534 -0.0 0.968167781829834 0.7213026285171509 0 1.0 0 0.0 0 0.0 0 0.0 1.4479458332061768 0.12175354361534119 -0.2839455306529999 -0.286935031414032 -0.9579149484634399 -0.0 0.9653576612472534 0.7197879552841187 0 1.0 0 0.0 0 0.0 0 0.0 1.4479458332061768 0.12175354361534119 0.21605446934700012 -0.286935031414032 -0.9579149484634399 -0.0 0.5025306344032288 0.556988000869751 0 1.0 0 0.0 0 0.0 0 0.0 -1.4542906284332275 0.1954655945301056 -0.2839455306529999 0.06796471774578094 0.9976806044578552 -0.0 1.02272629737854 0.8254101276397705 0 1.0 0 0.0 0 0.0 0 0.0 -1.4640979766845703 0.19600680470466614 -0.2839455306529999 0.043336283415555954 0.999053955078125 -0.0 1.0317471027374268 0.825800359249115 0 1.0 0 0.0 0 0.0 0 0.0 -1.4640979766845703 0.19600680470466614 0.21605448424816132 0.043336283415555954 0.999053955078125 -0.0 0.5404836535453796 0.6309982538223267 0 1.0 0 0.0 0 0.0 0 0.0 -1.5082894563674927 0.19571977853775024 -0.2839455306529999 -0.06512650102376938 0.9978637099266052 -0.0 0.07161593437194824 0.8200180530548096 0 1.0 0 0.0 0 0.0 0 0.0 -1.5191329717636108 0.19481980800628662 -0.2839455306529999 -0.10180974751710892 0.9947813153266907 -0.0 0.08076804876327515 0.8166956305503845 0 1.0 0 0.0 0 0.0 0 0.0 -1.5191329717636108 0.19481980800628662 0.21605448424816132 -0.10180974751710892 0.9947813153266907 -0.0 0.5118923187255859 0.6258165240287781 0 1.0 0 0.0 0 0.0 0 0.0 1.1343259811401367 -0.16415569186210632 -0.2839455306529999 0.5680715441703796 -0.8229621052742004 -0.0 0.9291298389434814 0.4012235999107361 0 1.0 0 0.0 0 0.0 0 0.0 1.140974998474121 -0.15927754342556 -0.2839455306529999 0.6142460107803345 -0.7890865802764893 -0.0 0.9256055355072021 0.4059785008430481 0 1.0 0 0.0 0 0.0 0 0.0 1.140974998474121 -0.15927754342556 0.21605446934700012 0.6142460107803345 -0.7890865802764893 -0.0 0.5680148601531982 0.2573285698890686 0 1.0 0 0.0 0 0.0 0 0.0 -1.3165510892868042 -0.1623399257659912 -0.2839455306529999 0.9355143904685974 0.35322123765945435 -0.0 0.9460681080818176 0.45470309257507324 0 1.0 0 0.0 0 0.0 0 0.0 -1.3180822134017944 -0.15815743803977966 -0.2839455306529999 0.9425641894340515 0.3339335322380066 -0.0 0.946491003036499 0.4581177234649658 0 1.0 0 0.0 0 0.0 0 0.0 -1.3180822134017944 -0.15815743803977966 0.21605446934700012 0.9425641894340515 0.3339335322380066 -0.0 0.6523339748382568 0.3003944158554077 0 1.0 0 0.0 0 0.0 0 0.0 0.0561976432800293 -0.1623460054397583 -0.2839455306529999 0.5953550934791565 -0.8034607768058777 -0.0 0.9418076276779175 0.5059475302696228 0 1.0 0 0.0 0 0.0 0 0.0 0.060915231704711914 -0.15869742631912231 -0.2839455306529999 0.6281014680862427 -0.7780998945236206 -0.0 0.9389110207557678 0.5100195407867432 0 1.0 0 0.0 0 0.0 0 0.0 0.060915231704711914 -0.15869742631912231 0.21605446934700012 0.6281014680862427 -0.7780998945236206 -0.0 0.5364377498626709 0.35780781507492065 0 1.0 0 0.0 0 0.0 0 0.0 1.3747813701629639 0.12086087465286255 -0.2839455306529999 0.28769800066947937 -0.9577013254165649 -0.0 0.01968926191329956 0.7184059023857117 0 1.0 0 0.0 0 0.0 0 0.0 1.3789622783660889 0.12199193239212036 -0.2839455306529999 0.2373119294643402 -0.9714041352272034 -0.0 0.016692906618118286 0.7200816869735718 0 1.0 0 0.0 0 0.0 0 0.0 1.3789622783660889 0.12199193239212036 0.21605446934700012 0.2373119294643402 -0.9714041352272034 -0.0 0.46238431334495544 0.5584733486175537 0 1.0 0 0.0 0 0.0 0 0.0 -0.12352848052978516 -0.15986010432243347 -0.2839455306529999 -0.6927701830863953 -0.7211218476295471 -0.0 0.04883506894111633 0.5131371021270752 0 1.0 0 0.0 0 0.0 0 0.0 -0.11959528923034668 -0.16343571245670319 -0.2839455306529999 -0.652363657951355 -0.7578661441802979 -0.0 0.04659029841423035 0.5090819597244263 0 1.0 0 0.0 0 0.0 0 0.0 -0.11959528923034668 -0.16343571245670319 0.21605446934700012 -0.652363657951355 -0.7578661441802979 -0.0 0.4169861674308777 0.36227452754974365 0 1.0 0 0.0 0 0.0 0 0.0 1.127382755279541 -0.1686592400074005 -0.2839455306529999 0.5195471048355103 -0.8544266819953918 -0.0 0.9328085780143738 0.3968101739883423 0 1.0 0 0.0 0 0.0 0 0.0 1.1343259811401367 -0.16415569186210632 -0.2839455306529999 0.5680715441703796 -0.8229621052742004 -0.0 0.9291298389434814 0.4012235999107361 0 1.0 0 0.0 0 0.0 0 0.0 1.1343259811401367 -0.16415569186210632 0.21605446934700012 0.5680715441703796 -0.8229621052742004 -0.0 0.5642899870872498 0.25105178356170654 0 1.0 0 0.0 0 0.0 0 0.0 -1.4391368627548218 -0.16161872446537018 -0.2839455306529999 0.5882442593574524 -0.808648943901062 -0.0 1.0055162906646729 0.4394006133079529 0 1.0 0 0.0 0 0.0 0 0.0 -1.4347147941589355 -0.158298522233963 -0.2839455306529999 0.6121707558631897 -0.790704071521759 -0.0 1.0031116008758545 0.4430910348892212 0 1.0 0 0.0 0 0.0 0 0.0 -1.4347147941589355 -0.158298522233963 0.21605446934700012 0.6121707558631897 -0.790704071521759 -0.0 0.5846648812294006 0.254062294960022 0 1.0 0 0.0 0 0.0 0 0.0 1.4479458332061768 0.12175354361534119 -0.2839455306529999 -0.286935031414032 -0.9579149484634399 -0.0 0.9653576612472534 0.7197879552841187 0 1.0 0 0.0 0 0.0 0 0.0 1.4516055583953857 0.12054949998855591 -0.2839455306529999 -0.3397320508956909 -0.9405194520950317 -0.0 0.9627194404602051 0.7180825471878052 0 1.0 0 0.0 0 0.0 0 0.0 1.4516055583953857 0.12054949998855591 0.21605446934700012 -0.3397320508956909 -0.9405194520950317 -0.0 0.5046564340591431 0.5555700063705444 0 1.0 0 0.0 0 0.0 0 0.0 -1.4449502229690552 0.19470790028572083 -0.2839455306529999 0.0949736014008522 0.9954527616500854 -0.0 1.0142098665237427 0.8244448900222778 0 1.0 0 0.0 0 0.0 0 0.0 -1.4542906284332275 0.1954655945301056 -0.2839455306529999 0.06796471774578094 0.9976806044578552 -0.0 1.02272629737854 0.8254101276397705 0 1.0 0 0.0 0 0.0 0 0.0 -1.4542906284332275 0.1954655945301056 0.21605448424816132 0.06796471774578094 0.9976806044578552 -0.0 0.5456142425537109 0.6309813857078552 0 1.0 0 0.0 0 0.0 0 0.0 0.9252774715423584 -0.1641751527786255 -0.2839455306529999 -0.5548264980316162 -0.8319345712661743 -0.0 0.04151874780654907 0.40473806858062744 0 1.0 0 0.0 0 0.0 0 0.0 0.9361939430236816 -0.1707790642976761 -0.2839455306529999 -0.48020875453948975 -0.8771324753761292 -0.0 0.0358147919178009 0.39780449867248535 0 1.0 0 0.0 0 0.0 0 0.0 0.9361939430236816 -0.1707790642976761 0.21605445444583893 -0.48020875453948975 -0.8771324753761292 -0.0 0.41742268204689026 0.24444663524627686 0 1.0 0 0.0 0 0.0 0 0.0 -1.4121910333633423 -0.1610325127840042 -0.2839455306529999 -0.9577013254165649 -0.28766748309135437 -0.0 0.9910306334495544 0.4431183338165283 0 1.0 0 0.0 0 0.0 0 0.0 -1.4113178253173828 -0.16391488909721375 -0.2839455306529999 -0.9562669992446899 -0.2923673093318939 -0.0 0.9906004667282104 0.4405066967010498 0 1.0 0 0.0 0 0.0 0 0.0 -1.4113178253173828 -0.16391488909721375 0.21605446934700012 -0.9562975168228149 -0.2923673093318939 -0.0 0.6017979383468628 0.2564786672592163 0 1.0 0 0.0 0 0.0 0 0.0 -1.5191329717636108 0.19481980800628662 -0.2839455306529999 -0.10180974751710892 0.9947813153266907 -0.0 0.08076804876327515 0.8166956305503845 0 1.0 0 0.0 0 0.0 0 0.0 -1.5294803380966187 0.19355982542037964 -0.2839455306529999 -0.14157536625862122 0.9898983836174011 -0.0 0.08913213014602661 0.8128165006637573 0 1.0 0 0.0 0 0.0 0 0.0 -1.5294803380966187 0.19355982542037964 0.21605448424816132 -0.14157536625862122 0.9898983836174011 -0.0 0.5066177845001221 0.6236889958381653 0 1.0 0 0.0 0 0.0 0 0.0 0.051302433013916016 -0.1658194363117218 -0.2839455306529999 0.5619983673095703 -0.82711261510849 -0.0 0.944807767868042 0.5020663142204285 0 1.0 0 0.0 0 0.0 0 0.0 0.0561976432800293 -0.1623460054397583 -0.2839455306529999 0.5953550934791565 -0.8034607768058777 -0.0 0.9418076276779175 0.5059475302696228 0 1.0 0 0.0 0 0.0 0 0.0 0.0561976432800293 -0.1623460054397583 0.21605446934700012 0.5953550934791565 -0.8034607768058777 -0.0 0.5335861444473267 0.3529229164123535 0 1.0 0 0.0 0 0.0 0 0.0 -1.623292326927185 -0.16117845475673676 -0.2839455306529999 -0.6841028928756714 -0.7293618321418762 -0.0 0.10441264510154724 0.4322202205657959 0 1.0 0 0.0 0 0.0 0 0.0 -1.6176066398620605 -0.1661575436592102 -0.2839455306529999 -0.6310006976127625 -0.7757499814033508 -0.0 0.10129424929618835 0.42771822214126587 0 1.0 0 0.0 0 0.0 0 0.0 -1.6176066398620605 -0.1661575436592102 0.21605446934700012 -0.6310006976127625 -0.7757499814033508 -0.0 0.44777432084083557 0.2533940076828003 0 1.0 0 0.0 0 0.0 0 0.0 1.5743725299835205 0.11358323693275452 -0.2839455306529999 0.9285256266593933 0.3712271451950073 -0.0 0.8871409893035889 0.6785174608230591 0 1.0 0 0.0 0 0.0 0 0.0 1.571234941482544 0.12087064981460571 -0.2839455306529999 0.9072847962379456 0.4204840362071991 -0.0 0.8879491686820984 0.6863942742347717 0 1.0 0 0.0 0 0.0 0 0.0 1.571234941482544 0.12087064981460571 0.21605446934700012 0.9072847962379456 0.4204840362071991 -0.0 0.5672978758811951 0.5468026995658875 0 1.0 0 0.0 0 0.0 0 0.0 -0.11959528923034668 -0.16343571245670319 -0.2839455306529999 -0.652363657951355 -0.7578661441802979 -0.0 0.04659029841423035 0.5090819597244263 0 1.0 0 0.0 0 0.0 0 0.0 -0.1154334545135498 -0.16682644188404083 -0.2839455306529999 -0.6108585000038147 -0.791711151599884 -0.0 0.0442197322845459 0.5052071809768677 0 1.0 0 0.0 0 0.0 0 0.0 -0.1154334545135498 -0.16682644188404083 0.21605446934700012 -0.6108585000038147 -0.791711151599884 -0.0 0.41913461685180664 0.35754483938217163 0 1.0 0 0.0 0 0.0 0 0.0 1.120154857635498 -0.17277118563652039 -0.2839455306529999 0.4693136513233185 -0.8830225467681885 -0.0 0.9366409182548523 0.39275485277175903 0 1.0 0 0.0 0 0.0 0 0.0 1.127382755279541 -0.1686592400074005 -0.2839455306529999 0.5195471048355103 -0.8544266819953918 -0.0 0.9328085780143738 0.3968101739883423 0 1.0 0 0.0 0 0.0 0 0.0 1.127382755279541 -0.1686592400074005 0.21605446934700012 0.5195471048355103 -0.8544266819953918 -0.0 0.5602080821990967 0.2450999617576599 0 1.0 0 0.0 0 0.0 0 0.0 -1.4360769987106323 0.19373372197151184 -0.2839455306529999 0.12469863146543503 0.9921872615814209 -0.0 1.006239652633667 0.8229754567146301 0 1.0 0 0.0 0 0.0 0 0.0 -1.4449502229690552 0.19470790028572083 -0.2839455306529999 0.0949736014008522 0.9954527616500854 -0.0 1.0142098665237427 0.8244448900222778 0 1.0 0 0.0 0 0.0 0 0.0 -1.4449502229690552 0.19470790028572083 0.21605448424816132 0.0949736014008522 0.9954527616500854 -0.0 0.550495445728302 0.6306784749031067 0 1.0 0 0.0 0 0.0 0 0.0 0.9361939430236816 -0.1707790642976761 -0.2839455306529999 -0.48020875453948975 -0.8771324753761292 -0.0 0.0358147919178009 0.39780449867248535 0 1.0 0 0.0 0 0.0 0 0.0 0.9478108882904053 -0.17650245130062103 -0.2839455306529999 -0.4042481780052185 -0.9146091938018799 -0.0 0.029709041118621826 0.3916749358177185 0 1.0 0 0.0 0 0.0 0 0.0 0.9478108882904053 -0.17650245130062103 0.21605445444583893 -0.4042481780052185 -0.9146091938018799 -0.0 0.4247432053089142 0.23605746030807495 0 1.0 0 0.0 0 0.0 0 0.0 1.3709065914154053 0.119579017162323 -0.2839455306529999 0.34345531463623047 -0.939146101474762 -0.0 0.02243223786354065 0.7165648937225342 0 1.0 0 0.0 0 0.0 0 0.0 1.3747813701629639 0.12086087465286255 -0.2839455306529999 0.28769800066947937 -0.9577013254165649 -0.0 0.01968926191329956 0.7184059023857117 0 1.0 0 0.0 0 0.0 0 0.0 1.3747813701629639 0.12086087465286255 0.21605446934700012 0.28769800066947937 -0.9577013254165649 -0.0 0.4599589407444 0.5572682619094849 0 1.0 0 0.0 0 0.0 0 0.0 -1.4436075687408447 -0.16476865112781525 -0.2839455306529999 0.5632495880126953 -0.82625812292099 -0.0 1.0079450607299805 0.43590283393859863 0 1.0 0 0.0 0 0.0 0 0.0 -1.4391368627548218 -0.16161872446537018 -0.2839455306529999 0.5882442593574524 -0.808648943901062 -0.0 1.0055162906646729 0.4394006133079529 0 1.0 0 0.0 0 0.0 0 0.0 -1.4391368627548218 -0.16161872446537018 0.21605446934700012 0.5882442593574524 -0.808648943901062 -0.0 0.5818189978599548 0.24963682889938354 0 1.0 0 0.0 0 0.0 0 0.0 1.4516055583953857 0.12054949998855591 -0.2839455306529999 -0.3397320508956909 -0.9405194520950317 -0.0 0.9627194404602051 0.7180825471878052 0 1.0 0 0.0 0 0.0 0 0.0 1.4550678730010986 0.1191849410533905 -0.2839455306529999 -0.395092636346817 -0.9186071157455444 -0.0 0.9602533578872681 0.716193675994873 0 1.0 0 0.0 0 0.0 0 0.0 1.4550678730010986 0.1191849410533905 0.21605446934700012 -0.395092636346817 -0.9186071157455444 -0.0 0.5066676139831543 0.553982675075531 0 1.0 0 0.0 0 0.0 0 0.0 0.04622983932495117 -0.1691177487373352 -0.2839455306529999 0.5282753705978394 -0.8490554690361023 -0.0 0.9479126930236816 0.4983783960342407 0 1.0 0 0.0 0 0.0 0 0.0 0.051302433013916016 -0.1658194363117218 -0.2839455306529999 0.5619983673095703 -0.82711261510849 -0.0 0.944807767868042 0.5020663142204285 0 1.0 0 0.0 0 0.0 0 0.0 0.051302433013916016 -0.1658194363117218 0.21605446934700012 0.5619983673095703 -0.82711261510849 -0.0 0.5305591821670532 0.3482418656349182 0 1.0 0 0.0 0 0.0 0 0.0 -1.4276705980300903 0.19254305958747864 -0.2839455306529999 0.15738394856452942 0.9875179529190063 -0.0 0.9988397359848022 0.8210697174072266 0 1.0 0 0.0 0 0.0 0 0.0 -1.4360769987106323 0.19373372197151184 -0.2839455306529999 0.12469863146543503 0.9921872615814209 -0.0 1.006239652633667 0.8229754567146301 0 1.0 0 0.0 0 0.0 0 0.0 -1.4360769987106323 0.19373372197151184 0.21605448424816132 0.12469863146543503 0.9921872615814209 -0.0 0.5551243424415588 0.6301071643829346 0 1.0 0 0.0 0 0.0 0 0.0 -0.1154334545135498 -0.16682644188404083 -0.2839455306529999 -0.6108585000038147 -0.791711151599884 -0.0 0.0442197322845459 0.5052071809768677 0 1.0 0 0.0 0 0.0 0 0.0 -0.11104297637939453 -0.1700323224067688 -0.2839455306529999 -0.5687124133110046 -0.8225043416023254 -0.0 0.04172012209892273 0.5015124082565308 0 1.0 0 0.0 0 0.0 0 0.0 -0.11104297637939453 -0.1700323224067688 0.21605446934700012 -0.5687124133110046 -0.8225043416023254 -0.0 0.4214754104614258 0.35296761989593506 0 1.0 0 0.0 0 0.0 0 0.0 -1.5294803380966187 0.19355982542037964 -0.2839455306529999 -0.14157536625862122 0.9898983836174011 -0.0 0.08913213014602661 0.8128165006637573 0 1.0 0 0.0 0 0.0 0 0.0 -1.5393314361572266 0.19193986058235168 -0.2839455306529999 -0.18469801545143127 0.982787549495697 -0.0 0.0967160165309906 0.8084730505943298 0 1.0 0 0.0 0 0.0 0 0.0 -1.5393314361572266 0.19193986058235168 0.21605448424816132 -0.18469801545143127 0.982787549495697 -0.0 0.5016401410102844 0.6212486028671265 0 1.0 0 0.0 0 0.0 0 0.0 1.112642526626587 -0.17649151384830475 -0.2839455306529999 0.41837823390960693 -0.9082613587379456 -0.0 0.9406315088272095 0.38906025886535645 0 1.0 0 0.0 0 0.0 0 0.0 1.120154857635498 -0.17277118563652039 -0.2839455306529999 0.4693136513233185 -0.8830225467681885 -0.0 0.9366409182548523 0.39275485277175903 0 1.0 0 0.0 0 0.0 0 0.0 1.120154857635498 -0.17277118563652039 0.21605445444583893 0.4693136513233185 -0.8830225467681885 -0.0 0.5557567477226257 0.23950564861297607 0 1.0 0 0.0 0 0.0 0 0.0 -1.3149055242538452 -0.1665686070919037 -0.2839455306529999 0.9283425211906433 0.3716544210910797 -0.0 0.9456060528755188 0.45131754875183105 0 1.0 0 0.0 0 0.0 0 0.0 -1.3165510892868042 -0.1623399257659912 -0.2839455306529999 0.9355143904685974 0.35322123765945435 -0.0 0.9460681080818176 0.45470309257507324 0 1.0 0 0.0 0 0.0 0 0.0 -1.3165510892868042 -0.1623399257659912 0.21605446934700012 0.9355143904685974 0.35322123765945435 -0.0 0.6536282896995544 0.29756665229797363 0 1.0 0 0.0 0 0.0 0 0.0 1.2651219367980957 0.1198587417602539 -0.2839455306529999 -0.9349040389060974 0.35483869910240173 -0.0 0.08682137727737427 0.6905054450035095 0 1.0 0 0.0 0 0.0 0 0.0 1.2627358436584473 0.11276590824127197 -0.2839455306529999 -0.9591967463493347 0.28269293904304504 -0.0 0.08741724491119385 0.6831651926040649 0 1.0 0 0.0 0 0.0 0 0.0 1.2627358436584473 0.11276590824127197 0.21605446934700012 -0.9591967463493347 0.28269293904304504 -0.0 0.4022684395313263 0.5451506972312927 0 1.0 0 0.0 0 0.0 0 0.0 -1.4113178253173828 -0.16391488909721375 -0.2839455306529999 -0.9562669992446899 -0.2923673093318939 -0.0 0.9906004667282104 0.4405066967010498 0 1.0 0 0.0 0 0.0 0 0.0 -1.4104689359664917 -0.1666659116744995 -0.2839455306529999 -0.9546800255775452 -0.29752495884895325 -0.0 0.9901849031448364 0.4380425810813904 0 1.0 0 0.0 0 0.0 0 0.0 -1.4104689359664917 -0.1666659116744995 0.21605446934700012 -0.9546800255775452 -0.29752495884895325 -0.0 0.6027480363845825 0.25427156686782837 0 1.0 0 0.0 0 0.0 0 0.0 1.1048455238342285 -0.1798202246427536 -0.2839455306529999 0.3672292232513428 -0.9301126003265381 -0.0 0.9447846412658691 0.3857303857803345 0 1.0 0 0.0 0 0.0 0 0.0 1.112642526626587 -0.17649151384830475 -0.2839455306529999 0.41837823390960693 -0.9082613587379456 -0.0 0.9406315088272095 0.38906025886535645 0 1.0 0 0.0 0 0.0 0 0.0 1.112642526626587 -0.17649151384830475 0.21605445444583893 0.41837823390960693 -0.9082613587379456 -0.0 0.550920307636261 0.23428791761398315 0 1.0 0 0.0 0 0.0 0 0.0 0.040979623794555664 -0.17224091291427612 0.21605443954467773 0.4943388104438782 -0.869228184223175 -0.0 0.5239675045013428 0.3395310640335083 0 1.0 0 0.0 0 0.0 0 0.0 0.040979623794555664 -0.17224091291427612 -0.2839455306529999 0.4943388104438782 -0.869228184223175 -0.0 0.9511236548423767 0.49488651752471924 0 1.0 0 0.0 0 0.0 0 0.0 0.04622983932495117 -0.1691177487373352 -0.2839455306529999 0.5282753705978394 -0.8490554690361023 -0.0 0.9479126930236816 0.4983783960342407 0 1.0 0 0.0 0 0.0 0 0.0 -1.4197313785552979 0.19113591313362122 -0.2839455306529999 0.19345682859420776 0.9810785055160522 -0.0 0.9920201301574707 0.8187916874885559 0 1.0 0 0.0 0 0.0 0 0.0 -1.4276705980300903 0.19254305958747864 -0.2839455306529999 0.15738394856452942 0.9875179529190063 -0.0 0.9988397359848022 0.8210697174072266 0 1.0 0 0.0 0 0.0 0 0.0 -1.4276705980300903 0.19254305958747864 0.21605448424816132 0.15738394856452942 0.9875179529190063 -0.0 0.5595005750656128 0.6292844414710999 0 1.0 0 0.0 0 0.0 0 0.0 0.9478108882904053 -0.17650245130062103 -0.2839455306529999 -0.4042481780052185 -0.9146091938018799 -0.0 0.029709041118621826 0.3916749358177185 0 1.0 0 0.0 0 0.0 0 0.0 0.9601285457611084 -0.18134532868862152 -0.2839455306529999 -0.32877591252326965 -0.9443953037261963 -0.0 0.023186177015304565 0.3863646388053894 0 1.0 0 0.0 0 0.0 0 0.0 0.9601285457611084 -0.18134532868862152 0.21605445444583893 -0.32877591252326965 -0.9443953037261963 -0.0 0.4330454468727112 0.22857457399368286 0 1.0 0 0.0 0 0.0 0 0.0 1.367337942123413 0.11814635992050171 -0.2839455306529999 0.4048890769481659 -0.9143345355987549 -0.0 0.0249251127243042 0.7145698070526123 0 1.0 0 0.0 0 0.0 0 0.0 1.3709065914154053 0.119579017162323 -0.2839455306529999 0.34345531463623047 -0.939146101474762 -0.0 0.02243223786354065 0.7165648937225342 0 1.0 0 0.0 0 0.0 0 0.0 1.3709065914154053 0.119579017162323 0.21605446934700012 0.34345531463623047 -0.939146101474762 -0.0 0.45770883560180664 0.5559004545211792 0 1.0 0 0.0 0 0.0 0 0.0 -0.11104297637939453 -0.1700323224067688 -0.2839455306529999 -0.5687124133110046 -0.8225043416023254 -0.0 0.04172012209892273 0.5015124082565308 0 1.0 0 0.0 0 0.0 0 0.0 -0.10642385482788086 -0.1730533391237259 -0.2839455306529999 -0.5263221859931946 -0.8502761721611023 -0.0 0.03908824920654297 0.49799811840057373 0 1.0 0 0.0 0 0.0 0 0.0 -0.10642385482788086 -0.1730533391237259 0.21605445444583893 -0.5263221859931946 -0.8502761721611023 -0.0 0.4240148663520813 0.3485482335090637 0 1.0 0 0.0 0 0.0 0 0.0 -1.5393314361572266 0.19193986058235168 -0.2839455306529999 -0.18469801545143127 0.982787549495697 -0.0 0.0967160165309906 0.8084730505943298 0 1.0 0 0.0 0 0.0 0 0.0 -1.5486863851547241 0.18995991349220276 -0.2839455306529999 -0.23126927018165588 0.9728690385818481 -0.0 0.10354465246200562 0.8037464022636414 0 1.0 0 0.0 0 0.0 0 0.0 -1.5486863851547241 0.18995991349220276 0.21605448424816132 -0.23126927018165588 0.9728690385818481 -0.0 0.4969555139541626 0.6185140609741211 0 1.0 0 0.0 0 0.0 0 0.0 -1.4481269121170044 -0.1677483171224594 -0.2839455306529999 0.5372173190116882 -0.843409538269043 -0.0 1.0103981494903564 0.43259626626968384 0 1.0 0 0.0 0 0.0 0 0.0 -1.4436075687408447 -0.16476865112781525 -0.2839455306529999 0.5632495880126953 -0.82625812292099 -0.0 1.0079450607299805 0.43590283393859863 0 1.0 0 0.0 0 0.0 0 0.0 -1.4436075687408447 -0.16476865112781525 0.21605446934700012 0.5632495880126953 -0.82625812292099 -0.0 0.5788551568984985 0.2454366683959961 0 1.0 0 0.0 0 0.0 0 0.0 1.4550678730010986 0.1191849410533905 -0.2839455306529999 -0.395092636346817 -0.9186071157455444 -0.0 0.9602533578872681 0.716193675994873 0 1.0 0 0.0 0 0.0 0 0.0 1.4583332538604736 0.11765983700752258 -0.2839455306529999 -0.4525589644908905 -0.8917203545570374 -0.0 0.9579584002494812 0.7141270637512207 0 1.0 0 0.0 0 0.0 0 0.0 1.4583332538604736 0.11765983700752258 0.21605446934700012 -0.4525589644908905 -0.8917203545570374 -0.0 0.5085653066635132 0.5522264838218689 0 1.0 0 0.0 0 0.0 0 0.0 -1.6176066398620605 -0.1661575436592102 -0.2839455306529999 -0.6310006976127625 -0.7757499814033508 -0.0 0.10129424929618835 0.42771822214126587 0 1.0 0 0.0 0 0.0 0 0.0 -1.61158287525177 -0.17070366442203522 -0.2839455306529999 -0.5730155110359192 -0.8195135593414307 -0.0 0.09803354740142822 0.4236064553260803 0 1.0 0 0.0 0 0.0 0 0.0 -1.61158287525177 -0.17070366442203522 0.21605445444583893 -0.5730155110359192 -0.8195135593414307 -0.0 0.4511343836784363 0.24751901626586914 0 1.0 0 0.0 0 0.0 0 0.0 1.0967638492584229 -0.18275731801986694 -0.2839455306529999 0.3164159059524536 -0.9486068487167358 -0.0 0.9491041898727417 0.382770836353302 0 1.0 0 0.0 0 0.0 0 0.0 1.1048455238342285 -0.1798202246427536 -0.2839455306529999 0.3672292232513428 -0.9301126003265381 -0.0 0.9447846412658691 0.3857303857803345 0 1.0 0 0.0 0 0.0 0 0.0 1.1048455238342285 -0.1798202246427536 0.21605445444583893 0.3672292232513428 -0.9301126003265381 -0.0 0.5456847548484802 0.2294696569442749 0 1.0 0 0.0 0 0.0 0 0.0 0.03555178642272949 -0.17518897354602814 -0.2839455306529999 0.4603717029094696 -0.887691855430603 -0.0 0.9544415473937988 0.49159348011016846 0 1.0 0 0.0 0 0.0 0 0.0 0.040979623794555664 -0.17224091291427612 -0.2839455306529999 0.4943388104438782 -0.869228184223175 -0.0 0.9511236548423767 0.49488651752471924 0 1.0 0 0.0 0 0.0 0 0.0 0.040979623794555664 -0.17224091291427612 0.21605443954467773 0.4943388104438782 -0.869228184223175 -0.0 0.5239675045013428 0.3395310640335083 0 1.0 0 0.0 0 0.0 0 0.0 -1.4122591018676758 0.18951231241226196 -0.2839455306529999 0.23322245478630066 0.9724112749099731 -0.0 0.9857782125473022 0.8161996603012085 0 1.0 0 0.0 0 0.0 0 0.0 -1.4197313785552979 0.19113591313362122 -0.2839455306529999 0.19345682859420776 0.9810785055160522 -0.0 0.9920201301574707 0.8187916874885559 0 1.0 0 0.0 0 0.0 0 0.0 -1.4197313785552979 0.19113591313362122 0.21605448424816132 0.19345682859420776 0.9810785055160522 -0.0 0.563625156879425 0.6282258033752441 0 1.0 0 0.0 0 0.0 0 0.0 0.9601285457611084 -0.18134532868862152 -0.2839455306529999 -0.32877591252326965 -0.9443953037261963 -0.0 0.023186177015304565 0.3863646388053894 0 1.0 0 0.0 0 0.0 0 0.0 0.9731466770172119 -0.18530766665935516 -0.2839455306529999 -0.2553483545780182 -0.9668263792991638 -0.0 0.016234666109085083 0.3818973898887634 0 1.0 0 0.0 0 0.0 0 0.0 0.9731466770172119 -0.18530766665935516 0.21605445444583893 -0.2553483545780182 -0.9668263792991638 -0.0 0.4423677325248718 0.22210901975631714 0 1.0 0 0.0 0 0.0 0 0.0 1.3640763759613037 0.1165628731250763 -0.2839455306529999 0.47178563475608826 -0.8816797137260437 -0.0 0.02717110514640808 0.7124300003051758 0 1.0 0 0.0 0 0.0 0 0.0 1.367337942123413 0.11814635992050171 -0.2839455306529999 0.4048890769481659 -0.9143345355987549 -0.0 0.0249251127243042 0.7145698070526123 0 1.0 0 0.0 0 0.0 0 0.0 1.367337942123413 0.11814635992050171 0.21605446934700012 0.4048890769481659 -0.9143345355987549 -0.0 0.4556320011615753 0.5543718338012695 0 1.0 0 0.0 0 0.0 0 0.0 -0.10642385482788086 -0.1730533391237259 -0.2839455306529999 -0.5263221859931946 -0.8502761721611023 -0.0 0.03908824920654297 0.49799811840057373 0 1.0 0 0.0 0 0.0 0 0.0 -0.10157608985900879 -0.1758894920349121 -0.2839455306529999 -0.4847559928894043 -0.8746299743652344 -0.0 0.03632086515426636 0.49466484785079956 0 1.0 0 0.0 0 0.0 0 0.0 -0.10157608985900879 -0.1758894920349121 0.21605445444583893 -0.4847559928894043 -0.8746299743652344 -0.0 0.42675918340682983 0.34429383277893066 0 1.0 0 0.0 0 0.0 0 0.0 -1.5486863851547241 0.18995991349220276 -0.2839455306529999 -0.23126927018165588 0.9728690385818481 -0.0 0.10354465246200562 0.8037464022636414 0 1.0 0 0.0 0 0.0 0 0.0 -1.5575450658798218 0.18761995434761047 -0.2839455306529999 -0.28141117095947266 0.9595629572868347 -0.0 0.10965383052825928 0.7987056970596313 0 1.0 0 0.0 0 0.0 0 0.0 -1.5575450658798218 0.18761995434761047 0.21605448424816132 -0.28141117095947266 0.9595629572868347 -0.0 0.4925583004951477 0.6155014038085938 0 1.0 0 0.0 0 0.0 0 0.0 -1.3131457567214966 -0.17084351181983948 -0.2839455306529999 0.921079158782959 0.3892941176891327 -0.0 0.945106029510498 0.4479633569717407 0 1.0 0 0.0 0 0.0 0 0.0 -1.3149055242538452 -0.1665686070919037 -0.2839455306529999 0.9283425211906433 0.3716544210910797 -0.0 0.9456060528755188 0.45131754875183105 0 1.0 0 0.0 0 0.0 0 0.0 -1.3149055242538452 -0.1665686070919037 0.21605446934700012 0.9283425211906433 0.3716544210910797 -0.0 0.6549756526947021 0.2948046922683716 0 1.0 0 0.0 0 0.0 0 0.0 1.4583332538604736 0.11765983700752258 -0.2839455306529999 -0.4525589644908905 -0.8917203545570374 -0.0 0.9579584002494812 0.7141270637512207 0 1.0 0 0.0 0 0.0 0 0.0 1.4614017009735107 0.11597418785095215 -0.2839455306529999 -0.5114291906356812 -0.8593096733093262 -0.0 0.9558334350585938 0.7118881940841675 0 1.0 0 0.0 0 0.0 0 0.0 1.4614017009735107 0.11597418785095215 0.21605446934700012 -0.5114291906356812 -0.8593096733093262 -0.0 0.5103503465652466 0.5503014326095581 0 1.0 0 0.0 0 0.0 0 0.0 -1.4104689359664917 -0.1666659116744995 -0.2839455306529999 -0.9546800255775452 -0.29752495884895325 -0.0 0.9901849031448364 0.4380425810813904 0 1.0 0 0.0 0 0.0 0 0.0 -1.409644365310669 -0.1692855805158615 -0.2839455306529999 -0.9529099464416504 -0.3032013773918152 -0.0 0.9897835850715637 0.4357222318649292 0 1.0 0 0.0 0 0.0 0 0.0 -1.409644365310669 -0.1692855805158615 0.21605446934700012 -0.9529099464416504 -0.3031708598136902 -0.0 0.6036663055419922 0.2522021532058716 0 1.0 0 0.0 0 0.0 0 0.0 1.088397741317749 -0.18530280888080597 -0.2839455306529999 0.26642659306526184 -0.9638355374336243 -0.0 0.9535930156707764 0.3801887631416321 0 1.0 0 0.0 0 0.0 0 0.0 1.0967638492584229 -0.18275731801986694 -0.2839455306529999 0.3164159059524536 -0.9486068487167358 -0.0 0.9491041898727417 0.382770836353302 0 1.0 0 0.0 0 0.0 0 0.0 1.0967638492584229 -0.18275731801986694 0.21605445444583893 0.3164159059524536 -0.9486068487167358 -0.0 0.5400393009185791 0.22507810592651367 0 1.0 0 0.0 0 0.0 0 0.0 0.03000950813293457 -0.17793026566505432 -0.2839455306529999 0.42597734928131104 -0.904721200466156 -0.0 0.9578284025192261 0.48853766918182373 0 1.0 0 0.0 0 0.0 0 0.0 0.03555178642272949 -0.17518897354602814 -0.2839455306529999 0.4603717029094696 -0.887691855430603 -0.0 0.9544415473937988 0.49159348011016846 0 1.0 0 0.0 0 0.0 0 0.0 0.03555178642272949 -0.17518897354602814 0.21605445444583893 0.4603717029094696 -0.887691855430603 -0.0 0.5203983187675476 0.33552277088165283 0 1.0 0 0.0 0 0.0 0 0.0 -1.4052537679672241 0.1876722276210785 -0.2839455306529999 0.2771080732345581 0.9608142375946045 -0.0 0.9801024794578552 0.8133453130722046 0 1.0 0 0.0 0 0.0 0 0.0 -1.4122591018676758 0.18951231241226196 -0.2839455306529999 0.23322245478630066 0.9724112749099731 -0.0 0.9857782125473022 0.8161996603012085 0 1.0 0 0.0 0 0.0 0 0.0 -1.4122591018676758 0.18951231241226196 0.21605448424816132 0.23322245478630066 0.9724112749099731 -0.0 0.5675007104873657 0.6269457340240479 0 1.0 0 0.0 0 0.0 0 0.0 1.3611209392547607 0.11482855677604675 -0.2839455306529999 0.5498825311660767 -0.8352305889129639 -0.0 0.02917507290840149 0.7101532816886902 0 1.0 0 0.0 0 0.0 0 0.0 1.3640763759613037 0.1165628731250763 -0.2839455306529999 0.47178563475608826 -0.8816797137260437 -0.0 0.02717110514640808 0.7124300003051758 0 1.0 0 0.0 0 0.0 0 0.0 1.3640763759613037 0.1165628731250763 0.21605446934700012 0.47178563475608826 -0.8816797137260437 -0.0 0.4537268579006195 0.5526838302612305 0 1.0 0 0.0 0 0.0 0 0.0 -0.10157608985900879 -0.1758894920349121 -0.2839455306529999 -0.4847559928894043 -0.8746299743652344 -0.0 0.03632086515426636 0.49466484785079956 0 1.0 0 0.0 0 0.0 0 0.0 -0.09656071662902832 -0.1785188913345337 -0.2839455306529999 -0.4444410502910614 -0.8957793116569519 -0.0 0.033449530601501465 0.49154067039489746 0 1.0 0 0.0 0 0.0 0 0.0 -0.09656071662902832 -0.1785188913345337 0.21605445444583893 -0.4444410502910614 -0.8957793116569519 -0.0 0.42967790365219116 0.3402499556541443 0 1.0 0 0.0 0 0.0 0 0.0 1.079746961593628 -0.18745668232440948 -0.2839455306529999 0.21759697794914246 -0.9760124683380127 -0.0 0.9582534432411194 0.3779926896095276 0 1.0 0 0.0 0 0.0 0 0.0 1.088397741317749 -0.18530280888080597 -0.2839455306529999 0.26642659306526184 -0.9638355374336243 -0.0 0.9535930156707764 0.3801887631416321 0 1.0 0 0.0 0 0.0 0 0.0 1.088397741317749 -0.18530280888080597 0.21605445444583893 0.26642659306526184 -0.9638355374336243 -0.0 0.5339774489402771 0.22114479541778564 0 1.0 0 0.0 0 0.0 0 0.0 -1.4526948928833008 -0.17055772244930267 -0.2839455306529999 0.5101473927497864 -0.8600726127624512 -0.0 1.0128761529922485 0.42947977781295776 0 1.0 0 0.0 0 0.0 0 0.0 -1.4481269121170044 -0.1677483171224594 -0.2839455306529999 0.5372173190116882 -0.843409538269043 -0.0 1.0103981494903564 0.43259626626968384 0 1.0 0 0.0 0 0.0 0 0.0 -1.4481269121170044 -0.1677483171224594 0.21605446934700012 0.5372173190116882 -0.843409538269043 -0.0 0.5757732391357422 0.2414644956588745 0 1.0 0 0.0 0 0.0 0 0.0 1.4614017009735107 0.11597418785095215 -0.2839455306529999 -0.5114291906356812 -0.8593096733093262 -0.0 0.9558334350585938 0.7118881940841675 0 1.0 0 0.0 0 0.0 0 0.0 1.46427321434021 0.11412802338600159 -0.2839455306529999 -0.5681325793266296 -0.8229010701179504 -0.0 0.9538769721984863 0.7094813585281372 0 1.0 0 0.0 0 0.0 0 0.0 1.46427321434021 0.11412802338600159 0.21605446934700012 -0.5681325793266296 -0.8229010701179504 -0.0 0.5120236873626709 0.54820716381073 0 1.0 0 0.0 0 0.0 0 0.0 -1.398715615272522 0.1856156587600708 -0.2839455306529999 0.3254493772983551 0.9455549716949463 -0.0 0.9749752879142761 0.8102735877037048 0 1.0 0 0.0 0 0.0 0 0.0 -1.4052537679672241 0.1876722276210785 -0.2839455306529999 0.2771080732345581 0.9608142375946045 -0.0 0.9801024794578552 0.8133453130722046 0 1.0 0 0.0 0 0.0 0 0.0 -1.4052537679672241 0.1876722276210785 0.21605448424816132 0.2771080732345581 0.9608142375946045 -0.0 0.5711308121681213 0.6254566311836243 0 1.0 0 0.0 0 0.0 0 0.0 0.9731466770172119 -0.18530766665935516 -0.2839455306529999 -0.2553483545780182 -0.9668263792991638 -0.0 0.016234666109085083 0.3818973898887634 0 1.0 0 0.0 0 0.0 0 0.0 0.9868652820587158 -0.18838949501514435 -0.2839455306529999 -0.18515579402446747 -0.982695996761322 -0.0 0.008848100900650024 0.3783048391342163 0 1.0 0 0.0 0 0.0 0 0.0 0.9868652820587158 -0.18838949501514435 0.21605445444583893 -0.18515579402446747 -0.982695996761322 -0.0 0.45271965861320496 0.21679538488388062 0 1.0 0 0.0 0 0.0 0 0.0 -1.409644365310669 -0.1692855805158615 -0.2839455306529999 -0.9529099464416504 -0.3032013773918152 -0.0 0.9897835850715637 0.4357222318649292 0 1.0 0 0.0 0 0.0 0 0.0 -1.4088441133499146 -0.17177391052246094 -0.2839455306529999 -0.9508957266807556 -0.3094271719455719 -0.0 0.9893962144851685 0.4335421919822693 0 1.0 0 0.0 0 0.0 0 0.0 -1.4088441133499146 -0.17177391052246094 0.21605445444583893 -0.9508957266807556 -0.3094271719455719 -0.0 0.6045523881912231 0.2502666711807251 0 1.0 0 0.0 0 0.0 0 0.0 -1.5575450658798218 0.18761995434761047 -0.2839455306529999 -0.28141117095947266 0.9595629572868347 -0.0 0.10965383052825928 0.7987056970596313 0 1.0 0 0.0 0 0.0 0 0.0 -1.565907597541809 0.18492001295089722 -0.2839455306529999 -0.335001677274704 0.9421979188919067 -0.0 0.1150856614112854 0.793408215045929 0 1.0 0 0.0 0 0.0 0 0.0 -1.565907597541809 0.18492001295089722 0.21605448424816132 -0.335001677274704 0.9421979188919067 -0.0 0.48844146728515625 0.6122236251831055 0 1.0 0 0.0 0 0.0 0 0.0 0.024416208267211914 -0.18043318390846252 -0.2839455306529999 0.3904538154602051 -0.9205908179283142 -0.0 0.9612451195716858 0.48575735092163086 0 1.0 0 0.0 0 0.0 0 0.0 0.03000950813293457 -0.17793026566505432 -0.2839455306529999 0.42597734928131104 -0.904721200466156 -0.0 0.9578284025192261 0.48853766918182373 0 1.0 0 0.0 0 0.0 0 0.0 0.03000950813293457 -0.17793026566505432 0.21605445444583893 0.42597734928131104 -0.904721200466156 -0.0 0.5166881084442139 0.33180397748947144 0 1.0 0 0.0 0 0.0 0 0.0 1.359330415725708 0.11351263523101807 -0.2839455306529999 0.6188543438911438 -0.7854548692703247 -0.0 0.03036937117576599 0.7084847688674927 0 1.0 0 0.0 0 0.0 0 0.0 1.3611209392547607 0.11482855677604675 -0.2839455306529999 0.5498825311660767 -0.8352305889129639 -0.0 0.02917507290840149 0.7101532816886902 0 1.0 0 0.0 0 0.0 0 0.0 1.3611209392547607 0.11482855677604675 0.21605446934700012 0.5498825311660767 -0.8352305889129639 -0.0 0.45199093222618103 0.5508368015289307 0 1.0 0 0.0 0 0.0 0 0.0 -0.09656071662902832 -0.1785188913345337 -0.2839455306529999 -0.4444410502910614 -0.8957793116569519 -0.0 0.033449530601501465 0.49154067039489746 0 1.0 0 0.0 0 0.0 0 0.0 -0.09143805503845215 -0.18091964721679688 -0.2839455306529999 -0.4040650725364685 -0.9147007465362549 -0.0 0.030506521463394165 0.48865455389022827 0 1.0 0 0.0 0 0.0 0 0.0 -0.09143805503845215 -0.18091964721679688 0.21605445444583893 -0.4040650725364685 -0.9147007465362549 -0.0 0.43273794651031494 0.3364626169204712 0 1.0 0 0.0 0 0.0 0 0.0 1.0708115100860596 -0.1892189383506775 -0.2839455306529999 0.17029328644275665 -0.9853816032409668 -0.0 0.963086724281311 0.376192569732666 0 1.0 0 0.0 0 0.0 0 0.0 1.079746961593628 -0.18745668232440948 -0.2839455306529999 0.21759697794914246 -0.9760124683380127 -0.0 0.9582534432411194 0.3779926896095276 0 1.0 0 0.0 0 0.0 0 0.0 1.079746961593628 -0.18745668232440948 0.21605445444583893 0.21759697794914246 -0.9760124683380127 -0.0 0.5274980664253235 0.2177051305770874 0 1.0 0 0.0 0 0.0 0 0.0 -1.4573115110397339 -0.17319685220718384 -0.2839455306529999 0.4820703864097595 -0.8761253952980042 -0.0 1.0153790712356567 0.426551878452301 0 1.0 0 0.0 0 0.0 0 0.0 -1.4526948928833008 -0.17055772244930267 -0.2839455306529999 0.5101473927497864 -0.8600726127624512 -0.0 1.0128761529922485 0.42947977781295776 0 1.0 0 0.0 0 0.0 0 0.0 -1.4526948928833008 -0.17055772244930267 0.21605445444583893 0.5101168751716614 -0.8600726127624512 -0.0 0.5725734233856201 0.23772281408309937 0 1.0 0 0.0 0 0.0 0 0.0 1.46427321434021 0.11412802338600159 -0.2839455306529999 -0.5681325793266296 -0.8229010701179504 -0.0 0.9538769721984863 0.7094813585281372 0 1.0 0 0.0 0 0.0 0 0.0 1.4669716358184814 0.1121310293674469 -0.2839455306529999 -0.6189153790473938 -0.7854243516921997 -0.0 0.9520698189735413 0.7069165110588074 0 1.0 0 0.0 0 0.0 0 0.0 1.4669716358184814 0.1121310293674469 0.21605446934700012 -0.6189153790473938 -0.7854243516921997 -0.0 0.5135997533798218 0.5459520816802979 0 1.0 0 0.0 0 0.0 0 0.0 -1.3926442861557007 0.1833426058292389 -0.2839455306529999 0.3784600496292114 0.9255958795547485 -0.0 0.9703744649887085 0.8070228099822998 0 1.0 0 0.0 0 0.0 0 0.0 -1.398715615272522 0.1856156587600708 -0.2839455306529999 0.3254493772983551 0.9455549716949463 -0.0 0.9749752879142761 0.8102735877037048 0 1.0 0 0.0 0 0.0 0 0.0 -1.398715615272522 0.1856156587600708 0.21605448424816132 0.3254493772983551 0.9455549716949463 -0.0 0.5745198130607605 0.6237694025039673 0 1.0 0 0.0 0 0.0 0 0.0 0.9868652820587158 -0.18838949501514435 -0.2839455306529999 -0.18515579402446747 -0.982695996761322 -0.0 0.008848100900650024 0.3783048391342163 0 1.0 0 0.0 0 0.0 0 0.0 1.0012843608856201 -0.19059079885482788 -0.2839455306529999 -0.1190221905708313 -0.9928891658782959 -0.0 0.001026839017868042 0.3756256103515625 0 1.0 0 0.0 0 0.0 0 0.0 1.0012843608856201 -0.19059079885482788 0.21605445444583893 -0.1190221905708313 -0.9928891658782959 -0.0 0.464069128036499 0.212787926197052 0 1.0 0 0.0 0 0.0 0 0.0 -1.61158287525177 -0.17070366442203522 -0.2839455306529999 -0.5730155110359192 -0.8195135593414307 -0.0 0.09803354740142822 0.4236064553260803 0 1.0 0 0.0 0 0.0 0 0.0 -1.605220913887024 -0.1748168170452118 -0.2839455306529999 -0.5124973058700562 -0.8586688041687012 -0.0 0.09462365508079529 0.419883131980896 0 1.0 0 0.0 0 0.0 0 0.0 -1.605220913887024 -0.1748168170452118 0.21605445444583893 -0.5124973058700562 -0.8586688041687012 -0.0 0.45487111806869507 0.24198591709136963 0 1.0 0 0.0 0 0.0 0 0.0 -1.565907597541809 0.18492001295089722 -0.2839455306529999 -0.335001677274704 0.9421979188919067 -0.0 0.1150856614112854 0.793408215045929 0 1.0 0 0.0 0 0.0 0 0.0 -1.573773980140686 0.181860089302063 -0.2839455306529999 -0.39191868901252747 0.9199804663658142 -0.0 0.11988469958305359 0.7878999710083008 0 1.0 0 0.0 0 0.0 0 0.0 -1.573773980140686 0.181860089302063 0.21605448424816132 -0.39191868901252747 0.9199804663658142 -0.0 0.4845971167087555 0.6086910367012024 0 1.0 0 0.0 0 0.0 0 0.0 0.018771886825561523 -0.18269772827625275 -0.2839455306529999 0.35383158922195435 -0.9353007674217224 -0.0 0.9646912813186646 0.48325538635253906 0 1.0 0 0.0 0 0.0 0 0.0 0.024416208267211914 -0.18043318390846252 -0.2839455306529999 0.3904538154602051 -0.9205908179283142 -0.0 0.9612451195716858 0.48575735092163086 0 1.0 0 0.0 0 0.0 0 0.0 0.024416208267211914 -0.18043318390846252 0.21605445444583893 0.3904538154602051 -0.9205908179283142 -0.0 0.5128822922706604 0.3284263610839844 0 1.0 0 0.0 0 0.0 0 0.0 1.5771892070770264 0.1059650182723999 -0.2839455306529999 0.9462873935699463 0.3232520520687103 -0.0 0.8865392804145813 0.6703754663467407 0 1.0 0 0.0 0 0.0 0 0.0 1.5743725299835205 0.11358323693275452 -0.2839455306529999 0.9285256266593933 0.3712271451950073 -0.0 0.8871409893035889 0.6785174608230591 0 1.0 0 0.0 0 0.0 0 0.0 1.5743725299835205 0.11358323693275452 0.21605446934700012 0.9285256266593933 0.3712271451950073 -0.0 0.5691015720367432 0.5396533012390137 0 1.0 0 0.0 0 0.0 0 0.0 -0.09143805503845215 -0.18091964721679688 -0.2839455306529999 -0.4040650725364685 -0.9147007465362549 -0.0 0.030506521463394165 0.48865455389022827 0 1.0 0 0.0 0 0.0 0 0.0 -0.08620834350585938 -0.18309177458286285 -0.2839455306529999 -0.3629566431045532 -0.9317911267280579 -0.0 0.027490437030792236 0.48600929975509644 0 1.0 0 0.0 0 0.0 0 0.0 -0.08620834350585938 -0.18309177458286285 0.21605445444583893 -0.3629566431045532 -0.9317911267280579 -0.0 0.43594032526016235 0.3329399824142456 0 1.0 0 0.0 0 0.0 0 0.0 1.061591625213623 -0.19058957695960999 -0.2839455306529999 0.12475966662168503 -0.9921567440032959 -0.0 0.968092679977417 0.37479931116104126 0 1.0 0 0.0 0 0.0 0 0.0 1.0708115100860596 -0.1892189383506775 -0.2839455306529999 0.17029328644275665 -0.9853816032409668 -0.0 0.963086724281311 0.376192569732666 0 1.0 0 0.0 0 0.0 0 0.0 1.0708115100860596 -0.1892189383506775 0.21605445444583893 0.17029328644275665 -0.9853816032409668 -0.0 0.5206069350242615 0.21479815244674683 0 1.0 0 0.0 0 0.0 0 0.0 -1.3112715482711792 -0.17516463994979858 -0.2839455306529999 0.9137852191925049 0.4061403274536133 -0.0 0.9445689916610718 0.44464319944381714 0 1.0 0 0.0 0 0.0 0 0.0 -1.3131457567214966 -0.17084351181983948 -0.2839455306529999 0.921079158782959 0.3892941176891327 -0.0 0.945106029510498 0.4479633569717407 0 1.0 0 0.0 0 0.0 0 0.0 -1.3131457567214966 -0.17084351181983948 0.21605445444583893 0.921079158782959 0.3892941176891327 -0.0 0.656374454498291 0.2921108603477478 0 1.0 0 0.0 0 0.0 0 0.0 -1.387040138244629 0.18085306882858276 -0.2839455306529999 0.4292428493499756 0.9031647443771362 -0.0 0.9662760496139526 0.8036254048347473 0 1.0 0 0.0 0 0.0 0 0.0 -1.3926442861557007 0.1833426058292389 -0.2839455306529999 0.3784600496292114 0.9255958795547485 -0.0 0.9703744649887085 0.8070228099822998 0 1.0 0 0.0 0 0.0 0 0.0 -1.3926442861557007 0.1833426058292389 0.21605448424816132 0.3784600496292114 0.9255958795547485 -0.0 0.5776726603507996 0.6218934059143066 0 1.0 0 0.0 0 0.0 0 0.0 -1.4088441133499146 -0.17177391052246094 -0.2839455306529999 -0.9508957266807556 -0.3094271719455719 -0.0 0.9893962144851685 0.4335421919822693 0 1.0 0 0.0 0 0.0 0 0.0 -1.4080681800842285 -0.1741308867931366 -0.2839455306529999 -0.9486373662948608 -0.3163243532180786 -0.0 0.989022433757782 0.43149906396865845 0 1.0 0 0.0 0 0.0 0 0.0 -1.4080681800842285 -0.1741308867931366 0.21605445444583893 -0.9486373662948608 -0.3163243532180786 -0.0 0.6054056882858276 0.2484617829322815 0 1.0 0 0.0 0 0.0 0 0.0 1.3576958179473877 0.11213347315788269 -0.2839455306529999 0.6719870567321777 -0.7405316233634949 -0.0 0.03144568204879761 0.7067665457725525 0 1.0 0 0.0 0 0.0 0 0.0 1.359330415725708 0.11351263523101807 -0.2839455306529999 0.6188543438911438 -0.7854548692703247 -0.0 0.03036937117576599 0.7084847688674927 0 1.0 0 0.0 0 0.0 0 0.0 1.359330415725708 0.11351263523101807 0.21605446934700012 0.6188543438911438 -0.7854548692703247 -0.0 0.4509287476539612 0.5494382381439209 0 1.0 0 0.0 0 0.0 0 0.0 -1.573773980140686 0.181860089302063 -0.2839455306529999 -0.39191868901252747 0.9199804663658142 -0.0 0.11988469958305359 0.7878999710083008 0 1.0 0 0.0 0 0.0 0 0.0 -1.581144094467163 0.1784401535987854 -0.2839455306529999 -0.4516434073448181 0.8921781182289124 -0.0 0.12409523129463196 0.7822171449661255 0 1.0 0 0.0 0 0.0 0 0.0 -1.581144094467163 0.1784401535987854 0.21605448424816132 -0.4516434073448181 0.8921781182289124 -0.0 0.48101699352264404 0.6049108505249023 0 1.0 0 0.0 0 0.0 0 0.0 1.0520870685577393 -0.19156861305236816 -0.2839455306529999 0.08117923140525818 -0.9966734647750854 -0.0 0.973270058631897 0.3738250136375427 0 1.0 0 0.0 0 0.0 0 0.0 1.061591625213623 -0.19058957695960999 -0.2839455306529999 0.12475966662168503 -0.9921567440032959 -0.0 0.968092679977417 0.37479931116104126 0 1.0 0 0.0 0 0.0 0 0.0 1.061591625213623 -0.19058957695960999 0.21605445444583893 0.12475966662168503 -0.9921567440032959 -0.0 0.5133183598518372 0.21246552467346191 0 1.0 0 0.0 0 0.0 0 0.0 1.2627358436584473 0.11276590824127197 -0.2839455306529999 -0.9591967463493347 0.28269293904304504 -0.0 0.08741724491119385 0.6831651926040649 0 1.0 0 0.0 0 0.0 0 0.0 1.2608799934387207 0.10545903444290161 -0.2839455306529999 -0.9776909947395325 0.20999786257743835 -0.0 0.08772903680801392 0.6757194399833679 0 1.0 0 0.0 0 0.0 0 0.0 1.2608799934387207 0.10545903444290161 0.21605446934700012 -0.9776909947395325 0.20999786257743835 -0.0 0.4009055495262146 0.538192629814148 0 1.0 0 0.0 0 0.0 0 0.0 0.013076543807983398 -0.184723898768425 -0.2839455306529999 0.3161717653274536 -0.9486678838729858 -0.0 0.9681662321090698 0.4810340404510498 0 1.0 0 0.0 0 0.0 0 0.0 0.018771886825561523 -0.18269772827625275 -0.2839455306529999 0.35383158922195435 -0.9353007674217224 -0.0 0.9646912813186646 0.48325538635253906 0 1.0 0 0.0 0 0.0 0 0.0 0.018771886825561523 -0.18269772827625275 0.21605445444583893 0.35383158922195435 -0.9353007674217224 -0.0 0.508985698223114 0.32539719343185425 0 1.0 0 0.0 0 0.0 0 0.0 1.0012843608856201 -0.19059079885482788 -0.2839455306529999 -0.1190221905708313 -0.9928891658782959 -0.0 1.0010268688201904 0.3756256103515625 0 1.0 0 0.0 0 0.0 0 0.0 1.016404151916504 -0.19191157817840576 -0.2839455306529999 -0.05743583291769028 -0.9983214735984802 -0.0 0.9927797317504883 0.37390339374542236 0 1.0 0 0.0 0 0.0 0 0.0 1.016404151916504 -0.19191157817840576 0.21605445444583893 -0.05743583291769028 -0.9983214735984802 -0.0 1.476330280303955 0.21025210618972778 0 1.0 0 0.0 0 0.0 0 0.0 -0.08620834350585938 -0.18309177458286285 -0.2839455306529999 -0.3629566431045532 -0.9317911267280579 -0.0 0.027490437030792236 0.48600929975509644 0 1.0 0 0.0 0 0.0 0 0.0 -0.0808718204498291 -0.18503524363040924 -0.2839455306529999 -0.32139042019844055 -0.9469283223152161 -0.0 0.02440011501312256 0.48360782861709595 0 1.0 0 0.0 0 0.0 0 0.0 -0.0808718204498291 -0.18503524363040924 0.21605445444583893 -0.32139042019844055 -0.9469283223152161 -0.0 0.4392855167388916 0.3296908140182495 0 1.0 0 0.0 0 0.0 0 0.0 -1.4619768857955933 -0.1756657212972641 -0.2839455306529999 0.4530472755432129 -0.8914456367492676 -0.0 1.0179073810577393 0.42381131649017334 0 1.0 0 0.0 0 0.0 0 0.0 -1.4573115110397339 -0.17319685220718384 -0.2839455306529999 0.4820703864097595 -0.8761253952980042 -0.0 1.0153790712356567 0.426551878452301 0 1.0 0 0.0 0 0.0 0 0.0 -1.4573115110397339 -0.17319685220718384 0.21605445444583893 0.4820703864097595 -0.8761253952980042 -0.0 0.569256603717804 0.23421460390090942 0 1.0 0 0.0 0 0.0 0 0.0 -1.381801962852478 0.17819690704345703 -0.2839455306529999 0.4697103798389435 0.8828089237213135 -0.0 0.962579071521759 0.8001152873039246 0 1.0 0 0.0 0 0.0 0 0.0 -1.387040138244629 0.18085306882858276 -0.2839455306529999 0.4292428493499756 0.9031647443771362 -0.0 0.9662760496139526 0.8036254048347473 0 1.0 0 0.0 0 0.0 0 0.0 -1.387040138244629 0.18085306882858276 0.21605448424816132 0.4292428493499756 0.9031647443771362 -0.0 0.580594539642334 0.6198358535766602 0 1.0 0 0.0 0 0.0 0 0.0 -1.4080681800842285 -0.1741308867931366 -0.2839455306529999 -0.9486373662948608 -0.3163243532180786 -0.0 0.989022433757782 0.43149906396865845 0 1.0 0 0.0 0 0.0 0 0.0 -1.4073165655136108 -0.1763565093278885 -0.2839455306529999 -0.9460432529449463 -0.3239845037460327 -0.0 0.9886620044708252 0.42958980798721313 0 1.0 0 0.0 0 0.0 0 0.0 -1.4073165655136108 -0.1763565093278885 0.21605445444583893 -0.9460432529449463 -0.3239845037460327 -0.0 0.606225848197937 0.24678385257720947 0 1.0 0 0.0 0 0.0 0 0.0 1.3562171459197998 0.11069107055664062 -0.2839455306529999 0.7252418398857117 -0.6884670257568359 -0.0 0.03240564465522766 0.7049999833106995 0 1.0 0 0.0 0 0.0 0 0.0 1.3576958179473877 0.11213347315788269 -0.2839455306529999 0.6719870567321777 -0.7405316233634949 -0.0 0.03144568204879761 0.7067665457725525 0 1.0 0 0.0 0 0.0 0 0.0 1.3576958179473877 0.11213347315788269 0.21605446934700012 0.6719870567321777 -0.7405316233634949 -0.0 0.44995152950286865 0.5479726791381836 0 1.0 0 0.0 0 0.0 0 0.0 -1.581144094467163 0.1784401535987854 -0.2839455306529999 -0.4516434073448181 0.8921781182289124 -0.0 0.12409523129463196 0.7822171449661255 0 1.0 0 0.0 0 0.0 0 0.0 -1.5880180597305298 0.17466023564338684 -0.2839455306529999 -0.5134739279747009 0.8580889105796814 -0.0 0.12776002287864685 0.7763864398002625 0 1.0 0 0.0 0 0.0 0 0.0 -1.5880180597305298 0.17466023564338684 0.21605448424816132 -0.5134739279747009 0.8580889105796814 -0.0 0.4776924252510071 0.6008874773979187 0 1.0 0 0.0 0 0.0 0 0.0 1.0422980785369873 -0.19215603172779083 -0.2839455306529999 0.039674062281847 -0.99920654296875 -0.0 0.9786159992218018 0.373282253742218 0 1.0 0 0.0 0 0.0 0 0.0 1.0520870685577393 -0.19156861305236816 -0.2839455306529999 0.08117923140525818 -0.9966734647750854 -0.0 0.973270058631897 0.3738250136375427 0 1.0 0 0.0 0 0.0 0 0.0 1.0520870685577393 -0.19156861305236816 0.21605445444583893 0.08117923140525818 -0.9966734647750854 -0.0 0.5056557655334473 0.21075117588043213 0 1.0 0 0.0 0 0.0 0 0.0 1.4669716358184814 0.1121310293674469 -0.2839455306529999 -0.6189153790473938 -0.7854243516921997 -0.0 0.9520698189735413 0.7069165110588074 0 1.0 0 0.0 0 0.0 0 0.0 1.46952223777771 0.10999298095703125 -0.2839455306529999 -0.6656697392463684 -0.7462080717086792 -0.0 0.9503920078277588 0.7042019963264465 0 1.0 0 0.0 0 0.0 0 0.0 1.46952223777771 0.10999298095703125 0.21605446934700012 -0.6656697392463684 -0.7462080717086792 -0.0 0.5150936245918274 0.5435440540313721 0 1.0 0 0.0 0 0.0 0 0.0 0.0073299407958984375 -0.18651169538497925 -0.2839455306529999 0.2776573896408081 -0.9606616497039795 -0.0 0.9716694355010986 0.4790952801704407 0 1.0 0 0.0 0 0.0 0 0.0 0.013076543807983398 -0.184723898768425 -0.2839455306529999 0.3161717653274536 -0.9486678838729858 -0.0 0.9681662321090698 0.4810340404510498 0 1.0 0 0.0 0 0.0 0 0.0 0.013076543807983398 -0.184723898768425 0.21605445444583893 0.3161717653274536 -0.9486678838729858 -0.0 0.5050041079521179 0.32272303104400635 0 1.0 0 0.0 0 0.0 0 0.0 1.016404151916504 -0.19191157817840576 -0.2839455306529999 -0.05743583291769028 -0.9983214735984802 -0.0 0.9927797317504883 0.37390339374542236 0 1.0 0 0.0 0 0.0 0 0.0 1.032224416732788 -0.19235184788703918 -0.2839455306529999 -0.004181035794317722 -0.999969482421875 -0.0 0.9841258525848389 0.3731839060783386 0 1.0 0 0.0 0 0.0 0 0.0 1.032224416732788 -0.19235184788703918 0.21605445444583893 -0.004181035794317722 -0.999969482421875 -0.0 1.4893549680709839 0.20935219526290894 0 1.0 0 0.0 0 0.0 0 0.0 -1.605220913887024 -0.1748168170452118 -0.2839455306529999 -0.5124973058700562 -0.8586688041687012 -0.0 0.09462365508079529 0.419883131980896 0 1.0 0 0.0 0 0.0 0 0.0 -1.5985209941864014 -0.17849700152873993 -0.2839455306529999 -0.4504531919956207 -0.8927884697914124 -0.0 0.09105780720710754 0.41654813289642334 0 1.0 0 0.0 0 0.0 0 0.0 -1.5985209941864014 -0.17849700152873993 0.21605445444583893 -0.4504531919956207 -0.8927884697914124 -0.0 0.459004670381546 0.2368086576461792 0 1.0 0 0.0 0 0.0 0 0.0 -0.0808718204498291 -0.18503524363040924 -0.2839455306529999 -0.32139042019844055 -0.9469283223152161 -0.0 0.02440011501312256 0.48360782861709595 0 1.0 0 0.0 0 0.0 0 0.0 -0.07542824745178223 -0.18675006926059723 -0.2839455306529999 -0.2796105742454529 -0.9600818157196045 -0.0 0.021234214305877686 0.481453001499176 0 1.0 0 0.0 0 0.0 0 0.0 -0.07542824745178223 -0.18675006926059723 0.21605445444583893 -0.2796105742454529 -0.9600818157196045 -0.0 0.4427735507488251 0.326724112033844 0 1.0 0 0.0 0 0.0 0 0.0 1.032224416732788 -0.19235184788703918 -0.2839455306529999 -0.004181035794317722 -0.999969482421875 -0.0 0.9841258525848389 0.3731839060783386 0 1.0 0 0.0 0 0.0 0 0.0 1.0422980785369873 -0.19215603172779083 -0.2839455306529999 0.039674062281847 -0.99920654296875 -0.0 0.9786159992218018 0.373282253742218 0 1.0 0 0.0 0 0.0 0 0.0 1.0422980785369873 -0.19215603172779083 0.21605445444583893 0.039674062281847 -0.99920654296875 -0.0 0.49765321612358093 0.20969903469085693 0 1.0 0 0.0 0 0.0 0 0.0 -1.3768290281295776 0.1754239797592163 -0.2839455306529999 0.5051729083061218 0.8630024194717407 -0.0 0.959189236164093 0.7965185046195984 0 1.0 0 0.0 0 0.0 0 0.0 -1.381801962852478 0.17819690704345703 -0.2839455306529999 0.4697103798389435 0.8828089237213135 -0.0 0.962579071521759 0.8001152873039246 0 1.0 0 0.0 0 0.0 0 0.0 -1.381801962852478 0.17819690704345703 0.21605448424816132 0.4697103798389435 0.8828089237213135 -0.0 0.5833354592323303 0.6176351308822632 0 1.0 0 0.0 0 0.0 0 0.0 0.914886474609375 0.314128041267395 -0.2839455306529999 -1.0 0.0 -0.0 0.07622396945953369 0.8483100533485413 0 1.0 0 0.0 0 0.0 0 0.0 0.914886474609375 0.24932944774627686 -0.2839455306529999 -1.0 0.0 -0.0 0.07032191753387451 0.8121410012245178 0 1.0 0 0.0 0 0.0 0 0.0 0.914886474609375 0.24932944774627686 0.21605448424816132 -1.0 0.0 -0.0 0.4341694116592407 0.6617535948753357 0 1.0 0 0.0 0 0.0 0 0.0 1.3548939228057861 0.10918542742729187 -0.2839455306529999 0.7772759199142456 -0.6291085481643677 -0.0 0.03325092792510986 0.7031859159469604 0 1.0 0 0.0 0 0.0 0 0.0 1.3562171459197998 0.11069107055664062 -0.2839455306529999 0.7252418398857117 -0.6884670257568359 -0.0 0.03240564465522766 0.7049999833106995 0 1.0 0 0.0 0 0.0 0 0.0 1.3562171459197998 0.11069107055664062 0.21605446934700012 0.7252418398857117 -0.6884670257568359 -0.0 0.44905880093574524 0.5464398860931396 0 1.0 0 0.0 0 0.0 0 0.0 -1.3092831373214722 -0.1795319765806198 -0.2839455306529999 0.9064607620239258 0.4222540855407715 -0.0 0.943996250629425 0.4413594603538513 0 1.0 0 0.0 0 0.0 0 0.0 -1.3112715482711792 -0.17516463994979858 -0.2839455306529999 0.9137852191925049 0.4061403274536133 -0.0 0.9445689916610718 0.44464319944381714 0 1.0 0 0.0 0 0.0 0 0.0 -1.3112715482711792 -0.17516463994979858 0.21605445444583893 0.9137852191925049 0.4061403274536133 -0.0 0.6578232645988464 0.2894875407218933 0 1.0 0 0.0 0 0.0 0 0.0 1.46952223777771 0.10999298095703125 -0.2839455306529999 -0.6656697392463684 -0.7462080717086792 -0.0 0.9503920078277588 0.7042019963264465 0 1.0 0 0.0 0 0.0 0 0.0 1.471924066543579 0.10771384835243225 -0.2839455306529999 -0.7104098796844482 -0.7037568092346191 -0.0 0.9488427639007568 0.701339602470398 0 1.0 0 0.0 0 0.0 0 0.0 1.471924066543579 0.10771384835243225 0.21605446934700012 -0.7104098796844482 -0.7037568092346191 -0.0 0.5165054798126221 0.5409820079803467 0 1.0 0 0.0 0 0.0 0 0.0 0.0015323162078857422 -0.18806111812591553 -0.2839455306529999 0.2385021448135376 -0.9711294770240784 -0.0 0.9751999378204346 0.4774407744407654 0 1.0 0 0.0 0 0.0 0 0.0 0.0073299407958984375 -0.18651169538497925 -0.2839455306529999 0.2776573896408081 -0.9606616497039795 -0.0 0.9716694355010986 0.4790952801704407 0 1.0 0 0.0 0 0.0 0 0.0 0.0073299407958984375 -0.18651169538497925 0.21605445444583893 0.2776573896408081 -0.9606616497039795 -0.0 0.5009436011314392 0.32041001319885254 0 1.0 0 0.0 0 0.0 0 0.0 -1.3721212148666382 0.17253431677818298 -0.2839455306529999 0.5418866276741028 0.8404186964035034 -0.0 0.9560917615890503 0.7928478717803955 0 1.0 0 0.0 0 0.0 0 0.0 -1.3768290281295776 0.1754239797592163 -0.2839455306529999 0.5051729083061218 0.8630024194717407 -0.0 0.959189236164093 0.7965185046195984 0 1.0 0 0.0 0 0.0 0 0.0 -1.3768290281295776 0.1754239797592163 0.21605448424816132 0.5051729083061218 0.8630024194717407 -0.0 0.5859435200691223 0.6153281331062317 0 1.0 0 0.0 0 0.0 0 0.0 1.1404554843902588 0.314128041267395 -0.2839455306529999 0.0 1.0 -0.0 0.8829363584518433 0.837841272354126 0 1.0 0 0.0 0 0.0 0 0.0 0.914886474609375 0.314128041267395 -0.2839455306529999 0.0 1.0 -0.0 1.0762239694595337 0.8483100533485413 0 1.0 0 0.0 0 0.0 0 0.0 0.914886474609375 0.314128041267395 0.21605446934700012 0.0 1.0 -0.0 0.4373004734516144 0.6980294585227966 0 1.0 0 0.0 0 0.0 0 0.0 -0.07542824745178223 -0.18675006926059723 -0.2839455306529999 -0.2796105742454529 -0.9600818157196045 -0.0 0.021234214305877686 0.481453001499176 0 1.0 0 0.0 0 0.0 0 0.0 -0.06987762451171875 -0.18823625147342682 -0.2839455306529999 -0.2378612607717514 -0.9712820649147034 -0.0 0.01799166202545166 0.4795478582382202 0 1.0 0 0.0 0 0.0 0 0.0 -0.06987762451171875 -0.18823625147342682 0.21605445444583893 -0.2378612607717514 -0.9712820649147034 -0.0 0.4464035928249359 0.32404953241348267 0 1.0 0 0.0 0 0.0 0 0.0 -1.5880180597305298 0.17466023564338684 -0.2839455306529999 -0.5134739279747009 0.8580889105796814 -0.0 0.12776002287864685 0.7763864398002625 0 1.0 0 0.0 0 0.0 0 0.0 -1.5943957567214966 0.1705203354358673 -0.2839455306529999 -0.573870062828064 0.8189031481742859 -0.0 0.1309186816215515 0.7704271078109741 0 1.0 0 0.0 0 0.0 0 0.0 -1.5943957567214966 0.1705203354358673 0.21605448424816132 -0.573870062828064 0.8189031481742859 -0.0 0.4746149778366089 0.5966225862503052 0 1.0 0 0.0 0 0.0 0 0.0 0.914886474609375 0.24932944774627686 -0.2839455306529999 0.0 -1.0 -0.0 1.0703219175338745 0.8121410012245178 0 1.0 0 0.0 0 0.0 0 0.0 1.1404554843902588 0.24932944774627686 -0.2839455306529999 0.0 -1.0 -0.0 0.8911066055297852 0.8022257685661316 0 1.0 0 0.0 0 0.0 0 0.0 1.1404554843902588 0.24932944774627686 0.21605448424816132 0.0 -1.0 -0.0 0.5467431545257568 0.6560397148132324 0 1.0 0 0.0 0 0.0 0 0.0 -1.4666908979415894 -0.17796431481838226 -0.2839455306529999 0.42316964268684387 -0.9060335159301758 -0.0 1.0204609632492065 0.42125678062438965 0 1.0 0 0.0 0 0.0 0 0.0 -1.4619768857955933 -0.1756657212972641 -0.2839455306529999 0.4530472755432129 -0.8914456367492676 -0.0 1.0179073810577393 0.42381131649017334 0 1.0 0 0.0 0 0.0 0 0.0 -1.4619768857955933 -0.1756657212972641 0.21605445444583893 0.4530472755432129 -0.8914456367492676 -0.0 0.5658243298530579 0.23094266653060913 0 1.0 0 0.0 0 0.0 0 0.0 1.1404554843902588 0.24932944774627686 -0.2839455306529999 1.0 0.0 -0.0 0.8911066055297852 0.8022257685661316 0 1.0 0 0.0 0 0.0 0 0.0 1.1404554843902588 0.314128041267395 -0.2839455306529999 1.0 0.0 -0.0 0.8829363584518433 0.837841272354126 0 1.0 0 0.0 0 0.0 0 0.0 1.1404554843902588 0.314128041267395 0.21605446934700012 0.999969482421875 0.0 -0.0 0.5445256233215332 0.6925103664398193 0 1.0 0 0.0 0 0.0 0 0.0 -1.4073165655136108 -0.1763565093278885 -0.2839455306529999 -0.9460432529449463 -0.3239845037460327 -0.0 0.9886620044708252 0.42958980798721313 0 1.0 0 0.0 0 0.0 0 0.0 -1.4065892696380615 -0.1784507930278778 -0.2839455306529999 -0.9430524706840515 -0.3325907289981842 -0.0 0.9883145093917847 0.4278113842010498 0 1.0 0 0.0 0 0.0 0 0.0 -1.4065892696380615 -0.1784507930278778 0.21605445444583893 -0.9430524706840515 -0.3325907289981842 -0.0 0.6070125102996826 0.24522966146469116 0 1.0 0 0.0 0 0.0 0 0.0 1.3537261486053467 0.10761654376983643 -0.2839455306529999 0.826776921749115 -0.5624866485595703 -0.0 0.0339830219745636 0.7013248801231384 0 1.0 0 0.0 0 0.0 0 0.0 1.3548939228057861 0.10918542742729187 -0.2839455306529999 0.7772759199142456 -0.6291085481643677 -0.0 0.03325092792510986 0.7031859159469604 0 1.0 0 0.0 0 0.0 0 0.0 1.3548939228057861 0.10918542742729187 0.21605446934700012 0.7772759199142456 -0.6291085481643677 -0.0 0.44824984669685364 0.5448392033576965 0 1.0 0 0.0 0 0.0 0 0.0 0.4178636074066162 0.19643977284431458 -0.2839455306529999 -0.0018005920574069023 0.999969482421875 -0.0 0.9889223575592041 0.7905939221382141 0 1.0 0 0.0 0 0.0 0 0.0 0.4047873020172119 0.1962110698223114 -0.2839455306529999 -0.036133915185928345 0.99932861328125 -0.0 0.9996861219406128 0.790111780166626 0 1.0 0 0.0 0 0.0 0 0.0 0.4047873020172119 0.1962110698223114 0.21605448424816132 -0.036133915185928345 0.99932861328125 -0.0 1.4772623777389526 0.6266326904296875 0 1.0 0 0.0 0 0.0 0 0.0 1.471924066543579 0.10771384835243225 -0.2839455306529999 -0.7104098796844482 -0.7037568092346191 -0.0 0.9488427639007568 0.701339602470398 0 1.0 0 0.0 0 0.0 0 0.0 1.474177598953247 0.1052936315536499 -0.2839455306529999 -0.7525253891944885 -0.6585283875465393 -0.0 0.9474200010299683 0.6983304023742676 0 1.0 0 0.0 0 0.0 0 0.0 1.474177598953247 0.1052936315536499 0.21605446934700012 -0.7525253891944885 -0.6585283875465393 -0.0 0.5178361535072327 0.5382644534111023 0 1.0 0 0.0 0 0.0 0 0.0 -0.0043163299560546875 -0.18937218189239502 -0.2839455306529999 0.1988280862569809 -0.9800103902816772 -0.0 0.9787569046020508 0.4760715961456299 0 1.0 0 0.0 0 0.0 0 0.0 0.0015323162078857422 -0.18806111812591553 -0.2839455306529999 0.2385021448135376 -0.9711294770240784 -0.0 0.9751999378204346 0.4774407744407654 0 1.0 0 0.0 0 0.0 0 0.0 0.0015323162078857422 -0.18806111812591553 0.21605445444583893 0.2385021448135376 -0.9711294770240784 -0.0 0.49681156873703003 0.31846362352371216 0 1.0 0 0.0 0 0.0 0 0.0 -0.06987762451171875 -0.18823625147342682 -0.2839455306529999 -0.2378612607717514 -0.9712820649147034 -0.0 0.01799166202545166 0.4795478582382202 0 1.0 0 0.0 0 0.0 0 0.0 -0.06421995162963867 -0.189493790268898 -0.2839455306529999 -0.19635608792304993 -0.9804986715316772 -0.0 0.014671623706817627 0.47789525985717773 0 1.0 0 0.0 0 0.0 0 0.0 -0.06421995162963867 -0.189493790268898 0.21605445444583893 -0.19635608792304993 -0.9804986715316772 -0.0 0.45017388463020325 0.32167673110961914 0 1.0 0 0.0 0 0.0 0 0.0 0.43031740188598633 0.19626706838607788 -0.2839455306529999 0.02865688130259514 0.99957275390625 -0.0 0.9786590337753296 0.7900840640068054 0 1.0 0 0.0 0 0.0 0 0.0 0.4178636074066162 0.19643977284431458 -0.2839455306529999 -0.0018005920574069023 0.999969482421875 -0.0 0.9889223575592041 0.7905939221382141 0 1.0 0 0.0 0 0.0 0 0.0 0.4178636074066162 0.19643977284431458 0.21605448424816132 -0.0018005920574069023 0.999969482421875 -0.0 1.484412431716919 0.626757025718689 0 1.0 0 0.0 0 0.0 0 0.0 -1.4714535474777222 -0.18009264767169952 -0.2839455306529999 0.39243751764297485 -0.9197668433189392 -0.0 1.0230402946472168 0.41888707876205444 0 1.0 0 0.0 0 0.0 0 0.0 -1.4666908979415894 -0.17796431481838226 -0.2839455306529999 0.42316964268684387 -0.9060335159301758 -0.0 1.0204609632492065 0.42125678062438965 0 1.0 0 0.0 0 0.0 0 0.0 -1.4666908979415894 -0.17796431481838226 0.21605445444583893 0.42316964268684387 -0.9060335159301758 -0.0 0.5622788071632385 0.22790998220443726 0 1.0 0 0.0 0 0.0 0 0.0 -1.4065892696380615 -0.1784507930278778 -0.2839455306529999 -0.9430524706840515 -0.3325907289981842 -0.0 0.9883145093917847 0.4278113842010498 0 1.0 0 0.0 0 0.0 0 0.0 -1.4058862924575806 -0.18041372299194336 -0.2839455306529999 -0.939573347568512 -0.3422955870628357 -0.0 0.9879797697067261 0.4261610507965088 0 1.0 0 0.0 0 0.0 0 0.0 -1.4058862924575806 -0.18041372299194336 0.21605445444583893 -0.939573347568512 -0.3422955870628357 -0.0 0.607765257358551 0.24379628896713257 0 1.0 0 0.0 0 0.0 0 0.0 0.4746840000152588 0.19212231040000916 -0.2839455306529999 0.17062897980213165 0.9853205680847168 -0.0 0.9434916973114014 0.7804332971572876 0 1.0 0 0.0 0 0.0 0 0.0 0.46440958976745605 0.19367659091949463 -0.2839455306529999 0.13031403720378876 0.9914548397064209 -0.0 0.9513112306594849 0.7838000059127808 0 1.0 0 0.0 0 0.0 0 0.0 0.46440958976745605 0.19367659091949463 0.21605448424816132 0.13031403720378876 0.9914548397064209 -0.0 0.5097607374191284 0.6224871873855591 0 1.0 0 0.0 0 0.0 0 0.0 1.3527143001556396 0.10598441958427429 -0.2839455306529999 0.8721274733543396 -0.48924222588539124 -0.0 0.03460294008255005 0.6994173526763916 0 1.0 0 0.0 0 0.0 0 0.0 1.3537261486053467 0.10761654376983643 -0.2839455306529999 0.826776921749115 -0.5624866485595703 -0.0 0.0339830219745636 0.7013248801231384 0 1.0 0 0.0 0 0.0 0 0.0 1.3537261486053467 0.10761654376983643 0.21605446934700012 0.826776921749115 -0.5624866485595703 -0.0 0.4475242495536804 0.5431699752807617 0 1.0 0 0.0 0 0.0 0 0.0 0.4422264099121094 0.19574898481369019 -0.2839455306529999 0.05960264801979065 0.9981994032859802 -0.0 0.9689275026321411 0.7887187004089355 0 1.0 0 0.0 0 0.0 0 0.0 0.43031740188598633 0.19626706838607788 -0.2839455306529999 0.02865688130259514 0.99957275390625 -0.0 0.9786590337753296 0.7900840640068054 0 1.0 0 0.0 0 0.0 0 0.0 0.43031740188598633 0.19626706838607788 0.21605448424816132 0.02865688130259514 0.99957275390625 -0.0 0.49122709035873413 0.6263492107391357 0 1.0 0 0.0 0 0.0 0 0.0 0.3690605163574219 0.19278141856193542 -0.2839455306529999 -0.16406750679016113 0.9864192605018616 -0.0 0.02811935544013977 0.783101499080658 0 1.0 0 0.0 0 0.0 0 0.0 0.3583190441131592 0.19072362780570984 -0.2839455306529999 -0.2143009752035141 0.9767448902130127 -0.0 0.036156296730041504 0.7792717218399048 0 1.0 0 0.0 0 0.0 0 0.0 0.3583190441131592 0.19072362780570984 0.21605448424816132 -0.2143009752035141 0.9767448902130127 -0.0 0.45214876532554626 0.6206685304641724 0 1.0 0 0.0 0 0.0 0 0.0 -0.010215997695922852 -0.19044485688209534 -0.2839455306529999 0.158879354596138 -0.9872737526893616 -0.0 0.9823390245437622 0.47498881816864014 0 1.0 0 0.0 0 0.0 0 0.0 -0.0043163299560546875 -0.18937218189239502 -0.2839455306529999 0.1988280862569809 -0.9800103902816772 -0.0 0.9787569046020508 0.4760715961456299 0 1.0 0 0.0 0 0.0 0 0.0 -0.0043163299560546875 -0.18937218189239502 0.21605445444583893 0.1988280862569809 -0.9800103902816772 -0.0 0.49261587858200073 0.3168887495994568 0 1.0 0 0.0 0 0.0 0 0.0 0.4047873020172119 0.1962110698223114 -0.2839455306529999 -0.036133915185928345 0.99932861328125 -0.0 0.9996861219406128 0.790111780166626 0 1.0 0 0.0 0 0.0 0 0.0 0.39229464530944824 0.1955251395702362 -0.2839455306529999 -0.07519760727882385 0.9971618056297302 -0.0 1.009852409362793 0.7886282801628113 0 1.0 0 0.0 0 0.0 0 0.0 0.39229464530944824 0.1955251395702362 0.21605448424816132 -0.07519760727882385 0.9971618056297302 -0.0 1.4704532623291016 0.6259280443191528 0 1.0 0 0.0 0 0.0 0 0.0 -1.5985209941864014 -0.17849700152873993 -0.2839455306529999 -0.4504531919956207 -0.8927884697914124 -0.0 0.09105780720710754 0.41654813289642334 0 1.0 0 0.0 0 0.0 0 0.0 -1.5914828777313232 -0.18174423277378082 -0.2839455306529999 -0.3879207670688629 -0.921689510345459 -0.0 0.08732900023460388 0.41360336542129517 0 1.0 0 0.0 0 0.0 0 0.0 -1.5914828777313232 -0.18174423277378082 0.21605445444583893 -0.3879207670688629 -0.921689510345459 -0.0 0.46355491876602173 0.23200583457946777 0 1.0 0 0.0 0 0.0 0 0.0 1.351858377456665 0.10428905487060547 -0.2839455306529999 0.9117404818534851 -0.4107486307621002 -0.0 0.03511199355125427 0.6974631547927856 0 1.0 0 0.0 0 0.0 0 0.0 1.3527143001556396 0.10598441958427429 -0.2839455306529999 0.8721274733543396 -0.48924222588539124 -0.0 0.03460294008255005 0.6994173526763916 0 1.0 0 0.0 0 0.0 0 0.0 1.3527143001556396 0.10598441958427429 0.21605446934700012 0.8721274733543396 -0.48924222588539124 -0.0 0.446882039308548 0.5414314270019531 0 1.0 0 0.0 0 0.0 0 0.0 -0.06421995162963867 -0.189493790268898 -0.2839455306529999 -0.19635608792304993 -0.9804986715316772 -0.0 0.014671623706817627 0.47789525985717773 0 1.0 0 0.0 0 0.0 0 0.0 -0.05845522880554199 -0.1905226856470108 -0.2839455306529999 -0.15540024638175964 -0.9878231287002563 -0.0 0.011273443698883057 0.4764983654022217 0 1.0 0 0.0 0 0.0 0 0.0 -0.05845522880554199 -0.1905226856470108 0.21605445444583893 -0.15540024638175964 -0.9878231287002563 -0.0 0.4540817141532898 0.3196159601211548 0 1.0 0 0.0 0 0.0 0 0.0 0.48441362380981445 0.1902226209640503 -0.2839455306529999 0.2145756334066391 0.9766838550567627 -0.0 0.9363412857055664 0.7765765190124512 0 1.0 0 0.0 0 0.0 0 0.0 0.4746840000152588 0.19212231040000916 -0.2839455306529999 0.17062897980213165 0.9853205680847168 -0.0 0.9434916973114014 0.7804332971572876 0 1.0 0 0.0 0 0.0 0 0.0 0.4746840000152588 0.19212231040000916 0.21605448424816132 0.17062897980213165 0.9853205680847168 -0.0 0.5152760744094849 0.6204148530960083 0 1.0 0 0.0 0 0.0 0 0.0 1.5796849727630615 0.0980159342288971 -0.2839455306529999 0.9540696144104004 0.299539178609848 -0.0 0.8861360549926758 0.6619568467140198 0 1.0 0 0.0 0 0.0 0 0.0 1.5771892070770264 0.1059650182723999 -0.2839455306529999 0.9462873935699463 0.3232520520687103 -0.0 0.8865392804145813 0.6703754663467407 0 1.0 0 0.0 0 0.0 0 0.0 1.5771892070770264 0.1059650182723999 0.21605446934700012 0.9462873935699463 0.3232520520687103 -0.0 0.5707830190658569 0.5321577787399292 0 1.0 0 0.0 0 0.0 0 0.0 0.45359039306640625 0.1948854923248291 -0.2839455306529999 0.09341716021299362 0.9956053495407104 -0.0 0.9597970247268677 0.7865921854972839 0 1.0 0 0.0 0 0.0 0 0.0 0.4422264099121094 0.19574898481369019 -0.2839455306529999 0.05960264801979065 0.9981994032859802 -0.0 0.9689275026321411 0.7887187004089355 0 1.0 0 0.0 0 0.0 0 0.0 0.4422264099121094 0.19574898481369019 0.21605448424816132 0.05960264801979065 0.9981994032859802 -0.0 0.4977310299873352 0.6254823803901672 0 1.0 0 0.0 0 0.0 0 0.0 -1.3071802854537964 -0.18394553661346436 -0.2839455306529999 0.9027680158615112 0.4300973415374756 -0.0 0.9433887004852295 0.43811434507369995 0 1.0 0 0.0 0 0.0 0 0.0 -1.3092831373214722 -0.1795319765806198 -0.2839455306529999 0.9064607620239258 0.4222540855407715 -0.0 0.943996250629425 0.4413594603538513 0 1.0 0 0.0 0 0.0 0 0.0 -1.3092831373214722 -0.1795319765806198 0.21605445444583893 0.9064607620239258 0.4222540855407715 -0.0 0.6593202352523804 0.28693681955337524 0 1.0 0 0.0 0 0.0 0 0.0 0.3583190441131592 0.19072362780570984 -0.2839455306529999 -0.2143009752035141 0.9767448902130127 -0.0 0.036156296730041504 0.7792717218399048 0 1.0 0 0.0 0 0.0 0 0.0 0.3481614589691162 0.18820855021476746 -0.2839455306529999 -0.2685323655605316 0.9632557034492493 -0.0 0.04345867037773132 0.7748587131500244 0 1.0 0 0.0 0 0.0 0 0.0 0.3481614589691162 0.18820855021476746 0.21605448424816132 -0.2685323655605316 0.9632557034492493 -0.0 0.44675490260124207 0.6179690361022949 0 1.0 0 0.0 0 0.0 0 0.0 1.2608799934387207 0.10545903444290161 -0.2839455306529999 -0.9776909947395325 0.20999786257743835 -0.0 0.08772903680801392 0.6757194399833679 0 1.0 0 0.0 0 0.0 0 0.0 1.259554386138916 0.09793812036514282 -0.2839455306529999 -0.9904171824455261 0.13800470530986786 -0.0 0.08776611089706421 0.6681519746780396 0 1.0 0 0.0 0 0.0 0 0.0 1.259554386138916 0.09793812036514282 0.21605446934700012 -0.9904171824455261 0.13800470530986786 -0.0 0.39975225925445557 0.53098064661026 0 1.0 0 0.0 0 0.0 0 0.0 -0.01616692543029785 -0.19127915799617767 -0.2839455306529999 0.1188390776515007 -0.9928891658782959 -0.0 0.9859455823898315 0.4741927981376648 0 1.0 0 0.0 0 0.0 0 0.0 -0.010215997695922852 -0.19044485688209534 -0.2839455306529999 0.158879354596138 -0.9872737526893616 -0.0 0.9823390245437622 0.47498881816864014 0 1.0 0 0.0 0 0.0 0 0.0 -0.010215997695922852 -0.19044485688209534 0.21605445444583893 0.158879354596138 -0.9872737526893616 -0.0 0.4883649945259094 0.3156893849372864 0 1.0 0 0.0 0 0.0 0 0.0 0.39229464530944824 0.1955251395702362 -0.2839455306529999 -0.07519760727882385 0.9971618056297302 -0.0 0.009852409362792969 0.7886282801628113 0 1.0 0 0.0 0 0.0 0 0.0 0.3803856372833252 0.1943819224834442 -0.2839455306529999 -0.11777092516422272 0.9930112361907959 -0.0 0.019345253705978394 0.7862547636032104 0 1.0 0 0.0 0 0.0 0 0.0 0.3803856372833252 0.1943819224834442 0.21605448424816132 -0.11777092516422272 0.9930112361907959 -0.0 0.46399572491645813 0.624677300453186 0 1.0 0 0.0 0 0.0 0 0.0 -0.05845522880554199 -0.1905226856470108 -0.2839455306529999 -0.15540024638175964 -0.9878231287002563 -0.0 0.011273443698883057 0.4764983654022217 0 1.0 0 0.0 0 0.0 0 0.0 -0.05258345603942871 -0.1913229376077652 -0.2839455306529999 -0.11511582136154175 -0.9933469891548157 -0.0 0.007796823978424072 0.47536009550094604 0 1.0 0 0.0 0 0.0 0 0.0 -0.05258345603942871 -0.1913229376077652 0.21605445444583893 -0.11511582136154175 -0.9933469891548157 -0.0 0.45812341570854187 0.3178775906562805 0 1.0 0 0.0 0 0.0 0 0.0 -1.4762672185897827 -0.18205071985721588 -0.2839455306529999 0.36082032322883606 -0.9326151013374329 -0.0 1.025646448135376 0.4167007803916931 0 1.0 0 0.0 0 0.0 0 0.0 -1.4714535474777222 -0.18009264767169952 -0.2839455306529999 0.39243751764297485 -0.9197668433189392 -0.0 1.0230402946472168 0.41888707876205444 0 1.0 0 0.0 0 0.0 0 0.0 -1.4714535474777222 -0.18009264767169952 0.21605445444583893 0.39243751764297485 -0.9197668433189392 -0.0 0.5586231350898743 0.22511959075927734 0 1.0 0 0.0 0 0.0 0 0.0 1.474177598953247 0.1052936315536499 -0.2839455306529999 -0.7525253891944885 -0.6585283875465393 -0.0 0.9474200010299683 0.6983304023742676 0 1.0 0 0.0 0 0.0 0 0.0 1.4762828350067139 0.1027323305606842 -0.2839455306529999 -0.791589081287384 -0.6110110878944397 -0.0 0.9461220502853394 0.6951749324798584 0 1.0 0 0.0 0 0.0 0 0.0 1.4762828350067139 0.1027323305606842 0.21605446934700012 -0.791589081287384 -0.6110110878944397 -0.0 0.5190862417221069 0.5353896021842957 0 1.0 0 0.0 0 0.0 0 0.0 -1.4058862924575806 -0.18041372299194336 -0.2839455306529999 -0.939573347568512 -0.3422955870628357 -0.0 0.9879797697067261 0.4261610507965088 0 1.0 0 0.0 0 0.0 0 0.0 -1.405207633972168 -0.18224529922008514 -0.2839455306529999 -0.9354838728904724 -0.35331279039382935 -0.0 0.9876574277877808 0.4246361255645752 0 1.0 0 0.0 0 0.0 0 0.0 -1.405207633972168 -0.18224529922008514 0.21605445444583893 -0.9354838728904724 -0.35331279039382935 -0.0 0.6084837913513184 0.2424808144569397 0 1.0 0 0.0 0 0.0 0 0.0 0.49359822273254395 0.18797752261161804 -0.2839455306529999 0.2623981535434723 0.964934229850769 -0.0 0.929848849773407 0.7723045945167542 0 1.0 0 0.0 0 0.0 0 0.0 0.48441362380981445 0.1902226209640503 -0.2839455306529999 0.2145756334066391 0.9766838550567627 -0.0 0.9363412857055664 0.7765765190124512 0 1.0 0 0.0 0 0.0 0 0.0 0.48441362380981445 0.1902226209640503 0.21605448424816132 0.2145756334066391 0.9766838550567627 -0.0 0.5204581022262573 0.6179935932159424 0 1.0 0 0.0 0 0.0 0 0.0 0.46440958976745605 0.19367659091949463 -0.2839455306529999 0.13031403720378876 0.9914548397064209 -0.0 0.9513112306594849 0.7838000059127808 0 1.0 0 0.0 0 0.0 0 0.0 0.45359039306640625 0.1948854923248291 -0.2839455306529999 0.09341716021299362 0.9956053495407104 -0.0 0.9597970247268677 0.7865921854972839 0 1.0 0 0.0 0 0.0 0 0.0 0.45359039306640625 0.1948854923248291 0.21605448424816132 0.09341716021299362 0.9956053495407104 -0.0 0.5039113759994507 0.6241854429244995 0 1.0 0 0.0 0 0.0 0 0.0 0.3481614589691162 0.18820855021476746 -0.2839455306529999 -0.2685323655605316 0.9632557034492493 -0.0 0.04345867037773132 0.7748587131500244 0 1.0 0 0.0 0 0.0 0 0.0 0.33858752250671387 0.18523618578910828 -0.2839455306529999 -0.3266090750694275 0.9451277256011963 -0.0 0.050045162439346313 0.769943118095398 0 1.0 0 0.0 0 0.0 0 0.0 0.33858752250671387 0.18523618578910828 0.21605448424816132 -0.3266090750694275 0.9451277256011963 -0.0 0.4417054355144501 0.6148390769958496 0 1.0 0 0.0 0 0.0 0 0.0 -0.022168874740600586 -0.19187510013580322 -0.2839455306529999 0.0788903459906578 -0.9968565702438354 -0.0 0.9895748496055603 0.47368383407592773 0 1.0 0 0.0 0 0.0 0 0.0 -0.01616692543029785 -0.19127915799617767 -0.2839455306529999 0.1188390776515007 -0.9928891658782959 -0.0 0.9859455823898315 0.4741927981376648 0 1.0 0 0.0 0 0.0 0 0.0 -0.01616692543029785 -0.19127915799617767 0.21605445444583893 0.1188390776515007 -0.9928891658782959 -0.0 1.4840677976608276 0.3148688077926636 0 1.0 0 0.0 0 0.0 0 0.0 0.3803856372833252 0.1943819224834442 -0.2839455306529999 -0.11777092516422272 0.9930112361907959 -0.0 0.019345253705978394 0.7862547636032104 0 1.0 0 0.0 0 0.0 0 0.0 0.3690605163574219 0.19278141856193542 -0.2839455306529999 -0.16406750679016113 0.9864192605018616 -0.0 0.02811935544013977 0.783101499080658 0 1.0 0 0.0 0 0.0 0 0.0 0.3690605163574219 0.19278141856193542 0.21605448424816132 -0.16406750679016113 0.9864192605018616 -0.0 0.45789432525634766 0.6229138374328613 0 1.0 0 0.0 0 0.0 0 0.0 -1.5914828777313232 -0.18174423277378082 -0.2839455306529999 -0.3879207670688629 -0.921689510345459 -0.0 0.08732900023460388 0.41360336542129517 0 1.0 0 0.0 0 0.0 0 0.0 -1.584106683731079 -0.18455849587917328 -0.2839455306529999 -0.3258766531944275 -0.9454023838043213 -0.0 0.08343049883842468 0.4110526442527771 0 1.0 0 0.0 0 0.0 0 0.0 -1.584106683731079 -0.18455849587917328 0.21605445444583893 -0.3258766531944275 -0.9454023838043213 -0.0 0.46853989362716675 0.22760164737701416 0 1.0 0 0.0 0 0.0 0 0.0 1.3511579036712646 0.10253044962882996 -0.2839455306529999 0.9444258213043213 -0.32862329483032227 -0.0 0.03551158308982849 0.6954619884490967 0 1.0 0 0.0 0 0.0 0 0.0 1.351858377456665 0.10428905487060547 -0.2839455306529999 0.9117404818534851 -0.4107486307621002 -0.0 0.03511199355125427 0.6974631547927856 0 1.0 0 0.0 0 0.0 0 0.0 1.351858377456665 0.10428905487060547 0.21605446934700012 0.9117404818534851 -0.4107486307621002 -0.0 0.4463229477405548 0.5396226644515991 0 1.0 0 0.0 0 0.0 0 0.0 -0.05258345603942871 -0.1913229376077652 -0.2839455306529999 -0.11511582136154175 -0.9933469891548157 -0.0 0.007796823978424072 0.47536009550094604 0 1.0 0 0.0 0 0.0 0 0.0 -0.04660463333129883 -0.1918945610523224 -0.2839455306529999 -0.07571642100811005 -0.9971007108688354 -0.0 0.00424155592918396 0.4744833707809448 0 1.0 0 0.0 0 0.0 0 0.0 -0.04660463333129883 -0.1918945610523224 0.21605446934700012 -0.07571642100811005 -0.9971007108688354 -0.0 0.4622941017150879 0.3164721131324768 0 1.0 0 0.0 0 0.0 0 0.0 1.4762828350067139 0.1027323305606842 -0.2839455306529999 -0.791589081287384 -0.6110110878944397 -0.0 0.9461220502853394 0.6951749324798584 0 1.0 0 0.0 0 0.0 0 0.0 1.4782397747039795 0.10002994537353516 -0.2839455306529999 -0.8272042274475098 -0.5618457794189453 -0.0 0.9449471235275269 0.6918734312057495 0 1.0 0 0.0 0 0.0 0 0.0 1.4782397747039795 0.10002994537353516 0.21605446934700012 -0.8272042274475098 -0.5618457794189453 -0.0 0.5202562808990479 0.532355546951294 0 1.0 0 0.0 0 0.0 0 0.0 0.5022380352020264 0.1853870451450348 -0.2839455306529999 0.31418806314468384 0.9493392705917358 -0.0 0.9239929914474487 0.7676823139190674 0 1.0 0 0.0 0 0.0 0 0.0 0.49359822273254395 0.18797752261161804 -0.2839455306529999 0.2623981535434723 0.964934229850769 -0.0 0.929848849773407 0.7723045945167542 0 1.0 0 0.0 0 0.0 0 0.0 0.49359822273254395 0.18797752261161804 0.21605448424816132 0.2623981535434723 0.964934229850769 -0.0 0.5253105163574219 0.6152456402778625 0 1.0 0 0.0 0 0.0 0 0.0 -1.481134295463562 -0.18383851647377014 -0.2839455306529999 0.32856225967407227 -0.9444563388824463 -0.0 1.0282809734344482 0.41469669342041016 0 1.0 0 0.0 0 0.0 0 0.0 -1.4762672185897827 -0.18205071985721588 -0.2839455306529999 0.36082032322883606 -0.9326151013374329 -0.0 1.025646448135376 0.4167007803916931 0 1.0 0 0.0 0 0.0 0 0.0 -1.4762672185897827 -0.18205071985721588 0.21605445444583893 0.36082032322883606 -0.9326151013374329 -0.0 0.5548592209815979 0.2225743532180786 0 1.0 0 0.0 0 0.0 0 0.0 2.086514711380005 0.3347935080528259 -0.2839455306529999 -0.00039674062281847 0.999969482421875 -0.0 0.0064716339111328125 0.7823371291160583 0 1.0 0 0.0 0 0.0 0 0.0 2.073303461074829 0.3344895839691162 -0.2839455306529999 -0.047090061008930206 0.9988707900047302 -0.0 0.01697695255279541 0.7806612253189087 0 1.0 0 0.0 0 0.0 0 0.0 2.073303461074829 0.3344895839691162 0.21605446934700012 -0.047090061008930206 0.9988707900047302 -0.0 0.46527335047721863 0.618800163269043 0 1.0 0 0.0 0 0.0 0 0.0 -0.028221845626831055 -0.1922326534986496 -0.2839455306529999 0.039246805012226105 -0.99920654296875 -0.0 0.9932255744934082 0.47346174716949463 0 1.0 0 0.0 0 0.0 0 0.0 -0.022168874740600586 -0.19187510013580322 -0.2839455306529999 0.0788903459906578 -0.9968565702438354 -0.0 0.9895748496055603 0.47368383407592773 0 1.0 0 0.0 0 0.0 0 0.0 -0.022168874740600586 -0.19187510013580322 0.21605445444583893 0.0788903459906578 -0.9968565702438354 -0.0 1.479734182357788 0.3144296407699585 0 1.0 0 0.0 0 0.0 0 0.0 -1.405207633972168 -0.18224529922008514 -0.2839455306529999 -0.9354838728904724 -0.35331279039382935 -0.0 0.9876574277877808 0.4246361255645752 0 1.0 0 0.0 0 0.0 0 0.0 -1.4045532941818237 -0.18394553661346436 -0.2839455306529999 -0.9332560300827026 -0.35917234420776367 -0.0 0.9873474836349487 0.42323416471481323 0 1.0 0 0.0 0 0.0 0 0.0 -1.4045532941818237 -0.18394553661346436 0.21605445444583893 -0.9332560300827026 -0.35914182662963867 -0.0 0.609167754650116 0.24128073453903198 0 1.0 0 0.0 0 0.0 0 0.0 0.5103330612182617 0.18245115876197815 -0.2839455306529999 0.36994537711143494 0.9290444850921631 -0.0 0.9187459945678711 0.7627639174461365 0 1.0 0 0.0 0 0.0 0 0.0 0.5022380352020264 0.1853870451450348 -0.2839455306529999 0.31418806314468384 0.9493392705917358 -0.0 0.9239929914474487 0.7676823139190674 0 1.0 0 0.0 0 0.0 0 0.0 0.5022380352020264 0.1853870451450348 0.21605448424816132 0.31418806314468384 0.9493392705917358 -0.0 0.5298394560813904 0.6121901869773865 0 1.0 0 0.0 0 0.0 0 0.0 1.3506128787994385 0.10070860385894775 -0.2839455306529999 0.9696035385131836 -0.24460585415363312 -0.0 0.03580290079116821 0.6934131383895874 0 1.0 0 0.0 0 0.0 0 0.0 1.3511579036712646 0.10253044962882996 -0.2839455306529999 0.9444258213043213 -0.32862329483032227 -0.0 0.03551158308982849 0.6954619884490967 0 1.0 0 0.0 0 0.0 0 0.0 1.3511579036712646 0.10253044962882996 0.21605446934700012 0.9444258213043213 -0.32862329483032227 -0.0 0.4458465576171875 0.5377424359321594 0 1.0 0 0.0 0 0.0 0 0.0 -0.04660463333129883 -0.1918945610523224 -0.2839455306529999 -0.07571642100811005 -0.9971007108688354 -0.0 0.00424155592918396 0.4744833707809448 0 1.0 0 0.0 0 0.0 0 0.0 -0.040518760681152344 -0.19223752617835999 -0.2839455306529999 -0.03735465556383133 -0.999298095703125 -0.0 0.0006078481674194336 0.47387105226516724 0 1.0 0 0.0 0 0.0 0 0.0 -0.040518760681152344 -0.19223752617835999 0.21605445444583893 -0.03735465556383133 -0.999298095703125 -0.0 0.4665878415107727 0.31540971994400024 0 1.0 0 0.0 0 0.0 0 0.0 -1.4045532941818237 -0.18394553661346436 -0.2839455306529999 0.0 -0.999969482421875 -0.0 0.9873474836349487 0.42323416471481323 0 1.0 0 0.0 0 0.0 0 0.0 -1.3071802854537964 -0.18394553661346436 -0.2839455306529999 0.0 -1.0 -0.0 0.9433887004852295 0.43811434507369995 0 1.0 0 0.0 0 0.0 0 0.0 -1.3071802854537964 -0.18394553661346436 0.21605445444583893 0.0 -0.999969482421875 -0.0 0.6608636379241943 0.2844606637954712 0 1.0 0 0.0 0 0.0 0 0.0 2.1004011631011963 0.33448582887649536 -0.2839455306529999 0.04541154205799103 0.9989623427391052 -0.0 0.9952402710914612 0.7828429341316223 0 1.0 0 0.0 0 0.0 0 0.0 2.086514711380005 0.3347935080528259 -0.2839455306529999 -0.00039674062281847 0.999969482421875 -0.0 1.0064716339111328 0.7823371291160583 0 1.0 0 0.0 0 0.0 0 0.0 2.086514711380005 0.3347935080528259 0.21605446934700012 -0.00039674062281847 0.999969482421875 -0.0 1.4724758863449097 0.6193457841873169 0 1.0 0 0.0 0 0.0 0 0.0 0.33858752250671387 0.18523618578910828 -0.2839455306529999 -0.3266090750694275 0.9451277256011963 -0.0 0.050045162439346313 0.769943118095398 0 1.0 0 0.0 0 0.0 0 0.0 0.32959747314453125 0.1818065345287323 -0.2839455306529999 -0.3882870078086853 0.921536922454834 -0.0 0.05594471096992493 0.7645926475524902 0 1.0 0 0.0 0 0.0 0 0.0 0.32959747314453125 0.1818065345287323 0.21605448424816132 -0.3882870078086853 0.921536922454834 -0.0 0.43699097633361816 0.6112980842590332 0 1.0 0 0.0 0 0.0 0 0.0 2.073303461074829 0.3344895839691162 -0.2839455306529999 -0.047090061008930206 0.9988707900047302 -0.0 0.01697695255279541 0.7806612253189087 0 1.0 0 0.0 0 0.0 0 0.0 2.0605223178863525 0.3335774540901184 -0.2839455306529999 -0.09668263792991638 0.9953001737594604 -0.0 0.02686828374862671 0.7779173851013184 0 1.0 0 0.0 0 0.0 0 0.0 2.0605223178863525 0.3335774540901184 0.21605446934700012 -0.09668263792991638 0.9953001737594604 -0.0 0.45836377143859863 0.6175618171691895 0 1.0 0 0.0 0 0.0 0 0.0 1.3502237796783447 0.09882351756095886 -0.2839455306529999 0.9869990944862366 -0.16061891615390778 -0.0 0.03598657250404358 0.691315770149231 0 1.0 0 0.0 0 0.0 0 0.0 1.3506128787994385 0.10070860385894775 -0.2839455306529999 0.9696035385131836 -0.24460585415363312 -0.0 0.03580290079116821 0.6934131383895874 0 1.0 0 0.0 0 0.0 0 0.0 1.3506128787994385 0.10070860385894775 0.21605446934700012 0.9696035385131836 -0.24460585415363312 -0.0 0.44545286893844604 0.5357896089553833 0 1.0 0 0.0 0 0.0 0 0.0 -0.040518760681152344 -0.19223752617835999 -0.2839455306529999 -0.03735465556383133 -0.999298095703125 -0.0 1.0006078481674194 0.47387105226516724 0 1.0 0 0.0 0 0.0 0 0.0 -0.03432583808898926 -0.19235184788703918 -0.2839455306529999 0.0005188146606087685 -0.999969482421875 -0.0 0.9968962669372559 0.4735258221626282 0 1.0 0 0.0 0 0.0 0 0.0 -0.03432583808898926 -0.19235184788703918 0.21605445444583893 0.0005188146606087685 -0.999969482421875 -0.0 1.4709974527359009 0.31470078229904175 0 1.0 0 0.0 0 0.0 0 0.0 -1.4860550165176392 -0.1854560375213623 -0.2839455306529999 0.29584643244743347 -0.9552293419837952 -0.0 1.030943751335144 0.41287368535995483 0 1.0 0 0.0 0 0.0 0 0.0 -1.481134295463562 -0.18383851647377014 -0.2839455306529999 0.32856225967407227 -0.9444563388824463 -0.0 1.0282809734344482 0.41469669342041016 0 1.0 0 0.0 0 0.0 0 0.0 -1.481134295463562 -0.18383851647377014 0.21605445444583893 0.32856225967407227 -0.9444563388824463 -0.0 0.55098956823349 0.22027724981307983 0 1.0 0 0.0 0 0.0 0 0.0 1.4782397747039795 0.10002994537353516 -0.2839455306529999 -0.8272042274475098 -0.5618457794189453 -0.0 0.9449471235275269 0.6918734312057495 0 1.0 0 0.0 0 0.0 0 0.0 1.480048418045044 0.09718650579452515 -0.2839455306529999 -0.8592181205749512 -0.5115817785263062 -0.0 0.9438934922218323 0.688425600528717 0 1.0 0 0.0 0 0.0 0 0.0 1.480048418045044 0.09718650579452515 0.21605446934700012 -0.8592181205749512 -0.5115817785263062 -0.0 0.5213466882705688 0.5291599035263062 0 1.0 0 0.0 0 0.0 0 0.0 -0.03432583808898926 -0.19235184788703918 -0.2839455306529999 0.0005188146606087685 -0.999969482421875 -0.0 0.9968962669372559 0.4735258221626282 0 1.0 0 0.0 0 0.0 0 0.0 -0.028221845626831055 -0.1922326534986496 -0.2839455306529999 0.039246805012226105 -0.99920654296875 -0.0 0.9932255744934082 0.47346174716949463 0 1.0 0 0.0 0 0.0 0 0.0 -0.028221845626831055 -0.1922326534986496 0.21605445444583893 0.039246805012226105 -0.99920654296875 -0.0 1.4753739833831787 0.3143734931945801 0 1.0 0 0.0 0 0.0 0 0.0 -1.584106683731079 -0.18455849587917328 -0.2839455306529999 -0.3258766531944275 -0.9454023838043213 -0.0 0.08343049883842468 0.4110526442527771 0 1.0 0 0.0 0 0.0 0 0.0 -1.576392412185669 -0.1869397908449173 -0.2839455306529999 -0.26517534255981445 -0.964171290397644 -0.0 0.07935571670532227 0.40890204906463623 0 1.0 0 0.0 0 0.0 0 0.0 -1.576392412185669 -0.1869397908449173 0.21605445444583893 -0.26517534255981445 -0.964171290397644 -0.0 0.47397521138191223 0.22362583875656128 0 1.0 0 0.0 0 0.0 0 0.0 0.5178830623626709 0.17916986346244812 -0.2839455306529999 0.4293954372406006 0.9031037092208862 -0.0 0.9140768051147461 0.7575938105583191 0 1.0 0 0.0 0 0.0 0 0.0 0.5103330612182617 0.18245115876197815 -0.2839455306529999 0.36994537711143494 0.9290444850921631 -0.0 0.9187459945678711 0.7627639174461365 0 1.0 0 0.0 0 0.0 0 0.0 0.5103330612182617 0.18245115876197815 0.21605448424816132 0.36994537711143494 0.9290444850921631 -0.0 0.5340526103973389 0.6088428497314453 0 1.0 0 0.0 0 0.0 0 0.0 -0.1012258529663086 0.314128041267395 -0.2839455306529999 -1.0 0.0 -0.0 0.06410348415374756 0.897499144077301 0 1.0 0 0.0 0 0.0 0 0.0 -0.1012258529663086 0.24932944774627686 -0.2839455306529999 -1.0 0.0 -0.0 0.05824926495552063 0.8729636073112488 0 1.0 0 0.0 0 0.0 0 0.0 -0.1012258529663086 0.24932944774627686 0.21605448424816132 -1.0 0.0 -0.0 0.44902312755584717 0.7215856313705444 0 1.0 0 0.0 0 0.0 0 0.0 2.1138060092926025 0.3335627317428589 -0.2839455306529999 0.09347819536924362 0.9956053495407104 -0.0 0.9843412637710571 0.7820700407028198 0 1.0 0 0.0 0 0.0 0 0.0 2.1004011631011963 0.33448582887649536 -0.2839455306529999 0.04541154205799103 0.9989623427391052 -0.0 0.9952402710914612 0.7828429341316223 0 1.0 0 0.0 0 0.0 0 0.0 2.1004011631011963 0.33448582887649536 0.21605446934700012 0.04541154205799103 0.9989623427391052 -0.0 1.4800961017608643 0.6191619634628296 0 1.0 0 0.0 0 0.0 0 0.0 0.32959747314453125 0.1818065345287323 -0.2839455306529999 -0.3882870078086853 0.921536922454834 -0.0 0.05594471096992493 0.7645926475524902 0 1.0 0 0.0 0 0.0 0 0.0 0.32119107246398926 0.17791959643363953 -0.2839455306529999 -0.4528946876525879 0.8915371894836426 -0.0 0.061192870140075684 0.7588622570037842 0 1.0 0 0.0 0 0.0 0 0.0 0.32119107246398926 0.17791959643363953 0.21605448424816132 -0.4528946876525879 0.8915371894836426 -0.0 0.4326004981994629 0.6073610782623291 0 1.0 0 0.0 0 0.0 0 0.0 2.0605223178863525 0.3335774540901184 -0.2839455306529999 -0.09668263792991638 0.9953001737594604 -0.0 0.02686828374862671 0.7779173851013184 0 1.0 0 0.0 0 0.0 0 0.0 2.0481717586517334 0.3320571780204773 -0.2839455306529999 -0.14902187883853912 0.9888302087783813 -0.0 0.0360887348651886 0.7742131352424622 0 1.0 0 0.0 0 0.0 0 0.0 2.0481717586517334 0.3320571780204773 0.21605446934700012 -0.14902187883853912 0.9888302087783813 -0.0 0.4517524838447571 0.6156635284423828 0 1.0 0 0.0 0 0.0 0 0.0 1.3499906063079834 0.09687519073486328 -0.2839455306529999 0.9968565702438354 -0.0788903459906578 -0.0 0.03606346249580383 0.6891689300537109 0 1.0 0 0.0 0 0.0 0 0.0 1.3502237796783447 0.09882351756095886 -0.2839455306529999 0.9869990944862366 -0.16061891615390778 -0.0 0.03598657250404358 0.691315770149231 0 1.0 0 0.0 0 0.0 0 0.0 1.3502237796783447 0.09882351756095886 0.21605446934700012 0.9869990944862366 -0.16061891615390778 -0.0 0.44514212012290955 0.5337626934051514 0 1.0 0 0.0 0 0.0 0 0.0 0.1243431568145752 0.314128041267395 -0.2839455306529999 0.0 1.0 -0.0 0.8537107706069946 0.8676877617835999 0 1.0 0 0.0 0 0.0 0 0.0 -0.1012258529663086 0.314128041267395 -0.2839455306529999 0.0 1.0 -0.0 1.0641034841537476 0.897499144077301 0 1.0 0 0.0 0 0.0 0 0.0 -0.1012258529663086 0.314128041267395 0.21605446934700012 0.0 1.0 -0.0 0.4513011574745178 0.7462323307991028 0 1.0 0 0.0 0 0.0 0 0.0 -1.4910292625427246 -0.18690331280231476 -0.2839455306529999 0.2627948820590973 -0.964842677116394 -0.0 1.0336346626281738 0.41123098134994507 0 1.0 0 0.0 0 0.0 0 0.0 -1.4860550165176392 -0.1854560375213623 -0.2839455306529999 0.29584643244743347 -0.9552293419837952 -0.0 1.030943751335144 0.41287368535995483 0 1.0 0 0.0 0 0.0 0 0.0 -1.4860550165176392 -0.1854560375213623 0.21605445444583893 0.29584643244743347 -0.9551988244056702 -0.0 0.5470194220542908 0.2182314395904541 0 1.0 0 0.0 0 0.0 0 0.0 1.480048418045044 0.09718650579452515 -0.2839455306529999 -0.8592181205749512 -0.5115817785263062 -0.0 0.9438934922218323 0.688425600528717 0 1.0 0 0.0 0 0.0 0 0.0 1.481708288192749 0.09420198202133179 -0.2839455306529999 -0.887417197227478 -0.460921049118042 -0.0 0.9429594278335571 0.6848307847976685 0 1.0 0 0.0 0 0.0 0 0.0 1.481708288192749 0.09420198202133179 0.21605446934700012 -0.887417197227478 -0.460921049118042 -0.0 0.5223576426506042 0.5258004665374756 0 1.0 0 0.0 0 0.0 0 0.0 -0.1012258529663086 0.24932944774627686 -0.2839455306529999 0.0 -1.0 -0.0 1.0582492351531982 0.8729636073112488 0 1.0 0 0.0 0 0.0 0 0.0 0.1243431568145752 0.24932944774627686 -0.2839455306529999 0.0 -1.0 -0.0 0.8631843328475952 0.8435003757476807 0 1.0 0 0.0 0 0.0 0 0.0 0.1243431568145752 0.24932944774627686 0.21605448424816132 0.0 -1.0 -0.0 0.5528576970100403 0.7088805437088013 0 1.0 0 0.0 0 0.0 0 0.0 0.524888277053833 0.1755431890487671 -0.2839455306529999 0.4920804500579834 0.8705404996871948 -0.0 0.9099525809288025 0.7522066831588745 0 1.0 0 0.0 0 0.0 0 0.0 0.5178830623626709 0.17916986346244812 -0.2839455306529999 0.4293954372406006 0.9031037092208862 -0.0 0.9140768051147461 0.7575938105583191 0 1.0 0 0.0 0 0.0 0 0.0 0.5178830623626709 0.17916986346244812 0.21605448424816132 0.4293954372406006 0.9031037092208862 -0.0 0.5379588007926941 0.6052160263061523 0 1.0 0 0.0 0 0.0 0 0.0 0.1243431568145752 0.24932944774627686 -0.2839455306529999 1.0 0.0 -0.0 0.8631843328475952 0.8435003757476807 0 1.0 0 0.0 0 0.0 0 0.0 0.1243431568145752 0.314128041267395 -0.2839455306529999 1.0 0.0 -0.0 0.8537107706069946 0.8676877617835999 0 1.0 0 0.0 0 0.0 0 0.0 0.1243431568145752 0.314128041267395 0.21605446934700012 0.999969482421875 0.0 -0.0 0.5506380796432495 0.7342168092727661 0 1.0 0 0.0 0 0.0 0 0.0 -1.4960569143295288 -0.18818031251430511 -0.2839455306529999 0.2294991910457611 -0.9732962846755981 -0.0 1.036353588104248 0.40976768732070923 0 1.0 0 0.0 0 0.0 0 0.0 -1.4910292625427246 -0.18690331280231476 -0.2839455306529999 0.2627948820590973 -0.964842677116394 -0.0 1.0336346626281738 0.41123098134994507 0 1.0 0 0.0 0 0.0 0 0.0 -1.4910292625427246 -0.18690331280231476 0.21605445444583893 0.2627948820590973 -0.964842677116394 -0.0 0.5429552793502808 0.21644043922424316 0 1.0 0 0.0 0 0.0 0 0.0 2.1267292499542236 0.3320242762565613 -0.2839455306529999 0.14444410800933838 0.9895016551017761 -0.0 0.9739037156105042 0.7800891399383545 0 1.0 0 0.0 0 0.0 0 0.0 2.1138060092926025 0.3335627317428589 -0.2839455306529999 0.09347819536924362 0.9956053495407104 -0.0 0.9843412637710571 0.7820700407028198 0 1.0 0 0.0 0 0.0 0 0.0 2.1138060092926025 0.3335627317428589 0.21605446934700012 0.09347819536924362 0.9956053495407104 -0.0 0.48747992515563965 0.618225634098053 0 1.0 0 0.0 0 0.0 0 0.0 0.32119107246398926 0.17791959643363953 -0.2839455306529999 -0.4528946876525879 0.8915371894836426 -0.0 0.061192870140075684 0.7588622570037842 0 1.0 0 0.0 0 0.0 0 0.0 0.313368558883667 0.17357537150382996 -0.2839455306529999 -0.5195165872573853 0.8544266819953918 -0.0 0.06582790613174438 0.7527945637702942 0 1.0 0 0.0 0 0.0 0 0.0 0.313368558883667 0.17357537150382996 0.21605448424816132 -0.5195165872573853 0.8544266819953918 -0.0 0.4285222887992859 0.6030384302139282 0 1.0 0 0.0 0 0.0 0 0.0 1.481708288192749 0.09420198202133179 -0.2839455306529999 -0.887417197227478 -0.460921049118042 -0.0 0.9429594278335571 0.6848307847976685 0 1.0 0 0.0 0 0.0 0 0.0 1.4832203388214111 0.09107637405395508 -0.2839455306529999 -0.9118625521659851 -0.41044342517852783 -0.0 0.9421427249908447 0.6810876131057739 0 1.0 0 0.0 0 0.0 0 0.0 1.4832203388214111 0.09107637405395508 0.21605446934700012 -0.9118625521659851 -0.41044342517852783 -0.0 0.5232900381088257 0.5222742557525635 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 0.32953959703445435 -0.2839455306529999 -1.0 0.0 -0.0 0.12790176272392273 0.820160448551178 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 -1.0 0.0 -0.0 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 0.21605445444583893 -1.0 0.0 -0.0 0.3570616841316223 0.2896650433540344 0 1.0 0 0.0 0 0.0 0 0.0 -1.576392412185669 -0.1869397908449173 -0.2839455306529999 -0.26517534255981445 -0.964171290397644 -0.0 0.07935571670532227 0.40890204906463623 0 1.0 0 0.0 0 0.0 0 0.0 -1.5683399438858032 -0.18888813257217407 -0.2839455306529999 -0.20651875436306 -0.9784234166145325 -0.0 0.07509827613830566 0.40715938806533813 0 1.0 0 0.0 0 0.0 0 0.0 -1.5683399438858032 -0.18888813257217407 0.21605445444583893 -0.20651875436306 -0.9784234166145325 -0.0 0.47987258434295654 0.22011399269104004 0 1.0 0 0.0 0 0.0 0 0.0 2.0481717586517334 0.3320571780204773 -0.2839455306529999 -0.14902187883853912 0.9888302087783813 -0.0 0.0360887348651886 0.7742131352424622 0 1.0 0 0.0 0 0.0 0 0.0 2.0362517833709717 0.32992881536483765 -0.2839455306529999 -0.20380260050296783 0.9790032505989075 -0.0 0.04460981488227844 0.769651472568512 0 1.0 0 0.0 0 0.0 0 0.0 2.0362517833709717 0.32992881536483765 0.21605446934700012 -0.20380260050296783 0.9790032505989075 -0.0 0.4454401135444641 0.6131366491317749 0 1.0 0 0.0 0 0.0 0 0.0 1.4832203388214111 0.09107637405395508 -0.2839455306529999 -0.9118625521659851 -0.41044342517852783 -0.0 0.9421427249908447 0.6810876131057739 0 1.0 0 0.0 0 0.0 0 0.0 1.4845836162567139 0.08780968189239502 -0.2839455306529999 -0.9327067136764526 -0.36057618260383606 -0.0 0.9414418935775757 0.6771947145462036 0 1.0 0 0.0 0 0.0 0 0.0 1.4845836162567139 0.08780968189239502 0.21605446934700012 -0.9327067136764526 -0.36057618260383606 -0.0 0.5241435170173645 0.5185786485671997 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.32953959703445435 -0.2839455306529999 0.0 0.999969482421875 -0.0 0.07377690076828003 0.8601027727127075 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 0.32953959703445435 -0.2839455306529999 0.0 1.0 -0.0 0.12790176272392273 0.820160448551178 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 0.32953959703445435 0.21605446934700012 0.0 0.999969482421875 -0.0 0.39915820956230164 0.6972336173057556 0 1.0 0 0.0 0 0.0 0 0.0 0.531348705291748 0.17157110571861267 -0.2839455306529999 0.5530259013175964 0.8331248164176941 -0.0 0.9063409566879272 0.7466289401054382 0 1.0 0 0.0 0 0.0 0 0.0 0.524888277053833 0.1755431890487671 -0.2839455306529999 0.4920804500579834 0.8705404996871948 -0.0 0.9099525809288025 0.7522066831588745 0 1.0 0 0.0 0 0.0 0 0.0 0.524888277053833 0.1755431890487671 0.21605448424816132 0.4920804500579834 0.8705404996871948 -0.0 0.5415674448013306 0.6013184785842896 0 1.0 0 0.0 0 0.0 0 0.0 -1.5011382102966309 -0.18928703665733337 -0.2839455306529999 0.19614246487617493 -0.9805597066879272 -0.0 0.039100319147109985 0.4084831476211548 0 1.0 0 0.0 0 0.0 0 0.0 -1.4960569143295288 -0.18818031251430511 -0.2839455306529999 0.2294991910457611 -0.9732962846755981 -0.0 1.036353588104248 0.40976768732070923 0 1.0 0 0.0 0 0.0 0 0.0 -1.4960569143295288 -0.18818031251430511 0.21605445444583893 0.2295297086238861 -0.9732962846755981 -0.0 0.5388044118881226 0.21490734815597534 0 1.0 0 0.0 0 0.0 0 0.0 2.1391708850860596 0.32987040281295776 -0.2839455306529999 0.1981566846370697 0.9801629781723022 -0.0 0.9640299081802368 0.7769839763641357 0 1.0 0 0.0 0 0.0 0 0.0 2.1267292499542236 0.3320242762565613 -0.2839455306529999 0.14444410800933838 0.9895016551017761 -0.0 0.9739037156105042 0.7800891399383545 0 1.0 0 0.0 0 0.0 0 0.0 2.1267292499542236 0.3320242762565613 0.21605446934700012 0.14444410800933838 0.9895016551017761 -0.0 0.4946056604385376 0.6165568828582764 0 1.0 0 0.0 0 0.0 0 0.0 0.313368558883667 0.17357537150382996 -0.2839455306529999 -0.5195165872573853 0.8544266819953918 -0.0 0.06582790613174438 0.7527945637702942 0 1.0 0 0.0 0 0.0 0 0.0 0.30612969398498535 0.1687738597393036 -0.2839455306529999 -0.5868709087371826 0.8096560835838318 -0.0 0.06988894939422607 0.7464208602905273 0 1.0 0 0.0 0 0.0 0 0.0 0.30612969398498535 0.1687738597393036 0.21605446934700012 -0.5868709087371826 0.8096560835838318 -0.0 0.4247440695762634 0.5983362197875977 0 1.0 0 0.0 0 0.0 0 0.0 1.4845836162567139 0.08780968189239502 -0.2839455306529999 -0.9327067136764526 -0.36057618260383606 -0.0 0.9414418935775757 0.6771947145462036 0 1.0 0 0.0 0 0.0 0 0.0 1.4857985973358154 0.08440190553665161 -0.2839455306529999 -0.9501022100448608 -0.3119296729564667 -0.0 0.940855085849762 0.6731501817703247 0 1.0 0 0.0 0 0.0 0 0.0 1.4857985973358154 0.08440190553665161 0.21605446934700012 -0.9501022100448608 -0.3119296729564667 -0.0 0.5249184966087341 0.5147104263305664 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 -0.2839455306529999 1.0 0.0 -0.0 0.05936384201049805 0.7411052584648132 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.32953959703445435 -0.2839455306529999 1.0 0.0 -0.0 0.07377690076828003 0.8601027727127075 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.32953959703445435 0.21605446934700012 1.0 0.0 -0.0 0.43876373767852783 0.7131302356719971 0 1.0 0 0.0 0 0.0 0 0.0 -1.5683399438858032 -0.18888813257217407 -0.2839455306529999 -0.20651875436306 -0.9784234166145325 -0.0 0.07509827613830566 0.40715938806533813 0 1.0 0 0.0 0 0.0 0 0.0 -1.559949517250061 -0.1904035061597824 -0.2839455306529999 -0.1504257321357727 -0.9886165857315063 -0.0 0.07065242528915405 0.40583473443984985 0 1.0 0 0.0 0 0.0 0 0.0 -1.559949517250061 -0.1904035061597824 0.21605445444583893 -0.1504257321357727 -0.9886165857315063 -0.0 0.48623794317245483 0.2171075940132141 0 1.0 0 0.0 0 0.0 0 0.0 2.0362517833709717 0.32992881536483765 -0.2839455306529999 -0.20380260050296783 0.9790032505989075 -0.0 0.04460981488227844 0.769651472568512 0 1.0 0 0.0 0 0.0 0 0.0 2.0247623920440674 0.32719236612319946 -0.2839455306529999 -0.2606891095638275 0.965391993522644 -0.0 0.05242618918418884 0.7643268704414368 0 1.0 0 0.0 0 0.0 0 0.0 2.0247623920440674 0.32719236612319946 0.21605446934700012 -0.2606891095638275 0.965391993522644 -0.0 0.43942350149154663 0.6100096702575684 0 1.0 0 0.0 0 0.0 0 0.0 -0.39194393157958984 0.19643977284431458 -0.2839455306529999 -0.0021973326802253723 0.999969482421875 -0.0 0.9794628620147705 0.7999661564826965 0 1.0 0 0.0 0 0.0 0 0.0 -0.4022181034088135 0.19607976078987122 -0.2839455306529999 -0.0710165724158287 0.9974669814109802 -0.0 0.9880318641662598 0.799943745136261 0 1.0 0 0.0 0 0.0 0 0.0 -0.4022181034088135 0.19607976078987122 0.21605448424816132 -0.0710165724158287 0.9974669814109802 -0.0 1.48317551612854 0.6406345367431641 0 1.0 0 0.0 0 0.0 0 0.0 1.4857985973358154 0.08440190553665161 -0.2839455306529999 -0.9501022100448608 -0.3119296729564667 -0.0 0.940855085849762 0.6731501817703247 0 1.0 0 0.0 0 0.0 0 0.0 1.4868652820587158 0.08085307478904724 -0.2839455306529999 -0.9576708078384399 -0.28785058856010437 -0.0 0.9403803944587708 0.6689517498016357 0 1.0 0 0.0 0 0.0 0 0.0 1.4868652820587158 0.08085307478904724 0.21605446934700012 -0.9576708078384399 -0.28785058856010437 -0.0 0.5256151556968689 0.5106664299964905 0 1.0 0 0.0 0 0.0 0 0.0 0.5373761653900146 0.16726094484329224 -0.2839455306529999 0.6065859198570251 0.7949766516685486 -0.0 0.9031440019607544 0.7408447861671448 0 1.0 0 0.0 0 0.0 0 0.0 0.531348705291748 0.17157110571861267 -0.2839455306529999 0.5530259013175964 0.8331248164176941 -0.0 0.9063409566879272 0.7466289401054382 0 1.0 0 0.0 0 0.0 0 0.0 0.531348705291748 0.17157110571861267 0.21605448424816132 0.5530259013175964 0.8331248164176941 -0.0 0.5448883175849915 0.5971555709838867 0 1.0 0 0.0 0 0.0 0 0.0 1.4868652820587158 0.08085307478904724 -0.2839455306529999 0.1817987561225891 -0.983306348323822 -0.0 0.9403803944587708 0.6689517498016357 0 1.0 0 0.0 0 0.0 0 0.0 1.5796849727630615 0.0980159342288971 -0.2839455306529999 0.1817987561225891 -0.983306348323822 -0.0 0.8861360549926758 0.6619568467140198 0 1.0 0 0.0 0 0.0 0 0.0 1.5796849727630615 0.0980159342288971 0.21605446934700012 0.1817987561225891 -0.983306348323822 -0.0 0.5723452568054199 0.5243043899536133 0 1.0 0 0.0 0 0.0 0 0.0 -0.3807816505432129 0.19609802961349487 -0.2839455306529999 0.062410350888967514 0.9980468153953552 -0.0 0.970216691493988 0.7989437580108643 0 1.0 0 0.0 0 0.0 0 0.0 -0.39194393157958984 0.19643977284431458 -0.2839455306529999 -0.0021973326802253723 0.999969482421875 -0.0 0.9794628620147705 0.7999661564826965 0 1.0 0 0.0 0 0.0 0 0.0 -0.39194393157958984 0.19643977284431458 0.21605448424816132 -0.0021973326802253723 0.999969482421875 -0.0 0.48874813318252563 0.6407021284103394 0 1.0 0 0.0 0 0.0 0 0.0 -1.5062729120254517 -0.19022351503372192 -0.2839455306529999 0.16275520622730255 -0.9866328835487366 -0.0 0.041874319314956665 0.40737658739089966 0 1.0 0 0.0 0 0.0 0 0.0 -1.5011382102966309 -0.18928703665733337 -0.2839455306529999 0.19614246487617493 -0.9805597066879272 -0.0 0.039100319147109985 0.4084831476211548 0 1.0 0 0.0 0 0.0 0 0.0 -1.5011382102966309 -0.18928703665733337 0.21605445444583893 0.19614246487617493 -0.9805597066879272 -0.0 0.5345746278762817 0.21363526582717896 0 1.0 0 0.0 0 0.0 0 0.0 2.1511309146881104 0.32710111141204834 -0.2839455306529999 0.2543107271194458 0.9671010375022888 -0.0 0.9547929763793945 0.7728448510169983 0 1.0 0 0.0 0 0.0 0 0.0 2.1391708850860596 0.32987040281295776 -0.2839455306529999 0.1981566846370697 0.9801629781723022 -0.0 0.9640299081802368 0.7769839763641357 0 1.0 0 0.0 0 0.0 0 0.0 2.1391708850860596 0.32987040281295776 0.21605446934700012 0.1981566846370697 0.9801629781723022 -0.0 0.5014569759368896 0.6141777038574219 0 1.0 0 0.0 0 0.0 0 0.0 0.30612969398498535 0.1687738597393036 -0.2839455306529999 -0.5868709087371826 0.8096560835838318 -0.0 0.06988894939422607 0.7464208602905273 0 1.0 0 0.0 0 0.0 0 0.0 0.29947471618652344 0.16351506114006042 -0.2839455306529999 -0.6484267711639404 0.7612537145614624 -0.0 0.07341375946998596 0.7397626638412476 0 1.0 0 0.0 0 0.0 0 0.0 0.29947471618652344 0.16351506114006042 0.21605446934700012 -0.6484267711639404 0.7612537145614624 -0.0 0.4212538003921509 0.5932559967041016 0 1.0 0 0.0 0 0.0 0 0.0 1.259554386138916 0.09793812036514282 -0.2839455306529999 -0.9904171824455261 0.13800470530986786 -0.0 0.08776611089706421 0.6681519746780396 0 1.0 0 0.0 0 0.0 0 0.0 1.2587590217590332 0.09020313620567322 -0.2839455306529999 -0.9976806044578552 0.06784264743328094 -0.0 0.08753597736358643 0.6604448556900024 0 1.0 0 0.0 0 0.0 0 0.0 1.2587590217590332 0.09020313620567322 0.21605446934700012 -0.9976806044578552 0.06784264743328094 -0.0 0.39880692958831787 0.5234965085983276 0 1.0 0 0.0 0 0.0 0 0.0 2.0247623920440674 0.32719236612319946 -0.2839455306529999 -0.2606891095638275 0.965391993522644 -0.0 0.05242618918418884 0.7643268704414368 0 1.0 0 0.0 0 0.0 0 0.0 2.0137035846710205 0.32384783029556274 -0.2839455306529999 -0.3191625773906708 0.9476912617683411 -0.0 0.059550583362579346 0.758323073387146 0 1.0 0 0.0 0 0.0 0 0.0 2.0137035846710205 0.32384783029556274 0.21605446934700012 -0.3191625773906708 0.9476912617683411 -0.0 0.4336964786052704 0.606307864189148 0 1.0 0 0.0 0 0.0 0 0.0 -0.3699455261230469 0.19507277011871338 -0.2839455306529999 0.1273842602968216 0.9918210506439209 -0.0 0.9613829851150513 0.7969457507133484 0 1.0 0 0.0 0 0.0 0 0.0 -0.3807816505432129 0.19609802961349487 -0.2839455306529999 0.062410350888967514 0.9980468153953552 -0.0 0.970216691493988 0.7989437580108643 0 1.0 0 0.0 0 0.0 0 0.0 -0.3807816505432129 0.19609802961349487 0.21605448424816132 0.062410350888967514 0.9980468153953552 -0.0 0.494787335395813 0.6400524377822876 0 1.0 0 0.0 0 0.0 0 0.0 -1.5114612579345703 -0.19098970293998718 -0.2839455306529999 0.12952055037021637 -0.9915463924407959 -0.0 0.04467529058456421 0.40644752979278564 0 1.0 0 0.0 0 0.0 0 0.0 -1.5062729120254517 -0.19022351503372192 -0.2839455306529999 0.16275520622730255 -0.9866328835487366 -0.0 0.041874319314956665 0.40737658739089966 0 1.0 0 0.0 0 0.0 0 0.0 -1.5062729120254517 -0.19022351503372192 0.21605445444583893 0.16275520622730255 -0.9866328835487366 -0.0 0.5302750468254089 0.21262699365615845 0 1.0 0 0.0 0 0.0 0 0.0 -0.4022181034088135 0.19607976078987122 -0.2839455306529999 -0.0710165724158287 0.9974669814109802 -0.0 0.9880318641662598 0.799943745136261 0 1.0 0 0.0 0 0.0 0 0.0 -0.4122591018676758 0.1949997842311859 -0.2839455306529999 -0.143803209066391 0.9895932078361511 -0.0 0.9963911771774292 0.7989473342895508 0 1.0 0 0.0 0 0.0 0 0.0 -0.4122591018676758 0.1949997842311859 0.21605448424816132 -0.143803209066391 0.9895932078361511 -0.0 1.4777190685272217 0.6398723721504211 0 1.0 0 0.0 0 0.0 0 0.0 -1.559949517250061 -0.1904035061597824 -0.2839455306529999 -0.1504257321357727 -0.9886165857315063 -0.0 0.07065242528915405 0.40583473443984985 0 1.0 0 0.0 0 0.0 0 0.0 -1.5512208938598633 -0.1914859116077423 -0.2839455306529999 -0.09726248681545258 -0.9952391386032104 -0.0 0.06601288914680481 0.40493983030319214 0 1.0 0 0.0 0 0.0 0 0.0 -1.5512208938598633 -0.1914859116077423 0.21605445444583893 -0.09726248681545258 -0.9952391386032104 -0.0 0.4930703639984131 0.21465349197387695 0 1.0 0 0.0 0 0.0 0 0.0 0.5430824756622314 0.16261997818946838 -0.2839455306529999 0.6549577116966248 0.7556383013725281 -0.0 0.9002724885940552 0.7348303198814392 0 1.0 0 0.0 0 0.0 0 0.0 0.5373761653900146 0.16726094484329224 -0.2839455306529999 0.6065859198570251 0.7949766516685486 -0.0 0.9031440019607544 0.7408447861671448 0 1.0 0 0.0 0 0.0 0 0.0 0.5373761653900146 0.16726094484329224 0.21605446934700012 0.6065859198570251 0.7949766516685486 -0.0 0.5479847192764282 0.5927214622497559 0 1.0 0 0.0 0 0.0 0 0.0 1.349912405014038 0.09486359357833862 -0.2839455306529999 1.0 0.00027466658502817154 -0.0 0.03603509068489075 0.6869707107543945 0 1.0 0 0.0 0 0.0 0 0.0 1.3499906063079834 0.09687519073486328 -0.2839455306529999 0.9968565702438354 -0.0788903459906578 -0.0 0.03606346249580383 0.6891689300537109 0 1.0 0 0.0 0 0.0 0 0.0 1.3499906063079834 0.09687519073486328 0.21605446934700012 0.9968565702438354 -0.0788903459906578 -0.0 0.44491448998451233 0.5316601991653442 0 1.0 0 0.0 0 0.0 0 0.0 2.162609338760376 0.3237164616584778 -0.2839455306529999 0.31247901916503906 0.9499191045761108 -0.0 0.9462374448776245 0.767762303352356 0 1.0 0 0.0 0 0.0 0 0.0 2.1511309146881104 0.32710111141204834 -0.2839455306529999 0.2543107271194458 0.9671010375022888 -0.0 0.9547929763793945 0.7728448510169983 0 1.0 0 0.0 0 0.0 0 0.0 2.1511309146881104 0.32710111141204834 0.21605446934700012 0.2543107271194458 0.9671010375022888 -0.0 0.5080228447914124 0.6111105680465698 0 1.0 0 0.0 0 0.0 0 0.0 0.29947471618652344 0.16351506114006042 -0.2839455306529999 -0.6484267711639404 0.7612537145614624 -0.0 0.07341375946998596 0.7397626638412476 0 1.0 0 0.0 0 0.0 0 0.0 0.2933766841888428 0.15792062878608704 -0.2839455306529999 -0.6993011236190796 0.7147740125656128 -0.0 0.0764627754688263 0.7329283952713013 0 1.0 0 0.0 0 0.0 0 0.0 0.2933766841888428 0.15792062878608704 0.21605446934700012 -0.6993011236190796 0.7147740125656128 -0.0 0.4180349111557007 0.5878974199295044 0 1.0 0 0.0 0 0.0 0 0.0 2.0137035846710205 0.32384783029556274 -0.2839455306529999 -0.3191625773906708 0.9476912617683411 -0.0 0.059550583362579346 0.758323073387146 0 1.0 0 0.0 0 0.0 0 0.0 2.003075361251831 0.3198952078819275 -0.2839455306529999 -0.3786126375198364 0.9255348443984985 -0.0 0.06600850820541382 0.7517114877700806 0 1.0 0 0.0 0 0.0 0 0.0 2.003075361251831 0.3198952078819275 0.21605446934700012 -0.3786126375198364 0.9255348443984985 -0.0 0.4282504916191101 0.6020529270172119 0 1.0 0 0.0 0 0.0 0 0.0 1.3499805927276611 0.09313416481018066 -0.2839455306529999 0.9967650175094604 0.07998901605606079 -0.0 0.035921454429626465 0.6850959062576294 0 1.0 0 0.0 0 0.0 0 0.0 1.349912405014038 0.09486359357833862 -0.2839455306529999 1.0 0.00027466658502817154 -0.0 0.03603509068489075 0.6869707107543945 0 1.0 0 0.0 0 0.0 0 0.0 1.349912405014038 0.09486359357833862 0.21605446934700012 0.999969482421875 0.00027466658502817154 -0.0 0.4447696805000305 0.5294804573059082 0 1.0 0 0.0 0 0.0 0 0.0 -0.3594350814819336 0.19336402416229248 -0.2839455306529999 0.19467757642269135 0.9808648824691772 -0.0 0.9530216455459595 0.7940287590026855 0 1.0 0 0.0 0 0.0 0 0.0 -0.3699455261230469 0.19507277011871338 -0.2839455306529999 0.1273842602968216 0.9918210506439209 -0.0 0.9613829851150513 0.7969457507133484 0 1.0 0 0.0 0 0.0 0 0.0 -0.3699455261230469 0.19507277011871338 0.21605448424816132 0.1273842602968216 0.9918210506439209 -0.0 0.5006298422813416 0.6387298703193665 0 1.0 0 0.0 0 0.0 0 0.0 -1.5167030096054077 -0.19158564507961273 -0.2839455306529999 0.09653004258871078 -0.9953001737594604 -0.0 0.04750263690948486 0.405695378780365 0 1.0 0 0.0 0 0.0 0 0.0 -1.5114612579345703 -0.19098970293998718 -0.2839455306529999 0.12952055037021637 -0.9915463924407959 -0.0 0.04467529058456421 0.40644752979278564 0 1.0 0 0.0 0 0.0 0 0.0 -1.5114612579345703 -0.19098970293998718 0.21605445444583893 0.12952055037021637 -0.9915463924407959 -0.0 0.5259150266647339 0.21188491582870483 0 1.0 0 0.0 0 0.0 0 0.0 -0.4122591018676758 0.1949997842311859 -0.2839455306529999 -0.143803209066391 0.9895932078361511 -0.0 0.9963911771774292 0.7989473342895508 0 1.0 0 0.0 0 0.0 0 0.0 -0.42206645011901855 0.19319981336593628 -0.2839455306529999 -0.21765801310539246 0.9760124683380127 -0.0 1.0044747591018677 0.7970054745674133 0 1.0 0 0.0 0 0.0 0 0.0 -0.42206645011901855 0.19319981336593628 0.21605448424816132 -0.21765801310539246 0.9760124683380127 -0.0 1.4723812341690063 0.638421893119812 0 1.0 0 0.0 0 0.0 0 0.0 -1.5512208938598633 -0.1914859116077423 -0.2839455306529999 -0.09726248681545258 -0.9952391386032104 -0.0 0.06601288914680481 0.40493983030319214 0 1.0 0 0.0 0 0.0 0 0.0 -1.5421541929244995 -0.19213536381721497 -0.2839455306529999 -0.047242652624845505 -0.9988707900047302 -0.0 0.06117549538612366 0.40448832511901855 0 1.0 0 0.0 0 0.0 0 0.0 -1.5421541929244995 -0.19213536381721497 0.21605445444583893 -0.047242652624845505 -0.9988707900047302 -0.0 0.5003594756126404 0.21280395984649658 0 1.0 0 0.0 0 0.0 0 0.0 0.5484678745269775 0.1576482057571411 -0.2839455306529999 0.7010712027549744 0.713064968585968 -0.0 0.8977089524269104 0.7285908460617065 0 1.0 0 0.0 0 0.0 0 0.0 0.5430824756622314 0.16261997818946838 -0.2839455306529999 0.6549577116966248 0.7556383013725281 -0.0 0.9002724885940552 0.7348303198814392 0 1.0 0 0.0 0 0.0 0 0.0 0.5430824756622314 0.16261997818946838 0.21605446934700012 0.6549577116966248 0.7556383013725281 -0.0 0.5509172081947327 0.588007390499115 0 1.0 0 0.0 0 0.0 0 0.0 1.3501851558685303 0.09144851565361023 -0.2839455306529999 0.9867854714393616 0.16187018156051636 -0.0 0.03572002053260803 0.6832842230796814 0 1.0 0 0.0 0 0.0 0 0.0 1.3499805927276611 0.09313416481018066 -0.2839455306529999 0.9967650175094604 0.07998901605606079 -0.0 0.035921454429626465 0.6850959062576294 0 1.0 0 0.0 0 0.0 0 0.0 1.3499805927276611 0.09313416481018066 0.21605446934700012 0.9967650175094604 0.07998901605606079 -0.0 0.44472062587738037 0.5275986194610596 0 1.0 0 0.0 0 0.0 0 0.0 2.1736061573028564 0.3197163939476013 -0.2839455306529999 0.3720511496067047 0.9281899333000183 -0.0 0.9383829832077026 0.7618219256401062 0 1.0 0 0.0 0 0.0 0 0.0 2.162609338760376 0.3237164616584778 -0.2839455306529999 0.31247901916503906 0.9499191045761108 -0.0 0.9462374448776245 0.767762303352356 0 1.0 0 0.0 0 0.0 0 0.0 2.162609338760376 0.3237164616584778 0.21605446934700012 0.31247901916503906 0.9499191045761108 -0.0 0.5142971873283386 0.6073771715164185 0 1.0 0 0.0 0 0.0 0 0.0 0.2933766841888428 0.15792062878608704 -0.2839455306529999 -0.6993011236190796 0.7147740125656128 -0.0 0.0764627754688263 0.7329283952713013 0 1.0 0 0.0 0 0.0 0 0.0 0.287808895111084 0.15211209654808044 -0.2839455306529999 -0.7448957562446594 0.6671651601791382 -0.0 0.07909229397773743 0.7260230779647827 0 1.0 0 0.0 0 0.0 0 0.0 0.287808895111084 0.15211209654808044 0.21605446934700012 -0.7448957562446594 0.6671651601791382 -0.0 0.41507312655448914 0.5823611617088318 0 1.0 0 0.0 0 0.0 0 0.0 2.003075361251831 0.3198952078819275 -0.2839455306529999 -0.3786126375198364 0.9255348443984985 -0.0 0.06600850820541382 0.7517114877700806 0 1.0 0 0.0 0 0.0 0 0.0 1.992877721786499 0.3153344988822937 -0.2839455306529999 -0.4382152855396271 0.8988311290740967 -0.0 0.07183364033699036 0.7445515394210815 0 1.0 0 0.0 0 0.0 0 0.0 1.992877721786499 0.3153344988822937 0.21605446934700012 -0.4382152855396271 0.8988311290740967 -0.0 0.42307525873184204 0.5972629189491272 0 1.0 0 0.0 0 0.0 0 0.0 1.3505256175994873 0.08980664610862732 -0.2839455306529999 0.9695730209350586 0.24469740688800812 -0.0 0.035431504249572754 0.6815354228019714 0 1.0 0 0.0 0 0.0 0 0.0 1.3501851558685303 0.09144851565361023 -0.2839455306529999 0.9867854714393616 0.16187018156051636 -0.0 0.03572002053260803 0.6832842230796814 0 1.0 0 0.0 0 0.0 0 0.0 1.3501851558685303 0.09144851565361023 0.21605446934700012 0.9867854714393616 0.16187018156051636 -0.0 0.4447501301765442 0.5257568359375 0 1.0 0 0.0 0 0.0 0 0.0 -0.34925079345703125 0.19097179174423218 -0.2839455306529999 0.2634052634239197 0.964659571647644 -0.0 0.945175290107727 0.7902482748031616 0 1.0 0 0.0 0 0.0 0 0.0 -0.3594350814819336 0.19336402416229248 -0.2839455306529999 0.19467757642269135 0.9808648824691772 -0.0 0.9530216455459595 0.7940287590026855 0 1.0 0 0.0 0 0.0 0 0.0 -0.3594350814819336 0.19336402416229248 0.21605448424816132 0.19467757642269135 0.9808648824691772 -0.0 0.5062727332115173 0.636748731136322 0 1.0 0 0.0 0 0.0 0 0.0 -1.5219982862472534 -0.19201131165027618 -0.2839455306529999 0.0639057606458664 -0.9979247450828552 -0.0 0.05035579204559326 0.40511953830718994 0 1.0 0 0.0 0 0.0 0 0.0 -1.5167030096054077 -0.19158564507961273 -0.2839455306529999 0.09653004258871078 -0.9953001737594604 -0.0 0.04750263690948486 0.405695378780365 0 1.0 0 0.0 0 0.0 0 0.0 -1.5167030096054077 -0.19158564507961273 0.21605445444583893 0.09653004258871078 -0.9953001737594604 -0.0 0.5215050578117371 0.21141117811203003 0 1.0 0 0.0 0 0.0 0 0.0 1.2587590217590332 0.09020313620567322 -0.2839455306529999 -0.9976806044578552 0.06784264743328094 -0.0 0.08753597736358643 0.6604448556900024 0 1.0 0 0.0 0 0.0 0 0.0 1.2584939002990723 0.08225411176681519 -0.2839455306529999 -0.999969482421875 -0.00079348124563694 -0.0 0.08704417943954468 0.6525783538818359 0 1.0 0 0.0 0 0.0 0 0.0 1.2584939002990723 0.08225411176681519 0.21605446934700012 -0.999969482421875 -0.00079348124563694 -0.0 0.39806902408599854 0.5157207250595093 0 1.0 0 0.0 0 0.0 0 0.0 -0.42206645011901855 0.19319981336593628 -0.2839455306529999 -0.21765801310539246 0.9760124683380127 -0.0 0.004474729299545288 0.7970054745674133 0 1.0 0 0.0 0 0.0 0 0.0 -0.4316401481628418 0.1906798779964447 -0.2839455306529999 -0.29132968187332153 0.9566026926040649 -0.0 0.012227356433868408 0.7941473126411438 0 1.0 0 0.0 0 0.0 0 0.0 -0.4316401481628418 0.1906798779964447 0.21605448424816132 -0.29132968187332153 0.9566026926040649 -0.0 0.46716344356536865 0.6362869739532471 0 1.0 0 0.0 0 0.0 0 0.0 0.5535321235656738 0.15234562754631042 -0.2839455306529999 0.7444074749946594 0.6676839590072632 -0.0 0.8954370021820068 0.7221288681030273 0 1.0 0 0.0 0 0.0 0 0.0 0.5484678745269775 0.1576482057571411 -0.2839455306529999 0.7010712027549744 0.713064968585968 -0.0 0.8977089524269104 0.7285908460617065 0 1.0 0 0.0 0 0.0 0 0.0 0.5484678745269775 0.1576482057571411 0.21605446934700012 0.7010712027549744 0.713064968585968 -0.0 0.5536915063858032 0.5830111503601074 0 1.0 0 0.0 0 0.0 0 0.0 -1.5273470878601074 -0.19226670265197754 -0.2839455306529999 0.0317087322473526 -0.999481201171875 -0.0 0.05323415994644165 0.40471965074539185 0 1.0 0 0.0 0 0.0 0 0.0 -1.5219982862472534 -0.19201131165027618 -0.2839455306529999 0.0639057606458664 -0.9979247450828552 -0.0 0.05035579204559326 0.40511953830718994 0 1.0 0 0.0 0 0.0 0 0.0 -1.5219982862472534 -0.19201131165027618 0.21605445444583893 0.0639057606458664 -0.9979247450828552 -0.0 0.5170558094978333 0.2112075686454773 0 1.0 0 0.0 0 0.0 0 0.0 2.1841213703155518 0.3151009678840637 -0.2839455306529999 0.43232521414756775 0.9016999006271362 -0.0 0.9312289953231812 0.7551016211509705 0 1.0 0 0.0 0 0.0 0 0.0 2.1736061573028564 0.3197163939476013 -0.2839455306529999 0.3720511496067047 0.9281899333000183 -0.0 0.9383829832077026 0.7618219256401062 0 1.0 0 0.0 0 0.0 0 0.0 2.1736061573028564 0.3197163939476013 0.21605446934700012 0.3720511496067047 0.9281899333000183 -0.0 0.5202778577804565 0.602996826171875 0 1.0 0 0.0 0 0.0 0 0.0 -1.5421541929244995 -0.19213536381721497 -0.2839455306529999 -0.047242652624845505 -0.9988707900047302 -0.0 0.06117549538612366 0.40448832511901855 0 1.0 0 0.0 0 0.0 0 0.0 -1.5327494144439697 -0.19235184788703918 -0.2839455306529999 -0.0036011841148138046 -0.999969482421875 -0.0 0.05613693594932556 0.4044952392578125 0 1.0 0 0.0 0 0.0 0 0.0 -1.5327494144439697 -0.19235184788703918 0.21605445444583893 -0.0036011841148138046 -0.999969482421875 -0.0 0.5080843567848206 0.21161502599716187 0 1.0 0 0.0 0 0.0 0 0.0 1.992877721786499 0.3153344988822937 -0.2839455306529999 -0.4382152855396271 0.8988311290740967 -0.0 0.07183364033699036 0.7445515394210815 0 1.0 0 0.0 0 0.0 0 0.0 1.9831106662750244 0.3101657032966614 -0.2839455306529999 -0.49723806977272034 0.8676106929779053 -0.0 0.07706430554389954 0.7368909120559692 0 1.0 0 0.0 0 0.0 0 0.0 1.9831106662750244 0.3101657032966614 0.21605446934700012 -0.49723806977272034 0.8676106929779053 -0.0 0.4181593060493469 0.591951847076416 0 1.0 0 0.0 0 0.0 0 0.0 0.5582752227783203 0.14671224355697632 -0.2839455306529999 0.7844783067703247 0.6201055645942688 -0.0 0.8934412002563477 0.7154441475868225 0 1.0 0 0.0 0 0.0 0 0.0 0.5535321235656738 0.15234562754631042 -0.2839455306529999 0.7444074749946594 0.6676839590072632 -0.0 0.8954370021820068 0.7221288681030273 0 1.0 0 0.0 0 0.0 0 0.0 0.5535321235656738 0.15234562754631042 0.21605446934700012 0.7444074749946594 0.6676839590072632 -0.0 0.5563127994537354 0.5777288675308228 0 1.0 0 0.0 0 0.0 0 0.0 1.3510024547576904 0.08820855617523193 -0.2839455306529999 0.9451277256011963 0.3266090750694275 -0.0 0.03505560755729675 0.6798492670059204 0 1.0 0 0.0 0 0.0 0 0.0 1.3505256175994873 0.08980664610862732 -0.2839455306529999 0.9695730209350586 0.24469740688800812 -0.0 0.035431504249572754 0.6815354228019714 0 1.0 0 0.0 0 0.0 0 0.0 1.3505256175994873 0.08980664610862732 0.21605446934700012 0.9695730209350586 0.24469740688800812 -0.0 0.4448583722114563 0.5239549279212952 0 1.0 0 0.0 0 0.0 0 0.0 -0.33939218521118164 0.18789604306221008 -0.2839455306529999 0.3325602114200592 0.9430524706840515 -0.0 0.9378687143325806 0.7856563329696655 0 1.0 0 0.0 0 0.0 0 0.0 -0.34925079345703125 0.19097179174423218 -0.2839455306529999 0.2634052634239197 0.964659571647644 -0.0 0.945175290107727 0.7902482748031616 0 1.0 0 0.0 0 0.0 0 0.0 -0.34925079345703125 0.19097179174423218 0.21605448424816132 0.2634052634239197 0.964659571647644 -0.0 0.5117148160934448 0.6341213583946228 0 1.0 0 0.0 0 0.0 0 0.0 -1.5327494144439697 -0.19235184788703918 -0.2839455306529999 -0.0036011841148138046 -0.999969482421875 -0.0 0.05613693594932556 0.4044952392578125 0 1.0 0 0.0 0 0.0 0 0.0 -1.5273470878601074 -0.19226670265197754 -0.2839455306529999 0.0317087322473526 -0.999481201171875 -0.0 0.05323415994644165 0.40471965074539185 0 1.0 0 0.0 0 0.0 0 0.0 -1.5273470878601074 -0.19226670265197754 0.21605445444583893 0.0317087322473526 -0.999481201171875 -0.0 0.5125783681869507 0.21127527952194214 0 1.0 0 0.0 0 0.0 0 0.0 0.287808895111084 0.15211209654808044 -0.2839455306529999 -0.7448957562446594 0.6671651601791382 -0.0 0.07909229397773743 0.7260230779647827 0 1.0 0 0.0 0 0.0 0 0.0 0.28277134895324707 0.14608952403068542 -0.2839455306529999 -0.7892391681671143 0.6140323877334595 -0.0 0.08133035898208618 0.7190533876419067 0 1.0 0 0.0 0 0.0 0 0.0 0.28277134895324707 0.14608952403068542 0.21605446934700012 -0.7892391681671143 0.6140323877334595 -0.0 0.41235995292663574 0.5766456127166748 0 1.0 0 0.0 0 0.0 0 0.0 -0.4316401481628418 0.1906798779964447 -0.2839455306529999 -0.29132968187332153 0.9566026926040649 -0.0 0.012227356433868408 0.7941473126411438 0 1.0 0 0.0 0 0.0 0 0.0 -0.4409806728363037 0.1874399483203888 -0.2839455306529999 -0.3634754419326782 0.9315775036811829 -0.0 0.019606024026870728 0.7904014587402344 0 1.0 0 0.0 0 0.0 0 0.0 -0.4409806728363037 0.1874399483203888 0.21605448424816132 -0.3634754419326782 0.9315775036811829 -0.0 0.46206551790237427 0.6334686875343323 0 1.0 0 0.0 0 0.0 0 0.0 -2.146409511566162 0.32953959703445435 -0.2839455306529999 -1.0 0.0 -0.0 0.2695856988430023 0.7537210583686829 0 1.0 0 0.0 0 0.0 0 0.0 -2.146409511566162 -0.18394553661346436 -0.2839455306529999 -1.0 0.0 -0.0 0.14069145917892456 0.3820388913154602 0 1.0 0 0.0 0 0.0 0 0.0 -2.146409511566162 -0.18394553661346436 0.21605445444583893 -1.0 0.0 -0.0 0.45949652791023254 0.11472934484481812 0 1.0 0 0.0 0 0.0 0 0.0 1.3516151905059814 0.08665427565574646 -0.2839455306529999 0.9139072895050049 0.4058656692504883 -0.0 0.034592777490615845 0.6782253980636597 0 1.0 0 0.0 0 0.0 0 0.0 1.3510024547576904 0.08820855617523193 -0.2839455306529999 0.9451277256011963 0.3266090750694275 -0.0 0.03505560755729675 0.6798492670059204 0 1.0 0 0.0 0 0.0 0 0.0 1.3510024547576904 0.08820855617523193 0.21605446934700012 0.9451277256011963 0.3266090750694275 -0.0 0.44504600763320923 0.5221929550170898 0 1.0 0 0.0 0 0.0 0 0.0 2.194154977798462 0.3098701238632202 -0.2839455306529999 0.4924161434173584 0.8703268766403198 -0.0 0.9247593283653259 0.7476687431335449 0 1.0 0 0.0 0 0.0 0 0.0 2.1841213703155518 0.3151009678840637 -0.2839455306529999 0.43232521414756775 0.9016999006271362 -0.0 0.9312289953231812 0.7551016211509705 0 1.0 0 0.0 0 0.0 0 0.0 2.1841213703155518 0.3151009678840637 0.21605446934700012 0.43232521414756775 0.9016999006271362 -0.0 0.5259664058685303 0.5979864597320557 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 0.32953959703445435 -0.2839455306529999 0.0 1.0 -0.0 0.2427637279033661 0.8259592056274414 0 1.0 0 0.0 0 0.0 0 0.0 -2.146409511566162 0.32953959703445435 -0.2839455306529999 0.0 1.0 -0.0 0.2695856988430023 0.7537210583686829 0 1.0 0 0.0 0 0.0 0 0.0 -2.146409511566162 0.32953959703445435 0.21605446934700012 0.0 1.0 -0.0 0.48620134592056274 0.5522602796554565 0 1.0 0 0.0 0 0.0 0 0.0 1.9831106662750244 0.3101657032966614 -0.2839455306529999 -0.49723806977272034 0.8676106929779053 -0.0 0.07706430554389954 0.7368909120559692 0 1.0 0 0.0 0 0.0 0 0.0 1.9737741947174072 0.30438879132270813 -0.2839455306529999 -0.5547044277191162 0.8320261240005493 -0.0 0.0817406177520752 0.728766679763794 0 1.0 0 0.0 0 0.0 0 0.0 1.9737741947174072 0.30438879132270813 0.2160544991493225 -0.5547044277191162 0.8320261240005493 -0.0 0.41349029541015625 0.5861303806304932 0 1.0 0 0.0 0 0.0 0 0.0 0.562697172164917 0.1407480537891388 -0.2839455306529999 0.8209478855133057 0.5709707736968994 -0.0 0.891707181930542 0.7085340023040771 0 1.0 0 0.0 0 0.0 0 0.0 0.5582752227783203 0.14671224355697632 -0.2839455306529999 0.7844783067703247 0.6201055645942688 -0.0 0.8934412002563477 0.7154441475868225 0 1.0 0 0.0 0 0.0 0 0.0 0.5582752227783203 0.14671224355697632 0.21605446934700012 0.7844783067703247 0.6201055645942688 -0.0 0.5587862730026245 0.5721554756164551 0 1.0 0 0.0 0 0.0 0 0.0 1.3523643016815186 0.08514377474784851 -0.2839455306529999 0.8767052292823792 0.48097169399261475 -0.0 0.034042567014694214 0.6766630411148071 0 1.0 0 0.0 0 0.0 0 0.0 1.3516151905059814 0.08665427565574646 -0.2839455306529999 0.9139072895050049 0.4058656692504883 -0.0 0.034592777490615845 0.6782253980636597 0 1.0 0 0.0 0 0.0 0 0.0 1.3516151905059814 0.08665427565574646 0.21605446934700012 0.9139072895050049 0.4058656692504883 -0.0 0.44531333446502686 0.5204707384109497 0 1.0 0 0.0 0 0.0 0 0.0 -0.32985973358154297 0.18413680791854858 -0.2839455306529999 0.40098270773887634 0.9160435795783997 -0.0 0.9311127662658691 0.7802994251251221 0 1.0 0 0.0 0 0.0 0 0.0 -0.33939218521118164 0.18789604306221008 -0.2839455306529999 0.3325602114200592 0.9430524706840515 -0.0 0.9378687143325806 0.7856563329696655 0 1.0 0 0.0 0 0.0 0 0.0 -0.33939218521118164 0.18789604306221008 0.21605448424816132 0.3325602114200592 0.9430524706840515 -0.0 0.5169574022293091 0.6308568716049194 0 1.0 0 0.0 0 0.0 0 0.0 0.28277134895324707 0.14608952403068542 -0.2839455306529999 -0.7892391681671143 0.6140323877334595 -0.0 0.08133035898208618 0.7190533876419067 0 1.0 0 0.0 0 0.0 0 0.0 0.27826404571533203 0.13985291123390198 -0.2839455306529999 -0.8313852548599243 0.5556504726409912 -0.0 0.08320179581642151 0.7120208144187927 0 1.0 0 0.0 0 0.0 0 0.0 0.27826404571533203 0.13985291123390198 0.21605446934700012 -0.8313852548599243 0.5556504726409912 -0.0 0.4098873734474182 0.5707465410232544 0 1.0 0 0.0 0 0.0 0 0.0 -0.4409806728363037 0.1874399483203888 -0.2839455306529999 -0.3634754419326782 0.9315775036811829 -0.0 0.019606024026870728 0.7904014587402344 0 1.0 0 0.0 0 0.0 0 0.0 -0.4500875473022461 0.18348002433776855 -0.2839455306529999 -0.43293556571006775 0.9013947248458862 -0.0 0.02657860517501831 0.7857947945594788 0 1.0 0 0.0 0 0.0 0 0.0 -0.4500875473022461 0.18348002433776855 0.21605448424816132 -0.43293556571006775 0.9013947248458862 -0.0 0.4570869505405426 0.6299653649330139 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 0.10151857137680054 -0.2839455306529999 1.0 0.0 -0.0 0.1574673056602478 0.6584711074829102 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 0.32953959703445435 -0.2839455306529999 1.0 0.0 -0.0 0.2427637279033661 0.8259592056274414 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 0.32953959703445435 0.21605446934700012 1.0 0.0 -0.0 0.5239897966384888 0.5807267427444458 0 1.0 0 0.0 0 0.0 0 0.0 1.3532497882843018 0.08367705345153809 -0.2839455306529999 0.8348032832145691 0.5504928827285767 -0.0 0.0334048867225647 0.6751617789268494 0 1.0 0 0.0 0 0.0 0 0.0 1.3523643016815186 0.08514377474784851 -0.2839455306529999 0.8767052292823792 0.48097169399261475 -0.0 0.034042567014694214 0.6766630411148071 0 1.0 0 0.0 0 0.0 0 0.0 1.3523643016815186 0.08514377474784851 0.21605446934700012 0.8767052292823792 0.48097169399261475 -0.0 0.44566109776496887 0.5187883377075195 0 1.0 0 0.0 0 0.0 0 0.0 -1.8332748413085938 0.32953959703445435 -0.2839455306529999 -0.7364421486854553 0.6764732599258423 -0.0 1.0224628448486328 0.9180190563201904 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 0.10151857137680054 -0.2839455306529999 -0.7364421486854553 0.6764732599258423 -0.0 0.1574673056602478 0.6584711074829102 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 0.10151857137680054 0.21605446934700012 -0.7364421486854553 0.6764732599258423 -0.0 0.5355800986289978 0.37752383947372437 0 1.0 0 0.0 0 0.0 0 0.0 2.203706979751587 0.3040238916873932 -0.2839455306529999 0.5514389276504517 0.8341929316520691 -0.0 0.9189475774765015 0.7395798563957214 0 1.0 0 0.0 0 0.0 0 0.0 2.194154977798462 0.3098701238632202 -0.2839455306529999 0.4924161434173584 0.8703268766403198 -0.0 0.9247593283653259 0.7476687431335449 0 1.0 0 0.0 0 0.0 0 0.0 2.194154977798462 0.3098701238632202 0.21605446934700012 0.4924161434173584 0.8703268766403198 -0.0 0.5313672423362732 0.592359721660614 0 1.0 0 0.0 0 0.0 0 0.0 1.9737741947174072 0.30438879132270813 -0.2839455306529999 -0.5547044277191162 0.8320261240005493 -0.0 0.0817406177520752 0.728766679763794 0 1.0 0 0.0 0 0.0 0 0.0 1.9648678302764893 0.29800379276275635 -0.2839455306529999 -0.6098513603210449 0.7924741506576538 -0.0 0.08590298891067505 0.7202064990997314 0 1.0 0 0.0 0 0.0 0 0.0 1.9648678302764893 0.29800379276275635 0.21605446934700012 -0.6098513603210449 0.7924741506576538 -0.0 0.40905532240867615 0.5798054933547974 0 1.0 0 0.0 0 0.0 0 0.0 0.566798210144043 0.13445305824279785 -0.2839455306529999 0.8536027073860168 0.520889937877655 -0.0 0.8902215957641602 0.7013935446739197 0 1.0 0 0.0 0 0.0 0 0.0 0.562697172164917 0.1407480537891388 -0.2839455306529999 0.8209478855133057 0.5709707736968994 -0.0 0.891707181930542 0.7085340023040771 0 1.0 0 0.0 0 0.0 0 0.0 0.562697172164917 0.1407480537891388 0.21605446934700012 0.8209478855133057 0.5709707736968994 -0.0 0.5611169934272766 0.5662843585014343 0 1.0 0 0.0 0 0.0 0 0.0 1.354271650314331 0.08225411176681519 -0.2839455306529999 0.7896358966827393 0.6135441064834595 -0.0 0.032679468393325806 0.6737208366394043 0 1.0 0 0.0 0 0.0 0 0.0 1.3532497882843018 0.08367705345153809 -0.2839455306529999 0.8348032832145691 0.5504928827285767 -0.0 0.0334048867225647 0.6751617789268494 0 1.0 0 0.0 0 0.0 0 0.0 1.3532497882843018 0.08367705345153809 0.21605446934700012 0.8348032832145691 0.5504928827285767 -0.0 0.4460899531841278 0.5171455144882202 0 1.0 0 0.0 0 0.0 0 0.0 -0.32065320014953613 0.1796940565109253 -0.2839455306529999 0.4675740897655487 0.8839381337165833 -0.0 0.9249056577682495 0.7742172479629517 0 1.0 0 0.0 0 0.0 0 0.0 -0.32985973358154297 0.18413680791854858 -0.2839455306529999 0.40098270773887634 0.9160435795783997 -0.0 0.9311127662658691 0.7802994251251221 0 1.0 0 0.0 0 0.0 0 0.0 -0.32985973358154297 0.18413680791854858 0.21605448424816132 0.40098270773887634 0.9160435795783997 -0.0 0.5220027565956116 0.6269617676734924 0 1.0 0 0.0 0 0.0 0 0.0 -1.6938703060150146 0.32953959703445435 -0.2839455306529999 0.0 0.999969482421875 -0.0 0.9051481485366821 0.8624878525733948 0 1.0 0 0.0 0 0.0 0 0.0 -1.8332748413085938 0.32953959703445435 -0.2839455306529999 0.0 1.0 -0.0 1.0224628448486328 0.9180190563201904 0 1.0 0 0.0 0 0.0 0 0.0 -1.8332748413085938 0.32953959703445435 0.21605446934700012 0.0 0.999969482421875 -0.0 0.6141318082809448 0.6253429651260376 0 1.0 0 0.0 0 0.0 0 0.0 0.27826404571533203 0.13985291123390198 -0.2839455306529999 -0.8313852548599243 0.5556504726409912 -0.0 0.08320179581642151 0.7120208144187927 0 1.0 0 0.0 0 0.0 0 0.0 0.27428698539733887 0.13340222835540771 -0.2839455306529999 -0.8703268766403198 0.4924161434173584 -0.0 0.08472853899002075 0.7049230933189392 0 1.0 0 0.0 0 0.0 0 0.0 0.27428698539733887 0.13340222835540771 0.21605446934700012 -0.8703268766403198 0.4924161434173584 -0.0 0.40764808654785156 0.5646573305130005 0 1.0 0 0.0 0 0.0 0 0.0 1.2584939002990723 0.08225411176681519 -0.2839455306529999 -0.999969482421875 -0.00079348124563694 -0.0 0.08704417943954468 0.6525783538818359 0 1.0 0 0.0 0 0.0 0 0.0 1.258800745010376 0.0734853744506836 -0.2839455306529999 -0.9974059462547302 -0.0716574639081955 -0.0 0.08622920513153076 0.6439353227615356 0 1.0 0 0.0 0 0.0 0 0.0 1.258800745010376 0.0734853744506836 0.21605446934700012 -0.9974059462547302 -0.0716574639081955 -0.0 0.3975094258785248 0.5070275068283081 0 1.0 0 0.0 0 0.0 0 0.0 -0.4500875473022461 0.18348002433776855 -0.2839455306529999 -0.43293556571006775 0.9013947248458862 -0.0 0.02657860517501831 0.7857947945594788 0 1.0 0 0.0 0 0.0 0 0.0 -0.45896077156066895 0.17880013585090637 -0.2839455306529999 -0.4985809028148651 0.8668172359466553 -0.0 0.03312462568283081 0.7803508043289185 0 1.0 0 0.0 0 0.0 0 0.0 -0.45896077156066895 0.17880013585090637 0.21605448424816132 -0.4985809028148651 0.8668172359466553 -0.0 0.45222604274749756 0.6257724165916443 0 1.0 0 0.0 0 0.0 0 0.0 -1.8872151374816895 0.1295395791530609 -0.2839455306529999 0.7189550399780273 -0.69502854347229 -0.0 1.0517487525939941 0.751492440700531 0 1.0 0 0.0 0 0.0 0 0.0 -1.6938703060150146 0.32953959703445435 -0.2839455306529999 0.7189550399780273 -0.69502854347229 -0.0 0.9051481485366821 0.8624878525733948 0 1.0 0 0.0 0 0.0 0 0.0 -1.6938703060150146 0.32953959703445435 0.21605446934700012 0.7189550399780273 -0.69502854347229 -0.0 0.6648842692375183 0.6340523362159729 0 1.0 0 0.0 0 0.0 0 0.0 2.2127773761749268 0.29756227135658264 -0.2839455306529999 0.6084475517272949 0.7935727834701538 -0.0 0.9137606024742126 0.7308803200721741 0 1.0 0 0.0 0 0.0 0 0.0 2.203706979751587 0.3040238916873932 -0.2839455306529999 0.5514389276504517 0.8341929316520691 -0.0 0.9189475774765015 0.7395798563957214 0 1.0 0 0.0 0 0.0 0 0.0 2.203706979751587 0.3040238916873932 0.2160544991493225 0.5514389276504517 0.8341929316520691 -0.0 0.5364871025085449 0.5861265063285828 0 1.0 0 0.0 0 0.0 0 0.0 1.9648678302764893 0.29800379276275635 -0.2839455306529999 -0.6098513603210449 0.7924741506576538 -0.0 0.08590298891067505 0.7202064990997314 0 1.0 0 0.0 0 0.0 0 0.0 1.9563920497894287 0.29101070761680603 -0.2839455306529999 -0.6600238084793091 0.7512131333351135 -0.0 0.08958971500396729 0.7112299203872681 0 1.0 0 0.0 0 0.0 0 0.0 1.9563920497894287 0.29101070761680603 0.2160544991493225 -0.6600238084793091 0.7512131333351135 -0.0 0.4048417806625366 0.572981595993042 0 1.0 0 0.0 0 0.0 0 0.0 0.5705780982971191 0.1278272569179535 -0.2839455306529999 0.8823511600494385 0.47053438425064087 -0.0 0.8889724016189575 0.6940163373947144 0 1.0 0 0.0 0 0.0 0 0.0 0.566798210144043 0.13445305824279785 -0.2839455306529999 0.8536027073860168 0.520889937877655 -0.0 0.8902215957641602 0.7013935446739197 0 1.0 0 0.0 0 0.0 0 0.0 0.566798210144043 0.13445305824279785 0.21605446934700012 0.8536027073860168 0.520889937877655 -0.0 0.5633097290992737 0.560107946395874 0 1.0 0 0.0 0 0.0 0 0.0 1.3554294109344482 0.08087494969367981 -0.2839455306529999 0.7424542903900146 0.669850766658783 -0.0 0.0318661630153656 0.6723392009735107 0 1.0 0 0.0 0 0.0 0 0.0 1.354271650314331 0.08225411176681519 -0.2839455306529999 0.7896358966827393 0.6135441064834595 -0.0 0.032679468393325806 0.6737208366394043 0 1.0 0 0.0 0 0.0 0 0.0 1.354271650314331 0.08225411176681519 0.21605446934700012 0.7896358966827393 0.6135441064834595 -0.0 0.44660046696662903 0.5155422687530518 0 1.0 0 0.0 0 0.0 0 0.0 -0.31177258491516113 0.1745678186416626 -0.2839455306529999 0.5312051773071289 0.8472243547439575 -0.0 0.9192360639572144 0.7674424052238464 0 1.0 0 0.0 0 0.0 0 0.0 -0.32065320014953613 0.1796940565109253 -0.2839455306529999 0.4675740897655487 0.8839381337165833 -0.0 0.9249056577682495 0.7742172479629517 0 1.0 0 0.0 0 0.0 0 0.0 -0.32065320014953613 0.1796940565109253 0.21605448424816132 0.4675740897655487 0.8839381337165833 -0.0 0.5268549919128418 0.6224387288093567 0 1.0 0 0.0 0 0.0 0 0.0 0.27428698539733887 0.13340222835540771 -0.2839455306529999 -0.8703268766403198 0.4924161434173584 -0.0 0.08472853899002075 0.7049230933189392 0 1.0 0 0.0 0 0.0 0 0.0 0.2708404064178467 0.12673750519752502 -0.2839455306529999 -0.905117928981781 0.42512282729148865 -0.0 0.08592939376831055 0.6977543830871582 0 1.0 0 0.0 0 0.0 0 0.0 0.2708404064178467 0.12673750519752502 0.21605446934700012 -0.905117928981781 0.42512282729148865 -0.0 0.40563562512397766 0.5583692789077759 0 1.0 0 0.0 0 0.0 0 0.0 -0.45896077156066895 0.17880013585090637 -0.2839455306529999 -0.4985809028148651 0.8668172359466553 -0.0 0.03312462568283081 0.7803508043289185 0 1.0 0 0.0 0 0.0 0 0.0 -0.46760058403015137 0.17340025305747986 -0.2839455306529999 -0.5596179366111755 0.8287301063537598 -0.0 0.039234012365341187 0.7740890979766846 0 1.0 0 0.0 0 0.0 0 0.0 -0.46760058403015137 0.17340025305747986 0.21605448424816132 -0.5596179366111755 0.8287301063537598 -0.0 0.44748032093048096 0.6208823919296265 0 1.0 0 0.0 0 0.0 0 0.0 1.3567235469818115 0.07953956723213196 -0.2839455306529999 0.694570779800415 0.7194128036499023 -0.0 0.030964285135269165 0.6710160970687866 0 1.0 0 0.0 0 0.0 0 0.0 1.3554294109344482 0.08087494969367981 -0.2839455306529999 0.7424542903900146 0.669850766658783 -0.0 0.0318661630153656 0.6723392009735107 0 1.0 0 0.0 0 0.0 0 0.0 1.3554294109344482 0.08087494969367981 0.21605446934700012 0.7424542903900146 0.669850766658783 -0.0 0.44719308614730835 0.5139785408973694 0 1.0 0 0.0 0 0.0 0 0.0 -1.683362364768982 -0.18394553661346436 -0.2839455306529999 0.8383129239082336 0.5451521277427673 -0.0 0.9581927061080933 0.48435938358306885 0 1.0 0 0.0 0 0.0 0 0.0 -1.8872151374816895 0.1295395791530609 -0.2839455306529999 0.8383129239082336 0.5451521277427673 -0.0 1.0517487525939941 0.751492440700531 0 1.0 0 0.0 0 0.0 0 0.0 -1.8872151374816895 0.1295395791530609 0.21605446934700012 0.8383129239082336 0.5451521277427673 -0.0 0.6251898407936096 0.4582964777946472 0 1.0 0 0.0 0 0.0 0 0.0 2.2213656902313232 0.29048529267311096 -0.2839455306529999 0.6599017381668091 0.7513352036476135 -0.0 0.9091619849205017 0.7216052412986755 0 1.0 0 0.0 0 0.0 0 0.0 2.2127773761749268 0.29756227135658264 -0.2839455306529999 0.6084475517272949 0.7935727834701538 -0.0 0.9137606024742126 0.7308803200721741 0 1.0 0 0.0 0 0.0 0 0.0 2.2127773761749268 0.29756227135658264 0.2160544991493225 0.6084475517272949 0.7935727834701538 -0.0 0.5413342714309692 0.5792933702468872 0 1.0 0 0.0 0 0.0 0 0.0 1.9563920497894287 0.29101070761680603 -0.2839455306529999 -0.6600238084793091 0.7512131333351135 -0.0 0.08958971500396729 0.7112299203872681 0 1.0 0 0.0 0 0.0 0 0.0 1.948448896408081 0.2835822105407715 -0.2839455306529999 -0.7042756676673889 0.7098910212516785 -0.0 0.09280359745025635 0.7020356059074402 0 1.0 0 0.0 0 0.0 0 0.0 1.948448896408081 0.2835822105407715 0.21605446934700012 -0.7042756676673889 0.7098910212516785 -0.0 0.40089285373687744 0.5658196806907654 0 1.0 0 0.0 0 0.0 0 0.0 1.3581535816192627 0.07824796438217163 -0.2839455306529999 0.6469618678092957 0.7625049352645874 -0.0 0.029973596334457397 0.6697502732276917 0 1.0 0 0.0 0 0.0 0 0.0 1.3567235469818115 0.07953956723213196 -0.2839455306529999 0.694570779800415 0.7194128036499023 -0.0 0.030964285135269165 0.6710160970687866 0 1.0 0 0.0 0 0.0 0 0.0 1.3567235469818115 0.07953956723213196 0.21605446934700012 0.694570779800415 0.7194128036499023 -0.0 0.4478687345981598 0.5124543905258179 0 1.0 0 0.0 0 0.0 0 0.0 -0.30321788787841797 0.1687580645084381 -0.2839455306529999 0.5909909605979919 0.8066347241401672 -0.0 0.9140862226486206 0.7599997520446777 0 1.0 0 0.0 0 0.0 0 0.0 -0.31177258491516113 0.1745678186416626 -0.2839455306529999 0.5312051773071289 0.8472243547439575 -0.0 0.9192360639572144 0.7674424052238464 0 1.0 0 0.0 0 0.0 0 0.0 -0.31177258491516113 0.1745678186416626 0.21605448424816132 0.5312051773071289 0.8472243547439575 -0.0 0.5315191745758057 0.6172875761985779 0 1.0 0 0.0 0 0.0 0 0.0 0.4196147918701172 0.12568670511245728 -0.2839455306529999 -0.00198370311409235 -0.999969482421875 -0.0 0.9885497689247131 0.7259107828140259 0 1.0 0 0.0 0 0.0 0 0.0 0.4246535301208496 0.1256064474582672 -0.2839455306529999 -0.03277687728404999 -0.99945068359375 -0.0 0.9847489595413208 0.7257236838340759 0 1.0 0 0.0 0 0.0 0 0.0 0.4246535301208496 0.1256064474582672 0.21605446934700012 -0.03277687728404999 -0.99945068359375 -0.0 1.4873418807983398 0.5618767738342285 0 1.0 0 0.0 0 0.0 0 0.0 -0.46760058403015137 0.17340025305747986 -0.2839455306529999 -0.5596179366111755 0.8287301063537598 -0.0 0.039234012365341187 0.7740890979766846 0 1.0 0 0.0 0 0.0 0 0.0 -0.47600698471069336 0.167280375957489 -0.2839455306529999 -0.6155278086662292 0.7881100177764893 -0.0 0.044904887676239014 0.7670250535011292 0 1.0 0 0.0 0 0.0 0 0.0 -0.47600698471069336 0.167280375957489 0.21605446934700012 -0.6155278086662292 0.7881100177764893 -0.0 0.44284671545028687 0.6152850389480591 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 -0.02877916395664215 -0.2839455306529999 0.7143467664718628 -0.6997588872909546 -0.0 0.12446880340576172 0.5184248089790344 0 1.0 0 0.0 0 0.0 0 0.0 -1.9586687088012695 0.057035207748413086 -0.2839455306529999 0.7143467664718628 -0.6997588872909546 -0.0 1.0921339988708496 0.6466642618179321 0 1.0 0 0.0 0 0.0 0 0.0 -1.9586687088012695 0.057035207748413086 0.21605446934700012 0.7143467664718628 -0.6997588872909546 -0.0 0.5975133776664734 0.3468474745750427 0 1.0 0 0.0 0 0.0 0 0.0 1.35971999168396 0.07700017094612122 -0.2839455306529999 0.5797296166419983 0.8147831559181213 -0.0 0.02889317274093628 0.6685408353805542 0 1.0 0 0.0 0 0.0 0 0.0 1.3581535816192627 0.07824796438217163 -0.2839455306529999 0.6469618678092957 0.7625049352645874 -0.0 0.029973596334457397 0.6697502732276917 0 1.0 0 0.0 0 0.0 0 0.0 1.3581535816192627 0.07824796438217163 0.21605446934700012 0.6469618678092957 0.7625049352645874 -0.0 0.44862794876098633 0.5109697580337524 0 1.0 0 0.0 0 0.0 0 0.0 -1.9586687088012695 0.057035207748413086 -0.2839455306529999 -0.8628498315811157 -0.5054170489311218 -0.0 1.0921339988708496 0.6466642618179321 0 1.0 0 0.0 0 0.0 0 0.0 -1.8175129890441895 -0.18394553661346436 -0.2839455306529999 -0.8628498315811157 -0.5054170489311218 -0.0 1.000122308731079 0.4517623782157898 0 1.0 0 0.0 0 0.0 0 0.0 -1.8175129890441895 -0.18394553661346436 0.21605445444583893 -0.8628498315811157 -0.5054170489311218 -0.0 0.7532170414924622 0.2296181321144104 0 1.0 0 0.0 0 0.0 0 0.0 2.2293660640716553 0.2829996347427368 -0.2839455306529999 0.7043672204017639 0.7097994685173035 -0.0 0.9051555395126343 0.7120082378387451 0 1.0 0 0.0 0 0.0 0 0.0 2.2213656902313232 0.29048529267311096 -0.2839455306529999 0.6599017381668091 0.7513352036476135 -0.0 0.9091619849205017 0.7216052412986755 0 1.0 0 0.0 0 0.0 0 0.0 2.2213656902313232 0.29048529267311096 0.2160544991493225 0.6599017381668091 0.7513352036476135 -0.0 0.5459181070327759 0.5718633532524109 0 1.0 0 0.0 0 0.0 0 0.0 -1.8175129890441895 -0.18394553661346436 -0.2839455306529999 0.0 -1.0 -0.0 1.000122308731079 0.4517623782157898 0 1.0 0 0.0 0 0.0 0 0.0 -1.683362364768982 -0.18394553661346436 -0.2839455306529999 0.0 -1.0 -0.0 0.9581927061080933 0.48435938358306885 0 1.0 0 0.0 0 0.0 0 0.0 -1.683362364768982 -0.18394553661346436 0.21605445444583893 0.0 -1.0 -0.0 0.7767902612686157 0.3119933009147644 0 1.0 0 0.0 0 0.0 0 0.0 1.948448896408081 0.2835822105407715 -0.2839455306529999 -0.7042756676673889 0.7098910212516785 -0.0 0.09280359745025635 0.7020356059074402 0 1.0 0 0.0 0 0.0 0 0.0 1.94114089012146 0.2758910357952118 -0.2839455306529999 -0.7458418607711792 0.6660969853401184 -0.0 0.0955517590045929 0.6928189992904663 0 1.0 0 0.0 0 0.0 0 0.0 1.94114089012146 0.2758910357952118 0.2160544991493225 -0.7458418607711792 0.6660969853401184 -0.0 0.39724987745285034 0.5584805607795715 0 1.0 0 0.0 0 0.0 0 0.0 0.5740368366241455 0.12087064981460571 -0.2839455306529999 0.9072847962379456 0.4204840362071991 -0.0 0.887948751449585 0.6863940358161926 0 1.0 0 0.0 0 0.0 0 0.0 0.5705780982971191 0.1278272569179535 -0.2839455306529999 0.8823511600494385 0.47053438425064087 -0.0 0.8889724016189575 0.6940163373947144 0 1.0 0 0.0 0 0.0 0 0.0 0.5705780982971191 0.1278272569179535 0.21605446934700012 0.8823511600494385 0.47053438425064087 -0.0 0.5653687715530396 0.5536172986030579 0 1.0 0 0.0 0 0.0 0 0.0 1.362391710281372 0.07530966401100159 -0.2839455306529999 0.4928129017353058 0.8701131939888 -0.0 0.02706146240234375 0.6669514179229736 0 1.0 0 0.0 0 0.0 0 0.0 1.35971999168396 0.07700017094612122 -0.2839455306529999 0.5797296166419983 0.8147831559181213 -0.0 0.02889317274093628 0.6685408353805542 0 1.0 0 0.0 0 0.0 0 0.0 1.35971999168396 0.07700017094612122 0.21605446934700012 0.5797296166419983 0.8147831559181213 -0.0 0.44947174191474915 0.5095247030258179 0 1.0 0 0.0 0 0.0 0 0.0 -0.29498910903930664 0.16226482391357422 -0.2839455306529999 0.6462294459342957 0.7631153464317322 -0.0 0.9094334840774536 0.7519071102142334 0 1.0 0 0.0 0 0.0 0 0.0 -0.30321788787841797 0.1687580645084381 -0.2839455306529999 0.5909909605979919 0.8066347241401672 -0.0 0.9140862226486206 0.7599997520446777 0 1.0 0 0.0 0 0.0 0 0.0 -0.30321788787841797 0.1687580645084381 0.21605446934700012 0.5909909605979919 0.8066347241401672 -0.0 0.5360012650489807 0.6115046739578247 0 1.0 0 0.0 0 0.0 0 0.0 -2.146409511566162 -0.18394553661346436 -0.2839455306529999 0.0 -0.999969482421875 -0.0 0.14069145917892456 0.3820388913154602 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 -0.18394553661346436 -0.2839455306529999 0.0 -1.0 -0.0 0.0974959135055542 0.39517903327941895 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 -0.18394553661346436 0.21605445444583893 0.0 -1.0 -0.0 0.5862001776695251 0.0954430103302002 0 1.0 0 0.0 0 0.0 0 0.0 0.2708404064178467 0.12673750519752502 -0.2839455306529999 -0.905117928981781 0.42512282729148865 -0.0 0.08592939376831055 0.6977543830871582 0 1.0 0 0.0 0 0.0 0 0.0 0.26792407035827637 0.1198587417602539 -0.2839455306529999 -0.9349040389060974 0.35483869910240173 -0.0 0.08682084083557129 0.6905057430267334 0 1.0 0 0.0 0 0.0 0 0.0 0.26792407035827637 0.1198587417602539 0.21605446934700012 -0.9349040389060974 0.35483869910240173 -0.0 0.4038441479206085 0.5518714189529419 0 1.0 0 0.0 0 0.0 0 0.0 -0.47600698471069336 0.167280375957489 -0.2839455306529999 -0.6155278086662292 0.7881100177764893 -0.0 0.044904887676239014 0.7670250535011292 0 1.0 0 0.0 0 0.0 0 0.0 -0.4841797351837158 0.16044053435325623 -0.2839455306529999 -0.6660054326057434 0.7459028959274292 -0.0 0.050142377614974976 0.7591694593429565 0 1.0 0 0.0 0 0.0 0 0.0 -0.4841797351837158 0.16044053435325623 0.21605446934700012 -0.6660054326057434 0.7459028959274292 -0.0 0.4383218288421631 0.6089680790901184 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 -0.18394553661346436 -0.2839455306529999 1.0 0.0 -0.0 0.0974959135055542 0.39517903327941895 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 -0.02877916395664215 -0.2839455306529999 1.0 0.0 -0.0 0.12446880340576172 0.5184248089790344 0 1.0 0 0.0 0 0.0 0 0.0 -2.042731761932373 -0.02877916395664215 0.21605446934700012 1.0 0.0 -0.0 0.5489316582679749 0.22549867630004883 0 1.0 0 0.0 0 0.0 0 0.0 1.3659708499908447 0.07350727915763855 -0.2839455306529999 0.4213080108165741 0.9068880081176758 -0.0 0.0246143639087677 0.6653087139129639 0 1.0 0 0.0 0 0.0 0 0.0 1.362391710281372 0.07530966401100159 -0.2839455306529999 0.4928129017353058 0.8701131939888 -0.0 0.02706146240234375 0.6669514179229736 0 1.0 0 0.0 0 0.0 0 0.0 1.362391710281372 0.07530966401100159 0.21605446934700012 0.4928129017353058 0.8701131939888 -0.0 0.45094093680381775 0.5075438618659973 0 1.0 0 0.0 0 0.0 0 0.0 2.236670732498169 0.2753120958805084 -0.2839455306529999 0.7461165189743042 0.6657918095588684 -0.0 0.9017375707626343 0.7023459672927856 0 1.0 0 0.0 0 0.0 0 0.0 2.2293660640716553 0.2829996347427368 -0.2839455306529999 0.7043672204017639 0.7097994685173035 -0.0 0.9051555395126343 0.7120082378387451 0 1.0 0 0.0 0 0.0 0 0.0 2.2293660640716553 0.2829996347427368 0.21605446934700012 0.7043672204017639 0.7097994685173035 -0.0 0.5501882433891296 0.564041256904602 0 1.0 0 0.0 0 0.0 0 0.0 1.94114089012146 0.2758910357952118 -0.2839455306529999 -0.7458418607711792 0.6660969853401184 -0.0 0.0955517590045929 0.6928189992904663 0 1.0 0 0.0 0 0.0 0 0.0 1.9344675540924072 0.26793715357780457 -0.2839455306529999 -0.7863399386405945 0.617755651473999 -0.0 0.09787419438362122 0.6835832595825195 0 1.0 0 0.0 0 0.0 0 0.0 1.9344675540924072 0.26793715357780457 0.2160544991493225 -0.7863399386405945 0.617755651473999 -0.0 0.39389708638191223 0.5509626269340515 0 1.0 0 0.0 0 0.0 0 0.0 0.40726804733276367 0.1253851056098938 -0.2839455306529999 0.05169835686683655 -0.9986571669578552 -0.0 0.9978516697883606 0.7254770994186401 0 1.0 0 0.0 0 0.0 0 0.0 0.4132881164550781 0.1256113052368164 -0.2839455306529999 0.02471999265253544 -0.999664306640625 -0.0 0.9933216571807861 0.7258370518684387 0 1.0 0 0.0 0 0.0 0 0.0 0.4132881164550781 0.1256113052368164 0.21605446934700012 0.02471999265253544 -0.999664306640625 -0.0 1.4807125329971313 0.5621060132980347 0 1.0 0 0.0 0 0.0 0 0.0 1.370457410812378 0.07159298658370972 -0.2839455306529999 0.3721121847629547 0.9281594157218933 -0.0 0.021543771028518677 0.6635836362838745 0 1.0 0 0.0 0 0.0 0 0.0 1.3659708499908447 0.07350727915763855 -0.2839455306529999 0.4213080108165741 0.9068880081176758 -0.0 0.0246143639087677 0.6653087139129639 0 1.0 0 0.0 0 0.0 0 0.0 1.3659708499908447 0.07350727915763855 0.21605446934700012 0.4213080108165741 0.9068880081176758 -0.0 0.45294734835624695 0.5053983926773071 0 1.0 0 0.0 0 0.0 0 0.0 -0.28708624839782715 0.15508809685707092 -0.2839455306529999 0.6964934468269348 0.7175206542015076 -0.0 0.9052527546882629 0.7431755065917969 0 1.0 0 0.0 0 0.0 0 0.0 -0.29498910903930664 0.16226482391357422 -0.2839455306529999 0.6462294459342957 0.7631153464317322 -0.0 0.9094334840774536 0.7519071102142334 0 1.0 0 0.0 0 0.0 0 0.0 -0.29498910903930664 0.16226482391357422 0.21605446934700012 0.6462294459342957 0.7631153464317322 -0.0 0.540307879447937 0.6050833463668823 0 1.0 0 0.0 0 0.0 0 0.0 1.258800745010376 0.0734853744506836 -0.2839455306529999 -0.9974059462547302 -0.0716574639081955 -0.0 0.08622920513153076 0.6439353227615356 0 1.0 0 0.0 0 0.0 0 0.0 1.2597200870513916 0.06504258513450623 -0.2839455306529999 -0.9891353845596313 -0.14697714149951935 -0.0 0.08516228199005127 0.6356387138366699 0 1.0 0 0.0 0 0.0 0 0.0 1.2597200870513916 0.06504258513450623 0.21605446934700012 -0.9891353845596313 -0.14697714149951935 -0.0 0.39723891019821167 0.49852633476257324 0 1.0 0 0.0 0 0.0 0 0.0 -0.4841797351837158 0.16044053435325623 -0.2839455306529999 -0.6660054326057434 0.7459028959274292 -0.0 0.050142377614974976 0.7591694593429565 0 1.0 0 0.0 0 0.0 0 0.0 -0.49211907386779785 0.1528806984424591 -0.2839455306529999 -0.7111117839813232 0.7030549049377441 -0.0 0.05495721101760864 0.7505285739898682 0 1.0 0 0.0 0 0.0 0 0.0 -0.49211907386779785 0.1528806984424591 0.21605446934700012 -0.7111117839813232 0.7030549049377441 -0.0 0.43390145897865295 0.601917028427124 0 1.0 0 0.0 0 0.0 0 0.0 0.4132881164550781 0.1256113052368164 -0.2839455306529999 0.02471999265253544 -0.999664306640625 -0.0 0.9933216571807861 0.7258370518684387 0 1.0 0 0.0 0 0.0 0 0.0 0.4196147918701172 0.12568670511245728 -0.2839455306529999 -0.00198370311409235 -0.999969482421875 -0.0 0.9885497689247131 0.7259107828140259 0 1.0 0 0.0 0 0.0 0 0.0 0.4196147918701172 0.12568670511245728 0.21605446934700012 -0.00198370311409235 -0.999969482421875 -0.0 1.4844026565551758 0.5620718598365784 0 1.0 0 0.0 0 0.0 0 0.0 2.2432796955108643 0.2674226760864258 -0.2839455306529999 0.7873775362968445 0.616412878036499 -0.0 0.898861289024353 0.6926416158676147 0 1.0 0 0.0 0 0.0 0 0.0 2.236670732498169 0.2753120958805084 -0.2839455306529999 0.7461165189743042 0.6657918095588684 -0.0 0.9017375707626343 0.7023459672927856 0 1.0 0 0.0 0 0.0 0 0.0 2.236670732498169 0.2753120958805084 0.2160544991493225 0.7460860013961792 0.6657918095588684 -0.0 0.5540941953659058 0.5560380220413208 0 1.0 0 0.0 0 0.0 0 0.0 0.4246535301208496 0.1256064474582672 -0.2839455306529999 -0.03277687728404999 -0.99945068359375 -0.0 0.9847489595413208 0.7257236838340759 0 1.0 0 0.0 0 0.0 0 0.0 0.42949509620666504 0.12536564469337463 -0.2839455306529999 -0.06787316501140594 -0.9976806044578552 -0.0 0.9811038374900818 0.7252907752990723 0 1.0 0 0.0 0 0.0 0 0.0 0.42949509620666504 0.12536564469337463 0.21605446934700012 -0.06787316501140594 -0.9976806044578552 -0.0 0.49016478657722473 0.5615012645721436 0 1.0 0 0.0 0 0.0 0 0.0 1.9344675540924072 0.26793715357780457 -0.2839455306529999 -0.7863399386405945 0.617755651473999 -0.0 0.09787419438362122 0.6835832595825195 0 1.0 0 0.0 0 0.0 0 0.0 1.928429365158081 0.2597205638885498 -0.2839455306529999 -0.8250068426132202 0.5650807023048401 -0.0 0.09980490803718567 0.6743261814117432 0 1.0 0 0.0 0 0.0 0 0.0 1.928429365158081 0.2597205638885498 0.21605446934700012 -0.8250068426132202 0.5650807023048401 -0.0 0.3908200263977051 0.5432608127593994 0 1.0 0 0.0 0 0.0 0 0.0 1.3758513927459717 0.06956681609153748 -0.2839455306529999 0.33652761578559875 0.9416486024856567 -0.0 0.017840862274169922 0.6617412567138672 0 1.0 0 0.0 0 0.0 0 0.0 1.370457410812378 0.07159298658370972 -0.2839455306529999 0.3721121847629547 0.9281594157218933 -0.0 0.021543771028518677 0.6635836362838745 0 1.0 0 0.0 0 0.0 0 0.0 1.370457410812378 0.07159298658370972 0.21605446934700012 0.3721121847629547 0.9281594157218933 -0.0 0.45550280809402466 0.5030808448791504 0 1.0 0 0.0 0 0.0 0 0.0 -0.2795095443725586 0.14722785353660583 -0.2839455306529999 0.7440717816352844 0.6680806875228882 -0.0 0.9015175104141235 0.7338099479675293 0 1.0 0 0.0 0 0.0 0 0.0 -0.28708624839782715 0.15508809685707092 -0.2839455306529999 0.6964934468269348 0.7175206542015076 -0.0 0.9052527546882629 0.7431755065917969 0 1.0 0 0.0 0 0.0 0 0.0 -0.28708624839782715 0.15508809685707092 0.21605446934700012 0.6964934468269348 0.7175206542015076 -0.0 0.5444459915161133 0.5980141162872314 0 1.0 0 0.0 0 0.0 0 0.0 -0.49211907386779785 0.1528806984424591 -0.2839455306529999 -0.7111117839813232 0.7030549049377441 -0.0 0.05495721101760864 0.7505285739898682 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 -0.2839455306529999 -0.7320169806480408 0.6812646985054016 -0.0 0.05936384201049805 0.7411052584648132 0 1.0 0 0.0 0 0.0 0 0.0 -0.49982476234436035 0.14460089802742004 0.21605446934700012 -0.7320169806480408 0.6812646985054016 -0.0 0.42958128452301025 0.5941163897514343 0 1.0 0 0.0 0 0.0 0 0.0 0.4015543460845947 0.12500807642936707 -0.2839455306529999 0.08148442208766937 -0.9966429471969604 -0.0 1.002132534980774 0.7248519659042358 0 1.0 0 0.0 0 0.0 0 0.0 0.40726804733276367 0.1253851056098938 -0.2839455306529999 0.05169835686683655 -0.9986571669578552 -0.0 0.9978516697883606 0.7254770994186401 0 1.0 0 0.0 0 0.0 0 0.0 0.40726804733276367 0.1253851056098938 0.21605446934700012 0.05169835686683655 -0.9986571669578552 -0.0 1.4772038459777832 0.5619494318962097 0 1.0 0 0.0 0 0.0 0 0.0 1.3821523189544678 0.06742876768112183 -0.2839455306529999 0.3096407949924469 0.9508346915245056 -0.0 0.013497740030288696 0.6597400307655334 0 1.0 0 0.0 0 0.0 0 0.0 1.3758513927459717 0.06956681609153748 -0.2839455306529999 0.33652761578559875 0.9416486024856567 -0.0 0.017840862274169922 0.6617412567138672 0 1.0 0 0.0 0 0.0 0 0.0 1.3758513927459717 0.06956681609153748 0.21605446934700012 0.33652761578559875 0.9416486024856567 -0.0 0.4586208760738373 0.5005841851234436 0 1.0 0 0.0 0 0.0 0 0.0 0.42949509620666504 0.12536564469337463 -0.2839455306529999 -0.06787316501140594 -0.9976806044578552 -0.0 0.9811038374900818 0.7252907752990723 0 1.0 0 0.0 0 0.0 0 0.0 0.4341397285461426 0.12496429681777954 -0.2839455306529999 -0.10571611672639847 -0.9943845868110657 -0.0 0.9776194095611572 0.7246223092079163 0 1.0 0 0.0 0 0.0 0 0.0 0.4341397285461426 0.12496429681777954 0.21605446934700012 -0.10571611672639847 -0.9943845868110657 -0.0 0.49287116527557373 0.5609472990036011 0 1.0 0 0.0 0 0.0 0 0.0 1.3893606662750244 0.06517881155014038 -0.2839455306529999 0.28867459297180176 0.9573961496353149 -0.0 0.008508294820785522 0.6575323343276978 0 1.0 0 0.0 0 0.0 0 0.0 1.3821523189544678 0.06742876768112183 -0.2839455306529999 0.3096407949924469 0.9508346915245056 -0.0 0.013497740030288696 0.6597400307655334 0 1.0 0 0.0 0 0.0 0 0.0 1.3821523189544678 0.06742876768112183 0.21605446934700012 0.3096407949924469 0.9508346915245056 -0.0 0.4623155891895294 0.49790245294570923 0 1.0 0 0.0 0 0.0 0 0.0 -0.27240467071533203 0.13872790336608887 -0.2839455306529999 0.791283905506134 0.6114383339881897 -0.0 0.8982787132263184 0.7239008545875549 0 1.0 0 0.0 0 0.0 0 0.0 -0.2795095443725586 0.14722785353660583 -0.2839455306529999 0.7440717816352844 0.6680806875228882 -0.0 0.9015175104141235 0.7338099479675293 0 1.0 0 0.0 0 0.0 0 0.0 -0.2795095443725586 0.14722785353660583 0.21605446934700012 0.7440717816352844 0.6680806875228882 -0.0 0.5484229326248169 0.5902849435806274 0 1.0 0 0.0 0 0.0 0 0.0 2.249192953109741 0.2593313753604889 -0.2839455306529999 0.8273873329162598 0.5616016387939453 -0.0 0.8964853882789612 0.6829080581665039 0 1.0 0 0.0 0 0.0 0 0.0 2.2432796955108643 0.2674226760864258 -0.2839455306529999 0.7873775362968445 0.616412878036499 -0.0 0.898861289024353 0.6926416158676147 0 1.0 0 0.0 0 0.0 0 0.0 2.2432796955108643 0.2674226760864258 0.21605446934700012 0.7873775362968445 0.616412878036499 -0.0 0.557647705078125 0.547858476638794 0 1.0 0 0.0 0 0.0 0 0.0 0.3961472511291504 0.1244802474975586 -0.2839455306529999 0.11453596502542496 -0.9934080243110657 -0.0 0.006159007549285889 0.723981499671936 0 1.0 0 0.0 0 0.0 0 0.0 0.4015543460845947 0.12500807642936707 -0.2839455306529999 0.08148442208766937 -0.9966429471969604 -0.0 0.0021325647830963135 0.7248519659042358 0 1.0 0 0.0 0 0.0 0 0.0 0.4015543460845947 0.12500807642936707 0.21605446934700012 0.08148442208766937 -0.9966429471969604 -0.0 0.4738771617412567 0.5616071224212646 0 1.0 0 0.0 0 0.0 0 0.0 1.3974764347076416 0.06281697750091553 -0.2839455306529999 0.2719199061393738 0.9623096585273743 -0.0 0.002871215343475342 0.6550651788711548 0 1.0 0 0.0 0 0.0 0 0.0 1.3893606662750244 0.06517881155014038 -0.2839455306529999 0.28867459297180176 0.9573961496353149 -0.0 0.008508294820785522 0.6575323343276978 0 1.0 0 0.0 0 0.0 0 0.0 1.3893606662750244 0.06517881155014038 0.21605446934700012 0.28867459297180176 0.9573961496353149 -0.0 0.46660125255584717 0.49503183364868164 0 1.0 0 0.0 0 0.0 0 0.0 2.084556818008423 0.2596889138221741 -0.2839455306529999 0.04907376319169998 -0.9987792372703552 -0.0 0.007328629493713379 0.7110196352005005 0 1.0 0 0.0 0 0.0 0 0.0 2.0907180309295654 0.2598372995853424 -0.2839455306529999 0.0008545182645320892 -0.999969482421875 -0.0 0.002812206745147705 0.7115545868873596 0 1.0 0 0.0 0 0.0 0 0.0 2.0907180309295654 0.2598372995853424 0.2160544991493225 0.0008545182645320892 -0.999969482421875 -0.0 0.4729996919631958 0.548380970954895 0 1.0 0 0.0 0 0.0 0 0.0 0.4341397285461426 0.12496429681777954 -0.2839455306529999 -0.10571611672639847 -0.9943845868110657 -0.0 0.9776194095611572 0.7246223092079163 0 1.0 0 0.0 0 0.0 0 0.0 0.4385874271392822 0.12440240383148193 -0.2839455306529999 -0.14645832777023315 -0.9891964197158813 -0.0 0.9742997884750366 0.7237284183502197 0 1.0 0 0.0 0 0.0 0 0.0 0.4385874271392822 0.12440240383148193 0.21605446934700012 -0.14645832777023315 -0.9891964197158813 -0.0 0.4954608380794525 0.5602172613143921 0 1.0 0 0.0 0 0.0 0 0.0 1.2597200870513916 0.06504258513450623 -0.2839455306529999 -0.9891353845596313 -0.14697714149951935 -0.0 0.08516228199005127 0.6356387138366699 0 1.0 0 0.0 0 0.0 0 0.0 1.2612524032592773 0.05692572891712189 -0.2839455306529999 -0.9741813540458679 -0.22565385699272156 -0.0 0.08384203910827637 0.6276835203170776 0 1.0 0 0.0 0 0.0 0 0.0 1.2612524032592773 0.05692572891712189 0.21605446934700012 -0.9741813540458679 -0.22565385699272156 -0.0 0.39726346731185913 0.49021202325820923 0 1.0 0 0.0 0 0.0 0 0.0 -0.4900953769683838 0.07213538885116577 -0.2839455306529999 0.9208349585533142 -0.3899044692516327 -0.0 0.04923892021179199 0.6724258065223694 0 1.0 0 0.0 0 0.0 0 0.0 -0.48732495307922363 0.07810565829277039 -0.2839455306529999 0.8912014961242676 -0.4535660743713379 -0.0 0.0478324294090271 0.6794154644012451 0 1.0 0 0.0 0 0.0 0 0.0 -0.48732495307922363 0.07810565829277039 0.21605446934700012 0.8912014961242676 -0.4535660743713379 -0.0 0.4322170615196228 0.5300252437591553 0 1.0 0 0.0 0 0.0 0 0.0 2.0907180309295654 0.2598372995853424 -0.2839455306529999 0.0008545182645320892 -0.999969482421875 -0.0 1.002812147140503 0.7115545868873596 0 1.0 0 0.0 0 0.0 0 0.0 2.0970871448516846 0.25969499349594116 -0.2839455306529999 -0.04580828174948692 -0.9989318251609802 -0.0 0.9981156587600708 0.7116611003875732 0 1.0 0 0.0 0 0.0 0 0.0 2.0970871448516846 0.25969499349594116 0.21605446934700012 -0.04580828174948692 -0.9989318251609802 -0.0 1.47673761844635 0.5481581687927246 0 1.0 0 0.0 0 0.0 0 0.0 -0.48732495307922363 0.07810565829277039 -0.2839455306529999 0.8912014961242676 -0.4535660743713379 -0.0 0.0478324294090271 0.6794154644012451 0 1.0 0 0.0 0 0.0 0 0.0 -0.48422837257385254 0.08367946743965149 -0.2839455306529999 0.8547929525375366 -0.5189062356948853 -0.0 0.04617246985435486 0.685994029045105 0 1.0 0 0.0 0 0.0 0 0.0 -0.48422837257385254 0.08367946743965149 0.21605446934700012 0.8547929525375366 -0.5189062356948853 -0.0 0.4342000186443329 0.5359824895858765 0 1.0 0 0.0 0 0.0 0 0.0 1.928429365158081 0.2597205638885498 -0.2839455306529999 -0.8250068426132202 0.5650807023048401 -0.0 0.09980490803718567 0.6743261814117432 0 1.0 0 0.0 0 0.0 0 0.0 1.9230258464813232 0.2512412965297699 -0.2839455306529999 -0.861079752445221 0.5084383487701416 -0.0 0.10137379169464111 0.6650401949882507 0 1.0 0 0.0 0 0.0 0 0.0 1.9230258464813232 0.2512412965297699 0.2160544991493225 -0.861079752445221 0.5084383487701416 -0.0 0.38800495862960815 0.5353667140007019 0 1.0 0 0.0 0 0.0 0 0.0 0.39104652404785156 0.12380161881446838 -0.2839455306529999 0.1511887013912201 -0.9884945154190063 -0.0 0.009928256273269653 0.7228847742080688 0 1.0 0 0.0 0 0.0 0 0.0 0.3961472511291504 0.1244802474975586 -0.2839455306529999 0.11453596502542496 -0.9934080243110657 -0.0 0.006159007549285889 0.723981499671936 0 1.0 0 0.0 0 0.0 0 0.0 0.3961472511291504 0.1244802474975586 0.21605446934700012 0.11453596502542496 -0.9934080243110657 -0.0 0.47073280811309814 0.5610840916633606 0 1.0 0 0.0 0 0.0 0 0.0 1.4064991474151611 0.06034325063228607 -0.2839455306529999 0.25818657875061035 0.9660634398460388 -0.0 0.99659264087677 0.6522814631462097 0 1.0 0 0.0 0 0.0 0 0.0 1.3974764347076416 0.06281697750091553 -0.2839455306529999 0.2719199061393738 0.9623096585273743 -0.0 1.0028712749481201 0.6550651788711548 0 1.0 0 0.0 0 0.0 0 0.0 1.3974764347076416 0.06281697750091553 0.21605446934700012 0.2719199061393738 0.9623096585273743 -0.0 1.4714901447296143 0.49197161197662354 0 1.0 0 0.0 0 0.0 0 0.0 0.4385874271392822 0.12440240383148193 -0.2839455306529999 -0.14645832777023315 -0.9891964197158813 -0.0 0.9742997884750366 0.7237284183502197 0 1.0 0 0.0 0 0.0 0 0.0 0.4428379535675049 0.1236799955368042 -0.2839455306529999 -0.1902218759059906 -0.981719434261322 -0.0 0.9711482524871826 0.7226188778877258 0 1.0 0 0.0 0 0.0 0 0.0 0.4428379535675049 0.1236799955368042 0.21605446934700012 -0.1902218759059906 -0.981719434261322 -0.0 0.4979337751865387 0.5593129396438599 0 1.0 0 0.0 0 0.0 0 0.0 -0.48422837257385254 0.08367946743965149 -0.2839455306529999 0.8547929525375366 -0.5189062356948853 -0.0 0.04617246985435486 0.685994029045105 0 1.0 0 0.0 0 0.0 0 0.0 -0.4808061122894287 0.0888567864894867 -0.2839455306529999 0.8112429976463318 -0.5846735835075378 -0.0 0.044251084327697754 0.6921672821044922 0 1.0 0 0.0 0 0.0 0 0.0 -0.4808061122894287 0.0888567864894867 0.21605446934700012 0.8112429976463318 -0.5846735835075378 -0.0 0.43633294105529785 0.5414889454841614 0 1.0 0 0.0 0 0.0 0 0.0 2.0970871448516846 0.25969499349594116 -0.2839455306529999 -0.04580828174948692 -0.9989318251609802 -0.0 0.9981156587600708 0.7116611003875732 0 1.0 0 0.0 0 0.0 0 0.0 2.1032350063323975 0.2592681050300598 -0.2839455306529999 -0.09424115717411041 -0.9955443143844604 -0.0 0.9935676455497742 0.7113252878189087 0 1.0 0 0.0 0 0.0 0 0.0 2.1032350063323975 0.2592681050300598 0.21605446934700012 -0.09424115717411041 -0.9955443143844604 -0.0 1.4803522825241089 0.5476068258285522 0 1.0 0 0.0 0 0.0 0 0.0 1.4164292812347412 0.057757630944252014 -0.2839455306529999 0.2467421442270279 0.9690542221069336 -0.0 0.9896879196166992 0.6491220593452454 0 1.0 0 0.0 0 0.0 0 0.0 1.4064991474151611 0.06034325063228607 -0.2839455306529999 0.25818657875061035 0.9660634398460388 -0.0 0.99659264087677 0.6522814631462097 0 1.0 0 0.0 0 0.0 0 0.0 1.4064991474151611 0.06034325063228607 0.21605446934700012 0.25818657875061035 0.9660634398460388 -0.0 1.4769904613494873 0.48872560262680054 0 1.0 0 0.0 0 0.0 0 0.0 -0.4808061122894287 0.0888567864894867 -0.2839455306529999 0.8112429976463318 -0.5846735835075378 -0.0 0.044251084327697754 0.6921672821044922 0 1.0 0 0.0 0 0.0 0 0.0 -0.47705769538879395 0.09363764524459839 -0.2839455306529999 0.7638782858848572 -0.6453138589859009 -0.0 0.04205942153930664 0.6979392766952515 0 1.0 0 0.0 0 0.0 0 0.0 -0.47705769538879395 0.09363764524459839 0.21605446934700012 0.7638782858848572 -0.6453138589859009 -0.0 0.43861955404281616 0.5465542078018188 0 1.0 0 0.0 0 0.0 0 0.0 0.38625240325927734 0.12297219038009644 -0.2839455306529999 0.19196142256259918 -0.9813836812973022 -0.0 0.013439029455184937 0.7215795516967773 0 1.0 0 0.0 0 0.0 0 0.0 0.39104652404785156 0.12380161881446838 -0.2839455306529999 0.1511887013912201 -0.9884945154190063 -0.0 0.009928256273269653 0.7228847742080688 0 1.0 0 0.0 0 0.0 0 0.0 0.39104652404785156 0.12380161881446838 0.21605446934700012 0.1511887013912201 -0.9884945154190063 -0.0 0.4677700698375702 0.5603847503662109 0 1.0 0 0.0 0 0.0 0 0.0 1.4272668361663818 0.055060118436813354 -0.2839455306529999 0.2370677888393402 0.9714651703834534 -0.0 0.9821848273277283 0.6455293893814087 0 1.0 0 0.0 0 0.0 0 0.0 1.4164292812347412 0.057757630944252014 -0.2839455306529999 0.2467421442270279 0.9690542221069336 -0.0 0.9896879196166992 0.6491220593452454 0 1.0 0 0.0 0 0.0 0 0.0 1.4164292812347412 0.057757630944252014 0.21605446934700012 0.2467421442270279 0.9690542221069336 -0.0 1.4831054210662842 0.4853035807609558 0 1.0 0 0.0 0 0.0 0 0.0 2.078565835952759 0.25924378633499146 -0.2839455306529999 0.10028382390737534 -0.9949339032173157 -0.0 0.011683493852615356 0.7100631594657898 0 1.0 0 0.0 0 0.0 0 0.0 2.084556818008423 0.2596889138221741 -0.2839455306529999 0.04907376319169998 -0.9987792372703552 -0.0 0.007328629493713379 0.7110196352005005 0 1.0 0 0.0 0 0.0 0 0.0 2.084556818008423 0.2596889138221741 0.21605446934700012 0.04907376319169998 -0.9987792372703552 -0.0 0.46939122676849365 0.5482659339904785 0 1.0 0 0.0 0 0.0 0 0.0 0.4428379535675049 0.1236799955368042 -0.2839455306529999 -0.1902218759059906 -0.981719434261322 -0.0 0.9711482524871826 0.7226188778877258 0 1.0 0 0.0 0 0.0 0 0.0 0.44689154624938965 0.12279704213142395 -0.2839455306529999 -0.2370677888393402 -0.9714651703834534 -0.0 0.9681668281555176 0.7213025093078613 0 1.0 0 0.0 0 0.0 0 0.0 0.44689154624938965 0.12279704213142395 0.21605446934700012 -0.2370677888393402 -0.9714651703834534 -0.0 0.5002904534339905 0.5582360029220581 0 1.0 0 0.0 0 0.0 0 0.0 1.2612524032592773 0.05692572891712189 -0.2839455306529999 -0.9741813540458679 -0.22565385699272156 -0.0 0.08384203910827637 0.6276835203170776 0 1.0 0 0.0 0 0.0 0 0.0 1.2633976936340332 0.04913482069969177 -0.2839455306529999 -0.9519028067588806 -0.30628377199172974 -0.0 0.08226513862609863 0.6200631856918335 0 1.0 0 0.0 0 0.0 0 0.0 1.2633976936340332 0.04913482069969177 0.21605446934700012 -0.9519028067588806 -0.30628377199172974 -0.0 0.39759036898612976 0.48207831382751465 0 1.0 0 0.0 0 0.0 0 0.0 -0.47705769538879395 0.09363764524459839 -0.2839455306529999 0.7638782858848572 -0.6453138589859009 -0.0 0.04205942153930664 0.6979392766952515 0 1.0 0 0.0 0 0.0 0 0.0 -0.47306370735168457 0.09802931547164917 -0.2839455306529999 0.7173070311546326 -0.6967375874519348 -0.0 0.039642542600631714 0.7033029794692993 0 1.0 0 0.0 0 0.0 0 0.0 -0.47306370735168457 0.09802931547164917 0.21605446934700012 0.7173070311546326 -0.6967375874519348 -0.0 0.44102004170417786 0.5511919260025024 0 1.0 0 0.0 0 0.0 0 0.0 2.2544105052948 0.25103816390037537 -0.2839455306529999 0.8651387095451355 0.5015106797218323 -0.0 0.8945741653442383 0.6731503009796143 0 1.0 0 0.0 0 0.0 0 0.0 2.249192953109741 0.2593313753604889 -0.2839455306529999 0.8273873329162598 0.5616016387939453 -0.0 0.8964853882789612 0.6829080581665039 0 1.0 0 0.0 0 0.0 0 0.0 2.249192953109741 0.2593313753604889 0.2160544991493225 0.8273873329162598 0.5616016387939453 -0.0 0.5608602166175842 0.5395023822784424 0 1.0 0 0.0 0 0.0 0 0.0 -0.47306370735168457 0.09802931547164917 -0.2839455306529999 0.7173070311546326 -0.6967375874519348 -0.0 0.039642542600631714 0.7033029794692993 0 1.0 0 0.0 0 0.0 0 0.0 -0.4689042568206787 0.10203909873962402 -0.2839455306529999 0.6687520742416382 -0.7434614300727844 -0.0 0.03704848885536194 0.7082504034042358 0 1.0 0 0.0 0 0.0 0 0.0 -0.4689042568206787 0.10203909873962402 0.21605446934700012 0.6687520742416382 -0.7434614300727844 -0.0 0.4434939920902252 0.5554137825965881 0 1.0 0 0.0 0 0.0 0 0.0 2.1032350063323975 0.2592681050300598 -0.2839455306529999 -0.09424115717411041 -0.9955443143844604 -0.0 0.9935676455497742 0.7113252878189087 0 1.0 0 0.0 0 0.0 0 0.0 2.109161615371704 0.25855663418769836 -0.2839455306529999 -0.14563432335853577 -0.9893185496330261 -0.0 0.989181399345398 0.7105580568313599 0 1.0 0 0.0 0 0.0 0 0.0 2.109161615371704 0.25855663418769836 0.2160544991493225 -0.14563432335853577 -0.9893185496330261 -0.0 1.4838416576385498 0.5467280149459839 0 1.0 0 0.0 0 0.0 0 0.0 0.38176465034484863 0.12199193239212036 -0.2839455306529999 0.2373119294643402 -0.9714041352272034 -0.0 0.01669195294380188 0.7200818061828613 0 1.0 0 0.0 0 0.0 0 0.0 0.38625240325927734 0.12297219038009644 -0.2839455306529999 0.19196142256259918 -0.9813836812973022 -0.0 0.013439029455184937 0.7215795516967773 0 1.0 0 0.0 0 0.0 0 0.0 0.38625240325927734 0.12297219038009644 0.21605446934700012 0.19196142256259918 -0.9813836812973022 -0.0 0.46498802304267883 0.55951327085495 0 1.0 0 0.0 0 0.0 0 0.0 1.439011812210083 0.05225071310997009 -0.2839455306529999 0.22879727184772491 0.9734488725662231 -0.0 0.9741263389587402 0.6414514780044556 0 1.0 0 0.0 0 0.0 0 0.0 1.4272668361663818 0.055060118436813354 -0.2839455306529999 0.2370677888393402 0.9714651703834534 -0.0 0.9821848273277283 0.6455293893814087 0 1.0 0 0.0 0 0.0 0 0.0 1.4272668361663818 0.055060118436813354 0.21605446934700012 0.2370677888393402 0.9714651703834534 -0.0 0.48982954025268555 0.4817225933074951 0 1.0 0 0.0 0 0.0 0 0.0 0.44689154624938965 0.12279704213142395 -0.2839455306529999 -0.2370677888393402 -0.9714651703834534 -0.0 0.9681668281555176 0.7213025093078613 0 1.0 0 0.0 0 0.0 0 0.0 0.4507482051849365 0.12175354361534119 -0.2839455306529999 -0.286935031414032 -0.9579149484634399 -0.0 0.965356707572937 0.7197878360748291 0 1.0 0 0.0 0 0.0 0 0.0 0.4507482051849365 0.12175354361534119 0.21605446934700012 -0.286935031414032 -0.9579149484634399 -0.0 0.5025313496589661 0.556988000869751 0 1.0 0 0.0 0 0.0 0 0.0 -0.4689042568206787 0.10203909873962402 -0.2839455306529999 0.6687520742416382 -0.7434614300727844 -0.0 0.03704848885536194 0.7082504034042358 0 1.0 0 0.0 0 0.0 0 0.0 -0.46457958221435547 0.10566699504852295 -0.2839455306529999 0.6146733164787292 -0.7887508869171143 -0.0 0.03427475690841675 0.712781548500061 0 1.0 0 0.0 0 0.0 0 0.0 -0.46457958221435547 0.10566699504852295 0.21605446934700012 0.6146733164787292 -0.7887508869171143 -0.0 0.44604381918907166 0.5592247247695923 0 1.0 0 0.0 0 0.0 0 0.0 1.4516637325286865 0.04932942986488342 -0.2839455306529999 0.22797326743602753 0.9736624956130981 -0.0 0.9655718803405762 0.6368474364280701 0 1.0 0 0.0 0 0.0 0 0.0 1.439011812210083 0.05225071310997009 -0.2839455306529999 0.22879727184772491 0.9734488725662231 -0.0 0.9741263389587402 0.6414514780044556 0 1.0 0 0.0 0 0.0 0 0.0 1.439011812210083 0.05225071310997009 0.21605446934700012 0.22879727184772491 0.9734488725662231 -0.0 0.4971461296081543 0.4780082702636719 0 1.0 0 0.0 0 0.0 0 0.0 2.0727450847625732 0.25850191712379456 -0.2839455306529999 0.15363018214702606 -0.9880977869033813 -0.0 0.015869349241256714 0.7086991667747498 0 1.0 0 0.0 0 0.0 0 0.0 2.078565835952759 0.25924378633499146 -0.2839455306529999 0.10028382390737534 -0.9949339032173157 -0.0 0.011683493852615356 0.7100631594657898 0 1.0 0 0.0 0 0.0 0 0.0 2.078565835952759 0.25924378633499146 0.21605446934700012 0.10028382390737534 -0.9949339032173157 -0.0 0.4658893346786499 0.5478110909461975 0 1.0 0 0.0 0 0.0 0 0.0 -0.46457958221435547 0.10566699504852295 -0.2839455306529999 0.6146733164787292 -0.7887508869171143 -0.0 0.03427475690841675 0.712781548500061 0 1.0 0 0.0 0 0.0 0 0.0 -0.46008944511413574 0.10891300439834595 -0.2839455306529999 0.5552842617034912 -0.8316293954849243 -0.0 0.031319111585617065 0.7168951034545898 0 1.0 0 0.0 0 0.0 0 0.0 -0.46008944511413574 0.10891300439834595 0.21605446934700012 0.5552842617034912 -0.8316293954849243 -0.0 0.4486721456050873 0.562628984451294 0 1.0 0 0.0 0 0.0 0 0.0 2.109161615371704 0.25855663418769836 -0.2839455306529999 -0.14563432335853577 -0.9893185496330261 -0.0 0.989181399345398 0.7105580568313599 0 1.0 0 0.0 0 0.0 0 0.0 2.1148669719696045 0.2575605809688568 -0.2839455306529999 -0.19977416098117828 -0.9798272848129272 -0.0 0.9849684238433838 0.7093707323074341 0 1.0 0 0.0 0 0.0 0 0.0 2.1148669719696045 0.2575605809688568 0.2160544991493225 -0.19977416098117828 -0.9798272848129272 -0.0 1.4872045516967773 0.5455227494239807 0 1.0 0 0.0 0 0.0 0 0.0 0.37758350372314453 0.12086087465286255 -0.2839455306529999 0.28769800066947937 -0.9577013254165649 -0.0 0.019688516855239868 0.718406081199646 0 1.0 0 0.0 0 0.0 0 0.0 0.38176465034484863 0.12199193239212036 -0.2839455306529999 0.2373119294643402 -0.9714041352272034 -0.0 0.01669195294380188 0.7200818061828613 0 1.0 0 0.0 0 0.0 0 0.0 0.38176465034484863 0.12199193239212036 0.21605446934700012 0.2373119294643402 -0.9714041352272034 -0.0 0.46238505840301514 0.5584733486175537 0 1.0 0 0.0 0 0.0 0 0.0 1.464440107345581 0.04629625380039215 -0.2839455306529999 0.24109622836112976 0.9704886078834534 -0.0 0.9571168422698975 0.6317853927612305 0 1.0 0 0.0 0 0.0 0 0.0 1.4516637325286865 0.04932942986488342 -0.2839455306529999 0.22797326743602753 0.9736624956130981 -0.0 0.9655718803405762 0.6368474364280701 0 1.0 0 0.0 0 0.0 0 0.0 1.4516637325286865 0.04932942986488342 0.21605446934700012 0.22797326743602753 0.9736624956130981 -0.0 0.5050248503684998 0.4741957187652588 0 1.0 0 0.0 0 0.0 0 0.0 0.4507482051849365 0.12175354361534119 -0.2839455306529999 -0.286935031414032 -0.9579149484634399 -0.0 0.965356707572937 0.7197878360748291 0 1.0 0 0.0 0 0.0 0 0.0 0.4544076919555664 0.12054949998855591 -0.2839455306529999 -0.3397320508956909 -0.9405194520950317 -0.0 0.9627187252044678 0.7180824279785156 0 1.0 0 0.0 0 0.0 0 0.0 0.4544076919555664 0.12054949998855591 0.21605446934700012 -0.3397320508956909 -0.9405194520950317 -0.0 0.5046570301055908 0.5555698871612549 0 1.0 0 0.0 0 0.0 0 0.0 1.2633976936340332 0.04913482069969177 -0.2839455306529999 -0.9519028067588806 -0.30628377199172974 -0.0 0.08226513862609863 0.6200631856918335 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 0.04166984558105469 -0.2839455306529999 -0.921994686126709 -0.3871577978134155 -0.0 0.08042612671852112 0.6127701997756958 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 0.04166984558105469 0.21605446934700012 -0.921994686126709 -0.3871577978134155 -0.0 0.3982289433479309 0.47411829233169556 0 1.0 0 0.0 0 0.0 0 0.0 -0.46008944511413574 0.10891300439834595 -0.2839455306529999 0.5552842617034912 -0.8316293954849243 -0.0 0.031319111585617065 0.7168951034545898 0 1.0 0 0.0 0 0.0 0 0.0 -0.45543384552001953 0.11177712678909302 -0.2839455306529999 0.491225928068161 -0.8710287809371948 -0.0 0.028180181980133057 0.7205884456634521 0 1.0 0 0.0 0 0.0 0 0.0 -0.45543384552001953 0.11177712678909302 0.21605446934700012 0.491225928068161 -0.8710287809371948 -0.0 0.4513814449310303 0.5656299591064453 0 1.0 0 0.0 0 0.0 0 0.0 2.067094564437866 0.2574633061885834 -0.2839455306529999 0.20883816480636597 -0.9779351353645325 -0.0 0.01988041400909424 0.7069413065910339 0 1.0 0 0.0 0 0.0 0 0.0 2.0727450847625732 0.25850191712379456 -0.2839455306529999 0.15363018214702606 -0.9880977869033813 -0.0 0.015869349241256714 0.7086991667747498 0 1.0 0 0.0 0 0.0 0 0.0 2.0727450847625732 0.25850191712379456 0.2160544991493225 0.15366069972515106 -0.9880977869033813 -0.0 0.46249303221702576 0.5470205545425415 0 1.0 0 0.0 0 0.0 0 0.0 -0.45543384552001953 0.11177712678909302 -0.2839455306529999 0.491225928068161 -0.8710287809371948 -0.0 0.028180181980133057 0.7205884456634521 0 1.0 0 0.0 0 0.0 0 0.0 -0.45061278343200684 0.11425936222076416 -0.2839455306529999 0.42326119542121887 -0.9059724807739258 -0.0 0.024857670068740845 0.7238576412200928 0 1.0 0 0.0 0 0.0 0 0.0 -0.45061278343200684 0.11425936222076416 0.21605446934700012 0.42326119542121887 -0.9059724807739258 -0.0 0.4541741907596588 0.5682300329208374 0 1.0 0 0.0 0 0.0 0 0.0 2.1148669719696045 0.2575605809688568 -0.2839455306529999 -0.19977416098117828 -0.9798272848129272 -0.0 0.9849684238433838 0.7093707323074341 0 1.0 0 0.0 0 0.0 0 0.0 2.1203505992889404 0.25627994537353516 -0.2839455306529999 -0.2563554644584656 -0.9665517210960388 -0.0 0.9809385538101196 0.7077746987342834 0 1.0 0 0.0 0 0.0 0 0.0 2.1203505992889404 0.25627994537353516 0.21605446934700012 -0.2563554644584656 -0.9665517210960388 -0.0 0.49043959379196167 0.5439919233322144 0 1.0 0 0.0 0 0.0 0 0.0 0.5771746635437012 0.11358323693275452 -0.2839455306529999 0.9285256266593933 0.3712576627731323 -0.0 0.8871405124664307 0.6785171031951904 0 1.0 0 0.0 0 0.0 0 0.0 0.5740368366241455 0.12087064981460571 -0.2839455306529999 0.9072847962379456 0.4204840362071991 -0.0 0.887948751449585 0.6863940358161926 0 1.0 0 0.0 0 0.0 0 0.0 0.5740368366241455 0.12087064981460571 0.21605446934700012 0.9072847962379456 0.4204840362071991 -0.0 0.5672982335090637 0.5468026399612427 0 1.0 0 0.0 0 0.0 0 0.0 1.4765570163726807 0.04315118491649628 -0.2839455306529999 0.2623371183872223 0.964964747428894 -0.0 0.949317455291748 0.6264196634292603 0 1.0 0 0.0 0 0.0 0 0.0 1.464440107345581 0.04629625380039215 -0.2839455306529999 0.24109622836112976 0.9704886078834534 -0.0 0.9571168422698975 0.6317853927612305 0 1.0 0 0.0 0 0.0 0 0.0 1.464440107345581 0.04629625380039215 0.21605446934700012 0.24109622836112976 0.9704886078834534 -0.0 0.5129398107528687 0.47033530473709106 0 1.0 0 0.0 0 0.0 0 0.0 -0.45061278343200684 0.11425936222076416 -0.2839455306529999 0.42326119542121887 -0.9059724807739258 -0.0 0.024857670068740845 0.7238576412200928 0 1.0 0 0.0 0 0.0 0 0.0 -0.44562649726867676 0.11635971069335938 -0.2839455306529999 0.35254982113838196 -0.9357585310935974 -0.0 0.021352380514144897 0.7266969680786133 0 1.0 0 0.0 0 0.0 0 0.0 -0.44562649726867676 0.11635971069335938 0.21605446934700012 0.35254982113838196 -0.9357585310935974 -0.0 0.45705264806747437 0.5704306364059448 0 1.0 0 0.0 0 0.0 0 0.0 0.37370872497558594 0.119579017162323 -0.2839455306529999 0.34348583221435547 -0.939146101474762 -0.0 0.022431492805480957 0.7165650129318237 0 1.0 0 0.0 0 0.0 0 0.0 0.37758350372314453 0.12086087465286255 -0.2839455306529999 0.28769800066947937 -0.9577013254165649 -0.0 0.019688516855239868 0.718406081199646 0 1.0 0 0.0 0 0.0 0 0.0 0.37758350372314453 0.12086087465286255 0.21605446934700012 0.28769800066947937 -0.9577013254165649 -0.0 0.4599595367908478 0.5572682619094849 0 1.0 0 0.0 0 0.0 0 0.0 1.4880144596099854 0.0398942232131958 -0.2839455306529999 0.2856227159500122 0.9583117365837097 -0.0 0.9421727657318115 0.6208406090736389 0 1.0 0 0.0 0 0.0 0 0.0 1.4765570163726807 0.04315118491649628 -0.2839455306529999 0.2623371183872223 0.964964747428894 -0.0 0.949317455291748 0.6264196634292603 0 1.0 0 0.0 0 0.0 0 0.0 1.4765570163726807 0.04315118491649628 0.21605446934700012 0.2623371183872223 0.964964747428894 -0.0 0.520378828048706 0.4664573073387146 0 1.0 0 0.0 0 0.0 0 0.0 2.0616142749786377 0.2561279237270355 -0.2839455306529999 0.26538896560668945 -0.964140772819519 -0.0 0.02371254563331604 0.704802393913269 0 1.0 0 0.0 0 0.0 0 0.0 2.067094564437866 0.2574633061885834 -0.2839455306529999 0.20883816480636597 -0.9779351353645325 -0.0 0.01988041400909424 0.7069413065910339 0 1.0 0 0.0 0 0.0 0 0.0 2.067094564437866 0.2574633061885834 0.2160544991493225 0.20883816480636597 -0.9779351353645325 -0.0 0.459200918674469 0.5458978414535522 0 1.0 0 0.0 0 0.0 0 0.0 0.4544076919555664 0.12054949998855591 -0.2839455306529999 -0.3397320508956909 -0.9405194520950317 -0.0 0.9627187252044678 0.7180824279785156 0 1.0 0 0.0 0 0.0 0 0.0 0.4578702449798584 0.1191849410533905 -0.2839455306529999 -0.395092636346817 -0.9186376333236694 -0.0 0.9602524042129517 0.716193437576294 0 1.0 0 0.0 0 0.0 0 0.0 0.4578702449798584 0.1191849410533905 0.21605446934700012 -0.395092636346817 -0.9186376333236694 -0.0 0.5066683292388916 0.5539826154708862 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 0.04166984558105469 -0.2839455306529999 -0.921994686126709 -0.3871577978134155 -0.0 0.08042612671852112 0.6127701997756958 0 1.0 0 0.0 0 0.0 0 0.0 1.2695271968841553 0.034530818462371826 -0.2839455306529999 -0.8845790028572083 -0.4663533568382263 -0.0 0.07831767201423645 0.6057960987091064 0 1.0 0 0.0 0 0.0 0 0.0 1.2695271968841553 0.034530818462371826 0.21605446934700012 -0.8845790028572083 -0.4663533568382263 -0.0 0.39919033646583557 0.46632468700408936 0 1.0 0 0.0 0 0.0 0 0.0 -0.44562649726867676 0.11635971069335938 -0.2839455306529999 0.35254982113838196 -0.9357585310935974 -0.0 0.021352380514144897 0.7266969680786133 0 1.0 0 0.0 0 0.0 0 0.0 -0.4404747486114502 0.11807817220687866 -0.2839455306529999 0.28028199076652527 -0.9598986506462097 -0.0 0.0176660418510437 0.7290995121002197 0 1.0 0 0.0 0 0.0 0 0.0 -0.4404747486114502 0.11807817220687866 0.21605446934700012 0.28028199076652527 -0.9598986506462097 -0.0 0.4600192606449127 0.5722322463989258 0 1.0 0 0.0 0 0.0 0 0.0 2.1203505992889404 0.25627994537353516 -0.2839455306529999 -0.2563554644584656 -0.9665517210960388 -0.0 0.9809385538101196 0.7077746987342834 0 1.0 0 0.0 0 0.0 0 0.0 2.12561297416687 0.254714697599411 -0.2839455306529999 -0.31492048501968384 -0.9490951299667358 -0.0 0.9770991802215576 0.7057809829711914 0 1.0 0 0.0 0 0.0 0 0.0 2.12561297416687 0.254714697599411 0.2160544991493225 -0.31492048501968384 -0.9490951299667358 -0.0 0.4935469329357147 0.5421359539031982 0 1.0 0 0.0 0 0.0 0 0.0 0.26792407035827637 0.1198587417602539 -0.2839455306529999 -0.9349040389060974 0.35483869910240173 -0.0 0.08682084083557129 0.6905057430267334 0 1.0 0 0.0 0 0.0 0 0.0 0.26553797721862793 0.11276590824127197 -0.2839455306529999 -0.9591967463493347 0.28269293904304504 -0.0 0.08741673827171326 0.6831655502319336 0 1.0 0 0.0 0 0.0 0 0.0 0.26553797721862793 0.11276590824127197 0.21605446934700012 -0.9591967463493347 0.28269293904304504 -0.0 0.4022688865661621 0.5451507568359375 0 1.0 0 0.0 0 0.0 0 0.0 -0.4404747486114502 0.11807817220687866 -0.2839455306529999 0.28028199076652527 -0.9598986506462097 -0.0 0.0176660418510437 0.7290995121002197 0 1.0 0 0.0 0 0.0 0 0.0 -0.43515753746032715 0.11941477656364441 -0.2839455306529999 0.20780053734779358 -0.9781487584114075 -0.0 0.013802021741867065 0.7310566306114197 0 1.0 0 0.0 0 0.0 0 0.0 -0.43515753746032715 0.11941477656364441 0.21605446934700012 0.20780053734779358 -0.9781487584114075 -0.0 0.46307632327079773 0.573634147644043 0 1.0 0 0.0 0 0.0 0 0.0 1.4988129138946533 0.036525383591651917 -0.2839455306529999 0.3112582862377167 0.9503158926963806 -0.0 0.9356687068939209 0.6151248216629028 0 1.0 0 0.0 0 0.0 0 0.0 1.4880144596099854 0.0398942232131958 -0.2839455306529999 0.2856227159500122 0.9583117365837097 -0.0 0.9421727657318115 0.6208406090736389 0 1.0 0 0.0 0 0.0 0 0.0 1.4880144596099854 0.0398942232131958 0.21605446934700012 0.2856227159500122 0.9583117365837097 -0.0 0.5273305177688599 0.46256983280181885 0 1.0 0 0.0 0 0.0 0 0.0 2.0563042163848877 0.2544957995414734 -0.2839455306529999 0.32270270586013794 -0.9464705586433411 -0.0 0.02736303210258484 0.7022942900657654 0 1.0 0 0.0 0 0.0 0 0.0 2.0616142749786377 0.2561279237270355 -0.2839455306529999 0.26538896560668945 -0.964140772819519 -0.0 0.02371254563331604 0.704802393913269 0 1.0 0 0.0 0 0.0 0 0.0 2.0616142749786377 0.2561279237270355 0.2160544991493225 0.26535844802856445 -0.964140772819519 -0.0 0.45601141452789307 0.5444464683532715 0 1.0 0 0.0 0 0.0 0 0.0 -0.43515753746032715 0.11941477656364441 -0.2839455306529999 0.20780053734779358 -0.9781487584114075 -0.0 0.013802021741867065 0.7310566306114197 0 1.0 0 0.0 0 0.0 0 0.0 -0.4296748638153076 0.12036949396133423 -0.2839455306529999 0.13629566133022308 -0.9906613230705261 -0.0 0.009765088558197021 0.7325584888458252 0 1.0 0 0.0 0 0.0 0 0.0 -0.4296748638153076 0.12036949396133423 0.21605446934700012 0.13629566133022308 -0.9906613230705261 -0.0 0.46622589230537415 0.5746346116065979 0 1.0 0 0.0 0 0.0 0 0.0 2.12561297416687 0.254714697599411 -0.2839455306529999 -0.31492048501968384 -0.9490951299667358 -0.0 0.9770991802215576 0.7057809829711914 0 1.0 0 0.0 0 0.0 0 0.0 2.1306540966033936 0.25286486744880676 -0.2839455306529999 -0.3748893737792969 -0.9270607829093933 -0.0 0.9734561443328857 0.7034001350402832 0 1.0 0 0.0 0 0.0 0 0.0 2.1306540966033936 0.25286486744880676 0.2160544991493225 -0.3748893737792969 -0.9270607829093933 -0.0 0.4965265691280365 0.5399552583694458 0 1.0 0 0.0 0 0.0 0 0.0 0.37014031410217285 0.11814635992050171 -0.2839455306529999 0.4048890769481659 -0.9143345355987549 -0.0 0.02492421865463257 0.7145699262619019 0 1.0 0 0.0 0 0.0 0 0.0 0.37370872497558594 0.119579017162323 -0.2839455306529999 0.34348583221435547 -0.939146101474762 -0.0 0.022431492805480957 0.7165650129318237 0 1.0 0 0.0 0 0.0 0 0.0 0.37370872497558594 0.119579017162323 0.21605446934700012 0.34348583221435547 -0.939146101474762 -0.0 0.4577094316482544 0.5559004545211792 0 1.0 0 0.0 0 0.0 0 0.0 1.5089523792266846 0.03304465115070343 -0.2839455306529999 0.3395489454269409 0.9405804872512817 -0.0 0.9297826290130615 0.6093347072601318 0 1.0 0 0.0 0 0.0 0 0.0 1.4988129138946533 0.036525383591651917 -0.2839455306529999 0.3112582862377167 0.9503158926963806 -0.0 0.9356687068939209 0.6151248216629028 0 1.0 0 0.0 0 0.0 0 0.0 1.4988129138946533 0.036525383591651917 0.21605446934700012 0.3112582862377167 0.9503158926963806 -0.0 0.5337929725646973 0.45867598056793213 0 1.0 0 0.0 0 0.0 0 0.0 0.4578702449798584 0.1191849410533905 -0.2839455306529999 -0.395092636346817 -0.9186376333236694 -0.0 0.9602524042129517 0.716193437576294 0 1.0 0 0.0 0 0.0 0 0.0 0.4611356258392334 0.11765983700752258 -0.2839455306529999 -0.4525589644908905 -0.8917203545570374 -0.0 0.9579575061798096 0.7141268253326416 0 1.0 0 0.0 0 0.0 0 0.0 0.4611356258392334 0.11765983700752258 0.21605446934700012 -0.4525589644908905 -0.8917203545570374 -0.0 0.5085660219192505 0.5522264242172241 0 1.0 0 0.0 0 0.0 0 0.0 1.2695271968841553 0.034530818462371826 -0.2839455306529999 -0.8845790028572083 -0.4663533568382263 -0.0 0.07831767201423645 0.6057960987091064 0 1.0 0 0.0 0 0.0 0 0.0 1.2735114097595215 0.027717724442481995 -0.2839455306529999 -0.8403576612472534 -0.5420087575912476 -0.0 0.07593053579330444 0.5991321802139282 0 1.0 0 0.0 0 0.0 0 0.0 1.2735114097595215 0.027717724442481995 0.21605446934700012 -0.8403576612472534 -0.5420087575912476 -0.0 0.40048789978027344 0.4586907625198364 0 1.0 0 0.0 0 0.0 0 0.0 -0.4296748638153076 0.12036949396133423 -0.2839455306529999 0.13629566133022308 -0.9906613230705261 -0.0 0.009765088558197021 0.7325584888458252 0 1.0 0 0.0 0 0.0 0 0.0 -0.4240269660949707 0.12094232439994812 -0.2839455306529999 0.06689657270908356 -0.9977416396141052 -0.0 0.005561709403991699 0.7335937023162842 0 1.0 0 0.0 0 0.0 0 0.0 -0.4240269660949707 0.12094232439994812 0.21605446934700012 0.06689657270908356 -0.9977416396141052 -0.0 0.4694697856903076 0.5752311944961548 0 1.0 0 0.0 0 0.0 0 0.0 2.051164388656616 0.252566933631897 -0.2839455306529999 0.3802300989627838 -0.9248634576797485 -0.0 0.030830442905426025 0.6994280815124512 0 1.0 0 0.0 0 0.0 0 0.0 2.0563042163848877 0.2544957995414734 -0.2839455306529999 0.32270270586013794 -0.9464705586433411 -0.0 0.02736303210258484 0.7022942900657654 0 1.0 0 0.0 0 0.0 0 0.0 2.0563042163848877 0.2544957995414734 0.21605446934700012 0.32270270586013794 -0.9464705586433411 -0.0 0.45292267203330994 0.5426691770553589 0 1.0 0 0.0 0 0.0 0 0.0 2.1306540966033936 0.25286486744880676 -0.2839455306529999 -0.3748893737792969 -0.9270607829093933 -0.0 0.9734561443328857 0.7034001350402832 0 1.0 0 0.0 0 0.0 0 0.0 2.1354739665985107 0.2507304549217224 -0.2839455306529999 -0.4354686141014099 -0.9001739621162415 -0.0 0.9700139164924622 0.7006418704986572 0 1.0 0 0.0 0 0.0 0 0.0 2.1354739665985107 0.2507304549217224 0.21605446934700012 -0.4354686141014099 -0.9001739621162415 -0.0 0.49937885999679565 0.5374495983123779 0 1.0 0 0.0 0 0.0 0 0.0 0.3668785095214844 0.1165628731250763 -0.2839455306529999 0.47175511717796326 -0.8817102313041687 -0.0 0.027170389890670776 0.7124302387237549 0 1.0 0 0.0 0 0.0 0 0.0 0.37014031410217285 0.11814635992050171 -0.2839455306529999 0.4048890769481659 -0.9143345355987549 -0.0 0.02492421865463257 0.7145699262619019 0 1.0 0 0.0 0 0.0 0 0.0 0.37014031410217285 0.11814635992050171 0.21605446934700012 0.4048890769481659 -0.9143345355987549 -0.0 0.4556327164173126 0.5543718338012695 0 1.0 0 0.0 0 0.0 0 0.0 1.518432855606079 0.029452025890350342 -0.2839455306529999 0.3708304166793823 0.9286782145500183 -0.0 0.9244864583015442 0.6035186052322388 0 1.0 0 0.0 0 0.0 0 0.0 1.5089523792266846 0.03304465115070343 -0.2839455306529999 0.3395489454269409 0.9405804872512817 -0.0 0.9297826290130615 0.6093347072601318 0 1.0 0 0.0 0 0.0 0 0.0 1.5089523792266846 0.03304465115070343 0.21605446934700012 0.3395489454269409 0.9405804872512817 -0.0 0.5397717952728271 0.45477455854415894 0 1.0 0 0.0 0 0.0 0 0.0 0.4611356258392334 0.11765983700752258 -0.2839455306529999 -0.4525589644908905 -0.8917203545570374 -0.0 0.9579575061798096 0.7141268253326416 0 1.0 0 0.0 0 0.0 0 0.0 0.4642040729522705 0.11597418785095215 -0.2839455306529999 -0.5114291906356812 -0.8593096733093262 -0.0 0.9558324813842773 0.7118879556655884 0 1.0 0 0.0 0 0.0 0 0.0 0.4642040729522705 0.11597418785095215 0.21605446934700012 -0.5114291906356812 -0.8593096733093262 -0.0 0.5103511214256287 0.5503013730049133 0 1.0 0 0.0 0 0.0 0 0.0 -0.2659175395965576 0.12963202595710754 -0.2839455306529999 0.8353221416473389 0.5496993660926819 -0.0 0.8955774307250977 0.7135368585586548 0 1.0 0 0.0 0 0.0 0 0.0 -0.27240467071533203 0.13872790336608887 -0.2839455306529999 0.791283905506134 0.6114383339881897 -0.0 0.8982787132263184 0.7239008545875549 0 1.0 0 0.0 0 0.0 0 0.0 -0.27240467071533203 0.13872790336608887 0.21605446934700012 0.791283905506134 0.6114383339881897 -0.0 0.5521750450134277 0.5819390416145325 0 1.0 0 0.0 0 0.0 0 0.0 1.5272538661956787 0.02574750781059265 -0.2839455306529999 0.4054689109325409 0.9140903949737549 -0.0 0.9197492003440857 0.5977128744125366 0 1.0 0 0.0 0 0.0 0 0.0 1.518432855606079 0.029452025890350342 -0.2839455306529999 0.3708304166793823 0.9286782145500183 -0.0 0.9244864583015442 0.6035186052322388 0 1.0 0 0.0 0 0.0 0 0.0 1.518432855606079 0.029452025890350342 0.21605446934700012 0.3708304166793823 0.9286782145500183 -0.0 0.5452778935432434 0.45086079835891724 0 1.0 0 0.0 0 0.0 0 0.0 -0.4240269660949707 0.12094232439994812 -0.2839455306529999 0.06689657270908356 -0.9977416396141052 -0.0 0.005561709403991699 0.7335937023162842 0 1.0 0 0.0 0 0.0 0 0.0 -0.4182136058807373 0.12113326787948608 -0.2839455306529999 -9.155552834272385e-05 -1.0 -0.0 0.0011998414993286133 0.7341498732566833 0 1.0 0 0.0 0 0.0 0 0.0 -0.4182136058807373 0.12113326787948608 0.21605446934700012 -9.155552834272385e-05 -1.0 -0.0 0.47280994057655334 0.5754200220108032 0 1.0 0 0.0 0 0.0 0 0.0 2.0461952686309814 0.2503412961959839 -0.2839455306529999 0.4372081756591797 -0.8993194103240967 -0.0 0.034114301204681396 0.6962137818336487 0 1.0 0 0.0 0 0.0 0 0.0 2.051164388656616 0.252566933631897 -0.2839455306529999 0.3802300989627838 -0.9248634576797485 -0.0 0.030830442905426025 0.6994280815124512 0 1.0 0 0.0 0 0.0 0 0.0 2.051164388656616 0.252566933631897 0.21605446934700012 0.3802300989627838 -0.9248634576797485 -0.0 0.44993263483047485 0.5405683517456055 0 1.0 0 0.0 0 0.0 0 0.0 1.2735114097595215 0.027717724442481995 -0.2839455306529999 -0.8403576612472534 -0.5420087575912476 -0.0 0.07593053579330444 0.5991321802139282 0 1.0 0 0.0 0 0.0 0 0.0 1.2781085968017578 0.021230563521385193 -0.2839455306529999 -0.790459930896759 -0.6125065088272095 -0.0 0.07325360178947449 0.5927698612213135 0 1.0 0 0.0 0 0.0 0 0.0 1.2781085968017578 0.021230563521385193 0.21605446934700012 -0.790459930896759 -0.6125065088272095 -0.0 0.4021371603012085 0.45121073722839355 0 1.0 0 0.0 0 0.0 0 0.0 1.9230258464813232 0.2512412965297699 -0.2839455306529999 -0.861079752445221 0.5084383487701416 -0.0 0.10137379169464111 0.6650401949882507 0 1.0 0 0.0 0 0.0 0 0.0 1.9182569980621338 0.24249932169914246 -0.2839455306529999 -0.8938566446304321 0.44828638434410095 -0.0 0.10260581970214844 0.6557139158248901 0 1.0 0 0.0 0 0.0 0 0.0 1.9182569980621338 0.24249932169914246 0.21605448424816132 -0.8938566446304321 0.44828638434410095 -0.0 0.38543954491615295 0.5272694230079651 0 1.0 0 0.0 0 0.0 0 0.0 0.3639230728149414 0.11482855677604675 -0.2839455306529999 0.5499130487442017 -0.8352000713348389 -0.0 0.029174327850341797 0.7101534605026245 0 1.0 0 0.0 0 0.0 0 0.0 0.3668785095214844 0.1165628731250763 -0.2839455306529999 0.47175511717796326 -0.8817102313041687 -0.0 0.027170389890670776 0.7124302387237549 0 1.0 0 0.0 0 0.0 0 0.0 0.3668785095214844 0.1165628731250763 0.21605446934700012 0.47175511717796326 -0.8817102313041687 -0.0 0.45372745394706726 0.5526838302612305 0 1.0 0 0.0 0 0.0 0 0.0 0.4642040729522705 0.11597418785095215 -0.2839455306529999 -0.5114291906356812 -0.8593096733093262 -0.0 0.9558324813842773 0.7118879556655884 0 1.0 0 0.0 0 0.0 0 0.0 0.4670755863189697 0.11412802338600159 -0.2839455306529999 -0.5681325793266296 -0.8229010701179504 -0.0 0.9538760185241699 0.7094811201095581 0 1.0 0 0.0 0 0.0 0 0.0 0.4670755863189697 0.11412802338600159 0.21605446934700012 -0.5681325793266296 -0.8229010701179504 -0.0 0.512024462223053 0.54820716381073 0 1.0 0 0.0 0 0.0 0 0.0 -0.26004815101623535 0.11994022130966187 -0.2839455306529999 0.8735617995262146 0.4866481423377991 -0.0 0.8933745622634888 0.7027099132537842 0 1.0 0 0.0 0 0.0 0 0.0 -0.2659175395965576 0.12963202595710754 -0.2839455306529999 0.8353221416473389 0.5496993660926819 -0.0 0.8955774307250977 0.7135368585586548 0 1.0 0 0.0 0 0.0 0 0.0 -0.2659175395965576 0.12963202595710754 0.21605446934700012 0.8353221416473389 0.5496993660926819 -0.0 0.5556415319442749 0.5730181932449341 0 1.0 0 0.0 0 0.0 0 0.0 1.5354154109954834 0.02193109691143036 -0.2839455306529999 0.443800151348114 0.8961150050163269 -0.0 0.9155389070510864 0.5919426679611206 0 1.0 0 0.0 0 0.0 0 0.0 1.5272538661956787 0.02574750781059265 -0.2839455306529999 0.4054689109325409 0.9140903949737549 -0.0 0.9197492003440857 0.5977128744125366 0 1.0 0 0.0 0 0.0 0 0.0 1.5272538661956787 0.02574750781059265 0.21605446934700012 0.4054689109325409 0.9140903949737549 -0.0 0.550325870513916 0.4469272494316101 0 1.0 0 0.0 0 0.0 0 0.0 -0.4182136058807373 0.12113326787948608 -0.2839455306529999 -9.155552834272385e-05 -1.0 -0.0 1.0011998414993286 0.7341498732566833 0 1.0 0 0.0 0 0.0 0 0.0 -0.4122908115386963 0.12093746662139893 -0.2839455306529999 -0.06741538643836975 -0.9977111220359802 -0.0 0.9967317581176758 0.7342070937156677 0 1.0 0 0.0 0 0.0 0 0.0 -0.4122908115386963 0.12093746662139893 0.21605446934700012 -0.06741538643836975 -0.9977111220359802 -0.0 1.4762153625488281 0.5751924514770508 0 1.0 0 0.0 0 0.0 0 0.0 2.25893235206604 0.2425430715084076 -0.2839455306529999 0.8996551632881165 0.4365672767162323 -0.0 0.8930968046188354 0.6633660793304443 0 1.0 0 0.0 0 0.0 0 0.0 2.2544105052948 0.25103816390037537 -0.2839455306529999 0.8651387095451355 0.5015106797218323 -0.0 0.8945741653442383 0.6731503009796143 0 1.0 0 0.0 0 0.0 0 0.0 2.2544105052948 0.25103816390037537 0.2160544991493225 0.8651387095451355 0.5015106797218323 -0.0 0.5637426972389221 0.5309652090072632 0 1.0 0 0.0 0 0.0 0 0.0 2.1354739665985107 0.2507304549217224 -0.2839455306529999 -0.4354686141014099 -0.9001739621162415 -0.0 0.9700139164924622 0.7006418704986572 0 1.0 0 0.0 0 0.0 0 0.0 2.1400725841522217 0.24831146001815796 -0.2839455306529999 -0.49580371379852295 -0.8684042096138 -0.0 0.9667751789093018 0.697515070438385 0 1.0 0 0.0 0 0.0 0 0.0 2.1400725841522217 0.24831146001815796 0.21605448424816132 -0.49580371379852295 -0.8684042096138 -0.0 0.5021044611930847 0.5346182584762573 0 1.0 0 0.0 0 0.0 0 0.0 0.3621327877044678 0.11351263523101807 -0.2839455306529999 0.6188848614692688 -0.7854548692703247 -0.0 0.030368447303771973 0.708484947681427 0 1.0 0 0.0 0 0.0 0 0.0 0.3639230728149414 0.11482855677604675 -0.2839455306529999 0.5499130487442017 -0.8352000713348389 -0.0 0.029174327850341797 0.7101534605026245 0 1.0 0 0.0 0 0.0 0 0.0 0.3639230728149414 0.11482855677604675 0.21605446934700012 0.5499130487442017 -0.8352000713348389 -0.0 0.4519915282726288 0.5508368611335754 0 1.0 0 0.0 0 0.0 0 0.0 1.5429184436798096 0.018002808094024658 -0.2839455306529999 0.4862514138221741 0.8738059401512146 -0.0 0.9118235111236572 0.5862239599227905 0 1.0 0 0.0 0 0.0 0 0.0 1.5354154109954834 0.02193109691143036 -0.2839455306529999 0.443800151348114 0.8961150050163269 -0.0 0.9155389070510864 0.5919426679611206 0 1.0 0 0.0 0 0.0 0 0.0 1.5354154109954834 0.02193109691143036 0.21605446934700012 0.443800151348114 0.8961150050163269 -0.0 0.5549329519271851 0.44296425580978394 0 1.0 0 0.0 0 0.0 0 0.0 -0.4122908115386963 0.12093746662139893 -0.2839455306529999 -0.06741538643836975 -0.9977111220359802 -0.0 0.9967317581176758 0.7342070937156677 0 1.0 0 0.0 0 0.0 0 0.0 -0.40654802322387695 0.12035006284713745 -0.2839455306529999 -0.13760796189308167 -0.9904782176017761 -0.0 0.9923887252807617 0.7337468862533569 0 1.0 0 0.0 0 0.0 0 0.0 -0.40654802322387695 0.12035006284713745 0.21605446934700012 -0.13760796189308167 -0.9904782176017761 -0.0 1.4795198440551758 0.5745433568954468 0 1.0 0 0.0 0 0.0 0 0.0 0.4670755863189697 0.11412802338600159 -0.2839455306529999 -0.5681325793266296 -0.8229010701179504 -0.0 0.9538760185241699 0.7094811201095581 0 1.0 0 0.0 0 0.0 0 0.0 0.4697740077972412 0.1121310293674469 -0.2839455306529999 -0.6189153790473938 -0.7854243516921997 -0.0 0.9520689249038696 0.706916332244873 0 1.0 0 0.0 0 0.0 0 0.0 0.4697740077972412 0.1121310293674469 0.21605446934700012 -0.6189153790473938 -0.7854243516921997 -0.0 0.5136004686355591 0.5459519624710083 0 1.0 0 0.0 0 0.0 0 0.0 1.2781085968017578 0.021230563521385193 -0.2839455306529999 -0.790459930896759 -0.6125065088272095 -0.0 0.07325360178947449 0.5927698612213135 0 1.0 0 0.0 0 0.0 0 0.0 1.2833187580108643 0.015069350600242615 -0.2839455306529999 -0.7363200783729553 -0.6765953302383423 -0.0 0.07027402520179749 0.5867006778717041 0 1.0 0 0.0 0 0.0 0 0.0 1.2833187580108643 0.015069350600242615 0.21605446934700012 -0.7363200783729553 -0.6765953302383423 -0.0 0.404155969619751 0.4438803195953369 0 1.0 0 0.0 0 0.0 0 0.0 -0.40654802322387695 0.12035006284713745 -0.2839455306529999 -0.13760796189308167 -0.9904782176017761 -0.0 0.9923887252807617 0.7337468862533569 0 1.0 0 0.0 0 0.0 0 0.0 -0.4009850025177002 0.11937102675437927 -0.2839455306529999 -0.21018096804618835 -0.9776299595832825 -0.0 0.9881839752197266 0.7327767610549927 0 1.0 0 0.0 0 0.0 0 0.0 -0.4009850025177002 0.11937102675437927 0.21605446934700012 -0.21018096804618835 -0.9776299595832825 -0.0 1.4827231168746948 0.5734726786613464 0 1.0 0 0.0 0 0.0 0 0.0 2.041396379470825 0.24781891703605652 -0.2839455306529999 0.4929349720478058 -0.870021641254425 -0.0 0.03721565008163452 0.6926599740982056 0 1.0 0 0.0 0 0.0 0 0.0 2.0461952686309814 0.2503412961959839 -0.2839455306529999 0.4372081756591797 -0.8993194103240967 -0.0 0.034114301204681396 0.6962137818336487 0 1.0 0 0.0 0 0.0 0 0.0 2.0461952686309814 0.2503412961959839 0.21605446934700012 0.4372081756591797 -0.8993194103240967 -0.0 0.4470393657684326 0.5381458401679993 0 1.0 0 0.0 0 0.0 0 0.0 2.1400725841522217 0.24831146001815796 -0.2839455306529999 -0.49580371379852295 -0.8684042096138 -0.0 0.9667751789093018 0.697515070438385 0 1.0 0 0.0 0 0.0 0 0.0 2.144449472427368 0.2456078827381134 -0.2839455306529999 -0.5549790859222412 -0.8318430185317993 -0.0 0.9637418985366821 0.6940274238586426 0 1.0 0 0.0 0 0.0 0 0.0 2.144449472427368 0.2456078827381134 0.21605448424816132 -0.5549790859222412 -0.8318430185317993 -0.0 0.5047039985656738 0.5314600467681885 0 1.0 0 0.0 0 0.0 0 0.0 0.579991340637207 0.1059650182723999 -0.2839455306529999 0.9462873935699463 0.3232520520687103 -0.0 0.8865388035774231 0.6703751087188721 0 1.0 0 0.0 0 0.0 0 0.0 0.5771746635437012 0.11358323693275452 -0.2839455306529999 0.9285256266593933 0.3712576627731323 -0.0 0.8871405124664307 0.6785171031951904 0 1.0 0 0.0 0 0.0 0 0.0 0.5771746635437012 0.11358323693275452 0.21605446934700012 0.9285256266593933 0.3712576627731323 -0.0 0.5691020488739014 0.5396531820297241 0 1.0 0 0.0 0 0.0 0 0.0 1.5497620105743408 0.013962626457214355 -0.2839455306529999 0.5330973267555237 0.8460341095924377 -0.0 0.9085736274719238 0.5805654525756836 0 1.0 0 0.0 0 0.0 0 0.0 1.5429184436798096 0.018002808094024658 -0.2839455306529999 0.4862514138221741 0.8738059401512146 -0.0 0.9118235111236572 0.5862239599227905 0 1.0 0 0.0 0 0.0 0 0.0 1.5429184436798096 0.018002808094024658 0.21605446934700012 0.4862514138221741 0.8738059401512146 -0.0 0.5591180324554443 0.4389606714248657 0 1.0 0 0.0 0 0.0 0 0.0 1.2833187580108643 0.015069350600242615 -0.2839455306529999 -0.7363200783729553 -0.6765953302383423 -0.0 0.07027402520179749 0.5867006778717041 0 1.0 0 0.0 0 0.0 0 0.0 1.2891418933868408 0.009234070777893066 -0.2839455306529999 -0.6795861721038818 -0.7335734367370605 -0.0 0.0669773519039154 0.5809162855148315 0 1.0 0 0.0 0 0.0 0 0.0 1.2891418933868408 0.009234070777893066 0.21605446934700012 -0.6795861721038818 -0.7335734367370605 -0.0 0.4065644145011902 0.43669772148132324 0 1.0 0 0.0 0 0.0 0 0.0 -0.25479650497436523 0.10965245962142944 -0.2839455306529999 0.9059114456176758 0.42344433069229126 -0.0 0.8916356563568115 0.691405177116394 0 1.0 0 0.0 0 0.0 0 0.0 -0.26004815101623535 0.11994022130966187 -0.2839455306529999 0.8735617995262146 0.4866481423377991 -0.0 0.8933745622634888 0.7027099132537842 0 1.0 0 0.0 0 0.0 0 0.0 -0.26004815101623535 0.11994022130966187 0.21605446934700012 0.8735617995262146 0.4866481423377991 -0.0 0.5588341355323792 0.5635035634040833 0 1.0 0 0.0 0 0.0 0 0.0 0.36049818992614746 0.11213347315788269 -0.2839455306529999 0.6719565391540527 -0.7405621409416199 -0.0 0.031444817781448364 0.7067667841911316 0 1.0 0 0.0 0 0.0 0 0.0 0.3621327877044678 0.11351263523101807 -0.2839455306529999 0.6188848614692688 -0.7854548692703247 -0.0 0.030368447303771973 0.708484947681427 0 1.0 0 0.0 0 0.0 0 0.0 0.3621327877044678 0.11351263523101807 0.21605446934700012 0.6188848614692688 -0.7854548692703247 -0.0 0.4509294629096985 0.5494382381439209 0 1.0 0 0.0 0 0.0 0 0.0 -0.4009850025177002 0.11937102675437927 -0.2839455306529999 -0.21018096804618835 -0.9776299595832825 -0.0 0.9881839752197266 0.7327767610549927 0 1.0 0 0.0 0 0.0 0 0.0 -0.3956022262573242 0.11800038814544678 -0.2839455306529999 -0.2839747369289398 -0.9588000178337097 -0.0 0.9841297268867493 0.7313036918640137 0 1.0 0 0.0 0 0.0 0 0.0 -0.3956022262573242 0.11800038814544678 0.21605446934700012 -0.2839747369289398 -0.9588000178337097 -0.0 1.4858251810073853 0.5719797611236572 0 1.0 0 0.0 0 0.0 0 0.0 2.0367677211761475 0.24499979615211487 -0.2839455306529999 0.5467696189880371 -0.8372753262519836 -0.0 0.0401361882686615 0.6887743473052979 0 1.0 0 0.0 0 0.0 0 0.0 2.041396379470825 0.24781891703605652 -0.2839455306529999 0.4929349720478058 -0.870021641254425 -0.0 0.03721565008163452 0.6926599740982056 0 1.0 0 0.0 0 0.0 0 0.0 2.041396379470825 0.24781891703605652 0.21605448424816132 0.4929349720478058 -0.870021641254425 -0.0 0.4442402422428131 0.5354030728340149 0 1.0 0 0.0 0 0.0 0 0.0 0.26553797721862793 0.11276590824127197 -0.2839455306529999 -0.9591967463493347 0.28269293904304504 -0.0 0.08741673827171326 0.6831655502319336 0 1.0 0 0.0 0 0.0 0 0.0 0.26368212699890137 0.10545903444290161 -0.2839455306529999 -0.9776909947395325 0.20999786257743835 -0.0 0.08772853016853333 0.6757197380065918 0 1.0 0 0.0 0 0.0 0 0.0 0.26368212699890137 0.10545903444290161 0.21605446934700012 -0.9776909947395325 0.20999786257743835 -0.0 0.4009059965610504 0.5381927490234375 0 1.0 0 0.0 0 0.0 0 0.0 2.144449472427368 0.2456078827381134 -0.2839455306529999 -0.5549790859222412 -0.8318430185317993 -0.0 0.9637418985366821 0.6940274238586426 0 1.0 0 0.0 0 0.0 0 0.0 2.1486051082611084 0.24261972308158875 -0.2839455306529999 -0.6120181679725647 -0.790826141834259 -0.0 0.960913896560669 0.690185546875 0 1.0 0 0.0 0 0.0 0 0.0 2.1486051082611084 0.24261972308158875 0.21605448424816132 -0.6120181679725647 -0.790826141834259 -0.0 0.507178783416748 0.527972936630249 0 1.0 0 0.0 0 0.0 0 0.0 1.5559461116790771 0.00981055200099945 -0.2839455306529999 0.5844904780387878 0.8113650679588318 -0.0 0.9057615399360657 0.574970006942749 0 1.0 0 0.0 0 0.0 0 0.0 1.5497620105743408 0.013962626457214355 -0.2839455306529999 0.5330973267555237 0.8460341095924377 -0.0 0.9085736274719238 0.5805654525756836 0 1.0 0 0.0 0 0.0 0 0.0 1.5497620105743408 0.013962626457214355 0.21605446934700012 0.5330973267555237 0.8460341095924377 -0.0 0.5628992319107056 0.4349040985107422 0 1.0 0 0.0 0 0.0 0 0.0 -0.3956022262573242 0.11800038814544678 -0.2839455306529999 -0.2839747369289398 -0.9588000178337097 -0.0 0.9841297268867493 0.7313036918640137 0 1.0 0 0.0 0 0.0 0 0.0 -0.3903992176055908 0.11623811721801758 -0.2839455306529999 -0.3577074408531189 -0.9338053464889526 -0.0 0.9802356958389282 0.7293342351913452 0 1.0 0 0.0 0 0.0 0 0.0 -0.3903992176055908 0.11623811721801758 0.21605446934700012 -0.3577074408531189 -0.9338053464889526 -0.0 0.4888266324996948 0.5700627565383911 0 1.0 0 0.0 0 0.0 0 0.0 0.35901927947998047 0.11069107055664062 -0.2839455306529999 0.7252113223075867 -0.6884975433349609 -0.0 0.032404929399490356 0.7050001621246338 0 1.0 0 0.0 0 0.0 0 0.0 0.36049818992614746 0.11213347315788269 -0.2839455306529999 0.6719565391540527 -0.7405621409416199 -0.0 0.031444817781448364 0.7067667841911316 0 1.0 0 0.0 0 0.0 0 0.0 0.36049818992614746 0.11213347315788269 0.21605446934700012 0.6719565391540527 -0.7405621409416199 -0.0 0.44995224475860596 0.5479727387428284 0 1.0 0 0.0 0 0.0 0 0.0 1.5614712238311768 0.005546584725379944 -0.2839455306529999 0.6442762613296509 0.764763355255127 -0.0 0.9033616185188293 0.5694353580474854 0 1.0 0 0.0 0 0.0 0 0.0 1.5559461116790771 0.00981055200099945 -0.2839455306529999 0.5844904780387878 0.8113650679588318 -0.0 0.9057615399360657 0.574970006942749 0 1.0 0 0.0 0 0.0 0 0.0 1.5559461116790771 0.00981055200099945 0.21605446934700012 0.5844904780387878 0.8113650679588318 -0.0 0.5662946105003357 0.43078118562698364 0 1.0 0 0.0 0 0.0 0 0.0 -0.3903992176055908 0.11623811721801758 -0.2839455306529999 -0.3577074408531189 -0.9338053464889526 -0.0 0.9802356958389282 0.7293342351913452 0 1.0 0 0.0 0 0.0 0 0.0 -0.3853764533996582 0.11408424377441406 -0.2839455306529999 -0.4300057888031006 -0.9027985334396362 -0.0 0.976510763168335 0.7268737554550171 0 1.0 0 0.0 0 0.0 0 0.0 -0.3853764533996582 0.11408424377441406 0.21605446934700012 -0.4300057888031006 -0.9027985334396362 -0.0 0.49172791838645935 0.5677193403244019 0 1.0 0 0.0 0 0.0 0 0.0 2.0323092937469482 0.24188390374183655 -0.2839455306529999 0.5980406999588013 -0.8014465570449829 -0.0 0.04287832975387573 0.684563398361206 0 1.0 0 0.0 0 0.0 0 0.0 2.0367677211761475 0.24499979615211487 -0.2839455306529999 0.5467696189880371 -0.8372753262519836 -0.0 0.0401361882686615 0.6887743473052979 0 1.0 0 0.0 0 0.0 0 0.0 2.0367677211761475 0.24499979615211487 0.21605448424816132 0.5467696189880371 -0.8372753262519836 -0.0 0.4415329396724701 0.5323407649993896 0 1.0 0 0.0 0 0.0 0 0.0 0.4697740077972412 0.1121310293674469 -0.2839455306529999 -0.6189153790473938 -0.7854243516921997 -0.0 0.9520689249038696 0.706916332244873 0 1.0 0 0.0 0 0.0 0 0.0 0.4723243713378906 0.10999298095703125 -0.2839455306529999 -0.6656697392463684 -0.7462080717086792 -0.0 0.9503912925720215 0.7042018175125122 0 1.0 0 0.0 0 0.0 0 0.0 0.4723243713378906 0.10999298095703125 0.21605446934700012 -0.6656697392463684 -0.7462080717086792 -0.0 0.5150942206382751 0.5435440540313721 0 1.0 0 0.0 0 0.0 0 0.0 1.2891418933868408 0.009234070777893066 -0.2839455306529999 -0.6795861721038818 -0.7335734367370605 -0.0 0.0669773519039154 0.5809162855148315 0 1.0 0 0.0 0 0.0 0 0.0 1.2955777645111084 0.0037247389554977417 -0.2839455306529999 -0.6217535734176636 -0.7831659913063049 -0.0 0.06334775686264038 0.5754095315933228 0 1.0 0 0.0 0 0.0 0 0.0 1.2955777645111084 0.0037247389554977417 0.21605446934700012 -0.6217535734176636 -0.7831659913063049 -0.0 0.40938490629196167 0.42966437339782715 0 1.0 0 0.0 0 0.0 0 0.0 2.1486051082611084 0.24261972308158875 -0.2839455306529999 -0.6120181679725647 -0.790826141834259 -0.0 0.960913896560669 0.690185546875 0 1.0 0 0.0 0 0.0 0 0.0 2.1525394916534424 0.2393469512462616 -0.2839455306529999 -0.6639912128448486 -0.747703492641449 -0.0 0.958290696144104 0.6859949827194214 0 1.0 0 0.0 0 0.0 0 0.0 2.1525394916534424 0.2393469512462616 0.21605448424816132 -0.6639912128448486 -0.747703492641449 -0.0 0.5095299482345581 0.5241546630859375 0 1.0 0 0.0 0 0.0 0 0.0 -0.3853764533996582 0.11408424377441406 -0.2839455306529999 -0.4300057888031006 -0.9027985334396362 -0.0 0.976510763168335 0.7268737554550171 0 1.0 0 0.0 0 0.0 0 0.0 -0.38053345680236816 0.11153876781463623 -0.2839455306529999 -0.4994964301586151 -0.8662984371185303 -0.0 0.9729613661766052 0.7239266633987427 0 1.0 0 0.0 0 0.0 0 0.0 -0.38053345680236816 0.11153876781463623 0.21605446934700012 -0.4994964301586151 -0.8662984371185303 -0.0 0.49453020095825195 0.564945638179779 0 1.0 0 0.0 0 0.0 0 0.0 0.3576960563659668 0.10918542742729187 -0.2839455306529999 0.7773064374923706 -0.6290780305862427 -0.0 0.033250242471694946 0.7031860947608948 0 1.0 0 0.0 0 0.0 0 0.0 0.35901927947998047 0.11069107055664062 -0.2839455306529999 0.7252113223075867 -0.6884975433349609 -0.0 0.032404929399490356 0.7050001621246338 0 1.0 0 0.0 0 0.0 0 0.0 0.35901927947998047 0.11069107055664062 0.21605446934700012 0.7252113223075867 -0.6884975433349609 -0.0 0.4490593671798706 0.5464398860931396 0 1.0 0 0.0 0 0.0 0 0.0 1.5663940906524658 0.0010247975587844849 -0.2839455306529999 0.7040009498596191 0.7101657390594482 -0.0 0.9013361930847168 0.5637887716293335 0 1.0 0 0.0 0 0.0 0 0.0 1.5614712238311768 0.005546584725379944 -0.2839455306529999 0.6442762613296509 0.764763355255127 -0.0 0.9033616185188293 0.5694353580474854 0 1.0 0 0.0 0 0.0 0 0.0 1.5614712238311768 0.005546584725379944 0.21605446934700012 0.6442762613296509 0.764763355255127 -0.0 0.5693216323852539 0.4265783429145813 0 1.0 0 0.0 0 0.0 0 0.0 -0.38053345680236816 0.11153876781463623 -0.2839455306529999 -0.4994964301586151 -0.8662984371185303 -0.0 0.9729613661766052 0.7239266633987427 0 1.0 0 0.0 0 0.0 0 0.0 -0.3758707046508789 0.1086016595363617 -0.2839455306529999 -0.5649586319923401 -0.8250983953475952 -0.0 0.9695932269096375 0.7204959988594055 0 1.0 0 0.0 0 0.0 0 0.0 -0.3758707046508789 0.1086016595363617 0.21605446934700012 -0.5649586319923401 -0.8250983953475952 -0.0 0.4972342252731323 0.5617371201515198 0 1.0 0 0.0 0 0.0 0 0.0 2.262758493423462 0.23384609818458557 -0.2839455306529999 0.9299905300140381 0.3675343990325928 -0.0 0.8920276165008545 0.6535477638244629 0 1.0 0 0.0 0 0.0 0 0.0 2.25893235206604 0.2425430715084076 -0.2839455306529999 0.8996551632881165 0.4365672767162323 -0.0 0.8930968046188354 0.6633660793304443 0 1.0 0 0.0 0 0.0 0 0.0 2.25893235206604 0.2425430715084076 0.21605448424816132 0.8996551632881165 0.4365672767162323 -0.0 0.5663050413131714 0.5222381353378296 0 1.0 0 0.0 0 0.0 0 0.0 0.4723243713378906 0.10999298095703125 -0.2839455306529999 -0.6656697392463684 -0.7462080717086792 -0.0 0.9503912925720215 0.7042018175125122 0 1.0 0 0.0 0 0.0 0 0.0 0.47472643852233887 0.10771384835243225 -0.2839455306529999 -0.7104098796844482 -0.7037568092346191 -0.0 0.9488418102264404 0.7013393640518188 0 1.0 0 0.0 0 0.0 0 0.0 0.47472643852233887 0.10771384835243225 0.21605446934700012 -0.7104098796844482 -0.7037568092346191 -0.0 0.5165062546730042 0.5409820079803467 0 1.0 0 0.0 0 0.0 0 0.0 1.2955777645111084 0.0037247389554977417 -0.2839455306529999 -0.6217535734176636 -0.7831659913063049 -0.0 0.06334775686264038 0.5754095315933228 0 1.0 0 0.0 0 0.0 0 0.0 1.3026268482208252 -0.0014586597681045532 -0.2839455306529999 -0.5591601133346558 -0.8290352821350098 -0.0 0.05936765670776367 0.5701737403869629 0 1.0 0 0.0 0 0.0 0 0.0 1.3026268482208252 -0.0014586597681045532 0.21605446934700012 -0.5591601133346558 -0.8290352821350098 -0.0 0.412642240524292 0.4227854609489441 0 1.0 0 0.0 0 0.0 0 0.0 1.9182569980621338 0.24249932169914246 -0.2839455306529999 -0.8938566446304321 0.44828638434410095 -0.0 0.10260581970214844 0.6557139158248901 0 1.0 0 0.0 0 0.0 0 0.0 1.914123296737671 0.23349463939666748 -0.2839455306529999 -0.922727108001709 0.38541826605796814 -0.0 0.10352206230163574 0.646332859992981 0 1.0 0 0.0 0 0.0 0 0.0 1.914123296737671 0.23349463939666748 0.21605448424816132 -0.922727108001709 0.38541826605796814 -0.0 0.38311290740966797 0.5189554691314697 0 1.0 0 0.0 0 0.0 0 0.0 -0.25016283988952637 0.09876877069473267 -0.2839455306529999 0.9324930310249329 0.36115604639053345 -0.0 0.8903305530548096 0.6796026229858398 0 1.0 0 0.0 0 0.0 0 0.0 -0.25479650497436523 0.10965245962142944 -0.2839455306529999 0.9059114456176758 0.42344433069229126 -0.0 0.8916356563568115 0.691405177116394 0 1.0 0 0.0 0 0.0 0 0.0 -0.25479650497436523 0.10965245962142944 0.21605446934700012 0.9059114456176758 0.42344433069229126 -0.0 0.5617637038230896 0.5533726215362549 0 1.0 0 0.0 0 0.0 0 0.0 0.35652852058410645 0.10761654376983643 -0.2839455306529999 0.82680743932724 -0.5624561309814453 -0.0 0.033982157707214355 0.7013251185417175 0 1.0 0 0.0 0 0.0 0 0.0 0.3576960563659668 0.10918542742729187 -0.2839455306529999 0.7773064374923706 -0.6290780305862427 -0.0 0.033250242471694946 0.7031860947608948 0 1.0 0 0.0 0 0.0 0 0.0 0.3576960563659668 0.10918542742729187 0.21605446934700012 0.7773064374923706 -0.6290780305862427 -0.0 0.448250412940979 0.5448392033576965 0 1.0 0 0.0 0 0.0 0 0.0 1.5708892345428467 -0.0037840157747268677 -0.2839455306529999 0.7566148638725281 0.6538285613059998 -0.0 0.8995866775512695 0.5579736828804016 0 1.0 0 0.0 0 0.0 0 0.0 1.5663940906524658 0.0010247975587844849 -0.2839455306529999 0.7040009498596191 0.7101657390594482 -0.0 0.9013361930847168 0.5637887716293335 0 1.0 0 0.0 0 0.0 0 0.0 1.5663940906524658 0.0010247975587844849 0.21605446934700012 0.7040009498596191 0.7101657390594482 -0.0 0.5720328688621521 0.42212748527526855 0 1.0 0 0.0 0 0.0 0 0.0 -0.3758707046508789 0.1086016595363617 -0.2839455306529999 -0.5649586319923401 -0.8250983953475952 -0.0 0.9695932269096375 0.7204959988594055 0 1.0 0 0.0 0 0.0 0 0.0 -0.3713877201080322 0.10527294874191284 -0.2839455306529999 -0.6255073547363281 -0.7801751494407654 -0.0 0.9664097428321838 0.7165837287902832 0 1.0 0 0.0 0 0.0 0 0.0 -0.3713877201080322 0.10527294874191284 0.21605446934700012 -0.6255073547363281 -0.7801751494407654 -0.0 0.49984145164489746 0.5580880641937256 0 1.0 0 0.0 0 0.0 0 0.0 2.0280210971832275 0.23847129940986633 -0.2839455306529999 0.6477859020233154 -0.7618030309677124 -0.0 0.045444995164871216 0.6800327301025391 0 1.0 0 0.0 0 0.0 0 0.0 2.0323092937469482 0.24188390374183655 -0.2839455306529999 0.5980406999588013 -0.8014465570449829 -0.0 0.04287832975387573 0.684563398361206 0 1.0 0 0.0 0 0.0 0 0.0 2.0323092937469482 0.24188390374183655 0.21605448424816132 0.5980406999588013 -0.8014465570449829 -0.0 0.4389148950576782 0.5289592742919922 0 1.0 0 0.0 0 0.0 0 0.0 0.47472643852233887 0.10771384835243225 -0.2839455306529999 -0.7104098796844482 -0.7037568092346191 -0.0 0.9488418102264404 0.7013393640518188 0 1.0 0 0.0 0 0.0 0 0.0 0.47697997093200684 0.1052936315536499 -0.2839455306529999 -0.7525253891944885 -0.6585283875465393 -0.0 0.9474191069602966 0.6983301043510437 0 1.0 0 0.0 0 0.0 0 0.0 0.47697997093200684 0.1052936315536499 0.21605446934700012 -0.7525253891944885 -0.6585283875465393 -0.0 0.5178369283676147 0.5382643938064575 0 1.0 0 0.0 0 0.0 0 0.0 1.3026268482208252 -0.0014586597681045532 -0.2839455306529999 -0.5591601133346558 -0.8290352821350098 -0.0 0.05936765670776367 0.5701737403869629 0 1.0 0 0.0 0 0.0 0 0.0 1.3085453510284424 -0.005109667778015137 -0.2839455306529999 -0.4938505291938782 -0.869533360004425 -0.0 0.05601981282234192 0.5664651393890381 0 1.0 0 0.0 0 0.0 0 0.0 1.3085453510284424 -0.005109667778015137 0.21605446934700012 -0.4938505291938782 -0.869533360004425 -0.0 0.41551315784454346 0.4177248477935791 0 1.0 0 0.0 0 0.0 0 0.0 2.1525394916534424 0.2393469512462616 -0.2839455306529999 -0.6639912128448486 -0.747703492641449 -0.0 0.958290696144104 0.6859949827194214 0 1.0 0 0.0 0 0.0 0 0.0 2.1562039852142334 0.23587459325790405 -0.2839455306529999 -0.7098605036735535 -0.7043061852455139 -0.0 0.9559001922607422 0.6815630197525024 0 1.0 0 0.0 0 0.0 0 0.0 2.1562039852142334 0.23587459325790405 0.21605448424816132 -0.7098605036735535 -0.7043061852455139 -0.0 0.5117291212081909 0.5201003551483154 0 1.0 0 0.0 0 0.0 0 0.0 -0.3713877201080322 0.10527294874191284 -0.2839455306529999 -0.6255073547363281 -0.7801751494407654 -0.0 0.9664097428321838 0.7165837287902832 0 1.0 0 0.0 0 0.0 0 0.0 -0.36708498001098633 0.10155263543128967 -0.2839455306529999 -0.6805322170257568 -0.7326883673667908 -0.0 0.9634137153625488 0.7121903896331787 0 1.0 0 0.0 0 0.0 0 0.0 -0.36708498001098633 0.10155263543128967 0.21605446934700012 -0.6805322170257568 -0.7326883673667908 -0.0 0.5023529529571533 0.5539916753768921 0 1.0 0 0.0 0 0.0 0 0.0 0.3555166721343994 0.10598441958427429 -0.2839455306529999 0.8720968961715698 -0.48930326104164124 -0.0 0.03460210561752319 0.6994175910949707 0 1.0 0 0.0 0 0.0 0 0.0 0.35652852058410645 0.10761654376983643 -0.2839455306529999 0.82680743932724 -0.5624561309814453 -0.0 0.033982157707214355 0.7013251185417175 0 1.0 0 0.0 0 0.0 0 0.0 0.35652852058410645 0.10761654376983643 0.21605446934700012 0.82680743932724 -0.5624561309814453 -0.0 0.4475249648094177 0.5431699752807617 0 1.0 0 0.0 0 0.0 0 0.0 1.5749561786651611 -0.008879855275154114 -0.2839455306529999 0.8056581020355225 0.5923642516136169 -0.0 0.8981013298034668 0.5519905090332031 0 1.0 0 0.0 0 0.0 0 0.0 1.5708892345428467 -0.0037840157747268677 -0.2839455306529999 0.7566148638725281 0.6538285613059998 -0.0 0.8995866775512695 0.5579736828804016 0 1.0 0 0.0 0 0.0 0 0.0 1.5708892345428467 -0.0037840157747268677 0.21605446934700012 0.7566148638725281 0.6538285613059998 -0.0 0.5745283365249634 0.4174097776412964 0 1.0 0 0.0 0 0.0 0 0.0 -0.36708498001098633 0.10155263543128967 -0.2839455306529999 -0.6805322170257568 -0.7326883673667908 -0.0 0.9634137153625488 0.7121903896331787 0 1.0 0 0.0 0 0.0 0 0.0 -0.362962007522583 0.0974406898021698 -0.2839455306529999 -0.729667067527771 -0.6837671995162964 -0.0 0.9606061577796936 0.7073150277137756 0 1.0 0 0.0 0 0.0 0 0.0 -0.362962007522583 0.0974406898021698 0.21605446934700012 -0.729667067527771 -0.6837671995162964 -0.0 0.5047703385353088 0.5494404435157776 0 1.0 0 0.0 0 0.0 0 0.0 2.0239274501800537 0.23475462198257446 -0.2839455306529999 0.6968291401863098 -0.7172154784202576 -0.0 0.04782417416572571 0.6751836538314819 0 1.0 0 0.0 0 0.0 0 0.0 2.0280210971832275 0.23847129940986633 -0.2839455306529999 0.6477859020233154 -0.7618030309677124 -0.0 0.045444995164871216 0.6800327301025391 0 1.0 0 0.0 0 0.0 0 0.0 2.0280210971832275 0.23847129940986633 0.21605448424816132 0.6477859020233154 -0.7618030309677124 -0.0 0.4363836348056793 0.525258481502533 0 1.0 0 0.0 0 0.0 0 0.0 1.3085453510284424 -0.005109667778015137 -0.2839455306529999 -0.4938505291938782 -0.869533360004425 -0.0 0.05601981282234192 0.5664651393890381 0 1.0 0 0.0 0 0.0 0 0.0 1.3156745433807373 -0.00882391631603241 -0.2839455306529999 -0.4374523162841797 -0.8992278575897217 -0.0 0.05196726322174072 0.5626709461212158 0 1.0 0 0.0 0 0.0 0 0.0 1.3156745433807373 -0.00882391631603241 0.21605446934700012 -0.4374523162841797 -0.8992278575897217 -0.0 0.4191212058067322 0.41234201192855835 0 1.0 0 0.0 0 0.0 0 0.0 2.1562039852142334 0.23587459325790405 -0.2839455306529999 -0.7098605036735535 -0.7043061852455139 -0.0 0.9559001922607422 0.6815630197525024 0 1.0 0 0.0 0 0.0 0 0.0 2.1595494747161865 0.23228806257247925 -0.2839455306529999 -0.7530442476272583 -0.6579485535621643 -0.0 0.9537681341171265 0.6770002841949463 0 1.0 0 0.0 0 0.0 0 0.0 2.1595494747161865 0.23228806257247925 0.21605448424816132 -0.7530442476272583 -0.6579485535621643 -0.0 0.5137469172477722 0.5159071683883667 0 1.0 0 0.0 0 0.0 0 0.0 0.3546605110168457 0.10428905487060547 -0.2839455306529999 0.9117099642753601 -0.4108096659183502 -0.0 0.03511127829551697 0.6974632740020752 0 1.0 0 0.0 0 0.0 0 0.0 0.3555166721343994 0.10598441958427429 -0.2839455306529999 0.8720968961715698 -0.48930326104164124 -0.0 0.03460210561752319 0.6994175910949707 0 1.0 0 0.0 0 0.0 0 0.0 0.3555166721343994 0.10598441958427429 0.21605446934700012 0.8720968961715698 -0.48930326104164124 -0.0 0.4468827545642853 0.5414315462112427 0 1.0 0 0.0 0 0.0 0 0.0 1.3156745433807373 -0.00882391631603241 -0.2839455306529999 -0.4374523162841797 -0.8992278575897217 -0.0 0.05196726322174072 0.5626709461212158 0 1.0 0 0.0 0 0.0 0 0.0 1.3240149021148682 -0.012601405382156372 -0.2839455306529999 -0.39289528131484985 -0.9195532202720642 -0.0 0.047177255153656006 0.5587553977966309 0 1.0 0 0.0 0 0.0 0 0.0 1.3240149021148682 -0.012601405382156372 0.21605446934700012 -0.39289528131484985 -0.9195532202720642 -0.0 0.42351773381233215 0.4066343903541565 0 1.0 0 0.0 0 0.0 0 0.0 -0.24614691734313965 0.08728915452957153 -0.2839455306529999 0.9537034034729004 0.3006683588027954 -0.0 0.8894327878952026 0.667277991771698 0 1.0 0 0.0 0 0.0 0 0.0 -0.25016283988952637 0.09876877069473267 -0.2839455306529999 0.9324930310249329 0.36115604639053345 -0.0 0.8903305530548096 0.6796026229858398 0 1.0 0 0.0 0 0.0 0 0.0 -0.25016283988952637 0.09876877069473267 0.21605446934700012 0.9324930310249329 0.36115604639053345 -0.0 0.5644399523735046 0.5426000356674194 0 1.0 0 0.0 0 0.0 0 0.0 0.5824871063232422 0.0980159342288971 -0.2839455306529999 0.9540696144104004 0.299539178609848 -0.0 0.8861355781555176 0.6619564890861511 0 1.0 0 0.0 0 0.0 0 0.0 0.579991340637207 0.1059650182723999 -0.2839455306529999 0.9462873935699463 0.3232520520687103 -0.0 0.8865388035774231 0.6703751087188721 0 1.0 0 0.0 0 0.0 0 0.0 0.579991340637207 0.1059650182723999 0.21605446934700012 0.9462873935699463 0.3232520520687103 -0.0 0.5707834959030151 0.5321577787399292 0 1.0 0 0.0 0 0.0 0 0.0 -0.362962007522583 0.0974406898021698 -0.2839455306529999 -0.729667067527771 -0.6837671995162964 -0.0 0.9606061577796936 0.7073150277137756 0 1.0 0 0.0 0 0.0 0 0.0 -0.35901927947998047 0.09293714165687561 -0.2839455306529999 -0.7774590253829956 -0.6289254426956177 -0.0 0.9579875469207764 0.7019557952880859 0 1.0 0 0.0 0 0.0 0 0.0 -0.35901927947998047 0.09293714165687561 0.21605446934700012 -0.7774590253829956 -0.6289254426956177 -0.0 0.5070947408676147 0.5444257855415344 0 1.0 0 0.0 0 0.0 0 0.0 2.020052671432495 0.23072659969329834 -0.2839455306529999 0.7431256771087646 -0.669148862361908 -0.0 0.05000510811805725 0.6700170040130615 0 1.0 0 0.0 0 0.0 0 0.0 2.0239274501800537 0.23475462198257446 -0.2839455306529999 0.6968291401863098 -0.7172154784202576 -0.0 0.04782417416572571 0.6751836538314819 0 1.0 0 0.0 0 0.0 0 0.0 2.0239274501800537 0.23475462198257446 0.21605448424816132 0.6968291401863098 -0.7172154784202576 -0.0 0.43394935131073 0.5212298631668091 0 1.0 0 0.0 0 0.0 0 0.0 0.26368212699890137 0.10545903444290161 -0.2839455306529999 -0.9776909947395325 0.20999786257743835 -0.0 0.08772853016853333 0.6757197380065918 0 1.0 0 0.0 0 0.0 0 0.0 0.2623565196990967 0.09793812036514282 -0.2839455306529999 -0.9904171824455261 0.13800470530986786 -0.0 0.0877656638622284 0.6681522727012634 0 1.0 0 0.0 0 0.0 0 0.0 0.2623565196990967 0.09793812036514282 0.21605446934700012 -0.9904171824455261 0.13800470530986786 -0.0 0.39975273609161377 0.5309807062149048 0 1.0 0 0.0 0 0.0 0 0.0 1.5785949230194092 -0.01426270604133606 -0.2839455306529999 0.8499709963798523 0.5268105268478394 -0.0 0.8968690633773804 0.5458383560180664 0 1.0 0 0.0 0 0.0 0 0.0 1.5749561786651611 -0.008879855275154114 -0.2839455306529999 0.8056581020355225 0.5923642516136169 -0.0 0.8981013298034668 0.5519905090332031 0 1.0 0 0.0 0 0.0 0 0.0 1.5749561786651611 -0.008879855275154114 0.21605446934700012 0.8056581020355225 0.5923642516136169 -0.0 0.5768167972564697 0.41242218017578125 0 1.0 0 0.0 0 0.0 0 0.0 -0.35901927947998047 0.09293714165687561 -0.2839455306529999 -0.7774590253829956 -0.6289254426956177 -0.0 0.9579875469207764 0.7019557952880859 0 1.0 0 0.0 0 0.0 0 0.0 -0.35532689094543457 0.08799093961715698 -0.2839455306529999 -0.82644122838974 -0.5630054473876953 -0.0 0.9556089639663696 0.6960643529891968 0 1.0 0 0.0 0 0.0 0 0.0 -0.35532689094543457 0.08799093961715698 0.21605446934700012 -0.82644122838974 -0.5630054473876953 -0.0 0.5092871785163879 0.5388861894607544 0 1.0 0 0.0 0 0.0 0 0.0 0.47697997093200684 0.1052936315536499 -0.2839455306529999 -0.7525253891944885 -0.6585283875465393 -0.0 0.9474191069602966 0.6983301043510437 0 1.0 0 0.0 0 0.0 0 0.0 0.47908520698547363 0.1027323305606842 -0.2839455306529999 -0.791589081287384 -0.6110110878944397 -0.0 0.9461212158203125 0.6951746940612793 0 1.0 0 0.0 0 0.0 0 0.0 0.47908520698547363 0.1027323305606842 0.21605446934700012 -0.791589081287384 -0.6110110878944397 -0.0 0.519087016582489 0.5353895425796509 0 1.0 0 0.0 0 0.0 0 0.0 2.2658889293670654 0.2249472439289093 -0.2839455306529999 0.9553819298744202 0.2953581213951111 -0.0 0.8913447856903076 0.6436830163002014 0 1.0 0 0.0 0 0.0 0 0.0 2.262758493423462 0.23384609818458557 -0.2839455306529999 0.9299905300140381 0.3675343990325928 -0.0 0.8920276165008545 0.6535477638244629 0 1.0 0 0.0 0 0.0 0 0.0 2.262758493423462 0.23384609818458557 0.21605448424816132 0.9299905300140381 0.3675343990325928 -0.0 0.5685557723045349 0.5133090019226074 0 1.0 0 0.0 0 0.0 0 0.0 1.3240149021148682 -0.012601405382156372 -0.2839455306529999 -0.39289528131484985 -0.9195532202720642 -0.0 0.047177255153656006 0.5587553977966309 0 1.0 0 0.0 0 0.0 0 0.0 1.3335669040679932 -0.016442134976387024 -0.2839455306529999 -0.3570665717124939 -0.9340494871139526 -0.0 0.04161494970321655 0.554681658744812 0 1.0 0 0.0 0 0.0 0 0.0 1.3335669040679932 -0.016442134976387024 0.21605446934700012 -0.3570665717124939 -0.9340494871139526 -0.0 0.42876115441322327 0.40061187744140625 0 1.0 0 0.0 0 0.0 0 0.0 1.914123296737671 0.23349463939666748 -0.2839455306529999 -0.922727108001709 0.38541826605796814 -0.0 0.10352206230163574 0.646332859992981 0 1.0 0 0.0 0 0.0 0 0.0 1.9106242656707764 0.22422727942466736 -0.2839455306529999 -0.9471724629402161 0.32068848609924316 -0.0 0.10414043068885803 0.6368800401687622 0 1.0 0 0.0 0 0.0 0 0.0 1.9106242656707764 0.22422727942466736 0.21605448424816132 -0.9471724629402161 0.32068848609924316 -0.0 0.3810150623321533 0.5104093551635742 0 1.0 0 0.0 0 0.0 0 0.0 -0.35532689094543457 0.08799093961715698 -0.2839455306529999 -0.82644122838974 -0.5630054473876953 -0.0 0.9556089639663696 0.6960643529891968 0 1.0 0 0.0 0 0.0 0 0.0 -0.3519556522369385 0.08255091309547424 -0.2839455306529999 -0.8703573942184448 -0.4923551082611084 -0.0 0.953519344329834 0.689590573310852 0 1.0 0 0.0 0 0.0 0 0.0 -0.3519556522369385 0.08255091309547424 0.21605446934700012 -0.8703573942184448 -0.4923551082611084 -0.0 0.5113084316253662 0.5327562093734741 0 1.0 0 0.0 0 0.0 0 0.0 0.3539600372314453 0.10253044962882996 -0.2839455306529999 0.9444563388824463 -0.32856225967407227 -0.0 0.035510897636413574 0.6954621076583862 0 1.0 0 0.0 0 0.0 0 0.0 0.3546605110168457 0.10428905487060547 -0.2839455306529999 0.9117099642753601 -0.4108096659183502 -0.0 0.03511127829551697 0.6974632740020752 0 1.0 0 0.0 0 0.0 0 0.0 0.3546605110168457 0.10428905487060547 0.21605446934700012 0.9117099642753601 -0.4108096659183502 -0.0 0.4463235139846802 0.5396226644515991 0 1.0 0 0.0 0 0.0 0 0.0 2.1595494747161865 0.23228806257247925 -0.2839455306529999 -0.7530442476272583 -0.6579485535621643 -0.0 0.9537681341171265 0.6770002841949463 0 1.0 0 0.0 0 0.0 0 0.0 2.16257643699646 0.22858721017837524 -0.2839455306529999 -0.7951902747154236 -0.6063417196273804 -0.0 0.9518887996673584 0.6723135113716125 0 1.0 0 0.0 0 0.0 0 0.0 2.16257643699646 0.22858721017837524 0.21605448424816132 -0.7951902747154236 -0.6063417196273804 -0.0 0.5155841708183289 0.5115742087364197 0 1.0 0 0.0 0 0.0 0 0.0 1.581805944442749 -0.0199325829744339 -0.2839455306529999 0.8887600302696228 0.45832696557044983 -0.0 0.8958801031112671 0.5395151972770691 0 1.0 0 0.0 0 0.0 0 0.0 1.5785949230194092 -0.01426270604133606 -0.2839455306529999 0.8499709963798523 0.5268105268478394 -0.0 0.8968690633773804 0.5458383560180664 0 1.0 0 0.0 0 0.0 0 0.0 1.5785949230194092 -0.01426270604133606 0.21605446934700012 0.8499709963798523 0.5268105268478394 -0.0 0.5789067149162292 0.4071614742279053 0 1.0 0 0.0 0 0.0 0 0.0 0.47908520698547363 0.1027323305606842 -0.2839455306529999 -0.791589081287384 -0.6110110878944397 -0.0 0.9461212158203125 0.6951746940612793 0 1.0 0 0.0 0 0.0 0 0.0 0.48104214668273926 0.10002994537353516 -0.2839455306529999 -0.8272347450256348 -0.5618152618408203 -0.0 0.9449462890625 0.6918731927871704 0 1.0 0 0.0 0 0.0 0 0.0 0.48104214668273926 0.10002994537353516 0.21605446934700012 -0.8272347450256348 -0.5618152618408203 -0.0 0.5202569961547852 0.5323554277420044 0 1.0 0 0.0 0 0.0 0 0.0 -0.24274897575378418 0.07521361112594604 -0.2839455306529999 0.9700918793678284 0.24268318712711334 -0.0 0.8889200687408447 0.6544054746627808 0 1.0 0 0.0 0 0.0 0 0.0 -0.24614691734313965 0.08728915452957153 -0.2839455306529999 0.9537034034729004 0.3006683588027954 -0.0 0.8894327878952026 0.667277991771698 0 1.0 0 0.0 0 0.0 0 0.0 -0.24614691734313965 0.08728915452957153 0.21605446934700012 0.9537034034729004 0.3006683588027954 -0.0 0.5668718218803406 0.5311582088470459 0 1.0 0 0.0 0 0.0 0 0.0 1.3335669040679932 -0.016442134976387024 -0.2839455306529999 -0.3570665717124939 -0.9340494871139526 -0.0 0.04161494970321655 0.554681658744812 0 1.0 0 0.0 0 0.0 0 0.0 1.344330072402954 -0.020346105098724365 -0.2839455306529999 -0.32773828506469727 -0.9447309970855713 -0.0 0.03524675965309143 0.5504133701324463 0 1.0 0 0.0 0 0.0 0 0.0 1.344330072402954 -0.020346105098724365 0.21605446934700012 -0.32773828506469727 -0.9447309970855713 -0.0 0.4349140524864197 0.3943028450012207 0 1.0 0 0.0 0 0.0 0 0.0 -0.3519556522369385 0.08255091309547424 -0.2839455306529999 -0.8703573942184448 -0.4923551082611084 -0.0 0.953519344329834 0.689590573310852 0 1.0 0 0.0 0 0.0 0 0.0 -0.3489053249359131 0.07661712169647217 -0.2839455306529999 -0.9055147171020508 -0.42426830530166626 -0.0 0.9517133235931396 0.6825268268585205 0 1.0 0 0.0 0 0.0 0 0.0 -0.3489053249359131 0.07661712169647217 0.21605446934700012 -0.9055147171020508 -0.42426830530166626 -0.0 0.513160228729248 0.5260202884674072 0 1.0 0 0.0 0 0.0 0 0.0 2.0163967609405518 0.22638723254203796 -0.2839455306529999 0.7848750352859497 -0.6196172833442688 -0.0 0.051993101835250854 0.6645351648330688 0 1.0 0 0.0 0 0.0 0 0.0 2.020052671432495 0.23072659969329834 -0.2839455306529999 0.7431256771087646 -0.669148862361908 -0.0 0.05000510811805725 0.6700170040130615 0 1.0 0 0.0 0 0.0 0 0.0 2.020052671432495 0.23072659969329834 0.21605448424816132 0.7431256771087646 -0.669148862361908 -0.0 0.43162181973457336 0.5168639421463013 0 1.0 0 0.0 0 0.0 0 0.0 0.35341525077819824 0.10070860385894775 -0.2839455306529999 0.9696340560913086 -0.24454481899738312 -0.0 0.03580203652381897 0.6934133172035217 0 1.0 0 0.0 0 0.0 0 0.0 0.3539600372314453 0.10253044962882996 -0.2839455306529999 0.9444563388824463 -0.32856225967407227 -0.0 0.035510897636413574 0.6954621076583862 0 1.0 0 0.0 0 0.0 0 0.0 0.3539600372314453 0.10253044962882996 0.21605446934700012 0.9444563388824463 -0.32856225967407227 -0.0 0.44584715366363525 0.5377424955368042 0 1.0 0 0.0 0 0.0 0 0.0 2.16257643699646 0.22858721017837524 -0.2839455306529999 -0.7951902747154236 -0.6063417196273804 -0.0 0.9518887996673584 0.6723135113716125 0 1.0 0 0.0 0 0.0 0 0.0 2.1652848720550537 0.22477203607559204 -0.2839455306529999 -0.8354136943817139 -0.5495772957801819 -0.0 0.95025634765625 0.6675083637237549 0 1.0 0 0.0 0 0.0 0 0.0 2.1652848720550537 0.22477203607559204 0.21605448424816132 -0.8354136943817139 -0.5495772957801819 -0.0 0.5172411203384399 0.5071002244949341 0 1.0 0 0.0 0 0.0 0 0.0 -0.3489053249359131 0.07661712169647217 -0.2839455306529999 -0.9055147171020508 -0.42426830530166626 -0.0 0.9517133235931396 0.6825268268585205 0 1.0 0 0.0 0 0.0 0 0.0 -0.3461761474609375 0.07018956542015076 -0.2839455306529999 -0.9329813718795776 -0.35990479588508606 -0.0 0.9501850008964539 0.6748630404472351 0 1.0 0 0.0 0 0.0 0 0.0 -0.3461761474609375 0.07018956542015076 0.21605446934700012 -0.9329813718795776 -0.35990479588508606 -0.0 0.5148437023162842 0.5186618566513062 0 1.0 0 0.0 0 0.0 0 0.0 1.5845882892608643 -0.025889486074447632 -0.2839455306529999 0.921506404876709 0.3882870078086853 -0.0 0.8951258659362793 0.5330184698104858 0 1.0 0 0.0 0 0.0 0 0.0 1.581805944442749 -0.0199325829744339 -0.2839455306529999 0.8887600302696228 0.45832696557044983 -0.0 0.8958801031112671 0.5395151972770691 0 1.0 0 0.0 0 0.0 0 0.0 1.581805944442749 -0.0199325829744339 0.21605446934700012 0.8887600302696228 0.45832696557044983 -0.0 0.5808056592941284 0.4016239047050476 0 1.0 0 0.0 0 0.0 0 0.0 1.344330072402954 -0.020346105098724365 -0.2839455306529999 -0.32773828506469727 -0.9447309970855713 -0.0 0.03524675965309143 0.5504133701324463 0 1.0 0 0.0 0 0.0 0 0.0 1.3563048839569092 -0.024313315749168396 -0.2839455306529999 -0.3034150302410126 -0.9528489112854004 -0.0 0.028043359518051147 0.545917272567749 0 1.0 0 0.0 0 0.0 0 0.0 1.3563048839569092 -0.024313315749168396 0.21605446934700012 -0.3034150302410126 -0.9528489112854004 -0.0 0.44204047322273254 0.38775986433029175 0 1.0 0 0.0 0 0.0 0 0.0 0.3530261516571045 0.09882351756095886 -0.2839455306529999 0.9869990944862366 -0.16067995131015778 -0.0 0.03598567843437195 0.6913160681724548 0 1.0 0 0.0 0 0.0 0 0.0 0.35341525077819824 0.10070860385894775 -0.2839455306529999 0.9696340560913086 -0.24454481899738312 -0.0 0.03580203652381897 0.6934133172035217 0 1.0 0 0.0 0 0.0 0 0.0 0.35341525077819824 0.10070860385894775 0.21605446934700012 0.9696340560913086 -0.24454481899738312 -0.0 0.44545358419418335 0.5357896089553833 0 1.0 0 0.0 0 0.0 0 0.0 0.48104214668273926 0.10002994537353516 -0.2839455306529999 -0.8272347450256348 -0.5618152618408203 -0.0 0.9449462890625 0.6918731927871704 0 1.0 0 0.0 0 0.0 0 0.0 0.4828505516052246 0.09718650579452515 -0.2839455306529999 -0.8592181205749512 -0.5115817785263062 -0.0 0.943892776966095 0.6884253621101379 0 1.0 0 0.0 0 0.0 0 0.0 0.4828505516052246 0.09718650579452515 0.21605446934700012 -0.8592181205749512 -0.5115817785263062 -0.0 0.5213472843170166 0.5291599035263062 0 1.0 0 0.0 0 0.0 0 0.0 2.0129597187042236 0.22173652052879333 -0.2839455306529999 0.8219855427742004 -0.5694754123687744 -0.0 0.05379372835159302 0.6587395071983337 0 1.0 0 0.0 0 0.0 0 0.0 2.0163967609405518 0.22638723254203796 -0.2839455306529999 0.7848750352859497 -0.6196172833442688 -0.0 0.051993101835250854 0.6645351648330688 0 1.0 0 0.0 0 0.0 0 0.0 2.0163967609405518 0.22638723254203796 0.21605448424816132 0.7848750352859497 -0.6196172833442688 -0.0 0.4293980002403259 0.5121585726737976 0 1.0 0 0.0 0 0.0 0 0.0 -0.23996877670288086 0.06254212558269501 -0.2839455306529999 0.982207715511322 0.18762779235839844 -0.0 0.88877272605896 0.6409586668014526 0 1.0 0 0.0 0 0.0 0 0.0 -0.24274897575378418 0.07521361112594604 -0.2839455306529999 0.9700918793678284 0.24268318712711334 -0.0 0.8889200687408447 0.6544054746627808 0 1.0 0 0.0 0 0.0 0 0.0 -0.24274897575378418 0.07521361112594604 0.21605446934700012 0.9700918793678284 0.24268318712711334 -0.0 0.5690667629241943 0.5190191268920898 0 1.0 0 0.0 0 0.0 0 0.0 1.3563048839569092 -0.024313315749168396 -0.2839455306529999 -0.3034150302410126 -0.9528489112854004 -0.0 0.028043359518051147 0.545917272567749 0 1.0 0 0.0 0 0.0 0 0.0 1.3694908618927002 -0.028343766927719116 -0.2839455306529999 -0.28290659189224243 -0.9591357111930847 -0.0 0.01998576521873474 0.541165828704834 0 1.0 0 0.0 0 0.0 0 0.0 1.3694908618927002 -0.028343766927719116 0.21605446934700012 -0.28290659189224243 -0.9591357111930847 -0.0 0.4501991868019104 0.38106727600097656 0 1.0 0 0.0 0 0.0 0 0.0 2.2683236598968506 0.2158464789390564 -0.2839455306529999 0.9751884341239929 0.2212591916322708 -0.0 0.8910309076309204 0.6337556838989258 0 1.0 0 0.0 0 0.0 0 0.0 2.2658889293670654 0.2249472439289093 -0.2839455306529999 0.9553819298744202 0.2953581213951111 -0.0 0.8913447856903076 0.6436830163002014 0 1.0 0 0.0 0 0.0 0 0.0 2.2658889293670654 0.2249472439289093 0.21605448424816132 0.9553819298744202 0.2953581213951111 -0.0 0.5705021023750305 0.5041624307632446 0 1.0 0 0.0 0 0.0 0 0.0 -0.4925398826599121 0.06576862931251526 -0.2839455306529999 0.9443647861480713 -0.32883694767951965 -0.0 0.05040016770362854 0.6650172472000122 0 1.0 0 0.0 0 0.0 0 0.0 -0.4900953769683838 0.07213538885116577 -0.2839455306529999 0.9208349585533142 -0.3899044692516327 -0.0 0.04923892021179199 0.6724258065223694 0 1.0 0 0.0 0 0.0 0 0.0 -0.4900953769683838 0.07213538885116577 0.21605446934700012 0.9208349585533142 -0.3899044692516327 -0.0 0.430381178855896 0.5236064195632935 0 1.0 0 0.0 0 0.0 0 0.0 0.35279273986816406 0.09687519073486328 -0.2839455306529999 0.9968565702438354 -0.0788903459906578 -0.0 0.036062777042388916 0.6891690492630005 0 1.0 0 0.0 0 0.0 0 0.0 0.3530261516571045 0.09882351756095886 -0.2839455306529999 0.9869990944862366 -0.16067995131015778 -0.0 0.03598567843437195 0.6913160681724548 0 1.0 0 0.0 0 0.0 0 0.0 0.3530261516571045 0.09882351756095886 0.21605446934700012 0.9869990944862366 -0.16067995131015778 -0.0 0.44514283537864685 0.5337626934051514 0 1.0 0 0.0 0 0.0 0 0.0 2.1652848720550537 0.22477203607559204 -0.2839455306529999 -0.8354136943817139 -0.5495772957801819 -0.0 0.95025634765625 0.6675083637237549 0 1.0 0 0.0 0 0.0 0 0.0 2.1676747798919678 0.22084254026412964 -0.2839455306529999 -0.8727683424949646 -0.48808252811431885 -0.0 0.9488654136657715 0.6625887155532837 0 1.0 0 0.0 0 0.0 0 0.0 2.1676747798919678 0.22084254026412964 0.21605448424816132 -0.8727683424949646 -0.48808252811431885 -0.0 0.5187181234359741 0.5024833083152771 0 1.0 0 0.0 0 0.0 0 0.0 -0.3461761474609375 0.07018956542015076 -0.2839455306529999 -0.9329813718795776 -0.35990479588508606 -0.0 0.9501850008964539 0.6748630404472351 0 1.0 0 0.0 0 0.0 0 0.0 -0.3437681198120117 0.06326821446418762 -0.2839455306529999 -0.9539475440979004 -0.299874871969223 -0.0 0.9489279985427856 0.6665880680084229 0 1.0 0 0.0 0 0.0 0 0.0 -0.3437681198120117 0.06326821446418762 0.21605446934700012 -0.9539475440979004 -0.299874871969223 -0.0 0.516359806060791 0.510663628578186 0 1.0 0 0.0 0 0.0 0 0.0 1.5869429111480713 -0.032133400440216064 -0.2839455306529999 0.9480269551277161 0.3180944323539734 -0.0 0.8945986032485962 0.5263450145721436 0 1.0 0 0.0 0 0.0 0 0.0 1.5845882892608643 -0.025889486074447632 -0.2839455306529999 0.921506404876709 0.3882870078086853 -0.0 0.8951258659362793 0.5330184698104858 0 1.0 0 0.0 0 0.0 0 0.0 1.5845882892608643 -0.025889486074447632 0.21605446934700012 0.921506404876709 0.3882870078086853 -0.0 0.5825195908546448 0.3958056569099426 0 1.0 0 0.0 0 0.0 0 0.0 0.4828505516052246 0.09718650579452515 -0.2839455306529999 -0.8592181205749512 -0.5115817785263062 -0.0 0.943892776966095 0.6884253621101379 0 1.0 0 0.0 0 0.0 0 0.0 0.4845106601715088 0.09420198202133179 -0.2839455306529999 -0.887417197227478 -0.460921049118042 -0.0 0.9429585933685303 0.6848305463790894 0 1.0 0 0.0 0 0.0 0 0.0 0.4845106601715088 0.09420198202133179 0.21605446934700012 -0.887417197227478 -0.460921049118042 -0.0 0.5223584175109863 0.5258004069328308 0 1.0 0 0.0 0 0.0 0 0.0 1.3694908618927002 -0.028343766927719116 -0.2839455306529999 -0.28290659189224243 -0.9591357111930847 -0.0 0.01998576521873474 0.541165828704834 0 1.0 0 0.0 0 0.0 0 0.0 1.3838880062103271 -0.032437458634376526 -0.2839455306529999 -0.26541948318481445 -0.964110255241394 -0.0 0.011071175336837769 0.5361419320106506 0 1.0 0 0.0 0 0.0 0 0.0 1.3838880062103271 -0.032437458634376526 0.21605446934700012 -0.26541948318481445 -0.964110255241394 -0.0 0.4594356119632721 0.37434643507003784 0 1.0 0 0.0 0 0.0 0 0.0 1.9106242656707764 0.22422727942466736 -0.2839455306529999 -0.9471724629402161 0.32068848609924316 -0.0 0.10414043068885803 0.6368800401687622 0 1.0 0 0.0 0 0.0 0 0.0 1.9077603816986084 0.2146972119808197 -0.2839455306529999 -0.9669179320335388 0.2550126612186432 -0.0 0.10447537899017334 0.6273366212844849 0 1.0 0 0.0 0 0.0 0 0.0 1.9077603816986084 0.2146972119808197 0.21605448424816132 -0.9669179320335388 0.2550126612186432 -0.0 0.3791377544403076 0.5016137361526489 0 1.0 0 0.0 0 0.0 0 0.0 0.4845106601715088 0.09420198202133179 -0.2839455306529999 -0.887417197227478 -0.460921049118042 -0.0 0.9429585933685303 0.6848305463790894 0 1.0 0 0.0 0 0.0 0 0.0 0.4860224723815918 0.09107637405395508 -0.2839455306529999 -0.9118625521659851 -0.41041290760040283 -0.0 0.9421420097351074 0.6810873746871948 0 1.0 0 0.0 0 0.0 0 0.0 0.4860224723815918 0.09107637405395508 0.21605446934700012 -0.9118625521659851 -0.41041290760040283 -0.0 0.5232906341552734 0.5222742557525635 0 1.0 0 0.0 0 0.0 0 0.0 -0.4946584701538086 0.05900539457798004 -0.2839455306529999 0.9625537991523743 -0.2710043787956238 -0.0 0.05132386088371277 0.657180666923523 0 1.0 0 0.0 0 0.0 0 0.0 -0.4925398826599121 0.06576862931251526 -0.2839455306529999 0.9443647861480713 -0.32883694767951965 -0.0 0.05040016770362854 0.6650172472000122 0 1.0 0 0.0 0 0.0 0 0.0 -0.4925398826599121 0.06576862931251526 0.21605446934700012 0.9443647861480713 -0.32883694767951965 -0.0 0.42868953943252563 0.5167142152786255 0 1.0 0 0.0 0 0.0 0 0.0 -0.3437681198120117 0.06326821446418762 -0.2839455306529999 -0.9539475440979004 -0.299874871969223 -0.0 0.9489279985427856 0.6665880680084229 0 1.0 0 0.0 0 0.0 0 0.0 -0.34168124198913574 0.05585309863090515 -0.2839455306529999 -0.9696340560913086 -0.24448378384113312 -0.0 0.9479355216026306 0.6576895713806152 0 1.0 0 0.0 0 0.0 0 0.0 -0.34168124198913574 0.05585309863090515 0.21605446934700012 -0.9696340560913086 -0.24448378384113312 -0.0 0.5177088975906372 0.5020086765289307 0 1.0 0 0.0 0 0.0 0 0.0 1.588869333267212 -0.03866434097290039 -0.2839455306529999 0.9685049057006836 0.24893948435783386 -0.0 0.8942915797233582 0.5194913744926453 0 1.0 0 0.0 0 0.0 0 0.0 1.5869429111480713 -0.032133400440216064 -0.2839455306529999 0.9480269551277161 0.3180944323539734 -0.0 0.8945986032485962 0.5263450145721436 0 1.0 0 0.0 0 0.0 0 0.0 1.5869429111480713 -0.032133400440216064 0.21605446934700012 0.9480269551277161 0.3180944323539734 -0.0 0.5840545892715454 0.38970285654067993 0 1.0 0 0.0 0 0.0 0 0.0 0.4860224723815918 0.09107637405395508 -0.2839455306529999 -0.9118625521659851 -0.41041290760040283 -0.0 0.9421420097351074 0.6810873746871948 0 1.0 0 0.0 0 0.0 0 0.0 0.48738574981689453 0.08780968189239502 -0.2839455306529999 -0.9327067136764526 -0.36057618260383606 -0.0 0.9414411783218384 0.6771945357322693 0 1.0 0 0.0 0 0.0 0 0.0 0.48738574981689453 0.08780968189239502 0.21605446934700012 -0.9327067136764526 -0.36057618260383606 -0.0 0.5241441130638123 0.5185786485671997 0 1.0 0 0.0 0 0.0 0 0.0 2.0097415447235107 0.21677446365356445 -0.2839455306529999 0.8544571995735168 -0.5194555521011353 -0.0 0.0554124116897583 0.652630627155304 0 1.0 0 0.0 0 0.0 0 0.0 2.0129597187042236 0.22173652052879333 -0.2839455306529999 0.8219855427742004 -0.5694754123687744 -0.0 0.05379372835159302 0.6587395071983337 0 1.0 0 0.0 0 0.0 0 0.0 2.0129597187042236 0.22173652052879333 0.21605448424816132 0.8219855427742004 -0.5694754123687744 -0.0 0.4272748827934265 0.5071110725402832 0 1.0 0 0.0 0 0.0 0 0.0 1.3838880062103271 -0.032437458634376526 -0.2839455306529999 -0.26541948318481445 -0.964110255241394 -0.0 0.011071175336837769 0.5361419320106506 0 1.0 0 0.0 0 0.0 0 0.0 1.3994967937469482 -0.036594390869140625 -0.2839455306529999 -0.25034332275390625 -0.9681386947631836 -0.0 0.0013197362422943115 0.5308443307876587 0 1.0 0 0.0 0 0.0 0 0.0 1.3994967937469482 -0.036594390869140625 0.21605446934700012 -0.25034332275390625 -0.9681386947631836 -0.0 0.46977055072784424 0.3677605390548706 0 1.0 0 0.0 0 0.0 0 0.0 2.1676747798919678 0.22084254026412964 -0.2839455306529999 -0.8727683424949646 -0.48808252811431885 -0.0 0.9488654136657715 0.6625887155532837 0 1.0 0 0.0 0 0.0 0 0.0 2.169746160507202 0.21679872274398804 -0.2839455306529999 -0.9063692092895508 -0.42240670323371887 -0.0 0.9477107524871826 0.6575570106506348 0 1.0 0 0.0 0 0.0 0 0.0 2.169746160507202 0.21679872274398804 0.21605448424816132 -0.9063692092895508 -0.42240670323371887 -0.0 0.5200154185295105 0.4977208375930786 0 1.0 0 0.0 0 0.0 0 0.0 0.48738574981689453 0.08780968189239502 -0.2839455306529999 -0.9327067136764526 -0.36057618260383606 -0.0 0.9414411783218384 0.6771945357322693 0 1.0 0 0.0 0 0.0 0 0.0 0.4886007308959961 0.08440190553665161 -0.2839455306529999 -0.9501022100448608 -0.3119296729564667 -0.0 0.9408544301986694 0.6731500029563904 0 1.0 0 0.0 0 0.0 0 0.0 0.4886007308959961 0.08440190553665161 0.21605446934700012 -0.9501022100448608 -0.3119296729564667 -0.0 0.5249190926551819 0.5147103667259216 0 1.0 0 0.0 0 0.0 0 0.0 -0.2378063201904297 0.049274712800979614 -0.2839455306529999 0.9907223582267761 0.1358378827571869 -0.0 0.8889747858047485 0.6269134283065796 0 1.0 0 0.0 0 0.0 0 0.0 -0.23996877670288086 0.06254212558269501 -0.2839455306529999 0.982207715511322 0.18762779235839844 -0.0 0.88877272605896 0.6409586668014526 0 1.0 0 0.0 0 0.0 0 0.0 -0.23996877670288086 0.06254212558269501 0.21605446934700012 0.982207715511322 0.18762779235839844 -0.0 0.5710310339927673 0.506155252456665 0 1.0 0 0.0 0 0.0 0 0.0 1.3994967937469482 -0.036594390869140625 -0.2839455306529999 -0.25034332275390625 -0.9681386947631836 -0.0 1.0013197660446167 0.5308443307876587 0 1.0 0 0.0 0 0.0 0 0.0 1.4163167476654053 -0.040814563632011414 -0.2839455306529999 -0.2372203767299652 -0.9714346528053284 -0.0 0.9907829761505127 0.5252926349639893 0 1.0 0 0.0 0 0.0 0 0.0 1.4163167476654053 -0.040814563632011414 0.21605446934700012 -0.2372203767299652 -0.9714346528053284 -0.0 1.4811851978302002 0.3615119457244873 0 1.0 0 0.0 0 0.0 0 0.0 2.169746160507202 0.21679872274398804 -0.2839455306529999 -0.9063692092895508 -0.42240670323371887 -0.0 0.9477107524871826 0.6575570106506348 0 1.0 0 0.0 0 0.0 0 0.0 2.1714985370635986 0.21264058351516724 -0.2839455306529999 -0.9354228377342224 -0.35349589586257935 -0.0 0.9467873573303223 0.6524146795272827 0 1.0 0 0.0 0 0.0 0 0.0 2.1714985370635986 0.21264058351516724 0.21605448424816132 -0.9354228377342224 -0.35349589586257935 -0.0 0.5211325287818909 0.4928099513053894 0 1.0 0 0.0 0 0.0 0 0.0 0.4886007308959961 0.08440190553665161 -0.2839455306529999 -0.9501022100448608 -0.3119296729564667 -0.0 0.9408544301986694 0.6731500029563904 0 1.0 0 0.0 0 0.0 0 0.0 0.4896674156188965 0.08085307478904724 -0.2839455306529999 -0.9576708078384399 -0.28785058856010437 -0.0 0.9403797388076782 0.6689515113830566 0 1.0 0 0.0 0 0.0 0 0.0 0.4896674156188965 0.08085307478904724 0.21605446934700012 -0.9576708078384399 -0.28785058856010437 -0.0 0.5256157517433167 0.5106663703918457 0 1.0 0 0.0 0 0.0 0 0.0 -0.49645113945007324 0.05184568464756012 -0.2839455306529999 0.9761955738067627 -0.21677297353744507 -0.0 0.052017420530319214 0.6489062309265137 0 1.0 0 0.0 0 0.0 0 0.0 -0.4946584701538086 0.05900539457798004 -0.2839455306529999 0.9625537991523743 -0.2710043787956238 -0.0 0.05132386088371277 0.657180666923523 0 1.0 0 0.0 0 0.0 0 0.0 -0.4946584701538086 0.05900539457798004 0.21605446934700012 0.9625537991523743 -0.2710043787956238 -0.0 0.42713963985443115 0.509336531162262 0 1.0 0 0.0 0 0.0 0 0.0 0.4896674156188965 0.08085307478904724 -0.2839455306529999 0.1817987561225891 -0.983306348323822 -0.0 0.9403797388076782 0.6689515113830566 0 1.0 0 0.0 0 0.0 0 0.0 0.5824871063232422 0.0980159342288971 -0.2839455306529999 0.1817987561225891 -0.983306348323822 -0.0 0.8861355781555176 0.6619564890861511 0 1.0 0 0.0 0 0.0 0 0.0 0.5824871063232422 0.0980159342288971 0.21605446934700012 0.1817987561225891 -0.983306348323822 -0.0 0.5723457336425781 0.5243042707443237 0 1.0 0 0.0 0 0.0 0 0.0 -0.34168124198913574 0.05585309863090515 -0.2839455306529999 -0.9696340560913086 -0.24448378384113312 -0.0 0.9479355216026306 0.6576895713806152 0 1.0 0 0.0 0 0.0 0 0.0 -0.33991527557373047 0.04794420301914215 -0.2839455306529999 -0.9810479879379272 -0.19373150169849396 -0.0 0.9472004771232605 0.6481556296348572 0 1.0 0 0.0 0 0.0 0 0.0 -0.33991527557373047 0.04794420301914215 0.21605446934700012 -0.9810479879379272 -0.19373150169849396 -0.0 0.5188910961151123 0.49268102645874023 0 1.0 0 0.0 0 0.0 0 0.0 1.5903680324554443 -0.04548230767250061 -0.2839455306529999 0.983306348323822 0.1818903088569641 -0.0 0.8941991329193115 0.5124543905258179 0 1.0 0 0.0 0 0.0 0 0.0 1.588869333267212 -0.03866434097290039 -0.2839455306529999 0.9685049057006836 0.24893948435783386 -0.0 0.8942915797233582 0.5194913744926453 0 1.0 0 0.0 0 0.0 0 0.0 1.588869333267212 -0.03866434097290039 0.21605446934700012 0.9685049057006836 0.24893948435783386 -0.0 0.5854150056838989 0.38331174850463867 0 1.0 0 0.0 0 0.0 0 0.0 0.2623565196990967 0.09793812036514282 -0.2839455306529999 -0.9904171824455261 0.13800470530986786 -0.0 0.0877656638622284 0.6681522727012634 0 1.0 0 0.0 0 0.0 0 0.0 0.26156115531921387 0.09020313620567322 -0.2839455306529999 -0.9976806044578552 0.06784264743328094 -0.0 0.08753547072410583 0.6604450941085815 0 1.0 0 0.0 0 0.0 0 0.0 0.26156115531921387 0.09020313620567322 0.21605446934700012 -0.9976806044578552 0.06784264743328094 -0.0 0.3988074064254761 0.5234965085983276 0 1.0 0 0.0 0 0.0 0 0.0 2.006742238998413 0.21150106191635132 -0.2839455306529999 0.8825342655181885 -0.4701986610889435 -0.0 0.05685460567474365 0.6462084054946899 0 1.0 0 0.0 0 0.0 0 0.0 2.0097415447235107 0.21677446365356445 -0.2839455306529999 0.8544571995735168 -0.5194555521011353 -0.0 0.0554124116897583 0.652630627155304 0 1.0 0 0.0 0 0.0 0 0.0 2.0097415447235107 0.21677446365356445 0.21605448424816132 0.8544571995735168 -0.5194555521011353 -0.0 0.4252496063709259 0.5017184019088745 0 1.0 0 0.0 0 0.0 0 0.0 1.4163167476654053 -0.040814563632011414 -0.2839455306529999 -0.2372203767299652 -0.9714346528053284 -0.0 0.9907829761505127 0.5252926349639893 0 1.0 0 0.0 0 0.0 0 0.0 1.4343478679656982 -0.045097991824150085 -0.2839455306529999 -0.22571489214897156 -0.9741813540458679 -0.0 0.9795480966567993 0.5195319652557373 0 1.0 0 0.0 0 0.0 0 0.0 1.4343478679656982 -0.045097991824150085 0.21605446934700012 -0.22571489214897156 -0.9741813540458679 -0.0 0.4936075210571289 0.35583263635635376 0 1.0 0 0.0 0 0.0 0 0.0 2.2700626850128174 0.20654383301734924 -0.2839455306529999 0.9891964197158813 0.14651936292648315 -0.0 0.8910720348358154 0.6237470507621765 0 1.0 0 0.0 0 0.0 0 0.0 2.2683236598968506 0.2158464789390564 -0.2839455306529999 0.9751884341239929 0.2212591916322708 -0.0 0.8910309076309204 0.6337556838989258 0 1.0 0 0.0 0 0.0 0 0.0 2.2683236598968506 0.2158464789390564 0.21605448424816132 0.9751884341239929 0.2212591916322708 -0.0 0.5721495151519775 0.4947805404663086 0 1.0 0 0.0 0 0.0 0 0.0 -0.49791789054870605 0.04428949952125549 -0.2839455306529999 0.9860530495643616 -0.1663258820772171 -0.0 0.052487730979919434 0.6401838064193726 0 1.0 0 0.0 0 0.0 0 0.0 -0.49645113945007324 0.05184568464756012 -0.2839455306529999 0.9761955738067627 -0.21677297353744507 -0.0 0.052017420530319214 0.6489062309265137 0 1.0 0 0.0 0 0.0 0 0.0 -0.49645113945007324 0.05184568464756012 0.21605446934700012 0.9761955738067627 -0.21677297353744507 -0.0 0.4257296025753021 0.5014607906341553 0 1.0 0 0.0 0 0.0 0 0.0 1.4343478679656982 -0.045097991824150085 -0.2839455306529999 -0.22571489214897156 -0.9741813540458679 -0.0 0.9795480966567993 0.5195319652557373 0 1.0 0 0.0 0 0.0 0 0.0 1.4535901546478271 -0.04944466054439545 -0.2839455306529999 -0.22766807675361633 -0.9737235903739929 -0.0 0.9677410125732422 0.513634443283081 0 1.0 0 0.0 0 0.0 0 0.0 1.4535901546478271 -0.04944466054439545 0.21605446934700012 -0.22766807675361633 -0.9737235903739929 -0.0 0.5069013833999634 0.3509639501571655 0 1.0 0 0.0 0 0.0 0 0.0 0.35271477699279785 0.09486359357833862 -0.2839455306529999 1.0 0.00030518509447574615 -0.0 0.036034226417541504 0.6869708895683289 0 1.0 0 0.0 0 0.0 0 0.0 0.35279273986816406 0.09687519073486328 -0.2839455306529999 0.9968565702438354 -0.0788903459906578 -0.0 0.036062777042388916 0.6891690492630005 0 1.0 0 0.0 0 0.0 0 0.0 0.35279273986816406 0.09687519073486328 0.21605446934700012 0.9968565702438354 -0.0788903459906578 -0.0 0.4449150860309601 0.5316601991653442 0 1.0 0 0.0 0 0.0 0 0.0 1.9077603816986084 0.2146972119808197 -0.2839455306529999 -0.9669179320335388 0.2550126612186432 -0.0 0.10447537899017334 0.6273366212844849 0 1.0 0 0.0 0 0.0 0 0.0 1.9055311679840088 0.2049044370651245 -0.2839455306529999 -0.981872022151947 0.1893673539161682 -0.0 0.10453879833221436 0.6176819205284119 0 1.0 0 0.0 0 0.0 0 0.0 1.9055311679840088 0.2049044370651245 0.21605448424816132 -0.981872022151947 0.1893673539161682 -0.0 0.37747377157211304 0.4925498366355896 0 1.0 0 0.0 0 0.0 0 0.0 -0.23626184463500977 0.03541135787963867 -0.2839455306529999 0.9961546659469604 0.0873439759016037 -0.0 0.8895126581192017 0.6122499108314514 0 1.0 0 0.0 0 0.0 0 0.0 -0.2378063201904297 0.049274712800979614 -0.2839455306529999 0.9907223582267761 0.1358378827571869 -0.0 0.8889747858047485 0.6269134283065796 0 1.0 0 0.0 0 0.0 0 0.0 -0.2378063201904297 0.049274712800979614 0.21605446934700012 0.9907223582267761 0.1358378827571869 -0.0 0.5727694630622864 0.4925420880317688 0 1.0 0 0.0 0 0.0 0 0.0 0.3527829647064209 0.09313416481018066 -0.2839455306529999 0.9967955350875854 0.0799279734492302 -0.0 0.035920560359954834 0.6850960850715637 0 1.0 0 0.0 0 0.0 0 0.0 0.35271477699279785 0.09486359357833862 -0.2839455306529999 1.0 0.00030518509447574615 -0.0 0.036034226417541504 0.6869708895683289 0 1.0 0 0.0 0 0.0 0 0.0 0.35271477699279785 0.09486359357833862 0.21605446934700012 0.999969482421875 0.00030518509447574615 -0.0 0.4447703957557678 0.5294804573059082 0 1.0 0 0.0 0 0.0 0 0.0 2.1714985370635986 0.21264058351516724 -0.2839455306529999 -0.9354228377342224 -0.35349589586257935 -0.0 0.9467873573303223 0.6524146795272827 0 1.0 0 0.0 0 0.0 0 0.0 2.1729323863983154 0.20836812257766724 -0.2839455306529999 -0.9592577815055847 -0.28247931599617004 -0.0 0.9460904598236084 0.6471614837646484 0 1.0 0 0.0 0 0.0 0 0.0 2.1729323863983154 0.20836812257766724 0.21605448424816132 -0.9592577815055847 -0.28247931599617004 -0.0 0.5220695734024048 0.48774731159210205 0 1.0 0 0.0 0 0.0 0 0.0 -0.33991527557373047 0.04794420301914215 -0.2839455306529999 -0.9810479879379272 -0.19373150169849396 -0.0 0.9472004771232605 0.6481556296348572 0 1.0 0 0.0 0 0.0 0 0.0 -0.338470458984375 0.039541542530059814 -0.2839455306529999 -0.9890438318252563 -0.14740440249443054 -0.0 0.9467159509658813 0.637975811958313 0 1.0 0 0.0 0 0.0 0 0.0 -0.338470458984375 0.039541542530059814 0.21605446934700012 -0.9890438318252563 -0.14740440249443054 -0.0 0.5199055075645447 0.4826669692993164 0 1.0 0 0.0 0 0.0 0 0.0 1.5914380550384521 -0.05258728563785553 -0.2839455306529999 0.9930112361907959 0.11780144274234772 -0.0 0.8943167924880981 0.5052310228347778 0 1.0 0 0.0 0 0.0 0 0.0 1.5903680324554443 -0.04548230767250061 -0.2839455306529999 0.983306348323822 0.1818903088569641 -0.0 0.8941991329193115 0.5124543905258179 0 1.0 0 0.0 0 0.0 0 0.0 1.5903680324554443 -0.04548230767250061 0.21605446934700012 0.983306348323822 0.1818903088569641 -0.0 0.5866047143936157 0.37662893533706665 0 1.0 0 0.0 0 0.0 0 0.0 1.4535901546478271 -0.04944466054439545 -0.2839455306529999 -0.22766807675361633 -0.9737235903739929 -0.0 0.9677410125732422 0.513634443283081 0 1.0 0 0.0 0 0.0 0 0.0 1.4577252864837646 -0.05044436454772949 -0.2839455306529999 -0.24390393495559692 -0.9697867035865784 -0.0 0.9652423858642578 0.5122944116592407 0 1.0 0 0.0 0 0.0 0 0.0 1.4577252864837646 -0.05044436454772949 0.21605446934700012 -0.24390393495559692 -0.9697867035865784 -0.0 0.5097460150718689 0.3499676585197449 0 1.0 0 0.0 0 0.0 0 0.0 0.35298728942871094 0.09144851565361023 -0.2839455306529999 0.9868159890174866 0.16180913150310516 -0.0 0.035719335079193115 0.6832844018936157 0 1.0 0 0.0 0 0.0 0 0.0 0.3527829647064209 0.09313416481018066 -0.2839455306529999 0.9967955350875854 0.0799279734492302 -0.0 0.035920560359954834 0.6850960850715637 0 1.0 0 0.0 0 0.0 0 0.0 0.3527829647064209 0.09313416481018066 0.21605446934700012 0.9967955350875854 0.0799279734492302 -0.0 0.4447213411331177 0.5275986194610596 0 1.0 0 0.0 0 0.0 0 0.0 2.0039618015289307 0.20591631531715393 -0.2839455306529999 0.9064912796020508 -0.4221625328063965 -0.0 0.058125704526901245 0.6394720077514648 0 1.0 0 0.0 0 0.0 0 0.0 2.006742238998413 0.21150106191635132 -0.2839455306529999 0.8825342655181885 -0.4701986610889435 -0.0 0.05685460567474365 0.6462084054946899 0 1.0 0 0.0 0 0.0 0 0.0 2.006742238998413 0.21150106191635132 0.21605448424816132 0.8825342655181885 -0.4701986610889435 -0.0 0.4233194589614868 0.49597716331481934 0 1.0 0 0.0 0 0.0 0 0.0 -0.49905872344970703 0.03633683919906616 -0.2839455306529999 0.9927976131439209 -0.11957152187824249 -0.0 0.05274131894111633 0.6310035586357117 0 1.0 0 0.0 0 0.0 0 0.0 -0.49791789054870605 0.04428949952125549 -0.2839455306529999 0.9860530495643616 -0.1663258820772171 -0.0 0.052487730979919434 0.6401838064193726 0 1.0 0 0.0 0 0.0 0 0.0 -0.49791789054870605 0.04428949952125549 0.21605446934700012 0.9860530495643616 -0.1663258820772171 -0.0 0.424457848072052 0.4930746555328369 0 1.0 0 0.0 0 0.0 0 0.0 1.4577252864837646 -0.05044436454772949 -0.2839455306529999 -0.24390393495559692 -0.9697867035865784 -0.0 0.9652423858642578 0.5122944116592407 0 1.0 0 0.0 0 0.0 0 0.0 1.4616072177886963 -0.05145867168903351 -0.2839455306529999 -0.2627643644809723 -0.964842677116394 -0.0 0.9629137516021729 0.5109500885009766 0 1.0 0 0.0 0 0.0 0 0.0 1.4616072177886963 -0.05145867168903351 0.21605446934700012 -0.2627643644809723 -0.964842677116394 -0.0 0.512410044670105 0.34898412227630615 0 1.0 0 0.0 0 0.0 0 0.0 0.35332775115966797 0.08980664610862732 -0.2839455306529999 0.9695730209350586 0.24469740688800812 -0.0 0.03543075919151306 0.6815356016159058 0 1.0 0 0.0 0 0.0 0 0.0 0.35298728942871094 0.09144851565361023 -0.2839455306529999 0.9868159890174866 0.16180913150310516 -0.0 0.035719335079193115 0.6832844018936157 0 1.0 0 0.0 0 0.0 0 0.0 0.35298728942871094 0.09144851565361023 0.21605446934700012 0.9868159890174866 0.16180913150310516 -0.0 0.44475072622299194 0.5257568359375 0 1.0 0 0.0 0 0.0 0 0.0 2.1729323863983154 0.20836812257766724 -0.2839455306529999 -0.9592577815055847 -0.28247931599617004 -0.0 0.9460904598236084 0.6471614837646484 0 1.0 0 0.0 0 0.0 0 0.0 2.1740477085113525 0.20398133993148804 -0.2839455306529999 -0.9775688648223877 -0.21048615872859955 -0.0 0.945615291595459 0.6417965888977051 0 1.0 0 0.0 0 0.0 0 0.0 2.1740477085113525 0.20398133993148804 0.21605448424816132 -0.9775688648223877 -0.21048615872859955 -0.0 0.5228258371353149 0.4825291633605957 0 1.0 0 0.0 0 0.0 0 0.0 -0.338470458984375 0.039541542530059814 -0.2839455306529999 -0.9890438318252563 -0.14740440249443054 -0.0 0.9467159509658813 0.637975811958313 0 1.0 0 0.0 0 0.0 0 0.0 -0.33734679222106934 0.030645102262496948 -0.2839455306529999 -0.9944151043891907 -0.10525833815336227 -0.0 0.9464748501777649 0.6271423101425171 0 1.0 0 0.0 0 0.0 0 0.0 -0.33734679222106934 0.030645102262496948 0.21605446934700012 -0.9944151043891907 -0.10525833815336227 -0.0 0.5207509398460388 0.47195643186569214 0 1.0 0 0.0 0 0.0 0 0.0 0.26156115531921387 0.09020313620567322 -0.2839455306529999 -0.9976806044578552 0.06784264743328094 -0.0 0.08753547072410583 0.6604450941085815 0 1.0 0 0.0 0 0.0 0 0.0 0.26129603385925293 0.08225411176681519 -0.2839455306529999 -0.999969482421875 -0.00079348124563694 -0.0 0.08704373240470886 0.652578592300415 0 1.0 0 0.0 0 0.0 0 0.0 0.26129603385925293 0.08225411176681519 0.21605446934700012 -0.999969482421875 -0.00079348124563694 -0.0 0.39806950092315674 0.5157207250595093 0 1.0 0 0.0 0 0.0 0 0.0 1.4616072177886963 -0.05145867168903351 -0.2839455306529999 -0.2627643644809723 -0.964842677116394 -0.0 0.9629137516021729 0.5109500885009766 0 1.0 0 0.0 0 0.0 0 0.0 1.4652364253997803 -0.0524875670671463 -0.2839455306529999 -0.2840357720851898 -0.9588000178337097 -0.0 0.9607535004615784 0.5096025466918945 0 1.0 0 0.0 0 0.0 0 0.0 1.4652364253997803 -0.0524875670671463 0.21605446934700012 -0.2840357720851898 -0.9588000178337097 -0.0 0.5148946046829224 0.34800630807876587 0 1.0 0 0.0 0 0.0 0 0.0 2.271106004714966 0.19703930616378784 -0.2839455306529999 0.9973449110984802 0.07248146086931229 -0.0 0.8914575576782227 0.6136360168457031 0 1.0 0 0.0 0 0.0 0 0.0 2.2700626850128174 0.20654383301734924 -0.2839455306529999 0.9891964197158813 0.14651936292648315 -0.0 0.8910720348358154 0.6237470507621765 0 1.0 0 0.0 0 0.0 0 0.0 2.2700626850128174 0.20654383301734924 0.21605448424816132 0.9891964197158813 0.14651936292648315 -0.0 0.5735015273094177 0.48514336347579956 0 1.0 0 0.0 0 0.0 0 0.0 -0.49987339973449707 0.027987703680992126 -0.2839455306529999 0.9970701932907104 -0.07647938281297684 -0.0 0.05278405547142029 0.6213566064834595 0 1.0 0 0.0 0 0.0 0 0.0 -0.49905872344970703 0.03633683919906616 -0.2839455306529999 0.9927976131439209 -0.11957152187824249 -0.0 0.05274131894111633 0.6310035586357117 0 1.0 0 0.0 0 0.0 0 0.0 -0.49905872344970703 0.03633683919906616 0.21605446934700012 0.9927976131439209 -0.11957152187824249 -0.0 0.4233233332633972 0.48416680097579956 0 1.0 0 0.0 0 0.0 0 0.0 1.4652364253997803 -0.0524875670671463 -0.2839455306529999 -0.2840357720851898 -0.9588000178337097 -0.0 0.9607535004615784 0.5096025466918945 0 1.0 0 0.0 0 0.0 0 0.0 1.4686124324798584 -0.05353105068206787 -0.2839455306529999 -0.3080843389034271 -0.9513229727745056 -0.0 0.9587600827217102 0.5082523822784424 0 1.0 0 0.0 0 0.0 0 0.0 1.4686124324798584 -0.05353105068206787 0.21605446934700012 -0.3080843389034271 -0.9513229727745056 -0.0 0.5172003507614136 0.3470277190208435 0 1.0 0 0.0 0 0.0 0 0.0 0.3538045883178711 0.08820855617523193 -0.2839455306529999 0.9451277256011963 0.3266701102256775 -0.0 0.035054922103881836 0.6798495054244995 0 1.0 0 0.0 0 0.0 0 0.0 0.35332775115966797 0.08980664610862732 -0.2839455306529999 0.9695730209350586 0.24469740688800812 -0.0 0.03543075919151306 0.6815356016159058 0 1.0 0 0.0 0 0.0 0 0.0 0.35332775115966797 0.08980664610862732 0.21605446934700012 0.9695730209350586 0.24469740688800812 -0.0 0.44485893845558167 0.5239549279212952 0 1.0 0 0.0 0 0.0 0 0.0 2.0014007091522217 0.2000202238559723 -0.2839455306529999 0.9266639947891235 -0.37580493092536926 -0.0 0.05923062562942505 0.6324205994606018 0 1.0 0 0.0 0 0.0 0 0.0 2.0039618015289307 0.20591631531715393 -0.2839455306529999 0.9064912796020508 -0.4221625328063965 -0.0 0.058125704526901245 0.6394720077514648 0 1.0 0 0.0 0 0.0 0 0.0 2.0039618015289307 0.20591631531715393 0.21605448424816132 0.9064912796020508 -0.4221625328063965 -0.0 0.42148181796073914 0.4898841977119446 0 1.0 0 0.0 0 0.0 0 0.0 -0.235335111618042 0.020952075719833374 -0.2839455306529999 0.99908447265625 0.04223761707544327 -0.0 0.8903750777244568 0.5969552993774414 0 1.0 0 0.0 0 0.0 0 0.0 -0.23626184463500977 0.03541135787963867 -0.2839455306529999 0.9961546659469604 0.0873439759016037 -0.0 0.8895126581192017 0.6122499108314514 0 1.0 0 0.0 0 0.0 0 0.0 -0.23626184463500977 0.03541135787963867 0.21605446934700012 0.9961546659469604 0.0873439759016037 -0.0 0.5742851495742798 0.47815972566604614 0 1.0 0 0.0 0 0.0 0 0.0 0.3544175624847412 0.08665427565574646 -0.2839455306529999 0.9138767719268799 0.4059267044067383 -0.0 0.0345919132232666 0.6782255172729492 0 1.0 0 0.0 0 0.0 0 0.0 0.3538045883178711 0.08820855617523193 -0.2839455306529999 0.9451277256011963 0.3266701102256775 -0.0 0.035054922103881836 0.6798495054244995 0 1.0 0 0.0 0 0.0 0 0.0 0.3538045883178711 0.08820855617523193 0.21605446934700012 0.9451277256011963 0.3266701102256775 -0.0 0.445046603679657 0.5221929550170898 0 1.0 0 0.0 0 0.0 0 0.0 1.9055311679840088 0.2049044370651245 -0.2839455306529999 -0.981872022151947 0.1893673539161682 -0.0 0.10453879833221436 0.6176819205284119 0 1.0 0 0.0 0 0.0 0 0.0 1.9039366245269775 0.19484898447990417 -0.2839455306529999 -0.9921872615814209 0.12463758885860443 -0.0 0.10434016585350037 0.6078946590423584 0 1.0 0 0.0 0 0.0 0 0.0 1.9039366245269775 0.19484898447990417 0.21605448424816132 -0.9921872615814209 0.12463758885860443 -0.0 0.3760174810886383 0.4831979274749756 0 1.0 0 0.0 0 0.0 0 0.0 -0.33734679222106934 0.030645102262496948 -0.2839455306529999 -0.9944151043891907 -0.10525833815336227 -0.0 0.9464748501777649 0.6271423101425171 0 1.0 0 0.0 0 0.0 0 0.0 -0.3365440368652344 0.021254897117614746 -0.2839455306529999 -0.9977416396141052 -0.06692709028720856 -0.0 0.9464700222015381 0.6156516075134277 0 1.0 0 0.0 0 0.0 0 0.0 -0.3365440368652344 0.021254897117614746 0.21605446934700012 -0.9977416396141052 -0.06692709028720856 -0.0 0.5214253664016724 0.46054428815841675 0 1.0 0 0.0 0 0.0 0 0.0 1.5920803546905518 -0.05997928977012634 -0.2839455306529999 0.9983519911766052 0.05722220614552498 -0.0 0.894640326499939 0.4978189468383789 0 1.0 0 0.0 0 0.0 0 0.0 1.5914380550384521 -0.05258728563785553 -0.2839455306529999 0.9930112361907959 0.11780144274234772 -0.0 0.8943167924880981 0.5052310228347778 0 1.0 0 0.0 0 0.0 0 0.0 1.5914380550384521 -0.05258728563785553 0.21605446934700012 0.9930112361907959 0.11780144274234772 -0.0 0.5876259803771973 0.36965125799179077 0 1.0 0 0.0 0 0.0 0 0.0 1.4686124324798584 -0.05353105068206787 -0.2839455306529999 -0.3080843389034271 -0.9513229727745056 -0.0 0.9587600827217102 0.5082523822784424 0 1.0 0 0.0 0 0.0 0 0.0 1.4717357158660889 -0.05458913743495941 -0.2839455306529999 -0.33548998832702637 -0.9420148134231567 -0.0 0.9569313526153564 0.5069000720977783 0 1.0 0 0.0 0 0.0 0 0.0 1.4717357158660889 -0.05458913743495941 0.21605446934700012 -0.33548998832702637 -0.9420148134231567 -0.0 0.5193288922309875 0.3460422158241272 0 1.0 0 0.0 0 0.0 0 0.0 0.3551666736602783 0.08514377474784851 -0.2839455306529999 0.8767052292823792 0.48097169399261475 -0.0 0.03404173254966736 0.6766632795333862 0 1.0 0 0.0 0 0.0 0 0.0 0.3544175624847412 0.08665427565574646 -0.2839455306529999 0.9138767719268799 0.4059267044067383 -0.0 0.0345919132232666 0.6782255172729492 0 1.0 0 0.0 0 0.0 0 0.0 0.3544175624847412 0.08665427565574646 0.21605446934700012 0.9138767719268799 0.4059267044067383 -0.0 0.44531404972076416 0.5204707384109497 0 1.0 0 0.0 0 0.0 0 0.0 2.1740477085113525 0.20398133993148804 -0.2839455306529999 -0.9775688648223877 -0.21048615872859955 -0.0 0.945615291595459 0.6417965888977051 0 1.0 0 0.0 0 0.0 0 0.0 2.17484450340271 0.19948023557662964 -0.2839455306529999 -0.9903256297111511 -0.13870662450790405 -0.0 0.9453579187393188 0.6363179683685303 0 1.0 0 0.0 0 0.0 0 0.0 2.17484450340271 0.19948023557662964 0.21605448424816132 -0.9903256297111511 -0.13870662450790405 -0.0 0.5234003663063049 0.47715163230895996 0 1.0 0 0.0 0 0.0 0 0.0 -0.5003623962402344 0.019242078065872192 -0.2839455306529999 0.999298095703125 -0.036805324256420135 -0.0 0.052621930837631226 0.6112359762191772 0 1.0 0 0.0 0 0.0 0 0.0 -0.49987339973449707 0.027987703680992126 -0.2839455306529999 0.9970701932907104 -0.07647938281297684 -0.0 0.05278405547142029 0.6213566064834595 0 1.0 0 0.0 0 0.0 0 0.0 -0.49987339973449707 0.027987703680992126 0.21605446934700012 0.9970701932907104 -0.07647938281297684 -0.0 0.42232567071914673 0.4747272729873657 0 1.0 0 0.0 0 0.0 0 0.0 1.4717357158660889 -0.05458913743495941 -0.2839455306529999 -0.33548998832702637 -0.9420148134231567 -0.0 0.9569313526153564 0.5069000720977783 0 1.0 0 0.0 0 0.0 0 0.0 1.4746057987213135 -0.05566181242465973 -0.2839455306529999 -0.3668935298919678 -0.9302346706390381 -0.0 0.9552655220031738 0.5055458545684814 0 1.0 0 0.0 0 0.0 0 0.0 1.4746057987213135 -0.05566181242465973 0.21605446934700012 -0.3668935298919678 -0.9302346706390381 -0.0 0.5212814807891846 0.34504401683807373 0 1.0 0 0.0 0 0.0 0 0.0 0.3560521602630615 0.08367705345153809 -0.2839455306529999 0.8348338007926941 0.5504318475723267 -0.0 0.03340405225753784 0.6751619577407837 0 1.0 0 0.0 0 0.0 0 0.0 0.3551666736602783 0.08514377474784851 -0.2839455306529999 0.8767052292823792 0.48097169399261475 -0.0 0.03404173254966736 0.6766632795333862 0 1.0 0 0.0 0 0.0 0 0.0 0.3551666736602783 0.08514377474784851 0.21605446934700012 0.8767052292823792 0.48097169399261475 -0.0 0.44566184282302856 0.5187883377075195 0 1.0 0 0.0 0 0.0 0 0.0 -0.3365440368652344 0.021254897117614746 -0.2839455306529999 -0.9977416396141052 -0.06692709028720856 -0.0 0.9464700222015381 0.6156516075134277 0 1.0 0 0.0 0 0.0 0 0.0 -0.3360624313354492 0.011370927095413208 -0.2839455306529999 -0.999481201171875 -0.0320444330573082 -0.0 0.9466947317123413 0.6035062670707703 0 1.0 0 0.0 0 0.0 0 0.0 -0.3360624313354492 0.011370927095413208 0.21605446934700012 -0.999481201171875 -0.0320444330573082 -0.0 0.5219259262084961 0.44843196868896484 0 1.0 0 0.0 0 0.0 0 0.0 1.999058485031128 0.1938127875328064 -0.2839455306529999 0.9434491991996765 -0.33143100142478943 -0.0 0.060174643993377686 0.6250530481338501 0 1.0 0 0.0 0 0.0 0 0.0 2.0014007091522217 0.2000202238559723 -0.2839455306529999 0.9266639947891235 -0.37580493092536926 -0.0 0.05923062562942505 0.6324205994606018 0 1.0 0 0.0 0 0.0 0 0.0 2.0014007091522217 0.2000202238559723 0.21605448424816132 0.9266639947891235 -0.37580493092536926 -0.0 0.41973450779914856 0.4834361672401428 0 1.0 0 0.0 0 0.0 0 0.0 1.4746057987213135 -0.05566181242465973 -0.2839455306529999 -0.3668935298919678 -0.9302346706390381 -0.0 0.9552655220031738 0.5055458545684814 0 1.0 0 0.0 0 0.0 0 0.0 1.4772231578826904 -0.05674909055233002 -0.2839455306529999 -0.4031189978122711 -0.9151280522346497 -0.0 0.9537605047225952 0.5041895508766174 0 1.0 0 0.0 0 0.0 0 0.0 1.4772231578826904 -0.05674909055233002 0.21605446934700012 -0.4031189978122711 -0.9151280522346497 -0.0 0.5230599045753479 0.3440280556678772 0 1.0 0 0.0 0 0.0 0 0.0 0.3570737838745117 0.08225411176681519 -0.2839455306529999 0.7896664142608643 0.6135135889053345 -0.0 0.03267878293991089 0.6737209558486938 0 1.0 0 0.0 0 0.0 0 0.0 0.3560521602630615 0.08367705345153809 -0.2839455306529999 0.8348338007926941 0.5504318475723267 -0.0 0.03340405225753784 0.6751619577407837 0 1.0 0 0.0 0 0.0 0 0.0 0.3560521602630615 0.08367705345153809 0.21605446934700012 0.8348338007926941 0.5504318475723267 -0.0 0.4460906684398651 0.5171455144882202 0 1.0 0 0.0 0 0.0 0 0.0 2.17484450340271 0.19948023557662964 -0.2839455306529999 -0.9903256297111511 -0.13870662450790405 -0.0 0.9453579187393188 0.6363179683685303 0 1.0 0 0.0 0 0.0 0 0.0 2.1753222942352295 0.19486480951309204 -0.2839455306529999 -0.9976500868797302 -0.06833094358444214 -0.0 0.9453150033950806 0.6307230591773987 0 1.0 0 0.0 0 0.0 0 0.0 2.1753222942352295 0.19486480951309204 0.21605448424816132 -0.9976500868797302 -0.06833094358444214 -0.0 0.523791491985321 0.4716107249259949 0 1.0 0 0.0 0 0.0 0 0.0 0.26129603385925293 0.08225411176681519 -0.2839455306529999 -0.999969482421875 -0.00079348124563694 -0.0 0.08704373240470886 0.652578592300415 0 1.0 0 0.0 0 0.0 0 0.0 0.26160287857055664 0.0734853744506836 -0.2839455306529999 -0.9974059462547302 -0.0716574639081955 -0.0 0.08622869849205017 0.6439356207847595 0 1.0 0 0.0 0 0.0 0 0.0 0.26160287857055664 0.0734853744506836 0.21605446934700012 -0.9974059462547302 -0.0716574639081955 -0.0 0.3975098729133606 0.5070275068283081 0 1.0 0 0.0 0 0.0 0 0.0 -0.23502612113952637 0.005896851420402527 -0.2839455306529999 1.0 0.00012207403779029846 -0.0 0.8915530443191528 0.5810273289680481 0 1.0 0 0.0 0 0.0 0 0.0 -0.235335111618042 0.020952075719833374 -0.2839455306529999 0.99908447265625 0.04223761707544327 -0.0 0.8903750777244568 0.5969552993774414 0 1.0 0 0.0 0 0.0 0 0.0 -0.235335111618042 0.020952075719833374 0.21605446934700012 0.99908447265625 0.04223761707544327 -0.0 0.575579822063446 0.46299588680267334 0 1.0 0 0.0 0 0.0 0 0.0 1.4772231578826904 -0.05674909055233002 -0.2839455306529999 -0.4031189978122711 -0.9151280522346497 -0.0 0.9537605047225952 0.5041895508766174 0 1.0 0 0.0 0 0.0 0 0.0 1.4795873165130615 -0.05785095691680908 -0.2839455306529999 -0.4450819492340088 -0.8954740762710571 -0.0 0.9524144530296326 0.502831220626831 0 1.0 0 0.0 0 0.0 0 0.0 1.4795873165130615 -0.05785095691680908 0.21605446934700012 -0.4450819492340088 -0.8954740762710571 -0.0 0.5246654152870178 0.34298932552337646 0 1.0 0 0.0 0 0.0 0 0.0 2.271453619003296 0.18733292818069458 -0.2839455306529999 0.999969482421875 0.0060731833800673485 -0.0 0.8921797275543213 0.6034001111984253 0 1.0 0 0.0 0 0.0 0 0.0 2.271106004714966 0.19703930616378784 -0.2839455306529999 0.9973449110984802 0.07248146086931229 -0.0 0.8914575576782227 0.6136360168457031 0 1.0 0 0.0 0 0.0 0 0.0 2.271106004714966 0.19703930616378784 0.21605448424816132 0.9973449110984802 0.07248146086931229 -0.0 0.5745598077774048 0.4752293825149536 0 1.0 0 0.0 0 0.0 0 0.0 -0.5005252361297607 0.010100007057189941 -0.2839455306529999 0.999969482421875 -0.0021973326802253723 -0.0 0.05225995182991028 0.600637674331665 0 1.0 0 0.0 0 0.0 0 0.0 -0.5003623962402344 0.019242078065872192 -0.2839455306529999 0.999298095703125 -0.036805324256420135 -0.0 0.052621930837631226 0.6112359762191772 0 1.0 0 0.0 0 0.0 0 0.0 -0.5003623962402344 0.019242078065872192 0.21605446934700012 0.999298095703125 -0.036805324256420135 -0.0 0.4214646518230438 0.4647483229637146 0 1.0 0 0.0 0 0.0 0 0.0 1.4795873165130615 -0.05785095691680908 -0.2839455306529999 -0.4450819492340088 -0.8954740762710571 -0.0 0.9524144530296326 0.502831220626831 0 1.0 0 0.0 0 0.0 0 0.0 1.481698751449585 -0.05896741896867752 -0.2839455306529999 -0.4939115643501282 -0.8695028424263 -0.0 0.9512251019477844 0.5014703273773193 0 1.0 0 0.0 0 0.0 0 0.0 1.481698751449585 -0.05896741896867752 0.21605446934700012 -0.4939115643501282 -0.8695028424263 -0.0 0.5260999202728271 0.34192365407943726 0 1.0 0 0.0 0 0.0 0 0.0 0.3582315444946289 0.08087494969367981 -0.2839455306529999 0.7424542903900146 0.669850766658783 -0.0 0.031865477561950684 0.6723393201828003 0 1.0 0 0.0 0 0.0 0 0.0 0.3570737838745117 0.08225411176681519 -0.2839455306529999 0.7896664142608643 0.6135135889053345 -0.0 0.03267878293991089 0.6737209558486938 0 1.0 0 0.0 0 0.0 0 0.0 0.3570737838745117 0.08225411176681519 0.21605446934700012 0.7896664142608643 0.6135135889053345 -0.0 0.4466010630130768 0.5155422687530518 0 1.0 0 0.0 0 0.0 0 0.0 2.1753222942352295 0.19486480951309204 -0.2839455306529999 -0.9976500868797302 -0.06833094358444214 -0.0 0.9453150033950806 0.6307230591773987 0 1.0 0 0.0 0 0.0 0 0.0 2.1754815578460693 0.19013503193855286 -0.2839455306529999 -0.999969482421875 -0.003723258152604103 -0.0 0.9454828500747681 0.6250084638595581 0 1.0 0 0.0 0 0.0 0 0.0 2.1754815578460693 0.19013503193855286 0.21605448424816132 -0.999969482421875 -0.003723258152604103 -0.0 0.5239977240562439 0.46590250730514526 0 1.0 0 0.0 0 0.0 0 0.0 -0.3360624313354492 0.011370927095413208 -0.2839455306529999 -0.999481201171875 -0.0320444330573082 -0.0 0.9466947317123413 0.6035062670707703 0 1.0 0 0.0 0 0.0 0 0.0 -0.33590197563171387 0.0009931772947311401 -0.2839455306529999 -0.999969482421875 0.0004272591322660446 -0.0 0.9471420049667358 0.5907166004180908 0 1.0 0 0.0 0 0.0 0 0.0 -0.33590197563171387 0.0009931772947311401 0.21605446934700012 -0.999969482421875 0.0004272591322660446 -0.0 0.5222489237785339 0.4356297254562378 0 1.0 0 0.0 0 0.0 0 0.0 1.481698751449585 -0.05896741896867752 -0.2839455306529999 -0.4939115643501282 -0.8695028424263 -0.0 0.9512251019477844 0.5014703273773193 0 1.0 0 0.0 0 0.0 0 0.0 1.4835569858551025 -0.06009847670793533 -0.2839455306529999 -0.5507370233535767 -0.8346506953239441 -0.0 0.9501909017562866 0.5001065731048584 0 1.0 0 0.0 0 0.0 0 0.0 1.4835569858551025 -0.06009847670793533 0.21605446934700012 -0.5507370233535767 -0.8346506953239441 -0.0 0.5273644328117371 0.3408268690109253 0 1.0 0 0.0 0 0.0 0 0.0 0.3595256805419922 0.07953956723213196 -0.2839455306529999 0.69454026222229 0.7194433212280273 -0.0 0.030963599681854248 0.6710162162780762 0 1.0 0 0.0 0 0.0 0 0.0 0.3582315444946289 0.08087494969367981 -0.2839455306529999 0.7424542903900146 0.669850766658783 -0.0 0.031865477561950684 0.6723393201828003 0 1.0 0 0.0 0 0.0 0 0.0 0.3582315444946289 0.08087494969367981 0.21605446934700012 0.7424542903900146 0.669850766658783 -0.0 0.4471936523914337 0.5139785408973694 0 1.0 0 0.0 0 0.0 0 0.0 1.9039366245269775 0.19484898447990417 -0.2839455306529999 -0.9921872615814209 0.12463758885860443 -0.0 0.10434016585350037 0.6078946590423584 0 1.0 0 0.0 0 0.0 0 0.0 1.9029772281646729 0.1845308244228363 -0.2839455306529999 -0.9956969022750854 0.09256263822317123 -0.0 0.10388633608818054 0.5979529023170471 0 1.0 0 0.0 0 0.0 0 0.0 1.9029772281646729 0.1845308244228363 0.21605448424816132 -0.9956969022750854 0.09256263822317123 -0.0 0.3747648000717163 0.4735370874404907 0 1.0 0 0.0 0 0.0 0 0.0 -0.5003988742828369 0.000676959753036499 -0.2839455306529999 0.999603271484375 0.02774132415652275 -0.0 0.0517292320728302 0.5896918773651123 0 1.0 0 0.0 0 0.0 0 0.0 -0.5005252361297607 0.010100007057189941 -0.2839455306529999 0.999969482421875 -0.0021973326802253723 -0.0 0.05225995182991028 0.600637674331665 0 1.0 0 0.0 0 0.0 0 0.0 -0.5005252361297607 0.010100007057189941 0.21605446934700012 0.999969482421875 -0.0021973326802253723 -0.0 0.42074114084243774 0.4542253017425537 0 1.0 0 0.0 0 0.0 0 0.0 0.36095595359802246 0.07824796438217163 -0.2839455306529999 0.6469618678092957 0.7625049352645874 -0.0 0.029972761869430542 0.669750452041626 0 1.0 0 0.0 0 0.0 0 0.0 0.3595256805419922 0.07953956723213196 -0.2839455306529999 0.69454026222229 0.7194433212280273 -0.0 0.030963599681854248 0.6710162162780762 0 1.0 0 0.0 0 0.0 0 0.0 0.3595256805419922 0.07953956723213196 0.21605446934700012 0.69454026222229 0.7194433212280273 -0.0 0.44786933064460754 0.5124543905258179 0 1.0 0 0.0 0 0.0 0 0.0 1.592294454574585 -0.06765832006931305 -0.2839455306529999 0.999969482421875 -0.003662221133708954 -0.0 0.8951667547225952 0.4902169108390808 0 1.0 0 0.0 0 0.0 0 0.0 1.5920803546905518 -0.05997928977012634 -0.2839455306529999 0.9983519911766052 0.05722220614552498 -0.0 0.894640326499939 0.4978189468383789 0 1.0 0 0.0 0 0.0 0 0.0 1.5920803546905518 -0.05997928977012634 0.21605446934700012 0.9983519911766052 0.05722220614552498 -0.0 0.5884809494018555 0.36237651109695435 0 1.0 0 0.0 0 0.0 0 0.0 1.9969351291656494 0.18729400634765625 -0.2839455306529999 0.9572435617446899 -0.28919339179992676 -0.0 0.06096261739730835 0.6173686385154724 0 1.0 0 0.0 0 0.0 0 0.0 1.999058485031128 0.1938127875328064 -0.2839455306529999 0.9434491991996765 -0.33143100142478943 -0.0 0.060174643993377686 0.6250530481338501 0 1.0 0 0.0 0 0.0 0 0.0 1.999058485031128 0.1938127875328064 0.21605448424816132 0.9434491991996765 -0.33143100142478943 -0.0 0.41807496547698975 0.4766302704811096 0 1.0 0 0.0 0 0.0 0 0.0 -0.23534107208251953 -0.009677678346633911 -0.2839455306529999 0.999114990234375 -0.041627246886491776 -0.0 0.8930354118347168 0.5645591020584106 0 1.0 0 0.0 0 0.0 0 0.0 -0.23502612113952637 0.005896851420402527 -0.2839455306529999 1.0 0.00012207403779029846 -0.0 0.8915530443191528 0.5810273289680481 0 1.0 0 0.0 0 0.0 0 0.0 -0.23502612113952637 0.005896851420402527 0.21605446934700012 1.0 0.00012207403779029846 -0.0 0.5766531825065613 0.44704872369766235 0 1.0 0 0.0 0 0.0 0 0.0 1.4835569858551025 -0.06009847670793533 -0.2839455306529999 -0.5507370233535767 -0.8346506953239441 -0.0 0.9501909017562866 0.5001065731048584 0 1.0 0 0.0 0 0.0 0 0.0 1.4851624965667725 -0.06124413013458252 -0.2839455306529999 -0.616595983505249 -0.7872554659843445 -0.0 0.9493098258972168 0.4987393021583557 0 1.0 0 0.0 0 0.0 0 0.0 1.4851624965667725 -0.06124413013458252 0.21605446934700012 -0.616595983505249 -0.7872554659843445 -0.0 0.528460681438446 0.3396955132484436 0 1.0 0 0.0 0 0.0 0 0.0 0.3625221252441406 0.07700017094612122 -0.2839455306529999 0.5797296166419983 0.8147831559181213 -0.0 0.028892487287521362 0.668540894985199 0 1.0 0 0.0 0 0.0 0 0.0 0.36095595359802246 0.07824796438217163 -0.2839455306529999 0.6469618678092957 0.7625049352645874 -0.0 0.029972761869430542 0.669750452041626 0 1.0 0 0.0 0 0.0 0 0.0 0.36095595359802246 0.07824796438217163 0.21605446934700012 0.6469618678092957 0.7625049352645874 -0.0 0.448628693819046 0.5109696984291077 0 1.0 0 0.0 0 0.0 0 0.0 2.1754815578460693 0.19013503193855286 -0.2839455306529999 -0.999969482421875 -0.003723258152604103 -0.0 0.9454828500747681 0.6250084638595581 0 1.0 0 0.0 0 0.0 0 0.0 2.175391912460327 0.18671512603759766 -0.2839455306529999 -0.9985656142234802 0.05301064997911453 -0.0 0.9457338452339172 0.6208869218826294 0 1.0 0 0.0 0 0.0 0 0.0 2.175391912460327 0.18671512603759766 0.21605448424816132 -0.9985656142234802 0.05301064997911453 -0.0 0.5240249633789062 0.4617552161216736 0 1.0 0 0.0 0 0.0 0 0.0 -0.33590197563171387 0.0009931772947311401 -0.2839455306529999 -0.999969482421875 0.0004272591322660446 -0.0 0.9471420049667358 0.5907166004180908 0 1.0 0 0.0 0 0.0 0 0.0 -0.3360614776611328 -0.00876675546169281 -0.2839455306529999 -0.999420166015625 0.033783990889787674 -0.0 0.9477471709251404 0.5786771774291992 0 1.0 0 0.0 0 0.0 0 0.0 -0.3360614776611328 -0.00876675546169281 0.21605446934700012 -0.999420166015625 0.033783990889787674 -0.0 0.5223656892776489 0.42353588342666626 0 1.0 0 0.0 0 0.0 0 0.0 1.4851624965667725 -0.06124413013458252 -0.2839455306529999 -0.616595983505249 -0.7872554659843445 -0.0 0.9493098258972168 0.4987393021583557 0 1.0 0 0.0 0 0.0 0 0.0 1.4865148067474365 -0.06240437924861908 -0.2839455306529999 -0.6999725103378296 -0.7141331434249878 -0.0 0.9485805034637451 0.49736785888671875 0 1.0 0 0.0 0 0.0 0 0.0 1.4865148067474365 -0.06240437924861908 0.21605446934700012 -0.6999725103378296 -0.7141331434249878 -0.0 0.5293893814086914 0.33852624893188477 0 1.0 0 0.0 0 0.0 0 0.0 0.36519408226013184 0.07530966401100159 -0.2839455306529999 0.4927823841571808 0.8701131939888 -0.0 0.027060627937316895 0.6669516563415527 0 1.0 0 0.0 0 0.0 0 0.0 0.3625221252441406 0.07700017094612122 -0.2839455306529999 0.5797296166419983 0.8147831559181213 -0.0 0.028892487287521362 0.668540894985199 0 1.0 0 0.0 0 0.0 0 0.0 0.3625221252441406 0.07700017094612122 0.21605446934700012 0.5797296166419983 0.8147831559181213 -0.0 0.4494723379611969 0.5095247030258179 0 1.0 0 0.0 0 0.0 0 0.0 2.2713258266448975 0.18192818760871887 -0.2839455306529999 0.9988707900047302 -0.0474562831223011 -0.0 0.892727255821228 0.597734272480011 0 1.0 0 0.0 0 0.0 0 0.0 2.271453619003296 0.18733292818069458 -0.2839455306529999 0.999969482421875 0.0060731833800673485 -0.0 0.8921797275543213 0.6034001111984253 0 1.0 0 0.0 0 0.0 0 0.0 2.271453619003296 0.18733292818069458 0.21605448424816132 0.999969482421875 0.0060731833800673485 -0.0 0.5753237009048462 0.46501606702804565 0 1.0 0 0.0 0 0.0 0 0.0 -0.5000193119049072 -0.008327707648277283 -0.2839455306529999 0.9983214735984802 0.05777153745293617 -0.0 0.051086753606796265 0.5792196989059448 0 1.0 0 0.0 0 0.0 0 0.0 -0.5003988742828369 0.000676959753036499 -0.2839455306529999 0.999603271484375 0.02774132415652275 -0.0 0.0517292320728302 0.5896918773651123 0 1.0 0 0.0 0 0.0 0 0.0 -0.5003988742828369 0.000676959753036499 0.21605446934700012 0.999603271484375 0.02774132415652275 -0.0 0.4201444983482361 0.44329583644866943 0 1.0 0 0.0 0 0.0 0 0.0 1.4865148067474365 -0.06240437924861908 -0.2839455306529999 -0.6999725103378296 -0.7141331434249878 -0.0 0.9485805034637451 0.49736785888671875 0 1.0 0 0.0 0 0.0 0 0.0 1.4876339435577393 -0.06365705281496048 -0.2839455306529999 -0.7671437859535217 -0.6414380073547363 -0.0 0.9479937553405762 0.49590182304382324 0 1.0 0 0.0 0 0.0 0 0.0 1.4876339435577393 -0.06365705281496048 0.21605446934700012 -0.7671437859535217 -0.6414380073547363 -0.0 0.5301671624183655 0.3372293710708618 0 1.0 0 0.0 0 0.0 0 0.0 0.3687732219696045 0.07350727915763855 -0.2839455306529999 0.4213080108165741 0.9068880081176758 -0.0 0.024613529443740845 0.6653088331222534 0 1.0 0 0.0 0 0.0 0 0.0 0.36519408226013184 0.07530966401100159 -0.2839455306529999 0.4927823841571808 0.8701131939888 -0.0 0.027060627937316895 0.6669516563415527 0 1.0 0 0.0 0 0.0 0 0.0 0.36519408226013184 0.07530966401100159 0.21605446934700012 0.4927823841571808 0.8701131939888 -0.0 0.45094168186187744 0.5075438022613525 0 1.0 0 0.0 0 0.0 0 0.0 1.9950306415557861 0.18046388030052185 -0.2839455306529999 0.9684438705444336 -0.24918362498283386 -0.0 0.061599165201187134 0.6093670129776001 0 1.0 0 0.0 0 0.0 0 0.0 1.9969351291656494 0.18729400634765625 -0.2839455306529999 0.9572435617446899 -0.28919339179992676 -0.0 0.06096261739730835 0.6173686385154724 0 1.0 0 0.0 0 0.0 0 0.0 1.9969351291656494 0.18729400634765625 0.21605448424816132 0.9572435617446899 -0.28919339179992676 -0.0 0.41650107502937317 0.4694640636444092 0 1.0 0 0.0 0 0.0 0 0.0 -0.4993870258331299 -0.016914010047912598 -0.2839455306529999 0.9958800077438354 0.09060945361852646 -0.0 0.05033385753631592 0.5692355036735535 0 1.0 0 0.0 0 0.0 0 0.0 -0.5000193119049072 -0.008327707648277283 -0.2839455306529999 0.9983214735984802 0.05777153745293617 -0.0 0.051086753606796265 0.5792196989059448 0 1.0 0 0.0 0 0.0 0 0.0 -0.5000193119049072 -0.008327707648277283 0.21605446934700012 0.9983214735984802 0.05777153745293617 -0.0 0.4197072982788086 0.4327854514122009 0 1.0 0 0.0 0 0.0 0 0.0 1.3436076641082764 -0.06275463849306107 -0.2839455306529999 -0.1507309228181839 0.9885555505752563 -0.0 0.034252822399139404 0.5006027221679688 0 1.0 0 0.0 0 0.0 0 0.0 1.2448337078094482 -0.0778159350156784 -0.2839455306529999 -0.1507309228181839 0.9885555505752563 -0.0 0.08192142844200134 0.48803091049194336 0 1.0 0 0.0 0 0.0 0 0.0 1.2448337078094482 -0.0778159350156784 0.21605446934700012 -0.1507309228181839 0.9885555505752563 -0.0 0.3779359459877014 0.35555046796798706 0 1.0 0 0.0 0 0.0 0 0.0 0.3732597827911377 0.07159298658370972 -0.2839455306529999 0.3721121847629547 0.9281594157218933 -0.0 0.021542906761169434 0.6635837554931641 0 1.0 0 0.0 0 0.0 0 0.0 0.3687732219696045 0.07350727915763855 -0.2839455306529999 0.4213080108165741 0.9068880081176758 -0.0 0.024613529443740845 0.6653088331222534 0 1.0 0 0.0 0 0.0 0 0.0 0.3687732219696045 0.07350727915763855 0.21605446934700012 0.4213080108165741 0.9068880081176758 -0.0 0.45294809341430664 0.5053983926773071 0 1.0 0 0.0 0 0.0 0 0.0 2.175391912460327 0.18671512603759766 -0.2839455306529999 -0.9985656142234802 0.05301064997911453 -0.0 0.9457338452339172 0.6208869218826294 0 1.0 0 0.0 0 0.0 0 0.0 2.175122022628784 0.18334385752677917 -0.2839455306529999 -0.9942319989204407 0.10705892741680145 -0.0 0.9460951685905457 0.6168336868286133 0 1.0 0 0.0 0 0.0 0 0.0 2.175122022628784 0.18334385752677917 0.21605448424816132 -0.9942319989204407 0.10705892741680145 -0.0 0.5239424109458923 0.45764970779418945 0 1.0 0 0.0 0 0.0 0 0.0 -0.3360614776611328 -0.00876675546169281 -0.2839455306529999 -0.999420166015625 0.033783990889787674 -0.0 0.9477471709251404 0.5786771774291992 0 1.0 0 0.0 0 0.0 0 0.0 -0.33653950691223145 -0.018081560730934143 -0.2839455306529999 -0.9974974989891052 0.07034516334533691 -0.0 0.9485154747962952 0.5672034025192261 0 1.0 0 0.0 0 0.0 0 0.0 -0.33653950691223145 -0.018081560730934143 0.21605446934700012 -0.9974974989891052 0.07034516334533691 -0.0 0.5222747325897217 0.41196632385253906 0 1.0 0 0.0 0 0.0 0 0.0 0.26160287857055664 0.0734853744506836 -0.2839455306529999 -0.9974059462547302 -0.0716574639081955 -0.0 0.08622869849205017 0.6439356207847595 0 1.0 0 0.0 0 0.0 0 0.0 0.26252222061157227 0.06504258513450623 -0.2839455306529999 -0.9891353845596313 -0.14697714149951935 -0.0 0.08516183495521545 0.635638952255249 0 1.0 0 0.0 0 0.0 0 0.0 0.26252222061157227 0.06504258513450623 0.21605446934700012 -0.9891353845596313 -0.14697714149951935 -0.0 0.3972393870353699 0.49852627515792847 0 1.0 0 0.0 0 0.0 0 0.0 1.3447487354278564 -0.06744548678398132 -0.2839455306529999 0.965819239616394 0.25910213589668274 -0.0 0.03346306085586548 0.4952545762062073 0 1.0 0 0.0 0 0.0 0 0.0 1.3436076641082764 -0.06275463849306107 -0.2839455306529999 0.9716482758522034 0.23633533716201782 -0.0 0.034252822399139404 0.5006027221679688 0 1.0 0 0.0 0 0.0 0 0.0 1.3436076641082764 -0.06275463849306107 0.21605446934700012 0.9716482758522034 0.23633533716201782 -0.0 0.4315911829471588 0.34482574462890625 0 1.0 0 0.0 0 0.0 0 0.0 1.9029772281646729 0.1845308244228363 -0.2839455306529999 -0.12308114767074585 -0.9923703670501709 -0.0 0.10388633608818054 0.5979529023170471 0 1.0 0 0.0 0 0.0 0 0.0 1.993345022201538 0.17332243919372559 -0.2839455306529999 -0.12308114767074585 -0.9923703670501709 -0.0 0.062088608741760254 0.6010488271713257 0 1.0 0 0.0 0 0.0 0 0.0 1.993345022201538 0.17332243919372559 0.21605448424816132 -0.12308114767074585 -0.9923703670501709 -0.0 0.41360267996788025 0.4540458917617798 0 1.0 0 0.0 0 0.0 0 0.0 1.4876339435577393 -0.06365705281496048 -0.2839455306529999 -0.7671437859535217 -0.6414380073547363 -0.0 0.9479937553405762 0.49590182304382324 0 1.0 0 0.0 0 0.0 0 0.0 1.4886553287506104 -0.06496324390172958 -0.2839455306529999 -0.807763934135437 -0.5894650220870972 -0.0 0.9474684596061707 0.49438297748565674 0 1.0 0 0.0 0 0.0 0 0.0 1.4886553287506104 -0.06496324390172958 0.21605446934700012 -0.807763934135437 -0.5894650220870972 -0.0 0.5308826565742493 0.33586663007736206 0 1.0 0 0.0 0 0.0 0 0.0 1.993345022201538 0.17332243919372559 -0.2839455306529999 0.9732352495193481 -0.2297128140926361 -0.0 0.062088608741760254 0.6010488271713257 0 1.0 0 0.0 0 0.0 0 0.0 1.9950306415557861 0.18046388030052185 -0.2839455306529999 0.9684438705444336 -0.24918362498283386 -0.0 0.061599165201187134 0.6093670129776001 0 1.0 0 0.0 0 0.0 0 0.0 1.9950306415557861 0.18046388030052185 0.21605448424816132 0.9684438705444336 -0.24918362498283386 -0.0 0.41501089930534363 0.46193617582321167 0 1.0 0 0.0 0 0.0 0 0.0 -0.23628616333007812 -0.02464410662651062 -0.2839455306529999 0.9962767362594604 -0.08603167533874512 -0.0 0.894726037979126 0.5487753748893738 0 1.0 0 0.0 0 0.0 0 0.0 -0.23534107208251953 -0.009677678346633911 -0.2839455306529999 0.999114990234375 -0.041627246886491776 -0.0 0.8930354118347168 0.5645591020584106 0 1.0 0 0.0 0 0.0 0 0.0 -0.23534107208251953 -0.009677678346633911 0.21605446934700012 0.999114990234375 -0.041627246886491776 -0.0 0.5774952173233032 0.430411159992218 0 1.0 0 0.0 0 0.0 0 0.0 0.37865352630615234 0.06956681609153748 -0.2839455306529999 0.33652761578559875 0.9416486024856567 -0.0 0.017840147018432617 0.6617413759231567 0 1.0 0 0.0 0 0.0 0 0.0 0.3732597827911377 0.07159298658370972 -0.2839455306529999 0.3721121847629547 0.9281594157218933 -0.0 0.021542906761169434 0.6635837554931641 0 1.0 0 0.0 0 0.0 0 0.0 0.3732597827911377 0.07159298658370972 0.21605446934700012 0.3721121847629547 0.9281594157218933 -0.0 0.45550355315208435 0.5030808448791504 0 1.0 0 0.0 0 0.0 0 0.0 2.175122022628784 0.18334385752677917 -0.2839455306529999 -0.9942319989204407 0.10705892741680145 -0.0 0.9460951685905457 0.6168336868286133 0 1.0 0 0.0 0 0.0 0 0.0 2.1746718883514404 0.1800212264060974 -0.2839455306529999 -0.9868465065956116 0.16162602603435516 -0.0 0.946566104888916 0.612848162651062 0 1.0 0 0.0 0 0.0 0 0.0 2.1746718883514404 0.1800212264060974 0.21605448424816132 -0.9868465065956116 0.16162602603435516 -0.0 0.5237489342689514 0.45358604192733765 0 1.0 0 0.0 0 0.0 0 0.0 1.4886553287506104 -0.06496324390172958 -0.2839455306529999 -0.807763934135437 -0.5894650220870972 -0.0 0.9474684596061707 0.49438297748565674 0 1.0 0 0.0 0 0.0 0 0.0 1.4895799160003662 -0.0663229450583458 -0.2839455306529999 -0.8454847931861877 -0.5339518189430237 -0.0 0.9470036625862122 0.4928116202354431 0 1.0 0 0.0 0 0.0 0 0.0 1.4895799160003662 -0.0663229450583458 0.21605446934700012 -0.8454847931861877 -0.5339518189430237 -0.0 0.5315366387367249 0.3344380259513855 0 1.0 0 0.0 0 0.0 0 0.0 -0.4985015392303467 -0.025081947445869446 -0.2839455306529999 0.9919431209564209 0.1265602558851242 -0.0 0.049470871686935425 0.5597488880157471 0 1.0 0 0.0 0 0.0 0 0.0 -0.4993870258331299 -0.016914010047912598 -0.2839455306529999 0.9958800077438354 0.09060945361852646 -0.0 0.05033385753631592 0.5692355036735535 0 1.0 0 0.0 0 0.0 0 0.0 -0.4993870258331299 -0.016914010047912598 0.21605446934700012 0.9958800077438354 0.09060945361852646 -0.0 0.41943296790122986 0.42270857095718384 0 1.0 0 0.0 0 0.0 0 0.0 -1.3676784038543701 0.16952788829803467 -0.2839455306529999 0.5797296166419983 0.8147831559181213 -0.0 0.9532722234725952 0.7891139984130859 0 1.0 0 0.0 0 0.0 0 0.0 -1.3721212148666382 0.17253431677818298 -0.2839455306529999 0.5418866276741028 0.8404186964035034 -0.0 0.9560917615890503 0.7928478717803955 0 1.0 0 0.0 0 0.0 0 0.0 -1.3721212148666382 0.17253431677818298 0.21605448424816132 0.5418866276741028 0.8404186964035034 -0.0 0.5884212851524353 0.612917423248291 0 1.0 0 0.0 0 0.0 0 0.0 0.38495469093322754 0.06742876768112183 -0.2839455306529999 0.3096407949924469 0.9508346915245056 -0.0 0.013496875762939453 0.6597400903701782 0 1.0 0 0.0 0 0.0 0 0.0 0.37865352630615234 0.06956681609153748 -0.2839455306529999 0.33652761578559875 0.9416486024856567 -0.0 0.017840147018432617 0.6617413759231567 0 1.0 0 0.0 0 0.0 0 0.0 0.37865352630615234 0.06956681609153748 0.21605446934700012 0.33652761578559875 0.9416486024856567 -0.0 0.4586215019226074 0.5005841851234436 0 1.0 0 0.0 0 0.0 0 0.0 -0.33653950691223145 -0.018081560730934143 -0.2839455306529999 -0.9974974989891052 0.07034516334533691 -0.0 0.9485154747962952 0.5672034025192261 0 1.0 0 0.0 0 0.0 0 0.0 -0.33733606338500977 -0.02695123851299286 -0.2839455306529999 -0.9938657879829407 0.11035493016242981 -0.0 0.9494444131851196 0.5563149452209473 0 1.0 0 0.0 0 0.0 0 0.0 -0.33733606338500977 -0.02695123851299286 0.21605446934700012 -0.9938657879829407 0.11035493016242981 -0.0 0.5219700336456299 0.4009416699409485 0 1.0 0 0.0 0 0.0 0 0.0 1.4895799160003662 -0.0663229450583458 -0.2839455306529999 -0.8454847931861877 -0.5339518189430237 -0.0 0.9470036625862122 0.4928116202354431 0 1.0 0 0.0 0 0.0 0 0.0 1.4904067516326904 -0.06773615628480911 -0.2839455306529999 -0.8796654939651489 -0.4755394160747528 -0.0 0.9465994834899902 0.4911881685256958 0 1.0 0 0.0 0 0.0 0 0.0 1.4904067516326904 -0.06773615628480911 0.21605446934700012 -0.8796654939651489 -0.4755394160747528 -0.0 0.5321288108825684 0.33294278383255005 0 1.0 0 0.0 0 0.0 0 0.0 -1.5943957567214966 0.1705203354358673 -0.2839455306529999 -0.573870062828064 0.8189031481742859 -0.0 0.1309186816215515 0.7704271078109741 0 1.0 0 0.0 0 0.0 0 0.0 -1.600374460220337 0.16600584983825684 -0.2839455306529999 -0.6284676790237427 0.7778252363204956 -0.0 0.13366088271141052 0.7642955780029297 0 1.0 0 0.0 0 0.0 0 0.0 -1.600374460220337 0.16600584983825684 0.21605446934700012 -0.6284676790237427 0.7778252363204956 -0.0 0.47173115611076355 0.5920871496200562 0 1.0 0 0.0 0 0.0 0 0.0 2.2709429264068604 0.17657208442687988 -0.2839455306529999 0.9954222440719604 -0.0953703448176384 -0.0 0.8933857083320618 0.5921443700790405 0 1.0 0 0.0 0 0.0 0 0.0 2.2713258266448975 0.18192818760871887 -0.2839455306529999 0.9988707900047302 -0.0474562831223011 -0.0 0.892727255821228 0.597734272480011 0 1.0 0 0.0 0 0.0 0 0.0 2.2713258266448975 0.18192818760871887 0.21605448424816132 0.9988707900047302 -0.0474562831223011 -0.0 0.5756058096885681 0.45928263664245605 0 1.0 0 0.0 0 0.0 0 0.0 0.3921630382537842 0.06517881155014038 -0.2839455306529999 0.28870511054992676 0.9573961496353149 -0.0 0.008507370948791504 0.6575324535369873 0 1.0 0 0.0 0 0.0 0 0.0 0.38495469093322754 0.06742876768112183 -0.2839455306529999 0.3096407949924469 0.9508346915245056 -0.0 0.013496875762939453 0.6597400903701782 0 1.0 0 0.0 0 0.0 0 0.0 0.38495469093322754 0.06742876768112183 0.21605446934700012 0.3096407949924469 0.9508346915245056 -0.0 0.4623163640499115 0.49790239334106445 0 1.0 0 0.0 0 0.0 0 0.0 2.1746718883514404 0.1800212264060974 -0.2839455306529999 -0.9868465065956116 0.16162602603435516 -0.0 0.946566104888916 0.612848162651062 0 1.0 0 0.0 0 0.0 0 0.0 2.174041986465454 0.17674723267555237 -0.2839455306529999 -0.9762871265411377 0.21634571254253387 -0.0 0.9471457004547119 0.6089298129081726 0 1.0 0 0.0 0 0.0 0 0.0 2.174041986465454 0.17674723267555237 0.21605448424816132 -0.9762871265411377 0.21634571254253387 -0.0 0.5234435200691223 0.4495640993118286 0 1.0 0 0.0 0 0.0 0 0.0 -0.23786115646362305 -0.039002448320388794 -0.2839455306529999 0.9909970164299011 -0.13370159268379211 -0.0 0.8966271877288818 0.53370201587677 0 1.0 0 0.0 0 0.0 0 0.0 -0.23628616333007812 -0.02464410662651062 -0.2839455306529999 0.9962767362594604 -0.08603167533874512 -0.0 0.894726037979126 0.5487753748893738 0 1.0 0 0.0 0 0.0 0 0.0 -0.23628616333007812 -0.02464410662651062 0.21605446934700012 0.9962767362594604 -0.08603167533874512 -0.0 0.5780245661735535 0.41431325674057007 0 1.0 0 0.0 0 0.0 0 0.0 1.346069574356079 -0.07194417715072632 -0.2839455306529999 0.9521775245666504 0.30545976758003235 -0.0 0.032583266496658325 0.49015122652053833 0 1.0 0 0.0 0 0.0 0 0.0 1.3447487354278564 -0.06744548678398132 -0.2839455306529999 0.965819239616394 0.25910213589668274 -0.0 0.03346306085586548 0.4952545762062073 0 1.0 0 0.0 0 0.0 0 0.0 1.3447487354278564 -0.06744548678398132 0.21605446934700012 0.965819239616394 0.25910213589668274 -0.0 0.4319748282432556 0.3392902612686157 0 1.0 0 0.0 0 0.0 0 0.0 -1.363500714302063 0.16640472412109375 -0.2839455306529999 0.6184576153755188 0.7857905626296997 -0.0 0.9507166147232056 0.7853257656097412 0 1.0 0 0.0 0 0.0 0 0.0 -1.3676784038543701 0.16952788829803467 -0.2839455306529999 0.5797296166419983 0.8147831559181213 -0.0 0.9532722234725952 0.7891139984130859 0 1.0 0 0.0 0 0.0 0 0.0 -1.3676784038543701 0.16952788829803467 0.21605446934700012 0.5797296166419983 0.8147831559181213 -0.0 0.5907711982727051 0.6104052066802979 0 1.0 0 0.0 0 0.0 0 0.0 0.40027856826782227 0.06281697750091553 -0.2839455306529999 0.2719199061393738 0.9623096585273743 -0.0 0.002870500087738037 0.6550652384757996 0 1.0 0 0.0 0 0.0 0 0.0 0.3921630382537842 0.06517881155014038 -0.2839455306529999 0.28870511054992676 0.9573961496353149 -0.0 0.008507370948791504 0.6575324535369873 0 1.0 0 0.0 0 0.0 0 0.0 0.3921630382537842 0.06517881155014038 0.21605446934700012 0.28870511054992676 0.9573961496353149 -0.0 0.46660202741622925 0.49503177404403687 0 1.0 0 0.0 0 0.0 0 0.0 2.174041986465454 0.17674723267555237 -0.2839455306529999 -0.9762871265411377 0.21634571254253387 -0.0 0.9471457004547119 0.6089298129081726 0 1.0 0 0.0 0 0.0 0 0.0 2.173231840133667 0.17352190613746643 -0.2839455306529999 -0.9626453518867493 0.2706381380558014 -0.0 0.947833776473999 0.6050781011581421 0 1.0 0 0.0 0 0.0 0 0.0 2.173231840133667 0.17352190613746643 0.21605448424816132 -0.9626453518867493 0.2706381380558014 -0.0 0.5230244994163513 0.4455840587615967 0 1.0 0 0.0 0 0.0 0 0.0 0.26252222061157227 0.06504258513450623 -0.2839455306529999 -0.9891353845596313 -0.14697714149951935 -0.0 0.08516183495521545 0.635638952255249 0 1.0 0 0.0 0 0.0 0 0.0 0.264054536819458 0.05692572891712189 -0.2839455306529999 -0.9741813540458679 -0.22565385699272156 -0.0 0.08384156227111816 0.6276837587356567 0 1.0 0 0.0 0 0.0 0 0.0 0.264054536819458 0.05692572891712189 0.21605446934700012 -0.9741813540458679 -0.22565385699272156 -0.0 0.39726391434669495 0.49021196365356445 0 1.0 0 0.0 0 0.0 0 0.0 -0.4973633289337158 -0.03283150494098663 -0.2839455306529999 0.9861140847206116 0.1658986210823059 -0.0 0.04849809408187866 0.5507650375366211 0 1.0 0 0.0 0 0.0 0 0.0 -0.4985015392303467 -0.025081947445869446 -0.2839455306529999 0.9919431209564209 0.1265602558851242 -0.0 0.049470871686935425 0.5597488880157471 0 1.0 0 0.0 0 0.0 0 0.0 -0.4985015392303467 -0.025081947445869446 0.21605446934700012 0.9919431209564209 0.1265602558851242 -0.0 0.4193257689476013 0.41307467222213745 0 1.0 0 0.0 0 0.0 0 0.0 1.5919973850250244 -0.07608164846897125 -0.2839455306529999 0.9974364638328552 -0.0714743509888649 -0.0 0.8959654569625854 0.4819793105125427 0 1.0 0 0.0 0 0.0 0 0.0 1.592294454574585 -0.06765832006931305 -0.2839455306529999 0.999969482421875 -0.003662221133708954 -0.0 0.8951667547225952 0.4902169108390808 0 1.0 0 0.0 0 0.0 0 0.0 1.592294454574585 -0.06765832006931305 0.21605446934700012 0.999969482421875 -0.003662221133708954 -0.0 0.5891700387001038 0.35480350255966187 0 1.0 0 0.0 0 0.0 0 0.0 -1.3595882654190063 0.16316479444503784 -0.2839455306529999 0.6577044129371643 0.7532578706741333 -0.0 0.9484119415283203 0.7814901471138 0 1.0 0 0.0 0 0.0 0 0.0 -1.363500714302063 0.16640472412109375 -0.2839455306529999 0.6184576153755188 0.7857905626296997 -0.0 0.9507166147232056 0.7853257656097412 0 1.0 0 0.0 0 0.0 0 0.0 -1.363500714302063 0.16640472412109375 0.21605446934700012 0.6184576153755188 0.7857905626296997 -0.0 0.5929959416389465 0.6077929735183716 0 1.0 0 0.0 0 0.0 0 0.0 -0.33733606338500977 -0.02695123851299286 -0.2839455306529999 -0.9938657879829407 0.11035493016242981 -0.0 0.9494444131851196 0.5563149452209473 0 1.0 0 0.0 0 0.0 0 0.0 -0.3384511470794678 -0.03537578880786896 -0.2839455306529999 -0.9880367517471313 0.15405744314193726 -0.0 0.9505323171615601 0.5460243225097656 0 1.0 0 0.0 0 0.0 0 0.0 -0.3384511470794678 -0.03537578880786896 0.21605446934700012 -0.9880367517471313 0.15405744314193726 -0.0 0.5214453935623169 0.3904763460159302 0 1.0 0 0.0 0 0.0 0 0.0 1.4904067516326904 -0.06773615628480911 -0.2839455306529999 -0.8796654939651489 -0.4755394160747528 -0.0 0.9465994834899902 0.4911881685256958 0 1.0 0 0.0 0 0.0 0 0.0 1.4911367893218994 -0.06920288503170013 -0.2839455306529999 -0.9097872972488403 -0.41502121090888977 -0.0 0.9462549090385437 0.48951268196105957 0 1.0 0 0.0 0 0.0 0 0.0 1.4911367893218994 -0.06920288503170013 0.21605446934700012 -0.9097872972488403 -0.41502121090888977 -0.0 0.5326599478721619 0.3313811421394348 0 1.0 0 0.0 0 0.0 0 0.0 -1.600374460220337 0.16600584983825684 -0.2839455306529999 -0.6284676790237427 0.7778252363204956 -0.0 0.13366088271141052 0.7642955780029297 0 1.0 0 0.0 0 0.0 0 0.0 -1.6060515642166138 0.16110217571258545 -0.2839455306529999 -0.6779686808586121 0.7350382804870605 -0.0 0.13606640696525574 0.7579406499862671 0 1.0 0 0.0 0 0.0 0 0.0 -1.6060515642166138 0.16110217571258545 0.21605446934700012 -0.6779686808586121 0.7350382804870605 -0.0 0.46898940205574036 0.5872495174407959 0 1.0 0 0.0 0 0.0 0 0.0 2.2703044414520264 0.1712646186351776 -0.2839455306529999 0.9896237254142761 -0.143559068441391 -0.0 0.8941553831100464 0.5866265892982483 0 1.0 0 0.0 0 0.0 0 0.0 2.2709429264068604 0.17657208442687988 -0.2839455306529999 0.9954222440719604 -0.0953703448176384 -0.0 0.8933857083320618 0.5921443700790405 0 1.0 0 0.0 0 0.0 0 0.0 2.2709429264068604 0.17657208442687988 0.21605448424816132 0.9954222440719604 -0.0953703448176384 -0.0 0.5757695436477661 0.4535619616508484 0 1.0 0 0.0 0 0.0 0 0.0 0.4093015193939209 0.06034325063228607 -0.2839455306529999 0.25818657875061035 0.9660634398460388 -0.0 0.9965918064117432 0.6522815227508545 0 1.0 0 0.0 0 0.0 0 0.0 0.40027856826782227 0.06281697750091553 -0.2839455306529999 0.2719199061393738 0.9623096585273743 -0.0 1.0028705596923828 0.6550652384757996 0 1.0 0 0.0 0 0.0 0 0.0 0.40027856826782227 0.06281697750091553 0.21605446934700012 0.2719199061393738 0.9623096585273743 -0.0 1.471490740776062 0.49197155237197876 0 1.0 0 0.0 0 0.0 0 0.0 2.173231840133667 0.17352190613746643 -0.2839455306529999 -0.9626453518867493 0.2706381380558014 -0.0 0.947833776473999 0.6050781011581421 0 1.0 0 0.0 0 0.0 0 0.0 2.1722419261932373 0.1703452169895172 -0.2839455306529999 -0.9460127353668213 0.3240455389022827 -0.0 0.9486297369003296 0.6012919545173645 0 1.0 0 0.0 0 0.0 0 0.0 2.1722419261932373 0.1703452169895172 0.21605446934700012 -0.9460127353668213 0.3240455389022827 -0.0 0.5224907398223877 0.44164609909057617 0 1.0 0 0.0 0 0.0 0 0.0 1.4911367893218994 -0.06920288503170013 -0.2839455306529999 -0.9097872972488403 -0.41502121090888977 -0.0 0.9462549090385437 0.48951268196105957 0 1.0 0 0.0 0 0.0 0 0.0 1.4917690753936768 -0.07072312384843826 -0.2839455306529999 -0.9355449080467224 -0.35312968492507935 -0.0 0.9459701180458069 0.4877855181694031 0 1.0 0 0.0 0 0.0 0 0.0 1.4917690753936768 -0.07072312384843826 0.21605446934700012 -0.9355449080467224 -0.35312968492507935 -0.0 0.5331296324729919 0.3297526240348816 0 1.0 0 0.0 0 0.0 0 0.0 -0.4959719181060791 -0.040162697434425354 -0.2839455306529999 0.9779046177864075 0.20896023511886597 -0.0 0.04741498827934265 0.5422860383987427 0 1.0 0 0.0 0 0.0 0 0.0 -0.4973633289337158 -0.03283150494098663 -0.2839455306529999 0.9861140847206116 0.1658986210823059 -0.0 0.04849809408187866 0.5507650375366211 0 1.0 0 0.0 0 0.0 0 0.0 -0.4973633289337158 -0.03283150494098663 0.21605446934700012 0.9861140847206116 0.1658986210823059 -0.0 0.41938960552215576 0.40388965606689453 0 1.0 0 0.0 0 0.0 0 0.0 -1.3559409379959106 0.15980809926986694 -0.2839455306529999 0.6970732808113098 0.7169713377952576 -0.0 0.9463456273078918 0.777612566947937 0 1.0 0 0.0 0 0.0 0 0.0 -1.3595882654190063 0.16316479444503784 -0.2839455306529999 0.6577044129371643 0.7532578706741333 -0.0 0.9484119415283203 0.7814901471138 0 1.0 0 0.0 0 0.0 0 0.0 -1.3595882654190063 0.16316479444503784 0.21605446934700012 0.6577044129371643 0.7532578706741333 -0.0 0.5950978398323059 0.6050815582275391 0 1.0 0 0.0 0 0.0 0 0.0 0.419231653213501 0.057757630944252014 -0.2839455306529999 0.2467421442270279 0.9690542221069336 -0.0 0.9896869659423828 0.6491220593452454 0 1.0 0 0.0 0 0.0 0 0.0 0.4093015193939209 0.06034325063228607 -0.2839455306529999 0.25818657875061035 0.9660634398460388 -0.0 0.9965918064117432 0.6522815227508545 0 1.0 0 0.0 0 0.0 0 0.0 0.4093015193939209 0.06034325063228607 0.21605446934700012 0.25818657875061035 0.9660634398460388 -0.0 1.4769912958145142 0.48872554302215576 0 1.0 0 0.0 0 0.0 0 0.0 -0.3384511470794678 -0.03537578880786896 -0.2839455306529999 -0.9880367517471313 0.15405744314193726 -0.0 0.9505323171615601 0.5460243225097656 0 1.0 0 0.0 0 0.0 0 0.0 -0.33988499641418457 -0.04335521161556244 -0.2839455306529999 -0.9794304966926575 0.20175786316394806 -0.0 0.9517782330513 0.5363379716873169 0 1.0 0 0.0 0 0.0 0 0.0 -0.33988499641418457 -0.04335521161556244 0.21605446934700012 -0.9794304966926575 0.20175786316394806 -0.0 0.5206946134567261 0.38057905435562134 0 1.0 0 0.0 0 0.0 0 0.0 1.4917690753936768 -0.07072312384843826 -0.2839455306529999 -0.9355449080467224 -0.35312968492507935 -0.0 0.9459701180458069 0.4877855181694031 0 1.0 0 0.0 0 0.0 0 0.0 1.4923040866851807 -0.0722968727350235 -0.2839455306529999 -0.9567247629165649 -0.29096347093582153 -0.0 0.945744514465332 0.48600685596466064 0 1.0 0 0.0 0 0.0 0 0.0 1.4923040866851807 -0.0722968727350235 0.21605446934700012 -0.9567247629165649 -0.29096347093582153 -0.0 0.5335382223129272 0.3280572295188904 0 1.0 0 0.0 0 0.0 0 0.0 -1.6060515642166138 0.16110217571258545 -0.2839455306529999 -0.6779686808586121 0.7350382804870605 -0.0 0.13606640696525574 0.7579406499862671 0 1.0 0 0.0 0 0.0 0 0.0 -1.6114271879196167 0.15580931305885315 -0.2839455306529999 -0.7241126894950867 0.6896572709083557 -0.0 0.1381559669971466 0.751362144947052 0 1.0 0 0.0 0 0.0 0 0.0 -1.6114271879196167 0.15580931305885315 0.21605446934700012 -0.7241126894950867 0.6896572709083557 -0.0 0.46638426184654236 0.5821032524108887 0 1.0 0 0.0 0 0.0 0 0.0 2.2694103717803955 0.16600582003593445 -0.2839455306529999 0.9814752340316772 -0.191534161567688 -0.0 0.8950365781784058 0.5811769962310791 0 1.0 0 0.0 0 0.0 0 0.0 2.2703044414520264 0.1712646186351776 -0.2839455306529999 0.9896237254142761 -0.143559068441391 -0.0 0.8941553831100464 0.5866265892982483 0 1.0 0 0.0 0 0.0 0 0.0 2.2703044414520264 0.1712646186351776 0.21605448424816132 0.9896237254142761 -0.143559068441391 -0.0 0.5758130550384521 0.4478500485420227 0 1.0 0 0.0 0 0.0 0 0.0 0.4300692081451416 0.055060118436813354 -0.2839455306529999 0.2370677888393402 0.9714651703834534 -0.0 0.9821839332580566 0.6455293893814087 0 1.0 0 0.0 0 0.0 0 0.0 0.419231653213501 0.057757630944252014 -0.2839455306529999 0.2467421442270279 0.9690542221069336 -0.0 0.9896869659423828 0.6491220593452454 0 1.0 0 0.0 0 0.0 0 0.0 0.419231653213501 0.057757630944252014 0.21605446934700012 0.2467421442270279 0.9690542221069336 -0.0 1.483106255531311 0.48530352115631104 0 1.0 0 0.0 0 0.0 0 0.0 2.1722419261932373 0.1703452169895172 -0.2839455306529999 -0.9460127353668213 0.3240455389022827 -0.0 0.9486297369003296 0.6012919545173645 0 1.0 0 0.0 0 0.0 0 0.0 2.171071767807007 0.1672171652317047 -0.2839455306529999 -0.9265724420547485 0.37604907155036926 -0.0 0.9495338201522827 0.5975706577301025 0 1.0 0 0.0 0 0.0 0 0.0 2.171071767807007 0.1672171652317047 0.21605446934700012 -0.9265724420547485 0.37604907155036926 -0.0 0.5218402743339539 0.43775051832199097 0 1.0 0 0.0 0 0.0 0 0.0 0.264054536819458 0.05692572891712189 -0.2839455306529999 -0.9741813540458679 -0.22565385699272156 -0.0 0.08384156227111816 0.6276837587356567 0 1.0 0 0.0 0 0.0 0 0.0 0.26619982719421387 0.04913482069969177 -0.2839455306529999 -0.9519028067588806 -0.30628377199172974 -0.0 0.08226463198661804 0.6200634241104126 0 1.0 0 0.0 0 0.0 0 0.0 0.26619982719421387 0.04913482069969177 0.21605446934700012 -0.9519028067588806 -0.30628377199172974 -0.0 0.39759084582328796 0.4820782542228699 0 1.0 0 0.0 0 0.0 0 0.0 -0.2400660514831543 -0.05275268852710724 -0.2839455306529999 0.982787549495697 -0.18463698029518127 -0.0 0.8987429141998291 0.5193524956703186 0 1.0 0 0.0 0 0.0 0 0.0 -0.23786115646362305 -0.039002448320388794 -0.2839455306529999 0.9909970164299011 -0.13370159268379211 -0.0 0.8966271877288818 0.53370201587677 0 1.0 0 0.0 0 0.0 0 0.0 -0.23786115646362305 -0.039002448320388794 0.21605446934700012 0.9909970164299011 -0.13370159268379211 -0.0 0.5782297849655151 0.39878058433532715 0 1.0 0 0.0 0 0.0 0 0.0 1.3475701808929443 -0.07625070214271545 -0.2839455306529999 0.9353312849998474 0.35370951890945435 -0.0 0.03161323070526123 0.4852879047393799 0 1.0 0 0.0 0 0.0 0 0.0 1.346069574356079 -0.07194417715072632 -0.2839455306529999 0.9521775245666504 0.30545976758003235 -0.0 0.032583266496658325 0.49015122652053833 0 1.0 0 0.0 0 0.0 0 0.0 1.346069574356079 -0.07194417715072632 0.21605446934700012 0.9521775245666504 0.30545976758003235 -0.0 0.4324910044670105 0.3339676856994629 0 1.0 0 0.0 0 0.0 0 0.0 -1.3525587320327759 0.15633466839790344 -0.2839455306529999 0.7360759377479553 0.6768700480461121 -0.0 0.944506049156189 0.7736969590187073 0 1.0 0 0.0 0 0.0 0 0.0 -1.3559409379959106 0.15980809926986694 -0.2839455306529999 0.6970732808113098 0.7169713377952576 -0.0 0.9463456273078918 0.777612566947937 0 1.0 0 0.0 0 0.0 0 0.0 -1.3559409379959106 0.15980809926986694 0.21605446934700012 0.6970732808113098 0.7169713377952576 -0.0 0.5970795750617981 0.602271318435669 0 1.0 0 0.0 0 0.0 0 0.0 2.171071767807007 0.1672171652317047 -0.2839455306529999 -0.9265724420547485 0.37604907155036926 -0.0 0.9495338201522827 0.5975706577301025 0 1.0 0 0.0 0 0.0 0 0.0 2.169721841812134 0.16413778066635132 -0.2839455306529999 -0.904599130153656 0.42622148990631104 -0.0 0.9505453109741211 0.593913197517395 0 1.0 0 0.0 0 0.0 0 0.0 2.169721841812134 0.16413778066635132 0.21605446934700012 -0.904599130153656 0.42622148990631104 -0.0 0.5210717916488647 0.4338977336883545 0 1.0 0 0.0 0 0.0 0 0.0 1.4923040866851807 -0.0722968727350235 -0.2839455306529999 -0.9567247629165649 -0.29096347093582153 -0.0 0.945744514465332 0.48600685596466064 0 1.0 0 0.0 0 0.0 0 0.0 1.4927418231964111 -0.07392413169145584 -0.2839455306529999 -0.9733573198318481 -0.2292550504207611 -0.0 0.9455776214599609 0.4841769337654114 0 1.0 0 0.0 0 0.0 0 0.0 1.4927418231964111 -0.07392413169145584 0.21605446934700012 -0.9733573198318481 -0.2292550504207611 -0.0 0.5338857173919678 0.3262949585914612 0 1.0 0 0.0 0 0.0 0 0.0 -0.4943277835845947 -0.04707552492618561 -0.2839455306529999 0.9666737914085388 0.2559587359428406 -0.0 0.046220988035202026 0.5343106985092163 0 1.0 0 0.0 0 0.0 0 0.0 -0.4959719181060791 -0.040162697434425354 -0.2839455306529999 0.9779046177864075 0.20896023511886597 -0.0 0.04741498827934265 0.5422860383987427 0 1.0 0 0.0 0 0.0 0 0.0 -0.4959719181060791 -0.040162697434425354 0.21605446934700012 0.9779046177864075 0.20896023511886597 -0.0 0.41962891817092896 0.39515578746795654 0 1.0 0 0.0 0 0.0 0 0.0 -1.349441647529602 0.15274447202682495 -0.2839455306529999 0.774163007736206 0.6329538822174072 -0.0 0.9428825378417969 0.7697458267211914 0 1.0 0 0.0 0 0.0 0 0.0 -1.3525587320327759 0.15633466839790344 -0.2839455306529999 0.7360759377479553 0.6768700480461121 -0.0 0.944506049156189 0.7736969590187073 0 1.0 0 0.0 0 0.0 0 0.0 -1.3525587320327759 0.15633466839790344 0.21605446934700012 0.7360759377479553 0.6768700480461121 -0.0 0.5989435911178589 0.5993620157241821 0 1.0 0 0.0 0 0.0 0 0.0 0.44181394577026367 0.05225071310997009 -0.2839455306529999 0.22879727184772491 0.9734488725662231 -0.0 0.9741256237030029 0.6414514183998108 0 1.0 0 0.0 0 0.0 0 0.0 0.4300692081451416 0.055060118436813354 -0.2839455306529999 0.2370677888393402 0.9714651703834534 -0.0 0.9821839332580566 0.6455293893814087 0 1.0 0 0.0 0 0.0 0 0.0 0.4300692081451416 0.055060118436813354 0.21605446934700012 0.2370677888393402 0.9714651703834534 -0.0 0.48983034491539 0.48172253370285034 0 1.0 0 0.0 0 0.0 0 0.0 -0.33988499641418457 -0.04335521161556244 -0.2839455306529999 -0.9794304966926575 0.20175786316394806 -0.0 0.9517782330513 0.5363379716873169 0 1.0 0 0.0 0 0.0 0 0.0 -0.34163761138916016 -0.0508895069360733 -0.2839455306529999 -0.9672841429710388 0.2535783052444458 -0.0 0.9531815648078918 0.5272574424743652 0 1.0 0 0.0 0 0.0 0 0.0 -0.34163761138916016 -0.0508895069360733 0.21605446934700012 -0.9672841429710388 0.2535783052444458 -0.0 0.5197115540504456 0.37125450372695923 0 1.0 0 0.0 0 0.0 0 0.0 1.4927418231964111 -0.07392413169145584 -0.2839455306529999 -0.9733573198318481 -0.2292550504207611 -0.0 0.9455776214599609 0.4841769337654114 0 1.0 0 0.0 0 0.0 0 0.0 1.4930822849273682 -0.07560490816831589 -0.2839455306529999 -0.9856258034706116 -0.16876736283302307 -0.0 0.9454691410064697 0.4822959899902344 0 1.0 0 0.0 0 0.0 0 0.0 1.4930822849273682 -0.07560490816831589 0.21605446934700012 -0.9856258034706116 -0.16876736283302307 -0.0 0.5341720581054688 0.3244657516479492 0 1.0 0 0.0 0 0.0 0 0.0 -1.6114271879196167 0.15580931305885315 -0.2839455306529999 -0.7241126894950867 0.6896572709083557 -0.0 0.1381559669971466 0.751362144947052 0 1.0 0 0.0 0 0.0 0 0.0 -1.6165012121200562 0.15012726187705994 -0.2839455306529999 -0.766411304473877 0.6423230767250061 -0.0 0.13994893431663513 0.7445569038391113 0 1.0 0 0.0 0 0.0 0 0.0 -1.6165012121200562 0.15012726187705994 0.21605446934700012 -0.766411304473877 0.6423230767250061 -0.0 0.46391069889068604 0.5766407251358032 0 1.0 0 0.0 0 0.0 0 0.0 2.268261194229126 0.160795658826828 -0.2839455306529999 0.9709768891334534 -0.23905149102210999 -0.0 0.8960297703742981 0.5757913589477539 0 1.0 0 0.0 0 0.0 0 0.0 2.2694103717803955 0.16600582003593445 -0.2839455306529999 0.9814752340316772 -0.191534161567688 -0.0 0.8950365781784058 0.5811769962310791 0 1.0 0 0.0 0 0.0 0 0.0 2.2694103717803955 0.16600582003593445 0.21605446934700012 0.9814752340316772 -0.191534161567688 -0.0 0.575734555721283 0.4421430826187134 0 1.0 0 0.0 0 0.0 0 0.0 0.4544661045074463 0.04932942986488342 -0.2839455306529999 0.22797326743602753 0.9736624956130981 -0.0 0.9655709862709045 0.6368472576141357 0 1.0 0 0.0 0 0.0 0 0.0 0.44181394577026367 0.05225071310997009 -0.2839455306529999 0.22879727184772491 0.9734488725662231 -0.0 0.9741256237030029 0.6414514183998108 0 1.0 0 0.0 0 0.0 0 0.0 0.44181394577026367 0.05225071310997009 0.21605446934700012 0.22879727184772491 0.9734488725662231 -0.0 0.4971467852592468 0.4780082106590271 0 1.0 0 0.0 0 0.0 0 0.0 2.169721841812134 0.16413778066635132 -0.2839455306529999 -0.904599130153656 0.42622148990631104 -0.0 0.9505453109741211 0.593913197517395 0 1.0 0 0.0 0 0.0 0 0.0 2.16819167137146 0.16110703349113464 -0.2839455306529999 -0.8803979754447937 0.4742271304130554 -0.0 0.9516648054122925 0.5903184413909912 0 1.0 0 0.0 0 0.0 0 0.0 2.16819167137146 0.16110703349113464 0.21605446934700012 -0.8803979754447937 0.4742271304130554 -0.0 0.5201833248138428 0.4300884008407593 0 1.0 0 0.0 0 0.0 0 0.0 1.4930822849273682 -0.07560490816831589 -0.2839455306529999 -0.9856258034706116 -0.16876736283302307 -0.0 0.9454691410064697 0.4822959899902344 0 1.0 0 0.0 0 0.0 0 0.0 1.4933254718780518 -0.07733919471502304 -0.2839455306529999 -0.9938963055610657 -0.11014129966497421 -0.0 0.9454188346862793 0.4803643226623535 0 1.0 0 0.0 0 0.0 0 0.0 1.4933254718780518 -0.07733919471502304 0.21605446934700012 -0.9938963055610657 -0.11014129966497421 -0.0 0.5343972444534302 0.3225697875022888 0 1.0 0 0.0 0 0.0 0 0.0 -0.4924304485321045 -0.0535699725151062 -0.2839455306529999 0.9516586661338806 0.30710774660110474 -0.0 0.04491466283798218 0.5268359780311584 0 1.0 0 0.0 0 0.0 0 0.0 -0.4943277835845947 -0.04707552492618561 -0.2839455306529999 0.9666737914085388 0.2559587359428406 -0.0 0.046220988035202026 0.5343106985092163 0 1.0 0 0.0 0 0.0 0 0.0 -0.4943277835845947 -0.04707552492618561 0.21605446934700012 0.9666737914085388 0.2559587359428406 -0.0 0.4200480282306671 0.38687312602996826 0 1.0 0 0.0 0 0.0 0 0.0 -1.3465896844863892 0.14903751015663147 -0.2839455306529999 0.8107852339744568 0.5853145122528076 -0.0 0.9414651393890381 0.7657605409622192 0 1.0 0 0.0 0 0.0 0 0.0 -1.349441647529602 0.15274447202682495 -0.2839455306529999 0.774163007736206 0.6329538822174072 -0.0 0.9428825378417969 0.7697458267211914 0 1.0 0 0.0 0 0.0 0 0.0 -1.349441647529602 0.15274447202682495 0.21605446934700012 0.774163007736206 0.6329538822174072 -0.0 0.600692093372345 0.5963525772094727 0 1.0 0 0.0 0 0.0 0 0.0 0.4672422409057617 0.04629625380039215 -0.2839455306529999 0.24109622836112976 0.9704886078834534 -0.0 0.9571162462234497 0.6317852735519409 0 1.0 0 0.0 0 0.0 0 0.0 0.4544661045074463 0.04932942986488342 -0.2839455306529999 0.22797326743602753 0.9736624956130981 -0.0 0.9655709862709045 0.6368472576141357 0 1.0 0 0.0 0 0.0 0 0.0 0.4544661045074463 0.04932942986488342 0.21605446934700012 0.22797326743602753 0.9736624956130981 -0.0 0.5050256252288818 0.4741957187652588 0 1.0 0 0.0 0 0.0 0 0.0 2.16819167137146 0.16110703349113464 -0.2839455306529999 -0.8803979754447937 0.4742271304130554 -0.0 0.9516648054122925 0.5903184413909912 0 1.0 0 0.0 0 0.0 0 0.0 2.1664817333221436 0.1581249237060547 -0.2839455306529999 -0.8543351292610168 0.5196996927261353 -0.0 0.9528919458389282 0.5867855548858643 0 1.0 0 0.0 0 0.0 0 0.0 2.1664817333221436 0.1581249237060547 0.21605446934700012 -0.8543351292610168 0.5196996927261353 -0.0 0.5191733241081238 0.4263235330581665 0 1.0 0 0.0 0 0.0 0 0.0 -0.34163761138916016 -0.0508895069360733 -0.2839455306529999 -0.9672841429710388 0.2535783052444458 -0.0 0.9531815648078918 0.5272574424743652 0 1.0 0 0.0 0 0.0 0 0.0 -0.34370875358581543 -0.05797867476940155 -0.2839455306529999 -0.9508652091026306 0.3095797598361969 -0.0 0.9547421932220459 0.518780529499054 0 1.0 0 0.0 0 0.0 0 0.0 -0.34370875358581543 -0.05797867476940155 0.21605446934700012 -0.9508652091026306 0.3095797598361969 -0.0 0.5184904336929321 0.36250418424606323 0 1.0 0 0.0 0 0.0 0 0.0 -1.6165012121200562 0.15012726187705994 -0.2839455306529999 -0.766411304473877 0.6423230767250061 -0.0 0.13994893431663513 0.7445569038391113 0 1.0 0 0.0 0 0.0 0 0.0 -1.621273398399353 0.1440560519695282 -0.2839455306529999 -0.8045899868011475 0.5937681198120117 -0.0 0.14146259427070618 0.7375191450119019 0 1.0 0 0.0 0 0.0 0 0.0 -1.621273398399353 0.1440560519695282 0.21605446934700012 -0.8045899868011475 0.5937681198120117 -0.0 0.4615637958049774 0.5708528161048889 0 1.0 0 0.0 0 0.0 0 0.0 0.26619982719421387 0.04913482069969177 -0.2839455306529999 -0.9519028067588806 -0.30628377199172974 -0.0 0.08226463198661804 0.6200634241104126 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 0.04166984558105469 -0.2839455306529999 -0.921994686126709 -0.3871577978134155 -0.0 0.08042562007904053 0.6127703785896301 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 0.04166984558105469 0.21605446934700012 -0.921994686126709 -0.3871577978134155 -0.0 0.3982294201850891 0.4741182327270508 0 1.0 0 0.0 0 0.0 0 0.0 1.5911071300506592 -0.0843055248260498 -0.2839455306529999 0.9894406199455261 -0.14477980136871338 -0.0 0.8969948291778564 0.47402477264404297 0 1.0 0 0.0 0 0.0 0 0.0 1.5919973850250244 -0.07608164846897125 -0.2839455306529999 0.9974364638328552 -0.0714743509888649 -0.0 0.8959654569625854 0.4819793105125427 0 1.0 0 0.0 0 0.0 0 0.0 1.5919973850250244 -0.07608164846897125 0.21605446934700012 0.9974364638328552 -0.0714743509888649 -0.0 0.5896905660629272 0.34646421670913696 0 1.0 0 0.0 0 0.0 0 0.0 2.2668564319610596 0.15563416481018066 -0.2839455306529999 0.9582812190055847 -0.2857753336429596 -0.0 0.8971360921859741 0.5704658031463623 0 1.0 0 0.0 0 0.0 0 0.0 2.268261194229126 0.160795658826828 -0.2839455306529999 0.9709768891334534 -0.23905149102210999 -0.0 0.8960297703742981 0.5757913589477539 0 1.0 0 0.0 0 0.0 0 0.0 2.268261194229126 0.160795658826828 0.21605446934700012 0.9709768891334534 -0.23905149102210999 -0.0 0.5755319595336914 0.4364372491836548 0 1.0 0 0.0 0 0.0 0 0.0 -0.24290084838867188 -0.06589483469724655 -0.2839455306529999 0.9710684418678284 -0.2387463003396988 -0.0 0.9010788798332214 0.5057295560836792 0 1.0 0 0.0 0 0.0 0 0.0 -0.2400660514831543 -0.05275268852710724 -0.2839455306529999 0.982787549495697 -0.18463698029518127 -0.0 0.8987429141998291 0.5193524956703186 0 1.0 0 0.0 0 0.0 0 0.0 -0.2400660514831543 -0.05275268852710724 0.21605446934700012 0.982787549495697 -0.18463698029518127 -0.0 0.5780972838401794 0.38382643461227417 0 1.0 0 0.0 0 0.0 0 0.0 1.3492510318756104 -0.08036507666110992 -0.2839455306529999 0.9149143695831299 0.4035767614841461 -0.0 0.030552387237548828 0.480659544467926 0 1.0 0 0.0 0 0.0 0 0.0 1.3475701808929443 -0.07625070214271545 -0.2839455306529999 0.9353312849998474 0.35370951890945435 -0.0 0.03161323070526123 0.4852879047393799 0 1.0 0 0.0 0 0.0 0 0.0 1.3475701808929443 -0.07625070214271545 0.21605446934700012 0.9353312849998474 0.35370951890945435 -0.0 0.4331422448158264 0.3288542628288269 0 1.0 0 0.0 0 0.0 0 0.0 -1.3440028429031372 0.14521381258964539 -0.2839455306529999 0.8453016877174377 0.5342265367507935 -0.0 0.9402449131011963 0.7617413997650146 0 1.0 0 0.0 0 0.0 0 0.0 -1.3465896844863892 0.14903751015663147 -0.2839455306529999 0.8107852339744568 0.5853145122528076 -0.0 0.9414651393890381 0.7657605409622192 0 1.0 0 0.0 0 0.0 0 0.0 -1.3465896844863892 0.14903751015663147 0.21605446934700012 0.8107852339744568 0.5853145122528076 -0.0 0.6023273468017578 0.5932416915893555 0 1.0 0 0.0 0 0.0 0 0.0 0.47935914993286133 0.04315118491649628 -0.2839455306529999 0.2623371183872223 0.964964747428894 -0.0 0.9493167996406555 0.6264195442199707 0 1.0 0 0.0 0 0.0 0 0.0 0.4672422409057617 0.04629625380039215 -0.2839455306529999 0.24109622836112976 0.9704886078834534 -0.0 0.9571162462234497 0.6317852735519409 0 1.0 0 0.0 0 0.0 0 0.0 0.4672422409057617 0.04629625380039215 0.21605446934700012 0.24109622836112976 0.9704886078834534 -0.0 0.5129404664039612 0.47033530473709106 0 1.0 0 0.0 0 0.0 0 0.0 2.1664817333221436 0.1581249237060547 -0.2839455306529999 -0.8543351292610168 0.5196996927261353 -0.0 0.9528919458389282 0.5867855548858643 0 1.0 0 0.0 0 0.0 0 0.0 2.1645915508270264 0.15519148111343384 -0.2839455306529999 -0.826776921749115 0.5624866485595703 -0.0 0.9542272686958313 0.5833134055137634 0 1.0 0 0.0 0 0.0 0 0.0 2.1645915508270264 0.15519148111343384 0.21605446934700012 -0.826776921749115 0.5624866485595703 -0.0 0.5180397033691406 0.42260414361953735 0 1.0 0 0.0 0 0.0 0 0.0 1.4933254718780518 -0.07733919471502304 -0.2839455306529999 -0.9938963055610657 -0.11014129966497421 -0.0 0.9454188346862793 0.4803643226623535 0 1.0 0 0.0 0 0.0 0 0.0 1.493471384048462 -0.0791269913315773 -0.2839455306529999 -0.9985350966453552 -0.05386516824364662 -0.0 0.9454262256622314 0.4783821105957031 0 1.0 0 0.0 0 0.0 0 0.0 1.493471384048462 -0.0791269913315773 0.21605446934700012 -0.9985350966453552 -0.05386516824364662 -0.0 0.534561038017273 0.3206070065498352 0 1.0 0 0.0 0 0.0 0 0.0 -0.4902803897857666 -0.05964605510234833 -0.2839455306529999 0.9319742321968079 0.36243781447410583 -0.0 0.0434948205947876 0.5198570489883423 0 1.0 0 0.0 0 0.0 0 0.0 -0.4924304485321045 -0.0535699725151062 -0.2839455306529999 0.9516586661338806 0.30710774660110474 -0.0 0.04491466283798218 0.5268359780311584 0 1.0 0 0.0 0 0.0 0 0.0 -0.4924304485321045 -0.0535699725151062 0.21605446934700012 0.9516586661338806 0.30710774660110474 -0.0 0.4206518530845642 0.3790395259857178 0 1.0 0 0.0 0 0.0 0 0.0 -1.3416811227798462 0.1412733793258667 -0.2839455306529999 0.8803369402885437 0.4743186831474304 -0.0 0.9392135143280029 0.7576877474784851 0 1.0 0 0.0 0 0.0 0 0.0 -1.3440028429031372 0.14521381258964539 -0.2839455306529999 0.8453016877174377 0.5342265367507935 -0.0 0.9402449131011963 0.7617413997650146 0 1.0 0 0.0 0 0.0 0 0.0 -1.3440028429031372 0.14521381258964539 0.21605446934700012 0.8453016877174377 0.5342265367507935 -0.0 0.6038513779640198 0.5900272727012634 0 1.0 0 0.0 0 0.0 0 0.0 0.4908168315887451 0.0398942232131958 -0.2839455306529999 0.2856227159500122 0.9583117365837097 -0.0 0.9421719908714294 0.6208404302597046 0 1.0 0 0.0 0 0.0 0 0.0 0.47935914993286133 0.04315118491649628 -0.2839455306529999 0.2623371183872223 0.964964747428894 -0.0 0.9493167996406555 0.6264195442199707 0 1.0 0 0.0 0 0.0 0 0.0 0.47935914993286133 0.04315118491649628 0.21605446934700012 0.2623371183872223 0.964964747428894 -0.0 0.5203794836997986 0.4664573073387146 0 1.0 0 0.0 0 0.0 0 0.0 -0.34370875358581543 -0.05797867476940155 -0.2839455306529999 -0.9508652091026306 0.3095797598361969 -0.0 0.9547421932220459 0.518780529499054 0 1.0 0 0.0 0 0.0 0 0.0 -0.3460984230041504 -0.06462271511554718 -0.2839455306529999 -0.9291665554046631 0.36960965394973755 -0.0 0.9564605951309204 0.5109021067619324 0 1.0 0 0.0 0 0.0 0 0.0 -0.3460984230041504 -0.06462271511554718 0.21605446934700012 -0.9291665554046631 0.36960965394973755 -0.0 0.517025351524353 0.35432738065719604 0 1.0 0 0.0 0 0.0 0 0.0 1.2448337078094482 -0.0778159350156784 -0.2839455306529999 -0.9610888957977295 -0.2762230336666107 -0.0 0.08192142844200134 0.48803091049194336 0 1.0 0 0.0 0 0.0 0 0.0 1.2473232746124268 -0.08647764474153519 -0.2839455306529999 -0.9530014991760254 -0.3029267191886902 -0.0 0.08034449815750122 0.47963446378707886 0 1.0 0 0.0 0 0.0 0 0.0 1.2473232746124268 -0.08647764474153519 0.21605446934700012 -0.9530014991760254 -0.3029267191886902 -0.0 0.37815624475479126 0.34659135341644287 0 1.0 0 0.0 0 0.0 0 0.0 -1.621273398399353 0.1440560519695282 -0.2839455306529999 -0.8045899868011475 0.5937681198120117 -0.0 0.14146259427070618 0.7375191450119019 0 1.0 0 0.0 0 0.0 0 0.0 -1.6257442235946655 0.13759565353393555 -0.2839455306529999 -0.8385875821113586 0.5446943640708923 -0.0 0.14271312952041626 0.7302404642105103 0 1.0 0 0.0 0 0.0 0 0.0 -1.6257442235946655 0.13759565353393555 0.21605446934700012 -0.8385875821113586 0.5446943640708923 -0.0 0.4593387544155121 0.5647287964820862 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 0.04166984558105469 -0.2839455306529999 -0.921994686126709 -0.3871577978134155 -0.0 0.08042562007904053 0.6127703785896301 0 1.0 0 0.0 0 0.0 0 0.0 0.27232933044433594 0.034530818462371826 -0.2839455306529999 -0.8845790028572083 -0.4663533568382263 -0.0 0.07831719517707825 0.605796217918396 0 1.0 0 0.0 0 0.0 0 0.0 0.27232933044433594 0.034530818462371826 0.21605446934700012 -0.8845790028572083 -0.4663533568382263 -0.0 0.3991908133029938 0.4663246273994446 0 1.0 0 0.0 0 0.0 0 0.0 2.2651965618133545 0.15052130818367004 -0.2839455306529999 0.9434797167778015 -0.33136996626853943 -0.0 0.8983566761016846 0.5651962161064148 0 1.0 0 0.0 0 0.0 0 0.0 2.2668564319610596 0.15563416481018066 -0.2839455306529999 0.9582812190055847 -0.2857753336429596 -0.0 0.8971360921859741 0.5704658031463623 0 1.0 0 0.0 0 0.0 0 0.0 2.2668564319610596 0.15563416481018066 0.21605446934700012 0.9582812190055847 -0.2857753336429596 -0.0 0.5752025246620178 0.43072861433029175 0 1.0 0 0.0 0 0.0 0 0.0 2.1645915508270264 0.15519148111343384 -0.2839455306529999 -0.826776921749115 0.5624866485595703 -0.0 0.9542272686958313 0.5833134055137634 0 1.0 0 0.0 0 0.0 0 0.0 2.1625216007232666 0.1523066759109497 -0.2839455306529999 -0.791283905506134 0.6114078164100647 -0.0 0.9556704759597778 0.5799009799957275 0 1.0 0 0.0 0 0.0 0 0.0 2.1625216007232666 0.1523066759109497 0.21605446934700012 -0.791283905506134 0.6114078164100647 -0.0 0.5167807936668396 0.41893166303634644 0 1.0 0 0.0 0 0.0 0 0.0 1.493471384048462 -0.0791269913315773 -0.2839455306529999 -0.9985350966453552 -0.05386516824364662 -0.0 0.9454262256622314 0.4783821105957031 0 1.0 0 0.0 0 0.0 0 0.0 1.4935200214385986 -0.08096829801797867 -0.2839455306529999 -0.999969482421875 0.00357066560536623 -0.0 0.9454910755157471 0.47634971141815186 0 1.0 0 0.0 0 0.0 0 0.0 1.4935200214385986 -0.08096829801797867 0.21605446934700012 -0.999969482421875 0.00357066560536623 -0.0 0.534663200378418 0.31857776641845703 0 1.0 0 0.0 0 0.0 0 0.0 -0.48787713050842285 -0.06530377268791199 -0.2839455306529999 0.9066743850708008 0.4217963218688965 -0.0 0.04195922613143921 0.5133682489395142 0 1.0 0 0.0 0 0.0 0 0.0 -0.4902803897857666 -0.05964605510234833 -0.2839455306529999 0.9319742321968079 0.36243781447410583 -0.0 0.0434948205947876 0.5198570489883423 0 1.0 0 0.0 0 0.0 0 0.0 -0.4902803897857666 -0.05964605510234833 0.21605446934700012 0.9319742321968079 0.36243781447410583 -0.0 0.42144501209259033 0.3716520071029663 0 1.0 0 0.0 0 0.0 0 0.0 -1.3395832777023315 0.13699603080749512 -0.2839455306529999 0.9144566059112549 0.4046449065208435 -0.0 0.9383580684661865 0.7533990740776062 0 1.0 0 0.0 0 0.0 0 0.0 -1.3416811227798462 0.1412733793258667 -0.2839455306529999 0.8803369402885437 0.4743186831474304 -0.0 0.9392135143280029 0.7576877474784851 0 1.0 0 0.0 0 0.0 0 0.0 -1.3416811227798462 0.1412733793258667 0.21605446934700012 0.8803369402885437 0.4743186831474304 -0.0 0.6052660942077637 0.586706817150116 0 1.0 0 0.0 0 0.0 0 0.0 0.5016152858734131 0.036525383591651917 -0.2839455306529999 0.3112582862377167 0.9503158926963806 -0.0 0.9356679320335388 0.6151246428489685 0 1.0 0 0.0 0 0.0 0 0.0 0.4908168315887451 0.0398942232131958 -0.2839455306529999 0.2856227159500122 0.9583117365837097 -0.0 0.9421719908714294 0.6208404302597046 0 1.0 0 0.0 0 0.0 0 0.0 0.4908168315887451 0.0398942232131958 0.21605446934700012 0.2856227159500122 0.9583117365837097 -0.0 0.5273312330245972 0.46256983280181885 0 1.0 0 0.0 0 0.0 0 0.0 2.1625216007232666 0.1523066759109497 -0.2839455306529999 -0.791283905506134 0.6114078164100647 -0.0 0.9556704759597778 0.5799009799957275 0 1.0 0 0.0 0 0.0 0 0.0 2.1608784198760986 0.15032914280891418 -0.2839455306529999 -0.7531358003616333 0.6578570008277893 -0.0 0.9567999243736267 0.5775706768035889 0 1.0 0 0.0 0 0.0 0 0.0 2.1608784198760986 0.15032914280891418 0.21605446934700012 -0.7531358003616333 0.6578570008277893 -0.0 0.5157681703567505 0.4164031744003296 0 1.0 0 0.0 0 0.0 0 0.0 -0.3460984230041504 -0.06462271511554718 -0.2839455306529999 -0.9291665554046631 0.36960965394973755 -0.0 0.9564605951309204 0.5109021067619324 0 1.0 0 0.0 0 0.0 0 0.0 -0.34880685806274414 -0.07082163542509079 -0.2839455306529999 -0.9012420773506165 0.43327128887176514 -0.0 0.958337664604187 0.5036150813102722 0 1.0 0 0.0 0 0.0 0 0.0 -0.34880685806274414 -0.07082163542509079 0.21605446934700012 -0.9012420773506165 0.43327128887176514 -0.0 0.5153106451034546 0.34672248363494873 0 1.0 0 0.0 0 0.0 0 0.0 -1.6257442235946655 0.13759565353393555 -0.2839455306529999 -0.8385875821113586 0.5446943640708923 -0.0 0.14271312952041626 0.7302404642105103 0 1.0 0 0.0 0 0.0 0 0.0 -1.6299132108688354 0.13074606657028198 -0.2839455306529999 -0.868434727191925 0.49577319622039795 -0.0 0.14371469616889954 0.7227109670639038 0 1.0 0 0.0 0 0.0 0 0.0 -1.6299132108688354 0.13074606657028198 0.21605446934700012 -0.868434727191925 0.49577319622039795 -0.0 0.457231342792511 0.5582568645477295 0 1.0 0 0.0 0 0.0 0 0.0 1.3511121273040771 -0.08428728580474854 -0.2839455306529999 0.8907132148742676 0.4545121490955353 -0.0 0.029400289058685303 0.4762616753578186 0 1.0 0 0.0 0 0.0 0 0.0 1.3492510318756104 -0.08036507666110992 -0.2839455306529999 0.9149143695831299 0.4035767614841461 -0.0 0.030552387237548828 0.480659544467926 0 1.0 0 0.0 0 0.0 0 0.0 1.3492510318756104 -0.08036507666110992 0.21605446934700012 0.9149143695831299 0.4035767614841461 -0.0 0.4339316487312317 0.3239462971687317 0 1.0 0 0.0 0 0.0 0 0.0 0.5117547512054443 0.03304465115070343 -0.2839455306529999 0.3395489454269409 0.9405804872512817 -0.0 0.9297819137573242 0.6093344688415527 0 1.0 0 0.0 0 0.0 0 0.0 0.5016152858734131 0.036525383591651917 -0.2839455306529999 0.3112582862377167 0.9503158926963806 -0.0 0.9356679320335388 0.6151246428489685 0 1.0 0 0.0 0 0.0 0 0.0 0.5016152858734131 0.036525383591651917 0.21605446934700012 0.3112582862377167 0.9503158926963806 -0.0 0.5337937474250793 0.4586760401725769 0 1.0 0 0.0 0 0.0 0 0.0 1.4935200214385986 -0.08096829801797867 -0.2839455306529999 -0.999969482421875 0.00357066560536623 -0.0 0.9454910755157471 0.47634971141815186 0 1.0 0 0.0 0 0.0 0 0.0 1.49342942237854 -0.08366581052541733 -0.2839455306529999 -0.9976500868797302 0.06833094358444214 -0.0 0.9456768035888672 0.4733878970146179 0 1.0 0 0.0 0 0.0 0 0.0 1.49342942237854 -0.08366581052541733 0.21605446934700012 -0.9976500868797302 0.06833094358444214 -0.0 0.5347064137458801 0.3155938982963562 0 1.0 0 0.0 0 0.0 0 0.0 0.27232933044433594 0.034530818462371826 -0.2839455306529999 -0.8845790028572083 -0.4663533568382263 -0.0 0.07831719517707825 0.605796217918396 0 1.0 0 0.0 0 0.0 0 0.0 0.27631354331970215 0.027717724442481995 -0.2839455306529999 -0.8403576612472534 -0.5420087575912476 -0.0 0.07593002915382385 0.5991324186325073 0 1.0 0 0.0 0 0.0 0 0.0 0.27631354331970215 0.027717724442481995 0.21605446934700012 -0.8403576612472534 -0.5420087575912476 -0.0 0.40048840641975403 0.45869070291519165 0 1.0 0 0.0 0 0.0 0 0.0 2.2632811069488525 0.14545708894729614 -0.2839455306529999 0.9267555475234985 -0.37559130787849426 -0.0 0.8996932506561279 0.5599786043167114 0 1.0 0 0.0 0 0.0 0 0.0 2.2651965618133545 0.15052130818367004 -0.2839455306529999 0.9434797167778015 -0.33136996626853943 -0.0 0.8983566761016846 0.5651962161064148 0 1.0 0 0.0 0 0.0 0 0.0 2.2651965618133545 0.15052130818367004 0.21605446934700012 0.9434797167778015 -0.33136996626853943 -0.0 0.574743390083313 0.4250136613845825 0 1.0 0 0.0 0 0.0 0 0.0 -0.48522114753723145 -0.07054311782121658 -0.2839455306529999 0.8746299743652344 0.4847254753112793 -0.0 0.0403059720993042 0.5073632597923279 0 1.0 0 0.0 0 0.0 0 0.0 -0.48787713050842285 -0.06530377268791199 -0.2839455306529999 0.9066743850708008 0.4217963218688965 -0.0 0.04195922613143921 0.5133682489395142 0 1.0 0 0.0 0 0.0 0 0.0 -0.48787713050842285 -0.06530377268791199 0.21605446934700012 0.9066743850708008 0.4217963218688965 -0.0 0.4224327802658081 0.36470645666122437 0 1.0 0 0.0 0 0.0 0 0.0 -1.33766770362854 0.1321616768836975 -0.2839455306529999 0.9413434267044067 0.33738210797309875 -0.0 0.9376671314239502 0.7486661672592163 0 1.0 0 0.0 0 0.0 0 0.0 -1.3395832777023315 0.13699603080749512 -0.2839455306529999 0.9144566059112549 0.4046449065208435 -0.0 0.9383580684661865 0.7533990740776062 0 1.0 0 0.0 0 0.0 0 0.0 -1.3395832777023315 0.13699603080749512 0.21605446934700012 0.9144566059112549 0.4046449065208435 -0.0 0.6066126227378845 0.5830934643745422 0 1.0 0 0.0 0 0.0 0 0.0 2.1608784198760986 0.15032914280891418 -0.2839455306529999 -0.7531358003616333 0.6578570008277893 -0.0 0.9567999243736267 0.5775706768035889 0 1.0 0 0.0 0 0.0 0 0.0 2.15875506401062 0.14801594614982605 -0.2839455306529999 -0.7249366641044617 0.6888027787208557 -0.0 0.958246648311615 0.5748494267463684 0 1.0 0 0.0 0 0.0 0 0.0 2.15875506401062 0.14801594614982605 0.21605446934700012 -0.7249366641044617 0.6888027787208557 -0.0 0.5144461989402771 0.4134361743927002 0 1.0 0 0.0 0 0.0 0 0.0 1.49342942237854 -0.08366581052541733 -0.2839455306529999 -0.9976500868797302 0.06833094358444214 -0.0 0.9456768035888672 0.4733878970146179 0 1.0 0 0.0 0 0.0 0 0.0 1.493159532546997 -0.08627089112997055 -0.2839455306529999 -0.9901730418205261 0.13968321681022644 -0.0 0.9459576606750488 0.47054433822631836 0 1.0 0 0.0 0 0.0 0 0.0 1.493159532546997 -0.08627089112997055 0.21605446934700012 -0.9901730418205261 0.13968321681022644 -0.0 0.5346271991729736 0.31269872188568115 0 1.0 0 0.0 0 0.0 0 0.0 -0.24636578559875488 -0.07842888683080673 -0.2839455306529999 0.9552598595619202 -0.29572436213493347 -0.0 0.903641939163208 0.4928281903266907 0 1.0 0 0.0 0 0.0 0 0.0 -0.24290084838867188 -0.06589483469724655 -0.2839455306529999 0.9710684418678284 -0.2387463003396988 -0.0 0.9010788798332214 0.5057295560836792 0 1.0 0 0.0 0 0.0 0 0.0 -0.24290084838867188 -0.06589483469724655 0.21605446934700012 0.9710684418678284 -0.2387463003396988 -0.0 0.5776110291481018 0.3694540858268738 0 1.0 0 0.0 0 0.0 0 0.0 -1.3359346389770508 0.12677031755447388 -0.2839455306529999 0.9602038860321045 0.2792138457298279 -0.0 0.9371362924575806 0.7434725761413574 0 1.0 0 0.0 0 0.0 0 0.0 -1.33766770362854 0.1321616768836975 -0.2839455306529999 0.9413434267044067 0.33738210797309875 -0.0 0.9376671314239502 0.7486661672592163 0 1.0 0 0.0 0 0.0 0 0.0 -1.33766770362854 0.1321616768836975 0.21605446934700012 0.9413434267044067 0.33738210797309875 -0.0 0.6079329252243042 0.5789923667907715 0 1.0 0 0.0 0 0.0 0 0.0 0.5212349891662598 0.029452025890350342 -0.2839455306529999 0.3708304166793823 0.9286782145500183 -0.0 0.9244858622550964 0.6035184860229492 0 1.0 0 0.0 0 0.0 0 0.0 0.5117547512054443 0.03304465115070343 -0.2839455306529999 0.3395489454269409 0.9405804872512817 -0.0 0.9297819137573242 0.6093344688415527 0 1.0 0 0.0 0 0.0 0 0.0 0.5117547512054443 0.03304465115070343 0.21605446934700012 0.3395489454269409 0.9405804872512817 -0.0 0.5397725105285645 0.4547746181488037 0 1.0 0 0.0 0 0.0 0 0.0 2.15875506401062 0.14801594614982605 -0.2839455306529999 -0.7249366641044617 0.6888027787208557 -0.0 0.958246648311615 0.5748494267463684 0 1.0 0 0.0 0 0.0 0 0.0 2.1561501026153564 0.1453670859336853 -0.2839455306529999 -0.7040925025939941 0.7100741863250732 -0.0 0.9600106477737427 0.5717301964759827 0 1.0 0 0.0 0 0.0 0 0.0 2.1561501026153564 0.1453670859336853 0.21605446934700012 -0.7040925025939941 0.7100741863250732 -0.0 0.5128077268600464 0.41003090143203735 0 1.0 0 0.0 0 0.0 0 0.0 -1.6299132108688354 0.13074606657028198 -0.2839455306529999 -0.868434727191925 0.49577319622039795 -0.0 0.14371469616889954 0.7227109670639038 0 1.0 0 0.0 0 0.0 0 0.0 -1.633780837059021 0.1235072910785675 -0.2839455306529999 -0.8942533731460571 0.44749289751052856 -0.0 0.14448046684265137 0.7149181365966797 0 1.0 0 0.0 0 0.0 0 0.0 -1.633780837059021 0.1235072910785675 0.21605446934700012 -0.8942533731460571 0.44749289751052856 -0.0 0.4552372395992279 0.5514237880706787 0 1.0 0 0.0 0 0.0 0 0.0 -0.4823117256164551 -0.07536409795284271 -0.2839455306529999 0.8384044766426086 0.5450300574302673 -0.0 0.03853201866149902 0.5018355250358582 0 1.0 0 0.0 0 0.0 0 0.0 -0.48522114753723145 -0.07054311782121658 -0.2839455306529999 0.8746299743652344 0.4847254753112793 -0.0 0.0403059720993042 0.5073632597923279 0 1.0 0 0.0 0 0.0 0 0.0 -0.48522114753723145 -0.07054311782121658 0.21605446934700012 0.8746299743652344 0.4847254753112793 -0.0 0.4236200749874115 0.3581991195678711 0 1.0 0 0.0 0 0.0 0 0.0 1.3531529903411865 -0.08801734447479248 -0.2839455306529999 0.8624836206436157 0.5060274004936218 -0.0 0.028156548738479614 0.4720897674560547 0 1.0 0 0.0 0 0.0 0 0.0 1.3511121273040771 -0.08428728580474854 -0.2839455306529999 0.8907132148742676 0.4545121490955353 -0.0 0.029400289058685303 0.4762616753578186 0 1.0 0 0.0 0 0.0 0 0.0 1.3511121273040771 -0.08428728580474854 0.21605446934700012 0.8907132148742676 0.4545121490955353 -0.0 0.43486201763153076 0.3192406892776489 0 1.0 0 0.0 0 0.0 0 0.0 0.5300559997558594 0.02574750781059265 -0.2839455306529999 0.4054689109325409 0.9140903949737549 -0.0 0.9197486042976379 0.5977127552032471 0 1.0 0 0.0 0 0.0 0 0.0 0.5212349891662598 0.029452025890350342 -0.2839455306529999 0.3708304166793823 0.9286782145500183 -0.0 0.9244858622550964 0.6035184860229492 0 1.0 0 0.0 0 0.0 0 0.0 0.5212349891662598 0.029452025890350342 0.21605446934700012 0.3708304166793823 0.9286782145500183 -0.0 0.5452784299850464 0.450860857963562 0 1.0 0 0.0 0 0.0 0 0.0 -0.34880685806274414 -0.07082163542509079 -0.2839455306529999 -0.9012420773506165 0.43327128887176514 -0.0 0.958337664604187 0.5036150813102722 0 1.0 0 0.0 0 0.0 0 0.0 -0.3518340587615967 -0.07657542824745178 -0.2839455306529999 -0.8661457896232605 0.4997711181640625 -0.0 0.960374653339386 0.4969112277030945 0 1.0 0 0.0 0 0.0 0 0.0 -0.3518340587615967 -0.07657542824745178 0.21605446934700012 -0.8661457896232605 0.4997711181640625 -0.0 0.5133412480354309 0.33968716859817505 0 1.0 0 0.0 0 0.0 0 0.0 0.27631354331970215 0.027717724442481995 -0.2839455306529999 -0.8403576612472534 -0.5420087575912476 -0.0 0.07593002915382385 0.5991324186325073 0 1.0 0 0.0 0 0.0 0 0.0 0.2809107303619385 0.021230563521385193 -0.2839455306529999 -0.790459930896759 -0.6125065088272095 -0.0 0.0732530951499939 0.5927700996398926 0 1.0 0 0.0 0 0.0 0 0.0 0.2809107303619385 0.021230563521385193 0.21605446934700012 -0.790459930896759 -0.6125065088272095 -0.0 0.4021376669406891 0.451210618019104 0 1.0 0 0.0 0 0.0 0 0.0 2.2611100673675537 0.14044153690338135 -0.2839455306529999 0.9083529114723206 -0.41816461086273193 -0.0 0.9011474847793579 0.5548092126846313 0 1.0 0 0.0 0 0.0 0 0.0 2.2632811069488525 0.14545708894729614 -0.2839455306529999 0.9267555475234985 -0.37559130787849426 -0.0 0.8996932506561279 0.5599786043167114 0 1.0 0 0.0 0 0.0 0 0.0 2.2632811069488525 0.14545708894729614 0.21605446934700012 0.9267555475234985 -0.37559130787849426 -0.0 0.5741510391235352 0.4192887544631958 0 1.0 0 0.0 0 0.0 0 0.0 1.5896236896514893 -0.0923299491405487 -0.2839455306529999 0.9756157398223877 -0.21933652460575104 -0.0 0.8982555270195007 0.4663318991661072 0 1.0 0 0.0 0 0.0 0 0.0 1.5911071300506592 -0.0843055248260498 -0.2839455306529999 0.9894406199455261 -0.14477980136871338 -0.0 0.8969948291778564 0.47402477264404297 0 1.0 0 0.0 0 0.0 0 0.0 1.5911071300506592 -0.0843055248260498 0.21605446934700012 0.9894406199455261 -0.14477980136871338 -0.0 0.5899286270141602 0.33825957775115967 0 1.0 0 0.0 0 0.0 0 0.0 -1.3343840837478638 0.12082192301750183 -0.2839455306529999 0.9733878374099731 0.22907193005084991 -0.0 0.9367607831954956 0.7377991676330566 0 1.0 0 0.0 0 0.0 0 0.0 -1.3359346389770508 0.12677031755447388 -0.2839455306529999 0.9602038860321045 0.2792138457298279 -0.0 0.9371362924575806 0.7434725761413574 0 1.0 0 0.0 0 0.0 0 0.0 -1.3359346389770508 0.12677031755447388 0.21605446934700012 0.9602038860321045 0.2792138457298279 -0.0 0.6092292666435242 0.574386715888977 0 1.0 0 0.0 0 0.0 0 0.0 2.1561501026153564 0.1453670859336853 -0.2839455306529999 -0.7040925025939941 0.7100741863250732 -0.0 0.9600106477737427 0.5717301964759827 0 1.0 0 0.0 0 0.0 0 0.0 2.1530635356903076 0.14238256216049194 -0.2839455306529999 -0.6881923675537109 0.7255164980888367 -0.0 0.9620909690856934 0.5682055354118347 0 1.0 0 0.0 0 0.0 0 0.0 2.1530635356903076 0.14238256216049194 0.21605446934700012 -0.6881923675537109 0.7255164980888367 -0.0 0.5108454823493958 0.406189501285553 0 1.0 0 0.0 0 0.0 0 0.0 1.493159532546997 -0.08627089112997055 -0.2839455306529999 -0.9901730418205261 0.13968321681022644 -0.0 0.9459576606750488 0.47054433822631836 0 1.0 0 0.0 0 0.0 0 0.0 1.4927098751068115 -0.08878353983163834 -0.2839455306529999 -0.9767754077911377 0.2141483873128891 -0.0 0.9463337659835815 0.46781617403030396 0 1.0 0 0.0 0 0.0 0 0.0 1.4927098751068115 -0.08878353983163834 0.21605446934700012 -0.9767754077911377 0.2141483873128891 -0.0 0.5344240665435791 0.30988991260528564 0 1.0 0 0.0 0 0.0 0 0.0 -1.633780837059021 0.1235072910785675 -0.2839455306529999 -0.8942533731460571 0.44749289751052856 -0.0 0.14448046684265137 0.7149181365966797 0 1.0 0 0.0 0 0.0 0 0.0 -1.637346625328064 0.1158793568611145 -0.2839455306529999 -0.9163182377815247 0.40040284395217896 -0.0 0.14502182602882385 0.7068488597869873 0 1.0 0 0.0 0 0.0 0 0.0 -1.637346625328064 0.1158793568611145 0.21605446934700012 -0.9163182377815247 0.40040284395217896 -0.0 0.4533528983592987 0.5442155599594116 0 1.0 0 0.0 0 0.0 0 0.0 -0.477933406829834 -0.0816299095749855 -0.2839455306529999 0.7995849251747131 0.600512683391571 -0.0 0.03590008616447449 0.4946441054344177 0 1.0 0 0.0 0 0.0 0 0.0 -0.4823117256164551 -0.07536409795284271 -0.2839455306529999 0.8384044766426086 0.5450300574302673 -0.0 0.03853201866149902 0.5018355250358582 0 1.0 0 0.0 0 0.0 0 0.0 -0.4823117256164551 -0.07536409795284271 0.21605446934700012 0.8384044766426086 0.5450300574302673 -0.0 0.42501261830329895 0.3521260619163513 0 1.0 0 0.0 0 0.0 0 0.0 2.1530635356903076 0.14238256216049194 -0.2839455306529999 -0.6881923675537109 0.7255164980888367 -0.0 0.9620909690856934 0.5682055354118347 0 1.0 0 0.0 0 0.0 0 0.0 2.1494953632354736 0.13906237483024597 -0.2839455306529999 -0.6756492853164673 0.7372050881385803 -0.0 0.9644855260848999 0.5642683506011963 0 1.0 0 0.0 0 0.0 0 0.0 2.1494953632354736 0.13906237483024597 0.21605446934700012 -0.6756492853164673 0.7372050881385803 -0.0 0.5085511207580566 0.40191638469696045 0 1.0 0 0.0 0 0.0 0 0.0 0.5382177829742432 0.02193109691143036 -0.2839455306529999 0.443800151348114 0.8960844874382019 -0.0 0.9155381917953491 0.5919424295425415 0 1.0 0 0.0 0 0.0 0 0.0 0.5300559997558594 0.02574750781059265 -0.2839455306529999 0.4054689109325409 0.9140903949737549 -0.0 0.9197486042976379 0.5977127552032471 0 1.0 0 0.0 0 0.0 0 0.0 0.5300559997558594 0.02574750781059265 0.21605446934700012 0.4054689109325409 0.9140903949737549 -0.0 0.550326406955719 0.4469273090362549 0 1.0 0 0.0 0 0.0 0 0.0 1.2473232746124268 -0.08647764474153519 -0.2839455306529999 -0.9530014991760254 -0.3029267191886902 -0.0 0.08034449815750122 0.47963446378707886 0 1.0 0 0.0 0 0.0 0 0.0 1.2502384185791016 -0.09483286738395691 -0.2839455306529999 -0.9342631101608276 -0.3565477430820465 -0.0 0.07861322164535522 0.47155576944351196 0 1.0 0 0.0 0 0.0 0 0.0 1.2502384185791016 -0.09483286738395691 0.21605446934700012 -0.9342631101608276 -0.3565477430820465 -0.0 0.3786007761955261 0.33784085512161255 0 1.0 0 0.0 0 0.0 0 0.0 -0.3518340587615967 -0.07657542824745178 -0.2839455306529999 -0.8661457896232605 0.4997711181640625 -0.0 0.960374653339386 0.4969112277030945 0 1.0 0 0.0 0 0.0 0 0.0 -0.3551797866821289 -0.08188409358263016 -0.2839455306529999 -0.8230536580085754 0.5679494738578796 -0.0 0.9625728130340576 0.4907815456390381 0 1.0 0 0.0 0 0.0 0 0.0 -0.3551797866821289 -0.08188409358263016 0.21605446934700012 -0.8230536580085754 0.5679494738578796 -0.0 0.511112630367279 0.33321988582611084 0 1.0 0 0.0 0 0.0 0 0.0 -1.4964169263839722 0.1210615336894989 -0.2839455306529999 0.03430280461907387 -0.9993896484375 -0.0 0.05416753888130188 0.7601801156997681 0 1.0 0 0.0 0 0.0 0 0.0 -1.4921189546585083 0.12113326787948608 -0.2839455306529999 0.0016785180196166039 -0.999969482421875 -0.0 0.05072706937789917 0.7608742713928223 0 1.0 0 0.0 0 0.0 0 0.0 -1.4921189546585083 0.12113326787948608 0.21605446934700012 0.0016785180196166039 -0.999969482421875 -0.0 0.527971625328064 0.5664610266685486 0 1.0 0 0.0 0 0.0 0 0.0 0.5457203388214111 0.018002808094024658 -0.2839455306529999 0.4862514138221741 0.8737754225730896 -0.0 0.9118230938911438 0.5862237811088562 0 1.0 0 0.0 0 0.0 0 0.0 0.5382177829742432 0.02193109691143036 -0.2839455306529999 0.443800151348114 0.8960844874382019 -0.0 0.9155381917953491 0.5919424295425415 0 1.0 0 0.0 0 0.0 0 0.0 0.5382177829742432 0.02193109691143036 0.21605446934700012 0.443800151348114 0.8960844874382019 -0.0 0.5549336075782776 0.4429643750190735 0 1.0 0 0.0 0 0.0 0 0.0 2.258683919906616 0.13547462224960327 -0.2839455306529999 0.8884548544883728 -0.4589068293571472 -0.0 0.9027214050292969 0.5496842861175537 0 1.0 0 0.0 0 0.0 0 0.0 2.2611100673675537 0.14044153690338135 -0.2839455306529999 0.9083529114723206 -0.41816461086273193 -0.0 0.9011474847793579 0.5548092126846313 0 1.0 0 0.0 0 0.0 0 0.0 2.2611100673675537 0.14044153690338135 0.21605446934700012 0.9083529114723206 -0.41816461086273193 -0.0 0.5734215378761292 0.4135507345199585 0 1.0 0 0.0 0 0.0 0 0.0 0.2809107303619385 0.021230563521385193 -0.2839455306529999 -0.790459930896759 -0.6125065088272095 -0.0 0.0732530951499939 0.5927700996398926 0 1.0 0 0.0 0 0.0 0 0.0 0.2861208915710449 0.015069350600242615 -0.2839455306529999 -0.7363200783729553 -0.6765953302383423 -0.0 0.0702734887599945 0.5867007374763489 0 1.0 0 0.0 0 0.0 0 0.0 0.2861208915710449 0.015069350600242615 0.21605446934700012 -0.7363200783729553 -0.6765953302383423 -0.0 0.40415647625923157 0.4438801407814026 0 1.0 0 0.0 0 0.0 0 0.0 1.3553736209869385 -0.09155523777008057 -0.2839455306529999 0.8301034569740295 0.557573139667511 -0.0 0.026820480823516846 0.46813976764678955 0 1.0 0 0.0 0 0.0 0 0.0 1.3531529903411865 -0.08801734447479248 -0.2839455306529999 0.8624836206436157 0.5060274004936218 -0.0 0.028156548738479614 0.4720897674560547 0 1.0 0 0.0 0 0.0 0 0.0 1.3531529903411865 -0.08801734447479248 0.21605446934700012 0.8624836206436157 0.5060274004936218 -0.0 0.435935914516449 0.31473487615585327 0 1.0 0 0.0 0 0.0 0 0.0 -0.2504608631134033 -0.09035484492778778 -0.2839455306529999 0.9347819685935974 -0.3551744222640991 -0.0 0.9064401388168335 0.4806376099586487 0 1.0 0 0.0 0 0.0 0 0.0 -0.24636578559875488 -0.07842888683080673 -0.2839455306529999 0.9552598595619202 -0.29572436213493347 -0.0 0.903641939163208 0.4928281903266907 0 1.0 0 0.0 0 0.0 0 0.0 -0.24636578559875488 -0.07842888683080673 0.21605446934700012 0.9552598595619202 -0.29572436213493347 -0.0 0.576752245426178 0.35565972328186035 0 1.0 0 0.0 0 0.0 0 0.0 2.1494953632354736 0.13906237483024597 -0.2839455306529999 -0.6756492853164673 0.7372050881385803 -0.0 0.9644855260848999 0.5642683506011963 0 1.0 0 0.0 0 0.0 0 0.0 2.1454455852508545 0.135406494140625 -0.2839455306529999 -0.6655476689338684 0.7463301420211792 -0.0 0.9671920537948608 0.5599122643470764 0 1.0 0 0.0 0 0.0 0 0.0 2.1454455852508545 0.135406494140625 0.21605446934700012 -0.6655476689338684 0.7463301420211792 -0.0 0.505915641784668 0.3972187638282776 0 1.0 0 0.0 0 0.0 0 0.0 1.4927098751068115 -0.08878353983163834 -0.2839455306529999 -0.9767754077911377 0.2141483873128891 -0.0 0.9463337659835815 0.46781617403030396 0 1.0 0 0.0 0 0.0 0 0.0 1.4920799732208252 -0.09120375663042068 -0.2839455306529999 -0.9568468332290649 0.29050567746162415 -0.0 0.9468050003051758 0.46520084142684937 0 1.0 0 0.0 0 0.0 0 0.0 1.4920799732208252 -0.09120375663042068 0.21605446934700012 -0.9568468332290649 0.29050567746162415 -0.0 0.534095287322998 0.30716514587402344 0 1.0 0 0.0 0 0.0 0 0.0 -1.4921189546585083 0.12113326787948608 -0.2839455306529999 0.0016785180196166039 -0.999969482421875 -0.0 0.05072706937789917 0.7608742713928223 0 1.0 0 0.0 0 0.0 0 0.0 -1.4858118295669556 0.12104934453964233 -0.2839455306529999 -0.02774132415652275 -0.999603271484375 -0.0 0.04563558101654053 0.7615771293640137 0 1.0 0 0.0 0 0.0 0 0.0 -1.4858118295669556 0.12104934453964233 0.21605446934700012 -0.02774132415652275 -0.999603271484375 -0.0 0.5315316915512085 0.566885232925415 0 1.0 0 0.0 0 0.0 0 0.0 -0.47332167625427246 -0.08735086768865585 -0.2839455306529999 0.7547837495803833 0.6559343338012695 -0.0 0.033157676458358765 0.48806750774383545 0 1.0 0 0.0 0 0.0 0 0.0 -0.477933406829834 -0.0816299095749855 -0.2839455306529999 0.7995849251747131 0.600512683391571 -0.0 0.03590008616447449 0.4946441054344177 0 1.0 0 0.0 0 0.0 0 0.0 -0.477933406829834 -0.0816299095749855 0.21605446934700012 0.7995849251747131 0.600512683391571 -0.0 0.4272269308567047 0.3441292643547058 0 1.0 0 0.0 0 0.0 0 0.0 0.5525639057159424 0.013962626457214355 -0.2839455306529999 0.5330973267555237 0.8460341095924377 -0.0 0.9085732102394104 0.580565333366394 0 1.0 0 0.0 0 0.0 0 0.0 0.5457203388214111 0.018002808094024658 -0.2839455306529999 0.4862514138221741 0.8737754225730896 -0.0 0.9118230938911438 0.5862237811088562 0 1.0 0 0.0 0 0.0 0 0.0 0.5457203388214111 0.018002808094024658 0.21605446934700012 0.4862514138221741 0.8737754225730896 -0.0 0.5591184496879578 0.4389607310295105 0 1.0 0 0.0 0 0.0 0 0.0 1.4920799732208252 -0.09120375663042068 -0.2839455306529999 -0.9568468332290649 0.29050567746162415 -0.0 0.9468050003051758 0.46520084142684937 0 1.0 0 0.0 0 0.0 0 0.0 1.491269826889038 -0.0935315415263176 -0.2839455306529999 -0.9301736354827881 0.3671071529388428 -0.0 0.947371244430542 0.4626959562301636 0 1.0 0 0.0 0 0.0 0 0.0 1.491269826889038 -0.0935315415263176 0.21605446934700012 -0.9301736354827881 0.3671071529388428 -0.0 0.5336395502090454 0.30452263355255127 0 1.0 0 0.0 0 0.0 0 0.0 -0.3551797866821289 -0.08188409358263016 -0.2839455306529999 -0.8230536580085754 0.5679494738578796 -0.0 0.9625728130340576 0.4907815456390381 0 1.0 0 0.0 0 0.0 0 0.0 -0.3588440418243408 -0.08674763888120651 -0.2839455306529999 -0.7761772274971008 0.6304818987846375 -0.0 0.9649338722229004 0.4852173924446106 0 1.0 0 0.0 0 0.0 0 0.0 -0.3588440418243408 -0.08674763888120651 0.21605446934700012 -0.7761772274971008 0.6304818987846375 -0.0 0.5086210370063782 0.3273197412490845 0 1.0 0 0.0 0 0.0 0 0.0 2.256002187728882 0.13055634498596191 -0.2839455306529999 0.8673055171966553 -0.4977263808250427 -0.0 0.9044173359870911 0.5446003675460815 0 1.0 0 0.0 0 0.0 0 0.0 2.258683919906616 0.13547462224960327 -0.2839455306529999 0.8884548544883728 -0.4589068293571472 -0.0 0.9027214050292969 0.5496842861175537 0 1.0 0 0.0 0 0.0 0 0.0 2.258683919906616 0.13547462224960327 0.21605446934700012 0.8884548544883728 -0.4589068293571472 -0.0 0.5725508332252502 0.4077966809272766 0 1.0 0 0.0 0 0.0 0 0.0 0.2861208915710449 0.015069350600242615 -0.2839455306529999 -0.7363200783729553 -0.6765953302383423 -0.0 0.0702734887599945 0.5867007374763489 0 1.0 0 0.0 0 0.0 0 0.0 0.2919440269470215 0.009234070777893066 -0.2839455306529999 -0.6795861721038818 -0.7335734367370605 -0.0 0.06697684526443481 0.5809164047241211 0 1.0 0 0.0 0 0.0 0 0.0 0.2919440269470215 0.009234070777893066 0.21605446934700012 -0.6795861721038818 -0.7335734367370605 -0.0 0.40656495094299316 0.4366976022720337 0 1.0 0 0.0 0 0.0 0 0.0 -1.5005544424057007 0.12084627151489258 -0.2839455306529999 0.07089449465274811 -0.9974669814109802 -0.0 0.057448118925094604 0.7593033909797668 0 1.0 0 0.0 0 0.0 0 0.0 -1.4964169263839722 0.1210615336894989 -0.2839455306529999 0.03430280461907387 -0.9993896484375 -0.0 0.05416753888130188 0.7601801156997681 0 1.0 0 0.0 0 0.0 0 0.0 -1.4964169263839722 0.1210615336894989 0.21605446934700012 0.03430280461907387 -0.9993896484375 -0.0 0.5255527496337891 0.5660300254821777 0 1.0 0 0.0 0 0.0 0 0.0 2.1454455852508545 0.135406494140625 -0.2839455306529999 -0.6655476689338684 0.7463301420211792 -0.0 0.9671920537948608 0.5599122643470764 0 1.0 0 0.0 0 0.0 0 0.0 2.14091420173645 0.13141494989395142 -0.2839455306529999 -0.6572160720825195 0.7536851167678833 -0.0 0.9702067375183105 0.5551329851150513 0 1.0 0 0.0 0 0.0 0 0.0 2.14091420173645 0.13141494989395142 0.21605446934700012 -0.6572160720825195 0.7536851167678833 -0.0 0.5029294490814209 0.39210838079452515 0 1.0 0 0.0 0 0.0 0 0.0 -0.3588440418243408 -0.08674763888120651 -0.2839455306529999 -0.7761772274971008 0.6304818987846375 -0.0 0.9649338722229004 0.4852173924446106 0 1.0 0 0.0 0 0.0 0 0.0 -0.3627345561981201 -0.0911952406167984 -0.2839455306529999 -0.7318033576011658 0.6814783215522766 -0.0 0.9674052000045776 0.4801751375198364 0 1.0 0 0.0 0 0.0 0 0.0 -0.3627345561981201 -0.0911952406167984 0.21605446934700012 -0.7318033576011658 0.6814783215522766 -0.0 0.5059289336204529 0.32195907831192017 0 1.0 0 0.0 0 0.0 0 0.0 -1.4858118295669556 0.12104934453964233 -0.2839455306529999 -0.02774132415652275 -0.999603271484375 -0.0 0.04563558101654053 0.7615771293640137 0 1.0 0 0.0 0 0.0 0 0.0 -1.479849934577942 0.12079760432243347 -0.2839455306529999 -0.058351390063762665 -0.9982909560203552 -0.0 0.04079052805900574 0.761926531791687 0 1.0 0 0.0 0 0.0 0 0.0 -1.479849934577942 0.12079760432243347 0.21605446934700012 -0.058351390063762665 -0.9982909560203552 -0.0 0.534906268119812 0.5670909881591797 0 1.0 0 0.0 0 0.0 0 0.0 1.3577744960784912 -0.09490098059177399 -0.2839455306529999 0.7935422658920288 0.6084780693054199 -0.0 0.02539101243019104 0.464407742023468 0 1.0 0 0.0 0 0.0 0 0.0 1.3553736209869385 -0.09155523777008057 -0.2839455306529999 0.8301034569740295 0.557573139667511 -0.0 0.026820480823516846 0.46813976764678955 0 1.0 0 0.0 0 0.0 0 0.0 1.3553736209869385 -0.09155523777008057 0.21605446934700012 0.8301034569740295 0.557573139667511 -0.0 0.4371563494205475 0.3104267716407776 0 1.0 0 0.0 0 0.0 0 0.0 2.14091420173645 0.13141494989395142 -0.2839455306529999 -0.6572160720825195 0.7536851167678833 -0.0 0.9702067375183105 0.5551329851150513 0 1.0 0 0.0 0 0.0 0 0.0 2.1359012126922607 0.12708774209022522 -0.2839455306529999 -0.6502273678779602 0.7596972584724426 -0.0 0.9735246300697327 0.5499288439750671 0 1.0 0 0.0 0 0.0 0 0.0 2.1359012126922607 0.12708774209022522 0.21605446934700012 -0.6502273678779602 0.7596972584724426 -0.0 0.4995826780796051 0.3866015672683716 0 1.0 0 0.0 0 0.0 0 0.0 0.5587482452392578 0.00981055200099945 -0.2839455306529999 0.5844904780387878 0.8113650679588318 -0.0 0.9057610034942627 0.5749698281288147 0 1.0 0 0.0 0 0.0 0 0.0 0.5525639057159424 0.013962626457214355 -0.2839455306529999 0.5330973267555237 0.8460341095924377 -0.0 0.9085732102394104 0.580565333366394 0 1.0 0 0.0 0 0.0 0 0.0 0.5525639057159424 0.013962626457214355 0.21605446934700012 0.5330973267555237 0.8460341095924377 -0.0 0.562899649143219 0.4349040985107422 0 1.0 0 0.0 0 0.0 0 0.0 1.5875461101531982 -0.10015491396188736 -0.2839455306529999 0.9558396935462952 -0.2938016951084137 -0.0 0.8997503519058228 0.4588809609413147 0 1.0 0 0.0 0 0.0 0 0.0 1.5896236896514893 -0.0923299491405487 -0.2839455306529999 0.9756157398223877 -0.21933652460575104 -0.0 0.8982555270195007 0.4663318991661072 0 1.0 0 0.0 0 0.0 0 0.0 1.5896236896514893 -0.0923299491405487 0.21605446934700012 0.9756157398223877 -0.21933652460575104 -0.0 0.5898779034614563 0.3301680088043213 0 1.0 0 0.0 0 0.0 0 0.0 -0.4684762954711914 -0.09252697229385376 -0.2839455306529999 0.7024445533752441 0.7116916179656982 -0.0 0.030300259590148926 0.4821009039878845 0 1.0 0 0.0 0 0.0 0 0.0 -0.47332167625427246 -0.08735086768865585 -0.2839455306529999 0.7547837495803833 0.6559343338012695 -0.0 0.033157676458358765 0.48806750774383545 0 1.0 0 0.0 0 0.0 0 0.0 -0.47332167625427246 -0.08735086768865585 0.21605446934700012 0.7547837495803833 0.6559343338012695 -0.0 0.42968177795410156 0.3367283344268799 0 1.0 0 0.0 0 0.0 0 0.0 -1.5045313835144043 0.1204875111579895 -0.2839455306529999 0.11017181724309921 -0.9938963055610657 -0.0 0.060566484928131104 0.7582532167434692 0 1.0 0 0.0 0 0.0 0 0.0 -1.5005544424057007 0.12084627151489258 -0.2839455306529999 0.07089449465274811 -0.9974669814109802 -0.0 0.057448118925094604 0.7593033909797668 0 1.0 0 0.0 0 0.0 0 0.0 -1.5005544424057007 0.12084627151489258 0.21605446934700012 0.07089449465274811 -0.9974669814109802 -0.0 0.5232311487197876 0.565461277961731 0 1.0 0 0.0 0 0.0 0 0.0 0.5642733573913574 0.005546584725379944 -0.2839455306529999 0.6442762613296509 0.764763355255127 -0.0 0.9033610820770264 0.569435179233551 0 1.0 0 0.0 0 0.0 0 0.0 0.5587482452392578 0.00981055200099945 -0.2839455306529999 0.5844904780387878 0.8113650679588318 -0.0 0.9057610034942627 0.5749698281288147 0 1.0 0 0.0 0 0.0 0 0.0 0.5587482452392578 0.00981055200099945 0.21605446934700012 0.5844904780387878 0.8113650679588318 -0.0 0.5662951469421387 0.4307813048362732 0 1.0 0 0.0 0 0.0 0 0.0 1.491269826889038 -0.0935315415263176 -0.2839455306529999 -0.9301736354827881 0.3671071529388428 -0.0 0.947371244430542 0.4626959562301636 0 1.0 0 0.0 0 0.0 0 0.0 1.4902799129486084 -0.09576690196990967 -0.2839455306529999 -0.8968169093132019 0.4423657953739166 -0.0 0.9480323791503906 0.4602992534637451 0 1.0 0 0.0 0 0.0 0 0.0 1.4902799129486084 -0.09576690196990967 0.21605446934700012 -0.8968169093132019 0.4423657953739166 -0.0 0.5330555438995361 0.30196118354797363 0 1.0 0 0.0 0 0.0 0 0.0 2.2530648708343506 0.12568670511245728 -0.2839455306529999 0.843317985534668 -0.5373699069023132 -0.0 0.9062378406524658 0.5395541191101074 0 1.0 0 0.0 0 0.0 0 0.0 2.256002187728882 0.13055634498596191 -0.2839455306529999 0.8673055171966553 -0.4977263808250427 -0.0 0.9044173359870911 0.5446003675460815 0 1.0 0 0.0 0 0.0 0 0.0 2.256002187728882 0.13055634498596191 0.21605446934700012 0.8673055171966553 -0.4977263808250427 -0.0 0.5715339183807373 0.4020240902900696 0 1.0 0 0.0 0 0.0 0 0.0 0.2919440269470215 0.009234070777893066 -0.2839455306529999 -0.6795861721038818 -0.7335734367370605 -0.0 0.06697684526443481 0.5809164047241211 0 1.0 0 0.0 0 0.0 0 0.0 0.29838013648986816 0.0037247389554977417 -0.2839455306529999 -0.6217535734176636 -0.7831659913063049 -0.0 0.06334707140922546 0.5754096508026123 0 1.0 0 0.0 0 0.0 0 0.0 0.29838013648986816 0.0037247389554977417 0.21605446934700012 -0.6217535734176636 -0.7831659913063049 -0.0 0.4093855619430542 0.42966413497924805 0 1.0 0 0.0 0 0.0 0 0.0 -0.255185604095459 -0.1016727089881897 -0.2839455306529999 0.9091463685035706 -0.41645556688308716 -0.0 0.9094827175140381 0.4691436290740967 0 1.0 0 0.0 0 0.0 0 0.0 -0.2504608631134033 -0.09035484492778778 -0.2839455306529999 0.9347819685935974 -0.3551744222640991 -0.0 0.9064401388168335 0.4806376099586487 0 1.0 0 0.0 0 0.0 0 0.0 -0.2504608631134033 -0.09035484492778778 0.21605446934700012 0.9347819685935974 -0.3551744222640991 -0.0 0.5754992365837097 0.3424345850944519 0 1.0 0 0.0 0 0.0 0 0.0 -1.3330157995224 0.11431652307510376 -0.2839455306529999 0.982573926448822 0.18573564291000366 -0.0 0.9365357160568237 0.7316248416900635 0 1.0 0 0.0 0 0.0 0 0.0 -1.3343840837478638 0.12082192301750183 -0.2839455306529999 0.9733878374099731 0.22907193005084991 -0.0 0.9367607831954956 0.7377991676330566 0 1.0 0 0.0 0 0.0 0 0.0 -1.3343840837478638 0.12082192301750183 0.21605446934700012 0.9733878374099731 0.22907193005084991 -0.0 0.6105040311813354 0.569257378578186 0 1.0 0 0.0 0 0.0 0 0.0 2.1359012126922607 0.12708774209022522 -0.2839455306529999 -0.6502273678779602 0.7596972584724426 -0.0 0.9735246300697327 0.5499288439750671 0 1.0 0 0.0 0 0.0 0 0.0 2.130406618118286 0.12242487072944641 -0.2839455306529999 -0.6443067789077759 0.764732837677002 -0.0 0.9771391153335571 0.5443018674850464 0 1.0 0 0.0 0 0.0 0 0.0 2.130406618118286 0.12242487072944641 0.21605446934700012 -0.6443067789077759 0.764732837677002 -0.0 0.4958657920360565 0.380720853805542 0 1.0 0 0.0 0 0.0 0 0.0 1.2502384185791016 -0.09483286738395691 -0.2839455306529999 -0.9342631101608276 -0.3565477430820465 -0.0 0.07861322164535522 0.47155576944351196 0 1.0 0 0.0 0 0.0 0 0.0 1.2535793781280518 -0.10288161039352417 -0.2839455306529999 -0.9118015170097351 -0.41059601306915283 -0.0 0.07672339677810669 0.4637816548347473 0 1.0 0 0.0 0 0.0 0 0.0 1.2535793781280518 -0.10288161039352417 0.21605446934700012 -0.9118015170097351 -0.41059601306915283 -0.0 0.3792789578437805 0.3292854428291321 0 1.0 0 0.0 0 0.0 0 0.0 -0.3627345561981201 -0.0911952406167984 -0.2839455306529999 -0.7318033576011658 0.6814783215522766 -0.0 0.9674052000045776 0.4801751375198364 0 1.0 0 0.0 0 0.0 0 0.0 -0.3667590618133545 -0.09525609761476517 -0.2839455306529999 -0.6865749359130859 0.7270119190216064 -0.0 0.9699341058731079 0.47561323642730713 0 1.0 0 0.0 0 0.0 0 0.0 -0.3667590618133545 -0.09525609761476517 0.21605446934700012 -0.6865749359130859 0.7270119190216064 -0.0 0.5031017065048218 0.3171094059944153 0 1.0 0 0.0 0 0.0 0 0.0 -1.479849934577942 0.12079760432243347 -0.2839455306529999 -0.058351390063762665 -0.9982909560203552 -0.0 0.04079052805900574 0.761926531791687 0 1.0 0 0.0 0 0.0 0 0.0 -1.474233627319336 0.12037801742553711 -0.2839455306529999 -0.09262367337942123 -0.9956969022750854 -0.0 1.0362075567245483 0.7619456648826599 0 1.0 0 0.0 0 0.0 0 0.0 -1.474233627319336 0.12037801742553711 0.21605446934700012 -0.09262367337942123 -0.9956969022750854 -0.0 0.5380936861038208 0.5670830011367798 0 1.0 0 0.0 0 0.0 0 0.0 0.5691964626312256 0.0010247975587844849 -0.2839455306529999 0.7040009498596191 0.7101962566375732 -0.0 0.901335597038269 0.563788652420044 0 1.0 0 0.0 0 0.0 0 0.0 0.5642733573913574 0.005546584725379944 -0.2839455306529999 0.6442762613296509 0.764763355255127 -0.0 0.9033610820770264 0.569435179233551 0 1.0 0 0.0 0 0.0 0 0.0 0.5642733573913574 0.005546584725379944 0.21605446934700012 0.6442762613296509 0.764763355255127 -0.0 0.5693221092224121 0.4265784025192261 0 1.0 0 0.0 0 0.0 0 0.0 2.249709367752075 0.12069547176361084 -0.2839455306529999 0.8160954713821411 -0.5778679847717285 -0.0 0.9082791805267334 0.5343690514564514 0 1.0 0 0.0 0 0.0 0 0.0 2.2530648708343506 0.12568670511245728 -0.2839455306529999 0.843317985534668 -0.5373699069023132 -0.0 0.9062378406524658 0.5395541191101074 0 1.0 0 0.0 0 0.0 0 0.0 2.2530648708343506 0.12568670511245728 0.21605446934700012 0.843317985534668 -0.5373699069023132 -0.0 0.5703655481338501 0.39623093605041504 0 1.0 0 0.0 0 0.0 0 0.0 0.29838013648986816 0.0037247389554977417 -0.2839455306529999 -0.6217535734176636 -0.7831659913063049 -0.0 0.06334707140922546 0.5754096508026123 0 1.0 0 0.0 0 0.0 0 0.0 0.30542922019958496 -0.0014586597681045532 -0.2839455306529999 -0.5591906309127808 -0.8290352821350098 -0.0 0.05936703085899353 0.5701738595962524 0 1.0 0 0.0 0 0.0 0 0.0 0.30542922019958496 -0.0014586597681045532 0.21605446934700012 -0.5591906309127808 -0.8290352821350098 -0.0 0.4126429259777069 0.42278528213500977 0 1.0 0 0.0 0 0.0 0 0.0 1.3603556156158447 -0.09805455803871155 -0.2839455306529999 0.7530137300491333 0.6579790711402893 -0.0 0.023867100477218628 0.46089041233062744 0 1.0 0 0.0 0 0.0 0 0.0 1.3577744960784912 -0.09490098059177399 -0.2839455306529999 0.7935422658920288 0.6084780693054199 -0.0 0.02539101243019104 0.464407742023468 0 1.0 0 0.0 0 0.0 0 0.0 1.3577744960784912 -0.09490098059177399 0.21605446934700012 0.7935422658920288 0.6084780693054199 -0.0 0.43852657079696655 0.30631476640701294 0 1.0 0 0.0 0 0.0 0 0.0 -0.4633975028991699 -0.09715822339057922 -0.2839455306529999 0.6422925591468811 0.766411304473877 -0.0 0.027323424816131592 0.47673940658569336 0 1.0 0 0.0 0 0.0 0 0.0 -0.4684762954711914 -0.09252697229385376 -0.2839455306529999 0.7024445533752441 0.7116916179656982 -0.0 0.030300259590148926 0.4821009039878845 0 1.0 0 0.0 0 0.0 0 0.0 -0.4684762954711914 -0.09252697229385376 0.21605446934700012 0.7024445533752441 0.7116916179656982 -0.0 0.43238383531570435 0.3299248218536377 0 1.0 0 0.0 0 0.0 0 0.0 -1.5083478689193726 0.11998522281646729 -0.2839455306529999 0.15222632884979248 -0.9883114099502563 -0.0 0.06352132558822632 0.757038414478302 0 1.0 0 0.0 0 0.0 0 0.0 -1.5045313835144043 0.1204875111579895 -0.2839455306529999 0.11017181724309921 -0.9938963055610657 -0.0 0.060566484928131104 0.7582532167434692 0 1.0 0 0.0 0 0.0 0 0.0 -1.5045313835144043 0.1204875111579895 0.21605446934700012 0.11017181724309921 -0.9938963055610657 -0.0 0.5210064053535461 0.5647562146186829 0 1.0 0 0.0 0 0.0 0 0.0 2.130406618118286 0.12242487072944641 -0.2839455306529999 -0.6443067789077759 0.764732837677002 -0.0 0.9771391153335571 0.5443018674850464 0 1.0 0 0.0 0 0.0 0 0.0 2.1244304180145264 0.11742633581161499 -0.2839455306529999 -0.6392101645469666 0.7690054178237915 -0.0 0.9810415506362915 0.5382588505744934 0 1.0 0 0.0 0 0.0 0 0.0 2.1244304180145264 0.11742633581161499 0.21605446934700012 -0.6392101645469666 0.7690054178237915 -0.0 0.49176985025405884 0.37449586391448975 0 1.0 0 0.0 0 0.0 0 0.0 1.4902799129486084 -0.09576690196990967 -0.2839455306529999 -0.8968169093132019 0.4423657953739166 -0.0 0.9480323791503906 0.4602992534637451 0 1.0 0 0.0 0 0.0 0 0.0 1.4891102313995361 -0.0979098305106163 -0.2839455306529999 -0.8572039008140564 0.5149083137512207 -0.0 0.9487885236740112 0.45800888538360596 0 1.0 0 0.0 0 0.0 0 0.0 1.4891102313995361 -0.0979098305106163 0.21605446934700012 -0.8572039008140564 0.5149083137512207 -0.0 0.532341718673706 0.29947996139526367 0 1.0 0 0.0 0 0.0 0 0.0 -0.3667590618133545 -0.09525609761476517 -0.2839455306529999 -0.6865749359130859 0.7270119190216064 -0.0 0.9699341058731079 0.47561323642730713 0 1.0 0 0.0 0 0.0 0 0.0 -0.37091708183288574 -0.09893020987510681 -0.2839455306529999 -0.635486900806427 0.7720877528190613 -0.0 0.9725217819213867 0.47152602672576904 0 1.0 0 0.0 0 0.0 0 0.0 -0.37091708183288574 -0.09893020987510681 0.21605446934700012 -0.635486900806427 0.7720877528190613 -0.0 0.5001419186592102 0.3127697706222534 0 1.0 0 0.0 0 0.0 0 0.0 -1.474233627319336 0.12037801742553711 -0.2839455306529999 -0.09262367337942123 -0.9956969022750854 -0.0 1.0362075567245483 0.7619456648826599 0 1.0 0 0.0 0 0.0 0 0.0 -1.4689626693725586 0.11979058384895325 -0.2839455306529999 -0.13116855919361115 -0.9913327693939209 -0.0 1.0318984985351562 0.76165771484375 0 1.0 0 0.0 0 0.0 0 0.0 -1.4689626693725586 0.11979058384895325 0.21605446934700012 -0.13116855919361115 -0.9913327693939209 -0.0 0.5410932898521423 0.5668658018112183 0 1.0 0 0.0 0 0.0 0 0.0 0.5736916065216064 -0.0037840157747268677 -0.2839455306529999 0.7566148638725281 0.6538285613059998 -0.0 0.8995860815048218 0.5579735040664673 0 1.0 0 0.0 0 0.0 0 0.0 0.5691964626312256 0.0010247975587844849 -0.2839455306529999 0.7040009498596191 0.7101962566375732 -0.0 0.901335597038269 0.563788652420044 0 1.0 0 0.0 0 0.0 0 0.0 0.5691964626312256 0.0010247975587844849 0.21605446934700012 0.7040009498596191 0.7101962566375732 -0.0 0.5720335245132446 0.4221276044845581 0 1.0 0 0.0 0 0.0 0 0.0 1.4891102313995361 -0.0979098305106163 -0.2839455306529999 -0.8572039008140564 0.5149083137512207 -0.0 0.9487885236740112 0.45800888538360596 0 1.0 0 0.0 0 0.0 0 0.0 1.487760305404663 -0.0999603271484375 -0.2839455306529999 -0.8122501373291016 0.5832697749137878 -0.0 0.9496400952339172 0.45582300424575806 0 1.0 0 0.0 0 0.0 0 0.0 1.487760305404663 -0.0999603271484375 0.21605446934700012 -0.8122501373291016 0.5832697749137878 -0.0 0.5314958691596985 0.29707831144332886 0 1.0 0 0.0 0 0.0 0 0.0 2.24577260017395 0.11541235446929932 -0.2839455306529999 0.7895443439483643 -0.6136661767959595 -0.0 0.910639762878418 0.5288608074188232 0 1.0 0 0.0 0 0.0 0 0.0 2.249709367752075 0.12069547176361084 -0.2839455306529999 0.8160954713821411 -0.5778679847717285 -0.0 0.9082791805267334 0.5343690514564514 0 1.0 0 0.0 0 0.0 0 0.0 2.249709367752075 0.12069547176361084 0.21605446934700012 0.8160954713821411 -0.5778679847717285 -0.0 0.5689668655395508 0.39020174741744995 0 1.0 0 0.0 0 0.0 0 0.0 0.30542922019958496 -0.0014586597681045532 -0.2839455306529999 -0.5591906309127808 -0.8290352821350098 -0.0 0.05936703085899353 0.5701738595962524 0 1.0 0 0.0 0 0.0 0 0.0 0.31134724617004395 -0.005109667778015137 -0.2839455306529999 -0.4938505291938782 -0.869533360004425 -0.0 0.05601939558982849 0.5664652585983276 0 1.0 0 0.0 0 0.0 0 0.0 0.31134724617004395 -0.005109667778015137 0.21605446934700012 -0.4938505291938782 -0.869533360004425 -0.0 0.4155136048793793 0.41772472858428955 0 1.0 0 0.0 0 0.0 0 0.0 -1.5120036602020264 0.11933943629264832 -0.2839455306529999 0.19714957475662231 -0.9803460836410522 -0.0 0.06631192564964294 0.7556670308113098 0 1.0 0 0.0 0 0.0 0 0.0 -1.5083478689193726 0.11998522281646729 -0.2839455306529999 0.15222632884979248 -0.9883114099502563 -0.0 0.06352132558822632 0.757038414478302 0 1.0 0 0.0 0 0.0 0 0.0 -1.5083478689193726 0.11998522281646729 0.21605446934700012 0.15222632884979248 -0.9883114099502563 -0.0 0.5188777446746826 0.5639165043830872 0 1.0 0 0.0 0 0.0 0 0.0 2.1244304180145264 0.11742633581161499 -0.2839455306529999 -0.6392101645469666 0.7690054178237915 -0.0 0.9810415506362915 0.5382588505744934 0 1.0 0 0.0 0 0.0 0 0.0 2.1179726123809814 0.11209213733673096 -0.2839455306529999 -0.634754478931427 0.772667646408081 -0.0 0.9852210283279419 0.5318124890327454 0 1.0 0 0.0 0 0.0 0 0.0 2.1179726123809814 0.11209213733673096 0.21605446934700012 -0.634754478931427 0.772667646408081 -0.0 0.487287312746048 0.36796391010284424 0 1.0 0 0.0 0 0.0 0 0.0 -1.4689626693725586 0.11979058384895325 -0.2839455306529999 -0.13116855919361115 -0.9913327693939209 -0.0 1.0318984985351562 0.76165771484375 0 1.0 0 0.0 0 0.0 0 0.0 -1.4640370607376099 0.11903533339500427 -0.2839455306529999 -0.1745963990688324 -0.9846186637878418 -0.0 1.027872085571289 0.7610847353935242 0 1.0 0 0.0 0 0.0 0 0.0 -1.4640370607376099 0.11903533339500427 0.21605446934700012 -0.1745963990688324 -0.9846186637878418 -0.0 0.5439050197601318 0.5664436221122742 0 1.0 0 0.0 0 0.0 0 0.0 1.3631165027618408 -0.10101598501205444 -0.2839455306529999 0.7088534235954285 0.7053132653236389 -0.0 0.022248119115829468 0.45758455991744995 0 1.0 0 0.0 0 0.0 0 0.0 1.3603556156158447 -0.09805455803871155 -0.2839455306529999 0.7530137300491333 0.6579790711402893 -0.0 0.023867100477218628 0.46089041233062744 0 1.0 0 0.0 0 0.0 0 0.0 1.3603556156158447 -0.09805455803871155 0.21605446934700012 0.7530137300491333 0.6579790711402893 -0.0 0.44004958868026733 0.30239802598953247 0 1.0 0 0.0 0 0.0 0 0.0 -0.458085298538208 -0.10124462097883224 -0.2839455306529999 0.574510931968689 0.8184759020805359 -0.0 0.02422255277633667 0.4719785451889038 0 1.0 0 0.0 0 0.0 0 0.0 -0.4633975028991699 -0.09715822339057922 -0.2839455306529999 0.6422925591468811 0.766411304473877 -0.0 0.027323424816131592 0.47673940658569336 0 1.0 0 0.0 0 0.0 0 0.0 -0.4633975028991699 -0.09715822339057922 0.21605446934700012 0.6422925591468811 0.766411304473877 -0.0 0.43533870577812195 0.32372188568115234 0 1.0 0 0.0 0 0.0 0 0.0 0.5777585506439209 -0.008879855275154114 -0.2839455306529999 0.8056581020355225 0.5923642516136169 -0.0 0.898100733757019 0.5519903302192688 0 1.0 0 0.0 0 0.0 0 0.0 0.5736916065216064 -0.0037840157747268677 -0.2839455306529999 0.7566148638725281 0.6538285613059998 -0.0 0.8995860815048218 0.5579735040664673 0 1.0 0 0.0 0 0.0 0 0.0 0.5736916065216064 -0.0037840157747268677 0.21605446934700012 0.7566148638725281 0.6538285613059998 -0.0 0.5745289325714111 0.41740989685058594 0 1.0 0 0.0 0 0.0 0 0.0 1.487760305404663 -0.0999603271484375 -0.2839455306529999 -0.8122501373291016 0.5832697749137878 -0.0 0.9496400952339172 0.45582300424575806 0 1.0 0 0.0 0 0.0 0 0.0 1.4862301349639893 -0.10191839188337326 -0.2839455306529999 -0.7631458640098572 0.6461989283561707 -0.0 0.9505875706672668 0.4537401795387268 0 1.0 0 0.0 0 0.0 0 0.0 1.4862301349639893 -0.10191839188337326 0.21605446934700012 -0.7631458640098572 0.6461989283561707 -0.0 0.5305162668228149 0.29475635290145874 0 1.0 0 0.0 0 0.0 0 0.0 -0.37091708183288574 -0.09893020987510681 -0.2839455306529999 -0.635486900806427 0.7720877528190613 -0.0 0.9725217819213867 0.47152602672576904 0 1.0 0 0.0 0 0.0 0 0.0 -0.37520909309387207 -0.10221756994724274 -0.2839455306529999 -0.5784783363342285 0.8156682252883911 -0.0 0.9751698970794678 0.46790796518325806 0 1.0 0 0.0 0 0.0 0 0.0 -0.37520909309387207 -0.10221756994724274 0.21605446934700012 -0.5784783363342285 0.8156682252883911 -0.0 0.49705228209495544 0.30893921852111816 0 1.0 0 0.0 0 0.0 0 0.0 2.2412545680999756 0.1098373532295227 -0.2839455306529999 0.765923023223877 -0.6429029107093811 -0.0 0.9133265018463135 0.5230157375335693 0 1.0 0 0.0 0 0.0 0 0.0 2.24577260017395 0.11541235446929932 -0.2839455306529999 0.7895443439483643 -0.6136661767959595 -0.0 0.910639762878418 0.5288608074188232 0 1.0 0 0.0 0 0.0 0 0.0 2.24577260017395 0.11541235446929932 0.21605446934700012 0.7895443439483643 -0.6136661767959595 -0.0 0.5672522187232971 0.3837152123451233 0 1.0 0 0.0 0 0.0 0 0.0 0.31134724617004395 -0.005109667778015137 -0.2839455306529999 -0.4938505291938782 -0.869533360004425 -0.0 0.05601939558982849 0.5664652585983276 0 1.0 0 0.0 0 0.0 0 0.0 0.31847643852233887 -0.00882391631603241 -0.2839455306529999 -0.4374523162841797 -0.8992278575897217 -0.0 0.051966845989227295 0.5626710653305054 0 1.0 0 0.0 0 0.0 0 0.0 0.31847643852233887 -0.00882391631603241 0.21605446934700012 -0.4374523162841797 -0.8992278575897217 -0.0 0.4191216230392456 0.4123419523239136 0 1.0 0 0.0 0 0.0 0 0.0 -1.5154989957809448 0.1185501217842102 -0.2839455306529999 0.2448805272579193 -0.9695425033569336 -0.0 0.06893846392631531 0.7541464567184448 0 1.0 0 0.0 0 0.0 0 0.0 -1.5120036602020264 0.11933943629264832 -0.2839455306529999 0.19714957475662231 -0.9803460836410522 -0.0 0.06631192564964294 0.7556670308113098 0 1.0 0 0.0 0 0.0 0 0.0 -1.5120036602020264 0.11933943629264832 0.21605446934700012 0.19714957475662231 -0.9803460836410522 -0.0 0.516844630241394 0.5629432797431946 0 1.0 0 0.0 0 0.0 0 0.0 2.1179726123809814 0.11209213733673096 -0.2839455306529999 -0.634754478931427 0.772667646408081 -0.0 0.9852210283279419 0.5318124890327454 0 1.0 0 0.0 0 0.0 0 0.0 2.1110332012176514 0.10642224550247192 -0.2839455306529999 -0.635517418384552 0.7720572352409363 -0.0 0.9896643757820129 0.5249820947647095 0 1.0 0 0.0 0 0.0 0 0.0 2.1110332012176514 0.10642224550247192 0.21605446934700012 -0.635517418384552 0.7720572352409363 -0.0 1.482412576675415 0.36117082834243774 0 1.0 0 0.0 0 0.0 0 0.0 -1.4640370607376099 0.11903533339500427 -0.2839455306529999 -0.1745963990688324 -0.9846186637878418 -0.0 1.027872085571289 0.7610847353935242 0 1.0 0 0.0 0 0.0 0 0.0 -1.4594570398330688 0.1181122362613678 -0.2839455306529999 -0.22357860207557678 -0.9746696352958679 -0.0 1.0241351127624512 0.7602477073669434 0 1.0 0 0.0 0 0.0 0 0.0 -1.4594570398330688 0.1181122362613678 0.21605446934700012 -0.22357860207557678 -0.9746696352958679 -0.0 0.5465291142463684 0.5658203363418579 0 1.0 0 0.0 0 0.0 0 0.0 0.31847643852233887 -0.00882391631603241 -0.2839455306529999 -0.4374523162841797 -0.8992278575897217 -0.0 0.051966845989227295 0.5626710653305054 0 1.0 0 0.0 0 0.0 0 0.0 0.32681703567504883 -0.012601405382156372 -0.2839455306529999 -0.39289528131484985 -0.9195532202720642 -0.0 0.04717668890953064 0.5587554574012756 0 1.0 0 0.0 0 0.0 0 0.0 0.32681703567504883 -0.012601405382156372 0.21605446934700012 -0.39289528131484985 -0.9195532202720642 -0.0 0.4235183298587799 0.40663421154022217 0 1.0 0 0.0 0 0.0 0 0.0 1.5848753452301025 -0.10778042674064636 -0.2839455306529999 0.9302957057952881 -0.3667104244232178 -0.0 0.901482343673706 0.4516540765762329 0 1.0 0 0.0 0 0.0 0 0.0 1.5875461101531982 -0.10015491396188736 -0.2839455306529999 0.9558396935462952 -0.2938016951084137 -0.0 0.8997503519058228 0.4588809609413147 0 1.0 0 0.0 0 0.0 0 0.0 1.5875461101531982 -0.10015491396188736 0.21605446934700012 0.9558396935462952 -0.2938016951084137 -0.0 0.589529275894165 0.3221694827079773 0 1.0 0 0.0 0 0.0 0 0.0 -0.45253944396972656 -0.10478616505861282 -0.2839455306529999 0.4997406005859375 0.8661457896232605 -0.0 0.02099284529685974 0.46781474351882935 0 1.0 0 0.0 0 0.0 0 0.0 -0.458085298538208 -0.10124462097883224 -0.2839455306529999 0.574510931968689 0.8184759020805359 -0.0 0.02422255277633667 0.4719785451889038 0 1.0 0 0.0 0 0.0 0 0.0 -0.458085298538208 -0.10124462097883224 0.21605446934700012 0.574510931968689 0.8184759020805359 -0.0 0.43855130672454834 0.31812357902526855 0 1.0 0 0.0 0 0.0 0 0.0 2.2361552715301514 0.10397043824195862 -0.2839455306529999 0.7449567914009094 -0.6670736074447632 -0.0 0.9163463115692139 0.5168219804763794 0 1.0 0 0.0 0 0.0 0 0.0 2.2412545680999756 0.1098373532295227 -0.2839455306529999 0.765923023223877 -0.6429029107093811 -0.0 0.9133265018463135 0.5230157375335693 0 1.0 0 0.0 0 0.0 0 0.0 2.2412545680999756 0.1098373532295227 0.21605446934700012 0.765923023223877 -0.6429029107093811 -0.0 0.5652036666870117 0.3767634630203247 0 1.0 0 0.0 0 0.0 0 0.0 1.3660571575164795 -0.10378524661064148 -0.2839455306529999 0.6615497469902039 0.7498703002929688 -0.0 0.020532876253128052 0.4544876217842102 0 1.0 0 0.0 0 0.0 0 0.0 1.3631165027618408 -0.10101598501205444 -0.2839455306529999 0.7088534235954285 0.7053132653236389 -0.0 0.022248119115829468 0.45758455991744995 0 1.0 0 0.0 0 0.0 0 0.0 1.3631165027618408 -0.10101598501205444 0.21605446934700012 0.7088534235954285 0.7053132653236389 -0.0 0.44172802567481995 0.29867666959762573 0 1.0 0 0.0 0 0.0 0 0.0 -0.2605404853820801 -0.11238247901201248 -0.2839455306529999 0.8779259324073792 -0.47877436876296997 -0.0 0.9127802848815918 0.45833027362823486 0 1.0 0 0.0 0 0.0 0 0.0 -0.255185604095459 -0.1016727089881897 -0.2839455306529999 0.9091463685035706 -0.41645556688308716 -0.0 0.9094827175140381 0.4691436290740967 0 1.0 0 0.0 0 0.0 0 0.0 -0.255185604095459 -0.1016727089881897 0.21605446934700012 0.9091463685035706 -0.41645556688308716 -0.0 0.5738273859024048 0.3297680616378784 0 1.0 0 0.0 0 0.0 0 0.0 -1.5188337564468384 0.11761730909347534 -0.2839455306529999 0.2953581213951111 -0.9553819298744202 -0.0 0.07140150666236877 0.7524835467338562 0 1.0 0 0.0 0 0.0 0 0.0 -1.5154989957809448 0.1185501217842102 -0.2839455306529999 0.2448805272579193 -0.9695425033569336 -0.0 0.06893846392631531 0.7541464567184448 0 1.0 0 0.0 0 0.0 0 0.0 -1.5154989957809448 0.1185501217842102 0.21605446934700012 0.2448805272579193 -0.9695425033569336 -0.0 0.514906108379364 0.5618376135826111 0 1.0 0 0.0 0 0.0 0 0.0 2.1110332012176514 0.10642224550247192 -0.2839455306529999 -0.635517418384552 0.7720572352409363 -0.0 0.9896643757820129 0.5249820947647095 0 1.0 0 0.0 0 0.0 0 0.0 2.1040523052215576 0.10063314437866211 -0.2839455306529999 -0.6462294459342957 0.7631153464317322 -0.0 0.9940800070762634 0.5180487632751465 0 1.0 0 0.0 0 0.0 0 0.0 2.1040523052215576 0.10063314437866211 0.21605446934700012 -0.6462294459342957 0.7631153464317322 -0.0 1.4774537086486816 0.3544101119041443 0 1.0 0 0.0 0 0.0 0 0.0 0.581397294998169 -0.01426270604133606 -0.2839455306529999 0.8499709963798523 0.5268105268478394 -0.0 0.8968684673309326 0.5458382368087769 0 1.0 0 0.0 0 0.0 0 0.0 0.5777585506439209 -0.008879855275154114 -0.2839455306529999 0.8056581020355225 0.5923642516136169 -0.0 0.898100733757019 0.5519903302192688 0 1.0 0 0.0 0 0.0 0 0.0 0.5777585506439209 -0.008879855275154114 0.21605446934700012 0.8056581020355225 0.5923642516136169 -0.0 0.5768174529075623 0.4124223589897156 0 1.0 0 0.0 0 0.0 0 0.0 1.4862301349639893 -0.10191839188337326 -0.2839455306529999 -0.7631458640098572 0.6461989283561707 -0.0 0.9505875706672668 0.4537401795387268 0 1.0 0 0.0 0 0.0 0 0.0 1.4845201969146729 -0.10378402471542358 -0.2839455306529999 -0.7112338542938232 0.7029328346252441 -0.0 0.9516310691833496 0.4517591595649719 0 1.0 0 0.0 0 0.0 0 0.0 1.4845201969146729 -0.10378402471542358 0.21605446934700012 -0.7112338542938232 0.7029328346252441 -0.0 0.5294012427330017 0.2925146222114563 0 1.0 0 0.0 0 0.0 0 0.0 -0.37520909309387207 -0.10221756994724274 -0.2839455306529999 -0.5784783363342285 0.8156682252883911 -0.0 0.9751698970794678 0.46790796518325806 0 1.0 0 0.0 0 0.0 0 0.0 -0.3796348571777344 -0.10511818528175354 -0.2839455306529999 -0.5158543586730957 0.8566545844078064 -0.0 0.9778796434402466 0.46475380659103394 0 1.0 0 0.0 0 0.0 0 0.0 -0.3796348571777344 -0.10511818528175354 0.21605446934700012 -0.5158543586730957 0.8566545844078064 -0.0 0.4938368499279022 0.3056175708770752 0 1.0 0 0.0 0 0.0 0 0.0 -1.4594570398330688 0.1181122362613678 -0.2839455306529999 -0.22357860207557678 -0.9746696352958679 -0.0 1.0241351127624512 0.7602477073669434 0 1.0 0 0.0 0 0.0 0 0.0 -1.455222249031067 0.11702132225036621 -0.2839455306529999 -0.2787865698337555 -0.9603259563446045 -0.0 1.02069091796875 0.75916588306427 0 1.0 0 0.0 0 0.0 0 0.0 -1.455222249031067 0.11702132225036621 0.21605446934700012 -0.2787865698337555 -0.9603259563446045 -0.0 0.5489665269851685 0.5649992227554321 0 1.0 0 0.0 0 0.0 0 0.0 0.32681703567504883 -0.012601405382156372 -0.2839455306529999 -0.39289528131484985 -0.9195532202720642 -0.0 0.04717668890953064 0.5587554574012756 0 1.0 0 0.0 0 0.0 0 0.0 0.33636903762817383 -0.016442134976387024 -0.2839455306529999 -0.3570665717124939 -0.9340494871139526 -0.0 0.0416143536567688 0.554681658744812 0 1.0 0 0.0 0 0.0 0 0.0 0.33636903762817383 -0.016442134976387024 0.21605446934700012 -0.3570665717124939 -0.9340494871139526 -0.0 0.4287617802619934 0.4006116986274719 0 1.0 0 0.0 0 0.0 0 0.0 1.2535793781280518 -0.10288161039352417 -0.2839455306529999 -0.9118015170097351 -0.41059601306915283 -0.0 0.07672339677810669 0.4637816548347473 0 1.0 0 0.0 0 0.0 0 0.0 1.2573459148406982 -0.11062387377023697 -0.2839455306529999 -0.8855555653572083 -0.46449172496795654 -0.0 0.07467031478881836 0.45629990100860596 0 1.0 0 0.0 0 0.0 0 0.0 1.2573459148406982 -0.11062387377023697 0.21605446934700012 -0.8855555653572083 -0.46449172496795654 -0.0 0.380201518535614 0.32091307640075684 0 1.0 0 0.0 0 0.0 0 0.0 2.2304742336273193 0.09781163930892944 -0.2839455306529999 0.7263100147247314 -0.6873378753662109 -0.0 0.9197068810462952 0.5102700591087341 0 1.0 0 0.0 0 0.0 0 0.0 2.2361552715301514 0.10397043824195862 -0.2839455306529999 0.7449567914009094 -0.6670736074447632 -0.0 0.9163463115692139 0.5168219804763794 0 1.0 0 0.0 0 0.0 0 0.0 2.2361552715301514 0.10397043824195862 0.21605446934700012 0.7449567914009094 -0.6670736074447632 -0.0 0.5628004670143127 0.3693418502807617 0 1.0 0 0.0 0 0.0 0 0.0 -0.4467599391937256 -0.10778285562992096 -0.2839455306529999 0.4193548262119293 0.9078035950660706 -0.0 0.01762986183166504 0.4642455577850342 0 1.0 0 0.0 0 0.0 0 0.0 -0.45253944396972656 -0.10478616505861282 -0.2839455306529999 0.4997406005859375 0.8661457896232605 -0.0 0.02099284529685974 0.46781474351882935 0 1.0 0 0.0 0 0.0 0 0.0 -0.45253944396972656 -0.10478616505861282 0.21605446934700012 0.4997406005859375 0.8661457896232605 -0.0 0.4420255124568939 0.31313610076904297 0 1.0 0 0.0 0 0.0 0 0.0 -1.5220080614089966 0.11654096841812134 -0.2839455306529999 0.3482772409915924 -0.9373760223388672 -0.0 0.07370230555534363 0.7506841421127319 0 1.0 0 0.0 0 0.0 0 0.0 -1.5188337564468384 0.11761730909347534 -0.2839455306529999 0.2953581213951111 -0.9553819298744202 -0.0 0.07140150666236877 0.7524835467338562 0 1.0 0 0.0 0 0.0 0 0.0 -1.5188337564468384 0.11761730909347534 0.21605446934700012 0.2953581213951111 -0.9553819298744202 -0.0 0.5130614042282104 0.5606002807617188 0 1.0 0 0.0 0 0.0 0 0.0 2.1040523052215576 0.10063314437866211 -0.2839455306529999 -0.6462294459342957 0.7631153464317322 -0.0 0.9940800070762634 0.5180487632751465 0 1.0 0 0.0 0 0.0 0 0.0 2.0974700450897217 0.09494137763977051 -0.2839455306529999 -0.6625263094902039 0.749015748500824 -0.0 0.9981878995895386 0.5112894177436829 0 1.0 0 0.0 0 0.0 0 0.0 2.0974700450897217 0.09494137763977051 0.21605446934700012 -0.6625263094902039 0.749015748500824 -0.0 1.4727293252944946 0.34793686866760254 0 1.0 0 0.0 0 0.0 0 0.0 0.5846080780029297 -0.0199325829744339 -0.2839455306529999 0.8887600302696228 0.45832696557044983 -0.0 0.8958795666694641 0.5395151376724243 0 1.0 0 0.0 0 0.0 0 0.0 0.581397294998169 -0.01426270604133606 -0.2839455306529999 0.8499709963798523 0.5268105268478394 -0.0 0.8968684673309326 0.5458382368087769 0 1.0 0 0.0 0 0.0 0 0.0 0.581397294998169 -0.01426270604133606 0.21605446934700012 0.8499709963798523 0.5268105268478394 -0.0 0.5789073705673218 0.4071616530418396 0 1.0 0 0.0 0 0.0 0 0.0 1.4845201969146729 -0.10378402471542358 -0.2839455306529999 -0.7112338542938232 0.7029328346252441 -0.0 0.9516310691833496 0.4517591595649719 0 1.0 0 0.0 0 0.0 0 0.0 1.4826304912567139 -0.10555722564458847 -0.2839455306529999 -0.6577044129371643 0.7532273530960083 -0.0 0.9527712464332581 0.44987887144088745 0 1.0 0 0.0 0 0.0 0 0.0 1.4826304912567139 -0.10555722564458847 0.21605446934700012 -0.6577044129371643 0.7532273530960083 -0.0 0.5281489491462708 0.29035401344299316 0 1.0 0 0.0 0 0.0 0 0.0 -0.3796348571777344 -0.10511818528175354 -0.2839455306529999 -0.5158543586730957 0.8566545844078064 -0.0 0.9778796434402466 0.46475380659103394 0 1.0 0 0.0 0 0.0 0 0.0 -0.38419437408447266 -0.10763204842805862 -0.2839455306529999 -0.44813379645347595 0.8939481973648071 -0.0 0.980652391910553 0.4620588421821594 0 1.0 0 0.0 0 0.0 0 0.0 -0.38419437408447266 -0.10763204842805862 0.21605446934700012 -0.44813379645347595 0.8939481973648071 -0.0 0.4905005395412445 0.3028048276901245 0 1.0 0 0.0 0 0.0 0 0.0 -1.455222249031067 0.11702132225036621 -0.2839455306529999 -0.2787865698337555 -0.9603259563446045 -0.0 1.02069091796875 0.75916588306427 0 1.0 0 0.0 0 0.0 0 0.0 -1.4513328075408936 0.11576256155967712 -0.2839455306529999 -0.3408612310886383 -0.940092146396637 -0.0 1.0175414085388184 0.7578567266464233 0 1.0 0 0.0 0 0.0 0 0.0 -1.4513328075408936 0.11576256155967712 0.21605446934700012 -0.3408612310886383 -0.940092146396637 -0.0 0.5512181520462036 0.5639832019805908 0 1.0 0 0.0 0 0.0 0 0.0 0.33636903762817383 -0.016442134976387024 -0.2839455306529999 -0.3570665717124939 -0.9340494871139526 -0.0 0.0416143536567688 0.554681658744812 0 1.0 0 0.0 0 0.0 0 0.0 0.34713220596313477 -0.020346105098724365 -0.2839455306529999 -0.32773828506469727 -0.9447309970855713 -0.0 0.03524616360664368 0.5504134297370911 0 1.0 0 0.0 0 0.0 0 0.0 0.34713220596313477 -0.020346105098724365 0.21605446934700012 -0.32773828506469727 -0.9447309970855713 -0.0 0.4349146783351898 0.3943026661872864 0 1.0 0 0.0 0 0.0 0 0.0 -0.38419437408447266 -0.10763204842805862 -0.2839455306529999 -0.44813379645347595 0.8939481973648071 -0.0 0.980652391910553 0.4620588421821594 0 1.0 0 0.0 0 0.0 0 0.0 -0.3888876438140869 -0.10975916683673859 -0.2839455306529999 -0.37626269459724426 0.9264808893203735 -0.0 0.9834892749786377 0.45981884002685547 0 1.0 0 0.0 0 0.0 0 0.0 -0.3888876438140869 -0.10975916683673859 0.21605446934700012 -0.37626269459724426 0.9264808893203735 -0.0 0.48704904317855835 0.30050182342529297 0 1.0 0 0.0 0 0.0 0 0.0 2.2242119312286377 0.09136095643043518 -0.2839455306529999 0.7097079157829285 -0.7044892907142639 -0.0 0.923414945602417 0.5033544301986694 0 1.0 0 0.0 0 0.0 0 0.0 2.2304742336273193 0.09781163930892944 -0.2839455306529999 0.7263100147247314 -0.6873378753662109 -0.0 0.9197068810462952 0.5102700591087341 0 1.0 0 0.0 0 0.0 0 0.0 2.2304742336273193 0.09781163930892944 0.21605446934700012 0.7263100147247314 -0.6873378753662109 -0.0 0.5600180625915527 0.3614509701728821 0 1.0 0 0.0 0 0.0 0 0.0 1.3691771030426025 -0.10636235028505325 -0.2839455306529999 0.6100039482116699 0.7923520803451538 -0.0 0.018720537424087524 0.45159733295440674 0 1.0 0 0.0 0 0.0 0 0.0 1.3660571575164795 -0.10378524661064148 -0.2839455306529999 0.6615497469902039 0.7498703002929688 -0.0 0.020532876253128052 0.4544876217842102 0 1.0 0 0.0 0 0.0 0 0.0 1.3660571575164795 -0.10378524661064148 0.21605446934700012 0.6615497469902039 0.7498703002929688 -0.0 0.4435648024082184 0.2951512336730957 0 1.0 0 0.0 0 0.0 0 0.0 -1.5250217914581299 0.11532112956047058 -0.2839455306529999 0.4033326208591461 -0.9150364398956299 -0.0 0.0758422315120697 0.7487537860870361 0 1.0 0 0.0 0 0.0 0 0.0 -1.5220080614089966 0.11654096841812134 -0.2839455306529999 0.3482772409915924 -0.9373760223388672 -0.0 0.07370230555534363 0.7506841421127319 0 1.0 0 0.0 0 0.0 0 0.0 -1.5220080614089966 0.11654096841812134 0.21605446934700012 0.3482772409915924 -0.9373760223388672 -0.0 0.5113095641136169 0.5592316389083862 0 1.0 0 0.0 0 0.0 0 0.0 2.0974700450897217 0.09494137763977051 -0.2839455306529999 -0.6625263094902039 0.749015748500824 -0.0 0.9981878995895386 0.5112894177436829 0 1.0 0 0.0 0 0.0 0 0.0 2.0912868976593018 0.08934691548347473 -0.2839455306529999 -0.6799523830413818 0.7332376837730408 -0.0 1.0019910335540771 0.5047188401222229 0 1.0 0 0.0 0 0.0 0 0.0 2.0912868976593018 0.08934691548347473 0.21605446934700012 -0.6799523830413818 0.7332376837730408 -0.0 1.4682507514953613 0.3417431116104126 0 1.0 0 0.0 0 0.0 0 0.0 0.587390661239624 -0.025889486074447632 -0.2839455306529999 0.921506404876709 0.3883175253868103 -0.0 0.8951253294944763 0.5330183506011963 0 1.0 0 0.0 0 0.0 0 0.0 0.5846080780029297 -0.0199325829744339 -0.2839455306529999 0.8887600302696228 0.45832696557044983 -0.0 0.8958795666694641 0.5395151376724243 0 1.0 0 0.0 0 0.0 0 0.0 0.5846080780029297 -0.0199325829744339 0.21605446934700012 0.8887600302696228 0.45832696557044983 -0.0 0.5808061361312866 0.40162408351898193 0 1.0 0 0.0 0 0.0 0 0.0 1.4826304912567139 -0.10555722564458847 -0.2839455306529999 -0.6577044129371643 0.7532273530960083 -0.0 0.9527712464332581 0.44987887144088745 0 1.0 0 0.0 0 0.0 0 0.0 1.480560541152954 -0.10723800212144852 -0.2839455306529999 -0.5939817428588867 0.8044679164886475 -0.0 0.9540088772773743 0.4480985999107361 0 1.0 0 0.0 0 0.0 0 0.0 1.480560541152954 -0.10723800212144852 0.21605446934700012 -0.5939817428588867 0.8044679164886475 -0.0 0.526757001876831 0.2882760167121887 0 1.0 0 0.0 0 0.0 0 0.0 -1.637346625328064 0.1158793568611145 -0.2839455306529999 -0.9163182377815247 0.40040284395217896 -0.0 0.14502182602882385 0.7068488597869873 0 1.0 0 0.0 0 0.0 0 0.0 -1.6406108140945435 0.10786223411560059 -0.2839455306529999 -0.9349040389060974 0.35483869910240173 -0.0 0.14534926414489746 0.6984879970550537 0 1.0 0 0.0 0 0.0 0 0.0 -1.6406108140945435 0.10786223411560059 0.21605446934700012 -0.9349040389060974 0.35483869910240173 -0.0 0.4515746533870697 0.5366171598434448 0 1.0 0 0.0 0 0.0 0 0.0 0.34713220596313477 -0.020346105098724365 -0.2839455306529999 -0.32773828506469727 -0.9447309970855713 -0.0 0.03524616360664368 0.5504134297370911 0 1.0 0 0.0 0 0.0 0 0.0 0.35910677909851074 -0.024313315749168396 -0.2839455306529999 -0.3034150302410126 -0.9528489112854004 -0.0 0.028042852878570557 0.545917272567749 0 1.0 0 0.0 0 0.0 0 0.0 0.35910677909851074 -0.024313315749168396 0.21605446934700012 -0.3034150302410126 -0.9528489112854004 -0.0 0.44204097986221313 0.387759804725647 0 1.0 0 0.0 0 0.0 0 0.0 -0.4407472610473633 -0.11023469269275665 -0.2839455306529999 0.335123747587204 0.9421674013137817 -0.0 0.014129281044006348 0.46126997470855713 0 1.0 0 0.0 0 0.0 0 0.0 -0.4467599391937256 -0.10778285562992096 -0.2839455306529999 0.4193548262119293 0.9078035950660706 -0.0 0.01762986183166504 0.4642455577850342 0 1.0 0 0.0 0 0.0 0 0.0 -0.4467599391937256 -0.10778285562992096 0.21605446934700012 0.4193548262119293 0.9078035950660706 -0.0 0.4457634687423706 0.30876803398132324 0 1.0 0 0.0 0 0.0 0 0.0 -0.3888876438140869 -0.10975916683673859 -0.2839455306529999 -0.37626269459724426 0.9264808893203735 -0.0 0.9834892749786377 0.45981884002685547 0 1.0 0 0.0 0 0.0 0 0.0 -0.39371466636657715 -0.11149953305721283 -0.2839455306529999 -0.3014313280582428 0.9534592628479004 -0.0 0.9863911867141724 0.4580300450325012 0 1.0 0 0.0 0 0.0 0 0.0 -0.39371466636657715 -0.11149953305721283 0.21605446934700012 -0.3014313280582428 0.9534592628479004 -0.0 1.4834891557693481 0.2987098693847656 0 1.0 0 0.0 0 0.0 0 0.0 -1.4513328075408936 0.11576256155967712 -0.2839455306529999 -0.3408612310886383 -0.940092146396637 -0.0 1.0175414085388184 0.7578567266464233 0 1.0 0 0.0 0 0.0 0 0.0 -1.4477888345718384 0.11433598399162292 -0.2839455306529999 -0.41007721424102783 -0.9120151400566101 -0.0 1.0146870613098145 0.7563359141349792 0 1.0 0 0.0 0 0.0 0 0.0 -1.4477888345718384 0.11433598399162292 0.21605446934700012 -0.41007721424102783 -0.9120151400566101 -0.0 0.5532851219177246 0.5627743005752563 0 1.0 0 0.0 0 0.0 0 0.0 2.2173683643341064 0.08461838960647583 -0.2839455306529999 0.694814920425415 -0.7191686630249023 -0.0 0.927477240562439 0.4960745573043823 0 1.0 0 0.0 0 0.0 0 0.0 2.2242119312286377 0.09136095643043518 -0.2839455306529999 0.7097079157829285 -0.7044892907142639 -0.0 0.923414945602417 0.5033544301986694 0 1.0 0 0.0 0 0.0 0 0.0 2.2242119312286377 0.09136095643043518 0.21605446934700012 0.7097079157829285 -0.7044892907142639 -0.0 0.5568292737007141 0.3530978560447693 0 1.0 0 0.0 0 0.0 0 0.0 0.35910677909851074 -0.024313315749168396 -0.2839455306529999 -0.3034150302410126 -0.9528489112854004 -0.0 0.028042852878570557 0.545917272567749 0 1.0 0 0.0 0 0.0 0 0.0 0.37229275703430176 -0.028343766927719116 -0.2839455306529999 -0.28290659189224243 -0.9591357111930847 -0.0 0.019985288381576538 0.541165828704834 0 1.0 0 0.0 0 0.0 0 0.0 0.37229275703430176 -0.028343766927719116 0.21605446934700012 -0.28290659189224243 -0.9591357111930847 -0.0 0.450199693441391 0.381067156791687 0 1.0 0 0.0 0 0.0 0 0.0 1.3724949359893799 -0.10874000191688538 -0.2839455306529999 0.5534226298332214 0.8328806161880493 -0.0 0.01679942011833191 0.44891852140426636 0 1.0 0 0.0 0 0.0 0 0.0 1.3691771030426025 -0.10636235028505325 -0.2839455306529999 0.6100039482116699 0.7923520803451538 -0.0 0.018720537424087524 0.45159733295440674 0 1.0 0 0.0 0 0.0 0 0.0 1.3691771030426025 -0.10636235028505325 0.21605446934700012 0.6100039482116699 0.7923520803451538 -0.0 0.44556230306625366 0.2918233871459961 0 1.0 0 0.0 0 0.0 0 0.0 2.0912868976593018 0.08934691548347473 -0.2839455306529999 -0.6799523830413818 0.7332376837730408 -0.0 0.0019910037517547607 0.5047188401222229 0 1.0 0 0.0 0 0.0 0 0.0 2.085502862930298 0.08384972810745239 -0.2839455306529999 -0.6985381841659546 0.7155674695968628 -0.0 0.00549432635307312 0.49834656715393066 0 1.0 0 0.0 0 0.0 0 0.0 2.085502862930298 0.08384972810745239 0.21605446934700012 -0.6985381841659546 0.7155674695968628 -0.0 0.46402648091316223 0.3358168601989746 0 1.0 0 0.0 0 0.0 0 0.0 1.480560541152954 -0.10723800212144852 -0.2839455306529999 -0.5939817428588867 0.8044679164886475 -0.0 0.9540088772773743 0.4480985999107361 0 1.0 0 0.0 0 0.0 0 0.0 1.4772183895111084 -0.10947578400373459 -0.2839455306529999 -0.5250709652900696 0.8510391712188721 -0.0 0.9559882879257202 0.44572991132736206 0 1.0 0 0.0 0 0.0 0 0.0 1.4772183895111084 -0.10947578400373459 0.21605446934700012 -0.5250709652900696 0.8510391712188721 -0.0 0.5244709849357605 0.28544747829437256 0 1.0 0 0.0 0 0.0 0 0.0 -0.43450093269348145 -0.1121416762471199 -0.2839455306529999 0.24909207224845886 0.9684743881225586 -0.0 0.010486572980880737 0.4588884115219116 0 1.0 0 0.0 0 0.0 0 0.0 -0.4407472610473633 -0.11023469269275665 -0.2839455306529999 0.335123747587204 0.9421674013137817 -0.0 0.014129281044006348 0.46126997470855713 0 1.0 0 0.0 0 0.0 0 0.0 -0.4407472610473633 -0.11023469269275665 0.21605446934700012 0.335123747587204 0.9421674013137817 -0.0 0.449765145778656 0.3050304651260376 0 1.0 0 0.0 0 0.0 0 0.0 -1.5278749465942383 0.11395779252052307 -0.2839455306529999 0.4599749743938446 -0.8879055380821228 -0.0 0.0778232216835022 0.746696949005127 0 1.0 0 0.0 0 0.0 0 0.0 -1.5250217914581299 0.11532112956047058 -0.2839455306529999 0.4033326208591461 -0.9150364398956299 -0.0 0.0758422315120697 0.7487537860870361 0 1.0 0 0.0 0 0.0 0 0.0 -1.5250217914581299 0.11532112956047058 0.21605446934700012 0.4033326208591461 -0.9150364398956299 -0.0 0.5096496939659119 0.5577319860458374 0 1.0 0 0.0 0 0.0 0 0.0 0.589745283126831 -0.032133400440216064 -0.2839455306529999 0.9480269551277161 0.3180944323539734 -0.0 0.8945980072021484 0.526344895362854 0 1.0 0 0.0 0 0.0 0 0.0 0.587390661239624 -0.025889486074447632 -0.2839455306529999 0.921506404876709 0.3883175253868103 -0.0 0.8951253294944763 0.5330183506011963 0 1.0 0 0.0 0 0.0 0 0.0 0.587390661239624 -0.025889486074447632 0.21605446934700012 0.921506404876709 0.3883175253868103 -0.0 0.5825201869010925 0.39580583572387695 0 1.0 0 0.0 0 0.0 0 0.0 -0.39371466636657715 -0.11149953305721283 -0.2839455306529999 -0.3014313280582428 0.9534592628479004 -0.0 0.9863911867141724 0.4580300450325012 0 1.0 0 0.0 0 0.0 0 0.0 -0.39867544174194336 -0.11285315454006195 -0.2839455306529999 -0.22501297295093536 0.9743339419364929 -0.0 0.9893592596054077 0.4566894769668579 0 1.0 0 0.0 0 0.0 0 0.0 -0.39867544174194336 -0.11285315454006195 0.21605446934700012 -0.22501297295093536 0.9743339419364929 -0.0 1.4798285961151123 0.29743075370788574 0 1.0 0 0.0 0 0.0 0 0.0 -1.4477888345718384 0.11433598399162292 -0.2839455306529999 -0.41007721424102783 -0.9120151400566101 -0.0 1.0146870613098145 0.7563359141349792 0 1.0 0 0.0 0 0.0 0 0.0 -1.4445902109146118 0.11274155974388123 -0.2839455306529999 -0.4862819314002991 -0.8737754225730896 -0.0 1.012126088142395 0.7546167373657227 0 1.0 0 0.0 0 0.0 0 0.0 -1.4445902109146118 0.11274155974388123 0.21605446934700012 -0.4862819314002991 -0.8737754225730896 -0.0 0.5551687479019165 0.5613738298416138 0 1.0 0 0.0 0 0.0 0 0.0 2.2099435329437256 0.07758393883705139 -0.2839455306529999 0.6814478039741516 -0.7318338751792908 -0.0 0.9318990707397461 0.4884364604949951 0 1.0 0 0.0 0 0.0 0 0.0 2.2173683643341064 0.08461838960647583 -0.2839455306529999 0.694814920425415 -0.7191686630249023 -0.0 0.927477240562439 0.4960745573043823 0 1.0 0 0.0 0 0.0 0 0.0 2.2173683643341064 0.08461838960647583 0.21605446934700012 0.694814920425415 -0.7191686630249023 -0.0 0.5532031655311584 0.3442986011505127 0 1.0 0 0.0 0 0.0 0 0.0 0.37229275703430176 -0.028343766927719116 -0.2839455306529999 -0.28290659189224243 -0.9591357111930847 -0.0 0.019985288381576538 0.541165828704834 0 1.0 0 0.0 0 0.0 0 0.0 0.3866901397705078 -0.032437458634376526 -0.2839455306529999 -0.26541948318481445 -0.964110255241394 -0.0 0.01107051968574524 0.5361419320106506 0 1.0 0 0.0 0 0.0 0 0.0 0.3866901397705078 -0.032437458634376526 0.21605446934700012 -0.26541948318481445 -0.964110255241394 -0.0 0.459436297416687 0.37434637546539307 0 1.0 0 0.0 0 0.0 0 0.0 1.5816113948822021 -0.11520648002624512 -0.2839455306529999 0.8994414806365967 -0.4369640052318573 -0.0 0.9034565687179565 0.4446355104446411 0 1.0 0 0.0 0 0.0 0 0.0 1.5848753452301025 -0.10778042674064636 -0.2839455306529999 0.9302957057952881 -0.3667104244232178 -0.0 0.901482343673706 0.4516540765762329 0 1.0 0 0.0 0 0.0 0 0.0 1.5848753452301025 -0.10778042674064636 0.21605446934700012 0.9302957057952881 -0.3667104244232178 -0.0 0.5888720750808716 0.3142467737197876 0 1.0 0 0.0 0 0.0 0 0.0 2.085502862930298 0.08384972810745239 -0.2839455306529999 -0.6985381841659546 0.7155674695968628 -0.0 0.00549432635307312 0.49834656715393066 0 1.0 0 0.0 0 0.0 0 0.0 2.0801174640655518 0.07844984531402588 -0.2839455306529999 -0.7183446884155273 0.695669412612915 -0.0 0.00870424509048462 0.4921778440475464 0 1.0 0 0.0 0 0.0 0 0.0 2.0801174640655518 0.07844984531402588 0.21605446934700012 -0.7183446884155273 0.695669412612915 -0.0 0.4600628614425659 0.3301432728767395 0 1.0 0 0.0 0 0.0 0 0.0 1.3760263919830322 -0.11091089993715286 -0.2839455306529999 0.4943082928657532 0.8692587018013 -0.0 0.014759421348571777 0.4464564919471741 0 1.0 0 0.0 0 0.0 0 0.0 1.3724949359893799 -0.10874000191688538 -0.2839455306529999 0.5534226298332214 0.8328806161880493 -0.0 0.01679942011833191 0.44891852140426636 0 1.0 0 0.0 0 0.0 0 0.0 1.3724949359893799 -0.10874000191688538 0.21605446934700012 0.5534226298332214 0.8328806161880493 -0.0 0.44773662090301514 0.2886993885040283 0 1.0 0 0.0 0 0.0 0 0.0 -0.4280209541320801 -0.11350381374359131 -0.2839455306529999 0.16342662274837494 0.9865413308143616 -0.0 0.006697714328765869 0.45710289478302 0 1.0 0 0.0 0 0.0 0 0.0 -0.43450093269348145 -0.1121416762471199 -0.2839455306529999 0.24909207224845886 0.9684743881225586 -0.0 0.010486572980880737 0.4588884115219116 0 1.0 0 0.0 0 0.0 0 0.0 -0.43450093269348145 -0.1121416762471199 0.21605446934700012 0.24909207224845886 0.9684743881225586 -0.0 0.4540289342403412 0.30193692445755005 0 1.0 0 0.0 0 0.0 0 0.0 -1.3318300247192383 0.10725411772727966 -0.2839455306529999 0.9889522790908813 0.14807580411434174 -0.0 0.9364566206932068 0.7249259948730469 0 1.0 0 0.0 0 0.0 0 0.0 -1.3330157995224 0.11431652307510376 -0.2839455306529999 0.982573926448822 0.18573564291000366 -0.0 0.9365357160568237 0.7316248416900635 0 1.0 0 0.0 0 0.0 0 0.0 -1.3330157995224 0.11431652307510376 0.21605446934700012 0.982573926448822 0.18573564291000366 -0.0 0.6117595434188843 0.5635828971862793 0 1.0 0 0.0 0 0.0 0 0.0 2.0801174640655518 0.07844984531402588 -0.2839455306529999 -0.7183446884155273 0.695669412612915 -0.0 0.00870424509048462 0.4921778440475464 0 1.0 0 0.0 0 0.0 0 0.0 2.0751311779022217 0.07314726710319519 -0.2839455306529999 -0.7394329905509949 0.6732078194618225 -0.0 0.011627405881881714 0.4862140417098999 0 1.0 0 0.0 0 0.0 0 0.0 2.0751311779022217 0.07314726710319519 0.21605446934700012 -0.7394329905509949 0.6732078194618225 -0.0 0.45636481046676636 0.32470518350601196 0 1.0 0 0.0 0 0.0 0 0.0 0.5916717052459717 -0.03866434097290039 -0.2839455306529999 0.9685049057006836 0.24893948435783386 -0.0 0.8942910432815552 0.5194913148880005 0 1.0 0 0.0 0 0.0 0 0.0 0.589745283126831 -0.032133400440216064 -0.2839455306529999 0.9480269551277161 0.3180944323539734 -0.0 0.8945980072021484 0.526344895362854 0 1.0 0 0.0 0 0.0 0 0.0 0.589745283126831 -0.032133400440216064 0.21605446934700012 0.9480269551277161 0.3180944323539734 -0.0 0.5840551853179932 0.38970309495925903 0 1.0 0 0.0 0 0.0 0 0.0 1.4772183895111084 -0.10947578400373459 -0.2839455306529999 -0.5250709652900696 0.8510391712188721 -0.0 0.9559882879257202 0.44572991132736206 0 1.0 0 0.0 0 0.0 0 0.0 1.4736135005950928 -0.1115189865231514 -0.2839455306529999 -0.46244698762893677 0.886623740196228 -0.0 0.9581106901168823 0.4435710906982422 0 1.0 0 0.0 0 0.0 0 0.0 1.4736135005950928 -0.1115189865231514 0.21605446934700012 -0.46244698762893677 0.886623740196228 -0.0 0.5219641923904419 0.2828214764595032 0 1.0 0 0.0 0 0.0 0 0.0 0.3866901397705078 -0.032437458634376526 -0.2839455306529999 -0.26541948318481445 -0.964110255241394 -0.0 0.01107051968574524 0.5361419320106506 0 1.0 0 0.0 0 0.0 0 0.0 0.4022986888885498 -0.036594390869140625 -0.2839455306529999 -0.25034332275390625 -0.9681386947631836 -0.0 0.0013192594051361084 0.5308443307876587 0 1.0 0 0.0 0 0.0 0 0.0 0.4022986888885498 -0.036594390869140625 0.21605446934700012 -0.25034332275390625 -0.9681386947631836 -0.0 0.4697710871696472 0.36776047945022583 0 1.0 0 0.0 0 0.0 0 0.0 -0.2665255069732666 -0.12248415499925613 -0.2839455306529999 0.8409680724143982 -0.5410626530647278 -0.0 0.9163439869880676 0.4481813907623291 0 1.0 0 0.0 0 0.0 0 0.0 -0.2605404853820801 -0.11238247901201248 -0.2839455306529999 0.8779259324073792 -0.47877436876296997 -0.0 0.9127802848815918 0.45833027362823486 0 1.0 0 0.0 0 0.0 0 0.0 -0.2605404853820801 -0.11238247901201248 0.21605446934700012 0.8779259324073792 -0.47877436876296997 -0.0 0.5717080235481262 0.31764930486679077 0 1.0 0 0.0 0 0.0 0 0.0 -1.5305675268173218 0.11245092749595642 -0.2839455306529999 0.5174718499183655 -0.8556779623031616 -0.0 0.07964730262756348 0.74451744556427 0 1.0 0 0.0 0 0.0 0 0.0 -1.5278749465942383 0.11395779252052307 -0.2839455306529999 0.4599749743938446 -0.8879055380821228 -0.0 0.0778232216835022 0.746696949005127 0 1.0 0 0.0 0 0.0 0 0.0 -1.5278749465942383 0.11395779252052307 0.21605446934700012 0.4599749743938446 -0.8879055380821228 -0.0 0.5080809593200684 0.5561013221740723 0 1.0 0 0.0 0 0.0 0 0.0 1.2573459148406982 -0.11062387377023697 -0.2839455306529999 -0.8855555653572083 -0.46449172496795654 -0.0 0.07467031478881836 0.45629990100860596 0 1.0 0 0.0 0 0.0 0 0.0 1.261538028717041 -0.1180596575140953 -0.2839455306529999 -0.8555864095687866 -0.5175939202308655 -0.0 0.07244861125946045 0.44909894466400146 0 1.0 0 0.0 0 0.0 0 0.0 1.261538028717041 -0.1180596575140953 0.21605446934700012 -0.8555864095687866 -0.5175939202308655 -0.0 0.3813808858394623 0.3127126097679138 0 1.0 0 0.0 0 0.0 0 0.0 -0.39867544174194336 -0.11285315454006195 -0.2839455306529999 -0.22501297295093536 0.9743339419364929 -0.0 0.9893592596054077 0.4566894769668579 0 1.0 0 0.0 0 0.0 0 0.0 -0.40377020835876465 -0.11382002383470535 -0.2839455306529999 -0.14847254753112793 0.9888912439346313 -0.0 0.9923943281173706 0.4557947516441345 0 1.0 0 0.0 0 0.0 0 0.0 -0.40377020835876465 -0.11382002383470535 0.21605446934700012 -0.14847254753112793 0.9888912439346313 -0.0 1.4760758876800537 0.29666680097579956 0 1.0 0 0.0 0 0.0 0 0.0 -1.4445902109146118 0.11274155974388123 -0.2839455306529999 -0.4862819314002991 -0.8737754225730896 -0.0 1.012126088142395 0.7546167373657227 0 1.0 0 0.0 0 0.0 0 0.0 -1.4417370557785034 0.11097931861877441 -0.2839455306529999 -0.5684377551078796 -0.8226874470710754 -0.0 1.0098564624786377 0.7527108192443848 0 1.0 0 0.0 0 0.0 0 0.0 -1.4417370557785034 0.11097931861877441 0.21605446934700012 -0.5684377551078796 -0.8226874470710754 -0.0 0.55687016248703 0.5597825050354004 0 1.0 0 0.0 0 0.0 0 0.0 2.201937437057495 0.07025760412216187 -0.2839455306529999 0.669362485408783 -0.7429120540618896 -0.0 0.9366838932037354 0.48045414686203003 0 1.0 0 0.0 0 0.0 0 0.0 2.2099435329437256 0.07758393883705139 -0.2839455306529999 0.6814478039741516 -0.7318338751792908 -0.0 0.9318990707397461 0.4884364604949951 0 1.0 0 0.0 0 0.0 0 0.0 2.2099435329437256 0.07758393883705139 0.21605446934700012 0.6814478039741516 -0.7318338751792908 -0.0 0.5491054058074951 0.3350799083709717 0 1.0 0 0.0 0 0.0 0 0.0 0.4022986888885498 -0.036594390869140625 -0.2839455306529999 -0.25034332275390625 -0.9681386947631836 -0.0 1.0013192892074585 0.5308443307876587 0 1.0 0 0.0 0 0.0 0 0.0 0.41911864280700684 -0.040814563632011414 -0.2839455306529999 -0.2372203767299652 -0.9714346528053284 -0.0 0.9907824397087097 0.5252926349639893 0 1.0 0 0.0 0 0.0 0 0.0 0.41911864280700684 -0.040814563632011414 0.21605446934700012 -0.2372203767299652 -0.9714346528053284 -0.0 1.4811856746673584 0.36151188611984253 0 1.0 0 0.0 0 0.0 0 0.0 2.0751311779022217 0.07314726710319519 -0.2839455306529999 -0.7394329905509949 0.6732078194618225 -0.0 0.011627405881881714 0.4862140417098999 0 1.0 0 0.0 0 0.0 0 0.0 2.0705435276031494 0.06794196367263794 -0.2839455306529999 -0.7618335485458374 0.6477248668670654 -0.0 0.014271557331085205 0.4804534316062927 0 1.0 0 0.0 0 0.0 0 0.0 2.0705435276031494 0.06794196367263794 0.21605446934700012 -0.7618335485458374 0.6477248668670654 -0.0 0.4529351592063904 0.31948477029800415 0 1.0 0 0.0 0 0.0 0 0.0 1.379772424697876 -0.11287504434585571 -0.2839455306529999 0.4352244734764099 0.9002960324287415 -0.0 0.012598484754562378 0.4442101716995239 0 1.0 0 0.0 0 0.0 0 0.0 1.3760263919830322 -0.11091089993715286 -0.2839455306529999 0.4943082928657532 0.8692587018013 -0.0 0.014759421348571777 0.4464564919471741 0 1.0 0 0.0 0 0.0 0 0.0 1.3760263919830322 -0.11091089993715286 0.21605446934700012 0.4943082928657532 0.8692587018013 -0.0 0.45010197162628174 0.28578758239746094 0 1.0 0 0.0 0 0.0 0 0.0 -0.4213075637817383 -0.11432109773159027 -0.2839455306529999 0.08008056879043579 0.9967650175094604 -0.0 0.0027590692043304443 0.4559170603752136 0 1.0 0 0.0 0 0.0 0 0.0 -0.4280209541320801 -0.11350381374359131 -0.2839455306529999 0.16342662274837494 0.9865413308143616 -0.0 0.006697714328765869 0.45710289478302 0 1.0 0 0.0 0 0.0 0 0.0 -0.4280209541320801 -0.11350381374359131 0.21605446934700012 0.16342662274837494 0.9865413308143616 -0.0 0.4585503935813904 0.2995036840438843 0 1.0 0 0.0 0 0.0 0 0.0 -1.5330997705459595 0.11080053448677063 -0.2839455306529999 0.5755485892295837 -0.8177434802055359 -0.0 0.0813169777393341 0.7422186136245728 0 1.0 0 0.0 0 0.0 0 0.0 -1.5305675268173218 0.11245092749595642 -0.2839455306529999 0.5174718499183655 -0.8556779623031616 -0.0 0.07964730262756348 0.74451744556427 0 1.0 0 0.0 0 0.0 0 0.0 -1.5305675268173218 0.11245092749595642 0.21605446934700012 0.5174718499183655 -0.8556779623031616 -0.0 0.5066025257110596 0.5543391704559326 0 1.0 0 0.0 0 0.0 0 0.0 0.593170166015625 -0.04548230767250061 -0.2839455306529999 0.983306348323822 0.1818903088569641 -0.0 0.8941986560821533 0.5124542713165283 0 1.0 0 0.0 0 0.0 0 0.0 0.5916717052459717 -0.03866434097290039 -0.2839455306529999 0.9685049057006836 0.24893948435783386 -0.0 0.8942910432815552 0.5194913148880005 0 1.0 0 0.0 0 0.0 0 0.0 0.5916717052459717 -0.03866434097290039 0.21605446934700012 0.9685049057006836 0.24893948435783386 -0.0 0.5854156017303467 0.38331204652786255 0 1.0 0 0.0 0 0.0 0 0.0 1.4736135005950928 -0.1115189865231514 -0.2839455306529999 -0.46244698762893677 0.886623740196228 -0.0 0.9581106901168823 0.4435710906982422 0 1.0 0 0.0 0 0.0 0 0.0 1.4697458744049072 -0.11336759477853775 -0.2839455306529999 -0.40171512961387634 0.9157384037971497 -0.0 0.9603778123855591 0.441622257232666 0 1.0 0 0.0 0 0.0 0 0.0 1.4697458744049072 -0.11336759477853775 0.21605446934700012 -0.40171512961387634 0.9157384037971497 -0.0 0.5192333459854126 0.28040528297424316 0 1.0 0 0.0 0 0.0 0 0.0 -0.40377020835876465 -0.11382002383470535 -0.2839455306529999 -0.14847254753112793 0.9888912439346313 -0.0 0.9923943281173706 0.4557947516441345 0 1.0 0 0.0 0 0.0 0 0.0 -0.4089984893798828 -0.11440014839172363 -0.2839455306529999 -0.07318338751792908 0.9973143935203552 -0.0 0.9954967498779297 0.45534396171569824 0 1.0 0 0.0 0 0.0 0 0.0 -0.4089984893798828 -0.11440014839172363 0.21605446934700012 -0.07318338751792908 0.9973143935203552 -0.0 1.472240686416626 0.2964206337928772 0 1.0 0 0.0 0 0.0 0 0.0 -1.4417370557785034 0.11097931861877441 -0.2839455306529999 -0.5684377551078796 -0.8226874470710754 -0.0 1.0098564624786377 0.7527108192443848 0 1.0 0 0.0 0 0.0 0 0.0 -1.4392293691635132 0.1090492308139801 -0.2839455306529999 -0.6502884030342102 -0.7596667408943176 -0.0 1.0078752040863037 0.7506272792816162 0 1.0 0 0.0 0 0.0 0 0.0 -1.4392293691635132 0.1090492308139801 0.21605446934700012 -0.6502884030342102 -0.7596667408943176 -0.0 0.5583904981613159 0.5580000877380371 0 1.0 0 0.0 0 0.0 0 0.0 2.193350076675415 0.06263938546180725 -0.2839455306529999 0.6584368348121643 -0.7526169419288635 -0.0 0.9418329000473022 0.47215110063552856 0 1.0 0 0.0 0 0.0 0 0.0 2.201937437057495 0.07025760412216187 -0.2839455306529999 0.669362485408783 -0.7429120540618896 -0.0 0.9366838932037354 0.48045414686203003 0 1.0 0 0.0 0 0.0 0 0.0 2.201937437057495 0.07025760412216187 0.21605446934700012 0.669362485408783 -0.7429120540618896 -0.0 0.5444985628128052 0.3254818916320801 0 1.0 0 0.0 0 0.0 0 0.0 0.41911864280700684 -0.040814563632011414 -0.2839455306529999 -0.2372203767299652 -0.9714346528053284 -0.0 0.9907824397087097 0.5252926349639893 0 1.0 0 0.0 0 0.0 0 0.0 0.4371500015258789 -0.045097991824150085 -0.2839455306529999 -0.22571489214897156 -0.9741813540458679 -0.0 0.9795475006103516 0.5195319652557373 0 1.0 0 0.0 0 0.0 0 0.0 0.4371500015258789 -0.045097991824150085 0.21605446934700012 -0.22571489214897156 -0.9741813540458679 -0.0 0.4936082363128662 0.35583263635635376 0 1.0 0 0.0 0 0.0 0 0.0 2.0705435276031494 0.06794196367263794 -0.2839455306529999 -0.7618335485458374 0.6477248668670654 -0.0 0.014271557331085205 0.4804534316062927 0 1.0 0 0.0 0 0.0 0 0.0 2.066354990005493 0.06283397972583771 -0.2839455306529999 -0.7855769395828247 0.6187322735786438 -0.0 0.016644001007080078 0.4748919606208801 0 1.0 0 0.0 0 0.0 0 0.0 2.066354990005493 0.06283397972583771 0.21605446934700012 -0.7855769395828247 0.6187322735786438 -0.0 0.4497760236263275 0.31446272134780884 0 1.0 0 0.0 0 0.0 0 0.0 0.4371500015258789 -0.045097991824150085 -0.2839455306529999 -0.22571489214897156 -0.9741813540458679 -0.0 0.9795475006103516 0.5195319652557373 0 1.0 0 0.0 0 0.0 0 0.0 0.4563925266265869 -0.04944466054439545 -0.2839455306529999 -0.22766807675361633 -0.9737235903739929 -0.0 0.9677401781082153 0.513634443283081 0 1.0 0 0.0 0 0.0 0 0.0 0.4563925266265869 -0.04944466054439545 0.21605446934700012 -0.22766807675361633 -0.9737235903739929 -0.0 0.506902277469635 0.3509640097618103 0 1.0 0 0.0 0 0.0 0 0.0 1.3837320804595947 -0.11463243514299393 -0.2839455306529999 0.37711721658706665 0.9261451959609985 -0.0 0.01031571626663208 0.4421793818473816 0 1.0 0 0.0 0 0.0 0 0.0 1.379772424697876 -0.11287504434585571 -0.2839455306529999 0.4352244734764099 0.9002960324287415 -0.0 0.012598484754562378 0.4442101716995239 0 1.0 0 0.0 0 0.0 0 0.0 1.379772424697876 -0.11287504434585571 0.21605446934700012 0.4352244734764099 0.9002960324287415 -0.0 0.45266157388687134 0.2830924987792969 0 1.0 0 0.0 0 0.0 0 0.0 -0.41436076164245605 -0.1145935207605362 -0.2839455306529999 0.0015564439818263054 0.999969482421875 -0.0 0.9986672401428223 0.4553358554840088 0 1.0 0 0.0 0 0.0 0 0.0 -0.4213075637817383 -0.11432109773159027 -0.2839455306529999 0.08008056879043579 0.9967650175094604 -0.0 1.0027590990066528 0.4559170603752136 0 1.0 0 0.0 0 0.0 0 0.0 -0.4213075637817383 -0.11432109773159027 0.21605446934700012 0.08008056879043579 0.9967650175094604 -0.0 1.4633219242095947 0.2977495789527893 0 1.0 0 0.0 0 0.0 0 0.0 -1.5355125665664673 0.10897016525268555 -0.2839455306529999 0.6321604251861572 -0.7748039364814758 -0.0 0.08286002278327942 0.7397554516792297 0 1.0 0 0.0 0 0.0 0 0.0 -1.5330997705459595 0.11080053448677063 -0.2839455306529999 0.5755485892295837 -0.8177434802055359 -0.0 0.0813169777393341 0.7422186136245728 0 1.0 0 0.0 0 0.0 0 0.0 -1.5330997705459595 0.11080053448677063 0.21605446934700012 0.5755485892295837 -0.8177434802055359 -0.0 0.5052133798599243 0.5524446964263916 0 1.0 0 0.0 0 0.0 0 0.0 2.066354990005493 0.06283397972583771 -0.2839455306529999 -0.7855769395828247 0.6187322735786438 -0.0 0.016644001007080078 0.4748919606208801 0 1.0 0 0.0 0 0.0 0 0.0 2.062565565109253 0.05782328546047211 -0.2839455306529999 -0.8104800581932068 0.5857112407684326 -0.0 0.01875227689743042 0.46952366828918457 0 1.0 0 0.0 0 0.0 0 0.0 2.062565565109253 0.05782328546047211 0.21605446934700012 -0.8104800581932068 0.5857112407684326 -0.0 0.44688835740089417 0.3096204400062561 0 1.0 0 0.0 0 0.0 0 0.0 1.4697458744049072 -0.11336759477853775 -0.2839455306529999 -0.40171512961387634 0.9157384037971497 -0.0 0.9603778123855591 0.441622257232666 0 1.0 0 0.0 0 0.0 0 0.0 1.46561598777771 -0.11502161622047424 -0.2839455306529999 -0.34366893768310547 0.939054548740387 -0.0 0.9627910852432251 0.43988388776779175 0 1.0 0 0.0 0 0.0 0 0.0 1.46561598777771 -0.11502161622047424 0.21605446934700012 -0.34366893768310547 0.939085066318512 -0.0 0.5162762403488159 0.2782074809074402 0 1.0 0 0.0 0 0.0 0 0.0 -0.4089984893798828 -0.11440014839172363 -0.2839455306529999 -0.07318338751792908 0.9973143935203552 -0.0 0.9954967498779297 0.45534396171569824 0 1.0 0 0.0 0 0.0 0 0.0 -0.41436076164245605 -0.1145935207605362 -0.2839455306529999 0.0015564439818263054 0.999969482421875 -0.0 0.9986672401428223 0.4553358554840088 0 1.0 0 0.0 0 0.0 0 0.0 -0.41436076164245605 -0.1145935207605362 0.21605446934700012 0.0015564439818263054 0.999969482421875 -0.0 1.4683330059051514 0.29669511318206787 0 1.0 0 0.0 0 0.0 0 0.0 -1.4392293691635132 0.1090492308139801 -0.2839455306529999 -0.6502884030342102 -0.7596667408943176 -0.0 1.0078752040863037 0.7506272792816162 0 1.0 0 0.0 0 0.0 0 0.0 -1.4369914531707764 0.10692211985588074 -0.2839455306529999 -0.7228308916091919 -0.6909695863723755 -0.0 1.006119728088379 0.7483381628990173 0 1.0 0 0.0 0 0.0 0 0.0 -1.4369914531707764 0.10692211985588074 0.21605446934700012 -0.7228308916091919 -0.6909695863723755 -0.0 0.5597748756408691 0.5560001134872437 0 1.0 0 0.0 0 0.0 0 0.0 0.5942404270172119 -0.05258728563785553 -0.2839455306529999 0.9930112361907959 0.11780144274234772 -0.0 0.8943162560462952 0.5052309036254883 0 1.0 0 0.0 0 0.0 0 0.0 0.593170166015625 -0.04548230767250061 -0.2839455306529999 0.983306348323822 0.1818903088569641 -0.0 0.8941986560821533 0.5124542713165283 0 1.0 0 0.0 0 0.0 0 0.0 0.593170166015625 -0.04548230767250061 0.21605446934700012 0.983306348323822 0.1818903088569641 -0.0 0.5866051912307739 0.376629114151001 0 1.0 0 0.0 0 0.0 0 0.0 2.184180974960327 0.05472928285598755 -0.2839455306529999 0.6484572887420654 -0.7612231969833374 -0.0 0.9473441243171692 0.46356165409088135 0 1.0 0 0.0 0 0.0 0 0.0 2.193350076675415 0.06263938546180725 -0.2839455306529999 0.6584368348121643 -0.7526169419288635 -0.0 0.9418329000473022 0.47215110063552856 0 1.0 0 0.0 0 0.0 0 0.0 2.193350076675415 0.06263938546180725 0.21605446934700012 0.6584368348121643 -0.7526169419288635 -0.0 0.5393425226211548 0.3155598044395447 0 1.0 0 0.0 0 0.0 0 0.0 0.4563925266265869 -0.04944466054439545 -0.2839455306529999 -0.22766807675361633 -0.9737235903739929 -0.0 0.9677401781082153 0.513634443283081 0 1.0 0 0.0 0 0.0 0 0.0 0.4605276584625244 -0.05044436454772949 -0.2839455306529999 -0.24390393495559692 -0.9697867035865784 -0.0 0.965241551399231 0.512294352054596 0 1.0 0 0.0 0 0.0 0 0.0 0.4605276584625244 -0.05044436454772949 0.21605446934700012 -0.24390393495559692 -0.9697867035865784 -0.0 0.5097468495368958 0.34996771812438965 0 1.0 0 0.0 0 0.0 0 0.0 1.3879063129425049 -0.1161830797791481 -0.2839455306529999 0.32065796852111816 0.9471724629402161 -0.0 0.007909178733825684 0.4403642416000366 0 1.0 0 0.0 0 0.0 0 0.0 1.3837320804595947 -0.11463243514299393 -0.2839455306529999 0.37711721658706665 0.9261451959609985 -0.0 0.01031571626663208 0.4421793818473816 0 1.0 0 0.0 0 0.0 0 0.0 1.3837320804595947 -0.11463243514299393 0.21605446934700012 0.37711721658706665 0.9261451959609985 -0.0 0.45541685819625854 0.2806207537651062 0 1.0 0 0.0 0 0.0 0 0.0 -1.537847638130188 0.10692331194877625 -0.2839455306529999 0.6839808225631714 -0.7294839024543762 -0.0 0.08430370688438416 0.7370809316635132 0 1.0 0 0.0 0 0.0 0 0.0 -1.5355125665664673 0.10897016525268555 -0.2839455306529999 0.6321604251861572 -0.7748039364814758 -0.0 0.08286002278327942 0.7397554516792297 0 1.0 0 0.0 0 0.0 0 0.0 -1.5355125665664673 0.10897016525268555 0.21605446934700012 0.6321604251861572 -0.7748039364814758 -0.0 0.503890335559845 0.5503765344619751 0 1.0 0 0.0 0 0.0 0 0.0 2.062565565109253 0.05782328546047211 -0.2839455306529999 -0.8104800581932068 0.5857112407684326 -0.0 0.01875227689743042 0.46952366828918457 0 1.0 0 0.0 0 0.0 0 0.0 2.0591747760772705 0.05290988087654114 -0.2839455306529999 -0.8364818096160889 0.5479598641395569 -0.0 0.020604074001312256 0.464341402053833 0 1.0 0 0.0 0 0.0 0 0.0 2.0591747760772705 0.05290988087654114 0.21605446934700012 -0.8364818096160889 0.5479598641395569 -0.0 0.4442720413208008 0.3049391508102417 0 1.0 0 0.0 0 0.0 0 0.0 1.46561598777771 -0.11502161622047424 -0.2839455306529999 -0.34366893768310547 0.939054548740387 -0.0 0.9627910852432251 0.43988388776779175 0 1.0 0 0.0 0 0.0 0 0.0 1.4612228870391846 -0.11648104339838028 -0.2839455306529999 -0.28882718086242676 0.9573656320571899 -0.0 0.9653527736663818 0.43835723400115967 0 1.0 0 0.0 0 0.0 0 0.0 1.4612228870391846 -0.11648104339838028 0.21605446934700012 -0.28882718086242676 0.9573656320571899 -0.0 0.5130904912948608 0.2762381434440613 0 1.0 0 0.0 0 0.0 0 0.0 -0.27314019203186035 -0.13197773694992065 -0.2839455306529999 0.7983031868934631 -0.6022217273712158 -0.0 0.9201858043670654 0.4386823773384094 0 1.0 0 0.0 0 0.0 0 0.0 -0.2665255069732666 -0.12248415499925613 -0.2839455306529999 0.8409680724143982 -0.5410626530647278 -0.0 0.9163439869880676 0.4481813907623291 0 1.0 0 0.0 0 0.0 0 0.0 -0.2665255069732666 -0.12248415499925613 0.21605446934700012 0.8409680724143982 -0.5410626530647278 -0.0 0.5691090226173401 0.30606985092163086 0 1.0 0 0.0 0 0.0 0 0.0 -1.6406108140945435 0.10786223411560059 -0.2839455306529999 -0.9349040389060974 0.35483869910240173 -0.0 0.14534926414489746 0.6984879970550537 0 1.0 0 0.0 0 0.0 0 0.0 -1.643573522567749 0.09945592284202576 -0.2839455306529999 -0.9503769278526306 0.3110446333885193 -0.0 0.14547201991081238 0.6898198127746582 0 1.0 0 0.0 0 0.0 0 0.0 -1.643573522567749 0.09945592284202576 0.21605446934700012 -0.9503769278526306 0.3110446333885193 -0.0 0.4498993456363678 0.5286128520965576 0 1.0 0 0.0 0 0.0 0 0.0 0.4605276584625244 -0.05044436454772949 -0.2839455306529999 -0.24390393495559692 -0.9697867035865784 -0.0 0.965241551399231 0.512294352054596 0 1.0 0 0.0 0 0.0 0 0.0 0.46440958976745605 -0.05145867168903351 -0.2839455306529999 -0.2627643644809723 -0.964842677116394 -0.0 0.9629130363464355 0.5109500885009766 0 1.0 0 0.0 0 0.0 0 0.0 0.46440958976745605 -0.05145867168903351 0.21605446934700012 -0.2627643644809723 -0.964842677116394 -0.0 0.5124109387397766 0.3489842414855957 0 1.0 0 0.0 0 0.0 0 0.0 -0.5982487201690674 -0.18394553661346436 -0.2839455306529999 0.0 -0.999969482421875 -0.0 0.08586367964744568 0.4110969305038452 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.18394553661346436 -0.2839455306529999 0.0 -1.0 -0.0 0.047188133001327515 0.39707428216934204 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.18394553661346436 0.21605445444583893 0.0 -0.999969482421875 -0.0 0.4008871912956238 0.25336402654647827 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.18394553661346436 -0.2839455306529999 0.999969482421875 0.0 -0.0 0.047188133001327515 0.39707428216934204 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 -0.2839455306529999 1.0 0.0 -0.0 0.049333542585372925 0.44634634256362915 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 0.21605446934700012 1.0 0.0 -0.0 0.40608155727386475 0.3021705150604248 0 1.0 0 0.0 0 0.0 0 0.0 2.1744306087493896 0.046527326107025146 -0.2839455306529999 0.6444898843765259 -0.7645801901817322 -0.0 0.9532111287117004 0.45473164319992065 0 1.0 0 0.0 0 0.0 0 0.0 2.184180974960327 0.05472928285598755 -0.2839455306529999 0.6484572887420654 -0.7612231969833374 -0.0 0.9473441243171692 0.46356165409088135 0 1.0 0 0.0 0 0.0 0 0.0 2.184180974960327 0.05472928285598755 0.21605446934700012 0.6484572887420654 -0.7612231969833374 -0.0 0.5335952639579773 0.3053867816925049 0 1.0 0 0.0 0 0.0 0 0.0 0.46440958976745605 -0.05145867168903351 -0.2839455306529999 -0.2627643644809723 -0.964842677116394 -0.0 0.9629130363464355 0.5109500885009766 0 1.0 0 0.0 0 0.0 0 0.0 0.46803879737854004 -0.0524875670671463 -0.2839455306529999 -0.2840357720851898 -0.9588000178337097 -0.0 0.9607527256011963 0.5096024870872498 0 1.0 0 0.0 0 0.0 0 0.0 0.46803879737854004 -0.0524875670671463 0.21605446934700012 -0.2840357720851898 -0.9588000178337097 -0.0 0.5148954391479492 0.3480064272880554 0 1.0 0 0.0 0 0.0 0 0.0 1.5777533054351807 -0.12243308126926422 -0.2839455306529999 0.8640400171279907 -0.503372311592102 -0.0 0.9056793451309204 0.43781161308288574 0 1.0 0 0.0 0 0.0 0 0.0 1.5816113948822021 -0.11520648002624512 -0.2839455306529999 0.8994414806365967 -0.4369640052318573 -0.0 0.9034565687179565 0.4446355104446411 0 1.0 0 0.0 0 0.0 0 0.0 1.5816113948822021 -0.11520648002624512 0.21605446934700012 0.8994414806365967 -0.4369640052318573 -0.0 0.5878925919532776 0.306384801864624 0 1.0 0 0.0 0 0.0 0 0.0 -0.5068299770355225 -0.12930455803871155 -0.2839455306529999 -0.8016296625137329 -0.5977965593338013 -0.0 0.049333542585372925 0.44634634256362915 0 1.0 0 0.0 0 0.0 0 0.0 -0.5030343532562256 -0.1343943178653717 -0.2839455306529999 -0.790887176990509 -0.6119571328163147 -0.0 0.04723277688026428 0.4410468339920044 0 1.0 0 0.0 0 0.0 0 0.0 -0.5030343532562256 -0.1343943178653717 0.21605446934700012 -0.790887176990509 -0.6119571328163147 -0.0 0.40782004594802856 0.29606229066848755 0 1.0 0 0.0 0 0.0 0 0.0 -1.3308266401290894 0.09963467717170715 -0.2839455306529999 0.9933164715766907 0.11523789167404175 -0.0 0.9365185499191284 0.7176774144172668 0 1.0 0 0.0 0 0.0 0 0.0 -1.3318300247192383 0.10725411772727966 -0.2839455306529999 0.9889522790908813 0.14807580411434174 -0.0 0.9364566206932068 0.7249259948730469 0 1.0 0 0.0 0 0.0 0 0.0 -1.3318300247192383 0.10725411772727966 0.21605446934700012 0.9889522790908813 0.14807580411434174 -0.0 0.6129981279373169 0.5573402047157288 0 1.0 0 0.0 0 0.0 0 0.0 2.0591747760772705 0.05290988087654114 -0.2839455306529999 -0.8364818096160889 0.5479598641395569 -0.0 0.020604074001312256 0.464341402053833 0 1.0 0 0.0 0 0.0 0 0.0 2.056183099746704 0.0480937659740448 -0.2839455306529999 -0.8632160425186157 0.504806637763977 -0.0 0.022206127643585205 0.45933693647384644 0 1.0 0 0.0 0 0.0 0 0.0 2.056183099746704 0.0480937659740448 0.21605446934700012 -0.8632160425186157 0.504806637763977 -0.0 0.44192713499069214 0.3004010319709778 0 1.0 0 0.0 0 0.0 0 0.0 0.46803879737854004 -0.0524875670671463 -0.2839455306529999 -0.2840357720851898 -0.9588000178337097 -0.0 0.9607527256011963 0.5096024870872498 0 1.0 0 0.0 0 0.0 0 0.0 0.47141480445861816 -0.05353105068206787 -0.2839455306529999 -0.3080843389034271 -0.9513229727745056 -0.0 0.9587593078613281 0.5082523822784424 0 1.0 0 0.0 0 0.0 0 0.0 0.47141480445861816 -0.05353105068206787 0.21605446934700012 -0.3080843389034271 -0.9513229727745056 -0.0 0.5172011852264404 0.3470277786254883 0 1.0 0 0.0 0 0.0 0 0.0 1.39229416847229 -0.11752697080373764 -0.2839455306529999 0.26645711064338684 0.9638355374336243 -0.0 0.005378127098083496 0.43876564502716064 0 1.0 0 0.0 0 0.0 0 0.0 1.3879063129425049 -0.1161830797791481 -0.2839455306529999 0.32065796852111816 0.9471724629402161 -0.0 0.007909178733825684 0.4403642416000366 0 1.0 0 0.0 0 0.0 0 0.0 1.3879063129425049 -0.1161830797791481 0.21605446934700012 0.32065796852111816 0.9471724629402161 -0.0 0.45837000012397766 0.2783792018890381 0 1.0 0 0.0 0 0.0 0 0.0 -1.5401049852371216 0.10465997457504272 -0.2839455306529999 0.729941725730896 -0.6834925413131714 -0.0 0.08564883470535278 0.7341939210891724 0 1.0 0 0.0 0 0.0 0 0.0 -1.537847638130188 0.10692331194877625 -0.2839455306529999 0.6839808225631714 -0.7294839024543762 -0.0 0.08430370688438416 0.7370809316635132 0 1.0 0 0.0 0 0.0 0 0.0 -1.537847638130188 0.10692331194877625 0.21605446934700012 0.6839808225631714 -0.7294839024543762 -0.0 0.5026096105575562 0.5480918884277344 0 1.0 0 0.0 0 0.0 0 0.0 2.056183099746704 0.0480937659740448 -0.2839455306529999 -0.8632160425186157 0.504806637763977 -0.0 0.022206127643585205 0.45933693647384644 0 1.0 0 0.0 0 0.0 0 0.0 2.0535900592803955 0.04337495565414429 -0.2839455306529999 -0.8892483115196228 0.45738089084625244 -0.0 0.023565351963043213 0.45450156927108765 0 1.0 0 0.0 0 0.0 0 0.0 2.0535900592803955 0.04337495565414429 0.21605446934700012 -0.8892483115196228 0.45738089084625244 -0.0 0.4398529827594757 0.2959889769554138 0 1.0 0 0.0 0 0.0 0 0.0 1.4612228870391846 -0.11648104339838028 -0.2839455306529999 -0.28882718086242676 0.9573656320571899 -0.0 0.9653527736663818 0.43835723400115967 0 1.0 0 0.0 0 0.0 0 0.0 1.4565675258636475 -0.11774588376283646 -0.2839455306529999 -0.2374645173549652 0.9713736176490784 -0.0 0.9680638909339905 0.43704426288604736 0 1.0 0 0.0 0 0.0 0 0.0 1.4565675258636475 -0.11774588376283646 0.21605446934700012 -0.2374645173549652 0.9713736176490784 -0.0 0.5096758604049683 0.2745087742805481 0 1.0 0 0.0 0 0.0 0 0.0 -0.28038525581359863 -0.14086322486400604 -0.2839455306529999 0.7530442476272583 -0.6579485535621643 -0.0 0.9243186712265015 0.4298208951950073 0 1.0 0 0.0 0 0.0 0 0.0 -0.27314019203186035 -0.13197773694992065 -0.2839455306529999 0.7983031868934631 -0.6022217273712158 -0.0 0.9201858043670654 0.4386823773384094 0 1.0 0 0.0 0 0.0 0 0.0 -0.27314019203186035 -0.13197773694992065 0.21605446934700012 0.7983031868934631 -0.6022217273712158 -0.0 0.5659947991371155 0.29502570629119873 0 1.0 0 0.0 0 0.0 0 0.0 -1.4369914531707764 0.10692211985588074 -0.2839455306529999 -0.7228308916091919 -0.6909695863723755 -0.0 1.006119728088379 0.7483381628990173 0 1.0 0 0.0 0 0.0 0 0.0 -1.4349483251571655 0.10456877946853638 -0.2839455306529999 -0.7848140001296997 -0.6197088360786438 -0.0 1.0045299530029297 0.7458109259605408 0 1.0 0 0.0 0 0.0 0 0.0 -1.4349483251571655 0.10456877946853638 0.21605446934700012 -0.7848140001296997 -0.6197088360786438 -0.0 0.5610678791999817 0.5537543296813965 0 1.0 0 0.0 0 0.0 0 0.0 -0.5030343532562256 -0.1343943178653717 -0.2839455306529999 -0.790887176990509 -0.6119571328163147 -0.0 0.04723277688026428 0.4410468339920044 0 1.0 0 0.0 0 0.0 0 0.0 -0.49911928176879883 -0.13927245140075684 -0.2839455306529999 -0.7683034539222717 -0.6400341987609863 -0.0 0.04507666826248169 0.4359728693962097 0 1.0 0 0.0 0 0.0 0 0.0 -0.49911928176879883 -0.13927245140075684 0.21605446934700012 -0.7683034539222717 -0.6400341987609863 -0.0 0.40969035029411316 0.2901642918586731 0 1.0 0 0.0 0 0.0 0 0.0 0.5948824882507324 -0.05997928977012634 -0.2839455306529999 0.9983519911766052 0.05722220614552498 -0.0 0.8946398496627808 0.4978189468383789 0 1.0 0 0.0 0 0.0 0 0.0 0.5942404270172119 -0.05258728563785553 -0.2839455306529999 0.9930112361907959 0.11780144274234772 -0.0 0.8943162560462952 0.5052309036254883 0 1.0 0 0.0 0 0.0 0 0.0 0.5942404270172119 -0.05258728563785553 0.21605446934700012 0.9930112361907959 0.11780144274234772 -0.0 0.587626576423645 0.3696514964103699 0 1.0 0 0.0 0 0.0 0 0.0 2.1693994998931885 0.04227796196937561 -0.2839455306529999 0.651570200920105 -0.7585680484771729 -0.0 0.9562410712242126 0.4502038359642029 0 1.0 0 0.0 0 0.0 0 0.0 2.1744306087493896 0.046527326107025146 -0.2839455306529999 0.6444898843765259 -0.7645801901817322 -0.0 0.9532111287117004 0.45473164319992065 0 1.0 0 0.0 0 0.0 0 0.0 2.1744306087493896 0.046527326107025146 0.21605446934700012 0.6444898843765259 -0.7645801901817322 -0.0 0.527215301990509 0.29505491256713867 0 1.0 0 0.0 0 0.0 0 0.0 0.47141480445861816 -0.05353105068206787 -0.2839455306529999 -0.3080843389034271 -0.9513229727745056 -0.0 0.9587593078613281 0.5082523822784424 0 1.0 0 0.0 0 0.0 0 0.0 0.47453808784484863 -0.05458913743495941 -0.2839455306529999 -0.33548998832702637 -0.9420148134231567 -0.0 0.9569305777549744 0.5069000124931335 0 1.0 0 0.0 0 0.0 0 0.0 0.47453808784484863 -0.05458913743495941 0.21605446934700012 -0.33548998832702637 -0.9420148134231567 -0.0 0.5193297863006592 0.346042275428772 0 1.0 0 0.0 0 0.0 0 0.0 1.3968961238861084 -0.11866410821676254 -0.2839455306529999 0.2148503065109253 0.9766228199005127 -0.0 0.002721160650253296 0.4373849034309387 0 1.0 0 0.0 0 0.0 0 0.0 1.39229416847229 -0.11752697080373764 -0.2839455306529999 0.26645711064338684 0.9638355374336243 -0.0 0.005378127098083496 0.43876564502716064 0 1.0 0 0.0 0 0.0 0 0.0 1.39229416847229 -0.11752697080373764 0.21605446934700012 0.26645711064338684 0.9638355374336243 -0.0 0.46152105927467346 0.2763766050338745 0 1.0 0 0.0 0 0.0 0 0.0 -0.49911928176879883 -0.13927245140075684 -0.2839455306529999 -0.7683034539222717 -0.6400341987609863 -0.0 0.04507666826248169 0.4359728693962097 0 1.0 0 0.0 0 0.0 0 0.0 -0.4950852394104004 -0.14393897354602814 -0.2839455306529999 -0.7441022992134094 -0.6680501699447632 -0.0 0.04286402463912964 0.43112242221832275 0 1.0 0 0.0 0 0.0 0 0.0 -0.4950852394104004 -0.14393897354602814 0.21605446934700012 -0.7441022992134094 -0.6680501699447632 -0.0 0.41169679164886475 0.2844768166542053 0 1.0 0 0.0 0 0.0 0 0.0 -1.542284369468689 0.10218015313148499 -0.2839455306529999 0.7702566385269165 -0.6377147436141968 -0.0 0.08689627051353455 0.7310928106307983 0 1.0 0 0.0 0 0.0 0 0.0 -1.5401049852371216 0.10465997457504272 -0.2839455306529999 0.729941725730896 -0.6834925413131714 -0.0 0.08564883470535278 0.7341939210891724 0 1.0 0 0.0 0 0.0 0 0.0 -1.5401049852371216 0.10465997457504272 0.21605446934700012 0.729941725730896 -0.6834925413131714 -0.0 0.5013704895973206 0.545587956905365 0 1.0 0 0.0 0 0.0 0 0.0 2.0535900592803955 0.04337495565414429 -0.2839455306529999 -0.8892483115196228 0.45738089084625244 -0.0 0.023565351963043213 0.45450156927108765 0 1.0 0 0.0 0 0.0 0 0.0 2.0512959957122803 0.03859776258468628 -0.2839455306529999 -0.9120456576347351 0.41001617908477783 -0.0 0.024739772081375122 0.44967198371887207 0 1.0 0 0.0 0 0.0 0 0.0 2.0512959957122803 0.03859776258468628 0.21605446934700012 -0.9120456576347351 0.41001617908477783 -0.0 0.43797069787979126 0.29154956340789795 0 1.0 0 0.0 0 0.0 0 0.0 1.4565675258636475 -0.11774588376283646 -0.2839455306529999 -0.2374645173549652 0.9713736176490784 -0.0 0.9680638909339905 0.43704426288604736 0 1.0 0 0.0 0 0.0 0 0.0 1.4516489505767822 -0.11881612986326218 -0.2839455306529999 -0.1896725296974182 0.981841504573822 -0.0 0.9709261655807495 0.4359474182128906 0 1.0 0 0.0 0 0.0 0 0.0 1.4516489505767822 -0.11881612986326218 0.21605446934700012 -0.1896725296974182 0.981841504573822 -0.0 0.5060319304466248 0.2730323076248169 0 1.0 0 0.0 0 0.0 0 0.0 -1.4349483251571655 0.10456877946853638 -0.2839455306529999 -0.7848140001296997 -0.6197088360786438 -0.0 1.0045299530029297 0.7458109259605408 0 1.0 0 0.0 0 0.0 0 0.0 -1.433099627494812 0.10198923945426941 -0.2839455306529999 -0.8379467129707336 -0.5457014441490173 -0.0 1.0031040906906128 0.7430456280708313 0 1.0 0 0.0 0 0.0 0 0.0 -1.433099627494812 0.10198923945426941 0.21605446934700012 -0.8379467129707336 -0.5457014441490173 -0.0 0.5622706413269043 0.5512592792510986 0 1.0 0 0.0 0 0.0 0 0.0 0.47453808784484863 -0.05458913743495941 -0.2839455306529999 -0.33548998832702637 -0.9420148134231567 -0.0 0.9569305777549744 0.5069000124931335 0 1.0 0 0.0 0 0.0 0 0.0 0.47740817070007324 -0.05566181242465973 -0.2839455306529999 -0.3668935298919678 -0.9302346706390381 -0.0 0.9552648067474365 0.5055457353591919 0 1.0 0 0.0 0 0.0 0 0.0 0.47740817070007324 -0.05566181242465973 0.21605446934700012 -0.3668935298919678 -0.9302346706390381 -0.0 0.5212823152542114 0.3450441360473633 0 1.0 0 0.0 0 0.0 0 0.0 1.261538028717041 -0.1180596575140953 -0.2839455306529999 -0.8555864095687866 -0.5175939202308655 -0.0 0.07244861125946045 0.44909894466400146 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 -0.12518896162509918 -0.2839455306529999 -0.8221076130867004 -0.5692922472953796 -0.0 0.07005223631858826 0.44216883182525635 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 -0.12518896162509918 0.21605446934700012 -0.8221076130867004 -0.5692922472953796 -0.0 0.38283151388168335 0.30467474460601807 0 1.0 0 0.0 0 0.0 0 0.0 -0.28807997703552246 -0.1490871012210846 -0.2839455306529999 0.7084261775016785 -0.7057710289955139 -0.0 0.9286611676216125 0.4216494560241699 0 1.0 0 0.0 0 0.0 0 0.0 -0.28038525581359863 -0.14086322486400604 -0.2839455306529999 0.7530442476272583 -0.6579485535621643 -0.0 0.9243186712265015 0.4298208951950073 0 1.0 0 0.0 0 0.0 0 0.0 -0.28038525581359863 -0.14086322486400604 0.21605446934700012 0.7530442476272583 -0.6579485535621643 -0.0 0.562325656414032 0.2845187783241272 0 1.0 0 0.0 0 0.0 0 0.0 2.164696455001831 0.03816966712474823 -0.2839455306529999 0.6648457050323486 -0.7469404935836792 -0.0 0.9590770602226257 0.4458661675453186 0 1.0 0 0.0 0 0.0 0 0.0 2.1693994998931885 0.04227796196937561 -0.2839455306529999 0.651570200920105 -0.7585680484771729 -0.0 0.9562410712242126 0.4502038359642029 0 1.0 0 0.0 0 0.0 0 0.0 2.1693994998931885 0.04227796196937561 0.21605446934700012 0.651570200920105 -0.7585680484771729 -0.0 0.5238203406333923 0.28983134031295776 0 1.0 0 0.0 0 0.0 0 0.0 0.47740817070007324 -0.05566181242465973 -0.2839455306529999 -0.3668935298919678 -0.9302346706390381 -0.0 0.9552648067474365 0.5055457353591919 0 1.0 0 0.0 0 0.0 0 0.0 0.4800255298614502 -0.05674909055233002 -0.2839455306529999 -0.4031189978122711 -0.9151280522346497 -0.0 0.9537597894668579 0.5041894912719727 0 1.0 0 0.0 0 0.0 0 0.0 0.4800255298614502 -0.05674909055233002 0.21605446934700012 -0.4031189978122711 -0.9151280522346497 -0.0 0.5230607390403748 0.344028115272522 0 1.0 0 0.0 0 0.0 0 0.0 -0.4950852394104004 -0.14393897354602814 -0.2839455306529999 -0.7441022992134094 -0.6680501699447632 -0.0 0.04286402463912964 0.43112242221832275 0 1.0 0 0.0 0 0.0 0 0.0 -0.49093198776245117 -0.14839386940002441 -0.2839455306529999 -0.7181615829467773 -0.69582200050354 -0.0 0.04059332609176636 0.42649346590042114 0 1.0 0 0.0 0 0.0 0 0.0 -0.49093198776245117 -0.14839386940002441 0.21605446934700012 -0.7181615829467773 -0.69582200050354 -0.0 0.4138440191745758 0.27900052070617676 0 1.0 0 0.0 0 0.0 0 0.0 -1.5443859100341797 0.09948384761810303 -0.2839455306529999 0.8052613735198975 -0.5928831100463867 -0.0 0.08804729580879211 0.727775514125824 0 1.0 0 0.0 0 0.0 0 0.0 -1.542284369468689 0.10218015313148499 -0.2839455306529999 0.7702566385269165 -0.6377147436141968 -0.0 0.08689627051353455 0.7310928106307983 0 1.0 0 0.0 0 0.0 0 0.0 -1.542284369468689 0.10218015313148499 0.21605446934700012 0.7702566385269165 -0.6377147436141968 -0.0 0.5001721382141113 0.5428614020347595 0 1.0 0 0.0 0 0.0 0 0.0 2.0512959957122803 0.03859776258468628 -0.2839455306529999 -0.9120456576347351 0.41001617908477783 -0.0 0.024739772081375122 0.44967198371887207 0 1.0 0 0.0 0 0.0 0 0.0 2.049201726913452 0.03360651433467865 -0.2839455306529999 -0.9311502575874329 0.3645741045475006 -0.0 0.025784343481063843 0.4446961283683777 0 1.0 0 0.0 0 0.0 0 0.0 2.049201726913452 0.03360651433467865 0.21605446934700012 -0.9311502575874329 0.3645741045475006 -0.0 0.43620121479034424 0.2869437336921692 0 1.0 0 0.0 0 0.0 0 0.0 -1.433099627494812 0.10198923945426941 -0.2839455306529999 -0.8379467129707336 -0.5457014441490173 -0.0 1.0031040906906128 0.7430456280708313 0 1.0 0 0.0 0 0.0 0 0.0 -1.4314457178115845 0.09918349981307983 -0.2839455306529999 -0.8820154666900635 -0.47117525339126587 -0.0 1.001840591430664 0.740041196346283 0 1.0 0 0.0 0 0.0 0 0.0 -1.4314457178115845 0.09918349981307983 0.21605446934700012 -0.8820154666900635 -0.47117525339126587 -0.0 0.5633835792541504 0.5485106706619263 0 1.0 0 0.0 0 0.0 0 0.0 0.4800255298614502 -0.05674909055233002 -0.2839455306529999 -0.4031189978122711 -0.9151280522346497 -0.0 0.9537597894668579 0.5041894912719727 0 1.0 0 0.0 0 0.0 0 0.0 0.4823896884918213 -0.05785095691680908 -0.2839455306529999 -0.4450819492340088 -0.8954740762710571 -0.0 0.9524136781692505 0.5028311610221863 0 1.0 0 0.0 0 0.0 0 0.0 0.4823896884918213 -0.05785095691680908 0.21605446934700012 -0.4450819492340088 -0.8954740762710571 -0.0 0.5246662497520447 0.3429895043373108 0 1.0 0 0.0 0 0.0 0 0.0 1.40171217918396 -0.11959449201822281 -0.2839455306529999 0.1660817265510559 0.9860835671424866 -0.0 0.9999371767044067 0.43622368574142456 0 1.0 0 0.0 0 0.0 0 0.0 1.3968961238861084 -0.11866410821676254 -0.2839455306529999 0.2148503065109253 0.9766228199005127 -0.0 1.0027211904525757 0.4373849034309387 0 1.0 0 0.0 0 0.0 0 0.0 1.3968961238861084 -0.11866410821676254 0.21605446934700012 0.2148503065109253 0.9766228199005127 -0.0 1.4648702144622803 0.27462238073349 0 1.0 0 0.0 0 0.0 0 0.0 -0.49093198776245117 -0.14839386940002441 -0.2839455306529999 -0.7181615829467773 -0.69582200050354 -0.0 0.04059332609176636 0.42649346590042114 0 1.0 0 0.0 0 0.0 0 0.0 -0.48665952682495117 -0.15263715386390686 -0.2839455306529999 -0.6906033754348755 -0.7232276201248169 -0.0 0.038263142108917236 0.42208415269851685 0 1.0 0 0.0 0 0.0 0 0.0 -0.48665952682495117 -0.15263715386390686 0.21605446934700012 -0.6906033754348755 -0.7232276201248169 -0.0 0.41613665223121643 0.27373653650283813 0 1.0 0 0.0 0 0.0 0 0.0 1.4516489505767822 -0.11881612986326218 -0.2839455306529999 -0.1896725296974182 0.981841504573822 -0.0 0.9709261655807495 0.4359474182128906 0 1.0 0 0.0 0 0.0 0 0.0 1.4464681148529053 -0.11969178915023804 -0.2839455306529999 -0.14542070031166077 0.9893490672111511 -0.0 0.9739401340484619 0.43506962060928345 0 1.0 0 0.0 0 0.0 0 0.0 1.4464681148529053 -0.11969178915023804 0.21605446934700012 -0.14542070031166077 0.9893490672111511 -0.0 0.5021612048149109 0.2718231678009033 0 1.0 0 0.0 0 0.0 0 0.0 2.1603219509124756 0.0342024564743042 -0.2839455306529999 0.6794335842132568 -0.7336955070495605 -0.0 0.9617165923118591 0.441719651222229 0 1.0 0 0.0 0 0.0 0 0.0 2.164696455001831 0.03816966712474823 -0.2839455306529999 0.6648457050323486 -0.7469404935836792 -0.0 0.9590770602226257 0.4458661675453186 0 1.0 0 0.0 0 0.0 0 0.0 2.164696455001831 0.03816966712474823 0.21605446934700012 0.6648457050323486 -0.7469404935836792 -0.0 0.5205872654914856 0.2848947048187256 0 1.0 0 0.0 0 0.0 0 0.0 0.4823896884918213 -0.05785095691680908 -0.2839455306529999 -0.4450819492340088 -0.8954740762710571 -0.0 0.9524136781692505 0.5028311610221863 0 1.0 0 0.0 0 0.0 0 0.0 0.4845011234283447 -0.05896741896867752 -0.2839455306529999 -0.4939115643501282 -0.8695028424263 -0.0 0.9512243270874023 0.5014703273773193 0 1.0 0 0.0 0 0.0 0 0.0 0.4845011234283447 -0.05896741896867752 0.21605446934700012 -0.4939115643501282 -0.8695028424263 -0.0 0.526100754737854 0.3419238328933716 0 1.0 0 0.0 0 0.0 0 0.0 -1.3300057649612427 0.09145823121070862 -0.2839455306529999 0.9962462186813354 0.08639790117740631 -0.0 0.9367170333862305 0.7098526954650879 0 1.0 0 0.0 0 0.0 0 0.0 -1.3308266401290894 0.09963467717170715 -0.2839455306529999 0.9933164715766907 0.11523789167404175 -0.0 0.9365185499191284 0.7176774144172668 0 1.0 0 0.0 0 0.0 0 0.0 -1.3308266401290894 0.09963467717170715 0.21605446934700012 0.9933164715766907 0.11523789167404175 -0.0 0.6142219305038452 0.550504207611084 0 1.0 0 0.0 0 0.0 0 0.0 -0.29604482650756836 -0.1565958559513092 -0.2839455306529999 0.6615192294120789 -0.7499008178710938 -0.0 0.9331279993057251 0.41422218084335327 0 1.0 0 0.0 0 0.0 0 0.0 -0.28807997703552246 -0.1490871012210846 -0.2839455306529999 0.7084261775016785 -0.7057710289955139 -0.0 0.9286611676216125 0.4216494560241699 0 1.0 0 0.0 0 0.0 0 0.0 -0.28807997703552246 -0.1490871012210846 0.21605446934700012 0.7084261775016785 -0.7057710289955139 -0.0 0.5581673979759216 0.27465975284576416 0 1.0 0 0.0 0 0.0 0 0.0 2.156275510787964 0.030376330018043518 -0.2839455306529999 0.695547342300415 -0.7184667587280273 -0.0 0.9641584157943726 0.43776363134384155 0 1.0 0 0.0 0 0.0 0 0.0 2.1603219509124756 0.0342024564743042 -0.2839455306529999 0.6794335842132568 -0.7336955070495605 -0.0 0.9617165923118591 0.441719651222229 0 1.0 0 0.0 0 0.0 0 0.0 2.1603219509124756 0.0342024564743042 0.21605446934700012 0.6794335842132568 -0.7336955070495605 -0.0 0.5175286531448364 0.2802373170852661 0 1.0 0 0.0 0 0.0 0 0.0 0.4845011234283447 -0.05896741896867752 -0.2839455306529999 -0.4939115643501282 -0.8695028424263 -0.0 0.9512243270874023 0.5014703273773193 0 1.0 0 0.0 0 0.0 0 0.0 0.4863593578338623 -0.06009847670793533 -0.2839455306529999 -0.5507370233535767 -0.8346506953239441 -0.0 0.9501901865005493 0.5001065731048584 0 1.0 0 0.0 0 0.0 0 0.0 0.4863593578338623 -0.06009847670793533 0.21605446934700012 -0.5507370233535767 -0.8346506953239441 -0.0 0.5273653268814087 0.3408270478248596 0 1.0 0 0.0 0 0.0 0 0.0 1.4067423343658447 -0.12031812220811844 -0.2839455306529999 0.12024292349815369 0.9927365779876709 -0.0 0.9970256090164185 0.43528425693511963 0 1.0 0 0.0 0 0.0 0 0.0 1.40171217918396 -0.11959449201822281 -0.2839455306529999 0.1660817265510559 0.9860835671424866 -0.0 0.9999371767044067 0.43622368574142456 0 1.0 0 0.0 0 0.0 0 0.0 1.40171217918396 -0.11959449201822281 0.21605446934700012 0.1660817265510559 0.9860835671424866 -0.0 1.4684163331985474 0.2731272578239441 0 1.0 0 0.0 0 0.0 0 0.0 -0.48665952682495117 -0.15263715386390686 -0.2839455306529999 -0.6906033754348755 -0.7232276201248169 -0.0 0.038263142108917236 0.42208415269851685 0 1.0 0 0.0 0 0.0 0 0.0 -0.4822678565979004 -0.15666882693767548 -0.2839455306529999 -0.6613666415214539 -0.7500228881835938 -0.0 0.035872071981430054 0.4178926348686218 0 1.0 0 0.0 0 0.0 0 0.0 -0.4822678565979004 -0.15666882693767548 0.21605446934700012 -0.6613666415214539 -0.7500228881835938 -0.0 0.41857919096946716 0.26868611574172974 0 1.0 0 0.0 0 0.0 0 0.0 -1.5464097261428833 0.09657105803489685 -0.2839455306529999 0.8354747295379639 -0.5494857430458069 -0.0 0.08910319209098816 0.7242394685745239 0 1.0 0 0.0 0 0.0 0 0.0 -1.5443859100341797 0.09948384761810303 -0.2839455306529999 0.8052613735198975 -0.5928831100463867 -0.0 0.08804729580879211 0.727775514125824 0 1.0 0 0.0 0 0.0 0 0.0 -1.5443859100341797 0.09948384761810303 0.21605446934700012 0.8052613735198975 -0.5928831100463867 -0.0 0.4990137815475464 0.539908766746521 0 1.0 0 0.0 0 0.0 0 0.0 2.049201726913452 0.03360651433467865 -0.2839455306529999 -0.9311502575874329 0.3645741045475006 -0.0 0.025784343481063843 0.4446961283683777 0 1.0 0 0.0 0 0.0 0 0.0 2.047306776046753 0.028401225805282593 -0.2839455306529999 -0.9472640156745911 0.32038331031799316 -0.0 0.026701629161834717 0.4395824074745178 0 1.0 0 0.0 0 0.0 0 0.0 2.047306776046753 0.028401225805282593 0.21605446934700012 -0.9472640156745911 0.32038331031799316 -0.0 0.434542715549469 0.282177209854126 0 1.0 0 0.0 0 0.0 0 0.0 1.4464681148529053 -0.11969178915023804 -0.2839455306529999 -0.14542070031166077 0.9893490672111511 -0.0 0.9739401340484619 0.43506962060928345 0 1.0 0 0.0 0 0.0 0 0.0 1.4410245418548584 -0.12037285417318344 -0.2839455306529999 -0.10455641150474548 0.9945066571235657 -0.0 0.9771068096160889 0.43441450595855713 0 1.0 0 0.0 0 0.0 0 0.0 1.4410245418548584 -0.12037285417318344 0.21605446934700012 -0.10455641150474548 0.9945066571235657 -0.0 0.4980665147304535 0.2708966135978699 0 1.0 0 0.0 0 0.0 0 0.0 -1.643573522567749 0.09945592284202576 -0.2839455306529999 -0.9503769278526306 0.3110446333885193 -0.0 0.14547201991081238 0.6898198127746582 0 1.0 0 0.0 0 0.0 0 0.0 -1.6462346315383911 0.09066042304039001 -0.2839455306529999 -0.9571214914321899 0.28955960273742676 -0.0 0.14539822936058044 0.6808279752731323 0 1.0 0 0.0 0 0.0 0 0.0 -1.6462346315383911 0.09066042304039001 0.21605446934700012 -0.9571214914321899 0.28955960273742676 -0.0 0.4483241140842438 0.5201866626739502 0 1.0 0 0.0 0 0.0 0 0.0 0.5950965881347656 -0.06765832006931305 -0.2839455306529999 0.999969482421875 -0.003662221133708954 -0.0 0.895166277885437 0.4902169108390808 0 1.0 0 0.0 0 0.0 0 0.0 0.5948824882507324 -0.05997928977012634 -0.2839455306529999 0.9983519911766052 0.05722220614552498 -0.0 0.8946398496627808 0.4978189468383789 0 1.0 0 0.0 0 0.0 0 0.0 0.5948824882507324 -0.05997928977012634 0.21605446934700012 0.9983519911766052 0.05722220614552498 -0.0 0.5884814262390137 0.36237674951553345 0 1.0 0 0.0 0 0.0 0 0.0 -0.30427980422973633 -0.16338948905467987 -0.2839455306529999 0.6092715263366699 -0.7929319143295288 -0.0 0.9377249479293823 0.4075313210487366 0 1.0 0 0.0 0 0.0 0 0.0 -0.29604482650756836 -0.1565958559513092 -0.2839455306529999 0.6615192294120789 -0.7499008178710938 -0.0 0.9331279993057251 0.41422218084335327 0 1.0 0 0.0 0 0.0 0 0.0 -0.29604482650756836 -0.1565958559513092 0.21605446934700012 0.6615192294120789 -0.7499008178710938 -0.0 0.553600549697876 0.2655588388442993 0 1.0 0 0.0 0 0.0 0 0.0 -1.4314457178115845 0.09918349981307983 -0.2839455306529999 -0.8820154666900635 -0.47117525339126587 -0.0 1.001840591430664 0.740041196346283 0 1.0 0 0.0 0 0.0 0 0.0 -1.4299862384796143 0.09615153074264526 -0.2839455306529999 -0.9173253774642944 -0.3980834484100342 -0.0 1.000737190246582 0.7367956042289734 0 1.0 0 0.0 0 0.0 0 0.0 -1.4299862384796143 0.09615153074264526 0.21605446934700012 -0.9173253774642944 -0.3980834484100342 -0.0 0.5644075870513916 0.545503556728363 0 1.0 0 0.0 0 0.0 0 0.0 2.152557611465454 0.026691272854804993 -0.2839455306529999 0.713370144367218 -0.7007355093955994 -0.0 0.9664015173912048 0.43399637937545776 0 1.0 0 0.0 0 0.0 0 0.0 2.156275510787964 0.030376330018043518 -0.2839455306529999 0.695547342300415 -0.7184667587280273 -0.0 0.9641584157943726 0.43776363134384155 0 1.0 0 0.0 0 0.0 0 0.0 2.156275510787964 0.030376330018043518 0.21605446934700012 0.695547342300415 -0.7184667587280273 -0.0 0.5146552920341492 0.27584993839263916 0 1.0 0 0.0 0 0.0 0 0.0 0.4863593578338623 -0.06009847670793533 -0.2839455306529999 -0.5507370233535767 -0.8346506953239441 -0.0 0.9501901865005493 0.5001065731048584 0 1.0 0 0.0 0 0.0 0 0.0 0.4879648685455322 -0.06124413013458252 -0.2839455306529999 -0.616595983505249 -0.7872554659843445 -0.0 0.9493091106414795 0.49873924255371094 0 1.0 0 0.0 0 0.0 0 0.0 0.4879648685455322 -0.06124413013458252 0.21605446934700012 -0.616595983505249 -0.7872554659843445 -0.0 0.5284615159034729 0.33969563245773315 0 1.0 0 0.0 0 0.0 0 0.0 1.4119865894317627 -0.12083500623703003 -0.2839455306529999 0.07739493995904922 0.9969786405563354 -0.0 0.9939858913421631 0.43456923961639404 0 1.0 0 0.0 0 0.0 0 0.0 1.4067423343658447 -0.12031812220811844 -0.2839455306529999 0.12024292349815369 0.9927365779876709 -0.0 0.9970256090164185 0.43528425693511963 0 1.0 0 0.0 0 0.0 0 0.0 1.4067423343658447 -0.12031812220811844 0.21605446934700012 0.12024292349815369 0.9927365779876709 -0.0 1.4721570014953613 0.2719026207923889 0 1.0 0 0.0 0 0.0 0 0.0 -0.4822678565979004 -0.15666882693767548 -0.2839455306529999 -0.6613666415214539 -0.7500228881835938 -0.0 0.035872071981430054 0.4178926348686218 0 1.0 0 0.0 0 0.0 0 0.0 -0.47775697708129883 -0.16048887372016907 -0.2839455306529999 -0.6306039690971375 -0.7760856747627258 -0.0 0.033418744802474976 0.4139173626899719 0 1.0 0 0.0 0 0.0 0 0.0 -0.47775697708129883 -0.16048887372016907 0.21605446934700012 -0.6306039690971375 -0.7760856747627258 -0.0 0.4211760461330414 0.2638515830039978 0 1.0 0 0.0 0 0.0 0 0.0 2.047306776046753 0.028401225805282593 -0.2839455306529999 -0.9472640156745911 0.32038331031799316 -0.0 0.026701629161834717 0.4395824074745178 0 1.0 0 0.0 0 0.0 0 0.0 2.045611619949341 0.022981882095336914 -0.2839455306529999 -0.9606616497039795 0.2776268720626831 -0.0 0.027493685483932495 0.4343390464782715 0 1.0 0 0.0 0 0.0 0 0.0 2.045611619949341 0.022981882095336914 0.21605446934700012 -0.9606616497039795 0.2776268720626831 -0.0 0.4329943060874939 0.2772558331489563 0 1.0 0 0.0 0 0.0 0 0.0 1.4410245418548584 -0.12037285417318344 -0.2839455306529999 -0.10455641150474548 0.9945066571235657 -0.0 0.9771068096160889 0.43441450595855713 0 1.0 0 0.0 0 0.0 0 0.0 1.4353182315826416 -0.12085933238267899 -0.2839455306529999 -0.06689657270908356 0.9977416396141052 -0.0 0.9804263114929199 0.4339858293533325 0 1.0 0 0.0 0 0.0 0 0.0 1.4353182315826416 -0.12085933238267899 0.21605446934700012 -0.06689657270908356 0.9977416396141052 -0.0 0.4937530755996704 0.2702690362930298 0 1.0 0 0.0 0 0.0 0 0.0 0.4879648685455322 -0.06124413013458252 -0.2839455306529999 -0.616595983505249 -0.7872554659843445 -0.0 0.9493091106414795 0.49873924255371094 0 1.0 0 0.0 0 0.0 0 0.0 0.4893171787261963 -0.06240437924861908 -0.2839455306529999 -0.7000030279159546 -0.7141026258468628 -0.0 0.9485797882080078 0.49736785888671875 0 1.0 0 0.0 0 0.0 0 0.0 0.4893171787261963 -0.06240437924861908 0.21605446934700012 -0.7000030279159546 -0.7141026258468628 -0.0 0.5293902158737183 0.3385264277458191 0 1.0 0 0.0 0 0.0 0 0.0 -0.47775697708129883 -0.16048887372016907 -0.2839455306529999 -0.6306039690971375 -0.7760856747627258 -0.0 0.033418744802474976 0.4139173626899719 0 1.0 0 0.0 0 0.0 0 0.0 -0.4731268882751465 -0.16409730911254883 -0.2839455306529999 -0.5983458757400513 -0.8012024164199829 -0.0 0.03090190887451172 0.41015708446502686 0 1.0 0 0.0 0 0.0 0 0.0 -0.4731268882751465 -0.16409730911254883 0.21605446934700012 -0.5983458757400513 -0.8012024164199829 -0.0 0.42393144965171814 0.2592355012893677 0 1.0 0 0.0 0 0.0 0 0.0 -1.5483555793762207 0.09344181418418884 -0.2839455306529999 0.861384928226471 -0.5079195499420166 -0.0 0.09006515145301819 0.7204816341400146 0 1.0 0 0.0 0 0.0 0 0.0 -1.5464097261428833 0.09657105803489685 -0.2839455306529999 0.8354747295379639 -0.5494857430458069 -0.0 0.08910319209098816 0.7242394685745239 0 1.0 0 0.0 0 0.0 0 0.0 -1.5464097261428833 0.09657105803489685 0.21605446934700012 0.8354747295379639 -0.5494857430458069 -0.0 0.4978945851325989 0.5367259383201599 0 1.0 0 0.0 0 0.0 0 0.0 -1.4299862384796143 0.09615153074264526 -0.2839455306529999 -0.9173253774642944 -0.3980834484100342 -0.0 1.000737190246582 0.7367956042289734 0 1.0 0 0.0 0 0.0 0 0.0 -1.4287214279174805 0.09289336204528809 -0.2839455306529999 -0.9446699619293213 -0.32795190811157227 -0.0 0.9997917413711548 0.733305811882019 0 1.0 0 0.0 0 0.0 0 0.0 -1.4287214279174805 0.09289336204528809 0.21605446934700012 -0.9446699619293213 -0.32795190811157227 -0.0 0.565342903137207 0.5422323942184448 0 1.0 0 0.0 0 0.0 0 0.0 2.1491682529449463 0.023147299885749817 -0.2839455306529999 0.7331461310386658 -0.6800439357757568 -0.0 0.9684454798698425 0.4304148554801941 0 1.0 0 0.0 0 0.0 0 0.0 2.152557611465454 0.026691272854804993 -0.2839455306529999 0.713370144367218 -0.7007355093955994 -0.0 0.9664015173912048 0.43399637937545776 0 1.0 0 0.0 0 0.0 0 0.0 2.152557611465454 0.026691272854804993 0.21605446934700012 0.713370144367218 -0.7007355093955994 -0.0 0.5119778513908386 0.2717220187187195 0 1.0 0 0.0 0 0.0 0 0.0 0.4893171787261963 -0.06240437924861908 -0.2839455306529999 -0.7000030279159546 -0.7141026258468628 -0.0 0.9485797882080078 0.49736785888671875 0 1.0 0 0.0 0 0.0 0 0.0 0.4904360771179199 -0.06365705281496048 -0.2839455306529999 -0.7671437859535217 -0.6414380073547363 -0.0 0.9479931592941284 0.49590176343917847 0 1.0 0 0.0 0 0.0 0 0.0 0.4904360771179199 -0.06365705281496048 0.21605446934700012 -0.7671437859535217 -0.6414380073547363 -0.0 0.5301678776741028 0.33722954988479614 0 1.0 0 0.0 0 0.0 0 0.0 1.4174449443817139 -0.12114513665437698 -0.2839455306529999 0.03747672960162163 0.999267578125 -0.0 0.9908179044723511 0.434081494808197 0 1.0 0 0.0 0 0.0 0 0.0 1.4119865894317627 -0.12083500623703003 -0.2839455306529999 0.07739493995904922 0.9969786405563354 -0.0 0.9939858913421631 0.43456923961639404 0 1.0 0 0.0 0 0.0 0 0.0 1.4119865894317627 -0.12083500623703003 0.21605446934700012 0.07739493995904922 0.9969786405563354 -0.0 1.476088285446167 0.2709609866142273 0 1.0 0 0.0 0 0.0 0 0.0 1.4353182315826416 -0.12085933238267899 -0.2839455306529999 -0.06689657270908356 0.9977416396141052 -0.0 0.9804263114929199 0.4339858293533325 0 1.0 0 0.0 0 0.0 0 0.0 1.4293491840362549 -0.12115121632814407 -0.2839455306529999 -0.032227545976638794 0.99945068359375 -0.0 0.9838982820510864 0.43378758430480957 0 1.0 0 0.0 0 0.0 0 0.0 1.4293491840362549 -0.12115121632814407 0.21605446934700012 -0.032227545976638794 0.99945068359375 -0.0 0.4892280697822571 0.2699575424194336 0 1.0 0 0.0 0 0.0 0 0.0 -0.31278467178344727 -0.1694680154323578 -0.2839455306529999 0.5518357157707214 -0.8339182734489441 -0.0 0.9424571990966797 0.4015697240829468 0 1.0 0 0.0 0 0.0 0 0.0 -0.30427980422973633 -0.16338948905467987 -0.2839455306529999 0.6092715263366699 -0.7929319143295288 -0.0 0.9377249479293823 0.4075313210487366 0 1.0 0 0.0 0 0.0 0 0.0 -0.30427980422973633 -0.16338948905467987 0.21605446934700012 0.6092715263366699 -0.7929319143295288 -0.0 0.5486077070236206 0.2572265863418579 0 1.0 0 0.0 0 0.0 0 0.0 2.1461069583892822 0.019744396209716797 -0.2839455306529999 0.7550889849662781 -0.6555986404418945 -0.0 0.9702909588813782 0.4270155429840088 0 1.0 0 0.0 0 0.0 0 0.0 2.1491682529449463 0.023147299885749817 -0.2839455306529999 0.7331461310386658 -0.6800439357757568 -0.0 0.9684454798698425 0.4304148554801941 0 1.0 0 0.0 0 0.0 0 0.0 2.1491682529449463 0.023147299885749817 0.21605446934700012 0.7331461310386658 -0.6800439357757568 -0.0 0.5095055103302002 0.2678421139717102 0 1.0 0 0.0 0 0.0 0 0.0 0.34641003608703613 -0.06275463849306107 -0.2839455306529999 -0.1507309228181839 0.9885555505752563 -0.0 0.0342521071434021 0.500602662563324 0 1.0 0 0.0 0 0.0 0 0.0 0.2476358413696289 -0.0778159350156784 -0.2839455306529999 -0.1507309228181839 0.9885555505752563 -0.0 0.08192101120948792 0.4880308508872986 0 1.0 0 0.0 0 0.0 0 0.0 0.2476358413696289 -0.0778159350156784 0.21605446934700012 -0.1507309228181839 0.9885555505752563 -0.0 0.37793639302253723 0.3555501699447632 0 1.0 0 0.0 0 0.0 0 0.0 -0.4731268882751465 -0.16409730911254883 -0.2839455306529999 -0.5983458757400513 -0.8012024164199829 -0.0 0.03090190887451172 0.41015708446502686 0 1.0 0 0.0 0 0.0 0 0.0 -0.46837782859802246 -0.16749413311481476 -0.2839455306529999 -0.5647450089454651 -0.825251042842865 -0.0 0.028320401906967163 0.40661054849624634 0 1.0 0 0.0 0 0.0 0 0.0 -0.46837782859802246 -0.16749413311481476 0.21605446934700012 -0.5647144913673401 -0.825251042842865 -0.0 0.4268491864204407 0.25484126806259155 0 1.0 0 0.0 0 0.0 0 0.0 -1.550223708152771 0.09009608626365662 -0.2839455306529999 0.8835108280181885 -0.4683675765991211 -0.0 0.09093481302261353 0.716498613357544 0 1.0 0 0.0 0 0.0 0 0.0 -1.5483555793762207 0.09344181418418884 -0.2839455306529999 0.861384928226471 -0.5079195499420166 -0.0 0.09006515145301819 0.7204816341400146 0 1.0 0 0.0 0 0.0 0 0.0 -1.5483555793762207 0.09344181418418884 0.21605446934700012 0.861384928226471 -0.5079195499420166 -0.0 0.49681398272514343 0.533308744430542 0 1.0 0 0.0 0 0.0 0 0.0 2.045611619949341 0.022981882095336914 -0.2839455306529999 -0.9606616497039795 0.2776268720626831 -0.0 0.027493685483932495 0.4343390464782715 0 1.0 0 0.0 0 0.0 0 0.0 2.0441157817840576 0.017348498106002808 -0.2839455306529999 -0.9715872406959534 0.23657947778701782 -0.0 0.02816295623779297 0.42897486686706543 0 1.0 0 0.0 0 0.0 0 0.0 2.0441157817840576 0.017348498106002808 0.21605446934700012 -0.9715872406959534 0.23657947778701782 -0.0 0.43155452609062195 0.2721865177154541 0 1.0 0 0.0 0 0.0 0 0.0 -1.4287214279174805 0.09289336204528809 -0.2839455306529999 -0.9446699619293213 -0.32795190811157227 -0.0 0.9997917413711548 0.733305811882019 0 1.0 0 0.0 0 0.0 0 0.0 -1.4276511669158936 0.08940896391868591 -0.2839455306529999 -0.965117335319519 -0.2617572546005249 -0.0 0.999001681804657 0.7295677661895752 0 1.0 0 0.0 0 0.0 0 0.0 -1.4276511669158936 0.08940896391868591 0.21605446934700012 -0.965117335319519 -0.2617572546005249 -0.0 0.5661900043487549 0.5386909246444702 0 1.0 0 0.0 0 0.0 0 0.0 0.3475508689880371 -0.06744548678398132 -0.2839455306529999 0.965849757194519 0.25907161831855774 -0.0 0.03346249461174011 0.4952545166015625 0 1.0 0 0.0 0 0.0 0 0.0 0.34641003608703613 -0.06275463849306107 -0.2839455306529999 0.9716482758522034 0.23630481958389282 -0.0 0.0342521071434021 0.500602662563324 0 1.0 0 0.0 0 0.0 0 0.0 0.34641003608703613 -0.06275463849306107 0.21605446934700012 0.9716482758522034 0.23630481958389282 -0.0 0.4315919876098633 0.34482550621032715 0 1.0 0 0.0 0 0.0 0 0.0 1.4231173992156982 -0.1212485134601593 -0.2839455306529999 0.0012817773967981339 0.999969482421875 -0.0 0.9875220060348511 0.43382418155670166 0 1.0 0 0.0 0 0.0 0 0.0 1.4174449443817139 -0.12114513665437698 -0.2839455306529999 0.03747672960162163 0.999267578125 -0.0 0.9908179044723511 0.434081494808197 0 1.0 0 0.0 0 0.0 0 0.0 1.4174449443817139 -0.12114513665437698 0.21605446934700012 0.03747672960162163 0.999267578125 -0.0 1.4802052974700928 0.27031540870666504 0 1.0 0 0.0 0 0.0 0 0.0 -0.46837782859802246 -0.16749413311481476 -0.2839455306529999 -0.5647450089454651 -0.825251042842865 -0.0 0.028320401906967163 0.40661054849624634 0 1.0 0 0.0 0 0.0 0 0.0 -0.46350932121276855 -0.17067933082580566 -0.2839455306529999 -0.5298928618431091 -0.8480483293533325 -0.0 0.0256727933883667 0.4032769203186035 0 1.0 0 0.0 0 0.0 0 0.0 -0.46350932121276855 -0.17067933082580566 0.21605445444583893 -0.5298928618431091 -0.8480483293533325 -0.0 0.429933100938797 0.2506728768348694 0 1.0 0 0.0 0 0.0 0 0.0 0.4904360771179199 -0.06365705281496048 -0.2839455306529999 -0.7671437859535217 -0.6414380073547363 -0.0 0.9479931592941284 0.49590176343917847 0 1.0 0 0.0 0 0.0 0 0.0 0.4914577007293701 -0.06496324390172958 -0.2839455306529999 -0.807763934135437 -0.5894650220870972 -0.0 0.9474676847457886 0.49438291788101196 0 1.0 0 0.0 0 0.0 0 0.0 0.4914577007293701 -0.06496324390172958 0.21605446934700012 -0.807763934135437 -0.5894650220870972 -0.0 0.5308834910392761 0.33586686849594116 0 1.0 0 0.0 0 0.0 0 0.0 1.4293491840362549 -0.12115121632814407 -0.2839455306529999 -0.032227545976638794 0.99945068359375 -0.0 0.9838982820510864 0.43378758430480957 0 1.0 0 0.0 0 0.0 0 0.0 1.4231173992156982 -0.1212485134601593 -0.2839455306529999 0.0012817773967981339 0.999969482421875 -0.0 0.9875220060348511 0.43382418155670166 0 1.0 0 0.0 0 0.0 0 0.0 1.4231173992156982 -0.1212485134601593 0.21605446934700012 0.0012817773967981339 0.999969482421875 -0.0 1.484500765800476 0.2699793577194214 0 1.0 0 0.0 0 0.0 0 0.0 2.14337420463562 0.016482576727867126 -0.2839455306529999 0.7795037627220154 -0.6263619065284729 -0.0 0.9719381332397461 0.4237942695617676 0 1.0 0 0.0 0 0.0 0 0.0 2.1461069583892822 0.019744396209716797 -0.2839455306529999 0.7550889849662781 -0.6555986404418945 -0.0 0.9702909588813782 0.4270155429840088 0 1.0 0 0.0 0 0.0 0 0.0 2.1461069583892822 0.019744396209716797 0.21605446934700012 0.7550889849662781 -0.6555986404418945 -0.0 0.5072463750839233 0.26419901847839355 0 1.0 0 0.0 0 0.0 0 0.0 -1.3293672800064087 0.08272477984428406 -0.2839455306529999 0.9981383681297302 0.06097598373889923 -0.0 0.9370471835136414 0.7014241814613342 0 1.0 0 0.0 0 0.0 0 0.0 -1.3300057649612427 0.09145823121070862 -0.2839455306529999 0.9962462186813354 0.08639790117740631 -0.0 0.9367170333862305 0.7098526954650879 0 1.0 0 0.0 0 0.0 0 0.0 -1.3300057649612427 0.09145823121070862 0.21605446934700012 0.9962462186813354 0.08639790117740631 -0.0 0.6154331564903259 0.5430489778518677 0 1.0 0 0.0 0 0.0 0 0.0 2.0441157817840576 0.017348498106002808 -0.2839455306529999 -0.9715872406959534 0.23657947778701782 -0.0 0.02816295623779297 0.42897486686706543 0 1.0 0 0.0 0 0.0 0 0.0 2.0428192615509033 0.01150105893611908 -0.2839455306529999 -0.9803155660629272 0.19730216264724731 -0.0 0.02871173620223999 0.4234986901283264 0 1.0 0 0.0 0 0.0 0 0.0 2.0428192615509033 0.01150105893611908 0.21605446934700012 -0.9803155660629272 0.19730216264724731 -0.0 0.4302225410938263 0.26697635650634766 0 1.0 0 0.0 0 0.0 0 0.0 0.4914577007293701 -0.06496324390172958 -0.2839455306529999 -0.807763934135437 -0.5894650220870972 -0.0 0.9474676847457886 0.49438291788101196 0 1.0 0 0.0 0 0.0 0 0.0 0.4923820495605469 -0.0663229450583458 -0.2839455306529999 -0.8454847931861877 -0.5339518189430237 -0.0 0.9470030069351196 0.4928116202354431 0 1.0 0 0.0 0 0.0 0 0.0 0.4923820495605469 -0.0663229450583458 0.21605446934700012 -0.8454847931861877 -0.5339518189430237 -0.0 0.5315372943878174 0.3344380855560303 0 1.0 0 0.0 0 0.0 0 0.0 -0.32155942916870117 -0.17483140528202057 -0.2839455306529999 0.48963895440101624 -0.8719137907028198 -0.0 0.9473295211791992 0.39633166790008545 0 1.0 0 0.0 0 0.0 0 0.0 -0.31278467178344727 -0.1694680154323578 -0.2839455306529999 0.5518357157707214 -0.8339182734489441 -0.0 0.9424571990966797 0.4015697240829468 0 1.0 0 0.0 0 0.0 0 0.0 -0.31278467178344727 -0.1694680154323578 0.21605446934700012 0.5518357157707214 -0.8339182734489441 -0.0 0.5431747436523438 0.24967700242996216 0 1.0 0 0.0 0 0.0 0 0.0 -1.6462346315383911 0.09066042304039001 -0.2839455306529999 -0.17752617597579956 -0.9840998649597168 -0.0 0.14539822936058044 0.6808279752731323 0 1.0 0 0.0 0 0.0 0 0.0 -1.5569175481796265 0.07454833388328552 -0.2839455306529999 -0.17752617597579956 -0.9840998649597168 -0.0 0.09352043271064758 0.6982331871986389 0 1.0 0 0.0 0 0.0 0 0.0 -1.5569175481796265 0.07454833388328552 0.21605446934700012 -0.17752617597579956 -0.9840998649597168 -0.0 0.4919670522212982 0.5125381350517273 0 1.0 0 0.0 0 0.0 0 0.0 -0.46350932121276855 -0.17067933082580566 -0.2839455306529999 -0.5298928618431091 -0.8480483293533325 -0.0 0.0256727933883667 0.4032769203186035 0 1.0 0 0.0 0 0.0 0 0.0 -0.45852184295654297 -0.17365291714668274 -0.2839455306529999 -0.4940031170845032 -0.86944180727005 -0.0 0.02295824885368347 0.40015560388565063 0 1.0 0 0.0 0 0.0 0 0.0 -0.45852184295654297 -0.17365291714668274 0.21605445444583893 -0.4940031170845032 -0.86944180727005 -0.0 0.43318602442741394 0.2467350959777832 0 1.0 0 0.0 0 0.0 0 0.0 -1.5569175481796265 0.07454833388328552 -0.2839455306529999 0.9379558563232422 -0.34669026732444763 -0.0 0.09352043271064758 0.6982331871986389 0 1.0 0 0.0 0 0.0 0 0.0 -1.5553607940673828 0.07875999808311462 -0.2839455306529999 0.9318826794624329 -0.36271247267723083 -0.0 0.09300467371940613 0.7031583786010742 0 1.0 0 0.0 0 0.0 0 0.0 -1.5553607940673828 0.07875999808311462 0.21605446934700012 0.9318826794624329 -0.36271247267723083 -0.0 0.49286413192749023 0.5172007083892822 0 1.0 0 0.0 0 0.0 0 0.0 0.4923820495605469 -0.0663229450583458 -0.2839455306529999 -0.8454847931861877 -0.5339518189430237 -0.0 0.9470030069351196 0.4928116202354431 0 1.0 0 0.0 0 0.0 0 0.0 0.4932091236114502 -0.06773615628480911 -0.2839455306529999 -0.8796654939651489 -0.4755394160747528 -0.0 0.9465987682342529 0.4911881685256958 0 1.0 0 0.0 0 0.0 0 0.0 0.4932091236114502 -0.06773615628480911 0.21605446934700012 -0.8796654939651489 -0.4755394160747528 -0.0 0.5321296453475952 0.33294302225112915 0 1.0 0 0.0 0 0.0 0 0.0 1.5733020305633545 -0.12946023046970367 -0.2839455306529999 0.8250373601913452 -0.5650196671485901 -0.0 0.9081575274467468 0.43117111921310425 0 1.0 0 0.0 0 0.0 0 0.0 1.5777533054351807 -0.12243308126926422 -0.2839455306529999 0.8640400171279907 -0.503372311592102 -0.0 0.9056793451309204 0.43781161308288574 0 1.0 0 0.0 0 0.0 0 0.0 1.5777533054351807 -0.12243308126926422 0.21605446934700012 0.8640400171279907 -0.503372311592102 -0.0 0.586573600769043 0.2985709309577942 0 1.0 0 0.0 0 0.0 0 0.0 2.14096999168396 0.013361826539039612 -0.2839455306529999 0.8065431714057922 -0.5911435484886169 -0.0 0.9733879566192627 0.4207465648651123 0 1.0 0 0.0 0 0.0 0 0.0 2.14337420463562 0.016482576727867126 -0.2839455306529999 0.7795037627220154 -0.6263619065284729 -0.0 0.9719381332397461 0.4237942695617676 0 1.0 0 0.0 0 0.0 0 0.0 2.14337420463562 0.016482576727867126 0.21605446934700012 0.7795037627220154 -0.6263619065284729 -0.0 0.5052080750465393 0.2607806921005249 0 1.0 0 0.0 0 0.0 0 0.0 1.2661559581756592 -0.12518896162509918 -0.2839455306529999 -0.8221076130867004 -0.5692922472953796 -0.0 0.07005223631858826 0.44216883182525635 0 1.0 0 0.0 0 0.0 0 0.0 1.2711994647979736 -0.1320118010044098 -0.2839455306529999 -0.7854243516921997 -0.6189458966255188 -0.0 0.06747478246688843 0.4355006217956543 0 1.0 0 0.0 0 0.0 0 0.0 1.2711994647979736 -0.1320118010044098 0.21605446934700012 -0.7854243516921997 -0.6189458966255188 -0.0 0.38456952571868896 0.296792209148407 0 1.0 0 0.0 0 0.0 0 0.0 -0.45852184295654297 -0.17365291714668274 -0.2839455306529999 -0.4940031170845032 -0.86944180727005 -0.0 0.02295824885368347 0.40015560388565063 0 1.0 0 0.0 0 0.0 0 0.0 -0.4534149169921875 -0.17641489207744598 -0.2839455306529999 -0.4587237238883972 -0.8885769248008728 -0.0 0.020175516605377197 0.3972463607788086 0 1.0 0 0.0 0 0.0 0 0.0 -0.4534149169921875 -0.17641489207744598 0.21605445444583893 -0.4586932063102722 -0.8885769248008728 -0.0 0.43661075830459595 0.24303346872329712 0 1.0 0 0.0 0 0.0 0 0.0 -1.5553607940673828 0.07875999808311462 -0.2839455306529999 0.9318826794624329 -0.36271247267723083 -0.0 0.09300467371940613 0.7031583786010742 0 1.0 0 0.0 0 0.0 0 0.0 -1.553726315498352 0.0827551782131195 -0.2839455306529999 0.9183324575424194 -0.395764023065567 -0.0 0.09240296483039856 0.7078412771224976 0 1.0 0 0.0 0 0.0 0 0.0 -1.553726315498352 0.0827551782131195 0.21605446934700012 0.9183324575424194 -0.395764023065567 -0.0 0.49379682540893555 0.5216037034988403 0 1.0 0 0.0 0 0.0 0 0.0 2.1388938426971436 0.010382160544395447 -0.2839455306529999 0.8363292217254639 -0.5481734871864319 -0.0 0.9746416807174683 0.4178677797317505 0 1.0 0 0.0 0 0.0 0 0.0 2.14096999168396 0.013361826539039612 -0.2839455306529999 0.8065431714057922 -0.5911435484886169 -0.0 0.9733879566192627 0.4207465648651123 0 1.0 0 0.0 0 0.0 0 0.0 2.14096999168396 0.013361826539039612 0.21605446934700012 0.8065431714057922 -0.5911435484886169 -0.0 0.5033973455429077 0.2575761675834656 0 1.0 0 0.0 0 0.0 0 0.0 0.34887170791625977 -0.07194417715072632 -0.2839455306529999 0.9521775245666504 0.30549028515815735 -0.0 0.03258267045021057 0.49015122652053833 0 1.0 0 0.0 0 0.0 0 0.0 0.3475508689880371 -0.06744548678398132 -0.2839455306529999 0.965849757194519 0.25907161831855774 -0.0 0.03346249461174011 0.4952545166015625 0 1.0 0 0.0 0 0.0 0 0.0 0.3475508689880371 -0.06744548678398132 0.21605446934700012 0.965849757194519 0.25907161831855774 -0.0 0.43197548389434814 0.3392900228500366 0 1.0 0 0.0 0 0.0 0 0.0 -1.553726315498352 0.0827551782131195 -0.2839455306529999 0.9183324575424194 -0.395764023065567 -0.0 0.09240296483039856 0.7078412771224976 0 1.0 0 0.0 0 0.0 0 0.0 -1.552013874053955 0.08653387427330017 -0.2839455306529999 0.9023407697677612 -0.430982381105423 -0.0 0.09171348810195923 0.7122865319252014 0 1.0 0 0.0 0 0.0 0 0.0 -1.552013874053955 0.08653387427330017 0.21605446934700012 0.9023407697677612 -0.430982381105423 -0.0 0.4947656989097595 0.5257526636123657 0 1.0 0 0.0 0 0.0 0 0.0 2.0428192615509033 0.01150105893611908 -0.2839455306529999 -0.9803155660629272 0.19730216264724731 -0.0 0.02871173620223999 0.4234986901283264 0 1.0 0 0.0 0 0.0 0 0.0 2.041722059249878 0.00543956458568573 -0.2839455306529999 -0.9871211647987366 0.1598559468984604 -0.0 0.029142290353775024 0.4179196357727051 0 1.0 0 0.0 0 0.0 0 0.0 2.041722059249878 0.00543956458568573 0.21605446934700012 -0.9871211647987366 0.1598559468984604 -0.0 0.4289977252483368 0.2616328001022339 0 1.0 0 0.0 0 0.0 0 0.0 1.5682575702667236 -0.13628791272640228 -0.2839455306529999 0.7834406495094299 -0.6214483976364136 -0.0 0.91089928150177 0.42470550537109375 0 1.0 0 0.0 0 0.0 0 0.0 1.5733020305633545 -0.12946023046970367 -0.2839455306529999 0.8250373601913452 -0.5650196671485901 -0.0 0.9081575274467468 0.43117111921310425 0 1.0 0 0.0 0 0.0 0 0.0 1.5733020305633545 -0.12946023046970367 0.21605446934700012 0.8250373601913452 -0.5650196671485901 -0.0 0.5848955512046814 0.2907964587211609 0 1.0 0 0.0 0 0.0 0 0.0 -0.33060407638549805 -0.1794796884059906 -0.2839455306529999 0.42332223057746887 -0.9059419631958008 -0.0 0.9523460268974304 0.3918129801750183 0 1.0 0 0.0 0 0.0 0 0.0 -0.32155942916870117 -0.17483140528202057 -0.2839455306529999 0.48963895440101624 -0.8719137907028198 -0.0 0.9473295211791992 0.39633166790008545 0 1.0 0 0.0 0 0.0 0 0.0 -0.32155942916870117 -0.17483140528202057 0.21605445444583893 0.48963895440101624 -0.8719137907028198 -0.0 0.5372918844223022 0.24292826652526855 0 1.0 0 0.0 0 0.0 0 0.0 0.5947997570037842 -0.07608164846897125 -0.2839455306529999 0.9974364638328552 -0.0714438334107399 -0.0 0.8959649205207825 0.4819793105125427 0 1.0 0 0.0 0 0.0 0 0.0 0.5950965881347656 -0.06765832006931305 -0.2839455306529999 0.999969482421875 -0.003662221133708954 -0.0 0.895166277885437 0.4902169108390808 0 1.0 0 0.0 0 0.0 0 0.0 0.5950965881347656 -0.06765832006931305 0.21605446934700012 0.999969482421875 -0.003662221133708954 -0.0 0.589170515537262 0.35480374097824097 0 1.0 0 0.0 0 0.0 0 0.0 1.2711994647979736 -0.1320118010044098 -0.2839455306529999 -0.7854243516921997 -0.6189458966255188 -0.0 0.06747478246688843 0.4355006217956543 0 1.0 0 0.0 0 0.0 0 0.0 1.2766687870025635 -0.13852813839912415 -0.2839455306529999 -0.7459334135055542 -0.6659749150276184 -0.0 0.06470900774002075 0.4290871024131775 0 1.0 0 0.0 0 0.0 0 0.0 1.2766687870025635 -0.13852813839912415 0.21605446934700012 -0.7459334135055542 -0.6659749150276184 -0.0 0.3866134285926819 0.2890600562095642 0 1.0 0 0.0 0 0.0 0 0.0 -0.4534149169921875 -0.17641489207744598 -0.2839455306529999 -0.4587237238883972 -0.8885769248008728 -0.0 0.020175516605377197 0.3972463607788086 0 1.0 0 0.0 0 0.0 0 0.0 -0.4482426643371582 -0.17896036803722382 -0.2839455306529999 -0.42536699771881104 -0.904995858669281 -0.0 0.01735299825668335 0.39455825090408325 0 1.0 0 0.0 0 0.0 0 0.0 -0.4482426643371582 -0.17896036803722382 0.21605445444583893 -0.42536699771881104 -0.904995858669281 -0.0 0.4401699900627136 0.23959076404571533 0 1.0 0 0.0 0 0.0 0 0.0 -1.552013874053955 0.08653387427330017 -0.2839455306529999 0.9023407697677612 -0.430982381105423 -0.0 0.09171348810195923 0.7122865319252014 0 1.0 0 0.0 0 0.0 0 0.0 -1.550223708152771 0.09009608626365662 -0.2839455306529999 0.8835108280181885 -0.4683675765991211 -0.0 0.09093481302261353 0.716498613357544 0 1.0 0 0.0 0 0.0 0 0.0 -1.550223708152771 0.09009608626365662 0.21605446934700012 0.8835108280181885 -0.4683675765991211 -0.0 0.495771199464798 0.5296525955200195 0 1.0 0 0.0 0 0.0 0 0.0 0.4932091236114502 -0.06773615628480911 -0.2839455306529999 -0.8796654939651489 -0.4755394160747528 -0.0 0.9465987682342529 0.4911881685256958 0 1.0 0 0.0 0 0.0 0 0.0 0.4939389228820801 -0.06920288503170013 -0.2839455306529999 -0.9097872972488403 -0.41502121090888977 -0.0 0.946254312992096 0.48951268196105957 0 1.0 0 0.0 0 0.0 0 0.0 0.4939389228820801 -0.06920288503170013 0.21605446934700012 -0.9097872972488403 -0.41502121090888977 -0.0 0.5326606631278992 0.33138126134872437 0 1.0 0 0.0 0 0.0 0 0.0 -1.4276511669158936 0.08940896391868591 -0.2839455306529999 -0.965117335319519 -0.2617572546005249 -0.0 0.999001681804657 0.7295677661895752 0 1.0 0 0.0 0 0.0 0 0.0 -1.426775574684143 0.08569836616516113 -0.2839455306529999 -0.9797357320785522 -0.20014038681983948 -0.0 0.9983647465705872 0.7255765199661255 0 1.0 0 0.0 0 0.0 0 0.0 -1.426775574684143 0.08569836616516113 0.21605446934700012 -0.9797357320785522 -0.20014038681983948 -0.0 0.5669488906860352 0.5348721742630005 0 1.0 0 0.0 0 0.0 0 0.0 2.137146234512329 0.0075435638427734375 -0.2839455306529999 0.868739902973175 -0.49525436758995056 -0.0 0.9757001996040344 0.4151532053947449 0 1.0 0 0.0 0 0.0 0 0.0 2.1388938426971436 0.010382160544395447 -0.2839455306529999 0.8363292217254639 -0.5481734871864319 -0.0 0.9746416807174683 0.4178677797317505 0 1.0 0 0.0 0 0.0 0 0.0 2.1388938426971436 0.010382160544395447 0.21605446934700012 0.8363292217254639 -0.5481734871864319 -0.0 0.5018196105957031 0.2545742988586426 0 1.0 0 0.0 0 0.0 0 0.0 -0.4482426643371582 -0.17896036803722382 -0.2839455306529999 -0.42536699771881104 -0.904995858669281 -0.0 0.01735299825668335 0.39455825090408325 0 1.0 0 0.0 0 0.0 0 0.0 -0.4430580139160156 -0.18128451704978943 -0.2839455306529999 -0.39213234186172485 -0.9198889136314392 -0.0 0.014519035816192627 0.3920992612838745 0 1.0 0 0.0 0 0.0 0 0.0 -0.4430580139160156 -0.18128451704978943 0.21605445444583893 -0.39213234186172485 -0.9198889136314392 -0.0 0.4438236653804779 0.23642700910568237 0 1.0 0 0.0 0 0.0 0 0.0 0.4939389228820801 -0.06920288503170013 -0.2839455306529999 -0.9097872972488403 -0.41502121090888977 -0.0 0.946254312992096 0.48951268196105957 0 1.0 0 0.0 0 0.0 0 0.0 0.4945714473724365 -0.07072312384843826 -0.2839455306529999 -0.9355449080467224 -0.35319072008132935 -0.0 0.9459694027900696 0.4877854585647583 0 1.0 0 0.0 0 0.0 0 0.0 0.4945714473724365 -0.07072312384843826 0.21605446934700012 -0.9355449080467224 -0.35319072008132935 -0.0 0.5331304669380188 0.3297528028488159 0 1.0 0 0.0 0 0.0 0 0.0 1.5626189708709717 -0.14291614294052124 -0.2839455306529999 0.7402264475822449 -0.6723227500915527 -0.0 0.9139140844345093 0.41840875148773193 0 1.0 0 0.0 0 0.0 0 0.0 1.5682575702667236 -0.13628791272640228 -0.2839455306529999 0.7834406495094299 -0.6214483976364136 -0.0 0.91089928150177 0.42470550537109375 0 1.0 0 0.0 0 0.0 0 0.0 1.5682575702667236 -0.13628791272640228 0.21605446934700012 0.7834406495094299 -0.6214483976364136 -0.0 0.5828350782394409 0.28305596113204956 0 1.0 0 0.0 0 0.0 0 0.0 -1.426775574684143 0.08569836616516113 -0.2839455306529999 -0.9797357320785522 -0.20014038681983948 -0.0 0.9983647465705872 0.7255765199661255 0 1.0 0 0.0 0 0.0 0 0.0 -1.42609441280365 0.08176156878471375 -0.2839455306529999 -0.9896542429924011 -0.143314927816391 -0.0 0.9978780746459961 0.7213261127471924 0 1.0 0 0.0 0 0.0 0 0.0 -1.42609441280365 0.08176156878471375 0.21605446934700012 -0.9896542429924011 -0.143314927816391 -0.0 0.5676197409629822 0.5307688117027283 0 1.0 0 0.0 0 0.0 0 0.0 2.1357266902923584 0.004846066236495972 -0.2839455306529999 0.9028900861740112 -0.4298532009124756 -0.0 0.9765651226043701 0.4125983715057373 0 1.0 0 0.0 0 0.0 0 0.0 2.137146234512329 0.0075435638427734375 -0.2839455306529999 0.868739902973175 -0.49525436758995056 -0.0 0.9757001996040344 0.4151532053947449 0 1.0 0 0.0 0 0.0 0 0.0 2.137146234512329 0.0075435638427734375 0.21605446934700012 0.868739902973175 -0.49525436758995056 -0.0 0.5004804134368896 0.2517651915550232 0 1.0 0 0.0 0 0.0 0 0.0 1.2766687870025635 -0.13852813839912415 -0.2839455306529999 -0.7459334135055542 -0.6659749150276184 -0.0 0.06470900774002075 0.4290871024131775 0 1.0 0 0.0 0 0.0 0 0.0 1.2825636863708496 -0.14473800361156464 -0.2839455306529999 -0.7042451500892639 -0.7099520564079285 -0.0 0.06174764037132263 0.42292261123657227 0 1.0 0 0.0 0 0.0 0 0.0 1.2825636863708496 -0.14473800361156464 0.21605446934700012 -0.7042451500892639 -0.7099520564079285 -0.0 0.38898372650146484 0.2814762592315674 0 1.0 0 0.0 0 0.0 0 0.0 2.041722059249878 0.00543956458568573 -0.2839455306529999 -0.9871211647987366 0.1598559468984604 -0.0 0.029142290353775024 0.4179196357727051 0 1.0 0 0.0 0 0.0 0 0.0 2.0408246517181396 -0.0008359700441360474 -0.2839455306529999 -0.9922177791595459 0.12427137047052383 -0.0 0.029456526041030884 0.4122468829154968 0 1.0 0 0.0 0 0.0 0 0.0 2.0408246517181396 -0.0008359700441360474 0.21605446934700012 -0.9922177791595459 0.12427137047052383 -0.0 0.42788001894950867 0.25616389513015747 0 1.0 0 0.0 0 0.0 0 0.0 0.4945714473724365 -0.07072312384843826 -0.2839455306529999 -0.9355449080467224 -0.35319072008132935 -0.0 0.9459694027900696 0.4877854585647583 0 1.0 0 0.0 0 0.0 0 0.0 0.49510645866394043 -0.0722968727350235 -0.2839455306529999 -0.9567247629165649 -0.29096347093582153 -0.0 0.9457437992095947 0.48600679636001587 0 1.0 0 0.0 0 0.0 0 0.0 0.49510645866394043 -0.0722968727350235 0.21605446934700012 -0.9567247629165649 -0.29096347093582153 -0.0 0.5335390567779541 0.3280574083328247 0 1.0 0 0.0 0 0.0 0 0.0 -0.339918851852417 -0.1834128499031067 -0.2839455306529999 0.35386210680007935 -0.9352702498435974 -0.0 0.957510232925415 0.3880120515823364 0 1.0 0 0.0 0 0.0 0 0.0 -0.33060407638549805 -0.1794796884059906 -0.2839455306529999 0.42332223057746887 -0.9059419631958008 -0.0 0.9523460268974304 0.3918129801750183 0 1.0 0 0.0 0 0.0 0 0.0 -0.33060407638549805 -0.1794796884059906 0.21605445444583893 0.42332223057746887 -0.9059419631958008 -0.0 0.5309553146362305 0.2370031476020813 0 1.0 0 0.0 0 0.0 0 0.0 -0.4430580139160156 -0.18128451704978943 -0.2839455306529999 -0.39213234186172485 -0.9198889136314392 -0.0 0.014519035816192627 0.3920992612838745 0 1.0 0 0.0 0 0.0 0 0.0 -0.43786120414733887 -0.18338730931282043 -0.2839455306529999 -0.3574633002281189 -0.9338968992233276 -0.0 0.01167386770248413 0.38986819982528687 0 1.0 0 0.0 0 0.0 0 0.0 -0.43786120414733887 -0.18338730931282043 0.21605445444583893 -0.3574327826499939 -0.9338968992233276 -0.0 0.447567880153656 0.23354434967041016 0 1.0 0 0.0 0 0.0 0 0.0 -1.3289111852645874 0.07343429327011108 -0.2839455306529999 0.999237060546875 0.03839228302240372 -0.0 0.9375044107437134 0.6923645734786987 0 1.0 0 0.0 0 0.0 0 0.0 -1.3293672800064087 0.08272477984428406 -0.2839455306529999 0.9981383681297302 0.06097598373889923 -0.0 0.9370471835136414 0.7014241814613342 0 1.0 0 0.0 0 0.0 0 0.0 -1.3293672800064087 0.08272477984428406 0.21605446934700012 0.9981383681297302 0.06097598373889923 -0.0 0.6166341304779053 0.5349475145339966 0 1.0 0 0.0 0 0.0 0 0.0 1.556387186050415 -0.14934493601322174 -0.2839455306529999 0.6964018940925598 -0.7176427245140076 -0.0 0.9172113537788391 0.4122779965400696 0 1.0 0 0.0 0 0.0 0 0.0 1.5626189708709717 -0.14291614294052124 -0.2839455306529999 0.7402264475822449 -0.6723227500915527 -0.0 0.9139140844345093 0.41840875148773193 0 1.0 0 0.0 0 0.0 0 0.0 1.5626189708709717 -0.14291614294052124 0.21605446934700012 0.7402264475822449 -0.6723227500915527 -0.0 0.5803644061088562 0.27534836530685425 0 1.0 0 0.0 0 0.0 0 0.0 -1.42609441280365 0.08176156878471375 -0.2839455306529999 -0.9896542429924011 -0.143314927816391 -0.0 0.9978780746459961 0.7213261127471924 0 1.0 0 0.0 0 0.0 0 0.0 -1.4256080389022827 0.07759854197502136 -0.2839455306529999 -0.9958189725875854 -0.09121982753276825 -0.0 0.9975391626358032 0.7168097496032715 0 1.0 0 0.0 0 0.0 0 0.0 -1.4256080389022827 0.07759854197502136 0.21605446934700012 -0.9958189725875854 -0.09121982753276825 -0.0 0.5682021379470825 0.5263727903366089 0 1.0 0 0.0 0 0.0 0 0.0 2.134528875350952 0.0020464062690734863 -0.2839455306529999 0.9330118894577026 -0.35981321334838867 -0.0 0.9773029088973999 0.4099716544151306 0 1.0 0 0.0 0 0.0 0 0.0 2.1357266902923584 0.004846066236495972 -0.2839455306529999 0.9028900861740112 -0.4298532009124756 -0.0 0.9765651226043701 0.4125983715057373 0 1.0 0 0.0 0 0.0 0 0.0 2.1357266902923584 0.004846066236495972 0.21605446934700012 0.9028900861740112 -0.4298532009124756 -0.0 0.49938392639160156 0.2491394281387329 0 1.0 0 0.0 0 0.0 0 0.0 0.3503725528717041 -0.07625070214271545 -0.2839455306529999 0.9353312849998474 0.35374003648757935 -0.0 0.031612515449523926 0.4852878451347351 0 1.0 0 0.0 0 0.0 0 0.0 0.34887170791625977 -0.07194417715072632 -0.2839455306529999 0.9521775245666504 0.30549028515815735 -0.0 0.03258267045021057 0.49015122652053833 0 1.0 0 0.0 0 0.0 0 0.0 0.34887170791625977 -0.07194417715072632 0.21605446934700012 0.9521775245666504 0.30549028515815735 -0.0 0.432491660118103 0.33396750688552856 0 1.0 0 0.0 0 0.0 0 0.0 1.2825636863708496 -0.14473800361156464 -0.2839455306529999 -0.7042451500892639 -0.7099520564079285 -0.0 0.06174764037132263 0.42292261123657227 0 1.0 0 0.0 0 0.0 0 0.0 1.288883924484253 -0.15064138174057007 -0.2839455306529999 -0.6608172655105591 -0.7505111694335938 -0.0 0.05858275294303894 0.41700345277786255 0 1.0 0 0.0 0 0.0 0 0.0 1.288883924484253 -0.15064138174057007 0.21605446934700012 -0.6608172655105591 -0.7505111694335938 -0.0 0.3917032480239868 0.2740423083305359 0 1.0 0 0.0 0 0.0 0 0.0 -0.43786120414733887 -0.18338730931282043 -0.2839455306529999 -0.3574633002281189 -0.9338968992233276 -0.0 0.01167386770248413 0.38986819982528687 0 1.0 0 0.0 0 0.0 0 0.0 -0.43265223503112793 -0.18526874482631683 -0.2839455306529999 -0.32142093777656555 -0.9469283223152161 -0.0 0.008817553520202637 0.3878638744354248 0 1.0 0 0.0 0 0.0 0 0.0 -0.43265223503112793 -0.18526874482631683 0.21605445444583893 -0.32139042019844055 -0.9469283223152161 -0.0 0.4513981342315674 0.23094463348388672 0 1.0 0 0.0 0 0.0 0 0.0 0.49510645866394043 -0.0722968727350235 -0.2839455306529999 -0.9567247629165649 -0.29096347093582153 -0.0 0.9457437992095947 0.48600679636001587 0 1.0 0 0.0 0 0.0 0 0.0 0.4955441951751709 -0.07392413169145584 -0.2839455306529999 -0.9733573198318481 -0.2292550504207611 -0.0 0.9455769062042236 0.4841769337654114 0 1.0 0 0.0 0 0.0 0 0.0 0.4955441951751709 -0.07392413169145584 0.21605446934700012 -0.9733573198318481 -0.2292550504207611 -0.0 0.5338865518569946 0.3262951970100403 0 1.0 0 0.0 0 0.0 0 0.0 -1.4256080389022827 0.07759854197502136 -0.2839455306529999 -0.9958189725875854 -0.09121982753276825 -0.0 0.9975391626358032 0.7168097496032715 0 1.0 0 0.0 0 0.0 0 0.0 -1.4253160953521729 0.07320931553840637 -0.2839455306529999 -0.9990233778953552 -0.04370250552892685 -0.0 0.9973450899124146 0.7120200395584106 0 1.0 0 0.0 0 0.0 0 0.0 -1.4253160953521729 0.07320931553840637 0.21605446934700012 -0.9990233778953552 -0.04370250552892685 -0.0 0.5686959028244019 0.5216755270957947 0 1.0 0 0.0 0 0.0 0 0.0 2.1334450244903564 -0.0010986626148223877 -0.2839455306529999 0.9549241662025452 -0.29682302474975586 -0.0 0.9779797792434692 0.4070509076118469 0 1.0 0 0.0 0 0.0 0 0.0 2.134528875350952 0.0020464062690734863 -0.2839455306529999 0.9330118894577026 -0.35981321334838867 -0.0 0.9773029088973999 0.4099716544151306 0 1.0 0 0.0 0 0.0 0 0.0 2.134528875350952 0.0020464062690734863 0.21605446934700012 0.9330118894577026 -0.35981321334838867 -0.0 0.49845102429389954 0.24645698070526123 0 1.0 0 0.0 0 0.0 0 0.0 2.0408246517181396 -0.0008359700441360474 -0.2839455306529999 -0.9922177791595459 0.12427137047052383 -0.0 0.029456526041030884 0.4122468829154968 0 1.0 0 0.0 0 0.0 0 0.0 2.0401265621185303 -0.007325559854507446 -0.2839455306529999 -0.9958800077438354 0.09057893604040146 -0.0 0.029656797647476196 0.4064900279045105 0 1.0 0 0.0 0 0.0 0 0.0 2.0401265621185303 -0.007325559854507446 0.21605446934700012 -0.9958800077438354 0.09057893604040146 -0.0 0.4268689751625061 0.2505781054496765 0 1.0 0 0.0 0 0.0 0 0.0 0.4955441951751709 -0.07392413169145584 -0.2839455306529999 -0.9733573198318481 -0.2292550504207611 -0.0 0.9455769062042236 0.4841769337654114 0 1.0 0 0.0 0 0.0 0 0.0 0.49588465690612793 -0.07560490816831589 -0.2839455306529999 -0.9856258034706116 -0.16876736283302307 -0.0 0.9454684257507324 0.4822959899902344 0 1.0 0 0.0 0 0.0 0 0.0 0.49588465690612793 -0.07560490816831589 0.21605446934700012 -0.9856258034706116 -0.16876736283302307 -0.0 0.5341729521751404 0.32446593046188354 0 1.0 0 0.0 0 0.0 0 0.0 1.5495622158050537 -0.1555742621421814 -0.2839455306529999 0.6481521129608154 -0.7614978551864624 -0.0 0.9208014011383057 0.4063137173652649 0 1.0 0 0.0 0 0.0 0 0.0 1.556387186050415 -0.14934493601322174 -0.2839455306529999 0.6964018940925598 -0.7176427245140076 -0.0 0.9172113537788391 0.4122779965400696 0 1.0 0 0.0 0 0.0 0 0.0 1.556387186050415 -0.14934493601322174 0.21605446934700012 0.6964018940925598 -0.7176427245140076 -0.0 0.5774527788162231 0.2676782011985779 0 1.0 0 0.0 0 0.0 0 0.0 -0.349503755569458 -0.18663088977336884 -0.2839455306529999 0.28241828083992004 -0.9592882990837097 -0.0 0.9628244638442993 0.384929358959198 0 1.0 0 0.0 0 0.0 0 0.0 -0.339918851852417 -0.1834128499031067 -0.2839455306529999 0.35386210680007935 -0.9352702498435974 -0.0 0.957510232925415 0.3880120515823364 0 1.0 0 0.0 0 0.0 0 0.0 -0.339918851852417 -0.1834128499031067 0.21605445444583893 0.35386210680007935 -0.9352702498435974 -0.0 0.5241689682006836 0.2319294810295105 0 1.0 0 0.0 0 0.0 0 0.0 1.288883924484253 -0.15064138174057007 -0.2839455306529999 -0.6608172655105591 -0.7505111694335938 -0.0 0.05858275294303894 0.41700345277786255 0 1.0 0 0.0 0 0.0 0 0.0 1.2956302165985107 -0.15623830258846283 -0.2839455306529999 -0.616290807723999 -0.7874996066093445 -0.0 0.05520591139793396 0.4113277792930603 0 1.0 0 0.0 0 0.0 0 0.0 1.2956302165985107 -0.15623830258846283 0.21605446934700012 -0.616290807723999 -0.7874996066093445 -0.0 0.3947977125644684 0.26676273345947266 0 1.0 0 0.0 0 0.0 0 0.0 -0.43265223503112793 -0.18526874482631683 -0.2839455306529999 -0.32142093777656555 -0.9469283223152161 -0.0 0.008817553520202637 0.3878638744354248 0 1.0 0 0.0 0 0.0 0 0.0 -0.4274311065673828 -0.186928853392601 -0.2839455306529999 -0.2840968072414398 -0.9587695002555847 -0.0 0.005950242280960083 0.38608503341674805 0 1.0 0 0.0 0 0.0 0 0.0 -0.4274311065673828 -0.186928853392601 0.21605445444583893 -0.2840968072414398 -0.9587695002555847 -0.0 0.4553092122077942 0.22862982749938965 0 1.0 0 0.0 0 0.0 0 0.0 -1.3286374807357788 0.06358680129051208 -0.2839455306529999 0.99981689453125 0.01825006864964962 -0.0 0.9380841851234436 0.6826471090316772 0 1.0 0 0.0 0 0.0 0 0.0 -1.3289111852645874 0.07343429327011108 -0.2839455306529999 0.999237060546875 0.03839228302240372 -0.0 0.9375044107437134 0.6923645734786987 0 1.0 0 0.0 0 0.0 0 0.0 -1.3289111852645874 0.07343429327011108 0.21605446934700012 0.999237060546875 0.03839228302240372 -0.0 0.6178270578384399 0.526172935962677 0 1.0 0 0.0 0 0.0 0 0.0 0.49588465690612793 -0.07560490816831589 -0.2839455306529999 -0.9856258034706116 -0.16876736283302307 -0.0 0.9454684257507324 0.4822959899902344 0 1.0 0 0.0 0 0.0 0 0.0 0.4961278438568115 -0.07733919471502304 -0.2839455306529999 -0.9938963055610657 -0.11014129966497421 -0.0 0.945418119430542 0.4803643226623535 0 1.0 0 0.0 0 0.0 0 0.0 0.4961278438568115 -0.07733919471502304 0.21605446934700012 -0.9938963055610657 -0.11014129966497421 -0.0 0.534398078918457 0.32256996631622314 0 1.0 0 0.0 0 0.0 0 0.0 -1.4253160953521729 0.07320931553840637 -0.2839455306529999 -0.9990233778953552 -0.04370250552892685 -0.0 0.9973450899124146 0.7120200395584106 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 0.06859388947486877 -0.2839455306529999 -0.99993896484375 -0.010528885759413242 -0.0 0.9972931146621704 0.7069487571716309 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 0.06859388947486877 0.21605446934700012 -0.99993896484375 -0.010528885759413242 -0.0 0.5691002607345581 0.5166683197021484 0 1.0 0 0.0 0 0.0 0 0.0 2.1324756145477295 -0.0045891255140304565 -0.2839455306529999 0.9700918793678284 -0.24265266954898834 -0.0 0.9785953760147095 0.40384650230407715 0 1.0 0 0.0 0 0.0 0 0.0 2.1334450244903564 -0.0010986626148223877 -0.2839455306529999 0.9549241662025452 -0.29682302474975586 -0.0 0.9779797792434692 0.4070509076118469 0 1.0 0 0.0 0 0.0 0 0.0 2.1334450244903564 -0.0010986626148223877 0.21605446934700012 0.9549241662025452 -0.29682302474975586 -0.0 0.49759870767593384 0.24348896741867065 0 1.0 0 0.0 0 0.0 0 0.0 1.5421555042266846 -0.16144844889640808 -0.2839455306529999 0.5901364088058472 -0.8072755932807922 -0.0 0.9246799349784851 0.40065109729766846 0 1.0 0 0.0 0 0.0 0 0.0 1.5495622158050537 -0.1555742621421814 -0.2839455306529999 0.6481521129608154 -0.7614978551864624 -0.0 0.9208014011383057 0.4063137173652649 0 1.0 0 0.0 0 0.0 0 0.0 1.5495622158050537 -0.1555742621421814 0.21605446934700012 0.6481521129608154 -0.7614978551864624 -0.0 0.5740647315979004 0.2600557804107666 0 1.0 0 0.0 0 0.0 0 0.0 -0.359358549118042 -0.18913380801677704 -0.2839455306529999 0.21015045046806335 -0.9776604771614075 -0.0 0.968289852142334 0.38256824016571045 0 1.0 0 0.0 0 0.0 0 0.0 -0.349503755569458 -0.18663088977336884 -0.2839455306529999 0.28241828083992004 -0.9592882990837097 -0.0 0.9628244638442993 0.384929358959198 0 1.0 0 0.0 0 0.0 0 0.0 -0.349503755569458 -0.18663088977336884 0.21605445444583893 0.28241828083992004 -0.9592882990837097 -0.0 0.5169462561607361 0.2277390956878662 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 0.06859388947486877 -0.2839455306529999 -0.99993896484375 -0.010528885759413242 -0.0 0.9972931146621704 0.7069487571716309 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 0.05878652632236481 -0.2839455306529999 -1.0 0.0 -0.0 0.9973304867744446 0.6960070133209229 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 0.05878652632236481 0.21605446934700012 -1.0 0.0 -0.0 0.5698535442352295 0.5058304071426392 0 1.0 0 0.0 0 0.0 0 0.0 2.1316206455230713 -0.00842498242855072 -0.2839455306529999 0.9805902242660522 -0.19598986208438873 -0.0 0.9791495203971863 0.40036994218826294 0 1.0 0 0.0 0 0.0 0 0.0 2.1324756145477295 -0.0045891255140304565 -0.2839455306529999 0.9700918793678284 -0.24265266954898834 -0.0 0.9785953760147095 0.40384650230407715 0 1.0 0 0.0 0 0.0 0 0.0 2.1324756145477295 -0.0045891255140304565 0.21605446934700012 0.9700918793678284 -0.24265266954898834 -0.0 0.4968274235725403 0.24024468660354614 0 1.0 0 0.0 0 0.0 0 0.0 0.593909502029419 -0.0843055248260498 -0.2839455306529999 0.9894406199455261 -0.14481033384799957 -0.0 0.8969942331314087 0.47402477264404297 0 1.0 0 0.0 0 0.0 0 0.0 0.5947997570037842 -0.07608164846897125 -0.2839455306529999 0.9974364638328552 -0.0714438334107399 -0.0 0.8959649205207825 0.4819793105125427 0 1.0 0 0.0 0 0.0 0 0.0 0.5947997570037842 -0.07608164846897125 0.21605446934700012 0.9974364638328552 -0.0714438334107399 -0.0 0.589691162109375 0.3464645743370056 0 1.0 0 0.0 0 0.0 0 0.0 1.2956302165985107 -0.15623830258846283 -0.2839455306529999 -0.616290807723999 -0.7874996066093445 -0.0 0.05520591139793396 0.4113277792930603 0 1.0 0 0.0 0 0.0 0 0.0 1.302802324295044 -0.16152872145175934 -0.2839455306529999 -0.5687734484672546 -0.8224738240242004 -0.0 0.05160874128341675 0.40589576959609985 0 1.0 0 0.0 0 0.0 0 0.0 1.302802324295044 -0.16152872145175934 0.21605446934700012 -0.5687734484672546 -0.8224738240242004 -0.0 0.3982948064804077 0.2596473693847656 0 1.0 0 0.0 0 0.0 0 0.0 -0.4274311065673828 -0.186928853392601 -0.2839455306529999 -0.2840968072414398 -0.9587695002555847 -0.0 0.005950242280960083 0.38608503341674805 0 1.0 0 0.0 0 0.0 0 0.0 -0.4221978187561035 -0.18836760520935059 -0.2839455306529999 -0.2456129640340805 -0.9693593978881836 -0.0 0.0030720531940460205 0.38453078269958496 0 1.0 0 0.0 0 0.0 0 0.0 -0.4221978187561035 -0.18836760520935059 0.21605445444583893 -0.2456129640340805 -0.9693593978881836 -0.0 0.4592951536178589 0.22660183906555176 0 1.0 0 0.0 0 0.0 0 0.0 2.0401265621185303 -0.007325559854507446 -0.2839455306529999 -0.9958800077438354 0.09057893604040146 -0.0 0.029656797647476196 0.4064900279045105 0 1.0 0 0.0 0 0.0 0 0.0 2.03962779045105 -0.014029204845428467 -0.2839455306529999 -0.9982604384422302 0.05868709459900856 -0.0 0.029745280742645264 0.40065884590148926 0 1.0 0 0.0 0 0.0 0 0.0 2.03962779045105 -0.014029204845428467 0.21605446934700012 -0.9982604384422302 0.05868709459900856 -0.0 0.4259648323059082 0.244884192943573 0 1.0 0 0.0 0 0.0 0 0.0 0.3520534038543701 -0.08036507666110992 -0.2839455306529999 0.9149448871612549 0.4035462439060211 -0.0 0.030551671981811523 0.48065948486328125 0 1.0 0 0.0 0 0.0 0 0.0 0.3503725528717041 -0.07625070214271545 -0.2839455306529999 0.9353312849998474 0.35374003648757935 -0.0 0.031612515449523926 0.4852878451347351 0 1.0 0 0.0 0 0.0 0 0.0 0.3503725528717041 -0.07625070214271545 0.21605446934700012 0.9353312849998474 0.35374003648757935 -0.0 0.43314307928085327 0.3288540244102478 0 1.0 0 0.0 0 0.0 0 0.0 -0.4221978187561035 -0.18836760520935059 -0.2839455306529999 -0.2456129640340805 -0.9693593978881836 -0.0 0.0030720531940460205 0.38453078269958496 0 1.0 0 0.0 0 0.0 0 0.0 -0.41695237159729004 -0.18958501517772675 -0.2839455306529999 -0.2061220109462738 -0.9785149693489075 -0.0 0.0001831650733947754 0.38320016860961914 0 1.0 0 0.0 0 0.0 0 0.0 -0.41695237159729004 -0.18958501517772675 0.21605445444583893 -0.2061525285243988 -0.9785149693489075 -0.0 0.46334928274154663 0.22486257553100586 0 1.0 0 0.0 0 0.0 0 0.0 -1.3285462856292725 0.053182318806648254 -0.2839455306529999 1.0 -0.0001831110566854477 -0.0 0.9387819170951843 0.6722474098205566 0 1.0 0 0.0 0 0.0 0 0.0 -1.3286374807357788 0.06358680129051208 -0.2839455306529999 0.99981689453125 0.01825006864964962 -0.0 0.9380841851234436 0.6826471090316772 0 1.0 0 0.0 0 0.0 0 0.0 -1.3286374807357788 0.06358680129051208 0.21605446934700012 0.99981689453125 0.01825006864964962 -0.0 0.6190141439437866 0.5166995525360107 0 1.0 0 0.0 0 0.0 0 0.0 0.4961278438568115 -0.07733919471502304 -0.2839455306529999 -0.9938963055610657 -0.11014129966497421 -0.0 0.945418119430542 0.4803643226623535 0 1.0 0 0.0 0 0.0 0 0.0 0.4962737560272217 -0.0791269913315773 -0.2839455306529999 -0.9985350966453552 -0.05386516824364662 -0.0 0.9454255104064941 0.4783821105957031 0 1.0 0 0.0 0 0.0 0 0.0 0.4962737560272217 -0.0791269913315773 0.21605446934700012 -0.9985350966453552 -0.05386516824364662 -0.0 0.5345618724822998 0.3206072449684143 0 1.0 0 0.0 0 0.0 0 0.0 1.534179925918579 -0.16681185364723206 -0.2839455306529999 0.5262916684150696 -0.8502761721611023 -0.0 0.9288433790206909 0.39542311429977417 0 1.0 0 0.0 0 0.0 0 0.0 1.5421555042266846 -0.16144844889640808 -0.2839455306529999 0.5901364088058472 -0.8072755932807922 -0.0 0.9246799349784851 0.40065109729766846 0 1.0 0 0.0 0 0.0 0 0.0 1.5421555042266846 -0.16144844889640808 0.21605446934700012 0.5901364088058472 -0.8072755932807922 -0.0 0.5701556205749512 0.25263315439224243 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 0.05878652632236481 -0.2839455306529999 -0.36930447816848755 0.9292886257171631 -0.0 0.9973304867744446 0.6960070133209229 0 1.0 0 0.0 0 0.0 0 0.0 -1.4299498796463013 0.056906312704086304 -0.2839455306529999 -0.35322123765945435 0.9355143904685974 -0.0 1.0006707906723022 0.6942631006240845 0 1.0 0 0.0 0 0.0 0 0.0 -1.4299498796463013 0.056906312704086304 0.21605446934700012 -0.35322123765945435 0.9355143904685974 -0.0 0.5672665238380432 0.5033541917800903 0 1.0 0 0.0 0 0.0 0 0.0 2.130880117416382 -0.012606248259544373 -0.2839455306529999 0.9877620935440063 -0.15576647222042084 -0.0 0.9796422719955444 0.39663392305374146 0 1.0 0 0.0 0 0.0 0 0.0 2.1316206455230713 -0.00842498242855072 -0.2839455306529999 0.9805902242660522 -0.19598986208438873 -0.0 0.9791495203971863 0.40036994218826294 0 1.0 0 0.0 0 0.0 0 0.0 2.1316206455230713 -0.00842498242855072 0.21605446934700012 0.9805902242660522 -0.19598986208438873 -0.0 0.49613747000694275 0.23673486709594727 0 1.0 0 0.0 0 0.0 0 0.0 1.302802324295044 -0.16152872145175934 -0.2839455306529999 -0.5687734484672546 -0.8224738240242004 -0.0 0.05160874128341675 0.40589576959609985 0 1.0 0 0.0 0 0.0 0 0.0 1.3104074001312256 -0.1664518564939499 -0.2839455306529999 -0.5158543586730957 -0.8566545844078064 -0.0 0.047781914472579956 0.40075987577438354 0 1.0 0 0.0 0 0.0 0 0.0 1.3104074001312256 -0.1664518564939499 0.21605446934700012 -0.5158543586730957 -0.8566545844078064 -0.0 0.40223488211631775 0.2527579665184021 0 1.0 0 0.0 0 0.0 0 0.0 0.2476358413696289 -0.0778159350156784 -0.2839455306529999 -0.9610888957977295 -0.2762230336666107 -0.0 0.08192101120948792 0.4880308508872986 0 1.0 0 0.0 0 0.0 0 0.0 0.2501254081726074 -0.08647764474153519 -0.2839455306529999 -0.9530014991760254 -0.3029267191886902 -0.0 0.08034408092498779 0.4796344041824341 0 1.0 0 0.0 0 0.0 0 0.0 0.2501254081726074 -0.08647764474153519 0.21605446934700012 -0.9530014991760254 -0.3029267191886902 -0.0 0.3781566917896271 0.346591055393219 0 1.0 0 0.0 0 0.0 0 0.0 -0.36948323249816895 -0.1909216046333313 -0.2839455306529999 0.13834039866924286 -0.9903561472892761 -0.0 0.9739063382148743 0.38093429803848267 0 1.0 0 0.0 0 0.0 0 0.0 -0.359358549118042 -0.18913380801677704 -0.2839455306529999 0.21015045046806335 -0.9776604771614075 -0.0 0.968289852142334 0.38256824016571045 0 1.0 0 0.0 0 0.0 0 0.0 -0.359358549118042 -0.18913380801677704 0.21605445444583893 0.21015045046806335 -0.9776604771614075 -0.0 0.5093119740486145 0.224467933177948 0 1.0 0 0.0 0 0.0 0 0.0 -1.4299498796463013 0.056906312704086304 -0.2839455306529999 -0.35322123765945435 0.9355143904685974 -0.0 1.0006707906723022 0.6942631006240845 0 1.0 0 0.0 0 0.0 0 0.0 -1.4352694749832153 0.05500175058841705 -0.2839455306529999 -0.3237403631210327 0.9461348056793213 -0.0 1.0044422149658203 0.692439079284668 0 1.0 0 0.0 0 0.0 0 0.0 -1.4352694749832153 0.05500175058841705 0.21605446934700012 -0.3237403631210327 0.9461348056793213 -0.0 0.5643073916435242 0.5007731914520264 0 1.0 0 0.0 0 0.0 0 0.0 2.130253553390503 -0.01713290810585022 -0.2839455306529999 0.9926450252532959 -0.12082277983427048 -0.0 0.9800739884376526 0.3926522135734558 0 1.0 0 0.0 0 0.0 0 0.0 2.130880117416382 -0.012606248259544373 -0.2839455306529999 0.9877620935440063 -0.15576647222042084 -0.0 0.9796422719955444 0.39663392305374146 0 1.0 0 0.0 0 0.0 0 0.0 2.130880117416382 -0.012606248259544373 0.21605446934700012 0.9877620935440063 -0.15576647222042084 -0.0 0.4955292344093323 0.23297131061553955 0 1.0 0 0.0 0 0.0 0 0.0 1.3104074001312256 -0.1664518564939499 -0.2839455306529999 -0.5158543586730957 -0.8566545844078064 -0.0 0.047781914472579956 0.40075987577438354 0 1.0 0 0.0 0 0.0 0 0.0 1.3184521198272705 -0.1709468960762024 -0.2839455306529999 -0.4602191150188446 -0.8877834677696228 -0.0 0.04371529817581177 0.3959727883338928 0 1.0 0 0.0 0 0.0 0 0.0 1.3184521198272705 -0.1709468960762024 0.21605445444583893 -0.4602191150188446 -0.8877834677696228 -0.0 0.40666019916534424 0.24616098403930664 0 1.0 0 0.0 0 0.0 0 0.0 -0.41695237159729004 -0.18958501517772675 -0.2839455306529999 -0.2061220109462738 -0.9785149693489075 -0.0 1.00018310546875 0.38320016860961914 0 1.0 0 0.0 0 0.0 0 0.0 -0.4116947650909424 -0.1905810683965683 -0.2839455306529999 -0.1658070683479309 -0.9861446022987366 -0.0 0.9972836971282959 0.3820924758911133 0 1.0 0 0.0 0 0.0 0 0.0 -0.4116947650909424 -0.1905810683965683 0.21605445444583893 -0.1658070683479309 -0.9861446022987366 -0.0 1.4674643278121948 0.22341382503509521 0 1.0 0 0.0 0 0.0 0 0.0 2.03962779045105 -0.014029204845428467 -0.2839455306529999 -0.9982604384422302 0.05868709459900856 -0.0 0.029745280742645264 0.40065884590148926 0 1.0 0 0.0 0 0.0 0 0.0 2.0393288135528564 -0.020946890115737915 -0.2839455306529999 -0.99957275390625 0.02856532484292984 -0.0 0.029723763465881348 0.39476317167282104 0 1.0 0 0.0 0 0.0 0 0.0 2.0393288135528564 -0.020946890115737915 0.21605446934700012 -0.99957275390625 0.02856532484292984 -0.0 0.42516839504241943 0.23909145593643188 0 1.0 0 0.0 0 0.0 0 0.0 0.4962737560272217 -0.0791269913315773 -0.2839455306529999 -0.9985350966453552 -0.05386516824364662 -0.0 0.9454255104064941 0.4783821105957031 0 1.0 0 0.0 0 0.0 0 0.0 0.4963223934173584 -0.08096829801797867 -0.2839455306529999 -0.999969482421875 0.00357066560536623 -0.0 0.9454903602600098 0.4763496518135071 0 1.0 0 0.0 0 0.0 0 0.0 0.4963223934173584 -0.08096829801797867 0.21605446934700012 -0.999969482421875 0.00357066560536623 -0.0 0.5346640348434448 0.31857800483703613 0 1.0 0 0.0 0 0.0 0 0.0 -1.4352694749832153 0.05500175058841705 -0.2839455306529999 -0.3237403631210327 0.9461348056793213 -0.0 1.0044422149658203 0.692439079284668 0 1.0 0 0.0 0 0.0 0 0.0 -1.4411777257919312 0.05307286977767944 -0.2839455306529999 -0.29914242029190063 0.9541917443275452 -0.0 1.0086486339569092 0.6905044317245483 0 1.0 0 0.0 0 0.0 0 0.0 -1.4411777257919312 0.05307286977767944 0.21605446934700012 -0.29914242029190063 0.9541917443275452 -0.0 0.5609673261642456 0.49808448553085327 0 1.0 0 0.0 0 0.0 0 0.0 -0.4116947650909424 -0.1905810683965683 -0.2839455306529999 -0.1658070683479309 -0.9861446022987366 -0.0 0.9972836971282959 0.3820924758911133 0 1.0 0 0.0 0 0.0 0 0.0 -0.40642499923706055 -0.19135577976703644 -0.2839455306529999 -0.12482070177793503 -0.9921567440032959 -0.0 0.9943739771842957 0.3812071681022644 0 1.0 0 0.0 0 0.0 0 0.0 -0.40642499923706055 -0.19135577976703644 0.21605445444583893 -0.12482070177793503 -0.9921567440032959 -0.0 1.471632480621338 0.2222573161125183 0 1.0 0 0.0 0 0.0 0 0.0 1.525635004043579 -0.17166444659233093 -0.2839455306529999 0.4622333347797394 -0.886745810508728 -0.0 0.9333043694496155 0.3906322121620178 0 1.0 0 0.0 0 0.0 0 0.0 1.534179925918579 -0.16681185364723206 -0.2839455306529999 0.5262916684150696 -0.8502761721611023 -0.0 0.9288433790206909 0.39542311429977417 0 1.0 0 0.0 0 0.0 0 0.0 1.534179925918579 -0.16681185364723206 0.21605446934700012 0.5262916684150696 -0.8502761721611023 -0.0 0.5656803846359253 0.2455642819404602 0 1.0 0 0.0 0 0.0 0 0.0 2.1297414302825928 -0.02200496196746826 -0.2839455306529999 0.9959105253219604 -0.09027375280857086 -0.0 0.9804447889328003 0.3884395360946655 0 1.0 0 0.0 0 0.0 0 0.0 2.130253553390503 -0.01713290810585022 -0.2839455306529999 0.9926450252532959 -0.12082277983427048 -0.0 0.9800739884376526 0.3926522135734558 0 1.0 0 0.0 0 0.0 0 0.0 2.130253553390503 -0.01713290810585022 0.21605446934700012 0.9926450252532959 -0.12082277983427048 -0.0 0.49500298500061035 0.22896718978881836 0 1.0 0 0.0 0 0.0 0 0.0 0.3539142608642578 -0.08428728580474854 -0.2839455306529999 0.8907132148742676 0.4544816315174103 -0.0 0.02939966320991516 0.47626161575317383 0 1.0 0 0.0 0 0.0 0 0.0 0.3520534038543701 -0.08036507666110992 -0.2839455306529999 0.9149448871612549 0.4035462439060211 -0.0 0.030551671981811523 0.48065948486328125 0 1.0 0 0.0 0 0.0 0 0.0 0.3520534038543701 -0.08036507666110992 0.21605446934700012 0.9149448871612549 0.4035462439060211 -0.0 0.43393248319625854 0.3239459991455078 0 1.0 0 0.0 0 0.0 0 0.0 1.3184521198272705 -0.1709468960762024 -0.2839455306529999 -0.4602191150188446 -0.8877834677696228 -0.0 0.04371529817581177 0.3959727883338928 0 1.0 0 0.0 0 0.0 0 0.0 1.3269374370574951 -0.17501384019851685 -0.2839455306529999 -0.4050111472606659 -0.9142735004425049 -0.0 0.03939896821975708 0.3915392756462097 0 1.0 0 0.0 0 0.0 0 0.0 1.3269374370574951 -0.17501384019851685 0.21605445444583893 -0.4050111472606659 -0.9142735004425049 -0.0 0.41160446405410767 0.23988109827041626 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 -0.2839455306529999 0.999969482421875 -0.0025025177747011185 -0.0 0.9464728236198425 0.5510927438735962 0 1.0 0 0.0 0 0.0 0 0.0 -1.3285462856292725 0.053182318806648254 -0.2839455306529999 1.0 -0.0001831110566854477 -0.0 0.9387819170951843 0.6722474098205566 0 1.0 0 0.0 0 0.0 0 0.0 -1.3285462856292725 0.053182318806648254 0.21605446934700012 0.999969482421875 -0.0001831110566854477 -0.0 0.6201977729797363 0.5065033435821533 0 1.0 0 0.0 0 0.0 0 0.0 2.0393288135528564 -0.020946890115737915 -0.2839455306529999 -0.99957275390625 0.02856532484292984 -0.0 0.029723763465881348 0.39476317167282104 0 1.0 0 0.0 0 0.0 0 0.0 2.039229154586792 -0.028078630566596985 -0.2839455306529999 -0.999969482421875 0.005493331700563431 -0.0 0.029594451189041138 0.38881319761276245 0 1.0 0 0.0 0 0.0 0 0.0 2.039229154586792 -0.028078630566596985 0.21605446934700012 -0.999969482421875 0.005493331700563431 -0.0 0.4244801998138428 0.23320960998535156 0 1.0 0 0.0 0 0.0 0 0.0 0.4963223934173584 -0.08096829801797867 -0.2839455306529999 -0.999969482421875 0.00357066560536623 -0.0 0.9454903602600098 0.4763496518135071 0 1.0 0 0.0 0 0.0 0 0.0 0.4962317943572998 -0.08366581052541733 -0.2839455306529999 -0.9976500868797302 0.06833094358444214 -0.0 0.9456760883331299 0.4733878970146179 0 1.0 0 0.0 0 0.0 0 0.0 0.4962317943572998 -0.08366581052541733 0.21605446934700012 -0.9976500868797302 0.06833094358444214 -0.0 0.534707248210907 0.3155941367149353 0 1.0 0 0.0 0 0.0 0 0.0 -0.37987804412841797 -0.19199427962303162 -0.2839455306529999 0.06811731308698654 -0.9976500868797302 -0.0 0.9796726107597351 0.38003551959991455 0 1.0 0 0.0 0 0.0 0 0.0 -0.36948323249816895 -0.1909216046333313 -0.2839455306529999 0.13834039866924286 -0.9903561472892761 -0.0 0.9739063382148743 0.38093429803848267 0 1.0 0 0.0 0 0.0 0 0.0 -0.36948323249816895 -0.1909216046333313 0.21605445444583893 0.13834039866924286 -0.9903561472892761 -0.0 0.5013026595115662 0.22215431928634644 0 1.0 0 0.0 0 0.0 0 0.0 -1.4411777257919312 0.05307286977767944 -0.2839455306529999 -0.29914242029190063 0.9541917443275452 -0.0 1.0086486339569092 0.6905044317245483 0 1.0 0 0.0 0 0.0 0 0.0 -1.4476746320724487 0.051119670271873474 -0.2839455306529999 -0.2783593237400055 0.9604480266571045 -0.0 1.0132920742034912 0.6884256601333618 0 1.0 0 0.0 0 0.0 0 0.0 -1.4476746320724487 0.051119670271873474 0.21605446934700012 -0.2783593237400055 0.9604480266571045 -0.0 0.5572380423545837 0.495286762714386 0 1.0 0 0.0 0 0.0 0 0.0 -0.40642499923706055 -0.19135577976703644 -0.2839455306529999 -0.12482070177793503 -0.9921567440032959 -0.0 0.9943739771842957 0.3812071681022644 0 1.0 0 0.0 0 0.0 0 0.0 -0.40114307403564453 -0.19190914928913116 -0.2839455306529999 -0.08340708911418915 -0.9964903593063354 -0.0 0.9914541840553284 0.38054370880126953 0 1.0 0 0.0 0 0.0 0 0.0 -0.40114307403564453 -0.19190914928913116 0.21605445444583893 -0.08340708911418915 -0.9964903593063354 -0.0 1.4758449792861938 0.2213945984840393 0 1.0 0 0.0 0 0.0 0 0.0 0.4962317943572998 -0.08366581052541733 -0.2839455306529999 -0.9976500868797302 0.06833094358444214 -0.0 0.9456760883331299 0.4733878970146179 0 1.0 0 0.0 0 0.0 0 0.0 0.49596190452575684 -0.08627089112997055 -0.2839455306529999 -0.9901730418205261 0.13974425196647644 -0.0 0.9459569454193115 0.47054433822631836 0 1.0 0 0.0 0 0.0 0 0.0 0.49596190452575684 -0.08627089112997055 0.21605446934700012 -0.9901730418205261 0.13974425196647644 -0.0 0.5346280336380005 0.31269896030426025 0 1.0 0 0.0 0 0.0 0 0.0 1.5165207386016846 -0.1760062575340271 -0.2839455306529999 0.39918211102485657 -0.9168370366096497 -0.0 0.9380753040313721 0.3862854242324829 0 1.0 0 0.0 0 0.0 0 0.0 1.525635004043579 -0.17166444659233093 -0.2839455306529999 0.4622333347797394 -0.886745810508728 -0.0 0.9333043694496155 0.3906322121620178 0 1.0 0 0.0 0 0.0 0 0.0 1.525635004043579 -0.17166444659233093 0.21605445444583893 0.4622333347797394 -0.886745810508728 -0.0 0.5605970621109009 0.238874614238739 0 1.0 0 0.0 0 0.0 0 0.0 -1.4476746320724487 0.051119670271873474 -0.2839455306529999 -0.2783593237400055 0.9604480266571045 -0.0 1.0132920742034912 0.6884256601333618 0 1.0 0 0.0 0 0.0 0 0.0 -1.4547600746154785 0.04914213716983795 -0.2839455306529999 -0.2605975568294525 0.965422511100769 -0.0 1.0183712244033813 0.6861664056777954 0 1.0 0 0.0 0 0.0 0 0.0 -1.4547600746154785 0.04914213716983795 0.21605446934700012 -0.2605975568294525 0.965422511100769 -0.0 0.5531123876571655 0.4923807382583618 0 1.0 0 0.0 0 0.0 0 0.0 2.1293437480926514 -0.027222424745559692 -0.2839455306529999 0.9979857802391052 -0.0634174644947052 -0.0 0.980755090713501 0.38401156663894653 0 1.0 0 0.0 0 0.0 0 0.0 2.1297414302825928 -0.02200496196746826 -0.2839455306529999 0.9959105253219604 -0.09027375280857086 -0.0 0.9804447889328003 0.3884395360946655 0 1.0 0 0.0 0 0.0 0 0.0 2.1297414302825928 -0.02200496196746826 0.21605446934700012 0.9959105253219604 -0.09027375280857086 -0.0 0.4945599436759949 0.22473657131195068 0 1.0 0 0.0 0 0.0 0 0.0 1.3269374370574951 -0.17501384019851685 -0.2839455306529999 -0.4050111472606659 -0.9142735004425049 -0.0 0.03939896821975708 0.3915392756462097 0 1.0 0 0.0 0 0.0 0 0.0 1.3358633518218994 -0.17865267395973206 -0.2839455306529999 -0.3510238826274872 -0.9363383650779724 -0.0 0.0348239541053772 0.38746732473373413 0 1.0 0 0.0 0 0.0 0 0.0 1.3358633518218994 -0.17865267395973206 0.21605445444583893 -0.3510238826274872 -0.9363383650779724 -0.0 0.41710081696510315 0.2339511513710022 0 1.0 0 0.0 0 0.0 0 0.0 -0.40114307403564453 -0.19190914928913116 -0.2839455306529999 -0.08340708911418915 -0.9964903593063354 -0.0 0.9914541840553284 0.38054370880126953 0 1.0 0 0.0 0 0.0 0 0.0 -0.39584898948669434 -0.19224116206169128 -0.2839455306529999 -0.041718803346157074 -0.999114990234375 -0.0 0.9885245561599731 0.38010191917419434 0 1.0 0 0.0 0 0.0 0 0.0 -0.39584898948669434 -0.19224116206169128 0.21605445444583893 -0.041718803346157074 -0.999114990234375 -0.0 1.480093002319336 0.2208271622657776 0 1.0 0 0.0 0 0.0 0 0.0 -1.4547600746154785 0.04914213716983795 -0.2839455306529999 -0.2605975568294525 0.965422511100769 -0.0 1.0183712244033813 0.6861664056777954 0 1.0 0 0.0 0 0.0 0 0.0 -1.46243417263031 0.04714028537273407 -0.2839455306529999 -0.2452772557735443 0.9694204330444336 -0.0 1.0238808393478394 0.6836882829666138 0 1.0 0 0.0 0 0.0 0 0.0 -1.46243417263031 0.04714028537273407 0.21605446934700012 -0.2452772557735443 0.9694204330444336 -0.0 0.5485851168632507 0.48936909437179565 0 1.0 0 0.0 0 0.0 0 0.0 2.1290605068206787 -0.03278528153896332 -0.2839455306529999 0.99920654296875 -0.0397351011633873 -0.0 0.9810053706169128 0.37938469648361206 0 1.0 0 0.0 0 0.0 0 0.0 2.1293437480926514 -0.027222424745559692 -0.2839455306529999 0.9979857802391052 -0.0634174644947052 -0.0 0.980755090713501 0.38401156663894653 0 1.0 0 0.0 0 0.0 0 0.0 2.1293437480926514 -0.027222424745559692 0.21605446934700012 0.9979857802391052 -0.0634174644947052 -0.0 0.4942011833190918 0.2202945351600647 0 1.0 0 0.0 0 0.0 0 0.0 0.3559551239013672 -0.08801734447479248 -0.2839455306529999 0.8624836206436157 0.5060274004936218 -0.0 0.028155982494354248 0.4720897078514099 0 1.0 0 0.0 0 0.0 0 0.0 0.3539142608642578 -0.08428728580474854 -0.2839455306529999 0.8907132148742676 0.4544816315174103 -0.0 0.02939966320991516 0.47626161575317383 0 1.0 0 0.0 0 0.0 0 0.0 0.3539142608642578 -0.08428728580474854 0.21605446934700012 0.8907132148742676 0.4544816315174103 -0.0 0.4348626732826233 0.3192404508590698 0 1.0 0 0.0 0 0.0 0 0.0 -0.39584898948669434 -0.19224116206169128 -0.2839455306529999 -0.041718803346157074 -0.999114990234375 -0.0 0.9885245561599731 0.38010191917419434 0 1.0 0 0.0 0 0.0 0 0.0 -0.39054274559020996 -0.19235184788703918 -0.2839455306529999 0.006317331455647945 -0.999969482421875 -0.0 0.9855853915214539 0.37988173961639404 0 1.0 0 0.0 0 0.0 0 0.0 -0.39054274559020996 -0.19235184788703918 0.21605445444583893 0.006317331455647945 -0.999969482421875 -0.0 1.4843671321868896 0.22055619955062866 0 1.0 0 0.0 0 0.0 0 0.0 2.039229154586792 -0.028078630566596985 -0.2839455306529999 -0.999969482421875 0.005493331700563431 -0.0 0.029594451189041138 0.38881319761276245 0 1.0 0 0.0 0 0.0 0 0.0 2.039231538772583 -0.028883740305900574 -0.2839455306529999 -0.999969482421875 -0.005005035549402237 -0.0 0.02957293391227722 0.3881494998931885 0 1.0 0 0.0 0 0.0 0 0.0 2.039231538772583 -0.028883740305900574 0.21605446934700012 -0.999969482421875 -0.005005035549402237 -0.0 0.4244113266468048 0.23255091905593872 0 1.0 0 0.0 0 0.0 0 0.0 1.5068376064300537 -0.17983725666999817 -0.2839455306529999 0.33814507722854614 -0.9410687685012817 -0.0 0.9431672096252441 0.38239455223083496 0 1.0 0 0.0 0 0.0 0 0.0 1.5165207386016846 -0.1760062575340271 -0.2839455306529999 0.39918211102485657 -0.9168370366096497 -0.0 0.9380753040313721 0.3862854242324829 0 1.0 0 0.0 0 0.0 0 0.0 1.5165207386016846 -0.1760062575340271 0.21605445444583893 0.39918211102485657 -0.9168370366096497 -0.0 0.554863452911377 0.23260116577148438 0 1.0 0 0.0 0 0.0 0 0.0 -0.39054274559020996 -0.19235184788703918 -0.2839455306529999 0.006317331455647945 -0.999969482421875 -0.0 0.9855853915214539 0.37988173961639404 0 1.0 0 0.0 0 0.0 0 0.0 -0.37987804412841797 -0.19199427962303162 -0.2839455306529999 0.06811731308698654 -0.9976500868797302 -0.0 0.9796726107597351 0.38003551959991455 0 1.0 0 0.0 0 0.0 0 0.0 -0.37987804412841797 -0.19199427962303162 0.21605445444583893 0.06811731308698654 -0.9976500868797302 -0.0 0.49296727776527405 0.22083759307861328 0 1.0 0 0.0 0 0.0 0 0.0 -1.46243417263031 0.04714028537273407 -0.2839455306529999 -0.2452772557735443 0.9694204330444336 -0.0 1.0238808393478394 0.6836882829666138 0 1.0 0 0.0 0 0.0 0 0.0 -1.470697045326233 0.04511411488056183 -0.2839455306529999 -0.23191015422344208 0.9727164506912231 -0.0 1.029810905456543 0.6809518337249756 0 1.0 0 0.0 0 0.0 0 0.0 -1.470697045326233 0.04511411488056183 0.21605446934700012 -0.23191015422344208 0.9727164506912231 -0.0 0.5436533093452454 0.4862578511238098 0 1.0 0 0.0 0 0.0 0 0.0 0.5924258232116699 -0.0923299491405487 -0.2839455306529999 0.9756157398223877 -0.21933652460575104 -0.0 0.8982551097869873 0.46633195877075195 0 1.0 0 0.0 0 0.0 0 0.0 0.593909502029419 -0.0843055248260498 -0.2839455306529999 0.9894406199455261 -0.14481033384799957 -0.0 0.8969942331314087 0.47402477264404297 0 1.0 0 0.0 0 0.0 0 0.0 0.593909502029419 -0.0843055248260498 0.21605446934700012 0.9894406199455261 -0.14481033384799957 -0.0 0.5899292230606079 0.3382599353790283 0 1.0 0 0.0 0 0.0 0 0.0 1.3358633518218994 -0.17865267395973206 -0.2839455306529999 -0.3510238826274872 -0.9363383650779724 -0.0 0.0348239541053772 0.38746732473373413 0 1.0 0 0.0 0 0.0 0 0.0 1.345228910446167 -0.18186341226100922 -0.2839455306529999 -0.29874569177627563 -0.9543138146400452 -0.0 0.02998247742652893 0.3837679624557495 0 1.0 0 0.0 0 0.0 0 0.0 1.345228910446167 -0.18186341226100922 0.21605445444583893 -0.29874569177627563 -0.9543138146400452 -0.0 0.4231798052787781 0.22841310501098633 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.32953959703445435 -0.2839455306529999 -1.0 0.0 -0.0 0.9500210285186768 0.8827873468399048 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 -0.2839455306529999 -1.0 0.0 -0.0 0.9632974863052368 0.7633605003356934 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 0.21605446934700012 -1.0 0.0 -0.0 0.5881415009498596 0.5820229053497314 0 1.0 0 0.0 0 0.0 0 0.0 2.039231538772583 -0.028883740305900574 -0.2839455306529999 -0.999969482421875 -0.005005035549402237 -0.0 0.02957293391227722 0.3881494998931885 0 1.0 0 0.0 0 0.0 0 0.0 2.039238691329956 -0.02989804744720459 -0.2839455306529999 -0.99993896484375 -0.008575701154768467 -0.0 0.029543757438659668 0.387315571308136 0 1.0 0 0.0 0 0.0 0 0.0 2.039238691329956 -0.02989804744720459 0.21605446934700012 -0.99993896484375 -0.008575701154768467 -0.0 0.4243272542953491 0.23172283172607422 0 1.0 0 0.0 0 0.0 0 0.0 0.49596190452575684 -0.08627089112997055 -0.2839455306529999 -0.9901730418205261 0.13974425196647644 -0.0 0.9459569454193115 0.47054433822631836 0 1.0 0 0.0 0 0.0 0 0.0 0.4955120086669922 -0.08878353983163834 -0.2839455306529999 -0.9767754077911377 0.2142094224691391 -0.0 0.9463331699371338 0.46781617403030396 0 1.0 0 0.0 0 0.0 0 0.0 0.4955120086669922 -0.08878353983163834 0.21605446934700012 -0.9767754077911377 0.2142094224691391 -0.0 0.5344247221946716 0.30989009141921997 0 1.0 0 0.0 0 0.0 0 0.0 -1.470697045326233 0.04511411488056183 -0.2839455306529999 -0.23191015422344208 0.9727164506912231 -0.0 1.029810905456543 0.6809518337249756 0 1.0 0 0.0 0 0.0 0 0.0 -1.479548454284668 0.043063610792160034 -0.2839455306529999 -0.22016052901744843 0.9754325747489929 -0.0 1.0361446142196655 0.6779175996780396 0 1.0 0 0.0 0 0.0 0 0.0 -1.479548454284668 0.043063610792160034 0.21605446934700012 -0.22016052901744843 0.9754325747489929 -0.0 0.5383179187774658 0.4830561876296997 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 0.32953959703445435 -0.2839455306529999 0.0 1.0 -0.0 0.8878573775291443 0.842465877532959 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.32953959703445435 -0.2839455306529999 0.0 1.0 -0.0 0.9500210285186768 0.8827873468399048 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.32953959703445435 0.21605446934700012 0.0 1.0 -0.0 0.5745580792427063 0.6996983289718628 0 1.0 0 0.0 0 0.0 0 0.0 2.039238691329956 -0.02989804744720459 -0.2839455306529999 -0.99993896484375 -0.008575701154768467 -0.0 0.029543757438659668 0.387315571308136 0 1.0 0 0.0 0 0.0 0 0.0 2.0392510890960693 -0.03112153708934784 -0.2839455306529999 -0.999908447265625 -0.01104770042002201 -0.0 0.029506683349609375 0.386313259601593 0 1.0 0 0.0 0 0.0 0 0.0 2.0392510890960693 -0.03112153708934784 0.21605446934700012 -0.99993896484375 -0.01104770042002201 -0.0 0.4242281913757324 0.2307267189025879 0 1.0 0 0.0 0 0.0 0 0.0 0.2501254081726074 -0.08647764474153519 -0.2839455306529999 -0.9530014991760254 -0.3029267191886902 -0.0 0.08034408092498779 0.4796344041824341 0 1.0 0 0.0 0 0.0 0 0.0 0.2530405521392822 -0.09483286738395691 -0.2839455306529999 -0.9342631101608276 -0.3565477430820465 -0.0 0.0786128044128418 0.4715557098388672 0 1.0 0 0.0 0 0.0 0 0.0 0.2530405521392822 -0.09483286738395691 0.21605446934700012 -0.9342631101608276 -0.3565477430820465 -0.0 0.3786012530326843 0.3378404974937439 0 1.0 0 0.0 0 0.0 0 0.0 1.4965851306915283 -0.18315744400024414 -0.2839455306529999 0.2797936797142029 -0.9600512981414795 -0.0 0.9485904574394226 0.37897586822509766 0 1.0 0 0.0 0 0.0 0 0.0 1.5068376064300537 -0.17983725666999817 -0.2839455306529999 0.33814507722854614 -0.9410687685012817 -0.0 0.9431672096252441 0.38239455223083496 0 1.0 0 0.0 0 0.0 0 0.0 1.5068376064300537 -0.17983725666999817 0.21605445444583893 0.33814507722854614 -0.9410687685012817 -0.0 0.5484396815299988 0.22679340839385986 0 1.0 0 0.0 0 0.0 0 0.0 -1.479548454284668 0.043063610792160034 -0.2839455306529999 -0.22016052901744843 0.9754325747489929 -0.0 1.0361446142196655 0.6779175996780396 0 1.0 0 0.0 0 0.0 0 0.0 -1.4889885187149048 0.04098878800868988 -0.2839455306529999 -0.20975372195243835 0.9777215123176575 -0.0 0.042858511209487915 0.6745481491088867 0 1.0 0 0.0 0 0.0 0 0.0 -1.4889885187149048 0.04098878800868988 0.21605446934700012 -0.20975372195243835 0.9777215123176575 -0.0 0.5325842499732971 0.47977715730667114 0 1.0 0 0.0 0 0.0 0 0.0 1.345228910446167 -0.18186341226100922 -0.2839455306529999 -0.29874569177627563 -0.9543138146400452 -0.0 0.02998247742652893 0.3837679624557495 0 1.0 0 0.0 0 0.0 0 0.0 1.3550350666046143 -0.18464605510234833 -0.2839455306529999 -0.24854274094104767 -0.9685964584350586 -0.0 0.02486705780029297 0.3804551362991333 0 1.0 0 0.0 0 0.0 0 0.0 1.3550350666046143 -0.18464605510234833 0.21605445444583893 -0.24854274094104767 -0.9685964584350586 -0.0 0.4298694431781769 0.2233176827430725 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 -0.18394553661346436 -0.2839455306529999 1.0 0.0 -0.0 0.934088408946991 0.4341752529144287 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 0.32953959703445435 -0.2839455306529999 1.0 0.0 -0.0 0.8878573775291443 0.842465877532959 0 1.0 0 0.0 0 0.0 0 0.0 -0.8903676271438599 0.32953959703445435 0.21605446934700012 1.0 0.0 -0.0 0.6138039231300354 0.688823938369751 0 1.0 0 0.0 0 0.0 0 0.0 2.0392510890960693 -0.03112153708934784 -0.2839455306529999 -0.999908447265625 -0.01104770042002201 -0.0 0.029506683349609375 0.386313259601593 0 1.0 0 0.0 0 0.0 0 0.0 2.0392682552337646 -0.03255420923233032 -0.2839455306529999 -0.999908447265625 -0.012665181420743465 -0.0 0.029461979866027832 0.3851448893547058 0 1.0 0 0.0 0 0.0 0 0.0 2.0392682552337646 -0.03255420923233032 0.21605446934700012 -0.999908447265625 -0.012665181420743465 -0.0 0.4241137206554413 0.22956520318984985 0 1.0 0 0.0 0 0.0 0 0.0 -1.0966724157333374 0.19643977284431458 -0.2839455306529999 0.0021973326802253723 0.999969482421875 -0.0 0.052008867263793945 0.8166701197624207 0 1.0 0 0.0 0 0.0 0 0.0 -1.1078346967697144 0.19609802961349487 -0.2839455306529999 -0.062410350888967514 0.9980468153953552 -0.0 0.06184554100036621 0.8146851658821106 0 1.0 0 0.0 0 0.0 0 0.0 -1.1078346967697144 0.19609802961349487 0.21605448424816132 -0.062410350888967514 0.9980468153953552 -0.0 0.522833526134491 0.6211022734642029 0 1.0 0 0.0 0 0.0 0 0.0 -1.4889885187149048 0.04098878800868988 -0.2839455306529999 -0.20975372195243835 0.9777215123176575 -0.0 0.042858511209487915 0.6745481491088867 0 1.0 0 0.0 0 0.0 0 0.0 -1.4990172386169434 0.03888964653015137 -0.2839455306529999 -0.20047609508037567 0.9796746969223022 -0.0 0.049921393394470215 0.6708100438117981 0 1.0 0 0.0 0 0.0 0 0.0 -1.4990172386169434 0.03888964653015137 0.21605446934700012 -0.20047609508037567 0.9796746969223022 -0.0 0.5264630317687988 0.4764382839202881 0 1.0 0 0.0 0 0.0 0 0.0 0.35817599296569824 -0.09155523777008057 -0.2839455306529999 0.8301034569740295 0.557603657245636 -0.0 0.02681976556777954 0.4681397080421448 0 1.0 0 0.0 0 0.0 0 0.0 0.3559551239013672 -0.08801734447479248 -0.2839455306529999 0.8624836206436157 0.5060274004936218 -0.0 0.028155982494354248 0.4720897078514099 0 1.0 0 0.0 0 0.0 0 0.0 0.3559551239013672 -0.08801734447479248 0.21605446934700012 0.8624836206436157 0.5060274004936218 -0.0 0.4359365999698639 0.31473463773727417 0 1.0 0 0.0 0 0.0 0 0.0 2.0392682552337646 -0.03255420923233032 -0.2839455306529999 -0.999908447265625 -0.012665181420743465 -0.0 0.029461979866027832 0.3851448893547058 0 1.0 0 0.0 0 0.0 0 0.0 2.039290189743042 -0.03419606387615204 -0.2839455306529999 -0.9998779296875 -0.01388592179864645 -0.0 0.029409736394882202 0.38381296396255493 0 1.0 0 0.0 0 0.0 0 0.0 2.039290189743042 -0.03419606387615204 0.21605446934700012 -0.9998779296875 -0.01388592179864645 -0.0 0.4239836633205414 0.22824078798294067 0 1.0 0 0.0 0 0.0 0 0.0 0.4955120086669922 -0.08878353983163834 -0.2839455306529999 -0.9767754077911377 0.2142094224691391 -0.0 0.9463331699371338 0.46781617403030396 0 1.0 0 0.0 0 0.0 0 0.0 0.49488210678100586 -0.09120375663042068 -0.2839455306529999 -0.9568773508071899 0.29047515988349915 -0.0 0.946804404258728 0.46520084142684937 0 1.0 0 0.0 0 0.0 0 0.0 0.49488210678100586 -0.09120375663042068 0.21605446934700012 -0.9568773508071899 0.29047515988349915 -0.0 0.5340960025787354 0.307165265083313 0 1.0 0 0.0 0 0.0 0 0.0 1.4857633113861084 -0.1859668493270874 -0.2839455306529999 0.22461622953414917 -0.9744254946708679 -0.0 0.9543532133102417 0.3760504722595215 0 1.0 0 0.0 0 0.0 0 0.0 1.4965851306915283 -0.18315744400024414 -0.2839455306529999 0.2797936797142029 -0.9600512981414795 -0.0 0.9485904574394226 0.37897586822509766 0 1.0 0 0.0 0 0.0 0 0.0 1.4965851306915283 -0.18315744400024414 0.21605445444583893 0.2797936797142029 -0.9600512981414795 -0.0 0.5412901043891907 0.22151345014572144 0 1.0 0 0.0 0 0.0 0 0.0 -1.0863980054855347 0.1960797905921936 -0.2839455306529999 0.0710165724158287 0.9974669814109802 -0.0 0.042767733335494995 0.8174909353256226 0 1.0 0 0.0 0 0.0 0 0.0 -1.0966724157333374 0.19643977284431458 -0.2839455306529999 0.0021973326802253723 0.999969482421875 -0.0 0.052008867263793945 0.8166701197624207 0 1.0 0 0.0 0 0.0 0 0.0 -1.0966724157333374 0.19643977284431458 0.21605448424816132 0.0021973326802253723 0.999969482421875 -0.0 0.5286993384361267 0.6222618818283081 0 1.0 0 0.0 0 0.0 0 0.0 -1.4990172386169434 0.03888964653015137 -0.2839455306529999 -0.20047609508037567 0.9796746969223022 -0.0 0.049921393394470215 0.6708100438117981 0 1.0 0 0.0 0 0.0 0 0.0 -1.5096346139907837 0.036766186356544495 -0.2839455306529999 -0.19217506051063538 0.9813531637191772 -0.0 0.05729389190673828 0.6666763424873352 0 1.0 0 0.0 0 0.0 0 0.0 -1.5096346139907837 0.036766186356544495 0.21605446934700012 -0.19217506051063538 0.9813531637191772 -0.0 0.519971489906311 0.473061203956604 0 1.0 0 0.0 0 0.0 0 0.0 1.3550350666046143 -0.18464605510234833 -0.2839455306529999 -0.24854274094104767 -0.9685964584350586 -0.0 0.02486705780029297 0.3804551362991333 0 1.0 0 0.0 0 0.0 0 0.0 1.365281343460083 -0.1870006024837494 -0.2839455306529999 -0.20072023570537567 -0.9796441793441772 -0.0 0.01947242021560669 0.37754589319229126 0 1.0 0 0.0 0 0.0 0 0.0 1.365281343460083 -0.1870006024837494 0.21605445444583893 -0.20072023570537567 -0.9796441793441772 -0.0 0.43718987703323364 0.21872544288635254 0 1.0 0 0.0 0 0.0 0 0.0 -1.1078346967697144 0.19609802961349487 -0.2839455306529999 -0.062410350888967514 0.9980468153953552 -0.0 0.06184554100036621 0.8146851658821106 0 1.0 0 0.0 0 0.0 0 0.0 -1.11867094039917 0.19507277011871338 -0.2839455306529999 -0.1273842602968216 0.9918210506439209 -0.0 0.07110142707824707 0.8117210865020752 0 1.0 0 0.0 0 0.0 0 0.0 -1.11867094039917 0.19507277011871338 0.21605448424816132 -0.1273842602968216 0.9918210506439209 -0.0 0.5171758532524109 0.6193115711212158 0 1.0 0 0.0 0 0.0 0 0.0 0.49488210678100586 -0.09120375663042068 -0.2839455306529999 -0.9568773508071899 0.29047515988349915 -0.0 0.946804404258728 0.46520084142684937 0 1.0 0 0.0 0 0.0 0 0.0 0.49407219886779785 -0.0935315415263176 -0.2839455306529999 -0.9301736354827881 0.3670461177825928 -0.0 0.9473705291748047 0.4626959562301636 0 1.0 0 0.0 0 0.0 0 0.0 0.49407219886779785 -0.0935315415263176 0.21605446934700012 -0.9301736354827881 0.3670461177825928 -0.0 0.533640444278717 0.3045228123664856 0 1.0 0 0.0 0 0.0 0 0.0 2.1288912296295166 -0.03869353234767914 -0.2839455306529999 0.99981689453125 -0.018677327781915665 -0.0 0.9811965227127075 0.37457603216171265 0 1.0 0 0.0 0 0.0 0 0.0 2.1290605068206787 -0.03278528153896332 -0.2839455306529999 0.99920654296875 -0.0397351011633873 -0.0 0.9810053706169128 0.37938469648361206 0 1.0 0 0.0 0 0.0 0 0.0 2.1290605068206787 -0.03278528153896332 0.21605446934700012 0.99920654296875 -0.0397351011633873 -0.0 0.4939279854297638 0.2156570553779602 0 1.0 0 0.0 0 0.0 0 0.0 2.039290189743042 -0.03419606387615204 -0.2839455306529999 -0.9998779296875 -0.01388592179864645 -0.0 0.029409736394882202 0.38381296396255493 0 1.0 0 0.0 0 0.0 0 0.0 2.0393168926239014 -0.03604710102081299 -0.2839455306529999 -0.9998779296875 -0.014831995591521263 -0.0 0.02935001254081726 0.3823206424713135 0 1.0 0 0.0 0 0.0 0 0.0 2.0393168926239014 -0.03604710102081299 0.21605446934700012 -0.9998779296875 -0.014831995591521263 -0.0 0.4238378405570984 0.2267565131187439 0 1.0 0 0.0 0 0.0 0 0.0 1.4743726253509521 -0.18826544284820557 -0.2839455306529999 0.17285683751106262 -0.9849238395690918 -0.0 0.9604605436325073 0.37364357709884644 0 1.0 0 0.0 0 0.0 0 0.0 1.4857633113861084 -0.1859668493270874 -0.2839455306529999 0.22461622953414917 -0.9744254946708679 -0.0 0.9543532133102417 0.3760504722595215 0 1.0 0 0.0 0 0.0 0 0.0 1.4857633113861084 -0.1859668493270874 0.21605445444583893 0.22461622953414917 -0.9744254946708679 -0.0 0.5333886742591858 0.21683746576309204 0 1.0 0 0.0 0 0.0 0 0.0 -1.076357126235962 0.1949998140335083 -0.2839455306529999 0.143803209066391 0.9895932078361511 -0.0 1.0336462259292603 0.817267894744873 0 1.0 0 0.0 0 0.0 0 0.0 -1.0863980054855347 0.1960797905921936 -0.2839455306529999 0.0710165724158287 0.9974669814109802 -0.0 0.042767733335494995 0.8174909353256226 0 1.0 0 0.0 0 0.0 0 0.0 -1.0863980054855347 0.1960797905921936 0.21605448424816132 0.0710165724158287 0.9974669814109802 -0.0 0.5341312289237976 0.6226881742477417 0 1.0 0 0.0 0 0.0 0 0.0 -1.5096346139907837 0.036766186356544495 -0.2839455306529999 -0.19217506051063538 0.9813531637191772 -0.0 0.05729389190673828 0.6666763424873352 0 1.0 0 0.0 0 0.0 0 0.0 -1.5208405256271362 0.03461839258670807 -0.2839455306529999 -0.191381573677063 0.981505811214447 -0.0 0.0649290382862091 0.6621288657188416 0 1.0 0 0.0 0 0.0 0 0.0 -1.5208405256271362 0.03461839258670807 0.21605446934700012 -0.191381573677063 0.981505811214447 -0.0 0.5131340026855469 0.46967190504074097 0 1.0 0 0.0 0 0.0 0 0.0 0.360576868057251 -0.09490098059177399 -0.2839455306529999 0.7935422658920288 0.6084780693054199 -0.0 0.025390267372131348 0.464407742023468 0 1.0 0 0.0 0 0.0 0 0.0 0.35817599296569824 -0.09155523777008057 -0.2839455306529999 0.8301034569740295 0.557603657245636 -0.0 0.02681976556777954 0.4681397080421448 0 1.0 0 0.0 0 0.0 0 0.0 0.35817599296569824 -0.09155523777008057 0.21605446934700012 0.8301034569740295 0.557603657245636 -0.0 0.43715718388557434 0.3104264736175537 0 1.0 0 0.0 0 0.0 0 0.0 1.365281343460083 -0.1870006024837494 -0.2839455306529999 -0.20072023570537567 -0.9796441793441772 -0.0 0.01947242021560669 0.37754589319229126 0 1.0 0 0.0 0 0.0 0 0.0 1.3759682178497314 -0.1889270544052124 -0.2839455306529999 -0.15546128153800964 -0.9878231287002563 -0.0 0.013795018196105957 0.3750600218772888 0 1.0 0 0.0 0 0.0 0 0.0 1.3759682178497314 -0.1889270544052124 0.21605445444583893 -0.15546128153800964 -0.9878231287002563 -0.0 0.44515177607536316 0.21470582485198975 0 1.0 0 0.0 0 0.0 0 0.0 -1.11867094039917 0.19507277011871338 -0.2839455306529999 -0.1273842602968216 0.9918210506439209 -0.0 0.07110142707824707 0.8117210865020752 0 1.0 0 0.0 0 0.0 0 0.0 -1.1291812658309937 0.19336402416229248 -0.2839455306529999 -0.19467757642269135 0.9808648824691772 -0.0 0.07971975207328796 0.8078523278236389 0 1.0 0 0.0 0 0.0 0 0.0 -1.1291812658309937 0.19336402416229248 0.21605448424816132 -0.19467757642269135 0.9808648824691772 -0.0 0.5117258429527283 0.6169023513793945 0 1.0 0 0.0 0 0.0 0 0.0 2.0393168926239014 -0.03604710102081299 -0.2839455306529999 -0.9998779296875 -0.014831995591521263 -0.0 0.02935001254081726 0.3823206424713135 0 1.0 0 0.0 0 0.0 0 0.0 2.0393483638763428 -0.03810732066631317 -0.2839455306529999 -0.999847412109375 -0.0157170332968235 -0.0 0.029282838106155396 0.38067108392715454 0 1.0 0 0.0 0 0.0 0 0.0 2.0393483638763428 -0.03810732066631317 0.21605446934700012 -0.999847412109375 -0.0157170332968235 -0.0 0.423676073551178 0.22511571645736694 0 1.0 0 0.0 0 0.0 0 0.0 -1.5208405256271362 0.03461839258670807 -0.2839455306529999 -0.191381573677063 0.981505811214447 -0.0 0.0649290382862091 0.6621288657188416 0 1.0 0 0.0 0 0.0 0 0.0 -1.529197096824646 0.03296072781085968 -0.2839455306529999 -0.20114749670028687 0.9795526266098022 -0.0 0.07049843668937683 0.6584956645965576 0 1.0 0 0.0 0 0.0 0 0.0 -1.529197096824646 0.03296072781085968 0.21605446934700012 -0.20114749670028687 0.9795526266098022 -0.0 0.5080614686012268 0.46713006496429443 0 1.0 0 0.0 0 0.0 0 0.0 0.590348482131958 -0.10015491396188736 -0.2839455306529999 0.9558396935462952 -0.2937711775302887 -0.0 0.899749755859375 0.4588810205459595 0 1.0 0 0.0 0 0.0 0 0.0 0.5924258232116699 -0.0923299491405487 -0.2839455306529999 0.9756157398223877 -0.21933652460575104 -0.0 0.8982551097869873 0.46633195877075195 0 1.0 0 0.0 0 0.0 0 0.0 0.5924258232116699 -0.0923299491405487 0.21605446934700012 0.9756157398223877 -0.21933652460575104 -0.0 0.5898783802986145 0.33016830682754517 0 1.0 0 0.0 0 0.0 0 0.0 2.0393483638763428 -0.03810732066631317 -0.2839455306529999 -0.999847412109375 -0.0157170332968235 -0.0 0.029282838106155396 0.38067108392715454 0 1.0 0 0.0 0 0.0 0 0.0 2.0393850803375244 -0.04037673771381378 -0.2839455306529999 -0.999847412109375 -0.016449477523565292 -0.0 0.029208064079284668 0.3788679838180542 0 1.0 0 0.0 0 0.0 0 0.0 2.0393850803375244 -0.04037673771381378 0.21605446934700012 -0.999847412109375 -0.016449477523565292 -0.0 0.4234984517097473 0.22332197427749634 0 1.0 0 0.0 0 0.0 0 0.0 0.49407219886779785 -0.0935315415263176 -0.2839455306529999 -0.9301736354827881 0.3670461177825928 -0.0 0.9473705291748047 0.4626959562301636 0 1.0 0 0.0 0 0.0 0 0.0 0.49308228492736816 -0.09576690196990967 -0.2839455306529999 -0.8967863917350769 0.4424268305301666 -0.0 0.9480316638946533 0.4602993130683899 0 1.0 0 0.0 0 0.0 0 0.0 0.49308228492736816 -0.09576690196990967 0.21605446934700012 -0.8967863917350769 0.4424268305301666 -0.0 0.5330564379692078 0.30196136236190796 0 1.0 0 0.0 0 0.0 0 0.0 1.4624125957489014 -0.19005325436592102 -0.2839455306529999 0.12463758885860443 -0.9921872615814209 -0.0 0.9669144153594971 0.3717842102050781 0 1.0 0 0.0 0 0.0 0 0.0 1.4743726253509521 -0.18826544284820557 -0.2839455306529999 0.17285683751106262 -0.9849238395690918 -0.0 0.9604605436325073 0.37364357709884644 0 1.0 0 0.0 0 0.0 0 0.0 1.4743726253509521 -0.18826544284820557 0.21605445444583893 0.17285683751106262 -0.9849238395690918 -0.0 0.5247240662574768 0.21285516023635864 0 1.0 0 0.0 0 0.0 0 0.0 -1.0665497779846191 0.19319984316825867 -0.2839455306529999 0.21765801310539246 0.9760124683380127 -0.0 1.0247381925582886 0.8160241842269897 0 1.0 0 0.0 0 0.0 0 0.0 -1.076357126235962 0.1949998140335083 -0.2839455306529999 0.143803209066391 0.9895932078361511 -0.0 1.0336462259292603 0.817267894744873 0 1.0 0 0.0 0 0.0 0 0.0 -1.076357126235962 0.1949998140335083 0.21605448424816132 0.143803209066391 0.9895932078361511 -0.0 0.5394721627235413 0.6224310398101807 0 1.0 0 0.0 0 0.0 0 0.0 -1.529197096824646 0.03296072781085968 -0.2839455306529999 -0.20114749670028687 0.9795526266098022 -0.0 0.07049843668937683 0.6584956645965576 0 1.0 0 0.0 0 0.0 0 0.0 -1.5372202396392822 0.031256839632987976 -0.2839455306529999 -0.2148197889328003 0.9766228199005127 -0.0 0.07572722434997559 0.6547515392303467 0 1.0 0 0.0 0 0.0 0 0.0 -1.5372202396392822 0.031256839632987976 0.21605446934700012 -0.2148197889328003 0.9766228199005127 -0.0 0.5032224059104919 0.46460527181625366 0 1.0 0 0.0 0 0.0 0 0.0 1.3759682178497314 -0.1889270544052124 -0.2839455306529999 -0.15546128153800964 -0.9878231287002563 -0.0 0.013795018196105957 0.3750600218772888 0 1.0 0 0.0 0 0.0 0 0.0 1.3870952129364014 -0.19042539596557617 -0.2839455306529999 -0.11279641091823578 -0.9935911297798157 -0.0 0.007834404706954956 0.3730197548866272 0 1.0 0 0.0 0 0.0 0 0.0 1.3870952129364014 -0.19042539596557617 0.21605445444583893 -0.11279641091823578 -0.9935911297798157 -0.0 0.45375072956085205 0.211337149143219 0 1.0 0 0.0 0 0.0 0 0.0 -1.1291812658309937 0.19336402416229248 -0.2839455306529999 -0.19467757642269135 0.9808648824691772 -0.0 0.07971975207328796 0.8078523278236389 0 1.0 0 0.0 0 0.0 0 0.0 -1.139365553855896 0.19097179174423218 -0.2839455306529999 -0.2634052634239197 0.964659571647644 -0.0 0.08766904473304749 0.8031498789787292 0 1.0 0 0.0 0 0.0 0 0.0 -1.139365553855896 0.19097179174423218 0.21605448424816132 -0.2634052634239197 0.964659571647644 -0.0 0.5064813494682312 0.6138845086097717 0 1.0 0 0.0 0 0.0 0 0.0 0.2530405521392822 -0.09483286738395691 -0.2839455306529999 -0.9342631101608276 -0.3565477430820465 -0.0 0.0786128044128418 0.4715557098388672 0 1.0 0 0.0 0 0.0 0 0.0 0.2563815116882324 -0.10288161039352417 -0.2839455306529999 -0.9118015170097351 -0.41059601306915283 -0.0 0.07672294974327087 0.46378159523010254 0 1.0 0 0.0 0 0.0 0 0.0 0.2563815116882324 -0.10288161039352417 0.21605446934700012 -0.9118015170097351 -0.41059601306915283 -0.0 0.3792794346809387 0.3292851448059082 0 1.0 0 0.0 0 0.0 0 0.0 -1.5372202396392822 0.031256839632987976 -0.2839455306529999 -0.2148197889328003 0.9766228199005127 -0.0 0.07572722434997559 0.6547515392303467 0 1.0 0 0.0 0 0.0 0 0.0 -1.544910192489624 0.02950674295425415 -0.2839455306529999 -0.2295602262020111 0.9732657670974731 -0.0 0.08061960339546204 0.6509283781051636 0 1.0 0 0.0 0 0.0 0 0.0 -1.544910192489624 0.02950674295425415 0.21605446934700012 -0.2295602262020111 0.9732657670974731 -0.0 0.4986191391944885 0.46209830045700073 0 1.0 0 0.0 0 0.0 0 0.0 2.1288363933563232 -0.04494717717170715 -0.2839455306529999 1.0 0.00015259254723787308 -0.0 0.9813289642333984 0.3696032762527466 0 1.0 0 0.0 0 0.0 0 0.0 2.1288912296295166 -0.03869353234767914 -0.2839455306529999 0.99981689453125 -0.018677327781915665 -0.0 0.9811965227127075 0.37457603216171265 0 1.0 0 0.0 0 0.0 0 0.0 2.1288912296295166 -0.03869353234767914 0.21605446934700012 0.99981689453125 -0.018677327781915665 -0.0 0.493741512298584 0.2108408808708191 0 1.0 0 0.0 0 0.0 0 0.0 2.0393850803375244 -0.04037673771381378 -0.2839455306529999 -0.999847412109375 -0.016449477523565292 -0.0 0.029208064079284668 0.3788679838180542 0 1.0 0 0.0 0 0.0 0 0.0 2.039426565170288 -0.042855337262153625 -0.2839455306529999 -0.999847412109375 -0.016968291252851486 -0.0 0.029126018285751343 0.37691545486450195 0 1.0 0 0.0 0 0.0 0 0.0 2.039426565170288 -0.042855337262153625 0.21605446934700012 -0.999847412109375 -0.016968291252851486 -0.0 0.42330440878868103 0.22137945890426636 0 1.0 0 0.0 0 0.0 0 0.0 1.449883222579956 -0.19133025407791138 -0.2839455306529999 0.0798974558711052 -0.9967955350875854 -0.0 0.9737119674682617 0.37050437927246094 0 1.0 0 0.0 0 0.0 0 0.0 1.4624125957489014 -0.19005325436592102 -0.2839455306529999 0.12463758885860443 -0.9921872615814209 -0.0 0.9669144153594971 0.3717842102050781 0 1.0 0 0.0 0 0.0 0 0.0 1.4624125957489014 -0.19005325436592102 0.21605445444583893 0.12463758885860443 -0.9921872615814209 -0.0 0.5153047442436218 0.20966774225234985 0 1.0 0 0.0 0 0.0 0 0.0 -1.0569759607315063 0.1906799077987671 -0.2839455306529999 0.29132968187332153 0.9566026926040649 -0.0 1.016127586364746 0.8137865662574768 0 1.0 0 0.0 0 0.0 0 0.0 -1.0665497779846191 0.19319984316825867 -0.2839455306529999 0.21765801310539246 0.9760124683380127 -0.0 1.0247381925582886 0.8160241842269897 0 1.0 0 0.0 0 0.0 0 0.0 -1.0665497779846191 0.19319984316825867 0.21605448424816132 0.21765801310539246 0.9760124683380127 -0.0 0.544721782207489 0.6214948892593384 0 1.0 0 0.0 0 0.0 0 0.0 -1.544910192489624 0.02950674295425415 -0.2839455306529999 -0.2295602262020111 0.9732657670974731 -0.0 0.08061960339546204 0.6509283781051636 0 1.0 0 0.0 0 0.0 0 0.0 -1.5522669553756714 0.027710437774658203 -0.2839455306529999 -0.2454603761434555 0.9693899154663086 -0.0 0.08518248796463013 0.6470544338226318 0 1.0 0 0.0 0 0.0 0 0.0 -1.5522669553756714 0.027710437774658203 0.21605446934700012 -0.2454603761434555 0.9693899154663086 -0.0 0.49425211548805237 0.459608793258667 0 1.0 0 0.0 0 0.0 0 0.0 0.3631577491760254 -0.09805455803871155 -0.2839455306529999 0.7530442476272583 0.6579485535621643 -0.0 0.02386653423309326 0.46089035272598267 0 1.0 0 0.0 0 0.0 0 0.0 0.360576868057251 -0.09490098059177399 -0.2839455306529999 0.7935422658920288 0.6084780693054199 -0.0 0.025390267372131348 0.464407742023468 0 1.0 0 0.0 0 0.0 0 0.0 0.360576868057251 -0.09490098059177399 0.21605446934700012 0.7935422658920288 0.6084780693054199 -0.0 0.4385274052619934 0.30631446838378906 0 1.0 0 0.0 0 0.0 0 0.0 1.3870952129364014 -0.19042539596557617 -0.2839455306529999 -0.11279641091823578 -0.9935911297798157 -0.0 0.007834404706954956 0.3730197548866272 0 1.0 0 0.0 0 0.0 0 0.0 1.3986623287200928 -0.1914956420660019 -0.2839455306529999 -0.07275612652301788 -0.9973449110984802 -0.0 0.0015931427478790283 0.37144917249679565 0 1.0 0 0.0 0 0.0 0 0.0 1.3986623287200928 -0.1914956420660019 0.21605445444583893 -0.07275612652301788 -0.9973449110984802 -0.0 0.4629644751548767 0.20870304107666016 0 1.0 0 0.0 0 0.0 0 0.0 -1.139365553855896 0.19097179174423218 -0.2839455306529999 -0.2634052634239197 0.964659571647644 -0.0 0.08766904473304749 0.8031498789787292 0 1.0 0 0.0 0 0.0 0 0.0 -1.1492239236831665 0.18789604306221008 -0.2839455306529999 -0.3325602114200592 0.9430524706840515 -0.0 0.09493982791900635 0.7976773977279663 0 1.0 0 0.0 0 0.0 0 0.0 -1.1492239236831665 0.18789604306221008 0.21605448424816132 -0.3325602114200592 0.9430524706840515 -0.0 0.5014384388923645 0.6102650165557861 0 1.0 0 0.0 0 0.0 0 0.0 2.039426565170288 -0.042855337262153625 -0.2839455306529999 -0.999847412109375 -0.016968291252851486 -0.0 0.029126018285751343 0.37691545486450195 0 1.0 0 0.0 0 0.0 0 0.0 2.039472818374634 -0.0455431193113327 -0.2839455306529999 -0.999847412109375 -0.01739555038511753 -0.0 0.029036760330200195 0.3748179078102112 0 1.0 0 0.0 0 0.0 0 0.0 2.039472818374634 -0.0455431193113327 0.21605446934700012 -0.999847412109375 -0.01739555038511753 -0.0 0.42309364676475525 0.21929270029067993 0 1.0 0 0.0 0 0.0 0 0.0 0.49308228492736816 -0.09576690196990967 -0.2839455306529999 -0.8967863917350769 0.4424268305301666 -0.0 0.9480316638946533 0.4602993130683899 0 1.0 0 0.0 0 0.0 0 0.0 0.4919123649597168 -0.0979098305106163 -0.2839455306529999 -0.8572039008140564 0.5149693489074707 -0.0 0.9487879276275635 0.45800888538360596 0 1.0 0 0.0 0 0.0 0 0.0 0.4919123649597168 -0.0979098305106163 0.21605446934700012 -0.8572039008140564 0.5149388313293457 -0.0 0.5323424339294434 0.2994800806045532 0 1.0 0 0.0 0 0.0 0 0.0 -1.5522669553756714 0.027710437774658203 -0.2839455306529999 -0.2454603761434555 0.9693899154663086 -0.0 0.08518248796463013 0.6470544338226318 0 1.0 0 0.0 0 0.0 0 0.0 -1.5592904090881348 0.02586790919303894 -0.2839455306529999 -0.2627033293247223 0.964842677116394 -0.0 0.08942463994026184 0.6431540250778198 0 1.0 0 0.0 0 0.0 0 0.0 -1.5592904090881348 0.02586790919303894 0.21605446934700012 -0.2627033293247223 0.964842677116394 -0.0 0.4901202917098999 0.4571353793144226 0 1.0 0 0.0 0 0.0 0 0.0 0.4919123649597168 -0.0979098305106163 -0.2839455306529999 -0.8572039008140564 0.5149693489074707 -0.0 0.9487879276275635 0.45800888538360596 0 1.0 0 0.0 0 0.0 0 0.0 0.49056243896484375 -0.0999603271484375 -0.2839455306529999 -0.8122806549072266 0.5832392573356628 -0.0 0.9496395587921143 0.45582300424575806 0 1.0 0 0.0 0 0.0 0 0.0 0.49056243896484375 -0.0999603271484375 0.21605446934700012 -0.8122806549072266 0.5832392573356628 -0.0 0.5314965844154358 0.2970784902572632 0 1.0 0 0.0 0 0.0 0 0.0 1.4367849826812744 -0.19209645688533783 -0.2839455306529999 0.038544878363609314 -0.999237060546875 -0.0 0.9808444976806641 0.36983776092529297 0 1.0 0 0.0 0 0.0 0 0.0 1.449883222579956 -0.19133025407791138 -0.2839455306529999 0.0798974558711052 -0.9967955350875854 -0.0 0.9737119674682617 0.37050437927246094 0 1.0 0 0.0 0 0.0 0 0.0 1.449883222579956 -0.19133025407791138 0.21605445444583893 0.0798974558711052 -0.9967955350875854 -0.0 0.5051661133766174 0.2073853611946106 0 1.0 0 0.0 0 0.0 0 0.0 -1.047635555267334 0.18743997812271118 -0.2839455306529999 0.3634754419326782 0.9315775036811829 -0.0 1.0078847408294678 0.810584545135498 0 1.0 0 0.0 0 0.0 0 0.0 -1.0569759607315063 0.1906799077987671 -0.2839455306529999 0.29132968187332153 0.9566026926040649 -0.0 1.016127586364746 0.8137865662574768 0 1.0 0 0.0 0 0.0 0 0.0 -1.0569759607315063 0.1906799077987671 0.21605448424816132 0.29132968187332153 0.9566026926040649 -0.0 0.5498804450035095 0.6198821067810059 0 1.0 0 0.0 0 0.0 0 0.0 -1.5592904090881348 0.02586790919303894 -0.2839455306529999 -0.2627033293247223 0.964842677116394 -0.0 0.08942463994026184 0.6431540250778198 0 1.0 0 0.0 0 0.0 0 0.0 -1.5659806728363037 0.023979172110557556 -0.2839455306529999 -0.28144168853759766 0.9595629572868347 -0.0 0.09335640072822571 0.6392477750778198 0 1.0 0 0.0 0 0.0 0 0.0 -1.5659806728363037 0.023979172110557556 0.21605446934700012 -0.28144168853759766 0.9595629572868347 -0.0 0.4862211048603058 0.45467615127563477 0 1.0 0 0.0 0 0.0 0 0.0 2.128896474838257 -0.05154623091220856 -0.2839455306529999 0.99993896484375 0.009094515815377235 -0.0 0.9814033508300781 0.3644845485687256 0 1.0 0 0.0 0 0.0 0 0.0 2.1288363933563232 -0.04494717717170715 -0.2839455306529999 1.0 0.00015259254723787308 -0.0 0.9813289642333984 0.3696032762527466 0 1.0 0 0.0 0 0.0 0 0.0 2.1288363933563232 -0.04494717717170715 0.21605446934700012 0.999969482421875 0.00015259254723787308 -0.0 0.49364396929740906 0.20586365461349487 0 1.0 0 0.0 0 0.0 0 0.0 1.3986623287200928 -0.1914956420660019 -0.2839455306529999 -0.07275612652301788 -0.9973449110984802 -0.0 1.0015931129455566 0.37144917249679565 0 1.0 0 0.0 0 0.0 0 0.0 1.4106695652008057 -0.19213779270648956 -0.2839455306529999 -0.035279396921396255 -0.999359130859375 -0.0 0.9950774908065796 0.37037354707717896 0 1.0 0 0.0 0 0.0 0 0.0 1.4106695652008057 -0.19213779270648956 0.21605445444583893 -0.035279396921396255 -0.999359130859375 -0.0 1.4727486371994019 0.20689111948013306 0 1.0 0 0.0 0 0.0 0 0.0 -1.1492239236831665 0.18789604306221008 -0.2839455306529999 -0.3325602114200592 0.9430524706840515 -0.0 0.09493982791900635 0.7976773977279663 0 1.0 0 0.0 0 0.0 0 0.0 -1.1587563753128052 0.18413680791854858 -0.2839455306529999 -0.40098270773887634 0.9160435795783997 -0.0 0.10153970122337341 0.7914900183677673 0 1.0 0 0.0 0 0.0 0 0.0 -1.1587563753128052 0.18413680791854858 0.21605448424816132 -0.40098270773887634 0.9160435795783997 -0.0 0.49659207463264465 0.6060476303100586 0 1.0 0 0.0 0 0.0 0 0.0 2.039472818374634 -0.0455431193113327 -0.2839455306529999 -0.999847412109375 -0.01739555038511753 -0.0 0.029036760330200195 0.3748179078102112 0 1.0 0 0.0 0 0.0 0 0.0 2.0395238399505615 -0.04844008386135101 -0.2839455306529999 -0.99981689453125 -0.017761772498488426 -0.0 0.028940409421920776 0.3725799322128296 0 1.0 0 0.0 0 0.0 0 0.0 2.0395238399505615 -0.04844008386135101 0.21605446934700012 -0.99981689453125 -0.017761772498488426 -0.0 0.4228658974170685 0.21706622838974 0 1.0 0 0.0 0 0.0 0 0.0 -1.5659806728363037 0.023979172110557556 -0.2839455306529999 -0.28144168853759766 0.9595629572868347 -0.0 0.09335640072822571 0.6392477750778198 0 1.0 0 0.0 0 0.0 0 0.0 -1.5723377466201782 0.022044211626052856 -0.2839455306529999 -0.3018280565738678 0.9533371925354004 -0.0 0.09698906540870667 0.6353528499603271 0 1.0 0 0.0 0 0.0 0 0.0 -1.5723377466201782 0.022044211626052856 0.21605446934700012 -0.3018280565738678 0.9533371925354004 -0.0 0.4825509786605835 0.452228307723999 0 1.0 0 0.0 0 0.0 0 0.0 0.3659186363220215 -0.10101598501205444 -0.2839455306529999 0.7088534235954285 0.7053132653236389 -0.0 0.022247523069381714 0.4575845003128052 0 1.0 0 0.0 0 0.0 0 0.0 0.3631577491760254 -0.09805455803871155 -0.2839455306529999 0.7530442476272583 0.6579485535621643 -0.0 0.02386653423309326 0.46089035272598267 0 1.0 0 0.0 0 0.0 0 0.0 0.3631577491760254 -0.09805455803871155 0.21605446934700012 0.7530442476272583 0.6579485535621643 -0.0 0.44005027413368225 0.30239778757095337 0 1.0 0 0.0 0 0.0 0 0.0 1.4106695652008057 -0.19213779270648956 -0.2839455306529999 -0.035279396921396255 -0.999359130859375 -0.0 0.9950774908065796 0.37037354707717896 0 1.0 0 0.0 0 0.0 0 0.0 1.4231173992156982 -0.19235184788703918 -0.2839455306529999 0.0007324442267417908 -0.999969482421875 -0.0 0.9882978200912476 0.3698185086250305 0 1.0 0 0.0 0 0.0 0 0.0 1.4231173992156982 -0.19235184788703918 0.21605445444583893 0.0007324442267417908 -0.999969482421875 -0.0 1.4830350875854492 0.20598739385604858 0 1.0 0 0.0 0 0.0 0 0.0 2.0395238399505615 -0.04844008386135101 -0.2839455306529999 -0.99981689453125 -0.017761772498488426 -0.0 0.028940409421920776 0.3725799322128296 0 1.0 0 0.0 0 0.0 0 0.0 2.0395796298980713 -0.05154623091220856 -0.2839455306529999 -0.99981689453125 -0.017944883555173874 -0.0 0.02883705496788025 0.3702065348625183 0 1.0 0 0.0 0 0.0 0 0.0 2.0395796298980713 -0.05154623091220856 0.21605446934700012 -0.99981689453125 -0.017944883555173874 -0.0 0.4226208031177521 0.214705228805542 0 1.0 0 0.0 0 0.0 0 0.0 0.49056243896484375 -0.0999603271484375 -0.2839455306529999 -0.8122806549072266 0.5832392573356628 -0.0 0.9496395587921143 0.45582300424575806 0 1.0 0 0.0 0 0.0 0 0.0 0.489032506942749 -0.10191839188337326 -0.2839455306529999 -0.7631763815879822 0.6461684107780457 -0.0 0.9505868554115295 0.4537402391433716 0 1.0 0 0.0 0 0.0 0 0.0 0.489032506942749 -0.10191839188337326 0.21605446934700012 -0.7631763815879822 0.6461684107780457 -0.0 0.5305171012878418 0.29475659132003784 0 1.0 0 0.0 0 0.0 0 0.0 1.4231173992156982 -0.19235184788703918 -0.2839455306529999 0.0007324442267417908 -0.999969482421875 -0.0 0.9882978200912476 0.3698185086250305 0 1.0 0 0.0 0 0.0 0 0.0 1.4367849826812744 -0.19209645688533783 -0.2839455306529999 0.038544878363609314 -0.999237060546875 -0.0 0.9808444976806641 0.36983776092529297 0 1.0 0 0.0 0 0.0 0 0.0 1.4367849826812744 -0.19209645688533783 0.21605445444583893 0.038544878363609314 -0.999237060546875 -0.0 0.49437573552131653 0.20612168312072754 0 1.0 0 0.0 0 0.0 0 0.0 -1.0385286808013916 0.18348005414009094 -0.2839455306529999 0.43293556571006775 0.9013947248458862 -0.0 1.0000649690628052 0.8064477443695068 0 1.0 0 0.0 0 0.0 0 0.0 -1.047635555267334 0.18743997812271118 -0.2839455306529999 0.3634754419326782 0.9315775036811829 -0.0 1.0078847408294678 0.810584545135498 0 1.0 0 0.0 0 0.0 0 0.0 -1.047635555267334 0.18743997812271118 0.21605448424816132 0.3634754419326782 0.9315775036811829 -0.0 0.5549494028091431 0.6175920963287354 0 1.0 0 0.0 0 0.0 0 0.0 -1.5723377466201782 0.022044211626052856 -0.2839455306529999 -0.3018280565738678 0.9533371925354004 -0.0 0.09698906540870667 0.6353528499603271 0 1.0 0 0.0 0 0.0 0 0.0 -1.5783613920211792 0.020063042640686035 -0.2839455306529999 -0.3240455389022827 0.9460127353668213 -0.0 0.10033413767814636 0.6314833760261536 0 1.0 0 0.0 0 0.0 0 0.0 -1.5783613920211792 0.020063042640686035 0.21605446934700012 -0.3240455389022827 0.9460127353668213 -0.0 0.47910571098327637 0.44978851079940796 0 1.0 0 0.0 0 0.0 0 0.0 2.0395796298980713 -0.05154623091220856 -0.2839455306529999 0.0 -1.0 -0.0 1.0288370847702026 0.3702065348625183 0 1.0 0 0.0 0 0.0 0 0.0 2.128896474838257 -0.05154623091220856 -0.2839455306529999 0.0 -1.0 -0.0 0.9814033508300781 0.3644845485687256 0 1.0 0 0.0 0 0.0 0 0.0 2.128896474838257 -0.05154623091220856 0.21605446934700012 0.0 -1.0 -0.0 0.4936378598213196 0.20074313879013062 0 1.0 0 0.0 0 0.0 0 0.0 1.0224170684814453 0.19643977284431458 -0.2839455306529999 -0.0009460737928748131 0.999969482421875 -0.0 0.9840543270111084 0.7939989566802979 0 1.0 0 0.0 0 0.0 0 0.0 1.0102767944335938 0.19607609510421753 -0.2839455306529999 -0.06106753647327423 0.9981078505516052 -0.0 0.9941284656524658 0.7937484979629517 0 1.0 0 0.0 0 0.0 0 0.0 1.0102767944335938 0.19607609510421753 0.21605448424816132 -0.06106753647327423 0.9981078505516052 -0.0 1.4810051918029785 0.630024254322052 0 1.0 0 0.0 0 0.0 0 0.0 -1.1587563753128052 0.18413680791854858 -0.2839455306529999 -0.40098270773887634 0.9160435795783997 -0.0 0.10153970122337341 0.7914900183677673 0 1.0 0 0.0 0 0.0 0 0.0 -1.167962908744812 0.1796940565109253 -0.2839455306529999 -0.4675740897655487 0.8839381337165833 -0.0 0.10748907923698425 0.7846333980560303 0 1.0 0 0.0 0 0.0 0 0.0 -1.167962908744812 0.1796940565109253 0.21605448424816132 -0.4675740897655487 0.8839381337165833 -0.0 0.4919360876083374 0.6012330055236816 0 1.0 0 0.0 0 0.0 0 0.0 2.0395796298980713 -0.08552171289920807 -0.2839455306529999 -1.0 0.0 -0.0 0.02804046869277954 0.3460407257080078 0 1.0 0 0.0 0 0.0 0 0.0 2.0395796298980713 -0.18394553661346436 -0.2839455306529999 -1.0 0.0 -0.0 0.025960713624954224 0.29135721921920776 0 1.0 0 0.0 0 0.0 0 0.0 2.0395796298980713 -0.18394553661346436 0.21605445444583893 -1.0 0.0 -0.0 0.40843620896339417 0.13705360889434814 0 1.0 0 0.0 0 0.0 0 0.0 -1.5783613920211792 0.020063042640686035 -0.2839455306529999 -0.3240455389022827 0.9460127353668213 -0.0 0.10033413767814636 0.6314833760261536 0 1.0 0 0.0 0 0.0 0 0.0 -1.5840519666671753 0.0180356502532959 -0.2839455306529999 -0.3483077585697174 0.9373760223388672 -0.0 0.10340362787246704 0.6276503801345825 0 1.0 0 0.0 0 0.0 0 0.0 -1.5840519666671753 0.0180356502532959 0.21605446934700012 -0.3483077585697174 0.9373760223388672 -0.0 0.47588011622428894 0.4473530650138855 0 1.0 0 0.0 0 0.0 0 0.0 0.5876777172088623 -0.10778042674064636 -0.2839455306529999 0.9302957057952881 -0.3667409420013428 -0.0 0.9014818072319031 0.4516541361808777 0 1.0 0 0.0 0 0.0 0 0.0 0.590348482131958 -0.10015491396188736 -0.2839455306529999 0.9558396935462952 -0.2937711775302887 -0.0 0.899749755859375 0.4588810205459595 0 1.0 0 0.0 0 0.0 0 0.0 0.590348482131958 -0.10015491396188736 0.21605446934700012 0.9558396935462952 -0.2937711775302887 -0.0 0.5895298719406128 0.32216984033584595 0 1.0 0 0.0 0 0.0 0 0.0 1.0360093116760254 0.19605910778045654 -0.2839455306529999 0.05740531533956528 0.9983214735984802 -0.0 0.9728249311447144 0.7929335236549377 0 1.0 0 0.0 0 0.0 0 0.0 1.0224170684814453 0.19643977284431458 -0.2839455306529999 -0.0009460737928748131 0.999969482421875 -0.0 0.9840543270111084 0.7939989566802979 0 1.0 0 0.0 0 0.0 0 0.0 1.0224170684814453 0.19643977284431458 0.21605448424816132 -0.0009460737928748131 0.999969482421875 -0.0 0.48762810230255127 0.6301566958427429 0 1.0 0 0.0 0 0.0 0 0.0 2.1380035877227783 -0.08552171289920807 -0.2839455306529999 0.0 0.999969482421875 -0.0 0.9771514534950256 0.34017306566238403 0 1.0 0 0.0 0 0.0 0 0.0 2.0395796298980713 -0.08552171289920807 -0.2839455306529999 0.0 1.0 -0.0 1.0280404090881348 0.3460407257080078 0 1.0 0 0.0 0 0.0 0 0.0 2.0395796298980713 -0.08552171289920807 0.21605446934700012 0.0 0.999969482421875 -0.0 1.4193791151046753 0.19080489873886108 0 1.0 0 0.0 0 0.0 0 0.0 1.0102767944335938 0.19607609510421753 -0.2839455306529999 -0.06106753647327423 0.9981078505516052 -0.0 0.9941284656524658 0.7937484979629517 0 1.0 0 0.0 0 0.0 0 0.0 0.9984920024871826 0.19498518109321594 -0.2839455306529999 -0.12469863146543503 0.9921872615814209 -0.0 1.0038418769836426 0.7923401594161987 0 1.0 0 0.0 0 0.0 0 0.0 0.9984920024871826 0.19498518109321594 0.21605448424816132 -0.12469863146543503 0.9921872615814209 -0.0 1.4745757579803467 0.6291228532791138 0 1.0 0 0.0 0 0.0 0 0.0 -1.0296553373336792 0.17880016565322876 -0.2839455306529999 0.4985809028148651 0.8668172359466553 -0.0 0.9927076101303101 0.8014048933982849 0 1.0 0 0.0 0 0.0 0 0.0 -1.0385286808013916 0.18348005414009094 -0.2839455306529999 0.43293556571006775 0.9013947248458862 -0.0 1.0000649690628052 0.8064477443695068 0 1.0 0 0.0 0 0.0 0 0.0 -1.0385286808013916 0.18348005414009094 0.21605448424816132 0.43293556571006775 0.9013947248458862 -0.0 0.5599304437637329 0.6146221160888672 0 1.0 0 0.0 0 0.0 0 0.0 -1.5840519666671753 0.0180356502532959 -0.2839455306529999 -0.3483077585697174 0.9373760223388672 -0.0 0.10340362787246704 0.6276503801345825 0 1.0 0 0.0 0 0.0 0 0.0 -1.589409351348877 0.01596204936504364 -0.2839455306529999 -0.3748893737792969 0.9270607829093933 -0.0 0.10620921850204468 0.6238624453544617 0 1.0 0 0.0 0 0.0 0 0.0 -1.589409351348877 0.01596204936504364 0.21605446934700012 -0.3748893737792969 0.9270607829093933 -0.0 0.47286897897720337 0.4449179768562317 0 1.0 0 0.0 0 0.0 0 0.0 2.0395796298980713 -0.18394553661346436 -0.2839455306529999 0.0 -0.999969482421875 -0.0 1.0259606838226318 0.29135721921920776 0 1.0 0 0.0 0 0.0 0 0.0 2.1380035877227783 -0.18394553661346436 -0.2839455306529999 0.0 -1.0 -0.0 0.9788987040519714 0.285663366317749 0 1.0 0 0.0 0 0.0 0 0.0 2.1380035877227783 -0.18394553661346436 0.21605445444583893 0.0 -0.999969482421875 -0.0 0.5014961957931519 0.1221572756767273 0 1.0 0 0.0 0 0.0 0 0.0 0.36885952949523926 -0.10378524661064148 -0.2839455306529999 0.6615497469902039 0.7498703002929688 -0.0 0.020532160997390747 0.45448750257492065 0 1.0 0 0.0 0 0.0 0 0.0 0.3659186363220215 -0.10101598501205444 -0.2839455306529999 0.7088534235954285 0.7053132653236389 -0.0 0.022247523069381714 0.4575845003128052 0 1.0 0 0.0 0 0.0 0 0.0 0.3659186363220215 -0.10101598501205444 0.21605446934700012 0.7088534235954285 0.7053132653236389 -0.0 0.44172874093055725 0.29867643117904663 0 1.0 0 0.0 0 0.0 0 0.0 -1.167962908744812 0.1796940565109253 -0.2839455306529999 -0.4675740897655487 0.8839381337165833 -0.0 0.10748907923698425 0.7846333980560303 0 1.0 0 0.0 0 0.0 0 0.0 -1.176843523979187 0.1745678186416626 -0.2839455306529999 -0.5312051773071289 0.8472243547439575 -0.0 0.11281666159629822 0.7771431803703308 0 1.0 0 0.0 0 0.0 0 0.0 -1.176843523979187 0.1745678186416626 0.21605448424816132 -0.5312051773071289 0.8472243547439575 -0.0 0.4874635338783264 0.595818281173706 0 1.0 0 0.0 0 0.0 0 0.0 2.1380035877227783 -0.18394553661346436 -0.2839455306529999 1.0 0.0 -0.0 0.9788987040519714 0.285663366317749 0 1.0 0 0.0 0 0.0 0 0.0 2.1380035877227783 -0.08552171289920807 -0.2839455306529999 1.0 0.0 -0.0 0.9771514534950256 0.34017306566238403 0 1.0 0 0.0 0 0.0 0 0.0 2.1380035877227783 -0.08552171289920807 0.21605446934700012 1.0 0.0 -0.0 0.5012896656990051 0.17674368619918823 0 1.0 0 0.0 0 0.0 0 0.0 0.489032506942749 -0.10191839188337326 -0.2839455306529999 -0.7631763815879822 0.6461684107780457 -0.0 0.9505868554115295 0.4537402391433716 0 1.0 0 0.0 0 0.0 0 0.0 0.4873225688934326 -0.10378402471542358 -0.2839455306529999 -0.7112033367156982 0.7029633522033691 -0.0 0.9516303539276123 0.4517591595649719 0 1.0 0 0.0 0 0.0 0 0.0 0.4873225688934326 -0.10378402471542358 0.21605446934700012 -0.7112033367156982 0.7029633522033691 -0.0 0.5294021368026733 0.29251474142074585 0 1.0 0 0.0 0 0.0 0 0.0 -1.589409351348877 0.01596204936504364 -0.2839455306529999 -0.3748893737792969 0.9270607829093933 -0.0 0.10620921850204468 0.6238624453544617 0 1.0 0 0.0 0 0.0 0 0.0 -1.5944334268569946 0.013842225074768066 -0.2839455306529999 -0.4040345549583435 0.9147312641143799 -0.0 0.10876205563545227 0.6201258897781372 0 1.0 0 0.0 0 0.0 0 0.0 -1.5944334268569946 0.013842225074768066 0.21605446934700012 -0.4040345549583435 0.9147312641143799 -0.0 0.4700668454170227 0.4424787759780884 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.3193819522857666 -0.2839455306529999 -0.5027008652687073 0.8644368052482605 -0.0 0.9526037573814392 0.9118335843086243 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.2619388997554779 -0.2839455306529999 -0.5027008652687073 0.8644368052482605 -0.0 1.0583765506744385 0.8830084204673767 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.2619388997554779 0.2160544991493225 -0.5027008652687073 0.8644368052482605 -0.0 0.45288121700286865 0.7265979051589966 0 1.0 0 0.0 0 0.0 0 0.0 1.0491149425506592 0.19491711258888245 -0.2839455306529999 0.11801507323980331 0.9929807186126709 -0.0 0.9621782302856445 0.7905840873718262 0 1.0 0 0.0 0 0.0 0 0.0 1.0360093116760254 0.19605910778045654 -0.2839455306529999 0.05740531533956528 0.9983214735984802 -0.0 0.9728249311447144 0.7929335236549377 0 1.0 0 0.0 0 0.0 0 0.0 1.0360093116760254 0.19605910778045654 0.21605448424816132 0.05740531533956528 0.9983214735984802 -0.0 0.49503153562545776 0.6294469833374023 0 1.0 0 0.0 0 0.0 0 0.0 0.2563815116882324 -0.10288161039352417 -0.2839455306529999 -0.9118015170097351 -0.41059601306915283 -0.0 0.07672294974327087 0.46378159523010254 0 1.0 0 0.0 0 0.0 0 0.0 0.2601480484008789 -0.11062387377023697 -0.2839455306529999 -0.8855555653572083 -0.46449172496795654 -0.0 0.07466986775398254 0.4562997817993164 0 1.0 0 0.0 0 0.0 0 0.0 0.2601480484008789 -0.11062387377023697 0.21605446934700012 -0.8855555653572083 -0.46449172496795654 -0.0 0.3802019953727722 0.3209127187728882 0 1.0 0 0.0 0 0.0 0 0.0 0.9984920024871826 0.19498518109321594 -0.2839455306529999 -0.12469863146543503 0.9921872615814209 -0.0 0.0038418173789978027 0.7923401594161987 0 1.0 0 0.0 0 0.0 0 0.0 0.9870622158050537 0.19316697120666504 -0.2839455306529999 -0.1906491219997406 0.981627881526947 -0.0 0.013106107711791992 0.7898356914520264 0 1.0 0 0.0 0 0.0 0 0.0 0.9870622158050537 0.19316697120666504 0.21605448424816132 -0.1906491219997406 0.981627881526947 -0.0 0.4683462977409363 0.6274691820144653 0 1.0 0 0.0 0 0.0 0 0.0 -1.0210155248641968 0.17340028285980225 -0.2839455306529999 0.5596179366111755 0.8287301063537598 -0.0 0.9858372211456299 0.7954815626144409 0 1.0 0 0.0 0 0.0 0 0.0 -1.0296553373336792 0.17880016565322876 -0.2839455306529999 0.4985809028148651 0.8668172359466553 -0.0 0.9927076101303101 0.8014048933982849 0 1.0 0 0.0 0 0.0 0 0.0 -1.0296553373336792 0.17880016565322876 0.21605448424816132 0.4985809028148651 0.8668172359466553 -0.0 0.5648260116577148 0.610966145992279 0 1.0 0 0.0 0 0.0 0 0.0 -1.5944334268569946 0.013842225074768066 -0.2839455306529999 -0.4040345549583435 0.9147312641143799 -0.0 0.10876205563545227 0.6201258897781372 0 1.0 0 0.0 0 0.0 0 0.0 -1.5991243124008179 0.011676192283630371 -0.2839455306529999 -0.4372386932373047 0.8993194103240967 -0.0 0.11107313632965088 0.616445004940033 0 1.0 0 0.0 0 0.0 0 0.0 -1.5991243124008179 0.011676192283630371 0.21605446934700012 -0.4372386932373047 0.8993194103240967 -0.0 0.4674680829048157 0.44003111124038696 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.18803346157073975 -0.2839455306529999 1.0 0.0 -0.0 0.9619265794754028 0.8576733469963074 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.3193819522857666 -0.2839455306529999 1.0 0.0 -0.0 0.9526037573814392 0.9118335843086243 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.3193819522857666 0.21605446934700012 1.0 0.0 -0.0 0.4990980625152588 0.7493226528167725 0 1.0 0 0.0 0 0.0 0 0.0 -1.176843523979187 0.1745678186416626 -0.2839455306529999 -0.5312051773071289 0.8472243547439575 -0.0 0.11281666159629822 0.7771431803703308 0 1.0 0 0.0 0 0.0 0 0.0 -1.1853982210159302 0.1687580645084381 -0.2839455306529999 -0.5909909605979919 0.8066347241401672 -0.0 0.1175563633441925 0.769045889377594 0 1.0 0 0.0 0 0.0 0 0.0 -1.1853982210159302 0.1687580645084381 0.21605446934700012 -0.5909909605979919 0.8066347241401672 -0.0 0.48316690325737 0.5897977352142334 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.2619388997554779 -0.2839455306529999 -1.0 0.0 -0.0 0.05837661027908325 0.8830084204673767 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.18803346157073975 -0.2839455306529999 -1.0 0.0 -0.0 0.052425503730773926 0.8490404486656189 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.18803346157073975 0.21605448424816132 -1.0 0.0 -0.0 0.45019370317459106 0.6925525665283203 0 1.0 0 0.0 0 0.0 0 0.0 0.4873225688934326 -0.10378402471542358 -0.2839455306529999 -0.7112033367156982 0.7029633522033691 -0.0 0.9516303539276123 0.4517591595649719 0 1.0 0 0.0 0 0.0 0 0.0 0.48543262481689453 -0.10555722564458847 -0.2839455306529999 -0.6577044129371643 0.7532578706741333 -0.0 0.9527706503868103 0.44987887144088745 0 1.0 0 0.0 0 0.0 0 0.0 0.48543262481689453 -0.10555722564458847 0.21605446934700012 -0.6577044129371643 0.7532578706741333 -0.0 0.5281496644020081 0.2903541922569275 0 1.0 0 0.0 0 0.0 0 0.0 -1.5991243124008179 0.011676192283630371 -0.2839455306529999 -0.4372386932373047 0.8993194103240967 -0.0 0.11107313632965088 0.616445004940033 0 1.0 0 0.0 0 0.0 0 0.0 -1.6035646200180054 0.009406790137290955 -0.2839455306529999 -0.4748374819755554 0.8800622820854187 -0.0 0.11318978667259216 0.6127371788024902 0 1.0 0 0.0 0 0.0 0 0.0 -1.6035646200180054 0.009406790137290955 0.21605446934700012 -0.4748374819755554 0.8800622820854187 -0.0 0.4650213122367859 0.43750661611557007 0 1.0 0 0.0 0 0.0 0 0.0 1.0617341995239258 0.19301378726959229 -0.2839455306529999 0.1819208413362503 0.983306348323822 -0.0 0.9522119760513306 0.7870548367500305 0 1.0 0 0.0 0 0.0 0 0.0 1.0491149425506592 0.19491711258888245 -0.2839455306529999 0.11801507323980331 0.9929807186126709 -0.0 0.9621782302856445 0.7905840873718262 0 1.0 0 0.0 0 0.0 0 0.0 1.0491149425506592 0.19491711258888245 0.21605448424816132 0.11801507323980331 0.9929807186126709 -0.0 0.5021440386772156 0.627916157245636 0 1.0 0 0.0 0 0.0 0 0.0 1.6378281116485596 0.18803346157073975 -0.2839455306529999 -1.0 0.0 -0.0 0.08506765961647034 0.8339129686355591 0 1.0 0 0.0 0 0.0 0 0.0 1.6378281116485596 0.10957461595535278 -0.2839455306529999 -1.0 0.0 -0.0 0.0777084231376648 0.7862430810928345 0 1.0 0 0.0 0 0.0 0 0.0 1.6378281116485596 0.10957461595535278 0.21605446934700012 -1.0 0.0 -0.0 0.42526912689208984 0.6394941806793213 0 1.0 0 0.0 0 0.0 0 0.0 0.9870622158050537 0.19316697120666504 -0.2839455306529999 -0.1906491219997406 0.981627881526947 -0.0 0.013106107711791992 0.7898356914520264 0 1.0 0 0.0 0 0.0 0 0.0 0.9759876728057861 0.1906214952468872 -0.2839455306529999 -0.25815606117248535 0.9660939574241638 -0.0 0.02185356616973877 0.7862992882728577 0 1.0 0 0.0 0 0.0 0 0.0 0.9759876728057861 0.1906214952468872 0.21605448424816132 -0.25815606117248535 0.9660939574241638 -0.0 0.4623207747936249 0.6250783205032349 0 1.0 0 0.0 0 0.0 0 0.0 -1.0126092433929443 0.1672804057598114 -0.2839455306529999 0.6155278086662292 0.7881100177764893 -0.0 0.9794652462005615 0.7886999249458313 0 1.0 0 0.0 0 0.0 0 0.0 -1.0210155248641968 0.17340028285980225 -0.2839455306529999 0.5596179366111755 0.8287301063537598 -0.0 0.9858372211456299 0.7954815626144409 0 1.0 0 0.0 0 0.0 0 0.0 -1.0210155248641968 0.17340028285980225 0.21605448424816132 0.5596179366111755 0.8287301063537598 -0.0 0.5696391463279724 0.6066159009933472 0 1.0 0 0.0 0 0.0 0 0.0 -1.6035646200180054 0.009406790137290955 -0.2839455306529999 -0.4748374819755554 0.8800622820854187 -0.0 0.11318978667259216 0.6127371788024902 0 1.0 0 0.0 0 0.0 0 0.0 -1.6078370809555054 0.0069768428802490234 -0.2839455306529999 -0.5141758322715759 0.8576616644859314 -0.0 0.11515578627586365 0.6089204549789429 0 1.0 0 0.0 0 0.0 0 0.0 -1.6078370809555054 0.0069768428802490234 0.21605446934700012 -0.5141758322715759 0.8576616644859314 -0.0 0.4626764953136444 0.43484050035476685 0 1.0 0 0.0 0 0.0 0 0.0 0.3719792366027832 -0.10636235028505325 -0.2839455306529999 0.6100344657897949 0.7923520803451538 -0.0 0.01871994137763977 0.45159727334976196 0 1.0 0 0.0 0 0.0 0 0.0 0.36885952949523926 -0.10378524661064148 -0.2839455306529999 0.6615497469902039 0.7498703002929688 -0.0 0.020532160997390747 0.45448750257492065 0 1.0 0 0.0 0 0.0 0 0.0 0.36885952949523926 -0.10378524661064148 0.21605446934700012 0.6615497469902039 0.7498703002929688 -0.0 0.4435656666755676 0.2951509952545166 0 1.0 0 0.0 0 0.0 0 0.0 -1.1853982210159302 0.1687580645084381 -0.2839455306529999 -0.5909909605979919 0.8066347241401672 -0.0 0.1175563633441925 0.769045889377594 0 1.0 0 0.0 0 0.0 0 0.0 -1.1936269998550415 0.16226482391357422 -0.2839455306529999 -0.6462294459342957 0.7631153464317322 -0.0 0.12174451351165771 0.760358989238739 0 1.0 0 0.0 0 0.0 0 0.0 -1.1936269998550415 0.16226482391357422 0.21605446934700012 -0.6462294459342957 0.7631153464317322 -0.0 0.4790382981300354 0.5831623077392578 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.18803346157073975 -0.2839455306529999 0.0 1.0 -0.0 0.052425503730773926 0.8490404486656189 0 1.0 0 0.0 0 0.0 0 0.0 1.6378281116485596 0.18803346157073975 -0.2839455306529999 0.0 1.0 -0.0 0.08506765961647034 0.8339129686355591 0 1.0 0 0.0 0 0.0 0 0.0 1.6378281116485596 0.18803346157073975 0.21605448424816132 0.0 1.0 -0.0 0.42952170968055725 0.6872974038124084 0 1.0 0 0.0 0 0.0 0 0.0 0.48543262481689453 -0.10555722564458847 -0.2839455306529999 -0.6577044129371643 0.7532578706741333 -0.0 0.9527706503868103 0.44987887144088745 0 1.0 0 0.0 0 0.0 0 0.0 0.48336267471313477 -0.10723800212144852 -0.2839455306529999 -0.5939817428588867 0.8044679164886475 -0.0 0.9540083408355713 0.4480985999107361 0 1.0 0 0.0 0 0.0 0 0.0 0.48336267471313477 -0.10723800212144852 0.21605446934700012 -0.5939817428588867 0.8044679164886475 -0.0 0.5267577171325684 0.28827619552612305 0 1.0 0 0.0 0 0.0 0 0.0 -1.6078370809555054 0.0069768428802490234 -0.2839455306529999 -0.5141758322715759 0.8576616644859314 -0.0 0.11515578627586365 0.6089204549789429 0 1.0 0 0.0 0 0.0 0 0.0 -1.6119416952133179 0.004386350512504578 -0.2839455306529999 -0.5533921122550964 0.8328806161880493 -0.0 0.11697599291801453 0.6049986481666565 0 1.0 0 0.0 0 0.0 0 0.0 -1.6119416952133179 0.004386350512504578 0.21605446934700012 -0.5533921122550964 0.8328806161880493 -0.0 0.46043041348457336 0.4320330023765564 0 1.0 0 0.0 0 0.0 0 0.0 1.073866844177246 0.19034910202026367 -0.2839455306529999 0.24851222336292267 0.9686269760131836 -0.0 0.9429885149002075 0.7824501991271973 0 1.0 0 0.0 0 0.0 0 0.0 1.0617341995239258 0.19301378726959229 -0.2839455306529999 0.1819208413362503 0.983306348323822 -0.0 0.9522119760513306 0.7870548367500305 0 1.0 0 0.0 0 0.0 0 0.0 1.0617341995239258 0.19301378726959229 0.21605448424816132 0.1819208413362503 0.983306348323822 -0.0 0.5089559555053711 0.6255924701690674 0 1.0 0 0.0 0 0.0 0 0.0 0.9759876728057861 0.1906214952468872 -0.2839455306529999 -0.25815606117248535 0.9660939574241638 -0.0 0.02185356616973877 0.7862992882728577 0 1.0 0 0.0 0 0.0 0 0.0 0.9652681350708008 0.18734872341156006 -0.2839455306529999 -0.3262123465538025 0.9452803134918213 -0.0 0.030038535594940186 0.781794548034668 0 1.0 0 0.0 0 0.0 0 0.0 0.9652681350708008 0.18734872341156006 0.21605448424816132 -0.3262123465538025 0.9452803134918213 -0.0 0.4565003216266632 0.6219629049301147 0 1.0 0 0.0 0 0.0 0 0.0 -1.0044364929199219 0.1604405641555786 -0.2839455306529999 0.6660054326057434 0.7459028959274292 -0.0 0.9735915064811707 0.7810776829719543 0 1.0 0 0.0 0 0.0 0 0.0 -1.0126092433929443 0.1672804057598114 -0.2839455306529999 0.6155278086662292 0.7881100177764893 -0.0 0.9794652462005615 0.7886999249458313 0 1.0 0 0.0 0 0.0 0 0.0 -1.0126092433929443 0.1672804057598114 0.21605446934700012 0.6155278086662292 0.7881100177764893 -0.0 0.574373185634613 0.6015603542327881 0 1.0 0 0.0 0 0.0 0 0.0 -1.6119416952133179 0.004386350512504578 -0.2839455306529999 -0.5533921122550964 0.8328806161880493 -0.0 0.11697599291801453 0.6049986481666565 0 1.0 0 0.0 0 0.0 0 0.0 -1.6158784627914429 0.001635327935218811 -0.2839455306529999 -0.5922421813011169 0.8057497143745422 -0.0 0.11865502595901489 0.6009750366210938 0 1.0 0 0.0 0 0.0 0 0.0 -1.6158784627914429 0.001635327935218811 0.21605446934700012 -0.5922421813011169 0.8057497143745422 -0.0 0.4582798480987549 0.4290844798088074 0 1.0 0 0.0 0 0.0 0 0.0 1.8490369319915771 0.18803346157073975 -0.2839455306529999 0.0 0.999969482421875 -0.0 0.9053249359130859 0.8409206867218018 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.18803346157073975 -0.2839455306529999 0.0 1.0 -0.0 0.9619265794754028 0.8576733469963074 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.18803346157073975 0.21605448424816132 0.0 0.999969482421875 -0.0 0.49900293350219727 0.6947826147079468 0 1.0 0 0.0 0 0.0 0 0.0 0.37529706954956055 -0.10874000191688538 -0.2839455306529999 0.5534226298332214 0.8328806161880493 -0.0 0.016798853874206543 0.44891852140426636 0 1.0 0 0.0 0 0.0 0 0.0 0.3719792366027832 -0.10636235028505325 -0.2839455306529999 0.6100344657897949 0.7923520803451538 -0.0 0.01871994137763977 0.45159727334976196 0 1.0 0 0.0 0 0.0 0 0.0 0.3719792366027832 -0.10636235028505325 0.21605446934700012 0.6100344657897949 0.7923520803451538 -0.0 0.44556304812431335 0.291823148727417 0 1.0 0 0.0 0 0.0 0 0.0 -1.1936269998550415 0.16226482391357422 -0.2839455306529999 -0.6462294459342957 0.7631153464317322 -0.0 0.12174451351165771 0.760358989238739 0 1.0 0 0.0 0 0.0 0 0.0 -1.201529860496521 0.15508809685707092 -0.2839455306529999 -0.6964934468269348 0.7175511717796326 -0.0 0.12541812658309937 0.7510921955108643 0 1.0 0 0.0 0 0.0 0 0.0 -1.201529860496521 0.15508809685707092 0.21605446934700012 -0.6964934468269348 0.7175511717796326 -0.0 0.47506946325302124 0.5759004354476929 0 1.0 0 0.0 0 0.0 0 0.0 0.48336267471313477 -0.10723800212144852 -0.2839455306529999 -0.5939817428588867 0.8044679164886475 -0.0 0.9540083408355713 0.4480985999107361 0 1.0 0 0.0 0 0.0 0 0.0 0.48002052307128906 -0.10947578400373459 -0.2839455306529999 -0.5250709652900696 0.8510391712188721 -0.0 0.9559876918792725 0.44572991132736206 0 1.0 0 0.0 0 0.0 0 0.0 0.48002052307128906 -0.10947578400373459 0.21605446934700012 -0.5250709652900696 0.8510391712188721 -0.0 0.5244717597961426 0.2854476571083069 0 1.0 0 0.0 0 0.0 0 0.0 -1.6158784627914429 0.001635327935218811 -0.2839455306529999 -0.5922421813011169 0.8057497143745422 -0.0 0.11865502595901489 0.6009750366210938 0 1.0 0 0.0 0 0.0 0 0.0 -1.6196473836898804 -0.0012762397527694702 -0.2839455306529999 -0.6303598284721375 0.7762992978096008 -0.0 0.120197594165802 0.59685218334198 0 1.0 0 0.0 0 0.0 0 0.0 -1.6196473836898804 -0.0012762397527694702 0.21605446934700012 -0.6303598284721375 0.7762992978096008 -0.0 0.4562217891216278 0.425994873046875 0 1.0 0 0.0 0 0.0 0 0.0 1.8490369319915771 0.10957461595535278 -0.2839455306529999 1.0 0.0 -0.0 0.9139398336410522 0.793278694152832 0 1.0 0 0.0 0 0.0 0 0.0 1.8490369319915771 0.18803346157073975 -0.2839455306529999 1.0 0.0 -0.0 0.9053249359130859 0.8409206867218018 0 1.0 0 0.0 0 0.0 0 0.0 1.8490369319915771 0.18803346157073975 0.21605448424816132 1.0 0.0 -0.0 0.531541109085083 0.6883732080459595 0 1.0 0 0.0 0 0.0 0 0.0 1.0855131149291992 0.186923086643219 -0.2839455306529999 0.316965252161026 0.9484237432479858 -0.0 0.9345377087593079 0.7768685817718506 0 1.0 0 0.0 0 0.0 0 0.0 1.073866844177246 0.19034910202026367 -0.2839455306529999 0.24851222336292267 0.9686269760131836 -0.0 0.9429885149002075 0.7824501991271973 0 1.0 0 0.0 0 0.0 0 0.0 1.073866844177246 0.19034910202026367 0.21605448424816132 0.24851222336292267 0.9686269760131836 -0.0 0.5154626369476318 0.6225020289421082 0 1.0 0 0.0 0 0.0 0 0.0 1.6378281116485596 0.10957461595535278 -0.2839455306529999 0.0 -1.0 -0.0 0.0777084231376648 0.7862430810928345 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.10957461595535278 -0.2839455306529999 0.0 -1.0 -0.0 0.04727005958557129 0.8007837533950806 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.10957461595535278 0.21605446934700012 0.0 -1.0 -0.0 0.4469967484474182 0.6443145275115967 0 1.0 0 0.0 0 0.0 0 0.0 0.9652681350708008 0.18734872341156006 -0.2839455306529999 -0.3262123465538025 0.9452803134918213 -0.0 0.030038535594940186 0.781794548034668 0 1.0 0 0.0 0 0.0 0 0.0 0.9549038410186768 0.18334868550300598 -0.2839455306529999 -0.39381083846092224 0.9191870093345642 -0.0 0.03763490915298462 0.776381254196167 0 1.0 0 0.0 0 0.0 0 0.0 0.9549038410186768 0.18334868550300598 0.21605448424816132 -0.39381083846092224 0.9191870093345642 -0.0 0.45088422298431396 0.6181330680847168 0 1.0 0 0.0 0 0.0 0 0.0 -0.9964971542358398 0.1528807282447815 -0.2839455306529999 0.7111117839813232 0.7030549049377441 -0.0 0.9682073593139648 0.772628128528595 0 1.0 0 0.0 0 0.0 0 0.0 -1.0044364929199219 0.1604405641555786 -0.2839455306529999 0.6660054326057434 0.7459028959274292 -0.0 0.9735915064811707 0.7810776829719543 0 1.0 0 0.0 0 0.0 0 0.0 -1.0044364929199219 0.1604405641555786 0.21605446934700012 0.6660054326057434 0.7459028959274292 -0.0 0.5790320634841919 0.595786452293396 0 1.0 0 0.0 0 0.0 0 0.0 -1.6196473836898804 -0.0012762397527694702 -0.2839455306529999 -0.6303598284721375 0.7762992978096008 -0.0 0.120197594165802 0.59685218334198 0 1.0 0 0.0 0 0.0 0 0.0 -1.62324857711792 -0.004348337650299072 -0.2839455306529999 -0.6674398183822632 0.7446210980415344 -0.0 0.12160813808441162 0.5926323533058167 0 1.0 0 0.0 0 0.0 0 0.0 -1.62324857711792 -0.004348337650299072 0.21605446934700012 -0.6674398183822632 0.7446210980415344 -0.0 0.4542531371116638 0.4227641224861145 0 1.0 0 0.0 0 0.0 0 0.0 0.5844135284423828 -0.11520648002624512 -0.2839455306529999 0.8994414806365967 -0.4369640052318573 -0.0 0.9034560918807983 0.4446355700492859 0 1.0 0 0.0 0 0.0 0 0.0 0.5876777172088623 -0.10778042674064636 -0.2839455306529999 0.9302957057952881 -0.3667409420013428 -0.0 0.9014818072319031 0.4516541361808777 0 1.0 0 0.0 0 0.0 0 0.0 0.5876777172088623 -0.10778042674064636 0.21605446934700012 0.9302957057952881 -0.3667409420013428 -0.0 0.5888727307319641 0.314247190952301 0 1.0 0 0.0 0 0.0 0 0.0 -1.201529860496521 0.15508809685707092 -0.2839455306529999 -0.6964934468269348 0.7175511717796326 -0.0 0.12541812658309937 0.7510921955108643 0 1.0 0 0.0 0 0.0 0 0.0 -1.2091068029403687 0.14722785353660583 -0.2839455306529999 -0.7443769574165344 0.6677144765853882 -0.0 0.1286132037639618 0.7412484288215637 0 1.0 0 0.0 0 0.0 0 0.0 -1.2091068029403687 0.14722785353660583 0.21605446934700012 -0.7443769574165344 0.6677144765853882 -0.0 0.4712521433830261 0.5679982900619507 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 0.10957461595535278 -0.2839455306529999 -1.0 0.0 -0.0 0.04727005958557129 0.8007837533950806 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 -0.05259701609611511 -0.2839455306529999 -0.999969482421875 -0.0012817773967981339 -0.0 0.0392301082611084 0.6476972699165344 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 -0.05259701609611511 0.21605446934700012 -0.999969482421875 -0.0012817773967981339 -0.0 0.4389623999595642 0.49155598878860474 0 1.0 0 0.0 0 0.0 0 0.0 -1.62324857711792 -0.004348337650299072 -0.2839455306529999 -0.6674398183822632 0.7446210980415344 -0.0 0.12160813808441162 0.5926323533058167 0 1.0 0 0.0 0 0.0 0 0.0 -1.626681923866272 -0.007580965757369995 -0.2839455306529999 -0.7032380104064941 0.7109286785125732 -0.0 0.12289077043533325 0.5883170366287231 0 1.0 0 0.0 0 0.0 0 0.0 -1.626681923866272 -0.007580965757369995 0.21605446934700012 -0.7032380104064941 0.7109286785125732 -0.0 0.45237112045288086 0.4193921685218811 0 1.0 0 0.0 0 0.0 0 0.0 0.378828763961792 -0.11091089993715286 -0.2839455306529999 0.4943082928657532 0.8692587018013 -0.0 0.014758676290512085 0.4464564323425293 0 1.0 0 0.0 0 0.0 0 0.0 0.37529706954956055 -0.10874000191688538 -0.2839455306529999 0.5534226298332214 0.8328806161880493 -0.0 0.016798853874206543 0.44891852140426636 0 1.0 0 0.0 0 0.0 0 0.0 0.37529706954956055 -0.10874000191688538 0.21605446934700012 0.5534226298332214 0.8328806161880493 -0.0 0.44773736596107483 0.288699209690094 0 1.0 0 0.0 0 0.0 0 0.0 1.096672773361206 0.18273574113845825 -0.2839455306529999 0.3862422704696655 0.922391414642334 -0.0 0.9268628358840942 0.7703980207443237 0 1.0 0 0.0 0 0.0 0 0.0 1.0855131149291992 0.186923086643219 -0.2839455306529999 0.316965252161026 0.9484237432479858 -0.0 0.9345377087593079 0.7768685817718506 0 1.0 0 0.0 0 0.0 0 0.0 1.0855131149291992 0.186923086643219 0.21605448424816132 0.316965252161026 0.9484237432479858 -0.0 0.5216641426086426 0.6186676621437073 0 1.0 0 0.0 0 0.0 0 0.0 0.48002052307128906 -0.10947578400373459 -0.2839455306529999 -0.5250709652900696 0.8510391712188721 -0.0 0.9559876918792725 0.44572991132736206 0 1.0 0 0.0 0 0.0 0 0.0 0.47641563415527344 -0.1115189865231514 -0.2839455306529999 -0.46244698762893677 0.886623740196228 -0.0 0.9581100940704346 0.44357115030288696 0 1.0 0 0.0 0 0.0 0 0.0 0.47641563415527344 -0.1115189865231514 0.21605446934700012 -0.46244698762893677 0.886623740196228 -0.0 0.5219649076461792 0.2828216552734375 0 1.0 0 0.0 0 0.0 0 0.0 0.9549038410186768 0.18334868550300598 -0.2839455306529999 -0.39381083846092224 0.9191870093345642 -0.0 0.03763490915298462 0.776381254196167 0 1.0 0 0.0 0 0.0 0 0.0 0.944894552230835 0.1786213517189026 -0.2839455306529999 -0.4597918689250946 0.8879970908164978 -0.0 0.04463425278663635 0.7701126933097839 0 1.0 0 0.0 0 0.0 0 0.0 0.944894552230835 0.1786213517189026 0.21605448424816132 -0.4597918689250946 0.8879970908164978 -0.0 0.44546952843666077 0.6135957837104797 0 1.0 0 0.0 0 0.0 0 0.0 -0.9887914657592773 0.14460089802742004 -0.2839455306529999 0.7320169806480408 0.6812646985054016 -0.0 0.9632974863052368 0.7633605003356934 0 1.0 0 0.0 0 0.0 0 0.0 -0.9964971542358398 0.1528807282447815 -0.2839455306529999 0.7111117839813232 0.7030549049377441 -0.0 0.9682073593139648 0.772628128528595 0 1.0 0 0.0 0 0.0 0 0.0 -0.9964971542358398 0.1528807282447815 0.21605446934700012 0.7111117839813232 0.7030549049377441 -0.0 0.583620011806488 0.589279294013977 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.10957461595535278 -0.2839455306529999 0.0 -0.999969482421875 -0.0 0.9659538269042969 0.8092734813690186 0 1.0 0 0.0 0 0.0 0 0.0 1.8490369319915771 0.10957461595535278 -0.2839455306529999 0.0 -1.0 -0.0 0.9139398336410522 0.793278694152832 0 1.0 0 0.0 0 0.0 0 0.0 1.8490369319915771 0.10957461595535278 0.21605446934700012 0.0 -0.999969482421875 -0.0 0.5335628986358643 0.6399606466293335 0 1.0 0 0.0 0 0.0 0 0.0 -1.2091068029403687 0.14722785353660583 -0.2839455306529999 -0.7443769574165344 0.6677144765853882 -0.0 0.1286132037639618 0.7412484288215637 0 1.0 0 0.0 0 0.0 0 0.0 -1.2162116765975952 0.1387108862400055 -0.2839455306529999 -0.7923825979232788 0.6100039482116699 -0.0 0.13128799200057983 0.7309117317199707 0 1.0 0 0.0 0 0.0 0 0.0 -1.2162116765975952 0.1387108862400055 0.21605446934700012 -0.7923825979232788 0.6100039482116699 -0.0 0.4676472246646881 0.5594847202301025 0 1.0 0 0.0 0 0.0 0 0.0 -1.428524374961853 -0.006379365921020508 -0.2839455306529999 0.299569696187973 -0.9540390968322754 -0.0 0.9996907711029053 0.6184368133544922 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 -0.2839455306529999 0.3073824346065521 -0.9515671133995056 -0.0 0.9975510835647583 0.6196885108947754 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 0.21605446934700012 0.3073824346065521 -0.9515671133995056 -0.0 0.5751795768737793 0.43024682998657227 0 1.0 0 0.0 0 0.0 0 0.0 0.2601480484008789 -0.11062387377023697 -0.2839455306529999 -0.8855555653572083 -0.46449172496795654 -0.0 0.07466986775398254 0.4562997817993164 0 1.0 0 0.0 0 0.0 0 0.0 0.2643401622772217 -0.1180596575140953 -0.2839455306529999 -0.8555864095687866 -0.5175939202308655 -0.0 0.07244819402694702 0.4490988850593567 0 1.0 0 0.0 0 0.0 0 0.0 0.2643401622772217 -0.1180596575140953 0.21605446934700012 -0.8555864095687866 -0.5175939202308655 -0.0 0.38138139247894287 0.31271225214004517 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.005311548709869385 -0.2839455306529999 -1.0 0.0 -0.0 0.9975510835647583 0.6196885108947754 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.024926260113716125 -0.2839455306529999 -0.999969482421875 0.0023194067180156708 -0.0 0.9976115226745605 0.5954424738883972 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.024926260113716125 0.21605446934700012 -0.999969482421875 0.0023194067180156708 -0.0 0.5769625306129456 0.40624701976776123 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 -0.040337830781936646 -0.2839455306529999 0.999969482421875 0.0008850367739796638 -0.0 0.9716988801956177 0.6664947867393494 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.10957461595535278 -0.2839455306529999 1.0 0.0 -0.0 0.9659538269042969 0.8092734813690186 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 0.10957461595535278 0.21605446934700012 1.0 0.0 -0.0 0.49893590807914734 0.6462191343307495 0 1.0 0 0.0 0 0.0 0 0.0 1.1073460578918457 0.17778706550598145 -0.2839455306529999 0.45512253046035767 0.8904080390930176 -0.0 0.9199471473693848 0.7631135582923889 0 1.0 0 0.0 0 0.0 0 0.0 1.096672773361206 0.18273574113845825 -0.2839455306529999 0.3862422704696655 0.922391414642334 -0.0 0.9268628358840942 0.7703980207443237 0 1.0 0 0.0 0 0.0 0 0.0 1.096672773361206 0.18273574113845825 0.21605448424816132 0.3862422704696655 0.922391414642334 -0.0 0.5275639891624451 0.6141082048416138 0 1.0 0 0.0 0 0.0 0 0.0 0.944894552230835 0.1786213517189026 -0.2839455306529999 -0.4597918689250946 0.8879970908164978 -0.0 0.04463425278663635 0.7701126933097839 0 1.0 0 0.0 0 0.0 0 0.0 0.9352405071258545 0.17316675186157227 -0.2839455306529999 -0.5230872631072998 0.8522598743438721 -0.0 0.05104157328605652 0.763035237789154 0 1.0 0 0.0 0 0.0 0 0.0 0.9352405071258545 0.17316675186157227 0.21605448424816132 -0.5230872631072998 0.8522598743438721 -0.0 0.44025203585624695 0.6083549857139587 0 1.0 0 0.0 0 0.0 0 0.0 1.781799554824829 -0.047662943601608276 -0.2839455306529999 0.999969482421875 0.0038453321903944016 -0.0 0.9719215631484985 0.6577943563461304 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 -0.040337830781936646 -0.2839455306529999 0.999969482421875 0.0008850367739796638 -0.0 0.9716988801956177 0.6664947867393494 0 1.0 0 0.0 0 0.0 0 0.0 1.7817862033843994 -0.040337830781936646 0.21605446934700012 0.999969482421875 0.0008850367739796638 -0.0 0.4987790882587433 0.5032071471214294 0 1.0 0 0.0 0 0.0 0 0.0 0.38257455825805664 -0.11287504434585571 -0.2839455306529999 0.4352244734764099 0.9002960324287415 -0.0 0.012597858905792236 0.44421011209487915 0 1.0 0 0.0 0 0.0 0 0.0 0.378828763961792 -0.11091089993715286 -0.2839455306529999 0.4943082928657532 0.8692587018013 -0.0 0.014758676290512085 0.4464564323425293 0 1.0 0 0.0 0 0.0 0 0.0 0.378828763961792 -0.11091089993715286 0.21605446934700012 0.4943082928657532 0.8692587018013 -0.0 0.45010286569595337 0.2857872247695923 0 1.0 0 0.0 0 0.0 0 0.0 -1.0590872764587402 0.12035006284713745 -0.2839455306529999 -0.13760796189308167 -0.9904782176017761 -0.0 1.0160439014434814 0.7520646452903748 0 1.0 0 0.0 0 0.0 0 0.0 -1.053524374961853 0.11937102675437927 -0.2839455306529999 -0.21018096804618835 -0.9776299595832825 -0.0 1.0116513967514038 0.7508395314216614 0 1.0 0 0.0 0 0.0 0 0.0 -1.053524374961853 0.11937102675437927 0.21605446934700012 -0.21018096804618835 -0.9776299595832825 -0.0 0.5556848645210266 0.5576752424240112 0 1.0 0 0.0 0 0.0 0 0.0 -1.4321365356445312 -0.007481232285499573 -0.2839455306529999 0.2850733995437622 -0.9584948420524597 -0.0 1.002036690711975 0.6171183586120605 0 1.0 0 0.0 0 0.0 0 0.0 -1.428524374961853 -0.006379365921020508 -0.2839455306529999 0.299569696187973 -0.9540390968322754 -0.0 0.9996907711029053 0.6184368133544922 0 1.0 0 0.0 0 0.0 0 0.0 -1.428524374961853 -0.006379365921020508 0.21605446934700012 0.299569696187973 -0.9540390968322754 -0.0 0.5732494592666626 0.4284428358078003 0 1.0 0 0.0 0 0.0 0 0.0 0.47641563415527344 -0.1115189865231514 -0.2839455306529999 -0.46244698762893677 0.886623740196228 -0.0 0.9581100940704346 0.44357115030288696 0 1.0 0 0.0 0 0.0 0 0.0 0.472548246383667 -0.11336759477853775 -0.2839455306529999 -0.40171512961387634 0.9157384037971497 -0.0 0.960377037525177 0.441622257232666 0 1.0 0 0.0 0 0.0 0 0.0 0.472548246383667 -0.11336759477853775 0.21605446934700012 -0.40171512961387634 0.9157384037971497 -0.0 0.5192342400550842 0.2804054617881775 0 1.0 0 0.0 0 0.0 0 0.0 1.7818396091461182 -0.054460227489471436 -0.2839455306529999 0.99993896484375 0.008301034569740295 -0.0 0.9721057415008545 0.6496121883392334 0 1.0 0 0.0 0 0.0 0 0.0 1.781799554824829 -0.047662943601608276 -0.2839455306529999 0.999969482421875 0.0038453321903944016 -0.0 0.9719215631484985 0.6577943563461304 0 1.0 0 0.0 0 0.0 0 0.0 1.781799554824829 -0.047662943601608276 0.21605446934700012 0.999969482421875 0.0038453321903944016 -0.0 0.49877843260765076 0.49449795484542847 0 1.0 0 0.0 0 0.0 0 0.0 1.1175329685211182 0.17207705974578857 -0.2839455306529999 0.52232426404953 0.8527176976203918 -0.0 0.9137599468231201 0.7550764679908752 0 1.0 0 0.0 0 0.0 0 0.0 1.1073460578918457 0.17778706550598145 -0.2839455306529999 0.45512253046035767 0.8904080390930176 -0.0 0.9199471473693848 0.7631135582923889 0 1.0 0 0.0 0 0.0 0 0.0 1.1073460578918457 0.17778706550598145 0.21605448424816132 0.45512253046035767 0.8904080390930176 -0.0 0.5331688523292542 0.6088377237319946 0 1.0 0 0.0 0 0.0 0 0.0 -1.053524374961853 0.11937102675437927 -0.2839455306529999 -0.21018096804618835 -0.9776299595832825 -0.0 1.0116513967514038 0.7508395314216614 0 1.0 0 0.0 0 0.0 0 0.0 -1.0481414794921875 0.11800038814544678 -0.2839455306529999 -0.2839747369289398 -0.9588000178337097 -0.0 1.007440447807312 0.7491217851638794 0 1.0 0 0.0 0 0.0 0 0.0 -1.0481414794921875 0.11800038814544678 0.21605446934700012 -0.2839747369289398 -0.9588000178337097 -0.0 0.5587841272354126 0.556570291519165 0 1.0 0 0.0 0 0.0 0 0.0 -1.436055064201355 -0.00861714780330658 -0.2839455306529999 0.27262184023857117 -0.9620960354804993 -0.0 1.0045902729034424 0.615726113319397 0 1.0 0 0.0 0 0.0 0 0.0 -1.4321365356445312 -0.007481232285499573 -0.2839455306529999 0.2850733995437622 -0.9584948420524597 -0.0 1.002036690711975 0.6171183586120605 0 1.0 0 0.0 0 0.0 0 0.0 -1.4321365356445312 -0.007481232285499573 0.21605446934700012 0.2850733995437622 -0.9584948420524597 -0.0 0.5711151957511902 0.42655032873153687 0 1.0 0 0.0 0 0.0 0 0.0 1.6830122470855713 -0.05259701609611511 -0.2839455306529999 -0.999969482421875 -0.0012817773967981339 -0.0 0.0392301082611084 0.6476972699165344 0 1.0 0 0.0 0 0.0 0 0.0 1.6830341815948486 -0.06105197221040726 -0.2839455306529999 -0.999969482421875 -0.005371257662773132 -0.0 0.03887012600898743 0.6378592848777771 0 1.0 0 0.0 0 0.0 0 0.0 1.6830341815948486 -0.06105197221040726 0.21605446934700012 -0.999969482421875 -0.005371257662773132 -0.0 0.4384920597076416 0.4817414879798889 0 1.0 0 0.0 0 0.0 0 0.0 0.9352405071258545 0.17316675186157227 -0.2839455306529999 -0.5230872631072998 0.8522598743438721 -0.0 0.05104157328605652 0.763035237789154 0 1.0 0 0.0 0 0.0 0 0.0 0.9259414672851562 0.16698485612869263 -0.2839455306529999 -0.5828424692153931 0.8125553131103516 -0.0 0.05687263607978821 0.7551867961883545 0 1.0 0 0.0 0 0.0 0 0.0 0.9259414672851562 0.16698485612869263 0.21605446934700012 -0.5828424692153931 0.8125553131103516 -0.0 0.4352259635925293 0.6024113893508911 0 1.0 0 0.0 0 0.0 0 0.0 -1.626681923866272 -0.007580965757369995 -0.2839455306529999 -0.7032380104064941 0.7109286785125732 -0.0 0.12289077043533325 0.5883170366287231 0 1.0 0 0.0 0 0.0 0 0.0 -1.629947304725647 -0.010974138975143433 -0.2839455306529999 -0.7373882532119751 0.6754356622695923 -0.0 0.12404951453208923 0.5839077234268188 0 1.0 0 0.0 0 0.0 0 0.0 -1.629947304725647 -0.010974138975143433 0.21605446934700012 -0.7373882532119751 0.6754356622695923 -0.0 0.45057305693626404 0.4158787727355957 0 1.0 0 0.0 0 0.0 0 0.0 0.3865344524383545 -0.11463243514299393 -0.2839455306529999 0.37711721658706665 0.9261451959609985 -0.0 0.01031494140625 0.4421793222427368 0 1.0 0 0.0 0 0.0 0 0.0 0.38257455825805664 -0.11287504434585571 -0.2839455306529999 0.4352244734764099 0.9002960324287415 -0.0 0.012597858905792236 0.44421011209487915 0 1.0 0 0.0 0 0.0 0 0.0 0.38257455825805664 -0.11287504434585571 0.21605446934700012 0.4352244734764099 0.9002960324287415 -0.0 0.45266231894493103 0.2830923795700073 0 1.0 0 0.0 0 0.0 0 0.0 -1.0481414794921875 0.11800038814544678 -0.2839455306529999 -0.2839747369289398 -0.9588000178337097 -0.0 1.007440447807312 0.7491217851638794 0 1.0 0 0.0 0 0.0 0 0.0 -1.0429385900497437 0.11623811721801758 -0.2839455306529999 -0.3577074408531189 -0.9338053464889526 -0.0 1.0034195184707642 0.7469233274459839 0 1.0 0 0.0 0 0.0 0 0.0 -1.0429385900497437 0.11623811721801758 0.21605446934700012 -0.3577074408531189 -0.9338053464889526 -0.0 0.5617994070053101 0.5550513863563538 0 1.0 0 0.0 0 0.0 0 0.0 0.472548246383667 -0.11336759477853775 -0.2839455306529999 -0.40171512961387634 0.9157384037971497 -0.0 0.960377037525177 0.441622257232666 0 1.0 0 0.0 0 0.0 0 0.0 0.4684181213378906 -0.11502161622047424 -0.2839455306529999 -0.34366893768310547 0.939085066318512 -0.0 0.9627904891967773 0.43988388776779175 0 1.0 0 0.0 0 0.0 0 0.0 0.4684181213378906 -0.11502161622047424 0.21605446934700012 -0.34366893768310547 0.939085066318512 -0.0 0.516277015209198 0.2782076597213745 0 1.0 0 0.0 0 0.0 0 0.0 1.7819068431854248 -0.06072968244552612 -0.2839455306529999 0.999908447265625 0.01348918117582798 -0.0 0.9722524285316467 0.6419804692268372 0 1.0 0 0.0 0 0.0 0 0.0 1.7818396091461182 -0.054460227489471436 -0.2839455306529999 0.99993896484375 0.008301034569740295 -0.0 0.9721057415008545 0.6496121883392334 0 1.0 0 0.0 0 0.0 0 0.0 1.7818396091461182 -0.054460227489471436 0.21605446934700012 0.99993896484375 0.008301034569740295 -0.0 0.49879494309425354 0.4863094091415405 0 1.0 0 0.0 0 0.0 0 0.0 1.1272332668304443 0.16560572385787964 -0.2839455306529999 0.5866267681121826 0.8098391890525818 -0.0 0.9082623720169067 0.7463341951370239 0 1.0 0 0.0 0 0.0 0 0.0 1.1175329685211182 0.17207705974578857 -0.2839455306529999 0.52232426404953 0.8527176976203918 -0.0 0.9137599468231201 0.7550764679908752 0 1.0 0 0.0 0 0.0 0 0.0 1.1175329685211182 0.17207705974578857 0.21605448424816132 0.52232426404953 0.8527176976203918 -0.0 0.5384877324104309 0.60286545753479 0 1.0 0 0.0 0 0.0 0 0.0 -1.0429385900497437 0.11623811721801758 -0.2839455306529999 -0.3577074408531189 -0.9338053464889526 -0.0 1.0034195184707642 0.7469233274459839 0 1.0 0 0.0 0 0.0 0 0.0 -1.0379157066345215 0.11408424377441406 -0.2839455306529999 -0.4300057888031006 -0.9027985334396362 -0.0 0.9995948672294617 0.7442548871040344 0 1.0 0 0.0 0 0.0 0 0.0 -1.0379157066345215 0.11408424377441406 0.21605446934700012 -0.4300057888031006 -0.9027985334396362 -0.0 0.5647335052490234 0.5531189441680908 0 1.0 0 0.0 0 0.0 0 0.0 -1.4402800798416138 -0.009787127375602722 -0.2839455306529999 0.2618182897567749 -0.965086817741394 -0.0 1.0073527097702026 0.6142528057098389 0 1.0 0 0.0 0 0.0 0 0.0 -1.436055064201355 -0.00861714780330658 -0.2839455306529999 0.27262184023857117 -0.9620960354804993 -0.0 1.0045902729034424 0.615726113319397 0 1.0 0 0.0 0 0.0 0 0.0 -1.436055064201355 -0.00861714780330658 0.21605446934700012 0.27262184023857117 -0.9620960354804993 -0.0 0.5687727928161621 0.424571692943573 0 1.0 0 0.0 0 0.0 0 0.0 0.9259414672851562 0.16698485612869263 -0.2839455306529999 -0.5828424692153931 0.8125553131103516 -0.0 0.05687263607978821 0.7551867961883545 0 1.0 0 0.0 0 0.0 0 0.0 0.9169976711273193 0.16007569432258606 -0.2839455306529999 -0.6382641196250916 0.7697988748550415 -0.0 0.06215009093284607 0.7465975880622864 0 1.0 0 0.0 0 0.0 0 0.0 0.9169976711273193 0.16007569432258606 0.21605446934700012 -0.6382641196250916 0.7697988748550415 -0.0 0.4303847849369049 0.5957629680633545 0 1.0 0 0.0 0 0.0 0 0.0 1.7820003032684326 -0.06647131592035294 -0.2839455306529999 0.999786376953125 0.019684437662363052 -0.0 0.9723632335662842 0.6349261999130249 0 1.0 0 0.0 0 0.0 0 0.0 1.7819068431854248 -0.06072968244552612 -0.2839455306529999 0.999908447265625 0.01348918117582798 -0.0 0.9722524285316467 0.6419804692268372 0 1.0 0 0.0 0 0.0 0 0.0 1.7819068431854248 -0.06072968244552612 0.21605446934700012 0.999908447265625 0.01348918117582798 -0.0 0.4988292455673218 0.47867339849472046 0 1.0 0 0.0 0 0.0 0 0.0 0.39070844650268555 -0.1161830797791481 -0.2839455306529999 0.32065796852111816 0.9471724629402161 -0.0 0.007908552885055542 0.4403642416000366 0 1.0 0 0.0 0 0.0 0 0.0 0.3865344524383545 -0.11463243514299393 -0.2839455306529999 0.37711721658706665 0.9261451959609985 -0.0 0.01031494140625 0.4421793222427368 0 1.0 0 0.0 0 0.0 0 0.0 0.3865344524383545 -0.11463243514299393 0.21605446934700012 0.37711721658706665 0.9261451959609985 -0.0 0.45541778206825256 0.2806205153465271 0 1.0 0 0.0 0 0.0 0 0.0 -1.0379157066345215 0.11408424377441406 -0.2839455306529999 -0.4300057888031006 -0.9027985334396362 -0.0 0.9995948672294617 0.7442548871040344 0 1.0 0 0.0 0 0.0 0 0.0 -1.033072829246521 0.11153876781463623 -0.2839455306529999 -0.4994964301586151 -0.8662984371185303 -0.0 0.9959707856178284 0.7411254644393921 0 1.0 0 0.0 0 0.0 0 0.0 -1.033072829246521 0.11153876781463623 0.21605446934700012 -0.4994964301586151 -0.8662984371185303 -0.0 0.567589282989502 0.5507723093032837 0 1.0 0 0.0 0 0.0 0 0.0 -1.4448117017745972 -0.010991156101226807 -0.2839455306529999 0.252327024936676 -0.9676198363304138 -0.0 1.0103250741958618 0.6126905679702759 0 1.0 0 0.0 0 0.0 0 0.0 -1.4402800798416138 -0.009787127375602722 -0.2839455306529999 0.2618182897567749 -0.965086817741394 -0.0 1.0073527097702026 0.6142528057098389 0 1.0 0 0.0 0 0.0 0 0.0 -1.4402800798416138 -0.009787127375602722 0.21605446934700012 0.2618182897567749 -0.965086817741394 -0.0 0.5662178993225098 0.4225098490715027 0 1.0 0 0.0 0 0.0 0 0.0 1.6830341815948486 -0.06105197221040726 -0.2839455306529999 -0.999969482421875 -0.005371257662773132 -0.0 0.03887012600898743 0.6378592848777771 0 1.0 0 0.0 0 0.0 0 0.0 1.6830995082855225 -0.06902045011520386 -0.2839455306529999 -0.999908447265625 -0.011413922533392906 -0.0 0.03850892186164856 0.6284879446029663 0 1.0 0 0.0 0 0.0 0 0.0 1.6830995082855225 -0.06902045011520386 0.21605446934700012 -0.999908447265625 -0.011413922533392906 -0.0 0.43806785345077515 0.47238510847091675 0 1.0 0 0.0 0 0.0 0 0.0 0.4684181213378906 -0.11502161622047424 -0.2839455306529999 -0.34366893768310547 0.939085066318512 -0.0 0.9627904891967773 0.43988388776779175 0 1.0 0 0.0 0 0.0 0 0.0 0.46402525901794434 -0.11648104339838028 -0.2839455306529999 -0.28882718086242676 0.9573656320571899 -0.0 0.9653520584106445 0.43835723400115967 0 1.0 0 0.0 0 0.0 0 0.0 0.46402525901794434 -0.11648104339838028 0.21605446934700012 -0.28882718086242676 0.9573656320571899 -0.0 0.5130914449691772 0.27623826265335083 0 1.0 0 0.0 0 0.0 0 0.0 -1.629947304725647 -0.010974138975143433 -0.2839455306529999 -0.7373882532119751 0.6754356622695923 -0.0 0.12404951453208923 0.5839077234268188 0 1.0 0 0.0 0 0.0 0 0.0 -1.6330450773239136 -0.014527842402458191 -0.2839455306529999 -0.7697073221206665 0.6383861899375916 -0.0 0.12508833408355713 0.5794050693511963 0 1.0 0 0.0 0 0.0 0 0.0 -1.6330450773239136 -0.014527842402458191 0.21605446934700012 -0.7697073221206665 0.6383861899375916 -0.0 0.4488561451435089 0.4122235178947449 0 1.0 0 0.0 0 0.0 0 0.0 1.1364471912384033 0.15837302803993225 -0.2839455306529999 0.6469008326530457 0.7625354528427124 -0.0 0.9034109115600586 0.7369210720062256 0 1.0 0 0.0 0 0.0 0 0.0 1.1272332668304443 0.16560572385787964 -0.2839455306529999 0.5866267681121826 0.8098391890525818 -0.0 0.9082623720169067 0.7463341951370239 0 1.0 0 0.0 0 0.0 0 0.0 1.1272332668304443 0.16560572385787964 0.21605446934700012 0.5866267681121826 0.8098391890525818 -0.0 0.5435309410095215 0.5961958169937134 0 1.0 0 0.0 0 0.0 0 0.0 -1.033072829246521 0.11153876781463623 -0.2839455306529999 -0.4994964301586151 -0.8662984371185303 -0.0 0.9959707856178284 0.7411254644393921 0 1.0 0 0.0 0 0.0 0 0.0 -1.0284099578857422 0.1086016595363617 -0.2839455306529999 -0.5649586319923401 -0.8250983953475952 -0.0 0.9925497770309448 0.7375422716140747 0 1.0 0 0.0 0 0.0 0 0.0 -1.0284099578857422 0.1086016595363617 0.21605446934700012 -0.5649586319923401 -0.8250983953475952 -0.0 0.5703694224357605 0.5480096936225891 0 1.0 0 0.0 0 0.0 0 0.0 0.9169976711273193 0.16007569432258606 -0.2839455306529999 -0.6382641196250916 0.7697988748550415 -0.0 0.06215009093284607 0.7465975880622864 0 1.0 0 0.0 0 0.0 0 0.0 0.9084088802337646 0.15243923664093018 -0.2839455306529999 -0.6889248490333557 0.7248145937919617 -0.0 0.06690171360969543 0.7372899651527405 0 1.0 0 0.0 0 0.0 0 0.0 0.9084088802337646 0.15243923664093018 0.21605446934700012 -0.6889248490333557 0.7248145937919617 -0.0 0.4257209300994873 0.588405191898346 0 1.0 0 0.0 0 0.0 0 0.0 1.782120943069458 -0.07168512046337128 -0.2839455306529999 0.999603271484375 0.027222510427236557 -0.0 0.9724383354187012 0.6284713745117188 0 1.0 0 0.0 0 0.0 0 0.0 1.7820003032684326 -0.06647131592035294 -0.2839455306529999 0.999786376953125 0.019684437662363052 -0.0 0.9723632335662842 0.6349261999130249 0 1.0 0 0.0 0 0.0 0 0.0 1.7820003032684326 -0.06647131592035294 0.21605446934700012 0.999786376953125 0.019684437662363052 -0.0 0.4988810122013092 0.4716169834136963 0 1.0 0 0.0 0 0.0 0 0.0 0.5805556774139404 -0.12243308126926422 -0.2839455306529999 0.8640400171279907 -0.503372311592102 -0.0 0.9056787490844727 0.4378116726875305 0 1.0 0 0.0 0 0.0 0 0.0 0.5844135284423828 -0.11520648002624512 -0.2839455306529999 0.8994414806365967 -0.4369640052318573 -0.0 0.9034560918807983 0.4446355700492859 0 1.0 0 0.0 0 0.0 0 0.0 0.5844135284423828 -0.11520648002624512 0.21605446934700012 0.8994414806365967 -0.4369640052318573 -0.0 0.5878931283950806 0.3063850998878479 0 1.0 0 0.0 0 0.0 0 0.0 -1.0284099578857422 0.1086016595363617 -0.2839455306529999 -0.5649586319923401 -0.8250983953475952 -0.0 0.9925497770309448 0.7375422716140747 0 1.0 0 0.0 0 0.0 0 0.0 -1.023927092552185 0.10527294874191284 -0.2839455306529999 -0.6255073547363281 -0.7801751494407654 -0.0 0.989332914352417 0.7335114479064941 0 1.0 0 0.0 0 0.0 0 0.0 -1.023927092552185 0.10527294874191284 0.21605446934700012 -0.6255073547363281 -0.7801751494407654 -0.0 0.5730769038200378 0.5448282957077026 0 1.0 0 0.0 0 0.0 0 0.0 -1.449649691581726 -0.012229233980178833 -0.2839455306529999 0.24396497011184692 -0.9697561264038086 -0.0 1.0135072469711304 0.6110315918922424 0 1.0 0 0.0 0 0.0 0 0.0 -1.4448117017745972 -0.010991156101226807 -0.2839455306529999 0.252327024936676 -0.9676198363304138 -0.0 1.0103250741958618 0.6126905679702759 0 1.0 0 0.0 0 0.0 0 0.0 -1.4448117017745972 -0.010991156101226807 0.21605446934700012 0.252327024936676 -0.9676198363304138 -0.0 0.5634464025497437 0.4203687906265259 0 1.0 0 0.0 0 0.0 0 0.0 1.6830995082855225 -0.06902045011520386 -0.2839455306529999 -0.999908447265625 -0.011413922533392906 -0.0 0.03850892186164856 0.6284879446029663 0 1.0 0 0.0 0 0.0 0 0.0 1.6832091808319092 -0.07650244981050491 -0.2839455306529999 -0.99981689453125 -0.01825006864964962 -0.0 0.03814530372619629 0.6196141839027405 0 1.0 0 0.0 0 0.0 0 0.0 1.6832091808319092 -0.07650244981050491 0.21605446934700012 -0.99981689453125 -0.01825006864964962 -0.0 0.4376918077468872 0.463517427444458 0 1.0 0 0.0 0 0.0 0 0.0 0.3950965404510498 -0.11752697080373764 -0.2839455306529999 0.26645711064338684 0.9638355374336243 -0.0 0.005377382040023804 0.43876558542251587 0 1.0 0 0.0 0 0.0 0 0.0 0.39070844650268555 -0.1161830797791481 -0.2839455306529999 0.32065796852111816 0.9471724629402161 -0.0 0.007908552885055542 0.4403642416000366 0 1.0 0 0.0 0 0.0 0 0.0 0.39070844650268555 -0.1161830797791481 0.21605446934700012 0.32065796852111816 0.9471724629402161 -0.0 0.45837074518203735 0.27837908267974854 0 1.0 0 0.0 0 0.0 0 0.0 1.145174503326416 0.1503790020942688 -0.2839455306529999 0.7022919654846191 0.7118747234344482 -0.0 0.8991608619689941 0.7268599271774292 0 1.0 0 0.0 0 0.0 0 0.0 1.1364471912384033 0.15837302803993225 -0.2839455306529999 0.6469008326530457 0.7625354528427124 -0.0 0.9034109115600586 0.7369210720062256 0 1.0 0 0.0 0 0.0 0 0.0 1.1364471912384033 0.15837302803993225 0.21605446934700012 0.6469008326530457 0.7625354528427124 -0.0 0.5483102798461914 0.5888283848762512 0 1.0 0 0.0 0 0.0 0 0.0 -1.023927092552185 0.10527294874191284 -0.2839455306529999 -0.6255073547363281 -0.7801751494407654 -0.0 0.989332914352417 0.7335114479064941 0 1.0 0 0.0 0 0.0 0 0.0 -1.0196242332458496 0.10155263543128967 -0.2839455306529999 -0.6805322170257568 -0.7326883673667908 -0.0 0.9863194823265076 0.7290369868278503 0 1.0 0 0.0 0 0.0 0 0.0 -1.0196242332458496 0.10155263543128967 0.21605446934700012 -0.6805322170257568 -0.7326883673667908 -0.0 0.5757145881652832 0.5412243604660034 0 1.0 0 0.0 0 0.0 0 0.0 -1.4547940492630005 -0.013501375913619995 -0.2839455306529999 0.23651844263076782 -0.9716177582740784 -0.0 1.01689875125885 0.6092678904533386 0 1.0 0 0.0 0 0.0 0 0.0 -1.449649691581726 -0.012229233980178833 -0.2839455306529999 0.24396497011184692 -0.9697561264038086 -0.0 1.0135072469711304 0.6110315918922424 0 1.0 0 0.0 0 0.0 0 0.0 -1.449649691581726 -0.012229233980178833 0.21605446934700012 0.24396497011184692 -0.9697561264038086 -0.0 0.5604545474052429 0.41815340518951416 0 1.0 0 0.0 0 0.0 0 0.0 0.46402525901794434 -0.11648104339838028 -0.2839455306529999 -0.28882718086242676 0.9573656320571899 -0.0 0.9653520584106445 0.43835723400115967 0 1.0 0 0.0 0 0.0 0 0.0 0.4593696594238281 -0.11774588376283646 -0.2839455306529999 -0.2374645173549652 0.9713736176490784 -0.0 0.9680632948875427 0.43704426288604736 0 1.0 0 0.0 0 0.0 0 0.0 0.4593696594238281 -0.11774588376283646 0.21605446934700012 -0.2374645173549652 0.9713736176490784 -0.0 0.5096766352653503 0.27450883388519287 0 1.0 0 0.0 0 0.0 0 0.0 0.9084088802337646 0.15243923664093018 -0.2839455306529999 -0.6889248490333557 0.7248145937919617 -0.0 0.06690171360969543 0.7372899651527405 0 1.0 0 0.0 0 0.0 0 0.0 0.9001753330230713 0.14407548308372498 -0.2839455306529999 -0.7363505959510803 0.6765648126602173 -0.0 0.07115733623504639 0.7272799015045166 0 1.0 0 0.0 0 0.0 0 0.0 0.9001753330230713 0.14407548308372498 0.21605446934700012 -0.7363505959510803 0.6765648126602173 -0.0 0.42122650146484375 0.580331563949585 0 1.0 0 0.0 0 0.0 0 0.0 1.7822678089141846 -0.07637109607458115 -0.2839455306529999 0.99932861328125 0.03656117618083954 -0.0 0.9724791049957275 0.6226339936256409 0 1.0 0 0.0 0 0.0 0 0.0 1.782120943069458 -0.07168512046337128 -0.2839455306529999 0.999603271484375 0.027222510427236557 -0.0 0.9724383354187012 0.6284713745117188 0 1.0 0 0.0 0 0.0 0 0.0 1.782120943069458 -0.07168512046337128 0.21605446934700012 0.999603271484375 0.027222510427236557 -0.0 0.4989510476589203 0.4651622176170349 0 1.0 0 0.0 0 0.0 0 0.0 -1.0196242332458496 0.10155263543128967 -0.2839455306529999 -0.6805322170257568 -0.7326883673667908 -0.0 0.9863194823265076 0.7290369868278503 0 1.0 0 0.0 0 0.0 0 0.0 -1.0155013799667358 0.0974406898021698 -0.2839455306529999 -0.729667067527771 -0.6837671995162964 -0.0 0.9835079908370972 0.7241215705871582 0 1.0 0 0.0 0 0.0 0 0.0 -1.0155013799667358 0.0974406898021698 0.21605446934700012 -0.729667067527771 -0.6837671995162964 -0.0 0.5782853364944458 0.5371930599212646 0 1.0 0 0.0 0 0.0 0 0.0 -1.4602450132369995 -0.014807567000389099 -0.2839455306529999 0.2298654168844223 -0.9732047319412231 -0.0 1.020498275756836 0.6073914766311646 0 1.0 0 0.0 0 0.0 0 0.0 -1.4547940492630005 -0.013501375913619995 -0.2839455306529999 0.23651844263076782 -0.9716177582740784 -0.0 1.01689875125885 0.6092678904533386 0 1.0 0 0.0 0 0.0 0 0.0 -1.4547940492630005 -0.013501375913619995 0.21605446934700012 0.23651844263076782 -0.9716177582740784 -0.0 0.5572388768196106 0.4158700704574585 0 1.0 0 0.0 0 0.0 0 0.0 -1.6330450773239136 -0.014527842402458191 -0.2839455306529999 -0.7697073221206665 0.6383861899375916 -0.0 0.12508833408355713 0.5794050693511963 0 1.0 0 0.0 0 0.0 0 0.0 -1.6359747648239136 -0.018242090940475464 -0.2839455306529999 -0.7999511957168579 0.600054919719696 -0.0 0.12601065635681152 0.5748099088668823 0 1.0 0 0.0 0 0.0 0 0.0 -1.6359747648239136 -0.018242090940475464 0.21605446934700012 -0.7999511957168579 0.600054919719696 -0.0 0.4472181797027588 0.4084261655807495 0 1.0 0 0.0 0 0.0 0 0.0 1.7824418544769287 -0.08052925020456314 -0.2839455306529999 0.9988097548484802 0.04849391058087349 -0.0 0.9724854826927185 0.6174278855323792 0 1.0 0 0.0 0 0.0 0 0.0 1.7822678089141846 -0.07637109607458115 -0.2839455306529999 0.99932861328125 0.03656117618083954 -0.0 0.9724791049957275 0.6226339936256409 0 1.0 0 0.0 0 0.0 0 0.0 1.7822678089141846 -0.07637109607458115 0.21605446934700012 0.99932861328125 0.03656117618083954 -0.0 0.4990389347076416 0.45932698249816895 0 1.0 0 0.0 0 0.0 0 0.0 0.39969849586486816 -0.11866410821676254 -0.2839455306529999 0.2148503065109253 0.9766228199005127 -0.0 0.002720385789871216 0.43738478422164917 0 1.0 0 0.0 0 0.0 0 0.0 0.3950965404510498 -0.11752697080373764 -0.2839455306529999 0.26645711064338684 0.9638355374336243 -0.0 0.005377382040023804 0.43876558542251587 0 1.0 0 0.0 0 0.0 0 0.0 0.3950965404510498 -0.11752697080373764 0.21605446934700012 0.26645711064338684 0.9638355374336243 -0.0 0.4615219831466675 0.27637648582458496 0 1.0 0 0.0 0 0.0 0 0.0 1.1534152030944824 0.14162364602088928 -0.2839455306529999 0.7547532320022583 0.6559648513793945 -0.0 0.8954682946205139 0.7161635160446167 0 1.0 0 0.0 0 0.0 0 0.0 1.145174503326416 0.1503790020942688 -0.2839455306529999 0.7022919654846191 0.7118747234344482 -0.0 0.8991608619689941 0.7268599271774292 0 1.0 0 0.0 0 0.0 0 0.0 1.145174503326416 0.1503790020942688 0.21605446934700012 0.7022919654846191 0.7118747234344482 -0.0 0.552838146686554 0.5807584524154663 0 1.0 0 0.0 0 0.0 0 0.0 -1.0155013799667358 0.0974406898021698 -0.2839455306529999 -0.729667067527771 -0.6837671995162964 -0.0 0.9835079908370972 0.7241215705871582 0 1.0 0 0.0 0 0.0 0 0.0 -1.0115585327148438 0.09293714165687561 -0.2839455306529999 -0.7775200605392456 -0.6288338899612427 -0.0 0.9808957576751709 0.7187663316726685 0 1.0 0 0.0 0 0.0 0 0.0 -1.0115585327148438 0.09293714165687561 0.21605446934700012 -0.7775200605392456 -0.6288338899612427 -0.0 0.5807920694351196 0.5327289700508118 0 1.0 0 0.0 0 0.0 0 0.0 1.6832091808319092 -0.07650244981050491 -0.2839455306529999 -0.99981689453125 -0.01825006864964962 -0.0 0.03814530372619629 0.6196141839027405 0 1.0 0 0.0 0 0.0 0 0.0 1.6833622455596924 -0.08349797874689102 -0.2839455306529999 -0.9996337890625 -0.026032287627458572 -0.0 0.03777933120727539 0.6112633943557739 0 1.0 0 0.0 0 0.0 0 0.0 1.6833622455596924 -0.08349797874689102 0.21605446934700012 -0.9996337890625 -0.026032287627458572 -0.0 0.4373648166656494 0.45516377687454224 0 1.0 0 0.0 0 0.0 0 0.0 0.4593696594238281 -0.11774588376283646 -0.2839455306529999 -0.2374645173549652 0.9713736176490784 -0.0 0.9680632948875427 0.43704426288604736 0 1.0 0 0.0 0 0.0 0 0.0 0.454451322555542 -0.11881612986326218 -0.2839455306529999 -0.1896725296974182 0.981841504573822 -0.0 0.9709254503250122 0.43594735860824585 0 1.0 0 0.0 0 0.0 0 0.0 0.454451322555542 -0.11881612986326218 0.21605446934700012 -0.1896725296974182 0.981841504573822 -0.0 0.5060328841209412 0.27303242683410645 0 1.0 0 0.0 0 0.0 0 0.0 0.9001753330230713 0.14407548308372498 -0.2839455306529999 -0.7363505959510803 0.6765648126602173 -0.0 0.07115733623504639 0.7272799015045166 0 1.0 0 0.0 0 0.0 0 0.0 0.8924548625946045 0.1350696086883545 -0.2839455306529999 -0.7825861573219299 0.6225165724754333 -0.0 0.07486656308174133 0.7167055606842041 0 1.0 0 0.0 0 0.0 0 0.0 0.8924548625946045 0.1350696086883545 0.21605446934700012 -0.7825861573219299 0.6225165724754333 -0.0 0.41697314381599426 0.571623682975769 0 1.0 0 0.0 0 0.0 0 0.0 -1.0115585327148438 0.09293714165687561 -0.2839455306529999 -0.7775200605392456 -0.6288338899612427 -0.0 0.9808957576751709 0.7187663316726685 0 1.0 0 0.0 0 0.0 0 0.0 -1.0078662633895874 0.08798837661743164 -0.2839455306529999 -0.82668536901474 -0.5626392364501953 -0.0 0.9785283803939819 0.7129271030426025 0 1.0 0 0.0 0 0.0 0 0.0 -1.0078662633895874 0.08798837661743164 0.21605446934700012 -0.82668536901474 -0.5626392364501953 -0.0 0.5832045078277588 0.5277668237686157 0 1.0 0 0.0 0 0.0 0 0.0 -1.4660025835037231 -0.016147807240486145 -0.2839455306529999 0.22385326027870178 -0.9746086001396179 -0.0 1.0243034362792969 0.6053946018218994 0 1.0 0 0.0 0 0.0 0 0.0 -1.4602450132369995 -0.014807567000389099 -0.2839455306529999 0.2298654168844223 -0.9732047319412231 -0.0 1.020498275756836 0.6073914766311646 0 1.0 0 0.0 0 0.0 0 0.0 -1.4602450132369995 -0.014807567000389099 0.21605446934700012 0.2298654168844223 -0.9732047319412231 -0.0 0.5537964105606079 0.41352611780166626 0 1.0 0 0.0 0 0.0 0 0.0 0.2643401622772217 -0.1180596575140953 -0.2839455306529999 -0.8555864095687866 -0.5175939202308655 -0.0 0.07244819402694702 0.4490988850593567 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 -0.12518896162509918 -0.2839455306529999 -0.8221076130867004 -0.5692922472953796 -0.0 0.07005178928375244 0.4421687126159668 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 -0.12518896162509918 0.21605446934700012 -0.8221076130867004 -0.5692922472953796 -0.0 0.38283199071884155 0.3046743869781494 0 1.0 0 0.0 0 0.0 0 0.0 1.7826426029205322 -0.08415957540273666 -0.2839455306529999 0.9979247450828552 0.06414990872144699 -0.0 0.9724583625793457 0.6128637790679932 0 1.0 0 0.0 0 0.0 0 0.0 1.7824418544769287 -0.08052925020456314 -0.2839455306529999 0.9988097548484802 0.04849391058087349 -0.0 0.9724854826927185 0.6174278855323792 0 1.0 0 0.0 0 0.0 0 0.0 1.7824418544769287 -0.08052925020456314 0.21605446934700012 0.9988097548484802 0.04849391058087349 -0.0 0.49914538860321045 0.4541251063346863 0 1.0 0 0.0 0 0.0 0 0.0 1.1610651016235352 0.13208264112472534 -0.2839455306529999 0.8058107495307922 0.5921201109886169 -0.0 0.8923484086990356 0.7048517465591431 0 1.0 0 0.0 0 0.0 0 0.0 1.1534152030944824 0.14162364602088928 -0.2839455306529999 0.7547532320022583 0.6559648513793945 -0.0 0.8954682946205139 0.7161635160446167 0 1.0 0 0.0 0 0.0 0 0.0 1.1534152030944824 0.14162364602088928 0.21605446934700012 0.7547532320022583 0.6559648513793945 -0.0 0.5571272969245911 0.5719776153564453 0 1.0 0 0.0 0 0.0 0 0.0 -1.0078662633895874 0.08798837661743164 -0.2839455306529999 -0.82668536901474 -0.5626392364501953 -0.0 0.9785283803939819 0.7129271030426025 0 1.0 0 0.0 0 0.0 0 0.0 -1.0044950246810913 0.0825410783290863 -0.2839455306529999 -0.8707236051559448 -0.4917142391204834 -0.0 0.9764478802680969 0.7065575122833252 0 1.0 0 0.0 0 0.0 0 0.0 -1.0044950246810913 0.0825410783290863 0.21605446934700012 -0.8707236051559448 -0.4917142391204834 -0.0 0.5854932069778442 0.5222377777099609 0 1.0 0 0.0 0 0.0 0 0.0 -1.4720665216445923 -0.017522096633911133 -0.2839455306529999 0.21842096745967865 -0.9758293628692627 -0.0 1.028309941291809 0.6032699346542358 0 1.0 0 0.0 0 0.0 0 0.0 -1.4660025835037231 -0.016147807240486145 -0.2839455306529999 0.22385326027870178 -0.9746086001396179 -0.0 1.0243034362792969 0.6053946018218994 0 1.0 0 0.0 0 0.0 0 0.0 -1.4660025835037231 -0.016147807240486145 0.21605446934700012 0.22385326027870178 -0.9746086001396179 -0.0 0.550125002861023 0.4111306071281433 0 1.0 0 0.0 0 0.0 0 0.0 1.6833622455596924 -0.08349797874689102 -0.2839455306529999 -0.9996337890625 -0.026032287627458572 -0.0 0.03777933120727539 0.6112633943557739 0 1.0 0 0.0 0 0.0 0 0.0 1.6835591793060303 -0.09000702947378159 -0.2839455306529999 -0.999359130859375 -0.03509628772735596 -0.0 0.037410229444503784 0.6034562587738037 0 1.0 0 0.0 0 0.0 0 0.0 1.6835591793060303 -0.09000702947378159 0.21605446934700012 -0.999359130859375 -0.03509628772735596 -0.0 0.4370885491371155 0.4473446011543274 0 1.0 0 0.0 0 0.0 0 0.0 0.8924548625946045 0.1350696086883545 -0.2839455306529999 -0.7825861573219299 0.6225165724754333 -0.0 0.07486656308174133 0.7167055606842041 0 1.0 0 0.0 0 0.0 0 0.0 0.8854057788848877 0.1255066990852356 -0.2839455306529999 -0.82601398229599 0.5636158585548401 -0.0 0.07799184322357178 0.7057040929794312 0 1.0 0 0.0 0 0.0 0 0.0 0.8854057788848877 0.1255066990852356 0.21605446934700012 -0.82601398229599 0.5636158585548401 -0.0 0.4130285978317261 0.5623630285263062 0 1.0 0 0.0 0 0.0 0 0.0 0.4045145511627197 -0.11959449201822281 -0.2839455306529999 0.1660817265510559 0.9860835671424866 -0.0 0.9999364614486694 0.4362236261367798 0 1.0 0 0.0 0 0.0 0 0.0 0.39969849586486816 -0.11866410821676254 -0.2839455306529999 0.2148503065109253 0.9766228199005127 -0.0 1.0027203559875488 0.43738478422164917 0 1.0 0 0.0 0 0.0 0 0.0 0.39969849586486816 -0.11866410821676254 0.21605446934700012 0.2148503065109253 0.9766228199005127 -0.0 1.4648711681365967 0.27462226152420044 0 1.0 0 0.0 0 0.0 0 0.0 -1.0044950246810913 0.0825410783290863 -0.2839455306529999 -0.8707236051559448 -0.4917142391204834 -0.0 0.9764478802680969 0.7065575122833252 0 1.0 0 0.0 0 0.0 0 0.0 -1.0014448165893555 0.07659512758255005 -0.2839455306529999 -0.9058809280395508 -0.42347484827041626 -0.0 0.9746454954147339 0.6996514797210693 0 1.0 0 0.0 0 0.0 0 0.0 -1.0014448165893555 0.07659512758255005 0.21605446934700012 -0.9058809280395508 -0.42347484827041626 -0.0 0.5876625180244446 0.5161285400390625 0 1.0 0 0.0 0 0.0 0 0.0 -1.478436827659607 -0.018930450081825256 -0.2839455306529999 0.2135074883699417 -0.9769279956817627 -0.0 1.0325127840042114 0.601010799407959 0 1.0 0 0.0 0 0.0 0 0.0 -1.4720665216445923 -0.017522096633911133 -0.2839455306529999 0.21842096745967865 -0.9758293628692627 -0.0 1.028309941291809 0.6032699346542358 0 1.0 0 0.0 0 0.0 0 0.0 -1.4720665216445923 -0.017522096633911133 0.21605446934700012 0.21842096745967865 -0.9758293628692627 -0.0 0.5462237000465393 0.40869390964508057 0 1.0 0 0.0 0 0.0 0 0.0 0.454451322555542 -0.11881612986326218 -0.2839455306529999 -0.1896725296974182 0.981841504573822 -0.0 0.9709254503250122 0.43594735860824585 0 1.0 0 0.0 0 0.0 0 0.0 0.44927024841308594 -0.11969178915023804 -0.2839455306529999 -0.14542070031166077 0.9893490672111511 -0.0 0.9739395380020142 0.43506962060928345 0 1.0 0 0.0 0 0.0 0 0.0 0.44927024841308594 -0.11969178915023804 0.21605446934700012 -0.14542070031166077 0.9893490672111511 -0.0 0.502161979675293 0.2718232274055481 0 1.0 0 0.0 0 0.0 0 0.0 -1.6359747648239136 -0.018242090940475464 -0.2839455306529999 -0.7999511957168579 0.600054919719696 -0.0 0.12601065635681152 0.5748099088668823 0 1.0 0 0.0 0 0.0 0 0.0 -1.6387368440628052 -0.022116869688034058 -0.2839455306529999 -0.8279671669006348 0.5607470870018005 -0.0 0.1268201470375061 0.570122480392456 0 1.0 0 0.0 0 0.0 0 0.0 -1.6387368440628052 -0.022116869688034058 0.21605446934700012 -0.8279671669006348 0.5607470870018005 -0.0 0.44565656781196594 0.4044862389564514 0 1.0 0 0.0 0 0.0 0 0.0 1.7828700542449951 -0.08726207166910172 -0.2839455306529999 0.9963072538375854 0.08566545695066452 -0.0 0.9723979234695435 0.6089496612548828 0 1.0 0 0.0 0 0.0 0 0.0 1.7826426029205322 -0.08415957540273666 -0.2839455306529999 0.9979247450828552 0.06414990872144699 -0.0 0.9724583625793457 0.6128637790679932 0 1.0 0 0.0 0 0.0 0 0.0 1.7826426029205322 -0.08415957540273666 0.21605446934700012 0.9979247450828552 0.06414990872144699 -0.0 0.4992702007293701 0.44956737756729126 0 1.0 0 0.0 0 0.0 0 0.0 1.1680192947387695 0.12173163890838623 -0.2839455306529999 0.8518326282501221 0.5237891674041748 -0.0 0.8898118734359741 0.6929334402084351 0 1.0 0 0.0 0 0.0 0 0.0 1.1610651016235352 0.13208264112472534 -0.2839455306529999 0.8058107495307922 0.5921201109886169 -0.0 0.8923484086990356 0.7048517465591431 0 1.0 0 0.0 0 0.0 0 0.0 1.1610651016235352 0.13208264112472534 0.21605446934700012 0.8058107495307922 0.5921201109886169 -0.0 0.5611436367034912 0.562463641166687 0 1.0 0 0.0 0 0.0 0 0.0 0.8854057788848877 0.1255066990852356 -0.2839455306529999 -0.82601398229599 0.5636158585548401 -0.0 0.07799184322357178 0.7057040929794312 0 1.0 0 0.0 0 0.0 0 0.0 0.8790280818939209 0.11538678407669067 -0.2839455306529999 -0.8645283579826355 0.5025787949562073 -0.0 0.08057984709739685 0.6942784786224365 0 1.0 0 0.0 0 0.0 0 0.0 0.8790280818939209 0.11538678407669067 0.21605446934700012 -0.8645283579826355 0.5025787949562073 -0.0 0.4093787670135498 0.5525389909744263 0 1.0 0 0.0 0 0.0 0 0.0 -1.2162116765975952 0.1387108862400055 -0.2839455306529999 -0.7923825979232788 0.6100039482116699 -0.0 0.13128799200057983 0.7309117317199707 0 1.0 0 0.0 0 0.0 0 0.0 -1.2226988077163696 0.12956392765045166 -0.2839455306529999 -0.8371227383613586 0.5469832420349121 -0.0 0.13340923190116882 0.7201611995697021 0 1.0 0 0.0 0 0.0 0 0.0 -1.2226988077163696 0.12956392765045166 0.21605446934700012 -0.8371227383613586 0.5469832420349121 -0.0 0.46431317925453186 0.5503852367401123 0 1.0 0 0.0 0 0.0 0 0.0 1.7831242084503174 -0.08983674645423889 -0.2839455306529999 0.9931027889251709 0.11709952354431152 -0.0 0.9723045825958252 0.6056911945343018 0 1.0 0 0.0 0 0.0 0 0.0 1.7828700542449951 -0.08726207166910172 -0.2839455306529999 0.9963072538375854 0.08566545695066452 -0.0 0.9723979234695435 0.6089496612548828 0 1.0 0 0.0 0 0.0 0 0.0 1.7828700542449951 -0.08726207166910172 0.21605446934700012 0.9963072538375854 0.08566545695066452 -0.0 0.49941331148147583 0.4456617832183838 0 1.0 0 0.0 0 0.0 0 0.0 0.4095447063446045 -0.12031812220811844 -0.2839455306529999 0.12024292349815369 0.9927365779876709 -0.0 0.9970248341560364 0.43528419733047485 0 1.0 0 0.0 0 0.0 0 0.0 0.4045145511627197 -0.11959449201822281 -0.2839455306529999 0.1660817265510559 0.9860835671424866 -0.0 0.9999364614486694 0.4362236261367798 0 1.0 0 0.0 0 0.0 0 0.0 0.4045145511627197 -0.11959449201822281 0.21605446934700012 0.1660817265510559 0.9860835671424866 -0.0 1.4684172868728638 0.27312713861465454 0 1.0 0 0.0 0 0.0 0 0.0 -1.4851137399673462 -0.020372852683067322 -0.2839455306529999 0.21283608675003052 -0.9770805835723877 -0.0 1.0369054079055786 0.59861159324646 0 1.0 0 0.0 0 0.0 0 0.0 -1.478436827659607 -0.018930450081825256 -0.2839455306529999 0.2135074883699417 -0.9769279956817627 -0.0 1.0325127840042114 0.601010799407959 0 1.0 0 0.0 0 0.0 0 0.0 -1.478436827659607 -0.018930450081825256 0.21605446934700012 0.2135074883699417 -0.9769279956817627 -0.0 0.5420928001403809 0.4062280058860779 0 1.0 0 0.0 0 0.0 0 0.0 0.44927024841308594 -0.11969178915023804 -0.2839455306529999 -0.14542070031166077 0.9893490672111511 -0.0 0.9739395380020142 0.43506962060928345 0 1.0 0 0.0 0 0.0 0 0.0 0.44382667541503906 -0.12037285417318344 -0.2839455306529999 -0.10455641150474548 0.9945066571235657 -0.0 0.9771062135696411 0.43441450595855713 0 1.0 0 0.0 0 0.0 0 0.0 0.44382667541503906 -0.12037285417318344 0.21605446934700012 -0.10455641150474548 0.9945066571235657 -0.0 0.49806731939315796 0.27089667320251465 0 1.0 0 0.0 0 0.0 0 0.0 1.783405065536499 -0.0918835923075676 -0.2839455306529999 0.9859004616737366 0.1672719568014145 -0.0 0.9721783995628357 0.6030924320220947 0 1.0 0 0.0 0 0.0 0 0.0 1.7831242084503174 -0.08983674645423889 -0.2839455306529999 0.9931027889251709 0.11709952354431152 -0.0 0.9723045825958252 0.6056911945343018 0 1.0 0 0.0 0 0.0 0 0.0 1.7831242084503174 -0.08983674645423889 0.21605446934700012 0.9931027889251709 0.11709952354431152 -0.0 0.4995746612548828 0.4424140453338623 0 1.0 0 0.0 0 0.0 0 0.0 1.0230786800384521 0.12097030878067017 -0.2839455306529999 0.06277657300233841 -0.9980162978172302 -0.0 0.9850102663040161 0.7255008220672607 0 1.0 0 0.0 0 0.0 0 0.0 1.0283715724945068 0.12113326787948608 -0.2839455306529999 -0.0001831110566854477 -1.0 -0.0 0.9810165762901306 0.7254688739776611 0 1.0 0 0.0 0 0.0 0 0.0 1.0283715724945068 0.12113326787948608 0.21605446934700012 -0.0001831110566854477 -0.999969482421875 -0.0 0.49023085832595825 0.5616816878318787 0 1.0 0 0.0 0 0.0 0 0.0 -1.0648301839828491 0.12093746662139893 -0.2839455306529999 -0.06741538643836975 -0.9977111220359802 -0.0 1.0206077098846436 0.7527838349342346 0 1.0 0 0.0 0 0.0 0 0.0 -1.0590872764587402 0.12035006284713745 -0.2839455306529999 -0.13760796189308167 -0.9904782176017761 -0.0 1.0160439014434814 0.7520646452903748 0 1.0 0 0.0 0 0.0 0 0.0 -1.0590872764587402 0.12035006284713745 0.21605446934700012 -0.13760796189308167 -0.9904782176017761 -0.0 0.5524991154670715 0.5583648085594177 0 1.0 0 0.0 0 0.0 0 0.0 -1.4917467832565308 -0.021829843521118164 -0.2839455306529999 0.22058779001235962 -0.9753410220146179 -0.0 0.04124736785888672 0.5961276888847351 0 1.0 0 0.0 0 0.0 0 0.0 -1.4851137399673462 -0.020372852683067322 -0.2839455306529999 0.21283608675003052 -0.9770805835723877 -0.0 1.0369054079055786 0.59861159324646 0 1.0 0 0.0 0 0.0 0 0.0 -1.4851137399673462 -0.020372852683067322 0.21605446934700012 0.21283608675003052 -0.9770805835723877 -0.0 0.5377336740493774 0.4037465453147888 0 1.0 0 0.0 0 0.0 0 0.0 1.6835591793060303 -0.09000702947378159 -0.2839455306529999 -0.999359130859375 -0.03509628772735596 -0.0 0.037410229444503784 0.6034562587738037 0 1.0 0 0.0 0 0.0 0 0.0 1.6837999820709229 -0.0960296019911766 -0.2839455306529999 -0.9989318251609802 -0.045625172555446625 -0.0 0.03703737258911133 0.5962085127830505 0 1.0 0 0.0 0 0.0 0 0.0 1.6837999820709229 -0.0960296019911766 0.21605446934700012 -0.9989318251609802 -0.045625172555446625 -0.0 0.4368642568588257 0.4400756359100342 0 1.0 0 0.0 0 0.0 0 0.0 -1.2226988077163696 0.12956392765045166 -0.2839455306529999 -0.8371227383613586 0.5469832420349121 -0.0 0.13340923190116882 0.7201611995697021 0 1.0 0 0.0 0 0.0 0 0.0 -1.228568196296692 0.11978697776794434 -0.2839455306529999 -0.8756370544433594 0.4829248785972595 -0.0 0.1350199580192566 0.7089823484420776 0 1.0 0 0.0 0 0.0 0 0.0 -1.228568196296692 0.11978697776794434 0.21605446934700012 -0.8756370544433594 0.4829248785972595 -0.0 0.4612388014793396 0.5406763553619385 0 1.0 0 0.0 0 0.0 0 0.0 0.41478896141052246 -0.12083500623703003 -0.2839455306529999 0.07739493995904922 0.9969786405563354 -0.0 0.9939851760864258 0.43456918001174927 0 1.0 0 0.0 0 0.0 0 0.0 0.4095447063446045 -0.12031812220811844 -0.2839455306529999 0.12024292349815369 0.9927365779876709 -0.0 0.9970248341560364 0.43528419733047485 0 1.0 0 0.0 0 0.0 0 0.0 0.4095447063446045 -0.12031812220811844 0.21605446934700012 0.12024292349815369 0.9927365779876709 -0.0 1.4721579551696777 0.27190256118774414 0 1.0 0 0.0 0 0.0 0 0.0 -1.4979859590530396 -0.023281976580619812 -0.2839455306529999 0.23349711298942566 -0.9723502397537231 -0.0 0.045302391052246094 0.5936297178268433 0 1.0 0 0.0 0 0.0 0 0.0 -1.4917467832565308 -0.021829843521118164 -0.2839455306529999 0.22058779001235962 -0.9753410220146179 -0.0 0.04124736785888672 0.5961276888847351 0 1.0 0 0.0 0 0.0 0 0.0 -1.4917467832565308 -0.021829843521118164 0.21605446934700012 0.22058779001235962 -0.9753410220146179 -0.0 0.5333826541900635 0.40131789445877075 0 1.0 0 0.0 0 0.0 0 0.0 0.44382667541503906 -0.12037285417318344 -0.2839455306529999 -0.10455641150474548 0.9945066571235657 -0.0 0.9771062135696411 0.43441450595855713 0 1.0 0 0.0 0 0.0 0 0.0 0.43812036514282227 -0.12085933238267899 -0.2839455306529999 -0.06689657270908356 0.9977416396141052 -0.0 0.9804256558418274 0.43398576974868774 0 1.0 0 0.0 0 0.0 0 0.0 0.43812036514282227 -0.12085933238267899 0.21605446934700012 -0.06689657270908356 0.9977416396141052 -0.0 0.4937538802623749 0.2702690362930298 0 1.0 0 0.0 0 0.0 0 0.0 1.0283715724945068 0.12113326787948608 -0.2839455306529999 -0.0001831110566854477 -1.0 -0.0 0.9810165762901306 0.7254688739776611 0 1.0 0 0.0 0 0.0 0 0.0 1.0333290100097656 0.12097880244255066 -0.2839455306529999 -0.0633259043097496 -0.9979857802391052 -0.0 0.9772898554801941 0.725033164024353 0 1.0 0 0.0 0 0.0 0 0.0 1.0333290100097656 0.12097880244255066 0.21605446934700012 -0.0633259043097496 -0.9979857802391052 -0.0 0.4931207001209259 0.5613721013069153 0 1.0 0 0.0 0 0.0 0 0.0 -1.6387368440628052 -0.022116869688034058 -0.2839455306529999 -0.8279671669006348 0.5607470870018005 -0.0 0.1268201470375061 0.570122480392456 0 1.0 0 0.0 0 0.0 0 0.0 -1.6413308382034302 -0.026152193546295166 -0.2839455306529999 -0.8537247776985168 0.52067631483078 -0.0 0.12751969695091248 0.5653431415557861 0 1.0 0 0.0 0 0.0 0 0.0 -1.6413308382034302 -0.026152193546295166 0.21605446934700012 -0.8537247776985168 0.52067631483078 -0.0 0.44416937232017517 0.4004032611846924 0 1.0 0 0.0 0 0.0 0 0.0 1.78371262550354 -0.09340262413024902 -0.2839455306529999 0.9713736176490784 0.2374339997768402 -0.0 0.9720193147659302 0.6011558771133423 0 1.0 0 0.0 0 0.0 0 0.0 1.783405065536499 -0.0918835923075676 -0.2839455306529999 0.9859004616737366 0.1672719568014145 -0.0 0.9721783995628357 0.6030924320220947 0 1.0 0 0.0 0 0.0 0 0.0 1.783405065536499 -0.0918835923075676 0.21605446934700012 0.9859004616737366 0.1672719568014145 -0.0 0.4997541606426239 0.4398283362388611 0 1.0 0 0.0 0 0.0 0 0.0 -1.0707529783248901 0.12113326787948608 -0.2839455306529999 0.0002441480755805969 -0.999969482421875 -0.0 1.0253300666809082 0.7529829144477844 0 1.0 0 0.0 0 0.0 0 0.0 -1.0648301839828491 0.12093746662139893 -0.2839455306529999 -0.06741538643836975 -0.9977111220359802 -0.0 1.0206077098846436 0.7527838349342346 0 1.0 0 0.0 0 0.0 0 0.0 -1.0648301839828491 0.12093746662139893 0.21605446934700012 -0.06741538643836975 -0.9977111220359802 -0.0 0.549224317073822 0.5586365461349487 0 1.0 0 0.0 0 0.0 0 0.0 1.7840678691864014 -0.09463948756456375 -0.2839455306529999 0.9525132179260254 0.30448317527770996 -0.0 0.9718208312988281 0.5995715856552124 0 1.0 0 0.0 0 0.0 0 0.0 1.78371262550354 -0.09340262413024902 -0.2839455306529999 0.9713736176490784 0.2374339997768402 -0.0 0.9720193147659302 0.6011558771133423 0 1.0 0 0.0 0 0.0 0 0.0 1.78371262550354 -0.09340262413024902 0.21605446934700012 0.9713736176490784 0.2374339997768402 -0.0 0.4999516010284424 0.43790704011917114 0 1.0 0 0.0 0 0.0 0 0.0 0.42024731636047363 -0.12114513665437698 -0.2839455306529999 0.03747672960162163 0.999267578125 -0.0 0.9908171892166138 0.434081494808197 0 1.0 0 0.0 0 0.0 0 0.0 0.41478896141052246 -0.12083500623703003 -0.2839455306529999 0.07739493995904922 0.9969786405563354 -0.0 0.9939851760864258 0.43456918001174927 0 1.0 0 0.0 0 0.0 0 0.0 0.41478896141052246 -0.12083500623703003 0.21605446934700012 0.07739493995904922 0.9969786405563354 -0.0 1.4760892391204834 0.27096086740493774 0 1.0 0 0.0 0 0.0 0 0.0 1.1742777824401855 0.11057066917419434 -0.2839455306529999 0.8901638984680176 0.45558029413223267 -0.0 0.8878135681152344 0.680391788482666 0 1.0 0 0.0 0 0.0 0 0.0 1.1680192947387695 0.12173163890838623 -0.2839455306529999 0.8518326282501221 0.5237891674041748 -0.0 0.8898118734359741 0.6929334402084351 0 1.0 0 0.0 0 0.0 0 0.0 1.1680192947387695 0.12173163890838623 0.21605446934700012 0.8518326282501221 0.5237891674041748 -0.0 0.5648558139801025 0.5521864295005798 0 1.0 0 0.0 0 0.0 0 0.0 -1.0765116214752197 0.12093991041183472 -0.2839455306529999 0.06833094358444214 -0.9976500868797302 -0.0 1.0299208164215088 0.7526613473892212 0 1.0 0 0.0 0 0.0 0 0.0 -1.0707529783248901 0.12113326787948608 -0.2839455306529999 0.0002441480755805969 -0.999969482421875 -0.0 1.0253300666809082 0.7529829144477844 0 1.0 0 0.0 0 0.0 0 0.0 -1.0707529783248901 0.12113326787948608 0.21605446934700012 0.0002441480755805969 -1.0 -0.0 0.5458582043647766 0.558487057685852 0 1.0 0 0.0 0 0.0 0 0.0 -1.503830909729004 -0.024729236960411072 -0.2839455306529999 0.24808496236801147 -0.9687185287475586 -0.0 0.049069106578826904 0.591133713722229 0 1.0 0 0.0 0 0.0 0 0.0 -1.4979859590530396 -0.023281976580619812 -0.2839455306529999 0.23349711298942566 -0.9723502397537231 -0.0 0.045302391052246094 0.5936297178268433 0 1.0 0 0.0 0 0.0 0 0.0 -1.4979859590530396 -0.023281976580619812 0.21605446934700012 0.23349711298942566 -0.9723502397537231 -0.0 0.5292789340019226 0.3989958167076111 0 1.0 0 0.0 0 0.0 0 0.0 0.43812036514282227 -0.12085933238267899 -0.2839455306529999 -0.06689657270908356 0.9977416396141052 -0.0 0.9804256558418274 0.43398576974868774 0 1.0 0 0.0 0 0.0 0 0.0 0.43215131759643555 -0.12115121632814407 -0.2839455306529999 -0.032227545976638794 0.99945068359375 -0.0 0.9838976860046387 0.43378758430480957 0 1.0 0 0.0 0 0.0 0 0.0 0.43215131759643555 -0.12115121632814407 0.21605446934700012 -0.032227545976638794 0.99945068359375 -0.0 0.48922884464263916 0.2699575424194336 0 1.0 0 0.0 0 0.0 0 0.0 1.0333290100097656 0.12097880244255066 -0.2839455306529999 -0.0633259043097496 -0.9979857802391052 -0.0 0.9772898554801941 0.725033164024353 0 1.0 0 0.0 0 0.0 0 0.0 1.0381596088409424 0.12051543593406677 -0.2839455306529999 -0.12878811359405518 -0.9916684627532959 -0.0 0.9736800193786621 0.7242040634155273 0 1.0 0 0.0 0 0.0 0 0.0 1.0381596088409424 0.12051543593406677 0.21605446934700012 -0.12878811359405518 -0.9916684627532959 -0.0 0.4959324598312378 0.5607290267944336 0 1.0 0 0.0 0 0.0 0 0.0 1.7844913005828857 -0.09583986550569534 -0.2839455306529999 0.9325845837593079 0.36088138818740845 -0.0 0.9715766310691833 0.5980284214019775 0 1.0 0 0.0 0 0.0 0 0.0 1.7840678691864014 -0.09463948756456375 -0.2839455306529999 0.9525132179260254 0.30448317527770996 -0.0 0.9718208312988281 0.5995715856552124 0 1.0 0 0.0 0 0.0 0 0.0 1.7840678691864014 -0.09463948756456375 0.21605446934700012 0.9525132179260254 0.30448317527770996 -0.0 0.5001802444458008 0.4363413453102112 0 1.0 0 0.0 0 0.0 0 0.0 -1.082112193107605 0.12035977840423584 -0.2839455306529999 0.13904233276844025 -0.9902645945549011 -0.0 1.034368634223938 0.7518304586410522 0 1.0 0 0.0 0 0.0 0 0.0 -1.0765116214752197 0.12093991041183472 -0.2839455306529999 0.06833094358444214 -0.9976500868797302 -0.0 1.0299208164215088 0.7526613473892212 0 1.0 0 0.0 0 0.0 0 0.0 -1.0765116214752197 0.12093991041183472 0.21605446934700012 0.06833094358444214 -0.9976500868797302 -0.0 0.542594313621521 0.5579367280006409 0 1.0 0 0.0 0 0.0 0 0.0 -1.509281873703003 -0.026171639561653137 -0.2839455306529999 0.26462599635124207 -0.964323878288269 -0.0 0.05254825949668884 0.5886538028717041 0 1.0 0 0.0 0 0.0 0 0.0 -1.503830909729004 -0.024729236960411072 -0.2839455306529999 0.24808496236801147 -0.9687185287475586 -0.0 0.049069106578826904 0.591133713722229 0 1.0 0 0.0 0 0.0 0 0.0 -1.503830909729004 -0.024729236960411072 0.21605446934700012 0.24808496236801147 -0.9687185287475586 -0.0 0.5254290699958801 0.39677244424819946 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252188205718994 -0.024926260113716125 -0.2839455306529999 -0.999969482421875 0.0023194067180156708 -0.0 0.9976115226745605 0.5954424738883972 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252455234527588 -0.030664265155792236 -0.2839455306529999 -0.99993896484375 0.009704886004328728 -0.0 0.9976453185081482 0.5883469581604004 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252455234527588 -0.030664265155792236 0.21605446934700012 -0.99993896484375 0.009704886004328728 -0.0 0.5774822235107422 0.39922070503234863 0 1.0 0 0.0 0 0.0 0 0.0 1.784982442855835 -0.0970037579536438 -0.2839455306529999 0.9089937806129456 0.41679129004478455 -0.0 0.9712873697280884 0.5965265035629272 0 1.0 0 0.0 0 0.0 0 0.0 1.7844913005828857 -0.09583986550569534 -0.2839455306529999 0.9325845837593079 0.36088138818740845 -0.0 0.9715766310691833 0.5980284214019775 0 1.0 0 0.0 0 0.0 0 0.0 1.7844913005828857 -0.09583986550569534 0.21605446934700012 0.9325845837593079 0.36088138818740845 -0.0 0.5004534125328064 0.43482106924057007 0 1.0 0 0.0 0 0.0 0 0.0 0.4259195327758789 -0.1212485134601593 -0.2839455306529999 0.0012817773967981339 0.999969482421875 -0.0 0.9875213503837585 0.4338241219520569 0 1.0 0 0.0 0 0.0 0 0.0 0.42024731636047363 -0.12114513665437698 -0.2839455306529999 0.03747672960162163 0.999267578125 -0.0 0.9908171892166138 0.434081494808197 0 1.0 0 0.0 0 0.0 0 0.0 0.42024731636047363 -0.12114513665437698 0.21605446934700012 0.03747672960162163 0.999267578125 -0.0 1.4802062511444092 0.27031534910202026 0 1.0 0 0.0 0 0.0 0 0.0 1.0179414749145508 0.12048140168190002 -0.2839455306529999 0.1281472146511078 -0.9917294979095459 -0.0 0.9888919591903687 0.7250957489013672 0 1.0 0 0.0 0 0.0 0 0.0 1.0230786800384521 0.12097030878067017 -0.2839455306529999 0.06277657300233841 -0.9980162978172302 -0.0 0.9850102663040161 0.7255008220672607 0 1.0 0 0.0 0 0.0 0 0.0 1.0230786800384521 0.12097030878067017 0.21605446934700012 0.06277657300233841 -0.9980162978172302 -0.0 1.48714017868042 0.5616525411605835 0 1.0 0 0.0 0 0.0 0 0.0 -1.087554693222046 0.11939290165901184 -0.2839455306529999 0.21167638897895813 -0.9773247241973877 -0.0 1.0386587381362915 0.7504989504814148 0 1.0 0 0.0 0 0.0 0 0.0 -1.082112193107605 0.12035977840423584 -0.2839455306529999 0.13904233276844025 -0.9902645945549011 -0.0 1.034368634223938 0.7518304586410522 0 1.0 0 0.0 0 0.0 0 0.0 -1.082112193107605 0.12035977840423584 0.21605446934700012 0.13904233276844025 -0.9902645945549011 -0.0 0.5394285321235657 0.5569874048233032 0 1.0 0 0.0 0 0.0 0 0.0 1.6837999820709229 -0.0960296019911766 -0.2839455306529999 -0.9989318251609802 -0.045625172555446625 -0.0 0.03703737258911133 0.5962085127830505 0 1.0 0 0.0 0 0.0 0 0.0 1.6840846538543701 -0.10156569629907608 -0.2839455306529999 -0.9982909560203552 -0.05813775956630707 -0.0 0.03666028380393982 0.589532196521759 0 1.0 0 0.0 0 0.0 0 0.0 1.6840846538543701 -0.10156569629907608 0.21605446934700012 -0.9982909560203552 -0.05813775956630707 -0.0 0.43669307231903076 0.4333688020706177 0 1.0 0 0.0 0 0.0 0 0.0 0.43215131759643555 -0.12115121632814407 -0.2839455306529999 -0.032227545976638794 0.99945068359375 -0.0 0.9838976860046387 0.43378758430480957 0 1.0 0 0.0 0 0.0 0 0.0 0.4259195327758789 -0.1212485134601593 -0.2839455306529999 0.0012817773967981339 0.999969482421875 -0.0 0.9875213503837585 0.4338241219520569 0 1.0 0 0.0 0 0.0 0 0.0 0.4259195327758789 -0.1212485134601593 0.21605446934700012 0.0012817773967981339 0.999969482421875 -0.0 1.484501600265503 0.2699793577194214 0 1.0 0 0.0 0 0.0 0 0.0 1.0381596088409424 0.12051543593406677 -0.2839455306529999 -0.12878811359405518 -0.9916684627532959 -0.0 0.9736800193786621 0.7242040634155273 0 1.0 0 0.0 0 0.0 0 0.0 1.0428638458251953 0.11974316835403442 -0.2839455306529999 -0.19602037966251373 -0.9805902242660522 -0.0 0.9701930284500122 0.7229883670806885 0 1.0 0 0.0 0 0.0 0 0.0 1.0428638458251953 0.11974316835403442 0.21605446934700012 -0.19602037966251373 -0.9805902242660522 -0.0 0.49866729974746704 0.5597536563873291 0 1.0 0 0.0 0 0.0 0 0.0 -1.228568196296692 0.11978697776794434 -0.2839455306529999 -0.8756370544433594 0.4829248785972595 -0.0 0.1350199580192566 0.7089823484420776 0 1.0 0 0.0 0 0.0 0 0.0 -1.2338197231292725 0.10938003659248352 -0.2839455306529999 -0.9079561829566956 0.4190496504306793 -0.0 0.13615745306015015 0.6973543167114258 0 1.0 0 0.0 0 0.0 0 0.0 -1.2338197231292725 0.10938003659248352 0.21605446934700012 -0.9079561829566956 0.4190496504306793 -0.0 0.45841383934020996 0.530331015586853 0 1.0 0 0.0 0 0.0 0 0.0 -1.6413308382034302 -0.026152193546295166 -0.2839455306529999 -0.8537247776985168 0.52067631483078 -0.0 0.12751969695091248 0.5653431415557861 0 1.0 0 0.0 0 0.0 0 0.0 -1.6437366008758545 -0.03031519055366516 -0.2839455306529999 -0.8774986863136292 0.47950682044029236 -0.0 0.1281072497367859 0.5605101585388184 0 1.0 0 0.0 0 0.0 0 0.0 -1.6437366008758545 -0.03031519055366516 0.21605446934700012 -0.8774986863136292 0.47950682044029236 -0.0 0.44276612997055054 0.396209716796875 0 1.0 0 0.0 0 0.0 0 0.0 1.7855417728424072 -0.09813116490840912 -0.2839455306529999 0.8817102313041687 0.47172459959983826 -0.0 0.9709528684616089 0.5950659513473511 0 1.0 0 0.0 0 0.0 0 0.0 1.784982442855835 -0.0970037579536438 -0.2839455306529999 0.9089937806129456 0.41679129004478455 -0.0 0.9712873697280884 0.5965265035629272 0 1.0 0 0.0 0 0.0 0 0.0 1.784982442855835 -0.0970037579536438 0.21605446934700012 0.9089937806129456 0.41679129004478455 -0.0 0.5007707476615906 0.4333465099334717 0 1.0 0 0.0 0 0.0 0 0.0 1.0129599571228027 0.11966654658317566 -0.2839455306529999 0.19583727419376373 -0.9806207418441772 -0.0 0.9926527738571167 0.7242611050605774 0 1.0 0 0.0 0 0.0 0 0.0 1.0179414749145508 0.12048140168190002 -0.2839455306529999 0.1281472146511078 -0.9917294979095459 -0.0 0.9888919591903687 0.7250957489013672 0 1.0 0 0.0 0 0.0 0 0.0 1.0179414749145508 0.12048140168190002 0.21605446934700012 0.1281472146511078 -0.9917294979095459 -0.0 1.484134554862976 0.5612612962722778 0 1.0 0 0.0 0 0.0 0 0.0 -1.092839002609253 0.11803928017616272 -0.2839455306529999 0.2850123643875122 -0.9584948420524597 -0.0 0.0427783727645874 0.7486751079559326 0 1.0 0 0.0 0 0.0 0 0.0 -1.087554693222046 0.11939290165901184 -0.2839455306529999 0.21167638897895813 -0.9773247241973877 -0.0 0.038658708333969116 0.7504989504814148 0 1.0 0 0.0 0 0.0 0 0.0 -1.087554693222046 0.11939290165901184 0.21605446934700012 0.21167638897895813 -0.9773247241973877 -0.0 0.5363602638244629 0.5556380748748779 0 1.0 0 0.0 0 0.0 0 0.0 -1.5143388509750366 -0.027609169483184814 -0.2839455306529999 0.28357797861099243 -0.9589220881462097 -0.0 0.05574190616607666 0.5862020254135132 0 1.0 0 0.0 0 0.0 0 0.0 -1.509281873703003 -0.026171639561653137 -0.2839455306529999 0.26462599635124207 -0.964323878288269 -0.0 0.05254825949668884 0.5886538028717041 0 1.0 0 0.0 0 0.0 0 0.0 -1.509281873703003 -0.026171639561653137 0.21605446934700012 0.26462599635124207 -0.964323878288269 -0.0 0.5218374133110046 0.39463919401168823 0 1.0 0 0.0 0 0.0 0 0.0 0.5761044025421143 -0.12946023046970367 -0.2839455306529999 0.8250373601913452 -0.5650196671485901 -0.0 0.9081569910049438 0.431171178817749 0 1.0 0 0.0 0 0.0 0 0.0 0.5805556774139404 -0.12243308126926422 -0.2839455306529999 0.8640400171279907 -0.503372311592102 -0.0 0.9056787490844727 0.4378116726875305 0 1.0 0 0.0 0 0.0 0 0.0 0.5805556774139404 -0.12243308126926422 0.21605446934700012 0.8640400171279907 -0.503372311592102 -0.0 0.5865741968154907 0.2985714077949524 0 1.0 0 0.0 0 0.0 0 0.0 1.0428638458251953 0.11974316835403442 -0.2839455306529999 -0.19602037966251373 -0.9805902242660522 -0.0 0.9701930284500122 0.7229883670806885 0 1.0 0 0.0 0 0.0 0 0.0 1.0474414825439453 0.11866196990013123 -0.2839455306529999 -0.2641376852989197 -0.964476466178894 -0.0 0.9668347239494324 0.7213927507400513 0 1.0 0 0.0 0 0.0 0 0.0 1.0474414825439453 0.11866196990013123 0.21605446934700012 -0.2641376852989197 -0.964476466178894 -0.0 0.5013262033462524 0.5584465265274048 0 1.0 0 0.0 0 0.0 0 0.0 1.7861692905426025 -0.0992220863699913 -0.2839455306529999 0.8511307239532471 0.5248878598213196 -0.0 0.9705733060836792 0.5936467051506042 0 1.0 0 0.0 0 0.0 0 0.0 1.7855417728424072 -0.09813116490840912 -0.2839455306529999 0.8817102313041687 0.47172459959983826 -0.0 0.9709528684616089 0.5950659513473511 0 1.0 0 0.0 0 0.0 0 0.0 1.7855417728424072 -0.09813116490840912 0.21605446934700012 0.8817102313041687 0.47172459959983826 -0.0 0.5011327862739563 0.43191802501678467 0 1.0 0 0.0 0 0.0 0 0.0 0.26895809173583984 -0.12518896162509918 -0.2839455306529999 -0.8221076130867004 -0.5692922472953796 -0.0 0.07005178928375244 0.4421687126159668 0 1.0 0 0.0 0 0.0 0 0.0 0.2740015983581543 -0.1320118010044098 -0.2839455306529999 -0.7854243516921997 -0.6189458966255188 -0.0 0.06747433543205261 0.43550050258636475 0 1.0 0 0.0 0 0.0 0 0.0 0.2740015983581543 -0.1320118010044098 0.21605446934700012 -0.7854243516921997 -0.6189458966255188 -0.0 0.38457003235816956 0.29679185152053833 0 1.0 0 0.0 0 0.0 0 0.0 -1.0979652404785156 0.11629891395568848 -0.2839455306529999 0.3577989935874939 -0.9337748289108276 -0.0 0.04671713709831238 0.7463663816452026 0 1.0 0 0.0 0 0.0 0 0.0 -1.092839002609253 0.11803928017616272 -0.2839455306529999 0.2850123643875122 -0.9584948420524597 -0.0 0.0427783727645874 0.7486751079559326 0 1.0 0 0.0 0 0.0 0 0.0 -1.092839002609253 0.11803928017616272 0.21605446934700012 0.2850123643875122 -0.9584948420524597 -0.0 0.5333884954452515 0.553887128829956 0 1.0 0 0.0 0 0.0 0 0.0 -1.5190016031265259 -0.029041841626167297 -0.2839455306529999 0.30545976758003235 -0.9521775245666504 -0.0 0.05865311622619629 0.5837885141372681 0 1.0 0 0.0 0 0.0 0 0.0 -1.5143388509750366 -0.027609169483184814 -0.2839455306529999 0.28357797861099243 -0.9589220881462097 -0.0 0.05574190616607666 0.5862020254135132 0 1.0 0 0.0 0 0.0 0 0.0 -1.5143388509750366 -0.027609169483184814 0.21605446934700012 0.28357797861099243 -0.9589220881462097 -0.0 0.5185067653656006 0.39258718490600586 0 1.0 0 0.0 0 0.0 0 0.0 1.786864995956421 -0.10027652233839035 -0.2839455306529999 0.8176214098930359 0.5757316946983337 -0.0 0.9701488018035889 0.5922689437866211 0 1.0 0 0.0 0 0.0 0 0.0 1.7861692905426025 -0.0992220863699913 -0.2839455306529999 0.8511307239532471 0.5248878598213196 -0.0 0.9705733060836792 0.5936467051506042 0 1.0 0 0.0 0 0.0 0 0.0 1.7861692905426025 -0.0992220863699913 0.21605446934700012 0.8511307239532471 0.5248878598213196 -0.0 0.5015394687652588 0.43053603172302246 0 1.0 0 0.0 0 0.0 0 0.0 1.008134126663208 0.11852577328681946 -0.2839455306529999 0.26499220728874207 -0.964232325553894 -0.0 0.9962847232818604 0.7230038642883301 0 1.0 0 0.0 0 0.0 0 0.0 1.0129599571228027 0.11966654658317566 -0.2839455306529999 0.19583727419376373 -0.9806207418441772 -0.0 0.9926527738571167 0.7242611050605774 0 1.0 0 0.0 0 0.0 0 0.0 1.0129599571228027 0.11966654658317566 0.21605446934700012 0.19583727419376373 -0.9806207418441772 -0.0 1.4812134504318237 0.5605089664459229 0 1.0 0 0.0 0 0.0 0 0.0 -1.102933406829834 0.11417180299758911 -0.2839455306529999 0.4286935031414032 -0.903439462184906 -0.0 0.050466328859329224 0.7435793876647949 0 1.0 0 0.0 0 0.0 0 0.0 -1.0979652404785156 0.11629891395568848 -0.2839455306529999 0.3577989935874939 -0.9337748289108276 -0.0 0.04671713709831238 0.7463663816452026 0 1.0 0 0.0 0 0.0 0 0.0 -1.0979652404785156 0.11629891395568848 0.21605446934700012 0.3577989935874939 -0.9337748289108276 -0.0 0.5305119752883911 0.5517319440841675 0 1.0 0 0.0 0 0.0 0 0.0 -1.5232704877853394 -0.030469655990600586 -0.2839455306529999 0.33097323775291443 -0.9436323046684265 -0.0 0.06128603219985962 0.5814216136932373 0 1.0 0 0.0 0 0.0 0 0.0 -1.5190016031265259 -0.029041841626167297 -0.2839455306529999 0.30545976758003235 -0.9521775245666504 -0.0 0.05865311622619629 0.5837885141372681 0 1.0 0 0.0 0 0.0 0 0.0 -1.5190016031265259 -0.029041841626167297 0.21605446934700012 0.30545976758003235 -0.9521775245666504 -0.0 0.5154390335083008 0.39060717821121216 0 1.0 0 0.0 0 0.0 0 0.0 0.5710597038269043 -0.13628791272640228 -0.2839455306529999 0.7834406495094299 -0.6214483976364136 -0.0 0.9108988046646118 0.4247055649757385 0 1.0 0 0.0 0 0.0 0 0.0 0.5761044025421143 -0.12946023046970367 -0.2839455306529999 0.8250373601913452 -0.5650196671485901 -0.0 0.9081569910049438 0.431171178817749 0 1.0 0 0.0 0 0.0 0 0.0 0.5761044025421143 -0.12946023046970367 0.21605446934700012 0.8250373601913452 -0.5650196671485901 -0.0 0.5848962068557739 0.2907968759536743 0 1.0 0 0.0 0 0.0 0 0.0 1.0474414825439453 0.11866196990013123 -0.2839455306529999 -0.2641376852989197 -0.964476466178894 -0.0 0.9668347239494324 0.7213927507400513 0 1.0 0 0.0 0 0.0 0 0.0 1.0518927574157715 0.11727187037467957 -0.2839455306529999 -0.3320719003677368 -0.9432355761528015 -0.0 0.9636092185974121 0.7194227576255798 0 1.0 0 0.0 0 0.0 0 0.0 1.0518927574157715 0.11727187037467957 0.21605446934700012 -0.3320719003677368 -0.9432355761528015 -0.0 0.503910481929779 0.5568075776100159 0 1.0 0 0.0 0 0.0 0 0.0 -1.6437366008758545 -0.03031519055366516 -0.2839455306529999 -0.8774986863136292 0.47950682044029236 -0.0 0.1281072497367859 0.5605101585388184 0 1.0 0 0.0 0 0.0 0 0.0 -1.6459330320358276 -0.03457307815551758 -0.2839455306529999 -0.8994414806365967 0.4369945228099823 -0.0 0.12858033180236816 0.5556603074073792 0 1.0 0 0.0 0 0.0 0 0.0 -1.6459330320358276 -0.03457307815551758 0.21605446934700012 -0.8994414806365967 0.4369945228099823 -0.0 0.44145694375038147 0.39193618297576904 0 1.0 0 0.0 0 0.0 0 0.0 1.7876288890838623 -0.10129447281360626 -0.2839455306529999 0.7817316055297852 0.6235846877098083 -0.0 0.9696797132492065 0.5909324884414673 0 1.0 0 0.0 0 0.0 0 0.0 1.786864995956421 -0.10027652233839035 -0.2839455306529999 0.8176214098930359 0.5757316946983337 -0.0 0.9701488018035889 0.5922689437866211 0 1.0 0 0.0 0 0.0 0 0.0 1.786864995956421 -0.10027652233839035 0.21605446934700012 0.8176214098930359 0.5757011771202087 -0.0 0.5019909143447876 0.4292007088661194 0 1.0 0 0.0 0 0.0 0 0.0 0.2740015983581543 -0.1320118010044098 -0.2839455306529999 -0.7854243516921997 -0.6189458966255188 -0.0 0.06747433543205261 0.43550050258636475 0 1.0 0 0.0 0 0.0 0 0.0 0.27947092056274414 -0.13852813839912415 -0.2839455306529999 -0.7459334135055542 -0.6659749150276184 -0.0 0.06470856070518494 0.42908698320388794 0 1.0 0 0.0 0 0.0 0 0.0 0.27947092056274414 -0.13852813839912415 0.21605446934700012 -0.7459334135055542 -0.6659749150276184 -0.0 0.38661396503448486 0.28905969858169556 0 1.0 0 0.0 0 0.0 0 0.0 -1.1077433824539185 0.11165794730186462 -0.2839455306529999 0.49647510051727295 -0.8680074214935303 -0.0 0.05401936173439026 0.7403191328048706 0 1.0 0 0.0 0 0.0 0 0.0 -1.102933406829834 0.11417180299758911 -0.2839455306529999 0.4286935031414032 -0.903439462184906 -0.0 0.050466328859329224 0.7435793876647949 0 1.0 0 0.0 0 0.0 0 0.0 -1.102933406829834 0.11417180299758911 0.21605446934700012 0.4286935031414032 -0.903439462184906 -0.0 0.5277293920516968 0.5491690635681152 0 1.0 0 0.0 0 0.0 0 0.0 1.8486864566802979 -0.10128353536128998 -0.2839455306529999 -0.33594775199890137 0.9418622255325317 -0.0 0.9314653873443604 0.5846927165985107 0 1.0 0 0.0 0 0.0 0 0.0 1.844451665878296 -0.10279404371976852 -0.2839455306529999 -0.32862329483032227 0.9444258213043213 -0.0 0.934057891368866 0.5834326148033142 0 1.0 0 0.0 0 0.0 0 0.0 1.844451665878296 -0.10279404371976852 0.21605446934700012 -0.32862329483032227 0.9444258213043213 -0.0 0.537887454032898 0.42787182331085205 0 1.0 0 0.0 0 0.0 0 0.0 1.0034639835357666 0.11705905199050903 -0.2839455306529999 0.334574431180954 -0.9423505067825317 -0.0 0.9997810125350952 0.7213302850723267 0 1.0 0 0.0 0 0.0 0 0.0 1.008134126663208 0.11852577328681946 -0.2839455306529999 0.26499220728874207 -0.964232325553894 -0.0 0.9962847232818604 0.7230038642883301 0 1.0 0 0.0 0 0.0 0 0.0 1.008134126663208 0.11852577328681946 0.21605446934700012 0.26499220728874207 -0.964232325553894 -0.0 1.478376030921936 0.5593962669372559 0 1.0 0 0.0 0 0.0 0 0.0 -1.1123952865600586 0.10875734686851501 -0.2839455306529999 0.5601367354393005 -0.8283944129943848 -0.0 0.05737152695655823 0.7365900278091431 0 1.0 0 0.0 0 0.0 0 0.0 -1.1077433824539185 0.11165794730186462 -0.2839455306529999 0.49647510051727295 -0.8680074214935303 -0.0 0.05401936173439026 0.7403191328048706 0 1.0 0 0.0 0 0.0 0 0.0 -1.1077433824539185 0.11165794730186462 0.21605446934700012 0.49647510051727295 -0.8680074214935303 -0.0 0.5250393152236938 0.5461939573287964 0 1.0 0 0.0 0 0.0 0 0.0 -1.527145266532898 -0.031892597675323486 -0.2839455306529999 0.36106449365615845 -0.9325235486030579 -0.0 0.0636448860168457 0.5791078805923462 0 1.0 0 0.0 0 0.0 0 0.0 -1.5232704877853394 -0.030469655990600586 -0.2839455306529999 0.33097323775291443 -0.9436323046684265 -0.0 0.06128603219985962 0.5814216136932373 0 1.0 0 0.0 0 0.0 0 0.0 -1.5232704877853394 -0.030469655990600586 0.21605446934700012 0.33097323775291443 -0.9436323046684265 -0.0 0.5126344561576843 0.38869017362594604 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.9939878582954407 0.10940885543823242 -0.0 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.8486864566802979 -0.10128353536128998 -0.2839455306529999 0.9939878582954407 0.10940885543823242 -0.0 0.9314653873443604 0.5846927165985107 0 1.0 0 0.0 0 0.0 0 0.0 1.8486864566802979 -0.10128353536128998 0.21605446934700012 0.9939878582954407 0.10940885543823242 -0.0 0.5403105616569519 0.4299470782279968 0 1.0 0 0.0 0 0.0 0 0.0 0.5654213428497314 -0.14291614294052124 -0.2839455306529999 0.7402264475822449 -0.6723227500915527 -0.0 0.9139134883880615 0.4184088706970215 0 1.0 0 0.0 0 0.0 0 0.0 0.5710597038269043 -0.13628791272640228 -0.2839455306529999 0.7834406495094299 -0.6214483976364136 -0.0 0.9108988046646118 0.4247055649757385 0 1.0 0 0.0 0 0.0 0 0.0 0.5710597038269043 -0.13628791272640228 0.21605446934700012 0.7834406495094299 -0.6214483976364136 -0.0 0.5828356146812439 0.2830563187599182 0 1.0 0 0.0 0 0.0 0 0.0 1.0518927574157715 0.11727187037467957 -0.2839455306529999 -0.3320719003677368 -0.9432355761528015 -0.0 0.9636092185974121 0.7194227576255798 0 1.0 0 0.0 0 0.0 0 0.0 1.0562174320220947 0.11557283997535706 -0.2839455306529999 -0.3988158702850342 -0.9170202016830444 -0.0 0.9605203866958618 0.7170834541320801 0 1.0 0 0.0 0 0.0 0 0.0 1.0562174320220947 0.11557283997535706 0.21605446934700012 -0.3988158702850342 -0.9170202016830444 -0.0 0.5064213275909424 0.5548363924026489 0 1.0 0 0.0 0 0.0 0 0.0 -1.2338197231292725 0.10938003659248352 -0.2839455306529999 -0.9079561829566956 0.4190496504306793 -0.0 0.13615745306015015 0.6973543167114258 0 1.0 0 0.0 0 0.0 0 0.0 -1.2384533882141113 0.09834310412406921 -0.2839455306529999 -0.9342936277389526 0.3564561903476715 -0.0 0.1368536651134491 0.685250997543335 0 1.0 0 0.0 0 0.0 0 0.0 -1.2384533882141113 0.09834310412406921 0.21605446934700012 -0.9342936277389526 0.3564561903476715 -0.0 0.4558292329311371 0.5193195939064026 0 1.0 0 0.0 0 0.0 0 0.0 -1.4252455234527588 -0.030664265155792236 -0.2839455306529999 -0.99993896484375 0.009704886004328728 -0.0 0.9976453185081482 0.5883469581604004 0 1.0 0 0.0 0 0.0 0 0.0 -1.4253257513046265 -0.03608603775501251 -0.2839455306529999 -0.999786376953125 0.02047792077064514 -0.0 0.9977109432220459 0.581652045249939 0 1.0 0 0.0 0 0.0 0 0.0 -1.4253257513046265 -0.03608603775501251 0.21605446934700012 -0.999786376953125 0.02047792077064514 -0.0 0.5779449343681335 0.3925821781158447 0 1.0 0 0.0 0 0.0 0 0.0 0.27947092056274414 -0.13852813839912415 -0.2839455306529999 -0.7459334135055542 -0.6659749150276184 -0.0 0.06470856070518494 0.42908698320388794 0 1.0 0 0.0 0 0.0 0 0.0 0.2853658199310303 -0.14473800361156464 -0.2839455306529999 -0.7042146325111389 -0.7099520564079285 -0.0 0.06174713373184204 0.42292243242263794 0 1.0 0 0.0 0 0.0 0 0.0 0.2853658199310303 -0.14473800361156464 0.21605446934700012 -0.7042146325111389 -0.7099520564079285 -0.0 0.3889842629432678 0.28147590160369873 0 1.0 0 0.0 0 0.0 0 0.0 1.7884604930877686 -0.10227593779563904 -0.2839455306529999 0.7437971234321594 0.6683858633041382 -0.0 0.9691663384437561 0.5896375179290771 0 1.0 0 0.0 0 0.0 0 0.0 1.7876288890838623 -0.10129447281360626 -0.2839455306529999 0.7817316055297852 0.6235846877098083 -0.0 0.9696797132492065 0.5909324884414673 0 1.0 0 0.0 0 0.0 0 0.0 1.7876288890838623 -0.10129447281360626 0.21605446934700012 0.7817316055297852 0.6235846877098083 -0.0 0.5024871230125427 0.42791253328323364 0 1.0 0 0.0 0 0.0 0 0.0 1.6840846538543701 -0.10156569629907608 -0.2839455306529999 -0.9982909560203552 -0.05813775956630707 -0.0 0.03666028380393982 0.589532196521759 0 1.0 0 0.0 0 0.0 0 0.0 1.684413194656372 -0.10661531984806061 -0.2839455306529999 -0.9973143935203552 -0.07306130975484848 -0.0 0.03627842664718628 0.5834358334541321 0 1.0 0 0.0 0 0.0 0 0.0 1.684413194656372 -0.10661531984806061 0.21605446934700012 -0.9973143935203552 -0.07306130975484848 -0.0 0.43657612800598145 0.42723244428634644 0 1.0 0 0.0 0 0.0 0 0.0 0.9989495277404785 0.11526638269424438 -0.2839455306529999 0.4033631384372711 -0.9150059223175049 -0.0 1.0031362771987915 0.7192459106445312 0 1.0 0 0.0 0 0.0 0 0.0 1.0034639835357666 0.11705905199050903 -0.2839455306529999 0.334574431180954 -0.9423505067825317 -0.0 0.9997810125350952 0.7213302850723267 0 1.0 0 0.0 0 0.0 0 0.0 1.0034639835357666 0.11705905199050903 0.21605446934700012 0.334574431180954 -0.9423505067825317 -0.0 1.4756214618682861 0.5579229593276978 0 1.0 0 0.0 0 0.0 0 0.0 -1.1168891191482544 0.1054699718952179 -0.2839455306529999 0.6188238263130188 -0.7854853868484497 -0.0 0.06051981449127197 0.7323944568634033 0 1.0 0 0.0 0 0.0 0 0.0 -1.1123952865600586 0.10875734686851501 -0.2839455306529999 0.5601367354393005 -0.8283944129943848 -0.0 0.05737152695655823 0.7365900278091431 0 1.0 0 0.0 0 0.0 0 0.0 -1.1123952865600586 0.10875734686851501 0.21605446934700012 0.5601367354393005 -0.8283944129943848 -0.0 0.5224400758743286 0.5428013801574707 0 1.0 0 0.0 0 0.0 0 0.0 -1.5306259393692017 -0.03331068158149719 -0.2839455306529999 0.3968626856803894 -0.9178441762924194 -0.0 0.06573435664176941 0.5768525004386902 0 1.0 0 0.0 0 0.0 0 0.0 -1.527145266532898 -0.031892597675323486 -0.2839455306529999 0.36106449365615845 -0.9325235486030579 -0.0 0.0636448860168457 0.5791078805923462 0 1.0 0 0.0 0 0.0 0 0.0 -1.527145266532898 -0.031892597675323486 0.21605446934700012 0.36106449365615845 -0.9325235486030579 -0.0 0.5100929737091064 0.38682734966278076 0 1.0 0 0.0 0 0.0 0 0.0 0.5591895580291748 -0.14934493601322174 -0.2839455306529999 0.6963713765144348 -0.7176427245140076 -0.0 0.9172108173370361 0.41227811574935913 0 1.0 0 0.0 0 0.0 0 0.0 0.5654213428497314 -0.14291614294052124 -0.2839455306529999 0.7402264475822449 -0.6723227500915527 -0.0 0.9139134883880615 0.4184088706970215 0 1.0 0 0.0 0 0.0 0 0.0 0.5654213428497314 -0.14291614294052124 0.21605446934700012 0.7402264475822449 -0.6723227500915527 -0.0 0.5803650617599487 0.27534884214401245 0 1.0 0 0.0 0 0.0 0 0.0 1.0562174320220947 0.11557283997535706 -0.2839455306529999 -0.3988158702850342 -0.9170202016830444 -0.0 0.9605203866958618 0.7170834541320801 0 1.0 0 0.0 0 0.0 0 0.0 1.0604157447814941 0.11356490850448608 -0.2839455306529999 -0.46327096223831177 -0.886196494102478 -0.0 0.9575706124305725 0.7143791913986206 0 1.0 0 0.0 0 0.0 0 0.0 1.0604157447814941 0.11356490850448608 0.21605446934700012 -0.46327096223831177 -0.886196494102478 -0.0 0.508860170841217 0.5525315999984741 0 1.0 0 0.0 0 0.0 0 0.0 0.2853658199310303 -0.14473800361156464 -0.2839455306529999 -0.7042146325111389 -0.7099520564079285 -0.0 0.06174713373184204 0.42292243242263794 0 1.0 0 0.0 0 0.0 0 0.0 0.2916862964630127 -0.15064138174057007 -0.2839455306529999 -0.6608172655105591 -0.7505111694335938 -0.0 0.058582156896591187 0.4170032739639282 0 1.0 0 0.0 0 0.0 0 0.0 0.2916862964630127 -0.15064138174057007 0.21605446934700012 -0.6608172655105591 -0.7505111694335938 -0.0 0.39170393347740173 0.2740418314933777 0 1.0 0 0.0 0 0.0 0 0.0 -1.1212248802185059 0.10179585218429565 -0.2839455306529999 0.6721396446228027 -0.7404095530509949 -0.0 0.06346258521080017 0.7277339696884155 0 1.0 0 0.0 0 0.0 0 0.0 -1.1168891191482544 0.1054699718952179 -0.2839455306529999 0.6188238263130188 -0.7854853868484497 -0.0 0.06051981449127197 0.7323944568634033 0 1.0 0 0.0 0 0.0 0 0.0 -1.1168891191482544 0.1054699718952179 0.21605446934700012 0.6188238263130188 -0.7854853868484497 -0.0 0.5199300646781921 0.5389848947525024 0 1.0 0 0.0 0 0.0 0 0.0 -1.5337127447128296 -0.03472389280796051 -0.2839455306529999 0.44001588225364685 -0.8979766368865967 -0.0 0.06755927205085754 0.5746594667434692 0 1.0 0 0.0 0 0.0 0 0.0 -1.5306259393692017 -0.03331068158149719 -0.2839455306529999 0.3968626856803894 -0.9178441762924194 -0.0 0.06573435664176941 0.5768525004386902 0 1.0 0 0.0 0 0.0 0 0.0 -1.5306259393692017 -0.03331068158149719 0.21605446934700012 0.3968626856803894 -0.9178441762924194 -0.0 0.5078138709068298 0.3850102424621582 0 1.0 0 0.0 0 0.0 0 0.0 1.789360761642456 -0.10322091728448868 -0.2839455306529999 0.7044587731361389 0.7097384333610535 -0.0 0.9686083793640137 0.5883837938308716 0 1.0 0 0.0 0 0.0 0 0.0 1.7884604930877686 -0.10227593779563904 -0.2839455306529999 0.7437971234321594 0.6683858633041382 -0.0 0.9691663384437561 0.5896375179290771 0 1.0 0 0.0 0 0.0 0 0.0 1.7884604930877686 -0.10227593779563904 0.21605446934700012 0.7437971234321594 0.6683858633041382 -0.0 0.5030277371406555 0.4266718029975891 0 1.0 0 0.0 0 0.0 0 0.0 0.8790280818939209 0.11538678407669067 -0.2839455306529999 -0.8645283579826355 0.5025787949562073 -0.0 0.08057984709739685 0.6942784786224365 0 1.0 0 0.0 0 0.0 0 0.0 0.8733217716217041 0.10470986366271973 -0.2839455306529999 -0.8977630138397217 0.44041261076927185 -0.0 0.08267199993133545 0.6824241280555725 0 1.0 0 0.0 0 0.0 0 0.0 0.8733217716217041 0.10470986366271973 0.21605446934700012 -0.8977630138397217 0.44041261076927185 -0.0 0.40601009130477905 0.5421374440193176 0 1.0 0 0.0 0 0.0 0 0.0 -1.6459330320358276 -0.03457307815551758 -0.2839455306529999 -0.8994414806365967 0.4369945228099823 -0.0 0.12858033180236816 0.5556603074073792 0 1.0 0 0.0 0 0.0 0 0.0 -1.6479202508926392 -0.03892582654953003 -0.2839455306529999 -0.9193701148033142 0.39335307478904724 -0.0 0.12894189357757568 0.5507911443710327 0 1.0 0 0.0 0 0.0 0 0.0 -1.6479202508926392 -0.03892582654953003 0.21605446934700012 -0.9193701148033142 0.39335307478904724 -0.0 0.4402400553226471 0.3875800371170044 0 1.0 0 0.0 0 0.0 0 0.0 1.844451665878296 -0.10279404371976852 -0.2839455306529999 -0.32862329483032227 0.9444258213043213 -0.0 0.934057891368866 0.5834326148033142 0 1.0 0 0.0 0 0.0 0 0.0 1.8403871059417725 -0.1041732057929039 -0.2839455306529999 -0.31321147084236145 0.9496444463729858 -0.0 0.9365617036819458 0.5822762250900269 0 1.0 0 0.0 0 0.0 0 0.0 1.8403871059417725 -0.1041732057929039 0.21605446934700012 -0.31321147084236145 0.9496444463729858 -0.0 0.5355287790298462 0.42596107721328735 0 1.0 0 0.0 0 0.0 0 0.0 -1.1254024505615234 0.09773498773574829 -0.2839455306529999 0.7198401093482971 -0.6941129565238953 -0.0 0.0661996603012085 0.7226083278656006 0 1.0 0 0.0 0 0.0 0 0.0 -1.1212248802185059 0.10179585218429565 -0.2839455306529999 0.6721396446228027 -0.7404095530509949 -0.0 0.06346258521080017 0.7277339696884155 0 1.0 0 0.0 0 0.0 0 0.0 -1.1212248802185059 0.10179585218429565 0.21605446934700012 0.6721396446228027 -0.7404095530509949 -0.0 0.5175074934959412 0.5347373485565186 0 1.0 0 0.0 0 0.0 0 0.0 0.5523643493652344 -0.1555742621421814 -0.2839455306529999 0.6481521129608154 -0.7614978551864624 -0.0 0.9208009243011475 0.40631377696990967 0 1.0 0 0.0 0 0.0 0 0.0 0.5591895580291748 -0.14934493601322174 -0.2839455306529999 0.6963713765144348 -0.7176427245140076 -0.0 0.9172108173370361 0.41227811574935913 0 1.0 0 0.0 0 0.0 0 0.0 0.5591895580291748 -0.14934493601322174 0.21605446934700012 0.6964018940925598 -0.7176427245140076 -0.0 0.5774534940719604 0.2676786184310913 0 1.0 0 0.0 0 0.0 0 0.0 -1.2384533882141113 0.09834310412406921 -0.2839455306529999 -0.9342936277389526 0.3564561903476715 -0.0 0.1368536651134491 0.685250997543335 0 1.0 0 0.0 0 0.0 0 0.0 -1.2424691915512085 0.08667618036270142 -0.2839455306529999 -0.9551683068275452 0.29602953791618347 -0.0 0.13713571429252625 0.6726433038711548 0 1.0 0 0.0 0 0.0 0 0.0 -1.2424691915512085 0.08667618036270142 0.21605446934700012 -0.9551683068275452 0.29602953791618347 -0.0 0.45347699522972107 0.5076109170913696 0 1.0 0 0.0 0 0.0 0 0.0 0.2916862964630127 -0.15064138174057007 -0.2839455306529999 -0.6608172655105591 -0.7505111694335938 -0.0 0.058582156896591187 0.4170032739639282 0 1.0 0 0.0 0 0.0 0 0.0 0.2984325885772705 -0.15623830258846283 -0.2839455306529999 -0.616290807723999 -0.7874996066093445 -0.0 0.055205315351486206 0.411327600479126 0 1.0 0 0.0 0 0.0 0 0.0 0.2984325885772705 -0.15623830258846283 0.21605446934700012 -0.616290807723999 -0.7874996066093445 -0.0 0.3947984278202057 0.26676231622695923 0 1.0 0 0.0 0 0.0 0 0.0 0.9945907592773438 0.11314776539802551 -0.2839455306529999 0.47025972604751587 -0.8825037479400635 -0.0 0.006345778703689575 0.7167558670043945 0 1.0 0 0.0 0 0.0 0 0.0 0.9989495277404785 0.11526638269424438 -0.2839455306529999 0.4033631384372711 -0.9150059223175049 -0.0 0.003136277198791504 0.7192459106445312 0 1.0 0 0.0 0 0.0 0 0.0 0.9989495277404785 0.11526638269424438 0.21605446934700012 0.4033631384372711 -0.9150059223175049 -0.0 0.47294849157333374 0.5560883283615112 0 1.0 0 0.0 0 0.0 0 0.0 -1.536405324935913 -0.036132246255874634 -0.2839455306529999 0.4925687313079834 -0.8702658414840698 -0.0 0.06912404298782349 0.5725313425064087 0 1.0 0 0.0 0 0.0 0 0.0 -1.5337127447128296 -0.03472389280796051 -0.2839455306529999 0.44001588225364685 -0.8979766368865967 -0.0 0.06755927205085754 0.5746594667434692 0 1.0 0 0.0 0 0.0 0 0.0 -1.5337127447128296 -0.03472389280796051 0.21605446934700012 0.44001588225364685 -0.8979766368865967 -0.0 0.5057958364486694 0.3832308053970337 0 1.0 0 0.0 0 0.0 0 0.0 1.7903287410736084 -0.10412941128015518 -0.2839455306529999 0.6643574237823486 0.747398316860199 -0.0 0.9680066108703613 0.5871713161468506 0 1.0 0 0.0 0 0.0 0 0.0 1.789360761642456 -0.10322091728448868 -0.2839455306529999 0.7044587731361389 0.7097384333610535 -0.0 0.9686083793640137 0.5883837938308716 0 1.0 0 0.0 0 0.0 0 0.0 1.789360761642456 -0.10322091728448868 0.21605446934700012 0.7044587731361389 0.7097384333610535 -0.0 0.5036134123802185 0.4254789352416992 0 1.0 0 0.0 0 0.0 0 0.0 1.0604157447814941 0.11356490850448608 -0.2839455306529999 -0.46327096223831177 -0.886196494102478 -0.0 0.9575706124305725 0.7143791913986206 0 1.0 0 0.0 0 0.0 0 0.0 1.0644874572753906 0.11124807596206665 -0.2839455306529999 -0.5246132016181946 -0.8513138294219971 -0.0 0.9547619819641113 0.7113131284713745 0 1.0 0 0.0 0 0.0 0 0.0 1.0644874572753906 0.11124807596206665 0.21605446934700012 -0.5246132016181946 -0.8513138294219971 -0.0 0.5112283229827881 0.5498915910720825 0 1.0 0 0.0 0 0.0 0 0.0 -1.4253257513046265 -0.03608603775501251 -0.2839455306529999 -0.999786376953125 0.02047792077064514 -0.0 0.9977109432220459 0.581652045249939 0 1.0 0 0.0 0 0.0 0 0.0 -1.4254595041275024 -0.04119160771369934 -0.2839455306529999 -0.99945068359375 0.03262428566813469 -0.0 0.9978078603744507 0.5753602981567383 0 1.0 0 0.0 0 0.0 0 0.0 -1.4254595041275024 -0.04119160771369934 0.21605446934700012 -0.99945068359375 0.03262428566813469 -0.0 0.5783491134643555 0.38633376359939575 0 1.0 0 0.0 0 0.0 0 0.0 -1.1294219493865967 0.0932874083518982 -0.2839455306529999 0.765373706817627 -0.6435437798500061 -0.0 0.06873214244842529 0.7170165777206421 0 1.0 0 0.0 0 0.0 0 0.0 -1.1254024505615234 0.09773498773574829 -0.2839455306529999 0.7198401093482971 -0.6941129565238953 -0.0 0.0661996603012085 0.7226083278656006 0 1.0 0 0.0 0 0.0 0 0.0 -1.1254024505615234 0.09773498773574829 0.21605446934700012 0.7198401093482971 -0.6941129565238953 -0.0 0.5151707530021667 0.5300506353378296 0 1.0 0 0.0 0 0.0 0 0.0 1.7913649082183838 -0.10500141978263855 -0.2839455306529999 0.6238288283348083 0.7815485000610352 -0.0 0.9673608541488647 0.5859999656677246 0 1.0 0 0.0 0 0.0 0 0.0 1.7903287410736084 -0.10412941128015518 -0.2839455306529999 0.6643574237823486 0.747398316860199 -0.0 0.9680066108703613 0.5871713161468506 0 1.0 0 0.0 0 0.0 0 0.0 1.7903287410736084 -0.10412941128015518 0.21605446934700012 0.6643574237823486 0.747398316860199 -0.0 0.5042434334754944 0.42433422803878784 0 1.0 0 0.0 0 0.0 0 0.0 0.5449578762054443 -0.16144844889640808 -0.2839455306529999 0.5901364088058472 -0.8072755932807922 -0.0 0.9246793389320374 0.40065115690231323 0 1.0 0 0.0 0 0.0 0 0.0 0.5523643493652344 -0.1555742621421814 -0.2839455306529999 0.6481521129608154 -0.7614978551864624 -0.0 0.9208009243011475 0.40631377696990967 0 1.0 0 0.0 0 0.0 0 0.0 0.5523643493652344 -0.1555742621421814 0.21605446934700012 0.6481521129608154 -0.7614978551864624 -0.0 0.5740653872489929 0.26005619764328003 0 1.0 0 0.0 0 0.0 0 0.0 1.8403871059417725 -0.1041732057929039 -0.2839455306529999 -0.31321147084236145 0.9496444463729858 -0.0 0.9365617036819458 0.5822762250900269 0 1.0 0 0.0 0 0.0 0 0.0 1.8364927768707275 -0.10542101413011551 -0.2839455306529999 -0.29615160822868347 0.9551072716712952 -0.0 0.9389737844467163 0.5812290906906128 0 1.0 0 0.0 0 0.0 0 0.0 1.8364927768707275 -0.10542101413011551 0.21605446934700012 -0.29615160822868347 0.9551072716712952 -0.0 0.5332391262054443 0.42421799898147583 0 1.0 0 0.0 0 0.0 0 0.0 0.2984325885772705 -0.15623830258846283 -0.2839455306529999 -0.616290807723999 -0.7874996066093445 -0.0 0.055205315351486206 0.411327600479126 0 1.0 0 0.0 0 0.0 0 0.0 0.3056044578552246 -0.16152872145175934 -0.2839455306529999 -0.5687734484672546 -0.8224738240242004 -0.0 0.051608264446258545 0.4058956503868103 0 1.0 0 0.0 0 0.0 0 0.0 0.3056044578552246 -0.16152872145175934 0.21605446934700012 -0.5687734484672546 -0.8224738240242004 -0.0 0.39829540252685547 0.2596469521522522 0 1.0 0 0.0 0 0.0 0 0.0 0.9903876781463623 0.1107032299041748 -0.2839455306529999 0.5341349244117737 -0.8453627228736877 -0.0 0.00940614938735962 0.7138638496398926 0 1.0 0 0.0 0 0.0 0 0.0 0.9945907592773438 0.11314776539802551 -0.2839455306529999 0.47025972604751587 -0.8825037479400635 -0.0 0.006345778703689575 0.7167558670043945 0 1.0 0 0.0 0 0.0 0 0.0 0.9945907592773438 0.11314776539802551 0.21605446934700012 0.47025972604751587 -0.8825037479400635 -0.0 0.4703560471534729 0.5538910627365112 0 1.0 0 0.0 0 0.0 0 0.0 -1.1331982612609863 0.08845549821853638 -0.2839455306529999 0.8116397857666016 -0.5841242671012878 -0.0 0.07100096344947815 0.7109781503677368 0 1.0 0 0.0 0 0.0 0 0.0 -1.1294219493865967 0.0932874083518982 -0.2839455306529999 0.765373706817627 -0.6435437798500061 -0.0 0.06873214244842529 0.7170165777206421 0 1.0 0 0.0 0 0.0 0 0.0 -1.1294219493865967 0.0932874083518982 0.21605446934700012 0.765373706817627 -0.6435437798500061 -0.0 0.5129179954528809 0.5249159336090088 0 1.0 0 0.0 0 0.0 0 0.0 -1.5387039184570312 -0.03753572702407837 -0.2839455306529999 0.5629138946533203 -0.82650226354599 -0.0 0.070433109998703 0.5704699754714966 0 1.0 0 0.0 0 0.0 0 0.0 -1.536405324935913 -0.036132246255874634 -0.2839455306529999 0.4925687313079834 -0.8702658414840698 -0.0 0.06912404298782349 0.5725313425064087 0 1.0 0 0.0 0 0.0 0 0.0 -1.536405324935913 -0.036132246255874634 0.21605446934700012 0.4925687313079834 -0.8702658414840698 -0.0 0.5040379166603088 0.3814815282821655 0 1.0 0 0.0 0 0.0 0 0.0 1.0644874572753906 0.11124807596206665 -0.2839455306529999 -0.5246132016181946 -0.8513138294219971 -0.0 0.9547619819641113 0.7113131284713745 0 1.0 0 0.0 0 0.0 0 0.0 1.0684328079223633 0.10862231254577637 -0.2839455306529999 -0.5820184946060181 -0.8131656646728516 -0.0 0.9520952701568604 0.7078877687454224 0 1.0 0 0.0 0 0.0 0 0.0 1.0684328079223633 0.10862231254577637 0.21605446934700012 -0.5820184946060181 -0.8131656646728516 -0.0 0.5135274529457092 0.5469138622283936 0 1.0 0 0.0 0 0.0 0 0.0 -1.1366461515426636 0.08324170112609863 -0.2839455306529999 0.8543656468391418 -0.5196386575698853 -0.0 0.07295101881027222 0.7045143842697144 0 1.0 0 0.0 0 0.0 0 0.0 -1.1331982612609863 0.08845549821853638 -0.2839455306529999 0.8116397857666016 -0.5841242671012878 -0.0 0.07100096344947815 0.7109781503677368 0 1.0 0 0.0 0 0.0 0 0.0 -1.1331982612609863 0.08845549821853638 0.21605446934700012 0.8116397857666016 -0.5841242671012878 -0.0 0.510796844959259 0.5193343758583069 0 1.0 0 0.0 0 0.0 0 0.0 -1.5417808294296265 -0.03986351191997528 -0.2839455306529999 0.6290780305862427 -0.7773369550704956 -0.0 0.07213199138641357 0.5671678185462952 0 1.0 0 0.0 0 0.0 0 0.0 -1.5387039184570312 -0.03753572702407837 -0.2839455306529999 0.5629138946533203 -0.82650226354599 -0.0 0.070433109998703 0.5704699754714966 0 1.0 0 0.0 0 0.0 0 0.0 -1.5387039184570312 -0.03753572702407837 0.21605446934700012 0.5629138946533203 -0.82650226354599 -0.0 0.5025386214256287 0.3797556757926941 0 1.0 0 0.0 0 0.0 0 0.0 1.7924692630767822 -0.10583695024251938 -0.2839455306529999 0.5818048715591431 0.8133182525634766 -0.0 0.9666714072227478 0.5848695635795593 0 1.0 0 0.0 0 0.0 0 0.0 1.7913649082183838 -0.10500141978263855 -0.2839455306529999 0.6238288283348083 0.7815485000610352 -0.0 0.9673608541488647 0.5859999656677246 0 1.0 0 0.0 0 0.0 0 0.0 1.7913649082183838 -0.10500141978263855 0.21605446934700012 0.6238288283348083 0.7815485000610352 -0.0 0.5049180388450623 0.4232381582260132 0 1.0 0 0.0 0 0.0 0 0.0 0.5369820594787598 -0.16681185364723206 -0.2839455306529999 0.5262916684150696 -0.8502761721611023 -0.0 0.9288429021835327 0.3954232335090637 0 1.0 0 0.0 0 0.0 0 0.0 0.5449578762054443 -0.16144844889640808 -0.2839455306529999 0.5901364088058472 -0.8072755932807922 -0.0 0.9246793389320374 0.40065115690231323 0 1.0 0 0.0 0 0.0 0 0.0 0.5449578762054443 -0.16144844889640808 0.21605446934700012 0.5901364088058472 -0.8072755932807922 -0.0 0.5701563954353333 0.25263357162475586 0 1.0 0 0.0 0 0.0 0 0.0 -1.2424691915512085 0.08667618036270142 -0.2839455306529999 -0.9551683068275452 0.29602953791618347 -0.0 0.13713571429252625 0.6726433038711548 0 1.0 0 0.0 0 0.0 0 0.0 -1.245867371559143 0.07437929511070251 -0.2839455306529999 -0.9711599946022034 0.2384105920791626 -0.0 0.13702672719955444 0.659500241279602 0 1.0 0 0.0 0 0.0 0 0.0 -1.245867371559143 0.07437929511070251 0.21605446934700012 -0.9711599946022034 0.2384105920791626 -0.0 0.45135048031806946 0.49517351388931274 0 1.0 0 0.0 0 0.0 0 0.0 -1.6479202508926392 -0.03892582654953003 -0.2839455306529999 -0.9193701148033142 0.39335307478904724 -0.0 0.12894189357757568 0.5507911443710327 0 1.0 0 0.0 0 0.0 0 0.0 -1.6496983766555786 -0.043373435735702515 -0.2839455306529999 -0.9371318817138672 0.3489181101322174 -0.0 0.1291947066783905 0.5459003448486328 0 1.0 0 0.0 0 0.0 0 0.0 -1.6496983766555786 -0.043373435735702515 0.21605446934700012 -0.9371318817138672 0.3489181101322174 -0.0 0.4391138553619385 0.38313859701156616 0 1.0 0 0.0 0 0.0 0 0.0 1.8364927768707275 -0.10542101413011551 -0.2839455306529999 -0.29615160822868347 0.9551072716712952 -0.0 0.9389737844467163 0.5812290906906128 0 1.0 0 0.0 0 0.0 0 0.0 1.8327686786651611 -0.10653747618198395 -0.2839455306529999 -0.2771385908126831 0.9608142375946045 -0.0 0.9412914514541626 0.5802960395812988 0 1.0 0 0.0 0 0.0 0 0.0 1.8327686786651611 -0.10653747618198395 0.21605446934700012 -0.2771385908126831 0.9608142375946045 -0.0 0.5310229659080505 0.4226453900337219 0 1.0 0 0.0 0 0.0 0 0.0 0.3056044578552246 -0.16152872145175934 -0.2839455306529999 -0.5687734484672546 -0.8224738240242004 -0.0 0.051608264446258545 0.4058956503868103 0 1.0 0 0.0 0 0.0 0 0.0 0.31320953369140625 -0.1664518564939499 -0.2839455306529999 -0.5158543586730957 -0.8566545844078064 -0.0 0.047781407833099365 0.400759756565094 0 1.0 0 0.0 0 0.0 0 0.0 0.31320953369140625 -0.1664518564939499 0.21605446934700012 -0.5158543586730957 -0.8566545844078064 -0.0 0.4022355079650879 0.25275760889053345 0 1.0 0 0.0 0 0.0 0 0.0 0.9863402843475342 0.10793274641036987 -0.2839455306529999 0.5941038131713867 -0.8043763637542725 -0.0 0.012314856052398682 0.7105729579925537 0 1.0 0 0.0 0 0.0 0 0.0 0.9903876781463623 0.1107032299041748 -0.2839455306529999 0.5341349244117737 -0.8453627228736877 -0.0 0.00940614938735962 0.7138638496398926 0 1.0 0 0.0 0 0.0 0 0.0 0.9903876781463623 0.1107032299041748 0.21605446934700012 0.5341349244117737 -0.8453627228736877 -0.0 0.46784284710884094 0.5513290166854858 0 1.0 0 0.0 0 0.0 0 0.0 0.31320953369140625 -0.1664518564939499 -0.2839455306529999 -0.5158543586730957 -0.8566545844078064 -0.0 0.047781407833099365 0.400759756565094 0 1.0 0 0.0 0 0.0 0 0.0 0.3212544918060303 -0.1709468960762024 -0.2839455306529999 -0.4601885974407196 -0.8877834677696228 -0.0 0.04371464252471924 0.3959726095199585 0 1.0 0 0.0 0 0.0 0 0.0 0.3212544918060303 -0.1709468960762024 0.21605445444583893 -0.4601885974407196 -0.8877834677696228 -0.0 0.4066609740257263 0.2461605668067932 0 1.0 0 0.0 0 0.0 0 0.0 1.1798405647277832 0.09859970211982727 -0.2839455306529999 0.921262264251709 0.3888668417930603 -0.0 0.8863137364387512 0.667203426361084 0 1.0 0 0.0 0 0.0 0 0.0 1.1742777824401855 0.11057066917419434 -0.2839455306529999 0.8901638984680176 0.45558029413223267 -0.0 0.8878135681152344 0.680391788482666 0 1.0 0 0.0 0 0.0 0 0.0 1.1742777824401855 0.11057066917419434 0.21605446934700012 0.8901638984680176 0.45558029413223267 -0.0 0.5682803988456726 0.5411200523376465 0 1.0 0 0.0 0 0.0 0 0.0 -1.139765739440918 0.07764601707458496 -0.2839455306529999 0.8903164863586426 -0.45530563592910767 -0.0 0.07459104061126709 0.6976232528686523 0 1.0 0 0.0 0 0.0 0 0.0 -1.1366461515426636 0.08324170112609863 -0.2839455306529999 0.8543656468391418 -0.5196386575698853 -0.0 0.07295101881027222 0.7045143842697144 0 1.0 0 0.0 0 0.0 0 0.0 -1.1366461515426636 0.08324170112609863 0.21605446934700012 0.8543656468391418 -0.5196386575698853 -0.0 0.5088552236557007 0.5133059024810791 0 1.0 0 0.0 0 0.0 0 0.0 -1.5445903539657593 -0.04229345917701721 -0.2839455306529999 0.6803796291351318 -0.7328409552574158 -0.0 0.07364055514335632 0.5637936592102051 0 1.0 0 0.0 0 0.0 0 0.0 -1.5417808294296265 -0.03986351191997528 -0.2839455306529999 0.6290780305862427 -0.7773369550704956 -0.0 0.07213199138641357 0.5671678185462952 0 1.0 0 0.0 0 0.0 0 0.0 -1.5417808294296265 -0.03986351191997528 0.21605446934700012 0.6290780305862427 -0.7773369550704956 -0.0 0.5005322694778442 0.37691736221313477 0 1.0 0 0.0 0 0.0 0 0.0 1.793628454208374 -0.1066201776266098 -0.2839455306529999 0.5360575914382935 0.844141960144043 -0.0 0.9659465551376343 0.5838009119033813 0 1.0 0 0.0 0 0.0 0 0.0 1.7924692630767822 -0.10583695024251938 -0.2839455306529999 0.5818048715591431 0.8133182525634766 -0.0 0.9666714072227478 0.5848695635795593 0 1.0 0 0.0 0 0.0 0 0.0 1.7924692630767822 -0.10583695024251938 0.21605446934700012 0.5818048715591431 0.8133182525634766 -0.0 0.5056371688842773 0.4221910834312439 0 1.0 0 0.0 0 0.0 0 0.0 1.0684328079223633 0.10862231254577637 -0.2839455306529999 -0.5820184946060181 -0.8131656646728516 -0.0 0.9520952701568604 0.7078877687454224 0 1.0 0 0.0 0 0.0 0 0.0 1.072251558303833 0.10568764805793762 -0.2839455306529999 -0.634968101978302 -0.772515058517456 -0.0 0.9495713114738464 0.7041049003601074 0 1.0 0 0.0 0 0.0 0 0.0 1.072251558303833 0.10568764805793762 0.21605446934700012 -0.634968101978302 -0.772515058517456 -0.0 0.5157588124275208 0.5435953140258789 0 1.0 0 0.0 0 0.0 0 0.0 -1.4254595041275024 -0.04119160771369934 -0.2839455306529999 -0.99945068359375 0.03262428566813469 -0.0 0.9978078603744507 0.5753602981567383 0 1.0 0 0.0 0 0.0 0 0.0 -1.4256469011306763 -0.04598096013069153 -0.2839455306529999 -0.9989013075828552 0.046418651938438416 -0.0 0.9979357123374939 0.5694729089736938 0 1.0 0 0.0 0 0.0 0 0.0 -1.4256469011306763 -0.04598096013069153 0.21605446934700012 -0.9989013075828552 0.046418651938438416 -0.0 0.5786933898925781 0.3804762363433838 0 1.0 0 0.0 0 0.0 0 0.0 1.8327686786651611 -0.10653747618198395 -0.2839455306529999 -0.2771385908126831 0.9608142375946045 -0.0 0.9412914514541626 0.5802960395812988 0 1.0 0 0.0 0 0.0 0 0.0 1.8292148113250732 -0.10752259194850922 -0.2839455306529999 -0.2558977007865906 0.9666737914085388 -0.0 0.9435123205184937 0.579481840133667 0 1.0 0 0.0 0 0.0 0 0.0 1.8292148113250732 -0.10752259194850922 0.21605446934700012 -0.2558977007865906 0.9666737914085388 -0.0 0.5288844108581543 0.4212455749511719 0 1.0 0 0.0 0 0.0 0 0.0 -1.14255690574646 0.07166844606399536 -0.2839455306529999 0.9197973608970642 -0.39231544733047485 -0.0 0.07592976093292236 0.6903005838394165 0 1.0 0 0.0 0 0.0 0 0.0 -1.139765739440918 0.07764601707458496 -0.2839455306529999 0.8903164863586426 -0.45530563592910767 -0.0 0.07459104061126709 0.6976232528686523 0 1.0 0 0.0 0 0.0 0 0.0 -1.139765739440918 0.07764601707458496 0.21605446934700012 0.8903164863586426 -0.45530563592910767 -0.0 0.5070923566818237 0.5068193078041077 0 1.0 0 0.0 0 0.0 0 0.0 0.5284371376037598 -0.17166444659233093 -0.2839455306529999 0.4622333347797394 -0.886745810508728 -0.0 0.9333038926124573 0.3906322717666626 0 1.0 0 0.0 0 0.0 0 0.0 0.5369820594787598 -0.16681185364723206 -0.2839455306529999 0.5262916684150696 -0.8502761721611023 -0.0 0.9288429021835327 0.3954232335090637 0 1.0 0 0.0 0 0.0 0 0.0 0.5369820594787598 -0.16681185364723206 0.21605446934700012 0.5262916684150696 -0.8502761721611023 -0.0 0.5656810402870178 0.24556457996368408 0 1.0 0 0.0 0 0.0 0 0.0 -1.0014448165893555 0.07659512758255005 -0.2839455306529999 -0.9058809280395508 -0.42347484827041626 -0.0 0.9746454954147339 0.6996514797210693 0 1.0 0 0.0 0 0.0 0 0.0 -0.9987156391143799 0.07015055418014526 -0.2839455306529999 -0.9333170652389526 -0.35898923873901367 -0.0 0.9731119275093079 0.6922006011009216 0 1.0 0 0.0 0 0.0 0 0.0 -0.9987156391143799 0.07015055418014526 0.21605446934700012 -0.9333170652389526 -0.35898923873901367 -0.0 0.5897163152694702 0.5094247460365295 0 1.0 0 0.0 0 0.0 0 0.0 1.684413194656372 -0.10661531984806061 -0.2839455306529999 -0.9973143935203552 -0.07306130975484848 -0.0 0.03627842664718628 0.5834358334541321 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 -0.2839455306529999 -0.9957884550094604 -0.09140293300151825 -0.0 0.03589153289794922 0.5779250860214233 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 0.21605446934700012 -0.9957884550094604 -0.09140293300151825 -0.0 0.43651407957077026 0.4216722249984741 0 1.0 0 0.0 0 0.0 0 0.0 0.3212544918060303 -0.1709468960762024 -0.2839455306529999 -0.4601885974407196 -0.8877834677696228 -0.0 0.04371464252471924 0.3959726095199585 0 1.0 0 0.0 0 0.0 0 0.0 0.3297398090362549 -0.17501384019851685 -0.2839455306529999 -0.4050416648387909 -0.9142735004425049 -0.0 0.03939831256866455 0.39153915643692017 0 1.0 0 0.0 0 0.0 0 0.0 0.3297398090362549 -0.17501384019851685 0.21605445444583893 -0.4050416648387909 -0.9142735004425049 -0.0 0.4116052985191345 0.23988062143325806 0 1.0 0 0.0 0 0.0 0 0.0 0.9824485778808594 0.10483631491661072 -0.2839455306529999 0.6494033336639404 -0.7603991627693176 -0.0 0.015070319175720215 0.7068853378295898 0 1.0 0 0.0 0 0.0 0 0.0 0.9863402843475342 0.10793274641036987 -0.2839455306529999 0.5941038131713867 -0.8043763637542725 -0.0 0.012314856052398682 0.7105729579925537 0 1.0 0 0.0 0 0.0 0 0.0 0.9863402843475342 0.10793274641036987 0.21605446934700012 0.5941038131713867 -0.8043763637542725 -0.0 0.46540743112564087 0.5483993887901306 0 1.0 0 0.0 0 0.0 0 0.0 -1.547132134437561 -0.04482556879520416 -0.2839455306529999 0.7318338751792908 -0.6814478039741516 -0.0 0.07496204972267151 0.5603500008583069 0 1.0 0 0.0 0 0.0 0 0.0 -1.5445903539657593 -0.04229345917701721 -0.2839455306529999 0.6803796291351318 -0.7328409552574158 -0.0 0.07364055514335632 0.5637936592102051 0 1.0 0 0.0 0 0.0 0 0.0 -1.5445903539657593 -0.04229345917701721 0.21605446934700012 0.6803796291351318 -0.7328409552574158 -0.0 0.4986985921859741 0.373982310295105 0 1.0 0 0.0 0 0.0 0 0.0 1.072251558303833 0.10568764805793762 -0.2839455306529999 -0.634968101978302 -0.772515058517456 -0.0 0.9495713114738464 0.7041049003601074 0 1.0 0 0.0 0 0.0 0 0.0 1.075943946838379 0.10244408249855042 -0.2839455306529999 -0.6831873655319214 -0.730216383934021 -0.0 0.9471895694732666 0.699965238571167 0 1.0 0 0.0 0 0.0 0 0.0 1.075943946838379 0.10244408249855042 0.21605446934700012 -0.6831873655319214 -0.730216383934021 -0.0 0.5179241895675659 0.5399326086044312 0 1.0 0 0.0 0 0.0 0 0.0 -1.245867371559143 0.07437929511070251 -0.2839455306529999 -0.9711599946022034 0.2384105920791626 -0.0 0.13702672719955444 0.659500241279602 0 1.0 0 0.0 0 0.0 0 0.0 -1.2486475706100464 0.06145240366458893 -0.2839455306529999 -0.982909619808197 0.18393506109714508 -0.0 0.13654586672782898 0.6457922458648682 0 1.0 0 0.0 0 0.0 0 0.0 -1.2486475706100464 0.06145240366458893 0.21605446934700012 -0.982909619808197 0.18393506109714508 -0.0 0.4494447708129883 0.48197758197784424 0 1.0 0 0.0 0 0.0 0 0.0 -1.6496983766555786 -0.043373435735702515 -0.2839455306529999 -0.9371318817138672 0.3489181101322174 -0.0 0.1291947066783905 0.5459003448486328 0 1.0 0 0.0 0 0.0 0 0.0 -1.651267170906067 -0.047915905714035034 -0.2839455306529999 -0.9526658058166504 0.3039643466472626 -0.0 0.12934094667434692 0.5409854650497437 0 1.0 0 0.0 0 0.0 0 0.0 -1.651267170906067 -0.047915905714035034 0.21605446934700012 -0.9526658058166504 0.3039643466472626 -0.0 0.43807706236839294 0.3786091208457947 0 1.0 0 0.0 0 0.0 0 0.0 1.7948286533355713 -0.10733529925346375 -0.2839455306529999 0.48716697096824646 0.8732871413230896 -0.0 0.9651947021484375 0.5828148126602173 0 1.0 0 0.0 0 0.0 0 0.0 1.793628454208374 -0.1066201776266098 -0.2839455306529999 0.5360575914382935 0.844141960144043 -0.0 0.9659465551376343 0.5838009119033813 0 1.0 0 0.0 0 0.0 0 0.0 1.793628454208374 -0.1066201776266098 0.21605446934700012 0.5360575914382935 0.844141960144043 -0.0 0.5063918828964233 0.42121315002441406 0 1.0 0 0.0 0 0.0 0 0.0 0.5193231105804443 -0.1760062575340271 -0.2839455306529999 0.39918211102485657 -0.9168370366096497 -0.0 0.9380745887756348 0.38628554344177246 0 1.0 0 0.0 0 0.0 0 0.0 0.5284371376037598 -0.17166444659233093 -0.2839455306529999 0.4622333347797394 -0.886745810508728 -0.0 0.9333038926124573 0.3906322717666626 0 1.0 0 0.0 0 0.0 0 0.0 0.5284371376037598 -0.17166444659233093 0.21605445444583893 0.4622333347797394 -0.886745810508728 -0.0 0.5605977177619934 0.2388749122619629 0 1.0 0 0.0 0 0.0 0 0.0 0.3297398090362549 -0.17501384019851685 -0.2839455306529999 -0.4050416648387909 -0.9142735004425049 -0.0 0.03939831256866455 0.39153915643692017 0 1.0 0 0.0 0 0.0 0 0.0 0.3386654853820801 -0.17865267395973206 -0.2839455306529999 -0.3510238826274872 -0.9363383650779724 -0.0 0.03482341766357422 0.3874672055244446 0 1.0 0 0.0 0 0.0 0 0.0 0.3386654853820801 -0.17865267395973206 0.21605445444583893 -0.3510238826274872 -0.9363383650779724 -0.0 0.41710150241851807 0.23395079374313354 0 1.0 0 0.0 0 0.0 0 0.0 0.9787123203277588 0.10141396522521973 -0.2839455306529999 0.6996368169784546 -0.7144688367843628 -0.0 0.017671942710876465 0.7028019428253174 0 1.0 0 0.0 0 0.0 0 0.0 0.9824485778808594 0.10483631491661072 -0.2839455306529999 0.6494033336639404 -0.7603991627693176 -0.0 0.015070319175720215 0.7068853378295898 0 1.0 0 0.0 0 0.0 0 0.0 0.9824485778808594 0.10483631491661072 0.21605446934700012 0.6494033336639404 -0.7603991627693176 -0.0 0.46304842829704285 0.5450987815856934 0 1.0 0 0.0 0 0.0 0 0.0 -1.1450196504592896 0.06530898809432983 -0.2839455306529999 0.9433881640434265 -0.3316446542739868 -0.0 0.07697618007659912 0.6825403571128845 0 1.0 0 0.0 0 0.0 0 0.0 -1.14255690574646 0.07166844606399536 -0.2839455306529999 0.9197973608970642 -0.39231544733047485 -0.0 0.07592976093292236 0.6903005838394165 0 1.0 0 0.0 0 0.0 0 0.0 -1.14255690574646 0.07166844606399536 0.21605446934700012 0.9197973608970642 -0.39231544733047485 -0.0 0.50550776720047 0.49986231327056885 0 1.0 0 0.0 0 0.0 0 0.0 -1.5494064092636108 -0.04745984077453613 -0.2839455306529999 0.7822809815406799 -0.6229133009910583 -0.0 0.07609990239143372 0.5568383932113647 0 1.0 0 0.0 0 0.0 0 0.0 -1.547132134437561 -0.04482556879520416 -0.2839455306529999 0.7318338751792908 -0.6814478039741516 -0.0 0.07496204972267151 0.5603500008583069 0 1.0 0 0.0 0 0.0 0 0.0 -1.547132134437561 -0.04482556879520416 0.21605446934700012 0.7318338751792908 -0.6814478039741516 -0.0 0.49703651666641235 0.370947003364563 0 1.0 0 0.0 0 0.0 0 0.0 1.7960703372955322 -0.10798231512308121 -0.2839455306529999 0.4368419349193573 0.8995330929756165 -0.0 0.9644157290458679 0.5819108486175537 0 1.0 0 0.0 0 0.0 0 0.0 1.7948286533355713 -0.10733529925346375 -0.2839455306529999 0.48716697096824646 0.8732871413230896 -0.0 0.9651947021484375 0.5828148126602173 0 1.0 0 0.0 0 0.0 0 0.0 1.7948286533355713 -0.10733529925346375 0.21605446934700012 0.48716697096824646 0.8732871413230896 -0.0 0.5071730017662048 0.42032450437545776 0 1.0 0 0.0 0 0.0 0 0.0 0.8733217716217041 0.10470986366271973 -0.2839455306529999 -0.8977630138397217 0.44041261076927185 -0.0 0.08267199993133545 0.6824241280555725 0 1.0 0 0.0 0 0.0 0 0.0 0.8682868480682373 0.09347590804100037 -0.2839455306529999 -0.9256874322891235 0.37824639678001404 -0.0 0.08430463075637817 0.6701304316520691 0 1.0 0 0.0 0 0.0 0 0.0 0.8682868480682373 0.09347590804100037 0.21605446934700012 -0.9256874322891235 0.37824639678001404 -0.0 0.4029099941253662 0.5311414003372192 0 1.0 0 0.0 0 0.0 0 0.0 -0.9987156391143799 0.07015055418014526 -0.2839455306529999 -0.9333170652389526 -0.35898923873901367 -0.0 0.9731119275093079 0.6922006011009216 0 1.0 0 0.0 0 0.0 0 0.0 -0.9963076114654541 0.06320734322071075 -0.2839455306529999 -0.9542527794837952 -0.29895931482315063 -0.0 0.9718380570411682 0.6841946840286255 0 1.0 0 0.0 0 0.0 0 0.0 -0.9963076114654541 0.06320734322071075 0.21605446934700012 -0.9542527794837952 -0.29895931482315063 -0.0 0.5916581749916077 0.5021109580993652 0 1.0 0 0.0 0 0.0 0 0.0 -1.4256469011306763 -0.04598096013069153 -0.2839455306529999 -0.9989013075828552 0.046418651938438416 -0.0 0.9979357123374939 0.5694729089736938 0 1.0 0 0.0 0 0.0 0 0.0 -1.4258877038955688 -0.05045410990715027 -0.2839455306529999 -0.9980468153953552 0.06216620281338692 -0.0 0.9980939626693726 0.5639892220497131 0 1.0 0 0.0 0 0.0 0 0.0 -1.4258877038955688 -0.05045410990715027 0.21605446934700012 -0.9980468153953552 0.06216620281338692 -0.0 0.5789764523506165 0.3750090003013611 0 1.0 0 0.0 0 0.0 0 0.0 1.8292148113250732 -0.10752259194850922 -0.2839455306529999 -0.2558977007865906 0.9666737914085388 -0.0 0.9435123205184937 0.579481840133667 0 1.0 0 0.0 0 0.0 0 0.0 1.8258311748504639 -0.10837635397911072 -0.2839455306529999 -0.23200170695781708 0.9726859331130981 -0.0 0.9456341862678528 0.5787909030914307 0 1.0 0 0.0 0 0.0 0 0.0 1.8258311748504639 -0.10837635397911072 0.21605446934700012 -0.23200170695781708 0.9726859331130981 -0.0 0.5268273949623108 0.42002010345458984 0 1.0 0 0.0 0 0.0 0 0.0 0.5096397399902344 -0.17983725666999817 -0.2839455306529999 0.33814507722854614 -0.9410687685012817 -0.0 0.9431666135787964 0.38239461183547974 0 1.0 0 0.0 0 0.0 0 0.0 0.5193231105804443 -0.1760062575340271 -0.2839455306529999 0.39918211102485657 -0.9168370366096497 -0.0 0.9380745887756348 0.38628554344177246 0 1.0 0 0.0 0 0.0 0 0.0 0.5193231105804443 -0.1760062575340271 0.21605445444583893 0.39918211102485657 -0.9168370366096497 -0.0 0.5548642873764038 0.2326015830039978 0 1.0 0 0.0 0 0.0 0 0.0 1.075943946838379 0.10244408249855042 -0.2839455306529999 -0.6831873655319214 -0.730216383934021 -0.0 0.9471895694732666 0.699965238571167 0 1.0 0 0.0 0 0.0 0 0.0 1.0795097351074219 0.09889158606529236 -0.2839455306529999 -0.729789137840271 -0.6836451292037964 -0.0 0.9449496269226074 0.6954689025878906 0 1.0 0 0.0 0 0.0 0 0.0 1.0795097351074219 0.09889158606529236 0.21605446934700012 -0.729789137840271 -0.6836451292037964 -0.0 0.520024836063385 0.5359216332435608 0 1.0 0 0.0 0 0.0 0 0.0 0.3386654853820801 -0.17865267395973206 -0.2839455306529999 -0.3510238826274872 -0.9363383650779724 -0.0 0.03482341766357422 0.3874672055244446 0 1.0 0 0.0 0 0.0 0 0.0 0.34803128242492676 -0.18186341226100922 -0.2839455306529999 -0.29874569177627563 -0.9543138146400452 -0.0 0.029981791973114014 0.3837677836418152 0 1.0 0 0.0 0 0.0 0 0.0 0.34803128242492676 -0.18186341226100922 0.21605445444583893 -0.29871517419815063 -0.9543138146400452 -0.0 0.4231806993484497 0.22841274738311768 0 1.0 0 0.0 0 0.0 0 0.0 -1.1471540927886963 0.05856764316558838 -0.2839455306529999 0.9617297649383545 -0.27390360832214355 -0.0 0.07773932814598083 0.6743353605270386 0 1.0 0 0.0 0 0.0 0 0.0 -1.1450196504592896 0.06530898809432983 -0.2839455306529999 0.9433881640434265 -0.3316446542739868 -0.0 0.07697618007659912 0.6825403571128845 0 1.0 0 0.0 0 0.0 0 0.0 -1.1450196504592896 0.06530898809432983 0.21605446934700012 0.9433881640434265 -0.3316446542739868 -0.0 0.5041013956069946 0.4924224019050598 0 1.0 0 0.0 0 0.0 0 0.0 -1.5514131784439087 -0.05019627511501312 -0.2839455306529999 0.8302560448646545 -0.557359516620636 -0.0 0.07705748081207275 0.5532599687576294 0 1.0 0 0.0 0 0.0 0 0.0 -1.5494064092636108 -0.04745984077453613 -0.2839455306529999 0.7822809815406799 -0.6229133009910583 -0.0 0.07609990239143372 0.5568383932113647 0 1.0 0 0.0 0 0.0 0 0.0 -1.5494064092636108 -0.04745984077453613 0.21605446934700012 0.7822809815406799 -0.6229133009910583 -0.0 0.49554482102394104 0.3678079843521118 0 1.0 0 0.0 0 0.0 0 0.0 1.7973535060882568 -0.10856122523546219 -0.2839455306529999 0.38569292426109314 0.922605037689209 -0.0 0.9636095762252808 0.5810889005661011 0 1.0 0 0.0 0 0.0 0 0.0 1.7960703372955322 -0.10798231512308121 -0.2839455306529999 0.4368419349193573 0.8995330929756165 -0.0 0.9644157290458679 0.5819108486175537 0 1.0 0 0.0 0 0.0 0 0.0 1.7960703372955322 -0.10798231512308121 0.21605446934700012 0.4368419349193573 0.8995330929756165 -0.0 0.5079805254936218 0.4195253252983093 0 1.0 0 0.0 0 0.0 0 0.0 -0.9963076114654541 0.06320734322071075 -0.2839455306529999 -0.9542527794837952 -0.29895931482315063 -0.0 0.9718380570411682 0.6841946840286255 0 1.0 0 0.0 0 0.0 0 0.0 -0.9942206144332886 0.05576547980308533 -0.2839455306529999 -0.9698477387428284 -0.24362926185131073 -0.0 0.9708145260810852 0.6756221055984497 0 1.0 0 0.0 0 0.0 0 0.0 -0.9942206144332886 0.05576547980308533 0.21605446934700012 -0.9698477387428284 -0.24362926185131073 -0.0 0.5934914350509644 0.4941715598106384 0 1.0 0 0.0 0 0.0 0 0.0 -1.651267170906067 -0.047915905714035034 -0.2839455306529999 -0.9526658058166504 0.3039643466472626 -0.0 0.12934094667434692 0.5409854650497437 0 1.0 0 0.0 0 0.0 0 0.0 -1.652626872062683 -0.05255323648452759 -0.2839455306529999 -0.9659108519554138 0.25885799527168274 -0.0 0.1293828785419464 0.5360437631607056 0 1.0 0 0.0 0 0.0 0 0.0 -1.652626872062683 -0.05255323648452759 0.21605446934700012 -0.9659108519554138 0.25885799527168274 -0.0 0.437128484249115 0.3739891052246094 0 1.0 0 0.0 0 0.0 0 0.0 1.8258311748504639 -0.10837635397911072 -0.2839455306529999 -0.23200170695781708 0.9726859331130981 -0.0 0.9456341862678528 0.5787909030914307 0 1.0 0 0.0 0 0.0 0 0.0 1.8226182460784912 -0.10909876972436905 -0.2839455306529999 -0.20505386590957642 0.9787285923957825 -0.0 0.9476549029350281 0.5782271027565002 0 1.0 0 0.0 0 0.0 0 0.0 1.8226182460784912 -0.10909876972436905 0.21605446934700012 -0.20502334833145142 0.9787285923957825 -0.0 0.5248557925224304 0.41897040605545044 0 1.0 0 0.0 0 0.0 0 0.0 0.9751315116882324 0.09766566753387451 -0.2839455306529999 0.7461775541305542 -0.6657002568244934 -0.0 0.020119577646255493 0.698323130607605 0 1.0 0 0.0 0 0.0 0 0.0 0.9787123203277588 0.10141396522521973 -0.2839455306529999 0.6996368169784546 -0.7144688367843628 -0.0 0.017671942710876465 0.7028019428253174 0 1.0 0 0.0 0 0.0 0 0.0 0.9787123203277588 0.10141396522521973 0.21605446934700012 0.6996368169784546 -0.7144688367843628 -0.0 0.46076416969299316 0.541422963142395 0 1.0 0 0.0 0 0.0 0 0.0 0.499387264251709 -0.18315744400024414 -0.2839455306529999 0.2797936797142029 -0.9600512981414795 -0.0 0.9485899209976196 0.37897592782974243 0 1.0 0 0.0 0 0.0 0 0.0 0.5096397399902344 -0.17983725666999817 -0.2839455306529999 0.33814507722854614 -0.9410687685012817 -0.0 0.9431666135787964 0.38239461183547974 0 1.0 0 0.0 0 0.0 0 0.0 0.5096397399902344 -0.17983725666999817 0.21605445444583893 0.33814507722854614 -0.9410687685012817 -0.0 0.5484403967857361 0.22679364681243896 0 1.0 0 0.0 0 0.0 0 0.0 1.0795097351074219 0.09889158606529236 -0.2839455306529999 -0.729789137840271 -0.6836451292037964 -0.0 0.9449496269226074 0.6954689025878906 0 1.0 0 0.0 0 0.0 0 0.0 1.082874059677124 0.09504234790802002 -0.2839455306529999 -0.7776726484298706 -0.6286507844924927 -0.0 0.9429000616073608 0.6906435489654541 0 1.0 0 0.0 0 0.0 0 0.0 1.082874059677124 0.09504234790802002 0.21605446934700012 -0.7776726484298706 -0.6286507844924927 -0.0 0.5220193862915039 0.5315750241279602 0 1.0 0 0.0 0 0.0 0 0.0 -1.2486475706100464 0.06145240366458893 -0.2839455306529999 -0.982909619808197 0.18393506109714508 -0.0 0.13654586672782898 0.6457922458648682 0 1.0 0 0.0 0 0.0 0 0.0 -1.250809907913208 0.047895535826683044 -0.2839455306529999 -0.9911190867424011 0.13290810585021973 -0.0 0.1357092559337616 0.6314922571182251 0 1.0 0 0.0 0 0.0 0 0.0 -1.250809907913208 0.047895535826683044 0.21605446934700012 -0.9911190867424011 0.13290810585021973 -0.0 0.44775623083114624 0.4679969549179077 0 1.0 0 0.0 0 0.0 0 0.0 0.34803128242492676 -0.18186341226100922 -0.2839455306529999 -0.29874569177627563 -0.9543138146400452 -0.0 0.029981791973114014 0.3837677836418152 0 1.0 0 0.0 0 0.0 0 0.0 0.357837438583374 -0.18464605510234833 -0.2839455306529999 -0.24854274094104767 -0.9685964584350586 -0.0 0.024866372346878052 0.38045501708984375 0 1.0 0 0.0 0 0.0 0 0.0 0.357837438583374 -0.18464605510234833 0.21605445444583893 -0.24854274094104767 -0.9685964584350586 -0.0 0.4298703670501709 0.22331726551055908 0 1.0 0 0.0 0 0.0 0 0.0 -1.5531522035598755 -0.05303485691547394 -0.2839455306529999 0.8742637634277344 -0.4853968918323517 -0.0 0.07783758640289307 0.5496155023574829 0 1.0 0 0.0 0 0.0 0 0.0 -1.5514131784439087 -0.05019627511501312 -0.2839455306529999 0.8302560448646545 -0.557359516620636 -0.0 0.07705748081207275 0.5532599687576294 0 1.0 0 0.0 0 0.0 0 0.0 -1.5514131784439087 -0.05019627511501312 0.21605446934700012 0.8302560448646545 -0.557359516620636 -0.0 0.49422264099121094 0.3645620346069336 0 1.0 0 0.0 0 0.0 0 0.0 1.798677682876587 -0.10907202214002609 -0.2839455306529999 0.3342081904411316 0.9424726366996765 -0.0 0.9627766609191895 0.5803487300872803 0 1.0 0 0.0 0 0.0 0 0.0 1.7973535060882568 -0.10856122523546219 -0.2839455306529999 0.38569292426109314 0.922605037689209 -0.0 0.9636095762252808 0.5810889005661011 0 1.0 0 0.0 0 0.0 0 0.0 1.7973535060882568 -0.10856122523546219 0.21605446934700012 0.38569292426109314 0.922605037689209 -0.0 0.5088142156600952 0.4188156723976135 0 1.0 0 0.0 0 0.0 0 0.0 -1.4258877038955688 -0.05045410990715027 -0.2839455306529999 -0.9980468153953552 0.06216620281338692 -0.0 0.9980939626693726 0.5639892220497131 0 1.0 0 0.0 0 0.0 0 0.0 -1.4261819124221802 -0.05461104214191437 -0.2839455306529999 -0.9967344999313354 0.08038575202226639 -0.0 0.9982823729515076 0.5589078664779663 0 1.0 0 0.0 0 0.0 0 0.0 -1.4261819124221802 -0.05461104214191437 0.21605446934700012 -0.9967344999313354 0.08038575202226639 -0.0 0.579197108745575 0.3699303865432739 0 1.0 0 0.0 0 0.0 0 0.0 1.1847076416015625 0.08581876754760742 -0.2839455306529999 0.9457685947418213 0.3248085081577301 -0.0 0.885278046131134 0.65334153175354 0 1.0 0 0.0 0 0.0 0 0.0 1.1798405647277832 0.09859970211982727 -0.2839455306529999 0.921262264251709 0.3888668417930603 -0.0 0.8863137364387512 0.667203426361084 0 1.0 0 0.0 0 0.0 0 0.0 1.1798405647277832 0.09859970211982727 0.21605446934700012 0.921262264251709 0.3888668417930603 -0.0 0.5714326500892639 0.5292354226112366 0 1.0 0 0.0 0 0.0 0 0.0 -1.1489601135253906 0.051444411277770996 -0.2839455306529999 0.9755851626396179 -0.21955016255378723 -0.0 0.07822781801223755 0.6656776666641235 0 1.0 0 0.0 0 0.0 0 0.0 -1.1471540927886963 0.05856764316558838 -0.2839455306529999 0.9617297649383545 -0.27390360832214355 -0.0 0.07773932814598083 0.6743353605270386 0 1.0 0 0.0 0 0.0 0 0.0 -1.1471540927886963 0.05856764316558838 0.21605446934700012 0.9617297649383545 -0.27390360832214355 -0.0 0.5028736591339111 0.4844869375228882 0 1.0 0 0.0 0 0.0 0 0.0 1.8000438213348389 -0.10951471328735352 -0.2839455306529999 0.28284555673599243 0.9591357111930847 -0.0 0.9619163274765015 0.5796900987625122 0 1.0 0 0.0 0 0.0 0 0.0 1.798677682876587 -0.10907202214002609 -0.2839455306529999 0.3342081904411316 0.9424726366996765 -0.0 0.9627766609191895 0.5803487300872803 0 1.0 0 0.0 0 0.0 0 0.0 1.798677682876587 -0.10907202214002609 0.21605446934700012 0.3341776728630066 0.9424726366996765 -0.0 0.509673535823822 0.41819584369659424 0 1.0 0 0.0 0 0.0 0 0.0 0.48856568336486816 -0.1859668493270874 -0.2839455306529999 0.22461622953414917 -0.9744254946708679 -0.0 0.9543525576591492 0.37605053186416626 0 1.0 0 0.0 0 0.0 0 0.0 0.499387264251709 -0.18315744400024414 -0.2839455306529999 0.2797936797142029 -0.9600512981414795 -0.0 0.9485899209976196 0.37897592782974243 0 1.0 0 0.0 0 0.0 0 0.0 0.499387264251709 -0.18315744400024414 0.21605445444583893 0.2797936797142029 -0.9600512981414795 -0.0 0.5412908792495728 0.22151362895965576 0 1.0 0 0.0 0 0.0 0 0.0 -0.9942206144332886 0.05576547980308533 -0.2839455306529999 -0.9698477387428284 -0.24362926185131073 -0.0 0.9708145260810852 0.6756221055984497 0 1.0 0 0.0 0 0.0 0 0.0 -0.9924546480178833 0.047824978828430176 -0.2839455306529999 -0.9812005758285522 -0.19296853244304657 -0.0 0.9700321555137634 0.6664710640907288 0 1.0 0 0.0 0 0.0 0 0.0 -0.9924546480178833 0.047824978828430176 0.21605446934700012 -0.9812005758285522 -0.19296853244304657 -0.0 0.5952191948890686 0.4855912923812866 0 1.0 0 0.0 0 0.0 0 0.0 -1.652626872062683 -0.05255323648452759 -0.2839455306529999 -0.9659108519554138 0.25885799527168274 -0.0 0.1293828785419464 0.5360437631607056 0 1.0 0 0.0 0 0.0 0 0.0 -1.6537773609161377 -0.057285428047180176 -0.2839455306529999 -0.9768364429473877 0.2138737142086029 -0.0 0.129322350025177 0.5310729742050171 0 1.0 0 0.0 0 0.0 0 0.0 -1.6537773609161377 -0.057285428047180176 0.21605446934700012 -0.9768364429473877 0.2138737142086029 -0.0 0.436267226934433 0.3692759871482849 0 1.0 0 0.0 0 0.0 0 0.0 1.8226182460784912 -0.10909876972436905 -0.2839455306529999 -0.20505386590957642 0.9787285923957825 -0.0 0.9476549029350281 0.5782271027565002 0 1.0 0 0.0 0 0.0 0 0.0 1.819575548171997 -0.10968983918428421 -0.2839455306529999 -0.1743827611207962 0.9846491813659668 -0.0 0.9495729804039001 0.577794075012207 0 1.0 0 0.0 0 0.0 0 0.0 1.819575548171997 -0.10968983918428421 0.21605446934700012 -0.1743827611207962 0.9846491813659668 -0.0 0.5229727029800415 0.41809719800949097 0 1.0 0 0.0 0 0.0 0 0.0 0.357837438583374 -0.18464605510234833 -0.2839455306529999 -0.24854274094104767 -0.9685964584350586 -0.0 0.024866372346878052 0.38045501708984375 0 1.0 0 0.0 0 0.0 0 0.0 0.3680837154388428 -0.1870006024837494 -0.2839455306529999 -0.20072023570537567 -0.9796441793441772 -0.0 0.019471734762191772 0.3775457739830017 0 1.0 0 0.0 0 0.0 0 0.0 0.3680837154388428 -0.1870006024837494 0.21605445444583893 -0.20072023570537567 -0.9796441793441772 -0.0 0.43719086050987244 0.2187250852584839 0 1.0 0 0.0 0 0.0 0 0.0 0.9717772006988525 0.09363764524459839 -0.2839455306529999 0.790978729724884 -0.6118045449256897 -0.0 0.022365719079971313 0.6935079097747803 0 1.0 0 0.0 0 0.0 0 0.0 0.9751315116882324 0.09766566753387451 -0.2839455306529999 0.7461775541305542 -0.6657002568244934 -0.0 0.020119577646255493 0.698323130607605 0 1.0 0 0.0 0 0.0 0 0.0 0.9751315116882324 0.09766566753387451 0.21605446934700012 0.7461775541305542 -0.6657002568244934 -0.0 0.4585532248020172 0.5373673439025879 0 1.0 0 0.0 0 0.0 0 0.0 1.082874059677124 0.09504234790802002 -0.2839455306529999 -0.7776726484298706 -0.6286507844924927 -0.0 0.9429000616073608 0.6906435489654541 0 1.0 0 0.0 0 0.0 0 0.0 1.085960865020752 0.09090852737426758 -0.2839455306529999 -0.8231146931648254 -0.5678274035453796 -0.0 0.941087543964386 0.6855176687240601 0 1.0 0 0.0 0 0.0 0 0.0 1.085960865020752 0.09090852737426758 0.21605446934700012 -0.8231146931648254 -0.5678274035453796 -0.0 0.5238659977912903 0.5269047021865845 0 1.0 0 0.0 0 0.0 0 0.0 -1.150437831878662 0.04393930733203888 -0.2839455306529999 0.9856563210487366 -0.16873684525489807 -0.0 0.07845044136047363 0.65655916929245 0 1.0 0 0.0 0 0.0 0 0.0 -1.1489601135253906 0.051444411277770996 -0.2839455306529999 0.9755851626396179 -0.21955016255378723 -0.0 0.07822781801223755 0.6656776666641235 0 1.0 0 0.0 0 0.0 0 0.0 -1.1489601135253906 0.051444411277770996 0.21605446934700012 0.9755851626396179 -0.21955016255378723 -0.0 0.5018256902694702 0.476043701171875 0 1.0 0 0.0 0 0.0 0 0.0 -1.5546238422393799 -0.05597560107707977 -0.2839455306529999 0.9129306674003601 -0.40809351205825806 -0.0 0.0784434974193573 0.5459051728248596 0 1.0 0 0.0 0 0.0 0 0.0 -1.5531522035598755 -0.05303485691547394 -0.2839455306529999 0.8742637634277344 -0.4853968918323517 -0.0 0.07783758640289307 0.5496155023574829 0 1.0 0 0.0 0 0.0 0 0.0 -1.5531522035598755 -0.05303485691547394 0.21605446934700012 0.8742637634277344 -0.4853968918323517 -0.0 0.49306946992874146 0.36120617389678955 0 1.0 0 0.0 0 0.0 0 0.0 1.8014509677886963 -0.10988929867744446 -0.2839455306529999 0.23218482732772827 0.9726554155349731 -0.0 0.9610292911529541 0.5791126489639282 0 1.0 0 0.0 0 0.0 0 0.0 1.8000438213348389 -0.10951471328735352 -0.2839455306529999 0.28284555673599243 0.9591357111930847 -0.0 0.9619163274765015 0.5796900987625122 0 1.0 0 0.0 0 0.0 0 0.0 1.8000438213348389 -0.10951471328735352 0.21605446934700012 0.28284555673599243 0.9591357111930847 -0.0 0.5105586647987366 0.41766583919525146 0 1.0 0 0.0 0 0.0 0 0.0 0.4771747589111328 -0.18826544284820557 -0.2839455306529999 0.17285683751106262 -0.9849238395690918 -0.0 0.9604600667953491 0.3736436367034912 0 1.0 0 0.0 0 0.0 0 0.0 0.48856568336486816 -0.1859668493270874 -0.2839455306529999 0.22461622953414917 -0.9744254946708679 -0.0 0.9543525576591492 0.37605053186416626 0 1.0 0 0.0 0 0.0 0 0.0 0.48856568336486816 -0.1859668493270874 0.21605445444583893 0.22461622953414917 -0.9744254946708679 -0.0 0.5333896279335022 0.21683770418167114 0 1.0 0 0.0 0 0.0 0 0.0 -1.250809907913208 0.047895535826683044 -0.2839455306529999 -0.9911190867424011 0.13290810585021973 -0.0 0.1357092559337616 0.6314922571182251 0 1.0 0 0.0 0 0.0 0 0.0 -1.2523545026779175 0.03370867669582367 -0.2839455306529999 -0.9963377714157104 0.08532975614070892 -0.0 0.13453033566474915 0.6165791153907776 0 1.0 0 0.0 0 0.0 0 0.0 -1.2523545026779175 0.03370867669582367 0.21605446934700012 -0.9963377714157104 0.08532975614070892 -0.0 0.4462829530239105 0.45321154594421387 0 1.0 0 0.0 0 0.0 0 0.0 -1.4261819124221802 -0.05461104214191437 -0.2839455306529999 -0.9967344999313354 0.08038575202226639 -0.0 0.9982823729515076 0.5589078664779663 0 1.0 0 0.0 0 0.0 0 0.0 -1.4265297651290894 -0.05845177173614502 -0.2839455306529999 -0.9948118329048157 0.10165715217590332 -0.0 0.9985008239746094 0.554226279258728 0 1.0 0 0.0 0 0.0 0 0.0 -1.4265297651290894 -0.05845177173614502 0.21605446934700012 -0.9948118329048157 0.10165715217590332 -0.0 0.5793541073799133 0.3652379512786865 0 1.0 0 0.0 0 0.0 0 0.0 1.819575548171997 -0.10968983918428421 -0.2839455306529999 -0.1743827611207962 0.9846491813659668 -0.0 0.9495729804039001 0.577794075012207 0 1.0 0 0.0 0 0.0 0 0.0 1.8167030811309814 -0.1101495623588562 -0.2839455306529999 -0.13934750854969025 0.9902340769767761 -0.0 0.9513869285583496 0.5774950981140137 0 1.0 0 0.0 0 0.0 0 0.0 1.8167030811309814 -0.1101495623588562 0.21605446934700012 -0.13934750854969025 0.9902340769767761 -0.0 0.5211812257766724 0.4174010157585144 0 1.0 0 0.0 0 0.0 0 0.0 0.3680837154388428 -0.1870006024837494 -0.2839455306529999 -0.20072023570537567 -0.9796441793441772 -0.0 0.019471734762191772 0.3775457739830017 0 1.0 0 0.0 0 0.0 0 0.0 0.3787703514099121 -0.1889270544052124 -0.2839455306529999 -0.15546128153800964 -0.9878231287002563 -0.0 0.013794481754302979 0.37505996227264404 0 1.0 0 0.0 0 0.0 0 0.0 0.3787703514099121 -0.1889270544052124 0.21605445444583893 -0.15546128153800964 -0.9878231287002563 -0.0 0.4451525807380676 0.21470564603805542 0 1.0 0 0.0 0 0.0 0 0.0 0.9687197208404541 0.08937612175941467 -0.2839455306529999 0.8328500986099243 -0.5534836649894714 -0.0 0.024366289377212524 0.6884176731109619 0 1.0 0 0.0 0 0.0 0 0.0 0.9717772006988525 0.09363764524459839 -0.2839455306529999 0.790978729724884 -0.6118045449256897 -0.0 0.022365719079971313 0.6935079097747803 0 1.0 0 0.0 0 0.0 0 0.0 0.9717772006988525 0.09363764524459839 0.21605446934700012 0.790978729724884 -0.6118045449256897 -0.0 0.45645686984062195 0.5329769849777222 0 1.0 0 0.0 0 0.0 0 0.0 0.8682868480682373 0.09347590804100037 -0.2839455306529999 -0.9256874322891235 0.37824639678001404 -0.0 0.08430463075637817 0.6701304316520691 0 1.0 0 0.0 0 0.0 0 0.0 0.8639230728149414 0.08168494701385498 -0.2839455306529999 -0.9484237432479858 0.316934734582901 -0.0 0.08550941944122314 0.6573827266693115 0 1.0 0 0.0 0 0.0 0 0.0 0.8639230728149414 0.08168494701385498 0.21605446934700012 -0.9484237432479858 0.316934734582901 -0.0 0.4000667333602905 0.5195320844650269 0 1.0 0 0.0 0 0.0 0 0.0 -0.9924546480178833 0.047824978828430176 -0.2839455306529999 -0.9812005758285522 -0.19296853244304657 -0.0 0.9700321555137634 0.6664710640907288 0 1.0 0 0.0 0 0.0 0 0.0 -0.9910098314285278 0.0393858402967453 -0.2839455306529999 -0.9891659021377563 -0.14676351845264435 -0.0 0.9694821834564209 0.656730055809021 0 1.0 0 0.0 0 0.0 0 0.0 -0.9910098314285278 0.0393858402967453 0.21605446934700012 -0.9891659021377563 -0.14676351845264435 -0.0 0.596843957901001 0.47635602951049805 0 1.0 0 0.0 0 0.0 0 0.0 -1.5558278560638428 -0.05901850759983063 -0.2839455306529999 0.9450361728668213 -0.3269447982311249 -0.0 0.07887768745422363 0.5421288013458252 0 1.0 0 0.0 0 0.0 0 0.0 -1.5546238422393799 -0.05597560107707977 -0.2839455306529999 0.9129306674003601 -0.40809351205825806 -0.0 0.0784434974193573 0.5459051728248596 0 1.0 0 0.0 0 0.0 0 0.0 -1.5546238422393799 -0.05597560107707977 0.21605446934700012 0.9129306674003601 -0.40809351205825806 -0.0 0.49208465218544006 0.35773760080337524 0 1.0 0 0.0 0 0.0 0 0.0 1.8028995990753174 -0.11019577831029892 -0.2839455306529999 0.1825312077999115 0.983184278011322 -0.0 0.9601153135299683 0.5786160230636597 0 1.0 0 0.0 0 0.0 0 0.0 1.8014509677886963 -0.10988929867744446 -0.2839455306529999 0.23218482732772827 0.9726554155349731 -0.0 0.9610292911529541 0.5791126489639282 0 1.0 0 0.0 0 0.0 0 0.0 1.8014509677886963 -0.10988929867744446 0.21605446934700012 0.23218482732772827 0.9726554155349731 -0.0 0.511468768119812 0.41722571849823 0 1.0 0 0.0 0 0.0 0 0.0 0.46521472930908203 -0.19005325436592102 -0.2839455306529999 0.12463758885860443 -0.9921872615814209 -0.0 0.9669138193130493 0.3717842698097229 0 1.0 0 0.0 0 0.0 0 0.0 0.4771747589111328 -0.18826544284820557 -0.2839455306529999 0.17285683751106262 -0.9849238395690918 -0.0 0.9604600667953491 0.3736436367034912 0 1.0 0 0.0 0 0.0 0 0.0 0.4771747589111328 -0.18826544284820557 0.21605445444583893 0.17285683751106262 -0.9849238395690918 -0.0 0.5247248411178589 0.21285533905029297 0 1.0 0 0.0 0 0.0 0 0.0 1.085960865020752 0.09090852737426758 -0.2839455306529999 -0.8231146931648254 -0.5678274035453796 -0.0 0.941087543964386 0.6855176687240601 0 1.0 0 0.0 0 0.0 0 0.0 1.0887703895568848 0.08649012446403503 -0.2839455306529999 -0.8627277612686157 -0.5056306719779968 -0.0 0.939506471157074 0.6800910234451294 0 1.0 0 0.0 0 0.0 0 0.0 1.0887703895568848 0.08649012446403503 0.21605446934700012 -0.8627277612686157 -0.5056306719779968 -0.0 0.5255663990974426 0.5219049453735352 0 1.0 0 0.0 0 0.0 0 0.0 -1.6537773609161377 -0.057285428047180176 -0.2839455306529999 -0.9768364429473877 0.2138737142086029 -0.0 0.129322350025177 0.5310729742050171 0 1.0 0 0.0 0 0.0 0 0.0 -1.6547187566757202 -0.062112487852573395 -0.2839455306529999 -0.9855342507362366 0.16928617656230927 -0.0 0.12916091084480286 0.5260705351829529 0 1.0 0 0.0 0 0.0 0 0.0 -1.6547187566757202 -0.062112487852573395 0.21605446934700012 -0.9855342507362366 0.16928617656230927 -0.0 0.4354926347732544 0.3644673228263855 0 1.0 0 0.0 0 0.0 0 0.0 1.8167030811309814 -0.1101495623588562 -0.2839455306529999 -0.13934750854969025 0.9902340769767761 -0.0 0.9513869285583496 0.5774950981140137 0 1.0 0 0.0 0 0.0 0 0.0 1.8140008449554443 -0.11047793179750443 -0.2839455306529999 -0.09912411868572235 0.9950559735298157 -0.0 0.953095555305481 0.5773330926895142 0 1.0 0 0.0 0 0.0 0 0.0 1.8140008449554443 -0.11047793179750443 0.21605446934700012 -0.09912411868572235 0.9950559735298157 -0.0 0.5194841623306274 0.41688209772109985 0 1.0 0 0.0 0 0.0 0 0.0 0.3787703514099121 -0.1889270544052124 -0.2839455306529999 -0.15546128153800964 -0.9878231287002563 -0.0 0.013794481754302979 0.37505996227264404 0 1.0 0 0.0 0 0.0 0 0.0 0.38989734649658203 -0.19042539596557617 -0.2839455306529999 -0.11279641091823578 -0.9935911297798157 -0.0 0.00783383846282959 0.3730196952819824 0 1.0 0 0.0 0 0.0 0 0.0 0.38989734649658203 -0.19042539596557617 0.21605445444583893 -0.11279641091823578 -0.9935911297798157 -0.0 0.4537515640258789 0.2113369107246399 0 1.0 0 0.0 0 0.0 0 0.0 -1.1515871286392212 0.036052316427230835 -0.2839455306529999 0.9925839900970459 -0.12149418890476227 -0.0 0.0784153938293457 0.6469727158546448 0 1.0 0 0.0 0 0.0 0 0.0 -1.150437831878662 0.04393930733203888 -0.2839455306529999 0.9856563210487366 -0.16873684525489807 -0.0 0.07845044136047363 0.65655916929245 0 1.0 0 0.0 0 0.0 0 0.0 -1.150437831878662 0.04393930733203888 0.21605446934700012 0.9856563210487366 -0.16873684525489807 -0.0 0.5009591579437256 0.4670816659927368 0 1.0 0 0.0 0 0.0 0 0.0 -0.9910098314285278 0.0393858402967453 -0.2839455306529999 -0.9891659021377563 -0.14676351845264435 -0.0 0.9694821834564209 0.656730055809021 0 1.0 0 0.0 0 0.0 0 0.0 -0.9898860454559326 0.0304480642080307 -0.2839455306529999 -0.9944761395454407 -0.10477004200220108 -0.0 0.9691557884216309 0.6463892459869385 0 1.0 0 0.0 0 0.0 0 0.0 -0.9898860454559326 0.0304480642080307 0.21605446934700012 -0.9944761395454407 -0.10477004200220108 -0.0 0.5983680486679077 0.4664538502693176 0 1.0 0 0.0 0 0.0 0 0.0 -1.4265297651290894 -0.05845177173614502 -0.2839455306529999 -0.9948118329048157 0.10165715217590332 -0.0 0.9985008239746094 0.554226279258728 0 1.0 0 0.0 0 0.0 0 0.0 -1.4269311428070068 -0.06197628378868103 -0.2839455306529999 -0.9919126033782959 0.1267433762550354 -0.0 0.9987492561340332 0.5499416589736938 0 1.0 0 0.0 0 0.0 0 0.0 -1.4269311428070068 -0.06197628378868103 0.21605446934700012 -0.9919126033782959 0.1267433762550354 -0.0 0.5794463753700256 0.36092859506607056 0 1.0 0 0.0 0 0.0 0 0.0 0.9659590721130371 0.08488109707832336 -0.2839455306529999 0.8699911236763 -0.4930265247821808 -0.0 0.026126623153686523 0.6830544471740723 0 1.0 0 0.0 0 0.0 0 0.0 0.9687197208404541 0.08937612175941467 -0.2839455306529999 0.8328500986099243 -0.5534836649894714 -0.0 0.024366289377212524 0.6884176731109619 0 1.0 0 0.0 0 0.0 0 0.0 0.9687197208404541 0.08937612175941467 0.21605446934700012 0.8328500986099243 -0.5534836649894714 -0.0 0.45451629161834717 0.5282981395721436 0 1.0 0 0.0 0 0.0 0 0.0 1.804389238357544 -0.1104341521859169 -0.2839455306529999 0.1342814415693283 0.9909359812736511 -0.0 0.9591747522354126 0.5781999826431274 0 1.0 0 0.0 0 0.0 0 0.0 1.8028995990753174 -0.11019577831029892 -0.2839455306529999 0.1825312077999115 0.983184278011322 -0.0 0.9601153135299683 0.5786160230636597 0 1.0 0 0.0 0 0.0 0 0.0 1.8028995990753174 -0.11019577831029892 0.21605446934700012 0.1825312077999115 0.983184278011322 -0.0 0.5124037265777588 0.4168756604194641 0 1.0 0 0.0 0 0.0 0 0.0 0.4526855945587158 -0.19133025407791138 -0.2839455306529999 0.0798974558711052 -0.9967955350875854 -0.0 0.9737112522125244 0.37050437927246094 0 1.0 0 0.0 0 0.0 0 0.0 0.46521472930908203 -0.19005325436592102 -0.2839455306529999 0.12463758885860443 -0.9921872615814209 -0.0 0.9669138193130493 0.3717842698097229 0 1.0 0 0.0 0 0.0 0 0.0 0.46521472930908203 -0.19005325436592102 0.21605445444583893 0.12463758885860443 -0.9921872615814209 -0.0 0.5153055787086487 0.20966792106628418 0 1.0 0 0.0 0 0.0 0 0.0 1.0887703895568848 0.08649012446403503 -0.2839455306529999 -0.8627277612686157 -0.5056306719779968 -0.0 0.939506471157074 0.6800910234451294 0 1.0 0 0.0 0 0.0 0 0.0 1.0913023948669434 0.081787109375 -0.2839455306529999 -0.8963896632194519 -0.443250834941864 -0.0 0.938151478767395 0.6743619441986084 0 1.0 0 0.0 0 0.0 0 0.0 1.0913023948669434 0.081787109375 0.21605446934700012 -0.8963896632194519 -0.443250834941864 -0.0 0.5271219611167908 0.5165688991546631 0 1.0 0 0.0 0 0.0 0 0.0 0.38989734649658203 -0.19042539596557617 -0.2839455306529999 -0.11279641091823578 -0.9935911297798157 -0.0 0.00783383846282959 0.3730196952819824 0 1.0 0 0.0 0 0.0 0 0.0 0.40146446228027344 -0.1914956420660019 -0.2839455306529999 -0.07275612652301788 -0.9973449110984802 -0.0 0.0015925765037536621 0.3714491128921509 0 1.0 0 0.0 0 0.0 0 0.0 0.40146446228027344 -0.1914956420660019 0.21605445444583893 -0.07275612652301788 -0.9973449110984802 -0.0 0.46296530961990356 0.2087029218673706 0 1.0 0 0.0 0 0.0 0 0.0 -1.1524080038070679 0.027783438563346863 -0.2839455306529999 0.9969481229782104 -0.07782220095396042 -0.0 0.0781308114528656 0.6369128227233887 0 1.0 0 0.0 0 0.0 0 0.0 -1.1515871286392212 0.036052316427230835 -0.2839455306529999 0.9925839900970459 -0.12149418890476227 -0.0 0.0784153938293457 0.6469727158546448 0 1.0 0 0.0 0 0.0 0 0.0 -1.1515871286392212 0.036052316427230835 0.21605446934700012 0.9925839900970459 -0.12149418890476227 -0.0 0.500276505947113 0.45759135484695435 0 1.0 0 0.0 0 0.0 0 0.0 -1.5567642450332642 -0.0621635764837265 -0.2839455306529999 0.9698172211647034 -0.24378184974193573 -0.0 0.07914271950721741 0.5382862091064453 0 1.0 0 0.0 0 0.0 0 0.0 -1.5558278560638428 -0.05901850759983063 -0.2839455306529999 0.9450361728668213 -0.3269447982311249 -0.0 0.07887768745422363 0.5421288013458252 0 1.0 0 0.0 0 0.0 0 0.0 -1.5558278560638428 -0.05901850759983063 0.21605446934700012 0.9450361728668213 -0.3269447982311249 -0.0 0.4912683963775635 0.3541536331176758 0 1.0 0 0.0 0 0.0 0 0.0 1.8059203624725342 -0.1106044203042984 -0.2839455306529999 0.0876796767115593 0.9961241483688354 -0.0 0.9582072496414185 0.5778639912605286 0 1.0 0 0.0 0 0.0 0 0.0 1.804389238357544 -0.1104341521859169 -0.2839455306529999 0.1342814415693283 0.9909359812736511 -0.0 0.9591747522354126 0.5781999826431274 0 1.0 0 0.0 0 0.0 0 0.0 1.804389238357544 -0.1104341521859169 0.21605446934700012 0.1342814415693283 0.9909359812736511 -0.0 0.5133629441261292 0.4166155457496643 0 1.0 0 0.0 0 0.0 0 0.0 -1.2523545026779175 0.03370867669582367 -0.2839455306529999 -0.9963377714157104 0.08532975614070892 -0.0 0.13453033566474915 0.6165791153907776 0 1.0 0 0.0 0 0.0 0 0.0 -1.2532812356948853 0.018891841173171997 -0.2839455306529999 -0.9991455078125 0.04119998961687088 -0.0 0.13302001357078552 0.6010407209396362 0 1.0 0 0.0 0 0.0 0 0.0 -1.2532812356948853 0.018891841173171997 0.21605446934700012 -0.9991455078125 0.04119998961687088 -0.0 0.44502511620521545 0.437610387802124 0 1.0 0 0.0 0 0.0 0 0.0 1.8140008449554443 -0.11047793179750443 -0.2839455306529999 -0.09912411868572235 0.9950559735298157 -0.0 0.953095555305481 0.5773330926895142 0 1.0 0 0.0 0 0.0 0 0.0 1.8114688396453857 -0.11067495495080948 -0.2839455306529999 -0.052705466747283936 0.9985961318016052 -0.0 0.9546976089477539 0.5773108601570129 0 1.0 0 0.0 0 0.0 0 0.0 1.8114688396453857 -0.11067495495080948 0.21605446934700012 -0.052674949169158936 0.9985961318016052 -0.0 0.5178840756416321 0.41654032468795776 0 1.0 0 0.0 0 0.0 0 0.0 1.1888792514801025 0.0722278356552124 -0.2839455306529999 0.964476466178894 0.2641376852989197 -0.0 0.884676992893219 0.6387784481048584 0 1.0 0 0.0 0 0.0 0 0.0 1.1847076416015625 0.08581876754760742 -0.2839455306529999 0.9457685947418213 0.3248085081577301 -0.0 0.885278046131134 0.65334153175354 0 1.0 0 0.0 0 0.0 0 0.0 1.1847076416015625 0.08581876754760742 0.21605446934700012 0.9457685947418213 0.3248085081577301 -0.0 0.57432621717453 0.5165024995803833 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295642137527466 -0.06969787180423737 -0.2839455306529999 0.99993896484375 0.008484145626425743 -0.0 0.946895956993103 0.5426977872848511 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 -0.2839455306529999 0.999969482421875 -0.0025025177747011185 -0.0 0.9464728236198425 0.5510927438735962 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295971155166626 -0.06170385330915451 0.21605446934700012 0.999969482421875 -0.0025025177747011185 -0.0 0.6335775852203369 0.3873562812805176 0 1.0 0 0.0 0 0.0 0 0.0 0.4395871162414551 -0.19209645688533783 -0.2839455306529999 0.038544878363609314 -0.999237060546875 -0.0 0.9808439016342163 0.36983782052993774 0 1.0 0 0.0 0 0.0 0 0.0 0.4526855945587158 -0.19133025407791138 -0.2839455306529999 0.0798974558711052 -0.9967955350875854 -0.0 0.9737112522125244 0.37050437927246094 0 1.0 0 0.0 0 0.0 0 0.0 0.4526855945587158 -0.19133025407791138 0.21605445444583893 0.0798974558711052 -0.9967955350875854 -0.0 0.5051671266555786 0.20738548040390015 0 1.0 0 0.0 0 0.0 0 0.0 -0.9898860454559326 0.0304480642080307 -0.2839455306529999 -0.9944761395454407 -0.10477004200220108 -0.0 0.9691557884216309 0.6463892459869385 0 1.0 0 0.0 0 0.0 0 0.0 -0.9890834093093872 0.021011650562286377 -0.2839455306529999 -0.9977721571922302 -0.06659138947725296 -0.0 0.9690446853637695 0.6354416608810425 0 1.0 0 0.0 0 0.0 0 0.0 -0.9890834093093872 0.021011650562286377 0.21605446934700012 -0.9977721571922302 -0.06659138947725296 -0.0 0.5997934341430664 0.4558762311935425 0 1.0 0 0.0 0 0.0 0 0.0 -1.4269311428070068 -0.06197628378868103 -0.2839455306529999 -0.9919126033782959 0.1267433762550354 -0.0 0.9987492561340332 0.5499416589736938 0 1.0 0 0.0 0 0.0 0 0.0 -1.427385926246643 -0.0651845932006836 -0.2839455306529999 -0.9876095056533813 0.15674306452274323 -0.0 0.9990274310112 0.5460504293441772 0 1.0 0 0.0 0 0.0 0 0.0 -1.427385926246643 -0.0651845932006836 0.21605446934700012 -0.9876095056533813 0.15674306452274323 -0.0 0.579473078250885 0.3569989800453186 0 1.0 0 0.0 0 0.0 0 0.0 0.40146446228027344 -0.1914956420660019 -0.2839455306529999 -0.07275612652301788 -0.9973449110984802 -0.0 1.0015926361083984 0.3714491128921509 0 1.0 0 0.0 0 0.0 0 0.0 0.41347193717956543 -0.19213779270648956 -0.2839455306529999 -0.035279396921396255 -0.999359130859375 -0.0 0.9950767755508423 0.37037354707717896 0 1.0 0 0.0 0 0.0 0 0.0 0.41347193717956543 -0.19213779270648956 0.21605445444583893 -0.035279396921396255 -0.999359130859375 -0.0 1.4727497100830078 0.2068910002708435 0 1.0 0 0.0 0 0.0 0 0.0 0.9634950160980225 0.08015254139900208 -0.2839455306529999 0.9021271467208862 -0.43140965700149536 -0.0 0.027652353048324585 0.6774187088012695 0 1.0 0 0.0 0 0.0 0 0.0 0.9659590721130371 0.08488109707832336 -0.2839455306529999 0.8699911236763 -0.4930265247821808 -0.0 0.026126623153686523 0.6830544471740723 0 1.0 0 0.0 0 0.0 0 0.0 0.9659590721130371 0.08488109707832336 0.21605446934700012 0.8699911236763 -0.4930265247821808 -0.0 0.45273035764694214 0.52332603931427 0 1.0 0 0.0 0 0.0 0 0.0 1.807492971420288 -0.11070658266544342 -0.2839455306529999 0.04293954372406006 0.999053955078125 -0.0 0.9572130441665649 0.5776077508926392 0 1.0 0 0.0 0 0.0 0 0.0 1.8059203624725342 -0.1106044203042984 -0.2839455306529999 0.0876796767115593 0.9961241483688354 -0.0 0.9582072496414185 0.5778639912605286 0 1.0 0 0.0 0 0.0 0 0.0 1.8059203624725342 -0.1106044203042984 0.21605446934700012 0.0876796767115593 0.9961241483688354 -0.0 0.514346182346344 0.4164454936981201 0 1.0 0 0.0 0 0.0 0 0.0 1.0913023948669434 0.081787109375 -0.2839455306529999 -0.8963896632194519 -0.443250834941864 -0.0 0.938151478767395 0.6743619441986084 0 1.0 0 0.0 0 0.0 0 0.0 1.0935571193695068 0.07679951190948486 -0.2839455306529999 -0.9242530465126038 -0.3817560374736786 -0.0 0.9370168447494507 0.6683270931243896 0 1.0 0 0.0 0 0.0 0 0.0 1.0935571193695068 0.07679951190948486 0.21605446934700012 -0.9242530465126038 -0.3817560374736786 -0.0 0.528533935546875 0.5108895301818848 0 1.0 0 0.0 0 0.0 0 0.0 -1.6547187566757202 -0.062112487852573395 -0.2839455306529999 -0.9855342507362366 0.16928617656230927 -0.0 0.12916091084480286 0.5260705351829529 0 1.0 0 0.0 0 0.0 0 0.0 -1.6554508209228516 -0.06703440845012665 -0.2839455306529999 -0.9920957088470459 0.12540055811405182 -0.0 0.1288999617099762 0.5210342407226562 0 1.0 0 0.0 0 0.0 0 0.0 -1.6554508209228516 -0.06703440845012665 0.21605446934700012 -0.9920957088470459 0.12540055811405182 -0.0 0.43480435013771057 0.3595607280731201 0 1.0 0 0.0 0 0.0 0 0.0 0.41347193717956543 -0.19213779270648956 -0.2839455306529999 -0.035279396921396255 -0.999359130859375 -0.0 0.9950767755508423 0.37037354707717896 0 1.0 0 0.0 0 0.0 0 0.0 0.4259195327758789 -0.19235184788703918 -0.2839455306529999 0.0007324442267417908 -0.999969482421875 -0.0 0.9882972240447998 0.3698185086250305 0 1.0 0 0.0 0 0.0 0 0.0 0.4259195327758789 -0.19235184788703918 0.21605445444583893 0.0007324442267417908 -0.999969482421875 -0.0 1.483035922050476 0.2059873342514038 0 1.0 0 0.0 0 0.0 0 0.0 1.8114688396453857 -0.11067495495080948 -0.2839455306529999 -0.052705466747283936 0.9985961318016052 -0.0 0.9546976089477539 0.5773108601570129 0 1.0 0 0.0 0 0.0 0 0.0 1.8091070652008057 -0.11074063181877136 -0.2839455306529999 -0.003326517529785633 0.999969482421875 -0.0 0.9561920166015625 0.5774307250976562 0 1.0 0 0.0 0 0.0 0 0.0 1.8091070652008057 -0.11074063181877136 0.21605446934700012 -0.003326517529785633 0.999969482421875 -0.0 0.5163832306861877 0.4163755178451538 0 1.0 0 0.0 0 0.0 0 0.0 -1.1529005765914917 0.019132673740386963 -0.2839455306529999 0.999267578125 -0.03750724717974663 -0.0 0.0776045024394989 0.6263766288757324 0 1.0 0 0.0 0 0.0 0 0.0 -1.1524080038070679 0.027783438563346863 -0.2839455306529999 0.9969481229782104 -0.07782220095396042 -0.0 0.0781308114528656 0.6369128227233887 0 1.0 0 0.0 0 0.0 0 0.0 -1.1524080038070679 0.027783438563346863 0.21605446934700012 0.9969481229782104 -0.07782220095396042 -0.0 0.49978107213974 0.44756609201431274 0 1.0 0 0.0 0 0.0 0 0.0 0.4259195327758789 -0.19235184788703918 -0.2839455306529999 0.0007324442267417908 -0.999969482421875 -0.0 0.9882972240447998 0.3698185086250305 0 1.0 0 0.0 0 0.0 0 0.0 0.4395871162414551 -0.19209645688533783 -0.2839455306529999 0.038544878363609314 -0.999237060546875 -0.0 0.9808439016342163 0.36983782052993774 0 1.0 0 0.0 0 0.0 0 0.0 0.4395871162414551 -0.19209645688533783 0.21605445444583893 0.038544878363609314 -0.999237060546875 -0.0 0.49437659978866577 0.20612168312072754 0 1.0 0 0.0 0 0.0 0 0.0 -0.9890834093093872 0.021011650562286377 -0.2839455306529999 -0.9977721571922302 -0.06659138947725296 -0.0 0.9690446853637695 0.6354416608810425 0 1.0 0 0.0 0 0.0 0 0.0 -0.988601803779602 0.011076599359512329 -0.2839455306529999 -0.999481201171875 -0.0318918414413929 -0.0 0.9691407680511475 0.6238844990730286 0 1.0 0 0.0 0 0.0 0 0.0 -0.988601803779602 0.011076599359512329 0.21605446934700012 -0.999481201171875 -0.0318918414413929 -0.0 0.6011215448379517 0.44461947679519653 0 1.0 0 0.0 0 0.0 0 0.0 0.8639230728149414 0.08168494701385498 -0.2839455306529999 -0.9484237432479858 0.316934734582901 -0.0 0.08550941944122314 0.6573827266693115 0 1.0 0 0.0 0 0.0 0 0.0 0.8602306842803955 0.06933698058128357 -0.2839455306529999 -0.9663075804710388 0.25730153918266296 -0.0 0.08631324768066406 0.644163966178894 0 1.0 0 0.0 0 0.0 0 0.0 0.8602306842803955 0.06933698058128357 0.21605446934700012 -0.9663075804710388 0.25730153918266296 -0.0 0.39746999740600586 0.5072903633117676 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 0.18803346157073975 -0.2839455306529999 -1.0 0.0 -0.0 0.09209313988685608 0.823844313621521 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 -0.04734307527542114 -0.2839455306529999 -0.999969482421875 -0.005340739153325558 -0.0 0.07294094562530518 0.635789155960083 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 -0.04734307527542114 0.21605446934700012 -0.999969482421875 -0.005340739153325558 -0.0 0.4058777093887329 0.4971381425857544 0 1.0 0 0.0 0 0.0 0 0.0 -1.5574332475662231 -0.0654108077287674 -0.2839455306529999 0.9870296120643616 -0.16049684584140778 -0.0 0.07924100756645203 0.5343766212463379 0 1.0 0 0.0 0 0.0 0 0.0 -1.5567642450332642 -0.0621635764837265 -0.2839455306529999 0.9698172211647034 -0.24378184974193573 -0.0 0.07914271950721741 0.5382862091064453 0 1.0 0 0.0 0 0.0 0 0.0 -1.5567642450332642 -0.0621635764837265 0.21605446934700012 0.9698172211647034 -0.24378184974193573 -0.0 0.4906209409236908 0.35045212507247925 0 1.0 0 0.0 0 0.0 0 0.0 1.8091070652008057 -0.11074063181877136 -0.2839455306529999 -0.003326517529785633 0.999969482421875 -0.0 0.9561920166015625 0.5774307250976562 0 1.0 0 0.0 0 0.0 0 0.0 1.807492971420288 -0.11070658266544342 -0.2839455306529999 0.04293954372406006 0.999053955078125 -0.0 0.9572130441665649 0.5776077508926392 0 1.0 0 0.0 0 0.0 0 0.0 1.807492971420288 -0.11070658266544342 0.21605446934700012 0.04293954372406006 0.999053955078125 -0.0 0.5153530836105347 0.41636550426483154 0 1.0 0 0.0 0 0.0 0 0.0 -1.427385926246643 -0.0651845932006836 -0.2839455306529999 -0.9876095056533813 0.15674306452274323 -0.0 0.9990274310112 0.5460504293441772 0 1.0 0 0.0 0 0.0 0 0.0 -1.4278943538665771 -0.06807669252157211 -0.2839455306529999 -0.9811395406723022 0.19315165281295776 -0.0 0.9993356466293335 0.5425490736961365 0 1.0 0 0.0 0 0.0 0 0.0 -1.4278943538665771 -0.06807669252157211 0.21605446934700012 -0.9811395406723022 0.19315165281295776 -0.0 0.5794331431388855 0.3534455895423889 0 1.0 0 0.0 0 0.0 0 0.0 -0.05954456329345703 0.18803346157073975 -0.2839455306529999 0.0 0.999969482421875 -0.0 0.018389105796813965 0.8526803851127625 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 0.18803346157073975 -0.2839455306529999 0.0 1.0 -0.0 0.09209313988685608 0.823844313621521 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 0.18803346157073975 0.21605448424816132 0.0 0.999969482421875 -0.0 0.42104125022888184 0.6850046515464783 0 1.0 0 0.0 0 0.0 0 0.0 -1.1530647277832031 0.010100007057189941 -0.2839455306529999 0.999969482421875 -0.00317392498254776 -0.0 0.07684415578842163 0.6153649091720581 0 1.0 0 0.0 0 0.0 0 0.0 -1.1529005765914917 0.019132673740386963 -0.2839455306529999 0.999267578125 -0.03750724717974663 -0.0 0.0776045024394989 0.6263766288757324 0 1.0 0 0.0 0 0.0 0 0.0 -1.1529005765914917 0.019132673740386963 0.21605446934700012 0.999267578125 -0.03750724717974663 -0.0 0.49947699904441833 0.4370027780532837 0 1.0 0 0.0 0 0.0 0 0.0 0.9613277912139893 0.0751904845237732 -0.2839455306529999 0.9291360378265381 -0.36967071890830994 -0.0 0.028948843479156494 0.6715095043182373 0 1.0 0 0.0 0 0.0 0 0.0 0.9634950160980225 0.08015254139900208 -0.2839455306529999 0.9021271467208862 -0.43140965700149536 -0.0 0.027652353048324585 0.6774187088012695 0 1.0 0 0.0 0 0.0 0 0.0 0.9634950160980225 0.08015254139900208 0.21605446934700012 0.9021271467208862 -0.43140965700149536 -0.0 0.45109784603118896 0.5180555582046509 0 1.0 0 0.0 0 0.0 0 0.0 1.6847851276397705 -0.11117846518754959 -0.2839455306529999 -0.9957884550094604 -0.09140293300151825 -0.0 0.03589153289794922 0.5779250860214233 0 1.0 0 0.0 0 0.0 0 0.0 1.6852014064788818 -0.11525513231754303 -0.2839455306529999 -0.9934385418891907 -0.11429181694984436 -0.0 0.03549852967262268 0.5730034112930298 0 1.0 0 0.0 0 0.0 0 0.0 1.6852014064788818 -0.11525513231754303 0.21605446934700012 -0.9934385418891907 -0.11429181694984436 -0.0 0.43650829792022705 0.4166916012763977 0 1.0 0 0.0 0 0.0 0 0.0 -1.2532812356948853 0.018891841173171997 -0.2839455306529999 -0.9991455078125 0.04119998961687088 -0.0 0.13302001357078552 0.6010407209396362 0 1.0 0 0.0 0 0.0 0 0.0 -1.2535901069641113 0.0034450143575668335 -0.2839455306529999 -0.999969482421875 -0.00045777764171361923 -0.0 0.13118746876716614 0.5848770141601562 0 1.0 0 0.0 0 0.0 0 0.0 -1.2535901069641113 0.0034450143575668335 0.21605446934700012 -0.999969482421875 -0.00045777764171361923 -0.0 0.4439847469329834 0.42119497060775757 0 1.0 0 0.0 0 0.0 0 0.0 1.0935571193695068 0.07679951190948486 -0.2839455306529999 -0.9242530465126038 -0.3817560374736786 -0.0 0.9370168447494507 0.6683270931243896 0 1.0 0 0.0 0 0.0 0 0.0 1.0955345630645752 0.07152733206748962 -0.2839455306529999 -0.9467146992683411 -0.32203131914138794 -0.0 0.936097264289856 0.6619822978973389 0 1.0 0 0.0 0 0.0 0 0.0 1.0955345630645752 0.07152733206748962 0.21605446934700012 -0.9467146992683411 -0.32203131914138794 -0.0 0.5298032760620117 0.5048590898513794 0 1.0 0 0.0 0 0.0 0 0.0 -0.05954456329345703 0.01710525155067444 -0.2839455306529999 0.999969482421875 0.0014648884534835815 -0.0 0.014768153429031372 0.7227939367294312 0 1.0 0 0.0 0 0.0 0 0.0 -0.05954456329345703 0.18803346157073975 -0.2839455306529999 1.0 0.0 -0.0 0.018389105796813965 0.8526803851127625 0 1.0 0 0.0 0 0.0 0 0.0 -0.05954456329345703 0.18803346157073975 0.21605448424816132 1.0 0.0 -0.0 0.46700388193130493 0.6951695084571838 0 1.0 0 0.0 0 0.0 0 0.0 -1.557834506034851 -0.06876019388437271 -0.2839455306529999 0.9968565702438354 -0.0788903459906578 -0.0 0.07917439937591553 0.5303995609283447 0 1.0 0 0.0 0 0.0 0 0.0 -1.5574332475662231 -0.0654108077287674 -0.2839455306529999 0.9870296120643616 -0.16049684584140778 -0.0 0.07924100756645203 0.5343766212463379 0 1.0 0 0.0 0 0.0 0 0.0 -1.5574332475662231 -0.0654108077287674 0.21605446934700012 0.9870296120643616 -0.16049684584140778 -0.0 0.49014294147491455 0.3466310501098633 0 1.0 0 0.0 0 0.0 0 0.0 0.08196139335632324 0.18803346157073975 -0.2839455306529999 -1.0 0.0 -0.0 0.896752655506134 0.8321271538734436 0 1.0 0 0.0 0 0.0 0 0.0 0.08196139335632324 0.03111577033996582 -0.2839455306529999 -0.999969482421875 0.0019531846046447754 -0.0 0.9129189848899841 0.7195390462875366 0 1.0 0 0.0 0 0.0 0 0.0 0.08196139335632324 0.03111577033996582 0.21605446934700012 -0.999969482421875 0.0019531846046447754 -0.0 0.5414687395095825 0.5723863840103149 0 1.0 0 0.0 0 0.0 0 0.0 1.6852014064788818 -0.11525513231754303 -0.2839455306529999 -0.9934385418891907 -0.11429181694984436 -0.0 0.03549852967262268 0.5730034112930298 0 1.0 0 0.0 0 0.0 0 0.0 1.6856610774993896 -0.11884532123804092 -0.2839455306529999 -0.9896237254142761 -0.143589586019516 -0.0 0.03509938716888428 0.5686724185943604 0 1.0 0 0.0 0 0.0 0 0.0 1.6856610774993896 -0.11884532123804092 0.21605446934700012 -0.9896237254142761 -0.143589586019516 -0.0 0.4365590512752533 0.4122923016548157 0 1.0 0 0.0 0 0.0 0 0.0 -0.988601803779602 0.011076599359512329 -0.2839455306529999 -0.999481201171875 -0.0318918414413929 -0.0 0.9691407680511475 0.6238844990730286 0 1.0 0 0.0 0 0.0 0 0.0 -0.9884412288665771 0.0006429105997085571 -0.2839455306529999 -0.999969482421875 0.0011291848495602608 -0.0 0.9694360494613647 0.6117208003997803 0 1.0 0 0.0 0 0.0 0 0.0 -0.9884412288665771 0.0006429105997085571 0.21605446934700012 -0.999969482421875 0.0011291848495602608 -0.0 0.6023536920547485 0.432685911655426 0 1.0 0 0.0 0 0.0 0 0.0 -1.6554508209228516 -0.06703440845012665 -0.2839455306529999 -0.9920957088470459 0.12540055811405182 -0.0 0.1288999617099762 0.5210342407226562 0 1.0 0 0.0 0 0.0 0 0.0 -1.6559737920761108 -0.07205118983983994 -0.2839455306529999 -0.9965819120407104 0.08249153196811676 -0.0 0.1285407841205597 0.515961766242981 0 1.0 0 0.0 0 0.0 0 0.0 -1.6559737920761108 -0.07205118983983994 0.21605446934700012 -0.9965819120407104 0.08249153196811676 -0.0 0.4342021346092224 0.35455411672592163 0 1.0 0 0.0 0 0.0 0 0.0 0.9594573974609375 0.06999492645263672 -0.2839455306529999 0.9511398673057556 -0.3086947202682495 -0.0 0.03002151846885681 0.6653246879577637 0 1.0 0 0.0 0 0.0 0 0.0 0.9613277912139893 0.0751904845237732 -0.2839455306529999 0.9291360378265381 -0.36967071890830994 -0.0 0.028948843479156494 0.6715095043182373 0 1.0 0 0.0 0 0.0 0 0.0 0.9613277912139893 0.0751904845237732 0.21605446934700012 0.9291360378265381 -0.36967071890830994 -0.0 0.4496181607246399 0.512480616569519 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 0.18803346157073975 -0.2839455306529999 0.0 0.999969482421875 -0.0 0.8460309505462646 0.7894145250320435 0 1.0 0 0.0 0 0.0 0 0.0 0.08196139335632324 0.18803346157073975 -0.2839455306529999 0.0 1.0 -0.0 0.896752655506134 0.8321271538734436 0 1.0 0 0.0 0 0.0 0 0.0 0.08196139335632324 0.18803346157073975 0.21605448424816132 0.0 0.999969482421875 -0.0 0.536641538143158 0.6864609718322754 0 1.0 0 0.0 0 0.0 0 0.0 1.6856610774993896 -0.11884532123804092 -0.2839455306529999 -0.9896237254142761 -0.143589586019516 -0.0 0.03509938716888428 0.5686724185943604 0 1.0 0 0.0 0 0.0 0 0.0 1.6861646175384521 -0.12194903194904327 -0.2839455306529999 -0.9862361550331116 -0.16528823971748352 -0.0 0.03469330072402954 0.5649328231811523 0 1.0 0 0.0 0 0.0 0 0.0 1.6861646175384521 -0.12194903194904327 0.21605446934700012 -0.9862361550331116 -0.16528823971748352 -0.0 0.43666714429855347 0.4084749221801758 0 1.0 0 0.0 0 0.0 0 0.0 -1.4278943538665771 -0.06807669252157211 -0.2839455306529999 -0.9811395406723022 0.19315165281295776 -0.0 0.9993356466293335 0.5425490736961365 0 1.0 0 0.0 0 0.0 0 0.0 -1.42845618724823 -0.07065258175134659 -0.2839455306529999 -0.9712515473365784 0.2380138486623764 -0.0 0.9996737241744995 0.5394340753555298 0 1.0 0 0.0 0 0.0 0 0.0 -1.42845618724823 -0.07065258175134659 0.21605446934700012 -0.9712515473365784 0.2380138486623764 -0.0 0.5793260335922241 0.35026490688323975 0 1.0 0 0.0 0 0.0 0 0.0 -1.152950406074524 0.00040453672409057617 -0.2839455306529999 0.99969482421875 0.024445325136184692 -0.0 0.07586252689361572 0.6035301685333252 0 1.0 0 0.0 0 0.0 0 0.0 -1.1530647277832031 0.010100007057189941 -0.2839455306529999 0.999969482421875 -0.00317392498254776 -0.0 0.07684415578842163 0.6153649091720581 0 1.0 0 0.0 0 0.0 0 0.0 -1.1530647277832031 0.010100007057189941 0.21605446934700012 0.999969482421875 -0.00317392498254776 -0.0 0.4993695318698883 0.4259029030799866 0 1.0 0 0.0 0 0.0 0 0.0 1.1923551559448242 0.0578269362449646 -0.2839455306529999 0.9782708287239075 0.2072817087173462 -0.0 0.8844856023788452 0.6234896779060364 0 1.0 0 0.0 0 0.0 0 0.0 1.1888792514801025 0.0722278356552124 -0.2839455306529999 0.964476466178894 0.2641376852989197 -0.0 0.884676992893219 0.6387784481048584 0 1.0 0 0.0 0 0.0 0 0.0 1.1888792514801025 0.0722278356552124 0.21605446934700012 0.964476466178894 0.2641376852989197 -0.0 0.5769736170768738 0.5028921365737915 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 -0.18394553661346436 -0.2839455306529999 1.0 0.0 -0.0 0.8834002017974854 0.4818020462989807 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 0.18803346157073975 -0.2839455306529999 1.0 0.0 -0.0 0.8460309505462646 0.7894145250320435 0 1.0 0 0.0 0 0.0 0 0.0 0.18038535118103027 0.18803346157073975 0.21605448424816132 1.0 0.0 -0.0 0.5768240690231323 0.6677558422088623 0 1.0 0 0.0 0 0.0 0 0.0 1.6861646175384521 -0.12194903194904327 -0.2839455306529999 -0.9862361550331116 -0.16528823971748352 -0.0 0.03469330072402954 0.5649328231811523 0 1.0 0 0.0 0 0.0 0 0.0 1.6868493556976318 -0.12590773403644562 -0.2839455306529999 -0.982909619808197 -0.18402661383152008 -0.0 0.0341530442237854 0.5601645112037659 0 1.0 0 0.0 0 0.0 0 0.0 1.6868493556976318 -0.12590773403644562 0.21605446934700012 -0.982909619808197 -0.18402661383152008 -0.0 0.43683189153671265 0.40360039472579956 0 1.0 0 0.0 0 0.0 0 0.0 -1.2535901069641113 0.0034450143575668335 -0.2839455306529999 -0.999969482421875 -0.00045777764171361923 -0.0 0.13118746876716614 0.5848770141601562 0 1.0 0 0.0 0 0.0 0 0.0 -1.2532728910446167 -0.011683180928230286 -0.2839455306529999 -0.999053955078125 -0.04312265291810036 -0.0 0.12915363907814026 0.5690999031066895 0 1.0 0 0.0 0 0.0 0 0.0 -1.2532728910446167 -0.011683180928230286 0.21605446934700012 -0.999053955078125 -0.04312265291810036 -0.0 0.4432278871536255 0.40499669313430786 0 1.0 0 0.0 0 0.0 0 0.0 1.0955345630645752 0.07152733206748962 -0.2839455306529999 -0.9467146992683411 -0.32203131914138794 -0.0 0.936097264289856 0.6619822978973389 0 1.0 0 0.0 0 0.0 0 0.0 1.0972347259521484 0.06597055494785309 -0.2839455306529999 -0.964293360710144 -0.26471754908561707 -0.0 0.9353874921798706 0.6553221940994263 0 1.0 0 0.0 0 0.0 0 0.0 1.0972347259521484 0.06597055494785309 0.21605446934700012 -0.964293360710144 -0.26471754908561707 -0.0 0.5309305191040039 0.49846935272216797 0 1.0 0 0.0 0 0.0 0 0.0 0.08196139335632324 0.03111577033996582 -0.2839455306529999 -0.999969482421875 0.0019531846046447754 -0.0 0.9129189848899841 0.7195390462875366 0 1.0 0 0.0 0 0.0 0 0.0 0.08191061019897461 0.01821810007095337 -0.2839455306529999 -0.99993896484375 0.008301034569740295 -0.0 0.9140788316726685 0.7073009014129639 0 1.0 0 0.0 0 0.0 0 0.0 0.08191061019897461 0.01821810007095337 0.21605446934700012 -0.99993896484375 0.008301034569740295 -0.0 0.5418952107429504 0.560042142868042 0 1.0 0 0.0 0 0.0 0 0.0 -1.5579683780670166 -0.07221173495054245 -0.2839455306529999 0.999969482421875 -0.003662221133708954 -0.0 0.07894507050514221 0.5263540744781494 0 1.0 0 0.0 0 0.0 0 0.0 -1.557834506034851 -0.06876019388437271 -0.2839455306529999 0.9968565702438354 -0.0788903459906578 -0.0 0.07917439937591553 0.5303995609283447 0 1.0 0 0.0 0 0.0 0 0.0 -1.557834506034851 -0.06876019388437271 0.21605446934700012 0.9968565702438354 -0.0788903459906578 -0.0 0.4898357689380646 0.3426889181137085 0 1.0 0 0.0 0 0.0 0 0.0 1.6868493556976318 -0.12590773403644562 -0.2839455306529999 -0.982909619808197 -0.18402661383152008 -0.0 0.0341530442237854 0.5601645112037659 0 1.0 0 0.0 0 0.0 0 0.0 1.6876194477081299 -0.1297277808189392 -0.2839455306529999 -0.9772636890411377 -0.21192052960395813 -0.0 0.03357023000717163 0.5555682182312012 0 1.0 0 0.0 0 0.0 0 0.0 1.6876194477081299 -0.1297277808189392 0.21605446934700012 -0.9772636890411377 -0.21192052960395813 -0.0 0.4370587468147278 0.39888298511505127 0 1.0 0 0.0 0 0.0 0 0.0 -0.9884412288665771 0.0006429105997085571 -0.2839455306529999 -0.999969482421875 0.0011291848495602608 -0.0 0.9694360494613647 0.6117208003997803 0 1.0 0 0.0 0 0.0 0 0.0 -0.9886071681976318 -0.008732706308364868 -0.2839455306529999 -0.99932861328125 0.03643909841775894 -0.0 0.9698705673217773 0.6007810831069946 0 1.0 0 0.0 0 0.0 0 0.0 -0.9886071681976318 -0.008732706308364868 0.21605446934700012 -0.99932861328125 0.03643909841775894 -0.0 0.6033116579055786 0.4218752980232239 0 1.0 0 0.0 0 0.0 0 0.0 0.08191061019897461 0.01821810007095337 -0.2839455306529999 -0.99993896484375 0.008301034569740295 -0.0 0.9140788316726685 0.7073009014129639 0 1.0 0 0.0 0 0.0 0 0.0 0.0817573070526123 0.006144970655441284 -0.2839455306529999 -0.99981689453125 0.017670217901468277 -0.0 0.9152042865753174 0.6954561471939087 0 1.0 0 0.0 0 0.0 0 0.0 0.0817573070526123 0.006144970655441284 0.21605446934700012 -0.99981689453125 0.017670217901468277 -0.0 0.5422479510307312 0.548079252243042 0 1.0 0 0.0 0 0.0 0 0.0 0.9578835964202881 0.06456585228443146 -0.2839455306529999 0.9684133529663086 -0.24930571019649506 -0.0 0.030875861644744873 0.6588609218597412 0 1.0 0 0.0 0 0.0 0 0.0 0.9594573974609375 0.06999492645263672 -0.2839455306529999 0.9511398673057556 -0.3086947202682495 -0.0 0.03002151846885681 0.6653246879577637 0 1.0 0 0.0 0 0.0 0 0.0 0.9594573974609375 0.06999492645263672 0.21605446934700012 0.9511398673057556 -0.3086947202682495 -0.0 0.44829061627388 0.5065951347351074 0 1.0 0 0.0 0 0.0 0 0.0 -1.3294657468795776 -0.07733432948589325 -0.2839455306529999 0.99981689453125 0.017700735479593277 -0.0 0.9472634792327881 0.5347473621368408 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295642137527466 -0.06969787180423737 -0.2839455306529999 0.99993896484375 0.008484145626425743 -0.0 0.946895956993103 0.5426977872848511 0 1.0 0 0.0 0 0.0 0 0.0 -1.3295642137527466 -0.06969787180423737 0.21605446934700012 0.99993896484375 0.008484145626425743 -0.0 0.6346471905708313 0.37915945053100586 0 1.0 0 0.0 0 0.0 0 0.0 1.6876194477081299 -0.1297277808189392 -0.2839455306529999 -0.9772636890411377 -0.21192052960395813 -0.0 0.03357023000717163 0.5555682182312012 0 1.0 0 0.0 0 0.0 0 0.0 1.688474416732788 -0.13340918719768524 -0.2839455306529999 -0.9704275727272034 -0.24134036898612976 -0.0 0.03294515609741211 0.5511438846588135 0 1.0 0 0.0 0 0.0 0 0.0 1.688474416732788 -0.13340918719768524 0.21605446934700012 -0.9704275727272034 -0.24134036898612976 -0.0 0.4373483657836914 0.39432311058044434 0 1.0 0 0.0 0 0.0 0 0.0 0.8602306842803955 0.06933698058128357 -0.2839455306529999 -0.9663075804710388 0.25730153918266296 -0.0 0.08631324768066406 0.644163966178894 0 1.0 0 0.0 0 0.0 0 0.0 0.8572096824645996 0.056431978940963745 -0.2839455306529999 -0.9797662496566772 0.19998779892921448 -0.0 0.08673921227455139 0.6304571628570557 0 1.0 0 0.0 0 0.0 0 0.0 0.8572096824645996 0.056431978940963745 0.21605446934700012 -0.9797662496566772 0.19998779892921448 -0.0 0.3951107859611511 0.4943978190422058 0 1.0 0 0.0 0 0.0 0 0.0 -1.42845618724823 -0.07065258175134659 -0.2839455306529999 -0.9712515473365784 0.2380138486623764 -0.0 0.9996737241744995 0.5394340753555298 0 1.0 0 0.0 0 0.0 0 0.0 -1.4290716648101807 -0.07291226089000702 -0.2839455306529999 -0.9586474299430847 0.2845240533351898 -0.0 1.000042200088501 0.5367017984390259 0 1.0 0 0.0 0 0.0 0 0.0 -1.4290716648101807 -0.07291226089000702 0.21605446934700012 -0.9586474299430847 0.2845240533351898 -0.0 0.579150915145874 0.3474537134170532 0 1.0 0 0.0 0 0.0 0 0.0 -1.1526074409484863 -0.008833646774291992 -0.2839455306529999 0.9986876845359802 0.05102694779634476 -0.0 0.07480058073997498 0.5922513008117676 0 1.0 0 0.0 0 0.0 0 0.0 -1.152950406074524 0.00040453672409057617 -0.2839455306529999 0.99969482421875 0.024445325136184692 -0.0 0.07586252689361572 0.6035301685333252 0 1.0 0 0.0 0 0.0 0 0.0 -1.152950406074524 0.00040453672409057617 0.21605446934700012 0.99969482421875 0.024445325136184692 -0.0 0.4994335174560547 0.4139253497123718 0 1.0 0 0.0 0 0.0 0 0.0 -0.059506893157958984 0.004450798034667969 -0.2839455306529999 0.999969482421875 0.006256294436752796 -0.0 0.014528810977935791 0.7096704244613647 0 1.0 0 0.0 0 0.0 0 0.0 -0.05954456329345703 0.01710525155067444 -0.2839455306529999 0.999969482421875 0.0014648884534835815 -0.0 0.014768153429031372 0.7227939367294312 0 1.0 0 0.0 0 0.0 0 0.0 -0.05954456329345703 0.01710525155067444 0.21605446934700012 0.999969482421875 0.0014648884534835815 -0.0 0.4619511365890503 0.5655359625816345 0 1.0 0 0.0 0 0.0 0 0.0 1.688474416732788 -0.13340918719768524 -0.2839455306529999 -0.9704275727272034 -0.24134036898612976 -0.0 0.03294515609741211 0.5511438846588135 0 1.0 0 0.0 0 0.0 0 0.0 1.6894142627716064 -0.13695195317268372 -0.2839455306529999 -0.9621570706367493 -0.27240821719169617 -0.0 0.032277703285217285 0.5468913316726685 0 1.0 0 0.0 0 0.0 0 0.0 1.6894142627716064 -0.13695195317268372 0.21605446934700012 -0.9621570706367493 -0.27240821719169617 -0.0 0.4377015233039856 0.38992077112197876 0 1.0 0 0.0 0 0.0 0 0.0 -0.9886071681976318 -0.008732706308364868 -0.2839455306529999 -0.99932861328125 0.03643909841775894 -0.0 0.9698705673217773 0.6007810831069946 0 1.0 0 0.0 0 0.0 0 0.0 -0.9891033172607422 -0.017711833119392395 -0.2839455306529999 -0.9971312880516052 0.07553330808877945 -0.0 0.9704671502113342 0.5903095006942749 0 1.0 0 0.0 0 0.0 0 0.0 -0.9891033172607422 -0.017711833119392395 0.21605446934700012 -0.9971312880516052 0.07553330808877945 -0.0 0.604060173034668 0.4114415645599365 0 1.0 0 0.0 0 0.0 0 0.0 1.0972347259521484 0.06597055494785309 -0.2839455306529999 -0.964293360710144 -0.26471754908561707 -0.0 0.9353874921798706 0.6553221940994263 0 1.0 0 0.0 0 0.0 0 0.0 1.0986576080322266 0.06012919545173645 -0.2839455306529999 -0.9776299595832825 -0.21030305325984955 -0.0 0.9348825812339783 0.6483409404754639 0 1.0 0 0.0 0 0.0 0 0.0 1.0986576080322266 0.06012919545173645 0.21605446934700012 -0.9776299595832825 -0.21030305325984955 -0.0 0.5319159626960754 0.49171215295791626 0 1.0 0 0.0 0 0.0 0 0.0 -1.6559737920761108 -0.07205118983983994 -0.2839455306529999 -0.9965819120407104 0.08249153196811676 -0.0 0.1285407841205597 0.515961766242981 0 1.0 0 0.0 0 0.0 0 0.0 -1.6562875509262085 -0.07716283947229385 -0.2839455306529999 -0.9991455078125 0.04068117216229439 -0.0 0.1280842125415802 0.5108512043952942 0 1.0 0 0.0 0 0.0 0 0.0 -1.6562875509262085 -0.07716283947229385 0.21605446934700012 -0.9991455078125 0.04068117216229439 -0.0 0.4336860775947571 0.34944528341293335 0 1.0 0 0.0 0 0.0 0 0.0 0.0817573070526123 0.006144970655441284 -0.2839455306529999 -0.99981689453125 0.017670217901468277 -0.0 0.9152042865753174 0.6954561471939087 0 1.0 0 0.0 0 0.0 0 0.0 0.08150196075439453 -0.005103573203086853 -0.2839455306529999 -0.99957275390625 0.02847376838326454 -0.0 0.9162991046905518 0.6840966939926147 0 1.0 0 0.0 0 0.0 0 0.0 0.08150196075439453 -0.005103573203086853 0.21605446934700012 -0.99957275390625 0.02847376838326454 -0.0 0.5425242185592651 0.5365892648696899 0 1.0 0 0.0 0 0.0 0 0.0 1.6894142627716064 -0.13695195317268372 -0.2839455306529999 -0.9621570706367493 -0.27240821719169617 -0.0 0.032277703285217285 0.5468913316726685 0 1.0 0 0.0 0 0.0 0 0.0 1.6904394626617432 -0.14035606384277344 -0.2839455306529999 -0.9522690773010254 -0.30521562695503235 -0.0 0.03156742453575134 0.5428102016448975 0 1.0 0 0.0 0 0.0 0 0.0 1.6904394626617432 -0.14035606384277344 0.21605446934700012 -0.9522690773010254 -0.30521562695503235 -0.0 0.4381193518638611 0.38567590713500977 0 1.0 0 0.0 0 0.0 0 0.0 -1.1520358324050903 -0.017614543437957764 -0.2839455306529999 0.9967650175094604 0.08032471686601639 -0.0 0.07365843653678894 0.5815540552139282 0 1.0 0 0.0 0 0.0 0 0.0 -1.1526074409484863 -0.008833646774291992 -0.2839455306529999 0.9986876845359802 0.05102694779634476 -0.0 0.07480058073997498 0.5922513008117676 0 1.0 0 0.0 0 0.0 0 0.0 -1.1526074409484863 -0.008833646774291992 0.21605446934700012 0.9986876845359802 0.05102694779634476 -0.0 0.49964436888694763 0.40247344970703125 0 1.0 0 0.0 0 0.0 0 0.0 0.9566066265106201 0.058903276920318604 -0.2839455306529999 0.9813531637191772 -0.19205297529697418 -0.0 0.031516820192337036 0.6521144509315491 0 1.0 0 0.0 0 0.0 0 0.0 0.9578835964202881 0.06456585228443146 -0.2839455306529999 0.9684133529663086 -0.24930571019649506 -0.0 0.030875861644744873 0.6588609218597412 0 1.0 0 0.0 0 0.0 0 0.0 0.9578835964202881 0.06456585228443146 0.21605446934700012 0.9684133529663086 -0.24930571019649506 -0.0 0.44711482524871826 0.5003923177719116 0 1.0 0 0.0 0 0.0 0 0.0 -1.557861328125 -0.07561706751585007 -0.2839455306529999 0.9979552626609802 0.0637531653046608 -0.0 0.07858288288116455 0.5224087238311768 0 1.0 0 0.0 0 0.0 0 0.0 -1.5579683780670166 -0.07221173495054245 -0.2839455306529999 0.999969482421875 -0.003662221133708954 -0.0 0.07894507050514221 0.5263540744781494 0 1.0 0 0.0 0 0.0 0 0.0 -1.5579683780670166 -0.07221173495054245 0.21605446934700012 0.999969482421875 -0.003662221133708954 -0.0 0.4897008240222931 0.33862465620040894 0 1.0 0 0.0 0 0.0 0 0.0 -0.059393882751464844 -0.007359623908996582 -0.2839455306529999 0.999908447265625 0.013367107138037682 -0.0 0.014256507158279419 0.6969905495643616 0 1.0 0 0.0 0 0.0 0 0.0 -0.059506893157958984 0.004450798034667969 -0.2839455306529999 0.999969482421875 0.006256294436752796 -0.0 0.014528810977935791 0.7096704244613647 0 1.0 0 0.0 0 0.0 0 0.0 -0.059506893157958984 0.004450798034667969 0.21605446934700012 0.999969482421875 0.006256294436752796 -0.0 0.46153777837753296 0.5524322390556335 0 1.0 0 0.0 0 0.0 0 0.0 1.6904394626617432 -0.14035606384277344 -0.2839455306529999 -0.9522690773010254 -0.30521562695503235 -0.0 0.03156742453575134 0.5428102016448975 0 1.0 0 0.0 0 0.0 0 0.0 1.6915500164031982 -0.1436215341091156 -0.2839455306529999 -0.9405499696731567 -0.3395794630050659 -0.0 0.030814290046691895 0.5388997793197632 0 1.0 0 0.0 0 0.0 0 0.0 1.6915500164031982 -0.1436215341091156 0.21605446934700012 -0.9405499696731567 -0.3395794630050659 -0.0 0.4386027455329895 0.3815883994102478 0 1.0 0 0.0 0 0.0 0 0.0 -1.2532728910446167 -0.011683180928230286 -0.2839455306529999 -0.999053955078125 -0.04312265291810036 -0.0 0.12915363907814026 0.5690999031066895 0 1.0 0 0.0 0 0.0 0 0.0 -1.2523205280303955 -0.026244625449180603 -0.2839455306529999 -0.9960020780563354 -0.08899196982383728 -0.0 0.12694236636161804 0.5540019273757935 0 1.0 0 0.0 0 0.0 0 0.0 -1.2523205280303955 -0.026244625449180603 0.21605446934700012 -0.9960020780563354 -0.08899196982383728 -0.0 0.4427863359451294 0.38930970430374146 0 1.0 0 0.0 0 0.0 0 0.0 1.0986576080322266 0.06012919545173645 -0.2839455306529999 -0.9776299595832825 -0.21030305325984955 -0.0 0.9348825812339783 0.6483409404754639 0 1.0 0 0.0 0 0.0 0 0.0 1.0998032093048096 0.05400325357913971 -0.2839455306529999 -0.9872432351112366 -0.1590624749660492 -0.0 0.9345777034759521 0.6410322189331055 0 1.0 0 0.0 0 0.0 0 0.0 1.0998032093048096 0.05400325357913971 0.21605446934700012 -0.9872432351112366 -0.1590624749660492 -0.0 0.5327593684196472 0.4845793843269348 0 1.0 0 0.0 0 0.0 0 0.0 -1.4290716648101807 -0.07291226089000702 -0.2839455306529999 -0.9586474299430847 0.2845240533351898 -0.0 1.000042200088501 0.5367017984390259 0 1.0 0 0.0 0 0.0 0 0.0 -1.4300907850265503 -0.07608164101839066 -0.2839455306529999 -0.9429304003715515 0.3329569399356842 -0.0 1.0006492137908936 0.532871663570404 0 1.0 0 0.0 0 0.0 0 0.0 -1.4300907850265503 -0.07608164101839066 0.21605446934700012 -0.9429304003715515 0.3329569399356842 -0.0 0.5788003206253052 0.3434860110282898 0 1.0 0 0.0 0 0.0 0 0.0 0.08150196075439453 -0.005103573203086853 -0.2839455306529999 -0.99957275390625 0.02847376838326454 -0.0 0.9162991046905518 0.6840966939926147 0 1.0 0 0.0 0 0.0 0 0.0 0.08114433288574219 -0.015527546405792236 -0.2839455306529999 -0.9991455078125 0.04104739427566528 -0.0 0.9173672795295715 0.6733074188232422 0 1.0 0 0.0 0 0.0 0 0.0 0.08114433288574219 -0.015527546405792236 0.21605446934700012 -0.9991455078125 0.04104739427566528 -0.0 0.542721152305603 0.5256565809249878 0 1.0 0 0.0 0 0.0 0 0.0 1.6915500164031982 -0.1436215341091156 -0.2839455306529999 -0.9405499696731567 -0.3395794630050659 -0.0 0.030814290046691895 0.5388997793197632 0 1.0 0 0.0 0 0.0 0 0.0 1.6927454471588135 -0.1467483639717102 -0.2839455306529999 -0.9267860651016235 -0.37553027272224426 -0.0 0.030018210411071777 0.5351594090461731 0 1.0 0 0.0 0 0.0 0 0.0 1.6927454471588135 -0.1467483639717102 0.21605446934700012 -0.9267860651016235 -0.37553027272224426 -0.0 0.43915221095085144 0.37765800952911377 0 1.0 0 0.0 0 0.0 0 0.0 -1.151235580444336 -0.02593815326690674 -0.2839455306529999 0.9936216473579407 0.11270485818386078 -0.0 0.07243585586547852 0.5714563131332397 0 1.0 0 0.0 0 0.0 0 0.0 -1.1520358324050903 -0.017614543437957764 -0.2839455306529999 0.9967650175094604 0.08032471686601639 -0.0 0.07365843653678894 0.5815540552139282 0 1.0 0 0.0 0 0.0 0 0.0 -1.1520358324050903 -0.017614543437957764 0.21605446934700012 0.9967650175094604 0.08032471686601639 -0.0 0.5000072121620178 0.39157402515411377 0 1.0 0 0.0 0 0.0 0 0.0 0.9556264877319336 0.05300718545913696 -0.2839455306529999 0.9904782176017761 -0.13745537400245667 -0.0 0.03194934129714966 0.64508056640625 0 1.0 0 0.0 0 0.0 0 0.0 0.9566066265106201 0.058903276920318604 -0.2839455306529999 0.9813531637191772 -0.19205297529697418 -0.0 0.031516820192337036 0.6521144509315491 0 1.0 0 0.0 0 0.0 0 0.0 0.9566066265106201 0.058903276920318604 0.21605446934700012 0.9813531637191772 -0.19205297529697418 -0.0 0.4460909366607666 0.49386513233184814 0 1.0 0 0.0 0 0.0 0 0.0 -1.5575402975082397 -0.07894456386566162 -0.2839455306529999 0.9915769100189209 0.12933744490146637 -0.0 0.07810711860656738 0.5185943841934204 0 1.0 0 0.0 0 0.0 0 0.0 -1.557861328125 -0.07561706751585007 -0.2839455306529999 0.9979552626609802 0.0637531653046608 -0.0 0.07858288288116455 0.5224087238311768 0 1.0 0 0.0 0 0.0 0 0.0 -1.557861328125 -0.07561706751585007 0.21605446934700012 0.9979552626609802 0.0637531653046608 -0.0 0.489724725484848 0.33461397886276245 0 1.0 0 0.0 0 0.0 0 0.0 -0.05920529365539551 -0.018326014280319214 -0.2839455306529999 0.999755859375 0.021607104688882828 -0.0 0.01395145058631897 0.6848616600036621 0 1.0 0 0.0 0 0.0 0 0.0 -0.059393882751464844 -0.007359623908996582 -0.2839455306529999 0.999908447265625 0.013367107138037682 -0.0 0.014256507158279419 0.6969905495643616 0 1.0 0 0.0 0 0.0 0 0.0 -0.059393882751464844 -0.007359623908996582 0.21605446934700012 0.999908447265625 0.013367107138037682 -0.0 0.4611889123916626 0.5397636890411377 0 1.0 0 0.0 0 0.0 0 0.0 1.6927454471588135 -0.1467483639717102 -0.2839455306529999 -0.9267860651016235 -0.37553027272224426 -0.0 0.030018210411071777 0.5351594090461731 0 1.0 0 0.0 0 0.0 0 0.0 1.6940257549285889 -0.14973653852939606 -0.2839455306529999 -0.9106723070144653 -0.41309854388237 -0.0 0.029179036617279053 0.5315882563591003 0 1.0 0 0.0 0 0.0 0 0.0 1.6940257549285889 -0.14973653852939606 0.21605446934700012 -0.9106723070144653 -0.41309854388237 -0.0 0.43976858258247375 0.3738844394683838 0 1.0 0 0.0 0 0.0 0 0.0 -0.9891033172607422 -0.017711833119392395 -0.2839455306529999 -0.9971312880516052 0.07553330808877945 -0.0 0.9704671502113342 0.5903095006942749 0 1.0 0 0.0 0 0.0 0 0.0 -0.989930272102356 -0.026294484734535217 -0.2839455306529999 -0.9930112361907959 0.11798455566167831 -0.0 0.9712231159210205 0.580313503742218 0 1.0 0 0.0 0 0.0 0 0.0 -0.989930272102356 -0.026294484734535217 0.21605446934700012 -0.9930112361907959 0.11798455566167831 -0.0 0.6045933961868286 0.40139156579971313 0 1.0 0 0.0 0 0.0 0 0.0 -1.4300907850265503 -0.07608164101839066 -0.2839455306529999 -0.9429304003715515 0.3329569399356842 -0.0 1.0006492137908936 0.532871663570404 0 1.0 0 0.0 0 0.0 0 0.0 -1.431280255317688 -0.07916833460330963 -0.2839455306529999 -0.922421932220459 0.38612017035484314 -0.0 1.0013539791107178 0.5291415452957153 0 1.0 0 0.0 0 0.0 0 0.0 -1.431280255317688 -0.07916833460330963 0.21605446934700012 -0.922421932220459 0.38612017035484314 -0.0 0.5783247351646423 0.3395894765853882 0 1.0 0 0.0 0 0.0 0 0.0 0.08114433288574219 -0.015527546405792236 -0.2839455306529999 -0.9991455078125 0.04104739427566528 -0.0 0.9173672795295715 0.6733074188232422 0 1.0 0 0.0 0 0.0 0 0.0 0.08068466186523438 -0.025126934051513672 -0.2839455306529999 -0.9984130263328552 0.055848874151706696 -0.0 0.9184120893478394 0.6631647944450378 0 1.0 0 0.0 0 0.0 0 0.0 0.08068466186523438 -0.025126934051513672 0.21605446934700012 -0.9984130263328552 0.055848874151706696 -0.0 0.5428363680839539 0.515357255935669 0 1.0 0 0.0 0 0.0 0 0.0 1.1951353549957275 0.04261605441570282 -0.2839455306529999 0.9879757165908813 0.15445417165756226 -0.0 0.8846826553344727 0.6074569225311279 0 1.0 0 0.0 0 0.0 0 0.0 1.1923551559448242 0.0578269362449646 -0.2839455306529999 0.9782708287239075 0.2072817087173462 -0.0 0.8844856023788452 0.6234896779060364 0 1.0 0 0.0 0 0.0 0 0.0 1.1923551559448242 0.0578269362449646 0.21605446934700012 0.9782708287239075 0.2072817087173462 -0.0 0.5793853402137756 0.4883795976638794 0 1.0 0 0.0 0 0.0 0 0.0 1.6940257549285889 -0.14973653852939606 -0.2839455306529999 -0.9106723070144653 -0.41309854388237 -0.0 0.029179036617279053 0.5315882563591003 0 1.0 0 0.0 0 0.0 0 0.0 1.6953914165496826 -0.15258607268333435 -0.2839455306529999 -0.8919339776039124 -0.4521317183971405 -0.0 0.02829611301422119 0.5281853675842285 0 1.0 0 0.0 0 0.0 0 0.0 1.6953914165496826 -0.15258607268333435 0.21605446934700012 -0.8919339776039124 -0.4521317183971405 -0.0 0.4404529929161072 0.3702673316001892 0 1.0 0 0.0 0 0.0 0 0.0 0.8572096824645996 0.056431978940963745 -0.2839455306529999 -0.9797662496566772 0.19998779892921448 -0.0 0.08673921227455139 0.6304571628570557 0 1.0 0 0.0 0 0.0 0 0.0 0.8548600673675537 0.042969971895217896 -0.2839455306529999 -0.9893490672111511 0.14545121788978577 -0.0 0.08680680394172668 0.6162465214729309 0 1.0 0 0.0 0 0.0 0 0.0 0.8548600673675537 0.042969971895217896 0.21605446934700012 -0.9893490672111511 0.14545121788978577 -0.0 0.39298132061958313 0.48083871603012085 0 1.0 0 0.0 0 0.0 0 0.0 -1.6562875509262085 -0.07716283947229385 -0.2839455306529999 -0.9991455078125 0.04068117216229439 -0.0 0.1280842125415802 0.5108512043952942 0 1.0 0 0.0 0 0.0 0 0.0 -1.656392216682434 -0.0823693498969078 -0.2839455306529999 -0.999969482421875 -0.004608294926583767 -0.0 0.12753111124038696 0.5057005882263184 0 1.0 0 0.0 0 0.0 0 0.0 -1.656392216682434 -0.0823693498969078 0.21605446934700012 -0.999969482421875 -0.004608294926583767 -0.0 0.43325650691986084 0.34423261880874634 0 1.0 0 0.0 0 0.0 0 0.0 -1.1502066850662231 -0.033804476261138916 -0.2839455306529999 0.9888912439346313 0.14853358268737793 -0.0 0.07113239169120789 0.5619699954986572 0 1.0 0 0.0 0 0.0 0 0.0 -1.151235580444336 -0.02593815326690674 -0.2839455306529999 0.9936216473579407 0.11270485818386078 -0.0 0.07243585586547852 0.5714563131332397 0 1.0 0 0.0 0 0.0 0 0.0 -1.151235580444336 -0.02593815326690674 0.21605446934700012 0.9936216473579407 0.11270485818386078 -0.0 0.5005269646644592 0.3812466263771057 0 1.0 0 0.0 0 0.0 0 0.0 -0.05894136428833008 -0.028448358178138733 -0.2839455306529999 0.999481201171875 0.031281471252441406 -0.0 0.013614147901535034 0.6733810901641846 0 1.0 0 0.0 0 0.0 0 0.0 -0.05920529365539551 -0.018326014280319214 -0.2839455306529999 0.999755859375 0.021607104688882828 -0.0 0.01395145058631897 0.6848616600036621 0 1.0 0 0.0 0 0.0 0 0.0 -0.05920529365539551 -0.018326014280319214 0.21605446934700012 0.999755859375 0.021607104688882828 -0.0 0.4609074592590332 0.5276371240615845 0 1.0 0 0.0 0 0.0 0 0.0 1.6953914165496826 -0.15258607268333435 -0.2839455306529999 -0.8919339776039124 -0.4521317183971405 -0.0 0.02829611301422119 0.5281853675842285 0 1.0 0 0.0 0 0.0 0 0.0 1.6968424320220947 -0.15529696643352509 -0.2839455306529999 -0.8702963590621948 -0.4924771785736084 -0.0 0.027369141578674316 0.5249497294425964 0 1.0 0 0.0 0 0.0 0 0.0 1.6968424320220947 -0.15529696643352509 0.21605446934700012 -0.8702963590621948 -0.4924771785736084 -0.0 0.44120627641677856 0.3668063282966614 0 1.0 0 0.0 0 0.0 0 0.0 -1.2523205280303955 -0.026244625449180603 -0.2839455306529999 -0.9960020780563354 -0.08899196982383728 -0.0 0.12694236636161804 0.5540019273757935 0 1.0 0 0.0 0 0.0 0 0.0 -1.2507333755493164 -0.04023931920528412 -0.2839455306529999 -0.9904171824455261 -0.13800470530986786 -0.0 0.12454873323440552 0.5396028161048889 0 1.0 0 0.0 0 0.0 0 0.0 -1.2507333755493164 -0.04023931920528412 0.21605446934700012 -0.9904171824455261 -0.13800470530986786 -0.0 0.44267547130584717 0.37415337562561035 0 1.0 0 0.0 0 0.0 0 0.0 1.0998032093048096 0.05400325357913971 -0.2839455306529999 -0.9872432351112366 -0.1590624749660492 -0.0 0.9345777034759521 0.6410322189331055 0 1.0 0 0.0 0 0.0 0 0.0 1.1006715297698975 0.04759271442890167 -0.2839455306529999 -0.9938047528266907 -0.1110873743891716 -0.0 0.9344682097434998 0.6333895921707153 0 1.0 0 0.0 0 0.0 0 0.0 1.1006715297698975 0.04759271442890167 0.21605446934700012 -0.9938047528266907 -0.1110873743891716 -0.0 0.533460259437561 0.47706329822540283 0 1.0 0 0.0 0 0.0 0 0.0 0.08068466186523438 -0.025126934051513672 -0.2839455306529999 -0.9984130263328552 0.055848874151706696 -0.0 0.9184120893478394 0.6631647944450378 0 1.0 0 0.0 0 0.0 0 0.0 0.08012270927429199 -0.033901751041412354 -0.2839455306529999 -0.9972838759422302 0.07354960590600967 -0.0 0.9194369316101074 0.6537357568740845 0 1.0 0 0.0 0 0.0 0 0.0 0.08012270927429199 -0.033901751041412354 0.21605446934700012 -0.9972838759422302 0.07354960590600967 -0.0 0.5428673028945923 0.5057579278945923 0 1.0 0 0.0 0 0.0 0 0.0 -1.3293014764785767 -0.08461322635412216 -0.2839455306529999 0.999603271484375 0.02786339819431305 -0.0 0.9475767612457275 0.5272431373596191 0 1.0 0 0.0 0 0.0 0 0.0 -1.3294657468795776 -0.07733432948589325 -0.2839455306529999 0.99981689453125 0.017700735479593277 -0.0 0.9472634792327881 0.5347473621368408 0 1.0 0 0.0 0 0.0 0 0.0 -1.3294657468795776 -0.07733432948589325 0.21605446934700012 0.99981689453125 0.017700735479593277 -0.0 0.635711669921875 0.371421754360199 0 1.0 0 0.0 0 0.0 0 0.0 1.6968424320220947 -0.15529696643352509 -0.2839455306529999 -0.8702963590621948 -0.4924771785736084 -0.0 0.027369141578674316 0.5249497294425964 0 1.0 0 0.0 0 0.0 0 0.0 1.6983788013458252 -0.15786920487880707 -0.2839455306529999 -0.8456068634986877 -0.5337381958961487 -0.0 0.026397764682769775 0.5218805074691772 0 1.0 0 0.0 0 0.0 0 0.0 1.6983788013458252 -0.15786920487880707 0.21605446934700012 -0.8456068634986877 -0.5337381958961487 -0.0 0.4420292377471924 0.36350131034851074 0 1.0 0 0.0 0 0.0 0 0.0 -0.989930272102356 -0.026294484734535217 -0.2839455306529999 -0.9930112361907959 0.11798455566167831 -0.0 0.9712231159210205 0.580313503742218 0 1.0 0 0.0 0 0.0 0 0.0 -0.9910880327224731 -0.034480661153793335 -0.2839455306529999 -0.9864497780799866 0.16388440132141113 -0.0 0.972136378288269 0.570796012878418 0 1.0 0 0.0 0 0.0 0 0.0 -0.9910880327224731 -0.034480661153793335 0.21605446934700012 -0.9864497780799866 0.16388440132141113 -0.0 0.6049054265022278 0.3917279839515686 0 1.0 0 0.0 0 0.0 0 0.0 0.9549429416656494 0.04687759280204773 -0.2839455306529999 0.9963072538375854 -0.08575700968503952 -0.0 0.032178282737731934 0.6377542018890381 0 1.0 0 0.0 0 0.0 0 0.0 0.9556264877319336 0.05300718545913696 -0.2839455306529999 0.9904782176017761 -0.13745537400245667 -0.0 0.03194934129714966 0.64508056640625 0 1.0 0 0.0 0 0.0 0 0.0 0.9556264877319336 0.05300718545913696 0.21605446934700012 0.9904782176017761 -0.13745537400245667 -0.0 0.4452192783355713 0.4870067834854126 0 1.0 0 0.0 0 0.0 0 0.0 -1.5570050477981567 -0.08219422399997711 -0.2839455306529999 0.9805291891098022 0.19629505276679993 -0.0 0.07751825451850891 0.514907956123352 0 1.0 0 0.0 0 0.0 0 0.0 -1.5575402975082397 -0.07894456386566162 -0.2839455306529999 0.9915769100189209 0.12933744490146637 -0.0 0.07810711860656738 0.5185943841934204 0 1.0 0 0.0 0 0.0 0 0.0 -1.5575402975082397 -0.07894456386566162 0.21605446934700012 0.9915769100189209 0.12933744490146637 -0.0 0.48989224433898926 0.3306938409805298 0 1.0 0 0.0 0 0.0 0 0.0 -0.058602094650268555 -0.03772667050361633 -0.2839455306529999 0.999053955078125 0.04281746968626976 -0.0 0.013244688510894775 0.6626352667808533 0 1.0 0 0.0 0 0.0 0 0.0 -0.05894136428833008 -0.028448358178138733 -0.2839455306529999 0.999481201171875 0.031281471252441406 -0.0 0.013614147901535034 0.6733810901641846 0 1.0 0 0.0 0 0.0 0 0.0 -0.05894136428833008 -0.028448358178138733 0.21605446934700012 0.999481201171875 0.031281471252441406 -0.0 0.4606959819793701 0.5161502361297607 0 1.0 0 0.0 0 0.0 0 0.0 1.6983788013458252 -0.15786920487880707 -0.2839455306529999 -0.8456068634986877 -0.5337381958961487 -0.0 0.026397764682769775 0.5218805074691772 0 1.0 0 0.0 0 0.0 0 0.0 1.7000000476837158 -0.1603028029203415 -0.2839455306529999 -0.8166447877883911 -0.5770744681358337 -0.0 0.025381773710250854 0.5189765691757202 0 1.0 0 0.0 0 0.0 0 0.0 1.7000000476837158 -0.1603028029203415 0.21605446934700012 -0.8166447877883911 -0.5770744681358337 -0.0 0.44292232394218445 0.360352098941803 0 1.0 0 0.0 0 0.0 0 0.0 1.1006715297698975 0.04759271442890167 -0.2839455306529999 -0.9938047528266907 -0.1110873743891716 -0.0 0.9344682097434998 0.6333895921707153 0 1.0 0 0.0 0 0.0 0 0.0 1.1012625694274902 0.04089759290218353 -0.2839455306529999 -0.9977721571922302 -0.06640827655792236 -0.0 0.9345499277114868 0.6254070997238159 0 1.0 0 0.0 0 0.0 0 0.0 1.1012625694274902 0.04089759290218353 0.21605446934700012 -0.9977721571922302 -0.06640827655792236 -0.0 0.5340175628662109 0.46915704011917114 0 1.0 0 0.0 0 0.0 0 0.0 -1.431280255317688 -0.07916833460330963 -0.2839455306529999 -0.922421932220459 0.38612017035484314 -0.0 1.0013539791107178 0.5291415452957153 0 1.0 0 0.0 0 0.0 0 0.0 -1.4326399564743042 -0.08217232674360275 -0.2839455306529999 -0.8988006114959717 0.4383068382740021 -0.0 1.002156376838684 0.5255098938941956 0 1.0 0 0.0 0 0.0 0 0.0 -1.4326399564743042 -0.08217232674360275 0.21605446934700012 -0.8988006114959717 0.4383068382740021 -0.0 0.5777221322059631 0.3357633352279663 0 1.0 0 0.0 0 0.0 0 0.0 0.08012270927429199 -0.033901751041412354 -0.2839455306529999 -0.9972838759422302 0.07354960590600967 -0.0 0.9194369316101074 0.6537357568740845 0 1.0 0 0.0 0 0.0 0 0.0 0.07945871353149414 -0.04185198247432709 -0.2839455306529999 -0.9954527616500854 0.0950651541352272 -0.0 0.9204447269439697 0.6450778245925903 0 1.0 0 0.0 0 0.0 0 0.0 0.07945871353149414 -0.04185198247432709 0.21605446934700012 -0.9954527616500854 0.0950651541352272 -0.0 0.5428118705749512 0.4969159960746765 0 1.0 0 0.0 0 0.0 0 0.0 -1.148949146270752 -0.0412134975194931 -0.2839455306529999 0.982116162776947 0.18823817372322083 -0.0 0.06974729895591736 0.5531009435653687 0 1.0 0 0.0 0 0.0 0 0.0 -1.1502066850662231 -0.033804476261138916 -0.2839455306529999 0.9888912439346313 0.14853358268737793 -0.0 0.07113239169120789 0.5619699954986572 0 1.0 0 0.0 0 0.0 0 0.0 -1.1502066850662231 -0.033804476261138916 0.21605446934700012 0.9888912439346313 0.14853358268737793 -0.0 0.5012085437774658 0.3715049624443054 0 1.0 0 0.0 0 0.0 0 0.0 1.7000000476837158 -0.1603028029203415 -0.2839455306529999 -0.8166447877883911 -0.5770744681358337 -0.0 0.025381773710250854 0.5189765691757202 0 1.0 0 0.0 0 0.0 0 0.0 1.7017428874969482 -0.1626305878162384 -0.2839455306529999 -0.7828608155250549 -0.6221808791160583 -0.0 0.024298399686813354 0.516197681427002 0 1.0 0 0.0 0 0.0 0 0.0 1.7017428874969482 -0.1626305878162384 0.21605446934700012 -0.7828608155250549 -0.6221808791160583 -0.0 0.44390809535980225 0.35731375217437744 0 1.0 0 0.0 0 0.0 0 0.0 -0.9910880327224731 -0.034480661153793335 -0.2839455306529999 -0.9864497780799866 0.16388440132141113 -0.0 0.972136378288269 0.570796012878418 0 1.0 0 0.0 0 0.0 0 0.0 -0.9925765991210938 -0.04227036237716675 -0.2839455306529999 -0.9769585132598877 0.2133854180574417 -0.0 0.9732059240341187 0.5617566108703613 0 1.0 0 0.0 0 0.0 0 0.0 -0.9925765991210938 -0.04227036237716675 0.21605446934700012 -0.9769585132598877 0.2133854180574417 -0.0 0.6049898862838745 0.38245081901550293 0 1.0 0 0.0 0 0.0 0 0.0 -1.4326399564743042 -0.08217232674360275 -0.2839455306529999 -0.8988006114959717 0.4383068382740021 -0.0 1.002156376838684 0.5255098938941956 0 1.0 0 0.0 0 0.0 0 0.0 -1.434169888496399 -0.08509361743927002 -0.2839455306529999 -0.8722190260887146 0.48908963799476624 -0.0 1.0030560493469238 0.5219749212265015 0 1.0 0 0.0 0 0.0 0 0.0 -1.434169888496399 -0.08509361743927002 0.21605446934700012 -0.8722190260887146 0.48908963799476624 -0.0 0.5769903659820557 0.3320075273513794 0 1.0 0 0.0 0 0.0 0 0.0 0.9545562267303467 0.04051448404788971 -0.2839455306529999 0.999298095703125 -0.03717154264450073 -0.0 0.032207876443862915 0.6301307082176208 0 1.0 0 0.0 0 0.0 0 0.0 0.9549429416656494 0.04687759280204773 -0.2839455306529999 0.9963072538375854 -0.08575700968503952 -0.0 0.032178282737731934 0.6377542018890381 0 1.0 0 0.0 0 0.0 0 0.0 0.9549429416656494 0.04687759280204773 0.21605446934700012 0.9963072538375854 -0.08575700968503952 -0.0 0.44450050592422485 0.4798106551170349 0 1.0 0 0.0 0 0.0 0 0.0 -0.05818748474121094 -0.046160951256752014 -0.2839455306529999 0.9983825087547302 0.056764427572488785 -0.0 0.012842893600463867 0.6526980996131897 0 1.0 0 0.0 0 0.0 0 0.0 -0.058602094650268555 -0.03772667050361633 -0.2839455306529999 0.999053955078125 0.04281746968626976 -0.0 0.013244688510894775 0.6626352667808533 0 1.0 0 0.0 0 0.0 0 0.0 -0.058602094650268555 -0.03772667050361633 0.21605446934700012 0.999053955078125 0.04281746968626976 -0.0 0.46055692434310913 0.5053889751434326 0 1.0 0 0.0 0 0.0 0 0.0 1.7017428874969482 -0.1626305878162384 -0.2839455306529999 -0.7828608155250549 -0.6221808791160583 -0.0 0.024298399686813354 0.516197681427002 0 1.0 0 0.0 0 0.0 0 0.0 1.703643560409546 -0.16488540172576904 -0.2839455306529999 -0.7462080717086792 -0.6656697392463684 -0.0 0.02312496304512024 0.5135035514831543 0 1.0 0 0.0 0 0.0 0 0.0 1.703643560409546 -0.16488540172576904 0.21605446934700012 -0.7462080717086792 -0.6656697392463684 -0.0 0.4450095295906067 0.35434210300445557 0 1.0 0 0.0 0 0.0 0 0.0 -1.2507333755493164 -0.04023931920528412 -0.2839455306529999 -0.9904171824455261 -0.13800470530986786 -0.0 0.12454873323440552 0.5396028161048889 0 1.0 0 0.0 0 0.0 0 0.0 -1.2485114336013794 -0.053667277097702026 -0.2839455306529999 -0.981749951839447 -0.1900997906923294 -0.0 0.12196633219718933 0.525911808013916 0 1.0 0 0.0 0 0.0 0 0.0 -1.2485114336013794 -0.053667277097702026 0.21605446934700012 -0.981749951839447 -0.1900997906923294 -0.0 0.4429131746292114 0.3595367670059204 0 1.0 0 0.0 0 0.0 0 0.0 0.8548600673675537 0.042969971895217896 -0.2839455306529999 -0.9893490672111511 0.14545121788978577 -0.0 0.08680680394172668 0.6162465214729309 0 1.0 0 0.0 0 0.0 0 0.0 0.8531818389892578 0.028950944542884827 -0.2839455306529999 -0.9955748319625854 0.09390545636415482 -0.0 0.08653220534324646 0.6015206575393677 0 1.0 0 0.0 0 0.0 0 0.0 0.8531818389892578 0.028950944542884827 0.21605446934700012 -0.9955748319625854 0.09390545636415482 -0.0 0.3910754919052124 0.46660172939300537 0 1.0 0 0.0 0 0.0 0 0.0 0.07945871353149414 -0.04185198247432709 -0.2839455306529999 -0.9954527616500854 0.0950651541352272 -0.0 0.9204447269439697 0.6450778245925903 0 1.0 0 0.0 0 0.0 0 0.0 0.07869243621826172 -0.04897764325141907 -0.2839455306529999 -0.9925534725189209 0.12170781195163727 -0.0 0.9214386343955994 0.6372390985488892 0 1.0 0 0.0 0 0.0 0 0.0 0.07869243621826172 -0.04897764325141907 0.21605446934700012 -0.9925534725189209 0.12170781195163727 -0.0 0.5426681041717529 0.4888794422149658 0 1.0 0 0.0 0 0.0 0 0.0 -1.5562559366226196 -0.08536604791879654 -0.2839455306529999 0.964598536491394 0.2636799216270447 -0.0 0.07681694626808167 0.5113465785980225 0 1.0 0 0.0 0 0.0 0 0.0 -1.5570050477981567 -0.08219422399997711 -0.2839455306529999 0.9805291891098022 0.19629505276679993 -0.0 0.07751825451850891 0.514907956123352 0 1.0 0 0.0 0 0.0 0 0.0 -1.5570050477981567 -0.08219422399997711 0.21605446934700012 0.9805291891098022 0.19629505276679993 -0.0 0.4902057349681854 0.32686203718185425 0 1.0 0 0.0 0 0.0 0 0.0 1.703643560409546 -0.16488540172576904 -0.2839455306529999 -0.7462080717086792 -0.6656697392463684 -0.0 0.02312496304512024 0.5135035514831543 0 1.0 0 0.0 0 0.0 0 0.0 1.705702543258667 -0.1670672595500946 -0.2839455306529999 -0.7084872126579285 -0.7057099938392639 -0.0 0.021860778331756592 0.5108931660652161 0 1.0 0 0.0 0 0.0 0 0.0 1.705702543258667 -0.1670672595500946 0.21605446934700012 -0.7084872126579285 -0.7057099938392639 -0.0 0.44622862339019775 0.35143786668777466 0 1.0 0 0.0 0 0.0 0 0.0 -1.656392216682434 -0.0823693498969078 -0.2839455306529999 -0.999969482421875 -0.004608294926583767 -0.0 0.12753111124038696 0.5057005882263184 0 1.0 0 0.0 0 0.0 0 0.0 -1.6561623811721802 -0.09019431471824646 -0.2839455306529999 -0.9981994032859802 -0.059907834976911545 -0.0 0.12654244899749756 0.49805402755737305 0 1.0 0 0.0 0 0.0 0 0.0 -1.6561623811721802 -0.09019431471824646 0.21605446934700012 -0.9981994032859802 -0.059907834976911545 -0.0 0.4327855110168457 0.3363778591156006 0 1.0 0 0.0 0 0.0 0 0.0 -1.1474629640579224 -0.04816523194313049 -0.2839455306529999 0.9726554155349731 0.23221534490585327 -0.0 0.06827953457832336 0.5448507070541382 0 1.0 0 0.0 0 0.0 0 0.0 -1.148949146270752 -0.0412134975194931 -0.2839455306529999 0.982116162776947 0.18823817372322083 -0.0 0.06974729895591736 0.5531009435653687 0 1.0 0 0.0 0 0.0 0 0.0 -1.148949146270752 -0.0412134975194931 0.21605446934700012 0.982116162776947 0.18823817372322083 -0.0 0.5020564794540405 0.36235707998275757 0 1.0 0 0.0 0 0.0 0 0.0 1.1972198486328125 0.026595190167427063 -0.2839455306529999 0.9943845868110657 0.10565508157014847 -0.0 0.8852506279945374 0.5906726121902466 0 1.0 0 0.0 0 0.0 0 0.0 1.1951353549957275 0.04261605441570282 -0.2839455306529999 0.9879757165908813 0.15445417165756226 -0.0 0.8846826553344727 0.6074569225311279 0 1.0 0 0.0 0 0.0 0 0.0 1.1951353549957275 0.04261605441570282 0.21605446934700012 0.9879757165908813 0.15445417165756226 -0.0 0.5815703272819519 0.47294706106185913 0 1.0 0 0.0 0 0.0 0 0.0 -0.057697296142578125 -0.053751200437545776 -0.2839455306529999 0.9972533583641052 0.07397686690092087 -0.0 0.012408286333084106 0.6436313390731812 0 1.0 0 0.0 0 0.0 0 0.0 -0.05818748474121094 -0.046160951256752014 -0.2839455306529999 0.9983825087547302 0.056764427572488785 -0.0 0.012842893600463867 0.6526980996131897 0 1.0 0 0.0 0 0.0 0 0.0 -0.05818748474121094 -0.046160951256752014 0.21605446934700012 0.9983825087547302 0.056764427572488785 -0.0 0.46049249172210693 0.4954274892807007 0 1.0 0 0.0 0 0.0 0 0.0 1.705702543258667 -0.1670672595500946 -0.2839455306529999 -0.7084872126579285 -0.7057099938392639 -0.0 0.021860778331756592 0.5108931660652161 0 1.0 0 0.0 0 0.0 0 0.0 1.7079198360443115 -0.1691761314868927 -0.2839455306529999 -0.670186460018158 -0.7421491146087646 -0.0 0.02050536870956421 0.5083656311035156 0 1.0 0 0.0 0 0.0 0 0.0 1.7079198360443115 -0.1691761314868927 0.21605446934700012 -0.670186460018158 -0.7421491146087646 -0.0 0.44756728410720825 0.3486024737358093 0 1.0 0 0.0 0 0.0 0 0.0 -0.9925765991210938 -0.04227036237716675 -0.2839455306529999 -0.9769585132598877 0.2133854180574417 -0.0 0.9732059240341187 0.5617566108703613 0 1.0 0 0.0 0 0.0 0 0.0 -0.9943959712982178 -0.04966357350349426 -0.2839455306529999 -0.9638355374336243 0.26645711064338684 -0.0 0.9744312167167664 0.553192138671875 0 1.0 0 0.0 0 0.0 0 0.0 -0.9943959712982178 -0.04966357350349426 0.21605446934700012 -0.9638355374336243 0.26645711064338684 -0.0 0.6048398613929749 0.3735578656196594 0 1.0 0 0.0 0 0.0 0 0.0 1.1012625694274902 0.04089759290218353 -0.2839455306529999 -0.9977721571922302 -0.06640827655792236 -0.0 0.9345499277114868 0.6254070997238159 0 1.0 0 0.0 0 0.0 0 0.0 1.101576328277588 0.0339178740978241 -0.2839455306529999 -0.9989623427391052 -0.044892728328704834 -0.0 0.9348187446594238 0.6170793771743774 0 1.0 0 0.0 0 0.0 0 0.0 1.101576328277588 0.0339178740978241 0.21605446934700012 -0.9989623427391052 -0.044892728328704834 -0.0 0.5344297289848328 0.460854709148407 0 1.0 0 0.0 0 0.0 0 0.0 -0.15796852111816406 -0.04734307527542114 -0.2839455306529999 -0.999969482421875 -0.005340739153325558 -0.0 0.07294094562530518 0.635789155960083 0 1.0 0 0.0 0 0.0 0 0.0 -0.15787625312805176 -0.05594152212142944 -0.2839455306529999 -0.999755859375 -0.02209540084004402 -0.0 0.07233351469039917 0.6266542673110962 0 1.0 0 0.0 0 0.0 0 0.0 -0.15787625312805176 -0.05594152212142944 0.21605446934700012 -0.999725341796875 -0.02209540084004402 -0.0 0.4052700400352478 0.48801618814468384 0 1.0 0 0.0 0 0.0 0 0.0 -1.3290716409683228 -0.0915345624089241 -0.2839455306529999 0.99920654296875 0.03906369209289551 -0.0 0.947837233543396 0.5201842188835144 0 1.0 0 0.0 0 0.0 0 0.0 -1.3293014764785767 -0.08461322635412216 -0.2839455306529999 0.999603271484375 0.02786339819431305 -0.0 0.9475767612457275 0.5272431373596191 0 1.0 0 0.0 0 0.0 0 0.0 -1.3293014764785767 -0.08461322635412216 0.21605446934700012 0.999603271484375 0.02786339819431305 -0.0 0.6367695331573486 0.36414480209350586 0 1.0 0 0.0 0 0.0 0 0.0 1.7079198360443115 -0.1691761314868927 -0.2839455306529999 -0.670186460018158 -0.7421491146087646 -0.0 0.02050536870956421 0.5083656311035156 0 1.0 0 0.0 0 0.0 0 0.0 1.7102949619293213 -0.17121203243732452 -0.2839455306529999 -0.6318246722221375 -0.7750785946846008 -0.0 0.01905834674835205 0.5059202909469604 0 1.0 0 0.0 0 0.0 0 0.0 1.7102949619293213 -0.17121203243732452 0.21605445444583893 -0.6318246722221375 -0.7750785946846008 -0.0 0.4490269422531128 0.34583741426467896 0 1.0 0 0.0 0 0.0 0 0.0 -1.434169888496399 -0.08509361743927002 -0.2839455306529999 -0.8722190260887146 0.48908963799476624 -0.0 1.0030560493469238 0.5219749212265015 0 1.0 0 0.0 0 0.0 0 0.0 -1.4358701705932617 -0.08793220669031143 -0.2839455306529999 -0.842982292175293 0.5379192233085632 -0.0 1.004052996635437 0.5185349583625793 0 1.0 0 0.0 0 0.0 0 0.0 -1.4358701705932617 -0.08793220669031143 0.21605446934700012 -0.842982292175293 0.5379192233085632 -0.0 0.5761270523071289 0.3283221125602722 0 1.0 0 0.0 0 0.0 0 0.0 0.07869243621826172 -0.04897764325141907 -0.2839455306529999 -0.9925534725189209 0.12170781195163727 -0.0 0.9214386343955994 0.6372390985488892 0 1.0 0 0.0 0 0.0 0 0.0 0.07782411575317383 -0.0552787184715271 -0.2839455306529999 -0.9878231287002563 0.15552231669425964 -0.0 0.9224212169647217 0.6302591562271118 0 1.0 0 0.0 0 0.0 0 0.0 0.07782411575317383 -0.0552787184715271 0.21605446934700012 -0.9878231287002563 0.15552231669425964 -0.0 0.5424344539642334 0.4816877245903015 0 1.0 0 0.0 0 0.0 0 0.0 -1.1457481384277344 -0.054659679532051086 -0.2839455306529999 0.9597155451774597 0.28095340728759766 -0.0 0.06672787666320801 0.5372171401977539 0 1.0 0 0.0 0 0.0 0 0.0 -1.1474629640579224 -0.04816523194313049 -0.2839455306529999 0.9726554155349731 0.23221534490585327 -0.0 0.06827953457832336 0.5448507070541382 0 1.0 0 0.0 0 0.0 0 0.0 -1.1474629640579224 -0.04816523194313049 0.21605446934700012 0.9726554155349731 0.23221534490585327 -0.0 0.5030751824378967 0.35380715131759644 0 1.0 0 0.0 0 0.0 0 0.0 0.9544661045074463 0.0339178740978241 -0.2839455306529999 0.9998779296875 -0.013641773723065853 -0.0 0.03204253315925598 0.6222053170204163 0 1.0 0 0.0 0 0.0 0 0.0 0.9545562267303467 0.04051448404788971 -0.2839455306529999 0.999298095703125 -0.03717154264450073 -0.0 0.032207876443862915 0.6301307082176208 0 1.0 0 0.0 0 0.0 0 0.0 0.9545562267303467 0.04051448404788971 0.21605446934700012 0.999298095703125 -0.03717154264450073 -0.0 0.44393593072891235 0.47227048873901367 0 1.0 0 0.0 0 0.0 0 0.0 1.7102949619293213 -0.17121203243732452 -0.2839455306529999 -0.6318246722221375 -0.7750785946846008 -0.0 0.01905834674835205 0.5059202909469604 0 1.0 0 0.0 0 0.0 0 0.0 1.7128283977508545 -0.17317496240139008 -0.2839455306529999 -0.5937376022338867 -0.8046205043792725 -0.0 0.0175190269947052 0.5035566091537476 0 1.0 0 0.0 0 0.0 0 0.0 1.7128283977508545 -0.17317496240139008 0.21605445444583893 -0.5937376022338867 -0.8046205043792725 -0.0 0.4506097733974457 0.34314483404159546 0 1.0 0 0.0 0 0.0 0 0.0 -0.9943959712982178 -0.04966357350349426 -0.2839455306529999 -0.9638355374336243 0.26645711064338684 -0.0 0.9744312167167664 0.553192138671875 0 1.0 0 0.0 0 0.0 0 0.0 -0.9965461492538452 -0.05666030943393707 -0.2839455306529999 -0.9464095234870911 0.3229468762874603 -0.0 0.9758127927780151 0.5450972318649292 0 1.0 0 0.0 0 0.0 0 0.0 -0.9965461492538452 -0.05666030943393707 0.21605446934700012 -0.9464095234870911 0.3229468762874603 -0.0 0.6044479608535767 0.3650451898574829 0 1.0 0 0.0 0 0.0 0 0.0 1.101576328277588 0.0339178740978241 -0.2839455306529999 0.0 0.999969482421875 -0.0 0.9348187446594238 0.6170793771743774 0 1.0 0 0.0 0 0.0 0 0.0 0.9544661045074463 0.0339178740978241 -0.2839455306529999 0.0 1.0 -0.0 1.0320425033569336 0.6222053170204163 0 1.0 0 0.0 0 0.0 0 0.0 0.9544661045074463 0.0339178740978241 0.21605446934700012 0.0 0.999969482421875 -0.0 0.44352710247039795 0.4643810987472534 0 1.0 0 0.0 0 0.0 0 0.0 -1.5552927255630493 -0.0884600356221199 -0.2839455306529999 0.9437543749809265 0.33060702681541443 -0.0 0.07600328326225281 0.5079073905944824 0 1.0 0 0.0 0 0.0 0 0.0 -1.5562559366226196 -0.08536604791879654 -0.2839455306529999 0.964598536491394 0.2636799216270447 -0.0 0.07681694626808167 0.5113465785980225 0 1.0 0 0.0 0 0.0 0 0.0 -1.5562559366226196 -0.08536604791879654 0.21605446934700012 0.964598536491394 0.2637104392051697 -0.0 0.49066728353500366 0.32311660051345825 0 1.0 0 0.0 0 0.0 0 0.0 -0.05713176727294922 -0.06049741059541702 -0.2839455306529999 0.9953917264938354 0.095736563205719 -0.0 0.011940598487854004 0.6354849934577942 0 1.0 0 0.0 0 0.0 0 0.0 -0.057697296142578125 -0.053751200437545776 -0.2839455306529999 0.9972533583641052 0.07397686690092087 -0.0 0.012408286333084106 0.6436313390731812 0 1.0 0 0.0 0 0.0 0 0.0 -0.057697296142578125 -0.053751200437545776 0.21605446934700012 0.9972533583641052 0.07397686690092087 -0.0 0.46050482988357544 0.48632752895355225 0 1.0 0 0.0 0 0.0 0 0.0 1.7128283977508545 -0.17317496240139008 -0.2839455306529999 -0.5937376022338867 -0.8046205043792725 -0.0 0.0175190269947052 0.5035566091537476 0 1.0 0 0.0 0 0.0 0 0.0 1.715519666671753 -0.17506492137908936 -0.2839455306529999 -0.556291401386261 -0.8309579491615295 -0.0 0.01588699221611023 0.5012739896774292 0 1.0 0 0.0 0 0.0 0 0.0 1.715519666671753 -0.17506492137908936 0.21605445444583893 -0.556291401386261 -0.8309579491615295 -0.0 0.4523172080516815 0.3405272960662842 0 1.0 0 0.0 0 0.0 0 0.0 -1.2485114336013794 -0.053667277097702026 -0.2839455306529999 -0.981749951839447 -0.1900997906923294 -0.0 0.12196633219718933 0.525911808013916 0 1.0 0 0.0 0 0.0 0 0.0 -1.2456544637680054 -0.06652848422527313 -0.2839455306529999 -0.9694814682006836 -0.2451246678829193 -0.0 0.11918789148330688 0.5129293203353882 0 1.0 0 0.0 0 0.0 0 0.0 -1.2456544637680054 -0.06652848422527313 0.21605446934700012 -0.9694814682006836 -0.2451246678829193 -0.0 0.44352030754089355 0.3454611897468567 0 1.0 0 0.0 0 0.0 0 0.0 -1.4358701705932617 -0.08793220669031143 -0.2839455306529999 -0.842982292175293 0.5379192233085632 -0.0 1.004052996635437 0.5185349583625793 0 1.0 0 0.0 0 0.0 0 0.0 -1.437740683555603 -0.09068809449672699 -0.2839455306529999 -0.8114261031150818 0.5843989253044128 -0.0 1.0051469802856445 0.5151885747909546 0 1.0 0 0.0 0 0.0 0 0.0 -1.437740683555603 -0.09068809449672699 0.21605446934700012 -0.8114261031150818 0.5843989253044128 -0.0 0.5751299858093262 0.32470762729644775 0 1.0 0 0.0 0 0.0 0 0.0 0.07782411575317383 -0.0552787184715271 -0.2839455306529999 -0.9878231287002563 0.15552231669425964 -0.0 0.9224212169647217 0.6302591562271118 0 1.0 0 0.0 0 0.0 0 0.0 0.07685351371765137 -0.06075522303581238 -0.2839455306529999 -0.9798578023910522 0.19965209066867828 -0.0 0.9233952164649963 0.6241699457168579 0 1.0 0 0.0 0 0.0 0 0.0 0.07685351371765137 -0.06075522303581238 0.21605446934700012 -0.9798578023910522 0.19965209066867828 -0.0 0.5421093106269836 0.475372850894928 0 1.0 0 0.0 0 0.0 0 0.0 0.8531818389892578 0.028950944542884827 -0.2839455306529999 -0.9955748319625854 0.09390545636415482 -0.0 0.08653220534324646 0.6015206575393677 0 1.0 0 0.0 0 0.0 0 0.0 0.8521747589111328 0.014374911785125732 -0.2839455306529999 -0.9989318251609802 0.045564133673906326 -0.0 0.08592897653579712 0.5862740278244019 0 1.0 0 0.0 0 0.0 0 0.0 0.8521747589111328 0.014374911785125732 0.21605446934700012 -0.9989318251609802 0.045564133673906326 -0.0 0.3893885314464569 0.45168209075927734 0 1.0 0 0.0 0 0.0 0 0.0 1.715519666671753 -0.17506492137908936 -0.2839455306529999 -0.556291401386261 -0.8309579491615295 -0.0 0.01588699221611023 0.5012739896774292 0 1.0 0 0.0 0 0.0 0 0.0 1.7183692455291748 -0.17688190937042236 -0.2839455306529999 -0.5197302103042603 -0.8543046116828918 -0.0 0.014161437749862671 0.49907225370407104 0 1.0 0 0.0 0 0.0 0 0.0 1.7183692455291748 -0.17688190937042236 0.21605445444583893 -0.5197302103042603 -0.8543046116828918 -0.0 0.45415133237838745 0.3379872441291809 0 1.0 0 0.0 0 0.0 0 0.0 -0.15787625312805176 -0.05594152212142944 -0.2839455306529999 -0.999755859375 -0.02209540084004402 -0.0 0.07233351469039917 0.6266542673110962 0 1.0 0 0.0 0 0.0 0 0.0 -0.15759897232055664 -0.06422378122806549 -0.2839455306529999 -0.9989318251609802 -0.045686207711696625 -0.0 0.07166120409965515 0.6177982091903687 0 1.0 0 0.0 0 0.0 0 0.0 -0.15759897232055664 -0.06422378122806549 0.21605446934700012 -0.9989318251609802 -0.045686207711696625 -0.0 0.4047679007053375 0.4791291356086731 0 1.0 0 0.0 0 0.0 0 0.0 -1.143804669380188 -0.06069684773683548 -0.2839455306529999 0.9422894716262817 0.334727019071579 -0.0 0.0650908350944519 0.5301951169967651 0 1.0 0 0.0 0 0.0 0 0.0 -1.1457481384277344 -0.054659679532051086 -0.2839455306529999 0.9597155451774597 0.28095340728759766 -0.0 0.06672787666320801 0.5372171401977539 0 1.0 0 0.0 0 0.0 0 0.0 -1.1457481384277344 -0.054659679532051086 0.21605446934700012 0.9597155451774597 0.28095340728759766 -0.0 0.5042688250541687 0.3458558917045593 0 1.0 0 0.0 0 0.0 0 0.0 -1.5541154146194458 -0.0914761871099472 -0.2839455306529999 0.9182103872299194 0.3960081934928894 -0.0 0.07507732510566711 0.5045878887176514 0 1.0 0 0.0 0 0.0 0 0.0 -1.5552927255630493 -0.0884600356221199 -0.2839455306529999 0.9437543749809265 0.33060702681541443 -0.0 0.07600328326225281 0.5079073905944824 0 1.0 0 0.0 0 0.0 0 0.0 -1.5552927255630493 -0.0884600356221199 0.21605446934700012 0.9437543749809265 0.33060702681541443 -0.0 0.49127960205078125 0.31945616006851196 0 1.0 0 0.0 0 0.0 0 0.0 1.7183692455291748 -0.17688190937042236 -0.2839455306529999 -0.5197302103042603 -0.8543046116828918 -0.0 0.014161437749862671 0.49907225370407104 0 1.0 0 0.0 0 0.0 0 0.0 1.7213771343231201 -0.1786259263753891 -0.2839455306529999 -0.4842982292175293 -0.8748741149902344 -0.0 0.012341886758804321 0.49695128202438354 0 1.0 0 0.0 0 0.0 0 0.0 1.7213771343231201 -0.1786259263753891 0.21605445444583893 -0.4842982292175293 -0.8748741149902344 -0.0 0.45611369609832764 0.33552831411361694 0 1.0 0 0.0 0 0.0 0 0.0 -0.9965461492538452 -0.05666030943393707 -0.2839455306529999 -0.9464095234870911 0.3229468762874603 -0.0 0.9758127927780151 0.5450972318649292 0 1.0 0 0.0 0 0.0 0 0.0 -0.9990271329879761 -0.06326057016849518 -0.2839455306529999 -0.9239173531532288 0.382519006729126 -0.0 0.977351725101471 0.53746497631073 0 1.0 0 0.0 0 0.0 0 0.0 -0.9990271329879761 -0.06326057016849518 0.21605446934700012 -0.9239173531532288 0.382519006729126 -0.0 0.60380619764328 0.35690802335739136 0 1.0 0 0.0 0 0.0 0 0.0 1.198608636856079 0.009764343500137329 -0.2839455306529999 0.9981383681297302 0.060731835663318634 -0.0 0.886174738407135 0.5731443166732788 0 1.0 0 0.0 0 0.0 0 0.0 1.1972198486328125 0.026595190167427063 -0.2839455306529999 0.9943845868110657 0.10565508157014847 -0.0 0.8852506279945374 0.5906726121902466 0 1.0 0 0.0 0 0.0 0 0.0 1.1972198486328125 0.026595190167427063 0.21605446934700012 0.9943845868110657 0.10565508157014847 -0.0 0.58353590965271 0.4565879702568054 0 1.0 0 0.0 0 0.0 0 0.0 -1.6561623811721802 -0.09019431471824646 -0.2839455306529999 -0.9981994032859802 -0.059907834976911545 -0.0 0.12654244899749756 0.49805402755737305 0 1.0 0 0.0 0 0.0 0 0.0 -1.655472755432129 -0.09779063612222672 -0.2839455306529999 -0.9924619197845459 -0.12231818586587906 -0.0 0.12539279460906982 0.4907315969467163 0 1.0 0 0.0 0 0.0 0 0.0 -1.655472755432129 -0.09779063612222672 0.21605446934700012 -0.9924619197845459 -0.12231818586587906 -0.0 0.43254271149635315 0.3287145495414734 0 1.0 0 0.0 0 0.0 0 0.0 0.8521747589111328 0.014374911785125732 -0.2839455306529999 -0.9989318251609802 0.045564133673906326 -0.0 0.08592897653579712 0.5862740278244019 0 1.0 0 0.0 0 0.0 0 0.0 0.8518390655517578 -0.0007581412792205811 -0.2839455306529999 -0.999969482421875 0.001037629321217537 -0.0 0.08500796556472778 0.5705099701881409 0 1.0 0 0.0 0 0.0 0 0.0 0.8518390655517578 -0.0007581412792205811 0.21605446934700012 -0.999969482421875 0.001037629321217537 -0.0 0.3879176378250122 0.43608367443084717 0 1.0 0 0.0 0 0.0 0 0.0 -0.05649089813232422 -0.06639958173036575 -0.2839455306529999 0.9922482967376709 0.12408825755119324 -0.0 0.01143917441368103 0.628298282623291 0 1.0 0 0.0 0 0.0 0 0.0 -0.05713176727294922 -0.06049741059541702 -0.2839455306529999 0.9953917264938354 0.095736563205719 -0.0 0.011940598487854004 0.6354849934577942 0 1.0 0 0.0 0 0.0 0 0.0 -0.05713176727294922 -0.06049741059541702 0.21605446934700012 0.9953917264938354 0.095736563205719 -0.0 0.46059542894363403 0.4781392812728882 0 1.0 0 0.0 0 0.0 0 0.0 -1.437740683555603 -0.09068809449672699 -0.2839455306529999 -0.8114261031150818 0.5843989253044128 -0.0 1.0051469802856445 0.5151885747909546 0 1.0 0 0.0 0 0.0 0 0.0 -1.4397814273834229 -0.0933612808585167 -0.2839455306529999 -0.7780083417892456 0.6282235383987427 -0.0 1.006338119506836 0.5119343400001526 0 1.0 0 0.0 0 0.0 0 0.0 -1.4397814273834229 -0.0933612808585167 0.21605446934700012 -0.7780083417892456 0.6282235383987427 -0.0 0.5739966630935669 0.32116496562957764 0 1.0 0 0.0 0 0.0 0 0.0 0.07685351371765137 -0.06075522303581238 -0.2839455306529999 -0.9798578023910522 0.19965209066867828 -0.0 0.9233952164649963 0.6241699457168579 0 1.0 0 0.0 0 0.0 0 0.0 0.07578086853027344 -0.0654071494936943 -0.2839455306529999 -0.965788722038269 0.25922420620918274 -0.0 0.9243631362915039 0.6189967393875122 0 1.0 0 0.0 0 0.0 0 0.0 0.07578086853027344 -0.0654071494936943 0.21605446934700012 -0.965788722038269 0.25922420620918274 -0.0 0.5416918396949768 0.46996021270751953 0 1.0 0 0.0 0 0.0 0 0.0 1.851309061050415 -0.1799904853105545 -0.2839455306529999 0.3588061034679413 -0.9333781003952026 -0.0 0.9349046945571899 0.4923299551010132 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 -0.2839455306529999 0.37635424733161926 -0.9264503717422485 -0.0 0.931607186794281 0.4948465824127197 0 1.0 0 0.0 0 0.0 0 0.0 1.857093095779419 -0.17764081060886383 0.21605445444583893 0.37635424733161926 -0.9264503717422485 -0.0 0.5487398505210876 0.3414847254753113 0 1.0 0 0.0 0 0.0 0 0.0 -1.1416325569152832 -0.06627672910690308 -0.2839455306529999 0.9191870093345642 0.39378032088279724 -0.0 0.06336680054664612 0.523777961730957 0 1.0 0 0.0 0 0.0 0 0.0 -1.143804669380188 -0.06069684773683548 -0.2839455306529999 0.9422894716262817 0.334727019071579 -0.0 0.0650908350944519 0.5301951169967651 0 1.0 0 0.0 0 0.0 0 0.0 -1.143804669380188 -0.06069684773683548 0.21605446934700012 0.9422894716262817 0.334727019071579 -0.0 0.505640983581543 0.33850187063217163 0 1.0 0 0.0 0 0.0 0 0.0 1.7213771343231201 -0.1786259263753891 -0.2839455306529999 -0.4842982292175293 -0.8748741149902344 -0.0 0.012341886758804321 0.49695128202438354 0 1.0 0 0.0 0 0.0 0 0.0 1.7245428562164307 -0.18029697239398956 -0.2839455306529999 -0.4501480162143707 -0.8929410576820374 -0.0 0.010428071022033691 0.4949110746383667 0 1.0 0 0.0 0 0.0 0 0.0 1.7245428562164307 -0.18029697239398956 0.21605445444583893 -0.4501480162143707 -0.8929410576820374 -0.0 0.4582054913043976 0.3331541419029236 0 1.0 0 0.0 0 0.0 0 0.0 -0.9990271329879761 -0.06326057016849518 -0.2839455306529999 -0.9239173531532288 0.382519006729126 -0.0 0.977351725101471 0.53746497631073 0 1.0 0 0.0 0 0.0 0 0.0 -1.0018389225006104 -0.06946435570716858 -0.2839455306529999 -0.8956877589225769 0.4446241557598114 -0.0 0.979049801826477 0.5302878022193909 0 1.0 0 0.0 0 0.0 0 0.0 -1.0018389225006104 -0.06946435570716858 0.21605446934700012 -0.8956877589225769 0.4446241557598114 -0.0 0.6029060482978821 0.34914159774780273 0 1.0 0 0.0 0 0.0 0 0.0 1.1993017196655273 -0.007876485586166382 -0.2839455306529999 0.999786376953125 0.019562363624572754 -0.0 0.8874428272247314 0.5548990964889526 0 1.0 0 0.0 0 0.0 0 0.0 1.198608636856079 0.009764343500137329 -0.2839455306529999 0.9981383681297302 0.060731835663318634 -0.0 0.886174738407135 0.5731443166732788 0 1.0 0 0.0 0 0.0 0 0.0 1.198608636856079 0.009764343500137329 0.21605446934700012 0.9981383681297302 0.060731835663318634 -0.0 0.58528733253479 0.43931108713150024 0 1.0 0 0.0 0 0.0 0 0.0 -0.15759897232055664 -0.06422378122806549 -0.2839455306529999 -0.9989318251609802 -0.045686207711696625 -0.0 0.07166120409965515 0.6177982091903687 0 1.0 0 0.0 0 0.0 0 0.0 -0.1571369171142578 -0.0721898302435875 -0.2839455306529999 -0.9974669814109802 -0.0710776075720787 -0.0 0.0709240734577179 0.6092349290847778 0 1.0 0 0.0 0 0.0 0 0.0 -0.1571369171142578 -0.0721898302435875 0.21605446934700012 -0.9974669814109802 -0.0710776075720787 -0.0 0.4043731093406677 0.4704909324645996 0 1.0 0 0.0 0 0.0 0 0.0 0.8518390655517578 -0.0007581412792205811 -0.2839455306529999 -0.999969482421875 0.001037629321217537 -0.0 0.08500796556472778 0.5705099701881409 0 1.0 0 0.0 0 0.0 0 0.0 0.8520944118499756 -0.013474613428115845 -0.2839455306529999 -0.9991455078125 -0.04101687669754028 -0.0 0.08401632308959961 0.5573220252990723 0 1.0 0 0.0 0 0.0 0 0.0 0.8520944118499756 -0.013474613428115845 0.21605446934700012 -0.9991455078125 -0.04101687669754028 -0.0 0.3868945240974426 0.42290353775024414 0 1.0 0 0.0 0 0.0 0 0.0 -1.5527241230010986 -0.09441450238227844 -0.2839455306529999 0.8884548544883728 0.4589373469352722 -0.0 0.07403913140296936 0.5013856887817383 0 1.0 0 0.0 0 0.0 0 0.0 -1.5541154146194458 -0.0914761871099472 -0.2839455306529999 0.9182103872299194 0.3960081934928894 -0.0 0.07507732510566711 0.5045878887176514 0 1.0 0 0.0 0 0.0 0 0.0 -1.5541154146194458 -0.0914761871099472 0.21605446934700012 0.9182103872299194 0.3960081934928894 -0.0 0.4920453131198883 0.3158797025680542 0 1.0 0 0.0 0 0.0 0 0.0 0.07578086853027344 -0.0654071494936943 -0.2839455306529999 -0.965788722038269 0.25922420620918274 -0.0 0.9243631362915039 0.6189967393875122 0 1.0 0 0.0 0 0.0 0 0.0 0.07460594177246094 -0.06923449784517288 -0.2839455306529999 -0.9444563388824463 0.32856225967407227 -0.0 0.925327718257904 0.6147598028182983 0 1.0 0 0.0 0 0.0 0 0.0 0.07460594177246094 -0.06923449784517288 0.21605446934700012 -0.9444563388824463 0.32856225967407227 -0.0 0.5411810278892517 0.4654701352119446 0 1.0 0 0.0 0 0.0 0 0.0 1.845398187637329 -0.18213585019111633 -0.2839455306529999 0.3236792981624603 -0.9461653232574463 -0.0 0.938292920589447 0.4900234341621399 0 1.0 0 0.0 0 0.0 0 0.0 1.851309061050415 -0.1799904853105545 -0.2839455306529999 0.3588061034679413 -0.9333781003952026 -0.0 0.9349046945571899 0.4923299551010132 0 1.0 0 0.0 0 0.0 0 0.0 1.851309061050415 -0.1799904853105545 0.21605445444583893 0.3588061034679413 -0.9333781003952026 -0.0 0.5453030467033386 0.33780014514923096 0 1.0 0 0.0 0 0.0 0 0.0 -1.13923180103302 -0.07139932364225388 -0.2839455306529999 0.8889431357383728 0.45799127221107483 -0.0 0.06155392527580261 0.5179575085639954 0 1.0 0 0.0 0 0.0 0 0.0 -1.1416325569152832 -0.06627672910690308 -0.2839455306529999 0.9191870093345642 0.39378032088279724 -0.0 0.06336680054664612 0.523777961730957 0 1.0 0 0.0 0 0.0 0 0.0 -1.1416325569152832 -0.06627672910690308 0.21605446934700012 0.9191870093345642 0.39378032088279724 -0.0 0.5071949362754822 0.33174222707748413 0 1.0 0 0.0 0 0.0 0 0.0 -1.328776240348816 -0.09809833765029907 -0.2839455306529999 0.9986571669578552 0.05151524394750595 -0.0 0.9480462074279785 0.5135672092437744 0 1.0 0 0.0 0 0.0 0 0.0 -1.3290716409683228 -0.0915345624089241 -0.2839455306529999 0.99920654296875 0.03906369209289551 -0.0 0.947837233543396 0.5201842188835144 0 1.0 0 0.0 0 0.0 0 0.0 -1.3290716409683228 -0.0915345624089241 0.21605446934700012 0.99920654296875 0.03906369209289551 -0.0 0.6378192901611328 0.35732704401016235 0 1.0 0 0.0 0 0.0 0 0.0 1.7245428562164307 -0.18029697239398956 -0.2839455306529999 -0.4501480162143707 -0.8929410576820374 -0.0 0.010428071022033691 0.4949110746383667 0 1.0 0 0.0 0 0.0 0 0.0 1.7278664112091064 -0.18189504742622375 -0.2839455306529999 -0.41731008887290955 -0.9087496399879456 -0.0 0.00841948390007019 0.4929516911506653 0 1.0 0 0.0 0 0.0 0 0.0 1.7278664112091064 -0.18189504742622375 0.21605445444583893 -0.41734060645103455 -0.9087191224098206 -0.0 0.46042805910110474 0.3308688998222351 0 1.0 0 0.0 0 0.0 0 0.0 -1.2456544637680054 -0.06652848422527313 -0.2839455306529999 -0.9694814682006836 -0.2451246678829193 -0.0 0.11918789148330688 0.5129293203353882 0 1.0 0 0.0 0 0.0 0 0.0 -1.242162823677063 -0.07882294803857803 -0.2839455306529999 -0.9530625343322754 -0.3026825785636902 -0.0 0.11620524525642395 0.5006495714187622 0 1.0 0 0.0 0 0.0 0 0.0 -1.242162823677063 -0.07882294803857803 0.21605446934700012 -0.9530625343322754 -0.3026825785636902 -0.0 0.44452062249183655 0.33192235231399536 0 1.0 0 0.0 0 0.0 0 0.0 1.1992995738983154 -0.026327311992645264 -0.2839455306529999 0.999969482421875 -9.155552834272385e-05 -0.0 0.8890448212623596 0.535987377166748 0 1.0 0 0.0 0 0.0 0 0.0 1.1993017196655273 -0.007876485586166382 -0.2839455306529999 0.999786376953125 0.019562363624572754 -0.0 0.8874428272247314 0.5548990964889526 0 1.0 0 0.0 0 0.0 0 0.0 1.1993017196655273 -0.007876485586166382 0.21605446934700012 0.999786376953125 0.019562363624572754 -0.0 0.586828351020813 0.4211447238922119 0 1.0 0 0.0 0 0.0 0 0.0 -1.4397814273834229 -0.0933612808585167 -0.2839455306529999 -0.7780083417892456 0.6282235383987427 -0.0 1.006338119506836 0.5119343400001526 0 1.0 0 0.0 0 0.0 0 0.0 -1.4419924020767212 -0.09595176577568054 -0.2839455306529999 -0.7431256771087646 0.669118344783783 -0.0 1.0076266527175903 0.5087709426879883 0 1.0 0 0.0 0 0.0 0 0.0 -1.4419924020767212 -0.09595176577568054 0.21605446934700012 -0.7431256771087646 0.669118344783783 -0.0 0.5727245807647705 0.31769561767578125 0 1.0 0 0.0 0 0.0 0 0.0 0.8520944118499756 -0.013474613428115845 -0.2839455306529999 -0.9991455078125 -0.04101687669754028 -0.0 0.08401632308959961 0.5573220252990723 0 1.0 0 0.0 0 0.0 0 0.0 0.852860689163208 -0.025821372866630554 -0.2839455306529999 -0.9964598417282104 -0.08398693799972534 -0.0 0.08284473419189453 0.5445805788040161 0 1.0 0 0.0 0 0.0 0 0.0 0.852860689163208 -0.025821372866630554 0.21605446934700012 -0.9964598417282104 -0.08398693799972534 -0.0 0.3861108422279358 0.4100426435470581 0 1.0 0 0.0 0 0.0 0 0.0 -0.05577445030212402 -0.07145771384239197 -0.2839455306529999 0.9866939187049866 0.16248054802417755 -0.0 0.010903030633926392 0.6221014261245728 0 1.0 0 0.0 0 0.0 0 0.0 -0.05649089813232422 -0.06639958173036575 -0.2839455306529999 0.9922482967376709 0.12408825755119324 -0.0 0.01143917441368103 0.628298282623291 0 1.0 0 0.0 0 0.0 0 0.0 -0.05649089813232422 -0.06639958173036575 0.21605446934700012 0.9922482967376709 0.12408825755119324 -0.0 0.4607657194137573 0.47090214490890503 0 1.0 0 0.0 0 0.0 0 0.0 1.7278664112091064 -0.18189504742622375 -0.2839455306529999 -0.41731008887290955 -0.9087496399879456 -0.0 0.00841948390007019 0.4929516911506653 0 1.0 0 0.0 0 0.0 0 0.0 1.7313482761383057 -0.18342013657093048 -0.2839455306529999 -0.38496047258377075 -0.9229102730751038 -0.0 0.006315648555755615 0.4910735487937927 0 1.0 0 0.0 0 0.0 0 0.0 1.7313482761383057 -0.18342013657093048 0.21605445444583893 -0.38496047258377075 -0.9229102730751038 -0.0 0.46278277039527893 0.3286771774291992 0 1.0 0 0.0 0 0.0 0 0.0 -1.0018389225006104 -0.06946435570716858 -0.2839455306529999 -0.8956877589225769 0.4446241557598114 -0.0 0.979049801826477 0.5302878022193909 0 1.0 0 0.0 0 0.0 0 0.0 -1.004981517791748 -0.07527166604995728 -0.2839455306529999 -0.861079752445221 0.5084078311920166 -0.0 0.9809092879295349 0.5235574245452881 0 1.0 0 0.0 0 0.0 0 0.0 -1.004981517791748 -0.07527166604995728 0.21605446934700012 -0.861079752445221 0.5084078311920166 -0.0 0.6017383337020874 0.3417413830757141 0 1.0 0 0.0 0 0.0 0 0.0 0.07460594177246094 -0.06923449784517288 -0.2839455306529999 -0.9444563388824463 0.32856225967407227 -0.0 0.925327718257904 0.6147598028182983 0 1.0 0 0.0 0 0.0 0 0.0 0.07329249382019043 -0.07260335236787796 -0.2839455306529999 -0.921384334564209 0.3885921835899353 -0.0 0.9263383150100708 0.6110518574714661 0 1.0 0 0.0 0 0.0 0 0.0 0.07329249382019043 -0.07260335236787796 0.21605446934700012 -0.921384334564209 0.3885921835899353 -0.0 0.5405697822570801 0.46148681640625 0 1.0 0 0.0 0 0.0 0 0.0 0.852860689163208 -0.025821372866630554 -0.2839455306529999 -0.9964598417282104 -0.08398693799972534 -0.0 0.08284473419189453 0.5445805788040161 0 1.0 0 0.0 0 0.0 0 0.0 0.854137659072876 -0.03779841959476471 -0.2839455306529999 -0.9916074275970459 -0.12915432453155518 -0.0 0.08149310946464539 0.532286524772644 0 1.0 0 0.0 0 0.0 0 0.0 0.854137659072876 -0.03779841959476471 0.21605446934700012 -0.9916074275970459 -0.12915432453155518 -0.0 0.38557168841362 0.3975013494491577 0 1.0 0 0.0 0 0.0 0 0.0 -1.5511187314987183 -0.09727498143911362 -0.2839455306529999 0.8549760580062866 0.5186010599136353 -0.0 0.07288837432861328 0.49829840660095215 0 1.0 0 0.0 0 0.0 0 0.0 -1.5527241230010986 -0.09441450238227844 -0.2839455306529999 0.8884548544883728 0.4589373469352722 -0.0 0.07403913140296936 0.5013856887817383 0 1.0 0 0.0 0 0.0 0 0.0 -1.5527241230010986 -0.09441450238227844 0.21605446934700012 0.8884548544883728 0.4589373469352722 -0.0 0.4929672181606293 0.31238698959350586 0 1.0 0 0.0 0 0.0 0 0.0 -1.4419924020767212 -0.09595176577568054 -0.2839455306529999 -0.7431256771087646 0.669118344783783 -0.0 1.0076266527175903 0.5087709426879883 0 1.0 0 0.0 0 0.0 0 0.0 -1.4443737268447876 -0.09845954924821854 -0.2839455306529999 -0.7072664499282837 0.7069307565689087 -0.0 1.0090125799179077 0.5056973695755005 0 1.0 0 0.0 0 0.0 0 0.0 -1.4443737268447876 -0.09845954924821854 0.21605446934700012 -0.7072664499282837 0.7069307565689087 -0.0 0.5713112354278564 0.3143012523651123 0 1.0 0 0.0 0 0.0 0 0.0 1.8393609523773193 -0.18407689034938812 -0.2839455306529999 0.28867459297180176 -0.9573961496353149 -0.0 0.9417729377746582 0.4879313111305237 0 1.0 0 0.0 0 0.0 0 0.0 1.845398187637329 -0.18213585019111633 -0.2839455306529999 0.3236792981624603 -0.9461653232574463 -0.0 0.938292920589447 0.4900234341621399 0 1.0 0 0.0 0 0.0 0 0.0 1.845398187637329 -0.18213585019111633 0.21605445444583893 0.3236792981624603 -0.9461653232574463 -0.0 0.5417003035545349 0.33435338735580444 0 1.0 0 0.0 0 0.0 0 0.0 -1.1366022825241089 -0.07606462389230728 -0.2839455306529999 0.8522293567657471 0.5231177806854248 -0.0 0.05965006351470947 0.5127252340316772 0 1.0 0 0.0 0 0.0 0 0.0 -1.13923180103302 -0.07139932364225388 -0.2839455306529999 0.8889431357383728 0.45799127221107483 -0.0 0.06155392527580261 0.5179575085639954 0 1.0 0 0.0 0 0.0 0 0.0 -1.13923180103302 -0.07139932364225388 0.21605446934700012 0.8889431357383728 0.45799127221107483 -0.0 0.5089333653450012 0.32557326555252075 0 1.0 0 0.0 0 0.0 0 0.0 -0.054982662200927734 -0.07567181438207626 -0.2839455306529999 0.9761345386505127 0.21701711416244507 -0.0 0.010331302881240845 0.6169167160987854 0 1.0 0 0.0 0 0.0 0 0.0 -0.05577445030212402 -0.07145771384239197 -0.2839455306529999 0.9866939187049866 0.16248054802417755 -0.0 0.010903030633926392 0.6221014261245728 0 1.0 0 0.0 0 0.0 0 0.0 -0.05577445030212402 -0.07145771384239197 0.21605446934700012 0.9866939187049866 0.16248054802417755 -0.0 0.46101683378219604 0.46464651823043823 0 1.0 0 0.0 0 0.0 0 0.0 1.7313482761383057 -0.18342013657093048 -0.2839455306529999 -0.38496047258377075 -0.9229102730751038 -0.0 0.006315648555755615 0.4910735487937927 0 1.0 0 0.0 0 0.0 0 0.0 1.7349460124969482 -0.18484672904014587 -0.2839455306529999 -0.35154271125793457 -0.9361552596092224 -0.0 0.004141867160797119 0.4893079400062561 0 1.0 0 0.0 0 0.0 0 0.0 1.7349460124969482 -0.18484672904014587 0.21605445444583893 -0.35154271125793457 -0.9361552596092224 -0.0 0.4652417302131653 0.32661813497543335 0 1.0 0 0.0 0 0.0 0 0.0 -1.004981517791748 -0.07527166604995728 -0.2839455306529999 -0.861079752445221 0.5084078311920166 -0.0 0.9809092879295349 0.5235574245452881 0 1.0 0 0.0 0 0.0 0 0.0 -1.0084549188613892 -0.08068249374628067 -0.2839455306529999 -0.8197271823883057 0.5727408528327942 -0.0 0.9829331636428833 0.5172655582427979 0 1.0 0 0.0 0 0.0 0 0.0 -1.0084549188613892 -0.08068249374628067 0.21605446934700012 -0.8197271823883057 0.5727408528327942 -0.0 0.6002932786941528 0.33470362424850464 0 1.0 0 0.0 0 0.0 0 0.0 0.9527146816253662 -0.026327311992645264 -0.2839455306529999 0.0 -0.999969482421875 -0.0 1.0311825275421143 0.5487100481987 0 1.0 0 0.0 0 0.0 0 0.0 1.1992995738983154 -0.026327311992645264 -0.2839455306529999 0.0 -1.0 -0.0 0.8890448212623596 0.535987377166748 0 1.0 0 0.0 0 0.0 0 0.0 1.1992995738983154 -0.026327311992645264 0.21605446934700012 0.0 -0.999969482421875 -0.0 0.5881603956222534 0.40214085578918457 0 1.0 0 0.0 0 0.0 0 0.0 -0.1571369171142578 -0.0721898302435875 -0.2839455306529999 -0.9974669814109802 -0.0710776075720787 -0.0 0.0709240734577179 0.6092349290847778 0 1.0 0 0.0 0 0.0 0 0.0 -0.15648984909057617 -0.07983966916799545 -0.2839455306529999 -0.9951170086860657 -0.09848322719335556 -0.0 0.0701218843460083 0.6009762287139893 0 1.0 0 0.0 0 0.0 0 0.0 -0.15648984909057617 -0.07983966916799545 0.21605446934700012 -0.9951170086860657 -0.09848322719335556 -0.0 0.40408778190612793 0.46211308240890503 0 1.0 0 0.0 0 0.0 0 0.0 -1.5492993593215942 -0.10005762428045273 -0.2839455306529999 0.8185674548149109 0.574358344078064 -0.0 0.07162481546401978 0.49532419443130493 0 1.0 0 0.0 0 0.0 0 0.0 -1.5511187314987183 -0.09727498143911362 -0.2839455306529999 0.8549760580062866 0.5186010599136353 -0.0 0.07288837432861328 0.49829840660095215 0 1.0 0 0.0 0 0.0 0 0.0 -1.5511187314987183 -0.09727498143911362 0.21605446934700012 0.8549760580062866 0.5186010599136353 -0.0 0.4940483868122101 0.3089780807495117 0 1.0 0 0.0 0 0.0 0 0.0 0.953040599822998 -0.03348945081233978 -0.2839455306529999 0.9976500868797302 0.06805627793073654 -0.0 0.03077256679534912 0.540071964263916 0 1.0 0 0.0 0 0.0 0 0.0 0.9527146816253662 -0.026327311992645264 -0.2839455306529999 0.9989623427391052 0.04544205963611603 -0.0 0.03118249773979187 0.5487100481987 0 1.0 0 0.0 0 0.0 0 0.0 0.9527146816253662 -0.026327311992645264 0.21605446934700012 0.9989623427391052 0.04544205963611603 -0.0 0.4389815330505371 0.39140015840530396 0 1.0 0 0.0 0 0.0 0 0.0 -1.655472755432129 -0.09779063612222672 -0.2839455306529999 -0.9924619197845459 -0.12231818586587906 -0.0 0.12539279460906982 0.4907315969467163 0 1.0 0 0.0 0 0.0 0 0.0 -1.6543234586715698 -0.10515831410884857 -0.2839455306529999 -0.982329785823822 -0.18707846105098724 -0.0 0.12408101558685303 0.4837164282798767 0 1.0 0 0.0 0 0.0 0 0.0 -1.6543234586715698 -0.10515831410884857 0.21605446934700012 -0.982329785823822 -0.18707846105098724 -0.0 0.43253403902053833 0.32122570276260376 0 1.0 0 0.0 0 0.0 0 0.0 0.07329249382019043 -0.07260335236787796 -0.2839455306529999 -0.921384334564209 0.3885921835899353 -0.0 0.9263383150100708 0.6110518574714661 0 1.0 0 0.0 0 0.0 0 0.0 0.07180380821228027 -0.075879767537117 -0.2839455306529999 -0.8986785411834717 0.4385509788990021 -0.0 0.9274437427520752 0.6074543595314026 0 1.0 0 0.0 0 0.0 0 0.0 0.07180380821228027 -0.075879767537117 0.21605446934700012 -0.8986785411834717 0.4385509788990021 -0.0 0.5398499369621277 0.45758336782455444 0 1.0 0 0.0 0 0.0 0 0.0 1.8331973552703857 -0.18581360578536987 -0.2839455306529999 0.2539750337600708 -0.9671925902366638 -0.0 0.9453461170196533 0.4860578179359436 0 1.0 0 0.0 0 0.0 0 0.0 1.8393609523773193 -0.18407689034938812 -0.2839455306529999 0.28867459297180176 -0.9573961496353149 -0.0 0.9417729377746582 0.4879313111305237 0 1.0 0 0.0 0 0.0 0 0.0 1.8393609523773193 -0.18407689034938812 0.21605445444583893 0.28867459297180176 -0.9573961496353149 -0.0 0.5379304885864258 0.33115673065185547 0 1.0 0 0.0 0 0.0 0 0.0 -1.132501244544983 -0.08221854269504547 -0.2839455306529999 0.8114871382713318 0.5843378901481628 -0.0 0.05678075551986694 0.505921483039856 0 1.0 0 0.0 0 0.0 0 0.0 -1.1366022825241089 -0.07606462389230728 -0.2839455306529999 0.8522293567657471 0.5231177806854248 -0.0 0.05965006351470947 0.5127252340316772 0 1.0 0 0.0 0 0.0 0 0.0 -1.1366022825241089 -0.07606462389230728 0.21605446934700012 0.8522293567657471 0.5231177806854248 -0.0 0.510858416557312 0.31999123096466064 0 1.0 0 0.0 0 0.0 0 0.0 1.7349460124969482 -0.18484672904014587 -0.2839455306529999 -0.35154271125793457 -0.9361552596092224 -0.0 0.004141867160797119 0.4893079400062561 0 1.0 0 0.0 0 0.0 0 0.0 1.738616704940796 -0.18614926934242249 -0.2839455306529999 -0.317392498254776 -0.9482711553573608 -0.0 0.0019239485263824463 0.48768627643585205 0 1.0 0 0.0 0 0.0 0 0.0 1.738616704940796 -0.18614926934242249 0.21605445444583893 -0.317392498254776 -0.9482711553573608 -0.0 0.4677753150463104 0.3247298002243042 0 1.0 0 0.0 0 0.0 0 0.0 -1.242162823677063 -0.07882294803857803 -0.2839455306529999 -0.9530625343322754 -0.3026825785636902 -0.0 0.11620524525642395 0.5006495714187622 0 1.0 0 0.0 0 0.0 0 0.0 -1.2380362749099731 -0.09055066853761673 -0.2839455306529999 -0.9320352673530579 -0.36234626173973083 -0.0 0.11300912499427795 0.48906201124191284 0 1.0 0 0.0 0 0.0 0 0.0 -1.2380362749099731 -0.09055066853761673 0.21605446934700012 -0.9320352673530579 -0.36234626173973083 -0.0 0.44594162702560425 0.31891322135925293 0 1.0 0 0.0 0 0.0 0 0.0 0.9536681175231934 -0.040381595492362976 -0.2839455306529999 0.9933775067329407 0.11484114825725555 -0.0 0.03019922971725464 0.5318121910095215 0 1.0 0 0.0 0 0.0 0 0.0 0.953040599822998 -0.03348945081233978 -0.2839455306529999 0.9976500868797302 0.06805627793073654 -0.0 0.03077256679534912 0.540071964263916 0 1.0 0 0.0 0 0.0 0 0.0 0.953040599822998 -0.03348945081233978 0.21605446934700012 0.9976500868797302 0.06805627793073654 -0.0 0.43873849511146545 0.3827359676361084 0 1.0 0 0.0 0 0.0 0 0.0 0.854137659072876 -0.03779841959476471 -0.2839455306529999 -0.9916074275970459 -0.12915432453155518 -0.0 0.08149310946464539 0.532286524772644 0 1.0 0 0.0 0 0.0 0 0.0 0.8559255599975586 -0.04940573871135712 -0.2839455306529999 -0.9843134880065918 -0.17636646330356598 -0.0 0.07996010780334473 0.5204365253448486 0 1.0 0 0.0 0 0.0 0 0.0 0.8559255599975586 -0.04940573871135712 0.21605446934700012 -0.9843134880065918 -0.17636646330356598 -0.0 0.38528379797935486 0.38527578115463257 0 1.0 0 0.0 0 0.0 0 0.0 -1.328415036201477 -0.10430455207824707 -0.2839455306529999 0.9978331923484802 0.06543168425559998 -0.0 0.9482048749923706 0.5073869228363037 0 1.0 0 0.0 0 0.0 0 0.0 -1.328776240348816 -0.09809833765029907 -0.2839455306529999 0.9986571669578552 0.05151524394750595 -0.0 0.9480462074279785 0.5135672092437744 0 1.0 0 0.0 0 0.0 0 0.0 -1.328776240348816 -0.09809833765029907 0.21605446934700012 0.9986571669578552 0.05151524394750595 -0.0 0.6388593912124634 0.3509647846221924 0 1.0 0 0.0 0 0.0 0 0.0 -0.05411553382873535 -0.07904185354709625 -0.2839455306529999 0.9590746760368347 0.28302866220474243 -0.0 0.009722918272018433 0.6127604246139526 0 1.0 0 0.0 0 0.0 0 0.0 -0.054982662200927734 -0.07567181438207626 -0.2839455306529999 0.9761345386505127 0.21701711416244507 -0.0 0.010331302881240845 0.6169167160987854 0 1.0 0 0.0 0 0.0 0 0.0 -0.054982662200927734 -0.07567181438207626 0.21605446934700012 0.9761345386505127 0.21701711416244507 -0.0 0.46134936809539795 0.4593951106071472 0 1.0 0 0.0 0 0.0 0 0.0 -1.0084549188613892 -0.08068249374628067 -0.2839455306529999 -0.8197271823883057 0.5727408528327942 -0.0 0.9829331636428833 0.5172655582427979 0 1.0 0 0.0 0 0.0 0 0.0 -1.0122591257095337 -0.08569684624671936 -0.2839455306529999 -0.7750175595283508 0.6319162845611572 -0.0 0.9851247668266296 0.5114044547080994 0 1.0 0 0.0 0 0.0 0 0.0 -1.0122591257095337 -0.08569684624671936 0.21605446934700012 -0.7750175595283508 0.6319162845611572 -0.0 0.5985607504844666 0.32802635431289673 0 1.0 0 0.0 0 0.0 0 0.0 -1.4443737268447876 -0.09845954924821854 -0.2839455306529999 -0.7072664499282837 0.7069307565689087 -0.0 1.0090125799179077 0.5056973695755005 0 1.0 0 0.0 0 0.0 0 0.0 -1.4469252824783325 -0.10088463127613068 -0.2839455306529999 -0.670796811580658 0.7416303157806396 -0.0 1.0104960203170776 0.5027124881744385 0 1.0 0 0.0 0 0.0 0 0.0 -1.4469252824783325 -0.10088463127613068 0.21605446934700012 -0.670796811580658 0.7416303157806396 -0.0 0.5697541236877441 0.31098443269729614 0 1.0 0 0.0 0 0.0 0 0.0 0.07180380821228027 -0.075879767537117 -0.2839455306529999 -0.8986785411834717 0.4385509788990021 -0.0 0.9274437427520752 0.6074543595314026 0 1.0 0 0.0 0 0.0 0 0.0 0.07014012336730957 -0.07906375080347061 -0.2839455306529999 -0.8731955885887146 0.48731955885887146 -0.0 0.9286445379257202 0.603966474533081 0 1.0 0 0.0 0 0.0 0 0.0 0.07014012336730957 -0.07906375080347061 0.21605446934700012 -0.8731955885887146 0.48731955885887146 -0.0 0.5390197038650513 0.45376038551330566 0 1.0 0 0.0 0 0.0 0 0.0 1.8269073963165283 -0.18734599649906158 -0.2839455306529999 0.21970275044441223 -0.9755546450614929 -0.0 0.9490134716033936 0.48440754413604736 0 1.0 0 0.0 0 0.0 0 0.0 1.8331973552703857 -0.18581360578536987 -0.2839455306529999 0.2539750337600708 -0.9671925902366638 -0.0 0.9453461170196533 0.4860578179359436 0 1.0 0 0.0 0 0.0 0 0.0 1.8331973552703857 -0.18581360578536987 0.21605445444583893 0.2539750337600708 -0.9671925902366638 -0.0 0.533993124961853 0.32822293043136597 0 1.0 0 0.0 0 0.0 0 0.0 1.738616704940796 -0.18614926934242249 -0.2839455306529999 -0.317392498254776 -0.9482711553573608 -0.0 1.00192391872406 0.48768627643585205 0 1.0 0 0.0 0 0.0 0 0.0 1.7423598766326904 -0.18732775747776031 -0.2839455306529999 -0.28333383798599243 -0.9590136408805847 -0.0 0.9996620416641235 0.48620885610580444 0 1.0 0 0.0 0 0.0 0 0.0 1.7423598766326904 -0.18732775747776031 0.21605445444583893 -0.28333383798599243 -0.9590136408805847 -0.0 1.4703819751739502 0.32301509380340576 0 1.0 0 0.0 0 0.0 0 0.0 0.9545972347259521 -0.047003746032714844 -0.2839455306529999 0.9863277077674866 0.16461683809757233 -0.0 0.029464364051818848 0.5239272117614746 0 1.0 0 0.0 0 0.0 0 0.0 0.9536681175231934 -0.040381595492362976 -0.2839455306529999 0.9933775067329407 0.11484114825725555 -0.0 0.03019922971725464 0.5318121910095215 0 1.0 0 0.0 0 0.0 0 0.0 0.9536681175231934 -0.040381595492362976 0.21605446934700012 0.9933775067329407 0.11484114825725555 -0.0 0.43869754672050476 0.37439829111099243 0 1.0 0 0.0 0 0.0 0 0.0 -1.1281375885009766 -0.0878373384475708 -0.2839455306529999 0.765251636505127 0.6436964273452759 -0.0 0.05381375551223755 0.4998077154159546 0 1.0 0 0.0 0 0.0 0 0.0 -1.132501244544983 -0.08221854269504547 -0.2839455306529999 0.8114871382713318 0.5843378901481628 -0.0 0.05678075551986694 0.505921483039856 0 1.0 0 0.0 0 0.0 0 0.0 -1.132501244544983 -0.08221854269504547 0.21605446934700012 0.8114871382713318 0.5843378901481628 -0.0 0.5139024257659912 0.3127002716064453 0 1.0 0 0.0 0 0.0 0 0.0 -1.547265887260437 -0.10276243090629578 -0.2839455306529999 0.7799615263938904 0.6258125305175781 -0.0 0.07024794816970825 0.49246126413345337 0 1.0 0 0.0 0 0.0 0 0.0 -1.5492993593215942 -0.10005762428045273 -0.2839455306529999 0.8185674548149109 0.574358344078064 -0.0 0.07162481546401978 0.49532419443130493 0 1.0 0 0.0 0 0.0 0 0.0 -1.5492993593215942 -0.10005762428045273 0.21605446934700012 0.8185674548149109 0.574388861656189 -0.0 0.4952918291091919 0.30565404891967773 0 1.0 0 0.0 0 0.0 0 0.0 -0.053148746490478516 -0.08193881809711456 -0.2839455306529999 0.940336287021637 0.3401898145675659 -0.0 0.009056895971298218 0.6091814041137695 0 1.0 0 0.0 0 0.0 0 0.0 -0.05411553382873535 -0.07904185354709625 -0.2839455306529999 0.9590746760368347 0.28302866220474243 -0.0 0.009722918272018433 0.6127604246139526 0 1.0 0 0.0 0 0.0 0 0.0 -0.05411553382873535 -0.07904185354709625 0.21605446934700012 0.9591051936149597 0.28302866220474243 -0.0 0.4617636799812317 0.45516467094421387 0 1.0 0 0.0 0 0.0 0 0.0 1.7423598766326904 -0.18732775747776031 -0.2839455306529999 -0.28333383798599243 -0.9590136408805847 -0.0 0.9996620416641235 0.48620885610580444 0 1.0 0 0.0 0 0.0 0 0.0 1.7461764812469482 -0.18838219344615936 -0.2839455306529999 -0.24948881566524506 -0.9683523178100586 -0.0 0.9973554611206055 0.48487597703933716 0 1.0 0 0.0 0 0.0 0 0.0 1.7461764812469482 -0.18838219344615936 0.21605445444583893 -0.24951933324337006 -0.9683523178100586 -0.0 1.473060965538025 0.32147711515426636 0 1.0 0 0.0 0 0.0 0 0.0 -1.0122591257095337 -0.08569684624671936 -0.2839455306529999 -0.7750175595283508 0.6319162845611572 -0.0 0.9851247668266296 0.5114044547080994 0 1.0 0 0.0 0 0.0 0 0.0 -1.0162993669509888 -0.09031227976083755 -0.2839455306529999 -0.7314981818199158 0.6818140149116516 -0.0 0.9874353408813477 0.5059763193130493 0 1.0 0 0.0 0 0.0 0 0.0 -1.0162993669509888 -0.09031227976083755 0.21605446934700012 -0.7314981818199158 0.6818140149116516 -0.0 0.5965896844863892 0.32174062728881836 0 1.0 0 0.0 0 0.0 0 0.0 0.9558279514312744 -0.053355902433395386 -0.2839455306529999 0.9760735034942627 0.21732230484485626 -0.0 0.028569430112838745 0.5164120197296143 0 1.0 0 0.0 0 0.0 0 0.0 0.9545972347259521 -0.047003746032714844 -0.2839455306529999 0.9863277077674866 0.16461683809757233 -0.0 0.029464364051818848 0.5239272117614746 0 1.0 0 0.0 0 0.0 0 0.0 0.9545972347259521 -0.047003746032714844 0.21605446934700012 0.9863277077674866 0.16461683809757233 -0.0 0.43886324763298035 0.3663843274116516 0 1.0 0 0.0 0 0.0 0 0.0 -1.4469252824783325 -0.10088463127613068 -0.2839455306529999 -0.670796811580658 0.7416303157806396 -0.0 1.0104960203170776 0.5027124881744385 0 1.0 0 0.0 0 0.0 0 0.0 -1.4496471881866455 -0.10322701185941696 -0.2839455306529999 -0.634144127368927 0.773186445236206 -0.0 1.0120773315429688 0.49981552362442017 0 1.0 0 0.0 0 0.0 0 0.0 -1.4496471881866455 -0.10322701185941696 0.21605446934700012 -0.634144127368927 0.773186445236206 -0.0 0.5680505633354187 0.30774790048599243 0 1.0 0 0.0 0 0.0 0 0.0 0.07014012336730957 -0.07906375080347061 -0.2839455306529999 -0.8731955885887146 0.48731955885887146 -0.0 0.9286445379257202 0.603966474533081 0 1.0 0 0.0 0 0.0 0 0.0 0.06830120086669922 -0.08215530216693878 -0.2839455306529999 -0.8451185822486877 0.5345317125320435 -0.0 0.9299417734146118 0.6005876064300537 0 1.0 0 0.0 0 0.0 0 0.0 0.06830120086669922 -0.08215530216693878 0.21605446934700012 -0.8451185822486877 0.5345317125320435 -0.0 0.5380769968032837 0.45001834630966187 0 1.0 0 0.0 0 0.0 0 0.0 0.8559255599975586 -0.04940573871135712 -0.2839455306529999 -0.9843134880065918 -0.17636646330356598 -0.0 0.07996010780334473 0.5204365253448486 0 1.0 0 0.0 0 0.0 0 0.0 0.8582241535186768 -0.06064333766698837 -0.2839455306529999 -0.9742423892021179 -0.22537919878959656 -0.0 0.07824346423149109 0.5090236663818359 0 1.0 0 0.0 0 0.0 0 0.0 0.8582241535186768 -0.06064333766698837 0.21605446934700012 -0.9742423892021179 -0.22537919878959656 -0.0 0.3852550685405731 0.37335896492004395 0 1.0 0 0.0 0 0.0 0 0.0 0 1 2 0 3 4 5 0 6 7 8 0 9 10 11 0 12 13 14 0 15 16 17 0 18 19 20 0 21 22 23 0 24 25 26 0 27 28 29 0 30 31 32 0 33 34 35 0 36 37 38 0 39 40 41 0 42 43 44 0 45 46 47 0 48 49 50 0 51 52 53 0 54 55 56 0 57 58 59 0 60 61 62 0 63 64 65 0 66 67 68 0 69 70 71 0 72 73 74 0 75 76 77 0 78 79 80 0 81 82 83 0 84 85 86 0 87 88 89 0 90 91 92 0 93 94 95 0 96 97 98 0 99 100 101 0 102 103 104 0 105 106 107 0 108 109 110 0 111 112 113 0 114 115 116 0 117 118 119 0 120 121 122 0 123 124 125 0 126 127 128 0 129 130 131 0 132 133 134 0 135 136 137 0 138 139 140 0 141 142 143 0 144 145 146 0 147 148 149 0 150 151 152 0 153 154 155 0 156 157 158 0 159 160 161 0 162 163 164 0 165 166 167 0 168 169 170 0 171 172 173 0 174 175 176 0 177 178 179 0 180 181 182 0 183 184 185 0 186 187 188 0 189 190 191 0 192 193 194 0 195 196 197 0 198 199 200 0 201 202 203 0 204 205 206 0 207 208 209 0 210 211 212 0 213 214 215 0 216 217 218 0 219 220 221 0 222 223 224 0 225 226 227 0 228 229 230 0 231 232 233 0 234 235 236 0 237 238 239 0 240 241 242 0 243 244 245 0 246 247 248 0 249 250 251 0 252 253 254 0 255 256 257 0 258 259 260 0 261 262 263 0 264 265 266 0 267 268 269 0 270 271 272 0 273 274 275 0 276 277 278 0 279 280 281 0 282 283 284 0 285 286 287 0 288 289 290 0 291 292 293 0 294 295 296 0 297 298 299 0 300 301 302 0 303 304 305 0 306 307 308 0 309 310 311 0 312 313 314 0 315 316 317 0 318 319 320 0 321 322 323 0 324 325 326 0 327 328 329 0 330 331 332 0 333 334 335 0 336 337 338 0 339 340 341 0 342 343 344 0 345 346 347 0 348 349 350 0 351 352 353 0 354 355 356 0 357 358 359 0 360 361 362 0 363 364 365 0 366 367 368 0 369 370 371 0 372 373 374 0 375 376 377 0 378 379 380 0 381 382 383 0 384 385 386 0 387 388 389 0 390 391 392 0 393 394 395 0 396 397 398 0 399 400 401 0 402 403 404 0 405 406 407 0 408 409 410 0 411 412 413 0 414 415 416 0 417 418 419 0 420 421 422 0 423 424 425 0 426 427 428 0 429 430 431 0 432 433 434 0 435 436 437 0 438 439 440 0 441 442 443 0 444 445 446 0 447 448 449 0 450 451 452 0 453 454 455 0 456 457 458 0 459 460 461 0 462 463 464 0 465 466 467 0 468 469 470 0 471 472 473 0 474 475 476 0 477 478 479 0 480 481 482 0 483 484 485 0 486 487 488 0 489 490 491 0 492 493 494 0 495 496 497 0 498 499 500 0 501 502 503 0 504 505 506 0 507 508 509 0 510 511 512 0 513 514 515 0 516 517 518 0 519 520 521 0 522 523 524 0 525 526 527 0 528 529 530 0 531 532 533 0 534 535 536 0 537 538 539 0 540 541 542 0 543 544 545 0 546 547 548 0 549 550 551 0 552 553 554 0 555 556 557 0 558 559 560 0 561 562 563 0 564 565 566 0 567 568 569 0 570 571 572 0 573 574 575 0 576 577 578 0 579 580 581 0 582 583 584 0 585 586 587 0 588 589 590 0 591 592 593 0 594 595 596 0 597 598 599 0 600 601 602 0 603 604 605 0 606 607 608 0 609 610 611 0 612 613 614 0 615 616 617 0 618 619 620 0 621 622 623 0 624 625 626 0 627 628 629 0 630 631 632 0 633 634 635 0 636 637 638 0 639 640 641 0 642 643 644 0 645 646 647 0 648 649 650 0 651 652 653 0 654 655 656 0 657 658 659 0 660 661 662 0 663 664 665 0 666 667 668 0 669 670 671 0 672 673 674 0 675 676 677 0 678 679 680 0 681 682 683 0 684 685 686 0 687 688 689 0 690 691 692 0 693 694 695 0 696 697 698 0 699 700 701 0 702 703 704 0 705 706 707 0 708 709 710 0 711 712 713 0 714 715 716 0 717 718 719 0 720 721 722 0 723 724 725 0 726 727 728 0 729 730 731 0 732 733 734 0 735 736 737 0 738 739 740 0 741 742 743 0 744 745 746 0 747 748 749 0 750 751 752 0 753 754 755 0 756 757 758 0 759 760 761 0 762 763 764 0 765 766 767 0 768 769 770 0 771 772 773 0 774 775 776 0 777 778 779 0 780 781 782 0 783 784 785 0 786 787 788 0 789 790 791 0 792 793 794 0 795 796 797 0 798 799 800 0 801 802 803 0 804 805 806 0 807 808 809 0 810 811 812 0 813 814 815 0 816 817 818 0 819 820 821 0 822 823 824 0 825 826 827 0 828 829 830 0 831 832 833 0 834 835 836 0 837 838 839 0 840 841 842 0 843 844 845 0 846 847 848 0 849 850 851 0 852 853 854 0 855 856 857 0 858 859 860 0 861 862 863 0 864 865 866 0 867 868 869 0 870 871 872 0 873 874 875 0 876 877 878 0 879 880 881 0 882 883 884 0 885 886 887 0 888 889 890 0 891 892 893 0 894 895 896 0 897 898 899 0 900 901 902 0 903 904 905 0 906 907 908 0 909 910 911 0 912 913 914 0 915 916 917 0 918 919 920 0 921 922 923 0 924 925 926 0 927 928 929 0 930 931 932 0 933 934 935 0 936 937 938 0 939 940 941 0 942 943 944 0 945 946 947 0 948 949 950 0 951 952 953 0 954 955 956 0 957 958 959 0 960 961 962 0 963 964 965 0 966 967 968 0 969 970 971 0 972 973 974 0 975 976 977 0 978 979 980 0 981 982 983 0 984 985 986 0 987 988 989 0 990 991 992 0 993 994 995 0 996 997 998 0 999 1000 1001 0 1002 1003 1004 0 1005 1006 1007 0 1008 1009 1010 0 1011 1012 1013 0 1014 1015 1016 0 1017 1018 1019 0 1020 1021 1022 0 1023 1024 1025 0 1026 1027 1028 0 1029 1030 1031 0 1032 1033 1034 0 1035 1036 1037 0 1038 1039 1040 0 1041 1042 1043 0 1044 1045 1046 0 1047 1048 1049 0 1050 1051 1052 0 1053 1054 1055 0 1056 1057 1058 0 1059 1060 1061 0 1062 1063 1064 0 1065 1066 1067 0 1068 1069 1070 0 1071 1072 1073 0 1074 1075 1076 0 1077 1078 1079 0 1080 1081 1082 0 1083 1084 1085 0 1086 1087 1088 0 1089 1090 1091 0 1092 1093 1094 0 1095 1096 1097 0 1098 1099 1100 0 1101 1102 1103 0 1104 1105 1106 0 1107 1108 1109 0 1110 1111 1112 0 1113 1114 1115 0 1116 1117 1118 0 1119 1120 1121 0 1122 1123 1124 0 1125 1126 1127 0 1128 1129 1130 0 1131 1132 1133 0 1134 1135 1136 0 1137 1138 1139 0 1140 1141 1142 0 1143 1144 1145 0 1146 1147 1148 0 1149 1150 1151 0 1152 1153 1154 0 1155 1156 1157 0 1158 1159 1160 0 1161 1162 1163 0 1164 1165 1166 0 1167 1168 1169 0 1170 1171 1172 0 1173 1174 1175 0 1176 1177 1178 0 1179 1180 1181 0 1182 1183 1184 0 1185 1186 1187 0 1188 1189 1190 0 1191 1192 1193 0 1194 1195 1196 0 1197 1198 1199 0 1200 1201 1202 0 1203 1204 1205 0 1206 1207 1208 0 1209 1210 1211 0 1212 1213 1214 0 1215 1216 1217 0 1218 1219 1220 0 1221 1222 1223 0 1224 1225 1226 0 1227 1228 1229 0 1230 1231 1232 0 1233 1234 1235 0 1236 1237 1238 0 1239 1240 1241 0 1242 1243 1244 0 1245 1246 1247 0 1248 1249 1250 0 1251 1252 1253 0 1254 1255 1256 0 1257 1258 1259 0 1260 1261 1262 0 1263 1264 1265 0 1266 1267 1268 0 1269 1270 1271 0 1272 1273 1274 0 1275 1276 1277 0 1278 1279 1280 0 1281 1282 1283 0 1284 1285 1286 0 1287 1288 1289 0 1290 1291 1292 0 1293 1294 1295 0 1296 1297 1298 0 1299 1300 1301 0 1302 1303 1304 0 1305 1306 1307 0 1308 1309 1310 0 1311 1312 1313 0 1314 1315 1316 0 1317 1318 1319 0 1320 1321 1322 0 1323 1324 1325 0 1326 1327 1328 0 1329 1330 1331 0 1332 1333 1334 0 1335 1336 1337 0 1338 1339 1340 0 1341 1342 1343 0 1344 1345 1346 0 1347 1348 1349 0 1350 1351 1352 0 1353 1354 1355 0 1356 1357 1358 0 1359 1360 1361 0 1362 1363 1364 0 1365 1366 1367 0 1368 1369 1370 0 1371 1372 1373 0 1374 1375 1376 0 1377 1378 1379 0 1380 1381 1382 0 1383 1384 1385 0 1386 1387 1388 0 1389 1390 1391 0 1392 1393 1394 0 1395 1396 1397 0 1398 1399 1400 0 1401 1402 1403 0 1404 1405 1406 0 1407 1408 1409 0 1410 1411 1412 0 1413 1414 1415 0 1416 1417 1418 0 1419 1420 1421 0 1422 1423 1424 0 1425 1426 1427 0 1428 1429 1430 0 1431 1432 1433 0 1434 1435 1436 0 1437 1438 1439 0 1440 1441 1442 0 1443 1444 1445 0 1446 1447 1448 0 1449 1450 1451 0 1452 1453 1454 0 1455 1456 1457 0 1458 1459 1460 0 1461 1462 1463 0 1464 1465 1466 0 1467 1468 1469 0 1470 1471 1472 0 1473 1474 1475 0 1476 1477 1478 0 1479 1480 1481 0 1482 1483 1484 0 1485 1486 1487 0 1488 1489 1490 0 1491 1492 1493 0 1494 1495 1496 0 1497 1498 1499 0 1500 1501 1502 0 1503 1504 1505 0 1506 1507 1508 0 1509 1510 1511 0 1512 1513 1514 0 1515 1516 1517 0 1518 1519 1520 0 1521 1522 1523 0 1524 1525 1526 0 1527 1528 1529 0 1530 1531 1532 0 1533 1534 1535 0 1536 1537 1538 0 1539 1540 1541 0 1542 1543 1544 0 1545 1546 1547 0 1548 1549 1550 0 1551 1552 1553 0 1554 1555 1556 0 1557 1558 1559 0 1560 1561 1562 0 1563 1564 1565 0 1566 1567 1568 0 1569 1570 1571 0 1572 1573 1574 0 1575 1576 1577 0 1578 1579 1580 0 1581 1582 1583 0 1584 1585 1586 0 1587 1588 1589 0 1590 1591 1592 0 1593 1594 1595 0 1596 1597 1598 0 1599 1600 1601 0 1602 1603 1604 0 1605 1606 1607 0 1608 1609 1610 0 1611 1612 1613 0 1614 1615 1616 0 1617 1618 1619 0 1620 1621 1622 0 1623 1624 1625 0 1626 1627 1628 0 1629 1630 1631 0 1632 1633 1634 0 1635 1636 1637 0 1638 1639 1640 0 1641 1642 1643 0 1644 1645 1646 0 1647 1648 1649 0 1650 1651 1652 0 1653 1654 1655 0 1656 1657 1658 0 1659 1660 1661 0 1662 1663 1664 0 1665 1666 1667 0 1668 1669 1670 0 1671 1672 1673 0 1674 1675 1676 0 1677 1678 1679 0 1680 1681 1682 0 1683 1684 1685 0 1686 1687 1688 0 1689 1690 1691 0 1692 1693 1694 0 1695 1696 1697 0 1698 1699 1700 0 1701 1702 1703 0 1704 1705 1706 0 1707 1708 1709 0 1710 1711 1712 0 1713 1714 1715 0 1716 1717 1718 0 1719 1720 1721 0 1722 1723 1724 0 1725 1726 1727 0 1728 1729 1730 0 1731 1732 1733 0 1734 1735 1736 0 1737 1738 1739 0 1740 1741 1742 0 1743 1744 1745 0 1746 1747 1748 0 1749 1750 1751 0 1752 1753 1754 0 1755 1756 1757 0 1758 1759 1760 0 1761 1762 1763 0 1764 1765 1766 0 1767 1768 1769 0 1770 1771 1772 0 1773 1774 1775 0 1776 1777 1778 0 1779 1780 1781 0 1782 1783 1784 0 1785 1786 1787 0 1788 1789 1790 0 1791 1792 1793 0 1794 1795 1796 0 1797 1798 1799 0 1800 1801 1802 0 1803 1804 1805 0 1806 1807 1808 0 1809 1810 1811 0 1812 1813 1814 0 1815 1816 1817 0 1818 1819 1820 0 1821 1822 1823 0 1824 1825 1826 0 1827 1828 1829 0 1830 1831 1832 0 1833 1834 1835 0 1836 1837 1838 0 1839 1840 1841 0 1842 1843 1844 0 1845 1846 1847 0 1848 1849 1850 0 1851 1852 1853 0 1854 1855 1856 0 1857 1858 1859 0 1860 1861 1862 0 1863 1864 1865 0 1866 1867 1868 0 1869 1870 1871 0 1872 1873 1874 0 1875 1876 1877 0 1878 1879 1880 0 1881 1882 1883 0 1884 1885 1886 0 1887 1888 1889 0 1890 1891 1892 0 1893 1894 1895 0 1896 1897 1898 0 1899 1900 1901 0 1902 1903 1904 0 1905 1906 1907 0 1908 1909 1910 0 1911 1912 1913 0 1914 1915 1916 0 1917 1918 1919 0 1920 1921 1922 0 1923 1924 1925 0 1926 1927 1928 0 1929 1930 1931 0 1932 1933 1934 0 1935 1936 1937 0 1938 1939 1940 0 1941 1942 1943 0 1944 1945 1946 0 1947 1948 1949 0 1950 1951 1952 0 1953 1954 1955 0 1956 1957 1958 0 1959 1960 1961 0 1962 1963 1964 0 1965 1966 1967 0 1968 1969 1970 0 1971 1972 1973 0 1974 1975 1976 0 1977 1978 1979 0 1980 1981 1982 0 1983 1984 1985 0 1986 1987 1988 0 1989 1990 1991 0 1992 1993 1994 0 1995 1996 1997 0 1998 1999 2000 0 2001 2002 2003 0 2004 2005 2006 0 2007 2008 2009 0 2010 2011 2012 0 2013 2014 2015 0 2016 2017 2018 0 2019 2020 2021 0 2022 2023 2024 0 2025 2026 2027 0 2028 2029 2030 0 2031 2032 2033 0 2034 2035 2036 0 2037 2038 2039 0 2040 2041 2042 0 2043 2044 2045 0 2046 2047 2048 0 2049 2050 2051 0 2052 2053 2054 0 2055 2056 2057 0 2058 2059 2060 0 2061 2062 2063 0 2064 2065 2066 0 2067 2068 2069 0 2070 2071 2072 0 2073 2074 2075 0 2076 2077 2078 0 2079 2080 2081 0 2082 2083 2084 0 2085 2086 2087 0 2088 2089 2090 0 2091 2092 2093 0 2094 2095 2096 0 2097 2098 2099 0 2100 2101 2102 0 2103 2104 2105 0 2106 2107 2108 0 2109 2110 2111 0 2112 2113 2114 0 2115 2116 2117 0 2118 2119 2120 0 2121 2122 2123 0 2124 2125 2126 0 2127 2128 2129 0 2130 2131 2132 0 2133 2134 2135 0 2136 2137 2138 0 2139 2140 2141 0 2142 2143 2144 0 2145 2146 2147 0 2148 2149 2150 0 2151 2152 2153 0 2154 2155 2156 0 2157 2158 2159 0 2160 2161 2162 0 2163 2164 2165 0 2166 2167 2168 0 2169 2170 2171 0 2172 2173 2174 0 2175 2176 2177 0 2178 2179 2180 0 2181 2182 2183 0 2184 2185 2186 0 2187 2188 2189 0 2190 2191 2192 0 2193 2194 2195 0 2196 2197 2198 0 2199 2200 2201 0 2202 2203 2204 0 2205 2206 2207 0 2208 2209 2210 0 2211 2212 2213 0 2214 2215 2216 0 2217 2218 2219 0 2220 2221 2222 0 2223 2224 2225 0 2226 2227 2228 0 2229 2230 2231 0 2232 2233 2234 0 2235 2236 2237 0 2238 2239 2240 0 2241 2242 2243 0 2244 2245 2246 0 2247 2248 2249 0 2250 2251 2252 0 2253 2254 2255 0 2256 2257 2258 0 2259 2260 2261 0 2262 2263 2264 0 2265 2266 2267 0 2268 2269 2270 0 2271 2272 2273 0 2274 2275 2276 0 2277 2278 2279 0 2280 2281 2282 0 2283 2284 2285 0 2286 2287 2288 0 2289 2290 2291 0 2292 2293 2294 0 2295 2296 2297 0 2298 2299 2300 0 2301 2302 2303 0 2304 2305 2306 0 2307 2308 2309 0 2310 2311 2312 0 2313 2314 2315 0 2316 2317 2318 0 2319 2320 2321 0 2322 2323 2324 0 2325 2326 2327 0 2328 2329 2330 0 2331 2332 2333 0 2334 2335 2336 0 2337 2338 2339 0 2340 2341 2342 0 2343 2344 2345 0 2346 2347 2348 0 2349 2350 2351 0 2352 2353 2354 0 2355 2356 2357 0 2358 2359 2360 0 2361 2362 2363 0 2364 2365 2366 0 2367 2368 2369 0 2370 2371 2372 0 2373 2374 2375 0 2376 2377 2378 0 2379 2380 2381 0 2382 2383 2384 0 2385 2386 2387 0 2388 2389 2390 0 2391 2392 2393 0 2394 2395 2396 0 2397 2398 2399 0 2400 2401 2402 0 2403 2404 2405 0 2406 2407 2408 0 2409 2410 2411 0 2412 2413 2414 0 2415 2416 2417 0 2418 2419 2420 0 2421 2422 2423 0 2424 2425 2426 0 2427 2428 2429 0 2430 2431 2432 0 2433 2434 2435 0 2436 2437 2438 0 2439 2440 2441 0 2442 2443 2444 0 2445 2446 2447 0 2448 2449 2450 0 2451 2452 2453 0 2454 2455 2456 0 2457 2458 2459 0 2460 2461 2462 0 2463 2464 2465 0 2466 2467 2468 0 2469 2470 2471 0 2472 2473 2474 0 2475 2476 2477 0 2478 2479 2480 0 2481 2482 2483 0 2484 2485 2486 0 2487 2488 2489 0 2490 2491 2492 0 2493 2494 2495 0 2496 2497 2498 0 2499 2500 2501 0 2502 2503 2504 0 2505 2506 2507 0 2508 2509 2510 0 2511 2512 2513 0 2514 2515 2516 0 2517 2518 2519 0 2520 2521 2522 0 2523 2524 2525 0 2526 2527 2528 0 2529 2530 2531 0 2532 2533 2534 0 2535 2536 2537 0 2538 2539 2540 0 2541 2542 2543 0 2544 2545 2546 0 2547 2548 2549 0 2550 2551 2552 0 2553 2554 2555 0 2556 2557 2558 0 2559 2560 2561 0 2562 2563 2564 0 2565 2566 2567 0 2568 2569 2570 0 2571 2572 2573 0 2574 2575 2576 0 2577 2578 2579 0 2580 2581 2582 0 2583 2584 2585 0 2586 2587 2588 0 2589 2590 2591 0 2592 2593 2594 0 2595 2596 2597 0 2598 2599 2600 0 2601 2602 2603 0 2604 2605 2606 0 2607 2608 2609 0 2610 2611 2612 0 2613 2614 2615 0 2616 2617 2618 0 2619 2620 2621 0 2622 2623 2624 0 2625 2626 2627 0 2628 2629 2630 0 2631 2632 2633 0 2634 2635 2636 0 2637 2638 2639 0 2640 2641 2642 0 2643 2644 2645 0 2646 2647 2648 0 2649 2650 2651 0 2652 2653 2654 0 2655 2656 2657 0 2658 2659 2660 0 2661 2662 2663 0 2664 2665 2666 0 2667 2668 2669 0 2670 2671 2672 0 2673 2674 2675 0 2676 2677 2678 0 2679 2680 2681 0 2682 2683 2684 0 2685 2686 2687 0 2688 2689 2690 0 2691 2692 2693 0 2694 2695 2696 0 2697 2698 2699 0 2700 2701 2702 0 2703 2704 2705 0 2706 2707 2708 0 2709 2710 2711 0 2712 2713 2714 0 2715 2716 2717 0 2718 2719 2720 0 2721 2722 2723 0 2724 2725 2726 0 2727 2728 2729 0 2730 2731 2732 0 2733 2734 2735 0 2736 2737 2738 0 2739 2740 2741 0 2742 2743 2744 0 2745 2746 2747 0 2748 2749 2750 0 2751 2752 2753 0 2754 2755 2756 0 2757 2758 2759 0 2760 2761 2762 0 2763 2764 2765 0 2766 2767 2768 0 2769 2770 2771 0 2772 2773 2774 0 2775 2776 2777 0 2778 2779 2780 0 2781 2782 2783 0 2784 2785 2786 0 2787 2788 2789 0 2790 2791 2792 0 2793 2794 2795 0 2796 2797 2798 0 2799 2800 2801 0 2802 2803 2804 0 2805 2806 2807 0 2808 2809 2810 0 2811 2812 2813 0 2814 2815 2816 0 2817 2818 2819 0 2820 2821 2822 0 2823 2824 2825 0 2826 2827 2828 0 2829 2830 2831 0 2832 2833 2834 0 2835 2836 2837 0 2838 2839 2840 0 2841 2842 2843 0 2844 2845 2846 0 2847 2848 2849 0 2850 2851 2852 0 2853 2854 2855 0 2856 2857 2858 0 2859 2860 2861 0 2862 2863 2864 0 2865 2866 2867 0 2868 2869 2870 0 2871 2872 2873 0 2874 2875 2876 0 2877 2878 2879 0 2880 2881 2882 0 2883 2884 2885 0 2886 2887 2888 0 2889 2890 2891 0 2892 2893 2894 0 2895 2896 2897 0 2898 2899 2900 0 2901 2902 2903 0 2904 2905 2906 0 2907 2908 2909 0 2910 2911 2912 0 2913 2914 2915 0 2916 2917 2918 0 2919 2920 2921 0 2922 2923 2924 0 2925 2926 2927 0 2928 2929 2930 0 2931 2932 2933 0 2934 2935 2936 0 2937 2938 2939 0 2940 2941 2942 0 2943 2944 2945 0 2946 2947 2948 0 2949 2950 2951 0 2952 2953 2954 0 2955 2956 2957 0 2958 2959 2960 0 2961 2962 2963 0 2964 2965 2966 0 2967 2968 2969 0 2970 2971 2972 0 2973 2974 2975 0 2976 2977 2978 0 2979 2980 2981 0 2982 2983 2984 0 2985 2986 2987 0 2988 2989 2990 0 2991 2992 2993 0 2994 2995 2996 0 2997 2998 2999 0 3000 3001 3002 0 3003 3004 3005 0 3006 3007 3008 0 3009 3010 3011 0 3012 3013 3014 0 3015 3016 3017 0 3018 3019 3020 0 3021 3022 3023 0 3024 3025 3026 0 3027 3028 3029 0 3030 3031 3032 0 3033 3034 3035 0 3036 3037 3038 0 3039 3040 3041 0 3042 3043 3044 0 3045 3046 3047 0 3048 3049 3050 0 3051 3052 3053 0 3054 3055 3056 0 3057 3058 3059 0 3060 3061 3062 0 3063 3064 3065 0 3066 3067 3068 0 3069 3070 3071 0 3072 3073 3074 0 3075 3076 3077 0 3078 3079 3080 0 3081 3082 3083 0 3084 3085 3086 0 3087 3088 3089 0 3090 3091 3092 0 3093 3094 3095 0 3096 3097 3098 0 3099 3100 3101 0 3102 3103 3104 0 3105 3106 3107 0 3108 3109 3110 0 3111 3112 3113 0 3114 3115 3116 0 3117 3118 3119 0 3120 3121 3122 0 3123 3124 3125 0 3126 3127 3128 0 3129 3130 3131 0 3132 3133 3134 0 3135 3136 3137 0 3138 3139 3140 0 3141 3142 3143 0 3144 3145 3146 0 3147 3148 3149 0 3150 3151 3152 0 3153 3154 3155 0 3156 3157 3158 0 3159 3160 3161 0 3162 3163 3164 0 3165 3166 3167 0 3168 3169 3170 0 3171 3172 3173 0 3174 3175 3176 0 3177 3178 3179 0 3180 3181 3182 0 3183 3184 3185 0 3186 3187 3188 0 3189 3190 3191 0 3192 3193 3194 0 3195 3196 3197 0 3198 3199 3200 0 3201 3202 3203 0 3204 3205 3206 0 3207 3208 3209 0 3210 3211 3212 0 3213 3214 3215 0 3216 3217 3218 0 3219 3220 3221 0 3222 3223 3224 0 3225 3226 3227 0 3228 3229 3230 0 3231 3232 3233 0 3234 3235 3236 0 3237 3238 3239 0 3240 3241 3242 0 3243 3244 3245 0 3246 3247 3248 0 3249 3250 3251 0 3252 3253 3254 0 3255 3256 3257 0 3258 3259 3260 0 3261 3262 3263 0 3264 3265 3266 0 3267 3268 3269 0 3270 3271 3272 0 3273 3274 3275 0 3276 3277 3278 0 3279 3280 3281 0 3282 3283 3284 0 3285 3286 3287 0 3288 3289 3290 0 3291 3292 3293 0 3294 3295 3296 0 3297 3298 3299 0 3300 3301 3302 0 3303 3304 3305 0 3306 3307 3308 0 3309 3310 3311 0 3312 3313 3314 0 3315 3316 3317 0 3318 3319 3320 0 3321 3322 3323 0 3324 3325 3326 0 3327 3328 3329 0 3330 3331 3332 0 3333 3334 3335 0 3336 3337 3338 0 3339 3340 3341 0 3342 3343 3344 0 3345 3346 3347 0 3348 3349 3350 0 3351 3352 3353 0 3354 3355 3356 0 3357 3358 3359 0 3360 3361 3362 0 3363 3364 3365 0 3366 3367 3368 0 3369 3370 3371 0 3372 3373 3374 0 3375 3376 3377 0 3378 3379 3380 0 3381 3382 3383 0 3384 3385 3386 0 3387 3388 3389 0 3390 3391 3392 0 3393 3394 3395 0 3396 3397 3398 0 3399 3400 3401 0 3402 3403 3404 0 3405 3406 3407 0 3408 3409 3410 0 3411 3412 3413 0 3414 3415 3416 0 3417 3418 3419 0 3420 3421 3422 0 3423 3424 3425 0 3426 3427 3428 0 3429 3430 3431 0 3432 3433 3434 0 3435 3436 3437 0 3438 3439 3440 0 3441 3442 3443 0 3444 3445 3446 0 3447 3448 3449 0 3450 3451 3452 0 3453 3454 3455 0 3456 3457 3458 0 3459 3460 3461 0 3462 3463 3464 0 3465 3466 3467 0 3468 3469 3470 0 3471 3472 3473 0 3474 3475 3476 0 3477 3478 3479 0 3480 3481 3482 0 3483 3484 3485 0 3486 3487 3488 0 3489 3490 3491 0 3492 3493 3494 0 3495 3496 3497 0 3498 3499 3500 0 3501 3502 3503 0 3504 3505 3506 0 3507 3508 3509 0 3510 3511 3512 0 3513 3514 3515 0 3516 3517 3518 0 3519 3520 3521 0 3522 3523 3524 0 3525 3526 3527 0 3528 3529 3530 0 3531 3532 3533 0 3534 3535 3536 0 3537 3538 3539 0 3540 3541 3542 0 3543 3544 3545 0 3546 3547 3548 0 3549 3550 3551 0 3552 3553 3554 0 3555 3556 3557 0 3558 3559 3560 0 3561 3562 3563 0 3564 3565 3566 0 3567 3568 3569 0 3570 3571 3572 0 3573 3574 3575 0 3576 3577 3578 0 3579 3580 3581 0 3582 3583 3584 0 3585 3586 3587 0 3588 3589 3590 0 3591 3592 3593 0 3594 3595 3596 0 3597 3598 3599 0 3600 3601 3602 0 3603 3604 3605 0 3606 3607 3608 0 3609 3610 3611 0 3612 3613 3614 0 3615 3616 3617 0 3618 3619 3620 0 3621 3622 3623 0 3624 3625 3626 0 3627 3628 3629 0 3630 3631 3632 0 3633 3634 3635 0 3636 3637 3638 0 3639 3640 3641 0 3642 3643 3644 0 3645 3646 3647 0 3648 3649 3650 0 3651 3652 3653 0 3654 3655 3656 0 3657 3658 3659 0 3660 3661 3662 0 3663 3664 3665 0 3666 3667 3668 0 3669 3670 3671 0 3672 3673 3674 0 3675 3676 3677 0 3678 3679 3680 0 3681 3682 3683 0 3684 3685 3686 0 3687 3688 3689 0 3690 3691 3692 0 3693 3694 3695 0 3696 3697 3698 0 3699 3700 3701 0 3702 3703 3704 0 3705 3706 3707 0 3708 3709 3710 0 3711 3712 3713 0 3714 3715 3716 0 3717 3718 3719 0 3720 3721 3722 0 3723 3724 3725 0 3726 3727 3728 0 3729 3730 3731 0 3732 3733 3734 0 3735 3736 3737 0 3738 3739 3740 0 3741 3742 3743 0 3744 3745 3746 0 3747 3748 3749 0 3750 3751 3752 0 3753 3754 3755 0 3756 3757 3758 0 3759 3760 3761 0 3762 3763 3764 0 3765 3766 3767 0 3768 3769 3770 0 3771 3772 3773 0 3774 3775 3776 0 3777 3778 3779 0 3780 3781 3782 0 3783 3784 3785 0 3786 3787 3788 0 3789 3790 3791 0 3792 3793 3794 0 3795 3796 3797 0 3798 3799 3800 0 3801 3802 3803 0 3804 3805 3806 0 3807 3808 3809 0 3810 3811 3812 0 3813 3814 3815 0 3816 3817 3818 0 3819 3820 3821 0 3822 3823 3824 0 3825 3826 3827 0 3828 3829 3830 0 3831 3832 3833 0 3834 3835 3836 0 3837 3838 3839 0 3840 3841 3842 0 3843 3844 3845 0 3846 3847 3848 0 3849 3850 3851 0 3852 3853 3854 0 3855 3856 3857 0 3858 3859 3860 0 3861 3862 3863 0 3864 3865 3866 0 3867 3868 3869 0 3870 3871 3872 0 3873 3874 3875 0 3876 3877 3878 0 3879 3880 3881 0 3882 3883 3884 0 3885 3886 3887 0 3888 3889 3890 0 3891 3892 3893 0 3894 3895 3896 0 3897 3898 3899 0 3900 3901 3902 0 3903 3904 3905 0 3906 3907 3908 0 3909 3910 3911 0 3912 3913 3914 0 3915 3916 3917 0 3918 3919 3920 0 3921 3922 3923 0 3924 3925 3926 0 3927 3928 3929 0 3930 3931 3932 0 3933 3934 3935 0 3936 3937 3938 0 3939 3940 3941 0 3942 3943 3944 0 3945 3946 3947 0 3948 3949 3950 0 3951 3952 3953 0 3954 3955 3956 0 3957 3958 3959 0 3960 3961 3962 0 3963 3964 3965 0 3966 3967 3968 0 3969 3970 3971 0 3972 3973 3974 0 3975 3976 3977 0 3978 3979 3980 0 3981 3982 3983 0 3984 3985 3986 0 3987 3988 3989 0 3990 3991 3992 0 3993 3994 3995 0 3996 3997 3998 0 3999 4000 4001 0 4002 4003 4004 0 4005 4006 4007 0 4008 4009 4010 0 4011 4012 4013 0 4014 4015 4016 0 4017 4018 4019 0 4020 4021 4022 0 4023 4024 4025 0 4026 4027 4028 0 4029 4030 4031 0 4032 4033 4034 0 4035 4036 4037 0 4038 4039 4040 0 4041 4042 4043 0 4044 4045 4046 0 4047 4048 4049 0 4050 4051 4052 0 4053 4054 4055 0 4056 4057 4058 0 4059 4060 4061 0 4062 4063 4064 0 4065 4066 4067 0 4068 4069 4070 0 4071 4072 4073 0 4074 4075 4076 0 4077 4078 4079 0 4080 4081 4082 0 4083 4084 4085 0 4086 4087 4088 0 4089 4090 4091 0 4092 4093 4094 0 4095 4096 4097 0 4098 4099 4100 0 4101 4102 4103 0 4104 4105 4106 0 4107 4108 4109 0 4110 4111 4112 0 4113 4114 4115 0 4116 4117 4118 0 4119 4120 4121 0 4122 4123 4124 0 4125 4126 4127 0 4128 4129 4130 0 4131 4132 4133 0 4134 4135 4136 0 4137 4138 4139 0 4140 4141 4142 0 4143 4144 4145 0 4146 4147 4148 0 4149 4150 4151 0 4152 4153 4154 0 4155 4156 4157 0 4158 4159 4160 0 4161 4162 4163 0 4164 4165 4166 0 4167 4168 4169 0 4170 4171 4172 0 4173 4174 4175 0 4176 4177 4178 0 4179 4180 4181 0 4182 4183 4184 0 4185 4186 4187 0 4188 4189 4190 0 4191 4192 4193 0 4194 4195 4196 0 4197 4198 4199 0 4200 4201 4202 0 4203 4204 4205 0 4206 4207 4208 0 4209 4210 4211 0 4212 4213 4214 0 4215 4216 4217 0 4218 4219 4220 0 4221 4222 4223 0 4224 4225 4226 0 4227 4228 4229 0 4230 4231 4232 0 4233 4234 4235 0 4236 4237 4238 0 4239 4240 4241 0 4242 4243 4244 0 4245 4246 4247 0 4248 4249 4250 0 4251 4252 4253 0 4254 4255 4256 0 4257 4258 4259 0 4260 4261 4262 0 4263 4264 4265 0 4266 4267 4268 0 4269 4270 4271 0 4272 4273 4274 0 4275 4276 4277 0 4278 4279 4280 0 4281 4282 4283 0 4284 4285 4286 0 4287 4288 4289 0 4290 4291 4292 0 4293 4294 4295 0 4296 4297 4298 0 4299 4300 4301 0 4302 4303 4304 0 4305 4306 4307 0 4308 4309 4310 0 4311 4312 4313 0 4314 4315 4316 0 4317 4318 4319 0 4320 4321 4322 0 4323 4324 4325 0 4326 4327 4328 0 4329 4330 4331 0 4332 4333 4334 0 4335 4336 4337 0 4338 4339 4340 0 4341 4342 4343 0 4344 4345 4346 0 4347 4348 4349 0 4350 4351 4352 0 4353 4354 4355 0 4356 4357 4358 0 4359 4360 4361 0 4362 4363 4364 0 4365 4366 4367 0 4368 4369 4370 0 4371 4372 4373 0 4374 4375 4376 0 4377 4378 4379 0 4380 4381 4382 0 4383 4384 4385 0 4386 4387 4388 0 4389 4390 4391 0 4392 4393 4394 0 4395 4396 4397 0 4398 4399 4400 0 4401 4402 4403 0 4404 4405 4406 0 4407 4408 4409 0 4410 4411 4412 0 4413 4414 4415 0 4416 4417 4418 0 4419 4420 4421 0 4422 4423 4424 0 4425 4426 4427 0 4428 4429 4430 0 4431 4432 4433 0 4434 4435 4436 0 4437 4438 4439 0 4440 4441 4442 0 4443 4444 4445 0 4446 4447 4448 0 4449 4450 4451 0 4452 4453 4454 0 4455 4456 4457 0 4458 4459 4460 0 4461 4462 4463 0 4464 4465 4466 0 4467 4468 4469 0 4470 4471 4472 0 4473 4474 4475 0 4476 4477 4478 0 4479 4480 4481 0 4482 4483 4484 0 4485 4486 4487 0 4488 4489 4490 0 4491 4492 4493 0 4494 4495 4496 0 4497 4498 4499 0 4500 4501 4502 0 4503 4504 4505 0 4506 4507 4508 0 4509 4510 4511 0 4512 4513 4514 0 4515 4516 4517 0 4518 4519 4520 0 4521 4522 4523 0 4524 4525 4526 0 4527 4528 4529 0 4530 4531 4532 0 4533 4534 4535 0 4536 4537 4538 0 4539 4540 4541 0 4542 4543 4544 0 4545 4546 4547 0 4548 4549 4550 0 4551 4552 4553 0 4554 4555 4556 0 4557 4558 4559 0 4560 4561 4562 0 4563 4564 4565 0 4566 4567 4568 0 4569 4570 4571 0 4572 4573 4574 0 4575 4576 4577 0 4578 4579 4580 0 4581 4582 4583 0 4584 4585 4586 0 4587 4588 4589 0 4590 4591 4592 0 4593 4594 4595 0 4596 4597 4598 0 4599 4600 4601 0 4602 4603 4604 0 4605 4606 4607 0 4608 4609 4610 0 4611 4612 4613 0 4614 4615 4616 0 4617 4618 4619 0 4620 4621 4622 0 4623 4624 4625 0 4626 4627 4628 0 4629 4630 4631 0 4632 4633 4634 0 4635 4636 4637 0 4638 4639 4640 0 4641 4642 4643 0 4644 4645 4646 0 4647 4648 4649 0 4650 4651 4652 0 4653 4654 4655 0 4656 4657 4658 0 4659 4660 4661 0 4662 4663 4664 0 4665 4666 4667 0 4668 4669 4670 0 4671 4672 4673 0 4674 4675 4676 0 4677 4678 4679 0 4680 4681 4682 0 4683 4684 4685 0 4686 4687 4688 0 4689 4690 4691 0 4692 4693 4694 0 4695 4696 4697 0 4698 4699 4700 0 4701 4702 4703 0 4704 4705 4706 0 4707 4708 4709 0 4710 4711 4712 0 4713 4714 4715 0 4716 4717 4718 0 4719 4720 4721 0 4722 4723 4724 0 4725 4726 4727 0 4728 4729 4730 0 4731 4732 4733 0 4734 4735 4736 0 4737 4738 4739 0 4740 4741 4742 0 4743 4744 4745 0 4746 4747 4748 0 4749 4750 4751 0 4752 4753 4754 0 4755 4756 4757 0 4758 4759 4760 0 4761 4762 4763 0 4764 4765 4766 0 4767 4768 4769 0 4770 4771 4772 0 4773 4774 4775 0 4776 4777 4778 0 4779 4780 4781 0 4782 4783 4784 0 4785 4786 4787 0 4788 4789 4790 0 4791 4792 4793 0 4794 4795 4796 0 4797 4798 4799 0 4800 4801 4802 0 4803 4804 4805 0 4806 4807 4808 0 4809 4810 4811 0 4812 4813 4814 0 4815 4816 4817 0 4818 4819 4820 0 4821 4822 4823 0 4824 4825 4826 0 4827 4828 4829 0 4830 4831 4832 0 4833 4834 4835 0 4836 4837 4838 0 4839 4840 4841 0 4842 4843 4844 0 4845 4846 4847 0 4848 4849 4850 0 4851 4852 4853 0 4854 4855 4856 0 4857 4858 4859 0 4860 4861 4862 0 4863 4864 4865 0 4866 4867 4868 0 4869 4870 4871 0 4872 4873 4874 0 4875 4876 4877 0 4878 4879 4880 0 4881 4882 4883 0 4884 4885 4886 0 4887 4888 4889 0 4890 4891 4892 0 4893 4894 4895 0 4896 4897 4898 0 4899 4900 4901 0 4902 4903 4904 0 4905 4906 4907 0 4908 4909 4910 0 4911 4912 4913 0 4914 4915 4916 0 4917 4918 4919 0 4920 4921 4922 0 4923 4924 4925 0 4926 4927 4928 0 4929 4930 4931 0 4932 4933 4934 0 4935 4936 4937 0 4938 4939 4940 0 4941 4942 4943 0 4944 4945 4946 0 4947 4948 4949 0 4950 4951 4952 0 4953 4954 4955 0 4956 4957 4958 0 4959 4960 4961 0 4962 4963 4964 0 4965 4966 4967 0 4968 4969 4970 0 4971 4972 4973 0 4974 4975 4976 0 4977 4978 4979 0 4980 4981 4982 0 4983 4984 4985 0 4986 4987 4988 0 4989 4990 4991 0 4992 4993 4994 0 4995 4996 4997 0 4998 4999 5000 0 5001 5002 5003 0 5004 5005 5006 0 5007 5008 5009 0 5010 5011 5012 0 5013 5014 5015 0 5016 5017 5018 0 5019 5020 5021 0 5022 5023 5024 0 5025 5026 5027 0 5028 5029 5030 0 5031 5032 5033 0 5034 5035 5036 0 5037 5038 5039 0 5040 5041 5042 0 5043 5044 5045 0 5046 5047 5048 0 5049 5050 5051 0 5052 5053 5054 0 5055 5056 5057 0 5058 5059 5060 0 5061 5062 5063 0 5064 5065 5066 0 5067 5068 5069 0 5070 5071 5072 0 5073 5074 5075 0 5076 5077 5078 0 5079 5080 5081 0 5082 5083 5084 0 5085 5086 5087 0 5088 5089 5090 0 5091 5092 5093 0 5094 5095 5096 0 5097 5098 5099 0 5100 5101 5102 0 5103 5104 5105 0 5106 5107 5108 0 5109 5110 5111 0 5112 5113 5114 0 5115 5116 5117 0 5118 5119 5120 0 5121 5122 5123 0 5124 5125 5126 0 5127 5128 5129 0 5130 5131 5132 0 5133 5134 5135 0 5136 5137 5138 0 5139 5140 5141 0 5142 5143 5144 0 5145 5146 5147 0 5148 5149 5150 0 5151 5152 5153 0 5154 5155 5156 0 5157 5158 5159 0 5160 5161 5162 0 5163 5164 5165 0 5166 5167 5168 0 5169 5170 5171 0 5172 5173 5174 0 5175 5176 5177 0 5178 5179 5180 0 5181 5182 5183 0 5184 5185 5186 0 5187 5188 5189 0 5190 5191 5192 0 5193 5194 5195 0 5196 5197 5198 0 5199 5200 5201 0 5202 5203 5204 0 5205 5206 5207 0 5208 5209 5210 0 5211 5212 5213 0 5214 5215 5216 0 5217 5218 5219 0 5220 5221 5222 0 5223 5224 5225 0 5226 5227 5228 0 5229 5230 5231 0 5232 5233 5234 0 5235 5236 5237 0 5238 5239 5240 0 5241 5242 5243 0 5244 5245 5246 0 5247 5248 5249 0 5250 5251 5252 0 5253 5254 5255 0 5256 5257 5258 0 5259 5260 5261 0 5262 5263 5264 0 5265 5266 5267 0 5268 5269 5270 0 5271 5272 5273 0 5274 5275 5276 0 5277 5278 5279 0 5280 5281 5282 0 5283 5284 5285 0 5286 5287 5288 0 5289 5290 5291 0 5292 5293 5294 0 5295 5296 5297 0 5298 5299 5300 0 5301 5302 5303 0 5304 5305 5306 0 5307 5308 5309 0 5310 5311 5312 0 5313 5314 5315 0 5316 5317 5318 0 5319 5320 5321 0 5322 5323 5324 0 5325 5326 5327 0 5328 5329 5330 0 5331 5332 5333 0 5334 5335 5336 0 5337 5338 5339 0 5340 5341 5342 0 5343 5344 5345 0 5346 5347 5348 0 5349 5350 5351 0 5352 5353 5354 0 5355 5356 5357 0 5358 5359 5360 0 5361 5362 5363 0 5364 5365 5366 0 5367 5368 5369 0 5370 5371 5372 0 5373 5374 5375 0 5376 5377 5378 0 5379 5380 5381 0 5382 5383 5384 0 5385 5386 5387 0 5388 5389 5390 0 5391 5392 5393 0 5394 5395 5396 0 5397 5398 5399 0 5400 5401 5402 0 5403 5404 5405 0 5406 5407 5408 0 5409 5410 5411 0 5412 5413 5414 0 5415 5416 5417 0 5418 5419 5420 0 5421 5422 5423 0 5424 5425 5426 0 5427 5428 5429 0 5430 5431 5432 0 5433 5434 5435 0 5436 5437 5438 0 5439 5440 5441 0 5442 5443 5444 0 5445 5446 5447 0 5448 5449 5450 0 5451 5452 5453 0 5454 5455 5456 0 5457 5458 5459 0 5460 5461 5462 0 5463 5464 5465 0 5466 5467 5468 0 5469 5470 5471 0 5472 5473 5474 0 5475 5476 5477 0 5478 5479 5480 0 5481 5482 5483 0 5484 5485 5486 0 5487 5488 5489 0 5490 5491 5492 0 5493 5494 5495 0 5496 5497 5498 0 5499 5500 5501 0 5502 5503 5504 0 5505 5506 5507 0 5508 5509 5510 0 5511 5512 5513 0 5514 5515 5516 0 5517 5518 5519 0 5520 5521 5522 0 5523 5524 5525 0 5526 5527 5528 0 5529 5530 5531 0 5532 5533 5534 0 5535 5536 5537 0 5538 5539 5540 0 5541 5542 5543 0 5544 5545 5546 0 5547 5548 5549 0 5550 5551 5552 0 5553 5554 5555 0 5556 5557 5558 0 5559 5560 5561 0 5562 5563 5564 0 5565 5566 5567 0 5568 5569 5570 0 5571 5572 5573 0 5574 5575 5576 0 5577 5578 5579 0 5580 5581 5582 0 5583 5584 5585 0 5586 5587 5588 0 5589 5590 5591 0 5592 5593 5594 0 5595 5596 5597 0 5598 5599 5600 0 5601 5602 5603 0 5604 5605 5606 0 5607 5608 5609 0 5610 5611 5612 0 5613 5614 5615 0 5616 5617 5618 0 5619 5620 5621 0 5622 5623 5624 0 5625 5626 5627 0 5628 5629 5630 0 5631 5632 5633 0 5634 5635 5636 0 5637 5638 5639 0 5640 5641 5642 0 5643 5644 5645 0 5646 5647 5648 0 5649 5650 5651 0 5652 5653 5654 0 5655 5656 5657 0 5658 5659 5660 0 5661 5662 5663 0 5664 5665 5666 0 5667 5668 5669 0 5670 5671 5672 0 5673 5674 5675 0 5676 5677 5678 0 5679 5680 5681 0 5682 5683 5684 0 5685 5686 5687 0 5688 5689 5690 0 5691 5692 5693 0 5694 5695 5696 0 5697 5698 5699 0 5700 5701 5702 0 5703 5704 5705 0 5706 5707 5708 0 5709 5710 5711 0 5712 5713 5714 0 5715 5716 5717 0 5718 5719 5720 0 5721 5722 5723 0 5724 5725 5726 0 5727 5728 5729 0 5730 5731 5732 0 5733 5734 5735 0 5736 5737 5738 0 5739 5740 5741 0 5742 5743 5744 0 5745 5746 5747 0 5748 5749 5750 0 5751 5752 5753 0 5754 5755 5756 0 5757 5758 5759 0 5760 5761 5762 0 5763 5764 5765 0 5766 5767 5768 0 5769 5770 5771 0 5772 5773 5774 0 5775 5776 5777 0 5778 5779 5780 0 5781 5782 5783 0 5784 5785 5786 0 5787 5788 5789 0 5790 5791 5792 0 5793 5794 5795 0 5796 5797 5798 0 5799 5800 5801 0 5802 5803 5804 0 5805 5806 5807 0 5808 5809 5810 0 5811 5812 5813 0 5814 5815 5816 0 5817 5818 5819 0 5820 5821 5822 0 5823 5824 5825 0 5826 5827 5828 0 5829 5830 5831 0 5832 5833 5834 0 5835 5836 5837 0 5838 5839 5840 0 5841 5842 5843 0 5844 5845 5846 0 5847 5848 5849 0 5850 5851 5852 0 5853 5854 5855 0 5856 5857 5858 0 5859 5860 5861 0 5862 5863 5864 0 5865 5866 5867 0 5868 5869 5870 0 5871 5872 5873 0 5874 5875 5876 0 5877 5878 5879 0 5880 5881 5882 0 5883 5884 5885 0 5886 5887 5888 0 5889 5890 5891 0 5892 5893 5894 0 5895 5896 5897 0 5898 5899 5900 0 5901 5902 5903 0 5904 5905 5906 0 5907 5908 5909 0 5910 5911 5912 0 5913 5914 5915 0 5916 5917 5918 0 5919 5920 5921 0 5922 5923 5924 0 5925 5926 5927 0 5928 5929 5930 0 5931 5932 5933 0 5934 5935 5936 0 5937 5938 5939 0 5940 5941 5942 0 5943 5944 5945 0 5946 5947 5948 0 5949 5950 5951 0 5952 5953 5954 0 5955 5956 5957 0 5958 5959 5960 0 5961 5962 5963 0 5964 5965 5966 0 5967 5968 5969 0 5970 5971 5972 0 5973 5974 5975 0 5976 5977 5978 0 5979 5980 5981 0 5982 5983 5984 0 5985 5986 5987 0 5988 5989 5990 0 5991 5992 5993 0 5994 5995 5996 0 5997 5998 5999 0 6000 6001 6002 0 6003 6004 6005 0 6006 6007 6008 0 6009 6010 6011 0 6012 6013 6014 0 6015 6016 6017 0 6018 6019 6020 0 6021 6022 6023 0 6024 6025 6026 0 6027 6028 6029 0 6030 6031 6032 0 6033 6034 6035 0 6036 6037 6038 0 6039 6040 6041 0 6042 6043 6044 0 6045 6046 6047 0 6048 6049 6050 0 6051 6052 6053 0 6054 6055 6056 0 6057 6058 6059 0 6060 6061 6062 0 6063 6064 6065 0 6066 6067 6068 0 6069 6070 6071 0 6072 6073 6074 0 6075 6076 6077 0 6078 6079 6080 0 6081 6082 6083 0 6084 6085 6086 0 6087 6088 6089 0 6090 6091 6092 0 6093 6094 6095 0 6096 6097 6098 0 6099 6100 6101 0 6102 6103 6104 0 6105 6106 6107 0 6108 6109 6110 0 6111 6112 6113 0 6114 6115 6116 0 6117 6118 6119 0 6120 6121 6122 0 6123 6124 6125 0 6126 6127 6128 0 6129 6130 6131 0 6132 6133 6134 0 6135 6136 6137 0 6138 6139 6140 0 6141 6142 6143 0 6144 6145 6146 0 6147 6148 6149 0 6150 6151 6152 0 6153 6154 6155 0 6156 6157 6158 0 6159 6160 6161 0 6162 6163 6164 0 6165 6166 6167 0 6168 6169 6170 0 6171 6172 6173 0 6174 6175 6176 0 6177 6178 6179 0 6180 6181 6182 0 6183 6184 6185 0 6186 6187 6188 0 6189 6190 6191 0 6192 6193 6194 0 6195 6196 6197 0 6198 6199 6200 0 6201 6202 6203 0 6204 6205 6206 0 6207 6208 6209 0 6210 6211 6212 0 6213 6214 6215 0 6216 6217 6218 0 6219 6220 6221 0 6222 6223 6224 0 6225 6226 6227 0 6228 6229 6230 0 6231 6232 6233 0 6234 6235 6236 0 6237 6238 6239 0 6240 6241 6242 0 6243 6244 6245 0 6246 6247 6248 0 6249 6250 6251 0 6252 6253 6254 0 6255 6256 6257 0 6258 6259 6260 0 6261 6262 6263 0 6264 6265 6266 0 6267 6268 6269 0 6270 6271 6272 0 6273 6274 6275 0 6276 6277 6278 0 6279 6280 6281 0 6282 6283 6284 0 6285 6286 6287 0 6288 6289 6290 0 6291 6292 6293 0 6294 6295 6296 0 6297 6298 6299 0 6300 6301 6302 0 6303 6304 6305 0 6306 6307 6308 0 6309 6310 6311 0 6312 6313 6314 0 6315 6316 6317 0 6318 6319 6320 0 6321 6322 6323 0 6324 6325 6326 0 6327 6328 6329 0 6330 6331 6332 0 6333 6334 6335 0 6336 6337 6338 0 6339 6340 6341 0 6342 6343 6344 0 6345 6346 6347 0 6348 6349 6350 0 6351 6352 6353 0 6354 6355 6356 0 6357 6358 6359 0 6360 6361 6362 0 6363 6364 6365 0 6366 6367 6368 0 6369 6370 6371 0 6372 6373 6374 0 6375 6376 6377 0 6378 6379 6380 0 6381 6382 6383 0 6384 6385 6386 0 6387 6388 6389 0 6390 6391 6392 0 6393 6394 6395 0 6396 6397 6398 0 6399 6400 6401 0 6402 6403 6404 0 6405 6406 6407 0 6408 6409 6410 0 6411 6412 6413 0 6414 6415 6416 0 6417 6418 6419 0 6420 6421 6422 0 6423 6424 6425 0 6426 6427 6428 0 6429 6430 6431 0 6432 6433 6434 0 6435 6436 6437 0 6438 6439 6440 0 6441 6442 6443 0 6444 6445 6446 0 6447 6448 6449 0 6450 6451 6452 0 6453 6454 6455 0 6456 6457 6458 0 6459 6460 6461 0 6462 6463 6464 0 6465 6466 6467 0 6468 6469 6470 0 6471 6472 6473 0 6474 6475 6476 0 6477 6478 6479 0 6480 6481 6482 0 6483 6484 6485 0 6486 6487 6488 0 6489 6490 6491 0 6492 6493 6494 0 6495 6496 6497 0 6498 6499 6500 0 6501 6502 6503 0 6504 6505 6506 0 6507 6508 6509 0 6510 6511 6512 0 6513 6514 6515 0 6516 6517 6518 0 6519 6520 6521 0 6522 6523 6524 0 6525 6526 6527 0 6528 6529 6530 0 6531 6532 6533 0 6534 6535 6536 0 6537 6538 6539 0 6540 6541 6542 0 6543 6544 6545 0 6546 6547 6548 0 6549 6550 6551 0 6552 6553 6554 0 6555 6556 6557 0 6558 6559 6560 0 6561 6562 6563 0 6564 6565 6566 0 6567 6568 6569 0 6570 6571 6572 0 6573 6574 6575 0 6576 6577 6578 0 6579 6580 6581 0 6582 6583 6584 0 6585 6586 6587 0 6588 6589 6590 0 6591 6592 6593 0 6594 6595 6596 0 6597 6598 6599 0 6600 6601 6602 0 6603 6604 6605 0 6606 6607 6608 0 6609 6610 6611 0 6612 6613 6614 0 6615 6616 6617 0 6618 6619 6620 0 6621 6622 6623 0 6624 6625 6626 0 6627 6628 6629 0 6630 6631 6632 0 6633 6634 6635 0 6636 6637 6638 0 6639 6640 6641 0 6642 6643 6644 0 6645 6646 6647 0 6648 6649 6650 0 6651 6652 6653 0 6654 6655 6656 0 6657 6658 6659 0 6660 6661 6662 0 6663 6664 6665 0 6666 6667 6668 0 6669 6670 6671 0 6672 6673 6674 0 6675 6676 6677 0 6678 6679 6680 0 6681 6682 6683 0 6684 6685 6686 0 6687 6688 6689 0 6690 6691 6692 0 6693 6694 6695 0 6696 6697 6698 0 6699 6700 6701 0 6702 6703 6704 0 6705 6706 6707 0 6708 6709 6710 0 6711 6712 6713 0 6714 6715 6716 0 6717 6718 6719 0 6720 6721 6722 0 6723 6724 6725 0 6726 6727 6728 0 6729 6730 6731 0 6732 6733 6734 0 6735 6736 6737 0 6738 6739 6740 0 6741 6742 6743 0 6744 6745 6746 0 6747 6748 6749 0 6750 6751 6752 0 6753 6754 6755 0 6756 6757 6758 0 6759 6760 6761 0 6762 6763 6764 0 6765 6766 6767 0 6768 6769 6770 0 6771 6772 6773 0 6774 6775 6776 0 6777 6778 6779 0 6780 6781 6782 0 6783 6784 6785 0 6786 6787 6788 0 6789 6790 6791 0 6792 6793 6794 0 6795 6796 6797 0 6798 6799 6800 0 6801 6802 6803 0 6804 6805 6806 0 6807 6808 6809 0 6810 6811 6812 0 6813 6814 6815 0 6816 6817 6818 0 6819 6820 6821 0 6822 6823 6824 0 6825 6826 6827 0 6828 6829 6830 0 6831 6832 6833 0 6834 6835 6836 0 6837 6838 6839 0 6840 6841 6842 0 6843 6844 6845 0 6846 6847 6848 0 6849 6850 6851 0 6852 6853 6854 0 6855 6856 6857 0 6858 6859 6860 0 6861 6862 6863 0 6864 6865 6866 0 6867 6868 6869 0 6870 6871 6872 0 6873 6874 6875 0 6876 6877 6878 0 6879 6880 6881 0 6882 6883 6884 0 6885 6886 6887 0 6888 6889 6890 0 6891 6892 6893 0 6894 6895 6896 0 6897 6898 6899 0 6900 6901 6902 0 6903 6904 6905 0 6906 6907 6908 0 6909 6910 6911 0 6912 6913 6914 0 6915 6916 6917 0 6918 6919 6920 0 6921 6922 6923 0 6924 6925 6926 0 6927 6928 6929 0 6930 6931 6932 0 6933 6934 6935 0 6936 6937 6938 0 6939 6940 6941 0 6942 6943 6944 0 6945 6946 6947 0 6948 6949 6950 0 6951 6952 6953 0 6954 6955 6956 0 6957 6958 6959 0 6960 6961 6962 0 6963 6964 6965 0 6966 6967 6968 0 6969 6970 6971 0 6972 6973 6974 0 6975 6976 6977 0 6978 6979 6980 0 6981 6982 6983 0 6984 6985 6986 0 6987 6988 6989 0 6990 6991 6992 0 6993 6994 6995 0 6996 6997 6998 0 6999 7000 7001 0 7002 7003 7004 0 7005 7006 7007 0 7008 7009 7010 0 7011 7012 7013 0 7014 7015 7016 0 7017 7018 7019 0 7020 7021 7022 0 7023 7024 7025 0 7026 7027 7028 0 7029 7030 7031 0 7032 7033 7034 0 7035 7036 7037 0 7038 7039 7040 0 7041 7042 7043 0 7044 7045 7046 0 7047 7048 7049 0 7050 7051 7052 0 7053 7054 7055 0 7056 7057 7058 0 7059 7060 7061 0 7062 7063 7064 0 7065 7066 7067 0 7068 7069 7070 0 7071 7072 7073 0 7074 7075 7076 0 7077 7078 7079 0 7080 7081 7082 0 7083 7084 7085 0 7086 7087 7088 0 7089 7090 7091 0 7092 7093 7094 0 7095 7096 7097 0 7098 7099 7100 0 7101 7102 7103 0 7104 7105 7106 0 7107 7108 7109 0 7110 7111 7112 0 7113 7114 7115 0 7116 7117 7118 0 7119 7120 7121 0 7122 7123 7124 0 7125 7126 7127 0 7128 7129 7130 0 7131 7132 7133 0 7134 7135 7136 0 7137 7138 7139 0 7140 7141 7142 0 7143 7144 7145 0 7146 7147 7148 0 7149 7150 7151 0 7152 7153 7154 0 7155 7156 7157 0 7158 7159 7160 0 7161 7162 7163 0 7164 7165 7166 0 7167 7168 7169 0 7170 7171 7172 0 7173 7174 7175 0 7176 7177 7178 0 7179 7180 7181 0 7182 7183 7184 0 7185 7186 7187 0 7188 7189 7190 0 7191 7192 7193 0 7194 7195 7196 0 7197 7198 7199 0 7200 7201 7202 0 7203 7204 7205 0 7206 7207 7208 0 7209 7210 7211 0 7212 7213 7214 0 7215 7216 7217 0 7218 7219 7220 0 7221 7222 7223 0 7224 7225 7226 0 7227 7228 7229 0 7230 7231 7232 0 7233 7234 7235 0 7236 7237 7238 0 7239 7240 7241 0 7242 7243 7244 0 7245 7246 7247 0 7248 7249 7250 0 7251 7252 7253 0 7254 7255 7256 0 7257 7258 7259 0 7260 7261 7262 0 7263 7264 7265 0 7266 7267 7268 0 7269 7270 7271 0 7272 7273 7274 0 7275 7276 7277 0 7278 7279 7280 0 7281 7282 7283 0 7284 7285 7286 0 7287 7288 7289 0 7290 7291 7292 0 7293 7294 7295 0 7296 7297 7298 0 7299 7300 7301 0 7302 7303 7304 0 7305 7306 7307 0 7308 7309 7310 0 7311 7312 7313 0 7314 7315 7316 0 7317 7318 7319 0 7320 7321 7322 0 7323 7324 7325 0 7326 7327 7328 0 7329 7330 7331 0 7332 7333 7334 0 7335 7336 7337 0 7338 7339 7340 0 7341 7342 7343 0 7344 7345 7346 0 7347 7348 7349 0 7350 7351 7352 0 7353 7354 7355 0 7356 7357 7358 0 7359 7360 7361 0 7362 7363 7364 0 7365 7366 7367 0 7368 7369 7370 0 7371 7372 7373 0 7374 7375 7376 0 7377 7378 7379 0 7380 7381 7382 0 7383 7384 7385 0 7386 7387 7388 0 7389 7390 7391 0 7392 7393 7394 0 7395 7396 7397 0 7398 7399 7400 0 7401 7402 7403 0 7404 7405 7406 0 7407 7408 7409 0 7410 7411 7412 0 7413 7414 7415 0 7416 7417 7418 0 7419 7420 7421 0 7422 7423 7424 0 7425 7426 7427 0 7428 7429 7430 0 7431 7432 7433 0 7434 7435 7436 0 7437 7438 7439 0 7440 7441 7442 0 7443 7444 7445 0 7446 7447 7448 0 7449 7450 7451 0 7452 7453 7454 0 7455 7456 7457 0 7458 7459 7460 0 7461 7462 7463 0 7464 7465 7466 0 7467 7468 7469 0 7470 7471 7472 0 7473 7474 7475 0 7476 7477 7478 0 7479 7480 7481 0 7482 7483 7484 0 7485 7486 7487 0 7488 7489 7490 0 7491 7492 7493 0 7494 7495 7496 0 7497 7498 7499 0 7500 7501 7502 0 7503 7504 7505 0 7506 7507 7508 0 7509 7510 7511 0 7512 7513 7514 0 7515 7516 7517 0 7518 7519 7520 0 7521 7522 7523 0 7524 7525 7526 0 7527 7528 7529 0 7530 7531 7532 0 7533 7534 7535 0 7536 7537 7538 0 7539 7540 7541 0 7542 7543 7544 0 7545 7546 7547 0 7548 7549 7550 0 7551 7552 7553 0 7554 7555 7556 0 7557 7558 7559 0 7560 7561 7562 0 7563 7564 7565 0 7566 7567 7568 0 7569 7570 7571 0 7572 7573 7574 0 7575 7576 7577 0 7578 7579 7580 0 7581 7582 7583 0 7584 7585 7586 0 7587 7588 7589 0 7590 7591 7592 0 7593 7594 7595 0 7596 7597 7598 0 7599 7600 7601 0 7602 7603 7604 0 7605 7606 7607 0 7608 7609 7610 0 7611 7612 7613 0 7614 7615 7616 0 7617 7618 7619 0 7620 7621 7622 0 7623 7624 7625 0 7626 7627 7628 0 7629 7630 7631 0 7632 7633 7634 0 7635 7636 7637 0 7638 7639 7640 0 7641 7642 7643 0 7644 7645 7646 0 7647 7648 7649 0 7650 7651 7652 0 7653 7654 7655 0 7656 7657 7658 0 7659 7660 7661 0 7662 7663 7664 0 7665 7666 7667 0 7668 7669 7670 0 7671 7672 7673 0 7674 7675 7676 0 7677 7678 7679 0 7680 7681 7682 0 7683 7684 7685 0 7686 7687 7688 0 7689 7690 7691 0 7692 7693 7694 0 7695 7696 7697 0 7698 7699 7700 0 7701 7702 7703 0 7704 7705 7706 0 7707 7708 7709 0 7710 7711 7712 0 7713 7714 7715 0 7716 7717 7718 0 7719 7720 7721 0 7722 7723 7724 0 7725 7726 7727 0 7728 7729 7730 0 7731 7732 7733 0 7734 7735 7736 0 7737 7738 7739 0 7740 7741 7742 0 7743 7744 7745 0 7746 7747 7748 0 7749 7750 7751 0 7752 7753 7754 0 7755 7756 7757 0 7758 7759 7760 0 7761 7762 7763 0 7764 7765 7766 0 7767 7768 7769 0 7770 7771 7772 0 7773 7774 7775 0 7776 7777 7778 0 7779 7780 7781 0 7782 7783 7784 0 7785 7786 7787 0 7788 7789 7790 0 7791 7792 7793 0 7794 7795 7796 0 7797 7798 7799 0 7800 7801 7802 0 7803 7804 7805 0 7806 7807 7808 0 7809 7810 7811 0 7812 7813 7814 0 7815 7816 7817 0 7818 7819 7820 0 7821 7822 7823 0 7824 7825 7826 0 7827 7828 7829 0 7830 7831 7832 0 7833 7834 7835 0 7836 7837 7838 0 7839 7840 7841 0 7842 7843 7844 0 7845 7846 7847 0 7848 7849 7850 0 7851 7852 7853 0 7854 7855 7856 0 7857 7858 7859 0 7860 7861 7862 0 7863 7864 7865 0 7866 7867 7868 0 7869 7870 7871 0 7872 7873 7874 0 7875 7876 7877 0 7878 7879 7880 0 7881 7882 7883 0 7884 7885 7886 0 7887 7888 7889 0 7890 7891 7892 0 7893 7894 7895 0 7896 7897 7898 0 7899 7900 7901 0 7902 7903 7904 0 7905 7906 7907 0 7908 7909 7910 0 7911 7912 7913 0 7914 7915 7916 0 7917 7918 7919 0 7920 7921 7922 0 7923 7924 7925 0 7926 7927 7928 0 7929 7930 7931 0 7932 7933 7934 0 7935 7936 7937 0 7938 7939 7940 0 7941 7942 7943 0 7944 7945 7946 0 7947 7948 7949 0 7950 7951 7952 0 7953 7954 7955 0 7956 7957 7958 0 7959 7960 7961 0 7962 7963 7964 0 7965 7966 7967 0 7968 7969 7970 0 7971 7972 7973 0 7974 7975 7976 0 7977 7978 7979 0 7980 7981 7982 0 7983 7984 7985 0 7986 7987 7988 0 7989 7990 7991 0 7992 7993 7994 0 7995 7996 7997 0 7998 7999 8000 0 8001 8002 8003 0 8004 8005 8006 0 8007 8008 8009 0 8010 8011 8012 0 8013 8014 8015 0 8016 8017 8018 0 8019 8020 8021 0 8022 8023 8024 0 8025 8026 8027 0 8028 8029 8030 0 8031 8032 8033 0 8034 8035 8036 0 8037 8038 8039 0 8040 8041 8042 0 8043 8044 8045 0 8046 8047 8048 0 8049 8050 8051 0 8052 8053 8054 0 8055 8056 8057 0 8058 8059 8060 0 8061 8062 8063 0 8064 8065 8066 0 8067 8068 8069 0 8070 8071 8072 0 8073 8074 8075 0 8076 8077 8078 0 8079 8080 8081 0 8082 8083 8084 0 8085 8086 8087 0 8088 8089 8090 0 8091 8092 8093 0 8094 8095 8096 0 8097 8098 8099 0 8100 8101 8102 0 8103 8104 8105 0 8106 8107 8108 0 8109 8110 8111 0 8112 8113 8114 0 8115 8116 8117 0 8118 8119 8120 0 8121 8122 8123 0 8124 8125 8126 0 8127 8128 8129 0 8130 8131 8132 0 8133 8134 8135 0 8136 8137 8138 0 8139 8140 8141 0 8142 8143 8144 0 8145 8146 8147 0 8148 8149 8150 0 8151 8152 8153 0 8154 8155 8156 0 8157 8158 8159 0 8160 8161 8162 0 8163 8164 8165 0 8166 8167 8168 0 8169 8170 8171 0 8172 8173 8174 0 8175 8176 8177 0 8178 8179 8180 0 8181 8182 8183 0 8184 8185 8186 0 8187 8188 8189 0 8190 8191 8192 0 8193 8194 8195 0 8196 8197 8198 0 8199 8200 8201 0 8202 8203 8204 0 8205 8206 8207 0 8208 8209 8210 0 8211 8212 8213 0 8214 8215 8216 0 8217 8218 8219 0 8220 8221 8222 0 8223 8224 8225 0 8226 8227 8228 0 8229 8230 8231 0 8232 8233 8234 0 8235 8236 8237 0 8238 8239 8240 0 8241 8242 8243 0 8244 8245 8246 0 8247 8248 8249 0 8250 8251 8252 0 8253 8254 8255 0 8256 8257 8258 0 8259 8260 8261 0 8262 8263 8264 0 8265 8266 8267 0 8268 8269 8270 0 8271 8272 8273 0 8274 8275 8276 0 8277 8278 8279 0 8280 8281 8282 0 8283 8284 8285 0 8286 8287 8288 0 8289 8290 8291 0 8292 8293 8294 0 8295 8296 8297 0 8298 8299 8300 0 8301 8302 8303 0 8304 8305 8306 0 8307 8308 8309 0 8310 8311 8312 0 8313 8314 8315 0 8316 8317 8318 0 8319 8320 8321 0 8322 8323 8324 0 8325 8326 8327 0 8328 8329 8330 0 8331 8332 8333 0 8334 8335 8336 0 8337 8338 8339 0 8340 8341 8342 0 8343 8344 8345 0 8346 8347 8348 0 8349 8350 8351 0 8352 8353 8354 0 8355 8356 8357 0 8358 8359 8360 0 8361 8362 8363 0 8364 8365 8366 0 8367 8368 8369 0 8370 8371 8372 0 8373 8374 8375 0 8376 8377 8378 0 8379 8380 8381 0 8382 8383 8384 0 8385 8386 8387 0 8388 8389 8390 0 8391 8392 8393 0 8394 8395 8396 0 8397 8398 8399 0 8400 8401 8402 0 8403 8404 8405 0 8406 8407 8408 0 8409 8410 8411 0 8412 8413 8414 0 8415 8416 8417 0 8418 8419 8420 0 8421 8422 8423 0 8424 8425 8426 0 8427 8428 8429 0 8430 8431 8432 0 8433 8434 8435 0 8436 8437 8438 0 8439 8440 8441 0 8442 8443 8444 0 8445 8446 8447 0 8448 8449 8450 0 8451 8452 8453 0 8454 8455 8456 0 8457 8458 8459 0 8460 8461 8462 0 8463 8464 8465 0 8466 8467 8468 0 8469 8470 8471 0 8472 8473 8474 0 8475 8476 8477 0 8478 8479 8480 0 8481 8482 8483 0 8484 8485 8486 0 8487 8488 8489 0 8490 8491 8492 0 8493 8494 8495 0 8496 8497 8498 0 8499 8500 8501 0 8502 8503 8504 0 8505 8506 8507 0 8508 8509 8510 0 8511 8512 8513 0 8514 8515 8516 0 8517 8518 8519 0 8520 8521 8522 0 8523 8524 8525 0 8526 8527 8528 0 8529 8530 8531 0 8532 8533 8534 0 8535 8536 8537 0 8538 8539 8540 0 8541 8542 8543 0 8544 8545 8546 0 8547 8548 8549 0 8550 8551 8552 0 8553 8554 8555 0 8556 8557 8558 0 8559 8560 8561 0 8562 8563 8564 0 8565 8566 8567 0 8568 8569 8570 0 8571 8572 8573 0 8574 8575 8576 0 8577 8578 8579 0 8580 8581 8582 0 8583 8584 8585 0 8586 8587 8588 0 8589 8590 8591 0 8592 8593 8594 0 8595 8596 8597 0 8598 8599 8600 0 8601 8602 8603 0 8604 8605 8606 0 8607 8608 8609 0 8610 8611 8612 0 8613 8614 8615 0 8616 8617 8618 0 8619 8620 8621 0 8622 8623 8624 0 8625 8626 8627 0 8628 8629 8630 0 8631 8632 8633 0 8634 8635 8636 0 8637 8638 8639 0 8640 8641 8642 0 8643 8644 8645 0 8646 8647 8648 0 8649 8650 8651 0 8652 8653 8654 0 8655 8656 8657 0 8658 8659 8660 0 8661 8662 8663 0 8664 8665 8666 0 8667 8668 8669 0 8670 8671 8672 0 8673 8674 8675 0 8676 8677 8678 0 8679 8680 8681 0 8682 8683 8684 0 8685 8686 8687 0 8688 8689 8690 0 8691 8692 8693 0 8694 8695 8696 0 8697 8698 8699 0 8700 8701 8702 0 8703 8704 8705 0 8706 8707 8708 0 8709 8710 8711 0 8712 8713 8714 0 8715 8716 8717 0 8718 8719 8720 0 8721 8722 8723 0 8724 8725 8726 0 8727 8728 8729 0 8730 8731 8732 0 8733 8734 8735 0 8736 8737 8738 0 8739 8740 8741 0 8742 8743 8744 0 8745 8746 8747 0 8748 8749 8750 0 8751 8752 8753 0 8754 8755 8756 0 8757 8758 8759 0 8760 8761 8762 0 8763 8764 8765 0 8766 8767 8768 0 8769 8770 8771 0 8772 8773 8774 0 8775 8776 8777 0 8778 8779 8780 0 8781 8782 8783 0 8784 8785 8786 0 8787 8788 8789 0 8790 8791 8792 0 8793 8794 8795 0 8796 8797 8798 0 8799 8800 8801 0 8802 8803 8804 0 8805 8806 8807 0 8808 8809 8810 0 8811 8812 8813 0 8814 8815 8816 0 8817 8818 8819 0 8820 8821 8822 0 8823 8824 8825 0 8826 8827 8828 0 8829 8830 8831 0 8832 8833 8834 0 8835 8836 8837 0 8838 8839 8840 0 8841 8842 8843 0 8844 8845 8846 0 8847 8848 8849 0 8850 8851 8852 0 8853 8854 8855 0 8856 8857 8858 0 8859 8860 8861 0 8862 8863 8864 0 8865 8866 8867 0 8868 8869 8870 0 8871 8872 8873 0 8874 8875 8876 0 8877 8878 8879 0 8880 8881 8882 0 8883 8884 8885 0 8886 8887 8888 0 8889 8890 8891 0 8892 8893 8894 0 8895 8896 8897 0 8898 8899 8900 0 8901 8902 8903 0 8904 8905 8906 0 8907 8908 8909 0 8910 8911 8912 0 8913 8914 8915 0 8916 8917 8918 0 8919 8920 8921 0 8922 8923 8924 0 8925 8926 8927 0 8928 8929 8930 0 8931 8932 8933 0 8934 8935 8936 0 8937 8938 8939 0 8940 8941 8942 0 8943 8944 8945 0 8946 8947 8948 0 8949 8950 8951 0 8952 8953 8954 0 8955 8956 8957 0 8958 8959 8960 0 8961 8962 8963 0 8964 8965 8966 0 8967 8968 8969 0 8970 8971 8972 0 8973 8974 8975 0 8976 8977 8978 0 8979 8980 8981 0 8982 8983 8984 0 8985 8986 8987 0 8988 8989 8990 0 8991 8992 8993 0 8994 8995 8996 0 8997 8998 8999 0 9000 9001 9002 0 9003 9004 9005 0 9006 9007 9008 0 9009 9010 9011 0 9012 9013 9014 0 9015 9016 9017 0 9018 9019 9020 0 9021 9022 9023 0 9024 9025 9026 0 9027 9028 9029 0 9030 9031 9032 0 9033 9034 9035 0 9036 9037 9038 0 9039 9040 9041 0 9042 9043 9044 0 9045 9046 9047 0 9048 9049 9050 0 9051 9052 9053 0 9054 9055 9056 0 9057 9058 9059 0 9060 9061 9062 0 9063 9064 9065 0 9066 9067 9068 0 9069 9070 9071 0 9072 9073 9074 0 9075 9076 9077 0 9078 9079 9080 0 9081 9082 9083 0 9084 9085 9086 0 9087 9088 9089 0 9090 9091 9092 0 9093 9094 9095 0 9096 9097 9098 0 9099 9100 9101 0 9102 9103 9104 0 9105 9106 9107 0 9108 9109 9110 0 9111 9112 9113 0 9114 9115 9116 0 9117 9118 9119 0 9120 9121 9122 0 9123 9124 9125 0 9126 9127 9128 0 9129 9130 9131 0 9132 9133 9134 0 9135 9136 9137 0 9138 9139 9140 0 9141 9142 9143 0 9144 9145 9146 0 9147 9148 9149 0 9150 9151 9152 0 9153 9154 9155 0 9156 9157 9158 0 9159 9160 9161 0 9162 9163 9164 0 9165 9166 9167 0 9168 9169 9170 0 9171 9172 9173 0 9174 9175 9176 0 9177 9178 9179 0 9180 9181 9182 0 9183 9184 9185 0 9186 9187 9188 0 9189 9190 9191 0 9192 9193 9194 0 9195 9196 9197 0 9198 9199 9200 0 9201 9202 9203 0 9204 9205 9206 0 9207 9208 9209 0 9210 9211 9212 0 9213 9214 9215 0 9216 9217 9218 0 9219 9220 9221 0 9222 9223 9224 0 9225 9226 9227 0 9228 9229 9230 0 9231 9232 9233 0 9234 9235 9236 0 9237 9238 9239 0 9240 9241 9242 0 9243 9244 9245 0 9246 9247 9248 0 9249 9250 9251 0 9252 9253 9254 0 9255 9256 9257 0 9258 9259 9260 0 9261 9262 9263 0 9264 9265 9266 0 9267 9268 9269 0 9270 9271 9272 0 9273 9274 9275 0 9276 9277 9278 0 9279 9280 9281 0 9282 9283 9284 0 9285 9286 9287 0 9288 9289 9290 0 9291 9292 9293 0 9294 9295 9296 0 9297 9298 9299 0 9300 9301 9302 0 9303 9304 9305 0 9306 9307 9308 0 9309 9310 9311 0 9312 9313 9314 0 9315 9316 9317 0 9318 9319 9320 0 9321 9322 9323 0 9324 9325 9326 0 9327 9328 9329 0 9330 9331 9332 0 9333 9334 9335 0 9336 9337 9338 0 9339 9340 9341 0 9342 9343 9344 0 9345 9346 9347 0 9348 9349 9350 0 9351 9352 9353 0 9354 9355 9356 0 9357 9358 9359 0 9360 9361 9362 0 9363 9364 9365 0 9366 9367 9368 0 9369 9370 9371 0 9372 9373 9374 0 9375 9376 9377 0 9378 9379 9380 0 9381 9382 9383 0 9384 9385 9386 0 9387 9388 9389 0 9390 9391 9392 0 9393 9394 9395 0 9396 9397 9398 0 9399 9400 9401 0 9402 9403 9404 0 9405 9406 9407 0 9408 9409 9410 0 9411 9412 9413 0 9414 9415 9416 0 9417 9418 9419 0 9420 9421 9422 0 9423 9424 9425 0 9426 9427 9428 0 9429 9430 9431 0 9432 9433 9434 0 9435 9436 9437 0 9438 9439 9440 0 9441 9442 9443 0 9444 9445 9446 0 9447 9448 9449 0 9450 9451 9452 0 9453 9454 9455 0 9456 9457 9458 0 9459 9460 9461 0 9462 9463 9464 0 9465 9466 9467 0 9468 9469 9470 0 9471 9472 9473 0 9474 9475 9476 0 9477 9478 9479 0 9480 9481 9482 0 9483 9484 9485 0 9486 9487 9488 0 9489 9490 9491 0 9492 9493 9494 0 9495 9496 9497 0 9498 9499 9500 0 9501 9502 9503 0 9504 9505 9506 0 9507 9508 9509 0 9510 9511 9512 0 9513 9514 9515 0 9516 9517 9518 0 9519 9520 9521 0 9522 9523 9524 0 9525 9526 9527 0 9528 9529 9530 0 9531 9532 9533 0 9534 9535 9536 0 9537 9538 9539 0 9540 9541 9542 0 9543 9544 9545 0 9546 9547 9548 0 9549 9550 9551 0 9552 9553 9554 0 9555 9556 9557 0 9558 9559 9560 0 9561 9562 9563 0 9564 9565 9566 0 9567 9568 9569 0 9570 9571 9572 0 9573 9574 9575 0 9576 9577 9578 0 9579 9580 9581 0 9582 9583 9584 0 9585 9586 9587 0 9588 9589 9590 0 9591 9592 9593 0 9594 9595 9596 0 9597 9598 9599 0 9600 9601 9602 0 9603 9604 9605 0 9606 9607 9608 0 9609 9610 9611 0 9612 9613 9614 0 9615 9616 9617 0 9618 9619 9620 0 9621 9622 9623 0 9624 9625 9626 0 9627 9628 9629 0 9630 9631 9632 0 9633 9634 9635 0 9636 9637 9638 0 9639 9640 9641 0 9642 9643 9644 0 9645 9646 9647 0 9648 9649 9650 0 9651 9652 9653 0 9654 9655 9656 0 9657 9658 9659 0 9660 9661 9662 0 9663 9664 9665 0 9666 9667 9668 0 9669 9670 9671 0 9672 9673 9674 0 9675 9676 9677 0 9678 9679 9680 0 9681 9682 9683 0 9684 9685 9686 0 9687 9688 9689 0 9690 9691 9692 0 9693 9694 9695 0 9696 9697 9698 0 9699 9700 9701 0 9702 9703 9704 0 9705 9706 9707 0 9708 9709 9710 0 9711 9712 9713 0 9714 9715 9716 0 9717 9718 9719 0 9720 9721 9722 0 9723 9724 9725 0 9726 9727 9728 0 9729 9730 9731 0 9732 9733 9734 0 9735 9736 9737 0 9738 9739 9740 0 9741 9742 9743 0 9744 9745 9746 0 9747 9748 9749 0 9750 9751 9752 0 9753 9754 9755 0 9756 9757 9758 0 9759 9760 9761 0 9762 9763 9764 0 9765 9766 9767 0 9768 9769 9770 0 9771 9772 9773 0 9774 9775 9776 0 9777 9778 9779 0 9780 9781 9782 0 9783 9784 9785 0 9786 9787 9788 0 9789 9790 9791 0 9792 9793 9794 0 9795 9796 9797 0 9798 9799 9800 0 9801 9802 9803 0 9804 9805 9806 0 9807 9808 9809 0 9810 9811 9812 0 9813 9814 9815 0 9816 9817 9818 0 9819 9820 9821 0 9822 9823 9824 0 9825 9826 9827 0 9828 9829 9830 0 9831 9832 9833 0 9834 9835 9836 0 9837 9838 9839 0 9840 9841 9842 0 9843 9844 9845 0 9846 9847 9848 0 9849 9850 9851 0 9852 9853 9854 0 9855 9856 9857 0 9858 9859 9860 0 9861 9862 9863 0 9864 9865 9866 0 9867 9868 9869 0 9870 9871 9872 0 9873 9874 9875 0 9876 9877 9878 0 9879 9880 9881 0 9882 9883 9884 0 9885 9886 9887 0 9888 9889 9890 0 9891 9892 9893 0 9894 9895 9896 0 9897 9898 9899 0 9900 9901 9902 0 9903 9904 9905 0 9906 9907 9908 0 9909 9910 9911 0 9912 9913 9914 0 9915 9916 9917 0 9918 9919 9920 0 9921 9922 9923 0 9924 9925 9926 0 9927 9928 9929 0 9930 9931 9932 0 9933 9934 9935 0 9936 9937 9938 0 9939 9940 9941 0 9942 9943 9944 0 9945 9946 9947 0 9948 9949 9950 0 9951 9952 9953 0 9954 9955 9956 0 9957 9958 9959 0 9960 9961 9962 0 9963 9964 9965 0 9966 9967 9968 0 9969 9970 9971 0 9972 9973 9974 0 9975 9976 9977 0 9978 9979 9980 0 9981 9982 9983 0 9984 9985 9986 0 9987 9988 9989 0 9990 9991 9992 0 9993 9994 9995 0 9996 9997 9998 0 9999 10000 10001 0 10002 10003 10004 0 10005 10006 10007 0 10008 10009 10010 0 10011 10012 10013 0 10014 10015 10016 0 10017 10018 10019 0 10020 10021 10022 0 10023 10024 10025 0 10026 10027 10028 0 10029 10030 10031 0 10032 10033 10034 0 10035 10036 10037 0 10038 10039 10040 0 10041 10042 10043 0 10044 10045 10046 0 10047 10048 10049 0 10050 10051 10052 0 10053 10054 10055 0 10056 10057 10058 0 10059 10060 10061 0 10062 10063 10064 0 10065 10066 10067 0 10068 10069 10070 0 10071 10072 10073 0 10074 10075 10076 0 10077 10078 10079 0 10080 10081 10082 0 10083 10084 10085 0 10086 10087 10088 0 10089 10090 10091 0 10092 10093 10094 0 10095 10096 10097 0 10098 10099 10100 0 10101 10102 10103 0 10104 10105 10106 0 10107 10108 10109 0 10110 10111 10112 0 10113 10114 10115 0 10116 10117 10118 0 10119 10120 10121 0 10122 10123 10124 0 10125 10126 10127 0 10128 10129 10130 0 10131 10132 10133 0 10134 10135 10136 0 10137 10138 10139 0 10140 10141 10142 0 10143 10144 10145 0 10146 10147 10148 0 10149 10150 10151 0 10152 10153 10154 0 10155 10156 10157 0 10158 10159 10160 0 10161 10162 10163 0 10164 10165 10166 0 10167 10168 10169 0 10170 10171 10172 0 10173 10174 10175 0 10176 10177 10178 0 10179 10180 10181 0 10182 10183 10184 0 10185 10186 10187 0 10188 10189 10190 0 10191 10192 10193 0 10194 10195 10196 0 10197 10198 10199 0 10200 10201 10202 0 10203 10204 10205 0 10206 10207 10208 0 10209 10210 10211 0 10212 10213 10214 0 10215 10216 10217 0 10218 10219 10220 0 10221 10222 10223 0 10224 10225 10226 0 10227 10228 10229 0 10230 10231 10232 0 10233 10234 10235 0 10236 10237 10238 0 10239 10240 10241 0 10242 10243 10244 0 10245 10246 10247 0 10248 10249 10250 0 10251 10252 10253 0 10254 10255 10256 0 10257 10258 10259 0 10260 10261 10262 0 10263 10264 10265 0 10266 10267 10268 0 10269 10270 10271 0 10272 10273 10274 0 10275 10276 10277 0 10278 10279 10280 0 10281 10282 10283 0 10284 10285 10286 0 10287 10288 10289 0 10290 10291 10292 0 10293 10294 10295 0 10296 10297 10298 0 10299 10300 10301 0 10302 10303 10304 0 10305 10306 10307 0 10308 10309 10310 0 10311 10312 10313 0 10314 10315 10316 0 10317 10318 10319 0 10320 10321 10322 0 10323 10324 10325 0 10326 10327 10328 0 10329 10330 10331 0 10332 10333 10334 0 10335 10336 10337 0 10338 10339 10340 0 10341 10342 10343 0 10344 10345 10346 0 10347 10348 10349 0 10350 10351 10352 0 10353 10354 10355 0 10356 10357 10358 0 10359 10360 10361 0 10362 10363 10364 0 10365 10366 10367 0 10368 10369 10370 0 10371 10372 10373 0 10374 10375 10376 0 10377 10378 10379 0 10380 10381 10382 0 10383 10384 10385 0 10386 10387 10388 0 10389 10390 10391 0 10392 10393 10394 0 10395 10396 10397 0 10398 10399 10400 0 10401 10402 10403 0 10404 10405 10406 0 10407 10408 10409 0 10410 10411 10412 0 10413 10414 10415 0 10416 10417 10418 0 10419 10420 10421 0 10422 10423 10424 0 10425 10426 10427 0 10428 10429 10430 0 10431 10432 10433 0 10434 10435 10436 0 10437 10438 10439 0 10440 10441 10442 0 10443 10444 10445 0 10446 10447 10448 0 10449 10450 10451 0 10452 10453 10454 0 10455 10456 10457 0 10458 10459 10460 0 10461 10462 10463 0 10464 10465 10466 0 10467 10468 10469 0 10470 10471 10472 0 10473 10474 10475 0 10476 10477 10478 0 10479 10480 10481 0 10482 10483 10484 0 10485 10486 10487 0 10488 10489 10490 0 10491 10492 10493 0 10494 10495 10496 0 10497 10498 10499 0 10500 10501 10502 0 10503 10504 10505 0 10506 10507 10508 0 10509 10510 10511 0 10512 10513 10514 0 10515 10516 10517 0 10518 10519 10520 0 10521 10522 10523 0 10524 10525 10526 0 10527 10528 10529 0 10530 10531 10532 0 10533 10534 10535 0 10536 10537 10538 0 10539 10540 10541 0 10542 10543 10544 0 10545 10546 10547 0 10548 10549 10550 0 10551 10552 10553 0 10554 10555 10556 0 10557 10558 10559 0 10560 10561 10562 0 10563 10564 10565 0 10566 10567 10568 0 10569 10570 10571 0 10572 10573 10574 0 10575 10576 10577 0 10578 10579 10580 0 10581 10582 10583 0 10584 10585 10586 0 10587 10588 10589 0 10590 10591 10592 0 10593 10594 10595 0 10596 10597 10598 0 10599 10600 10601 0 10602 10603 10604 0 10605 10606 10607 0 10608 10609 10610 0 10611 10612 10613 0 10614 10615 10616 0 10617 10618 10619 0 10620 10621 10622 0 10623 10624 10625 0 10626 10627 10628 0 10629 10630 10631 0 10632 10633 10634 0 10635 10636 10637 0 10638 10639 10640 0 10641 10642 10643 0 10644 10645 10646 0 10647 10648 10649 0 10650 10651 10652 0 10653 10654 10655 0 10656 10657 10658 0 10659 10660 10661 0 10662 10663 10664 0 10665 10666 10667 0 10668 10669 10670 0 10671 10672 10673 0 10674 10675 10676 0 10677 10678 10679 0 10680 10681 10682 0 10683 10684 10685 0 10686 10687 10688 0 10689 10690 10691 0 10692 10693 10694 0 10695 10696 10697 0 10698 10699 10700 0 10701 10702 10703 0 10704 10705 10706 0 10707 10708 10709 0 10710 10711 10712 0 10713 10714 10715 0 10716 10717 10718 0 10719 10720 10721 0 10722 10723 10724 0 10725 10726 10727 0 10728 10729 10730 0 10731 10732 10733 0 10734 10735 10736 0 10737 10738 10739 0 10740 10741 10742 0 10743 10744 10745 0 10746 10747 10748 0 10749 10750 10751 0 10752 10753 10754 0 10755 10756 10757 0 10758 10759 10760 0 10761 10762 10763 0 10764 10765 10766 0 10767 10768 10769 0 10770 10771 10772 0 10773 10774 10775 0 10776 10777 10778 0 10779 10780 10781 0 10782 10783 10784 0 10785 10786 10787 0 10788 10789 10790 0 10791 10792 10793 0 10794 10795 10796 0 10797 10798 10799 0 10800 10801 10802 0 10803 10804 10805 0 10806 10807 10808 0 10809 10810 10811 0 10812 10813 10814 0 10815 10816 10817 0 10818 10819 10820 0 10821 10822 10823 0 10824 10825 10826 0 10827 10828 10829 0 10830 10831 10832 0 10833 10834 10835 0 10836 10837 10838 0 10839 10840 10841 0 10842 10843 10844 0 10845 10846 10847 0 10848 10849 10850 0 10851 10852 10853 0 10854 10855 10856 0 10857 10858 10859 0 10860 10861 10862 0 10863 10864 10865 0 10866 10867 10868 0 10869 10870 10871 0 10872 10873 10874 0 10875 10876 10877 0 10878 10879 10880 0 10881 10882 10883 0 10884 10885 10886 0 10887 10888 10889 0 10890 10891 10892 0 10893 10894 10895 0 10896 10897 10898 0 10899 10900 10901 0 10902 10903 10904 0 10905 10906 10907 0 10908 10909 10910 0 10911 10912 10913 0 10914 10915 10916 0 10917 10918 10919 0 10920 10921 10922 0 10923 10924 10925 0 10926 10927 10928 0 10929 10930 10931 0 10932 10933 10934 0 10935 10936 10937 0 10938 10939 10940 0 10941 10942 10943 0 10944 10945 10946 0 10947 10948 10949 0 10950 10951 10952 0 10953 10954 10955 0 10956 10957 10958 0 10959 10960 10961 0 10962 10963 10964 0 10965 10966 10967 0 10968 10969 10970 0 10971 10972 10973 0 10974 10975 10976 0 10977 10978 10979 0 10980 10981 10982 0 10983 10984 10985 0 10986 10987 10988 0 10989 10990 10991 0 10992 10993 10994 0 10995 10996 10997 0 10998 10999 11000 0 11001 11002 11003 0 11004 11005 11006 0 11007 11008 11009 0 11010 11011 11012 0 11013 11014 11015 0 11016 11017 11018 0 11019 11020 11021 0 11022 11023 11024 0 11025 11026 11027 0 11028 11029 11030 0 11031 11032 11033 0 11034 11035 11036 0 11037 11038 11039 0 11040 11041 11042 0 11043 11044 11045 0 11046 11047 11048 0 11049 11050 11051 0 11052 11053 11054 0 11055 11056 11057 0 11058 11059 11060 0 11061 11062 11063 0 11064 11065 11066 0 11067 11068 11069 0 11070 11071 11072 0 11073 11074 11075 0 11076 11077 11078 0 11079 11080 11081 0 11082 11083 11084 0 11085 11086 11087 0 11088 11089 11090 0 11091 11092 11093 0 11094 11095 11096 0 11097 11098 11099 0 11100 11101 11102 0 11103 11104 11105 0 11106 11107 11108 0 11109 11110 11111 0 11112 11113 11114 0 11115 11116 11117 0 11118 11119 11120 0 11121 11122 11123 0 11124 11125 11126 0 11127 11128 11129 0 11130 11131 11132 0 11133 11134 11135 0 11136 11137 11138 0 11139 11140 11141 0 11142 11143 11144 0 11145 11146 11147 0 11148 11149 11150 0 11151 11152 11153 0 11154 11155 11156 0 11157 11158 11159 0 11160 11161 11162 0 11163 11164 11165 0 11166 11167 11168 0 11169 11170 11171 0 11172 11173 11174 0 11175 11176 11177 0 11178 11179 11180 0 11181 11182 11183 0 11184 11185 11186 0 11187 11188 11189 0 11190 11191 11192 0 11193 11194 11195 0 11196 11197 11198 0 11199 11200 11201 0 11202 11203 11204 0 11205 11206 11207 0 11208 11209 11210 0 11211 11212 11213 0 11214 11215 11216 0 11217 11218 11219 0 11220 11221 11222 0 11223 11224 11225 0 11226 11227 11228 0 11229 11230 11231 0 11232 11233 11234 0 11235 11236 11237 0 11238 11239 11240 0 11241 11242 11243 0 11244 11245 11246 0 11247 11248 11249 0 11250 11251 11252 0 11253 11254 11255 0 11256 11257 11258 0 11259 11260 11261 0 11262 11263 11264 0 11265 11266 11267 0 11268 11269 11270 0 11271 11272 11273 0 11274 11275 11276 0 11277 11278 11279 0 11280 11281 11282 0 11283 11284 11285 0 11286 11287 11288 0 11289 11290 11291 0 11292 11293 11294 0 11295 11296 11297 0 11298 11299 11300 0 11301 11302 11303 0 11304 11305 11306 0 11307 11308 11309 0 11310 11311 11312 0 11313 11314 11315 0 11316 11317 11318 0 11319 11320 11321 0 11322 11323 11324 0 11325 11326 11327 0 11328 11329 11330 0 11331 11332 11333 0 11334 11335 11336 0 11337 11338 11339 0 11340 11341 11342 0 11343 11344 11345 0 11346 11347 11348 0 11349 11350 11351 0 11352 11353 11354 0 11355 11356 11357 0 11358 11359 11360 0 11361 11362 11363 0 11364 11365 11366 0 11367 11368 11369 0 11370 11371 11372 0 11373 11374 11375 0 11376 11377 11378 0 11379 11380 11381 0 11382 11383 11384 0 11385 11386 11387 0 11388 11389 11390 0 11391 11392 11393 0 11394 11395 11396 0 11397 11398 11399 0 11400 11401 11402 0 11403 11404 11405 0 11406 11407 11408 0 11409 11410 11411 0 11412 11413 11414 0 11415 11416 11417 0 11418 11419 11420 0 11421 11422 11423 0 11424 11425 11426 0 11427 11428 11429 0 11430 11431 11432 0 11433 11434 11435 0 11436 11437 11438 0 11439 11440 11441 0 11442 11443 11444 0 11445 11446 11447 0 11448 11449 11450 0 11451 11452 11453 0 11454 11455 11456 0 11457 11458 11459 0 11460 11461 11462 0 11463 11464 11465 0 11466 11467 11468 0 11469 11470 11471 0 11472 11473 11474 0 11475 11476 11477 0 11478 11479 11480 0 11481 11482 11483 0 11484 11485 11486 0 11487 11488 11489 0 11490 11491 11492 0 11493 11494 11495 0 11496 11497 11498 0 11499 11500 11501 0 11502 11503 11504 0 11505 11506 11507 0 11508 11509 11510 0 11511 11512 11513 0 11514 11515 11516 0 11517 11518 11519 0 11520 11521 11522 0 11523 11524 11525 0 11526 11527 11528 0 11529 11530 11531 0 11532 11533 11534 0 11535 11536 11537 0 11538 11539 11540 0 11541 11542 11543 0 11544 11545 11546 0 11547 11548 11549 0 11550 11551 11552 0 11553 11554 11555 0 11556 11557 11558 0 11559 11560 11561 0 11562 11563 11564 0 11565 11566 11567 0 11568 11569 11570 0 11571 11572 11573 0 11574 11575 11576 0 11577 11578 11579 0 11580 11581 11582 0 11583 11584 11585 0 11586 11587 11588 0 11589 11590 11591 0 11592 11593 11594 0 11595 11596 11597 0 11598 11599 11600 0 11601 11602 11603 0 11604 11605 11606 0 11607 11608 11609 0 11610 11611 11612 0 11613 11614 11615 0 11616 11617 11618 0 11619 11620 11621 0 11622 11623 11624 0 11625 11626 11627 0 11628 11629 11630 0 11631 11632 11633 0 11634 11635 11636 0 11637 11638 11639 0 11640 11641 11642 0 11643 11644 11645 0 11646 11647 11648 0 11649 11650 11651 0 11652 11653 11654 0 11655 11656 11657 0 11658 11659 11660 0 11661 11662 11663 0 11664 11665 11666 0 11667 11668 11669 0 11670 11671 11672 0 11673 11674 11675 0 11676 11677 11678 0 11679 11680 11681 0 11682 11683 11684 0 11685 11686 11687 0 11688 11689 11690 0 11691 11692 11693 0 11694 11695 11696 0 11697 11698 11699 0 11700 11701 11702 0 11703 11704 11705 0 11706 11707 11708 0 11709 11710 11711 0 11712 11713 11714 0 11715 11716 11717 0 11718 11719 11720 0 11721 11722 11723 0 11724 11725 11726 0 11727 11728 11729 0 11730 11731 11732 0 11733 11734 11735 0 11736 11737 11738 0 11739 11740 11741 0 11742 11743 11744 0 11745 11746 11747 0 11748 11749 11750 0 11751 11752 11753 0 11754 11755 11756 0 11757 11758 11759 0 11760 11761 11762 0 11763 11764 11765 0 11766 11767 11768 0 11769 11770 11771 0 11772 11773 11774 0 11775 11776 11777 0 11778 11779 11780 0 11781 11782 11783 0 11784 11785 11786 0 11787 11788 11789 0 11790 11791 11792 0 11793 11794 11795 0 11796 11797 11798 0 11799 11800 11801 0 11802 11803 11804 0 11805 11806 11807 0 11808 11809 11810 0 11811 11812 11813 0 11814 11815 11816 0 11817 11818 11819 0 11820 11821 11822 0 11823 11824 11825 0 11826 11827 11828 0 11829 11830 11831 0 11832 11833 11834 0 11835 11836 11837 0 11838 11839 11840 0 11841 11842 11843 0 11844 11845 11846 0 11847 11848 11849 0 11850 11851 11852 0 11853 11854 11855 0 11856 11857 11858 0 11859 11860 11861 0 11862 11863 11864 0 11865 11866 11867 0 11868 11869 11870 0 11871 11872 11873 0 11874 11875 11876 0 11877 11878 11879 0 11880 11881 11882 0 11883 11884 11885 0 11886 11887 11888 0 11889 11890 11891 0 11892 11893 11894 0 11895 11896 11897 0 11898 11899 11900 0 11901 11902 11903 0 11904 11905 11906 0 11907 11908 11909 0 11910 11911 11912 0 11913 11914 11915 0 11916 11917 11918 0 11919 11920 11921 0 11922 11923 11924 0 11925 11926 11927 0 11928 11929 11930 0 11931 11932 11933 0 11934 11935 11936 0 11937 11938 11939 0 11940 11941 11942 0 11943 11944 11945 0 11946 11947 11948 0 11949 11950 11951 0 11952 11953 11954 0 11955 11956 11957 0 11958 11959 11960 0 11961 11962 11963 0 11964 11965 11966 0 11967 11968 11969 0 11970 11971 11972 0 11973 11974 11975 0 11976 11977 11978 0 11979 11980 11981 0 11982 11983 11984 0 11985 11986 11987 0 11988 11989 11990 0 11991 11992 11993 0 11994 11995 11996 0 11997 11998 11999 0 12000 12001 12002 0 12003 12004 12005 0 12006 12007 12008 0 12009 12010 12011 0 12012 12013 12014 0 12015 12016 12017 0 12018 12019 12020 0 12021 12022 12023 0 12024 12025 12026 0 12027 12028 12029 0 12030 12031 12032 0 12033 12034 12035 0 12036 12037 12038 0 12039 12040 12041 0 12042 12043 12044 0 12045 12046 12047 0 12048 12049 12050 0 12051 12052 12053 0 12054 12055 12056 0 12057 12058 12059 0 12060 12061 12062 0 12063 12064 12065 0 12066 12067 12068 0 12069 12070 12071 0 12072 12073 12074 0 12075 12076 12077 0 12078 12079 12080 0 12081 12082 12083 0 12084 12085 12086 0 12087 12088 12089 0 12090 12091 12092 0 12093 12094 12095 0 12096 12097 12098 0 12099 12100 12101 0 12102 12103 12104 0 12105 12106 12107 0 12108 12109 12110 0 12111 12112 12113 0 12114 12115 12116 0 12117 12118 12119 0 12120 12121 12122 0 12123 12124 12125 0 12126 12127 12128 0 12129 12130 12131 0 12132 12133 12134 0 12135 12136 12137 0 12138 12139 12140 0 12141 12142 12143 0 12144 12145 12146 0 12147 12148 12149 0 12150 12151 12152 0 12153 12154 12155 0 12156 12157 12158 0 12159 12160 12161 0 12162 12163 12164 0 12165 12166 12167 0 12168 12169 12170 0 12171 12172 12173 0 12174 12175 12176 0 12177 12178 12179 0 12180 12181 12182 0 12183 12184 12185 0 12186 12187 12188 0 12189 12190 12191 0 12192 12193 12194 0 12195 12196 12197 0 12198 12199 12200 0 12201 12202 12203 0 12204 12205 12206 0 12207 12208 12209 0 12210 12211 12212 0 12213 12214 12215 0 12216 12217 12218 0 12219 12220 12221 0 12222 12223 12224 0 12225 12226 12227 0 12228 12229 12230 0 12231 12232 12233 0 12234 12235 12236 0 12237 12238 12239 0 12240 12241 12242 0 12243 12244 12245 0 12246 12247 12248 0 12249 12250 12251 0 12252 12253 12254 0 12255 12256 12257 0 12258 12259 12260 0 12261 12262 12263 0 12264 12265 12266 0 12267 12268 12269 0 12270 12271 12272 0 12273 12274 12275 0 12276 12277 12278 0 12279 12280 12281 0 12282 12283 12284 0 12285 12286 12287 0 12288 12289 12290 0 12291 12292 12293 0 12294 12295 12296 0 12297 12298 12299 0 12300 12301 12302 0 12303 12304 12305 0 12306 12307 12308 0 12309 12310 12311 0 12312 12313 12314 0 12315 12316 12317 0 12318 12319 12320 0 12321 12322 12323 0 12324 12325 12326 0 12327 12328 12329 0 12330 12331 12332 0 12333 12334 12335 0 12336 12337 12338 0 12339 12340 12341 0 12342 12343 12344 0 12345 12346 12347 0 12348 12349 12350 0 12351 12352 12353 0 12354 12355 12356 0 12357 12358 12359 0 12360 12361 12362 0 12363 12364 12365 0 12366 12367 12368 0 12369 12370 12371 0 12372 12373 12374 0 12375 12376 12377 0 12378 12379 12380 0 12381 12382 12383 0 12384 12385 12386 0 12387 12388 12389 0 12390 12391 12392 0 12393 12394 12395 0 12396 12397 12398 0 12399 12400 12401 0 12402 12403 12404 0 12405 12406 12407 0 12408 12409 12410 0 12411 12412 12413 0 12414 12415 12416 0 12417 12418 12419 0 12420 12421 12422 0 12423 12424 12425 0 12426 12427 12428 0 12429 12430 12431 0 12432 12433 12434 0 12435 12436 12437 0 12438 12439 12440 0 12441 12442 12443 0 12444 12445 12446 0 12447 12448 12449 0 12450 12451 12452 0 12453 12454 12455 0 12456 12457 12458 0 12459 12460 12461 0 12462 12463 12464 0 12465 12466 12467 0 12468 12469 12470 0 12471 12472 12473 0 12474 12475 12476 0 12477 12478 12479 0 12480 12481 12482 0 12483 12484 12485 0 12486 12487 12488 0 12489 12490 12491 0 12492 12493 12494 0 12495 12496 12497 0 12498 12499 12500 0 12501 12502 12503 0 12504 12505 12506 0 12507 12508 12509 0 12510 12511 12512 0 12513 12514 12515 0 12516 12517 12518 0 12519 12520 12521 0 12522 12523 12524 0 12525 12526 12527 0 12528 12529 12530 0 12531 12532 12533 0 12534 12535 12536 0 12537 12538 12539 0 12540 12541 12542 0 12543 12544 12545 0 12546 12547 12548 0 12549 12550 12551 0 12552 12553 12554 0 12555 12556 12557 0 12558 12559 12560 0 12561 12562 12563 0 12564 12565 12566 0 12567 12568 12569 0 12570 12571 12572 0 12573 12574 12575 0 12576 12577 12578 0 12579 12580 12581 0 12582 12583 12584 0 12585 12586 12587 0 12588 12589 12590 0 12591 12592 12593 0 12594 12595 12596 0 12597 12598 12599 0 12600 12601 12602 0 12603 12604 12605 0 12606 12607 12608 0 12609 12610 12611 0 12612 12613 12614 0 12615 12616 12617 0 12618 12619 12620 0 12621 12622 12623 0 12624 12625 12626 0 12627 12628 12629 0 12630 12631 12632 0 12633 12634 12635 0 12636 12637 12638 0 12639 12640 12641 0 12642 12643 12644 0 12645 12646 12647 0 12648 12649 12650 0 12651 12652 12653 0 12654 12655 12656 0 12657 12658 12659 0 12660 12661 12662 0 12663 12664 12665 0 12666 12667 12668 0 12669 12670 12671 0 12672 12673 12674 0 12675 12676 12677 0 12678 12679 12680 0 12681 12682 12683 0 12684 12685 12686 0 12687 12688 12689 0 12690 12691 12692 0 12693 12694 12695 0 12696 12697 12698 0 12699 12700 12701 0 12702 12703 12704 0 12705 12706 12707 0 12708 12709 12710 0 12711 12712 12713 0 12714 12715 12716 0 12717 12718 12719 0 12720 12721 12722 0 12723 12724 12725 0 12726 12727 12728 0 12729 12730 12731 0 12732 12733 12734 0 12735 12736 12737 0 12738 12739 12740 0 12741 12742 12743 0 12744 12745 12746 0 12747 12748 12749 0 12750 12751 12752 0 12753 12754 12755 0 12756 12757 12758 0 12759 12760 12761 0 12762 12763 12764 0 12765 12766 12767 0 12768 12769 12770 0 12771 12772 12773 0 12774 12775 12776 0 12777 12778 12779 0 12780 12781 12782 0 12783 12784 12785 0 12786 12787 12788 0 12789 12790 12791 0 12792 12793 12794 0 12795 12796 12797 0 12798 12799 12800 0 12801 12802 12803 0 12804 12805 12806 0 12807 12808 12809 0 12810 12811 12812 0 12813 12814 12815 0 12816 12817 12818 0 12819 12820 12821 0 12822 12823 12824 0 12825 12826 12827 0 12828 12829 12830 0 12831 12832 12833 0 12834 12835 12836 0 12837 12838 12839 0 12840 12841 12842 0 12843 12844 12845 0 12846 12847 12848 0 12849 12850 12851 0 12852 12853 12854 0 12855 12856 12857 0 12858 12859 12860 0 12861 12862 12863 0 12864 12865 12866 0 12867 12868 12869 0 12870 12871 12872 0 12873 12874 12875 0 12876 12877 12878 0 12879 12880 12881 0 12882 12883 12884 0 12885 12886 12887 0 12888 12889 12890 0 12891 12892 12893 0 12894 12895 12896 0 12897 12898 12899 0 12900 12901 12902 0 12903 12904 12905 0 12906 12907 12908 0 12909 12910 12911 0 12912 12913 12914 0 12915 12916 12917 0 12918 12919 12920 0 12921 12922 12923 0 12924 12925 12926 0 12927 12928 12929 0 12930 12931 12932 0 12933 12934 12935 0 12936 12937 12938 0 12939 12940 12941 0 12942 12943 12944 0 12945 12946 12947 0 12948 12949 12950 0 12951 12952 12953 0 12954 12955 12956 0 12957 12958 12959 0 12960 12961 12962 0 12963 12964 12965 0 12966 12967 12968 0 12969 12970 12971 0 12972 12973 12974 0 12975 12976 12977 0 12978 12979 12980 0 12981 12982 12983 0 12984 12985 12986 0 12987 12988 12989 0 12990 12991 12992 0 12993 12994 12995 0 12996 12997 12998 0 12999 13000 13001 0 13002 13003 13004 0 13005 13006 13007 0 13008 13009 13010 0 13011 13012 13013 0 13014 13015 13016 0 13017 13018 13019 0 13020 13021 13022 0 13023 13024 13025 0 13026 13027 13028 0 13029 13030 13031 0 13032 13033 13034 0 13035 13036 13037 0 13038 13039 13040 0 13041 13042 13043 0 13044 13045 13046 0 13047 13048 13049 0 13050 13051 13052 0 13053 13054 13055 0 13056 13057 13058 0 13059 13060 13061 0 13062 13063 13064 0 13065 13066 13067 0 13068 13069 13070 0 13071 13072 13073 0 13074 13075 13076 0 13077 13078 13079 0 13080 13081 13082 0 13083 13084 13085 0 13086 13087 13088 0 13089 13090 13091 0 13092 13093 13094 0 13095 13096 13097 0 13098 13099 13100 0 13101 13102 13103 0 13104 13105 13106 0 13107 13108 13109 0 13110 13111 13112 0 13113 13114 13115 0 13116 13117 13118 0 13119 13120 13121 0 13122 13123 13124 0 13125 13126 13127 0 13128 13129 13130 0 13131 13132 13133 0 13134 13135 13136 0 13137 13138 13139 0 13140 13141 13142 0 13143 13144 13145 0 13146 13147 13148 0 13149 13150 13151 0 13152 13153 13154 0 13155 13156 13157 0 13158 13159 13160 0 13161 13162 13163 0 13164 13165 13166 0 13167 13168 13169 0 13170 13171 13172 0 13173 13174 13175 0 13176 13177 13178 0 13179 13180 13181 0 13182 13183 13184 0 13185 13186 13187 0 13188 13189 13190 0 13191 13192 13193 0 13194 13195 13196 0 13197 13198 13199 0 13200 13201 13202 0 13203 13204 13205 0 13206 13207 13208 0 13209 13210 13211 0 13212 13213 13214 0 13215 13216 13217 0 13218 13219 13220 0 13221 13222 13223 0 13224 13225 13226 0 13227 13228 13229 0 13230 13231 13232 0 13233 13234 13235 0 13236 13237 13238 0 13239 13240 13241 0 13242 13243 13244 0 13245 13246 13247 0 13248 13249 13250 0 13251 13252 13253 0 13254 13255 13256 0 13257 13258 13259 0 13260 13261 13262 0 13263 13264 13265 0 13266 13267 13268 0 13269 13270 13271 0 13272 13273 13274 0 13275 13276 13277 0 13278 13279 13280 0 13281 13282 13283 0 13284 13285 13286 0 13287 13288 13289 0 13290 13291 13292 0 13293 13294 13295 0 13296 13297 13298 0 13299 13300 13301 0 13302 13303 13304 0 13305 13306 13307 0 13308 13309 13310 0 13311 13312 13313 0 13314 13315 13316 0 13317 13318 13319 0 13320 13321 13322 0 13323 13324 13325 0 13326 13327 13328 0 13329 13330 13331 0 13332 13333 13334 0 13335 13336 13337 0 13338 13339 13340 0 13341 13342 13343 0 13344 13345 13346 0 13347 13348 13349 0 13350 13351 13352 0 13353 13354 13355 0 13356 13357 13358 0 13359 13360 13361 0 13362 13363 13364 0 13365 13366 13367 0 13368 13369 13370 0 13371 13372 13373 0 13374 13375 13376 0 13377 13378 13379 0 13380 13381 13382 0 13383 13384 13385 0 13386 13387 13388 0 13389 13390 13391 0 13392 13393 13394 0 13395 13396 13397 0 13398 13399 13400 0 13401 13402 13403 0 13404 13405 13406 0 13407 13408 13409 0 13410 13411 13412 0 13413 13414 13415 0 13416 13417 13418 0 13419 13420 13421 0 13422 13423 13424 0 13425 13426 13427 0 13428 13429 13430 0 13431 13432 13433 0 13434 13435 13436 0 13437 13438 13439 0 13440 13441 13442 0 13443 13444 13445 0 13446 13447 13448 0 13449 13450 13451 0 13452 13453 13454 0 13455 13456 13457 0 13458 13459 13460 0 13461 13462 13463 0 13464 13465 13466 0 13467 13468 13469 0 13470 13471 13472 0 13473 13474 13475 0 13476 13477 13478 0 13479 13480 13481 0 13482 13483 13484 0 13485 13486 13487 0 13488 13489 13490 0 13491 13492 13493 0 13494 13495 13496 0 13497 13498 13499 0 13500 13501 13502 0 13503 13504 13505 0 13506 13507 13508 0 13509 13510 13511 0 13512 13513 13514 0 13515 13516 13517 0 13518 13519 13520 0 13521 13522 13523 0 13524 13525 13526 0 13527 13528 13529 0 13530 13531 13532 0 13533 13534 13535 0 13536 13537 13538 0 13539 13540 13541 0 13542 13543 13544 0 13545 13546 13547 0 13548 13549 13550 0 13551 13552 13553 0 13554 13555 13556 0 13557 13558 13559 0 13560 13561 13562 0 13563 13564 13565 0 13566 13567 13568 0 13569 13570 13571 0 13572 13573 13574 0 13575 13576 13577 0 13578 13579 13580 0 13581 13582 13583 0 13584 13585 13586 0 13587 13588 13589 0 13590 13591 13592 0 13593 13594 13595 0 13596 13597 13598 0 13599 13600 13601 0 13602 13603 13604 0 13605 13606 13607 0 13608 13609 13610 0 13611 13612 13613 0 13614 13615 13616 0 13617 13618 13619 0 13620 13621 13622 0 13623 13624 13625 0 13626 13627 13628 0 13629 13630 13631 0 13632 13633 13634 0 13635 13636 13637 0 13638 13639 13640 0 13641 13642 13643 0 13644 13645 13646 0 13647 13648 13649 0 13650 13651 13652 0 13653 13654 13655 0 13656 13657 13658 0 13659 13660 13661 0 13662 13663 13664 0 13665 13666 13667 0 13668 13669 13670 0 13671 13672 13673 0 13674 13675 13676 0 13677 13678 13679 0 13680 13681 13682 0 13683 13684 13685 0 13686 13687 13688 0 13689 13690 13691 0 13692 13693 13694 0 13695 13696 13697 0 13698 13699 13700 0 13701 13702 13703 0 13704 13705 13706 0 13707 13708 13709 0 13710 13711 13712 0 13713 13714 13715 0 13716 13717 13718 0 13719 13720 13721 0 13722 13723 13724 0 13725 13726 13727 0 13728 13729 13730 0 13731 13732 13733 0 13734 13735 13736 0 13737 13738 13739 0 13740 13741 13742 0 13743 13744 13745 0 13746 13747 13748 0 13749 13750 13751 0 13752 13753 13754 0 13755 13756 13757 0 13758 13759 13760 0 13761 13762 13763 0 13764 13765 13766 0 13767 13768 13769 0 13770 13771 13772 0 13773 13774 13775 0 13776 13777 13778 0 13779 13780 13781 0 13782 13783 13784 0 13785 13786 13787 0 13788 13789 13790 0 13791 13792 13793 0 13794 13795 13796 0 13797 13798 13799 0 13800 13801 13802 0 13803 13804 13805 0 13806 13807 13808 0 13809 13810 13811 0 13812 13813 13814 0 13815 13816 13817 0 13818 13819 13820 0 13821 13822 13823 0 13824 13825 13826 0 13827 13828 13829 0 13830 13831 13832 0 13833 13834 13835 0 13836 13837 13838 0 13839 13840 13841 0 13842 13843 13844 0 13845 13846 13847 0 13848 13849 13850 0 13851 13852 13853 0 13854 13855 13856 0 13857 13858 13859 0 13860 13861 13862 0 13863 13864 13865 0 13866 13867 13868 0 13869 13870 13871 0 13872 13873 13874 0 13875 13876 13877 0 13878 13879 13880 0 13881 13882 13883 0 13884 13885 13886 0 13887 13888 13889 0 13890 13891 13892 0 13893 13894 13895 0 13896 13897 13898 0 13899 13900 13901 0 13902 13903 13904 0 13905 13906 13907 0 13908 13909 13910 0 13911 13912 13913 0 13914 13915 13916 0 13917 13918 13919 0 13920 13921 13922 0 13923 13924 13925 0 13926 13927 13928 0 13929 13930 13931 0 13932 13933 13934 0 13935 13936 13937 0 13938 13939 13940 0 13941 13942 13943 0 13944 13945 13946 0 13947 13948 13949 0 13950 13951 13952 0 13953 13954 13955 0 13956 13957 13958 0 13959 13960 13961 0 13962 13963 13964 0 13965 13966 13967 0 13968 13969 13970 0 13971 13972 13973 0 13974 13975 13976 0 13977 13978 13979 0 13980 13981 13982 0 13983 13984 13985 0 13986 13987 13988 0 13989 13990 13991 0 13992 13993 13994 0 13995 13996 13997 0 13998 13999 14000 0 14001 14002 14003 0 14004 14005 14006 0 14007 14008 14009 0 14010 14011 14012 0 14013 14014 14015 0 14016 14017 14018 0 14019 14020 14021 0 14022 14023 14024 0 14025 14026 14027 0 14028 14029 14030 0 14031 14032 14033 0 14034 14035 14036 0 14037 14038 14039 0 14040 14041 14042 0 14043 14044 14045 0 14046 14047 14048 0 14049 14050 14051 0 14052 14053 14054 0 14055 14056 14057 0 14058 14059 14060 0 14061 14062 14063 0 14064 14065 14066 0 14067 14068 14069 0 14070 14071 14072 0 14073 14074 14075 0 14076 14077 14078 0 14079 14080 14081 0 14082 14083 14084 0 14085 14086 14087 0 14088 14089 14090 0 14091 14092 14093 0 14094 14095 14096 0 14097 14098 14099 0 14100 14101 14102 0 14103 14104 14105 0 14106 14107 14108 0 14109 14110 14111 0 14112 14113 14114 0 14115 14116 14117 0 14118 14119 14120 0 14121 14122 14123 0 14124 14125 14126 0 14127 14128 14129 0 14130 14131 14132 0 14133 14134 14135 0 14136 14137 14138 0 14139 14140 14141 0 14142 14143 14144 0 14145 14146 14147 0 14148 14149 14150 0 14151 14152 14153 0 14154 14155 14156 0 14157 14158 14159 0 14160 14161 14162 0 14163 14164 14165 0 14166 14167 14168 0 14169 14170 14171 0 14172 14173 14174 0 14175 14176 14177 0 14178 14179 14180 0 14181 14182 14183 0 14184 14185 14186 0 14187 14188 14189 0 14190 14191 14192 0 14193 14194 14195 0 14196 14197 14198 0 14199 14200 14201 0 14202 14203 14204 0 14205 14206 14207 0 14208 14209 14210 0 14211 14212 14213 0 14214 14215 14216 0 14217 14218 14219 0 14220 14221 14222 0 14223 14224 14225 0 14226 14227 14228 0 14229 14230 14231 0 14232 14233 14234 0 14235 14236 14237 0 14238 14239 14240 0 14241 14242 14243 0 14244 14245 14246 0 14247 14248 14249 0 14250 14251 14252 0 14253 14254 14255 0 14256 14257 14258 0 14259 14260 14261 0 14262 14263 14264 0 14265 14266 14267 0 14268 14269 14270 0 14271 14272 14273 0 14274 14275 14276 0 14277 14278 14279 0 14280 14281 14282 0 14283 14284 14285 0 14286 14287 14288 0 14289 14290 14291 0 14292 14293 14294 0 14295 14296 14297 0 14298 14299 14300 0 14301 14302 14303 0 14304 14305 14306 0 14307 14308 14309 0 14310 14311 14312 0 14313 14314 14315 0 14316 14317 14318 0 14319 14320 14321 0 14322 14323 14324 0 14325 14326 14327 0 14328 14329 14330 0 14331 14332 14333 0 14334 14335 14336 0 14337 14338 14339 0 14340 14341 14342 0 14343 14344 14345 0 14346 14347 14348 0 14349 14350 14351 0 14352 14353 14354 0 14355 14356 14357 0 14358 14359 14360 0 14361 14362 14363 0 14364 14365 14366 0 14367 14368 14369 0 14370 14371 14372 0 14373 14374 14375 0 14376 14377 14378 0 14379 14380 14381 0 14382 14383 14384 0 14385 14386 14387 0 14388 14389 14390 0 14391 14392 14393 0 14394 14395 14396 0 14397 14398 14399 0 14400 14401 14402 0 14403 14404 14405 0 14406 14407 14408 0 14409 14410 14411 0 14412 14413 14414 0 14415 14416 14417 0 14418 14419 14420 0 14421 14422 14423 0 14424 14425 14426 0 14427 14428 14429 0 14430 14431 14432 0 14433 14434 14435 0 14436 14437 14438 0 14439 14440 14441 0 14442 14443 14444 0 14445 14446 14447 0 14448 14449 14450 0 14451 14452 14453 0 14454 14455 14456 0 14457 14458 14459 0 14460 14461 14462 0 14463 14464 14465 0 14466 14467 14468 0 14469 14470 14471 0 14472 14473 14474 0 14475 14476 14477 0 14478 14479 14480 0 14481 14482 14483 0 14484 14485 14486 0 14487 14488 14489 0 14490 14491 14492 0 14493 14494 14495 0 14496 14497 14498 0 14499 14500 14501 0 14502 14503 14504 0 14505 14506 14507 0 14508 14509 14510 0 14511 14512 14513 0 14514 14515 14516 0 14517 14518 14519 0 14520 14521 14522 0 14523 14524 14525 0 14526 14527 14528 0 14529 14530 14531 0 14532 14533 14534 0 14535 14536 14537 0 14538 14539 14540 0 14541 14542 14543 0 14544 14545 14546 0 14547 14548 14549 0 14550 14551 14552 0 14553 14554 14555 0 14556 14557 14558 0 14559 14560 14561 0 14562 14563 14564 0 14565 14566 14567 0 14568 14569 14570 0 14571 14572 14573 0 14574 14575 14576 0 14577 14578 14579 0 14580 14581 14582 0 14583 14584 14585 0 14586 14587 14588 0 14589 14590 14591 0 14592 14593 14594 0 14595 14596 14597 0 14598 14599 14600 0 14601 14602 14603 0 14604 14605 14606 0 14607 14608 14609 0 14610 14611 14612 0 14613 14614 14615 0 14616 14617 14618 0 14619 14620 14621 0 14622 14623 14624 0 14625 14626 14627 0 14628 14629 14630 0 14631 14632 14633 0 14634 14635 14636 0 14637 14638 14639 0 14640 14641 14642 0 14643 14644 14645 0 14646 14647 14648 0 14649 14650 14651 0 14652 14653 14654 0 14655 14656 14657 0 14658 14659 14660 0 14661 14662 14663 0 14664 14665 14666 0 14667 14668 14669 0 14670 14671 14672 0 14673 14674 14675 0 14676 14677 14678 0 14679 14680 14681 0 14682 14683 14684 0 14685 14686 14687 0 14688 14689 14690 0 14691 14692 14693 0 14694 14695 14696 0 14697 14698 14699 0 14700 14701 14702 0 14703 14704 14705 0 14706 14707 14708 0 14709 14710 14711 0 14712 14713 14714 0 14715 14716 14717 0 14718 14719 14720 0 14721 14722 14723 0 14724 14725 14726 0 14727 14728 14729 0 14730 14731 14732 0 14733 14734 14735 0 14736 14737 14738 0 14739 14740 14741 0 14742 14743 14744 0 14745 14746 14747 0 14748 14749 14750 0 14751 14752 14753 0 14754 14755 14756 0 14757 14758 14759 0 14760 14761 14762 0 14763 14764 14765 0 14766 14767 14768 0 14769 14770 14771 0 14772 14773 14774 0 14775 14776 14777 0 14778 14779 14780 0 14781 14782 14783 0 14784 14785 14786 0 14787 14788 14789 0 14790 14791 14792 0 14793 14794 14795 0 14796 14797 14798 0 14799 14800 14801 0 14802 14803 14804 0 14805 14806 14807 0 14808 14809 14810 0 14811 14812 14813 0 14814 14815 14816 0 14817 14818 14819 0 14820 14821 14822 0 14823 14824 14825 0 14826 14827 14828 0 14829 14830 14831 0 14832 14833 14834 0 14835 14836 14837 0 14838 14839 14840 0 14841 14842 14843 0 14844 14845 14846 0 14847 14848 14849 0 14850 14851 14852 0 14853 14854 14855 0 14856 14857 14858 0 14859 14860 14861 0 14862 14863 14864 0 14865 14866 14867 0 14868 14869 14870 0 14871 14872 14873 0 14874 14875 14876 0 14877 14878 14879 0 14880 14881 14882 0 14883 14884 14885 0 14886 14887 14888 0 14889 14890 14891 0 14892 14893 14894 0 14895 14896 14897 0 14898 14899 14900 0 14901 14902 14903 0 14904 14905 14906 0 14907 14908 14909 0 14910 14911 14912 0 14913 14914 14915 0 14916 14917 14918 0 14919 14920 14921 0 14922 14923 14924 0 14925 14926 14927 0 14928 14929 14930 0 14931 14932 14933 0 14934 14935 14936 0 14937 14938 14939 0 14940 14941 14942 0 14943 14944 14945 0 14946 14947 14948 0 14949 14950 14951 0 14952 14953 14954 0 14955 14956 14957 0 14958 14959 14960 0 14961 14962 14963 0 14964 14965 14966 0 14967 14968 14969 0 14970 14971 14972 0 14973 14974 14975 0 14976 14977 14978 0 14979 14980 14981 0 14982 14983 14984 0 14985 14986 14987 0 14988 14989 14990 0 14991 14992 14993 0 14994 14995 14996 0 14997 14998 14999 0 15000 15001 15002 0 15003 15004 15005 0 15006 15007 15008 0 15009 15010 15011 0 15012 15013 15014 0 15015 15016 15017 0 15018 15019 15020 0 15021 15022 15023 0 15024 15025 15026 0 15027 15028 15029 0 15030 15031 15032 0 15033 15034 15035 0 15036 15037 15038 0 15039 15040 15041 0 15042 15043 15044 0 15045 15046 15047 0 15048 15049 15050 0 15051 15052 15053 0 15054 15055 15056 0 15057 15058 15059 0 15060 15061 15062 0 15063 15064 15065 0 15066 15067 15068 0 15069 15070 15071 0 15072 15073 15074 0 15075 15076 15077 0 15078 15079 15080 0 15081 15082 15083 0 15084 15085 15086 0 15087 15088 15089 0 15090 15091 15092 0 15093 15094 15095 0 15096 15097 15098 0 15099 15100 15101 0 15102 15103 15104 0 15105 15106 15107 0 15108 15109 15110 0 15111 15112 15113 0 15114 15115 15116 0 15117 15118 15119 0 15120 15121 15122 0 15123 15124 15125 0 15126 15127 15128 0 15129 15130 15131 0 15132 15133 15134 0 15135 15136 15137 0 15138 15139 15140 0 15141 15142 15143 0 15144 15145 15146 0 15147 15148 15149 0 15150 15151 15152 0 15153 15154 15155 0 15156 15157 15158 0 15159 15160 15161 0 15162 15163 15164 0 15165 15166 15167 0 15168 15169 15170 0 15171 15172 15173 0 15174 15175 15176 0 15177 15178 15179 0 15180 15181 15182 0 15183 15184 15185 0 15186 15187 15188 0 15189 15190 15191 0 15192 15193 15194 0 15195 15196 15197 0 15198 15199 15200 0 15201 15202 15203 0 15204 15205 15206 0 15207 15208 15209 0 15210 15211 15212 0 15213 15214 15215 0 15216 15217 15218 0 15219 15220 15221 0 15222 15223 15224 0 15225 15226 15227 0 15228 15229 15230 0 15231 15232 15233 0 15234 15235 15236 0 15237 15238 15239 0 15240 15241 15242 0 15243 15244 15245 0 15246 15247 15248 0 15249 15250 15251 0 15252 15253 15254 0 15255 15256 15257 0 15258 15259 15260 0 15261 15262 15263 0 15264 15265 15266 0 15267 15268 15269 0 15270 15271 15272 0 15273 15274 15275 0 15276 15277 15278 0 15279 15280 15281 0 15282 15283 15284 0 15285 15286 15287 0 15288 15289 15290 0 15291 15292 15293 0 15294 15295 15296 0 15297 15298 15299 0 15300 15301 15302 0 15303 15304 15305 0 15306 15307 15308 0 15309 15310 15311 0 15312 15313 15314 0 15315 15316 15317 0 15318 15319 15320 0 15321 15322 15323 0 15324 15325 15326 0 15327 15328 15329 0 15330 15331 15332 0 15333 15334 15335 0 15336 15337 15338 0 15339 15340 15341 0 15342 15343 15344 0 15345 15346 15347 0 15348 15349 15350 0 15351 15352 15353 0 15354 15355 15356 0 15357 15358 15359 0 15360 15361 15362 0 15363 15364 15365 0 15366 15367 15368 0 15369 15370 15371 0 15372 15373 15374 0 15375 15376 15377 0 15378 15379 15380 0 15381 15382 15383 0 15384 15385 15386 0 15387 15388 15389 0 15390 15391 15392 0 15393 15394 15395 0 15396 15397 15398 0 15399 15400 15401 0 15402 15403 15404 0 15405 15406 15407 0 15408 15409 15410 0 15411 15412 15413 0 15414 15415 15416 0 15417 15418 15419 0 15420 15421 15422 0 15423 15424 15425 0 15426 15427 15428 0 15429 15430 15431 0 15432 15433 15434 0 15435 15436 15437 0 15438 15439 15440 0 15441 15442 15443 0 15444 15445 15446 0 15447 15448 15449 0 15450 15451 15452 0 15453 15454 15455 0 15456 15457 15458 0 15459 15460 15461 0 15462 15463 15464 0 15465 15466 15467 0 15468 15469 15470 0 15471 15472 15473 0 15474 15475 15476 0 15477 15478 15479 0 15480 15481 15482 0 15483 15484 15485 0 15486 15487 15488 0 15489 15490 15491 0 15492 15493 15494 0 15495 15496 15497 0 15498 15499 15500 0 15501 15502 15503 0 15504 15505 15506 0 15507 15508 15509 0 15510 15511 15512 0 15513 15514 15515 0 15516 15517 15518 0 15519 15520 15521 0 15522 15523 15524 0 15525 15526 15527 0 15528 15529 15530 0 15531 15532 15533 0 15534 15535 15536 0 15537 15538 15539 0 15540 15541 15542 0 15543 15544 15545 0 15546 15547 15548 0 15549 15550 15551 0 15552 15553 15554 0 15555 15556 15557 0 15558 15559 15560 0 15561 15562 15563 0 15564 15565 15566 0 15567 15568 15569 0 15570 15571 15572 0 15573 15574 15575 0 15576 15577 15578 0 15579 15580 15581 0 15582 15583 15584 0 15585 15586 15587 0 15588 15589 15590 0 15591 15592 15593 0 15594 15595 15596 0 15597 15598 15599 0 15600 15601 15602 0 15603 15604 15605 0 15606 15607 15608 0 15609 15610 15611 0 15612 15613 15614 0 15615 15616 15617 0 15618 15619 15620 0 15621 15622 15623 0 15624 15625 15626 0 15627 15628 15629 0 15630 15631 15632 0 15633 15634 15635 0 15636 15637 15638 0 15639 15640 15641 0 15642 15643 15644 0 15645 15646 15647 0 15648 15649 15650 0 15651 15652 15653 0 15654 15655 15656 0 15657 15658 15659 0 15660 15661 15662 0 15663 15664 15665 0 15666 15667 15668 0 15669 15670 15671 0 15672 15673 15674 0 15675 15676 15677 0 15678 15679 15680 0 15681 15682 15683 0 15684 15685 15686 0 15687 15688 15689 0 15690 15691 15692 0 15693 15694 15695 0 15696 15697 15698 0 15699 15700 15701 0 15702 15703 15704 0 15705 15706 15707 0 15708 15709 15710 0 15711 15712 15713 0 15714 15715 15716 0 15717 15718 15719 0 15720 15721 15722 0 15723 15724 15725 0 15726 15727 15728 0 15729 15730 15731 0 15732 15733 15734 0 15735 15736 15737 0 15738 15739 15740 0 15741 15742 15743 0 15744 15745 15746 0 15747 15748 15749 0 15750 15751 15752 0 15753 15754 15755 0 15756 15757 15758 0 15759 15760 15761 0 15762 15763 15764 0 15765 15766 15767 0 15768 15769 15770 0 15771 15772 15773 0 15774 15775 15776 0 15777 15778 15779 0 15780 15781 15782 0 15783 15784 15785 0 15786 15787 15788 0 15789 15790 15791 0 15792 15793 15794 0 15795 15796 15797 0 15798 15799 15800 0 15801 15802 15803 0 15804 15805 15806 0 15807 15808 15809 0 15810 15811 15812 0 15813 15814 15815 0 15816 15817 15818 0 15819 15820 15821 0 15822 15823 15824 0 15825 15826 15827 0 15828 15829 15830 0 15831 15832 15833 0 15834 15835 15836 0 15837 15838 15839 0 15840 15841 15842 0 15843 15844 15845 0 15846 15847 15848 0 15849 15850 15851 0 15852 15853 15854 0 15855 15856 15857 0 15858 15859 15860 0 15861 15862 15863 0 15864 15865 15866 0 15867 15868 15869 0 15870 15871 15872 0 15873 15874 15875 0 15876 15877 15878 0 15879 15880 15881 0 15882 15883 15884 0 15885 15886 15887 0 15888 15889 15890 0 15891 15892 15893 0 15894 15895 15896 0 15897 15898 15899 0 15900 15901 15902 0 15903 15904 15905 0 15906 15907 15908 0 15909 15910 15911 0 15912 15913 15914 0 15915 15916 15917 0 15918 15919 15920 0 15921 15922 15923 0 15924 15925 15926 0 15927 15928 15929 0 15930 15931 15932 0 15933 15934 15935 0 15936 15937 15938 0 15939 15940 15941 0 15942 15943 15944 0 15945 15946 15947 0 15948 15949 15950 0 15951 15952 15953 0 15954 15955 15956 0 15957 15958 15959 0 15960 15961 15962 0 15963 15964 15965 0 15966 15967 15968 0 15969 15970 15971 0 15972 15973 15974 0 15975 15976 15977 0 15978 15979 15980 0 15981 15982 15983 0 15984 15985 15986 0 15987 15988 15989 0 15990 15991 15992 0 15993 15994 15995 0 15996 15997 15998 0 15999 16000 16001 0 16002 16003 16004 0 16005 16006 16007 0 16008 16009 16010 0 16011 16012 16013 0 16014 16015 16016 0 16017 16018 16019 0 16020 16021 16022 0 16023 16024 16025 0 16026 16027 16028 0 16029 16030 16031 0 16032 16033 16034 0 16035 16036 16037 0 16038 16039 16040 0 16041 16042 16043 0 16044 16045 16046 0 16047 16048 16049 0 16050 16051 16052 0 16053 16054 16055 0 16056 16057 16058 0 16059 16060 16061 0 16062 16063 16064 0 16065 16066 16067 0 16068 16069 16070 0 16071 16072 16073 0 16074 16075 16076 0 16077 16078 16079 0 16080 16081 16082 0 16083 16084 16085 0 16086 16087 16088 0 16089 16090 16091 0 16092 16093 16094 0 16095 16096 16097 0 16098 16099 16100 0 16101 16102 16103 0 16104 16105 16106 0 16107 16108 16109 0 16110 16111 16112 0 16113 16114 16115 0 16116 16117 16118 0 16119 16120 16121 0 16122 16123 16124 0 16125 16126 16127 0 16128 16129 16130 0 16131 16132 16133 0 16134 16135 16136 0 16137 16138 16139 0 16140 16141 16142 0 16143 16144 16145 0 16146 16147 16148 0 16149 16150 16151 0 16152 16153 16154 0 16155 16156 16157 0 16158 16159 16160 0 16161 16162 16163 0 16164 16165 16166 0 16167 16168 16169 0 16170 16171 16172 0 16173 16174 16175 0 16176 16177 16178 0 16179 16180 16181 0 16182 16183 16184 0 16185 16186 16187 0 16188 16189 16190 0 16191 16192 16193 0 16194 16195 16196 0 16197 16198 16199 0 16200 16201 16202 0 16203 16204 16205 0 16206 16207 16208 0 16209 16210 16211 0 16212 16213 16214 0 16215 16216 16217 0 16218 16219 16220 0 16221 16222 16223 0 16224 16225 16226 0 16227 16228 16229 0 16230 16231 16232 0 16233 16234 16235 0 16236 16237 16238 0 16239 16240 16241 0 16242 16243 16244 0 16245 16246 16247 0 16248 16249 16250 0 16251 16252 16253 0 16254 16255 16256 0 16257 16258 16259 0 16260 16261 16262 0 16263 16264 16265 0 16266 16267 16268 0 16269 16270 16271 0 16272 16273 16274 0 16275 16276 16277 0 16278 16279 16280 0 16281 16282 16283 0 16284 16285 16286 0 16287 16288 16289 0 16290 16291 16292 0 16293 16294 16295 0 16296 16297 16298 0 16299 16300 16301 0 16302 16303 16304 0 16305 16306 16307 0 16308 16309 16310 0 16311 16312 16313 0 16314 16315 16316 0 16317 16318 16319 0 16320 16321 16322 0 16323 16324 16325 0 16326 16327 16328 0 16329 16330 16331 0 16332 16333 16334 0 16335 16336 16337 0 16338 16339 16340 0 16341 16342 16343 0 16344 16345 16346 0 16347 16348 16349 0 16350 16351 16352 0 16353 16354 16355 0 16356 16357 16358 0 16359 16360 16361 0 16362 16363 16364 0 16365 16366 16367 0 16368 16369 16370 0 16371 16372 16373 0 16374 16375 16376 0 16377 16378 16379 0 16380 16381 16382 0 16383 16384 16385 0 16386 16387 16388 0 16389 16390 16391 0 16392 16393 16394 0 16395 16396 16397 0 16398 16399 16400 0 16401 16402 16403 0 16404 16405 16406 0 16407 16408 16409 0 16410 16411 16412 0 16413 16414 16415 0 16416 16417 16418 0 16419 16420 16421 0 16422 16423 16424 0 16425 16426 16427 0 16428 16429 16430 0 16431 16432 16433 0 16434 16435 16436 0 16437 16438 16439 0 16440 16441 16442 0 16443 16444 16445 0 16446 16447 16448 0 16449 16450 16451 0 16452 16453 16454 0 16455 16456 16457 0 16458 16459 16460 0 16461 16462 16463 0 16464 16465 16466 0 16467 16468 16469 0 16470 16471 16472 0 16473 16474 16475 0 16476 16477 16478 0 16479 16480 16481 0 16482 16483 16484 0 16485 16486 16487 0 16488 16489 16490 0 16491 16492 16493 0 16494 16495 16496 0 16497 16498 16499 0 16500 16501 16502 0 16503 16504 16505 0 16506 16507 16508 0 16509 16510 16511 0 16512 16513 16514 0 16515 16516 16517 0 16518 16519 16520 0 16521 16522 16523 0 16524 16525 16526 0 16527 16528 16529 0 16530 16531 16532 0 16533 16534 16535 0 16536 16537 16538 0 16539 16540 16541 0 16542 16543 16544 0 16545 16546 16547 0 16548 16549 16550 0 16551 16552 16553 0 16554 16555 16556 0 16557 16558 16559 0 16560 16561 16562 0 16563 16564 16565 0 16566 16567 16568 0 16569 16570 16571 0 16572 16573 16574 0 16575 16576 16577 0 16578 16579 16580 0 16581 16582 16583 0 16584 16585 16586 0 16587 16588 16589 0 16590 16591 16592 0 16593 16594 16595 0 16596 16597 16598 0 16599 16600 16601 0 16602 16603 16604 0 16605 16606 16607 0 16608 16609 16610 0 16611 16612 16613 0 16614 16615 16616 0 16617 16618 16619 0 16620 16621 16622 0 16623 16624 16625 0 16626 16627 16628 0 16629 16630 16631 0 16632 16633 16634 0 16635 16636 16637 0 16638 16639 16640 0 16641 16642 16643 0 16644 16645 16646 0 16647 16648 16649 0 16650 16651 16652 0 16653 16654 16655 0 16656 16657 16658 0 16659 16660 16661 0 16662 16663 16664 0 16665 16666 16667 0 16668 16669 16670 0 16671 16672 16673 0 16674 16675 16676 0 16677 16678 16679 0 16680 16681 16682 0 16683 16684 16685 0 16686 16687 16688 0 16689 16690 16691 0 16692 16693 16694 0 16695 16696 16697 0 16698 16699 16700 0 16701 16702 16703 0 16704 16705 16706 0 16707 16708 16709 0 16710 16711 16712 0 16713 16714 16715 0 16716 16717 16718 0 16719 16720 16721 0 16722 16723 16724 0 16725 16726 16727 0 16728 16729 16730 0 16731 16732 16733 0 16734 16735 16736 0 16737 16738 16739 0 16740 16741 16742 0 16743 16744 16745 0 16746 16747 16748 0 16749 16750 16751 0 16752 16753 16754 0 16755 16756 16757 0 16758 16759 16760 0 16761 16762 16763 0 16764 16765 16766 0 16767 16768 16769 0 16770 16771 16772 0 16773 16774 16775 0 16776 16777 16778 0 16779 16780 16781 0 16782 16783 16784 0 16785 16786 16787 0 16788 16789 16790 0 16791 16792 16793 0 16794 16795 16796 0 16797 16798 16799 0 16800 16801 16802 0 16803 16804 16805 0 16806 16807 16808 0 16809 16810 16811 0 16812 16813 16814 0 16815 16816 16817 0 16818 16819 16820 0 16821 16822 16823 0 16824 16825 16826 0 16827 16828 16829 0 16830 16831 16832 0 16833 16834 16835 0 16836 16837 16838 0 16839 16840 16841 0 16842 16843 16844 0 16845 16846 16847 0 16848 16849 16850 0 16851 16852 16853 0 16854 16855 16856 0 16857 16858 16859 0 16860 16861 16862 0 16863 16864 16865 0 16866 16867 16868 0 16869 16870 16871 0 16872 16873 16874 0 16875 16876 16877 0 16878 16879 16880 0 16881 16882 16883 0 16884 16885 16886 0 16887 16888 16889 0 16890 16891 16892 0 16893 16894 16895 0 16896 16897 16898 0 16899 16900 16901 0 16902 16903 16904 0 16905 16906 16907 0 16908 16909 16910 0 16911 16912 16913 0 16914 16915 16916 0 16917 16918 16919 0 16920 16921 16922 0 16923 16924 16925 0 16926 16927 16928 0 16929 16930 16931 0 16932 16933 16934 0 16935 16936 16937 0 16938 16939 16940 0 16941 16942 16943 0 16944 16945 16946 0 16947 16948 16949 0 16950 16951 16952 0 16953 16954 16955 0 16956 16957 16958 0 16959 16960 16961 0 16962 16963 16964 0 16965 16966 16967 0 16968 16969 16970 0 16971 16972 16973 0 16974 16975 16976 0 16977 16978 16979 0 16980 16981 16982 0 16983 16984 16985 0 16986 16987 16988 0 16989 16990 16991 0 16992 16993 16994 0 16995 16996 16997 0 16998 16999 17000 0 17001 17002 17003 0 17004 17005 17006 0 17007 17008 17009 0 17010 17011 17012 0 17013 17014 17015 0 17016 17017 17018 0 17019 17020 17021 0 17022 17023 17024 0 17025 17026 17027 0 17028 17029 17030 0 17031 17032 17033 0 17034 17035 17036 0 17037 17038 17039 0 17040 17041 17042 0 17043 17044 17045 0 17046 17047 17048 0 17049 17050 17051 0 17052 17053 17054 0 17055 17056 17057 0 17058 17059 17060 0 17061 17062 17063 0 17064 17065 17066 0 17067 17068 17069 0 17070 17071 17072 0 17073 17074 17075 0 17076 17077 17078 0 17079 17080 17081 0 17082 17083 17084 0 17085 17086 17087 0 17088 17089 17090 0 17091 17092 17093 0 17094 17095 17096 0 17097 17098 17099 0 17100 17101 17102 0 17103 17104 17105 0 17106 17107 17108 0 17109 17110 17111 0 17112 17113 17114 0 17115 17116 17117 0 17118 17119 17120 0 17121 17122 17123 0 17124 17125 17126 0 17127 17128 17129 0 17130 17131 17132 0 17133 17134 17135 0 17136 17137 17138 0 17139 17140 17141 0 17142 17143 17144 0 17145 17146 17147 0 17148 17149 17150 0 17151 17152 17153 0 17154 17155 17156 0 17157 17158 17159 0 17160 17161 17162 0 17163 17164 17165 0 17166 17167 17168 0 17169 17170 17171 0 17172 17173 17174 0 17175 17176 17177 0 17178 17179 17180 0 17181 17182 17183 0 17184 17185 17186 0 17187 17188 17189 0 17190 17191 17192 0 17193 17194 17195 0 17196 17197 17198 0 17199 17200 17201 0 17202 17203 17204 0 17205 17206 17207 0 17208 17209 17210 0 17211 17212 17213 0 17214 17215 17216 0 17217 17218 17219 0 17220 17221 17222 0 17223 17224 17225 0 17226 17227 17228 0 17229 17230 17231 0 17232 17233 17234 0 17235 17236 17237 0 17238 17239 17240 0 17241 17242 17243 0 17244 17245 17246 0 17247 17248 17249 0 17250 17251 17252 0 17253 17254 17255 0 17256 17257 17258 0 17259 17260 17261 0 17262 17263 17264 0 17265 17266 17267 0 17268 17269 17270 0 17271 17272 17273 0 17274 17275 17276 0 17277 17278 17279 0 17280 17281 17282 0 17283 17284 17285 0 17286 17287 17288 0 17289 17290 17291 0 17292 17293 17294 0 17295 17296 17297 0 17298 17299 17300 0 17301 17302 17303 0 17304 17305 17306 0 17307 17308 17309 0 17310 17311 17312 0 17313 17314 17315 0 17316 17317 17318 0 17319 17320 17321 0 17322 17323 17324 0 17325 17326 17327 0 17328 17329 17330 0 17331 17332 17333 0 17334 17335 17336 0 17337 17338 17339 0 17340 17341 17342 0 17343 17344 17345 0 17346 17347 17348 0 17349 17350 17351 0 17352 17353 17354 0 17355 17356 17357 0 17358 17359 17360 0 17361 17362 17363 0 17364 17365 17366 0 17367 17368 17369 0 17370 17371 17372 0 17373 17374 17375 0 17376 17377 17378 0 17379 17380 17381 0 17382 17383 17384 0 17385 17386 17387 0 17388 17389 17390 0 17391 17392 17393 0 17394 17395 17396 0 17397 17398 17399 0 17400 17401 17402 0 17403 17404 17405 0 17406 17407 17408 0 17409 17410 17411 0 17412 17413 17414 0 17415 17416 17417 0 17418 17419 17420 0 17421 17422 17423 0 17424 17425 17426 0 17427 17428 17429 0 17430 17431 17432 0 17433 17434 17435 0 17436 17437 17438 0 17439 17440 17441 0 17442 17443 17444 0 17445 17446 17447 0 17448 17449 17450 0 17451 17452 17453 0 17454 17455 17456 0 17457 17458 17459 0 17460 17461 17462 0 17463 17464 17465 0 17466 17467 17468 0 17469 17470 17471 0 17472 17473 17474 0 17475 17476 17477 0 17478 17479 17480 0 17481 17482 17483 0 17484 17485 17486 0 17487 17488 17489 0 17490 17491 17492 0 17493 17494 17495 0 17496 17497 17498 0 17499 17500 17501 0 17502 17503 17504 0 17505 17506 17507 0 17508 17509 17510 0 17511 17512 17513 0 17514 17515 17516 0 17517 17518 17519 0 17520 17521 17522 0 17523 17524 17525 0 17526 17527 17528 0 17529 17530 17531 0 17532 17533 17534 0 17535 17536 17537 0 17538 17539 17540 0 17541 17542 17543 0 17544 17545 17546 0 17547 17548 17549 0 17550 17551 17552 0 17553 17554 17555 0 17556 17557 17558 0 17559 17560 17561 0 17562 17563 17564 0 17565 17566 17567 0 17568 17569 17570 0 17571 17572 17573 0 17574 17575 17576 0 17577 17578 17579 0 17580 17581 17582 0 17583 17584 17585 0 17586 17587 17588 0 17589 17590 17591 0 17592 17593 17594 0 17595 17596 17597 0 17598 17599 17600 0 17601 17602 17603 0 17604 17605 17606 0 17607 17608 17609 0 17610 17611 17612 0 17613 17614 17615 0 17616 17617 17618 0 17619 17620 17621 0 17622 17623 17624 0 17625 17626 17627 0 17628 17629 17630 0 17631 17632 17633 0 17634 17635 17636 0 17637 17638 17639 0 17640 17641 17642 0 17643 17644 17645 0 17646 17647 17648 0 17649 17650 17651 0 17652 17653 17654 0 17655 17656 17657 0 17658 17659 17660 0 17661 17662 17663 0 17664 17665 17666 0 17667 17668 17669 0 17670 17671 17672 0 17673 17674 17675 0 17676 17677 17678 0 17679 17680 17681 0 17682 17683 17684 0 17685 17686 17687 0 17688 17689 17690 0 17691 17692 17693 0 17694 17695 17696 0 17697 17698 17699 0 17700 17701 17702 0 17703 17704 17705 0 17706 17707 17708 0 17709 17710 17711 0 17712 17713 17714 0 17715 17716 17717 0 17718 17719 17720 0 17721 17722 17723 0 17724 17725 17726 0 17727 17728 17729 0 17730 17731 17732 0 17733 17734 17735 0 17736 17737 17738 0 17739 17740 17741 0 17742 17743 17744 0 17745 17746 17747 0 17748 17749 17750 0 17751 17752 17753 0 17754 17755 17756 0 17757 17758 17759 0 17760 17761 17762 0 17763 17764 17765 0 17766 17767 17768 0 17769 17770 17771 0 17772 17773 17774 0 17775 17776 17777 0 17778 17779 17780 0 17781 17782 17783 0 17784 17785 17786 0 17787 17788 17789 0 17790 17791 17792 0 17793 17794 17795 0 17796 17797 17798 0 17799 17800 17801 0 17802 17803 17804 0 17805 17806 17807 0 17808 17809 17810 0 17811 17812 17813 0 17814 17815 17816 0 17817 17818 17819 0 17820 17821 17822 0 17823 17824 17825 0 17826 17827 17828 0 17829 17830 17831 0 17832 17833 17834 0 17835 17836 17837 0 17838 17839 17840 0 17841 17842 17843 0 17844 17845 17846 0 17847 17848 17849 0 17850 17851 17852 0 17853 17854 17855 0 17856 17857 17858 0 17859 17860 17861 0 17862 17863 17864 0 17865 17866 17867 0 17868 17869 17870 0 17871 17872 17873 0 17874 17875 17876 0 17877 17878 17879 0 17880 17881 17882 0 17883 17884 17885 0 17886 17887 17888 0 17889 17890 17891 0 17892 17893 17894 0 17895 17896 17897 0 17898 17899 17900 0 17901 17902 17903 0 17904 17905 17906 0 17907 17908 17909 0 17910 17911 17912 0 17913 17914 17915 0 17916 17917 17918 0 17919 17920 17921 0 17922 17923 17924 0 17925 17926 17927 0 17928 17929 17930 0 17931 17932 17933 0 17934 17935 17936 0 17937 17938 17939 0 17940 17941 17942 0 17943 17944 17945 0 17946 17947 17948 0 17949 17950 17951 0 17952 17953 17954 0 17955 17956 17957 0 17958 17959 17960 0 17961 17962 17963 0 17964 17965 17966 0 17967 17968 17969 0 17970 17971 17972 0 17973 17974 17975 0 17976 17977 17978 0 17979 17980 17981 0 17982 17983 17984 0 17985 17986 17987 0 17988 17989 17990 0 17991 17992 17993 0 17994 17995 17996 0 17997 17998 17999 0 18000 18001 18002 0 18003 18004 18005 0 18006 18007 18008 0 18009 18010 18011 0 18012 18013 18014 0 18015 18016 18017 0 18018 18019 18020 0 18021 18022 18023 0 18024 18025 18026 0 18027 18028 18029 0 18030 18031 18032 0 18033 18034 18035 0 18036 18037 18038 0 18039 18040 18041 0 18042 18043 18044 0 18045 18046 18047 0 18048 18049 18050 0 18051 18052 18053 0 18054 18055 18056 0 18057 18058 18059 0 18060 18061 18062 0 18063 18064 18065 0 18066 18067 18068 0 18069 18070 18071 0 18072 18073 18074 0 18075 18076 18077 0 18078 18079 18080 0 18081 18082 18083 0 18084 18085 18086 0 18087 18088 18089 0 18090 18091 18092 0 18093 18094 18095 0 18096 18097 18098 0 18099 18100 18101 0 18102 18103 18104 0 18105 18106 18107 0 18108 18109 18110 0 18111 18112 18113 0 18114 18115 18116 0 18117 18118 18119 0 18120 18121 18122 0 18123 18124 18125 0 18126 18127 18128 0 18129 18130 18131 0 18132 18133 18134 0 18135 18136 18137 0 18138 18139 18140 0 18141 18142 18143 0 18144 18145 18146 0 18147 18148 18149 0 18150 18151 18152 0 18153 18154 18155 0 18156 18157 18158 0 18159 18160 18161 0 18162 18163 18164 0 18165 18166 18167 0 18168 18169 18170 0 18171 18172 18173 0 18174 18175 18176 0 18177 18178 18179 0 18180 18181 18182 0 18183 18184 18185 0 18186 18187 18188 0 18189 18190 18191 0 18192 18193 18194 0 18195 18196 18197 0 18198 18199 18200 0 18201 18202 18203 0 18204 18205 18206 0 18207 18208 18209 0 18210 18211 18212 0 18213 18214 18215 0 18216 18217 18218 0 18219 18220 18221 0 18222 18223 18224 0 18225 18226 18227 0 18228 18229 18230 0 18231 18232 18233 0 18234 18235 18236 0 18237 18238 18239 0 18240 18241 18242 0 18243 18244 18245 0 18246 18247 18248 0 18249 18250 18251 0 18252 18253 18254 0 18255 18256 18257 0 18258 18259 18260 0 18261 18262 18263 0 18264 18265 18266 0 18267 18268 18269 0 18270 18271 18272 0 18273 18274 18275 0 18276 18277 18278 0 18279 18280 18281 0 18282 18283 18284 0 18285 18286 18287 0 18288 18289 18290 0 18291 18292 18293 0 18294 18295 18296 0 18297 18298 18299 0 18300 18301 18302 0 18303 18304 18305 0 18306 18307 18308 0 18309 18310 18311 0 18312 18313 18314 0 18315 18316 18317 0 18318 18319 18320 0 18321 18322 18323 0 18324 18325 18326 0 18327 18328 18329 0 18330 18331 18332 0 18333 18334 18335 0 18336 18337 18338 0 18339 18340 18341 0 18342 18343 18344 0 18345 18346 18347 0 18348 18349 18350 0 18351 18352 18353 0 18354 18355 18356 0 18357 18358 18359 0 18360 18361 18362 0 18363 18364 18365 0 18366 18367 18368 0 18369 18370 18371 0 18372 18373 18374 0 18375 18376 18377 0 18378 18379 18380 0 18381 18382 18383 0 18384 18385 18386 0 18387 18388 18389 0 18390 18391 18392 0 18393 18394 18395 0 18396 18397 18398 0 18399 18400 18401 0 18402 18403 18404 0 18405 18406 18407 0 18408 18409 18410 0 18411 18412 18413 0 18414 18415 18416 0 18417 18418 18419 0 18420 18421 18422 0 18423 18424 18425 0 18426 18427 18428 0 18429 18430 18431 0 18432 18433 18434 0 18435 18436 18437 0 18438 18439 18440 0 18441 18442 18443 0 18444 18445 18446 0 18447 18448 18449 0 18450 18451 18452 0 18453 18454 18455 0 18456 18457 18458 0 18459 18460 18461 0 18462 18463 18464 0 18465 18466 18467 0 18468 18469 18470 0 18471 18472 18473 0 18474 18475 18476 0 18477 18478 18479 0 18480 18481 18482 0 18483 18484 18485 0 18486 18487 18488 0 18489 18490 18491 0 18492 18493 18494 0 18495 18496 18497 0 18498 18499 18500 0 18501 18502 18503 0 18504 18505 18506 0 18507 18508 18509 0 18510 18511 18512 0 18513 18514 18515 0 18516 18517 18518 0 18519 18520 18521 0 18522 18523 18524 0 18525 18526 18527 0 18528 18529 18530 0 18531 18532 18533 0 18534 18535 18536 0 18537 18538 18539 0 18540 18541 18542 0 18543 18544 18545 0 18546 18547 18548 0 18549 18550 18551 0 18552 18553 18554 0 18555 18556 18557 0 18558 18559 18560 0 18561 18562 18563 0 18564 18565 18566 0 18567 18568 18569 0 18570 18571 18572 0 18573 18574 18575 0 18576 18577 18578 0 18579 18580 18581 0 18582 18583 18584 0 18585 18586 18587 0 18588 18589 18590 0 18591 18592 18593 0 18594 18595 18596 0 18597 18598 18599 0 18600 18601 18602 0 18603 18604 18605 0 18606 18607 18608 0 18609 18610 18611 0 18612 18613 18614 0 18615 18616 18617 0 18618 18619 18620 0 18621 18622 18623 0 18624 18625 18626 0 18627 18628 18629 0 18630 18631 18632 0 18633 18634 18635 0 18636 18637 18638 0 18639 18640 18641 0 18642 18643 18644 0 18645 18646 18647 0 18648 18649 18650 0 18651 18652 18653 0 18654 18655 18656 0 18657 18658 18659 0 18660 18661 18662 0 18663 18664 18665 0 18666 18667 18668 0 18669 18670 18671 0 18672 18673 18674 0 18675 18676 18677 0 18678 18679 18680 0 18681 18682 18683 0 18684 18685 18686 0 18687 18688 18689 0 18690 18691 18692 0 18693 18694 18695 0 18696 18697 18698 0 18699 18700 18701 0 18702 18703 18704 0 18705 18706 18707 0 18708 18709 18710 0 18711 18712 18713 0 18714 18715 18716 0 18717 18718 18719 0 18720 18721 18722 0 18723 18724 18725 0 18726 18727 18728 0 18729 18730 18731 0 18732 18733 18734 0 18735 18736 18737 0 18738 18739 18740 0 18741 18742 18743 0 18744 18745 18746 0 18747 18748 18749 0 18750 18751 18752 0 18753 18754 18755 0 18756 18757 18758 0 18759 18760 18761 0 18762 18763 18764 0 18765 18766 18767 0 18768 18769 18770 0 18771 18772 18773 0 18774 18775 18776 0 18777 18778 18779 0 18780 18781 18782 0 18783 18784 18785 0 18786 18787 18788 0 18789 18790 18791 0 18792 18793 18794 0 18795 18796 18797 0 18798 18799 18800 0 18801 18802 18803 0 18804 18805 18806 0 18807 18808 18809 0 18810 18811 18812 0 18813 18814 18815 0 18816 18817 18818 0 18819 18820 18821 0 18822 18823 18824 0 18825 18826 18827 0 18828 18829 18830 0 18831 18832 18833 0 18834 18835 18836 0 18837 18838 18839 0 18840 18841 18842 0 18843 18844 18845 0 18846 18847 18848 0 18849 18850 18851 0 18852 18853 18854 0 18855 18856 18857 0 18858 18859 18860 0 18861 18862 18863 0 18864 18865 18866 0 18867 18868 18869 0 18870 18871 18872 0 18873 18874 18875 0 18876 18877 18878 0 18879 18880 18881 0 18882 18883 18884 0 18885 18886 18887 0 18888 18889 18890 0 18891 18892 18893 0 18894 18895 18896 0 18897 18898 18899 0 18900 18901 18902 0 18903 18904 18905 0 18906 18907 18908 0 18909 18910 18911 0 18912 18913 18914 0 18915 18916 18917 0 18918 18919 18920 0 18921 18922 18923 0 18924 18925 18926 0 18927 18928 18929 0 18930 18931 18932 0 18933 18934 18935 0 18936 18937 18938 0 18939 18940 18941 0 18942 18943 18944 0 18945 18946 18947 0 18948 18949 18950 0 18951 18952 18953 0 18954 18955 18956 0 18957 18958 18959 0 18960 18961 18962 0 18963 18964 18965 0 18966 18967 18968 0 18969 18970 18971 0 18972 18973 18974 0 18975 18976 18977 0 18978 18979 18980 0 18981 18982 18983 0 18984 18985 18986 0 18987 18988 18989 0 18990 18991 18992 0 18993 18994 18995 0 18996 18997 18998 0 18999 19000 19001 0 19002 19003 19004 0 19005 19006 19007 0 19008 19009 19010 0 19011 19012 19013 0 19014 19015 19016 0 19017 19018 19019 0 19020 19021 19022 0 19023 19024 19025 0 19026 19027 19028 0 19029 19030 19031 0 19032 19033 19034 0 19035 19036 19037 0 19038 19039 19040 0 19041 19042 19043 0 19044 19045 19046 0 19047 19048 19049 0 19050 19051 19052 0 19053 19054 19055 0 19056 19057 19058 0 19059 19060 19061 0 19062 19063 19064 0 19065 19066 19067 0 19068 19069 19070 0 19071 19072 19073 0 19074 19075 19076 0 19077 19078 19079 0 19080 19081 19082 0 19083 19084 19085 0 19086 19087 19088 0 19089 19090 19091 0 19092 19093 19094 0 19095 19096 19097 0 19098 19099 19100 0 19101 19102 19103 0 19104 19105 19106 0 19107 19108 19109 0 19110 19111 19112 0 19113 19114 19115 0 19116 19117 19118 0 19119 19120 19121 0 19122 19123 19124 0 19125 19126 19127 0 19128 19129 19130 0 19131 19132 19133 0 19134 19135 19136 0 19137 19138 19139 0 19140 19141 19142 0 19143 19144 19145 0 19146 19147 19148 0 19149 19150 19151 0 19152 19153 19154 0 19155 19156 19157 0 19158 19159 19160 0 19161 19162 19163 0 19164 19165 19166 0 19167 19168 19169 0 19170 19171 19172 0 19173 19174 19175 0 19176 19177 19178 0 19179 19180 19181 0 19182 19183 19184 0 19185 19186 19187 0 19188 19189 19190 0 19191 19192 19193 0 19194 19195 19196 0 19197 19198 19199 0 19200 19201 19202 0 19203 19204 19205 0 19206 19207 19208 0 19209 19210 19211 0 19212 19213 19214 0 19215 19216 19217 0 19218 19219 19220 0 19221 19222 19223 0 19224 19225 19226 0 19227 19228 19229 0 19230 19231 19232 0 19233 19234 19235 0 19236 19237 19238 0 19239 19240 19241 0 19242 19243 19244 0 19245 19246 19247 0 19248 19249 19250 0 19251 19252 19253 0 19254 19255 19256 0 19257 19258 19259 0 19260 19261 19262 0 19263 19264 19265 0 19266 19267 19268 0 19269 19270 19271 0 19272 19273 19274 0 19275 19276 19277 0 19278 19279 19280 0 19281 19282 19283 0 19284 19285 19286 0 19287 19288 19289 0 19290 19291 19292 0 19293 19294 19295 0 19296 19297 19298 0 19299 19300 19301 0 19302 19303 19304 0 19305 19306 19307 0 19308 19309 19310 0 19311 19312 19313 0 19314 19315 19316 0 19317 19318 19319 0 19320 19321 19322 0 19323 19324 19325 0 19326 19327 19328 0 19329 19330 19331 0 19332 19333 19334 0 19335 19336 19337 0 19338 19339 19340 0 19341 19342 19343 0 19344 19345 19346 0 19347 19348 19349 0 19350 19351 19352 0 19353 19354 19355 0 19356 19357 19358 0 19359 19360 19361 0 19362 19363 19364 0 19365 19366 19367 0 19368 19369 19370 0 19371 19372 19373 0 19374 19375 19376 0 19377 19378 19379 0 19380 19381 19382 0 19383 19384 19385 0 19386 19387 19388 0 19389 19390 19391 0 19392 19393 19394 0 19395 19396 19397 0 19398 19399 19400 0 19401 19402 19403 0 19404 19405 19406 0 19407 19408 19409 0 19410 19411 19412 0 19413 19414 19415 0 19416 19417 19418 0 19419 19420 19421 0 19422 19423 19424 0 19425 19426 19427 0 19428 19429 19430 0 19431 19432 19433 0 19434 19435 19436 0 19437 19438 19439 0 19440 19441 19442 0 19443 19444 19445 0 19446 19447 19448 0 19449 19450 19451 0 19452 19453 19454 0 19455 19456 19457 0 19458 19459 19460 0 19461 19462 19463 0 19464 19465 19466 0 19467 19468 19469 0 19470 19471 19472 0 19473 19474 19475 0 19476 19477 19478 0 19479 19480 19481 0 19482 19483 19484 0 19485 19486 19487 0 19488 19489 19490 0 19491 19492 19493 0 19494 19495 19496 0 19497 19498 19499 0 19500 19501 19502 0 19503 19504 19505 0 19506 19507 19508 0 19509 19510 19511 0 19512 19513 19514 0 19515 19516 19517 0 19518 19519 19520 0 19521 19522 19523 0 19524 19525 19526 0 19527 19528 19529 0 19530 19531 19532 0 19533 19534 19535 0 19536 19537 19538 0 19539 19540 19541 0 19542 19543 19544 0 19545 19546 19547 0 19548 19549 19550 0 19551 19552 19553 0 19554 19555 19556 0 19557 19558 19559 0 19560 19561 19562 0 19563 19564 19565 0 19566 19567 19568 0 19569 19570 19571 0 19572 19573 19574 0 19575 19576 19577 0 19578 19579 19580 0 19581 19582 19583 0 19584 19585 19586 0 19587 19588 19589 0 19590 19591 19592 0 19593 19594 19595 0 19596 19597 19598 0 19599 19600 19601 0 19602 19603 19604 0 19605 19606 19607 0 19608 19609 19610 0 19611 19612 19613 0 19614 19615 19616 0 19617 19618 19619 0 19620 19621 19622 0 19623 19624 19625 0 19626 19627 19628 0 19629 19630 19631 0 19632 19633 19634 0 19635 19636 19637 0 19638 19639 19640 0 19641 19642 19643 0 19644 19645 19646 0 19647 19648 19649 0 19650 19651 19652 0 19653 19654 19655 0 19656 19657 19658 0 19659 19660 19661 0 19662 19663 19664 0 19665 19666 19667 0 19668 19669 19670 0 19671 19672 19673 0 19674 19675 19676 0 19677 19678 19679 0 19680 19681 19682 0 19683 19684 19685 0 19686 19687 19688 0 19689 19690 19691 0 19692 19693 19694 0 19695 19696 19697 0 19698 19699 19700 0 19701 19702 19703 0 19704 19705 19706 0 19707 19708 19709 0 19710 19711 19712 0 19713 19714 19715 0 19716 19717 19718 0 19719 19720 19721 0 19722 19723 19724 0 19725 19726 19727 0 19728 19729 19730 0 19731 19732 19733 0 19734 19735 19736 0 19737 19738 19739 0 19740 19741 19742 0 19743 19744 19745 0 19746 19747 19748 0 19749 19750 19751 0 19752 19753 19754 0 19755 19756 19757 0 19758 19759 19760 0 19761 19762 19763 0 19764 19765 19766 0 19767 19768 19769 0 19770 19771 19772 0 19773 19774 19775 0 19776 19777 19778 0 19779 19780 19781 0 19782 19783 19784 0 19785 19786 19787 0 19788 19789 19790 0 19791 19792 19793 0 19794 19795 19796 0 19797 19798 19799 0 19800 19801 19802 0 19803 19804 19805 0 19806 19807 19808 0 19809 19810 19811 0 19812 19813 19814 0 19815 19816 19817 0 19818 19819 19820 0 19821 19822 19823 0 19824 19825 19826 0 19827 19828 19829 0 19830 19831 19832 0 19833 19834 19835 0 19836 19837 19838 0 19839 19840 19841 0 19842 19843 19844 0 19845 19846 19847 0 19848 19849 19850 0 19851 19852 19853 0 19854 19855 19856 0 19857 19858 19859 0 19860 19861 19862 0 19863 19864 19865 0 19866 19867 19868 0 19869 19870 19871 0 19872 19873 19874 0 19875 19876 19877 0 19878 19879 19880 0 19881 19882 19883 0 19884 19885 19886 0 19887 19888 19889 0 19890 19891 19892 0 19893 19894 19895 0 19896 19897 19898 0 19899 19900 19901 0 19902 19903 19904 0 19905 19906 19907 0 19908 19909 19910 0 19911 19912 19913 0 19914 19915 19916 0 19917 19918 19919 0 19920 19921 19922 0 19923 19924 19925 0 19926 19927 19928 0 19929 19930 19931 0 19932 19933 19934 0 19935 19936 19937 0 19938 19939 19940 0 19941 19942 19943 0 19944 19945 19946 0 19947 19948 19949 0 19950 19951 19952 0 19953 19954 19955 0 19956 19957 19958 0 19959 19960 19961 0 19962 19963 19964 0 19965 19966 19967 0 19968 19969 19970 0 19971 19972 19973 0 19974 19975 19976 0 19977 19978 19979 0 19980 19981 19982 0 19983 19984 19985 0 19986 19987 19988 0 19989 19990 19991 0 19992 19993 19994 0 19995 19996 19997 0 19998 19999 20000 0 20001 20002 20003 0 20004 20005 20006 0 20007 20008 20009 0 20010 20011 20012 0 20013 20014 20015 0 20016 20017 20018 0 20019 20020 20021 0 20022 20023 20024 0 20025 20026 20027 0 20028 20029 20030 0 20031 20032 20033 0 20034 20035 20036 0 20037 20038 20039 0 20040 20041 20042 0 20043 20044 20045 0 20046 20047 20048 0 20049 20050 20051 0 20052 20053 20054 0 20055 20056 20057 0 20058 20059 20060 0 20061 20062 20063 0 20064 20065 20066 0 20067 20068 20069 0 20070 20071 20072 0 20073 20074 20075 0 20076 20077 20078 0 20079 20080 20081 0 20082 20083 20084 0 20085 20086 20087 0 20088 20089 20090 0 20091 20092 20093 0 20094 20095 20096 0 20097 20098 20099 0 20100 20101 20102 0 20103 20104 20105 0 20106 20107 20108 0 20109 20110 20111 0 20112 20113 20114 0 20115 20116 20117 0 20118 20119 20120 0 20121 20122 20123 0 20124 20125 20126 0 20127 20128 20129 0 20130 20131 20132 0 20133 20134 20135 0 20136 20137 20138 0 20139 20140 20141 0 20142 20143 20144 0 20145 20146 20147 0 20148 20149 20150 0 20151 20152 20153 0 20154 20155 20156 0 20157 20158 20159 0 20160 20161 20162 0 20163 20164 20165 0 20166 20167 20168 0 20169 20170 20171 0 20172 20173 20174 0 20175 20176 20177 0 20178 20179 20180 0 20181 20182 20183 0 20184 20185 20186 0 20187 20188 20189 0 20190 20191 20192 0 20193 20194 20195 0 20196 20197 20198 0 20199 20200 20201 0 20202 20203 20204 0 20205 20206 20207 0 20208 20209 20210 0 20211 20212 20213 0 20214 20215 20216 0 20217 20218 20219 0 20220 20221 20222 0 20223 20224 20225 0 20226 20227 20228 0 20229 20230 20231 0 20232 20233 20234 0 20235 20236 20237 0 20238 20239 20240 0 20241 20242 20243 0 20244 20245 20246 0 20247 20248 20249 0 20250 20251 20252 0 20253 20254 20255 0 20256 20257 20258 0 20259 20260 20261 0 20262 20263 20264 0 20265 20266 20267 0 20268 20269 20270 0 20271 20272 20273 0 20274 20275 20276 0 20277 20278 20279 0 20280 20281 20282 0 20283 20284 20285 0 20286 20287 20288 0 20289 20290 20291 0 20292 20293 20294 0 20295 20296 20297 0 20298 20299 20300 0 20301 20302 20303 0 20304 20305 20306 0 20307 20308 20309 0 20310 20311 20312 0 20313 20314 20315 0 20316 20317 20318 0 20319 20320 20321 0 20322 20323 20324 0 20325 20326 20327 0 20328 20329 20330 0 20331 20332 20333 0 20334 20335 20336 0 20337 20338 20339 0 20340 20341 20342 0 20343 20344 20345 0 20346 20347 20348 0 20349 20350 20351 0 20352 20353 20354 0 20355 20356 20357 0 20358 20359 20360 0 20361 20362 20363 0 20364 20365 20366 0 20367 20368 20369 0 20370 20371 20372 0 20373 20374 20375 0 20376 20377 20378 0 20379 20380 20381 0 20382 20383 20384 0 20385 20386 20387 0 20388 20389 20390 0 20391 20392 20393 0 20394 20395 20396 0 20397 20398 20399 0 20400 20401 20402 0 20403 20404 20405 0 20406 20407 20408 0 20409 20410 20411 0 20412 20413 20414 0 20415 20416 20417 0 20418 20419 20420 0 20421 20422 20423 0 20424 20425 20426 0 20427 20428 20429 0 20430 20431 20432 0 20433 20434 20435 0 20436 20437 20438 0 20439 20440 20441 0 20442 20443 20444 0 20445 20446 20447 0 20448 20449 20450 0 20451 20452 20453 0 20454 20455 20456 0 20457 20458 20459 0 20460 20461 20462 0 20463 20464 20465 0 20466 20467 20468 0 20469 20470 20471 0 20472 20473 20474 0 20475 20476 20477 0 20478 20479 20480 0 20481 20482 20483 0 20484 20485 20486 0 20487 20488 20489 0 20490 20491 20492 0 20493 20494 20495 0 20496 20497 20498 0 20499 20500 20501 0 20502 20503 20504 0 20505 20506 20507 0 20508 20509 20510 0 20511 20512 20513 0 20514 20515 20516 0 20517 20518 20519 0 20520 20521 20522 0 20523 20524 20525 0 20526 20527 20528 0 20529 20530 20531 0 20532 20533 20534 0 20535 20536 20537 0 20538 20539 20540 0 20541 20542 20543 0 20544 20545 20546 0 20547 20548 20549 0 20550 20551 20552 0 20553 20554 20555 0 20556 20557 20558 0 20559 20560 20561 0 20562 20563 20564 0 20565 20566 20567 0 20568 20569 20570 0 20571 20572 20573 0 20574 20575 20576 0 20577 20578 20579 0 20580 20581 20582 0 20583 20584 20585 0 20586 20587 20588 0 20589 20590 20591 0 20592 20593 20594 0 20595 20596 20597 0 20598 20599 20600 0 20601 20602 20603 0 20604 20605 20606 0 20607 20608 20609 0 20610 20611 20612 0 20613 20614 20615 0 20616 20617 20618 0 20619 20620 20621 0 20622 20623 20624 0 20625 20626 20627 0 20628 20629 20630 0 20631 20632 20633 0 20634 20635 20636 0 20637 20638 20639 0 20640 20641 20642 0 20643 20644 20645 0 20646 20647 20648 0 20649 20650 20651 0 20652 20653 20654 0 20655 20656 20657 0 20658 20659 20660 0 20661 20662 20663 0 20664 20665 20666 0 20667 20668 20669 0 20670 20671 20672 0 20673 20674 20675 0 20676 20677 20678 0 20679 20680 20681 0 20682 20683 20684 0 20685 20686 20687 0 20688 20689 20690 0 20691 20692 20693 0 20694 20695 20696 0 20697 20698 20699 0 20700 20701 20702 0 20703 20704 20705 0 20706 20707 20708 0 20709 20710 20711 0 20712 20713 20714 0 20715 20716 20717 0 20718 20719 20720 0 20721 20722 20723 0 20724 20725 20726 0 20727 20728 20729 0 20730 20731 20732 0 20733 20734 20735 0 20736 20737 20738 0 20739 20740 20741 0 20742 20743 20744 0 20745 20746 20747 0 20748 20749 20750 0 20751 20752 20753 0 20754 20755 20756 0 20757 20758 20759 0 20760 20761 20762 0 20763 20764 20765 0 20766 20767 20768 0 20769 20770 20771 0 20772 20773 20774 0 20775 20776 20777 0 20778 20779 20780 0 20781 20782 20783 0 20784 20785 20786 0 20787 20788 20789 0 20790 20791 20792 0 20793 20794 20795 0 20796 20797 20798 0 20799 20800 20801 0 20802 20803 20804 0 20805 20806 20807 0 20808 20809 20810 0 20811 20812 20813 0 20814 20815 20816 0 20817 20818 20819 0 20820 20821 20822 0 20823 20824 20825 0 20826 20827 20828 0 20829 20830 20831 0 20832 20833 20834 0 20835 20836 20837 0 20838 20839 20840 0 20841 20842 20843 0 20844 20845 20846 0 20847 20848 20849 0 20850 20851 20852 0 20853 20854 20855 0 20856 20857 20858 0 20859 20860 20861 0 20862 20863 20864 0 20865 20866 20867 0 20868 20869 20870 0 20871 20872 20873 0 20874 20875 20876 0 20877 20878 20879 0 20880 20881 20882 0 20883 20884 20885 0 20886 20887 20888 0 20889 20890 20891 0 20892 20893 20894 0 20895 20896 20897 0 20898 20899 20900 0 20901 20902 20903 0 20904 20905 20906 0 20907 20908 20909 0 20910 20911 20912 0 20913 20914 20915 0 20916 20917 20918 0 20919 20920 20921 0 20922 20923 20924 0 20925 20926 20927 0 20928 20929 20930 0 20931 20932 20933 0 20934 20935 20936 0 20937 20938 20939 0 20940 20941 20942 0 20943 20944 20945 0 20946 20947 20948 0 20949 20950 20951 0 20952 20953 20954 0 20955 20956 20957 0 20958 20959 20960 0 20961 20962 20963 0 20964 20965 20966 0 20967 20968 20969 0 20970 20971 20972 0 20973 20974 20975 0 20976 20977 20978 0 20979 20980 20981 0 20982 20983 20984 0 20985 20986 20987 0 20988 20989 20990 0 20991 20992 20993 0 20994 20995 20996 0 20997 20998 20999 0 21000 21001 21002 0 21003 21004 21005 0 21006 21007 21008 0 21009 21010 21011 0 21012 21013 21014 0 21015 21016 21017 0 21018 21019 21020 0 21021 21022 21023 0 21024 21025 21026 0 21027 21028 21029 0 21030 21031 21032 0 21033 21034 21035 0 21036 21037 21038 0 21039 21040 21041 0 21042 21043 21044 0 21045 21046 21047 0 21048 21049 21050 0 21051 21052 21053 0 21054 21055 21056 0 21057 21058 21059 0 21060 21061 21062 0 21063 21064 21065 0 21066 21067 21068 0 21069 21070 21071 0 21072 21073 21074 0 21075 21076 21077 0 21078 21079 21080 0 21081 21082 21083 0 21084 21085 21086 0 21087 21088 21089 0 21090 21091 21092 0 21093 21094 21095 0 21096 21097 21098 0 21099 21100 21101 0 21102 21103 21104 0 21105 21106 21107 0 21108 21109 21110 0 21111 21112 21113 0 21114 21115 21116 0 21117 21118 21119 0 21120 21121 21122 0 21123 21124 21125 0 21126 21127 21128 0 21129 21130 21131 0 21132 21133 21134 0 21135 21136 21137 0 21138 21139 21140 0 21141 21142 21143 0 21144 21145 21146 0 21147 21148 21149 0 21150 21151 21152 0 21153 21154 21155 0 21156 21157 21158 0 21159 21160 21161 0 21162 21163 21164 0 21165 21166 21167 0 21168 21169 21170 0 21171 21172 21173 0 21174 21175 21176 0 21177 21178 21179 0 21180 21181 21182 0 21183 21184 21185 0 21186 21187 21188 0 21189 21190 21191 0 21192 21193 21194 0 21195 21196 21197 0 21198 21199 21200 0 21201 21202 21203 0 21204 21205 21206 0 21207 21208 21209 0 21210 21211 21212 0 21213 21214 21215 0 21216 21217 21218 0 21219 21220 21221 0 21222 21223 21224 0 21225 21226 21227 0 21228 21229 21230 0 21231 21232 21233 0 21234 21235 21236 0 21237 21238 21239 0 21240 21241 21242 0 21243 21244 21245 0 21246 21247 21248 0 21249 21250 21251 0 21252 21253 21254 0 21255 21256 21257 0 21258 21259 21260 0 21261 21262 21263 0 21264 21265 21266 0 21267 21268 21269 0 21270 21271 21272 0 21273 21274 21275 0 21276 21277 21278 0 21279 21280 21281 0 21282 21283 21284 0 21285 21286 21287 0 21288 21289 21290 0 21291 21292 21293 0 21294 21295 21296 0 21297 21298 21299 0 21300 21301 21302 0 21303 21304 21305 0 21306 21307 21308 0 21309 21310 21311 0 21312 21313 21314 0 21315 21316 21317 0 21318 21319 21320 0 21321 21322 21323 0 21324 21325 21326 0 21327 21328 21329 0 21330 21331 21332 0 21333 21334 21335 0 21336 21337 21338 0 21339 21340 21341 0 21342 21343 21344 0 21345 21346 21347 0 21348 21349 21350 0 21351 21352 21353 0 21354 21355 21356 0 21357 21358 21359 0 21360 21361 21362 0 21363 21364 21365 0 21366 21367 21368 0 21369 21370 21371 0 21372 21373 21374 0 21375 21376 21377 0 21378 21379 21380 0 21381 21382 21383 0 21384 21385 21386 0 21387 21388 21389 0 21390 21391 21392 0 21393 21394 21395 0 21396 21397 21398 0 21399 21400 21401 0 21402 21403 21404 0 21405 21406 21407 0 21408 21409 21410 0 21411 21412 21413 0 21414 21415 21416 0 21417 21418 21419 0 21420 21421 21422 0 21423 21424 21425 0 21426 21427 21428 0 21429 21430 21431 0 21432 21433 21434 0 21435 21436 21437 0 21438 21439 21440 0 21441 21442 21443 0 21444 21445 21446 0 21447 21448 21449 0 21450 21451 21452 0 21453 21454 21455 0 21456 21457 21458 0 21459 21460 21461 0 21462 21463 21464 0 21465 21466 21467 0 21468 21469 21470 0 21471 21472 21473 0 21474 21475 21476 0 21477 21478 21479 0 21480 21481 21482 0 21483 21484 21485 0 21486 21487 21488 0 21489 21490 21491 0 21492 21493 21494 0 21495 21496 21497 0 21498 21499 21500 0 21501 21502 21503 0 21504 21505 21506 0 21507 21508 21509 0 21510 21511 21512 0 21513 21514 21515 0 21516 21517 21518 0 21519 21520 21521 0 21522 21523 21524 0 21525 21526 21527 0 21528 21529 21530 0 21531 21532 21533 0 21534 21535 21536 0 21537 21538 21539 0 21540 21541 21542 0 21543 21544 21545 0 21546 21547 21548 0 21549 21550 21551 0 21552 21553 21554 0 21555 21556 21557 0 21558 21559 21560 0 21561 21562 21563 0 21564 21565 21566 0 21567 21568 21569 0 21570 21571 21572 0 21573 21574 21575 0 21576 21577 21578 0 21579 21580 21581 0 21582 21583 21584 0 21585 21586 21587 0 21588 21589 21590 0 21591 21592 21593 0 21594 21595 21596 0 21597 21598 21599 0 21600 21601 21602 0 21603 21604 21605 0 21606 21607 21608 0 21609 21610 21611 0 21612 21613 21614 0 21615 21616 21617 0 21618 21619 21620 0 21621 21622 21623 0 21624 21625 21626 0 21627 21628 21629 0 21630 21631 21632 0 21633 21634 21635 0 21636 21637 21638 0 21639 21640 21641 0 21642 21643 21644 0 21645 21646 21647 0 21648 21649 21650 0 21651 21652 21653 0 21654 21655 21656 0 21657 21658 21659 0 21660 21661 21662 0 21663 21664 21665 0 21666 21667 21668 0 21669 21670 21671 0 21672 21673 21674 0 21675 21676 21677 0 21678 21679 21680 0 21681 21682 21683 0 21684 21685 21686 0 21687 21688 21689 0 21690 21691 21692 0 21693 21694 21695 0 21696 21697 21698 0 21699 21700 21701 0 21702 21703 21704 0 21705 21706 21707 0 21708 21709 21710 0 21711 21712 21713 0 21714 21715 21716 0 21717 21718 21719 0 21720 21721 21722 0 21723 21724 21725 0 21726 21727 21728 0 21729 21730 21731 0 21732 21733 21734 0 21735 21736 21737 0 21738 21739 21740 0 21741 21742 21743 0 21744 21745 21746 0 21747 21748 21749 0 21750 21751 21752 0 21753 21754 21755 0 21756 21757 21758 0 21759 21760 21761 0 21762 21763 21764 0 21765 21766 21767 0 21768 21769 21770 0 21771 21772 21773 0 21774 21775 21776 0 21777 21778 21779 0 21780 21781 21782 0 21783 21784 21785 0 21786 21787 21788 0 21789 21790 21791 0 21792 21793 21794 0 21795 21796 21797 0 21798 21799 21800 0 21801 21802 21803 0 21804 21805 21806 0 21807 21808 21809 0 21810 21811 21812 0 21813 21814 21815 0 21816 21817 21818 0 21819 21820 21821 0 21822 21823 21824 0 21825 21826 21827 0 21828 21829 21830 0 21831 21832 21833 0 21834 21835 21836 0 21837 21838 21839 0 21840 21841 21842 0 21843 21844 21845 0 21846 21847 21848 0 21849 21850 21851 0 21852 21853 21854 0 21855 21856 21857 0 21858 21859 21860 0 21861 21862 21863 0 21864 21865 21866 0 21867 21868 21869 0 21870 21871 21872 0 21873 21874 21875 0 21876 21877 21878 0 21879 21880 21881 0 21882 21883 21884 0 21885 21886 21887 0 21888 21889 21890 0 21891 21892 21893 0 21894 21895 21896 0 21897 21898 21899 0 21900 21901 21902 0 21903 21904 21905 0 21906 21907 21908 0 21909 21910 21911 0 21912 21913 21914 0 21915 21916 21917 0 21918 21919 21920 0 21921 21922 21923 0 21924 21925 21926 0 21927 21928 21929 0 21930 21931 21932 0 21933 21934 21935 0 21936 21937 21938 0 21939 21940 21941 0 21942 21943 21944 0 21945 21946 21947 0 21948 21949 21950 0 21951 21952 21953 0 21954 21955 21956 0 21957 21958 21959 0 21960 21961 21962 0 21963 21964 21965 0 21966 21967 21968 0 21969 21970 21971 0 21972 21973 21974 0 21975 21976 21977 0 21978 21979 21980 0 21981 21982 21983 0 21984 21985 21986 0 21987 21988 21989 0 21990 21991 21992 0 21993 21994 21995 0 21996 21997 21998 0 21999 22000 22001 0 22002 22003 22004 0 22005 22006 22007 0 22008 22009 22010 0 22011 22012 22013 0 22014 22015 22016 0 22017 22018 22019 0 22020 22021 22022 0 22023 22024 22025 0 22026 22027 22028 0 22029 22030 22031 0 22032 22033 22034 0 22035 22036 22037 0 22038 22039 22040 0 22041 22042 22043 0 22044 22045 22046 0 22047 22048 22049 0 22050 22051 22052 0 22053 22054 22055 0 22056 22057 22058 0 22059 22060 22061 0 22062 22063 22064 0 22065 22066 22067 0 22068 22069 22070 0 22071 22072 22073 0 22074 22075 22076 0 22077 22078 22079 0 22080 22081 22082 0 22083 22084 22085 0 22086 22087 22088 0 22089 22090 22091 0 22092 22093 22094 0 22095 22096 22097 0 22098 22099 22100 0 22101 22102 22103 0 22104 22105 22106 0 22107 22108 22109 0 22110 22111 22112 0 22113 22114 22115 0 22116 22117 22118 0 22119 22120 22121 0 22122 22123 22124 0 22125 22126 22127 0 22128 22129 22130 0 22131 22132 22133 0 22134 22135 22136 0 22137 22138 22139 0 22140 22141 22142 0 22143 22144 22145 0 22146 22147 22148 0 22149 22150 22151 0 22152 22153 22154 0 22155 22156 22157 0 22158 22159 22160 0 22161 22162 22163 0 22164 22165 22166 0 22167 22168 22169 0 22170 22171 22172 0 22173 22174 22175 0 22176 22177 22178 0 22179 22180 22181 0 22182 22183 22184 0 22185 22186 22187 0 22188 22189 22190 0 22191 22192 22193 0 22194 22195 22196 0 22197 22198 22199 0 22200 22201 22202 0 22203 22204 22205 0 22206 22207 22208 0 22209 22210 22211 0 22212 22213 22214 0 22215 22216 22217 0 22218 22219 22220 0 22221 22222 22223 0 22224 22225 22226 0 22227 22228 22229 0 22230 22231 22232 0 22233 22234 22235 0 22236 22237 22238 0 22239 22240 22241 0 22242 22243 22244 0 22245 22246 22247 0 22248 22249 22250 0 22251 22252 22253 0 22254 22255 22256 0 22257 22258 22259 0 22260 22261 22262 0 22263 22264 22265 0 22266 22267 22268 0 22269 22270 22271 0 22272 22273 22274 0 22275 22276 22277 0 22278 22279 22280 0 22281 22282 22283 0 22284 22285 22286 0 22287 22288 22289 0 22290 22291 22292 0 22293 22294 22295 0 22296 22297 22298 0 22299 22300 22301 0 22302 22303 22304 0 22305 22306 22307 0 22308 22309 22310 0 22311 22312 22313 0 22314 22315 22316 0 22317 22318 22319 0 22320 22321 22322 0 22323 22324 22325 0 22326 22327 22328 0 22329 22330 22331 0 22332 22333 22334 0 22335 22336 22337 0 22338 22339 22340 0 22341 22342 22343 0 22344 22345 22346 0 22347 22348 22349 0 22350 22351 22352 0 22353 22354 22355 0 22356 22357 22358 0 22359 22360 22361 0 22362 22363 22364 0 22365 22366 22367 0 22368 22369 22370 0 22371 22372 22373 0 22374 22375 22376 0 22377 22378 22379 0 22380 22381 22382 0 22383 22384 22385 0 22386 22387 22388 0 22389 22390 22391 0 22392 22393 22394 0 22395 22396 22397 0 22398 22399 22400 0 22401 22402 22403 0 22404 22405 22406 0 22407 22408 22409 0 22410 22411 22412 0 22413 22414 22415 0 22416 22417 22418 0 22419 22420 22421 0 22422 22423 22424 0 22425 22426 22427 0 22428 22429 22430 0 22431 22432 22433 0 22434 22435 22436 0 22437 22438 22439 0 22440 22441 22442 0 22443 22444 22445 0 22446 22447 22448 0 22449 22450 22451 0 22452 22453 22454 0 22455 22456 22457 0 22458 22459 22460 0 22461 22462 22463 0 22464 22465 22466 0 22467 22468 22469 0 22470 22471 22472 0 22473 22474 22475 0 22476 22477 22478 0 22479 22480 22481 0 22482 22483 22484 0 22485 22486 22487 0 22488 22489 22490 0 22491 22492 22493 0 22494 22495 22496 0 22497 22498 22499 0 22500 22501 22502 0 22503 22504 22505 0 22506 22507 22508 0 22509 22510 22511 0 22512 22513 22514 0 22515 22516 22517 0 22518 22519 22520 0 22521 22522 22523 0 22524 22525 22526 0 22527 22528 22529 0 22530 22531 22532 0 22533 22534 22535 0 22536 22537 22538 0 22539 22540 22541 0 22542 22543 22544 0 22545 22546 22547 0 22548 22549 22550 0 22551 22552 22553 0 22554 22555 22556 0 22557 22558 22559 0 22560 22561 22562 0 22563 22564 22565 0 22566 22567 22568 0 22569 22570 22571 0 22572 22573 22574 0 22575 22576 22577 0 22578 22579 22580 0 22581 22582 22583 0 22584 22585 22586 0 22587 22588 22589 0 22590 22591 22592 0 22593 22594 22595 0 22596 22597 22598 0 22599 22600 22601 0 22602 22603 22604 0 22605 22606 22607 0 22608 22609 22610 0 22611 22612 22613 0 22614 22615 22616 0 22617 22618 22619 0 22620 22621 22622 0 22623 22624 22625 0 22626 22627 22628 0 22629 22630 22631 0 22632 22633 22634 0 22635 22636 22637 0 22638 22639 22640 0 22641 22642 22643 0 22644 22645 22646 0 22647 22648 22649 0 22650 22651 22652 0 22653 22654 22655 0 22656 22657 22658 0 22659 22660 22661 0 22662 22663 22664 0 22665 22666 22667 0 22668 22669 22670 0 22671 22672 22673 0 22674 22675 22676 0 22677 22678 22679 0 22680 22681 22682 0 22683 22684 22685 0 22686 22687 22688 0 22689 22690 22691 0 22692 22693 22694 0 22695 22696 22697 0 22698 22699 22700 0 22701 22702 22703 0 22704 22705 22706 0 22707 22708 22709 0 22710 22711 22712 0 22713 22714 22715 0 22716 22717 22718 0 22719 22720 22721 0 22722 22723 22724 0 22725 22726 22727 0 22728 22729 22730 0 22731 22732 22733 0 22734 22735 22736 0 22737 22738 22739 0 22740 22741 22742 0 22743 22744 22745 0 22746 22747 22748 0 22749 22750 22751 0 22752 22753 22754 0 22755 22756 22757 0 22758 22759 22760 0 22761 22762 22763 0 22764 22765 22766 0 22767 22768 22769 0 22770 22771 22772 0 22773 22774 22775 0 22776 22777 22778 0 22779 22780 22781 0 22782 22783 22784 0 22785 22786 22787 0 22788 22789 22790 0 22791 22792 22793 0 22794 22795 22796 0 22797 22798 22799 0 22800 22801 22802 0 22803 22804 22805 0 22806 22807 22808 0 22809 22810 22811 0 22812 22813 22814 0 22815 22816 22817 0 22818 22819 22820 0 22821 22822 22823 0 22824 22825 22826 0 22827 22828 22829 0 22830 22831 22832 0 22833 22834 22835 0 22836 22837 22838 0 22839 22840 22841 0 22842 22843 22844 0 22845 22846 22847 0 22848 22849 22850 0 22851 22852 22853 0 22854 22855 22856 0 22857 22858 22859 0 22860 22861 22862 0 22863 22864 22865 0 22866 22867 22868 0 22869 22870 22871 0 22872 22873 22874 0 22875 22876 22877 0 22878 22879 22880 0 22881 22882 22883 0 22884 22885 22886 0 22887 22888 22889 0 22890 22891 22892 0 22893 22894 22895 0 22896 22897 22898 0 22899 22900 22901 0 22902 22903 22904 0 22905 22906 22907 0 22908 22909 22910 0 22911 22912 22913 0 22914 22915 22916 0 22917 22918 22919 0 22920 22921 22922 0 22923 22924 22925 0 22926 22927 22928 0 22929 22930 22931 0 22932 22933 22934 0 22935 22936 22937 0 22938 22939 22940 0 22941 22942 22943 0 22944 22945 22946 0 22947 22948 22949 0 22950 22951 22952 0 22953 22954 22955 0 22956 22957 22958 0 22959 22960 22961 0 22962 22963 22964 0 22965 22966 22967 0 22968 22969 22970 0 22971 22972 22973 0 22974 22975 22976 0 22977 22978 22979 0 22980 22981 22982 0 22983 22984 22985 0 22986 22987 22988 0 22989 22990 22991 0 22992 22993 22994 0 22995 22996 22997 0 22998 22999 23000 0 23001 23002 23003 0 23004 23005 23006 0 23007 23008 23009 0 23010 23011 23012 0 23013 23014 23015 0 23016 23017 23018 0 23019 23020 23021 0 23022 23023 23024 0 23025 23026 23027 0 23028 23029 23030 0 23031 23032 23033 0 23034 23035 23036 0 23037 23038 23039 0 23040 23041 23042 0 23043 23044 23045 0 23046 23047 23048 0 23049 23050 23051 0 23052 23053 23054 0 23055 23056 23057 0 23058 23059 23060 0 23061 23062 23063 0 23064 23065 23066 0 23067 23068 23069 0 23070 23071 23072 0 23073 23074 23075 0 23076 23077 23078 0 23079 23080 23081 0 23082 23083 23084 0 23085 23086 23087 0 23088 23089 23090 0 23091 23092 23093 0 23094 23095 23096 0 23097 23098 23099 0 23100 23101 23102 0 23103 23104 23105 0 23106 23107 23108 0 23109 23110 23111 0 23112 23113 23114 0 23115 23116 23117 0 23118 23119 23120 0 23121 23122 23123 0 23124 23125 23126 0 23127 23128 23129 0 23130 23131 23132 0 23133 23134 23135 0 23136 23137 23138 0 23139 23140 23141 0 23142 23143 23144 0 23145 23146 23147 0 23148 23149 23150 0 23151 23152 23153 0 23154 23155 23156 0 23157 23158 23159 0 23160 23161 23162 0 23163 23164 23165 0 23166 23167 23168 0 23169 23170 23171 0 23172 23173 23174 0 23175 23176 23177 0 23178 23179 23180 0 23181 23182 23183 0 23184 23185 23186 0 23187 23188 23189 0 23190 23191 23192 0 23193 23194 23195 0 23196 23197 23198 0 23199 23200 23201 0 23202 23203 23204 0 23205 23206 23207 0 23208 23209 23210 0 23211 23212 23213 0 23214 23215 23216 0 23217 23218 23219 0 23220 23221 23222 0 23223 23224 23225 0 23226 23227 23228 0 23229 23230 23231 0 23232 23233 23234 0 23235 23236 23237 0 23238 23239 23240 0 23241 23242 23243 0 23244 23245 23246 0 23247 23248 23249 0 23250 23251 23252 0 23253 23254 23255 0 23256 23257 23258 0 23259 23260 23261 0 23262 23263 23264 0 23265 23266 23267 0 23268 23269 23270 0 23271 23272 23273 0 23274 23275 23276 0 23277 23278 23279 0 23280 23281 23282 0 23283 23284 23285 0 23286 23287 23288 0 23289 23290 23291 0 23292 23293 23294 0 23295 23296 23297 0 23298 23299 23300 0 23301 23302 23303 0 23304 23305 23306 0 23307 23308 23309 0 23310 23311 23312 0 23313 23314 23315 0 23316 23317 23318 0 23319 23320 23321 0 23322 23323 23324 0 23325 23326 23327 0 23328 23329 23330 0 23331 23332 23333 0 23334 23335 23336 0 23337 23338 23339 0 23340 23341 23342 0 23343 23344 23345 0 23346 23347 23348 0 23349 23350 23351 0 23352 23353 23354 0 23355 23356 23357 0 23358 23359 23360 0 23361 23362 23363 0 23364 23365 23366 0 23367 23368 23369 0 23370 23371 23372 0 23373 23374 23375 0 23376 23377 23378 0 23379 23380 23381 0 23382 23383 23384 0 23385 23386 23387 0 23388 23389 23390 0 23391 23392 23393 0 23394 23395 23396 0 23397 23398 23399 0 23400 23401 23402 0 23403 23404 23405 0 23406 23407 23408 0 23409 23410 23411 0 23412 23413 23414 0 23415 23416 23417 0 23418 23419 23420 0 23421 23422 23423 0 23424 23425 23426 0 23427 23428 23429 0 23430 23431 23432 0 23433 23434 23435 0 23436 23437 23438 0 23439 23440 23441 0 23442 23443 23444 0 23445 23446 23447 0 23448 23449 23450 0 23451 23452 23453 0 23454 23455 23456 0 23457 23458 23459 0 23460 23461 23462 0 23463 23464 23465 0 23466 23467 23468 0 23469 23470 23471 0 23472 23473 23474 0 23475 23476 23477 0 23478 23479 23480 0 23481 23482 23483 0 23484 23485 23486 0 23487 23488 23489 0 23490 23491 23492 0 23493 23494 23495 0 23496 23497 23498 0 23499 23500 23501 0 23502 23503 23504 0 23505 23506 23507 0 23508 23509 23510 0 23511 23512 23513 0 23514 23515 23516 0 23517 23518 23519 0 23520 23521 23522 0 23523 23524 23525 0 23526 23527 23528 0 23529 23530 23531 0 23532 23533 23534 0 23535 23536 23537 0 23538 23539 23540 0 23541 23542 23543 0 23544 23545 23546 0 23547 23548 23549 0 23550 23551 23552 0 23553 23554 23555 0 23556 23557 23558 0 23559 23560 23561 0 23562 23563 23564 0 23565 23566 23567 0 23568 23569 23570 0 23571 23572 23573 0 23574 23575 23576 0 23577 23578 23579 0 23580 23581 23582 0 23583 23584 23585 0 23586 23587 23588 0 23589 23590 23591 0 23592 23593 23594 0 23595 23596 23597 0 23598 23599 23600 0 23601 23602 23603 0 23604 23605 23606 0 23607 23608 23609 0 23610 23611 23612 0 23613 23614 23615 0 23616 23617 23618 0 23619 23620 23621 0 23622 23623 23624 0 23625 23626 23627 0 23628 23629 23630 0 23631 23632 23633 0 23634 23635 23636 0 23637 23638 23639 0 23640 23641 23642 0 23643 23644 23645 0 23646 23647 23648 0 23649 23650 23651 0 23652 23653 23654 0 23655 23656 23657 0 23658 23659 23660 0 23661 23662 23663 0 23664 23665 23666 0 23667 23668 23669 0 23670 23671 23672 0 23673 23674 23675 0 23676 23677 23678 0 23679 23680 23681 0 23682 23683 23684 0 23685 23686 23687 0 23688 23689 23690 0 23691 23692 23693 0 23694 23695 23696 0 23697 23698 23699 0 23700 23701 23702 0 23703 23704 23705 0 23706 23707 23708 0 23709 23710 23711 0 23712 23713 23714 0 23715 23716 23717 0 23718 23719 23720 0 23721 23722 23723 0 23724 23725 23726 0 23727 23728 23729 0 23730 23731 23732 0 23733 23734 23735 0 23736 23737 23738 0 23739 23740 23741 0 23742 23743 23744 0 23745 23746 23747 0 Bone -1 0.0 0.0 -0.0 0.0 1.0 -0.0 0.0 Bone ================================================ FILE: data/models/metalakaste.dymdl ================================================ DYMDLv1 324 108 2 1 1 metalakaste metalareste -0.3720000088214874 0.5 0.3720000088214874 0.3014923632144928 0.904507577419281 -0.3014923632144928 0.1317935734987259 0.13179369270801544 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 0.5773491859436035 0.5773491859436035 0.5773491859436035 0.994900643825531 0.005098938941955566 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.5 0.3720000088214874 -0.3014923632144928 0.904507577419281 -0.3014923632144928 0.8682059049606323 0.13179358839988708 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.5 0.3720000088214874 -0.3014923632144928 0.904507577419281 -0.3014923632144928 0.8682059049606323 0.13179358839988708 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.9949007630348206 0.994900643825531 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.5 -0.3720000088214874 -0.3014923632144928 0.904507577419281 0.3014923632144928 0.8682060837745667 0.8682060241699219 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.5 -0.3720000088214874 0.3014923632144928 0.904507577419281 0.3014923632144928 0.13179366290569305 0.8682063817977905 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 -0.5773491859436035 0.5773491859436035 0.5773491859436035 0.005098938941955566 0.005099058151245117 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.5 0.3720000088214874 0.3014923632144928 0.904507577419281 -0.3014923632144928 0.1317935734987259 0.13179369270801544 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.5 -0.3720000088214874 -0.3014923632144928 0.904507577419281 0.3014923632144928 0.8682060837745667 0.8682060241699219 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 -0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.005099058151245117 0.9949010014533997 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.5 -0.3720000088214874 0.3014923632144928 0.904507577419281 0.3014923632144928 0.13179366290569305 0.8682063817977905 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 0.5 -0.3720000088214874 -0.3720000088214874 0.904507577419281 0.3014923632144928 0.3014923632144928 0.868206262588501 0.1317937821149826 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.9949008226394653 0.9949010014533997 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.5 0.3720000088214874 -0.3720000088214874 0.904507577419281 -0.3014923632144928 0.3014923632144928 0.868206262588501 0.8682063817977905 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.5 0.3720000088214874 0.3720000088214874 0.904507577419281 -0.3014923632144928 -0.3014923632144928 0.13179358839988708 0.868206262588501 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 0.5773491859436035 -0.5773491859436035 0.5773491859436035 0.005098938941955566 0.005098938941955566 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.5 -0.3720000088214874 0.3720000088214874 0.904507577419281 0.3014923632144928 -0.3014923632144928 0.13179358839988708 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.5 0.3720000088214874 -0.3720000088214874 0.904507577419281 -0.3014923632144928 0.3014923632144928 0.868206262588501 0.8682063817977905 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 0.5773491859436035 0.5773491859436035 0.5773491859436035 0.005098938941955566 0.9949008822441101 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.5 0.3720000088214874 0.3720000088214874 0.904507577419281 -0.3014923632144928 -0.3014923632144928 0.13179358839988708 0.868206262588501 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.5 -0.3720000088214874 0.3720000088214874 0.904507577419281 0.3014923632144928 -0.3014923632144928 0.13179358839988708 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 0.5773491859436035 -0.5773491859436035 -0.5773491859436035 0.9949008822441101 0.005099177360534668 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.5 -0.3720000088214874 -0.3720000088214874 0.904507577419281 0.3014923632144928 0.3014923632144928 0.868206262588501 0.1317937821149826 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.3720000088214874 0.5 0.3014923632144928 -0.3014923632144928 0.904507577419281 0.13179358839988708 0.868206262588501 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 -0.5773491859436035 -0.5773491859436035 0.5773491859436035 0.005098938941955566 0.005098938941955566 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.3720000088214874 0.5 0.3014923632144928 0.3014923632144928 0.904507577419281 0.13179358839988708 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.3720000088214874 0.5 -0.3014923632144928 0.3014923632144928 0.904507577419281 0.868206262588501 0.1317937821149826 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 0.5773491859436035 0.5773491859436035 0.5773491859436035 0.9949008226394653 0.9949010014533997 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.3720000088214874 0.5 -0.3014923632144928 -0.3014923632144928 0.904507577419281 0.868206262588501 0.8682063817977905 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.3720000088214874 0.5 -0.3014923632144928 -0.3014923632144928 0.904507577419281 0.868206262588501 0.8682063817977905 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 -0.5773491859436035 0.5773491859436035 0.5773491859436035 0.005098938941955566 0.9949008822441101 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.3720000088214874 0.5 0.3014923632144928 -0.3014923632144928 0.904507577419281 0.13179358839988708 0.868206262588501 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.3720000088214874 0.5 0.3014923632144928 0.3014923632144928 0.904507577419281 0.13179358839988708 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 0.5773491859436035 -0.5773491859436035 0.5773491859436035 0.9949008822441101 0.005099177360534668 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.3720000088214874 0.5 -0.3014923632144928 0.3014923632144928 0.904507577419281 0.868206262588501 0.1317937821149826 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 -0.5 -0.3720000088214874 -0.3720000088214874 -0.904507577419281 0.3014923632144928 0.3014923632144928 0.13179369270801544 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 -0.5773491859436035 -0.5773491859436035 0.5773491859436035 0.9949010610580444 0.005099087953567505 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.5 -0.3720000088214874 0.3720000088214874 -0.904507577419281 0.3014923632144928 -0.3014923632144928 0.8682063817977905 0.13179370760917664 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.5 -0.3720000088214874 0.3720000088214874 -0.904507577419281 0.3014923632144928 -0.3014923632144928 0.8682063817977905 0.13179370760917664 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 -0.5773491859436035 0.5773491859436035 0.5773491859436035 0.9949009418487549 0.9949009418487549 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.5 0.3720000088214874 0.3720000088214874 -0.904507577419281 -0.3014923632144928 -0.3014923632144928 0.8682063221931458 0.8682063221931458 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.5 0.3720000088214874 -0.3720000088214874 -0.904507577419281 -0.3014923632144928 0.3014923632144928 0.13179363310337067 0.8682062029838562 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 -0.5773491859436035 -0.5773491859436035 -0.5773491859436035 0.005099058151245117 0.005098968744277954 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.5 -0.3720000088214874 -0.3720000088214874 -0.904507577419281 0.3014923632144928 0.3014923632144928 0.13179369270801544 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.5 0.3720000088214874 0.3720000088214874 -0.904507577419281 -0.3014923632144928 -0.3014923632144928 0.8682063221931458 0.8682063221931458 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 -0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.005098968744277954 0.9949008226394653 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.5 0.3720000088214874 -0.3720000088214874 -0.904507577419281 -0.3014923632144928 0.3014923632144928 0.13179363310337067 0.8682062029838562 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.3720000088214874 -0.5 -0.3014923632144928 0.3014923632144928 -0.904507577419281 0.13179369270801544 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 -0.5773491859436035 -0.5773491859436035 -0.5773491859436035 0.9949010610580444 0.005099087953567505 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.3720000088214874 -0.5 0.3014923632144928 0.3014923632144928 -0.904507577419281 0.8682063817977905 0.13179370760917664 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.3720000088214874 -0.5 -0.3014923632144928 -0.3014923632144928 -0.904507577419281 0.13179363310337067 0.8682062029838562 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 0.5773491859436035 -0.5773491859436035 -0.5773491859436035 0.005099058151245117 0.005098968744277954 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.3720000088214874 -0.5 -0.3014923632144928 0.3014923632144928 -0.904507577419281 0.13179369270801544 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.3720000088214874 -0.5 0.3014923632144928 0.3014923632144928 -0.904507577419281 0.8682063817977905 0.13179370760917664 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 -0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.9949009418487549 0.9949009418487549 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.3720000088214874 -0.5 0.3014923632144928 -0.3014923632144928 -0.904507577419281 0.8682063221931458 0.8682063221931458 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.3720000088214874 -0.5 0.3014923632144928 -0.3014923632144928 -0.904507577419281 0.8682063221931458 0.8682063221931458 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.005098968744277954 0.9949008226394653 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.3720000088214874 -0.5 -0.3014923632144928 -0.3014923632144928 -0.904507577419281 0.13179363310337067 0.8682062029838562 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.5 0.3720000088214874 0.3014923632144928 -0.904507577419281 -0.3014923632144928 0.13179358839988708 0.868206262588501 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 -0.5773491859436035 -0.5773491859436035 -0.5773491859436035 0.005098938941955566 0.005099058151245117 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.5 -0.3720000088214874 0.3014923632144928 -0.904507577419281 0.3014923632144928 0.13179358839988708 0.13179369270801544 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.5 -0.3720000088214874 0.3014923632144928 -0.904507577419281 0.3014923632144928 0.13179358839988708 0.13179369270801544 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 0.5773491859436035 -0.5773491859436035 -0.5773491859436035 0.9949008822441101 0.005098938941955566 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.5 -0.3720000088214874 -0.3014923632144928 -0.904507577419281 0.3014923632144928 0.8682063221931458 0.13179363310337067 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.5 0.3720000088214874 -0.3014923632144928 -0.904507577419281 -0.3014923632144928 0.868206262588501 0.8682063221931458 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 -0.5773491859436035 -0.5773491859436035 0.5773491859436035 0.005098938941955566 0.9949010014533997 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.5 0.3720000088214874 0.3014923632144928 -0.904507577419281 -0.3014923632144928 0.13179358839988708 0.868206262588501 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.5 -0.3720000088214874 -0.3014923632144928 -0.904507577419281 0.3014923632144928 0.8682063221931458 0.13179363310337067 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 0.5773491859436035 -0.5773491859436035 0.5773491859436035 0.9949008822441101 0.9949010014533997 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.5 0.3720000088214874 -0.3014923632144928 -0.904507577419281 -0.3014923632144928 0.868206262588501 0.8682063221931458 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.47049999237060547 -0.3720000088214874 0.0 0.999969482421875 -0.0 0.13179366290569305 0.8682063817977905 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.47049999237060547 0.3720000088214874 0.0 0.999969482421875 -0.0 0.8682059049606323 0.13179358839988708 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.47049999237060547 -0.3720000088214874 0.0 1.0 -0.0 0.8682060837745667 0.8682060241699219 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.47049999237060547 -0.3720000088214874 0.7070833444595337 0.0 0.7070833444595337 0.13179366290569305 0.8682063817977905 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.5 -0.3720000088214874 -0.3014923632144928 0.904507577419281 0.3014923632144928 0.8682060837745667 0.8682060241699219 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.5 -0.3720000088214874 0.3014923632144928 0.904507577419281 0.3014923632144928 0.13179366290569305 0.8682063817977905 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.47049999237060547 0.3720000088214874 0.7070833444595337 0.0 -0.7070833444595337 0.1317935734987259 0.13179369270801544 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.5 -0.3720000088214874 0.3014923632144928 0.904507577419281 0.3014923632144928 0.13179366290569305 0.8682063817977905 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.5 0.3720000088214874 0.3014923632144928 0.904507577419281 -0.3014923632144928 0.1317935734987259 0.13179369270801544 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.47049999237060547 0.3720000088214874 -0.7070833444595337 0.0 -0.7070833444595337 0.8682059049606323 0.13179358839988708 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.5 0.3720000088214874 0.3014923632144928 0.904507577419281 -0.3014923632144928 0.1317935734987259 0.13179369270801544 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.5 0.3720000088214874 -0.3014923632144928 0.904507577419281 -0.3014923632144928 0.8682059049606323 0.13179358839988708 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.47049999237060547 -0.3720000088214874 -0.7070833444595337 0.0 0.7070833444595337 0.8682060837745667 0.8682060241699219 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.5 0.3720000088214874 -0.3014923632144928 0.904507577419281 -0.3014923632144928 0.8682059049606323 0.13179358839988708 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.5 -0.3720000088214874 -0.3014923632144928 0.904507577419281 0.3014923632144928 0.8682060837745667 0.8682060241699219 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.3720000088214874 0.47049999237060547 0.0 0.0 0.999969482421875 0.868206262588501 0.8682063817977905 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.3720000088214874 0.47049999237060547 0.0 0.0 0.999969482421875 0.13179358839988708 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.3720000088214874 0.47049999237060547 0.0 0.0 1.0 0.868206262588501 0.1317937821149826 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.3720000088214874 0.47049999237060547 -0.7070833444595337 -0.7070833444595337 -0.0 0.868206262588501 0.8682063817977905 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.3720000088214874 0.5 -0.3014923632144928 0.3014923632144928 0.904507577419281 0.868206262588501 0.1317937821149826 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.3720000088214874 0.5 -0.3014923632144928 -0.3014923632144928 0.904507577419281 0.868206262588501 0.8682063817977905 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.3720000088214874 0.47049999237060547 0.7070833444595337 -0.7070833444595337 -0.0 0.13179358839988708 0.868206262588501 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.3720000088214874 0.5 -0.3014923632144928 -0.3014923632144928 0.904507577419281 0.868206262588501 0.8682063817977905 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.3720000088214874 0.5 0.3014923632144928 -0.3014923632144928 0.904507577419281 0.13179358839988708 0.868206262588501 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.3720000088214874 0.47049999237060547 0.7070833444595337 0.7070833444595337 -0.0 0.13179358839988708 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.3720000088214874 0.5 0.3014923632144928 -0.3014923632144928 0.904507577419281 0.13179358839988708 0.868206262588501 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.3720000088214874 0.5 0.3014923632144928 0.3014923632144928 0.904507577419281 0.13179358839988708 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.3720000088214874 0.47049999237060547 -0.7070833444595337 0.7070833444595337 -0.0 0.868206262588501 0.1317937821149826 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.3720000088214874 0.5 0.3014923632144928 0.3014923632144928 0.904507577419281 0.13179358839988708 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.3720000088214874 0.5 -0.3014923632144928 0.3014923632144928 0.904507577419281 0.868206262588501 0.1317937821149826 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 -0.47049999237060547 0.3720000088214874 0.3720000088214874 -0.999969482421875 0.0 -0.0 0.8682063221931458 0.8682063221931458 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.47049999237060547 -0.3720000088214874 -0.3720000088214874 -0.999969482421875 0.0 -0.0 0.13179369270801544 0.13179361820220947 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 -0.47049999237060547 -0.3720000088214874 0.3720000088214874 -1.0 0.0 -0.0 0.8682063817977905 0.13179370760917664 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 -0.47049999237060547 0.3720000088214874 0.3720000088214874 0.0 -0.7070833444595337 -0.7070833444595337 0.8682063221931458 0.8682063221931458 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.5 -0.3720000088214874 0.3720000088214874 -0.904507577419281 0.3014923632144928 -0.3014923632144928 0.8682063817977905 0.13179370760917664 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.5 0.3720000088214874 0.3720000088214874 -0.904507577419281 -0.3014923632144928 -0.3014923632144928 0.8682063221931458 0.8682063221931458 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.47049999237060547 0.3720000088214874 -0.3720000088214874 0.0 -0.7070833444595337 0.7070833444595337 0.13179363310337067 0.8682062029838562 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.5 0.3720000088214874 0.3720000088214874 -0.904507577419281 -0.3014923632144928 -0.3014923632144928 0.8682063221931458 0.8682063221931458 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.5 0.3720000088214874 -0.3720000088214874 -0.904507577419281 -0.3014923632144928 0.3014923632144928 0.13179363310337067 0.8682062029838562 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.47049999237060547 -0.3720000088214874 -0.3720000088214874 0.0 0.7070833444595337 0.7070833444595337 0.13179369270801544 0.13179361820220947 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 -0.5 0.3720000088214874 -0.3720000088214874 -0.904507577419281 -0.3014923632144928 0.3014923632144928 0.13179363310337067 0.8682062029838562 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.5 -0.3720000088214874 -0.3720000088214874 -0.904507577419281 0.3014923632144928 0.3014923632144928 0.13179369270801544 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.47049999237060547 -0.3720000088214874 0.3720000088214874 0.0 0.7070833444595337 -0.7070833444595337 0.8682063817977905 0.13179370760917664 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 -0.5 -0.3720000088214874 -0.3720000088214874 -0.904507577419281 0.3014923632144928 0.3014923632144928 0.13179369270801544 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.5 -0.3720000088214874 0.3720000088214874 -0.904507577419281 0.3014923632144928 -0.3014923632144928 0.8682063817977905 0.13179370760917664 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.47049999237060547 -0.3720000088214874 0.0 -0.999969482421875 -0.0 0.8682063221931458 0.13179363310337067 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.47049999237060547 0.3720000088214874 0.0 -0.999969482421875 -0.0 0.13179358839988708 0.868206262588501 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.47049999237060547 -0.3720000088214874 0.0 -1.0 -0.0 0.13179358839988708 0.13179369270801544 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.47049999237060547 -0.3720000088214874 -0.7070833444595337 0.0 0.7070833444595337 0.8682063221931458 0.13179363310337067 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.5 -0.3720000088214874 0.3014923632144928 -0.904507577419281 0.3014923632144928 0.13179358839988708 0.13179369270801544 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.5 -0.3720000088214874 -0.3014923632144928 -0.904507577419281 0.3014923632144928 0.8682063221931458 0.13179363310337067 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.47049999237060547 0.3720000088214874 -0.7070833444595337 0.0 -0.7070833444595337 0.868206262588501 0.8682063221931458 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.5 -0.3720000088214874 -0.3014923632144928 -0.904507577419281 0.3014923632144928 0.8682063221931458 0.13179363310337067 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.5 0.3720000088214874 -0.3014923632144928 -0.904507577419281 -0.3014923632144928 0.868206262588501 0.8682063221931458 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.47049999237060547 0.3720000088214874 0.7070833444595337 0.0 -0.7070833444595337 0.13179358839988708 0.868206262588501 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.5 0.3720000088214874 -0.3014923632144928 -0.904507577419281 -0.3014923632144928 0.868206262588501 0.8682063221931458 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.5 0.3720000088214874 0.3014923632144928 -0.904507577419281 -0.3014923632144928 0.13179358839988708 0.868206262588501 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.47049999237060547 -0.3720000088214874 0.7070833444595337 0.0 0.7070833444595337 0.13179358839988708 0.13179369270801544 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.5 0.3720000088214874 0.3014923632144928 -0.904507577419281 -0.3014923632144928 0.13179358839988708 0.868206262588501 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.5 -0.3720000088214874 0.3014923632144928 -0.904507577419281 0.3014923632144928 0.13179358839988708 0.13179369270801544 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.47049999237060547 0.3720000088214874 -0.3720000088214874 0.999969482421875 0.0 -0.0 0.868206262588501 0.8682063817977905 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.47049999237060547 -0.3720000088214874 0.3720000088214874 0.999969482421875 0.0 -0.0 0.13179358839988708 0.13179361820220947 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 0.47049999237060547 -0.3720000088214874 -0.3720000088214874 1.0 0.0 -0.0 0.868206262588501 0.1317937821149826 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 0.47049999237060547 0.3720000088214874 -0.3720000088214874 0.0 -0.7070833444595337 0.7070833444595337 0.868206262588501 0.8682063817977905 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.5 -0.3720000088214874 -0.3720000088214874 0.904507577419281 0.3014923632144928 0.3014923632144928 0.868206262588501 0.1317937821149826 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.5 0.3720000088214874 -0.3720000088214874 0.904507577419281 -0.3014923632144928 0.3014923632144928 0.868206262588501 0.8682063817977905 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.47049999237060547 0.3720000088214874 0.3720000088214874 0.0 -0.7070833444595337 -0.7070833444595337 0.13179358839988708 0.868206262588501 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.5 0.3720000088214874 -0.3720000088214874 0.904507577419281 -0.3014923632144928 0.3014923632144928 0.868206262588501 0.8682063817977905 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.5 0.3720000088214874 0.3720000088214874 0.904507577419281 -0.3014923632144928 -0.3014923632144928 0.13179358839988708 0.868206262588501 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.47049999237060547 -0.3720000088214874 0.3720000088214874 0.0 0.7070833444595337 -0.7070833444595337 0.13179358839988708 0.13179361820220947 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 0.5 0.3720000088214874 0.3720000088214874 0.904507577419281 -0.3014923632144928 -0.3014923632144928 0.13179358839988708 0.868206262588501 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.5 -0.3720000088214874 0.3720000088214874 0.904507577419281 0.3014923632144928 -0.3014923632144928 0.13179358839988708 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.47049999237060547 -0.3720000088214874 -0.3720000088214874 0.0 0.7070833444595337 0.7070833444595337 0.868206262588501 0.1317937821149826 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 0.5 -0.3720000088214874 0.3720000088214874 0.904507577419281 0.3014923632144928 -0.3014923632144928 0.13179358839988708 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.5 -0.3720000088214874 -0.3720000088214874 0.904507577419281 0.3014923632144928 0.3014923632144928 0.868206262588501 0.1317937821149826 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.3720000088214874 -0.47049999237060547 0.0 0.0 -0.999969482421875 0.8682063221931458 0.8682063221931458 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.3720000088214874 -0.47049999237060547 0.0 0.0 -0.999969482421875 0.13179369270801544 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.3720000088214874 -0.47049999237060547 0.0 0.0 -1.0 0.8682063817977905 0.13179370760917664 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.3720000088214874 -0.47049999237060547 0.7070833444595337 -0.7070833444595337 -0.0 0.8682063221931458 0.8682063221931458 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.3720000088214874 -0.5 0.3014923632144928 0.3014923632144928 -0.904507577419281 0.8682063817977905 0.13179370760917664 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.3720000088214874 -0.5 0.3014923632144928 -0.3014923632144928 -0.904507577419281 0.8682063221931458 0.8682063221931458 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.3720000088214874 -0.47049999237060547 -0.7070833444595337 -0.7070833444595337 -0.0 0.13179363310337067 0.8682062029838562 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.3720000088214874 -0.5 0.3014923632144928 -0.3014923632144928 -0.904507577419281 0.8682063221931458 0.8682063221931458 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.3720000088214874 -0.5 -0.3014923632144928 -0.3014923632144928 -0.904507577419281 0.13179363310337067 0.8682062029838562 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.3720000088214874 -0.47049999237060547 -0.7070833444595337 0.7070833444595337 -0.0 0.13179369270801544 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.3720000088214874 -0.5 -0.3014923632144928 -0.3014923632144928 -0.904507577419281 0.13179363310337067 0.8682062029838562 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.3720000088214874 -0.5 -0.3014923632144928 0.3014923632144928 -0.904507577419281 0.13179369270801544 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.3720000088214874 -0.47049999237060547 0.7070833444595337 0.7070833444595337 -0.0 0.8682063817977905 0.13179370760917664 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.3720000088214874 -0.5 -0.3014923632144928 0.3014923632144928 -0.904507577419281 0.13179369270801544 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.3720000088214874 -0.5 0.3014923632144928 0.3014923632144928 -0.904507577419281 0.8682063817977905 0.13179370760917664 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.5 0.3720000088214874 0.3014923632144928 0.904507577419281 -0.3014923632144928 0.1317935734987259 0.13179369270801544 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 -0.5773491859436035 0.5773491859436035 0.5773491859436035 0.005098938941955566 0.005099058151245117 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 0.5773491859436035 0.5773491859436035 0.5773491859436035 0.994900643825531 0.005098938941955566 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.5 0.3720000088214874 -0.3014923632144928 0.904507577419281 -0.3014923632144928 0.8682059049606323 0.13179358839988708 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 0.5773491859436035 0.5773491859436035 0.5773491859436035 0.994900643825531 0.005098938941955566 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.9949007630348206 0.994900643825531 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.5 -0.3720000088214874 0.3014923632144928 0.904507577419281 0.3014923632144928 0.13179366290569305 0.8682063817977905 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 -0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.005099058151245117 0.9949010014533997 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 -0.5773491859436035 0.5773491859436035 0.5773491859436035 0.005098938941955566 0.005099058151245117 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.5 -0.3720000088214874 -0.3014923632144928 0.904507577419281 0.3014923632144928 0.8682060837745667 0.8682060241699219 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.9949007630348206 0.994900643825531 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 -0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.005099058151245117 0.9949010014533997 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.5 -0.3720000088214874 -0.3720000088214874 0.904507577419281 0.3014923632144928 0.3014923632144928 0.868206262588501 0.1317937821149826 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 0.5773491859436035 -0.5773491859436035 -0.5773491859436035 0.9949008822441101 0.005099177360534668 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.9949008226394653 0.9949010014533997 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.5 0.3720000088214874 0.3720000088214874 0.904507577419281 -0.3014923632144928 -0.3014923632144928 0.13179358839988708 0.868206262588501 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 0.5773491859436035 0.5773491859436035 0.5773491859436035 0.005098938941955566 0.9949008822441101 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 0.5773491859436035 -0.5773491859436035 0.5773491859436035 0.005098938941955566 0.005098938941955566 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.5 0.3720000088214874 -0.3720000088214874 0.904507577419281 -0.3014923632144928 0.3014923632144928 0.868206262588501 0.8682063817977905 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.9949008226394653 0.9949010014533997 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 0.5773491859436035 0.5773491859436035 0.5773491859436035 0.005098938941955566 0.9949008822441101 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.5 -0.3720000088214874 0.3720000088214874 0.904507577419281 0.3014923632144928 -0.3014923632144928 0.13179358839988708 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 0.5773491859436035 -0.5773491859436035 0.5773491859436035 0.005098938941955566 0.005098938941955566 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 0.5773491859436035 -0.5773491859436035 -0.5773491859436035 0.9949008822441101 0.005099177360534668 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.3720000088214874 0.5 0.3014923632144928 -0.3014923632144928 0.904507577419281 0.13179358839988708 0.868206262588501 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 -0.5773491859436035 0.5773491859436035 0.5773491859436035 0.005098938941955566 0.9949008822441101 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 -0.5773491859436035 -0.5773491859436035 0.5773491859436035 0.005098938941955566 0.005098938941955566 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.3720000088214874 0.5 -0.3014923632144928 0.3014923632144928 0.904507577419281 0.868206262588501 0.1317937821149826 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 0.5773491859436035 -0.5773491859436035 0.5773491859436035 0.9949008822441101 0.005099177360534668 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 0.5773491859436035 0.5773491859436035 0.5773491859436035 0.9949008226394653 0.9949010014533997 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.3720000088214874 0.5 -0.3014923632144928 -0.3014923632144928 0.904507577419281 0.868206262588501 0.8682063817977905 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 0.5773491859436035 0.5773491859436035 0.5773491859436035 0.9949008226394653 0.9949010014533997 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 -0.5773491859436035 0.5773491859436035 0.5773491859436035 0.005098938941955566 0.9949008822441101 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.3720000088214874 0.5 0.3014923632144928 0.3014923632144928 0.904507577419281 0.13179358839988708 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 -0.5773491859436035 -0.5773491859436035 0.5773491859436035 0.005098938941955566 0.005098938941955566 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 0.5773491859436035 -0.5773491859436035 0.5773491859436035 0.9949008822441101 0.005099177360534668 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.5 -0.3720000088214874 -0.3720000088214874 -0.904507577419281 0.3014923632144928 0.3014923632144928 0.13179369270801544 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 -0.5773491859436035 -0.5773491859436035 -0.5773491859436035 0.005099058151245117 0.005098968744277954 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 -0.5773491859436035 -0.5773491859436035 0.5773491859436035 0.9949010610580444 0.005099087953567505 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.5 -0.3720000088214874 0.3720000088214874 -0.904507577419281 0.3014923632144928 -0.3014923632144928 0.8682063817977905 0.13179370760917664 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 -0.5773491859436035 -0.5773491859436035 0.5773491859436035 0.9949010610580444 0.005099087953567505 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 -0.5773491859436035 0.5773491859436035 0.5773491859436035 0.9949009418487549 0.9949009418487549 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.5 0.3720000088214874 -0.3720000088214874 -0.904507577419281 -0.3014923632144928 0.3014923632144928 0.13179363310337067 0.8682062029838562 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 -0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.005098968744277954 0.9949008226394653 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 -0.5773491859436035 -0.5773491859436035 -0.5773491859436035 0.005099058151245117 0.005098968744277954 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.5 0.3720000088214874 0.3720000088214874 -0.904507577419281 -0.3014923632144928 -0.3014923632144928 0.8682063221931458 0.8682063221931458 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 -0.5773491859436035 0.5773491859436035 0.5773491859436035 0.9949009418487549 0.9949009418487549 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 -0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.005098968744277954 0.9949008226394653 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.3720000088214874 -0.5 -0.3014923632144928 0.3014923632144928 -0.904507577419281 0.13179369270801544 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 0.5773491859436035 -0.5773491859436035 -0.5773491859436035 0.005099058151245117 0.005098968744277954 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 -0.5773491859436035 -0.5773491859436035 -0.5773491859436035 0.9949010610580444 0.005099087953567505 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.3720000088214874 -0.5 -0.3014923632144928 -0.3014923632144928 -0.904507577419281 0.13179363310337067 0.8682062029838562 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.005098968744277954 0.9949008226394653 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 0.5773491859436035 -0.5773491859436035 -0.5773491859436035 0.005099058151245117 0.005098968744277954 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.3720000088214874 -0.5 0.3014923632144928 0.3014923632144928 -0.904507577419281 0.8682063817977905 0.13179370760917664 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 -0.5773491859436035 -0.5773491859436035 -0.5773491859436035 0.9949010610580444 0.005099087953567505 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 -0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.9949009418487549 0.9949009418487549 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.3720000088214874 -0.5 0.3014923632144928 -0.3014923632144928 -0.904507577419281 0.8682063221931458 0.8682063221931458 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 -0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.9949009418487549 0.9949009418487549 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.005098968744277954 0.9949008226394653 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.5 0.3720000088214874 0.3014923632144928 -0.904507577419281 -0.3014923632144928 0.13179358839988708 0.868206262588501 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 -0.5773491859436035 -0.5773491859436035 0.5773491859436035 0.005098938941955566 0.9949010014533997 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 -0.5773491859436035 -0.5773491859436035 -0.5773491859436035 0.005098938941955566 0.005099058151245117 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.5 -0.3720000088214874 0.3014923632144928 -0.904507577419281 0.3014923632144928 0.13179358839988708 0.13179369270801544 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 -0.5773491859436035 -0.5773491859436035 -0.5773491859436035 0.005098938941955566 0.005099058151245117 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 0.5773491859436035 -0.5773491859436035 -0.5773491859436035 0.9949008822441101 0.005098938941955566 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.5 0.3720000088214874 -0.3014923632144928 -0.904507577419281 -0.3014923632144928 0.868206262588501 0.8682063221931458 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 0.5773491859436035 -0.5773491859436035 0.5773491859436035 0.9949008822441101 0.9949010014533997 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 -0.5773491859436035 -0.5773491859436035 0.5773491859436035 0.005098938941955566 0.9949010014533997 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.5 -0.3720000088214874 -0.3014923632144928 -0.904507577419281 0.3014923632144928 0.8682063221931458 0.13179363310337067 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 0.5773491859436035 -0.5773491859436035 -0.5773491859436035 0.9949008822441101 0.005098938941955566 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 0.5773491859436035 -0.5773491859436035 0.5773491859436035 0.9949008822441101 0.9949010014533997 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.47049999237060547 -0.3720000088214874 0.0 0.999969482421875 -0.0 0.13179366290569305 0.8682063817977905 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.47049999237060547 0.3720000088214874 0.0 1.0 -0.0 0.1317935734987259 0.13179369270801544 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.47049999237060547 0.3720000088214874 0.0 0.999969482421875 -0.0 0.8682059049606323 0.13179358839988708 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.47049999237060547 -0.3720000088214874 0.7070833444595337 0.0 0.7070833444595337 0.13179366290569305 0.8682063817977905 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.47049999237060547 -0.3720000088214874 -0.7070833444595337 0.0 0.7070833444595337 0.8682060837745667 0.8682060241699219 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.5 -0.3720000088214874 -0.3014923632144928 0.904507577419281 0.3014923632144928 0.8682060837745667 0.8682060241699219 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.47049999237060547 0.3720000088214874 0.7070833444595337 0.0 -0.7070833444595337 0.1317935734987259 0.13179369270801544 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.47049999237060547 -0.3720000088214874 0.7070833444595337 0.0 0.7070833444595337 0.13179366290569305 0.8682063817977905 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.5 -0.3720000088214874 0.3014923632144928 0.904507577419281 0.3014923632144928 0.13179366290569305 0.8682063817977905 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.47049999237060547 0.3720000088214874 -0.7070833444595337 0.0 -0.7070833444595337 0.8682059049606323 0.13179358839988708 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.47049999237060547 0.3720000088214874 0.7070833444595337 0.0 -0.7070833444595337 0.1317935734987259 0.13179369270801544 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.5 0.3720000088214874 0.3014923632144928 0.904507577419281 -0.3014923632144928 0.1317935734987259 0.13179369270801544 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.47049999237060547 -0.3720000088214874 -0.7070833444595337 0.0 0.7070833444595337 0.8682060837745667 0.8682060241699219 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.47049999237060547 0.3720000088214874 -0.7070833444595337 0.0 -0.7070833444595337 0.8682059049606323 0.13179358839988708 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.5 0.3720000088214874 -0.3014923632144928 0.904507577419281 -0.3014923632144928 0.8682059049606323 0.13179358839988708 0 0.9999986290931702 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.3720000088214874 0.47049999237060547 0.0 0.0 0.999969482421875 0.868206262588501 0.8682063817977905 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.3720000088214874 0.47049999237060547 0.0 0.0 1.0 0.13179358839988708 0.868206262588501 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.3720000088214874 0.47049999237060547 0.0 0.0 0.999969482421875 0.13179358839988708 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.3720000088214874 0.47049999237060547 -0.7070833444595337 -0.7070833444595337 -0.0 0.868206262588501 0.8682063817977905 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.3720000088214874 0.47049999237060547 -0.7070833444595337 0.7070833444595337 -0.0 0.868206262588501 0.1317937821149826 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.3720000088214874 0.5 -0.3014923632144928 0.3014923632144928 0.904507577419281 0.868206262588501 0.1317937821149826 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.3720000088214874 0.47049999237060547 0.7070833444595337 -0.7070833444595337 -0.0 0.13179358839988708 0.868206262588501 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.3720000088214874 0.47049999237060547 -0.7070833444595337 -0.7070833444595337 -0.0 0.868206262588501 0.8682063817977905 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.3720000088214874 0.5 -0.3014923632144928 -0.3014923632144928 0.904507577419281 0.868206262588501 0.8682063817977905 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.3720000088214874 0.47049999237060547 0.7070833444595337 0.7070833444595337 -0.0 0.13179358839988708 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.3720000088214874 0.47049999237060547 0.7070833444595337 -0.7070833444595337 -0.0 0.13179358839988708 0.868206262588501 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.3720000088214874 0.5 0.3014923632144928 -0.3014923632144928 0.904507577419281 0.13179358839988708 0.868206262588501 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.3720000088214874 0.47049999237060547 -0.7070833444595337 0.7070833444595337 -0.0 0.868206262588501 0.1317937821149826 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.3720000088214874 0.47049999237060547 0.7070833444595337 0.7070833444595337 -0.0 0.13179358839988708 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.3720000088214874 0.5 0.3014923632144928 0.3014923632144928 0.904507577419281 0.13179358839988708 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.47049999237060547 0.3720000088214874 0.3720000088214874 -0.999969482421875 0.0 -0.0 0.8682063221931458 0.8682063221931458 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.47049999237060547 0.3720000088214874 -0.3720000088214874 -1.0 0.0 -0.0 0.13179363310337067 0.8682062029838562 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.47049999237060547 -0.3720000088214874 -0.3720000088214874 -0.999969482421875 0.0 -0.0 0.13179369270801544 0.13179361820220947 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 -0.47049999237060547 0.3720000088214874 0.3720000088214874 0.0 -0.7070833444595337 -0.7070833444595337 0.8682063221931458 0.8682063221931458 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.47049999237060547 -0.3720000088214874 0.3720000088214874 0.0 0.7070833444595337 -0.7070833444595337 0.8682063817977905 0.13179370760917664 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 -0.5 -0.3720000088214874 0.3720000088214874 -0.904507577419281 0.3014923632144928 -0.3014923632144928 0.8682063817977905 0.13179370760917664 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.47049999237060547 0.3720000088214874 -0.3720000088214874 0.0 -0.7070833444595337 0.7070833444595337 0.13179363310337067 0.8682062029838562 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.47049999237060547 0.3720000088214874 0.3720000088214874 0.0 -0.7070833444595337 -0.7070833444595337 0.8682063221931458 0.8682063221931458 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.5 0.3720000088214874 0.3720000088214874 -0.904507577419281 -0.3014923632144928 -0.3014923632144928 0.8682063221931458 0.8682063221931458 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.47049999237060547 -0.3720000088214874 -0.3720000088214874 0.0 0.7070833444595337 0.7070833444595337 0.13179369270801544 0.13179361820220947 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 -0.47049999237060547 0.3720000088214874 -0.3720000088214874 0.0 -0.7070833444595337 0.7070833444595337 0.13179363310337067 0.8682062029838562 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.5 0.3720000088214874 -0.3720000088214874 -0.904507577419281 -0.3014923632144928 0.3014923632144928 0.13179363310337067 0.8682062029838562 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.47049999237060547 -0.3720000088214874 0.3720000088214874 0.0 0.7070833444595337 -0.7070833444595337 0.8682063817977905 0.13179370760917664 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 -0.47049999237060547 -0.3720000088214874 -0.3720000088214874 0.0 0.7070833444595337 0.7070833444595337 0.13179369270801544 0.13179361820220947 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 -0.5 -0.3720000088214874 -0.3720000088214874 -0.904507577419281 0.3014923632144928 0.3014923632144928 0.13179369270801544 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.47049999237060547 -0.3720000088214874 0.0 -0.999969482421875 -0.0 0.8682063221931458 0.13179363310337067 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.47049999237060547 0.3720000088214874 0.0 -1.0 -0.0 0.868206262588501 0.8682063221931458 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.47049999237060547 0.3720000088214874 0.0 -0.999969482421875 -0.0 0.13179358839988708 0.868206262588501 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.47049999237060547 -0.3720000088214874 -0.7070833444595337 0.0 0.7070833444595337 0.8682063221931458 0.13179363310337067 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.47049999237060547 -0.3720000088214874 0.7070833444595337 0.0 0.7070833444595337 0.13179358839988708 0.13179369270801544 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.5 -0.3720000088214874 0.3014923632144928 -0.904507577419281 0.3014923632144928 0.13179358839988708 0.13179369270801544 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.47049999237060547 0.3720000088214874 -0.7070833444595337 0.0 -0.7070833444595337 0.868206262588501 0.8682063221931458 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.47049999237060547 -0.3720000088214874 -0.7070833444595337 0.0 0.7070833444595337 0.8682063221931458 0.13179363310337067 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.5 -0.3720000088214874 -0.3014923632144928 -0.904507577419281 0.3014923632144928 0.8682063221931458 0.13179363310337067 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.47049999237060547 0.3720000088214874 0.7070833444595337 0.0 -0.7070833444595337 0.13179358839988708 0.868206262588501 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.47049999237060547 0.3720000088214874 -0.7070833444595337 0.0 -0.7070833444595337 0.868206262588501 0.8682063221931458 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.5 0.3720000088214874 -0.3014923632144928 -0.904507577419281 -0.3014923632144928 0.868206262588501 0.8682063221931458 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.47049999237060547 -0.3720000088214874 0.7070833444595337 0.0 0.7070833444595337 0.13179358839988708 0.13179369270801544 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.47049999237060547 0.3720000088214874 0.7070833444595337 0.0 -0.7070833444595337 0.13179358839988708 0.868206262588501 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.5 0.3720000088214874 0.3014923632144928 -0.904507577419281 -0.3014923632144928 0.13179358839988708 0.868206262588501 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.47049999237060547 0.3720000088214874 -0.3720000088214874 0.999969482421875 0.0 -0.0 0.868206262588501 0.8682063817977905 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.47049999237060547 0.3720000088214874 0.3720000088214874 1.0 0.0 -0.0 0.13179358839988708 0.868206262588501 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.47049999237060547 -0.3720000088214874 0.3720000088214874 0.999969482421875 0.0 -0.0 0.13179358839988708 0.13179361820220947 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 0.47049999237060547 0.3720000088214874 -0.3720000088214874 0.0 -0.7070833444595337 0.7070833444595337 0.868206262588501 0.8682063817977905 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.47049999237060547 -0.3720000088214874 -0.3720000088214874 0.0 0.7070833444595337 0.7070833444595337 0.868206262588501 0.1317937821149826 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 0.5 -0.3720000088214874 -0.3720000088214874 0.904507577419281 0.3014923632144928 0.3014923632144928 0.868206262588501 0.1317937821149826 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.47049999237060547 0.3720000088214874 0.3720000088214874 0.0 -0.7070833444595337 -0.7070833444595337 0.13179358839988708 0.868206262588501 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.47049999237060547 0.3720000088214874 -0.3720000088214874 0.0 -0.7070833444595337 0.7070833444595337 0.868206262588501 0.8682063817977905 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.5 0.3720000088214874 -0.3720000088214874 0.904507577419281 -0.3014923632144928 0.3014923632144928 0.868206262588501 0.8682063817977905 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.47049999237060547 -0.3720000088214874 0.3720000088214874 0.0 0.7070833444595337 -0.7070833444595337 0.13179358839988708 0.13179361820220947 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 0.47049999237060547 0.3720000088214874 0.3720000088214874 0.0 -0.7070833444595337 -0.7070833444595337 0.13179358839988708 0.868206262588501 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.5 0.3720000088214874 0.3720000088214874 0.904507577419281 -0.3014923632144928 -0.3014923632144928 0.13179358839988708 0.868206262588501 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.47049999237060547 -0.3720000088214874 -0.3720000088214874 0.0 0.7070833444595337 0.7070833444595337 0.868206262588501 0.1317937821149826 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 0.47049999237060547 -0.3720000088214874 0.3720000088214874 0.0 0.7070833444595337 -0.7070833444595337 0.13179358839988708 0.13179361820220947 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 0.5 -0.3720000088214874 0.3720000088214874 0.904507577419281 0.3014923632144928 -0.3014923632144928 0.13179358839988708 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.3720000088214874 -0.47049999237060547 0.0 0.0 -0.999969482421875 0.8682063221931458 0.8682063221931458 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.3720000088214874 -0.47049999237060547 0.0 0.0 -1.0 0.13179363310337067 0.8682062029838562 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.3720000088214874 -0.47049999237060547 0.0 0.0 -0.999969482421875 0.13179369270801544 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.3720000088214874 -0.47049999237060547 0.7070833444595337 -0.7070833444595337 -0.0 0.8682063221931458 0.8682063221931458 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.3720000088214874 -0.47049999237060547 0.7070833444595337 0.7070833444595337 -0.0 0.8682063817977905 0.13179370760917664 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.3720000088214874 -0.5 0.3014923632144928 0.3014923632144928 -0.904507577419281 0.8682063817977905 0.13179370760917664 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.3720000088214874 -0.47049999237060547 -0.7070833444595337 -0.7070833444595337 -0.0 0.13179363310337067 0.8682062029838562 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.3720000088214874 -0.47049999237060547 0.7070833444595337 -0.7070833444595337 -0.0 0.8682063221931458 0.8682063221931458 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.3720000088214874 0.3720000088214874 -0.5 0.3014923632144928 -0.3014923632144928 -0.904507577419281 0.8682063221931458 0.8682063221931458 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.3720000088214874 -0.47049999237060547 -0.7070833444595337 0.7070833444595337 -0.0 0.13179369270801544 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.3720000088214874 -0.47049999237060547 -0.7070833444595337 -0.7070833444595337 -0.0 0.13179363310337067 0.8682062029838562 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 0.3720000088214874 0.3720000088214874 -0.5 -0.3014923632144928 -0.3014923632144928 -0.904507577419281 0.13179363310337067 0.8682062029838562 0 0.9999986886978149 0 0.0 0 0.0 0 0.0 -0.3720000088214874 -0.3720000088214874 -0.47049999237060547 0.7070833444595337 0.7070833444595337 -0.0 0.8682063817977905 0.13179370760917664 0 0.9999985098838806 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.3720000088214874 -0.47049999237060547 -0.7070833444595337 0.7070833444595337 -0.0 0.13179369270801544 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0.3720000088214874 -0.3720000088214874 -0.5 -0.3014923632144928 0.3014923632144928 -0.904507577419281 0.13179369270801544 0.13179361820220947 0 0.9999984502792358 0 0.0 0 0.0 0 0.0 0 1 2 0 3 4 5 0 6 7 8 0 9 10 11 0 12 13 14 0 15 16 17 0 18 19 20 0 21 22 23 0 24 25 26 0 27 28 29 0 30 31 32 0 33 34 35 0 36 37 38 0 39 40 41 0 42 43 44 0 45 46 47 0 48 49 50 0 51 52 53 0 54 55 56 0 57 58 59 0 60 61 62 0 63 64 65 0 66 67 68 0 69 70 71 0 72 73 74 1 75 76 77 0 78 79 80 0 81 82 83 0 84 85 86 0 87 88 89 1 90 91 92 0 93 94 95 0 96 97 98 0 99 100 101 0 102 103 104 1 105 106 107 0 108 109 110 0 111 112 113 0 114 115 116 0 117 118 119 1 120 121 122 0 123 124 125 0 126 127 128 0 129 130 131 0 132 133 134 1 135 136 137 0 138 139 140 0 141 142 143 0 144 145 146 0 147 148 149 1 150 151 152 0 153 154 155 0 156 157 158 0 159 160 161 0 162 163 164 0 165 166 167 0 168 169 170 0 171 172 173 0 174 175 176 0 177 178 179 0 180 181 182 0 183 184 185 0 186 187 188 0 189 190 191 0 192 193 194 0 195 196 197 0 198 199 200 0 201 202 203 0 204 205 206 0 207 208 209 0 210 211 212 0 213 214 215 0 216 217 218 0 219 220 221 0 222 223 224 0 225 226 227 0 228 229 230 0 231 232 233 0 234 235 236 1 237 238 239 0 240 241 242 0 243 244 245 0 246 247 248 0 249 250 251 1 252 253 254 0 255 256 257 0 258 259 260 0 261 262 263 0 264 265 266 1 267 268 269 0 270 271 272 0 273 274 275 0 276 277 278 0 279 280 281 1 282 283 284 0 285 286 287 0 288 289 290 0 291 292 293 0 294 295 296 1 297 298 299 0 300 301 302 0 303 304 305 0 306 307 308 0 309 310 311 1 312 313 314 0 315 316 317 0 318 319 320 0 321 322 323 0 Bone -1 0.0 0.0 -0.0 0.0 1.0 -0.0 0.0 Bone ================================================ FILE: data/models/mongus.dymdl ================================================ DYMDLv1 1500 500 1 13 13 mongus 0.0 1.4161217212677002 0.1510397493839264 0.0 0.9378948211669922 0.34690389037132263 0.28625792264938354 0.11215589195489883 0 0.4460723102092743 1 0.2005683183670044 2 0.000560328655410558 0 0.0 0.058150164783000946 1.453392744064331 -0.0034714294597506523 0.5017548203468323 0.843226432800293 0.19284646213054657 0.19909562170505524 0.09749332815408707 1 0.38084477186203003 0 0.2609921395778656 2 0.015516634099185467 0 0.0 0.0 1.4754657745361328 -0.018200816586613655 0.0 0.9835200309753418 0.18070009350776672 0.2048933058977127 0.06445963680744171 1 0.39598000049591064 0 0.22064290940761566 2 0.005581408739089966 0 0.0 0.1459522545337677 1.3888463973999023 -0.1359991729259491 0.8357188701629639 0.5164341926574707 0.18662068247795105 0.11418572813272476 0.1270817071199417 1 0.47086650133132935 0 0.11861134320497513 0 0.0 0 0.0 0.058150164783000946 1.453392744064331 -0.0034714294597506523 0.5017548203468323 0.843226432800293 0.19284646213054657 0.19909562170505524 0.09749332815408707 1 0.38084477186203003 0 0.2609921395778656 2 0.015516634099185467 0 0.0 0.11630034446716309 1.385688066482544 0.011257962323725224 0.8467971086502075 0.5172887444496155 0.12363047897815704 0.19177863001823425 0.14417126774787903 1 0.4200000762939453 0 0.41010770201683044 2 0.021439071744680405 0 0.0 0.0 1.4864554405212402 -0.1874413788318634 0.0 0.999664306640625 -0.02554399147629738 0.12280824035406113 0.02889185957610607 1 0.42892152070999146 0 0.06715913861989975 0 0.0 0 0.0 0.09474784880876541 1.4414864778518677 -0.305348664522171 0.47962889075279236 0.8599505424499512 -0.1743827611207962 0.04443186894059181 0.0578567311167717 1 0.4937168061733246 0 0.006853099912405014 0 0.0 0 0.0 0.0 1.4688720703125 -0.35228610038757324 0.0 0.9361552596092224 -0.35151219367980957 0.03984704613685608 0.00020304521603975445 1 0.5002522468566895 0 0.0 0 0.0 0 0.0 0.11630034446716309 1.385688066482544 0.011257962323725224 0.8467971086502075 0.5172887444496155 0.12363047897815704 0.19177863001823425 0.14417126774787903 1 0.4200000762939453 0 0.41010770201683044 2 0.021439071744680405 0 0.0 0.17711219191551208 1.2111425399780273 -0.08284486830234528 0.9780877232551575 0.07745597511529922 0.19315165281295776 0.11920919269323349 0.2266269475221634 1 0.6505640745162964 0 0.27260327339172363 0 0.0 0 0.0 0.1459522545337677 1.3888463973999023 -0.1359991729259491 0.8357188701629639 0.5164341926574707 0.18662068247795105 0.11418572813272476 0.1270817071199417 1 0.47086650133132935 0 0.11861134320497513 0 0.0 0 0.0 0.17758521437644958 1.0509424209594727 -0.009452779777348042 0.9080782532691956 -0.1265297383069992 -0.39918211102485657 0.13626915216445923 0.3208780884742737 0 0.7504677176475525 1 0.16195771098136902 5 0.05459079146385193 2 0.0 0.15271435678005219 1.1326109170913696 -0.08103625476360321 0.9580675959587097 -0.28070923686027527 0.05710013210773468 0.10731169581413269 0.2683471441268921 1 0.6765074133872986 0 0.47961559891700745 0 0.0 0 0.0 0.17734870314598083 1.1222507953643799 0.016492163762450218 0.9736624956130981 0.07391583174467087 -0.21564379334449768 0.15870711207389832 0.2861701548099518 0 0.7400460243225098 1 0.2110891044139862 5 0.021712277084589005 2 0.0 0.17548006772994995 0.9740344882011414 0.03773410618305206 0.8627887964248657 -0.095828115940094 -0.49632251262664795 0.14806827902793884 0.3685593605041504 0 0.7296561002731323 5 0.13401056826114655 1 0.05976245924830437 6 0.02519860677421093 0.10067398101091385 0.9663213491439819 -0.08786684274673462 0.712576687335968 -0.24292734265327454 -0.6581621766090393 0.06711860746145248 0.3559820055961609 0 0.6806142330169678 1 0.19555994868278503 5 0.04794131591916084 6 0.04703441634774208 0.17758521437644958 1.0509424209594727 -0.009452779777348042 0.9080782532691956 -0.1265297383069992 -0.39918211102485657 0.13626915216445923 0.3208780884742737 0 0.7504677176475525 1 0.16195771098136902 5 0.05459079146385193 2 0.0 0.11636289954185486 1.018743872642517 -0.2921942174434662 0.3807489275932312 -0.9202551245689392 0.09018219262361526 0.7902564406394958 0.7220689654350281 1 0.5560586452484131 0 0.11100900918245316 0 0.0 0 0.0 0.0 1.0181424617767334 -0.20196408033370972 0.0 -0.9700308442115784 -0.24283577501773834 0.8594119548797607 0.7608353495597839 1 0.9506118297576904 0 0.27259060740470886 0 0.0 0 0.0 0.0 1.0058256387710571 -0.31092268228530884 0.0 -0.999969482421875 0.0018921475857496262 0.8017098903656006 0.7843313217163086 1 0.5234434008598328 0 0.1049714908003807 0 0.0 0 0.0 0.0 1.0058256387710571 -0.31092268228530884 0.0 -0.999969482421875 0.0018921475857496262 0.8017098903656006 0.7843313217163086 1 0.5234434008598328 0 0.1049714908003807 0 0.0 0 0.0 0.11636289954185486 1.0278944969177246 -0.36559149622917175 0.35953855514526367 -0.9165623784065247 -0.1748405396938324 0.753631055355072 0.7329650521278381 1 0.48844844102859497 0 0.06050974503159523 0 0.0 0 0.0 0.11636289954185486 1.018743872642517 -0.2921942174434662 0.3807489275932312 -0.9202551245689392 0.09018219262361526 0.7902564406394958 0.7220689654350281 1 0.5560586452484131 0 0.11100900918245316 0 0.0 0 0.0 0.0 1.0128729343414307 -0.41166767477989197 0.0 -0.9807122945785522 -0.19541001319885254 0.7478660345077515 0.8006981611251831 1 0.45380619168281555 0 0.0400310717523098 0 0.0 0 0.0 0.11636289954185486 1.0498738288879395 -0.43372729420661926 0.37830743193626404 -0.8667256832122803 -0.3249916136264801 0.7156935930252075 0.7401500344276428 1 0.4745221734046936 0 0.016028281301259995 0 0.0 0 0.0 0.11636289954185486 1.0278944969177246 -0.36559149622917175 0.35953855514526367 -0.9165623784065247 -0.1748405396938324 0.753631055355072 0.7329650521278381 1 0.48844844102859497 0 0.06050974503159523 0 0.0 0 0.0 0.0 1.0367169380187988 -0.4998640716075897 0.0 -0.82528156042099 -0.5646839737892151 0.6316680908203125 0.00020304521603975445 1 0.4652153253555298 0 0.0 0 0.0 0 0.0 0.09310946613550186 1.0738946199417114 -0.5040848851203918 0.31342509388923645 -0.7467879056930542 -0.5865352153778076 0.578464150428772 0.07731097936630249 1 0.4915311634540558 0 0.0 0 0.0 0 0.0 0.11636289954185486 1.0498738288879395 -0.43372729420661926 0.37830743193626404 -0.8667256832122803 -0.3249916136264801 0.5117232203483582 0.08085393905639648 1 0.4745221734046936 0 0.016028281301259995 0 0.0 0 0.0 0.18949569761753082 1.3684693574905396 -0.2584112286567688 0.860957682132721 0.5083467960357666 0.01657155156135559 0.5453251600265503 0.5488014817237854 1 0.5081745386123657 0 0.03876670077443123 0 0.0 0 0.0 0.18102072179317474 1.268702745437622 -0.39696988463401794 0.8454847931861877 0.23203222453594208 -0.48088014125823975 0.5643640756607056 0.39259523153305054 1 0.5544809699058533 0 0.0 0 0.0 0 0.0 0.15597429871559143 1.3777180910110474 -0.39357221126556396 0.6780602335929871 0.5271767377853394 -0.5121310949325562 0.6492087841033936 0.4990021586418152 1 0.52517169713974 0 0.0 0 0.0 0 0.0 0.1459522545337677 1.3888463973999023 -0.1359991729259491 0.8357188701629639 0.5164341926574707 0.18662068247795105 0.11418572813272476 0.1270817071199417 1 0.47086650133132935 0 0.11861134320497513 0 0.0 0 0.0 0.21954664587974548 1.2720890045166016 -0.26756638288497925 0.9747001528739929 0.22016052901744843 -0.038422804325819016 0.026100318878889084 0.1768089085817337 1 0.5512939095497131 0 0.05323823541402817 0 0.0 0 0.0 0.18949569761753082 1.3684693574905396 -0.2584112286567688 0.860957682132721 0.5083467960357666 0.01657155156135559 0.04436533525586128 0.12631487846374512 1 0.5081745386123657 0 0.03876670077443123 0 0.0 0 0.0 0.0 1.0181424617767334 -0.20196408033370972 0.0 -0.9700308442115784 -0.24283577501773834 0.6893323659896851 0.9525341987609863 1 0.9506118297576904 0 0.27259060740470886 0 0.0 0 0.0 0.09388621896505356 1.0232656002044678 -0.1361936777830124 0.6617023348808289 -0.5929136276245117 -0.4588763117790222 0.7094021439552307 0.8353738784790039 1 0.7060643434524536 0 0.5053098201751709 0 0.0 0 0.0 0.10067398101091385 0.9663213491439819 -0.08786684274673462 0.712576687335968 -0.24292734265327454 -0.6581621766090393 0.7870696783065796 0.8129236102104187 0 0.6806142330169678 1 0.19555994868278503 5 0.04794131591916084 6 0.04703441634774208 0.17758521437644958 1.0509424209594727 -0.009452779777348042 0.9080782532691956 -0.1265297383069992 -0.39918211102485657 0.13626915216445923 0.3208780884742737 0 0.7504677176475525 1 0.16195771098136902 5 0.05459079146385193 2 0.0 0.23453930020332336 1.0399465560913086 0.12781919538974762 0.9630115628242493 0.15222632884979248 -0.2221747487783432 0.2123546004295349 0.34633561968803406 0 0.7073097229003906 5 0.15077143907546997 1 0.04978937283158302 2 0.004751469939947128 0.17548006772994995 0.9740344882011414 0.03773410618305206 0.8627887964248657 -0.095828115940094 -0.49632251262664795 0.14806827902793884 0.3685593605041504 0 0.7296561002731323 5 0.13401056826114655 1 0.05976245924830437 6 0.02519860677421093 0.0 1.3340036869049072 0.3454495668411255 0.0 0.8117618560791016 0.5839411616325378 0.3762849271297455 0.1762322634458542 0 0.15578706562519073 1 0.05526821315288544 2 0.030873998999595642 0 0.0 0.07297612726688385 1.3934298753738403 0.16687017679214478 0.4526505470275879 0.8392895460128784 0.3011261224746704 0.27515244483947754 0.15112540125846863 0 0.46099191904067993 1 0.19868381321430206 2 0.00027996301651000977 0 0.0 0.0 1.4161217212677002 0.1510397493839264 0.0 0.9378948211669922 0.34690389037132263 0.28625792264938354 0.11215589195489883 0 0.4460723102092743 1 0.2005683183670044 2 0.000560328655410558 0 0.0 0.0 1.3340036869049072 0.3454495668411255 0.0 0.8117618560791016 0.5839411616325378 0.3762849271297455 0.1762322634458542 0 0.15578706562519073 1 0.05526821315288544 2 0.030873998999595642 0 0.0 0.0650172010064125 1.190718173980713 0.442444771528244 0.5703604221343994 0.43330180644989014 0.6977751851081848 0.4042886793613434 0.26924484968185425 2 0.05483977124094963 0 0.0 0 0.0 0 0.0 0.08727402985095978 1.2957605123519897 0.34337759017944336 0.4752952754497528 0.6862391829490662 0.5505844354629517 0.3502945005893707 0.2176021784543991 0 0.1636802703142166 2 0.06262505799531937 1 0.050292082130908966 0 0.0 0.06145928055047989 1.0601720809936523 0.5009114146232605 0.7973570823669434 0.13812677562236786 0.5874508023262024 0.4337987005710602 0.340542733669281 2 0.3894650638103485 0 0.0 0 0.0 0 0.0 0.1461862027645111 1.0710813999176025 0.3844836950302124 0.808252215385437 0.17184972763061523 0.5631580352783203 0.3577803373336792 0.3372943699359894 0 0.205034539103508 5 0.10197971016168594 9 0.05613459274172783 2 0.03635368496179581 0.0650172010064125 1.190718173980713 0.442444771528244 0.5703604221343994 0.43330180644989014 0.6977751851081848 0.4042886793613434 0.26924484968185425 2 0.05483977124094963 0 0.0 0 0.0 0 0.0 0.15384304523468018 0.9721025228500366 0.4255926311016083 0.7845393419265747 0.012146366760134697 0.6199224591255188 0.37392598390579224 0.3897009491920471 0 0.2848208546638489 5 0.23368224501609802 9 0.17045892775058746 2 0.005570483859628439 0.0 0.9691419005393982 0.525084912776947 0.0 -0.6431470513343811 0.765709400177002 0.47005921602249146 0.38950857520103455 3 0.08929336071014404 9 0.04753170534968376 5 0.04753170534968376 0 0.04456418380141258 0.0 0.857164740562439 0.5244574546813965 0.0 -0.2601702809333801 0.965544581413269 0.47005921602249146 0.45042261481285095 9 0.27887073159217834 5 0.27887073159217834 0 0.22324655950069427 2 0.006800635252147913 0.23453930020332336 1.0399465560913086 0.12781919538974762 0.9630115628242493 0.15222632884979248 -0.2221747487783432 0.2123546004295349 0.34633561968803406 0 0.7073097229003906 5 0.15077143907546997 1 0.04978937283158302 2 0.004751469939947128 0.27550312876701355 0.891650915145874 0.1857611984014511 0.9843134880065918 0.15448468923568726 -0.08484145998954773 0.2322322577238083 0.43014711141586304 5 0.6623887419700623 0 0.23774738609790802 6 0.02405529096722603 2 0.0070293257012963295 0.17548006772994995 0.9740344882011414 0.03773410618305206 0.8627887964248657 -0.095828115940094 -0.49632251262664795 0.14806827902793884 0.3685593605041504 0 0.7296561002731323 5 0.13401056826114655 1 0.05976245924830437 6 0.02519860677421093 0.2174592912197113 1.1028785705566406 0.2627961039543152 0.9561144113540649 0.17743460834026337 0.23300881683826447 0.28516799211502075 0.32168421149253845 0 0.5695722103118896 5 0.11019442975521088 1 0.029866231605410576 2 0.00028992959414608777 0.19893279671669006 1.1545631885528564 0.1498781144618988 0.9536118507385254 0.28800317645072937 -0.0874660462141037 0.23297777771949768 0.28563162684440613 0 0.7194539904594421 1 0.08959674090147018 5 0.05332915484905243 2 0.01339690014719963 0.1459522545337677 1.3251063823699951 0.18270058929920197 0.8204901218414307 0.5527207255363464 0.14572587609291077 0.2664920687675476 0.20125365257263184 0 0.5595225095748901 1 0.13441134989261627 2 0.0002072147763101384 0 0.0 0.17454805970191956 1.2118858098983765 0.34130558371543884 0.8105410933494568 0.3488875925540924 0.47038179636001587 0.3298243582248688 0.2703784704208374 0 0.21865041553974152 2 0.04487593099474907 1 0.04441479220986366 5 0.026416389271616936 0.2174592912197113 1.1028785705566406 0.2627961039543152 0.9561144113540649 0.17743460834026337 0.23300881683826447 0.28516799211502075 0.32168421149253845 0 0.5695722103118896 5 0.11019442975521088 1 0.029866231605410576 2 0.00028992959414608777 0.1459522545337677 1.3251063823699951 0.18270058929920197 0.8204901218414307 0.5527207255363464 0.14572587609291077 0.2664920687675476 0.20125365257263184 0 0.5595225095748901 1 0.13441134989261627 2 0.0002072147763101384 0 0.0 0.1461862027645111 1.0710813999176025 0.3844836950302124 0.808252215385437 0.17184972763061523 0.5631580352783203 0.3577803373336792 0.3372943699359894 0 0.205034539103508 5 0.10197971016168594 9 0.05613459274172783 2 0.03635368496179581 0.23453930020332336 0.9702152013778687 0.2602241337299347 0.922513484954834 0.1750236451625824 0.34394359588623047 0.278250515460968 0.390413373708725 0 0.49000686407089233 5 0.30810508131980896 9 0.014790344052016735 6 0.01452652644366026 0.2174592912197113 1.1028785705566406 0.2627961039543152 0.9561144113540649 0.17743460834026337 0.23300881683826447 0.28516799211502075 0.32168421149253845 0 0.5695722103118896 5 0.11019442975521088 1 0.029866231605410576 2 0.00028992959414608777 0.19692060351371765 0.6521245837211609 0.3191433846950531 0.23175756633281708 -0.5444197058677673 0.8061159253120422 0.31354808807373047 0.5612506866455078 5 0.6037587523460388 6 0.2468358874320984 9 0.06982867419719696 0 0.03735736384987831 0.28093862533569336 0.5757372379302979 0.21273201704025269 0.9537339210510254 -0.05871761217713356 0.2947782874107361 0.23695819079875946 0.5966961979866028 6 0.7957403063774109 5 0.1119142472743988 7 0.07978744804859161 0 0.0 0.27312296628952026 0.7278225421905518 0.2726402282714844 0.8949247598648071 -0.053621020168066025 0.442945659160614 0.2700149416923523 0.5173874497413635 5 0.5454463958740234 6 0.39267078042030334 0 0.01460160594433546 2 0.0 0.2720791697502136 0.7299654483795166 0.11808101087808609 0.9231238961219788 0.09189122915267944 -0.3733329176902771 0.19017235934734344 0.5118117332458496 5 0.7446416020393372 6 0.1995791345834732 0 0.022359486669301987 0 0.0 0.28093862533569336 0.5757372379302979 0.21273201704025269 0.9537339210510254 -0.05871761217713356 0.2947782874107361 0.23695819079875946 0.5966961979866028 6 0.7957403063774109 5 0.1119142472743988 7 0.07978744804859161 0 0.0 0.26951444149017334 0.581256628036499 0.0984039455652237 0.9248329401016235 0.04589983820915222 -0.37754449248313904 0.17511127889156342 0.5908189415931702 6 0.8896211981773376 7 0.05666887015104294 5 0.0470425970852375 0 0.0 0.18157455325126648 0.6501905918121338 0.005674920976161957 0.335276335477829 -0.02075258642435074 -0.9418622255325317 0.10874716937541962 0.547910213470459 6 0.7585892677307129 5 0.17383593320846558 0 0.0 0 0.0 0.26951444149017334 0.581256628036499 0.0984039455652237 0.9248329401016235 0.04589983820915222 -0.37754449248313904 0.17511127889156342 0.5908189415931702 6 0.8896211981773376 7 0.05666887015104294 5 0.0470425970852375 0 0.0 0.20572468638420105 0.5131307244300842 -0.0020905807614326477 0.2683492600917816 -0.022766808047890663 -0.9630420804023743 0.10834519565105438 0.6240481734275818 6 0.8090380430221558 7 0.16335545480251312 0 0.0 0 0.0 0.23106297850608826 0.49126142263412476 0.25890085101127625 0.01269569993019104 -0.28205206990242004 0.9592882990837097 0.26937639713287354 0.6458678245544434 6 0.7228800058364868 7 0.17418056726455688 5 0.08285880833864212 0 0.0 0.27883782982826233 0.4228806495666504 0.18713346123695374 0.938962996006012 -0.1031220406293869 0.32813501358032227 0.219543918967247 0.6785994172096252 7 0.8290210962295532 6 0.15059085190296173 0 0.0 0 0.0 0.28093862533569336 0.5757372379302979 0.21273201704025269 0.9537339210510254 -0.05871761217713356 0.2947782874107361 0.23695819079875946 0.5966961979866028 6 0.7957403063774109 5 0.1119142472743988 7 0.07978744804859161 0 0.0 0.28093862533569336 0.5757372379302979 0.21273201704025269 0.9537339210510254 -0.05871761217713356 0.2947782874107361 0.23695819079875946 0.5966961979866028 6 0.7957403063774109 5 0.1119142472743988 7 0.07978744804859161 0 0.0 0.2707471251487732 0.4457245469093323 0.09905719757080078 0.9538865089416504 0.043977171182632446 -0.29688405990600586 0.17186789214611053 0.6645772457122803 7 0.9251940250396729 6 0.06983630359172821 0 0.0 0 0.0 0.26951444149017334 0.581256628036499 0.0984039455652237 0.9248329401016235 0.04589983820915222 -0.37754449248313904 0.17511127889156342 0.5908189415931702 6 0.8896211981773376 7 0.05666887015104294 5 0.0470425970852375 0 0.0 0.20572468638420105 0.5131307244300842 -0.0020905807614326477 0.2683492600917816 -0.022766808047890663 -0.9630420804023743 0.10834519565105438 0.6240481734275818 6 0.8090380430221558 7 0.16335545480251312 0 0.0 0 0.0 0.2707471251487732 0.4457245469093323 0.09905719757080078 0.9538865089416504 0.043977171182632446 -0.29688405990600586 0.17186789214611053 0.6645772457122803 7 0.9251940250396729 6 0.06983630359172821 0 0.0 0 0.0 0.22422879934310913 0.414276123046875 0.015284525230526924 0.3885311484336853 0.034516435116529465 -0.9207739233970642 0.11860677599906921 0.6787413358688354 7 0.9109067320823669 6 0.0850052535533905 0 0.0 0 0.0 0.22996719181537628 0.3549819588661194 0.21869893372058868 0.035431988537311554 -0.23514512181282043 0.9713125824928284 0.24566324055194855 0.7194404006004333 7 0.8741137981414795 6 0.10180454701185226 0 0.0 0 0.0 0.2784595489501953 0.2965812683105469 0.1400669515132904 0.9597155451774597 -0.10385448485612869 0.2609942853450775 0.19252367317676544 0.7464392781257629 7 0.967033863067627 0 0.0 0 0.0 0 0.0 0.27883782982826233 0.4228806495666504 0.18713346123695374 0.938962996006012 -0.1031220406293869 0.32813501358032227 0.219543918967247 0.6785994172096252 7 0.8290210962295532 6 0.15059085190296173 0 0.0 0 0.0 0.2707471251487732 0.4457245469093323 0.09905719757080078 0.9538865089416504 0.043977171182632446 -0.29688405990600586 0.17186789214611053 0.6645772457122803 7 0.9251940250396729 6 0.06983630359172821 0 0.0 0 0.0 0.2784595489501953 0.2965812683105469 0.1400669515132904 0.9597155451774597 -0.10385448485612869 0.2609942853450775 0.19252367317676544 0.7464392781257629 7 0.967033863067627 0 0.0 0 0.0 0 0.0 0.27060168981552124 0.31022095680236816 0.05954404175281525 0.9107333421707153 0.04211554303765297 -0.4108096659183502 0.1486281454563141 0.7380485534667969 7 0.9850865006446838 0 0.0 0 0.0 0 0.0 0.22422879934310913 0.414276123046875 0.015284525230526924 0.3885311484336853 0.034516435116529465 -0.9207739233970642 0.11860677599906921 0.6787413358688354 7 0.9109067320823669 6 0.0850052535533905 0 0.0 0 0.0 0.27060168981552124 0.31022095680236816 0.05954404175281525 0.9107333421707153 0.04211554303765297 -0.4108096659183502 0.1486281454563141 0.7380485534667969 7 0.9850865006446838 0 0.0 0 0.0 0 0.0 0.21422770619392395 0.2696647644042969 0.002181949093937874 0.03393658250570297 0.06097598373889923 -0.9975585341453552 0.10336703807115555 0.7562169432640076 7 0.95918208360672 8 0.022087600082159042 0 0.0 0 0.0 0.2353973239660263 0.23234236240386963 0.17769855260849 0.2641071677207947 -0.28104496002197266 0.922605037689209 0.21930597722530365 0.7849949598312378 7 0.9059193730354309 8 0.08363302052021027 0 0.0 0 0.0 0.27068033814430237 0.17515099048614502 0.10558918118476868 0.9747001528739929 -0.030365917831659317 0.2213507443666458 0.17252767086029053 0.8140662312507629 7 0.8328282237052917 8 0.16480152308940887 0 0.0 0 0.0 0.2784595489501953 0.2965812683105469 0.1400669515132904 0.9597155451774597 -0.10385448485612869 0.2609942853450775 0.19252367317676544 0.7464392781257629 7 0.967033863067627 0 0.0 0 0.0 0 0.0 0.27060168981552124 0.31022095680236816 0.05954404175281525 0.9107333421707153 0.04211554303765297 -0.4108096659183502 0.1486281454563141 0.7380485534667969 7 0.9850865006446838 0 0.0 0 0.0 0 0.0 0.27068033814430237 0.17515099048614502 0.10558918118476868 0.9747001528739929 -0.030365917831659317 0.2213507443666458 0.17252767086029053 0.8140662312507629 7 0.8328282237052917 8 0.16480152308940887 0 0.0 0 0.0 0.2632824182510376 0.192702054977417 0.030293196439743042 0.8633686304092407 0.13098543882369995 -0.48722800612449646 0.129202738404274 0.8032676577568054 7 0.8625421524047852 8 0.13671985268592834 0 0.0 0 0.0 0.21422770619392395 0.2696647644042969 0.002181949093937874 0.03393658250570297 0.06097598373889923 -0.9975585341453552 0.10336703807115555 0.7562169432640076 7 0.95918208360672 8 0.022087600082159042 0 0.0 0 0.0 0.2632824182510376 0.192702054977417 0.030293196439743042 0.8633686304092407 0.13098543882369995 -0.48722800612449646 0.129202738404274 0.8032676577568054 7 0.8625421524047852 8 0.13671985268592834 0 0.0 0 0.0 0.21539007127285004 0.1667546033859253 -0.007906094193458557 -0.14654988050460815 0.3664967715740204 -0.9187902212142944 0.09296010434627533 0.8117510676383972 8 0.8476832509040833 7 0.15203344821929932 0 0.0 0 0.0 0.2720791697502136 0.7299654483795166 0.11808101087808609 0.9231238961219788 0.09189122915267944 -0.3733329176902771 0.19017235934734344 0.5118117332458496 5 0.7446416020393372 6 0.1995791345834732 0 0.022359486669301987 0 0.0 0.16467930376529694 0.764995813369751 -0.0035517215728759766 0.6215704679489136 -0.09994811564683914 -0.7769402265548706 0.10110408067703247 0.4813825190067291 6 0.42210859060287476 5 0.36726126074790955 0 0.15537992119789124 0 0.0 0.27550312876701355 0.891650915145874 0.1857611984014511 0.9843134880065918 0.15448468923568726 -0.08484145998954773 0.2322322577238083 0.43014711141586304 5 0.6623887419700623 0 0.23774738609790802 6 0.02405529096722603 2 0.0070293257012963295 0.27312296628952026 0.7278225421905518 0.2726402282714844 0.8949247598648071 -0.053621020168066025 0.442945659160614 0.2700149416923523 0.5173874497413635 5 0.5454463958740234 6 0.39267078042030334 0 0.01460160594433546 2 0.0 0.27550312876701355 0.891650915145874 0.1857611984014511 0.9843134880065918 0.15448468923568726 -0.08484145998954773 0.2322322577238083 0.43014711141586304 5 0.6623887419700623 0 0.23774738609790802 6 0.02405529096722603 2 0.0070293257012963295 0.22658583521842957 0.8450055122375488 0.3317200243473053 0.7574999332427979 0.09625537693500519 0.6456496119499207 0.3105680048465729 0.4587601125240326 5 0.6072814464569092 0 0.1840784102678299 6 0.09625957161188126 9 0.0649503543972969 0.19692060351371765 0.6521245837211609 0.3191433846950531 0.23175756633281708 -0.5444197058677673 0.8061159253120422 0.31354808807373047 0.5612506866455078 5 0.6037587523460388 6 0.2468358874320984 9 0.06982867419719696 0 0.03735736384987831 0.22658583521842957 0.8450055122375488 0.3317200243473053 0.7574999332427979 0.09625537693500519 0.6456496119499207 0.3105680048465729 0.4587601125240326 5 0.6072814464569092 0 0.1840784102678299 6 0.09625957161188126 9 0.0649503543972969 0.0700145810842514 0.7434864640235901 0.4208555817604065 0.34348583221435547 -0.5904721021652222 0.730277419090271 0.4059433937072754 0.5164225101470947 9 0.3594251573085785 0 0.33582302927970886 5 0.23320455849170685 6 0.009845871478319168 0.23453930020332336 0.9702152013778687 0.2602241337299347 0.922513484954834 0.1750236451625824 0.34394359588623047 0.278250515460968 0.390413373708725 0 0.49000686407089233 5 0.30810508131980896 9 0.014790344052016735 6 0.01452652644366026 0.22658583521842957 0.8450055122375488 0.3317200243473053 0.7574999332427979 0.09625537693500519 0.6456496119499207 0.3105680048465729 0.4587601125240326 5 0.6072814464569092 0 0.1840784102678299 6 0.09625957161188126 9 0.0649503543972969 0.27550312876701355 0.891650915145874 0.1857611984014511 0.9843134880065918 0.15448468923568726 -0.08484145998954773 0.2322322577238083 0.43014711141586304 5 0.6623887419700623 0 0.23774738609790802 6 0.02405529096722603 2 0.0070293257012963295 0.14257946610450745 0.8637868762016296 0.4032813608646393 0.6905118227005005 -0.1661732792854309 0.7039399147033691 0.36863672733306885 0.4478047788143158 5 0.4740718603134155 0 0.22005127370357513 9 0.13825324177742004 6 0.051402490586042404 0.15384304523468018 0.9721025228500366 0.4255926311016083 0.7845393419265747 0.012146366760134697 0.6199224591255188 0.37392598390579224 0.3897009491920471 0 0.2848208546638489 5 0.23368224501609802 9 0.17045892775058746 2 0.005570483859628439 0.0 0.857164740562439 0.5244574546813965 0.0 -0.2601702809333801 0.965544581413269 0.47005921602249146 0.45042261481285095 9 0.27887073159217834 5 0.27887073159217834 0 0.22324655950069427 2 0.006800635252147913 0.14257946610450745 0.8637868762016296 0.4032813608646393 0.6905118227005005 -0.1661732792854309 0.7039399147033691 0.36863672733306885 0.4478047788143158 5 0.4740718603134155 0 0.22005127370357513 9 0.13825324177742004 6 0.051402490586042404 0.0700145810842514 0.7434864640235901 0.4208555817604065 0.34348583221435547 -0.5904721021652222 0.730277419090271 0.4059433937072754 0.5164225101470947 9 0.3594251573085785 0 0.33582302927970886 5 0.23320455849170685 6 0.009845871478319168 0.22658583521842957 0.8450055122375488 0.3317200243473053 0.7574999332427979 0.09625537693500519 0.6456496119499207 0.3105680048465729 0.4587601125240326 5 0.6072814464569092 0 0.1840784102678299 6 0.09625957161188126 9 0.0649503543972969 0.0 0.956256628036499 0.9388030171394348 0.0 0.9941099286079407 0.10831019282341003 0.9283884763717651 0.3782193958759308 4 0.9637963771820068 3 0.022601444274187088 0 0.0 0 0.0 0.04179486632347107 0.9364920258522034 0.7827037572860718 0.99993896484375 -0.010345774702727795 0.00030518509447574615 0.8751721382141113 0.30800822377204895 3 0.9776166081428528 4 0.0011483989655971527 0 0.0 0 0.0 0.0 0.9917649626731873 0.767984926700592 0.0 0.9606006145477295 0.2778710424900055 0.9070184826850891 0.2867380976676941 3 0.9851999282836914 0 0.0 0 0.0 0 0.0 0.0 0.8555480241775513 0.9201857447624207 0.0 -0.9908444285392761 -0.1347697377204895 0.8575089573860168 0.39543601870536804 4 0.9604564309120178 3 0.029231343418359756 0 0.0 0 0.0 0.04179486632347107 0.9364920258522034 0.7827037572860718 0.99993896484375 -0.010345774702727795 0.00030518509447574615 0.8751721382141113 0.30800822377204895 3 0.9776166081428528 4 0.0011483989655971527 0 0.0 0 0.0 0.04524477198719978 0.9055635929107666 0.9612237811088562 0.99981689453125 -0.011352885514497757 -0.013397625647485256 0.8992534875869751 0.4032728672027588 4 0.9947757720947266 0 0.0 0 0.0 0 0.0 0.043747562915086746 0.9720137119293213 0.6651729345321655 0.9987487196922302 -0.040162358433008194 0.028748435899615288 0.8648558259010315 0.24106882512569427 3 0.904050886631012 2 0.09398713707923889 0 0.0 0 0.0 0.0 0.9917649626731873 0.767984926700592 0.0 0.9606006145477295 0.2778710424900055 0.9070184826850891 0.2867380976676941 3 0.9851999282836914 0 0.0 0 0.0 0 0.0 0.04179486632347107 0.9364920258522034 0.7827037572860718 0.99993896484375 -0.010345774702727795 0.00030518509447574615 0.8751721382141113 0.30800822377204895 3 0.9776166081428528 4 0.0011483989655971527 0 0.0 0 0.0 0.043747562915086746 0.9720137119293213 0.6651729345321655 0.9987487196922302 -0.040162358433008194 0.028748435899615288 0.8648558259010315 0.24106882512569427 3 0.904050886631012 2 0.09398713707923889 0 0.0 0 0.0 0.0 0.8914740085601807 0.7481175661087036 0.0 -0.9678640365600586 -0.25135043263435364 0.8374303579330444 0.3030059337615967 3 0.9701143503189087 0 0.0 0 0.0 0 0.0 0.0 0.9395209550857544 0.5993262529373169 0.0 -0.9361247420310974 -0.35163426399230957 0.8234695196151733 0.2191833257675171 3 0.5215328335762024 2 0.47024640440940857 0 0.0 0 0.0 0.0 0.9691419005393982 0.525084912776947 0.0 -0.6431470513343811 0.765709400177002 0.8176729083061218 0.17667889595031738 3 0.08929336071014404 9 0.04753170534968376 5 0.04753170534968376 0 0.04456418380141258 0.043747562915086746 0.9720137119293213 0.6651729345321655 0.9987487196922302 -0.040162358433008194 0.028748435899615288 0.8648558259010315 0.24106882512569427 3 0.904050886631012 2 0.09398713707923889 0 0.0 0 0.0 0.0 0.9395209550857544 0.5993262529373169 0.0 -0.9361247420310974 -0.35163426399230957 0.8234695196151733 0.2191833257675171 3 0.5215328335762024 2 0.47024640440940857 0 0.0 0 0.0 0.0 1.0387544631958008 0.6412699818611145 0.0 0.8650471568107605 0.5016327500343323 0.9012990593910217 0.21379756927490234 2 0.7522167563438416 3 0.18018202483654022 0 0.0 0 0.0 0.06145928055047989 1.0601720809936523 0.5009114146232605 0.7973570823669434 0.13812677562236786 0.5874508023262024 0.8645750880241394 0.13949787616729736 2 0.3894650638103485 0 0.0 0 0.0 0 0.0 0.0 1.0994129180908203 0.5527057647705078 0.0 0.6721396446228027 0.7404095530509949 0.9092386364936829 0.15684354305267334 2 0.008453886024653912 0 0.0 0 0.0 0 0.0 0.0650172010064125 1.190718173980713 0.442444771528244 0.5703604221343994 0.43330180644989014 0.6977751851081848 0.9024972915649414 0.07288584858179092 2 0.05483977124094963 0 0.0 0 0.0 0 0.0 0.0 1.0994129180908203 0.5527057647705078 0.0 0.6721396446228027 0.7404095530509949 0.9092386364936829 0.15684354305267334 2 0.008453886024653912 0 0.0 0 0.0 0 0.0 0.06145928055047989 1.0601720809936523 0.5009114146232605 0.7973570823669434 0.13812677562236786 0.5874508023262024 0.8645750880241394 0.13949787616729736 2 0.3894650638103485 0 0.0 0 0.0 0 0.0 0.0 1.3340036869049072 0.3454495668411255 0.0 0.8117618560791016 0.5839411616325378 0.969742476940155 0.00020304521603975445 0 0.15578706562519073 1 0.05526821315288544 2 0.030873998999595642 0 0.0 0.0 1.2170524597167969 0.4608973264694214 0.0 0.6628314852714539 0.748741090297699 0.9399983286857605 0.08305945992469788 2 0.008227117359638214 0 0.0 0 0.0 0 0.0 0.0650172010064125 1.190718173980713 0.442444771528244 0.5703604221343994 0.43330180644989014 0.6977751851081848 0.9024972915649414 0.07288584858179092 2 0.05483977124094963 0 0.0 0 0.0 0 0.0 0.05299364775419235 0.9086697101593018 1.127077579498291 0.9984740614891052 0.004181035794317722 0.05499435216188431 0.9316335320472717 0.4823167026042938 4 0.9999160170555115 0 0.0 0 0.0 0 0.0 0.0 0.8668436408042908 1.1575727462768555 0.0 -0.9759819507598877 0.21778008341789246 0.9091423749923706 0.51222825050354 4 0.9999624490737915 0 0.0 0 0.0 0 0.0 0.0 0.8515796661376953 1.0820811986923218 0.0 -0.9989928603172302 0.04452650621533394 0.8863584995269775 0.47759830951690674 4 0.9997074007987976 0 0.0 0 0.0 0 0.0 0.05299364775419235 0.9086697101593018 1.127077579498291 0.9984740614891052 0.004181035794317722 0.05499435216188431 0.9316335320472717 0.4823167026042938 4 0.9999160170555115 0 0.0 0 0.0 0 0.0 0.0 0.9566136598587036 1.1525006294250488 0.0 0.999267578125 0.03787346929311752 0.969742476940155 0.4851236343383789 4 0.9999452829360962 0 0.0 0 0.0 0 0.0 0.04474841430783272 0.9156687259674072 1.1921391487121582 0.9490646123886108 0.0554216131567955 0.3100985884666443 0.9444119334220886 0.5085054636001587 4 0.9999980926513672 0 0.0 0 0.0 0 0.0 0.04474841430783272 0.9156687259674072 1.1921391487121582 0.9490646123886108 0.0554216131567955 0.3100985884666443 0.9444119334220886 0.5085054636001587 4 0.9999980926513672 0 0.0 0 0.0 0 0.0 0.0 0.9405403137207031 1.2368535995483398 0.0 0.5934019088745117 0.8048951625823975 0.9683864712715149 0.5302330851554871 4 0.9999966025352478 0 0.0 0 0.0 0 0.0 0.0 0.886214554309845 1.234582543373108 0.0 -0.6190374493598938 0.7853327989578247 0.9404031038284302 0.540774941444397 4 0.9999971985816956 0 0.0 0 0.0 0 0.0 0.0 0.8668436408042908 1.1575727462768555 0.0 -0.9759819507598877 0.21778008341789246 0.9091423749923706 0.51222825050354 4 0.9999624490737915 0 0.0 0 0.0 0 0.0 0.04474841430783272 0.9156687259674072 1.1921391487121582 0.9490646123886108 0.0554216131567955 0.3100985884666443 0.9444119334220886 0.5085054636001587 4 0.9999980926513672 0 0.0 0 0.0 0 0.0 0.0 0.886214554309845 1.234582543373108 0.0 -0.6190374493598938 0.7853327989578247 0.9404031038284302 0.540774941444397 4 0.9999971985816956 0 0.0 0 0.0 0 0.0 0.11636289954185486 1.0498738288879395 -0.43372729420661926 0.37830743193626404 -0.8667256832122803 -0.3249916136264801 0.7156935930252075 0.7401500344276428 1 0.4745221734046936 0 0.016028281301259995 0 0.0 0 0.0 0.18298302590847015 1.0755360126495361 -0.3897135853767395 0.8033387064933777 -0.5719473958015442 -0.16568498313426971 0.7276731133460999 0.6964173316955566 1 0.514851450920105 0 0.025219354778528214 0 0.0 0 0.0 0.11636289954185486 1.0278944969177246 -0.36559149622917175 0.35953855514526367 -0.9165623784065247 -0.1748405396938324 0.753631055355072 0.7329650521278381 1 0.48844844102859497 0 0.06050974503159523 0 0.0 0 0.0 0.09310946613550186 1.0738946199417114 -0.5040848851203918 0.31342509388923645 -0.7467879056930542 -0.5865352153778076 0.578464150428772 0.07731097936630249 1 0.4915311634540558 0 0.0 0 0.0 0 0.0 0.18298302590847015 1.097515344619751 -0.457849383354187 0.8365123271942139 -0.36155277490615845 -0.4116947054862976 0.5151460766792297 0.1754748821258545 1 0.5162564516067505 0 0.0 0 0.0 0 0.0 0.11636289954185486 1.0498738288879395 -0.43372729420661926 0.37830743193626404 -0.8667256832122803 -0.3249916136264801 0.5117232203483582 0.08085393905639648 1 0.4745221734046936 0 0.016028281301259995 0 0.0 0 0.0 0.19168177247047424 1.123900294303894 -0.138879656791687 0.8033081889152527 -0.43974119424819946 0.40159305930137634 0.841719388961792 0.630566418170929 1 0.7593101859092712 0 0.2120208442211151 0 0.0 0 0.0 0.15271435678005219 1.1326109170913696 -0.08103625476360321 0.9580675959587097 -0.28070923686027527 0.05710013210773468 0.8785715699195862 0.6217155456542969 1 0.6765074133872986 0 0.47961559891700745 0 0.0 0 0.0 0.1329372525215149 1.081725835800171 -0.11218704283237457 0.8476821184158325 -0.5233924388885498 -0.08630634844303131 0.8733172416687012 0.657466471195221 1 0.7744880318641663 0 0.403382271528244 0 0.0 0 0.0 0.17734870314598083 1.1222507953643799 0.016492163762450218 0.9736624956130981 0.07391583174467087 -0.21564379334449768 0.15870711207389832 0.2861701548099518 0 0.7400460243225098 1 0.2110891044139862 5 0.021712277084589005 2 0.0 0.19893279671669006 1.1545631885528564 0.1498781144618988 0.9536118507385254 0.28800317645072937 -0.0874660462141037 0.23297777771949768 0.28563162684440613 0 0.7194539904594421 1 0.08959674090147018 5 0.05332915484905243 2 0.01339690014719963 0.23453930020332336 1.0399465560913086 0.12781919538974762 0.9630115628242493 0.15222632884979248 -0.2221747487783432 0.2123546004295349 0.34633561968803406 0 0.7073097229003906 5 0.15077143907546997 1 0.04978937283158302 2 0.004751469939947128 0.18298302590847015 1.0663853883743286 -0.31631630659103394 0.7708975672721863 -0.6364635229110718 0.02456739917397499 0.7648314833641052 0.6872797608375549 1 0.5746728181838989 0 0.07987833023071289 0 0.0 0 0.0 0.2077341377735138 1.1319550275802612 -0.30893459916114807 0.963957667350769 -0.23200170695781708 -0.13016144931316376 0.7566397786140442 0.6517723798751831 1 0.6332035660743713 0 0.06388173252344131 0 0.0 0 0.0 0.19168177247047424 1.1063168048858643 -0.18283823132514954 0.7293313145637512 -0.6620075106620789 0.17261269688606262 0.8232441544532776 0.6466988325119019 1 0.7554553151130676 0 0.16079266369342804 0 0.0 0 0.0 0.240505188703537 1.1706992387771606 -0.23119430243968964 0.9902951121330261 -0.1357768476009369 0.029206212610006332 0.7882214188575745 0.6180115342140198 1 0.6799764037132263 0 0.0969119518995285 0 0.0 0 0.0 0.19168177247047424 1.1063168048858643 -0.18283823132514954 0.7293313145637512 -0.6620075106620789 0.17261269688606262 0.8232441544532776 0.6466988325119019 1 0.7554553151130676 0 0.16079266369342804 0 0.0 0 0.0 0.2077341377735138 1.1319550275802612 -0.30893459916114807 0.963957667350769 -0.23200170695781708 -0.13016144931316376 0.7566397786140442 0.6517723798751831 1 0.6332035660743713 0 0.06388173252344131 0 0.0 0 0.0 0.240505188703537 1.1706992387771606 -0.23119430243968964 0.9902951121330261 -0.1357768476009369 0.029206212610006332 0.7882214188575745 0.6180115342140198 1 0.6799764037132263 0 0.0969119518995285 0 0.0 0 0.0 0.17711219191551208 1.2111425399780273 -0.08284486830234528 0.9780877232551575 0.07745597511529922 0.19315165281295776 0.8621803522109985 0.5771147608757019 1 0.6505640745162964 0 0.27260327339172363 0 0.0 0 0.0 0.19168177247047424 1.123900294303894 -0.138879656791687 0.8033081889152527 -0.43974119424819946 0.40159305930137634 0.841719388961792 0.630566418170929 1 0.7593101859092712 0 0.2120208442211151 0 0.0 0 0.0 0.19536322355270386 1.1583302021026611 -0.38174155354499817 0.9667958617210388 0.013214514590799809 -0.2551042139530182 0.7145208716392517 0.653191328048706 1 0.5957530736923218 0 0.01954641565680504 0 0.0 0 0.0 0.18298302590847015 1.0755360126495361 -0.3897135853767395 0.8033387064933777 -0.5719473958015442 -0.16568498313426971 0.7276731133460999 0.6964173316955566 1 0.514851450920105 0 0.025219354778528214 0 0.0 0 0.0 0.18298302590847015 1.097515344619751 -0.457849383354187 0.8365123271942139 -0.36155277490615845 -0.4116947054862976 0.6893323659896851 0.7009080648422241 1 0.5162564516067505 0 0.0 0 0.0 0 0.0 0.2077341377735138 1.1319550275802612 -0.30893459916114807 0.963957667350769 -0.23200170695781708 -0.13016144931316376 0.7566397786140442 0.6517723798751831 1 0.6332035660743713 0 0.06388173252344131 0 0.0 0 0.0 0.21954664587974548 1.2720890045166016 -0.26756638288497925 0.9747001528739929 0.22016052901744843 -0.038422804325819016 0.7538788914680481 0.5733580589294434 1 0.5512939095497131 0 0.05323823541402817 0 0.0 0 0.0 0.240505188703537 1.1706992387771606 -0.23119430243968964 0.9902951121330261 -0.1357768476009369 0.029206212610006332 0.7882214188575745 0.6180115342140198 1 0.6799764037132263 0 0.0969119518995285 0 0.0 0 0.0 0.1287733018398285 1.2108771800994873 -0.5207679867744446 0.6269417405128479 0.4066286087036133 -0.6644794940948486 0.6418904066085815 0.2361043244600296 1 0.5873615145683289 0 0.0 0 0.0 0 0.0 0.18298302590847015 1.097515344619751 -0.457849383354187 0.8365123271942139 -0.36155277490615845 -0.4116947054862976 0.5151460766792297 0.1754748821258545 1 0.5162564516067505 0 0.0 0 0.0 0 0.0 0.11392863094806671 1.1170620918273926 -0.5390962958335876 0.45652636885643005 -0.3259071707725525 -0.8278450965881348 0.6125847101211548 0.13550977408885956 1 0.5385183095932007 0 0.0 0 0.0 0 0.0 0.19168177247047424 1.1063168048858643 -0.18283823132514954 0.7293313145637512 -0.6620075106620789 0.17261269688606262 0.8232441544532776 0.6466988325119019 1 0.7554553151130676 0 0.16079266369342804 0 0.0 0 0.0 0.1329372525215149 1.081725835800171 -0.11218704283237457 0.8476821184158325 -0.5233924388885498 -0.08630634844303131 0.8733172416687012 0.657466471195221 1 0.7744880318641663 0 0.403382271528244 0 0.0 0 0.0 0.11636289954185486 1.053910732269287 -0.19108946621418 0.5185399651527405 -0.8486281633377075 0.10443434119224548 0.8408097624778748 0.693621814250946 1 0.827496349811554 0 0.24267560243606567 0 0.0 0 0.0 0.11636289954185486 1.0278944969177246 -0.36559149622917175 0.35953855514526367 -0.9165623784065247 -0.1748405396938324 0.753631055355072 0.7329650521278381 1 0.48844844102859497 0 0.06050974503159523 0 0.0 0 0.0 0.18298302590847015 1.0663853883743286 -0.31631630659103394 0.7708975672721863 -0.6364635229110718 0.02456739917397499 0.7648314833641052 0.6872797608375549 1 0.5746728181838989 0 0.07987833023071289 0 0.0 0 0.0 0.11636289954185486 1.018743872642517 -0.2921942174434662 0.3807489275932312 -0.9202551245689392 0.09018219262361526 0.7902564406394958 0.7220689654350281 1 0.5560586452484131 0 0.11100900918245316 0 0.0 0 0.0 0.0 0.9691419005393982 0.525084912776947 0.0 -0.6431470513343811 0.765709400177002 0.47005921602249146 0.38950857520103455 3 0.08929336071014404 9 0.04753170534968376 5 0.04753170534968376 0 0.04456418380141258 0.15384304523468018 0.9721025228500366 0.4255926311016083 0.7845393419265747 0.012146366760134697 0.6199224591255188 0.37392598390579224 0.3897009491920471 0 0.2848208546638489 5 0.23368224501609802 9 0.17045892775058746 2 0.005570483859628439 0.06145928055047989 1.0601720809936523 0.5009114146232605 0.7973570823669434 0.13812677562236786 0.5874508023262024 0.4337987005710602 0.340542733669281 2 0.3894650638103485 0 0.0 0 0.0 0 0.0 0.18298302590847015 1.0663853883743286 -0.31631630659103394 0.7708975672721863 -0.6364635229110718 0.02456739917397499 0.7648314833641052 0.6872797608375549 1 0.5746728181838989 0 0.07987833023071289 0 0.0 0 0.0 0.11636289954185486 1.053910732269287 -0.19108946621418 0.5185399651527405 -0.8486281633377075 0.10443434119224548 0.8408097624778748 0.693621814250946 1 0.827496349811554 0 0.24267560243606567 0 0.0 0 0.0 0.11636289954185486 1.018743872642517 -0.2921942174434662 0.3807489275932312 -0.9202551245689392 0.09018219262361526 0.7902564406394958 0.7220689654350281 1 0.5560586452484131 0 0.11100900918245316 0 0.0 0 0.0 0.0 0.857164740562439 0.5244574546813965 0.0 -0.2601702809333801 0.965544581413269 0.47005921602249146 0.45042261481285095 9 0.27887073159217834 5 0.27887073159217834 0 0.22324655950069427 2 0.006800635252147913 0.0 0.7435801029205322 0.44523051381111145 0.0 -0.7386089563369751 0.6740928292274475 0.4464085102081299 0.5209009647369385 0 0.31352901458740234 9 0.3085489273071289 5 0.3085489273071289 2 0.014867695979773998 0.0700145810842514 0.7434864640235901 0.4208555817604065 0.34348583221435547 -0.5904721021652222 0.730277419090271 0.4059433937072754 0.5164225101470947 9 0.3594251573085785 0 0.33582302927970886 5 0.23320455849170685 6 0.009845871478319168 0.0 0.6803773045539856 0.31026414036750793 0.0 -0.9349040389060974 0.35480818152427673 0.4156637191772461 0.5957323312759399 9 0.4312181770801544 5 0.4312181770801544 0 0.0485517717897892 6 0.029864637181162834 0.0700145810842514 0.7434864640235901 0.4208555817604065 0.34348583221435547 -0.5904721021652222 0.730277419090271 0.4059433937072754 0.5164225101470947 9 0.3594251573085785 0 0.33582302927970886 5 0.23320455849170685 6 0.009845871478319168 0.0 0.7435801029205322 0.44523051381111145 0.0 -0.7386089563369751 0.6740928292274475 0.4464085102081299 0.5209009647369385 0 0.31352901458740234 9 0.3085489273071289 5 0.3085489273071289 2 0.014867695979773998 0.13284938037395477 0.36867111921310425 0.12644071877002716 -0.9558396935462952 -0.032807398587465286 0.2919705808162689 0.5843212604522705 0.7378981113433838 7 0.8813955783843994 6 0.1107533648610115 0 0.0 0 0.0 0.16027027368545532 0.24704813957214355 0.04676051810383797 -0.8637043237686157 -0.0394604317843914 -0.5024262070655823 0.6260561943054199 0.8096365928649902 7 0.9630122780799866 8 0.014977212063968182 0 0.0 0 0.0 0.14394588768482208 0.23762118816375732 0.13662073016166687 -0.8795129060745239 -0.12250129878520966 0.4598223865032196 0.574836015701294 0.8107243776321411 7 0.9305272102355957 8 0.05715407058596611 0 0.0 0 0.0 0.14990682899951935 0.3839050531387329 0.037518344819545746 -0.7688833475112915 -0.0393993966281414 -0.6381420493125916 0.635796308517456 0.7324582934379578 7 0.9107308983802795 6 0.08409671485424042 0 0.0 0 0.0 0.13148938119411469 0.47692030668258667 0.12428713589906693 -0.9563280344009399 -0.13162633776664734 0.2609332501888275 0.5875352025032043 0.6752210855484009 6 0.8819923400878906 7 0.10448935627937317 0 0.0 0 0.0 0.14543934166431427 0.49590951204299927 0.026219138875603676 -0.7388530969619751 -0.1509750634431839 -0.6567277908325195 0.6462750434875488 0.6684547066688538 6 0.8432952761650085 7 0.1331702321767807 0 0.0 0 0.0 0.14394588768482208 0.23762118816375732 0.13662073016166687 -0.8795129060745239 -0.12250129878520966 0.4598223865032196 0.574836015701294 0.8107243776321411 7 0.9305272102355957 8 0.05715407058596611 0 0.0 0 0.0 0.15695250034332275 0.13945317268371582 0.05766453221440315 -0.9262672662734985 0.10943937301635742 -0.36057618260383606 0.613688588142395 0.8671387434005737 7 0.7702589631080627 8 0.229200541973114 0 0.0 0 0.0 0.1377425193786621 0.11639571189880371 0.12225279957056046 -0.8777428269386292 -0.13699759542942047 0.4590594172477722 0.5784492492675781 0.8728861808776855 7 0.5234586596488953 8 0.4755793809890747 0 0.0 0 0.0 0.14543934166431427 0.49590951204299927 0.026219138875603676 -0.7388530969619751 -0.1509750634431839 -0.6567277908325195 0.6462750434875488 0.6684547066688538 6 0.8432952761650085 7 0.1331702321767807 0 0.0 0 0.0 0.09827211499214172 0.6246875524520874 0.11954677850008011 -0.6931974291801453 -0.7169103026390076 0.07397686690092087 0.5954965353012085 0.5888605713844299 6 0.836905837059021 5 0.07508403807878494 9 0.04053134843707085 0 0.0 0.11494315415620804 0.6430489420890808 0.021784529089927673 -0.44160282611846924 -0.4353465437889099 -0.7844783067703247 0.651059091091156 0.5829592347145081 6 0.7448842525482178 5 0.13043087720870972 9 0.03415199741721153 0 0.016842413693666458 0.09827211499214172 0.6246875524520874 0.11954677850008011 -0.6931974291801453 -0.7169103026390076 0.07397686690092087 0.3315928876399994 0.6813181042671204 6 0.836905837059021 5 0.07508403807878494 9 0.04053134843707085 0 0.0 0.0 0.6821010708808899 0.023523900657892227 0.0 -0.7949461340904236 -0.6066469550132751 0.3776485323905945 0.7474589347839355 9 0.252836138010025 5 0.252836138010025 10 0.18387460708618164 6 0.18387460708618164 0.11494315415620804 0.6430489420890808 0.021784529089927673 -0.44160282611846924 -0.4353465437889099 -0.7844783067703247 0.3135816156864166 0.732850193977356 6 0.7448842525482178 5 0.13043087720870972 9 0.03415199741721153 0 0.016842413693666458 0.0 0.6803773045539856 0.31026414036750793 0.0 -0.9349040389060974 0.35480818152427673 0.4156637191772461 0.5957323312759399 9 0.4312181770801544 5 0.4312181770801544 0 0.0485517717897892 6 0.029864637181162834 0.09827211499214172 0.6246875524520874 0.11954677850008011 -0.6931974291801453 -0.7169103026390076 0.07397686690092087 0.3315928876399994 0.6813181042671204 6 0.836905837059021 5 0.07508403807878494 9 0.04053134843707085 0 0.0 0.19692060351371765 0.6521245837211609 0.3191433846950531 0.23175756633281708 -0.5444197058677673 0.8061159253120422 0.31354808807373047 0.5612506866455078 5 0.6037587523460388 6 0.2468358874320984 9 0.06982867419719696 0 0.03735736384987831 0.21539007127285004 0.1667546033859253 -0.007906094193458557 -0.14654988050460815 0.3664967715740204 -0.9187902212142944 0.6632874011993408 0.8602080941200256 8 0.8476832509040833 7 0.15203344821929932 0 0.0 0 0.0 0.16027027368545532 0.24704813957214355 0.04676051810383797 -0.8637043237686157 -0.0394604317843914 -0.5024262070655823 0.6260561943054199 0.8096365928649902 7 0.9630122780799866 8 0.014977212063968182 0 0.0 0 0.0 0.21422770619392395 0.2696647644042969 0.002181949093937874 0.03393658250570297 0.06097598373889923 -0.9975585341453552 0.6666253805160522 0.8024744987487793 7 0.95918208360672 8 0.022087600082159042 0 0.0 0 0.0 0.21422770619392395 0.2696647644042969 0.002181949093937874 0.03393658250570297 0.06097598373889923 -0.9975585341453552 0.6666253805160522 0.8024744987487793 7 0.95918208360672 8 0.022087600082159042 0 0.0 0 0.0 0.14990682899951935 0.3839050531387329 0.037518344819545746 -0.7688833475112915 -0.0393993966281414 -0.6381420493125916 0.635796308517456 0.7324582934379578 7 0.9107308983802795 6 0.08409671485424042 0 0.0 0 0.0 0.22422879934310913 0.414276123046875 0.015284525230526924 0.3885311484336853 0.034516435116529465 -0.9207739233970642 0.6815839409828186 0.7228387594223022 7 0.9109067320823669 6 0.0850052535533905 0 0.0 0 0.0 0.22422879934310913 0.414276123046875 0.015284525230526924 0.3885311484336853 0.034516435116529465 -0.9207739233970642 0.6815839409828186 0.7228387594223022 7 0.9109067320823669 6 0.0850052535533905 0 0.0 0 0.0 0.14543934166431427 0.49590951204299927 0.026219138875603676 -0.7388530969619751 -0.1509750634431839 -0.6567277908325195 0.6462750434875488 0.6684547066688538 6 0.8432952761650085 7 0.1331702321767807 0 0.0 0 0.0 0.20572468638420105 0.5131307244300842 -0.0020905807614326477 0.2683492600917816 -0.022766808047890663 -0.9630420804023743 0.6855449676513672 0.6661345958709717 6 0.8090380430221558 7 0.16335545480251312 0 0.0 0 0.0 0.14543934166431427 0.49590951204299927 0.026219138875603676 -0.7388530969619751 -0.1509750634431839 -0.6567277908325195 0.6462750434875488 0.6684547066688538 6 0.8432952761650085 7 0.1331702321767807 0 0.0 0 0.0 0.18157455325126648 0.6501905918121338 0.005674920976161957 0.335276335477829 -0.02075258642435074 -0.9418622255325317 0.6889263391494751 0.5882138609886169 6 0.7585892677307129 5 0.17383593320846558 0 0.0 0 0.0 0.20572468638420105 0.5131307244300842 -0.0020905807614326477 0.2683492600917816 -0.022766808047890663 -0.9630420804023743 0.6855449676513672 0.6661345958709717 6 0.8090380430221558 7 0.16335545480251312 0 0.0 0 0.0 0.14394588768482208 0.23762118816375732 0.13662073016166687 -0.8795129060745239 -0.12250129878520966 0.4598223865032196 0.574836015701294 0.8107243776321411 7 0.9305272102355957 8 0.05715407058596611 0 0.0 0 0.0 0.24138523638248444 0.1334514617919922 0.1541205644607544 0.37720876932144165 -0.20023193955421448 0.904202401638031 0.5243164896965027 0.8715741634368896 7 0.5651088356971741 8 0.4341517984867096 0 0.0 0 0.0 0.2353973239660263 0.23234236240386963 0.17769855260849 0.2641071677207947 -0.28104496002197266 0.922605037689209 0.5196957588195801 0.8159016370773315 7 0.9059193730354309 8 0.08363302052021027 0 0.0 0 0.0 0.22996719181537628 0.3549819588661194 0.21869893372058868 0.035431988537311554 -0.23514512181282043 0.9713125824928284 0.5098583698272705 0.7451364398002625 7 0.8741137981414795 6 0.10180454701185226 0 0.0 0 0.0 0.14394588768482208 0.23762118816375732 0.13662073016166687 -0.8795129060745239 -0.12250129878520966 0.4598223865032196 0.574836015701294 0.8107243776321411 7 0.9305272102355957 8 0.05715407058596611 0 0.0 0 0.0 0.2353973239660263 0.23234236240386963 0.17769855260849 0.2641071677207947 -0.28104496002197266 0.922605037689209 0.5196957588195801 0.8159016370773315 7 0.9059193730354309 8 0.08363302052021027 0 0.0 0 0.0 0.13148938119411469 0.47692030668258667 0.12428713589906693 -0.9563280344009399 -0.13162633776664734 0.2609332501888275 0.5875352025032043 0.6752210855484009 6 0.8819923400878906 7 0.10448935627937317 0 0.0 0 0.0 0.22996719181537628 0.3549819588661194 0.21869893372058868 0.035431988537311554 -0.23514512181282043 0.9713125824928284 0.5098583698272705 0.7451364398002625 7 0.8741137981414795 6 0.10180454701185226 0 0.0 0 0.0 0.23106297850608826 0.49126142263412476 0.25890085101127625 0.01269569993019104 -0.28205206990242004 0.9592882990837097 0.4915243089199066 0.6694369912147522 6 0.7228800058364868 7 0.17418056726455688 5 0.08285880833864212 0 0.0 0.09827211499214172 0.6246875524520874 0.11954677850008011 -0.6931974291801453 -0.7169103026390076 0.07397686690092087 0.5954965353012085 0.5888605713844299 6 0.836905837059021 5 0.07508403807878494 9 0.04053134843707085 0 0.0 0.23106297850608826 0.49126142263412476 0.25890085101127625 0.01269569993019104 -0.28205206990242004 0.9592882990837097 0.4915243089199066 0.6694369912147522 6 0.7228800058364868 7 0.17418056726455688 5 0.08285880833864212 0 0.0 0.19692060351371765 0.6521245837211609 0.3191433846950531 0.23175756633281708 -0.5444197058677673 0.8061159253120422 0.4704653024673462 0.5733580589294434 5 0.6037587523460388 6 0.2468358874320984 9 0.06982867419719696 0 0.03735736384987831 0.1329372525215149 1.081725835800171 -0.11218704283237457 0.8476821184158325 -0.5233924388885498 -0.08630634844303131 0.08180608600378036 0.2900291383266449 1 0.7744880318641663 0 0.403382271528244 0 0.0 0 0.0 0.10067398101091385 0.9663213491439819 -0.08786684274673462 0.712576687335968 -0.24292734265327454 -0.6581621766090393 0.06711860746145248 0.3559820055961609 0 0.6806142330169678 1 0.19555994868278503 5 0.04794131591916084 6 0.04703441634774208 0.09388621896505356 1.0232656002044678 -0.1361936777830124 0.6617023348808289 -0.5929136276245117 -0.4588763117790222 0.05223001912236214 0.31676408648490906 1 0.7060643434524536 0 0.5053098201751709 0 0.0 0 0.0 0.16467930376529694 0.764995813369751 -0.0035517215728759766 0.6215704679489136 -0.09994811564683914 -0.7769402265548706 0.10110408067703247 0.4813825190067291 6 0.42210859060287476 5 0.36726126074790955 0 0.15537992119789124 0 0.0 0.07171060144901276 0.7989503741264343 -0.08710231631994247 0.34336376190185547 -0.4688863754272461 -0.8137760758399963 0.038444168865680695 0.4439431428909302 0 0.5288071632385254 6 0.14961421489715576 5 0.14801231026649475 9 0.0648399293422699 0.11275650560855865 0.858371376991272 -0.07582104951143265 0.6566362380981445 -0.06662190705537796 -0.7512131333351135 0.06558506190776825 0.4164593815803528 0 0.6033954620361328 6 0.14807792007923126 5 0.11798923462629318 1 0.06080198287963867 0.18157455325126648 0.6501905918121338 0.005674920976161957 0.335276335477829 -0.02075258642435074 -0.9418622255325317 0.10874716937541962 0.547910213470459 6 0.7585892677307129 5 0.17383593320846558 0 0.0 0 0.0 0.09191875904798508 0.7384775280952454 -0.004247918725013733 0.11261329799890518 -0.5351725816726685 -0.8371837735176086 0.058216046541929245 0.4974377155303955 6 0.3449857234954834 5 0.3330496847629547 0 0.19796177744865417 9 0.05866539850831032 0.16467930376529694 0.764995813369751 -0.0035517215728759766 0.6215704679489136 -0.09994811564683914 -0.7769402265548706 0.10110408067703247 0.4813825190067291 6 0.42210859060287476 5 0.36726126074790955 0 0.15537992119789124 0 0.0 0.07171060144901276 0.7989503741264343 -0.08710231631994247 0.34336376190185547 -0.4688863754272461 -0.8137760758399963 0.038444168865680695 0.4439431428909302 0 0.5288071632385254 6 0.14961421489715576 5 0.14801231026649475 9 0.0648399293422699 0.0 0.7530391812324524 -0.05506258085370064 0.0 -0.7327799201011658 -0.6804406642913818 0.002868201583623886 0.4762572944164276 0 0.40316474437713623 9 0.17333783209323883 5 0.17333783209323883 6 0.10585487633943558 0.0 0.8078899383544922 -0.10290303826332092 0.0 -0.5152745246887207 -0.8569902777671814 0.00020304521603975445 0.4368830919265747 0 0.5602840185165405 5 0.09895451366901398 9 0.09895450621843338 6 0.08096460998058319 0.0 0.866442084312439 -0.12817779183387756 0.0 -0.19495223462581635 -0.9808038473129272 0.00040259622619487345 0.4023122787475586 0 0.6251106858253479 1 0.10255718231201172 5 0.061067480593919754 9 0.06106747314333916 0.07171060144901276 0.7989503741264343 -0.08710231631994247 0.34336376190185547 -0.4688863754272461 -0.8137760758399963 0.038444168865680695 0.4439431428909302 0 0.5288071632385254 6 0.14961421489715576 5 0.14801231026649475 9 0.0648399293422699 0.0 0.8078899383544922 -0.10290303826332092 0.0 -0.5152745246887207 -0.8569902777671814 0.00020304521603975445 0.4368830919265747 0 0.5602840185165405 5 0.09895451366901398 9 0.09895450621843338 6 0.08096460998058319 0.0 1.0181424617767334 -0.20196408033370972 0.0 -0.9700308442115784 -0.24283577501773834 0.6893323659896851 0.9525341987609863 1 0.9506118297576904 0 0.27259060740470886 0 0.0 0 0.0 0.10067398101091385 0.9663213491439819 -0.08786684274673462 0.712576687335968 -0.24292734265327454 -0.6581621766090393 0.7870696783065796 0.8129236102104187 0 0.6806142330169678 1 0.19555994868278503 5 0.04794131591916084 6 0.04703441634774208 0.0 0.9426074624061584 -0.1419200301170349 0.0 -0.413312166929245 -0.9105807542800903 0.7870696783065796 0.9376175999641418 0 0.6058444380760193 1 0.249999538064003 5 0.01192476972937584 9 0.011924747377634048 0.2632824182510376 0.192702054977417 0.030293196439743042 0.8633686304092407 0.13098543882369995 -0.48722800612449646 0.129202738404274 0.8032676577568054 7 0.8625421524047852 8 0.13671985268592834 0 0.0 0 0.0 0.279649019241333 0.08738040924072266 0.07750121504068375 0.9613330364227295 -0.143650621175766 0.23493148386478424 0.15701256692409515 0.8617966175079346 8 0.8143556118011475 7 0.185213103890419 0 0.0 0 0.0 0.2741932272911072 0.11445808410644531 0.004911437630653381 0.8896145224571228 0.3404645025730133 -0.30430006980895996 0.11660508066415787 0.8494014739990234 8 0.8897741436958313 7 0.11008638888597488 0 0.0 0 0.0 0.24138523638248444 0.1334514617919922 0.1541205644607544 0.37720876932144165 -0.20023193955421448 0.904202401638031 0.5243164896965027 0.8715741634368896 7 0.5651088356971741 8 0.4341517984867096 0 0.0 0 0.0 0.14728760719299316 0.0641862154006958 0.11256571114063263 -0.7809076309204102 -0.348002552986145 0.5186620950698853 0.5806708335876465 0.896611750125885 8 0.7242515683174133 7 0.27535006403923035 0 0.0 0 0.0 0.24097920954227448 0.052500367164611816 0.1248338520526886 0.40839868783950806 -0.49644458293914795 0.765953540802002 0.5384967923164368 0.9167900085449219 8 0.824219822883606 7 0.1755632609128952 0 0.0 0 0.0 0.1377425193786621 0.11639571189880371 0.12225279957056046 -0.8777428269386292 -0.13699759542942047 0.4590594172477722 0.5784492492675781 0.8728861808776855 7 0.5234586596488953 8 0.4755793809890747 0 0.0 0 0.0 0.15695250034332275 0.13945317268371582 0.05766453221440315 -0.9262672662734985 0.10943937301635742 -0.36057618260383606 0.613688588142395 0.8671387434005737 7 0.7702589631080627 8 0.229200541973114 0 0.0 0 0.0 0.14728760719299316 0.0641862154006958 0.11256571114063263 -0.7809076309204102 -0.348002552986145 0.5186620950698853 0.5806708335876465 0.896611750125885 8 0.7242515683174133 7 0.27535006403923035 0 0.0 0 0.0 0.24138523638248444 0.1334514617919922 0.1541205644607544 0.37720876932144165 -0.20023193955421448 0.904202401638031 0.20311272144317627 0.8384818434715271 7 0.5651088356971741 8 0.4341517984867096 0 0.0 0 0.0 0.279649019241333 0.08738040924072266 0.07750121504068375 0.9613330364227295 -0.143650621175766 0.23493148386478424 0.15701256692409515 0.8617966175079346 8 0.8143556118011475 7 0.185213103890419 0 0.0 0 0.0 0.27068033814430237 0.17515099048614502 0.10558918118476868 0.9747001528739929 -0.030365917831659317 0.2213507443666458 0.17252767086029053 0.8140662312507629 7 0.8328282237052917 8 0.16480152308940887 0 0.0 0 0.0 0.2741932272911072 0.11445808410644531 0.004911437630653381 0.8896145224571228 0.3404645025730133 -0.30430006980895996 0.11660508066415787 0.8494014739990234 8 0.8897741436958313 7 0.11008638888597488 0 0.0 0 0.0 0.21539007127285004 0.1667546033859253 -0.007906094193458557 -0.14654988050460815 0.3664967715740204 -0.9187902212142944 0.09296010434627533 0.8117510676383972 8 0.8476832509040833 7 0.15203344821929932 0 0.0 0 0.0 0.2632824182510376 0.192702054977417 0.030293196439743042 0.8633686304092407 0.13098543882369995 -0.48722800612449646 0.129202738404274 0.8032676577568054 7 0.8625421524047852 8 0.13671985268592834 0 0.0 0 0.0 0.24097920954227448 0.052500367164611816 0.1248338520526886 0.40839868783950806 -0.49644458293914795 0.765953540802002 0.5384967923164368 0.9167900085449219 8 0.824219822883606 7 0.1755632609128952 0 0.0 0 0.0 0.17186416685581207 0.0006354935467243195 0.08157961070537567 -0.47993406653404236 -0.790582001209259 0.3802606165409088 0.5846631526947021 0.9269393086433411 8 0.915589451789856 7 0.08427349478006363 0 0.0 0 0.0 0.24350489675998688 0.0006354935467243195 0.051150236278772354 0.47935423254966736 -0.8420056700706482 0.24741356074810028 0.5689922571182251 0.960877001285553 8 0.951987624168396 7 0.045869868248701096 0 0.0 0 0.0 0.1543327420949936 0.08759307861328125 0.01969859004020691 -0.9604480266571045 0.17163610458374023 -0.21918393671512604 0.624218761920929 0.8986101746559143 8 0.8263624310493469 7 0.17350547015666962 0 0.0 0 0.0 0.14728760719299316 0.0641862154006958 0.11256571114063263 -0.7809076309204102 -0.348002552986145 0.5186620950698853 0.5806708335876465 0.896611750125885 8 0.7242515683174133 7 0.27535006403923035 0 0.0 0 0.0 0.15695250034332275 0.13945317268371582 0.05766453221440315 -0.9262672662734985 0.10943937301635742 -0.36057618260383606 0.613688588142395 0.8671387434005737 7 0.7702589631080627 8 0.229200541973114 0 0.0 0 0.0 0.24350489675998688 0.0006354935467243195 0.051150236278772354 0.47935423254966736 -0.8420056700706482 0.24741356074810028 0.1503724455833435 0.9156708121299744 8 0.951987624168396 7 0.045869868248701096 0 0.0 0 0.0 0.279649019241333 0.08738040924072266 0.07750121504068375 0.9613330364227295 -0.143650621175766 0.23493148386478424 0.15701256692409515 0.8617966175079346 8 0.8143556118011475 7 0.185213103890419 0 0.0 0 0.0 0.24097920954227448 0.052500367164611816 0.1248338520526886 0.40839868783950806 -0.49644458293914795 0.765953540802002 0.1878468245267868 0.882355809211731 8 0.824219822883606 7 0.1755632609128952 0 0.0 0 0.0 0.2741932272911072 0.11445808410644531 0.004911437630653381 0.8896145224571228 0.3404645025730133 -0.30430006980895996 0.11660508066415787 0.8494014739990234 8 0.8897741436958313 7 0.11008638888597488 0 0.0 0 0.0 0.2765810489654541 0.0468442440032959 0.0249030739068985 0.940153181552887 -0.31360819935798645 0.13303017616271973 0.13173434138298035 0.8852612376213074 8 0.9507208466529846 7 0.0483645461499691 0 0.0 0 0.0 0.2862442135810852 0.08407890796661377 -0.013642758131027222 0.9532761573791504 0.27402570843696594 -0.1270180344581604 0.10861167311668396 0.8684667348861694 8 0.9602087140083313 7 0.029473546892404556 0 0.0 0 0.0 0.2741932272911072 0.11445808410644531 0.004911437630653381 0.8896145224571228 0.3404645025730133 -0.30430006980895996 0.11660508066415787 0.8494014739990234 8 0.8897741436958313 7 0.11008638888597488 0 0.0 0 0.0 0.22046658396720886 0.09783637523651123 -0.07096876204013824 0.016296884045004845 0.8249458074569702 -0.5649281144142151 0.06424757838249207 0.8535482883453369 8 0.99355149269104 0 0.0 0 0.0 0 0.0 0.21539007127285004 0.1667546033859253 -0.007906094193458557 -0.14654988050460815 0.3664967715740204 -0.9187902212142944 0.09296010434627533 0.8117510676383972 8 0.8476832509040833 7 0.15203344821929932 0 0.0 0 0.0 0.20350560545921326 0.0006354935467243195 -0.11223234236240387 -0.10193182528018951 -0.844508171081543 -0.5256813168525696 0.6475530862808228 0.9809802174568176 8 0.9989274144172668 0 0.0 0 0.0 0 0.0 0.2590513527393341 0.0006354935467243195 -0.09128285944461823 0.5378581881523132 -0.7852412462234497 -0.30668050050735474 0.6261083483695984 0.999796986579895 8 0.9953135848045349 0 0.0 0 0.0 0 0.0 0.24350489675998688 0.0006354935467243195 0.051150236278772354 0.47935423254966736 -0.8420056700706482 0.24741356074810028 0.5689922571182251 0.960877001285553 8 0.951987624168396 7 0.045869868248701096 0 0.0 0 0.0 0.21539007127285004 0.1667546033859253 -0.007906094193458557 -0.14654988050460815 0.3664967715740204 -0.9187902212142944 0.6632874011993408 0.8602080941200256 8 0.8476832509040833 7 0.15203344821929932 0 0.0 0 0.0 0.1543327420949936 0.08759307861328125 0.01969859004020691 -0.9604480266571045 0.17163610458374023 -0.21918393671512604 0.624218761920929 0.8986101746559143 8 0.8263624310493469 7 0.17350547015666962 0 0.0 0 0.0 0.15695250034332275 0.13945317268371582 0.05766453221440315 -0.9262672662734985 0.10943937301635742 -0.36057618260383606 0.613688588142395 0.8671387434005737 7 0.7702589631080627 8 0.229200541973114 0 0.0 0 0.0 0.1543327420949936 0.08759307861328125 0.01969859004020691 -0.9604480266571045 0.17163610458374023 -0.21918393671512604 0.624218761920929 0.8986101746559143 8 0.8263624310493469 7 0.17350547015666962 0 0.0 0 0.0 0.16382159292697906 0.0006354935467243195 -0.08050514757633209 -0.6014587879180908 -0.7863094210624695 -0.14111758768558502 0.6353160738945007 0.9585727453231812 8 0.986153244972229 0 0.0 0 0.0 0 0.0 0.17186416685581207 0.0006354935467243195 0.08157961070537567 -0.47993406653404236 -0.790582001209259 0.3802606165409088 0.5846631526947021 0.9269393086433411 8 0.915589451789856 7 0.08427349478006363 0 0.0 0 0.0 0.20350560545921326 0.0006354935467243195 -0.11223234236240387 -0.10193182528018951 -0.844508171081543 -0.5256813168525696 0.6475530862808228 0.9809802174568176 8 0.9989274144172668 0 0.0 0 0.0 0 0.0 0.14809073507785797 0.03774738311767578 -0.1051795557141304 -0.8722190260887146 0.06930753588676453 -0.4841151237487793 0.6554734706878662 0.94559645652771 8 0.9824442863464355 0 0.0 0 0.0 0 0.0 0.21444743871688843 0.05028212070465088 -0.15147438645362854 0.03833124786615372 0.21689504384994507 -0.9754325747489929 0.6889263391494751 0.9614924192428589 8 1.0102593898773193 0 0.0 0 0.0 0 0.0 0.2590513527393341 0.0006354935467243195 -0.09128285944461823 0.5378581881523132 -0.7852412462234497 -0.30668050050735474 0.07569105178117752 0.9268571734428406 8 0.9953135848045349 0 0.0 0 0.0 0 0.0 0.21444743871688843 0.05028212070465088 -0.15147438645362854 0.03833124786615372 0.21689504384994507 -0.9754325747489929 0.029200129210948944 0.8926466703414917 8 1.0102593898773193 0 0.0 0 0.0 0 0.0 0.27682194113731384 0.03609919548034668 -0.09393604099750519 0.8938566446304321 0.03878902643918991 -0.4466078579425812 0.07372365891933441 0.8974340558052063 8 0.9938223958015442 0 0.0 0 0.0 0 0.0 0.16382159292697906 0.0006354935467243195 -0.08050514757633209 -0.6014587879180908 -0.7863094210624695 -0.14111758768558502 0.6353160738945007 0.9585727453231812 8 0.986153244972229 0 0.0 0 0.0 0 0.0 0.24350489675998688 0.0006354935467243195 0.051150236278772354 0.47935423254966736 -0.8420056700706482 0.24741356074810028 0.5689922571182251 0.960877001285553 8 0.951987624168396 7 0.045869868248701096 0 0.0 0 0.0 0.17186416685581207 0.0006354935467243195 0.08157961070537567 -0.47993406653404236 -0.790582001209259 0.3802606165409088 0.5846631526947021 0.9269393086433411 8 0.915589451789856 7 0.08427349478006363 0 0.0 0 0.0 0.14809073507785797 0.03774738311767578 -0.1051795557141304 -0.8722190260887146 0.06930753588676453 -0.4841151237487793 0.6554734706878662 0.94559645652771 8 0.9824442863464355 0 0.0 0 0.0 0 0.0 0.22046658396720886 0.09783637523651123 -0.07096876204013824 0.016296884045004845 0.8249458074569702 -0.5649281144142151 0.6826233267784119 0.909465491771698 8 0.99355149269104 0 0.0 0 0.0 0 0.0 0.21444743871688843 0.05028212070465088 -0.15147438645362854 0.03833124786615372 0.21689504384994507 -0.9754325747489929 0.6889263391494751 0.9614924192428589 8 1.0102593898773193 0 0.0 0 0.0 0 0.0 0.2765810489654541 0.0468442440032959 0.0249030739068985 0.940153181552887 -0.31360819935798645 0.13303017616271973 0.13173434138298035 0.8852612376213074 8 0.9507208466529846 7 0.0483645461499691 0 0.0 0 0.0 0.2590513527393341 0.0006354935467243195 -0.09128285944461823 0.5378581881523132 -0.7852412462234497 -0.30668050050735474 0.07569105178117752 0.9268571734428406 8 0.9953135848045349 0 0.0 0 0.0 0 0.0 0.27682194113731384 0.03609919548034668 -0.09393604099750519 0.8938566446304321 0.03878902643918991 -0.4466078579425812 0.07372365891933441 0.8974340558052063 8 0.9938223958015442 0 0.0 0 0.0 0 0.0 0.2862442135810852 0.08407890796661377 -0.013642758131027222 0.9532761573791504 0.27402570843696594 -0.1270180344581604 0.10861167311668396 0.8684667348861694 8 0.9602087140083313 7 0.029473546892404556 0 0.0 0 0.0 0.2765810489654541 0.0468442440032959 0.0249030739068985 0.940153181552887 -0.31360819935798645 0.13303017616271973 0.13173434138298035 0.8852612376213074 8 0.9507208466529846 7 0.0483645461499691 0 0.0 0 0.0 0.27682194113731384 0.03609919548034668 -0.09393604099750519 0.8938566446304321 0.03878902643918991 -0.4466078579425812 0.07372365891933441 0.8974340558052063 8 0.9938223958015442 0 0.0 0 0.0 0 0.0 0.22046658396720886 0.09783637523651123 -0.07096876204013824 0.016296884045004845 0.8249458074569702 -0.5649281144142151 0.06424757838249207 0.8535482883453369 8 0.99355149269104 0 0.0 0 0.0 0 0.0 0.27682194113731384 0.03609919548034668 -0.09393604099750519 0.8938566446304321 0.03878902643918991 -0.4466078579425812 0.07372365891933441 0.8974340558052063 8 0.9938223958015442 0 0.0 0 0.0 0 0.0 0.21444743871688843 0.05028212070465088 -0.15147438645362854 0.03833124786615372 0.21689504384994507 -0.9754325747489929 0.029200129210948944 0.8926466703414917 8 1.0102593898773193 0 0.0 0 0.0 0 0.0 0.17711219191551208 1.2111425399780273 -0.08284486830234528 0.9780877232551575 0.07745597511529922 0.19315165281295776 0.11920919269323349 0.2266269475221634 1 0.6505640745162964 0 0.27260327339172363 0 0.0 0 0.0 0.17734870314598083 1.1222507953643799 0.016492163762450218 0.9736624956130981 0.07391583174467087 -0.21564379334449768 0.15870711207389832 0.2861701548099518 0 0.7400460243225098 1 0.2110891044139862 5 0.021712277084589005 2 0.0 0.15271435678005219 1.1326109170913696 -0.08103625476360321 0.9580675959587097 -0.28070923686027527 0.05710013210773468 0.10731169581413269 0.2683471441268921 1 0.6765074133872986 0 0.47961559891700745 0 0.0 0 0.0 0.2174592912197113 1.1028785705566406 0.2627961039543152 0.9561144113540649 0.17743460834026337 0.23300881683826447 0.28516799211502075 0.32168421149253845 0 0.5695722103118896 5 0.11019442975521088 1 0.029866231605410576 2 0.00028992959414608777 0.23453930020332336 1.0399465560913086 0.12781919538974762 0.9630115628242493 0.15222632884979248 -0.2221747487783432 0.2123546004295349 0.34633561968803406 0 0.7073097229003906 5 0.15077143907546997 1 0.04978937283158302 2 0.004751469939947128 0.19893279671669006 1.1545631885528564 0.1498781144618988 0.9536118507385254 0.28800317645072937 -0.0874660462141037 0.23297777771949768 0.28563162684440613 0 0.7194539904594421 1 0.08959674090147018 5 0.05332915484905243 2 0.01339690014719963 0.17711219191551208 1.193559169769287 0.0424371063709259 0.9813531637191772 0.1826837956905365 -0.05929746478796005 0.18139240145683289 0.2521224319934845 0 0.7151136994361877 1 0.23585881292819977 2 0.016049621626734734 0 0.0 0.1459522545337677 1.3251063823699951 0.18270058929920197 0.8204901218414307 0.5527207255363464 0.14572587609291077 0.2664920687675476 0.20125365257263184 0 0.5595225095748901 1 0.13441134989261627 2 0.0002072147763101384 0 0.0 0.19893279671669006 1.1545631885528564 0.1498781144618988 0.9536118507385254 0.28800317645072937 -0.0874660462141037 0.23297777771949768 0.28563162684440613 0 0.7194539904594421 1 0.08959674090147018 5 0.05332915484905243 2 0.01339690014719963 0.11636289954185486 1.053910732269287 -0.19108946621418 0.5185399651527405 -0.8486281633377075 0.10443434119224548 0.8408097624778748 0.693621814250946 1 0.827496349811554 0 0.24267560243606567 0 0.0 0 0.0 0.09388621896505356 1.0232656002044678 -0.1361936777830124 0.6617023348808289 -0.5929136276245117 -0.4588763117790222 0.8785715699195862 0.6988553404808044 1 0.7060643434524536 0 0.5053098201751709 0 0.0 0 0.0 0.0 1.0181424617767334 -0.20196408033370972 0.0 -0.9700308442115784 -0.24283577501773834 0.8594119548797607 0.7608353495597839 1 0.9506118297576904 0 0.27259060740470886 0 0.0 0 0.0 0.0 0.6821010708808899 0.023523900657892227 0.0 -0.7949461340904236 -0.6066469550132751 0.007275765296071768 0.5337982773780823 9 0.252836138010025 5 0.252836138010025 10 0.18387460708618164 6 0.18387460708618164 0.09191875904798508 0.7384775280952454 -0.004247918725013733 0.11261329799890518 -0.5351725816726685 -0.8371837735176086 0.058216046541929245 0.4974377155303955 6 0.3449857234954834 5 0.3330496847629547 0 0.19796177744865417 9 0.05866539850831032 0.11494315415620804 0.6430489420890808 0.021784529089927673 -0.44160282611846924 -0.4353465437889099 -0.7844783067703247 0.07110165804624557 0.5535106658935547 6 0.7448842525482178 5 0.13043087720870972 9 0.03415199741721153 0 0.016842413693666458 0.10067398101091385 0.9663213491439819 -0.08786684274673462 0.712576687335968 -0.24292734265327454 -0.6581621766090393 0.06711860746145248 0.3559820055961609 0 0.6806142330169678 1 0.19555994868278503 5 0.04794131591916084 6 0.04703441634774208 0.0 0.866442084312439 -0.12817779183387756 0.0 -0.19495223462581635 -0.9808038473129272 0.00040259622619487345 0.4023122787475586 0 0.6251106858253479 1 0.10255718231201172 5 0.061067480593919754 9 0.06106747314333916 0.0 0.9426074624061584 -0.1419200301170349 0.0 -0.413312166929245 -0.9105807542800903 0.0026334882713854313 0.3612455725669861 0 0.6058444380760193 1 0.249999538064003 5 0.01192476972937584 9 0.011924747377634048 0.16467930376529694 0.764995813369751 -0.0035517215728759766 0.6215704679489136 -0.09994811564683914 -0.7769402265548706 0.10110408067703247 0.4813825190067291 6 0.42210859060287476 5 0.36726126074790955 0 0.15537992119789124 0 0.0 0.17548006772994995 0.9740344882011414 0.03773410618305206 0.8627887964248657 -0.095828115940094 -0.49632251262664795 0.14806827902793884 0.3685593605041504 0 0.7296561002731323 5 0.13401056826114655 1 0.05976245924830437 6 0.02519860677421093 0.27550312876701355 0.891650915145874 0.1857611984014511 0.9843134880065918 0.15448468923568726 -0.08484145998954773 0.2322322577238083 0.43014711141586304 5 0.6623887419700623 0 0.23774738609790802 6 0.02405529096722603 2 0.0070293257012963295 0.0 0.8515796661376953 1.0820811986923218 0.0 -0.9989928603172302 0.04452650621533394 0.8863584995269775 0.47759830951690674 4 0.9997074007987976 0 0.0 0 0.0 0 0.0 0.04524477198719978 0.9055635929107666 0.9612237811088562 0.99981689453125 -0.011352885514497757 -0.013397625647485256 0.8992534875869751 0.4032728672027588 4 0.9947757720947266 0 0.0 0 0.0 0 0.0 0.05299364775419235 0.9086697101593018 1.127077579498291 0.9984740614891052 0.004181035794317722 0.05499435216188431 0.9316335320472717 0.4823167026042938 4 0.9999160170555115 0 0.0 0 0.0 0 0.0 0.0 0.9533488154411316 1.0950424671173096 0.0 0.9988097548484802 -0.048158206045627594 0.9595854878425598 0.4558004140853882 4 0.9995507597923279 0 0.0 0 0.0 0 0.0 0.04524477198719978 0.9055635929107666 0.9612237811088562 0.99981689453125 -0.011352885514497757 -0.013397625647485256 0.8992534875869751 0.4032728672027588 4 0.9947757720947266 0 0.0 0 0.0 0 0.0 0.0 0.956256628036499 0.9388030171394348 0.0 0.9941099286079407 0.10831019282341003 0.9283884763717651 0.3782193958759308 4 0.9637963771820068 3 0.022601444274187088 0 0.0 0 0.0 0.15597429871559143 1.3777180910110474 -0.39357221126556396 0.6780602335929871 0.5271767377853394 -0.5121310949325562 0.6492087841033936 0.4990021586418152 1 0.52517169713974 0 0.0 0 0.0 0 0.0 0.09474784880876541 1.4414864778518677 -0.305348664522171 0.47962889075279236 0.8599505424499512 -0.1743827611207962 0.6945981383323669 0.5729519724845886 1 0.4937168061733246 0 0.006853099912405014 0 0.0 0 0.0 0.18949569761753082 1.3684693574905396 -0.2584112286567688 0.860957682132721 0.5083467960357666 0.01657155156135559 0.5453251600265503 0.5488014817237854 1 0.5081745386123657 0 0.03876670077443123 0 0.0 0 0.0 0.04986967518925667 1.2690738439559937 -0.4816516935825348 0.4589068293571472 0.574968695640564 -0.6773278117179871 0.7414538264274597 0.31137514114379883 1 0.5935874581336975 0 0.0 0 0.0 0 0.0 0.15597429871559143 1.3777180910110474 -0.39357221126556396 0.6780602335929871 0.5271767377853394 -0.5121310949325562 0.6492087841033936 0.4990021586418152 1 0.52517169713974 0 0.0 0 0.0 0 0.0 0.18102072179317474 1.268702745437622 -0.39696988463401794 0.8454847931861877 0.23203222453594208 -0.48088014125823975 0.5643640756607056 0.39259523153305054 1 0.5544809699058533 0 0.0 0 0.0 0 0.0 0.11392863094806671 1.1170620918273926 -0.5390962958335876 0.45652636885643005 -0.3259071707725525 -0.8278450965881348 0.6125847101211548 0.13550977408885956 1 0.5385183095932007 0 0.0 0 0.0 0 0.0 0.0 1.102358341217041 -0.5441152453422546 0.0 -0.5053865313529968 -0.8628803491592407 0.6952515840530396 0.0594245009124279 1 0.49531272053718567 0 0.0 0 0.0 0 0.0 0.0 1.1535732746124268 -0.5664279460906982 0.0 -0.22562333941459656 -0.9742118716239929 0.7363960146903992 0.10636518150568008 1 0.524931788444519 0 0.0 0 0.0 0 0.0 0.0 1.2747960090637207 -0.5200934410095215 0.0 0.7257301807403564 -0.6879787445068359 0.7898815870285034 0.26401570439338684 1 0.5951871871948242 0 0.0 0 0.0 0 0.0 0.06438668072223663 1.2186225652694702 -0.5522415637969971 0.40809351205825806 0.41642504930496216 -0.8124027252197266 0.7213020324707031 0.204230397939682 1 0.5838661193847656 0 0.0 0 0.0 0 0.0 0.0 1.2263679504394531 -0.5837152004241943 0.0 0.3245033025741577 -0.9458601474761963 0.7843695878982544 0.1751059889793396 1 0.5790085792541504 0 0.0 0 0.0 0 0.0 0.06438668072223663 1.2186225652694702 -0.5522415637969971 0.40809351205825806 0.41642504930496216 -0.8124027252197266 0.7213020324707031 0.204230397939682 1 0.5838661193847656 0 0.0 0 0.0 0 0.0 0.11392863094806671 1.1170620918273926 -0.5390962958335876 0.45652636885643005 -0.3259071707725525 -0.8278450965881348 0.6125847101211548 0.13550977408885956 1 0.5385183095932007 0 0.0 0 0.0 0 0.0 0.0 1.1535732746124268 -0.5664279460906982 0.0 -0.22562333941459656 -0.9742118716239929 0.7363960146903992 0.10636518150568008 1 0.524931788444519 0 0.0 0 0.0 0 0.0 0.18102072179317474 1.268702745437622 -0.39696988463401794 0.8454847931861877 0.23203222453594208 -0.48088014125823975 0.5643640756607056 0.39259523153305054 1 0.5544809699058533 0 0.0 0 0.0 0 0.0 0.19536322355270386 1.1583302021026611 -0.38174155354499817 0.9667958617210388 0.013214514590799809 -0.2551042139530182 0.4866374433040619 0.2810833156108856 1 0.5957530736923218 0 0.01954641565680504 0 0.0 0 0.0 0.1287733018398285 1.2108771800994873 -0.5207679867744446 0.6269417405128479 0.4066286087036133 -0.6644794940948486 0.6418904066085815 0.2361043244600296 1 0.5873615145683289 0 0.0 0 0.0 0 0.0 0.07297612726688385 1.3934298753738403 0.16687017679214478 0.4526505470275879 0.8392895460128784 0.3011261224746704 0.27515244483947754 0.15112540125846863 0 0.46099191904067993 1 0.19868381321430206 2 0.00027996301651000977 0 0.0 0.11630034446716309 1.385688066482544 0.011257962323725224 0.8467971086502075 0.5172887444496155 0.12363047897815704 0.19177863001823425 0.14417126774787903 1 0.4200000762939453 0 0.41010770201683044 2 0.021439071744680405 0 0.0 0.058150164783000946 1.453392744064331 -0.0034714294597506523 0.5017548203468323 0.843226432800293 0.19284646213054657 0.19909562170505524 0.09749332815408707 1 0.38084477186203003 0 0.2609921395778656 2 0.015516634099185467 0 0.0 0.08727402985095978 1.2957605123519897 0.34337759017944336 0.4752952754497528 0.6862391829490662 0.5505844354629517 0.3502945005893707 0.2176021784543991 0 0.1636802703142166 2 0.06262505799531937 1 0.050292082130908966 0 0.0 0.1459522545337677 1.3251063823699951 0.18270058929920197 0.8204901218414307 0.5527207255363464 0.14572587609291077 0.2664920687675476 0.20125365257263184 0 0.5595225095748901 1 0.13441134989261627 2 0.0002072147763101384 0 0.0 0.07297612726688385 1.3934298753738403 0.16687017679214478 0.4526505470275879 0.8392895460128784 0.3011261224746704 0.27515244483947754 0.15112540125846863 0 0.46099191904067993 1 0.19868381321430206 2 0.00027996301651000977 0 0.0 0.07297612726688385 1.460466742515564 -0.16172027587890625 0.5019684433937073 0.8640094995498657 0.03888057917356491 0.12038150429725647 0.0717666819691658 1 0.43864887952804565 0 0.0806228369474411 0 0.0 0 0.0 0.0 1.4754657745361328 -0.018200816586613655 0.0 0.9835200309753418 0.18070009350776672 0.2048933058977127 0.06445963680744171 1 0.39598000049591064 0 0.22064290940761566 2 0.005581408739089966 0 0.0 0.058150164783000946 1.453392744064331 -0.0034714294597506523 0.5017548203468323 0.843226432800293 0.19284646213054657 0.19909562170505524 0.09749332815408707 1 0.38084477186203003 0 0.2609921395778656 2 0.015516634099185467 0 0.0 0.0650172010064125 1.190718173980713 0.442444771528244 0.5703604221343994 0.43330180644989014 0.6977751851081848 0.4042886793613434 0.26924484968185425 2 0.05483977124094963 0 0.0 0 0.0 0 0.0 0.17454805970191956 1.2118858098983765 0.34130558371543884 0.8105410933494568 0.3488875925540924 0.47038179636001587 0.3298243582248688 0.2703784704208374 0 0.21865041553974152 2 0.04487593099474907 1 0.04441479220986366 5 0.026416389271616936 0.08727402985095978 1.2957605123519897 0.34337759017944336 0.4752952754497528 0.6862391829490662 0.5505844354629517 0.3502945005893707 0.2176021784543991 0 0.1636802703142166 2 0.06262505799531937 1 0.050292082130908966 0 0.0 0.04986967518925667 1.2690738439559937 -0.4816516935825348 0.4589068293571472 0.574968695640564 -0.6773278117179871 0.7414538264274597 0.31137514114379883 1 0.5935874581336975 0 0.0 0 0.0 0 0.0 0.1287733018398285 1.2108771800994873 -0.5207679867744446 0.6269417405128479 0.4066286087036133 -0.6644794940948486 0.6418904066085815 0.2361043244600296 1 0.5873615145683289 0 0.0 0 0.0 0 0.0 0.06438668072223663 1.2186225652694702 -0.5522415637969971 0.40809351205825806 0.41642504930496216 -0.8124027252197266 0.7213020324707031 0.204230397939682 1 0.5838661193847656 0 0.0 0 0.0 0 0.0 0.06429819017648697 1.3896068334579468 -0.43792080879211426 0.3429059684276581 0.5780205726623535 -0.7404400706291199 0.7636973261833191 0.4662829637527466 1 0.532609224319458 0 0.0 0 0.0 0 0.0 0.0 1.4688720703125 -0.35228610038757324 0.0 0.9361552596092224 -0.35151219367980957 0.8172668218612671 0.550440788269043 1 0.5002522468566895 0 0.0 0 0.0 0 0.0 0.09474784880876541 1.4414864778518677 -0.305348664522171 0.47962889075279236 0.8599505424499512 -0.1743827611207962 0.6945981383323669 0.5729519724845886 1 0.4937168061733246 0 0.006853099912405014 0 0.0 0 0.0 0.07297612726688385 1.460466742515564 -0.16172027587890625 0.5019684433937073 0.8640094995498657 0.03888057917356491 0.12038150429725647 0.0717666819691658 1 0.43864887952804565 0 0.0806228369474411 0 0.0 0 0.0 0.18949569761753082 1.3684693574905396 -0.2584112286567688 0.860957682132721 0.5083467960357666 0.01657155156135559 0.04436533525586128 0.12631487846374512 1 0.5081745386123657 0 0.03876670077443123 0 0.0 0 0.0 0.09474784880876541 1.4414864778518677 -0.305348664522171 0.47962889075279236 0.8599505424499512 -0.1743827611207962 0.04443186894059181 0.0578567311167717 1 0.4937168061733246 0 0.006853099912405014 0 0.0 0 0.0 0.04986967518925667 1.2690738439559937 -0.4816516935825348 0.4589068293571472 0.574968695640564 -0.6773278117179871 0.7414538264274597 0.31137514114379883 1 0.5935874581336975 0 0.0 0 0.0 0 0.0 0.0 1.3950845003128052 -0.45135900378227234 0.0 0.598864734172821 -0.8008362054824829 0.8172668218612671 0.41208434104919434 1 0.5343004465103149 0 0.0 0 0.0 0 0.0 0.06429819017648697 1.3896068334579468 -0.43792080879211426 0.3429059684276581 0.5780205726623535 -0.7404400706291199 0.7636973261833191 0.4662829637527466 1 0.532609224319458 0 0.0 0 0.0 0 0.0 0.0 1.4161217212677002 0.1510397493839264 0.0 0.9378948211669922 0.34690389037132263 0.28625792264938354 0.11215589195489883 0 0.4460723102092743 1 0.2005683183670044 2 0.000560328655410558 0 0.0 -0.058150164783000946 1.453392744064331 -0.0034714294597506523 -0.5017548203468323 0.843226432800293 0.19284646213054657 0.19909562170505524 0.09749332815408707 1 0.3855680227279663 0 0.2609920799732208 2 5.212068208493292e-05 0 0.0 -0.07297612726688385 1.3934298753738403 0.16687017679214478 -0.4526505470275879 0.8392895460128784 0.3011261224746704 0.27515244483947754 0.15112540125846863 0 0.46099191904067993 1 0.1663425862789154 2 0.00029648616327904165 0 0.0 -0.058150164783000946 1.453392744064331 -0.0034714294597506523 -0.5017548203468323 0.843226432800293 0.19284646213054657 0.19909562170505524 0.09749332815408707 1 0.3855680227279663 0 0.2609920799732208 2 5.212068208493292e-05 0 0.0 -0.1459522545337677 1.3888463973999023 -0.1359991729259491 -0.8357188701629639 0.5164341926574707 0.18662068247795105 0.11418572813272476 0.1270817071199417 1 0.4451029896736145 0 0.11861109733581543 0 0.0 0 0.0 -0.11630034446716309 1.385688066482544 0.011257962323725224 -0.8467971086502075 0.5172887444496155 0.12363047897815704 0.19177863001823425 0.14417126774787903 0 0.41010767221450806 1 0.3941728472709656 2 0.021439071744680405 0 0.0 -0.09474784880876541 1.4414864778518677 -0.305348664522171 -0.47962889075279236 0.8599505424499512 -0.1743827611207962 0.04443186894059181 0.0578567311167717 1 0.48631343245506287 0 0.006849147379398346 0 0.0 0 0.0 0.0 1.4864554405212402 -0.1874413788318634 0.0 0.999664306640625 -0.02554399147629738 0.12280824035406113 0.02889185957610607 1 0.42892152070999146 0 0.06715913861989975 0 0.0 0 0.0 0.0 1.4688720703125 -0.35228610038757324 0.0 0.9361552596092224 -0.35151219367980957 0.03984704613685608 0.00020304521603975445 1 0.5002522468566895 0 0.0 0 0.0 0 0.0 -0.17711219191551208 1.2111425399780273 -0.08284486830234528 -0.9780877232551575 0.07745597511529922 0.19315165281295776 0.11920919269323349 0.2266269475221634 1 0.6532512903213501 0 0.27260318398475647 2 0.0 0 0.0 -0.11630034446716309 1.385688066482544 0.011257962323725224 -0.8467971086502075 0.5172887444496155 0.12363047897815704 0.19177863001823425 0.14417126774787903 0 0.41010767221450806 1 0.3941728472709656 2 0.021439071744680405 0 0.0 -0.1459522545337677 1.3888463973999023 -0.1359991729259491 -0.8357188701629639 0.5164341926574707 0.18662068247795105 0.11418572813272476 0.1270817071199417 1 0.4451029896736145 0 0.11861109733581543 0 0.0 0 0.0 -0.17758521437644958 1.0509424209594727 -0.009452779777348042 -0.9080782532691956 -0.1265297383069992 -0.39918211102485657 0.13626915216445923 0.3208780884742737 0 0.7504675388336182 1 0.16131067276000977 9 0.05459078028798103 2 0.0 -0.15271435678005219 1.1326109170913696 -0.08103625476360321 -0.9580675959587097 -0.28070923686027527 0.05710013210773468 0.10731169581413269 0.2683471441268921 1 0.6775277256965637 0 0.479615181684494 2 0.0 0 0.0 -0.1329372525215149 1.081725835800171 -0.11218704283237457 -0.8476821184158325 -0.5233924388885498 -0.08630634844303131 0.08180608600378036 0.2900291383266449 1 0.7749943137168884 0 0.4033813774585724 0 0.0 0 0.0 -0.10067398101091385 0.9663213491439819 -0.08786684274673462 -0.712576687335968 -0.24292734265327454 -0.6581621766090393 0.06711860746145248 0.3559820055961609 0 0.6806139349937439 1 0.1954726278781891 9 0.04794127866625786 10 0.04703438654541969 -0.17548006772994995 0.9740344882011414 0.03773410618305206 -0.8627887964248657 -0.095828115940094 -0.49632251262664795 0.14806827902793884 0.3685593605041504 0 0.7296560406684875 9 0.13401056826114655 1 0.059292711317539215 10 0.025198591873049736 -0.17758521437644958 1.0509424209594727 -0.009452779777348042 -0.9080782532691956 -0.1265297383069992 -0.39918211102485657 0.13626915216445923 0.3208780884742737 0 0.7504675388336182 1 0.16131067276000977 9 0.05459078028798103 2 0.0 0.0 1.0181424617767334 -0.20196408033370972 0.0 -0.9700308442115784 -0.24283577501773834 0.8594119548797607 0.7608353495597839 1 0.9506118297576904 0 0.27259060740470886 0 0.0 0 0.0 -0.11636289954185486 1.018743872642517 -0.2921942174434662 -0.3807489275932312 -0.9202551245689392 0.09018219262361526 0.7902564406394958 0.7220689654350281 1 0.556355357170105 0 0.11100170016288757 0 0.0 0 0.0 0.0 1.0058256387710571 -0.31092268228530884 0.0 -0.999969482421875 0.0018921475857496262 0.8017098903656006 0.7843313217163086 1 0.5234434008598328 0 0.1049714908003807 0 0.0 0 0.0 0.0 1.0058256387710571 -0.31092268228530884 0.0 -0.999969482421875 0.0018921475857496262 0.8017098903656006 0.7843313217163086 1 0.5234434008598328 0 0.1049714908003807 0 0.0 0 0.0 -0.11636289954185486 1.0278944969177246 -0.36559149622917175 -0.35953855514526367 -0.9165623784065247 -0.1748405396938324 0.753631055355072 0.7329650521278381 1 0.48877400159835815 0 0.06049613654613495 0 0.0 0 0.0 0.0 1.0128729343414307 -0.41166767477989197 0.0 -0.9807122945785522 -0.19541001319885254 0.7478660345077515 0.8006981611251831 1 0.45380619168281555 0 0.0400310717523098 0 0.0 0 0.0 0.0 1.0128729343414307 -0.41166767477989197 0.0 -0.9807122945785522 -0.19541001319885254 0.7478660345077515 0.8006981611251831 1 0.45380619168281555 0 0.0400310717523098 0 0.0 0 0.0 -0.11636289954185486 1.0498738288879395 -0.43372729420661926 -0.37830743193626404 -0.8667256832122803 -0.3249916136264801 0.7156935930252075 0.7401500344276428 1 0.4748282730579376 0 0.015973743051290512 0 0.0 0 0.0 0.0 1.0367169380187988 -0.4998640716075897 0.0 -0.82528156042099 -0.5646839737892151 0.6987836360931396 0.8125174641609192 1 0.4652153253555298 0 0.0 0 0.0 0 0.0 0.0 1.0367169380187988 -0.4998640716075897 0.0 -0.82528156042099 -0.5646839737892151 0.6316680908203125 0.00020304521603975445 1 0.4652153253555298 0 0.0 0 0.0 0 0.0 -0.09310946613550186 1.0738946199417114 -0.5040848851203918 -0.31342509388923645 -0.7467879056930542 -0.5865352153778076 0.578464150428772 0.07731097936630249 1 0.49157246947288513 0 0.0 0 0.0 0 0.0 0.0 1.102358341217041 -0.5441152453422546 0.0 -0.5053865313529968 -0.8628803491592407 0.6952515840530396 0.0594245009124279 1 0.49531272053718567 0 0.0 0 0.0 0 0.0 -0.18949569761753082 1.3684693574905396 -0.2584112286567688 -0.860957682132721 0.5083467960357666 0.01657155156135559 0.5453251600265503 0.5488014817237854 1 0.4894542992115021 0 0.038765352219343185 0 0.0 0 0.0 -0.18102072179317474 1.268702745437622 -0.39696988463401794 -0.8454847931861877 0.23203222453594208 -0.48088014125823975 0.5643640756607056 0.39259523153305054 1 0.5556833148002625 0 0.0 0 0.0 0 0.0 -0.21954664587974548 1.2720890045166016 -0.26756638288497925 -0.9747001528739929 0.22016052901744843 -0.038422804325819016 0.4704653024673462 0.463824987411499 1 0.5544829368591309 0 0.05324206128716469 0 0.0 0 0.0 -0.21954664587974548 1.2720890045166016 -0.26756638288497925 -0.9747001528739929 0.22016052901744843 -0.038422804325819016 0.026100318878889084 0.1768089085817337 1 0.5544829368591309 0 0.05324206128716469 0 0.0 0 0.0 -0.1459522545337677 1.3888463973999023 -0.1359991729259491 -0.8357188701629639 0.5164341926574707 0.18662068247795105 0.11418572813272476 0.1270817071199417 1 0.4451029896736145 0 0.11861109733581543 0 0.0 0 0.0 -0.18949569761753082 1.3684693574905396 -0.2584112286567688 -0.860957682132721 0.5083467960357666 0.01657155156135559 0.04436533525586128 0.12631487846374512 1 0.4894542992115021 0 0.038765352219343185 0 0.0 0 0.0 0.0 1.0181424617767334 -0.20196408033370972 0.0 -0.9700308442115784 -0.24283577501773834 0.6893323659896851 0.9525341987609863 1 0.9506118297576904 0 0.27259060740470886 0 0.0 0 0.0 -0.10067398101091385 0.9663213491439819 -0.08786684274673462 -0.712576687335968 -0.24292734265327454 -0.6581621766090393 0.7870696783065796 0.8129236102104187 0 0.6806139349937439 1 0.1954726278781891 9 0.04794127866625786 10 0.04703438654541969 -0.09388621896505356 1.0232656002044678 -0.1361936777830124 -0.6617023348808289 -0.5929136276245117 -0.4588763117790222 0.7094021439552307 0.8353738784790039 1 0.7061814665794373 0 0.505308985710144 0 0.0 0 0.0 -0.17758521437644958 1.0509424209594727 -0.009452779777348042 -0.9080782532691956 -0.1265297383069992 -0.39918211102485657 0.13626915216445923 0.3208780884742737 0 0.7504675388336182 1 0.16131067276000977 9 0.05459078028798103 2 0.0 -0.23453930020332336 1.0399465560913086 0.12781919538974762 -0.9630115628242493 0.15222632884979248 -0.2221747487783432 0.2123546004295349 0.34633561968803406 0 0.7073097229003906 9 0.15077142417430878 1 0.04680754616856575 2 7.789886149112135e-05 -0.17734870314598083 1.1222507953643799 0.016492163762450218 -0.9736624956130981 0.07391583174467087 -0.21564379334449768 0.15870711207389832 0.2861701548099518 0 0.7400459051132202 1 0.20915496349334717 9 0.02171226218342781 2 0.0 -0.07297612726688385 1.3934298753738403 0.16687017679214478 -0.4526505470275879 0.8392895460128784 0.3011261224746704 0.27515244483947754 0.15112540125846863 0 0.46099191904067993 1 0.1663425862789154 2 0.00029648616327904165 0 0.0 0.0 1.3340036869049072 0.3454495668411255 0.0 0.8117618560791016 0.5839411616325378 0.3762849271297455 0.1762322634458542 0 0.15578706562519073 1 0.05526821315288544 2 0.030873998999595642 0 0.0 0.0 1.4161217212677002 0.1510397493839264 0.0 0.9378948211669922 0.34690389037132263 0.28625792264938354 0.11215589195489883 0 0.4460723102092743 1 0.2005683183670044 2 0.000560328655410558 0 0.0 0.0 1.3340036869049072 0.3454495668411255 0.0 0.8117618560791016 0.5839411616325378 0.3762849271297455 0.1762322634458542 0 0.15578706562519073 1 0.05526821315288544 2 0.030873998999595642 0 0.0 -0.08727402985095978 1.2957605123519897 0.34337759017944336 -0.4752952754497528 0.6862391829490662 0.5505844354629517 0.3502945005893707 0.2176021784543991 0 0.1636802703142166 2 0.05475941300392151 1 0.038439225405454636 0 0.0 -0.0650172010064125 1.190718173980713 0.442444771528244 -0.5703604221343994 0.43330180644989014 0.6977751851081848 0.4042886793613434 0.26924484968185425 2 0.034502845257520676 0 0.0 0 0.0 0 0.0 -0.1461862027645111 1.0710813999176025 0.3844836950302124 -0.808252215385437 0.17184972763061523 0.5631580352783203 0.3577803373336792 0.3372943699359894 0 0.205034539103508 9 0.10197971016168594 5 0.05613458901643753 2 0.02603248320519924 -0.06145928055047989 1.0601720809936523 0.5009114146232605 -0.7973570823669434 0.13812677562236786 0.5874508023262024 0.4337987005710602 0.340542733669281 2 0.09433535486459732 0 0.0 0 0.0 0 0.0 -0.0650172010064125 1.190718173980713 0.442444771528244 -0.5703604221343994 0.43330180644989014 0.6977751851081848 0.4042886793613434 0.26924484968185425 2 0.034502845257520676 0 0.0 0 0.0 0 0.0 -0.15384304523468018 0.9721025228500366 0.4255926311016083 -0.7845393419265747 0.012146366760134697 0.6199224591255188 0.37392598390579224 0.3897009491920471 0 0.2848208546638489 9 0.23368224501609802 5 0.17045892775058746 2 0.012886017560958862 0.0 0.857164740562439 0.5244574546813965 0.0 -0.2601702809333801 0.965544581413269 0.47005921602249146 0.45042261481285095 9 0.27887073159217834 5 0.27887073159217834 0 0.22324655950069427 2 0.006800635252147913 0.0 0.9691419005393982 0.525084912776947 0.0 -0.6431470513343811 0.765709400177002 0.47005921602249146 0.38950857520103455 3 0.08929336071014404 9 0.04753170534968376 5 0.04753170534968376 0 0.04456418380141258 -0.23453930020332336 1.0399465560913086 0.12781919538974762 -0.9630115628242493 0.15222632884979248 -0.2221747487783432 0.2123546004295349 0.34633561968803406 0 0.7073097229003906 9 0.15077142417430878 1 0.04680754616856575 2 7.789886149112135e-05 -0.27550312876701355 0.891650915145874 0.1857611984014511 -0.9843134880065918 0.15448468923568726 -0.08484145998954773 0.2322322577238083 0.43014711141586304 9 0.6623887419700623 0 0.23774738609790802 10 0.02405528351664543 2 0.014952762052416801 -0.23453930020332336 0.9702152013778687 0.2602241337299347 -0.922513484954834 0.1750236451625824 0.34394359588623047 0.278250515460968 0.390413373708725 0 0.4900068938732147 9 0.30810508131980896 2 0.017765844240784645 5 0.014790344052016735 -0.2174592912197113 1.1028785705566406 0.2627961039543152 -0.9561144113540649 0.17743460834026337 0.23300881683826447 0.28516799211502075 0.32168421149253845 0 0.5695722103118896 9 0.11019442975521088 2 0.033312100917100906 1 0.024461444467306137 -0.1459522545337677 1.3251063823699951 0.18270058929920197 -0.8204901218414307 0.5527207255363464 0.14572587609291077 0.2664920687675476 0.20125365257263184 0 0.5595225095748901 1 0.11560860276222229 2 0.00013760886213276535 0 0.0 -0.19893279671669006 1.1545631885528564 0.1498781144618988 -0.9536118507385254 0.28800317645072937 -0.0874660462141037 0.23297777771949768 0.28563162684440613 0 0.7194539904594421 1 0.08576151728630066 9 0.05332915112376213 2 0.03160868585109711 -0.2174592912197113 1.1028785705566406 0.2627961039543152 -0.9561144113540649 0.17743460834026337 0.23300881683826447 0.28516799211502075 0.32168421149253845 0 0.5695722103118896 9 0.11019442975521088 2 0.033312100917100906 1 0.024461444467306137 -0.17454805970191956 1.2118858098983765 0.34130558371543884 -0.8105410933494568 0.3488875925540924 0.47038179636001587 0.3298243582248688 0.2703784704208374 0 0.21865041553974152 2 0.06258596479892731 1 0.03174738213419914 9 0.02641637995839119 -0.1459522545337677 1.3251063823699951 0.18270058929920197 -0.8204901218414307 0.5527207255363464 0.14572587609291077 0.2664920687675476 0.20125365257263184 0 0.5595225095748901 1 0.11560860276222229 2 0.00013760886213276535 0 0.0 -0.1461862027645111 1.0710813999176025 0.3844836950302124 -0.808252215385437 0.17184972763061523 0.5631580352783203 0.3577803373336792 0.3372943699359894 0 0.205034539103508 9 0.10197971016168594 5 0.05613458901643753 2 0.02603248320519924 -0.23453930020332336 0.9702152013778687 0.2602241337299347 -0.922513484954834 0.1750236451625824 0.34394359588623047 0.278250515460968 0.390413373708725 0 0.4900068938732147 9 0.30810508131980896 2 0.017765844240784645 5 0.014790344052016735 -0.15384304523468018 0.9721025228500366 0.4255926311016083 -0.7845393419265747 0.012146366760134697 0.6199224591255188 0.37392598390579224 0.3897009491920471 0 0.2848208546638489 9 0.23368224501609802 5 0.17045892775058746 2 0.012886017560958862 -0.28093862533569336 0.5757372379302979 0.21273201704025269 -0.9537339210510254 -0.05871761217713356 0.2947782874107361 0.23695819079875946 0.5966961979866028 10 0.7957403063774109 9 0.1119142398238182 11 0.07978744059801102 0 0.0 -0.19692060351371765 0.6521245837211609 0.3191433846950531 -0.23175756633281708 -0.5444197058677673 0.8061159253120422 0.31354808807373047 0.5612506866455078 9 0.6037588119506836 10 0.246835857629776 5 0.06982867419719696 0 0.037357356399297714 -0.27312296628952026 0.7278225421905518 0.2726402282714844 -0.8949247598648071 -0.053621020168066025 0.442945659160614 0.2700149416923523 0.5173874497413635 9 0.5454464554786682 10 0.39267075061798096 0 0.01460160594433546 0 0.0 -0.2720791697502136 0.7299654483795166 0.11808101087808609 -0.9231238961219788 0.09189122915267944 -0.3733329176902771 0.19017235934734344 0.5118117332458496 9 0.7446416020393372 10 0.1995791345834732 0 0.022359486669301987 0 0.0 -0.28093862533569336 0.5757372379302979 0.21273201704025269 -0.9537339210510254 -0.05871761217713356 0.2947782874107361 0.23695819079875946 0.5966961979866028 10 0.7957403063774109 9 0.1119142398238182 11 0.07978744059801102 0 0.0 -0.27312296628952026 0.7278225421905518 0.2726402282714844 -0.8949247598648071 -0.053621020168066025 0.442945659160614 0.2700149416923523 0.5173874497413635 9 0.5454464554786682 10 0.39267075061798096 0 0.01460160594433546 0 0.0 -0.18157455325126648 0.6501905918121338 0.005674920976161957 -0.335276335477829 -0.02075258642435074 -0.9418622255325317 0.10874716937541962 0.547910213470459 10 0.7585892677307129 9 0.17383593320846558 0 0.0 0 0.0 -0.26951444149017334 0.581256628036499 0.0984039455652237 -0.9248329401016235 0.04589983820915222 -0.37754449248313904 0.17511127889156342 0.5908189415931702 10 0.8896211981773376 11 0.05666887387633324 9 0.0470425970852375 0 0.0 -0.2720791697502136 0.7299654483795166 0.11808101087808609 -0.9231238961219788 0.09189122915267944 -0.3733329176902771 0.19017235934734344 0.5118117332458496 9 0.7446416020393372 10 0.1995791345834732 0 0.022359486669301987 0 0.0 -0.27883782982826233 0.4228806495666504 0.18713346123695374 -0.938962996006012 -0.1031220406293869 0.32813501358032227 0.219543918967247 0.6785994172096252 11 0.8290210962295532 10 0.15059085190296173 0 0.0 0 0.0 -0.23106297850608826 0.49126142263412476 0.25890085101127625 -0.01269569993019104 -0.28205206990242004 0.9592882990837097 0.26937639713287354 0.6458678245544434 10 0.7228800058364868 11 0.17418056726455688 9 0.08285880833864212 0 0.0 -0.28093862533569336 0.5757372379302979 0.21273201704025269 -0.9537339210510254 -0.05871761217713356 0.2947782874107361 0.23695819079875946 0.5966961979866028 10 0.7957403063774109 9 0.1119142398238182 11 0.07978744059801102 0 0.0 -0.2707471251487732 0.4457245469093323 0.09905719757080078 -0.9538865089416504 0.043977171182632446 -0.29688405990600586 0.17186789214611053 0.6645772457122803 11 0.9251940250396729 10 0.06983630359172821 0 0.0 0 0.0 -0.28093862533569336 0.5757372379302979 0.21273201704025269 -0.9537339210510254 -0.05871761217713356 0.2947782874107361 0.23695819079875946 0.5966961979866028 10 0.7957403063774109 9 0.1119142398238182 11 0.07978744059801102 0 0.0 -0.26951444149017334 0.581256628036499 0.0984039455652237 -0.9248329401016235 0.04589983820915222 -0.37754449248313904 0.17511127889156342 0.5908189415931702 10 0.8896211981773376 11 0.05666887387633324 9 0.0470425970852375 0 0.0 -0.20572468638420105 0.5131307244300842 -0.0020905807614326477 -0.2683492600917816 -0.022766808047890663 -0.9630420804023743 0.10834519565105438 0.6240481734275818 10 0.8090380430221558 11 0.16335545480251312 0 0.0 0 0.0 -0.2707471251487732 0.4457245469093323 0.09905719757080078 -0.9538865089416504 0.043977171182632446 -0.29688405990600586 0.17186789214611053 0.6645772457122803 11 0.9251940250396729 10 0.06983630359172821 0 0.0 0 0.0 -0.26951444149017334 0.581256628036499 0.0984039455652237 -0.9248329401016235 0.04589983820915222 -0.37754449248313904 0.17511127889156342 0.5908189415931702 10 0.8896211981773376 11 0.05666887387633324 9 0.0470425970852375 0 0.0 -0.2784595489501953 0.2965812683105469 0.1400669515132904 -0.9597155451774597 -0.10385448485612869 0.2609942853450775 0.19252367317676544 0.7464392781257629 11 0.967033863067627 0 0.0 0 0.0 0 0.0 -0.22996719181537628 0.3549819588661194 0.21869893372058868 -0.035431988537311554 -0.23514512181282043 0.9713125824928284 0.24566324055194855 0.7194404006004333 11 0.8741137981414795 10 0.10180453956127167 0 0.0 0 0.0 -0.27883782982826233 0.4228806495666504 0.18713346123695374 -0.938962996006012 -0.1031220406293869 0.32813501358032227 0.219543918967247 0.6785994172096252 11 0.8290210962295532 10 0.15059085190296173 0 0.0 0 0.0 -0.2707471251487732 0.4457245469093323 0.09905719757080078 -0.9538865089416504 0.043977171182632446 -0.29688405990600586 0.17186789214611053 0.6645772457122803 11 0.9251940250396729 10 0.06983630359172821 0 0.0 0 0.0 -0.2784595489501953 0.2965812683105469 0.1400669515132904 -0.9597155451774597 -0.10385448485612869 0.2609942853450775 0.19252367317676544 0.7464392781257629 11 0.967033863067627 0 0.0 0 0.0 0 0.0 -0.27883782982826233 0.4228806495666504 0.18713346123695374 -0.938962996006012 -0.1031220406293869 0.32813501358032227 0.219543918967247 0.6785994172096252 11 0.8290210962295532 10 0.15059085190296173 0 0.0 0 0.0 -0.22422879934310913 0.414276123046875 0.015284525230526924 -0.3885311484336853 0.034516435116529465 -0.9207739233970642 0.11860677599906921 0.6787413358688354 11 0.9109067320823669 10 0.0850052610039711 0 0.0 0 0.0 -0.27060168981552124 0.31022095680236816 0.05954404175281525 -0.9107333421707153 0.04211554303765297 -0.4108096659183502 0.1486281454563141 0.7380485534667969 11 0.9850865006446838 0 0.0 0 0.0 0 0.0 -0.2707471251487732 0.4457245469093323 0.09905719757080078 -0.9538865089416504 0.043977171182632446 -0.29688405990600586 0.17186789214611053 0.6645772457122803 11 0.9251940250396729 10 0.06983630359172821 0 0.0 0 0.0 -0.27068033814430237 0.17515099048614502 0.10558918118476868 -0.9747001528739929 -0.030365917831659317 0.2213507443666458 0.17252767086029053 0.8140662312507629 11 0.8328282237052917 12 0.16480152308940887 0 0.0 0 0.0 -0.2353973239660263 0.23234236240386963 0.17769855260849 -0.2641071677207947 -0.28104496002197266 0.922605037689209 0.21930597722530365 0.7849949598312378 11 0.9059193730354309 12 0.08363302052021027 0 0.0 0 0.0 -0.2784595489501953 0.2965812683105469 0.1400669515132904 -0.9597155451774597 -0.10385448485612869 0.2609942853450775 0.19252367317676544 0.7464392781257629 11 0.967033863067627 0 0.0 0 0.0 0 0.0 -0.27060168981552124 0.31022095680236816 0.05954404175281525 -0.9107333421707153 0.04211554303765297 -0.4108096659183502 0.1486281454563141 0.7380485534667969 11 0.9850865006446838 0 0.0 0 0.0 0 0.0 -0.27068033814430237 0.17515099048614502 0.10558918118476868 -0.9747001528739929 -0.030365917831659317 0.2213507443666458 0.17252767086029053 0.8140662312507629 11 0.8328282237052917 12 0.16480152308940887 0 0.0 0 0.0 -0.2784595489501953 0.2965812683105469 0.1400669515132904 -0.9597155451774597 -0.10385448485612869 0.2609942853450775 0.19252367317676544 0.7464392781257629 11 0.967033863067627 0 0.0 0 0.0 0 0.0 -0.21422770619392395 0.2696647644042969 0.002181949093937874 -0.03393658250570297 0.06097598373889923 -0.9975585341453552 0.10336703807115555 0.7562169432640076 11 0.95918208360672 12 0.02208760753273964 0 0.0 0 0.0 -0.2632824182510376 0.192702054977417 0.030293196439743042 -0.8633686304092407 0.13098543882369995 -0.48722800612449646 0.129202738404274 0.8032676577568054 11 0.8625421524047852 12 0.13671983778476715 0 0.0 0 0.0 -0.27060168981552124 0.31022095680236816 0.05954404175281525 -0.9107333421707153 0.04211554303765297 -0.4108096659183502 0.1486281454563141 0.7380485534667969 11 0.9850865006446838 0 0.0 0 0.0 0 0.0 -0.16467930376529694 0.764995813369751 -0.0035517215728759766 -0.6215704679489136 -0.09994811564683914 -0.7769402265548706 0.10110408067703247 0.4813825190067291 10 0.42210859060287476 9 0.36726126074790955 0 0.15537990629673004 0 0.0 -0.2720791697502136 0.7299654483795166 0.11808101087808609 -0.9231238961219788 0.09189122915267944 -0.3733329176902771 0.19017235934734344 0.5118117332458496 9 0.7446416020393372 10 0.1995791345834732 0 0.022359486669301987 0 0.0 -0.27550312876701355 0.891650915145874 0.1857611984014511 -0.9843134880065918 0.15448468923568726 -0.08484145998954773 0.2322322577238083 0.43014711141586304 9 0.6623887419700623 0 0.23774738609790802 10 0.02405528351664543 2 0.014952762052416801 -0.27550312876701355 0.891650915145874 0.1857611984014511 -0.9843134880065918 0.15448468923568726 -0.08484145998954773 0.2322322577238083 0.43014711141586304 9 0.6623887419700623 0 0.23774738609790802 10 0.02405528351664543 2 0.014952762052416801 -0.27312296628952026 0.7278225421905518 0.2726402282714844 -0.8949247598648071 -0.053621020168066025 0.442945659160614 0.2700149416923523 0.5173874497413635 9 0.5454464554786682 10 0.39267075061798096 0 0.01460160594433546 0 0.0 -0.22658583521842957 0.8450055122375488 0.3317200243473053 -0.7574999332427979 0.09625537693500519 0.6456496119499207 0.3105680048465729 0.4587601125240326 9 0.6072814464569092 0 0.1840784102678299 10 0.09625955671072006 5 0.06495034694671631 -0.22658583521842957 0.8450055122375488 0.3317200243473053 -0.7574999332427979 0.09625537693500519 0.6456496119499207 0.3105680048465729 0.4587601125240326 9 0.6072814464569092 0 0.1840784102678299 10 0.09625955671072006 5 0.06495034694671631 -0.19692060351371765 0.6521245837211609 0.3191433846950531 -0.23175756633281708 -0.5444197058677673 0.8061159253120422 0.31354808807373047 0.5612506866455078 9 0.6037588119506836 10 0.246835857629776 5 0.06982867419719696 0 0.037357356399297714 -0.0700145810842514 0.7434864640235901 0.4208555817604065 -0.34348583221435547 -0.5904721021652222 0.730277419090271 0.4059433937072754 0.5164225101470947 5 0.3594251573085785 0 0.33582305908203125 9 0.23320455849170685 10 0.009845860302448273 -0.23453930020332336 0.9702152013778687 0.2602241337299347 -0.922513484954834 0.1750236451625824 0.34394359588623047 0.278250515460968 0.390413373708725 0 0.4900068938732147 9 0.30810508131980896 2 0.017765844240784645 5 0.014790344052016735 -0.22658583521842957 0.8450055122375488 0.3317200243473053 -0.7574999332427979 0.09625537693500519 0.6456496119499207 0.3105680048465729 0.4587601125240326 9 0.6072814464569092 0 0.1840784102678299 10 0.09625955671072006 5 0.06495034694671631 -0.14257946610450745 0.8637868762016296 0.4032813608646393 -0.6905118227005005 -0.1661732792854309 0.7039399147033691 0.36863672733306885 0.4478047788143158 9 0.4740718901157379 0 0.22005127370357513 5 0.13825324177742004 10 0.05140248313546181 -0.15384304523468018 0.9721025228500366 0.4255926311016083 -0.7845393419265747 0.012146366760134697 0.6199224591255188 0.37392598390579224 0.3897009491920471 0 0.2848208546638489 9 0.23368224501609802 5 0.17045892775058746 2 0.012886017560958862 -0.14257946610450745 0.8637868762016296 0.4032813608646393 -0.6905118227005005 -0.1661732792854309 0.7039399147033691 0.36863672733306885 0.4478047788143158 9 0.4740718901157379 0 0.22005127370357513 5 0.13825324177742004 10 0.05140248313546181 0.0 0.857164740562439 0.5244574546813965 0.0 -0.2601702809333801 0.965544581413269 0.47005921602249146 0.45042261481285095 9 0.27887073159217834 5 0.27887073159217834 0 0.22324655950069427 2 0.006800635252147913 -0.0700145810842514 0.7434864640235901 0.4208555817604065 -0.34348583221435547 -0.5904721021652222 0.730277419090271 0.4059433937072754 0.5164225101470947 5 0.3594251573085785 0 0.33582305908203125 9 0.23320455849170685 10 0.009845860302448273 -0.14257946610450745 0.8637868762016296 0.4032813608646393 -0.6905118227005005 -0.1661732792854309 0.7039399147033691 0.36863672733306885 0.4478047788143158 9 0.4740718901157379 0 0.22005127370357513 5 0.13825324177742004 10 0.05140248313546181 -0.22658583521842957 0.8450055122375488 0.3317200243473053 -0.7574999332427979 0.09625537693500519 0.6456496119499207 0.3105680048465729 0.4587601125240326 9 0.6072814464569092 0 0.1840784102678299 10 0.09625955671072006 5 0.06495034694671631 0.0 0.956256628036499 0.9388030171394348 0.0 0.9941099286079407 0.10831019282341003 0.9283884763717651 0.3782193958759308 4 0.9637963771820068 3 0.022601444274187088 0 0.0 0 0.0 -0.04179486632347107 0.9364920258522034 0.7827037572860718 -0.99993896484375 -0.010345774702727795 0.00030518509447574615 0.8751721382141113 0.30800822377204895 3 0.9776166081428528 4 0.0011483989655971527 0 0.0 0 0.0 -0.04524477198719978 0.9055635929107666 0.9612237811088562 -0.99981689453125 -0.011352885514497757 -0.013397625647485256 0.8992534875869751 0.4032728672027588 4 0.9947757124900818 0 0.0 0 0.0 0 0.0 0.0 0.8555480241775513 0.9201857447624207 0.0 -0.9908444285392761 -0.1347697377204895 0.8575089573860168 0.39543601870536804 4 0.9604564309120178 3 0.029231343418359756 0 0.0 0 0.0 -0.04179486632347107 0.9364920258522034 0.7827037572860718 -0.99993896484375 -0.010345774702727795 0.00030518509447574615 0.8751721382141113 0.30800822377204895 3 0.9776166081428528 4 0.0011483989655971527 0 0.0 0 0.0 0.0 0.8914740085601807 0.7481175661087036 0.0 -0.9678640365600586 -0.25135043263435364 0.8374303579330444 0.3030059337615967 3 0.9701143503189087 0 0.0 0 0.0 0 0.0 -0.043747562915086746 0.9720137119293213 0.6651729345321655 -0.9987487196922302 -0.040162358433008194 0.028748435899615288 0.8648558259010315 0.24106882512569427 3 0.904050886631012 2 0.09398713707923889 0 0.0 0 0.0 0.0 0.9917649626731873 0.767984926700592 0.0 0.9606006145477295 0.2778710424900055 0.9070184826850891 0.2867380976676941 3 0.9851999282836914 0 0.0 0 0.0 0 0.0 0.0 1.0387544631958008 0.6412699818611145 0.0 0.8650471568107605 0.5016327500343323 0.9012990593910217 0.21379756927490234 2 0.7522167563438416 3 0.18018202483654022 0 0.0 0 0.0 0.0 0.8914740085601807 0.7481175661087036 0.0 -0.9678640365600586 -0.25135043263435364 0.8374303579330444 0.3030059337615967 3 0.9701143503189087 0 0.0 0 0.0 0 0.0 -0.043747562915086746 0.9720137119293213 0.6651729345321655 -0.9987487196922302 -0.040162358433008194 0.028748435899615288 0.8648558259010315 0.24106882512569427 3 0.904050886631012 2 0.09398713707923889 0 0.0 0 0.0 0.0 0.9395209550857544 0.5993262529373169 0.0 -0.9361247420310974 -0.35163426399230957 0.8234695196151733 0.2191833257675171 3 0.5215328335762024 2 0.47024640440940857 0 0.0 0 0.0 0.0 0.9691419005393982 0.525084912776947 0.0 -0.6431470513343811 0.765709400177002 0.8176729083061218 0.17667889595031738 3 0.08929336071014404 9 0.04753170534968376 5 0.04753170534968376 0 0.04456418380141258 -0.043747562915086746 0.9720137119293213 0.6651729345321655 -0.9987487196922302 -0.040162358433008194 0.028748435899615288 0.8648558259010315 0.24106882512569427 3 0.904050886631012 2 0.09398713707923889 0 0.0 0 0.0 -0.06145928055047989 1.0601720809936523 0.5009114146232605 -0.7973570823669434 0.13812677562236786 0.5874508023262024 0.8645750880241394 0.13949787616729736 2 0.09433535486459732 0 0.0 0 0.0 0 0.0 0.0 1.0387544631958008 0.6412699818611145 0.0 0.8650471568107605 0.5016327500343323 0.9012990593910217 0.21379756927490234 2 0.7522167563438416 3 0.18018202483654022 0 0.0 0 0.0 -0.06145928055047989 1.0601720809936523 0.5009114146232605 -0.7973570823669434 0.13812677562236786 0.5874508023262024 0.8645750880241394 0.13949787616729736 2 0.09433535486459732 0 0.0 0 0.0 0 0.0 -0.043747562915086746 0.9720137119293213 0.6651729345321655 -0.9987487196922302 -0.040162358433008194 0.028748435899615288 0.8648558259010315 0.24106882512569427 3 0.904050886631012 2 0.09398713707923889 0 0.0 0 0.0 0.0 1.0994129180908203 0.5527057647705078 0.0 0.6721396446228027 0.7404095530509949 0.9092386364936829 0.15684354305267334 2 0.008453886024653912 0 0.0 0 0.0 0 0.0 -0.0650172010064125 1.190718173980713 0.442444771528244 -0.5703604221343994 0.43330180644989014 0.6977751851081848 0.9024972915649414 0.07288584858179092 2 0.034502845257520676 0 0.0 0 0.0 0 0.0 -0.06145928055047989 1.0601720809936523 0.5009114146232605 -0.7973570823669434 0.13812677562236786 0.5874508023262024 0.8645750880241394 0.13949787616729736 2 0.09433535486459732 0 0.0 0 0.0 0 0.0 0.0 1.3340036869049072 0.3454495668411255 0.0 0.8117618560791016 0.5839411616325378 0.969742476940155 0.00020304521603975445 0 0.15578706562519073 1 0.05526821315288544 2 0.030873998999595642 0 0.0 -0.0650172010064125 1.190718173980713 0.442444771528244 -0.5703604221343994 0.43330180644989014 0.6977751851081848 0.9024972915649414 0.07288584858179092 2 0.034502845257520676 0 0.0 0 0.0 0 0.0 0.0 1.2170524597167969 0.4608973264694214 0.0 0.6628314852714539 0.748741090297699 0.9399983286857605 0.08305945992469788 2 0.008227117359638214 0 0.0 0 0.0 0 0.0 0.0 0.8668436408042908 1.1575727462768555 0.0 -0.9759819507598877 0.21778008341789246 0.9091423749923706 0.51222825050354 4 0.9999624490737915 0 0.0 0 0.0 0 0.0 -0.05299364775419235 0.9086697101593018 1.127077579498291 -0.9984740614891052 0.004181035794317722 0.05499435216188431 0.9316335320472717 0.4823167026042938 4 0.9999160170555115 0 0.0 0 0.0 0 0.0 0.0 0.8515796661376953 1.0820811986923218 0.0 -0.9989928603172302 0.04452650621533394 0.8863584995269775 0.47759830951690674 4 0.9997074007987976 0 0.0 0 0.0 0 0.0 -0.05299364775419235 0.9086697101593018 1.127077579498291 -0.9984740614891052 0.004181035794317722 0.05499435216188431 0.9316335320472717 0.4823167026042938 4 0.9999160170555115 0 0.0 0 0.0 0 0.0 0.0 0.9566136598587036 1.1525006294250488 0.0 0.999267578125 0.03787346929311752 0.969742476940155 0.4851236343383789 4 0.9999452829360962 0 0.0 0 0.0 0 0.0 0.0 0.9533488154411316 1.0950424671173096 0.0 0.9988097548484802 -0.048158206045627594 0.9595854878425598 0.4558004140853882 4 0.9995507597923279 0 0.0 0 0.0 0 0.0 -0.04474841430783272 0.9156687259674072 1.1921391487121582 -0.9490646123886108 0.0554216131567955 0.3100985884666443 0.9444119334220886 0.5085054636001587 4 0.9999980926513672 0 0.0 0 0.0 0 0.0 0.0 0.9405403137207031 1.2368535995483398 0.0 0.5934019088745117 0.8048951625823975 0.9683864712715149 0.5302330851554871 4 0.9999966025352478 0 0.0 0 0.0 0 0.0 0.0 0.9566136598587036 1.1525006294250488 0.0 0.999267578125 0.03787346929311752 0.969742476940155 0.4851236343383789 4 0.9999452829360962 0 0.0 0 0.0 0 0.0 0.0 0.8668436408042908 1.1575727462768555 0.0 -0.9759819507598877 0.21778008341789246 0.9091423749923706 0.51222825050354 4 0.9999624490737915 0 0.0 0 0.0 0 0.0 0.0 0.886214554309845 1.234582543373108 0.0 -0.6190374493598938 0.7853327989578247 0.9404031038284302 0.540774941444397 4 0.9999971985816956 0 0.0 0 0.0 0 0.0 -0.04474841430783272 0.9156687259674072 1.1921391487121582 -0.9490646123886108 0.0554216131567955 0.3100985884666443 0.9444119334220886 0.5085054636001587 4 0.9999980926513672 0 0.0 0 0.0 0 0.0 -0.11636289954185486 1.0498738288879395 -0.43372729420661926 -0.37830743193626404 -0.8667256832122803 -0.3249916136264801 0.7156935930252075 0.7401500344276428 1 0.4748282730579376 0 0.015973743051290512 0 0.0 0 0.0 -0.18298302590847015 1.0755360126495361 -0.3897135853767395 -0.8033387064933777 -0.5719473958015442 -0.16568498313426971 0.7276731133460999 0.6964173316955566 1 0.5155777931213379 0 0.02516910806298256 0 0.0 0 0.0 -0.18298302590847015 1.097515344619751 -0.457849383354187 -0.8365123271942139 -0.36155277490615845 -0.4116947054862976 0.6893323659896851 0.7009080648422241 1 0.5168794393539429 0 0.0 0 0.0 0 0.0 -0.09310946613550186 1.0738946199417114 -0.5040848851203918 -0.31342509388923645 -0.7467879056930542 -0.5865352153778076 0.578464150428772 0.07731097936630249 1 0.49157246947288513 0 0.0 0 0.0 0 0.0 -0.18298302590847015 1.097515344619751 -0.457849383354187 -0.8365123271942139 -0.36155277490615845 -0.4116947054862976 0.5151460766792297 0.1754748821258545 1 0.5168794393539429 0 0.0 0 0.0 0 0.0 -0.11392863094806671 1.1170620918273926 -0.5390962958335876 -0.45652636885643005 -0.3259071707725525 -0.8278450965881348 0.6125847101211548 0.13550977408885956 1 0.5383314490318298 0 0.0 0 0.0 0 0.0 -0.15271435678005219 1.1326109170913696 -0.08103625476360321 -0.9580675959587097 -0.28070923686027527 0.05710013210773468 0.8785715699195862 0.6217155456542969 1 0.6775277256965637 0 0.479615181684494 2 0.0 0 0.0 -0.19168177247047424 1.123900294303894 -0.138879656791687 -0.8033081889152527 -0.43974119424819946 0.40159305930137634 0.841719388961792 0.630566418170929 1 0.7599913477897644 0 0.21201929450035095 0 0.0 0 0.0 -0.1329372525215149 1.081725835800171 -0.11218704283237457 -0.8476821184158325 -0.5233924388885498 -0.08630634844303131 0.8733172416687012 0.657466471195221 1 0.7749943137168884 0 0.4033813774585724 0 0.0 0 0.0 -0.19893279671669006 1.1545631885528564 0.1498781144618988 -0.9536118507385254 0.28800317645072937 -0.0874660462141037 0.23297777771949768 0.28563162684440613 0 0.7194539904594421 1 0.08576151728630066 9 0.05332915112376213 2 0.03160868585109711 -0.17734870314598083 1.1222507953643799 0.016492163762450218 -0.9736624956130981 0.07391583174467087 -0.21564379334449768 0.15870711207389832 0.2861701548099518 0 0.7400459051132202 1 0.20915496349334717 9 0.02171226218342781 2 0.0 -0.23453930020332336 1.0399465560913086 0.12781919538974762 -0.9630115628242493 0.15222632884979248 -0.2221747487783432 0.2123546004295349 0.34633561968803406 0 0.7073097229003906 9 0.15077142417430878 1 0.04680754616856575 2 7.789886149112135e-05 -0.2077341377735138 1.1319550275802612 -0.30893459916114807 -0.963957667350769 -0.23200170695781708 -0.13016144931316376 0.7566397786140442 0.6517723798751831 1 0.6343690752983093 0 0.06386665999889374 0 0.0 0 0.0 -0.18298302590847015 1.0663853883743286 -0.31631630659103394 -0.7708975672721863 -0.6364635229110718 0.02456739917397499 0.7648314833641052 0.6872797608375549 1 0.5752794146537781 0 0.07986343652009964 0 0.0 0 0.0 -0.19168177247047424 1.1063168048858643 -0.18283823132514954 -0.7293313145637512 -0.6620075106620789 0.17261269688606262 0.8232441544532776 0.6466988325119019 1 0.7561824321746826 0 0.16079038381576538 0 0.0 0 0.0 -0.240505188703537 1.1706992387771606 -0.23119430243968964 -0.9902951121330261 -0.1357768476009369 0.029206212610006332 0.7882214188575745 0.6180115342140198 1 0.6814895868301392 0 0.09690888226032257 0 0.0 0 0.0 -0.19168177247047424 1.1063168048858643 -0.18283823132514954 -0.7293313145637512 -0.6620075106620789 0.17261269688606262 0.8232441544532776 0.6466988325119019 1 0.7561824321746826 0 0.16079038381576538 0 0.0 0 0.0 -0.19168177247047424 1.123900294303894 -0.138879656791687 -0.8033081889152527 -0.43974119424819946 0.40159305930137634 0.841719388961792 0.630566418170929 1 0.7599913477897644 0 0.21201929450035095 0 0.0 0 0.0 -0.17711219191551208 1.2111425399780273 -0.08284486830234528 -0.9780877232551575 0.07745597511529922 0.19315165281295776 0.8621803522109985 0.5771147608757019 1 0.6532512903213501 0 0.27260318398475647 2 0.0 0 0.0 -0.240505188703537 1.1706992387771606 -0.23119430243968964 -0.9902951121330261 -0.1357768476009369 0.029206212610006332 0.7882214188575745 0.6180115342140198 1 0.6814895868301392 0 0.09690888226032257 0 0.0 0 0.0 -0.19168177247047424 1.123900294303894 -0.138879656791687 -0.8033081889152527 -0.43974119424819946 0.40159305930137634 0.841719388961792 0.630566418170929 1 0.7599913477897644 0 0.21201929450035095 0 0.0 0 0.0 -0.18298302590847015 1.0755360126495361 -0.3897135853767395 -0.8033387064933777 -0.5719473958015442 -0.16568498313426971 0.7276731133460999 0.6964173316955566 1 0.5155777931213379 0 0.02516910806298256 0 0.0 0 0.0 -0.19536322355270386 1.1583302021026611 -0.38174155354499817 -0.9667958617210388 0.013214514590799809 -0.2551042139530182 0.7145208716392517 0.653191328048706 1 0.597184419631958 0 0.0194740928709507 0 0.0 0 0.0 -0.18298302590847015 1.097515344619751 -0.457849383354187 -0.8365123271942139 -0.36155277490615845 -0.4116947054862976 0.6893323659896851 0.7009080648422241 1 0.5168794393539429 0 0.0 0 0.0 0 0.0 -0.2077341377735138 1.1319550275802612 -0.30893459916114807 -0.963957667350769 -0.23200170695781708 -0.13016144931316376 0.7566397786140442 0.6517723798751831 1 0.6343690752983093 0 0.06386665999889374 0 0.0 0 0.0 -0.21954664587974548 1.2720890045166016 -0.26756638288497925 -0.9747001528739929 0.22016052901744843 -0.038422804325819016 0.7538788914680481 0.5733580589294434 1 0.5544829368591309 0 0.05324206128716469 0 0.0 0 0.0 -0.19536322355270386 1.1583302021026611 -0.38174155354499817 -0.9667958617210388 0.013214514590799809 -0.2551042139530182 0.7145208716392517 0.653191328048706 1 0.597184419631958 0 0.0194740928709507 0 0.0 0 0.0 -0.18298302590847015 1.097515344619751 -0.457849383354187 -0.8365123271942139 -0.36155277490615845 -0.4116947054862976 0.5151460766792297 0.1754748821258545 1 0.5168794393539429 0 0.0 0 0.0 0 0.0 -0.1287733018398285 1.2108771800994873 -0.5207679867744446 -0.6269417405128479 0.4066286087036133 -0.6644794940948486 0.6418904066085815 0.2361043244600296 1 0.5891550183296204 0 0.0 0 0.0 0 0.0 -0.11392863094806671 1.1170620918273926 -0.5390962958335876 -0.45652636885643005 -0.3259071707725525 -0.8278450965881348 0.6125847101211548 0.13550977408885956 1 0.5383314490318298 0 0.0 0 0.0 0 0.0 -0.1329372525215149 1.081725835800171 -0.11218704283237457 -0.8476821184158325 -0.5233924388885498 -0.08630634844303131 0.8733172416687012 0.657466471195221 1 0.7749943137168884 0 0.4033813774585724 0 0.0 0 0.0 -0.19168177247047424 1.1063168048858643 -0.18283823132514954 -0.7293313145637512 -0.6620075106620789 0.17261269688606262 0.8232441544532776 0.6466988325119019 1 0.7561824321746826 0 0.16079038381576538 0 0.0 0 0.0 -0.11636289954185486 1.053910732269287 -0.19108946621418 -0.5185399651527405 -0.8486281633377075 0.10443434119224548 0.8408097624778748 0.693621814250946 1 0.8277724981307983 0 0.24267315864562988 0 0.0 0 0.0 -0.11636289954185486 1.0278944969177246 -0.36559149622917175 -0.35953855514526367 -0.9165623784065247 -0.1748405396938324 0.753631055355072 0.7329650521278381 1 0.48877400159835815 0 0.06049613654613495 0 0.0 0 0.0 -0.18298302590847015 1.0663853883743286 -0.31631630659103394 -0.7708975672721863 -0.6364635229110718 0.02456739917397499 0.7648314833641052 0.6872797608375549 1 0.5752794146537781 0 0.07986343652009964 0 0.0 0 0.0 -0.18298302590847015 1.0755360126495361 -0.3897135853767395 -0.8033387064933777 -0.5719473958015442 -0.16568498313426971 0.7276731133460999 0.6964173316955566 1 0.5155777931213379 0 0.02516910806298256 0 0.0 0 0.0 0.0 0.9691419005393982 0.525084912776947 0.0 -0.6431470513343811 0.765709400177002 0.47005921602249146 0.38950857520103455 3 0.08929336071014404 9 0.04753170534968376 5 0.04753170534968376 0 0.04456418380141258 -0.06145928055047989 1.0601720809936523 0.5009114146232605 -0.7973570823669434 0.13812677562236786 0.5874508023262024 0.4337987005710602 0.340542733669281 2 0.09433535486459732 0 0.0 0 0.0 0 0.0 -0.15384304523468018 0.9721025228500366 0.4255926311016083 -0.7845393419265747 0.012146366760134697 0.6199224591255188 0.37392598390579224 0.3897009491920471 0 0.2848208546638489 9 0.23368224501609802 5 0.17045892775058746 2 0.012886017560958862 -0.11636289954185486 1.053910732269287 -0.19108946621418 -0.5185399651527405 -0.8486281633377075 0.10443434119224548 0.8408097624778748 0.693621814250946 1 0.8277724981307983 0 0.24267315864562988 0 0.0 0 0.0 -0.18298302590847015 1.0663853883743286 -0.31631630659103394 -0.7708975672721863 -0.6364635229110718 0.02456739917397499 0.7648314833641052 0.6872797608375549 1 0.5752794146537781 0 0.07986343652009964 0 0.0 0 0.0 -0.11636289954185486 1.018743872642517 -0.2921942174434662 -0.3807489275932312 -0.9202551245689392 0.09018219262361526 0.7902564406394958 0.7220689654350281 1 0.556355357170105 0 0.11100170016288757 0 0.0 0 0.0 0.0 0.857164740562439 0.5244574546813965 0.0 -0.2601702809333801 0.965544581413269 0.47005921602249146 0.45042261481285095 9 0.27887073159217834 5 0.27887073159217834 0 0.22324655950069427 2 0.006800635252147913 -0.0700145810842514 0.7434864640235901 0.4208555817604065 -0.34348583221435547 -0.5904721021652222 0.730277419090271 0.4059433937072754 0.5164225101470947 5 0.3594251573085785 0 0.33582305908203125 9 0.23320455849170685 10 0.009845860302448273 0.0 0.7435801029205322 0.44523051381111145 0.0 -0.7386089563369751 0.6740928292274475 0.4464085102081299 0.5209009647369385 0 0.31352901458740234 9 0.3085489273071289 5 0.3085489273071289 2 0.014867695979773998 0.0 0.6803773045539856 0.31026414036750793 0.0 -0.9349040389060974 0.35480818152427673 0.4156637191772461 0.5957323312759399 9 0.4312181770801544 5 0.4312181770801544 0 0.0485517717897892 6 0.029864637181162834 -0.0700145810842514 0.7434864640235901 0.4208555817604065 -0.34348583221435547 -0.5904721021652222 0.730277419090271 0.4059433937072754 0.5164225101470947 5 0.3594251573085785 0 0.33582305908203125 9 0.23320455849170685 10 0.009845860302448273 -0.19692060351371765 0.6521245837211609 0.3191433846950531 -0.23175756633281708 -0.5444197058677673 0.8061159253120422 0.31354808807373047 0.5612506866455078 9 0.6037588119506836 10 0.246835857629776 5 0.06982867419719696 0 0.037357356399297714 -0.13284938037395477 0.36867111921310425 0.12644071877002716 0.9558396935462952 -0.032807398587465286 0.2919705808162689 0.5843212604522705 0.7378981113433838 11 0.8813955783843994 10 0.1107533648610115 0 0.0 0 0.0 -0.16027027368545532 0.24704813957214355 0.04676051810383797 0.8637043237686157 -0.0394604317843914 -0.5024262070655823 0.6260561943054199 0.8096365928649902 11 0.9630122780799866 12 0.014977204613387585 0 0.0 0 0.0 -0.14990682899951935 0.3839050531387329 0.037518344819545746 0.7688833475112915 -0.0393993966281414 -0.6381420493125916 0.635796308517456 0.7324582934379578 11 0.9107308983802795 10 0.08409671485424042 0 0.0 0 0.0 -0.14990682899951935 0.3839050531387329 0.037518344819545746 0.7688833475112915 -0.0393993966281414 -0.6381420493125916 0.635796308517456 0.7324582934379578 11 0.9107308983802795 10 0.08409671485424042 0 0.0 0 0.0 -0.13148938119411469 0.47692030668258667 0.12428713589906693 0.9563280344009399 -0.13162633776664734 0.2609332501888275 0.5875352025032043 0.6752210855484009 10 0.8819923400878906 11 0.10448934882879257 0 0.0 0 0.0 -0.13284938037395477 0.36867111921310425 0.12644071877002716 0.9558396935462952 -0.032807398587465286 0.2919705808162689 0.5843212604522705 0.7378981113433838 11 0.8813955783843994 10 0.1107533648610115 0 0.0 0 0.0 -0.14394588768482208 0.23762118816375732 0.13662073016166687 0.8795129060745239 -0.12250129878520966 0.4598223865032196 0.574836015701294 0.8107243776321411 11 0.9305272102355957 12 0.05715406686067581 0 0.0 0 0.0 -0.15695250034332275 0.13945317268371582 0.05766453221440315 0.9262672662734985 0.10943937301635742 -0.36057618260383606 0.613688588142395 0.8671387434005737 11 0.7702589631080627 12 0.229200541973114 0 0.0 0 0.0 -0.16027027368545532 0.24704813957214355 0.04676051810383797 0.8637043237686157 -0.0394604317843914 -0.5024262070655823 0.6260561943054199 0.8096365928649902 11 0.9630122780799866 12 0.014977204613387585 0 0.0 0 0.0 -0.14543934166431427 0.49590951204299927 0.026219138875603676 0.7388530969619751 -0.1509750634431839 -0.6567277908325195 0.6462750434875488 0.6684547066688538 10 0.8432952761650085 11 0.1331702321767807 0 0.0 0 0.0 -0.09827211499214172 0.6246875524520874 0.11954677850008011 0.6931974291801453 -0.7169103026390076 0.07397686690092087 0.5954965353012085 0.5888605713844299 10 0.836905837059021 9 0.07508403807878494 5 0.04053134843707085 0 0.0 -0.13148938119411469 0.47692030668258667 0.12428713589906693 0.9563280344009399 -0.13162633776664734 0.2609332501888275 0.5875352025032043 0.6752210855484009 10 0.8819923400878906 11 0.10448934882879257 0 0.0 0 0.0 0.0 0.6821010708808899 0.023523900657892227 0.0 -0.7949461340904236 -0.6066469550132751 0.3776485323905945 0.7474589347839355 9 0.252836138010025 5 0.252836138010025 10 0.18387460708618164 6 0.18387460708618164 -0.09827211499214172 0.6246875524520874 0.11954677850008011 0.6931974291801453 -0.7169103026390076 0.07397686690092087 0.3315928876399994 0.6813181042671204 10 0.836905837059021 9 0.07508403807878494 5 0.04053134843707085 0 0.0 -0.11494315415620804 0.6430489420890808 0.021784529089927673 0.44160282611846924 -0.4353465437889099 -0.7844783067703247 0.3135816156864166 0.732850193977356 10 0.7448842525482178 9 0.13043087720870972 5 0.03415199741721153 0 0.01684240624308586 0.0 0.6803773045539856 0.31026414036750793 0.0 -0.9349040389060974 0.35480818152427673 0.4156637191772461 0.5957323312759399 9 0.4312181770801544 5 0.4312181770801544 0 0.0485517717897892 6 0.029864637181162834 -0.09827211499214172 0.6246875524520874 0.11954677850008011 0.6931974291801453 -0.7169103026390076 0.07397686690092087 0.3315928876399994 0.6813181042671204 10 0.836905837059021 9 0.07508403807878494 5 0.04053134843707085 0 0.0 0.0 0.6631669402122498 0.12123018503189087 0.0 -0.9987182021141052 -0.05050813406705856 0.3871926963329315 0.6944447755813599 9 0.30585911870002747 5 0.30585911870002747 10 0.179423525929451 6 0.179423525929451 -0.21539007127285004 0.1667546033859253 -0.007906094193458557 0.14654988050460815 0.3664967715740204 -0.9187902212142944 0.6632874011993408 0.8602080941200256 12 0.8476832509040833 11 0.15203344821929932 0 0.0 0 0.0 -0.16027027368545532 0.24704813957214355 0.04676051810383797 0.8637043237686157 -0.0394604317843914 -0.5024262070655823 0.6260561943054199 0.8096365928649902 11 0.9630122780799866 12 0.014977204613387585 0 0.0 0 0.0 -0.15695250034332275 0.13945317268371582 0.05766453221440315 0.9262672662734985 0.10943937301635742 -0.36057618260383606 0.613688588142395 0.8671387434005737 11 0.7702589631080627 12 0.229200541973114 0 0.0 0 0.0 -0.21422770619392395 0.2696647644042969 0.002181949093937874 -0.03393658250570297 0.06097598373889923 -0.9975585341453552 0.6666253805160522 0.8024744987487793 11 0.95918208360672 12 0.02208760753273964 0 0.0 0 0.0 -0.14990682899951935 0.3839050531387329 0.037518344819545746 0.7688833475112915 -0.0393993966281414 -0.6381420493125916 0.635796308517456 0.7324582934379578 11 0.9107308983802795 10 0.08409671485424042 0 0.0 0 0.0 -0.16027027368545532 0.24704813957214355 0.04676051810383797 0.8637043237686157 -0.0394604317843914 -0.5024262070655823 0.6260561943054199 0.8096365928649902 11 0.9630122780799866 12 0.014977204613387585 0 0.0 0 0.0 -0.22422879934310913 0.414276123046875 0.015284525230526924 -0.3885311484336853 0.034516435116529465 -0.9207739233970642 0.6815839409828186 0.7228387594223022 11 0.9109067320823669 10 0.0850052610039711 0 0.0 0 0.0 -0.14543934166431427 0.49590951204299927 0.026219138875603676 0.7388530969619751 -0.1509750634431839 -0.6567277908325195 0.6462750434875488 0.6684547066688538 10 0.8432952761650085 11 0.1331702321767807 0 0.0 0 0.0 -0.14990682899951935 0.3839050531387329 0.037518344819545746 0.7688833475112915 -0.0393993966281414 -0.6381420493125916 0.635796308517456 0.7324582934379578 11 0.9107308983802795 10 0.08409671485424042 0 0.0 0 0.0 -0.18157455325126648 0.6501905918121338 0.005674920976161957 -0.335276335477829 -0.02075258642435074 -0.9418622255325317 0.6889263391494751 0.5882138609886169 10 0.7585892677307129 9 0.17383593320846558 0 0.0 0 0.0 -0.14543934166431427 0.49590951204299927 0.026219138875603676 0.7388530969619751 -0.1509750634431839 -0.6567277908325195 0.6462750434875488 0.6684547066688538 10 0.8432952761650085 11 0.1331702321767807 0 0.0 0 0.0 -0.20572468638420105 0.5131307244300842 -0.0020905807614326477 -0.2683492600917816 -0.022766808047890663 -0.9630420804023743 0.6855449676513672 0.6661345958709717 10 0.8090380430221558 11 0.16335545480251312 0 0.0 0 0.0 -0.24138523638248444 0.1334514617919922 0.1541205644607544 -0.37720876932144165 -0.20023193955421448 0.904202401638031 0.5243164896965027 0.8715741634368896 11 0.5651088356971741 12 0.4341517984867096 0 0.0 0 0.0 -0.14394588768482208 0.23762118816375732 0.13662073016166687 0.8795129060745239 -0.12250129878520966 0.4598223865032196 0.574836015701294 0.8107243776321411 11 0.9305272102355957 12 0.05715406686067581 0 0.0 0 0.0 -0.2353973239660263 0.23234236240386963 0.17769855260849 -0.2641071677207947 -0.28104496002197266 0.922605037689209 0.5196957588195801 0.8159016370773315 11 0.9059193730354309 12 0.08363302052021027 0 0.0 0 0.0 -0.22996719181537628 0.3549819588661194 0.21869893372058868 -0.035431988537311554 -0.23514512181282043 0.9713125824928284 0.5098583698272705 0.7451364398002625 11 0.8741137981414795 10 0.10180453956127167 0 0.0 0 0.0 -0.14394588768482208 0.23762118816375732 0.13662073016166687 0.8795129060745239 -0.12250129878520966 0.4598223865032196 0.574836015701294 0.8107243776321411 11 0.9305272102355957 12 0.05715406686067581 0 0.0 0 0.0 -0.13284938037395477 0.36867111921310425 0.12644071877002716 0.9558396935462952 -0.032807398587465286 0.2919705808162689 0.5843212604522705 0.7378981113433838 11 0.8813955783843994 10 0.1107533648610115 0 0.0 0 0.0 -0.22996719181537628 0.3549819588661194 0.21869893372058868 -0.035431988537311554 -0.23514512181282043 0.9713125824928284 0.5098583698272705 0.7451364398002625 11 0.8741137981414795 10 0.10180453956127167 0 0.0 0 0.0 -0.13148938119411469 0.47692030668258667 0.12428713589906693 0.9563280344009399 -0.13162633776664734 0.2609332501888275 0.5875352025032043 0.6752210855484009 10 0.8819923400878906 11 0.10448934882879257 0 0.0 0 0.0 -0.23106297850608826 0.49126142263412476 0.25890085101127625 -0.01269569993019104 -0.28205206990242004 0.9592882990837097 0.4915243089199066 0.6694369912147522 10 0.7228800058364868 11 0.17418056726455688 9 0.08285880833864212 0 0.0 -0.23106297850608826 0.49126142263412476 0.25890085101127625 -0.01269569993019104 -0.28205206990242004 0.9592882990837097 0.4915243089199066 0.6694369912147522 10 0.7228800058364868 11 0.17418056726455688 9 0.08285880833864212 0 0.0 -0.09827211499214172 0.6246875524520874 0.11954677850008011 0.6931974291801453 -0.7169103026390076 0.07397686690092087 0.5954965353012085 0.5888605713844299 10 0.836905837059021 9 0.07508403807878494 5 0.04053134843707085 0 0.0 -0.19692060351371765 0.6521245837211609 0.3191433846950531 -0.23175756633281708 -0.5444197058677673 0.8061159253120422 0.4704653024673462 0.5733580589294434 9 0.6037588119506836 10 0.246835857629776 5 0.06982867419719696 0 0.037357356399297714 -0.10067398101091385 0.9663213491439819 -0.08786684274673462 -0.712576687335968 -0.24292734265327454 -0.6581621766090393 0.06711860746145248 0.3559820055961609 0 0.6806139349937439 1 0.1954726278781891 9 0.04794127866625786 10 0.04703438654541969 -0.1329372525215149 1.081725835800171 -0.11218704283237457 -0.8476821184158325 -0.5233924388885498 -0.08630634844303131 0.08180608600378036 0.2900291383266449 1 0.7749943137168884 0 0.4033813774585724 0 0.0 0 0.0 -0.09388621896505356 1.0232656002044678 -0.1361936777830124 -0.6617023348808289 -0.5929136276245117 -0.4588763117790222 0.05223001912236214 0.31676408648490906 1 0.7061814665794373 0 0.505308985710144 0 0.0 0 0.0 -0.16467930376529694 0.764995813369751 -0.0035517215728759766 -0.6215704679489136 -0.09994811564683914 -0.7769402265548706 0.10110408067703247 0.4813825190067291 10 0.42210859060287476 9 0.36726126074790955 0 0.15537990629673004 0 0.0 -0.07171060144901276 0.7989503741264343 -0.08710231631994247 -0.34336376190185547 -0.4688863754272461 -0.8137760758399963 0.038444168865680695 0.4439431428909302 0 0.5288071632385254 10 0.14961419999599457 9 0.14801231026649475 5 0.0648399293422699 -0.09191875904798508 0.7384775280952454 -0.004247918725013733 -0.11261329799890518 -0.5351725816726685 -0.8371837735176086 0.058216046541929245 0.4974377155303955 10 0.3449857234954834 9 0.3330496847629547 0 0.19796177744865417 5 0.05866539850831032 -0.18157455325126648 0.6501905918121338 0.005674920976161957 -0.335276335477829 -0.02075258642435074 -0.9418622255325317 0.10874716937541962 0.547910213470459 10 0.7585892677307129 9 0.17383593320846558 0 0.0 0 0.0 -0.09191875904798508 0.7384775280952454 -0.004247918725013733 -0.11261329799890518 -0.5351725816726685 -0.8371837735176086 0.058216046541929245 0.4974377155303955 10 0.3449857234954834 9 0.3330496847629547 0 0.19796177744865417 5 0.05866539850831032 -0.11494315415620804 0.6430489420890808 0.021784529089927673 0.44160282611846924 -0.4353465437889099 -0.7844783067703247 0.07110165804624557 0.5535106658935547 10 0.7448842525482178 9 0.13043087720870972 5 0.03415199741721153 0 0.01684240624308586 -0.07171060144901276 0.7989503741264343 -0.08710231631994247 -0.34336376190185547 -0.4688863754272461 -0.8137760758399963 0.038444168865680695 0.4439431428909302 0 0.5288071632385254 10 0.14961419999599457 9 0.14801231026649475 5 0.0648399293422699 0.0 0.7530391812324524 -0.05506258085370064 0.0 -0.7327799201011658 -0.6804406642913818 0.002868201583623886 0.4762572944164276 0 0.40316474437713623 9 0.17333783209323883 5 0.17333783209323883 6 0.10585487633943558 -0.09191875904798508 0.7384775280952454 -0.004247918725013733 -0.11261329799890518 -0.5351725816726685 -0.8371837735176086 0.058216046541929245 0.4974377155303955 10 0.3449857234954834 9 0.3330496847629547 0 0.19796177744865417 5 0.05866539850831032 0.0 0.866442084312439 -0.12817779183387756 0.0 -0.19495223462581635 -0.9808038473129272 0.00040259622619487345 0.4023122787475586 0 0.6251106858253479 1 0.10255718231201172 5 0.061067480593919754 9 0.06106747314333916 -0.07171060144901276 0.7989503741264343 -0.08710231631994247 -0.34336376190185547 -0.4688863754272461 -0.8137760758399963 0.038444168865680695 0.4439431428909302 0 0.5288071632385254 10 0.14961419999599457 9 0.14801231026649475 5 0.0648399293422699 -0.11275650560855865 0.858371376991272 -0.07582104951143265 -0.6566362380981445 -0.06662190705537796 -0.7512131333351135 0.06558506190776825 0.4164593815803528 0 0.6033953428268433 10 0.14807790517807007 9 0.11798921227455139 1 0.0606958270072937 0.0 1.0181424617767334 -0.20196408033370972 0.0 -0.9700308442115784 -0.24283577501773834 0.6893323659896851 0.9525341987609863 1 0.9506118297576904 0 0.27259060740470886 0 0.0 0 0.0 0.0 0.9426074624061584 -0.1419200301170349 0.0 -0.413312166929245 -0.9105807542800903 0.7870696783065796 0.9376175999641418 0 0.6058444380760193 1 0.249999538064003 5 0.01192476972937584 9 0.011924747377634048 -0.10067398101091385 0.9663213491439819 -0.08786684274673462 -0.712576687335968 -0.24292734265327454 -0.6581621766090393 0.7870696783065796 0.8129236102104187 0 0.6806139349937439 1 0.1954726278781891 9 0.04794127866625786 10 0.04703438654541969 -0.2632824182510376 0.192702054977417 0.030293196439743042 -0.8633686304092407 0.13098543882369995 -0.48722800612449646 0.129202738404274 0.8032676577568054 11 0.8625421524047852 12 0.13671983778476715 0 0.0 0 0.0 -0.279649019241333 0.08738040924072266 0.07750121504068375 -0.9613330364227295 -0.143650621175766 0.23493148386478424 0.15701256692409515 0.8617966175079346 12 0.8143556118011475 11 0.185213103890419 0 0.0 0 0.0 -0.27068033814430237 0.17515099048614502 0.10558918118476868 -0.9747001528739929 -0.030365917831659317 0.2213507443666458 0.17252767086029053 0.8140662312507629 11 0.8328282237052917 12 0.16480152308940887 0 0.0 0 0.0 -0.24138523638248444 0.1334514617919922 0.1541205644607544 -0.37720876932144165 -0.20023193955421448 0.904202401638031 0.5243164896965027 0.8715741634368896 11 0.5651088356971741 12 0.4341517984867096 0 0.0 0 0.0 -0.14728760719299316 0.0641862154006958 0.11256571114063263 0.7809076309204102 -0.348002552986145 0.5186620950698853 0.5806708335876465 0.896611750125885 12 0.7242515683174133 11 0.27535006403923035 0 0.0 0 0.0 -0.1377425193786621 0.11639571189880371 0.12225279957056046 0.8777428269386292 -0.13699759542942047 0.4590594172477722 0.5784492492675781 0.8728861808776855 11 0.5234586596488953 12 0.4755793809890747 0 0.0 0 0.0 -0.1377425193786621 0.11639571189880371 0.12225279957056046 0.8777428269386292 -0.13699759542942047 0.4590594172477722 0.5784492492675781 0.8728861808776855 11 0.5234586596488953 12 0.4755793809890747 0 0.0 0 0.0 -0.14728760719299316 0.0641862154006958 0.11256571114063263 0.7809076309204102 -0.348002552986145 0.5186620950698853 0.5806708335876465 0.896611750125885 12 0.7242515683174133 11 0.27535006403923035 0 0.0 0 0.0 -0.15695250034332275 0.13945317268371582 0.05766453221440315 0.9262672662734985 0.10943937301635742 -0.36057618260383606 0.613688588142395 0.8671387434005737 11 0.7702589631080627 12 0.229200541973114 0 0.0 0 0.0 -0.279649019241333 0.08738040924072266 0.07750121504068375 -0.9613330364227295 -0.143650621175766 0.23493148386478424 0.15701256692409515 0.8617966175079346 12 0.8143556118011475 11 0.185213103890419 0 0.0 0 0.0 -0.24138523638248444 0.1334514617919922 0.1541205644607544 -0.37720876932144165 -0.20023193955421448 0.904202401638031 0.20311272144317627 0.8384818434715271 11 0.5651088356971741 12 0.4341517984867096 0 0.0 0 0.0 -0.27068033814430237 0.17515099048614502 0.10558918118476868 -0.9747001528739929 -0.030365917831659317 0.2213507443666458 0.17252767086029053 0.8140662312507629 11 0.8328282237052917 12 0.16480152308940887 0 0.0 0 0.0 -0.2741932272911072 0.11445808410644531 0.004911437630653381 -0.8896145224571228 0.3404645025730133 -0.30430006980895996 0.11660508066415787 0.8494014739990234 12 0.8897741436958313 11 0.11008638888597488 0 0.0 0 0.0 -0.2632824182510376 0.192702054977417 0.030293196439743042 -0.8633686304092407 0.13098543882369995 -0.48722800612449646 0.129202738404274 0.8032676577568054 11 0.8625421524047852 12 0.13671983778476715 0 0.0 0 0.0 -0.21539007127285004 0.1667546033859253 -0.007906094193458557 0.14654988050460815 0.3664967715740204 -0.9187902212142944 0.09296010434627533 0.8117510676383972 12 0.8476832509040833 11 0.15203344821929932 0 0.0 0 0.0 -0.17186416685581207 0.0006354935467243195 0.08157961070537567 0.47993406653404236 -0.790582001209259 0.3802606165409088 0.5846631526947021 0.9269393086433411 12 0.915589451789856 11 0.08427349478006363 0 0.0 0 0.0 -0.24097920954227448 0.052500367164611816 0.1248338520526886 -0.40839868783950806 -0.49644458293914795 0.765953540802002 0.5384967923164368 0.9167900085449219 12 0.824219822883606 11 0.1755632609128952 0 0.0 0 0.0 -0.24350489675998688 0.0006354935467243195 0.051150236278772354 -0.47935423254966736 -0.8420056700706482 0.24741356074810028 0.5689922571182251 0.960877001285553 12 0.9519876837730408 11 0.045869868248701096 0 0.0 0 0.0 -0.14728760719299316 0.0641862154006958 0.11256571114063263 0.7809076309204102 -0.348002552986145 0.5186620950698853 0.5806708335876465 0.896611750125885 12 0.7242515683174133 11 0.27535006403923035 0 0.0 0 0.0 -0.1543327420949936 0.08759307861328125 0.01969859004020691 0.9604480266571045 0.17163610458374023 -0.21918393671512604 0.624218761920929 0.8986101746559143 12 0.8263624310493469 11 0.17350547015666962 0 0.0 0 0.0 -0.15695250034332275 0.13945317268371582 0.05766453221440315 0.9262672662734985 0.10943937301635742 -0.36057618260383606 0.613688588142395 0.8671387434005737 11 0.7702589631080627 12 0.229200541973114 0 0.0 0 0.0 -0.24350489675998688 0.0006354935467243195 0.051150236278772354 -0.47935423254966736 -0.8420056700706482 0.24741356074810028 0.1503724455833435 0.9156708121299744 12 0.9519876837730408 11 0.045869868248701096 0 0.0 0 0.0 -0.279649019241333 0.08738040924072266 0.07750121504068375 -0.9613330364227295 -0.143650621175766 0.23493148386478424 0.15701256692409515 0.8617966175079346 12 0.8143556118011475 11 0.185213103890419 0 0.0 0 0.0 -0.2765810489654541 0.0468442440032959 0.0249030739068985 -0.940153181552887 -0.31360819935798645 0.13303017616271973 0.13173434138298035 0.8852612376213074 12 0.9507208466529846 11 0.0483645461499691 0 0.0 0 0.0 -0.2765810489654541 0.0468442440032959 0.0249030739068985 -0.940153181552887 -0.31360819935798645 0.13303017616271973 0.13173434138298035 0.8852612376213074 12 0.9507208466529846 11 0.0483645461499691 0 0.0 0 0.0 -0.2741932272911072 0.11445808410644531 0.004911437630653381 -0.8896145224571228 0.3404645025730133 -0.30430006980895996 0.11660508066415787 0.8494014739990234 12 0.8897741436958313 11 0.11008638888597488 0 0.0 0 0.0 -0.2862442135810852 0.08407890796661377 -0.013642758131027222 -0.9532761573791504 0.27402570843696594 -0.1270180344581604 0.10861167311668396 0.8684667348861694 12 0.9602087140083313 11 0.029473556205630302 0 0.0 0 0.0 -0.2741932272911072 0.11445808410644531 0.004911437630653381 -0.8896145224571228 0.3404645025730133 -0.30430006980895996 0.11660508066415787 0.8494014739990234 12 0.8897741436958313 11 0.11008638888597488 0 0.0 0 0.0 -0.22046658396720886 0.09783637523651123 -0.07096876204013824 -0.016296884045004845 0.8249458074569702 -0.5649281144142151 0.06424757838249207 0.8535482883453369 12 0.99355149269104 0 0.0 0 0.0 0 0.0 -0.2862442135810852 0.08407890796661377 -0.013642758131027222 -0.9532761573791504 0.27402570843696594 -0.1270180344581604 0.10861167311668396 0.8684667348861694 12 0.9602087140083313 11 0.029473556205630302 0 0.0 0 0.0 -0.20350560545921326 0.0006354935467243195 -0.11223234236240387 0.10193182528018951 -0.844508171081543 -0.5256813168525696 0.6475530862808228 0.9809802174568176 12 0.9989274144172668 0 0.0 0 0.0 0 0.0 -0.24350489675998688 0.0006354935467243195 0.051150236278772354 -0.47935423254966736 -0.8420056700706482 0.24741356074810028 0.5689922571182251 0.960877001285553 12 0.9519876837730408 11 0.045869868248701096 0 0.0 0 0.0 -0.2590513527393341 0.0006354935467243195 -0.09128285944461823 -0.5378581881523132 -0.7852412462234497 -0.30668050050735474 0.6261083483695984 0.999796986579895 12 0.9953135848045349 0 0.0 0 0.0 0 0.0 -0.1543327420949936 0.08759307861328125 0.01969859004020691 0.9604480266571045 0.17163610458374023 -0.21918393671512604 0.624218761920929 0.8986101746559143 12 0.8263624310493469 11 0.17350547015666962 0 0.0 0 0.0 -0.21539007127285004 0.1667546033859253 -0.007906094193458557 0.14654988050460815 0.3664967715740204 -0.9187902212142944 0.6632874011993408 0.8602080941200256 12 0.8476832509040833 11 0.15203344821929932 0 0.0 0 0.0 -0.15695250034332275 0.13945317268371582 0.05766453221440315 0.9262672662734985 0.10943937301635742 -0.36057618260383606 0.613688588142395 0.8671387434005737 11 0.7702589631080627 12 0.229200541973114 0 0.0 0 0.0 -0.16382159292697906 0.0006354935467243195 -0.08050514757633209 0.6014587879180908 -0.7863094210624695 -0.14111758768558502 0.6353160738945007 0.9585727453231812 12 0.986153244972229 0 0.0 0 0.0 0 0.0 -0.1543327420949936 0.08759307861328125 0.01969859004020691 0.9604480266571045 0.17163610458374023 -0.21918393671512604 0.624218761920929 0.8986101746559143 12 0.8263624310493469 11 0.17350547015666962 0 0.0 0 0.0 -0.17186416685581207 0.0006354935467243195 0.08157961070537567 0.47993406653404236 -0.790582001209259 0.3802606165409088 0.5846631526947021 0.9269393086433411 12 0.915589451789856 11 0.08427349478006363 0 0.0 0 0.0 -0.14809073507785797 0.03774738311767578 -0.1051795557141304 0.8722190260887146 0.06930753588676453 -0.4841151237487793 0.6554734706878662 0.94559645652771 12 0.9824442863464355 0 0.0 0 0.0 0 0.0 -0.20350560545921326 0.0006354935467243195 -0.11223234236240387 0.10193182528018951 -0.844508171081543 -0.5256813168525696 0.6475530862808228 0.9809802174568176 12 0.9989274144172668 0 0.0 0 0.0 0 0.0 -0.21444743871688843 0.05028212070465088 -0.15147438645362854 -0.03833124786615372 0.21689504384994507 -0.9754325747489929 0.6889263391494751 0.9614924192428589 12 1.0102593898773193 0 0.0 0 0.0 0 0.0 -0.2590513527393341 0.0006354935467243195 -0.09128285944461823 -0.5378581881523132 -0.7852412462234497 -0.30668050050735474 0.07569105178117752 0.9268571734428406 12 0.9953135848045349 0 0.0 0 0.0 0 0.0 -0.21444743871688843 0.05028212070465088 -0.15147438645362854 -0.03833124786615372 0.21689504384994507 -0.9754325747489929 0.029200129210948944 0.8926466703414917 12 1.0102593898773193 0 0.0 0 0.0 0 0.0 -0.20350560545921326 0.0006354935467243195 -0.11223234236240387 0.10193182528018951 -0.844508171081543 -0.5256813168525696 0.043840546160936356 0.9365466833114624 12 0.9989274144172668 0 0.0 0 0.0 0 0.0 -0.24350489675998688 0.0006354935467243195 0.051150236278772354 -0.47935423254966736 -0.8420056700706482 0.24741356074810028 0.5689922571182251 0.960877001285553 12 0.9519876837730408 11 0.045869868248701096 0 0.0 0 0.0 -0.16382159292697906 0.0006354935467243195 -0.08050514757633209 0.6014587879180908 -0.7863094210624695 -0.14111758768558502 0.6353160738945007 0.9585727453231812 12 0.986153244972229 0 0.0 0 0.0 0 0.0 -0.17186416685581207 0.0006354935467243195 0.08157961070537567 0.47993406653404236 -0.790582001209259 0.3802606165409088 0.5846631526947021 0.9269393086433411 12 0.915589451789856 11 0.08427349478006363 0 0.0 0 0.0 -0.22046658396720886 0.09783637523651123 -0.07096876204013824 -0.016296884045004845 0.8249458074569702 -0.5649281144142151 0.6826233267784119 0.909465491771698 12 0.99355149269104 0 0.0 0 0.0 0 0.0 -0.14809073507785797 0.03774738311767578 -0.1051795557141304 0.8722190260887146 0.06930753588676453 -0.4841151237487793 0.6554734706878662 0.94559645652771 12 0.9824442863464355 0 0.0 0 0.0 0 0.0 -0.21444743871688843 0.05028212070465088 -0.15147438645362854 -0.03833124786615372 0.21689504384994507 -0.9754325747489929 0.6889263391494751 0.9614924192428589 12 1.0102593898773193 0 0.0 0 0.0 0 0.0 -0.2765810489654541 0.0468442440032959 0.0249030739068985 -0.940153181552887 -0.31360819935798645 0.13303017616271973 0.13173434138298035 0.8852612376213074 12 0.9507208466529846 11 0.0483645461499691 0 0.0 0 0.0 -0.2590513527393341 0.0006354935467243195 -0.09128285944461823 -0.5378581881523132 -0.7852412462234497 -0.30668050050735474 0.07569105178117752 0.9268571734428406 12 0.9953135848045349 0 0.0 0 0.0 0 0.0 -0.24350489675998688 0.0006354935467243195 0.051150236278772354 -0.47935423254966736 -0.8420056700706482 0.24741356074810028 0.1503724455833435 0.9156708121299744 12 0.9519876837730408 11 0.045869868248701096 0 0.0 0 0.0 -0.2862442135810852 0.08407890796661377 -0.013642758131027222 -0.9532761573791504 0.27402570843696594 -0.1270180344581604 0.10861167311668396 0.8684667348861694 12 0.9602087140083313 11 0.029473556205630302 0 0.0 0 0.0 -0.27682194113731384 0.03609919548034668 -0.09393604099750519 -0.8938566446304321 0.03878902643918991 -0.4466078579425812 0.07372365891933441 0.8974340558052063 12 0.9938223958015442 0 0.0 0 0.0 0 0.0 -0.2765810489654541 0.0468442440032959 0.0249030739068985 -0.940153181552887 -0.31360819935798645 0.13303017616271973 0.13173434138298035 0.8852612376213074 12 0.9507208466529846 11 0.0483645461499691 0 0.0 0 0.0 -0.27682194113731384 0.03609919548034668 -0.09393604099750519 -0.8938566446304321 0.03878902643918991 -0.4466078579425812 0.07372365891933441 0.8974340558052063 12 0.9938223958015442 0 0.0 0 0.0 0 0.0 -0.22046658396720886 0.09783637523651123 -0.07096876204013824 -0.016296884045004845 0.8249458074569702 -0.5649281144142151 0.06424757838249207 0.8535482883453369 12 0.99355149269104 0 0.0 0 0.0 0 0.0 -0.21444743871688843 0.05028212070465088 -0.15147438645362854 -0.03833124786615372 0.21689504384994507 -0.9754325747489929 0.029200129210948944 0.8926466703414917 12 1.0102593898773193 0 0.0 0 0.0 0 0.0 -0.17734870314598083 1.1222507953643799 0.016492163762450218 -0.9736624956130981 0.07391583174467087 -0.21564379334449768 0.15870711207389832 0.2861701548099518 0 0.7400459051132202 1 0.20915496349334717 9 0.02171226218342781 2 0.0 -0.17711219191551208 1.2111425399780273 -0.08284486830234528 -0.9780877232551575 0.07745597511529922 0.19315165281295776 0.11920919269323349 0.2266269475221634 1 0.6532512903213501 0 0.27260318398475647 2 0.0 0 0.0 -0.15271435678005219 1.1326109170913696 -0.08103625476360321 -0.9580675959587097 -0.28070923686027527 0.05710013210773468 0.10731169581413269 0.2683471441268921 1 0.6775277256965637 0 0.479615181684494 2 0.0 0 0.0 -0.23453930020332336 1.0399465560913086 0.12781919538974762 -0.9630115628242493 0.15222632884979248 -0.2221747487783432 0.2123546004295349 0.34633561968803406 0 0.7073097229003906 9 0.15077142417430878 1 0.04680754616856575 2 7.789886149112135e-05 -0.2174592912197113 1.1028785705566406 0.2627961039543152 -0.9561144113540649 0.17743460834026337 0.23300881683826447 0.28516799211502075 0.32168421149253845 0 0.5695722103118896 9 0.11019442975521088 2 0.033312100917100906 1 0.024461444467306137 -0.19893279671669006 1.1545631885528564 0.1498781144618988 -0.9536118507385254 0.28800317645072937 -0.0874660462141037 0.23297777771949768 0.28563162684440613 0 0.7194539904594421 1 0.08576151728630066 9 0.05332915112376213 2 0.03160868585109711 -0.17711219191551208 1.193559169769287 0.0424371063709259 -0.9813531637191772 0.1826837956905365 -0.05929746478796005 0.18139240145683289 0.2521224319934845 0 0.715113639831543 1 0.2307407557964325 2 0.01808408461511135 0 0.0 -0.1459522545337677 1.3251063823699951 0.18270058929920197 -0.8204901218414307 0.5527207255363464 0.14572587609291077 0.2664920687675476 0.20125365257263184 0 0.5595225095748901 1 0.11560860276222229 2 0.00013760886213276535 0 0.0 -0.11630034446716309 1.385688066482544 0.011257962323725224 -0.8467971086502075 0.5172887444496155 0.12363047897815704 0.19177863001823425 0.14417126774787903 0 0.41010767221450806 1 0.3941728472709656 2 0.021439071744680405 0 0.0 -0.09388621896505356 1.0232656002044678 -0.1361936777830124 -0.6617023348808289 -0.5929136276245117 -0.4588763117790222 0.8785715699195862 0.6988553404808044 1 0.7061814665794373 0 0.505308985710144 0 0.0 0 0.0 -0.11636289954185486 1.053910732269287 -0.19108946621418 -0.5185399651527405 -0.8486281633377075 0.10443434119224548 0.8408097624778748 0.693621814250946 1 0.8277724981307983 0 0.24267315864562988 0 0.0 0 0.0 0.0 1.0181424617767334 -0.20196408033370972 0.0 -0.9700308442115784 -0.24283577501773834 0.8594119548797607 0.7608353495597839 1 0.9506118297576904 0 0.27259060740470886 0 0.0 0 0.0 -0.09191875904798508 0.7384775280952454 -0.004247918725013733 -0.11261329799890518 -0.5351725816726685 -0.8371837735176086 0.058216046541929245 0.4974377155303955 10 0.3449857234954834 9 0.3330496847629547 0 0.19796177744865417 5 0.05866539850831032 0.0 0.6821010708808899 0.023523900657892227 0.0 -0.7949461340904236 -0.6066469550132751 0.007275765296071768 0.5337982773780823 9 0.252836138010025 5 0.252836138010025 10 0.18387460708618164 6 0.18387460708618164 -0.11494315415620804 0.6430489420890808 0.021784529089927673 0.44160282611846924 -0.4353465437889099 -0.7844783067703247 0.07110165804624557 0.5535106658935547 10 0.7448842525482178 9 0.13043087720870972 5 0.03415199741721153 0 0.01684240624308586 -0.10067398101091385 0.9663213491439819 -0.08786684274673462 -0.712576687335968 -0.24292734265327454 -0.6581621766090393 0.06711860746145248 0.3559820055961609 0 0.6806139349937439 1 0.1954726278781891 9 0.04794127866625786 10 0.04703438654541969 0.0 0.866442084312439 -0.12817779183387756 0.0 -0.19495223462581635 -0.9808038473129272 0.00040259622619487345 0.4023122787475586 0 0.6251106858253479 1 0.10255718231201172 5 0.061067480593919754 9 0.06106747314333916 -0.11275650560855865 0.858371376991272 -0.07582104951143265 -0.6566362380981445 -0.06662190705537796 -0.7512131333351135 0.06558506190776825 0.4164593815803528 0 0.6033953428268433 10 0.14807790517807007 9 0.11798921227455139 1 0.0606958270072937 -0.17548006772994995 0.9740344882011414 0.03773410618305206 -0.8627887964248657 -0.095828115940094 -0.49632251262664795 0.14806827902793884 0.3685593605041504 0 0.7296560406684875 9 0.13401056826114655 1 0.059292711317539215 10 0.025198591873049736 -0.16467930376529694 0.764995813369751 -0.0035517215728759766 -0.6215704679489136 -0.09994811564683914 -0.7769402265548706 0.10110408067703247 0.4813825190067291 10 0.42210859060287476 9 0.36726126074790955 0 0.15537990629673004 0 0.0 -0.27550312876701355 0.891650915145874 0.1857611984014511 -0.9843134880065918 0.15448468923568726 -0.08484145998954773 0.2322322577238083 0.43014711141586304 9 0.6623887419700623 0 0.23774738609790802 10 0.02405528351664543 2 0.014952762052416801 0.0 0.8515796661376953 1.0820811986923218 0.0 -0.9989928603172302 0.04452650621533394 0.8863584995269775 0.47759830951690674 4 0.9997074007987976 0 0.0 0 0.0 0 0.0 -0.04524477198719978 0.9055635929107666 0.9612237811088562 -0.99981689453125 -0.011352885514497757 -0.013397625647485256 0.8992534875869751 0.4032728672027588 4 0.9947757124900818 0 0.0 0 0.0 0 0.0 0.0 0.8555480241775513 0.9201857447624207 0.0 -0.9908444285392761 -0.1347697377204895 0.8575089573860168 0.39543601870536804 4 0.9604564309120178 3 0.029231343418359756 0 0.0 0 0.0 0.0 0.9533488154411316 1.0950424671173096 0.0 0.9988097548484802 -0.048158206045627594 0.9595854878425598 0.4558004140853882 4 0.9995507597923279 0 0.0 0 0.0 0 0.0 -0.04524477198719978 0.9055635929107666 0.9612237811088562 -0.99981689453125 -0.011352885514497757 -0.013397625647485256 0.8992534875869751 0.4032728672027588 4 0.9947757124900818 0 0.0 0 0.0 0 0.0 -0.05299364775419235 0.9086697101593018 1.127077579498291 -0.9984740614891052 0.004181035794317722 0.05499435216188431 0.9316335320472717 0.4823167026042938 4 0.9999160170555115 0 0.0 0 0.0 0 0.0 -0.15597429871559143 1.3777180910110474 -0.39357221126556396 -0.6780602335929871 0.5271767377853394 -0.5121310949325562 0.6492087841033936 0.4990021586418152 1 0.5218733549118042 0 0.0 0 0.0 0 0.0 -0.09474784880876541 1.4414864778518677 -0.305348664522171 -0.47962889075279236 0.8599505424499512 -0.1743827611207962 0.6945981383323669 0.5729519724845886 1 0.48631343245506287 0 0.006849147379398346 0 0.0 0 0.0 -0.06429819017648697 1.3896068334579468 -0.43792080879211426 -0.3429059684276581 0.5780205726623535 -0.7404400706291199 0.7636973261833191 0.4662829637527466 1 0.5313303470611572 0 0.0 0 0.0 0 0.0 -0.15597429871559143 1.3777180910110474 -0.39357221126556396 -0.6780602335929871 0.5271767377853394 -0.5121310949325562 0.6492087841033936 0.4990021586418152 1 0.5218733549118042 0 0.0 0 0.0 0 0.0 -0.04986967518925667 1.2690738439559937 -0.4816516935825348 -0.4589068293571472 0.574968695640564 -0.6773278117179871 0.7414538264274597 0.31137514114379883 1 0.5933704376220703 0 0.0 0 0.0 0 0.0 -0.18102072179317474 1.268702745437622 -0.39696988463401794 -0.8454847931861877 0.23203222453594208 -0.48088014125823975 0.5643640756607056 0.39259523153305054 1 0.5556833148002625 0 0.0 0 0.0 0 0.0 0.0 1.102358341217041 -0.5441152453422546 0.0 -0.5053865313529968 -0.8628803491592407 0.6952515840530396 0.0594245009124279 1 0.49531272053718567 0 0.0 0 0.0 0 0.0 -0.11392863094806671 1.1170620918273926 -0.5390962958335876 -0.45652636885643005 -0.3259071707725525 -0.8278450965881348 0.6125847101211548 0.13550977408885956 1 0.5383314490318298 0 0.0 0 0.0 0 0.0 0.0 1.1535732746124268 -0.5664279460906982 0.0 -0.22562333941459656 -0.9742118716239929 0.7363960146903992 0.10636518150568008 1 0.524931788444519 0 0.0 0 0.0 0 0.0 0.0 1.2747960090637207 -0.5200934410095215 0.0 0.7257301807403564 -0.6879787445068359 0.7898815870285034 0.26401570439338684 1 0.5951871871948242 0 0.0 0 0.0 0 0.0 -0.06438668072223663 1.2186225652694702 -0.5522415637969971 -0.40809351205825806 0.41642504930496216 -0.8124027252197266 0.7213020324707031 0.204230397939682 1 0.5807928442955017 0 0.0 0 0.0 0 0.0 -0.04986967518925667 1.2690738439559937 -0.4816516935825348 -0.4589068293571472 0.574968695640564 -0.6773278117179871 0.7414538264274597 0.31137514114379883 1 0.5933704376220703 0 0.0 0 0.0 0 0.0 -0.11392863094806671 1.1170620918273926 -0.5390962958335876 -0.45652636885643005 -0.3259071707725525 -0.8278450965881348 0.6125847101211548 0.13550977408885956 1 0.5383314490318298 0 0.0 0 0.0 0 0.0 -0.1287733018398285 1.2108771800994873 -0.5207679867744446 -0.6269417405128479 0.4066286087036133 -0.6644794940948486 0.6418904066085815 0.2361043244600296 1 0.5891550183296204 0 0.0 0 0.0 0 0.0 -0.06438668072223663 1.2186225652694702 -0.5522415637969971 -0.40809351205825806 0.41642504930496216 -0.8124027252197266 0.7213020324707031 0.204230397939682 1 0.5807928442955017 0 0.0 0 0.0 0 0.0 -0.19536322355270386 1.1583302021026611 -0.38174155354499817 -0.9667958617210388 0.013214514590799809 -0.2551042139530182 0.4866374433040619 0.2810833156108856 1 0.597184419631958 0 0.0194740928709507 0 0.0 0 0.0 -0.18102072179317474 1.268702745437622 -0.39696988463401794 -0.8454847931861877 0.23203222453594208 -0.48088014125823975 0.5643640756607056 0.39259523153305054 1 0.5556833148002625 0 0.0 0 0.0 0 0.0 -0.1287733018398285 1.2108771800994873 -0.5207679867744446 -0.6269417405128479 0.4066286087036133 -0.6644794940948486 0.6418904066085815 0.2361043244600296 1 0.5891550183296204 0 0.0 0 0.0 0 0.0 -0.07297612726688385 1.3934298753738403 0.16687017679214478 -0.4526505470275879 0.8392895460128784 0.3011261224746704 0.27515244483947754 0.15112540125846863 0 0.46099191904067993 1 0.1663425862789154 2 0.00029648616327904165 0 0.0 -0.11630034446716309 1.385688066482544 0.011257962323725224 -0.8467971086502075 0.5172887444496155 0.12363047897815704 0.19177863001823425 0.14417126774787903 0 0.41010767221450806 1 0.3941728472709656 2 0.021439071744680405 0 0.0 -0.1459522545337677 1.3251063823699951 0.18270058929920197 -0.8204901218414307 0.5527207255363464 0.14572587609291077 0.2664920687675476 0.20125365257263184 0 0.5595225095748901 1 0.11560860276222229 2 0.00013760886213276535 0 0.0 -0.08727402985095978 1.2957605123519897 0.34337759017944336 -0.4752952754497528 0.6862391829490662 0.5505844354629517 0.3502945005893707 0.2176021784543991 0 0.1636802703142166 2 0.05475941300392151 1 0.038439225405454636 0 0.0 -0.1459522545337677 1.3251063823699951 0.18270058929920197 -0.8204901218414307 0.5527207255363464 0.14572587609291077 0.2664920687675476 0.20125365257263184 0 0.5595225095748901 1 0.11560860276222229 2 0.00013760886213276535 0 0.0 -0.17454805970191956 1.2118858098983765 0.34130558371543884 -0.8105410933494568 0.3488875925540924 0.47038179636001587 0.3298243582248688 0.2703784704208374 0 0.21865041553974152 2 0.06258596479892731 1 0.03174738213419914 9 0.02641637995839119 -0.07297612726688385 1.460466742515564 -0.16172027587890625 -0.5019684433937073 0.8640094995498657 0.03888057917356491 0.12038150429725647 0.0717666819691658 1 0.424686998128891 0 0.08062247186899185 0 0.0 0 0.0 0.0 1.4754657745361328 -0.018200816586613655 0.0 0.9835200309753418 0.18070009350776672 0.2048933058977127 0.06445963680744171 1 0.39598000049591064 0 0.22064290940761566 2 0.005581408739089966 0 0.0 0.0 1.4864554405212402 -0.1874413788318634 0.0 0.999664306640625 -0.02554399147629738 0.12280824035406113 0.02889185957610607 1 0.42892152070999146 0 0.06715913861989975 0 0.0 0 0.0 -0.0650172010064125 1.190718173980713 0.442444771528244 -0.5703604221343994 0.43330180644989014 0.6977751851081848 0.4042886793613434 0.26924484968185425 2 0.034502845257520676 0 0.0 0 0.0 0 0.0 -0.17454805970191956 1.2118858098983765 0.34130558371543884 -0.8105410933494568 0.3488875925540924 0.47038179636001587 0.3298243582248688 0.2703784704208374 0 0.21865041553974152 2 0.06258596479892731 1 0.03174738213419914 9 0.02641637995839119 -0.1461862027645111 1.0710813999176025 0.3844836950302124 -0.808252215385437 0.17184972763061523 0.5631580352783203 0.3577803373336792 0.3372943699359894 0 0.205034539103508 9 0.10197971016168594 5 0.05613458901643753 2 0.02603248320519924 -0.04986967518925667 1.2690738439559937 -0.4816516935825348 -0.4589068293571472 0.574968695640564 -0.6773278117179871 0.7414538264274597 0.31137514114379883 1 0.5933704376220703 0 0.0 0 0.0 0 0.0 -0.1287733018398285 1.2108771800994873 -0.5207679867744446 -0.6269417405128479 0.4066286087036133 -0.6644794940948486 0.6418904066085815 0.2361043244600296 1 0.5891550183296204 0 0.0 0 0.0 0 0.0 -0.18102072179317474 1.268702745437622 -0.39696988463401794 -0.8454847931861877 0.23203222453594208 -0.48088014125823975 0.5643640756607056 0.39259523153305054 1 0.5556833148002625 0 0.0 0 0.0 0 0.0 -0.06429819017648697 1.3896068334579468 -0.43792080879211426 -0.3429059684276581 0.5780205726623535 -0.7404400706291199 0.7636973261833191 0.4662829637527466 1 0.5313303470611572 0 0.0 0 0.0 0 0.0 0.0 1.4688720703125 -0.35228610038757324 0.0 0.9361552596092224 -0.35151219367980957 0.8172668218612671 0.550440788269043 1 0.5002522468566895 0 0.0 0 0.0 0 0.0 0.0 1.3950845003128052 -0.45135900378227234 0.0 0.598864734172821 -0.8008362054824829 0.8172668218612671 0.41208434104919434 1 0.5343004465103149 0 0.0 0 0.0 0 0.0 -0.07297612726688385 1.460466742515564 -0.16172027587890625 -0.5019684433937073 0.8640094995498657 0.03888057917356491 0.12038150429725647 0.0717666819691658 1 0.424686998128891 0 0.08062247186899185 0 0.0 0 0.0 -0.18949569761753082 1.3684693574905396 -0.2584112286567688 -0.860957682132721 0.5083467960357666 0.01657155156135559 0.04436533525586128 0.12631487846374512 1 0.4894542992115021 0 0.038765352219343185 0 0.0 0 0.0 -0.1459522545337677 1.3888463973999023 -0.1359991729259491 -0.8357188701629639 0.5164341926574707 0.18662068247795105 0.11418572813272476 0.1270817071199417 1 0.4451029896736145 0 0.11861109733581543 0 0.0 0 0.0 -0.04986967518925667 1.2690738439559937 -0.4816516935825348 -0.4589068293571472 0.574968695640564 -0.6773278117179871 0.7414538264274597 0.31137514114379883 1 0.5933704376220703 0 0.0 0 0.0 0 0.0 0.0 1.3950845003128052 -0.45135900378227234 0.0 0.598864734172821 -0.8008362054824829 0.8172668218612671 0.41208434104919434 1 0.5343004465103149 0 0.0 0 0.0 0 0.0 0.0 1.2747960090637207 -0.5200934410095215 0.0 0.7257301807403564 -0.6879787445068359 0.7898815870285034 0.26401570439338684 1 0.5951871871948242 0 0.0 0 0.0 0 0.0 0.0 1.4161217212677002 0.1510397493839264 0.0 0.9378948211669922 0.34690389037132263 0.28625792264938354 0.11215589195489883 0 0.4460723102092743 1 0.2005683183670044 2 0.000560328655410558 0 0.0 0.07297612726688385 1.3934298753738403 0.16687017679214478 0.4526505470275879 0.8392895460128784 0.3011261224746704 0.27515244483947754 0.15112540125846863 0 0.46099191904067993 1 0.19868381321430206 2 0.00027996301651000977 0 0.0 0.058150164783000946 1.453392744064331 -0.0034714294597506523 0.5017548203468323 0.843226432800293 0.19284646213054657 0.19909562170505524 0.09749332815408707 1 0.38084477186203003 0 0.2609921395778656 2 0.015516634099185467 0 0.0 0.1459522545337677 1.3888463973999023 -0.1359991729259491 0.8357188701629639 0.5164341926574707 0.18662068247795105 0.11418572813272476 0.1270817071199417 1 0.47086650133132935 0 0.11861134320497513 0 0.0 0 0.0 0.07297612726688385 1.460466742515564 -0.16172027587890625 0.5019684433937073 0.8640094995498657 0.03888057917356491 0.12038150429725647 0.0717666819691658 1 0.43864887952804565 0 0.0806228369474411 0 0.0 0 0.0 0.058150164783000946 1.453392744064331 -0.0034714294597506523 0.5017548203468323 0.843226432800293 0.19284646213054657 0.19909562170505524 0.09749332815408707 1 0.38084477186203003 0 0.2609921395778656 2 0.015516634099185467 0 0.0 0.0 1.4864554405212402 -0.1874413788318634 0.0 0.999664306640625 -0.02554399147629738 0.12280824035406113 0.02889185957610607 1 0.42892152070999146 0 0.06715913861989975 0 0.0 0 0.0 0.07297612726688385 1.460466742515564 -0.16172027587890625 0.5019684433937073 0.8640094995498657 0.03888057917356491 0.12038150429725647 0.0717666819691658 1 0.43864887952804565 0 0.0806228369474411 0 0.0 0 0.0 0.09474784880876541 1.4414864778518677 -0.305348664522171 0.47962889075279236 0.8599505424499512 -0.1743827611207962 0.04443186894059181 0.0578567311167717 1 0.4937168061733246 0 0.006853099912405014 0 0.0 0 0.0 0.11630034446716309 1.385688066482544 0.011257962323725224 0.8467971086502075 0.5172887444496155 0.12363047897815704 0.19177863001823425 0.14417126774787903 1 0.4200000762939453 0 0.41010770201683044 2 0.021439071744680405 0 0.0 0.17711219191551208 1.193559169769287 0.0424371063709259 0.9813531637191772 0.1826837956905365 -0.05929746478796005 0.18139240145683289 0.2521224319934845 0 0.7151136994361877 1 0.23585881292819977 2 0.016049621626734734 0 0.0 0.17711219191551208 1.2111425399780273 -0.08284486830234528 0.9780877232551575 0.07745597511529922 0.19315165281295776 0.11920919269323349 0.2266269475221634 1 0.6505640745162964 0 0.27260327339172363 0 0.0 0 0.0 0.17758521437644958 1.0509424209594727 -0.009452779777348042 0.9080782532691956 -0.1265297383069992 -0.39918211102485657 0.13626915216445923 0.3208780884742737 0 0.7504677176475525 1 0.16195771098136902 5 0.05459079146385193 2 0.0 0.1329372525215149 1.081725835800171 -0.11218704283237457 0.8476821184158325 -0.5233924388885498 -0.08630634844303131 0.08180608600378036 0.2900291383266449 1 0.7744880318641663 0 0.403382271528244 0 0.0 0 0.0 0.15271435678005219 1.1326109170913696 -0.08103625476360321 0.9580675959587097 -0.28070923686027527 0.05710013210773468 0.10731169581413269 0.2683471441268921 1 0.6765074133872986 0 0.47961559891700745 0 0.0 0 0.0 0.17548006772994995 0.9740344882011414 0.03773410618305206 0.8627887964248657 -0.095828115940094 -0.49632251262664795 0.14806827902793884 0.3685593605041504 0 0.7296561002731323 5 0.13401056826114655 1 0.05976245924830437 6 0.02519860677421093 0.11275650560855865 0.858371376991272 -0.07582104951143265 0.6566362380981445 -0.06662190705537796 -0.7512131333351135 0.06558506190776825 0.4164593815803528 0 0.6033954620361328 6 0.14807792007923126 5 0.11798923462629318 1 0.06080198287963867 0.10067398101091385 0.9663213491439819 -0.08786684274673462 0.712576687335968 -0.24292734265327454 -0.6581621766090393 0.06711860746145248 0.3559820055961609 0 0.6806142330169678 1 0.19555994868278503 5 0.04794131591916084 6 0.04703441634774208 0.11636289954185486 1.018743872642517 -0.2921942174434662 0.3807489275932312 -0.9202551245689392 0.09018219262361526 0.7902564406394958 0.7220689654350281 1 0.5560586452484131 0 0.11100900918245316 0 0.0 0 0.0 0.11636289954185486 1.053910732269287 -0.19108946621418 0.5185399651527405 -0.8486281633377075 0.10443434119224548 0.8408097624778748 0.693621814250946 1 0.827496349811554 0 0.24267560243606567 0 0.0 0 0.0 0.0 1.0181424617767334 -0.20196408033370972 0.0 -0.9700308442115784 -0.24283577501773834 0.8594119548797607 0.7608353495597839 1 0.9506118297576904 0 0.27259060740470886 0 0.0 0 0.0 0.0 1.0058256387710571 -0.31092268228530884 0.0 -0.999969482421875 0.0018921475857496262 0.8017098903656006 0.7843313217163086 1 0.5234434008598328 0 0.1049714908003807 0 0.0 0 0.0 0.0 1.0128729343414307 -0.41166767477989197 0.0 -0.9807122945785522 -0.19541001319885254 0.7478660345077515 0.8006981611251831 1 0.45380619168281555 0 0.0400310717523098 0 0.0 0 0.0 0.11636289954185486 1.0278944969177246 -0.36559149622917175 0.35953855514526367 -0.9165623784065247 -0.1748405396938324 0.753631055355072 0.7329650521278381 1 0.48844844102859497 0 0.06050974503159523 0 0.0 0 0.0 0.0 1.0128729343414307 -0.41166767477989197 0.0 -0.9807122945785522 -0.19541001319885254 0.7478660345077515 0.8006981611251831 1 0.45380619168281555 0 0.0400310717523098 0 0.0 0 0.0 0.0 1.0367169380187988 -0.4998640716075897 0.0 -0.82528156042099 -0.5646839737892151 0.6987836360931396 0.8125174641609192 1 0.4652153253555298 0 0.0 0 0.0 0 0.0 0.11636289954185486 1.0498738288879395 -0.43372729420661926 0.37830743193626404 -0.8667256832122803 -0.3249916136264801 0.7156935930252075 0.7401500344276428 1 0.4745221734046936 0 0.016028281301259995 0 0.0 0 0.0 0.0 1.0367169380187988 -0.4998640716075897 0.0 -0.82528156042099 -0.5646839737892151 0.6316680908203125 0.00020304521603975445 1 0.4652153253555298 0 0.0 0 0.0 0 0.0 0.0 1.102358341217041 -0.5441152453422546 0.0 -0.5053865313529968 -0.8628803491592407 0.6952515840530396 0.0594245009124279 1 0.49531272053718567 0 0.0 0 0.0 0 0.0 0.09310946613550186 1.0738946199417114 -0.5040848851203918 0.31342509388923645 -0.7467879056930542 -0.5865352153778076 0.578464150428772 0.07731097936630249 1 0.4915311634540558 0 0.0 0 0.0 0 0.0 0.18949569761753082 1.3684693574905396 -0.2584112286567688 0.860957682132721 0.5083467960357666 0.01657155156135559 0.5453251600265503 0.5488014817237854 1 0.5081745386123657 0 0.03876670077443123 0 0.0 0 0.0 0.21954664587974548 1.2720890045166016 -0.26756638288497925 0.9747001528739929 0.22016052901744843 -0.038422804325819016 0.4704653024673462 0.463824987411499 1 0.5512939095497131 0 0.05323823541402817 0 0.0 0 0.0 0.18102072179317474 1.268702745437622 -0.39696988463401794 0.8454847931861877 0.23203222453594208 -0.48088014125823975 0.5643640756607056 0.39259523153305054 1 0.5544809699058533 0 0.0 0 0.0 0 0.0 0.1459522545337677 1.3888463973999023 -0.1359991729259491 0.8357188701629639 0.5164341926574707 0.18662068247795105 0.11418572813272476 0.1270817071199417 1 0.47086650133132935 0 0.11861134320497513 0 0.0 0 0.0 0.17711219191551208 1.2111425399780273 -0.08284486830234528 0.9780877232551575 0.07745597511529922 0.19315165281295776 0.11920919269323349 0.2266269475221634 1 0.6505640745162964 0 0.27260327339172363 0 0.0 0 0.0 0.21954664587974548 1.2720890045166016 -0.26756638288497925 0.9747001528739929 0.22016052901744843 -0.038422804325819016 0.026100318878889084 0.1768089085817337 1 0.5512939095497131 0 0.05323823541402817 0 0.0 0 0.0 0.17758521437644958 1.0509424209594727 -0.009452779777348042 0.9080782532691956 -0.1265297383069992 -0.39918211102485657 0.13626915216445923 0.3208780884742737 0 0.7504677176475525 1 0.16195771098136902 5 0.05459079146385193 2 0.0 0.17734870314598083 1.1222507953643799 0.016492163762450218 0.9736624956130981 0.07391583174467087 -0.21564379334449768 0.15870711207389832 0.2861701548099518 0 0.7400460243225098 1 0.2110891044139862 5 0.021712277084589005 2 0.0 0.23453930020332336 1.0399465560913086 0.12781919538974762 0.9630115628242493 0.15222632884979248 -0.2221747487783432 0.2123546004295349 0.34633561968803406 0 0.7073097229003906 5 0.15077143907546997 1 0.04978937283158302 2 0.004751469939947128 0.0 1.3340036869049072 0.3454495668411255 0.0 0.8117618560791016 0.5839411616325378 0.3762849271297455 0.1762322634458542 0 0.15578706562519073 1 0.05526821315288544 2 0.030873998999595642 0 0.0 0.08727402985095978 1.2957605123519897 0.34337759017944336 0.4752952754497528 0.6862391829490662 0.5505844354629517 0.3502945005893707 0.2176021784543991 0 0.1636802703142166 2 0.06262505799531937 1 0.050292082130908966 0 0.0 0.07297612726688385 1.3934298753738403 0.16687017679214478 0.4526505470275879 0.8392895460128784 0.3011261224746704 0.27515244483947754 0.15112540125846863 0 0.46099191904067993 1 0.19868381321430206 2 0.00027996301651000977 0 0.0 0.06145928055047989 1.0601720809936523 0.5009114146232605 0.7973570823669434 0.13812677562236786 0.5874508023262024 0.4337987005710602 0.340542733669281 2 0.3894650638103485 0 0.0 0 0.0 0 0.0 0.15384304523468018 0.9721025228500366 0.4255926311016083 0.7845393419265747 0.012146366760134697 0.6199224591255188 0.37392598390579224 0.3897009491920471 0 0.2848208546638489 5 0.23368224501609802 9 0.17045892775058746 2 0.005570483859628439 0.1461862027645111 1.0710813999176025 0.3844836950302124 0.808252215385437 0.17184972763061523 0.5631580352783203 0.3577803373336792 0.3372943699359894 0 0.205034539103508 5 0.10197971016168594 9 0.05613459274172783 2 0.03635368496179581 0.23453930020332336 1.0399465560913086 0.12781919538974762 0.9630115628242493 0.15222632884979248 -0.2221747487783432 0.2123546004295349 0.34633561968803406 0 0.7073097229003906 5 0.15077143907546997 1 0.04978937283158302 2 0.004751469939947128 0.23453930020332336 0.9702152013778687 0.2602241337299347 0.922513484954834 0.1750236451625824 0.34394359588623047 0.278250515460968 0.390413373708725 0 0.49000686407089233 5 0.30810508131980896 9 0.014790344052016735 6 0.01452652644366026 0.27550312876701355 0.891650915145874 0.1857611984014511 0.9843134880065918 0.15448468923568726 -0.08484145998954773 0.2322322577238083 0.43014711141586304 5 0.6623887419700623 0 0.23774738609790802 6 0.02405529096722603 2 0.0070293257012963295 0.17454805970191956 1.2118858098983765 0.34130558371543884 0.8105410933494568 0.3488875925540924 0.47038179636001587 0.3298243582248688 0.2703784704208374 0 0.21865041553974152 2 0.04487593099474907 1 0.04441479220986366 5 0.026416389271616936 0.1461862027645111 1.0710813999176025 0.3844836950302124 0.808252215385437 0.17184972763061523 0.5631580352783203 0.3577803373336792 0.3372943699359894 0 0.205034539103508 5 0.10197971016168594 9 0.05613459274172783 2 0.03635368496179581 0.2174592912197113 1.1028785705566406 0.2627961039543152 0.9561144113540649 0.17743460834026337 0.23300881683826447 0.28516799211502075 0.32168421149253845 0 0.5695722103118896 5 0.11019442975521088 1 0.029866231605410576 2 0.00028992959414608777 0.1461862027645111 1.0710813999176025 0.3844836950302124 0.808252215385437 0.17184972763061523 0.5631580352783203 0.3577803373336792 0.3372943699359894 0 0.205034539103508 5 0.10197971016168594 9 0.05613459274172783 2 0.03635368496179581 0.15384304523468018 0.9721025228500366 0.4255926311016083 0.7845393419265747 0.012146366760134697 0.6199224591255188 0.37392598390579224 0.3897009491920471 0 0.2848208546638489 5 0.23368224501609802 9 0.17045892775058746 2 0.005570483859628439 0.23453930020332336 0.9702152013778687 0.2602241337299347 0.922513484954834 0.1750236451625824 0.34394359588623047 0.278250515460968 0.390413373708725 0 0.49000686407089233 5 0.30810508131980896 9 0.014790344052016735 6 0.01452652644366026 0.19692060351371765 0.6521245837211609 0.3191433846950531 0.23175756633281708 -0.5444197058677673 0.8061159253120422 0.31354808807373047 0.5612506866455078 5 0.6037587523460388 6 0.2468358874320984 9 0.06982867419719696 0 0.03735736384987831 0.23106297850608826 0.49126142263412476 0.25890085101127625 0.01269569993019104 -0.28205206990242004 0.9592882990837097 0.26937639713287354 0.6458678245544434 6 0.7228800058364868 7 0.17418056726455688 5 0.08285880833864212 0 0.0 0.28093862533569336 0.5757372379302979 0.21273201704025269 0.9537339210510254 -0.05871761217713356 0.2947782874107361 0.23695819079875946 0.5966961979866028 6 0.7957403063774109 5 0.1119142472743988 7 0.07978744804859161 0 0.0 0.2720791697502136 0.7299654483795166 0.11808101087808609 0.9231238961219788 0.09189122915267944 -0.3733329176902771 0.19017235934734344 0.5118117332458496 5 0.7446416020393372 6 0.1995791345834732 0 0.022359486669301987 0 0.0 0.27312296628952026 0.7278225421905518 0.2726402282714844 0.8949247598648071 -0.053621020168066025 0.442945659160614 0.2700149416923523 0.5173874497413635 5 0.5454463958740234 6 0.39267078042030334 0 0.01460160594433546 2 0.0 0.28093862533569336 0.5757372379302979 0.21273201704025269 0.9537339210510254 -0.05871761217713356 0.2947782874107361 0.23695819079875946 0.5966961979866028 6 0.7957403063774109 5 0.1119142472743988 7 0.07978744804859161 0 0.0 0.18157455325126648 0.6501905918121338 0.005674920976161957 0.335276335477829 -0.02075258642435074 -0.9418622255325317 0.10874716937541962 0.547910213470459 6 0.7585892677307129 5 0.17383593320846558 0 0.0 0 0.0 0.2720791697502136 0.7299654483795166 0.11808101087808609 0.9231238961219788 0.09189122915267944 -0.3733329176902771 0.19017235934734344 0.5118117332458496 5 0.7446416020393372 6 0.1995791345834732 0 0.022359486669301987 0 0.0 0.26951444149017334 0.581256628036499 0.0984039455652237 0.9248329401016235 0.04589983820915222 -0.37754449248313904 0.17511127889156342 0.5908189415931702 6 0.8896211981773376 7 0.05666887015104294 5 0.0470425970852375 0 0.0 0.23106297850608826 0.49126142263412476 0.25890085101127625 0.01269569993019104 -0.28205206990242004 0.9592882990837097 0.26937639713287354 0.6458678245544434 6 0.7228800058364868 7 0.17418056726455688 5 0.08285880833864212 0 0.0 0.22996719181537628 0.3549819588661194 0.21869893372058868 0.035431988537311554 -0.23514512181282043 0.9713125824928284 0.24566324055194855 0.7194404006004333 7 0.8741137981414795 6 0.10180454701185226 0 0.0 0 0.0 0.27883782982826233 0.4228806495666504 0.18713346123695374 0.938962996006012 -0.1031220406293869 0.32813501358032227 0.219543918967247 0.6785994172096252 7 0.8290210962295532 6 0.15059085190296173 0 0.0 0 0.0 0.28093862533569336 0.5757372379302979 0.21273201704025269 0.9537339210510254 -0.05871761217713356 0.2947782874107361 0.23695819079875946 0.5966961979866028 6 0.7957403063774109 5 0.1119142472743988 7 0.07978744804859161 0 0.0 0.27883782982826233 0.4228806495666504 0.18713346123695374 0.938962996006012 -0.1031220406293869 0.32813501358032227 0.219543918967247 0.6785994172096252 7 0.8290210962295532 6 0.15059085190296173 0 0.0 0 0.0 0.2707471251487732 0.4457245469093323 0.09905719757080078 0.9538865089416504 0.043977171182632446 -0.29688405990600586 0.17186789214611053 0.6645772457122803 7 0.9251940250396729 6 0.06983630359172821 0 0.0 0 0.0 0.20572468638420105 0.5131307244300842 -0.0020905807614326477 0.2683492600917816 -0.022766808047890663 -0.9630420804023743 0.10834519565105438 0.6240481734275818 6 0.8090380430221558 7 0.16335545480251312 0 0.0 0 0.0 0.26951444149017334 0.581256628036499 0.0984039455652237 0.9248329401016235 0.04589983820915222 -0.37754449248313904 0.17511127889156342 0.5908189415931702 6 0.8896211981773376 7 0.05666887015104294 5 0.0470425970852375 0 0.0 0.2707471251487732 0.4457245469093323 0.09905719757080078 0.9538865089416504 0.043977171182632446 -0.29688405990600586 0.17186789214611053 0.6645772457122803 7 0.9251940250396729 6 0.06983630359172821 0 0.0 0 0.0 0.22996719181537628 0.3549819588661194 0.21869893372058868 0.035431988537311554 -0.23514512181282043 0.9713125824928284 0.24566324055194855 0.7194404006004333 7 0.8741137981414795 6 0.10180454701185226 0 0.0 0 0.0 0.2353973239660263 0.23234236240386963 0.17769855260849 0.2641071677207947 -0.28104496002197266 0.922605037689209 0.21930597722530365 0.7849949598312378 7 0.9059193730354309 8 0.08363302052021027 0 0.0 0 0.0 0.2784595489501953 0.2965812683105469 0.1400669515132904 0.9597155451774597 -0.10385448485612869 0.2609942853450775 0.19252367317676544 0.7464392781257629 7 0.967033863067627 0 0.0 0 0.0 0 0.0 0.2707471251487732 0.4457245469093323 0.09905719757080078 0.9538865089416504 0.043977171182632446 -0.29688405990600586 0.17186789214611053 0.6645772457122803 7 0.9251940250396729 6 0.06983630359172821 0 0.0 0 0.0 0.27883782982826233 0.4228806495666504 0.18713346123695374 0.938962996006012 -0.1031220406293869 0.32813501358032227 0.219543918967247 0.6785994172096252 7 0.8290210962295532 6 0.15059085190296173 0 0.0 0 0.0 0.2784595489501953 0.2965812683105469 0.1400669515132904 0.9597155451774597 -0.10385448485612869 0.2609942853450775 0.19252367317676544 0.7464392781257629 7 0.967033863067627 0 0.0 0 0.0 0 0.0 0.22422879934310913 0.414276123046875 0.015284525230526924 0.3885311484336853 0.034516435116529465 -0.9207739233970642 0.11860677599906921 0.6787413358688354 7 0.9109067320823669 6 0.0850052535533905 0 0.0 0 0.0 0.2707471251487732 0.4457245469093323 0.09905719757080078 0.9538865089416504 0.043977171182632446 -0.29688405990600586 0.17186789214611053 0.6645772457122803 7 0.9251940250396729 6 0.06983630359172821 0 0.0 0 0.0 0.27060168981552124 0.31022095680236816 0.05954404175281525 0.9107333421707153 0.04211554303765297 -0.4108096659183502 0.1486281454563141 0.7380485534667969 7 0.9850865006446838 0 0.0 0 0.0 0 0.0 0.2353973239660263 0.23234236240386963 0.17769855260849 0.2641071677207947 -0.28104496002197266 0.922605037689209 0.21930597722530365 0.7849949598312378 7 0.9059193730354309 8 0.08363302052021027 0 0.0 0 0.0 0.24138523638248444 0.1334514617919922 0.1541205644607544 0.37720876932144165 -0.20023193955421448 0.904202401638031 0.20311272144317627 0.8384818434715271 7 0.5651088356971741 8 0.4341517984867096 0 0.0 0 0.0 0.27068033814430237 0.17515099048614502 0.10558918118476868 0.9747001528739929 -0.030365917831659317 0.2213507443666458 0.17252767086029053 0.8140662312507629 7 0.8328282237052917 8 0.16480152308940887 0 0.0 0 0.0 0.27060168981552124 0.31022095680236816 0.05954404175281525 0.9107333421707153 0.04211554303765297 -0.4108096659183502 0.1486281454563141 0.7380485534667969 7 0.9850865006446838 0 0.0 0 0.0 0 0.0 0.2784595489501953 0.2965812683105469 0.1400669515132904 0.9597155451774597 -0.10385448485612869 0.2609942853450775 0.19252367317676544 0.7464392781257629 7 0.967033863067627 0 0.0 0 0.0 0 0.0 0.27068033814430237 0.17515099048614502 0.10558918118476868 0.9747001528739929 -0.030365917831659317 0.2213507443666458 0.17252767086029053 0.8140662312507629 7 0.8328282237052917 8 0.16480152308940887 0 0.0 0 0.0 0.21422770619392395 0.2696647644042969 0.002181949093937874 0.03393658250570297 0.06097598373889923 -0.9975585341453552 0.10336703807115555 0.7562169432640076 7 0.95918208360672 8 0.022087600082159042 0 0.0 0 0.0 0.27060168981552124 0.31022095680236816 0.05954404175281525 0.9107333421707153 0.04211554303765297 -0.4108096659183502 0.1486281454563141 0.7380485534667969 7 0.9850865006446838 0 0.0 0 0.0 0 0.0 0.2632824182510376 0.192702054977417 0.030293196439743042 0.8633686304092407 0.13098543882369995 -0.48722800612449646 0.129202738404274 0.8032676577568054 7 0.8625421524047852 8 0.13671985268592834 0 0.0 0 0.0 0.2720791697502136 0.7299654483795166 0.11808101087808609 0.9231238961219788 0.09189122915267944 -0.3733329176902771 0.19017235934734344 0.5118117332458496 5 0.7446416020393372 6 0.1995791345834732 0 0.022359486669301987 0 0.0 0.18157455325126648 0.6501905918121338 0.005674920976161957 0.335276335477829 -0.02075258642435074 -0.9418622255325317 0.10874716937541962 0.547910213470459 6 0.7585892677307129 5 0.17383593320846558 0 0.0 0 0.0 0.16467930376529694 0.764995813369751 -0.0035517215728759766 0.6215704679489136 -0.09994811564683914 -0.7769402265548706 0.10110408067703247 0.4813825190067291 6 0.42210859060287476 5 0.36726126074790955 0 0.15537992119789124 0 0.0 0.27312296628952026 0.7278225421905518 0.2726402282714844 0.8949247598648071 -0.053621020168066025 0.442945659160614 0.2700149416923523 0.5173874497413635 5 0.5454463958740234 6 0.39267078042030334 0 0.01460160594433546 2 0.0 0.2720791697502136 0.7299654483795166 0.11808101087808609 0.9231238961219788 0.09189122915267944 -0.3733329176902771 0.19017235934734344 0.5118117332458496 5 0.7446416020393372 6 0.1995791345834732 0 0.022359486669301987 0 0.0 0.27550312876701355 0.891650915145874 0.1857611984014511 0.9843134880065918 0.15448468923568726 -0.08484145998954773 0.2322322577238083 0.43014711141586304 5 0.6623887419700623 0 0.23774738609790802 6 0.02405529096722603 2 0.0070293257012963295 0.19692060351371765 0.6521245837211609 0.3191433846950531 0.23175756633281708 -0.5444197058677673 0.8061159253120422 0.31354808807373047 0.5612506866455078 5 0.6037587523460388 6 0.2468358874320984 9 0.06982867419719696 0 0.03735736384987831 0.27312296628952026 0.7278225421905518 0.2726402282714844 0.8949247598648071 -0.053621020168066025 0.442945659160614 0.2700149416923523 0.5173874497413635 5 0.5454463958740234 6 0.39267078042030334 0 0.01460160594433546 2 0.0 0.22658583521842957 0.8450055122375488 0.3317200243473053 0.7574999332427979 0.09625537693500519 0.6456496119499207 0.3105680048465729 0.4587601125240326 5 0.6072814464569092 0 0.1840784102678299 6 0.09625957161188126 9 0.0649503543972969 0.23453930020332336 0.9702152013778687 0.2602241337299347 0.922513484954834 0.1750236451625824 0.34394359588623047 0.278250515460968 0.390413373708725 0 0.49000686407089233 5 0.30810508131980896 9 0.014790344052016735 6 0.01452652644366026 0.14257946610450745 0.8637868762016296 0.4032813608646393 0.6905118227005005 -0.1661732792854309 0.7039399147033691 0.36863672733306885 0.4478047788143158 5 0.4740718603134155 0 0.22005127370357513 9 0.13825324177742004 6 0.051402490586042404 0.22658583521842957 0.8450055122375488 0.3317200243473053 0.7574999332427979 0.09625537693500519 0.6456496119499207 0.3105680048465729 0.4587601125240326 5 0.6072814464569092 0 0.1840784102678299 6 0.09625957161188126 9 0.0649503543972969 0.14257946610450745 0.8637868762016296 0.4032813608646393 0.6905118227005005 -0.1661732792854309 0.7039399147033691 0.36863672733306885 0.4478047788143158 5 0.4740718603134155 0 0.22005127370357513 9 0.13825324177742004 6 0.051402490586042404 0.23453930020332336 0.9702152013778687 0.2602241337299347 0.922513484954834 0.1750236451625824 0.34394359588623047 0.278250515460968 0.390413373708725 0 0.49000686407089233 5 0.30810508131980896 9 0.014790344052016735 6 0.01452652644366026 0.15384304523468018 0.9721025228500366 0.4255926311016083 0.7845393419265747 0.012146366760134697 0.6199224591255188 0.37392598390579224 0.3897009491920471 0 0.2848208546638489 5 0.23368224501609802 9 0.17045892775058746 2 0.005570483859628439 0.14257946610450745 0.8637868762016296 0.4032813608646393 0.6905118227005005 -0.1661732792854309 0.7039399147033691 0.36863672733306885 0.4478047788143158 5 0.4740718603134155 0 0.22005127370357513 9 0.13825324177742004 6 0.051402490586042404 0.0 0.857164740562439 0.5244574546813965 0.0 -0.2601702809333801 0.965544581413269 0.47005921602249146 0.45042261481285095 9 0.27887073159217834 5 0.27887073159217834 0 0.22324655950069427 2 0.006800635252147913 0.0700145810842514 0.7434864640235901 0.4208555817604065 0.34348583221435547 -0.5904721021652222 0.730277419090271 0.4059433937072754 0.5164225101470947 9 0.3594251573085785 0 0.33582302927970886 5 0.23320455849170685 6 0.009845871478319168 0.0 0.956256628036499 0.9388030171394348 0.0 0.9941099286079407 0.10831019282341003 0.9283884763717651 0.3782193958759308 4 0.9637963771820068 3 0.022601444274187088 0 0.0 0 0.0 0.04524477198719978 0.9055635929107666 0.9612237811088562 0.99981689453125 -0.011352885514497757 -0.013397625647485256 0.8992534875869751 0.4032728672027588 4 0.9947757720947266 0 0.0 0 0.0 0 0.0 0.04179486632347107 0.9364920258522034 0.7827037572860718 0.99993896484375 -0.010345774702727795 0.00030518509447574615 0.8751721382141113 0.30800822377204895 3 0.9776166081428528 4 0.0011483989655971527 0 0.0 0 0.0 0.0 0.8555480241775513 0.9201857447624207 0.0 -0.9908444285392761 -0.1347697377204895 0.8575089573860168 0.39543601870536804 4 0.9604564309120178 3 0.029231343418359756 0 0.0 0 0.0 0.0 0.8914740085601807 0.7481175661087036 0.0 -0.9678640365600586 -0.25135043263435364 0.8374303579330444 0.3030059337615967 3 0.9701143503189087 0 0.0 0 0.0 0 0.0 0.04179486632347107 0.9364920258522034 0.7827037572860718 0.99993896484375 -0.010345774702727795 0.00030518509447574615 0.8751721382141113 0.30800822377204895 3 0.9776166081428528 4 0.0011483989655971527 0 0.0 0 0.0 0.043747562915086746 0.9720137119293213 0.6651729345321655 0.9987487196922302 -0.040162358433008194 0.028748435899615288 0.8648558259010315 0.24106882512569427 3 0.904050886631012 2 0.09398713707923889 0 0.0 0 0.0 0.0 1.0387544631958008 0.6412699818611145 0.0 0.8650471568107605 0.5016327500343323 0.9012990593910217 0.21379756927490234 2 0.7522167563438416 3 0.18018202483654022 0 0.0 0 0.0 0.0 0.9917649626731873 0.767984926700592 0.0 0.9606006145477295 0.2778710424900055 0.9070184826850891 0.2867380976676941 3 0.9851999282836914 0 0.0 0 0.0 0 0.0 0.043747562915086746 0.9720137119293213 0.6651729345321655 0.9987487196922302 -0.040162358433008194 0.028748435899615288 0.8648558259010315 0.24106882512569427 3 0.904050886631012 2 0.09398713707923889 0 0.0 0 0.0 0.04179486632347107 0.9364920258522034 0.7827037572860718 0.99993896484375 -0.010345774702727795 0.00030518509447574615 0.8751721382141113 0.30800822377204895 3 0.9776166081428528 4 0.0011483989655971527 0 0.0 0 0.0 0.0 0.8914740085601807 0.7481175661087036 0.0 -0.9678640365600586 -0.25135043263435364 0.8374303579330444 0.3030059337615967 3 0.9701143503189087 0 0.0 0 0.0 0 0.0 0.0 0.9691419005393982 0.525084912776947 0.0 -0.6431470513343811 0.765709400177002 0.8176729083061218 0.17667889595031738 3 0.08929336071014404 9 0.04753170534968376 5 0.04753170534968376 0 0.04456418380141258 0.06145928055047989 1.0601720809936523 0.5009114146232605 0.7973570823669434 0.13812677562236786 0.5874508023262024 0.8645750880241394 0.13949787616729736 2 0.3894650638103485 0 0.0 0 0.0 0 0.0 0.043747562915086746 0.9720137119293213 0.6651729345321655 0.9987487196922302 -0.040162358433008194 0.028748435899615288 0.8648558259010315 0.24106882512569427 3 0.904050886631012 2 0.09398713707923889 0 0.0 0 0.0 0.0 1.0387544631958008 0.6412699818611145 0.0 0.8650471568107605 0.5016327500343323 0.9012990593910217 0.21379756927490234 2 0.7522167563438416 3 0.18018202483654022 0 0.0 0 0.0 0.043747562915086746 0.9720137119293213 0.6651729345321655 0.9987487196922302 -0.040162358433008194 0.028748435899615288 0.8648558259010315 0.24106882512569427 3 0.904050886631012 2 0.09398713707923889 0 0.0 0 0.0 0.06145928055047989 1.0601720809936523 0.5009114146232605 0.7973570823669434 0.13812677562236786 0.5874508023262024 0.8645750880241394 0.13949787616729736 2 0.3894650638103485 0 0.0 0 0.0 0 0.0 0.0650172010064125 1.190718173980713 0.442444771528244 0.5703604221343994 0.43330180644989014 0.6977751851081848 0.9024972915649414 0.07288584858179092 2 0.05483977124094963 0 0.0 0 0.0 0 0.0 0.0 1.2170524597167969 0.4608973264694214 0.0 0.6628314852714539 0.748741090297699 0.9399983286857605 0.08305945992469788 2 0.008227117359638214 0 0.0 0 0.0 0 0.0 0.0 1.0994129180908203 0.5527057647705078 0.0 0.6721396446228027 0.7404095530509949 0.9092386364936829 0.15684354305267334 2 0.008453886024653912 0 0.0 0 0.0 0 0.0 0.05299364775419235 0.9086697101593018 1.127077579498291 0.9984740614891052 0.004181035794317722 0.05499435216188431 0.9316335320472717 0.4823167026042938 4 0.9999160170555115 0 0.0 0 0.0 0 0.0 0.04474841430783272 0.9156687259674072 1.1921391487121582 0.9490646123886108 0.0554216131567955 0.3100985884666443 0.9444119334220886 0.5085054636001587 4 0.9999980926513672 0 0.0 0 0.0 0 0.0 0.0 0.8668436408042908 1.1575727462768555 0.0 -0.9759819507598877 0.21778008341789246 0.9091423749923706 0.51222825050354 4 0.9999624490737915 0 0.0 0 0.0 0 0.0 0.05299364775419235 0.9086697101593018 1.127077579498291 0.9984740614891052 0.004181035794317722 0.05499435216188431 0.9316335320472717 0.4823167026042938 4 0.9999160170555115 0 0.0 0 0.0 0 0.0 0.0 0.9533488154411316 1.0950424671173096 0.0 0.9988097548484802 -0.048158206045627594 0.9595854878425598 0.4558004140853882 4 0.9995507597923279 0 0.0 0 0.0 0 0.0 0.0 0.9566136598587036 1.1525006294250488 0.0 0.999267578125 0.03787346929311752 0.969742476940155 0.4851236343383789 4 0.9999452829360962 0 0.0 0 0.0 0 0.0 0.04474841430783272 0.9156687259674072 1.1921391487121582 0.9490646123886108 0.0554216131567955 0.3100985884666443 0.9444119334220886 0.5085054636001587 4 0.9999980926513672 0 0.0 0 0.0 0 0.0 0.0 0.9566136598587036 1.1525006294250488 0.0 0.999267578125 0.03787346929311752 0.969742476940155 0.4851236343383789 4 0.9999452829360962 0 0.0 0 0.0 0 0.0 0.0 0.9405403137207031 1.2368535995483398 0.0 0.5934019088745117 0.8048951625823975 0.9683864712715149 0.5302330851554871 4 0.9999966025352478 0 0.0 0 0.0 0 0.0 0.11636289954185486 1.0498738288879395 -0.43372729420661926 0.37830743193626404 -0.8667256832122803 -0.3249916136264801 0.7156935930252075 0.7401500344276428 1 0.4745221734046936 0 0.016028281301259995 0 0.0 0 0.0 0.18298302590847015 1.097515344619751 -0.457849383354187 0.8365123271942139 -0.36155277490615845 -0.4116947054862976 0.6893323659896851 0.7009080648422241 1 0.5162564516067505 0 0.0 0 0.0 0 0.0 0.18298302590847015 1.0755360126495361 -0.3897135853767395 0.8033387064933777 -0.5719473958015442 -0.16568498313426971 0.7276731133460999 0.6964173316955566 1 0.514851450920105 0 0.025219354778528214 0 0.0 0 0.0 0.09310946613550186 1.0738946199417114 -0.5040848851203918 0.31342509388923645 -0.7467879056930542 -0.5865352153778076 0.578464150428772 0.07731097936630249 1 0.4915311634540558 0 0.0 0 0.0 0 0.0 0.11392863094806671 1.1170620918273926 -0.5390962958335876 0.45652636885643005 -0.3259071707725525 -0.8278450965881348 0.6125847101211548 0.13550977408885956 1 0.5385183095932007 0 0.0 0 0.0 0 0.0 0.18298302590847015 1.097515344619751 -0.457849383354187 0.8365123271942139 -0.36155277490615845 -0.4116947054862976 0.5151460766792297 0.1754748821258545 1 0.5162564516067505 0 0.0 0 0.0 0 0.0 0.19168177247047424 1.123900294303894 -0.138879656791687 0.8033081889152527 -0.43974119424819946 0.40159305930137634 0.841719388961792 0.630566418170929 1 0.7593101859092712 0 0.2120208442211151 0 0.0 0 0.0 0.17711219191551208 1.2111425399780273 -0.08284486830234528 0.9780877232551575 0.07745597511529922 0.19315165281295776 0.8621803522109985 0.5771147608757019 1 0.6505640745162964 0 0.27260327339172363 0 0.0 0 0.0 0.15271435678005219 1.1326109170913696 -0.08103625476360321 0.9580675959587097 -0.28070923686027527 0.05710013210773468 0.8785715699195862 0.6217155456542969 1 0.6765074133872986 0 0.47961559891700745 0 0.0 0 0.0 0.17734870314598083 1.1222507953643799 0.016492163762450218 0.9736624956130981 0.07391583174467087 -0.21564379334449768 0.15870711207389832 0.2861701548099518 0 0.7400460243225098 1 0.2110891044139862 5 0.021712277084589005 2 0.0 0.17711219191551208 1.193559169769287 0.0424371063709259 0.9813531637191772 0.1826837956905365 -0.05929746478796005 0.18139240145683289 0.2521224319934845 0 0.7151136994361877 1 0.23585881292819977 2 0.016049621626734734 0 0.0 0.19893279671669006 1.1545631885528564 0.1498781144618988 0.9536118507385254 0.28800317645072937 -0.0874660462141037 0.23297777771949768 0.28563162684440613 0 0.7194539904594421 1 0.08959674090147018 5 0.05332915484905243 2 0.01339690014719963 0.18298302590847015 1.0663853883743286 -0.31631630659103394 0.7708975672721863 -0.6364635229110718 0.02456739917397499 0.7648314833641052 0.6872797608375549 1 0.5746728181838989 0 0.07987833023071289 0 0.0 0 0.0 0.18298302590847015 1.0755360126495361 -0.3897135853767395 0.8033387064933777 -0.5719473958015442 -0.16568498313426971 0.7276731133460999 0.6964173316955566 1 0.514851450920105 0 0.025219354778528214 0 0.0 0 0.0 0.2077341377735138 1.1319550275802612 -0.30893459916114807 0.963957667350769 -0.23200170695781708 -0.13016144931316376 0.7566397786140442 0.6517723798751831 1 0.6332035660743713 0 0.06388173252344131 0 0.0 0 0.0 0.240505188703537 1.1706992387771606 -0.23119430243968964 0.9902951121330261 -0.1357768476009369 0.029206212610006332 0.7882214188575745 0.6180115342140198 1 0.6799764037132263 0 0.0969119518995285 0 0.0 0 0.0 0.19168177247047424 1.123900294303894 -0.138879656791687 0.8033081889152527 -0.43974119424819946 0.40159305930137634 0.841719388961792 0.630566418170929 1 0.7593101859092712 0 0.2120208442211151 0 0.0 0 0.0 0.19168177247047424 1.1063168048858643 -0.18283823132514954 0.7293313145637512 -0.6620075106620789 0.17261269688606262 0.8232441544532776 0.6466988325119019 1 0.7554553151130676 0 0.16079266369342804 0 0.0 0 0.0 0.240505188703537 1.1706992387771606 -0.23119430243968964 0.9902951121330261 -0.1357768476009369 0.029206212610006332 0.7882214188575745 0.6180115342140198 1 0.6799764037132263 0 0.0969119518995285 0 0.0 0 0.0 0.21954664587974548 1.2720890045166016 -0.26756638288497925 0.9747001528739929 0.22016052901744843 -0.038422804325819016 0.7538788914680481 0.5733580589294434 1 0.5512939095497131 0 0.05323823541402817 0 0.0 0 0.0 0.17711219191551208 1.2111425399780273 -0.08284486830234528 0.9780877232551575 0.07745597511529922 0.19315165281295776 0.8621803522109985 0.5771147608757019 1 0.6505640745162964 0 0.27260327339172363 0 0.0 0 0.0 0.19536322355270386 1.1583302021026611 -0.38174155354499817 0.9667958617210388 0.013214514590799809 -0.2551042139530182 0.7145208716392517 0.653191328048706 1 0.5957530736923218 0 0.01954641565680504 0 0.0 0 0.0 0.2077341377735138 1.1319550275802612 -0.30893459916114807 0.963957667350769 -0.23200170695781708 -0.13016144931316376 0.7566397786140442 0.6517723798751831 1 0.6332035660743713 0 0.06388173252344131 0 0.0 0 0.0 0.18298302590847015 1.0755360126495361 -0.3897135853767395 0.8033387064933777 -0.5719473958015442 -0.16568498313426971 0.7276731133460999 0.6964173316955566 1 0.514851450920105 0 0.025219354778528214 0 0.0 0 0.0 0.2077341377735138 1.1319550275802612 -0.30893459916114807 0.963957667350769 -0.23200170695781708 -0.13016144931316376 0.7566397786140442 0.6517723798751831 1 0.6332035660743713 0 0.06388173252344131 0 0.0 0 0.0 0.19536322355270386 1.1583302021026611 -0.38174155354499817 0.9667958617210388 0.013214514590799809 -0.2551042139530182 0.7145208716392517 0.653191328048706 1 0.5957530736923218 0 0.01954641565680504 0 0.0 0 0.0 0.21954664587974548 1.2720890045166016 -0.26756638288497925 0.9747001528739929 0.22016052901744843 -0.038422804325819016 0.7538788914680481 0.5733580589294434 1 0.5512939095497131 0 0.05323823541402817 0 0.0 0 0.0 0.1287733018398285 1.2108771800994873 -0.5207679867744446 0.6269417405128479 0.4066286087036133 -0.6644794940948486 0.6418904066085815 0.2361043244600296 1 0.5873615145683289 0 0.0 0 0.0 0 0.0 0.19536322355270386 1.1583302021026611 -0.38174155354499817 0.9667958617210388 0.013214514590799809 -0.2551042139530182 0.4866374433040619 0.2810833156108856 1 0.5957530736923218 0 0.01954641565680504 0 0.0 0 0.0 0.18298302590847015 1.097515344619751 -0.457849383354187 0.8365123271942139 -0.36155277490615845 -0.4116947054862976 0.5151460766792297 0.1754748821258545 1 0.5162564516067505 0 0.0 0 0.0 0 0.0 0.19168177247047424 1.1063168048858643 -0.18283823132514954 0.7293313145637512 -0.6620075106620789 0.17261269688606262 0.8232441544532776 0.6466988325119019 1 0.7554553151130676 0 0.16079266369342804 0 0.0 0 0.0 0.19168177247047424 1.123900294303894 -0.138879656791687 0.8033081889152527 -0.43974119424819946 0.40159305930137634 0.841719388961792 0.630566418170929 1 0.7593101859092712 0 0.2120208442211151 0 0.0 0 0.0 0.1329372525215149 1.081725835800171 -0.11218704283237457 0.8476821184158325 -0.5233924388885498 -0.08630634844303131 0.8733172416687012 0.657466471195221 1 0.7744880318641663 0 0.403382271528244 0 0.0 0 0.0 0.11636289954185486 1.0278944969177246 -0.36559149622917175 0.35953855514526367 -0.9165623784065247 -0.1748405396938324 0.753631055355072 0.7329650521278381 1 0.48844844102859497 0 0.06050974503159523 0 0.0 0 0.0 0.18298302590847015 1.0755360126495361 -0.3897135853767395 0.8033387064933777 -0.5719473958015442 -0.16568498313426971 0.7276731133460999 0.6964173316955566 1 0.514851450920105 0 0.025219354778528214 0 0.0 0 0.0 0.18298302590847015 1.0663853883743286 -0.31631630659103394 0.7708975672721863 -0.6364635229110718 0.02456739917397499 0.7648314833641052 0.6872797608375549 1 0.5746728181838989 0 0.07987833023071289 0 0.0 0 0.0 0.18298302590847015 1.0663853883743286 -0.31631630659103394 0.7708975672721863 -0.6364635229110718 0.02456739917397499 0.7648314833641052 0.6872797608375549 1 0.5746728181838989 0 0.07987833023071289 0 0.0 0 0.0 0.19168177247047424 1.1063168048858643 -0.18283823132514954 0.7293313145637512 -0.6620075106620789 0.17261269688606262 0.8232441544532776 0.6466988325119019 1 0.7554553151130676 0 0.16079266369342804 0 0.0 0 0.0 0.11636289954185486 1.053910732269287 -0.19108946621418 0.5185399651527405 -0.8486281633377075 0.10443434119224548 0.8408097624778748 0.693621814250946 1 0.827496349811554 0 0.24267560243606567 0 0.0 0 0.0 0.0 0.6803773045539856 0.31026414036750793 0.0 -0.9349040389060974 0.35480818152427673 0.4156637191772461 0.5957323312759399 9 0.4312181770801544 5 0.4312181770801544 0 0.0485517717897892 6 0.029864637181162834 0.19692060351371765 0.6521245837211609 0.3191433846950531 0.23175756633281708 -0.5444197058677673 0.8061159253120422 0.31354808807373047 0.5612506866455078 5 0.6037587523460388 6 0.2468358874320984 9 0.06982867419719696 0 0.03735736384987831 0.0700145810842514 0.7434864640235901 0.4208555817604065 0.34348583221435547 -0.5904721021652222 0.730277419090271 0.4059433937072754 0.5164225101470947 9 0.3594251573085785 0 0.33582302927970886 5 0.23320455849170685 6 0.009845871478319168 0.13284938037395477 0.36867111921310425 0.12644071877002716 -0.9558396935462952 -0.032807398587465286 0.2919705808162689 0.5843212604522705 0.7378981113433838 7 0.8813955783843994 6 0.1107533648610115 0 0.0 0 0.0 0.14990682899951935 0.3839050531387329 0.037518344819545746 -0.7688833475112915 -0.0393993966281414 -0.6381420493125916 0.635796308517456 0.7324582934379578 7 0.9107308983802795 6 0.08409671485424042 0 0.0 0 0.0 0.16027027368545532 0.24704813957214355 0.04676051810383797 -0.8637043237686157 -0.0394604317843914 -0.5024262070655823 0.6260561943054199 0.8096365928649902 7 0.9630122780799866 8 0.014977212063968182 0 0.0 0 0.0 0.14990682899951935 0.3839050531387329 0.037518344819545746 -0.7688833475112915 -0.0393993966281414 -0.6381420493125916 0.635796308517456 0.7324582934379578 7 0.9107308983802795 6 0.08409671485424042 0 0.0 0 0.0 0.13284938037395477 0.36867111921310425 0.12644071877002716 -0.9558396935462952 -0.032807398587465286 0.2919705808162689 0.5843212604522705 0.7378981113433838 7 0.8813955783843994 6 0.1107533648610115 0 0.0 0 0.0 0.13148938119411469 0.47692030668258667 0.12428713589906693 -0.9563280344009399 -0.13162633776664734 0.2609332501888275 0.5875352025032043 0.6752210855484009 6 0.8819923400878906 7 0.10448935627937317 0 0.0 0 0.0 0.14394588768482208 0.23762118816375732 0.13662073016166687 -0.8795129060745239 -0.12250129878520966 0.4598223865032196 0.574836015701294 0.8107243776321411 7 0.9305272102355957 8 0.05715407058596611 0 0.0 0 0.0 0.16027027368545532 0.24704813957214355 0.04676051810383797 -0.8637043237686157 -0.0394604317843914 -0.5024262070655823 0.6260561943054199 0.8096365928649902 7 0.9630122780799866 8 0.014977212063968182 0 0.0 0 0.0 0.15695250034332275 0.13945317268371582 0.05766453221440315 -0.9262672662734985 0.10943937301635742 -0.36057618260383606 0.613688588142395 0.8671387434005737 7 0.7702589631080627 8 0.229200541973114 0 0.0 0 0.0 0.14543934166431427 0.49590951204299927 0.026219138875603676 -0.7388530969619751 -0.1509750634431839 -0.6567277908325195 0.6462750434875488 0.6684547066688538 6 0.8432952761650085 7 0.1331702321767807 0 0.0 0 0.0 0.13148938119411469 0.47692030668258667 0.12428713589906693 -0.9563280344009399 -0.13162633776664734 0.2609332501888275 0.5875352025032043 0.6752210855484009 6 0.8819923400878906 7 0.10448935627937317 0 0.0 0 0.0 0.09827211499214172 0.6246875524520874 0.11954677850008011 -0.6931974291801453 -0.7169103026390076 0.07397686690092087 0.5954965353012085 0.5888605713844299 6 0.836905837059021 5 0.07508403807878494 9 0.04053134843707085 0 0.0 0.09827211499214172 0.6246875524520874 0.11954677850008011 -0.6931974291801453 -0.7169103026390076 0.07397686690092087 0.3315928876399994 0.6813181042671204 6 0.836905837059021 5 0.07508403807878494 9 0.04053134843707085 0 0.0 0.0 0.6631669402122498 0.12123018503189087 0.0 -0.9987182021141052 -0.05050813406705856 0.3871926963329315 0.6944447755813599 9 0.30585911870002747 5 0.30585911870002747 10 0.179423525929451 6 0.179423525929451 0.0 0.6821010708808899 0.023523900657892227 0.0 -0.7949461340904236 -0.6066469550132751 0.3776485323905945 0.7474589347839355 9 0.252836138010025 5 0.252836138010025 10 0.18387460708618164 6 0.18387460708618164 0.0 0.6803773045539856 0.31026414036750793 0.0 -0.9349040389060974 0.35480818152427673 0.4156637191772461 0.5957323312759399 9 0.4312181770801544 5 0.4312181770801544 0 0.0485517717897892 6 0.029864637181162834 0.0 0.6631669402122498 0.12123018503189087 0.0 -0.9987182021141052 -0.05050813406705856 0.3871926963329315 0.6944447755813599 9 0.30585911870002747 5 0.30585911870002747 10 0.179423525929451 6 0.179423525929451 0.09827211499214172 0.6246875524520874 0.11954677850008011 -0.6931974291801453 -0.7169103026390076 0.07397686690092087 0.3315928876399994 0.6813181042671204 6 0.836905837059021 5 0.07508403807878494 9 0.04053134843707085 0 0.0 0.21539007127285004 0.1667546033859253 -0.007906094193458557 -0.14654988050460815 0.3664967715740204 -0.9187902212142944 0.6632874011993408 0.8602080941200256 8 0.8476832509040833 7 0.15203344821929932 0 0.0 0 0.0 0.15695250034332275 0.13945317268371582 0.05766453221440315 -0.9262672662734985 0.10943937301635742 -0.36057618260383606 0.613688588142395 0.8671387434005737 7 0.7702589631080627 8 0.229200541973114 0 0.0 0 0.0 0.16027027368545532 0.24704813957214355 0.04676051810383797 -0.8637043237686157 -0.0394604317843914 -0.5024262070655823 0.6260561943054199 0.8096365928649902 7 0.9630122780799866 8 0.014977212063968182 0 0.0 0 0.0 0.21422770619392395 0.2696647644042969 0.002181949093937874 0.03393658250570297 0.06097598373889923 -0.9975585341453552 0.6666253805160522 0.8024744987487793 7 0.95918208360672 8 0.022087600082159042 0 0.0 0 0.0 0.16027027368545532 0.24704813957214355 0.04676051810383797 -0.8637043237686157 -0.0394604317843914 -0.5024262070655823 0.6260561943054199 0.8096365928649902 7 0.9630122780799866 8 0.014977212063968182 0 0.0 0 0.0 0.14990682899951935 0.3839050531387329 0.037518344819545746 -0.7688833475112915 -0.0393993966281414 -0.6381420493125916 0.635796308517456 0.7324582934379578 7 0.9107308983802795 6 0.08409671485424042 0 0.0 0 0.0 0.22422879934310913 0.414276123046875 0.015284525230526924 0.3885311484336853 0.034516435116529465 -0.9207739233970642 0.6815839409828186 0.7228387594223022 7 0.9109067320823669 6 0.0850052535533905 0 0.0 0 0.0 0.14990682899951935 0.3839050531387329 0.037518344819545746 -0.7688833475112915 -0.0393993966281414 -0.6381420493125916 0.635796308517456 0.7324582934379578 7 0.9107308983802795 6 0.08409671485424042 0 0.0 0 0.0 0.14543934166431427 0.49590951204299927 0.026219138875603676 -0.7388530969619751 -0.1509750634431839 -0.6567277908325195 0.6462750434875488 0.6684547066688538 6 0.8432952761650085 7 0.1331702321767807 0 0.0 0 0.0 0.14543934166431427 0.49590951204299927 0.026219138875603676 -0.7388530969619751 -0.1509750634431839 -0.6567277908325195 0.6462750434875488 0.6684547066688538 6 0.8432952761650085 7 0.1331702321767807 0 0.0 0 0.0 0.11494315415620804 0.6430489420890808 0.021784529089927673 -0.44160282611846924 -0.4353465437889099 -0.7844783067703247 0.651059091091156 0.5829592347145081 6 0.7448842525482178 5 0.13043087720870972 9 0.03415199741721153 0 0.016842413693666458 0.18157455325126648 0.6501905918121338 0.005674920976161957 0.335276335477829 -0.02075258642435074 -0.9418622255325317 0.6889263391494751 0.5882138609886169 6 0.7585892677307129 5 0.17383593320846558 0 0.0 0 0.0 0.14394588768482208 0.23762118816375732 0.13662073016166687 -0.8795129060745239 -0.12250129878520966 0.4598223865032196 0.574836015701294 0.8107243776321411 7 0.9305272102355957 8 0.05715407058596611 0 0.0 0 0.0 0.1377425193786621 0.11639571189880371 0.12225279957056046 -0.8777428269386292 -0.13699759542942047 0.4590594172477722 0.5784492492675781 0.8728861808776855 7 0.5234586596488953 8 0.4755793809890747 0 0.0 0 0.0 0.24138523638248444 0.1334514617919922 0.1541205644607544 0.37720876932144165 -0.20023193955421448 0.904202401638031 0.5243164896965027 0.8715741634368896 7 0.5651088356971741 8 0.4341517984867096 0 0.0 0 0.0 0.22996719181537628 0.3549819588661194 0.21869893372058868 0.035431988537311554 -0.23514512181282043 0.9713125824928284 0.5098583698272705 0.7451364398002625 7 0.8741137981414795 6 0.10180454701185226 0 0.0 0 0.0 0.13284938037395477 0.36867111921310425 0.12644071877002716 -0.9558396935462952 -0.032807398587465286 0.2919705808162689 0.5843212604522705 0.7378981113433838 7 0.8813955783843994 6 0.1107533648610115 0 0.0 0 0.0 0.14394588768482208 0.23762118816375732 0.13662073016166687 -0.8795129060745239 -0.12250129878520966 0.4598223865032196 0.574836015701294 0.8107243776321411 7 0.9305272102355957 8 0.05715407058596611 0 0.0 0 0.0 0.13148938119411469 0.47692030668258667 0.12428713589906693 -0.9563280344009399 -0.13162633776664734 0.2609332501888275 0.5875352025032043 0.6752210855484009 6 0.8819923400878906 7 0.10448935627937317 0 0.0 0 0.0 0.13284938037395477 0.36867111921310425 0.12644071877002716 -0.9558396935462952 -0.032807398587465286 0.2919705808162689 0.5843212604522705 0.7378981113433838 7 0.8813955783843994 6 0.1107533648610115 0 0.0 0 0.0 0.22996719181537628 0.3549819588661194 0.21869893372058868 0.035431988537311554 -0.23514512181282043 0.9713125824928284 0.5098583698272705 0.7451364398002625 7 0.8741137981414795 6 0.10180454701185226 0 0.0 0 0.0 0.09827211499214172 0.6246875524520874 0.11954677850008011 -0.6931974291801453 -0.7169103026390076 0.07397686690092087 0.5954965353012085 0.5888605713844299 6 0.836905837059021 5 0.07508403807878494 9 0.04053134843707085 0 0.0 0.13148938119411469 0.47692030668258667 0.12428713589906693 -0.9563280344009399 -0.13162633776664734 0.2609332501888275 0.5875352025032043 0.6752210855484009 6 0.8819923400878906 7 0.10448935627937317 0 0.0 0 0.0 0.23106297850608826 0.49126142263412476 0.25890085101127625 0.01269569993019104 -0.28205206990242004 0.9592882990837097 0.4915243089199066 0.6694369912147522 6 0.7228800058364868 7 0.17418056726455688 5 0.08285880833864212 0 0.0 0.1329372525215149 1.081725835800171 -0.11218704283237457 0.8476821184158325 -0.5233924388885498 -0.08630634844303131 0.08180608600378036 0.2900291383266449 1 0.7744880318641663 0 0.403382271528244 0 0.0 0 0.0 0.17758521437644958 1.0509424209594727 -0.009452779777348042 0.9080782532691956 -0.1265297383069992 -0.39918211102485657 0.13626915216445923 0.3208780884742737 0 0.7504677176475525 1 0.16195771098136902 5 0.05459079146385193 2 0.0 0.10067398101091385 0.9663213491439819 -0.08786684274673462 0.712576687335968 -0.24292734265327454 -0.6581621766090393 0.06711860746145248 0.3559820055961609 0 0.6806142330169678 1 0.19555994868278503 5 0.04794131591916084 6 0.04703441634774208 0.16467930376529694 0.764995813369751 -0.0035517215728759766 0.6215704679489136 -0.09994811564683914 -0.7769402265548706 0.10110408067703247 0.4813825190067291 6 0.42210859060287476 5 0.36726126074790955 0 0.15537992119789124 0 0.0 0.09191875904798508 0.7384775280952454 -0.004247918725013733 0.11261329799890518 -0.5351725816726685 -0.8371837735176086 0.058216046541929245 0.4974377155303955 6 0.3449857234954834 5 0.3330496847629547 0 0.19796177744865417 9 0.05866539850831032 0.07171060144901276 0.7989503741264343 -0.08710231631994247 0.34336376190185547 -0.4688863754272461 -0.8137760758399963 0.038444168865680695 0.4439431428909302 0 0.5288071632385254 6 0.14961421489715576 5 0.14801231026649475 9 0.0648399293422699 0.18157455325126648 0.6501905918121338 0.005674920976161957 0.335276335477829 -0.02075258642435074 -0.9418622255325317 0.10874716937541962 0.547910213470459 6 0.7585892677307129 5 0.17383593320846558 0 0.0 0 0.0 0.11494315415620804 0.6430489420890808 0.021784529089927673 -0.44160282611846924 -0.4353465437889099 -0.7844783067703247 0.07110165804624557 0.5535106658935547 6 0.7448842525482178 5 0.13043087720870972 9 0.03415199741721153 0 0.016842413693666458 0.09191875904798508 0.7384775280952454 -0.004247918725013733 0.11261329799890518 -0.5351725816726685 -0.8371837735176086 0.058216046541929245 0.4974377155303955 6 0.3449857234954834 5 0.3330496847629547 0 0.19796177744865417 9 0.05866539850831032 0.07171060144901276 0.7989503741264343 -0.08710231631994247 0.34336376190185547 -0.4688863754272461 -0.8137760758399963 0.038444168865680695 0.4439431428909302 0 0.5288071632385254 6 0.14961421489715576 5 0.14801231026649475 9 0.0648399293422699 0.09191875904798508 0.7384775280952454 -0.004247918725013733 0.11261329799890518 -0.5351725816726685 -0.8371837735176086 0.058216046541929245 0.4974377155303955 6 0.3449857234954834 5 0.3330496847629547 0 0.19796177744865417 9 0.05866539850831032 0.0 0.7530391812324524 -0.05506258085370064 0.0 -0.7327799201011658 -0.6804406642913818 0.002868201583623886 0.4762572944164276 0 0.40316474437713623 9 0.17333783209323883 5 0.17333783209323883 6 0.10585487633943558 0.0 0.866442084312439 -0.12817779183387756 0.0 -0.19495223462581635 -0.9808038473129272 0.00040259622619487345 0.4023122787475586 0 0.6251106858253479 1 0.10255718231201172 5 0.061067480593919754 9 0.06106747314333916 0.11275650560855865 0.858371376991272 -0.07582104951143265 0.6566362380981445 -0.06662190705537796 -0.7512131333351135 0.06558506190776825 0.4164593815803528 0 0.6033954620361328 6 0.14807792007923126 5 0.11798923462629318 1 0.06080198287963867 0.07171060144901276 0.7989503741264343 -0.08710231631994247 0.34336376190185547 -0.4688863754272461 -0.8137760758399963 0.038444168865680695 0.4439431428909302 0 0.5288071632385254 6 0.14961421489715576 5 0.14801231026649475 9 0.0648399293422699 0.2632824182510376 0.192702054977417 0.030293196439743042 0.8633686304092407 0.13098543882369995 -0.48722800612449646 0.129202738404274 0.8032676577568054 7 0.8625421524047852 8 0.13671985268592834 0 0.0 0 0.0 0.27068033814430237 0.17515099048614502 0.10558918118476868 0.9747001528739929 -0.030365917831659317 0.2213507443666458 0.17252767086029053 0.8140662312507629 7 0.8328282237052917 8 0.16480152308940887 0 0.0 0 0.0 0.279649019241333 0.08738040924072266 0.07750121504068375 0.9613330364227295 -0.143650621175766 0.23493148386478424 0.15701256692409515 0.8617966175079346 8 0.8143556118011475 7 0.185213103890419 0 0.0 0 0.0 0.24138523638248444 0.1334514617919922 0.1541205644607544 0.37720876932144165 -0.20023193955421448 0.904202401638031 0.5243164896965027 0.8715741634368896 7 0.5651088356971741 8 0.4341517984867096 0 0.0 0 0.0 0.1377425193786621 0.11639571189880371 0.12225279957056046 -0.8777428269386292 -0.13699759542942047 0.4590594172477722 0.5784492492675781 0.8728861808776855 7 0.5234586596488953 8 0.4755793809890747 0 0.0 0 0.0 0.14728760719299316 0.0641862154006958 0.11256571114063263 -0.7809076309204102 -0.348002552986145 0.5186620950698853 0.5806708335876465 0.896611750125885 8 0.7242515683174133 7 0.27535006403923035 0 0.0 0 0.0 0.24138523638248444 0.1334514617919922 0.1541205644607544 0.37720876932144165 -0.20023193955421448 0.904202401638031 0.20311272144317627 0.8384818434715271 7 0.5651088356971741 8 0.4341517984867096 0 0.0 0 0.0 0.24097920954227448 0.052500367164611816 0.1248338520526886 0.40839868783950806 -0.49644458293914795 0.765953540802002 0.1878468245267868 0.882355809211731 8 0.824219822883606 7 0.1755632609128952 0 0.0 0 0.0 0.279649019241333 0.08738040924072266 0.07750121504068375 0.9613330364227295 -0.143650621175766 0.23493148386478424 0.15701256692409515 0.8617966175079346 8 0.8143556118011475 7 0.185213103890419 0 0.0 0 0.0 0.24097920954227448 0.052500367164611816 0.1248338520526886 0.40839868783950806 -0.49644458293914795 0.765953540802002 0.5384967923164368 0.9167900085449219 8 0.824219822883606 7 0.1755632609128952 0 0.0 0 0.0 0.14728760719299316 0.0641862154006958 0.11256571114063263 -0.7809076309204102 -0.348002552986145 0.5186620950698853 0.5806708335876465 0.896611750125885 8 0.7242515683174133 7 0.27535006403923035 0 0.0 0 0.0 0.17186416685581207 0.0006354935467243195 0.08157961070537567 -0.47993406653404236 -0.790582001209259 0.3802606165409088 0.5846631526947021 0.9269393086433411 8 0.915589451789856 7 0.08427349478006363 0 0.0 0 0.0 0.1543327420949936 0.08759307861328125 0.01969859004020691 -0.9604480266571045 0.17163610458374023 -0.21918393671512604 0.624218761920929 0.8986101746559143 8 0.8263624310493469 7 0.17350547015666962 0 0.0 0 0.0 0.17186416685581207 0.0006354935467243195 0.08157961070537567 -0.47993406653404236 -0.790582001209259 0.3802606165409088 0.5846631526947021 0.9269393086433411 8 0.915589451789856 7 0.08427349478006363 0 0.0 0 0.0 0.14728760719299316 0.0641862154006958 0.11256571114063263 -0.7809076309204102 -0.348002552986145 0.5186620950698853 0.5806708335876465 0.896611750125885 8 0.7242515683174133 7 0.27535006403923035 0 0.0 0 0.0 0.24350489675998688 0.0006354935467243195 0.051150236278772354 0.47935423254966736 -0.8420056700706482 0.24741356074810028 0.1503724455833435 0.9156708121299744 8 0.951987624168396 7 0.045869868248701096 0 0.0 0 0.0 0.2765810489654541 0.0468442440032959 0.0249030739068985 0.940153181552887 -0.31360819935798645 0.13303017616271973 0.13173434138298035 0.8852612376213074 8 0.9507208466529846 7 0.0483645461499691 0 0.0 0 0.0 0.279649019241333 0.08738040924072266 0.07750121504068375 0.9613330364227295 -0.143650621175766 0.23493148386478424 0.15701256692409515 0.8617966175079346 8 0.8143556118011475 7 0.185213103890419 0 0.0 0 0.0 0.2741932272911072 0.11445808410644531 0.004911437630653381 0.8896145224571228 0.3404645025730133 -0.30430006980895996 0.11660508066415787 0.8494014739990234 8 0.8897741436958313 7 0.11008638888597488 0 0.0 0 0.0 0.279649019241333 0.08738040924072266 0.07750121504068375 0.9613330364227295 -0.143650621175766 0.23493148386478424 0.15701256692409515 0.8617966175079346 8 0.8143556118011475 7 0.185213103890419 0 0.0 0 0.0 0.2765810489654541 0.0468442440032959 0.0249030739068985 0.940153181552887 -0.31360819935798645 0.13303017616271973 0.13173434138298035 0.8852612376213074 8 0.9507208466529846 7 0.0483645461499691 0 0.0 0 0.0 0.2741932272911072 0.11445808410644531 0.004911437630653381 0.8896145224571228 0.3404645025730133 -0.30430006980895996 0.11660508066415787 0.8494014739990234 8 0.8897741436958313 7 0.11008638888597488 0 0.0 0 0.0 0.2862442135810852 0.08407890796661377 -0.013642758131027222 0.9532761573791504 0.27402570843696594 -0.1270180344581604 0.10861167311668396 0.8684667348861694 8 0.9602087140083313 7 0.029473546892404556 0 0.0 0 0.0 0.22046658396720886 0.09783637523651123 -0.07096876204013824 0.016296884045004845 0.8249458074569702 -0.5649281144142151 0.06424757838249207 0.8535482883453369 8 0.99355149269104 0 0.0 0 0.0 0 0.0 0.21539007127285004 0.1667546033859253 -0.007906094193458557 -0.14654988050460815 0.3664967715740204 -0.9187902212142944 0.6632874011993408 0.8602080941200256 8 0.8476832509040833 7 0.15203344821929932 0 0.0 0 0.0 0.22046658396720886 0.09783637523651123 -0.07096876204013824 0.016296884045004845 0.8249458074569702 -0.5649281144142151 0.6826233267784119 0.909465491771698 8 0.99355149269104 0 0.0 0 0.0 0 0.0 0.1543327420949936 0.08759307861328125 0.01969859004020691 -0.9604480266571045 0.17163610458374023 -0.21918393671512604 0.624218761920929 0.8986101746559143 8 0.8263624310493469 7 0.17350547015666962 0 0.0 0 0.0 0.1543327420949936 0.08759307861328125 0.01969859004020691 -0.9604480266571045 0.17163610458374023 -0.21918393671512604 0.624218761920929 0.8986101746559143 8 0.8263624310493469 7 0.17350547015666962 0 0.0 0 0.0 0.14809073507785797 0.03774738311767578 -0.1051795557141304 -0.8722190260887146 0.06930753588676453 -0.4841151237487793 0.6554734706878662 0.94559645652771 8 0.9824442863464355 0 0.0 0 0.0 0 0.0 0.16382159292697906 0.0006354935467243195 -0.08050514757633209 -0.6014587879180908 -0.7863094210624695 -0.14111758768558502 0.6353160738945007 0.9585727453231812 8 0.986153244972229 0 0.0 0 0.0 0 0.0 0.20350560545921326 0.0006354935467243195 -0.11223234236240387 -0.10193182528018951 -0.844508171081543 -0.5256813168525696 0.6475530862808228 0.9809802174568176 8 0.9989274144172668 0 0.0 0 0.0 0 0.0 0.16382159292697906 0.0006354935467243195 -0.08050514757633209 -0.6014587879180908 -0.7863094210624695 -0.14111758768558502 0.6353160738945007 0.9585727453231812 8 0.986153244972229 0 0.0 0 0.0 0 0.0 0.14809073507785797 0.03774738311767578 -0.1051795557141304 -0.8722190260887146 0.06930753588676453 -0.4841151237487793 0.6554734706878662 0.94559645652771 8 0.9824442863464355 0 0.0 0 0.0 0 0.0 0.2590513527393341 0.0006354935467243195 -0.09128285944461823 0.5378581881523132 -0.7852412462234497 -0.30668050050735474 0.07569105178117752 0.9268571734428406 8 0.9953135848045349 0 0.0 0 0.0 0 0.0 0.20350560545921326 0.0006354935467243195 -0.11223234236240387 -0.10193182528018951 -0.844508171081543 -0.5256813168525696 0.043840546160936356 0.9365466833114624 8 0.9989274144172668 0 0.0 0 0.0 0 0.0 0.21444743871688843 0.05028212070465088 -0.15147438645362854 0.03833124786615372 0.21689504384994507 -0.9754325747489929 0.029200129210948944 0.8926466703414917 8 1.0102593898773193 0 0.0 0 0.0 0 0.0 0.16382159292697906 0.0006354935467243195 -0.08050514757633209 -0.6014587879180908 -0.7863094210624695 -0.14111758768558502 0.6353160738945007 0.9585727453231812 8 0.986153244972229 0 0.0 0 0.0 0 0.0 0.20350560545921326 0.0006354935467243195 -0.11223234236240387 -0.10193182528018951 -0.844508171081543 -0.5256813168525696 0.6475530862808228 0.9809802174568176 8 0.9989274144172668 0 0.0 0 0.0 0 0.0 0.24350489675998688 0.0006354935467243195 0.051150236278772354 0.47935423254966736 -0.8420056700706482 0.24741356074810028 0.5689922571182251 0.960877001285553 8 0.951987624168396 7 0.045869868248701096 0 0.0 0 0.0 0.14809073507785797 0.03774738311767578 -0.1051795557141304 -0.8722190260887146 0.06930753588676453 -0.4841151237487793 0.6554734706878662 0.94559645652771 8 0.9824442863464355 0 0.0 0 0.0 0 0.0 0.1543327420949936 0.08759307861328125 0.01969859004020691 -0.9604480266571045 0.17163610458374023 -0.21918393671512604 0.624218761920929 0.8986101746559143 8 0.8263624310493469 7 0.17350547015666962 0 0.0 0 0.0 0.22046658396720886 0.09783637523651123 -0.07096876204013824 0.016296884045004845 0.8249458074569702 -0.5649281144142151 0.6826233267784119 0.909465491771698 8 0.99355149269104 0 0.0 0 0.0 0 0.0 0.2765810489654541 0.0468442440032959 0.0249030739068985 0.940153181552887 -0.31360819935798645 0.13303017616271973 0.13173434138298035 0.8852612376213074 8 0.9507208466529846 7 0.0483645461499691 0 0.0 0 0.0 0.24350489675998688 0.0006354935467243195 0.051150236278772354 0.47935423254966736 -0.8420056700706482 0.24741356074810028 0.1503724455833435 0.9156708121299744 8 0.951987624168396 7 0.045869868248701096 0 0.0 0 0.0 0.2590513527393341 0.0006354935467243195 -0.09128285944461823 0.5378581881523132 -0.7852412462234497 -0.30668050050735474 0.07569105178117752 0.9268571734428406 8 0.9953135848045349 0 0.0 0 0.0 0 0.0 0.22046658396720886 0.09783637523651123 -0.07096876204013824 0.016296884045004845 0.8249458074569702 -0.5649281144142151 0.06424757838249207 0.8535482883453369 8 0.99355149269104 0 0.0 0 0.0 0 0.0 0.2862442135810852 0.08407890796661377 -0.013642758131027222 0.9532761573791504 0.27402570843696594 -0.1270180344581604 0.10861167311668396 0.8684667348861694 8 0.9602087140083313 7 0.029473546892404556 0 0.0 0 0.0 0.27682194113731384 0.03609919548034668 -0.09393604099750519 0.8938566446304321 0.03878902643918991 -0.4466078579425812 0.07372365891933441 0.8974340558052063 8 0.9938223958015442 0 0.0 0 0.0 0 0.0 0.17711219191551208 1.2111425399780273 -0.08284486830234528 0.9780877232551575 0.07745597511529922 0.19315165281295776 0.11920919269323349 0.2266269475221634 1 0.6505640745162964 0 0.27260327339172363 0 0.0 0 0.0 0.17711219191551208 1.193559169769287 0.0424371063709259 0.9813531637191772 0.1826837956905365 -0.05929746478796005 0.18139240145683289 0.2521224319934845 0 0.7151136994361877 1 0.23585881292819977 2 0.016049621626734734 0 0.0 0.17734870314598083 1.1222507953643799 0.016492163762450218 0.9736624956130981 0.07391583174467087 -0.21564379334449768 0.15870711207389832 0.2861701548099518 0 0.7400460243225098 1 0.2110891044139862 5 0.021712277084589005 2 0.0 0.2174592912197113 1.1028785705566406 0.2627961039543152 0.9561144113540649 0.17743460834026337 0.23300881683826447 0.28516799211502075 0.32168421149253845 0 0.5695722103118896 5 0.11019442975521088 1 0.029866231605410576 2 0.00028992959414608777 0.23453930020332336 0.9702152013778687 0.2602241337299347 0.922513484954834 0.1750236451625824 0.34394359588623047 0.278250515460968 0.390413373708725 0 0.49000686407089233 5 0.30810508131980896 9 0.014790344052016735 6 0.01452652644366026 0.23453930020332336 1.0399465560913086 0.12781919538974762 0.9630115628242493 0.15222632884979248 -0.2221747487783432 0.2123546004295349 0.34633561968803406 0 0.7073097229003906 5 0.15077143907546997 1 0.04978937283158302 2 0.004751469939947128 0.17711219191551208 1.193559169769287 0.0424371063709259 0.9813531637191772 0.1826837956905365 -0.05929746478796005 0.18139240145683289 0.2521224319934845 0 0.7151136994361877 1 0.23585881292819977 2 0.016049621626734734 0 0.0 0.11630034446716309 1.385688066482544 0.011257962323725224 0.8467971086502075 0.5172887444496155 0.12363047897815704 0.19177863001823425 0.14417126774787903 1 0.4200000762939453 0 0.41010770201683044 2 0.021439071744680405 0 0.0 0.1459522545337677 1.3251063823699951 0.18270058929920197 0.8204901218414307 0.5527207255363464 0.14572587609291077 0.2664920687675476 0.20125365257263184 0 0.5595225095748901 1 0.13441134989261627 2 0.0002072147763101384 0 0.0 0.11636289954185486 1.053910732269287 -0.19108946621418 0.5185399651527405 -0.8486281633377075 0.10443434119224548 0.8408097624778748 0.693621814250946 1 0.827496349811554 0 0.24267560243606567 0 0.0 0 0.0 0.1329372525215149 1.081725835800171 -0.11218704283237457 0.8476821184158325 -0.5233924388885498 -0.08630634844303131 0.8733172416687012 0.657466471195221 1 0.7744880318641663 0 0.403382271528244 0 0.0 0 0.0 0.09388621896505356 1.0232656002044678 -0.1361936777830124 0.6617023348808289 -0.5929136276245117 -0.4588763117790222 0.8785715699195862 0.6988553404808044 1 0.7060643434524536 0 0.5053098201751709 0 0.0 0 0.0 0.0 0.6821010708808899 0.023523900657892227 0.0 -0.7949461340904236 -0.6066469550132751 0.007275765296071768 0.5337982773780823 9 0.252836138010025 5 0.252836138010025 10 0.18387460708618164 6 0.18387460708618164 0.0 0.7530391812324524 -0.05506258085370064 0.0 -0.7327799201011658 -0.6804406642913818 0.002868201583623886 0.4762572944164276 0 0.40316474437713623 9 0.17333783209323883 5 0.17333783209323883 6 0.10585487633943558 0.09191875904798508 0.7384775280952454 -0.004247918725013733 0.11261329799890518 -0.5351725816726685 -0.8371837735176086 0.058216046541929245 0.4974377155303955 6 0.3449857234954834 5 0.3330496847629547 0 0.19796177744865417 9 0.05866539850831032 0.10067398101091385 0.9663213491439819 -0.08786684274673462 0.712576687335968 -0.24292734265327454 -0.6581621766090393 0.06711860746145248 0.3559820055961609 0 0.6806142330169678 1 0.19555994868278503 5 0.04794131591916084 6 0.04703441634774208 0.11275650560855865 0.858371376991272 -0.07582104951143265 0.6566362380981445 -0.06662190705537796 -0.7512131333351135 0.06558506190776825 0.4164593815803528 0 0.6033954620361328 6 0.14807792007923126 5 0.11798923462629318 1 0.06080198287963867 0.0 0.866442084312439 -0.12817779183387756 0.0 -0.19495223462581635 -0.9808038473129272 0.00040259622619487345 0.4023122787475586 0 0.6251106858253479 1 0.10255718231201172 5 0.061067480593919754 9 0.06106747314333916 0.16467930376529694 0.764995813369751 -0.0035517215728759766 0.6215704679489136 -0.09994811564683914 -0.7769402265548706 0.10110408067703247 0.4813825190067291 6 0.42210859060287476 5 0.36726126074790955 0 0.15537992119789124 0 0.0 0.11275650560855865 0.858371376991272 -0.07582104951143265 0.6566362380981445 -0.06662190705537796 -0.7512131333351135 0.06558506190776825 0.4164593815803528 0 0.6033954620361328 6 0.14807792007923126 5 0.11798923462629318 1 0.06080198287963867 0.17548006772994995 0.9740344882011414 0.03773410618305206 0.8627887964248657 -0.095828115940094 -0.49632251262664795 0.14806827902793884 0.3685593605041504 0 0.7296561002731323 5 0.13401056826114655 1 0.05976245924830437 6 0.02519860677421093 0.0 0.8515796661376953 1.0820811986923218 0.0 -0.9989928603172302 0.04452650621533394 0.8863584995269775 0.47759830951690674 4 0.9997074007987976 0 0.0 0 0.0 0 0.0 0.0 0.8555480241775513 0.9201857447624207 0.0 -0.9908444285392761 -0.1347697377204895 0.8575089573860168 0.39543601870536804 4 0.9604564309120178 3 0.029231343418359756 0 0.0 0 0.0 0.04524477198719978 0.9055635929107666 0.9612237811088562 0.99981689453125 -0.011352885514497757 -0.013397625647485256 0.8992534875869751 0.4032728672027588 4 0.9947757720947266 0 0.0 0 0.0 0 0.0 0.0 0.9533488154411316 1.0950424671173096 0.0 0.9988097548484802 -0.048158206045627594 0.9595854878425598 0.4558004140853882 4 0.9995507597923279 0 0.0 0 0.0 0 0.0 0.05299364775419235 0.9086697101593018 1.127077579498291 0.9984740614891052 0.004181035794317722 0.05499435216188431 0.9316335320472717 0.4823167026042938 4 0.9999160170555115 0 0.0 0 0.0 0 0.0 0.04524477198719978 0.9055635929107666 0.9612237811088562 0.99981689453125 -0.011352885514497757 -0.013397625647485256 0.8992534875869751 0.4032728672027588 4 0.9947757720947266 0 0.0 0 0.0 0 0.0 0.15597429871559143 1.3777180910110474 -0.39357221126556396 0.6780602335929871 0.5271767377853394 -0.5121310949325562 0.6492087841033936 0.4990021586418152 1 0.52517169713974 0 0.0 0 0.0 0 0.0 0.06429819017648697 1.3896068334579468 -0.43792080879211426 0.3429059684276581 0.5780205726623535 -0.7404400706291199 0.7636973261833191 0.4662829637527466 1 0.532609224319458 0 0.0 0 0.0 0 0.0 0.09474784880876541 1.4414864778518677 -0.305348664522171 0.47962889075279236 0.8599505424499512 -0.1743827611207962 0.6945981383323669 0.5729519724845886 1 0.4937168061733246 0 0.006853099912405014 0 0.0 0 0.0 0.04986967518925667 1.2690738439559937 -0.4816516935825348 0.4589068293571472 0.574968695640564 -0.6773278117179871 0.7414538264274597 0.31137514114379883 1 0.5935874581336975 0 0.0 0 0.0 0 0.0 0.06429819017648697 1.3896068334579468 -0.43792080879211426 0.3429059684276581 0.5780205726623535 -0.7404400706291199 0.7636973261833191 0.4662829637527466 1 0.532609224319458 0 0.0 0 0.0 0 0.0 0.15597429871559143 1.3777180910110474 -0.39357221126556396 0.6780602335929871 0.5271767377853394 -0.5121310949325562 0.6492087841033936 0.4990021586418152 1 0.52517169713974 0 0.0 0 0.0 0 0.0 0.11392863094806671 1.1170620918273926 -0.5390962958335876 0.45652636885643005 -0.3259071707725525 -0.8278450965881348 0.6125847101211548 0.13550977408885956 1 0.5385183095932007 0 0.0 0 0.0 0 0.0 0.09310946613550186 1.0738946199417114 -0.5040848851203918 0.31342509388923645 -0.7467879056930542 -0.5865352153778076 0.578464150428772 0.07731097936630249 1 0.4915311634540558 0 0.0 0 0.0 0 0.0 0.0 1.102358341217041 -0.5441152453422546 0.0 -0.5053865313529968 -0.8628803491592407 0.6952515840530396 0.0594245009124279 1 0.49531272053718567 0 0.0 0 0.0 0 0.0 0.0 1.2747960090637207 -0.5200934410095215 0.0 0.7257301807403564 -0.6879787445068359 0.7898815870285034 0.26401570439338684 1 0.5951871871948242 0 0.0 0 0.0 0 0.0 0.04986967518925667 1.2690738439559937 -0.4816516935825348 0.4589068293571472 0.574968695640564 -0.6773278117179871 0.7414538264274597 0.31137514114379883 1 0.5935874581336975 0 0.0 0 0.0 0 0.0 0.06438668072223663 1.2186225652694702 -0.5522415637969971 0.40809351205825806 0.41642504930496216 -0.8124027252197266 0.7213020324707031 0.204230397939682 1 0.5838661193847656 0 0.0 0 0.0 0 0.0 0.0 1.1535732746124268 -0.5664279460906982 0.0 -0.22562333941459656 -0.9742118716239929 0.7363960146903992 0.10636518150568008 1 0.524931788444519 0 0.0 0 0.0 0 0.0 0.0 1.2263679504394531 -0.5837152004241943 0.0 0.3245033025741577 -0.9458601474761963 0.7843695878982544 0.1751059889793396 1 0.5790085792541504 0 0.0 0 0.0 0 0.0 0.06438668072223663 1.2186225652694702 -0.5522415637969971 0.40809351205825806 0.41642504930496216 -0.8124027252197266 0.7213020324707031 0.204230397939682 1 0.5838661193847656 0 0.0 0 0.0 0 0.0 0.06438668072223663 1.2186225652694702 -0.5522415637969971 0.40809351205825806 0.41642504930496216 -0.8124027252197266 0.7213020324707031 0.204230397939682 1 0.5838661193847656 0 0.0 0 0.0 0 0.0 0.1287733018398285 1.2108771800994873 -0.5207679867744446 0.6269417405128479 0.4066286087036133 -0.6644794940948486 0.6418904066085815 0.2361043244600296 1 0.5873615145683289 0 0.0 0 0.0 0 0.0 0.11392863094806671 1.1170620918273926 -0.5390962958335876 0.45652636885643005 -0.3259071707725525 -0.8278450965881348 0.6125847101211548 0.13550977408885956 1 0.5385183095932007 0 0.0 0 0.0 0 0.0 0.18102072179317474 1.268702745437622 -0.39696988463401794 0.8454847931861877 0.23203222453594208 -0.48088014125823975 0.5643640756607056 0.39259523153305054 1 0.5544809699058533 0 0.0 0 0.0 0 0.0 0.21954664587974548 1.2720890045166016 -0.26756638288497925 0.9747001528739929 0.22016052901744843 -0.038422804325819016 0.4704653024673462 0.463824987411499 1 0.5512939095497131 0 0.05323823541402817 0 0.0 0 0.0 0.19536322355270386 1.1583302021026611 -0.38174155354499817 0.9667958617210388 0.013214514590799809 -0.2551042139530182 0.4866374433040619 0.2810833156108856 1 0.5957530736923218 0 0.01954641565680504 0 0.0 0 0.0 0.07297612726688385 1.3934298753738403 0.16687017679214478 0.4526505470275879 0.8392895460128784 0.3011261224746704 0.27515244483947754 0.15112540125846863 0 0.46099191904067993 1 0.19868381321430206 2 0.00027996301651000977 0 0.0 0.1459522545337677 1.3251063823699951 0.18270058929920197 0.8204901218414307 0.5527207255363464 0.14572587609291077 0.2664920687675476 0.20125365257263184 0 0.5595225095748901 1 0.13441134989261627 2 0.0002072147763101384 0 0.0 0.11630034446716309 1.385688066482544 0.011257962323725224 0.8467971086502075 0.5172887444496155 0.12363047897815704 0.19177863001823425 0.14417126774787903 1 0.4200000762939453 0 0.41010770201683044 2 0.021439071744680405 0 0.0 0.08727402985095978 1.2957605123519897 0.34337759017944336 0.4752952754497528 0.6862391829490662 0.5505844354629517 0.3502945005893707 0.2176021784543991 0 0.1636802703142166 2 0.06262505799531937 1 0.050292082130908966 0 0.0 0.17454805970191956 1.2118858098983765 0.34130558371543884 0.8105410933494568 0.3488875925540924 0.47038179636001587 0.3298243582248688 0.2703784704208374 0 0.21865041553974152 2 0.04487593099474907 1 0.04441479220986366 5 0.026416389271616936 0.1459522545337677 1.3251063823699951 0.18270058929920197 0.8204901218414307 0.5527207255363464 0.14572587609291077 0.2664920687675476 0.20125365257263184 0 0.5595225095748901 1 0.13441134989261627 2 0.0002072147763101384 0 0.0 0.07297612726688385 1.460466742515564 -0.16172027587890625 0.5019684433937073 0.8640094995498657 0.03888057917356491 0.12038150429725647 0.0717666819691658 1 0.43864887952804565 0 0.0806228369474411 0 0.0 0 0.0 0.0 1.4864554405212402 -0.1874413788318634 0.0 0.999664306640625 -0.02554399147629738 0.12280824035406113 0.02889185957610607 1 0.42892152070999146 0 0.06715913861989975 0 0.0 0 0.0 0.0 1.4754657745361328 -0.018200816586613655 0.0 0.9835200309753418 0.18070009350776672 0.2048933058977127 0.06445963680744171 1 0.39598000049591064 0 0.22064290940761566 2 0.005581408739089966 0 0.0 0.0650172010064125 1.190718173980713 0.442444771528244 0.5703604221343994 0.43330180644989014 0.6977751851081848 0.4042886793613434 0.26924484968185425 2 0.05483977124094963 0 0.0 0 0.0 0 0.0 0.1461862027645111 1.0710813999176025 0.3844836950302124 0.808252215385437 0.17184972763061523 0.5631580352783203 0.3577803373336792 0.3372943699359894 0 0.205034539103508 5 0.10197971016168594 9 0.05613459274172783 2 0.03635368496179581 0.17454805970191956 1.2118858098983765 0.34130558371543884 0.8105410933494568 0.3488875925540924 0.47038179636001587 0.3298243582248688 0.2703784704208374 0 0.21865041553974152 2 0.04487593099474907 1 0.04441479220986366 5 0.026416389271616936 0.04986967518925667 1.2690738439559937 -0.4816516935825348 0.4589068293571472 0.574968695640564 -0.6773278117179871 0.7414538264274597 0.31137514114379883 1 0.5935874581336975 0 0.0 0 0.0 0 0.0 0.18102072179317474 1.268702745437622 -0.39696988463401794 0.8454847931861877 0.23203222453594208 -0.48088014125823975 0.5643640756607056 0.39259523153305054 1 0.5544809699058533 0 0.0 0 0.0 0 0.0 0.1287733018398285 1.2108771800994873 -0.5207679867744446 0.6269417405128479 0.4066286087036133 -0.6644794940948486 0.6418904066085815 0.2361043244600296 1 0.5873615145683289 0 0.0 0 0.0 0 0.0 0.06429819017648697 1.3896068334579468 -0.43792080879211426 0.3429059684276581 0.5780205726623535 -0.7404400706291199 0.7636973261833191 0.4662829637527466 1 0.532609224319458 0 0.0 0 0.0 0 0.0 0.0 1.3950845003128052 -0.45135900378227234 0.0 0.598864734172821 -0.8008362054824829 0.8172668218612671 0.41208434104919434 1 0.5343004465103149 0 0.0 0 0.0 0 0.0 0.0 1.4688720703125 -0.35228610038757324 0.0 0.9361552596092224 -0.35151219367980957 0.8172668218612671 0.550440788269043 1 0.5002522468566895 0 0.0 0 0.0 0 0.0 0.07297612726688385 1.460466742515564 -0.16172027587890625 0.5019684433937073 0.8640094995498657 0.03888057917356491 0.12038150429725647 0.0717666819691658 1 0.43864887952804565 0 0.0806228369474411 0 0.0 0 0.0 0.1459522545337677 1.3888463973999023 -0.1359991729259491 0.8357188701629639 0.5164341926574707 0.18662068247795105 0.11418572813272476 0.1270817071199417 1 0.47086650133132935 0 0.11861134320497513 0 0.0 0 0.0 0.18949569761753082 1.3684693574905396 -0.2584112286567688 0.860957682132721 0.5083467960357666 0.01657155156135559 0.04436533525586128 0.12631487846374512 1 0.5081745386123657 0 0.03876670077443123 0 0.0 0 0.0 0.04986967518925667 1.2690738439559937 -0.4816516935825348 0.4589068293571472 0.574968695640564 -0.6773278117179871 0.7414538264274597 0.31137514114379883 1 0.5935874581336975 0 0.0 0 0.0 0 0.0 0.0 1.2747960090637207 -0.5200934410095215 0.0 0.7257301807403564 -0.6879787445068359 0.7898815870285034 0.26401570439338684 1 0.5951871871948242 0 0.0 0 0.0 0 0.0 0.0 1.3950845003128052 -0.45135900378227234 0.0 0.598864734172821 -0.8008362054824829 0.8172668218612671 0.41208434104919434 1 0.5343004465103149 0 0.0 0 0.0 0 0.0 0.0 1.4161217212677002 0.1510397493839264 0.0 0.9378948211669922 0.34690389037132263 0.28625792264938354 0.11215589195489883 0 0.4460723102092743 1 0.2005683183670044 2 0.000560328655410558 0 0.0 0.0 1.4754657745361328 -0.018200816586613655 0.0 0.9835200309753418 0.18070009350776672 0.2048933058977127 0.06445963680744171 1 0.39598000049591064 0 0.22064290940761566 2 0.005581408739089966 0 0.0 -0.058150164783000946 1.453392744064331 -0.0034714294597506523 -0.5017548203468323 0.843226432800293 0.19284646213054657 0.19909562170505524 0.09749332815408707 1 0.3855680227279663 0 0.2609920799732208 2 5.212068208493292e-05 0 0.0 -0.058150164783000946 1.453392744064331 -0.0034714294597506523 -0.5017548203468323 0.843226432800293 0.19284646213054657 0.19909562170505524 0.09749332815408707 1 0.3855680227279663 0 0.2609920799732208 2 5.212068208493292e-05 0 0.0 -0.07297612726688385 1.460466742515564 -0.16172027587890625 -0.5019684433937073 0.8640094995498657 0.03888057917356491 0.12038150429725647 0.0717666819691658 1 0.424686998128891 0 0.08062247186899185 0 0.0 0 0.0 -0.1459522545337677 1.3888463973999023 -0.1359991729259491 -0.8357188701629639 0.5164341926574707 0.18662068247795105 0.11418572813272476 0.1270817071199417 1 0.4451029896736145 0 0.11861109733581543 0 0.0 0 0.0 -0.09474784880876541 1.4414864778518677 -0.305348664522171 -0.47962889075279236 0.8599505424499512 -0.1743827611207962 0.04443186894059181 0.0578567311167717 1 0.48631343245506287 0 0.006849147379398346 0 0.0 0 0.0 -0.07297612726688385 1.460466742515564 -0.16172027587890625 -0.5019684433937073 0.8640094995498657 0.03888057917356491 0.12038150429725647 0.0717666819691658 1 0.424686998128891 0 0.08062247186899185 0 0.0 0 0.0 0.0 1.4864554405212402 -0.1874413788318634 0.0 0.999664306640625 -0.02554399147629738 0.12280824035406113 0.02889185957610607 1 0.42892152070999146 0 0.06715913861989975 0 0.0 0 0.0 -0.17711219191551208 1.2111425399780273 -0.08284486830234528 -0.9780877232551575 0.07745597511529922 0.19315165281295776 0.11920919269323349 0.2266269475221634 1 0.6532512903213501 0 0.27260318398475647 2 0.0 0 0.0 -0.17711219191551208 1.193559169769287 0.0424371063709259 -0.9813531637191772 0.1826837956905365 -0.05929746478796005 0.18139240145683289 0.2521224319934845 0 0.715113639831543 1 0.2307407557964325 2 0.01808408461511135 0 0.0 -0.11630034446716309 1.385688066482544 0.011257962323725224 -0.8467971086502075 0.5172887444496155 0.12363047897815704 0.19177863001823425 0.14417126774787903 0 0.41010767221450806 1 0.3941728472709656 2 0.021439071744680405 0 0.0 -0.17758521437644958 1.0509424209594727 -0.009452779777348042 -0.9080782532691956 -0.1265297383069992 -0.39918211102485657 0.13626915216445923 0.3208780884742737 0 0.7504675388336182 1 0.16131067276000977 9 0.05459078028798103 2 0.0 -0.17734870314598083 1.1222507953643799 0.016492163762450218 -0.9736624956130981 0.07391583174467087 -0.21564379334449768 0.15870711207389832 0.2861701548099518 0 0.7400459051132202 1 0.20915496349334717 9 0.02171226218342781 2 0.0 -0.15271435678005219 1.1326109170913696 -0.08103625476360321 -0.9580675959587097 -0.28070923686027527 0.05710013210773468 0.10731169581413269 0.2683471441268921 1 0.6775277256965637 0 0.479615181684494 2 0.0 0 0.0 -0.10067398101091385 0.9663213491439819 -0.08786684274673462 -0.712576687335968 -0.24292734265327454 -0.6581621766090393 0.06711860746145248 0.3559820055961609 0 0.6806139349937439 1 0.1954726278781891 9 0.04794127866625786 10 0.04703438654541969 -0.11275650560855865 0.858371376991272 -0.07582104951143265 -0.6566362380981445 -0.06662190705537796 -0.7512131333351135 0.06558506190776825 0.4164593815803528 0 0.6033953428268433 10 0.14807790517807007 9 0.11798921227455139 1 0.0606958270072937 -0.17548006772994995 0.9740344882011414 0.03773410618305206 -0.8627887964248657 -0.095828115940094 -0.49632251262664795 0.14806827902793884 0.3685593605041504 0 0.7296560406684875 9 0.13401056826114655 1 0.059292711317539215 10 0.025198591873049736 0.0 1.0181424617767334 -0.20196408033370972 0.0 -0.9700308442115784 -0.24283577501773834 0.8594119548797607 0.7608353495597839 1 0.9506118297576904 0 0.27259060740470886 0 0.0 0 0.0 -0.11636289954185486 1.053910732269287 -0.19108946621418 -0.5185399651527405 -0.8486281633377075 0.10443434119224548 0.8408097624778748 0.693621814250946 1 0.8277724981307983 0 0.24267315864562988 0 0.0 0 0.0 -0.11636289954185486 1.018743872642517 -0.2921942174434662 -0.3807489275932312 -0.9202551245689392 0.09018219262361526 0.7902564406394958 0.7220689654350281 1 0.556355357170105 0 0.11100170016288757 0 0.0 0 0.0 0.0 1.0058256387710571 -0.31092268228530884 0.0 -0.999969482421875 0.0018921475857496262 0.8017098903656006 0.7843313217163086 1 0.5234434008598328 0 0.1049714908003807 0 0.0 0 0.0 -0.11636289954185486 1.018743872642517 -0.2921942174434662 -0.3807489275932312 -0.9202551245689392 0.09018219262361526 0.7902564406394958 0.7220689654350281 1 0.556355357170105 0 0.11100170016288757 0 0.0 0 0.0 -0.11636289954185486 1.0278944969177246 -0.36559149622917175 -0.35953855514526367 -0.9165623784065247 -0.1748405396938324 0.753631055355072 0.7329650521278381 1 0.48877400159835815 0 0.06049613654613495 0 0.0 0 0.0 0.0 1.0128729343414307 -0.41166767477989197 0.0 -0.9807122945785522 -0.19541001319885254 0.7478660345077515 0.8006981611251831 1 0.45380619168281555 0 0.0400310717523098 0 0.0 0 0.0 -0.11636289954185486 1.0278944969177246 -0.36559149622917175 -0.35953855514526367 -0.9165623784065247 -0.1748405396938324 0.753631055355072 0.7329650521278381 1 0.48877400159835815 0 0.06049613654613495 0 0.0 0 0.0 -0.11636289954185486 1.0498738288879395 -0.43372729420661926 -0.37830743193626404 -0.8667256832122803 -0.3249916136264801 0.7156935930252075 0.7401500344276428 1 0.4748282730579376 0 0.015973743051290512 0 0.0 0 0.0 0.0 1.0367169380187988 -0.4998640716075897 0.0 -0.82528156042099 -0.5646839737892151 0.6316680908203125 0.00020304521603975445 1 0.4652153253555298 0 0.0 0 0.0 0 0.0 -0.11636289954185486 1.0498738288879395 -0.43372729420661926 -0.37830743193626404 -0.8667256832122803 -0.3249916136264801 0.5117232203483582 0.08085393905639648 1 0.4748282730579376 0 0.015973743051290512 0 0.0 0 0.0 -0.09310946613550186 1.0738946199417114 -0.5040848851203918 -0.31342509388923645 -0.7467879056930542 -0.5865352153778076 0.578464150428772 0.07731097936630249 1 0.49157246947288513 0 0.0 0 0.0 0 0.0 -0.18949569761753082 1.3684693574905396 -0.2584112286567688 -0.860957682132721 0.5083467960357666 0.01657155156135559 0.5453251600265503 0.5488014817237854 1 0.4894542992115021 0 0.038765352219343185 0 0.0 0 0.0 -0.15597429871559143 1.3777180910110474 -0.39357221126556396 -0.6780602335929871 0.5271767377853394 -0.5121310949325562 0.6492087841033936 0.4990021586418152 1 0.5218733549118042 0 0.0 0 0.0 0 0.0 -0.18102072179317474 1.268702745437622 -0.39696988463401794 -0.8454847931861877 0.23203222453594208 -0.48088014125823975 0.5643640756607056 0.39259523153305054 1 0.5556833148002625 0 0.0 0 0.0 0 0.0 -0.21954664587974548 1.2720890045166016 -0.26756638288497925 -0.9747001528739929 0.22016052901744843 -0.038422804325819016 0.026100318878889084 0.1768089085817337 1 0.5544829368591309 0 0.05324206128716469 0 0.0 0 0.0 -0.17711219191551208 1.2111425399780273 -0.08284486830234528 -0.9780877232551575 0.07745597511529922 0.19315165281295776 0.11920919269323349 0.2266269475221634 1 0.6532512903213501 0 0.27260318398475647 2 0.0 0 0.0 -0.1459522545337677 1.3888463973999023 -0.1359991729259491 -0.8357188701629639 0.5164341926574707 0.18662068247795105 0.11418572813272476 0.1270817071199417 1 0.4451029896736145 0 0.11861109733581543 0 0.0 0 0.0 -0.17758521437644958 1.0509424209594727 -0.009452779777348042 -0.9080782532691956 -0.1265297383069992 -0.39918211102485657 0.13626915216445923 0.3208780884742737 0 0.7504675388336182 1 0.16131067276000977 9 0.05459078028798103 2 0.0 -0.17548006772994995 0.9740344882011414 0.03773410618305206 -0.8627887964248657 -0.095828115940094 -0.49632251262664795 0.14806827902793884 0.3685593605041504 0 0.7296560406684875 9 0.13401056826114655 1 0.059292711317539215 10 0.025198591873049736 -0.23453930020332336 1.0399465560913086 0.12781919538974762 -0.9630115628242493 0.15222632884979248 -0.2221747487783432 0.2123546004295349 0.34633561968803406 0 0.7073097229003906 9 0.15077142417430878 1 0.04680754616856575 2 7.789886149112135e-05 -0.07297612726688385 1.3934298753738403 0.16687017679214478 -0.4526505470275879 0.8392895460128784 0.3011261224746704 0.27515244483947754 0.15112540125846863 0 0.46099191904067993 1 0.1663425862789154 2 0.00029648616327904165 0 0.0 -0.08727402985095978 1.2957605123519897 0.34337759017944336 -0.4752952754497528 0.6862391829490662 0.5505844354629517 0.3502945005893707 0.2176021784543991 0 0.1636802703142166 2 0.05475941300392151 1 0.038439225405454636 0 0.0 0.0 1.3340036869049072 0.3454495668411255 0.0 0.8117618560791016 0.5839411616325378 0.3762849271297455 0.1762322634458542 0 0.15578706562519073 1 0.05526821315288544 2 0.030873998999595642 0 0.0 -0.1461862027645111 1.0710813999176025 0.3844836950302124 -0.808252215385437 0.17184972763061523 0.5631580352783203 0.3577803373336792 0.3372943699359894 0 0.205034539103508 9 0.10197971016168594 5 0.05613458901643753 2 0.02603248320519924 -0.15384304523468018 0.9721025228500366 0.4255926311016083 -0.7845393419265747 0.012146366760134697 0.6199224591255188 0.37392598390579224 0.3897009491920471 0 0.2848208546638489 9 0.23368224501609802 5 0.17045892775058746 2 0.012886017560958862 -0.06145928055047989 1.0601720809936523 0.5009114146232605 -0.7973570823669434 0.13812677562236786 0.5874508023262024 0.4337987005710602 0.340542733669281 2 0.09433535486459732 0 0.0 0 0.0 0 0.0 -0.23453930020332336 1.0399465560913086 0.12781919538974762 -0.9630115628242493 0.15222632884979248 -0.2221747487783432 0.2123546004295349 0.34633561968803406 0 0.7073097229003906 9 0.15077142417430878 1 0.04680754616856575 2 7.789886149112135e-05 -0.17548006772994995 0.9740344882011414 0.03773410618305206 -0.8627887964248657 -0.095828115940094 -0.49632251262664795 0.14806827902793884 0.3685593605041504 0 0.7296560406684875 9 0.13401056826114655 1 0.059292711317539215 10 0.025198591873049736 -0.27550312876701355 0.891650915145874 0.1857611984014511 -0.9843134880065918 0.15448468923568726 -0.08484145998954773 0.2322322577238083 0.43014711141586304 9 0.6623887419700623 0 0.23774738609790802 10 0.02405528351664543 2 0.014952762052416801 -0.2174592912197113 1.1028785705566406 0.2627961039543152 -0.9561144113540649 0.17743460834026337 0.23300881683826447 0.28516799211502075 0.32168421149253845 0 0.5695722103118896 9 0.11019442975521088 2 0.033312100917100906 1 0.024461444467306137 -0.1461862027645111 1.0710813999176025 0.3844836950302124 -0.808252215385437 0.17184972763061523 0.5631580352783203 0.3577803373336792 0.3372943699359894 0 0.205034539103508 9 0.10197971016168594 5 0.05613458901643753 2 0.02603248320519924 -0.17454805970191956 1.2118858098983765 0.34130558371543884 -0.8105410933494568 0.3488875925540924 0.47038179636001587 0.3298243582248688 0.2703784704208374 0 0.21865041553974152 2 0.06258596479892731 1 0.03174738213419914 9 0.02641637995839119 -0.1461862027645111 1.0710813999176025 0.3844836950302124 -0.808252215385437 0.17184972763061523 0.5631580352783203 0.3577803373336792 0.3372943699359894 0 0.205034539103508 9 0.10197971016168594 5 0.05613458901643753 2 0.02603248320519924 -0.2174592912197113 1.1028785705566406 0.2627961039543152 -0.9561144113540649 0.17743460834026337 0.23300881683826447 0.28516799211502075 0.32168421149253845 0 0.5695722103118896 9 0.11019442975521088 2 0.033312100917100906 1 0.024461444467306137 -0.23453930020332336 0.9702152013778687 0.2602241337299347 -0.922513484954834 0.1750236451625824 0.34394359588623047 0.278250515460968 0.390413373708725 0 0.4900068938732147 9 0.30810508131980896 2 0.017765844240784645 5 0.014790344052016735 -0.28093862533569336 0.5757372379302979 0.21273201704025269 -0.9537339210510254 -0.05871761217713356 0.2947782874107361 0.23695819079875946 0.5966961979866028 10 0.7957403063774109 9 0.1119142398238182 11 0.07978744059801102 0 0.0 -0.23106297850608826 0.49126142263412476 0.25890085101127625 -0.01269569993019104 -0.28205206990242004 0.9592882990837097 0.26937639713287354 0.6458678245544434 10 0.7228800058364868 11 0.17418056726455688 9 0.08285880833864212 0 0.0 -0.19692060351371765 0.6521245837211609 0.3191433846950531 -0.23175756633281708 -0.5444197058677673 0.8061159253120422 0.31354808807373047 0.5612506866455078 9 0.6037588119506836 10 0.246835857629776 5 0.06982867419719696 0 0.037357356399297714 -0.2720791697502136 0.7299654483795166 0.11808101087808609 -0.9231238961219788 0.09189122915267944 -0.3733329176902771 0.19017235934734344 0.5118117332458496 9 0.7446416020393372 10 0.1995791345834732 0 0.022359486669301987 0 0.0 -0.26951444149017334 0.581256628036499 0.0984039455652237 -0.9248329401016235 0.04589983820915222 -0.37754449248313904 0.17511127889156342 0.5908189415931702 10 0.8896211981773376 11 0.05666887387633324 9 0.0470425970852375 0 0.0 -0.28093862533569336 0.5757372379302979 0.21273201704025269 -0.9537339210510254 -0.05871761217713356 0.2947782874107361 0.23695819079875946 0.5966961979866028 10 0.7957403063774109 9 0.1119142398238182 11 0.07978744059801102 0 0.0 -0.18157455325126648 0.6501905918121338 0.005674920976161957 -0.335276335477829 -0.02075258642435074 -0.9418622255325317 0.10874716937541962 0.547910213470459 10 0.7585892677307129 9 0.17383593320846558 0 0.0 0 0.0 -0.20572468638420105 0.5131307244300842 -0.0020905807614326477 -0.2683492600917816 -0.022766808047890663 -0.9630420804023743 0.10834519565105438 0.6240481734275818 10 0.8090380430221558 11 0.16335545480251312 0 0.0 0 0.0 -0.26951444149017334 0.581256628036499 0.0984039455652237 -0.9248329401016235 0.04589983820915222 -0.37754449248313904 0.17511127889156342 0.5908189415931702 10 0.8896211981773376 11 0.05666887387633324 9 0.0470425970852375 0 0.0 -0.27883782982826233 0.4228806495666504 0.18713346123695374 -0.938962996006012 -0.1031220406293869 0.32813501358032227 0.219543918967247 0.6785994172096252 11 0.8290210962295532 10 0.15059085190296173 0 0.0 0 0.0 -0.22996719181537628 0.3549819588661194 0.21869893372058868 -0.035431988537311554 -0.23514512181282043 0.9713125824928284 0.24566324055194855 0.7194404006004333 11 0.8741137981414795 10 0.10180453956127167 0 0.0 0 0.0 -0.23106297850608826 0.49126142263412476 0.25890085101127625 -0.01269569993019104 -0.28205206990242004 0.9592882990837097 0.26937639713287354 0.6458678245544434 10 0.7228800058364868 11 0.17418056726455688 9 0.08285880833864212 0 0.0 -0.2707471251487732 0.4457245469093323 0.09905719757080078 -0.9538865089416504 0.043977171182632446 -0.29688405990600586 0.17186789214611053 0.6645772457122803 11 0.9251940250396729 10 0.06983630359172821 0 0.0 0 0.0 -0.27883782982826233 0.4228806495666504 0.18713346123695374 -0.938962996006012 -0.1031220406293869 0.32813501358032227 0.219543918967247 0.6785994172096252 11 0.8290210962295532 10 0.15059085190296173 0 0.0 0 0.0 -0.28093862533569336 0.5757372379302979 0.21273201704025269 -0.9537339210510254 -0.05871761217713356 0.2947782874107361 0.23695819079875946 0.5966961979866028 10 0.7957403063774109 9 0.1119142398238182 11 0.07978744059801102 0 0.0 -0.20572468638420105 0.5131307244300842 -0.0020905807614326477 -0.2683492600917816 -0.022766808047890663 -0.9630420804023743 0.10834519565105438 0.6240481734275818 10 0.8090380430221558 11 0.16335545480251312 0 0.0 0 0.0 -0.22422879934310913 0.414276123046875 0.015284525230526924 -0.3885311484336853 0.034516435116529465 -0.9207739233970642 0.11860677599906921 0.6787413358688354 11 0.9109067320823669 10 0.0850052610039711 0 0.0 0 0.0 -0.2707471251487732 0.4457245469093323 0.09905719757080078 -0.9538865089416504 0.043977171182632446 -0.29688405990600586 0.17186789214611053 0.6645772457122803 11 0.9251940250396729 10 0.06983630359172821 0 0.0 0 0.0 -0.2784595489501953 0.2965812683105469 0.1400669515132904 -0.9597155451774597 -0.10385448485612869 0.2609942853450775 0.19252367317676544 0.7464392781257629 11 0.967033863067627 0 0.0 0 0.0 0 0.0 -0.2353973239660263 0.23234236240386963 0.17769855260849 -0.2641071677207947 -0.28104496002197266 0.922605037689209 0.21930597722530365 0.7849949598312378 11 0.9059193730354309 12 0.08363302052021027 0 0.0 0 0.0 -0.22996719181537628 0.3549819588661194 0.21869893372058868 -0.035431988537311554 -0.23514512181282043 0.9713125824928284 0.24566324055194855 0.7194404006004333 11 0.8741137981414795 10 0.10180453956127167 0 0.0 0 0.0 -0.2707471251487732 0.4457245469093323 0.09905719757080078 -0.9538865089416504 0.043977171182632446 -0.29688405990600586 0.17186789214611053 0.6645772457122803 11 0.9251940250396729 10 0.06983630359172821 0 0.0 0 0.0 -0.27060168981552124 0.31022095680236816 0.05954404175281525 -0.9107333421707153 0.04211554303765297 -0.4108096659183502 0.1486281454563141 0.7380485534667969 11 0.9850865006446838 0 0.0 0 0.0 0 0.0 -0.2784595489501953 0.2965812683105469 0.1400669515132904 -0.9597155451774597 -0.10385448485612869 0.2609942853450775 0.19252367317676544 0.7464392781257629 11 0.967033863067627 0 0.0 0 0.0 0 0.0 -0.22422879934310913 0.414276123046875 0.015284525230526924 -0.3885311484336853 0.034516435116529465 -0.9207739233970642 0.11860677599906921 0.6787413358688354 11 0.9109067320823669 10 0.0850052610039711 0 0.0 0 0.0 -0.21422770619392395 0.2696647644042969 0.002181949093937874 -0.03393658250570297 0.06097598373889923 -0.9975585341453552 0.10336703807115555 0.7562169432640076 11 0.95918208360672 12 0.02208760753273964 0 0.0 0 0.0 -0.27060168981552124 0.31022095680236816 0.05954404175281525 -0.9107333421707153 0.04211554303765297 -0.4108096659183502 0.1486281454563141 0.7380485534667969 11 0.9850865006446838 0 0.0 0 0.0 0 0.0 -0.27068033814430237 0.17515099048614502 0.10558918118476868 -0.9747001528739929 -0.030365917831659317 0.2213507443666458 0.17252767086029053 0.8140662312507629 11 0.8328282237052917 12 0.16480152308940887 0 0.0 0 0.0 -0.24138523638248444 0.1334514617919922 0.1541205644607544 -0.37720876932144165 -0.20023193955421448 0.904202401638031 0.20311272144317627 0.8384818434715271 11 0.5651088356971741 12 0.4341517984867096 0 0.0 0 0.0 -0.2353973239660263 0.23234236240386963 0.17769855260849 -0.2641071677207947 -0.28104496002197266 0.922605037689209 0.21930597722530365 0.7849949598312378 11 0.9059193730354309 12 0.08363302052021027 0 0.0 0 0.0 -0.27060168981552124 0.31022095680236816 0.05954404175281525 -0.9107333421707153 0.04211554303765297 -0.4108096659183502 0.1486281454563141 0.7380485534667969 11 0.9850865006446838 0 0.0 0 0.0 0 0.0 -0.2632824182510376 0.192702054977417 0.030293196439743042 -0.8633686304092407 0.13098543882369995 -0.48722800612449646 0.129202738404274 0.8032676577568054 11 0.8625421524047852 12 0.13671983778476715 0 0.0 0 0.0 -0.27068033814430237 0.17515099048614502 0.10558918118476868 -0.9747001528739929 -0.030365917831659317 0.2213507443666458 0.17252767086029053 0.8140662312507629 11 0.8328282237052917 12 0.16480152308940887 0 0.0 0 0.0 -0.21422770619392395 0.2696647644042969 0.002181949093937874 -0.03393658250570297 0.06097598373889923 -0.9975585341453552 0.10336703807115555 0.7562169432640076 11 0.95918208360672 12 0.02208760753273964 0 0.0 0 0.0 -0.21539007127285004 0.1667546033859253 -0.007906094193458557 0.14654988050460815 0.3664967715740204 -0.9187902212142944 0.09296010434627533 0.8117510676383972 12 0.8476832509040833 11 0.15203344821929932 0 0.0 0 0.0 -0.2632824182510376 0.192702054977417 0.030293196439743042 -0.8633686304092407 0.13098543882369995 -0.48722800612449646 0.129202738404274 0.8032676577568054 11 0.8625421524047852 12 0.13671983778476715 0 0.0 0 0.0 -0.16467930376529694 0.764995813369751 -0.0035517215728759766 -0.6215704679489136 -0.09994811564683914 -0.7769402265548706 0.10110408067703247 0.4813825190067291 10 0.42210859060287476 9 0.36726126074790955 0 0.15537990629673004 0 0.0 -0.18157455325126648 0.6501905918121338 0.005674920976161957 -0.335276335477829 -0.02075258642435074 -0.9418622255325317 0.10874716937541962 0.547910213470459 10 0.7585892677307129 9 0.17383593320846558 0 0.0 0 0.0 -0.2720791697502136 0.7299654483795166 0.11808101087808609 -0.9231238961219788 0.09189122915267944 -0.3733329176902771 0.19017235934734344 0.5118117332458496 9 0.7446416020393372 10 0.1995791345834732 0 0.022359486669301987 0 0.0 -0.27550312876701355 0.891650915145874 0.1857611984014511 -0.9843134880065918 0.15448468923568726 -0.08484145998954773 0.2322322577238083 0.43014711141586304 9 0.6623887419700623 0 0.23774738609790802 10 0.02405528351664543 2 0.014952762052416801 -0.2720791697502136 0.7299654483795166 0.11808101087808609 -0.9231238961219788 0.09189122915267944 -0.3733329176902771 0.19017235934734344 0.5118117332458496 9 0.7446416020393372 10 0.1995791345834732 0 0.022359486669301987 0 0.0 -0.27312296628952026 0.7278225421905518 0.2726402282714844 -0.8949247598648071 -0.053621020168066025 0.442945659160614 0.2700149416923523 0.5173874497413635 9 0.5454464554786682 10 0.39267075061798096 0 0.01460160594433546 0 0.0 -0.22658583521842957 0.8450055122375488 0.3317200243473053 -0.7574999332427979 0.09625537693500519 0.6456496119499207 0.3105680048465729 0.4587601125240326 9 0.6072814464569092 0 0.1840784102678299 10 0.09625955671072006 5 0.06495034694671631 -0.27312296628952026 0.7278225421905518 0.2726402282714844 -0.8949247598648071 -0.053621020168066025 0.442945659160614 0.2700149416923523 0.5173874497413635 9 0.5454464554786682 10 0.39267075061798096 0 0.01460160594433546 0 0.0 -0.19692060351371765 0.6521245837211609 0.3191433846950531 -0.23175756633281708 -0.5444197058677673 0.8061159253120422 0.31354808807373047 0.5612506866455078 9 0.6037588119506836 10 0.246835857629776 5 0.06982867419719696 0 0.037357356399297714 -0.23453930020332336 0.9702152013778687 0.2602241337299347 -0.922513484954834 0.1750236451625824 0.34394359588623047 0.278250515460968 0.390413373708725 0 0.4900068938732147 9 0.30810508131980896 2 0.017765844240784645 5 0.014790344052016735 -0.27550312876701355 0.891650915145874 0.1857611984014511 -0.9843134880065918 0.15448468923568726 -0.08484145998954773 0.2322322577238083 0.43014711141586304 9 0.6623887419700623 0 0.23774738609790802 10 0.02405528351664543 2 0.014952762052416801 -0.22658583521842957 0.8450055122375488 0.3317200243473053 -0.7574999332427979 0.09625537693500519 0.6456496119499207 0.3105680048465729 0.4587601125240326 9 0.6072814464569092 0 0.1840784102678299 10 0.09625955671072006 5 0.06495034694671631 -0.15384304523468018 0.9721025228500366 0.4255926311016083 -0.7845393419265747 0.012146366760134697 0.6199224591255188 0.37392598390579224 0.3897009491920471 0 0.2848208546638489 9 0.23368224501609802 5 0.17045892775058746 2 0.012886017560958862 -0.23453930020332336 0.9702152013778687 0.2602241337299347 -0.922513484954834 0.1750236451625824 0.34394359588623047 0.278250515460968 0.390413373708725 0 0.4900068938732147 9 0.30810508131980896 2 0.017765844240784645 5 0.014790344052016735 -0.14257946610450745 0.8637868762016296 0.4032813608646393 -0.6905118227005005 -0.1661732792854309 0.7039399147033691 0.36863672733306885 0.4478047788143158 9 0.4740718901157379 0 0.22005127370357513 5 0.13825324177742004 10 0.05140248313546181 -0.0700145810842514 0.7434864640235901 0.4208555817604065 -0.34348583221435547 -0.5904721021652222 0.730277419090271 0.4059433937072754 0.5164225101470947 5 0.3594251573085785 0 0.33582305908203125 9 0.23320455849170685 10 0.009845860302448273 0.0 0.857164740562439 0.5244574546813965 0.0 -0.2601702809333801 0.965544581413269 0.47005921602249146 0.45042261481285095 9 0.27887073159217834 5 0.27887073159217834 0 0.22324655950069427 2 0.006800635252147913 -0.14257946610450745 0.8637868762016296 0.4032813608646393 -0.6905118227005005 -0.1661732792854309 0.7039399147033691 0.36863672733306885 0.4478047788143158 9 0.4740718901157379 0 0.22005127370357513 5 0.13825324177742004 10 0.05140248313546181 0.0 0.956256628036499 0.9388030171394348 0.0 0.9941099286079407 0.10831019282341003 0.9283884763717651 0.3782193958759308 4 0.9637963771820068 3 0.022601444274187088 0 0.0 0 0.0 0.0 0.9917649626731873 0.767984926700592 0.0 0.9606006145477295 0.2778710424900055 0.9070184826850891 0.2867380976676941 3 0.9851999282836914 0 0.0 0 0.0 0 0.0 -0.04179486632347107 0.9364920258522034 0.7827037572860718 -0.99993896484375 -0.010345774702727795 0.00030518509447574615 0.8751721382141113 0.30800822377204895 3 0.9776166081428528 4 0.0011483989655971527 0 0.0 0 0.0 0.0 0.8555480241775513 0.9201857447624207 0.0 -0.9908444285392761 -0.1347697377204895 0.8575089573860168 0.39543601870536804 4 0.9604564309120178 3 0.029231343418359756 0 0.0 0 0.0 -0.04524477198719978 0.9055635929107666 0.9612237811088562 -0.99981689453125 -0.011352885514497757 -0.013397625647485256 0.8992534875869751 0.4032728672027588 4 0.9947757124900818 0 0.0 0 0.0 0 0.0 -0.04179486632347107 0.9364920258522034 0.7827037572860718 -0.99993896484375 -0.010345774702727795 0.00030518509447574615 0.8751721382141113 0.30800822377204895 3 0.9776166081428528 4 0.0011483989655971527 0 0.0 0 0.0 -0.043747562915086746 0.9720137119293213 0.6651729345321655 -0.9987487196922302 -0.040162358433008194 0.028748435899615288 0.8648558259010315 0.24106882512569427 3 0.904050886631012 2 0.09398713707923889 0 0.0 0 0.0 -0.04179486632347107 0.9364920258522034 0.7827037572860718 -0.99993896484375 -0.010345774702727795 0.00030518509447574615 0.8751721382141113 0.30800822377204895 3 0.9776166081428528 4 0.0011483989655971527 0 0.0 0 0.0 0.0 0.9917649626731873 0.767984926700592 0.0 0.9606006145477295 0.2778710424900055 0.9070184826850891 0.2867380976676941 3 0.9851999282836914 0 0.0 0 0.0 0 0.0 0.0 0.8914740085601807 0.7481175661087036 0.0 -0.9678640365600586 -0.25135043263435364 0.8374303579330444 0.3030059337615967 3 0.9701143503189087 0 0.0 0 0.0 0 0.0 -0.04179486632347107 0.9364920258522034 0.7827037572860718 -0.99993896484375 -0.010345774702727795 0.00030518509447574615 0.8751721382141113 0.30800822377204895 3 0.9776166081428528 4 0.0011483989655971527 0 0.0 0 0.0 -0.043747562915086746 0.9720137119293213 0.6651729345321655 -0.9987487196922302 -0.040162358433008194 0.028748435899615288 0.8648558259010315 0.24106882512569427 3 0.904050886631012 2 0.09398713707923889 0 0.0 0 0.0 0.0 0.9691419005393982 0.525084912776947 0.0 -0.6431470513343811 0.765709400177002 0.8176729083061218 0.17667889595031738 3 0.08929336071014404 9 0.04753170534968376 5 0.04753170534968376 0 0.04456418380141258 0.0 0.9395209550857544 0.5993262529373169 0.0 -0.9361247420310974 -0.35163426399230957 0.8234695196151733 0.2191833257675171 3 0.5215328335762024 2 0.47024640440940857 0 0.0 0 0.0 -0.043747562915086746 0.9720137119293213 0.6651729345321655 -0.9987487196922302 -0.040162358433008194 0.028748435899615288 0.8648558259010315 0.24106882512569427 3 0.904050886631012 2 0.09398713707923889 0 0.0 0 0.0 0.0 1.0387544631958008 0.6412699818611145 0.0 0.8650471568107605 0.5016327500343323 0.9012990593910217 0.21379756927490234 2 0.7522167563438416 3 0.18018202483654022 0 0.0 0 0.0 0.0 1.0994129180908203 0.5527057647705078 0.0 0.6721396446228027 0.7404095530509949 0.9092386364936829 0.15684354305267334 2 0.008453886024653912 0 0.0 0 0.0 0 0.0 -0.06145928055047989 1.0601720809936523 0.5009114146232605 -0.7973570823669434 0.13812677562236786 0.5874508023262024 0.8645750880241394 0.13949787616729736 2 0.09433535486459732 0 0.0 0 0.0 0 0.0 0.0 1.0994129180908203 0.5527057647705078 0.0 0.6721396446228027 0.7404095530509949 0.9092386364936829 0.15684354305267334 2 0.008453886024653912 0 0.0 0 0.0 0 0.0 0.0 1.2170524597167969 0.4608973264694214 0.0 0.6628314852714539 0.748741090297699 0.9399983286857605 0.08305945992469788 2 0.008227117359638214 0 0.0 0 0.0 0 0.0 -0.0650172010064125 1.190718173980713 0.442444771528244 -0.5703604221343994 0.43330180644989014 0.6977751851081848 0.9024972915649414 0.07288584858179092 2 0.034502845257520676 0 0.0 0 0.0 0 0.0 0.0 0.8668436408042908 1.1575727462768555 0.0 -0.9759819507598877 0.21778008341789246 0.9091423749923706 0.51222825050354 4 0.9999624490737915 0 0.0 0 0.0 0 0.0 -0.04474841430783272 0.9156687259674072 1.1921391487121582 -0.9490646123886108 0.0554216131567955 0.3100985884666443 0.9444119334220886 0.5085054636001587 4 0.9999980926513672 0 0.0 0 0.0 0 0.0 -0.05299364775419235 0.9086697101593018 1.127077579498291 -0.9984740614891052 0.004181035794317722 0.05499435216188431 0.9316335320472717 0.4823167026042938 4 0.9999160170555115 0 0.0 0 0.0 0 0.0 -0.05299364775419235 0.9086697101593018 1.127077579498291 -0.9984740614891052 0.004181035794317722 0.05499435216188431 0.9316335320472717 0.4823167026042938 4 0.9999160170555115 0 0.0 0 0.0 0 0.0 -0.04474841430783272 0.9156687259674072 1.1921391487121582 -0.9490646123886108 0.0554216131567955 0.3100985884666443 0.9444119334220886 0.5085054636001587 4 0.9999980926513672 0 0.0 0 0.0 0 0.0 0.0 0.9566136598587036 1.1525006294250488 0.0 0.999267578125 0.03787346929311752 0.969742476940155 0.4851236343383789 4 0.9999452829360962 0 0.0 0 0.0 0 0.0 -0.04474841430783272 0.9156687259674072 1.1921391487121582 -0.9490646123886108 0.0554216131567955 0.3100985884666443 0.9444119334220886 0.5085054636001587 4 0.9999980926513672 0 0.0 0 0.0 0 0.0 0.0 0.886214554309845 1.234582543373108 0.0 -0.6190374493598938 0.7853327989578247 0.9404031038284302 0.540774941444397 4 0.9999971985816956 0 0.0 0 0.0 0 0.0 0.0 0.9405403137207031 1.2368535995483398 0.0 0.5934019088745117 0.8048951625823975 0.9683864712715149 0.5302330851554871 4 0.9999966025352478 0 0.0 0 0.0 0 0.0 -0.11636289954185486 1.0498738288879395 -0.43372729420661926 -0.37830743193626404 -0.8667256832122803 -0.3249916136264801 0.7156935930252075 0.7401500344276428 1 0.4748282730579376 0 0.015973743051290512 0 0.0 0 0.0 -0.11636289954185486 1.0278944969177246 -0.36559149622917175 -0.35953855514526367 -0.9165623784065247 -0.1748405396938324 0.753631055355072 0.7329650521278381 1 0.48877400159835815 0 0.06049613654613495 0 0.0 0 0.0 -0.18298302590847015 1.0755360126495361 -0.3897135853767395 -0.8033387064933777 -0.5719473958015442 -0.16568498313426971 0.7276731133460999 0.6964173316955566 1 0.5155777931213379 0 0.02516910806298256 0 0.0 0 0.0 -0.09310946613550186 1.0738946199417114 -0.5040848851203918 -0.31342509388923645 -0.7467879056930542 -0.5865352153778076 0.578464150428772 0.07731097936630249 1 0.49157246947288513 0 0.0 0 0.0 0 0.0 -0.11636289954185486 1.0498738288879395 -0.43372729420661926 -0.37830743193626404 -0.8667256832122803 -0.3249916136264801 0.5117232203483582 0.08085393905639648 1 0.4748282730579376 0 0.015973743051290512 0 0.0 0 0.0 -0.18298302590847015 1.097515344619751 -0.457849383354187 -0.8365123271942139 -0.36155277490615845 -0.4116947054862976 0.5151460766792297 0.1754748821258545 1 0.5168794393539429 0 0.0 0 0.0 0 0.0 -0.15271435678005219 1.1326109170913696 -0.08103625476360321 -0.9580675959587097 -0.28070923686027527 0.05710013210773468 0.8785715699195862 0.6217155456542969 1 0.6775277256965637 0 0.479615181684494 2 0.0 0 0.0 -0.17711219191551208 1.2111425399780273 -0.08284486830234528 -0.9780877232551575 0.07745597511529922 0.19315165281295776 0.8621803522109985 0.5771147608757019 1 0.6532512903213501 0 0.27260318398475647 2 0.0 0 0.0 -0.19168177247047424 1.123900294303894 -0.138879656791687 -0.8033081889152527 -0.43974119424819946 0.40159305930137634 0.841719388961792 0.630566418170929 1 0.7599913477897644 0 0.21201929450035095 0 0.0 0 0.0 -0.19893279671669006 1.1545631885528564 0.1498781144618988 -0.9536118507385254 0.28800317645072937 -0.0874660462141037 0.23297777771949768 0.28563162684440613 0 0.7194539904594421 1 0.08576151728630066 9 0.05332915112376213 2 0.03160868585109711 -0.17711219191551208 1.193559169769287 0.0424371063709259 -0.9813531637191772 0.1826837956905365 -0.05929746478796005 0.18139240145683289 0.2521224319934845 0 0.715113639831543 1 0.2307407557964325 2 0.01808408461511135 0 0.0 -0.17734870314598083 1.1222507953643799 0.016492163762450218 -0.9736624956130981 0.07391583174467087 -0.21564379334449768 0.15870711207389832 0.2861701548099518 0 0.7400459051132202 1 0.20915496349334717 9 0.02171226218342781 2 0.0 -0.2077341377735138 1.1319550275802612 -0.30893459916114807 -0.963957667350769 -0.23200170695781708 -0.13016144931316376 0.7566397786140442 0.6517723798751831 1 0.6343690752983093 0 0.06386665999889374 0 0.0 0 0.0 -0.18298302590847015 1.0755360126495361 -0.3897135853767395 -0.8033387064933777 -0.5719473958015442 -0.16568498313426971 0.7276731133460999 0.6964173316955566 1 0.5155777931213379 0 0.02516910806298256 0 0.0 0 0.0 -0.18298302590847015 1.0663853883743286 -0.31631630659103394 -0.7708975672721863 -0.6364635229110718 0.02456739917397499 0.7648314833641052 0.6872797608375549 1 0.5752794146537781 0 0.07986343652009964 0 0.0 0 0.0 -0.240505188703537 1.1706992387771606 -0.23119430243968964 -0.9902951121330261 -0.1357768476009369 0.029206212610006332 0.7882214188575745 0.6180115342140198 1 0.6814895868301392 0 0.09690888226032257 0 0.0 0 0.0 -0.2077341377735138 1.1319550275802612 -0.30893459916114807 -0.963957667350769 -0.23200170695781708 -0.13016144931316376 0.7566397786140442 0.6517723798751831 1 0.6343690752983093 0 0.06386665999889374 0 0.0 0 0.0 -0.19168177247047424 1.1063168048858643 -0.18283823132514954 -0.7293313145637512 -0.6620075106620789 0.17261269688606262 0.8232441544532776 0.6466988325119019 1 0.7561824321746826 0 0.16079038381576538 0 0.0 0 0.0 -0.17711219191551208 1.2111425399780273 -0.08284486830234528 -0.9780877232551575 0.07745597511529922 0.19315165281295776 0.8621803522109985 0.5771147608757019 1 0.6532512903213501 0 0.27260318398475647 2 0.0 0 0.0 -0.21954664587974548 1.2720890045166016 -0.26756638288497925 -0.9747001528739929 0.22016052901744843 -0.038422804325819016 0.7538788914680481 0.5733580589294434 1 0.5544829368591309 0 0.05324206128716469 0 0.0 0 0.0 -0.240505188703537 1.1706992387771606 -0.23119430243968964 -0.9902951121330261 -0.1357768476009369 0.029206212610006332 0.7882214188575745 0.6180115342140198 1 0.6814895868301392 0 0.09690888226032257 0 0.0 0 0.0 -0.18298302590847015 1.0755360126495361 -0.3897135853767395 -0.8033387064933777 -0.5719473958015442 -0.16568498313426971 0.7276731133460999 0.6964173316955566 1 0.5155777931213379 0 0.02516910806298256 0 0.0 0 0.0 -0.2077341377735138 1.1319550275802612 -0.30893459916114807 -0.963957667350769 -0.23200170695781708 -0.13016144931316376 0.7566397786140442 0.6517723798751831 1 0.6343690752983093 0 0.06386665999889374 0 0.0 0 0.0 -0.19536322355270386 1.1583302021026611 -0.38174155354499817 -0.9667958617210388 0.013214514590799809 -0.2551042139530182 0.7145208716392517 0.653191328048706 1 0.597184419631958 0 0.0194740928709507 0 0.0 0 0.0 -0.2077341377735138 1.1319550275802612 -0.30893459916114807 -0.963957667350769 -0.23200170695781708 -0.13016144931316376 0.7566397786140442 0.6517723798751831 1 0.6343690752983093 0 0.06386665999889374 0 0.0 0 0.0 -0.240505188703537 1.1706992387771606 -0.23119430243968964 -0.9902951121330261 -0.1357768476009369 0.029206212610006332 0.7882214188575745 0.6180115342140198 1 0.6814895868301392 0 0.09690888226032257 0 0.0 0 0.0 -0.21954664587974548 1.2720890045166016 -0.26756638288497925 -0.9747001528739929 0.22016052901744843 -0.038422804325819016 0.7538788914680481 0.5733580589294434 1 0.5544829368591309 0 0.05324206128716469 0 0.0 0 0.0 -0.18298302590847015 1.097515344619751 -0.457849383354187 -0.8365123271942139 -0.36155277490615845 -0.4116947054862976 0.5151460766792297 0.1754748821258545 1 0.5168794393539429 0 0.0 0 0.0 0 0.0 -0.19536322355270386 1.1583302021026611 -0.38174155354499817 -0.9667958617210388 0.013214514590799809 -0.2551042139530182 0.4866374433040619 0.2810833156108856 1 0.597184419631958 0 0.0194740928709507 0 0.0 0 0.0 -0.1287733018398285 1.2108771800994873 -0.5207679867744446 -0.6269417405128479 0.4066286087036133 -0.6644794940948486 0.6418904066085815 0.2361043244600296 1 0.5891550183296204 0 0.0 0 0.0 0 0.0 -0.1329372525215149 1.081725835800171 -0.11218704283237457 -0.8476821184158325 -0.5233924388885498 -0.08630634844303131 0.8733172416687012 0.657466471195221 1 0.7749943137168884 0 0.4033813774585724 0 0.0 0 0.0 -0.19168177247047424 1.123900294303894 -0.138879656791687 -0.8033081889152527 -0.43974119424819946 0.40159305930137634 0.841719388961792 0.630566418170929 1 0.7599913477897644 0 0.21201929450035095 0 0.0 0 0.0 -0.19168177247047424 1.1063168048858643 -0.18283823132514954 -0.7293313145637512 -0.6620075106620789 0.17261269688606262 0.8232441544532776 0.6466988325119019 1 0.7561824321746826 0 0.16079038381576538 0 0.0 0 0.0 -0.11636289954185486 1.0278944969177246 -0.36559149622917175 -0.35953855514526367 -0.9165623784065247 -0.1748405396938324 0.753631055355072 0.7329650521278381 1 0.48877400159835815 0 0.06049613654613495 0 0.0 0 0.0 -0.11636289954185486 1.018743872642517 -0.2921942174434662 -0.3807489275932312 -0.9202551245689392 0.09018219262361526 0.7902564406394958 0.7220689654350281 1 0.556355357170105 0 0.11100170016288757 0 0.0 0 0.0 -0.18298302590847015 1.0663853883743286 -0.31631630659103394 -0.7708975672721863 -0.6364635229110718 0.02456739917397499 0.7648314833641052 0.6872797608375549 1 0.5752794146537781 0 0.07986343652009964 0 0.0 0 0.0 -0.11636289954185486 1.053910732269287 -0.19108946621418 -0.5185399651527405 -0.8486281633377075 0.10443434119224548 0.8408097624778748 0.693621814250946 1 0.8277724981307983 0 0.24267315864562988 0 0.0 0 0.0 -0.19168177247047424 1.1063168048858643 -0.18283823132514954 -0.7293313145637512 -0.6620075106620789 0.17261269688606262 0.8232441544532776 0.6466988325119019 1 0.7561824321746826 0 0.16079038381576538 0 0.0 0 0.0 -0.18298302590847015 1.0663853883743286 -0.31631630659103394 -0.7708975672721863 -0.6364635229110718 0.02456739917397499 0.7648314833641052 0.6872797608375549 1 0.5752794146537781 0 0.07986343652009964 0 0.0 0 0.0 0.0 0.6803773045539856 0.31026414036750793 0.0 -0.9349040389060974 0.35480818152427673 0.4156637191772461 0.5957323312759399 9 0.4312181770801544 5 0.4312181770801544 0 0.0485517717897892 6 0.029864637181162834 0.0 0.7435801029205322 0.44523051381111145 0.0 -0.7386089563369751 0.6740928292274475 0.4464085102081299 0.5209009647369385 0 0.31352901458740234 9 0.3085489273071289 5 0.3085489273071289 2 0.014867695979773998 -0.0700145810842514 0.7434864640235901 0.4208555817604065 -0.34348583221435547 -0.5904721021652222 0.730277419090271 0.4059433937072754 0.5164225101470947 5 0.3594251573085785 0 0.33582305908203125 9 0.23320455849170685 10 0.009845860302448273 -0.13284938037395477 0.36867111921310425 0.12644071877002716 0.9558396935462952 -0.032807398587465286 0.2919705808162689 0.5843212604522705 0.7378981113433838 11 0.8813955783843994 10 0.1107533648610115 0 0.0 0 0.0 -0.14394588768482208 0.23762118816375732 0.13662073016166687 0.8795129060745239 -0.12250129878520966 0.4598223865032196 0.574836015701294 0.8107243776321411 11 0.9305272102355957 12 0.05715406686067581 0 0.0 0 0.0 -0.16027027368545532 0.24704813957214355 0.04676051810383797 0.8637043237686157 -0.0394604317843914 -0.5024262070655823 0.6260561943054199 0.8096365928649902 11 0.9630122780799866 12 0.014977204613387585 0 0.0 0 0.0 -0.14990682899951935 0.3839050531387329 0.037518344819545746 0.7688833475112915 -0.0393993966281414 -0.6381420493125916 0.635796308517456 0.7324582934379578 11 0.9107308983802795 10 0.08409671485424042 0 0.0 0 0.0 -0.14543934166431427 0.49590951204299927 0.026219138875603676 0.7388530969619751 -0.1509750634431839 -0.6567277908325195 0.6462750434875488 0.6684547066688538 10 0.8432952761650085 11 0.1331702321767807 0 0.0 0 0.0 -0.13148938119411469 0.47692030668258667 0.12428713589906693 0.9563280344009399 -0.13162633776664734 0.2609332501888275 0.5875352025032043 0.6752210855484009 10 0.8819923400878906 11 0.10448934882879257 0 0.0 0 0.0 -0.14394588768482208 0.23762118816375732 0.13662073016166687 0.8795129060745239 -0.12250129878520966 0.4598223865032196 0.574836015701294 0.8107243776321411 11 0.9305272102355957 12 0.05715406686067581 0 0.0 0 0.0 -0.1377425193786621 0.11639571189880371 0.12225279957056046 0.8777428269386292 -0.13699759542942047 0.4590594172477722 0.5784492492675781 0.8728861808776855 11 0.5234586596488953 12 0.4755793809890747 0 0.0 0 0.0 -0.15695250034332275 0.13945317268371582 0.05766453221440315 0.9262672662734985 0.10943937301635742 -0.36057618260383606 0.613688588142395 0.8671387434005737 11 0.7702589631080627 12 0.229200541973114 0 0.0 0 0.0 -0.14543934166431427 0.49590951204299927 0.026219138875603676 0.7388530969619751 -0.1509750634431839 -0.6567277908325195 0.6462750434875488 0.6684547066688538 10 0.8432952761650085 11 0.1331702321767807 0 0.0 0 0.0 -0.11494315415620804 0.6430489420890808 0.021784529089927673 0.44160282611846924 -0.4353465437889099 -0.7844783067703247 0.651059091091156 0.5829592347145081 10 0.7448842525482178 9 0.13043087720870972 5 0.03415199741721153 0 0.01684240624308586 -0.09827211499214172 0.6246875524520874 0.11954677850008011 0.6931974291801453 -0.7169103026390076 0.07397686690092087 0.5954965353012085 0.5888605713844299 10 0.836905837059021 9 0.07508403807878494 5 0.04053134843707085 0 0.0 0.0 0.6821010708808899 0.023523900657892227 0.0 -0.7949461340904236 -0.6066469550132751 0.3776485323905945 0.7474589347839355 9 0.252836138010025 5 0.252836138010025 10 0.18387460708618164 6 0.18387460708618164 0.0 0.6631669402122498 0.12123018503189087 0.0 -0.9987182021141052 -0.05050813406705856 0.3871926963329315 0.6944447755813599 9 0.30585911870002747 5 0.30585911870002747 10 0.179423525929451 6 0.179423525929451 -0.09827211499214172 0.6246875524520874 0.11954677850008011 0.6931974291801453 -0.7169103026390076 0.07397686690092087 0.3315928876399994 0.6813181042671204 10 0.836905837059021 9 0.07508403807878494 5 0.04053134843707085 0 0.0 0.0 0.6803773045539856 0.31026414036750793 0.0 -0.9349040389060974 0.35480818152427673 0.4156637191772461 0.5957323312759399 9 0.4312181770801544 5 0.4312181770801544 0 0.0485517717897892 6 0.029864637181162834 -0.19692060351371765 0.6521245837211609 0.3191433846950531 -0.23175756633281708 -0.5444197058677673 0.8061159253120422 0.31354808807373047 0.5612506866455078 9 0.6037588119506836 10 0.246835857629776 5 0.06982867419719696 0 0.037357356399297714 -0.09827211499214172 0.6246875524520874 0.11954677850008011 0.6931974291801453 -0.7169103026390076 0.07397686690092087 0.3315928876399994 0.6813181042671204 10 0.836905837059021 9 0.07508403807878494 5 0.04053134843707085 0 0.0 -0.21539007127285004 0.1667546033859253 -0.007906094193458557 0.14654988050460815 0.3664967715740204 -0.9187902212142944 0.6632874011993408 0.8602080941200256 12 0.8476832509040833 11 0.15203344821929932 0 0.0 0 0.0 -0.21422770619392395 0.2696647644042969 0.002181949093937874 -0.03393658250570297 0.06097598373889923 -0.9975585341453552 0.6666253805160522 0.8024744987487793 11 0.95918208360672 12 0.02208760753273964 0 0.0 0 0.0 -0.16027027368545532 0.24704813957214355 0.04676051810383797 0.8637043237686157 -0.0394604317843914 -0.5024262070655823 0.6260561943054199 0.8096365928649902 11 0.9630122780799866 12 0.014977204613387585 0 0.0 0 0.0 -0.21422770619392395 0.2696647644042969 0.002181949093937874 -0.03393658250570297 0.06097598373889923 -0.9975585341453552 0.6666253805160522 0.8024744987487793 11 0.95918208360672 12 0.02208760753273964 0 0.0 0 0.0 -0.22422879934310913 0.414276123046875 0.015284525230526924 -0.3885311484336853 0.034516435116529465 -0.9207739233970642 0.6815839409828186 0.7228387594223022 11 0.9109067320823669 10 0.0850052610039711 0 0.0 0 0.0 -0.14990682899951935 0.3839050531387329 0.037518344819545746 0.7688833475112915 -0.0393993966281414 -0.6381420493125916 0.635796308517456 0.7324582934379578 11 0.9107308983802795 10 0.08409671485424042 0 0.0 0 0.0 -0.22422879934310913 0.414276123046875 0.015284525230526924 -0.3885311484336853 0.034516435116529465 -0.9207739233970642 0.6815839409828186 0.7228387594223022 11 0.9109067320823669 10 0.0850052610039711 0 0.0 0 0.0 -0.20572468638420105 0.5131307244300842 -0.0020905807614326477 -0.2683492600917816 -0.022766808047890663 -0.9630420804023743 0.6855449676513672 0.6661345958709717 10 0.8090380430221558 11 0.16335545480251312 0 0.0 0 0.0 -0.14543934166431427 0.49590951204299927 0.026219138875603676 0.7388530969619751 -0.1509750634431839 -0.6567277908325195 0.6462750434875488 0.6684547066688538 10 0.8432952761650085 11 0.1331702321767807 0 0.0 0 0.0 -0.18157455325126648 0.6501905918121338 0.005674920976161957 -0.335276335477829 -0.02075258642435074 -0.9418622255325317 0.6889263391494751 0.5882138609886169 10 0.7585892677307129 9 0.17383593320846558 0 0.0 0 0.0 -0.11494315415620804 0.6430489420890808 0.021784529089927673 0.44160282611846924 -0.4353465437889099 -0.7844783067703247 0.651059091091156 0.5829592347145081 10 0.7448842525482178 9 0.13043087720870972 5 0.03415199741721153 0 0.01684240624308586 -0.14543934166431427 0.49590951204299927 0.026219138875603676 0.7388530969619751 -0.1509750634431839 -0.6567277908325195 0.6462750434875488 0.6684547066688538 10 0.8432952761650085 11 0.1331702321767807 0 0.0 0 0.0 -0.24138523638248444 0.1334514617919922 0.1541205644607544 -0.37720876932144165 -0.20023193955421448 0.904202401638031 0.5243164896965027 0.8715741634368896 11 0.5651088356971741 12 0.4341517984867096 0 0.0 0 0.0 -0.1377425193786621 0.11639571189880371 0.12225279957056046 0.8777428269386292 -0.13699759542942047 0.4590594172477722 0.5784492492675781 0.8728861808776855 11 0.5234586596488953 12 0.4755793809890747 0 0.0 0 0.0 -0.14394588768482208 0.23762118816375732 0.13662073016166687 0.8795129060745239 -0.12250129878520966 0.4598223865032196 0.574836015701294 0.8107243776321411 11 0.9305272102355957 12 0.05715406686067581 0 0.0 0 0.0 -0.22996719181537628 0.3549819588661194 0.21869893372058868 -0.035431988537311554 -0.23514512181282043 0.9713125824928284 0.5098583698272705 0.7451364398002625 11 0.8741137981414795 10 0.10180453956127167 0 0.0 0 0.0 -0.2353973239660263 0.23234236240386963 0.17769855260849 -0.2641071677207947 -0.28104496002197266 0.922605037689209 0.5196957588195801 0.8159016370773315 11 0.9059193730354309 12 0.08363302052021027 0 0.0 0 0.0 -0.14394588768482208 0.23762118816375732 0.13662073016166687 0.8795129060745239 -0.12250129878520966 0.4598223865032196 0.574836015701294 0.8107243776321411 11 0.9305272102355957 12 0.05715406686067581 0 0.0 0 0.0 -0.22996719181537628 0.3549819588661194 0.21869893372058868 -0.035431988537311554 -0.23514512181282043 0.9713125824928284 0.5098583698272705 0.7451364398002625 11 0.8741137981414795 10 0.10180453956127167 0 0.0 0 0.0 -0.13284938037395477 0.36867111921310425 0.12644071877002716 0.9558396935462952 -0.032807398587465286 0.2919705808162689 0.5843212604522705 0.7378981113433838 11 0.8813955783843994 10 0.1107533648610115 0 0.0 0 0.0 -0.13148938119411469 0.47692030668258667 0.12428713589906693 0.9563280344009399 -0.13162633776664734 0.2609332501888275 0.5875352025032043 0.6752210855484009 10 0.8819923400878906 11 0.10448934882879257 0 0.0 0 0.0 -0.23106297850608826 0.49126142263412476 0.25890085101127625 -0.01269569993019104 -0.28205206990242004 0.9592882990837097 0.4915243089199066 0.6694369912147522 10 0.7228800058364868 11 0.17418056726455688 9 0.08285880833864212 0 0.0 -0.13148938119411469 0.47692030668258667 0.12428713589906693 0.9563280344009399 -0.13162633776664734 0.2609332501888275 0.5875352025032043 0.6752210855484009 10 0.8819923400878906 11 0.10448934882879257 0 0.0 0 0.0 -0.09827211499214172 0.6246875524520874 0.11954677850008011 0.6931974291801453 -0.7169103026390076 0.07397686690092087 0.5954965353012085 0.5888605713844299 10 0.836905837059021 9 0.07508403807878494 5 0.04053134843707085 0 0.0 -0.10067398101091385 0.9663213491439819 -0.08786684274673462 -0.712576687335968 -0.24292734265327454 -0.6581621766090393 0.06711860746145248 0.3559820055961609 0 0.6806139349937439 1 0.1954726278781891 9 0.04794127866625786 10 0.04703438654541969 -0.17758521437644958 1.0509424209594727 -0.009452779777348042 -0.9080782532691956 -0.1265297383069992 -0.39918211102485657 0.13626915216445923 0.3208780884742737 0 0.7504675388336182 1 0.16131067276000977 9 0.05459078028798103 2 0.0 -0.1329372525215149 1.081725835800171 -0.11218704283237457 -0.8476821184158325 -0.5233924388885498 -0.08630634844303131 0.08180608600378036 0.2900291383266449 1 0.7749943137168884 0 0.4033813774585724 0 0.0 0 0.0 -0.16467930376529694 0.764995813369751 -0.0035517215728759766 -0.6215704679489136 -0.09994811564683914 -0.7769402265548706 0.10110408067703247 0.4813825190067291 10 0.42210859060287476 9 0.36726126074790955 0 0.15537990629673004 0 0.0 -0.11275650560855865 0.858371376991272 -0.07582104951143265 -0.6566362380981445 -0.06662190705537796 -0.7512131333351135 0.06558506190776825 0.4164593815803528 0 0.6033953428268433 10 0.14807790517807007 9 0.11798921227455139 1 0.0606958270072937 -0.07171060144901276 0.7989503741264343 -0.08710231631994247 -0.34336376190185547 -0.4688863754272461 -0.8137760758399963 0.038444168865680695 0.4439431428909302 0 0.5288071632385254 10 0.14961419999599457 9 0.14801231026649475 5 0.0648399293422699 -0.18157455325126648 0.6501905918121338 0.005674920976161957 -0.335276335477829 -0.02075258642435074 -0.9418622255325317 0.10874716937541962 0.547910213470459 10 0.7585892677307129 9 0.17383593320846558 0 0.0 0 0.0 -0.16467930376529694 0.764995813369751 -0.0035517215728759766 -0.6215704679489136 -0.09994811564683914 -0.7769402265548706 0.10110408067703247 0.4813825190067291 10 0.42210859060287476 9 0.36726126074790955 0 0.15537990629673004 0 0.0 -0.09191875904798508 0.7384775280952454 -0.004247918725013733 -0.11261329799890518 -0.5351725816726685 -0.8371837735176086 0.058216046541929245 0.4974377155303955 10 0.3449857234954834 9 0.3330496847629547 0 0.19796177744865417 5 0.05866539850831032 -0.07171060144901276 0.7989503741264343 -0.08710231631994247 -0.34336376190185547 -0.4688863754272461 -0.8137760758399963 0.038444168865680695 0.4439431428909302 0 0.5288071632385254 10 0.14961419999599457 9 0.14801231026649475 5 0.0648399293422699 0.0 0.8078899383544922 -0.10290303826332092 0.0 -0.5152745246887207 -0.8569902777671814 0.00020304521603975445 0.4368830919265747 0 0.5602840185165405 5 0.09895451366901398 9 0.09895450621843338 6 0.08096460998058319 0.0 0.7530391812324524 -0.05506258085370064 0.0 -0.7327799201011658 -0.6804406642913818 0.002868201583623886 0.4762572944164276 0 0.40316474437713623 9 0.17333783209323883 5 0.17333783209323883 6 0.10585487633943558 0.0 0.866442084312439 -0.12817779183387756 0.0 -0.19495223462581635 -0.9808038473129272 0.00040259622619487345 0.4023122787475586 0 0.6251106858253479 1 0.10255718231201172 5 0.061067480593919754 9 0.06106747314333916 0.0 0.8078899383544922 -0.10290303826332092 0.0 -0.5152745246887207 -0.8569902777671814 0.00020304521603975445 0.4368830919265747 0 0.5602840185165405 5 0.09895451366901398 9 0.09895450621843338 6 0.08096460998058319 -0.07171060144901276 0.7989503741264343 -0.08710231631994247 -0.34336376190185547 -0.4688863754272461 -0.8137760758399963 0.038444168865680695 0.4439431428909302 0 0.5288071632385254 10 0.14961419999599457 9 0.14801231026649475 5 0.0648399293422699 -0.2632824182510376 0.192702054977417 0.030293196439743042 -0.8633686304092407 0.13098543882369995 -0.48722800612449646 0.129202738404274 0.8032676577568054 11 0.8625421524047852 12 0.13671983778476715 0 0.0 0 0.0 -0.2741932272911072 0.11445808410644531 0.004911437630653381 -0.8896145224571228 0.3404645025730133 -0.30430006980895996 0.11660508066415787 0.8494014739990234 12 0.8897741436958313 11 0.11008638888597488 0 0.0 0 0.0 -0.279649019241333 0.08738040924072266 0.07750121504068375 -0.9613330364227295 -0.143650621175766 0.23493148386478424 0.15701256692409515 0.8617966175079346 12 0.8143556118011475 11 0.185213103890419 0 0.0 0 0.0 -0.24138523638248444 0.1334514617919922 0.1541205644607544 -0.37720876932144165 -0.20023193955421448 0.904202401638031 0.5243164896965027 0.8715741634368896 11 0.5651088356971741 12 0.4341517984867096 0 0.0 0 0.0 -0.24097920954227448 0.052500367164611816 0.1248338520526886 -0.40839868783950806 -0.49644458293914795 0.765953540802002 0.5384967923164368 0.9167900085449219 12 0.824219822883606 11 0.1755632609128952 0 0.0 0 0.0 -0.14728760719299316 0.0641862154006958 0.11256571114063263 0.7809076309204102 -0.348002552986145 0.5186620950698853 0.5806708335876465 0.896611750125885 12 0.7242515683174133 11 0.27535006403923035 0 0.0 0 0.0 -0.279649019241333 0.08738040924072266 0.07750121504068375 -0.9613330364227295 -0.143650621175766 0.23493148386478424 0.15701256692409515 0.8617966175079346 12 0.8143556118011475 11 0.185213103890419 0 0.0 0 0.0 -0.24097920954227448 0.052500367164611816 0.1248338520526886 -0.40839868783950806 -0.49644458293914795 0.765953540802002 0.1878468245267868 0.882355809211731 12 0.824219822883606 11 0.1755632609128952 0 0.0 0 0.0 -0.24138523638248444 0.1334514617919922 0.1541205644607544 -0.37720876932144165 -0.20023193955421448 0.904202401638031 0.20311272144317627 0.8384818434715271 11 0.5651088356971741 12 0.4341517984867096 0 0.0 0 0.0 -0.17186416685581207 0.0006354935467243195 0.08157961070537567 0.47993406653404236 -0.790582001209259 0.3802606165409088 0.5846631526947021 0.9269393086433411 12 0.915589451789856 11 0.08427349478006363 0 0.0 0 0.0 -0.14728760719299316 0.0641862154006958 0.11256571114063263 0.7809076309204102 -0.348002552986145 0.5186620950698853 0.5806708335876465 0.896611750125885 12 0.7242515683174133 11 0.27535006403923035 0 0.0 0 0.0 -0.24097920954227448 0.052500367164611816 0.1248338520526886 -0.40839868783950806 -0.49644458293914795 0.765953540802002 0.5384967923164368 0.9167900085449219 12 0.824219822883606 11 0.1755632609128952 0 0.0 0 0.0 -0.14728760719299316 0.0641862154006958 0.11256571114063263 0.7809076309204102 -0.348002552986145 0.5186620950698853 0.5806708335876465 0.896611750125885 12 0.7242515683174133 11 0.27535006403923035 0 0.0 0 0.0 -0.17186416685581207 0.0006354935467243195 0.08157961070537567 0.47993406653404236 -0.790582001209259 0.3802606165409088 0.5846631526947021 0.9269393086433411 12 0.915589451789856 11 0.08427349478006363 0 0.0 0 0.0 -0.1543327420949936 0.08759307861328125 0.01969859004020691 0.9604480266571045 0.17163610458374023 -0.21918393671512604 0.624218761920929 0.8986101746559143 12 0.8263624310493469 11 0.17350547015666962 0 0.0 0 0.0 -0.24350489675998688 0.0006354935467243195 0.051150236278772354 -0.47935423254966736 -0.8420056700706482 0.24741356074810028 0.1503724455833435 0.9156708121299744 12 0.9519876837730408 11 0.045869868248701096 0 0.0 0 0.0 -0.24097920954227448 0.052500367164611816 0.1248338520526886 -0.40839868783950806 -0.49644458293914795 0.765953540802002 0.1878468245267868 0.882355809211731 12 0.824219822883606 11 0.1755632609128952 0 0.0 0 0.0 -0.279649019241333 0.08738040924072266 0.07750121504068375 -0.9613330364227295 -0.143650621175766 0.23493148386478424 0.15701256692409515 0.8617966175079346 12 0.8143556118011475 11 0.185213103890419 0 0.0 0 0.0 -0.2765810489654541 0.0468442440032959 0.0249030739068985 -0.940153181552887 -0.31360819935798645 0.13303017616271973 0.13173434138298035 0.8852612376213074 12 0.9507208466529846 11 0.0483645461499691 0 0.0 0 0.0 -0.279649019241333 0.08738040924072266 0.07750121504068375 -0.9613330364227295 -0.143650621175766 0.23493148386478424 0.15701256692409515 0.8617966175079346 12 0.8143556118011475 11 0.185213103890419 0 0.0 0 0.0 -0.2741932272911072 0.11445808410644531 0.004911437630653381 -0.8896145224571228 0.3404645025730133 -0.30430006980895996 0.11660508066415787 0.8494014739990234 12 0.8897741436958313 11 0.11008638888597488 0 0.0 0 0.0 -0.2741932272911072 0.11445808410644531 0.004911437630653381 -0.8896145224571228 0.3404645025730133 -0.30430006980895996 0.11660508066415787 0.8494014739990234 12 0.8897741436958313 11 0.11008638888597488 0 0.0 0 0.0 -0.21539007127285004 0.1667546033859253 -0.007906094193458557 0.14654988050460815 0.3664967715740204 -0.9187902212142944 0.09296010434627533 0.8117510676383972 12 0.8476832509040833 11 0.15203344821929932 0 0.0 0 0.0 -0.22046658396720886 0.09783637523651123 -0.07096876204013824 -0.016296884045004845 0.8249458074569702 -0.5649281144142151 0.06424757838249207 0.8535482883453369 12 0.99355149269104 0 0.0 0 0.0 0 0.0 -0.1543327420949936 0.08759307861328125 0.01969859004020691 0.9604480266571045 0.17163610458374023 -0.21918393671512604 0.624218761920929 0.8986101746559143 12 0.8263624310493469 11 0.17350547015666962 0 0.0 0 0.0 -0.22046658396720886 0.09783637523651123 -0.07096876204013824 -0.016296884045004845 0.8249458074569702 -0.5649281144142151 0.6826233267784119 0.909465491771698 12 0.99355149269104 0 0.0 0 0.0 0 0.0 -0.21539007127285004 0.1667546033859253 -0.007906094193458557 0.14654988050460815 0.3664967715740204 -0.9187902212142944 0.6632874011993408 0.8602080941200256 12 0.8476832509040833 11 0.15203344821929932 0 0.0 0 0.0 -0.16382159292697906 0.0006354935467243195 -0.08050514757633209 0.6014587879180908 -0.7863094210624695 -0.14111758768558502 0.6353160738945007 0.9585727453231812 12 0.986153244972229 0 0.0 0 0.0 0 0.0 -0.14809073507785797 0.03774738311767578 -0.1051795557141304 0.8722190260887146 0.06930753588676453 -0.4841151237487793 0.6554734706878662 0.94559645652771 12 0.9824442863464355 0 0.0 0 0.0 0 0.0 -0.1543327420949936 0.08759307861328125 0.01969859004020691 0.9604480266571045 0.17163610458374023 -0.21918393671512604 0.624218761920929 0.8986101746559143 12 0.8263624310493469 11 0.17350547015666962 0 0.0 0 0.0 -0.14809073507785797 0.03774738311767578 -0.1051795557141304 0.8722190260887146 0.06930753588676453 -0.4841151237487793 0.6554734706878662 0.94559645652771 12 0.9824442863464355 0 0.0 0 0.0 0 0.0 -0.16382159292697906 0.0006354935467243195 -0.08050514757633209 0.6014587879180908 -0.7863094210624695 -0.14111758768558502 0.6353160738945007 0.9585727453231812 12 0.986153244972229 0 0.0 0 0.0 0 0.0 -0.20350560545921326 0.0006354935467243195 -0.11223234236240387 0.10193182528018951 -0.844508171081543 -0.5256813168525696 0.6475530862808228 0.9809802174568176 12 0.9989274144172668 0 0.0 0 0.0 0 0.0 -0.2590513527393341 0.0006354935467243195 -0.09128285944461823 -0.5378581881523132 -0.7852412462234497 -0.30668050050735474 0.07569105178117752 0.9268571734428406 12 0.9953135848045349 0 0.0 0 0.0 0 0.0 -0.27682194113731384 0.03609919548034668 -0.09393604099750519 -0.8938566446304321 0.03878902643918991 -0.4466078579425812 0.07372365891933441 0.8974340558052063 12 0.9938223958015442 0 0.0 0 0.0 0 0.0 -0.21444743871688843 0.05028212070465088 -0.15147438645362854 -0.03833124786615372 0.21689504384994507 -0.9754325747489929 0.029200129210948944 0.8926466703414917 12 1.0102593898773193 0 0.0 0 0.0 0 0.0 -0.24350489675998688 0.0006354935467243195 0.051150236278772354 -0.47935423254966736 -0.8420056700706482 0.24741356074810028 0.5689922571182251 0.960877001285553 12 0.9519876837730408 11 0.045869868248701096 0 0.0 0 0.0 -0.20350560545921326 0.0006354935467243195 -0.11223234236240387 0.10193182528018951 -0.844508171081543 -0.5256813168525696 0.6475530862808228 0.9809802174568176 12 0.9989274144172668 0 0.0 0 0.0 0 0.0 -0.16382159292697906 0.0006354935467243195 -0.08050514757633209 0.6014587879180908 -0.7863094210624695 -0.14111758768558502 0.6353160738945007 0.9585727453231812 12 0.986153244972229 0 0.0 0 0.0 0 0.0 -0.22046658396720886 0.09783637523651123 -0.07096876204013824 -0.016296884045004845 0.8249458074569702 -0.5649281144142151 0.6826233267784119 0.909465491771698 12 0.99355149269104 0 0.0 0 0.0 0 0.0 -0.1543327420949936 0.08759307861328125 0.01969859004020691 0.9604480266571045 0.17163610458374023 -0.21918393671512604 0.624218761920929 0.8986101746559143 12 0.8263624310493469 11 0.17350547015666962 0 0.0 0 0.0 -0.14809073507785797 0.03774738311767578 -0.1051795557141304 0.8722190260887146 0.06930753588676453 -0.4841151237487793 0.6554734706878662 0.94559645652771 12 0.9824442863464355 0 0.0 0 0.0 0 0.0 -0.2765810489654541 0.0468442440032959 0.0249030739068985 -0.940153181552887 -0.31360819935798645 0.13303017616271973 0.13173434138298035 0.8852612376213074 12 0.9507208466529846 11 0.0483645461499691 0 0.0 0 0.0 -0.27682194113731384 0.03609919548034668 -0.09393604099750519 -0.8938566446304321 0.03878902643918991 -0.4466078579425812 0.07372365891933441 0.8974340558052063 12 0.9938223958015442 0 0.0 0 0.0 0 0.0 -0.2590513527393341 0.0006354935467243195 -0.09128285944461823 -0.5378581881523132 -0.7852412462234497 -0.30668050050735474 0.07569105178117752 0.9268571734428406 12 0.9953135848045349 0 0.0 0 0.0 0 0.0 -0.27682194113731384 0.03609919548034668 -0.09393604099750519 -0.8938566446304321 0.03878902643918991 -0.4466078579425812 0.07372365891933441 0.8974340558052063 12 0.9938223958015442 0 0.0 0 0.0 0 0.0 -0.2862442135810852 0.08407890796661377 -0.013642758131027222 -0.9532761573791504 0.27402570843696594 -0.1270180344581604 0.10861167311668396 0.8684667348861694 12 0.9602087140083313 11 0.029473556205630302 0 0.0 0 0.0 -0.22046658396720886 0.09783637523651123 -0.07096876204013824 -0.016296884045004845 0.8249458074569702 -0.5649281144142151 0.06424757838249207 0.8535482883453369 12 0.99355149269104 0 0.0 0 0.0 0 0.0 -0.17734870314598083 1.1222507953643799 0.016492163762450218 -0.9736624956130981 0.07391583174467087 -0.21564379334449768 0.15870711207389832 0.2861701548099518 0 0.7400459051132202 1 0.20915496349334717 9 0.02171226218342781 2 0.0 -0.17711219191551208 1.193559169769287 0.0424371063709259 -0.9813531637191772 0.1826837956905365 -0.05929746478796005 0.18139240145683289 0.2521224319934845 0 0.715113639831543 1 0.2307407557964325 2 0.01808408461511135 0 0.0 -0.17711219191551208 1.2111425399780273 -0.08284486830234528 -0.9780877232551575 0.07745597511529922 0.19315165281295776 0.11920919269323349 0.2266269475221634 1 0.6532512903213501 0 0.27260318398475647 2 0.0 0 0.0 -0.23453930020332336 1.0399465560913086 0.12781919538974762 -0.9630115628242493 0.15222632884979248 -0.2221747487783432 0.2123546004295349 0.34633561968803406 0 0.7073097229003906 9 0.15077142417430878 1 0.04680754616856575 2 7.789886149112135e-05 -0.23453930020332336 0.9702152013778687 0.2602241337299347 -0.922513484954834 0.1750236451625824 0.34394359588623047 0.278250515460968 0.390413373708725 0 0.4900068938732147 9 0.30810508131980896 2 0.017765844240784645 5 0.014790344052016735 -0.2174592912197113 1.1028785705566406 0.2627961039543152 -0.9561144113540649 0.17743460834026337 0.23300881683826447 0.28516799211502075 0.32168421149253845 0 0.5695722103118896 9 0.11019442975521088 2 0.033312100917100906 1 0.024461444467306137 -0.17711219191551208 1.193559169769287 0.0424371063709259 -0.9813531637191772 0.1826837956905365 -0.05929746478796005 0.18139240145683289 0.2521224319934845 0 0.715113639831543 1 0.2307407557964325 2 0.01808408461511135 0 0.0 -0.19893279671669006 1.1545631885528564 0.1498781144618988 -0.9536118507385254 0.28800317645072937 -0.0874660462141037 0.23297777771949768 0.28563162684440613 0 0.7194539904594421 1 0.08576151728630066 9 0.05332915112376213 2 0.03160868585109711 -0.1459522545337677 1.3251063823699951 0.18270058929920197 -0.8204901218414307 0.5527207255363464 0.14572587609291077 0.2664920687675476 0.20125365257263184 0 0.5595225095748901 1 0.11560860276222229 2 0.00013760886213276535 0 0.0 -0.09388621896505356 1.0232656002044678 -0.1361936777830124 -0.6617023348808289 -0.5929136276245117 -0.4588763117790222 0.8785715699195862 0.6988553404808044 1 0.7061814665794373 0 0.505308985710144 0 0.0 0 0.0 -0.1329372525215149 1.081725835800171 -0.11218704283237457 -0.8476821184158325 -0.5233924388885498 -0.08630634844303131 0.8733172416687012 0.657466471195221 1 0.7749943137168884 0 0.4033813774585724 0 0.0 0 0.0 -0.11636289954185486 1.053910732269287 -0.19108946621418 -0.5185399651527405 -0.8486281633377075 0.10443434119224548 0.8408097624778748 0.693621814250946 1 0.8277724981307983 0 0.24267315864562988 0 0.0 0 0.0 -0.09191875904798508 0.7384775280952454 -0.004247918725013733 -0.11261329799890518 -0.5351725816726685 -0.8371837735176086 0.058216046541929245 0.4974377155303955 10 0.3449857234954834 9 0.3330496847629547 0 0.19796177744865417 5 0.05866539850831032 0.0 0.7530391812324524 -0.05506258085370064 0.0 -0.7327799201011658 -0.6804406642913818 0.002868201583623886 0.4762572944164276 0 0.40316474437713623 9 0.17333783209323883 5 0.17333783209323883 6 0.10585487633943558 0.0 0.6821010708808899 0.023523900657892227 0.0 -0.7949461340904236 -0.6066469550132751 0.007275765296071768 0.5337982773780823 9 0.252836138010025 5 0.252836138010025 10 0.18387460708618164 6 0.18387460708618164 -0.10067398101091385 0.9663213491439819 -0.08786684274673462 -0.712576687335968 -0.24292734265327454 -0.6581621766090393 0.06711860746145248 0.3559820055961609 0 0.6806139349937439 1 0.1954726278781891 9 0.04794127866625786 10 0.04703438654541969 0.0 0.9426074624061584 -0.1419200301170349 0.0 -0.413312166929245 -0.9105807542800903 0.0026334882713854313 0.3612455725669861 0 0.6058444380760193 1 0.249999538064003 5 0.01192476972937584 9 0.011924747377634048 0.0 0.866442084312439 -0.12817779183387756 0.0 -0.19495223462581635 -0.9808038473129272 0.00040259622619487345 0.4023122787475586 0 0.6251106858253479 1 0.10255718231201172 5 0.061067480593919754 9 0.06106747314333916 -0.17548006772994995 0.9740344882011414 0.03773410618305206 -0.8627887964248657 -0.095828115940094 -0.49632251262664795 0.14806827902793884 0.3685593605041504 0 0.7296560406684875 9 0.13401056826114655 1 0.059292711317539215 10 0.025198591873049736 -0.11275650560855865 0.858371376991272 -0.07582104951143265 -0.6566362380981445 -0.06662190705537796 -0.7512131333351135 0.06558506190776825 0.4164593815803528 0 0.6033953428268433 10 0.14807790517807007 9 0.11798921227455139 1 0.0606958270072937 -0.16467930376529694 0.764995813369751 -0.0035517215728759766 -0.6215704679489136 -0.09994811564683914 -0.7769402265548706 0.10110408067703247 0.4813825190067291 10 0.42210859060287476 9 0.36726126074790955 0 0.15537990629673004 0 0.0 0.0 0.8515796661376953 1.0820811986923218 0.0 -0.9989928603172302 0.04452650621533394 0.8863584995269775 0.47759830951690674 4 0.9997074007987976 0 0.0 0 0.0 0 0.0 -0.05299364775419235 0.9086697101593018 1.127077579498291 -0.9984740614891052 0.004181035794317722 0.05499435216188431 0.9316335320472717 0.4823167026042938 4 0.9999160170555115 0 0.0 0 0.0 0 0.0 -0.04524477198719978 0.9055635929107666 0.9612237811088562 -0.99981689453125 -0.011352885514497757 -0.013397625647485256 0.8992534875869751 0.4032728672027588 4 0.9947757124900818 0 0.0 0 0.0 0 0.0 0.0 0.9533488154411316 1.0950424671173096 0.0 0.9988097548484802 -0.048158206045627594 0.9595854878425598 0.4558004140853882 4 0.9995507597923279 0 0.0 0 0.0 0 0.0 0.0 0.956256628036499 0.9388030171394348 0.0 0.9941099286079407 0.10831019282341003 0.9283884763717651 0.3782193958759308 4 0.9637963771820068 3 0.022601444274187088 0 0.0 0 0.0 -0.04524477198719978 0.9055635929107666 0.9612237811088562 -0.99981689453125 -0.011352885514497757 -0.013397625647485256 0.8992534875869751 0.4032728672027588 4 0.9947757124900818 0 0.0 0 0.0 0 0.0 -0.15597429871559143 1.3777180910110474 -0.39357221126556396 -0.6780602335929871 0.5271767377853394 -0.5121310949325562 0.6492087841033936 0.4990021586418152 1 0.5218733549118042 0 0.0 0 0.0 0 0.0 -0.18949569761753082 1.3684693574905396 -0.2584112286567688 -0.860957682132721 0.5083467960357666 0.01657155156135559 0.5453251600265503 0.5488014817237854 1 0.4894542992115021 0 0.038765352219343185 0 0.0 0 0.0 -0.09474784880876541 1.4414864778518677 -0.305348664522171 -0.47962889075279236 0.8599505424499512 -0.1743827611207962 0.6945981383323669 0.5729519724845886 1 0.48631343245506287 0 0.006849147379398346 0 0.0 0 0.0 -0.15597429871559143 1.3777180910110474 -0.39357221126556396 -0.6780602335929871 0.5271767377853394 -0.5121310949325562 0.6492087841033936 0.4990021586418152 1 0.5218733549118042 0 0.0 0 0.0 0 0.0 -0.06429819017648697 1.3896068334579468 -0.43792080879211426 -0.3429059684276581 0.5780205726623535 -0.7404400706291199 0.7636973261833191 0.4662829637527466 1 0.5313303470611572 0 0.0 0 0.0 0 0.0 -0.04986967518925667 1.2690738439559937 -0.4816516935825348 -0.4589068293571472 0.574968695640564 -0.6773278117179871 0.7414538264274597 0.31137514114379883 1 0.5933704376220703 0 0.0 0 0.0 0 0.0 0.0 1.102358341217041 -0.5441152453422546 0.0 -0.5053865313529968 -0.8628803491592407 0.6952515840530396 0.0594245009124279 1 0.49531272053718567 0 0.0 0 0.0 0 0.0 -0.09310946613550186 1.0738946199417114 -0.5040848851203918 -0.31342509388923645 -0.7467879056930542 -0.5865352153778076 0.578464150428772 0.07731097936630249 1 0.49157246947288513 0 0.0 0 0.0 0 0.0 -0.11392863094806671 1.1170620918273926 -0.5390962958335876 -0.45652636885643005 -0.3259071707725525 -0.8278450965881348 0.6125847101211548 0.13550977408885956 1 0.5383314490318298 0 0.0 0 0.0 0 0.0 0.0 1.2747960090637207 -0.5200934410095215 0.0 0.7257301807403564 -0.6879787445068359 0.7898815870285034 0.26401570439338684 1 0.5951871871948242 0 0.0 0 0.0 0 0.0 0.0 1.2263679504394531 -0.5837152004241943 0.0 0.3245033025741577 -0.9458601474761963 0.7843695878982544 0.1751059889793396 1 0.5790085792541504 0 0.0 0 0.0 0 0.0 -0.06438668072223663 1.2186225652694702 -0.5522415637969971 -0.40809351205825806 0.41642504930496216 -0.8124027252197266 0.7213020324707031 0.204230397939682 1 0.5807928442955017 0 0.0 0 0.0 0 0.0 -0.06438668072223663 1.2186225652694702 -0.5522415637969971 -0.40809351205825806 0.41642504930496216 -0.8124027252197266 0.7213020324707031 0.204230397939682 1 0.5807928442955017 0 0.0 0 0.0 0 0.0 0.0 1.2263679504394531 -0.5837152004241943 0.0 0.3245033025741577 -0.9458601474761963 0.7843695878982544 0.1751059889793396 1 0.5790085792541504 0 0.0 0 0.0 0 0.0 0.0 1.1535732746124268 -0.5664279460906982 0.0 -0.22562333941459656 -0.9742118716239929 0.7363960146903992 0.10636518150568008 1 0.524931788444519 0 0.0 0 0.0 0 0.0 0.0 1.1535732746124268 -0.5664279460906982 0.0 -0.22562333941459656 -0.9742118716239929 0.7363960146903992 0.10636518150568008 1 0.524931788444519 0 0.0 0 0.0 0 0.0 -0.11392863094806671 1.1170620918273926 -0.5390962958335876 -0.45652636885643005 -0.3259071707725525 -0.8278450965881348 0.6125847101211548 0.13550977408885956 1 0.5383314490318298 0 0.0 0 0.0 0 0.0 -0.06438668072223663 1.2186225652694702 -0.5522415637969971 -0.40809351205825806 0.41642504930496216 -0.8124027252197266 0.7213020324707031 0.204230397939682 1 0.5807928442955017 0 0.0 0 0.0 0 0.0 -0.19536322355270386 1.1583302021026611 -0.38174155354499817 -0.9667958617210388 0.013214514590799809 -0.2551042139530182 0.4866374433040619 0.2810833156108856 1 0.597184419631958 0 0.0194740928709507 0 0.0 0 0.0 -0.21954664587974548 1.2720890045166016 -0.26756638288497925 -0.9747001528739929 0.22016052901744843 -0.038422804325819016 0.4704653024673462 0.463824987411499 1 0.5544829368591309 0 0.05324206128716469 0 0.0 0 0.0 -0.18102072179317474 1.268702745437622 -0.39696988463401794 -0.8454847931861877 0.23203222453594208 -0.48088014125823975 0.5643640756607056 0.39259523153305054 1 0.5556833148002625 0 0.0 0 0.0 0 0.0 -0.07297612726688385 1.3934298753738403 0.16687017679214478 -0.4526505470275879 0.8392895460128784 0.3011261224746704 0.27515244483947754 0.15112540125846863 0 0.46099191904067993 1 0.1663425862789154 2 0.00029648616327904165 0 0.0 -0.058150164783000946 1.453392744064331 -0.0034714294597506523 -0.5017548203468323 0.843226432800293 0.19284646213054657 0.19909562170505524 0.09749332815408707 1 0.3855680227279663 0 0.2609920799732208 2 5.212068208493292e-05 0 0.0 -0.11630034446716309 1.385688066482544 0.011257962323725224 -0.8467971086502075 0.5172887444496155 0.12363047897815704 0.19177863001823425 0.14417126774787903 0 0.41010767221450806 1 0.3941728472709656 2 0.021439071744680405 0 0.0 -0.08727402985095978 1.2957605123519897 0.34337759017944336 -0.4752952754497528 0.6862391829490662 0.5505844354629517 0.3502945005893707 0.2176021784543991 0 0.1636802703142166 2 0.05475941300392151 1 0.038439225405454636 0 0.0 -0.07297612726688385 1.3934298753738403 0.16687017679214478 -0.4526505470275879 0.8392895460128784 0.3011261224746704 0.27515244483947754 0.15112540125846863 0 0.46099191904067993 1 0.1663425862789154 2 0.00029648616327904165 0 0.0 -0.1459522545337677 1.3251063823699951 0.18270058929920197 -0.8204901218414307 0.5527207255363464 0.14572587609291077 0.2664920687675476 0.20125365257263184 0 0.5595225095748901 1 0.11560860276222229 2 0.00013760886213276535 0 0.0 -0.07297612726688385 1.460466742515564 -0.16172027587890625 -0.5019684433937073 0.8640094995498657 0.03888057917356491 0.12038150429725647 0.0717666819691658 1 0.424686998128891 0 0.08062247186899185 0 0.0 0 0.0 -0.058150164783000946 1.453392744064331 -0.0034714294597506523 -0.5017548203468323 0.843226432800293 0.19284646213054657 0.19909562170505524 0.09749332815408707 1 0.3855680227279663 0 0.2609920799732208 2 5.212068208493292e-05 0 0.0 0.0 1.4754657745361328 -0.018200816586613655 0.0 0.9835200309753418 0.18070009350776672 0.2048933058977127 0.06445963680744171 1 0.39598000049591064 0 0.22064290940761566 2 0.005581408739089966 0 0.0 -0.0650172010064125 1.190718173980713 0.442444771528244 -0.5703604221343994 0.43330180644989014 0.6977751851081848 0.4042886793613434 0.26924484968185425 2 0.034502845257520676 0 0.0 0 0.0 0 0.0 -0.08727402985095978 1.2957605123519897 0.34337759017944336 -0.4752952754497528 0.6862391829490662 0.5505844354629517 0.3502945005893707 0.2176021784543991 0 0.1636802703142166 2 0.05475941300392151 1 0.038439225405454636 0 0.0 -0.17454805970191956 1.2118858098983765 0.34130558371543884 -0.8105410933494568 0.3488875925540924 0.47038179636001587 0.3298243582248688 0.2703784704208374 0 0.21865041553974152 2 0.06258596479892731 1 0.03174738213419914 9 0.02641637995839119 -0.04986967518925667 1.2690738439559937 -0.4816516935825348 -0.4589068293571472 0.574968695640564 -0.6773278117179871 0.7414538264274597 0.31137514114379883 1 0.5933704376220703 0 0.0 0 0.0 0 0.0 -0.06438668072223663 1.2186225652694702 -0.5522415637969971 -0.40809351205825806 0.41642504930496216 -0.8124027252197266 0.7213020324707031 0.204230397939682 1 0.5807928442955017 0 0.0 0 0.0 0 0.0 -0.1287733018398285 1.2108771800994873 -0.5207679867744446 -0.6269417405128479 0.4066286087036133 -0.6644794940948486 0.6418904066085815 0.2361043244600296 1 0.5891550183296204 0 0.0 0 0.0 0 0.0 -0.06429819017648697 1.3896068334579468 -0.43792080879211426 -0.3429059684276581 0.5780205726623535 -0.7404400706291199 0.7636973261833191 0.4662829637527466 1 0.5313303470611572 0 0.0 0 0.0 0 0.0 -0.09474784880876541 1.4414864778518677 -0.305348664522171 -0.47962889075279236 0.8599505424499512 -0.1743827611207962 0.6945981383323669 0.5729519724845886 1 0.48631343245506287 0 0.006849147379398346 0 0.0 0 0.0 0.0 1.4688720703125 -0.35228610038757324 0.0 0.9361552596092224 -0.35151219367980957 0.8172668218612671 0.550440788269043 1 0.5002522468566895 0 0.0 0 0.0 0 0.0 -0.07297612726688385 1.460466742515564 -0.16172027587890625 -0.5019684433937073 0.8640094995498657 0.03888057917356491 0.12038150429725647 0.0717666819691658 1 0.424686998128891 0 0.08062247186899185 0 0.0 0 0.0 -0.09474784880876541 1.4414864778518677 -0.305348664522171 -0.47962889075279236 0.8599505424499512 -0.1743827611207962 0.04443186894059181 0.0578567311167717 1 0.48631343245506287 0 0.006849147379398346 0 0.0 0 0.0 -0.18949569761753082 1.3684693574905396 -0.2584112286567688 -0.860957682132721 0.5083467960357666 0.01657155156135559 0.04436533525586128 0.12631487846374512 1 0.4894542992115021 0 0.038765352219343185 0 0.0 0 0.0 -0.04986967518925667 1.2690738439559937 -0.4816516935825348 -0.4589068293571472 0.574968695640564 -0.6773278117179871 0.7414538264274597 0.31137514114379883 1 0.5933704376220703 0 0.0 0 0.0 0 0.0 -0.06429819017648697 1.3896068334579468 -0.43792080879211426 -0.3429059684276581 0.5780205726623535 -0.7404400706291199 0.7636973261833191 0.4662829637527466 1 0.5313303470611572 0 0.0 0 0.0 0 0.0 0.0 1.3950845003128052 -0.45135900378227234 0.0 0.598864734172821 -0.8008362054824829 0.8172668218612671 0.41208434104919434 1 0.5343004465103149 0 0.0 0 0.0 0 0.0 0 1 2 0 3 4 5 0 6 7 8 0 9 10 11 0 12 13 14 0 15 16 17 0 18 19 20 0 21 22 23 0 24 25 26 0 27 28 29 0 30 31 32 0 33 34 35 0 36 37 38 0 39 40 41 0 42 43 44 0 45 46 47 0 48 49 50 0 51 52 53 0 54 55 56 0 57 58 59 0 60 61 62 0 63 64 65 0 66 67 68 0 69 70 71 0 72 73 74 0 75 76 77 0 78 79 80 0 81 82 83 0 84 85 86 0 87 88 89 0 90 91 92 0 93 94 95 0 96 97 98 0 99 100 101 0 102 103 104 0 105 106 107 0 108 109 110 0 111 112 113 0 114 115 116 0 117 118 119 0 120 121 122 0 123 124 125 0 126 127 128 0 129 130 131 0 132 133 134 0 135 136 137 0 138 139 140 0 141 142 143 0 144 145 146 0 147 148 149 0 150 151 152 0 153 154 155 0 156 157 158 0 159 160 161 0 162 163 164 0 165 166 167 0 168 169 170 0 171 172 173 0 174 175 176 0 177 178 179 0 180 181 182 0 183 184 185 0 186 187 188 0 189 190 191 0 192 193 194 0 195 196 197 0 198 199 200 0 201 202 203 0 204 205 206 0 207 208 209 0 210 211 212 0 213 214 215 0 216 217 218 0 219 220 221 0 222 223 224 0 225 226 227 0 228 229 230 0 231 232 233 0 234 235 236 0 237 238 239 0 240 241 242 0 243 244 245 0 246 247 248 0 249 250 251 0 252 253 254 0 255 256 257 0 258 259 260 0 261 262 263 0 264 265 266 0 267 268 269 0 270 271 272 0 273 274 275 0 276 277 278 0 279 280 281 0 282 283 284 0 285 286 287 0 288 289 290 0 291 292 293 0 294 295 296 0 297 298 299 0 300 301 302 0 303 304 305 0 306 307 308 0 309 310 311 0 312 313 314 0 315 316 317 0 318 319 320 0 321 322 323 0 324 325 326 0 327 328 329 0 330 331 332 0 333 334 335 0 336 337 338 0 339 340 341 0 342 343 344 0 345 346 347 0 348 349 350 0 351 352 353 0 354 355 356 0 357 358 359 0 360 361 362 0 363 364 365 0 366 367 368 0 369 370 371 0 372 373 374 0 375 376 377 0 378 379 380 0 381 382 383 0 384 385 386 0 387 388 389 0 390 391 392 0 393 394 395 0 396 397 398 0 399 400 401 0 402 403 404 0 405 406 407 0 408 409 410 0 411 412 413 0 414 415 416 0 417 418 419 0 420 421 422 0 423 424 425 0 426 427 428 0 429 430 431 0 432 433 434 0 435 436 437 0 438 439 440 0 441 442 443 0 444 445 446 0 447 448 449 0 450 451 452 0 453 454 455 0 456 457 458 0 459 460 461 0 462 463 464 0 465 466 467 0 468 469 470 0 471 472 473 0 474 475 476 0 477 478 479 0 480 481 482 0 483 484 485 0 486 487 488 0 489 490 491 0 492 493 494 0 495 496 497 0 498 499 500 0 501 502 503 0 504 505 506 0 507 508 509 0 510 511 512 0 513 514 515 0 516 517 518 0 519 520 521 0 522 523 524 0 525 526 527 0 528 529 530 0 531 532 533 0 534 535 536 0 537 538 539 0 540 541 542 0 543 544 545 0 546 547 548 0 549 550 551 0 552 553 554 0 555 556 557 0 558 559 560 0 561 562 563 0 564 565 566 0 567 568 569 0 570 571 572 0 573 574 575 0 576 577 578 0 579 580 581 0 582 583 584 0 585 586 587 0 588 589 590 0 591 592 593 0 594 595 596 0 597 598 599 0 600 601 602 0 603 604 605 0 606 607 608 0 609 610 611 0 612 613 614 0 615 616 617 0 618 619 620 0 621 622 623 0 624 625 626 0 627 628 629 0 630 631 632 0 633 634 635 0 636 637 638 0 639 640 641 0 642 643 644 0 645 646 647 0 648 649 650 0 651 652 653 0 654 655 656 0 657 658 659 0 660 661 662 0 663 664 665 0 666 667 668 0 669 670 671 0 672 673 674 0 675 676 677 0 678 679 680 0 681 682 683 0 684 685 686 0 687 688 689 0 690 691 692 0 693 694 695 0 696 697 698 0 699 700 701 0 702 703 704 0 705 706 707 0 708 709 710 0 711 712 713 0 714 715 716 0 717 718 719 0 720 721 722 0 723 724 725 0 726 727 728 0 729 730 731 0 732 733 734 0 735 736 737 0 738 739 740 0 741 742 743 0 744 745 746 0 747 748 749 0 750 751 752 0 753 754 755 0 756 757 758 0 759 760 761 0 762 763 764 0 765 766 767 0 768 769 770 0 771 772 773 0 774 775 776 0 777 778 779 0 780 781 782 0 783 784 785 0 786 787 788 0 789 790 791 0 792 793 794 0 795 796 797 0 798 799 800 0 801 802 803 0 804 805 806 0 807 808 809 0 810 811 812 0 813 814 815 0 816 817 818 0 819 820 821 0 822 823 824 0 825 826 827 0 828 829 830 0 831 832 833 0 834 835 836 0 837 838 839 0 840 841 842 0 843 844 845 0 846 847 848 0 849 850 851 0 852 853 854 0 855 856 857 0 858 859 860 0 861 862 863 0 864 865 866 0 867 868 869 0 870 871 872 0 873 874 875 0 876 877 878 0 879 880 881 0 882 883 884 0 885 886 887 0 888 889 890 0 891 892 893 0 894 895 896 0 897 898 899 0 900 901 902 0 903 904 905 0 906 907 908 0 909 910 911 0 912 913 914 0 915 916 917 0 918 919 920 0 921 922 923 0 924 925 926 0 927 928 929 0 930 931 932 0 933 934 935 0 936 937 938 0 939 940 941 0 942 943 944 0 945 946 947 0 948 949 950 0 951 952 953 0 954 955 956 0 957 958 959 0 960 961 962 0 963 964 965 0 966 967 968 0 969 970 971 0 972 973 974 0 975 976 977 0 978 979 980 0 981 982 983 0 984 985 986 0 987 988 989 0 990 991 992 0 993 994 995 0 996 997 998 0 999 1000 1001 0 1002 1003 1004 0 1005 1006 1007 0 1008 1009 1010 0 1011 1012 1013 0 1014 1015 1016 0 1017 1018 1019 0 1020 1021 1022 0 1023 1024 1025 0 1026 1027 1028 0 1029 1030 1031 0 1032 1033 1034 0 1035 1036 1037 0 1038 1039 1040 0 1041 1042 1043 0 1044 1045 1046 0 1047 1048 1049 0 1050 1051 1052 0 1053 1054 1055 0 1056 1057 1058 0 1059 1060 1061 0 1062 1063 1064 0 1065 1066 1067 0 1068 1069 1070 0 1071 1072 1073 0 1074 1075 1076 0 1077 1078 1079 0 1080 1081 1082 0 1083 1084 1085 0 1086 1087 1088 0 1089 1090 1091 0 1092 1093 1094 0 1095 1096 1097 0 1098 1099 1100 0 1101 1102 1103 0 1104 1105 1106 0 1107 1108 1109 0 1110 1111 1112 0 1113 1114 1115 0 1116 1117 1118 0 1119 1120 1121 0 1122 1123 1124 0 1125 1126 1127 0 1128 1129 1130 0 1131 1132 1133 0 1134 1135 1136 0 1137 1138 1139 0 1140 1141 1142 0 1143 1144 1145 0 1146 1147 1148 0 1149 1150 1151 0 1152 1153 1154 0 1155 1156 1157 0 1158 1159 1160 0 1161 1162 1163 0 1164 1165 1166 0 1167 1168 1169 0 1170 1171 1172 0 1173 1174 1175 0 1176 1177 1178 0 1179 1180 1181 0 1182 1183 1184 0 1185 1186 1187 0 1188 1189 1190 0 1191 1192 1193 0 1194 1195 1196 0 1197 1198 1199 0 1200 1201 1202 0 1203 1204 1205 0 1206 1207 1208 0 1209 1210 1211 0 1212 1213 1214 0 1215 1216 1217 0 1218 1219 1220 0 1221 1222 1223 0 1224 1225 1226 0 1227 1228 1229 0 1230 1231 1232 0 1233 1234 1235 0 1236 1237 1238 0 1239 1240 1241 0 1242 1243 1244 0 1245 1246 1247 0 1248 1249 1250 0 1251 1252 1253 0 1254 1255 1256 0 1257 1258 1259 0 1260 1261 1262 0 1263 1264 1265 0 1266 1267 1268 0 1269 1270 1271 0 1272 1273 1274 0 1275 1276 1277 0 1278 1279 1280 0 1281 1282 1283 0 1284 1285 1286 0 1287 1288 1289 0 1290 1291 1292 0 1293 1294 1295 0 1296 1297 1298 0 1299 1300 1301 0 1302 1303 1304 0 1305 1306 1307 0 1308 1309 1310 0 1311 1312 1313 0 1314 1315 1316 0 1317 1318 1319 0 1320 1321 1322 0 1323 1324 1325 0 1326 1327 1328 0 1329 1330 1331 0 1332 1333 1334 0 1335 1336 1337 0 1338 1339 1340 0 1341 1342 1343 0 1344 1345 1346 0 1347 1348 1349 0 1350 1351 1352 0 1353 1354 1355 0 1356 1357 1358 0 1359 1360 1361 0 1362 1363 1364 0 1365 1366 1367 0 1368 1369 1370 0 1371 1372 1373 0 1374 1375 1376 0 1377 1378 1379 0 1380 1381 1382 0 1383 1384 1385 0 1386 1387 1388 0 1389 1390 1391 0 1392 1393 1394 0 1395 1396 1397 0 1398 1399 1400 0 1401 1402 1403 0 1404 1405 1406 0 1407 1408 1409 0 1410 1411 1412 0 1413 1414 1415 0 1416 1417 1418 0 1419 1420 1421 0 1422 1423 1424 0 1425 1426 1427 0 1428 1429 1430 0 1431 1432 1433 0 1434 1435 1436 0 1437 1438 1439 0 1440 1441 1442 0 1443 1444 1445 0 1446 1447 1448 0 1449 1450 1451 0 1452 1453 1454 0 1455 1456 1457 0 1458 1459 1460 0 1461 1462 1463 0 1464 1465 1466 0 1467 1468 1469 0 1470 1471 1472 0 1473 1474 1475 0 1476 1477 1478 0 1479 1480 1481 0 1482 1483 1484 0 1485 1486 1487 0 1488 1489 1490 0 1491 1492 1493 0 1494 1495 1496 0 1497 1498 1499 0 Root -1 0.0 0.8413141965866089 0.23588795959949493 5.6222051756381825e-18 1.196816086769104 -0.04905375838279724 0.0 Head 0 5.6222051756381825e-18 1.196816086769104 -0.04905375838279724 1.967771687396272e-17 1.260116457939148 -0.39720597863197327 1.8611563782443123e-24 Tail1 -1 -7.122113747843234e-17 1.1588577032089233 0.41520965099334717 9.862938988101759e-17 0.9773882031440735 0.6198499798774719 2.11758312544222e-22 Tail2 2 9.862938988101759e-17 0.9773882031440735 0.6198499798774719 8.316832544121743e-17 0.9077577590942383 0.9141968488693237 4.658683633279353e-21 Tail3 3 8.316832544121743e-17 0.9077577590942383 0.9141968488693237 8.246555279279238e-17 0.904592752456665 1.1927186250686646 5.2351485486656853e-20 ShoulderR -1 0.0 0.8413141965866089 0.23588795959949493 0.17407608032226562 0.7052183151245117 0.15359744429588318 0.0 UpperarmR 5 0.17407608032226562 0.7052183151245117 0.15359744429588318 0.2152213305234909 0.4678418040275574 0.0966271162033081 -2.7939680791178034e-08 ForearmR 6 0.2152213305234909 0.4678418040275574 0.0966271162033081 0.21205630898475647 0.1576698124408722 0.05231688916683197 3.614695742726326e-08 FootR 7 0.21205630898475647 0.1576698124408722 0.05231688916683197 0.21205630898475647 0.04056406766176224 -0.08061395585536957 -2.0747501494611242e-09 ShoulderL -1 0.0 0.8413141965866089 0.23588795959949493 -0.17407608032226562 0.7052183151245117 0.15359744429588318 0.0 UpperarmL 9 -0.17407608032226562 0.7052183151245117 0.15359744429588318 -0.2152213305234909 0.4678418040275574 0.0966271162033081 2.7939680791178034e-08 ForearmL 10 -0.2152213305234909 0.4678418040275574 0.0966271162033081 -0.21205630898475647 0.1576698124408722 0.05231688916683197 -3.614695742726326e-08 FootL 11 -0.21205630898475647 0.1576698124408722 0.05231688916683197 -0.21205630898475647 0.04056406766176224 -0.08061395585536957 2.0747501494611242e-09 Root Head Tail1 Tail2 Tail3 ShoulderR UpperarmR ForearmR FootR ShoulderL UpperarmL ForearmL FootL ================================================ FILE: data/models/movs.collmdl ================================================ cloud 8 -4 0 4 -4 0.25 4 -4 0 -4 -4 0.25 -4 4 0 4 4 0.25 4 4 0 -4 4 0.25 -4 cloud 8 -4 0.25 4 -4 2.5 4 -4 0.25 -4 -4 2.5 -4 -3.875 0.25 4 -3.875 2.5 4 -3.875 0.25 -4 -3.875 2.5 -4 cloud 8 3.875 0.25 4 3.875 2.25 4 3.875 0.25 -4 3.875 2.25 -4 4 0.25 4 4 2.25 4 4 0.25 -4 4 2.25 -4 cloud 8 -3.875 0.25 4 -3.875 2.25 4 -3.875 0.25 3.875 -3.875 2.25 3.875 3.875 0.25 4 3.875 2.25 4 3.875 0.25 3.875 3.875 2.25 3.875 cloud 8 -3 0.25 3.875 -3 0.5 3.875 -3 0.25 3.125 -3 0.5 3.125 -2.5 0.25 3.875 -2.5 0.5 3.875 -2.5 0.25 3.125 -2.5 0.5 3.125 cloud 8 -2.5 0.5 3.875 -2.5 0.75 3.875 -2.5 0.5 3.125 -2.5 0.75 3.125 -2 0.5 3.875 -2 0.75 3.875 -2 0.5 3.125 -2 0.75 3.125 cloud 8 -2 0.75 3.875 -2 1 3.875 -2 0.75 3.125 -2 1 3.125 -1.5 0.75 3.875 -1.5 1 3.875 -1.5 0.75 3.125 -1.5 1 3.125 cloud 8 -1.5 1 3.875 -1.5 1.25 3.875 -1.5 1 3.125 -1.5 1.25 3.125 -1 1 3.875 -1 1.25 3.875 -1 1 3.125 -1 1.25 3.125 cloud 8 -1 1.25 3.875 -1 1.5 3.875 -1 1.25 3.125 -1 1.5 3.125 -0.5 1.25 3.875 -0.5 1.5 3.875 -0.5 1.25 3.125 -0.5 1.5 3.125 cloud 8 -0.5 1.5 3.875 -0.5 1.75 3.875 -0.5 1.5 3.125 -0.5 1.75 3.125 0 1.5 3.875 0 1.75 3.875 0 1.5 3.125 0 1.75 3.125 cloud 8 0 1.75 3.875 0 2 3.875 0 1.75 3.125 0 2 3.125 0.5 1.75 3.875 0.5 2 3.875 0.5 1.75 3.125 0.5 2 3.125 cloud 8 0.5 2 3.875 0.5 2.25 3.875 0.5 2 3.125 0.5 2.25 3.125 1 2 3.875 1 2.25 3.875 1 2 3.125 1 2.25 3.125 cloud 8 1.375 0.25 1 1.375 0.5 1 1.375 0.25 0.25 1.375 0.5 0.25 1.625 0.25 1 1.625 0.5 1 1.625 0.25 0.25 1.625 0.5 0.25 cloud 8 1.625 0.5 1 1.625 0.75 1 1.625 0.5 0.25 1.625 0.75 0.25 1.875 0.5 1 1.875 0.75 1 1.875 0.5 0.25 1.875 0.75 0.25 cloud 8 1.875 0.75 1 1.875 1 1 1.875 0.75 0.25 1.875 1 0.25 2.125 0.75 1 2.125 1 1 2.125 0.75 0.25 2.125 1 0.25 cloud 8 2.125 1 1 2.125 1.25 1 2.125 1 0.25 2.125 1.25 0.25 2.375 1 1 2.375 1.25 1 2.375 1 0.25 2.375 1.25 0.25 cloud 8 2.375 1.25 1 2.375 1.5 1 2.375 1.25 0.25 2.375 1.5 0.25 2.625 1.25 1 2.625 1.5 1 2.625 1.25 0.25 2.625 1.5 0.25 cloud 8 2.625 1.5 1 2.625 1.75 1 2.625 1.5 0.25 2.625 1.75 0.25 2.875 1.5 1 2.875 1.75 1 2.875 1.5 0.25 2.875 1.75 0.25 cloud 8 3.125 2 -0 3.125 2.25 -0 3.125 2 -0.25 3.125 2.25 -0.25 3.875 2 -0 3.875 2.25 -0 3.875 2 -0.25 3.875 2.25 -0.25 cloud 8 3 0.25 3.875 3 1.25 3.875 3 0.25 3 3 1.25 3 3.875 0.25 3.875 3.875 1.25 3.875 3.875 0.25 3 3.875 1.25 3 cloud 8 3 0.25 2.75 3 1.25 2.75 3 0.25 2.625 3 1.25 2.625 3.875 0.25 2.75 3.875 1.25 2.75 3.875 0.25 2.625 3.875 1.25 2.625 cloud 8 3 0.25 2.375 3 1.25 2.375 3 0.25 2.25 3 1.25 2.25 3.875 0.25 2.375 3.875 1.25 2.375 3.875 0.25 2.25 3.875 1.25 2.25 cloud 8 3 0.25 2 3 1.25 2 3 0.25 1.5 3 1.25 1.5 3.875 0.25 2 3.875 1.25 2 3.875 0.25 1.5 3.875 1.25 1.5 cloud 8 3 0.25 -0 3 1.25 -0 3 0.25 -1 3 1.25 -1 3.875 0.25 -0 3.875 1.25 -0 3.875 0.25 -1 3.875 1.25 -1 cloud 8 3 0.25 -3 3 1.25 -3 3 0.25 -4 3 1.25 -4 3.875 0.25 -3 3.875 1.25 -3 3.875 0.25 -4 3.875 1.25 -4 cloud 6 -3.875 0.25 1.7499847 -3.875 1.2499913 -1.1920929e-07 -3.875 0.25 -0 -3.5 0.25 1.7499847 -3.5 1.2499913 -1.19037274e-07 -3.5 0.25 -0 cloud 8 -3.5 0.25 0.75 -3.5 0.5 0.75 -3.5 0.25 0.5 -3.5 0.5 0.5 -3.125 0.25 0.75 -3.125 0.5 0.75 -3.125 0.25 0.5 -3.125 0.5 0.5 cloud 8 -3.5 0.5 0.5 -3.5 0.75 0.5 -3.5 0.5 0.25 -3.5 0.75 0.25 -3.125 0.5 0.5 -3.125 0.75 0.5 -3.125 0.5 0.25 -3.125 0.75 0.25 cloud 8 -3.5 0.75 0.25 -3.5 1 0.25 -3.5 0.75 -0 -3.5 1 -0 -3.125 0.75 0.25 -3.125 1 0.25 -3.125 0.75 -0 -3.125 1 -0 cloud 8 -3.875 0.25 -0 -3.875 1.25 -0 -3.875 0.25 -0.375 -3.875 1.25 -0.375 -3.125 0.25 -0 -3.125 1.25 -0 -3.125 0.25 -0.375 -3.125 1.25 -0.375 cloud 8 -3.875 0.25 -0.375 -3.875 1.25 -0.375 -3.875 0.25 -4 -3.875 1.25 -4 -3.5 0.25 -0.375 -3.5 1.25 -0.375 -3.84375 0.25 -4 -3.84375 1.25 -4 cloud 8 -4 0 -4 -4 0.25 -4 -4 0 -7.5 -4 0.25 -7.5 4 0 -4 4 0.25 -4 4 0 -7.5 4 0.25 -7.5 cloud 8 -1.75 0.25 -4 -1.75 2.25 -4 -1.75 0.25 -4.125 -1.75 2.25 -4.125 4 0.25 -4 4 2.25 -4 4 0.25 -4.125 4 2.25 -4.125 cloud 8 -4 0.25 -4 -4 2.25 -4 -4 0.25 -4.125 -4 2.25 -4.125 -3.25 0.25 -4 -3.25 2.25 -4 -3.25 0.25 -4.125 -3.25 2.25 -4.125 cloud 8 -4 2.25 -4 -4 2.5 -4 -4 2.25 -7.5 -4 2.5 -7.5 4 2.25 -4 4 2.5 -4 4 2.25 -7.5 4 2.5 -7.5 cloud 8 -4 0.25 -7.375 -4 2.25 -7.375 -4 0.25 -7.5 -4 2.25 -7.5 4 0.25 -7.375 4 2.25 -7.375 4 0.25 -7.5 4 2.25 -7.5 cloud 8 -4 0.25 -4.125 -4 2.25 -4.125 -4 0.25 -7.375 -4 2.25 -7.375 -3.875 0.25 -4.125 -3.875 2.25 -4.125 -3.875 0.25 -7.375 -3.875 2.25 -7.375 cloud 8 3.875 0.25 -4.125 3.875 2.25 -4.125 3.875 0.25 -7.375 3.875 2.25 -7.375 4 0.25 -4.125 4 2.25 -4.125 4 0.25 -7.375 4 2.25 -7.375 cloud 6 -4 2.5 -2 -4 3.7500005 -2 -4 2.5 -3.6666675 -3.875 2.5 -2 -3.875 3.7500005 -2 -3.875 2.5 -3.6666675 cloud 6 3.875 2.25 -2 3.875 3.7500005 -2 3.875 2.25 -4.000001 4 2.25 -2 4 3.7500005 -2 4 2.25 -4.000001 cloud 8 -4 3.7499695 -2 -4 4.0000005 -2 -4 2.2499697 -4 -4 2.5000005 -4 4 3.7499695 -2 4 4.0000005 -2 4 2.2499697 -4 4 2.5000005 -4 cloud 8 -3.25 2 -4 -3.25 2.25 -4 -3.25 2 -4.125 -3.25 2.25 -4.125 -1.75 2 -4 -1.75 2.25 -4 -1.75 2 -4.125 -1.75 2.25 -4.125 cloud 8 3.125 2.25 -0.25 3.125 2.5 -0.25 3.125 2.25 -0.5 3.125 2.5 -0.5 3.875 2.25 -0.25 3.875 2.5 -0.25 3.875 2.25 -0.5 3.875 2.5 -0.5 cloud 8 3.125 2.5 -0.5 3.125 2.75 -0.5 3.125 2.5 -0.75 3.125 2.75 -0.75 3.875 2.5 -0.5 3.875 2.75 -0.5 3.875 2.5 -0.75 3.875 2.75 -0.75 cloud 8 3.125 2.75 -0.75 3.125 3 -0.75 3.125 2.75 -1 3.125 3 -1 3.875 2.75 -0.75 3.875 3 -0.75 3.875 2.75 -1 3.875 3 -1 cloud 8 3.125 3 -1 3.125 3.25 -1 3.125 3 -1.25 3.125 3.25 -1.25 3.875 3 -1 3.875 3.25 -1 3.875 3 -1.25 3.875 3.25 -1.25 cloud 8 3.125 3.25 -1.25 3.125 3.5 -1.25 3.125 3.25 -1.5 3.125 3.5 -1.5 3.875 3.25 -1.25 3.875 3.5 -1.25 3.875 3.25 -1.5 3.875 3.5 -1.5 cloud 8 3.125 3.5 -1.5 3.125 3.75 -1.5 3.125 3.5 -1.75 3.125 3.75 -1.75 3.875 3.5 -1.5 3.875 3.75 -1.5 3.875 3.5 -1.75 3.875 3.75 -1.75 cloud 8 3.125 3.75 -1.75 3.125 4 -1.75 3.125 3.75 -2 3.125 4 -2 3.875 3.75 -1.75 3.875 4 -1.75 3.875 3.75 -2 3.875 4 -2 cloud 8 3.125 1.75 0.25 3.125 2 0.25 3.125 1.75 -0 3.125 2 -0 3.875 1.75 1 3.875 2 1 3.875 1.75 -0 3.875 2 -0 cloud 8 2.875 1.75 1 2.875 2 1 2.875 1.75 0.25 2.875 2 0.25 3.875 1.75 1 3.875 2 1 3.1249847 1.75 0.25 3.1249847 2 0.25 cloud 8 -28 0 4 -28 0.25 4 -28 0 -7.5 -28 0.25 -7.5 -4 0 4 -4 0.25 4 -4 0 -7.5 -4 0.25 -7.5 cloud 6 -6 0.2500038 0.49995422 -6 2.2499924 -7.4999995 -6 0.2500037 -7.5 -4 0.25000378 0.4999541 -4 2.2499924 -7.4999995 -4 0.25000367 -7.5 cloud 6 -8 0.2500038 0.49995422 -8 2.2499924 -7.4999995 -8 0.2500037 -7.5 -6 0.25000378 0.4999541 -6 2.2499924 -7.4999995 -6 0.25000367 -7.5 cloud 6 -10 0.25 -0.5 -10 2.25 -7.5 -10 0.25 -7.5 -8 0.25 -0.50000036 -8 2.25 -7.5 -8 0.25 -7.5 cloud 6 -12 0.25 -1.5 -12 2.25 -7.5 -12 0.25 -7.5 -10 0.24999994 -1.4999996 -10 2.25 -7.5 -10 0.24999994 -7.5 cloud 6 -14 0.25 -2.4999695 -14 2.2500122 -7.5 -14 0.25 -7.5 -12 0.25000006 -2.4999695 -12 2.2500122 -7.5 -12 0.25000006 -7.5 cloud 6 -16 0.25 -3.5000305 -16 2.2499847 -7.5 -16 0.25 -7.5 -14 0.24999994 -3.5000305 -14 2.2499847 -7.5 -14 0.24999994 -7.5 cloud 6 -18 0.25 -4.5 -18 2.2500002 -7.5 -18 0.25 -7.5 -16 0.25 -4.5 -16 2.2500002 -7.5 -16 0.25 -7.5 cloud 6 -20 0.25001526 -5.0000305 -20 2.249991 -7.5 -20 0.2500151 -7.5 -18 0.25001514 -5.0000305 -18 2.249991 -7.5 -18 0.250015 -7.5 cloud 6 -22 0.25 -5.5 -22 2.25 -7.5 -22 0.25 -7.5 -20 0.25 -5.5 -20 2.25 -7.5 -20 0.25 -7.5 cloud 6 -24 0.25 -6.0000153 -24 2.2499795 -7.5 -24 0.25 -7.5 -22 0.25 -6.0000153 -22 2.2499795 -7.5 -22 0.25 -7.5 cloud 6 -26 0.25 -6.5 -26 2.25 -7.5 -26 0.25 -7.5 -24 0.25 -6.5 -24 2.2499998 -7.5 -24 0.25 -7.5 cloud 6 -28 0.25 -7.0000076 -28 2.2499692 -7.5 -28 0.25 -7.5 -26 0.25 -7.0000076 -26 2.249969 -7.5 -26 0.25 -7.5 cloud 8 -6 2.25 1.5 -6 2.5 1.5 -6 2.25 -7.5 -6 2.5 -7.5 -4 2.25 1.5 -4 2.5 1.5 -4 2.25 -7.5 -4 2.5 -7.5 ================================================ FILE: data/models/movs.stmdl ================================================ STMDLv1 1317 665 5 1 lightmap 512 512 concrete067 brick002 concrete103 concrete090 brick052 -4 2.21875 -7.375 -1 -0 0 1.84375 0.5546875 0 0 -4 2.2500002 -7.5 -1 -0 0 1.875 0.56250006 0 0 -4 2.25 -7.5 -1 -0 0 1.875 0.5625 0 0 -10 0.25 -0.5 -1 0 0 0.25 0.125 0 0 -10 2.25 -7.5 -1 0 0 3.75 1.125 0 0 -12 0.25 -1.5 -1 0 0 0.75 0.125 0 0 -12 2.25 -7.5 -1 0 0 3.75 1.125 0 0 4 0 4 -0 -0 1 -2 1.7484555e-07 0.25683594 0.13378906 4 0.25 4 -0 -0 1 -2 -0.12499982 0.25683594 0.13183594 -4 0.25 4 -0 -0 1 2 -0.12500018 0.19433594 0.13183594 -4 0 4 -0 -0 1 2 -1.7484555e-07 0.19433594 0.13378906 -28 0.25 4 -0 -0 1 14 -0.12500122 0.0068359375 0.13183594 -28 0 4 -0 -0 1 14 -1.2239188e-06 0.0068359375 0.13378906 4 0 4 1 -0 0 2 -1.7484555e-07 0.028320312 0.14355469 4 0.25 -4 1 -0 0 -2 -0.12499982 0.09082031 0.14550781 4 0.25 4 1 -0 0 2 -0.12500018 0.028320312 0.14550781 4 0.25 4 1 -0 0 1 -0.06250009 0.028320312 0.14550781 4 0.25 -4 1 -0 0 -1 -0.06249991 0.09082031 0.14550781 4 2.25 -4 1 -0 0 -1 -0.5624999 0.09082031 0.16113281 4 2.25 4 1 -0 0 1 -0.5625001 0.028320312 0.16113281 4 2.25 -4.125 1 -0 0 -1.03125 -0.5624999 0.091796875 0.16113281 4 0.25 -4.125 1 -0 0 -1.03125 -0.06249991 0.091796875 0.14550781 4 2.25 -7.375 1 -0 0 -1.84375 -0.5624999 0.1171875 0.16113281 4 0.25 -7.375 1 -0 0 -1.84375 -0.062499836 0.1171875 0.14550781 4 2.25 -7.5 1 -0 0 -1.875 -0.5624999 0.11816406 0.16113281 4 0.25 -7.5 1 -0 0 -1.875 -0.062499836 0.11816406 0.14550781 4 0 -4 1 -0 0 -2 1.7484555e-07 0.09082031 0.14355469 4 0.25 -7.5 1 -0 0 -3.75 -0.12499967 0.11816406 0.14550781 4 0 -7.5 1 -0 0 -3.75 3.278354e-07 0.11816406 0.14355469 4 0 -4 -0 -1 0 2 2 0.2626953 0.06738281 4 0 4 -0 -1 0 2 -2 0.2626953 0.0048828125 -4 0 4 -0 -1 0 -2 -2 0.20019531 0.0048828125 -4 0 -4 -0 -1 0 -2 2 0.20019531 0.06738281 4 0 -7.5 -0 -1 0 2 3.75 0.2626953 0.09472656 -4 0 -7.5 -0 -1 0 -2 3.75 0.20019531 0.09472656 -4 0 -7.5 -0 -0 -1 -2 0 0.06542969 0.12207031 4 0.25 -7.5 -0 -0 -1 2 0.125 0.0029296875 0.12011719 4 0 -7.5 -0 -0 -1 2 0 0.0029296875 0.12207031 -4 0.25 -7.5 -0 -0 -1 -2 0.125 0.06542969 0.12011719 -4 0.25 -7.5 -0 -0 -1 -1 0.0625 0.06542969 0.12011719 4 2.25 -7.5 -0 -0 -1 1 0.5625 0.0029296875 0.10449219 4 0.25 -7.5 -0 -0 -1 1 0.0625 0.0029296875 0.12011719 -4 2.25 -7.5 -0 -0 -1 -1 0.5625 0.06542969 0.10449219 -4 2.25 -7.5 -0 -0 -1 -2 1.125 0.06542969 0.10449219 4 2.5 -7.5 -0 -0 -1 2 1.25 0.0029296875 0.10253906 4 2.25 -7.5 -0 -0 -1 2 1.125 0.0029296875 0.10449219 -4 2.5 -7.5 -0 -0 -1 -2 1.25 0.06542969 0.10253906 -6 2.25 -7.5 -0 -0 -1 -3 1.125 0.08105469 0.10449219 -6 2.5 -7.5 -0 -0 -1 -3 1.25 0.08105469 0.10253906 -28 0 -7.5 -0 -0 -1 -14 0 0.2529297 0.12207031 -28 0.25 -7.5 -0 -0 -1 -14 0.125 0.2529297 0.12011719 4 0.25 4 -0 -0 1 -1 -0.06249991 0.15722656 0.3095703 4 2.25 4 -0 -0 1 -1 -0.5624999 0.15722656 0.2939453 3.875 2.25 4 -0 -0 1 -0.96875 -0.5624999 0.1562345 0.2939453 3.875 0.25 4 -0 -0 1 -0.96875 -0.062499918 0.1562345 0.3095703 -3.875 2.25 4 -0 -0 1 0.96875 -0.5625001 0.09472656 0.2939453 -3.875 0.25 4 -0 -0 1 0.96875 -0.06250009 0.09472656 0.3095703 3.875 2.25 4 -0 1 0 -0.9687499 1 0.09082031 0.10449219 4 2.25 4 -0 1 0 -0.9999999 1 0.09082031 0.10644531 4 2.25 -2 -0 1 0 -1 -0.49999994 0.13769531 0.10644531 3.875 2.25 -2 -0 1 0 -0.96875 -0.49999994 0.13769531 0.10449219 3.875 2.25 3.875 -0 1 0 -0.9687499 0.9687501 0.2998047 0.08691406 -3.875 2.25 4 -0 1 0 0.9687501 0.9999999 0.29785156 0.026367188 3.875 2.25 4 -0 1 0 -0.9687499 1 0.29785156 0.08691406 -3.875 2.25 3.875 -0 1 0 0.9687501 0.9687499 0.2998047 0.026367188 4 2.25 -2 -0 -0 1 -1 -0.5624999 0.41308594 0.10449219 3.875 3.7500005 -2 -0 -0 1 -0.9687501 -0.9375 0.4111328 0.09082031 3.875 2.25 -2 -0 -0 1 -0.96875 -0.5624999 0.4111328 0.10449219 4 3.7500005 -2 -0 -0 1 -1 -0.9375 0.41308594 0.09082031 3.875 2.25 -2 -1 -0 0 0.5 0.5625 0.39941406 0.30566406 3.875 3.7500005 -2 -1 -0 0 0.5 0.9375001 0.3857422 0.30566406 3.875 2.25 -4.000001 -1 -0 0 1.0000002 0.5625 0.39941406 0.28808594 4 2.25 -2 1 -0 0 -0.5 -0.5625 0.0068359375 0.39941406 4 2.25 -4.000001 1 -0 0 -1.0000002 -0.5624999 0.024414062 0.39941406 4 3.7500005 -2 1 -0 0 -0.5000001 -0.9375001 0.0068359375 0.3857422 4 2.25 -4 1 -0 0 -2 -1.1249998 0.29785156 0.19042969 4 2.25 -7.5 1 -0 0 -3.75 -1.1249998 0.29785156 0.21777344 4 2.5 -7.5 1 -0 0 -3.75 -1.2499998 0.29589844 0.21777344 4 2.5 -4 1 -0 0 -2 -1.2499998 0.29589844 0.19042969 4 2.5 -7.5 -0 1 0 -2.0000005 -3.75 0.25683594 0.22363281 -4 2.5 -4 -0 1 0 1.9999998 -2 0.19433594 0.19628906 4 2.5 -4 -0 1 0 -2 -1.9999998 0.25683594 0.19628906 -4 2.5 -7.5 -0 1 0 1.9999998 -3.75 0.19433594 0.22363281 -4 2.25 -7.5 -0 -1 0 -2 3.75 0.16503906 0.2841797 -6 2.25 1.5 -0 -1 0 -3 -0.75 0.09472656 0.2685547 -6 2.25 -7.5 -0 -1 0 -3 3.75 0.16503906 0.2685547 -4 2.25 1.5 -0 -1 0 -2 -0.75 0.09472656 0.2841797 -6 2.25 1.5 -1 -0 0 -0.75 1.125 0.3095703 0.018554688 -6 2.5 -7.5 -1 -0 0 3.75 1.25 0.31152344 0.08886719 -6 2.25 -7.5 -1 -0 0 3.75 1.125 0.3095703 0.08886719 -6 2.5 1.5 -1 -0 0 -0.75 1.25 0.31152344 0.018554688 -4 2.25 1.5 -0 -0 1 2 -1.1250002 0.4033203 0.11621094 -6 2.5 1.5 -0 -0 1 3 -1.2500002 0.3876953 0.11425781 -6 2.25 1.5 -0 -0 1 3 -1.1250002 0.3876953 0.11621094 -4 2.5 1.5 -0 -0 1 2 -1.2500002 0.4033203 0.11425781 -4 2.5 -7.5 -0 1 0 1.9999998 -3.75 0.07519531 0.27246094 -6 2.5 -7.5 -0 1 0 2.9999995 -3.7500005 0.07519531 0.25683594 -6 2.5 1.5 -0 1 0 3 0.74999976 0.0048828125 0.25683594 -4 2.5 1.5 -0 1 0 2 0.7499999 0.0048828125 0.27246094 -4 0 -7.5 -0 -1 0 -2 3.75 0.18847656 0.09082031 -28 0 4 -0 -1 0 -14 -2 0.0009765625 0.0009765625 -28 0 -7.5 -0 -1 0 -14 3.75 0.0009765625 0.09082031 -4 0 4 -0 -1 0 -2 -2 0.18847656 0.0009765625 -28 0 4 -1 -0 0 -2 0 0.15136719 0.10449219 -28 0.25 -7.5 -1 -0 0 3.75 0.125 0.24121094 0.10644531 -28 0 -7.5 -1 -0 0 3.75 0 0.24121094 0.10449219 -28 0.25 4 -1 -0 0 -2 0.125 0.15136719 0.10644531 -3.875 0.25 1.75 -0 1 0 1.9375 0.8749999 0.08691406 0.4013672 -3 0.25 3.875 -0 1 0 1.5000002 1.9374998 0.06933594 0.3935547 -3 0.25 1.75 -0 1 0 1.5 0.8749999 0.08691406 0.3935547 -3.875 0.25 3.875 -0 1 0 1.9375002 1.9374998 0.06933594 0.4013672 -3.875 0.25 1.75 1 -0 0 0.4375 -0.062500045 0.31152344 0.20666233 -3.875 2.25 3.875 1 -0 0 0.96875 -0.5625001 0.32714844 0.22363281 -3.875 0.25 3.875 1 -0 0 0.96875 -0.06250009 0.31152344 0.22363281 -3.875 2.25 -1.75 1 -0 0 -0.43750006 -0.5625 0.32714844 0.17871094 -3.875 0.25 3.875 -0 -0 -1 -0.96875 0.0625 0.40527344 0.18066406 -3 2.25 3.875 -0 -0 -1 -0.75 0.5625 0.39746094 0.16503906 -3 0.25 3.875 -0 -0 -1 -0.75 0.0625 0.39746094 0.18066406 -3.875 2.25 3.875 -0 -0 -1 -0.96875 0.5625 0.40527344 0.16503906 -3 0.25 -4 -0 1 0 1.4999998 -2 0.36621094 0.16113281 -3.8437505 0.25 -4 -0 1 0 1.921875 -2 0.37402344 0.16113281 -3.5000002 0.25 -0.375 -0 1 0 1.7500001 -0.18750015 0.37084058 0.13183594 -3 0.25 -0.375 -0 1 0 1.5 -0.18750012 0.36621094 0.13183594 -3.125 0.25 -0 -0 1 0 1.5625 -1.3659809e-07 0.3779297 0.4482422 -3 0.25 -0.375 -0 1 0 1.5 -0.18750012 0.38183594 0.4501953 -3.125 0.25 -0.375 -0 1 0 1.5625 -0.18750015 0.38183594 0.4482422 -3 0.25 -0 -0 1 0 1.5 -1.3113416e-07 0.3779297 0.4501953 -3.125 0.25 -0 1 -0 0 0 0.0703125 0.07910156 0.4111328 -3.125 0.25 -0.375 1 -0 0 0.1875 0.0703125 0.07910156 0.41503906 -3.125 1.25 -0.375 1 -0 0 0.1875 0.5703125 0.07128906 0.41503906 -3.125 1.25 -0 1 -0 0 0 0.5703125 0.07128906 0.4111328 -3.125 0.25 -0.375 -0 -0 -1 -1.5625 0.0703125 0.39160156 0.41503906 -3.5000002 1.25 -0.375 -0 -0 -1 -1.7500001 0.5703125 0.38378906 0.4111328 -3.125 1.25 -0.375 -0 -0 -1 -1.5625 0.5703125 0.38378906 0.41503906 -3.5000002 0.25 -0.375 -0 -0 -1 -1.7500001 0.0703125 0.39160156 0.4111328 -3.125 1.25 -0.375 -0 1 0 -1.5625 0.1328125 0.026367188 0.4267578 -3.875 1.25 -0 -0 1 0 -1.9375 -0.0546875 0.020507812 0.42285156 -3.125 1.25 -0 -0 1 0 -1.5625 -0.0546875 0.026367188 0.42285156 -3.875 1.25 -0.375 -0 1 0 -1.9375 0.1328125 0.020507812 0.4267578 -3.5 0.25 1.75 -0 1 0 1.75 0.8749999 0.21386719 0.4033203 -3 0.25 0.75 -0 1 0 1.5 0.37499988 0.21777344 0.4111328 -3.5 0.25 0.75 -0 1 0 1.75 0.37499982 0.21386719 0.4111328 -3 0.25 1.75 -0 1 0 1.5 0.8749999 0.21777344 0.4033203 -3.5 0.25 0.5 -0 1 0 1.75 0.24999985 0.43847656 0.2841797 -3 0.25 -0 -0 1 0 1.5 -1.3113416e-07 0.4423828 0.28808594 -3.5 0.25 -0 -0 1 0 1.75 -1.5298986e-07 0.43847656 0.28808594 -3 0.25 0.5 -0 1 0 1.5 0.24999988 0.4423828 0.2841797 -3.5 0.25 -0 1 -0 0 0 0.0703125 0.35058594 0.4482422 -3.5 0.5 0.5 1 -0 0 -0.25 0.1953125 0.3544922 0.4501953 -3.5 0.25 0.5 1 -0 0 -0.25 0.0703125 0.3544922 0.4482422 -3.5 0.5 -2.9759576e-08 1 -0 0 1.4879788e-08 0.1953125 0.35058594 0.4501953 -3.5 0.25 0.5 -0 -0 -1 -1.75 0.0703125 0.44628906 0.12011719 -3.5 0.5 0.5 -0 -0 -1 -1.75 0.1953125 0.44628906 0.11816406 -3.125 0.5 0.5 -0 -0 -1 -1.5625 0.1953125 0.4423828 0.11816406 -3.125 0.25 0.5 -0 -0 -1 -1.5625 0.0703125 0.4423828 0.12011719 -3.125 0.5 0.25 -0 -1 0 -1.5625 -0.1796875 0.21972656 0.4482422 -3.125 0.5 0.5 -0 -1 0 -1.5625 -0.3046875 0.21972656 0.44628906 -3.5 0.5 0.5 -0 -1 0 -1.75 -0.3046875 0.21582031 0.44628906 -3.5 0.5 0.25 -0 -1 0 -1.75 -0.1796875 0.21582031 0.4482422 -3.125 0.25 0.75 1 -0 0 -0.375 0.0703125 0.45214844 0.22558594 -3.125 0.25 0.5 1 -0 0 -0.25 0.0703125 0.45410156 0.22558594 -3.125 0.5 0.5 1 -0 0 -0.25 0.1953125 0.45410156 0.22363281 -3.125 0.5 0.75 1 -0 0 -0.375 0.1953125 0.45214844 0.22363281 -3.125 0.25 0.75 -0 1 0 1.5625 0.37499988 0.45214844 0.3857422 -3 0.25 0.5 -0 1 0 1.5 0.24999988 0.45410156 0.3876953 -3.125 0.25 0.5 -0 1 0 1.5625 0.24999985 0.45410156 0.3857422 -3 0.25 0.75 -0 1 0 1.5 0.37499988 0.45214844 0.3876953 -3.125 0.5 0.5 -0 1 0 -1.5625 -0.3046875 0.026367188 0.4501953 -3.5 0.5 0.75 -0 1 0 -1.75 -0.4296875 0.022460938 0.4482422 -3.125 0.5 0.75 -0 1 0 -1.5625 -0.4296875 0.026367188 0.4482422 -3.5 0.5 0.5 -0 1 0 -1.75 -0.3046875 0.022460938 0.4501953 -3.125 0.25 0.75 -0 -0 1 -1.5625 0.0703125 0.4482422 0.09667969 -3.125 0.5 0.75 -0 -0 1 -1.5625 0.1953125 0.44628906 0.09667969 -3.5 0.5 0.75 -0 -0 1 -1.75 0.1953125 0.44628906 0.09277344 -3.5 0.25 0.75 -0 -0 1 -1.75 0.0703125 0.4482422 0.09277344 -3.125 0.5 0.5 -0 -0 1 -1.5625 0.1953125 0.4482422 0.21191406 -3.5 0.75 0.5 -0 -0 1 -1.75 0.3203125 0.44433594 0.20996094 -3.5 0.5 0.5 -0 -0 1 -1.75 0.1953125 0.44433594 0.21191406 -3.125 0.75 0.5 -0 -0 1 -1.5625 0.3203125 0.4482422 0.20996094 -3.5 0.82141984 0.74999994 1 -0 0 -0.37499997 0.35602242 0.44433594 0.33375898 -3.5 0.5 0.75 1 -0 0 -0.375 0.1953125 0.44433594 0.3310547 -3.5 0.5 0.5 1 -0 0 -0.25 0.1953125 0.44628906 0.3310547 -3.5 0.96427697 0.5 1 -0 0 -0.25 0.42745098 0.44628906 0.33496094 -3.125 0.5 0.5 1 -0 0 -0.25 0.1953125 0.4501953 0.2705078 -3.125 0.75 0.25 1 -0 0 -0.125 0.3203125 0.45214844 0.27246094 -3.125 0.75 0.5 1 -0 0 -0.25 0.3203125 0.45214844 0.2705078 -3.125 0.5 0.25 1 -0 0 -0.125 0.1953125 0.4501953 0.27246094 -3.125 0.75 0.25 -0 1 0 -1.5625 -0.1796875 0.3408203 0.4482422 -3.5 0.75 0.5 -0 1 0 -1.75 -0.3046875 0.33691406 0.44628906 -3.125 0.75 0.5 -0 1 0 -1.5625 -0.3046875 0.3408203 0.44628906 -3.5 0.75 0.25 -0 1 0 -1.75 -0.1796875 0.33691406 0.4482422 -3.5 0.5 0.25 -0 -0 -1 -1.75 0.1953125 0.14941406 0.4482422 -3.5 0.75 0.25 -0 -0 -1 -1.75 0.3203125 0.14941406 0.44628906 -3.125 0.75 0.25 -0 -0 -1 -1.5625 0.3203125 0.14550781 0.44628906 -3.125 0.5 0.25 -0 -0 -1 -1.5625 0.1953125 0.14550781 0.4482422 -3.5 0.96427697 0.5 1 -0 0 -0.25 0.42745098 0.09824222 0.44628906 -3.5 0.75 0.5 1 -0 0 -0.25 0.3203125 0.10058594 0.44628906 -3.5 0.75 0.25 1 -0 0 -0.125 0.3203125 0.10058594 0.4482422 -3.5 1.1071341 0.25 1 -0 0 -0.125 0.49887955 0.09667969 0.4482422 -3.5 0.5 0.25 1 -0 0 -0.125 0.1953125 0.17285156 0.44433594 -3.5 0.75 -5.9519156e-08 1 -0 0 2.9759578e-08 0.3203125 0.16894531 0.44628906 -3.5 0.75 0.25 1 -0 0 -0.125 0.3203125 0.17285156 0.44628906 -3.5 0.5 -2.9759576e-08 1 -0 0 1.4879788e-08 0.1953125 0.16894531 0.44433594 -3.125 0.75 -0 -0 -1 0 -1.5625 -0.0546875 0.4482422 0.041992188 -3.125 0.75 0.25 -0 -1 0 -1.5625 -0.1796875 0.44628906 0.041992188 -3.5 0.75 0.25 -0 -1 0 -1.75 -0.1796875 0.44628906 0.038085938 -3.5 0.75 -0 -0 -1 0 -1.75 -0.0546875 0.4482422 0.038085938 -3.125 0.75 0.25 1 -0 0 -0.125 0.3203125 0.2783203 0.45214844 -3.125 0.75 -0 1 -0 0 0 0.3203125 0.28027344 0.45214844 -3.125 1 -0 1 -0 0 0 0.4453125 0.28027344 0.4501953 -3.125 1 0.25 1 -0 0 -0.125 0.4453125 0.2783203 0.4501953 -3.125 0.75 0.25 -0 -0 1 -1.5625 0.3203125 0.4482422 0.2529297 -3.5 1 0.25 -0 -0 1 -1.75 0.4453125 0.44433594 0.25097656 -3.5 0.75 0.25 -0 -0 1 -1.75 0.3203125 0.44433594 0.2529297 -3.125 1 0.25 -0 -0 1 -1.5625 0.4453125 0.4482422 0.25097656 -3.125 0.25 -0 -0 -0 1 -1.5625 0.0703125 0.4423828 0.22949219 -3.125 0.75 -0 -0 -0 1 -1.5625 0.3203125 0.43847656 0.22949219 -3.5 0.75 -0 -0 -0 1 -1.75 0.3203125 0.43847656 0.22558594 -3.5 0.25 -0 -0 -0 1 -1.75 0.0703125 0.4423828 0.22558594 -3.125 1 -0 -0 1 0 -1.5625 -0.0546875 0.44628906 0.30371094 -3.5 1 0.25 -0 1 0 -1.75 -0.1796875 0.44433594 0.2998047 -3.125 1 0.25 -0 1 0 -1.5625 -0.1796875 0.44433594 0.30371094 -3.5 1 -0 -0 1 0 -1.75 -0.0546875 0.44628906 0.2998047 -3.125 1 -0 -0 -0 1 -1.5625 0.4453125 0.11425781 0.44628906 -3.5 1.25 -0 -0 -0 1 -1.75 0.5703125 0.11035156 0.44433594 -3.5 1 -0 -0 -0 1 -1.75 0.4453125 0.11035156 0.44628906 -3.125 1.25 -0 -0 -0 1 -1.5625 0.5703125 0.11425781 0.44433594 1.375 0.25 -4 -0 1 0 -0.6875001 -2 0.16894531 0.20605469 -3 0.25 -4 -0 1 0 1.4999998 -2 0.16894531 0.17089844 -3 0.25 3.125 -0 1 0 1.5000002 1.5624998 0.11230469 0.17089844 1.375 0.25 3.125 -0 1 0 -0.6874999 1.5625 0.11230469 0.20605469 1.375 0.25 1 -0 1 0 -0.6875 0.5000001 0.39746094 0.15527344 1.375 0.25 3.125 -0 1 0 -0.6874999 1.5625 0.39746094 0.13769531 3 0.25 3.125 -0 1 0 -1.4999998 1.5625002 0.38378906 0.13769531 3 0.25 1 -0 1 0 -1.5 0.5000001 0.38378906 0.15527344 3 0.25 3 -0 1 0 -1.4999998 1.5000002 0.059570312 0.41308594 3.875 0.25 2.75 -0 1 0 -1.9374998 1.3750002 0.061523438 0.42089844 3 0.25 2.75 -0 1 0 -1.4999998 1.3750002 0.061523438 0.41308594 3.875 0.25 3 -0 1 0 -1.9374998 1.5000002 0.059570312 0.42089844 3.875 0.25 2.75 -0 -0 1 -0.96875 -0.124999836 0.4169922 0.23730469 3 1.25 2.75 -0 -0 1 -0.75 -0.6249999 0.4091797 0.22949219 3 0.25 2.75 -0 -0 1 -0.75 -0.124999866 0.4169922 0.22949219 3.875 1.25 2.75 -0 -0 1 -0.96875 -0.6249999 0.4091797 0.23730469 3 0.25 2.75 -1 -0 0 -0.6875 0.125 0.2939453 0.3076172 3 1.25 2.75 -1 -0 0 -0.6875 0.625 0.3017578 0.3076172 3 1.25 2.625 -1 -0 0 -0.65625 0.625 0.3017578 0.3095703 3 0.25 2.625 -1 -0 0 -0.65625 0.125 0.2939453 0.3095703 3.875 1.25 2.625 -0 1 0 -0.96875 1.3125002 0.15527344 0.4248047 3 1.25 2.625 -0 1 0 -0.75 1.3125002 0.14746094 0.4248047 3 1.25 2.75 -0 1 0 -0.7499999 1.3750002 0.14746094 0.42285156 3.875 1.25 2.75 -0 1 0 -0.9687499 1.3750002 0.15527344 0.42285156 3 0.25 2.625 -0 -0 -1 0.75 0.125 0.41503906 0.20214844 3 1.25 2.625 -0 -0 -1 0.75 0.625 0.40722656 0.20214844 3.875 1.25 2.625 -0 -0 -1 0.96875 0.625 0.40722656 0.19433594 3.875 0.25 2.625 -0 -0 -1 0.96875 0.125 0.41503906 0.19433594 3.875 0.25 2.625 -1 -0 0 -0.65625 0.0625 0.0009765625 0.17480469 3.875 1.25 2.625 -1 -0 0 -0.65625 0.3125 0.0009765625 0.18261719 3.875 1.25 2.375 -1 -0 0 -0.59375 0.3125 0.0029296875 0.18261719 3.875 0.25 2.375 -1 -0 0 -0.59375 0.0625 0.0029296875 0.17480469 3 0.25 2.625 -0 1 0 -1.5 1.3125002 0.3720703 0.4091797 3.875 0.25 2.625 -0 1 0 -1.9375 1.3125002 0.3720703 0.4169922 3.875 0.25 2.375 -0 1 0 -1.9375 1.1875002 0.37402344 0.4169922 3 0.25 2.375 -0 1 0 -1.5 1.1875002 0.37402344 0.4091797 3.875 0.25 2.375 -0 -0 1 -0.96875 -0.124999836 0.41503906 0.3486328 3 1.25 2.375 -0 -0 1 -0.75 -0.6249999 0.40722656 0.3408203 3 0.25 2.375 -0 -0 1 -0.75 -0.124999866 0.40722656 0.3486328 3.875 1.25 2.375 -0 -0 1 -0.96875 -0.6249999 0.41503906 0.3408203 3 0.25 2.375 -1 -0 0 -0.59375 0.125 0.12988281 0.42089844 3 1.25 2.375 -1 -0 0 -0.59375 0.625 0.13769531 0.42089844 3 1.25 2.25 -1 -0 0 -0.5625 0.625 0.13769531 0.42285156 3 0.25 2.25 -1 -0 0 -0.5625 0.125 0.12988281 0.42285156 3.875 1.25 2.25 -0 1 0 -0.96875 1.1250002 0.42089844 0.24902344 3 1.25 2.25 -0 1 0 -0.75 1.1250002 0.41308594 0.24902344 3 1.25 2.375 -0 1 0 -0.75 1.1875002 0.41308594 0.24707031 3.875 1.25 2.375 -0 1 0 -0.96875 1.1875002 0.42089844 0.24707031 3 0.25 2.25 -0 -0 -1 0.75 0.125 0.41503906 0.38183594 3 1.25 2.25 -0 -0 -1 0.75 0.625 0.41503906 0.37402344 3.875 1.25 2.25 -0 -0 -1 0.96875 0.625 0.40722656 0.37402344 3.875 0.25 2.25 -0 -0 -1 0.96875 0.125 0.40722656 0.38183594 3.875 0.25 2.25 -1 -0 0 -0.5625 0.0625 0.11035156 0.4189453 3.875 1.25 2.25 -1 -0 0 -0.5625 0.3125 0.11816406 0.4189453 3.875 1.25 2 -1 -0 0 -0.5 0.3125 0.11816406 0.42089844 3.875 0.25 2 -1 -0 0 -0.5 0.0625 0.11035156 0.42089844 3 0.25 2.25 -0 1 0 -1.5 1.1250002 0.41308594 0.0146484375 3.875 0.25 2.25 -0 1 0 -1.9375 1.1250002 0.42089844 0.0146484375 3.875 0.25 2 -0 1 0 -1.9375 1.0000002 0.42089844 0.016601562 3 0.25 2 -0 1 0 -1.5 1.0000002 0.41308594 0.016601562 3.875 0.25 2 -0 -0 1 -0.96875 -0.124999836 0.41503906 0.13769531 3 1.25 2 -0 -0 1 -0.75 -0.6249999 0.40722656 0.12988281 3 0.25 2 -0 -0 1 -0.75 -0.124999866 0.40722656 0.13769531 3.875 1.25 2 -0 -0 1 -0.96875 -0.6249999 0.41503906 0.12988281 3 0.25 2 -1 -0 0 -0.5 0.125 0.3544922 0.4091797 3 1.25 2 -1 -0 0 -0.5 0.625 0.3623047 0.4091797 3 1.25 1.5 -1 -0 0 -0.375 0.625 0.3623047 0.41308594 3 0.25 1.5 -1 -0 0 -0.375 0.125 0.3544922 0.41308594 3.875 1.25 1.5 -0 1 0 -0.96875 0.7500001 0.028320312 0.41308594 3 1.25 1.5 -0 1 0 -0.75 0.7500001 0.020507812 0.41308594 3 1.25 2 -0 1 0 -0.75 1.0000002 0.020507812 0.4091797 3.875 1.25 2 -0 1 0 -0.96875 1.0000002 0.028320312 0.4091797 3 0.25 1.5 -0 -0 -1 0.75 0.125 0.41503906 0.40527344 3 1.25 1.5 -0 -0 -1 0.75 0.625 0.40722656 0.40527344 3.875 1.25 1.5 -0 -0 -1 0.96875 0.625 0.40722656 0.39746094 3.875 0.25 1.5 -0 -0 -1 0.96875 0.125 0.41503906 0.39746094 3.875 0.25 1.5 -1 -0 0 -0.375 0.0625 0.16894531 0.3330078 3.875 1.25 1.5 -1 -0 0 -0.375 0.3125 0.16894531 0.3408203 3.875 1.25 -0 -1 -0 0 0 0.3125 0.18066406 0.3408203 3.875 0.25 -0 -1 -0 0 0 0.0625 0.18066406 0.3330078 3 0.25 1.5 -0 1 0 -1.5 0.7500001 0.3330078 0.4091797 3.875 0.25 1.5 -0 1 0 -1.9375 0.7500001 0.3408203 0.4091797 3.875 0.25 1 -0 1 0 -1.9375 0.5000001 0.3408203 0.41308594 3 0.25 1 -0 1 0 -1.5 0.5000001 0.3330078 0.41308594 3.875 0.25 -0 -0 -0 1 -0.96875 -0.124999836 0.41503906 0.21972656 3.875 1.25 -0 -0 -0 1 -0.96875 -0.6249999 0.41503906 0.21191406 3 1.25 -0 -0 -0 1 -0.75 -0.6249999 0.40722656 0.21191406 3 0.25 -0 -0 -0 1 -0.75 -0.124999866 0.40722656 0.21972656 3.875 1.25 -1 -0 1 0 -0.96875 -0.49999982 0.0087890625 0.37597656 3 1.25 -0 -0 1 0 -0.75 1.3113416e-07 0.0009765625 0.36816406 3.875 1.25 -0 -0 1 0 -0.96875 1.6938164e-07 0.0087890625 0.36816406 3 1.25 -1 -0 1 0 -0.75 -0.49999988 0.0009765625 0.37597656 3 0.25 -0 -1 -0 0 0 0.125 0.40722656 0.06738281 3 1.25 -0 -1 -0 0 0 0.625 0.40722656 0.07519531 3 1.25 -1 -1 -0 0 0.25 0.625 0.41503906 0.07519531 3 0.25 -1 -1 -0 0 0.25 0.125 0.41503906 0.06738281 3 0.25 -0 -0 1 0 -1.5 1.3113416e-07 0.4248047 0.10253906 3.875 0.25 0.25 -0 1 0 -1.9375 0.12500018 0.42285156 0.09472656 3.875 0.25 -0 -0 1 0 -1.9375 1.6938164e-07 0.4248047 0.09472656 3 0.25 0.25 -0 1 0 -1.5 0.12500012 0.42285156 0.10253906 3 0.25 -1 -0 -0 -1 0.75 0.125 0.4111328 0.053710938 3 1.25 -1 -0 -0 -1 0.75 0.625 0.4033203 0.053710938 3.875 1.25 -1 -0 -0 -1 0.96875 0.625 0.4033203 0.045898438 3.875 0.25 -1 -0 -0 -1 0.96875 0.125 0.4111328 0.045898438 3.875 0.25 -1 -1 -0 0 0.25 0.0625 0.3310547 0.07324219 3.875 1.25 -1 -1 -0 0 0.25 0.3125 0.3310547 0.08105469 3.875 1.25 -3 -1 -0 0 0.75 0.3125 0.3466797 0.08105469 3.875 0.25 -3 -1 -0 0 0.75 0.0625 0.3466797 0.07324219 3 0.25 -3 -0 1 0 -1.5000002 -1.4999998 0.22167969 0.3779297 3 0.25 -1 -0 1 0 -1.5 -0.49999988 0.20605469 0.3779297 3.875 0.25 -1 -0 1 0 -1.9375 -0.49999982 0.20605469 0.3701172 3.875 0.25 -3 -0 1 0 -1.9375002 -1.4999998 0.22167969 0.3701172 3.875 0.25 -3 -0 -0 1 -0.96875 -0.124999836 0.23535156 0.40722656 3 1.25 -3 -0 -0 1 -0.75 -0.6249999 0.22753906 0.39941406 3 0.25 -3 -0 -0 1 -0.75 -0.124999866 0.23535156 0.39941406 3.875 1.25 -3 -0 -0 1 -0.96875 -0.6249999 0.22753906 0.40722656 3 0.25 -3 -1 -0 0 0.75 0.125 0.09277344 0.19628906 3 1.25 -3 -1 -0 0 0.75 0.625 0.09277344 0.20410156 3 1.25 -4 -1 -0 0 1 0.625 0.10058594 0.20410156 3 0.25 -4 -1 -0 0 1 0.125 0.10058594 0.19628906 3.875 1.25 -4 -0 1 0 -0.9687501 -1.9999998 0.40527344 0.27246094 3 1.25 -4 -0 1 0 -0.7500001 -1.9999998 0.40527344 0.26464844 3 1.25 -3 -0 1 0 -0.7500001 -1.4999998 0.39746094 0.26464844 3.875 1.25 -3 -0 1 0 -0.9687501 -1.4999998 0.39746094 0.27246094 3.875 1.25 -4 -0 -0 1 -0.96875 -0.31249994 0.10644531 0.35839844 3 2.25 -4 -0 -0 1 -0.75 -0.5624999 0.09863281 0.35058594 3 1.25 -4 -0 -0 1 -0.75 -0.31249994 0.10644531 0.35058594 3.875 2.25 -4 -0 -0 1 -0.96875 -0.5624999 0.09863281 0.35839844 3.875 0.25 3 -1 -0 0 -0.75 0.0625 0.32128906 0.40722656 3.875 1.25 2.75 -1 -0 0 -0.6875 0.3125 0.3232422 0.41503906 3.875 0.25 2.75 -1 -0 0 -0.6875 0.0625 0.3232422 0.40722656 3.875 1.25 3 -1 -0 0 -0.75 0.3125 0.32128906 0.41503906 3 0.25 3 -0 -0 -1 0.75 0.125 0.3076172 0.11035156 3.875 1.25 3 -0 -0 -1 0.96875 0.625 0.2998047 0.10253906 3.875 0.25 3 -0 -0 -1 0.96875 0.125 0.2998047 0.11035156 3 1.25 3 -0 -0 -1 0.75 0.625 0.3076172 0.10253906 3 0.25 3.875 -1 -0 0 -0.96875 0.125 0.37402344 0.33691406 3 1.25 3 -1 -0 0 -0.75 0.625 0.38183594 0.34472656 3 0.25 3 -1 -0 0 -0.75 0.125 0.38183594 0.33691406 3 1.25 3.875 -1 -0 0 -0.96875 0.625 0.37402344 0.34472656 3.875 1.25 3 -0 1 0 -0.9687499 1.5000002 0.29785156 0.35253906 3 1.25 3 -0 1 0 -0.7499999 1.5000002 0.29785156 0.34472656 3 1.25 3.875 -0 1 0 -0.7499999 1.9375002 0.29003906 0.34472656 3.875 1.25 3.875 -0 1 0 -0.9687499 1.9375002 0.29003906 0.35253906 3 0.25 -4 -0 1 0 -1.5000002 -1.9999998 0.036132812 0.3564453 1.375 0.25 -4 -0 1 0 -0.6875001 -2 0.036132812 0.34277344 1.375 0.25 0.25 -0 1 0 -0.6875 0.12500006 0.0029296875 0.34277344 3 0.25 0.25 -0 1 0 -1.5 0.12500012 0.0029296875 0.3564453 1.625 0.25 1 -0 1 0 -0.8125 0.5000001 0.2548828 0.23730469 3.875 0.25 0.25 -0 1 0 -1.9375 0.12500018 0.2607422 0.2548828 1.625 0.25 0.25 -0 1 0 -0.8125 0.12500006 0.2607422 0.23730469 3.875 0.25 1 -0 1 0 -1.9375 0.5000001 0.2548828 0.2548828 1.625 0.25 1 1 -0 0 -0.5 0.125 0.2685547 0.4404297 1.625 0.25 0.25 1 -0 0 -0.125 0.125 0.27441406 0.4404297 1.625 0.5 0.25 1 -0 0 -0.125 0.25 0.27441406 0.43847656 1.625 0.5 1 1 -0 0 -0.5 0.25 0.2685547 0.43847656 1.375 0.25 0.25 -0 -0 -1 -0.6875 -0.12499994 0.45214844 0.4248047 1.625 0.5 0.25 -0 -0 -1 -0.8125 -0.24999994 0.4501953 0.42285156 1.625 0.25 0.25 -0 -0 -1 -0.8125 -0.124999925 0.45214844 0.42285156 1.375 0.5 0.25 -0 -0 -1 -0.6875 -0.24999994 0.4501953 0.4248047 1.875 0.5 0.25 -0 -1 0 0.9375 -0.125 0.3935547 0.4423828 1.625 0.5 1 -0 -1 0 0.8125 -0.5 0.39160156 0.43652344 1.625 0.5 0.25 -0 -1 0 0.8125 -0.125 0.39160156 0.4423828 1.875 0.5 1 -0 -1 0 0.9375 -0.5 0.3935547 0.43652344 1.625 0.25 1 -0 -0 1 0.8125 0.125 0.26660156 0.45214844 1.625 0.5 1 -0 -0 1 0.8125 0.25 0.26464844 0.45214844 1.375 0.5 1 -0 -0 1 0.6875 0.25 0.26464844 0.4501953 1.375 0.25 1 -0 -0 1 0.6875 0.125 0.26660156 0.4501953 1.625 0.5 0.25 -0 1 0 -0.8125 0.12500006 0.18847656 0.4423828 1.375 0.5 1 -0 1 0 -0.6875 0.5000001 0.18261719 0.4404297 1.625 0.5 1 -0 1 0 -0.8125 0.5000001 0.18261719 0.4423828 1.375 0.5 0.25 -0 1 0 -0.6875 0.12500006 0.18847656 0.4404297 1.375 0.25 1 -1 -0 0 0.5 -0.12500003 0.08105469 0.43652344 1.375 0.5 1 -1 -0 0 0.5 -0.25000006 0.08105469 0.43847656 1.375 0.5 0.25 -1 -0 0 0.124999985 -0.25 0.08691406 0.43847656 1.375 0.25 0.25 -1 -0 0 0.124999985 -0.125 0.08691406 0.43652344 1.625 0.5 1 -1 -0 0 0.5 -0.25000006 0.43847656 0.26464844 1.625 0.75 0.25 -1 -0 0 0.12499997 -0.375 0.4404297 0.2705078 1.625 0.5 0.25 -1 -0 0 0.124999985 -0.25 0.43847656 0.2705078 1.625 0.75 1 -1 -0 0 0.49999994 -0.37500006 0.4404297 0.26464844 1.625 0.5 0.25 -0 -0 -1 -0.8125 -0.24999994 0.45214844 0.20019531 1.625 0.75 0.25 -0 -0 -1 -0.8125 -0.37499994 0.4501953 0.20019531 1.875 0.75 0.25 -0 -0 -1 -0.9375 -0.37499994 0.4501953 0.19824219 1.875 0.5 0.25 -0 -0 -1 -0.9375 -0.24999991 0.45214844 0.19824219 1.875 0.75 0.25 -0 1 0 -0.9375 0.12500009 0.35839844 0.43847656 1.625 0.75 0.25 -0 1 0 -0.8125 0.12500006 0.35839844 0.43652344 1.625 0.75 1 -0 1 0 -0.8125 0.5000001 0.35253906 0.43652344 1.875 0.75 1 -0 1 0 -0.9375 0.5000001 0.35253906 0.43847656 1.875 0.5 1 1 -0 0 -0.5 0.25 0.4345703 0.3642578 1.875 0.5 0.25 1 -0 0 -0.125 0.25 0.4404297 0.3642578 1.875 0.75 0.25 1 -0 0 -0.125 0.375 0.4404297 0.3623047 1.875 0.75 1 1 -0 0 -0.5 0.375 0.4345703 0.3623047 2.125 0.75 0.25 -0 -1 0 1.0625 -0.125 0.3173828 0.43847656 1.875 0.75 1 -0 -1 0 0.9375 -0.5 0.31152344 0.43652344 1.875 0.75 0.25 -0 -1 0 0.9375 -0.125 0.3173828 0.43652344 2.125 0.75 1 -0 -1 0 1.0625 -0.5 0.31152344 0.43847656 1.875 0.5 1 -0 -0 1 0.9375 0.25 0.45214844 0.3154297 1.875 0.75 1 -0 -0 1 0.9375 0.375 0.45214844 0.31347656 1.625 0.75 1 -0 -0 1 0.8125 0.375 0.4501953 0.31347656 1.625 0.5 1 -0 -0 1 0.8125 0.25 0.4501953 0.3154297 1.875 0.75 1 -1 -0 0 0.49999994 -0.37500006 0.43847656 0.12988281 1.875 1 0.25 -1 -0 0 0.124999955 -0.5 0.4404297 0.13574219 1.875 0.75 0.25 -1 -0 0 0.12499997 -0.375 0.43847656 0.13574219 1.875 1 1 -1 -0 0 0.49999994 -0.5 0.4404297 0.12988281 1.875 0.75 0.25 -0 -0 -1 -0.9375 -0.37499994 0.08496094 0.3154297 1.875 1 0.25 -0 -0 -1 -0.9375 -0.49999994 0.08300781 0.3154297 2.125 1 0.25 -0 -0 -1 -1.0625 -0.49999988 0.08300781 0.31347656 2.125 0.75 0.25 -0 -0 -1 -1.0625 -0.37499988 0.08496094 0.31347656 2.125 1 0.25 -0 1 0 -1.0625 0.12500009 0.4404297 0.32128906 1.875 1 0.25 -0 1 0 -0.9375 0.12500009 0.43847656 0.32128906 1.875 1 1 -0 1 0 -0.9375 0.5000001 0.43847656 0.3154297 2.125 1 1 -0 1 0 -1.0625 0.5000001 0.4404297 0.3154297 2.125 0.75 1 1 -0 0 -0.5 0.375 0.4404297 0.42089844 2.125 0.75 0.25 1 -0 0 -0.125 0.375 0.4404297 0.4267578 2.125 1 0.25 1 -0 0 -0.125 0.5 0.43847656 0.4267578 2.125 1 1 1 -0 0 -0.5 0.5 0.43847656 0.42089844 2.375 1 0.25 -0 -1 0 1.1875 -0.125 0.23535156 0.43652344 2.125 1 1 -0 -1 0 1.0625 -0.5 0.23339844 0.43066406 2.125 1 0.25 -0 -1 0 1.0625 -0.125 0.23339844 0.43652344 2.375 1 1 -0 -1 0 1.1875 -0.5 0.23535156 0.43066406 2.125 0.75 1 -0 -0 1 1.0625 0.375 0.45214844 0.36035156 2.125 1 1 -0 -0 1 1.0625 0.5 0.45214844 0.35839844 1.875 1 1 -0 -0 1 0.9375 0.5 0.4501953 0.35839844 1.875 0.75 1 -0 -0 1 0.9375 0.375 0.4501953 0.36035156 2.125 1 1 -1 -0 0 0.49999994 -0.5 0.0048828125 0.43652344 2.125 1.25 0.25 -1 -0 0 0.12499994 -0.625 0.0107421875 0.43847656 2.125 1 0.25 -1 -0 0 0.124999955 -0.5 0.0107421875 0.43652344 2.125 1.25 1 -1 -0 0 0.49999994 -0.625 0.0048828125 0.43847656 2.125 1 0.25 -0 -0 -1 -1.0625 -0.49999988 0.43847656 0.4501953 2.125 1.25 0.25 -0 -0 -1 -1.0625 -0.6249999 0.43847656 0.4482422 2.375 1.25 0.25 -0 -0 -1 -1.1875 -0.6249999 0.43652344 0.4482422 2.375 1 0.25 -0 -0 -1 -1.1875 -0.49999988 0.43652344 0.4501953 2.375 1.25 0.25 -0 1 0 -1.1875 0.12500009 0.43847656 0.19628906 2.125 1.25 0.25 -0 1 0 -1.0625 0.12500009 0.43652344 0.19628906 2.125 1.25 1 -0 1 0 -1.0625 0.5000001 0.43652344 0.19042969 2.375 1.25 1 -0 1 0 -1.1875 0.5000001 0.43847656 0.19042969 2.375 1 1 1 -0 0 -0.5 0.5 0.43652344 0.038085938 2.375 1 0.25 1 -0 0 -0.125 0.5 0.43652344 0.043945312 2.375 1.25 0.25 1 -0 0 -0.125 0.625 0.4345703 0.043945312 2.375 1.25 1 1 -0 0 -0.5 0.625 0.4345703 0.038085938 2.625 1.25 0.25 -0 -1 0 1.3125 -0.125 0.43847656 0.43847656 2.375 1.25 1 -0 -1 0 1.1875 -0.5 0.4326172 0.43652344 2.375 1.25 0.25 -0 -1 0 1.1875 -0.125 0.43847656 0.43652344 2.625 1.25 1 -0 -1 0 1.3125 -0.5 0.4326172 0.43847656 2.375 1 1 -0 -0 1 1.1875 0.5 0.45214844 0.13183594 2.375 1.25 1 -0 -0 1 1.1875 0.625 0.45214844 0.12988281 2.125 1.25 1 -0 -0 1 1.0625 0.625 0.4501953 0.12988281 2.125 1 1 -0 -0 1 1.0625 0.5 0.4501953 0.13183594 2.375 1.25 1 -1 -0 0 0.49999994 -0.625 0.026367188 0.43652344 2.375 1.5 0.25 -1 -0 0 0.12499994 -0.75 0.032226562 0.43847656 2.375 1.25 0.25 -1 -0 0 0.12499994 -0.625 0.032226562 0.43652344 2.375 1.5 1 -1 -0 0 0.49999994 -0.75 0.026367188 0.43847656 2.375 1.25 0.25 -0 -0 -1 -1.1875 -0.6249999 0.45214844 0.07714844 2.375 1.5 0.25 -0 -0 -1 -1.1875 -0.7499999 0.45214844 0.07519531 2.625 1.5 0.25 -0 -0 -1 -1.3125 -0.7499999 0.4501953 0.07519531 2.625 1.25 0.25 -0 -0 -1 -1.3125 -0.6249999 0.4501953 0.07714844 2.625 1.5 0.25 -0 1 0 -1.3125 0.12500012 0.3798828 0.43847656 2.375 1.5 0.25 -0 1 0 -1.1875 0.12500009 0.3798828 0.43652344 2.375 1.5 1 -0 1 0 -1.1875 0.5000001 0.37402344 0.43652344 2.625 1.5 1 -0 1 0 -1.3125 0.5000001 0.37402344 0.43847656 2.625 1.25 1 1 -0 0 -0.5 0.625 0.24902344 0.43847656 2.625 1.25 0.25 1 -0 0 -0.125 0.625 0.2548828 0.43847656 2.625 1.5 0.25 1 -0 0 -0.125 0.75 0.2548828 0.43652344 2.625 1.5 1 1 -0 0 -0.5 0.75 0.24902344 0.43652344 2.875 1.5 0.25 -0 -1 0 1.4375 -0.125 0.20605469 0.43652344 2.625 1.5 1 -0 -1 0 1.3125 -0.5 0.20019531 0.4345703 2.625 1.5 0.25 -0 -1 0 1.3125 -0.125 0.20605469 0.4345703 2.875 1.5 1 -0 -1 0 1.4375 -0.5 0.20019531 0.43652344 2.625 1.25 1 -0 -0 1 1.3125 0.625 0.4501953 0.18847656 2.625 1.5 1 -0 -0 1 1.3125 0.75 0.4501953 0.18652344 2.375 1.5 1 -0 -0 1 1.1875 0.75 0.4482422 0.18652344 2.375 1.25 1 -0 -0 1 1.1875 0.625 0.4482422 0.18847656 2.625 1.5 1 -1 -0 0 0.49999994 -0.75 0.43652344 0.07519531 2.625 1.75 0.25 -1 -0 0 0.124999925 -0.875 0.43847656 0.08105469 2.625 1.5 0.25 -1 -0 0 0.12499994 -0.75 0.43652344 0.08105469 2.625 1.75 1 -1 -0 0 0.49999994 -0.875 0.43847656 0.07519531 2.625 1.5 0.25 -0 -0 -1 -1.3125 -0.7499999 0.36816406 0.4501953 2.625 1.75 0.25 -0 -0 -1 -1.3125 -0.8749999 0.36816406 0.4482422 2.875 1.75 0.25 -0 -0 -1 -1.4375 -0.8749999 0.36621094 0.4482422 2.875 1.5 0.25 -0 -0 -1 -1.4375 -0.7499999 0.36621094 0.4501953 2.875 1.75 0.25 -0 1 0 -1.4375 0.12500012 0.22363281 0.43652344 2.625 1.75 0.25 -0 1 0 -1.3125 0.12500012 0.22363281 0.4345703 2.625 1.75 1 -0 1 0 -1.3125 0.5000001 0.21777344 0.4345703 2.875 1.75 1 -0 1 0 -1.4375 0.5000001 0.21777344 0.43652344 2.875 1.5 1 1 -0 0 -0.5 0.75 0.32910156 0.43652344 2.875 1.5 0.25 1 -0 0 -0.125 0.75 0.33496094 0.43652344 2.875 1.75 0.25 1 -0 0 -0.125 0.875 0.33496094 0.4345703 2.875 1.75 1 1 -0 0 -0.5 0.875 0.32910156 0.4345703 3.1249847 1.75 0.25 -0 -1 0 1.5624924 -0.125 0.40917957 0.15527344 2.875 1.75 1 -0 -1 0 1.4375 -0.5 0.40722656 0.14941406 2.875 1.75 0.25 -0 -1 0 1.4375 -0.125 0.40722656 0.15527344 3.875 1.75 1 -0 -1 0 1.9375 -0.5 0.41503906 0.14941406 2.875 1.5 1 -0 -0 1 1.4375 0.75 0.4501953 0.43847656 2.875 1.75 1 -0 -0 1 1.4375 0.875 0.4501953 0.43652344 2.625 1.75 1 -0 -0 1 1.3125 0.875 0.4482422 0.43652344 2.625 1.5 1 -0 -0 1 1.3125 0.75 0.4482422 0.43847656 2.875 1.75 1 -1 -0 0 0.49999994 -0.875 0.43652344 0.3935547 2.875 2 0.25 -1 -0 0 0.12499991 -1 0.43847656 0.39941406 2.875 1.75 0.25 -1 -0 0 0.124999925 -0.875 0.43652344 0.39941406 2.875 2 1 -1 -0 0 0.49999994 -1 0.43847656 0.3935547 2.875 1.75 0.25 -0 -0 -1 -1.4375 -0.8749999 0.4501953 0.4501953 2.875 2 0.25 -0 -0 -1 -1.4375 -0.9999999 0.4501953 0.4482422 3.1249847 2 0.25 -0 -0 -1 -1.5624924 -0.9999999 0.4482422 0.4482422 3.1249847 1.75 0.25 -0 -0 -1 -1.5624924 -0.8749999 0.4482422 0.4501953 3.1249847 2 0.25 -0 1 0 -1.5624924 0.12500015 0.41503918 0.3095703 2.875 2 0.25 -0 1 0 -1.4375 0.12500012 0.4169922 0.3095703 2.875 2 1 -0 1 0 -1.4375 0.5000001 0.4169922 0.30371094 3.875 2 1 -0 1 0 -1.9375 0.5000001 0.4091797 0.30371094 3.875 1.75 1 -0 -0 1 1.9375 0.875 0.20214844 0.42089844 3.875 2 1 -0 -0 1 1.9375 1 0.20019531 0.42089844 2.875 2 1 -0 -0 1 1.4375 1 0.20019531 0.41308594 2.875 1.75 1 -0 -0 1 1.4375 0.875 0.20214844 0.41308594 -2.5 0.25 3.875 -0 1 0 1.2500002 1.9375 0.35839844 0.07910156 3 0.25 3.875 -0 1 0 -1.4999998 1.9375002 0.35839844 0.12207031 3 0.25 3.125 -0 1 0 -1.4999998 1.5625002 0.3642578 0.12207031 -2.5 0.25 3.125 -0 1 0 1.2500002 1.5625 0.3642578 0.07910156 3 0.25 3.875 -0 -0 -1 0.75 0.0625 0.08886719 0.3564453 -2.5 0.25 3.875 -0 -0 -1 -0.625 0.0625 0.045898438 0.3564453 -2.5 0.5 3.875 -0 -0 -1 -0.625 0.125 0.045898438 0.3544922 3 0.5 3.875 -0 -0 -1 0.75 0.125 0.08886719 0.3544922 -2.5 0.25 3.875 1 -0 0 1.9375 -0.12500018 0.08691406 0.2529297 -2.5 0.25 3.125 1 -0 0 1.5625 -0.12500015 0.08691406 0.25878906 -2.5 0.5 3.125 1 -0 0 1.5625 -0.25000012 0.08496094 0.25878906 -2.5 0.5 3.875 1 -0 0 1.9375 -0.25000018 0.08496094 0.2529297 -3 0.25 3.125 -0 -0 -1 -1.5 0.125 0.44628906 0.17089844 -2.5 0.5 3.125 -0 -0 -1 -1.25 0.25 0.44433594 0.16699219 -2.5 0.25 3.125 -0 -0 -1 -1.25 0.125 0.44628906 0.16699219 -3 0.5 3.125 -0 -0 -1 -1.5 0.25 0.44433594 0.17089844 -2 0.5 3.125 -0 -1 0 -1 -1.5625 0.2548828 0.11035156 -2.5 0.5 3.875 -0 -1 0 -1.25 -1.9375 0.25097656 0.10449219 -2.5 0.5 3.125 -0 -1 0 -1.25 -1.5625 0.25097656 0.11035156 -2 0.5 3.875 -0 -1 0 -1 -1.9375 0.2548828 0.10449219 -2.5 0.5 3.875 -1 -0 0 -1.9375 0.25 0.14941406 0.4345703 -2.5 0.75 3.125 -1 -0 0 -1.5625 0.375 0.15527344 0.43652344 -2.5 0.5 3.125 -1 -0 0 -1.5625 0.25 0.15527344 0.4345703 -2.5 0.75 3.875 -1 -0 0 -1.9375 0.375 0.14941406 0.43652344 -2.5 0.5 3.125 -0 -0 -1 -1.25 0.25 0.4091797 0.44433594 -2 0.75 3.125 -0 -0 -1 -1 0.375 0.40527344 0.4423828 -2 0.5 3.125 -0 -0 -1 -1 0.25 0.40527344 0.44433594 -2.5 0.75 3.125 -0 -0 -1 -1.25 0.375 0.4091797 0.4423828 -2 0.5 3.875 1 -0 0 1.9375 -0.25000018 0.23144531 0.3779297 -2 0.5 3.125 1 -0 0 1.5625 -0.25000012 0.23730469 0.3779297 -2 0.75 3.125 1 -0 0 1.5625 -0.37500012 0.23730469 0.37597656 -2 0.75 3.875 1 -0 0 1.9375 -0.37500018 0.23144531 0.37597656 -1.5 0.75 3.125 -0 -1 0 -0.75 -1.5625 0.4189453 0.3642578 -2 0.75 3.875 -0 -1 0 -1 -1.9375 0.41308594 0.36035156 -2 0.75 3.125 -0 -1 0 -1 -1.5625 0.4189453 0.36035156 -1.5 0.75 3.875 -0 -1 0 -0.75 -1.9375 0.41308594 0.3642578 3 0.5 3.875 -0 -0 -1 0.75 0.125 0.35058594 0.3544922 -2 0.5 3.875 -0 -0 -1 -0.5 0.125 0.31152344 0.3544922 -2 0.75 3.875 -0 -0 -1 -0.5 0.1875 0.31152344 0.35253906 3 0.75 3.875 -0 -0 -1 0.75 0.1875 0.35058594 0.35253906 -2 0.75 3.875 -1 -0 0 -1.9375 0.375 0.43652344 0.34472656 -2 1 3.125 -1 -0 0 -1.5625 0.5 0.43847656 0.35058594 -2 0.75 3.125 -1 -0 0 -1.5625 0.375 0.43652344 0.35058594 -2 1 3.875 -1 -0 0 -1.9375 0.5 0.43847656 0.34472656 -2 0.75 3.125 -0 -0 -1 -1 0.375 0.44433594 0.0107421875 -1.5 1 3.125 -0 -0 -1 -0.75 0.5 0.4423828 0.0068359375 -1.5 0.75 3.125 -0 -0 -1 -0.75 0.375 0.44433594 0.0068359375 -2 1 3.125 -0 -0 -1 -1 0.5 0.4423828 0.0107421875 -1.5 0.75 3.875 1 -0 0 1.9375 -0.37500018 0.13183594 0.4345703 -1.5 0.75 3.125 1 -0 0 1.5625 -0.37500012 0.13769531 0.4345703 -1.5 1 3.125 1 -0 0 1.5625 -0.5000001 0.13769531 0.4326172 -1.5 1 3.875 1 -0 0 1.9375 -0.5000001 0.13183594 0.4326172 -1 1 3.125 -0 -1 0 -0.5 -1.5625 0.4248047 0.047851562 -1.5 1 3.875 -0 -1 0 -0.75 -1.9375 0.42089844 0.041992188 -1.5 1 3.125 -0 -1 0 -0.75 -1.5625 0.42089844 0.047851562 -1 1 3.875 -0 -1 0 -0.5 -1.9375 0.4248047 0.041992188 3 0.75 3.875 -0 -0 -1 0.75 0.1875 0.37597656 0.32714844 -1.5 0.75 3.875 -0 -0 -1 -0.375 0.1875 0.37597656 0.2919922 -1.5 1 3.875 -0 -0 -1 -0.375 0.25 0.37402344 0.2919922 3 1 3.875 -0 -0 -1 0.75 0.25 0.37402344 0.32714844 -1.5 1 3.875 -1 -0 0 -1.9375 0.5 0.43652344 0.14941406 -1.5 1.25 3.125 -1 -0 0 -1.5625 0.625 0.43847656 0.15527344 -1.5 1 3.125 -1 -0 0 -1.5625 0.5 0.43652344 0.15527344 -1.5 1.25 3.875 -1 -0 0 -1.9375 0.625 0.43847656 0.14941406 -1.5 1 3.125 -0 -0 -1 -0.75 0.5 0.4423828 0.10839844 -1 1.25 3.125 -0 -0 -1 -0.5 0.625 0.43847656 0.10644531 -1 1 3.125 -0 -0 -1 -0.5 0.5 0.43847656 0.10839844 -1.5 1.25 3.125 -0 -0 -1 -0.75 0.625 0.4423828 0.10644531 -1 1 3.875 1 -0 0 1.9375 -0.5000001 0.055664062 0.4326172 -1 1 3.125 1 -0 0 1.5625 -0.5000001 0.061523438 0.4326172 -1 1.25 3.125 1 -0 0 1.5625 -0.6250001 0.061523438 0.43066406 -1 1.25 3.875 1 -0 0 1.9375 -0.6250001 0.055664062 0.43066406 -0.5 1.25 3.125 -0 -1 0 -0.25 -1.5625 0.37597656 0.20800781 -1 1.25 3.875 -0 -1 0 -0.5 -1.9375 0.3720703 0.20214844 -1 1.25 3.125 -0 -1 0 -0.5 -1.5625 0.3720703 0.20800781 -0.5 1.25 3.875 -0 -1 0 -0.25 -1.9375 0.37597656 0.20214844 3 1 3.875 -0 -0 -1 0.75 0.25 0.3779297 0.24902344 -1 1 3.875 -0 -0 -1 -0.25 0.25 0.3779297 0.21777344 -1 1.25 3.875 -0 -0 -1 -0.25 0.3125 0.37597656 0.21777344 3 1.25 3.875 -0 -0 -1 0.75 0.3125 0.37597656 0.24902344 -1 1.25 3.875 -1 -0 0 -1.9375 0.625 0.4345703 0.09082031 -1 1.5 3.125 -1 -0 0 -1.5625 0.75 0.43652344 0.09667969 -1 1.25 3.125 -1 -0 0 -1.5625 0.625 0.4345703 0.09667969 -1 1.5 3.875 -1 -0 0 -1.9375 0.75 0.43652344 0.09082031 -1 1.25 3.125 -0 -0 -1 -0.5 0.625 0.44433594 0.028320312 -0.5 1.5 3.125 -0 -0 -1 -0.25 0.75 0.4423828 0.024414062 -0.5 1.25 3.125 -0 -0 -1 -0.25 0.625 0.44433594 0.024414062 -1 1.5 3.125 -0 -0 -1 -0.5 0.75 0.4423828 0.028320312 -0.5 1.25 3.875 1 -0 0 1.9375 -0.6250001 0.3095703 0.0009765625 -0.5 1.25 3.125 1 -0 0 1.5625 -0.6250001 0.3095703 0.0068359375 -0.5 1.5 3.125 1 -0 0 1.5625 -0.7500001 0.3076172 0.0068359375 -0.5 1.5 3.875 1 -0 0 1.9375 -0.7500001 0.3076172 0.0009765625 0 1.5 3.125 -0 -1 0 0 -1.5625 0.29785156 0.4189453 -0.5 1.5 3.875 -0 -1 0 -0.25 -1.9375 0.2939453 0.41308594 -0.5 1.5 3.125 -0 -1 0 -0.25 -1.5625 0.2939453 0.4189453 0 1.5 3.875 -0 -1 0 0 -1.9375 0.29785156 0.41308594 3.875 1.25 3.875 -0 -0 -1 0.96875 0.3125 0.18847656 0.3701172 -0.5 1.25 3.875 -0 -0 -1 -0.125 0.3125 0.15332031 0.3701172 -0.5 1.5 3.875 -0 -0 -1 -0.125 0.375 0.15332031 0.36816406 3.875 1.5 3.875 -0 -0 -1 0.96875 0.375 0.18847656 0.36816406 -0.5 1.5 3.875 -1 -0 0 -1.9375 0.75 0.09667969 0.4326172 -0.5 1.75 3.125 -1 -0 0 -1.5625 0.875 0.10253906 0.4345703 -0.5 1.5 3.125 -1 -0 0 -1.5625 0.75 0.10253906 0.4326172 -0.5 1.75 3.875 -1 -0 0 -1.9375 0.875 0.09667969 0.4345703 -0.5 1.5 3.125 -0 -0 -1 -0.25 0.75 0.3876953 0.16699219 0 1.75 3.125 -0 -0 -1 0 0.875 0.38378906 0.16503906 0 1.5 3.125 -0 -0 -1 0 0.75 0.38378906 0.16699219 -0.5 1.75 3.125 -0 -0 -1 -0.25 0.875 0.3876953 0.16503906 0 1.5 3.875 1 -0 0 1.9375 -0.7500001 0.4033203 0.4326172 0 1.5 3.125 1 -0 0 1.5625 -0.7500001 0.4091797 0.4326172 0 1.75 3.125 1 -0 0 1.5625 -0.8750001 0.4091797 0.43066406 0 1.75 3.875 1 -0 0 1.9375 -0.8750001 0.4033203 0.43066406 0.5 1.75 3.125 -0 -1 0 0.25 -1.5625 0.42089844 0.17480469 0 1.75 3.875 -0 -1 0 0 -1.9375 0.41503906 0.17089844 0 1.75 3.125 -0 -1 0 0 -1.5625 0.42089844 0.17089844 0.5 1.75 3.875 -0 -1 0 0.25 -1.9375 0.41503906 0.17480469 3.875 1.5 3.875 -0 -0 -1 0.96875 0.375 0.22949219 0.38964844 0 1.5 3.875 -0 -0 -1 0 0.375 0.19824219 0.38964844 0 1.75 3.875 -0 -0 -1 0 0.4375 0.19824219 0.3876953 3.875 1.75 3.875 -0 -0 -1 0.96875 0.4375 0.22949219 0.3876953 0 1.75 3.875 -1 -0 0 -1.9375 0.875 0.42871094 0.3330078 0 2 3.125 -1 -0 0 -1.5625 1 0.4345703 0.33496094 0 1.75 3.125 -1 -0 0 -1.5625 0.875 0.4345703 0.3330078 0 2 3.875 -1 -0 0 -1.9375 1 0.42871094 0.33496094 0 1.75 3.125 -0 -0 -1 0 0.875 0.4423828 0.06347656 0.5 2 3.125 -0 -0 -1 0.25 1 0.4404297 0.059570312 0.5 1.75 3.125 -0 -0 -1 0.25 0.875 0.4423828 0.059570312 0 2 3.125 -0 -0 -1 0 1 0.4404297 0.06347656 0.5 1.75 3.875 1 -0 0 1.9375 -0.8750001 0.42871094 0.21386719 0.5 1.75 3.125 1 -0 0 1.5625 -0.8750001 0.4345703 0.21386719 0.5 2 3.125 1 -0 0 1.5625 -1.0000002 0.4345703 0.21191406 0.5 2 3.875 1 -0 0 1.9375 -1.0000002 0.42871094 0.21191406 1 2 3.125 -0 -1 0 0.5 -1.5625 0.2783203 0.38378906 0.5 2 3.875 -0 -1 0 0.25 -1.9375 0.27246094 0.3798828 0.5 2 3.125 -0 -1 0 0.25 -1.5625 0.2783203 0.3798828 1 2 3.875 -0 -1 0 0.5 -1.9375 0.27246094 0.38378906 3.875 1.75 3.875 -0 -0 -1 0.96875 0.4375 0.18261719 0.22363281 0.5 1.75 3.875 -0 -0 -1 0.125 0.4375 0.18261719 0.19628906 0.5 2 3.875 -0 -0 -1 0.125 0.5 0.18066406 0.19628906 3.875 2 3.875 -0 -0 -1 0.96875 0.5 0.18066406 0.22363281 0.5 2 3.875 -1 -0 0 -1.9375 1 0.4248047 0.059570312 0.5 2.25 3.125 -1 -0 0 -1.5625 1.125 0.43066406 0.061523438 0.5 2 3.125 -1 -0 0 -1.5625 1 0.43066406 0.059570312 0.5 2.25 3.875 -1 -0 0 -1.9375 1.125 0.4248047 0.061523438 0.5 2 3.125 -0 -0 -1 0.25 1 0.42285156 0.44433594 1 2.25 3.125 -0 -0 -1 0.5 1.125 0.42089844 0.4404297 1 2 3.125 -0 -0 -1 0.5 1 0.42285156 0.4404297 0.5 2.25 3.125 -0 -0 -1 0.25 1.125 0.42089844 0.44433594 1 2 3.875 1 -0 0 1.9375 -1.0000002 0.17089844 0.4267578 1 2 3.125 1 -0 0 1.5625 -1.0000002 0.17089844 0.4326172 1 2.25 3.125 1 -0 0 1.5625 -1.1250002 0.16894531 0.4326172 1 2.25 3.875 1 -0 0 1.9375 -1.1250002 0.16894531 0.4267578 1 2.25 3.125 -0 1 0 -0.49999988 1.5625 0.23339844 0.42089844 0.5 2.25 3.875 -0 1 0 -0.24999982 1.9375 0.22753906 0.4169922 1 2.25 3.875 -0 1 0 -0.49999982 1.9375 0.22753906 0.42089844 0.5 2.25 3.125 -0 1 0 -0.24999985 1.5625 0.23339844 0.4169922 3.875 2 3.875 -0 -0 -1 0.96875 0.5 0.33496094 0.3095703 1 2 3.875 -0 -0 -1 0.25 0.5 0.31152344 0.3095703 1 2.25 3.875 -0 -0 -1 0.25 0.5625 0.31152344 0.3076172 3.875 2.25 3.875 -0 -0 -1 0.96875 0.5625 0.33496094 0.3076172 0.5 2 3.875 -0 -0 -1 0.125 0.5 0.29785156 0.44433594 0 2.25 3.875 -0 -0 -1 0 0.5625 0.2939453 0.4423828 0.5 2.25 3.875 -0 -0 -1 0.125 0.5625 0.29785156 0.4423828 0 2 3.875 -0 -0 -1 0 0.5 0.2939453 0.44433594 0.5 2 3.125 -0 1 0 -0.24999985 1.5625 0.4169922 0.12011719 0 2 3.875 -0 1 0 1.6938164e-07 1.9375 0.41308594 0.11425781 0.5 2 3.875 -0 1 0 -0.24999982 1.9375 0.4169922 0.11425781 0 2 3.125 -0 1 0 1.3659809e-07 1.5625 0.41308594 0.12011719 0 1.75 3.125 -0 1 0 1.3659809e-07 1.5625 0.4169922 0.4189453 -0.5 1.75 3.875 -0 1 0 0.25000018 1.9375 0.4111328 0.41503906 0 1.75 3.875 -0 1 0 1.6938164e-07 1.9375 0.4111328 0.4189453 -0.5 1.75 3.125 -0 1 0 0.25000012 1.5625 0.4169922 0.41503906 0 1.75 3.875 -0 -0 -1 0 0.4375 0.4326172 0.3017578 -0.5 1.75 3.875 -0 -0 -1 -0.125 0.4375 0.4326172 0.29785156 -0.5 2.25 3.875 -0 -0 -1 -0.125 0.5625 0.42871094 0.29785156 0 2.25 3.875 -0 -0 -1 0 0.5625 0.42871094 0.3017578 -0.5 1.5 3.125 -0 1 0 0.25000012 1.5625 0.09863281 0.4189453 -1 1.5 3.875 -0 1 0 0.5000001 1.9375 0.09277344 0.41503906 -0.5 1.5 3.875 -0 1 0 0.25000018 1.9375 0.09277344 0.4189453 -1 1.5 3.125 -0 1 0 0.5000001 1.5625 0.09863281 0.41503906 -0.5 1.5 3.875 -0 -0 -1 -0.125 0.375 0.17480469 0.4169922 -1 1.5 3.875 -0 -0 -1 -0.25 0.375 0.17480469 0.41308594 -1 2.25 3.875 -0 -0 -1 -0.25 0.5625 0.16894531 0.41308594 -0.5 2.25 3.875 -0 -0 -1 -0.125 0.5625 0.16894531 0.4169922 -1 1.25 3.125 -0 1 0 0.5000001 1.5625 0.4169922 0.032226562 -1.5 1.25 3.875 -0 1 0 0.7500001 1.9375 0.41308594 0.026367188 -1 1.25 3.875 -0 1 0 0.5000001 1.9375 0.4169922 0.026367188 -1.5 1.25 3.125 -0 1 0 0.7500001 1.5625 0.41308594 0.032226562 -1 1.25 3.875 -0 -0 -1 -0.25 0.3125 0.049804688 0.41308594 -1.5 1.25 3.875 -0 -0 -1 -0.375 0.3125 0.049804688 0.4091797 -1.5 2.25 3.875 -0 -0 -1 -0.375 0.5625 0.041992188 0.4091797 -1 2.25 3.875 -0 -0 -1 -0.25 0.5625 0.041992188 0.41308594 -1.5 1 3.125 -0 1 0 0.7500001 1.5625 0.0068359375 0.41503906 -2 1 3.875 -0 1 0 1.0000002 1.9375 0.0009765625 0.4111328 -1.5 1 3.875 -0 1 0 0.7500001 1.9375 0.0009765625 0.41503906 -2 1 3.125 -0 1 0 1.0000002 1.5625 0.0068359375 0.4111328 -1.5 1 3.875 -0 -0 -1 -0.375 0.25 0.31152344 0.4111328 -2 1 3.875 -0 -0 -1 -0.5 0.25 0.3076172 0.4111328 -2 2.25 3.875 -0 -0 -1 -0.5 0.5625 0.3076172 0.4013672 -1.5 2.25 3.875 -0 -0 -1 -0.375 0.5625 0.31152344 0.4013672 -2 0.75 3.125 -0 1 0 1.0000002 1.5625 0.26660156 0.4169922 -2.5 0.75 3.875 -0 1 0 1.2500002 1.9375 0.2626953 0.4111328 -2 0.75 3.875 -0 1 0 1.0000002 1.9375 0.26660156 0.4111328 -2.5 0.75 3.125 -0 1 0 1.2500002 1.5625 0.2626953 0.4169922 -2 0.75 3.875 -0 -0 -1 -0.5 0.1875 0.061523438 0.34472656 -2.5 0.75 3.875 -0 -0 -1 -0.625 0.1875 0.061523438 0.3408203 -2.5 2.25 3.875 -0 -0 -1 -0.625 0.5625 0.049804688 0.3408203 -2 2.25 3.875 -0 -0 -1 -0.5 0.5625 0.049804688 0.34472656 -2.5 0.5 3.125 -0 1 0 1.2500002 1.5625 0.19042969 0.41503906 -3 0.5 3.875 -0 1 0 1.5000002 1.9374998 0.18457031 0.4111328 -2.5 0.5 3.875 -0 1 0 1.2500002 1.9375 0.18457031 0.41503906 -3 0.5 3.125 -0 1 0 1.5000002 1.5624998 0.19042969 0.4111328 -2.5 0.5 3.875 -0 -0 -1 -0.625 0.125 0.11035156 0.40527344 -3 0.5 3.875 -0 -0 -1 -0.75 0.125 0.11035156 0.4013672 -3 2.25 3.875 -0 -0 -1 -0.75 0.5625 0.09667969 0.4013672 -2.5 2.25 3.875 -0 -0 -1 -0.625 0.5625 0.09667969 0.40527344 -3 0.25 3.875 -1 -0 0 -1.9375 0.125 0.43066406 0.020507812 -3 0.5 3.875 -1 -0 0 -1.9375 0.25 0.4326172 0.020507812 -3 0.5 3.125 -1 -0 0 -1.5625 0.25 0.4326172 0.026367188 -3 0.25 3.125 -1 -0 0 -1.5625 0.125 0.43066406 0.026367188 -4 0.25 4 -1 -0 0 -1 0.0625 0.36035156 0.3544922 -4 2.5 1.5 -1 -0 0 -0.375 0.625 0.3779297 0.37402344 -4 0.25 1.5 -1 -0 0 -0.375 0.0625 0.36035156 0.37402344 -4 2.5 4 -1 -0 0 -1 0.625 0.3779297 0.3544922 -3.875 0.25 4 -0 -0 1 0.96875 -0.06250009 0.17285156 0.24316406 -4 2.5 4 -0 -0 1 1 -0.6250001 0.15527344 0.24121094 -4 0.25 4 -0 -0 1 1 -0.06250009 0.17285156 0.24121094 -3.875 2.5 4 -0 -0 1 0.96875 -0.6250001 0.15527344 0.24316406 -4 2.5 4 -0 1 0 1 0.9999999 0.36035156 0.18457031 -3.875 2.5 4 -0 1 0 0.9687501 0.9999999 0.3623047 0.18457031 -3.875 2.5 -2 -0 1 0 0.96875 -0.5000001 0.3623047 0.23144531 -4 2.5 -2 -0 1 0 1 -0.5000001 0.36035156 0.23144531 -3.875 2.5 -2 -0 -0 1 0.96875 -0.6250001 0.12402344 0.4091797 -4 3.7500005 -2 -0 -0 1 0.9999999 -0.93750024 0.12207031 0.39746094 -4 2.5 -2 -0 -0 1 1 -0.6250001 0.12207031 0.4091797 -3.875 3.7500005 -2 -0 -0 1 0.9687499 -0.93750024 0.12402344 0.39746094 -4 2.5 -2 -1 -0 0 0.5 0.625 0.39941406 0.10449219 -4 3.7500005 -2 -1 -0 0 0.5 0.9375001 0.3876953 0.10449219 -4 2.5 -3.6666675 -1 -0 0 0.91666687 0.625 0.39941406 0.09082031 -3.875 2.5 -2 1 -0 0 -0.5 -0.625 0.39746094 0.20214844 -3.875 2.5 -3.6666675 1 -0 0 -0.91666687 -0.6249999 0.39746094 0.21582031 -3.875 3.7500005 -2 1 -0 0 -0.5000001 -0.9375001 0.3857422 0.20214844 -4 0.25 1.5 -1 -0 0 -0.375 0.0625 0.09667969 0.24316406 -4 1.375 -4 -1 -0 0 1 0.34375 0.13964844 0.25195312 -4 0.25 0.50000024 -1 -0 0 -0.12500006 0.0625 0.10449219 0.24316406 -4 2.25 -4 -1 -0 0 1 0.5625 0.13964844 0.25878906 -4 2.25 -4.125 -1 -0 0 1.03125 0.5625 0.140625 0.25878906 -4 1.4062501 -4.125 -1 -0 0 1.03125 0.35156253 0.140625 0.25219727 -4 2.25 -7.375 -1 -0 0 1.84375 0.5625 0.16601562 0.25878906 -4 2.21875 -7.375 -1 -0 0 1.84375 0.5546875 0.16601562 0.25854492 -4 2.25 -7.5 -1 -0 0 1.875 0.5625 0.16699219 0.25878906 -4 2.25 1.5 -1 -0 0 -0.375 0.5625 0.09667969 0.25878906 -3.875 2.5 -4 -0 1 0 0.9687499 -1 0.043945312 0.43847656 -4 2.5 -4 -0 1 0 0.9999999 -1 0.041992188 0.43847656 -4 2.5 -3.6666675 -0 1 0 0.9999999 -0.916667 0.041992188 0.4345703 -3.875 2.5 -3.6666675 -0 1 0 0.9687499 -0.916667 0.043945312 0.4345703 -3.875 2.25 4 1 -0 0 1 -0.5625001 0.19042969 0.3330078 -3.875 2.5 -4 1 -0 0 -1 -0.6249999 0.2529297 0.33496094 -3.875 2.5 4 1 -0 0 1 -0.6250001 0.19042969 0.33496094 -3.875 2.25 -4 1 -0 0 -1 -0.5624999 0.2529297 0.3330078 -3.875 1.25 1.1920929e-07 1 -0 0 2.4827038e-09 -0.3125 0.24707031 0.3623047 -3.875 2.25 -4 1 -0 0 -1 -0.5624999 0.2783203 0.3701172 -3.875 2.25 -1.75 1 -0 0 -0.43750006 -0.5625 0.2607422 0.3701172 -3.875 1.25 -4 1 -0 0 -1 -0.31249994 0.2783203 0.3623047 -3.25 1.25 -4 -0 -0 1 0.8125 -0.31250006 0.32910156 0.23925781 -3.875 2.25 -4 -0 -0 1 0.96875 -0.5625001 0.32128906 0.23339844 -3.875 1.25 -4 -0 -0 1 0.96875 -0.31250006 0.32910156 0.23339844 -3.25 2.25 -4 -0 -0 1 0.8125 -0.5625001 0.32128906 0.23925781 3.875 1.25 3.875 -1 -0 0 -0.96875 0.3125 0.36035156 0.0029296875 3.875 2.25 0.99999905 -1 -0 0 -0.24999976 0.5625 0.38378906 0.0107421875 3.875 1.25 0.99999905 -1 -0 0 -0.24999976 0.3125 0.38378906 0.0029296875 3.875 2.25 3.875 -1 -0 0 -0.96875 0.5625 0.36035156 0.0107421875 3.875 1.25 0.99999905 -1 -0 0 -0.24999976 0.3125 0.2763672 0.4091797 3.875 1.75 -0 -1 -0 0 0 0.4375 0.2841797 0.41308594 3.875 1.25 -0 -1 -0 0 0 0.3125 0.2841797 0.4091797 3.875 1.75 0.99999905 -1 -0 0 -0.24999976 0.4375 0.2763672 0.41308594 3.875 2 -0 -1 -0 0 0 0.5 0.15527344 0.41308594 3.875 2 0.99999905 -1 -0 0 -0.24999976 0.5 0.14746094 0.41308594 3.875 2.25 0.99999905 -1 -0 0 -0.24999976 0.5625 0.14746094 0.4111328 3.875 2.25 -0 -1 -0 0 0 0.5625 0.15527344 0.4111328 3.875 2 -0 -0 0 1 1.9375 1 0.4326172 0.24902344 3.875 2.25 -0 -0 0 1 1.9375 1.125 0.43066406 0.24902344 3.125 2.25 -0 -0 0 1 1.5625 1.125 0.43066406 0.24316406 3.125 2 -0 -0 0 1 1.5625 1 0.4326172 0.24316406 3.875 2.25 -0.25 -0 1 0 -1.9375 -0.124999836 0.4326172 0.17675781 3.125 2.25 -0 -0 1 0 -1.5625 1.3659809e-07 0.43066406 0.17089844 3.875 2.25 -0 -0 1 0 -1.9375 1.6938164e-07 0.43066406 0.17675781 3.125 2.25 -0.25 -0 1 0 -1.5625 -0.124999866 0.4326172 0.17089844 3.125 2 -0 -1 -0 0 -8.742278e-08 -1 0.043945312 0.4482422 3.125 2.25 -0 -1 -0 0 -9.8350625e-08 -1.125 0.043945312 0.4501953 3.125 2.25 -0.25 -1 -0 0 -0.12500009 -1.125 0.045898438 0.4501953 3.125 2 -0.25 -1 -0 0 -0.12500009 -1 0.045898438 0.4482422 3.875 2 -0.25 -0 -1 -0 1.9375 0.125 0.12011719 0.4326172 3.875 2 -0 -0 -1 -0 1.9375 0 0.12011719 0.43066406 3.125 2 -0 -0 -1 -0 1.5625 0 0.11425781 0.43066406 3.125 2 -0.25 -0 -1 -0 1.5625 0.125 0.11425781 0.4326172 3.125 1.75 -0 -0 -0 -1 -1.5625 -0.8749999 0.4326172 0.4111328 3.125 2 -0 -0 -0 -1 -1.5625 -0.9999999 0.4326172 0.4091797 3.875 2 -0 -0 -0 -1 -1.9375 -0.9999999 0.4267578 0.4091797 3.875 1.75 -0 -0 -0 -1 -1.9375 -0.8749999 0.4267578 0.4111328 3.125 2 -0.25 -0 -0 -1 -1.5625 -0.9999999 0.4326172 0.12011719 3.875 2.25 -0.25 -0 -0 -1 -1.9375 -1.1249998 0.4267578 0.11816406 3.875 2 -0.25 -0 -0 -1 -1.9375 -0.9999999 0.4267578 0.12011719 3.125 2.25 -0.25 -0 -0 -1 -1.5625 -1.1249998 0.4326172 0.11816406 3.875 2 -4 -1 -0 0 1 0.5 0.39746094 0.36621094 3.875 2 -0.25 -1 -0 0 0.0625 0.5 0.39746094 0.33691406 3.875 2.25 -0.25 -1 -0 0 0.0625 0.5625 0.3955078 0.33691406 3.875 2.25 -4 -1 -0 0 1 0.5625 0.3955078 0.36621094 3.875 2.25 -0.5 -0 -1 -0 1.9375 0.25 0.29003906 0.4326172 3.875 2.25 -0.25 -0 -1 -0 1.9375 0.125 0.29003906 0.43066406 3.125 2.25 -0.25 -0 -1 -0 1.5625 0.125 0.2841797 0.43066406 3.125 2.25 -0.5 -0 -1 -0 1.5625 0.25 0.2841797 0.4326172 3.875 2.25 -0.25 1 -0 0 0.125 1.125 0.4482422 0.14941406 3.875 2.25 -0.5 1 -0 0 0.25 1.125 0.4501953 0.14941406 3.875 2.5 -0.5 1 -0 0 0.25 1.25 0.4501953 0.14746094 3.875 2.5 -0.25 1 -0 0 0.125 1.25 0.4482422 0.14746094 3.875 2.25 -0.25 -0 0 1 1.9375 1.125 0.43066406 0.3798828 3.125 2.5 -0.25 -0 0 1 1.5625 1.25 0.42871094 0.37402344 3.125 2.25 -0.25 -0 0 1 1.5625 1.125 0.43066406 0.37402344 3.875 2.5 -0.25 -0 0 1 1.9375 1.25 0.42871094 0.3798828 3.125 2.25 -0.25 -1 -0 0 -0.12500009 -1.125 0.0048828125 0.4482422 3.125 2.5 -0.5 -1 -0 0 -0.25000012 -1.25 0.0068359375 0.4501953 3.125 2.25 -0.5 -1 -0 0 -0.25000012 -1.125 0.0068359375 0.4482422 3.125 2.5 -0.25 -1 -0 0 -0.12500012 -1.25 0.0048828125 0.4501953 3.125 2.25 -0.5 -0 -0 -1 -1.5625 -1.1249998 0.4326172 0.0048828125 3.875 2.5 -0.5 -0 -0 -1 -1.9375 -1.2499998 0.4267578 0.0029296875 3.875 2.25 -0.5 -0 -0 -1 -1.9375 -1.1249998 0.4267578 0.0048828125 3.125 2.5 -0.5 -0 -0 -1 -1.5625 -1.2499998 0.4326172 0.0029296875 3.875 2.5 -0.75 -0 -1 -0 1.9375 0.375 0.27246094 0.42871094 3.875 2.5 -0.5 -0 -1 -0 1.9375 0.25 0.27246094 0.4267578 3.125 2.5 -0.5 -0 -1 -0 1.5625 0.25 0.26660156 0.4267578 3.125 2.5 -0.75 -0 -1 -0 1.5625 0.375 0.26660156 0.42871094 3.875 2.5 -0.5 1 -0 0 0.25 1.25 0.2998047 0.22949219 3.875 2.5 -0.75 1 -0 0 0.375 1.25 0.3017578 0.22949219 3.875 2.75 -0.75 1 -0 0 0.375 1.375 0.3017578 0.22753906 3.875 2.75 -0.5 1 -0 0 0.25 1.375 0.2998047 0.22753906 3.875 2.5 -0.5 -0 0 1 1.9375 1.25 0.07910156 0.4267578 3.125 2.75 -0.5 -0 0 1 1.5625 1.375 0.07324219 0.4248047 3.125 2.5 -0.5 -0 0 1 1.5625 1.25 0.07324219 0.4267578 3.875 2.75 -0.5 -0 0 1 1.9375 1.375 0.07910156 0.4248047 3.125 2.5 -0.5 -1 -0 0 -0.25000012 -1.25 0.4482422 0.3466797 3.125 2.75 -0.75 -1 -0 0 -0.37500012 -1.375 0.4501953 0.3486328 3.125 2.5 -0.75 -1 -0 0 -0.37500012 -1.25 0.4482422 0.3486328 3.125 2.75 -0.5 -1 -0 0 -0.25000012 -1.375 0.4501953 0.3466797 3.125 2.5 -0.75 -0 -0 -1 -1.5625 -1.2499998 0.3154297 0.4267578 3.875 2.75 -0.75 -0 -0 -1 -1.9375002 -1.3749998 0.3095703 0.4248047 3.875 2.5 -0.75 -0 -0 -1 -1.9375 -1.2499998 0.3095703 0.4267578 3.125 2.75 -0.75 -0 -0 -1 -1.5625002 -1.3749998 0.3154297 0.4248047 3.875 2.75 -1 -0 -1 -0 1.9375 0.5 0.42871094 0.2861328 3.875 2.75 -0.75 -0 -1 -0 1.9375 0.375 0.4267578 0.2861328 3.125 2.75 -0.75 -0 -1 -0 1.5625 0.375 0.4267578 0.28027344 3.125 2.75 -1 -0 -1 -0 1.5625 0.5 0.42871094 0.28027344 3.875 2.75 -0.75 1 -0 0 0.375 1.375 0.4482422 0.4091797 3.875 2.75 -1 1 -0 0 0.5 1.375 0.4482422 0.4111328 3.875 3 -1 1 -0 0 0.5 1.5 0.44628906 0.4111328 3.875 3 -0.75 1 -0 0 0.375 1.5 0.44628906 0.4091797 3.875 2.75 -0.75 -0 0 1 1.9375 1.375 0.4267578 0.15722656 3.125 3 -0.75 -0 0 1 1.5625 1.5 0.4248047 0.15136719 3.125 2.75 -0.75 -0 0 1 1.5625 1.375 0.4267578 0.15136719 3.875 3 -0.75 -0 0 1 1.9375 1.5 0.4248047 0.15722656 3.125 2.75 -0.75 -1 -0 0 -0.37500012 -1.375 0.4482422 0.39746094 3.125 3 -1 -1 -0 0 -0.5000001 -1.5 0.4501953 0.39941406 3.125 2.75 -1 -1 -0 0 -0.5000001 -1.375 0.4501953 0.39746094 3.125 3 -0.75 -1 -0 0 -0.37500012 -1.5 0.4482422 0.39941406 3.125 2.75 -1 -0 -0 -1 -1.5625002 -1.3749998 0.42871094 0.26660156 3.875 3 -1 -0 -0 -1 -1.9375002 -1.4999998 0.4267578 0.2607422 3.875 2.75 -1 -0 -0 -1 -1.9375002 -1.3749998 0.42871094 0.2607422 3.125 3 -1 -0 -0 -1 -1.5625002 -1.4999998 0.4267578 0.26660156 3.875 3 -1.25 -0 -1 -0 1.9375 0.625 0.42871094 0.32128906 3.875 3 -1 -0 -1 -0 1.9375 0.5 0.4267578 0.32128906 3.125 3 -1 -0 -1 -0 1.5625 0.5 0.4267578 0.3154297 3.125 3 -1.25 -0 -1 -0 1.5625 0.625 0.42871094 0.3154297 3.875 3 -1 1 -0 0 0.5 1.5 0.08496094 0.4482422 3.875 3 -1.25 1 -0 0 0.625 1.5 0.08496094 0.4501953 3.875 3.25 -1.25 1 -0 0 0.625 1.625 0.08300781 0.4501953 3.875 3.25 -1 1 -0 0 0.5 1.625 0.08300781 0.4482422 3.875 3 -1 -0 0 1 1.9375 1.5 0.42871094 0.22949219 3.125 3.25 -1 -0 0 1 1.5625 1.625 0.4267578 0.22363281 3.125 3 -1 -0 0 1 1.5625 1.5 0.42871094 0.22363281 3.875 3.25 -1 -0 0 1 1.9375 1.625 0.4267578 0.22949219 3.125 3 -1 -1 -0 0 -0.5000001 -1.5 0.3095703 0.4482422 3.125 3.25 -1.25 -1 -0 0 -0.6250001 -1.625 0.31152344 0.4501953 3.125 3 -1.25 -1 -0 0 -0.6250001 -1.5 0.31152344 0.4482422 3.125 3.25 -1 -1 -0 0 -0.5000001 -1.625 0.3095703 0.4501953 3.125 3 -1.25 -0 -0 -1 -1.5625002 -1.4999998 0.42871094 0.4267578 3.875 3.25 -1.25 -0 -0 -1 -1.9375002 -1.6249998 0.4267578 0.42089844 3.875 3 -1.25 -0 -0 -1 -1.9375002 -1.4999998 0.42871094 0.42089844 3.125 3.25 -1.25 -0 -0 -1 -1.5625002 -1.6249998 0.4267578 0.4267578 3.875 3.25 -1.5 -0 -1 -0 1.9375 0.75 0.3623047 0.4248047 3.875 3.25 -1.25 -0 -1 -0 1.9375 0.625 0.3623047 0.42285156 3.125 3.25 -1.25 -0 -1 -0 1.5625 0.625 0.3564453 0.42285156 3.125 3.25 -1.5 -0 -1 -0 1.5625 0.75 0.3564453 0.4248047 3.875 3.25 -1.25 1 -0 0 0.625 1.625 0.44628906 0.23925781 3.875 3.25 -1.5 1 -0 0 0.75 1.625 0.44628906 0.24121094 3.875 3.5 -1.5 1 -0 0 0.75 1.75 0.44433594 0.24121094 3.875 3.5 -1.25 1 -0 0 0.625 1.75 0.44433594 0.23925781 3.875 3.25 -1.25 -0 0 1 1.9375 1.625 0.3935547 0.12792969 3.125 3.5 -1.25 -0 0 1 1.5625 1.75 0.3876953 0.12597656 3.125 3.25 -1.25 -0 0 1 1.5625 1.625 0.3876953 0.12792969 3.875 3.5 -1.25 -0 0 1 1.9375 1.75 0.3935547 0.12597656 3.125 3.25 -1.25 -1 -0 0 -0.6250001 -1.625 0.32128906 0.4482422 3.125 3.5 -1.5 -1 -0 0 -0.7500001 -1.75 0.3232422 0.4501953 3.125 3.25 -1.5 -1 -0 0 -0.7500001 -1.625 0.3232422 0.4482422 3.125 3.5 -1.25 -1 -0 0 -0.6250001 -1.75 0.32128906 0.4501953 3.125 3.25 -1.5 -0 -0 -1 -1.5625002 -1.6249998 0.42871094 0.13769531 3.875 3.5 -1.5 -0 -0 -1 -1.9375002 -1.7499998 0.4267578 0.13183594 3.875 3.25 -1.5 -0 -0 -1 -1.9375002 -1.6249998 0.42871094 0.13183594 3.125 3.5 -1.5 -0 -0 -1 -1.5625002 -1.7499998 0.4267578 0.13769531 3.875 3.5 -1.75 -0 -1 -0 1.9375 0.875 0.19042969 0.4267578 3.875 3.5 -1.5 -0 -1 -0 1.9375 0.75 0.19042969 0.4248047 3.125 3.5 -1.5 -0 -1 -0 1.5625 0.75 0.18457031 0.4248047 3.125 3.5 -1.75 -0 -1 -0 1.5625 0.875 0.18457031 0.4267578 3.875 3.5 -1.5 1 -0 0 0.75 1.75 0.25097656 0.4482422 3.875 3.5 -1.75 1 -0 0 0.875 1.75 0.25097656 0.4501953 3.875 3.75 -1.75 1 -0 0 0.875 1.875 0.24902344 0.4501953 3.875 3.75 -1.5 1 -0 0 0.75 1.875 0.24902344 0.4482422 3.875 3.5 -1.5 -0 0 1 1.9375 1.75 0.4267578 0.20214844 3.125 3.75 -1.5 -0 0 1 1.5625 1.875 0.4248047 0.19628906 3.125 3.5 -1.5 -0 0 1 1.5625 1.75 0.4267578 0.19628906 3.875 3.75 -1.5 -0 0 1 1.9375 1.875 0.4248047 0.20214844 3.125 3.5 -1.5 -1 -0 0 -0.7500001 -1.75 0.12792969 0.44433594 3.125 3.75 -1.75 -1 -0 0 -0.8750001 -1.875 0.12988281 0.44628906 3.125 3.5 -1.75 -1 -0 0 -0.8750001 -1.75 0.12792969 0.44628906 3.125 3.75 -1.5 -1 -0 0 -0.7500001 -1.875 0.12988281 0.44433594 3.125 3.5 -1.75 -0 -0 -1 -1.5625002 -1.7499998 0.25097656 0.4248047 3.875 3.75 -1.75 -0 -0 -1 -1.9375002 -1.8749998 0.24511719 0.42285156 3.875 3.5 -1.75 -0 -0 -1 -1.9375002 -1.7499998 0.24511719 0.4248047 3.125 3.75 -1.75 -0 -0 -1 -1.5625002 -1.8749998 0.25097656 0.42285156 3.875 3.75 -2 -0 -1 -0 1.9375 1 0.4267578 0.39746094 3.875 3.75 -1.75 -0 -1 -0 1.9375 0.875 0.4248047 0.39746094 3.125 3.75 -1.75 -0 -1 -0 1.5625 0.875 0.4248047 0.39160156 3.125 3.75 -2 -0 -1 -0 1.5625 1 0.4267578 0.39160156 3.875 3.75 -1.75 1 -0 0 0.875 1.875 0.06933594 0.4482422 3.875 3.75 -2 1 -0 0 1 1.875 0.07128906 0.4482422 3.875 4 -2 1 -0 0 1 2 0.07128906 0.44628906 3.875 4 -1.75 1 -0 0 0.875 2 0.06933594 0.44628906 3.875 3.75 -1.75 -0 0 1 1.9375 1.875 0.4267578 0.35058594 3.125 4 -1.75 -0 0 1 1.5625 2 0.4248047 0.34472656 3.125 3.75 -1.75 -0 0 1 1.5625 1.875 0.4267578 0.34472656 3.875 4 -1.75 -0 0 1 1.9375 2 0.4248047 0.35058594 3.125 3.75 -1.75 -1 -0 0 -0.8750001 -1.875 0.19824219 0.44628906 3.125 4 -2 -1 -0 0 -1.0000002 -2 0.20019531 0.4482422 3.125 3.75 -2 -1 -0 0 -1.0000002 -1.875 0.19824219 0.4482422 3.125 4 -1.75 -1 -0 0 -0.8750001 -2 0.20019531 0.44628906 3.875 4 -2 -0 1 0 -1.9375 -0.9999999 0.4267578 0.07714844 3.125 4 -2 -0 1 0 -1.5625 -0.9999999 0.4267578 0.07128906 3.125 4 -1.75 -0 1 0 -1.5625 -0.8749999 0.4248047 0.07128906 3.875 4 -1.75 -0 1 0 -1.9375 -0.8749999 0.4248047 0.07714844 3.875 3.75 -1.75 -0 1 0 -1.9375 -0.8749999 0.32714844 0.16894531 3.125 3.75 -1.75 -0 1 0 -1.5625 -0.8749999 0.32128906 0.16894531 3.125 3.75 -1.5 -0 1 0 -1.5625 -0.7499999 0.32128906 0.16699219 3.875 3.75 -1.5 -0 1 0 -1.9375 -0.7499999 0.32714844 0.16699219 3.875 3.5 -1.5 -0 1 0 -1.9375 -0.7499999 0.045898438 0.4248047 3.125 3.5 -1.5 -0 1 0 -1.5625 -0.7499999 0.040039062 0.4248047 3.125 3.5 -1.25 -0 1 0 -1.5625 -0.6249999 0.040039062 0.42285156 3.875 3.5 -1.25 -0 1 0 -1.9375 -0.6249999 0.045898438 0.42285156 3.875 3.25 -1.25 -0 1 0 -1.9375 -0.6249999 0.21777344 0.4248047 3.125 3.25 -1.25 -0 1 0 -1.5625 -0.6249999 0.21191406 0.4248047 3.125 3.25 -1 -0 1 0 -1.5625 -0.49999988 0.21191406 0.42285156 3.875 3.25 -1 -0 1 0 -1.9375 -0.49999982 0.21777344 0.42285156 3.875 3 -1 -0 1 0 -1.9375 -0.49999982 0.0068359375 0.4267578 3.125 3 -1 -0 1 0 -1.5625 -0.49999988 0.0009765625 0.4267578 3.125 3 -0.75 -0 1 0 -1.5625 -0.37499988 0.0009765625 0.4248047 3.875 3 -0.75 -0 1 0 -1.9375 -0.37499982 0.0068359375 0.4248047 3.875 2.75 -0.75 -0 1 0 -1.9375 -0.37499982 0.38964844 0.4267578 3.125 2.75 -0.75 -0 1 0 -1.5625 -0.37499988 0.38378906 0.4267578 3.125 2.75 -0.5 -0 1 0 -1.5625 -0.24999985 0.38378906 0.4248047 3.875 2.75 -0.5 -0 1 0 -1.9375 -0.24999982 0.38964844 0.4248047 3.875 2.5 -0.5 -0 1 0 -1.9375 -0.24999982 0.3408203 0.4248047 3.125 2.5 -0.5 -0 1 0 -1.5625 -0.24999985 0.33496094 0.4248047 3.125 2.5 -0.25 -0 1 0 -1.5625 -0.124999866 0.33496094 0.42285156 3.875 2.5 -0.25 -0 1 0 -1.9375 -0.124999836 0.3408203 0.42285156 3.125 1.75 0.25 -1 -0 0 0.124999925 -0.875 0.22949219 0.4482422 3.125 2 -0 -1 -0 0 -8.742278e-08 -1 0.23144531 0.4501953 3.125 1.75 -0 -1 -0 0 -7.649493e-08 -0.875 0.22949219 0.4501953 3.125 2 0.25 -1 -0 0 0.12499991 -1 0.23144531 0.4482422 3.875 2 -0 -0 1 0 -1.9375 1.6938164e-07 0.4169922 0.32714844 3.125 2 -0 -0 1 0 -1.5625 1.3659809e-07 0.4111328 0.32714844 3.125 2 0.25 -0 1 0 -1.5625 0.12500015 0.4111328 0.3251953 3.875 2 1 -0 1 0 -1.9375 0.5000001 0.4169922 0.31933594 3.875 1.75 -0 -0 -1 0 1.9375 0 0.2529297 0.4111328 3.125 1.75 0.25 -0 -1 0 1.5625 -0.125 0.25097656 0.40527344 3.125 1.75 -0 -0 -1 0 1.5625 0 0.2529297 0.40527344 3.875 1.75 1 -0 -1 0 1.9375 -0.5 0.24511719 0.4111328 3.875 1.25 -4 -1 -0 0 1 0.3125 0.049804688 0.37402344 3.875 2 -0 -1 -0 0 0 0.5 0.018554688 0.36816406 3.875 2 -4 -1 -0 0 1 0.5 0.049804688 0.36816406 3.875 1.25 -0 -1 -0 0 0 0.3125 0.018554688 0.37402344 -3.5 0.25 1.7499847 -0 0.8682431 0.49613893 -1.75 -0.9296799 0.39941406 0.016601562 -3.5 1.2499913 -1.19037274e-07 -0 0.8682431 0.49613893 -1.75 -0.05468744 0.39941406 0.034179688 -3.875 1.2499913 -1.1920929e-07 -0 0.8682431 0.49613893 -1.9375 -0.05468744 0.4033203 0.034179688 -3.875 0.25 1.7499847 -0 0.8682431 0.49613893 -1.9375 -0.9296799 0.4033203 0.016601562 -3.5 0.25 1.7499847 1 -0 0 -0.8749924 0.0703125 0.24707031 0.34472656 -3.5 0.25 0.75 1 -0 0 -0.375 0.0703125 0.24707031 0.35253906 -3.5 0.82141984 0.74999994 1 -0 0 -0.37499997 0.35602242 0.2529297 0.35253906 -3.5 1.1071341 0.25 1 -0 0 -0.125 0.49887955 0.44126672 0.37597656 -3.5 1 0.25 1 -0 0 -0.125 0.4453125 0.4404297 0.37597656 -3.5 1 -8.927873e-08 1 -0 0 4.4639364e-08 0.4453125 0.4404297 0.3798828 -3.5 1.2499913 -1.19037274e-07 1 -0 0 5.9518637e-08 0.57030815 0.4423828 0.3798828 -3.84375 1.25 -4 -0 1 -0 -1.921875 1.9453125 0.18457031 0.38736978 -3.875 1.25 -4 -0 1 -0 -1.9375 1.9453125 0.18457031 0.3876953 -3.875 1.25 -0.375 -0 1 0 -1.9375 0.1328125 0.15527344 0.3876953 -3.5 1.25 -0.375 -0 1 -0 -1.75 0.1328125 0.15527344 0.38378906 -3.5 0.25 -0.375 0.995534 -0 -0.09440409 0.1875 0.0703125 0.34277344 0.3720703 -3.84375 1.25 -4 0.995534 -0 -0.09440409 2 0.5703125 0.31347656 0.3642578 -3.5 1.25 -0.375 0.995534 -0 -0.09440409 0.1875 0.5703125 0.34277344 0.3642578 -3.84375 0.25 -4 0.995534 -0 -0.09440409 2 0.0703125 0.31347656 0.3720703 -3.875 0.25 -4.125 -0 1 0 1.9374998 -2.0625 0.24511719 0.23339844 -1.75 0.25 -7.375 -0 1 0 0.87499964 -3.6875 0.22851562 0.25878906 -3.875 0.25 -7.375 -0 1 0 1.9374998 -3.6875 0.24511719 0.25878906 -1.75 0.25 -4.125 -0 1 0 0.87499976 -2.0625 0.22851562 0.23339844 3.875 0.25 -4.125 -0 1 0 -1.9375002 -2.0625 0.18457031 0.23339844 3.875 0.25 -7.375 -0 1 0 -1.9375002 -3.6875 0.18457031 0.25878906 -3.875 0.25 -4.125 1 -0 0 1.0122871 -0.2065368 0.2783203 0.32714844 -3.875 0.25 -7.375 1 -0 0 1.797102 -0.41682732 0.2783203 0.35253906 -3.875 2.25 -7.375 1 -0 0 1.9265114 0.066135585 0.2626953 0.35253906 -3.875 2.25 -4.125 1 -0 0 1.1416967 0.2764261 0.2626953 0.32714844 3.875 0.25 -7.375 -0 -0 1 -0.96875 -0.062499918 0.24316406 0.3095703 -3.875 2.25 -7.375 -0 -0 1 0.96875 -0.5625001 0.18261719 0.2939453 -3.875 0.25 -7.375 -0 -0 1 0.96875 -0.06250009 0.18261719 0.3095703 3.875 2.25 -7.375 -0 -0 1 -0.96875 -0.5624999 0.24316406 0.2939453 -3.875 2.25 -4.125 -0 -1 0 -1.9375 2.0625 0.06738281 0.22167969 -3.875 2.25 -7.375 -0 -1 0 -1.9375 3.6875 0.06738281 0.24707031 -1.75 2.25 -7.375 -0 -1 0 -0.875 3.6875 0.05078125 0.24707031 -1.75 2.25 -4.125 -0 -1 0 -0.875 2.0625 0.05078125 0.22167969 3.875 2.25 -4.125 -0 -1 0 1.9375 2.0625 0.0068359375 0.22167969 3.875 2.25 -7.375 -0 -1 0 1.9375 3.6875 0.0068359375 0.24707031 -3.25 0.25 -4.125 -0 -0 -1 -0.8125 0.0625 0.08300781 0.23730469 -3.875 0.25 -4.125 -0 -0 -1 -0.96875 0.0625 0.07714844 0.23730469 -3.875 2.25 -4.125 -0 -0 -1 -0.96875 0.5625 0.07714844 0.22167969 -3.25 2.25 -4.125 -0 -0 -1 -0.8125 0.5625 0.08300781 0.22167969 -1.75 0.25 -4.125 -0 -0 -1 -0.4375 0.0625 0.33496094 0.33496094 -1.75 2.25 -4.125 -0 -0 -1 -0.4375 0.5625 0.33496094 0.31933594 3.875 2.25 -4.125 -0 -0 -1 0.96875 0.5625 0.29003906 0.31933594 3.875 0.25 -4.125 -0 -0 -1 0.96875 0.0625 0.29003906 0.33496094 3.875 0.25 -4.125 -1 -0 0 1.03125 0.0625 0.20019531 0.34472656 3.875 2.25 -4.125 -1 -0 0 1.03125 0.5625 0.20019531 0.36035156 3.875 2.25 -7.375 -1 -0 0 1.84375 0.5625 0.22558594 0.36035156 3.875 0.25 -7.375 -1 -0 0 1.84375 0.0625 0.22558594 0.34472656 -3.25 0.25 -4.125 -0 1 0 1.6249998 -2.0625 0.41503906 0.0029296875 -1.75 0.25 -4 -0 1 0 0.8749999 -2 0.4033203 0.0009765625 -1.75 0.25 -4.125 -0 1 0 0.87499976 -2.0625 0.4033203 0.0029296875 -3.25 0.25 -4 -0 1 0 1.6249998 -2 0.41503906 0.0009765625 -1.75 0.25 -4 -1 -0 0 1 0.0625 0.16113281 0.39746094 -1.75 2 -4.125 -1 -0 0 1.03125 0.5 0.17480469 0.39941406 -1.75 0.25 -4.125 -1 -0 0 1.03125 0.0625 0.16113281 0.39941406 -1.75 2 -4 -1 -0 0 1 0.5 0.17480469 0.39746094 -1.75 2 -4.125 -0 -1 0 -0.4375 1.03125 0.2548828 0.3173828 -1.75 2 -4 -0 -1 0 -0.4375 1 0.2529297 0.3173828 -3.25 2 -4 -0 -1 0 -0.8125 1 0.2529297 0.30566406 -3.25 2 -4.125 -0 -1 0 -0.8125 1.03125 0.2548828 0.30566406 -1.75 2 -4 -0 -0 1 0.43749994 -0.5 0.35058594 0.0029296875 -3.25 2.25 -4 -0 -0 1 0.8125 -0.5625001 0.3388672 0.0009765625 -3.25 2 -4 -0 -0 1 0.8125 -0.5000001 0.3388672 0.0029296875 -1.75 2.25 -4 -0 -0 1 0.43749994 -0.5625 0.35058594 0.0009765625 -3.25 0.25 -4 1 -0 0 -1 -0.06249991 0.23535156 0.35253906 -3.25 2 -4.125 1 -0 0 -1.03125 -0.49999988 0.23730469 0.36621094 -3.25 2 -4 1 -0 0 -1 -0.49999994 0.23535156 0.36621094 -3.25 0.25 -4.125 1 -0 0 -1.03125 -0.06249991 0.23730469 0.35253906 -3.25 2 -4.125 -0 -0 -1 -0.8125 0.5 0.4169922 0.2705078 -1.75 2.25 -4.125 -0 -0 -1 -0.4375 0.5625 0.41503906 0.25878906 -1.75 2 -4.125 -0 -0 -1 -0.4375 0.5 0.4169922 0.25878906 -3.25 2.25 -4.125 -0 -0 -1 -0.8125 0.5625 0.41503906 0.2705078 3 0.25 -4 -0 -0 1 -0.75 -0.062499933 0.35253906 0.17089844 3 2.25 -4 -0 -0 1 -0.75 -0.5624999 0.33691406 0.17089844 -1.75 2.25 -4 -0 -0 1 0.43749994 -0.5625 0.33691406 0.13378906 -1.75 0.25 -4 -0 -0 1 0.4375 -0.062500045 0.35253906 0.13378906 -3.25 0.25 -4 -0 -0 1 0.8125 -0.062500075 0.41503906 0.29003906 -3.8437505 1.25 -4 -0 -0 1 0.9609376 -0.31250006 0.4091797 0.28222656 -3.8437505 0.25 -4 -0 -0 1 0.9609376 -0.06250009 0.4091797 0.29003906 -3.25 1.25 -4 -0 -0 1 0.8125 -0.31250006 0.41503906 0.28222656 -4 3.7499695 -2 -1 -0 0 1 1.8749847 0.3232422 0.13769531 -4 2.5 -4 -1 -0 0 2 1.25 0.3232422 0.15722656 -4 2.5 -3.6666265 -1 -0 0 1.8333132 1.25 0.32128906 0.15488543 -4 3.7499695 -2 -1 -0 0 1 1.8749847 0.18574233 0.39941406 -4 4.0000005 -2 -1 -0 0 1 2.0000002 0.18457031 0.4013672 -4 2.5000005 -4 -1 -0 0 2 1.2500002 0.20410156 0.4013672 3.125 3.7499695 -2 0 -0 1 -1.5625002 -1.8749845 0.3251953 0.06347656 -4 4.0000005 -2 0 -0 1 1.9999998 -2.0000002 0.32128906 0.0068359375 -4 3.7499695 -2 0 -0 1 1.9999998 -1.874985 0.3251953 0.0068359375 3.125 4.0000005 -2 0 -0 1 -1.5625002 -2.0000002 0.32128906 0.06347656 4 2.5000005 -4 -0 0.8 -0.6 1.9999998 -2 0.2861328 0.11425781 -4 2.5000005 -4 -0 0.8 -0.6 -2 -1.9999998 0.2861328 0.17675781 -4 4.0000005 -2 -0 0.8 -0.6 -1.9999998 -0.9999999 0.26660156 0.17675781 4 4.0000005 -2 -0 0.8 -0.6 2 -1.0000002 0.26660156 0.11425781 4 3.7499695 -2 1 -0 0 -1.0000002 -1.8749847 0.07714844 0.3024947 4 2.5000005 -4 1 -0 0 -2 -1.25 0.07910156 0.2834428 4 4.0000005 -2 1 -0 0 -1.0000002 -2.0000002 0.07910156 0.30371094 4 2.2499697 -4 1 -0 0 -2 -1.1249846 0.07714844 0.28222656 4 3.7499695 -2 0 -0 1 -2 -1.8749845 0.059570312 0.44433594 4 4.0000005 -2 0 -0 1 -2 -2.0000002 0.055664062 0.44433594 3.875 4.0000005 -2 0 -0 1 -1.9375002 -2.0000002 0.055664062 0.4423828 3.875 3.7499695 -2 0 -0 1 -1.9375002 -1.8749845 0.059570312 0.4423828 3.875 2.2499697 -4 -0 -0.8 0.6 1.9375 2 0.0048828125 0.3310547 -4 2.5 -3.6666265 -0 -0.8 0.6 -2 1.8333132 0.06738281 0.32714844 -4 2.2499697 -4 -0 -0.8 0.6 -2 2 0.06738281 0.3310547 3.875 2.5 -3.6666262 -0 -0.8 0.6 1.9375 1.8333131 0.0048828125 0.32714844 -3.875 2.5 -3.6666265 -0 -0.8 0.6 -1.9375 1.8333132 0.06542969 0.2998047 3.875 2.5 -3.6666262 -0 -0.8 0.6 1.9375 1.8333131 0.0048828125 0.2998047 3.875 3.7499695 -2 -0 -0.8 0.6 1.9375 1 0.0048828125 0.28222656 -3.875 3.7499695 -2 -0 -0.8 0.6 -1.9375 1 0.06542969 0.28222656 -28 0.25 4 -0 1 0 14 1.9999988 0.17089844 0.14550781 -26 0.25 -7.0000005 -0 1 0 13 -3.5000012 0.25683594 0.16113281 -28 0.25 -7 -0 1 0 14 -3.5000014 0.25683594 0.14550781 -26 0.25 4 -0 1 0 13 1.9999988 0.17089844 0.16113281 -24 0.25 -6.499999 -0 1 0 12 -3.2500005 0.09472656 0.18652344 -26 0.25 -6.499999 -0 1 0 13 -3.2500005 0.09472656 0.17089844 -26 0.25 4 -0 1 0 13 1.9999988 0.0126953125 0.17089844 -24 0.25 4 -0 1 0 12 1.999999 0.0126953125 0.18652344 -22 0.25 -6.0000005 -0 1 0 11 -3.0000012 0.25683594 0.18652344 -24 0.25 -6.0000005 -0 1 0 12 -3.0000012 0.25683594 0.17089844 -24 0.25 4 -0 1 0 12 1.999999 0.17871094 0.17089844 -22 0.25 4 -0 1 0 11 1.999999 0.17871094 0.18652344 -22 0.25 -5.5 -1 0 0 2.75 0.125 0.39941406 0.22949219 -22 2.25 -7.5 -1 0 0 3.75 1.125 0.39941406 0.2529297 -22 2.2499995 -7.5 -1 0 0 3.75 1.1249998 0.39941406 0.2529297 -22 0.25 -6 -1 0 0 3 0.125 0.3955078 0.23242188 -22 2.25 -7.5 -0 -0 -1 -11 1.125 0.38183594 0.38378906 -20 2.25 -7.5 -0 -0 -1 -10 1.125 0.39746094 0.38378906 -20 0.25 -7.5 -0 -0 -1 -10 0.125 0.39746094 0.39941406 -22 0.25 -7.5 -0 -0 -1 -11 0.125 0.38183594 0.39941406 -20 0.25 -5.5 -0 1 0 10 -2.750001 0.07519531 0.19628906 -22 0.25 -5.5 -0 1 0 11 -2.750001 0.07519531 0.21191406 -22 0.25 4 -0 1 0 11 1.999999 0.0009765625 0.21191406 -20 0.25 4 -0 1 0 10 1.999999 0.0009765625 0.19628906 -20 0.25 -5.5 -0 0.70710677 0.70710677 -10 -4.0839453 0.27441406 0.016601562 -20 2.25 -7.5 -0 0.70710677 0.70710677 -10 -5.0839453 0.29785156 0.016601562 -22 2.25 -7.5 -0 0.70710677 0.70710677 -11 -5.0839453 0.29785156 0.0009765625 -22 0.25 -5.5 -0 0.70710677 0.70710677 -11 -4.0839453 0.27441406 0.0009765625 -18 0.25 -5 -0 1 0 9 -2.500001 0.16308594 0.23144531 -20 0.25 -5 -0 1 0 10 -2.500001 0.16308594 0.21582031 -20 0.25 4 -0 1 0 10 1.999999 0.09277344 0.21582031 -18 0.25 4 -0 1 0 9 1.9999993 0.09277344 0.23144531 -18 2.2500002 -7.5 -0 -0 -1 -9 1.1250001 0.09667969 0.3720703 -16 2.2500002 -7.5 -0 -0 -1 -8 1.1250001 0.11230469 0.3720703 -16 0.25 -7.5 -0 -0 -1 -8 0.125 0.11230469 0.38964844 -18 0.25 -7.5 -0 -0 -1 -9 0.125 0.09667969 0.38964844 -16 0.25 -4.5 -0 1 0 8 -2.2500005 0.24511719 0.2685547 -18 0.25 -4.5 -0 1 0 9 -2.250001 0.24511719 0.2841797 -18 0.25 4 -0 1 0 9 1.9999993 0.17871094 0.2841797 -16 0.25 4 -0 1 0 8 1.9999993 0.17871094 0.2685547 -16 0.25 -4.5 -0 0.8320503 0.5547002 -8 -2.9776063 0.13183594 0.15917969 -16 2.2500002 -7.5 -0 0.8320503 0.5547002 -8 -4.4776063 0.16113281 0.15917969 -18 2.2500002 -7.5 -0 0.8320503 0.5547002 -9 -4.477606 0.16113281 0.14355469 -18 0.25 -4.5 -0 0.8320503 0.5547002 -9 -2.9776058 0.13183594 0.14355469 -14 0.25 -3.5 -0 1 0 7 -1.7500007 0.31152344 0.29785156 -16 0.25 -3.5 -0 1 0 8 -1.7500007 0.29589844 0.29785156 -16 0.25 4 -0 1 0 8 1.9999993 0.29589844 0.23925781 -14 0.25 4 -0 1 0 7 1.9999993 0.31152344 0.23925781 -12 0.25 -2.5 -0 1 0 6 -1.2500005 0.15917969 0.33496094 -14 0.25 -2.5 -0 1 0 7 -1.2500007 0.15917969 0.31933594 -14 0.25 4 -0 1 0 7 1.9999993 0.10839844 0.31933594 -12 0.25 4 -0 1 0 6 1.9999995 0.10839844 0.33496094 -10 0.25 -1.5 -0 1 0 5 -0.7500005 0.35058594 0.057617188 -12 0.25 -1.5 -0 1 0 6 -0.7500005 0.33496094 0.057617188 -12 0.25 4 -0 1 0 6 1.9999995 0.33496094 0.0146484375 -10 0.25 4 -0 1 0 5 1.9999995 0.35058594 0.0146484375 -8 0.25 -0.5 -0 1 0 4 -0.25000036 0.3642578 0.33691406 -10 0.25 -0.5 -0 1 0 5 -0.25000042 0.3486328 0.33691406 -10 0.25 4 -0 1 0 5 1.9999995 0.3486328 0.3017578 -8 0.25 4 -0 1 0 4 1.9999998 0.3642578 0.3017578 -6 0.25 0.50000095 -0 1 0 3 0.25000024 0.3486328 0.10839844 -8 0.25 0.50000095 -0 1 0 4 0.25000012 0.3486328 0.12402344 -8 0.25 4 -0 1 0 4 1.9999998 0.32128906 0.12402344 -6 0.25 4 -0 1 0 3 1.9999998 0.32128906 0.10839844 -4 0.25 0.50000095 -0 1 0 2 0.2500003 0.3486328 0.09277344 -4 0.25 4 -0 1 0 2 1.9999998 0.32128906 0.09277344 -4 0.25000378 0.4999541 -0 0.97014254 0.24253564 2 0.28029382 0.27246094 0.036132812 -4 2.2499924 -7.4999995 -0 0.97014254 0.24253564 1.9999998 -3.7196827 0.27246094 0.10058594 -6 2.2499924 -7.4999995 -0 0.97014254 0.24253564 2.9999995 -3.7196832 0.28808594 0.10058594 -6 0.2500038 0.49995422 -0 0.97014254 0.24253564 3 0.2802938 0.28808594 0.036132812 -6 2.2499924 -7.4999995 -0 -0 -1 -3 1.1249962 0.3701172 0.39941406 -4 2.2499924 -7.4999995 -0 -0 -1 -2 1.1249962 0.3544922 0.39941406 -4 0.25000367 -7.5 -0 -0 -1 -2 0.12500183 0.3544922 0.38378906 -6 0.2500037 -7.5 -0 -0 -1 -3 0.12500185 0.3701172 0.38378906 -8 0.2500038 0.49995422 -1 -0 0 -0.24997711 0.1250019 0.0087890625 0.3154297 -8 2.2499394 -7.499788 -1 -0 0 3.749894 1.1249697 0.07324219 0.3154297 -8 0.2500038 -0.50001335 -1 -0 0 0.25000668 0.1250019 0.016371781 0.31347656 -6 0.25000378 0.4999541 -0 0.97014254 0.24253564 3 0.28029373 0.2705078 0.19042969 -6 2.2499924 -7.4999995 -0 0.97014254 0.24253564 2.9999995 -3.7196832 0.2705078 0.2548828 -8 2.2499924 -7.4999995 -0 0.97014254 0.24253564 3.9999995 -3.7196832 0.2861328 0.2548828 -8 0.2500038 0.49995422 -0 0.97014254 0.24253564 4 0.2802937 0.2861328 0.19042969 -8 2.2499924 -7.4999995 -0 -0 -1 -4 1.1249962 0.051757812 0.39941406 -6 2.2499924 -7.4999995 -0 -0 -1 -3 1.1249962 0.051757812 0.38378906 -6 0.25000367 -7.5 -0 -0 -1 -3 0.12500183 0.036132812 0.38378906 -8 0.2500037 -7.5 -0 -0 -1 -4 0.12500185 0.036132812 0.39941406 -10 0.25 -0.5 -1 0 0 0.25 0.125 0.18457031 0.3232422 -10 2.25 -7.5 -1 0 0 3.75 1.125 0.24316406 0.3232422 -10 0.25 -1.5000002 -1 0 0 0.7500001 0.125 0.19230911 0.31933594 -8 0.25 -0.50000036 -0 0.9615239 0.27472112 4 -0.28464854 0.29589844 0.12011719 -10 2.25 -7.5 -0 0.9615239 0.27472112 5 -3.7846484 0.31152344 0.17871094 -10 0.25 -0.5 -0 0.9615239 0.27472112 5 -0.28464842 0.31152344 0.12011719 -8 2.25 -7.5 -0 0.9615239 0.27472112 3.9999995 -3.7846484 0.29589844 0.17871094 -10 2.25 -7.5 -0 -0 -1 -5 1.125 0.3779297 0.061523438 -8 2.25 -7.5 -0 -0 -1 -4 1.125 0.3779297 0.07714844 -8 0.25 -7.5 -0 -0 -1 -4 0.125 0.3935547 0.07714844 -10 0.25 -7.5 -0 -0 -1 -5 0.125 0.3935547 0.061523438 -12 2.25 -7.5 -0 -0 -1 -6 1.125 0.32128906 0.38183594 -10 2.25 -7.5 -0 -0 -1 -5 1.125 0.32128906 0.39746094 -10 0.24999994 -7.5 -0 -0 -1 -5 0.12499997 0.33691406 0.39746094 -12 0.25 -7.5 -0 -0 -1 -6 0.125 0.33691406 0.38183594 -10 0.24999994 -1.4999996 -0 0.94868326 0.31622776 5 -0.8712681 0.28027344 0.26464844 -10 2.25 -7.5 -0 0.94868326 0.31622776 5 -3.8712683 0.28027344 0.3154297 -12 2.25 -7.5 -0 0.94868326 0.31622776 6 -3.8712683 0.26464844 0.3154297 -12 0.25 -1.5 -0 0.94868326 0.31622776 6 -0.8712683 0.26464844 0.26464844 -12 0.25 -1.5 -1 0 0 0.75 0.125 0.34472656 0.18457031 -12 2.25 -7.5 -1 0 0 3.75 1.125 0.34472656 0.23535156 -12 0.25 -2.5 -1 0 0 1.25 0.125 0.3408203 0.1921875 -14 2.2500122 -7.5 -0 -0 -1 -7 1.1250061 0.12207031 0.3857422 -12 2.2500122 -7.5 -0 -0 -1 -6 1.1250061 0.12207031 0.3701172 -12 0.25000006 -7.5 -0 -0 -1 -6 0.12500003 0.13964844 0.3701172 -14 0.25 -7.5 -0 -0 -1 -7 0.125 0.13964844 0.3857422 -12 0.25000006 -2.4999695 -0 0.9284767 0.37139067 6 -1.4925218 0.33691406 0.24902344 -12 2.2500122 -7.5 -0 0.9284767 0.37139067 6 -3.992537 0.33691406 0.2919922 -14 2.2500122 -7.5 -0 0.9284767 0.37139067 7 -3.992537 0.32128906 0.2919922 -14 0.25 -2.4999695 -0 0.9284767 0.37139067 7 -1.492522 0.32128906 0.24902344 -14 0.25 -2.4999695 -1 0 0 1.2499847 0.125 0.3642578 0.020507812 -14 2.2500122 -7.5 -1 0 0 3.75 1.1250061 0.3642578 0.06347656 -14 2.25 -7.5 -1 0 0 3.75 1.125 0.3642577 0.06347653 -14 0.25 -3.4999998 -1 0 0 1.7499999 0.125 0.36035156 0.027916394 -16 0.25 -3.5000305 -1 0 0 1.7500153 0.125 0.15136719 0.3564453 -16 2.2499402 -7.499911 -1 0 0 3.7499554 1.1249701 0.18652344 0.3564453 -16 0.25 -4.5000005 -1 0 0 2.2500002 0.125 0.15839843 0.35253906 -14 0.24999994 -3.5000305 -0 0.8944272 0.4472136 7 -2.1744533 0.3466797 0.25097656 -14 2.2499847 -7.5 -0 0.8944272 0.4472136 7 -4.1744375 0.3466797 0.2861328 -16 2.2499847 -7.5 -0 0.8944272 0.4472136 8 -4.1744375 0.3623047 0.2861328 -16 0.25 -3.5000305 -0 0.8944272 0.4472136 8 -2.1744533 0.3623047 0.25097656 -16 2.2499847 -7.5 -0 -0 -1 -8 1.1249924 0.24707031 0.3798828 -14 2.2499847 -7.5 -0 -0 -1 -7 1.1249924 0.2626953 0.3798828 -14 0.24999994 -7.5 -0 -0 -1 -7 0.12499997 0.2626953 0.3955078 -16 0.25 -7.5 -0 -0 -1 -8 0.125 0.24707031 0.3955078 -18 0.25 -4.5 -1 0 0 2.25 0.125 0.3779297 0.09082031 -18 2.2499995 -7.5 -1 0 0 3.75 1.1249998 0.3779297 0.12011719 -18 0.25 -5.0000005 -1 0 0 2.5000002 0.125 0.37402344 0.09420072 -20 0.25001526 -5.0000305 -1 0 0 2.5000153 0.12500763 0.27246094 0.39941406 -20 2.249955 -7.499955 -1 0 0 3.7499776 1.1249775 0.29785156 0.39941406 -20 0.25001523 -5.5000153 -1 0 0 2.7500076 0.12500761 0.27555734 0.3955078 -18 0.25001514 -5.0000305 -0 0.7808688 0.62469506 -9 -3.4701576 0.11621094 0.34472656 -18 2.249991 -7.5 -0 0.7808688 0.62469506 -9 -4.7201424 0.14160156 0.34472656 -20 2.249991 -7.5 -0 0.7808688 0.62469506 -10 -4.7201424 0.14160156 0.36035156 -20 0.25001526 -5.0000305 -0 0.7808688 0.62469506 -10 -3.4701576 0.11621094 0.36035156 -20 2.249991 -7.5 -0 -0 -1 -10 1.1249955 0.37402344 0.026367188 -18 2.249991 -7.5 -0 -0 -1 -9 1.1249955 0.38964844 0.026367188 -18 0.250015 -7.5 -0 -0 -1 -9 0.1250075 0.38964844 0.041992188 -20 0.2500151 -7.5 -0 -0 -1 -10 0.12500755 0.37402344 0.041992188 -24 0.25 -6.0000153 -1 0 0 3.0000076 0.125 0.17285156 0.2998047 -24 2.249936 -7.4999676 -1 0 0 3.7499838 1.124968 0.17285156 0.31933594 -24 0.25 -6.4999995 -1 0 0 3.2499998 0.125 0.16894531 0.30214843 -22 0.25 -6.0000153 -0 0.6 0.8 -11 2.8208485 0.07714844 0.3251953 -22 2.2499795 -7.5 -0 0.6 0.8 -11 2.070856 0.09667969 0.3251953 -24 2.2499795 -7.5 -0 0.6 0.8 -12 2.070856 0.09667969 0.3408203 -24 0.25 -6.0000153 -0 0.6 0.8 -12 2.8208485 0.07714844 0.3408203 -24 2.2499795 -7.5 -0 -0 -1 -12 1.1249897 0.3720703 0.2607422 -22 2.2499795 -7.5 -0 -0 -1 -11 1.1249897 0.3720703 0.2763672 -22 0.25 -7.5 -0 -0 -1 -11 0.125 0.3876953 0.2763672 -24 0.25 -7.5 -0 -0 -1 -12 0.125 0.3876953 0.2607422 -26 0.25 -6.5 -1 0 0 3.25 0.125 0.13378906 0.4013672 -26 2.2499979 -7.5 -1 0 0 3.75 1.1249989 0.15136719 0.4013672 -26 0.25 -7.0000005 -1 0 0 3.5000002 0.125 0.13554688 0.39746094 -24 0.25 -6.5 -0 0.4472136 0.8944272 12 2.3338885 0.018554688 0.14355469 -24 2.2499998 -7.5 -0 0.4472136 0.8944272 12 1.3338886 0.0009765662 0.14355469 -26 2.25 -7.5 -0 0.4472136 0.8944272 13 1.3338883 0.0009765625 0.15917969 -26 0.25 -6.5 -0 0.4472136 0.8944272 13 2.3338883 0.018554688 0.15917969 -26 2.25 -7.5 -0 -0 -1 -13 1.125 0.28808594 0.36816406 -24 2.2499998 -7.5 -0 -0 -1 -12 1.1249999 0.28808594 0.38378906 -24 0.25 -7.5 -0 -0 -1 -12 0.125 0.30371094 0.38378906 -26 0.25 -7.5 -0 -0 -1 -13 0.125 0.30371094 0.36816406 -28 0.25 -7.0000076 -1 0 0 3.5000038 0.125 0.4013672 0.3232422 -28 2.2499692 -7.5 -1 0 0 3.75 1.1249846 0.3857422 0.32714844 -28 0.25 -7.5 -1 0 0 3.75 0.125 0.4013672 0.32714844 -26 0.25 -7.0000076 -0 0.24253564 0.97014254 13 2.4551558 0.08691406 0.36816406 -28 2.2499692 -7.5 -0 0.24253564 0.97014254 14 1.4551712 0.06933594 0.38378906 -28 0.25 -7.0000076 -0 0.24253564 0.97014254 14 2.4551558 0.08691406 0.38378906 -26 2.249969 -7.5 -0 0.24253564 0.97014254 13 1.4551713 0.069335945 0.36816406 -28 2.2499692 -7.5 -0 -0 -1 -14 1.1249846 0.3720703 0.17675781 -26 0.25 -7.5 -0 -0 -1 -13 0.125 0.3876953 0.19238281 -28 0.25 -7.5 -0 -0 -1 -14 0.125 0.3720703 0.19238281 -26 2.249969 -7.5 -0 -0 -1 -13 1.1249845 0.3876953 0.17675781 7 8 9 0 7 9 10 0 29 31 32 0 29 30 31 0 107 108 109 0 107 110 108 0 119 120 121 0 119 121 122 0 123 124 125 0 123 126 124 0 139 140 141 0 139 142 140 0 143 144 145 0 143 146 144 0 163 164 165 0 163 166 164 0 227 228 229 0 227 229 230 0 231 232 233 0 231 233 234 0 235 236 237 0 235 238 236 0 259 261 262 0 259 260 261 0 283 285 286 0 283 284 285 0 307 309 310 0 307 308 309 0 371 372 373 0 371 373 374 0 323 326 324 0 323 324 325 0 335 336 337 0 335 337 338 0 375 376 377 0 375 378 376 0 539 540 541 0 539 541 542 0 13 14 15 0 13 26 14 0 759 760 761 1 759 762 760 1 781 782 783 1 781 784 782 1 781 790 784 1 763 766 764 1 763 764 765 1 767 769 770 1 767 768 769 1 791 792 793 1 791 793 794 1 795 796 797 1 795 798 796 1 111 112 113 1 111 114 112 1 799 800 801 1 799 802 800 1 807 808 809 1 807 810 808 1 811 812 813 1 811 814 812 1 815 816 817 1 815 817 818 1 355 356 357 1 355 358 356 1 255 257 258 1 255 256 257 1 279 281 282 1 279 280 281 1 303 304 305 1 303 305 306 1 1023 1024 1025 1 1023 1026 1024 1 331 333 334 1 331 332 333 1 843 844 845 1 843 845 846 1 51 52 53 1 51 53 54 1 57 59 60 1 57 58 59 1 16 18 19 1 16 17 18 1 54 53 55 1 54 55 56 1 61 64 62 1 61 62 63 1 115 116 117 1 115 118 116 1 751 752 753 1 751 753 754 1 743 744 745 1 743 745 746 1 735 736 737 1 735 737 738 1 727 728 729 1 727 729 730 1 719 720 721 1 719 721 722 1 711 712 713 1 711 713 714 1 699 702 700 1 699 700 701 1 695 696 697 1 695 697 698 1 675 676 677 1 675 677 678 1 655 656 657 1 655 657 658 1 635 636 637 1 635 637 638 1 615 616 617 1 615 617 618 1 595 596 597 1 595 597 598 1 575 576 577 1 575 577 578 1 543 544 545 1 543 545 546 1 755 757 758 2 755 756 757 2 747 750 748 2 747 748 749 2 551 552 553 2 551 554 552 2 547 549 550 2 547 548 549 2 559 560 561 2 559 562 560 2 555 556 557 2 555 558 556 2 739 742 740 2 739 740 741 2 563 564 565 2 563 566 564 2 567 569 570 2 567 568 569 2 579 580 581 2 579 582 580 2 571 572 573 2 571 574 572 2 731 734 732 2 731 732 733 2 583 584 585 2 583 586 584 2 587 589 590 2 587 588 589 2 599 600 601 2 599 602 600 2 591 592 593 2 591 594 592 2 723 726 724 2 723 724 725 2 603 604 605 2 603 606 604 2 607 609 610 2 607 608 609 2 619 620 621 2 619 622 620 2 611 612 613 2 611 614 612 2 715 718 716 2 715 716 717 2 623 624 625 2 623 626 624 2 627 629 630 2 627 628 629 2 639 640 641 2 639 642 640 2 631 632 633 2 631 634 632 2 707 710 708 2 707 708 709 2 643 644 645 2 643 646 644 2 647 649 650 2 647 648 649 2 659 660 661 2 659 662 660 2 651 652 653 2 651 654 652 2 703 706 704 2 703 704 705 2 663 664 665 2 663 666 664 2 667 669 670 2 667 668 669 2 679 680 681 2 679 682 680 2 671 672 673 2 671 674 672 2 691 694 692 2 691 692 693 2 683 684 685 2 683 686 684 2 687 689 690 2 687 688 689 2 399 401 402 2 399 400 401 2 391 392 393 2 391 393 394 2 395 398 396 2 395 396 397 2 383 384 385 2 383 386 384 2 379 381 382 2 379 380 381 2 403 404 405 2 403 406 404 2 423 424 425 2 423 425 426 2 387 388 389 2 387 390 388 2 411 412 413 2 411 413 414 2 407 409 410 2 407 408 409 2 415 417 418 2 415 416 417 2 427 428 429 2 427 430 428 2 447 448 449 2 447 449 450 2 419 420 421 2 419 422 420 2 435 436 437 2 435 437 438 2 431 433 434 2 431 432 433 2 439 441 442 2 439 440 441 2 451 452 453 2 451 454 452 2 471 472 473 2 471 473 474 2 443 444 445 2 443 446 444 2 459 460 461 2 459 461 462 2 455 457 458 2 455 456 457 2 463 465 466 2 463 464 465 2 475 476 477 2 475 478 476 2 495 496 497 2 495 497 498 2 467 468 469 2 467 470 468 2 483 484 485 2 483 485 486 2 479 481 482 2 479 480 481 2 487 489 490 2 487 488 489 2 499 500 501 2 499 502 500 2 519 520 521 2 519 521 522 2 491 492 493 2 491 494 492 2 507 508 509 2 507 509 510 2 503 505 506 2 503 504 505 2 511 513 514 2 511 512 513 2 827 829 830 2 827 828 829 2 819 820 821 2 819 821 822 2 831 833 834 2 831 832 833 2 823 826 824 2 823 824 825 2 839 840 841 2 839 842 840 2 363 364 365 3 363 366 364 3 367 368 369 3 367 369 370 3 359 360 361 3 359 362 360 3 243 245 246 3 243 244 245 3 239 242 240 3 239 240 241 3 247 248 249 3 247 249 250 3 251 253 254 3 251 252 253 3 267 269 270 3 267 268 269 3 263 266 264 3 263 264 265 3 271 272 273 3 271 273 274 3 275 277 278 3 275 276 277 3 291 293 294 3 291 292 293 3 287 290 288 3 287 288 289 3 295 296 297 3 295 297 298 3 299 301 302 3 299 300 301 3 319 321 322 3 319 320 321 3 311 312 313 3 311 313 314 3 315 318 316 3 315 316 317 3 327 329 330 3 327 328 329 3 343 345 346 3 343 344 345 3 339 342 340 3 339 340 341 3 347 348 349 3 347 349 350 3 1027 1028 1029 4 1027 1029 1030 4 1031 1032 1033 4 179 181 182 4 179 180 181 4 195 197 198 4 195 196 197 4 1034 1035 1036 4 1034 1036 1037 4 199 200 201 4 199 202 200 4 147 148 149 4 147 150 148 4 171 172 173 4 171 173 174 4 167 170 168 4 167 168 169 4 151 153 154 4 151 152 153 4 159 161 162 4 159 160 161 4 175 178 176 4 175 176 177 4 155 157 158 4 155 156 157 4 187 190 188 4 187 188 189 4 191 193 194 4 191 192 193 4 183 184 185 4 183 186 184 4 211 214 212 4 211 212 213 4 203 205 206 4 203 204 205 4 219 222 220 4 219 220 221 4 207 209 210 4 207 208 209 4 215 216 217 4 215 217 218 4 223 224 225 4 223 226 224 4 135 138 136 4 135 136 137 4 131 134 132 4 131 132 133 4 127 129 130 4 127 128 129 4 1038 1039 1040 4 1038 1040 1041 4 1042 1043 1044 4 1042 1045 1043 4 33 32 34 0 33 29 32 0 1046 1047 1048 0 1046 1049 1047 0 1078 1079 1080 0 1078 1081 1079 0 1050 1051 1047 0 1050 1047 1049 0 35 36 37 0 35 38 36 0 26 27 14 0 26 28 27 0 1082 1085 1083 1 1082 1083 1084 1 1102 1103 1104 1 1102 1104 1105 1 351 352 353 1 351 354 352 1 1070 1072 1073 1 1070 1071 1072 1 17 20 18 1 17 21 20 1 782 785 786 1 782 784 785 1 803 804 805 1 803 806 804 1 1106 1107 1108 1 1106 1109 1107 1 1066 1067 1068 1 1066 1068 1069 1 1094 1095 1096 1 1094 1097 1095 1 1060 1061 1062 2 1060 1062 1063 2 1064 1062 1065 2 1064 1063 1062 2 79 82 80 2 79 80 81 2 43 44 45 2 43 46 44 2 75 77 78 2 75 76 77 2 0 1 2 1 788 787 789 1 1056 1057 1058 1 1056 1059 1057 1 39 40 41 1 39 42 40 1 23 24 22 1 23 25 24 1 786 787 788 1 786 785 787 1 1052 1054 1055 1 1052 1053 1054 1 1074 1076 1077 1 1074 1075 1076 1 21 22 20 1 21 23 22 1 775 776 777 1 771 774 772 1 771 772 773 1 778 779 780 1 69 70 71 1 65 68 66 1 65 66 67 1 72 73 74 1 1110 1111 1112 2 1113 1114 1115 2 1116 1119 1117 2 1116 1117 1118 2 1128 1130 1131 2 1128 1129 1130 2 1132 1133 1134 2 1132 1135 1133 2 1136 1137 1138 2 1136 1138 1139 2 1120 1121 1122 2 1120 1122 1123 2 1124 1125 1126 2 1124 1127 1125 2 1090 1093 1091 1 1090 1091 1092 1 1086 1088 1089 1 1086 1087 1088 1 1098 1099 1100 1 1098 1101 1099 1 859 860 861 2 859 862 860 2 855 858 856 2 855 856 857 2 847 849 850 2 847 848 849 2 1007 1008 1009 2 1007 1009 1010 2 863 864 865 2 863 866 864 2 851 853 854 2 851 852 853 2 879 880 881 2 879 882 880 2 875 878 876 2 875 876 877 2 867 869 870 2 867 868 869 2 1003 1004 1005 2 1003 1005 1006 2 883 884 885 2 883 886 884 2 871 873 874 2 871 872 873 2 899 900 901 2 899 902 900 2 895 898 896 2 895 896 897 2 887 889 890 2 887 888 889 2 999 1000 1001 2 999 1001 1002 2 903 904 905 2 903 906 904 2 891 893 894 2 891 892 893 2 919 920 921 2 919 922 920 2 915 918 916 2 915 916 917 2 907 909 910 2 907 908 909 2 995 996 997 2 995 997 998 2 923 924 925 2 923 926 924 2 911 913 914 2 911 912 913 2 939 940 941 2 939 942 940 2 935 938 936 2 935 936 937 2 927 929 930 2 927 928 929 2 991 992 993 2 991 993 994 2 943 944 945 2 943 946 944 2 931 933 934 2 931 932 933 2 959 960 961 2 959 962 960 2 955 958 956 2 955 956 957 2 947 949 950 2 947 948 949 2 987 988 989 2 987 989 990 2 963 964 965 2 963 966 964 2 951 953 954 2 951 952 953 2 979 980 981 2 979 982 980 2 975 978 976 2 975 976 977 2 967 969 970 2 967 968 969 2 983 984 985 2 983 985 986 2 971 973 974 2 971 972 973 2 1011 1012 1013 2 1011 1014 1012 2 1019 1020 1021 2 1019 1022 1020 2 1015 1016 1017 2 1015 1017 1018 2 835 837 838 2 835 836 837 2 523 524 525 2 523 526 524 2 535 536 537 2 535 537 538 2 515 516 517 2 515 518 516 2 531 532 533 2 531 533 534 2 527 529 530 2 527 528 529 2 103 104 105 0 103 106 104 0 10 9 11 0 10 11 12 0 99 100 101 0 99 102 100 0 1140 1141 1142 0 1140 1143 1141 0 1144 1145 1146 0 1144 1146 1147 0 1148 1149 1150 0 1148 1150 1151 0 1160 1161 1162 0 1160 1162 1163 0 1168 1169 1170 0 1168 1170 1171 0 1176 1177 1178 0 1176 1178 1179 0 1184 1185 1186 0 1184 1186 1187 0 1188 1189 1190 0 1188 1190 1191 0 1192 1193 1194 0 1192 1194 1195 0 1196 1197 1198 0 1196 1198 1199 0 1200 1201 1202 0 1200 1202 1203 0 1204 1200 1203 0 1204 1203 1205 0 49 38 35 0 49 50 38 0 1206 1207 1208 2 1206 1208 1209 2 1210 1211 1212 2 1210 1212 1213 2 1214 1215 1216 2 1217 1218 1219 2 1217 1219 1220 2 1221 1222 1223 2 1221 1223 1224 2 3 4 4 2 1225 1226 1227 2 1228 1231 1229 2 1228 1229 1230 2 1232 1233 1234 2 1232 1234 1235 2 5 6 6 2 1244 1245 1246 2 1240 1241 1242 2 1240 1242 1243 2 1236 1237 1238 2 1236 1238 1239 2 1255 1256 1257 2 1255 1257 1258 2 1251 1252 1253 2 1251 1253 1254 2 1247 1248 1249 2 1247 1249 1250 2 1259 1260 1261 2 1262 1263 1264 2 1262 1264 1265 2 1266 1267 1268 2 1266 1268 1269 2 1270 1271 1272 2 1180 1181 1182 2 1180 1182 1183 2 1172 1173 1174 2 1172 1174 1175 2 1273 1274 1275 2 1276 1277 1278 2 1276 1278 1279 2 1280 1281 1282 2 1280 1282 1283 2 1152 1153 1154 2 1152 1154 1155 2 1164 1165 1166 2 1164 1166 1167 2 1156 1157 1158 2 1156 1158 1159 2 1284 1285 1286 2 1287 1288 1289 2 1287 1289 1290 2 1291 1292 1293 2 1291 1293 1294 2 1295 1296 1297 2 1298 1299 1300 2 1298 1300 1301 2 1302 1303 1304 2 1302 1304 1305 2 1306 1307 1308 2 1309 1312 1310 2 1309 1310 1311 2 1313 1316 1314 2 1313 1314 1315 2 87 88 89 2 87 90 88 2 91 94 92 2 91 92 93 2 83 84 85 2 83 86 84 2 95 96 97 2 95 97 98 2 47 46 43 2 47 48 46 2 ================================================ FILE: data/models/plane.dymdl ================================================ DYMDLv1 192 64 2 2 1 brick001 brick002 0.0 0.0 -2.0 0.3553880453109741 0.8923612236976624 -0.2781151831150055 0.5719782710075378 0.441872239112854 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.2904391288757324 -1.0681514739990234 0.3553880453109741 0.8923612236976624 -0.2781151831150055 0.5699204802513123 0.3323860466480255 0 1.0 0 0.0 0 0.0 0 0.0 0.2123682200908661 0.0 -1.7286243438720703 0.3553880453109741 0.8923612236976624 -0.2781151831150055 0.5820232629776001 0.40807393193244934 0 1.0 0 0.0 0 0.0 0 0.0 0.4747193157672882 0.0 0.17187312245368958 0.6495254635810852 0.7569811344146729 -0.0713522732257843 0.09166642278432846 0.4745960235595703 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.2904391288757324 -1.0681514739990234 0.6801354885101318 0.7275307178497314 -0.08996856212615967 0.5759083032608032 0.9659298658370972 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.4094167947769165 0.3123588263988495 0.6404004096984863 0.765190601348877 -0.06591998040676117 0.022350959479808807 0.968824028968811 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 2.0 0.32792139053344727 0.8122806549072266 0.4823145270347595 0.3789503574371338 0.21925367414951324 0 1.0 0 0.0 0 0.0 0 0.0 0.6899517178535461 0.0 1.5308918952941895 0.32792139053344727 0.8122806549072266 0.4823145270347595 0.42093485593795776 0.2359992265701294 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.41978955268859863 1.2930455207824707 0.32792139053344727 0.8122806549072266 0.4823145270347595 0.4058072865009308 0.15567173063755035 0 1.0 0 0.0 0 0.0 0 0.0 2.066875457763672 0.0 1.8436307907104492 0.35267189145088196 0.8733481764793396 -0.33588671684265137 0.46079015731811523 0.37654685974121094 0 1.0 0 0.0 0 0.0 0 0.0 0.4747193157672882 0.0 0.17187312245368958 0.35267189145088196 0.8733481764793396 -0.33588671684265137 0.46079012751579285 0.10165080428123474 0 1.0 0 0.0 0 0.0 0 0.0 0.5017969012260437 0.24579858779907227 0.8394175171852112 0.35267189145088196 0.8733481764793396 -0.33588671684265137 0.43947339057922363 0.15942440927028656 0 1.0 0 0.0 0 0.0 0 0.0 0.6899517178535461 0.0 1.5308918952941895 -0.08020263910293579 0.9320963025093079 0.35316020250320435 0.42093485593795776 0.2359992265701294 0 1.0 0 0.0 0 0.0 0 0.0 2.066875457763672 0.0 1.8436307907104492 -0.08020263910293579 0.9320963025093079 0.35316020250320435 0.46079015731811523 0.37654685974121094 0 1.0 0 0.0 0 0.0 0 0.0 0.5017969012260437 0.24579858779907227 0.8394175171852112 -0.08020263910293579 0.9320963025093079 0.35316020250320435 0.43947339057922363 0.15942440927028656 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.4094167947769165 0.3123588263988495 0.5688344836235046 0.7640308737754822 -0.30439162254333496 0.5661211609840393 0.16870616376399994 0 1.0 0 0.0 0 0.0 0 0.0 0.5017969012260437 0.24579858779907227 0.8394175171852112 0.5688344836235046 0.7640308737754822 -0.30439162254333496 0.5897995829582214 0.10165080428123474 0 1.0 0 0.0 0 0.0 0 0.0 0.4747193157672882 0.0 0.17187312245368958 0.5688344836235046 0.7640308737754822 -0.30439162254333496 0.5897995233535767 0.18009646236896515 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.41978955268859863 1.2930455207824707 0.46467483043670654 0.8666341304779053 0.1816156506538391 0.4058072865009308 0.15567173063755035 0 1.0 0 0.0 0 0.0 0 0.0 0.6899517178535461 0.0 1.5308918952941895 0.46467483043670654 0.8666341304779053 0.1816156506538391 0.42093485593795776 0.2359992265701294 0 1.0 0 0.0 0 0.0 0 0.0 0.5017969012260437 0.24579858779907227 0.8394175171852112 0.46467483043670654 0.8666341304779053 0.1816156506538391 0.43947339057922363 0.15942440927028656 0 1.0 0 0.0 0 0.0 0 0.0 0.2123682200908661 0.0 -1.7286243438720703 0.5695059299468994 -0.809167742729187 -0.14444410800933838 0.448937326669693 0.4079761207103729 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -0.13739442825317383 -1.833680510520935 0.0 -0.9247108101844788 -0.3805963397026062 0.4401704668998718 0.38775280117988586 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 -2.0 0.0 -0.7709586024284363 -0.6368602514266968 0.448937326669693 0.37654685974121094 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -0.18801343441009521 0.11876698583364487 0.0 -0.99969482421875 -0.024353770539164543 0.5661211609840393 0.2911384105682373 0 1.0 0 0.0 0 0.0 0 0.0 0.2123682200908661 0.0 -1.7286243438720703 0.5695059299468994 -0.809167742729187 -0.14444410800933838 0.5549721717834473 0.5125557780265808 0 1.0 0 0.0 0 0.0 0 0.0 0.4747193157672882 0.0 0.17187312245368958 0.2933744192123413 -0.9551377892494202 -0.0398876927793026 0.541559100151062 0.2870542109012604 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -0.18801343441009521 0.11876698583364487 0.0 -0.99969482421875 -0.024353770539164543 0.5661211609840393 0.2911384105682373 0 1.0 0 0.0 0 0.0 0 0.0 0.4747193157672882 0.0 0.17187312245368958 0.2933744192123413 -0.9551377892494202 -0.0398876927793026 0.541559100151062 0.2870542109012604 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -0.1748637557029724 1.7178194522857666 0.0 -0.9976500868797302 -0.06811731308698654 0.5661211609840393 0.10165080428123474 0 1.0 0 0.0 0 0.0 0 0.0 2.066875457763672 0.0 1.8436307907104492 0.08911404758691788 -0.9923703670501709 -0.08487197756767273 0.541559100151062 0.34930598735809326 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -0.1748637557029724 1.7178194522857666 0.0 -0.9976500868797302 -0.06811731308698654 0.541559100151062 0.10165080428123474 0 1.0 0 0.0 0 0.0 0 0.0 0.4747193157672882 0.0 0.17187312245368958 0.2933744192123413 -0.9551377892494202 -0.0398876927793026 0.46079015731811523 0.14816278219223022 0 1.0 0 0.0 0 0.0 0 0.0 0.6899517178535461 0.0 1.5308918952941895 -0.10245063900947571 0.886532187461853 0.4511246085166931 0.42093485593795776 0.2359992265701294 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -0.1748637557029724 1.7178194522857666 -0.10245063900947571 0.886532187461853 0.4511246085166931 0.3880477845668793 0.19627457857131958 0 1.0 0 0.0 0 0.0 0 0.0 2.066875457763672 0.0 1.8436307907104492 -0.10245063900947571 0.886532187461853 0.4511246085166931 0.46079015731811523 0.37654685974121094 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 2.0 0.0 -0.8500015139579773 0.5267189741134644 0.5056122541427612 0.34930598735809326 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -0.1748637557029724 1.7178194522857666 0.0 -0.8500015139579773 0.5267189741134644 0.493749737739563 0.36691027879714966 0 1.0 0 0.0 0 0.0 0 0.0 0.6899517178535461 0.0 1.5308918952941895 0.33716848492622375 -0.8002258539199829 0.49589526653289795 0.5056122541427612 0.4486411213874817 0 1.0 0 0.0 0 0.0 0 0.0 0.5017969012260437 0.24579858779907227 0.8394175171852112 -0.8163701295852661 0.574633002281189 -0.05737479776144028 0.07139185070991516 0.22664135694503784 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.4094167947769165 0.3123588263988495 0.0 0.0 0.999969482421875 0.1406300961971283 0.27182716131210327 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.11192654818296432 0.3123588263988495 0.0 0.14471876621246338 0.9894406199455261 0.14336399734020233 0.2139897346496582 0 1.0 0 0.0 0 0.0 0 0.0 0.5017969012260437 0.24579858779907227 0.8394175171852112 -0.8163701295852661 0.574633002281189 -0.05737479776144028 0.07139185070991516 0.22664135694503784 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.11192654818296432 1.2308577299118042 0.0 0.29032257199287415 -0.9569078683853149 0.057119086384773254 0.10288871824741364 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.41978955268859863 1.2930455207824707 0.0 0.1979735642671585 -0.9801934957504272 0.02790761925280094 0.12156404554843903 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.11192654818296432 0.3123588263988495 0.0 0.14471876621246338 0.9894406199455261 0.14336399734020233 0.2139897346496582 0 1.0 0 0.0 0 0.0 0 0.0 0.3635571300983429 0.11192654818296432 0.8394175171852112 -0.6936551928520203 0.7162999510765076 -0.07550279051065445 0.08156658709049225 0.1950477957725525 0 1.0 0 0.0 0 0.0 0 0.0 0.5017969012260437 0.24579858779907227 0.8394175171852112 -0.8163701295852661 0.574633002281189 -0.05737479776144028 0.07139185070991516 0.22664135694503784 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.11192654818296432 1.2308577299118042 0.0 0.29032257199287415 -0.9569078683853149 0.057119086384773254 0.10288871824741364 0 1.0 0 0.0 0 0.0 0 0.0 0.5017969012260437 0.24579858779907227 0.8394175171852112 -0.8163701295852661 0.574633002281189 -0.05737479776144028 0.07139185070991516 0.22664135694503784 0 1.0 0 0.0 0 0.0 0 0.0 0.3635571300983429 0.11192654818296432 0.8394175171852112 -0.6936551928520203 0.7162999510765076 -0.07550279051065445 0.08156658709049225 0.1950477957725525 0 1.0 0 0.0 0 0.0 0 0.0 0.3635571300983429 0.11192654818296432 0.8394175171852112 0.0 1.0 -0.0 0.8416548371315002 0.19483327865600586 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.11192654818296432 0.3123588263988495 0.0 0.999969482421875 -0.0 0.9031996130943298 0.016386881470680237 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.11192654818296432 1.2308577299118042 0.0 1.0 -0.0 0.9031996130943298 0.3273632526397705 0 1.0 0 0.0 0 0.0 0 0.0 0.1724889725446701 0.16573193669319153 1.0263258218765259 0.8324838876724243 0.4540849030017853 -0.317331463098526 0.3993307948112488 0.4682326316833496 0 1.0 0 0.0 0 0.0 0 0.0 -0.1615772396326065 0.1639711558818817 0.8538424968719482 -0.5196081399917603 0.6817834973335266 -0.5148777961730957 0.9779636859893799 0.023303017020225525 0 1.0 0 0.0 0 0.0 0 0.0 -0.1724889725446701 0.16573193669319153 1.0263258218765259 -0.8324838876724243 0.4540849030017853 -0.317331463098526 0.3993307948112488 0.023303017020225525 0 1.0 0 0.0 0 0.0 0 0.0 0.11098125576972961 0.5722616314888 1.089372158050537 0.460463285446167 0.8848536610603333 -0.07046724110841751 0.39494186639785767 0.4761120080947876 0 1.0 0 0.0 0 0.0 0 0.0 -0.17454108595848083 0.22346490621566772 1.201465129852295 -0.8923917412757874 0.2770470380783081 0.3561204969882965 0.9791973829269409 0.02007424831390381 0 1.0 0 0.0 0 0.0 0 0.0 0.17454108595848083 0.22346490621566772 1.201465129852295 0.8923917412757874 0.2770470380783081 0.3561204969882965 0.39494186639785767 0.02007424831390381 0 1.0 0 0.0 0 0.0 0 0.0 0.182428777217865 0.1646122932434082 0.6305167078971863 0.2070070505142212 -0.5269020795822144 -0.8243049383163452 0.22654783725738525 0.020358771085739136 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.31249547004699707 0.49016785621643066 0.2070070505142212 -0.5269020795822144 -0.8243049383163452 0.021336063742637634 0.1640915721654892 0 1.0 0 0.0 0 0.0 0 0.0 0.182428777217865 0.3524409532546997 0.510452151298523 0.2070070505142212 -0.5269020795822144 -0.8243049383163452 0.021336063742637634 0.020358771085739136 0 1.0 0 0.0 0 0.0 0 0.0 0.11098125576972961 0.5722616314888 1.089372158050537 0.460463285446167 0.8848536610603333 -0.07046724110841751 0.3993307948112488 0.4682326316833496 0 1.0 0 0.0 0 0.0 0 0.0 -0.1724889725446701 0.16573193669319153 1.0263258218765259 -0.8324838876724243 0.4540849030017853 -0.317331463098526 0.9779636859893799 0.023303017020225525 0 1.0 0 0.0 0 0.0 0 0.0 -0.11098125576972961 0.5722616314888 1.089372158050537 -0.460463285446167 0.8848536610603333 -0.07046724110841751 0.3993307948112488 0.023303017020225525 0 1.0 0 0.0 0 0.0 0 0.0 0.1615772396326065 0.1639711558818817 0.8538424968719482 0.5196081399917603 0.6817834973335266 -0.5148777961730957 0.39494186639785767 0.4761120080947876 0 1.0 0 0.0 0 0.0 0 0.0 -0.17253082990646362 0.08795484900474548 0.8336168527603149 -0.6330759525299072 0.28290659189224243 -0.7205114960670471 0.9791973829269409 0.02007424831390381 0 1.0 0 0.0 0 0.0 0 0.0 -0.1615772396326065 0.1639711558818817 0.8538424968719482 -0.5196081399917603 0.6817834973335266 -0.5148777961730957 0.39494186639785767 0.02007424831390381 0 1.0 0 0.0 0 0.0 0 0.0 0.1724889725446701 0.16573193669319153 1.0263258218765259 0.8324838876724243 0.4540849030017853 -0.317331463098526 0.39494186639785767 0.02007424831390381 0 1.0 0 0.0 0 0.0 0 0.0 0.17253082990646362 0.08795484900474548 0.8336168527603149 0.6330759525299072 0.28290659189224243 -0.7205114960670471 0.9791973829269409 0.4761120080947876 0 1.0 0 0.0 0 0.0 0 0.0 0.1615772396326065 0.1639711558818817 0.8538424968719482 0.5196081399917603 0.6817834973335266 -0.5148777961730957 0.9791973829269409 0.02007424831390381 0 1.0 0 0.0 0 0.0 0 0.0 0.1724889725446701 0.16573193669319153 1.0263258218765259 0.8324838876724243 0.4540849030017853 -0.317331463098526 0.39494186639785767 0.02007424831390381 0 1.0 0 0.0 0 0.0 0 0.0 0.17454108595848083 0.22346490621566772 1.201465129852295 0.8923917412757874 0.2770470380783081 0.3561204969882965 0.9791973829269409 0.4761120080947876 0 1.0 0 0.0 0 0.0 0 0.0 0.19624733924865723 0.09315037727355957 1.211909294128418 0.9851984977722168 0.1589709222316742 -0.0639362782239914 0.9791973829269409 0.02007424831390381 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 -2.0 -0.3553880453109741 0.8923612236976624 -0.2781151831150055 0.5719782710075378 0.441872239112854 0 1.0 0 0.0 0 0.0 0 0.0 -0.2123682200908661 0.0 -1.7286243438720703 -0.3553880453109741 0.8923612236976624 -0.2781151831150055 0.5820232629776001 0.40807393193244934 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.2904391288757324 -1.0681514739990234 -0.3553880453109741 0.8923612236976624 -0.2781151831150055 0.5699204802513123 0.3323860466480255 0 1.0 0 0.0 0 0.0 0 0.0 -0.4747193157672882 0.0 0.17187312245368958 -0.6495254635810852 0.7569811344146729 -0.0713522732257843 0.5997053384780884 0.4745960235595703 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.2904391288757324 -1.0681514739990234 -0.6801354885101318 0.7275307178497314 -0.08996856212615967 0.11546345055103302 0.9659298658370972 0 1.0 0 0.0 0 0.0 0 0.0 -0.2123682200908661 0.0 -1.7286243438720703 -0.6881923675537109 0.7192602157592773 -0.0949736014008522 -0.1573365181684494 0.7140350341796875 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 2.0 -0.32792139053344727 0.8122806549072266 0.4823145270347595 0.3789503574371338 0.21925367414951324 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.41978955268859863 1.2930455207824707 -0.32792139053344727 0.8122806549072266 0.4823145270347595 0.4058072865009308 0.15567173063755035 0 1.0 0 0.0 0 0.0 0 0.0 -0.6899517178535461 0.0 1.5308918952941895 -0.32792139053344727 0.8122806549072266 0.4823145270347595 0.42093485593795776 0.2359992265701294 0 1.0 0 0.0 0 0.0 0 0.0 -2.066875457763672 0.0 1.8436307907104492 -0.35267189145088196 0.8733481764793396 -0.33588671684265137 0.46079015731811523 0.37654685974121094 0 1.0 0 0.0 0 0.0 0 0.0 -0.5017969012260437 0.24579858779907227 0.8394175171852112 -0.35267189145088196 0.8733481764793396 -0.33588671684265137 0.43947339057922363 0.15942440927028656 0 1.0 0 0.0 0 0.0 0 0.0 -0.4747193157672882 0.0 0.17187312245368958 -0.35267189145088196 0.8733481764793396 -0.33588671684265137 0.46079012751579285 0.10165080428123474 0 1.0 0 0.0 0 0.0 0 0.0 -0.6899517178535461 0.0 1.5308918952941895 0.08020263910293579 0.9320963025093079 0.35316020250320435 0.42093485593795776 0.2359992265701294 0 1.0 0 0.0 0 0.0 0 0.0 -0.5017969012260437 0.24579858779907227 0.8394175171852112 0.08020263910293579 0.9320963025093079 0.35316020250320435 0.43947339057922363 0.15942440927028656 0 1.0 0 0.0 0 0.0 0 0.0 -2.066875457763672 0.0 1.8436307907104492 0.08020263910293579 0.9320963025093079 0.35316020250320435 0.46079015731811523 0.37654685974121094 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.4094167947769165 0.3123588263988495 -0.5688344836235046 0.7640308737754822 -0.30439162254333496 0.5661211609840393 0.16870616376399994 0 1.0 0 0.0 0 0.0 0 0.0 -0.4747193157672882 0.0 0.17187312245368958 -0.5688344836235046 0.7640308737754822 -0.30439162254333496 0.5897995233535767 0.18009646236896515 0 1.0 0 0.0 0 0.0 0 0.0 -0.5017969012260437 0.24579858779907227 0.8394175171852112 -0.5688344836235046 0.7640308737754822 -0.30439162254333496 0.5897995829582214 0.10165080428123474 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.41978955268859863 1.2930455207824707 -0.46467483043670654 0.8666341304779053 0.1816156506538391 0.4058072865009308 0.15567173063755035 0 1.0 0 0.0 0 0.0 0 0.0 -0.5017969012260437 0.24579858779907227 0.8394175171852112 -0.46467483043670654 0.8666341304779053 0.1816156506538391 0.43947339057922363 0.15942440927028656 0 1.0 0 0.0 0 0.0 0 0.0 -0.6899517178535461 0.0 1.5308918952941895 -0.46467483043670654 0.8666341304779053 0.1816156506538391 0.42093485593795776 0.2359992265701294 0 1.0 0 0.0 0 0.0 0 0.0 -0.2123682200908661 0.0 -1.7286243438720703 -0.5695059299468994 -0.809167742729187 -0.14444410800933838 0.448937326669693 0.4079761207103729 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 -2.0 0.0 -0.7709586024284363 -0.6368602514266968 0.448937326669693 0.37654685974121094 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -0.13739442825317383 -1.833680510520935 0.0 -0.9247108101844788 -0.3805963397026062 0.4401704668998718 0.38775280117988586 0 1.0 0 0.0 0 0.0 0 0.0 -0.2123682200908661 0.0 -1.7286243438720703 -0.5695059299468994 -0.809167742729187 -0.14444410800933838 0.5549721717834473 0.5125557780265808 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -0.18801343441009521 0.11876698583364487 0.0 -0.99969482421875 -0.024353770539164543 0.5661211609840393 0.2911384105682373 0 1.0 0 0.0 0 0.0 0 0.0 -0.4747193157672882 0.0 0.17187312245368958 -0.2933744192123413 -0.9551377892494202 -0.0398876927793026 0.541559100151062 0.2870542109012604 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -0.18801343441009521 0.11876698583364487 0.0 -0.99969482421875 -0.024353770539164543 0.5661211609840393 0.2911384105682373 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -0.1748637557029724 1.7178194522857666 0.0 -0.9976500868797302 -0.06811731308698654 0.5661211609840393 0.10165080428123474 0 1.0 0 0.0 0 0.0 0 0.0 -0.4747193157672882 0.0 0.17187312245368958 -0.2933744192123413 -0.9551377892494202 -0.0398876927793026 0.541559100151062 0.2870542109012604 0 1.0 0 0.0 0 0.0 0 0.0 -2.066875457763672 0.0 1.8436307907104492 -0.08911404758691788 -0.9923703670501709 -0.08487197756767273 0.541559100151062 0.34930598735809326 0 1.0 0 0.0 0 0.0 0 0.0 -0.4747193157672882 0.0 0.17187312245368958 -0.2933744192123413 -0.9551377892494202 -0.0398876927793026 0.46079015731811523 0.14816278219223022 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -0.1748637557029724 1.7178194522857666 0.0 -0.9976500868797302 -0.06811731308698654 0.541559100151062 0.10165080428123474 0 1.0 0 0.0 0 0.0 0 0.0 -0.6899517178535461 0.0 1.5308918952941895 0.10245063900947571 0.886532187461853 0.4511246085166931 0.42093485593795776 0.2359992265701294 0 1.0 0 0.0 0 0.0 0 0.0 -2.066875457763672 0.0 1.8436307907104492 0.10245063900947571 0.886532187461853 0.4511246085166931 0.46079015731811523 0.37654685974121094 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -0.1748637557029724 1.7178194522857666 0.10245063900947571 0.886532187461853 0.4511246085166931 0.3880477845668793 0.19627457857131958 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 2.0 0.0 -0.8500015139579773 0.5267189741134644 0.5056122541427612 0.34930598735809326 0 1.0 0 0.0 0 0.0 0 0.0 -0.6899517178535461 0.0 1.5308918952941895 -0.33716848492622375 -0.8002258539199829 0.49589526653289795 0.5056122541427612 0.4486411213874817 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -0.1748637557029724 1.7178194522857666 0.0 -0.8500015139579773 0.5267189741134644 0.493749737739563 0.36691027879714966 0 1.0 0 0.0 0 0.0 0 0.0 -0.5017969012260437 0.24579858779907227 0.8394175171852112 0.8163701295852661 0.574633002281189 -0.05737479776144028 0.07139185070991516 0.22664135694503784 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.11192654818296432 0.3123588263988495 0.0 0.14471876621246338 0.9894406199455261 0.14336399734020233 0.2139897346496582 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.4094167947769165 0.3123588263988495 0.0 0.0 0.999969482421875 0.1406300961971283 0.27182716131210327 0 1.0 0 0.0 0 0.0 0 0.0 -0.5017969012260437 0.24579858779907227 0.8394175171852112 0.8163701295852661 0.574633002281189 -0.05737479776144028 0.07139185070991516 0.22664135694503784 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.41978955268859863 1.2930455207824707 0.0 0.1979735642671585 -0.9801934957504272 0.02790761925280094 0.12156404554843903 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.11192654818296432 1.2308577299118042 0.0 0.29032257199287415 -0.9569078683853149 0.057119086384773254 0.10288871824741364 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.11192654818296432 0.3123588263988495 0.0 0.14471876621246338 0.9894406199455261 0.14336399734020233 0.2139897346496582 0 1.0 0 0.0 0 0.0 0 0.0 -0.5017969012260437 0.24579858779907227 0.8394175171852112 0.8163701295852661 0.574633002281189 -0.05737479776144028 0.07139185070991516 0.22664135694503784 0 1.0 0 0.0 0 0.0 0 0.0 -0.3635571300983429 0.11192654818296432 0.8394175171852112 0.6936551928520203 0.7162999510765076 -0.07550279051065445 0.08156658709049225 0.1950477957725525 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.11192654818296432 1.2308577299118042 0.0 0.29032257199287415 -0.9569078683853149 0.057119086384773254 0.10288871824741364 0 1.0 0 0.0 0 0.0 0 0.0 -0.3635571300983429 0.11192654818296432 0.8394175171852112 0.6936551928520203 0.7162999510765076 -0.07550279051065445 0.08156658709049225 0.1950477957725525 0 1.0 0 0.0 0 0.0 0 0.0 -0.5017969012260437 0.24579858779907227 0.8394175171852112 0.8163701295852661 0.574633002281189 -0.05737479776144028 0.07139185070991516 0.22664135694503784 0 1.0 0 0.0 0 0.0 0 0.0 -0.3635571300983429 0.11192654818296432 0.8394175171852112 0.0 1.0 -0.0 0.8416548371315002 0.19483327865600586 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.11192654818296432 1.2308577299118042 0.0 1.0 -0.0 0.9031996130943298 0.3273632526397705 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.11192654818296432 0.3123588263988495 0.0 0.999969482421875 -0.0 0.9031996130943298 0.016386881470680237 0 1.0 0 0.0 0 0.0 0 0.0 -0.182428777217865 0.1646122932434082 0.6305167078971863 0.0 0.538560152053833 0.8425549864768982 0.015935510396957397 0.5099356174468994 0 1.0 0 0.0 0 0.0 0 0.0 0.182428777217865 0.3524409532546997 0.510452151298523 0.0 0.538560152053833 0.8425549864768982 0.9840644598007202 0.9920641183853149 0 1.0 0 0.0 0 0.0 0 0.0 -0.182428777217865 0.3524409532546997 0.510452151298523 0.0 0.538560152053833 0.8425549864768982 0.015935540199279785 0.9920641183853149 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.12466680258512497 0.610232412815094 0.0 -0.4527420997619629 0.8915982246398926 0.2707086205482483 0.14956773817539215 0 1.0 0 0.0 0 0.0 0 0.0 0.182428777217865 0.1646122932434082 0.6305167078971863 0.0 -0.4527420997619629 0.8915982246398926 0.34770241379737854 0.02391555905342102 0 1.0 0 0.0 0 0.0 0 0.0 -0.182428777217865 0.1646122932434082 0.6305167078971863 0.0 -0.4527420997619629 0.8915982246398926 0.34770241379737854 0.27521979808807373 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.31249547004699707 0.49016785621643066 -0.2070070505142212 -0.5269020795822144 -0.8243049383163452 0.22654783725738525 0.020358771085739136 0 1.0 0 0.0 0 0.0 0 0.0 -0.182428777217865 0.1646122932434082 0.6305167078971863 -0.2070070505142212 -0.5269020795822144 -0.8243049383163452 0.021336063742637634 0.1640915721654892 0 1.0 0 0.0 0 0.0 0 0.0 -0.182428777217865 0.3524409532546997 0.510452151298523 -0.2070070505142212 -0.5269020795822144 -0.8243049383163452 0.021336063742637634 0.020358771085739136 0 1.0 0 0.0 0 0.0 0 0.0 0.182428777217865 0.3524409532546997 0.510452151298523 0.0 0.4527420997619629 -0.8915982246398926 0.34810900688171387 0.27522456645965576 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.31249547004699707 0.49016785621643066 0.0 0.4527420997619629 -0.8915982246398926 0.27111518383026123 0.1495724320411682 0 1.0 0 0.0 0 0.0 0 0.0 -0.182428777217865 0.3524409532546997 0.510452151298523 0.0 0.4527420997619629 -0.8915982246398926 0.34810900688171387 0.023920297622680664 0 1.0 0 0.0 0 0.0 0 0.0 -0.1724889725446701 0.16573193669319153 1.0263258218765259 -0.8324838876724243 0.4540849030017853 -0.317331463098526 0.39494186639785767 0.02007424831390381 0 1.0 0 0.0 0 0.0 0 0.0 -0.17253082990646362 0.08795484900474548 0.8336168527603149 -0.6330759525299072 0.28290659189224243 -0.7205114960670471 0.9791973829269409 0.4761120080947876 0 1.0 0 0.0 0 0.0 0 0.0 -0.19624733924865723 0.09315037727355957 1.211909294128418 -0.9851984977722168 0.1589709222316742 -0.0639362782239914 0.9791973829269409 0.02007424831390381 0 1.0 0 0.0 0 0.0 0 0.0 -0.1724889725446701 0.16573193669319153 1.0263258218765259 -0.8324838876724243 0.4540849030017853 -0.317331463098526 0.39494186639785767 0.02007424831390381 0 1.0 0 0.0 0 0.0 0 0.0 -0.17454108595848083 0.22346490621566772 1.201465129852295 -0.8923917412757874 0.2770470380783081 0.3561204969882965 0.9791973829269409 0.4761120080947876 0 1.0 0 0.0 0 0.0 0 0.0 -0.11098125576972961 0.5722616314888 1.089372158050537 -0.460463285446167 0.8848536610603333 -0.07046724110841751 0.9791973829269409 0.02007424831390381 0 1.0 0 0.0 0 0.0 0 0.0 0.4747193157672882 0.0 0.17187312245368958 0.6495254635810852 0.7569811344146729 -0.0713522732257843 0.09166642278432846 0.4745960235595703 0 1.0 0 0.0 0 0.0 0 0.0 0.2123682200908661 0.0 -1.7286243438720703 0.6881923675537109 0.7192602157592773 -0.0949736014008522 0.8487082719802856 0.7140350341796875 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.2904391288757324 -1.0681514739990234 0.6801354885101318 0.7275307178497314 -0.08996856212615967 0.5759083032608032 0.9659298658370972 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -0.18801343441009521 0.11876698583364487 0.0 -0.99969482421875 -0.024353770539164543 0.5661211609840393 0.2911384105682373 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -0.13739442825317383 -1.833680510520935 0.0 -0.9247108101844788 -0.3805963397026062 0.5660311579704285 0.5233492255210876 0 1.0 0 0.0 0 0.0 0 0.0 0.2123682200908661 0.0 -1.7286243438720703 0.5695059299468994 -0.809167742729187 -0.14444410800933838 0.5549721717834473 0.5125557780265808 0 1.0 0 0.0 0 0.0 0 0.0 0.1724889725446701 0.16573193669319153 1.0263258218765259 0.8324838876724243 0.4540849030017853 -0.317331463098526 0.3993307948112488 0.4682326316833496 0 1.0 0 0.0 0 0.0 0 0.0 0.1615772396326065 0.1639711558818817 0.8538424968719482 0.5196081399917603 0.6817834973335266 -0.5148777961730957 0.9779636859893799 0.4682326316833496 0 1.0 0 0.0 0 0.0 0 0.0 -0.1615772396326065 0.1639711558818817 0.8538424968719482 -0.5196081399917603 0.6817834973335266 -0.5148777961730957 0.9779636859893799 0.023303017020225525 0 1.0 0 0.0 0 0.0 0 0.0 0.11098125576972961 0.5722616314888 1.089372158050537 0.460463285446167 0.8848536610603333 -0.07046724110841751 0.39494186639785767 0.4761120080947876 0 1.0 0 0.0 0 0.0 0 0.0 -0.11098125576972961 0.5722616314888 1.089372158050537 -0.460463285446167 0.8848536610603333 -0.07046724110841751 0.9791973829269409 0.4761120080947876 0 1.0 0 0.0 0 0.0 0 0.0 -0.17454108595848083 0.22346490621566772 1.201465129852295 -0.8923917412757874 0.2770470380783081 0.3561204969882965 0.9791973829269409 0.02007424831390381 0 1.0 0 0.0 0 0.0 0 0.0 0.182428777217865 0.1646122932434082 0.6305167078971863 0.2070070505142212 -0.5269020795822144 -0.8243049383163452 0.22654783725738525 0.020358771085739136 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.12466680258512497 0.610232412815094 0.2070070505142212 -0.5269020795822144 -0.8243049383163452 0.22654783725738525 0.1640915721654892 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.31249547004699707 0.49016785621643066 0.2070070505142212 -0.5269020795822144 -0.8243049383163452 0.021336063742637634 0.1640915721654892 0 1.0 0 0.0 0 0.0 0 0.0 0.11098125576972961 0.5722616314888 1.089372158050537 0.460463285446167 0.8848536610603333 -0.07046724110841751 0.3993307948112488 0.4682326316833496 0 1.0 0 0.0 0 0.0 0 0.0 0.1724889725446701 0.16573193669319153 1.0263258218765259 0.8324838876724243 0.4540849030017853 -0.317331463098526 0.9779636859893799 0.4682326316833496 0 1.0 0 0.0 0 0.0 0 0.0 -0.1724889725446701 0.16573193669319153 1.0263258218765259 -0.8324838876724243 0.4540849030017853 -0.317331463098526 0.9779636859893799 0.023303017020225525 0 1.0 0 0.0 0 0.0 0 0.0 0.1615772396326065 0.1639711558818817 0.8538424968719482 0.5196081399917603 0.6817834973335266 -0.5148777961730957 0.39494186639785767 0.4761120080947876 0 1.0 0 0.0 0 0.0 0 0.0 0.17253082990646362 0.08795484900474548 0.8336168527603149 0.6330759525299072 0.28290659189224243 -0.7205114960670471 0.9791973829269409 0.4761120080947876 0 1.0 0 0.0 0 0.0 0 0.0 -0.17253082990646362 0.08795484900474548 0.8336168527603149 -0.6330759525299072 0.28290659189224243 -0.7205114960670471 0.9791973829269409 0.02007424831390381 0 1.0 0 0.0 0 0.0 0 0.0 0.1724889725446701 0.16573193669319153 1.0263258218765259 0.8324838876724243 0.4540849030017853 -0.317331463098526 0.39494186639785767 0.02007424831390381 0 1.0 0 0.0 0 0.0 0 0.0 0.19624733924865723 0.09315037727355957 1.211909294128418 0.9851984977722168 0.1589709222316742 -0.0639362782239914 0.39494186639785767 0.4761120080947876 0 1.0 0 0.0 0 0.0 0 0.0 0.17253082990646362 0.08795484900474548 0.8336168527603149 0.6330759525299072 0.28290659189224243 -0.7205114960670471 0.9791973829269409 0.4761120080947876 0 1.0 0 0.0 0 0.0 0 0.0 0.1724889725446701 0.16573193669319153 1.0263258218765259 0.8324838876724243 0.4540849030017853 -0.317331463098526 0.39494186639785767 0.02007424831390381 0 1.0 0 0.0 0 0.0 0 0.0 0.11098125576972961 0.5722616314888 1.089372158050537 0.460463285446167 0.8848536610603333 -0.07046724110841751 0.39494186639785767 0.4761120080947876 0 1.0 0 0.0 0 0.0 0 0.0 0.17454108595848083 0.22346490621566772 1.201465129852295 0.8923917412757874 0.2770470380783081 0.3561204969882965 0.9791973829269409 0.4761120080947876 0 1.0 0 0.0 0 0.0 0 0.0 -0.4747193157672882 0.0 0.17187312245368958 -0.6495254635810852 0.7569811344146729 -0.0713522732257843 0.5997053384780884 0.4745960235595703 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.4094167947769165 0.3123588263988495 -0.6404004096984863 0.765190601348877 -0.06591998040676117 0.6690207719802856 0.968824028968811 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.2904391288757324 -1.0681514739990234 -0.6801354885101318 0.7275307178497314 -0.08996856212615967 0.11546345055103302 0.9659298658370972 0 1.0 0 0.0 0 0.0 0 0.0 -0.2123682200908661 0.0 -1.7286243438720703 -0.5695059299468994 -0.809167742729187 -0.14444410800933838 0.5549721717834473 0.5125557780265808 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -0.13739442825317383 -1.833680510520935 0.0 -0.9247108101844788 -0.3805963397026062 0.5660311579704285 0.5233492255210876 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -0.18801343441009521 0.11876698583364487 0.0 -0.99969482421875 -0.024353770539164543 0.5661211609840393 0.2911384105682373 0 1.0 0 0.0 0 0.0 0 0.0 -0.182428777217865 0.1646122932434082 0.6305167078971863 0.0 0.538560152053833 0.8425549864768982 0.015935510396957397 0.5099356174468994 0 1.0 0 0.0 0 0.0 0 0.0 0.182428777217865 0.1646122932434082 0.6305167078971863 0.0 0.538560152053833 0.8425549864768982 0.9840644598007202 0.5099356174468994 0 1.0 0 0.0 0 0.0 0 0.0 0.182428777217865 0.3524409532546997 0.510452151298523 0.0 0.538560152053833 0.8425549864768982 0.9840644598007202 0.9920641183853149 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.31249547004699707 0.49016785621643066 -0.2070070505142212 -0.5269020795822144 -0.8243049383163452 0.22654783725738525 0.020358771085739136 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.12466680258512497 0.610232412815094 -0.2070070505142212 -0.5269020795822144 -0.8243049383163452 0.22654783725738525 0.1640915721654892 0 1.0 0 0.0 0 0.0 0 0.0 -0.182428777217865 0.1646122932434082 0.6305167078971863 -0.2070070505142212 -0.5269020795822144 -0.8243049383163452 0.021336063742637634 0.1640915721654892 0 1.0 0 0.0 0 0.0 0 0.0 -0.1724889725446701 0.16573193669319153 1.0263258218765259 -0.8324838876724243 0.4540849030017853 -0.317331463098526 0.39494186639785767 0.02007424831390381 0 1.0 0 0.0 0 0.0 0 0.0 -0.1615772396326065 0.1639711558818817 0.8538424968719482 -0.5196081399917603 0.6817834973335266 -0.5148777961730957 0.39494186639785767 0.4761120080947876 0 1.0 0 0.0 0 0.0 0 0.0 -0.17253082990646362 0.08795484900474548 0.8336168527603149 -0.6330759525299072 0.28290659189224243 -0.7205114960670471 0.9791973829269409 0.4761120080947876 0 1.0 0 0.0 0 0.0 0 0.0 -0.1724889725446701 0.16573193669319153 1.0263258218765259 -0.8324838876724243 0.4540849030017853 -0.317331463098526 0.39494186639785767 0.02007424831390381 0 1.0 0 0.0 0 0.0 0 0.0 -0.19624733924865723 0.09315037727355957 1.211909294128418 -0.9851984977722168 0.1589709222316742 -0.0639362782239914 0.39494186639785767 0.4761120080947876 0 1.0 0 0.0 0 0.0 0 0.0 -0.17454108595848083 0.22346490621566772 1.201465129852295 -0.8923917412757874 0.2770470380783081 0.3561204969882965 0.9791973829269409 0.4761120080947876 0 1.0 0 0.0 0 0.0 0 0.0 0 1 2 0 3 4 5 0 6 7 8 0 9 10 11 0 12 13 14 0 15 16 17 0 18 19 20 0 21 22 23 0 24 25 26 0 27 28 29 0 30 31 32 0 33 34 35 0 36 37 38 0 39 40 41 0 42 43 44 0 45 46 47 0 48 49 50 0 51 52 53 0 54 55 56 1 57 58 59 1 60 61 62 1 63 64 65 1 66 67 68 1 69 70 71 1 72 73 74 1 75 76 77 0 78 79 80 0 81 82 83 0 84 85 86 0 87 88 89 0 90 91 92 0 93 94 95 0 96 97 98 0 99 100 101 0 102 103 104 0 105 106 107 0 108 109 110 0 111 112 113 0 114 115 116 0 117 118 119 0 120 121 122 0 123 124 125 0 126 127 128 0 129 130 131 1 132 133 134 1 135 136 137 1 138 139 140 1 141 142 143 1 144 145 146 1 147 148 149 0 150 151 152 0 153 154 155 1 156 157 158 1 159 160 161 1 162 163 164 1 165 166 167 1 168 169 170 1 171 172 173 1 174 175 176 0 177 178 179 0 180 181 182 1 183 184 185 1 186 187 188 1 189 190 191 1 Root -1 0.0 0.0 -0.0 0.0 1.0 -0.0 0.0 Seat -1 0.0 0.2033674120903015 0.8016459941864014 0.0 1.2033674716949463 0.8016459941864014 0.0 Root ================================================ FILE: data/models/sphere.dymdl ================================================ DYMDLv1 1984 960 1 1 0 dev/white 6.356849979738399e-08 -0.38268327713012695 -0.9238790273666382 0.0 -0.3805353045463562 -0.9247413277626038 0.75 0.375 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -0.19509020447731018 -0.9807853102684021 0.0 -0.19391460716724396 -0.9809869527816772 0.75 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.19134178757667542 -0.19509020447731018 -0.9619397521018982 0.191381573677063 -0.19391460716724396 -0.9621570706367493 0.71875 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.18024002015590668 -0.38268327713012695 -0.9061274528503418 0.18039490282535553 -0.3805353045463562 -0.9069795608520508 0.71875 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.8314695954322815 -0.5555702447891235 0.0 0.8286385536193848 -0.5597705245018005 0.75 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.9238795042037964 -0.3826834559440613 0.0 0.921689510345459 -0.3878597319126129 0.75 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.07465790957212448 0.9238795042037964 -0.3753302991390228 0.07565538585186005 0.921689510345459 -0.3804132342338562 0.71875 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.10838644951581955 0.8314695954322815 -0.5448951125144958 0.10919522494077682 0.8286385536193848 -0.5489974617958069 0.71875 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 2.7218476361667854e-07 -0.5555701851844788 -0.8314687609672546 0.0 -0.5527512431144714 -0.8333384394645691 0.7499998807907104 0.31249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 6.356849979738399e-08 -0.38268327713012695 -0.9238790273666382 0.0 -0.3805353045463562 -0.9247413277626038 0.75 0.375 0 1.0 0 0.0 0 0.0 0 0.0 0.18024002015590668 -0.38268327713012695 -0.9061274528503418 0.18039490282535553 -0.3805353045463562 -0.9069795608520508 0.71875 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.16221174597740173 -0.5555701851844788 -0.8154931664466858 0.16257210075855255 -0.5527512431144714 -0.8173161745071411 0.71875 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.7071067690849304 -0.7071067690849304 0.0 0.7040314674377441 -0.7101352214813232 0.75 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.8314695954322815 -0.5555702447891235 0.0 0.8286385536193848 -0.5597705245018005 0.75 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 0.10838644951581955 0.8314695954322815 -0.5448951125144958 0.10919522494077682 0.8286385536193848 -0.5489974617958069 0.71875 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 0.13794974982738495 0.7071067690849304 -0.6935198903083801 0.13852351903915405 0.7040314674377441 -0.6964934468269348 0.71875 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 1.529754740658973e-07 -0.7071067690849304 -0.707106351852417 0.0 -0.7040314674377441 -0.7101352214813232 0.7499998807907104 0.24999994039535522 0 1.0 0 0.0 0 0.0 0 0.0 2.7218476361667854e-07 -0.5555701851844788 -0.8314687609672546 0.0 -0.5527512431144714 -0.8333384394645691 0.7499998807907104 0.31249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 0.16221174597740173 -0.5555701851844788 -0.8154931664466858 0.16257210075855255 -0.5527512431144714 -0.8173161745071411 0.71875 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.13794974982738495 -0.7071067690849304 -0.6935198903083801 0.13852351903915405 -0.7040314674377441 -0.6964934468269348 0.71875 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.5555701851844788 -0.8314696550369263 0.0 0.5527512431144714 -0.8333384394645691 0.75 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.7071067690849304 -0.7071067690849304 0.0 0.7040314674377441 -0.7101352214813232 0.75 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.13794974982738495 0.7071067690849304 -0.6935198903083801 0.13852351903915405 0.7040314674377441 -0.6964934468269348 0.71875 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.16221174597740173 0.5555701851844788 -0.8154931664466858 0.16257210075855255 0.5527512431144714 -0.8173161745071411 0.71875 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -0.8314696550369263 -0.5555701851844788 0.0 -0.8286385536193848 -0.5597705245018005 0.75 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 1.529754740658973e-07 -0.7071067690849304 -0.707106351852417 0.0 -0.7040314674377441 -0.7101352214813232 0.7499998807907104 0.24999994039535522 0 1.0 0 0.0 0 0.0 0 0.0 0.13794974982738495 -0.7071067690849304 -0.6935198903083801 0.13852351903915405 -0.7040314674377441 -0.6964934468269348 0.71875 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.10838643461465836 -0.8314696550369263 -0.5448950529098511 0.10919522494077682 -0.8286385536193848 -0.5489974617958069 0.71875 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.3826834261417389 -0.9238795042037964 0.0 0.3805353045463562 -0.9247413277626038 0.75 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.5555701851844788 -0.8314696550369263 0.0 0.5527512431144714 -0.8333384394645691 0.75 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.16221174597740173 0.5555701851844788 -0.8154931664466858 0.16257210075855255 0.5527512431144714 -0.8173161745071411 0.71875 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.18024000525474548 0.3826834261417389 -0.906127393245697 0.18039490282535553 0.3805353045463562 -0.9069795608520508 0.71875 0.625 0 1.0 0 0.0 0 0.0 0 0.0 7.846966099123165e-08 -0.9238796234130859 -0.3826829195022583 0.0 -0.921689510345459 -0.3878597319126129 0.7499998807907104 0.12499982118606567 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -0.8314696550369263 -0.5555701851844788 0.0 -0.8286385536193848 -0.5597705245018005 0.75 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 0.10838643461465836 -0.8314696550369263 -0.5448950529098511 0.10919522494077682 -0.8286385536193848 -0.5489974617958069 0.71875 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 0.0746578723192215 -0.9238796234130859 -0.3753301203250885 0.07565538585186005 -0.921689510345459 -0.3804132342338562 0.71875 0.125 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.19509035348892212 -0.9807852506637573 0.0 0.19391460716724396 -0.9809869527816772 0.75 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.3826834261417389 -0.9238795042037964 0.0 0.3805353045463562 -0.9247413277626038 0.75 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.18024000525474548 0.3826834261417389 -0.906127393245697 0.18039490282535553 0.3805353045463562 -0.9069795608520508 0.71875 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.19134177267551422 0.19509035348892212 -0.9619396924972534 0.191381573677063 0.19391460716724396 -0.9621570706367493 0.71875 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 1.513972591737911e-08 -0.9807853102684021 -0.1950899213552475 0.0 -0.9795831441879272 -0.20096439123153687 0.75 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 7.846966099123165e-08 -0.9238796234130859 -0.3826829195022583 0.0 -0.921689510345459 -0.3878597319126129 0.7499998807907104 0.12499982118606567 0 1.0 0 0.0 0 0.0 0 0.0 0.0746578723192215 -0.9238796234130859 -0.3753301203250885 0.07565538585186005 -0.921689510345459 -0.3804132342338562 0.71875 0.125 0 1.0 0 0.0 0 0.0 0 0.0 0.038060251623392105 -0.9807853102684021 -0.19134147465229034 0.039185766130685806 -0.9795831441879272 -0.19708853960037231 0.7187498807907104 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 0.0 7.549790126404332e-08 -1.0 0.0 0.0 -1.0 0.75 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.19509035348892212 -0.9807852506637573 0.0 0.19391460716724396 -0.9809869527816772 0.75 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.19134177267551422 0.19509035348892212 -0.9619396924972534 0.191381573677063 0.19391460716724396 -0.9621570706367493 0.71875 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.1950903832912445 7.549790126404332e-08 -0.9807852506637573 0.19507431983947754 0.0 -0.9807733297348022 0.71875 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.9807852506637573 -0.19509032368659973 0.0 0.9795831441879272 -0.20096439123153687 0.75 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.734375 1.0 0 1.0 0 0.0 0 0.0 0 0.0 0.03806029632687569 0.9807852506637573 -0.19134171307086945 0.039185766130685806 0.9795831441879272 -0.19708853960037231 0.7187498807907104 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.7343748807907104 0.0 0 1.0 0 0.0 0 0.0 0 0.0 1.513972591737911e-08 -0.9807853102684021 -0.1950899213552475 0.0 -0.9795831441879272 -0.20096439123153687 0.75 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 0.038060251623392105 -0.9807853102684021 -0.19134147465229034 0.039185766130685806 -0.9795831441879272 -0.19708853960037231 0.7187498807907104 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -0.19509020447731018 -0.9807853102684021 0.0 -0.19391460716724396 -0.9809869527816772 0.75 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.0 7.549790126404332e-08 -1.0 0.0 0.0 -1.0 0.75 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.1950903832912445 7.549790126404332e-08 -0.9807852506637573 0.19507431983947754 0.0 -0.9807733297348022 0.71875 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.19134178757667542 -0.19509020447731018 -0.9619397521018982 0.191381573677063 -0.19391460716724396 -0.9621570706367493 0.71875 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.9238795042037964 -0.3826834559440613 0.0 0.921689510345459 -0.3878597319126129 0.75 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.9807852506637573 -0.19509032368659973 0.0 0.9795831441879272 -0.20096439123153687 0.75 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.03806029632687569 0.9807852506637573 -0.19134171307086945 0.039185766130685806 0.9795831441879272 -0.19708853960037231 0.7187498807907104 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.07465790957212448 0.9238795042037964 -0.3753302991390228 0.07565538585186005 0.921689510345459 -0.3804132342338562 0.71875 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.7031248807907104 0.0 0 1.0 0 0.0 0 0.0 0 0.0 0.038060251623392105 -0.9807853102684021 -0.19134147465229034 0.039185766130685806 -0.9795831441879272 -0.19708853960037231 0.7187498807907104 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 0.0746578648686409 -0.9807853102684021 -0.1802397072315216 0.07690664380788803 -0.9795831441879272 -0.18564409017562866 0.6874998807907104 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 0.19134178757667542 -0.19509020447731018 -0.9619397521018982 0.191381573677063 -0.19391460716724396 -0.9621570706367493 0.71875 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.1950903832912445 7.549790126404332e-08 -0.9807852506637573 0.19507431983947754 0.0 -0.9807733297348022 0.71875 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.38268354535102844 7.549790126404332e-08 -0.9238794445991516 0.382671594619751 0.0 -0.9238563179969788 0.6875 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.37533038854599 -0.19509020447731018 -0.9061273336410522 0.3754081726074219 -0.19391460716724396 -0.9063386917114258 0.6875 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.07465790957212448 0.9238795042037964 -0.3753302991390228 0.07565538585186005 0.921689510345459 -0.3804132342338562 0.71875 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.03806029632687569 0.9807852506637573 -0.19134171307086945 0.039185766130685806 0.9795831441879272 -0.19708853960037231 0.7187498807907104 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.07465796172618866 0.9807852506637573 -0.1802399456501007 0.07690664380788803 0.9795831441879272 -0.18564409017562866 0.6874998807907104 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.14644673466682434 0.9238795042037964 -0.3535534143447876 0.14841151237487793 0.921689510345459 -0.3583483397960663 0.6874998807907104 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.18024002015590668 -0.38268327713012695 -0.9061274528503418 0.18039490282535553 -0.3805353045463562 -0.9069795608520508 0.71875 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.19134178757667542 -0.19509020447731018 -0.9619397521018982 0.191381573677063 -0.19391460716724396 -0.9621570706367493 0.71875 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.37533038854599 -0.19509020447731018 -0.9061273336410522 0.3754081726074219 -0.19391460716724396 -0.9063386917114258 0.6875 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.35355350375175476 -0.38268327713012695 -0.8535533547401428 0.35389262437820435 -0.3805353045463562 -0.8543656468391418 0.6875 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.10838644951581955 0.8314695954322815 -0.5448951125144958 0.10919522494077682 0.8286385536193848 -0.5489974617958069 0.71875 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 0.07465790957212448 0.9238795042037964 -0.3753302991390228 0.07565538585186005 0.921689510345459 -0.3804132342338562 0.71875 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.14644673466682434 0.9238795042037964 -0.3535534143447876 0.14841151237487793 0.921689510345459 -0.3583483397960663 0.6874998807907104 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.21260765194892883 0.8314695954322815 -0.513279914855957 0.2142094224691391 0.8286385536193848 -0.5171361565589905 0.6874998807907104 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 0.16221174597740173 -0.5555701851844788 -0.8154931664466858 0.16257210075855255 -0.5527512431144714 -0.8173161745071411 0.71875 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.18024002015590668 -0.38268327713012695 -0.9061274528503418 0.18039490282535553 -0.3805353045463562 -0.9069795608520508 0.71875 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.35355350375175476 -0.38268327713012695 -0.8535533547401428 0.35389262437820435 -0.3805353045463562 -0.8543656468391418 0.6875 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.3181897699832916 -0.5555701851844788 -0.7681776881217957 0.3188879191875458 -0.5527512431144714 -0.7698904275894165 0.6875 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.13794974982738495 0.7071067690849304 -0.6935198903083801 0.13852351903915405 0.7040314674377441 -0.6964934468269348 0.71875 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.10838644951581955 0.8314695954322815 -0.5448951125144958 0.10919522494077682 0.8286385536193848 -0.5489974617958069 0.71875 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 0.21260765194892883 0.8314695954322815 -0.513279914855957 0.2142094224691391 0.8286385536193848 -0.5171361565589905 0.6874998807907104 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 0.2705981731414795 0.7071067690849304 -0.6532813906669617 0.2717368006706238 0.7040314674377441 -0.6560564041137695 0.6874998807907104 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.13794974982738495 -0.7071067690849304 -0.6935198903083801 0.13852351903915405 -0.7040314674377441 -0.6964934468269348 0.71875 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.16221174597740173 -0.5555701851844788 -0.8154931664466858 0.16257210075855255 -0.5527512431144714 -0.8173161745071411 0.71875 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.3181897699832916 -0.5555701851844788 -0.7681776881217957 0.3188879191875458 -0.5527512431144714 -0.7698904275894165 0.6875 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.2705981731414795 -0.7071067690849304 -0.6532813906669617 0.2717368006706238 -0.7040314674377441 -0.6560564041137695 0.6874998807907104 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.16221174597740173 0.5555701851844788 -0.8154931664466858 0.16257210075855255 0.5527512431144714 -0.8173161745071411 0.71875 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.13794974982738495 0.7071067690849304 -0.6935198903083801 0.13852351903915405 0.7040314674377441 -0.6964934468269348 0.71875 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.2705981731414795 0.7071067690849304 -0.6532813906669617 0.2717368006706238 0.7040314674377441 -0.6560564041137695 0.6874998807907104 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.3181897699832916 0.5555701851844788 -0.7681776881217957 0.3188879191875458 0.5527512431144714 -0.7698904275894165 0.6875 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.10838643461465836 -0.8314696550369263 -0.5448950529098511 0.10919522494077682 -0.8286385536193848 -0.5489974617958069 0.71875 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 0.13794974982738495 -0.7071067690849304 -0.6935198903083801 0.13852351903915405 -0.7040314674377441 -0.6964934468269348 0.71875 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.2705981731414795 -0.7071067690849304 -0.6532813906669617 0.2717368006706238 -0.7040314674377441 -0.6560564041137695 0.6874998807907104 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.21260762214660645 -0.8314696550369263 -0.5132798552513123 0.2142094224691391 -0.8286385536193848 -0.5171361565589905 0.6874998807907104 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 0.18024000525474548 0.3826834261417389 -0.906127393245697 0.18039490282535553 0.3805353045463562 -0.9069795608520508 0.71875 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.16221174597740173 0.5555701851844788 -0.8154931664466858 0.16257210075855255 0.5527512431144714 -0.8173161745071411 0.71875 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.3181897699832916 0.5555701851844788 -0.7681776881217957 0.3188879191875458 0.5527512431144714 -0.7698904275894165 0.6875 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.3535534739494324 0.3826834261417389 -0.853553295135498 0.35386210680007935 0.3805353045463562 -0.8543656468391418 0.6875 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.0746578723192215 -0.9238796234130859 -0.3753301203250885 0.07565538585186005 -0.921689510345459 -0.3804132342338562 0.71875 0.125 0 1.0 0 0.0 0 0.0 0 0.0 0.10838643461465836 -0.8314696550369263 -0.5448950529098511 0.10919522494077682 -0.8286385536193848 -0.5489974617958069 0.71875 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 0.21260762214660645 -0.8314696550369263 -0.5132798552513123 0.2142094224691391 -0.8286385536193848 -0.5171361565589905 0.6874998807907104 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 0.14644667506217957 -0.9238796234130859 -0.35355323553085327 0.14841151237487793 -0.921689510345459 -0.3583483397960663 0.6874998807907104 0.125 0 1.0 0 0.0 0 0.0 0 0.0 0.19134177267551422 0.19509035348892212 -0.9619396924972534 0.191381573677063 0.19391460716724396 -0.9621570706367493 0.71875 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.18024000525474548 0.3826834261417389 -0.906127393245697 0.18039490282535553 0.3805353045463562 -0.9069795608520508 0.71875 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.3535534739494324 0.3826834261417389 -0.853553295135498 0.35386210680007935 0.3805353045463562 -0.8543656468391418 0.6875 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.37533038854599 0.19509035348892212 -0.9061273336410522 0.3754081726074219 0.19391460716724396 -0.9063386917114258 0.6875 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.038060251623392105 -0.9807853102684021 -0.19134147465229034 0.039185766130685806 -0.9795831441879272 -0.19708853960037231 0.7187498807907104 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 0.0746578723192215 -0.9238796234130859 -0.3753301203250885 0.07565538585186005 -0.921689510345459 -0.3804132342338562 0.71875 0.125 0 1.0 0 0.0 0 0.0 0 0.0 0.14644667506217957 -0.9238796234130859 -0.35355323553085327 0.14841151237487793 -0.921689510345459 -0.3583483397960663 0.6874998807907104 0.125 0 1.0 0 0.0 0 0.0 0 0.0 0.0746578648686409 -0.9807853102684021 -0.1802397072315216 0.07690664380788803 -0.9795831441879272 -0.18564409017562866 0.6874998807907104 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 0.1950903832912445 7.549790126404332e-08 -0.9807852506637573 0.19507431983947754 0.0 -0.9807733297348022 0.71875 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.19134177267551422 0.19509035348892212 -0.9619396924972534 0.191381573677063 0.19391460716724396 -0.9621570706367493 0.71875 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.37533038854599 0.19509035348892212 -0.9061273336410522 0.3754081726074219 0.19391460716724396 -0.9063386917114258 0.6875 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.38268354535102844 7.549790126404332e-08 -0.9238794445991516 0.382671594619751 0.0 -0.9238563179969788 0.6875 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.03806029632687569 0.9807852506637573 -0.19134171307086945 0.039185766130685806 0.9795831441879272 -0.19708853960037231 0.7187498807907104 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.7031248807907104 1.0 0 1.0 0 0.0 0 0.0 0 0.0 0.07465796172618866 0.9807852506637573 -0.1802399456501007 0.07690664380788803 0.9795831441879272 -0.18564409017562866 0.6874998807907104 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.21260762214660645 -0.8314696550369263 -0.5132798552513123 0.2142094224691391 -0.8286385536193848 -0.5171361565589905 0.6874998807907104 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 0.2705981731414795 -0.7071067690849304 -0.6532813906669617 0.2717368006706238 -0.7040314674377441 -0.6560564041137695 0.6874998807907104 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.3928476572036743 -0.7071067690849304 -0.5879377126693726 0.39451277256011963 -0.7040314674377441 -0.5904415845870972 0.6562498807907104 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.3086584210395813 -0.8314696550369263 -0.46193963289260864 0.3109835982322693 -0.8286385536193848 -0.46540728211402893 0.6562498807907104 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 0.3535534739494324 0.3826834261417389 -0.853553295135498 0.35386210680007935 0.3805353045463562 -0.8543656468391418 0.6875 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.3181897699832916 0.5555701851844788 -0.7681776881217957 0.3188879191875458 0.5527512431144714 -0.7698904275894165 0.6875 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.4619399309158325 0.5555701851844788 -0.6913416385650635 0.46296578645706177 0.5527512431144714 -0.6928922533988953 0.65625 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.5132800936698914 0.3826834261417389 -0.7681776285171509 0.5137485861778259 0.3805353045463562 -0.7689138650894165 0.65625 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.14644667506217957 -0.9238796234130859 -0.35355323553085327 0.14841151237487793 -0.921689510345459 -0.3583483397960663 0.6874998807907104 0.125 0 1.0 0 0.0 0 0.0 0 0.0 0.21260762214660645 -0.8314696550369263 -0.5132798552513123 0.2142094224691391 -0.8286385536193848 -0.5171361565589905 0.6874998807907104 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 0.3086584210395813 -0.8314696550369263 -0.46193963289260864 0.3109835982322693 -0.8286385536193848 -0.46540728211402893 0.6562498807907104 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 0.21260762214660645 -0.9238796234130859 -0.31818947196006775 0.2154911905527115 -0.921689510345459 -0.32248908281326294 0.6562498807907104 0.125 0 1.0 0 0.0 0 0.0 0 0.0 0.37533038854599 0.19509035348892212 -0.9061273336410522 0.3754081726074219 0.19391460716724396 -0.9063386917114258 0.6875 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.3535534739494324 0.3826834261417389 -0.853553295135498 0.35386210680007935 0.3805353045463562 -0.8543656468391418 0.6875 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.5132800936698914 0.3826834261417389 -0.7681776285171509 0.5137485861778259 0.3805353045463562 -0.7689138650894165 0.65625 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.5448952317237854 0.19509035348892212 -0.8154929876327515 0.5449995398521423 0.19391460716724396 -0.8156682252883911 0.65625 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.0746578648686409 -0.9807853102684021 -0.1802397072315216 0.07690664380788803 -0.9795831441879272 -0.18564409017562866 0.6874998807907104 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 0.14644667506217957 -0.9238796234130859 -0.35355323553085327 0.14841151237487793 -0.921689510345459 -0.3583483397960663 0.6874998807907104 0.125 0 1.0 0 0.0 0 0.0 0 0.0 0.21260762214660645 -0.9238796234130859 -0.31818947196006775 0.2154911905527115 -0.921689510345459 -0.32248908281326294 0.6562498807907104 0.125 0 1.0 0 0.0 0 0.0 0 0.0 0.10838641971349716 -0.9807853102684021 -0.16221143305301666 0.1116367056965828 -0.9795831441879272 -0.1670888364315033 0.6562498807907104 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.38268354535102844 7.549790126404332e-08 -0.9238794445991516 0.382671594619751 0.0 -0.9238563179969788 0.6875 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.37533038854599 0.19509035348892212 -0.9061273336410522 0.3754081726074219 0.19391460716724396 -0.9063386917114258 0.6875 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.5448952317237854 0.19509035348892212 -0.8154929876327515 0.5449995398521423 0.19391460716724396 -0.8156682252883911 0.65625 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.5555704236030579 7.549790126404332e-08 -0.8314694762229919 0.5555589199066162 0.0 -0.8314462900161743 0.6562498807907104 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.07465796172618866 0.9807852506637573 -0.1802399456501007 0.07690664380788803 0.9795831441879272 -0.18564409017562866 0.6874998807907104 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.6718747615814209 1.0 0 1.0 0 0.0 0 0.0 0 0.0 0.1083865687251091 0.9807852506637573 -0.16221162676811218 0.1116367056965828 0.9795831441879272 -0.1670888364315033 0.6562497615814209 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.6718747615814209 0.0 0 1.0 0 0.0 0 0.0 0 0.0 0.0746578648686409 -0.9807853102684021 -0.1802397072315216 0.07690664380788803 -0.9795831441879272 -0.18564409017562866 0.6874998807907104 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 0.10838641971349716 -0.9807853102684021 -0.16221143305301666 0.1116367056965828 -0.9795831441879272 -0.1670888364315033 0.6562498807907104 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.37533038854599 -0.19509020447731018 -0.9061273336410522 0.3754081726074219 -0.19391460716724396 -0.9063386917114258 0.6875 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.38268354535102844 7.549790126404332e-08 -0.9238794445991516 0.382671594619751 0.0 -0.9238563179969788 0.6875 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.5555704236030579 7.549790126404332e-08 -0.8314694762229919 0.5555589199066162 0.0 -0.8314462900161743 0.6562498807907104 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.5448952317237854 -0.19509020447731018 -0.8154929876327515 0.5449995398521423 -0.19391460716724396 -0.8156682252883911 0.65625 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.14644673466682434 0.9238795042037964 -0.3535534143447876 0.14841151237487793 0.921689510345459 -0.3583483397960663 0.6874998807907104 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.07465796172618866 0.9807852506637573 -0.1802399456501007 0.07690664380788803 0.9795831441879272 -0.18564409017562866 0.6874998807907104 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.1083865687251091 0.9807852506637573 -0.16221162676811218 0.1116367056965828 0.9795831441879272 -0.1670888364315033 0.6562497615814209 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.2126077115535736 0.9238795042037964 -0.3181896209716797 0.2154911905527115 0.921689510345459 -0.32248908281326294 0.6562498807907104 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.35355350375175476 -0.38268327713012695 -0.8535533547401428 0.35389262437820435 -0.3805353045463562 -0.8543656468391418 0.6875 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.37533038854599 -0.19509020447731018 -0.9061273336410522 0.3754081726074219 -0.19391460716724396 -0.9063386917114258 0.6875 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.5448952317237854 -0.19509020447731018 -0.8154929876327515 0.5449995398521423 -0.19391460716724396 -0.8156682252883911 0.65625 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.5132800936698914 -0.38268327713012695 -0.7681776881217957 0.5137485861778259 -0.3805353045463562 -0.7689138650894165 0.65625 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.21260765194892883 0.8314695954322815 -0.513279914855957 0.2142094224691391 0.8286385536193848 -0.5171361565589905 0.6874998807907104 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 0.14644673466682434 0.9238795042037964 -0.3535534143447876 0.14841151237487793 0.921689510345459 -0.3583483397960663 0.6874998807907104 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.2126077115535736 0.9238795042037964 -0.3181896209716797 0.2154911905527115 0.921689510345459 -0.32248908281326294 0.6562498807907104 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.3086584508419037 0.8314695954322815 -0.4619396924972534 0.3109835982322693 0.8286385536193848 -0.46540728211402893 0.6562498807907104 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 0.3181897699832916 -0.5555701851844788 -0.7681776881217957 0.3188879191875458 -0.5527512431144714 -0.7698904275894165 0.6875 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.35355350375175476 -0.38268327713012695 -0.8535533547401428 0.35389262437820435 -0.3805353045463562 -0.8543656468391418 0.6875 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.5132800936698914 -0.38268327713012695 -0.7681776881217957 0.5137485861778259 -0.3805353045463562 -0.7689138650894165 0.65625 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.4619399309158325 -0.5555701851844788 -0.6913416385650635 0.46296578645706177 -0.5527512431144714 -0.6928922533988953 0.65625 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.2705981731414795 0.7071067690849304 -0.6532813906669617 0.2717368006706238 0.7040314674377441 -0.6560564041137695 0.6874998807907104 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.21260765194892883 0.8314695954322815 -0.513279914855957 0.2142094224691391 0.8286385536193848 -0.5171361565589905 0.6874998807907104 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 0.3086584508419037 0.8314695954322815 -0.4619396924972534 0.3109835982322693 0.8286385536193848 -0.46540728211402893 0.6562498807907104 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 0.3928476572036743 0.7071067690849304 -0.5879377126693726 0.39451277256011963 0.7040314674377441 -0.5904415845870972 0.6562498807907104 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.2705981731414795 -0.7071067690849304 -0.6532813906669617 0.2717368006706238 -0.7040314674377441 -0.6560564041137695 0.6874998807907104 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.3181897699832916 -0.5555701851844788 -0.7681776881217957 0.3188879191875458 -0.5527512431144714 -0.7698904275894165 0.6875 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.4619399309158325 -0.5555701851844788 -0.6913416385650635 0.46296578645706177 -0.5527512431144714 -0.6928922533988953 0.65625 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.3928476572036743 -0.7071067690849304 -0.5879377126693726 0.39451277256011963 -0.7040314674377441 -0.5904415845870972 0.6562498807907104 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.3181897699832916 0.5555701851844788 -0.7681776881217957 0.3188879191875458 0.5527512431144714 -0.7698904275894165 0.6875 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.2705981731414795 0.7071067690849304 -0.6532813906669617 0.2717368006706238 0.7040314674377441 -0.6560564041137695 0.6874998807907104 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.3928476572036743 0.7071067690849304 -0.5879377126693726 0.39451277256011963 0.7040314674377441 -0.5904415845870972 0.6562498807907104 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.4619399309158325 0.5555701851844788 -0.6913416385650635 0.46296578645706177 0.5527512431144714 -0.6928922533988953 0.65625 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.2126077115535736 0.9238795042037964 -0.3181896209716797 0.2154911905527115 0.921689510345459 -0.32248908281326294 0.6562498807907104 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.1083865687251091 0.9807852506637573 -0.16221162676811218 0.1116367056965828 0.9795831441879272 -0.1670888364315033 0.6562497615814209 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.13794992864131927 0.9807852506637573 -0.137949600815773 0.1420941799879074 0.9795831441879272 -0.1420941799879074 0.6249997615814209 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.27059829235076904 0.9238795042037964 -0.2705979645252228 0.27426984906196594 0.921689510345459 -0.27426984906196594 0.6249998807907104 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.5132800936698914 -0.38268327713012695 -0.7681776881217957 0.5137485861778259 -0.3805353045463562 -0.7689138650894165 0.65625 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.5448952317237854 -0.19509020447731018 -0.8154929876327515 0.5449995398521423 -0.19391460716724396 -0.8156682252883911 0.65625 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.6935200691223145 -0.19509020447731018 -0.6935197114944458 0.6936551928520203 -0.19391460716724396 -0.6936551928520203 0.6249998807907104 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816290855408 -0.38268327713012695 -0.6532813906669617 0.6538895964622498 -0.3805353045463562 -0.6538895964622498 0.625 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.3086584508419037 0.8314695954322815 -0.4619396924972534 0.3109835982322693 0.8286385536193848 -0.46540728211402893 0.6562498807907104 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 0.2126077115535736 0.9238795042037964 -0.3181896209716797 0.2154911905527115 0.921689510345459 -0.32248908281326294 0.6562498807907104 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.27059829235076904 0.9238795042037964 -0.2705979645252228 0.27426984906196594 0.921689510345459 -0.27426984906196594 0.6249998807907104 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.3928476870059967 0.8314695954322815 -0.39284735918045044 0.395794540643692 0.8286385536193848 -0.395794540643692 0.6249998807907104 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 0.4619399309158325 -0.5555701851844788 -0.6913416385650635 0.46296578645706177 -0.5527512431144714 -0.6928922533988953 0.65625 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.5132800936698914 -0.38268327713012695 -0.7681776881217957 0.5137485861778259 -0.3805353045463562 -0.7689138650894165 0.65625 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816290855408 -0.38268327713012695 -0.6532813906669617 0.6538895964622498 -0.3805353045463562 -0.6538895964622498 0.625 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.5879380106925964 -0.5555701851844788 -0.5879376530647278 0.5892513990402222 -0.5527512431144714 -0.5892513990402222 0.6249998807907104 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.3928476572036743 0.7071067690849304 -0.5879377126693726 0.39451277256011963 0.7040314674377441 -0.5904415845870972 0.6562498807907104 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.3086584508419037 0.8314695954322815 -0.4619396924972534 0.3109835982322693 0.8286385536193848 -0.46540728211402893 0.6562498807907104 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 0.3928476870059967 0.8314695954322815 -0.39284735918045044 0.395794540643692 0.8286385536193848 -0.395794540643692 0.6249998807907104 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 0.5000001788139343 0.7071067690849304 -0.49999988079071045 0.5021210312843323 0.7040314674377441 -0.5021210312843323 0.6249998807907104 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.3928476572036743 -0.7071067690849304 -0.5879377126693726 0.39451277256011963 -0.7040314674377441 -0.5904415845870972 0.6562498807907104 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.4619399309158325 -0.5555701851844788 -0.6913416385650635 0.46296578645706177 -0.5527512431144714 -0.6928922533988953 0.65625 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.5879380106925964 -0.5555701851844788 -0.5879376530647278 0.5892513990402222 -0.5527512431144714 -0.5892513990402222 0.6249998807907104 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.5000001788139343 -0.7071067690849304 -0.49999988079071045 0.5021210312843323 -0.7040314674377441 -0.5021210312843323 0.6249998807907104 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.4619399309158325 0.5555701851844788 -0.6913416385650635 0.46296578645706177 0.5527512431144714 -0.6928922533988953 0.65625 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.3928476572036743 0.7071067690849304 -0.5879377126693726 0.39451277256011963 0.7040314674377441 -0.5904415845870972 0.6562498807907104 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.5000001788139343 0.7071067690849304 -0.49999988079071045 0.5021210312843323 0.7040314674377441 -0.5021210312843323 0.6249998807907104 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.5879380106925964 0.5555701851844788 -0.5879376530647278 0.5892513990402222 0.5527512431144714 -0.5892513990402222 0.6249998807907104 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.3086584210395813 -0.8314696550369263 -0.46193963289260864 0.3109835982322693 -0.8286385536193848 -0.46540728211402893 0.6562498807907104 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 0.3928476572036743 -0.7071067690849304 -0.5879377126693726 0.39451277256011963 -0.7040314674377441 -0.5904415845870972 0.6562498807907104 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.5000001788139343 -0.7071067690849304 -0.49999988079071045 0.5021210312843323 -0.7040314674377441 -0.5021210312843323 0.6249998807907104 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.3928476572036743 -0.8314696550369263 -0.39284729957580566 0.395794540643692 -0.8286385536193848 -0.395794540643692 0.6249998807907104 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 0.5132800936698914 0.3826834261417389 -0.7681776285171509 0.5137485861778259 0.3805353045463562 -0.7689138650894165 0.65625 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.4619399309158325 0.5555701851844788 -0.6913416385650635 0.46296578645706177 0.5527512431144714 -0.6928922533988953 0.65625 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.5879380106925964 0.5555701851844788 -0.5879376530647278 0.5892513990402222 0.5527512431144714 -0.5892513990402222 0.6249998807907104 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816290855408 0.3826834261417389 -0.6532813310623169 0.6538895964622498 0.3805353045463562 -0.6538895964622498 0.6249998807907104 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.21260762214660645 -0.9238796234130859 -0.31818947196006775 0.2154911905527115 -0.921689510345459 -0.32248908281326294 0.6562498807907104 0.125 0 1.0 0 0.0 0 0.0 0 0.0 0.3086584210395813 -0.8314696550369263 -0.46193963289260864 0.3109835982322693 -0.8286385536193848 -0.46540728211402893 0.6562498807907104 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 0.3928476572036743 -0.8314696550369263 -0.39284729957580566 0.395794540643692 -0.8286385536193848 -0.395794540643692 0.6249998807907104 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 0.2705981731414795 -0.9238796234130859 -0.2705978751182556 0.27426984906196594 -0.921689510345459 -0.27426984906196594 0.6249998807907104 0.125 0 1.0 0 0.0 0 0.0 0 0.0 0.5448952317237854 0.19509035348892212 -0.8154929876327515 0.5449995398521423 0.19391460716724396 -0.8156682252883911 0.65625 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.5132800936698914 0.3826834261417389 -0.7681776285171509 0.5137485861778259 0.3805353045463562 -0.7689138650894165 0.65625 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816290855408 0.3826834261417389 -0.6532813310623169 0.6538895964622498 0.3805353045463562 -0.6538895964622498 0.6249998807907104 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.6935200691223145 0.19509035348892212 -0.6935197114944458 0.6936551928520203 0.19391460716724396 -0.6936551928520203 0.6249998807907104 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.10838641971349716 -0.9807853102684021 -0.16221143305301666 0.1116367056965828 -0.9795831441879272 -0.1670888364315033 0.6562498807907104 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.21260762214660645 -0.9238796234130859 -0.31818947196006775 0.2154911905527115 -0.921689510345459 -0.32248908281326294 0.6562498807907104 0.125 0 1.0 0 0.0 0 0.0 0 0.0 0.2705981731414795 -0.9238796234130859 -0.2705978751182556 0.27426984906196594 -0.921689510345459 -0.27426984906196594 0.6249998807907104 0.125 0 1.0 0 0.0 0 0.0 0 0.0 0.13794973492622375 -0.9807853102684021 -0.13794943690299988 0.1420941799879074 -0.9795831441879272 -0.1420941799879074 0.6249997615814209 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.5555704236030579 7.549790126404332e-08 -0.8314694762229919 0.5555589199066162 0.0 -0.8314462900161743 0.6562498807907104 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.5448952317237854 0.19509035348892212 -0.8154929876327515 0.5449995398521423 0.19391460716724396 -0.8156682252883911 0.65625 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.6935200691223145 0.19509035348892212 -0.6935197114944458 0.6936551928520203 0.19391460716724396 -0.6936551928520203 0.6249998807907104 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.7071070075035095 7.549790126404332e-08 -0.7071065902709961 0.7070833444595337 0.0 -0.7070833444595337 0.6249998807907104 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.1083865687251091 0.9807852506637573 -0.16221162676811218 0.1116367056965828 0.9795831441879272 -0.1670888364315033 0.6562497615814209 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.6406247615814209 1.0 0 1.0 0 0.0 0 0.0 0 0.0 0.13794992864131927 0.9807852506637573 -0.137949600815773 0.1420941799879074 0.9795831441879272 -0.1420941799879074 0.6249997615814209 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.6406247615814209 0.0 0 1.0 0 0.0 0 0.0 0 0.0 0.10838641971349716 -0.9807853102684021 -0.16221143305301666 0.1116367056965828 -0.9795831441879272 -0.1670888364315033 0.6562498807907104 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.13794973492622375 -0.9807853102684021 -0.13794943690299988 0.1420941799879074 -0.9795831441879272 -0.1420941799879074 0.6249997615814209 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.5448952317237854 -0.19509020447731018 -0.8154929876327515 0.5449995398521423 -0.19391460716724396 -0.8156682252883911 0.65625 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.5555704236030579 7.549790126404332e-08 -0.8314694762229919 0.5555589199066162 0.0 -0.8314462900161743 0.6562498807907104 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.7071070075035095 7.549790126404332e-08 -0.7071065902709961 0.7070833444595337 0.0 -0.7070833444595337 0.6249998807907104 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.6935200691223145 -0.19509020447731018 -0.6935197114944458 0.6936551928520203 -0.19391460716724396 -0.6936551928520203 0.6249998807907104 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816290855408 0.3826834261417389 -0.6532813310623169 0.6538895964622498 0.3805353045463562 -0.6538895964622498 0.6249998807907104 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.5879380106925964 0.5555701851844788 -0.5879376530647278 0.5892513990402222 0.5527512431144714 -0.5892513990402222 0.6249998807907104 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.6913419365882874 0.5555701851844788 -0.46193957328796387 0.6928922533988953 0.5527512431144714 -0.46296578645706177 0.5937498807907104 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.7681779265403748 0.3826834261417389 -0.5132797956466675 0.7689138650894165 0.3805353045463562 -0.5137485861778259 0.5937498807907104 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.2705981731414795 -0.9238796234130859 -0.2705978751182556 0.27426984906196594 -0.921689510345459 -0.27426984906196594 0.6249998807907104 0.125 0 1.0 0 0.0 0 0.0 0 0.0 0.3928476572036743 -0.8314696550369263 -0.39284729957580566 0.395794540643692 -0.8286385536193848 -0.395794540643692 0.6249998807907104 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 0.4619399309158325 -0.8314696550369263 -0.30865806341171265 0.46540728211402893 -0.8286385536193848 -0.3109835982322693 0.5937498807907104 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 0.318189799785614 -0.9238796234130859 -0.21260732412338257 0.32248908281326294 -0.921689510345459 -0.2154911905527115 0.5937498807907104 0.125 0 1.0 0 0.0 0 0.0 0 0.0 0.6935200691223145 0.19509035348892212 -0.6935197114944458 0.6936551928520203 0.19391460716724396 -0.6936551928520203 0.6249998807907104 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816290855408 0.3826834261417389 -0.6532813310623169 0.6538895964622498 0.3805353045463562 -0.6538895964622498 0.6249998807907104 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.7681779265403748 0.3826834261417389 -0.5132797956466675 0.7689138650894165 0.3805353045463562 -0.5137485861778259 0.5937498807907104 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.8154932856559753 0.19509035348892212 -0.544894814491272 0.8156682252883911 0.19391460716724396 -0.5449995398521423 0.5937498807907104 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.13794973492622375 -0.9807853102684021 -0.13794943690299988 0.1420941799879074 -0.9795831441879272 -0.1420941799879074 0.6249997615814209 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.2705981731414795 -0.9238796234130859 -0.2705978751182556 0.27426984906196594 -0.921689510345459 -0.27426984906196594 0.6249998807907104 0.125 0 1.0 0 0.0 0 0.0 0 0.0 0.318189799785614 -0.9238796234130859 -0.21260732412338257 0.32248908281326294 -0.921689510345459 -0.2154911905527115 0.5937498807907104 0.125 0 1.0 0 0.0 0 0.0 0 0.0 0.16221173107624054 -0.9807853102684021 -0.10838610678911209 0.1670888364315033 -0.9795831441879272 -0.1116367056965828 0.5937497615814209 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.7071070075035095 7.549790126404332e-08 -0.7071065902709961 0.7070833444595337 0.0 -0.7070833444595337 0.6249998807907104 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.6935200691223145 0.19509035348892212 -0.6935197114944458 0.6936551928520203 0.19391460716724396 -0.6936551928520203 0.6249998807907104 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.8154932856559753 0.19509035348892212 -0.544894814491272 0.8156682252883911 0.19391460716724396 -0.5449995398521423 0.5937498807907104 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.8314698338508606 7.549790126404332e-08 -0.5555700063705444 0.8314462900161743 0.0 -0.5555589199066162 0.5937498807907104 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.13794992864131927 0.9807852506637573 -0.137949600815773 0.1420941799879074 0.9795831441879272 -0.1420941799879074 0.6249997615814209 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.6093746423721313 1.0 0 1.0 0 0.0 0 0.0 0 0.0 0.16221193969249725 0.9807852506637573 -0.10838623344898224 0.1670888364315033 0.9795831441879272 -0.1116367056965828 0.5937497615814209 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.6093746423721313 0.0 0 1.0 0 0.0 0 0.0 0 0.0 0.13794973492622375 -0.9807853102684021 -0.13794943690299988 0.1420941799879074 -0.9795831441879272 -0.1420941799879074 0.6249997615814209 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.16221173107624054 -0.9807853102684021 -0.10838610678911209 0.1670888364315033 -0.9795831441879272 -0.1116367056965828 0.5937497615814209 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.6935200691223145 -0.19509020447731018 -0.6935197114944458 0.6936551928520203 -0.19391460716724396 -0.6936551928520203 0.6249998807907104 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.7071070075035095 7.549790126404332e-08 -0.7071065902709961 0.7070833444595337 0.0 -0.7070833444595337 0.6249998807907104 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.8314698338508606 7.549790126404332e-08 -0.5555700063705444 0.8314462900161743 0.0 -0.5555589199066162 0.5937498807907104 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.8154932856559753 -0.19509020447731018 -0.544894814491272 0.8156682252883911 -0.19391460716724396 -0.5449995398521423 0.5937498807907104 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.27059829235076904 0.9238795042037964 -0.2705979645252228 0.27426984906196594 0.921689510345459 -0.27426984906196594 0.6249998807907104 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.13794992864131927 0.9807852506637573 -0.137949600815773 0.1420941799879074 0.9795831441879272 -0.1420941799879074 0.6249997615814209 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.16221193969249725 0.9807852506637573 -0.10838623344898224 0.1670888364315033 0.9795831441879272 -0.1116367056965828 0.5937497615814209 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.31818991899490356 0.9238795042037964 -0.21260739862918854 0.32248908281326294 0.921689510345459 -0.2154911905527115 0.5937498807907104 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816290855408 -0.38268327713012695 -0.6532813906669617 0.6538895964622498 -0.3805353045463562 -0.6538895964622498 0.625 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.6935200691223145 -0.19509020447731018 -0.6935197114944458 0.6936551928520203 -0.19391460716724396 -0.6936551928520203 0.6249998807907104 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.8154932856559753 -0.19509020447731018 -0.544894814491272 0.8156682252883911 -0.19391460716724396 -0.5449995398521423 0.5937498807907104 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.7681779265403748 -0.38268327713012695 -0.5132798552513123 0.7689138650894165 -0.3805353045463562 -0.5137485861778259 0.59375 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.3928476870059967 0.8314695954322815 -0.39284735918045044 0.395794540643692 0.8286385536193848 -0.395794540643692 0.6249998807907104 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 0.27059829235076904 0.9238795042037964 -0.2705979645252228 0.27426984906196594 0.921689510345459 -0.27426984906196594 0.6249998807907104 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.31818991899490356 0.9238795042037964 -0.21260739862918854 0.32248908281326294 0.921689510345459 -0.2154911905527115 0.5937498807907104 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.4619399905204773 0.8314695954322815 -0.3086581230163574 0.46540728211402893 0.8286385536193848 -0.3109835982322693 0.5937498807907104 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 0.5879380106925964 -0.5555701851844788 -0.5879376530647278 0.5892513990402222 -0.5527512431144714 -0.5892513990402222 0.6249998807907104 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816290855408 -0.38268327713012695 -0.6532813906669617 0.6538895964622498 -0.3805353045463562 -0.6538895964622498 0.625 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.7681779265403748 -0.38268327713012695 -0.5132798552513123 0.7689138650894165 -0.3805353045463562 -0.5137485861778259 0.59375 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.6913419365882874 -0.5555701851844788 -0.46193957328796387 0.6928922533988953 -0.5527512431144714 -0.46296578645706177 0.5937498807907104 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.5000001788139343 0.7071067690849304 -0.49999988079071045 0.5021210312843323 0.7040314674377441 -0.5021210312843323 0.6249998807907104 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.3928476870059967 0.8314695954322815 -0.39284735918045044 0.395794540643692 0.8286385536193848 -0.395794540643692 0.6249998807907104 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 0.4619399905204773 0.8314695954322815 -0.3086581230163574 0.46540728211402893 0.8286385536193848 -0.3109835982322693 0.5937498807907104 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 0.5879380106925964 0.7071067690849304 -0.39284729957580566 0.5904415845870972 0.7040314674377441 -0.39451277256011963 0.5937498807907104 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.5000001788139343 -0.7071067690849304 -0.49999988079071045 0.5021210312843323 -0.7040314674377441 -0.5021210312843323 0.6249998807907104 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.5879380106925964 -0.5555701851844788 -0.5879376530647278 0.5892513990402222 -0.5527512431144714 -0.5892513990402222 0.6249998807907104 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.6913419365882874 -0.5555701851844788 -0.46193957328796387 0.6928922533988953 -0.5527512431144714 -0.46296578645706177 0.5937498807907104 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.5879380106925964 -0.7071067690849304 -0.39284729957580566 0.5904415845870972 -0.7040314674377441 -0.39451277256011963 0.5937498807907104 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.5879380106925964 0.5555701851844788 -0.5879376530647278 0.5892513990402222 0.5527512431144714 -0.5892513990402222 0.6249998807907104 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.5000001788139343 0.7071067690849304 -0.49999988079071045 0.5021210312843323 0.7040314674377441 -0.5021210312843323 0.6249998807907104 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.5879380106925964 0.7071067690849304 -0.39284729957580566 0.5904415845870972 0.7040314674377441 -0.39451277256011963 0.5937498807907104 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.6913419365882874 0.5555701851844788 -0.46193957328796387 0.6928922533988953 0.5527512431144714 -0.46296578645706177 0.5937498807907104 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.3928476572036743 -0.8314696550369263 -0.39284729957580566 0.395794540643692 -0.8286385536193848 -0.395794540643692 0.6249998807907104 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 0.5000001788139343 -0.7071067690849304 -0.49999988079071045 0.5021210312843323 -0.7040314674377441 -0.5021210312843323 0.6249998807907104 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.5879380106925964 -0.7071067690849304 -0.39284729957580566 0.5904415845870972 -0.7040314674377441 -0.39451277256011963 0.5937498807907104 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.4619399309158325 -0.8314696550369263 -0.30865806341171265 0.46540728211402893 -0.8286385536193848 -0.3109835982322693 0.5937498807907104 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 0.7681779265403748 -0.38268327713012695 -0.5132798552513123 0.7689138650894165 -0.3805353045463562 -0.5137485861778259 0.59375 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.8154932856559753 -0.19509020447731018 -0.544894814491272 0.8156682252883911 -0.19391460716724396 -0.5449995398521423 0.5937498807907104 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.9061275124549866 -0.19509020447731018 -0.3753299117088318 0.9063386917114258 -0.19391460716724396 -0.3754081726074219 0.5624998807907104 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.8535535335540771 -0.38268327713012695 -0.35355323553085327 0.8543656468391418 -0.3805353045463562 -0.35386210680007935 0.5624998807907104 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.4619399905204773 0.8314695954322815 -0.3086581230163574 0.46540728211402893 0.8286385536193848 -0.3109835982322693 0.5937498807907104 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 0.31818991899490356 0.9238795042037964 -0.21260739862918854 0.32248908281326294 0.921689510345459 -0.2154911905527115 0.5937498807907104 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.3535536825656891 0.9238795042037964 -0.14644642174243927 0.3583483397960663 0.921689510345459 -0.14841151237487793 0.5624998807907104 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.5132802128791809 0.8314695954322815 -0.21260732412338257 0.5171361565589905 0.8286385536193848 -0.2142094224691391 0.5624998807907104 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 0.6913419365882874 -0.5555701851844788 -0.46193957328796387 0.6928922533988953 -0.5527512431144714 -0.46296578645706177 0.5937498807907104 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.7681779265403748 -0.38268327713012695 -0.5132798552513123 0.7689138650894165 -0.3805353045463562 -0.5137485861778259 0.59375 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.8535535335540771 -0.38268327713012695 -0.35355323553085327 0.8543656468391418 -0.3805353045463562 -0.35386210680007935 0.5624998807907104 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.7681779861450195 -0.5555701851844788 -0.3181893825531006 0.7698904275894165 -0.5527512431144714 -0.3188879191875458 0.5624998807907104 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.5879380106925964 0.7071067690849304 -0.39284729957580566 0.5904415845870972 0.7040314674377441 -0.39451277256011963 0.5937498807907104 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.4619399905204773 0.8314695954322815 -0.3086581230163574 0.46540728211402893 0.8286385536193848 -0.3109835982322693 0.5937498807907104 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 0.5132802128791809 0.8314695954322815 -0.21260732412338257 0.5171361565589905 0.8286385536193848 -0.2142094224691391 0.5624998807907104 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816886901855 0.7071067690849304 -0.27059781551361084 0.6560564041137695 0.7040314674377441 -0.2717368006706238 0.5624998807907104 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.5879380106925964 -0.7071067690849304 -0.39284729957580566 0.5904415845870972 -0.7040314674377441 -0.39451277256011963 0.5937498807907104 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.6913419365882874 -0.5555701851844788 -0.46193957328796387 0.6928922533988953 -0.5527512431144714 -0.46296578645706177 0.5937498807907104 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.7681779861450195 -0.5555701851844788 -0.3181893825531006 0.7698904275894165 -0.5527512431144714 -0.3188879191875458 0.5624998807907104 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816886901855 -0.7071067690849304 -0.27059781551361084 0.6560564041137695 -0.7040314674377441 -0.2717368006706238 0.5624998807907104 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.6913419365882874 0.5555701851844788 -0.46193957328796387 0.6928922533988953 0.5527512431144714 -0.46296578645706177 0.5937498807907104 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.5879380106925964 0.7071067690849304 -0.39284729957580566 0.5904415845870972 0.7040314674377441 -0.39451277256011963 0.5937498807907104 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816886901855 0.7071067690849304 -0.27059781551361084 0.6560564041137695 0.7040314674377441 -0.2717368006706238 0.5624998807907104 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.7681779861450195 0.5555701851844788 -0.3181893825531006 0.7698904275894165 0.5527512431144714 -0.3188879191875458 0.5624998807907104 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.4619399309158325 -0.8314696550369263 -0.30865806341171265 0.46540728211402893 -0.8286385536193848 -0.3109835982322693 0.5937498807907104 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 0.5879380106925964 -0.7071067690849304 -0.39284729957580566 0.5904415845870972 -0.7040314674377441 -0.39451277256011963 0.5937498807907104 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816886901855 -0.7071067690849304 -0.27059781551361084 0.6560564041137695 -0.7040314674377441 -0.2717368006706238 0.5624998807907104 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.5132801532745361 -0.8314696550369263 -0.2126072645187378 0.5171361565589905 -0.8286385536193848 -0.2142094224691391 0.5624998807907104 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 0.7681779265403748 0.3826834261417389 -0.5132797956466675 0.7689138650894165 0.3805353045463562 -0.5137485861778259 0.5937498807907104 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.6913419365882874 0.5555701851844788 -0.46193957328796387 0.6928922533988953 0.5527512431144714 -0.46296578645706177 0.5937498807907104 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.7681779861450195 0.5555701851844788 -0.3181893825531006 0.7698904275894165 0.5527512431144714 -0.3188879191875458 0.5624998807907104 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.8535535335540771 0.3826834261417389 -0.3535531759262085 0.8543656468391418 0.3805353045463562 -0.35386210680007935 0.5624998807907104 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.318189799785614 -0.9238796234130859 -0.21260732412338257 0.32248908281326294 -0.921689510345459 -0.2154911905527115 0.5937498807907104 0.125 0 1.0 0 0.0 0 0.0 0 0.0 0.4619399309158325 -0.8314696550369263 -0.30865806341171265 0.46540728211402893 -0.8286385536193848 -0.3109835982322693 0.5937498807907104 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 0.5132801532745361 -0.8314696550369263 -0.2126072645187378 0.5171361565589905 -0.8286385536193848 -0.2142094224691391 0.5624998807907104 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 0.35355353355407715 -0.9238796234130859 -0.1464463770389557 0.3583483397960663 -0.921689510345459 -0.14841151237487793 0.5624998807907104 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.8154932856559753 0.19509035348892212 -0.544894814491272 0.8156682252883911 0.19391460716724396 -0.5449995398521423 0.5937498807907104 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.7681779265403748 0.3826834261417389 -0.5132797956466675 0.7689138650894165 0.3805353045463562 -0.5137485861778259 0.5937498807907104 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.8535535335540771 0.3826834261417389 -0.3535531759262085 0.8543656468391418 0.3805353045463562 -0.35386210680007935 0.5624998807907104 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.9061275124549866 0.19509035348892212 -0.3753299117088318 0.9063386917114258 0.19391460716724396 -0.3754081726074219 0.5624998807907104 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.16221173107624054 -0.9807853102684021 -0.10838610678911209 0.1670888364315033 -0.9795831441879272 -0.1116367056965828 0.5937497615814209 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.318189799785614 -0.9238796234130859 -0.21260732412338257 0.32248908281326294 -0.921689510345459 -0.2154911905527115 0.5937498807907104 0.125 0 1.0 0 0.0 0 0.0 0 0.0 0.35355353355407715 -0.9238796234130859 -0.1464463770389557 0.3583483397960663 -0.921689510345459 -0.14841151237487793 0.5624998807907104 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.18024000525474548 -0.9807853102684021 -0.07465755194425583 0.18564409017562866 -0.9795831441879272 -0.07690664380788803 0.5624997615814209 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.8314698338508606 7.549790126404332e-08 -0.5555700063705444 0.8314462900161743 0.0 -0.5555589199066162 0.5937498807907104 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.8154932856559753 0.19509035348892212 -0.544894814491272 0.8156682252883911 0.19391460716724396 -0.5449995398521423 0.5937498807907104 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.9061275124549866 0.19509035348892212 -0.3753299117088318 0.9063386917114258 0.19391460716724396 -0.3754081726074219 0.5624998807907104 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.9238797426223755 7.549790126404332e-08 -0.3826831579208374 0.9238563179969788 0.0 -0.382671594619751 0.5624998807907104 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.16221193969249725 0.9807852506637573 -0.10838623344898224 0.1670888364315033 0.9795831441879272 -0.1116367056965828 0.5937497615814209 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.5781245231628418 1.0 0 1.0 0 0.0 0 0.0 0 0.0 0.18024024367332458 0.9807852506637573 -0.0746576264500618 0.18564409017562866 0.9795831441879272 -0.07690664380788803 0.5624997615814209 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.5781246423721313 0.0 0 1.0 0 0.0 0 0.0 0 0.0 0.16221173107624054 -0.9807853102684021 -0.10838610678911209 0.1670888364315033 -0.9795831441879272 -0.1116367056965828 0.5937497615814209 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.18024000525474548 -0.9807853102684021 -0.07465755194425583 0.18564409017562866 -0.9795831441879272 -0.07690664380788803 0.5624997615814209 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.8154932856559753 -0.19509020447731018 -0.544894814491272 0.8156682252883911 -0.19391460716724396 -0.5449995398521423 0.5937498807907104 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.8314698338508606 7.549790126404332e-08 -0.5555700063705444 0.8314462900161743 0.0 -0.5555589199066162 0.5937498807907104 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.9238797426223755 7.549790126404332e-08 -0.3826831579208374 0.9238563179969788 0.0 -0.382671594619751 0.5624998807907104 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.9061275124549866 -0.19509020447731018 -0.3753299117088318 0.9063386917114258 -0.19391460716724396 -0.3754081726074219 0.5624998807907104 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.31818991899490356 0.9238795042037964 -0.21260739862918854 0.32248908281326294 0.921689510345459 -0.2154911905527115 0.5937498807907104 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.16221193969249725 0.9807852506637573 -0.10838623344898224 0.1670888364315033 0.9795831441879272 -0.1116367056965828 0.5937497615814209 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.18024024367332458 0.9807852506637573 -0.0746576264500618 0.18564409017562866 0.9795831441879272 -0.07690664380788803 0.5624997615814209 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.3535536825656891 0.9238795042037964 -0.14644642174243927 0.3583483397960663 0.921689510345459 -0.14841151237487793 0.5624998807907104 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.35355353355407715 -0.9238796234130859 -0.1464463770389557 0.3583483397960663 -0.921689510345459 -0.14841151237487793 0.5624998807907104 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.5132801532745361 -0.8314696550369263 -0.2126072645187378 0.5171361565589905 -0.8286385536193848 -0.2142094224691391 0.5624998807907104 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 0.5448952913284302 -0.8314696550369263 -0.1083860695362091 0.5489974617958069 -0.8286385536193848 -0.10919522494077682 0.5312498807907104 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.3753304183483124 -0.9238796234130859 -0.07465755939483643 0.3804132342338562 -0.921689510345459 -0.07565538585186005 0.5312498807907104 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.9061275124549866 0.19509035348892212 -0.3753299117088318 0.9063386917114258 0.19391460716724396 -0.3754081726074219 0.5624998807907104 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.8535535335540771 0.3826834261417389 -0.3535531759262085 0.8543656468391418 0.3805353045463562 -0.35386210680007935 0.5624998807907104 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.9061275720596313 0.3826834261417389 -0.1802397072315216 0.9069795608520508 0.3805353045463562 -0.18039490282535553 0.5312498807907104 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.961939811706543 0.19509035348892212 -0.1913413405418396 0.9621570706367493 0.19391460716724396 -0.191381573677063 0.5312498807907104 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.18024000525474548 -0.9807853102684021 -0.07465755194425583 0.18564409017562866 -0.9795831441879272 -0.07690664380788803 0.5624997615814209 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.35355353355407715 -0.9238796234130859 -0.1464463770389557 0.3583483397960663 -0.921689510345459 -0.14841151237487793 0.5624998807907104 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.3753304183483124 -0.9238796234130859 -0.07465755939483643 0.3804132342338562 -0.921689510345459 -0.07565538585186005 0.5312498807907104 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.19134175777435303 -0.9807853102684021 -0.038059934973716736 0.19708853960037231 -0.9795831441879272 -0.039185766130685806 0.5312497615814209 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.9238797426223755 7.549790126404332e-08 -0.3826831579208374 0.9238563179969788 0.0 -0.382671594619751 0.5624998807907104 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.9061275124549866 0.19509035348892212 -0.3753299117088318 0.9063386917114258 0.19391460716724396 -0.3754081726074219 0.5624998807907104 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.961939811706543 0.19509035348892212 -0.1913413405418396 0.9621570706367493 0.19391460716724396 -0.191381573677063 0.5312498807907104 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.9807854890823364 7.549790126404332e-08 -0.19508999586105347 0.9807733297348022 0.0 -0.19507431983947754 0.5312498807907104 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.18024024367332458 0.9807852506637573 -0.0746576264500618 0.18564409017562866 0.9795831441879272 -0.07690664380788803 0.5624997615814209 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.5468745231628418 1.0 0 1.0 0 0.0 0 0.0 0 0.0 0.19134201109409332 0.9807852506637573 -0.038059964776039124 0.19708853960037231 0.9795831441879272 -0.039185766130685806 0.5312497615814209 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.5468746423721313 0.0 0 1.0 0 0.0 0 0.0 0 0.0 0.18024000525474548 -0.9807853102684021 -0.07465755194425583 0.18564409017562866 -0.9795831441879272 -0.07690664380788803 0.5624997615814209 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.19134175777435303 -0.9807853102684021 -0.038059934973716736 0.19708853960037231 -0.9795831441879272 -0.039185766130685806 0.5312497615814209 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.9061275124549866 -0.19509020447731018 -0.3753299117088318 0.9063386917114258 -0.19391460716724396 -0.3754081726074219 0.5624998807907104 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.9238797426223755 7.549790126404332e-08 -0.3826831579208374 0.9238563179969788 0.0 -0.382671594619751 0.5624998807907104 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.9807854890823364 7.549790126404332e-08 -0.19508999586105347 0.9807733297348022 0.0 -0.19507431983947754 0.5312498807907104 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.961939811706543 -0.19509020447731018 -0.1913413405418396 0.9621570706367493 -0.19391460716724396 -0.191381573677063 0.5312498807907104 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.3535536825656891 0.9238795042037964 -0.14644642174243927 0.3583483397960663 0.921689510345459 -0.14841151237487793 0.5624998807907104 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.18024024367332458 0.9807852506637573 -0.0746576264500618 0.18564409017562866 0.9795831441879272 -0.07690664380788803 0.5624997615814209 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.19134201109409332 0.9807852506637573 -0.038059964776039124 0.19708853960037231 0.9795831441879272 -0.039185766130685806 0.5312497615814209 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.3753305673599243 0.9238795042037964 -0.07465757429599762 0.3804132342338562 0.921689510345459 -0.07565538585186005 0.5312498807907104 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.8535535335540771 -0.38268327713012695 -0.35355323553085327 0.8543656468391418 -0.3805353045463562 -0.35386210680007935 0.5624998807907104 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.9061275124549866 -0.19509020447731018 -0.3753299117088318 0.9063386917114258 -0.19391460716724396 -0.3754081726074219 0.5624998807907104 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.961939811706543 -0.19509020447731018 -0.1913413405418396 0.9621570706367493 -0.19391460716724396 -0.191381573677063 0.5312498807907104 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.9061275720596313 -0.38268327713012695 -0.18023976683616638 0.9069795608520508 -0.3805353045463562 -0.18039490282535553 0.5312498807907104 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.5132802128791809 0.8314695954322815 -0.21260732412338257 0.5171361565589905 0.8286385536193848 -0.2142094224691391 0.5624998807907104 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 0.3535536825656891 0.9238795042037964 -0.14644642174243927 0.3583483397960663 0.921689510345459 -0.14841151237487793 0.5624998807907104 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.3753305673599243 0.9238795042037964 -0.07465757429599762 0.3804132342338562 0.921689510345459 -0.07565538585186005 0.5312498807907104 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.544895350933075 0.8314695954322815 -0.10838611423969269 0.5489974617958069 0.8286385536193848 -0.10919522494077682 0.5312498807907104 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.7681779861450195 -0.5555701851844788 -0.3181893825531006 0.7698904275894165 -0.5527512431144714 -0.3188879191875458 0.5624998807907104 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.8535535335540771 -0.38268327713012695 -0.35355323553085327 0.8543656468391418 -0.3805353045463562 -0.35386210680007935 0.5624998807907104 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.9061275720596313 -0.38268327713012695 -0.18023976683616638 0.9069795608520508 -0.3805353045463562 -0.18039490282535553 0.5312498807907104 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.8154933452606201 -0.5555701851844788 -0.1622113734483719 0.8173161745071411 -0.5527512431144714 -0.16257210075855255 0.5312498807907104 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816886901855 0.7071067690849304 -0.27059781551361084 0.6560564041137695 0.7040314674377441 -0.2717368006706238 0.5624998807907104 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.5132802128791809 0.8314695954322815 -0.21260732412338257 0.5171361565589905 0.8286385536193848 -0.2142094224691391 0.5624998807907104 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 0.544895350933075 0.8314695954322815 -0.10838611423969269 0.5489974617958069 0.8286385536193848 -0.10919522494077682 0.5312498807907104 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.6935201287269592 0.7071067690849304 -0.13794942200183868 0.6964934468269348 0.7040314674377441 -0.13852351903915405 0.5312498807907104 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816886901855 -0.7071067690849304 -0.27059781551361084 0.6560564041137695 -0.7040314674377441 -0.2717368006706238 0.5624998807907104 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.7681779861450195 -0.5555701851844788 -0.3181893825531006 0.7698904275894165 -0.5527512431144714 -0.3188879191875458 0.5624998807907104 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.8154933452606201 -0.5555701851844788 -0.1622113734483719 0.8173161745071411 -0.5527512431144714 -0.16257210075855255 0.5312498807907104 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.6935201287269592 -0.7071067690849304 -0.13794942200183868 0.6964934468269348 -0.7040314674377441 -0.13852351903915405 0.5312498807907104 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.7681779861450195 0.5555701851844788 -0.3181893825531006 0.7698904275894165 0.5527512431144714 -0.3188879191875458 0.5624998807907104 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816886901855 0.7071067690849304 -0.27059781551361084 0.6560564041137695 0.7040314674377441 -0.2717368006706238 0.5624998807907104 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.6935201287269592 0.7071067690849304 -0.13794942200183868 0.6964934468269348 0.7040314674377441 -0.13852351903915405 0.5312498807907104 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.8154933452606201 0.5555701851844788 -0.1622113734483719 0.8173161745071411 0.5527512431144714 -0.16257210075855255 0.5312498807907104 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.5132801532745361 -0.8314696550369263 -0.2126072645187378 0.5171361565589905 -0.8286385536193848 -0.2142094224691391 0.5624998807907104 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816886901855 -0.7071067690849304 -0.27059781551361084 0.6560564041137695 -0.7040314674377441 -0.2717368006706238 0.5624998807907104 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.6935201287269592 -0.7071067690849304 -0.13794942200183868 0.6964934468269348 -0.7040314674377441 -0.13852351903915405 0.5312498807907104 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.5448952913284302 -0.8314696550369263 -0.1083860695362091 0.5489974617958069 -0.8286385536193848 -0.10919522494077682 0.5312498807907104 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.8535535335540771 0.3826834261417389 -0.3535531759262085 0.8543656468391418 0.3805353045463562 -0.35386210680007935 0.5624998807907104 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.7681779861450195 0.5555701851844788 -0.3181893825531006 0.7698904275894165 0.5527512431144714 -0.3188879191875458 0.5624998807907104 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.8154933452606201 0.5555701851844788 -0.1622113734483719 0.8173161745071411 0.5527512431144714 -0.16257210075855255 0.5312498807907104 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.9061275720596313 0.3826834261417389 -0.1802397072315216 0.9069795608520508 0.3805353045463562 -0.18039490282535553 0.5312498807907104 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.544895350933075 0.8314695954322815 -0.10838611423969269 0.5489974617958069 0.8286385536193848 -0.10919522494077682 0.5312498807907104 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.3753305673599243 0.9238795042037964 -0.07465757429599762 0.3804132342338562 0.921689510345459 -0.07565538585186005 0.5312498807907104 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.3826836943626404 0.9238795042037964 3.191853465978056e-07 0.3878597319126129 0.921689510345459 -0.0 0.49999985098838806 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.5555704832077026 0.8314695954322815 3.117347660008818e-07 0.5597705245018005 0.8286385536193848 -0.0 0.49999988079071045 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.8154933452606201 -0.5555701851844788 -0.1622113734483719 0.8173161745071411 -0.5527512431144714 -0.16257210075855255 0.5312498807907104 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.9061275720596313 -0.38268327713012695 -0.18023976683616638 0.9069795608520508 -0.3805353045463562 -0.18039490282535553 0.5312498807907104 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.9238796830177307 -0.38268327713012695 2.2977837943471968e-07 0.9247413277626038 -0.3805353045463562 -0.0 0.4999999403953552 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.8314697742462158 -0.5555701851844788 3.340865077916533e-07 0.8333384394645691 -0.5527512431144714 -0.0 0.49999991059303284 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.6935201287269592 0.7071067690849304 -0.13794942200183868 0.6964934468269348 0.7040314674377441 -0.13852351903915405 0.5312498807907104 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.544895350933075 0.8314695954322815 -0.10838611423969269 0.5489974617958069 0.8286385536193848 -0.10919522494077682 0.5312498807907104 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.5555704832077026 0.8314695954322815 3.117347660008818e-07 0.5597705245018005 0.8286385536193848 -0.0 0.49999988079071045 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.7071069478988647 0.7071067690849304 3.191853465978056e-07 0.7101352214813232 0.7040314674377441 -0.0 0.49999991059303284 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.6935201287269592 -0.7071067690849304 -0.13794942200183868 0.6964934468269348 -0.7040314674377441 -0.13852351903915405 0.5312498807907104 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.8154933452606201 -0.5555701851844788 -0.1622113734483719 0.8173161745071411 -0.5527512431144714 -0.16257210075855255 0.5312498807907104 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.8314697742462158 -0.5555701851844788 3.340865077916533e-07 0.8333384394645691 -0.5527512431144714 -0.0 0.49999991059303284 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.7071069478988647 -0.7071067690849304 3.191853465978056e-07 0.7101352214813232 -0.7040314674377441 -0.0 0.49999991059303284 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.8154933452606201 0.5555701851844788 -0.1622113734483719 0.8173161745071411 0.5527512431144714 -0.16257210075855255 0.5312498807907104 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.6935201287269592 0.7071067690849304 -0.13794942200183868 0.6964934468269348 0.7040314674377441 -0.13852351903915405 0.5312498807907104 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.7071069478988647 0.7071067690849304 3.191853465978056e-07 0.7101352214813232 0.7040314674377441 -0.0 0.49999991059303284 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.8314697742462158 0.5555701851844788 3.340865077916533e-07 0.8333384394645691 0.5527512431144714 -0.0 0.49999991059303284 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.5448952913284302 -0.8314696550369263 -0.1083860695362091 0.5489974617958069 -0.8286385536193848 -0.10919522494077682 0.5312498807907104 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.6935201287269592 -0.7071067690849304 -0.13794942200183868 0.6964934468269348 -0.7040314674377441 -0.13852351903915405 0.5312498807907104 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.7071069478988647 -0.7071067690849304 3.191853465978056e-07 0.7101352214813232 -0.7040314674377441 -0.0 0.49999991059303284 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.5555703639984131 -0.8314696550369263 3.415370883885771e-07 0.5597705245018005 -0.8286385536193848 -0.0 0.49999988079071045 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.9061275720596313 0.3826834261417389 -0.1802397072315216 0.9069795608520508 0.3805353045463562 -0.18039490282535553 0.5312498807907104 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.8154933452606201 0.5555701851844788 -0.1622113734483719 0.8173161745071411 0.5527512431144714 -0.16257210075855255 0.5312498807907104 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.8314697742462158 0.5555701851844788 3.340865077916533e-07 0.8333384394645691 0.5527512431144714 -0.0 0.49999991059303284 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.9238796830177307 0.3826834261417389 2.7448186301626265e-07 0.9247413277626038 0.3805353045463562 -0.0 0.49999991059303284 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.3753304183483124 -0.9238796234130859 -0.07465755939483643 0.3804132342338562 -0.921689510345459 -0.07565538585186005 0.5312498807907104 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.5448952913284302 -0.8314696550369263 -0.1083860695362091 0.5489974617958069 -0.8286385536193848 -0.10919522494077682 0.5312498807907104 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.5555703639984131 -0.8314696550369263 3.415370883885771e-07 0.5597705245018005 -0.8286385536193848 -0.0 0.49999988079071045 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.38268354535102844 -0.9238796234130859 3.0428418540395796e-07 0.3878597319126129 -0.921689510345459 -0.0 0.49999985098838806 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.961939811706543 0.19509035348892212 -0.1913413405418396 0.9621570706367493 0.19391460716724396 -0.191381573677063 0.5312498807907104 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.9061275720596313 0.3826834261417389 -0.1802397072315216 0.9069795608520508 0.3805353045463562 -0.18039490282535553 0.5312498807907104 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.9238796830177307 0.3826834261417389 2.7448186301626265e-07 0.9247413277626038 0.3805353045463562 -0.0 0.49999991059303284 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.9807852506637573 0.19509035348892212 3.936911525670439e-07 0.9809869527816772 0.19391460716724396 -0.0 0.49999991059303284 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.19134175777435303 -0.9807853102684021 -0.038059934973716736 0.19708853960037231 -0.9795831441879272 -0.039185766130685806 0.5312497615814209 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.3753304183483124 -0.9238796234130859 -0.07465755939483643 0.3804132342338562 -0.921689510345459 -0.07565538585186005 0.5312498807907104 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.38268354535102844 -0.9238796234130859 3.0428418540395796e-07 0.3878597319126129 -0.921689510345459 -0.0 0.49999985098838806 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.1950903683900833 -0.9807853102684021 3.080094757024199e-07 0.20096439123153687 -0.9795831441879272 -0.0 0.4999997317790985 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.9807854890823364 7.549790126404332e-08 -0.19508999586105347 0.9807733297348022 0.0 -0.19507431983947754 0.5312498807907104 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.961939811706543 0.19509035348892212 -0.1913413405418396 0.9621570706367493 0.19391460716724396 -0.191381573677063 0.5312498807907104 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.9807852506637573 0.19509035348892212 3.936911525670439e-07 0.9809869527816772 0.19391460716724396 -0.0 0.49999991059303284 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 1.000000238418579 7.549790126404332e-08 3.7878999137319624e-07 1.0 0.0 -0.0 0.49999991059303284 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.19134201109409332 0.9807852506637573 -0.038059964776039124 0.19708853960037231 0.9795831441879272 -0.039185766130685806 0.5312497615814209 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.5156245231628418 1.0 0 1.0 0 0.0 0 0.0 0 0.0 0.19509060680866241 0.9807852506637573 3.2663592719472945e-07 0.20096439123153687 0.9795831441879272 -0.0 0.4999997019767761 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.5156246423721313 0.0 0 1.0 0 0.0 0 0.0 0 0.0 0.19134175777435303 -0.9807853102684021 -0.038059934973716736 0.19708853960037231 -0.9795831441879272 -0.039185766130685806 0.5312497615814209 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.1950903683900833 -0.9807853102684021 3.080094757024199e-07 0.20096439123153687 -0.9795831441879272 -0.0 0.4999997317790985 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.961939811706543 -0.19509020447731018 -0.1913413405418396 0.9621570706367493 -0.19391460716724396 -0.191381573677063 0.5312498807907104 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.9807854890823364 7.549790126404332e-08 -0.19508999586105347 0.9807733297348022 0.0 -0.19507431983947754 0.5312498807907104 0.5 0 1.0 0 0.0 0 0.0 0 0.0 1.000000238418579 7.549790126404332e-08 3.7878999137319624e-07 1.0 0.0 -0.0 0.49999991059303284 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.9807852506637573 -0.19509020447731018 3.936911525670439e-07 0.9809869527816772 -0.19391460716724396 -0.0 0.49999991059303284 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.3753305673599243 0.9238795042037964 -0.07465757429599762 0.3804132342338562 0.921689510345459 -0.07565538585186005 0.5312498807907104 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.19134201109409332 0.9807852506637573 -0.038059964776039124 0.19708853960037231 0.9795831441879272 -0.039185766130685806 0.5312497615814209 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.19509060680866241 0.9807852506637573 3.2663592719472945e-07 0.20096439123153687 0.9795831441879272 -0.0 0.4999997019767761 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.3826836943626404 0.9238795042037964 3.191853465978056e-07 0.3878597319126129 0.921689510345459 -0.0 0.49999985098838806 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.9061275720596313 -0.38268327713012695 -0.18023976683616638 0.9069795608520508 -0.3805353045463562 -0.18039490282535553 0.5312498807907104 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.961939811706543 -0.19509020447731018 -0.1913413405418396 0.9621570706367493 -0.19391460716724396 -0.191381573677063 0.5312498807907104 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.9807852506637573 -0.19509020447731018 3.936911525670439e-07 0.9809869527816772 -0.19391460716724396 -0.0 0.49999991059303284 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.9238796830177307 -0.38268327713012695 2.2977837943471968e-07 0.9247413277626038 -0.3805353045463562 -0.0 0.4999999403953552 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.9807852506637573 0.19509035348892212 3.936911525670439e-07 0.9809869527816772 0.19391460716724396 -0.0 0.49999991059303284 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.9238796830177307 0.3826834261417389 2.7448186301626265e-07 0.9247413277626038 0.3805353045463562 -0.0 0.49999991059303284 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.9061275720596313 0.3826834261417389 0.18024025857448578 0.9069795608520508 0.3805353045463562 0.18039490282535553 0.46874991059303284 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.9619396924972534 0.19509035348892212 0.19134210050106049 0.9621570706367493 0.19391460716724396 0.191381573677063 0.46874991059303284 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.1950903683900833 -0.9807853102684021 3.080094757024199e-07 0.20096439123153687 -0.9795831441879272 -0.0 0.4999997317790985 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.38268354535102844 -0.9238796234130859 3.0428418540395796e-07 0.3878597319126129 -0.921689510345459 -0.0 0.49999985098838806 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.37533038854599 -0.9238796234130859 0.07465816289186478 0.3804132342338562 -0.921689510345459 0.07565538585186005 0.46874985098838806 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.19134175777435303 -0.9807853102684021 0.03806055337190628 0.19708853960037231 -0.9795831441879272 0.039185766130685806 0.4687497317790985 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 1.000000238418579 7.549790126404332e-08 3.7878999137319624e-07 1.0 0.0 -0.0 0.49999991059303284 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.9807852506637573 0.19509035348892212 3.936911525670439e-07 0.9809869527816772 0.19391460716724396 -0.0 0.49999991059303284 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.9619396924972534 0.19509035348892212 0.19134210050106049 0.9621570706367493 0.19391460716724396 0.191381573677063 0.46874991059303284 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.9807854890823364 7.549790126404332e-08 0.19509074091911316 0.9807733297348022 0.0 0.19507431983947754 0.46874991059303284 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.19509060680866241 0.9807852506637573 3.2663592719472945e-07 0.20096439123153687 0.9795831441879272 -0.0 0.4999997019767761 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.484374463558197 1.0 0 1.0 0 0.0 0 0.0 0 0.0 0.19134199619293213 0.9807852506637573 0.038060616701841354 0.19708853960037231 0.9795831441879272 0.039185766130685806 0.4687497019767761 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.4843745827674866 0.0 0 1.0 0 0.0 0 0.0 0 0.0 0.1950903683900833 -0.9807853102684021 3.080094757024199e-07 0.20096439123153687 -0.9795831441879272 -0.0 0.4999997317790985 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.19134175777435303 -0.9807853102684021 0.03806055337190628 0.19708853960037231 -0.9795831441879272 0.039185766130685806 0.4687497317790985 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.9807852506637573 -0.19509020447731018 3.936911525670439e-07 0.9809869527816772 -0.19391460716724396 -0.0 0.49999991059303284 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 1.000000238418579 7.549790126404332e-08 3.7878999137319624e-07 1.0 0.0 -0.0 0.49999991059303284 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.9807854890823364 7.549790126404332e-08 0.19509074091911316 0.9807733297348022 0.0 0.19507431983947754 0.46874991059303284 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.9619396924972534 -0.19509020447731018 0.19134210050106049 0.9621570706367493 -0.19391460716724396 0.191381573677063 0.46874991059303284 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.3826836943626404 0.9238795042037964 3.191853465978056e-07 0.3878597319126129 0.921689510345459 -0.0 0.49999985098838806 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.19509060680866241 0.9807852506637573 3.2663592719472945e-07 0.20096439123153687 0.9795831441879272 -0.0 0.4999997019767761 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.19134199619293213 0.9807852506637573 0.038060616701841354 0.19708853960037231 0.9795831441879272 0.039185766130685806 0.4687497019767761 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.37533053755760193 0.9238795042037964 0.07465820759534836 0.3804132342338562 0.921689510345459 0.07565538585186005 0.46874985098838806 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.9238796830177307 -0.38268327713012695 2.2977837943471968e-07 0.9247413277626038 -0.3805353045463562 -0.0 0.4999999403953552 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.9807852506637573 -0.19509020447731018 3.936911525670439e-07 0.9809869527816772 -0.19391460716724396 -0.0 0.49999991059303284 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.9619396924972534 -0.19509020447731018 0.19134210050106049 0.9621570706367493 -0.19391460716724396 0.191381573677063 0.46874991059303284 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.9061275720596313 -0.38268327713012695 0.1802402138710022 0.9069795608520508 -0.3805353045463562 0.18039490282535553 0.4687499403953552 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.5555704832077026 0.8314695954322815 3.117347660008818e-07 0.5597705245018005 0.8286385536193848 -0.0 0.49999988079071045 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.3826836943626404 0.9238795042037964 3.191853465978056e-07 0.3878597319126129 0.921689510345459 -0.0 0.49999985098838806 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.37533053755760193 0.9238795042037964 0.07465820759534836 0.3804132342338562 0.921689510345459 0.07565538585186005 0.46874985098838806 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.544895350933075 0.8314695954322815 0.10838674008846283 0.5489974617958069 0.8286385536193848 0.10919522494077682 0.46874988079071045 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.8314697742462158 -0.5555701851844788 3.340865077916533e-07 0.8333384394645691 -0.5527512431144714 -0.0 0.49999991059303284 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.9238796830177307 -0.38268327713012695 2.2977837943471968e-07 0.9247413277626038 -0.3805353045463562 -0.0 0.4999999403953552 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.9061275720596313 -0.38268327713012695 0.1802402138710022 0.9069795608520508 -0.3805353045463562 0.18039490282535553 0.4687499403953552 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.8154932856559753 -0.5555701851844788 0.16221202909946442 0.8173161745071411 -0.5527512431144714 0.16257210075855255 0.46874991059303284 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.7071069478988647 0.7071067690849304 3.191853465978056e-07 0.7101352214813232 0.7040314674377441 -0.0 0.49999991059303284 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.5555704832077026 0.8314695954322815 3.117347660008818e-07 0.5597705245018005 0.8286385536193848 -0.0 0.49999988079071045 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.544895350933075 0.8314695954322815 0.10838674008846283 0.5489974617958069 0.8286385536193848 0.10919522494077682 0.46874988079071045 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.6935200691223145 0.7071067690849304 0.13795003294944763 0.6964934468269348 0.7040314674377441 0.13852351903915405 0.46874991059303284 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.7071069478988647 -0.7071067690849304 3.191853465978056e-07 0.7101352214813232 -0.7040314674377441 -0.0 0.49999991059303284 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.8314697742462158 -0.5555701851844788 3.340865077916533e-07 0.8333384394645691 -0.5527512431144714 -0.0 0.49999991059303284 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.8154932856559753 -0.5555701851844788 0.16221202909946442 0.8173161745071411 -0.5527512431144714 0.16257210075855255 0.46874991059303284 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.6935200691223145 -0.7071067690849304 0.13795003294944763 0.6964934468269348 -0.7040314674377441 0.13852351903915405 0.46874991059303284 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.8314697742462158 0.5555701851844788 3.340865077916533e-07 0.8333384394645691 0.5527512431144714 -0.0 0.49999991059303284 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.7071069478988647 0.7071067690849304 3.191853465978056e-07 0.7101352214813232 0.7040314674377441 -0.0 0.49999991059303284 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.6935200691223145 0.7071067690849304 0.13795003294944763 0.6964934468269348 0.7040314674377441 0.13852351903915405 0.46874991059303284 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.8154932856559753 0.5555701851844788 0.16221202909946442 0.8173161745071411 0.5527512431144714 0.16257210075855255 0.46874991059303284 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.5555703639984131 -0.8314696550369263 3.415370883885771e-07 0.5597705245018005 -0.8286385536193848 -0.0 0.49999988079071045 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.7071069478988647 -0.7071067690849304 3.191853465978056e-07 0.7101352214813232 -0.7040314674377441 -0.0 0.49999991059303284 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.6935200691223145 -0.7071067690849304 0.13795003294944763 0.6964934468269348 -0.7040314674377441 0.13852351903915405 0.46874991059303284 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.5448952317237854 -0.8314696550369263 0.10838674753904343 0.5489974617958069 -0.8286385536193848 0.10919522494077682 0.46874988079071045 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.9238796830177307 0.3826834261417389 2.7448186301626265e-07 0.9247413277626038 0.3805353045463562 -0.0 0.49999991059303284 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.8314697742462158 0.5555701851844788 3.340865077916533e-07 0.8333384394645691 0.5527512431144714 -0.0 0.49999991059303284 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.8154932856559753 0.5555701851844788 0.16221202909946442 0.8173161745071411 0.5527512431144714 0.16257210075855255 0.46874991059303284 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.9061275720596313 0.3826834261417389 0.18024025857448578 0.9069795608520508 0.3805353045463562 0.18039490282535553 0.46874991059303284 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.38268354535102844 -0.9238796234130859 3.0428418540395796e-07 0.3878597319126129 -0.921689510345459 -0.0 0.49999985098838806 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.5555703639984131 -0.8314696550369263 3.415370883885771e-07 0.5597705245018005 -0.8286385536193848 -0.0 0.49999988079071045 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.5448952317237854 -0.8314696550369263 0.10838674753904343 0.5489974617958069 -0.8286385536193848 0.10919522494077682 0.46874988079071045 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.37533038854599 -0.9238796234130859 0.07465816289186478 0.3804132342338562 -0.921689510345459 0.07565538585186005 0.46874985098838806 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.8154932856559753 -0.5555701851844788 0.16221202909946442 0.8173161745071411 -0.5527512431144714 0.16257210075855255 0.46874991059303284 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.9061275720596313 -0.38268327713012695 0.1802402138710022 0.9069795608520508 -0.3805353045463562 0.18039490282535553 0.4687499403953552 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.8535535335540771 -0.38268327713012695 0.3535536527633667 0.8543656468391418 -0.3805353045463562 0.35386210680007935 0.4374999403953552 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.7681778073310852 -0.5555701851844788 0.3181900382041931 0.7698904275894165 -0.5527512431144714 0.3188879191875458 0.43749991059303284 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.6935200691223145 0.7071067690849304 0.13795003294944763 0.6964934468269348 0.7040314674377441 0.13852351903915405 0.46874991059303284 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.544895350933075 0.8314695954322815 0.10838674008846283 0.5489974617958069 0.8286385536193848 0.10919522494077682 0.46874988079071045 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.5132801532745361 0.8314695954322815 0.21260792016983032 0.5171361565589905 0.8286385536193848 0.2142094224691391 0.43749988079071045 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816290855408 0.7071067690849304 0.2705984115600586 0.6560564041137695 0.7040314674377441 0.2717368006706238 0.43749991059303284 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.6935200691223145 -0.7071067690849304 0.13795003294944763 0.6964934468269348 -0.7040314674377441 0.13852351903915405 0.46874991059303284 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.8154932856559753 -0.5555701851844788 0.16221202909946442 0.8173161745071411 -0.5527512431144714 0.16257210075855255 0.46874991059303284 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.7681778073310852 -0.5555701851844788 0.3181900382041931 0.7698904275894165 -0.5527512431144714 0.3188879191875458 0.43749991059303284 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816290855408 -0.7071067690849304 0.2705984115600586 0.6560564041137695 -0.7040314674377441 0.2717368006706238 0.43749991059303284 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.8154932856559753 0.5555701851844788 0.16221202909946442 0.8173161745071411 0.5527512431144714 0.16257210075855255 0.46874991059303284 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.6935200691223145 0.7071067690849304 0.13795003294944763 0.6964934468269348 0.7040314674377441 0.13852351903915405 0.46874991059303284 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816290855408 0.7071067690849304 0.2705984115600586 0.6560564041137695 0.7040314674377441 0.2717368006706238 0.43749991059303284 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.7681778073310852 0.5555701851844788 0.3181900382041931 0.7698904275894165 0.5527512431144714 0.3188879191875458 0.43749991059303284 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.5448952317237854 -0.8314696550369263 0.10838674753904343 0.5489974617958069 -0.8286385536193848 0.10919522494077682 0.46874988079071045 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.6935200691223145 -0.7071067690849304 0.13795003294944763 0.6964934468269348 -0.7040314674377441 0.13852351903915405 0.46874991059303284 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816290855408 -0.7071067690849304 0.2705984115600586 0.6560564041137695 -0.7040314674377441 0.2717368006706238 0.43749991059303284 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.5132800340652466 -0.8314696550369263 0.21260792016983032 0.5171361565589905 -0.8286385536193848 0.2142094224691391 0.43749988079071045 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.9061275720596313 0.3826834261417389 0.18024025857448578 0.9069795608520508 0.3805353045463562 0.18039490282535553 0.46874991059303284 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.8154932856559753 0.5555701851844788 0.16221202909946442 0.8173161745071411 0.5527512431144714 0.16257210075855255 0.46874991059303284 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.7681778073310852 0.5555701851844788 0.3181900382041931 0.7698904275894165 0.5527512431144714 0.3188879191875458 0.43749991059303284 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.8535535335540771 0.3826834261417389 0.3535537123680115 0.8543656468391418 0.3805353045463562 0.35386210680007935 0.4374999403953552 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.37533038854599 -0.9238796234130859 0.07465816289186478 0.3804132342338562 -0.921689510345459 0.07565538585186005 0.46874985098838806 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.5448952317237854 -0.8314696550369263 0.10838674753904343 0.5489974617958069 -0.8286385536193848 0.10919522494077682 0.46874988079071045 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.5132800340652466 -0.8314696550369263 0.21260792016983032 0.5171361565589905 -0.8286385536193848 0.2142094224691391 0.43749988079071045 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.3535534739494324 -0.9238796234130859 0.14644695818424225 0.3583483397960663 -0.921689510345459 0.14841151237487793 0.43749985098838806 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.9619396924972534 0.19509035348892212 0.19134210050106049 0.9621570706367493 0.19391460716724396 0.191381573677063 0.46874991059303284 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.9061275720596313 0.3826834261417389 0.18024025857448578 0.9069795608520508 0.3805353045463562 0.18039490282535553 0.46874991059303284 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.8535535335540771 0.3826834261417389 0.3535537123680115 0.8543656468391418 0.3805353045463562 0.35386210680007935 0.4374999403953552 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.9061273336410522 0.19509035348892212 0.3753306269645691 0.9063386917114258 0.19391460716724396 0.3754081726074219 0.43749991059303284 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.19134175777435303 -0.9807853102684021 0.03806055337190628 0.19708853960037231 -0.9795831441879272 0.039185766130685806 0.4687497317790985 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.37533038854599 -0.9238796234130859 0.07465816289186478 0.3804132342338562 -0.921689510345459 0.07565538585186005 0.46874985098838806 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.3535534739494324 -0.9238796234130859 0.14644695818424225 0.3583483397960663 -0.921689510345459 0.14841151237487793 0.43749985098838806 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.1802399903535843 -0.9807853102684021 0.07465816289186478 0.18564409017562866 -0.9795831441879272 0.07690664380788803 0.4374997317790985 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.9807854890823364 7.549790126404332e-08 0.19509074091911316 0.9807733297348022 0.0 0.19507431983947754 0.46874991059303284 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.9619396924972534 0.19509035348892212 0.19134210050106049 0.9621570706367493 0.19391460716724396 0.191381573677063 0.46874991059303284 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.9061273336410522 0.19509035348892212 0.3753306269645691 0.9063386917114258 0.19391460716724396 0.3754081726074219 0.43749991059303284 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.9238796830177307 7.549790126404332e-08 0.3826838731765747 0.9238563179969788 0.0 0.382671594619751 0.43749991059303284 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.19134199619293213 0.9807852506637573 0.038060616701841354 0.19708853960037231 0.9795831441879272 0.039185766130685806 0.4687497019767761 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.453124463558197 1.0 0 1.0 0 0.0 0 0.0 0 0.0 0.180240198969841 0.9807852506637573 0.07465826719999313 0.18564409017562866 0.9795831441879272 0.07690664380788803 0.4374997317790985 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.45312461256980896 0.0 0 1.0 0 0.0 0 0.0 0 0.0 0.19134175777435303 -0.9807853102684021 0.03806055337190628 0.19708853960037231 -0.9795831441879272 0.039185766130685806 0.4687497317790985 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.1802399903535843 -0.9807853102684021 0.07465816289186478 0.18564409017562866 -0.9795831441879272 0.07690664380788803 0.4374997317790985 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.9619396924972534 -0.19509020447731018 0.19134210050106049 0.9621570706367493 -0.19391460716724396 0.191381573677063 0.46874991059303284 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.9807854890823364 7.549790126404332e-08 0.19509074091911316 0.9807733297348022 0.0 0.19507431983947754 0.46874991059303284 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.9238796830177307 7.549790126404332e-08 0.3826838731765747 0.9238563179969788 0.0 0.382671594619751 0.43749991059303284 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.9061273336410522 -0.19509020447731018 0.3753306269645691 0.9063386917114258 -0.19391460716724396 0.3754081726074219 0.43749991059303284 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.37533053755760193 0.9238795042037964 0.07465820759534836 0.3804132342338562 0.921689510345459 0.07565538585186005 0.46874985098838806 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.19134199619293213 0.9807852506637573 0.038060616701841354 0.19708853960037231 0.9795831441879272 0.039185766130685806 0.4687497019767761 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.180240198969841 0.9807852506637573 0.07465826719999313 0.18564409017562866 0.9795831441879272 0.07690664380788803 0.4374997317790985 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.3535536229610443 0.9238795042037964 0.14644701778888702 0.3583483397960663 0.921689510345459 0.14841151237487793 0.43749985098838806 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.9061275720596313 -0.38268327713012695 0.1802402138710022 0.9069795608520508 -0.3805353045463562 0.18039490282535553 0.4687499403953552 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.9619396924972534 -0.19509020447731018 0.19134210050106049 0.9621570706367493 -0.19391460716724396 0.191381573677063 0.46874991059303284 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.9061273336410522 -0.19509020447731018 0.3753306269645691 0.9063386917114258 -0.19391460716724396 0.3754081726074219 0.43749991059303284 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.8535535335540771 -0.38268327713012695 0.3535536527633667 0.8543656468391418 -0.3805353045463562 0.35386210680007935 0.4374999403953552 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.544895350933075 0.8314695954322815 0.10838674008846283 0.5489974617958069 0.8286385536193848 0.10919522494077682 0.46874988079071045 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.37533053755760193 0.9238795042037964 0.07465820759534836 0.3804132342338562 0.921689510345459 0.07565538585186005 0.46874985098838806 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.3535536229610443 0.9238795042037964 0.14644701778888702 0.3583483397960663 0.921689510345459 0.14841151237487793 0.43749985098838806 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.5132801532745361 0.8314695954322815 0.21260792016983032 0.5171361565589905 0.8286385536193848 0.2142094224691391 0.43749988079071045 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.1802399903535843 -0.9807853102684021 0.07465816289186478 0.18564409017562866 -0.9795831441879272 0.07690664380788803 0.4374997317790985 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.3535534739494324 -0.9238796234130859 0.14644695818424225 0.3583483397960663 -0.921689510345459 0.14841151237487793 0.43749985098838806 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.31818971037864685 -0.9238796234130859 0.21260789036750793 0.32248908281326294 -0.921689510345459 0.2154911905527115 0.40624985098838806 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.16221170127391815 -0.9807853102684021 0.10838671773672104 0.1670888364315033 -0.9795831441879272 0.1116367056965828 0.4062497615814209 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.9238796830177307 7.549790126404332e-08 0.3826838731765747 0.9238563179969788 0.0 0.382671594619751 0.43749991059303284 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.9061273336410522 0.19509035348892212 0.3753306269645691 0.9063386917114258 0.19391460716724396 0.3754081726074219 0.43749991059303284 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.8154930472373962 0.19509035348892212 0.5448954105377197 0.8156682252883911 0.19391460716724396 0.5449995398521423 0.40624991059303284 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.831469714641571 7.549790126404332e-08 0.555570662021637 0.8314462900161743 0.0 0.5555589199066162 0.40624991059303284 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.180240198969841 0.9807852506637573 0.07465826719999313 0.18564409017562866 0.9795831441879272 0.07690664380788803 0.4374997317790985 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.4218744933605194 1.0 0 1.0 0 0.0 0 0.0 0 0.0 0.16221188008785248 0.9807852506637573 0.10838685184717178 0.1670888364315033 0.9795831441879272 0.1116367056965828 0.4062497317790985 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.42187461256980896 0.0 0 1.0 0 0.0 0 0.0 0 0.0 0.1802399903535843 -0.9807853102684021 0.07465816289186478 0.18564409017562866 -0.9795831441879272 0.07690664380788803 0.4374997317790985 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.16221170127391815 -0.9807853102684021 0.10838671773672104 0.1670888364315033 -0.9795831441879272 0.1116367056965828 0.4062497615814209 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.9061273336410522 -0.19509020447731018 0.3753306269645691 0.9063386917114258 -0.19391460716724396 0.3754081726074219 0.43749991059303284 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.9238796830177307 7.549790126404332e-08 0.3826838731765747 0.9238563179969788 0.0 0.382671594619751 0.43749991059303284 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.831469714641571 7.549790126404332e-08 0.555570662021637 0.8314462900161743 0.0 0.5555589199066162 0.40624991059303284 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.8154930472373962 -0.19509020447731018 0.5448954105377197 0.8156682252883911 -0.19391460716724396 0.5449995398521423 0.40624991059303284 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.3535536229610443 0.9238795042037964 0.14644701778888702 0.3583483397960663 0.921689510345459 0.14841151237487793 0.43749985098838806 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.180240198969841 0.9807852506637573 0.07465826719999313 0.18564409017562866 0.9795831441879272 0.07690664380788803 0.4374997317790985 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.16221188008785248 0.9807852506637573 0.10838685184717178 0.1670888364315033 0.9795831441879272 0.1116367056965828 0.4062497317790985 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.3181898593902588 0.9238795042037964 0.2126079499721527 0.32248908281326294 0.921689510345459 0.2154911905527115 0.40624988079071045 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.8535535335540771 -0.38268327713012695 0.3535536527633667 0.8543656468391418 -0.3805353045463562 0.35386210680007935 0.4374999403953552 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.9061273336410522 -0.19509020447731018 0.3753306269645691 0.9063386917114258 -0.19391460716724396 0.3754081726074219 0.43749991059303284 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.8154930472373962 -0.19509020447731018 0.5448954105377197 0.8156682252883911 -0.19391460716724396 0.5449995398521423 0.40624991059303284 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.76817786693573 -0.38268327713012695 0.5132802724838257 0.7689138650894165 -0.3805353045463562 0.5137485861778259 0.4062499403953552 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.5132801532745361 0.8314695954322815 0.21260792016983032 0.5171361565589905 0.8286385536193848 0.2142094224691391 0.43749988079071045 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.3535536229610443 0.9238795042037964 0.14644701778888702 0.3583483397960663 0.921689510345459 0.14841151237487793 0.43749985098838806 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.3181898593902588 0.9238795042037964 0.2126079499721527 0.32248908281326294 0.921689510345459 0.2154911905527115 0.40624988079071045 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.4619399309158325 0.8314695954322815 0.3086586892604828 0.46540728211402893 0.8286385536193848 0.3109835982322693 0.40624991059303284 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.7681778073310852 -0.5555701851844788 0.3181900382041931 0.7698904275894165 -0.5527512431144714 0.3188879191875458 0.43749991059303284 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.8535535335540771 -0.38268327713012695 0.3535536527633667 0.8543656468391418 -0.3805353045463562 0.35386210680007935 0.4374999403953552 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.76817786693573 -0.38268327713012695 0.5132802724838257 0.7689138650894165 -0.3805353045463562 0.5137485861778259 0.4062499403953552 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.691341757774353 -0.5555701851844788 0.4619401693344116 0.6928922533988953 -0.5527512431144714 0.46296578645706177 0.40624991059303284 0.31250011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816290855408 0.7071067690849304 0.2705984115600586 0.6560564041137695 0.7040314674377441 0.2717368006706238 0.43749991059303284 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.5132801532745361 0.8314695954322815 0.21260792016983032 0.5171361565589905 0.8286385536193848 0.2142094224691391 0.43749988079071045 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.4619399309158325 0.8314695954322815 0.3086586892604828 0.46540728211402893 0.8286385536193848 0.3109835982322693 0.40624991059303284 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.5879379510879517 0.7071067690849304 0.39284783601760864 0.5904415845870972 0.7040314674377441 0.39451277256011963 0.40624991059303284 0.7499998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816290855408 -0.7071067690849304 0.2705984115600586 0.6560564041137695 -0.7040314674377441 0.2717368006706238 0.43749991059303284 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.7681778073310852 -0.5555701851844788 0.3181900382041931 0.7698904275894165 -0.5527512431144714 0.3188879191875458 0.43749991059303284 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.691341757774353 -0.5555701851844788 0.4619401693344116 0.6928922533988953 -0.5527512431144714 0.46296578645706177 0.40624991059303284 0.31250011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.5879379510879517 -0.7071067690849304 0.39284783601760864 0.5904415845870972 -0.7040314674377441 0.39451277256011963 0.40624991059303284 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.7681778073310852 0.5555701851844788 0.3181900382041931 0.7698904275894165 0.5527512431144714 0.3188879191875458 0.43749991059303284 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816290855408 0.7071067690849304 0.2705984115600586 0.6560564041137695 0.7040314674377441 0.2717368006706238 0.43749991059303284 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.5879379510879517 0.7071067690849304 0.39284783601760864 0.5904415845870972 0.7040314674377441 0.39451277256011963 0.40624991059303284 0.7499998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.691341757774353 0.5555701851844788 0.4619401693344116 0.6928922533988953 0.5527512431144714 0.46296578645706177 0.40624991059303284 0.6874999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.5132800340652466 -0.8314696550369263 0.21260792016983032 0.5171361565589905 -0.8286385536193848 0.2142094224691391 0.43749988079071045 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816290855408 -0.7071067690849304 0.2705984115600586 0.6560564041137695 -0.7040314674377441 0.2717368006706238 0.43749991059303284 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.5879379510879517 -0.7071067690849304 0.39284783601760864 0.5904415845870972 -0.7040314674377441 0.39451277256011963 0.40624991059303284 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.46193981170654297 -0.8314696550369263 0.3086586594581604 0.46540728211402893 -0.8286385536193848 0.3109835982322693 0.40624988079071045 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.8535535335540771 0.3826834261417389 0.3535537123680115 0.8543656468391418 0.3805353045463562 0.35386210680007935 0.4374999403953552 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.7681778073310852 0.5555701851844788 0.3181900382041931 0.7698904275894165 0.5527512431144714 0.3188879191875458 0.43749991059303284 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.691341757774353 0.5555701851844788 0.4619401693344116 0.6928922533988953 0.5527512431144714 0.46296578645706177 0.40624991059303284 0.6874999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.76817786693573 0.3826834261417389 0.5132802724838257 0.7689138650894165 0.3805353045463562 0.5137485861778259 0.4062499403953552 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.3535534739494324 -0.9238796234130859 0.14644695818424225 0.3583483397960663 -0.921689510345459 0.14841151237487793 0.43749985098838806 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.5132800340652466 -0.8314696550369263 0.21260792016983032 0.5171361565589905 -0.8286385536193848 0.2142094224691391 0.43749988079071045 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.46193981170654297 -0.8314696550369263 0.3086586594581604 0.46540728211402893 -0.8286385536193848 0.3109835982322693 0.40624988079071045 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.31818971037864685 -0.9238796234130859 0.21260789036750793 0.32248908281326294 -0.921689510345459 0.2154911905527115 0.40624985098838806 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.9061273336410522 0.19509035348892212 0.3753306269645691 0.9063386917114258 0.19391460716724396 0.3754081726074219 0.43749991059303284 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.8535535335540771 0.3826834261417389 0.3535537123680115 0.8543656468391418 0.3805353045463562 0.35386210680007935 0.4374999403953552 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.76817786693573 0.3826834261417389 0.5132802724838257 0.7689138650894165 0.3805353045463562 0.5137485861778259 0.4062499403953552 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.8154930472373962 0.19509035348892212 0.5448954105377197 0.8156682252883911 0.19391460716724396 0.5449995398521423 0.40624991059303284 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.5879379510879517 -0.7071067690849304 0.39284783601760864 0.5904415845870972 -0.7040314674377441 0.39451277256011963 0.40624991059303284 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.691341757774353 -0.5555701851844788 0.4619401693344116 0.6928922533988953 -0.5527512431144714 0.46296578645706177 0.40624991059303284 0.31250011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.5879377722740173 -0.5555701851844788 0.5879381895065308 0.5892513990402222 -0.5527512431144714 0.5892513990402222 0.37499991059303284 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.5000000596046448 -0.7071067690849304 0.5000003576278687 0.5021210312843323 -0.7040314674377441 0.5021210312843323 0.37499991059303284 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.691341757774353 0.5555701851844788 0.4619401693344116 0.6928922533988953 0.5527512431144714 0.46296578645706177 0.40624991059303284 0.6874999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.5879379510879517 0.7071067690849304 0.39284783601760864 0.5904415845870972 0.7040314674377441 0.39451277256011963 0.40624991059303284 0.7499998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.5000000596046448 0.7071067690849304 0.5000003576278687 0.5021210312843323 0.7040314674377441 0.5021210312843323 0.37499991059303284 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.5879377722740173 0.5555701851844788 0.5879381895065308 0.5892513990402222 0.5527512431144714 0.5892513990402222 0.37499991059303284 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.46193981170654297 -0.8314696550369263 0.3086586594581604 0.46540728211402893 -0.8286385536193848 0.3109835982322693 0.40624988079071045 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.5879379510879517 -0.7071067690849304 0.39284783601760864 0.5904415845870972 -0.7040314674377441 0.39451277256011963 0.40624991059303284 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.5000000596046448 -0.7071067690849304 0.5000003576278687 0.5021210312843323 -0.7040314674377441 0.5021210312843323 0.37499991059303284 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.3928475081920624 -0.8314696550369263 0.39284783601760864 0.395794540643692 -0.8286385536193848 0.395794540643692 0.37499991059303284 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.76817786693573 0.3826834261417389 0.5132802724838257 0.7689138650894165 0.3805353045463562 0.5137485861778259 0.4062499403953552 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.691341757774353 0.5555701851844788 0.4619401693344116 0.6928922533988953 0.5527512431144714 0.46296578645706177 0.40624991059303284 0.6874999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.5879377722740173 0.5555701851844788 0.5879381895065308 0.5892513990402222 0.5527512431144714 0.5892513990402222 0.37499991059303284 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816290855408 0.3826834261417389 0.6532818078994751 0.6538895964622498 0.3805353045463562 0.6538895964622498 0.3749999701976776 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.31818971037864685 -0.9238796234130859 0.21260789036750793 0.32248908281326294 -0.921689510345459 0.2154911905527115 0.40624985098838806 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.46193981170654297 -0.8314696550369263 0.3086586594581604 0.46540728211402893 -0.8286385536193848 0.3109835982322693 0.40624988079071045 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.3928475081920624 -0.8314696550369263 0.39284783601760864 0.395794540643692 -0.8286385536193848 0.395794540643692 0.37499991059303284 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.27059808373451233 -0.9238796234130859 0.2705984115600586 0.27426984906196594 -0.921689510345459 0.27426984906196594 0.37499988079071045 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.8154930472373962 0.19509035348892212 0.5448954105377197 0.8156682252883911 0.19391460716724396 0.5449995398521423 0.40624991059303284 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.76817786693573 0.3826834261417389 0.5132802724838257 0.7689138650894165 0.3805353045463562 0.5137485861778259 0.4062499403953552 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816290855408 0.3826834261417389 0.6532818078994751 0.6538895964622498 0.3805353045463562 0.6538895964622498 0.3749999701976776 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.6935198307037354 0.19509035348892212 0.693520188331604 0.6936551928520203 0.19391460716724396 0.6936551928520203 0.37499991059303284 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.16221170127391815 -0.9807853102684021 0.10838671773672104 0.1670888364315033 -0.9795831441879272 0.1116367056965828 0.4062497615814209 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.31818971037864685 -0.9238796234130859 0.21260789036750793 0.32248908281326294 -0.921689510345459 0.2154911905527115 0.40624985098838806 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.27059808373451233 -0.9238796234130859 0.2705984115600586 0.27426984906196594 -0.921689510345459 0.27426984906196594 0.37499988079071045 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.13794970512390137 -0.9807853102684021 0.13795003294944763 0.1420941799879074 -0.9795831441879272 0.1420941799879074 0.3749997913837433 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.831469714641571 7.549790126404332e-08 0.555570662021637 0.8314462900161743 0.0 0.5555589199066162 0.40624991059303284 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.8154930472373962 0.19509035348892212 0.5448954105377197 0.8156682252883911 0.19391460716724396 0.5449995398521423 0.40624991059303284 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.6935198307037354 0.19509035348892212 0.693520188331604 0.6936551928520203 0.19391460716724396 0.6936551928520203 0.37499991059303284 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.7071068286895752 7.549790126404332e-08 0.7071072459220886 0.7070833444595337 0.0 0.7070833444595337 0.37499991059303284 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.16221188008785248 0.9807852506637573 0.10838685184717178 0.1670888364315033 0.9795831441879272 0.1116367056965828 0.4062497317790985 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.3906245231628418 1.0 0 1.0 0 0.0 0 0.0 0 0.0 0.1379498541355133 0.9807852506637573 0.13795019686222076 0.1420941799879074 0.9795831441879272 0.1420941799879074 0.3749997913837433 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.39062467217445374 0.0 0 1.0 0 0.0 0 0.0 0 0.0 0.16221170127391815 -0.9807853102684021 0.10838671773672104 0.1670888364315033 -0.9795831441879272 0.1116367056965828 0.4062497615814209 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.13794970512390137 -0.9807853102684021 0.13795003294944763 0.1420941799879074 -0.9795831441879272 0.1420941799879074 0.3749997913837433 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.8154930472373962 -0.19509020447731018 0.5448954105377197 0.8156682252883911 -0.19391460716724396 0.5449995398521423 0.40624991059303284 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.831469714641571 7.549790126404332e-08 0.555570662021637 0.8314462900161743 0.0 0.5555589199066162 0.40624991059303284 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.7071068286895752 7.549790126404332e-08 0.7071072459220886 0.7070833444595337 0.0 0.7070833444595337 0.37499991059303284 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.6935198307037354 -0.19509020447731018 0.693520188331604 0.6936551928520203 -0.19391460716724396 0.6936551928520203 0.37499991059303284 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.3181898593902588 0.9238795042037964 0.2126079499721527 0.32248908281326294 0.921689510345459 0.2154911905527115 0.40624988079071045 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.16221188008785248 0.9807852506637573 0.10838685184717178 0.1670888364315033 0.9795831441879272 0.1116367056965828 0.4062497317790985 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.1379498541355133 0.9807852506637573 0.13795019686222076 0.1420941799879074 0.9795831441879272 0.1420941799879074 0.3749997913837433 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.27059823274612427 0.9238795042037964 0.27059850096702576 0.27426984906196594 0.921689510345459 0.27426984906196594 0.37499991059303284 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.76817786693573 -0.38268327713012695 0.5132802724838257 0.7689138650894165 -0.3805353045463562 0.5137485861778259 0.4062499403953552 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.8154930472373962 -0.19509020447731018 0.5448954105377197 0.8156682252883911 -0.19391460716724396 0.5449995398521423 0.40624991059303284 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.6935198307037354 -0.19509020447731018 0.693520188331604 0.6936551928520203 -0.19391460716724396 0.6936551928520203 0.37499991059303284 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816290855408 -0.38268327713012695 0.6532818078994751 0.6538895964622498 -0.3805353045463562 0.6538895964622498 0.3749999701976776 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.4619399309158325 0.8314695954322815 0.3086586892604828 0.46540728211402893 0.8286385536193848 0.3109835982322693 0.40624991059303284 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.3181898593902588 0.9238795042037964 0.2126079499721527 0.32248908281326294 0.921689510345459 0.2154911905527115 0.40624988079071045 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.27059823274612427 0.9238795042037964 0.27059850096702576 0.27426984906196594 0.921689510345459 0.27426984906196594 0.37499991059303284 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.39284759759902954 0.8314695954322815 0.3928478956222534 0.395794540643692 0.8286385536193848 0.395794540643692 0.37499991059303284 0.8124998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.691341757774353 -0.5555701851844788 0.4619401693344116 0.6928922533988953 -0.5527512431144714 0.46296578645706177 0.40624991059303284 0.31250011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.76817786693573 -0.38268327713012695 0.5132802724838257 0.7689138650894165 -0.3805353045463562 0.5137485861778259 0.4062499403953552 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816290855408 -0.38268327713012695 0.6532818078994751 0.6538895964622498 -0.3805353045463562 0.6538895964622498 0.3749999701976776 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.5879377722740173 -0.5555701851844788 0.5879381895065308 0.5892513990402222 -0.5527512431144714 0.5892513990402222 0.37499991059303284 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.5879379510879517 0.7071067690849304 0.39284783601760864 0.5904415845870972 0.7040314674377441 0.39451277256011963 0.40624991059303284 0.7499998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.4619399309158325 0.8314695954322815 0.3086586892604828 0.46540728211402893 0.8286385536193848 0.3109835982322693 0.40624991059303284 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.39284759759902954 0.8314695954322815 0.3928478956222534 0.395794540643692 0.8286385536193848 0.395794540643692 0.37499991059303284 0.8124998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.5000000596046448 0.7071067690849304 0.5000003576278687 0.5021210312843323 0.7040314674377441 0.5021210312843323 0.37499991059303284 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.1379498541355133 0.9807852506637573 0.13795019686222076 0.1420941799879074 0.9795831441879272 0.1420941799879074 0.3749997913837433 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.3593745827674866 1.0 0 1.0 0 0.0 0 0.0 0 0.0 0.10838649421930313 0.9807852506637573 0.16221219301223755 0.1116367056965828 0.9795831441879272 0.1670888364315033 0.3437498211860657 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.3593747317790985 0.0 0 1.0 0 0.0 0 0.0 0 0.0 0.13794970512390137 -0.9807853102684021 0.13795003294944763 0.1420941799879074 -0.9795831441879272 0.1420941799879074 0.3749997913837433 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.10838638991117477 -0.9807853102684021 0.16221201419830322 0.1116367056965828 -0.9795831441879272 0.1670888364315033 0.3437498211860657 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.6935198307037354 -0.19509020447731018 0.693520188331604 0.6936551928520203 -0.19391460716724396 0.6936551928520203 0.37499991059303284 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.7071068286895752 7.549790126404332e-08 0.7071072459220886 0.7070833444595337 0.0 0.7070833444595337 0.37499991059303284 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.5555702447891235 7.549790126404332e-08 0.8314700722694397 0.5555589199066162 0.0 0.8314462900161743 0.3437499403953552 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.5448949933052063 -0.19509020447731018 0.8154934048652649 0.5449995398521423 -0.19391460716724396 0.8156682252883911 0.3437499403953552 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.27059823274612427 0.9238795042037964 0.27059850096702576 0.27426984906196594 0.921689510345459 0.27426984906196594 0.37499991059303284 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.1379498541355133 0.9807852506637573 0.13795019686222076 0.1420941799879074 0.9795831441879272 0.1420941799879074 0.3749997913837433 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.10838649421930313 0.9807852506637573 0.16221219301223755 0.1116367056965828 0.9795831441879272 0.1670888364315033 0.3437498211860657 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.21260765194892883 0.9238795042037964 0.3181900978088379 0.2154911905527115 0.921689510345459 0.32248908281326294 0.34374991059303284 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816290855408 -0.38268327713012695 0.6532818078994751 0.6538895964622498 -0.3805353045463562 0.6538895964622498 0.3749999701976776 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.6935198307037354 -0.19509020447731018 0.693520188331604 0.6936551928520203 -0.19391460716724396 0.6936551928520203 0.37499991059303284 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.5448949933052063 -0.19509020447731018 0.8154934048652649 0.5449995398521423 -0.19391460716724396 0.8156682252883911 0.3437499403953552 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.5132800936698914 -0.38268327713012695 0.7681781053543091 0.5137485861778259 -0.3805353045463562 0.7689138650894165 0.3437499701976776 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.39284759759902954 0.8314695954322815 0.3928478956222534 0.395794540643692 0.8286385536193848 0.395794540643692 0.37499991059303284 0.8124998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.27059823274612427 0.9238795042037964 0.27059850096702576 0.27426984906196594 0.921689510345459 0.27426984906196594 0.37499991059303284 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.21260765194892883 0.9238795042037964 0.3181900978088379 0.2154911905527115 0.921689510345459 0.32248908281326294 0.34374991059303284 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.3086583614349365 0.8314695954322815 0.4619401693344116 0.3109835982322693 0.8286385536193848 0.46540728211402893 0.34374991059303284 0.8124998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.5879377722740173 -0.5555701851844788 0.5879381895065308 0.5892513990402222 -0.5527512431144714 0.5892513990402222 0.37499991059303284 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816290855408 -0.38268327713012695 0.6532818078994751 0.6538895964622498 -0.3805353045463562 0.6538895964622498 0.3749999701976776 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.5132800936698914 -0.38268327713012695 0.7681781053543091 0.5137485861778259 -0.3805353045463562 0.7689138650894165 0.3437499701976776 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.4619397222995758 -0.5555701851844788 0.6913420557975769 0.46296578645706177 -0.5527512431144714 0.6928922533988953 0.34374991059303284 0.31250011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.5000000596046448 0.7071067690849304 0.5000003576278687 0.5021210312843323 0.7040314674377441 0.5021210312843323 0.37499991059303284 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.39284759759902954 0.8314695954322815 0.3928478956222534 0.395794540643692 0.8286385536193848 0.395794540643692 0.37499991059303284 0.8124998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.3086583614349365 0.8314695954322815 0.4619401693344116 0.3109835982322693 0.8286385536193848 0.46540728211402893 0.34374991059303284 0.8124998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.3928475081920624 0.7071067690849304 0.5879381895065308 0.39451277256011963 0.7040314674377441 0.5904415845870972 0.34374991059303284 0.7499998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.5000000596046448 -0.7071067690849304 0.5000003576278687 0.5021210312843323 -0.7040314674377441 0.5021210312843323 0.37499991059303284 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.5879377722740173 -0.5555701851844788 0.5879381895065308 0.5892513990402222 -0.5527512431144714 0.5892513990402222 0.37499991059303284 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.4619397222995758 -0.5555701851844788 0.6913420557975769 0.46296578645706177 -0.5527512431144714 0.6928922533988953 0.34374991059303284 0.31250011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.3928475081920624 -0.7071067690849304 0.5879381895065308 0.39451277256011963 -0.7040314674377441 0.5904415845870972 0.34374991059303284 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.5879377722740173 0.5555701851844788 0.5879381895065308 0.5892513990402222 0.5527512431144714 0.5892513990402222 0.37499991059303284 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.5000000596046448 0.7071067690849304 0.5000003576278687 0.5021210312843323 0.7040314674377441 0.5021210312843323 0.37499991059303284 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.3928475081920624 0.7071067690849304 0.5879381895065308 0.39451277256011963 0.7040314674377441 0.5904415845870972 0.34374991059303284 0.7499998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.4619397222995758 0.5555701851844788 0.6913420557975769 0.46296578645706177 0.5527512431144714 0.6928922533988953 0.34374991059303284 0.6874999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.3928475081920624 -0.8314696550369263 0.39284783601760864 0.395794540643692 -0.8286385536193848 0.395794540643692 0.37499991059303284 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.5000000596046448 -0.7071067690849304 0.5000003576278687 0.5021210312843323 -0.7040314674377441 0.5021210312843323 0.37499991059303284 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.3928475081920624 -0.7071067690849304 0.5879381895065308 0.39451277256011963 -0.7040314674377441 0.5904415845870972 0.34374991059303284 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.30865827202796936 -0.8314696550369263 0.46194010972976685 0.3109835982322693 -0.8286385536193848 0.46540728211402893 0.34374991059303284 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816290855408 0.3826834261417389 0.6532818078994751 0.6538895964622498 0.3805353045463562 0.6538895964622498 0.3749999701976776 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.5879377722740173 0.5555701851844788 0.5879381895065308 0.5892513990402222 0.5527512431144714 0.5892513990402222 0.37499991059303284 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.4619397222995758 0.5555701851844788 0.6913420557975769 0.46296578645706177 0.5527512431144714 0.6928922533988953 0.34374991059303284 0.6874999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.5132800936698914 0.3826834261417389 0.7681781053543091 0.5137485861778259 0.3805353045463562 0.7689138650894165 0.3437499701976776 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.27059808373451233 -0.9238796234130859 0.2705984115600586 0.27426984906196594 -0.921689510345459 0.27426984906196594 0.37499988079071045 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.3928475081920624 -0.8314696550369263 0.39284783601760864 0.395794540643692 -0.8286385536193848 0.395794540643692 0.37499991059303284 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.30865827202796936 -0.8314696550369263 0.46194010972976685 0.3109835982322693 -0.8286385536193848 0.46540728211402893 0.34374991059303284 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.21260754764080048 -0.9238796234130859 0.31818997859954834 0.2154911905527115 -0.921689510345459 0.32248908281326294 0.34374991059303284 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.6935198307037354 0.19509035348892212 0.693520188331604 0.6936551928520203 0.19391460716724396 0.6936551928520203 0.37499991059303284 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.6532816290855408 0.3826834261417389 0.6532818078994751 0.6538895964622498 0.3805353045463562 0.6538895964622498 0.3749999701976776 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.5132800936698914 0.3826834261417389 0.7681781053543091 0.5137485861778259 0.3805353045463562 0.7689138650894165 0.3437499701976776 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.5448949933052063 0.19509035348892212 0.8154934048652649 0.5449995398521423 0.19391460716724396 0.8156682252883911 0.3437499403953552 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.13794970512390137 -0.9807853102684021 0.13795003294944763 0.1420941799879074 -0.9795831441879272 0.1420941799879074 0.3749997913837433 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.27059808373451233 -0.9238796234130859 0.2705984115600586 0.27426984906196594 -0.921689510345459 0.27426984906196594 0.37499988079071045 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.21260754764080048 -0.9238796234130859 0.31818997859954834 0.2154911905527115 -0.921689510345459 0.32248908281326294 0.34374991059303284 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.10838638991117477 -0.9807853102684021 0.16221201419830322 0.1116367056965828 -0.9795831441879272 0.1670888364315033 0.3437498211860657 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.7071068286895752 7.549790126404332e-08 0.7071072459220886 0.7070833444595337 0.0 0.7070833444595337 0.37499991059303284 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.6935198307037354 0.19509035348892212 0.693520188331604 0.6936551928520203 0.19391460716724396 0.6936551928520203 0.37499991059303284 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.5448949933052063 0.19509035348892212 0.8154934048652649 0.5449995398521423 0.19391460716724396 0.8156682252883911 0.3437499403953552 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.5555702447891235 7.549790126404332e-08 0.8314700722694397 0.5555589199066162 0.0 0.8314462900161743 0.3437499403953552 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.4619397222995758 0.5555701851844788 0.6913420557975769 0.46296578645706177 0.5527512431144714 0.6928922533988953 0.34374991059303284 0.6874999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.3928475081920624 0.7071067690849304 0.5879381895065308 0.39451277256011963 0.7040314674377441 0.5904415845870972 0.34374991059303284 0.7499998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.27059802412986755 0.7071067690849304 0.6532818078994751 0.2717368006706238 0.7040314674377441 0.6560564041137695 0.3124999403953552 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.3181895613670349 0.5555701851844788 0.7681780457496643 0.3188879191875458 0.5527512431144714 0.7698904275894165 0.3124999403953552 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.30865827202796936 -0.8314696550369263 0.46194010972976685 0.3109835982322693 -0.8286385536193848 0.46540728211402893 0.34374991059303284 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.3928475081920624 -0.7071067690849304 0.5879381895065308 0.39451277256011963 -0.7040314674377441 0.5904415845870972 0.34374991059303284 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.27059802412986755 -0.7071067690849304 0.6532818078994751 0.2717368006706238 -0.7040314674377441 0.6560564041137695 0.3124999403953552 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.2126075029373169 -0.8314696550369263 0.5132802724838257 0.2142094224691391 -0.8286385536193848 0.5171361565589905 0.3124999403953552 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.5132800936698914 0.3826834261417389 0.7681781053543091 0.5137485861778259 0.3805353045463562 0.7689138650894165 0.3437499701976776 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.4619397222995758 0.5555701851844788 0.6913420557975769 0.46296578645706177 0.5527512431144714 0.6928922533988953 0.34374991059303284 0.6874999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.3181895613670349 0.5555701851844788 0.7681780457496643 0.3188879191875458 0.5527512431144714 0.7698904275894165 0.3124999403953552 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.3535534739494324 0.3826834261417389 0.8535537123680115 0.35386210680007935 0.3805353045463562 0.8543656468391418 0.3124999701976776 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.21260754764080048 -0.9238796234130859 0.31818997859954834 0.2154911905527115 -0.921689510345459 0.32248908281326294 0.34374991059303284 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.30865827202796936 -0.8314696550369263 0.46194010972976685 0.3109835982322693 -0.8286385536193848 0.46540728211402893 0.34374991059303284 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.2126075029373169 -0.8314696550369263 0.5132802724838257 0.2142094224691391 -0.8286385536193848 0.5171361565589905 0.3124999403953552 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.1464466154575348 -0.9238796234130859 0.3535537123680115 0.14841151237487793 -0.921689510345459 0.3583483397960663 0.31249991059303284 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.5448949933052063 0.19509035348892212 0.8154934048652649 0.5449995398521423 0.19391460716724396 0.8156682252883911 0.3437499403953552 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.5132800936698914 0.3826834261417389 0.7681781053543091 0.5137485861778259 0.3805353045463562 0.7689138650894165 0.3437499701976776 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.3535534739494324 0.3826834261417389 0.8535537123680115 0.35386210680007935 0.3805353045463562 0.8543656468391418 0.3124999701976776 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.3753301501274109 0.19509035348892212 0.9061276316642761 0.3754081726074219 0.19391460716724396 0.9063386917114258 0.3124999403953552 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.10838638991117477 -0.9807853102684021 0.16221201419830322 0.1116367056965828 -0.9795831441879272 0.1670888364315033 0.3437498211860657 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.21260754764080048 -0.9238796234130859 0.31818997859954834 0.2154911905527115 -0.921689510345459 0.32248908281326294 0.34374991059303284 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.1464466154575348 -0.9238796234130859 0.3535537123680115 0.14841151237487793 -0.921689510345459 0.3583483397960663 0.31249991059303284 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.0746578499674797 -0.9807853102684021 0.18024028837680817 0.07690664380788803 -0.9795831441879272 0.18564409017562866 0.31249988079071045 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.5555702447891235 7.549790126404332e-08 0.8314700722694397 0.5555589199066162 0.0 0.8314462900161743 0.3437499403953552 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.5448949933052063 0.19509035348892212 0.8154934048652649 0.5449995398521423 0.19391460716724396 0.8156682252883911 0.3437499403953552 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.3753301501274109 0.19509035348892212 0.9061276316642761 0.3754081726074219 0.19391460716724396 0.9063386917114258 0.3124999403953552 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.3826833963394165 7.549790126404332e-08 0.9238799810409546 0.382671594619751 0.0 0.9238563179969788 0.3124999403953552 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.10838649421930313 0.9807852506637573 0.16221219301223755 0.1116367056965828 0.9795831441879272 0.1670888364315033 0.3437498211860657 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.32812467217445374 1.0 0 1.0 0 0.0 0 0.0 0 0.0 0.07465791702270508 0.9807852506637573 0.1802404820919037 0.07690664380788803 0.9795831441879272 0.18564409017562866 0.31249988079071045 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.3281247913837433 0.0 0 1.0 0 0.0 0 0.0 0 0.0 0.10838638991117477 -0.9807853102684021 0.16221201419830322 0.1116367056965828 -0.9795831441879272 0.1670888364315033 0.3437498211860657 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.0746578499674797 -0.9807853102684021 0.18024028837680817 0.07690664380788803 -0.9795831441879272 0.18564409017562866 0.31249988079071045 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.5448949933052063 -0.19509020447731018 0.8154934048652649 0.5449995398521423 -0.19391460716724396 0.8156682252883911 0.3437499403953552 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.5555702447891235 7.549790126404332e-08 0.8314700722694397 0.5555589199066162 0.0 0.8314462900161743 0.3437499403953552 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.3826833963394165 7.549790126404332e-08 0.9238799810409546 0.382671594619751 0.0 0.9238563179969788 0.3124999403953552 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.3753301501274109 -0.19509020447731018 0.9061276316642761 0.3754081726074219 -0.19391460716724396 0.9063386917114258 0.3124999403953552 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.21260765194892883 0.9238795042037964 0.3181900978088379 0.2154911905527115 0.921689510345459 0.32248908281326294 0.34374991059303284 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.10838649421930313 0.9807852506637573 0.16221219301223755 0.1116367056965828 0.9795831441879272 0.1670888364315033 0.3437498211860657 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.07465791702270508 0.9807852506637573 0.1802404820919037 0.07690664380788803 0.9795831441879272 0.18564409017562866 0.31249988079071045 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.14644670486450195 0.9238795042037964 0.353553831577301 0.14841151237487793 0.921689510345459 0.3583483397960663 0.3124999403953552 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.5132800936698914 -0.38268327713012695 0.7681781053543091 0.5137485861778259 -0.3805353045463562 0.7689138650894165 0.3437499701976776 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.5448949933052063 -0.19509020447731018 0.8154934048652649 0.5449995398521423 -0.19391460716724396 0.8156682252883911 0.3437499403953552 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.3753301501274109 -0.19509020447731018 0.9061276316642761 0.3754081726074219 -0.19391460716724396 0.9063386917114258 0.3124999403953552 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.3535534739494324 -0.38268327713012695 0.8535537123680115 0.35386210680007935 -0.3805353045463562 0.8543656468391418 0.3124999701976776 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.3086583614349365 0.8314695954322815 0.4619401693344116 0.3109835982322693 0.8286385536193848 0.46540728211402893 0.34374991059303284 0.8124998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.21260765194892883 0.9238795042037964 0.3181900978088379 0.2154911905527115 0.921689510345459 0.32248908281326294 0.34374991059303284 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.14644670486450195 0.9238795042037964 0.353553831577301 0.14841151237487793 0.921689510345459 0.3583483397960663 0.3124999403953552 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.21260759234428406 0.8314695954322815 0.5132803916931152 0.2142094224691391 0.8286385536193848 0.5171361565589905 0.3124999701976776 0.8124998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.4619397222995758 -0.5555701851844788 0.6913420557975769 0.46296578645706177 -0.5527512431144714 0.6928922533988953 0.34374991059303284 0.31250011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.5132800936698914 -0.38268327713012695 0.7681781053543091 0.5137485861778259 -0.3805353045463562 0.7689138650894165 0.3437499701976776 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.3535534739494324 -0.38268327713012695 0.8535537123680115 0.35386210680007935 -0.3805353045463562 0.8543656468391418 0.3124999701976776 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.3181895613670349 -0.5555701851844788 0.7681780457496643 0.3188879191875458 -0.5527512431144714 0.7698904275894165 0.3124999403953552 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.3928475081920624 0.7071067690849304 0.5879381895065308 0.39451277256011963 0.7040314674377441 0.5904415845870972 0.34374991059303284 0.7499998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.3086583614349365 0.8314695954322815 0.4619401693344116 0.3109835982322693 0.8286385536193848 0.46540728211402893 0.34374991059303284 0.8124998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.21260759234428406 0.8314695954322815 0.5132803916931152 0.2142094224691391 0.8286385536193848 0.5171361565589905 0.3124999701976776 0.8124998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.27059802412986755 0.7071067690849304 0.6532818078994751 0.2717368006706238 0.7040314674377441 0.6560564041137695 0.3124999403953552 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.3928475081920624 -0.7071067690849304 0.5879381895065308 0.39451277256011963 -0.7040314674377441 0.5904415845870972 0.34374991059303284 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.4619397222995758 -0.5555701851844788 0.6913420557975769 0.46296578645706177 -0.5527512431144714 0.6928922533988953 0.34374991059303284 0.31250011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.3181895613670349 -0.5555701851844788 0.7681780457496643 0.3188879191875458 -0.5527512431144714 0.7698904275894165 0.3124999403953552 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.27059802412986755 -0.7071067690849304 0.6532818078994751 0.2717368006706238 -0.7040314674377441 0.6560564041137695 0.3124999403953552 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.3753301501274109 -0.19509020447731018 0.9061276316642761 0.3754081726074219 -0.19391460716724396 0.9063386917114258 0.3124999403953552 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.3826833963394165 7.549790126404332e-08 0.9238799810409546 0.382671594619751 0.0 0.9238563179969788 0.3124999403953552 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.19509024918079376 7.549790126404332e-08 0.9807857275009155 0.19507431983947754 0.0 0.9807733297348022 0.2812499403953552 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.1913416087627411 -0.19509020447731018 0.9619399309158325 0.191381573677063 -0.19391460716724396 0.9621570706367493 0.2812499701976776 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.14644670486450195 0.9238795042037964 0.353553831577301 0.14841151237487793 0.921689510345459 0.3583483397960663 0.3124999403953552 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.07465791702270508 0.9807852506637573 0.1802404820919037 0.07690664380788803 0.9795831441879272 0.18564409017562866 0.31249988079071045 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.0380602702498436 0.9807852506637573 0.19134224951267242 0.039185766130685806 0.9795831441879272 0.19708853960037231 0.28124991059303284 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.07465790212154388 0.9238795042037964 0.37533071637153625 0.07565538585186005 0.921689510345459 0.3804132342338562 0.2812499701976776 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.3535534739494324 -0.38268327713012695 0.8535537123680115 0.35386210680007935 -0.3805353045463562 0.8543656468391418 0.3124999701976776 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.3753301501274109 -0.19509020447731018 0.9061276316642761 0.3754081726074219 -0.19391460716724396 0.9063386917114258 0.3124999403953552 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.1913416087627411 -0.19509020447731018 0.9619399309158325 0.191381573677063 -0.19391460716724396 0.9621570706367493 0.2812499701976776 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.18024002015590668 -0.38268327713012695 0.9061277508735657 0.18039490282535553 -0.3805353045463562 0.9069795608520508 0.2812499701976776 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.21260759234428406 0.8314695954322815 0.5132803916931152 0.2142094224691391 0.8286385536193848 0.5171361565589905 0.3124999701976776 0.8124998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.14644670486450195 0.9238795042037964 0.353553831577301 0.14841151237487793 0.921689510345459 0.3583483397960663 0.3124999403953552 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.07465790212154388 0.9238795042037964 0.37533071637153625 0.07565538585186005 0.921689510345459 0.3804132342338562 0.2812499701976776 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.10838642716407776 0.8314695954322815 0.5448955297470093 0.10919522494077682 0.8286385536193848 0.5489974617958069 0.2812499701976776 0.8124998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.3181895613670349 -0.5555701851844788 0.7681780457496643 0.3188879191875458 -0.5527512431144714 0.7698904275894165 0.3124999403953552 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.3535534739494324 -0.38268327713012695 0.8535537123680115 0.35386210680007935 -0.3805353045463562 0.8543656468391418 0.3124999701976776 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.18024002015590668 -0.38268327713012695 0.9061277508735657 0.18039490282535553 -0.3805353045463562 0.9069795608520508 0.2812499701976776 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.1622115671634674 -0.5555701851844788 0.8154933452606201 0.16257210075855255 -0.5527512431144714 0.8173161745071411 0.2812499403953552 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.27059802412986755 0.7071067690849304 0.6532818078994751 0.2717368006706238 0.7040314674377441 0.6560564041137695 0.3124999403953552 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.21260759234428406 0.8314695954322815 0.5132803916931152 0.2142094224691391 0.8286385536193848 0.5171361565589905 0.3124999701976776 0.8124998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.10838642716407776 0.8314695954322815 0.5448955297470093 0.10919522494077682 0.8286385536193848 0.5489974617958069 0.2812499701976776 0.8124998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.13794966042041779 0.7071067690849304 0.6935202479362488 0.13852351903915405 0.7040314674377441 0.6964934468269348 0.2812499701976776 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.27059802412986755 -0.7071067690849304 0.6532818078994751 0.2717368006706238 -0.7040314674377441 0.6560564041137695 0.3124999403953552 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.3181895613670349 -0.5555701851844788 0.7681780457496643 0.3188879191875458 -0.5527512431144714 0.7698904275894165 0.3124999403953552 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.1622115671634674 -0.5555701851844788 0.8154933452606201 0.16257210075855255 -0.5527512431144714 0.8173161745071411 0.2812499403953552 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.13794966042041779 -0.7071067690849304 0.6935202479362488 0.13852351903915405 -0.7040314674377441 0.6964934468269348 0.2812499701976776 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.3181895613670349 0.5555701851844788 0.7681780457496643 0.3188879191875458 0.5527512431144714 0.7698904275894165 0.3124999403953552 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.27059802412986755 0.7071067690849304 0.6532818078994751 0.2717368006706238 0.7040314674377441 0.6560564041137695 0.3124999403953552 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.13794966042041779 0.7071067690849304 0.6935202479362488 0.13852351903915405 0.7040314674377441 0.6964934468269348 0.2812499701976776 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.1622115671634674 0.5555701851844788 0.8154933452606201 0.16257210075855255 0.5527512431144714 0.8173161745071411 0.2812499403953552 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.2126075029373169 -0.8314696550369263 0.5132802724838257 0.2142094224691391 -0.8286385536193848 0.5171361565589905 0.3124999403953552 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.27059802412986755 -0.7071067690849304 0.6532818078994751 0.2717368006706238 -0.7040314674377441 0.6560564041137695 0.3124999403953552 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.13794966042041779 -0.7071067690849304 0.6935202479362488 0.13852351903915405 -0.7040314674377441 0.6964934468269348 0.2812499701976776 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.10838636010885239 -0.8314696550369263 0.5448954105377197 0.10919522494077682 -0.8286385536193848 0.5489974617958069 0.2812499701976776 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.3535534739494324 0.3826834261417389 0.8535537123680115 0.35386210680007935 0.3805353045463562 0.8543656468391418 0.3124999701976776 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.3181895613670349 0.5555701851844788 0.7681780457496643 0.3188879191875458 0.5527512431144714 0.7698904275894165 0.3124999403953552 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.1622115671634674 0.5555701851844788 0.8154933452606201 0.16257210075855255 0.5527512431144714 0.8173161745071411 0.2812499403953552 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.18024002015590668 0.3826834261417389 0.9061277508735657 0.18039490282535553 0.3805353045463562 0.9069795608520508 0.2812499701976776 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.1464466154575348 -0.9238796234130859 0.3535537123680115 0.14841151237487793 -0.921689510345459 0.3583483397960663 0.31249991059303284 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.2126075029373169 -0.8314696550369263 0.5132802724838257 0.2142094224691391 -0.8286385536193848 0.5171361565589905 0.3124999403953552 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.10838636010885239 -0.8314696550369263 0.5448954105377197 0.10919522494077682 -0.8286385536193848 0.5489974617958069 0.2812499701976776 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.07465784251689911 -0.9238796234130859 0.3753305971622467 0.07565538585186005 -0.921689510345459 0.3804132342338562 0.2812499701976776 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.3753301501274109 0.19509035348892212 0.9061276316642761 0.3754081726074219 0.19391460716724396 0.9063386917114258 0.3124999403953552 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.3535534739494324 0.3826834261417389 0.8535537123680115 0.35386210680007935 0.3805353045463562 0.8543656468391418 0.3124999701976776 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.18024002015590668 0.3826834261417389 0.9061277508735657 0.18039490282535553 0.3805353045463562 0.9069795608520508 0.2812499701976776 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.1913416087627411 0.19509035348892212 0.9619399309158325 0.191381573677063 0.19391460716724396 0.9621570706367493 0.2812499701976776 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.0746578499674797 -0.9807853102684021 0.18024028837680817 0.07690664380788803 -0.9795831441879272 0.18564409017562866 0.31249988079071045 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.1464466154575348 -0.9238796234130859 0.3535537123680115 0.14841151237487793 -0.921689510345459 0.3583483397960663 0.31249991059303284 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.07465784251689911 -0.9238796234130859 0.3753305971622467 0.07565538585186005 -0.921689510345459 0.3804132342338562 0.2812499701976776 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.03806024044752121 -0.9807853102684021 0.1913420408964157 0.039185766130685806 -0.9795831441879272 0.19708853960037231 0.28124991059303284 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.3826833963394165 7.549790126404332e-08 0.9238799810409546 0.382671594619751 0.0 0.9238563179969788 0.3124999403953552 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.3753301501274109 0.19509035348892212 0.9061276316642761 0.3754081726074219 0.19391460716724396 0.9063386917114258 0.3124999403953552 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.1913416087627411 0.19509035348892212 0.9619399309158325 0.191381573677063 0.19391460716724396 0.9621570706367493 0.2812499701976776 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.19509024918079376 7.549790126404332e-08 0.9807857275009155 0.19507431983947754 0.0 0.9807733297348022 0.2812499403953552 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.07465791702270508 0.9807852506637573 0.1802404820919037 0.07690664380788803 0.9795831441879272 0.18564409017562866 0.31249988079071045 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.2968747317790985 1.0 0 1.0 0 0.0 0 0.0 0 0.0 0.0380602702498436 0.9807852506637573 0.19134224951267242 0.039185766130685806 0.9795831441879272 0.19708853960037231 0.28124991059303284 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.29687488079071045 0.0 0 1.0 0 0.0 0 0.0 0 0.0 0.0746578499674797 -0.9807853102684021 0.18024028837680817 0.07690664380788803 -0.9795831441879272 0.18564409017562866 0.31249988079071045 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.03806024044752121 -0.9807853102684021 0.1913420408964157 0.039185766130685806 -0.9795831441879272 0.19708853960037231 0.28124991059303284 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.10838636010885239 -0.8314696550369263 0.5448954105377197 0.10919522494077682 -0.8286385536193848 0.5489974617958069 0.2812499701976776 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.13794966042041779 -0.7071067690849304 0.6935202479362488 0.13852351903915405 -0.7040314674377441 0.6964934468269348 0.2812499701976776 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -2.5838467365701945e-08 -0.7071067690849304 0.7071070671081543 0.0 -0.7040314674377441 0.7101352214813232 0.2499999701976776 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -1.0937306171854289e-08 -0.8314696550369263 0.5555704832077026 0.0 -0.8286385536193848 0.5597705245018005 0.2499999701976776 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.18024002015590668 0.3826834261417389 0.9061277508735657 0.18039490282535553 0.3805353045463562 0.9069795608520508 0.2812499701976776 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.1622115671634674 0.5555701851844788 0.8154933452606201 0.16257210075855255 0.5527512431144714 0.8173161745071411 0.2812499403953552 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 -8.544311214109257e-08 0.5555701851844788 0.831469714641571 0.0 0.5527512431144714 0.8333384394645691 0.2499999701976776 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 6.356849979738399e-08 0.3826834261417389 0.923879861831665 0.0 0.3805353045463562 0.9247413277626038 0.2499999701976776 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.07465784251689911 -0.9238796234130859 0.3753305971622467 0.07565538585186005 -0.921689510345459 0.3804132342338562 0.2812499701976776 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.10838636010885239 -0.8314696550369263 0.5448954105377197 0.10919522494077682 -0.8286385536193848 0.5489974617958069 0.2812499701976776 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -1.0937306171854289e-08 -0.8314696550369263 0.5555704832077026 0.0 -0.8286385536193848 0.5597705245018005 0.2499999701976776 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 3.963855021993368e-09 -0.9238796234130859 0.38268372416496277 0.0 -0.921689510345459 0.3878597319126129 0.2499999701976776 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 0.1913416087627411 0.19509035348892212 0.9619399309158325 0.191381573677063 0.19391460716724396 0.9621570706367493 0.2812499701976776 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.18024002015590668 0.3826834261417389 0.9061277508735657 0.18039490282535553 0.3805353045463562 0.9069795608520508 0.2812499701976776 0.625 0 1.0 0 0.0 0 0.0 0 0.0 6.356849979738399e-08 0.3826834261417389 0.923879861831665 0.0 0.3805353045463562 0.9247413277626038 0.2499999701976776 0.625 0 1.0 0 0.0 0 0.0 0 0.0 -8.544311214109257e-08 0.19509035348892212 0.9807853698730469 0.0 0.19391460716724396 0.9809869527816772 0.2499999701976776 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.03806024044752121 -0.9807853102684021 0.1913420408964157 0.039185766130685806 -0.9795831441879272 0.19708853960037231 0.28124991059303284 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.07465784251689911 -0.9238796234130859 0.3753305971622467 0.07565538585186005 -0.921689510345459 0.3804132342338562 0.2812499701976776 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 3.963855021993368e-09 -0.9238796234130859 0.38268372416496277 0.0 -0.921689510345459 0.3878597319126129 0.2499999701976776 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 3.963855021993368e-09 -0.9807853102684021 0.1950906366109848 0.0 -0.9795831441879272 0.20096439123153687 0.2499999701976776 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.19509024918079376 7.549790126404332e-08 0.9807857275009155 0.19507431983947754 0.0 0.9807733297348022 0.2812499403953552 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.1913416087627411 0.19509035348892212 0.9619399309158325 0.191381573677063 0.19391460716724396 0.9621570706367493 0.2812499701976776 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 -8.544311214109257e-08 0.19509035348892212 0.9807853698730469 0.0 0.19391460716724396 0.9809869527816772 0.2499999701976776 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 -1.0034427333494023e-07 7.549790126404332e-08 1.0000003576278687 0.0 0.0 1.0 0.2499999701976776 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.0380602702498436 0.9807852506637573 0.19134224951267242 0.039185766130685806 0.9795831441879272 0.19708853960037231 0.28124991059303284 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.2656248211860657 1.0 0 1.0 0 0.0 0 0.0 0 0.0 -7.2120158733923745e-09 0.9807852506637573 0.19509084522724152 0.0 0.9795831441879272 0.20096439123153687 0.2499999701976776 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.2656249403953552 0.0 0 1.0 0 0.0 0 0.0 0 0.0 0.03806024044752121 -0.9807853102684021 0.1913420408964157 0.039185766130685806 -0.9795831441879272 0.19708853960037231 0.28124991059303284 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 3.963855021993368e-09 -0.9807853102684021 0.1950906366109848 0.0 -0.9795831441879272 0.20096439123153687 0.2499999701976776 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 0.1913416087627411 -0.19509020447731018 0.9619399309158325 0.191381573677063 -0.19391460716724396 0.9621570706367493 0.2812499701976776 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.19509024918079376 7.549790126404332e-08 0.9807857275009155 0.19507431983947754 0.0 0.9807733297348022 0.2812499403953552 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -1.0034427333494023e-07 7.549790126404332e-08 1.0000003576278687 0.0 0.0 1.0 0.2499999701976776 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -8.544311214109257e-08 -0.19509020447731018 0.9807853698730469 0.0 -0.19391460716724396 0.9809869527816772 0.2499999701976776 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.07465790212154388 0.9238795042037964 0.37533071637153625 0.07565538585186005 0.921689510345459 0.3804132342338562 0.2812499701976776 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.0380602702498436 0.9807852506637573 0.19134224951267242 0.039185766130685806 0.9795831441879272 0.19708853960037231 0.28124991059303284 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -7.2120158733923745e-09 0.9807852506637573 0.19509084522724152 0.0 0.9795831441879272 0.20096439123153687 0.2499999701976776 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 4.121675800661251e-08 0.9238795042037964 0.3826838433742523 0.0 0.921689510345459 0.3878597319126129 0.2499999701976776 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.18024002015590668 -0.38268327713012695 0.9061277508735657 0.18039490282535553 -0.3805353045463562 0.9069795608520508 0.2812499701976776 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.1913416087627411 -0.19509020447731018 0.9619399309158325 0.191381573677063 -0.19391460716724396 0.9621570706367493 0.2812499701976776 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -8.544311214109257e-08 -0.19509020447731018 0.9807853698730469 0.0 -0.19391460716724396 0.9809869527816772 0.2499999701976776 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 6.356849979738399e-08 -0.38268327713012695 0.923879861831665 0.0 -0.3805353045463562 0.9247413277626038 0.2499999701976776 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.10838642716407776 0.8314695954322815 0.5448955297470093 0.10919522494077682 0.8286385536193848 0.5489974617958069 0.2812499701976776 0.8124998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.07465790212154388 0.9238795042037964 0.37533071637153625 0.07565538585186005 0.921689510345459 0.3804132342338562 0.2812499701976776 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 4.121675800661251e-08 0.9238795042037964 0.3826838433742523 0.0 0.921689510345459 0.3878597319126129 0.2499999701976776 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 2.6315596812764852e-08 0.8314695954322815 0.555570662021637 0.0 0.8286385536193848 0.5597705245018005 0.2499999701976776 0.8124998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.1622115671634674 -0.5555701851844788 0.8154933452606201 0.16257210075855255 -0.5527512431144714 0.8173161745071411 0.2812499403953552 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.18024002015590668 -0.38268327713012695 0.9061277508735657 0.18039490282535553 -0.3805353045463562 0.9069795608520508 0.2812499701976776 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 6.356849979738399e-08 -0.38268327713012695 0.923879861831665 0.0 -0.3805353045463562 0.9247413277626038 0.2499999701976776 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -8.544311214109257e-08 -0.5555701851844788 0.831469714641571 0.0 -0.5527512431144714 0.8333384394645691 0.2499999701976776 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.13794966042041779 0.7071067690849304 0.6935202479362488 0.13852351903915405 0.7040314674377441 0.6964934468269348 0.2812499701976776 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.10838642716407776 0.8314695954322815 0.5448955297470093 0.10919522494077682 0.8286385536193848 0.5489974617958069 0.2812499701976776 0.8124998807907104 0 1.0 0 0.0 0 0.0 0 0.0 2.6315596812764852e-08 0.8314695954322815 0.555570662021637 0.0 0.8286385536193848 0.5597705245018005 0.2499999701976776 0.8124998807907104 0 1.0 0 0.0 0 0.0 0 0.0 -2.5838467365701945e-08 0.7071067690849304 0.7071070671081543 0.0 0.7040314674377441 0.7101352214813232 0.2499999701976776 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.13794966042041779 -0.7071067690849304 0.6935202479362488 0.13852351903915405 -0.7040314674377441 0.6964934468269348 0.2812499701976776 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.1622115671634674 -0.5555701851844788 0.8154933452606201 0.16257210075855255 -0.5527512431144714 0.8173161745071411 0.2812499403953552 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -8.544311214109257e-08 -0.5555701851844788 0.831469714641571 0.0 -0.5527512431144714 0.8333384394645691 0.2499999701976776 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -2.5838467365701945e-08 -0.7071067690849304 0.7071070671081543 0.0 -0.7040314674377441 0.7101352214813232 0.2499999701976776 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 0.1622115671634674 0.5555701851844788 0.8154933452606201 0.16257210075855255 0.5527512431144714 0.8173161745071411 0.2812499403953552 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.13794966042041779 0.7071067690849304 0.6935202479362488 0.13852351903915405 0.7040314674377441 0.6964934468269348 0.2812499701976776 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -2.5838467365701945e-08 0.7071067690849304 0.7071070671081543 0.0 0.7040314674377441 0.7101352214813232 0.2499999701976776 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -8.544311214109257e-08 0.5555701851844788 0.831469714641571 0.0 0.5527512431144714 0.8333384394645691 0.2499999701976776 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 4.121675800661251e-08 0.9238795042037964 0.3826838433742523 0.0 0.921689510345459 0.3878597319126129 0.2499999701976776 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 -7.2120158733923745e-09 0.9807852506637573 0.19509084522724152 0.0 0.9795831441879272 0.20096439123153687 0.2499999701976776 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.03806028142571449 0.9807852506637573 0.19134221971035004 -0.039185766130685806 0.9795831441879272 0.19708853960037231 0.2187500298023224 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.07465781271457672 0.9238795042037964 0.3753306567668915 -0.07565538585186005 0.921689510345459 0.3804132342338562 0.2187500298023224 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 6.356849979738399e-08 -0.38268327713012695 0.923879861831665 0.0 -0.3805353045463562 0.9247413277626038 0.2499999701976776 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -8.544311214109257e-08 -0.19509020447731018 0.9807853698730469 0.0 -0.19391460716724396 0.9809869527816772 0.2499999701976776 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.19134175777435303 -0.19509020447731018 0.961939811706543 -0.191381573677063 -0.19391460716724396 0.9621570706367493 0.2187499701976776 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.18023990094661713 -0.38268327713012695 0.9061277508735657 -0.18039490282535553 -0.3805353045463562 0.9069795608520508 0.21875 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 2.6315596812764852e-08 0.8314695954322815 0.555570662021637 0.0 0.8286385536193848 0.5597705245018005 0.2499999701976776 0.8124998807907104 0 1.0 0 0.0 0 0.0 0 0.0 4.121675800661251e-08 0.9238795042037964 0.3826838433742523 0.0 0.921689510345459 0.3878597319126129 0.2499999701976776 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 -0.07465781271457672 0.9238795042037964 0.3753306567668915 -0.07565538585186005 0.921689510345459 0.3804132342338562 0.2187500298023224 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 -0.10838636755943298 0.8314695954322815 0.5448955297470093 -0.10919522494077682 0.8286385536193848 0.5489974617958069 0.21875 0.8124998807907104 0 1.0 0 0.0 0 0.0 0 0.0 -8.544311214109257e-08 -0.5555701851844788 0.831469714641571 0.0 -0.5527512431144714 0.8333384394645691 0.2499999701976776 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 6.356849979738399e-08 -0.38268327713012695 0.923879861831665 0.0 -0.3805353045463562 0.9247413277626038 0.2499999701976776 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -0.18023990094661713 -0.38268327713012695 0.9061277508735657 -0.18039490282535553 -0.3805353045463562 0.9069795608520508 0.21875 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -0.16221173107624054 -0.5555701851844788 0.8154932260513306 -0.16257210075855255 -0.5527512431144714 0.8173161745071411 0.2187499701976776 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -2.5838467365701945e-08 0.7071067690849304 0.7071070671081543 0.0 0.7040314674377441 0.7101352214813232 0.2499999701976776 0.75 0 1.0 0 0.0 0 0.0 0 0.0 2.6315596812764852e-08 0.8314695954322815 0.555570662021637 0.0 0.8286385536193848 0.5597705245018005 0.2499999701976776 0.8124998807907104 0 1.0 0 0.0 0 0.0 0 0.0 -0.10838636755943298 0.8314695954322815 0.5448955297470093 -0.10919522494077682 0.8286385536193848 0.5489974617958069 0.21875 0.8124998807907104 0 1.0 0 0.0 0 0.0 0 0.0 -0.13794972002506256 0.7071067690849304 0.693520188331604 -0.13852351903915405 0.7040314674377441 0.6964934468269348 0.2187499701976776 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -2.5838467365701945e-08 -0.7071067690849304 0.7071070671081543 0.0 -0.7040314674377441 0.7101352214813232 0.2499999701976776 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -8.544311214109257e-08 -0.5555701851844788 0.831469714641571 0.0 -0.5527512431144714 0.8333384394645691 0.2499999701976776 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.16221173107624054 -0.5555701851844788 0.8154932260513306 -0.16257210075855255 -0.5527512431144714 0.8173161745071411 0.2187499701976776 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.13794972002506256 -0.7071067690849304 0.693520188331604 -0.13852351903915405 -0.7040314674377441 0.6964934468269348 0.2187499701976776 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -8.544311214109257e-08 0.5555701851844788 0.831469714641571 0.0 0.5527512431144714 0.8333384394645691 0.2499999701976776 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 -2.5838467365701945e-08 0.7071067690849304 0.7071070671081543 0.0 0.7040314674377441 0.7101352214813232 0.2499999701976776 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.13794972002506256 0.7071067690849304 0.693520188331604 -0.13852351903915405 0.7040314674377441 0.6964934468269348 0.2187499701976776 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.16221173107624054 0.5555701851844788 0.8154932260513306 -0.16257210075855255 0.5527512431144714 0.8173161745071411 0.2187499701976776 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 -1.0937306171854289e-08 -0.8314696550369263 0.5555704832077026 0.0 -0.8286385536193848 0.5597705245018005 0.2499999701976776 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -2.5838467365701945e-08 -0.7071067690849304 0.7071070671081543 0.0 -0.7040314674377441 0.7101352214813232 0.2499999701976776 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -0.13794972002506256 -0.7071067690849304 0.693520188331604 -0.13852351903915405 -0.7040314674377441 0.6964934468269348 0.2187499701976776 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -0.10838636755943298 -0.8314696550369263 0.544895350933075 -0.10919522494077682 -0.8286385536193848 0.5489974617958069 0.21875 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 6.356849979738399e-08 0.3826834261417389 0.923879861831665 0.0 0.3805353045463562 0.9247413277626038 0.2499999701976776 0.625 0 1.0 0 0.0 0 0.0 0 0.0 -8.544311214109257e-08 0.5555701851844788 0.831469714641571 0.0 0.5527512431144714 0.8333384394645691 0.2499999701976776 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 -0.16221173107624054 0.5555701851844788 0.8154932260513306 -0.16257210075855255 0.5527512431144714 0.8173161745071411 0.2187499701976776 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 -0.18023990094661713 0.3826834261417389 0.9061277508735657 -0.18039490282535553 0.3805353045463562 0.9069795608520508 0.21875 0.625 0 1.0 0 0.0 0 0.0 0 0.0 3.963855021993368e-09 -0.9238796234130859 0.38268372416496277 0.0 -0.921689510345459 0.3878597319126129 0.2499999701976776 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -1.0937306171854289e-08 -0.8314696550369263 0.5555704832077026 0.0 -0.8286385536193848 0.5597705245018005 0.2499999701976776 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.10838636755943298 -0.8314696550369263 0.544895350933075 -0.10919522494077682 -0.8286385536193848 0.5489974617958069 0.21875 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.07465782016515732 -0.9238796234130859 0.37533053755760193 -0.07565538585186005 -0.921689510345459 0.3804132342338562 0.21875 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -8.544311214109257e-08 0.19509035348892212 0.9807853698730469 0.0 0.19391460716724396 0.9809869527816772 0.2499999701976776 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 6.356849979738399e-08 0.3826834261417389 0.923879861831665 0.0 0.3805353045463562 0.9247413277626038 0.2499999701976776 0.625 0 1.0 0 0.0 0 0.0 0 0.0 -0.18023990094661713 0.3826834261417389 0.9061277508735657 -0.18039490282535553 0.3805353045463562 0.9069795608520508 0.21875 0.625 0 1.0 0 0.0 0 0.0 0 0.0 -0.19134175777435303 0.19509035348892212 0.961939811706543 -0.191381573677063 0.19391460716724396 0.9621570706367493 0.2187499701976776 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 3.963855021993368e-09 -0.9807853102684021 0.1950906366109848 0.0 -0.9795831441879272 0.20096439123153687 0.2499999701976776 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 3.963855021993368e-09 -0.9238796234130859 0.38268372416496277 0.0 -0.921689510345459 0.3878597319126129 0.2499999701976776 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.07465782016515732 -0.9238796234130859 0.37533053755760193 -0.07565538585186005 -0.921689510345459 0.3804132342338562 0.21875 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.038060229271650314 -0.9807853102684021 0.19134202599525452 -0.039185766130685806 -0.9795831441879272 0.19708853960037231 0.2187500298023224 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -1.0034427333494023e-07 7.549790126404332e-08 1.0000003576278687 0.0 0.0 1.0 0.2499999701976776 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -8.544311214109257e-08 0.19509035348892212 0.9807853698730469 0.0 0.19391460716724396 0.9809869527816772 0.2499999701976776 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 -0.19134175777435303 0.19509035348892212 0.961939811706543 -0.191381573677063 0.19391460716724396 0.9621570706367493 0.2187499701976776 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 -0.19509044289588928 7.549790126404332e-08 0.980785608291626 -0.19507431983947754 0.0 0.9807733297348022 0.2187499701976776 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -7.2120158733923745e-09 0.9807852506637573 0.19509084522724152 0.0 0.9795831441879272 0.20096439123153687 0.2499999701976776 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.23437494039535522 1.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.03806028142571449 0.9807852506637573 0.19134221971035004 -0.039185766130685806 0.9795831441879272 0.19708853960037231 0.2187500298023224 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.2343750298023224 0.0 0 1.0 0 0.0 0 0.0 0 0.0 3.963855021993368e-09 -0.9807853102684021 0.1950906366109848 0.0 -0.9795831441879272 0.20096439123153687 0.2499999701976776 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.038060229271650314 -0.9807853102684021 0.19134202599525452 -0.039185766130685806 -0.9795831441879272 0.19708853960037231 0.2187500298023224 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -8.544311214109257e-08 -0.19509020447731018 0.9807853698730469 0.0 -0.19391460716724396 0.9809869527816772 0.2499999701976776 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -1.0034427333494023e-07 7.549790126404332e-08 1.0000003576278687 0.0 0.0 1.0 0.2499999701976776 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.19509044289588928 7.549790126404332e-08 0.980785608291626 -0.19507431983947754 0.0 0.9807733297348022 0.2187499701976776 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.19134175777435303 -0.19509020447731018 0.961939811706543 -0.191381573677063 -0.19391460716724396 0.9621570706367493 0.2187499701976776 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.18023990094661713 0.3826834261417389 0.9061277508735657 -0.18039490282535553 0.3805353045463562 0.9069795608520508 0.21875 0.625 0 1.0 0 0.0 0 0.0 0 0.0 -0.16221173107624054 0.5555701851844788 0.8154932260513306 -0.16257210075855255 0.5527512431144714 0.8173161745071411 0.2187499701976776 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 -0.3181896507740021 0.5555701851844788 0.7681777477264404 -0.3188879191875458 0.5527512431144714 0.7698904275894165 0.1874999701976776 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 -0.35355332493782043 0.3826834261417389 0.8535537123680115 -0.35386210680007935 0.3805353045463562 0.8543656468391418 0.1875 0.625 0 1.0 0 0.0 0 0.0 0 0.0 -0.07465782016515732 -0.9238796234130859 0.37533053755760193 -0.07565538585186005 -0.921689510345459 0.3804132342338562 0.21875 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.10838636755943298 -0.8314696550369263 0.544895350933075 -0.10919522494077682 -0.8286385536193848 0.5489974617958069 0.21875 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.2126075029373169 -0.8314696550369263 0.5132802128791809 -0.2142094224691391 -0.8286385536193848 0.5171361565589905 0.1875 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.1464465856552124 -0.9238796234130859 0.3535536229610443 -0.14841151237487793 -0.921689510345459 0.3583483397960663 0.1875000298023224 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.19134175777435303 0.19509035348892212 0.961939811706543 -0.191381573677063 0.19391460716724396 0.9621570706367493 0.2187499701976776 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 -0.18023990094661713 0.3826834261417389 0.9061277508735657 -0.18039490282535553 0.3805353045463562 0.9069795608520508 0.21875 0.625 0 1.0 0 0.0 0 0.0 0 0.0 -0.35355332493782043 0.3826834261417389 0.8535537123680115 -0.35386210680007935 0.3805353045463562 0.8543656468391418 0.1875 0.625 0 1.0 0 0.0 0 0.0 0 0.0 -0.37533026933670044 0.19509035348892212 0.9061274528503418 -0.3754081726074219 0.19391460716724396 0.9063386917114258 0.1874999701976776 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 -0.038060229271650314 -0.9807853102684021 0.19134202599525452 -0.039185766130685806 -0.9795831441879272 0.19708853960037231 0.2187500298023224 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.07465782016515732 -0.9238796234130859 0.37533053755760193 -0.07565538585186005 -0.921689510345459 0.3804132342338562 0.21875 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.1464465856552124 -0.9238796234130859 0.3535536229610443 -0.14841151237487793 -0.921689510345459 0.3583483397960663 0.1875000298023224 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.07465782016515732 -0.9807853102684021 0.18024024367332458 -0.07690664380788803 -0.9795831441879272 0.18564409017562866 0.18750008940696716 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.19509044289588928 7.549790126404332e-08 0.980785608291626 -0.19507431983947754 0.0 0.9807733297348022 0.2187499701976776 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.19134175777435303 0.19509035348892212 0.961939811706543 -0.191381573677063 0.19391460716724396 0.9621570706367493 0.2187499701976776 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 -0.37533026933670044 0.19509035348892212 0.9061274528503418 -0.3754081726074219 0.19391460716724396 0.9063386917114258 0.1874999701976776 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 -0.38268357515335083 7.549790126404332e-08 0.9238798022270203 -0.382671594619751 0.0 0.9238563179969788 0.1874999701976776 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.03806028142571449 0.9807852506637573 0.19134221971035004 -0.039185766130685806 0.9795831441879272 0.19708853960037231 0.2187500298023224 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.2031250298023224 1.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.07465790957212448 0.9807852506637573 0.1802404373884201 -0.07690664380788803 0.9795831441879272 0.18564409017562866 0.18750008940696716 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.20312508940696716 0.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.038060229271650314 -0.9807853102684021 0.19134202599525452 -0.039185766130685806 -0.9795831441879272 0.19708853960037231 0.2187500298023224 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.07465782016515732 -0.9807853102684021 0.18024024367332458 -0.07690664380788803 -0.9795831441879272 0.18564409017562866 0.18750008940696716 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.19134175777435303 -0.19509020447731018 0.961939811706543 -0.191381573677063 -0.19391460716724396 0.9621570706367493 0.2187499701976776 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.19509044289588928 7.549790126404332e-08 0.980785608291626 -0.19507431983947754 0.0 0.9807733297348022 0.2187499701976776 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.38268357515335083 7.549790126404332e-08 0.9238798022270203 -0.382671594619751 0.0 0.9238563179969788 0.1874999701976776 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.37533026933670044 -0.19509020447731018 0.9061274528503418 -0.3754081726074219 -0.19391460716724396 0.9063386917114258 0.1874999701976776 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.07465781271457672 0.9238795042037964 0.3753306567668915 -0.07565538585186005 0.921689510345459 0.3804132342338562 0.2187500298023224 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 -0.03806028142571449 0.9807852506637573 0.19134221971035004 -0.039185766130685806 0.9795831441879272 0.19708853960037231 0.2187500298023224 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.07465790957212448 0.9807852506637573 0.1802404373884201 -0.07690664380788803 0.9795831441879272 0.18564409017562866 0.18750008940696716 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.1464466005563736 0.9238795042037964 0.35355374217033386 -0.14841151237487793 0.921689510345459 0.3583483397960663 0.1875000298023224 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 -0.18023990094661713 -0.38268327713012695 0.9061277508735657 -0.18039490282535553 -0.3805353045463562 0.9069795608520508 0.21875 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -0.19134175777435303 -0.19509020447731018 0.961939811706543 -0.191381573677063 -0.19391460716724396 0.9621570706367493 0.2187499701976776 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.37533026933670044 -0.19509020447731018 0.9061274528503418 -0.3754081726074219 -0.19391460716724396 0.9063386917114258 0.1874999701976776 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.35355332493782043 -0.38268327713012695 0.8535537123680115 -0.35386210680007935 -0.3805353045463562 0.8543656468391418 0.1875 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -0.10838636755943298 0.8314695954322815 0.5448955297470093 -0.10919522494077682 0.8286385536193848 0.5489974617958069 0.21875 0.8124998807907104 0 1.0 0 0.0 0 0.0 0 0.0 -0.07465781271457672 0.9238795042037964 0.3753306567668915 -0.07565538585186005 0.921689510345459 0.3804132342338562 0.2187500298023224 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 -0.1464466005563736 0.9238795042037964 0.35355374217033386 -0.14841151237487793 0.921689510345459 0.3583483397960663 0.1875000298023224 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 -0.21260753273963928 0.8314695954322815 0.5132803916931152 -0.2142094224691391 0.8286385536193848 0.5171361565589905 0.1875000298023224 0.8124998807907104 0 1.0 0 0.0 0 0.0 0 0.0 -0.16221173107624054 -0.5555701851844788 0.8154932260513306 -0.16257210075855255 -0.5527512431144714 0.8173161745071411 0.2187499701976776 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.18023990094661713 -0.38268327713012695 0.9061277508735657 -0.18039490282535553 -0.3805353045463562 0.9069795608520508 0.21875 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -0.35355332493782043 -0.38268327713012695 0.8535537123680115 -0.35386210680007935 -0.3805353045463562 0.8543656468391418 0.1875 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -0.3181896507740021 -0.5555701851844788 0.7681777477264404 -0.3188879191875458 -0.5527512431144714 0.7698904275894165 0.1874999701976776 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.13794972002506256 0.7071067690849304 0.693520188331604 -0.13852351903915405 0.7040314674377441 0.6964934468269348 0.2187499701976776 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.10838636755943298 0.8314695954322815 0.5448955297470093 -0.10919522494077682 0.8286385536193848 0.5489974617958069 0.21875 0.8124998807907104 0 1.0 0 0.0 0 0.0 0 0.0 -0.21260753273963928 0.8314695954322815 0.5132803916931152 -0.2142094224691391 0.8286385536193848 0.5171361565589905 0.1875000298023224 0.8124998807907104 0 1.0 0 0.0 0 0.0 0 0.0 -0.27059805393218994 0.7071067690849304 0.6532817482948303 -0.2717368006706238 0.7040314674377441 0.6560564041137695 0.1875 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.13794972002506256 -0.7071067690849304 0.693520188331604 -0.13852351903915405 -0.7040314674377441 0.6964934468269348 0.2187499701976776 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -0.16221173107624054 -0.5555701851844788 0.8154932260513306 -0.16257210075855255 -0.5527512431144714 0.8173161745071411 0.2187499701976776 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.3181896507740021 -0.5555701851844788 0.7681777477264404 -0.3188879191875458 -0.5527512431144714 0.7698904275894165 0.1874999701976776 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.27059805393218994 -0.7071067690849304 0.6532817482948303 -0.2717368006706238 -0.7040314674377441 0.6560564041137695 0.1875 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -0.16221173107624054 0.5555701851844788 0.8154932260513306 -0.16257210075855255 0.5527512431144714 0.8173161745071411 0.2187499701976776 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 -0.13794972002506256 0.7071067690849304 0.693520188331604 -0.13852351903915405 0.7040314674377441 0.6964934468269348 0.2187499701976776 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.27059805393218994 0.7071067690849304 0.6532817482948303 -0.2717368006706238 0.7040314674377441 0.6560564041137695 0.1875 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.3181896507740021 0.5555701851844788 0.7681777477264404 -0.3188879191875458 0.5527512431144714 0.7698904275894165 0.1874999701976776 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 -0.10838636755943298 -0.8314696550369263 0.544895350933075 -0.10919522494077682 -0.8286385536193848 0.5489974617958069 0.21875 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.13794972002506256 -0.7071067690849304 0.693520188331604 -0.13852351903915405 -0.7040314674377441 0.6964934468269348 0.2187499701976776 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -0.27059805393218994 -0.7071067690849304 0.6532817482948303 -0.2717368006706238 -0.7040314674377441 0.6560564041137695 0.1875 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -0.2126075029373169 -0.8314696550369263 0.5132802128791809 -0.2142094224691391 -0.8286385536193848 0.5171361565589905 0.1875 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.35355332493782043 -0.38268327713012695 0.8535537123680115 -0.35386210680007935 -0.3805353045463562 0.8543656468391418 0.1875 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -0.37533026933670044 -0.19509020447731018 0.9061274528503418 -0.3754081726074219 -0.19391460716724396 0.9063386917114258 0.1874999701976776 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448950529098511 -0.19509020447731018 0.8154931664466858 -0.5449995398521423 -0.19391460716724396 0.8156682252883911 0.15625 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.513279914855957 -0.38268327713012695 0.7681780457496643 -0.5137485861778259 -0.3805353045463562 0.7689138650894165 0.1562500298023224 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -0.21260753273963928 0.8314695954322815 0.5132803916931152 -0.2142094224691391 0.8286385536193848 0.5171361565589905 0.1875000298023224 0.8124998807907104 0 1.0 0 0.0 0 0.0 0 0.0 -0.1464466005563736 0.9238795042037964 0.35355374217033386 -0.14841151237487793 0.921689510345459 0.3583483397960663 0.1875000298023224 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 -0.2126075178384781 0.9238795042037964 0.31818997859954834 -0.2154911905527115 0.921689510345459 0.32248908281326294 0.15625005960464478 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 -0.30865830183029175 0.8314695954322815 0.4619401693344116 -0.3109835982322693 0.8286385536193848 0.46540728211402893 0.1562500298023224 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.3181896507740021 -0.5555701851844788 0.7681777477264404 -0.3188879191875458 -0.5527512431144714 0.7698904275894165 0.1874999701976776 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.35355332493782043 -0.38268327713012695 0.8535537123680115 -0.35386210680007935 -0.3805353045463562 0.8543656468391418 0.1875 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -0.513279914855957 -0.38268327713012695 0.7681780457496643 -0.5137485861778259 -0.3805353045463562 0.7689138650894165 0.1562500298023224 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -0.4619396924972534 -0.5555701851844788 0.6913416981697083 -0.46296578645706177 -0.5527512431144714 0.6928922533988953 0.15625 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.27059805393218994 0.7071067690849304 0.6532817482948303 -0.2717368006706238 0.7040314674377441 0.6560564041137695 0.1875 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.21260753273963928 0.8314695954322815 0.5132803916931152 -0.2142094224691391 0.8286385536193848 0.5171361565589905 0.1875000298023224 0.8124998807907104 0 1.0 0 0.0 0 0.0 0 0.0 -0.30865830183029175 0.8314695954322815 0.4619401693344116 -0.3109835982322693 0.8286385536193848 0.46540728211402893 0.1562500298023224 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.39284747838974 0.7071067690849304 0.5879380702972412 -0.39451277256011963 0.7040314674377441 0.5904415845870972 0.1562500298023224 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.27059805393218994 -0.7071067690849304 0.6532817482948303 -0.2717368006706238 -0.7040314674377441 0.6560564041137695 0.1875 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -0.3181896507740021 -0.5555701851844788 0.7681777477264404 -0.3188879191875458 -0.5527512431144714 0.7698904275894165 0.1874999701976776 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.4619396924972534 -0.5555701851844788 0.6913416981697083 -0.46296578645706177 -0.5527512431144714 0.6928922533988953 0.15625 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.39284747838974 -0.7071067690849304 0.5879380702972412 -0.39451277256011963 -0.7040314674377441 0.5904415845870972 0.1562500298023224 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -0.3181896507740021 0.5555701851844788 0.7681777477264404 -0.3188879191875458 0.5527512431144714 0.7698904275894165 0.1874999701976776 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 -0.27059805393218994 0.7071067690849304 0.6532817482948303 -0.2717368006706238 0.7040314674377441 0.6560564041137695 0.1875 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.39284747838974 0.7071067690849304 0.5879380702972412 -0.39451277256011963 0.7040314674377441 0.5904415845870972 0.1562500298023224 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.4619396924972534 0.5555701851844788 0.6913416981697083 -0.46296578645706177 0.5527512431144714 0.6928922533988953 0.15625 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 -0.2126075029373169 -0.8314696550369263 0.5132802128791809 -0.2142094224691391 -0.8286385536193848 0.5171361565589905 0.1875 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.27059805393218994 -0.7071067690849304 0.6532817482948303 -0.2717368006706238 -0.7040314674377441 0.6560564041137695 0.1875 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -0.39284747838974 -0.7071067690849304 0.5879380702972412 -0.39451277256011963 -0.7040314674377441 0.5904415845870972 0.1562500298023224 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -0.308658242225647 -0.8314696550369263 0.4619399905204773 -0.3109835982322693 -0.8286385536193848 0.46540728211402893 0.1562500298023224 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.35355332493782043 0.3826834261417389 0.8535537123680115 -0.35386210680007935 0.3805353045463562 0.8543656468391418 0.1875 0.625 0 1.0 0 0.0 0 0.0 0 0.0 -0.3181896507740021 0.5555701851844788 0.7681777477264404 -0.3188879191875458 0.5527512431144714 0.7698904275894165 0.1874999701976776 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 -0.4619396924972534 0.5555701851844788 0.6913416981697083 -0.46296578645706177 0.5527512431144714 0.6928922533988953 0.15625 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 -0.513279914855957 0.3826834261417389 0.7681780457496643 -0.5137485861778259 0.3805353045463562 0.7689138650894165 0.1562500298023224 0.625 0 1.0 0 0.0 0 0.0 0 0.0 -0.1464465856552124 -0.9238796234130859 0.3535536229610443 -0.14841151237487793 -0.921689510345459 0.3583483397960663 0.1875000298023224 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.2126075029373169 -0.8314696550369263 0.5132802128791809 -0.2142094224691391 -0.8286385536193848 0.5171361565589905 0.1875 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.308658242225647 -0.8314696550369263 0.4619399905204773 -0.3109835982322693 -0.8286385536193848 0.46540728211402893 0.1562500298023224 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.2126074731349945 -0.9238796234130859 0.3181898593902588 -0.2154911905527115 -0.921689510345459 0.32248908281326294 0.1562500298023224 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.37533026933670044 0.19509035348892212 0.9061274528503418 -0.3754081726074219 0.19391460716724396 0.9063386917114258 0.1874999701976776 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 -0.35355332493782043 0.3826834261417389 0.8535537123680115 -0.35386210680007935 0.3805353045463562 0.8543656468391418 0.1875 0.625 0 1.0 0 0.0 0 0.0 0 0.0 -0.513279914855957 0.3826834261417389 0.7681780457496643 -0.5137485861778259 0.3805353045463562 0.7689138650894165 0.1562500298023224 0.625 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448950529098511 0.19509035348892212 0.8154931664466858 -0.5449995398521423 0.19391460716724396 0.8156682252883911 0.15625 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 -0.07465782016515732 -0.9807853102684021 0.18024024367332458 -0.07690664380788803 -0.9795831441879272 0.18564409017562866 0.18750008940696716 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.1464465856552124 -0.9238796234130859 0.3535536229610443 -0.14841151237487793 -0.921689510345459 0.3583483397960663 0.1875000298023224 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.2126074731349945 -0.9238796234130859 0.3181898593902588 -0.2154911905527115 -0.921689510345459 0.32248908281326294 0.1562500298023224 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.10838634520769119 -0.9807853102684021 0.16221195459365845 -0.1116367056965828 -0.9795831441879272 0.1670888364315033 0.15625014901161194 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.38268357515335083 7.549790126404332e-08 0.9238798022270203 -0.382671594619751 0.0 0.9238563179969788 0.1874999701976776 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.37533026933670044 0.19509035348892212 0.9061274528503418 -0.3754081726074219 0.19391460716724396 0.9063386917114258 0.1874999701976776 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448950529098511 0.19509035348892212 0.8154931664466858 -0.5449995398521423 0.19391460716724396 0.8156682252883911 0.15625 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 -0.5555703639984131 7.549790126404332e-08 0.8314698338508606 -0.5555589199066162 0.0 0.8314462900161743 0.15625 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.07465790957212448 0.9807852506637573 0.1802404373884201 -0.07690664380788803 0.9795831441879272 0.18564409017562866 0.18750008940696716 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.17187511920928955 1.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.10838647186756134 0.9807852506637573 0.16221213340759277 -0.1116367056965828 0.9795831441879272 0.1670888364315033 0.15625011920928955 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.17187517881393433 0.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.07465782016515732 -0.9807853102684021 0.18024024367332458 -0.07690664380788803 -0.9795831441879272 0.18564409017562866 0.18750008940696716 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.10838634520769119 -0.9807853102684021 0.16221195459365845 -0.1116367056965828 -0.9795831441879272 0.1670888364315033 0.15625014901161194 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.37533026933670044 -0.19509020447731018 0.9061274528503418 -0.3754081726074219 -0.19391460716724396 0.9063386917114258 0.1874999701976776 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.38268357515335083 7.549790126404332e-08 0.9238798022270203 -0.382671594619751 0.0 0.9238563179969788 0.1874999701976776 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.5555703639984131 7.549790126404332e-08 0.8314698338508606 -0.5555589199066162 0.0 0.8314462900161743 0.15625 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448950529098511 -0.19509020447731018 0.8154931664466858 -0.5449995398521423 -0.19391460716724396 0.8156682252883911 0.15625 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.1464466005563736 0.9238795042037964 0.35355374217033386 -0.14841151237487793 0.921689510345459 0.3583483397960663 0.1875000298023224 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 -0.07465790957212448 0.9807852506637573 0.1802404373884201 -0.07690664380788803 0.9795831441879272 0.18564409017562866 0.18750008940696716 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.10838647186756134 0.9807852506637573 0.16221213340759277 -0.1116367056965828 0.9795831441879272 0.1670888364315033 0.15625011920928955 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.2126075178384781 0.9238795042037964 0.31818997859954834 -0.2154911905527115 0.921689510345459 0.32248908281326294 0.15625005960464478 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 -0.2126074731349945 -0.9238796234130859 0.3181898593902588 -0.2154911905527115 -0.921689510345459 0.32248908281326294 0.1562500298023224 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.308658242225647 -0.8314696550369263 0.4619399905204773 -0.3109835982322693 -0.8286385536193848 0.46540728211402893 0.1562500298023224 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.3928474187850952 -0.8314696550369263 0.3928476870059967 -0.395794540643692 -0.8286385536193848 0.395794540643692 0.1250000298023224 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 -0.27059799432754517 -0.9238796234130859 0.27059826254844666 -0.27426984906196594 -0.921689510345459 0.27426984906196594 0.12500005960464478 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448950529098511 0.19509035348892212 0.8154931664466858 -0.5449995398521423 0.19391460716724396 0.8156682252883911 0.15625 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 -0.513279914855957 0.3826834261417389 0.7681780457496643 -0.5137485861778259 0.3805353045463562 0.7689138650894165 0.1562500298023224 0.625 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532813906669617 0.3826834261417389 0.6532817482948303 -0.6538895964622498 0.3805353045463562 0.6538895964622498 0.1250000298023224 0.625 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935197710990906 0.19509035348892212 0.6935198903083801 -0.6936551928520203 0.19391460716724396 0.6936551928520203 0.12499997019767761 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 -0.10838634520769119 -0.9807853102684021 0.16221195459365845 -0.1116367056965828 -0.9795831441879272 0.1670888364315033 0.15625014901161194 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.2126074731349945 -0.9238796234130859 0.3181898593902588 -0.2154911905527115 -0.921689510345459 0.32248908281326294 0.1562500298023224 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.27059799432754517 -0.9238796234130859 0.27059826254844666 -0.27426984906196594 -0.921689510345459 0.27426984906196594 0.12500005960464478 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.1379496455192566 -0.9807853102684021 0.13794997334480286 -0.1420941799879074 -0.9795831441879272 0.1420941799879074 0.12500017881393433 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.5555703639984131 7.549790126404332e-08 0.8314698338508606 -0.5555589199066162 0.0 0.8314462900161743 0.15625 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448950529098511 0.19509035348892212 0.8154931664466858 -0.5449995398521423 0.19391460716724396 0.8156682252883911 0.15625 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935197710990906 0.19509035348892212 0.6935198903083801 -0.6936551928520203 0.19391460716724396 0.6936551928520203 0.12499997019767761 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 -0.70710688829422 7.549790126404332e-08 0.7071069478988647 -0.7070833444595337 0.0 0.7070833444595337 0.12499997019767761 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.10838647186756134 0.9807852506637573 0.16221213340759277 -0.1116367056965828 0.9795831441879272 0.1670888364315033 0.15625011920928955 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.1406252086162567 1.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.13794980943202972 0.9807852506637573 0.1379501223564148 -0.1420941799879074 0.9795831441879272 0.1420941799879074 0.12500017881393433 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.1406252384185791 0.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.10838634520769119 -0.9807853102684021 0.16221195459365845 -0.1116367056965828 -0.9795831441879272 0.1670888364315033 0.15625014901161194 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.1379496455192566 -0.9807853102684021 0.13794997334480286 -0.1420941799879074 -0.9795831441879272 0.1420941799879074 0.12500017881393433 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448950529098511 -0.19509020447731018 0.8154931664466858 -0.5449995398521423 -0.19391460716724396 0.8156682252883911 0.15625 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.5555703639984131 7.549790126404332e-08 0.8314698338508606 -0.5555589199066162 0.0 0.8314462900161743 0.15625 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.70710688829422 7.549790126404332e-08 0.7071069478988647 -0.7070833444595337 0.0 0.7070833444595337 0.12499997019767761 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935197710990906 -0.19509020447731018 0.6935198903083801 -0.6936551928520203 -0.19391460716724396 0.6936551928520203 0.12499997019767761 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.2126075178384781 0.9238795042037964 0.31818997859954834 -0.2154911905527115 0.921689510345459 0.32248908281326294 0.15625005960464478 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 -0.10838647186756134 0.9807852506637573 0.16221213340759277 -0.1116367056965828 0.9795831441879272 0.1670888364315033 0.15625011920928955 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.13794980943202972 0.9807852506637573 0.1379501223564148 -0.1420941799879074 0.9795831441879272 0.1420941799879074 0.12500017881393433 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.27059805393218994 0.9238795042037964 0.2705983519554138 -0.27426984906196594 0.921689510345459 0.27426984906196594 0.12500005960464478 0.875 0 1.0 0 0.0 0 0.0 0 0.0 -0.513279914855957 -0.38268327713012695 0.7681780457496643 -0.5137485861778259 -0.3805353045463562 0.7689138650894165 0.1562500298023224 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448950529098511 -0.19509020447731018 0.8154931664466858 -0.5449995398521423 -0.19391460716724396 0.8156682252883911 0.15625 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935197710990906 -0.19509020447731018 0.6935198903083801 -0.6936551928520203 -0.19391460716724396 0.6936551928520203 0.12499997019767761 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532813906669617 -0.38268327713012695 0.6532817482948303 -0.6538895964622498 -0.3805353045463562 0.6538895964622498 0.1250000298023224 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.30865830183029175 0.8314695954322815 0.4619401693344116 -0.3109835982322693 0.8286385536193848 0.46540728211402893 0.1562500298023224 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.2126075178384781 0.9238795042037964 0.31818997859954834 -0.2154911905527115 0.921689510345459 0.32248908281326294 0.15625005960464478 0.8749998807907104 0 1.0 0 0.0 0 0.0 0 0.0 -0.27059805393218994 0.9238795042037964 0.2705983519554138 -0.27426984906196594 0.921689510345459 0.27426984906196594 0.12500005960464478 0.875 0 1.0 0 0.0 0 0.0 0 0.0 -0.3928475081920624 0.8314695954322815 0.39284786581993103 -0.395794540643692 0.8286385536193848 0.395794540643692 0.12500005960464478 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.4619396924972534 -0.5555701851844788 0.6913416981697083 -0.46296578645706177 -0.5527512431144714 0.6928922533988953 0.15625 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.513279914855957 -0.38268327713012695 0.7681780457496643 -0.5137485861778259 -0.3805353045463562 0.7689138650894165 0.1562500298023224 0.37500011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532813906669617 -0.38268327713012695 0.6532817482948303 -0.6538895964622498 -0.3805353045463562 0.6538895964622498 0.1250000298023224 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879376530647278 -0.5555701851844788 0.5879377722740173 -0.5892513990402222 -0.5527512431144714 0.5892513990402222 0.12499997019767761 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.39284747838974 0.7071067690849304 0.5879380702972412 -0.39451277256011963 0.7040314674377441 0.5904415845870972 0.1562500298023224 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.30865830183029175 0.8314695954322815 0.4619401693344116 -0.3109835982322693 0.8286385536193848 0.46540728211402893 0.1562500298023224 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.3928475081920624 0.8314695954322815 0.39284786581993103 -0.395794540643692 0.8286385536193848 0.395794540643692 0.12500005960464478 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 0.7071067690849304 0.5000002384185791 -0.5021210312843323 0.7040314674377441 0.5021210312843323 0.1250000298023224 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.39284747838974 -0.7071067690849304 0.5879380702972412 -0.39451277256011963 -0.7040314674377441 0.5904415845870972 0.1562500298023224 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -0.4619396924972534 -0.5555701851844788 0.6913416981697083 -0.46296578645706177 -0.5527512431144714 0.6928922533988953 0.15625 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879376530647278 -0.5555701851844788 0.5879377722740173 -0.5892513990402222 -0.5527512431144714 0.5892513990402222 0.12499997019767761 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 -0.7071067690849304 0.5000002384185791 -0.5021210312843323 -0.7040314674377441 0.5021210312843323 0.1250000298023224 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -0.4619396924972534 0.5555701851844788 0.6913416981697083 -0.46296578645706177 0.5527512431144714 0.6928922533988953 0.15625 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 -0.39284747838974 0.7071067690849304 0.5879380702972412 -0.39451277256011963 0.7040314674377441 0.5904415845870972 0.1562500298023224 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 0.7071067690849304 0.5000002384185791 -0.5021210312843323 0.7040314674377441 0.5021210312843323 0.1250000298023224 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879376530647278 0.5555701851844788 0.5879377722740173 -0.5892513990402222 0.5527512431144714 0.5892513990402222 0.12499997019767761 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 -0.308658242225647 -0.8314696550369263 0.4619399905204773 -0.3109835982322693 -0.8286385536193848 0.46540728211402893 0.1562500298023224 0.18750005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.39284747838974 -0.7071067690849304 0.5879380702972412 -0.39451277256011963 -0.7040314674377441 0.5904415845870972 0.1562500298023224 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 -0.7071067690849304 0.5000002384185791 -0.5021210312843323 -0.7040314674377441 0.5021210312843323 0.1250000298023224 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -0.3928474187850952 -0.8314696550369263 0.3928476870059967 -0.395794540643692 -0.8286385536193848 0.395794540643692 0.1250000298023224 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 -0.513279914855957 0.3826834261417389 0.7681780457496643 -0.5137485861778259 0.3805353045463562 0.7689138650894165 0.1562500298023224 0.625 0 1.0 0 0.0 0 0.0 0 0.0 -0.4619396924972534 0.5555701851844788 0.6913416981697083 -0.46296578645706177 0.5527512431144714 0.6928922533988953 0.15625 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879376530647278 0.5555701851844788 0.5879377722740173 -0.5892513990402222 0.5527512431144714 0.5892513990402222 0.12499997019767761 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532813906669617 0.3826834261417389 0.6532817482948303 -0.6538895964622498 0.3805353045463562 0.6538895964622498 0.1250000298023224 0.625 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879376530647278 -0.5555701851844788 0.5879377722740173 -0.5892513990402222 -0.5527512431144714 0.5892513990402222 0.12499997019767761 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532813906669617 -0.38268327713012695 0.6532817482948303 -0.6538895964622498 -0.3805353045463562 0.6538895964622498 0.1250000298023224 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681776881217957 -0.38268327713012695 0.5132802724838257 -0.7689138650894165 -0.3805353045463562 0.5137485861778259 0.09375002980232239 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.6913415193557739 -0.5555701851844788 0.4619397819042206 -0.6928922533988953 -0.5527512431144714 0.46296578645706177 0.09375 0.3124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 0.7071067690849304 0.5000002384185791 -0.5021210312843323 0.7040314674377441 0.5021210312843323 0.1250000298023224 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.3928475081920624 0.8314695954322815 0.39284786581993103 -0.395794540643692 0.8286385536193848 0.395794540643692 0.12500005960464478 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.4619397819042206 0.8314695954322815 0.308658629655838 -0.46540728211402893 0.8286385536193848 0.3109835982322693 0.09375002980232239 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879377722740173 0.7071067690849304 0.3928477168083191 -0.5904415845870972 0.7040314674377441 0.39451277256011963 0.09375002980232239 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 -0.7071067690849304 0.5000002384185791 -0.5021210312843323 -0.7040314674377441 0.5021210312843323 0.1250000298023224 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879376530647278 -0.5555701851844788 0.5879377722740173 -0.5892513990402222 -0.5527512431144714 0.5892513990402222 0.12499997019767761 0.3125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.6913415193557739 -0.5555701851844788 0.4619397819042206 -0.6928922533988953 -0.5527512431144714 0.46296578645706177 0.09375 0.3124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879377722740173 -0.7071067690849304 0.3928477168083191 -0.5904415845870972 -0.7040314674377441 0.39451277256011963 0.09375002980232239 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879376530647278 0.5555701851844788 0.5879377722740173 -0.5892513990402222 0.5527512431144714 0.5892513990402222 0.12499997019767761 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 0.7071067690849304 0.5000002384185791 -0.5021210312843323 0.7040314674377441 0.5021210312843323 0.1250000298023224 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879377722740173 0.7071067690849304 0.3928477168083191 -0.5904415845870972 0.7040314674377441 0.39451277256011963 0.09375002980232239 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.6913415193557739 0.5555701851844788 0.4619397819042206 -0.6928922533988953 0.5527512431144714 0.46296578645706177 0.09375 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 -0.3928474187850952 -0.8314696550369263 0.3928476870059967 -0.395794540643692 -0.8286385536193848 0.395794540643692 0.1250000298023224 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 -0.7071067690849304 0.5000002384185791 -0.5021210312843323 -0.7040314674377441 0.5021210312843323 0.1250000298023224 0.25000011920928955 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879377722740173 -0.7071067690849304 0.3928477168083191 -0.5904415845870972 -0.7040314674377441 0.39451277256011963 0.09375002980232239 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.4619396924972534 -0.8314696550369263 0.3086584806442261 -0.46540728211402893 -0.8286385536193848 0.3109835982322693 0.09375002980232239 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532813906669617 0.3826834261417389 0.6532817482948303 -0.6538895964622498 0.3805353045463562 0.6538895964622498 0.1250000298023224 0.625 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879376530647278 0.5555701851844788 0.5879377722740173 -0.5892513990402222 0.5527512431144714 0.5892513990402222 0.12499997019767761 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 -0.6913415193557739 0.5555701851844788 0.4619397819042206 -0.6928922533988953 0.5527512431144714 0.46296578645706177 0.09375 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681776881217957 0.3826834261417389 0.5132802724838257 -0.7689138650894165 0.3805353045463562 0.5137485861778259 0.09375002980232239 0.625 0 1.0 0 0.0 0 0.0 0 0.0 -0.27059799432754517 -0.9238796234130859 0.27059826254844666 -0.27426984906196594 -0.921689510345459 0.27426984906196594 0.12500005960464478 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.3928474187850952 -0.8314696550369263 0.3928476870059967 -0.395794540643692 -0.8286385536193848 0.395794540643692 0.1250000298023224 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 -0.4619396924972534 -0.8314696550369263 0.3086584806442261 -0.46540728211402893 -0.8286385536193848 0.3109835982322693 0.09375002980232239 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 -0.3181895613670349 -0.9238796234130859 0.2126077115535736 -0.32248908281326294 -0.921689510345459 0.2154911905527115 0.09375008940696716 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935197710990906 0.19509035348892212 0.6935198903083801 -0.6936551928520203 0.19391460716724396 0.6936551928520203 0.12499997019767761 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532813906669617 0.3826834261417389 0.6532817482948303 -0.6538895964622498 0.3805353045463562 0.6538895964622498 0.1250000298023224 0.625 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681776881217957 0.3826834261417389 0.5132802724838257 -0.7689138650894165 0.3805353045463562 0.5137485861778259 0.09375002980232239 0.625 0 1.0 0 0.0 0 0.0 0 0.0 -0.8154929280281067 0.19509035348892212 0.5448950529098511 -0.8156682252883911 0.19391460716724396 0.5449995398521423 0.09375 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 -0.1379496455192566 -0.9807853102684021 0.13794997334480286 -0.1420941799879074 -0.9795831441879272 0.1420941799879074 0.12500017881393433 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.27059799432754517 -0.9238796234130859 0.27059826254844666 -0.27426984906196594 -0.921689510345459 0.27426984906196594 0.12500005960464478 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.3181895613670349 -0.9238796234130859 0.2126077115535736 -0.32248908281326294 -0.921689510345459 0.2154911905527115 0.09375008940696716 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.16221162676811218 -0.9807853102684021 0.10838665813207626 -0.1670888364315033 -0.9795831441879272 0.1116367056965828 0.09375020861625671 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.70710688829422 7.549790126404332e-08 0.7071069478988647 -0.7070833444595337 0.0 0.7070833444595337 0.12499997019767761 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935197710990906 0.19509035348892212 0.6935198903083801 -0.6936551928520203 0.19391460716724396 0.6936551928520203 0.12499997019767761 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 -0.8154929280281067 0.19509035348892212 0.5448950529098511 -0.8156682252883911 0.19391460716724396 0.5449995398521423 0.09375 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 -0.8314696550369263 7.549790126404332e-08 0.5555703639984131 -0.8314462900161743 0.0 0.5555589199066162 0.09375 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.13794980943202972 0.9807852506637573 0.1379501223564148 -0.1420941799879074 0.9795831441879272 0.1420941799879074 0.12500017881393433 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.10937532782554626 1.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.1622118055820465 0.9807852506637573 0.10838677734136581 -0.1670888364315033 0.9795831441879272 0.1116367056965828 0.09375020861625671 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.10937526822090149 0.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.1379496455192566 -0.9807853102684021 0.13794997334480286 -0.1420941799879074 -0.9795831441879272 0.1420941799879074 0.12500017881393433 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.16221162676811218 -0.9807853102684021 0.10838665813207626 -0.1670888364315033 -0.9795831441879272 0.1116367056965828 0.09375020861625671 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935197710990906 -0.19509020447731018 0.6935198903083801 -0.6936551928520203 -0.19391460716724396 0.6936551928520203 0.12499997019767761 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.70710688829422 7.549790126404332e-08 0.7071069478988647 -0.7070833444595337 0.0 0.7070833444595337 0.12499997019767761 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.8314696550369263 7.549790126404332e-08 0.5555703639984131 -0.8314462900161743 0.0 0.5555589199066162 0.09375 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.8154929280281067 -0.19509020447731018 0.5448950529098511 -0.8156682252883911 -0.19391460716724396 0.5449995398521423 0.09375 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.27059805393218994 0.9238795042037964 0.2705983519554138 -0.27426984906196594 0.921689510345459 0.27426984906196594 0.12500005960464478 0.875 0 1.0 0 0.0 0 0.0 0 0.0 -0.13794980943202972 0.9807852506637573 0.1379501223564148 -0.1420941799879074 0.9795831441879272 0.1420941799879074 0.12500017881393433 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.1622118055820465 0.9807852506637573 0.10838677734136581 -0.1670888364315033 0.9795831441879272 0.1116367056965828 0.09375020861625671 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.3181896507740021 0.9238795042037964 0.21260780096054077 -0.32248908281326294 0.921689510345459 0.2154911905527115 0.09375008940696716 0.875 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532813906669617 -0.38268327713012695 0.6532817482948303 -0.6538895964622498 -0.3805353045463562 0.6538895964622498 0.1250000298023224 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935197710990906 -0.19509020447731018 0.6935198903083801 -0.6936551928520203 -0.19391460716724396 0.6936551928520203 0.12499997019767761 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.8154929280281067 -0.19509020447731018 0.5448950529098511 -0.8156682252883911 -0.19391460716724396 0.5449995398521423 0.09375 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681776881217957 -0.38268327713012695 0.5132802724838257 -0.7689138650894165 -0.3805353045463562 0.5137485861778259 0.09375002980232239 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.3928475081920624 0.8314695954322815 0.39284786581993103 -0.395794540643692 0.8286385536193848 0.395794540643692 0.12500005960464478 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.27059805393218994 0.9238795042037964 0.2705983519554138 -0.27426984906196594 0.921689510345459 0.27426984906196594 0.12500005960464478 0.875 0 1.0 0 0.0 0 0.0 0 0.0 -0.3181896507740021 0.9238795042037964 0.21260780096054077 -0.32248908281326294 0.921689510345459 0.2154911905527115 0.09375008940696716 0.875 0 1.0 0 0.0 0 0.0 0 0.0 -0.4619397819042206 0.8314695954322815 0.308658629655838 -0.46540728211402893 0.8286385536193848 0.3109835982322693 0.09375002980232239 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.16221162676811218 -0.9807853102684021 0.10838665813207626 -0.1670888364315033 -0.9795831441879272 0.1116367056965828 0.09375020861625671 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.3181895613670349 -0.9238796234130859 0.2126077115535736 -0.32248908281326294 -0.921689510345459 0.2154911905527115 0.09375008940696716 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.35355326533317566 -0.9238796234130859 0.1464468091726303 -0.3583483397960663 -0.921689510345459 0.14841151237487793 0.06250005960464478 0.125 0 1.0 0 0.0 0 0.0 0 0.0 -0.18023988604545593 -0.9807853102684021 0.0746581181883812 -0.18564409017562866 -0.9795831441879272 0.07690664380788803 0.06250020861625671 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.8314696550369263 7.549790126404332e-08 0.5555703639984131 -0.8314462900161743 0.0 0.5555589199066162 0.09375 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.8154929280281067 0.19509035348892212 0.5448950529098511 -0.8156682252883911 0.19391460716724396 0.5449995398521423 0.09375 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 -0.9061271548271179 0.19509035348892212 0.37533023953437805 -0.9063386917114258 0.19391460716724396 0.3754081726074219 0.0625 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 -0.9238795042037964 7.549790126404332e-08 0.38268354535102844 -0.9238563179969788 0.0 0.382671594619751 0.0625 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.1622118055820465 0.9807852506637573 0.10838677734136581 -0.1670888364315033 0.9795831441879272 0.1116367056965828 0.09375020861625671 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.07812538743019104 1.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.18024009466171265 0.9807852506637573 0.07465820759534836 -0.18564409017562866 0.9795831441879272 0.07690664380788803 0.06250020861625671 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.07812532782554626 0.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.16221162676811218 -0.9807853102684021 0.10838665813207626 -0.1670888364315033 -0.9795831441879272 0.1116367056965828 0.09375020861625671 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.18023988604545593 -0.9807853102684021 0.0746581181883812 -0.18564409017562866 -0.9795831441879272 0.07690664380788803 0.06250020861625671 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.8154929280281067 -0.19509020447731018 0.5448950529098511 -0.8156682252883911 -0.19391460716724396 0.5449995398521423 0.09375 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.8314696550369263 7.549790126404332e-08 0.5555703639984131 -0.8314462900161743 0.0 0.5555589199066162 0.09375 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.9238795042037964 7.549790126404332e-08 0.38268354535102844 -0.9238563179969788 0.0 0.382671594619751 0.0625 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.9061271548271179 -0.19509020447731018 0.37533023953437805 -0.9063386917114258 -0.19391460716724396 0.3754081726074219 0.0625 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.3181896507740021 0.9238795042037964 0.21260780096054077 -0.32248908281326294 0.921689510345459 0.2154911905527115 0.09375008940696716 0.875 0 1.0 0 0.0 0 0.0 0 0.0 -0.1622118055820465 0.9807852506637573 0.10838677734136581 -0.1670888364315033 0.9795831441879272 0.1116367056965828 0.09375020861625671 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.18024009466171265 0.9807852506637573 0.07465820759534836 -0.18564409017562866 0.9795831441879272 0.07690664380788803 0.06250020861625671 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.3535533547401428 0.9238795042037964 0.14644686877727509 -0.3583483397960663 0.921689510345459 0.14841151237487793 0.06250005960464478 0.875 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681776881217957 -0.38268327713012695 0.5132802724838257 -0.7689138650894165 -0.3805353045463562 0.5137485861778259 0.09375002980232239 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.8154929280281067 -0.19509020447731018 0.5448950529098511 -0.8156682252883911 -0.19391460716724396 0.5449995398521423 0.09375 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.9061271548271179 -0.19509020447731018 0.37533023953437805 -0.9063386917114258 -0.19391460716724396 0.3754081726074219 0.0625 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.8535533547401428 -0.38268327713012695 0.3535537123680115 -0.8543656468391418 -0.3805353045463562 0.35386210680007935 0.06250002980232239 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.4619397819042206 0.8314695954322815 0.308658629655838 -0.46540728211402893 0.8286385536193848 0.3109835982322693 0.09375002980232239 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.3181896507740021 0.9238795042037964 0.21260780096054077 -0.32248908281326294 0.921689510345459 0.2154911905527115 0.09375008940696716 0.875 0 1.0 0 0.0 0 0.0 0 0.0 -0.3535533547401428 0.9238795042037964 0.14644686877727509 -0.3583483397960663 0.921689510345459 0.14841151237487793 0.06250005960464478 0.875 0 1.0 0 0.0 0 0.0 0 0.0 -0.5132799744606018 0.8314695954322815 0.21260783076286316 -0.5171361565589905 0.8286385536193848 0.2142094224691391 0.06250005960464478 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 -0.6913415193557739 -0.5555701851844788 0.4619397819042206 -0.6928922533988953 -0.5527512431144714 0.46296578645706177 0.09375 0.3124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681776881217957 -0.38268327713012695 0.5132802724838257 -0.7689138650894165 -0.3805353045463562 0.5137485861778259 0.09375002980232239 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.8535533547401428 -0.38268327713012695 0.3535537123680115 -0.8543656468391418 -0.3805353045463562 0.35386210680007935 0.06250002980232239 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681774497032166 -0.5555701851844788 0.31818968057632446 -0.7698904275894165 -0.5527512431144714 0.3188879191875458 0.0625 0.3124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879377722740173 0.7071067690849304 0.3928477168083191 -0.5904415845870972 0.7040314674377441 0.39451277256011963 0.09375002980232239 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.4619397819042206 0.8314695954322815 0.308658629655838 -0.46540728211402893 0.8286385536193848 0.3109835982322693 0.09375002980232239 0.8124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.5132799744606018 0.8314695954322815 0.21260783076286316 -0.5171361565589905 0.8286385536193848 0.2142094224691391 0.06250005960464478 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532814502716064 0.7071067690849304 0.27059826254844666 -0.6560564041137695 0.7040314674377441 0.2717368006706238 0.06250002980232239 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879377722740173 -0.7071067690849304 0.3928477168083191 -0.5904415845870972 -0.7040314674377441 0.39451277256011963 0.09375002980232239 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.6913415193557739 -0.5555701851844788 0.4619397819042206 -0.6928922533988953 -0.5527512431144714 0.46296578645706177 0.09375 0.3124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681774497032166 -0.5555701851844788 0.31818968057632446 -0.7698904275894165 -0.5527512431144714 0.3188879191875458 0.0625 0.3124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532814502716064 -0.7071067690849304 0.27059826254844666 -0.6560564041137695 -0.7040314674377441 0.2717368006706238 0.06250002980232239 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.6913415193557739 0.5555701851844788 0.4619397819042206 -0.6928922533988953 0.5527512431144714 0.46296578645706177 0.09375 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879377722740173 0.7071067690849304 0.3928477168083191 -0.5904415845870972 0.7040314674377441 0.39451277256011963 0.09375002980232239 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532814502716064 0.7071067690849304 0.27059826254844666 -0.6560564041137695 0.7040314674377441 0.2717368006706238 0.06250002980232239 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681774497032166 0.5555701851844788 0.31818968057632446 -0.7698904275894165 0.5527512431144714 0.3188879191875458 0.0625 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 -0.4619396924972534 -0.8314696550369263 0.3086584806442261 -0.46540728211402893 -0.8286385536193848 0.3109835982322693 0.09375002980232239 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879377722740173 -0.7071067690849304 0.3928477168083191 -0.5904415845870972 -0.7040314674377441 0.39451277256011963 0.09375002980232239 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532814502716064 -0.7071067690849304 0.27059826254844666 -0.6560564041137695 -0.7040314674377441 0.2717368006706238 0.06250002980232239 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.5132798552513123 -0.8314696550369263 0.212607741355896 -0.5171361565589905 -0.8286385536193848 0.2142094224691391 0.06250005960464478 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681776881217957 0.3826834261417389 0.5132802724838257 -0.7689138650894165 0.3805353045463562 0.5137485861778259 0.09375002980232239 0.625 0 1.0 0 0.0 0 0.0 0 0.0 -0.6913415193557739 0.5555701851844788 0.4619397819042206 -0.6928922533988953 0.5527512431144714 0.46296578645706177 0.09375 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681774497032166 0.5555701851844788 0.31818968057632446 -0.7698904275894165 0.5527512431144714 0.3188879191875458 0.0625 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 -0.8535533547401428 0.3826834261417389 0.3535537123680115 -0.8543656468391418 0.3805353045463562 0.35386210680007935 0.06250002980232239 0.625 0 1.0 0 0.0 0 0.0 0 0.0 -0.3181895613670349 -0.9238796234130859 0.2126077115535736 -0.32248908281326294 -0.921689510345459 0.2154911905527115 0.09375008940696716 0.12500005960464478 0 1.0 0 0.0 0 0.0 0 0.0 -0.4619396924972534 -0.8314696550369263 0.3086584806442261 -0.46540728211402893 -0.8286385536193848 0.3109835982322693 0.09375002980232239 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 -0.5132798552513123 -0.8314696550369263 0.212607741355896 -0.5171361565589905 -0.8286385536193848 0.2142094224691391 0.06250005960464478 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 -0.35355326533317566 -0.9238796234130859 0.1464468091726303 -0.3583483397960663 -0.921689510345459 0.14841151237487793 0.06250005960464478 0.125 0 1.0 0 0.0 0 0.0 0 0.0 -0.8154929280281067 0.19509035348892212 0.5448950529098511 -0.8156682252883911 0.19391460716724396 0.5449995398521423 0.09375 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681776881217957 0.3826834261417389 0.5132802724838257 -0.7689138650894165 0.3805353045463562 0.5137485861778259 0.09375002980232239 0.625 0 1.0 0 0.0 0 0.0 0 0.0 -0.8535533547401428 0.3826834261417389 0.3535537123680115 -0.8543656468391418 0.3805353045463562 0.35386210680007935 0.06250002980232239 0.625 0 1.0 0 0.0 0 0.0 0 0.0 -0.9061271548271179 0.19509035348892212 0.37533023953437805 -0.9063386917114258 0.19391460716724396 0.3754081726074219 0.0625 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532814502716064 0.7071067690849304 0.27059826254844666 -0.6560564041137695 0.7040314674377441 0.2717368006706238 0.06250002980232239 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.5132799744606018 0.8314695954322815 0.21260783076286316 -0.5171361565589905 0.8286385536193848 0.2142094224691391 0.06250005960464478 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448951125144958 0.8314695954322815 0.10838666558265686 -0.5489974617958069 0.8286385536193848 0.10919522494077682 0.031250059604644775 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935198903083801 0.7071067690849304 0.1379498839378357 -0.6964934468269348 0.7040314674377441 0.13852351903915405 0.03125002980232239 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532814502716064 -0.7071067690849304 0.27059826254844666 -0.6560564041137695 -0.7040314674377441 0.2717368006706238 0.06250002980232239 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681774497032166 -0.5555701851844788 0.31818968057632446 -0.7698904275894165 -0.5527512431144714 0.3188879191875458 0.0625 0.3124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.8154928088188171 -0.5555701851844788 0.16221174597740173 -0.8173161745071411 -0.5527512431144714 0.16257210075855255 0.03125002980232239 0.3124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935198903083801 -0.7071067690849304 0.1379498839378357 -0.6964934468269348 -0.7040314674377441 0.13852351903915405 0.03125002980232239 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681774497032166 0.5555701851844788 0.31818968057632446 -0.7698904275894165 0.5527512431144714 0.3188879191875458 0.0625 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532814502716064 0.7071067690849304 0.27059826254844666 -0.6560564041137695 0.7040314674377441 0.2717368006706238 0.06250002980232239 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935198903083801 0.7071067690849304 0.1379498839378357 -0.6964934468269348 0.7040314674377441 0.13852351903915405 0.03125002980232239 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.8154928088188171 0.5555701851844788 0.16221174597740173 -0.8173161745071411 0.5527512431144714 0.16257210075855255 0.03125002980232239 0.6875000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.5132798552513123 -0.8314696550369263 0.212607741355896 -0.5171361565589905 -0.8286385536193848 0.2142094224691391 0.06250005960464478 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532814502716064 -0.7071067690849304 0.27059826254844666 -0.6560564041137695 -0.7040314674377441 0.2717368006706238 0.06250002980232239 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935198903083801 -0.7071067690849304 0.1379498839378357 -0.6964934468269348 -0.7040314674377441 0.13852351903915405 0.03125002980232239 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448949933052063 -0.8314696550369263 0.10838662087917328 -0.5489974617958069 -0.8286385536193848 0.10919522494077682 0.031250059604644775 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 -0.8535533547401428 0.3826834261417389 0.3535537123680115 -0.8543656468391418 0.3805353045463562 0.35386210680007935 0.06250002980232239 0.625 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681774497032166 0.5555701851844788 0.31818968057632446 -0.7698904275894165 0.5527512431144714 0.3188879191875458 0.0625 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 -0.8154928088188171 0.5555701851844788 0.16221174597740173 -0.8173161745071411 0.5527512431144714 0.16257210075855255 0.03125002980232239 0.6875000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.906127393245697 0.3826834261417389 0.18024027347564697 -0.9069795608520508 0.3805353045463562 0.18039490282535553 0.03125002980232239 0.625 0 1.0 0 0.0 0 0.0 0 0.0 -0.35355326533317566 -0.9238796234130859 0.1464468091726303 -0.3583483397960663 -0.921689510345459 0.14841151237487793 0.06250005960464478 0.125 0 1.0 0 0.0 0 0.0 0 0.0 -0.5132798552513123 -0.8314696550369263 0.212607741355896 -0.5171361565589905 -0.8286385536193848 0.2142094224691391 0.06250005960464478 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448949933052063 -0.8314696550369263 0.10838662087917328 -0.5489974617958069 -0.8286385536193848 0.10919522494077682 0.031250059604644775 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 -0.3753301203250885 -0.9238796234130859 0.07465805858373642 -0.3804132342338562 -0.921689510345459 0.07565538585186005 0.03125008940696716 0.125 0 1.0 0 0.0 0 0.0 0 0.0 -0.9061271548271179 0.19509035348892212 0.37533023953437805 -0.9063386917114258 0.19391460716724396 0.3754081726074219 0.0625 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 -0.8535533547401428 0.3826834261417389 0.3535537123680115 -0.8543656468391418 0.3805353045463562 0.35386210680007935 0.06250002980232239 0.625 0 1.0 0 0.0 0 0.0 0 0.0 -0.906127393245697 0.3826834261417389 0.18024027347564697 -0.9069795608520508 0.3805353045463562 0.18039490282535553 0.03125002980232239 0.625 0 1.0 0 0.0 0 0.0 0 0.0 -0.9619393944740295 0.19509035348892212 0.19134174287319183 -0.9621570706367493 0.19391460716724396 0.191381573677063 0.031249970197677612 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.18023988604545593 -0.9807853102684021 0.0746581181883812 -0.18564409017562866 -0.9795831441879272 0.07690664380788803 0.06250020861625671 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.35355326533317566 -0.9238796234130859 0.1464468091726303 -0.3583483397960663 -0.921689510345459 0.14841151237487793 0.06250005960464478 0.125 0 1.0 0 0.0 0 0.0 0 0.0 -0.3753301203250885 -0.9238796234130859 0.07465805858373642 -0.3804132342338562 -0.921689510345459 0.07565538585186005 0.03125008940696716 0.125 0 1.0 0 0.0 0 0.0 0 0.0 -0.19134163856506348 -0.9807853102684021 0.03806053474545479 -0.19708853960037231 -0.9795831441879272 0.039185766130685806 0.0312502384185791 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.9238795042037964 7.549790126404332e-08 0.38268354535102844 -0.9238563179969788 0.0 0.382671594619751 0.0625 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.9061271548271179 0.19509035348892212 0.37533023953437805 -0.9063386917114258 0.19391460716724396 0.3754081726074219 0.0625 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 -0.9619393944740295 0.19509035348892212 0.19134174287319183 -0.9621570706367493 0.19391460716724396 0.191381573677063 0.031249970197677612 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.9807851910591125 7.549790126404332e-08 0.19509044289588928 -0.9807733297348022 0.0 0.19507431983947754 0.03125002980232239 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.18024009466171265 0.9807852506637573 0.07465820759534836 -0.18564409017562866 0.9795831441879272 0.07690664380788803 0.06250020861625671 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.04687541723251343 1.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.19134186208248138 0.9807852506637573 0.03806057572364807 -0.19708853960037231 0.9795831441879272 0.039185766130685806 0.0312502384185791 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.04687535762786865 0.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.18023988604545593 -0.9807853102684021 0.0746581181883812 -0.18564409017562866 -0.9795831441879272 0.07690664380788803 0.06250020861625671 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.19134163856506348 -0.9807853102684021 0.03806053474545479 -0.19708853960037231 -0.9795831441879272 0.039185766130685806 0.0312502384185791 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.9061271548271179 -0.19509020447731018 0.37533023953437805 -0.9063386917114258 -0.19391460716724396 0.3754081726074219 0.0625 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.9238795042037964 7.549790126404332e-08 0.38268354535102844 -0.9238563179969788 0.0 0.382671594619751 0.0625 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.9807851910591125 7.549790126404332e-08 0.19509044289588928 -0.9807733297348022 0.0 0.19507431983947754 0.03125002980232239 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.9619393944740295 -0.19509020447731018 0.19134174287319183 -0.9621570706367493 -0.19391460716724396 0.191381573677063 0.031249970197677612 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.3535533547401428 0.9238795042037964 0.14644686877727509 -0.3583483397960663 0.921689510345459 0.14841151237487793 0.06250005960464478 0.875 0 1.0 0 0.0 0 0.0 0 0.0 -0.18024009466171265 0.9807852506637573 0.07465820759534836 -0.18564409017562866 0.9795831441879272 0.07690664380788803 0.06250020861625671 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.19134186208248138 0.9807852506637573 0.03806057572364807 -0.19708853960037231 0.9795831441879272 0.039185766130685806 0.0312502384185791 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.37533020973205566 0.9238795042037964 0.07465810328722 -0.3804132342338562 0.921689510345459 0.07565538585186005 0.03125008940696716 0.875 0 1.0 0 0.0 0 0.0 0 0.0 -0.8535533547401428 -0.38268327713012695 0.3535537123680115 -0.8543656468391418 -0.3805353045463562 0.35386210680007935 0.06250002980232239 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.9061271548271179 -0.19509020447731018 0.37533023953437805 -0.9063386917114258 -0.19391460716724396 0.3754081726074219 0.0625 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.9619393944740295 -0.19509020447731018 0.19134174287319183 -0.9621570706367493 -0.19391460716724396 0.191381573677063 0.031249970197677612 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.906127393245697 -0.38268327713012695 0.18024027347564697 -0.9069795608520508 -0.3805353045463562 0.18039490282535553 0.03125002980232239 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.5132799744606018 0.8314695954322815 0.21260783076286316 -0.5171361565589905 0.8286385536193848 0.2142094224691391 0.06250005960464478 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 -0.3535533547401428 0.9238795042037964 0.14644686877727509 -0.3583483397960663 0.921689510345459 0.14841151237487793 0.06250005960464478 0.875 0 1.0 0 0.0 0 0.0 0 0.0 -0.37533020973205566 0.9238795042037964 0.07465810328722 -0.3804132342338562 0.921689510345459 0.07565538585186005 0.03125008940696716 0.875 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448951125144958 0.8314695954322815 0.10838666558265686 -0.5489974617958069 0.8286385536193848 0.10919522494077682 0.031250059604644775 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681774497032166 -0.5555701851844788 0.31818968057632446 -0.7698904275894165 -0.5527512431144714 0.3188879191875458 0.0625 0.3124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.8535533547401428 -0.38268327713012695 0.3535537123680115 -0.8543656468391418 -0.3805353045463562 0.35386210680007935 0.06250002980232239 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.906127393245697 -0.38268327713012695 0.18024027347564697 -0.9069795608520508 -0.3805353045463562 0.18039490282535553 0.03125002980232239 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.8154928088188171 -0.5555701851844788 0.16221174597740173 -0.8173161745071411 -0.5527512431144714 0.16257210075855255 0.03125002980232239 0.3124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.9807851910591125 7.549790126404332e-08 0.19509044289588928 -0.9807733297348022 0.0 0.19507431983947754 0.03125002980232239 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.9619393944740295 0.19509035348892212 0.19134174287319183 -0.9621570706367493 0.19391460716724396 0.191381573677063 0.031249970197677612 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.9807848334312439 0.19509035348892212 9.566792869009078e-08 -0.9809869527816772 0.19391460716724396 -0.0 0.0 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.9999998211860657 7.549790126404332e-08 1.4037141227163374e-07 -1.0 0.0 -0.0 0.0 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.19134186208248138 0.9807852506637573 0.03806057572364807 -0.19708853960037231 0.9795831441879272 0.039185766130685806 0.0312502384185791 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.015625476837158203 1.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.19509045779705048 0.9807852506637573 3.117347660008818e-07 -0.20096439123153687 0.9795831441879272 -0.0 2.384185791015625e-07 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.015625357627868652 0.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.19134163856506348 -0.9807853102684021 0.03806053474545479 -0.19708853960037231 -0.9795831441879272 0.039185766130685806 0.0312502384185791 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.19509024918079376 -0.9807853102684021 3.154600562993437e-07 -0.20096439123153687 -0.9795831441879272 -0.0 2.384185791015625e-07 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.9619393944740295 -0.19509020447731018 0.19134174287319183 -0.9621570706367493 -0.19391460716724396 0.191381573677063 0.031249970197677612 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.9807851910591125 7.549790126404332e-08 0.19509044289588928 -0.9807733297348022 0.0 0.19507431983947754 0.03125002980232239 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.9999998211860657 7.549790126404332e-08 1.4037141227163374e-07 -1.0 0.0 -0.0 0.0 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.9807848334312439 -0.19509020447731018 9.566792869009078e-08 -0.9809869527816772 -0.19391460716724396 -0.0 0.0 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.37533020973205566 0.9238795042037964 0.07465810328722 -0.3804132342338562 0.921689510345459 0.07565538585186005 0.03125008940696716 0.875 0 1.0 0 0.0 0 0.0 0 0.0 -0.19134186208248138 0.9807852506637573 0.03806057572364807 -0.19708853960037231 0.9795831441879272 0.039185766130685806 0.0312502384185791 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.19509045779705048 0.9807852506637573 3.117347660008818e-07 -0.20096439123153687 0.9795831441879272 -0.0 2.384185791015625e-07 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.3826833665370941 0.9238795042037964 2.819324436131865e-07 -0.3878597319126129 0.921689510345459 -0.0 8.940696716308594e-08 0.875 0 1.0 0 0.0 0 0.0 0 0.0 -0.906127393245697 -0.38268327713012695 0.18024027347564697 -0.9069795608520508 -0.3805353045463562 0.18039490282535553 0.03125002980232239 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.9619393944740295 -0.19509020447731018 0.19134174287319183 -0.9621570706367493 -0.19391460716724396 0.191381573677063 0.031249970197677612 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.9807848334312439 -0.19509020447731018 9.566792869009078e-08 -0.9809869527816772 -0.19391460716724396 -0.0 0.0 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.9238794445991516 -0.38268327713012695 3.191853465978056e-07 -0.9247413277626038 -0.3805353045463562 -0.0 5.960464477539063e-08 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448951125144958 0.8314695954322815 0.10838666558265686 -0.5489974617958069 0.8286385536193848 0.10919522494077682 0.031250059604644775 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 -0.37533020973205566 0.9238795042037964 0.07465810328722 -0.3804132342338562 0.921689510345459 0.07565538585186005 0.03125008940696716 0.875 0 1.0 0 0.0 0 0.0 0 0.0 -0.3826833665370941 0.9238795042037964 2.819324436131865e-07 -0.3878597319126129 0.921689510345459 -0.0 8.940696716308594e-08 0.875 0 1.0 0 0.0 0 0.0 0 0.0 -0.5555701851844788 0.8314695954322815 2.819324436131865e-07 -0.5597705245018005 0.8286385536193848 -0.0 5.960464477539063e-08 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 -0.8154928088188171 -0.5555701851844788 0.16221174597740173 -0.8173161745071411 -0.5527512431144714 0.16257210075855255 0.03125002980232239 0.3124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.906127393245697 -0.38268327713012695 0.18024027347564697 -0.9069795608520508 -0.3805353045463562 0.18039490282535553 0.03125002980232239 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.9238794445991516 -0.38268327713012695 3.191853465978056e-07 -0.9247413277626038 -0.3805353045463562 -0.0 5.960464477539063e-08 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.8314692378044128 -0.5555701851844788 1.4037141227163374e-07 -0.8333384394645691 -0.5527512431144714 -0.0 0.0 0.3124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935198903083801 0.7071067690849304 0.1379498839378357 -0.6964934468269348 0.7040314674377441 0.13852351903915405 0.03125002980232239 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448951125144958 0.8314695954322815 0.10838666558265686 -0.5489974617958069 0.8286385536193848 0.10919522494077682 0.031250059604644775 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 -0.5555701851844788 0.8314695954322815 2.819324436131865e-07 -0.5597705245018005 0.8286385536193848 -0.0 5.960464477539063e-08 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 -0.7071067094802856 0.7071067690849304 1.850748958531767e-07 -0.7101352214813232 0.7040314674377441 -0.0 0.0 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935198903083801 -0.7071067690849304 0.1379498839378357 -0.6964934468269348 -0.7040314674377441 0.13852351903915405 0.03125002980232239 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.8154928088188171 -0.5555701851844788 0.16221174597740173 -0.8173161745071411 -0.5527512431144714 0.16257210075855255 0.03125002980232239 0.3124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.8314692378044128 -0.5555701851844788 1.4037141227163374e-07 -0.8333384394645691 -0.5527512431144714 -0.0 0.0 0.3124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.7071067094802856 -0.7071067690849304 1.850748958531767e-07 -0.7101352214813232 -0.7040314674377441 -0.0 0.0 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.8154928088188171 0.5555701851844788 0.16221174597740173 -0.8173161745071411 0.5527512431144714 0.16257210075855255 0.03125002980232239 0.6875000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935198903083801 0.7071067690849304 0.1379498839378357 -0.6964934468269348 0.7040314674377441 0.13852351903915405 0.03125002980232239 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.7071067094802856 0.7071067690849304 1.850748958531767e-07 -0.7101352214813232 0.7040314674377441 -0.0 0.0 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.8314692378044128 0.5555701851844788 1.4037141227163374e-07 -0.8333384394645691 0.5527512431144714 -0.0 0.0 0.6875000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448949933052063 -0.8314696550369263 0.10838662087917328 -0.5489974617958069 -0.8286385536193848 0.10919522494077682 0.031250059604644775 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935198903083801 -0.7071067690849304 0.1379498839378357 -0.6964934468269348 -0.7040314674377441 0.13852351903915405 0.03125002980232239 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.7071067094802856 -0.7071067690849304 1.850748958531767e-07 -0.7101352214813232 -0.7040314674377441 -0.0 0.0 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.5555700659751892 -0.8314696550369263 2.59580701822415e-07 -0.5597705245018005 -0.8286385536193848 -0.0 5.960464477539063e-08 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 -0.906127393245697 0.3826834261417389 0.18024027347564697 -0.9069795608520508 0.3805353045463562 0.18039490282535553 0.03125002980232239 0.625 0 1.0 0 0.0 0 0.0 0 0.0 -0.8154928088188171 0.5555701851844788 0.16221174597740173 -0.8173161745071411 0.5527512431144714 0.16257210075855255 0.03125002980232239 0.6875000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.8314692378044128 0.5555701851844788 1.4037141227163374e-07 -0.8333384394645691 0.5527512431144714 -0.0 0.0 0.6875000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.9238794445991516 0.3826834261417389 3.191853465978056e-07 -0.9247413277626038 0.3805353045463562 -0.0 5.960464477539063e-08 0.6250000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.3753301203250885 -0.9238796234130859 0.07465805858373642 -0.3804132342338562 -0.921689510345459 0.07565538585186005 0.03125008940696716 0.125 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448949933052063 -0.8314696550369263 0.10838662087917328 -0.5489974617958069 -0.8286385536193848 0.10919522494077682 0.031250059604644775 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 -0.5555700659751892 -0.8314696550369263 2.59580701822415e-07 -0.5597705245018005 -0.8286385536193848 -0.0 5.960464477539063e-08 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 -0.38268324732780457 -0.9238796234130859 2.5213012122549117e-07 -0.3878597319126129 -0.921689510345459 -0.0 8.940696716308594e-08 0.125 0 1.0 0 0.0 0 0.0 0 0.0 -0.9619393944740295 0.19509035348892212 0.19134174287319183 -0.9621570706367493 0.19391460716724396 0.191381573677063 0.031249970197677612 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.906127393245697 0.3826834261417389 0.18024027347564697 -0.9069795608520508 0.3805353045463562 0.18039490282535553 0.03125002980232239 0.625 0 1.0 0 0.0 0 0.0 0 0.0 -0.9238794445991516 0.3826834261417389 3.191853465978056e-07 -0.9247413277626038 0.3805353045463562 -0.0 5.960464477539063e-08 0.6250000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.9807848334312439 0.19509035348892212 9.566792869009078e-08 -0.9809869527816772 0.19391460716724396 -0.0 0.0 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.19134163856506348 -0.9807853102684021 0.03806053474545479 -0.19708853960037231 -0.9795831441879272 0.039185766130685806 0.0312502384185791 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.3753301203250885 -0.9238796234130859 0.07465805858373642 -0.3804132342338562 -0.921689510345459 0.07565538585186005 0.03125008940696716 0.125 0 1.0 0 0.0 0 0.0 0 0.0 -0.38268324732780457 -0.9238796234130859 2.5213012122549117e-07 -0.3878597319126129 -0.921689510345459 -0.0 8.940696716308594e-08 0.125 0 1.0 0 0.0 0 0.0 0 0.0 -0.19509024918079376 -0.9807853102684021 3.154600562993437e-07 -0.20096439123153687 -0.9795831441879272 -0.0 2.384185791015625e-07 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.7071067094802856 -0.7071067690849304 1.850748958531767e-07 -0.7101352214813232 -0.7040314674377441 -0.0 1.0 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.8314692378044128 -0.5555701851844788 1.4037141227163374e-07 -0.8333384394645691 -0.5527512431144714 -0.0 1.0 0.3124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.8154926896095276 -0.5555701851844788 -0.16221146285533905 -0.8173161745071411 -0.5527512431144714 -0.16257210075855255 0.96875 0.3124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935198307037354 -0.7071067690849304 -0.13794949650764465 -0.6964934468269348 -0.7040314674377441 -0.13852351903915405 0.96875 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.8314692378044128 0.5555701851844788 1.4037141227163374e-07 -0.8333384394645691 0.5527512431144714 -0.0 1.0 0.6875000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.7071067094802856 0.7071067690849304 1.850748958531767e-07 -0.7101352214813232 0.7040314674377441 -0.0 1.0 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935198307037354 0.7071067690849304 -0.13794949650764465 -0.6964934468269348 0.7040314674377441 -0.13852351903915405 0.96875 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.8154926896095276 0.5555701851844788 -0.16221146285533905 -0.8173161745071411 0.5527512431144714 -0.16257210075855255 0.96875 0.6875000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.5555700659751892 -0.8314696550369263 2.59580701822415e-07 -0.5597705245018005 -0.8286385536193848 -0.0 1.0000001192092896 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 -0.7071067094802856 -0.7071067690849304 1.850748958531767e-07 -0.7101352214813232 -0.7040314674377441 -0.0 1.0 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935198307037354 -0.7071067690849304 -0.13794949650764465 -0.6964934468269348 -0.7040314674377441 -0.13852351903915405 0.96875 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448949337005615 -0.8314696550369263 -0.1083860844373703 -0.5489974617958069 -0.8286385536193848 -0.10919522494077682 0.96875 0.18749994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.9238794445991516 0.3826834261417389 3.191853465978056e-07 -0.9247413277626038 0.3805353045463562 -0.0 1.0000001192092896 0.6250000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.8314692378044128 0.5555701851844788 1.4037141227163374e-07 -0.8333384394645691 0.5527512431144714 -0.0 1.0 0.6875000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.8154926896095276 0.5555701851844788 -0.16221146285533905 -0.8173161745071411 0.5527512431144714 -0.16257210075855255 0.96875 0.6875000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.9061273336410522 0.3826834261417389 -0.18023963272571564 -0.9069795608520508 0.3805353045463562 -0.18039490282535553 0.96875 0.6250000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.38268324732780457 -0.9238796234130859 2.5213012122549117e-07 -0.3878597319126129 -0.921689510345459 -0.0 1.0000001192092896 0.125 0 1.0 0 0.0 0 0.0 0 0.0 -0.5555700659751892 -0.8314696550369263 2.59580701822415e-07 -0.5597705245018005 -0.8286385536193848 -0.0 1.0000001192092896 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448949337005615 -0.8314696550369263 -0.1083860844373703 -0.5489974617958069 -0.8286385536193848 -0.10919522494077682 0.96875 0.18749994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.3753300905227661 -0.9238796234130859 -0.07465754449367523 -0.3804132342338562 -0.921689510345459 -0.07565538585186005 0.9687501192092896 0.12499988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.9807848334312439 0.19509035348892212 9.566792869009078e-08 -0.9809869527816772 0.19391460716724396 -0.0 1.0 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.9238794445991516 0.3826834261417389 3.191853465978056e-07 -0.9247413277626038 0.3805353045463562 -0.0 1.0000001192092896 0.6250000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.9061273336410522 0.3826834261417389 -0.18023963272571564 -0.9069795608520508 0.3805353045463562 -0.18039490282535553 0.96875 0.6250000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.9619392156600952 0.19509035348892212 -0.19134153425693512 -0.9621570706367493 0.19391460716724396 -0.191381573677063 0.96875 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.19509024918079376 -0.9807853102684021 3.154600562993437e-07 -0.20096439123153687 -0.9795831441879272 -0.0 1.000000238418579 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.38268324732780457 -0.9238796234130859 2.5213012122549117e-07 -0.3878597319126129 -0.921689510345459 -0.0 1.0000001192092896 0.125 0 1.0 0 0.0 0 0.0 0 0.0 -0.3753300905227661 -0.9238796234130859 -0.07465754449367523 -0.3804132342338562 -0.921689510345459 -0.07565538585186005 0.9687501192092896 0.12499988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.19134163856506348 -0.9807853102684021 -0.03805990144610405 -0.19708853960037231 -0.9795831441879272 -0.039185766130685806 0.9687502384185791 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.9999998211860657 7.549790126404332e-08 1.4037141227163374e-07 -1.0 0.0 -0.0 1.0 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.9807848334312439 0.19509035348892212 9.566792869009078e-08 -0.9809869527816772 0.19391460716724396 -0.0 1.0 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.9619392156600952 0.19509035348892212 -0.19134153425693512 -0.9621570706367493 0.19391460716724396 -0.191381573677063 0.96875 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.9807850122451782 7.549790126404332e-08 -0.1950901597738266 -0.9807733297348022 0.0 -0.19507431983947754 0.96875 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.19509045779705048 0.9807852506637573 3.117347660008818e-07 -0.20096439123153687 0.9795831441879272 -0.0 1.000000238418579 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.9843754768371582 1.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.1913418471813202 0.9807852506637573 -0.03805994614958763 -0.19708853960037231 0.9795831441879272 -0.039185766130685806 0.9687502384185791 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.9843753576278687 0.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.19509024918079376 -0.9807853102684021 3.154600562993437e-07 -0.20096439123153687 -0.9795831441879272 -0.0 1.000000238418579 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.19134163856506348 -0.9807853102684021 -0.03805990144610405 -0.19708853960037231 -0.9795831441879272 -0.039185766130685806 0.9687502384185791 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.9807848334312439 -0.19509020447731018 9.566792869009078e-08 -0.9809869527816772 -0.19391460716724396 -0.0 1.0 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.9999998211860657 7.549790126404332e-08 1.4037141227163374e-07 -1.0 0.0 -0.0 1.0 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.9807850122451782 7.549790126404332e-08 -0.1950901597738266 -0.9807733297348022 0.0 -0.19507431983947754 0.96875 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.9619392156600952 -0.19509020447731018 -0.19134153425693512 -0.9621570706367493 -0.19391460716724396 -0.191381573677063 0.96875 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.3826833665370941 0.9238795042037964 2.819324436131865e-07 -0.3878597319126129 0.921689510345459 -0.0 1.0000001192092896 0.875 0 1.0 0 0.0 0 0.0 0 0.0 -0.19509045779705048 0.9807852506637573 3.117347660008818e-07 -0.20096439123153687 0.9795831441879272 -0.0 1.000000238418579 0.9374999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.1913418471813202 0.9807852506637573 -0.03805994614958763 -0.19708853960037231 0.9795831441879272 -0.039185766130685806 0.9687502384185791 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.37533020973205566 0.9238795042037964 -0.07465753704309464 -0.3804132342338562 0.921689510345459 -0.07565538585186005 0.9687501192092896 0.875 0 1.0 0 0.0 0 0.0 0 0.0 -0.9238794445991516 -0.38268327713012695 3.191853465978056e-07 -0.9247413277626038 -0.3805353045463562 -0.0 1.0000001192092896 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.9807848334312439 -0.19509020447731018 9.566792869009078e-08 -0.9809869527816772 -0.19391460716724396 -0.0 1.0 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.9619392156600952 -0.19509020447731018 -0.19134153425693512 -0.9621570706367493 -0.19391460716724396 -0.191381573677063 0.96875 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.9061273336410522 -0.38268327713012695 -0.18023963272571564 -0.9069795608520508 -0.3805353045463562 -0.18039490282535553 0.96875 0.375 0 1.0 0 0.0 0 0.0 0 0.0 -0.5555701851844788 0.8314695954322815 2.819324436131865e-07 -0.5597705245018005 0.8286385536193848 -0.0 1.0000001192092896 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 -0.3826833665370941 0.9238795042037964 2.819324436131865e-07 -0.3878597319126129 0.921689510345459 -0.0 1.0000001192092896 0.875 0 1.0 0 0.0 0 0.0 0 0.0 -0.37533020973205566 0.9238795042037964 -0.07465753704309464 -0.3804132342338562 0.921689510345459 -0.07565538585186005 0.9687501192092896 0.875 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448950529098511 0.8314695954322815 -0.1083860844373703 -0.5489974617958069 0.8286385536193848 -0.10919522494077682 0.96875 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 -0.8314692378044128 -0.5555701851844788 1.4037141227163374e-07 -0.8333384394645691 -0.5527512431144714 -0.0 1.0 0.3124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.9238794445991516 -0.38268327713012695 3.191853465978056e-07 -0.9247413277626038 -0.3805353045463562 -0.0 1.0000001192092896 0.3750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.9061273336410522 -0.38268327713012695 -0.18023963272571564 -0.9069795608520508 -0.3805353045463562 -0.18039490282535553 0.96875 0.375 0 1.0 0 0.0 0 0.0 0 0.0 -0.8154926896095276 -0.5555701851844788 -0.16221146285533905 -0.8173161745071411 -0.5527512431144714 -0.16257210075855255 0.96875 0.3124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.7071067094802856 0.7071067690849304 1.850748958531767e-07 -0.7101352214813232 0.7040314674377441 -0.0 1.0 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.5555701851844788 0.8314695954322815 2.819324436131865e-07 -0.5597705245018005 0.8286385536193848 -0.0 1.0000001192092896 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448950529098511 0.8314695954322815 -0.1083860844373703 -0.5489974617958069 0.8286385536193848 -0.10919522494077682 0.96875 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935198307037354 0.7071067690849304 -0.13794949650764465 -0.6964934468269348 0.7040314674377441 -0.13852351903915405 0.96875 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.1913418471813202 0.9807852506637573 -0.03805994614958763 -0.19708853960037231 0.9795831441879272 -0.039185766130685806 0.9687502384185791 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.9531254768371582 1.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.18024007976055145 0.9807852506637573 -0.07465756684541702 -0.18564409017562866 0.9795831441879272 -0.07690664380788803 0.9375002384185791 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.9531253576278687 0.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.19134163856506348 -0.9807853102684021 -0.03805990144610405 -0.19708853960037231 -0.9795831441879272 -0.039185766130685806 0.9687502384185791 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.18023988604545593 -0.9807853102684021 -0.07465748488903046 -0.18564409017562866 -0.9795831441879272 -0.07690664380788803 0.9375002384185791 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.9619392156600952 -0.19509020447731018 -0.19134153425693512 -0.9621570706367493 -0.19391460716724396 -0.191381573677063 0.96875 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.9807850122451782 7.549790126404332e-08 -0.1950901597738266 -0.9807733297348022 0.0 -0.19507431983947754 0.96875 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.9238792061805725 7.549790126404332e-08 -0.3826832175254822 -0.9238563179969788 0.0 -0.382671594619751 0.9375 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.906126856803894 -0.19509020447731018 -0.37532997131347656 -0.9063386917114258 -0.19391460716724396 -0.3754081726074219 0.9375 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.37533020973205566 0.9238795042037964 -0.07465753704309464 -0.3804132342338562 0.921689510345459 -0.07565538585186005 0.9687501192092896 0.875 0 1.0 0 0.0 0 0.0 0 0.0 -0.1913418471813202 0.9807852506637573 -0.03805994614958763 -0.19708853960037231 0.9795831441879272 -0.039185766130685806 0.9687502384185791 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.18024007976055145 0.9807852506637573 -0.07465756684541702 -0.18564409017562866 0.9795831441879272 -0.07690664380788803 0.9375002384185791 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.35355332493782043 0.9238795042037964 -0.14644630253314972 -0.3583483397960663 0.921689510345459 -0.14841151237487793 0.9375001192092896 0.8750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.9061273336410522 -0.38268327713012695 -0.18023963272571564 -0.9069795608520508 -0.3805353045463562 -0.18039490282535553 0.96875 0.375 0 1.0 0 0.0 0 0.0 0 0.0 -0.9619392156600952 -0.19509020447731018 -0.19134153425693512 -0.9621570706367493 -0.19391460716724396 -0.191381573677063 0.96875 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.906126856803894 -0.19509020447731018 -0.37532997131347656 -0.9063386917114258 -0.19391460716724396 -0.3754081726074219 0.9375 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.853553295135498 -0.38268327713012695 -0.35355305671691895 -0.8543656468391418 -0.3805353045463562 -0.35389262437820435 0.9375 0.375 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448950529098511 0.8314695954322815 -0.1083860844373703 -0.5489974617958069 0.8286385536193848 -0.10919522494077682 0.96875 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 -0.37533020973205566 0.9238795042037964 -0.07465753704309464 -0.3804132342338562 0.921689510345459 -0.07565538585186005 0.9687501192092896 0.875 0 1.0 0 0.0 0 0.0 0 0.0 -0.35355332493782043 0.9238795042037964 -0.14644630253314972 -0.3583483397960663 0.921689510345459 -0.14841151237487793 0.9375001192092896 0.8750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.5132798552513123 0.8314695954322815 -0.2126072347164154 -0.5171361565589905 0.8286385536193848 -0.2142094224691391 0.9375 0.8125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.8154926896095276 -0.5555701851844788 -0.16221146285533905 -0.8173161745071411 -0.5527512431144714 -0.16257210075855255 0.96875 0.3124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.9061273336410522 -0.38268327713012695 -0.18023963272571564 -0.9069795608520508 -0.3805353045463562 -0.18039490282535553 0.96875 0.375 0 1.0 0 0.0 0 0.0 0 0.0 -0.853553295135498 -0.38268327713012695 -0.35355305671691895 -0.8543656468391418 -0.3805353045463562 -0.35389262437820435 0.9375 0.375 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681772708892822 -0.5555701851844788 -0.3181893527507782 -0.7698904275894165 -0.5527512431144714 -0.3188879191875458 0.9375 0.31249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935198307037354 0.7071067690849304 -0.13794949650764465 -0.6964934468269348 0.7040314674377441 -0.13852351903915405 0.96875 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448950529098511 0.8314695954322815 -0.1083860844373703 -0.5489974617958069 0.8286385536193848 -0.10919522494077682 0.96875 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 -0.5132798552513123 0.8314695954322815 -0.2126072347164154 -0.5171361565589905 0.8286385536193848 -0.2142094224691391 0.9375 0.8125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532813310623169 0.7071067690849304 -0.2705978453159332 -0.6560564041137695 0.7040314674377441 -0.2717368006706238 0.9375 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935198307037354 -0.7071067690849304 -0.13794949650764465 -0.6964934468269348 -0.7040314674377441 -0.13852351903915405 0.96875 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.8154926896095276 -0.5555701851844788 -0.16221146285533905 -0.8173161745071411 -0.5527512431144714 -0.16257210075855255 0.96875 0.3124999403953552 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681772708892822 -0.5555701851844788 -0.3181893527507782 -0.7698904275894165 -0.5527512431144714 -0.3188879191875458 0.9375 0.31249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532813310623169 -0.7071067690849304 -0.2705978453159332 -0.6560564041137695 -0.7040314674377441 -0.2717368006706238 0.9375 0.24999994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.8154926896095276 0.5555701851844788 -0.16221146285533905 -0.8173161745071411 0.5527512431144714 -0.16257210075855255 0.96875 0.6875000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935198307037354 0.7071067690849304 -0.13794949650764465 -0.6964934468269348 0.7040314674377441 -0.13852351903915405 0.96875 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532813310623169 0.7071067690849304 -0.2705978453159332 -0.6560564041137695 0.7040314674377441 -0.2717368006706238 0.9375 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681772708892822 0.5555701851844788 -0.3181893527507782 -0.7698904275894165 0.5527512431144714 -0.3188879191875458 0.9375 0.6875001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448949337005615 -0.8314696550369263 -0.1083860844373703 -0.5489974617958069 -0.8286385536193848 -0.10919522494077682 0.96875 0.18749994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935198307037354 -0.7071067690849304 -0.13794949650764465 -0.6964934468269348 -0.7040314674377441 -0.13852351903915405 0.96875 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532813310623169 -0.7071067690849304 -0.2705978453159332 -0.6560564041137695 -0.7040314674377441 -0.2717368006706238 0.9375 0.24999994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.5132797360420227 -0.8314696550369263 -0.21260720491409302 -0.5171361565589905 -0.8286385536193848 -0.2142094224691391 0.9375 0.18749994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.9061273336410522 0.3826834261417389 -0.18023963272571564 -0.9069795608520508 0.3805353045463562 -0.18039490282535553 0.96875 0.6250000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.8154926896095276 0.5555701851844788 -0.16221146285533905 -0.8173161745071411 0.5527512431144714 -0.16257210075855255 0.96875 0.6875000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681772708892822 0.5555701851844788 -0.3181893527507782 -0.7698904275894165 0.5527512431144714 -0.3188879191875458 0.9375 0.6875001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.853553295135498 0.3826834261417389 -0.35355305671691895 -0.8543656468391418 0.3805353045463562 -0.35389262437820435 0.9375 0.6250000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.3753300905227661 -0.9238796234130859 -0.07465754449367523 -0.3804132342338562 -0.921689510345459 -0.07565538585186005 0.9687501192092896 0.12499988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448949337005615 -0.8314696550369263 -0.1083860844373703 -0.5489974617958069 -0.8286385536193848 -0.10919522494077682 0.96875 0.18749994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.5132797360420227 -0.8314696550369263 -0.21260720491409302 -0.5171361565589905 -0.8286385536193848 -0.2142094224691391 0.9375 0.18749994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.3535532057285309 -0.9238796234130859 -0.14644628763198853 -0.3583483397960663 -0.921689510345459 -0.14841151237487793 0.9375001192092896 0.12499988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.9619392156600952 0.19509035348892212 -0.19134153425693512 -0.9621570706367493 0.19391460716724396 -0.191381573677063 0.96875 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.9061273336410522 0.3826834261417389 -0.18023963272571564 -0.9069795608520508 0.3805353045463562 -0.18039490282535553 0.96875 0.6250000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.853553295135498 0.3826834261417389 -0.35355305671691895 -0.8543656468391418 0.3805353045463562 -0.35389262437820435 0.9375 0.6250000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.906126856803894 0.19509035348892212 -0.37532997131347656 -0.9063386917114258 0.19391460716724396 -0.3754081726074219 0.9375 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.19134163856506348 -0.9807853102684021 -0.03805990144610405 -0.19708853960037231 -0.9795831441879272 -0.039185766130685806 0.9687502384185791 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.3753300905227661 -0.9238796234130859 -0.07465754449367523 -0.3804132342338562 -0.921689510345459 -0.07565538585186005 0.9687501192092896 0.12499988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.3535532057285309 -0.9238796234130859 -0.14644628763198853 -0.3583483397960663 -0.921689510345459 -0.14841151237487793 0.9375001192092896 0.12499988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.18023988604545593 -0.9807853102684021 -0.07465748488903046 -0.18564409017562866 -0.9795831441879272 -0.07690664380788803 0.9375002384185791 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.9807850122451782 7.549790126404332e-08 -0.1950901597738266 -0.9807733297348022 0.0 -0.19507431983947754 0.96875 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.9619392156600952 0.19509035348892212 -0.19134153425693512 -0.9621570706367493 0.19391460716724396 -0.191381573677063 0.96875 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.906126856803894 0.19509035348892212 -0.37532997131347656 -0.9063386917114258 0.19391460716724396 -0.3754081726074219 0.9375 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.9238792061805725 7.549790126404332e-08 -0.3826832175254822 -0.9238563179969788 0.0 -0.382671594619751 0.9375 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681772708892822 0.5555701851844788 -0.3181893527507782 -0.7698904275894165 0.5527512431144714 -0.3188879191875458 0.9375 0.6875001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532813310623169 0.7071067690849304 -0.2705978453159332 -0.6560564041137695 0.7040314674377441 -0.2717368006706238 0.9375 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879376530647278 0.7071067690849304 -0.3928472399711609 -0.5904415845870972 0.7040314674377441 -0.39451277256011963 0.90625 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.69134122133255 0.5555701851844788 -0.46193939447402954 -0.6928922533988953 0.5527512431144714 -0.46296578645706177 0.90625 0.6875001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.5132797360420227 -0.8314696550369263 -0.21260720491409302 -0.5171361565589905 -0.8286385536193848 -0.2142094224691391 0.9375 0.18749994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532813310623169 -0.7071067690849304 -0.2705978453159332 -0.6560564041137695 -0.7040314674377441 -0.2717368006706238 0.9375 0.24999994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879376530647278 -0.7071067690849304 -0.3928472399711609 -0.5904415845870972 -0.7040314674377441 -0.39451277256011963 0.90625 0.24999994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.4619395136833191 -0.8314696550369263 -0.3086579144001007 -0.46540728211402893 -0.8286385536193848 -0.3109835982322693 0.90625 0.18749994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.853553295135498 0.3826834261417389 -0.35355305671691895 -0.8543656468391418 0.3805353045463562 -0.35389262437820435 0.9375 0.6250000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681772708892822 0.5555701851844788 -0.3181893527507782 -0.7698904275894165 0.5527512431144714 -0.3188879191875458 0.9375 0.6875001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.69134122133255 0.5555701851844788 -0.46193939447402954 -0.6928922533988953 0.5527512431144714 -0.46296578645706177 0.90625 0.6875001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681776285171509 0.3826834261417389 -0.5132796168327332 -0.7689138650894165 0.3805353045463562 -0.5137485861778259 0.90625 0.6250000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.3535532057285309 -0.9238796234130859 -0.14644628763198853 -0.3583483397960663 -0.921689510345459 -0.14841151237487793 0.9375001192092896 0.12499988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.5132797360420227 -0.8314696550369263 -0.21260720491409302 -0.5171361565589905 -0.8286385536193848 -0.2142094224691391 0.9375 0.18749994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.4619395136833191 -0.8314696550369263 -0.3086579144001007 -0.46540728211402893 -0.8286385536193848 -0.3109835982322693 0.90625 0.18749994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.31818944215774536 -0.9238796234130859 -0.21260716021060944 -0.32248908281326294 -0.921689510345459 -0.2154911905527115 0.9062501192092896 0.12499988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.906126856803894 0.19509035348892212 -0.37532997131347656 -0.9063386917114258 0.19391460716724396 -0.3754081726074219 0.9375 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.853553295135498 0.3826834261417389 -0.35355305671691895 -0.8543656468391418 0.3805353045463562 -0.35389262437820435 0.9375 0.6250000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681776285171509 0.3826834261417389 -0.5132796168327332 -0.7689138650894165 0.3805353045463562 -0.5137485861778259 0.90625 0.6250000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.815492570400238 0.19509035348892212 -0.5448946952819824 -0.8156682252883911 0.19391460716724396 -0.5449995398521423 0.90625 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.18023988604545593 -0.9807853102684021 -0.07465748488903046 -0.18564409017562866 -0.9795831441879272 -0.07690664380788803 0.9375002384185791 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.3535532057285309 -0.9238796234130859 -0.14644628763198853 -0.3583483397960663 -0.921689510345459 -0.14841151237487793 0.9375001192092896 0.12499988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.31818944215774536 -0.9238796234130859 -0.21260716021060944 -0.32248908281326294 -0.921689510345459 -0.2154911905527115 0.9062501192092896 0.12499988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.162211611866951 -0.9807853102684021 -0.10838600248098373 -0.1670888364315033 -0.9795831441879272 -0.1116367056965828 0.9062502384185791 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.9238792061805725 7.549790126404332e-08 -0.3826832175254822 -0.9238563179969788 0.0 -0.382671594619751 0.9375 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.906126856803894 0.19509035348892212 -0.37532997131347656 -0.9063386917114258 0.19391460716724396 -0.3754081726074219 0.9375 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.815492570400238 0.19509035348892212 -0.5448946952819824 -0.8156682252883911 0.19391460716724396 -0.5449995398521423 0.90625 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.8314692378044128 7.549790126404332e-08 -0.5555699467658997 -0.8314462900161743 0.0 -0.5555589199066162 0.90625 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.18024007976055145 0.9807852506637573 -0.07465756684541702 -0.18564409017562866 0.9795831441879272 -0.07690664380788803 0.9375002384185791 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.9218754768371582 1.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.16221177577972412 0.9807852506637573 -0.10838612914085388 -0.1670888364315033 0.9795831441879272 -0.1116367056965828 0.9062501192092896 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.9218753576278687 0.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.18023988604545593 -0.9807853102684021 -0.07465748488903046 -0.18564409017562866 -0.9795831441879272 -0.07690664380788803 0.9375002384185791 0.062499940395355225 0 1.0 0 0.0 0 0.0 0 0.0 -0.162211611866951 -0.9807853102684021 -0.10838600248098373 -0.1670888364315033 -0.9795831441879272 -0.1116367056965828 0.9062502384185791 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.906126856803894 -0.19509020447731018 -0.37532997131347656 -0.9063386917114258 -0.19391460716724396 -0.3754081726074219 0.9375 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.9238792061805725 7.549790126404332e-08 -0.3826832175254822 -0.9238563179969788 0.0 -0.382671594619751 0.9375 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.8314692378044128 7.549790126404332e-08 -0.5555699467658997 -0.8314462900161743 0.0 -0.5555589199066162 0.90625 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.815492570400238 -0.19509020447731018 -0.5448946952819824 -0.8156682252883911 -0.19391460716724396 -0.5449995398521423 0.90625 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.35355332493782043 0.9238795042037964 -0.14644630253314972 -0.3583483397960663 0.921689510345459 -0.14841151237487793 0.9375001192092896 0.8750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.18024007976055145 0.9807852506637573 -0.07465756684541702 -0.18564409017562866 0.9795831441879272 -0.07690664380788803 0.9375002384185791 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.16221177577972412 0.9807852506637573 -0.10838612914085388 -0.1670888364315033 0.9795831441879272 -0.1116367056965828 0.9062501192092896 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.3181895613670349 0.9238795042037964 -0.21260720491409302 -0.32248908281326294 0.921689510345459 -0.2154911905527115 0.9062501192092896 0.8750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.853553295135498 -0.38268327713012695 -0.35355305671691895 -0.8543656468391418 -0.3805353045463562 -0.35389262437820435 0.9375 0.375 0 1.0 0 0.0 0 0.0 0 0.0 -0.906126856803894 -0.19509020447731018 -0.37532997131347656 -0.9063386917114258 -0.19391460716724396 -0.3754081726074219 0.9375 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.815492570400238 -0.19509020447731018 -0.5448946952819824 -0.8156682252883911 -0.19391460716724396 -0.5449995398521423 0.90625 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681776285171509 -0.38268327713012695 -0.5132796168327332 -0.7689138650894165 -0.3805353045463562 -0.5137485861778259 0.90625 0.375 0 1.0 0 0.0 0 0.0 0 0.0 -0.5132798552513123 0.8314695954322815 -0.2126072347164154 -0.5171361565589905 0.8286385536193848 -0.2142094224691391 0.9375 0.8125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.35355332493782043 0.9238795042037964 -0.14644630253314972 -0.3583483397960663 0.921689510345459 -0.14841151237487793 0.9375001192092896 0.8750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.3181895613670349 0.9238795042037964 -0.21260720491409302 -0.32248908281326294 0.921689510345459 -0.2154911905527115 0.9062501192092896 0.8750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.46193963289260864 0.8314695954322815 -0.3086579740047455 -0.46540728211402893 0.8286385536193848 -0.3109835982322693 0.90625 0.8125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681772708892822 -0.5555701851844788 -0.3181893527507782 -0.7698904275894165 -0.5527512431144714 -0.3188879191875458 0.9375 0.31249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.853553295135498 -0.38268327713012695 -0.35355305671691895 -0.8543656468391418 -0.3805353045463562 -0.35389262437820435 0.9375 0.375 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681776285171509 -0.38268327713012695 -0.5132796168327332 -0.7689138650894165 -0.3805353045463562 -0.5137485861778259 0.90625 0.375 0 1.0 0 0.0 0 0.0 0 0.0 -0.69134122133255 -0.5555701851844788 -0.46193939447402954 -0.6928922533988953 -0.5527512431144714 -0.46296578645706177 0.90625 0.31249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532813310623169 0.7071067690849304 -0.2705978453159332 -0.6560564041137695 0.7040314674377441 -0.2717368006706238 0.9375 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.5132798552513123 0.8314695954322815 -0.2126072347164154 -0.5171361565589905 0.8286385536193848 -0.2142094224691391 0.9375 0.8125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.46193963289260864 0.8314695954322815 -0.3086579740047455 -0.46540728211402893 0.8286385536193848 -0.3109835982322693 0.90625 0.8125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879376530647278 0.7071067690849304 -0.3928472399711609 -0.5904415845870972 0.7040314674377441 -0.39451277256011963 0.90625 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532813310623169 -0.7071067690849304 -0.2705978453159332 -0.6560564041137695 -0.7040314674377441 -0.2717368006706238 0.9375 0.24999994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681772708892822 -0.5555701851844788 -0.3181893527507782 -0.7698904275894165 -0.5527512431144714 -0.3188879191875458 0.9375 0.31249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.69134122133255 -0.5555701851844788 -0.46193939447402954 -0.6928922533988953 -0.5527512431144714 -0.46296578645706177 0.90625 0.31249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879376530647278 -0.7071067690849304 -0.3928472399711609 -0.5904415845870972 -0.7040314674377441 -0.39451277256011963 0.90625 0.24999994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.815492570400238 -0.19509020447731018 -0.5448946952819824 -0.8156682252883911 -0.19391460716724396 -0.5449995398521423 0.90625 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.8314692378044128 7.549790126404332e-08 -0.5555699467658997 -0.8314462900161743 0.0 -0.5555589199066162 0.90625 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.707106351852417 7.549790126404332e-08 -0.7071064114570618 -0.7070833444595337 0.0 -0.7070833444595337 0.875 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935193538665771 -0.19509020447731018 -0.6935193538665771 -0.6936551928520203 -0.19391460716724396 -0.6936551928520203 0.875 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.3181895613670349 0.9238795042037964 -0.21260720491409302 -0.32248908281326294 0.921689510345459 -0.2154911905527115 0.9062501192092896 0.8750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.16221177577972412 0.9807852506637573 -0.10838612914085388 -0.1670888364315033 0.9795831441879272 -0.1116367056965828 0.9062501192092896 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.13794976472854614 0.9807852506637573 -0.13794946670532227 -0.1420941799879074 0.9795831441879272 -0.1420941799879074 0.8750001192092896 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.2705979347229004 0.9238795042037964 -0.2705976963043213 -0.27426984906196594 0.921689510345459 -0.27426984906196594 0.875 0.8750001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681776285171509 -0.38268327713012695 -0.5132796168327332 -0.7689138650894165 -0.3805353045463562 -0.5137485861778259 0.90625 0.375 0 1.0 0 0.0 0 0.0 0 0.0 -0.815492570400238 -0.19509020447731018 -0.5448946952819824 -0.8156682252883911 -0.19391460716724396 -0.5449995398521423 0.90625 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935193538665771 -0.19509020447731018 -0.6935193538665771 -0.6936551928520203 -0.19391460716724396 -0.6936551928520203 0.875 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532813906669617 -0.38268327713012695 -0.6532810926437378 -0.6538895964622498 -0.3805353045463562 -0.6538895964622498 0.875 0.375 0 1.0 0 0.0 0 0.0 0 0.0 -0.46193963289260864 0.8314695954322815 -0.3086579740047455 -0.46540728211402893 0.8286385536193848 -0.3109835982322693 0.90625 0.8125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.3181895613670349 0.9238795042037964 -0.21260720491409302 -0.32248908281326294 0.921689510345459 -0.2154911905527115 0.9062501192092896 0.8750000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.2705979347229004 0.9238795042037964 -0.2705976963043213 -0.27426984906196594 0.921689510345459 -0.27426984906196594 0.875 0.8750001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.39284732937812805 0.8314695954322815 -0.3928471505641937 -0.395794540643692 0.8286385536193848 -0.395794540643692 0.875 0.8125001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.69134122133255 -0.5555701851844788 -0.46193939447402954 -0.6928922533988953 -0.5527512431144714 -0.46296578645706177 0.90625 0.31249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681776285171509 -0.38268327713012695 -0.5132796168327332 -0.7689138650894165 -0.3805353045463562 -0.5137485861778259 0.90625 0.375 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532813906669617 -0.38268327713012695 -0.6532810926437378 -0.6538895964622498 -0.3805353045463562 -0.6538895964622498 0.875 0.375 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879372954368591 -0.5555701851844788 -0.5879373550415039 -0.5892513990402222 -0.5527512431144714 -0.5892513990402222 0.875 0.31249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879376530647278 0.7071067690849304 -0.3928472399711609 -0.5904415845870972 0.7040314674377441 -0.39451277256011963 0.90625 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.46193963289260864 0.8314695954322815 -0.3086579740047455 -0.46540728211402893 0.8286385536193848 -0.3109835982322693 0.90625 0.8125000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.39284732937812805 0.8314695954322815 -0.3928471505641937 -0.395794540643692 0.8286385536193848 -0.395794540643692 0.875 0.8125001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.49999985098838806 0.7071067690849304 -0.4999997317790985 -0.5021210312843323 0.7040314674377441 -0.5021210312843323 0.875 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879376530647278 -0.7071067690849304 -0.3928472399711609 -0.5904415845870972 -0.7040314674377441 -0.39451277256011963 0.90625 0.24999994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.69134122133255 -0.5555701851844788 -0.46193939447402954 -0.6928922533988953 -0.5527512431144714 -0.46296578645706177 0.90625 0.31249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879372954368591 -0.5555701851844788 -0.5879373550415039 -0.5892513990402222 -0.5527512431144714 -0.5892513990402222 0.875 0.31249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.49999985098838806 -0.7071067690849304 -0.4999997317790985 -0.5021210312843323 -0.7040314674377441 -0.5021210312843323 0.875 0.24999994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.69134122133255 0.5555701851844788 -0.46193939447402954 -0.6928922533988953 0.5527512431144714 -0.46296578645706177 0.90625 0.6875001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879376530647278 0.7071067690849304 -0.3928472399711609 -0.5904415845870972 0.7040314674377441 -0.39451277256011963 0.90625 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.49999985098838806 0.7071067690849304 -0.4999997317790985 -0.5021210312843323 0.7040314674377441 -0.5021210312843323 0.875 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879372954368591 0.5555701851844788 -0.5879373550415039 -0.5892513990402222 0.5527512431144714 -0.5892513990402222 0.875 0.6875001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.4619395136833191 -0.8314696550369263 -0.3086579144001007 -0.46540728211402893 -0.8286385536193848 -0.3109835982322693 0.90625 0.18749994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879376530647278 -0.7071067690849304 -0.3928472399711609 -0.5904415845870972 -0.7040314674377441 -0.39451277256011963 0.90625 0.24999994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.49999985098838806 -0.7071067690849304 -0.4999997317790985 -0.5021210312843323 -0.7040314674377441 -0.5021210312843323 0.875 0.24999994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.3928472399711609 -0.8314696550369263 -0.39284706115722656 -0.395794540643692 -0.8286385536193848 -0.395794540643692 0.875 0.18749994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681776285171509 0.3826834261417389 -0.5132796168327332 -0.7689138650894165 0.3805353045463562 -0.5137485861778259 0.90625 0.6250000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.69134122133255 0.5555701851844788 -0.46193939447402954 -0.6928922533988953 0.5527512431144714 -0.46296578645706177 0.90625 0.6875001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879372954368591 0.5555701851844788 -0.5879373550415039 -0.5892513990402222 0.5527512431144714 -0.5892513990402222 0.875 0.6875001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532813906669617 0.3826834261417389 -0.6532810926437378 -0.6538895964622498 0.3805353045463562 -0.6538895964622498 0.875 0.6250000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.31818944215774536 -0.9238796234130859 -0.21260716021060944 -0.32248908281326294 -0.921689510345459 -0.2154911905527115 0.9062501192092896 0.12499988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.4619395136833191 -0.8314696550369263 -0.3086579144001007 -0.46540728211402893 -0.8286385536193848 -0.3109835982322693 0.90625 0.18749994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.3928472399711609 -0.8314696550369263 -0.39284706115722656 -0.395794540643692 -0.8286385536193848 -0.395794540643692 0.875 0.18749994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.2705978751182556 -0.9238796234130859 -0.2705976366996765 -0.27426984906196594 -0.921689510345459 -0.27426984906196594 0.875 0.12499982118606567 0 1.0 0 0.0 0 0.0 0 0.0 -0.815492570400238 0.19509035348892212 -0.5448946952819824 -0.8156682252883911 0.19391460716724396 -0.5449995398521423 0.90625 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.7681776285171509 0.3826834261417389 -0.5132796168327332 -0.7689138650894165 0.3805353045463562 -0.5137485861778259 0.90625 0.6250000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532813906669617 0.3826834261417389 -0.6532810926437378 -0.6538895964622498 0.3805353045463562 -0.6538895964622498 0.875 0.6250000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935193538665771 0.19509035348892212 -0.6935193538665771 -0.6936551928520203 0.19391460716724396 -0.6936551928520203 0.875 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.162211611866951 -0.9807853102684021 -0.10838600248098373 -0.1670888364315033 -0.9795831441879272 -0.1116367056965828 0.9062502384185791 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.31818944215774536 -0.9238796234130859 -0.21260716021060944 -0.32248908281326294 -0.921689510345459 -0.2154911905527115 0.9062501192092896 0.12499988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.2705978751182556 -0.9238796234130859 -0.2705976366996765 -0.27426984906196594 -0.921689510345459 -0.27426984906196594 0.875 0.12499982118606567 0 1.0 0 0.0 0 0.0 0 0.0 -0.1379496306180954 -0.9807853102684021 -0.13794931769371033 -0.1420941799879074 -0.9795831441879272 -0.1420941799879074 0.8750001192092896 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.8314692378044128 7.549790126404332e-08 -0.5555699467658997 -0.8314462900161743 0.0 -0.5555589199066162 0.90625 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.815492570400238 0.19509035348892212 -0.5448946952819824 -0.8156682252883911 0.19391460716724396 -0.5449995398521423 0.90625 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935193538665771 0.19509035348892212 -0.6935193538665771 -0.6936551928520203 0.19391460716724396 -0.6936551928520203 0.875 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.707106351852417 7.549790126404332e-08 -0.7071064114570618 -0.7070833444595337 0.0 -0.7070833444595337 0.875 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.16221177577972412 0.9807852506637573 -0.10838612914085388 -0.1670888364315033 0.9795831441879272 -0.1116367056965828 0.9062501192092896 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.8906253576278687 1.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.13794976472854614 0.9807852506637573 -0.13794946670532227 -0.1420941799879074 0.9795831441879272 -0.1420941799879074 0.8750001192092896 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.8906252384185791 0.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.162211611866951 -0.9807853102684021 -0.10838600248098373 -0.1670888364315033 -0.9795831441879272 -0.1116367056965828 0.9062502384185791 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.1379496306180954 -0.9807853102684021 -0.13794931769371033 -0.1420941799879074 -0.9795831441879272 -0.1420941799879074 0.8750001192092896 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.3928472399711609 -0.8314696550369263 -0.39284706115722656 -0.395794540643692 -0.8286385536193848 -0.395794540643692 0.875 0.18749994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.49999985098838806 -0.7071067690849304 -0.4999997317790985 -0.5021210312843323 -0.7040314674377441 -0.5021210312843323 0.875 0.24999994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.39284729957580566 -0.7071067690849304 -0.5879374742507935 -0.39451277256011963 -0.7040314674377441 -0.5904415845870972 0.84375 0.24999994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.30865806341171265 -0.8314696550369263 -0.4619393050670624 -0.3109835982322693 -0.8286385536193848 -0.46540728211402893 0.84375 0.18749982118606567 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532813906669617 0.3826834261417389 -0.6532810926437378 -0.6538895964622498 0.3805353045463562 -0.6538895964622498 0.875 0.6250000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879372954368591 0.5555701851844788 -0.5879373550415039 -0.5892513990402222 0.5527512431144714 -0.5892513990402222 0.875 0.6875001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.4619393050670624 0.5555701851844788 -0.6913411617279053 -0.46296578645706177 0.5527512431144714 -0.6928922533988953 0.84375 0.6875001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.5132798552513123 0.3826834261417389 -0.768177330493927 -0.5137485861778259 0.3805353045463562 -0.7689138650894165 0.84375 0.6250000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.2705978751182556 -0.9238796234130859 -0.2705976366996765 -0.27426984906196594 -0.921689510345459 -0.27426984906196594 0.875 0.12499982118606567 0 1.0 0 0.0 0 0.0 0 0.0 -0.3928472399711609 -0.8314696550369263 -0.39284706115722656 -0.395794540643692 -0.8286385536193848 -0.395794540643692 0.875 0.18749994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.30865806341171265 -0.8314696550369263 -0.4619393050670624 -0.3109835982322693 -0.8286385536193848 -0.46540728211402893 0.84375 0.18749982118606567 0 1.0 0 0.0 0 0.0 0 0.0 -0.21260736882686615 -0.9238796234130859 -0.31818920373916626 -0.2154911905527115 -0.921689510345459 -0.32248908281326294 0.84375 0.12499982118606567 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935193538665771 0.19509035348892212 -0.6935193538665771 -0.6936551928520203 0.19391460716724396 -0.6936551928520203 0.875 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532813906669617 0.3826834261417389 -0.6532810926437378 -0.6538895964622498 0.3805353045463562 -0.6538895964622498 0.875 0.6250000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.5132798552513123 0.3826834261417389 -0.768177330493927 -0.5137485861778259 0.3805353045463562 -0.7689138650894165 0.84375 0.6250000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448945760726929 0.19509035348892212 -0.8154924511909485 -0.5449995398521423 0.19391460716724396 -0.8156682252883911 0.84375 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.1379496306180954 -0.9807853102684021 -0.13794931769371033 -0.1420941799879074 -0.9795831441879272 -0.1420941799879074 0.8750001192092896 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.2705978751182556 -0.9238796234130859 -0.2705976366996765 -0.27426984906196594 -0.921689510345459 -0.27426984906196594 0.875 0.12499982118606567 0 1.0 0 0.0 0 0.0 0 0.0 -0.21260736882686615 -0.9238796234130859 -0.31818920373916626 -0.2154911905527115 -0.921689510345459 -0.32248908281326294 0.84375 0.12499982118606567 0 1.0 0 0.0 0 0.0 0 0.0 -0.1083863228559494 -0.9807853102684021 -0.16221129894256592 -0.1116367056965828 -0.9795831441879272 -0.1670888364315033 0.8437501192092896 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.707106351852417 7.549790126404332e-08 -0.7071064114570618 -0.7070833444595337 0.0 -0.7070833444595337 0.875 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935193538665771 0.19509035348892212 -0.6935193538665771 -0.6936551928520203 0.19391460716724396 -0.6936551928520203 0.875 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448945760726929 0.19509035348892212 -0.8154924511909485 -0.5449995398521423 0.19391460716724396 -0.8156682252883911 0.84375 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.5555698275566101 7.549790126404332e-08 -0.8314691185951233 -0.5555589199066162 0.0 -0.8314462900161743 0.84375 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.13794976472854614 0.9807852506637573 -0.13794946670532227 -0.1420941799879074 0.9795831441879272 -0.1420941799879074 0.8750001192092896 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.8593753576278687 1.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.10838642716407776 0.9807852506637573 -0.16221146285533905 -0.1116367056965828 0.9795831441879272 -0.1670888364315033 0.8437501192092896 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.8593752384185791 0.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.1379496306180954 -0.9807853102684021 -0.13794931769371033 -0.1420941799879074 -0.9795831441879272 -0.1420941799879074 0.8750001192092896 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.1083863228559494 -0.9807853102684021 -0.16221129894256592 -0.1116367056965828 -0.9795831441879272 -0.1670888364315033 0.8437501192092896 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935193538665771 -0.19509020447731018 -0.6935193538665771 -0.6936551928520203 -0.19391460716724396 -0.6936551928520203 0.875 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.707106351852417 7.549790126404332e-08 -0.7071064114570618 -0.7070833444595337 0.0 -0.7070833444595337 0.875 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.5555698275566101 7.549790126404332e-08 -0.8314691185951233 -0.5555589199066162 0.0 -0.8314462900161743 0.84375 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448945760726929 -0.19509020447731018 -0.8154924511909485 -0.5449995398521423 -0.19391460716724396 -0.8156682252883911 0.84375 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.2705979347229004 0.9238795042037964 -0.2705976963043213 -0.27426984906196594 0.921689510345459 -0.27426984906196594 0.875 0.8750001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.13794976472854614 0.9807852506637573 -0.13794946670532227 -0.1420941799879074 0.9795831441879272 -0.1420941799879074 0.8750001192092896 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.10838642716407776 0.9807852506637573 -0.16221146285533905 -0.1116367056965828 0.9795831441879272 -0.1670888364315033 0.8437501192092896 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.21260741353034973 0.9238795042037964 -0.31818926334381104 -0.2154911905527115 0.921689510345459 -0.32248908281326294 0.84375 0.8750001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532813906669617 -0.38268327713012695 -0.6532810926437378 -0.6538895964622498 -0.3805353045463562 -0.6538895964622498 0.875 0.375 0 1.0 0 0.0 0 0.0 0 0.0 -0.6935193538665771 -0.19509020447731018 -0.6935193538665771 -0.6936551928520203 -0.19391460716724396 -0.6936551928520203 0.875 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448945760726929 -0.19509020447731018 -0.8154924511909485 -0.5449995398521423 -0.19391460716724396 -0.8156682252883911 0.84375 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.5132798552513123 -0.38268327713012695 -0.768177330493927 -0.5137485861778259 -0.3805353045463562 -0.7689138650894165 0.84375 0.375 0 1.0 0 0.0 0 0.0 0 0.0 -0.39284732937812805 0.8314695954322815 -0.3928471505641937 -0.395794540643692 0.8286385536193848 -0.395794540643692 0.875 0.8125001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.2705979347229004 0.9238795042037964 -0.2705976963043213 -0.27426984906196594 0.921689510345459 -0.27426984906196594 0.875 0.8750001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.21260741353034973 0.9238795042037964 -0.31818926334381104 -0.2154911905527115 0.921689510345459 -0.32248908281326294 0.84375 0.8750001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.3086581230163574 0.8314695954322815 -0.46193939447402954 -0.3109835982322693 0.8286385536193848 -0.46540728211402893 0.84375 0.8125001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879372954368591 -0.5555701851844788 -0.5879373550415039 -0.5892513990402222 -0.5527512431144714 -0.5892513990402222 0.875 0.31249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.6532813906669617 -0.38268327713012695 -0.6532810926437378 -0.6538895964622498 -0.3805353045463562 -0.6538895964622498 0.875 0.375 0 1.0 0 0.0 0 0.0 0 0.0 -0.5132798552513123 -0.38268327713012695 -0.768177330493927 -0.5137485861778259 -0.3805353045463562 -0.7689138650894165 0.84375 0.375 0 1.0 0 0.0 0 0.0 0 0.0 -0.4619393050670624 -0.5555701851844788 -0.6913411617279053 -0.46296578645706177 -0.5527512431144714 -0.6928922533988953 0.84375 0.31249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.49999985098838806 0.7071067690849304 -0.4999997317790985 -0.5021210312843323 0.7040314674377441 -0.5021210312843323 0.875 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.39284732937812805 0.8314695954322815 -0.3928471505641937 -0.395794540643692 0.8286385536193848 -0.395794540643692 0.875 0.8125001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.3086581230163574 0.8314695954322815 -0.46193939447402954 -0.3109835982322693 0.8286385536193848 -0.46540728211402893 0.84375 0.8125001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.39284729957580566 0.7071067690849304 -0.5879374742507935 -0.39451277256011963 0.7040314674377441 -0.5904415845870972 0.84375 0.7500001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.49999985098838806 -0.7071067690849304 -0.4999997317790985 -0.5021210312843323 -0.7040314674377441 -0.5021210312843323 0.875 0.24999994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879372954368591 -0.5555701851844788 -0.5879373550415039 -0.5892513990402222 -0.5527512431144714 -0.5892513990402222 0.875 0.31249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.4619393050670624 -0.5555701851844788 -0.6913411617279053 -0.46296578645706177 -0.5527512431144714 -0.6928922533988953 0.84375 0.31249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.39284729957580566 -0.7071067690849304 -0.5879374742507935 -0.39451277256011963 -0.7040314674377441 -0.5904415845870972 0.84375 0.24999994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.5879372954368591 0.5555701851844788 -0.5879373550415039 -0.5892513990402222 0.5527512431144714 -0.5892513990402222 0.875 0.6875001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.49999985098838806 0.7071067690849304 -0.4999997317790985 -0.5021210312843323 0.7040314674377441 -0.5021210312843323 0.875 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.39284729957580566 0.7071067690849304 -0.5879374742507935 -0.39451277256011963 0.7040314674377441 -0.5904415845870972 0.84375 0.7500001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.4619393050670624 0.5555701851844788 -0.6913411617279053 -0.46296578645706177 0.5527512431144714 -0.6928922533988953 0.84375 0.6875001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.5132798552513123 -0.38268327713012695 -0.768177330493927 -0.5137485861778259 -0.3805353045463562 -0.7689138650894165 0.84375 0.375 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448945760726929 -0.19509020447731018 -0.8154924511909485 -0.5449995398521423 -0.19391460716724396 -0.8156682252883911 0.84375 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.37532979249954224 -0.19509020447731018 -0.9061266183853149 -0.3754081726074219 -0.19391460716724396 -0.9063386917114258 0.8125 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.35355329513549805 -0.38268327713012695 -0.8535529375076294 -0.35386210680007935 -0.3805353045463562 -0.8543656468391418 0.8125 0.375 0 1.0 0 0.0 0 0.0 0 0.0 -0.3086581230163574 0.8314695954322815 -0.46193939447402954 -0.3109835982322693 0.8286385536193848 -0.46540728211402893 0.84375 0.8125001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.21260741353034973 0.9238795042037964 -0.31818926334381104 -0.2154911905527115 0.921689510345459 -0.32248908281326294 0.84375 0.8750001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.14644651114940643 0.9238795042037964 -0.35355299711227417 -0.14841151237487793 0.921689510345459 -0.3583483397960663 0.8125 0.8750001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.21260738372802734 0.8314695954322815 -0.5132795572280884 -0.2142094224691391 0.8286385536193848 -0.5171361565589905 0.8125 0.8125001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.4619393050670624 -0.5555701851844788 -0.6913411617279053 -0.46296578645706177 -0.5527512431144714 -0.6928922533988953 0.84375 0.31249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.5132798552513123 -0.38268327713012695 -0.768177330493927 -0.5137485861778259 -0.3805353045463562 -0.7689138650894165 0.84375 0.375 0 1.0 0 0.0 0 0.0 0 0.0 -0.35355329513549805 -0.38268327713012695 -0.8535529375076294 -0.35386210680007935 -0.3805353045463562 -0.8543656468391418 0.8125 0.375 0 1.0 0 0.0 0 0.0 0 0.0 -0.31818920373916626 -0.5555701851844788 -0.7681770920753479 -0.3188879191875458 -0.5527512431144714 -0.7698904275894165 0.8125 0.31249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.39284729957580566 0.7071067690849304 -0.5879374742507935 -0.39451277256011963 0.7040314674377441 -0.5904415845870972 0.84375 0.7500001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.3086581230163574 0.8314695954322815 -0.46193939447402954 -0.3109835982322693 0.8286385536193848 -0.46540728211402893 0.84375 0.8125001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.21260738372802734 0.8314695954322815 -0.5132795572280884 -0.2142094224691391 0.8286385536193848 -0.5171361565589905 0.8125 0.8125001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.2705978751182556 0.7071067690849304 -0.6532811522483826 -0.2717368006706238 0.7040314674377441 -0.6560564041137695 0.8125 0.7500001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.39284729957580566 -0.7071067690849304 -0.5879374742507935 -0.39451277256011963 -0.7040314674377441 -0.5904415845870972 0.84375 0.24999994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.4619393050670624 -0.5555701851844788 -0.6913411617279053 -0.46296578645706177 -0.5527512431144714 -0.6928922533988953 0.84375 0.31249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.31818920373916626 -0.5555701851844788 -0.7681770920753479 -0.3188879191875458 -0.5527512431144714 -0.7698904275894165 0.8125 0.31249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.2705978751182556 -0.7071067690849304 -0.6532811522483826 -0.2717368006706238 -0.7040314674377441 -0.6560564041137695 0.8125 0.24999994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.4619393050670624 0.5555701851844788 -0.6913411617279053 -0.46296578645706177 0.5527512431144714 -0.6928922533988953 0.84375 0.6875001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.39284729957580566 0.7071067690849304 -0.5879374742507935 -0.39451277256011963 0.7040314674377441 -0.5904415845870972 0.84375 0.7500001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.2705978751182556 0.7071067690849304 -0.6532811522483826 -0.2717368006706238 0.7040314674377441 -0.6560564041137695 0.8125 0.7500001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.31818920373916626 0.5555701851844788 -0.7681770920753479 -0.3188879191875458 0.5527512431144714 -0.7698904275894165 0.8125 0.6875001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.30865806341171265 -0.8314696550369263 -0.4619393050670624 -0.3109835982322693 -0.8286385536193848 -0.46540728211402893 0.84375 0.18749982118606567 0 1.0 0 0.0 0 0.0 0 0.0 -0.39284729957580566 -0.7071067690849304 -0.5879374742507935 -0.39451277256011963 -0.7040314674377441 -0.5904415845870972 0.84375 0.24999994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.2705978751182556 -0.7071067690849304 -0.6532811522483826 -0.2717368006706238 -0.7040314674377441 -0.6560564041137695 0.8125 0.24999994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.21260732412338257 -0.8314696550369263 -0.5132794380187988 -0.2142094224691391 -0.8286385536193848 -0.5171361565589905 0.8125 0.18749982118606567 0 1.0 0 0.0 0 0.0 0 0.0 -0.5132798552513123 0.3826834261417389 -0.768177330493927 -0.5137485861778259 0.3805353045463562 -0.7689138650894165 0.84375 0.6250000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.4619393050670624 0.5555701851844788 -0.6913411617279053 -0.46296578645706177 0.5527512431144714 -0.6928922533988953 0.84375 0.6875001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.31818920373916626 0.5555701851844788 -0.7681770920753479 -0.3188879191875458 0.5527512431144714 -0.7698904275894165 0.8125 0.6875001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.35355329513549805 0.3826834261417389 -0.8535529375076294 -0.35386210680007935 0.3805353045463562 -0.8543656468391418 0.8125 0.6250000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.21260736882686615 -0.9238796234130859 -0.31818920373916626 -0.2154911905527115 -0.921689510345459 -0.32248908281326294 0.84375 0.12499982118606567 0 1.0 0 0.0 0 0.0 0 0.0 -0.30865806341171265 -0.8314696550369263 -0.4619393050670624 -0.3109835982322693 -0.8286385536193848 -0.46540728211402893 0.84375 0.18749982118606567 0 1.0 0 0.0 0 0.0 0 0.0 -0.21260732412338257 -0.8314696550369263 -0.5132794380187988 -0.2142094224691391 -0.8286385536193848 -0.5171361565589905 0.8125 0.18749982118606567 0 1.0 0 0.0 0 0.0 0 0.0 -0.14644648134708405 -0.9238796234130859 -0.3535529375076294 -0.14841151237487793 -0.921689510345459 -0.3583483397960663 0.8125 0.12499982118606567 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448945760726929 0.19509035348892212 -0.8154924511909485 -0.5449995398521423 0.19391460716724396 -0.8156682252883911 0.84375 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.5132798552513123 0.3826834261417389 -0.768177330493927 -0.5137485861778259 0.3805353045463562 -0.7689138650894165 0.84375 0.6250000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.35355329513549805 0.3826834261417389 -0.8535529375076294 -0.35386210680007935 0.3805353045463562 -0.8543656468391418 0.8125 0.6250000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.37532979249954224 0.19509035348892212 -0.9061266183853149 -0.3754081726074219 0.19391460716724396 -0.9063386917114258 0.8125 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.1083863228559494 -0.9807853102684021 -0.16221129894256592 -0.1116367056965828 -0.9795831441879272 -0.1670888364315033 0.8437501192092896 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.21260736882686615 -0.9238796234130859 -0.31818920373916626 -0.2154911905527115 -0.921689510345459 -0.32248908281326294 0.84375 0.12499982118606567 0 1.0 0 0.0 0 0.0 0 0.0 -0.14644648134708405 -0.9238796234130859 -0.3535529375076294 -0.14841151237487793 -0.921689510345459 -0.3583483397960663 0.8125 0.12499982118606567 0 1.0 0 0.0 0 0.0 0 0.0 -0.07465779036283493 -0.9807853102684021 -0.18023957312107086 -0.07690664380788803 -0.9795831441879272 -0.18564409017562866 0.8125001192092896 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.5555698275566101 7.549790126404332e-08 -0.8314691185951233 -0.5555589199066162 0.0 -0.8314462900161743 0.84375 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448945760726929 0.19509035348892212 -0.8154924511909485 -0.5449995398521423 0.19391460716724396 -0.8156682252883911 0.84375 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.37532979249954224 0.19509035348892212 -0.9061266183853149 -0.3754081726074219 0.19391460716724396 -0.9063386917114258 0.8125 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.38268303871154785 7.549790126404332e-08 -0.9238789081573486 -0.382671594619751 0.0 -0.9238563179969788 0.8125 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.10838642716407776 0.9807852506637573 -0.16221146285533905 -0.1116367056965828 0.9795831441879272 -0.1670888364315033 0.8437501192092896 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.8281252384185791 1.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.0746578574180603 0.9807852506637573 -0.18023976683616638 -0.07690664380788803 0.9795831441879272 -0.18564409017562866 0.8125 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.8281251192092896 0.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.1083863228559494 -0.9807853102684021 -0.16221129894256592 -0.1116367056965828 -0.9795831441879272 -0.1670888364315033 0.8437501192092896 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.07465779036283493 -0.9807853102684021 -0.18023957312107086 -0.07690664380788803 -0.9795831441879272 -0.18564409017562866 0.8125001192092896 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.5448945760726929 -0.19509020447731018 -0.8154924511909485 -0.5449995398521423 -0.19391460716724396 -0.8156682252883911 0.84375 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.5555698275566101 7.549790126404332e-08 -0.8314691185951233 -0.5555589199066162 0.0 -0.8314462900161743 0.84375 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.38268303871154785 7.549790126404332e-08 -0.9238789081573486 -0.382671594619751 0.0 -0.9238563179969788 0.8125 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.37532979249954224 -0.19509020447731018 -0.9061266183853149 -0.3754081726074219 -0.19391460716724396 -0.9063386917114258 0.8125 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.21260741353034973 0.9238795042037964 -0.31818926334381104 -0.2154911905527115 0.921689510345459 -0.32248908281326294 0.84375 0.8750001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.10838642716407776 0.9807852506637573 -0.16221146285533905 -0.1116367056965828 0.9795831441879272 -0.1670888364315033 0.8437501192092896 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.0746578574180603 0.9807852506637573 -0.18023976683616638 -0.07690664380788803 0.9795831441879272 -0.18564409017562866 0.8125 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.14644651114940643 0.9238795042037964 -0.35355299711227417 -0.14841151237487793 0.921689510345459 -0.3583483397960663 0.8125 0.8750001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.14644648134708405 -0.9238796234130859 -0.3535529375076294 -0.14841151237487793 -0.921689510345459 -0.3583483397960663 0.8125 0.12499982118606567 0 1.0 0 0.0 0 0.0 0 0.0 -0.21260732412338257 -0.8314696550369263 -0.5132794380187988 -0.2142094224691391 -0.8286385536193848 -0.5171361565589905 0.8125 0.18749982118606567 0 1.0 0 0.0 0 0.0 0 0.0 -0.10838620364665985 -0.8314696550369263 -0.5448945164680481 -0.10919522494077682 -0.8286385536193848 -0.5489974617958069 0.78125 0.18749982118606567 0 1.0 0 0.0 0 0.0 0 0.0 -0.07465772330760956 -0.9238796234130859 -0.37532979249954224 -0.07565538585186005 -0.921689510345459 -0.3804132342338562 0.78125 0.12499982118606567 0 1.0 0 0.0 0 0.0 0 0.0 -0.37532979249954224 0.19509035348892212 -0.9061266183853149 -0.3754081726074219 0.19391460716724396 -0.9063386917114258 0.8125 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.35355329513549805 0.3826834261417389 -0.8535529375076294 -0.35386210680007935 0.3805353045463562 -0.8543656468391418 0.8125 0.6250000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.18023987114429474 0.3826834261417389 -0.9061269760131836 -0.18039490282535553 0.3805353045463562 -0.9069795608520508 0.78125 0.6250001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.1913413405418396 0.19509035348892212 -0.9619388580322266 -0.191381573677063 0.19391460716724396 -0.9621570706367493 0.7812498807907104 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.07465779036283493 -0.9807853102684021 -0.18023957312107086 -0.07690664380788803 -0.9795831441879272 -0.18564409017562866 0.8125001192092896 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.14644648134708405 -0.9238796234130859 -0.3535529375076294 -0.14841151237487793 -0.921689510345459 -0.3583483397960663 0.8125 0.12499982118606567 0 1.0 0 0.0 0 0.0 0 0.0 -0.07465772330760956 -0.9238796234130859 -0.37532979249954224 -0.07565538585186005 -0.921689510345459 -0.3804132342338562 0.78125 0.12499982118606567 0 1.0 0 0.0 0 0.0 0 0.0 -0.038060203194618225 -0.9807853102684021 -0.1913413256406784 -0.039185766130685806 -0.9795831441879272 -0.19708853960037231 0.78125 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.38268303871154785 7.549790126404332e-08 -0.9238789081573486 -0.382671594619751 0.0 -0.9238563179969788 0.8125 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.37532979249954224 0.19509035348892212 -0.9061266183853149 -0.3754081726074219 0.19391460716724396 -0.9063386917114258 0.8125 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.1913413405418396 0.19509035348892212 -0.9619388580322266 -0.191381573677063 0.19391460716724396 -0.9621570706367493 0.7812498807907104 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.19508998095989227 7.549790126404332e-08 -0.98078453540802 -0.19507431983947754 0.0 -0.9807733297348022 0.7812498807907104 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.0746578574180603 0.9807852506637573 -0.18023976683616638 -0.07690664380788803 0.9795831441879272 -0.18564409017562866 0.8125 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.7968752384185791 1.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.038060225546360016 0.9807852506637573 -0.19134151935577393 -0.039185766130685806 0.9795831441879272 -0.19708853960037231 0.78125 0.9375001192092896 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.7968751192092896 0.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.07465779036283493 -0.9807853102684021 -0.18023957312107086 -0.07690664380788803 -0.9795831441879272 -0.18564409017562866 0.8125001192092896 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.038060203194618225 -0.9807853102684021 -0.1913413256406784 -0.039185766130685806 -0.9795831441879272 -0.19708853960037231 0.78125 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.37532979249954224 -0.19509020447731018 -0.9061266183853149 -0.3754081726074219 -0.19391460716724396 -0.9063386917114258 0.8125 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.38268303871154785 7.549790126404332e-08 -0.9238789081573486 -0.382671594619751 0.0 -0.9238563179969788 0.8125 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.19508998095989227 7.549790126404332e-08 -0.98078453540802 -0.19507431983947754 0.0 -0.9807733297348022 0.7812498807907104 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.1913413405418396 -0.19509020447731018 -0.9619388580322266 -0.191381573677063 -0.19391460716724396 -0.9621570706367493 0.7812498807907104 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.14644651114940643 0.9238795042037964 -0.35355299711227417 -0.14841151237487793 0.921689510345459 -0.3583483397960663 0.8125 0.8750001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.0746578574180603 0.9807852506637573 -0.18023976683616638 -0.07690664380788803 0.9795831441879272 -0.18564409017562866 0.8125 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.038060225546360016 0.9807852506637573 -0.19134151935577393 -0.039185766130685806 0.9795831441879272 -0.19708853960037231 0.78125 0.9375001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.07465773820877075 0.9238795042037964 -0.375329852104187 -0.07565538585186005 0.921689510345459 -0.3804132342338562 0.78125 0.8750001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.35355329513549805 -0.38268327713012695 -0.8535529375076294 -0.35386210680007935 -0.3805353045463562 -0.8543656468391418 0.8125 0.375 0 1.0 0 0.0 0 0.0 0 0.0 -0.37532979249954224 -0.19509020447731018 -0.9061266183853149 -0.3754081726074219 -0.19391460716724396 -0.9063386917114258 0.8125 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.1913413405418396 -0.19509020447731018 -0.9619388580322266 -0.191381573677063 -0.19391460716724396 -0.9621570706367493 0.7812498807907104 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.18023987114429474 -0.38268327713012695 -0.9061269760131836 -0.18039490282535553 -0.3805353045463562 -0.9069795608520508 0.78125 0.375 0 1.0 0 0.0 0 0.0 0 0.0 -0.21260738372802734 0.8314695954322815 -0.5132795572280884 -0.2142094224691391 0.8286385536193848 -0.5171361565589905 0.8125 0.8125001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.14644651114940643 0.9238795042037964 -0.35355299711227417 -0.14841151237487793 0.921689510345459 -0.3583483397960663 0.8125 0.8750001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.07465773820877075 0.9238795042037964 -0.375329852104187 -0.07565538585186005 0.921689510345459 -0.3804132342338562 0.78125 0.8750001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.10838624089956284 0.8314695954322815 -0.5448946356773376 -0.10919522494077682 0.8286385536193848 -0.5489974617958069 0.78125 0.8125001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.31818920373916626 -0.5555701851844788 -0.7681770920753479 -0.3188879191875458 -0.5527512431144714 -0.7698904275894165 0.8125 0.31249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.35355329513549805 -0.38268327713012695 -0.8535529375076294 -0.35386210680007935 -0.3805353045463562 -0.8543656468391418 0.8125 0.375 0 1.0 0 0.0 0 0.0 0 0.0 -0.18023987114429474 -0.38268327713012695 -0.9061269760131836 -0.18039490282535553 -0.3805353045463562 -0.9069795608520508 0.78125 0.375 0 1.0 0 0.0 0 0.0 0 0.0 -0.1622113138437271 -0.5555701851844788 -0.8154923915863037 -0.16257210075855255 -0.5527512431144714 -0.8173161745071411 0.7812498807907104 0.31249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.2705978751182556 0.7071067690849304 -0.6532811522483826 -0.2717368006706238 0.7040314674377441 -0.6560564041137695 0.8125 0.7500001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.21260738372802734 0.8314695954322815 -0.5132795572280884 -0.2142094224691391 0.8286385536193848 -0.5171361565589905 0.8125 0.8125001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.10838624089956284 0.8314695954322815 -0.5448946356773376 -0.10919522494077682 0.8286385536193848 -0.5489974617958069 0.78125 0.8125001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.13794952630996704 0.7071067690849304 -0.6935195326805115 -0.13852351903915405 0.7040314674377441 -0.6964934468269348 0.78125 0.7500001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.2705978751182556 -0.7071067690849304 -0.6532811522483826 -0.2717368006706238 -0.7040314674377441 -0.6560564041137695 0.8125 0.24999994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.31818920373916626 -0.5555701851844788 -0.7681770920753479 -0.3188879191875458 -0.5527512431144714 -0.7698904275894165 0.8125 0.31249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.1622113138437271 -0.5555701851844788 -0.8154923915863037 -0.16257210075855255 -0.5527512431144714 -0.8173161745071411 0.7812498807907104 0.31249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.13794952630996704 -0.7071067690849304 -0.6935195326805115 -0.13852351903915405 -0.7040314674377441 -0.6964934468269348 0.78125 0.24999994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.31818920373916626 0.5555701851844788 -0.7681770920753479 -0.3188879191875458 0.5527512431144714 -0.7698904275894165 0.8125 0.6875001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.2705978751182556 0.7071067690849304 -0.6532811522483826 -0.2717368006706238 0.7040314674377441 -0.6560564041137695 0.8125 0.7500001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.13794952630996704 0.7071067690849304 -0.6935195326805115 -0.13852351903915405 0.7040314674377441 -0.6964934468269348 0.78125 0.7500001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.1622113138437271 0.5555701851844788 -0.8154923915863037 -0.16257210075855255 0.5527512431144714 -0.8173161745071411 0.7812498807907104 0.6875001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.21260732412338257 -0.8314696550369263 -0.5132794380187988 -0.2142094224691391 -0.8286385536193848 -0.5171361565589905 0.8125 0.18749982118606567 0 1.0 0 0.0 0 0.0 0 0.0 -0.2705978751182556 -0.7071067690849304 -0.6532811522483826 -0.2717368006706238 -0.7040314674377441 -0.6560564041137695 0.8125 0.24999994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.13794952630996704 -0.7071067690849304 -0.6935195326805115 -0.13852351903915405 -0.7040314674377441 -0.6964934468269348 0.78125 0.24999994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.10838620364665985 -0.8314696550369263 -0.5448945164680481 -0.10919522494077682 -0.8286385536193848 -0.5489974617958069 0.78125 0.18749982118606567 0 1.0 0 0.0 0 0.0 0 0.0 -0.35355329513549805 0.3826834261417389 -0.8535529375076294 -0.35386210680007935 0.3805353045463562 -0.8543656468391418 0.8125 0.6250000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.31818920373916626 0.5555701851844788 -0.7681770920753479 -0.3188879191875458 0.5527512431144714 -0.7698904275894165 0.8125 0.6875001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.1622113138437271 0.5555701851844788 -0.8154923915863037 -0.16257210075855255 0.5527512431144714 -0.8173161745071411 0.7812498807907104 0.6875001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.18023987114429474 0.3826834261417389 -0.9061269760131836 -0.18039490282535553 0.3805353045463562 -0.9069795608520508 0.78125 0.6250001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.10838624089956284 0.8314695954322815 -0.5448946356773376 -0.10919522494077682 0.8286385536193848 -0.5489974617958069 0.78125 0.8125001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.07465773820877075 0.9238795042037964 -0.375329852104187 -0.07565538585186005 0.921689510345459 -0.3804132342338562 0.78125 0.8750001192092896 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.9238795042037964 -0.3826834559440613 0.0 0.921689510345459 -0.3878597319126129 0.75 0.875 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.8314695954322815 -0.5555702447891235 0.0 0.8286385536193848 -0.5597705245018005 0.75 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 -0.1622113138437271 -0.5555701851844788 -0.8154923915863037 -0.16257210075855255 -0.5527512431144714 -0.8173161745071411 0.7812498807907104 0.31249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.18023987114429474 -0.38268327713012695 -0.9061269760131836 -0.18039490282535553 -0.3805353045463562 -0.9069795608520508 0.78125 0.375 0 1.0 0 0.0 0 0.0 0 0.0 6.356849979738399e-08 -0.38268327713012695 -0.9238790273666382 0.0 -0.3805353045463562 -0.9247413277626038 0.75 0.375 0 1.0 0 0.0 0 0.0 0 0.0 2.7218476361667854e-07 -0.5555701851844788 -0.8314687609672546 0.0 -0.5527512431144714 -0.8333384394645691 0.7499998807907104 0.31249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.13794952630996704 0.7071067690849304 -0.6935195326805115 -0.13852351903915405 0.7040314674377441 -0.6964934468269348 0.78125 0.7500001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.10838624089956284 0.8314695954322815 -0.5448946356773376 -0.10919522494077682 0.8286385536193848 -0.5489974617958069 0.78125 0.8125001192092896 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.8314695954322815 -0.5555702447891235 0.0 0.8286385536193848 -0.5597705245018005 0.75 0.8125 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.7071067690849304 -0.7071067690849304 0.0 0.7040314674377441 -0.7101352214813232 0.75 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.13794952630996704 -0.7071067690849304 -0.6935195326805115 -0.13852351903915405 -0.7040314674377441 -0.6964934468269348 0.78125 0.24999994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.1622113138437271 -0.5555701851844788 -0.8154923915863037 -0.16257210075855255 -0.5527512431144714 -0.8173161745071411 0.7812498807907104 0.31249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 2.7218476361667854e-07 -0.5555701851844788 -0.8314687609672546 0.0 -0.5527512431144714 -0.8333384394645691 0.7499998807907104 0.31249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 1.529754740658973e-07 -0.7071067690849304 -0.707106351852417 0.0 -0.7040314674377441 -0.7101352214813232 0.7499998807907104 0.24999994039535522 0 1.0 0 0.0 0 0.0 0 0.0 -0.1622113138437271 0.5555701851844788 -0.8154923915863037 -0.16257210075855255 0.5527512431144714 -0.8173161745071411 0.7812498807907104 0.6875001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.13794952630996704 0.7071067690849304 -0.6935195326805115 -0.13852351903915405 0.7040314674377441 -0.6964934468269348 0.78125 0.7500001192092896 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.7071067690849304 -0.7071067690849304 0.0 0.7040314674377441 -0.7101352214813232 0.75 0.7500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.5555701851844788 -0.8314696550369263 0.0 0.5527512431144714 -0.8333384394645691 0.75 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 -0.10838620364665985 -0.8314696550369263 -0.5448945164680481 -0.10919522494077682 -0.8286385536193848 -0.5489974617958069 0.78125 0.18749982118606567 0 1.0 0 0.0 0 0.0 0 0.0 -0.13794952630996704 -0.7071067690849304 -0.6935195326805115 -0.13852351903915405 -0.7040314674377441 -0.6964934468269348 0.78125 0.24999994039535522 0 1.0 0 0.0 0 0.0 0 0.0 1.529754740658973e-07 -0.7071067690849304 -0.707106351852417 0.0 -0.7040314674377441 -0.7101352214813232 0.7499998807907104 0.24999994039535522 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -0.8314696550369263 -0.5555701851844788 0.0 -0.8286385536193848 -0.5597705245018005 0.75 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 -0.18023987114429474 0.3826834261417389 -0.9061269760131836 -0.18039490282535553 0.3805353045463562 -0.9069795608520508 0.78125 0.6250001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.1622113138437271 0.5555701851844788 -0.8154923915863037 -0.16257210075855255 0.5527512431144714 -0.8173161745071411 0.7812498807907104 0.6875001192092896 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.5555701851844788 -0.8314696550369263 0.0 0.5527512431144714 -0.8333384394645691 0.75 0.6875 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.3826834261417389 -0.9238795042037964 0.0 0.3805353045463562 -0.9247413277626038 0.75 0.625 0 1.0 0 0.0 0 0.0 0 0.0 -0.07465772330760956 -0.9238796234130859 -0.37532979249954224 -0.07565538585186005 -0.921689510345459 -0.3804132342338562 0.78125 0.12499982118606567 0 1.0 0 0.0 0 0.0 0 0.0 -0.10838620364665985 -0.8314696550369263 -0.5448945164680481 -0.10919522494077682 -0.8286385536193848 -0.5489974617958069 0.78125 0.18749982118606567 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -0.8314696550369263 -0.5555701851844788 0.0 -0.8286385536193848 -0.5597705245018005 0.75 0.1875 0 1.0 0 0.0 0 0.0 0 0.0 7.846966099123165e-08 -0.9238796234130859 -0.3826829195022583 0.0 -0.921689510345459 -0.3878597319126129 0.7499998807907104 0.12499982118606567 0 1.0 0 0.0 0 0.0 0 0.0 -0.1913413405418396 0.19509035348892212 -0.9619388580322266 -0.191381573677063 0.19391460716724396 -0.9621570706367493 0.7812498807907104 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.18023987114429474 0.3826834261417389 -0.9061269760131836 -0.18039490282535553 0.3805353045463562 -0.9069795608520508 0.78125 0.6250001192092896 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.3826834261417389 -0.9238795042037964 0.0 0.3805353045463562 -0.9247413277626038 0.75 0.625 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.19509035348892212 -0.9807852506637573 0.0 0.19391460716724396 -0.9809869527816772 0.75 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 -0.038060203194618225 -0.9807853102684021 -0.1913413256406784 -0.039185766130685806 -0.9795831441879272 -0.19708853960037231 0.78125 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.07465772330760956 -0.9238796234130859 -0.37532979249954224 -0.07565538585186005 -0.921689510345459 -0.3804132342338562 0.78125 0.12499982118606567 0 1.0 0 0.0 0 0.0 0 0.0 7.846966099123165e-08 -0.9238796234130859 -0.3826829195022583 0.0 -0.921689510345459 -0.3878597319126129 0.7499998807907104 0.12499982118606567 0 1.0 0 0.0 0 0.0 0 0.0 1.513972591737911e-08 -0.9807853102684021 -0.1950899213552475 0.0 -0.9795831441879272 -0.20096439123153687 0.75 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.19508998095989227 7.549790126404332e-08 -0.98078453540802 -0.19507431983947754 0.0 -0.9807733297348022 0.7812498807907104 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.1913413405418396 0.19509035348892212 -0.9619388580322266 -0.191381573677063 0.19391460716724396 -0.9621570706367493 0.7812498807907104 0.5625000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.19509035348892212 -0.9807852506637573 0.0 0.19391460716724396 -0.9809869527816772 0.75 0.5625 0 1.0 0 0.0 0 0.0 0 0.0 0.0 7.549790126404332e-08 -1.0 0.0 0.0 -1.0 0.75 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.038060225546360016 0.9807852506637573 -0.19134151935577393 -0.039185766130685806 0.9795831441879272 -0.19708853960037231 0.78125 0.9375001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -2.304045381151809e-07 1.0 5.562458795793646e-07 0.0 1.0 -0.0 0.7656251192092896 1.0 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.9807852506637573 -0.19509032368659973 0.0 0.9795831441879272 -0.20096439123153687 0.75 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -1.0 3.2584136988589307e-07 0.0 -1.0 -0.0 0.765625 0.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.038060203194618225 -0.9807853102684021 -0.1913413256406784 -0.039185766130685806 -0.9795831441879272 -0.19708853960037231 0.78125 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 1.513972591737911e-08 -0.9807853102684021 -0.1950899213552475 0.0 -0.9795831441879272 -0.20096439123153687 0.75 0.06249988079071045 0 1.0 0 0.0 0 0.0 0 0.0 -0.1913413405418396 -0.19509020447731018 -0.9619388580322266 -0.191381573677063 -0.19391460716724396 -0.9621570706367493 0.7812498807907104 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 -0.19508998095989227 7.549790126404332e-08 -0.98078453540802 -0.19507431983947754 0.0 -0.9807733297348022 0.7812498807907104 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.0 7.549790126404332e-08 -1.0 0.0 0.0 -1.0 0.75 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -0.19509020447731018 -0.9807853102684021 0.0 -0.19391460716724396 -0.9809869527816772 0.75 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.07465773820877075 0.9238795042037964 -0.375329852104187 -0.07565538585186005 0.921689510345459 -0.3804132342338562 0.78125 0.8750001192092896 0 1.0 0 0.0 0 0.0 0 0.0 -0.038060225546360016 0.9807852506637573 -0.19134151935577393 -0.039185766130685806 0.9795831441879272 -0.19708853960037231 0.78125 0.9375001192092896 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.9807852506637573 -0.19509032368659973 0.0 0.9795831441879272 -0.20096439123153687 0.75 0.9375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.9238795042037964 -0.3826834559440613 0.0 0.921689510345459 -0.3878597319126129 0.75 0.875 0 1.0 0 0.0 0 0.0 0 0.0 -0.18023987114429474 -0.38268327713012695 -0.9061269760131836 -0.18039490282535553 -0.3805353045463562 -0.9069795608520508 0.78125 0.375 0 1.0 0 0.0 0 0.0 0 0.0 -0.1913413405418396 -0.19509020447731018 -0.9619388580322266 -0.191381573677063 -0.19391460716724396 -0.9621570706367493 0.7812498807907104 0.4375 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -0.19509020447731018 -0.9807853102684021 0.0 -0.19391460716724396 -0.9809869527816772 0.75 0.4375000596046448 0 1.0 0 0.0 0 0.0 0 0.0 6.356849979738399e-08 -0.38268327713012695 -0.9238790273666382 0.0 -0.3805353045463562 -0.9247413277626038 0.75 0.375 0 1.0 0 0.0 0 0.0 0 0.0 0 1 2 0 0 2 3 0 4 5 6 0 4 6 7 0 8 9 10 0 8 10 11 0 12 13 14 0 12 14 15 0 16 17 18 0 16 18 19 0 20 21 22 0 20 22 23 0 24 25 26 0 24 26 27 0 28 29 30 0 28 30 31 0 32 33 34 0 32 34 35 0 36 37 38 0 36 38 39 0 40 41 42 0 40 42 43 0 44 45 46 0 44 46 47 0 48 49 50 0 51 52 53 0 54 55 56 0 54 56 57 0 58 59 60 0 58 60 61 0 62 63 64 0 65 66 67 0 65 67 68 0 69 70 71 0 69 71 72 0 73 74 75 0 73 75 76 0 77 78 79 0 77 79 80 0 81 82 83 0 81 83 84 0 85 86 87 0 85 87 88 0 89 90 91 0 89 91 92 0 93 94 95 0 93 95 96 0 97 98 99 0 97 99 100 0 101 102 103 0 101 103 104 0 105 106 107 0 105 107 108 0 109 110 111 0 109 111 112 0 113 114 115 0 113 115 116 0 117 118 119 0 117 119 120 0 121 122 123 0 124 125 126 0 124 126 127 0 128 129 130 0 128 130 131 0 132 133 134 0 132 134 135 0 136 137 138 0 136 138 139 0 140 141 142 0 140 142 143 0 144 145 146 0 144 146 147 0 148 149 150 0 151 152 153 0 154 155 156 0 154 156 157 0 158 159 160 0 158 160 161 0 162 163 164 0 162 164 165 0 166 167 168 0 166 168 169 0 170 171 172 0 170 172 173 0 174 175 176 0 174 176 177 0 178 179 180 0 178 180 181 0 182 183 184 0 182 184 185 0 186 187 188 0 186 188 189 0 190 191 192 0 190 192 193 0 194 195 196 0 194 196 197 0 198 199 200 0 198 200 201 0 202 203 204 0 202 204 205 0 206 207 208 0 206 208 209 0 210 211 212 0 210 212 213 0 214 215 216 0 214 216 217 0 218 219 220 0 218 220 221 0 222 223 224 0 222 224 225 0 226 227 228 0 226 228 229 0 230 231 232 0 230 232 233 0 234 235 236 0 234 236 237 0 238 239 240 0 241 242 243 0 244 245 246 0 244 246 247 0 248 249 250 0 248 250 251 0 252 253 254 0 252 254 255 0 256 257 258 0 256 258 259 0 260 261 262 0 260 262 263 0 264 265 266 0 264 266 267 0 268 269 270 0 271 272 273 0 274 275 276 0 274 276 277 0 278 279 280 0 278 280 281 0 282 283 284 0 282 284 285 0 286 287 288 0 286 288 289 0 290 291 292 0 290 292 293 0 294 295 296 0 294 296 297 0 298 299 300 0 298 300 301 0 302 303 304 0 302 304 305 0 306 307 308 0 306 308 309 0 310 311 312 0 310 312 313 0 314 315 316 0 314 316 317 0 318 319 320 0 318 320 321 0 322 323 324 0 322 324 325 0 326 327 328 0 326 328 329 0 330 331 332 0 330 332 333 0 334 335 336 0 334 336 337 0 338 339 340 0 338 340 341 0 342 343 344 0 342 344 345 0 346 347 348 0 346 348 349 0 350 351 352 0 350 352 353 0 354 355 356 0 354 356 357 0 358 359 360 0 361 362 363 0 364 365 366 0 364 366 367 0 368 369 370 0 368 370 371 0 372 373 374 0 372 374 375 0 376 377 378 0 376 378 379 0 380 381 382 0 380 382 383 0 384 385 386 0 384 386 387 0 388 389 390 0 391 392 393 0 394 395 396 0 394 396 397 0 398 399 400 0 398 400 401 0 402 403 404 0 402 404 405 0 406 407 408 0 406 408 409 0 410 411 412 0 410 412 413 0 414 415 416 0 414 416 417 0 418 419 420 0 418 420 421 0 422 423 424 0 422 424 425 0 426 427 428 0 426 428 429 0 430 431 432 0 430 432 433 0 434 435 436 0 434 436 437 0 438 439 440 0 438 440 441 0 442 443 444 0 442 444 445 0 446 447 448 0 446 448 449 0 450 451 452 0 450 452 453 0 454 455 456 0 454 456 457 0 458 459 460 0 458 460 461 0 462 463 464 0 462 464 465 0 466 467 468 0 466 468 469 0 470 471 472 0 470 472 473 0 474 475 476 0 474 476 477 0 478 479 480 0 481 482 483 0 484 485 486 0 484 486 487 0 488 489 490 0 488 490 491 0 492 493 494 0 492 494 495 0 496 497 498 0 496 498 499 0 500 501 502 0 500 502 503 0 504 505 506 0 504 506 507 0 508 509 510 0 511 512 513 0 514 515 516 0 514 516 517 0 518 519 520 0 518 520 521 0 522 523 524 0 522 524 525 0 526 527 528 0 526 528 529 0 530 531 532 0 530 532 533 0 534 535 536 0 534 536 537 0 538 539 540 0 538 540 541 0 542 543 544 0 542 544 545 0 546 547 548 0 546 548 549 0 550 551 552 0 550 552 553 0 554 555 556 0 554 556 557 0 558 559 560 0 558 560 561 0 562 563 564 0 562 564 565 0 566 567 568 0 566 568 569 0 570 571 572 0 570 572 573 0 574 575 576 0 574 576 577 0 578 579 580 0 578 580 581 0 582 583 584 0 582 584 585 0 586 587 588 0 586 588 589 0 590 591 592 0 590 592 593 0 594 595 596 0 594 596 597 0 598 599 600 0 601 602 603 0 604 605 606 0 604 606 607 0 608 609 610 0 608 610 611 0 612 613 614 0 612 614 615 0 616 617 618 0 616 618 619 0 620 621 622 0 620 622 623 0 624 625 626 0 624 626 627 0 628 629 630 0 631 632 633 0 634 635 636 0 634 636 637 0 638 639 640 0 638 640 641 0 642 643 644 0 642 644 645 0 646 647 648 0 646 648 649 0 650 651 652 0 650 652 653 0 654 655 656 0 654 656 657 0 658 659 660 0 658 660 661 0 662 663 664 0 662 664 665 0 666 667 668 0 666 668 669 0 670 671 672 0 670 672 673 0 674 675 676 0 674 676 677 0 678 679 680 0 678 680 681 0 682 683 684 0 682 684 685 0 686 687 688 0 686 688 689 0 690 691 692 0 690 692 693 0 694 695 696 0 694 696 697 0 698 699 700 0 698 700 701 0 702 703 704 0 702 704 705 0 706 707 708 0 706 708 709 0 710 711 712 0 710 712 713 0 714 715 716 0 717 718 719 0 720 721 722 0 720 722 723 0 724 725 726 0 724 726 727 0 728 729 730 0 728 730 731 0 732 733 734 0 732 734 735 0 736 737 738 0 736 738 739 0 740 741 742 0 740 742 743 0 744 745 746 0 747 748 749 0 750 751 752 0 750 752 753 0 754 755 756 0 754 756 757 0 758 759 760 0 758 760 761 0 762 763 764 0 762 764 765 0 766 767 768 0 766 768 769 0 770 771 772 0 770 772 773 0 774 775 776 0 774 776 777 0 778 779 780 0 778 780 781 0 782 783 784 0 782 784 785 0 786 787 788 0 786 788 789 0 790 791 792 0 790 792 793 0 794 795 796 0 794 796 797 0 798 799 800 0 798 800 801 0 802 803 804 0 802 804 805 0 806 807 808 0 806 808 809 0 810 811 812 0 810 812 813 0 814 815 816 0 814 816 817 0 818 819 820 0 818 820 821 0 822 823 824 0 822 824 825 0 826 827 828 0 826 828 829 0 830 831 832 0 830 832 833 0 834 835 836 0 837 838 839 0 840 841 842 0 840 842 843 0 844 845 846 0 844 846 847 0 848 849 850 0 848 850 851 0 852 853 854 0 852 854 855 0 856 857 858 0 856 858 859 0 860 861 862 0 860 862 863 0 864 865 866 0 864 866 867 0 868 869 870 0 868 870 871 0 872 873 874 0 872 874 875 0 876 877 878 0 876 878 879 0 880 881 882 0 880 882 883 0 884 885 886 0 884 886 887 0 888 889 890 0 888 890 891 0 892 893 894 0 892 894 895 0 896 897 898 0 896 898 899 0 900 901 902 0 900 902 903 0 904 905 906 0 904 906 907 0 908 909 910 0 908 910 911 0 912 913 914 0 912 914 915 0 916 917 918 0 916 918 919 0 920 921 922 0 920 922 923 0 924 925 926 0 927 928 929 0 930 931 932 0 930 932 933 0 934 935 936 0 934 936 937 0 938 939 940 0 938 940 941 0 942 943 944 0 942 944 945 0 946 947 948 0 946 948 949 0 950 951 952 0 950 952 953 0 954 955 956 0 957 958 959 0 960 961 962 0 960 962 963 0 964 965 966 0 964 966 967 0 968 969 970 0 968 970 971 0 972 973 974 0 972 974 975 0 976 977 978 0 976 978 979 0 980 981 982 0 980 982 983 0 984 985 986 0 984 986 987 0 988 989 990 0 988 990 991 0 992 993 994 0 992 994 995 0 996 997 998 0 996 998 999 0 1000 1001 1002 0 1000 1002 1003 0 1004 1005 1006 0 1004 1006 1007 0 1008 1009 1010 0 1008 1010 1011 0 1012 1013 1014 0 1012 1014 1015 0 1016 1017 1018 0 1016 1018 1019 0 1020 1021 1022 0 1020 1022 1023 0 1024 1025 1026 0 1024 1026 1027 0 1028 1029 1030 0 1028 1030 1031 0 1032 1033 1034 0 1032 1034 1035 0 1036 1037 1038 0 1036 1038 1039 0 1040 1041 1042 0 1040 1042 1043 0 1044 1045 1046 0 1047 1048 1049 0 1050 1051 1052 0 1050 1052 1053 0 1054 1055 1056 0 1054 1056 1057 0 1058 1059 1060 0 1058 1060 1061 0 1062 1063 1064 0 1062 1064 1065 0 1066 1067 1068 0 1066 1068 1069 0 1070 1071 1072 0 1070 1072 1073 0 1074 1075 1076 0 1077 1078 1079 0 1080 1081 1082 0 1080 1082 1083 0 1084 1085 1086 0 1084 1086 1087 0 1088 1089 1090 0 1088 1090 1091 0 1092 1093 1094 0 1092 1094 1095 0 1096 1097 1098 0 1096 1098 1099 0 1100 1101 1102 0 1100 1102 1103 0 1104 1105 1106 0 1104 1106 1107 0 1108 1109 1110 0 1108 1110 1111 0 1112 1113 1114 0 1112 1114 1115 0 1116 1117 1118 0 1116 1118 1119 0 1120 1121 1122 0 1120 1122 1123 0 1124 1125 1126 0 1124 1126 1127 0 1128 1129 1130 0 1128 1130 1131 0 1132 1133 1134 0 1132 1134 1135 0 1136 1137 1138 0 1136 1138 1139 0 1140 1141 1142 0 1140 1142 1143 0 1144 1145 1146 0 1144 1146 1147 0 1148 1149 1150 0 1148 1150 1151 0 1152 1153 1154 0 1152 1154 1155 0 1156 1157 1158 0 1156 1158 1159 0 1160 1161 1162 0 1160 1162 1163 0 1164 1165 1166 0 1167 1168 1169 0 1170 1171 1172 0 1170 1172 1173 0 1174 1175 1176 0 1174 1176 1177 0 1178 1179 1180 0 1178 1180 1181 0 1182 1183 1184 0 1182 1184 1185 0 1186 1187 1188 0 1186 1188 1189 0 1190 1191 1192 0 1190 1192 1193 0 1194 1195 1196 0 1197 1198 1199 0 1200 1201 1202 0 1200 1202 1203 0 1204 1205 1206 0 1204 1206 1207 0 1208 1209 1210 0 1208 1210 1211 0 1212 1213 1214 0 1212 1214 1215 0 1216 1217 1218 0 1216 1218 1219 0 1220 1221 1222 0 1220 1222 1223 0 1224 1225 1226 0 1224 1226 1227 0 1228 1229 1230 0 1228 1230 1231 0 1232 1233 1234 0 1232 1234 1235 0 1236 1237 1238 0 1236 1238 1239 0 1240 1241 1242 0 1240 1242 1243 0 1244 1245 1246 0 1244 1246 1247 0 1248 1249 1250 0 1248 1250 1251 0 1252 1253 1254 0 1252 1254 1255 0 1256 1257 1258 0 1256 1258 1259 0 1260 1261 1262 0 1260 1262 1263 0 1264 1265 1266 0 1264 1266 1267 0 1268 1269 1270 0 1268 1270 1271 0 1272 1273 1274 0 1272 1274 1275 0 1276 1277 1278 0 1276 1278 1279 0 1280 1281 1282 0 1283 1284 1285 0 1286 1287 1288 0 1286 1288 1289 0 1290 1291 1292 0 1290 1292 1293 0 1294 1295 1296 0 1294 1296 1297 0 1298 1299 1300 0 1298 1300 1301 0 1302 1303 1304 0 1302 1304 1305 0 1306 1307 1308 0 1306 1308 1309 0 1310 1311 1312 0 1313 1314 1315 0 1316 1317 1318 0 1316 1318 1319 0 1320 1321 1322 0 1320 1322 1323 0 1324 1325 1326 0 1324 1326 1327 0 1328 1329 1330 0 1328 1330 1331 0 1332 1333 1334 0 1332 1334 1335 0 1336 1337 1338 0 1336 1338 1339 0 1340 1341 1342 0 1340 1342 1343 0 1344 1345 1346 0 1344 1346 1347 0 1348 1349 1350 0 1348 1350 1351 0 1352 1353 1354 0 1352 1354 1355 0 1356 1357 1358 0 1356 1358 1359 0 1360 1361 1362 0 1360 1362 1363 0 1364 1365 1366 0 1364 1366 1367 0 1368 1369 1370 0 1368 1370 1371 0 1372 1373 1374 0 1372 1374 1375 0 1376 1377 1378 0 1376 1378 1379 0 1380 1381 1382 0 1380 1382 1383 0 1384 1385 1386 0 1384 1386 1387 0 1388 1389 1390 0 1388 1390 1391 0 1392 1393 1394 0 1392 1394 1395 0 1396 1397 1398 0 1396 1398 1399 0 1400 1401 1402 0 1403 1404 1405 0 1406 1407 1408 0 1406 1408 1409 0 1410 1411 1412 0 1410 1412 1413 0 1414 1415 1416 0 1414 1416 1417 0 1418 1419 1420 0 1418 1420 1421 0 1422 1423 1424 0 1422 1424 1425 0 1426 1427 1428 0 1426 1428 1429 0 1430 1431 1432 0 1433 1434 1435 0 1436 1437 1438 0 1436 1438 1439 0 1440 1441 1442 0 1440 1442 1443 0 1444 1445 1446 0 1444 1446 1447 0 1448 1449 1450 0 1448 1450 1451 0 1452 1453 1454 0 1452 1454 1455 0 1456 1457 1458 0 1456 1458 1459 0 1460 1461 1462 0 1460 1462 1463 0 1464 1465 1466 0 1464 1466 1467 0 1468 1469 1470 0 1468 1470 1471 0 1472 1473 1474 0 1472 1474 1475 0 1476 1477 1478 0 1476 1478 1479 0 1480 1481 1482 0 1480 1482 1483 0 1484 1485 1486 0 1484 1486 1487 0 1488 1489 1490 0 1488 1490 1491 0 1492 1493 1494 0 1492 1494 1495 0 1496 1497 1498 0 1496 1498 1499 0 1500 1501 1502 0 1500 1502 1503 0 1504 1505 1506 0 1504 1506 1507 0 1508 1509 1510 0 1508 1510 1511 0 1512 1513 1514 0 1512 1514 1515 0 1516 1517 1518 0 1516 1518 1519 0 1520 1521 1522 0 1523 1524 1525 0 1526 1527 1528 0 1526 1528 1529 0 1530 1531 1532 0 1530 1532 1533 0 1534 1535 1536 0 1534 1536 1537 0 1538 1539 1540 0 1538 1540 1541 0 1542 1543 1544 0 1542 1544 1545 0 1546 1547 1548 0 1546 1548 1549 0 1550 1551 1552 0 1553 1554 1555 0 1556 1557 1558 0 1556 1558 1559 0 1560 1561 1562 0 1560 1562 1563 0 1564 1565 1566 0 1564 1566 1567 0 1568 1569 1570 0 1568 1570 1571 0 1572 1573 1574 0 1572 1574 1575 0 1576 1577 1578 0 1576 1578 1579 0 1580 1581 1582 0 1580 1582 1583 0 1584 1585 1586 0 1584 1586 1587 0 1588 1589 1590 0 1588 1590 1591 0 1592 1593 1594 0 1592 1594 1595 0 1596 1597 1598 0 1596 1598 1599 0 1600 1601 1602 0 1600 1602 1603 0 1604 1605 1606 0 1604 1606 1607 0 1608 1609 1610 0 1608 1610 1611 0 1612 1613 1614 0 1612 1614 1615 0 1616 1617 1618 0 1616 1618 1619 0 1620 1621 1622 0 1620 1622 1623 0 1624 1625 1626 0 1624 1626 1627 0 1628 1629 1630 0 1628 1630 1631 0 1632 1633 1634 0 1632 1634 1635 0 1636 1637 1638 0 1636 1638 1639 0 1640 1641 1642 0 1643 1644 1645 0 1646 1647 1648 0 1646 1648 1649 0 1650 1651 1652 0 1650 1652 1653 0 1654 1655 1656 0 1654 1656 1657 0 1658 1659 1660 0 1658 1660 1661 0 1662 1663 1664 0 1662 1664 1665 0 1666 1667 1668 0 1666 1668 1669 0 1670 1671 1672 0 1670 1672 1673 0 1674 1675 1676 0 1674 1676 1677 0 1678 1679 1680 0 1678 1680 1681 0 1682 1683 1684 0 1682 1684 1685 0 1686 1687 1688 0 1686 1688 1689 0 1690 1691 1692 0 1690 1692 1693 0 1694 1695 1696 0 1694 1696 1697 0 1698 1699 1700 0 1698 1700 1701 0 1702 1703 1704 0 1702 1704 1705 0 1706 1707 1708 0 1706 1708 1709 0 1710 1711 1712 0 1710 1712 1713 0 1714 1715 1716 0 1714 1716 1717 0 1718 1719 1720 0 1718 1720 1721 0 1722 1723 1724 0 1722 1724 1725 0 1726 1727 1728 0 1726 1728 1729 0 1730 1731 1732 0 1733 1734 1735 0 1736 1737 1738 0 1736 1738 1739 0 1740 1741 1742 0 1740 1742 1743 0 1744 1745 1746 0 1744 1746 1747 0 1748 1749 1750 0 1748 1750 1751 0 1752 1753 1754 0 1752 1754 1755 0 1756 1757 1758 0 1756 1758 1759 0 1760 1761 1762 0 1763 1764 1765 0 1766 1767 1768 0 1766 1768 1769 0 1770 1771 1772 0 1770 1772 1773 0 1774 1775 1776 0 1774 1776 1777 0 1778 1779 1780 0 1778 1780 1781 0 1782 1783 1784 0 1782 1784 1785 0 1786 1787 1788 0 1786 1788 1789 0 1790 1791 1792 0 1790 1792 1793 0 1794 1795 1796 0 1794 1796 1797 0 1798 1799 1800 0 1798 1800 1801 0 1802 1803 1804 0 1802 1804 1805 0 1806 1807 1808 0 1806 1808 1809 0 1810 1811 1812 0 1810 1812 1813 0 1814 1815 1816 0 1814 1816 1817 0 1818 1819 1820 0 1818 1820 1821 0 1822 1823 1824 0 1822 1824 1825 0 1826 1827 1828 0 1826 1828 1829 0 1830 1831 1832 0 1830 1832 1833 0 1834 1835 1836 0 1834 1836 1837 0 1838 1839 1840 0 1838 1840 1841 0 1842 1843 1844 0 1842 1844 1845 0 1846 1847 1848 0 1849 1850 1851 0 1852 1853 1854 0 1852 1854 1855 0 1856 1857 1858 0 1856 1858 1859 0 1860 1861 1862 0 1860 1862 1863 0 1864 1865 1866 0 1864 1866 1867 0 1868 1869 1870 0 1868 1870 1871 0 1872 1873 1874 0 1872 1874 1875 0 1876 1877 1878 0 1879 1880 1881 0 1882 1883 1884 0 1882 1884 1885 0 1886 1887 1888 0 1886 1888 1889 0 1890 1891 1892 0 1890 1892 1893 0 1894 1895 1896 0 1894 1896 1897 0 1898 1899 1900 0 1898 1900 1901 0 1902 1903 1904 0 1902 1904 1905 0 1906 1907 1908 0 1906 1908 1909 0 1910 1911 1912 0 1910 1912 1913 0 1914 1915 1916 0 1914 1916 1917 0 1918 1919 1920 0 1918 1920 1921 0 1922 1923 1924 0 1922 1924 1925 0 1926 1927 1928 0 1926 1928 1929 0 1930 1931 1932 0 1930 1932 1933 0 1934 1935 1936 0 1934 1936 1937 0 1938 1939 1940 0 1938 1940 1941 0 1942 1943 1944 0 1942 1944 1945 0 1946 1947 1948 0 1946 1948 1949 0 1950 1951 1952 0 1950 1952 1953 0 1954 1955 1956 0 1954 1956 1957 0 1958 1959 1960 0 1958 1960 1961 0 1962 1963 1964 0 1962 1964 1965 0 1966 1967 1968 0 1969 1970 1971 0 1972 1973 1974 0 1972 1974 1975 0 1976 1977 1978 0 1976 1978 1979 0 1980 1981 1982 0 1980 1982 1983 0 Root -1 0.0 0.0 0.0 0.0 1.0 0.0 0.0 ================================================ FILE: data/models/square10x10.collmdl ================================================ mesh 18 4.25 0.0 4.25 -4.25 0.0 -4.25 -4.25 0.0 4.25 -4.75 0.25 -4.75 -5.0 0.25 5.0 -4.75 0.25 4.75 -4.75 0.25 4.75 5.0 0.25 5.0 4.75 0.25 4.75 4.75 0.25 4.75 5.0 0.25 -5.0 4.75 0.25 -4.75 4.75 0.25 -4.75 -5.0 0.25 -5.0 -4.75 0.25 -4.75 -4.25 0.0 4.25 -4.75 0.25 -4.75 -4.75 0.25 4.75 4.25 0.0 4.25 -4.75 0.25 4.75 4.75 0.25 4.75 4.25 0.0 -4.25 4.75 0.25 4.75 4.75 0.25 -4.75 -4.25 0.0 -4.25 4.75 0.25 -4.75 -4.75 0.25 -4.75 4.25 0.0 4.25 4.25 0.0 -4.25 -4.25 0.0 -4.25 -4.75 0.25 -4.75 -5.0 0.25 -5.0 -5.0 0.25 5.0 -4.75 0.25 4.75 -5.0 0.25 5.0 5.0 0.25 5.0 4.75 0.25 4.75 5.0 0.25 5.0 5.0 0.25 -5.0 4.75 0.25 -4.75 5.0 0.25 -5.0 -5.0 0.25 -5.0 -4.25 0.0 4.25 -4.25 0.0 -4.25 -4.75 0.25 -4.75 4.25 0.0 4.25 -4.25 0.0 4.25 -4.75 0.25 4.75 4.25 0.0 -4.25 4.25 0.0 4.25 4.75 0.25 4.75 -4.25 0.0 -4.25 4.25 0.0 -4.25 4.75 0.25 -4.75 ================================================ FILE: data/models/square10x10.stmdl ================================================ 54 18 2 concrete018 metal003 4.25 0.0 4.25 0.0 1.0 -0.0 1.0 0.0 1.0 0.0 -4.25 0.0 -4.25 0.0 1.0 -0.0 0.0 1.0 0.0 1.0 -4.25 0.0 4.25 0.0 1.0 -0.0 0.0 0.0 0.0 0.0 -4.75 0.25 -4.75 0.0 1.0 -0.0 -1.875 2.875 -1.875 2.875 -5.0 0.25 5.0 0.0 0.999969482421875 -0.0 -2.0 -2.0 -2.0 -2.0 -4.75 0.25 4.75 0.0 1.0 -0.0 -1.875 -1.875 -1.875 -1.875 -4.75 0.25 4.75 0.0 1.0 -0.0 -1.875 -1.875 -1.875 -1.875 5.0 0.25 5.0 0.0 0.999969482421875 -0.0 3.0 -2.0 3.0 -2.0 4.75 0.25 4.75 0.0 1.0 -0.0 2.875 -1.875 2.875 -1.875 4.75 0.25 4.75 0.0 1.0 -0.0 2.875 -1.875 2.875 -1.875 5.0 0.25 -5.0 0.0 0.999969482421875 -0.0 3.0 3.0 3.0 3.0 4.75 0.25 -4.75 0.0 1.0 -0.0 2.875 2.875 2.875 2.875 4.75 0.25 -4.75 0.0 1.0 -0.0 2.875 2.875 2.875 2.875 -5.0 0.25 -5.0 0.0 0.999969482421875 -0.0 -2.0 3.0 -2.0 3.0 -4.75 0.25 -4.75 0.0 1.0 -0.0 -1.875 2.875 -1.875 2.875 -4.25 0.0 4.25 0.44718772172927856 0.8944059610366821 -0.0 -1.625 -1.625 -1.625 -1.625 -4.75 0.25 -4.75 0.44718772172927856 0.8944059610366821 -0.0 -1.875 2.875 -1.875 2.875 -4.75 0.25 4.75 0.44718772172927856 0.8944059610366821 -0.0 -1.875 -1.875 -1.875 -1.875 4.25 0.0 4.25 0.0 0.8944059610366821 -0.44718772172927856 2.625 -1.625 2.625 -1.625 -4.75 0.25 4.75 0.0 0.8944059610366821 -0.44718772172927856 -1.875 -1.875 -1.875 -1.875 4.75 0.25 4.75 0.0 0.8944059610366821 -0.44718772172927856 2.875 -1.875 2.875 -1.875 4.25 0.0 -4.25 -0.44718772172927856 0.8944059610366821 -0.0 2.625 2.625 2.625 2.625 4.75 0.25 4.75 -0.44718772172927856 0.8944059610366821 -0.0 2.875 -1.875 2.875 -1.875 4.75 0.25 -4.75 -0.44718772172927856 0.8944059610366821 -0.0 2.875 2.875 2.875 2.875 -4.25 0.0 -4.25 0.0 0.8944059610366821 0.44718772172927856 -1.625 2.625 -1.625 2.625 4.75 0.25 -4.75 0.0 0.8944059610366821 0.44718772172927856 2.875 2.875 2.875 2.875 -4.75 0.25 -4.75 0.0 0.8944059610366821 0.44718772172927856 -1.875 2.875 -1.875 2.875 4.25 0.0 4.25 0.0 1.0 -0.0 1.0 0.0 1.0 0.0 4.25 0.0 -4.25 0.0 1.0 -0.0 1.0 1.0 1.0 1.0 -4.25 0.0 -4.25 0.0 1.0 -0.0 0.0 1.0 0.0 1.0 -4.75 0.25 -4.75 0.0 1.0 -0.0 -1.875 2.875 -1.875 2.875 -5.0 0.25 -5.0 0.0 0.999969482421875 -0.0 -2.0 3.0 -2.0 3.0 -5.0 0.25 5.0 0.0 0.999969482421875 -0.0 -2.0 -2.0 -2.0 -2.0 -4.75 0.25 4.75 0.0 1.0 -0.0 -1.875 -1.875 -1.875 -1.875 -5.0 0.25 5.0 0.0 0.999969482421875 -0.0 -2.0 -2.0 -2.0 -2.0 5.0 0.25 5.0 0.0 0.999969482421875 -0.0 3.0 -2.0 3.0 -2.0 4.75 0.25 4.75 0.0 1.0 -0.0 2.875 -1.875 2.875 -1.875 5.0 0.25 5.0 0.0 0.999969482421875 -0.0 3.0 -2.0 3.0 -2.0 5.0 0.25 -5.0 0.0 0.999969482421875 -0.0 3.0 3.0 3.0 3.0 4.75 0.25 -4.75 0.0 1.0 -0.0 2.875 2.875 2.875 2.875 5.0 0.25 -5.0 0.0 0.999969482421875 -0.0 3.0 3.0 3.0 3.0 -5.0 0.25 -5.0 0.0 0.999969482421875 -0.0 -2.0 3.0 -2.0 3.0 -4.25 0.0 4.25 0.44718772172927856 0.8944059610366821 -0.0 -1.625 -1.625 -1.625 -1.625 -4.25 0.0 -4.25 0.44718772172927856 0.8944059610366821 -0.0 -1.625 2.625 -1.625 2.625 -4.75 0.25 -4.75 0.44718772172927856 0.8944059610366821 -0.0 -1.875 2.875 -1.875 2.875 4.25 0.0 4.25 0.0 0.8944059610366821 -0.44718772172927856 2.625 -1.625 2.625 -1.625 -4.25 0.0 4.25 0.0 0.8944059610366821 -0.44718772172927856 -1.625 -1.625 -1.625 -1.625 -4.75 0.25 4.75 0.0 0.8944059610366821 -0.44718772172927856 -1.875 -1.875 -1.875 -1.875 4.25 0.0 -4.25 -0.44718772172927856 0.8944059610366821 -0.0 2.625 2.625 2.625 2.625 4.25 0.0 4.25 -0.44718772172927856 0.8944059610366821 -0.0 2.625 -1.625 2.625 -1.625 4.75 0.25 4.75 -0.44718772172927856 0.8944059610366821 -0.0 2.875 -1.875 2.875 -1.875 -4.25 0.0 -4.25 0.0 0.8944059610366821 0.44718772172927856 -1.625 2.625 -1.625 2.625 4.25 0.0 -4.25 0.0 0.8944059610366821 0.44718772172927856 2.625 2.625 2.625 2.625 4.75 0.25 -4.75 0.0 0.8944059610366821 0.44718772172927856 2.875 2.875 2.875 2.875 0 1 2 0 3 4 5 1 6 7 8 1 9 10 11 1 12 13 14 1 15 16 17 1 18 19 20 1 21 22 23 1 24 25 26 1 27 28 29 0 30 31 32 1 33 34 35 1 36 37 38 1 39 40 41 1 42 43 44 1 45 46 47 1 48 49 50 1 51 52 53 1 ================================================ FILE: data/models/translucent.dymdl ================================================ DYMDLv1 168 72 1 1 0 translucent 0.25 -0.25 0.5 0.0 0.0 1.0 0.75 0.2499999701976776 0 1.0 0 0.0 0 0.0 0 0.0 0.25 0.25 0.5 0.0 0.0 1.0 0.75 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 0.5 0.0 0.0 1.0 0.5 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 -0.25 0.25 -1.0 0.0 -0.0 0.2500000596046448 0.2499999701976776 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 0.25 0.25 -1.0 0.0 -0.0 0.25 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 0.0 -0.0 -1.0 0.0 -0.0 0.5 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 -0.5 -0.25 0.0 -1.0 -0.0 0.75 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.25 -0.5 -0.25 0.0 -1.0 -0.0 0.25 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -0.5 -0.0 0.0 -1.0 -0.0 0.5 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.5 -0.25 -0.25 1.0 0.0 -0.0 0.2500000596046448 0.2499999701976776 0 1.0 0 0.0 0 0.0 0 0.0 0.5 0.25 -0.25 1.0 0.0 -0.0 0.25 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.5 0.0 -0.0 1.0 0.0 -0.0 0.5 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 -0.25 -0.5 0.0 0.0 -1.0 0.75 0.2499999701976776 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 0.25 -0.5 0.0 0.0 -1.0 0.75 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 -0.5 0.0 0.0 -1.0 0.5 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 0.5773491859436035 0.5773491859436035 -0.5773491859436035 1.7881393432617188e-07 1.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 -0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.0 1.4901161193847656e-07 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 0.5 -0.25 0.0 1.0 -0.0 0.25 0.2500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.25 0.5 -0.25 0.0 1.0 -0.0 0.25000008940696716 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 -0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.0 1.4901161193847656e-07 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 -0.5773491859436035 0.5773491859436035 0.5773491859436035 1.7881393432617188e-07 1.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 0.5 0.25 0.0 1.0 -0.0 0.25000011920928955 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 0.5 -0.25 0.0 1.0 -0.0 0.25 0.2500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 -0.5773491859436035 0.5773491859436035 0.5773491859436035 1.7881393432617188e-07 1.0 0 1.0 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 0.5773491859436035 0.5773491859436035 0.5773491859436035 1.0 0.9999998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.25 0.5 0.25 0.0 1.0 -0.0 0.7500000596046448 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 0.5 0.25 0.0 1.0 -0.0 0.25000011920928955 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 0.5773491859436035 0.5773491859436035 0.5773491859436035 1.0 0.9999998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 0.5773491859436035 0.5773491859436035 -0.5773491859436035 1.7881393432617188e-07 1.0 0 1.0 0 0.0 0 0.0 0 0.0 0.25 0.5 -0.25 0.0 1.0 -0.0 0.25000008940696716 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.25 0.5 0.25 0.0 1.0 -0.0 0.7500000596046448 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 0.5773491859436035 -0.5773491859436035 0.5773491859436035 0.9999998807907104 0.0 0 1.0 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 0.5773491859436035 0.5773491859436035 0.5773491859436035 1.0 0.9999998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.25 0.25 0.5 0.0 0.0 1.0 0.75 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.25 -0.25 0.5 0.0 0.0 1.0 0.75 0.2499999701976776 0 1.0 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 0.5773491859436035 0.5773491859436035 0.5773491859436035 1.0 0.9999998807907104 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 -0.5773491859436035 0.5773491859436035 0.5773491859436035 5.960464477539063e-08 1.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 0.25 0.5 0.0 0.0 1.0 0.2500000298023224 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.25 0.25 0.5 0.0 0.0 1.0 0.75 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 -0.5773491859436035 0.5773491859436035 0.5773491859436035 5.960464477539063e-08 1.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 -0.5773491859436035 -0.5773491859436035 0.5773491859436035 0.0 2.9802322387695312e-08 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 -0.25 0.5 0.0 0.0 1.0 0.2499999850988388 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 0.25 0.5 0.0 0.0 1.0 0.2500000298023224 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 -0.5773491859436035 -0.5773491859436035 0.5773491859436035 0.0 2.9802322387695312e-08 0 1.0 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 0.5773491859436035 -0.5773491859436035 0.5773491859436035 0.9999998807907104 0.0 0 1.0 0 0.0 0 0.0 0 0.0 0.25 -0.25 0.5 0.0 0.0 1.0 0.75 0.2499999701976776 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 -0.25 0.5 0.0 0.0 1.0 0.2499999850988388 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 -0.5773491859436035 -0.5773491859436035 0.5773491859436035 1.1920928955078125e-07 0.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 -0.5773491859436035 0.5773491859436035 0.5773491859436035 0.0 0.9999998807907104 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 0.25 0.25 -1.0 0.0 -0.0 0.25 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 -0.25 0.25 -1.0 0.0 -0.0 0.2500000596046448 0.2499999701976776 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 0.5 0.5 -0.5773491859436035 0.5773491859436035 0.5773491859436035 0.0 0.9999998807907104 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 -0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.9999999403953552 1.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 0.25 -0.25 -1.0 0.0 -0.0 0.75 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 0.25 0.25 -1.0 0.0 -0.0 0.25 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 -0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.9999999403953552 1.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 -0.5773491859436035 -0.5773491859436035 -0.5773491859436035 1.0 2.9802322387695312e-08 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 -0.25 -0.25 -1.0 0.0 -0.0 0.75 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 0.25 -0.25 -1.0 0.0 -0.0 0.75 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 -0.5773491859436035 -0.5773491859436035 -0.5773491859436035 1.0 2.9802322387695312e-08 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 -0.5773491859436035 -0.5773491859436035 0.5773491859436035 1.1920928955078125e-07 0.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 -0.25 0.25 -1.0 0.0 -0.0 0.2500000596046448 0.2499999701976776 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 -0.25 -0.25 -1.0 0.0 -0.0 0.75 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 -0.5773491859436035 -0.5773491859436035 -0.5773491859436035 1.0 0.0 0 1.0 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 0.5773491859436035 -0.5773491859436035 -0.5773491859436035 0.0 2.9802322387695312e-08 0 1.0 0 0.0 0 0.0 0 0.0 0.25 -0.5 -0.25 0.0 -1.0 -0.0 0.25 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 -0.5 -0.25 0.0 -1.0 -0.0 0.75 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 0.5773491859436035 -0.5773491859436035 -0.5773491859436035 0.0 2.9802322387695312e-08 0 1.0 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 0.5773491859436035 -0.5773491859436035 0.5773491859436035 1.0 0.0 0 1.0 0 0.0 0 0.0 0 0.0 0.25 -0.5 0.25 0.0 -1.0 -0.0 0.75 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.25 -0.5 -0.25 0.0 -1.0 -0.0 0.25 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 0.5773491859436035 -0.5773491859436035 0.5773491859436035 1.0 0.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 -0.5773491859436035 -0.5773491859436035 0.5773491859436035 1.0 1.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 -0.5 0.25 0.0 -1.0 -0.0 0.75 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.25 -0.5 0.25 0.0 -1.0 -0.0 0.75 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 -0.5 0.5 -0.5773491859436035 -0.5773491859436035 0.5773491859436035 1.0 1.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 -0.5773491859436035 -0.5773491859436035 -0.5773491859436035 1.0 0.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 -0.5 -0.25 0.0 -1.0 -0.0 0.75 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 -0.5 0.25 0.0 -1.0 -0.0 0.75 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 0.5773491859436035 -0.5773491859436035 -0.5773491859436035 1.1920928955078125e-07 0.0 0 1.0 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.0 0.9999998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.5 0.25 -0.25 1.0 0.0 -0.0 0.25 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.5 -0.25 -0.25 1.0 0.0 -0.0 0.2500000596046448 0.2499999701976776 0 1.0 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 0.5773491859436035 0.5773491859436035 -0.5773491859436035 0.0 0.9999998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 0.5773491859436035 0.5773491859436035 0.5773491859436035 0.9999999403953552 1.0 0 1.0 0 0.0 0 0.0 0 0.0 0.5 0.25 0.25 1.0 0.0 -0.0 0.75 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.5 0.25 -0.25 1.0 0.0 -0.0 0.25 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.5 0.5 0.5 0.5773491859436035 0.5773491859436035 0.5773491859436035 0.9999999403953552 1.0 0 1.0 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 0.5773491859436035 -0.5773491859436035 0.5773491859436035 1.0 2.9802322387695312e-08 0 1.0 0 0.0 0 0.0 0 0.0 0.5 -0.25 0.25 1.0 0.0 -0.0 0.75 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.5 0.25 0.25 1.0 0.0 -0.0 0.75 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.5 -0.5 0.5 0.5773491859436035 -0.5773491859436035 0.5773491859436035 1.0 2.9802322387695312e-08 0 1.0 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 0.5773491859436035 -0.5773491859436035 -0.5773491859436035 1.1920928955078125e-07 0.0 0 1.0 0 0.0 0 0.0 0 0.0 0.5 -0.25 -0.25 1.0 0.0 -0.0 0.2500000596046448 0.2499999701976776 0 1.0 0 0.0 0 0.0 0 0.0 0.5 -0.25 0.25 1.0 0.0 -0.0 0.75 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 -0.5773491859436035 -0.5773491859436035 -0.5773491859436035 0.9999998807907104 0.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 -0.5773491859436035 0.5773491859436035 -0.5773491859436035 1.0 0.9999998807907104 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 0.25 -0.5 0.0 0.0 -1.0 0.75 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 -0.25 -0.5 0.0 0.0 -1.0 0.75 0.2499999701976776 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 0.5 -0.5 -0.5773491859436035 0.5773491859436035 -0.5773491859436035 1.0 0.9999998807907104 0 1.0 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 0.5773491859436035 0.5773491859436035 -0.5773491859436035 5.960464477539063e-08 1.0 0 1.0 0 0.0 0 0.0 0 0.0 0.25 0.25 -0.5 0.0 0.0 -1.0 0.2500000298023224 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 0.25 -0.5 0.0 0.0 -1.0 0.75 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.5 0.5 -0.5 0.5773491859436035 0.5773491859436035 -0.5773491859436035 5.960464477539063e-08 1.0 0 1.0 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 0.5773491859436035 -0.5773491859436035 -0.5773491859436035 0.0 2.9802322387695312e-08 0 1.0 0 0.0 0 0.0 0 0.0 0.25 -0.25 -0.5 0.0 0.0 -1.0 0.2499999850988388 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.25 0.25 -0.5 0.0 0.0 -1.0 0.2500000298023224 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.5 -0.5 -0.5 0.5773491859436035 -0.5773491859436035 -0.5773491859436035 0.0 2.9802322387695312e-08 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 -0.5 -0.5 -0.5773491859436035 -0.5773491859436035 -0.5773491859436035 0.9999998807907104 0.0 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 -0.25 -0.5 0.0 0.0 -1.0 0.75 0.2499999701976776 0 1.0 0 0.0 0 0.0 0 0.0 0.25 -0.25 -0.5 0.0 0.0 -1.0 0.2499999850988388 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.25 0.5 -0.25 0.0 1.0 -0.0 0.25000008940696716 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 0.5 -0.25 0.0 1.0 -0.0 0.25 0.2500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.5 -0.0 0.0 1.0 -0.0 0.5000000596046448 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 0.5 -0.25 0.0 1.0 -0.0 0.25 0.2500000596046448 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 0.5 0.25 0.0 1.0 -0.0 0.25000011920928955 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.5 -0.0 0.0 1.0 -0.0 0.5000000596046448 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 0.5 0.25 0.0 1.0 -0.0 0.25000011920928955 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.25 0.5 0.25 0.0 1.0 -0.0 0.7500000596046448 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.5 -0.0 0.0 1.0 -0.0 0.5000000596046448 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.25 0.5 0.25 0.0 1.0 -0.0 0.7500000596046448 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.25 0.5 -0.25 0.0 1.0 -0.0 0.25000008940696716 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.5 -0.0 0.0 1.0 -0.0 0.5000000596046448 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.25 0.25 0.5 0.0 0.0 1.0 0.75 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 0.25 0.5 0.0 0.0 1.0 0.2500000298023224 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 0.5 0.0 0.0 1.0 0.5 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 0.25 0.5 0.0 0.0 1.0 0.2500000298023224 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 -0.25 0.5 0.0 0.0 1.0 0.2499999850988388 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 0.5 0.0 0.0 1.0 0.5 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 -0.25 0.5 0.0 0.0 1.0 0.2499999850988388 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.25 -0.25 0.5 0.0 0.0 1.0 0.75 0.2499999701976776 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 0.5 0.0 0.0 1.0 0.5 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 0.25 0.25 -1.0 0.0 -0.0 0.25 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 0.25 -0.25 -1.0 0.0 -0.0 0.75 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 0.0 -0.0 -1.0 0.0 -0.0 0.5 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 0.25 -0.25 -1.0 0.0 -0.0 0.75 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 -0.25 -0.25 -1.0 0.0 -0.0 0.75 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 0.0 -0.0 -1.0 0.0 -0.0 0.5 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 -0.25 -0.25 -1.0 0.0 -0.0 0.75 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 -0.25 0.25 -1.0 0.0 -0.0 0.2500000596046448 0.2499999701976776 0 1.0 0 0.0 0 0.0 0 0.0 -0.5 0.0 -0.0 -1.0 0.0 -0.0 0.5 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.25 -0.5 -0.25 0.0 -1.0 -0.0 0.25 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.25 -0.5 0.25 0.0 -1.0 -0.0 0.75 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -0.5 -0.0 0.0 -1.0 -0.0 0.5 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.25 -0.5 0.25 0.0 -1.0 -0.0 0.75 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 -0.5 0.25 0.0 -1.0 -0.0 0.75 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -0.5 -0.0 0.0 -1.0 -0.0 0.5 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 -0.5 0.25 0.0 -1.0 -0.0 0.75 0.75 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 -0.5 -0.25 0.0 -1.0 -0.0 0.75 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.0 -0.5 -0.0 0.0 -1.0 -0.0 0.5 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.5 0.25 -0.25 1.0 0.0 -0.0 0.25 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.5 0.25 0.25 1.0 0.0 -0.0 0.75 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.5 0.0 -0.0 1.0 0.0 -0.0 0.5 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.5 0.25 0.25 1.0 0.0 -0.0 0.75 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.5 -0.25 0.25 1.0 0.0 -0.0 0.75 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.5 0.0 -0.0 1.0 0.0 -0.0 0.5 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.5 -0.25 0.25 1.0 0.0 -0.0 0.75 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.5 -0.25 -0.25 1.0 0.0 -0.0 0.2500000596046448 0.2499999701976776 0 1.0 0 0.0 0 0.0 0 0.0 0.5 0.0 -0.0 1.0 0.0 -0.0 0.5 0.5 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 0.25 -0.5 0.0 0.0 -1.0 0.75 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.25 0.25 -0.5 0.0 0.0 -1.0 0.2500000298023224 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 -0.5 0.0 0.0 -1.0 0.5 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.25 0.25 -0.5 0.0 0.0 -1.0 0.2500000298023224 0.75 0 1.0 0 0.0 0 0.0 0 0.0 0.25 -0.25 -0.5 0.0 0.0 -1.0 0.2499999850988388 0.25 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 -0.5 0.0 0.0 -1.0 0.5 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0.25 -0.25 -0.5 0.0 0.0 -1.0 0.2499999850988388 0.25 0 1.0 0 0.0 0 0.0 0 0.0 -0.25 -0.25 -0.5 0.0 0.0 -1.0 0.75 0.2499999701976776 0 1.0 0 0.0 0 0.0 0 0.0 0.0 0.0 -0.5 0.0 0.0 -1.0 0.5 0.5 0 1.0 0 0.0 0 0.0 0 0.0 0 1 2 0 3 4 5 0 6 7 8 0 9 10 11 0 12 13 14 0 15 16 17 0 15 17 18 0 19 20 21 0 19 21 22 0 23 24 25 0 23 25 26 0 27 28 29 0 27 29 30 0 31 32 33 0 31 33 34 0 35 36 37 0 35 37 38 0 39 40 41 0 39 41 42 0 43 44 45 0 43 45 46 0 47 48 49 0 47 49 50 0 51 52 53 0 51 53 54 0 55 56 57 0 55 57 58 0 59 60 61 0 59 61 62 0 63 64 65 0 63 65 66 0 67 68 69 0 67 69 70 0 71 72 73 0 71 73 74 0 75 76 77 0 75 77 78 0 79 80 81 0 79 81 82 0 83 84 85 0 83 85 86 0 87 88 89 0 87 89 90 0 91 92 93 0 91 93 94 0 95 96 97 0 95 97 98 0 99 100 101 0 99 101 102 0 103 104 105 0 103 105 106 0 107 108 109 0 107 109 110 0 111 112 113 0 114 115 116 0 117 118 119 0 120 121 122 0 123 124 125 0 126 127 128 0 129 130 131 0 132 133 134 0 135 136 137 0 138 139 140 0 141 142 143 0 144 145 146 0 147 148 149 0 150 151 152 0 153 154 155 0 156 157 158 0 159 160 161 0 162 163 164 0 165 166 167 0 Root -1 0.0 0.0 0.0 0.0 1.0 0.0 0.0 ================================================ FILE: data/models/trigger.collmdl ================================================ cloud 8 -1 -0.75 1 -1 0.75 1 -1 -0.75 -1 -1 0.75 -1 1 -0.75 1 1 0.75 1 1 -0.75 -1 1 0.75 -1 ================================================ FILE: data/models/trigger.stmdl ================================================ STMDLv1 30 12 1 1 origin 1 1.25 -3 dev/trigger -1 -0.75 1 -1 -0 0 2 0.5 2 0.5 -1 -0.75 -1 -1 -0 0 4 0.5 4 0.5 -1 0.75 -1 -1 -0 0 4 2 4 2 -1 0.75 1 -1 -0 0 2 2 2 2 -1 0.75 -1 -1 -0 0 4 2 4 2 1 -0.75 1 -0 -0 1 2 0.5 2 0.5 1 0.75 1 -0 -0 1 2 2 2 2 -1 0.75 1 -0 -0 1 0 2 0 2 -1 -0.75 1 -0 -0 1 0 0.5 0 0.5 -1 0.75 1 -0 -0 1 0 2 0 2 1 -0.75 -1 -0 -1 0 2 4 2 4 -1 -0.75 1 -0 -1 0 0 2 0 2 -1 -0.75 -1 -0 -1 0 0 4 0 4 1 -0.75 1 -0 -1 0 2 2 2 2 -1 -0.75 1 -0 -1 0 0 2 0 2 1 0.75 -1 -0 1 0 2 4 2 4 -1 0.75 1 -0 1 0 0 2 0 2 -1 0.75 -1 -0 1 0 0 4 0 4 1 0.75 1 -0 1 0 2 2 2 2 -1 0.75 1 -0 1 0 0 2 0 2 -1 -0.75 -1 -0 -0 -1 0 0.5 0 0.5 1 -0.75 -1 -0 -0 -1 2 0.5 2 0.5 1 0.75 -1 -0 -0 -1 2 2 2 2 1 0.75 -1 -0 -0 -1 2 2 2 2 -1 0.75 -1 -0 -0 -1 0 2 0 2 1 -0.75 1 1 -0 0 2 0.5 2 0.5 1 0.75 -1 1 -0 0 4 2 4 2 1 0.75 1 1 -0 0 2 2 2 2 1 -0.75 -1 1 -0 0 4 0.5 4 0.5 1 0.75 -1 1 -0 0 4 2 4 2 0 2 1 0 0 3 4 0 5 6 7 0 5 9 8 0 10 11 12 0 10 13 14 0 15 17 16 0 15 19 18 0 20 22 21 0 20 24 23 0 25 26 27 0 25 28 29 0 ================================================ FILE: data/paths/test.path ================================================ PATHv2 node -2 1 -2 node 0 1 -2.5 node 2 1 -2 node 2.5 1 0 node 2 1 2 node 0 1 2.5 node -2 1 2 node -2.5 1 0 edge 0 1 edge 1 2 edge 2 3 edge 3 4 edge 4 5 edge 5 6 edge 6 7 edge 7 0 ================================================ FILE: data/quests.quest ================================================ # Tramway SDK Kitchensink Quest File # Generated by: Kitchensink Editor v0.0.9 # Generated on: 2024.12.23. 7:46:06 QUESTv1 quest pancake variable pancake-count value int 0 variable pancakes-enough greater-equal pancake pancake-count int 15 variable pancakes-not-enough not pancake pancakes-enough variable quest-get objective pancake-start pancake-gather known variable quest-mid objective pancake-middle pancake-gathered unknown variable quest-end objective pancake-end pancake-finished unknown trigger pancake-pickup pancake pancakes-not-enough increment pancake-count trigger pancake-pickup pancake pancakes-enough set-objective quest-get 2 trigger pancake-pickup pancake pancakes-enough set-objective quest-mid 1 ================================================ FILE: data/sprites/font_debug.spr ================================================ SPRv2 ui/font_debug 0 0 8 16 8 8 0 0 16 0 8 16 8 8 0 0 32 0 8 16 8 8 0 0 48 0 8 16 8 8 0 0 64 0 8 16 8 8 0 0 80 0 8 16 8 8 0 0 96 0 8 16 8 8 0 0 112 0 8 16 8 8 0 0 128 0 8 16 8 8 0 0 144 0 8 16 8 8 0 0 160 0 8 16 8 8 0 0 176 0 8 16 8 8 0 0 192 0 8 16 8 8 0 0 208 0 8 16 8 8 0 0 224 0 8 16 8 8 0 0 240 0 8 16 8 8 0 0 0 16 8 16 8 8 0 0 16 16 8 16 8 8 0 0 32 16 8 16 8 8 0 0 48 16 8 16 8 8 0 0 64 16 8 16 8 8 0 0 80 16 8 16 8 8 0 0 96 16 8 16 8 8 0 0 112 16 8 16 8 8 0 0 128 16 8 16 8 8 0 0 144 16 8 16 8 8 0 0 160 16 8 16 8 8 0 0 176 16 8 16 8 8 0 0 192 16 8 16 8 8 0 0 208 16 8 16 8 8 0 0 224 16 8 16 8 8 0 0 240 16 8 16 8 8 0 0 0 32 8 16 8 8 0 0 16 32 8 16 8 8 0 0 32 32 8 16 8 8 0 0 48 32 8 16 8 8 0 0 64 32 8 16 8 8 0 0 80 32 8 16 8 8 0 0 96 32 8 16 8 8 0 0 112 32 8 16 8 8 0 0 128 32 8 16 8 8 0 0 144 32 8 16 8 8 0 0 160 32 8 16 8 8 0 0 176 32 8 16 8 8 0 0 192 32 8 16 8 8 0 0 208 32 8 16 8 8 0 0 224 32 8 16 8 8 0 0 240 32 8 16 8 8 0 0 0 48 8 16 8 8 0 0 16 48 8 16 8 8 0 0 32 48 8 16 8 8 0 0 48 48 8 16 8 8 0 0 64 48 8 16 8 8 0 0 80 48 8 16 8 8 0 0 96 48 8 16 8 8 0 0 112 48 8 16 8 8 0 0 128 48 8 16 8 8 0 0 144 48 8 16 8 8 0 0 160 48 8 16 8 8 0 0 176 48 8 16 8 8 0 0 192 48 8 16 8 8 0 0 208 48 8 16 8 8 0 0 224 48 8 16 8 8 0 0 240 48 8 16 8 8 0 0 0 64 8 16 8 8 0 0 16 64 8 16 8 8 0 0 32 64 8 16 8 8 0 0 48 64 8 16 8 8 0 0 64 64 8 16 8 8 0 0 80 64 8 16 8 8 0 0 96 64 8 16 8 8 0 0 112 64 8 16 8 8 0 0 128 64 8 16 8 8 0 0 144 64 8 16 8 8 0 0 160 64 8 16 8 8 0 0 176 64 8 16 8 8 0 0 192 64 8 16 8 8 0 0 208 64 8 16 8 8 0 0 224 64 8 16 8 8 0 0 240 64 8 16 8 8 0 0 0 80 8 16 8 8 0 0 16 80 8 16 8 8 0 0 32 80 8 16 8 8 0 0 48 80 8 16 8 8 0 0 64 80 8 16 8 8 0 0 80 80 8 16 8 8 0 0 96 80 8 16 8 8 0 0 112 80 8 16 8 8 0 0 128 80 8 16 8 8 0 0 144 80 8 16 8 8 0 0 160 80 8 16 8 8 0 0 176 80 8 16 8 8 0 0 192 80 8 16 8 8 0 0 208 80 8 16 8 8 0 0 224 80 8 16 8 8 0 0 240 80 8 16 8 8 0 0 0 96 8 16 8 8 0 0 16 96 8 16 8 8 0 0 32 96 8 16 8 8 0 0 48 96 8 16 8 8 0 0 64 96 8 16 8 8 0 0 80 96 8 16 8 8 0 0 96 96 8 16 8 8 0 0 112 96 8 16 8 8 0 0 128 96 8 16 8 8 0 0 144 96 8 16 8 8 0 0 160 96 8 16 8 8 0 0 176 96 8 16 8 8 0 0 192 96 8 16 8 8 0 0 208 96 8 16 8 8 0 0 224 96 8 16 8 8 0 0 240 96 8 16 8 8 0 0 0 112 8 16 8 8 0 0 16 112 8 16 8 8 0 0 32 112 8 16 8 8 0 0 48 112 8 16 8 8 0 0 64 112 8 16 8 8 0 0 80 112 8 16 8 8 0 0 96 112 8 16 8 8 0 0 112 112 8 16 8 8 0 0 128 112 8 16 8 8 0 0 144 112 8 16 8 8 0 0 160 112 8 16 8 8 0 0 176 112 8 16 8 8 0 0 192 112 8 16 8 8 0 0 208 112 8 16 8 8 0 0 224 112 8 16 8 8 0 0 240 112 8 16 8 8 0 0 0 128 8 16 8 8 0 0 16 128 8 16 8 8 0 0 32 128 8 16 8 8 0 0 48 128 8 16 8 8 0 0 64 128 8 16 8 8 0 0 80 128 8 16 8 8 0 0 96 128 8 16 8 8 0 0 112 128 8 16 8 8 0 0 128 128 8 16 8 8 0 0 144 128 8 16 8 8 0 0 160 128 8 16 8 8 0 0 176 128 8 16 8 8 0 0 192 128 8 16 8 8 0 0 208 128 8 16 8 8 0 0 224 128 8 16 8 8 0 0 240 128 8 16 8 8 0 0 0 144 8 16 8 8 0 0 16 144 8 16 8 8 0 0 32 144 8 16 8 8 0 0 48 144 8 16 8 8 0 0 64 144 8 16 8 8 0 0 80 144 8 16 8 8 0 0 96 144 8 16 8 8 0 0 112 144 8 16 8 8 0 0 128 144 8 16 8 8 0 0 144 144 8 16 8 8 0 0 160 144 8 16 8 8 0 0 176 144 8 16 8 8 0 0 192 144 8 16 8 8 0 0 208 144 8 16 8 8 0 0 224 144 8 16 8 8 0 0 240 144 8 16 8 8 0 0 0 160 8 16 8 8 0 0 16 160 8 16 8 8 0 0 32 160 8 16 8 8 0 0 48 160 8 16 8 8 0 0 64 160 8 16 8 8 0 0 80 160 8 16 8 8 0 0 96 160 8 16 8 8 0 0 112 160 8 16 8 8 0 0 128 160 8 16 8 8 0 0 144 160 8 16 8 8 0 0 160 160 8 16 8 8 0 0 176 160 8 16 8 8 0 0 192 160 8 16 8 8 0 0 208 160 8 16 8 8 0 0 224 160 8 16 8 8 0 0 240 160 8 16 8 8 0 0 0 176 8 16 8 8 0 0 16 176 8 16 8 8 0 0 32 176 8 16 8 8 0 0 48 176 8 16 8 8 0 0 64 176 8 16 8 8 0 0 80 176 8 16 8 8 0 0 96 176 8 16 8 8 0 0 112 176 8 16 8 8 0 0 128 176 8 16 8 8 0 0 144 176 8 16 8 8 0 0 160 176 8 16 8 8 0 0 176 176 8 16 8 8 0 0 192 176 8 16 8 8 0 0 208 176 8 16 8 8 0 0 224 176 8 16 8 8 0 0 240 176 8 16 8 8 0 0 0 192 8 16 8 8 0 0 16 192 8 16 8 8 0 0 32 192 8 16 8 8 0 0 48 192 8 16 8 8 0 0 64 192 8 16 8 8 0 0 80 192 8 16 8 8 0 0 96 192 8 16 8 8 0 0 112 192 8 16 8 8 0 0 128 192 8 16 8 8 0 0 144 192 8 16 8 8 0 0 160 192 8 16 8 8 0 0 176 192 8 16 8 8 0 0 192 192 8 16 8 8 0 0 208 192 8 16 8 8 0 0 224 192 8 16 8 8 0 0 240 192 8 16 8 8 0 0 0 208 8 16 8 8 0 0 16 208 8 16 8 8 0 0 32 208 8 16 8 8 0 0 48 208 8 16 8 8 0 0 64 208 8 16 8 8 0 0 80 208 8 16 8 8 0 0 96 208 8 16 8 8 0 0 112 208 8 16 8 8 0 0 128 208 8 16 8 8 0 0 144 208 8 16 8 8 0 0 160 208 8 16 8 8 0 0 176 208 8 16 8 8 0 0 192 208 8 16 8 8 0 0 208 208 8 16 8 8 0 0 224 208 8 16 8 8 0 0 240 208 8 16 8 8 0 0 0 224 8 16 8 8 0 0 16 224 8 16 8 8 0 0 32 224 8 16 8 8 0 0 48 224 8 16 8 8 0 0 64 224 8 16 8 8 0 0 80 224 8 16 8 8 0 0 96 224 8 16 8 8 0 0 112 224 8 16 8 8 0 0 128 224 8 16 8 8 0 0 144 224 8 16 8 8 0 0 160 224 8 16 8 8 0 0 176 224 8 16 8 8 0 0 192 224 8 16 8 8 0 0 208 224 8 16 8 8 0 0 224 224 8 16 8 8 0 0 240 224 8 16 8 8 0 0 0 240 8 16 8 8 0 0 16 240 8 16 8 8 0 0 32 240 8 16 8 8 0 0 48 240 8 16 8 8 0 0 64 240 8 16 8 8 0 0 80 240 8 16 8 8 0 0 96 240 8 16 8 8 0 0 112 240 8 16 8 8 0 0 128 240 8 16 8 8 0 0 144 240 8 16 8 8 0 0 160 240 8 16 8 8 0 0 176 240 8 16 8 8 0 0 192 240 8 16 8 8 0 0 208 240 8 16 8 8 0 0 224 240 8 16 8 8 0 0 240 240 8 16 8 8 0 0 ================================================ FILE: data/sprites/font_headers.spr ================================================ SPRv2 ui/font_headers 0 0 40 40 20 20 0 0 40 0 40 40 20 20 0 0 80 0 40 40 20 20 0 0 120 0 40 40 20 20 0 0 160 0 40 40 20 20 0 0 200 0 40 40 20 20 0 0 0 40 40 40 20 20 0 0 40 40 40 40 20 20 0 0 80 40 40 40 20 20 0 0 120 40 40 40 20 20 0 0 160 40 40 40 20 20 0 0 200 40 40 40 20 20 0 0 0 80 40 40 20 20 0 0 40 80 40 40 20 20 0 0 80 80 40 40 20 20 0 0 120 80 40 40 20 20 0 0 160 80 40 40 20 20 0 0 200 80 40 40 20 20 0 0 0 120 40 40 20 20 0 0 40 120 40 40 20 20 0 0 80 120 40 40 20 20 0 0 120 120 40 40 20 20 0 0 160 120 40 40 20 20 0 0 200 120 40 40 20 20 0 0 ================================================ FILE: data/sprites/font_pixelart.spr ================================================ SPRv2 ui/font_pixelart 0 0 16 16 8 8 0 0 16 0 16 16 8 8 0 0 32 0 16 16 8 8 0 0 48 0 16 16 8 8 0 0 64 0 16 16 8 8 0 0 80 0 16 16 8 8 0 0 96 0 16 16 8 8 0 0 112 0 16 16 8 8 0 0 128 0 16 16 8 8 0 0 144 0 16 16 8 8 0 0 160 0 16 16 8 8 0 0 176 0 16 16 8 8 0 0 192 0 16 16 8 8 0 0 208 0 16 16 8 8 0 0 224 0 16 16 8 8 0 0 240 0 16 16 8 8 0 0 0 16 16 16 8 8 0 0 16 16 16 16 8 8 0 0 32 16 16 16 8 8 0 0 48 16 16 16 8 8 0 0 64 16 16 16 8 8 0 0 80 16 16 16 8 8 0 0 96 16 16 16 8 8 0 0 112 16 16 16 8 8 0 0 128 16 16 16 8 8 0 0 144 16 16 16 8 8 0 0 160 16 16 16 8 8 0 0 176 16 16 16 8 8 0 0 192 16 16 16 8 8 0 0 208 16 16 16 8 8 0 0 224 16 16 16 8 8 0 0 240 16 16 16 8 8 0 0 0 32 16 16 8 8 0 0 16 32 16 16 8 8 0 0 32 32 16 16 8 8 0 0 48 32 16 16 8 8 0 0 64 32 16 16 8 8 0 0 80 32 16 16 8 8 0 0 96 32 16 16 8 8 0 0 112 32 16 16 8 8 0 0 128 32 16 16 8 8 0 0 144 32 16 16 8 8 0 0 160 32 16 16 8 8 0 0 176 32 16 16 8 8 0 0 192 32 16 16 8 8 0 0 208 32 16 16 8 8 0 0 224 32 16 16 8 8 0 0 240 32 16 16 8 8 0 0 0 48 16 16 8 8 0 0 16 48 16 16 8 8 0 0 32 48 16 16 8 8 0 0 48 48 16 16 8 8 0 0 64 48 16 16 8 8 0 0 80 48 16 16 8 8 0 0 96 48 16 16 8 8 0 0 112 48 16 16 8 8 0 0 128 48 16 16 8 8 0 0 144 48 16 16 8 8 0 0 160 48 16 16 8 8 0 0 176 48 16 16 8 8 0 0 192 48 16 16 8 8 0 0 208 48 16 16 8 8 0 0 224 48 16 16 8 8 0 0 240 48 16 16 8 8 0 0 0 64 16 16 8 8 0 0 16 64 16 16 8 8 0 0 32 64 16 16 8 8 0 0 48 64 16 16 8 8 0 0 64 64 16 16 8 8 0 0 80 64 16 16 8 8 0 0 96 64 16 16 8 8 0 0 112 64 16 16 8 8 0 0 128 64 16 16 8 8 0 0 144 64 16 16 8 8 0 0 160 64 16 16 8 8 0 0 176 64 16 16 8 8 0 0 192 64 16 16 8 8 0 0 208 64 16 16 8 8 0 0 224 64 16 16 8 8 0 0 240 64 16 16 8 8 0 0 0 80 16 16 8 8 0 0 16 80 16 16 8 8 0 0 32 80 16 16 8 8 0 0 48 80 16 16 8 8 0 0 64 80 16 16 8 8 0 0 80 80 16 16 8 8 0 0 96 80 16 16 8 8 0 0 112 80 16 16 8 8 0 0 128 80 16 16 8 8 0 0 144 80 16 16 8 8 0 0 160 80 16 16 8 8 0 0 176 80 16 16 8 8 0 0 192 80 16 16 8 8 0 0 208 80 16 16 8 8 0 0 224 80 16 16 8 8 0 0 240 80 16 16 8 8 0 0 0 96 16 16 8 8 0 0 16 96 16 16 8 8 0 0 32 96 16 16 8 8 0 0 48 96 16 16 8 8 0 0 64 96 16 16 8 8 0 0 80 96 16 16 8 8 0 0 96 96 16 16 8 8 0 0 112 96 16 16 8 8 0 0 128 96 16 16 8 8 0 0 144 96 16 16 8 8 0 0 160 96 16 16 8 8 0 0 176 96 16 16 8 8 0 0 192 96 16 16 8 8 0 0 208 96 16 16 8 8 0 0 224 96 16 16 8 8 0 0 240 96 16 16 8 8 0 0 0 112 16 16 8 8 0 0 16 112 16 16 8 8 0 0 32 112 16 16 8 8 0 0 48 112 16 16 8 8 0 0 64 112 16 16 8 8 0 0 80 112 16 16 8 8 0 0 96 112 16 16 8 8 0 0 112 112 16 16 8 8 0 0 128 112 16 16 8 8 0 0 144 112 16 16 8 8 0 0 160 112 16 16 8 8 0 0 176 112 16 16 8 8 0 0 192 112 16 16 8 8 0 0 208 112 16 16 8 8 0 0 224 112 16 16 8 8 0 0 240 112 16 16 8 8 0 0 0 128 16 16 8 8 0 0 16 128 16 16 8 8 0 0 32 128 16 16 8 8 0 0 48 128 16 16 8 8 0 0 64 128 16 16 8 8 0 0 80 128 16 16 8 8 0 0 96 128 16 16 8 8 0 0 112 128 16 16 8 8 0 0 128 128 16 16 8 8 0 0 144 128 16 16 8 8 0 0 160 128 16 16 8 8 0 0 176 128 16 16 8 8 0 0 192 128 16 16 8 8 0 0 208 128 16 16 8 8 0 0 224 128 16 16 8 8 0 0 240 128 16 16 8 8 0 0 0 144 16 16 8 8 0 0 16 144 16 16 8 8 0 0 32 144 16 16 8 8 0 0 48 144 16 16 8 8 0 0 64 144 16 16 8 8 0 0 80 144 16 16 8 8 0 0 96 144 16 16 8 8 0 0 112 144 16 16 8 8 0 0 128 144 16 16 8 8 0 0 144 144 16 16 8 8 0 0 160 144 16 16 8 8 0 0 176 144 16 16 8 8 0 0 192 144 16 16 8 8 0 0 208 144 16 16 8 8 0 0 224 144 16 16 8 8 0 0 240 144 16 16 8 8 0 0 0 160 16 16 8 8 0 0 16 160 16 16 8 8 0 0 32 160 16 16 8 8 0 0 48 160 16 16 8 8 0 0 64 160 16 16 8 8 0 0 80 160 16 16 8 8 0 0 96 160 16 16 8 8 0 0 112 160 16 16 8 8 0 0 128 160 16 16 8 8 0 0 144 160 16 16 8 8 0 0 160 160 16 16 8 8 0 0 176 160 16 16 8 8 0 0 192 160 16 16 8 8 0 0 208 160 16 16 8 8 0 0 224 160 16 16 8 8 0 0 240 160 16 16 8 8 0 0 0 176 16 16 8 8 0 0 16 176 16 16 8 8 0 0 32 176 16 16 8 8 0 0 48 176 16 16 8 8 0 0 64 176 16 16 8 8 0 0 80 176 16 16 8 8 0 0 96 176 16 16 8 8 0 0 112 176 16 16 8 8 0 0 128 176 16 16 8 8 0 0 144 176 16 16 8 8 0 0 160 176 16 16 8 8 0 0 176 176 16 16 8 8 0 0 192 176 16 16 8 8 0 0 208 176 16 16 8 8 0 0 224 176 16 16 8 8 0 0 240 176 16 16 8 8 0 0 0 192 16 16 8 8 0 0 16 192 16 16 8 8 0 0 32 192 16 16 8 8 0 0 48 192 16 16 8 8 0 0 64 192 16 16 8 8 0 0 80 192 16 16 8 8 0 0 96 192 16 16 8 8 0 0 112 192 16 16 8 8 0 0 128 192 16 16 8 8 0 0 144 192 16 16 8 8 0 0 160 192 16 16 8 8 0 0 176 192 16 16 8 8 0 0 192 192 16 16 8 8 0 0 208 192 16 16 8 8 0 0 224 192 16 16 8 8 0 0 240 192 16 16 8 8 0 0 0 208 16 16 8 8 0 0 16 208 16 16 8 8 0 0 32 208 16 16 8 8 0 0 48 208 16 16 8 8 0 0 64 208 16 16 8 8 0 0 80 208 16 16 8 8 0 0 96 208 16 16 8 8 0 0 112 208 16 16 8 8 0 0 128 208 16 16 8 8 0 0 144 208 16 16 8 8 0 0 160 208 16 16 8 8 0 0 176 208 16 16 8 8 0 0 192 208 16 16 8 8 0 0 208 208 16 16 8 8 0 0 224 208 16 16 8 8 0 0 240 208 16 16 8 8 0 0 0 224 16 16 8 8 0 0 16 224 16 16 8 8 0 0 32 224 16 16 8 8 0 0 48 224 16 16 8 8 0 0 64 224 16 16 8 8 0 0 80 224 16 16 8 8 0 0 96 224 16 16 8 8 0 0 112 224 16 16 8 8 0 0 128 224 16 16 8 8 0 0 144 224 16 16 8 8 0 0 160 224 16 16 8 8 0 0 176 224 16 16 8 8 0 0 192 224 16 16 8 8 0 0 208 224 16 16 8 8 0 0 224 224 16 16 8 8 0 0 240 224 16 16 8 8 0 0 0 240 16 16 8 8 0 0 16 240 16 16 8 8 0 0 32 240 16 16 8 8 0 0 48 240 16 16 8 8 0 0 64 240 16 16 8 8 0 0 80 240 16 16 8 8 0 0 96 240 16 16 8 8 0 0 112 240 16 16 8 8 0 0 128 240 16 16 8 8 0 0 144 240 16 16 8 8 0 0 160 240 16 16 8 8 0 0 176 240 16 16 8 8 0 0 192 240 16 16 8 8 0 0 208 240 16 16 8 8 0 0 224 240 16 16 8 8 0 0 240 240 16 16 8 8 0 0 ================================================ FILE: data/sprites/font_symbols.spr ================================================ SPRv2 ui/font_symbols 0 0 16 16 8 8 0 0 0 16 16 16 8 8 0 0 0 32 16 16 8 8 0 0 0 48 16 16 8 8 0 0 16 0 16 16 8 8 0 0 16 16 16 16 8 8 0 0 16 32 16 16 8 8 0 0 16 48 16 16 8 8 0 0 32 0 16 16 8 8 0 0 32 16 16 16 8 8 0 0 32 32 16 16 8 8 0 0 32 48 16 16 8 8 0 0 48 0 16 16 8 8 0 0 48 16 16 16 8 8 0 0 48 32 16 16 8 8 0 0 48 48 16 16 8 8 0 0 64 0 16 16 8 8 0 0 64 16 16 16 8 8 0 0 64 32 16 16 8 8 0 0 64 48 16 16 8 8 0 0 80 0 16 16 8 8 0 0 80 16 16 16 8 8 0 0 80 32 16 16 8 8 0 0 80 48 16 16 8 8 0 0 96 0 16 16 8 8 0 0 96 16 16 16 8 8 0 0 96 32 16 16 8 8 0 0 96 48 16 16 8 8 0 0 112 0 16 16 8 8 0 0 112 16 16 16 8 8 0 0 112 32 16 16 8 8 0 0 112 48 16 16 8 8 0 0 128 0 16 16 8 8 0 0 128 16 16 16 8 8 0 0 128 32 16 16 8 8 0 0 128 48 16 16 8 8 0 0 144 0 16 16 8 8 0 0 144 16 16 16 8 8 0 0 144 32 16 16 8 8 0 0 144 48 16 16 8 8 0 0 0 64 20 20 10 10 0 0 0 84 20 20 10 10 0 0 0 104 20 20 10 10 0 0 0 124 20 20 10 10 0 0 20 64 20 20 10 10 0 0 20 84 20 20 10 10 0 0 20 104 20 20 10 10 0 0 20 124 20 20 10 10 0 0 40 64 20 20 10 10 0 0 40 84 20 20 10 10 0 0 40 104 20 20 10 10 0 0 40 124 20 20 10 10 0 0 60 64 20 20 10 10 0 0 60 84 20 20 10 10 0 0 60 104 20 20 10 10 0 0 60 124 20 20 10 10 0 0 80 64 20 20 10 10 0 0 80 84 20 20 10 10 0 0 80 104 20 20 10 10 0 0 80 124 20 20 10 10 0 0 100 64 20 20 10 10 0 0 100 84 20 20 10 10 0 0 100 104 20 20 10 10 0 0 100 124 20 20 10 10 0 0 120 64 20 20 10 10 0 0 120 84 20 20 10 10 0 0 120 104 20 20 10 10 0 0 120 124 20 20 10 10 0 0 140 64 20 20 10 10 0 0 140 84 20 20 10 10 0 0 140 104 20 20 10 10 0 0 140 124 20 20 10 10 0 0 160 64 20 20 10 10 0 0 160 84 20 20 10 10 0 0 160 104 20 20 10 10 0 0 160 124 20 20 10 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60 84 5 5 2 2 0 0 75 84 5 5 2 2 0 0 60 99 5 5 2 2 0 0 75 99 5 5 2 2 0 0 65 84 10 5 5 2 0 0 75 89 5 10 2 5 0 0 60 89 5 10 2 5 0 0 65 99 10 5 5 2 0 0 65 89 10 10 5 5 0 0 240 50 16 12 8 6 0 0 240 0 16 4 8 2 0 0 240 44 16 4 8 2 0 0 240 16 16 4 8 2 0 0 ================================================ FILE: data/sprites/font_text.spr ================================================ SPRv2 ui/font_text 0 0 10 16 8 8 0 0 16 0 10 16 8 8 0 0 32 0 10 16 8 8 0 0 48 0 10 16 8 8 0 0 64 0 10 16 8 8 0 0 80 0 10 16 8 8 0 0 96 0 10 16 8 8 0 0 112 0 10 16 8 8 0 0 128 0 10 16 8 8 0 0 144 0 10 16 8 8 0 0 160 0 10 16 8 8 0 0 176 0 10 16 8 8 0 0 192 0 10 16 8 8 0 0 208 0 10 16 8 8 0 0 224 0 10 16 8 8 0 0 240 0 10 16 8 8 0 0 0 16 10 16 8 8 0 0 16 16 10 16 8 8 0 0 32 16 10 16 8 8 0 0 48 16 10 16 8 8 0 0 64 16 10 16 8 8 0 0 80 16 10 16 8 8 0 0 96 16 10 16 8 8 0 0 112 16 10 16 8 8 0 0 128 16 10 16 8 8 0 0 144 16 10 16 8 8 0 0 160 16 10 16 8 8 0 0 176 16 10 16 8 8 0 0 192 16 10 16 8 8 0 0 208 16 10 16 8 8 0 0 224 16 10 16 8 8 0 0 240 16 10 16 8 8 0 0 0 32 4 16 8 8 0 0 16 32 3 16 8 8 0 0 32 32 5 16 8 8 0 0 48 32 7 16 8 8 0 0 64 32 7 16 8 8 0 0 80 32 12 16 8 8 0 0 96 32 9 16 8 8 0 0 112 32 2 16 8 8 0 0 128 32 4 16 8 8 0 0 144 32 4 16 8 8 0 0 160 32 5 16 8 8 0 0 176 32 8 16 8 8 0 0 192 32 4 16 8 8 0 0 208 32 4 16 8 8 0 0 224 32 4 16 8 8 0 0 240 32 4 16 8 8 0 0 0 48 7 16 8 8 0 0 16 48 7 16 8 8 0 0 32 48 7 16 8 8 0 0 48 48 7 16 8 8 0 0 64 48 7 16 8 8 0 0 80 48 7 16 8 8 0 0 96 48 7 16 8 8 0 0 112 48 7 16 8 8 0 0 128 48 7 16 8 8 0 0 144 48 7 16 8 8 0 0 160 48 4 16 8 8 0 0 176 48 4 16 8 8 0 0 192 48 8 16 8 8 0 0 208 48 8 16 8 8 0 0 224 48 8 16 8 8 0 0 240 48 7 16 8 8 0 0 0 64 13 16 8 8 0 0 16 64 9 16 8 8 0 0 32 64 9 16 8 8 0 0 48 64 9 16 8 8 0 0 64 64 9 16 8 8 0 0 80 64 9 16 8 8 0 0 96 64 8 16 8 8 0 0 112 64 10 16 8 8 0 0 128 64 9 16 8 8 0 0 144 64 3 16 8 8 0 0 160 64 6 16 8 8 0 0 176 64 9 16 8 8 0 0 192 64 7 16 8 8 0 0 208 64 11 16 8 8 0 0 224 64 9 16 8 8 0 0 240 64 10 16 8 8 0 0 0 80 9 16 8 8 0 0 16 80 10 16 8 8 0 0 32 80 9 16 8 8 0 0 48 80 9 16 8 8 0 0 64 80 7 16 8 8 0 0 80 80 9 16 8 8 0 0 96 80 9 16 8 8 0 0 112 80 13 16 8 8 0 0 128 80 7 16 8 8 0 0 144 80 9 16 8 8 0 0 160 80 7 16 8 8 0 0 176 80 4 16 8 8 0 0 192 80 4 16 8 8 0 0 208 80 4 16 8 8 0 0 224 80 5 16 8 8 0 0 240 80 7 16 8 8 0 0 0 96 4 16 8 8 0 0 16 96 7 16 8 8 0 0 32 96 7 16 8 8 0 0 48 96 7 16 8 8 0 0 64 96 7 16 8 8 0 0 80 96 7 16 8 8 0 0 96 96 3 16 8 8 0 0 112 96 7 16 8 8 0 0 128 96 7 16 8 8 0 0 144 96 3 16 8 8 0 0 160 96 3 16 8 8 0 0 176 96 7 16 8 8 0 0 192 96 3 16 8 8 0 0 208 96 11 16 8 8 0 0 224 96 7 16 8 8 0 0 240 96 7 16 8 8 0 0 0 112 7 16 8 8 0 0 16 112 7 16 8 8 0 0 32 112 4 16 8 8 0 0 48 112 7 16 8 8 0 0 64 112 4 16 8 8 0 0 80 112 7 16 8 8 0 0 96 112 5 16 8 8 0 0 112 112 9 16 8 8 0 0 128 112 7 16 8 8 0 0 144 112 7 16 8 8 0 0 160 112 7 16 8 8 0 0 176 112 4 16 8 8 0 0 192 112 3 16 8 8 0 0 208 112 4 16 8 8 0 0 224 112 8 16 8 8 0 0 240 112 10 16 8 8 0 0 0 128 7 16 8 8 0 0 16 128 10 16 8 8 0 0 32 128 3 16 8 8 0 0 48 128 10 16 8 8 0 0 64 128 4 16 8 8 0 0 80 128 13 16 8 8 0 0 96 128 7 16 8 8 0 0 112 128 7 16 8 8 0 0 128 128 10 16 8 8 0 0 144 128 14 16 8 8 0 0 160 128 10 16 8 8 0 0 176 128 4 16 8 8 0 0 192 128 10 16 8 8 0 0 208 128 4 16 8 8 0 0 224 128 4 16 8 8 0 0 240 128 4 16 8 8 0 0 0 144 10 16 8 8 0 0 16 144 3 16 8 8 0 0 32 144 3 16 8 8 0 0 48 144 4 16 8 8 0 0 64 144 4 16 8 8 0 0 80 144 5 16 8 8 0 0 96 144 7 16 8 8 0 0 112 144 13 16 8 8 0 0 128 144 10 16 8 8 0 0 144 144 13 16 8 8 0 0 160 144 10 16 8 8 0 0 176 144 4 16 8 8 0 0 192 144 10 16 8 8 0 0 208 144 7 16 8 8 0 0 224 144 4 16 8 8 0 0 240 144 10 16 8 8 0 0 0 160 4 16 8 8 0 0 16 160 10 16 8 8 0 0 32 160 7 16 8 8 0 0 48 160 7 16 8 8 0 0 64 160 7 16 8 8 0 0 80 160 10 16 8 8 0 0 96 160 3 16 8 8 0 0 112 160 7 16 8 8 0 0 128 160 10 16 8 8 0 0 144 160 10 16 8 8 0 0 160 160 9 16 8 8 0 0 176 160 7 16 8 8 0 0 192 160 8 16 8 8 0 0 208 160 4 16 8 8 0 0 224 160 10 16 8 8 0 0 240 160 13 16 8 8 0 0 0 176 5 16 8 8 0 0 16 176 7 16 8 8 0 0 32 176 4 16 8 8 0 0 48 176 4 16 8 8 0 0 64 176 4 16 8 8 0 0 80 176 7 16 8 8 0 0 96 176 7 16 8 8 0 0 112 176 4 16 8 8 0 0 128 176 7 16 8 8 0 0 144 176 4 16 8 8 0 0 160 176 4 16 8 8 0 0 176 176 7 16 8 8 0 0 192 176 11 16 8 8 0 0 208 176 11 16 8 8 0 0 224 176 11 16 8 8 0 0 240 176 12 16 8 8 0 0 0 192 9 16 8 8 0 0 16 192 3 16 8 8 0 0 32 192 9 16 8 8 0 0 48 192 9 16 8 8 0 0 64 192 9 16 8 8 0 0 80 192 9 16 8 8 0 0 96 192 9 16 8 8 0 0 112 192 9 16 8 8 0 0 128 192 9 16 8 8 0 0 144 192 9 16 8 8 0 0 160 192 7 16 8 8 0 0 176 192 9 16 8 8 0 0 192 192 10 16 8 8 0 0 208 192 9 16 8 8 0 0 224 192 3 16 8 8 0 0 240 192 7 16 8 8 0 0 0 208 9 16 8 8 0 0 16 208 9 16 8 8 0 0 32 208 9 16 8 8 0 0 48 208 10 16 8 8 0 0 64 208 10 16 8 8 0 0 80 208 10 16 8 8 0 0 96 208 10 16 8 8 0 0 112 208 8 16 8 8 0 0 128 208 9 16 8 8 0 0 144 208 7 16 8 8 0 0 160 208 9 16 8 8 0 0 176 208 9 16 8 8 0 0 192 208 9 16 8 8 0 0 208 208 7 16 8 8 0 0 224 208 7 16 8 8 0 0 240 208 9 16 8 8 0 0 0 224 7 16 8 8 0 0 16 224 3 16 8 8 0 0 32 224 7 16 8 8 0 0 48 224 7 16 8 8 0 0 64 224 7 16 8 8 0 0 80 224 7 16 8 8 0 0 96 224 7 16 8 8 0 0 112 224 7 16 8 8 0 0 128 224 7 16 8 8 0 0 144 224 7 16 8 8 0 0 160 224 7 16 8 8 0 0 176 224 7 16 8 8 0 0 192 224 7 16 8 8 0 0 208 224 7 16 8 8 0 0 224 224 3 16 8 8 0 0 240 224 3 16 8 8 0 0 0 240 7 16 8 8 0 0 16 240 7 16 8 8 0 0 32 240 7 16 8 8 0 0 48 240 7 16 8 8 0 0 64 240 7 16 8 8 0 0 80 240 7 16 8 8 0 0 96 240 7 16 8 8 0 0 112 240 7 16 8 8 0 0 128 240 7 16 8 8 0 0 144 240 3 16 8 8 0 0 160 240 7 16 8 8 0 0 176 240 7 16 8 8 0 0 192 240 7 16 8 8 0 0 208 240 7 16 8 8 0 0 224 240 7 16 8 8 0 0 240 240 4 16 8 8 0 0 ================================================ FILE: data/sprites/font_text_bold.spr ================================================ SPRv2 ui/font_text_bold 0 0 10 16 8 8 0 0 16 0 10 16 8 8 0 0 32 0 10 16 8 8 0 0 48 0 10 16 8 8 0 0 64 0 10 16 8 8 0 0 80 0 10 16 8 8 0 0 96 0 10 16 8 8 0 0 112 0 10 16 8 8 0 0 128 0 10 16 8 8 0 0 144 0 10 16 8 8 0 0 160 0 10 16 8 8 0 0 176 0 10 16 8 8 0 0 192 0 10 16 8 8 0 0 208 0 10 16 8 8 0 0 224 0 10 16 8 8 0 0 240 0 10 16 8 8 0 0 0 16 10 16 8 8 0 0 16 16 10 16 8 8 0 0 32 16 10 16 8 8 0 0 48 16 10 16 8 8 0 0 64 16 10 16 8 8 0 0 80 16 10 16 8 8 0 0 96 16 10 16 8 8 0 0 112 16 10 16 8 8 0 0 128 16 10 16 8 8 0 0 144 16 10 16 8 8 0 0 160 16 10 16 8 8 0 0 176 16 10 16 8 8 0 0 192 16 10 16 8 8 0 0 208 16 10 16 8 8 0 0 224 16 10 16 8 8 0 0 240 16 10 16 8 8 0 0 0 32 4 16 8 8 0 0 16 32 4 16 8 8 0 0 32 32 6 16 8 8 0 0 48 32 7 16 8 8 0 0 64 32 7 16 8 8 0 0 80 32 10 16 8 8 0 0 96 32 9 16 8 8 0 0 112 32 3 16 8 8 0 0 128 32 4 16 8 8 0 0 144 32 4 16 8 8 0 0 160 32 5 16 8 8 0 0 176 32 8 16 8 8 0 0 192 32 4 16 8 8 0 0 208 32 4 16 8 8 0 0 224 32 4 16 8 8 0 0 240 32 4 16 8 8 0 0 0 48 7 16 8 8 0 0 16 48 7 16 8 8 0 0 32 48 7 16 8 8 0 0 48 48 7 16 8 8 0 0 64 48 7 16 8 8 0 0 80 48 7 16 8 8 0 0 96 48 7 16 8 8 0 0 112 48 7 16 8 8 0 0 128 48 7 16 8 8 0 0 144 48 7 16 8 8 0 0 160 48 4 16 8 8 0 0 176 48 4 16 8 8 0 0 192 48 8 16 8 8 0 0 208 48 8 16 8 8 0 0 224 48 8 16 8 8 0 0 240 48 8 16 8 8 0 0 0 64 13 16 8 8 0 0 16 64 9 16 8 8 0 0 32 64 9 16 8 8 0 0 48 64 9 16 8 8 0 0 64 64 9 16 8 8 0 0 80 64 8 16 8 8 0 0 96 64 8 16 8 8 0 0 112 64 10 16 8 8 0 0 128 64 9 16 8 8 0 0 144 64 4 16 8 8 0 0 160 64 7 16 8 8 0 0 176 64 9 16 8 8 0 0 192 64 8 16 8 8 0 0 208 64 11 16 8 8 0 0 224 64 9 16 8 8 0 0 240 64 10 16 8 8 0 0 0 80 9 16 8 8 0 0 16 80 10 16 8 8 0 0 32 80 9 16 8 8 0 0 48 80 9 16 8 8 0 0 64 80 8 16 8 8 0 0 80 80 9 16 8 8 0 0 96 80 9 16 8 8 0 0 112 80 13 16 8 8 0 0 128 80 9 16 8 8 0 0 144 80 8 16 8 8 0 0 160 80 7 16 8 8 0 0 176 80 4 16 8 8 0 0 192 80 4 16 8 8 0 0 208 80 4 16 8 8 0 0 224 80 8 16 8 8 0 0 240 80 7 16 8 8 0 0 0 96 4 16 8 8 0 0 16 96 8 16 8 8 0 0 32 96 8 16 8 8 0 0 48 96 7 16 8 8 0 0 64 96 8 16 8 8 0 0 80 96 8 16 8 8 0 0 96 96 4 16 8 8 0 0 112 96 8 16 8 8 0 0 128 96 8 16 8 8 0 0 144 96 4 16 8 8 0 0 160 96 4 16 8 8 0 0 176 96 7 16 8 8 0 0 192 96 4 16 8 8 0 0 208 96 12 16 8 8 0 0 224 96 8 16 8 8 0 0 240 96 8 16 8 8 0 0 0 112 8 16 8 8 0 0 16 112 8 16 8 8 0 0 32 112 5 16 8 8 0 0 48 112 6 16 8 8 0 0 64 112 4 16 8 8 0 0 80 112 8 16 8 8 0 0 96 112 7 16 8 8 0 0 112 112 11 16 8 8 0 0 128 112 8 16 8 8 0 0 144 112 7 16 8 8 0 0 160 112 7 16 8 8 0 0 176 112 5 16 8 8 0 0 192 112 3 16 8 8 0 0 208 112 5 16 8 8 0 0 224 112 8 16 8 8 0 0 240 112 10 16 8 8 0 0 0 128 7 16 8 8 0 0 16 128 10 16 8 8 0 0 32 128 4 16 8 8 0 0 48 128 10 16 8 8 0 0 64 128 7 16 8 8 0 0 80 128 13 16 8 8 0 0 96 128 7 16 8 8 0 0 112 128 7 16 8 8 0 0 128 128 10 16 8 8 0 0 144 128 12 16 8 8 0 0 160 128 10 16 8 8 0 0 176 128 4 16 8 8 0 0 192 128 10 16 8 8 0 0 208 128 4 16 8 8 0 0 224 128 4 16 8 8 0 0 240 128 4 16 8 8 0 0 0 144 10 16 8 8 0 0 16 144 4 16 8 8 0 0 32 144 4 16 8 8 0 0 48 144 7 16 8 8 0 0 64 144 7 16 8 8 0 0 80 144 5 16 8 8 0 0 96 144 7 16 8 8 0 0 112 144 13 16 8 8 0 0 128 144 10 16 8 8 0 0 144 144 13 16 8 8 0 0 160 144 10 16 8 8 0 0 176 144 4 16 8 8 0 0 192 144 10 16 8 8 0 0 208 144 7 16 8 8 0 0 224 144 4 16 8 8 0 0 240 144 10 16 8 8 0 0 0 160 4 16 8 8 0 0 16 160 10 16 8 8 0 0 32 160 7 16 8 8 0 0 48 160 7 16 8 8 0 0 64 160 7 16 8 8 0 0 80 160 10 16 8 8 0 0 96 160 3 16 8 8 0 0 112 160 7 16 8 8 0 0 128 160 10 16 8 8 0 0 144 160 10 16 8 8 0 0 160 160 9 16 8 8 0 0 176 160 7 16 8 8 0 0 192 160 8 16 8 8 0 0 208 160 4 16 8 8 0 0 224 160 10 16 8 8 0 0 240 160 13 16 8 8 0 0 0 176 5 16 8 8 0 0 16 176 7 16 8 8 0 0 32 176 4 16 8 8 0 0 48 176 4 16 8 8 0 0 64 176 4 16 8 8 0 0 80 176 7 16 8 8 0 0 96 176 7 16 8 8 0 0 112 176 4 16 8 8 0 0 128 176 8 16 8 8 0 0 144 176 4 16 8 8 0 0 160 176 5 16 8 8 0 0 176 176 7 16 8 8 0 0 192 176 11 16 8 8 0 0 208 176 11 16 8 8 0 0 224 176 11 16 8 8 0 0 240 176 12 16 8 8 0 0 0 192 9 16 8 8 0 0 16 192 4 16 8 8 0 0 32 192 9 16 8 8 0 0 48 192 9 16 8 8 0 0 64 192 9 16 8 8 0 0 80 192 9 16 8 8 0 0 96 192 8 16 8 8 0 0 112 192 8 16 8 8 0 0 128 192 9 16 8 8 0 0 144 192 8 16 8 8 0 0 160 192 7 16 8 8 0 0 176 192 8 16 8 8 0 0 192 192 10 16 8 8 0 0 208 192 9 16 8 8 0 0 224 192 4 16 8 8 0 0 240 192 8 16 8 8 0 0 0 208 9 16 8 8 0 0 16 208 9 16 8 8 0 0 32 208 9 16 8 8 0 0 48 208 10 16 8 8 0 0 64 208 10 16 8 8 0 0 80 208 10 16 8 8 0 0 96 208 10 16 8 8 0 0 112 208 8 16 8 8 0 0 128 208 9 16 8 8 0 0 144 208 8 16 8 8 0 0 160 208 9 16 8 8 0 0 176 208 9 16 8 8 0 0 192 208 9 16 8 8 0 0 208 208 7 16 8 8 0 0 224 208 7 16 8 8 0 0 240 208 8 16 8 8 0 0 0 224 8 16 8 8 0 0 16 224 4 16 8 8 0 0 32 224 8 16 8 8 0 0 48 224 7 16 8 8 0 0 64 224 8 16 8 8 0 0 80 224 8 16 8 8 0 0 96 224 8 16 8 8 0 0 112 224 8 16 8 8 0 0 128 224 7 16 8 8 0 0 144 224 8 16 8 8 0 0 160 224 7 16 8 8 0 0 176 224 8 16 8 8 0 0 192 224 8 16 8 8 0 0 208 224 7 16 8 8 0 0 224 224 4 16 8 8 0 0 240 224 4 16 8 8 0 0 0 240 6 16 8 8 0 0 16 240 8 16 8 8 0 0 32 240 8 16 8 8 0 0 48 240 8 16 8 8 0 0 64 240 8 16 8 8 0 0 80 240 8 16 8 8 0 0 96 240 8 16 8 8 0 0 112 240 7 16 8 8 0 0 128 240 8 16 8 8 0 0 144 240 4 16 8 8 0 0 160 240 6 16 8 8 0 0 176 240 8 16 8 8 0 0 192 240 8 16 8 8 0 0 208 240 7 16 8 8 0 0 224 240 7 16 8 8 0 0 240 240 4 16 8 8 0 0 ================================================ FILE: data/sprites/font_widgets.spr ================================================ SPRv2 ui/font_widgets # 0. button normal 0 0 4 4 2 2 0 0 6 0 4 4 2 2 0 0 12 0 4 4 2 2 0 0 0 6 4 4 2 2 0 0 6 6 4 4 2 2 0 0 12 6 4 4 2 2 0 0 0 12 4 4 2 2 0 0 6 12 4 4 2 2 0 0 12 12 4 4 2 2 0 0 # 9. button pressed 16 0 4 4 2 2 0 0 22 0 4 4 2 2 0 0 28 0 4 4 2 2 0 0 16 6 4 4 2 2 0 0 22 6 4 4 2 2 0 0 28 6 4 4 2 2 0 0 16 12 4 4 2 2 0 0 22 12 4 4 2 2 0 0 28 12 4 4 2 2 0 0 # 18. button selected enabled 32 0 4 4 2 2 0 0 38 0 4 4 2 2 0 0 44 0 4 4 2 2 0 0 32 6 4 4 2 2 0 0 38 6 4 4 2 2 0 0 44 6 4 4 2 2 0 0 32 12 4 4 2 2 0 0 38 12 4 4 2 2 0 0 44 12 4 4 2 2 0 0 # 27. button selected disabled 48 0 4 4 2 2 0 0 54 0 4 4 2 2 0 0 60 0 4 4 2 2 0 0 48 6 4 4 2 2 0 0 54 6 4 4 2 2 0 0 60 6 4 4 2 2 0 0 48 12 4 4 2 2 0 0 54 12 4 4 2 2 0 0 60 12 4 4 2 2 0 0 # 36. button disabled 64 0 4 4 2 2 0 0 70 0 4 4 2 2 0 0 76 0 4 4 2 2 0 0 64 6 4 4 2 2 0 0 70 6 4 4 2 2 0 0 76 6 4 4 2 2 0 0 64 12 4 4 2 2 0 0 70 12 4 4 2 2 0 0 76 12 4 4 2 2 0 0 # 45. button pressed disabled 80 0 4 4 2 2 0 0 86 0 4 4 2 2 0 0 92 0 4 4 2 2 0 0 80 6 4 4 2 2 0 0 86 6 4 4 2 2 0 0 92 6 4 4 2 2 0 0 80 12 4 4 2 2 0 0 86 12 4 4 2 2 0 0 92 12 4 4 2 2 0 0 # 54. window 0 0 4 4 2 2 0 0 6 0 4 4 2 2 0 0 12 0 4 4 2 2 0 0 0 6 4 4 2 2 0 0 6 6 4 4 2 2 0 0 12 6 4 4 2 2 0 0 0 12 4 4 2 2 0 0 6 12 4 4 2 2 0 0 12 12 4 4 2 2 0 0 # 63. reverse window 16 0 4 4 2 2 0 0 22 0 4 4 2 2 0 0 28 0 4 4 2 2 0 0 16 6 4 4 2 2 0 0 22 6 4 4 2 2 0 0 28 6 4 4 2 2 0 0 16 12 4 4 2 2 0 0 22 12 4 4 2 2 0 0 28 12 4 4 2 2 0 0 # 72. combo-box 0 32 4 4 2 2 0 0 6 32 4 4 2 2 0 0 12 32 4 4 2 2 0 0 0 38 4 4 2 2 0 0 6 38 4 4 2 2 0 0 12 38 4 4 2 2 0 0 0 44 4 4 2 2 0 0 6 44 4 4 2 2 0 0 12 44 4 4 2 2 0 0 # 81. combo-box pressed 16 32 4 4 2 2 0 0 22 32 4 4 2 2 0 0 28 32 4 4 2 2 0 0 16 38 4 4 2 2 0 0 22 38 4 4 2 2 0 0 28 38 4 4 2 2 0 0 16 44 4 4 2 2 0 0 22 44 4 4 2 2 0 0 28 44 4 4 2 2 0 0 # 90. combo-box selected 32 32 4 4 2 2 0 0 38 32 4 4 2 2 0 0 44 32 4 4 2 2 0 0 32 38 4 4 2 2 0 0 38 38 4 4 2 2 0 0 44 38 4 4 2 2 0 0 32 44 4 4 2 2 0 0 38 44 4 4 2 2 0 0 44 44 4 4 2 2 0 0 # 99. text box 0 16 4 4 2 2 0 0 6 16 4 4 2 2 0 0 12 16 4 4 2 2 0 0 0 22 4 4 2 2 0 0 6 22 4 4 2 2 0 0 12 22 4 4 2 2 0 0 0 28 4 4 2 2 0 0 6 28 4 4 2 2 0 0 12 28 4 4 2 2 0 0 # 108. text-box disabled 16 16 4 4 2 2 0 0 22 16 4 4 2 2 0 0 28 16 4 4 2 2 0 0 16 22 4 4 2 2 0 0 22 22 4 4 2 2 0 0 28 22 4 4 2 2 0 0 16 28 4 4 2 2 0 0 22 28 4 4 2 2 0 0 28 28 4 4 2 2 0 0 # 117. border 32 16 4 4 2 2 0 0 38 16 4 4 2 2 0 0 44 16 4 4 2 2 0 0 32 22 4 4 2 2 0 0 38 22 4 4 2 2 0 0 44 22 4 4 2 2 0 0 32 28 4 4 2 2 0 0 38 28 4 4 2 2 0 0 44 28 4 4 2 2 0 0 # 126. scrollbar track vertical 48 16 2 2 1 1 0 0 54 16 2 2 2 2 0 0 62 16 2 2 2 2 0 0 # 129. scrollbar track horizontal 62 32 2 2 1 1 0 0 62 36 2 2 2 2 0 0 62 46 2 2 2 2 0 0 # 132. divider vertical 48 16 2 2 1 1 0 0 54 16 2 2 2 2 0 0 62 16 2 2 2 2 0 0 # 135. divider horizontal 62 32 2 2 1 1 0 0 62 36 2 2 2 2 0 0 62 46 2 2 2 2 0 0 # 138. slider track vertical 48 16 2 2 1 1 0 0 54 16 2 2 2 2 0 0 62 16 2 2 2 2 0 0 # 141. slider track horizontal 62 32 2 2 1 1 0 0 62 36 2 2 2 2 0 0 62 46 2 2 2 2 0 0 # 144. scroll bar vertical 48 16 2 2 1 1 0 0 54 16 2 2 2 2 0 0 62 16 2 2 2 2 0 0 # 147. scroll bar horizontal 62 32 2 2 1 1 0 0 62 36 2 2 2 2 0 0 62 46 2 2 2 2 0 0 # 150. tab 3 0 0 4 4 2 2 0 0 6 0 4 4 2 2 0 0 12 0 4 4 2 2 0 0 # 153. progress bar 3 32 32 8 16 4 8 0 0 36 32 8 16 4 8 0 0 40 32 8 16 4 8 0 0 # 156. radio button 0 160 16 16 8 8 0 0 0 176 16 16 8 8 0 0 0 192 16 16 8 8 0 0 0 208 16 16 8 8 0 0 0 224 16 16 8 8 0 0 0 240 16 16 8 8 0 0 # 162. check button 16 160 16 16 8 8 0 0 16 176 16 16 8 8 0 0 16 192 16 16 8 8 0 0 16 208 16 16 8 8 0 0 16 224 16 16 8 8 0 0 16 240 16 16 8 8 0 0 # 168. slider horizontal 32 160 16 16 8 8 0 0 32 176 16 16 8 8 0 0 32 192 16 16 8 8 0 0 32 208 16 16 8 8 0 0 32 224 16 16 8 8 0 0 32 240 16 16 8 8 0 0 # 174. slider vertical 48 160 16 16 8 8 0 0 48 176 16 16 8 8 0 0 48 192 16 16 8 8 0 0 48 208 16 16 8 8 0 0 48 224 16 16 8 8 0 0 48 240 16 16 8 8 0 0 # 180. button up 64 160 16 16 8 8 0 0 64 176 16 16 8 8 0 0 64 192 16 16 8 8 0 0 64 208 16 16 8 8 0 0 64 224 16 16 8 8 0 0 64 240 16 16 8 8 0 0 # 186. button down 80 160 16 16 8 8 0 0 80 176 16 16 8 8 0 0 80 192 16 16 8 8 0 0 80 208 16 16 8 8 0 0 80 224 16 16 8 8 0 0 80 240 16 16 8 8 0 0 # 192. button left 96 160 16 16 8 8 0 0 96 176 16 16 8 8 0 0 96 192 16 16 8 8 0 0 96 208 16 16 8 8 0 0 96 224 16 16 8 8 0 0 96 240 16 16 8 8 0 0 # 198. button right 112 160 16 16 8 8 0 0 112 176 16 16 8 8 0 0 112 192 16 16 8 8 0 0 112 208 16 16 8 8 0 0 112 224 16 16 8 8 0 0 112 240 16 16 8 8 0 0 # 204. button exit 112 160 16 16 8 8 0 0 112 176 16 16 8 8 0 0 112 192 16 16 8 8 0 0 112 208 16 16 8 8 0 0 112 224 16 16 8 8 0 0 112 240 16 16 8 8 0 0 # 210. button button help 128 160 16 16 8 8 0 0 128 176 16 16 8 8 0 0 128 192 16 16 8 8 0 0 128 208 16 16 8 8 0 0 128 224 16 16 8 8 0 0 128 240 16 16 8 8 0 0 # 216. button 2 window 144 160 16 16 8 8 0 0 144 176 16 16 8 8 0 0 144 192 16 16 8 8 0 0 144 208 16 16 8 8 0 0 144 224 16 16 8 8 0 0 144 240 16 16 8 8 0 0 # 222. button 1 window 160 160 16 16 8 8 0 0 160 176 16 16 8 8 0 0 160 192 16 16 8 8 0 0 160 208 16 16 8 8 0 0 160 224 16 16 8 8 0 0 160 240 16 16 8 8 0 0 0 0 256 256 128 128 0 0 ================================================ FILE: data/sprites/poland.spr ================================================ SPRv2 poland 0 0 40 40 20 20 0 0 40 0 40 40 20 20 0 0 80 0 40 40 20 20 0 0 120 0 40 40 20 20 0 0 160 0 40 40 20 20 0 0 200 0 40 40 20 20 0 0 0 40 40 40 20 20 0 0 40 40 40 40 20 20 0 0 80 40 40 40 20 20 0 0 120 40 40 40 20 20 0 0 160 40 40 40 20 20 0 0 200 40 40 40 20 20 0 0 0 80 40 40 20 20 0 0 40 80 40 40 20 20 0 0 80 80 40 40 20 20 0 0 120 80 40 40 20 20 0 0 160 80 40 40 20 20 0 0 200 80 40 40 20 20 0 0 0 120 40 40 20 20 0 0 40 120 40 40 20 20 0 0 80 120 40 40 20 20 0 0 120 120 40 40 20 20 0 0 160 120 40 40 20 20 0 0 200 120 40 40 20 20 0 0 ================================================ FILE: data/worldcells/demo_mov.cell ================================================ CELLv3 cell 0 0 #staticwobj 0 worldspawn 0 0.000000 0.000000 0.000000 0.0 0.0 0.0 worldspawn fullbright #staticwobj 0 platforma 0 0.000000 0.000000 0.000000 0.0 0.0 0.0 platforma fullbright staticwobj 0 paliktnis 0 0.000000 0.000000 0.000000 -3.141593 0.058408 -3.141593 movs lightmap/movs trigger 0 trigeris 0 0.000000 0.000000 0.000000 -3.141593 0.058408 -3.141593 0 16 trigger #staticwobj 0 ftft 0 0.000000 0.000000 0.000000 -3.141593 0.058408 -3.141593 ftft fullbright #staticwobj 0 apliktnis 0 0.000000 0.000000 3.000000 -3.141593 0.058408 -3.141593 tepik fullbright #crate 0 muca 0 -1.400000 0.600000 3.800000 0.000000 0.785398 0.000000 crate_ligma crate #crate 0 none 0 -1.400000 0.600000 3.800000 0.000000 0.0 0.000000 crate_ligma crate #crate 0 none 0 -2.400000 0.600000 3.800000 0.000000 0.0 0.000000 crate_ligma crate #crate 0 none 0 -3.400000 0.600000 3.800000 0.000000 0.0 0.000000 crate_ligma crate #crate 0 muca 0 -4.000000 0.600000 6.800000 0.000000 0.785398 0.000000 crate_ligma crate #crate 0 none 0 -1.400000 2.600000 2.800000 0.000000 0.785398 0.000000 metalakaste crate #crate 0 nukta 0 -1.400000 2.600000 2.800000 0.000000 0.785398 0.000000 devukaste crate #crate 0 fukta 0 3.00000 7.000000 -3.000000 0.000000 0.00 0.000000 devukaste crate light 200 none 0 2.0 1.0 7.0 0.0 0.0 0.0 5.0 5.0 0.0 15.0 0.0 0.0 -1.0 16.0 light 201 none 0 0.0 4.0 -3.0 0.0 0.0 0.0 0.0 5.0 5.0 15.0 0.0 -1.0 1.0 16.0 sound 0 derp 0 0.0 1.0 0.0 0.0 0.0 0.0 1 derp 1.0 decoration 114 mongus 0 0.0 1.0 0.0 0.0 0.0 0.0 0 mongus mongus-run #signal 114 use derp 0.0 -1 toggle none signal 114 use mongus 0.0 -1 set-animation name mongus-jump button 111 podzins 0 0.0 1.0 -1.0 0.0 0.0 0.0 7 dev/button fullbright 0.0 1.25 -1.0 0.0 0.0 -1.0 1.0 0.0 3.14 none tosnins button 112 tosnins 0 0.0 0.0 0.0 0.0 0.76 0.0 14 dev/button fullbright -1.5 1.25 -1.5 0.0 0.0 1.0 1.0 0.1 5.0 none none #crate 0 estijs 0 0.800000 1.000000 2.000000 0.000000 0.000000 0.000000 kadbusest crate transition transition1 demo_mov 8 45.000000 -45.000000 45.000000 -45.000000 -45.000000 45.000000 45.000000 -45.000000 -45.000000 -45.000000 -45.000000 -45.000000 45.000000 45.000000 45.000000 -45.000000 45.000000 45.000000 45.000000 45.000000 -45.000000 -45.000000 45.000000 -45.000000 signal 111 progress tosnins 0.0 -1 set-progress none decoration 151 plane 0 0.0 4.0 0.0 -1.0 0.0 0.0 0 dev/plane none decoration 154 plane 0 0.0 1.0 2.0 0.0 0.0 0.0 0 translucent none ================================================ FILE: data/worldcells/demo_mov.light ================================================ LIGHTGRAPHv1 node 2.3955717 1.065382 3.061773 1 1 node 2.2798061 0.62470955 -1.6681721 1 1 node -1.6146706 0.7124737 -2.6664987 1 1 node -0.27091822 0.8291742 -3.2012365 1 1 node -2.7671623 0.5653449 -0.6331367 1 1 node -1.7670134 0.74795645 1.2415003 1 1 node -3.315507 0.84328896 2.1502764 1 1 node 0.26147276 0.8183051 2.9366233 1 1 node 0.26147276 0.8183051 2.9366233 1 1 node 2.340122 1.0259709 5.4186387 1 1 node 0.109327964 0.66605645 6.845958 1 1 node 0.0997588 0.6727086 4.855362 1 1 node -3.368404 0.675698 5.3235793 1 1 edge 0 1 edge 1 2 edge 2 3 edge 2 4 edge 4 5 edge 5 6 edge 5 7 edge 7 0 edge 1 3 edge 7 8 edge 8 1 edge 1 5 edge 1 4 edge 0 9 edge 9 10 edge 10 11 edge 11 12 edge 12 10 edge 11 9 edge 8 4 edge 0 5 edge 8 6 edge 4 3 light 0 0 r 0.23796882 -0.0030810356 0.24494854 -0.13280812 0.0015340593 -0.0031588406 0.093340226 -0.09410236 0.012750563 light 0 0 g 0.37189424 0.050191045 0.106509395 -0.18751778 -0.01964145 -0.056737468 0.14302485 -0.05628046 0.018053468 light 0 0 b 0.1339254 0.053272076 -0.1384391 -0.054709498 -0.021175507 -0.05357863 0.049684726 0.037821967 0.005302912 light 1 0 r 0 0 0 0 0 0 0 0 0 light 1 0 g 0.4142197 0.34469196 -0.16269274 -0.28856713 -0.24165417 -0.13269365 -0.0069550127 0.057388984 0.042715754 light 1 0 b 0.4142197 0.34469196 -0.16269274 -0.28856713 -0.24165417 -0.13269365 -0.0069550127 0.057388984 0.042715754 light 2 0 r 0 0 0 0 0 0 0 0 0 light 2 0 g 0.47709438 0.44259784 -0.04024769 0.26636875 0.242967 -0.030677281 -0.020613363 -0.01508262 0.0079994025 light 2 0 b 0.47709438 0.44259784 -0.04024769 0.26636875 0.242967 -0.030677281 -0.020613363 -0.01508262 0.0079994025 light 3 0 r 0 0 0 0 0 0 0 0 0 light 3 0 g 0 0 0 0 0 0 0 0 0 light 3 0 b 0 0 0 0 0 0 0 0 0 light 4 0 r 0 0 0 0 0 0 0 0 0 light 4 0 g 0 0 0 0 0 0 0 0 0 light 4 0 b 0 0 0 0 0 0 0 0 0 light 5 0 r 0 0 0 0 0 0 0 0 0 light 5 0 g 0.33242264 0.19500972 -0.31995404 0.13329415 0.07795984 -0.18712842 0.09794585 -0.07748457 0.015930604 light 5 0 b 0.33242264 0.19500972 -0.31995404 0.13329415 0.07795984 -0.18712842 0.09794585 -0.07748457 0.015930604 light 6 0 r 0 0 0 0 0 0 0 0 0 light 6 0 g 0.27642378 0.1241428 -0.2548184 0.16403806 0.07213969 -0.11193633 0.068452634 -0.09899621 0.028449327 light 6 0 b 0.27642378 0.1241428 -0.2548184 0.16403806 0.07213969 -0.11193633 0.068452634 -0.09899621 0.028449327 light 7 0 r 0 0 0 0 0 0 0 0 0 light 7 0 g 0.28255603 0.13122158 -0.3080221 -0.013567101 -0.006078719 -0.14026311 0.12406041 0.009654146 -0.002788415 light 7 0 b 0.28255603 0.13122158 -0.3080221 -0.013567101 -0.006078719 -0.14026311 0.12406041 0.009654146 -0.002788415 light 8 0 r 0 0 0 0 0 0 0 0 0 light 8 0 g 0.28255603 0.13122158 -0.3080221 -0.013567101 -0.006078719 -0.14026311 0.12406041 0.009654146 -0.002788415 light 8 0 b 0.28255603 0.13122158 -0.3080221 -0.013567101 -0.006078719 -0.14026311 0.12406041 0.009654146 -0.002788415 light 9 0 r 0.32085544 -0.0027707259 0.22283371 -0.29381675 0.0023008017 -0.002086538 0.01144819 -0.13744909 0.08325424 light 9 0 g 0.41900486 0.02730713 0.11571191 -0.32359472 -0.0064734747 -0.033785358 0.05484248 -0.115085006 0.084223814 light 9 0 b 0.098149285 0.030077863 -0.107122116 -0.029777901 -0.008774273 -0.03169882 0.043394268 0.022363972 0.0009695679 light 10 0 r 0.8293561 0.7472809 0.4743402 -0.2935533 -0.26382336 0.43217096 0.08109607 -0.07283246 -0.0251603 light 10 0 g 0.8293561 0.7472809 0.4743402 -0.2935533 -0.26382336 0.43217096 0.08109607 -0.07283246 -0.0251603 light 10 0 b 0 0 0 0 0 0 0 0 0 light 11 0 r 0.7448924 0.1010016 0.8811078 -0.03668104 -0.0043490226 0.11520066 0.44735473 -0.030268116 -0.051788848 light 11 0 g 0.7448924 0.1010016 0.8811078 -0.03668104 -0.0043490226 0.11520066 0.44735473 -0.030268116 -0.051788848 light 11 0 b 0 0 0 0 0 0 0 0 0 light 12 0 r 0.5336291 0.04311873 0.29677904 0.5314715 0.03990218 0.025203848 -0.036354 0.1953003 0.17024845 light 12 0 g 0.5336291 0.04311873 0.29677904 0.5314715 0.03990218 0.025203848 -0.036354 0.1953003 0.17024845 light 12 0 b 0 0 0 0 0 0 0 0 0 #entity 200 #entity 201 ================================================ FILE: devtools/codegen.py ================================================ import os.path import sys import re import time # This script is pretty jank, but it should be somewhat usable. def prepare_path(path): # check if this is being run from the /src/ directory or project root if not "/src" in path: path = path + "/src/" # strip file extension if path.endswith(".h") or path.endswith(".cpp"): path = path.removesuffix(".h") path = path.removesuffix(".cpp") if not path.endswith("/") and not path.endswith("\\"): path = path + '/' return path def find_project_root(path): path = path.replace("\\", "/") path = path.split("/src") return path[0] def make_file(name): path = prepare_path(os.getcwd()) + name.replace("-", "").lower() # check if file already generated is_h = os.path.isfile(path + ".h") is_cpp = os.path.isfile(path + ".cpp") if is_h: print("File", path + ".h", "already exists!") sys.exit() if is_cpp: print("File", path + ".cpp", "already exists!") sys.exit() accept = input("Create file " + path + ".h? [y/n]\n") if accept != "y": print("Cancelling...") sys.exit() register_name = name.lower() class_name = "" file_name = name.replace("-", "") if '-' in name: for str in name.split('-'): class_name = class_name + str.lower().capitalize() else: class_name = name header = f""" // Generated by Tramway SDK Code generator #include #include #include using namespace tram; class {class_name} : public Entity {{ public: {class_name}(const SharedEntityData&, const ValueArray&); TRAM_SDK_ENTITY_NAME("{register_name}") void UpdateParameters(); void SetParameters(); void Load(); void Unload(); void Serialize(); void EventHandler(Event& evt); void MessageHandler(Message& msg); name_t GetType(); static void Register(); }}; """ implementation = f""" // Generated by Tramway SDK Code generator #include "{file_name}.h" #include "{file_name}.inl" #include #include {class_name}::{class_name}(const SharedEntityData& shared_data, const ValueArray& field_array) : Entity(shared_data) {{ ENTITY_IMPLEMENTATION_INITIALIZE }} void {class_name}::Register() {{ ENTITY_IMPLEMENTATION_REGISTER }} name_t {class_name}::GetType() {{ ENTITY_IMPLEMENTATION_GET_TYPE }} void {class_name}::UpdateParameters() {{ if (!IsLoaded()) return; }} void {class_name}::SetParameters() {{ if (!IsLoaded()) return; UpdateParameters(); }} void {class_name}::Load() {{ SetFlag(LOADED, true); }} void {class_name}::Unload() {{ SetFlag(LOADED, false); }} void {class_name}::Serialize() {{ }} void {class_name}::EventHandler(Event& evt) {{ }} void {class_name}::MessageHandler(Message& msg) {{ }} """ open(path + ".h", "w").write(header) open(path + ".cpp", "w").write(implementation) print("Done!") #print(header) #print(implementation) def enumify(str): return "FIELD_" + str.replace("-", "_").upper().strip().replace("\"", "") def typeify(str): if str == "name_t": return "TYPE_NAME" if str == "bool": return "TYPE_BOOL" if str == "int": return "TYPE_INT32" if str == "float": return "TYPE_FLOAT32" if str == "double": return "TYPE_INT32" if str == "int8_t": return "TYPE_INT8" if str == "int16_t": return "TYPE_INT16" if str == "int32_t": return "TYPE_INT32" if str == "uint8_t": return "TYPE_UINT8" if str == "uint16_t": return "TYPE_UINT16" if str == "uint32_t": return "TYPE_UINT32" if str == "vec2": return "TYPE_VEC2" if str == "vec3": return "TYPE_VEC3" if str == "vec4": return "TYPE_VEC4" if str == "quat": return "TYPE_QUAT" print("Unrecognized type:", str) sys.exit() def enttipefy(str): if str == "name_t": return "string" if str == "bool": return "bool" if str == "int": return "int" if str == "float": return "float" if str == "double": return "float" if str == "int8_t": return "int" if str == "int16_t": return "int" if str == "int32_t": return "int" if str == "uint8_t": return "uint" if str == "uint16_t": return "uint" if str == "uint32_t": return "uint" if str == "vec2": return "vec2" if str == "vec3": return "vec3" if str == "vec4": return "vec4" if str == "quat": return "quat" print("Unrecognized type:", str) sys.exit() FLOAT_RE = re.compile(r""" ^[+-]?( (\d+\.\d*|\.\d+)([eE][+-]?\d+)? # 1.0, .1, 1., 1.0e-3 | \d+([eE][+-]?\d+)? # 1, 1e3 )(f|F)?$ """, re.VERBOSE) INT_RE = re.compile(r"^[+-]?\d+$") def normalize_float(x): x = x.rstrip("fF") if "." not in x: return x + ".0" if x.startswith("."): return "0" + x if x.endswith("."): return x + "0" return x def parse_vector(value, n: int, default): m = re.search(r"\{(.*)\}|\((.*)\)", value) if not m: return default inside = m.group(1) or m.group(2) parts = [p.strip() for p in inside.split(",")] if len(parts) != n: return default floats = [] for p in parts: if not FLOAT_RE.match(p): return default floats.append(normalize_float(p)) return " ".join(floats) def validate_default(value, type): if not value: value = "" v = value.strip() if type == "string": if len(v) >= 2 and v.startswith('"') and v.endswith('"'): return v return '"none"' if type == "bool": if v == "true": return "1" if v == "false": return "0" return "0" if type == "float": if FLOAT_RE.match(v): return normalize_float(v) return "0.0" if type in ("int", "uint"): if INT_RE.match(v): return v return "0" if type == "vec2": return parse_vector(v, 2, "1.0 0.0") if type == "vec3": return parse_vector(v, 3, "0.0 0.0 0.0") if type == "vec4": return parse_vector(v, 4, "0.0 0.0 0.0 0.0") if type == "quat": return parse_vector(v, 3, "0.0 0.0 0.0") return "" def refresh_file(name): path = prepare_path(os.getcwd()) + name.replace("-", "").lower() if not os.path.isfile(path + ".h"): print("File", path + ".h", "not found!") sys.exit() file = open(path + ".h", "r").read() property_list = [] property_enum = "" initializer = "" register = "" # use regex to find stuff name_list = re.findall("TRAM_SDK_ENTITY_NAME\((.*)\)", file) if len(name_list) < 1: print("Couldn't find TRAM_SDK_ENTITY_NAME macro!") sys.exit() class_list = re.findall("class\s+(.*)\s+:\s+public\s+Entity", file) if len(name_list) < 1: print("Couldn't find class name!") sys.exit() key_values = re.findall("TRAM_SDK_KEY_VALUE\((.*),(.*)\)", file) # parse properties #properties = re.findall("TRAM_SDK_PROPERTY\((.*),(.*)\)\s+(\S+)\s+(\S+)\s*(?:=\s*(.*?))?;", file) properties = re.findall("TRAM_SDK_PROPERTY\(([^,]+),([^)]+)\)\s+(\S+)\s+(\S+)\s*(?:=\s*([^;]*))?;", file) for property in properties: property_list.append({ "name": property[0], "type": property[2], "flags": property[1], "variable": property[3], "default": property[4] }) #properties = re.findall("TRAM_SDK_VIRTUAL_PROPERTY\((.*),(.*),(.*)(?:,(.*))?\)", file) properties = re.findall("TRAM_SDK_VIRTUAL_PROPERTY\(([^,]+),([^,]+),([^,\)]+)(?:,([^)]+))?\)", file) for property in properties: property_list.append({ "name": property[1], "type": property[0], "flags": property[2], "variable": None, "default": property[3] }) # generate property enum for property in property_list: if property_enum != "": property_enum += ",\n" property_enum += "\t" + enumify(property["name"]) if property_enum == "": property_enum = "FIELD_NONE" # generate initializer for property in property_list: if property["variable"] is None: continue if initializer != "": initializer += " \\\n" initializer += "\t" + property["variable"] + " = field_array[" + enumify(property["name"]) + "];" # generate register for property in property_list: if register != "": register += ", \\\n" register += "\t{" + enumify(property["name"]) + ", " + typeify(property["type"]) + ", " + property["flags"] + "}" generated = f""" // Generated by Tramway SDK Code generator // READ ONLY! Any and all changes will be overwritten! enum {{ {property_enum} }}; #define ENTITY_IMPLEMENTATION_INITIALIZE \\ {initializer} #define ENTITY_IMPLEMENTATION_REGISTER \\ Entity::RegisterType( \\ {name_list[0]}, \\ [](const SharedEntityData& a, const ValueArray& b) -> Entity* {{ return new {class_list[0]}(a, b); }}, \\ [](Entity* a) {{ delete a; }}, \\ {{ \\ {register} \\ }} \\ ); #define ENTITY_IMPLEMENTATION_GET_TYPE return {name_list[0]}; """ key_value_str = "" field_str = "" for key_value in key_values: key_value_str += "\t" + key_value[0].replace("\"", "") + " " + key_value[1].replace("\"", "") for property in property_list: field_str += "\tfield " + enttipefy(property["type"]) + " " + property["name"].replace("\"", "") + "\n" entity_name = name_list[0].replace("\"", "").strip() version_num = str(int(time.time()) - 1577836800) entity_definition = f""" begin name {entity_name} {key_value_str} {field_str} version {version_num} end """ open(path + ".inl", "w").write(generated) open(find_project_root(path) + f"/data/{entity_name}.{version_num}.entdef", "w").write(entity_definition) # print("Done!") def print_header(): print("Tramway SDK Code generator v0.1.1") def print_help(): print("This tool can generate C++ code for the Tramway SDK.") print("Commandline options:") print("\t--help\t\tPrints this message") print("\tmake [name]\tGenerates a .h and .cpp file for an entity type") print("\trefresh [file]\tRegenerates code and entity definition from header file") print("\t[file]\t\tSame as 'refresh' option") if len(sys.argv) > 1: command = sys.argv[1] parameter = sys.argv[2] if len(sys.argv) > 2 else None if command == "make": print_header() if parameter is None: print("To use this command, specify the name of the entity type that will be") print("generated. This name will be used as the name of the entity type, name of the") print("entity C++ class, and the name of the source code files.") print("") print("For example, if you use 'bucket' as the name of the entity type, the resulting") print("code will be generated in the /src/bucket.h and /src/bucket.cpp files, the name") print("of the C++ class will be named 'Bucket' and the name inserted into the") print("Register() method will be 'bucket'.") print("") print("Example: codegen.py make bucket") sys.exit() print("making! ", command, parameter) make_file(parameter) elif command == "refresh": print_header() refresh_file(parameter) elif command == "--help": print_header() print_help() else: print("Unrecognized command:", command) else: print_header() print_help() ================================================ FILE: devtools/converters/cbfg2sprite.py ================================================ import csv f = open("FontData.csv") reader = csv.reader(f) results = dict() for line in reader: results[line[0]] = line[1] f.close() def find(xyz): return results[xyz] f = open("Font.spr", "a") f.write("SPRv2 ui/font_text\n\n") for i in range(0, 256): x = (i % 16) * 16 y = int(int(i / 16) * 16) w = find("Char "+str(i)+" Base Width") h = 16 cx = 8 cy = 8 bh = 0 bv = 0 f.write(str(x) + "\t" + str(y) + "\t" + str(w) + "\t" + str(h) + "\t" + str(cx) + "\t" + str(cy) + "\t" + str(bh) + "\t" + str(bv) + "\n") f.close() ================================================ FILE: devtools/converters/errorgenerator.py ================================================ # copy-paste static model vertices here sp = """0.5110000371932983 -0.25 0.20000000298023224 0.0 0.0 1.0 0.9999083876609802 0.4583977460861206 0.9999083876609802 0.4583977460861206 0.4970000088214874 -0.16300000250339508 0.20000000298023224 0.0 0.0 0.999969482421875 0.8314536213874817 0.48567795753479004 0.8314536213874817 0.48567795753479004 0.42000001668930054 -0.16300000250339508 0.20000000298023224 0.0 0.0 1.0 0.8314536809921265 0.6364007592201233 0.8314536809921265 0.6364007592201233 0.10300000756978989 -0.021000001579523087 -0.20000000298023224 -0.999725341796875 0.02294991910457611 -0.0 0.25119414925575256 0.8507025241851807 0.25119414925575256 0.8507025241851807 0.0990000069141388 -0.1080000028014183 -0.20000000298023224 -0.9558702111244202 0.2937406599521637 -0.0 0.25119414925575256 0.7044740915298462 0.25119414925575256 0.7044740915298462 0.0990000069141388 -0.1080000028014183 0.20000000298023224 -0.9558702111244202 0.2937406599521637 -0.0 -0.08367683738470078 0.7044740915298462 -0.08367683738470078 0.7044740915298462""".split() it = 0 def fp (bippa): ooo = it * 10 veve = sp[ooo + bippa] return round(float(veve), 2) it = 0 while it < len(sp)/10: print("{{", fp(0), "f, ", fp(1), "f, ", fp(2), "f}, {", fp(3), "f, ", fp(4), "f, ", fp(5), "f}, {", fp(6), "f, ", fp(7), "f}, {", fp(8), "f, ", fp(9), "f}, 0},", sep="") it += 1 # copy-paste static model indices here se = """0 1 2 0 3 4 5 0 6 7 8 0 9 10 11 0 966 967 968 0 969 970 971 0""".split() it = 0 while it < len(se)/4: ooo = it * 4 print("{{", se[ooo + 0], ", ", se[ooo + 1], ", ", se[ooo + 2], "}},", sep="") it += 1 ================================================ FILE: devtools/exporters/tram_anim_export.py ================================================ import bpy bl_info = { "name": "Export Tram Animation", "description": "Exports .anim files for Tramway SDK", "author": "racenis", "blender": (2, 83, 0), "support": "COMMUNITY", "category": "Import-Export", } def write_tram_animation(context, filepath): for action in bpy.data.actions: full_path = filepath + action.name + ".anim" print("Saving animation to: ", full_path) os.makedirs(os.path.dirname(filepath), exist_ok=True) f = open(full_path, 'w', encoding='utf-8') f.write("ANIMv1\n") f.write(action.name + " " + str(len(action.groups)) + "\n") for group in action.groups: frames = len(group.channels[0].keyframe_points) f.write(group.name + " " + str(frames) + "\n") i = 0 while (i < frames): kframe = "" kframe += str(group.channels[0].keyframe_points[i].co[0]) + " " kframe += str(group.channels[0].keyframe_points[i].co[1]) + " " kframe += str(group.channels[2].keyframe_points[i].co[1]) + " " kframe += str(-group.channels[1].keyframe_points[i].co[1]) + " " #kframe += str(group.channels[3].keyframe_points[i].co[1]) + " " #kframe += str(group.channels[4].keyframe_points[i].co[1]) + " " #kframe += str(group.channels[5].keyframe_points[i].co[1]) + " " #kframe += str(group.channels[6].keyframe_points[i].co[1]) + " " kframe += str(group.channels[4].keyframe_points[i].co[1]) + " " kframe += str(group.channels[6].keyframe_points[i].co[1]) + " " kframe += str(-group.channels[5].keyframe_points[i].co[1]) + " " kframe += str(group.channels[3].keyframe_points[i].co[1]) + " " kframe += str(group.channels[7].keyframe_points[i].co[1]) + " " kframe += str(group.channels[9].keyframe_points[i].co[1]) + " " kframe += str(group.channels[8].keyframe_points[i].co[1]) + "\n" f.write(kframe) i += 1 f.close() from bpy_extras.io_utils import ExportHelper from bpy.props import StringProperty, BoolProperty, EnumProperty from bpy.types import Operator class ExportTramAnimation(bpy.types.Operator): bl_idname = "export_tram_animation.export_tram_anim" bl_label = "Export Tram Animation" bl_options = {'REGISTER'} directory: StringProperty( name="Outdir Path", description="Where I will save my stuff" ) filter_folder: BoolProperty( default=True, options={"HIDDEN"} ) def execute(self, context): write_tram_animation(context, self.directory) return {'FINISHED'} def invoke(self, context, event): context.window_manager.fileselect_add(self) return {'RUNNING_MODAL'} def menu_func_export(self, context): self.layout.operator(ExportTramAnimation.bl_idname, text="Tram Animation Exporter") def register(): bpy.utils.register_class(ExportTramAnimation) bpy.types.TOPBAR_MT_file_export.append(menu_func_export) def unregister(): bpy.utils.unregister_class(ExportTramAnimation) bpy.types.TOPBAR_MT_file_export.remove(menu_func_export) if __name__ == "__main__": register() ================================================ FILE: devtools/exporters/tram_collision_export.py ================================================ import bpy import os bl_info = { "name": "Export Tram Collision Model", "description": "Exports .collmdl files for Tramway SDK", "author": "racenis", "blender": (2, 83, 0), "support": "COMMUNITY", "category": "Import-Export", } # TODO: improve performance # - instead of accumulating a string, just directly write out to file # TODO: improve readability # - instead of vert.co[0] use vert.x, etc. def object_to_collision_mesh(c): out = "" exported_poly_count = 0 poly_str = "" for poly in c.data.polygons: for i in range(0, len(poly.loop_indices) - 2): exported_poly_count += 1 poly_str += str(c.data.vertices[poly.vertices[0]].co[0]) + " " poly_str += str(c.data.vertices[poly.vertices[0]].co[2]) + " " poly_str += str(-c.data.vertices[poly.vertices[0]].co[1]) + " " poly_str += str(c.data.vertices[poly.vertices[i+1]].co[0]) + " " poly_str += str(c.data.vertices[poly.vertices[i+1]].co[2]) + " " poly_str += str(-c.data.vertices[poly.vertices[i+1]].co[1]) + " " poly_str += str(c.data.vertices[poly.vertices[i+2]].co[0]) + " " poly_str += str(c.data.vertices[poly.vertices[i+2]].co[2]) + " " poly_str += str(-c.data.vertices[poly.vertices[i+2]].co[1]) + "\n" out += "mesh " + str(exported_poly_count) + "\n" + poly_str return out def write_tram_collision_model(context, ob, filepath): out = "" for c in ob.children: if ("Cube") in c.name: out += "box " + str(c.location[0]) + " " + str(c.location[2]) + " " + str(-c.location[1]) + " " out += str(c.rotation_euler[0]) + " " + str(c.rotation_euler[2]) + " " + str(-c.rotation_euler[1]) + " " out += str(c.scale[0]) + " " + str(c.scale[2]) + " " + str(c.scale[1]) + "\n" if ("Cylinder") in c.name: out += "cylinder " + str(c.location[0]) + " " + str(c.location[2]) + " " + str(-c.location[1]) + " " out += str(c.rotation_euler[0]) + " " + str(c.rotation_euler[2]) + " " + str(-c.rotation_euler[1]) + " " out += str(c.scale[0]) + " " + str(c.scale[2]) + " " + str(c.scale[1]) + "\n" if ("Capsule") in c.name: out += "capsule " + str(c.location[0]) + " " + str(c.location[2]) + " " + str(-c.location[1]) + " " out += str(c.rotation_euler[0]) + " " + str(c.rotation_euler[2]) + " " + str(-c.rotation_euler[1]) + " " out += str((c.scale[0] + c.scale[2]) / 2) + " " + str(c.scale[1]) + "\n" if ("Cone") in c.name: out += "cone " + str(c.location[0]) + " " + str(c.location[2]) + " " + str(-c.location[1]) + " " out += str(c.rotation_euler[0]) + " " + str(c.rotation_euler[2]) + " " + str(-c.rotation_euler[1]) + " " out += str((c.scale[0] + c.scale[2]) / 2) + " " + str(c.scale[1]) + "\n" if ("Sphere") in c.name: out += "sphere " + str(c.location[0]) + " " + str(c.location[2]) + " " + str(-c.location[1]) + " " out += str(c.rotation_euler[0]) + " " + str(c.rotation_euler[2]) + " " + str(-c.rotation_euler[1]) + " " out += str((c.scale[0] + c.scale[1] + c.scale[2]) / 3) + "\n" if ("Cloud") in c.name: out += "cloud " + str(len(c.data.vertices)) + "\n" for v in c.data.vertices: out += str(v.co[0]) + " " + str(v.co[2]) + " " + str(-v.co[1]) + "\n" if ("Mesh") in c.name: out += object_to_collision_mesh(c) if len(ob.children) == 0: out = object_to_collision_mesh(ob) os.makedirs(os.path.dirname(filepath), exist_ok=True) f = open(filepath, 'w', encoding='utf-8') f.write(out) f.close() # ExportHelper is a helper class, defines filename and # invoke() function which calls the file selector. from bpy_extras.io_utils import ExportHelper from bpy.props import StringProperty, BoolProperty, EnumProperty from bpy.types import Operator class ExportTramCollisionObj(Operator, ExportHelper): bl_idname = "export_tram_collision_obj.export_dynamic_tram" # important since its how bpy.ops.import_test.some_data is constructed bl_label = "Export Tram Collision Model" # ExportHelper mixin class uses this filename_ext = ".collmdl" filter_glob: StringProperty( default="*.collmdl", options={'HIDDEN'}, maxlen=255, # Max internal buffer length, longer would be clamped. ) # List of operator properties, the attributes will be assigned # to the class instance from the operator settings before calling. use_setting: BoolProperty( name="Example Boolean", description="Example Tooltip", default=True, ) type: EnumProperty( name="Example Enum", description="Choose between two items", items=( ('OPT_A', "First Option", "Description one"), ('OPT_B', "Second Option", "Description two"), ), default='OPT_A', ) def invoke(self, context, _event): object = bpy.context.object if object is None: self.report({'ERROR'}, "No object selected!") return {'CANCELLED'} if object.type != 'MESH': self.report({'ERROR'}, "Selected object is not a mesh!") return {'CANCELLED'} if not self.filepath or True: blend_filepath = context.blend_data.filepath if not blend_filepath: blend_filepath = object.name else: path_dir = os.path.dirname(blend_filepath) blend_filepath = os.path.join(path_dir, object.name) self.filepath = blend_filepath + self.filename_ext context.window_manager.fileselect_add(self) return {'RUNNING_MODAL'} def execute(self, context): write_tram_collision_model(context, bpy.context.active_object, self.filepath) return {'FINISHED'} # Only needed if you want to add into a dynamic menu def menu_func_export(self, context): self.layout.operator(ExportTramCollisionObj.bl_idname, text="Tram Collision Exporter") def register(): bpy.utils.register_class(ExportTramCollisionObj) bpy.types.TOPBAR_MT_file_export.append(menu_func_export) def unregister(): bpy.utils.unregister_class(ExportTramCollisionObj) bpy.types.TOPBAR_MT_file_export.remove(menu_func_export) if __name__ == "__main__": register() ================================================ FILE: devtools/exporters/tram_dynamic_obj_export.py ================================================ import bpy import os bl_info = { "name": "Export Tram Dynamic Model", "description": "Exports .dymdl files for Tramway SDK", "author": "racenis", "blender": (2, 83, 0), "support": "COMMUNITY", "category": "Import-Export", } def write_tram_dynamic_model(context, ob, filepath): exp = {'uv':[],'vert':[],'vnorm':[],'polys':[],'vweight':[],'bones':[]} #get uv coords for uv in ob.data.uv_layers['UVMap'].data: exp['uv'].append([uv.uv[0], uv.uv[1]]) #get info of the loop vertices for mloop in ob.data.loops: vert = ob.data.vertices[mloop.vertex_index] exp['vert'].append([vert.co[0], vert.co[2], -vert.co[1]]) exp['vnorm'].append([vert.normal[0], vert.normal[2], -vert.normal[1]]) weights = [] for w in vert.groups: weights.append([w.weight, w.group]) # if vertex has no weights, then just bind it to root if len(weights) < 1: weights.append([1.0, 0]) # if vertex has less than the minimum of 4 weights, then just # add some blank weights to the root while len(weights) < 4: weights.append([0.0, 0]) # if vertex has more than 4 weights, then find the weights # that are the most significant and discard the rest weights.sort(reverse=True) weights = weights[:4] # TODO: normalize weights? maybe? exp['vweight'].append(weights) # get all polygons for poly in ob.data.polygons: for i in range(0, len(poly.loop_indices) - 2): exp['polys'].append([poly.loop_indices[0], poly.loop_indices[i+1], poly.loop_indices[i+2], poly.material_index]) # collect bones if ob.parent is None: # if the object has no armature attached, then we will just # assume that it has a single bone boning = [] boning.append("Root") boning.append(0.0) boning.append(0.0) boning.append(0.0) boning.append(0.0) boning.append(1.0) boning.append(0.0) boning.append(0.0) boning.append(-1) exp['bones'].append(boning) else: # otherwise, just add the armature bones for bone in ob.parent.data.bones: boning = [] boning.append(bone.name) boning.append(bone.head_local[0]) boning.append(bone.head_local[2]) boning.append(-bone.head_local[1]) boning.append(bone.tail_local[0]) boning.append(bone.tail_local[2]) boning.append(-bone.tail_local[1]) boning.append(-bone.matrix.to_euler().z) if len(bone.parent_recursive) > 0: boning.append(ob.parent.data.bones.find(bone.parent_recursive[0].name)) else: boning.append(-1) exp['bones'].append(boning) #ok now to compile everything together os.makedirs(os.path.dirname(filepath), exist_ok=True) f = open(filepath, 'w', encoding='utf-8') info = "DYMDLv1 " info += str(len(exp['vert'])) + " " info += str(len(exp['polys'])) + " " info += str(len(ob.material_slots)) + " " info += str(len(exp['bones'])) + " " info += str(len(ob.vertex_groups)) + "\n" f.write(info) for mat in ob.material_slots: f.write(mat.name + "\n") vid = 0 while vid < len(exp['vert']): line = "" line += str(exp['vert'][vid][0]) + " " line += str(exp['vert'][vid][1]) + " " line += str(exp['vert'][vid][2]) + " " line += str(exp['vnorm'][vid][0]) + " " line += str(exp['vnorm'][vid][1]) + " " line += str(exp['vnorm'][vid][2]) + " " line += str(exp['uv'][vid][0]) + " " line += str(exp['uv'][vid][1]) + " " line += str(exp['vweight'][vid][0][1]) + " " line += str(exp['vweight'][vid][0][0]) + " " line += str(exp['vweight'][vid][1][1]) + " " line += str(exp['vweight'][vid][1][0]) + " " line += str(exp['vweight'][vid][2][1]) + " " line += str(exp['vweight'][vid][2][0]) + " " line += str(exp['vweight'][vid][3][1]) + " " line += str(exp['vweight'][vid][3][0]) + "\n" f.write(line) vid += 1 for poly in exp['polys']: line = "" line += str(poly[0]) + " " line += str(poly[1]) + " " line += str(poly[2]) + " " line += str(poly[3]) + "\n" f.write(line) for bone in exp['bones']: line = "" line += str(bone[0]) + " " line += str(bone[8]) + " " line += str(bone[1]) + " " line += str(bone[2]) + " " line += str(bone[3]) + " " line += str(bone[4]) + " " line += str(bone[5]) + " " line += str(bone[6]) + " " line += str(bone[7]) + "\n" f.write(line) for group in ob.vertex_groups: f.write(group.name + "\n") f.close() # ExportHelper is a helper class, defines filename and # invoke() function which calls the file selector. from bpy_extras.io_utils import ExportHelper from bpy.props import StringProperty, BoolProperty, EnumProperty from bpy.types import Operator class ExportTramDynamicObj(Operator, ExportHelper): """This appears in the tooltip of the operator and in the generated docs""" bl_idname = "export_tram_dynamic_obj.export_dynamic_tram" # important since its how bpy.ops.import_test.some_data is constructed bl_label = "Export Tram Dynamic Model" # ExportHelper mixin class uses this filename_ext = ".dymdl" filter_glob: StringProperty( default="*.dymdl", options={'HIDDEN'}, maxlen=255, # Max internal buffer length, longer would be clamped. ) # List of operator properties, the attributes will be assigned # to the class instance from the operator settings before calling. use_setting: BoolProperty( name="Example Boolean", description="Example Tooltip", default=True, ) type: EnumProperty( name="Example Enum", description="Choose between two items", items=( ('OPT_A', "First Option", "Description one"), ('OPT_B', "Second Option", "Description two"), ), default='OPT_A', ) def invoke(self, context, _event): object = bpy.context.object if object is None: self.report({'ERROR'}, "No object selected!") return {'CANCELLED'} if object.type != 'MESH': self.report({'ERROR'}, "Selected object is not a mesh!") return {'CANCELLED'} if not self.filepath or True: blend_filepath = context.blend_data.filepath if not blend_filepath: blend_filepath = object.name else: path_dir = os.path.dirname(blend_filepath) blend_filepath = os.path.join(path_dir, object.name) self.filepath = blend_filepath + self.filename_ext context.window_manager.fileselect_add(self) return {'RUNNING_MODAL'} def execute(self, context): write_tram_dynamic_model(context, bpy.context.object, self.filepath) return {'FINISHED'} # Only needed if you want to add into a dynamic menu def menu_func_export(self, context): self.layout.operator(ExportTramDynamicObj.bl_idname, text="Tram Dynamic Exporter") def register(): bpy.utils.register_class(ExportTramDynamicObj) bpy.types.TOPBAR_MT_file_export.append(menu_func_export) def unregister(): bpy.utils.unregister_class(ExportTramDynamicObj) bpy.types.TOPBAR_MT_file_export.remove(menu_func_export) if __name__ == "__main__": register() ================================================ FILE: devtools/exporters/tram_file_export.py ================================================ import bpy import sys import traceback from tram_static_obj_export import write_tram_static_model from tram_dynamic_obj_export import write_tram_dynamic_model from tram_collision_export import write_tram_collision_model from tram_anim_export import write_tram_animation def main(): path_prefix = "./" print("Autoexport script begin") # first we find all of the top-level objects root_objects = [] for object in bpy.context.scene.objects: if object.parent is None: root_objects.append(object) # then we process them for object in root_objects: if object.type == 'MESH': global export_type global export_name export_name = object.name # check if allowed to export if object.name.startswith('&'): continue # determine if should be exported as dymdl or stmdl export_type = 'STMDL' def determine_type(prefix, type): global export_type global export_name if object.name.startswith(prefix): export_type = type export_name = export_name[len(prefix):] determine_type('stmdl?', 'STMDL') determine_type('s?', 'STMDL') determine_type('stcol?', 'STMDL_COL') determine_type('dymdl?', 'DYDML') determine_type('d?', 'DYDML') # export the mesh if export_type == 'STMDL' or export_type == 'STMDL_COL': file_path = path_prefix + "data/models/" + export_name + '.stmdl' print("Exporting", object.name, "as", file_path) write_tram_static_model(bpy.context, object, file_path) else: file_path = path_prefix + "data/models/" + export_name + '.dymdl' print("Exporting", object.name, "as", file_path) write_tram_dynamic_model(bpy.context, object, file_path) # check if could be treated as collmdl if len(object.children) > 0 or export_type == 'STMDL_COL': file_path = path_prefix + "data/models/" + export_name + '.collmdl' print("Exporting", object.name, "as", file_path) write_tram_collision_model(bpy.context, object, file_path) if object.type == 'ARMATURE': for subobj in object.children: # check if allowed to export if subobj.name.startswith('&'): continue # export as dymdl since has an armature file_path = path_prefix + "data/models/" + subobj.name + '.dymdl' print("Exporting", subobj.name, "as", file_path) write_tram_dynamic_model(bpy.context, subobj, file_path) # check if could be treated as collmdl if len(subobj.children) > 0: file_path = path_prefix + "data/models/" + subobj.name + '.collmdl' print("Exporting", subobj.name, "as", file_path) write_tram_collision_model(bpy.context, subobj, file_path) # finally we export animations write_tram_animation(bpy.context, path_prefix + "data/animations/") print("oke at de end") if __name__ == "__main__": try: main() print("Autoexport script finished") except Exception as e: print("Autoexport script failed due to", e) traceback.print_exc() sys.exit(1) ================================================ FILE: devtools/exporters/tram_material_import.py ================================================ import bpy import os bl_info = { "name": "Import Tram Material", "description": "Imports .mat files for Tramway SDK", "author": "racenis", "blender": (2, 83, 0), "support": "COMMUNITY", "category": "Import-Export", } def import_tram_material(context, path_prefix): material_data = {} texture_prefix = os.path.join(path_prefix, "data", "textures") # scan in .png files from data/textures for root, subdirs, files in os.walk(texture_prefix): for file in files: name, extension = os.path.splitext(os.path.join(root, file)) if extension != '.png': continue if name.endswith('.nrm') or name.endswith('.normal') continue name = os.path.relpath(name, texture_prefix) new_material = { "name" : name, "path" : os.path.join(root, file), "type" : "flat", "filter" : "nearest", "texture_type" : "same" } material_data[name] = new_material # read in material definition, if there is one file_path = os.path.join(path_prefix, "data", "material.list") file = open(file_path, 'r') if file.closed: print("Can't open file", file_path) else: first_line = file.readline().strip() if first_line != "MATv6": print("File", file_path, "is not a MATv6!") else: for line in file: stripped_line = line.strip() if not stripped_line or stripped_line.startswith('#'): continue tokens = stripped_line.split() material_name = tokens[0] if material_name in material_data: data = material_data[material_name] else: data = { "name" : material_name, "path" : "" } data["type"] = tokens[1] data["filter"] = tokens[2] data["property"] = tokens[3] data["color"] = [float(tokens[4]), float(tokens[5]), float(tokens[6])] data["specular_weight"] = tokens[7] data["specular_exponent"] = tokens[8] data["specular_transparency"] = tokens[9] data["texture_type"] = tokens[10] material_data[material_name] = data def get_texture(material): if not material in material_data: return "" data = material_data[material] if data["texture_type"] == "same": return data["path"] if data["texture_type"] == "none": return "" return get_texture(data["texture_type"]) # create and/or update blender materials for key, data in material_data.items(): # check if material exists material_index = bpy.data.materials.find(data["name"]) if material_index == -1: # create a new material material = bpy.data.materials.new(data["name"]) else: # take the existing one material = bpy.data.materials[material_index] material.use_nodes = True if "color" in data: color = data["color"] else: color = [1.0, 1.0, 1.0] bsdf = material.node_tree.nodes["Principled BSDF"] bsdf.inputs["Base Color"].default_value = (color[0], color[1], color[2], 1.0) texture = get_texture(key) if not texture == "": texImage = material.node_tree.nodes.new('ShaderNodeTexImage') texImage.image = bpy.data.images.load(texture) material.node_tree.links.new(bsdf.inputs['Base Color'], texImage.outputs['Color']) from bpy_extras.io_utils import ExportHelper from bpy.props import StringProperty, BoolProperty, EnumProperty from bpy.types import Operator class ImportTramMaterial(bpy.types.Operator): bl_idname = "import_tram_material.import_tram_mat" bl_label = "Select Project Directory" bl_options = {'REGISTER'} directory: StringProperty( name="Indir Path", description="Where I will load my stuff" ) filter_folder: BoolProperty( default=True, options={"HIDDEN"} ) def execute(self, context): import_tram_material(context, self.directory) return {'FINISHED'} def invoke(self, context, event): context.window_manager.fileselect_add(self) return {'RUNNING_MODAL'} def menu_func_import(self, context): self.layout.operator(ImportTramMaterial.bl_idname, text="Tram Material Importer") def register(): bpy.utils.register_class(ImportTramMaterial) bpy.types.TOPBAR_MT_file_import.append(menu_func_import) def unregister(): bpy.utils.unregister_class(ImportTramMaterial) bpy.types.TOPBAR_MT_file_import.remove(menu_func_import) if __name__ == "__main__": register() ================================================ FILE: devtools/exporters/tram_static_obj_export.py ================================================ import bpy import os bl_info = { "name": "Export Tram Static Model", "description": "Exports .stmdl files for Tramway SDK", "author": "racenis", "blender": (2, 83, 0), "support": "COMMUNITY", "category": "Import-Export", } # TODO: optimize the export # - currently the script will make copy of the model in memory # - Python objects kinda sus # - uses way too much memory # TODO: improve readability # - it would be better if instead of uv[0] we would uv.x, etc. # TODO: fix bug # - if mesh doesn't have UVMap then it crashes # writes an object as a model def write_tram_static_model(context, object, filepath): ob = object exp = {'uv':[],'lmap':[],'vert':[],'vnorm':[],'polys':[],'mat':[]} #get uv coords for uv in ob.data.uv_layers['UVMap'].data: exp['uv'].append([uv.uv[0], uv.uv[1]]) #now do the same thing but for lightmap if ob.data.uv_layers.get('LightMap', None) is None: for uv in ob.data.uv_layers['UVMap'].data: exp['lmap'].append([uv.uv[0], uv.uv[1]]) else: for uv in ob.data.uv_layers['LightMap'].data: exp['lmap'].append([uv.uv[0], uv.uv[1]]) #get info of the loop vertices for mloop in ob.data.loops: vert = ob.data.vertices[mloop.vertex_index] exp['vert'].append([vert.co[0], vert.co[2], -vert.co[1]]) exp['vnorm'].append([vert.normal[0], vert.normal[2], -vert.normal[1]]) #get all polygons for poly in ob.data.polygons: for i in range(0, len(poly.loop_indices) - 2): exp['polys'].append([poly.loop_indices[0], poly.loop_indices[i+1], poly.loop_indices[i+2], poly.material_index]) #ok now to compile everything together and write to disk os.makedirs(os.path.dirname(filepath), exist_ok=True) f = open(filepath, 'w', encoding='utf-8') info = "" info += str(len(exp['vert'])) + " " info += str(len(exp['polys'])) + " " info += str(len(ob.material_slots)) + "\n" f.write(info) for mat in ob.material_slots: f.write(mat.name + "\n") vid = 0 while vid < len(exp['vert']): line = "" line += str(exp['vert'][vid][0]) + " " line += str(exp['vert'][vid][1]) + " " line += str(exp['vert'][vid][2]) + " " line += str(exp['vnorm'][vid][0]) + " " line += str(exp['vnorm'][vid][1]) + " " line += str(exp['vnorm'][vid][2]) + " " line += str(exp['uv'][vid][0]) + " " line += str(exp['uv'][vid][1]) + " " line += str(exp['lmap'][vid][0]) + " " line += str(exp['lmap'][vid][1]) + "\n" f.write(line) vid += 1 for poly in exp['polys']: line = "" line += str(poly[0]) + " " line += str(poly[1]) + " " line += str(poly[2]) + " " line += str(poly[3]) + "\n" f.write(line) f.close() # ExportHelper is a helper class, defines filename and # invoke() function which calls the file selector. from bpy_extras.io_utils import ExportHelper from bpy.props import StringProperty, BoolProperty, EnumProperty from bpy.types import Operator class ExportTramStaticObj(Operator, ExportHelper): """This appears in the tooltip of the operator and in the generated docs""" bl_idname = "export_tram_static_obj.export_static_tram" # important since its how bpy.ops.import_test.some_data is constructed bl_label = "Export Tram Static Model" # ExportHelper mixin class uses this filename_ext = ".stmdl" filter_glob: StringProperty( default="*.stmdl", options={'HIDDEN'}, maxlen=255, # Max internal buffer length, longer would be clamped. ) # List of operator properties, the attributes will be assigned # to the class instance from the operator settings before calling. use_setting: BoolProperty( name="Example Boolean", description="Example Tooltip", default=True, ) type: EnumProperty( name="Example Enum", description="Choose between two items", items=( ('OPT_A', "First Option", "Description one"), ('OPT_B', "Second Option", "Description two"), ), default='OPT_A', ) def invoke(self, context, _event): object = bpy.context.object if object is None: self.report({'ERROR'}, "No object selected!") return {'CANCELLED'} if object.type != 'MESH': self.report({'ERROR'}, "Selected object is not a mesh!") return {'CANCELLED'} if not self.filepath or True: blend_filepath = context.blend_data.filepath if not blend_filepath: blend_filepath = object.name else: path_dir = os.path.dirname(blend_filepath) blend_filepath = os.path.join(path_dir, object.name) self.filepath = blend_filepath + self.filename_ext context.window_manager.fileselect_add(self) return {'RUNNING_MODAL'} def execute(self, context): write_tram_static_model(context, bpy.context.object, self.filepath) return {'FINISHED'} # Only needed if you want to add into a dynamic menu def menu_func_export(self, context): self.layout.operator(ExportTramStaticObj.bl_idname, text="Tram Static Exporter") def register(): bpy.utils.register_class(ExportTramStaticObj) bpy.types.TOPBAR_MT_file_export.append(menu_func_export) def unregister(): bpy.utils.unregister_class(ExportTramStaticObj) bpy.types.TOPBAR_MT_file_export.remove(menu_func_export) if __name__ == "__main__": register() ================================================ FILE: devtools/maketool.py ================================================ #!/usr/bin/python3 import os as os import sys as sys import configparser as configparser # Read the config file config = configparser.ConfigParser() if len(config.read("maketool.ini")) != 1: sys.exit("Can't read the config file!") # Extract the configuration variables project_path = "./" project_name = config["Project"]["name"] project_type = config["Project"]["type"] platform = config["Project"]["platform"] is_library = project_type == "LIBRARY" is_project = project_type == "PROJECT" compiler = config["Make"]["compiler"] archiver = config["Make"]["archiver"] tramsdk = config["Make"]["tramsdk"] module_enables = config["Modules"] deleter = "del" if os.name == "nt" else "rm" win32_bin = f" -L{tramsdk}libraries/binaries/win32/" win64_bin = f" -L{tramsdk}libraries/binaries/win64/" linux_bin = "" web_bin = f" -L{tramsdk}libraries/binaries/web/" class Module: def __init__(self, name, group, compile_includes, linker_includes, linker_options): self.name = name self.group = group self.compile_includes = compile_includes self.linker_includes = linker_includes self.linker_options = linker_options self.enabled = False def enable(self): self.enabled = True def disable(self): self.enabled = False def is_enabled(self): return self.enabled def get_group(self): return self.group modules = { "platform/glfw": Module("platform/glfw", "platform", {"WEB": "", "WIN32": f" -I{tramsdk}libraries/glfw", "WIN64": f" -I{tramsdk}libraries/glfw", "LINUX": ""}, {"WEB": "", "WIN32": "", "WIN64": "", "LINUX": ""}, {"WEB": " -sUSE_GLFW=3 ", "WIN32": "-lglfw3 -lgdi32", "WIN64": "-lglfw3 -lgdi32", "LINUX": "-lglfw"}), "platform/sdl": Module("platform/sdl", "platform", {"WEB": "", "WIN32": f" -I{tramsdk}libraries/sdl2 -I{tramsdk}libraries/glad", "WIN64": f" -I{tramsdk}libraries/sdl2 -I{tramsdk}libraries/glad", "LINUX": ""}, {"WEB": "", "WIN32": "", "WIN64": "", "LINUX": ""}, {"WEB": " -sUSE_SDL=2 ", "WIN32": "-lSDL2.dll -lgdi32 -ld3d9", "WIN64": "-lSDL2.dll -lgdi32 -ld3d9", "LINUX": "-lsdl2"}), "audio/openal": Module("audio/openal", "audio", {"WEB": "", "WIN32": "", "WIN64": "", "LINUX": ""}, {"WEB": "", "WIN32": win32_bin, "WIN64": win64_bin, "LINUX": ""}, {"WEB": "", "WIN32": "-lOpenAL32", "WIN64": "-lOpenAL32", "LINUX": "-lopenal"}), "audio/spatial": Module("audio/spatial", "audio", {"WEB": "", "WIN32": "", "WIN64": "", "LINUX": ""}, {"WEB": "", "WIN32": "", "WIN64": "", "LINUX": ""}, {"WEB": "", "WIN32": "", "WIN64": "", "LINUX": ""}), "audio/template": Module("audio/template", "audio", {"WEB": "", "WIN32": "", "WIN64": "", "LINUX": ""}, {"WEB": "", "WIN32": "", "WIN64": "", "LINUX": ""}, {"WEB": "", "WIN32": "", "WIN64": "", "LINUX": ""}), "render/opengl": Module("render/opengl", "render", {"WEB": "", "WIN32": f" -I{tramsdk}libraries/glad", "WIN64": f" -I{tramsdk}libraries/glad", "LINUX": ""}, {"WEB": "", "WIN32": "", "WIN64": "", "LINUX": ""}, {"WEB": "", "WIN32": "", "WIN64": "", "LINUX": "-lGL"}), "render/direct3d": Module("render/direct3d", "render", {"WEB": "", "WIN32": "", "WIN64": "", "LINUX": ""}, {"WEB": "", "WIN32": "", "WIN64": "", "LINUX": ""}, {"WEB": "", "WIN32": "", "WIN64": "", "LINUX": ""}), "render/software": Module("render/software", "render", {"WEB": "", "WIN32": "", "WIN64": "", "LINUX": ""}, {"WEB": "", "WIN32": "", "WIN64": "", "LINUX": ""}, {"WEB": "", "WIN32": "", "WIN64": "", "LINUX": ""}), "render/raytrace": Module("render/raytrace", "render", {"WEB": "", "WIN32": "", "WIN64": "", "LINUX": ""}, {"WEB": "", "WIN32": "", "WIN64": "", "LINUX": ""}, {"WEB": "", "WIN32": "", "WIN64": "", "LINUX": ""}), "physics/bullet": Module("physics/bullet", "physics", {"WEB": f" -I{tramsdk}libraries/bullet", "WIN32": f" -I{tramsdk}libraries/bullet", "WIN64": f" -I{tramsdk}libraries/bullet", "LINUX": f" -I/usr/include/bullet"}, {"WEB": web_bin, "WIN32": "", "WIN64": "", "LINUX": ""}, {"WEB": "-lBulletSoftBody -lBulletDynamics -lBulletCollision -lLinearMath ", "WIN32": "-lBulletSoftBody -lBulletDynamics -lBulletCollision -lLinearMath ", "WIN64": "-lBulletSoftBody -lBulletDynamics -lBulletCollision -lLinearMath ", "LINUX": "-lBulletSoftBody -lBulletDynamics -lBulletCollision -lLinearMath "}), "physics/template": Module("physics/template", "physics", {"WEB": "", "WIN32": "", "WIN64": "", "LINUX": ""}, {"WEB": "", "WIN32": "", "WIN64": "", "LINUX": ""}, {"WEB": "", "WIN32": "", "WIN64": "", "LINUX": ""}), "extensions/file": Module("extensions/file", "extensions", {"WEB": "", "WIN32": f" -I{tramsdk}libraries/curl", "WIN64": f" -I{tramsdk}libraries/curl", "LINUX": f" -I{tramsdk}libraries/curl"}, {"WEB": web_bin, "WIN32": win32_bin, "WIN64": win64_bin, "LINUX": ""}, {"WEB": "", "WIN32": "-lws2_32 -lcurl -lminiz", "WIN64": "-lws2_32 -lcurl -lminiz", "LINUX": "-lcurl -lminiz"}), "extensions/camera": Module("extensions/camera", "extensions", {"WEB": "", "WIN32": "", "WIN64": "", "LINUX": ""}, {"WEB": "", "WIN32": "", "WIN64": "", "LINUX": ""}, {"WEB": "", "WIN32": "", "WIN64": "", "LINUX": ""}), "extensions/menu": Module("extensions/menu", "extensions", {"WEB": "", "WIN32": "", "WIN64": "", "LINUX": ""}, {"WEB": "", "WIN32": "", "WIN64": "", "LINUX": ""}, {"WEB": "", "WIN32": "", "WIN64": "", "LINUX": ""}), "extensions/scripting/lua": Module("extensions/scripting/lua", "extensions", {"WEB": f" -I{tramsdk}libraries/lua", "WIN32": f" -I{tramsdk}libraries/lua", "WIN64": f" -I{tramsdk}libraries/lua", "LINUX": " -I/usr/include/lua5.4"}, {"WEB": "", "WIN32": "", "WIN64": "", "LINUX": ""}, {"WEB": "-llua", "WIN32": "-llua", "WIN64": "-llua", "LINUX": "-llua5.4"}) } for module, enable in module_enables.items(): if not module in modules: print(f"Module '{module}' was not found!") if enable == "INCLUDE": modules[module].enable() elif enable == "EXCLUDE": modules[module].disable() else: print(f"Module '{module}' enable state '{enable}' not recognized!") # Print the header def print_header(): print("TRAM SDK Makefile generator v0.0.4") # Print help def print_help(): print_header() print("This tool generates makefiles for compiling the Tramway SDK and") print("projects built on top of it. Please check your configuration") print("before generating the Makefile for the first time.") print("\nCommand line options:") print("\t--help\t\tDisplays this message.") print("\t--version\tAlso displays this message.") print("\tconfig\t\tChecks the configuration.") print("\tgenerate\tGenerates a makefile in the project directory.") # Print config def print_config(): print_header() print("Compiler:\t", compiler) print("Archiver:\t", archiver) print("Project type:\t", project_type) print("Modules:") prev_group = None for module, include in modules.items(): if not prev_group is None and include.group != prev_group: print(" ") prev_group = include.group print("\t[X] " if include.is_enabled() else "\t[ ] ", module) print("\nYou can change the configuration in ./maketool.ini") def validate_config(): is_valid = True if not os.path.isdir(project_path): print(f"Selected path '{project_path}' is not a directory.") is_valid = False if ' ' in project_name: print(f"Project name '{project_name}' contains spaces.") is_valid = False if not platform in ["WEB", "WIN32", "WIN64", "LINUX"]: print(f"Plaform '{platform}' not recognized.") is_valid = False if not project_type in ["LIBRARY", "PROJECT"]: print(f"Project type '{project_type}' is not recognized.") is_valid = False groups = set(map(lambda mod: mod.group, modules.values())) groups_included = {} for group in groups: groups_included[group] = 0 for module in modules.values(): if module.is_enabled(): groups_included[module.group] += 1 for group in groups: if groups_included[group] == 0 and group != "extensions": print(f"At least one module in {group} needs to be enabled.") is_valid = False if groups_included[group] > 1 and group != "extensions": print(f"Only one module {group} in can be enabled.") is_valid = False return is_valid # Generate makefile def generate_makefile(): if is_library: makefile = "default: library\n\n" else: makefile = "default: project\n\n" if not os.path.isdir(project_path + "src"): sys.exit("Can't find the ./src/ directory!") print("Generating makefile...") units = [] source_path = project_path + "src/" for root, _, files in os.walk(source_path): for name in files: filename = os.path.join(root, name).replace('\\', '/') append = filename.endswith(".cpp") for module, include in modules.items(): if filename.startswith(source_path + module) and not include.is_enabled(): append = False if is_library and filename == source_path + "main.cpp": append = False if append: units.append(filename) def objectify(unit): unit = unit.replace('./', '') unit = unit.replace('/', '_') return unit[:-4] # Generate translation unit rules for unit in units: makefile += objectify(unit) + ".o: " + unit + "\n" makefile += "\t" + compiler + " -c -g -O0 -Wno-narrowing -std=c++20 -I./src" makefile += " -I" + tramsdk + "libraries" makefile += " -I" + tramsdk + "src" if platform == "WEB": makefile += " -Wno-undefined-var-template" for module in modules.values(): if module.is_enabled(): makefile += module.compile_includes[platform] makefile += " " + unit + " -o " + objectify(unit) + ".o\n\n" # Generate clean rule makefile += "clean:\n" for unit in units: makefile += "\t" + deleter + " " + objectify(unit) + ".o\n" makefile += "\n" # Generate build rule if is_library: makefile += "library: " for unit in units: makefile += objectify(unit) + ".o " makefile += "\n\t" + archiver if platform != "WEB": makefile += " -crf " else: makefile += " rcs " makefile += "libtramsdk.a " for unit in units: makefile += objectify(unit) + ".o " makefile += "\n" if not is_library: makefile += "project: " for unit in units: makefile += objectify(unit) + ".o " makefile += "\n\t" + compiler if platform == "WEB": makefile += " -g " for unit in units: makefile += objectify(unit) + ".o " makefile += "-sASSERTIONS=2 -sSAFE_HEAP=0 -sALLOW_MEMORY_GROWTH " makefile += "-sSTACK_OVERFLOW_CHECK=1 -sUSE_BULLET=1 " makefile += "-sMIN_WEBGL_VERSION=2 -sMAX_WEBGL_VERSION=2 -L./ " makefile += "-o " + project_name + ".html --preload-file ./" else: makefile += " -o " + project_name makefile += " -L" + tramsdk + " " if platform != "LINUX": makefile += "-static " for unit in units: makefile += objectify(unit) + ".o " if project_name != "tramsdk": makefile += "-ltramsdk " for module in modules.values(): if module.is_enabled(): makefile += module.linker_includes[platform] + " " makefile += module.linker_options[platform] + " " with open(project_path + "Makefile", "w") as makefile_file: makefile_file.write(makefile) print("ok.") mode = sys.argv[1] if len(sys.argv) > 1 else -1 if mode == "config": print_config() print("") validate_config() elif mode == "generate": if validate_config(): generate_makefile() else: print_help() ================================================ FILE: devtools/tbsp/engine_libs.cpp ================================================ #include #include #include #include #include #include #define STB_IMAGE_IMPLEMENTATION #include #include ================================================ FILE: devtools/tbsp/main.cpp ================================================ // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. // Tramway SDK -- Map converter // TODO: // - mesh simplification(?) sometimes generates edges with NaN vertices // - this is not good and should be fixed. // // - atof() is very slow, replace with std::from_chars #include #include #include #include #include #include #include #include #include #include using namespace tram; struct Vertex { vec3 pos; vec3 nrm; vec2 tex; vec2 map; }; struct Triangle { uint32_t v1, v2, v3; uint32_t mat; }; struct Material { std::string name; int width, height; }; struct Plane { float x_offset, y_offset; float x_scale, y_scale; float angle; vec3 p1, p2, p3; std::string material; }; struct Edge { vec3 p1, p2; }; struct Polygon { std::vector edges; Plane plane; }; struct Brush { std::vector planes; std::vector polys; std::vector hull; }; struct Entity { std::vector brushes; std::string name; vec3 origin = {0.0f, 0.0f, 0.0f}; std::vector materials; std::vector vertices; std::vector indices; }; vec4 PlaneToEquation(const Plane& plane) { vec3 dir1 = plane.p2 - plane.p1; vec3 dir2 = plane.p3 - plane.p1; vec3 cros = glm::normalize(glm::cross(dir1, dir2)); float dist = glm::dot(cros, plane.p1); return {cros, -dist}; } // returns 0 if needs clipped, -1 if thrown away, 1 if kept int NeedsClipped(Polygon poly, vec4 eq, float bias = 0.01f) { int inside_vertices = 0; int outside_vertices = 0; for (auto& edge : poly.edges) { float dist1 = glm::dot(vec3(eq), edge.p1) + eq.w; float dist2 = glm::dot(vec3(eq), edge.p2) + eq.w; if (dist1 > bias) inside_vertices++; if (dist2 > bias) inside_vertices++; if (dist1 < -bias) outside_vertices++; if (dist2 < -bias) outside_vertices++; } if (outside_vertices == 0) { return 1; } if (inside_vertices == 0) { return -1; } return 0; } std::pair Clip(Polygon poly, vec4 eq) { std::vector new_edges; Edge new_edge = {{INFINITY, INFINITY, INFINITY}, {0, 0, 0}}; for (auto& edge : poly.edges) { float dist1 = glm::dot(vec3(eq), edge.p1) + eq.w; float dist2 = glm::dot(vec3(eq), edge.p2) + eq.w; if (dist1 < 0.0f && dist2 < 0.0f) { continue; } if (dist1 < 0.0f) { vec3 l0 = edge.p1; vec3 l = glm::normalize(edge.p2 - edge.p1); vec3 n = vec3(eq); vec3 p0 = n * -eq.w; float d = glm::dot((p0-l0), n) / glm::dot(l, n); edge.p1 = l0 + l*d; if (new_edge.p1.x == INFINITY) { new_edge.p1 = edge.p1; } else { new_edge.p2 = edge.p1; new_edges.push_back(new_edge); } } if (dist2 < 0.0f) { vec3 l0 = edge.p1; vec3 l = glm::normalize(edge.p2 - edge.p1); vec3 n = vec3(eq); vec3 p0 = n * -eq.w; float d = glm::dot((p0-l0), n) / glm::dot(l, n); edge.p2 = l0 + l*d; if (new_edge.p1.x == INFINITY) { new_edge.p1 = edge.p2; } else { new_edge.p2 = edge.p2; new_edges.push_back(new_edge); } } new_edges.push_back(edge); } poly.edges = new_edges; return {poly, new_edge}; } int main(int argc, const char** argv) { std::cout << "Tramway SDK -- Map converter" << std::endl; if (argc < 2) { std::cout << "Usage: tbsp map [flags]"; std::cout << "\n\tmap is the name of the map"; std::cout << "\n\tflags are flags"; std::cout << "\n\t\t-nostmdl to skip outputting 3D model"; std::cout << "\n\t\t-nocollmdl to skip outputting collsion model"; std::cout << "\n\t\t-nohidden to skip hidden surface removal"; std::cout << "\n\t\t-nonodraw to skip nodraw surface removal"; std::cout << "\n\t\t-only entity to output only entity"; std::cout << "\n\t\t-worldspawn name to override worldspawn name"; return 0; } const char* map_name = argv[1]; const char* entity_only = nullptr; const char* worldspawn_name = "worldspawn"; bool skip_model = false; bool skip_collision = false; bool skip_hidden = false; bool skip_nodraw = false; for (int i = 2; i < argc; i++) { if (strcmp(argv[i], "-nostmdl") == 0) skip_model = true; if (strcmp(argv[i], "-nocollmdl") == 0) skip_collision = true; if (strcmp(argv[i], "-nohidden") == 0) skip_hidden = true; if (strcmp(argv[i], "-nonodraw") == 0) skip_nodraw = true; if (strcmp(argv[i], "-only") == 0) entity_only = argv[++i]; if (strcmp(argv[i], "-worldspawn") == 0) worldspawn_name = argv[++i]; } std::vector entities; // + --------------------------------------------------------------------- + // | | // | MAP LOADER | // | | // + --------------------------------------------------------------------- + // This part is pretty simple -- first we load the map file into memory, // then we parse it. The file format itself consists of text. // This parser implementation is pretty bad and might not work with map // files generated by all programs. char map_path[200] = ""; // check if absolute path if (map_name[0] == '/' || map_name[1] == ':') { strcpy(map_path, map_name); strcat(map_path, ".map"); } else { strcpy(map_path, "assets/"); strcat(map_path, map_name); strcat(map_path, ".map"); } auto file = FileReader::GetReader(map_path); //File file(map_path, MODE_READ | MODE_PAUSE_LINE); //if (!file.is_open()) { if (file->GetStatus() != FileStatus::READY) { std::cout << "Error opening map file " << map_path << std::endl; return 1; } std::cout << "Reading map file " << map_path << "... " << std::flush; const char* cursor = file->GetContents(); const char* cursor_end = cursor + file->GetSize(); while (cursor < cursor_end) { // comment. skip until end of line if (*cursor == '/') { while (*cursor != '\n'/* || *cursor != '\0'*/) { cursor++; } cursor++; continue; } // start of an entity if (*cursor == '{') { Entity entity; *cursor++; // skip opening bracket // read in parameters of the entity for (;;) { // find parameter name opening bracket while (*cursor != '"' && *cursor != '{') cursor++; // we reached the part where the brush planes are defined if (*cursor == '{') break; cursor++; // skip opening quote char parameter[256]; char value[256]; // copy in parameter for (char* p = parameter; *cursor != '"'; p++ && cursor++) { p[0] = *cursor; p[1] = '\0'; } cursor++; // skip closing quote while (*cursor != '"') cursor++; // find next quote cursor++; // skip opening quote // copy in value for (char* v = value; *cursor != '"'; v++ && cursor++) { v[0] = *cursor; v[1] = '\0'; } cursor++; // skip closing quote if (std::string(parameter) == "classname" && std::string(value) == "worldspawn") { entity.name = worldspawn_name; } if (std::string(parameter) == "_tb_name") { entity.name = value; } } // reading in brushes for (;;) { while(*cursor != '{' && *cursor != '}') cursor++; if (*cursor == '}') break; Brush brush; // read in all the planes for (;;) { vec3 points[3]; // read in planes for (int i = 0; i < 3; i++) { while (*cursor != '(') cursor++; cursor++; points[i].x = atof(cursor); while (isspace(*cursor)) cursor++; while (!isspace(*cursor)) cursor++; points[i].y = atof(cursor); while (isspace(*cursor)) cursor++; while (!isspace(*cursor)) cursor++; points[i].z = atof(cursor); } Plane plane; plane.p1 = points[0]; plane.p2 = points[1]; plane.p3 = points[2]; char material[256]; while (*cursor != ')') cursor++; cursor++; while (isspace(*cursor)) cursor++; // copy in material name for (char* m = material; !isspace(*cursor); m++ && cursor++) { m[0] = *cursor; m[1] = '\0'; } plane.material = material; plane.x_offset = atof(cursor); while (isspace(*cursor)) cursor++; while (!isspace(*cursor)) cursor++; plane.y_offset = atof(cursor); while (isspace(*cursor)) cursor++; while (!isspace(*cursor)) cursor++; plane.angle = atof(cursor); while (isspace(*cursor)) cursor++; while (!isspace(*cursor)) cursor++; plane.x_scale = atof(cursor); while (isspace(*cursor)) cursor++; while (!isspace(*cursor)) cursor++; plane.y_scale = atof(cursor); while (isspace(*cursor)) cursor++; while (!isspace(*cursor)) cursor++; brush.planes.push_back(plane); while (isspace(*cursor)) cursor++; if (*cursor == '}') { *cursor++; break; } } entity.brushes.push_back(brush); } if (!entity_only || entity.name == entity_only) { entities.push_back(entity); } } cursor++; } std::cout << " done!" << std::endl; // + --------------------------------------------------------------------- + // | | // | POLYGON CONVERTER | // | | // + --------------------------------------------------------------------- + // Now that the map has been parsed and loaded into memory, it is time to // convert the brushes (which are defined as planes), into polygons, which // we can use later for rendering. // For each brush we will initially create a very large polygonal cube. Then // we will start clipping it with each brush plane, until we have clipped it // into the shape of the brush. const vec3 low_lft_bak = {-8192.0f, -8192.0f, -8192.0f}; const vec3 low_rgt_bak = { 8192.0f, -8192.0f, -8192.0f}; const vec3 low_rgt_frt = { 8192.0f, -8192.0f, 8192.0f}; const vec3 low_lft_frt = {-8192.0f, -8192.0f, 8192.0f}; const vec3 hgh_lft_bak = {-8192.0f, 8192.0f, -8192.0f}; const vec3 hgh_rgt_bak = { 8192.0f, 8192.0f, -8192.0f}; const vec3 hgh_rgt_frt = { 8192.0f, 8192.0f, 8192.0f}; const vec3 hgh_lft_frt = {-8192.0f, 8192.0f, 8192.0f}; const Plane blank = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, {0.0f, 0.0f, 0.0f}, {1.0f, 0.0f, 0.0f}, {0.0f, 1.0f, 0.0f}, "none" }; const std::vector initial { {{{low_lft_bak, hgh_lft_bak}, {hgh_lft_bak, hgh_rgt_bak}, {hgh_rgt_bak, low_rgt_bak}, {low_rgt_bak, low_lft_bak}}, blank}, {{{low_rgt_bak, hgh_rgt_bak}, {hgh_rgt_bak, hgh_rgt_frt}, {hgh_rgt_frt, low_rgt_frt}, {low_rgt_frt, low_rgt_bak}}, blank}, {{{low_rgt_frt, hgh_rgt_frt}, {hgh_rgt_frt, hgh_lft_frt}, {hgh_lft_frt, low_lft_frt}, {low_lft_frt, low_rgt_frt}}, blank}, {{{low_lft_frt, hgh_lft_frt}, {hgh_lft_frt, hgh_lft_bak}, {hgh_lft_bak, low_lft_bak}, {low_lft_bak, low_lft_frt}}, blank}, {{{low_lft_bak, low_rgt_bak}, {low_rgt_bak, low_rgt_frt}, {low_rgt_frt, low_lft_frt}, {low_lft_frt, low_lft_bak}}, blank}, {{{hgh_lft_bak, hgh_lft_frt}, {hgh_lft_frt, hgh_rgt_frt}, {hgh_rgt_frt, hgh_rgt_bak}, {hgh_rgt_bak, hgh_lft_bak}}, blank}, }; for (size_t i = 0; i < entities.size(); i++) { auto& entity = entities[i]; std::cout << "[" << (i + 1) << "/" << entities.size() << "] Converting "<< entity.name <<" to polygon soup... " << std::flush; for (auto& brush : entity.brushes) { // make initial polygonal mega-cube brush.polys = initial; // clip it down with brush planes for (auto& plane : brush.planes) { std::vector clipped_polys; vec4 eq = PlaneToEquation(plane); Polygon new_polygon = {.plane = plane}; // may or may not be filled for (auto& poly : brush.polys) { int needs_clipped = NeedsClipped(poly, eq); if (needs_clipped == 1) { clipped_polys.push_back(poly); continue; } if (needs_clipped == -1) { continue; } auto[clipped_poly, new_edge] = Clip(poly, eq); clipped_polys.push_back(clipped_poly); new_polygon.edges.push_back(new_edge); } clipped_polys.push_back(new_polygon); brush.polys = clipped_polys; } } std::cout << "done!" << std::endl; } // + --------------------------------------------------------------------- + // | | // | POLYGON TO CONVEX HULL CONVERTER | // | | // + --------------------------------------------------------------------- + for (auto& entity : entities) { for (auto& brush : entity.brushes) { for (const auto& poly : brush.polys) { for (const auto& edge : poly.edges) { bool found_p1 = false; bool found_p2 = false; for (const auto& point : brush.hull) { if (point == edge.p1) found_p1 = true; if (point == edge.p2) found_p2 = true; } if (!found_p1 && !std::isnan(edge.p1.x) && !std::isinf(edge.p1.x)) brush.hull.push_back(edge.p1); if (!found_p2 && !std::isnan(edge.p2.x) && !std::isinf(edge.p2.x)) brush.hull.push_back(edge.p2); }} for (auto& point : brush.hull) { point = {point.x, point.z, -point.y}; point *= 1.0f/32.0f; } } } // + --------------------------------------------------------------------- + // | | // | HIDDEN SURFACE REMOVAL | // | | // + --------------------------------------------------------------------- + if (!skip_hidden) for (size_t i = 0; i < entities.size(); i++) { auto& entity = entities[i]; std::cout << "[" << (i + 1) << "/" << entities.size() << "] Removing hidden surfaces for "<< entity.name <<"... " << std::flush; std::vector new_brushes; // iterate through all brushes of an entity for (auto& brush : entity.brushes) { Brush new_brush = {.planes = brush.planes, .hull = brush.hull}; // then iterate through all polygons of a brush for (auto& poly : brush.polys) { // compute the plane equation of the polygon vec4 eq = PlaneToEquation(poly.plane); // now find all of the brushes that are adjacent to the polygon std::vector adjacent; for (auto& brush_clip : entity.brushes) { if (&brush == &brush_clip) continue; bool shared_plane = false; for (auto& poly_clip : brush_clip.polys) { bool on_plane = true; if (poly_clip.plane.material == "dev/noclip") continue; for (auto& edge_clip : poly_clip.edges) { if (abs(glm::dot(vec3(eq), edge_clip.p1) + eq.w) > 0.1f || abs(glm::dot(vec3(eq), edge_clip.p2) + eq.w) > 0.1f ) { on_plane = false; } } if (on_plane) { vec4 poly_eq = PlaneToEquation(poly_clip.plane); vec3 eq1 = eq; vec3 eq2 = poly_eq; if (glm::dot(eq1, eq2) < 0.0f) { shared_plane = true; } } } if (shared_plane) { adjacent.push_back(&brush_clip); } } std::vector soup = {poly}; for (Brush* brush_clip : adjacent) { std::vector new_soup; for (auto& soup_poly : soup) { std::vector speculative_soup; Polygon remainder = soup_poly; bool clipped = false; bool what_the_fuck = false; for (auto& plane : brush_clip->planes) { vec4 plane_eq = PlaneToEquation(plane); // this skips planes that have the same plane as polygon if (abs(glm::dot(vec3(eq), vec3(plane_eq))) > 0.99f) continue; int needs_clipped = NeedsClipped(remainder, plane_eq, 0.1f); if (needs_clipped == -1) { what_the_fuck = true; continue; } if (needs_clipped == 1) { clipped = true; continue; } clipped = true; auto clipped_off = Clip(remainder, -plane_eq); auto new_remainder = Clip(remainder, plane_eq); speculative_soup.push_back(clipped_off.first); remainder = new_remainder.first; } if (what_the_fuck) { new_soup.push_back(soup_poly); continue; } if (!clipped) speculative_soup.push_back(remainder); for (auto& poly : speculative_soup) { new_soup.push_back(poly); } } soup = new_soup; } for (auto& soup_polygon : soup) { new_brush.polys.push_back(soup_polygon); } } new_brushes.push_back(new_brush); } entity.brushes = new_brushes; std::cout << "done!" << std::endl; } // + --------------------------------------------------------------------- + // | | // | POLYGON TO TRIANGLE CONVERTER | // | | // + --------------------------------------------------------------------- + // This part here will convert our polygons, which are defined as a set of // edges, into little indexed traingles, that can be saved to a disk file. // First it will find a list of unique materials, then it will load in the // dimensions of the textures of these materials, and finally it will // triangulate our polygons, using the texture dimensions to help with // texture projection. for (size_t i = 0; i < entities.size(); i++) { auto& entity = entities[i]; std::cout << "[" << (i + 1) << "/" << entities.size() << "] Triangulating polygon soup for "<< entity.name <<"... " << std::flush; // iterate through all planes and find all of the materials for (auto& brush : entity.brushes) { for (auto& plane : brush.planes) { bool already_in_list = false; for (int i = 0 ; i < entity.materials.size(); i++) { if (entity.materials[i].name == plane.material) { already_in_list = true; break; } } if (!already_in_list) entity.materials.push_back({.name=plane.material}); } } // find the parameters of the materials for (auto& mat : entity.materials) { std::string path = "data/textures/"; path += mat.name; path += ".png"; int x, y, n; if (!stbi_info(path.c_str(), &x, &y, &n)) { std::cout << "\nFile " << path << " not found!" << std::endl; // this is a sane resolution for a texture x = 32; y = 32; } mat.width = x; mat.height = y; } auto make_vertex = [](Plane plane, Material mat, vec3 vert, vec3 normal) -> Vertex { vec3 pos = vert * (1.0f/32.0f); vec2 tex = vec2{0.0f, 0.0f}; vec2 map = vec2{0.0f, 0.0f}; vec2 scl = {1.0f/plane.x_scale, 1.0f/plane.y_scale}; vec2 off = {plane.x_offset * plane.x_scale, -plane.y_offset * plane.y_scale}; if (abs(glm::dot(vec3(1.0f, 0.0f, 0.0f), normal))>0.5f) { map = {vert.y, vert.z}; vert = quat(vec3(-plane.angle * std::numbers::pi/180.0f, 0.0f, 0.0f)) * vert; tex = vec2{scl.x * (vert.y+off.x) * (1.0f/(float)mat.width), scl.y * (vert.z+off.y) * (1.0f/(float)mat.height)}; } if (abs(glm::dot(vec3(0.0f, 1.0f, 0.0f), normal))>0.5f) { map = {vert.x, vert.z}; vert = quat(vec3(0.0f, plane.angle * std::numbers::pi/180.0f, 0.0f)) * vert; tex = vec2{scl.x * (vert.x+off.x) * (1.0f/(float)mat.width), scl.y * (vert.z+off.y) * (1.0f/(float)mat.height)}; } if (abs(glm::dot(vec3(0.0f, 0.0f, 1.0f), normal))>0.5f) { map = {vert.x, vert.y}; vert = quat(vec3(0.0f, 0.0f, -plane.angle * std::numbers::pi/180.0f)) * vert; tex = vec2{scl.x * (vert.x+off.x) * (1.0f/(float)mat.width), scl.y * (vert.y+off.y) * (1.0f/(float)mat.height)}; } return { {pos.x, pos.z, -pos.y}, {normal.x, normal.z, -normal.y}, tex, map / 32.0f }; }; for (auto& brush : entity.brushes) { for (auto& poly : brush.polys) { if (poly.edges.size() < 3) continue; if (!skip_nodraw && poly.plane.material == "dev/nodraw") continue; uint32_t mat = 0; for (int i = 0 ; i < entity.materials.size(); i++) { if (entity.materials[i].name == poly.plane.material) mat = i; } vec3 eq = PlaneToEquation(poly.plane); vec3 pivot = poly.edges[0].p1; uint32_t p0 = entity.vertices.size(); entity.vertices.push_back(make_vertex(poly.plane, entity.materials[mat], pivot, -eq)); for (auto& edge : poly.edges) { if (edge.p1 == pivot || edge.p2 == pivot) { continue; } // dumb hack. sometimes we generate polygons with no area, so // this part should yeet them before they get written to disk vec3 pp1 = glm::normalize(edge.p1 - pivot); vec3 pp2 = glm::normalize(edge.p2 - pivot); if (glm::dot(pp1, pp2) == 1.0f) { continue; } uint32_t p1 = entity.vertices.size(); uint32_t p2 = entity.vertices.size() + 1; entity.vertices.push_back(make_vertex(poly.plane, entity.materials[mat], edge.p1, -eq)); entity.vertices.push_back(make_vertex(poly.plane, entity.materials[mat], edge.p2, -eq)); if (glm::dot(glm::normalize(glm::cross(edge.p1-pivot, edge.p2-pivot)), vec3(eq)) < 0.0f) { entity.indices.push_back({p0, p1, p2, mat}); } else { entity.indices.push_back({p0, p2, p1, mat}); } } } } std::cout << "done!" << std::endl; } // + --------------------------------------------------------------------- + // | | // | MIDPOINT CENTERING | // | | // + --------------------------------------------------------------------- + std::cout << "Midpoint recentering... " << std::flush; for (auto& entity : entities) { if (entity.name == worldspawn_name) continue; vec3 aabb_min = entity.brushes[0].hull[0]; vec3 aabb_max = aabb_min; for (auto& brush : entity.brushes) { for (auto& point : brush.hull) { aabb_min = MergeAABBMin(aabb_min, point); aabb_max = MergeAABBMax(aabb_max, point); } } entity.origin = glm::mix(aabb_min, aabb_max, 0.5f); for (auto& brush : entity.brushes) { for (auto& point : brush.hull) { point -= entity.origin; } } for (auto& vertex : entity.vertices) { vertex.pos -= entity.origin; } } std::cout << "done!" << std::endl; // +-----------------------------------------------------------------------+ // + + // + MODEL WRITER + // + + // +-----------------------------------------------------------------------+ if (!skip_model) for (size_t i = 0; i < entities.size(); i++) { auto& entity = entities[i]; std::string path = "data/models/"; path += entity.name; path += ".stmdl"; File output(path.c_str(), File::WRITE); if (!output.is_open()) { std::cout << "Error writing to model file " << path << std::endl; continue; } std::cout << "[" << (i + 1) << "/" << entities.size() << "] Writing " << entity.name << " 3D model to disk..." << std::flush; const bool needs_origin = entity.origin != vec3(0.0f, 0.0f, 0.0f); output.write_name("STMDLv1"); output.write_uint32(entity.vertices.size()); output.write_uint32(entity.indices.size()); output.write_uint32(entity.materials.size()); output.write_uint32(needs_origin ? 1 : 0); output.write_newline(); if (needs_origin) { output.write_name("origin"); output.write_float32(entity.origin.x); output.write_float32(entity.origin.y); output.write_float32(entity.origin.z); output.write_newline(); } for (auto& mat : entity.materials) { output.write_name(mat.name); output.write_newline(); } for (auto& vertex : entity.vertices) { output.write_float32(vertex.pos.x); output.write_float32(vertex.pos.y); output.write_float32(vertex.pos.z); output.write_float32(vertex.nrm.x); output.write_float32(vertex.nrm.y); output.write_float32(vertex.nrm.z); output.write_float32(vertex.tex.x); output.write_float32(vertex.tex.y); output.write_float32(vertex.map.x); output.write_float32(vertex.map.y); output.write_newline(); } for (auto& index : entity.indices) { output.write_uint32(index.v1); output.write_uint32(index.v2); output.write_uint32(index.v3); output.write_uint32(index.mat); output.write_newline(); } std::cout << "done!" << std::endl; } if (!skip_collision) for (size_t i = 0; i < entities.size(); i++) { auto& entity = entities[i]; std::string path = "data/models/"; path += entity.name; path += ".collmdl"; File file(path.c_str(), File::WRITE); if (!file.is_open()) { std::cout << "Error writing to model file " << path << std::endl; continue; } std::cout << "[" << (i + 1) << "/" << entities.size() << "] Writing " << entity.name << " collision model to disk..." << std::flush; for (const auto& brush : entity.brushes) { if (!brush.hull.size()) continue; file.write_name("cloud"); file.write_uint64(brush.hull.size()); file.write_newline(); for (const auto& point : brush.hull) { file.write_float32(point.x); file.write_float32(point.y); file.write_float32(point.z); file.write_newline(); } } std::cout << "done!" << std::endl; } std::cout << "Finished!" << std::endl; return 0; } ================================================ FILE: devtools/tmap/engine_libs.cpp ================================================ #include #include #include #include #include #include #include #include ================================================ FILE: devtools/tmap/main.cpp ================================================ // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. // Tramway SDK -- Lightmap packer #include #include #include #include #include #include #include #include #include using namespace tram; struct Vertex { vec3 pos; vec3 nrm; vec2 tex; vec2 map; uint32_t mat; }; struct Triangle { uint32_t v1, v2, v3; }; bool VertexCanMerge(const Vertex& a, const Vertex& b) { return a.pos == b.pos && a.nrm == b.nrm && a.tex == b.tex && a.mat == b.mat; } int XAtlasPrint(const char* format, ...) { va_list arg; va_start(arg, format); printf("XAtlas: "); const int result = vprintf(format, arg); va_end(arg); return result; } int main(int argc, const char** argv) { std::cout << "Tramway SDK -- Lightmap packer" << std::endl; if (argc < 3) { std::cout << "Usage: tmap [options]"; std::cout << "\n\nArguments:"; std::cout << "\n \t\tName of the model, which will be packed"; std::cout << "\n is the size of the lightmap, in pixels"; std::cout << "\n\nOptions:"; std::cout << "\n -pad Padding of lightmap segments, in pixels"; std::cout << "\n -density Number of texels per meter"; return 0; } const char* model_name = argv[1]; int lightmap_size = atoi(argv[2]); int lightmap_padding = 2; int lightmap_density = 4; if ((lightmap_size & (lightmap_size - 1)) != 0 || lightmap_size < 1) { std::cout << "Lightmap size has to be a power of two." << std::endl; return 0; } for (int i = 3; i < argc; i++) { if (strcmp(argv[i], "-pad") == 0) { lightmap_padding = atoi(argv[++i]); } if (strcmp(argv[i], "-density") == 0) { lightmap_density = atoi(argv[++i]); } } // +-----------------------------------------------------------------------+ // + + // + MODEL LOADER + // + + // +-----------------------------------------------------------------------+ std::string model_path = "data/models/"; model_path += (const char*)model_name; model_path += ".stmdl"; File file(model_path.c_str(), File::READ); if (!file.is_open()) { std::cout << "Error opening model file " << model_path << std::endl; return 1; } name_t header = file.read_name(); if (header != "STMDLv1") { std::cout << "Unrecognized header " << header << " in file " << model_path << std::endl; return 1; } int vrt_c = file.read_int32(); int tri_c = file.read_int32(); int mat_c = file.read_int32(); int metadata_count = file.read_int32(); vec3 origin = {0.0f, 0.0f, 0.0f}; float near = 0.0f; float far = INFINITY; for (int i = 0; i < metadata_count; i++) { name_t field = file.read_name(); if (field == "lightmap") { // I think that we just ignore this for now file.read_int32(); file.read_int32(); } else if (field == "near") { near = file.read_float32(); } else if (field == "far") { far = file.read_float32(); } else if (field == "origin") { origin = {file.read_float32(), file.read_float32(), file.read_float32()}; } else { std::cout << "File" << model_path << "has unrecognized metadata" << field << "skipping entry" << std::endl; file.skip_linebreak(); } } std::vector materials; for (int i = 0; i < mat_c; i++) { materials.push_back(file.read_name()); } std::vector vertices; for (int i = 0; i < vrt_c; i++) { Vertex v; v.pos = {file.read_float32(), file.read_float32(), file.read_float32()}; v.nrm = {file.read_float32(), file.read_float32(), file.read_float32()}; v.tex = {file.read_float32(), file.read_float32()}; v.map = {file.read_float32(), file.read_float32()}; vertices.push_back(v); } std::vector triangles; for (int i = 0; i < tri_c; i++) { Triangle t; t.v1 = file.read_int32(); t.v2 = file.read_int32(); t.v3 = file.read_int32(); uint32_t mat = file.read_int32(); vertices[t.v1].mat = mat; vertices[t.v2].mat = mat; vertices[t.v3].mat = mat; triangles.push_back(t); } std::cout << "Loaded model " << model_name << ", it has " << vrt_c << " verts, " << tri_c << " tris, " << mat_c << " materials." << std::endl; std::vector merged_vertices; // similar vertices merged std::map merged_mapping; // mapping from unmerged to merged for (int v = 0; v < vertices.size(); v++) { int merge_index = -1; for (int m = 0; m < merged_vertices.size(); m++) { if (VertexCanMerge(vertices[v], merged_vertices[m])) { merge_index = m; break; } } if (merge_index == -1) { merge_index = merged_vertices.size(); merged_vertices.push_back(vertices[v]); } merged_mapping[v] = merge_index; } int vert_decrease = vertices.size() - merged_vertices.size(); float vert_decrese_prop = (float)vert_decrease / (float)vertices.size(); std::cout << "Merged " << vert_decrease << " vertices, " << vert_decrese_prop * 100.0f << "% decrease." << std::endl; for (auto& tri : triangles) { tri.v1 = merged_mapping[tri.v1]; tri.v2 = merged_mapping[tri.v2]; tri.v3 = merged_mapping[tri.v3]; } std::swap(merged_vertices, vertices); // +-----------------------------------------------------------------------+ // + + // + PACKER + // + + // +-----------------------------------------------------------------------+ // create atlas xatlas::SetPrint(XAtlasPrint, true); xatlas::Atlas* atlas = xatlas::Create(); // add in vertices and indices xatlas::MeshDecl meshDecl; meshDecl.vertexCount = vertices.size(); meshDecl.vertexPositionData = &vertices[0].pos; meshDecl.vertexPositionStride = sizeof(Vertex); meshDecl.vertexNormalData = &vertices[0].nrm; meshDecl.vertexNormalStride = sizeof(Vertex); meshDecl.vertexUvData = &vertices[0].map; meshDecl.vertexUvStride = sizeof(Vertex); meshDecl.indexCount = triangles.size() * 3; meshDecl.indexData = &triangles[0]; meshDecl.indexFormat = xatlas::IndexFormat::UInt32; xatlas::AddMeshError error = xatlas::AddMesh(atlas, meshDecl, 0); // idk what 0 hint if (error != xatlas::AddMeshError::Success) { xatlas::Destroy(atlas); std::cout << "Error packing: " << xatlas::StringForEnum(error) << std::endl; return 0; } xatlas::AddMeshJoin(atlas); xatlas::ChartOptions chart_options = xatlas::ChartOptions(); //chart_options.useInputMeshUvs = true; //chart_options.maxCost = 100000.0f; //chart_options.maxIterations = 160; xatlas::ComputeCharts(atlas, chart_options); xatlas::PackOptions pack_options = xatlas::PackOptions(); //pack_options.texelsPerUnit = 16.0f; pack_options.padding = lightmap_padding; pack_options.resolution = lightmap_size; pack_options.texelsPerUnit = lightmap_density; //pack_options.bilinear = true; //pack_options.blockAlign = true; //pack_options.bruteForce = true; //pack_options.rotateChartsToAxis = false; //pack_options.rotateCharts = false; xatlas::PackCharts(atlas, pack_options); //xatlas::Generate(atlas, chart_options, pack_options); // +-----------------------------------------------------------------------+ // + + // + MODEL WRITER + // + + // +-----------------------------------------------------------------------+ File output(model_path.c_str(), File::WRITE); if (!output.is_open()) { std::cout << "Error writing to model file " << model_path << std::endl; return 0; } std::cout << "Lightmap packed! Writing to disk..." << std::flush; const xatlas::Mesh& new_mesh = atlas->meshes[0]; int metadatas = 1; // at least lightmap size if (near != 0.0f) metadatas++; if (far != INFINITY) metadatas++; if (origin != vec3(0.0f, 0.0f, 0.0f)) metadatas++; output.write_name("STMDLv1"); output.write_uint32(new_mesh.vertexCount); output.write_uint32(new_mesh.indexCount / 3); output.write_uint32(mat_c); output.write_int32(metadatas); output.write_newline(); output.write_name("lightmap"); output.write_int32(lightmap_size); output.write_int32(lightmap_size); output.write_newline(); if (near != 0.0f) { output.write_name("near"); output.write_float32(near); output.write_newline(); } if (far != INFINITY) { output.write_name("far"); output.write_float32(far); output.write_newline(); } if (origin != vec3(0.0f, 0.0f, 0.0f)) { output.write_name("origin"); output.write_float32(origin.x); output.write_float32(origin.y); output.write_float32(origin.z); output.write_newline(); } for (auto& mat : materials) { output.write_name(mat); output.write_newline(); } for (uint32_t i = 0; i < new_mesh.vertexCount; i++) { uint32_t input = new_mesh.vertexArray[i].xref; output.write_float32(vertices[input].pos.x); output.write_float32(vertices[input].pos.y); output.write_float32(vertices[input].pos.z); output.write_float32(vertices[input].nrm.x); output.write_float32(vertices[input].nrm.y); output.write_float32(vertices[input].nrm.z); output.write_float32(vertices[input].tex.x); output.write_float32(vertices[input].tex.y); output.write_float32((new_mesh.vertexArray[i].uv[0]) / (float)atlas->width); output.write_float32((new_mesh.vertexArray[i].uv[1]) / (float)atlas->height); output.write_newline(); } for (uint32_t i = 0; i < new_mesh.indexCount; i++) { output.write_uint32(new_mesh.indexArray[i]); if (i % 3 != 2) continue; uint32_t input = new_mesh.vertexArray[new_mesh.indexArray[i]].xref; output.write_uint32(vertices[input].mat); output.write_newline(); } std::cout << "done!" << std::endl; return 0; } ================================================ FILE: devtools/trad/engine_libs.cpp ================================================ #include #include #include #include #include #include #include ================================================ FILE: devtools/trad/main.cpp ================================================ // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. // Tramway SDK -- Radiosity tool // TODO: // - add option to use multiple worldcells in the same bake // - make program go vroom vroom // - add indirect lighting // - add emissive materials // - go through ray tracing gems and see if anything is useful in there #include #include #include #include #include #define STB_IMAGE_WRITE_IMPLEMENTATION #include using namespace tram; struct Entity; struct Vertex { vec3 pos; vec3 nrm; vec2 tex; vec2 map; vec2 exp; bool operator==(const Vertex& other) { return pos == other.pos && nrm == other.nrm && tex == other.tex && map == other.map; } }; struct Triangle { Vertex v1, v2, v3; name_t mat; }; struct Texel { vec3 color; }; struct SceneTriangle { Triangle triangle; Entity* entity; // * visibility matrix * // * skip matrix * // what else? }; struct Lightmap { Lightmap() { t = nullptr; b = nullptr; w = 0; h = 0; } Lightmap(int width, int height) { t = new Texel[width*height]; b = new bool[width*height]; for (int i = 0; i < width*height; i++) { t[i] = Texel {.color = {1.0f, 0.5f, 0.5f}}; b[i] = false; } w = width; h = height; } void Blit(int x, int y, Texel tex) { if (x < 0 || y < 0 || x >= w || y >= h) return; t[y*w+x] = tex; b[y*w+x] = true; } void BlitMix(int x, int y, Texel tex) { if (x < 0 || y < 0 || x >= w || y >= h) return; t[y*w+x].color += tex.color; b[y*w+x] = true; } Texel Sample(int x, int y) { if (x < 0) x = 0; if (y < 0) y = 0; if (x >= w) x = w - 1; if (y >= h) y = h - 1; return t[y*w+x]; } bool Blitted(int x, int y) { if (x < 0) x = 0; if (y < 0) y = 0; if (x >= w) x = w - 1; if (y >= h) y = h - 1; return b[y*w+x]; } void Fill(int pad) { for (int x = 0; x < w; x++) { for (int y = 0; y < h; y++) { if (Blitted(x, y)) continue; float nearest = INFINITY; vec3 color = {0.0f, 0.0f, 0.0f}; for (int s_x = x-pad; s_x < x+pad+1; s_x++) { for (int s_y = y-pad; s_y < y+pad+1; s_y++) { if (!Blitted(s_x, s_y)) continue; float dist = glm::distance(vec2(x, y), vec2(s_x, s_y)); if (dist < nearest) { nearest = dist; color = Sample(s_x, s_y).color; } } } if (nearest == INFINITY) continue; t[y*w+x].color = color; } } } Texel* t; bool* b; int w, h; }; struct Node { vec3 position; bool has_light; bool has_reflection; vec3 l00, l1m1, l10, l11, l2m2, l2m1, l20, l21, l22; }; struct Edge { uint32_t from; uint32_t to; }; struct Model { int lightmap_width; int lightmap_height; std::vector materials; std::vector vertices; std::vector triangles; }; struct Light { vec3 pos; vec3 color; float radius; uint32_t entity; }; struct Entity { vec3 pos; quat rot; uint32_t flags; uint32_t id; name_t name; name_t model_name; name_t lightmap_name; bool cast_shadows; Model model; Lightmap lightmap; }; void EvaluateSphericalHarmonic(Node& probe, vec3 direction, vec3 color) { const float x = direction.x; const float y = direction.y; const float z = direction.z; const float y00 = sqrtf(1.0f / 3.14f) / 2.0f; const float y1m1 = sqrtf(3.0f / (4.0f * 3.14f)) * y; const float y10 = sqrtf(3.0f / (4.0f * 3.14f)) * z; const float y11 = sqrtf(3.0f / (4.0f * 3.14f)) * x; const float y2m2 = (sqrtf(15.0f/3.14f) / 2.0f) * x * y; const float y2m1 = (sqrtf(15.0f/3.14f) / 2.0f) * y * z; const float y20 = (sqrtf(5.0f / 3.14f) / 4.0f) * (2.0f * z * z - x * x - y * y); const float y21 = (sqrtf(15.0f/3.14f) / 2.0f) * x * z; const float y22 = (sqrtf(15.0f/3.14f) / 4.0f) * (x * x - y * y); probe.l00 += y00 * color; probe.l1m1 += y1m1 * color; probe.l10 += y10 * color; probe.l11 += y11 * color; probe.l2m2 += y2m2 * color; probe.l2m1 += y2m1 * color; probe.l20 += y20 * color; probe.l21 += y21 * color; probe.l22 += y22 * color; } Model LoadModel(const char* model_name) { std::string model_path = "data/models/"; model_path += (const char*)model_name; model_path += ".stmdl"; File file(model_path.c_str(), File::READ); if (!file.is_open()) { std::cout << "Error opening model file " << model_path << std::endl; abort(); } name_t header = file.read_name(); if (header != "STMDLv1") { std::cout << "Unrecognized header " << header << " in " << model_path << std::endl; abort(); } int vrt_c = file.read_int32(); int tri_c = file.read_int32(); int mat_c = file.read_int32(); int metadata_count = file.read_int32(); int lightmap_width = 0; int lightmap_height = 0; for (int i = 0; i < metadata_count; i++) { name_t field = file.read_name(); if (field == "lightmap") { lightmap_width = file.read_int32(); lightmap_height = file.read_int32(); } else if (field == "near") { file.read_float32(); } else if (field == "far") { file.read_float32(); } else if (field == "origin") { file.read_float32(); file.read_float32(); file.read_float32(); } else { std::cout << "File" << model_path << "has unrecognized metadata" << field << "skipping entry" << std::endl; file.skip_linebreak(); } } std::vector materials; for (int i = 0; i < mat_c; i++) { materials.push_back(file.read_name()); } std::vector vertices; for (int i = 0; i < vrt_c; i++) { Vertex v; v.pos = {file.read_float32(), file.read_float32(), file.read_float32()}; v.nrm = {file.read_float32(), file.read_float32(), file.read_float32()}; v.tex = {file.read_float32(), file.read_float32()}; v.map = {file.read_float32(), file.read_float32()}; vertices.push_back(v); } std::vector triangles; for (int i = 0; i < tri_c; i++) { Triangle t; t.v1 = vertices[file.read_int32()]; t.v2 = vertices[file.read_int32()]; t.v3 = vertices[file.read_int32()]; t.mat = materials[file.read_int32()]; triangles.push_back(t); } std::cout << "Loaded model " << model_name << ", it has " << vrt_c << " verts, " << tri_c << " tris, " << mat_c << " materials." << std::endl; return {lightmap_width, lightmap_height, materials, vertices, triangles}; } float GetTriangleArea(const vec2& p1, const vec2& p2, const vec2& p3) { return 0.5 * (p1.x * (p2.y - p3.y) + p2.x * (p3.y - p1.y) + p3.x * (p1.y - p2.y)); } vec3 GetBarycentric(Triangle tri, float x, float y) { const vec2 v1 = tri.v2.map - tri.v1.map; const vec2 v2 = tri.v3.map - tri.v1.map; const vec2 v3 = vec2(x, y) - tri.v1.map; const float dominator = v1.x * v2.y - v2.x * v1.y; const float d2 = (v3.x * v2.y - v2.x * v3.y) / dominator; const float d3 = (v1.x * v3.y - v3.x * v1.y) / dominator; const float d1 = 1.0f - d2 - d3; return {d1, d2, d3}; } static vec3 TriangleAABBMin (Triangle t) { return { t.v1.pos.x < t.v2.pos.x ? (t.v1.pos.x < t.v3.pos.x ? t.v1.pos.x : t.v3.pos.x) : (t.v2.pos.x < t.v3.pos.x ? t.v2.pos.x : t.v3.pos.x), t.v1.pos.y < t.v2.pos.y ? (t.v1.pos.y < t.v3.pos.y ? t.v1.pos.y : t.v3.pos.y) : (t.v2.pos.y < t.v3.pos.y ? t.v2.pos.y : t.v3.pos.y), t.v1.pos.z < t.v2.pos.z ? (t.v1.pos.z < t.v3.pos.z ? t.v1.pos.z : t.v3.pos.z) : (t.v2.pos.z < t.v3.pos.z ? t.v2.pos.z : t.v3.pos.z) }; } static vec3 TriangleAABBMax (Triangle t) { return { t.v1.pos.x > t.v2.pos.x ? (t.v1.pos.x > t.v3.pos.x ? t.v1.pos.x : t.v3.pos.x) : (t.v2.pos.x > t.v3.pos.x ? t.v2.pos.x : t.v3.pos.x), t.v1.pos.y > t.v2.pos.y ? (t.v1.pos.y > t.v3.pos.y ? t.v1.pos.y : t.v3.pos.y) : (t.v2.pos.y > t.v3.pos.y ? t.v2.pos.y : t.v3.pos.y), t.v1.pos.z > t.v2.pos.z ? (t.v1.pos.z > t.v3.pos.z ? t.v1.pos.z : t.v3.pos.z) : (t.v2.pos.z > t.v3.pos.z ? t.v2.pos.z : t.v3.pos.z) }; } vec3 FindNearestIntersection(const AABBTree& tree, const std::vector& tris, const vec3& pos, const vec3& dir, float distance_limit, bool frontface = true, bool backface = true, uint32_t* index = nullptr) { uint32_t nearest = tree.FindIntersection(pos, dir, distance_limit, [&](vec3 pos, vec3 dir, uint32_t index) { if (!backface || !frontface) { vec3 v1v2 = glm::normalize(tris[index].triangle.v2.pos - tris[index].triangle.v1.pos); vec3 v1v3 = glm::normalize(tris[index].triangle.v3.pos - tris[index].triangle.v1.pos); vec3 normal = glm::cross(v1v2, v1v3); float facing = glm::dot(normal, dir); // hit backface if (facing > 0.0f && !backface) return INFINITY; // hit frontface if (facing < 0.0f && !frontface) return INFINITY; } vec3 intersection = RayTriangleIntersection(pos, dir, tris[index].triangle.v1.pos, tris[index].triangle.v2.pos, tris[index].triangle.v3.pos); if (intersection.x == INFINITY) return INFINITY; return glm::distance(intersection, pos); }); if (nearest == (uint32_t)-1) { return {INFINITY, INFINITY, INFINITY}; } if (index) *index = nearest; return RayTriangleIntersection(pos, dir, tris[nearest].triangle.v1.pos, tris[nearest].triangle.v2.pos, tris[nearest].triangle.v3.pos); }; void MovePositionTowardTriangleCenter(const AABBTree& tree, const std::vector& tris, vec3& pos, const vec3& normal, vec3 mid) { // check if clear path to center vec3 mid_dir = glm::normalize(mid - pos); float mid_dist = glm::distance(mid, pos); // I have no idea what this does but okay pos += 0.05f * mid_dir; uint32_t intersect; vec3 nearest = FindNearestIntersection(tree, tris, pos, mid_dir, mid_dist, true, true, &intersect); if (glm::distance(nearest, pos) < mid_dist) { //return {1.0f, 0.0f, 0.0f}; pos += mid_dir * 0.3f; //pos = nearest + 0.01f * normal; //pos += mid_dir * (glm::distance(nearest, pos) + 0.02f); //pos = nearest + (mid_dir * 0.1f); } } void MovePositionOutsideMesh(const AABBTree& tree, const std::vector& tris, vec3& pos, const vec3& normal, const vec3& tangent, const vec3& bitangent, float bias = 0.0f) { const float dir_amount = 0.25f; vec3 dir1 = tangent; vec3 dir2 = -tangent; vec3 dir3 = bitangent; vec3 dir4 = -bitangent; uint32_t nearest1 = -1; uint32_t nearest2 = -1; uint32_t nearest3 = -1; uint32_t nearest4 = -1; // we want the find the furthest intersection, so we're reversing the ray // direction and casting them from the other end vec3 point1 = FindNearestIntersection(tree, tris, pos + dir_amount * dir1, -dir1, dir_amount + bias, true, false, &nearest1); vec3 point2 = FindNearestIntersection(tree, tris, pos + dir_amount * dir2, -dir2, dir_amount + bias, true, false, &nearest2); vec3 point3 = FindNearestIntersection(tree, tris, pos + dir_amount * dir3, -dir3, dir_amount + bias, true, false, &nearest3); vec3 point4 = FindNearestIntersection(tree, tris, pos + dir_amount * dir4, -dir4, dir_amount + bias, true, false, &nearest4); float total_point = 0.0f; vec3 total_normal = {0.0f, 0.0f, 0.0f}; int intersects = 0; if (float dist = glm::distance(pos, point1); dist < dir_amount + bias) { total_point += dist; intersects++; vec3 v1v2 = glm::normalize(tris[nearest1].triangle.v2.pos - tris[nearest1].triangle.v1.pos); vec3 v1v3 = glm::normalize(tris[nearest1].triangle.v3.pos - tris[nearest1].triangle.v1.pos); vec3 intersect_normal = glm::normalize(glm::cross(v1v2, v1v3)); if (glm::dot(intersect_normal, normal) > -0.1f) { total_normal += intersect_normal; } } if (float dist = glm::distance(pos, point2); dist < dir_amount + bias) { total_point += dist; intersects++; vec3 v1v2 = glm::normalize(tris[nearest2].triangle.v2.pos - tris[nearest2].triangle.v1.pos); vec3 v1v3 = glm::normalize(tris[nearest2].triangle.v3.pos - tris[nearest2].triangle.v1.pos); vec3 intersect_normal = glm::normalize(glm::cross(v1v2, v1v3)); if (glm::dot(intersect_normal, normal) > -0.1f) { total_normal += intersect_normal; } } if (float dist = glm::distance(pos, point3); dist < dir_amount + bias) { total_point += dist; intersects++; vec3 v1v2 = glm::normalize(tris[nearest3].triangle.v2.pos - tris[nearest3].triangle.v1.pos); vec3 v1v3 = glm::normalize(tris[nearest3].triangle.v3.pos - tris[nearest3].triangle.v1.pos); vec3 intersect_normal = glm::normalize(glm::cross(v1v2, v1v3)); if (glm::dot(intersect_normal, normal) > -0.1f) { total_normal += intersect_normal; } } if (float dist = glm::distance(pos, point4); dist < dir_amount + bias) { total_point += dist; intersects++; vec3 v1v2 = glm::normalize(tris[nearest4].triangle.v2.pos - tris[nearest4].triangle.v1.pos); vec3 v1v3 = glm::normalize(tris[nearest4].triangle.v3.pos - tris[nearest4].triangle.v1.pos); vec3 intersect_normal = glm::normalize(glm::cross(v1v2, v1v3)); if (glm::dot(intersect_normal, normal) > -0.1f) { total_normal += intersect_normal; } } if (!intersects) return; float point_div = intersects > 2 ? 2 : intersects; pos += (total_normal/(float)intersects) * (total_point/point_div + 0.1f); } bool IsTexelInShadow(const AABBTree& tree, const std::vector& tris, const vec3& texel_pos, const vec3& light_pos) { float light_dist = glm::distance(light_pos, texel_pos); vec3 light_dir = glm::normalize(light_pos - texel_pos); vec3 nearest = FindNearestIntersection(tree, tris, texel_pos, light_dir, light_dist); return light_dist > glm::distance(nearest, texel_pos); } vec3 FindTexelColorFromLight(const Light& light, const vec3& pos, const vec3& normal) { const float light_dist = glm::distance(light.pos, pos); return light.color * glm::max(glm::dot(normal, glm::normalize(light.pos - pos)), 0.0f) * (1.0f / (1.0f + 0.09f * light_dist + 0.032f * (light_dist * light_dist))); } struct RasterParams { int l_w; int l_h; float expand; }; void RasterizeTriangle(RasterParams p, Triangle tri, auto raster_f) { // expand the triangle a little bit float dist = p.expand * ( 1.0f / (float)p.l_h ); vec2 mid = (tri.v1.map + tri.v2.map + tri.v3.map) / 3.0f; tri.v1.exp = tri.v1.map + dist * glm::sign(tri.v1.map - mid); tri.v2.exp = tri.v2.map + dist * glm::sign(tri.v2.map - mid); tri.v3.exp = tri.v3.map + dist * glm::sign(tri.v3.map - mid); tri.v1.exp = glm::clamp(tri.v1.exp, 0.0f, 1.0f); tri.v2.exp = glm::clamp(tri.v2.exp, 0.0f, 1.0f); tri.v3.exp = glm::clamp(tri.v3.exp, 0.0f, 1.0f); // find the lowest, highest and middle vertices Vertex lowest = tri.v1; if (tri.v1.map.y < lowest.map.y) lowest = tri.v1; if (tri.v2.map.y < lowest.map.y) lowest = tri.v2; if (tri.v3.map.y < lowest.map.y) lowest = tri.v3; Vertex highest = tri.v1; if (tri.v1.map.y > highest.map.y) highest = tri.v1; if (tri.v2.map.y > highest.map.y) highest = tri.v2; if (tri.v3.map.y > highest.map.y) highest = tri.v3; // this should not happen! //if (lowest == highest) std::cout << "what the fuck" << std::endl; if (lowest == highest) return; Vertex middle; if ((tri.v2 == lowest || tri.v3 == lowest) && (tri.v2 == highest || tri.v3 == highest)) middle = tri.v1; if ((tri.v1 == lowest || tri.v3 == lowest) && (tri.v1 == highest || tri.v3 == highest)) middle = tri.v2; if ((tri.v1 == lowest || tri.v2 == lowest) && (tri.v1 == highest || tri.v2 == highest)) middle = tri.v3; // position of vertices on the raster image int lowest_y = floor(lowest.exp.y * (float)p.l_h); int middle_y = floor(middle.exp.y * (float)p.l_h); int highest_y = floor(highest.exp.y * (float)p.l_h); int lowest_x = floor(lowest.exp.x * (float)p.l_w); int middle_x = floor(middle.exp.x * (float)p.l_w); int highest_x = floor(highest.exp.x * (float)p.l_w); // compute raster line counts int low_high_lines = highest_y - lowest_y; int low_mid_lines = middle_y - lowest_y; int mid_high_lines = highest_y - middle_y; // compute raster directions float low_high_dir = (float)(highest_x - lowest_x) / (float)low_high_lines; float low_mid_dir = (float)(middle_x - lowest_x) / (float)low_mid_lines; float mid_high_dir = (float)(highest_x - middle_x) / (float)mid_high_lines; float left_pos = lowest_x; float right_pos = lowest_x; // stupid bug fix if (!low_mid_lines) { left_pos = lowest_x; right_pos = middle_x; } for (int row = lowest_y; row < middle_y; row++) { left_pos += low_high_dir; right_pos += low_mid_dir; int from = left_pos; int to = right_pos; if (from > to) std::swap(from, to); for (int col = from; col < to; col++) { vec3 d = GetBarycentric(tri, ((float)col + 0.5f) / (float)p.l_w, ((float)row + 0.5f) / (float)p.l_h); const float thr = 1.0f/3.0f; vec3 pos = d.x * tri.v1.pos + d.y * tri.v2.pos + d.z * tri.v3.pos; vec3 nrm = d.x * tri.v1.nrm + d.y * tri.v2.nrm + d.z * tri.v3.nrm; vec3 mid = thr * tri.v1.pos + thr * tri.v2.pos + thr * tri.v3.pos; raster_f(col, row, pos, nrm, mid); } } for (int row = middle_y; row < highest_y; row++) { left_pos += low_high_dir; right_pos += mid_high_dir; int from = left_pos; int to = right_pos; if (from > to) std::swap(from, to); for (int col = from; col < to; col++) { vec3 d = GetBarycentric(tri, ((float)col + 0.5f) / (float)p.l_w, ((float)row + 0.5f) / (float)p.l_h); const float thr = 1.0f/3.0f; vec3 pos = d.x * tri.v1.pos + d.y * tri.v2.pos + d.z * tri.v3.pos; vec3 nrm = d.x * tri.v1.nrm + d.y * tri.v2.nrm + d.z * tri.v3.nrm; vec3 mid = thr * tri.v1.pos + thr * tri.v2.pos + thr * tri.v3.pos; raster_f(col, row, pos, nrm, mid); } } } int main(int argc, const char** argv) { stbi_flip_vertically_on_write(true); std::cout << "Tramway SDK -- Radiosity lightmapper v0.1.1" << std::endl; if (argc < 2 || argc == 2 && strcmp(argv[1], "--help") == 0) { std::cout << "\nUsage: trad [options]"; std::cout << "\n\nArguments:\n"; std::cout << " \t\tName of the worldcell which will be lightmapped"; std::cout << "\n\nOptions:\n"; std::cout << " -coords\t\tSets the color values of the lightmap to texel\n\t\t\tposition in 3D space instead of light value\n"; std::cout << " -verts\t\tDraws in a single pixel for each triangle vertex into\n\t\t\tthe lightmap\n"; std::cout << " -pad \t\tAdds a border around each triangle\n"; std::cout << " -exp \t\tExpands each triangle\n"; std::cout << " -scale \tScales down lightmap\n"; std::cout << " -fast\t\t\tDisables extra raycasts\n"; std::cout << " -fullbright\t\tSets each triangle's color to white\n"; std::cout << " -ambient \t\tSets ambient occlusion samples and ray length\n"; std::cout << " -worldspawn \tTreats the named entity as a worldspawn and allows it\n\t\t\tto cast shadows\n"; std::cout << "\nThis program should be run from project root, e.g. the "; std::cout << "worldcell file should be\naccessible through data/worldcells.cell relative path."; return 0; } const char* worldcell = argv[1]; bool paint_coords = false; bool paint_verts = false; bool force_fullbright = false; int ambient_occlusion = 0; float ambient_length = 1.0f; bool fast = false; int padding = 1; int expansion = 1; int scale = 1; std::vector worldspawns; // what we could do is we could add additional parameters, e.g. // - only entity to lightmap // - skip entity to lightmap // - override entity lightmap size for (int i = 2; i < argc; i++) { if (strcmp(argv[i], "-coords") == 0) { paint_coords = true; } if (strcmp(argv[i], "-verts") == 0) { paint_verts = true; } if (strcmp(argv[i], "-pad") == 0) { padding = atoi(argv[++i]); } if (strcmp(argv[i], "-exp") == 0) { expansion = atoi(argv[++i]); } if (strcmp(argv[i], "-scale") == 0) { scale = atoi(argv[++i]); } if (strcmp(argv[i], "-fast") == 0) { fast = true; } if (strcmp(argv[i], "-fullbright") == 0) { force_fullbright = true; } if (strcmp(argv[i], "-ambient") == 0) { ambient_occlusion = atoi(argv[++i]); ambient_length = atoi(argv[++i]); } if (strcmp(argv[i], "-worldspawn") == 0) { worldspawns.push_back(argv[++i]); } } std::vector entities; std::vector lights; std::vector nodes; std::vector edges; // +-----------------------------------------------------------------------+ // + + // + WORLDCELL LOADER + // + + // +-----------------------------------------------------------------------+ std::cout << "Loading worldcell " << worldcell << "... " << std::flush; std::string worldcell_path = "data/worldcells/"; worldcell_path += worldcell; worldcell_path += ".cell"; // this crashes if worldcell file doesn't exist // TODO: fix File cell(worldcell_path.c_str(), File::READ | File::PAUSE_LINE); if (!cell.is_open()) { std::cout << "\nError opening file: " << worldcell_path << "!" < scene_triangles; // load up all entity models for (auto& entity: entities) { // load up the model entity.model = LoadModel(entity.model_name); // check if it contains lightmap dimensions if (entity.model.lightmap_width == 0 || entity.model.lightmap_height == 0) { std::cout << "Model " << entity.model_name << " has invalid lightmap dimensions." << std::endl; std::cout << "Width " << entity.model.lightmap_width; std::cout << " and height " << entity.model.lightmap_height << std::endl; std::cout << "Run tmap to set the lightmap size in the model!" << std::endl; return 1; } std::cout << "Loaded " << entity.model_name << " for bake with"; std::cout << " a size of " << entity.model.lightmap_width; std::cout << " by " << entity.model.lightmap_height << " texels." << std::endl; } // allocate lightmaps and insert them into the scene tree for (auto& entity: entities) { // allocate lightmap entity.lightmap = Lightmap(entity.model.lightmap_width, entity.model.lightmap_height); // compute local space -> world space matrix mat4 matrix = PositionRotationToMatrix(entity.pos, entity.rot); // insert triangles into scene tree for (const auto& tri : entity.model.triangles) { SceneTriangle new_tri; new_tri.triangle.v1.pos = matrix * vec4(tri.v1.pos, 1.0f); new_tri.triangle.v2.pos = matrix * vec4(tri.v2.pos, 1.0f); new_tri.triangle.v3.pos = matrix * vec4(tri.v3.pos, 1.0f); new_tri.triangle.v1.nrm = matrix * vec4(tri.v1.nrm, 0.0f); new_tri.triangle.v2.nrm = matrix * vec4(tri.v2.nrm, 0.0f); new_tri.triangle.v3.nrm = matrix * vec4(tri.v3.nrm, 0.0f); new_tri.triangle.v1.tex = tri.v1.tex; new_tri.triangle.v2.tex = tri.v2.tex; new_tri.triangle.v3.tex = tri.v3.tex; new_tri.triangle.v1.map = tri.v1.map; new_tri.triangle.v2.map = tri.v2.map; new_tri.triangle.v3.map = tri.v3.map; new_tri.triangle.mat = tri.mat; new_tri.entity = &entity; if (entity.cast_shadows) scene_tree.InsertLeaf(scene_triangles.size(), TriangleAABBMin(new_tri.triangle), TriangleAABBMax(new_tri.triangle)); scene_triangles.push_back(new_tri); } } // +-----------------------------------------------------------------------+ // + + // + VISIBILITY CALCULATIONS + // + + // +-----------------------------------------------------------------------+ // TODO: implement // +-----------------------------------------------------------------------+ // + + // + RADIOSITY CALCULATIONS + // + + // +-----------------------------------------------------------------------+ if (lights.size() == 0) { std::cout << "Scene contains no lights!" << std::endl; force_fullbright = true; } // okay, so I think that we'll keep the first pass as-is. // as in, the following iteration through all of the scene_triangles is the // first radiosity pass. // after that we'll insert some additional, optional passes int last_dots = -1; // iterate through each triangle in the lightmap and rasterize it for (size_t i = 0; i < scene_triangles.size(); i++) { const auto& tri = scene_triangles[i]; // draw a progress bar in the command line float progress = (float)i / (float)scene_triangles.size(); int dots = ceil(progress * 62.0f); if (last_dots != dots) { std::cout << "\rComputing ["; for (int k = 0; k < 62; k++) std::cout << (k < dots ? (k % 9 == 8 ? ':' : '.') : ' '); std::cout << "] " << ceil(progress*100.0f) << "%" << std::flush; last_dots = dots; } auto& l = tri.entity->lightmap; RasterParams image_params = { l.w / scale, l.h / scale, (float)expansion }; if (paint_coords) { // rasterize triangle and set color to position RasterizeTriangle(image_params, tri.triangle, [&](int col, int row, vec3 pos, vec3 nrm, vec3 mid){ l.Blit(col, row, {pos}); }); } else if (force_fullbright && !ambient_occlusion) { // rasterize triangle to fullbright RasterizeTriangle(image_params, tri.triangle, [&](int col, int row, vec3 pos, vec3 nrm, vec3 mid){ l.Blit(col, row, {{1.0f, 1.0f, 1.0f}}); }); } else { // rasterize triangle and set color to light value RasterizeTriangle(image_params, tri.triangle, [&](int col, int row, vec3 pos, vec3 nrm, vec3 mid){ if (l.Blitted(col, row)) return; vec3 texel_color = {0.0f, 0.0f, 0.0f}; vec3 v1v2 = glm::normalize(tri.triangle.v2.pos - tri.triangle.v1.pos); vec3 v1v3 = glm::normalize(tri.triangle.v3.pos - tri.triangle.v1.pos); vec3 normal = glm::normalize(glm::cross(v1v2, v1v3)); vec3 tangent = glm::normalize(glm::cross(normal, v1v2)); vec3 bitangent = v1v2; // we might get a collision with the triangle, on which the texel is located // on, so we move it off of the surface a little bit vec3 shadow_pos = pos + 0.05f * nrm; mid += 0.05f * nrm; //if (!fast) MovePositionTowardTriangleCenter(scene_tree, scene_triangles, shadow_pos, nrm, mid); if (!fast) MovePositionOutsideMesh(scene_tree, scene_triangles, shadow_pos, normal, tangent, bitangent, 0.0f); if (!force_fullbright) for (const auto& light : lights) { const vec3 light_color = FindTexelColorFromLight(light, pos, nrm); const float epsilon = 1.0f / 256.0f; if (light_color.x < epsilon && light_color.y < epsilon && light_color.z < epsilon) { continue; } if (IsTexelInShadow(scene_tree, scene_triangles, shadow_pos, light.pos)) { continue; } texel_color += light_color; } if (ambient_occlusion) { MovePositionOutsideMesh(scene_tree, scene_triangles, shadow_pos, normal, tangent, bitangent, 0.1f); } float total_distance = 0.0f; for (int n = 0; n < ambient_occlusion; n++) { const float double_inv = (1.0f / (glm::golden_ratio() * glm::golden_ratio())); const float golden = glm::two_pi() * double_inv; // 1.0f is a scaling constant and 0.99f pulls the spiral in // so that it doesn't go coplanar with flat part of the hemisphere const float r = 0.99f * (1.0f * sqrtf((float)n)) / (1.0f * sqrtf((float)ambient_occlusion)); const float theta = golden * (float)n; const float x = r * sin(theta); const float y = r * cos(theta); const float z = sqrtf(1.0f - (x * x + y * y)); vec3 w = mat3(tangent, bitangent, normal) * vec3(x, y, z); vec3 nearest = FindNearestIntersection(scene_tree, scene_triangles, shadow_pos, w, ambient_length, true, true); float dist = glm::distance(shadow_pos, nearest); if (nearest.x == INFINITY || dist > ambient_length + 0.1f) { total_distance += 1.0f; continue; } total_distance += dist / ambient_length; } if (ambient_occlusion) { float inv_occlusion = total_distance / (float)ambient_occlusion; if (force_fullbright) { texel_color = {inv_occlusion, inv_occlusion, inv_occlusion}; } else { texel_color *= inv_occlusion; } } l.Blit(col, row, {texel_color}); }); } // paint in green dots in the triangle vertex positions if (paint_verts) { l.Blit(tri.triangle.v1.map.x * (float)l.w, tri.triangle.v1.map.y * (float)l.h, {{0.0f, 1.0f, 0.0f}}); l.Blit(tri.triangle.v2.map.x * (float)l.w, tri.triangle.v2.map.y * (float)l.h, {{0.0f, 1.0f, 0.0f}}); l.Blit(tri.triangle.v3.map.x * (float)l.w, tri.triangle.v3.map.y * (float)l.h, {{0.0f, 1.0f, 0.0f}}); } } for (auto& node : nodes) { int lights_added = 0; for (auto& light : lights) { if (IsTexelInShadow(scene_tree, scene_triangles, node.position, light.pos)) continue; vec3 direction = glm::normalize(light.pos - node.position); vec3 color = FindTexelColorFromLight(light, node.position, direction); EvaluateSphericalHarmonic(node, direction, color); lights_added++; // we could use an analytical approach here, but I am too eepy // when we'll implement radiosity, we'll have to use the numerical // approach anyways, since radiosity is a finite element method for (float x = 0.0f; x < 2.0f * 3.14f; x += 3.14f / 16.0f) { for (float y = 0.0f; y < 2.0f * 3.14f; y += 3.14f / 16.0f) { //vec3 direction = glm::normalize(light.pos - node.position); vec3 direction = glm::normalize(vec3{sinf(x), sinf(y), cosf(x)}); vec3 color = FindTexelColorFromLight(light, node.position, direction); //color = {0.1f, 0.1f, 0.1f}; EvaluateSphericalHarmonic(node, direction, color); lights_added++; } } } if (lights_added) { node.l00 *= (4.0f * 3.14f) / lights_added; node.l1m1 *= (4.0f * 3.14f) / lights_added; node.l10 *= (4.0f * 3.14f) / lights_added; node.l11 *= (4.0f * 3.14f) / lights_added; node.l2m2 *= (4.0f * 3.14f) / lights_added; node.l2m1 *= (4.0f * 3.14f) / lights_added; node.l20 *= (4.0f * 3.14f) / lights_added; node.l21 *= (4.0f * 3.14f) / lights_added; node.l22 *= (4.0f * 3.14f) / lights_added; } } std::cout << "\rComputing... done!\t\t\t\t\t\t\t " << std::endl; std::cout << "Filling gaps... " << std::flush; for (auto& entity: entities) entity.lightmap.Fill(padding); std::cout << "done!" << std::endl; std::cout << "Saving to disk... " << std::flush; for (auto& entity: entities) { if (!entity.lightmap_name || entity.lightmap_name == "fullbright") continue; auto& l = entity.lightmap; // convert finished lightmap from floating-point to byte unsigned char* img = new unsigned char[l.w*l.h*3]; for (int i = 0; i < l.w*l.h; i++) { float r = l.t[i].color.x; float g = l.t[i].color.y; float b = l.t[i].color.z; if (r > 1.0f) r = 1.0f; if (g > 1.0f) g = 1.0f; if (b > 1.0f) b = 1.0f; if (r < 0.0f) r = 0.0f; if (g < 0.0f) g = 0.0f; if (b < 0.0f) b = 0.0f; img[i*3+0] = r * 255.0f; img[i*3+1] = g * 255.0f; img[i*3+2] = b * 255.0f; } // then write it to a png std::string output_path = "data/textures/"; output_path += (const char*)entity.lightmap_name; output_path += ".png"; if (!stbi_write_png(output_path.c_str(), l.w, l.h, 3, img, 0)) { std::cout << "failed! Couldn't write file to disk." << std::endl; return 0; } } if (nodes.size()) { std::string path = "data/worldcells/"; path += worldcell; path += ".light"; File file (path.c_str(), File::WRITE); if (!file.is_open()) { std::cout << "Can't open light file for writing: " << path << std::endl; } file.write_name("LIGHTGRAPHv1"); file.write_newline(); file.write_newline(); for (auto& node : nodes) { file.write_name("node"); file.write_float32(node.position.x); file.write_float32(node.position.y); file.write_float32(node.position.z); file.write_uint32(node.has_light); file.write_uint32(node.has_reflection); file.write_newline(); } file.write_newline(); file.write_newline(); for (auto& edge : edges) { file.write_name("edge"); file.write_uint32(edge.from); file.write_uint32(edge.to); file.write_newline(); } file.write_newline(); file.write_newline(); for (size_t i = 0; i < nodes.size(); i++) { auto& node = nodes[i]; file.write_name("light"); file.write_uint32(i); file.write_uint32(0); file.write_name("r"); file.write_float32(node.l00.x); file.write_float32(node.l1m1.x); file.write_float32(node.l10.x); file.write_float32(node.l11.x); file.write_float32(node.l2m2.x); file.write_float32(node.l2m1.x); file.write_float32(node.l20.x); file.write_float32(node.l21.x); file.write_float32(node.l22.x); file.write_newline(); file.write_name("light"); file.write_uint32(i); file.write_uint32(0); file.write_name("g"); file.write_float32(node.l00.y); file.write_float32(node.l1m1.y); file.write_float32(node.l10.y); file.write_float32(node.l11.y); file.write_float32(node.l2m2.y); file.write_float32(node.l2m1.y); file.write_float32(node.l20.y); file.write_float32(node.l21.y); file.write_float32(node.l22.y); file.write_newline(); file.write_name("light"); file.write_uint32(i); file.write_uint32(0); file.write_name("b"); file.write_float32(node.l00.z); file.write_float32(node.l1m1.z); file.write_float32(node.l10.z); file.write_float32(node.l11.z); file.write_float32(node.l2m2.z); file.write_float32(node.l2m1.z); file.write_float32(node.l20.z); file.write_float32(node.l21.z); file.write_float32(node.l22.z); file.write_newline(); file.write_newline(); } for (auto& light : lights) { file.write_name("entity"); file.write_uint32(light.entity); file.write_newline(); } } std::cout << "done!" << std::endl; return 0; } ================================================ FILE: devtools/trad/main2.cpp ================================================ // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. // Tramway SDK -- Radiosity tool // TODO: // - add option to use multiple worldcells in the same bake // - allow loading multiple models in the same bake // - make program go vroom vroom // - add indirect lighting // - add emissive materials #include #include #include #include #include #define STB_IMAGE_WRITE_IMPLEMENTATION #include using namespace tram; struct Vertex { vec3 pos; vec3 nrm; vec2 tex; vec2 map; bool operator==(const Vertex& other) { return pos == other.pos && nrm == other.nrm && tex == other.tex && map == other.map; } }; struct Triangle { Vertex v1, v2, v3; name_t mat; }; struct Texel { vec3 color; }; struct Lightmap { Lightmap(int width, int height) { t = new Texel[width*height]; b = new bool[width*height]; for (int i = 0; i < width*height; i++) { //t[i] = Texel {.color = {0.0f, 0.0f, 0.0f}}; t[i] = Texel {.color = {1.0f, 0.5f, 0.5f}}; b[i] = false; } w = width; h = height; } void Blit(int x, int y, Texel tex) { if (x < 0 || y < 0 || x >= w || y >= h) return; t[y*w+x] = tex; b[y*w+x] = true; } void BlitMix(int x, int y, Texel tex) { if (x < 0 || y < 0 || x >= w || y >= h) return; t[y*w+x].color += tex.color; b[y*w+x] = true; } Texel Sample(int x, int y) { if (x < 0) x = 0; if (y < 0) y = 0; if (x >= w) x = w - 1; if (y >= h) y = h - 1; return t[y*w+x]; } bool Blitted(int x, int y) { if (x < 0) x = 0; if (y < 0) y = 0; if (x >= w) x = w - 1; if (y >= h) y = h - 1; return b[y*w+x]; } void Fill(int pad) { for (int x = 0; x < w; x++) { for (int y = 0; y < h; y++) { if (Blitted(x, y)) continue; float nearest = INFINITY; vec3 color = {0.0f, 0.0f, 0.0f}; for (int s_x = x-pad; s_x < x+pad+1; s_x++) { for (int s_y = y-pad; s_y < y+pad+1; s_y++) { if (!Blitted(s_x, s_y)) continue; float dist = glm::distance(vec2(x, y), vec2(s_x, s_y)); if (dist < nearest) { nearest = dist; color = Sample(s_x, s_y).color; } } } if (nearest == INFINITY) continue; t[y*w+x].color = color; /* vec3 color = {0.0f, 0.0f, 0.0f}; int count = 0; for (int s_x = x-1; s_x < x+3; s_x++) { for (int s_y = y-1; s_y < y+3; s_y++) { if (!Blitted(s_x, s_y)) continue; color += Sample(s_x, s_y).color; count++; } } if (!count) continue; t[y*w+x].color = color / (float)count;*/ } } } Texel* t; bool* b; int w, h; }; struct Light { vec3 pos; vec3 color; float radius; }; struct Entity { vec3 pos; quat rot; name_t id; name_t name; name_t model; name_t lightmap; }; vec3 GetBarycentric(Triangle tri, float x, float y) { const vec2 v1 = tri.v2.map - tri.v1.map; const vec2 v2 = tri.v3.map - tri.v1.map; const vec2 v3 = vec2(x, y) - tri.v1.map; const float dominator = v1.x * v2.y - v2.x * v1.y; const float d2 = (v3.x * v2.y - v2.x * v3.y) / dominator; const float d3 = (v1.x * v3.y - v3.x * v1.y) / dominator; const float d1 = 1.0f - d2 - d3; return {d1, d2, d3}; } static vec3 TriangleAABBMin (Triangle t) { return { t.v1.pos.x < t.v2.pos.x ? (t.v1.pos.x < t.v3.pos.x ? t.v1.pos.x : t.v3.pos.x) : (t.v2.pos.x < t.v3.pos.x ? t.v2.pos.x : t.v3.pos.x), t.v1.pos.y < t.v2.pos.y ? (t.v1.pos.y < t.v3.pos.y ? t.v1.pos.y : t.v3.pos.y) : (t.v2.pos.y < t.v3.pos.y ? t.v2.pos.y : t.v3.pos.y), t.v1.pos.z < t.v2.pos.z ? (t.v1.pos.z < t.v3.pos.z ? t.v1.pos.z : t.v3.pos.z) : (t.v2.pos.z < t.v3.pos.z ? t.v2.pos.z : t.v3.pos.z) }; } static vec3 TriangleAABBMax (Triangle t) { return { t.v1.pos.x > t.v2.pos.x ? (t.v1.pos.x > t.v3.pos.x ? t.v1.pos.x : t.v3.pos.x) : (t.v2.pos.x > t.v3.pos.x ? t.v2.pos.x : t.v3.pos.x), t.v1.pos.y > t.v2.pos.y ? (t.v1.pos.y > t.v3.pos.y ? t.v1.pos.y : t.v3.pos.y) : (t.v2.pos.y > t.v3.pos.y ? t.v2.pos.y : t.v3.pos.y), t.v1.pos.z > t.v2.pos.z ? (t.v1.pos.z > t.v3.pos.z ? t.v1.pos.z : t.v3.pos.z) : (t.v2.pos.z > t.v3.pos.z ? t.v2.pos.z : t.v3.pos.z) }; } vec3 FindNearestIntersection(AABBTree& tree, std::vector& tris, vec3 pos, vec3 dir) { std::vector results; tree.FindIntersection(pos, dir, tree.root, results); vec3 closest = {INFINITY, INFINITY, INFINITY}; for (auto res : results) { vec3 intr = RayTriangleIntersection(pos, dir, tris[res].v1.pos, tris[res].v2.pos, tris[res].v3.pos); if (intr.x == INFINITY) continue; //if(glm::dot(tris[res].v1.nrm, dir) > -0.01f /*&& glm::distance(pos, intr) < 0.1f*/) continue; if (glm::distance(pos, intr) < glm::distance(pos, closest)) closest = intr; } return closest; }; vec3 FindBetween(AABBTree& tree, std::vector& tris, vec3 from, vec3 to) { std::vector results; vec3 dir = glm::normalize(to - from); from += dir * 0.1f; tree.FindIntersection(from, dir, tree.root, results); vec3 total_normal = {0.0f, 0.0f, 0.0f}; for (auto res : results) { vec3 intr = RayTriangleIntersection(from, dir, tris[res].v1.pos, tris[res].v2.pos, tris[res].v3.pos); if (intr.x == INFINITY) continue; if (glm::distance(from, intr) < glm::distance(from, to)) { total_normal += tris[res].v1.nrm; } } if (total_normal.x == 0.0f && total_normal.y == 0.0f && total_normal.z == 0.0f) { return {0.0f, 0.0f, 0.0f}; } else { return glm::normalize(total_normal); } }; vec3 FindTexelColorFromLights(AABBTree& tree, std::vector& tris, std::vector& lights, vec3 pos, vec3 normal, vec3 mid) { vec3 color = {0.0f, 0.0f, 0.0f}; // we might get a collision with the triangle, on which the texel is located // on, so we move it off of the surface a little bit pos += 0.01f * normal; mid += 0.01f * normal; // check if clear path to center vec3 dir = FindBetween(tree, tris, pos, mid); if (!(dir.x == 0.0f && dir.y == 0.0f && dir.z == 0.0f)) { //return {1.0f, 0.0f, 0.0f}; //pos += mid_dir * 0.3f; //pos = nearest + 0.01f * normal; //pos += mid_dir * (glm::distance(nearest, pos) + 0.02f); dir = glm::normalize(dir - (glm::dot(dir, normal) * normal)); pos += dir * 0.2f; } for (const auto& light : lights) { if (light.radius < glm::distance(pos, light.pos)) continue; vec3 light_dir = glm::normalize(light.pos - pos); vec3 nearest = FindNearestIntersection(tree, tris, pos, light_dir); if (glm::distance(nearest, pos) > glm::distance(light.pos, pos)) { float distance1 = glm::length(light.pos - pos); color += light.color * glm::max(glm::dot(normal, glm::normalize(light.pos - pos)), 0.0f) * (1.0f / (1.0f + 0.09f * distance1 + 0.032f * (distance1 * distance1))); } } return color; }; struct RasterParams { int l_w; int l_h; int stretch_low_x; int stretch_low_y; int stretch_high_x; int stretch_high_y; }; void RasterizeTriangle(RasterParams p, Triangle tri, auto raster_f) { // find the lowest, highest and middle vertices Vertex lowest = tri.v1; if (tri.v1.map.y < lowest.map.y) lowest = tri.v1; if (tri.v2.map.y < lowest.map.y) lowest = tri.v2; if (tri.v3.map.y < lowest.map.y) lowest = tri.v3; Vertex highest = tri.v1; if (tri.v1.map.y > highest.map.y) highest = tri.v1; if (tri.v2.map.y > highest.map.y) highest = tri.v2; if (tri.v3.map.y > highest.map.y) highest = tri.v3; // this should not happen! //if (lowest == highest) std::cout << "what the fuck" << std::endl; if (lowest == highest) return; Vertex middle; if ((tri.v2 == lowest || tri.v3 == lowest) && (tri.v2 == highest || tri.v3 == highest)) middle = tri.v1; if ((tri.v1 == lowest || tri.v3 == lowest) && (tri.v1 == highest || tri.v3 == highest)) middle = tri.v2; if ((tri.v1 == lowest || tri.v2 == lowest) && (tri.v1 == highest || tri.v2 == highest)) middle = tri.v3; // position of vertices on the raster image int lowest_y = floor(lowest.map.y * (float)p.l_h); int middle_y = floor(middle.map.y * (float)p.l_h); int highest_y = floor(highest.map.y * (float)p.l_h); int lowest_x = floor(lowest.map.x * (float)p.l_w); int middle_x = floor(middle.map.x * (float)p.l_w); int highest_x = floor(highest.map.x * (float)p.l_w); // push if (middle_y == highest_y) { //middle_y++; //highest_y++; } else { //highest_y++; } // compute raster line counts int low_high_lines = highest_y - lowest_y; int low_mid_lines = middle_y - lowest_y; int mid_high_lines = highest_y - middle_y; // compute raster directions float low_high_dir = (float)(highest_x - lowest_x) / (float)low_high_lines; float low_mid_dir = (float)(middle_x - lowest_x) / (float)low_mid_lines; float mid_high_dir = (float)(highest_x - middle_x) / (float)mid_high_lines; float left_pos = lowest_x; float right_pos = lowest_x; // stupid bug fix if (!low_mid_lines) { left_pos = lowest_x; right_pos = middle_x; /*if (lowest_x > middle_x) { left_pos = lowest_x; right_pos = middle_x; } else { left_pos = middle_x; right_pos = lowest_x; std::swap(low_high_dir, mid_high_dir); }*/ } for (int row = lowest_y; row < middle_y; row++) { left_pos += low_high_dir; right_pos += low_mid_dir; int from = left_pos; int to = right_pos; if (from > to) std::swap(from, to); for (int col = from; col < /*<=*/ /* push */ to; col++) { vec3 d = GetBarycentric(tri, (float)col / (float)p.l_w, (float)row / (float)p.l_h); const float thr = 1.0f/3.0f; vec3 pos = d.x * tri.v1.pos + d.y * tri.v2.pos + d.z * tri.v3.pos; vec3 nrm = d.x * tri.v1.nrm + d.y * tri.v2.nrm + d.z * tri.v3.nrm; vec3 mid = thr * tri.v1.pos + thr * tri.v2.pos + thr * tri.v3.pos; raster_f(col, row, pos, nrm, mid); } } for (int row = middle_y; row < highest_y; row++) { left_pos += low_high_dir; right_pos += mid_high_dir; int from = left_pos; int to = right_pos; if (from > to) std::swap(from, to); for (int col = from; col < /*<=*/ /* push */ to; col++) { vec3 d = GetBarycentric(tri, (float)col / (float)p.l_w, (float)row / (float)p.l_h); const float thr = 1.0f/3.0f; vec3 pos = d.x * tri.v1.pos + d.y * tri.v2.pos + d.z * tri.v3.pos; vec3 nrm = d.x * tri.v1.nrm + d.y * tri.v2.nrm + d.z * tri.v3.nrm; vec3 mid = thr * tri.v1.pos + thr * tri.v2.pos + thr * tri.v3.pos; raster_f(col, row, pos, nrm, mid); } } } int main(int argc, const char** argv) { stbi_flip_vertically_on_write(true); SetSystemLoggingSeverity(System::SYSTEM_PLATFORM, SEVERITY_WARNING); std::cout << "Tramway SDK -- Radiosity lightmapper" << std::endl; if (argc < 5) { std::cout << "Usage: trad worldcell entity width height"; std::cout << "\n\tworldcell is the name of the worldcell, that contains the entity and"; std::cout << "\n\t\tthe light with which it will be illuminated with"; std::cout << "\n\tentity is the name or the id of an entity, for which the lightmap will"; std::cout << "\n\t\tbe baked"; std::cout << "\n\twidth is the width of the lightmap, in texels"; std::cout << "\n\theight is the height of the lightmap, in texels" << std::endl; return 0; } const char* entity = argv[2]; const char* worldcell = argv[1]; int lightmap_width = atoi(argv[3]); int lightmap_height = atoi(argv[4]); bool paint_coords = false; bool paint_verts = false; bool force_fullbright = false; // stretch the raster a little bit, to help with color bleeding //int stretch_low_x = -1; //int stretch_low_y = -1; //int stretch_high_x = 2; //int stretch_high_y = 2; int padding = 1; if (lightmap_width < 1 || lightmap_height < 1) { std::cout << "Lightmap size has to be at least something!!! NOT NEGATIVE!!!" << std::endl; return 0; } if ((lightmap_width & (lightmap_width - 1)) != 0 || (lightmap_height & (lightmap_height - 1)) != 0) { std::cout << "Lightmap size has to be a power of two." << std::endl; return 0; } for (int i = 5; i < argc; i++) { if (strcmp(argv[i], "-coords") == 0) { paint_coords = true; } if (strcmp(argv[i], "-verts") == 0) { paint_verts = true; } if (strcmp(argv[i], "-pad") == 0) { padding = atoi(argv[++i]); //stretch_low_x = ammount; //stretch_low_y = ammount; //stretch_high_x = ammount + 1; //stretch_high_y = ammount + 1; } if (strcmp(argv[i], "-fullbright") == 0) { force_fullbright = true; } } std::vector entities; std::vector lights; // +-----------------------------------------------------------------------+ // + + // + WORLDCELL LOADER + // + + // +-----------------------------------------------------------------------+ std::cout << "Loading worldcell " << worldcell << "... " << std::flush; std::string worldcell_path = "data/worldcells/"; worldcell_path += worldcell; worldcell_path += ".cell"; File cell(worldcell_path.c_str(), MODE_READ | MODE_PAUSE_LINE); if (!cell.is_open()) { std::cout << "\nError opening file: " << worldcell_path << "!" < materials; for (int i = 0; i < mat_c; i++) { materials.push_back(file.read_name()); } std::vector vertices; for (int i = 0; i < vrt_c; i++) { Vertex v; v.pos = {file.read_float32(), file.read_float32(), file.read_float32()}; v.nrm = {file.read_float32(), file.read_float32(), file.read_float32()}; v.tex = {file.read_float32(), file.read_float32()}; v.map = {file.read_float32(), file.read_float32()}; vertices.push_back(v); } std::vector triangles; for (int i = 0; i < tri_c; i++) { Triangle t; t.v1 = vertices[file.read_int32()]; t.v2 = vertices[file.read_int32()]; t.v3 = vertices[file.read_int32()]; t.mat = materials[file.read_int32()]; triangles.push_back(t); } std::cout << "Loaded model " << model_name << ", it has " << vrt_c << " verts, " << tri_c << " tris, " << mat_c << " materials." << std::endl; // +-----------------------------------------------------------------------+ // + + // + RADIOSITY CALCULATIONS + // + + // +-----------------------------------------------------------------------+ // this tree here will contain all of the triangles in the scene, at the // time of the radiosity computation. // we will use it to determine if there is a clear path between two points AABBTree all_tree; std::vector all_tris; for (const auto& tri : triangles) { all_tree.InsertLeaf(all_tris.size(), TriangleAABBMin(tri), TriangleAABBMax(tri)); all_tris.push_back(tri); } std::cout << "Baking a lightmap with " << lights.size() <<" lights, " << lightmap_width << " by " << lightmap_height << " texels in size." << std::endl; if (lights.size() == 0) { std::cout << "Scene contains no lights!" << std::endl; force_fullbright = true; } Lightmap l(lightmap_width, lightmap_height); RasterParams image_params = { l.w, l.h, //stretch_low_x, //stretch_low_y, //stretch_high_x, //stretch_high_y 0, 0, 0, 0 }; int last_dots = -1; // iterate through each triangle in the lightmap and rasterize it for (size_t i = 0; i < triangles.size(); i++) { const auto& tri = triangles[i]; // draw a progress bar in the command line float progress = (float)i / (float)triangles.size(); int dots = ceil(progress * 62.0f); if (last_dots != dots) { std::cout << "\rComputing ["; for (int k = 0; k < 62; k++) std::cout << (k < dots ? (k % 9 == 8 ? ':' : '.') : ' '); std::cout << "] " << ceil(progress*100.0f) << "%" << std::flush; last_dots = dots; } if (paint_coords) { // rasterize triangle and set color to position RasterizeTriangle(image_params, tri, [&](int col, int row, vec3 pos, vec3 nrm, vec3 mid){ l.Blit(col, row, {pos}); }); } else if (force_fullbright) { // rasterize triangle to fullbright RasterizeTriangle(image_params, tri, [&](int col, int row, vec3 pos, vec3 nrm, vec3 mid){ l.Blit(col, row, {{1.0f, 1.0f, 1.0f}}); }); } else { // rasterize triangle and set color to light value RasterizeTriangle(image_params, tri, [&](int col, int row, vec3 pos, vec3 nrm, vec3 mid){ vec3 color = FindTexelColorFromLights(all_tree, all_tris, lights, pos, nrm, mid); l.Blit(col, row, {color}); }); } // paint in green dots in the triangle vertex positions if (paint_verts) { l.Blit(tri.v1.map.x * (float)l.w, tri.v1.map.y * (float)l.h, {{0.0f, 1.0f, 0.0f}}); l.Blit(tri.v2.map.x * (float)l.w, tri.v2.map.y * (float)l.h, {{0.0f, 1.0f, 0.0f}}); l.Blit(tri.v3.map.x * (float)l.w, tri.v3.map.y * (float)l.h, {{0.0f, 1.0f, 0.0f}}); } } std::cout << "\rComputing... done!\t\t\t\t\t\t\t " << std::endl; std::cout << "Filling gaps... " << std::flush; l.Fill(padding); std::cout << "done!" << std::endl; std::cout << "Saving to disk... " << std::flush; // convert finished lightmap from floating-point to byte unsigned char* img = new unsigned char[l.w*l.h*3]; for (int i = 0; i < l.w*l.h; i++) { float r = l.t[i].color.x; float g = l.t[i].color.y; float b = l.t[i].color.z; if (r > 1.0f) r = 1.0f; if (g > 1.0f) g = 1.0f; if (b > 1.0f) b = 1.0f; if (r < 0.0f) r = 0.0f; if (g < 0.0f) g = 0.0f; if (b < 0.0f) b = 0.0f; img[i*3+0] = r * 255.0f; img[i*3+1] = g * 255.0f; img[i*3+2] = b * 255.0f; } // then write it to a png std::string output_path = "data/textures/"; output_path += (const char*)lightmap_name; output_path += ".png"; if (!stbi_write_png(output_path.c_str(), l.w, l.h, 3, img, 0)) { std::cout << "failed! Couldn't write file to disk." << std::endl; return 0; } std::cout << "done!" << std::endl; return 0; } ================================================ FILE: docs/cppapi/aabb_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/aabb.cpp File Reference
Tramway SDK
aabb.cpp File Reference
#include <render/aabb.h>
#include <components/render.h>
#include <render/model.h>
#include <templates/pool.h>
#include <templates/aabb.h>
#include <templates/octree.h>

Classes

struct  tram::Render::AABB::AABBLeaf
 
struct  tram::Render::LightTree::Light
 

Namespaces

namespace  tram::Render::AABB
 Scene tree.
 
namespace  tram::Render::LightTree
 Scene light tree.
 
namespace  tram
 Serialization, i.e.
 
namespace  tram::Render
 High-level Render system API.
 

Functions

aabbleaf_t tram::Render::AABB::InsertLeaf (RenderComponent *component, vec3 position, quat rotation, vec3 scale)
 Inserts a RenderComponent leaf into the scene tree. More...
 
void tram::Render::AABB::RemoveLeaf (aabbleaf_t leaf_id)
 Removes a leaf from. More...
 
QueryResponse tram::Render::AABB::FindNearestFromRay (vec3 ray_pos, vec3 ray_dir, uint32_t mask)
 Peforms a raycast and retrieves the nearest object. More...
 
void tram::Render::AABB::DebugDrawTree ()
 Draws the scene tree for a single frame. More...
 
Octree< Light * > tram::Render::LightTree::light_tree ("light tree", 200)
 
void tram::Render::LightTree::AddLight (light_t light, vec3 pos, float dist)
 Adds a light to the light tree. More...
 
void tram::Render::LightTree::FindLights (vec3 position, light_t *dest)
 Finds the 4 nearest lights to a given position. More...
 
void tram::Render::LightTree::RemoveLight (light_t light)
 Removes a light from the light tree. More...
 

Variables

Pool< Light > tram::Render::LightTree::light_list ("lighttree pool", 200)
 
================================================ FILE: docs/cppapi/aabb_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/aabb.h File Reference
Tramway SDK v0.1.1
aabb.h File Reference
#include <framework/math.h>
#include <framework/logging.h>
#include <framework/core.h>
#include <iostream>
#include <vector>

Go to the source code of this file.

Classes

class  tram::AABBTree
 
struct  tram::AABBTree::Node
 

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/aabb_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/aabb.h Source File
Tramway SDK v0.1.1
aabb.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_TEMPLATES_AABB_H
4#define TRAM_SDK_TEMPLATES_AABB_H
5
6#include <framework/math.h>
7#include <framework/logging.h>
8#include <framework/core.h>
9
10#include <iostream>
11
12#include <vector>
13
14namespace tram {
15
16class AABBTree {
17public:
20 //RemoveHierarchy(root);
21 // TODO: fix
22 }
23
24 vec3 GetAABBMin() { return root->min; }
25 vec3 GetAABBMax() { return root->max; }
26
27 struct Node;
28
29 Node* InsertLeaf (uint32_t value, vec3 min, vec3 max) {
30 Node* new_node = new Node;
31
32 new_node->value = value;
33
34 new_node->min = min;
35 new_node->max = max;
36
37 if (root->left == nullptr) {
38 root->left = new_node;
39 new_node->parent = root;
40
41 if (root->right) {
43 } else {
44 root->min = new_node->min;
45 root->max = new_node->max;
46 }
47
48 return new_node;
49 }
50
51 if (root->right == nullptr) {
52 root->right = new_node;
53 new_node->parent = root;
54
55 if (root->left) {
57 } else {
58 root->min = new_node->min;
59 root->max = new_node->max;
60 }
61
62 return new_node;
63 }
64
65 Node* sibling = FindSibling(min, max, root);
66 Node* sibling_parent = sibling->parent;
67 Node* new_parent = new Node;
68
69 if (sibling_parent->left == sibling) {
70 sibling_parent->left = new_parent;
71 } else if (sibling_parent->right == sibling) {
72 sibling_parent->right = new_parent;
73 } else {
74 assert(false);
75 }
76
77 new_parent->parent = sibling_parent;
78
79 new_parent->left = new_node;
80 new_parent->right = sibling;
81
82 sibling->parent = new_parent;
83 new_node->parent = new_parent;
84
85 UpdateParentAABB(new_parent);
86
88
89 return new_node;
90 }
91
92 void RemoveLeaf(Node* node) {
93 assert(node);
94
95 Node* parent = node->parent;
96 Node* sibling = parent->left == node ? parent->right : parent->left;
97
98 if (parent->left != node && parent->right != node) {
99 assert(false);
100 }
101
102 if (parent == root) {
103 if (parent->left == node) {
104 parent->left = nullptr;
105
106 if (sibling) {
107 parent->min = sibling->min;
108 parent->max = sibling->max;
109 }
110 } else {
111 parent->right = nullptr;
112
113 if (sibling) {
114 parent->min = sibling->min;
115 parent->max = sibling->max;
116 }
117 }
118
119 delete node;
120
122
123 return;
124 }
125
126 Node* grandparent = parent->parent;
127
128 if (grandparent->left == parent) {
129 grandparent->left = sibling;
130 } else {
131 grandparent->right = sibling;
132 }
133
134 sibling->parent = grandparent;
135
136 UpdateParentAABB(grandparent);
137
138 delete node;
139 delete parent;
140
142 }
143
144 void RemoveHierarchy(Node* node) {
145 if (node->IsLeaf()) {
146 delete node;
147 } else {
148 RemoveHierarchy(node->left);
149 RemoveHierarchy(node->right);
150 delete node;
151 }
152 }
153
154 void FindIntersection(vec3 ray_pos, vec3 ray_dir, Node* node, std::vector<uint32_t>& result) const {
155 bool is_node_intersect = AABBIntersect(ray_pos, ray_dir, node->min, node->max);
156
157 if (is_node_intersect) {
158 if (node->IsLeaf() && node != root) {
159 result.push_back(node->value);
160 } else {
161 if (node->left) FindIntersection (ray_pos, ray_dir, node->left, result);
162 if (node->right) FindIntersection (ray_pos, ray_dir, node->right, result);
163 }
164 }
165 }
166
167 uint32_t FindIntersection(vec3 ray_pos, vec3 ray_dir, float distance_limit, auto filter) const {
168 bool root_intersects = AABBIntersect(ray_pos, ray_dir, root->min, root->max);
169
170 if (!root_intersects) {
171 return -1;
172 }
173
174 float nearest_dist = INFINITY;
175 uint32_t nearest_index = -1;
176
177 FindIntersectionRecursive(ray_pos, ray_dir, nearest_dist, nearest_index, distance_limit, root, filter);
178
179 return nearest_index;
180 }
181
182 // this should be marked private
183 void FindIntersectionRecursive(vec3 ray_pos, vec3 ray_dir, float& nearest_dist, uint32_t& nearest_index, float distance_limit, Node* node, auto filter) const {
184 if (node->IsLeaf() && node != root) {
185 float leaf_distance = filter(ray_pos, ray_dir, node->value);
186
187 if (leaf_distance < nearest_dist) {
188 nearest_dist = leaf_distance;
189 nearest_index = node->value;
190 }
191
192 return;
193 }
194
195 float left_distance = INFINITY;
196 float right_distance = INFINITY;
197
198 if (node->left) left_distance = AABBDistance(ray_pos, ray_dir, node->left->min, node->left->max);
199 if (node->right) right_distance = AABBDistance(ray_pos, ray_dir, node->right->min, node->right->max);
200
201 if (left_distance < right_distance) {
202
203 if (left_distance < nearest_dist && left_distance < distance_limit) {
204 FindIntersectionRecursive(ray_pos, ray_dir, nearest_dist, nearest_index, distance_limit, node->left, filter);
205 }
206
207 if (right_distance < nearest_dist && right_distance < distance_limit) {
208 FindIntersectionRecursive(ray_pos, ray_dir, nearest_dist, nearest_index, distance_limit, node->right, filter);
209 }
210
211 } else {
212
213 if (right_distance < nearest_dist && right_distance < distance_limit) {
214 FindIntersectionRecursive(ray_pos, ray_dir, nearest_dist, nearest_index, distance_limit, node->right, filter);
215 }
216
217 if (left_distance < nearest_dist && left_distance < distance_limit) {
218 FindIntersectionRecursive(ray_pos, ray_dir, nearest_dist, nearest_index, distance_limit, node->left, filter);
219 }
220
221 }
222
223 }
224
225 void FindAABBIntersection(vec3 min, vec3 max, auto callback) {
226 FindAABBIntersection(root, min, max, callback);
227 }
228
229 // should be private
230 void FindAABBIntersection(Node* node, vec3 min, vec3 max, auto callback) {
231 if (node->IsLeaf() && node != root) {
232 if (AABBOverlap(min, max, node->min, node->max)) {
233 callback(node->value);
234 }
235
236 return;
237 }
238
239 if (node->left && AABBOverlap(min, max, node->left->min, node->left->max)) {
240 FindAABBIntersection(node->left, min, max, callback);
241 }
242
243 if (node->right && AABBOverlap(min, max, node->right->min, node->right->max)) {
244 FindAABBIntersection(node->right, min, max, callback);
245 }
246
247 }
248
249//private:
250
251 void UpdateParentAABB (Node* node) {
252
253 //assert(!node->IsLeaf());
254
255 if (node->IsLeaf()) return;
256
257 Node* left_child = node->left;
258 Node* right_child = node->right;
259
260 if (!left_child || !right_child) {
261 assert(node == root);
262
263 if (!left_child && right_child) {
264 node->min = right_child->min;
265 node->max = right_child->max;
266 } else if (left_child && !right_child) {
267 node->min = left_child->min;
268 node->max = left_child->max;
269 } else {
270 node->min = {0.0f, 0.0f, 0.0f};
271 node->max = {0.0f, 0.0f, 0.0f};
272 }
273
274 return;
275 }
276
277
278 node->min = MergeAABBMin(left_child->min, right_child->min);
279 node->max = MergeAABBMax(left_child->max, right_child->max);
280
281 if (node->parent != nullptr) {
283 }
284
285 assert(node->parent != node);
286 }
287
288 // searches the children of search_node to find a sibling for target_node
289 Node* FindSibling (vec3 min, vec3 max, Node* node) {
290 assert(node);
291
292 if (node->IsLeaf()) {
293 return node;
294 }
295
296 if (node->left == nullptr) {
297 assert(false);
298 }
299 assert(node->left);
300 assert(node->right);
301
302 vec3 left_merge_min = MergeAABBMin(min, node->left->min);
303 vec3 left_merge_max = MergeAABBMax(max, node->left->max);
304
305 vec3 right_merge_min = MergeAABBMin(min, node->right->min);
306 vec3 right_merge_max = MergeAABBMax(max, node->right->max);
307
308 float left_merge_volume = AABBVolume(left_merge_min, left_merge_max);
309 float right_merge_volume = AABBVolume(right_merge_min, right_merge_max);
310
311 //float left_merge_volume = AABBSurface(left_merge_min, left_merge_max);
312 //float right_merge_volume = AABBSurface(right_merge_min, right_merge_max);
313
314 if (left_merge_volume < right_merge_volume) {
315 return FindSibling(min, max, node->left);
316 } else {
317 return FindSibling(min, max, node->right);
318 }
319 }
320
321
322 void ValidateTree (Node* node) {
323 return;
324 if (root->parent != nullptr) {
325 //if (((Node*)0)->IsLeaf()) assert(false);
326 }
327
328 return;
329 ValidateTree (node, 0);
330 }
331 void ValidateTree (Node* node, size_t num) {
332 assert(node);
333 assert((long long)node > 100);
334
335 if (num > 400) {
336 //if (((Node*)0)->IsLeaf()) assert(false);
337 }
338
339 if (node->IsLeaf() && node != root) {
340 //assert(node->value < 40000);
341 } else {
342 if (node != root || (node == root && node->left))ValidateTree(node->left, num+1);
343 if (node != root || (node == root && node->right))ValidateTree(node->right, num+1);
344 }
345 }
346
347 static vec3 MergeAABBMin (vec3 a, vec3 b) {
348 return vec3 {
349 a.x < b.x ? a.x : b.x,
350 a.y < b.y ? a.y : b.y,
351 a.z < b.z ? a.z : b.z
352 };// - vec3 {0.1f, 0.1f, 0.1f};
353 }
354
355 static vec3 MergeAABBMax (vec3 a, vec3 b) {
356 return vec3 {
357 a.x > b.x ? a.x : b.x,
358 a.y > b.y ? a.y : b.y,
359 a.z > b.z ? a.z : b.z
360 };// + vec3 {0.1f, 0.1f, 0.1f};
361 }
362
363 static bool AABBOverlap(vec3 min, vec3 max, vec3 other_min, vec3 other_max) {
364 return min.x <= other_max.x && max.x >= other_min.x &&
365 min.y <= other_max.y && max.y >= other_min.y &&
366 min.z <= other_max.z && max.z >= other_min.z;
367 }
368
369 static float AABBVolume (vec3 min, vec3 max) {
370 return (max.x - min.x) * (max.y - min.y) * (max.z - min.z);
371 }
372
373 static float AABBSurface (vec3 min, vec3 max) {
374 float x = max.x - min.x;
375 float y = max.y - min.y;
376 float z = max.z - min.z;
377
378 assert(max.x >= min.x);
379 assert(max.y >= min.y);
380 assert(max.z >= min.z);
381
382 return 2 * ((x * y) + (x * z) + (y * z));
383 }
384
385 static bool AABBIntersect (vec3 ray_pos, vec3 ray_dir, vec3 min, vec3 max) {
386 vec3 t1 = (min - ray_pos) / ray_dir; // what happens if ray_dir == 0.0f?
387 vec3 t2 = (max - ray_pos) / ray_dir; // TODO: check
388
389 vec3 t1min = glm::min(t1, t2);
390 vec3 t2max = glm::max(t1, t2);
391
392 float tnear = glm::max(glm::max(t1min.x, t1min.y), t1min.z);
393 float tfar = glm::min(glm::min(t2max.x, t2max.y), t2max.z);
394
395 return tfar >= tnear;
396 }
397
398 static float AABBDistance(vec3 ray_pos, vec3 ray_dir, vec3 min, vec3 max) {
399 vec3 t1 = (min - ray_pos) / ray_dir; // what happens if ray_dir == 0.0f?
400 vec3 t2 = (max - ray_pos) / ray_dir; // TODO: check
401
402 vec3 t1min = glm::min(t1, t2);
403 vec3 t2max = glm::max(t1, t2);
404
405 float tnear = glm::max(glm::max(t1min.x, t1min.y), t1min.z);
406 float tfar = glm::min(glm::min(t2max.x, t2max.y), t2max.z);
407
408 return tfar >= tnear ? tnear : INFINITY;
409 }
410
411 struct Node {
412 bool IsLeaf () const { return right == 0; }
413
414 void Print () const { std::cout << " l: " << left << " r: " << right << " p: " << parent << std::endl; }
415
416 union {
417 Node* left = nullptr;
418 uint32_t value;
419 };
420
421 Node* right = nullptr;
422 Node* parent = nullptr;
423
426 };
427
428 Node* root = new Node {nullptr, nullptr, nullptr, {0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f}};
429};
430
431}
432
433#endif // TRAM_SDK_TEMPLATES_AABB_H
Definition: aabb.h:16
Node * InsertLeaf(uint32_t value, vec3 min, vec3 max)
Definition: aabb.h:29
static bool AABBIntersect(vec3 ray_pos, vec3 ray_dir, vec3 min, vec3 max)
Definition: aabb.h:385
~AABBTree()
Definition: aabb.h:19
void FindIntersection(vec3 ray_pos, vec3 ray_dir, Node *node, std::vector< uint32_t > &result) const
Definition: aabb.h:154
void UpdateParentAABB(Node *node)
Definition: aabb.h:251
void ValidateTree(Node *node)
Definition: aabb.h:322
void FindAABBIntersection(Node *node, vec3 min, vec3 max, auto callback)
Definition: aabb.h:230
AABBTree()
Definition: aabb.h:18
vec3 GetAABBMax()
Definition: aabb.h:25
void FindIntersectionRecursive(vec3 ray_pos, vec3 ray_dir, float &nearest_dist, uint32_t &nearest_index, float distance_limit, Node *node, auto filter) const
Definition: aabb.h:183
Node * root
Definition: aabb.h:428
static float AABBVolume(vec3 min, vec3 max)
Definition: aabb.h:369
void FindAABBIntersection(vec3 min, vec3 max, auto callback)
Definition: aabb.h:225
static vec3 MergeAABBMax(vec3 a, vec3 b)
Definition: aabb.h:355
static float AABBDistance(vec3 ray_pos, vec3 ray_dir, vec3 min, vec3 max)
Definition: aabb.h:398
void RemoveLeaf(Node *node)
Definition: aabb.h:92
void RemoveHierarchy(Node *node)
Definition: aabb.h:144
static vec3 MergeAABBMin(vec3 a, vec3 b)
Definition: aabb.h:347
Node * FindSibling(vec3 min, vec3 max, Node *node)
Definition: aabb.h:289
vec3 GetAABBMin()
Definition: aabb.h:24
uint32_t FindIntersection(vec3 ray_pos, vec3 ray_dir, float distance_limit, auto filter) const
Definition: aabb.h:167
void ValidateTree(Node *node, size_t num)
Definition: aabb.h:331
static float AABBSurface(vec3 min, vec3 max)
Definition: aabb.h:373
static bool AABBOverlap(vec3 min, vec3 max, vec3 other_min, vec3 other_max)
Definition: aabb.h:363
Serialization, i.e.
glm::vec3 vec3
Definition: math.h:11
Definition: aabb.h:411
Node * left
Definition: aabb.h:417
Node * right
Definition: aabb.h:421
bool IsLeaf() const
Definition: aabb.h:412
Node * parent
Definition: aabb.h:422
vec3 max
Definition: aabb.h:425
vec3 min
Definition: aabb.h:424
uint32_t value
Definition: aabb.h:418
void Print() const
Definition: aabb.h:414
Definition: graph.h:16
================================================ FILE: docs/cppapi/actions_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/bullet/actions.h File Reference
Tramway SDK v0.1.1
actions.h File Reference
#include <btBulletDynamicsCommon.h>
#include <components/physics.h>

Go to the source code of this file.

Classes

class  tram::Physics::PathAction
 

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Physics
 
================================================ FILE: docs/cppapi/actions_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/bullet/actions.h Source File
Tramway SDK v0.1.1
actions.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef PHYSICS_BULLET_ACTIONS_H
4#define PHYSICS_BULLET_ACTIONS_H
5
6#include <btBulletDynamicsCommon.h>
8
9namespace tram::Physics {
11 class PathAction : public btActionInterface {
12 public:
14 physcomp = physComponent;
15 }
16
17 virtual void updateAction(btCollisionWorld* collisionWorld, btScalar deltaTimeStep);
18
19 virtual void debugDraw(btIDebugDraw* debugDrawer){}
20
21 private:
22 PhysicsComponent* physcomp = nullptr;
23 };
24}
25
26#endif // PHYSICS_BULLET_ACTIONS_H
Definition: actions.h:11
PathAction(PhysicsComponent *physComponent)
Definition: actions.h:13
virtual void updateAction(btCollisionWorld *collisionWorld, btScalar deltaTimeStep)
virtual void debugDraw(btIDebugDraw *debugDrawer)
Definition: actions.h:19
Rigidbody wrapper.
Definition: physics.h:12
================================================ FILE: docs/cppapi/ai_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/ai.cpp File Reference
Tramway SDK v0.1.1
ai.cpp File Reference

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Ext
 
namespace  tram::Ext::Kitchensink
 Extension containing random stuff that doesn't fit in anywhere else.
 

Functions

void tram::Ext::Kitchensink::InitAI ()
 
void tram::Ext::Kitchensink::UpdateAI ()
 
================================================ FILE: docs/cppapi/ai_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/ai.h File Reference
Tramway SDK v0.1.1
ai.h File Reference
#include <vector>
#include <framework/core.h>
#include <framework/uid.h>
#include <framework/math.h>
#include <framework/value.h>

Go to the source code of this file.

Classes

class  tram::Ext::Kitchensink::AIPackage
 
struct  tram::Ext::Kitchensink::AIVariable
 
class  tram::Ext::Kitchensink::AIAgent
 

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Ext
 
namespace  tram::Ext::Kitchensink
 Extension containing random stuff that doesn't fit in anywhere else.
 

Typedefs

typedef AIPackage *(* tram::Ext::Kitchensink::ai_package_constr) (valuearray_t)
 

Functions

void tram::Ext::Kitchensink::InitAI ()
 
void tram::Ext::Kitchensink::UpdateAI ()
 
================================================ FILE: docs/cppapi/ai_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/ai.h Source File
Tramway SDK v0.1.1
ai.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_EXTENSIONS_KITCHENSINK_AI_H
4#define TRAM_SDK_EXTENSIONS_KITCHENSINK_AI_H
5
6#include <vector>
7#include <framework/core.h>
8#include <framework/uid.h>
9#include <framework/math.h>
10#include <framework/value.h>
11
12/*
13 * AI framework for video game NPCs
14 *
15 * This is a half-finished framework for creating AI packages that could be used
16 * to make video game NPCs.
17 *
18 * Haven't tried using it, probably doesn't work.
19 *
20 * Still working out the basic API and internal mechanics.
21 *
22 */
23
24namespace tram {
25 class ControllerComponent;
26}
27
28namespace tram::Ext::Kitchensink {
29 class AnimationStateComponent;
30 /*
31
32 if normal:
33
34 if time is morning:
35 return go_eat()
36 if time is day:
37 return go_stand(at_workplace)
38 if time is evening:
39 return go_eat()
40 if time is night:
41 return go_sleep(home)
42
43 if combat:
44
45 if health > 10:
46 return attack
47 if true:
48 return retreat
49
50 inside_params ->
51 attacker
52 attacker_faction
53
54 if normal and attack and victim_faction is self_faction:
55 combat_target =
56 attack
57
58 AIAgent:
59 list<pair<AICondition, AIPackage>> package_queue;
60 name class;
61 package_script
62 list<Value> variables
63 AIClass:
64 name parent_class;
65 package_script;
66 default_variables;
67
68 AIPackage:
69 state = running/finished
70 forced = true/false
71
72 SetAIPackage(AI_ATTACK, [("target", big_chungus)])
73
74 AI_ATTACK
75 AI_SLEEP
76 AI_EAT
77
78
79AI_ATTACK ->
80
81 */
82
83class AIAgent;
84class AIPackage;
85typedef AIPackage* (*ai_package_constr)(valuearray_t);
86
87void InitAI();
88void UpdateAI();
89
90class AIPackage {
91public:
92 virtual bool Process() = 0;
93
94 virtual ~AIPackage() = default;
95
96 static void Register(name_t name, ai_package_constr constr);
97 static AIPackage* Make(name_t name, valuearray_t params);
98protected:
99 AIAgent* parent = nullptr;
100};
101
104};
105
106class AIAgent {
107public:
108 std::vector<AIPackage*> package_stack;
109 std::vector<AIPackage*> override_stack;
110
112
113 std::vector<AIVariable> variables;
114
116 void Clear();
117
120
121 void Update();
122
123 void SetControllerComponent(ControllerComponent* c) { controllercomponent = c; }
125 ControllerComponent* GetControllerComponent() { return controllercomponent; }
127
128 static AIAgent* Find(id_t id);
129private:
130 ControllerComponent* controllercomponent;
131 AnimationStateComponent* animationstate;
132};
133
134}
135
136#endif // TRAM_SDK_EXTENSIONS_KITCHENSINK_AI_H
Provides an API for character controllers.
Definition: controller.h:15
name_t script
Definition: ai.h:111
std::vector< AIVariable > variables
Definition: ai.h:113
void Update()
Definition: ai.cpp:48
void SetAnimationStateComponent(AnimationStateComponent *c)
Definition: ai.h:124
AnimationStateComponent * GetAnimationStateComponent()
Definition: ai.h:126
void SetControllerComponent(ControllerComponent *c)
Definition: ai.h:123
std::vector< AIPackage * > override_stack
Definition: ai.h:109
void PushOverride(AIPackage *)
static AIAgent * Find(id_t id)
Definition: ai.cpp:64
ControllerComponent * GetControllerComponent()
Definition: ai.h:125
std::vector< AIPackage * > package_stack
Definition: ai.h:108
static void Register(name_t name, ai_package_constr constr)
Definition: ai.cpp:33
AIAgent * parent
Definition: ai.h:99
static AIPackage * Make(name_t name, valuearray_t params)
Definition: ai.cpp:37
Definition: value.h:314
Generic, type-safe union.
Definition: value.h:18
Extension containing random stuff that doesn't fit in anywhere else.
Definition: ai.cpp:15
AIPackage *(* ai_package_constr)(valuearray_t)
Definition: ai.h:85
void UpdateAI()
Definition: ai.cpp:29
void InitAI()
Definition: ai.cpp:20
Serialization, i.e.
uint32_t id_t
Definition: core.h:10
ValueArray valuearray_t
Definition: value.h:325
Value value
Definition: ai.h:103
Interned string type.
Definition: uid.h:10
================================================ FILE: docs/cppapi/animationtable_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/animationtable.cpp File Reference
Tramway SDK v0.1.1
animationtable.cpp File Reference
#include <extensions/kitchensink/animationtable.h>
#include <render/render.h>
#include <entities/sound.h>
#include <components/animation.h>
#include <templates/hashmap.h>
#include <templates/pool.h>
#include <config.h>
#include <algorithm>

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Ext
 
namespace  tram::Ext::Kitchensink
 Extension containing random stuff that doesn't fit in anywhere else.
 
================================================ FILE: docs/cppapi/animationtable_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/animationtable.h File Reference
Tramway SDK v0.1.1
animationtable.h File Reference
#include <vector>
#include <framework/uid.h>
#include <framework/math.h>
#include <framework/entitycomponent.h>

Go to the source code of this file.

Classes

struct  tram::Ext::Kitchensink::AnimStateSpace
 
struct  tram::Ext::Kitchensink::AnimState
 
struct  tram::Ext::Kitchensink::AnimStateTransitionFrom
 
struct  tram::Ext::Kitchensink::AnimStateTransitionInto
 
struct  tram::Ext::Kitchensink::AnimStateTransitionDefault
 
class  tram::Ext::Kitchensink::AnimationTable
 
class  tram::Ext::Kitchensink::AnimationStateComponent
 

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Ext
 
namespace  tram::Ext::Kitchensink
 Extension containing random stuff that doesn't fit in anywhere else.
 
================================================ FILE: docs/cppapi/animationtable_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/animationtable.h Source File
Tramway SDK v0.1.1
animationtable.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_EXTENSIONS_KITCHENSINK_SOUNDTABLE_H
4#define TRAM_SDK_EXTENSIONS_KITCHENSINK_SOUNDTABLE_H
5
6#include <vector>
7#include <framework/uid.h>
8#include <framework/math.h>
10
11namespace tram {
12 class AnimationComponent;
13}
14
15namespace tram::Ext::Kitchensink {
16
20};
21
22struct AnimState {
24
26 uint32_t repeats;
27 float weight;
28 float speed;
31
33
35};
36
40
41 float fade_time;
42};
43
47
48 float fade_time;
49};
50
53
56};
57
59
61public:
62 AnimationTable(name_t name) : name(name) {}
63
64 void SwitchState(name_t state, AnimationStateComponent* state_component);
65
66 void AddStateSpace(name_t name, name_t parent);
67 void AddState(name_t state, name_t space);
68
69 void SetStateAnimation(name_t state, name_t animation_name, uint32_t repeats, float weight, float speed, bool pause_last);
70 void SetStateNextState(name_t state, name_t next_state);
71
75
76 static AnimationTable* Find(name_t name);
77private:
78 AnimationComponent* component = nullptr;
79
80 name_t name;
81
82 std::vector<AnimStateSpace> state_spaces;
83 std::vector<AnimState> states;
84
85 std::vector<AnimStateTransitionFrom> transition_from;
86 std::vector<AnimStateTransitionInto> transition_into;
87 std::vector<AnimStateTransitionDefault> transition_default;
88};
89
91public:
92 void EventHandler(Event &event) {}
93 void Start();
94
95 void SwitchState(name_t state) { table->SwitchState(state, this); }
96
97 void SetAnimationTable(name_t name) { this->table = AnimationTable::Find(name); }
100protected:
103 std::vector<name_t> states;
104 friend class AnimationTable;
105};
106
107}
108
109#endif // TRAM_SDK_EXTENSIONS_KITCHENSINK_SOUNDTABLE_H
Plays back Animations.
Definition: animation.h:13
Component base class.
Definition: entitycomponent.h:16
void SetAnimationComponent(AnimationComponent *component)
Definition: animationtable.h:98
void SwitchState(name_t state)
Definition: animationtable.h:95
AnimationTable * table
Definition: animationtable.h:101
void SetAnimationTable(name_t name)
Definition: animationtable.h:97
std::vector< name_t > states
Definition: animationtable.h:103
AnimationComponent * GetAnimationComponent()
Definition: animationtable.h:99
AnimationComponent * component
Definition: animationtable.h:102
void EventHandler(Event &event)
Definition: animationtable.h:92
Definition: animationtable.h:60
AnimationTable(name_t name)
Definition: animationtable.h:62
void AddTransition(AnimStateTransitionFrom)
Definition: animationtable.cpp:212
void AddStateSpace(name_t name, name_t parent)
Definition: animationtable.cpp:173
void SetStateAnimation(name_t state, name_t animation_name, uint32_t repeats, float weight, float speed, bool pause_last)
Definition: animationtable.cpp:188
void SetStateNextState(name_t state, name_t next_state)
Definition: animationtable.cpp:202
void SwitchState(name_t state, AnimationStateComponent *state_component)
Definition: animationtable.cpp:51
static AnimationTable * Find(name_t name)
Definition: animationtable.cpp:40
void AddState(name_t state, name_t space)
Definition: animationtable.cpp:183
Extension containing random stuff that doesn't fit in anywhere else.
Definition: ai.cpp:15
Serialization, i.e.
Event data.
Definition: event.h:24
Definition: animationtable.h:22
uint32_t repeats
Definition: animationtable.h:26
name_t name
Definition: animationtable.h:23
bool interpolate
Definition: animationtable.h:29
name_t state_space
Definition: animationtable.h:32
float speed
Definition: animationtable.h:28
bool pause_last
Definition: animationtable.h:30
name_t next_state
Definition: animationtable.h:34
float weight
Definition: animationtable.h:27
name_t animation
Definition: animationtable.h:25
Definition: animationtable.h:17
name_t parent
Definition: animationtable.h:19
name_t name
Definition: animationtable.h:18
float fade_out_time
Definition: animationtable.h:55
float fade_in_time
Definition: animationtable.h:54
name_t state
Definition: animationtable.h:52
name_t into_state
Definition: animationtable.h:39
float fade_time
Definition: animationtable.h:41
name_t from_state
Definition: animationtable.h:38
name_t into_state
Definition: animationtable.h:46
float fade_time
Definition: animationtable.h:48
name_t from_state
Definition: animationtable.h:45
Interned string type.
Definition: uid.h:10
================================================ FILE: docs/cppapi/annotated.html ================================================ Tramway SDK: Class List
Tramway SDK v0.1.1
Class List
Here are the classes, structs, unions and interfaces with brief descriptions:
[detail level 12345]
 NtramSerialization, i.e
 NAsyncMulti-threading and Resource streaming
 NAudioSystem for doing audio related stuff
 NExt
 NGUIImmediate mode GUI system
 NPhysics
 NRenderHigh-level Render system API
 NScriptScripting API
 NScriptableType
 NSettingsApplication setting management and CLI command parser
 NStatsResource usage statistics
 NSystemSystem tracking
 NUIUser interface system
 CAABBTree
 CAnimationComponentPlays back Animations
 CAudioComponentPlays back Sounds
 CComponentWrapper for an EntityComponent pointer
 CControllerComponentProvides an API for character controllers
 CCrate3D Model with a rigidbody attached to it
 CDecalComponentProjects decals onto the scene
 CDecoration3D Model with an AnimationComponent attached to it
 CDiskReader
 CDiskWriter
 CEdge
 CEntityEntity base class
 CEntityComponentComponent base class
 CEntityTypeInfo
 CEventEvent data
 CEventListenerSmart wrapper class for Event listeners
 CFileVery fast file reader/writer
 CFileReader
 CFileReaderParser
 CFileSource
 CFileWriter
 CFileWriterParser
 CFPSControllerComponentImplementation of an FPS-style character controller
 CGraph
 CHashmap
 CLightLightComponent wrapper
 CLightComponentProvides a real-time illumination for the scene
 CListenerInfo
 CMarkerFunctionally inert
 CMessageMessage data
 CNavmeshNot fully implemented yet
 CNavmeshNode
 CNode
 COctree
 CParticleComponentProvides amusing graphical effects
 CPathBase class for graphs
 CPathEdgeInfo
 CPathFollowerPoint constrained to a Path
 CPhysicsComponentRigidbody wrapper
 CPlayerControllerComponent with a PlayerComponent attached to it
 CPlayerComponentTranslates keyboard/mouse inputs into inputs for ControllerComponent
 CPool
 CPoolProxy
 CPoolPtr
 CQueueSimple queue implementation
 CRaycastControllerComponentImplementation of a simple character controller
 CRenderComponentRenders a Model
 CResource
 CResourceProxy
 CScriptableProvides script language subclassing
 CSharedEntityDataBasic Entity parameters
 CSignalMessage template
 CSignalTableList of Message templates
 CSoundAudioComponent wrapper
 CSpinlock
 CSpriteComponentProvides amusing graphical effects
 CStack
 CStackPoolAllocator
 CStaticWorldObjectWorldspawn
 CTemplateComponent
 CTextReaderParser
 CTextWriterParser
 CTransitionConnects WorldCells together
 CTriggerTriggerComponent wrapper
 CTriggerComponentTrigger wrapper
 CUIDInterned string type
 CValueGeneric, type-safe union
 CValueArray
 CValuePtr
 CWorldCellWorld streaming unit
 C_test_case
 CFileReaderFile reading backend API
 CFileWriterFile writing backend API
 CSoundGraphSoundGraph resource
================================================ FILE: docs/cppapi/api_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/api.cpp File Reference
Tramway SDK
api.cpp File Reference
#include <audio/audio.h>
#include <audio/sound.h>
#include <framework/system.h>
#include <framework/logging.h>
#include <components/audio.h>
#include <unordered_map>
#include <audio/openal/openal.h>
#include <audio/spatial/spatial.h>

Namespaces

namespace  tram
 
namespace  tram::Audio
 

Macros

#define AUDIO_SYSTEM   OpenAL
 

Functions

void tram::Audio::SetListenerPosition (vec3 position)
 Sets the listener position. More...
 
void tram::Audio::SetListenerOrientation (quat orientation)
 Sets the listener orientation. More...
 
audiobuffer_t * tram::Audio::MakeAudioBuffer (const int16_t *audio_data, int32_t length, int32_t samples, int32_t channels, int32_t &buffer_count)
 Creates audio buffers from raw audio data. More...
 
void tram::Audio::RemoveAudioBuffer (audiobuffer_t *buffer, int32_t buffer_count)
 Deletes audio buffers. More...
 
audiosource_t tram::Audio::MakeAudioSource ()
 Creates an audio source. More...
 
void tram::Audio::SetAudioSourcePitch (audiosource_t source, float pitch)
 Sets the pitch of an audio source. More...
 
void tram::Audio::SetAudioSourceGain (audiosource_t source, float gain)
 Sets the gain of an audio source. More...
 
void tram::Audio::SetAudioSourcePosition (audiosource_t source, vec3 position)
 Sets the position of an audio source. More...
 
void tram::Audio::SetAudioSourceVelocity (audiosource_t source, vec3 velocity)
 Sets the velocity of an audio source. More...
 
void tram::Audio::SetAudioSourceRepeating (audiosource_t source, bool repeating)
 Sets the repetition of an audio source. More...
 
void tram::Audio::SetAudioSourceBuffer (audiosource_t source, const audiobuffer_t *buffers, int32_t buffer_count)
 Sets the buffers that the audio source will play. More...
 
void tram::Audio::PlayAudioSource (audiosource_t source)
 Plays an audio source. More...
 
void tram::Audio::PauseAudioSource (audiosource_t source)
 Pauses the audio source. More...
 
void tram::Audio::StopAudioSource (audiosource_t source)
 Stops the audio source. More...
 
bool tram::Audio::IsAudioSourcePlaying (audiosource_t source)
 Checks if an audio source is playing. More...
 
void tram::Audio::RemoveAudioSource (audiosource_t source)
 Deletes an audio source. More...
 

Macro Definition Documentation

◆ AUDIO_SYSTEM

#define AUDIO_SYSTEM   OpenAL
================================================ FILE: docs/cppapi/async_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/async.cpp File Reference
Tramway SDK v0.1.1
async.cpp File Reference

Implementation of the Async system. More...

#include <templates/queue.h>
#include <templates/pool.h>
#include <framework/core.h>
#include <framework/async.h>
#include <framework/system.h>
#include <framework/resource.h>
#include <framework/entitycomponent.h>
#include <framework/logging.h>
#include <platform/api.h>
#include <config.h>
#include <thread>
#include <vector>

Classes

struct  tram::Async::ResourceRequest
 

Namespaces

namespace  tram::Async
 Multi-threading and Resource streaming.
 
namespace  tram
 Serialization, i.e.
 

Enumerations

enum  tram::Async::RequestNotification { tram::Async::NONE , tram::Async::COMPONENT , tram::Async::CALLBACK }
 

Functions

void tram::Async::RequestResource (EntityComponent *requester, Resource *resource)
 Adds a resource to the loading queue. More...
 
void tram::Async::RequestResource (void(*callback)(void *data), void *data, Resource *resource)
 Adds a resource to the loading queue. More...
 
void tram::Async::CancelRequest (EntityComponent *requester, Resource *resource)
 Cancels a resource load request. More...
 
void tram::Async::LoadDependency (Resource *resource)
 Loads a resource from disk, skipping the queue. More...
 
void tram::Async::LoadResourcesFromDisk ()
 Processes the first resource queue. More...
 
void tram::Async::LoadResourcesFromMemory ()
 Processes the second resource queue. More...
 
void tram::Async::FinishResources ()
 Notifies EntityComponents about finished resources. More...
 
void tram::Async::Init (size_t threads)
 Starts the async resource loader thread. More...
 
void tram::Async::Yeet ()
 Stops the async resource loader thread. More...
 
size_t tram::Async::GetWaitingResources ()
 Returns number of resources in queues. More...
 

Detailed Description

Implementation of the Async system.

================================================ FILE: docs/cppapi/async_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/async.h File Reference
Tramway SDK v0.1.1
async.h File Reference
#include <cmath>

Go to the source code of this file.

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Async
 Multi-threading and Resource streaming.
 

Functions

void tram::Async::RequestResource (EntityComponent *requester, Resource *resource)
 Adds a resource to the loading queue. More...
 
void tram::Async::RequestResource (void(*callback)(void *data), void *data, Resource *resource)
 Adds a resource to the loading queue. More...
 
void tram::Async::CancelRequest (EntityComponent *requester, Resource *resource)
 Cancels a resource load request. More...
 
void tram::Async::LoadDependency (Resource *resource)
 Loads a resource from disk, skipping the queue. More...
 
void tram::Async::Init (size_t threads)
 Starts the async resource loader thread. More...
 
void tram::Async::Yeet ()
 Stops the async resource loader thread. More...
 
void tram::Async::LoadResourcesFromDisk ()
 Processes the first resource queue. More...
 
void tram::Async::LoadResourcesFromMemory ()
 Processes the second resource queue. More...
 
void tram::Async::FinishResources ()
 Notifies EntityComponents about finished resources. More...
 
size_t tram::Async::GetWaitingResources ()
 Returns number of resources in queues. More...
 
================================================ FILE: docs/cppapi/async_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/async.h Source File
Tramway SDK v0.1.1
async.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_FRAMEWORK_ASYNC_H
4#define TRAM_SDK_FRAMEWORK_ASYNC_H
5
6#include <cmath>
7
8namespace tram {
9
10class EntityComponent;
11class Resource;
12
13}
14
15namespace tram::Async {
16
17void RequestResource(EntityComponent* requester, Resource* resource);
18void RequestResource(void(*callback)(void* data), void* data, Resource* resource);
19void CancelRequest(EntityComponent* requester, Resource* resource);
20void LoadDependency(Resource* res);
21void Init(size_t threads = 1);
22void Yeet();
25void FinishResources();
26size_t GetWaitingResources();
27
28}
29
30#endif // TRAM_SDK_FRAMEWORK_ASYNC_H
Multi-threading and Resource streaming.
void CancelRequest(EntityComponent *requester, Resource *resource)
Cancels a resource load request.
Definition: async.cpp:126
void LoadResourcesFromDisk()
Processes the first resource queue.
Definition: async.cpp:198
void LoadResourcesFromMemory()
Processes the second resource queue.
Definition: async.cpp:228
void Yeet()
Stops the async resource loader thread.
Definition: async.cpp:284
void RequestResource(EntityComponent *requester, Resource *resource)
Adds a resource to the loading queue.
Definition: async.cpp:91
void LoadDependency(Resource *resource)
Loads a resource from disk, skipping the queue.
Definition: async.cpp:137
void Init(size_t threads)
Starts the async resource loader thread.
Definition: async.cpp:262
void FinishResources()
Notifies EntityComponents about finished resources.
Definition: async.cpp:243
size_t GetWaitingResources()
Returns number of resources in queues.
Definition: async.cpp:299
Resource
Definition: stats.h:12
Serialization, i.e.
================================================ FILE: docs/cppapi/attributes_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/attributes.cpp File Reference
Tramway SDK v0.1.1
attributes.cpp File Reference
#include <extensions/kitchensink/attributes.h>
#include <framework/core.h>
#include <framework/file.h>
#include <framework/entity.h>
#include <templates/hashmap.h>
#include <templates/pool.h>
#include <algorithm>

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Ext
 
namespace  tram::Ext::Kitchensink
 Extension containing random stuff that doesn't fit in anywhere else.
 

Functions

Hashmap< AttributeContainer * > tram::Ext::Kitchensink::containers ("Ext::Kitchensink::AttributeContainer Hashmap", ATTRIBUTE_CONTAINER_COUNT)
 
Hashmap< AttributeInfo * > tram::Ext::Kitchensink::infos ("Ext::Kitchensink::AttributeInfo Hashmap", ATTRIBUTE_INFO_COUNT)
 

Variables

const size_t ATTRIBUTE_CONTAINER_COUNT = 50
 
const size_t ATTRIBUTE_INFO_COUNT = 50
 

Variable Documentation

◆ ATTRIBUTE_CONTAINER_COUNT

const size_t ATTRIBUTE_CONTAINER_COUNT = 50

◆ ATTRIBUTE_INFO_COUNT

const size_t ATTRIBUTE_INFO_COUNT = 50
================================================ FILE: docs/cppapi/attributes_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/attributes.h File Reference
Tramway SDK v0.1.1
attributes.h File Reference
#include <vector>
#include <framework/core.h>
#include <framework/uid.h>

Go to the source code of this file.

Classes

struct  tram::Ext::Kitchensink::Attribute
 
struct  tram::Ext::Kitchensink::Effect
 
class  tram::Ext::Kitchensink::AttributeInfo
 
struct  tram::Ext::Kitchensink::AttributeContainer
 

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Ext
 
namespace  tram::Ext::Kitchensink
 Extension containing random stuff that doesn't fit in anywhere else.
 

Enumerations

enum  : int { tram::Ext::Kitchensink::EFFECT_RAISE_BASE , tram::Ext::Kitchensink::EFFECT_RAISE_CONSTANT , tram::Ext::Kitchensink::EFFECT_NEGATE_CHANGE }
 
================================================ FILE: docs/cppapi/attributes_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/attributes.h Source File
Tramway SDK v0.1.1
attributes.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_EXTENSIONS_KITCHENSINK_ATTRIBUTES_H
4#define TRAM_SDK_EXTENSIONS_KITCHENSINK_ATTRIBUTES_H
5
6#include <vector>
7
8#include <framework/core.h>
9#include <framework/uid.h>
10
11namespace tram {
12 class Entity;
13}
14
15namespace tram::Ext::Kitchensink {
16
17enum : int {
21};
22
23struct Attribute {
28};
29
30struct Effect {
34 float value;
35 int type;
36 int flags;
37 float time;
38};
39
41
43public:
44 virtual void Recalculate(Attribute&, const AttributeContainer&);
45
46 name_t GetName() { return name; }
47 static void Register(AttributeInfo*);
48 static AttributeInfo* Find(name_t);
49protected:
51};
52
54 float GetAttribute(name_t attribute);
55 float GetAttributeBase(name_t attribute);
56
57 void SetAttribute(name_t attribute, float base_value);
58
59 void ApplyEffect(Effect effect);
60 void RemoveEffect(name_t tag);
61
62 bool HasAttribute(name_t type);
63
64 void Tick();
65
68 static void LoadFromDisk(const char*);
69
70 // maybe instead use global clock???
71 float last_tick = 0.0f;
72
73 std::vector<Attribute> attributes;
74 std::vector<Effect> effects;
75};
76
77}
78
79#endif // TRAM_SDK_EXTENSIONS_KITCHENSINK_ATTRIBUTES_H
Entity base class.
Definition: entity.h:23
Definition: attributes.h:42
static void Register(AttributeInfo *)
Definition: attributes.cpp:32
static AttributeInfo * Find(name_t)
Definition: attributes.cpp:36
name_t GetName()
Definition: attributes.h:46
name_t name
Definition: attributes.h:50
virtual void Recalculate(Attribute &, const AttributeContainer &)
Definition: attributes.cpp:26
Extension containing random stuff that doesn't fit in anywhere else.
Definition: ai.cpp:15
@ EFFECT_NEGATE_CHANGE
Definition: attributes.h:20
@ EFFECT_RAISE_CONSTANT
Definition: attributes.h:19
@ EFFECT_RAISE_BASE
Definition: attributes.h:18
Serialization, i.e.
uint32_t id_t
Definition: core.h:10
static AttributeContainer * Find(Entity *)
Definition: attributes.cpp:116
float last_tick
Definition: attributes.h:71
float GetAttribute(name_t attribute)
Definition: attributes.cpp:48
void RemoveEffect(name_t tag)
Definition: attributes.cpp:80
void Tick()
Definition: attributes.cpp:88
float GetAttributeBase(name_t attribute)
Definition: attributes.cpp:55
std::vector< Attribute > attributes
Definition: attributes.h:73
bool HasAttribute(name_t type)
Definition: attributes.cpp:84
static void LoadFromDisk(const char *)
Definition: attributes.cpp:131
std::vector< Effect > effects
Definition: attributes.h:74
void SetAttribute(name_t attribute, float base_value)
Definition: attributes.cpp:62
void ApplyEffect(Effect effect)
Definition: attributes.cpp:76
Definition: attributes.h:23
name_t name
Definition: attributes.h:24
float affected_value
Definition: attributes.h:26
float effective_value
Definition: attributes.h:27
float base_value
Definition: attributes.h:25
Definition: attributes.h:30
name_t tag
Definition: attributes.h:33
int type
Definition: attributes.h:35
name_t attribute
Definition: attributes.h:31
float value
Definition: attributes.h:34
int flags
Definition: attributes.h:36
name_t name
Definition: attributes.h:32
float time
Definition: attributes.h:37
Interned string type.
Definition: uid.h:10
================================================ FILE: docs/cppapi/audio_2api_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/api.h File Reference
Tramway SDK v0.1.1
api.h File Reference

Audio API implementation header. More...

#include <audio/audio.h>

Go to the source code of this file.

Namespaces

namespace  tram::Audio::API
 Audio backend API.
 
namespace  tram
 Serialization, i.e.
 
namespace  tram::Audio
 System for doing audio related stuff.
 

Functions

void tram::Audio::API::Init ()
 
void tram::Audio::API::Update ()
 
void tram::Audio::API::Uninit ()
 
void tram::Audio::API::SetListenerPosition (vec3 position)
 Sets the listener position. More...
 
void tram::Audio::API::SetListenerOrientation (quat orientation)
 Sets the listener orientation. More...
 
void tram::Audio::API::SetListenerGain (float gain)
 
audiobuffer_t tram::Audio::API::MakeAudioBuffer (const int16_t *audio_data, int32_t length, int32_t samples, int32_t channels)
 Creates audio buffers from raw audio data. More...
 
void tram::Audio::API::RemoveAudioBuffer (audiobuffer_t buffer)
 Deletes audio buffers. More...
 
audiosource_t tram::Audio::API::MakeAudioSource ()
 Creates an audio source. More...
 
void tram::Audio::API::SetAudioSourcePitch (audiosource_t source, float pitch)
 Sets the pitch of an audio source. More...
 
void tram::Audio::API::SetAudioSourceGain (audiosource_t source, float gain)
 Sets the gain of an audio source. More...
 
void tram::Audio::API::SetAudioSourcePosition (audiosource_t source, vec3 position)
 Sets the position of an audio source. More...
 
void tram::Audio::API::SetAudioSourceVelocity (audiosource_t source, vec3 velocity)
 Sets the velocity of an audio source. More...
 
void tram::Audio::API::SetAudioSourceRepeating (audiosource_t source, bool repeating)
 Sets the repetition of an audio source. More...
 
void tram::Audio::API::SetAudioSourceBuffer (audiosource_t source, audiobuffer_t buffer)
 Sets the buffers that the audio source will play. More...
 
void tram::Audio::API::PlayAudioSource (audiosource_t source)
 Plays an audio source. More...
 
void tram::Audio::API::PauseAudioSource (audiosource_t source)
 Pauses the audio source. More...
 
void tram::Audio::API::StopAudioSource (audiosource_t source)
 Stops the audio source. More...
 
bool tram::Audio::API::IsAudioSourcePlaying (audiosource_t source)
 Checks if an audio source is playing. More...
 
void tram::Audio::API::RemoveAudioSource (audiosource_t source)
 Deletes an audio source. More...
 

Detailed Description

Audio API implementation header.

This file contains the function signatures which need to be implemented by an Audio API backend.

================================================ FILE: docs/cppapi/audio_2api_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/api.h Source File
Tramway SDK v0.1.1
api.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_AUDIO_API_H
4#define TRAM_SDK_AUDIO_API_H
5
6#include <audio/audio.h>
7
23namespace tram::Audio::API {
24
25void Init();
26void Update();
27void Uninit();
28
29void SetListenerPosition(vec3 position);
31void SetListenerGain(float gain);
32
33audiobuffer_t MakeAudioBuffer(const int16_t* audio_data, int32_t length, int32_t samples, int32_t channels);
34void RemoveAudioBuffer(audiobuffer_t buffer);
35
36audiosource_t MakeAudioSource();
37
38void SetAudioSourcePitch(audiosource_t source, float pitch);
39void SetAudioSourceGain(audiosource_t source, float gain);
40void SetAudioSourcePosition(audiosource_t source, vec3 position);
41void SetAudioSourceVelocity(audiosource_t source, vec3 velocity);
42void SetAudioSourceRepeating(audiosource_t source, bool repeating);
43
44void SetAudioSourceBuffer(audiosource_t source, audiobuffer_t buffer);
45
46void PlayAudioSource(audiosource_t source);
47void PauseAudioSource(audiosource_t source);
48void StopAudioSource(audiosource_t source);
49
50bool IsAudioSourcePlaying(audiosource_t source);
51
52void RemoveAudioSource(audiosource_t source);
53
54}
55
56#endif // TRAM_SDK_AUDIO_API_H
Main interface for the Audio system.
Audio backend API.
audiosource_t MakeAudioSource()
Creates an audio source.
Definition: openal.cpp:115
void SetListenerGain(float gain)
Definition: openal.cpp:76
void RemoveAudioBuffer(audiobuffer_t buffer)
Deletes audio buffers.
Definition: openal.cpp:110
void SetListenerOrientation(quat orientation)
Sets the listener orientation.
Definition: openal.cpp:67
void SetAudioSourcePosition(audiosource_t source, vec3 position)
Sets the position of an audio source.
Definition: openal.cpp:129
void Update()
Definition: openal.cpp:53
void SetAudioSourceBuffer(audiosource_t source, audiobuffer_t buffer)
Sets the buffers that the audio source will play.
Definition: openal.cpp:141
void SetAudioSourceRepeating(audiosource_t source, bool repeating)
Sets the repetition of an audio source.
Definition: openal.cpp:137
void StopAudioSource(audiosource_t source)
Stops the audio source.
Definition: openal.cpp:157
void SetAudioSourceVelocity(audiosource_t source, vec3 velocity)
Sets the velocity of an audio source.
Definition: openal.cpp:133
void SetListenerPosition(vec3 position)
Sets the listener position.
Definition: openal.cpp:63
void Init()
Definition: openal.cpp:27
bool IsAudioSourcePlaying(audiosource_t source)
Checks if an audio source is playing.
Definition: openal.cpp:161
void PlayAudioSource(audiosource_t source)
Plays an audio source.
Definition: openal.cpp:149
void SetAudioSourceGain(audiosource_t source, float gain)
Sets the gain of an audio source.
Definition: openal.cpp:125
void SetAudioSourcePitch(audiosource_t source, float pitch)
Sets the pitch of an audio source.
Definition: openal.cpp:121
audiobuffer_t MakeAudioBuffer(const int16_t *audio_data, int32_t length, int32_t samples, int32_t channels)
Creates audio buffers from raw audio data.
Definition: openal.cpp:80
void PauseAudioSource(audiosource_t source)
Pauses the audio source.
Definition: openal.cpp:153
void Uninit()
Definition: openal.cpp:57
void RemoveAudioSource(audiosource_t source)
Deletes an audio source.
Definition: openal.cpp:167
orientation
Definition: gui.h:17
char buffer[500]
Definition: logging.cpp:60
glm::vec3 vec3
Definition: math.h:11
glm::quat quat
Definition: math.h:12
================================================ FILE: docs/cppapi/audio_2audio_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/audio.cpp File Reference
Tramway SDK v0.1.1
audio.cpp File Reference

Main Audio system interface implementation. More...

#include <audio/audio.h>
#include <audio/sound.h>
#include <framework/system.h>
#include <framework/logging.h>
#include <framework/settings.h>
#include <components/audio.h>
#include <unordered_map>
#include <audio/api.h>

Namespaces

namespace  tram::Audio
 System for doing audio related stuff.
 
namespace  tram
 Serialization, i.e.
 

Functions

void tram::Audio::Init ()
 Starts the Audio system. More...
 
void tram::Audio::Update ()
 Updates the Audio system. More...
 
void tram::Audio::Uninit ()
 
void tram::Audio::SetVolume (float value)
 
float tram::Audio::GetVolume ()
 
void tram::Audio::SetListenerPosition (vec3 position)
 See Audio::API::SetListenerPosition(). More...
 
void tram::Audio::SetListenerOrientation (quat orientation)
 See Audio::API::SetListenerOrientation(). More...
 

Detailed Description

Main Audio system interface implementation.

================================================ FILE: docs/cppapi/audio_2audio_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/audio.h File Reference
Tramway SDK v0.1.1
audio.h File Reference

Main interface for the Audio system. More...

#include <framework/core.h>
#include <framework/math.h>

Go to the source code of this file.

Classes

struct  tram::Audio::audiosource_t
 Audio source handle. More...
 
struct  tram::Audio::audiobuffer_t
 Audio buffer handle. More...
 

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Audio
 System for doing audio related stuff.
 

Functions

void tram::Audio::Init ()
 Starts the Audio system. More...
 
void tram::Audio::Update ()
 Updates the Audio system. More...
 
void tram::Audio::Uninit ()
 
void tram::Audio::SetVolume (float value)
 
float tram::Audio::GetVolume ()
 
void tram::Audio::SetListenerPosition (vec3 position)
 See Audio::API::SetListenerPosition(). More...
 
void tram::Audio::SetListenerOrientation (quat orientation)
 See Audio::API::SetListenerOrientation(). More...
 

Detailed Description

Main interface for the Audio system.

================================================ FILE: docs/cppapi/audio_2audio_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/audio.h Source File
Tramway SDK v0.1.1
audio.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_AUDIO_AUDIO_H
4#define TRAM_SDK_AUDIO_AUDIO_H
5
6#include <framework/core.h>
7#include <framework/math.h>
8
15namespace tram::Audio {
16
19 union {
20 uint32_t al_source;
21 void* generic;
22 };
23};
24
27 union {
28 struct {
29 uint32_t* al_buffers;
31 };
32 void* generic;
33 };
34
35};
36
37class Sound;
38
39void Init();
40void Update();
41void Uninit();
42
43void SetVolume(float value);
44float GetVolume();
45
46void SetListenerPosition(vec3 position);
48
49}
50
51#endif // TRAM_SDK_AUDIO_AUDIO_H
Audio data resource.
Definition: sound.h:18
System for doing audio related stuff.
void SetVolume(float value)
Definition: audio.cpp:60
void Uninit()
Definition: audio.cpp:51
void Init()
Starts the Audio system.
Definition: audio.cpp:32
float GetVolume()
Definition: audio.cpp:65
void Update()
Updates the Audio system.
Definition: audio.cpp:46
void SetListenerOrientation(quat orientation)
See Audio::API::SetListenerOrientation().
Definition: audio.cpp:75
void SetListenerPosition(vec3 position)
See Audio::API::SetListenerPosition().
Definition: audio.cpp:70
orientation
Definition: gui.h:17
glm::vec3 vec3
Definition: math.h:11
glm::quat quat
Definition: math.h:12
Audio buffer handle.
Definition: audio.h:26
int32_t al_buffer_count
Definition: audio.h:30
uint32_t * al_buffers
Definition: audio.h:29
Audio source handle.
Definition: audio.h:18
uint32_t al_source
Definition: audio.h:20
================================================ FILE: docs/cppapi/audio_2graph_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/graph.cpp File Reference
Tramway SDK v0.1.1
graph.cpp File Reference
#include <audio/graph.h>
#include <framework/file.h>
#include <framework/logging.h>
#include <templates/hashmap.h>
#include <config.h>
================================================ FILE: docs/cppapi/audio_2graph_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/graph.h File Reference
Tramway SDK v0.1.1
graph.h File Reference
#include <framework/math.h>
#include <framework/resource.h>
#include <vector>

Go to the source code of this file.

Classes

struct  tram::Audio::FilterParameters
 
class  tram::Audio::SoundGraph
 
struct  tram::Audio::SoundGraph::Node
 

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Audio
 System for doing audio related stuff.
 
================================================ FILE: docs/cppapi/audio_2graph_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/graph.h Source File
Tramway SDK v0.1.1
graph.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_AUDIO_GRAPH_H
4#define TRAM_SDK_AUDIO_GRAPH_H
5
6#include <framework/math.h>
8
9#include <vector>
10
11namespace tram::Audio {
12
14 float param1, param2; // TODO: figure out what the parameters should be
15};
16
17class SoundGraph : public Resource {
18public:
20
21 void LoadFromDisk();
23
24 void Unload() {}
25
26 static FilterParameters LookupFilter(vec3 position);
27 static SoundGraph* Find(name_t name);
28protected:
29 struct Node {
32 };
33
34 std::vector<Node> nodes;
35 std::vector<std::pair<uint32_t, uint32_t>> edges;
36};
37
38}
39
40#endif // TRAM_SDK_AUDIO_GRAPH_H
Definition: graph.h:17
static FilterParameters LookupFilter(vec3 position)
Definition: graph.cpp:28
void Unload()
Definition: graph.h:24
std::vector< std::pair< uint32_t, uint32_t > > edges
Definition: graph.h:35
static SoundGraph * Find(name_t name)
Definition: graph.cpp:32
void LoadFromDisk()
Definition: graph.cpp:43
void LoadFromMemory()
Definition: graph.h:22
SoundGraph(name_t name)
Definition: graph.h:19
std::vector< Node > nodes
Definition: graph.h:34
Definition: resource.h:11
name_t name
Definition: resource.h:37
System for doing audio related stuff.
glm::vec3 vec3
Definition: math.h:11
Definition: graph.h:13
float param2
Definition: graph.h:14
float param1
Definition: graph.h:14
Definition: graph.h:29
vec3 position
Definition: graph.h:30
FilterParameters parameters
Definition: graph.h:31
Interned string type.
Definition: uid.h:10
================================================ FILE: docs/cppapi/audio_2sound_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/sound.cpp File Reference
Tramway SDK v0.1.1
sound.cpp File Reference
#include <stb_vorbis.c>
#include <audio/sound.h>
#include <audio/api.h>
#include <framework/logging.h>
#include <framework/system.h>
#include <templates/hashmap.h>
#include <config.h>

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Audio
 System for doing audio related stuff.
 
================================================ FILE: docs/cppapi/audio_2sound_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/sound.h File Reference
Tramway SDK v0.1.1
sound.h File Reference

Sound resource definition. More...

#include <audio/audio.h>
#include <framework/resource.h>

Go to the source code of this file.

Classes

class  tram::Audio::Sound
 Audio data resource. More...
 

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Audio
 System for doing audio related stuff.
 

Detailed Description

Sound resource definition.

================================================ FILE: docs/cppapi/audio_2sound_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/sound.h Source File
Tramway SDK v0.1.1
sound.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_AUDIO_SOUND_H
4#define TRAM_SDK_AUDIO_SOUND_H
5
6#include <audio/audio.h>
7
9
16namespace tram::Audio {
17
18class Sound : public Resource {
19public:
21 int32_t channels = 0;
22 int32_t sample_rate = 0;
23 int32_t sound_length = 0;
24 int16_t* sound_data = nullptr;
25
26 void LoadFromDisk();
28 void Unload();
29
31 inline float GetLength() { return (float)sound_length/(float)sample_rate; }
32
33 static Sound* Find (name_t name);
34protected:
36 template <typename> friend class tram::Pool;
37};
38
39}
40
41#endif // TRAM_SDK_AUDIO_SOUND_H
42
Main interface for the Audio system.
Audio data resource.
Definition: sound.h:18
int32_t sample_rate
Definition: sound.h:22
audiobuffer_t sound_buffer
Definition: sound.h:20
void Unload()
Removes the sound from memory.
Definition: sound.cpp:67
Sound(name_t name)
Definition: sound.h:35
void LoadFromMemory()
Definition: sound.h:27
int32_t channels
Definition: sound.h:21
int16_t * sound_data
Definition: sound.h:24
float GetLength()
Returns sound length in seconds.
Definition: sound.h:31
int32_t sound_length
Definition: sound.h:23
static Sound * Find(name_t name)
Finds a sound by a name.
Definition: sound.cpp:75
void LoadFromDisk()
Loads the sound from the disk.
Definition: sound.cpp:37
Definition: pool.h:21
Definition: resource.h:11
name_t name
Definition: resource.h:37
System for doing audio related stuff.
Audio buffer handle.
Definition: audio.h:26
Interned string type.
Definition: uid.h:10
================================================ FILE: docs/cppapi/buffer_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/buffer.cpp File Reference
Tramway SDK v0.1.1
buffer.cpp File Reference
#include <render/opengl/sprite.h>
#include <config.h>
#include <GL/gl.h>
#include <GLES3/gl3.h>

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Render
 High-level Render system API.
 
namespace  tram::Render::API
 Rendering backend API.
 

Functions

void tram::Render::API::CreateIndexedVertexArray (VertexDefinition vertex_format, vertexarray_t &vertex_array, indexarray_t &index_array, size_t vertex_size, void *vertex_data, size_t index_size, void *index_data)
 
void tram::Render::API::CreateVertexArray (VertexDefinition vertex_format, vertexarray_t &vertex_array)
 
void tram::Render::API::UpdateVertexArray (vertexarray_t &vertex_buffer, size_t data_size, void *data)
 
================================================ FILE: docs/cppapi/buffer_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/buffer.h File Reference
Tramway SDK v0.1.1
buffer.h File Reference
#include <render/render.h>
#include <render/renderer.h>

Go to the source code of this file.

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Render
 High-level Render system API.
 
namespace  tram::Render::API
 Rendering backend API.
 
================================================ FILE: docs/cppapi/buffer_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/buffer.h Source File
Tramway SDK v0.1.1
buffer.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_RENDER_OPENGL_BUFFER_H
4#define TRAM_SDK_RENDER_OPENGL_BUFFER_H
5
6#include <render/render.h>
7#include <render/renderer.h>
8
9namespace tram::Render::API {
10
11}
12
13#endif // TRAM_SDK_RENDER_OPENGL_BUFFER_H
Rendering backend API.
================================================ FILE: docs/cppapi/bullet_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/bullet/bullet.cpp File Reference
Tramway SDK v0.1.1
bullet.cpp File Reference
#include <physics/bullet/debugdrawer.h>
#include <physics/api.h>
#include <components/trigger.h>
#include <config.h>
#include <btBulletDynamicsCommon.h>

Classes

class  tram::Physics::API::CallbackMotionState
 
struct  tram::Physics::API::RigidbodyMetadata
 
struct  tram::Physics::API::ShapecastCallback
 

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Physics
 
namespace  tram::Physics::API
 Physics backend API.
 

Enumerations

enum  tram::Physics::API::UserIndex : int { tram::Physics::API::USERINDEX_RIGIDBODY = 3 , tram::Physics::API::USERINDEX_TRIGGER = 4 }
 
enum  tram::Physics::API::MetadataType { tram::Physics::API::METADATA_RIGIDBODY , tram::Physics::API::METADATA_TRIGGER }
 

Functions

collisionshape_t tram::Physics::API::MakeCollisionShape (CollisionShapeTransform *shapes, size_t shape_count)
 
collisionshape_t tram::Physics::API::MakeCollisionShape (CollisionShape shape)
 
void tram::Physics::API::YeetCollisionShape (collisionshape_t shape)
 
rigidbody_t tram::Physics::API::MakeRigidbody (collisionshape_t shape, float mass, vec3 position, quat rotation, uint32_t mask, uint32_t group, get_trf_callback get_callback, set_trf_callback set_callback, void *data)
 
void tram::Physics::API::YeetRigidbody (rigidbody_t rigidbody)
 
void tram::Physics::API::SetRigidbodyTransformCallback (rigidbody_t rigidbody, std::pair< vec3, quat >(*get_transform_callback)(void *), void(*set_transform_callback)(void *, std::pair< vec3, quat >), void *data)
 
void tram::Physics::API::SetRigidbodyCollisionCallback (rigidbody_t rigidbody, col_callback callback, void *data)
 
void tram::Physics::API::SetRigidbodyCollisionMask (rigidbody_t rigidbody, uint32_t mask)
 
void tram::Physics::API::SetRigidbodyCollisionGroup (rigidbody_t rigidbody, uint32_t group)
 
void tram::Physics::API::SetRigidbodyLocation (rigidbody_t rigidbody, vec3 location)
 
void tram::Physics::API::SetRigidbodyRotation (rigidbody_t rigidbody, quat rotation)
 
void tram::Physics::API::SetRigidbodyMass (rigidbody_t rigidbody, float mass)
 
void tram::Physics::API::PushRigidbody (rigidbody_t rigidbody, vec3 direction)
 
void tram::Physics::API::PushRigidbody (rigidbody_t rigidbody, vec3 direction, vec3 local)
 
void tram::Physics::API::SpinRigidbody (rigidbody_t rigidbody, vec3 direction)
 
void tram::Physics::API::SetRigidbodyDebugDrawing (rigidbody_t rigidbody, bool drawing)
 
void tram::Physics::API::SetRigidbodyKinematic (rigidbody_t rigidbody, bool kinematic)
 
void tram::Physics::API::SetRigidbodyAngularFactor (rigidbody_t rigidbody, vec3 factor)
 
void tram::Physics::API::SetRigidbodyLinearFactor (rigidbody_t rigidbody, vec3 factor)
 
void tram::Physics::API::SetRigidbodyVelocity (rigidbody_t rigidbody, vec3 velocity)
 
vec3 tram::Physics::API::GetRigidbodyVelocity (rigidbody_t rigidbody)
 
void tram::Physics::API::AwakenRigidbody (rigidbody_t rigidbody)
 
void tram::Physics::API::SleepRigidbody (rigidbody_t rigidbody)
 
void tram::Physics::API::DisableRigidbodyDeactivation (rigidbody_t rigidbody)
 
trigger_t tram::Physics::API::MakeTrigger (collisionshape_t shape, uint32_t mask, uint32_t group, vec3 position, quat rotation)
 
void tram::Physics::API::YeetTrigger (trigger_t)
 
void tram::Physics::API::SetTriggerCollisionCallback (trigger_t rigidbody, col_callback callback, void *data)
 
void tram::Physics::API::SetTriggerCollisionMask (trigger_t rigidbody, uint32_t mask)
 
void tram::Physics::API::SetTriggerCollisionGroup (trigger_t rigidbody, uint32_t group)
 
void tram::Physics::API::SetTriggerLocation (trigger_t rigidbody, vec3 location)
 
void tram::Physics::API::SetTriggerRotation (trigger_t rigidbody, quat location)
 
std::pair< ObjectCollision, void * > tram::Physics::API::Raycast (vec3 from, vec3 to, uint32_t collision_mask)
 
std::vector< std::pair< ObjectCollision, void * > > tram::Physics::API::Shapecast (CollisionShape shape, vec3 from, vec3 to, uint32_t collision_mask)
 
void tram::Physics::API::DrawDebug (bool)
 
void tram::Physics::API::Init ()
 
void tram::Physics::API::StepPhysics ()
 
void tram::Physics::API::DrawDebug ()
 

Variables

Pool< RigidbodyMetadata > tram::Physics::API::rigidbody_metadata_pool ("RigidbodyMetadata pool", RIGIDBODY_LIMIT)
 
================================================ FILE: docs/cppapi/bullet_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/bullet/bullet.h File Reference
Tramway SDK
bullet.h File Reference

Go to the source code of this file.

Namespaces

namespace  tram
 TODO:
 
namespace  tram::Physics
 
namespace  tram::Physics::Bullet
 
================================================ FILE: docs/cppapi/bullet_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/bullet/bullet.h Source File
Tramway SDK
bullet.h
Go to the documentation of this file.
1// TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022
2// All rights reserved.
3
4#ifndef PHYSICS_BULLET_BULLET_H
5#define PHYSICS_BULLET_BULLET_H
6
7#include <physics/physics.h>
9
11
12}
13
14#endif // PHYSICS_BULLET_BULLET_H
Definition: bullet.h:10
================================================ FILE: docs/cppapi/camera_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/camera/camera.cpp File Reference
Tramway SDK v0.1.1
camera.cpp File Reference

Namespaces

namespace  tram::Ext::Camera
 Several different camera implementations.
 
namespace  tram
 Serialization, i.e.
 
namespace  tram::Ext
 

Functions

void tram::Ext::Camera::Init ()
 
void tram::Ext::Camera::Update ()
 

Variables

System::system_t tram::Ext::Camera::CAMERA_SYSTEM = -1u
 
Camera * tram::Ext::Camera::selected_camera = nullptr
 
Settings::Property< float > tram::Ext::Camera::shake_multiplier = {1.0f, "camerashake", Settings::NONE}
 
id_t tram::Ext::Camera::look_at_entity = 0
 
quat tram::Ext::Camera::look_at_direction = {1.0f, 0.0f, 0.0f, 0.0f}
 
================================================ FILE: docs/cppapi/camera_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/camera/camera.h File Reference
Tramway SDK v0.1.1
camera.h File Reference
#include <framework/math.h>
#include <framework/core.h>
#include <framework/event.h>

Go to the source code of this file.

Classes

class  tram::Ext::Camera::Camera
 Interface API for cameras. More...
 

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Ext
 
namespace  tram::Ext::Camera
 Several different camera implementations.
 

Functions

void tram::Ext::Camera::Init ()
 
void tram::Ext::Camera::Update ()
 
================================================ FILE: docs/cppapi/camera_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/camera/camera.h Source File
Tramway SDK v0.1.1
camera.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_EXTENSIONS_CAMERA_CAMERA_H
4#define TRAM_SDK_EXTENSIONS_CAMERA_CAMERA_H
5
6#include <framework/math.h>
7#include <framework/core.h>
8#include <framework/event.h>
9
10namespace tram::Ext::Camera {
11
12class Camera {
13public:
14 void SetActive();
15 void SetFollowing(Entity*);
17
18 inline void SetPosition(vec3 position) { this->position = position; }
19 inline void SetRotation(quat rotation) { this->rotation = rotation; }
20
21 inline vec3 GetPosition() { return position; }
22 inline quat GetRotation() { return rotation; }
23
24 void SetViewTransform();
26
27 void SetFollowingLookat(quat new_lookat);
28
29 void SetLayerMask(uint32_t layer_mask) { this->layer_mask = layer_mask; }
30
31 virtual void Update() = 0;
32 virtual ~Camera();
33protected:
34 vec3 position = {0.0f, 0.0f, 0.0f};
35 quat rotation = {1.0f, 0.0f, 0.0f, 0.0f};
36
38
39 uint32_t layer_mask = 1 + 2;
40
42 quat following_lookat = {1.0f, 0.0f, 0.0f, 0.0f};
43};
44
45void Init();
46void Update();
47
48}
49
50#endif // TRAM_SDK_EXTENSIONS_CAMERA_CAMERA_H
Entity base class.
Definition: entity.h:23
Interface API for cameras.
Definition: camera.h:12
void SetFollowingLookat(quat new_lookat)
Definition: camera.cpp:99
vec3 position
Definition: camera.h:34
void SetRotation(quat rotation)
Definition: camera.h:19
virtual ~Camera()
Definition: camera.cpp:61
void SetViewTransform()
Definition: camera.cpp:65
quat rotation
Definition: camera.h:35
void SetPosition(vec3 position)
Definition: camera.h:18
uint32_t layer_mask
Definition: camera.h:39
void SetFollowing(Entity *)
Definition: camera.cpp:83
quat following_lookat
Definition: camera.h:42
void SetLayerMask(uint32_t layer_mask)
Definition: camera.h:29
id_t GetFollowing()
Definition: camera.cpp:95
listener_t following_listener
Definition: camera.h:37
quat GetRotation()
Definition: camera.h:22
id_t following
Definition: camera.h:41
void SetActive()
Definition: camera.cpp:79
virtual void Update()=0
Definition: camera.cpp:57
void SetListenerTransform()
Definition: camera.cpp:74
vec3 GetPosition()
Definition: camera.h:21
Several different camera implementations.
void Update()
Definition: camera.cpp:52
void Init()
Definition: camera.cpp:41
uint32_t id_t
Definition: core.h:10
glm::vec3 vec3
Definition: math.h:11
glm::quat quat
Definition: math.h:12
uint32_t listener_t
Definition: event.h:16
================================================ FILE: docs/cppapi/character_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/character.cpp File Reference
Tramway SDK v0.1.1
character.cpp File Reference

Classes

struct  tram::Ext::Kitchensink::InitialAttribute
 

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Ext
 
namespace  tram::Ext::Kitchensink
 Extension containing random stuff that doesn't fit in anywhere else.
 

Functions

Hashmap< Faction * > tram::Ext::Kitchensink::factions ("Ext::Kitchensink::Faction Hashmap", FACTION_COUNT)
 
Hashmap< CharacterClass * > tram::Ext::Kitchensink::character_classes ("Ext::Kitchensink::Character Hashmap", CHARACTER_COUNT)
 
Hashmap< Character * > tram::Ext::Kitchensink::characters ("Ext::Kitchensink::CharacterClass Hashmap", CLASS_COUNT)
 

Variables

const size_t FACTION_COUNT = 50
 
const size_t CHARACTER_COUNT = 50
 
const size_t CLASS_COUNT = 50
 

Variable Documentation

◆ CHARACTER_COUNT

const size_t CHARACTER_COUNT = 50

◆ CLASS_COUNT

const size_t CLASS_COUNT = 50

◆ FACTION_COUNT

const size_t FACTION_COUNT = 50
================================================ FILE: docs/cppapi/character_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/character.h File Reference
Tramway SDK v0.1.1
character.h File Reference

Go to the source code of this file.

Classes

struct  tram::Ext::Kitchensink::FactionRelation
 
struct  tram::Ext::Kitchensink::FactionRank
 
struct  tram::Ext::Kitchensink::BaseFactionRank
 
class  tram::Ext::Kitchensink::Faction
 
struct  tram::Ext::Kitchensink::BaseAttribute
 
class  tram::Ext::Kitchensink::CharacterClass
 
struct  tram::Ext::Kitchensink::CharacterDisposition
 
class  tram::Ext::Kitchensink::Character
 

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Ext
 
namespace  tram::Ext::Kitchensink
 Extension containing random stuff that doesn't fit in anywhere else.
 
================================================ FILE: docs/cppapi/character_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/character.h Source File
Tramway SDK v0.1.1
character.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_EXTENSIONS_KITCHENSINK_CHARACTER_H
4#define TRAM_SDK_EXTENSIONS_KITCHENSINK_CHARACTER_H
5
7
8#include <framework/core.h>
9
10namespace tram {
11 class Entity;
12}
13
14namespace tram::Ext::Kitchensink {
15
16class Character;
17class Faction;
18
22};
23
26 float rank;
27 float loyalty;
28};
29
32 float rank;
33 float loyalty;
34};
35
36class Faction {
37public:
39
43 void SetCharacterRank(Character*, float);
44 void SetCharacterLoyalty(Character*, float);
47 void SetRelation(Faction*, float);
48 float GetRelation(Faction*);
50
51 static Faction* Find(name_t name);
52protected:
53 std::vector<FactionRank> ranks;
54 std::vector<FactionRelation> relations;
55};
56
59 float value;
60};
61
63public:
66
67 void SetAttribute(name_t attribute, float value);
68 float GetAttribute(name_t attribute);
69
70 void AddFaction(Faction*, float, float);
71
74
75 static CharacterClass* Find(name_t name);
76protected:
77 std::vector<CharacterClass*> base_classes;
78 std::vector<BaseAttribute> base_attributes;
79 std::vector<BaseFactionRank> base_factions;
80};
81
85};
86
87class Character {
88public:
91
94 void SetBaseDisposition(Character*, float);
95
96 bool IsInFaction(Faction*);
97
98 static void LoadFromDisk(const char*);
99 static Character* Find(Entity* entity);
100 static Character* Find(id_t entity_id);
101protected:
102 friend class Faction;
103
105
107
108 std::vector<CharacterDisposition> dispositions;
109 std::vector<Faction*> factions;
110};
111
112}
113
114#endif // TRAM_SDK_EXTENSIONS_KITCHENSINK_CHARACTER_H
Entity base class.
Definition: entity.h:23
Definition: character.h:62
bool HasBaseClass(CharacterClass *)
Definition: character.cpp:162
float GetAttribute(name_t attribute)
Definition: character.cpp:187
void AddBaseClass(CharacterClass *)
Definition: character.cpp:155
void AddFaction(Faction *, float, float)
Definition: character.cpp:197
std::vector< BaseFactionRank > base_factions
Definition: character.h:79
std::vector< BaseAttribute > base_attributes
Definition: character.h:78
void SetAttribute(name_t attribute, float value)
Definition: character.cpp:171
static CharacterClass * Find(name_t name)
Definition: character.cpp:229
std::vector< CharacterClass * > base_classes
Definition: character.h:77
void GatherBaseAttributes(AttributeContainer &)
Definition: character.cpp:216
Definition: character.h:87
void SetBaseDisposition(Character *, float)
Definition: character.cpp:272
CharacterClass * character_class
Definition: character.h:106
std::vector< CharacterDisposition > dispositions
Definition: character.h:108
bool IsInFaction(Faction *)
Definition: character.cpp:280
float GetDisposition(Character *)
Definition: character.cpp:261
bool HasClass(CharacterClass *)
Definition: character.cpp:245
id_t entity_id
Definition: character.h:104
static Character * Find(Entity *entity)
Definition: character.cpp:288
void AddClass(CharacterClass *)
Definition: character.cpp:241
static void LoadFromDisk(const char *)
Definition: character.cpp:304
float GetBaseDisposition(Character *)
Definition: character.cpp:250
std::vector< Faction * > factions
Definition: character.h:109
Definition: character.h:36
std::vector< FactionRank > ranks
Definition: character.h:53
float GetDisposition(Character *)
Definition: character.cpp:131
static Faction * Find(name_t name)
Definition: character.cpp:139
void SetCharacterRank(Character *, float)
Definition: character.cpp:64
bool HasCharacter(Character *)
Definition: character.cpp:56
std::vector< FactionRelation > relations
Definition: character.h:54
void SetRelation(Faction *, float)
Definition: character.cpp:102
float GetCharacterLoyalty(Character *)
Definition: character.cpp:92
float GetRelation(Faction *)
Definition: character.cpp:121
void RemoveCharacter(Character *)
Definition: character.cpp:52
void SetCharacterLoyalty(Character *, float)
Definition: character.cpp:73
void AddCharacter(Character *)
Definition: character.cpp:33
name_t name
Definition: character.h:38
float GetCharacterRank(Character *)
Definition: character.cpp:82
Extension containing random stuff that doesn't fit in anywhere else.
Definition: ai.cpp:15
Serialization, i.e.
uint32_t id_t
Definition: core.h:10
Definition: character.h:57
name_t name
Definition: character.h:58
float value
Definition: character.h:59
Definition: character.h:30
Faction * faction
Definition: character.h:31
float loyalty
Definition: character.h:33
float rank
Definition: character.h:32
float disposition
Definition: character.h:84
Character * character
Definition: character.h:83
Definition: character.h:24
float rank
Definition: character.h:26
Character * character
Definition: character.h:25
float loyalty
Definition: character.h:27
Definition: character.h:19
float disposition
Definition: character.h:21
Faction * faction
Definition: character.h:20
Interned string type.
Definition: uid.h:10
================================================ FILE: docs/cppapi/class_animation_component.html ================================================ Tramway SDK: AnimationComponent Class Reference
Tramway SDK v0.1.0
The Ultimate Tramway Drifting Simulation Solution
AnimationComponent Class Reference

Plays back Animations. More...

Detailed Description


The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/animation.cpp
================================================ FILE: docs/cppapi/class_audio_component.html ================================================ Tramway SDK: AudioComponent Class Reference
Tramway SDK v0.1.0
The Ultimate Tramway Drifting Simulation Solution
AudioComponent Class Reference

Plays back Sounds. More...

Detailed Description


The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/audio.cpp
================================================ FILE: docs/cppapi/class_controller_component.html ================================================ Tramway SDK: ControllerComponent Class Reference
Tramway SDK v0.1.0
The Ultimate Tramway Drifting Simulation Solution
ControllerComponent Class Reference

Provides an API for character controllers. More...

Detailed Description

Provides an API for character controllers.

See also
https://racenis.github.io/tram-sdk/documentation/components/controller.html

The documentation for this class was generated from the following file:
================================================ FILE: docs/cppapi/class_f_p_s_controller_component.html ================================================ Tramway SDK: FPSControllerComponent Class Reference
Tramway SDK v0.1.0
The Ultimate Tramway Drifting Simulation Solution
FPSControllerComponent Class Reference

Implementation of an FPS-style character controller. More...

Detailed Description

Implementation of an FPS-style character controller.

It is relatively slow, due to the use of Shapecasts, which makes it suitable only for player characters. Consider useing a RaycastControllerComponent for other uses.

See also
ControllerComponent

The documentation for this class was generated from the following file:
================================================ FILE: docs/cppapi/class_light_component.html ================================================ Tramway SDK: LightComponent Class Reference
Tramway SDK v0.1.0
The Ultimate Tramway Drifting Simulation Solution
LightComponent Class Reference

Provides a real-time illumination for the scene. More...

Detailed Description

Provides a real-time illumination for the scene.

See also
https://racenis.github.io/tram-sdk/documentation/components/light.html

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/light.cpp
================================================ FILE: docs/cppapi/class_particle_component.html ================================================ Tramway SDK: ParticleComponent Class Reference
Tramway SDK v0.1.0
The Ultimate Tramway Drifting Simulation Solution
ParticleComponent Class Reference

Provides amusing graphical effects. More...

Detailed Description


The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/particle.cpp
================================================ FILE: docs/cppapi/class_physics_component.html ================================================ Tramway SDK: PhysicsComponent Class Reference
Tramway SDK v0.1.0
The Ultimate Tramway Drifting Simulation Solution
PhysicsComponent Class Reference

Rigidbody wrapper. More...

Detailed Description


The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/physics.cpp
================================================ FILE: docs/cppapi/class_player_component.html ================================================ Tramway SDK: PlayerComponent Class Reference
Tramway SDK v0.1.0
The Ultimate Tramway Drifting Simulation Solution
PlayerComponent Class Reference

Translates keyboard/mouse inputs into inputs for ControllerComponent. More...

Detailed Description

Translates keyboard/mouse inputs into inputs for ControllerComponent.

See also
https://racenis.github.io/tram-sdk/documentation/components/player.html

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/player.cpp
================================================ FILE: docs/cppapi/class_raycast_controller_component.html ================================================ Tramway SDK: RaycastControllerComponent Class Reference
Tramway SDK v0.1.0
The Ultimate Tramway Drifting Simulation Solution
RaycastControllerComponent Class Reference

Implementation of a simple character controller. More...

Detailed Description

Implementation of a simple character controller.

See also
ControllerComponent

The documentation for this class was generated from the following file:
================================================ FILE: docs/cppapi/class_render_component.html ================================================ Tramway SDK: RenderComponent Class Reference
Tramway SDK v0.1.0
The Ultimate Tramway Drifting Simulation Solution
RenderComponent Class Reference

Renders a Model. More...

Detailed Description


The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/render.cpp
================================================ FILE: docs/cppapi/class_sprite_component.html ================================================ Tramway SDK: SpriteComponent Class Reference
Tramway SDK v0.1.0
The Ultimate Tramway Drifting Simulation Solution
SpriteComponent Class Reference

Provides amusing graphical effects. More...

Detailed Description


The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/sprite.cpp
================================================ FILE: docs/cppapi/class_trigger_component.html ================================================ Tramway SDK: TriggerComponent Class Reference
Tramway SDK v0.1.0
The Ultimate Tramway Drifting Simulation Solution
TriggerComponent Class Reference

Trigger wrapper. More...

Detailed Description


The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/trigger.cpp
================================================ FILE: docs/cppapi/classes.html ================================================ Tramway SDK: Class Index
Tramway SDK v0.1.1
Class Index
A | B | C | D | E | F | G | H | I | K | L | M | N | O | P | Q | R | S | T | U | V | W | _
A
AABBLeaf (tram::Render::AABB)
AABBTree (tram)
AABBTriangle (tram::Render)
AIAgent (tram::Ext::Kitchensink)
AIPackage (tram::Ext::Kitchensink)
AIVariable (tram::Ext::Kitchensink)
Animation (tram::Render)
AnimationComponent (tram)
AnimationComponent::AnimationPlaybackInfo (tram)
AnimationStateComponent (tram::Ext::Kitchensink)
AnimationTable (tram::Ext::Kitchensink)
AnimState (tram::Ext::Kitchensink)
AnimStateSpace (tram::Ext::Kitchensink)
AnimStateTransitionDefault (tram::Ext::Kitchensink)
AnimStateTransitionFrom (tram::Ext::Kitchensink)
AnimStateTransitionInto (tram::Ext::Kitchensink)
Attribute (tram::Ext::Kitchensink)
AttributeContainer (tram::Ext::Kitchensink)
AttributeInfo (tram::Ext::Kitchensink)
AudioBuffer (tram::Audio::Spatial)
audiobuffer_t (tram::Audio)
AudioComponent (tram)
AudioRender (tram::Audio::Spatial)
AudioSource (tram::Audio::Spatial)
audiosource_t (tram::Audio)
B
BaseAttribute (tram::Ext::Kitchensink)
BaseFactionRank (tram::Ext::Kitchensink)
Bone (tram::Render)
Breakable (tram::Ext::Kitchensink)
BucketMapping (tram::Render)
Button (tram::Ext::Kitchensink)
C
CallbackMotionState (tram::Physics::API)
Camera (tram::Ext::Camera)
Character (tram::Ext::Kitchensink)
CharacterClass (tram::Ext::Kitchensink)
CharacterDisposition (tram::Ext::Kitchensink)
ClipPoint (tram::Render::API)
ClipTriangle (tram::Render::API)
Collision (tram::Physics)
CollisionModel (tram::Physics)
CollisionShape (tram::Physics)
collisionshape_t (tram::Physics)
CollisionShapeTransform (tram::Physics::API)
CollisionTriangle (tram::Physics)
ColorVertex (tram::Render::API)
Component (tram)
Console (tram::Ext::Menu)
ControllerComponent (tram)
Crate (tram)
D
D3DDrawListEntry (tram::Render::API)
D3DLight (tram::Render::API)
DebugMenu (tram::Ext::Menu)
DebugShape (tram::Ext::Kitchensink)
DebugText (tram::Ext::Kitchensink)
DecalComponent (tram)
Decoration (tram)
DialogAction (tram::Ext::Kitchensink)
DialogCondition (tram::Ext::Kitchensink)
DialogController (tram::Ext::Kitchensink)
DialogTopic (tram::Ext::Kitchensink)
DiskReader (tram)
DiskWriter (tram)
drawlistentry_t (tram::Render)
DynamicModelData (tram::Render)
DynamicModelVertex (tram::Render)
DynamicVertex (tram::Render::API)
E
Edge (tram)
Effect (tram::Ext::Kitchensink)
Entity (tram)
EntityChildren (tram::Ext::Kitchensink)
EntityComponent (tram)
EntityPicker (tram::Ext::Menu)
EntityProperties (tram::Ext::Menu)
EntityTypeInfo (tram)
Event (tram)
EventEmit (tram::Ext::Menu)
EventIntercept (tram::Ext::Menu)
EventListener (tram)
F
Faction (tram::Ext::Kitchensink)
FactionRank (tram::Ext::Kitchensink)
FactionRelation (tram::Ext::Kitchensink)
FFPHelper (tram::Render::API)
Entity::FieldInfo (tram)
File (tram)
FileReader (tram)
FileReader (tram::Platform)
FileReaderParser (tram)
FileSource (tram)
FileWriter (tram)
FileWriter (tram::Platform)
FileWriterParser (tram)
FilterParameters (tram::Audio)
FirstPersonCamera (tram::Ext::Camera)
FPSControllerComponent (tram)
FragmentShader (tram::Render::API)
FrameObject (tram::GUI)
FVFHelper (tram::Render::API)
G
GLDrawListEntry (tram::Render::API)
GLLight (tram::Render::API)
GLMaterial (tram::Render::API)
Graph (tram)
H
Hashmap (tram)
I
indexarray_t (tram::Render)
IndexRange (tram::Render)
InitialAttribute (tram::Ext::Kitchensink)
Intercept (tram::Ext::Menu)
InterceptMenu (tram::Ext::Menu)
Interface (tram::Script)
Inventory (tram::Ext::Kitchensink)
InventoryFactoryInfo (tram::Ext::Kitchensink)
InventoryManager (tram::Ext::Kitchensink)
ItemClass (tram::Ext::Kitchensink)
ItemInstance (tram::Ext::Kitchensink)
Pool::iterator (tram)
K
KeyBinding (tram::UI)
Keyframe (tram::Render)
KeyframeHeader (tram::Render)
KitchensinkMenuList (tram::Ext::Kitchensink)
L
LayerParameters (tram::Render::API)
Light (tram)
Light (tram::Render::LightTree)
light_t (tram::Render)
LightComponent (tram)
LightGraph (tram::Render)
LineVertex (tram::Render::API)
LineVertex (tram::Render)
LinkedShader (tram::Render::API)
ListDialog (tram::Ext::Kitchensink)
ListenerInfo (tram)
ListInventory (tram::Ext::Kitchensink)
ListInventoryManager (tram::Ext::Kitchensink)
ListSelection (tram::Ext::Menu)
ListTrade (tram::Ext::Kitchensink)
LogIntercept (tram::Ext::Menu)
Lua (tram::Ext::Scripting::Lua)
M
Marker (tram)
Material (tram::Render)
material_t (tram::Render)
Menu (tram::Ext::Menu)
Message (tram)
MessageIntercept (tram::Ext::Menu)
MessageSend (tram::Ext::Menu)
Model (tram::Render)
ModelAABB (tram::Render)
ModelData (tram::Render)
N
Navmesh (tram)
NavmeshNode (tram)
Octree::NearestSearch (tram)
AABBTree::Node (tram)
SoundGraph::Node (tram::Audio)
Node (tram)
Octree::Node (tram)
LightGraph::Node (tram::Render)
O
ObjectCollision (tram::Physics::API)
Octree (tram)
Options (tram::Ext::Menu)
P
ParticleComponent::Particle (tram)
ParticleComponent (tram)
Path (tram)
PathAction (tram::Physics)
PathEdgeInfo (tram)
PathExplorationResult (tram::Audio::Spatial)
PathFollower (tram)
PathFromAudioSource (tram::Audio::Spatial)
PathRenderingInfo (tram::Audio::Spatial)
PathTracingResult (tram::Audio::Spatial)
PhysicsComponent (tram)
PhysicsDebugDraw (tram::Physics::API)
Pickup (tram::Ext::Kitchensink)
Player (tram)
PlayerComponent (tram)
Point2D (tram::Render::API)
Pool (tram)
PoolProxy (tram)
PoolPtr (tram)
Pose (tram::Render)
Property (tram::Settings)
Q
QueryResponse (tram::Render::AABB)
Quest (tram::Ext::Kitchensink)
QuestEntity (tram::Ext::Kitchensink)
QuestList (tram::Ext::Kitchensink)
QuestTrigger (tram::Ext::Kitchensink)
QuestVariable (tram::Ext::Kitchensink)
Queue (tram)
R
RawSetting (tram::Settings)
RaycastControllerComponent (tram)
Hashmap::Record (tram)
RegisteredVertexDefinition (tram::Render)
RenderComponent (tram)
Resource (tram)
ResourceProxy (tram)
ResourceRequest (tram::Async)
rigidbody_t (tram::Physics)
RigidbodyMetadata (tram::Physics::API)
S
Scanline (tram::Render::API)
ScanlineBuffer (tram::Render::API)
Scriptable (tram)
ScriptableTypeInfo (tram::ScriptableType)
SettingInfo (tram::Settings)
SettingsMenu (tram::Ext::Menu)
ShaderBuffer (tram::Render::API)
ShaderUniformMatrices (tram::Render::API)
ShaderUniformModelMatrices (tram::Render::API)
ShapecastCallback (tram::Physics::API)
SharedEntityData (tram)
Signal (tram)
SignalMenu (tram::Ext::Menu)
SignalTable (tram)
Sound (tram::Audio)
Sound (tram)
SoundGraph (tram::Audio)
SoundGraph (tram::Render)
SoundTable (tram::Ext::Kitchensink)
SphericalHarmonic (tram::Render)
Spinlock (tram)
Sprite (tram::Render)
spritearray_t (tram::Render)
SpriteComponent (tram)
SpriteFrame (tram::Render)
SpritePoint (tram::Render)
SpriteVertex (tram::Render)
Stack (tram)
StackPool (tram)
StaticModelData (tram::Render)
StaticModelVertex (tram::Render)
StaticVertex (tram::Render::API)
StaticWorldObject (tram)
StatisticsMenu (tram::Ext::Menu)
SWDrawListEntry (tram::Render::API)
SWIndexArray (tram::Render::API)
SWLight (tram::Render::API)
SWTexture (tram::Render::API)
SWVertexArray (tram::Render::API)
SystemInfo (tram::System)
SystemMenu (tram::Ext::Menu)
SystemStat (tram::Stats)
T
TemplateComponent (tram)
TextReaderParser (tram)
texturehandle_t (tram::Render)
TextWriterParser (tram)
Train (tram::Ext::Kitchensink)
Transition (tram)
Triangle (tram::Render)
TriangleBucket (tram::Render)
Trigger (tram)
trigger_t (tram::Physics)
TriggerAutosave (tram::Ext::Kitchensink)
TriggerComponent (tram)
TriggerHurt (tram::Ext::Kitchensink)
TriggerMultiple (tram::Ext::Kitchensink)
TriggerOnce (tram::Ext::Kitchensink)
TriggerPlayerMovement (tram::Ext::Kitchensink)
TriggerPush (tram::Ext::Kitchensink)
TriggerRemove (tram::Ext::Kitchensink)
TriggerTeleport (tram::Ext::Kitchensink)
U
UID (tram)
V
Value (tram)
ValueArray (tram)
ValuePtr (tram)
vertexarray_t (tram::Render)
VertexAttribute (tram::Render)
VertexBufferMetadata (tram::Render::API)
VertexDefinition (tram::Render)
VertexShader (tram::Render::API)
W
Water (tram::Ext::Kitchensink)
WorldCell (tram)
WorldCellProperties (tram::Ext::Menu)
_
_test_case
================================================ FILE: docs/cppapi/classtram_1_1_a_a_b_b_tree-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::AABBTree Member List

This is the complete list of members for tram::AABBTree, including all inherited members.

AABBDistance(vec3 ray_pos, vec3 ray_dir, vec3 min, vec3 max)tram::AABBTreeinlinestatic
AABBIntersect(vec3 ray_pos, vec3 ray_dir, vec3 min, vec3 max)tram::AABBTreeinlinestatic
AABBOverlap(vec3 min, vec3 max, vec3 other_min, vec3 other_max)tram::AABBTreeinlinestatic
AABBSurface(vec3 min, vec3 max)tram::AABBTreeinlinestatic
AABBTree()tram::AABBTreeinline
AABBVolume(vec3 min, vec3 max)tram::AABBTreeinlinestatic
FindAABBIntersection(vec3 min, vec3 max, auto callback)tram::AABBTreeinline
FindAABBIntersection(Node *node, vec3 min, vec3 max, auto callback)tram::AABBTreeinline
FindIntersection(vec3 ray_pos, vec3 ray_dir, Node *node, std::vector< uint32_t > &result) consttram::AABBTreeinline
FindIntersection(vec3 ray_pos, vec3 ray_dir, float distance_limit, auto filter) consttram::AABBTreeinline
FindIntersectionRecursive(vec3 ray_pos, vec3 ray_dir, float &nearest_dist, uint32_t &nearest_index, float distance_limit, Node *node, auto filter) consttram::AABBTreeinline
FindSibling(vec3 min, vec3 max, Node *node)tram::AABBTreeinline
GetAABBMax()tram::AABBTreeinline
GetAABBMin()tram::AABBTreeinline
InsertLeaf(uint32_t value, vec3 min, vec3 max)tram::AABBTreeinline
MergeAABBMax(vec3 a, vec3 b)tram::AABBTreeinlinestatic
MergeAABBMin(vec3 a, vec3 b)tram::AABBTreeinlinestatic
RemoveHierarchy(Node *node)tram::AABBTreeinline
RemoveLeaf(Node *node)tram::AABBTreeinline
roottram::AABBTree
UpdateParentAABB(Node *node)tram::AABBTreeinline
ValidateTree(Node *node)tram::AABBTreeinline
ValidateTree(Node *node, size_t num)tram::AABBTreeinline
~AABBTree()tram::AABBTreeinline
================================================ FILE: docs/cppapi/classtram_1_1_a_a_b_b_tree.html ================================================ Tramway SDK: tram::AABBTree Class Reference
Tramway SDK v0.1.1

#include <aabb.h>

Classes

struct  Node
 

Public Member Functions

 AABBTree ()
 
 ~AABBTree ()
 
vec3 GetAABBMin ()
 
vec3 GetAABBMax ()
 
NodeInsertLeaf (uint32_t value, vec3 min, vec3 max)
 
void RemoveLeaf (Node *node)
 
void RemoveHierarchy (Node *node)
 
void FindIntersection (vec3 ray_pos, vec3 ray_dir, Node *node, std::vector< uint32_t > &result) const
 
uint32_t FindIntersection (vec3 ray_pos, vec3 ray_dir, float distance_limit, auto filter) const
 
void FindIntersectionRecursive (vec3 ray_pos, vec3 ray_dir, float &nearest_dist, uint32_t &nearest_index, float distance_limit, Node *node, auto filter) const
 
void FindAABBIntersection (vec3 min, vec3 max, auto callback)
 
void FindAABBIntersection (Node *node, vec3 min, vec3 max, auto callback)
 
void UpdateParentAABB (Node *node)
 
NodeFindSibling (vec3 min, vec3 max, Node *node)
 
void ValidateTree (Node *node)
 
void ValidateTree (Node *node, size_t num)
 

Static Public Member Functions

static vec3 MergeAABBMin (vec3 a, vec3 b)
 
static vec3 MergeAABBMax (vec3 a, vec3 b)
 
static bool AABBOverlap (vec3 min, vec3 max, vec3 other_min, vec3 other_max)
 
static float AABBVolume (vec3 min, vec3 max)
 
static float AABBSurface (vec3 min, vec3 max)
 
static bool AABBIntersect (vec3 ray_pos, vec3 ray_dir, vec3 min, vec3 max)
 
static float AABBDistance (vec3 ray_pos, vec3 ray_dir, vec3 min, vec3 max)
 

Public Attributes

Noderoot = new Node {nullptr, nullptr, nullptr, {0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f}}
 

Constructor & Destructor Documentation

◆ AABBTree()

tram::AABBTree::AABBTree ( )
inline

◆ ~AABBTree()

tram::AABBTree::~AABBTree ( )
inline

Member Function Documentation

◆ AABBDistance()

static float tram::AABBTree::AABBDistance ( vec3  ray_pos,
vec3  ray_dir,
vec3  min,
vec3  max 
)
inlinestatic

◆ AABBIntersect()

static bool tram::AABBTree::AABBIntersect ( vec3  ray_pos,
vec3  ray_dir,
vec3  min,
vec3  max 
)
inlinestatic

◆ AABBOverlap()

static bool tram::AABBTree::AABBOverlap ( vec3  min,
vec3  max,
vec3  other_min,
vec3  other_max 
)
inlinestatic

◆ AABBSurface()

static float tram::AABBTree::AABBSurface ( vec3  min,
vec3  max 
)
inlinestatic

◆ AABBVolume()

static float tram::AABBTree::AABBVolume ( vec3  min,
vec3  max 
)
inlinestatic

◆ FindAABBIntersection() [1/2]

void tram::AABBTree::FindAABBIntersection ( Node node,
vec3  min,
vec3  max,
auto  callback 
)
inline

◆ FindAABBIntersection() [2/2]

void tram::AABBTree::FindAABBIntersection ( vec3  min,
vec3  max,
auto  callback 
)
inline

◆ FindIntersection() [1/2]

uint32_t tram::AABBTree::FindIntersection ( vec3  ray_pos,
vec3  ray_dir,
float  distance_limit,
auto  filter 
) const
inline

◆ FindIntersection() [2/2]

void tram::AABBTree::FindIntersection ( vec3  ray_pos,
vec3  ray_dir,
Node node,
std::vector< uint32_t > &  result 
) const
inline

◆ FindIntersectionRecursive()

void tram::AABBTree::FindIntersectionRecursive ( vec3  ray_pos,
vec3  ray_dir,
float &  nearest_dist,
uint32_t &  nearest_index,
float  distance_limit,
Node node,
auto  filter 
) const
inline

◆ FindSibling()

Node * tram::AABBTree::FindSibling ( vec3  min,
vec3  max,
Node node 
)
inline

◆ GetAABBMax()

vec3 tram::AABBTree::GetAABBMax ( )
inline

◆ GetAABBMin()

vec3 tram::AABBTree::GetAABBMin ( )
inline

◆ InsertLeaf()

Node * tram::AABBTree::InsertLeaf ( uint32_t  value,
vec3  min,
vec3  max 
)
inline

◆ MergeAABBMax()

static vec3 tram::AABBTree::MergeAABBMax ( vec3  a,
vec3  b 
)
inlinestatic

◆ MergeAABBMin()

static vec3 tram::AABBTree::MergeAABBMin ( vec3  a,
vec3  b 
)
inlinestatic

◆ RemoveHierarchy()

void tram::AABBTree::RemoveHierarchy ( Node node)
inline

◆ RemoveLeaf()

void tram::AABBTree::RemoveLeaf ( Node node)
inline

◆ UpdateParentAABB()

void tram::AABBTree::UpdateParentAABB ( Node node)
inline

◆ ValidateTree() [1/2]

void tram::AABBTree::ValidateTree ( Node node)
inline

◆ ValidateTree() [2/2]

void tram::AABBTree::ValidateTree ( Node node,
size_t  num 
)
inline

Member Data Documentation

◆ root

Node* tram::AABBTree::root = new Node {nullptr, nullptr, nullptr, {0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f}}

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/aabb.h
================================================ FILE: docs/cppapi/classtram_1_1_animation_component-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::AnimationComponent Member List

This is the complete list of members for tram::AnimationComponent, including all inherited members.

ANIM_COUNTtram::AnimationComponentprotectedstatic
anim_finish_callbacktram::AnimationComponentprotected
anim_infotram::AnimationComponentprotected
anim_playingtram::AnimationComponentprotected
AnimationComponent()tram::AnimationComponentprotected
armature_bone_counttram::AnimationComponentprotected
armature_bone_parentstram::AnimationComponentprotected
armature_bonestram::AnimationComponentprotected
base_posetram::AnimationComponentprotected
Continue(name_t animation_name)tram::AnimationComponent
EntityComponent()=defaulttram::EntityComponent
EventHandler(Event &event)tram::AnimationComponentinlinevirtual
FadeIn(name_t animation_name, float length)tram::AnimationComponent
FadeOut(name_t animation_name, float length)tram::AnimationComponent
FindKeyframePointers(Render::Animation *animation, size_t animation_index)tram::AnimationComponentprotected
GetModel()tram::AnimationComponentinline
GetParent()tram::EntityComponentinline
GetPose()tram::AnimationComponentinline
Init()tram::EntityComponentvirtual
is_inittram::EntityComponentprotected
is_readytram::EntityComponentprotected
IsDebugInfoDraw()tram::AnimationComponentstatic
IsInit()tram::EntityComponentinline
IsPlaying(name_t animation_name)tram::AnimationComponent
IsReady()tram::EntityComponentinline
modeltram::AnimationComponentprotected
parenttram::EntityComponentprotected
Pause(name_t animation_name)tram::AnimationComponent
Play(name_t animation_name, uint32_t repeats, float weight, float speed, bool interpolate=true, bool pause_on_last_frame=false)tram::AnimationComponent
Pooltram::AnimationComponentfriend
posetram::AnimationComponentprotected
Refresh()tram::AnimationComponent
Reparent(name_t bone_name, name_t new_parent)tram::AnimationComponent
ResourceReady()tram::EntityComponentprotected
resources_waitingtram::EntityComponentprotected
SetDebugInfoDraw(bool draw)tram::AnimationComponentstatic
SetFade(name_t animation_name, bool fade_in, float fade_length)tram::AnimationComponent
SetFrame(name_t animation_name, float frame)tram::AnimationComponent
SetKeyframe(name_t bone_name, const Render::Keyframe &keyframe)tram::AnimationComponent
SetModel(Render::Model *model)tram::AnimationComponentinline
SetModel(name_t model)tram::AnimationComponentinline
SetOnAnimationFinishCallback(void(*callback)(AnimationComponent *, name_t))tram::AnimationComponentinline
SetParent(Entity *parent)tram::EntityComponentinline
SetPause(name_t animation_name, bool pause)tram::AnimationComponent
SetRepeats(name_t animation_name, uint32_t repeats)tram::AnimationComponent
SetSpeed(name_t animation_name, float speed)tram::AnimationComponent
SetWeight(name_t animation_name, float weight)tram::AnimationComponent
Start()tram::AnimationComponentvirtual
Stop(name_t animation_name)tram::AnimationComponent
Update()tram::AnimationComponentstatic
~AnimationComponent()tram::AnimationComponentprotected
~EntityComponent()=defaulttram::EntityComponentvirtual
================================================ FILE: docs/cppapi/classtram_1_1_animation_component.html ================================================ Tramway SDK: tram::AnimationComponent Class Reference
Tramway SDK v0.1.1

Plays back Animations. More...

#include <components/animation.h>

Inheritance diagram for tram::AnimationComponent:
tram::EntityComponent

Classes

struct  AnimationPlaybackInfo
 

Public Member Functions

void Start ()
 
void SetModel (Render::Model *model)
 
void SetModel (name_t model)
 
Render::ModelGetModel ()
 
Render::PoseGetPose ()
 
void SetKeyframe (name_t bone_name, const Render::Keyframe &keyframe)
 Sets procedural animation keyframe. More...
 
void SetOnAnimationFinishCallback (void(*callback)(AnimationComponent *, name_t))
 
void Play (name_t animation_name, uint32_t repeats, float weight, float speed, bool interpolate=true, bool pause_on_last_frame=false)
 Plays an animation. More...
 
bool IsPlaying (name_t animation_name)
 Returns true if an animation is playing. More...
 
void Stop (name_t animation_name)
 Stops an animation if its playing. More...
 
void Pause (name_t animation_name)
 Pauses an animation. More...
 
void Continue (name_t animation_name)
 Continues an animation. More...
 
void SetWeight (name_t animation_name, float weight)
 Sets the weight of an animation. More...
 
void SetSpeed (name_t animation_name, float speed)
 Sets the speed of an animation. More...
 
void SetRepeats (name_t animation_name, uint32_t repeats)
 Sets the repeats of an animation. More...
 
void FadeIn (name_t animation_name, float length)
 Fades in an animation. More...
 
void FadeOut (name_t animation_name, float length)
 Fades out an animation. More...
 
void SetPause (name_t animation_name, bool pause)
 Sets animation's pause state. More...
 
void SetFade (name_t animation_name, bool fade_in, float fade_length)
 Fades in or fades out an animation. More...
 
void SetFrame (name_t animation_name, float frame)
 Sets an animation to a specific frame. More...
 
void Reparent (name_t bone_name, name_t new_parent)
 Reparents a bone. More...
 
void Refresh ()
 Updates an armature. More...
 
void EventHandler (Event &event)
 
- Public Member Functions inherited from tram::EntityComponent
 EntityComponent ()=default
 
virtual ~EntityComponent ()=default
 
virtual void Init ()
 Initializes an entity component. More...
 
bool IsReady ()
 Returns the component's readiness. More...
 
bool IsInit ()
 Returns the component's init status. More...
 
EntityGetParent ()
 
void SetParent (Entity *parent)
 

Static Public Member Functions

static bool IsDebugInfoDraw ()
 Checks whether the debug text is drawn. More...
 
static void SetDebugInfoDraw (bool draw)
 Sets the drawing of debug info. More...
 
static void Update ()
 Updates all of the armatures. More...
 

Protected Member Functions

void FindKeyframePointers (Render::Animation *animation, size_t animation_index)
 Extracts pointers to keyframes from animation data. More...
 
 AnimationComponent ()
 
 ~AnimationComponent ()
 
- Protected Member Functions inherited from tram::EntityComponent
void ResourceReady ()
 Notifies the component of a streamed-in resource. More...
 

Protected Attributes

Render::Keyframe base_pose [Render::BONE_COUNT]
 
Render::Posepose = nullptr
 
ResourceProxy< Render::Modelmodel
 
void(* anim_finish_callback )(AnimationComponent *, name_t) = nullptr
 
const Render::Bonearmature_bones = nullptr
 
size_t armature_bone_count = 0
 
int32_t armature_bone_parents [Render::BONE_COUNT] = {-1}
 
name_t anim_playing [ANIM_COUNT]
 
AnimationPlaybackInfo anim_info [ANIM_COUNT]
 
- Protected Attributes inherited from tram::EntityComponent
size_t resources_waiting = 0
 
bool is_ready = false
 
bool is_init = false
 
Entityparent = nullptr
 

Static Protected Attributes

static const size_t ANIM_COUNT = 8
 

Friends

template<typename >
class Pool
 

Detailed Description

Constructor & Destructor Documentation

◆ AnimationComponent()

tram::AnimationComponent::AnimationComponent ( )
protected

◆ ~AnimationComponent()

tram::AnimationComponent::~AnimationComponent ( )
protected

Member Function Documentation

◆ Continue()

void tram::AnimationComponent::Continue ( name_t  animation_name)

Continues an animation.

If an animation is paused, it will continue playback. Otherwise this method will do nothing.

◆ EventHandler()

void tram::AnimationComponent::EventHandler ( Event event)
inlinevirtual

Implements tram::EntityComponent.

◆ FadeIn()

void tram::AnimationComponent::FadeIn ( name_t  animation_name,
float  speed 
)

Fades in an animation.

Before fading in an animation, it must be started with Play().

◆ FadeOut()

void tram::AnimationComponent::FadeOut ( name_t  animation_name,
float  length 
)

Fades out an animation.

◆ FindKeyframePointers()

void tram::AnimationComponent::FindKeyframePointers ( Render::Animation animation,
size_t  animation_index 
)
protected

Extracts pointers to keyframes from animation data.

◆ GetModel()

Render::Model * tram::AnimationComponent::GetModel ( )
inline

◆ GetPose()

Render::Pose * tram::AnimationComponent::GetPose ( )
inline

◆ IsDebugInfoDraw()

bool tram::AnimationComponent::IsDebugInfoDraw ( )
static

Checks whether the debug text is drawn.

Check SetDebugInfoDraw() for more info.

◆ IsPlaying()

bool tram::AnimationComponent::IsPlaying ( name_t  animation_name)

Returns true if an animation is playing.

◆ Pause()

void tram::AnimationComponent::Pause ( name_t  animation_name)

Pauses an animation.

If the animation is being played, it will be paused. Otherwise this method will do nothing. Use Continue() method to continue playing the animation.

◆ Play()

void tram::AnimationComponent::Play ( name_t  animation_name,
uint32_t  repeats,
float  weight,
float  speed,
bool  interpolate = true,
bool  pause_on_last_frame = false 
)

Plays an animation.

Animation must be already loaded before playing.

Note
Will not play an animation if there are no empty animation slots.
Parameters
animation_nameName of the animation to be played.
repeatsHow many times the animation will be looped before stopping.
weightWeight of the animation. Set to 1.0 for normal weight. Should be in range from 0.0 to 1.0, if set outside of range, then the animation might look really weird.
speedSpeed of the animation. Value of 1.0 will play the animation at regular speed, 0.5 will play it half speed, 2.0 double speed.
interpolateIf set to true, then animation will be interpolated, if set to false, then it will use only the latest keyframe.
pause_on_lastIf set to true, then the animation will pause on the last keyframe.

◆ Refresh()

void tram::AnimationComponent::Refresh ( )

Updates an armature.

Pushes animations forward and regenerates matrices.

◆ Reparent()

void tram::AnimationComponent::Reparent ( name_t  bone_name,
name_t  new_parent 
)

Reparents a bone.

Make sure to not create cycles in the bone hierarchy.

Parameters
bone_nameName of the bone for which a new parent will be set.
new_parentName of the bone which will be the new parent. Can be set to "none" to clear the bone's parent.

◆ SetDebugInfoDraw()

void tram::AnimationComponent::SetDebugInfoDraw ( bool  draw)
static

Sets the drawing of debug info.

If set to true, each frame some debug text will be drawn for each animation component. This is useful for debugging.

◆ SetFade()

void tram::AnimationComponent::SetFade ( name_t  animation_name,
bool  fade_in,
float  fade_length 
)

Fades in or fades out an animation.

This will gradually increase or decrease the weight of an animation until it is fully faded in or faded out. The animation must already be started with Play() for it to be faded, otherwise this method will do nothing. If an animation is fully faded out, it will automatically be stopped.

Parameters
animation_nameName of the animation to be faded.
fade_inSet to true, if animation is to be faded in, false if faded out.
fade_lengthHow long, in seconds, will it take for the animation to finish fading in/out.

◆ SetFrame()

void tram::AnimationComponent::SetFrame ( name_t  animation_name,
float  frame 
)

Sets an animation to a specific frame.

If the animation is not already started with Play(), then this method will do nothing.

◆ SetKeyframe()

void tram::AnimationComponent::SetKeyframe ( name_t  bone_name,
const Render::Keyframe keyframe 
)

Sets procedural animation keyframe.

◆ SetModel() [1/2]

void tram::AnimationComponent::SetModel ( name_t  model)
inline

◆ SetModel() [2/2]

void tram::AnimationComponent::SetModel ( Render::Model model)
inline

◆ SetOnAnimationFinishCallback()

void tram::AnimationComponent::SetOnAnimationFinishCallback ( void(*)(AnimationComponent *, name_t callback)
inline

◆ SetPause()

void tram::AnimationComponent::SetPause ( name_t  animation_name,
bool  pause 
)

Sets animation's pause state.

This will do nothing, if the animation is not playing. Pausing an already paused or continuing an already playing animation will do nothing.

Parameters
animation_nameName of the animation to pause.
pauseSet to true to pause the animation, set to false to continue.

◆ SetRepeats()

void tram::AnimationComponent::SetRepeats ( name_t  animation_name,
uint32_t  repeats 
)

Sets the repeats of an animation.

◆ SetSpeed()

void tram::AnimationComponent::SetSpeed ( name_t  animation_name,
float  speed 
)

Sets the speed of an animation.

◆ SetWeight()

void tram::AnimationComponent::SetWeight ( name_t  animation_name,
float  weight 
)

Sets the weight of an animation.

◆ Start()

void tram::AnimationComponent::Start ( )
virtual

Implements tram::EntityComponent.

◆ Stop()

void tram::AnimationComponent::Stop ( name_t  animation_name)

Stops an animation if its playing.

Will do nothing if the animation is not playing.

◆ Update()

void tram::AnimationComponent::Update ( )
static

Updates all of the armatures.

This static function calls the Refresh() method on all of the ArmatureComponents.

Friends And Related Function Documentation

◆ Pool

template<typename >
friend class Pool
friend

Member Data Documentation

◆ ANIM_COUNT

const size_t tram::AnimationComponent::ANIM_COUNT = 8
staticprotected

◆ anim_finish_callback

void(* tram::AnimationComponent::anim_finish_callback) (AnimationComponent *, name_t) = nullptr
protected

◆ anim_info

AnimationPlaybackInfo tram::AnimationComponent::anim_info[ANIM_COUNT]
protected

◆ anim_playing

name_t tram::AnimationComponent::anim_playing[ANIM_COUNT]
protected

◆ armature_bone_count

size_t tram::AnimationComponent::armature_bone_count = 0
protected

◆ armature_bone_parents

int32_t tram::AnimationComponent::armature_bone_parents[Render::BONE_COUNT] = {-1}
protected

◆ armature_bones

const Render::Bone* tram::AnimationComponent::armature_bones = nullptr
protected

◆ base_pose

Render::Keyframe tram::AnimationComponent::base_pose[Render::BONE_COUNT]
protected

◆ model

ResourceProxy<Render::Model> tram::AnimationComponent::model
protected

◆ pose

Render::Pose* tram::AnimationComponent::pose = nullptr
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/animation.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/animation.cpp
================================================ FILE: docs/cppapi/classtram_1_1_audio_1_1_sound-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Audio::Sound Member List
================================================ FILE: docs/cppapi/classtram_1_1_audio_1_1_sound.html ================================================ Tramway SDK: tram::Audio::Sound Class Reference
Tramway SDK v0.1.1

Audio data resource. More...

#include <audio/sound.h>

Inheritance diagram for tram::Audio::Sound:
tram::Resource

Public Member Functions

void LoadFromDisk ()
 Loads the sound from the disk. More...
 
void LoadFromMemory ()
 
void Unload ()
 Removes the sound from memory. More...
 
float GetLength ()
 Returns sound length in seconds. More...
 
- Public Member Functions inherited from tram::Resource
 Resource (name_t name)
 
Resource::Status GetStatus () const
 
name_t GetName () const
 
size_t GetReferences () const
 
bool IsLoadFailed () const
 
void AddReference ()
 
void RemoveReference ()
 
void Load ()
 

Static Public Member Functions

static SoundFind (name_t name)
 Finds a sound by a name. More...
 

Public Attributes

audiobuffer_t sound_buffer = {0}
 
int32_t channels = 0
 
int32_t sample_rate = 0
 
int32_t sound_length = 0
 
int16_t * sound_data = nullptr
 

Protected Member Functions

 Sound (name_t name)
 

Friends

template<typename >
class tram::Pool
 

Additional Inherited Members

- Public Types inherited from tram::Resource
enum  Status { UNLOADED , LOADED , READY }
 
- Protected Attributes inherited from tram::Resource
Status status = UNLOADED
 
name_t name
 
bool load_fail = false
 
size_t references = 0
 

Detailed Description

Audio data resource.

Currently we only support .ogg files, via the stb_vorbis library.

Constructor & Destructor Documentation

◆ Sound()

tram::Audio::Sound::Sound ( name_t  name)
inlineprotected

Member Function Documentation

◆ Find()

Sound * tram::Audio::Sound::Find ( name_t  name)
static

Finds a sound by a name.

If a sound by that name doesn't exist, it will be created.

Returns
Always returns a pointer to a Sound.

◆ GetLength()

float tram::Audio::Sound::GetLength ( )
inline

Returns sound length in seconds.

◆ LoadFromDisk()

void tram::Audio::Sound::LoadFromDisk ( )
virtual

Loads the sound from the disk.

Implements tram::Resource.

◆ LoadFromMemory()

void tram::Audio::Sound::LoadFromMemory ( )
inlinevirtual

Implements tram::Resource.

◆ Unload()

void tram::Sound::Unload ( )
virtual

Removes the sound from memory.

Implements tram::Resource.

Friends And Related Function Documentation

◆ tram::Pool

template<typename >
friend class tram::Pool
friend

Member Data Documentation

◆ channels

int32_t tram::Audio::Sound::channels = 0

◆ sample_rate

int32_t tram::Audio::Sound::sample_rate = 0

◆ sound_buffer

audiobuffer_t tram::Audio::Sound::sound_buffer = {0}

◆ sound_data

int16_t* tram::Audio::Sound::sound_data = nullptr

◆ sound_length

int32_t tram::Audio::Sound::sound_length = 0

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/sound.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/sound.cpp
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/sound.cpp
================================================ FILE: docs/cppapi/classtram_1_1_audio_1_1_sound_graph-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Audio::SoundGraph Member List
================================================ FILE: docs/cppapi/classtram_1_1_audio_1_1_sound_graph.html ================================================ Tramway SDK: tram::Audio::SoundGraph Class Reference
Tramway SDK v0.1.1

#include <graph.h>

Inheritance diagram for tram::Audio::SoundGraph:
tram::Resource

Classes

struct  Node
 

Public Member Functions

 SoundGraph (name_t name)
 
void LoadFromDisk ()
 
void LoadFromMemory ()
 
void Unload ()
 
- Public Member Functions inherited from tram::Resource
 Resource (name_t name)
 
Resource::Status GetStatus () const
 
name_t GetName () const
 
size_t GetReferences () const
 
bool IsLoadFailed () const
 
void AddReference ()
 
void RemoveReference ()
 
void Load ()
 

Static Public Member Functions

static FilterParameters LookupFilter (vec3 position)
 
static SoundGraphFind (name_t name)
 

Protected Attributes

std::vector< Nodenodes
 
std::vector< std::pair< uint32_t, uint32_t > > edges
 
- Protected Attributes inherited from tram::Resource
Status status = UNLOADED
 
name_t name
 
bool load_fail = false
 
size_t references = 0
 

Additional Inherited Members

- Public Types inherited from tram::Resource
enum  Status { UNLOADED , LOADED , READY }
 

Constructor & Destructor Documentation

◆ SoundGraph()

tram::Audio::SoundGraph::SoundGraph ( name_t  name)
inline

Member Function Documentation

◆ Find()

SoundGraph * SoundGraph::Find ( name_t  name)
static

◆ LoadFromDisk()

void SoundGraph::LoadFromDisk ( )
virtual

Implements tram::Resource.

◆ LoadFromMemory()

void tram::Audio::SoundGraph::LoadFromMemory ( )
inlinevirtual

Implements tram::Resource.

◆ LookupFilter()

FilterParameters SoundGraph::LookupFilter ( vec3  position)
static

◆ Unload()

void tram::Audio::SoundGraph::Unload ( )
inlinevirtual

Implements tram::Resource.

Member Data Documentation

◆ edges

std::vector<std::pair<uint32_t, uint32_t> > tram::Audio::SoundGraph::edges
protected

◆ nodes

std::vector<Node> tram::Audio::SoundGraph::nodes
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/graph.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/graph.cpp
================================================ FILE: docs/cppapi/classtram_1_1_audio_component-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::AudioComponent Member List
================================================ FILE: docs/cppapi/classtram_1_1_audio_component.html ================================================ Tramway SDK: tram::AudioComponent Class Reference
Tramway SDK v0.1.1

Plays back Sounds. More...

#include <components/audio.h>

Inheritance diagram for tram::AudioComponent:
tram::EntityComponent

Public Member Functions

 AudioComponent ()
 
 ~AudioComponent ()
 
void Start ()
 
void SetLocation (vec3 location)
 Sets the location from which the sound will play. More...
 
void SetSound (name_t name)
 Sets the sound that the component will play. More...
 
void SetRepeating (bool is_repeating)
 Sets whether the component will repeat its sound. More...
 
bool IsPlaying ()
 Checks if component is playing a sound. More...
 
void Play ()
 Plays the sound. More...
 
void Pause ()
 Pauses the sound. More...
 
void Stop ()
 Stops the sound. More...
 
void EventHandler (Event &event)
 
- Public Member Functions inherited from tram::EntityComponent
 EntityComponent ()=default
 
virtual ~EntityComponent ()=default
 
virtual void Init ()
 Initializes an entity component. More...
 
bool IsReady ()
 Returns the component's readiness. More...
 
bool IsInit ()
 Returns the component's init status. More...
 
EntityGetParent ()
 
void SetParent (Entity *parent)
 

Static Public Member Functions

static bool IsSourceDraw ()
 Checks whether the audio source is drawn. More...
 
static bool IsDebugInfoDraw ()
 Checks whether the debug text is drawn. More...
 
static void SetSourceDraw (bool)
 Sets the drawing of audio sources. More...
 
static void SetDebugInfoDraw (bool)
 Sets the drawing of debug info. More...
 

Protected Member Functions

void SetupModel ()
 
- Protected Member Functions inherited from tram::EntityComponent
void ResourceReady ()
 Notifies the component of a streamed-in resource. More...
 

Protected Attributes

ResourceProxy< Audio::Soundsound
 
Audio::audiosource_t source = {}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
bool repeat = false
 
bool play_on_start = false
 
Component< RenderComponentmodel
 
- Protected Attributes inherited from tram::EntityComponent
size_t resources_waiting = 0
 
bool is_ready = false
 
bool is_init = false
 
Entityparent = nullptr
 

Detailed Description

Constructor & Destructor Documentation

◆ AudioComponent()

tram::AudioComponent::AudioComponent ( )
inline

◆ ~AudioComponent()

tram::AudioComponent::~AudioComponent ( )

Member Function Documentation

◆ EventHandler()

void tram::AudioComponent::EventHandler ( Event event)
inlinevirtual

Implements tram::EntityComponent.

◆ IsDebugInfoDraw()

bool tram::AudioComponent::IsDebugInfoDraw ( )
static

Checks whether the debug text is drawn.

Check SetDebugInfoDraw() for more info.

◆ IsPlaying()

bool tram::AudioComponent::IsPlaying ( )

Checks if component is playing a sound.

Returns
True, if a sound is playing, false if it hasn't started or has stopped.

◆ IsSourceDraw()

bool tram::AudioComponent::IsSourceDraw ( )
static

Checks whether the audio source is drawn.

Check SetSourceDraw() for more info.

◆ Pause()

void tram::AudioComponent::Pause ( )

Pauses the sound.

Pauses the sound that the component is playing, or does nothing, if no sound is playing.

◆ Play()

void tram::AudioComponent::Play ( )

Plays the sound.

Plays the sound that the component has been set to play.

◆ SetDebugInfoDraw()

void tram::AudioComponent::SetDebugInfoDraw ( bool  draw)
static

Sets the drawing of debug info.

If set to true, each frame some debug text will be drawn for each audio source. This is useful for debugging.

◆ SetLocation()

void tram::AudioComponent::SetLocation ( vec3  location)

Sets the location from which the sound will play.

◆ SetRepeating()

void tram::AudioComponent::SetRepeating ( bool  is_repeating)

Sets whether the component will repeat its sound.

◆ SetSound()

void tram::AudioComponent::SetSound ( name_t  name)

Sets the sound that the component will play.

◆ SetSourceDraw()

void tram::AudioComponent::SetSourceDraw ( bool  draw)
static

Sets the drawing of audio sources.

If set to true, each audio component will initialize a 3D model, which will allow you to see the posiiton of the audio sources. Useful for debugging.

◆ SetupModel()

void tram::AudioComponent::SetupModel ( )
protected

◆ Start()

void tram::AudioComponent::Start ( )
virtual

Implements tram::EntityComponent.

◆ Stop()

void tram::AudioComponent::Stop ( )

Stops the sound.

Stops the sound that the component is playing, or does nothing, if no sound is playing.

Member Data Documentation

◆ location

vec3 tram::AudioComponent::location = {0.0f, 0.0f, 0.0f}
protected

◆ model

Component<RenderComponent> tram::AudioComponent::model
protected

◆ play_on_start

bool tram::AudioComponent::play_on_start = false
protected

◆ repeat

bool tram::AudioComponent::repeat = false
protected

◆ sound

ResourceProxy<Audio::Sound> tram::AudioComponent::sound
protected

◆ source

Audio::audiosource_t tram::AudioComponent::source = {}
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/audio.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/audio.cpp
================================================ FILE: docs/cppapi/classtram_1_1_component-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Component< T > Member List
================================================ FILE: docs/cppapi/classtram_1_1_component.html ================================================ Tramway SDK: tram::Component< T > Class Template Reference
Tramway SDK v0.1.1

Wrapper for an EntityComponent pointer. More...

#include <entitycomponent.h>

Public Member Functions

 Component ()
 
 ~Component ()
 
void make ()
 
void clear ()
 
T * get ()
 
T * operator-> ()
 
T & operator* ()
 
 operator T* ()
 
 operator bool ()
 

Protected Member Functions

void init ()
 
void yeet ()
 
void init ()
 
void yeet ()
 
void init ()
 
void yeet ()
 
void init ()
 
void yeet ()
 
void init ()
 
void yeet ()
 
void init ()
 
void yeet ()
 
void init ()
 
void yeet ()
 
void init ()
 
void yeet ()
 
void init ()
 
void yeet ()
 
void init ()
 
void yeet ()
 
void init ()
 
void yeet ()
 
void init ()
 
void yeet ()
 
void init ()
 
void yeet ()
 

Protected Attributes

T * ptr = nullptr
 

Detailed Description

template<typename T>
class tram::Component< T >

Wrapper for an EntityComponent pointer.

Automatically constructs the EntityComponent in the correct pool, also provides protection against accidental memory leaks.

Constructor & Destructor Documentation

◆ Component()

template<typename T >
tram::Component< T >::Component ( )
inline

◆ ~Component()

template<typename T >
tram::Component< T >::~Component ( )
inline

Member Function Documentation

◆ clear()

template<typename T >
void tram::Component< T >::clear ( )
inline

◆ get()

template<typename T >
T * tram::Component< T >::get ( )
inline

◆ init() [1/13]

void tram::Component< AnimationComponent >::init ( )
protected

◆ init() [2/13]

void tram::Component< AudioComponent >::init ( )
protected

◆ init() [3/13]

void tram::Component< FPSControllerComponent >::init ( )
protected

◆ init() [4/13]

void tram::Component< RaycastControllerComponent >::init ( )
protected

◆ init() [5/13]

void tram::Component< DecalComponent >::init ( )
protected

◆ init() [6/13]

void tram::Component< LightComponent >::init ( )
protected

◆ init() [7/13]

void tram::Component< ParticleComponent >::init ( )
protected

◆ init() [8/13]

void tram::Component< PhysicsComponent >::init ( )
protected

◆ init() [9/13]

void tram::Component< PlayerComponent >::init ( )
protected

◆ init() [10/13]

void tram::Component< RenderComponent >::init ( )
protected

◆ init() [11/13]

void tram::Component< SpriteComponent >::init ( )
protected

◆ init() [12/13]

void tram::Component< TriggerComponent >::init ( )
protected

◆ init() [13/13]

template<typename T >
void tram::Component< T >::init ( )
protected

◆ make()

template<typename T >
void tram::Component< T >::make ( )
inline

◆ operator bool()

template<typename T >
tram::Component< T >::operator bool ( )
inlineexplicit

◆ operator T*()

template<typename T >
tram::Component< T >::operator T* ( )
inline

◆ operator*()

template<typename T >
T & tram::Component< T >::operator* ( )
inline

◆ operator->()

template<typename T >
T * tram::Component< T >::operator-> ( )
inline

◆ yeet() [1/13]

void tram::Component< AnimationComponent >::yeet ( )
protected

◆ yeet() [2/13]

void tram::Component< AudioComponent >::yeet ( )
protected

◆ yeet() [3/13]

void tram::Component< FPSControllerComponent >::yeet ( )
protected

◆ yeet() [4/13]

void tram::Component< RaycastControllerComponent >::yeet ( )
protected

◆ yeet() [5/13]

void tram::Component< DecalComponent >::yeet ( )
protected

◆ yeet() [6/13]

void tram::Component< LightComponent >::yeet ( )
protected

◆ yeet() [7/13]

void tram::Component< ParticleComponent >::yeet ( )
protected

◆ yeet() [8/13]

void tram::Component< PhysicsComponent >::yeet ( )
protected

◆ yeet() [9/13]

void tram::Component< PlayerComponent >::yeet ( )
protected

◆ yeet() [10/13]

void tram::Component< RenderComponent >::yeet ( )
protected

◆ yeet() [11/13]

void tram::Component< SpriteComponent >::yeet ( )
protected

◆ yeet() [12/13]

void tram::Component< TriggerComponent >::yeet ( )
protected

◆ yeet() [13/13]

template<typename T >
void tram::Component< T >::yeet ( )
protected

Member Data Documentation

◆ ptr

template<typename T >
T* tram::Component< T >::ptr = nullptr
protected

The documentation for this class was generated from the following file:
================================================ FILE: docs/cppapi/classtram_1_1_controller_component-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::ControllerComponent Member List

This is the complete list of members for tram::ControllerComponent, including all inherited members.

collidetram::ControllerComponentprotected
Crouch()=0tram::ControllerComponentpure virtual
EntityComponent()=defaulttram::EntityComponent
EventHandler(Event &event)=0tram::EntityComponentpure virtual
Fly()=0tram::ControllerComponentpure virtual
GetLookDirection() consttram::ControllerComponentinline
GetParent()tram::EntityComponentinline
Init()tram::EntityComponentvirtual
is_inittram::EntityComponentprotected
is_readytram::EntityComponentprotected
IsDebugInfoDraw()tram::ControllerComponentstatic
IsInit()tram::EntityComponentinline
IsReady()tram::EntityComponentinline
Jump()=0tram::ControllerComponentpure virtual
look_directiontram::ControllerComponentprotected
Move(vec3 local_direction)=0tram::ControllerComponentpure virtual
parenttram::EntityComponentprotected
Push(vec3 direction)=0tram::ControllerComponentpure virtual
ResourceReady()tram::EntityComponentprotected
resources_waitingtram::EntityComponentprotected
Run()=0tram::ControllerComponentpure virtual
SetCollisions(bool collide)tram::ControllerComponentinline
SetDebugInfoDraw(bool)tram::ControllerComponentstatic
SetLookDirection(quat direction)tram::ControllerComponentinline
SetParent(Entity *parent)tram::EntityComponentinline
Start()=0tram::EntityComponentprotectedpure virtual
TurnLeft()=0tram::ControllerComponentpure virtual
TurnRight()=0tram::ControllerComponentpure virtual
Update()tram::ControllerComponentstatic
~EntityComponent()=defaulttram::EntityComponentvirtual
================================================ FILE: docs/cppapi/classtram_1_1_controller_component.html ================================================ Tramway SDK: tram::ControllerComponent Class Reference
Tramway SDK v0.1.1

Provides an API for character controllers. More...

#include <components/controller.h>

Inheritance diagram for tram::ControllerComponent:
tram::EntityComponent tram::FPSControllerComponent tram::RaycastControllerComponent

Public Member Functions

virtual void Move (vec3 local_direction)=0
 
virtual void Run ()=0
 
virtual void Crouch ()=0
 
virtual void Fly ()=0
 
virtual void Jump ()=0
 
virtual void TurnLeft ()=0
 
virtual void TurnRight ()=0
 
virtual void Push (vec3 direction)=0
 
void SetCollisions (bool collide)
 
void SetLookDirection (quat direction)
 
quat GetLookDirection () const
 
- Public Member Functions inherited from tram::EntityComponent
 EntityComponent ()=default
 
virtual ~EntityComponent ()=default
 
virtual void Init ()
 Initializes an entity component. More...
 
virtual void EventHandler (Event &event)=0
 
bool IsReady ()
 Returns the component's readiness. More...
 
bool IsInit ()
 Returns the component's init status. More...
 
EntityGetParent ()
 
void SetParent (Entity *parent)
 

Static Public Member Functions

static bool IsDebugInfoDraw ()
 
static void SetDebugInfoDraw (bool)
 
static void Update ()
 Updates the ControllerComponents. More...
 

Protected Attributes

quat look_direction = {1.0f, 0.0f, 0.0f, 0.0f}
 
bool collide = true
 
- Protected Attributes inherited from tram::EntityComponent
size_t resources_waiting = 0
 
bool is_ready = false
 
bool is_init = false
 
Entityparent = nullptr
 

Additional Inherited Members

- Protected Member Functions inherited from tram::EntityComponent
void ResourceReady ()
 Notifies the component of a streamed-in resource. More...
 
virtual void Start ()=0
 

Detailed Description

Provides an API for character controllers.

See also
https://racenis.github.io/tram-sdk/documentation/components/controller.html

Member Function Documentation

◆ Crouch()

virtual void tram::ControllerComponent::Crouch ( )
pure virtual

◆ Fly()

virtual void tram::ControllerComponent::Fly ( )
pure virtual

◆ GetLookDirection()

quat tram::ControllerComponent::GetLookDirection ( ) const
inline

◆ IsDebugInfoDraw()

bool tram::ControllerComponent::IsDebugInfoDraw ( )
static

◆ Jump()

virtual void tram::ControllerComponent::Jump ( )
pure virtual

◆ Move()

virtual void tram::ControllerComponent::Move ( vec3  local_direction)
pure virtual

◆ Push()

virtual void tram::ControllerComponent::Push ( vec3  direction)
pure virtual

◆ Run()

virtual void tram::ControllerComponent::Run ( )
pure virtual

◆ SetCollisions()

void tram::ControllerComponent::SetCollisions ( bool  collide)
inline

◆ SetDebugInfoDraw()

void tram::ControllerComponent::SetDebugInfoDraw ( bool  draw)
static

◆ SetLookDirection()

void tram::ControllerComponent::SetLookDirection ( quat  direction)
inline

◆ TurnLeft()

virtual void tram::ControllerComponent::TurnLeft ( )
pure virtual

◆ TurnRight()

virtual void tram::ControllerComponent::TurnRight ( )
pure virtual

◆ Update()

void tram::ControllerComponent::Update ( )
static

Updates the ControllerComponents.

Updates all of the ControllerComponents. Should be called once per update cycle. Best place to do so would be before updating any cameras, otherwise they will lag behind the controller for the rest of the frame.

Member Data Documentation

◆ collide

bool tram::ControllerComponent::collide = true
protected

◆ look_direction

quat tram::ControllerComponent::look_direction = {1.0f, 0.0f, 0.0f, 0.0f}
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/controller.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/controller.cpp
================================================ FILE: docs/cppapi/classtram_1_1_crate-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Crate Member List

This is the complete list of members for tram::Crate, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
collmodeltram::Crateprotected
Crate(const SharedEntityData &, const ValueArray &)tram::Crate
Crate(const char *nname, const char *modelname, const char *collisionmodelname, vec3 pos, vec3 rot)tram::Crate
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()tram::Cratevirtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Cratevirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Cratevirtual
modeltram::Crateprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physicscomponenttram::Crateprotected
Register()tram::Cratestatic
RegisterType(name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Crateprotected
rotationtram::Entityprotected
Serialize()tram::Cratevirtual
SetAutoLoad(bool is)tram::Entityinline
SetFlag(uint32_t flag, bool value)tram::Entityinlineprotected
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Cratevirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
Unload()tram::Cratevirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateParameters()tram::Cratevirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_crate.html ================================================ Tramway SDK: tram::Crate Class Reference
Tramway SDK v0.1.1

3D Model with a rigidbody attached to it. More...

#include <entities/crate.h>

Inheritance diagram for tram::Crate:
tram::Entity

Public Member Functions

 Crate (const SharedEntityData &, const ValueArray &)
 
 Crate (const char *nname, const char *modelname, const char *collisionmodelname, vec3 pos, vec3 rot)
 
void UpdateParameters ()
 Called when Entity::UpdateTransform is called. More...
 
void SetParameters ()
 Called when either Entity::SetLocation or Entity::SetRotation is called. More...
 
void Load ()
 Loads an entity. More...
 
void Unload ()
 Unloads an entity. More...
 
void Serialize ()
 
void MessageHandler (Message &msg)
 Allows entities to receive messages. More...
 
name_t GetType ()
 Returns the type of the entity. More...
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 Destructs the entity. More...
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 Returns the entity's parent cell. More...
 
bool IsLoaded () const
 Returns the entity load status. More...
 
bool IsAutoLoad () const
 Returns the auto load flag status. More...
 
bool IsPersistent () const
 Returns the persistence status of an entity. More...
 
bool IsChanged () const
 
bool IsDeleted () const
 Returns the entity deletion status. More...
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 Purges the entity. More...
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 Allows entities to receive events. More...
 
void CheckTransition ()
 Check whether an entity has entered a different cell. More...
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 Updates entities. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)
 Registers a new entity type. More...
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 Creates an entity. More...
 
static EntityFind (id_t entity_id)
 Finds the entity by its ID number. More...
 
static EntityFind (name_t entity_name)
 Finds the entity by its name. More...
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t collmodel
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 Registers the entity. More...
 
void Unregister ()
 Unregisters the entity. More...
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 
void SetFlag (uint32_t flag, bool value)
 

Detailed Description

3D Model with a rigidbody attached to it.

See also
https://racenis.github.io/tram-sdk/documentation/entities/crate.html

Constructor & Destructor Documentation

◆ Crate() [1/2]

tram::Crate::Crate ( const SharedEntityData shared_data,
const ValueArray field_array 
)

◆ Crate() [2/2]

tram::Crate::Crate ( const char *  nname,
const char *  modelname,
const char *  collisionmodelname,
vec3  pos,
vec3  rot 
)

Member Function Documentation

◆ GetType()

name_t tram::Crate::GetType ( )
virtual

Returns the type of the entity.

Usually this method returns the same name that is used to Entity::RegisterType() its type.

Implements tram::Entity.

◆ Load()

void tram::Crate::Load ( )
virtual

Loads an entity.

Usually the Load() method for an entity type will set up its components, event listeners, etc. After being loaded, the entity will be ready for simulation.

When implementing this method, make sure to flag the entity with the LOADED flag, so that world streaming system doesn't try to load your entity twice.

Implements tram::Entity.

◆ MessageHandler()

void tram::Crate::MessageHandler ( Message msg)
virtual

Allows entities to receive messages.

Whenever an entity is sent a Message, once the Message::Dispatch() function has been called, the entity will gets the message passed to it through this method.

Implements tram::Entity.

◆ Register()

void tram::Crate::Register ( )
static

◆ Serialize()

void tram::Crate::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Crate::SetParameters ( )
virtual

Called when either Entity::SetLocation or Entity::SetRotation is called.

Usually this method is used to relocate or rerotate an entity.

If the entity has a PhysicsComponent, its position or rotation is usually set from this method, otherwise in the next Physics update step, the entity's previous rotation and location will be restored.

Implements tram::Entity.

◆ Unload()

void tram::Crate::Unload ( )
virtual

Unloads an entity.

Usually the Load() method for an entity type will destroy its its components, event listeners, etc. After being unloaded, the entity have been removed from the simulation.

When implementing this method, make sure to clear your entity's LOADED flag, so that world streaming system can load the entity again.

Implements tram::Entity.

◆ UpdateParameters()

void tram::Crate::UpdateParameters ( )
virtual

Called when Entity::UpdateTransform is called.

From the runtime's side, only the Physics system will call the Entity::UpdateTransform() method, and through it, this method.

Usually this method is used to forward the entity's new position and rotation to its RenderComponent, if it has one.

If the entity has a PhysicsComponent, its position or rotation is never updated from this method.

Implements tram::Entity.

Member Data Documentation

◆ collmodel

name_t tram::Crate::collmodel
protected

◆ model

name_t tram::Crate::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Crate::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Crate::rendercomponent
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/crate.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/crate.cpp
================================================ FILE: docs/cppapi/classtram_1_1_decal_component-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::DecalComponent Member List
================================================ FILE: docs/cppapi/classtram_1_1_decal_component.html ================================================ Tramway SDK: tram::DecalComponent Class Reference
Tramway SDK v0.1.1
tram::DecalComponent Class Reference

Projects decals onto the scene. More...

#include <components/decal.h>

Inheritance diagram for tram::DecalComponent:
tram::EntityComponent

Public Member Functions

 DecalComponent ()
 
 ~DecalComponent ()
 
name_t GetSprite ()
 
void SetSprite (Render::Sprite *sprite)
 
void Start ()
 
void Update ()
 
void UpdateRenderListObject ()
 
void SetScale (float scale)
 
void SetFrame (uint32_t frame)
 
void SetLocation (vec3 location)
 
void SetRotation (quat rotation)
 
void EventHandler (Event &event)
 
- Public Member Functions inherited from tram::EntityComponent
 EntityComponent ()=default
 
virtual ~EntityComponent ()=default
 
virtual void Init ()
 Initializes an entity component. More...
 
bool IsReady ()
 Returns the component's readiness. More...
 
bool IsInit ()
 Returns the component's init status. More...
 
EntityGetParent ()
 
void SetParent (Entity *parent)
 

Protected Attributes

ResourceProxy< Render::Spritesprite
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
float scale = 1.0f
 
uint32_t frame = 0
 
Render::drawlistentry_t draw_list_entry = {}
 
Render::vertexarray_t vertex_array = {}
 
- Protected Attributes inherited from tram::EntityComponent
size_t resources_waiting = 0
 
bool is_ready = false
 
bool is_init = false
 
Entityparent = nullptr
 

Additional Inherited Members

- Protected Member Functions inherited from tram::EntityComponent
void ResourceReady ()
 Notifies the component of a streamed-in resource. More...
 

Detailed Description

Constructor & Destructor Documentation

◆ DecalComponent()

tram::DecalComponent::DecalComponent ( )
inline

◆ ~DecalComponent()

tram::DecalComponent::~DecalComponent ( )

Member Function Documentation

◆ EventHandler()

void tram::DecalComponent::EventHandler ( Event event)
inlinevirtual

Implements tram::EntityComponent.

◆ GetSprite()

name_t tram::DecalComponent::GetSprite ( )
inline

◆ SetFrame()

void tram::DecalComponent::SetFrame ( uint32_t  frame)
inline

◆ SetLocation()

void tram::DecalComponent::SetLocation ( vec3  location)
inline

◆ SetRotation()

void tram::DecalComponent::SetRotation ( quat  rotation)
inline

◆ SetScale()

void tram::DecalComponent::SetScale ( float  scale)
inline

◆ SetSprite()

void tram::DecalComponent::SetSprite ( Render::Sprite sprite)
inline

◆ Start()

void tram::DecalComponent::Start ( )
virtual

Implements tram::EntityComponent.

◆ Update()

void tram::DecalComponent::Update ( )

◆ UpdateRenderListObject()

void tram::DecalComponent::UpdateRenderListObject ( )

Member Data Documentation

◆ draw_list_entry

Render::drawlistentry_t tram::DecalComponent::draw_list_entry = {}
protected

◆ frame

uint32_t tram::DecalComponent::frame = 0
protected

◆ location

vec3 tram::DecalComponent::location = {0.0f, 0.0f, 0.0f}
protected

◆ rotation

quat tram::DecalComponent::rotation = {1.0f, 0.0f, 0.0f, 0.0f}
protected

◆ scale

float tram::DecalComponent::scale = 1.0f
protected

◆ sprite

ResourceProxy<Render::Sprite> tram::DecalComponent::sprite
protected

◆ vertex_array

Render::vertexarray_t tram::DecalComponent::vertex_array = {}
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/decal.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/decal.cpp
================================================ FILE: docs/cppapi/classtram_1_1_decoration-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Decoration Member List

This is the complete list of members for tram::Decoration, including all inherited members.

animationtram::Decorationprotected
animationcomponenttram::Decorationprotected
celltram::Entityprotected
CheckTransition()tram::Entity
Decoration(const SharedEntityData &, const ValueArray &)tram::Decoration
decoration_flagstram::Decorationprotected
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()tram::Decorationvirtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Decorationvirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Decorationvirtual
modeltram::Decorationprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physicscomponenttram::Decorationprotected
Register()tram::Decorationstatic
RegisterType(name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Decorationprotected
RequestAnimationComponent()tram::Decorationprotected
rotationtram::Entityprotected
Serialize()tram::Decorationvirtual
SetAutoLoad(bool is)tram::Entityinline
SetFlag(uint32_t flag, bool value)tram::Entityinlineprotected
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Decorationvirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
Unload()tram::Decorationvirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateParameters()tram::Decorationvirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_decoration.html ================================================ Tramway SDK: tram::Decoration Class Reference
Tramway SDK v0.1.1

3D Model with an AnimationComponent attached to it. More...

#include <entities/decoration.h>

Inheritance diagram for tram::Decoration:
tram::Entity

Public Member Functions

 Decoration (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 Called when Entity::UpdateTransform is called. More...
 
void SetParameters ()
 Called when either Entity::SetLocation or Entity::SetRotation is called. More...
 
void Load ()
 Loads an entity. More...
 
void Unload ()
 Unloads an entity. More...
 
void Serialize ()
 
void MessageHandler (Message &msg)
 Allows entities to receive messages. More...
 
name_t GetType ()
 Returns the type of the entity. More...
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 Destructs the entity. More...
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 Returns the entity's parent cell. More...
 
bool IsLoaded () const
 Returns the entity load status. More...
 
bool IsAutoLoad () const
 Returns the auto load flag status. More...
 
bool IsPersistent () const
 Returns the persistence status of an entity. More...
 
bool IsChanged () const
 
bool IsDeleted () const
 Returns the entity deletion status. More...
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 Purges the entity. More...
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 Allows entities to receive events. More...
 
void CheckTransition ()
 Check whether an entity has entered a different cell. More...
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 Updates entities. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)
 Registers a new entity type. More...
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 Creates an entity. More...
 
static EntityFind (id_t entity_id)
 Finds the entity by its ID number. More...
 
static EntityFind (name_t entity_name)
 Finds the entity by its name. More...
 

Protected Member Functions

void RequestAnimationComponent ()
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 Registers the entity. More...
 
void Unregister ()
 Unregisters the entity. More...
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 
void SetFlag (uint32_t flag, bool value)
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< AnimationComponentanimationcomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t animation
 
uint32_t decoration_flags
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 

Detailed Description

Constructor & Destructor Documentation

◆ Decoration()

tram::Decoration::Decoration ( const SharedEntityData shared_data,
const ValueArray field_array 
)

Member Function Documentation

◆ GetType()

name_t tram::Decoration::GetType ( )
virtual

Returns the type of the entity.

Usually this method returns the same name that is used to Entity::RegisterType() its type.

Implements tram::Entity.

◆ Load()

void tram::Decoration::Load ( )
virtual

Loads an entity.

Usually the Load() method for an entity type will set up its components, event listeners, etc. After being loaded, the entity will be ready for simulation.

When implementing this method, make sure to flag the entity with the LOADED flag, so that world streaming system doesn't try to load your entity twice.

Implements tram::Entity.

◆ MessageHandler()

void tram::Decoration::MessageHandler ( Message msg)
virtual

Allows entities to receive messages.

Whenever an entity is sent a Message, once the Message::Dispatch() function has been called, the entity will gets the message passed to it through this method.

Implements tram::Entity.

◆ Register()

void tram::Decoration::Register ( )
static

◆ RequestAnimationComponent()

void tram::Decoration::RequestAnimationComponent ( )
protected

◆ Serialize()

void tram::Decoration::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Decoration::SetParameters ( )
virtual

Called when either Entity::SetLocation or Entity::SetRotation is called.

Usually this method is used to relocate or rerotate an entity.

If the entity has a PhysicsComponent, its position or rotation is usually set from this method, otherwise in the next Physics update step, the entity's previous rotation and location will be restored.

Implements tram::Entity.

◆ Unload()

void tram::Decoration::Unload ( )
virtual

Unloads an entity.

Usually the Load() method for an entity type will destroy its its components, event listeners, etc. After being unloaded, the entity have been removed from the simulation.

When implementing this method, make sure to clear your entity's LOADED flag, so that world streaming system can load the entity again.

Implements tram::Entity.

◆ UpdateParameters()

void tram::Decoration::UpdateParameters ( )
virtual

Called when Entity::UpdateTransform is called.

From the runtime's side, only the Physics system will call the Entity::UpdateTransform() method, and through it, this method.

Usually this method is used to forward the entity's new position and rotation to its RenderComponent, if it has one.

If the entity has a PhysicsComponent, its position or rotation is never updated from this method.

Implements tram::Entity.

Member Data Documentation

◆ animation

name_t tram::Decoration::animation
protected

◆ animationcomponent

Component<AnimationComponent> tram::Decoration::animationcomponent
protected

◆ decoration_flags

uint32_t tram::Decoration::decoration_flags
protected

◆ model

name_t tram::Decoration::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Decoration::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Decoration::rendercomponent
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/decoration.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/decoration.cpp
================================================ FILE: docs/cppapi/classtram_1_1_decpration.html ================================================ Tramway SDK: Decpration Class Reference
Tramway SDK
Decpration Class Reference

3D Model with an AnimationComponent attached to it. More...

Detailed Description


The documentation for this class was generated from the following file:
================================================ FILE: docs/cppapi/classtram_1_1_disk_reader-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::DiskReader Member List

This is the complete list of members for tram::DiskReader, including all inherited members.

DiskReader(const char *path)tram::DiskReaderinline
GetContents()tram::DiskReaderinlinevirtual
GetReader(const char *path)tram::FileReaderstatic
GetSearchList()tram::FileReaderstatic
GetSize()tram::DiskReaderinlinevirtual
GetStatus()tram::DiskReaderinlinevirtual
SetSearchList()tram::FileReaderstatic
Yeet()tram::DiskReaderinlinevirtual
~DiskReader()tram::DiskReaderinline
~FileReader()=defaulttram::FileReadervirtual
================================================ FILE: docs/cppapi/classtram_1_1_disk_reader.html ================================================ Tramway SDK: tram::DiskReader Class Reference
Tramway SDK v0.1.1
tram::DiskReader Class Reference
Inheritance diagram for tram::DiskReader:
tram::FileReader

Public Member Functions

 DiskReader (const char *path)
 
 ~DiskReader ()
 
const char * GetContents ()
 
size_t GetSize ()
 
void Yeet ()
 
FileStatus GetStatus ()
 
- Public Member Functions inherited from tram::FileReader
virtual ~FileReader ()=default
 

Additional Inherited Members

- Static Public Member Functions inherited from tram::FileReader
static FileReaderGetReader (const char *path)
 
static void SetSearchList ()
 
static std::vector< FileSourceGetSearchList ()
 

Constructor & Destructor Documentation

◆ DiskReader()

tram::DiskReader::DiskReader ( const char *  path)
inline

◆ ~DiskReader()

tram::DiskReader::~DiskReader ( )
inline

Member Function Documentation

◆ GetContents()

const char * tram::DiskReader::GetContents ( )
inlinevirtual

Implements tram::FileReader.

◆ GetSize()

size_t tram::DiskReader::GetSize ( )
inlinevirtual

Implements tram::FileReader.

◆ GetStatus()

FileStatus tram::DiskReader::GetStatus ( )
inlinevirtual

Implements tram::FileReader.

◆ Yeet()

void tram::DiskReader::Yeet ( )
inlinevirtual

Implements tram::FileReader.


The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/platform/file.cpp
================================================ FILE: docs/cppapi/classtram_1_1_disk_writer-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::DiskWriter Member List

This is the complete list of members for tram::DiskWriter, including all inherited members.

DiskWriter(const char *path)tram::DiskWriterinline
GetMediumList()tram::FileWriterstatic
GetStatus()tram::DiskWriterinlinevirtual
GetWriter(const char *path)tram::FileWriterstatic
SetContents(const char *contents, size_t size)tram::DiskWriterinlinevirtual
SetMediumList()tram::FileWriterstatic
Yeet()tram::DiskWriterinlinevirtual
~DiskWriter()tram::DiskWriterinline
~FileWriter()=defaulttram::FileWritervirtual
================================================ FILE: docs/cppapi/classtram_1_1_disk_writer.html ================================================ Tramway SDK: tram::DiskWriter Class Reference
Tramway SDK v0.1.1
tram::DiskWriter Class Reference
Inheritance diagram for tram::DiskWriter:
tram::FileWriter

Public Member Functions

 DiskWriter (const char *path)
 
 ~DiskWriter ()
 
void SetContents (const char *contents, size_t size)
 
void Yeet ()
 
FileStatus GetStatus ()
 
- Public Member Functions inherited from tram::FileWriter
virtual ~FileWriter ()=default
 

Additional Inherited Members

- Static Public Member Functions inherited from tram::FileWriter
static FileWriterGetWriter (const char *path)
 
static void SetMediumList ()
 
static std::vector< FileSourceGetMediumList ()
 

Constructor & Destructor Documentation

◆ DiskWriter()

tram::DiskWriter::DiskWriter ( const char *  path)
inline

◆ ~DiskWriter()

tram::DiskWriter::~DiskWriter ( )
inline

Member Function Documentation

◆ GetStatus()

FileStatus tram::DiskWriter::GetStatus ( )
inlinevirtual

Implements tram::FileWriter.

◆ SetContents()

void tram::DiskWriter::SetContents ( const char *  contents,
size_t  size 
)
inlinevirtual

Implements tram::FileWriter.

◆ Yeet()

void tram::DiskWriter::Yeet ( )
inlinevirtual

Implements tram::FileWriter.


The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/platform/file.cpp
================================================ FILE: docs/cppapi/classtram_1_1_entity-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Entity Member List

This is the complete list of members for tram::Entity, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()=0tram::Entitypure virtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()=0tram::Entitypure virtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)=0tram::Entitypure virtual
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
Register()tram::Entityprotected
RegisterType(name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)tram::Entitystatic
rotationtram::Entityprotected
Serialize()=0tram::Entitypure virtual
SetAutoLoad(bool is)tram::Entityinline
SetFlag(uint32_t flag, bool value)tram::Entityinlineprotected
SetLocation(vec3 loc)tram::Entityinline
SetParameters()=0tram::Entitypure virtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
Unload()=0tram::Entitypure virtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateParameters()=0tram::Entitypure virtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
WorldCelltram::Entityfriend
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_entity.html ================================================ Tramway SDK: tram::Entity Class Reference
Tramway SDK v0.1.1

Entity base class. More...

#include <framework/entity.h>

Inheritance diagram for tram::Entity:
tram::Crate tram::Decoration tram::Ext::Kitchensink::Breakable tram::Ext::Kitchensink::Button tram::Ext::Kitchensink::DebugShape tram::Ext::Kitchensink::DebugText tram::Ext::Kitchensink::Pickup tram::Ext::Kitchensink::QuestEntity tram::Ext::Kitchensink::Train tram::Ext::Kitchensink::TriggerAutosave tram::Ext::Kitchensink::TriggerHurt tram::Ext::Kitchensink::TriggerMultiple tram::Ext::Kitchensink::TriggerOnce tram::Ext::Kitchensink::TriggerPlayerMovement tram::Ext::Kitchensink::TriggerPush tram::Ext::Kitchensink::TriggerRemove tram::Ext::Kitchensink::TriggerTeleport tram::Ext::Kitchensink::Water tram::Light tram::Marker tram::Player tram::Sound tram::StaticWorldObject tram::Trigger

Classes

struct  FieldInfo
 

Public Types

enum  : uint32_t { FIELD_SERIALIZE = 1 }
 

Public Member Functions

virtual void Load ()=0
 Loads an entity. More...
 
virtual void Unload ()=0
 Unloads an entity. More...
 
virtual void Serialize ()=0
 
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 Destructs the entity. More...
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 Returns the entity's parent cell. More...
 
bool IsLoaded () const
 Returns the entity load status. More...
 
bool IsAutoLoad () const
 Returns the auto load flag status. More...
 
bool IsPersistent () const
 Returns the persistence status of an entity. More...
 
bool IsChanged () const
 
bool IsDeleted () const
 Returns the entity deletion status. More...
 
bool IsLoadedFromDisk () const
 
virtual void UpdateParameters ()=0
 Called when Entity::UpdateTransform is called. More...
 
virtual void SetParameters ()=0
 Called when either Entity::SetLocation or Entity::SetRotation is called. More...
 
void Yeet ()
 Purges the entity. More...
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void MessageHandler (Message &msg)=0
 Allows entities to receive messages. More...
 
virtual void EventHandler (Event &event)
 Allows entities to receive events. More...
 
virtual name_t GetType ()=0
 Returns the type of the entity. More...
 
void CheckTransition ()
 Check whether an entity has entered a different cell. More...
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Update ()
 Updates entities. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)
 Registers a new entity type. More...
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 Creates an entity. More...
 
static EntityFind (id_t entity_id)
 Finds the entity by its ID number. More...
 
static EntityFind (name_t entity_name)
 Finds the entity by its name. More...
 

Protected Types

enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 

Protected Member Functions

void Register ()
 Registers the entity. More...
 
void Unregister ()
 Unregisters the entity. More...
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 
void SetFlag (uint32_t flag, bool value)
 

Protected Attributes

id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Friends

class WorldCell
 

Detailed Description

Entity base class.

Provides API for entities and some basic functionality.

See also
https://racenis.github.io/tram-sdk/documentation/framework/entity.html

Member Enumeration Documentation

◆ anonymous enum

anonymous enum : uint32_t
Enumerator
FIELD_SERIALIZE 

◆ anonymous enum

anonymous enum : uint32_t
protected
Enumerator
NON_PERSISTENT 
LOADED 
DISABLE_AUTO_LOAD 
NON_SERIALIZABLE 
DIRTY 
DELETED 
LOADED_FROM_DISK 

Constructor & Destructor Documentation

◆ Entity() [1/3]

tram::Entity::Entity ( )

Creates an unnamed entity with a random ID.

◆ Entity() [2/3]

tram::Entity::Entity ( name_t  name)

Creates a named entity with a random ID.

◆ Entity() [3/3]

tram::Entity::Entity ( const SharedEntityData shared_data)

Creates an entity from a SharedEntityData.

◆ ~Entity()

tram::Entity::~Entity ( )
virtual

Destructs the entity.

This automatically also removes the entity from its parent cell, and also unregisters it.

Member Function Documentation

◆ CheckTransition()

void tram::Entity::CheckTransition ( )

Check whether an entity has entered a different cell.

◆ EventHandler()

void tram::Entity::EventHandler ( Event event)
inlinevirtual

Allows entities to receive events.

Whenever an entity registers an event, an event of the same type as the event listener is posted and Event::Dispatch() has been called, the entity will receive the event through this method.

Reimplemented in tram::Ext::Kitchensink::Button.

◆ Find() [1/2]

Entity * tram::Entity::Find ( id_t  entityID)
static

Finds the entity by its ID number.

Returns
If an entity with the given ID number has been found, a pointer to it will be returned. Otherwise a nullptr will be returned.

◆ Find() [2/2]

Entity * tram::Entity::Find ( name_t  entityName)
static

Finds the entity by its name.

Returns
If an entity with the given name has been found, a pointer to it will be returned. Otherwise a nullptr will be returned.

◆ FireSignal() [1/2]

void tram::Entity::FireSignal ( signal_t  type)
inlineprotected

◆ FireSignal() [2/2]

void tram::Entity::FireSignal ( signal_t  type,
Value  value 
)
inlineprotected

◆ GetCell()

WorldCell * tram::Entity::GetCell ( )
inline

Returns the entity's parent cell.

If an entity is inside a WorldCell, this method will return a pointer to it, otherwise it will return a nullptr.

◆ GetID()

id_t tram::Entity::GetID ( ) const
inline

◆ GetLocation()

const vec3 & tram::Entity::GetLocation ( )
inline

◆ GetName()

name_t tram::Entity::GetName ( ) const
inline

◆ GetRotation()

const quat & tram::Entity::GetRotation ( )
inline

◆ GetSignalTable()

SignalTable * tram::Entity::GetSignalTable ( )
inline

◆ GetType()

void tram::Entity::GetType ( )
pure virtual

Returns the type of the entity.

Usually this method returns the same name that is used to Entity::RegisterType() its type.

Implemented in tram::Crate, tram::Decoration, tram::Light, tram::Marker, tram::Player, tram::Sound, tram::StaticWorldObject, tram::Trigger, tram::Ext::Kitchensink::Button, and tram::Ext::Kitchensink::QuestEntity.

◆ IsAutoLoad()

WorldCell * tram::Entity::IsAutoLoad ( ) const
inline

Returns the auto load flag status.

By default all entities are automatically loaded, i.e. when the WorldCell in which they reside is loaded. Sometimes you might want to override this, so the automatic loading disablement flag is provided.

◆ IsChanged()

bool tram::Entity::IsChanged ( ) const
inline

◆ IsDeleted()

WorldCell * tram::Entity::IsDeleted ( ) const
inline

Returns the entity deletion status.

When an entity is yeeted, it is marked as deleted. They continue existing for some time until the Entity::Update() static method is called and they are destructed.

Even then, entities that have been loaded from the disk will continue existing, so that their status as being deleted can be written back to disk.

This also allows to ressurect them, if the need arises.

◆ IsLoaded()

WorldCell * tram::Entity::IsLoaded ( ) const
inline

Returns the entity load status.

◆ IsLoadedFromDisk()

bool tram::Entity::IsLoadedFromDisk ( ) const
inline

◆ IsPersistent()

WorldCell * tram::Entity::IsPersistent ( ) const
inline

Returns the persistence status of an entity.

Entities that have been marked as non-persistent will be yeeted when their parent cell is unloaded, instead of the usual unloading.

This is useful when creating small decoration entities, e.g. debris and giblets, which don't need to be saved.

◆ Load()

◆ Make() [1/2]

Entity * tram::Entity::Make ( name_t  type,
const SharedEntityData shared_data,
const ValueArray field_array 
)
static

Creates an entity.

Uses data provided in a Entity::RegisterType() call to find the construction function of an entity type and then constructs it.

Parameters
typeType of the entity, this should be the same name that was used when using Register() to register an entity type.
shared_dataShared data of the entity.
field_arrayValues to be filled in the entity's fields.
Returns
Pointer to an entity if successful, otherwise a nullptr.

◆ Make() [2/2]

Entity * tram::Entity::Make ( name_t  type,
File file 
)
static

Loads an Entity from a File.

◆ MessageHandler()

◆ Register()

void tram::Entity::Register ( )
protected

Registers the entity.

Inserts the entity into the entity ID list, so that it can be found using the Entity::Find(id_t) static method. If the entity has a name, then it is also inserted into the name list, so that it can be found using the Entity::Find(name_t) static method.

◆ RegisterType() [1/3]

void tram::Entity::RegisterType ( name_t  name,
entity_make  constr_func,
entity_clear  destr_func,
const FieldInfo fields,
size_t  fieldcount 
)
static

Registers a new entity type.

Parameters
nameName of the entity, should be the same as what its GetType() method returns.
constr_funcThis function will be called when a new entity of this type is requested, e.g. when deserializing a worldcell file.
destr_funcThis function will be called when an entity of this type is yeeted.
fieldsPointer to an array of serialization fields.
fieldcountSize of the fields array.

◆ RegisterType() [2/3]

void tram::Entity::RegisterType ( name_t  name,
entity_make  constr_func,
entity_clear  destr_func,
const Type fields,
size_t  fieldcount 
)
static

Registers a new entity type.

Deprecated:
Use other RegisterType() methods instead.

◆ RegisterType() [3/3]

void tram::Entity::RegisterType ( name_t  name,
entity_make  constr_func,
entity_clear  destr_func,
std::initializer_list< FieldInfo fields 
)
static

Registers a new entity type.

Same as the other RegisterType() method, but uses an initializer list instead of an array. They are functionally identical, use whichever you like.

◆ Serialize()

◆ SetAutoLoad()

void tram::Entity::SetAutoLoad ( bool  is)
inline

◆ SetFlag()

void tram::Entity::SetFlag ( uint32_t  flag,
bool  value 
)
inlineprotected

◆ SetLocation()

void tram::Entity::SetLocation ( vec3  loc)
inline

◆ SetParameters()

◆ SetPersistent()

void tram::Entity::SetPersistent ( bool  is)
inline

◆ SetRotation()

void tram::Entity::SetRotation ( quat  rot)
inline

◆ Unload()

◆ Unregister()

void tram::Entity::Unregister ( )
protected

Unregisters the entity.

Essentially, this is the reversal of what the Entity::Register() method has done. This method will remove the entity from the ID list and from the name list, if it has a name. It will no longer be possible to find the entity by using the Entity::Find() method and its overloads.

◆ Update()

void tram::Entity::Update ( )
static

Updates entities.

Should be called once per update cycle. This method will go through the list of all yeeted entities and will destruct the ones that need to be destructed.

◆ UpdateParameters()

◆ UpdateTransform()

void tram::Entity::UpdateTransform ( const vec3 loc,
const quat rot 
)
inline

◆ Yeet()

void tram::Entity::Yeet ( )

Purges the entity.

The entity will be flagged as deleted, unloaded, unregistered and then it will be held in internment until Entity::Update() is called and then, if needed, it will also be destructed.

Friends And Related Function Documentation

◆ WorldCell

friend class WorldCell
friend

Member Data Documentation

◆ cell

WorldCell* tram::Entity::cell = nullptr
protected

◆ flags

uint32_t tram::Entity::flags = 0
protected

◆ id

id_t tram::Entity::id = 0
protected

◆ location

vec3 tram::Entity::location = {0.0f, 0.0f, 0.0f}
protected

◆ name

name_t tram::Entity::name
protected

◆ rotation

quat tram::Entity::rotation = {1.0f, 0.0f, 0.0f, 0.0f}
protected

◆ signals

SignalTable* tram::Entity::signals = nullptr
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/entity.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/entity.cpp
================================================ FILE: docs/cppapi/classtram_1_1_entity_component-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::EntityComponent Member List
================================================ FILE: docs/cppapi/classtram_1_1_entity_component.html ================================================ Tramway SDK: tram::EntityComponent Class Reference
Tramway SDK v0.1.1

Component base class. More...

#include <framework/entitycomponent.h>

Inheritance diagram for tram::EntityComponent:
tram::AnimationComponent tram::AudioComponent tram::ControllerComponent tram::DecalComponent tram::Ext::Kitchensink::AnimationStateComponent tram::LightComponent tram::ParticleComponent tram::PhysicsComponent tram::PlayerComponent tram::RenderComponent tram::SpriteComponent tram::TemplateComponent tram::TriggerComponent

Public Member Functions

 EntityComponent ()=default
 
virtual ~EntityComponent ()=default
 
virtual void Init ()
 Initializes an entity component. More...
 
virtual void EventHandler (Event &event)=0
 
bool IsReady ()
 Returns the component's readiness. More...
 
bool IsInit ()
 Returns the component's init status. More...
 
EntityGetParent ()
 
void SetParent (Entity *parent)
 

Protected Member Functions

void ResourceReady ()
 Notifies the component of a streamed-in resource. More...
 
virtual void Start ()=0
 

Protected Attributes

size_t resources_waiting = 0
 
bool is_ready = false
 
bool is_init = false
 
Entityparent = nullptr
 

Friends

template<typename T >
class ResourceProxy
 
void Async::FinishResources ()
 

Detailed Description

Component base class.

Usually the way that components work is that a user creates a component, i.e. constructs an instance of a component, then they call setter methods on it to feed it parameters and finally they call the Init() method in the component.

In turn, the base component class checks whether all of the component's requested resources have been loaded and then calls the component's Start() method.

Constructor & Destructor Documentation

◆ EntityComponent()

tram::EntityComponent::EntityComponent ( )
default

◆ ~EntityComponent()

virtual tram::EntityComponent::~EntityComponent ( )
virtualdefault

Member Function Documentation

◆ EventHandler()

◆ GetParent()

Entity * tram::EntityComponent::GetParent ( )
inline

◆ Init()

void tram::EntityComponent::Init ( )
virtual

Initializes an entity component.

If an entity component has all of its resources already loaded, this will immediately Start() the component.

Reimplemented in tram::LightComponent, tram::PlayerComponent, and tram::TemplateComponent.

◆ IsInit()

tram::EntityComponent::IsInit ( )
inline

Returns the component's init status.

Returns
True if the Init() method has been called.
See also
https://racenis.github.io/tram-sdk/documentation/framework/entitycomponent.html

◆ IsReady()

tram::EntityComponent::IsReady ( )
inline

Returns the component's readiness.

The component is considered ready when it's Init() method has been called, all of it's Resource dependencies have been loaded and its Start() method has been called.

Returns
True if the component's Start() method has been called.

◆ ResourceReady()

void tram::EntityComponent::ResourceReady ( )
protected

Notifies the component of a streamed-in resource.

◆ SetParent()

void tram::EntityComponent::SetParent ( Entity parent)
inline

◆ Start()

Friends And Related Function Documentation

◆ Async::FinishResources

void Async::FinishResources ( )
friend

◆ ResourceProxy

template<typename T >
friend class ResourceProxy
friend

Member Data Documentation

◆ is_init

bool tram::EntityComponent::is_init = false
protected

◆ is_ready

bool tram::EntityComponent::is_ready = false
protected

◆ parent

Entity* tram::EntityComponent::parent = nullptr
protected

◆ resources_waiting

size_t tram::EntityComponent::resources_waiting = 0
protected

The documentation for this class was generated from the following files:
================================================ FILE: docs/cppapi/classtram_1_1_event_listener-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::EventListener Member List

This is the complete list of members for tram::EventListener, including all inherited members.

clear()tram::EventListener
listenertram::EventListenerprotected
make(event_t event, Entity *parent)tram::EventListener
make(event_t event, EntityComponent *parent)tram::EventListener
make(event_t event, void(*handler)(Event &event))tram::EventListener
operator bool()tram::EventListenerinlineexplicit
~EventListener()tram::EventListener
================================================ FILE: docs/cppapi/classtram_1_1_event_listener.html ================================================ Tramway SDK: tram::EventListener Class Reference
Tramway SDK v0.1.1
tram::EventListener Class Reference

Smart wrapper class for Event listeners. More...

#include <framework/event.h>

Public Member Functions

 ~EventListener ()
 
void make (event_t event, Entity *parent)
 Essentially same as Event::AddListener(). More...
 
void make (event_t event, EntityComponent *parent)
 Essentially same as Event::AddListener(). More...
 
void make (event_t event, void(*handler)(Event &event))
 Essentially same as Event::AddListener(). More...
 
void clear ()
 Essentially same as Event::RemoveListener(). More...
 
 operator bool ()
 

Protected Attributes

listener_t listener = 0
 

Detailed Description

Smart wrapper class for Event listeners.

Calling the make() method will initialize the event listener, just like calling Event::AddListener() will do. Calling the clear() method will delete the listener, just like calling Event::RemoveListener() will do.

When this class is destroyed, the event listener will also be automatically removed.

You can also call the make() and clear() methods as much as you want, no resources will be leaked. Any existing event listener will be removed before a new one gets added.

Constructor & Destructor Documentation

◆ ~EventListener()

tram::EventListener::~EventListener ( )

Member Function Documentation

◆ clear()

void tram::EventListener::clear ( )

Essentially same as Event::RemoveListener().

◆ make() [1/3]

void tram::EventListener::make ( event_t  event,
Entity parent 
)

Essentially same as Event::AddListener().

◆ make() [2/3]

void tram::EventListener::make ( event_t  event,
EntityComponent parent 
)

Essentially same as Event::AddListener().

◆ make() [3/3]

void tram::EventListener::make ( event_t  event,
void(*)(Event &event)  handler 
)

Essentially same as Event::AddListener().

◆ operator bool()

tram::EventListener::operator bool ( )
inlineexplicit

Member Data Documentation

◆ listener

listener_t tram::EventListener::listener = 0
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/event.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/event.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_camera_1_1_camera-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Camera::Camera Member List
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_camera_1_1_camera.html ================================================ Tramway SDK: tram::Ext::Camera::Camera Class Reference
Tramway SDK v0.1.1
tram::Ext::Camera::Camera Class Referenceabstract

Interface API for cameras. More...

#include <extensions/camera/camera.h>

Inheritance diagram for tram::Ext::Camera::Camera:
tram::Ext::Camera::FirstPersonCamera

Public Member Functions

void SetActive ()
 
void SetFollowing (Entity *)
 
id_t GetFollowing ()
 
void SetPosition (vec3 position)
 
void SetRotation (quat rotation)
 
vec3 GetPosition ()
 
quat GetRotation ()
 
void SetViewTransform ()
 
void SetListenerTransform ()
 
void SetFollowingLookat (quat new_lookat)
 
void SetLayerMask (uint32_t layer_mask)
 
virtual void Update ()=0
 
virtual ~Camera ()
 

Protected Attributes

vec3 position = {0.0f, 0.0f, 0.0f}
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
listener_t following_listener = 0
 
uint32_t layer_mask = 1 + 2
 
id_t following = 0
 
quat following_lookat = {1.0f, 0.0f, 0.0f, 0.0f}
 

Detailed Description

Interface API for cameras.

First person camera.

This camera will look in the same direction that an entity is looking at, while also following it at a set distance.

Supports view bobbing

Constructor & Destructor Documentation

◆ ~Camera()

tram::Ext::Camera::Camera::~Camera ( )
virtual

Member Function Documentation

◆ GetFollowing()

id_t tram::Ext::Camera::Camera::GetFollowing ( )

◆ GetPosition()

vec3 tram::Ext::Camera::Camera::GetPosition ( )
inline

◆ GetRotation()

quat tram::Ext::Camera::Camera::GetRotation ( )
inline

◆ SetActive()

void tram::Ext::Camera::Camera::SetActive ( )

◆ SetFollowing()

void tram::Ext::Camera::Camera::SetFollowing ( Entity entity)

◆ SetFollowingLookat()

void tram::Ext::Camera::Camera::SetFollowingLookat ( quat  new_lookat)

◆ SetLayerMask()

void tram::Ext::Camera::Camera::SetLayerMask ( uint32_t  layer_mask)
inline

◆ SetListenerTransform()

void tram::Ext::Camera::Camera::SetListenerTransform ( )

◆ SetPosition()

void tram::Ext::Camera::Camera::SetPosition ( vec3  position)
inline

◆ SetRotation()

void tram::Ext::Camera::Camera::SetRotation ( quat  rotation)
inline

◆ SetViewTransform()

void tram::Ext::Camera::Camera::SetViewTransform ( )

◆ Update()

void tram::Ext::Camera::Camera::Update ( )
pure virtual

Member Data Documentation

◆ following

id_t tram::Ext::Camera::Camera::following = 0
protected

◆ following_listener

listener_t tram::Ext::Camera::Camera::following_listener = 0
protected

◆ following_lookat

quat tram::Ext::Camera::Camera::following_lookat = {1.0f, 0.0f, 0.0f, 0.0f}
protected

◆ layer_mask

uint32_t tram::Ext::Camera::Camera::layer_mask = 1 + 2
protected

◆ position

vec3 tram::Ext::Camera::Camera::position = {0.0f, 0.0f, 0.0f}
protected

◆ rotation

quat tram::Ext::Camera::Camera::rotation = {1.0f, 0.0f, 0.0f, 0.0f}
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/camera/camera.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/camera/camera.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_camera_1_1_first_person_camera-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Camera::FirstPersonCamera Member List

This is the complete list of members for tram::Ext::Camera::FirstPersonCamera, including all inherited members.

bobtram::Ext::Camera::FirstPersonCameraprotected
bob_callbacktram::Ext::Camera::FirstPersonCameraprotected
bob_speedtram::Ext::Camera::FirstPersonCameraprotected
bobbing_distancetram::Ext::Camera::FirstPersonCameraprotected
bobbing_tilttram::Ext::Camera::FirstPersonCameraprotected
bobbing_tilt_goaltram::Ext::Camera::FirstPersonCameraprotected
bobbing_weighttram::Ext::Camera::FirstPersonCameraprotected
bobbing_weight_goaltram::Ext::Camera::FirstPersonCameraprotected
callback_counttram::Ext::Camera::FirstPersonCameraprotected
FirstPersonCamera()tram::Ext::Camera::FirstPersonCamerainline
followingtram::Ext::Camera::Cameraprotected
following_interpolationtram::Ext::Camera::FirstPersonCameraprotected
following_listenertram::Ext::Camera::Cameraprotected
following_lookattram::Ext::Camera::Cameraprotected
following_offsettram::Ext::Camera::FirstPersonCameraprotected
GetBob()tram::Ext::Camera::FirstPersonCamera
GetFollowing()tram::Ext::Camera::Camera
GetPosition()tram::Ext::Camera::Camerainline
GetRotation()tram::Ext::Camera::Camerainline
GetWeight()tram::Ext::Camera::FirstPersonCamera
layer_masktram::Ext::Camera::Cameraprotected
mouselooktram::Ext::Camera::FirstPersonCameraprotected
pitchtram::Ext::Camera::FirstPersonCameraprotected
positiontram::Ext::Camera::Cameraprotected
rotate_followingtram::Ext::Camera::FirstPersonCameraprotected
rotationtram::Ext::Camera::Cameraprotected
SetActive()tram::Ext::Camera::Camera
SetBobbing(float bobbing_weight)tram::Ext::Camera::FirstPersonCamera
SetBobbingCallback(void(*bob_callback)(FirstPersonCamera *))tram::Ext::Camera::FirstPersonCamera
SetBobbingDistance(float bobbing_distance)tram::Ext::Camera::FirstPersonCamera
SetBobbingTilt(float bobbing_tilt)tram::Ext::Camera::FirstPersonCamera
SetBobSpeed(float speed)tram::Ext::Camera::FirstPersonCamera
SetFollowing(Entity *)tram::Ext::Camera::Camera
SetFollowingInterpolation(float following_interpolation)tram::Ext::Camera::FirstPersonCamerainline
SetFollowingLookat(quat new_lookat)tram::Ext::Camera::Camera
SetFollowingOffset(vec3 offset)tram::Ext::Camera::FirstPersonCamerainline
SetLayerMask(uint32_t layer_mask)tram::Ext::Camera::Camerainline
SetListenerTransform()tram::Ext::Camera::Camera
SetMouselook(bool mouselook)tram::Ext::Camera::FirstPersonCamera
SetPosition(vec3 position)tram::Ext::Camera::Camerainline
SetRotateFollowing(bool rotate_following)tram::Ext::Camera::FirstPersonCamera
SetRotation(quat rotation)tram::Ext::Camera::Camerainline
SetTilt(float tilt)tram::Ext::Camera::FirstPersonCamera
SetViewTransform()tram::Ext::Camera::Camera
tilttram::Ext::Camera::FirstPersonCameraprotected
tilt_goaltram::Ext::Camera::FirstPersonCameraprotected
tilt_lasttram::Ext::Camera::FirstPersonCameraprotected
Update()tram::Ext::Camera::FirstPersonCameravirtual
yawtram::Ext::Camera::FirstPersonCameraprotected
~Camera()tram::Ext::Camera::Cameravirtual
~FirstPersonCamera()tram::Ext::Camera::FirstPersonCamerainline
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html ================================================ Tramway SDK: tram::Ext::Camera::FirstPersonCamera Class Reference
Tramway SDK v0.1.1
tram::Ext::Camera::FirstPersonCamera Class Reference

#include <firstperson.h>

Inheritance diagram for tram::Ext::Camera::FirstPersonCamera:
tram::Ext::Camera::Camera

Public Member Functions

 FirstPersonCamera ()
 
 ~FirstPersonCamera ()
 
void Update ()
 
void SetTilt (float tilt)
 
void SetMouselook (bool mouselook)
 
void SetRotateFollowing (bool rotate_following)
 
void SetBobbing (float bobbing_weight)
 Sets the weight of the bobbing. More...
 
void SetBobbingDistance (float bobbing_distance)
 Sets the distance bobbed during bobbing. More...
 
void SetBobbingTilt (float bobbing_tilt)
 Sets the tilt bobbed during bobbing. More...
 
void SetBobbingCallback (void(*bob_callback)(FirstPersonCamera *))
 Sets the bobbing callback. More...
 
void SetBobSpeed (float speed)
 Sets the speed of the bobs during bobbing. More...
 
float GetBob ()
 
float GetWeight ()
 
void SetFollowingInterpolation (float following_interpolation)
 
void SetFollowingOffset (vec3 offset)
 
- Public Member Functions inherited from tram::Ext::Camera::Camera
void SetActive ()
 
void SetFollowing (Entity *)
 
id_t GetFollowing ()
 
void SetPosition (vec3 position)
 
void SetRotation (quat rotation)
 
vec3 GetPosition ()
 
quat GetRotation ()
 
void SetViewTransform ()
 
void SetListenerTransform ()
 
void SetFollowingLookat (quat new_lookat)
 
void SetLayerMask (uint32_t layer_mask)
 
virtual ~Camera ()
 

Protected Attributes

float tilt = 0.0f
 
float tilt_goal = 0.0f
 
float tilt_last = 0.0f
 
float bob = 0.0f
 
float bobbing_weight_goal = 0.0f
 
float bobbing_weight = 0.0f
 
float bobbing_distance = 0.2f
 
float bobbing_tilt_goal = 0.0f
 
float bobbing_tilt = 0.0f
 
float bob_speed = 0.1f
 
int callback_count = 0
 
void(* bob_callback )(FirstPersonCamera *) = nullptr
 
bool mouselook = false
 
bool rotate_following = false
 
float yaw = 0.0f
 
float pitch = 0.0f
 
vec3 following_offset = vec3 (0.0f, 0.0f, 0.0f)
 
float following_interpolation = 1.0f
 
- Protected Attributes inherited from tram::Ext::Camera::Camera
vec3 position = {0.0f, 0.0f, 0.0f}
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
listener_t following_listener = 0
 
uint32_t layer_mask = 1 + 2
 
id_t following = 0
 
quat following_lookat = {1.0f, 0.0f, 0.0f, 0.0f}
 

Constructor & Destructor Documentation

◆ FirstPersonCamera()

tram::Ext::Camera::FirstPersonCamera::FirstPersonCamera ( )
inline

◆ ~FirstPersonCamera()

tram::Ext::Camera::FirstPersonCamera::~FirstPersonCamera ( )
inline

Member Function Documentation

◆ GetBob()

float tram::Ext::Camera::FirstPersonCamera::GetBob ( )

◆ GetWeight()

float tram::Ext::Camera::FirstPersonCamera::GetWeight ( )

◆ SetBobbing()

void tram::Ext::Camera::FirstPersonCamera::SetBobbing ( float  bobbing_weight)

Sets the weight of the bobbing.

The larger the weight, the more exaggerated the bobbing will be. This parameter can be used to change the ammount of bobbing for different activities, e.g. 1.0f for walking, 2.0f for running and 0.0f for standing.

◆ SetBobbingCallback()

void tram::Ext::Camera::FirstPersonCamera::SetBobbingCallback ( void(*)(FirstPersonCamera *)  bob_callback)

Sets the bobbing callback.

The bobbing callback is called every time a full view bob is performed. This callback is very effective when used to trigger footstep sound effects.

◆ SetBobbingDistance()

void tram::Ext::Camera::FirstPersonCamera::SetBobbingDistance ( float  bobbing_distance)

Sets the distance bobbed during bobbing.

Parameters
bobbing_distanceBest if set to between 0.0f and 0.5f.

◆ SetBobbingTilt()

void tram::Ext::Camera::FirstPersonCamera::SetBobbingTilt ( float  bobbing_tilt)

Sets the tilt bobbed during bobbing.

The camera will be tilted back and forth along the Z, i.e. forward axis.

Note
Try not to throw up if you set this value too high.
Parameters
bobbing_tiltTilt, in radians.

◆ SetBobSpeed()

void tram::Ext::Camera::FirstPersonCamera::SetBobSpeed ( float  speed)

Sets the speed of the bobs during bobbing.

◆ SetFollowingInterpolation()

void tram::Ext::Camera::FirstPersonCamera::SetFollowingInterpolation ( float  following_interpolation)
inline

◆ SetFollowingOffset()

void tram::Ext::Camera::FirstPersonCamera::SetFollowingOffset ( vec3  offset)
inline

◆ SetMouselook()

void tram::Ext::Camera::FirstPersonCamera::SetMouselook ( bool  mouselook)

◆ SetRotateFollowing()

void tram::Ext::Camera::FirstPersonCamera::SetRotateFollowing ( bool  rotate_following)

◆ SetTilt()

void tram::Ext::Camera::FirstPersonCamera::SetTilt ( float  tilt)

◆ Update()

void tram::Ext::Camera::FirstPersonCamera::Update ( )
virtual

Member Data Documentation

◆ bob

float tram::Ext::Camera::FirstPersonCamera::bob = 0.0f
protected

◆ bob_callback

void(* tram::Ext::Camera::FirstPersonCamera::bob_callback) (FirstPersonCamera *) = nullptr
protected

◆ bob_speed

float tram::Ext::Camera::FirstPersonCamera::bob_speed = 0.1f
protected

◆ bobbing_distance

float tram::Ext::Camera::FirstPersonCamera::bobbing_distance = 0.2f
protected

◆ bobbing_tilt

float tram::Ext::Camera::FirstPersonCamera::bobbing_tilt = 0.0f
protected

◆ bobbing_tilt_goal

float tram::Ext::Camera::FirstPersonCamera::bobbing_tilt_goal = 0.0f
protected

◆ bobbing_weight

float tram::Ext::Camera::FirstPersonCamera::bobbing_weight = 0.0f
protected

◆ bobbing_weight_goal

float tram::Ext::Camera::FirstPersonCamera::bobbing_weight_goal = 0.0f
protected

◆ callback_count

int tram::Ext::Camera::FirstPersonCamera::callback_count = 0
protected

◆ following_interpolation

float tram::Ext::Camera::FirstPersonCamera::following_interpolation = 1.0f
protected

◆ following_offset

vec3 tram::Ext::Camera::FirstPersonCamera::following_offset = vec3 (0.0f, 0.0f, 0.0f)
protected

◆ mouselook

bool tram::Ext::Camera::FirstPersonCamera::mouselook = false
protected

◆ pitch

float tram::Ext::Camera::FirstPersonCamera::pitch = 0.0f
protected

◆ rotate_following

bool tram::Ext::Camera::FirstPersonCamera::rotate_following = false
protected

◆ tilt

float tram::Ext::Camera::FirstPersonCamera::tilt = 0.0f
protected

◆ tilt_goal

float tram::Ext::Camera::FirstPersonCamera::tilt_goal = 0.0f
protected

◆ tilt_last

float tram::Ext::Camera::FirstPersonCamera::tilt_last = 0.0f
protected

◆ yaw

float tram::Ext::Camera::FirstPersonCamera::yaw = 0.0f
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/camera/firstperson.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/camera/firstperson.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_breakable-members.html ================================================ Tramway SDK: Member List
Tramway SDK
tram::Ext::Design::Breakable Member List

This is the complete list of members for tram::Ext::Design::Breakable, including all inherited members.

Breakable(const SharedEntityData &, const ValueArray &)tram::Ext::Design::Breakable
celltram::Entityprotected
CheckTransition()tram::Entity
collmodeltram::Ext::Design::Breakableprotected
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()=0tram::Entitypure virtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Ext::Design::Breakablevirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Design::Breakablevirtual
modeltram::Ext::Design::Breakableprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physicscomponenttram::Ext::Design::Breakableprotected
Register()tram::Ext::Design::Breakablestatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Ext::Design::Breakableprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Design::Breakablevirtual
SetAutoLoad(bool is)tram::Entityinline
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Design::Breakablevirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
Unload()tram::Ext::Design::Breakablevirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateFromList()tram::Entitystatic
UpdateParameters()tram::Ext::Design::Breakablevirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_breakable.html ================================================ Tramway SDK: tram::Ext::Design::Breakable Class Reference
Tramway SDK

#include <entities.h>

Inheritance diagram for tram::Ext::Design::Breakable:
tram::Entity

Public Member Functions

 Breakable (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 
void SetParameters ()
 
void Load ()
 
void Unload ()
 
void Serialize ()
 
void MessageHandler (Message &msg)
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 
bool IsLoaded () const
 
bool IsAutoLoad () const
 
bool IsPersistent () const
 
bool IsChanged () const
 
bool IsDeleted () const
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 
virtual name_t GetType ()=0
 
void CheckTransition ()
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const FieldInfo *fields, size_t fieldcount)
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)
 
static void UpdateFromList ()
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 
static EntityFind (id_t entity_id)
 
static EntityFind (name_t entity_name)
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t collmodel
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 
void Unregister ()
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 

Constructor & Destructor Documentation

◆ Breakable()

tram::Ext::Design::Breakable::Breakable ( const SharedEntityData ,
const ValueArray  
)

Member Function Documentation

◆ Load()

void tram::Ext::Design::Breakable::Load ( )
virtual

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Design::Breakable::MessageHandler ( Message msg)
virtual

Implements tram::Entity.

◆ Register()

static void tram::Ext::Design::Breakable::Register ( )
static

◆ Serialize()

void tram::Ext::Design::Breakable::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Design::Breakable::SetParameters ( )
virtual

Implements tram::Entity.

◆ Unload()

void tram::Ext::Design::Breakable::Unload ( )
virtual

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Design::Breakable::UpdateParameters ( )
virtual

Implements tram::Entity.

Member Data Documentation

◆ collmodel

name_t tram::Ext::Design::Breakable::collmodel
protected

◆ model

name_t tram::Ext::Design::Breakable::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Design::Breakable::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Design::Breakable::rendercomponent
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_button-members.html ================================================ Tramway SDK: Member List
Tramway SDK
tram::Ext::Design::Button Member List

This is the complete list of members for tram::Ext::Design::Button, including all inherited members.

Button(const SharedEntityData &, const ValueArray &)tram::Ext::Design::Button
celltram::Entityprotected
CheckTransition()tram::Entity
DELETED enum valuetram::Entityprotected
directiontram::Ext::Design::Buttonprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
distancetram::Ext::Design::Buttonprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Ext::Design::Buttonvirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Ext::Design::Buttonprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()tram::Ext::Design::Buttonvirtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
last_activatetram::Ext::Design::Buttonprotected
lightmaptram::Ext::Design::Buttonprotected
Load()tram::Ext::Design::Buttonvirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Design::Buttonvirtual
modeltram::Ext::Design::Buttonprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
origintram::Ext::Design::Buttonprotected
parenttram::Ext::Design::Buttonprotected
pausetram::Ext::Design::Buttonprotected
physicscomponenttram::Ext::Design::Buttonprotected
progresstram::Ext::Design::Buttonprotected
Register()tram::Ext::Design::Buttonstatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Ext::Design::Buttonprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Design::Buttonvirtual
SetAutoLoad(bool is)tram::Entityinline
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Design::Buttonvirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
soundtram::Ext::Design::Buttonprotected
speedtram::Ext::Design::Buttonprotected
start_postram::Ext::Design::Buttonprotected
start_rottram::Ext::Design::Buttonprotected
statetram::Ext::Design::Buttonprotected
SwitchState(int)tram::Ext::Design::Buttonprotected
ticktram::Ext::Design::Buttonprotected
timertram::Ext::Design::Buttonprotected
Unload()tram::Ext::Design::Buttonvirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateFromList()tram::Entitystatic
UpdateParameters()tram::Ext::Design::Buttonvirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_button.html ================================================ Tramway SDK: tram::Ext::Design::Button Class Reference
Tramway SDK

Essentially a func_door. More...

#include <entities.h>

Inheritance diagram for tram::Ext::Design::Button:
tram::Entity

Public Member Functions

 Button (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 
void SetParameters ()
 
void Load ()
 
void Unload ()
 
void Serialize ()
 
void EventHandler (Event &event)
 
void MessageHandler (Message &msg)
 
name_t GetType ()
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 
bool IsLoaded () const
 
bool IsAutoLoad () const
 
bool IsPersistent () const
 
bool IsChanged () const
 
bool IsDeleted () const
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
void CheckTransition ()
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const FieldInfo *fields, size_t fieldcount)
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)
 
static void UpdateFromList ()
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 
static EntityFind (id_t entity_id)
 
static EntityFind (name_t entity_name)
 

Protected Member Functions

void SwitchState (int)
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 
void Unregister ()
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
EventListener tick
 
uint32_t flags
 
name_t model
 
name_t lightmap
 
vec3 origin
 
vec3 direction
 
float speed
 
float pause
 
float distance
 
name_t sound
 
name_t parent
 
vec3 start_pos
 
quat start_rot
 
float progress
 
float timer
 
int state
 
int last_activate
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 

Detailed Description

Essentially a func_door.

It can open. It can close. It responds to Signal inputs and gives out outputs. It can be a door. It can be a lift. It can even be a button.

Constructor & Destructor Documentation

◆ Button()

tram::Ext::Design::Button::Button ( const SharedEntityData shared_data,
const ValueArray field_array 
)

Member Function Documentation

◆ EventHandler()

void tram::Ext::Design::Button::EventHandler ( Event event)
virtual

Reimplemented from tram::Entity.

◆ GetType()

name_t tram::Ext::Design::Button::GetType ( )
virtual

Implements tram::Entity.

◆ Load()

void tram::Ext::Design::Button::Load ( )
virtual

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Design::Button::MessageHandler ( Message msg)
virtual

Implements tram::Entity.

◆ Register()

void tram::Ext::Design::Button::Register ( )
static

◆ Serialize()

void tram::Ext::Design::Button::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Design::Button::SetParameters ( )
virtual

Implements tram::Entity.

◆ SwitchState()

void tram::Ext::Design::Button::SwitchState ( int  )
protected

◆ Unload()

void tram::Ext::Design::Button::Unload ( )
virtual

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Design::Button::UpdateParameters ( )
virtual

Implements tram::Entity.

Member Data Documentation

◆ direction

vec3 tram::Ext::Design::Button::direction
protected

◆ distance

float tram::Ext::Design::Button::distance
protected

◆ flags

uint32_t tram::Ext::Design::Button::flags
protected

◆ last_activate

int tram::Ext::Design::Button::last_activate
protected

◆ lightmap

name_t tram::Ext::Design::Button::lightmap
protected

◆ model

name_t tram::Ext::Design::Button::model
protected

◆ origin

vec3 tram::Ext::Design::Button::origin
protected

◆ parent

name_t tram::Ext::Design::Button::parent
protected

◆ pause

float tram::Ext::Design::Button::pause
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Design::Button::physicscomponent
protected

◆ progress

float tram::Ext::Design::Button::progress
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Design::Button::rendercomponent
protected

◆ sound

name_t tram::Ext::Design::Button::sound
protected

◆ speed

float tram::Ext::Design::Button::speed
protected

◆ start_pos

vec3 tram::Ext::Design::Button::start_pos
protected

◆ start_rot

quat tram::Ext::Design::Button::start_rot
protected

◆ state

int tram::Ext::Design::Button::state
protected

◆ tick

EventListener tram::Ext::Design::Button::tick
protected

◆ timer

float tram::Ext::Design::Button::timer
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_debug_shape-members.html ================================================ Tramway SDK: Member List
Tramway SDK
tram::Ext::Design::DebugShape Member List

This is the complete list of members for tram::Ext::Design::DebugShape, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
collmodeltram::Ext::Design::DebugShapeprotected
DebugShape(const SharedEntityData &, const ValueArray &)tram::Ext::Design::DebugShape
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()=0tram::Entitypure virtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Ext::Design::DebugShapevirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Design::DebugShapevirtual
modeltram::Ext::Design::DebugShapeprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physicscomponenttram::Ext::Design::DebugShapeprotected
Register()tram::Ext::Design::DebugShapestatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Ext::Design::DebugShapeprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Design::DebugShapevirtual
SetAutoLoad(bool is)tram::Entityinline
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Design::DebugShapevirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
Unload()tram::Ext::Design::DebugShapevirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateFromList()tram::Entitystatic
UpdateParameters()tram::Ext::Design::DebugShapevirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_debug_shape.html ================================================ Tramway SDK: tram::Ext::Design::DebugShape Class Reference
Tramway SDK

#include <entities.h>

Inheritance diagram for tram::Ext::Design::DebugShape:
tram::Entity

Public Member Functions

 DebugShape (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 
void SetParameters ()
 
void Load ()
 
void Unload ()
 
void Serialize ()
 
void MessageHandler (Message &msg)
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 
bool IsLoaded () const
 
bool IsAutoLoad () const
 
bool IsPersistent () const
 
bool IsChanged () const
 
bool IsDeleted () const
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 
virtual name_t GetType ()=0
 
void CheckTransition ()
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const FieldInfo *fields, size_t fieldcount)
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)
 
static void UpdateFromList ()
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 
static EntityFind (id_t entity_id)
 
static EntityFind (name_t entity_name)
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t collmodel
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 
void Unregister ()
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 

Constructor & Destructor Documentation

◆ DebugShape()

tram::Ext::Design::DebugShape::DebugShape ( const SharedEntityData ,
const ValueArray  
)

Member Function Documentation

◆ Load()

void tram::Ext::Design::DebugShape::Load ( )
virtual

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Design::DebugShape::MessageHandler ( Message msg)
virtual

Implements tram::Entity.

◆ Register()

static void tram::Ext::Design::DebugShape::Register ( )
static

◆ Serialize()

void tram::Ext::Design::DebugShape::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Design::DebugShape::SetParameters ( )
virtual

Implements tram::Entity.

◆ Unload()

void tram::Ext::Design::DebugShape::Unload ( )
virtual

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Design::DebugShape::UpdateParameters ( )
virtual

Implements tram::Entity.

Member Data Documentation

◆ collmodel

name_t tram::Ext::Design::DebugShape::collmodel
protected

◆ model

name_t tram::Ext::Design::DebugShape::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Design::DebugShape::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Design::DebugShape::rendercomponent
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_debug_text-members.html ================================================ Tramway SDK: Member List
Tramway SDK
tram::Ext::Design::DebugText Member List

This is the complete list of members for tram::Ext::Design::DebugText, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
collmodeltram::Ext::Design::DebugTextprotected
DebugText(const SharedEntityData &, const ValueArray &)tram::Ext::Design::DebugText
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()=0tram::Entitypure virtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Ext::Design::DebugTextvirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Design::DebugTextvirtual
modeltram::Ext::Design::DebugTextprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physicscomponenttram::Ext::Design::DebugTextprotected
Register()tram::Ext::Design::DebugTextstatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Ext::Design::DebugTextprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Design::DebugTextvirtual
SetAutoLoad(bool is)tram::Entityinline
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Design::DebugTextvirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
Unload()tram::Ext::Design::DebugTextvirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateFromList()tram::Entitystatic
UpdateParameters()tram::Ext::Design::DebugTextvirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_debug_text.html ================================================ Tramway SDK: tram::Ext::Design::DebugText Class Reference
Tramway SDK

#include <entities.h>

Inheritance diagram for tram::Ext::Design::DebugText:
tram::Entity

Public Member Functions

 DebugText (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 
void SetParameters ()
 
void Load ()
 
void Unload ()
 
void Serialize ()
 
void MessageHandler (Message &msg)
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 
bool IsLoaded () const
 
bool IsAutoLoad () const
 
bool IsPersistent () const
 
bool IsChanged () const
 
bool IsDeleted () const
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 
virtual name_t GetType ()=0
 
void CheckTransition ()
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const FieldInfo *fields, size_t fieldcount)
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)
 
static void UpdateFromList ()
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 
static EntityFind (id_t entity_id)
 
static EntityFind (name_t entity_name)
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t collmodel
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 
void Unregister ()
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 

Constructor & Destructor Documentation

◆ DebugText()

tram::Ext::Design::DebugText::DebugText ( const SharedEntityData ,
const ValueArray  
)

Member Function Documentation

◆ Load()

void tram::Ext::Design::DebugText::Load ( )
virtual

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Design::DebugText::MessageHandler ( Message msg)
virtual

Implements tram::Entity.

◆ Register()

static void tram::Ext::Design::DebugText::Register ( )
static

◆ Serialize()

void tram::Ext::Design::DebugText::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Design::DebugText::SetParameters ( )
virtual

Implements tram::Entity.

◆ Unload()

void tram::Ext::Design::DebugText::Unload ( )
virtual

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Design::DebugText::UpdateParameters ( )
virtual

Implements tram::Entity.

Member Data Documentation

◆ collmodel

name_t tram::Ext::Design::DebugText::collmodel
protected

◆ model

name_t tram::Ext::Design::DebugText::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Design::DebugText::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Design::DebugText::rendercomponent
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_decoration-members.html ================================================ Tramway SDK: Member List
Tramway SDK
tram::Ext::Design::Decoration Member List

This is the complete list of members for tram::Ext::Design::Decoration, including all inherited members.

AddUpdate()tram::Entityprotected
auto_loadtram::Entityprotected
celltram::Entityprotected
changedtram::Entityprotected
CheckTransition()tram::Entity
Decoration(const SharedEntityData &, const ValueArray &)tram::Ext::Design::Decoration
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()=0tram::Entitypure virtual
idtram::Entityprotected
in_interiortram::Entityprotected
is_loadedtram::Entityprotected
is_persistenttram::Entityprotected
is_serializabletram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsInInterior() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsPersistent() consttram::Entityinline
lightmaptram::Ext::Design::Decorationprotected
Load()tram::Ext::Design::Decorationvirtual
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Design::Decorationvirtual
modeltram::Ext::Design::Decorationprotected
nametram::Entityprotected
physicscomponenttram::Ext::Design::Decorationprotected
Register()tram::Ext::Design::Decorationstatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)tram::Entitystatic
RemoveUpdate()tram::Entityprotected
rendercomponenttram::Ext::Design::Decorationprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Design::Decorationvirtual
SetAutoLoad(bool auto_load)tram::Entityinline
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Design::Decorationvirtual
SetPersistent(bool persistent)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
Unload()tram::Ext::Design::Decorationvirtual
Update()tram::Entityinlinevirtual
UpdateFromList()tram::Entitystatic
UpdateParameters()tram::Ext::Design::Decorationvirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_decoration.html ================================================ Tramway SDK: tram::Ext::Design::Decoration Class Reference
Tramway SDK

#include <entities.h>

Inheritance diagram for tram::Ext::Design::Decoration:
tram::Entity

Public Member Functions

 Decoration (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 
void SetParameters ()
 
void Load ()
 
void Unload ()
 
void Serialize ()
 
void MessageHandler (Message &msg)
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 
 Entity (name_t name)
 
 Entity (const SharedEntityData &)
 
virtual ~Entity ()
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 
bool IsLoaded () const
 
bool IsAutoLoad () const
 
bool IsInInterior () const
 
bool IsPersistent () const
 
bool IsChanged () const
 
virtual void Update ()
 
void SetAutoLoad (bool auto_load)
 
void SetPersistent (bool persistent)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 
virtual name_t GetType ()=0
 
void CheckTransition ()
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)
 
static void UpdateFromList ()
 Updates all of the entities in the update list. More...
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityFind (id_t entity_id)
 
static EntityFind (name_t entity_name)
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t lightmap
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
uint32_t flags = 0
 
bool is_persistent = true
 
bool is_loaded = false
 
bool auto_load = true
 
bool in_interior = false
 
bool changed = false
 
bool is_serializable = true
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 
void AddUpdate ()
 Adds entity to update list. More...
 
void RemoveUpdate ()
 Remove entity from the update list. More...
 

Constructor & Destructor Documentation

◆ Decoration()

tram::Ext::Design::Decoration::Decoration ( const SharedEntityData ,
const ValueArray  
)

Member Function Documentation

◆ Load()

void tram::Ext::Design::Decoration::Load ( )
virtual

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Design::Decoration::MessageHandler ( Message msg)
virtual

Implements tram::Entity.

◆ Register()

static void tram::Ext::Design::Decoration::Register ( )
static

◆ Serialize()

void tram::Ext::Design::Decoration::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Design::Decoration::SetParameters ( )
virtual

Implements tram::Entity.

◆ Unload()

void tram::Ext::Design::Decoration::Unload ( )
virtual

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Design::Decoration::UpdateParameters ( )
virtual

Implements tram::Entity.

Member Data Documentation

◆ lightmap

name_t tram::Ext::Design::Decoration::lightmap
protected

◆ model

name_t tram::Ext::Design::Decoration::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Design::Decoration::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Design::Decoration::rendercomponent
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_door-members.html ================================================ Tramway SDK: Member List
Tramway SDK
tram::Ext::Design::Door Member List

This is the complete list of members for tram::Ext::Design::Door, including all inherited members.

AddUpdate()tram::Entityprotected
auto_loadtram::Entityprotected
celltram::Entityprotected
changedtram::Entityprotected
CheckTransition()tram::Entity
collmodeltram::Ext::Design::Doorprotected
Door(const SharedEntityData &, const ValueArray &)tram::Ext::Design::Door
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
idtram::Entityprotected
in_interiortram::Entityprotected
is_loadedtram::Entityprotected
is_persistenttram::Entityprotected
is_serializabletram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsInInterior() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Ext::Design::Doorvirtual
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Design::Doorvirtual
modeltram::Ext::Design::Doorprotected
nametram::Entityprotected
physicscomponenttram::Ext::Design::Doorprotected
Query(query_t query)tram::Entityinlinevirtual
Register()tram::Ext::Design::Doorstatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)tram::Entitystatic
RemoveUpdate()tram::Entityprotected
rendercomponenttram::Ext::Design::Doorprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Design::Doorvirtual
SetAutoLoad(bool auto_load)tram::Entityinline
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Design::Doorvirtual
SetPersistent(bool persistent)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
Unload()tram::Ext::Design::Doorvirtual
Update()tram::Entityinlinevirtual
UpdateFromList()tram::Entitystatic
UpdateParameters()tram::Ext::Design::Doorvirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_door.html ================================================ Tramway SDK: tram::Ext::Design::Door Class Reference
Tramway SDK

#include <entities.h>

Inheritance diagram for tram::Ext::Design::Door:
tram::Entity

Public Member Functions

 Door (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 
void SetParameters ()
 
void Load ()
 
void Unload ()
 
void Serialize ()
 
void MessageHandler (Message &msg)
 
- Public Member Functions inherited from tram::Entity
 Entity (name_t name)
 
 Entity (const SharedEntityData &)
 
virtual ~Entity ()
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 
bool IsLoaded () const
 
bool IsAutoLoad () const
 
bool IsInInterior () const
 
bool IsPersistent () const
 
bool IsChanged () const
 
virtual void Update ()
 
void SetAutoLoad (bool auto_load)
 
void SetPersistent (bool persistent)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual value_t Query (query_t query)
 
void CheckTransition ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)
 
static void UpdateFromList ()
 Updates all of the entities in the update list. More...
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityFind (id_t entity_id)
 
static EntityFind (name_t entity_name)
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t collmodel
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
bool is_persistent = true
 
bool is_loaded = false
 
bool auto_load = true
 
bool in_interior = false
 
bool changed = false
 
bool is_serializable = true
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 

Additional Inherited Members

- Protected Member Functions inherited from tram::Entity
void Register ()
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 
void AddUpdate ()
 Adds entity to update list. More...
 
void RemoveUpdate ()
 Remove entity from the update list. More...
 

Constructor & Destructor Documentation

◆ Door()

tram::Ext::Design::Door::Door ( const SharedEntityData ,
const ValueArray  
)

Member Function Documentation

◆ Load()

void tram::Ext::Design::Door::Load ( )
virtual

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Design::Door::MessageHandler ( Message msg)
virtual

Implements tram::Entity.

◆ Register()

static void tram::Ext::Design::Door::Register ( )
static

◆ Serialize()

void tram::Ext::Design::Door::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Design::Door::SetParameters ( )
virtual

Implements tram::Entity.

◆ Unload()

void tram::Ext::Design::Door::Unload ( )
virtual

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Design::Door::UpdateParameters ( )
virtual

Implements tram::Entity.

Member Data Documentation

◆ collmodel

name_t tram::Ext::Design::Door::collmodel
protected

◆ model

name_t tram::Ext::Design::Door::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Design::Door::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Design::Door::rendercomponent
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/design/entities.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_pickup-members.html ================================================ Tramway SDK: Member List
Tramway SDK
tram::Ext::Design::Pickup Member List

This is the complete list of members for tram::Ext::Design::Pickup, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
collmodeltram::Ext::Design::Pickupprotected
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()=0tram::Entitypure virtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Ext::Design::Pickupvirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Design::Pickupvirtual
modeltram::Ext::Design::Pickupprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physicscomponenttram::Ext::Design::Pickupprotected
Pickup(const SharedEntityData &, const ValueArray &)tram::Ext::Design::Pickup
Register()tram::Ext::Design::Pickupstatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Ext::Design::Pickupprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Design::Pickupvirtual
SetAutoLoad(bool is)tram::Entityinline
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Design::Pickupvirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
Unload()tram::Ext::Design::Pickupvirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateFromList()tram::Entitystatic
UpdateParameters()tram::Ext::Design::Pickupvirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_pickup.html ================================================ Tramway SDK: tram::Ext::Design::Pickup Class Reference
Tramway SDK

#include <entities.h>

Inheritance diagram for tram::Ext::Design::Pickup:
tram::Entity

Public Member Functions

 Pickup (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 
void SetParameters ()
 
void Load ()
 
void Unload ()
 
void Serialize ()
 
void MessageHandler (Message &msg)
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 
bool IsLoaded () const
 
bool IsAutoLoad () const
 
bool IsPersistent () const
 
bool IsChanged () const
 
bool IsDeleted () const
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 
virtual name_t GetType ()=0
 
void CheckTransition ()
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const FieldInfo *fields, size_t fieldcount)
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)
 
static void UpdateFromList ()
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 
static EntityFind (id_t entity_id)
 
static EntityFind (name_t entity_name)
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t collmodel
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 
void Unregister ()
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 

Constructor & Destructor Documentation

◆ Pickup()

tram::Ext::Design::Pickup::Pickup ( const SharedEntityData ,
const ValueArray  
)

Member Function Documentation

◆ Load()

void tram::Ext::Design::Pickup::Load ( )
virtual

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Design::Pickup::MessageHandler ( Message msg)
virtual

Implements tram::Entity.

◆ Register()

static void tram::Ext::Design::Pickup::Register ( )
static

◆ Serialize()

void tram::Ext::Design::Pickup::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Design::Pickup::SetParameters ( )
virtual

Implements tram::Entity.

◆ Unload()

void tram::Ext::Design::Pickup::Unload ( )
virtual

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Design::Pickup::UpdateParameters ( )
virtual

Implements tram::Entity.

Member Data Documentation

◆ collmodel

name_t tram::Ext::Design::Pickup::collmodel
protected

◆ model

name_t tram::Ext::Design::Pickup::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Design::Pickup::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Design::Pickup::rendercomponent
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_rotating-members.html ================================================ Tramway SDK: Member List
Tramway SDK
tram::Ext::Design::Rotating Member List

This is the complete list of members for tram::Ext::Design::Rotating, including all inherited members.

AddUpdate()tram::Entityprotected
auto_loadtram::Entityprotected
celltram::Entityprotected
changedtram::Entityprotected
CheckTransition()tram::Entity
collmodeltram::Ext::Design::Rotatingprotected
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
idtram::Entityprotected
in_interiortram::Entityprotected
is_loadedtram::Entityprotected
is_persistenttram::Entityprotected
is_serializabletram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsInInterior() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Ext::Design::Rotatingvirtual
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Design::Rotatingvirtual
modeltram::Ext::Design::Rotatingprotected
nametram::Entityprotected
physicscomponenttram::Ext::Design::Rotatingprotected
Query(query_t query)tram::Entityinlinevirtual
Register()tram::Ext::Design::Rotatingstatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)tram::Entitystatic
RemoveUpdate()tram::Entityprotected
rendercomponenttram::Ext::Design::Rotatingprotected
Rotating(const SharedEntityData &, const ValueArray &)tram::Ext::Design::Rotating
rotationtram::Entityprotected
Serialize()tram::Ext::Design::Rotatingvirtual
SetAutoLoad(bool auto_load)tram::Entityinline
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Design::Rotatingvirtual
SetPersistent(bool persistent)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
Unload()tram::Ext::Design::Rotatingvirtual
Update()tram::Entityinlinevirtual
UpdateFromList()tram::Entitystatic
UpdateParameters()tram::Ext::Design::Rotatingvirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_rotating.html ================================================ Tramway SDK: tram::Ext::Design::Rotating Class Reference
Tramway SDK

#include <entities.h>

Inheritance diagram for tram::Ext::Design::Rotating:
tram::Entity

Public Member Functions

 Rotating (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 
void SetParameters ()
 
void Load ()
 
void Unload ()
 
void Serialize ()
 
void MessageHandler (Message &msg)
 
- Public Member Functions inherited from tram::Entity
 Entity (name_t name)
 
 Entity (const SharedEntityData &)
 
virtual ~Entity ()
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 
bool IsLoaded () const
 
bool IsAutoLoad () const
 
bool IsInInterior () const
 
bool IsPersistent () const
 
bool IsChanged () const
 
virtual void Update ()
 
void SetAutoLoad (bool auto_load)
 
void SetPersistent (bool persistent)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual value_t Query (query_t query)
 
void CheckTransition ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)
 
static void UpdateFromList ()
 Updates all of the entities in the update list. More...
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityFind (id_t entity_id)
 
static EntityFind (name_t entity_name)
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t collmodel
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
bool is_persistent = true
 
bool is_loaded = false
 
bool auto_load = true
 
bool in_interior = false
 
bool changed = false
 
bool is_serializable = true
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 

Additional Inherited Members

- Protected Member Functions inherited from tram::Entity
void Register ()
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 
void AddUpdate ()
 Adds entity to update list. More...
 
void RemoveUpdate ()
 Remove entity from the update list. More...
 

Constructor & Destructor Documentation

◆ Rotating()

tram::Ext::Design::Rotating::Rotating ( const SharedEntityData ,
const ValueArray  
)

Member Function Documentation

◆ Load()

void tram::Ext::Design::Rotating::Load ( )
virtual

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Design::Rotating::MessageHandler ( Message msg)
virtual

Implements tram::Entity.

◆ Register()

static void tram::Ext::Design::Rotating::Register ( )
static

◆ Serialize()

void tram::Ext::Design::Rotating::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Design::Rotating::SetParameters ( )
virtual

Implements tram::Entity.

◆ Unload()

void tram::Ext::Design::Rotating::Unload ( )
virtual

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Design::Rotating::UpdateParameters ( )
virtual

Implements tram::Entity.

Member Data Documentation

◆ collmodel

name_t tram::Ext::Design::Rotating::collmodel
protected

◆ model

name_t tram::Ext::Design::Rotating::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Design::Rotating::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Design::Rotating::rendercomponent
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/design/entities.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_sound_table-members.html ================================================ Tramway SDK: Member List
Tramway SDK
tram::Ext::Design::SoundTable Member List

This is the complete list of members for tram::Ext::Design::SoundTable, including all inherited members.

AddSound(SoundAction type, name_t sound)tram::Ext::Design::SoundTable
Find(name_t name)tram::Ext::Design::SoundTablestatic
GetSound(SoundAction type)tram::Ext::Design::SoundTable
PlaySound(SoundAction type)tram::Ext::Design::SoundTable
PlaySound(SoundAction type, vec3 position, float volume)tram::Ext::Design::SoundTable
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_sound_table.html ================================================ Tramway SDK: tram::Ext::Design::SoundTable Class Reference
Tramway SDK
tram::Ext::Design::SoundTable Class Reference

Maps actions to sounds. More...

#include <soundtable.h>

Public Member Functions

void AddSound (SoundAction type, name_t sound)
 
name_t GetSound (SoundAction type)
 
void PlaySound (SoundAction type)
 
void PlaySound (SoundAction type, vec3 position, float volume)
 

Static Public Member Functions

static SoundTableFind (name_t name)
 

Detailed Description

Maps actions to sounds.

Perfect for storing the aural properties of various materials, or taking the actions that a door or some other container can perform, e.g. opening, closing, trying to open but failing due to being locked, and mappping them to specific sounds.

Member Function Documentation

◆ AddSound()

void tram::Ext::Design::SoundTable::AddSound ( SoundAction  type,
name_t  sound 
)

◆ Find()

SoundTable * tram::Ext::Design::SoundTable::Find ( name_t  name)
static

◆ GetSound()

name_t tram::Ext::Design::SoundTable::GetSound ( SoundAction  type)

◆ PlaySound() [1/2]

void tram::Ext::Design::SoundTable::PlaySound ( SoundAction  type)

◆ PlaySound() [2/2]

void tram::Ext::Design::SoundTable::PlaySound ( SoundAction  type,
vec3  position,
float  volume 
)

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/soundtable.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/soundtable.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_train-members.html ================================================ Tramway SDK: Member List
Tramway SDK
tram::Ext::Design::Train Member List

This is the complete list of members for tram::Ext::Design::Train, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
collmodeltram::Ext::Design::Trainprotected
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()=0tram::Entitypure virtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Ext::Design::Trainvirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Design::Trainvirtual
modeltram::Ext::Design::Trainprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physicscomponenttram::Ext::Design::Trainprotected
Register()tram::Ext::Design::Trainstatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Ext::Design::Trainprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Design::Trainvirtual
SetAutoLoad(bool is)tram::Entityinline
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Design::Trainvirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
Train(const SharedEntityData &, const ValueArray &)tram::Ext::Design::Train
Unload()tram::Ext::Design::Trainvirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateFromList()tram::Entitystatic
UpdateParameters()tram::Ext::Design::Trainvirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_train.html ================================================ Tramway SDK: tram::Ext::Design::Train Class Reference
Tramway SDK

#include <entities.h>

Inheritance diagram for tram::Ext::Design::Train:
tram::Entity

Public Member Functions

 Train (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 
void SetParameters ()
 
void Load ()
 
void Unload ()
 
void Serialize ()
 
void MessageHandler (Message &msg)
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 
bool IsLoaded () const
 
bool IsAutoLoad () const
 
bool IsPersistent () const
 
bool IsChanged () const
 
bool IsDeleted () const
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 
virtual name_t GetType ()=0
 
void CheckTransition ()
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const FieldInfo *fields, size_t fieldcount)
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)
 
static void UpdateFromList ()
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 
static EntityFind (id_t entity_id)
 
static EntityFind (name_t entity_name)
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t collmodel
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 
void Unregister ()
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 

Constructor & Destructor Documentation

◆ Train()

tram::Ext::Design::Train::Train ( const SharedEntityData ,
const ValueArray  
)

Member Function Documentation

◆ Load()

void tram::Ext::Design::Train::Load ( )
virtual

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Design::Train::MessageHandler ( Message msg)
virtual

Implements tram::Entity.

◆ Register()

static void tram::Ext::Design::Train::Register ( )
static

◆ Serialize()

void tram::Ext::Design::Train::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Design::Train::SetParameters ( )
virtual

Implements tram::Entity.

◆ Unload()

void tram::Ext::Design::Train::Unload ( )
virtual

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Design::Train::UpdateParameters ( )
virtual

Implements tram::Entity.

Member Data Documentation

◆ collmodel

name_t tram::Ext::Design::Train::collmodel
protected

◆ model

name_t tram::Ext::Design::Train::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Design::Train::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Design::Train::rendercomponent
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_trigger_autosave-members.html ================================================ Tramway SDK: Member List
Tramway SDK
tram::Ext::Design::TriggerAutosave Member List

This is the complete list of members for tram::Ext::Design::TriggerAutosave, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
collmodeltram::Ext::Design::TriggerAutosaveprotected
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()=0tram::Entitypure virtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Ext::Design::TriggerAutosavevirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Design::TriggerAutosavevirtual
modeltram::Ext::Design::TriggerAutosaveprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physicscomponenttram::Ext::Design::TriggerAutosaveprotected
Register()tram::Ext::Design::TriggerAutosavestatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Ext::Design::TriggerAutosaveprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Design::TriggerAutosavevirtual
SetAutoLoad(bool is)tram::Entityinline
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Design::TriggerAutosavevirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
TriggerAutosave(const SharedEntityData &, const ValueArray &)tram::Ext::Design::TriggerAutosave
Unload()tram::Ext::Design::TriggerAutosavevirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateFromList()tram::Entitystatic
UpdateParameters()tram::Ext::Design::TriggerAutosavevirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_trigger_autosave.html ================================================ Tramway SDK: tram::Ext::Design::TriggerAutosave Class Reference
Tramway SDK
tram::Ext::Design::TriggerAutosave Class Reference

#include <entities.h>

Inheritance diagram for tram::Ext::Design::TriggerAutosave:
tram::Entity

Public Member Functions

 TriggerAutosave (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 
void SetParameters ()
 
void Load ()
 
void Unload ()
 
void Serialize ()
 
void MessageHandler (Message &msg)
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 
bool IsLoaded () const
 
bool IsAutoLoad () const
 
bool IsPersistent () const
 
bool IsChanged () const
 
bool IsDeleted () const
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 
virtual name_t GetType ()=0
 
void CheckTransition ()
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const FieldInfo *fields, size_t fieldcount)
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)
 
static void UpdateFromList ()
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 
static EntityFind (id_t entity_id)
 
static EntityFind (name_t entity_name)
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t collmodel
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 
void Unregister ()
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 

Constructor & Destructor Documentation

◆ TriggerAutosave()

tram::Ext::Design::TriggerAutosave::TriggerAutosave ( const SharedEntityData ,
const ValueArray  
)

Member Function Documentation

◆ Load()

void tram::Ext::Design::TriggerAutosave::Load ( )
virtual

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Design::TriggerAutosave::MessageHandler ( Message msg)
virtual

Implements tram::Entity.

◆ Register()

static void tram::Ext::Design::TriggerAutosave::Register ( )
static

◆ Serialize()

void tram::Ext::Design::TriggerAutosave::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Design::TriggerAutosave::SetParameters ( )
virtual

Implements tram::Entity.

◆ Unload()

void tram::Ext::Design::TriggerAutosave::Unload ( )
virtual

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Design::TriggerAutosave::UpdateParameters ( )
virtual

Implements tram::Entity.

Member Data Documentation

◆ collmodel

name_t tram::Ext::Design::TriggerAutosave::collmodel
protected

◆ model

name_t tram::Ext::Design::TriggerAutosave::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Design::TriggerAutosave::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Design::TriggerAutosave::rendercomponent
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_trigger_hurt-members.html ================================================ Tramway SDK: Member List
Tramway SDK
tram::Ext::Design::TriggerHurt Member List

This is the complete list of members for tram::Ext::Design::TriggerHurt, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
collmodeltram::Ext::Design::TriggerHurtprotected
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()=0tram::Entitypure virtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Ext::Design::TriggerHurtvirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Design::TriggerHurtvirtual
modeltram::Ext::Design::TriggerHurtprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physicscomponenttram::Ext::Design::TriggerHurtprotected
Register()tram::Ext::Design::TriggerHurtstatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Ext::Design::TriggerHurtprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Design::TriggerHurtvirtual
SetAutoLoad(bool is)tram::Entityinline
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Design::TriggerHurtvirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
TriggerHurt(const SharedEntityData &, const ValueArray &)tram::Ext::Design::TriggerHurt
Unload()tram::Ext::Design::TriggerHurtvirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateFromList()tram::Entitystatic
UpdateParameters()tram::Ext::Design::TriggerHurtvirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_trigger_hurt.html ================================================ Tramway SDK: tram::Ext::Design::TriggerHurt Class Reference
Tramway SDK

#include <entities.h>

Inheritance diagram for tram::Ext::Design::TriggerHurt:
tram::Entity

Public Member Functions

 TriggerHurt (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 
void SetParameters ()
 
void Load ()
 
void Unload ()
 
void Serialize ()
 
void MessageHandler (Message &msg)
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 
bool IsLoaded () const
 
bool IsAutoLoad () const
 
bool IsPersistent () const
 
bool IsChanged () const
 
bool IsDeleted () const
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 
virtual name_t GetType ()=0
 
void CheckTransition ()
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const FieldInfo *fields, size_t fieldcount)
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)
 
static void UpdateFromList ()
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 
static EntityFind (id_t entity_id)
 
static EntityFind (name_t entity_name)
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t collmodel
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 
void Unregister ()
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 

Constructor & Destructor Documentation

◆ TriggerHurt()

tram::Ext::Design::TriggerHurt::TriggerHurt ( const SharedEntityData ,
const ValueArray  
)

Member Function Documentation

◆ Load()

void tram::Ext::Design::TriggerHurt::Load ( )
virtual

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Design::TriggerHurt::MessageHandler ( Message msg)
virtual

Implements tram::Entity.

◆ Register()

static void tram::Ext::Design::TriggerHurt::Register ( )
static

◆ Serialize()

void tram::Ext::Design::TriggerHurt::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Design::TriggerHurt::SetParameters ( )
virtual

Implements tram::Entity.

◆ Unload()

void tram::Ext::Design::TriggerHurt::Unload ( )
virtual

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Design::TriggerHurt::UpdateParameters ( )
virtual

Implements tram::Entity.

Member Data Documentation

◆ collmodel

name_t tram::Ext::Design::TriggerHurt::collmodel
protected

◆ model

name_t tram::Ext::Design::TriggerHurt::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Design::TriggerHurt::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Design::TriggerHurt::rendercomponent
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_trigger_multiple-members.html ================================================ Tramway SDK: Member List
Tramway SDK
tram::Ext::Design::TriggerMultiple Member List

This is the complete list of members for tram::Ext::Design::TriggerMultiple, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
collmodeltram::Ext::Design::TriggerMultipleprotected
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()=0tram::Entitypure virtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Ext::Design::TriggerMultiplevirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Design::TriggerMultiplevirtual
modeltram::Ext::Design::TriggerMultipleprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physicscomponenttram::Ext::Design::TriggerMultipleprotected
Register()tram::Ext::Design::TriggerMultiplestatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Ext::Design::TriggerMultipleprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Design::TriggerMultiplevirtual
SetAutoLoad(bool is)tram::Entityinline
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Design::TriggerMultiplevirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
TriggerMultiple(const SharedEntityData &, const ValueArray &)tram::Ext::Design::TriggerMultiple
Unload()tram::Ext::Design::TriggerMultiplevirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateFromList()tram::Entitystatic
UpdateParameters()tram::Ext::Design::TriggerMultiplevirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_trigger_multiple.html ================================================ Tramway SDK: tram::Ext::Design::TriggerMultiple Class Reference
Tramway SDK
tram::Ext::Design::TriggerMultiple Class Reference

#include <entities.h>

Inheritance diagram for tram::Ext::Design::TriggerMultiple:
tram::Entity

Public Member Functions

 TriggerMultiple (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 
void SetParameters ()
 
void Load ()
 
void Unload ()
 
void Serialize ()
 
void MessageHandler (Message &msg)
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 
bool IsLoaded () const
 
bool IsAutoLoad () const
 
bool IsPersistent () const
 
bool IsChanged () const
 
bool IsDeleted () const
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 
virtual name_t GetType ()=0
 
void CheckTransition ()
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const FieldInfo *fields, size_t fieldcount)
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)
 
static void UpdateFromList ()
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 
static EntityFind (id_t entity_id)
 
static EntityFind (name_t entity_name)
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t collmodel
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 
void Unregister ()
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 

Constructor & Destructor Documentation

◆ TriggerMultiple()

tram::Ext::Design::TriggerMultiple::TriggerMultiple ( const SharedEntityData ,
const ValueArray  
)

Member Function Documentation

◆ Load()

void tram::Ext::Design::TriggerMultiple::Load ( )
virtual

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Design::TriggerMultiple::MessageHandler ( Message msg)
virtual

Implements tram::Entity.

◆ Register()

static void tram::Ext::Design::TriggerMultiple::Register ( )
static

◆ Serialize()

void tram::Ext::Design::TriggerMultiple::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Design::TriggerMultiple::SetParameters ( )
virtual

Implements tram::Entity.

◆ Unload()

void tram::Ext::Design::TriggerMultiple::Unload ( )
virtual

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Design::TriggerMultiple::UpdateParameters ( )
virtual

Implements tram::Entity.

Member Data Documentation

◆ collmodel

name_t tram::Ext::Design::TriggerMultiple::collmodel
protected

◆ model

name_t tram::Ext::Design::TriggerMultiple::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Design::TriggerMultiple::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Design::TriggerMultiple::rendercomponent
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_trigger_once-members.html ================================================ Tramway SDK: Member List
Tramway SDK
tram::Ext::Design::TriggerOnce Member List

This is the complete list of members for tram::Ext::Design::TriggerOnce, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
collmodeltram::Ext::Design::TriggerOnceprotected
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()=0tram::Entitypure virtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Ext::Design::TriggerOncevirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Design::TriggerOncevirtual
modeltram::Ext::Design::TriggerOnceprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physicscomponenttram::Ext::Design::TriggerOnceprotected
Register()tram::Ext::Design::TriggerOncestatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Ext::Design::TriggerOnceprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Design::TriggerOncevirtual
SetAutoLoad(bool is)tram::Entityinline
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Design::TriggerOncevirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
TriggerOnce(const SharedEntityData &, const ValueArray &)tram::Ext::Design::TriggerOnce
Unload()tram::Ext::Design::TriggerOncevirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateFromList()tram::Entitystatic
UpdateParameters()tram::Ext::Design::TriggerOncevirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_trigger_once.html ================================================ Tramway SDK: tram::Ext::Design::TriggerOnce Class Reference
Tramway SDK

#include <entities.h>

Inheritance diagram for tram::Ext::Design::TriggerOnce:
tram::Entity

Public Member Functions

 TriggerOnce (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 
void SetParameters ()
 
void Load ()
 
void Unload ()
 
void Serialize ()
 
void MessageHandler (Message &msg)
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 
bool IsLoaded () const
 
bool IsAutoLoad () const
 
bool IsPersistent () const
 
bool IsChanged () const
 
bool IsDeleted () const
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 
virtual name_t GetType ()=0
 
void CheckTransition ()
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const FieldInfo *fields, size_t fieldcount)
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)
 
static void UpdateFromList ()
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 
static EntityFind (id_t entity_id)
 
static EntityFind (name_t entity_name)
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t collmodel
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 
void Unregister ()
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 

Constructor & Destructor Documentation

◆ TriggerOnce()

tram::Ext::Design::TriggerOnce::TriggerOnce ( const SharedEntityData ,
const ValueArray  
)

Member Function Documentation

◆ Load()

void tram::Ext::Design::TriggerOnce::Load ( )
virtual

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Design::TriggerOnce::MessageHandler ( Message msg)
virtual

Implements tram::Entity.

◆ Register()

static void tram::Ext::Design::TriggerOnce::Register ( )
static

◆ Serialize()

void tram::Ext::Design::TriggerOnce::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Design::TriggerOnce::SetParameters ( )
virtual

Implements tram::Entity.

◆ Unload()

void tram::Ext::Design::TriggerOnce::Unload ( )
virtual

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Design::TriggerOnce::UpdateParameters ( )
virtual

Implements tram::Entity.

Member Data Documentation

◆ collmodel

name_t tram::Ext::Design::TriggerOnce::collmodel
protected

◆ model

name_t tram::Ext::Design::TriggerOnce::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Design::TriggerOnce::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Design::TriggerOnce::rendercomponent
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_trigger_player_movement-members.html ================================================ Tramway SDK: Member List
Tramway SDK
tram::Ext::Design::TriggerPlayerMovement Member List

This is the complete list of members for tram::Ext::Design::TriggerPlayerMovement, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
collmodeltram::Ext::Design::TriggerPlayerMovementprotected
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()=0tram::Entitypure virtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Ext::Design::TriggerPlayerMovementvirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Design::TriggerPlayerMovementvirtual
modeltram::Ext::Design::TriggerPlayerMovementprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physicscomponenttram::Ext::Design::TriggerPlayerMovementprotected
Register()tram::Ext::Design::TriggerPlayerMovementstatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Ext::Design::TriggerPlayerMovementprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Design::TriggerPlayerMovementvirtual
SetAutoLoad(bool is)tram::Entityinline
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Design::TriggerPlayerMovementvirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
TriggerPlayerMovement(const SharedEntityData &, const ValueArray &)tram::Ext::Design::TriggerPlayerMovement
Unload()tram::Ext::Design::TriggerPlayerMovementvirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateFromList()tram::Entitystatic
UpdateParameters()tram::Ext::Design::TriggerPlayerMovementvirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_trigger_player_movement.html ================================================ Tramway SDK: tram::Ext::Design::TriggerPlayerMovement Class Reference
Tramway SDK
tram::Ext::Design::TriggerPlayerMovement Class Reference

#include <entities.h>

Inheritance diagram for tram::Ext::Design::TriggerPlayerMovement:
tram::Entity

Public Member Functions

 TriggerPlayerMovement (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 
void SetParameters ()
 
void Load ()
 
void Unload ()
 
void Serialize ()
 
void MessageHandler (Message &msg)
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 
bool IsLoaded () const
 
bool IsAutoLoad () const
 
bool IsPersistent () const
 
bool IsChanged () const
 
bool IsDeleted () const
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 
virtual name_t GetType ()=0
 
void CheckTransition ()
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const FieldInfo *fields, size_t fieldcount)
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)
 
static void UpdateFromList ()
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 
static EntityFind (id_t entity_id)
 
static EntityFind (name_t entity_name)
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t collmodel
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 
void Unregister ()
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 

Constructor & Destructor Documentation

◆ TriggerPlayerMovement()

tram::Ext::Design::TriggerPlayerMovement::TriggerPlayerMovement ( const SharedEntityData ,
const ValueArray  
)

Member Function Documentation

◆ Load()

void tram::Ext::Design::TriggerPlayerMovement::Load ( )
virtual

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Design::TriggerPlayerMovement::MessageHandler ( Message msg)
virtual

Implements tram::Entity.

◆ Register()

static void tram::Ext::Design::TriggerPlayerMovement::Register ( )
static

◆ Serialize()

void tram::Ext::Design::TriggerPlayerMovement::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Design::TriggerPlayerMovement::SetParameters ( )
virtual

Implements tram::Entity.

◆ Unload()

void tram::Ext::Design::TriggerPlayerMovement::Unload ( )
virtual

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Design::TriggerPlayerMovement::UpdateParameters ( )
virtual

Implements tram::Entity.

Member Data Documentation

◆ collmodel

name_t tram::Ext::Design::TriggerPlayerMovement::collmodel
protected

◆ model

name_t tram::Ext::Design::TriggerPlayerMovement::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Design::TriggerPlayerMovement::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Design::TriggerPlayerMovement::rendercomponent
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_trigger_push-members.html ================================================ Tramway SDK: Member List
Tramway SDK
tram::Ext::Design::TriggerPush Member List

This is the complete list of members for tram::Ext::Design::TriggerPush, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
collmodeltram::Ext::Design::TriggerPushprotected
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()=0tram::Entitypure virtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Ext::Design::TriggerPushvirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Design::TriggerPushvirtual
modeltram::Ext::Design::TriggerPushprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physicscomponenttram::Ext::Design::TriggerPushprotected
Register()tram::Ext::Design::TriggerPushstatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Ext::Design::TriggerPushprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Design::TriggerPushvirtual
SetAutoLoad(bool is)tram::Entityinline
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Design::TriggerPushvirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
TriggerPush(const SharedEntityData &, const ValueArray &)tram::Ext::Design::TriggerPush
Unload()tram::Ext::Design::TriggerPushvirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateFromList()tram::Entitystatic
UpdateParameters()tram::Ext::Design::TriggerPushvirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_trigger_push.html ================================================ Tramway SDK: tram::Ext::Design::TriggerPush Class Reference
Tramway SDK

#include <entities.h>

Inheritance diagram for tram::Ext::Design::TriggerPush:
tram::Entity

Public Member Functions

 TriggerPush (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 
void SetParameters ()
 
void Load ()
 
void Unload ()
 
void Serialize ()
 
void MessageHandler (Message &msg)
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 
bool IsLoaded () const
 
bool IsAutoLoad () const
 
bool IsPersistent () const
 
bool IsChanged () const
 
bool IsDeleted () const
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 
virtual name_t GetType ()=0
 
void CheckTransition ()
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const FieldInfo *fields, size_t fieldcount)
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)
 
static void UpdateFromList ()
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 
static EntityFind (id_t entity_id)
 
static EntityFind (name_t entity_name)
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t collmodel
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 
void Unregister ()
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 

Constructor & Destructor Documentation

◆ TriggerPush()

tram::Ext::Design::TriggerPush::TriggerPush ( const SharedEntityData ,
const ValueArray  
)

Member Function Documentation

◆ Load()

void tram::Ext::Design::TriggerPush::Load ( )
virtual

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Design::TriggerPush::MessageHandler ( Message msg)
virtual

Implements tram::Entity.

◆ Register()

static void tram::Ext::Design::TriggerPush::Register ( )
static

◆ Serialize()

void tram::Ext::Design::TriggerPush::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Design::TriggerPush::SetParameters ( )
virtual

Implements tram::Entity.

◆ Unload()

void tram::Ext::Design::TriggerPush::Unload ( )
virtual

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Design::TriggerPush::UpdateParameters ( )
virtual

Implements tram::Entity.

Member Data Documentation

◆ collmodel

name_t tram::Ext::Design::TriggerPush::collmodel
protected

◆ model

name_t tram::Ext::Design::TriggerPush::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Design::TriggerPush::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Design::TriggerPush::rendercomponent
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_trigger_remove-members.html ================================================ Tramway SDK: Member List
Tramway SDK
tram::Ext::Design::TriggerRemove Member List

This is the complete list of members for tram::Ext::Design::TriggerRemove, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
collmodeltram::Ext::Design::TriggerRemoveprotected
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()=0tram::Entitypure virtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Ext::Design::TriggerRemovevirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Design::TriggerRemovevirtual
modeltram::Ext::Design::TriggerRemoveprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physicscomponenttram::Ext::Design::TriggerRemoveprotected
Register()tram::Ext::Design::TriggerRemovestatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Ext::Design::TriggerRemoveprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Design::TriggerRemovevirtual
SetAutoLoad(bool is)tram::Entityinline
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Design::TriggerRemovevirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
TriggerRemove(const SharedEntityData &, const ValueArray &)tram::Ext::Design::TriggerRemove
Unload()tram::Ext::Design::TriggerRemovevirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateFromList()tram::Entitystatic
UpdateParameters()tram::Ext::Design::TriggerRemovevirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_trigger_remove.html ================================================ Tramway SDK: tram::Ext::Design::TriggerRemove Class Reference
Tramway SDK

#include <entities.h>

Inheritance diagram for tram::Ext::Design::TriggerRemove:
tram::Entity

Public Member Functions

 TriggerRemove (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 
void SetParameters ()
 
void Load ()
 
void Unload ()
 
void Serialize ()
 
void MessageHandler (Message &msg)
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 
bool IsLoaded () const
 
bool IsAutoLoad () const
 
bool IsPersistent () const
 
bool IsChanged () const
 
bool IsDeleted () const
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 
virtual name_t GetType ()=0
 
void CheckTransition ()
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const FieldInfo *fields, size_t fieldcount)
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)
 
static void UpdateFromList ()
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 
static EntityFind (id_t entity_id)
 
static EntityFind (name_t entity_name)
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t collmodel
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 
void Unregister ()
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 

Constructor & Destructor Documentation

◆ TriggerRemove()

tram::Ext::Design::TriggerRemove::TriggerRemove ( const SharedEntityData ,
const ValueArray  
)

Member Function Documentation

◆ Load()

void tram::Ext::Design::TriggerRemove::Load ( )
virtual

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Design::TriggerRemove::MessageHandler ( Message msg)
virtual

Implements tram::Entity.

◆ Register()

static void tram::Ext::Design::TriggerRemove::Register ( )
static

◆ Serialize()

void tram::Ext::Design::TriggerRemove::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Design::TriggerRemove::SetParameters ( )
virtual

Implements tram::Entity.

◆ Unload()

void tram::Ext::Design::TriggerRemove::Unload ( )
virtual

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Design::TriggerRemove::UpdateParameters ( )
virtual

Implements tram::Entity.

Member Data Documentation

◆ collmodel

name_t tram::Ext::Design::TriggerRemove::collmodel
protected

◆ model

name_t tram::Ext::Design::TriggerRemove::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Design::TriggerRemove::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Design::TriggerRemove::rendercomponent
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_trigger_teleport-members.html ================================================ Tramway SDK: Member List
Tramway SDK
tram::Ext::Design::TriggerTeleport Member List

This is the complete list of members for tram::Ext::Design::TriggerTeleport, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
collmodeltram::Ext::Design::TriggerTeleportprotected
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()=0tram::Entitypure virtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Ext::Design::TriggerTeleportvirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Design::TriggerTeleportvirtual
modeltram::Ext::Design::TriggerTeleportprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physicscomponenttram::Ext::Design::TriggerTeleportprotected
Register()tram::Ext::Design::TriggerTeleportstatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Ext::Design::TriggerTeleportprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Design::TriggerTeleportvirtual
SetAutoLoad(bool is)tram::Entityinline
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Design::TriggerTeleportvirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
TriggerTeleport(const SharedEntityData &, const ValueArray &)tram::Ext::Design::TriggerTeleport
Unload()tram::Ext::Design::TriggerTeleportvirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateFromList()tram::Entitystatic
UpdateParameters()tram::Ext::Design::TriggerTeleportvirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_trigger_teleport.html ================================================ Tramway SDK: tram::Ext::Design::TriggerTeleport Class Reference
Tramway SDK
tram::Ext::Design::TriggerTeleport Class Reference

#include <entities.h>

Inheritance diagram for tram::Ext::Design::TriggerTeleport:
tram::Entity

Public Member Functions

 TriggerTeleport (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 
void SetParameters ()
 
void Load ()
 
void Unload ()
 
void Serialize ()
 
void MessageHandler (Message &msg)
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 
bool IsLoaded () const
 
bool IsAutoLoad () const
 
bool IsPersistent () const
 
bool IsChanged () const
 
bool IsDeleted () const
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 
virtual name_t GetType ()=0
 
void CheckTransition ()
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const FieldInfo *fields, size_t fieldcount)
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)
 
static void UpdateFromList ()
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 
static EntityFind (id_t entity_id)
 
static EntityFind (name_t entity_name)
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t collmodel
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 
void Unregister ()
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 

Constructor & Destructor Documentation

◆ TriggerTeleport()

tram::Ext::Design::TriggerTeleport::TriggerTeleport ( const SharedEntityData ,
const ValueArray  
)

Member Function Documentation

◆ Load()

void tram::Ext::Design::TriggerTeleport::Load ( )
virtual

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Design::TriggerTeleport::MessageHandler ( Message msg)
virtual

Implements tram::Entity.

◆ Register()

static void tram::Ext::Design::TriggerTeleport::Register ( )
static

◆ Serialize()

void tram::Ext::Design::TriggerTeleport::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Design::TriggerTeleport::SetParameters ( )
virtual

Implements tram::Entity.

◆ Unload()

void tram::Ext::Design::TriggerTeleport::Unload ( )
virtual

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Design::TriggerTeleport::UpdateParameters ( )
virtual

Implements tram::Entity.

Member Data Documentation

◆ collmodel

name_t tram::Ext::Design::TriggerTeleport::collmodel
protected

◆ model

name_t tram::Ext::Design::TriggerTeleport::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Design::TriggerTeleport::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Design::TriggerTeleport::rendercomponent
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_water-members.html ================================================ Tramway SDK: Member List
Tramway SDK
tram::Ext::Design::Water Member List

This is the complete list of members for tram::Ext::Design::Water, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
collmodeltram::Ext::Design::Waterprotected
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()=0tram::Entitypure virtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Ext::Design::Watervirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Design::Watervirtual
modeltram::Ext::Design::Waterprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physicscomponenttram::Ext::Design::Waterprotected
Register()tram::Ext::Design::Waterstatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Ext::Design::Waterprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Design::Watervirtual
SetAutoLoad(bool is)tram::Entityinline
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Design::Watervirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
Unload()tram::Ext::Design::Watervirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateFromList()tram::Entitystatic
UpdateParameters()tram::Ext::Design::Watervirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Water(const SharedEntityData &, const ValueArray &)tram::Ext::Design::Water
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_design_1_1_water.html ================================================ Tramway SDK: tram::Ext::Design::Water Class Reference
Tramway SDK

#include <entities.h>

Inheritance diagram for tram::Ext::Design::Water:
tram::Entity

Public Member Functions

 Water (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 
void SetParameters ()
 
void Load ()
 
void Unload ()
 
void Serialize ()
 
void MessageHandler (Message &msg)
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 
bool IsLoaded () const
 
bool IsAutoLoad () const
 
bool IsPersistent () const
 
bool IsChanged () const
 
bool IsDeleted () const
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 
virtual name_t GetType ()=0
 
void CheckTransition ()
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), const FieldInfo *fields, size_t fieldcount)
 
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *), std::initializer_list< FieldInfo > fields)
 
static void UpdateFromList ()
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 
static EntityFind (id_t entity_id)
 
static EntityFind (name_t entity_name)
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t collmodel
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 
void Unregister ()
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 

Constructor & Destructor Documentation

◆ Water()

tram::Ext::Design::Water::Water ( const SharedEntityData ,
const ValueArray  
)

Member Function Documentation

◆ Load()

void tram::Ext::Design::Water::Load ( )
virtual

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Design::Water::MessageHandler ( Message msg)
virtual

Implements tram::Entity.

◆ Register()

static void tram::Ext::Design::Water::Register ( )
static

◆ Serialize()

void tram::Ext::Design::Water::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Design::Water::SetParameters ( )
virtual

Implements tram::Entity.

◆ Unload()

void tram::Ext::Design::Water::Unload ( )
virtual

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Design::Water::UpdateParameters ( )
virtual

Implements tram::Entity.

Member Data Documentation

◆ collmodel

name_t tram::Ext::Design::Water::collmodel
protected

◆ model

name_t tram::Ext::Design::Water::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Design::Water::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Design::Water::rendercomponent
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::AIAgent Member List
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html ================================================ Tramway SDK: tram::Ext::Kitchensink::AIAgent Class Reference
Tramway SDK v0.1.1

#include <ai.h>

Public Member Functions

void Push (AIPackage *)
 
void Clear ()
 
void PushOverride (AIPackage *)
 
void ClearOverride ()
 
void Update ()
 
void SetControllerComponent (ControllerComponent *c)
 
void SetAnimationStateComponent (AnimationStateComponent *c)
 
ControllerComponentGetControllerComponent ()
 
AnimationStateComponentGetAnimationStateComponent ()
 

Static Public Member Functions

static AIAgentFind (id_t id)
 

Public Attributes

std::vector< AIPackage * > package_stack
 
std::vector< AIPackage * > override_stack
 
name_t script
 
std::vector< AIVariablevariables
 

Member Function Documentation

◆ Clear()

void tram::Ext::Kitchensink::AIAgent::Clear ( )

◆ ClearOverride()

void tram::Ext::Kitchensink::AIAgent::ClearOverride ( )

◆ Find()

AIAgent * tram::Ext::Kitchensink::AIAgent::Find ( id_t  id)
static

◆ GetAnimationStateComponent()

AnimationStateComponent * tram::Ext::Kitchensink::AIAgent::GetAnimationStateComponent ( )
inline

◆ GetControllerComponent()

ControllerComponent * tram::Ext::Kitchensink::AIAgent::GetControllerComponent ( )
inline

◆ Push()

void tram::Ext::Kitchensink::AIAgent::Push ( AIPackage )

◆ PushOverride()

void tram::Ext::Kitchensink::AIAgent::PushOverride ( AIPackage )

◆ SetAnimationStateComponent()

void tram::Ext::Kitchensink::AIAgent::SetAnimationStateComponent ( AnimationStateComponent c)
inline

◆ SetControllerComponent()

void tram::Ext::Kitchensink::AIAgent::SetControllerComponent ( ControllerComponent c)
inline

◆ Update()

void tram::Ext::Kitchensink::AIAgent::Update ( )

Member Data Documentation

◆ override_stack

std::vector<AIPackage*> tram::Ext::Kitchensink::AIAgent::override_stack

◆ package_stack

std::vector<AIPackage*> tram::Ext::Kitchensink::AIAgent::package_stack

◆ script

name_t tram::Ext::Kitchensink::AIAgent::script

◆ variables

std::vector<AIVariable> tram::Ext::Kitchensink::AIAgent::variables

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/ai.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/ai.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_a_i_package-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::AIPackage Member List

This is the complete list of members for tram::Ext::Kitchensink::AIPackage, including all inherited members.

Make(name_t name, valuearray_t params)tram::Ext::Kitchensink::AIPackagestatic
parenttram::Ext::Kitchensink::AIPackageprotected
Process()=0tram::Ext::Kitchensink::AIPackagepure virtual
Register(name_t name, ai_package_constr constr)tram::Ext::Kitchensink::AIPackagestatic
~AIPackage()=defaulttram::Ext::Kitchensink::AIPackagevirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_a_i_package.html ================================================ Tramway SDK: tram::Ext::Kitchensink::AIPackage Class Reference
Tramway SDK v0.1.1
tram::Ext::Kitchensink::AIPackage Class Referenceabstract

#include <ai.h>

Public Member Functions

virtual bool Process ()=0
 
virtual ~AIPackage ()=default
 

Static Public Member Functions

static void Register (name_t name, ai_package_constr constr)
 
static AIPackageMake (name_t name, valuearray_t params)
 

Protected Attributes

AIAgentparent = nullptr
 

Constructor & Destructor Documentation

◆ ~AIPackage()

virtual tram::Ext::Kitchensink::AIPackage::~AIPackage ( )
virtualdefault

Member Function Documentation

◆ Make()

AIPackage * tram::Ext::Kitchensink::AIPackage::Make ( name_t  name,
valuearray_t  params 
)
static

◆ Process()

virtual bool tram::Ext::Kitchensink::AIPackage::Process ( )
pure virtual

◆ Register()

void tram::Ext::Kitchensink::AIPackage::Register ( name_t  name,
ai_package_constr  constr 
)
static

Member Data Documentation

◆ parent

AIAgent* tram::Ext::Kitchensink::AIPackage::parent = nullptr
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/ai.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/ai.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_animation_state_component-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::AnimationStateComponent Member List
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_animation_state_component.html ================================================ Tramway SDK: tram::Ext::Kitchensink::AnimationStateComponent Class Reference
Tramway SDK v0.1.1
tram::Ext::Kitchensink::AnimationStateComponent Class Reference

#include <animationtable.h>

Inheritance diagram for tram::Ext::Kitchensink::AnimationStateComponent:
tram::EntityComponent

Public Member Functions

void EventHandler (Event &event)
 
void Start ()
 
void SwitchState (name_t state)
 
void SetAnimationTable (name_t name)
 
void SetAnimationComponent (AnimationComponent *component)
 
AnimationComponentGetAnimationComponent ()
 
- Public Member Functions inherited from tram::EntityComponent
 EntityComponent ()=default
 
virtual ~EntityComponent ()=default
 
virtual void Init ()
 Initializes an entity component. More...
 
bool IsReady ()
 Returns the component's readiness. More...
 
bool IsInit ()
 Returns the component's init status. More...
 
EntityGetParent ()
 
void SetParent (Entity *parent)
 

Protected Attributes

AnimationTabletable = nullptr
 
AnimationComponentcomponent = nullptr
 
std::vector< name_tstates
 
- Protected Attributes inherited from tram::EntityComponent
size_t resources_waiting = 0
 
bool is_ready = false
 
bool is_init = false
 
Entityparent = nullptr
 

Friends

class AnimationTable
 

Additional Inherited Members

- Protected Member Functions inherited from tram::EntityComponent
void ResourceReady ()
 Notifies the component of a streamed-in resource. More...
 

Member Function Documentation

◆ EventHandler()

void tram::Ext::Kitchensink::AnimationStateComponent::EventHandler ( Event event)
inlinevirtual

Implements tram::EntityComponent.

◆ GetAnimationComponent()

AnimationComponent * tram::Ext::Kitchensink::AnimationStateComponent::GetAnimationComponent ( )
inline

◆ SetAnimationComponent()

void tram::Ext::Kitchensink::AnimationStateComponent::SetAnimationComponent ( AnimationComponent component)
inline

◆ SetAnimationTable()

void tram::Ext::Kitchensink::AnimationStateComponent::SetAnimationTable ( name_t  name)
inline

◆ Start()

void tram::Ext::Kitchensink::AnimationStateComponent::Start ( )
virtual

Implements tram::EntityComponent.

◆ SwitchState()

void tram::Ext::Kitchensink::AnimationStateComponent::SwitchState ( name_t  state)
inline

Friends And Related Function Documentation

◆ AnimationTable

friend class AnimationTable
friend

Member Data Documentation

◆ component

AnimationComponent* tram::Ext::Kitchensink::AnimationStateComponent::component = nullptr
protected

◆ states

std::vector<name_t> tram::Ext::Kitchensink::AnimationStateComponent::states
protected

◆ table

AnimationTable* tram::Ext::Kitchensink::AnimationStateComponent::table = nullptr
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/animationtable.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_animation_table-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::AnimationTable Member List

This is the complete list of members for tram::Ext::Kitchensink::AnimationTable, including all inherited members.

AddState(name_t state, name_t space)tram::Ext::Kitchensink::AnimationTable
AddStateSpace(name_t name, name_t parent)tram::Ext::Kitchensink::AnimationTable
AddTransition(AnimStateTransitionFrom)tram::Ext::Kitchensink::AnimationTable
AddTransition(AnimStateTransitionInto)tram::Ext::Kitchensink::AnimationTable
AddTransition(AnimStateTransitionDefault)tram::Ext::Kitchensink::AnimationTable
AnimationTable(name_t name)tram::Ext::Kitchensink::AnimationTableinline
Find(name_t name)tram::Ext::Kitchensink::AnimationTablestatic
SetStateAnimation(name_t state, name_t animation_name, uint32_t repeats, float weight, float speed, bool pause_last)tram::Ext::Kitchensink::AnimationTable
SetStateNextState(name_t state, name_t next_state)tram::Ext::Kitchensink::AnimationTable
SwitchState(name_t state, AnimationStateComponent *state_component)tram::Ext::Kitchensink::AnimationTable
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_animation_table.html ================================================ Tramway SDK: tram::Ext::Kitchensink::AnimationTable Class Reference
Tramway SDK v0.1.1
tram::Ext::Kitchensink::AnimationTable Class Reference

#include <animationtable.h>

Public Member Functions

 AnimationTable (name_t name)
 
void SwitchState (name_t state, AnimationStateComponent *state_component)
 
void AddStateSpace (name_t name, name_t parent)
 
void AddState (name_t state, name_t space)
 
void SetStateAnimation (name_t state, name_t animation_name, uint32_t repeats, float weight, float speed, bool pause_last)
 
void SetStateNextState (name_t state, name_t next_state)
 
void AddTransition (AnimStateTransitionFrom)
 
void AddTransition (AnimStateTransitionInto)
 
void AddTransition (AnimStateTransitionDefault)
 

Static Public Member Functions

static AnimationTableFind (name_t name)
 

Constructor & Destructor Documentation

◆ AnimationTable()

tram::Ext::Kitchensink::AnimationTable::AnimationTable ( name_t  name)
inline

Member Function Documentation

◆ AddState()

void tram::Ext::Kitchensink::AnimationTable::AddState ( name_t  state,
name_t  space 
)

◆ AddStateSpace()

void tram::Ext::Kitchensink::AnimationTable::AddStateSpace ( name_t  name,
name_t  parent 
)

◆ AddTransition() [1/3]

void tram::Ext::Kitchensink::AnimationTable::AddTransition ( AnimStateTransitionDefault  transition)

◆ AddTransition() [2/3]

void tram::Ext::Kitchensink::AnimationTable::AddTransition ( AnimStateTransitionFrom  transition)

◆ AddTransition() [3/3]

void tram::Ext::Kitchensink::AnimationTable::AddTransition ( AnimStateTransitionInto  transition)

◆ Find()

AnimationTable * tram::Ext::Kitchensink::AnimationTable::Find ( name_t  name)
static

◆ SetStateAnimation()

void tram::Ext::Kitchensink::AnimationTable::SetStateAnimation ( name_t  state,
name_t  animation_name,
uint32_t  repeats,
float  weight,
float  speed,
bool  pause_last 
)

◆ SetStateNextState()

void tram::Ext::Kitchensink::AnimationTable::SetStateNextState ( name_t  state,
name_t  next_state 
)

◆ SwitchState()

void tram::Ext::Kitchensink::AnimationTable::SwitchState ( name_t  state,
AnimationStateComponent state_component 
)

The documentation for this class was generated from the following files:
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_attribute_info-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::AttributeInfo Member List

This is the complete list of members for tram::Ext::Kitchensink::AttributeInfo, including all inherited members.

Find(name_t)tram::Ext::Kitchensink::AttributeInfostatic
GetName()tram::Ext::Kitchensink::AttributeInfoinline
nametram::Ext::Kitchensink::AttributeInfoprotected
Recalculate(Attribute &, const AttributeContainer &)tram::Ext::Kitchensink::AttributeInfovirtual
Register(AttributeInfo *)tram::Ext::Kitchensink::AttributeInfostatic
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_attribute_info.html ================================================ Tramway SDK: tram::Ext::Kitchensink::AttributeInfo Class Reference
Tramway SDK v0.1.1
tram::Ext::Kitchensink::AttributeInfo Class Reference

#include <attributes.h>

Public Member Functions

virtual void Recalculate (Attribute &, const AttributeContainer &)
 
name_t GetName ()
 

Static Public Member Functions

static void Register (AttributeInfo *)
 
static AttributeInfoFind (name_t)
 

Protected Attributes

name_t name
 

Member Function Documentation

◆ Find()

AttributeInfo * tram::Ext::Kitchensink::AttributeInfo::Find ( name_t  name)
static

◆ GetName()

name_t tram::Ext::Kitchensink::AttributeInfo::GetName ( )
inline

◆ Recalculate()

void tram::Ext::Kitchensink::AttributeInfo::Recalculate ( Attribute attribute,
const AttributeContainer  
)
virtual

◆ Register()

void tram::Ext::Kitchensink::AttributeInfo::Register ( AttributeInfo info)
static

Member Data Documentation

◆ name

name_t tram::Ext::Kitchensink::AttributeInfo::name
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/attributes.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/attributes.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_breakable-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::Breakable Member List

This is the complete list of members for tram::Ext::Kitchensink::Breakable, including all inherited members.

Breakable(const SharedEntityData &, const ValueArray &)tram::Ext::Kitchensink::Breakable
celltram::Entityprotected
CheckTransition()tram::Entity
collmodeltram::Ext::Kitchensink::Breakableprotected
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()=0tram::Entitypure virtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Ext::Kitchensink::Breakablevirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Kitchensink::Breakablevirtual
modeltram::Ext::Kitchensink::Breakableprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physicscomponenttram::Ext::Kitchensink::Breakableprotected
Register()tram::Ext::Kitchensink::Breakablestatic
RegisterType(name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Ext::Kitchensink::Breakableprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Kitchensink::Breakablevirtual
SetAutoLoad(bool is)tram::Entityinline
SetFlag(uint32_t flag, bool value)tram::Entityinlineprotected
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Kitchensink::Breakablevirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
Unload()tram::Ext::Kitchensink::Breakablevirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateParameters()tram::Ext::Kitchensink::Breakablevirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_breakable.html ================================================ Tramway SDK: tram::Ext::Kitchensink::Breakable Class Reference
Tramway SDK v0.1.1

#include <entities.h>

Inheritance diagram for tram::Ext::Kitchensink::Breakable:
tram::Entity

Public Member Functions

 Breakable (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 Called when Entity::UpdateTransform is called. More...
 
void SetParameters ()
 Called when either Entity::SetLocation or Entity::SetRotation is called. More...
 
void Load ()
 Loads an entity. More...
 
void Unload ()
 Unloads an entity. More...
 
void Serialize ()
 
void MessageHandler (Message &msg)
 Allows entities to receive messages. More...
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 Destructs the entity. More...
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 Returns the entity's parent cell. More...
 
bool IsLoaded () const
 Returns the entity load status. More...
 
bool IsAutoLoad () const
 Returns the auto load flag status. More...
 
bool IsPersistent () const
 Returns the persistence status of an entity. More...
 
bool IsChanged () const
 
bool IsDeleted () const
 Returns the entity deletion status. More...
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 Purges the entity. More...
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 Allows entities to receive events. More...
 
virtual name_t GetType ()=0
 Returns the type of the entity. More...
 
void CheckTransition ()
 Check whether an entity has entered a different cell. More...
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 Updates entities. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)
 Registers a new entity type. More...
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 Creates an entity. More...
 
static EntityFind (id_t entity_id)
 Finds the entity by its ID number. More...
 
static EntityFind (name_t entity_name)
 Finds the entity by its name. More...
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t collmodel
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 Registers the entity. More...
 
void Unregister ()
 Unregisters the entity. More...
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 
void SetFlag (uint32_t flag, bool value)
 

Constructor & Destructor Documentation

◆ Breakable()

tram::Ext::Kitchensink::Breakable::Breakable ( const SharedEntityData ,
const ValueArray  
)

Member Function Documentation

◆ Load()

void tram::Ext::Kitchensink::Breakable::Load ( )
virtual

Loads an entity.

Usually the Load() method for an entity type will set up its components, event listeners, etc. After being loaded, the entity will be ready for simulation.

When implementing this method, make sure to flag the entity with the LOADED flag, so that world streaming system doesn't try to load your entity twice.

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Kitchensink::Breakable::MessageHandler ( Message msg)
virtual

Allows entities to receive messages.

Whenever an entity is sent a Message, once the Message::Dispatch() function has been called, the entity will gets the message passed to it through this method.

Implements tram::Entity.

◆ Register()

static void tram::Ext::Kitchensink::Breakable::Register ( )
static

◆ Serialize()

void tram::Ext::Kitchensink::Breakable::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Kitchensink::Breakable::SetParameters ( )
virtual

Called when either Entity::SetLocation or Entity::SetRotation is called.

Usually this method is used to relocate or rerotate an entity.

If the entity has a PhysicsComponent, its position or rotation is usually set from this method, otherwise in the next Physics update step, the entity's previous rotation and location will be restored.

Implements tram::Entity.

◆ Unload()

void tram::Ext::Kitchensink::Breakable::Unload ( )
virtual

Unloads an entity.

Usually the Load() method for an entity type will destroy its its components, event listeners, etc. After being unloaded, the entity have been removed from the simulation.

When implementing this method, make sure to clear your entity's LOADED flag, so that world streaming system can load the entity again.

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Kitchensink::Breakable::UpdateParameters ( )
virtual

Called when Entity::UpdateTransform is called.

From the runtime's side, only the Physics system will call the Entity::UpdateTransform() method, and through it, this method.

Usually this method is used to forward the entity's new position and rotation to its RenderComponent, if it has one.

If the entity has a PhysicsComponent, its position or rotation is never updated from this method.

Implements tram::Entity.

Member Data Documentation

◆ collmodel

name_t tram::Ext::Kitchensink::Breakable::collmodel
protected

◆ model

name_t tram::Ext::Kitchensink::Breakable::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Kitchensink::Breakable::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Kitchensink::Breakable::rendercomponent
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_button-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::Button Member List

This is the complete list of members for tram::Ext::Kitchensink::Button, including all inherited members.

Button(const SharedEntityData &, const ValueArray &)tram::Ext::Kitchensink::Button
celltram::Entityprotected
CheckTransition()tram::Entity
DELETED enum valuetram::Entityprotected
directiontram::Ext::Kitchensink::Buttonprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
distancetram::Ext::Kitchensink::Buttonprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Ext::Kitchensink::Buttonvirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Ext::Kitchensink::Buttonprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()tram::Ext::Kitchensink::Buttonvirtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
last_activatetram::Ext::Kitchensink::Buttonprotected
lightmaptram::Ext::Kitchensink::Buttonprotected
Load()tram::Ext::Kitchensink::Buttonvirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Kitchensink::Buttonvirtual
modeltram::Ext::Kitchensink::Buttonprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
origintram::Ext::Kitchensink::Buttonprotected
parenttram::Ext::Kitchensink::Buttonprotected
pausetram::Ext::Kitchensink::Buttonprotected
physicscomponenttram::Ext::Kitchensink::Buttonprotected
progresstram::Ext::Kitchensink::Buttonprotected
Register()tram::Ext::Kitchensink::Buttonstatic
RegisterType(name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Ext::Kitchensink::Buttonprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Kitchensink::Buttonvirtual
SetAutoLoad(bool is)tram::Entityinline
SetFlag(uint32_t flag, bool value)tram::Entityinlineprotected
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Kitchensink::Buttonvirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
soundtram::Ext::Kitchensink::Buttonprotected
speedtram::Ext::Kitchensink::Buttonprotected
start_postram::Ext::Kitchensink::Buttonprotected
start_rottram::Ext::Kitchensink::Buttonprotected
statetram::Ext::Kitchensink::Buttonprotected
SwitchState(int)tram::Ext::Kitchensink::Buttonprotected
ticktram::Ext::Kitchensink::Buttonprotected
timertram::Ext::Kitchensink::Buttonprotected
Unload()tram::Ext::Kitchensink::Buttonvirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateParameters()tram::Ext::Kitchensink::Buttonvirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_button.html ================================================ Tramway SDK: tram::Ext::Kitchensink::Button Class Reference
Tramway SDK v0.1.1

Essentially a func_door. More...

#include <extensions/kitchensink/entities.h>

Inheritance diagram for tram::Ext::Kitchensink::Button:
tram::Entity

Public Member Functions

 Button (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 Called when Entity::UpdateTransform is called. More...
 
void SetParameters ()
 Called when either Entity::SetLocation or Entity::SetRotation is called. More...
 
void Load ()
 Loads an entity. More...
 
void Unload ()
 Unloads an entity. More...
 
void Serialize ()
 
void EventHandler (Event &event)
 Allows entities to receive events. More...
 
void MessageHandler (Message &msg)
 Allows entities to receive messages. More...
 
name_t GetType ()
 Returns the type of the entity. More...
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 Destructs the entity. More...
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 Returns the entity's parent cell. More...
 
bool IsLoaded () const
 Returns the entity load status. More...
 
bool IsAutoLoad () const
 Returns the auto load flag status. More...
 
bool IsPersistent () const
 Returns the persistence status of an entity. More...
 
bool IsChanged () const
 
bool IsDeleted () const
 Returns the entity deletion status. More...
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 Purges the entity. More...
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
void CheckTransition ()
 Check whether an entity has entered a different cell. More...
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 Updates entities. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)
 Registers a new entity type. More...
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 Creates an entity. More...
 
static EntityFind (id_t entity_id)
 Finds the entity by its ID number. More...
 
static EntityFind (name_t entity_name)
 Finds the entity by its name. More...
 

Protected Member Functions

void SwitchState (int)
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 Registers the entity. More...
 
void Unregister ()
 Unregisters the entity. More...
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 
void SetFlag (uint32_t flag, bool value)
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
EventListener tick
 
uint32_t flags
 
name_t model
 
name_t lightmap
 
vec3 origin
 
vec3 direction
 
float speed
 
float pause
 
float distance
 
name_t sound
 
name_t parent
 
vec3 start_pos
 
quat start_rot
 
float progress
 
float timer
 
int state
 
int last_activate
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 

Detailed Description

Essentially a func_door.

It can open. It can close. It responds to Signal inputs and gives out outputs. It can be a door. It can be a lift. It can even be a button.

Constructor & Destructor Documentation

◆ Button()

tram::Ext::Kitchensink::Button::Button ( const SharedEntityData shared_data,
const ValueArray field_array 
)

Member Function Documentation

◆ EventHandler()

void tram::Ext::Kitchensink::Button::EventHandler ( Event event)
virtual

Allows entities to receive events.

Whenever an entity registers an event, an event of the same type as the event listener is posted and Event::Dispatch() has been called, the entity will receive the event through this method.

Reimplemented from tram::Entity.

◆ GetType()

name_t tram::Ext::Kitchensink::Button::GetType ( )
virtual

Returns the type of the entity.

Usually this method returns the same name that is used to Entity::RegisterType() its type.

Implements tram::Entity.

◆ Load()

void tram::Ext::Kitchensink::Button::Load ( )
virtual

Loads an entity.

Usually the Load() method for an entity type will set up its components, event listeners, etc. After being loaded, the entity will be ready for simulation.

When implementing this method, make sure to flag the entity with the LOADED flag, so that world streaming system doesn't try to load your entity twice.

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Kitchensink::Button::MessageHandler ( Message msg)
virtual

Allows entities to receive messages.

Whenever an entity is sent a Message, once the Message::Dispatch() function has been called, the entity will gets the message passed to it through this method.

Implements tram::Entity.

◆ Register()

void tram::Ext::Kitchensink::Button::Register ( )
static

◆ Serialize()

void tram::Ext::Kitchensink::Button::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Kitchensink::Button::SetParameters ( )
virtual

Called when either Entity::SetLocation or Entity::SetRotation is called.

Usually this method is used to relocate or rerotate an entity.

If the entity has a PhysicsComponent, its position or rotation is usually set from this method, otherwise in the next Physics update step, the entity's previous rotation and location will be restored.

Implements tram::Entity.

◆ SwitchState()

void tram::Ext::Kitchensink::Button::SwitchState ( int  )
protected

◆ Unload()

void tram::Ext::Kitchensink::Button::Unload ( )
virtual

Unloads an entity.

Usually the Load() method for an entity type will destroy its its components, event listeners, etc. After being unloaded, the entity have been removed from the simulation.

When implementing this method, make sure to clear your entity's LOADED flag, so that world streaming system can load the entity again.

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Kitchensink::Button::UpdateParameters ( )
virtual

Called when Entity::UpdateTransform is called.

From the runtime's side, only the Physics system will call the Entity::UpdateTransform() method, and through it, this method.

Usually this method is used to forward the entity's new position and rotation to its RenderComponent, if it has one.

If the entity has a PhysicsComponent, its position or rotation is never updated from this method.

Implements tram::Entity.

Member Data Documentation

◆ direction

vec3 tram::Ext::Kitchensink::Button::direction
protected

◆ distance

float tram::Ext::Kitchensink::Button::distance
protected

◆ flags

uint32_t tram::Ext::Kitchensink::Button::flags
protected

◆ last_activate

int tram::Ext::Kitchensink::Button::last_activate
protected

◆ lightmap

name_t tram::Ext::Kitchensink::Button::lightmap
protected

◆ model

name_t tram::Ext::Kitchensink::Button::model
protected

◆ origin

vec3 tram::Ext::Kitchensink::Button::origin
protected

◆ parent

name_t tram::Ext::Kitchensink::Button::parent
protected

◆ pause

float tram::Ext::Kitchensink::Button::pause
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Kitchensink::Button::physicscomponent
protected

◆ progress

float tram::Ext::Kitchensink::Button::progress
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Kitchensink::Button::rendercomponent
protected

◆ sound

name_t tram::Ext::Kitchensink::Button::sound
protected

◆ speed

float tram::Ext::Kitchensink::Button::speed
protected

◆ start_pos

vec3 tram::Ext::Kitchensink::Button::start_pos
protected

◆ start_rot

quat tram::Ext::Kitchensink::Button::start_rot
protected

◆ state

int tram::Ext::Kitchensink::Button::state
protected

◆ tick

EventListener tram::Ext::Kitchensink::Button::tick
protected

◆ timer

float tram::Ext::Kitchensink::Button::timer
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_character-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::Character Member List
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_character.html ================================================ Tramway SDK: tram::Ext::Kitchensink::Character Class Reference
Tramway SDK v0.1.1

#include <character.h>

Public Member Functions

void AddClass (CharacterClass *)
 
bool HasClass (CharacterClass *)
 
float GetDisposition (Character *)
 
float GetBaseDisposition (Character *)
 
void SetBaseDisposition (Character *, float)
 
bool IsInFaction (Faction *)
 

Static Public Member Functions

static void LoadFromDisk (const char *)
 
static CharacterFind (Entity *entity)
 
static CharacterFind (id_t entity_id)
 

Protected Attributes

id_t entity_id = 0
 
CharacterClasscharacter_class = nullptr
 
std::vector< CharacterDispositiondispositions
 
std::vector< Faction * > factions
 

Friends

class Faction
 

Member Function Documentation

◆ AddClass()

void tram::Ext::Kitchensink::Character::AddClass ( CharacterClass character_class)

◆ Find() [1/2]

Character * tram::Ext::Kitchensink::Character::Find ( Entity entity)
static

◆ Find() [2/2]

Character * tram::Ext::Kitchensink::Character::Find ( id_t  entity_id)
static

◆ GetBaseDisposition()

float tram::Ext::Kitchensink::Character::GetBaseDisposition ( Character other)

◆ GetDisposition()

float tram::Ext::Kitchensink::Character::GetDisposition ( Character other)

◆ HasClass()

bool tram::Ext::Kitchensink::Character::HasClass ( CharacterClass character_class)

◆ IsInFaction()

bool tram::Ext::Kitchensink::Character::IsInFaction ( Faction check_faction)

◆ LoadFromDisk()

void tram::Ext::Kitchensink::Character::LoadFromDisk ( const char *  filename)
static

◆ SetBaseDisposition()

void tram::Ext::Kitchensink::Character::SetBaseDisposition ( Character other,
float  disposition_value 
)

Friends And Related Function Documentation

◆ Faction

friend class Faction
friend

Member Data Documentation

◆ character_class

CharacterClass* tram::Ext::Kitchensink::Character::character_class = nullptr
protected

◆ dispositions

std::vector<CharacterDisposition> tram::Ext::Kitchensink::Character::dispositions
protected

◆ entity_id

id_t tram::Ext::Kitchensink::Character::entity_id = 0
protected

◆ factions

std::vector<Faction*> tram::Ext::Kitchensink::Character::factions
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/character.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/character.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_character_class-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::CharacterClass Member List
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_character_class.html ================================================ Tramway SDK: tram::Ext::Kitchensink::CharacterClass Class Reference
Tramway SDK v0.1.1
tram::Ext::Kitchensink::CharacterClass Class Reference

#include <character.h>

Public Member Functions

void AddBaseClass (CharacterClass *)
 
bool HasBaseClass (CharacterClass *)
 
void SetAttribute (name_t attribute, float value)
 
float GetAttribute (name_t attribute)
 
void AddFaction (Faction *, float, float)
 
void GatherBaseAttributes (AttributeContainer &)
 
void GatherFactions (Character *)
 

Static Public Member Functions

static CharacterClassFind (name_t name)
 

Protected Attributes

std::vector< CharacterClass * > base_classes
 
std::vector< BaseAttributebase_attributes
 
std::vector< BaseFactionRankbase_factions
 

Member Function Documentation

◆ AddBaseClass()

void tram::Ext::Kitchensink::CharacterClass::AddBaseClass ( CharacterClass character_class)

◆ AddFaction()

void tram::Ext::Kitchensink::CharacterClass::AddFaction ( Faction faction,
float  rank,
float  loyalty 
)

◆ Find()

CharacterClass * tram::Ext::Kitchensink::CharacterClass::Find ( name_t  name)
static

◆ GatherBaseAttributes()

void tram::Ext::Kitchensink::CharacterClass::GatherBaseAttributes ( AttributeContainer container)

◆ GatherFactions()

void tram::Ext::Kitchensink::CharacterClass::GatherFactions ( Character )

◆ GetAttribute()

float tram::Ext::Kitchensink::CharacterClass::GetAttribute ( name_t  attribute)

◆ HasBaseClass()

bool tram::Ext::Kitchensink::CharacterClass::HasBaseClass ( CharacterClass character_class)

◆ SetAttribute()

void tram::Ext::Kitchensink::CharacterClass::SetAttribute ( name_t  attribute,
float  value 
)

Member Data Documentation

◆ base_attributes

std::vector<BaseAttribute> tram::Ext::Kitchensink::CharacterClass::base_attributes
protected

◆ base_classes

std::vector<CharacterClass*> tram::Ext::Kitchensink::CharacterClass::base_classes
protected

◆ base_factions

std::vector<BaseFactionRank> tram::Ext::Kitchensink::CharacterClass::base_factions
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/character.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/character.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_debug_shape-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::DebugShape Member List

This is the complete list of members for tram::Ext::Kitchensink::DebugShape, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
collmodeltram::Ext::Kitchensink::DebugShapeprotected
DebugShape(const SharedEntityData &, const ValueArray &)tram::Ext::Kitchensink::DebugShape
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()=0tram::Entitypure virtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Ext::Kitchensink::DebugShapevirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Kitchensink::DebugShapevirtual
modeltram::Ext::Kitchensink::DebugShapeprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physicscomponenttram::Ext::Kitchensink::DebugShapeprotected
Register()tram::Ext::Kitchensink::DebugShapestatic
RegisterType(name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Ext::Kitchensink::DebugShapeprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Kitchensink::DebugShapevirtual
SetAutoLoad(bool is)tram::Entityinline
SetFlag(uint32_t flag, bool value)tram::Entityinlineprotected
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Kitchensink::DebugShapevirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
Unload()tram::Ext::Kitchensink::DebugShapevirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateParameters()tram::Ext::Kitchensink::DebugShapevirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_debug_shape.html ================================================ Tramway SDK: tram::Ext::Kitchensink::DebugShape Class Reference
Tramway SDK v0.1.1
tram::Ext::Kitchensink::DebugShape Class Reference

#include <entities.h>

Inheritance diagram for tram::Ext::Kitchensink::DebugShape:
tram::Entity

Public Member Functions

 DebugShape (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 Called when Entity::UpdateTransform is called. More...
 
void SetParameters ()
 Called when either Entity::SetLocation or Entity::SetRotation is called. More...
 
void Load ()
 Loads an entity. More...
 
void Unload ()
 Unloads an entity. More...
 
void Serialize ()
 
void MessageHandler (Message &msg)
 Allows entities to receive messages. More...
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 Destructs the entity. More...
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 Returns the entity's parent cell. More...
 
bool IsLoaded () const
 Returns the entity load status. More...
 
bool IsAutoLoad () const
 Returns the auto load flag status. More...
 
bool IsPersistent () const
 Returns the persistence status of an entity. More...
 
bool IsChanged () const
 
bool IsDeleted () const
 Returns the entity deletion status. More...
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 Purges the entity. More...
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 Allows entities to receive events. More...
 
virtual name_t GetType ()=0
 Returns the type of the entity. More...
 
void CheckTransition ()
 Check whether an entity has entered a different cell. More...
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 Updates entities. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)
 Registers a new entity type. More...
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 Creates an entity. More...
 
static EntityFind (id_t entity_id)
 Finds the entity by its ID number. More...
 
static EntityFind (name_t entity_name)
 Finds the entity by its name. More...
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t collmodel
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 Registers the entity. More...
 
void Unregister ()
 Unregisters the entity. More...
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 
void SetFlag (uint32_t flag, bool value)
 

Constructor & Destructor Documentation

◆ DebugShape()

tram::Ext::Kitchensink::DebugShape::DebugShape ( const SharedEntityData ,
const ValueArray  
)

Member Function Documentation

◆ Load()

void tram::Ext::Kitchensink::DebugShape::Load ( )
virtual

Loads an entity.

Usually the Load() method for an entity type will set up its components, event listeners, etc. After being loaded, the entity will be ready for simulation.

When implementing this method, make sure to flag the entity with the LOADED flag, so that world streaming system doesn't try to load your entity twice.

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Kitchensink::DebugShape::MessageHandler ( Message msg)
virtual

Allows entities to receive messages.

Whenever an entity is sent a Message, once the Message::Dispatch() function has been called, the entity will gets the message passed to it through this method.

Implements tram::Entity.

◆ Register()

static void tram::Ext::Kitchensink::DebugShape::Register ( )
static

◆ Serialize()

void tram::Ext::Kitchensink::DebugShape::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Kitchensink::DebugShape::SetParameters ( )
virtual

Called when either Entity::SetLocation or Entity::SetRotation is called.

Usually this method is used to relocate or rerotate an entity.

If the entity has a PhysicsComponent, its position or rotation is usually set from this method, otherwise in the next Physics update step, the entity's previous rotation and location will be restored.

Implements tram::Entity.

◆ Unload()

void tram::Ext::Kitchensink::DebugShape::Unload ( )
virtual

Unloads an entity.

Usually the Load() method for an entity type will destroy its its components, event listeners, etc. After being unloaded, the entity have been removed from the simulation.

When implementing this method, make sure to clear your entity's LOADED flag, so that world streaming system can load the entity again.

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Kitchensink::DebugShape::UpdateParameters ( )
virtual

Called when Entity::UpdateTransform is called.

From the runtime's side, only the Physics system will call the Entity::UpdateTransform() method, and through it, this method.

Usually this method is used to forward the entity's new position and rotation to its RenderComponent, if it has one.

If the entity has a PhysicsComponent, its position or rotation is never updated from this method.

Implements tram::Entity.

Member Data Documentation

◆ collmodel

name_t tram::Ext::Kitchensink::DebugShape::collmodel
protected

◆ model

name_t tram::Ext::Kitchensink::DebugShape::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Kitchensink::DebugShape::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Kitchensink::DebugShape::rendercomponent
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_debug_text-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::DebugText Member List

This is the complete list of members for tram::Ext::Kitchensink::DebugText, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
collmodeltram::Ext::Kitchensink::DebugTextprotected
DebugText(const SharedEntityData &, const ValueArray &)tram::Ext::Kitchensink::DebugText
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()=0tram::Entitypure virtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Ext::Kitchensink::DebugTextvirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Kitchensink::DebugTextvirtual
modeltram::Ext::Kitchensink::DebugTextprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physicscomponenttram::Ext::Kitchensink::DebugTextprotected
Register()tram::Ext::Kitchensink::DebugTextstatic
RegisterType(name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Ext::Kitchensink::DebugTextprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Kitchensink::DebugTextvirtual
SetAutoLoad(bool is)tram::Entityinline
SetFlag(uint32_t flag, bool value)tram::Entityinlineprotected
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Kitchensink::DebugTextvirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
Unload()tram::Ext::Kitchensink::DebugTextvirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateParameters()tram::Ext::Kitchensink::DebugTextvirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_debug_text.html ================================================ Tramway SDK: tram::Ext::Kitchensink::DebugText Class Reference
Tramway SDK v0.1.1

#include <entities.h>

Inheritance diagram for tram::Ext::Kitchensink::DebugText:
tram::Entity

Public Member Functions

 DebugText (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 Called when Entity::UpdateTransform is called. More...
 
void SetParameters ()
 Called when either Entity::SetLocation or Entity::SetRotation is called. More...
 
void Load ()
 Loads an entity. More...
 
void Unload ()
 Unloads an entity. More...
 
void Serialize ()
 
void MessageHandler (Message &msg)
 Allows entities to receive messages. More...
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 Destructs the entity. More...
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 Returns the entity's parent cell. More...
 
bool IsLoaded () const
 Returns the entity load status. More...
 
bool IsAutoLoad () const
 Returns the auto load flag status. More...
 
bool IsPersistent () const
 Returns the persistence status of an entity. More...
 
bool IsChanged () const
 
bool IsDeleted () const
 Returns the entity deletion status. More...
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 Purges the entity. More...
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 Allows entities to receive events. More...
 
virtual name_t GetType ()=0
 Returns the type of the entity. More...
 
void CheckTransition ()
 Check whether an entity has entered a different cell. More...
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 Updates entities. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)
 Registers a new entity type. More...
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 Creates an entity. More...
 
static EntityFind (id_t entity_id)
 Finds the entity by its ID number. More...
 
static EntityFind (name_t entity_name)
 Finds the entity by its name. More...
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t collmodel
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 Registers the entity. More...
 
void Unregister ()
 Unregisters the entity. More...
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 
void SetFlag (uint32_t flag, bool value)
 

Constructor & Destructor Documentation

◆ DebugText()

tram::Ext::Kitchensink::DebugText::DebugText ( const SharedEntityData ,
const ValueArray  
)

Member Function Documentation

◆ Load()

void tram::Ext::Kitchensink::DebugText::Load ( )
virtual

Loads an entity.

Usually the Load() method for an entity type will set up its components, event listeners, etc. After being loaded, the entity will be ready for simulation.

When implementing this method, make sure to flag the entity with the LOADED flag, so that world streaming system doesn't try to load your entity twice.

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Kitchensink::DebugText::MessageHandler ( Message msg)
virtual

Allows entities to receive messages.

Whenever an entity is sent a Message, once the Message::Dispatch() function has been called, the entity will gets the message passed to it through this method.

Implements tram::Entity.

◆ Register()

static void tram::Ext::Kitchensink::DebugText::Register ( )
static

◆ Serialize()

void tram::Ext::Kitchensink::DebugText::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Kitchensink::DebugText::SetParameters ( )
virtual

Called when either Entity::SetLocation or Entity::SetRotation is called.

Usually this method is used to relocate or rerotate an entity.

If the entity has a PhysicsComponent, its position or rotation is usually set from this method, otherwise in the next Physics update step, the entity's previous rotation and location will be restored.

Implements tram::Entity.

◆ Unload()

void tram::Ext::Kitchensink::DebugText::Unload ( )
virtual

Unloads an entity.

Usually the Load() method for an entity type will destroy its its components, event listeners, etc. After being unloaded, the entity have been removed from the simulation.

When implementing this method, make sure to clear your entity's LOADED flag, so that world streaming system can load the entity again.

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Kitchensink::DebugText::UpdateParameters ( )
virtual

Called when Entity::UpdateTransform is called.

From the runtime's side, only the Physics system will call the Entity::UpdateTransform() method, and through it, this method.

Usually this method is used to forward the entity's new position and rotation to its RenderComponent, if it has one.

If the entity has a PhysicsComponent, its position or rotation is never updated from this method.

Implements tram::Entity.

Member Data Documentation

◆ collmodel

name_t tram::Ext::Kitchensink::DebugText::collmodel
protected

◆ model

name_t tram::Ext::Kitchensink::DebugText::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Kitchensink::DebugText::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Kitchensink::DebugText::rendercomponent
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_dialog_controller-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::DialogController Member List
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_dialog_controller.html ================================================ Tramway SDK: tram::Ext::Kitchensink::DialogController Class Reference
Tramway SDK v0.1.1
tram::Ext::Kitchensink::DialogController Class Reference

#include <dialog.h>

Public Member Functions

 DialogController (name_t initial_topic)
 
name_t GetAnswer ()
 
std::vector< name_tGetPrompts ()
 
bool ShouldExit ()
 
void MoveTo (size_t prompt_index)
 

Constructor & Destructor Documentation

◆ DialogController()

tram::Ext::Kitchensink::DialogController::DialogController ( name_t  initial_topic)

Member Function Documentation

◆ GetAnswer()

name_t tram::Ext::Kitchensink::DialogController::GetAnswer ( )

◆ GetPrompts()

std::vector< name_t > tram::Ext::Kitchensink::DialogController::GetPrompts ( )

◆ MoveTo()

void tram::Ext::Kitchensink::DialogController::MoveTo ( size_t  prompt_index)

◆ ShouldExit()

bool tram::Ext::Kitchensink::DialogController::ShouldExit ( )

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/dialog.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/dialog.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_faction-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::Faction Member List
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_faction.html ================================================ Tramway SDK: tram::Ext::Kitchensink::Faction Class Reference
Tramway SDK v0.1.1

#include <character.h>

Public Member Functions

void AddCharacter (Character *)
 
void RemoveCharacter (Character *)
 
bool HasCharacter (Character *)
 
void SetCharacterRank (Character *, float)
 
void SetCharacterLoyalty (Character *, float)
 
float GetCharacterRank (Character *)
 
float GetCharacterLoyalty (Character *)
 
void SetRelation (Faction *, float)
 
float GetRelation (Faction *)
 
float GetDisposition (Character *)
 

Static Public Member Functions

static FactionFind (name_t name)
 

Public Attributes

name_t name
 

Protected Attributes

std::vector< FactionRankranks
 
std::vector< FactionRelationrelations
 

Member Function Documentation

◆ AddCharacter()

void tram::Ext::Kitchensink::Faction::AddCharacter ( Character character)

◆ Find()

Faction * tram::Ext::Kitchensink::Faction::Find ( name_t  name)
static

◆ GetCharacterLoyalty()

float tram::Ext::Kitchensink::Faction::GetCharacterLoyalty ( Character character)

◆ GetCharacterRank()

float tram::Ext::Kitchensink::Faction::GetCharacterRank ( Character character)

◆ GetDisposition()

float tram::Ext::Kitchensink::Faction::GetDisposition ( Character character)

◆ GetRelation()

float tram::Ext::Kitchensink::Faction::GetRelation ( Faction other)

◆ HasCharacter()

bool tram::Ext::Kitchensink::Faction::HasCharacter ( Character character)

◆ RemoveCharacter()

void tram::Ext::Kitchensink::Faction::RemoveCharacter ( Character character)

◆ SetCharacterLoyalty()

void tram::Ext::Kitchensink::Faction::SetCharacterLoyalty ( Character character,
float  loyalty 
)

◆ SetCharacterRank()

void tram::Ext::Kitchensink::Faction::SetCharacterRank ( Character character,
float  rank_value 
)

◆ SetRelation()

void tram::Ext::Kitchensink::Faction::SetRelation ( Faction faction,
float  disposition 
)

Member Data Documentation

◆ name

name_t tram::Ext::Kitchensink::Faction::name

◆ ranks

std::vector<FactionRank> tram::Ext::Kitchensink::Faction::ranks
protected

◆ relations

std::vector<FactionRelation> tram::Ext::Kitchensink::Faction::relations
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/character.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/character.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_inventory-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::Inventory Member List
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html ================================================ Tramway SDK: tram::Ext::Kitchensink::Inventory Class Reference
Tramway SDK v0.1.1
tram::Ext::Kitchensink::Inventory Class Reference

#include <inventory.h>

Public Member Functions

 Inventory (id_t parent)
 
int AddItem (name_t item_class, int count)
 
int RemoveItem (name_t item_class, int count)
 
int GetItemCount (name_t item_class)
 
bool EquipItem (name_t item_class)
 
bool UnequipItem (name_t item_class)
 
bool UnequipSlot (name_t item_slot)
 
bool IsEquippedItem (name_t item)
 
bool IsEquippedSlot (name_t slot)
 
name_t GetEquippedItem (name_t slot)
 
InventoryManagerFindCompartment (name_t compartment)
 

Static Public Member Functions

static void LoadFromDisk (const char *filename)
 
static InventoryFind (Entity *entity)
 

Public Attributes

id_t parent = 0
 
std::vector< std::pair< name_t, name_t > > equipped
 
std::vector< std::pair< name_t, InventoryManager * > > compartments
 

Constructor & Destructor Documentation

◆ Inventory()

tram::Ext::Kitchensink::Inventory::Inventory ( id_t  parent)
inline

Member Function Documentation

◆ AddItem()

int tram::Ext::Kitchensink::Inventory::AddItem ( name_t  item_class,
int  count 
)

◆ EquipItem()

bool tram::Ext::Kitchensink::Inventory::EquipItem ( name_t  item_class)

◆ Find()

Inventory * tram::Ext::Kitchensink::Inventory::Find ( Entity entity)
static

◆ FindCompartment()

InventoryManager * tram::Ext::Kitchensink::Inventory::FindCompartment ( name_t  compartment)

◆ GetEquippedItem()

name_t tram::Ext::Kitchensink::Inventory::GetEquippedItem ( name_t  slot)

◆ GetItemCount()

int tram::Ext::Kitchensink::Inventory::GetItemCount ( name_t  item_class)

◆ IsEquippedItem()

bool tram::Ext::Kitchensink::Inventory::IsEquippedItem ( name_t  item)

◆ IsEquippedSlot()

bool tram::Ext::Kitchensink::Inventory::IsEquippedSlot ( name_t  slot)

◆ LoadFromDisk()

void tram::Ext::Kitchensink::Inventory::LoadFromDisk ( const char *  filename)
static

◆ RemoveItem()

int tram::Ext::Kitchensink::Inventory::RemoveItem ( name_t  item_class,
int  count 
)

◆ UnequipItem()

bool tram::Ext::Kitchensink::Inventory::UnequipItem ( name_t  item_class)

◆ UnequipSlot()

bool tram::Ext::Kitchensink::Inventory::UnequipSlot ( name_t  item_slot)

Member Data Documentation

◆ compartments

std::vector<std::pair<name_t, InventoryManager*> > tram::Ext::Kitchensink::Inventory::compartments

◆ equipped

std::vector<std::pair<name_t, name_t> > tram::Ext::Kitchensink::Inventory::equipped

◆ parent

id_t tram::Ext::Kitchensink::Inventory::parent = 0

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/inventory.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/inventory.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_inventory_manager-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::InventoryManager Member List

This is the complete list of members for tram::Ext::Kitchensink::InventoryManager, including all inherited members.

AddItem(name_t item_class, int count)=0tram::Ext::Kitchensink::InventoryManagerpure virtual
Delete(name_t compartment, InventoryManager *)tram::Ext::Kitchensink::InventoryManagerstatic
GetItemCount(name_t item_class)=0tram::Ext::Kitchensink::InventoryManagerpure virtual
GetItems()=0tram::Ext::Kitchensink::InventoryManagerpure virtual
New(name_t compartment)tram::Ext::Kitchensink::InventoryManagerstatic
Register(name_t compartment, InventoryManager *(*make)(), void(*clear)(InventoryManager *))tram::Ext::Kitchensink::InventoryManagerstatic
RemoveItem(name_t item_class, int count)=0tram::Ext::Kitchensink::InventoryManagerpure virtual
~InventoryManager()=defaulttram::Ext::Kitchensink::InventoryManagervirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_inventory_manager.html ================================================ Tramway SDK: tram::Ext::Kitchensink::InventoryManager Class Reference
Tramway SDK v0.1.1
tram::Ext::Kitchensink::InventoryManager Class Referenceabstract

#include <inventory.h>

Inheritance diagram for tram::Ext::Kitchensink::InventoryManager:
tram::Ext::Kitchensink::ListInventoryManager

Public Member Functions

virtual int AddItem (name_t item_class, int count)=0
 
virtual int RemoveItem (name_t item_class, int count)=0
 
virtual int GetItemCount (name_t item_class)=0
 
virtual std::vector< name_tGetItems ()=0
 
virtual ~InventoryManager ()=default
 

Static Public Member Functions

static InventoryManagerNew (name_t compartment)
 
static void Delete (name_t compartment, InventoryManager *)
 
static void Register (name_t compartment, InventoryManager *(*make)(), void(*clear)(InventoryManager *))
 

Constructor & Destructor Documentation

◆ ~InventoryManager()

virtual tram::Ext::Kitchensink::InventoryManager::~InventoryManager ( )
virtualdefault

Member Function Documentation

◆ AddItem()

virtual int tram::Ext::Kitchensink::InventoryManager::AddItem ( name_t  item_class,
int  count 
)
pure virtual

◆ Delete()

void tram::Ext::Kitchensink::InventoryManager::Delete ( name_t  compartment,
InventoryManager manager 
)
static

◆ GetItemCount()

virtual int tram::Ext::Kitchensink::InventoryManager::GetItemCount ( name_t  item_class)
pure virtual

◆ GetItems()

virtual std::vector< name_t > tram::Ext::Kitchensink::InventoryManager::GetItems ( )
pure virtual

◆ New()

InventoryManager * tram::Ext::Kitchensink::InventoryManager::New ( name_t  compartment)
static

◆ Register()

void tram::Ext::Kitchensink::InventoryManager::Register ( name_t  compartment,
InventoryManager *(*)()  make,
void(*)(InventoryManager *)  clear 
)
static

◆ RemoveItem()

virtual int tram::Ext::Kitchensink::InventoryManager::RemoveItem ( name_t  item_class,
int  count 
)
pure virtual

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/inventory.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/inventory.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_item_class-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::ItemClass Member List

This is the complete list of members for tram::Ext::Kitchensink::ItemClass, including all inherited members.

attributestram::Ext::Kitchensink::ItemClass
base_classtram::Ext::Kitchensink::ItemClass
default_compartmenttram::Ext::Kitchensink::ItemClass
effectstram::Ext::Kitchensink::ItemClass
equipped_slottram::Ext::Kitchensink::ItemClass
Find(name_t item_class)tram::Ext::Kitchensink::ItemClassstatic
FireAdded(Inventory *)tram::Ext::Kitchensink::ItemClass
FireEquip(Inventory *)tram::Ext::Kitchensink::ItemClass
FireIdle(Inventory *)tram::Ext::Kitchensink::ItemClass
FirePrimaryAction(Inventory *)tram::Ext::Kitchensink::ItemClass
FireRemoved(Inventory *)tram::Ext::Kitchensink::ItemClass
FireSecondaryAction(Inventory *)tram::Ext::Kitchensink::ItemClass
FireUnequip(Inventory *)tram::Ext::Kitchensink::ItemClass
heighttram::Ext::Kitchensink::ItemClass
icon_fonttram::Ext::Kitchensink::ItemClass
icon_glyphtram::Ext::Kitchensink::ItemClass
nametram::Ext::Kitchensink::ItemClass
OnAdded(ItemClass *, Inventory *)tram::Ext::Kitchensink::ItemClassinlinevirtual
OnEquip(ItemClass *, Inventory *)tram::Ext::Kitchensink::ItemClassinlinevirtual
OnIdle(ItemClass *, Inventory *)tram::Ext::Kitchensink::ItemClassinlinevirtual
OnPrimaryAction(ItemClass *, Inventory *)tram::Ext::Kitchensink::ItemClassinlinevirtual
OnRemoved(ItemClass *, Inventory *)tram::Ext::Kitchensink::ItemClassinlinevirtual
OnSecondaryAction(ItemClass *, Inventory *)tram::Ext::Kitchensink::ItemClassinlinevirtual
OnUnequip(ItemClass *, Inventory *)tram::Ext::Kitchensink::ItemClassinlinevirtual
Register(ItemClass *)tram::Ext::Kitchensink::ItemClassstatic
sprite_fonttram::Ext::Kitchensink::ItemClass
sprite_glyphtram::Ext::Kitchensink::ItemClass
stacktram::Ext::Kitchensink::ItemClass
valuetram::Ext::Kitchensink::ItemClass
viewmodeltram::Ext::Kitchensink::ItemClass
weighttram::Ext::Kitchensink::ItemClass
widthtram::Ext::Kitchensink::ItemClass
worldmodeltram::Ext::Kitchensink::ItemClass
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html ================================================ Tramway SDK: tram::Ext::Kitchensink::ItemClass Class Reference
Tramway SDK v0.1.1
tram::Ext::Kitchensink::ItemClass Class Reference

#include <inventory.h>

Public Member Functions

void FireEquip (Inventory *)
 
void FireUnequip (Inventory *)
 
void FireAdded (Inventory *)
 
void FireRemoved (Inventory *)
 
void FirePrimaryAction (Inventory *)
 
void FireSecondaryAction (Inventory *)
 
void FireIdle (Inventory *)
 
virtual bool OnEquip (ItemClass *, Inventory *)
 
virtual bool OnUnequip (ItemClass *, Inventory *)
 
virtual bool OnAdded (ItemClass *, Inventory *)
 
virtual bool OnRemoved (ItemClass *, Inventory *)
 
virtual bool OnPrimaryAction (ItemClass *, Inventory *)
 
virtual bool OnSecondaryAction (ItemClass *, Inventory *)
 
virtual bool OnIdle (ItemClass *, Inventory *)
 

Static Public Member Functions

static void Register (ItemClass *)
 
static ItemClassFind (name_t item_class)
 

Public Attributes

name_t name
 
name_t base_class
 
name_t viewmodel
 
name_t worldmodel
 
name_t equipped_slot
 
GUI::font_t sprite_font = 0
 
GUI::font_t icon_font = 0
 
GUI::glyph_t sprite_glyph = 0
 
GUI::glyph_t icon_glyph = 0
 
int width = 1
 
int height = 1
 
int stack = 1
 
int value = 0
 
float weight = 0.0f
 
name_t default_compartment
 
std::vector< Attributeattributes
 
std::vector< Effecteffects
 

Member Function Documentation

◆ Find()

ItemClass * tram::Ext::Kitchensink::ItemClass::Find ( name_t  item_class)
static

◆ FireAdded()

void tram::Ext::Kitchensink::ItemClass::FireAdded ( Inventory inventory)

◆ FireEquip()

void tram::Ext::Kitchensink::ItemClass::FireEquip ( Inventory inventory)

◆ FireIdle()

void tram::Ext::Kitchensink::ItemClass::FireIdle ( Inventory inventory)

◆ FirePrimaryAction()

void tram::Ext::Kitchensink::ItemClass::FirePrimaryAction ( Inventory inventory)

◆ FireRemoved()

void tram::Ext::Kitchensink::ItemClass::FireRemoved ( Inventory inventory)

◆ FireSecondaryAction()

void tram::Ext::Kitchensink::ItemClass::FireSecondaryAction ( Inventory inventory)

◆ FireUnequip()

void tram::Ext::Kitchensink::ItemClass::FireUnequip ( Inventory inventory)

◆ OnAdded()

virtual bool tram::Ext::Kitchensink::ItemClass::OnAdded ( ItemClass ,
Inventory  
)
inlinevirtual

◆ OnEquip()

virtual bool tram::Ext::Kitchensink::ItemClass::OnEquip ( ItemClass ,
Inventory  
)
inlinevirtual

◆ OnIdle()

virtual bool tram::Ext::Kitchensink::ItemClass::OnIdle ( ItemClass ,
Inventory  
)
inlinevirtual

◆ OnPrimaryAction()

virtual bool tram::Ext::Kitchensink::ItemClass::OnPrimaryAction ( ItemClass ,
Inventory  
)
inlinevirtual

◆ OnRemoved()

virtual bool tram::Ext::Kitchensink::ItemClass::OnRemoved ( ItemClass ,
Inventory  
)
inlinevirtual

◆ OnSecondaryAction()

virtual bool tram::Ext::Kitchensink::ItemClass::OnSecondaryAction ( ItemClass ,
Inventory  
)
inlinevirtual

◆ OnUnequip()

virtual bool tram::Ext::Kitchensink::ItemClass::OnUnequip ( ItemClass ,
Inventory  
)
inlinevirtual

◆ Register()

void tram::Ext::Kitchensink::ItemClass::Register ( ItemClass item)
static

Member Data Documentation

◆ attributes

std::vector<Attribute> tram::Ext::Kitchensink::ItemClass::attributes

◆ base_class

name_t tram::Ext::Kitchensink::ItemClass::base_class

◆ default_compartment

name_t tram::Ext::Kitchensink::ItemClass::default_compartment

◆ effects

std::vector<Effect> tram::Ext::Kitchensink::ItemClass::effects

◆ equipped_slot

name_t tram::Ext::Kitchensink::ItemClass::equipped_slot

◆ height

int tram::Ext::Kitchensink::ItemClass::height = 1

◆ icon_font

GUI::font_t tram::Ext::Kitchensink::ItemClass::icon_font = 0

◆ icon_glyph

GUI::glyph_t tram::Ext::Kitchensink::ItemClass::icon_glyph = 0

◆ name

name_t tram::Ext::Kitchensink::ItemClass::name

◆ sprite_font

GUI::font_t tram::Ext::Kitchensink::ItemClass::sprite_font = 0

◆ sprite_glyph

GUI::glyph_t tram::Ext::Kitchensink::ItemClass::sprite_glyph = 0

◆ stack

int tram::Ext::Kitchensink::ItemClass::stack = 1

◆ value

int tram::Ext::Kitchensink::ItemClass::value = 0

◆ viewmodel

name_t tram::Ext::Kitchensink::ItemClass::viewmodel

◆ weight

float tram::Ext::Kitchensink::ItemClass::weight = 0.0f

◆ width

int tram::Ext::Kitchensink::ItemClass::width = 1

◆ worldmodel

name_t tram::Ext::Kitchensink::ItemClass::worldmodel

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/inventory.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/inventory.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_kitchensink_menu_list-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::KitchensinkMenuList Member List

This is the complete list of members for tram::Ext::Kitchensink::KitchensinkMenuList, including all inherited members.

Add(Menu *)tram::Ext::Menu::Menustatic
Clear()tram::Ext::Menu::Menustatic
Empty()tram::Ext::Menu::Menustatic
Pop()tram::Ext::Menu::Menustatic
Push(Menu *)tram::Ext::Menu::Menustatic
Remove(Menu *)tram::Ext::Menu::Menustatic
~Menu()=defaulttram::Ext::Menu::Menuvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_kitchensink_menu_list.html ================================================ Tramway SDK: tram::Ext::Kitchensink::KitchensinkMenuList Class Reference
Tramway SDK v0.1.1
tram::Ext::Kitchensink::KitchensinkMenuList Class Reference

#include <menu.h>

Inheritance diagram for tram::Ext::Kitchensink::KitchensinkMenuList:
tram::Ext::Menu::Menu

Additional Inherited Members

- Public Member Functions inherited from tram::Ext::Menu::Menu
virtual ~Menu ()=default
 
- Static Public Member Functions inherited from tram::Ext::Menu::Menu
static void Push (Menu *)
 Pushes menu on the menu stack. More...
 
static bool Pop ()
 Pops the topmost menu from the stack. More...
 
static bool Empty ()
 Checks whether the menu stack is empty. More...
 
static void Clear ()
 Clears the menu stack. More...
 
static void Add (Menu *)
 
static void Remove (Menu *)
 

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/menu.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/menu.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_list_dialog-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::ListDialog Member List
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_list_dialog.html ================================================ Tramway SDK: tram::Ext::Kitchensink::ListDialog Class Reference
Tramway SDK v0.1.1
tram::Ext::Kitchensink::ListDialog Class Reference

#include <menu.h>

Inheritance diagram for tram::Ext::Kitchensink::ListDialog:
tram::Ext::Menu::Menu

Public Member Functions

 ListDialog ()
 
 ListDialog (name_t)
 
 ~ListDialog ()
 
void Display ()
 
uint32_t Layer ()
 
- Public Member Functions inherited from tram::Ext::Menu::Menu
virtual ~Menu ()=default
 

Additional Inherited Members

- Static Public Member Functions inherited from tram::Ext::Menu::Menu
static void Push (Menu *)
 Pushes menu on the menu stack. More...
 
static bool Pop ()
 Pops the topmost menu from the stack. More...
 
static bool Empty ()
 Checks whether the menu stack is empty. More...
 
static void Clear ()
 Clears the menu stack. More...
 
static void Add (Menu *)
 
static void Remove (Menu *)
 

Constructor & Destructor Documentation

◆ ListDialog() [1/2]

tram::Ext::Kitchensink::ListDialog::ListDialog ( )

◆ ListDialog() [2/2]

tram::Ext::Kitchensink::ListDialog::ListDialog ( name_t  dialog)

◆ ~ListDialog()

tram::Ext::Kitchensink::ListDialog::~ListDialog ( )

Member Function Documentation

◆ Display()

void tram::Ext::Kitchensink::ListDialog::Display ( )
virtual

Implements tram::Ext::Menu::Menu.

◆ Layer()

uint32_t tram::Ext::Kitchensink::ListDialog::Layer ( )
inlinevirtual

Implements tram::Ext::Menu::Menu.


The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/menu.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/menu.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_list_inventory-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::ListInventory Member List

This is the complete list of members for tram::Ext::Kitchensink::ListInventory, including all inherited members.

Add(Menu *)tram::Ext::Menu::Menustatic
Clear()tram::Ext::Menu::Menustatic
Empty()tram::Ext::Menu::Menustatic
Pop()tram::Ext::Menu::Menustatic
Push(Menu *)tram::Ext::Menu::Menustatic
Remove(Menu *)tram::Ext::Menu::Menustatic
~Menu()=defaulttram::Ext::Menu::Menuvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_list_inventory.html ================================================ Tramway SDK: tram::Ext::Kitchensink::ListInventory Class Reference
Tramway SDK v0.1.1
tram::Ext::Kitchensink::ListInventory Class Reference

#include <menu.h>

Inheritance diagram for tram::Ext::Kitchensink::ListInventory:
tram::Ext::Menu::Menu

Additional Inherited Members

- Public Member Functions inherited from tram::Ext::Menu::Menu
virtual ~Menu ()=default
 
- Static Public Member Functions inherited from tram::Ext::Menu::Menu
static void Push (Menu *)
 Pushes menu on the menu stack. More...
 
static bool Pop ()
 Pops the topmost menu from the stack. More...
 
static bool Empty ()
 Checks whether the menu stack is empty. More...
 
static void Clear ()
 Clears the menu stack. More...
 
static void Add (Menu *)
 
static void Remove (Menu *)
 

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/menu.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_list_inventory_manager-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::ListInventoryManager Member List

This is the complete list of members for tram::Ext::Kitchensink::ListInventoryManager, including all inherited members.

AddItem(name_t item_class, int count) overridetram::Ext::Kitchensink::ListInventoryManagervirtual
Delete(name_t compartment, InventoryManager *)tram::Ext::Kitchensink::InventoryManagerstatic
GetItemCount(name_t item_class) overridetram::Ext::Kitchensink::ListInventoryManagervirtual
GetItems() overridetram::Ext::Kitchensink::ListInventoryManagervirtual
itemstram::Ext::Kitchensink::ListInventoryManager
New(name_t compartment)tram::Ext::Kitchensink::InventoryManagerstatic
Register(name_t compartment, InventoryManager *(*make)(), void(*clear)(InventoryManager *))tram::Ext::Kitchensink::InventoryManagerstatic
RemoveItem(name_t item_class, int count) overridetram::Ext::Kitchensink::ListInventoryManagervirtual
~InventoryManager()=defaulttram::Ext::Kitchensink::InventoryManagervirtual
~ListInventoryManager() override=defaulttram::Ext::Kitchensink::ListInventoryManager
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_list_inventory_manager.html ================================================ Tramway SDK: tram::Ext::Kitchensink::ListInventoryManager Class Reference
Tramway SDK v0.1.1
tram::Ext::Kitchensink::ListInventoryManager Class Reference

#include <inventory.h>

Inheritance diagram for tram::Ext::Kitchensink::ListInventoryManager:
tram::Ext::Kitchensink::InventoryManager

Public Member Functions

int AddItem (name_t item_class, int count) override
 
int RemoveItem (name_t item_class, int count) override
 
int GetItemCount (name_t item_class) override
 
std::vector< name_tGetItems () override
 
 ~ListInventoryManager () override=default
 
- Public Member Functions inherited from tram::Ext::Kitchensink::InventoryManager
virtual ~InventoryManager ()=default
 

Public Attributes

std::vector< std::pair< name_t, int > > items
 

Additional Inherited Members

- Static Public Member Functions inherited from tram::Ext::Kitchensink::InventoryManager
static InventoryManagerNew (name_t compartment)
 
static void Delete (name_t compartment, InventoryManager *)
 
static void Register (name_t compartment, InventoryManager *(*make)(), void(*clear)(InventoryManager *))
 

Constructor & Destructor Documentation

◆ ~ListInventoryManager()

tram::Ext::Kitchensink::ListInventoryManager::~ListInventoryManager ( )
overridedefault

Member Function Documentation

◆ AddItem()

int tram::Ext::Kitchensink::ListInventoryManager::AddItem ( name_t  item_class,
int  count 
)
overridevirtual

◆ GetItemCount()

int tram::Ext::Kitchensink::ListInventoryManager::GetItemCount ( name_t  item_class)
overridevirtual

◆ GetItems()

std::vector< name_t > tram::Ext::Kitchensink::ListInventoryManager::GetItems ( )
overridevirtual

◆ RemoveItem()

int tram::Ext::Kitchensink::ListInventoryManager::RemoveItem ( name_t  item_class,
int  count 
)
overridevirtual

Member Data Documentation

◆ items

std::vector<std::pair<name_t, int> > tram::Ext::Kitchensink::ListInventoryManager::items

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/inventory.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/inventory.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_list_trade-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::ListTrade Member List

This is the complete list of members for tram::Ext::Kitchensink::ListTrade, including all inherited members.

Add(Menu *)tram::Ext::Menu::Menustatic
Clear()tram::Ext::Menu::Menustatic
Empty()tram::Ext::Menu::Menustatic
Pop()tram::Ext::Menu::Menustatic
Push(Menu *)tram::Ext::Menu::Menustatic
Remove(Menu *)tram::Ext::Menu::Menustatic
~Menu()=defaulttram::Ext::Menu::Menuvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_list_trade.html ================================================ Tramway SDK: tram::Ext::Kitchensink::ListTrade Class Reference
Tramway SDK v0.1.1
tram::Ext::Kitchensink::ListTrade Class Reference

#include <menu.h>

Inheritance diagram for tram::Ext::Kitchensink::ListTrade:
tram::Ext::Menu::Menu

Additional Inherited Members

- Public Member Functions inherited from tram::Ext::Menu::Menu
virtual ~Menu ()=default
 
- Static Public Member Functions inherited from tram::Ext::Menu::Menu
static void Push (Menu *)
 Pushes menu on the menu stack. More...
 
static bool Pop ()
 Pops the topmost menu from the stack. More...
 
static bool Empty ()
 Checks whether the menu stack is empty. More...
 
static void Clear ()
 Clears the menu stack. More...
 
static void Add (Menu *)
 
static void Remove (Menu *)
 

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/menu.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_pickup-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::Pickup Member List

This is the complete list of members for tram::Ext::Kitchensink::Pickup, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
collmodeltram::Ext::Kitchensink::Pickupprotected
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()=0tram::Entitypure virtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Ext::Kitchensink::Pickupvirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Kitchensink::Pickupvirtual
modeltram::Ext::Kitchensink::Pickupprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physicscomponenttram::Ext::Kitchensink::Pickupprotected
Pickup(const SharedEntityData &, const ValueArray &)tram::Ext::Kitchensink::Pickup
Register()tram::Ext::Kitchensink::Pickupstatic
RegisterType(name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Ext::Kitchensink::Pickupprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Kitchensink::Pickupvirtual
SetAutoLoad(bool is)tram::Entityinline
SetFlag(uint32_t flag, bool value)tram::Entityinlineprotected
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Kitchensink::Pickupvirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
Unload()tram::Ext::Kitchensink::Pickupvirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateParameters()tram::Ext::Kitchensink::Pickupvirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_pickup.html ================================================ Tramway SDK: tram::Ext::Kitchensink::Pickup Class Reference
Tramway SDK v0.1.1

#include <entities.h>

Inheritance diagram for tram::Ext::Kitchensink::Pickup:
tram::Entity

Public Member Functions

 Pickup (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 Called when Entity::UpdateTransform is called. More...
 
void SetParameters ()
 Called when either Entity::SetLocation or Entity::SetRotation is called. More...
 
void Load ()
 Loads an entity. More...
 
void Unload ()
 Unloads an entity. More...
 
void Serialize ()
 
void MessageHandler (Message &msg)
 Allows entities to receive messages. More...
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 Destructs the entity. More...
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 Returns the entity's parent cell. More...
 
bool IsLoaded () const
 Returns the entity load status. More...
 
bool IsAutoLoad () const
 Returns the auto load flag status. More...
 
bool IsPersistent () const
 Returns the persistence status of an entity. More...
 
bool IsChanged () const
 
bool IsDeleted () const
 Returns the entity deletion status. More...
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 Purges the entity. More...
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 Allows entities to receive events. More...
 
virtual name_t GetType ()=0
 Returns the type of the entity. More...
 
void CheckTransition ()
 Check whether an entity has entered a different cell. More...
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 Updates entities. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)
 Registers a new entity type. More...
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 Creates an entity. More...
 
static EntityFind (id_t entity_id)
 Finds the entity by its ID number. More...
 
static EntityFind (name_t entity_name)
 Finds the entity by its name. More...
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t collmodel
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 Registers the entity. More...
 
void Unregister ()
 Unregisters the entity. More...
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 
void SetFlag (uint32_t flag, bool value)
 

Constructor & Destructor Documentation

◆ Pickup()

tram::Ext::Kitchensink::Pickup::Pickup ( const SharedEntityData ,
const ValueArray  
)

Member Function Documentation

◆ Load()

void tram::Ext::Kitchensink::Pickup::Load ( )
virtual

Loads an entity.

Usually the Load() method for an entity type will set up its components, event listeners, etc. After being loaded, the entity will be ready for simulation.

When implementing this method, make sure to flag the entity with the LOADED flag, so that world streaming system doesn't try to load your entity twice.

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Kitchensink::Pickup::MessageHandler ( Message msg)
virtual

Allows entities to receive messages.

Whenever an entity is sent a Message, once the Message::Dispatch() function has been called, the entity will gets the message passed to it through this method.

Implements tram::Entity.

◆ Register()

static void tram::Ext::Kitchensink::Pickup::Register ( )
static

◆ Serialize()

void tram::Ext::Kitchensink::Pickup::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Kitchensink::Pickup::SetParameters ( )
virtual

Called when either Entity::SetLocation or Entity::SetRotation is called.

Usually this method is used to relocate or rerotate an entity.

If the entity has a PhysicsComponent, its position or rotation is usually set from this method, otherwise in the next Physics update step, the entity's previous rotation and location will be restored.

Implements tram::Entity.

◆ Unload()

void tram::Ext::Kitchensink::Pickup::Unload ( )
virtual

Unloads an entity.

Usually the Load() method for an entity type will destroy its its components, event listeners, etc. After being unloaded, the entity have been removed from the simulation.

When implementing this method, make sure to clear your entity's LOADED flag, so that world streaming system can load the entity again.

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Kitchensink::Pickup::UpdateParameters ( )
virtual

Called when Entity::UpdateTransform is called.

From the runtime's side, only the Physics system will call the Entity::UpdateTransform() method, and through it, this method.

Usually this method is used to forward the entity's new position and rotation to its RenderComponent, if it has one.

If the entity has a PhysicsComponent, its position or rotation is never updated from this method.

Implements tram::Entity.

Member Data Documentation

◆ collmodel

name_t tram::Ext::Kitchensink::Pickup::collmodel
protected

◆ model

name_t tram::Ext::Kitchensink::Pickup::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Kitchensink::Pickup::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Kitchensink::Pickup::rendercomponent
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_quest_entity-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::QuestEntity Member List

This is the complete list of members for tram::Ext::Kitchensink::QuestEntity, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()tram::Ext::Kitchensink::QuestEntityinlinevirtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Ext::Kitchensink::QuestEntityinlinevirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Kitchensink::QuestEntityinlinevirtual
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
QuestEntity(name_t name)tram::Ext::Kitchensink::QuestEntityinline
Register()tram::Entityprotected
RegisterType(name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)tram::Entitystatic
rotationtram::Entityprotected
Serialize()tram::Ext::Kitchensink::QuestEntityinlinevirtual
SetAutoLoad(bool is)tram::Entityinline
SetFlag(uint32_t flag, bool value)tram::Entityinlineprotected
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Kitchensink::QuestEntityinlinevirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
Unload()tram::Ext::Kitchensink::QuestEntityinlinevirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateParameters()tram::Ext::Kitchensink::QuestEntityinlinevirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_quest_entity.html ================================================ Tramway SDK: tram::Ext::Kitchensink::QuestEntity Class Reference
Tramway SDK v0.1.1
tram::Ext::Kitchensink::QuestEntity Class Reference
Inheritance diagram for tram::Ext::Kitchensink::QuestEntity:
tram::Entity

Public Member Functions

 QuestEntity (name_t name)
 
void UpdateParameters ()
 Called when Entity::UpdateTransform is called. More...
 
void SetParameters ()
 Called when either Entity::SetLocation or Entity::SetRotation is called. More...
 
void Load ()
 Loads an entity. More...
 
void Unload ()
 Unloads an entity. More...
 
void Serialize ()
 
name_t GetType ()
 Returns the type of the entity. More...
 
void MessageHandler (Message &msg)
 Allows entities to receive messages. More...
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 Destructs the entity. More...
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 Returns the entity's parent cell. More...
 
bool IsLoaded () const
 Returns the entity load status. More...
 
bool IsAutoLoad () const
 Returns the auto load flag status. More...
 
bool IsPersistent () const
 Returns the persistence status of an entity. More...
 
bool IsChanged () const
 
bool IsDeleted () const
 Returns the entity deletion status. More...
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 Purges the entity. More...
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 Allows entities to receive events. More...
 
void CheckTransition ()
 Check whether an entity has entered a different cell. More...
 
SignalTableGetSignalTable ()
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 Updates entities. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)
 Registers a new entity type. More...
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 Creates an entity. More...
 
static EntityFind (id_t entity_id)
 Finds the entity by its ID number. More...
 
static EntityFind (name_t entity_name)
 Finds the entity by its name. More...
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 Registers the entity. More...
 
void Unregister ()
 Unregisters the entity. More...
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 
void SetFlag (uint32_t flag, bool value)
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Constructor & Destructor Documentation

◆ QuestEntity()

tram::Ext::Kitchensink::QuestEntity::QuestEntity ( name_t  name)
inline

Member Function Documentation

◆ GetType()

name_t tram::Ext::Kitchensink::QuestEntity::GetType ( )
inlinevirtual

Returns the type of the entity.

Usually this method returns the same name that is used to Entity::RegisterType() its type.

Implements tram::Entity.

◆ Load()

void tram::Ext::Kitchensink::QuestEntity::Load ( )
inlinevirtual

Loads an entity.

Usually the Load() method for an entity type will set up its components, event listeners, etc. After being loaded, the entity will be ready for simulation.

When implementing this method, make sure to flag the entity with the LOADED flag, so that world streaming system doesn't try to load your entity twice.

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Kitchensink::QuestEntity::MessageHandler ( Message msg)
inlinevirtual

Allows entities to receive messages.

Whenever an entity is sent a Message, once the Message::Dispatch() function has been called, the entity will gets the message passed to it through this method.

Implements tram::Entity.

◆ Serialize()

void tram::Ext::Kitchensink::QuestEntity::Serialize ( )
inlinevirtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Kitchensink::QuestEntity::SetParameters ( )
inlinevirtual

Called when either Entity::SetLocation or Entity::SetRotation is called.

Usually this method is used to relocate or rerotate an entity.

If the entity has a PhysicsComponent, its position or rotation is usually set from this method, otherwise in the next Physics update step, the entity's previous rotation and location will be restored.

Implements tram::Entity.

◆ Unload()

void tram::Ext::Kitchensink::QuestEntity::Unload ( )
inlinevirtual

Unloads an entity.

Usually the Load() method for an entity type will destroy its its components, event listeners, etc. After being unloaded, the entity have been removed from the simulation.

When implementing this method, make sure to clear your entity's LOADED flag, so that world streaming system can load the entity again.

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Kitchensink::QuestEntity::UpdateParameters ( )
inlinevirtual

Called when Entity::UpdateTransform is called.

From the runtime's side, only the Physics system will call the Entity::UpdateTransform() method, and through it, this method.

Usually this method is used to forward the entity's new position and rotation to its RenderComponent, if it has one.

If the entity has a PhysicsComponent, its position or rotation is never updated from this method.

Implements tram::Entity.


The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/quest.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_quest_list-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::QuestList Member List

This is the complete list of members for tram::Ext::Kitchensink::QuestList, including all inherited members.

Add(Menu *)tram::Ext::Menu::Menustatic
Clear()tram::Ext::Menu::Menustatic
Empty()tram::Ext::Menu::Menustatic
Pop()tram::Ext::Menu::Menustatic
Push(Menu *)tram::Ext::Menu::Menustatic
Remove(Menu *)tram::Ext::Menu::Menustatic
~Menu()=defaulttram::Ext::Menu::Menuvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_quest_list.html ================================================ Tramway SDK: tram::Ext::Kitchensink::QuestList Class Reference
Tramway SDK v0.1.1
tram::Ext::Kitchensink::QuestList Class Reference

#include <menu.h>

Inheritance diagram for tram::Ext::Kitchensink::QuestList:
tram::Ext::Menu::Menu

Additional Inherited Members

- Public Member Functions inherited from tram::Ext::Menu::Menu
virtual ~Menu ()=default
 
- Static Public Member Functions inherited from tram::Ext::Menu::Menu
static void Push (Menu *)
 Pushes menu on the menu stack. More...
 
static bool Pop ()
 Pops the topmost menu from the stack. More...
 
static bool Empty ()
 Checks whether the menu stack is empty. More...
 
static void Clear ()
 Clears the menu stack. More...
 
static void Add (Menu *)
 
static void Remove (Menu *)
 

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/menu.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/menu.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_sound_table-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::SoundTable Member List

This is the complete list of members for tram::Ext::Kitchensink::SoundTable, including all inherited members.

AddSound(SoundAction type, name_t sound)tram::Ext::Kitchensink::SoundTable
Find(name_t name)tram::Ext::Kitchensink::SoundTablestatic
GetSound(SoundAction type)tram::Ext::Kitchensink::SoundTable
PlaySound(SoundAction type)tram::Ext::Kitchensink::SoundTable
PlaySound(SoundAction type, vec3 position, float volume)tram::Ext::Kitchensink::SoundTable
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_sound_table.html ================================================ Tramway SDK: tram::Ext::Kitchensink::SoundTable Class Reference
Tramway SDK v0.1.1
tram::Ext::Kitchensink::SoundTable Class Reference

Maps actions to sounds. More...

#include <extensions/kitchensink/soundtable.h>

Public Member Functions

void AddSound (SoundAction type, name_t sound)
 
name_t GetSound (SoundAction type)
 
void PlaySound (SoundAction type)
 
void PlaySound (SoundAction type, vec3 position, float volume)
 

Static Public Member Functions

static SoundTableFind (name_t name)
 

Detailed Description

Maps actions to sounds.

Perfect for storing the aural properties of various materials, or taking the actions that a door or some other container can perform, e.g. opening, closing, trying to open but failing due to being locked, and mappping them to specific sounds.

Member Function Documentation

◆ AddSound()

void tram::Ext::Kitchensink::SoundTable::AddSound ( SoundAction  type,
name_t  sound 
)

◆ Find()

SoundTable * tram::Ext::Kitchensink::SoundTable::Find ( name_t  name)
static

◆ GetSound()

name_t tram::Ext::Kitchensink::SoundTable::GetSound ( SoundAction  type)

◆ PlaySound() [1/2]

void tram::Ext::Kitchensink::SoundTable::PlaySound ( SoundAction  type)

◆ PlaySound() [2/2]

void tram::Ext::Kitchensink::SoundTable::PlaySound ( SoundAction  type,
vec3  position,
float  volume 
)

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/soundtable.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/soundtable.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_train-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::Train Member List

This is the complete list of members for tram::Ext::Kitchensink::Train, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
collmodeltram::Ext::Kitchensink::Trainprotected
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()=0tram::Entitypure virtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Ext::Kitchensink::Trainvirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Kitchensink::Trainvirtual
modeltram::Ext::Kitchensink::Trainprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physicscomponenttram::Ext::Kitchensink::Trainprotected
Register()tram::Ext::Kitchensink::Trainstatic
RegisterType(name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Ext::Kitchensink::Trainprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Kitchensink::Trainvirtual
SetAutoLoad(bool is)tram::Entityinline
SetFlag(uint32_t flag, bool value)tram::Entityinlineprotected
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Kitchensink::Trainvirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
Train(const SharedEntityData &, const ValueArray &)tram::Ext::Kitchensink::Train
Unload()tram::Ext::Kitchensink::Trainvirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateParameters()tram::Ext::Kitchensink::Trainvirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_train.html ================================================ Tramway SDK: tram::Ext::Kitchensink::Train Class Reference
Tramway SDK v0.1.1

#include <entities.h>

Inheritance diagram for tram::Ext::Kitchensink::Train:
tram::Entity

Public Member Functions

 Train (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 Called when Entity::UpdateTransform is called. More...
 
void SetParameters ()
 Called when either Entity::SetLocation or Entity::SetRotation is called. More...
 
void Load ()
 Loads an entity. More...
 
void Unload ()
 Unloads an entity. More...
 
void Serialize ()
 
void MessageHandler (Message &msg)
 Allows entities to receive messages. More...
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 Destructs the entity. More...
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 Returns the entity's parent cell. More...
 
bool IsLoaded () const
 Returns the entity load status. More...
 
bool IsAutoLoad () const
 Returns the auto load flag status. More...
 
bool IsPersistent () const
 Returns the persistence status of an entity. More...
 
bool IsChanged () const
 
bool IsDeleted () const
 Returns the entity deletion status. More...
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 Purges the entity. More...
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 Allows entities to receive events. More...
 
virtual name_t GetType ()=0
 Returns the type of the entity. More...
 
void CheckTransition ()
 Check whether an entity has entered a different cell. More...
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 Updates entities. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)
 Registers a new entity type. More...
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 Creates an entity. More...
 
static EntityFind (id_t entity_id)
 Finds the entity by its ID number. More...
 
static EntityFind (name_t entity_name)
 Finds the entity by its name. More...
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t collmodel
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 Registers the entity. More...
 
void Unregister ()
 Unregisters the entity. More...
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 
void SetFlag (uint32_t flag, bool value)
 

Constructor & Destructor Documentation

◆ Train()

tram::Ext::Kitchensink::Train::Train ( const SharedEntityData ,
const ValueArray  
)

Member Function Documentation

◆ Load()

void tram::Ext::Kitchensink::Train::Load ( )
virtual

Loads an entity.

Usually the Load() method for an entity type will set up its components, event listeners, etc. After being loaded, the entity will be ready for simulation.

When implementing this method, make sure to flag the entity with the LOADED flag, so that world streaming system doesn't try to load your entity twice.

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Kitchensink::Train::MessageHandler ( Message msg)
virtual

Allows entities to receive messages.

Whenever an entity is sent a Message, once the Message::Dispatch() function has been called, the entity will gets the message passed to it through this method.

Implements tram::Entity.

◆ Register()

static void tram::Ext::Kitchensink::Train::Register ( )
static

◆ Serialize()

void tram::Ext::Kitchensink::Train::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Kitchensink::Train::SetParameters ( )
virtual

Called when either Entity::SetLocation or Entity::SetRotation is called.

Usually this method is used to relocate or rerotate an entity.

If the entity has a PhysicsComponent, its position or rotation is usually set from this method, otherwise in the next Physics update step, the entity's previous rotation and location will be restored.

Implements tram::Entity.

◆ Unload()

void tram::Ext::Kitchensink::Train::Unload ( )
virtual

Unloads an entity.

Usually the Load() method for an entity type will destroy its its components, event listeners, etc. After being unloaded, the entity have been removed from the simulation.

When implementing this method, make sure to clear your entity's LOADED flag, so that world streaming system can load the entity again.

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Kitchensink::Train::UpdateParameters ( )
virtual

Called when Entity::UpdateTransform is called.

From the runtime's side, only the Physics system will call the Entity::UpdateTransform() method, and through it, this method.

Usually this method is used to forward the entity's new position and rotation to its RenderComponent, if it has one.

If the entity has a PhysicsComponent, its position or rotation is never updated from this method.

Implements tram::Entity.

Member Data Documentation

◆ collmodel

name_t tram::Ext::Kitchensink::Train::collmodel
protected

◆ model

name_t tram::Ext::Kitchensink::Train::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Kitchensink::Train::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Kitchensink::Train::rendercomponent
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_trigger_autosave-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::TriggerAutosave Member List

This is the complete list of members for tram::Ext::Kitchensink::TriggerAutosave, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
collmodeltram::Ext::Kitchensink::TriggerAutosaveprotected
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()=0tram::Entitypure virtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Ext::Kitchensink::TriggerAutosavevirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Kitchensink::TriggerAutosavevirtual
modeltram::Ext::Kitchensink::TriggerAutosaveprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physicscomponenttram::Ext::Kitchensink::TriggerAutosaveprotected
Register()tram::Ext::Kitchensink::TriggerAutosavestatic
RegisterType(name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Ext::Kitchensink::TriggerAutosaveprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Kitchensink::TriggerAutosavevirtual
SetAutoLoad(bool is)tram::Entityinline
SetFlag(uint32_t flag, bool value)tram::Entityinlineprotected
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Kitchensink::TriggerAutosavevirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
TriggerAutosave(const SharedEntityData &, const ValueArray &)tram::Ext::Kitchensink::TriggerAutosave
Unload()tram::Ext::Kitchensink::TriggerAutosavevirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateParameters()tram::Ext::Kitchensink::TriggerAutosavevirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_trigger_autosave.html ================================================ Tramway SDK: tram::Ext::Kitchensink::TriggerAutosave Class Reference
Tramway SDK v0.1.1
tram::Ext::Kitchensink::TriggerAutosave Class Reference

#include <entities.h>

Inheritance diagram for tram::Ext::Kitchensink::TriggerAutosave:
tram::Entity

Public Member Functions

 TriggerAutosave (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 Called when Entity::UpdateTransform is called. More...
 
void SetParameters ()
 Called when either Entity::SetLocation or Entity::SetRotation is called. More...
 
void Load ()
 Loads an entity. More...
 
void Unload ()
 Unloads an entity. More...
 
void Serialize ()
 
void MessageHandler (Message &msg)
 Allows entities to receive messages. More...
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 Destructs the entity. More...
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 Returns the entity's parent cell. More...
 
bool IsLoaded () const
 Returns the entity load status. More...
 
bool IsAutoLoad () const
 Returns the auto load flag status. More...
 
bool IsPersistent () const
 Returns the persistence status of an entity. More...
 
bool IsChanged () const
 
bool IsDeleted () const
 Returns the entity deletion status. More...
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 Purges the entity. More...
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 Allows entities to receive events. More...
 
virtual name_t GetType ()=0
 Returns the type of the entity. More...
 
void CheckTransition ()
 Check whether an entity has entered a different cell. More...
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 Updates entities. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)
 Registers a new entity type. More...
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 Creates an entity. More...
 
static EntityFind (id_t entity_id)
 Finds the entity by its ID number. More...
 
static EntityFind (name_t entity_name)
 Finds the entity by its name. More...
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t collmodel
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 Registers the entity. More...
 
void Unregister ()
 Unregisters the entity. More...
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 
void SetFlag (uint32_t flag, bool value)
 

Constructor & Destructor Documentation

◆ TriggerAutosave()

tram::Ext::Kitchensink::TriggerAutosave::TriggerAutosave ( const SharedEntityData ,
const ValueArray  
)

Member Function Documentation

◆ Load()

void tram::Ext::Kitchensink::TriggerAutosave::Load ( )
virtual

Loads an entity.

Usually the Load() method for an entity type will set up its components, event listeners, etc. After being loaded, the entity will be ready for simulation.

When implementing this method, make sure to flag the entity with the LOADED flag, so that world streaming system doesn't try to load your entity twice.

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Kitchensink::TriggerAutosave::MessageHandler ( Message msg)
virtual

Allows entities to receive messages.

Whenever an entity is sent a Message, once the Message::Dispatch() function has been called, the entity will gets the message passed to it through this method.

Implements tram::Entity.

◆ Register()

static void tram::Ext::Kitchensink::TriggerAutosave::Register ( )
static

◆ Serialize()

void tram::Ext::Kitchensink::TriggerAutosave::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Kitchensink::TriggerAutosave::SetParameters ( )
virtual

Called when either Entity::SetLocation or Entity::SetRotation is called.

Usually this method is used to relocate or rerotate an entity.

If the entity has a PhysicsComponent, its position or rotation is usually set from this method, otherwise in the next Physics update step, the entity's previous rotation and location will be restored.

Implements tram::Entity.

◆ Unload()

void tram::Ext::Kitchensink::TriggerAutosave::Unload ( )
virtual

Unloads an entity.

Usually the Load() method for an entity type will destroy its its components, event listeners, etc. After being unloaded, the entity have been removed from the simulation.

When implementing this method, make sure to clear your entity's LOADED flag, so that world streaming system can load the entity again.

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Kitchensink::TriggerAutosave::UpdateParameters ( )
virtual

Called when Entity::UpdateTransform is called.

From the runtime's side, only the Physics system will call the Entity::UpdateTransform() method, and through it, this method.

Usually this method is used to forward the entity's new position and rotation to its RenderComponent, if it has one.

If the entity has a PhysicsComponent, its position or rotation is never updated from this method.

Implements tram::Entity.

Member Data Documentation

◆ collmodel

name_t tram::Ext::Kitchensink::TriggerAutosave::collmodel
protected

◆ model

name_t tram::Ext::Kitchensink::TriggerAutosave::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Kitchensink::TriggerAutosave::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Kitchensink::TriggerAutosave::rendercomponent
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_trigger_hurt-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::TriggerHurt Member List

This is the complete list of members for tram::Ext::Kitchensink::TriggerHurt, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
collmodeltram::Ext::Kitchensink::TriggerHurtprotected
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()=0tram::Entitypure virtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Ext::Kitchensink::TriggerHurtvirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Kitchensink::TriggerHurtvirtual
modeltram::Ext::Kitchensink::TriggerHurtprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physicscomponenttram::Ext::Kitchensink::TriggerHurtprotected
Register()tram::Ext::Kitchensink::TriggerHurtstatic
RegisterType(name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Ext::Kitchensink::TriggerHurtprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Kitchensink::TriggerHurtvirtual
SetAutoLoad(bool is)tram::Entityinline
SetFlag(uint32_t flag, bool value)tram::Entityinlineprotected
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Kitchensink::TriggerHurtvirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
TriggerHurt(const SharedEntityData &, const ValueArray &)tram::Ext::Kitchensink::TriggerHurt
Unload()tram::Ext::Kitchensink::TriggerHurtvirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateParameters()tram::Ext::Kitchensink::TriggerHurtvirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_trigger_hurt.html ================================================ Tramway SDK: tram::Ext::Kitchensink::TriggerHurt Class Reference
Tramway SDK v0.1.1
tram::Ext::Kitchensink::TriggerHurt Class Reference

#include <entities.h>

Inheritance diagram for tram::Ext::Kitchensink::TriggerHurt:
tram::Entity

Public Member Functions

 TriggerHurt (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 Called when Entity::UpdateTransform is called. More...
 
void SetParameters ()
 Called when either Entity::SetLocation or Entity::SetRotation is called. More...
 
void Load ()
 Loads an entity. More...
 
void Unload ()
 Unloads an entity. More...
 
void Serialize ()
 
void MessageHandler (Message &msg)
 Allows entities to receive messages. More...
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 Destructs the entity. More...
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 Returns the entity's parent cell. More...
 
bool IsLoaded () const
 Returns the entity load status. More...
 
bool IsAutoLoad () const
 Returns the auto load flag status. More...
 
bool IsPersistent () const
 Returns the persistence status of an entity. More...
 
bool IsChanged () const
 
bool IsDeleted () const
 Returns the entity deletion status. More...
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 Purges the entity. More...
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 Allows entities to receive events. More...
 
virtual name_t GetType ()=0
 Returns the type of the entity. More...
 
void CheckTransition ()
 Check whether an entity has entered a different cell. More...
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 Updates entities. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)
 Registers a new entity type. More...
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 Creates an entity. More...
 
static EntityFind (id_t entity_id)
 Finds the entity by its ID number. More...
 
static EntityFind (name_t entity_name)
 Finds the entity by its name. More...
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t collmodel
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 Registers the entity. More...
 
void Unregister ()
 Unregisters the entity. More...
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 
void SetFlag (uint32_t flag, bool value)
 

Constructor & Destructor Documentation

◆ TriggerHurt()

tram::Ext::Kitchensink::TriggerHurt::TriggerHurt ( const SharedEntityData ,
const ValueArray  
)

Member Function Documentation

◆ Load()

void tram::Ext::Kitchensink::TriggerHurt::Load ( )
virtual

Loads an entity.

Usually the Load() method for an entity type will set up its components, event listeners, etc. After being loaded, the entity will be ready for simulation.

When implementing this method, make sure to flag the entity with the LOADED flag, so that world streaming system doesn't try to load your entity twice.

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Kitchensink::TriggerHurt::MessageHandler ( Message msg)
virtual

Allows entities to receive messages.

Whenever an entity is sent a Message, once the Message::Dispatch() function has been called, the entity will gets the message passed to it through this method.

Implements tram::Entity.

◆ Register()

static void tram::Ext::Kitchensink::TriggerHurt::Register ( )
static

◆ Serialize()

void tram::Ext::Kitchensink::TriggerHurt::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Kitchensink::TriggerHurt::SetParameters ( )
virtual

Called when either Entity::SetLocation or Entity::SetRotation is called.

Usually this method is used to relocate or rerotate an entity.

If the entity has a PhysicsComponent, its position or rotation is usually set from this method, otherwise in the next Physics update step, the entity's previous rotation and location will be restored.

Implements tram::Entity.

◆ Unload()

void tram::Ext::Kitchensink::TriggerHurt::Unload ( )
virtual

Unloads an entity.

Usually the Load() method for an entity type will destroy its its components, event listeners, etc. After being unloaded, the entity have been removed from the simulation.

When implementing this method, make sure to clear your entity's LOADED flag, so that world streaming system can load the entity again.

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Kitchensink::TriggerHurt::UpdateParameters ( )
virtual

Called when Entity::UpdateTransform is called.

From the runtime's side, only the Physics system will call the Entity::UpdateTransform() method, and through it, this method.

Usually this method is used to forward the entity's new position and rotation to its RenderComponent, if it has one.

If the entity has a PhysicsComponent, its position or rotation is never updated from this method.

Implements tram::Entity.

Member Data Documentation

◆ collmodel

name_t tram::Ext::Kitchensink::TriggerHurt::collmodel
protected

◆ model

name_t tram::Ext::Kitchensink::TriggerHurt::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Kitchensink::TriggerHurt::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Kitchensink::TriggerHurt::rendercomponent
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_trigger_multiple-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::TriggerMultiple Member List

This is the complete list of members for tram::Ext::Kitchensink::TriggerMultiple, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
collmodeltram::Ext::Kitchensink::TriggerMultipleprotected
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()=0tram::Entitypure virtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Ext::Kitchensink::TriggerMultiplevirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Kitchensink::TriggerMultiplevirtual
modeltram::Ext::Kitchensink::TriggerMultipleprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physicscomponenttram::Ext::Kitchensink::TriggerMultipleprotected
Register()tram::Ext::Kitchensink::TriggerMultiplestatic
RegisterType(name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Ext::Kitchensink::TriggerMultipleprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Kitchensink::TriggerMultiplevirtual
SetAutoLoad(bool is)tram::Entityinline
SetFlag(uint32_t flag, bool value)tram::Entityinlineprotected
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Kitchensink::TriggerMultiplevirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
TriggerMultiple(const SharedEntityData &, const ValueArray &)tram::Ext::Kitchensink::TriggerMultiple
Unload()tram::Ext::Kitchensink::TriggerMultiplevirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateParameters()tram::Ext::Kitchensink::TriggerMultiplevirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_trigger_multiple.html ================================================ Tramway SDK: tram::Ext::Kitchensink::TriggerMultiple Class Reference
Tramway SDK v0.1.1
tram::Ext::Kitchensink::TriggerMultiple Class Reference

#include <entities.h>

Inheritance diagram for tram::Ext::Kitchensink::TriggerMultiple:
tram::Entity

Public Member Functions

 TriggerMultiple (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 Called when Entity::UpdateTransform is called. More...
 
void SetParameters ()
 Called when either Entity::SetLocation or Entity::SetRotation is called. More...
 
void Load ()
 Loads an entity. More...
 
void Unload ()
 Unloads an entity. More...
 
void Serialize ()
 
void MessageHandler (Message &msg)
 Allows entities to receive messages. More...
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 Destructs the entity. More...
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 Returns the entity's parent cell. More...
 
bool IsLoaded () const
 Returns the entity load status. More...
 
bool IsAutoLoad () const
 Returns the auto load flag status. More...
 
bool IsPersistent () const
 Returns the persistence status of an entity. More...
 
bool IsChanged () const
 
bool IsDeleted () const
 Returns the entity deletion status. More...
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 Purges the entity. More...
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 Allows entities to receive events. More...
 
virtual name_t GetType ()=0
 Returns the type of the entity. More...
 
void CheckTransition ()
 Check whether an entity has entered a different cell. More...
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 Updates entities. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)
 Registers a new entity type. More...
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 Creates an entity. More...
 
static EntityFind (id_t entity_id)
 Finds the entity by its ID number. More...
 
static EntityFind (name_t entity_name)
 Finds the entity by its name. More...
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t collmodel
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 Registers the entity. More...
 
void Unregister ()
 Unregisters the entity. More...
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 
void SetFlag (uint32_t flag, bool value)
 

Constructor & Destructor Documentation

◆ TriggerMultiple()

tram::Ext::Kitchensink::TriggerMultiple::TriggerMultiple ( const SharedEntityData ,
const ValueArray  
)

Member Function Documentation

◆ Load()

void tram::Ext::Kitchensink::TriggerMultiple::Load ( )
virtual

Loads an entity.

Usually the Load() method for an entity type will set up its components, event listeners, etc. After being loaded, the entity will be ready for simulation.

When implementing this method, make sure to flag the entity with the LOADED flag, so that world streaming system doesn't try to load your entity twice.

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Kitchensink::TriggerMultiple::MessageHandler ( Message msg)
virtual

Allows entities to receive messages.

Whenever an entity is sent a Message, once the Message::Dispatch() function has been called, the entity will gets the message passed to it through this method.

Implements tram::Entity.

◆ Register()

static void tram::Ext::Kitchensink::TriggerMultiple::Register ( )
static

◆ Serialize()

void tram::Ext::Kitchensink::TriggerMultiple::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Kitchensink::TriggerMultiple::SetParameters ( )
virtual

Called when either Entity::SetLocation or Entity::SetRotation is called.

Usually this method is used to relocate or rerotate an entity.

If the entity has a PhysicsComponent, its position or rotation is usually set from this method, otherwise in the next Physics update step, the entity's previous rotation and location will be restored.

Implements tram::Entity.

◆ Unload()

void tram::Ext::Kitchensink::TriggerMultiple::Unload ( )
virtual

Unloads an entity.

Usually the Load() method for an entity type will destroy its its components, event listeners, etc. After being unloaded, the entity have been removed from the simulation.

When implementing this method, make sure to clear your entity's LOADED flag, so that world streaming system can load the entity again.

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Kitchensink::TriggerMultiple::UpdateParameters ( )
virtual

Called when Entity::UpdateTransform is called.

From the runtime's side, only the Physics system will call the Entity::UpdateTransform() method, and through it, this method.

Usually this method is used to forward the entity's new position and rotation to its RenderComponent, if it has one.

If the entity has a PhysicsComponent, its position or rotation is never updated from this method.

Implements tram::Entity.

Member Data Documentation

◆ collmodel

name_t tram::Ext::Kitchensink::TriggerMultiple::collmodel
protected

◆ model

name_t tram::Ext::Kitchensink::TriggerMultiple::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Kitchensink::TriggerMultiple::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Kitchensink::TriggerMultiple::rendercomponent
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_trigger_once-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::TriggerOnce Member List

This is the complete list of members for tram::Ext::Kitchensink::TriggerOnce, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
collmodeltram::Ext::Kitchensink::TriggerOnceprotected
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()=0tram::Entitypure virtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Ext::Kitchensink::TriggerOncevirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Kitchensink::TriggerOncevirtual
modeltram::Ext::Kitchensink::TriggerOnceprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physicscomponenttram::Ext::Kitchensink::TriggerOnceprotected
Register()tram::Ext::Kitchensink::TriggerOncestatic
RegisterType(name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Ext::Kitchensink::TriggerOnceprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Kitchensink::TriggerOncevirtual
SetAutoLoad(bool is)tram::Entityinline
SetFlag(uint32_t flag, bool value)tram::Entityinlineprotected
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Kitchensink::TriggerOncevirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
TriggerOnce(const SharedEntityData &, const ValueArray &)tram::Ext::Kitchensink::TriggerOnce
Unload()tram::Ext::Kitchensink::TriggerOncevirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateParameters()tram::Ext::Kitchensink::TriggerOncevirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_trigger_once.html ================================================ Tramway SDK: tram::Ext::Kitchensink::TriggerOnce Class Reference
Tramway SDK v0.1.1
tram::Ext::Kitchensink::TriggerOnce Class Reference

#include <entities.h>

Inheritance diagram for tram::Ext::Kitchensink::TriggerOnce:
tram::Entity

Public Member Functions

 TriggerOnce (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 Called when Entity::UpdateTransform is called. More...
 
void SetParameters ()
 Called when either Entity::SetLocation or Entity::SetRotation is called. More...
 
void Load ()
 Loads an entity. More...
 
void Unload ()
 Unloads an entity. More...
 
void Serialize ()
 
void MessageHandler (Message &msg)
 Allows entities to receive messages. More...
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 Destructs the entity. More...
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 Returns the entity's parent cell. More...
 
bool IsLoaded () const
 Returns the entity load status. More...
 
bool IsAutoLoad () const
 Returns the auto load flag status. More...
 
bool IsPersistent () const
 Returns the persistence status of an entity. More...
 
bool IsChanged () const
 
bool IsDeleted () const
 Returns the entity deletion status. More...
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 Purges the entity. More...
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 Allows entities to receive events. More...
 
virtual name_t GetType ()=0
 Returns the type of the entity. More...
 
void CheckTransition ()
 Check whether an entity has entered a different cell. More...
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 Updates entities. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)
 Registers a new entity type. More...
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 Creates an entity. More...
 
static EntityFind (id_t entity_id)
 Finds the entity by its ID number. More...
 
static EntityFind (name_t entity_name)
 Finds the entity by its name. More...
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t collmodel
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 Registers the entity. More...
 
void Unregister ()
 Unregisters the entity. More...
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 
void SetFlag (uint32_t flag, bool value)
 

Constructor & Destructor Documentation

◆ TriggerOnce()

tram::Ext::Kitchensink::TriggerOnce::TriggerOnce ( const SharedEntityData ,
const ValueArray  
)

Member Function Documentation

◆ Load()

void tram::Ext::Kitchensink::TriggerOnce::Load ( )
virtual

Loads an entity.

Usually the Load() method for an entity type will set up its components, event listeners, etc. After being loaded, the entity will be ready for simulation.

When implementing this method, make sure to flag the entity with the LOADED flag, so that world streaming system doesn't try to load your entity twice.

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Kitchensink::TriggerOnce::MessageHandler ( Message msg)
virtual

Allows entities to receive messages.

Whenever an entity is sent a Message, once the Message::Dispatch() function has been called, the entity will gets the message passed to it through this method.

Implements tram::Entity.

◆ Register()

static void tram::Ext::Kitchensink::TriggerOnce::Register ( )
static

◆ Serialize()

void tram::Ext::Kitchensink::TriggerOnce::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Kitchensink::TriggerOnce::SetParameters ( )
virtual

Called when either Entity::SetLocation or Entity::SetRotation is called.

Usually this method is used to relocate or rerotate an entity.

If the entity has a PhysicsComponent, its position or rotation is usually set from this method, otherwise in the next Physics update step, the entity's previous rotation and location will be restored.

Implements tram::Entity.

◆ Unload()

void tram::Ext::Kitchensink::TriggerOnce::Unload ( )
virtual

Unloads an entity.

Usually the Load() method for an entity type will destroy its its components, event listeners, etc. After being unloaded, the entity have been removed from the simulation.

When implementing this method, make sure to clear your entity's LOADED flag, so that world streaming system can load the entity again.

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Kitchensink::TriggerOnce::UpdateParameters ( )
virtual

Called when Entity::UpdateTransform is called.

From the runtime's side, only the Physics system will call the Entity::UpdateTransform() method, and through it, this method.

Usually this method is used to forward the entity's new position and rotation to its RenderComponent, if it has one.

If the entity has a PhysicsComponent, its position or rotation is never updated from this method.

Implements tram::Entity.

Member Data Documentation

◆ collmodel

name_t tram::Ext::Kitchensink::TriggerOnce::collmodel
protected

◆ model

name_t tram::Ext::Kitchensink::TriggerOnce::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Kitchensink::TriggerOnce::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Kitchensink::TriggerOnce::rendercomponent
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_trigger_player_movement-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::TriggerPlayerMovement Member List

This is the complete list of members for tram::Ext::Kitchensink::TriggerPlayerMovement, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
collmodeltram::Ext::Kitchensink::TriggerPlayerMovementprotected
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()=0tram::Entitypure virtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Ext::Kitchensink::TriggerPlayerMovementvirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Kitchensink::TriggerPlayerMovementvirtual
modeltram::Ext::Kitchensink::TriggerPlayerMovementprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physicscomponenttram::Ext::Kitchensink::TriggerPlayerMovementprotected
Register()tram::Ext::Kitchensink::TriggerPlayerMovementstatic
RegisterType(name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Ext::Kitchensink::TriggerPlayerMovementprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Kitchensink::TriggerPlayerMovementvirtual
SetAutoLoad(bool is)tram::Entityinline
SetFlag(uint32_t flag, bool value)tram::Entityinlineprotected
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Kitchensink::TriggerPlayerMovementvirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
TriggerPlayerMovement(const SharedEntityData &, const ValueArray &)tram::Ext::Kitchensink::TriggerPlayerMovement
Unload()tram::Ext::Kitchensink::TriggerPlayerMovementvirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateParameters()tram::Ext::Kitchensink::TriggerPlayerMovementvirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_trigger_player_movement.html ================================================ Tramway SDK: tram::Ext::Kitchensink::TriggerPlayerMovement Class Reference
Tramway SDK v0.1.1
tram::Ext::Kitchensink::TriggerPlayerMovement Class Reference

#include <entities.h>

Inheritance diagram for tram::Ext::Kitchensink::TriggerPlayerMovement:
tram::Entity

Public Member Functions

 TriggerPlayerMovement (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 Called when Entity::UpdateTransform is called. More...
 
void SetParameters ()
 Called when either Entity::SetLocation or Entity::SetRotation is called. More...
 
void Load ()
 Loads an entity. More...
 
void Unload ()
 Unloads an entity. More...
 
void Serialize ()
 
void MessageHandler (Message &msg)
 Allows entities to receive messages. More...
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 Destructs the entity. More...
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 Returns the entity's parent cell. More...
 
bool IsLoaded () const
 Returns the entity load status. More...
 
bool IsAutoLoad () const
 Returns the auto load flag status. More...
 
bool IsPersistent () const
 Returns the persistence status of an entity. More...
 
bool IsChanged () const
 
bool IsDeleted () const
 Returns the entity deletion status. More...
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 Purges the entity. More...
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 Allows entities to receive events. More...
 
virtual name_t GetType ()=0
 Returns the type of the entity. More...
 
void CheckTransition ()
 Check whether an entity has entered a different cell. More...
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 Updates entities. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)
 Registers a new entity type. More...
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 Creates an entity. More...
 
static EntityFind (id_t entity_id)
 Finds the entity by its ID number. More...
 
static EntityFind (name_t entity_name)
 Finds the entity by its name. More...
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t collmodel
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 Registers the entity. More...
 
void Unregister ()
 Unregisters the entity. More...
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 
void SetFlag (uint32_t flag, bool value)
 

Constructor & Destructor Documentation

◆ TriggerPlayerMovement()

tram::Ext::Kitchensink::TriggerPlayerMovement::TriggerPlayerMovement ( const SharedEntityData ,
const ValueArray  
)

Member Function Documentation

◆ Load()

void tram::Ext::Kitchensink::TriggerPlayerMovement::Load ( )
virtual

Loads an entity.

Usually the Load() method for an entity type will set up its components, event listeners, etc. After being loaded, the entity will be ready for simulation.

When implementing this method, make sure to flag the entity with the LOADED flag, so that world streaming system doesn't try to load your entity twice.

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Kitchensink::TriggerPlayerMovement::MessageHandler ( Message msg)
virtual

Allows entities to receive messages.

Whenever an entity is sent a Message, once the Message::Dispatch() function has been called, the entity will gets the message passed to it through this method.

Implements tram::Entity.

◆ Register()

static void tram::Ext::Kitchensink::TriggerPlayerMovement::Register ( )
static

◆ Serialize()

void tram::Ext::Kitchensink::TriggerPlayerMovement::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Kitchensink::TriggerPlayerMovement::SetParameters ( )
virtual

Called when either Entity::SetLocation or Entity::SetRotation is called.

Usually this method is used to relocate or rerotate an entity.

If the entity has a PhysicsComponent, its position or rotation is usually set from this method, otherwise in the next Physics update step, the entity's previous rotation and location will be restored.

Implements tram::Entity.

◆ Unload()

void tram::Ext::Kitchensink::TriggerPlayerMovement::Unload ( )
virtual

Unloads an entity.

Usually the Load() method for an entity type will destroy its its components, event listeners, etc. After being unloaded, the entity have been removed from the simulation.

When implementing this method, make sure to clear your entity's LOADED flag, so that world streaming system can load the entity again.

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Kitchensink::TriggerPlayerMovement::UpdateParameters ( )
virtual

Called when Entity::UpdateTransform is called.

From the runtime's side, only the Physics system will call the Entity::UpdateTransform() method, and through it, this method.

Usually this method is used to forward the entity's new position and rotation to its RenderComponent, if it has one.

If the entity has a PhysicsComponent, its position or rotation is never updated from this method.

Implements tram::Entity.

Member Data Documentation

◆ collmodel

name_t tram::Ext::Kitchensink::TriggerPlayerMovement::collmodel
protected

◆ model

name_t tram::Ext::Kitchensink::TriggerPlayerMovement::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Kitchensink::TriggerPlayerMovement::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Kitchensink::TriggerPlayerMovement::rendercomponent
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_trigger_push-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::TriggerPush Member List

This is the complete list of members for tram::Ext::Kitchensink::TriggerPush, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
collmodeltram::Ext::Kitchensink::TriggerPushprotected
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()=0tram::Entitypure virtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Ext::Kitchensink::TriggerPushvirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Kitchensink::TriggerPushvirtual
modeltram::Ext::Kitchensink::TriggerPushprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physicscomponenttram::Ext::Kitchensink::TriggerPushprotected
Register()tram::Ext::Kitchensink::TriggerPushstatic
RegisterType(name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Ext::Kitchensink::TriggerPushprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Kitchensink::TriggerPushvirtual
SetAutoLoad(bool is)tram::Entityinline
SetFlag(uint32_t flag, bool value)tram::Entityinlineprotected
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Kitchensink::TriggerPushvirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
TriggerPush(const SharedEntityData &, const ValueArray &)tram::Ext::Kitchensink::TriggerPush
Unload()tram::Ext::Kitchensink::TriggerPushvirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateParameters()tram::Ext::Kitchensink::TriggerPushvirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_trigger_push.html ================================================ Tramway SDK: tram::Ext::Kitchensink::TriggerPush Class Reference
Tramway SDK v0.1.1
tram::Ext::Kitchensink::TriggerPush Class Reference

#include <entities.h>

Inheritance diagram for tram::Ext::Kitchensink::TriggerPush:
tram::Entity

Public Member Functions

 TriggerPush (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 Called when Entity::UpdateTransform is called. More...
 
void SetParameters ()
 Called when either Entity::SetLocation or Entity::SetRotation is called. More...
 
void Load ()
 Loads an entity. More...
 
void Unload ()
 Unloads an entity. More...
 
void Serialize ()
 
void MessageHandler (Message &msg)
 Allows entities to receive messages. More...
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 Destructs the entity. More...
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 Returns the entity's parent cell. More...
 
bool IsLoaded () const
 Returns the entity load status. More...
 
bool IsAutoLoad () const
 Returns the auto load flag status. More...
 
bool IsPersistent () const
 Returns the persistence status of an entity. More...
 
bool IsChanged () const
 
bool IsDeleted () const
 Returns the entity deletion status. More...
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 Purges the entity. More...
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 Allows entities to receive events. More...
 
virtual name_t GetType ()=0
 Returns the type of the entity. More...
 
void CheckTransition ()
 Check whether an entity has entered a different cell. More...
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 Updates entities. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)
 Registers a new entity type. More...
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 Creates an entity. More...
 
static EntityFind (id_t entity_id)
 Finds the entity by its ID number. More...
 
static EntityFind (name_t entity_name)
 Finds the entity by its name. More...
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t collmodel
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 Registers the entity. More...
 
void Unregister ()
 Unregisters the entity. More...
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 
void SetFlag (uint32_t flag, bool value)
 

Constructor & Destructor Documentation

◆ TriggerPush()

tram::Ext::Kitchensink::TriggerPush::TriggerPush ( const SharedEntityData ,
const ValueArray  
)

Member Function Documentation

◆ Load()

void tram::Ext::Kitchensink::TriggerPush::Load ( )
virtual

Loads an entity.

Usually the Load() method for an entity type will set up its components, event listeners, etc. After being loaded, the entity will be ready for simulation.

When implementing this method, make sure to flag the entity with the LOADED flag, so that world streaming system doesn't try to load your entity twice.

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Kitchensink::TriggerPush::MessageHandler ( Message msg)
virtual

Allows entities to receive messages.

Whenever an entity is sent a Message, once the Message::Dispatch() function has been called, the entity will gets the message passed to it through this method.

Implements tram::Entity.

◆ Register()

static void tram::Ext::Kitchensink::TriggerPush::Register ( )
static

◆ Serialize()

void tram::Ext::Kitchensink::TriggerPush::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Kitchensink::TriggerPush::SetParameters ( )
virtual

Called when either Entity::SetLocation or Entity::SetRotation is called.

Usually this method is used to relocate or rerotate an entity.

If the entity has a PhysicsComponent, its position or rotation is usually set from this method, otherwise in the next Physics update step, the entity's previous rotation and location will be restored.

Implements tram::Entity.

◆ Unload()

void tram::Ext::Kitchensink::TriggerPush::Unload ( )
virtual

Unloads an entity.

Usually the Load() method for an entity type will destroy its its components, event listeners, etc. After being unloaded, the entity have been removed from the simulation.

When implementing this method, make sure to clear your entity's LOADED flag, so that world streaming system can load the entity again.

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Kitchensink::TriggerPush::UpdateParameters ( )
virtual

Called when Entity::UpdateTransform is called.

From the runtime's side, only the Physics system will call the Entity::UpdateTransform() method, and through it, this method.

Usually this method is used to forward the entity's new position and rotation to its RenderComponent, if it has one.

If the entity has a PhysicsComponent, its position or rotation is never updated from this method.

Implements tram::Entity.

Member Data Documentation

◆ collmodel

name_t tram::Ext::Kitchensink::TriggerPush::collmodel
protected

◆ model

name_t tram::Ext::Kitchensink::TriggerPush::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Kitchensink::TriggerPush::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Kitchensink::TriggerPush::rendercomponent
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_trigger_remove-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::TriggerRemove Member List

This is the complete list of members for tram::Ext::Kitchensink::TriggerRemove, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
collmodeltram::Ext::Kitchensink::TriggerRemoveprotected
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()=0tram::Entitypure virtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Ext::Kitchensink::TriggerRemovevirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Kitchensink::TriggerRemovevirtual
modeltram::Ext::Kitchensink::TriggerRemoveprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physicscomponenttram::Ext::Kitchensink::TriggerRemoveprotected
Register()tram::Ext::Kitchensink::TriggerRemovestatic
RegisterType(name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Ext::Kitchensink::TriggerRemoveprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Kitchensink::TriggerRemovevirtual
SetAutoLoad(bool is)tram::Entityinline
SetFlag(uint32_t flag, bool value)tram::Entityinlineprotected
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Kitchensink::TriggerRemovevirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
TriggerRemove(const SharedEntityData &, const ValueArray &)tram::Ext::Kitchensink::TriggerRemove
Unload()tram::Ext::Kitchensink::TriggerRemovevirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateParameters()tram::Ext::Kitchensink::TriggerRemovevirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_trigger_remove.html ================================================ Tramway SDK: tram::Ext::Kitchensink::TriggerRemove Class Reference
Tramway SDK v0.1.1
tram::Ext::Kitchensink::TriggerRemove Class Reference

#include <entities.h>

Inheritance diagram for tram::Ext::Kitchensink::TriggerRemove:
tram::Entity

Public Member Functions

 TriggerRemove (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 Called when Entity::UpdateTransform is called. More...
 
void SetParameters ()
 Called when either Entity::SetLocation or Entity::SetRotation is called. More...
 
void Load ()
 Loads an entity. More...
 
void Unload ()
 Unloads an entity. More...
 
void Serialize ()
 
void MessageHandler (Message &msg)
 Allows entities to receive messages. More...
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 Destructs the entity. More...
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 Returns the entity's parent cell. More...
 
bool IsLoaded () const
 Returns the entity load status. More...
 
bool IsAutoLoad () const
 Returns the auto load flag status. More...
 
bool IsPersistent () const
 Returns the persistence status of an entity. More...
 
bool IsChanged () const
 
bool IsDeleted () const
 Returns the entity deletion status. More...
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 Purges the entity. More...
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 Allows entities to receive events. More...
 
virtual name_t GetType ()=0
 Returns the type of the entity. More...
 
void CheckTransition ()
 Check whether an entity has entered a different cell. More...
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 Updates entities. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)
 Registers a new entity type. More...
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 Creates an entity. More...
 
static EntityFind (id_t entity_id)
 Finds the entity by its ID number. More...
 
static EntityFind (name_t entity_name)
 Finds the entity by its name. More...
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t collmodel
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 Registers the entity. More...
 
void Unregister ()
 Unregisters the entity. More...
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 
void SetFlag (uint32_t flag, bool value)
 

Constructor & Destructor Documentation

◆ TriggerRemove()

tram::Ext::Kitchensink::TriggerRemove::TriggerRemove ( const SharedEntityData ,
const ValueArray  
)

Member Function Documentation

◆ Load()

void tram::Ext::Kitchensink::TriggerRemove::Load ( )
virtual

Loads an entity.

Usually the Load() method for an entity type will set up its components, event listeners, etc. After being loaded, the entity will be ready for simulation.

When implementing this method, make sure to flag the entity with the LOADED flag, so that world streaming system doesn't try to load your entity twice.

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Kitchensink::TriggerRemove::MessageHandler ( Message msg)
virtual

Allows entities to receive messages.

Whenever an entity is sent a Message, once the Message::Dispatch() function has been called, the entity will gets the message passed to it through this method.

Implements tram::Entity.

◆ Register()

static void tram::Ext::Kitchensink::TriggerRemove::Register ( )
static

◆ Serialize()

void tram::Ext::Kitchensink::TriggerRemove::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Kitchensink::TriggerRemove::SetParameters ( )
virtual

Called when either Entity::SetLocation or Entity::SetRotation is called.

Usually this method is used to relocate or rerotate an entity.

If the entity has a PhysicsComponent, its position or rotation is usually set from this method, otherwise in the next Physics update step, the entity's previous rotation and location will be restored.

Implements tram::Entity.

◆ Unload()

void tram::Ext::Kitchensink::TriggerRemove::Unload ( )
virtual

Unloads an entity.

Usually the Load() method for an entity type will destroy its its components, event listeners, etc. After being unloaded, the entity have been removed from the simulation.

When implementing this method, make sure to clear your entity's LOADED flag, so that world streaming system can load the entity again.

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Kitchensink::TriggerRemove::UpdateParameters ( )
virtual

Called when Entity::UpdateTransform is called.

From the runtime's side, only the Physics system will call the Entity::UpdateTransform() method, and through it, this method.

Usually this method is used to forward the entity's new position and rotation to its RenderComponent, if it has one.

If the entity has a PhysicsComponent, its position or rotation is never updated from this method.

Implements tram::Entity.

Member Data Documentation

◆ collmodel

name_t tram::Ext::Kitchensink::TriggerRemove::collmodel
protected

◆ model

name_t tram::Ext::Kitchensink::TriggerRemove::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Kitchensink::TriggerRemove::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Kitchensink::TriggerRemove::rendercomponent
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_trigger_teleport-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::TriggerTeleport Member List

This is the complete list of members for tram::Ext::Kitchensink::TriggerTeleport, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
collmodeltram::Ext::Kitchensink::TriggerTeleportprotected
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()=0tram::Entitypure virtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Ext::Kitchensink::TriggerTeleportvirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Kitchensink::TriggerTeleportvirtual
modeltram::Ext::Kitchensink::TriggerTeleportprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physicscomponenttram::Ext::Kitchensink::TriggerTeleportprotected
Register()tram::Ext::Kitchensink::TriggerTeleportstatic
RegisterType(name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Ext::Kitchensink::TriggerTeleportprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Kitchensink::TriggerTeleportvirtual
SetAutoLoad(bool is)tram::Entityinline
SetFlag(uint32_t flag, bool value)tram::Entityinlineprotected
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Kitchensink::TriggerTeleportvirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
TriggerTeleport(const SharedEntityData &, const ValueArray &)tram::Ext::Kitchensink::TriggerTeleport
Unload()tram::Ext::Kitchensink::TriggerTeleportvirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateParameters()tram::Ext::Kitchensink::TriggerTeleportvirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_trigger_teleport.html ================================================ Tramway SDK: tram::Ext::Kitchensink::TriggerTeleport Class Reference
Tramway SDK v0.1.1
tram::Ext::Kitchensink::TriggerTeleport Class Reference

#include <entities.h>

Inheritance diagram for tram::Ext::Kitchensink::TriggerTeleport:
tram::Entity

Public Member Functions

 TriggerTeleport (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 Called when Entity::UpdateTransform is called. More...
 
void SetParameters ()
 Called when either Entity::SetLocation or Entity::SetRotation is called. More...
 
void Load ()
 Loads an entity. More...
 
void Unload ()
 Unloads an entity. More...
 
void Serialize ()
 
void MessageHandler (Message &msg)
 Allows entities to receive messages. More...
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 Destructs the entity. More...
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 Returns the entity's parent cell. More...
 
bool IsLoaded () const
 Returns the entity load status. More...
 
bool IsAutoLoad () const
 Returns the auto load flag status. More...
 
bool IsPersistent () const
 Returns the persistence status of an entity. More...
 
bool IsChanged () const
 
bool IsDeleted () const
 Returns the entity deletion status. More...
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 Purges the entity. More...
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 Allows entities to receive events. More...
 
virtual name_t GetType ()=0
 Returns the type of the entity. More...
 
void CheckTransition ()
 Check whether an entity has entered a different cell. More...
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 Updates entities. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)
 Registers a new entity type. More...
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 Creates an entity. More...
 
static EntityFind (id_t entity_id)
 Finds the entity by its ID number. More...
 
static EntityFind (name_t entity_name)
 Finds the entity by its name. More...
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t collmodel
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 Registers the entity. More...
 
void Unregister ()
 Unregisters the entity. More...
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 
void SetFlag (uint32_t flag, bool value)
 

Constructor & Destructor Documentation

◆ TriggerTeleport()

tram::Ext::Kitchensink::TriggerTeleport::TriggerTeleport ( const SharedEntityData ,
const ValueArray  
)

Member Function Documentation

◆ Load()

void tram::Ext::Kitchensink::TriggerTeleport::Load ( )
virtual

Loads an entity.

Usually the Load() method for an entity type will set up its components, event listeners, etc. After being loaded, the entity will be ready for simulation.

When implementing this method, make sure to flag the entity with the LOADED flag, so that world streaming system doesn't try to load your entity twice.

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Kitchensink::TriggerTeleport::MessageHandler ( Message msg)
virtual

Allows entities to receive messages.

Whenever an entity is sent a Message, once the Message::Dispatch() function has been called, the entity will gets the message passed to it through this method.

Implements tram::Entity.

◆ Register()

static void tram::Ext::Kitchensink::TriggerTeleport::Register ( )
static

◆ Serialize()

void tram::Ext::Kitchensink::TriggerTeleport::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Kitchensink::TriggerTeleport::SetParameters ( )
virtual

Called when either Entity::SetLocation or Entity::SetRotation is called.

Usually this method is used to relocate or rerotate an entity.

If the entity has a PhysicsComponent, its position or rotation is usually set from this method, otherwise in the next Physics update step, the entity's previous rotation and location will be restored.

Implements tram::Entity.

◆ Unload()

void tram::Ext::Kitchensink::TriggerTeleport::Unload ( )
virtual

Unloads an entity.

Usually the Load() method for an entity type will destroy its its components, event listeners, etc. After being unloaded, the entity have been removed from the simulation.

When implementing this method, make sure to clear your entity's LOADED flag, so that world streaming system can load the entity again.

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Kitchensink::TriggerTeleport::UpdateParameters ( )
virtual

Called when Entity::UpdateTransform is called.

From the runtime's side, only the Physics system will call the Entity::UpdateTransform() method, and through it, this method.

Usually this method is used to forward the entity's new position and rotation to its RenderComponent, if it has one.

If the entity has a PhysicsComponent, its position or rotation is never updated from this method.

Implements tram::Entity.

Member Data Documentation

◆ collmodel

name_t tram::Ext::Kitchensink::TriggerTeleport::collmodel
protected

◆ model

name_t tram::Ext::Kitchensink::TriggerTeleport::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Kitchensink::TriggerTeleport::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Kitchensink::TriggerTeleport::rendercomponent
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_water-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Kitchensink::Water Member List

This is the complete list of members for tram::Ext::Kitchensink::Water, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
collmodeltram::Ext::Kitchensink::Waterprotected
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()=0tram::Entitypure virtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Ext::Kitchensink::Watervirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Ext::Kitchensink::Watervirtual
modeltram::Ext::Kitchensink::Waterprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physicscomponenttram::Ext::Kitchensink::Waterprotected
Register()tram::Ext::Kitchensink::Waterstatic
RegisterType(name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Ext::Kitchensink::Waterprotected
rotationtram::Entityprotected
Serialize()tram::Ext::Kitchensink::Watervirtual
SetAutoLoad(bool is)tram::Entityinline
SetFlag(uint32_t flag, bool value)tram::Entityinlineprotected
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Ext::Kitchensink::Watervirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
Unload()tram::Ext::Kitchensink::Watervirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateParameters()tram::Ext::Kitchensink::Watervirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Water(const SharedEntityData &, const ValueArray &)tram::Ext::Kitchensink::Water
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_kitchensink_1_1_water.html ================================================ Tramway SDK: tram::Ext::Kitchensink::Water Class Reference
Tramway SDK v0.1.1

#include <entities.h>

Inheritance diagram for tram::Ext::Kitchensink::Water:
tram::Entity

Public Member Functions

 Water (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 Called when Entity::UpdateTransform is called. More...
 
void SetParameters ()
 Called when either Entity::SetLocation or Entity::SetRotation is called. More...
 
void Load ()
 Loads an entity. More...
 
void Unload ()
 Unloads an entity. More...
 
void Serialize ()
 
void MessageHandler (Message &msg)
 Allows entities to receive messages. More...
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 Destructs the entity. More...
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 Returns the entity's parent cell. More...
 
bool IsLoaded () const
 Returns the entity load status. More...
 
bool IsAutoLoad () const
 Returns the auto load flag status. More...
 
bool IsPersistent () const
 Returns the persistence status of an entity. More...
 
bool IsChanged () const
 
bool IsDeleted () const
 Returns the entity deletion status. More...
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 Purges the entity. More...
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 Allows entities to receive events. More...
 
virtual name_t GetType ()=0
 Returns the type of the entity. More...
 
void CheckTransition ()
 Check whether an entity has entered a different cell. More...
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 Updates entities. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)
 Registers a new entity type. More...
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 Creates an entity. More...
 
static EntityFind (id_t entity_id)
 Finds the entity by its ID number. More...
 
static EntityFind (name_t entity_name)
 Finds the entity by its name. More...
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t collmodel
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 Registers the entity. More...
 
void Unregister ()
 Unregisters the entity. More...
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 
void SetFlag (uint32_t flag, bool value)
 

Constructor & Destructor Documentation

◆ Water()

tram::Ext::Kitchensink::Water::Water ( const SharedEntityData ,
const ValueArray  
)

Member Function Documentation

◆ Load()

void tram::Ext::Kitchensink::Water::Load ( )
virtual

Loads an entity.

Usually the Load() method for an entity type will set up its components, event listeners, etc. After being loaded, the entity will be ready for simulation.

When implementing this method, make sure to flag the entity with the LOADED flag, so that world streaming system doesn't try to load your entity twice.

Implements tram::Entity.

◆ MessageHandler()

void tram::Ext::Kitchensink::Water::MessageHandler ( Message msg)
virtual

Allows entities to receive messages.

Whenever an entity is sent a Message, once the Message::Dispatch() function has been called, the entity will gets the message passed to it through this method.

Implements tram::Entity.

◆ Register()

static void tram::Ext::Kitchensink::Water::Register ( )
static

◆ Serialize()

void tram::Ext::Kitchensink::Water::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Ext::Kitchensink::Water::SetParameters ( )
virtual

Called when either Entity::SetLocation or Entity::SetRotation is called.

Usually this method is used to relocate or rerotate an entity.

If the entity has a PhysicsComponent, its position or rotation is usually set from this method, otherwise in the next Physics update step, the entity's previous rotation and location will be restored.

Implements tram::Entity.

◆ Unload()

void tram::Ext::Kitchensink::Water::Unload ( )
virtual

Unloads an entity.

Usually the Load() method for an entity type will destroy its its components, event listeners, etc. After being unloaded, the entity have been removed from the simulation.

When implementing this method, make sure to clear your entity's LOADED flag, so that world streaming system can load the entity again.

Implements tram::Entity.

◆ UpdateParameters()

void tram::Ext::Kitchensink::Water::UpdateParameters ( )
virtual

Called when Entity::UpdateTransform is called.

From the runtime's side, only the Physics system will call the Entity::UpdateTransform() method, and through it, this method.

Usually this method is used to forward the entity's new position and rotation to its RenderComponent, if it has one.

If the entity has a PhysicsComponent, its position or rotation is never updated from this method.

Implements tram::Entity.

Member Data Documentation

◆ collmodel

name_t tram::Ext::Kitchensink::Water::collmodel
protected

◆ model

name_t tram::Ext::Kitchensink::Water::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::Ext::Kitchensink::Water::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::Ext::Kitchensink::Water::rendercomponent
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_menu_1_1_console-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Menu::Console Member List
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_menu_1_1_console.html ================================================ Tramway SDK: tram::Ext::Menu::Console Class Reference
Tramway SDK v0.1.1
tram::Ext::Menu::Console Class Reference

#include <debug.h>

Inheritance diagram for tram::Ext::Menu::Console:
tram::Ext::Menu::Menu

Public Member Functions

 Console ()
 
uint32_t Layer ()
 
void Display ()
 
 ~Console ()
 
- Public Member Functions inherited from tram::Ext::Menu::Menu
virtual ~Menu ()=default
 

Protected Attributes

char * text = nullptr
 
int history_cursor = -1
 

Additional Inherited Members

- Static Public Member Functions inherited from tram::Ext::Menu::Menu
static void Push (Menu *)
 Pushes menu on the menu stack. More...
 
static bool Pop ()
 Pops the topmost menu from the stack. More...
 
static bool Empty ()
 Checks whether the menu stack is empty. More...
 
static void Clear ()
 Clears the menu stack. More...
 
static void Add (Menu *)
 
static void Remove (Menu *)
 

Constructor & Destructor Documentation

◆ Console()

tram::Ext::Menu::Console::Console ( )

◆ ~Console()

tram::Ext::Menu::Console::~Console ( )

Member Function Documentation

◆ Display()

void tram::Ext::Menu::Console::Display ( )
virtual

Implements tram::Ext::Menu::Menu.

◆ Layer()

uint32_t tram::Ext::Menu::Console::Layer ( )
inlinevirtual

Implements tram::Ext::Menu::Menu.

Member Data Documentation

◆ history_cursor

int tram::Ext::Menu::Console::history_cursor = -1
protected

◆ text

char* tram::Ext::Menu::Console::text = nullptr
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/debug.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/debug.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_menu_1_1_debug_menu-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Menu::DebugMenu Member List
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_menu_1_1_debug_menu.html ================================================ Tramway SDK: tram::Ext::Menu::DebugMenu Class Reference
Tramway SDK v0.1.1
tram::Ext::Menu::DebugMenu Class Reference

#include <debug.h>

Inheritance diagram for tram::Ext::Menu::DebugMenu:
tram::Ext::Menu::Menu

Public Member Functions

void Display ()
 
uint32_t Layer ()
 
 ~DebugMenu ()=default
 
- Public Member Functions inherited from tram::Ext::Menu::Menu
virtual ~Menu ()=default
 

Static Protected Attributes

static bool intercept_enabled = false
 
static bool statistics_enabled = false
 
static InterceptMenuintercept_menu = nullptr
 
static StatisticsMenustatistics_menu = nullptr
 

Additional Inherited Members

- Static Public Member Functions inherited from tram::Ext::Menu::Menu
static void Push (Menu *)
 Pushes menu on the menu stack. More...
 
static bool Pop ()
 Pops the topmost menu from the stack. More...
 
static bool Empty ()
 Checks whether the menu stack is empty. More...
 
static void Clear ()
 Clears the menu stack. More...
 
static void Add (Menu *)
 
static void Remove (Menu *)
 

Constructor & Destructor Documentation

◆ ~DebugMenu()

tram::Ext::Menu::DebugMenu::~DebugMenu ( )
default

Member Function Documentation

◆ Display()

void tram::Ext::Menu::DebugMenu::Display ( )
virtual

Implements tram::Ext::Menu::Menu.

◆ Layer()

uint32_t tram::Ext::Menu::DebugMenu::Layer ( )
inlinevirtual

Implements tram::Ext::Menu::Menu.

Member Data Documentation

◆ intercept_enabled

bool tram::Ext::Menu::DebugMenu::intercept_enabled = false
staticprotected

◆ intercept_menu

InterceptMenu * tram::Ext::Menu::DebugMenu::intercept_menu = nullptr
staticprotected

◆ statistics_enabled

bool tram::Ext::Menu::DebugMenu::statistics_enabled = false
staticprotected

◆ statistics_menu

StatisticsMenu * tram::Ext::Menu::DebugMenu::statistics_menu = nullptr
staticprotected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/debug.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/debug.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_menu_1_1_entity_picker-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Menu::EntityPicker Member List
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_menu_1_1_entity_picker.html ================================================ Tramway SDK: tram::Ext::Menu::EntityPicker Class Reference
Tramway SDK v0.1.1
tram::Ext::Menu::EntityPicker Class Reference

#include <debug.h>

Inheritance diagram for tram::Ext::Menu::EntityPicker:
tram::Ext::Menu::Menu

Public Member Functions

 EntityPicker (std::function< void(id_t)> callback)
 
uint32_t Layer ()
 
void Display ()
 
 ~EntityPicker ()=default
 
- Public Member Functions inherited from tram::Ext::Menu::Menu
virtual ~Menu ()=default
 

Protected Attributes

std::function< void(id_t)> callback
 

Additional Inherited Members

- Static Public Member Functions inherited from tram::Ext::Menu::Menu
static void Push (Menu *)
 Pushes menu on the menu stack. More...
 
static bool Pop ()
 Pops the topmost menu from the stack. More...
 
static bool Empty ()
 Checks whether the menu stack is empty. More...
 
static void Clear ()
 Clears the menu stack. More...
 
static void Add (Menu *)
 
static void Remove (Menu *)
 

Constructor & Destructor Documentation

◆ EntityPicker()

tram::Ext::Menu::EntityPicker::EntityPicker ( std::function< void(id_t)>  callback)

◆ ~EntityPicker()

tram::Ext::Menu::EntityPicker::~EntityPicker ( )
default

Member Function Documentation

◆ Display()

void tram::Ext::Menu::EntityPicker::Display ( )
virtual

Implements tram::Ext::Menu::Menu.

◆ Layer()

uint32_t tram::Ext::Menu::EntityPicker::Layer ( )
inlinevirtual

Implements tram::Ext::Menu::Menu.

Member Data Documentation

◆ callback

std::function<void(id_t)> tram::Ext::Menu::EntityPicker::callback
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/debug.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/debug.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_menu_1_1_entity_properties-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Menu::EntityProperties Member List
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_menu_1_1_entity_properties.html ================================================ Tramway SDK: tram::Ext::Menu::EntityProperties Class Reference
Tramway SDK v0.1.1
tram::Ext::Menu::EntityProperties Class Reference

#include <debug.h>

Inheritance diagram for tram::Ext::Menu::EntityProperties:
tram::Ext::Menu::Menu

Public Member Functions

void SetPicked (id_t entity)
 
uint32_t Layer ()
 
void Display ()
 
 ~EntityProperties ()=default
 
- Public Member Functions inherited from tram::Ext::Menu::Menu
virtual ~Menu ()=default
 

Protected Attributes

id_t entity = 0
 

Additional Inherited Members

- Static Public Member Functions inherited from tram::Ext::Menu::Menu
static void Push (Menu *)
 Pushes menu on the menu stack. More...
 
static bool Pop ()
 Pops the topmost menu from the stack. More...
 
static bool Empty ()
 Checks whether the menu stack is empty. More...
 
static void Clear ()
 Clears the menu stack. More...
 
static void Add (Menu *)
 
static void Remove (Menu *)
 

Constructor & Destructor Documentation

◆ ~EntityProperties()

tram::Ext::Menu::EntityProperties::~EntityProperties ( )
default

Member Function Documentation

◆ Display()

void tram::Ext::Menu::EntityProperties::Display ( )
virtual

Implements tram::Ext::Menu::Menu.

◆ Layer()

uint32_t tram::Ext::Menu::EntityProperties::Layer ( )
inlinevirtual

Implements tram::Ext::Menu::Menu.

◆ SetPicked()

void tram::Ext::Menu::EntityProperties::SetPicked ( id_t  entity)

Member Data Documentation

◆ entity

id_t tram::Ext::Menu::EntityProperties::entity = 0
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/debug.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/debug.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_menu_1_1_event_emit-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Menu::EventEmit Member List
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_menu_1_1_event_emit.html ================================================ Tramway SDK: tram::Ext::Menu::EventEmit Class Reference
Tramway SDK v0.1.1
tram::Ext::Menu::EventEmit Class Reference

#include <debug.h>

Inheritance diagram for tram::Ext::Menu::EventEmit:
tram::Ext::Menu::Menu

Public Member Functions

void SetEventType (uint32_t type)
 
uint32_t Layer ()
 
void Display ()
 
 ~EventEmit ()=default
 
- Public Member Functions inherited from tram::Ext::Menu::Menu
virtual ~Menu ()=default
 

Protected Attributes

uint16_t subtype = 0
 
uint32_t parameter_type = 0
 
uint32_t event_type = 0
 
char subtype_string [8] = "0"
 
char parameter_string [32] = ""
 

Additional Inherited Members

- Static Public Member Functions inherited from tram::Ext::Menu::Menu
static void Push (Menu *)
 Pushes menu on the menu stack. More...
 
static bool Pop ()
 Pops the topmost menu from the stack. More...
 
static bool Empty ()
 Checks whether the menu stack is empty. More...
 
static void Clear ()
 Clears the menu stack. More...
 
static void Add (Menu *)
 
static void Remove (Menu *)
 

Constructor & Destructor Documentation

◆ ~EventEmit()

tram::Ext::Menu::EventEmit::~EventEmit ( )
default

Member Function Documentation

◆ Display()

void tram::Ext::Menu::EventEmit::Display ( )
virtual

Implements tram::Ext::Menu::Menu.

◆ Layer()

uint32_t tram::Ext::Menu::EventEmit::Layer ( )
inlinevirtual

Implements tram::Ext::Menu::Menu.

◆ SetEventType()

void tram::Ext::Menu::EventEmit::SetEventType ( uint32_t  type)
inline

Member Data Documentation

◆ event_type

uint32_t tram::Ext::Menu::EventEmit::event_type = 0
protected

◆ parameter_string

char tram::Ext::Menu::EventEmit::parameter_string[32] = ""
protected

◆ parameter_type

uint32_t tram::Ext::Menu::EventEmit::parameter_type = 0
protected

◆ subtype

uint16_t tram::Ext::Menu::EventEmit::subtype = 0
protected

◆ subtype_string

char tram::Ext::Menu::EventEmit::subtype_string[8] = "0"
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/debug.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/debug.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_menu_1_1_intercept_menu-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Menu::InterceptMenu Member List
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_menu_1_1_intercept_menu.html ================================================ Tramway SDK: tram::Ext::Menu::InterceptMenu Class Reference
Tramway SDK v0.1.1
tram::Ext::Menu::InterceptMenu Class Reference

#include <debug.h>

Inheritance diagram for tram::Ext::Menu::InterceptMenu:
tram::Ext::Menu::Menu

Public Member Functions

void Display ()
 
uint32_t Layer ()
 
void SetOffset (uint32_t offset)
 
 ~InterceptMenu ()=default
 
- Public Member Functions inherited from tram::Ext::Menu::Menu
virtual ~Menu ()=default
 

Protected Attributes

uint32_t offset = 0
 

Additional Inherited Members

- Static Public Member Functions inherited from tram::Ext::Menu::Menu
static void Push (Menu *)
 Pushes menu on the menu stack. More...
 
static bool Pop ()
 Pops the topmost menu from the stack. More...
 
static bool Empty ()
 Checks whether the menu stack is empty. More...
 
static void Clear ()
 Clears the menu stack. More...
 
static void Add (Menu *)
 
static void Remove (Menu *)
 

Constructor & Destructor Documentation

◆ ~InterceptMenu()

tram::Ext::Menu::InterceptMenu::~InterceptMenu ( )
default

Member Function Documentation

◆ Display()

void tram::Ext::Menu::InterceptMenu::Display ( )
virtual

Implements tram::Ext::Menu::Menu.

◆ Layer()

uint32_t tram::Ext::Menu::InterceptMenu::Layer ( )
inlinevirtual

Implements tram::Ext::Menu::Menu.

◆ SetOffset()

void tram::Ext::Menu::InterceptMenu::SetOffset ( uint32_t  offset)
inline

Member Data Documentation

◆ offset

uint32_t tram::Ext::Menu::InterceptMenu::offset = 0
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/debug.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/debug.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_menu_1_1_list_selection-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Menu::ListSelection Member List

This is the complete list of members for tram::Ext::Menu::ListSelection, including all inherited members.

Add(Menu *)tram::Ext::Menu::Menustatic
callbacktram::Ext::Menu::ListSelectionprotected
Clear()tram::Ext::Menu::Menustatic
Display()tram::Ext::Menu::ListSelectionvirtual
Empty()tram::Ext::Menu::Menustatic
Layer()tram::Ext::Menu::ListSelectioninlinevirtual
listtram::Ext::Menu::ListSelectionprotected
ListSelection(std::function< void(uint32_t)> callback, std::vector< std::string > list)tram::Ext::Menu::ListSelection
Pop()tram::Ext::Menu::Menustatic
Push(Menu *)tram::Ext::Menu::Menustatic
Remove(Menu *)tram::Ext::Menu::Menustatic
~ListSelection()=defaulttram::Ext::Menu::ListSelection
~Menu()=defaulttram::Ext::Menu::Menuvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_menu_1_1_list_selection.html ================================================ Tramway SDK: tram::Ext::Menu::ListSelection Class Reference
Tramway SDK v0.1.1
tram::Ext::Menu::ListSelection Class Reference

#include <debug.h>

Inheritance diagram for tram::Ext::Menu::ListSelection:
tram::Ext::Menu::Menu

Public Member Functions

 ListSelection (std::function< void(uint32_t)> callback, std::vector< std::string > list)
 
uint32_t Layer ()
 
void Display ()
 
 ~ListSelection ()=default
 
- Public Member Functions inherited from tram::Ext::Menu::Menu
virtual ~Menu ()=default
 

Protected Attributes

std::function< void(uint32_t)> callback
 
std::vector< std::string > list
 

Additional Inherited Members

- Static Public Member Functions inherited from tram::Ext::Menu::Menu
static void Push (Menu *)
 Pushes menu on the menu stack. More...
 
static bool Pop ()
 Pops the topmost menu from the stack. More...
 
static bool Empty ()
 Checks whether the menu stack is empty. More...
 
static void Clear ()
 Clears the menu stack. More...
 
static void Add (Menu *)
 
static void Remove (Menu *)
 

Constructor & Destructor Documentation

◆ ListSelection()

tram::Ext::Menu::ListSelection::ListSelection ( std::function< void(uint32_t)>  callback,
std::vector< std::string >  list 
)

◆ ~ListSelection()

tram::Ext::Menu::ListSelection::~ListSelection ( )
default

Member Function Documentation

◆ Display()

void tram::Ext::Menu::ListSelection::Display ( )
virtual

Implements tram::Ext::Menu::Menu.

◆ Layer()

uint32_t tram::Ext::Menu::ListSelection::Layer ( )
inlinevirtual

Implements tram::Ext::Menu::Menu.

Member Data Documentation

◆ callback

std::function<void(uint32_t)> tram::Ext::Menu::ListSelection::callback
protected

◆ list

std::vector<std::string> tram::Ext::Menu::ListSelection::list
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/debug.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/debug.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_menu_1_1_menu-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Menu::Menu Member List

This is the complete list of members for tram::Ext::Menu::Menu, including all inherited members.

Add(Menu *)tram::Ext::Menu::Menustatic
Clear()tram::Ext::Menu::Menustatic
Display()=0tram::Ext::Menu::Menupure virtual
Empty()tram::Ext::Menu::Menustatic
Layer()=0tram::Ext::Menu::Menupure virtual
Pop()tram::Ext::Menu::Menustatic
Push(Menu *)tram::Ext::Menu::Menustatic
Remove(Menu *)tram::Ext::Menu::Menustatic
~Menu()=defaulttram::Ext::Menu::Menuvirtual
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_menu_1_1_menu.html ================================================ Tramway SDK: tram::Ext::Menu::Menu Class Reference
Tramway SDK v0.1.1
tram::Ext::Menu::Menu Class Referenceabstract

#include <menu.h>

Inheritance diagram for tram::Ext::Menu::Menu:
tram::Ext::Kitchensink::KitchensinkMenuList tram::Ext::Kitchensink::ListDialog tram::Ext::Kitchensink::ListInventory tram::Ext::Kitchensink::ListTrade tram::Ext::Kitchensink::QuestList tram::Ext::Menu::Console tram::Ext::Menu::DebugMenu tram::Ext::Menu::EntityPicker tram::Ext::Menu::EntityProperties tram::Ext::Menu::EventEmit tram::Ext::Menu::InterceptMenu tram::Ext::Menu::ListSelection tram::Ext::Menu::MessageSend tram::Ext::Menu::Options tram::Ext::Menu::SettingsMenu tram::Ext::Menu::SignalMenu tram::Ext::Menu::StatisticsMenu tram::Ext::Menu::SystemMenu tram::Ext::Menu::WorldCellProperties

Public Member Functions

virtual void Display ()=0
 
virtual uint32_t Layer ()=0
 
virtual ~Menu ()=default
 

Static Public Member Functions

static void Push (Menu *)
 Pushes menu on the menu stack. More...
 
static bool Pop ()
 Pops the topmost menu from the stack. More...
 
static bool Empty ()
 Checks whether the menu stack is empty. More...
 
static void Clear ()
 Clears the menu stack. More...
 
static void Add (Menu *)
 
static void Remove (Menu *)
 

Constructor & Destructor Documentation

◆ ~Menu()

virtual tram::Ext::Menu::Menu::~Menu ( )
virtualdefault

Member Function Documentation

◆ Add()

void tram::Ext::Menu::Menu::Add ( Menu menu)
static

◆ Clear()

void tram::Ext::Menu::Menu::Clear ( )
static

Clears the menu stack.

This will behave as if Menu::Pop() was called until the menu stack was empty.

Note
All of the menus in the stack will be deleteed.

◆ Display()

◆ Empty()

bool tram::Ext::Menu::Menu::Empty ( )
static

Checks whether the menu stack is empty.

Returns
True if it is empty.

◆ Layer()

◆ Pop()

bool tram::Ext::Menu::Menu::Pop ( )
static

Pops the topmost menu from the stack.

Note
The menu will be deleted after removing it from the stack.
Returns
True if a menu was popped, false if stack was empty.

◆ Push()

void tram::Ext::Menu::Menu::Push ( Menu menu)
static

Pushes menu on the menu stack.

◆ Remove()

void tram::Ext::Menu::Menu::Remove ( Menu menu)
static

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/menu.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/menu.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_menu_1_1_message_send-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Menu::MessageSend Member List
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_menu_1_1_message_send.html ================================================ Tramway SDK: tram::Ext::Menu::MessageSend Class Reference
Tramway SDK v0.1.1
tram::Ext::Menu::MessageSend Class Reference

#include <debug.h>

Inheritance diagram for tram::Ext::Menu::MessageSend:
tram::Ext::Menu::Menu

Public Member Functions

void SetEntity (id_t entity)
 
void SetMessageType (uint32_t type)
 
uint32_t Layer ()
 
void Display ()
 
 ~MessageSend ()=default
 
- Public Member Functions inherited from tram::Ext::Menu::Menu
virtual ~Menu ()=default
 

Protected Attributes

uint32_t parameter_type = 0
 
id_t entity_id = 0
 
uint32_t message_type = 0
 
char parameter_string [32] = ""
 

Additional Inherited Members

- Static Public Member Functions inherited from tram::Ext::Menu::Menu
static void Push (Menu *)
 Pushes menu on the menu stack. More...
 
static bool Pop ()
 Pops the topmost menu from the stack. More...
 
static bool Empty ()
 Checks whether the menu stack is empty. More...
 
static void Clear ()
 Clears the menu stack. More...
 
static void Add (Menu *)
 
static void Remove (Menu *)
 

Constructor & Destructor Documentation

◆ ~MessageSend()

tram::Ext::Menu::MessageSend::~MessageSend ( )
default

Member Function Documentation

◆ Display()

void tram::Ext::Menu::MessageSend::Display ( )
virtual

Implements tram::Ext::Menu::Menu.

◆ Layer()

uint32_t tram::Ext::Menu::MessageSend::Layer ( )
inlinevirtual

Implements tram::Ext::Menu::Menu.

◆ SetEntity()

void tram::Ext::Menu::MessageSend::SetEntity ( id_t  entity)

◆ SetMessageType()

void tram::Ext::Menu::MessageSend::SetMessageType ( uint32_t  type)

Member Data Documentation

◆ entity_id

id_t tram::Ext::Menu::MessageSend::entity_id = 0
protected

◆ message_type

uint32_t tram::Ext::Menu::MessageSend::message_type = 0
protected

◆ parameter_string

char tram::Ext::Menu::MessageSend::parameter_string[32] = ""
protected

◆ parameter_type

uint32_t tram::Ext::Menu::MessageSend::parameter_type = 0
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/debug.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/debug.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_menu_1_1_options-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Menu::Options Member List
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_menu_1_1_options.html ================================================ Tramway SDK: tram::Ext::Menu::Options Class Reference
Tramway SDK v0.1.1
tram::Ext::Menu::Options Class Reference

#include <debug.h>

Inheritance diagram for tram::Ext::Menu::Options:
tram::Ext::Menu::Menu

Public Member Functions

 Options ()=default
 
uint32_t Layer ()
 
void Display ()
 
 ~Options ()=default
 
- Public Member Functions inherited from tram::Ext::Menu::Menu
virtual ~Menu ()=default
 

Additional Inherited Members

- Static Public Member Functions inherited from tram::Ext::Menu::Menu
static void Push (Menu *)
 Pushes menu on the menu stack. More...
 
static bool Pop ()
 Pops the topmost menu from the stack. More...
 
static bool Empty ()
 Checks whether the menu stack is empty. More...
 
static void Clear ()
 Clears the menu stack. More...
 
static void Add (Menu *)
 
static void Remove (Menu *)
 

Constructor & Destructor Documentation

◆ Options()

tram::Ext::Menu::Options::Options ( )
default

◆ ~Options()

tram::Ext::Menu::Options::~Options ( )
default

Member Function Documentation

◆ Display()

void tram::Ext::Menu::Options::Display ( )
virtual

Implements tram::Ext::Menu::Menu.

◆ Layer()

uint32_t tram::Ext::Menu::Options::Layer ( )
inlinevirtual

Implements tram::Ext::Menu::Menu.


The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/debug.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/debug.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_menu_1_1_settings_menu-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Menu::SettingsMenu Member List
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_menu_1_1_settings_menu.html ================================================ Tramway SDK: tram::Ext::Menu::SettingsMenu Class Reference
Tramway SDK v0.1.1
tram::Ext::Menu::SettingsMenu Class Reference

#include <system.h>

Inheritance diagram for tram::Ext::Menu::SettingsMenu:
tram::Ext::Menu::Menu

Public Member Functions

void Display ()
 
uint32_t Layer ()
 
 ~SettingsMenu ()=default
 
- Public Member Functions inherited from tram::Ext::Menu::Menu
virtual ~Menu ()=default
 

Protected Attributes

uint32_t tab = 0
 
uint32_t binding_action = 0
 
bool binding_state_ready = false
 

Additional Inherited Members

- Static Public Member Functions inherited from tram::Ext::Menu::Menu
static void Push (Menu *)
 Pushes menu on the menu stack. More...
 
static bool Pop ()
 Pops the topmost menu from the stack. More...
 
static bool Empty ()
 Checks whether the menu stack is empty. More...
 
static void Clear ()
 Clears the menu stack. More...
 
static void Add (Menu *)
 
static void Remove (Menu *)
 

Constructor & Destructor Documentation

◆ ~SettingsMenu()

tram::Ext::Menu::SettingsMenu::~SettingsMenu ( )
default

Member Function Documentation

◆ Display()

void tram::Ext::Menu::SettingsMenu::Display ( )
virtual

Implements tram::Ext::Menu::Menu.

◆ Layer()

uint32_t tram::Ext::Menu::SettingsMenu::Layer ( )
inlinevirtual

Implements tram::Ext::Menu::Menu.

Member Data Documentation

◆ binding_action

uint32_t tram::Ext::Menu::SettingsMenu::binding_action = 0
protected

◆ binding_state_ready

bool tram::Ext::Menu::SettingsMenu::binding_state_ready = false
protected

◆ tab

uint32_t tram::Ext::Menu::SettingsMenu::tab = 0
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/system.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/system.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_menu_1_1_signal_menu-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Menu::SignalMenu Member List
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_menu_1_1_signal_menu.html ================================================ Tramway SDK: tram::Ext::Menu::SignalMenu Class Reference
Tramway SDK v0.1.1
tram::Ext::Menu::SignalMenu Class Reference

#include <debug.h>

Inheritance diagram for tram::Ext::Menu::SignalMenu:
tram::Ext::Menu::Menu

Public Member Functions

void SetEntity (id_t entity)
 
void Display ()
 
uint32_t Layer ()
 
 ~SignalMenu ()=default
 
- Public Member Functions inherited from tram::Ext::Menu::Menu
virtual ~Menu ()=default
 

Protected Attributes

id_t entity_id = 0
 

Additional Inherited Members

- Static Public Member Functions inherited from tram::Ext::Menu::Menu
static void Push (Menu *)
 Pushes menu on the menu stack. More...
 
static bool Pop ()
 Pops the topmost menu from the stack. More...
 
static bool Empty ()
 Checks whether the menu stack is empty. More...
 
static void Clear ()
 Clears the menu stack. More...
 
static void Add (Menu *)
 
static void Remove (Menu *)
 

Constructor & Destructor Documentation

◆ ~SignalMenu()

tram::Ext::Menu::SignalMenu::~SignalMenu ( )
default

Member Function Documentation

◆ Display()

void tram::Ext::Menu::SignalMenu::Display ( )
virtual

Implements tram::Ext::Menu::Menu.

◆ Layer()

uint32_t tram::Ext::Menu::SignalMenu::Layer ( )
inlinevirtual

Implements tram::Ext::Menu::Menu.

◆ SetEntity()

void tram::Ext::Menu::SignalMenu::SetEntity ( id_t  entity)
inline

Member Data Documentation

◆ entity_id

id_t tram::Ext::Menu::SignalMenu::entity_id = 0
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/debug.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/debug.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_menu_1_1_statistics_menu-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Menu::StatisticsMenu Member List
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_menu_1_1_statistics_menu.html ================================================ Tramway SDK: tram::Ext::Menu::StatisticsMenu Class Reference
Tramway SDK v0.1.1
tram::Ext::Menu::StatisticsMenu Class Reference

#include <debug.h>

Inheritance diagram for tram::Ext::Menu::StatisticsMenu:
tram::Ext::Menu::Menu

Public Member Functions

void Display ()
 
uint32_t Layer ()
 
 ~StatisticsMenu ()=default
 
- Public Member Functions inherited from tram::Ext::Menu::Menu
virtual ~Menu ()=default
 

Additional Inherited Members

- Static Public Member Functions inherited from tram::Ext::Menu::Menu
static void Push (Menu *)
 Pushes menu on the menu stack. More...
 
static bool Pop ()
 Pops the topmost menu from the stack. More...
 
static bool Empty ()
 Checks whether the menu stack is empty. More...
 
static void Clear ()
 Clears the menu stack. More...
 
static void Add (Menu *)
 
static void Remove (Menu *)
 

Constructor & Destructor Documentation

◆ ~StatisticsMenu()

tram::Ext::Menu::StatisticsMenu::~StatisticsMenu ( )
default

Member Function Documentation

◆ Display()

void tram::Ext::Menu::StatisticsMenu::Display ( )
virtual

Implements tram::Ext::Menu::Menu.

◆ Layer()

uint32_t tram::Ext::Menu::StatisticsMenu::Layer ( )
inlinevirtual

Implements tram::Ext::Menu::Menu.


The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/debug.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/debug.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_menu_1_1_system_menu-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Menu::SystemMenu Member List
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_menu_1_1_system_menu.html ================================================ Tramway SDK: tram::Ext::Menu::SystemMenu Class Reference
Tramway SDK v0.1.1
tram::Ext::Menu::SystemMenu Class Reference

#include <system.h>

Inheritance diagram for tram::Ext::Menu::SystemMenu:
tram::Ext::Menu::Menu

Public Member Functions

void Display ()
 
uint32_t Layer ()
 
 ~SystemMenu ()=default
 
- Public Member Functions inherited from tram::Ext::Menu::Menu
virtual ~Menu ()=default
 

Additional Inherited Members

- Static Public Member Functions inherited from tram::Ext::Menu::Menu
static void Push (Menu *)
 Pushes menu on the menu stack. More...
 
static bool Pop ()
 Pops the topmost menu from the stack. More...
 
static bool Empty ()
 Checks whether the menu stack is empty. More...
 
static void Clear ()
 Clears the menu stack. More...
 
static void Add (Menu *)
 
static void Remove (Menu *)
 

Constructor & Destructor Documentation

◆ ~SystemMenu()

tram::Ext::Menu::SystemMenu::~SystemMenu ( )
default

Member Function Documentation

◆ Display()

void tram::Ext::Menu::SystemMenu::Display ( )
virtual

Implements tram::Ext::Menu::Menu.

◆ Layer()

uint32_t tram::Ext::Menu::SystemMenu::Layer ( )
inlinevirtual

Implements tram::Ext::Menu::Menu.


The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/system.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/system.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_menu_1_1_world_cell_properties-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Menu::WorldCellProperties Member List
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_menu_1_1_world_cell_properties.html ================================================ Tramway SDK: tram::Ext::Menu::WorldCellProperties Class Reference
Tramway SDK v0.1.1
tram::Ext::Menu::WorldCellProperties Class Reference

#include <debug.h>

Inheritance diagram for tram::Ext::Menu::WorldCellProperties:
tram::Ext::Menu::Menu

Public Member Functions

void SetPicked (WorldCell *cell)
 
uint32_t Layer ()
 
void Display ()
 
 ~WorldCellProperties ()=default
 
- Public Member Functions inherited from tram::Ext::Menu::Menu
virtual ~Menu ()=default
 

Protected Attributes

WorldCellcell = nullptr
 

Additional Inherited Members

- Static Public Member Functions inherited from tram::Ext::Menu::Menu
static void Push (Menu *)
 Pushes menu on the menu stack. More...
 
static bool Pop ()
 Pops the topmost menu from the stack. More...
 
static bool Empty ()
 Checks whether the menu stack is empty. More...
 
static void Clear ()
 Clears the menu stack. More...
 
static void Add (Menu *)
 
static void Remove (Menu *)
 

Constructor & Destructor Documentation

◆ ~WorldCellProperties()

tram::Ext::Menu::WorldCellProperties::~WorldCellProperties ( )
default

Member Function Documentation

◆ Display()

void tram::Ext::Menu::WorldCellProperties::Display ( )
virtual

Implements tram::Ext::Menu::Menu.

◆ Layer()

uint32_t tram::Ext::Menu::WorldCellProperties::Layer ( )
inlinevirtual

Implements tram::Ext::Menu::Menu.

◆ SetPicked()

void tram::Ext::Menu::WorldCellProperties::SetPicked ( WorldCell cell)

Member Data Documentation

◆ cell

WorldCell* tram::Ext::Menu::WorldCellProperties::cell = nullptr
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/debug.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/debug.cpp
================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_scripting_1_1_lua_1_1_lua-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Ext::Scripting::Lua::Lua Member List

This is the complete list of members for tram::Ext::Scripting::Lua::Lua, including all inherited members.

================================================ FILE: docs/cppapi/classtram_1_1_ext_1_1_scripting_1_1_lua_1_1_lua.html ================================================ Tramway SDK: tram::Ext::Scripting::Lua::Lua Class Reference
Tramway SDK v0.1.1
tram::Ext::Scripting::Lua::Lua Class Reference
Inheritance diagram for tram::Ext::Scripting::Lua::Lua:
tram::Script::Interface

Additional Inherited Members


The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/scripting/lua.cpp
================================================ FILE: docs/cppapi/classtram_1_1_f_p_s_controller_component-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::FPSControllerComponent Member List

This is the complete list of members for tram::FPSControllerComponent, including all inherited members.

ApplyDynamics()tram::FPSControllerComponentprotected
collidetram::ControllerComponentprotected
collision_grouptram::FPSControllerComponentprotected
collision_heighttram::FPSControllerComponentprotected
collision_height_crouchtram::FPSControllerComponentprotected
collision_widthtram::FPSControllerComponentprotected
ControllerComponenttram::FPSControllerComponentfriend
Crouch() overridetram::FPSControllerComponentvirtual
crouch_collisiontram::FPSControllerComponentprotected
crouch_speedtram::FPSControllerComponentprotected
crouchingtram::FPSControllerComponentprotected
EntityComponent()=defaulttram::EntityComponent
EventHandler(Event &event) overridetram::FPSControllerComponentinlinevirtual
Fly() overridetram::FPSControllerComponentvirtual
fly_speedtram::FPSControllerComponentprotected
flyingtram::FPSControllerComponentprotected
FPSControllerComponent()=defaulttram::FPSControllerComponentprotected
frictiontram::FPSControllerComponentprotected
GetLookDirection() consttram::ControllerComponentinline
GetParent()tram::EntityComponentinline
Init()tram::EntityComponentvirtual
is_in_airtram::FPSControllerComponentprotected
is_inittram::EntityComponentprotected
is_readytram::EntityComponentprotected
IsDebugInfoDraw()tram::ControllerComponentstatic
IsInit()tram::EntityComponentinline
IsReady()tram::EntityComponentinline
Jump() overridetram::FPSControllerComponentvirtual
look_directiontram::ControllerComponentprotected
Move(vec3 local_direction) overridetram::FPSControllerComponentvirtual
move_directiontram::FPSControllerComponentprotected
parenttram::EntityComponentprotected
Pooltram::FPSControllerComponentfriend
Push(vec3 direction) overridetram::FPSControllerComponentvirtual
RecoverFromCollisions()tram::FPSControllerComponentprotected
ResetMove()tram::FPSControllerComponentprotected
ResourceReady()tram::EntityComponentprotected
resources_waitingtram::EntityComponentprotected
Run() overridetram::FPSControllerComponentvirtual
run_speedtram::FPSControllerComponentprotected
runningtram::FPSControllerComponentprotected
SetCollisionGroup(uint32_t group)tram::FPSControllerComponentinline
SetCollisions(bool collide)tram::ControllerComponentinline
SetCollisionSize(float width, float height, float crouch_height)tram::FPSControllerComponentinline
SetCrouchSpeed(float speed)tram::FPSControllerComponentinline
SetDebugInfoDraw(bool)tram::ControllerComponentstatic
SetFlySpeed(float speed)tram::FPSControllerComponentinline
SetFriction(float friction)tram::FPSControllerComponentinline
SetLookDirection(quat direction)tram::ControllerComponentinline
SetParent(Entity *parent)tram::EntityComponentinline
SetRunSpeed(float speed)tram::FPSControllerComponentinline
SetStepHeight(float height, float crouch_height)tram::FPSControllerComponentinline
SetWalkSpeed(float speed)tram::FPSControllerComponentinline
SetWallCollisionCallback(void(*callback)(ControllerComponent *, Physics::Collision))tram::FPSControllerComponentinline
standing_ontram::FPSControllerComponentprotected
standing_on_prevtram::FPSControllerComponentprotected
standing_postram::FPSControllerComponentprotected
standing_rottram::FPSControllerComponentprotected
Start() overridetram::FPSControllerComponentvirtual
step_heighttram::FPSControllerComponentprotected
step_height_crouchtram::FPSControllerComponentprotected
TurnLeft() overridetram::FPSControllerComponentvirtual
TurnRight() overridetram::FPSControllerComponentvirtual
Update()tram::ControllerComponentstatic
velocitytram::FPSControllerComponentprotected
walk_collisiontram::FPSControllerComponentprotected
walk_speedtram::FPSControllerComponentprotected
wallbonk_callbacktram::FPSControllerComponentprotected
~EntityComponent()=defaulttram::EntityComponentvirtual
~FPSControllerComponent()=defaulttram::FPSControllerComponentprotected
================================================ FILE: docs/cppapi/classtram_1_1_f_p_s_controller_component.html ================================================ Tramway SDK: tram::FPSControllerComponent Class Reference
Tramway SDK v0.1.1

Implementation of an FPS-style character controller. More...

#include <components/controller.h>

Inheritance diagram for tram::FPSControllerComponent:
tram::ControllerComponent tram::EntityComponent

Public Member Functions

void Start () override
 
void EventHandler (Event &event) override
 
void Move (vec3 local_direction) override
 
void Run () override
 
void Crouch () override
 
void Fly () override
 
void Jump () override
 
void TurnLeft () override
 
void TurnRight () override
 
void Push (vec3 direction) override
 
void SetCollisionSize (float width, float height, float crouch_height)
 
void SetStepHeight (float height, float crouch_height)
 
void SetWallCollisionCallback (void(*callback)(ControllerComponent *, Physics::Collision))
 
void SetWalkSpeed (float speed)
 
void SetRunSpeed (float speed)
 
void SetCrouchSpeed (float speed)
 
void SetFlySpeed (float speed)
 
void SetFriction (float friction)
 
void SetCollisionGroup (uint32_t group)
 
- Public Member Functions inherited from tram::ControllerComponent
void SetCollisions (bool collide)
 
void SetLookDirection (quat direction)
 
quat GetLookDirection () const
 
- Public Member Functions inherited from tram::EntityComponent
 EntityComponent ()=default
 
virtual ~EntityComponent ()=default
 
virtual void Init ()
 Initializes an entity component. More...
 
bool IsReady ()
 Returns the component's readiness. More...
 
bool IsInit ()
 Returns the component's init status. More...
 
EntityGetParent ()
 
void SetParent (Entity *parent)
 

Protected Member Functions

 FPSControllerComponent ()=default
 
 ~FPSControllerComponent ()=default
 
void ApplyDynamics ()
 
void RecoverFromCollisions ()
 
void ResetMove ()
 
- Protected Member Functions inherited from tram::EntityComponent
void ResourceReady ()
 Notifies the component of a streamed-in resource. More...
 

Protected Attributes

Component< TriggerComponentwalk_collision
 
Component< TriggerComponentcrouch_collision
 
vec3 velocity = {0.0f, 0.0f, 0.0f}
 
vec3 move_direction = {0.0f, 0.0f, 0.0f}
 
bool is_in_air = false
 
float collision_width = 0.35f
 
float collision_height = 1.85f
 
float collision_height_crouch = 0.5f
 
float step_height = 0.35f
 
float step_height_crouch = 0.15f
 
float walk_speed = 0.1f
 
float run_speed = 0.2f
 
float crouch_speed = 0.05f
 
float fly_speed = 0.2f
 
float friction = 0.89f
 
bool crouching = false
 
bool running = false
 
bool flying = false
 
id_t standing_on = 0
 
id_t standing_on_prev = 0
 
vec3 standing_pos
 
quat standing_rot
 
uint32_t collision_group = Physics::COLL_PLAYER
 
void(* wallbonk_callback )(ControllerComponent *, Physics::Collision) = nullptr
 
- Protected Attributes inherited from tram::ControllerComponent
quat look_direction = {1.0f, 0.0f, 0.0f, 0.0f}
 
bool collide = true
 
- Protected Attributes inherited from tram::EntityComponent
size_t resources_waiting = 0
 
bool is_ready = false
 
bool is_init = false
 
Entityparent = nullptr
 

Friends

class ControllerComponent
 
template<typename >
class Pool
 

Additional Inherited Members

- Static Public Member Functions inherited from tram::ControllerComponent
static bool IsDebugInfoDraw ()
 
static void SetDebugInfoDraw (bool)
 
static void Update ()
 Updates the ControllerComponents. More...
 

Detailed Description

Implementation of an FPS-style character controller.

It is relatively slow, due to the use of Shapecasts, which makes it suitable only for player characters. Consider useing a RaycastControllerComponent for other uses.

See also
ControllerComponent

Constructor & Destructor Documentation

◆ FPSControllerComponent()

tram::FPSControllerComponent::FPSControllerComponent ( )
protecteddefault

◆ ~FPSControllerComponent()

tram::FPSControllerComponent::~FPSControllerComponent ( )
protecteddefault

Member Function Documentation

◆ ApplyDynamics()

void tram::FPSControllerComponent::ApplyDynamics ( )
protected

◆ Crouch()

void tram::FPSControllerComponent::Crouch ( )
overridevirtual

◆ EventHandler()

void tram::FPSControllerComponent::EventHandler ( Event event)
inlineoverridevirtual

Implements tram::EntityComponent.

◆ Fly()

void tram::FPSControllerComponent::Fly ( )
overridevirtual

◆ Jump()

void tram::FPSControllerComponent::Jump ( )
overridevirtual

◆ Move()

void tram::FPSControllerComponent::Move ( vec3  local_direction)
overridevirtual

◆ Push()

void tram::FPSControllerComponent::Push ( vec3  direction)
overridevirtual

◆ RecoverFromCollisions()

void tram::FPSControllerComponent::RecoverFromCollisions ( )
protected

◆ ResetMove()

void tram::FPSControllerComponent::ResetMove ( )
protected

◆ Run()

void tram::FPSControllerComponent::Run ( )
overridevirtual

◆ SetCollisionGroup()

void tram::FPSControllerComponent::SetCollisionGroup ( uint32_t  group)
inline

◆ SetCollisionSize()

void tram::FPSControllerComponent::SetCollisionSize ( float  width,
float  height,
float  crouch_height 
)
inline

◆ SetCrouchSpeed()

void tram::FPSControllerComponent::SetCrouchSpeed ( float  speed)
inline

◆ SetFlySpeed()

void tram::FPSControllerComponent::SetFlySpeed ( float  speed)
inline

◆ SetFriction()

void tram::FPSControllerComponent::SetFriction ( float  friction)
inline

◆ SetRunSpeed()

void tram::FPSControllerComponent::SetRunSpeed ( float  speed)
inline

◆ SetStepHeight()

void tram::FPSControllerComponent::SetStepHeight ( float  height,
float  crouch_height 
)
inline

◆ SetWalkSpeed()

void tram::FPSControllerComponent::SetWalkSpeed ( float  speed)
inline

◆ SetWallCollisionCallback()

void tram::FPSControllerComponent::SetWallCollisionCallback ( void(*)(ControllerComponent *, Physics::Collision callback)
inline

◆ Start()

void tram::FPSControllerComponent::Start ( )
overridevirtual

Implements tram::EntityComponent.

◆ TurnLeft()

void tram::FPSControllerComponent::TurnLeft ( )
overridevirtual

◆ TurnRight()

void tram::FPSControllerComponent::TurnRight ( )
overridevirtual

Friends And Related Function Documentation

◆ ControllerComponent

friend class ControllerComponent
friend

◆ Pool

template<typename >
friend class Pool
friend

Member Data Documentation

◆ collision_group

uint32_t tram::FPSControllerComponent::collision_group = Physics::COLL_PLAYER
protected

◆ collision_height

float tram::FPSControllerComponent::collision_height = 1.85f
protected

◆ collision_height_crouch

float tram::FPSControllerComponent::collision_height_crouch = 0.5f
protected

◆ collision_width

float tram::FPSControllerComponent::collision_width = 0.35f
protected

◆ crouch_collision

Component<TriggerComponent> tram::FPSControllerComponent::crouch_collision
protected

◆ crouch_speed

float tram::FPSControllerComponent::crouch_speed = 0.05f
protected

◆ crouching

bool tram::FPSControllerComponent::crouching = false
protected

◆ fly_speed

float tram::FPSControllerComponent::fly_speed = 0.2f
protected

◆ flying

bool tram::FPSControllerComponent::flying = false
protected

◆ friction

float tram::FPSControllerComponent::friction = 0.89f
protected

◆ is_in_air

bool tram::FPSControllerComponent::is_in_air = false
protected

◆ move_direction

vec3 tram::FPSControllerComponent::move_direction = {0.0f, 0.0f, 0.0f}
protected

◆ run_speed

float tram::FPSControllerComponent::run_speed = 0.2f
protected

◆ running

bool tram::FPSControllerComponent::running = false
protected

◆ standing_on

id_t tram::FPSControllerComponent::standing_on = 0
protected

◆ standing_on_prev

id_t tram::FPSControllerComponent::standing_on_prev = 0
protected

◆ standing_pos

vec3 tram::FPSControllerComponent::standing_pos
protected

◆ standing_rot

quat tram::FPSControllerComponent::standing_rot
protected

◆ step_height

float tram::FPSControllerComponent::step_height = 0.35f
protected

◆ step_height_crouch

float tram::FPSControllerComponent::step_height_crouch = 0.15f
protected

◆ velocity

vec3 tram::FPSControllerComponent::velocity = {0.0f, 0.0f, 0.0f}
protected

◆ walk_collision

Component<TriggerComponent> tram::FPSControllerComponent::walk_collision
protected

◆ walk_speed

float tram::FPSControllerComponent::walk_speed = 0.1f
protected

◆ wallbonk_callback

void(* tram::FPSControllerComponent::wallbonk_callback) (ControllerComponent *, Physics::Collision) = nullptr
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/controller.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/controller.cpp
================================================ FILE: docs/cppapi/classtram_1_1_file-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::File Member List
================================================ FILE: docs/cppapi/classtram_1_1_file.html ================================================ Tramway SDK: tram::File Struct Reference
Tramway SDK v0.1.1

Very fast file reader/writer. More...

#include <framework/file.h>

Public Types

enum  AccessMode : uint32_t {
  READ = 1 , WRITE = 2 , PAUSE_LINE = 4 , TEXT = 8 ,
  BINARY = 16
}
 

Public Member Functions

 File (char const *path, uint32_t mode)
 Opens a file. More...
 
 ~File ()
 
bool is_open ()
 Returns true if file was opened. More...
 
bool is_continue ()
 Returns true if file parser has not reached end. More...
 
void write_int8 (int8_t value)
 
void write_int16 (int16_t value)
 
void write_int32 (int32_t value)
 
void write_int64 (int64_t value)
 
void write_uint8 (uint8_t value)
 
void write_uint16 (uint16_t value)
 
void write_uint32 (uint32_t value)
 
void write_uint64 (uint64_t value)
 
void write_float32 (float value)
 
void write_float64 (double value)
 
void write_name (name_t value)
 
void write_string (const char *value)
 
void write_newline ()
 Writes a newline to the file. More...
 
int8_t read_int8 ()
 
int16_t read_int16 ()
 
int32_t read_int32 ()
 
int64_t read_int64 ()
 
uint8_t read_uint8 ()
 
uint16_t read_uint16 ()
 
uint32_t read_uint32 ()
 
uint64_t read_uint64 ()
 
float read_float32 ()
 
double read_float64 ()
 
name_t read_name ()
 
std::string_view read_string ()
 
std::string_view read_token ()
 
std::string_view read_line ()
 Parses off the remaining line. More...
 
void skip_linebreak ()
 Skips over a linebreak. More...
 
void reset_flags ()
 Resets the error flag. More...
 
bool was_error ()
 Checks if there has been an error. More...
 

Public Attributes

std::string path
 
uint32_t mode
 
bool pause_next
 
char * buffer = nullptr
 
char * buffer_cursor = nullptr
 
char * buffer_end = nullptr
 
FileReaderreader = nullptr
 
FileWriterwriter = nullptr
 
FileReaderParserreader_parser = nullptr
 
FileWriterParserwriter_parser = nullptr
 

Detailed Description

Very fast file reader/writer.

For reading a file, set the File::READ flag in the mode bitmask. The file, referenced by the path, will be immediately opened, if possible. After opening, it will be fully read into memory. After that you can use all of the read_xyz() methods.

To check if the file has ended and no more reading can be done, use the is_continue() method.

To check whether the file was opened, use the is_open() method.

For writing to a file, set the File::WRITE flag in the mode bitmask.

After that you can use the various write_xyz() methods.

All of the writing will take place in a large buffer, which after the File class is destructed will be written to disk.

See also
https://racenis.github.io/tram-sdk/documentation/framework/file.html

Member Enumeration Documentation

◆ AccessMode

enum tram::File::AccessMode : uint32_t
Enumerator
READ 
WRITE 
PAUSE_LINE 
TEXT 
BINARY 

Constructor & Destructor Documentation

◆ File()

tram::File::File ( char const *  path,
uint32_t  mode 
)

Opens a file.

Parameters
pathPath to the file. If no prefix is set, this path will be interpreted as being relative to the project/executable working directory.
modeMode is a bitmask consisting of flags that can be found in the AccessMode enum.

◆ ~File()

tram::File::~File ( )

Member Function Documentation

◆ is_continue()

bool tram::File::is_continue ( )

Returns true if file parser has not reached end.

◆ is_open()

bool tram::File::is_open ( )

Returns true if file was opened.

◆ read_float32()

float tram::File::read_float32 ( )

◆ read_float64()

double tram::File::read_float64 ( )

◆ read_int16()

int16_t tram::File::read_int16 ( )

◆ read_int32()

int32_t tram::File::read_int32 ( )

◆ read_int64()

int64_t tram::File::read_int64 ( )

◆ read_int8()

int8_t tram::File::read_int8 ( )

◆ read_line()

std::string_view tram::File::read_line ( )

Parses off the remaining line.

◆ read_name()

name_t tram::File::read_name ( )

◆ read_string()

std::string_view tram::File::read_string ( )

◆ read_token()

std::string_view tram::File::read_token ( )

◆ read_uint16()

uint16_t tram::File::read_uint16 ( )

◆ read_uint32()

uint32_t tram::File::read_uint32 ( )

◆ read_uint64()

uint64_t tram::File::read_uint64 ( )

◆ read_uint8()

uint8_t tram::File::read_uint8 ( )

◆ reset_flags()

void tram::File::reset_flags ( )

Resets the error flag.

◆ skip_linebreak()

void tram::File::skip_linebreak ( )

Skips over a linebreak.

Probably only useful if the file has been opened for reading in the MODE_PAUSE_LINE mode, since the parser will stop at any new line and the only way to continue parsing is to use this method.

◆ was_error()

bool tram::File::was_error ( )

Checks if there has been an error.

The error flag does not get cleared on its own, so if an error ocurred anywhere, this method will report that. To determine whether a certain value has been parsed correctly, first use the reset_flags() method to reset the error flag, then use the read_xyz() method to read in the value and then use this method to determine whether there was an error in parsing that specific method.

◆ write_float32()

void tram::File::write_float32 ( float  value)

◆ write_float64()

void tram::File::write_float64 ( double  value)

◆ write_int16()

void tram::File::write_int16 ( int16_t  value)

◆ write_int32()

void tram::File::write_int32 ( int32_t  value)

◆ write_int64()

void tram::File::write_int64 ( int64_t  value)

◆ write_int8()

void tram::File::write_int8 ( int8_t  value)

◆ write_name()

void tram::File::write_name ( name_t  value)

◆ write_newline()

void tram::File::write_newline ( )

Writes a newline to the file.

The newline is just the \n character.

◆ write_string()

void tram::File::write_string ( const char *  value)

◆ write_uint16()

void tram::File::write_uint16 ( uint16_t  value)

◆ write_uint32()

void tram::File::write_uint32 ( uint32_t  value)

◆ write_uint64()

void tram::File::write_uint64 ( uint64_t  value)

◆ write_uint8()

void tram::File::write_uint8 ( uint8_t  value)

Member Data Documentation

◆ buffer

char* tram::File::buffer = nullptr

◆ buffer_cursor

char* tram::File::buffer_cursor = nullptr

◆ buffer_end

char* tram::File::buffer_end = nullptr

◆ mode

uint32_t tram::File::mode

◆ path

std::string tram::File::path

◆ pause_next

bool tram::File::pause_next

◆ reader

FileReader* tram::File::reader = nullptr

◆ reader_parser

FileReaderParser* tram::File::reader_parser = nullptr

◆ writer

FileWriter* tram::File::writer = nullptr

◆ writer_parser

FileWriterParser* tram::File::writer_parser = nullptr

The documentation for this struct was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/file.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/file.cpp
================================================ FILE: docs/cppapi/classtram_1_1_file_reader-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::FileReader Member List

This is the complete list of members for tram::FileReader, including all inherited members.

GetContents()=0tram::FileReaderpure virtual
GetReader(const char *path)tram::FileReaderstatic
GetSearchList()tram::FileReaderstatic
GetSize()=0tram::FileReaderpure virtual
GetStatus()=0tram::FileReaderpure virtual
SetSearchList()tram::FileReaderstatic
Yeet()=0tram::FileReaderpure virtual
~FileReader()=defaulttram::FileReadervirtual
================================================ FILE: docs/cppapi/classtram_1_1_file_reader.html ================================================ Tramway SDK: tram::FileReader Class Reference
Tramway SDK v0.1.1
tram::FileReader Class Referenceabstract

#include <file.h>

Inheritance diagram for tram::FileReader:
tram::DiskReader

Public Member Functions

virtual ~FileReader ()=default
 
virtual const char * GetContents ()=0
 
virtual size_t GetSize ()=0
 
virtual FileStatus GetStatus ()=0
 
virtual void Yeet ()=0
 

Static Public Member Functions

static FileReaderGetReader (const char *path)
 
static void SetSearchList ()
 
static std::vector< FileSourceGetSearchList ()
 

Constructor & Destructor Documentation

◆ ~FileReader()

virtual tram::FileReader::~FileReader ( )
virtualdefault

Member Function Documentation

◆ GetContents()

virtual const char * tram::FileReader::GetContents ( )
pure virtual

Implemented in tram::DiskReader.

◆ GetReader()

FileReader * tram::FileReader::GetReader ( const char *  path)
static

◆ GetSearchList()

std::vector< FileSource > tram::FileReader::GetSearchList ( )
static

◆ GetSize()

virtual size_t tram::FileReader::GetSize ( )
pure virtual

Implemented in tram::DiskReader.

◆ GetStatus()

virtual FileStatus tram::FileReader::GetStatus ( )
pure virtual

Implemented in tram::DiskReader.

◆ SetSearchList()

void tram::FileReader::SetSearchList ( )
static

◆ Yeet()

virtual void tram::FileReader::Yeet ( )
pure virtual

Implemented in tram::DiskReader.


The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/platform/file.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/platform/file.cpp
================================================ FILE: docs/cppapi/classtram_1_1_file_reader_parser-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::FileReaderParser Member List
================================================ FILE: docs/cppapi/classtram_1_1_file_reader_parser.html ================================================ Tramway SDK: tram::FileReaderParser Class Reference
Tramway SDK v0.1.1
tram::FileReaderParser Class Referenceabstract
Inheritance diagram for tram::FileReaderParser:
tram::TextReaderParser

Public Member Functions

virtual int8_t read_int8 ()=0
 
virtual int16_t read_int16 ()=0
 
virtual int32_t read_int32 ()=0
 
virtual int64_t read_int64 ()=0
 
virtual uint8_t read_uint8 ()=0
 
virtual uint16_t read_uint16 ()=0
 
virtual uint32_t read_uint32 ()=0
 
virtual uint64_t read_uint64 ()=0
 
virtual float read_float32 ()=0
 
virtual double read_float64 ()=0
 
virtual name_t read_name ()=0
 
virtual std::string_view read_string ()=0
 
virtual std::string_view read_token ()=0
 
virtual std::string_view read_line ()=0
 
virtual void skip_newline ()=0
 
virtual void skip_whitespace ()=0
 
virtual bool is_error ()=0
 
virtual void reset_error ()=0
 
virtual bool is_continue ()=0
 
void set_skip_value (bool skip_value)
 
void set_skip_newline (bool skip_newline)
 

Protected Attributes

bool skip_newline_flag = true
 
bool skip_value = true
 

Member Function Documentation

◆ is_continue()

virtual bool tram::FileReaderParser::is_continue ( )
pure virtual

Implemented in tram::TextReaderParser.

◆ is_error()

virtual bool tram::FileReaderParser::is_error ( )
pure virtual

Implemented in tram::TextReaderParser.

◆ read_float32()

virtual float tram::FileReaderParser::read_float32 ( )
pure virtual

Implemented in tram::TextReaderParser.

◆ read_float64()

virtual double tram::FileReaderParser::read_float64 ( )
pure virtual

Implemented in tram::TextReaderParser.

◆ read_int16()

virtual int16_t tram::FileReaderParser::read_int16 ( )
pure virtual

Implemented in tram::TextReaderParser.

◆ read_int32()

virtual int32_t tram::FileReaderParser::read_int32 ( )
pure virtual

Implemented in tram::TextReaderParser.

◆ read_int64()

virtual int64_t tram::FileReaderParser::read_int64 ( )
pure virtual

Implemented in tram::TextReaderParser.

◆ read_int8()

virtual int8_t tram::FileReaderParser::read_int8 ( )
pure virtual

Implemented in tram::TextReaderParser.

◆ read_line()

virtual std::string_view tram::FileReaderParser::read_line ( )
pure virtual

Implemented in tram::TextReaderParser.

◆ read_name()

virtual name_t tram::FileReaderParser::read_name ( )
pure virtual

Implemented in tram::TextReaderParser.

◆ read_string()

virtual std::string_view tram::FileReaderParser::read_string ( )
pure virtual

Implemented in tram::TextReaderParser.

◆ read_token()

virtual std::string_view tram::FileReaderParser::read_token ( )
pure virtual

Implemented in tram::TextReaderParser.

◆ read_uint16()

virtual uint16_t tram::FileReaderParser::read_uint16 ( )
pure virtual

Implemented in tram::TextReaderParser.

◆ read_uint32()

virtual uint32_t tram::FileReaderParser::read_uint32 ( )
pure virtual

Implemented in tram::TextReaderParser.

◆ read_uint64()

virtual uint64_t tram::FileReaderParser::read_uint64 ( )
pure virtual

Implemented in tram::TextReaderParser.

◆ read_uint8()

virtual uint8_t tram::FileReaderParser::read_uint8 ( )
pure virtual

Implemented in tram::TextReaderParser.

◆ reset_error()

virtual void tram::FileReaderParser::reset_error ( )
pure virtual

Implemented in tram::TextReaderParser.

◆ set_skip_newline()

void tram::FileReaderParser::set_skip_newline ( bool  skip_newline)
inline

◆ set_skip_value()

void tram::FileReaderParser::set_skip_value ( bool  skip_value)
inline

◆ skip_newline()

virtual void tram::FileReaderParser::skip_newline ( )
pure virtual

Implemented in tram::TextReaderParser.

◆ skip_whitespace()

virtual void tram::FileReaderParser::skip_whitespace ( )
pure virtual

Implemented in tram::TextReaderParser.

Member Data Documentation

◆ skip_newline_flag

bool tram::FileReaderParser::skip_newline_flag = true
protected

◆ skip_value

bool tram::FileReaderParser::skip_value = true
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/file.cpp
================================================ FILE: docs/cppapi/classtram_1_1_file_writer-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::FileWriter Member List

This is the complete list of members for tram::FileWriter, including all inherited members.

GetMediumList()tram::FileWriterstatic
GetStatus()=0tram::FileWriterpure virtual
GetWriter(const char *path)tram::FileWriterstatic
SetContents(const char *contents, size_t size)=0tram::FileWriterpure virtual
SetMediumList()tram::FileWriterstatic
Yeet()=0tram::FileWriterpure virtual
~FileWriter()=defaulttram::FileWritervirtual
================================================ FILE: docs/cppapi/classtram_1_1_file_writer.html ================================================ Tramway SDK: tram::FileWriter Class Reference
Tramway SDK v0.1.1
tram::FileWriter Class Referenceabstract

#include <file.h>

Inheritance diagram for tram::FileWriter:
tram::DiskWriter

Public Member Functions

virtual ~FileWriter ()=default
 
virtual void SetContents (const char *contents, size_t size)=0
 
virtual FileStatus GetStatus ()=0
 
virtual void Yeet ()=0
 

Static Public Member Functions

static FileWriterGetWriter (const char *path)
 
static void SetMediumList ()
 
static std::vector< FileSourceGetMediumList ()
 

Constructor & Destructor Documentation

◆ ~FileWriter()

virtual tram::FileWriter::~FileWriter ( )
virtualdefault

Member Function Documentation

◆ GetMediumList()

std::vector< FileSource > tram::FileWriter::GetMediumList ( )
static

◆ GetStatus()

virtual FileStatus tram::FileWriter::GetStatus ( )
pure virtual

Implemented in tram::DiskWriter.

◆ GetWriter()

FileWriter * tram::FileWriter::GetWriter ( const char *  path)
static

◆ SetContents()

virtual void tram::FileWriter::SetContents ( const char *  contents,
size_t  size 
)
pure virtual

Implemented in tram::DiskWriter.

◆ SetMediumList()

void tram::FileWriter::SetMediumList ( )
static

◆ Yeet()

virtual void tram::FileWriter::Yeet ( )
pure virtual

Implemented in tram::DiskWriter.


The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/platform/file.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/platform/file.cpp
================================================ FILE: docs/cppapi/classtram_1_1_file_writer_parser-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::FileWriterParser Member List

This is the complete list of members for tram::FileWriterParser, including all inherited members.

write_float32(float value)=0tram::FileWriterParserpure virtual
write_float64(double value)=0tram::FileWriterParserpure virtual
write_int16(int16_t value)=0tram::FileWriterParserpure virtual
write_int32(int32_t value)=0tram::FileWriterParserpure virtual
write_int64(int64_t value)=0tram::FileWriterParserpure virtual
write_int8(int8_t value)=0tram::FileWriterParserpure virtual
write_name(name_t value)=0tram::FileWriterParserpure virtual
write_newline()=0tram::FileWriterParserpure virtual
write_string(const char *value)=0tram::FileWriterParserpure virtual
write_uint16(uint16_t value)=0tram::FileWriterParserpure virtual
write_uint32(uint32_t value)=0tram::FileWriterParserpure virtual
write_uint64(uint64_t value)=0tram::FileWriterParserpure virtual
write_uint8(uint8_t value)=0tram::FileWriterParserpure virtual
================================================ FILE: docs/cppapi/classtram_1_1_file_writer_parser.html ================================================ Tramway SDK: tram::FileWriterParser Class Reference
Tramway SDK v0.1.1
tram::FileWriterParser Class Referenceabstract
Inheritance diagram for tram::FileWriterParser:
tram::TextWriterParser

Public Member Functions

virtual void write_int8 (int8_t value)=0
 
virtual void write_int16 (int16_t value)=0
 
virtual void write_int32 (int32_t value)=0
 
virtual void write_int64 (int64_t value)=0
 
virtual void write_uint8 (uint8_t value)=0
 
virtual void write_uint16 (uint16_t value)=0
 
virtual void write_uint32 (uint32_t value)=0
 
virtual void write_uint64 (uint64_t value)=0
 
virtual void write_float32 (float value)=0
 
virtual void write_float64 (double value)=0
 
virtual void write_name (name_t value)=0
 
virtual void write_string (const char *value)=0
 
virtual void write_newline ()=0
 

Member Function Documentation

◆ write_float32()

virtual void tram::FileWriterParser::write_float32 ( float  value)
pure virtual

Implemented in tram::TextWriterParser.

◆ write_float64()

virtual void tram::FileWriterParser::write_float64 ( double  value)
pure virtual

Implemented in tram::TextWriterParser.

◆ write_int16()

virtual void tram::FileWriterParser::write_int16 ( int16_t  value)
pure virtual

Implemented in tram::TextWriterParser.

◆ write_int32()

virtual void tram::FileWriterParser::write_int32 ( int32_t  value)
pure virtual

Implemented in tram::TextWriterParser.

◆ write_int64()

virtual void tram::FileWriterParser::write_int64 ( int64_t  value)
pure virtual

Implemented in tram::TextWriterParser.

◆ write_int8()

virtual void tram::FileWriterParser::write_int8 ( int8_t  value)
pure virtual

Implemented in tram::TextWriterParser.

◆ write_name()

virtual void tram::FileWriterParser::write_name ( name_t  value)
pure virtual

Implemented in tram::TextWriterParser.

◆ write_newline()

virtual void tram::FileWriterParser::write_newline ( )
pure virtual

Implemented in tram::TextWriterParser.

◆ write_string()

virtual void tram::FileWriterParser::write_string ( const char *  value)
pure virtual

Implemented in tram::TextWriterParser.

◆ write_uint16()

virtual void tram::FileWriterParser::write_uint16 ( uint16_t  value)
pure virtual

Implemented in tram::TextWriterParser.

◆ write_uint32()

virtual void tram::FileWriterParser::write_uint32 ( uint32_t  value)
pure virtual

Implemented in tram::TextWriterParser.

◆ write_uint64()

virtual void tram::FileWriterParser::write_uint64 ( uint64_t  value)
pure virtual

Implemented in tram::TextWriterParser.

◆ write_uint8()

virtual void tram::FileWriterParser::write_uint8 ( uint8_t  value)
pure virtual

Implemented in tram::TextWriterParser.


The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/file.cpp
================================================ FILE: docs/cppapi/classtram_1_1_graph-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Graph Member List

This is the complete list of members for tram::Graph, including all inherited members.

edgestram::Graphprotected
nodestram::Graphprotected
================================================ FILE: docs/cppapi/classtram_1_1_graph.html ================================================ Tramway SDK: tram::Graph Class Reference
Tramway SDK v0.1.1
tram::Graph Class Reference

#include <graph.h>

Inheritance diagram for tram::Graph:
tram::Path

Protected Attributes

std::vector< Nodenodes
 
std::vector< Edgeedges
 

Member Data Documentation

◆ edges

std::vector<Edge> tram::Graph::edges
protected

◆ nodes

std::vector<Node> tram::Graph::nodes
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/graph.h
================================================ FILE: docs/cppapi/classtram_1_1_hashmap-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Hashmap< T > Member List

This is the complete list of members for tram::Hashmap< T >, including all inherited members.

Exists(UID key)tram::Hashmap< T >inline
Exists(uint32_t key)tram::Hashmap< T >inline
Find(UID key)tram::Hashmap< T >inline
Find(uint32_t key)tram::Hashmap< T >inline
firsttram::Hashmap< T >protected
FLAG_DELETED enum valuetram::Hashmap< T >protected
FLAG_RECORD enum valuetram::Hashmap< T >protected
hash_parametertram::Hashmap< T >protected
Hashmap(const char *name, size_t max_size)tram::Hashmap< T >inline
Hashmap(const char *name, size_t max_size, std::initializer_list< std::pair< uint32_t, T > > list)tram::Hashmap< T >inline
Insert(UID key, T value)tram::Hashmap< T >inline
Insert(uint32_t key, T value)tram::Hashmap< T >inline
lasttram::Hashmap< T >protected
max_sizetram::Hashmap< T >protected
nametram::Hashmap< T >protected
operator[](UID key)tram::Hashmap< T >inline
operator[](uint32_t key)tram::Hashmap< T >inline
paddingtram::Hashmap< T >protected
Remove(UID key)tram::Hashmap< T >inline
Remove(uint32_t key)tram::Hashmap< T >inline
sizetram::Hashmap< T >protected
================================================ FILE: docs/cppapi/classtram_1_1_hashmap.html ================================================ Tramway SDK: tram::Hashmap< T > Class Template Reference
Tramway SDK v0.1.1
tram::Hashmap< T > Class Template Reference

#include <hashmap.h>

Classes

struct  Record
 

Public Member Functions

constexpr Hashmap (const char *name, size_t max_size)
 
constexpr Hashmap (const char *name, size_t max_size, std::initializer_list< std::pair< uint32_t, T > > list)
 
Find (UID key)
 
Find (uint32_t key)
 
bool Exists (UID key)
 
bool Exists (uint32_t key)
 
void Insert (UID key, T value)
 
void Insert (uint32_t key, T value)
 
void Remove (UID key)
 
void Remove (uint32_t key)
 
T & operator[] (UID key)
 
T & operator[] (uint32_t key)
 

Protected Types

enum  { FLAG_RECORD = 1 , FLAG_DELETED = 2 }
 

Protected Attributes

const size_t padding = 10
 
std::string name
 
size_t size = 0
 
size_t max_size = 0
 
uint32_t hash_parameter = 0
 
Recordfirst = nullptr
 
Recordlast = nullptr
 

Member Enumeration Documentation

◆ anonymous enum

template<typename T >
anonymous enum
protected
Enumerator
FLAG_RECORD 
FLAG_DELETED 

Constructor & Destructor Documentation

◆ Hashmap() [1/2]

template<typename T >
constexpr tram::Hashmap< T >::Hashmap ( const char *  name,
size_t  max_size 
)
inlineconstexpr

◆ Hashmap() [2/2]

template<typename T >
constexpr tram::Hashmap< T >::Hashmap ( const char *  name,
size_t  max_size,
std::initializer_list< std::pair< uint32_t, T > >  list 
)
inlineconstexpr

Member Function Documentation

◆ Exists() [1/2]

template<typename T >
bool tram::Hashmap< T >::Exists ( UID  key)
inline

◆ Exists() [2/2]

template<typename T >
bool tram::Hashmap< T >::Exists ( uint32_t  key)
inline

◆ Find() [1/2]

template<typename T >
T tram::Hashmap< T >::Find ( UID  key)
inline

◆ Find() [2/2]

template<typename T >
T tram::Hashmap< T >::Find ( uint32_t  key)
inline

◆ Insert() [1/2]

template<typename T >
void tram::Hashmap< T >::Insert ( UID  key,
value 
)
inline

◆ Insert() [2/2]

template<typename T >
void tram::Hashmap< T >::Insert ( uint32_t  key,
value 
)
inline

◆ operator[]() [1/2]

template<typename T >
T & tram::Hashmap< T >::operator[] ( UID  key)
inline

◆ operator[]() [2/2]

template<typename T >
T & tram::Hashmap< T >::operator[] ( uint32_t  key)
inline

◆ Remove() [1/2]

template<typename T >
void tram::Hashmap< T >::Remove ( UID  key)
inline

◆ Remove() [2/2]

template<typename T >
void tram::Hashmap< T >::Remove ( uint32_t  key)
inline

Member Data Documentation

◆ first

template<typename T >
Record* tram::Hashmap< T >::first = nullptr
protected

◆ hash_parameter

template<typename T >
uint32_t tram::Hashmap< T >::hash_parameter = 0
protected

◆ last

template<typename T >
Record* tram::Hashmap< T >::last = nullptr
protected

◆ max_size

template<typename T >
size_t tram::Hashmap< T >::max_size = 0
protected

◆ name

template<typename T >
std::string tram::Hashmap< T >::name
protected

◆ padding

template<typename T >
const size_t tram::Hashmap< T >::padding = 10
protected

◆ size

template<typename T >
size_t tram::Hashmap< T >::size = 0
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/hashmap.h
================================================ FILE: docs/cppapi/classtram_1_1_lamp-members.html ================================================ Tramway SDK: Member List
Tramway SDK
tram::Lamp Member List

This is the complete list of members for tram::Lamp, including all inherited members.

auto_loadtram::Entityprotected
celltram::Entityprotected
changedtram::Entityprotected
CheckTransition()tram::Entity
color_btram::Lampprotected
color_gtram::Lampprotected
color_rtram::Lampprotected
distancetram::Lampprotected
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
idtram::Entityprotected
in_interiortram::Entityprotected
is_loadedtram::Entityprotected
is_persistenttram::Entityprotected
is_serializabletram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsInInterior() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsPersistent() consttram::Entityinline
Lamp(const SharedEntityData &, const SerializedFieldArray &)tram::Lamp
lighttram::Lampprotected
Load()tram::Lampvirtual
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
MessageHandler(Message &msg)tram::Lampvirtual
nametram::Entityprotected
Query(query_t query)tram::Entityinlinevirtual
Register()tram::Lampstatic
RegisterType(name_t name, Entity *(*constr_func)(const SharedEntityData &, const SerializedFieldArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)tram::Entitystatic
rotationtram::Entityprotected
Serialize()tram::Lampvirtual
SetAutoLoad(bool auto_load)tram::Entityinline
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Lampvirtual
SetPersistent(bool persistent)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
Unload()tram::Lampvirtual
UpdateParameters()tram::Lampvirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_lamp.html ================================================ Tramway SDK: tram::Lamp Class Reference
Tramway SDK

#include <lamp.h>

Inheritance diagram for tram::Lamp:
tram::Entity

Public Member Functions

 Lamp (const SharedEntityData &, const SerializedFieldArray &)
 
void UpdateParameters ()
 
void SetParameters ()
 
void Load ()
 
void Unload ()
 
void Serialize ()
 
void MessageHandler (Message &msg)
 
- Public Member Functions inherited from tram::Entity
 Entity (name_t name)
 
 Entity (const SharedEntityData &)
 
virtual ~Entity ()
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 
bool IsLoaded () const
 
bool IsAutoLoad () const
 
bool IsInInterior () const
 
bool IsPersistent () const
 
bool IsChanged () const
 
void SetAutoLoad (bool auto_load)
 
void SetPersistent (bool persistent)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual value_t Query (query_t query)
 
void CheckTransition ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void RegisterType (name_t name, Entity *(*constr_func)(const SharedEntityData &, const SerializedFieldArray &), void(*destr_func)(Entity *), const uint32_t *fields, size_t fieldcount)
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityFind (id_t entity_id)
 
static EntityFind (name_t entity_name)
 

Protected Attributes

Component< LightComponentlight
 
float color_r
 
float color_g
 
float color_b
 
float distance
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
bool is_persistent = true
 
bool is_loaded = false
 
bool auto_load = true
 
bool in_interior = false
 
bool changed = false
 
bool is_serializable = true
 
WorldCellcell = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 

Additional Inherited Members

- Protected Member Functions inherited from tram::Entity
void Register ()
 

Constructor & Destructor Documentation

◆ Lamp()

tram::Lamp::Lamp ( const SharedEntityData shared_data,
const SerializedFieldArray field_array 
)

Member Function Documentation

◆ Load()

void tram::Lamp::Load ( )
virtual

Implements tram::Entity.

◆ MessageHandler()

void tram::Lamp::MessageHandler ( Message msg)
virtual

Implements tram::Entity.

◆ Register()

void tram::Lamp::Register ( )
static

◆ Serialize()

void tram::Lamp::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Lamp::SetParameters ( )
virtual

Implements tram::Entity.

◆ Unload()

void tram::Lamp::Unload ( )
virtual

Implements tram::Entity.

◆ UpdateParameters()

void tram::Lamp::UpdateParameters ( )
virtual

Implements tram::Entity.

Member Data Documentation

◆ color_b

float tram::Lamp::color_b
protected

◆ color_g

float tram::Lamp::color_g
protected

◆ color_r

float tram::Lamp::color_r
protected

◆ distance

float tram::Lamp::distance
protected

◆ light

Component<LightComponent> tram::Lamp::light
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/lamp.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/lamp.cpp
================================================ FILE: docs/cppapi/classtram_1_1_light-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Light Member List

This is the complete list of members for tram::Light, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
colortram::Lightprotected
DELETED enum valuetram::Entityprotected
directiontram::Lightprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
distancetram::Lightprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
exponenttram::Lightprotected
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()tram::Lightvirtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Light(const SharedEntityData &, const ValueArray &)tram::Light
lighttram::Lightprotected
Load()tram::Lightvirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Lightvirtual
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
Register()tram::Lightstatic
RegisterType(name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)tram::Entitystatic
rotationtram::Entityprotected
Serialize()tram::Lightvirtual
SetAutoLoad(bool is)tram::Entityinline
SetFlag(uint32_t flag, bool value)tram::Entityinlineprotected
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Lightvirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
Unload()tram::Lightvirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateParameters()tram::Lightvirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_light.html ================================================ Tramway SDK: tram::Light Class Reference
Tramway SDK v0.1.1

LightComponent wrapper. More...

#include <entities/light.h>

Inheritance diagram for tram::Light:
tram::Entity

Public Member Functions

 Light (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 Called when Entity::UpdateTransform is called. More...
 
void SetParameters ()
 Called when either Entity::SetLocation or Entity::SetRotation is called. More...
 
void Load ()
 Loads an entity. More...
 
void Unload ()
 Unloads an entity. More...
 
void Serialize ()
 
void MessageHandler (Message &msg)
 Allows entities to receive messages. More...
 
name_t GetType ()
 Returns the type of the entity. More...
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 Destructs the entity. More...
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 Returns the entity's parent cell. More...
 
bool IsLoaded () const
 Returns the entity load status. More...
 
bool IsAutoLoad () const
 Returns the auto load flag status. More...
 
bool IsPersistent () const
 Returns the persistence status of an entity. More...
 
bool IsChanged () const
 
bool IsDeleted () const
 Returns the entity deletion status. More...
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 Purges the entity. More...
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 Allows entities to receive events. More...
 
void CheckTransition ()
 Check whether an entity has entered a different cell. More...
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 Updates entities. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)
 Registers a new entity type. More...
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 Creates an entity. More...
 
static EntityFind (id_t entity_id)
 Finds the entity by its ID number. More...
 
static EntityFind (name_t entity_name)
 Finds the entity by its name. More...
 

Protected Attributes

Component< LightComponentlight
 
vec3 color
 
float distance
 
vec3 direction
 
float exponent
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 Registers the entity. More...
 
void Unregister ()
 Unregisters the entity. More...
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 
void SetFlag (uint32_t flag, bool value)
 

Detailed Description

Constructor & Destructor Documentation

◆ Light()

tram::Light::Light ( const SharedEntityData shared_data,
const ValueArray field_array 
)

Member Function Documentation

◆ GetType()

name_t tram::Light::GetType ( )
virtual

Returns the type of the entity.

Usually this method returns the same name that is used to Entity::RegisterType() its type.

Implements tram::Entity.

◆ Load()

void tram::Light::Load ( )
virtual

Loads an entity.

Usually the Load() method for an entity type will set up its components, event listeners, etc. After being loaded, the entity will be ready for simulation.

When implementing this method, make sure to flag the entity with the LOADED flag, so that world streaming system doesn't try to load your entity twice.

Implements tram::Entity.

◆ MessageHandler()

void tram::Light::MessageHandler ( Message msg)
virtual

Allows entities to receive messages.

Whenever an entity is sent a Message, once the Message::Dispatch() function has been called, the entity will gets the message passed to it through this method.

Implements tram::Entity.

◆ Register()

void tram::Light::Register ( )
static

◆ Serialize()

void tram::Light::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Light::SetParameters ( )
virtual

Called when either Entity::SetLocation or Entity::SetRotation is called.

Usually this method is used to relocate or rerotate an entity.

If the entity has a PhysicsComponent, its position or rotation is usually set from this method, otherwise in the next Physics update step, the entity's previous rotation and location will be restored.

Implements tram::Entity.

◆ Unload()

void tram::Light::Unload ( )
virtual

Unloads an entity.

Usually the Load() method for an entity type will destroy its its components, event listeners, etc. After being unloaded, the entity have been removed from the simulation.

When implementing this method, make sure to clear your entity's LOADED flag, so that world streaming system can load the entity again.

Implements tram::Entity.

◆ UpdateParameters()

void tram::Light::UpdateParameters ( )
virtual

Called when Entity::UpdateTransform is called.

From the runtime's side, only the Physics system will call the Entity::UpdateTransform() method, and through it, this method.

Usually this method is used to forward the entity's new position and rotation to its RenderComponent, if it has one.

If the entity has a PhysicsComponent, its position or rotation is never updated from this method.

Implements tram::Entity.

Member Data Documentation

◆ color

vec3 tram::Light::color
protected

◆ direction

vec3 tram::Light::direction
protected

◆ distance

float tram::Light::distance
protected

◆ exponent

float tram::Light::exponent
protected

◆ light

Component<LightComponent> tram::Light::light
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/light.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/light.cpp
================================================ FILE: docs/cppapi/classtram_1_1_light_component-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::LightComponent Member List
================================================ FILE: docs/cppapi/classtram_1_1_light_component.html ================================================ Tramway SDK: tram::LightComponent Class Reference
Tramway SDK v0.1.1

Provides a real-time illumination for the scene. More...

#include <components/light.h>

Inheritance diagram for tram::LightComponent:
tram::EntityComponent

Public Member Functions

void Init ()
 Initializes an entity component. More...
 
void Start ()
 
void SetLocation (vec3 location)
 Sets the location of the light. More...
 
void SetColor (Render::color_t color)
 Sets the color of the light. More...
 
void SetDistance (float dist)
 Sets the distance of the light. More...
 
void SetDirection (vec3 direction)
 
void SetExponent (float exponent)
 
vec3 GetColor ()
 Returns the color of the light. More...
 
float GetDistance ()
 Returns the distance of the light. More...
 
void EventHandler (Event &event)
 
 ~LightComponent ()
 
- Public Member Functions inherited from tram::EntityComponent
 EntityComponent ()=default
 
virtual ~EntityComponent ()=default
 
bool IsReady ()
 Returns the component's readiness. More...
 
bool IsInit ()
 Returns the component's init status. More...
 
EntityGetParent ()
 
void SetParent (Entity *parent)
 

Static Public Member Functions

static bool IsLightDraw ()
 Checks whether the lights are drawn. More...
 
static void SetLightDraw (bool)
 Sets the drawing oflights. More...
 

Protected Member Functions

void Update ()
 
void SetupModel ()
 
- Protected Member Functions inherited from tram::EntityComponent
void ResourceReady ()
 Notifies the component of a streamed-in resource. More...
 

Protected Attributes

Render::light_t light = {}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
Render::color_t color = {1.0f, 1.0f, 1.0f}
 
float distance = 15.0f
 
vec3 direction = {0.0f, 0.0f, -1.0f}
 
float exponent = 0.0f
 
Component< RenderComponentmodel
 
- Protected Attributes inherited from tram::EntityComponent
size_t resources_waiting = 0
 
bool is_ready = false
 
bool is_init = false
 
Entityparent = nullptr
 

Detailed Description

Provides a real-time illumination for the scene.

See also
https://racenis.github.io/tram-sdk/documentation/components/light.html

Constructor & Destructor Documentation

◆ ~LightComponent()

tram::LightComponent::~LightComponent ( )

Member Function Documentation

◆ EventHandler()

void tram::LightComponent::EventHandler ( Event event)
inlinevirtual

Implements tram::EntityComponent.

◆ GetColor()

Render::color_t tram::LightComponent::GetColor ( )

Returns the color of the light.

◆ GetDistance()

float tram::LightComponent::GetDistance ( )

Returns the distance of the light.

◆ Init()

void tram::LightComponent::Init ( )
virtual

Initializes an entity component.

If an entity component has all of its resources already loaded, this will immediately Start() the component.

Reimplemented from tram::EntityComponent.

◆ IsLightDraw()

bool tram::LightComponent::IsLightDraw ( )
static

Checks whether the lights are drawn.

Check SetLightDraw() for more info.

◆ SetColor()

void tram::LightComponent::SetColor ( Render::color_t  color)

Sets the color of the light.

◆ SetDirection()

void tram::LightComponent::SetDirection ( vec3  direction)

◆ SetDistance()

void tram::LightComponent::SetDistance ( float  dist)

Sets the distance of the light.

Sets how far the light will travel.

◆ SetExponent()

void tram::LightComponent::SetExponent ( float  exponent)

◆ SetLightDraw()

void tram::LightComponent::SetLightDraw ( bool  draw)
static

Sets the drawing oflights.

If set to true, each light component will initialize a 3D model, which will allow you to see the posiiton of the light sources. Useful for debugging.

◆ SetLocation()

void tram::LightComponent::SetLocation ( vec3  location)

Sets the location of the light.

◆ SetupModel()

void tram::LightComponent::SetupModel ( )
protected

◆ Start()

void tram::LightComponent::Start ( )
inlinevirtual

Implements tram::EntityComponent.

◆ Update()

void tram::LightComponent::Update ( )
protected

Member Data Documentation

◆ color

Render::color_t tram::LightComponent::color = {1.0f, 1.0f, 1.0f}
protected

◆ direction

vec3 tram::LightComponent::direction = {0.0f, 0.0f, -1.0f}
protected

◆ distance

float tram::LightComponent::distance = 15.0f
protected

◆ exponent

float tram::LightComponent::exponent = 0.0f
protected

◆ light

Render::light_t tram::LightComponent::light = {}
protected

◆ location

vec3 tram::LightComponent::location = {0.0f, 0.0f, 0.0f}
protected

◆ model

Component<RenderComponent> tram::LightComponent::model
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/light.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/light.cpp
================================================ FILE: docs/cppapi/classtram_1_1_loader-members.html ================================================ Tramway SDK: Member List
Tramway SDK
tram::Loader Member List

This is the complete list of members for tram::Loader, including all inherited members.

SetLocation(vec3 location)tram::Loader
Update()tram::Loaderstatic
UpdateLocation(vec3 location)tram::Loader
================================================ FILE: docs/cppapi/classtram_1_1_loader.html ================================================ Tramway SDK: tram::Loader Class Reference
Tramway SDK

#include <loader.h>

Public Member Functions

void SetLocation (vec3 location)
 
void UpdateLocation (vec3 location)
 

Static Public Member Functions

static void Update ()
 

Member Function Documentation

◆ SetLocation()

void tram::Loader::SetLocation ( vec3  location)

◆ Update()

void tram::Loader::Update ( )
static

◆ UpdateLocation()

void tram::Loader::UpdateLocation ( vec3  location)

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/loader.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/loader.cpp
================================================ FILE: docs/cppapi/classtram_1_1_marker-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Marker Member List

This is the complete list of members for tram::Marker, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()tram::Markervirtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Markervirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
Marker(const SharedEntityData &, const ValueArray &)tram::Marker
MessageHandler(Message &msg)tram::Markervirtual
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
Register()tram::Markerstatic
RegisterType(name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)tram::Entitystatic
rotationtram::Entityprotected
Serialize()tram::Markervirtual
SetAutoLoad(bool is)tram::Entityinline
SetFlag(uint32_t flag, bool value)tram::Entityinlineprotected
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Markervirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
Unload()tram::Markervirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateParameters()tram::Markervirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_marker.html ================================================ Tramway SDK: tram::Marker Class Reference
Tramway SDK v0.1.1

Functionally inert. More...

#include <entities/marker.h>

Inheritance diagram for tram::Marker:
tram::Entity

Public Member Functions

 Marker (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 Called when Entity::UpdateTransform is called. More...
 
void SetParameters ()
 Called when either Entity::SetLocation or Entity::SetRotation is called. More...
 
void Load ()
 Loads an entity. More...
 
void Unload ()
 Unloads an entity. More...
 
void Serialize ()
 
void MessageHandler (Message &msg)
 Allows entities to receive messages. More...
 
name_t GetType ()
 Returns the type of the entity. More...
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 Destructs the entity. More...
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 Returns the entity's parent cell. More...
 
bool IsLoaded () const
 Returns the entity load status. More...
 
bool IsAutoLoad () const
 Returns the auto load flag status. More...
 
bool IsPersistent () const
 Returns the persistence status of an entity. More...
 
bool IsChanged () const
 
bool IsDeleted () const
 Returns the entity deletion status. More...
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 Purges the entity. More...
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 Allows entities to receive events. More...
 
void CheckTransition ()
 Check whether an entity has entered a different cell. More...
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 Updates entities. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)
 Registers a new entity type. More...
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 Creates an entity. More...
 
static EntityFind (id_t entity_id)
 Finds the entity by its ID number. More...
 
static EntityFind (name_t entity_name)
 Finds the entity by its name. More...
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 Registers the entity. More...
 
void Unregister ()
 Unregisters the entity. More...
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 
void SetFlag (uint32_t flag, bool value)
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Detailed Description

Functionally inert.

Doesn't do anything and has no functionality. Can be used as a template.

See also
https://racenis.github.io/tram-sdk/documentation/entities/marker.html

Constructor & Destructor Documentation

◆ Marker()

tram::Marker::Marker ( const SharedEntityData shared_data,
const ValueArray field_array 
)

Member Function Documentation

◆ GetType()

name_t tram::Marker::GetType ( )
virtual

Returns the type of the entity.

Usually this method returns the same name that is used to Entity::RegisterType() its type.

Implements tram::Entity.

◆ Load()

void tram::Marker::Load ( )
virtual

Loads an entity.

Usually the Load() method for an entity type will set up its components, event listeners, etc. After being loaded, the entity will be ready for simulation.

When implementing this method, make sure to flag the entity with the LOADED flag, so that world streaming system doesn't try to load your entity twice.

Implements tram::Entity.

◆ MessageHandler()

void tram::Marker::MessageHandler ( Message msg)
virtual

Allows entities to receive messages.

Whenever an entity is sent a Message, once the Message::Dispatch() function has been called, the entity will gets the message passed to it through this method.

Implements tram::Entity.

◆ Register()

void tram::Marker::Register ( )
static

◆ Serialize()

void tram::Marker::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Marker::SetParameters ( )
virtual

Called when either Entity::SetLocation or Entity::SetRotation is called.

Usually this method is used to relocate or rerotate an entity.

If the entity has a PhysicsComponent, its position or rotation is usually set from this method, otherwise in the next Physics update step, the entity's previous rotation and location will be restored.

Implements tram::Entity.

◆ Unload()

void tram::Marker::Unload ( )
virtual

Unloads an entity.

Usually the Load() method for an entity type will destroy its its components, event listeners, etc. After being unloaded, the entity have been removed from the simulation.

When implementing this method, make sure to clear your entity's LOADED flag, so that world streaming system can load the entity again.

Implements tram::Entity.

◆ UpdateParameters()

void tram::Marker::UpdateParameters ( )
virtual

Called when Entity::UpdateTransform is called.

From the runtime's side, only the Physics system will call the Entity::UpdateTransform() method, and through it, this method.

Usually this method is used to forward the entity's new position and rotation to its RenderComponent, if it has one.

If the entity has a PhysicsComponent, its position or rotation is never updated from this method.

Implements tram::Entity.


The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/marker.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/marker.cpp
================================================ FILE: docs/cppapi/classtram_1_1_navmesh-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Navmesh Member List

This is the complete list of members for tram::Navmesh, including all inherited members.

Find(name_t name)tram::Navmeshstatic
GetName()tram::Navmeshinline
GetNavmeshNode(node_id_t node_id)tram::Navmeshstatic
GetNodes()tram::Navmeshinline
LoadFromDisk()tram::Navmesh
nametram::Navmeshprotected
Navmesh(name_t name)tram::Navmeshinline
nodestram::Navmeshprotected
~Navmesh()=deletetram::Navmesh
================================================ FILE: docs/cppapi/classtram_1_1_navmesh.html ================================================ Tramway SDK: tram::Navmesh Class Reference
Tramway SDK v0.1.1

Not fully implemented yet. More...

#include <framework/navmesh.h>

Public Member Functions

 Navmesh (name_t name)
 
 ~Navmesh ()=delete
 
name_t GetName ()
 
const std::vector< node_id_t > & GetNodes ()
 
void LoadFromDisk ()
 

Static Public Member Functions

static NavmeshNode GetNavmeshNode (node_id_t node_id)
 
static NavmeshFind (name_t name)
 

Protected Attributes

name_t name
 
std::vector< node_id_tnodes
 

Detailed Description

Constructor & Destructor Documentation

◆ Navmesh()

tram::Navmesh::Navmesh ( name_t  name)
inline

◆ ~Navmesh()

tram::Navmesh::~Navmesh ( )
delete

Member Function Documentation

◆ Find()

Navmesh * tram::Navmesh::Find ( name_t  name)
static

◆ GetName()

name_t tram::Navmesh::GetName ( )
inline

◆ GetNavmeshNode()

NavmeshNode tram::Navmesh::GetNavmeshNode ( node_id_t  node_id)
static

◆ GetNodes()

const std::vector< node_id_t > & tram::Navmesh::GetNodes ( )
inline

◆ LoadFromDisk()

void tram::Navmesh::LoadFromDisk ( )

Member Data Documentation

◆ name

name_t tram::Navmesh::name
protected

◆ nodes

std::vector<node_id_t> tram::Navmesh::nodes
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/navmesh.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/navmesh.cpp
================================================ FILE: docs/cppapi/classtram_1_1_octree-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Octree< T > Member List

This is the complete list of members for tram::Octree< T >, including all inherited members.

AddLeaf(T type, float x, float y, float z)tram::Octree< T >inline
Draw()tram::Octree< T >inline
Draw(Node *node)tram::Octree< T >inlineprotected
Find(T *array, vec3 point)tram::Octree< T >inline
FindNearest(T result[], float x, float y, float z)tram::Octree< T >inline
FindNearest(NearestSearch *search, Node *parent_node)tram::Octree< T >inlineprotected
FindNearest(NearestSearch *search, Node *parent_node, int octant)tram::Octree< T >inlineprotected
GetOctant(vec3 mid, vec3 point)tram::Octree< T >inlineprotected
Insert(vec3 point, T data)tram::Octree< T >inline
Insert(Node *parent, Node *leaf)tram::Octree< T >inlineprotected
NewNode(Octant octant, Node *parent)tram::Octree< T >inlineprotected
nodestram::Octree< T >protected
Octant enum nametram::Octree< T >protected
OCTANT_BOTTOM_LEFT_BACK enum valuetram::Octree< T >protected
OCTANT_BOTTOM_LEFT_FRONT enum valuetram::Octree< T >protected
OCTANT_BOTTOM_RIGHT_BACK enum valuetram::Octree< T >protected
OCTANT_BOTTOM_RIGHT_FRONT enum valuetram::Octree< T >protected
OCTANT_TOP_LEFT_BACK enum valuetram::Octree< T >protected
OCTANT_TOP_LEFT_FRONT enum valuetram::Octree< T >protected
OCTANT_TOP_RIGHT_BACK enum valuetram::Octree< T >protected
OCTANT_TOP_RIGHT_FRONT enum valuetram::Octree< T >protected
Octree(const char *name, size_t size)tram::Octree< T >inline
Remove(uint32_t node)tram::Octree< T >inline
Remove(Node *node)tram::Octree< T >inlineprotected
RemoveLeaf(uint32_t leaf_id)tram::Octree< T >inline
roottram::Octree< T >protected
================================================ FILE: docs/cppapi/classtram_1_1_octree.html ================================================ Tramway SDK: tram::Octree< T > Class Template Reference
Tramway SDK v0.1.1

#include <octree.h>

Classes

struct  NearestSearch
 
struct  Node
 

Public Member Functions

 Octree (const char *name, size_t size)
 
uint32_t Insert (vec3 point, T data)
 
void Remove (uint32_t node)
 
size_t Find (T *array, vec3 point)
 
void Draw ()
 
uint32_t AddLeaf (T type, float x, float y, float z)
 
void RemoveLeaf (uint32_t leaf_id)
 
size_t FindNearest (T result[], float x, float y, float z)
 

Protected Types

enum  Octant {
  OCTANT_TOP_LEFT_BACK , OCTANT_TOP_LEFT_FRONT , OCTANT_TOP_RIGHT_BACK , OCTANT_TOP_RIGHT_FRONT ,
  OCTANT_BOTTOM_LEFT_BACK , OCTANT_BOTTOM_LEFT_FRONT , OCTANT_BOTTOM_RIGHT_BACK , OCTANT_BOTTOM_RIGHT_FRONT
}
 

Protected Member Functions

void Insert (Node *parent, Node *leaf)
 
void Remove (Node *node)
 
void FindNearest (NearestSearch *search, Node *parent_node)
 
void FindNearest (NearestSearch *search, Node *parent_node, int octant)
 
NodeNewNode (Octant octant, Node *parent)
 
Octant GetOctant (vec3 mid, vec3 point)
 
void Draw (Node *node)
 

Protected Attributes

Pool< Nodenodes
 
Noderoot = nullptr
 

Member Enumeration Documentation

◆ Octant

template<typename T >
enum tram::Octree::Octant
protected
Enumerator
OCTANT_TOP_LEFT_BACK 
OCTANT_TOP_LEFT_FRONT 
OCTANT_TOP_RIGHT_BACK 
OCTANT_TOP_RIGHT_FRONT 
OCTANT_BOTTOM_LEFT_BACK 
OCTANT_BOTTOM_LEFT_FRONT 
OCTANT_BOTTOM_RIGHT_BACK 
OCTANT_BOTTOM_RIGHT_FRONT 

Constructor & Destructor Documentation

◆ Octree()

template<typename T >
tram::Octree< T >::Octree ( const char *  name,
size_t  size 
)
inline

Member Function Documentation

◆ AddLeaf()

template<typename T >
uint32_t tram::Octree< T >::AddLeaf ( type,
float  x,
float  y,
float  z 
)
inline

◆ Draw() [1/2]

template<typename T >
void tram::Octree< T >::Draw ( )
inline

◆ Draw() [2/2]

template<typename T >
void tram::Octree< T >::Draw ( Node node)
inlineprotected

◆ Find()

template<typename T >
size_t tram::Octree< T >::Find ( T *  array,
vec3  point 
)
inline

◆ FindNearest() [1/3]

template<typename T >
void tram::Octree< T >::FindNearest ( NearestSearch search,
Node parent_node 
)
inlineprotected

◆ FindNearest() [2/3]

template<typename T >
void tram::Octree< T >::FindNearest ( NearestSearch search,
Node parent_node,
int  octant 
)
inlineprotected

◆ FindNearest() [3/3]

template<typename T >
size_t tram::Octree< T >::FindNearest ( result[],
float  x,
float  y,
float  z 
)
inline

◆ GetOctant()

template<typename T >
Octant tram::Octree< T >::GetOctant ( vec3  mid,
vec3  point 
)
inlineprotected

◆ Insert() [1/2]

template<typename T >
void tram::Octree< T >::Insert ( Node parent,
Node leaf 
)
inlineprotected

◆ Insert() [2/2]

template<typename T >
uint32_t tram::Octree< T >::Insert ( vec3  point,
data 
)
inline

◆ NewNode()

template<typename T >
Node * tram::Octree< T >::NewNode ( Octant  octant,
Node parent 
)
inlineprotected

◆ Remove() [1/2]

template<typename T >
void tram::Octree< T >::Remove ( Node node)
inlineprotected

◆ Remove() [2/2]

template<typename T >
void tram::Octree< T >::Remove ( uint32_t  node)
inline

◆ RemoveLeaf()

template<typename T >
void tram::Octree< T >::RemoveLeaf ( uint32_t  leaf_id)
inline

Member Data Documentation

◆ nodes

template<typename T >
Pool<Node> tram::Octree< T >::nodes
protected

◆ root

template<typename T >
Node* tram::Octree< T >::root = nullptr
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/octree.h
================================================ FILE: docs/cppapi/classtram_1_1_particle_component-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::ParticleComponent Member List

This is the complete list of members for tram::ParticleComponent, including all inherited members.

draw_list_entrytram::ParticleComponentprotected
emission_ratetram::ParticleComponent
EmitParticle(const Particle &particle)tram::ParticleComponent
EntityComponent()=defaulttram::EntityComponent
EventHandler(Event &event)tram::ParticleComponentinlinevirtual
GetParent()tram::EntityComponentinline
GetSprite()tram::ParticleComponentinline
gravitytram::ParticleComponent
Init()tram::EntityComponentvirtual
initial_velocitytram::ParticleComponent
initial_velocity_randomnesstram::ParticleComponent
is_inittram::EntityComponentprotected
is_readytram::EntityComponentprotected
IsInit()tram::EntityComponentinline
IsReady()tram::EntityComponentinline
locationtram::ParticleComponentprotected
parenttram::EntityComponentprotected
particle_max_agetram::ParticleComponent
ParticleComponent()tram::ParticleComponentinline
particlestram::ParticleComponentprotected
ResourceReady()tram::EntityComponentprotected
resources_waitingtram::EntityComponentprotected
SetParent(Entity *parent)tram::EntityComponentinline
SetSprite(Render::Sprite *sprite)tram::ParticleComponentinline
spritetram::ParticleComponentprotected
Start()tram::ParticleComponentvirtual
Update()tram::ParticleComponent
UpdateLocation(vec3 nlocation)tram::ParticleComponentinline
UpdateRenderListObject()tram::ParticleComponent
vertex_arraytram::ParticleComponentprotected
~EntityComponent()=defaulttram::EntityComponentvirtual
~ParticleComponent()tram::ParticleComponent
================================================ FILE: docs/cppapi/classtram_1_1_particle_component.html ================================================ Tramway SDK: tram::ParticleComponent Class Reference
Tramway SDK v0.1.1

Provides amusing graphical effects. More...

#include <components/particle.h>

Inheritance diagram for tram::ParticleComponent:
tram::EntityComponent

Classes

struct  Particle
 

Public Member Functions

 ParticleComponent ()
 
 ~ParticleComponent ()
 
name_t GetSprite ()
 
void SetSprite (Render::Sprite *sprite)
 
void Start ()
 
void Update ()
 
void UpdateRenderListObject ()
 
void UpdateLocation (vec3 nlocation)
 
void EventHandler (Event &event)
 
void EmitParticle (const Particle &particle)
 
- Public Member Functions inherited from tram::EntityComponent
 EntityComponent ()=default
 
virtual ~EntityComponent ()=default
 
virtual void Init ()
 Initializes an entity component. More...
 
bool IsReady ()
 Returns the component's readiness. More...
 
bool IsInit ()
 Returns the component's init status. More...
 
EntityGetParent ()
 
void SetParent (Entity *parent)
 

Public Attributes

uint32_t emission_rate = 1
 
uint32_t particle_max_age = 120
 
vec3 gravity = vec3(0.0f, -0.005f, 0.0f)
 
vec3 initial_velocity = vec3(0.0f, 0.15f, 0.0f)
 
float initial_velocity_randomness = 0.1f
 

Protected Attributes

std::vector< Particleparticles
 
ResourceProxy< Render::Spritesprite
 
vec3 location
 
Render::drawlistentry_t draw_list_entry = {}
 
Render::vertexarray_t vertex_array = {}
 
- Protected Attributes inherited from tram::EntityComponent
size_t resources_waiting = 0
 
bool is_ready = false
 
bool is_init = false
 
Entityparent = nullptr
 

Additional Inherited Members

- Protected Member Functions inherited from tram::EntityComponent
void ResourceReady ()
 Notifies the component of a streamed-in resource. More...
 

Detailed Description

Constructor & Destructor Documentation

◆ ParticleComponent()

tram::ParticleComponent::ParticleComponent ( )
inline

◆ ~ParticleComponent()

tram::ParticleComponent::~ParticleComponent ( )

Member Function Documentation

◆ EmitParticle()

void tram::ParticleComponent::EmitParticle ( const Particle particle)

◆ EventHandler()

void tram::ParticleComponent::EventHandler ( Event event)
inlinevirtual

Implements tram::EntityComponent.

◆ GetSprite()

name_t tram::ParticleComponent::GetSprite ( )
inline

◆ SetSprite()

void tram::ParticleComponent::SetSprite ( Render::Sprite sprite)
inline

◆ Start()

void tram::ParticleComponent::Start ( )
virtual

Implements tram::EntityComponent.

◆ Update()

void tram::ParticleComponent::Update ( )

◆ UpdateLocation()

void tram::ParticleComponent::UpdateLocation ( vec3  nlocation)
inline

◆ UpdateRenderListObject()

void tram::ParticleComponent::UpdateRenderListObject ( )

Member Data Documentation

◆ draw_list_entry

Render::drawlistentry_t tram::ParticleComponent::draw_list_entry = {}
protected

◆ emission_rate

uint32_t tram::ParticleComponent::emission_rate = 1

◆ gravity

vec3 tram::ParticleComponent::gravity = vec3(0.0f, -0.005f, 0.0f)

◆ initial_velocity

vec3 tram::ParticleComponent::initial_velocity = vec3(0.0f, 0.15f, 0.0f)

◆ initial_velocity_randomness

float tram::ParticleComponent::initial_velocity_randomness = 0.1f

◆ location

vec3 tram::ParticleComponent::location
protected

◆ particle_max_age

uint32_t tram::ParticleComponent::particle_max_age = 120

◆ particles

std::vector<Particle> tram::ParticleComponent::particles
protected

◆ sprite

ResourceProxy<Render::Sprite> tram::ParticleComponent::sprite
protected

◆ vertex_array

Render::vertexarray_t tram::ParticleComponent::vertex_array = {}
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/particle.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/particle.cpp
================================================ FILE: docs/cppapi/classtram_1_1_path-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Path Member List

This is the complete list of members for tram::Path, including all inherited members.

Draw()tram::Path
edge_infostram::Pathprotected
edgestram::Graphprotected
Find(name_t name)tram::Pathstatic
LoadFromDisk()tram::Path
nametram::Pathprotected
nodestram::Graphprotected
Path(name_t name)tram::Pathinline
PathFollowertram::Pathfriend
~Path()=deletetram::Pathprotected
================================================ FILE: docs/cppapi/classtram_1_1_path.html ================================================ Tramway SDK: tram::Path Class Reference
Tramway SDK v0.1.1

Base class for graphs. More...

#include <framework/path.h>

Inheritance diagram for tram::Path:
tram::Graph

Public Member Functions

 Path (name_t name)
 
void LoadFromDisk ()
 
void Draw ()
 Draws the path's line segments. More...
 

Static Public Member Functions

static PathFind (name_t name)
 Finds a path. More...
 

Protected Member Functions

 ~Path ()=delete
 

Protected Attributes

name_t name
 
std::vector< PathEdgeInfoedge_infos
 
- Protected Attributes inherited from tram::Graph
std::vector< Nodenodes
 
std::vector< Edgeedges
 

Friends

class PathFollower
 

Detailed Description

Base class for graphs.

Sequence of line segments.

This class is used as a base for Navmesh and Path.

See also
https://racenis.github.io/tram-sdk/documentation/framework/graph.html

Can be used to push an object along a path, can be used as a rail, or as a path for guiding agents.

See also
https://racenis.github.io/tram-sdk/documentation/framework/path.html

Constructor & Destructor Documentation

◆ Path()

tram::Path::Path ( name_t  name)
inline

◆ ~Path()

tram::Path::~Path ( )
protecteddelete

Member Function Documentation

◆ Draw()

void tram::Path::Draw ( )

Draws the path's line segments.

◆ Find()

Path * tram::Path::Find ( name_t  name)
static

Finds a path.

Finds a path by its name, or creates a new path by that name if not found.

Returns
Always returns a pointer to a Path.

◆ LoadFromDisk()

void tram::Path::LoadFromDisk ( )

Friends And Related Function Documentation

◆ PathFollower

friend class PathFollower
friend

Member Data Documentation

◆ edge_infos

std::vector<PathEdgeInfo> tram::Path::edge_infos
protected

◆ name

name_t tram::Path::name
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/path.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/path.cpp
================================================ FILE: docs/cppapi/classtram_1_1_path_follower-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::PathFollower Member List
================================================ FILE: docs/cppapi/classtram_1_1_path_follower.html ================================================ Tramway SDK: tram::PathFollower Class Reference
Tramway SDK v0.1.1
tram::PathFollower Class Reference

Point constrained to a Path. More...

#include <framework/path.h>

Public Member Functions

 PathFollower (Path *path, vec3 initial_pos, PathType type)
 Creates a new PathFollower for a path. More...
 
void Advance (float)
 Advances the follower along the path. More...
 
void Project (vec3)
 
void TurnLeft ()
 
void TurnRight ()
 
void TurnStraight ()
 
vec3 GetPosition ()
 
vec3 GetTangent ()
 
void SetOrientation (vec3)
 

Public Attributes

float progress
 
uint32_t prev
 
uint32_t next
 
PathType type
 
PathType direction
 
Pathpath
 

Detailed Description

Point constrained to a Path.

When constructed, the PathFollower will project the initial position on the path, i.e. find the nearest point on the path. After that, you can use PathFollower::Advance() to push it back and forth on the path. The position of the PathFollower can be used to position an object, so that it appears to be following the given path.

Constructor & Destructor Documentation

◆ PathFollower()

tram::PathFollower::PathFollower ( Path path,
vec3  initial_pos,
PathType  type 
)

Creates a new PathFollower for a path.

Member Function Documentation

◆ Advance()

void tram::PathFollower::Advance ( float  distance)

Advances the follower along the path.

Parameters
distanceDistance along the path, in meters.

◆ GetPosition()

vec3 tram::PathFollower::GetPosition ( )

◆ GetTangent()

vec3 tram::PathFollower::GetTangent ( )

◆ Project()

void tram::PathFollower::Project ( vec3  projectable)

◆ SetOrientation()

void tram::PathFollower::SetOrientation ( vec3  orientation)

◆ TurnLeft()

void tram::PathFollower::TurnLeft ( )

◆ TurnRight()

void tram::PathFollower::TurnRight ( )

◆ TurnStraight()

void tram::PathFollower::TurnStraight ( )

Member Data Documentation

◆ direction

PathType tram::PathFollower::direction

◆ next

uint32_t tram::PathFollower::next

◆ path

Path* tram::PathFollower::path

◆ prev

uint32_t tram::PathFollower::prev

◆ progress

float tram::PathFollower::progress

◆ type

PathType tram::PathFollower::type

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/path.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/path.cpp
================================================ FILE: docs/cppapi/classtram_1_1_physics_1_1_a_p_i_1_1_callback_motion_state-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Physics::API::CallbackMotionState Member List

This is the complete list of members for tram::Physics::API::CallbackMotionState, including all inherited members.

CallbackMotionState(vec3 position, quat rotation, get_trf_callback get_callback, set_trf_callback set_callback, void *data)tram::Physics::API::CallbackMotionStateinline
data_pointertram::Physics::API::CallbackMotionStateprotected
get_transform_callbacktram::Physics::API::CallbackMotionStateprotected
getWorldTransform(btTransform &world_transform) consttram::Physics::API::CallbackMotionStateinlinevirtual
positiontram::Physics::API::CallbackMotionStateprotected
rotationtram::Physics::API::CallbackMotionStateprotected
set_transform_callbacktram::Physics::API::CallbackMotionStateprotected
SetTransformCallback(std::pair< vec3, quat >(*get_transform_callback)(void *), void(*set_transform_callback)(void *, std::pair< vec3, quat >), void *data)tram::Physics::API::CallbackMotionStateinline
setWorldTransform(const btTransform &world_transform)tram::Physics::API::CallbackMotionStateinlinevirtual
~CallbackMotionState()tram::Physics::API::CallbackMotionStateinlinevirtual
================================================ FILE: docs/cppapi/classtram_1_1_physics_1_1_a_p_i_1_1_callback_motion_state.html ================================================ Tramway SDK: tram::Physics::API::CallbackMotionState Class Reference
Tramway SDK v0.1.1
tram::Physics::API::CallbackMotionState Class Reference
Inheritance diagram for tram::Physics::API::CallbackMotionState:

Public Member Functions

 CallbackMotionState (vec3 position, quat rotation, get_trf_callback get_callback, set_trf_callback set_callback, void *data)
 
virtual ~CallbackMotionState ()
 
virtual void getWorldTransform (btTransform &world_transform) const
 
virtual void setWorldTransform (const btTransform &world_transform)
 
void SetTransformCallback (std::pair< vec3, quat >(*get_transform_callback)(void *), void(*set_transform_callback)(void *, std::pair< vec3, quat >), void *data)
 

Protected Attributes

std::pair< vec3, quat >(* get_transform_callback )(void *) = nullptr
 
void(* set_transform_callback )(void *, std::pair< vec3, quat >) = nullptr
 
vec3 position
 
quat rotation
 
void * data_pointer = nullptr
 

Constructor & Destructor Documentation

◆ CallbackMotionState()

tram::Physics::API::CallbackMotionState::CallbackMotionState ( vec3  position,
quat  rotation,
get_trf_callback  get_callback,
set_trf_callback  set_callback,
void *  data 
)
inline

◆ ~CallbackMotionState()

virtual tram::Physics::API::CallbackMotionState::~CallbackMotionState ( )
inlinevirtual

Member Function Documentation

◆ getWorldTransform()

virtual void tram::Physics::API::CallbackMotionState::getWorldTransform ( btTransform &  world_transform) const
inlinevirtual

◆ SetTransformCallback()

void tram::Physics::API::CallbackMotionState::SetTransformCallback ( std::pair< vec3, quat >(*)(void *)  get_transform_callback,
void(*)(void *, std::pair< vec3, quat >)  set_transform_callback,
void *  data 
)
inline

◆ setWorldTransform()

virtual void tram::Physics::API::CallbackMotionState::setWorldTransform ( const btTransform &  world_transform)
inlinevirtual

Member Data Documentation

◆ data_pointer

void* tram::Physics::API::CallbackMotionState::data_pointer = nullptr
protected

◆ get_transform_callback

std::pair< vec3, quat >(* tram::Physics::API::CallbackMotionState::get_transform_callback) (void *) = nullptr
protected

◆ position

vec3 tram::Physics::API::CallbackMotionState::position
protected

◆ rotation

quat tram::Physics::API::CallbackMotionState::rotation
protected

◆ set_transform_callback

void(* tram::Physics::API::CallbackMotionState::set_transform_callback) (void *, std::pair< vec3, quat >) = nullptr
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/bullet/bullet.cpp
================================================ FILE: docs/cppapi/classtram_1_1_physics_1_1_a_p_i_1_1_physics_debug_draw-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Physics::API::PhysicsDebugDraw Member List

This is the complete list of members for tram::Physics::API::PhysicsDebugDraw, including all inherited members.

draw3dText(const btVector3 &location, const char *textString)tram::Physics::API::PhysicsDebugDrawinline
drawContactPoint(const btVector3 &PointOnB, const btVector3 &normalOnB, btScalar distance, int lifeTime, const btVector3 &color)tram::Physics::API::PhysicsDebugDrawinline
drawLine(const btVector3 &from, const btVector3 &to, const btVector3 &color)tram::Physics::API::PhysicsDebugDrawinline
getDebugMode() consttram::Physics::API::PhysicsDebugDrawinline
reportErrorWarning(const char *warningString)tram::Physics::API::PhysicsDebugDrawinline
setDebugMode(int debugMode)tram::Physics::API::PhysicsDebugDrawinline
================================================ FILE: docs/cppapi/classtram_1_1_physics_1_1_a_p_i_1_1_physics_debug_draw.html ================================================ Tramway SDK: tram::Physics::API::PhysicsDebugDraw Class Reference
Tramway SDK v0.1.1
tram::Physics::API::PhysicsDebugDraw Class Reference

#include <debugdrawer.h>

Inheritance diagram for tram::Physics::API::PhysicsDebugDraw:

Public Member Functions

void drawContactPoint (const btVector3 &PointOnB, const btVector3 &normalOnB, btScalar distance, int lifeTime, const btVector3 &color)
 
void reportErrorWarning (const char *warningString)
 
void draw3dText (const btVector3 &location, const char *textString)
 
void setDebugMode (int debugMode)
 
int getDebugMode () const
 
void drawLine (const btVector3 &from, const btVector3 &to, const btVector3 &color)
 

Member Function Documentation

◆ draw3dText()

void tram::Physics::API::PhysicsDebugDraw::draw3dText ( const btVector3 &  location,
const char *  textString 
)
inline

◆ drawContactPoint()

void tram::Physics::API::PhysicsDebugDraw::drawContactPoint ( const btVector3 &  PointOnB,
const btVector3 &  normalOnB,
btScalar  distance,
int  lifeTime,
const btVector3 &  color 
)
inline

◆ drawLine()

void tram::Physics::API::PhysicsDebugDraw::drawLine ( const btVector3 &  from,
const btVector3 &  to,
const btVector3 &  color 
)
inline

◆ getDebugMode()

int tram::Physics::API::PhysicsDebugDraw::getDebugMode ( ) const
inline

◆ reportErrorWarning()

void tram::Physics::API::PhysicsDebugDraw::reportErrorWarning ( const char *  warningString)
inline

◆ setDebugMode()

void tram::Physics::API::PhysicsDebugDraw::setDebugMode ( int  debugMode)
inline

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/bullet/debugdrawer.h
================================================ FILE: docs/cppapi/classtram_1_1_physics_1_1_arm_motion_state-members.html ================================================ Tramway SDK: Member List
Tramway SDK
tram::Physics::ArmMotionState Member List

This is the complete list of members for tram::Physics::ArmMotionState, including all inherited members.

armtram::Physics::ArmMotionStateprotected
ArmMotionState(name_t boneName, AnimationComponent *armature, vec3 bindPos, Entity *entity, PhysicsComponent *physicsComp)tram::Physics::ArmMotionStateinline
bonetram::Physics::ArmMotionStateprotected
enttram::Physics::ArmMotionStateprotected
getWorldTransform(btTransform &worldTrans) consttram::Physics::ArmMotionStateinlinevirtual
offsettram::Physics::ArmMotionStateprotected
physcomptram::Physics::ArmMotionStateprotected
setWorldTransform(const btTransform &worldTrans)tram::Physics::ArmMotionStateinlinevirtual
~ArmMotionState()tram::Physics::ArmMotionStateinlinevirtual
================================================ FILE: docs/cppapi/classtram_1_1_physics_1_1_arm_motion_state.html ================================================ Tramway SDK: tram::Physics::ArmMotionState Class Reference
Tramway SDK
tram::Physics::ArmMotionState Class Reference

#include <motionstates.h>

Inheritance diagram for tram::Physics::ArmMotionState:

Public Member Functions

 ArmMotionState (name_t boneName, AnimationComponent *armature, vec3 bindPos, Entity *entity, PhysicsComponent *physicsComp)
 
virtual ~ArmMotionState ()
 
virtual void getWorldTransform (btTransform &worldTrans) const
 
virtual void setWorldTransform (const btTransform &worldTrans)
 

Protected Attributes

PhysicsComponentphyscomp
 
AnimationComponentarm
 
Entityent
 
vec3 offset
 
name_t bone
 

Constructor & Destructor Documentation

◆ ArmMotionState()

tram::Physics::ArmMotionState::ArmMotionState ( name_t  boneName,
AnimationComponent armature,
vec3  bindPos,
Entity entity,
PhysicsComponent physicsComp 
)
inline

◆ ~ArmMotionState()

virtual tram::Physics::ArmMotionState::~ArmMotionState ( )
inlinevirtual

Member Function Documentation

◆ getWorldTransform()

virtual void tram::Physics::ArmMotionState::getWorldTransform ( btTransform &  worldTrans) const
inlinevirtual

◆ setWorldTransform()

virtual void tram::Physics::ArmMotionState::setWorldTransform ( const btTransform &  worldTrans)
inlinevirtual

Member Data Documentation

◆ arm

AnimationComponent* tram::Physics::ArmMotionState::arm
protected

◆ bone

name_t tram::Physics::ArmMotionState::bone
protected

◆ ent

Entity* tram::Physics::ArmMotionState::ent
protected

◆ offset

vec3 tram::Physics::ArmMotionState::offset
protected

◆ physcomp

PhysicsComponent* tram::Physics::ArmMotionState::physcomp
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/bullet/motionstates.h
================================================ FILE: docs/cppapi/classtram_1_1_physics_1_1_collision_model-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Physics::CollisionModel Member List
================================================ FILE: docs/cppapi/classtram_1_1_physics_1_1_collision_model.html ================================================ Tramway SDK: tram::Physics::CollisionModel Class Reference
Tramway SDK v0.1.1

Physics CollisionShape model. More...

#include <physics/collisionmodel.h>

Inheritance diagram for tram::Physics::CollisionModel:
tram::Resource

Public Member Functions

 CollisionModel (name_t mName)
 
void LoadFromDisk ()
 Loads the collision model from disk. More...
 
void LoadFromMemory ()
 
void Unload ()
 
collisionshape_t GetShape ()
 
- Public Member Functions inherited from tram::Resource
 Resource (name_t name)
 
Resource::Status GetStatus () const
 
name_t GetName () const
 
size_t GetReferences () const
 
bool IsLoadFailed () const
 
void AddReference ()
 
void RemoveReference ()
 
void Load ()
 

Static Public Member Functions

static CollisionModelFind (name_t model_name)
 Finds a model. More...
 

Protected Attributes

collisionshape_t shape
 
- Protected Attributes inherited from tram::Resource
Status status = UNLOADED
 
name_t name
 
bool load_fail = false
 
size_t references = 0
 

Additional Inherited Members

- Public Types inherited from tram::Resource
enum  Status { UNLOADED , LOADED , READY }
 

Detailed Description

Constructor & Destructor Documentation

◆ CollisionModel()

tram::Physics::CollisionModel::CollisionModel ( name_t  mName)
inline

Member Function Documentation

◆ Find()

CollisionModel * tram::Physics::CollisionModel::Find ( name_t  model_name)
static

Finds a model.

Will either return a pointer to a model that already exists with that name, or will create a new one.

Returns
Always will return a pointer to a CollisionModel.

◆ GetShape()

collisionshape_t tram::Physics::CollisionModel::GetShape ( )
inline

◆ LoadFromDisk()

void tram::Physics::CollisionModel::LoadFromDisk ( )
virtual

Loads the collision model from disk.

If the collision model file can't be found, the model will be replaced with a 25cm wide cube.

Implements tram::Resource.

◆ LoadFromMemory()

void tram::Physics::CollisionModel::LoadFromMemory ( )
inlinevirtual

Implements tram::Resource.

◆ Unload()

void tram::Physics::CollisionModel::Unload ( )
inlinevirtual

Implements tram::Resource.

Member Data Documentation

◆ shape

collisionshape_t tram::Physics::CollisionModel::shape
protected

The documentation for this class was generated from the following files:
================================================ FILE: docs/cppapi/classtram_1_1_physics_1_1_ent_motion_state-members.html ================================================ Tramway SDK: Member List
Tramway SDK
tram::Physics::EntMotionState Member List

This is the complete list of members for tram::Physics::EntMotionState, including all inherited members.

entitytram::Physics::EntMotionStateprotected
EntMotionState(Entity *ent, vec3 &offset)tram::Physics::EntMotionStateinline
getWorldTransform(btTransform &worldTrans) consttram::Physics::EntMotionStateinlinevirtual
SetEntity(Entity *ent)tram::Physics::EntMotionStateinline
setWorldTransform(const btTransform &worldTrans)tram::Physics::EntMotionStateinlinevirtual
troffsetram::Physics::EntMotionStateprotected
~EntMotionState()tram::Physics::EntMotionStateinlinevirtual
================================================ FILE: docs/cppapi/classtram_1_1_physics_1_1_ent_motion_state.html ================================================ Tramway SDK: tram::Physics::EntMotionState Class Reference
Tramway SDK
tram::Physics::EntMotionState Class Reference

#include <motionstates.h>

Inheritance diagram for tram::Physics::EntMotionState:

Public Member Functions

 EntMotionState (Entity *ent, vec3 &offset)
 
virtual ~EntMotionState ()
 
void SetEntity (Entity *ent)
 
virtual void getWorldTransform (btTransform &worldTrans) const
 
virtual void setWorldTransform (const btTransform &worldTrans)
 

Protected Attributes

Entityentity = nullptr
 
vec3 troffse
 

Constructor & Destructor Documentation

◆ EntMotionState()

tram::Physics::EntMotionState::EntMotionState ( Entity ent,
vec3 offset 
)
inline

◆ ~EntMotionState()

virtual tram::Physics::EntMotionState::~EntMotionState ( )
inlinevirtual

Member Function Documentation

◆ getWorldTransform()

virtual void tram::Physics::EntMotionState::getWorldTransform ( btTransform &  worldTrans) const
inlinevirtual

◆ SetEntity()

void tram::Physics::EntMotionState::SetEntity ( Entity ent)
inline

◆ setWorldTransform()

virtual void tram::Physics::EntMotionState::setWorldTransform ( const btTransform &  worldTrans)
inlinevirtual

Member Data Documentation

◆ entity

Entity* tram::Physics::EntMotionState::entity = nullptr
protected

◆ troffse

vec3 tram::Physics::EntMotionState::troffse
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/bullet/motionstates.h
================================================ FILE: docs/cppapi/classtram_1_1_physics_1_1_path_action-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Physics::PathAction Member List

This is the complete list of members for tram::Physics::PathAction, including all inherited members.

debugDraw(btIDebugDraw *debugDrawer)tram::Physics::PathActioninlinevirtual
PathAction(PhysicsComponent *physComponent)tram::Physics::PathActioninline
updateAction(btCollisionWorld *collisionWorld, btScalar deltaTimeStep)tram::Physics::PathActionvirtual
================================================ FILE: docs/cppapi/classtram_1_1_physics_1_1_path_action.html ================================================ Tramway SDK: tram::Physics::PathAction Class Reference
Tramway SDK v0.1.1
tram::Physics::PathAction Class Reference

#include <actions.h>

Inheritance diagram for tram::Physics::PathAction:

Public Member Functions

 PathAction (PhysicsComponent *physComponent)
 
virtual void updateAction (btCollisionWorld *collisionWorld, btScalar deltaTimeStep)
 
virtual void debugDraw (btIDebugDraw *debugDrawer)
 

Detailed Description

Todo:
finish!!!

Constructor & Destructor Documentation

◆ PathAction()

tram::Physics::PathAction::PathAction ( PhysicsComponent physComponent)
inline

Member Function Documentation

◆ debugDraw()

virtual void tram::Physics::PathAction::debugDraw ( btIDebugDraw *  debugDrawer)
inlinevirtual

◆ updateAction()

virtual void tram::Physics::PathAction::updateAction ( btCollisionWorld *  collisionWorld,
btScalar  deltaTimeStep 
)
virtual

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/bullet/actions.h
================================================ FILE: docs/cppapi/classtram_1_1_physics_1_1_physics_debug_draw-members.html ================================================ Tramway SDK: Member List
Tramway SDK
tram::Physics::PhysicsDebugDraw Member List

This is the complete list of members for tram::Physics::PhysicsDebugDraw, including all inherited members.

draw3dText(const btVector3 &location, const char *textString)tram::Physics::PhysicsDebugDrawinline
drawContactPoint(const btVector3 &PointOnB, const btVector3 &normalOnB, btScalar distance, int lifeTime, const btVector3 &color)tram::Physics::PhysicsDebugDrawinline
drawLine(const btVector3 &from, const btVector3 &to, const btVector3 &color)tram::Physics::PhysicsDebugDrawinline
getDebugMode() consttram::Physics::PhysicsDebugDrawinline
reportErrorWarning(const char *warningString)tram::Physics::PhysicsDebugDrawinline
setDebugMode(int debugMode)tram::Physics::PhysicsDebugDrawinline
================================================ FILE: docs/cppapi/classtram_1_1_physics_1_1_physics_debug_draw.html ================================================ Tramway SDK: tram::Physics::PhysicsDebugDraw Class Reference
Tramway SDK
tram::Physics::PhysicsDebugDraw Class Reference

#include <debugdrawer.h>

Inheritance diagram for tram::Physics::PhysicsDebugDraw:

Public Member Functions

void drawContactPoint (const btVector3 &PointOnB, const btVector3 &normalOnB, btScalar distance, int lifeTime, const btVector3 &color)
 
void reportErrorWarning (const char *warningString)
 
void draw3dText (const btVector3 &location, const char *textString)
 
void setDebugMode (int debugMode)
 
int getDebugMode () const
 
void drawLine (const btVector3 &from, const btVector3 &to, const btVector3 &color)
 

Member Function Documentation

◆ draw3dText()

void tram::Physics::PhysicsDebugDraw::draw3dText ( const btVector3 &  location,
const char *  textString 
)
inline

◆ drawContactPoint()

void tram::Physics::PhysicsDebugDraw::drawContactPoint ( const btVector3 &  PointOnB,
const btVector3 &  normalOnB,
btScalar  distance,
int  lifeTime,
const btVector3 &  color 
)
inline

◆ drawLine()

void tram::Physics::PhysicsDebugDraw::drawLine ( const btVector3 &  from,
const btVector3 &  to,
const btVector3 &  color 
)
inline

◆ getDebugMode()

int tram::Physics::PhysicsDebugDraw::getDebugMode ( ) const
inline

◆ reportErrorWarning()

void tram::Physics::PhysicsDebugDraw::reportErrorWarning ( const char *  warningString)
inline

◆ setDebugMode()

void tram::Physics::PhysicsDebugDraw::setDebugMode ( int  debugMode)
inline

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/bullet/debugdrawer.h
================================================ FILE: docs/cppapi/classtram_1_1_physics_component-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::PhysicsComponent Member List

This is the complete list of members for tram::PhysicsComponent, including all inherited members.

Awaken()tram::PhysicsComponent
DisableDeactivation()tram::PhysicsComponent
EntityComponent()=defaulttram::EntityComponent
EventHandler(Event &event)tram::PhysicsComponentinlinevirtual
GetCollisionGroup()tram::PhysicsComponent
GetCollisionMask()tram::PhysicsComponent
GetModel()tram::PhysicsComponent
GetParent()tram::EntityComponentinline
GetVelocity()tram::PhysicsComponent
Init()tram::EntityComponentvirtual
is_inittram::EntityComponentprotected
is_readytram::EntityComponentprotected
IsInit()tram::EntityComponentinline
IsReady()tram::EntityComponentinline
parenttram::EntityComponentprotected
PhysicsComponent()tram::PhysicsComponentinline
Push(vec3 direction)tram::PhysicsComponent
Push(vec3 direction, vec3 local_position)tram::PhysicsComponent
ResourceReady()tram::EntityComponentprotected
resources_waitingtram::EntityComponentprotected
SetAngularFactor(vec3 factor)tram::PhysicsComponent
SetCollisionGroup(uint32_t flags)tram::PhysicsComponent
SetCollisionMask(uint32_t flags)tram::PhysicsComponent
SetDebugDrawing(bool drawing)tram::PhysicsComponent
SetKinematic(bool kinematic)tram::PhysicsComponent
SetLinearFactor(vec3 factor)tram::PhysicsComponent
SetLocation(vec3 location)tram::PhysicsComponent
SetMass(float mass)tram::PhysicsComponent
SetModel(name_t model)tram::PhysicsComponent
SetParent(Entity *parent)tram::EntityComponentinline
SetRotation(quat rotation)tram::PhysicsComponent
SetShape(Physics::CollisionShape shape)tram::PhysicsComponent
SetUpdateParentTransform(bool update)tram::PhysicsComponent
SetVelocity(const vec3 &velocity)tram::PhysicsComponent
Sleep()tram::PhysicsComponent
Spin(vec3 direction)tram::PhysicsComponent
Start()tram::PhysicsComponentvirtual
~EntityComponent()=defaulttram::EntityComponentvirtual
~PhysicsComponent()tram::PhysicsComponent
================================================ FILE: docs/cppapi/classtram_1_1_physics_component.html ================================================ Tramway SDK: tram::PhysicsComponent Class Reference
Tramway SDK v0.1.1
tram::PhysicsComponent Class Reference

Rigidbody wrapper. More...

#include <components/physics.h>

Inheritance diagram for tram::PhysicsComponent:
tram::EntityComponent

Public Member Functions

 PhysicsComponent ()
 
 ~PhysicsComponent ()
 
void EventHandler (Event &event)
 
void Start ()
 
name_t GetModel ()
 Returns the name of the collision model. More...
 
void SetModel (name_t model)
 Sets the collision model. More...
 
void SetMass (float mass)
 Sets the mass of the physics object. More...
 
void SetShape (Physics::CollisionShape shape)
 Sets the collision shape of the physics object. More...
 
void Push (vec3 direction)
 Pushes the physics object. More...
 
void Push (vec3 direction, vec3 local_position)
 
void Spin (vec3 direction)
 
void SetCollisionMask (uint32_t flags)
 Sets the collision mask of the physics object. More...
 
void SetCollisionGroup (uint32_t flags)
 Sets the collision group of the physics object. More...
 
uint32_t GetCollisionMask ()
 Returns the collision mask. More...
 
uint32_t GetCollisionGroup ()
 Returns the collision group. More...
 
void SetDebugDrawing (bool drawing)
 Sets the debug drawing of a physics object. More...
 
void SetKinematic (bool kinematic)
 Sets the physics object to kinematic. More...
 
void SetUpdateParentTransform (bool update)
 Sets whether the movement of the rigibody should update parent Entity's transform. More...
 
void SetRotation (quat rotation)
 Sets the rotation of the physics object. More...
 
void SetLocation (vec3 location)
 Sets the position of the physics object. More...
 
void DisableDeactivation ()
 Disables deactivation of the object. More...
 
void Awaken ()
 Awakens the object. More...
 
void Sleep ()
 Puts the object to sleep. More...
 
void SetAngularFactor (vec3 factor)
 Sets the angular factor of the physics object. More...
 
void SetLinearFactor (vec3 factor)
 Sets the angular factor of the physics object. More...
 
void SetVelocity (const vec3 &velocity)
 Sets the velocity of the physics object. More...
 
vec3 GetVelocity ()
 Returns the velocity of the physics object. More...
 
- Public Member Functions inherited from tram::EntityComponent
 EntityComponent ()=default
 
virtual ~EntityComponent ()=default
 
virtual void Init ()
 Initializes an entity component. More...
 
bool IsReady ()
 Returns the component's readiness. More...
 
bool IsInit ()
 Returns the component's init status. More...
 
EntityGetParent ()
 
void SetParent (Entity *parent)
 

Additional Inherited Members

- Protected Member Functions inherited from tram::EntityComponent
void ResourceReady ()
 Notifies the component of a streamed-in resource. More...
 
- Protected Attributes inherited from tram::EntityComponent
size_t resources_waiting = 0
 
bool is_ready = false
 
bool is_init = false
 
Entityparent = nullptr
 

Detailed Description

Constructor & Destructor Documentation

◆ PhysicsComponent()

tram::PhysicsComponent::PhysicsComponent ( )
inline

◆ ~PhysicsComponent()

tram::PhysicsComponent::~PhysicsComponent ( )

Member Function Documentation

◆ Awaken()

void tram::PhysicsComponent::Awaken ( )

Awakens the object.

◆ DisableDeactivation()

void tram::PhysicsComponent::DisableDeactivation ( )

Disables deactivation of the object.

This makes the object to never fall asleep.

◆ EventHandler()

void tram::PhysicsComponent::EventHandler ( Event event)
inlinevirtual

Implements tram::EntityComponent.

◆ GetCollisionGroup()

uint32_t tram::PhysicsComponent::GetCollisionGroup ( )

Returns the collision group.

See SetCollisionGroup() for more information.

◆ GetCollisionMask()

uint32_t tram::PhysicsComponent::GetCollisionMask ( )

Returns the collision mask.

See SetCollisionMask() for more information.

◆ GetModel()

name_t tram::PhysicsComponent::GetModel ( )

Returns the name of the collision model.

◆ GetVelocity()

vec3 tram::PhysicsComponent::GetVelocity ( )

Returns the velocity of the physics object.

Always returns zero velocity if component is not loaded.

◆ Push() [1/2]

void tram::PhysicsComponent::Push ( vec3  direction)

Pushes the physics object.

I have no idea what the units are. Direction of direction is the direction into which the object will be pushed and the length of the vector is the force of the push.

◆ Push() [2/2]

void tram::PhysicsComponent::Push ( vec3  direction,
vec3  local_position 
)

◆ SetAngularFactor()

void tram::PhysicsComponent::SetAngularFactor ( vec3  factor)

Sets the angular factor of the physics object.

Changes how much the object will rotate around the x, y, z axes. Can be used to restrict rotation around certain axes.

◆ SetCollisionGroup()

void tram::PhysicsComponent::SetCollisionGroup ( uint32_t  flags)

Sets the collision group of the physics object.

Collision group is a bitmask. A physics object will only collide with an another object if their collision group and collision mask bitmasks have at least one bit in common, i.e. they will be bitwise and'ed together.

◆ SetCollisionMask()

void tram::PhysicsComponent::SetCollisionMask ( uint32_t  flags)

Sets the collision mask of the physics object.

Collision mask is a bitmask. A physics object will only collide with an another object if their collision group and collision mask bitmasks have at least one bit in common, i.e. they will be bitwise and'ed together.

◆ SetDebugDrawing()

void tram::PhysicsComponent::SetDebugDrawing ( bool  drawing)

Sets the debug drawing of a physics object.

Set to false, if you don't want the physics object to show up when drawing physics debug.

◆ SetKinematic()

void tram::PhysicsComponent::SetKinematic ( bool  kinematic)

Sets the physics object to kinematic.

If set to kinematic, then the physics object will poll its parent entity for its position, instead of simulated and pushing its position into its parent entity.

Note
Use DisableDeactivation() if you don't want to constantly wake the object up.

◆ SetLinearFactor()

void tram::PhysicsComponent::SetLinearFactor ( vec3  factor)

Sets the angular factor of the physics object.

Changes how much the object will move along the x, y, z axes. Can be used to restrict movement along certain axes.

◆ SetLocation()

void tram::PhysicsComponent::SetLocation ( vec3  location)

Sets the position of the physics object.

◆ SetMass()

void tram::PhysicsComponent::SetMass ( float  mass)

Sets the mass of the physics object.

Mass specified in kilograms. If the mass is set to 0, then it's assumed to be infinite, and the object will become static and immovable.

Note
Has no effect after the PhysicsComponent is loaded.

◆ SetModel()

void tram::PhysicsComponent::SetModel ( name_t  model)

Sets the collision model.

◆ SetRotation()

void tram::PhysicsComponent::SetRotation ( quat  rotation)

Sets the rotation of the physics object.

◆ SetShape()

void tram::PhysicsComponent::SetShape ( Physics::CollisionShape  shape)

Sets the collision shape of the physics object.

◆ SetUpdateParentTransform()

void tram::PhysicsComponent::SetUpdateParentTransform ( bool  update)

Sets whether the movement of the rigibody should update parent Entity's transform.

If set to true, then whenever the rigidbody moves, the transform of the parent will be set to the transform of the rigidbody. Otherwise, the parent's transform will remain unaffected.

Note
This only works if set before the component is initialized.

◆ SetVelocity()

void tram::PhysicsComponent::SetVelocity ( const vec3 velocity)

Sets the velocity of the physics object.

Only works if is component is loaded.

◆ Sleep()

void tram::PhysicsComponent::Sleep ( )

Puts the object to sleep.

◆ Spin()

void tram::PhysicsComponent::Spin ( vec3  direction)

◆ Start()

void tram::PhysicsComponent::Start ( )
virtual

Implements tram::EntityComponent.


The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/physics.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/physics.cpp
================================================ FILE: docs/cppapi/classtram_1_1_platform_1_1_file_reader.html ================================================ Tramway SDK: FileReader Class Reference
Tramway SDK v0.1.1
FileReader Class Reference

File reading backend API. More...

#include <platform/file.h>

Detailed Description

File reading backend API.

File readers will load a whole file in memory when constructed. This memory is freed when they are destructed, which can be done by calling the Yeet() method.

File contents can be accessed via GetContents() and GetSize() methods.

To open a file, call the GetReader() method, it will find search until it finds the file and then return an opened filereader for it.


The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/platform/file.cpp
================================================ FILE: docs/cppapi/classtram_1_1_platform_1_1_file_writer.html ================================================ Tramway SDK: FileWriter Class Reference
Tramway SDK v0.1.1
FileWriter Class Reference

File writing backend API. More...

#include <platform/file.h>

Detailed Description

File writing backend API.

Works basically the same as FileReader, except this API is used for writing to files, which can be performed with the SetContents() method.


The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/platform/file.cpp
================================================ FILE: docs/cppapi/classtram_1_1_player-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Player Member List

This is the complete list of members for tram::Player, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
controllercomponenttram::Player
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()tram::Playervirtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Playervirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Playervirtual
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physics_bodytram::Playerprotected
Player()tram::Player
Player(name_t)tram::Player
plomptram::Playerprotected
Register()tram::Entityprotected
RegisterType(name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)tram::Entitystatic
rotationtram::Entityprotected
Serialize()tram::Playervirtual
SerializeString(std::string &str)tram::Player
SetAutoLoad(bool is)tram::Entityinline
SetFlag(uint32_t flag, bool value)tram::Entityinlineprotected
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Playervirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
Unload()tram::Playervirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateParameters()tram::Playervirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
~Player()tram::Playerinline
================================================ FILE: docs/cppapi/classtram_1_1_player.html ================================================ Tramway SDK: tram::Player Class Reference
Tramway SDK v0.1.1

ControllerComponent with a PlayerComponent attached to it. More...

#include <entities/player.h>

Inheritance diagram for tram::Player:
tram::Entity

Public Member Functions

 Player ()
 Creates a new player. More...
 
 Player (name_t)
 Creates a player with a custom name. More...
 
 ~Player ()
 
void Load ()
 Loads an entity. More...
 
void Unload ()
 Unloads an entity. More...
 
void Serialize ()
 
void SerializeString (std::string &str)
 
void UpdateParameters ()
 Called when Entity::UpdateTransform is called. More...
 
void SetParameters ()
 Called when either Entity::SetLocation or Entity::SetRotation is called. More...
 
void MessageHandler (Message &msg)
 Allows entities to receive messages. More...
 
name_t GetType ()
 Returns the type of the entity. More...
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 Destructs the entity. More...
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 Returns the entity's parent cell. More...
 
bool IsLoaded () const
 Returns the entity load status. More...
 
bool IsAutoLoad () const
 Returns the auto load flag status. More...
 
bool IsPersistent () const
 Returns the persistence status of an entity. More...
 
bool IsChanged () const
 
bool IsDeleted () const
 Returns the entity deletion status. More...
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 Purges the entity. More...
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 Allows entities to receive events. More...
 
void CheckTransition ()
 Check whether an entity has entered a different cell. More...
 
SignalTableGetSignalTable ()
 

Public Attributes

Component< FPSControllerComponentcontrollercomponent
 

Protected Attributes

Component< PlayerComponentplomp
 
Component< PhysicsComponentphysics_body
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 Updates entities. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)
 Registers a new entity type. More...
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 Creates an entity. More...
 
static EntityFind (id_t entity_id)
 Finds the entity by its ID number. More...
 
static EntityFind (name_t entity_name)
 Finds the entity by its name. More...
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 Registers the entity. More...
 
void Unregister ()
 Unregisters the entity. More...
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 
void SetFlag (uint32_t flag, bool value)
 

Detailed Description

ControllerComponent with a PlayerComponent attached to it.

Can be used to control a player for a video game, or could be used to simply be able to walk around the virtual world that you have created.

See also
https://racenis.github.io/tram-sdk/documentation/entities/player.html

Constructor & Destructor Documentation

◆ Player() [1/2]

tram::Player::Player ( )

Creates a new player.

◆ Player() [2/2]

tram::Player::Player ( name_t  name)

Creates a player with a custom name.

Parameters
nameName of the player.

◆ ~Player()

tram::Player::~Player ( )
inline

Member Function Documentation

◆ GetType()

name_t tram::Player::GetType ( )
virtual

Returns the type of the entity.

Usually this method returns the same name that is used to Entity::RegisterType() its type.

Implements tram::Entity.

◆ Load()

void tram::Player::Load ( )
virtual

Loads an entity.

Usually the Load() method for an entity type will set up its components, event listeners, etc. After being loaded, the entity will be ready for simulation.

When implementing this method, make sure to flag the entity with the LOADED flag, so that world streaming system doesn't try to load your entity twice.

Implements tram::Entity.

◆ MessageHandler()

void tram::Player::MessageHandler ( Message msg)
virtual

Allows entities to receive messages.

Whenever an entity is sent a Message, once the Message::Dispatch() function has been called, the entity will gets the message passed to it through this method.

Implements tram::Entity.

◆ Serialize()

void tram::Player::Serialize ( )
virtual

Implements tram::Entity.

◆ SerializeString()

void tram::Player::SerializeString ( std::string &  str)

◆ SetParameters()

void tram::Player::SetParameters ( )
virtual

Called when either Entity::SetLocation or Entity::SetRotation is called.

Usually this method is used to relocate or rerotate an entity.

If the entity has a PhysicsComponent, its position or rotation is usually set from this method, otherwise in the next Physics update step, the entity's previous rotation and location will be restored.

Implements tram::Entity.

◆ Unload()

void tram::Player::Unload ( )
virtual

Unloads an entity.

Usually the Load() method for an entity type will destroy its its components, event listeners, etc. After being unloaded, the entity have been removed from the simulation.

When implementing this method, make sure to clear your entity's LOADED flag, so that world streaming system can load the entity again.

Implements tram::Entity.

◆ UpdateParameters()

void tram::Player::UpdateParameters ( )
virtual

Called when Entity::UpdateTransform is called.

From the runtime's side, only the Physics system will call the Entity::UpdateTransform() method, and through it, this method.

Usually this method is used to forward the entity's new position and rotation to its RenderComponent, if it has one.

If the entity has a PhysicsComponent, its position or rotation is never updated from this method.

Implements tram::Entity.

Member Data Documentation

◆ controllercomponent

Component<FPSControllerComponent> tram::Player::controllercomponent

◆ physics_body

Component<PhysicsComponent> tram::Player::physics_body
protected

◆ plomp

Component<PlayerComponent> tram::Player::plomp
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/player.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/player.cpp
================================================ FILE: docs/cppapi/classtram_1_1_player_component-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::PlayerComponent Member List
================================================ FILE: docs/cppapi/classtram_1_1_player_component.html ================================================ Tramway SDK: tram::PlayerComponent Class Reference
Tramway SDK v0.1.1
tram::PlayerComponent Class Reference

Translates keyboard/mouse inputs into inputs for ControllerComponent. More...

#include <components/player.h>

Inheritance diagram for tram::PlayerComponent:
tram::EntityComponent

Public Member Functions

void EventHandler (Event &event)
 
void Init ()
 Initializes an entity component. More...
 
 PlayerComponent ()
 
 ~PlayerComponent ()
 
void SetControllerComponent (ControllerComponent *comp)
 
void Start ()
 
void SetNoclip (bool value)
 
void SetKeyboardLook (bool value)
 
quat GetLookRotation ()
 
vec3 GetDirectionFacing ()
 
- Public Member Functions inherited from tram::EntityComponent
 EntityComponent ()=default
 
virtual ~EntityComponent ()=default
 
bool IsReady ()
 Returns the component's readiness. More...
 
bool IsInit ()
 Returns the component's init status. More...
 
EntityGetParent ()
 
void SetParent (Entity *parent)
 

Additional Inherited Members

- Protected Member Functions inherited from tram::EntityComponent
void ResourceReady ()
 Notifies the component of a streamed-in resource. More...
 
- Protected Attributes inherited from tram::EntityComponent
size_t resources_waiting = 0
 
bool is_ready = false
 
bool is_init = false
 
Entityparent = nullptr
 

Detailed Description

Translates keyboard/mouse inputs into inputs for ControllerComponent.

See also
https://racenis.github.io/tram-sdk/documentation/components/player.html

Constructor & Destructor Documentation

◆ PlayerComponent()

tram::PlayerComponent::PlayerComponent ( )

◆ ~PlayerComponent()

tram::PlayerComponent::~PlayerComponent ( )

Member Function Documentation

◆ EventHandler()

void tram::PlayerComponent::EventHandler ( Event event)
virtual

Implements tram::EntityComponent.

◆ GetDirectionFacing()

vec3 tram::PlayerComponent::GetDirectionFacing ( )
inline

◆ GetLookRotation()

quat tram::PlayerComponent::GetLookRotation ( )
inline

◆ Init()

void tram::PlayerComponent::Init ( )
virtual

Initializes an entity component.

If an entity component has all of its resources already loaded, this will immediately Start() the component.

Reimplemented from tram::EntityComponent.

◆ SetControllerComponent()

void tram::PlayerComponent::SetControllerComponent ( ControllerComponent comp)
inline

◆ SetKeyboardLook()

void tram::PlayerComponent::SetKeyboardLook ( bool  value)

◆ SetNoclip()

void tram::PlayerComponent::SetNoclip ( bool  value)

◆ Start()

void tram::PlayerComponent::Start ( )
inlinevirtual

Implements tram::EntityComponent.


The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/player.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/player.cpp
================================================ FILE: docs/cppapi/classtram_1_1_pool-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Pool< T > Member List

This is the complete list of members for tram::Pool< T >, including all inherited members.

AddNew(Args &&... args)tram::Pool< T >inline
begin()tram::Pool< T >inline
end()tram::Pool< T >inline
firsttram::Pool< T >protected
GetFirst()tram::Pool< T >inline
GetLast()tram::Pool< T >inline
GetSize() consttram::Pool< T >inline
index(const T *ptr) consttram::Pool< T >inline
lasttram::Pool< T >protected
lastfreetram::Pool< T >protected
maxSizetram::Pool< T >protected
operator[](size_t index)tram::Pool< T >inline
Pool(const char *name, uint64_t initialSize)tram::Pool< T >inline
Pool(const char *name, uint64_t initialSize, std::initializer_list< T > list)tram::Pool< T >inline
poolNametram::Pool< T >protected
poolSizetram::Pool< T >protected
Remove(T *removeptr)tram::Pool< T >inline
size() consttram::Pool< T >inline
validate(const T *ptr) consttram::Pool< T >inline
================================================ FILE: docs/cppapi/classtram_1_1_pool.html ================================================ Tramway SDK: tram::Pool< T > Class Template Reference
Tramway SDK v0.1.1
tram::Pool< T > Class Template Reference

#include <pool.h>

Classes

struct  iterator
 

Public Member Functions

constexpr Pool (const char *name, uint64_t initialSize)
 
constexpr Pool (const char *name, uint64_t initialSize, std::initializer_list< T > list)
 
template<typename... Args>
T * AddNew (Args &&... args)
 
void Remove (T *removeptr)
 
T & operator[] (size_t index)
 
T * GetFirst ()
 
T * GetLast ()
 
iterator begin ()
 
iterator end ()
 
size_t GetSize () const
 
size_t size () const
 
size_t index (const T *ptr) const
 
bool validate (const T *ptr) const
 Checks if an object can be accessed through iteration. More...
 

Protected Attributes

std::string poolName
 
uint64_t poolSize
 
uint64_t maxSize
 
T * first
 
T * last
 
T * lastfree
 

Constructor & Destructor Documentation

◆ Pool() [1/2]

template<typename T >
constexpr tram::Pool< T >::Pool ( const char *  name,
uint64_t  initialSize 
)
inlineconstexpr

◆ Pool() [2/2]

template<typename T >
constexpr tram::Pool< T >::Pool ( const char *  name,
uint64_t  initialSize,
std::initializer_list< T >  list 
)
inlineconstexpr

Member Function Documentation

◆ AddNew()

template<typename T >
template<typename... Args>
T * tram::Pool< T >::AddNew ( Args &&...  args)
inline

◆ begin()

template<typename T >
iterator tram::Pool< T >::begin ( )
inline

◆ end()

template<typename T >
iterator tram::Pool< T >::end ( )
inline

◆ GetFirst()

template<typename T >
T * tram::Pool< T >::GetFirst ( )
inline

◆ GetLast()

template<typename T >
T * tram::Pool< T >::GetLast ( )
inline

◆ GetSize()

template<typename T >
size_t tram::Pool< T >::GetSize ( ) const
inline

◆ index()

template<typename T >
size_t tram::Pool< T >::index ( const T *  ptr) const
inline

◆ operator[]()

template<typename T >
T & tram::Pool< T >::operator[] ( size_t  index)
inline

◆ Remove()

template<typename T >
void tram::Pool< T >::Remove ( T *  removeptr)
inline

◆ size()

template<typename T >
size_t tram::Pool< T >::size ( ) const
inline

◆ validate()

template<typename T >
bool tram::Pool< T >::validate ( const T *  ptr) const
inline

Checks if an object can be accessed through iteration.

Member Data Documentation

◆ first

template<typename T >
T* tram::Pool< T >::first
protected

◆ last

template<typename T >
T* tram::Pool< T >::last
protected

◆ lastfree

template<typename T >
T* tram::Pool< T >::lastfree
protected

◆ maxSize

template<typename T >
uint64_t tram::Pool< T >::maxSize
protected

◆ poolName

template<typename T >
std::string tram::Pool< T >::poolName
protected

◆ poolSize

template<typename T >
uint64_t tram::Pool< T >::poolSize
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/pool.h
================================================ FILE: docs/cppapi/classtram_1_1_pool_proxy-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::PoolProxy< T > Member List

This is the complete list of members for tram::PoolProxy< T >, including all inherited members.

Delete(T *obj)tram::PoolProxy< T >inlinestatic
GetPool()tram::PoolProxy< T >inlinestatic
New(Args &&... args)tram::PoolProxy< T >inlinestatic
pooltram::PoolProxy< T >protectedstatic
pool("Sound Resource pool", RESOURCE_LIMIT_SOUND)tram::PoolProxy< T >protected
pool("AnimationComponent pool", COMPONENT_LIMIT_ANIMATION)tram::PoolProxy< T >protected
pool("AudioComponent pool", COMPONENT_LIMIT_AUDIO)tram::PoolProxy< T >protected
pool("FPSControllerComponent pool", COMPONENT_LIMIT_CONTROLLER)tram::PoolProxy< T >protected
pool("RaycastControllerComponent pool", COMPONENT_LIMIT_CONTROLLER)tram::PoolProxy< T >protected
pool("DecalComponent pool", COMPONENT_LIMIT_DECAL)tram::PoolProxy< T >protected
pool("LightComponent pool", COMPONENT_LIMIT_LIGHT)tram::PoolProxy< T >protected
pool("ParticleComponent pool", COMPONENT_LIMIT_PARTICLE)tram::PoolProxy< T >protected
pool("PhysicsComponent pool", COMPONENT_LIMIT_PHYSICS)tram::PoolProxy< T >protected
pool("PlayerComponent pool", COMPONENT_LIMIT_PLAYER)tram::PoolProxy< T >protected
pool("RenderComponent pool", COMPONENT_LIMIT_RENDER)tram::PoolProxy< T >protected
pool("SpriteComponent pool", COMPONENT_LIMIT_SPRITE)tram::PoolProxy< T >protected
pool("TriggerComponent pool", COMPONENT_LIMIT_TRIGGER)tram::PoolProxy< T >protected
pool("ai_agent_list pool", 100)tram::PoolProxy< T >protected
pool("AnimationTable pool", EXT_KITCHENSINK_ANIMATIONTABLE_LIMIT)tram::PoolProxy< T >protected
pool("Ext::Kitchensink::AttributeContainer Pool", ATTRIBUTE_CONTAINER_COUNT)tram::PoolProxy< T >protected
pool("Ext::Kitchensink::Faction Pool", FACTION_COUNT)tram::PoolProxy< T >protected
pool("Ext::Kitchensink::Character Pool", CHARACTER_COUNT)tram::PoolProxy< T >protected
pool("Ext::Kitchensink::CharacterClass Pool", CLASS_COUNT)tram::PoolProxy< T >protected
pool("SoundTable pool", EXT_KITCHENSINK_SOUNDTABLE_LIMIT)tram::PoolProxy< T >protected
pool("navmesh pool", 100)tram::PoolProxy< T >protected
pool("Path pool", RESOURCE_LIMIT_PATH)tram::PoolProxy< T >protected
pool("worldcelltransition pool", WORLDCELL_TRANSITION_LIMIT)tram::PoolProxy< T >protected
pool("Worldcell pool", WORLDCELL_LIMIT)tram::PoolProxy< T >protected
pool("GLDrawListEntry pool", 1000)tram::PoolProxy< T >protected
pool("GLLight pool", COMPONENT_LIMIT_LIGHT, {tram::Render::API::GLLight{}})tram::PoolProxy< T >protected
pool("GLMaterial pool", RESOURCE_LIMIT_MATERIAL)tram::PoolProxy< T >protected
================================================ FILE: docs/cppapi/classtram_1_1_pool_proxy.html ================================================ Tramway SDK: tram::PoolProxy< T > Class Template Reference
Tramway SDK v0.1.1

#include <pool.h>

Static Public Member Functions

template<typename... Args>
static T * New (Args &&... args)
 
static void Delete (T *obj)
 
static Pool< T > & GetPool ()
 

Protected Member Functions

tram::Pool< tram::Audio::Soundpool ("Sound Resource pool", RESOURCE_LIMIT_SOUND)
 
Pool< AnimationComponentpool ("AnimationComponent pool", COMPONENT_LIMIT_ANIMATION)
 
Pool< AudioComponentpool ("AudioComponent pool", COMPONENT_LIMIT_AUDIO)
 
Pool< FPSControllerComponentpool ("FPSControllerComponent pool", COMPONENT_LIMIT_CONTROLLER)
 
Pool< RaycastControllerComponentpool ("RaycastControllerComponent pool", COMPONENT_LIMIT_CONTROLLER)
 
Pool< DecalComponentpool ("DecalComponent pool", COMPONENT_LIMIT_DECAL)
 
Pool< LightComponentpool ("LightComponent pool", COMPONENT_LIMIT_LIGHT)
 
Pool< ParticleComponentpool ("ParticleComponent pool", COMPONENT_LIMIT_PARTICLE)
 
Pool< PhysicsComponentpool ("PhysicsComponent pool", COMPONENT_LIMIT_PHYSICS)
 
Pool< PlayerComponentpool ("PlayerComponent pool", COMPONENT_LIMIT_PLAYER)
 
Pool< RenderComponentpool ("RenderComponent pool", COMPONENT_LIMIT_RENDER)
 
Pool< SpriteComponentpool ("SpriteComponent pool", COMPONENT_LIMIT_SPRITE)
 
Pool< TriggerComponentpool ("TriggerComponent pool", COMPONENT_LIMIT_TRIGGER)
 
tram::Pool< tram::Ext::Kitchensink::AIAgentpool ("ai_agent_list pool", 100)
 
tram::Pool< tram::Ext::Kitchensink::AnimationTablepool ("AnimationTable pool", EXT_KITCHENSINK_ANIMATIONTABLE_LIMIT)
 
Pool< Ext::Kitchensink::AttributeContainerpool ("Ext::Kitchensink::AttributeContainer Pool", ATTRIBUTE_CONTAINER_COUNT)
 
Pool< Ext::Kitchensink::Factionpool ("Ext::Kitchensink::Faction Pool", FACTION_COUNT)
 
Pool< Ext::Kitchensink::Characterpool ("Ext::Kitchensink::Character Pool", CHARACTER_COUNT)
 
Pool< Ext::Kitchensink::CharacterClasspool ("Ext::Kitchensink::CharacterClass Pool", CLASS_COUNT)
 
tram::Pool< tram::Ext::Kitchensink::SoundTablepool ("SoundTable pool", EXT_KITCHENSINK_SOUNDTABLE_LIMIT)
 
Pool< Navmeshpool ("navmesh pool", 100)
 
Pool< Pathpool ("Path pool", RESOURCE_LIMIT_PATH)
 
Pool< Transitionpool ("worldcelltransition pool", WORLDCELL_TRANSITION_LIMIT)
 
Pool< WorldCellpool ("Worldcell pool", WORLDCELL_LIMIT)
 
tram::Pool< tram::Render::API::GLDrawListEntrypool ("GLDrawListEntry pool", 1000)
 
tram::Pool< tram::Render::API::GLLightpool ("GLLight pool", COMPONENT_LIMIT_LIGHT, {tram::Render::API::GLLight{}})
 
tram::Pool< tram::Render::API::GLMaterialpool ("GLMaterial pool", RESOURCE_LIMIT_MATERIAL)
 

Static Protected Attributes

static Pool< T > pool
 

Member Function Documentation

◆ Delete()

template<typename T >
static void tram::PoolProxy< T >::Delete ( T *  obj)
inlinestatic

◆ GetPool()

template<typename T >
static Pool< T > & tram::PoolProxy< T >::GetPool ( )
inlinestatic

◆ New()

template<typename T >
template<typename... Args>
static T * tram::PoolProxy< T >::New ( Args &&...  args)
inlinestatic

◆ pool() [1/27]

tram::Pool< tram::Ext::Kitchensink::AIAgent > tram::PoolProxy< tram::Ext::Kitchensink::AIAgent >::pool ( "ai_agent_list pool"  ,
100   
)
protected

◆ pool() [2/27]

Pool< AnimationComponent > tram::PoolProxy< AnimationComponent >::pool ( "AnimationComponent pool"  ,
COMPONENT_LIMIT_ANIMATION   
)
protected

◆ pool() [3/27]

◆ pool() [4/27]

Pool< AudioComponent > tram::PoolProxy< AudioComponent >::pool ( "AudioComponent pool"  ,
COMPONENT_LIMIT_AUDIO   
)
protected

◆ pool() [5/27]

Pool< DecalComponent > tram::PoolProxy< DecalComponent >::pool ( "DecalComponent pool"  ,
COMPONENT_LIMIT_DECAL   
)
protected

◆ pool() [6/27]

Pool< Ext::Kitchensink::AttributeContainer > tram::PoolProxy< Ext::Kitchensink::AttributeContainer >::pool ( "Ext::Kitchensink::AttributeContainer Pool ,
ATTRIBUTE_CONTAINER_COUNT   
)
protected

◆ pool() [7/27]

Pool< Ext::Kitchensink::Character > tram::PoolProxy< Ext::Kitchensink::Character >::pool ( "Ext::Kitchensink::Character Pool ,
CHARACTER_COUNT   
)
protected

◆ pool() [8/27]

Pool< Ext::Kitchensink::CharacterClass > tram::PoolProxy< Ext::Kitchensink::CharacterClass >::pool ( "Ext::Kitchensink::CharacterClass Pool ,
CLASS_COUNT   
)
protected

◆ pool() [9/27]

Pool< Ext::Kitchensink::Faction > tram::PoolProxy< Ext::Kitchensink::Faction >::pool ( "Ext::Kitchensink::Faction Pool ,
FACTION_COUNT   
)
protected

◆ pool() [10/27]

Pool< FPSControllerComponent > tram::PoolProxy< FPSControllerComponent >::pool ( "FPSControllerComponent pool"  ,
COMPONENT_LIMIT_CONTROLLER   
)
protected

◆ pool() [11/27]

tram::Pool< tram::Render::API::GLDrawListEntry > tram::PoolProxy< tram::Render::API::GLDrawListEntry >::pool ( "GLDrawListEntry pool"  ,
1000   
)
protected

◆ pool() [12/27]

◆ pool() [13/27]

◆ pool() [14/27]

Pool< LightComponent > tram::PoolProxy< LightComponent >::pool ( "LightComponent pool"  ,
COMPONENT_LIMIT_LIGHT   
)
protected

◆ pool() [15/27]

Pool< Navmesh > tram::PoolProxy< Navmesh >::pool ( "navmesh pool"  ,
100   
)
protected

◆ pool() [16/27]

Pool< ParticleComponent > tram::PoolProxy< ParticleComponent >::pool ( "ParticleComponent pool"  ,
COMPONENT_LIMIT_PARTICLE   
)
protected

◆ pool() [17/27]

Pool< Path > tram::PoolProxy< Path >::pool ( "Path pool"  ,
RESOURCE_LIMIT_PATH   
)
protected

◆ pool() [18/27]

Pool< PhysicsComponent > tram::PoolProxy< PhysicsComponent >::pool ( "PhysicsComponent pool"  ,
COMPONENT_LIMIT_PHYSICS   
)
protected

◆ pool() [19/27]

Pool< PlayerComponent > tram::PoolProxy< PlayerComponent >::pool ( "PlayerComponent pool"  ,
COMPONENT_LIMIT_PLAYER   
)
protected

◆ pool() [20/27]

Pool< RaycastControllerComponent > tram::PoolProxy< RaycastControllerComponent >::pool ( "RaycastControllerComponent pool"  ,
COMPONENT_LIMIT_CONTROLLER   
)
protected

◆ pool() [21/27]

Pool< RenderComponent > tram::PoolProxy< RenderComponent >::pool ( "RenderComponent pool"  ,
COMPONENT_LIMIT_RENDER   
)
protected

◆ pool() [22/27]

◆ pool() [23/27]

◆ pool() [24/27]

Pool< SpriteComponent > tram::PoolProxy< SpriteComponent >::pool ( "SpriteComponent pool"  ,
COMPONENT_LIMIT_SPRITE   
)
protected

◆ pool() [25/27]

Pool< TriggerComponent > tram::PoolProxy< TriggerComponent >::pool ( "TriggerComponent pool"  ,
COMPONENT_LIMIT_TRIGGER   
)
protected

◆ pool() [26/27]

Pool< WorldCell > tram::PoolProxy< WorldCell >::pool ( "Worldcell pool"  ,
WORLDCELL_LIMIT   
)
protected

◆ pool() [27/27]

Pool< Transition > tram::PoolProxy< Transition >::pool ( "worldcelltransition pool"  ,
WORLDCELL_TRANSITION_LIMIT   
)
protected

Member Data Documentation

◆ pool

template<typename T >
Pool<T> tram::PoolProxy< T >::pool
staticprotected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/pool.h
================================================ FILE: docs/cppapi/classtram_1_1_pool_ptr-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::PoolPtr< T > Member List

This is the complete list of members for tram::PoolPtr< T >, including all inherited members.

GetResource()tram::PoolPtr< T >inline
operator bool()tram::PoolPtr< T >inlineexplicit
operator*()tram::PoolPtr< T >inline
operator->()tram::PoolPtr< T >inline
PoolPtr()tram::PoolPtr< T >inline
ptrtram::PoolPtr< T >protected
~PoolPtr()tram::PoolPtr< T >inline
================================================ FILE: docs/cppapi/classtram_1_1_pool_ptr.html ================================================ Tramway SDK: tram::PoolPtr< T > Class Template Reference
Tramway SDK v0.1.1
tram::PoolPtr< T > Class Template Reference

#include <pool.h>

Public Member Functions

 PoolPtr ()
 
 ~PoolPtr ()
 
T * GetResource ()
 
T * operator-> ()
 
T & operator* ()
 
 operator bool ()
 

Protected Attributes

T * ptr
 

Constructor & Destructor Documentation

◆ PoolPtr()

template<typename T >
tram::PoolPtr< T >::PoolPtr ( )
inline

◆ ~PoolPtr()

template<typename T >
tram::PoolPtr< T >::~PoolPtr ( )
inline

Member Function Documentation

◆ GetResource()

template<typename T >
T * tram::PoolPtr< T >::GetResource ( )
inline

◆ operator bool()

template<typename T >
tram::PoolPtr< T >::operator bool ( )
inlineexplicit

◆ operator*()

template<typename T >
T & tram::PoolPtr< T >::operator* ( )
inline

◆ operator->()

template<typename T >
T * tram::PoolPtr< T >::operator-> ( )
inline

Member Data Documentation

◆ ptr

template<typename T >
T* tram::PoolPtr< T >::ptr
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/pool.h
================================================ FILE: docs/cppapi/classtram_1_1_queue-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Queue< T > Member List

This is the complete list of members for tram::Queue< T >, including all inherited members.

back()tram::Queue< T >inline
counttram::Queue< T >protected
csizetram::Queue< T >protected
firsttram::Queue< T >protected
front()tram::Queue< T >inline
lasttram::Queue< T >protected
lock()tram::Queue< T >inline
memory_endtram::Queue< T >protected
memory_starttram::Queue< T >protected
nametram::Queue< T >protected
pop()tram::Queue< T >inline
push(Args &&... args)tram::Queue< T >inline
Queue()=deletetram::Queue< T >
Queue(const Queue &)=deletetram::Queue< T >
Queue(Queue &&)=deletetram::Queue< T >
Queue(const char *name, size_t count)tram::Queue< T >inline
size()tram::Queue< T >inline
spinlocktram::Queue< T >protected
try_pop(T &value)tram::Queue< T >inline
unlock()tram::Queue< T >inline
================================================ FILE: docs/cppapi/classtram_1_1_queue.html ================================================ Tramway SDK: tram::Queue< T > Class Template Reference
Tramway SDK v0.1.1
tram::Queue< T > Class Template Reference

Simple queue implementation. More...

#include <queue.h>

Public Member Functions

 Queue ()=delete
 
 Queue (const Queue &)=delete
 
 Queue (Queue &&)=delete
 
 Queue (const char *name, size_t count)
 
template<typename... Args>
void push (Args &&... args)
 Thread safe. More...
 
void pop ()
 
T & front ()
 
T & back ()
 
bool try_pop (T &value)
 Thread safe. More...
 
size_t size ()
 
void lock ()
 
void unlock ()
 

Protected Attributes

const char * name
 
size_t csize
 
size_t count
 
T * first
 
T * last
 
T * memory_start
 
T * memory_end
 
std::atomic< bool > spinlock = {false}
 

Detailed Description

template<typename T>
class tram::Queue< T >

Simple queue implementation.

This queue uses a circular buffer internally. The push() and try_pop() methods have locks on them, so they can be used to create queues for passing messages between threads. I have no idea how multithreading works, use at your own risk.

Constructor & Destructor Documentation

◆ Queue() [1/4]

template<typename T >
tram::Queue< T >::Queue ( )
delete

◆ Queue() [2/4]

template<typename T >
tram::Queue< T >::Queue ( const Queue< T > &  )
delete

◆ Queue() [3/4]

template<typename T >
tram::Queue< T >::Queue ( Queue< T > &&  )
delete

◆ Queue() [4/4]

template<typename T >
tram::Queue< T >::Queue ( const char *  name,
size_t  count 
)
inline

Member Function Documentation

◆ back()

template<typename T >
T & tram::Queue< T >::back ( )
inline

◆ front()

template<typename T >
T & tram::Queue< T >::front ( )
inline

◆ lock()

template<typename T >
void tram::Queue< T >::lock ( )
inline

◆ pop()

template<typename T >
void tram::Queue< T >::pop ( )
inline

◆ push()

template<typename T >
template<typename... Args>
void tram::Queue< T >::push ( Args &&...  args)
inline

Thread safe.

◆ size()

template<typename T >
size_t tram::Queue< T >::size ( )
inline

◆ try_pop()

template<typename T >
bool tram::Queue< T >::try_pop ( T &  value)
inline

Thread safe.

Copies front of the queue into value.

Returns
True if there was an element into the front of the queue and it was copied into value. Otherwise false.

◆ unlock()

template<typename T >
void tram::Queue< T >::unlock ( )
inline

Member Data Documentation

◆ count

template<typename T >
size_t tram::Queue< T >::count
protected

◆ csize

template<typename T >
size_t tram::Queue< T >::csize
protected

◆ first

template<typename T >
T* tram::Queue< T >::first
protected

◆ last

template<typename T >
T* tram::Queue< T >::last
protected

◆ memory_end

template<typename T >
T* tram::Queue< T >::memory_end
protected

◆ memory_start

template<typename T >
T* tram::Queue< T >::memory_start
protected

◆ name

template<typename T >
const char* tram::Queue< T >::name
protected

◆ spinlock

template<typename T >
std::atomic<bool> tram::Queue< T >::spinlock = {false}
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/queue.h
================================================ FILE: docs/cppapi/classtram_1_1_raycast_controller_component-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::RaycastControllerComponent Member List

This is the complete list of members for tram::RaycastControllerComponent, including all inherited members.

air_velocitytram::RaycastControllerComponentprotected
ApplyDynamics()tram::RaycastControllerComponentprotected
collidetram::ControllerComponentprotected
collision_grouptram::RaycastControllerComponentprotected
collision_heighttram::RaycastControllerComponentprotected
collision_widthtram::RaycastControllerComponentprotected
ControllerComponenttram::RaycastControllerComponentfriend
Crouch() overridetram::RaycastControllerComponentvirtual
crouch_speedtram::RaycastControllerComponentprotected
crouchingtram::RaycastControllerComponentprotected
enabledtram::RaycastControllerComponentprotected
EntityComponent()=defaulttram::EntityComponent
EventHandler(Event &event) overridetram::RaycastControllerComponentinlinevirtual
Fly() overridetram::RaycastControllerComponentvirtual
fly_speedtram::RaycastControllerComponentprotected
flyingtram::RaycastControllerComponentprotected
GetLookDirection() consttram::ControllerComponentinline
GetParent()tram::EntityComponentinline
Init()tram::EntityComponentvirtual
is_in_airtram::RaycastControllerComponentprotected
is_inittram::EntityComponentprotected
is_readytram::EntityComponentprotected
IsDebugInfoDraw()tram::ControllerComponentstatic
IsInit()tram::EntityComponentinline
IsReady()tram::EntityComponentinline
Jump() overridetram::RaycastControllerComponentvirtual
jump_framestram::RaycastControllerComponentprotected
look_directiontram::ControllerComponentprotected
Move(vec3 local_direction) overridetram::RaycastControllerComponentvirtual
move_directiontram::RaycastControllerComponentprotected
move_magnitudetram::RaycastControllerComponentprotected
parenttram::EntityComponentprotected
Pooltram::RaycastControllerComponentfriend
Push(vec3 direction) overridetram::RaycastControllerComponentvirtual
RaycastControllerComponent()=defaulttram::RaycastControllerComponentprotected
RecoverFromCollisions()tram::RaycastControllerComponentprotected
ResetMove()tram::RaycastControllerComponentprotected
ResourceReady()tram::EntityComponentprotected
resources_waitingtram::EntityComponentprotected
Run() overridetram::RaycastControllerComponentvirtual
run_speedtram::RaycastControllerComponentprotected
runningtram::RaycastControllerComponentprotected
SetCollisionGroup(uint32_t group)tram::RaycastControllerComponentinline
SetCollisions(bool collide)tram::ControllerComponentinline
SetCollisionSize(float width, float height, float crouch_height)tram::RaycastControllerComponentinline
SetCrouchSpeed(float speed)tram::RaycastControllerComponentinline
SetDebugInfoDraw(bool)tram::ControllerComponentstatic
SetFlySpeed(float speed)tram::RaycastControllerComponentinline
SetFriction(float speed)tram::RaycastControllerComponentinline
SetLookDirection(quat direction)tram::ControllerComponentinline
SetParent(Entity *parent)tram::EntityComponentinline
SetRunSpeed(float speed)tram::RaycastControllerComponentinline
SetStepHeight(float height, float crouch_height)tram::RaycastControllerComponentinline
SetWalkSpeed(float speed)tram::RaycastControllerComponentinline
SetWallCollisionCallback(void(*callback)(ControllerComponent *, Physics::Collision))tram::RaycastControllerComponentinline
standing_ontram::RaycastControllerComponentprotected
standing_on_prevtram::RaycastControllerComponentprotected
standing_postram::RaycastControllerComponentprotected
Start() overridetram::RaycastControllerComponentvirtual
step_heighttram::RaycastControllerComponentprotected
TurnLeft() overridetram::RaycastControllerComponentvirtual
TurnRight() overridetram::RaycastControllerComponentvirtual
Update()tram::ControllerComponentstatic
walk_speedtram::RaycastControllerComponentprotected
wall_collisiontram::RaycastControllerComponentprotected
wallbonk_callbacktram::RaycastControllerComponentprotected
~EntityComponent()=defaulttram::EntityComponentvirtual
~RaycastControllerComponent()=defaulttram::RaycastControllerComponentprotected
================================================ FILE: docs/cppapi/classtram_1_1_raycast_controller_component.html ================================================ Tramway SDK: tram::RaycastControllerComponent Class Reference
Tramway SDK v0.1.1

Implementation of a simple character controller. More...

#include <components/controller.h>

Inheritance diagram for tram::RaycastControllerComponent:
tram::ControllerComponent tram::EntityComponent

Public Member Functions

void Start () override
 
void EventHandler (Event &event) override
 
void Move (vec3 local_direction) override
 
void Run () override
 
void Crouch () override
 
void Fly () override
 
void Jump () override
 
void TurnLeft () override
 
void TurnRight () override
 
void Push (vec3 direction) override
 
void SetCollisionSize (float width, float height, float crouch_height)
 
void SetStepHeight (float height, float crouch_height)
 
void SetWallCollisionCallback (void(*callback)(ControllerComponent *, Physics::Collision))
 
void SetWalkSpeed (float speed)
 
void SetRunSpeed (float speed)
 
void SetCrouchSpeed (float speed)
 
void SetFlySpeed (float speed)
 
void SetFriction (float speed)
 
void SetCollisionGroup (uint32_t group)
 
- Public Member Functions inherited from tram::ControllerComponent
void SetCollisions (bool collide)
 
void SetLookDirection (quat direction)
 
quat GetLookDirection () const
 
- Public Member Functions inherited from tram::EntityComponent
 EntityComponent ()=default
 
virtual ~EntityComponent ()=default
 
virtual void Init ()
 Initializes an entity component. More...
 
bool IsReady ()
 Returns the component's readiness. More...
 
bool IsInit ()
 Returns the component's init status. More...
 
EntityGetParent ()
 
void SetParent (Entity *parent)
 

Protected Member Functions

 RaycastControllerComponent ()=default
 
 ~RaycastControllerComponent ()=default
 
void ApplyDynamics ()
 
void RecoverFromCollisions ()
 
void ResetMove ()
 
- Protected Member Functions inherited from tram::EntityComponent
void ResourceReady ()
 Notifies the component of a streamed-in resource. More...
 

Protected Attributes

Component< TriggerComponentwall_collision
 
vec3 move_magnitude = {0.0f, 0.0f, 0.0f}
 
vec3 move_direction = {0.0f, 0.0f, 0.0f}
 
vec3 air_velocity = {0.0f, 0.0f, 0.0f}
 
bool enabled = false
 
bool is_in_air = false
 
float collision_width = 0.35f
 
float collision_height = 1.85f
 
float step_height = 0.35f
 
float walk_speed = 0.1f
 
float run_speed = 0.2f
 
float crouch_speed = 0.05f
 
float fly_speed = 0.2f
 
bool crouching = false
 
bool running = false
 
bool flying = false
 
int jump_frames = 0
 
id_t standing_on = 0
 
id_t standing_on_prev = 0
 
vec3 standing_pos
 
uint32_t collision_group = Physics::COLL_PLAYER
 
void(* wallbonk_callback )(ControllerComponent *, Physics::Collision) = nullptr
 
- Protected Attributes inherited from tram::ControllerComponent
quat look_direction = {1.0f, 0.0f, 0.0f, 0.0f}
 
bool collide = true
 
- Protected Attributes inherited from tram::EntityComponent
size_t resources_waiting = 0
 
bool is_ready = false
 
bool is_init = false
 
Entityparent = nullptr
 

Friends

class ControllerComponent
 
template<typename >
class Pool
 

Additional Inherited Members

- Static Public Member Functions inherited from tram::ControllerComponent
static bool IsDebugInfoDraw ()
 
static void SetDebugInfoDraw (bool)
 
static void Update ()
 Updates the ControllerComponents. More...
 

Detailed Description

Implementation of a simple character controller.

See also
ControllerComponent

Constructor & Destructor Documentation

◆ RaycastControllerComponent()

tram::RaycastControllerComponent::RaycastControllerComponent ( )
protecteddefault

◆ ~RaycastControllerComponent()

tram::RaycastControllerComponent::~RaycastControllerComponent ( )
protecteddefault

Member Function Documentation

◆ ApplyDynamics()

void tram::RaycastControllerComponent::ApplyDynamics ( )
protected

◆ Crouch()

void tram::RaycastControllerComponent::Crouch ( )
overridevirtual

◆ EventHandler()

void tram::RaycastControllerComponent::EventHandler ( Event event)
inlineoverridevirtual

Implements tram::EntityComponent.

◆ Fly()

void tram::RaycastControllerComponent::Fly ( )
overridevirtual

◆ Jump()

void tram::RaycastControllerComponent::Jump ( )
overridevirtual

◆ Move()

void tram::RaycastControllerComponent::Move ( vec3  local_direction)
overridevirtual

◆ Push()

void tram::RaycastControllerComponent::Push ( vec3  direction)
overridevirtual

◆ RecoverFromCollisions()

void tram::RaycastControllerComponent::RecoverFromCollisions ( )
protected

◆ ResetMove()

void tram::RaycastControllerComponent::ResetMove ( )
protected

◆ Run()

void tram::RaycastControllerComponent::Run ( )
overridevirtual

◆ SetCollisionGroup()

void tram::RaycastControllerComponent::SetCollisionGroup ( uint32_t  group)
inline

◆ SetCollisionSize()

void tram::RaycastControllerComponent::SetCollisionSize ( float  width,
float  height,
float  crouch_height 
)
inline

◆ SetCrouchSpeed()

void tram::RaycastControllerComponent::SetCrouchSpeed ( float  speed)
inline

◆ SetFlySpeed()

void tram::RaycastControllerComponent::SetFlySpeed ( float  speed)
inline

◆ SetFriction()

void tram::RaycastControllerComponent::SetFriction ( float  speed)
inline

◆ SetRunSpeed()

void tram::RaycastControllerComponent::SetRunSpeed ( float  speed)
inline

◆ SetStepHeight()

void tram::RaycastControllerComponent::SetStepHeight ( float  height,
float  crouch_height 
)
inline

◆ SetWalkSpeed()

void tram::RaycastControllerComponent::SetWalkSpeed ( float  speed)
inline

◆ SetWallCollisionCallback()

void tram::RaycastControllerComponent::SetWallCollisionCallback ( void(*)(ControllerComponent *, Physics::Collision callback)
inline

◆ Start()

void tram::RaycastControllerComponent::Start ( )
overridevirtual

Implements tram::EntityComponent.

◆ TurnLeft()

void tram::RaycastControllerComponent::TurnLeft ( )
overridevirtual

◆ TurnRight()

void tram::RaycastControllerComponent::TurnRight ( )
overridevirtual

Friends And Related Function Documentation

◆ ControllerComponent

friend class ControllerComponent
friend

◆ Pool

template<typename >
friend class Pool
friend

Member Data Documentation

◆ air_velocity

vec3 tram::RaycastControllerComponent::air_velocity = {0.0f, 0.0f, 0.0f}
protected

◆ collision_group

uint32_t tram::RaycastControllerComponent::collision_group = Physics::COLL_PLAYER
protected

◆ collision_height

float tram::RaycastControllerComponent::collision_height = 1.85f
protected

◆ collision_width

float tram::RaycastControllerComponent::collision_width = 0.35f
protected

◆ crouch_speed

float tram::RaycastControllerComponent::crouch_speed = 0.05f
protected

◆ crouching

bool tram::RaycastControllerComponent::crouching = false
protected

◆ enabled

bool tram::RaycastControllerComponent::enabled = false
protected

◆ fly_speed

float tram::RaycastControllerComponent::fly_speed = 0.2f
protected

◆ flying

bool tram::RaycastControllerComponent::flying = false
protected

◆ is_in_air

bool tram::RaycastControllerComponent::is_in_air = false
protected

◆ jump_frames

int tram::RaycastControllerComponent::jump_frames = 0
protected

◆ move_direction

vec3 tram::RaycastControllerComponent::move_direction = {0.0f, 0.0f, 0.0f}
protected

◆ move_magnitude

vec3 tram::RaycastControllerComponent::move_magnitude = {0.0f, 0.0f, 0.0f}
protected

◆ run_speed

float tram::RaycastControllerComponent::run_speed = 0.2f
protected

◆ running

bool tram::RaycastControllerComponent::running = false
protected

◆ standing_on

id_t tram::RaycastControllerComponent::standing_on = 0
protected

◆ standing_on_prev

id_t tram::RaycastControllerComponent::standing_on_prev = 0
protected

◆ standing_pos

vec3 tram::RaycastControllerComponent::standing_pos
protected

◆ step_height

float tram::RaycastControllerComponent::step_height = 0.35f
protected

◆ walk_speed

float tram::RaycastControllerComponent::walk_speed = 0.1f
protected

◆ wall_collision

Component<TriggerComponent> tram::RaycastControllerComponent::wall_collision
protected

◆ wallbonk_callback

void(* tram::RaycastControllerComponent::wallbonk_callback) (ControllerComponent *, Physics::Collision) = nullptr
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/controller.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/controller.cpp
================================================ FILE: docs/cppapi/classtram_1_1_render_1_1_a_p_i_1_1_fragment_shader-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Render::API::FragmentShader Member List

This is the complete list of members for tram::Render::API::FragmentShader, including all inherited members.

Find(name_t name)tram::Render::API::FragmentShaderinlinestatic
GetName()tram::Render::API::FragmentShaderinline
GetShader(uint32_t flags)tram::Render::API::FragmentShaderinline
================================================ FILE: docs/cppapi/classtram_1_1_render_1_1_a_p_i_1_1_fragment_shader.html ================================================ Tramway SDK: tram::Render::API::FragmentShader Class Reference
Tramway SDK v0.1.1
tram::Render::API::FragmentShader Class Reference

Public Member Functions

name_t GetName ()
 
uint32_t GetShader (uint32_t flags)
 

Static Public Member Functions

static FragmentShaderFind (name_t name)
 

Member Function Documentation

◆ Find()

static FragmentShader * tram::Render::API::FragmentShader::Find ( name_t  name)
inlinestatic

◆ GetName()

name_t tram::Render::API::FragmentShader::GetName ( )
inline

◆ GetShader()

uint32_t tram::Render::API::FragmentShader::GetShader ( uint32_t  flags)
inline

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/shader.cpp
================================================ FILE: docs/cppapi/classtram_1_1_render_1_1_a_p_i_1_1_linked_shader-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Render::API::LinkedShader Member List

This is the complete list of members for tram::Render::API::LinkedShader, including all inherited members.

BindUniformBlock(const char *name, uint32_t binding)tram::Render::API::LinkedShaderinline
FindShader(vertexformat_t format, materialtype_t type, shaderflags_t flags)tram::Render::API::LinkedShaderinlinestatic
GetAnyShader(shaderflags_t flags)tram::Render::API::LinkedShaderinlinestatic
GetFormat()tram::Render::API::LinkedShaderinline
GetFragmentShader()tram::Render::API::LinkedShaderinline
GetShader(uint32_t flags)tram::Render::API::LinkedShaderinline
GetType()tram::Render::API::LinkedShaderinline
GetVertexShader()tram::Render::API::LinkedShaderinline
Register(vertexformat_t format, materialtype_t type, const char *vertex_shader, const char *fragment_shader)tram::Render::API::LinkedShaderinlinestatic
RegisterUniformBlock(const char *name, uint32_t binding)tram::Render::API::LinkedShaderinlinestatic
================================================ FILE: docs/cppapi/classtram_1_1_render_1_1_a_p_i_1_1_linked_shader.html ================================================ Tramway SDK: tram::Render::API::LinkedShader Class Reference
Tramway SDK v0.1.1
tram::Render::API::LinkedShader Class Reference

Public Member Functions

vertexformat_t GetFormat ()
 
materialtype_t GetType ()
 
VertexShaderGetVertexShader ()
 
FragmentShaderGetFragmentShader ()
 
uint32_t GetShader (uint32_t flags)
 
void BindUniformBlock (const char *name, uint32_t binding)
 

Static Public Member Functions

static uint32_t FindShader (vertexformat_t format, materialtype_t type, shaderflags_t flags)
 
static uint32_t GetAnyShader (shaderflags_t flags)
 
static void Register (vertexformat_t format, materialtype_t type, const char *vertex_shader, const char *fragment_shader)
 
static void RegisterUniformBlock (const char *name, uint32_t binding)
 

Member Function Documentation

◆ BindUniformBlock()

void tram::Render::API::LinkedShader::BindUniformBlock ( const char *  name,
uint32_t  binding 
)
inline

◆ FindShader()

static uint32_t tram::Render::API::LinkedShader::FindShader ( vertexformat_t  format,
materialtype_t  type,
shaderflags_t  flags 
)
inlinestatic

◆ GetAnyShader()

static uint32_t tram::Render::API::LinkedShader::GetAnyShader ( shaderflags_t  flags)
inlinestatic

◆ GetFormat()

vertexformat_t tram::Render::API::LinkedShader::GetFormat ( )
inline

◆ GetFragmentShader()

FragmentShader * tram::Render::API::LinkedShader::GetFragmentShader ( )
inline

◆ GetShader()

uint32_t tram::Render::API::LinkedShader::GetShader ( uint32_t  flags)
inline

◆ GetType()

materialtype_t tram::Render::API::LinkedShader::GetType ( )
inline

◆ GetVertexShader()

VertexShader * tram::Render::API::LinkedShader::GetVertexShader ( )
inline

◆ Register()

static void tram::Render::API::LinkedShader::Register ( vertexformat_t  format,
materialtype_t  type,
const char *  vertex_shader,
const char *  fragment_shader 
)
inlinestatic

◆ RegisterUniformBlock()

static void tram::Render::API::LinkedShader::RegisterUniformBlock ( const char *  name,
uint32_t  binding 
)
inlinestatic

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/shader.cpp
================================================ FILE: docs/cppapi/classtram_1_1_render_1_1_a_p_i_1_1_shader_buffer.html ================================================ Tramway SDK: tram::Render::API::ShaderBuffer Class Reference
Tramway SDK v0.1.1
tram::Render::API::ShaderBuffer Class Reference

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/renderer.cpp
================================================ FILE: docs/cppapi/classtram_1_1_render_1_1_a_p_i_1_1_vertex_shader-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Render::API::VertexShader Member List

This is the complete list of members for tram::Render::API::VertexShader, including all inherited members.

Find(name_t name)tram::Render::API::VertexShaderinlinestatic
GetName()tram::Render::API::VertexShaderinline
GetShader(uint32_t flags)tram::Render::API::VertexShaderinline
================================================ FILE: docs/cppapi/classtram_1_1_render_1_1_a_p_i_1_1_vertex_shader.html ================================================ Tramway SDK: tram::Render::API::VertexShader Class Reference
Tramway SDK v0.1.1
tram::Render::API::VertexShader Class Reference

Public Member Functions

name_t GetName ()
 
uint32_t GetShader (uint32_t flags)
 

Static Public Member Functions

static VertexShaderFind (name_t name)
 

Member Function Documentation

◆ Find()

static VertexShader * tram::Render::API::VertexShader::Find ( name_t  name)
inlinestatic

◆ GetName()

name_t tram::Render::API::VertexShader::GetName ( )
inline

◆ GetShader()

uint32_t tram::Render::API::VertexShader::GetShader ( uint32_t  flags)
inline

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/shader.cpp
================================================ FILE: docs/cppapi/classtram_1_1_render_1_1_animation-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Render::Animation Member List
================================================ FILE: docs/cppapi/classtram_1_1_render_1_1_animation.html ================================================ Tramway SDK: tram::Render::Animation Class Reference
Tramway SDK v0.1.1
tram::Render::Animation Class Reference

Skeletal animation for a 3D model. More...

#include <render/animation.h>

Inheritance diagram for tram::Render::Animation:
tram::Resource

Public Member Functions

 Animation (name_t name)
 
KeyframeGetKeyframes (name_t bone)
 
uint32_t GetKeyframeCount (name_t bone)
 
KeyframeHeaderGetHeader (uint32_t index)
 
uint32_t GetHeaderCount ()
 
void LoadFromDisk ()
 
void LoadFromMemory ()
 
void Unload ()
 
- Public Member Functions inherited from tram::Resource
 Resource (name_t name)
 
Resource::Status GetStatus () const
 
name_t GetName () const
 
size_t GetReferences () const
 
bool IsLoadFailed () const
 
void AddReference ()
 
void RemoveReference ()
 
void Load ()
 

Static Public Member Functions

static AnimationFind (name_t name)
 
static void LoadAll ()
 

Additional Inherited Members

- Public Types inherited from tram::Resource
enum  Status { UNLOADED , LOADED , READY }
 
- Protected Attributes inherited from tram::Resource
Status status = UNLOADED
 
name_t name
 
bool load_fail = false
 
size_t references = 0
 

Detailed Description

Constructor & Destructor Documentation

◆ Animation()

tram::Render::Animation::Animation ( name_t  name)
inline

Member Function Documentation

◆ Find()

Animation * tram::Render::Animation::Find ( name_t  name)
static

◆ GetHeader()

KeyframeHeader * tram::Render::Animation::GetHeader ( uint32_t  index)
inline

◆ GetHeaderCount()

uint32_t tram::Render::Animation::GetHeaderCount ( )
inline

◆ GetKeyframeCount()

uint32_t tram::Render::Animation::GetKeyframeCount ( name_t  bone)

◆ GetKeyframes()

Keyframe * tram::Render::Animation::GetKeyframes ( name_t  bone)

◆ LoadAll()

static void tram::Render::Animation::LoadAll ( )
static

◆ LoadFromDisk()

void tram::Render::Animation::LoadFromDisk ( )
virtual

Implements tram::Resource.

◆ LoadFromMemory()

void tram::Render::Animation::LoadFromMemory ( )
inlinevirtual

Implements tram::Resource.

◆ Unload()

void tram::Render::Animation::Unload ( )
virtual

Implements tram::Resource.


The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/animation.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/animation.cpp
================================================ FILE: docs/cppapi/classtram_1_1_render_1_1_light_graph-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Render::LightGraph Member List
================================================ FILE: docs/cppapi/classtram_1_1_render_1_1_light_graph.html ================================================ Tramway SDK: tram::Render::LightGraph Class Reference
Tramway SDK v0.1.1

LightGraph resource. More...

#include <render/light.h>

Inheritance diagram for tram::Render::LightGraph:
tram::Resource

Classes

struct  Node
 

Public Member Functions

 LightGraph (name_t name)
 
void LoadFromDisk ()
 
void LoadFromMemory ()
 
void Unload ()
 
std::vector< std::pair< uint32_t, vec3 > > GetEnvironmentProbes ()
 
- Public Member Functions inherited from tram::Resource
 Resource (name_t name)
 
Resource::Status GetStatus () const
 
name_t GetName () const
 
size_t GetReferences () const
 
bool IsLoadFailed () const
 
void AddReference ()
 
void RemoveReference ()
 
void Load ()
 

Static Public Member Functions

static bool ContainsEntity (id_t entity)
 
static SphericalHarmonic LookupHarmonic (vec3 position, uint32_t layers)
 
static MaterialLookupEnvironmentMap (vec3 position)
 
static LightGraphFind (name_t name)
 

Protected Attributes

std::vector< id_tentities
 
std::vector< Nodenodes
 
std::vector< std::pair< uint32_t, uint32_t > > edges
 
- Protected Attributes inherited from tram::Resource
Status status = UNLOADED
 
name_t name
 
bool load_fail = false
 
size_t references = 0
 

Additional Inherited Members

- Public Types inherited from tram::Resource
enum  Status { UNLOADED , LOADED , READY }
 

Detailed Description

LightGraph resource.

Constructor & Destructor Documentation

◆ LightGraph()

tram::Render::LightGraph::LightGraph ( name_t  name)
inline

Member Function Documentation

◆ ContainsEntity()

bool LightGraph::ContainsEntity ( id_t  entity)
static

◆ Find()

LightGraph * LightGraph::Find ( name_t  name)
static

◆ GetEnvironmentProbes()

std::vector< std::pair< uint32_t, vec3 > > LightGraph::GetEnvironmentProbes ( )

◆ LoadFromDisk()

void LightGraph::LoadFromDisk ( )
virtual

Implements tram::Resource.

◆ LoadFromMemory()

void tram::Render::LightGraph::LoadFromMemory ( )
inlinevirtual

Implements tram::Resource.

◆ LookupEnvironmentMap()

Material * LightGraph::LookupEnvironmentMap ( vec3  position)
static

◆ LookupHarmonic()

SphericalHarmonic LightGraph::LookupHarmonic ( vec3  position,
uint32_t  layers 
)
static

◆ Unload()

void tram::Render::LightGraph::Unload ( )
inlinevirtual

Implements tram::Resource.

Member Data Documentation

◆ edges

std::vector<std::pair<uint32_t, uint32_t> > tram::Render::LightGraph::edges
protected

◆ entities

std::vector<id_t> tram::Render::LightGraph::entities
protected

◆ nodes

std::vector<Node> tram::Render::LightGraph::nodes
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/light.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/light.cpp
================================================ FILE: docs/cppapi/classtram_1_1_render_1_1_material-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Render::Material Member List

This is the complete list of members for tram::Render::Material, including all inherited members.

AddReference()tram::Resourceinline
approx_vram_usagetram::Render::Materialprotected
channelstram::Render::Materialprotected
colortram::Render::Materialprotected
filtertram::Render::Materialprotected
Find(name_t name)tram::Render::Materialstatic
GetColor() consttram::Render::Materialinline
GetHeight() consttram::Render::Materialinline
GetMaterial() consttram::Render::Materialinline
GetName() consttram::Resourceinline
GetProperty() consttram::Render::Materialinline
GetReferences() consttram::Resourceinline
GetSpecularExponent() consttram::Render::Materialinline
GetSpecularTransparency() consttram::Render::Materialinline
GetSpecularWeight() consttram::Render::Materialinline
GetStatus() consttram::Resourceinline
GetTexture() consttram::Render::Materialinline
GetType() consttram::Render::Materialinline
GetWidth() consttram::Render::Materialinline
heighttram::Render::Materialprotected
IsLoadFailed() consttram::Resourceinline
Load()tram::Resourceinline
load_failtram::Resourceprotected
LOADED enum valuetram::Resource
LoadFromDisk()tram::Render::Materialvirtual
LoadFromMemory()tram::Render::Materialvirtual
LoadMaterialInfo(const char *filename)tram::Render::Materialstatic
Make(name_t name, materialtype_t type)tram::Render::Materialstatic
MakePattern(vec3 color1, vec3 color2)tram::Render::Material
Material(name_t name)tram::Render::Materialinline
Material(name_t name, materialtype_t type)tram::Render::Material
materialtram::Render::Materialprotected
nametram::Resourceprotected
propertytram::Render::Materialprotected
READY enum valuetram::Resource
referencestram::Resourceprotected
reflectivitytram::Render::Materialprotected
RemoveReference()tram::Resourceinline
Resource(name_t name)tram::Resourceinline
SetColor(color_t color)tram::Render::Materialinline
SetMaterialFilter(MaterialFilter filter)tram::Render::Materialinline
SetMaterialProperty(MaterialProperty property)tram::Render::Materialinline
SetMaterialType(materialtype_t type)tram::Render::Materialinline
SetReflectivity(float reflectivity)tram::Render::Materialinline
SetSource(Material *source)tram::Render::Materialinline
SetSpecular(float weight, float exponent, float transparency)tram::Render::Materialinline
SetTextureType(TextureType texture_type)tram::Render::Materialinline
sourcetram::Render::Materialprotected
specular_exponenttram::Render::Materialprotected
specular_transparencytram::Render::Materialprotected
specular_weighttram::Render::Materialprotected
Spritetram::Render::Materialfriend
Status enum nametram::Resource
statustram::Resourceprotected
texturetram::Render::Materialprotected
texture_datatram::Render::Materialprotected
texture_typetram::Render::Materialprotected
typetram::Render::Materialprotected
Unload()tram::Render::Materialinlinevirtual
UNLOADED enum valuetram::Resource
widthtram::Render::Materialprotected
================================================ FILE: docs/cppapi/classtram_1_1_render_1_1_material.html ================================================ Tramway SDK: tram::Render::Material Class Reference
Tramway SDK v0.1.1

Material resource. More...

#include <render/material.h>

Inheritance diagram for tram::Render::Material:
tram::Resource

Public Member Functions

 Material (name_t name)
 
 Material (name_t name, materialtype_t type)
 
texturehandle_t GetTexture () const
 
material_t GetMaterial () const
 
uint32_t GetWidth () const
 
uint32_t GetHeight () const
 
materialtype_t GetType () const
 
MaterialProperty GetProperty () const
 
vec3 GetColor () const
 
float GetSpecularWeight () const
 
float GetSpecularExponent () const
 
float GetSpecularTransparency () const
 
void SetMaterialType (materialtype_t type)
 
void SetMaterialFilter (MaterialFilter filter)
 
void SetMaterialProperty (MaterialProperty property)
 
void SetColor (color_t color)
 
void SetSpecular (float weight, float exponent, float transparency)
 
void SetReflectivity (float reflectivity)
 
void SetTextureType (TextureType texture_type)
 
void SetSource (Material *source)
 
void MakePattern (vec3 color1, vec3 color2)
 Makes Material a pattern. More...
 
void LoadFromDisk ()
 
void LoadFromMemory ()
 Pushes material textures to GPU. More...
 
void Unload ()
 
- Public Member Functions inherited from tram::Resource
 Resource (name_t name)
 
Resource::Status GetStatus () const
 
name_t GetName () const
 
size_t GetReferences () const
 
bool IsLoadFailed () const
 
void AddReference ()
 
void RemoveReference ()
 
void Load ()
 

Static Public Member Functions

static MaterialFind (name_t name)
 Finds a Material. More...
 
static MaterialMake (name_t name, materialtype_t type)
 Creates a material. More...
 
static void LoadMaterialInfo (const char *filename)
 Loads a Material definition file. More...
 

Protected Attributes

texturehandle_t texture = {}
 
materialtype_t type = MATERIAL_TEXTURE
 
MaterialFilter filter = FILTER_NEAREST
 
MaterialProperty property = PROPERTY_METAL
 
TextureType texture_type = TEXTURE_SAME
 
material_t material = {.generic = nullptr}
 
Materialsource = nullptr
 
vec3 color = {1.0f, 1.0f, 1.0f}
 
float specular_weight = 0.0f
 
float specular_exponent = 1.0f
 
float specular_transparency = 0.0f
 
float reflectivity = 0.0f
 
uint32_t width = 0
 
uint32_t height = 0
 
uint8_t channels = 0
 
uint8_t * texture_data = nullptr
 
size_t approx_vram_usage = 0
 
- Protected Attributes inherited from tram::Resource
Status status = UNLOADED
 
name_t name
 
bool load_fail = false
 
size_t references = 0
 

Friends

class Sprite
 

Additional Inherited Members

- Public Types inherited from tram::Resource
enum  Status { UNLOADED , LOADED , READY }
 

Detailed Description

Constructor & Destructor Documentation

◆ Material() [1/2]

tram::Render::Material::Material ( name_t  name)
inline

◆ Material() [2/2]

tram::Render::Material::Material ( name_t  name,
materialtype_t  type 
)

Member Function Documentation

◆ Find()

Material * tram::Render::Material::Find ( name_t  name)
static

Finds a Material.

Finds a Material by its associated name. If Material with that names does not exist, then it is created (with the TEXTURE_LIGHTMAP type). In addition, for a Material to be found, it must have been created with the LoadMaterialInfo(), Make() or Find() methods.

Returns
Always returns a pointer to a Material.

◆ GetColor()

vec3 tram::Render::Material::GetColor ( ) const
inline

◆ GetHeight()

uint32_t tram::Render::Material::GetHeight ( ) const
inline

◆ GetMaterial()

material_t tram::Render::Material::GetMaterial ( ) const
inline

◆ GetProperty()

MaterialProperty tram::Render::Material::GetProperty ( ) const
inline

◆ GetSpecularExponent()

float tram::Render::Material::GetSpecularExponent ( ) const
inline

◆ GetSpecularTransparency()

float tram::Render::Material::GetSpecularTransparency ( ) const
inline

◆ GetSpecularWeight()

float tram::Render::Material::GetSpecularWeight ( ) const
inline

◆ GetTexture()

texturehandle_t tram::Render::Material::GetTexture ( ) const
inline

◆ GetType()

materialtype_t tram::Render::Material::GetType ( ) const
inline

◆ GetWidth()

uint32_t tram::Render::Material::GetWidth ( ) const
inline

◆ LoadFromDisk()

void tram::Render::Material::LoadFromDisk ( )
virtual

Implements tram::Resource.

◆ LoadFromMemory()

void tram::Render::Material::LoadFromMemory ( )
virtual

Pushes material textures to GPU.

Except if software rendering is used, in which case the texures will merely be copied and converted.

Implements tram::Resource.

◆ LoadMaterialInfo()

void tram::Render::Material::LoadMaterialInfo ( const char *  filename)
static

Loads a Material definition file.

◆ Make()

Material * tram::Render::Material::Make ( name_t  name,
materialtype_t  type 
)
static

Creates a material.

If a Material already exists with that name, then the existing Material is returned.

Returns
Always returns a pointer to a Material.

◆ MakePattern()

void tram::Render::Material::MakePattern ( vec3  color1,
vec3  color2 
)

Makes Material a pattern.

This method does the same thing as LoadFromDisk(), but instead of loading the texture from disk, it will generate a 64x64 pixel checkerboard pattern, like the one used for errored materials.

◆ SetColor()

void tram::Render::Material::SetColor ( color_t  color)
inline

◆ SetMaterialFilter()

void tram::Render::Material::SetMaterialFilter ( MaterialFilter  filter)
inline

◆ SetMaterialProperty()

void tram::Render::Material::SetMaterialProperty ( MaterialProperty  property)
inline

◆ SetMaterialType()

void tram::Render::Material::SetMaterialType ( materialtype_t  type)
inline

◆ SetReflectivity()

void tram::Render::Material::SetReflectivity ( float  reflectivity)
inline

◆ SetSource()

void tram::Render::Material::SetSource ( Material source)
inline

◆ SetSpecular()

void tram::Render::Material::SetSpecular ( float  weight,
float  exponent,
float  transparency 
)
inline

◆ SetTextureType()

void tram::Render::Material::SetTextureType ( TextureType  texture_type)
inline

◆ Unload()

void tram::Render::Material::Unload ( )
inlinevirtual

Implements tram::Resource.

Friends And Related Function Documentation

◆ Sprite

friend class Sprite
friend

Member Data Documentation

◆ approx_vram_usage

size_t tram::Render::Material::approx_vram_usage = 0
protected

◆ channels

uint8_t tram::Render::Material::channels = 0
protected

◆ color

vec3 tram::Render::Material::color = {1.0f, 1.0f, 1.0f}
protected

◆ filter

MaterialFilter tram::Render::Material::filter = FILTER_NEAREST
protected

◆ height

uint32_t tram::Render::Material::height = 0
protected

◆ material

material_t tram::Render::Material::material = {.generic = nullptr}
protected

◆ property

MaterialProperty tram::Render::Material::property = PROPERTY_METAL
protected

◆ reflectivity

float tram::Render::Material::reflectivity = 0.0f
protected

◆ source

Material* tram::Render::Material::source = nullptr
protected

◆ specular_exponent

float tram::Render::Material::specular_exponent = 1.0f
protected

◆ specular_transparency

float tram::Render::Material::specular_transparency = 0.0f
protected

◆ specular_weight

float tram::Render::Material::specular_weight = 0.0f
protected

◆ texture

texturehandle_t tram::Render::Material::texture = {}
protected

◆ texture_data

uint8_t* tram::Render::Material::texture_data = nullptr
protected

◆ texture_type

TextureType tram::Render::Material::texture_type = TEXTURE_SAME
protected

◆ type

materialtype_t tram::Render::Material::type = MATERIAL_TEXTURE
protected

◆ width

uint32_t tram::Render::Material::width = 0
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/material.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/material.cpp
================================================ FILE: docs/cppapi/classtram_1_1_render_1_1_model-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Render::Model Member List

This is the complete list of members for tram::Render::Model, including all inherited members.

aabb_maxtram::Render::Modelprotected
aabb_mintram::Render::Modelprotected
AddReference()tram::Resourceinline
approx_vram_usagetram::Render::Modelprotected
armaturetram::Render::Modelprotected
DrawAABB(vec3 position, quat rotation)tram::Render::Model
fade_fartram::Render::Modelprotected
fade_neartram::Render::Modelprotected
Find(name_t name)tram::Render::Modelstatic
FindAllFromAABB(vec3 min, vec3 max, std::vector< AABBTriangle > &result)tram::Render::Model
FindAllFromRay(vec3 ray_pos, vec3 ray_dir, std::vector< AABBTriangle > &result)tram::Render::Model
GetAABBMax() consttram::Render::Modelinline
GetAABBMin() consttram::Render::Modelinline
GetArmature() consttram::Render::Modelinline
GetFarDistance() consttram::Render::Modelinline
GetIndexArray() consttram::Render::Modelinline
GetIndexRanges() consttram::Render::Modelinline
GetMaterials() consttram::Render::Modelinline
GetName() consttram::Resourceinline
GetNearDistance() consttram::Render::Modelinline
GetOrigin() consttram::Render::Modelinline
GetReferences() consttram::Resourceinline
GetStatus() consttram::Resourceinline
GetVertexArray() consttram::Render::Modelinline
GetVertexFormat() consttram::Render::Modelinline
index_arraytram::Render::Modelprotected
index_rangestram::Render::Modelprotected
IsLoadFailed() consttram::Resourceinline
Load()tram::Resourceinline
load_failtram::Resourceprotected
LOADED enum valuetram::Resource
LoadFromDisk()tram::Render::Modelvirtual
LoadFromMemory()tram::Render::Modelvirtual
materialstram::Render::Modelprotected
Model(name_t name)tram::Render::Modelinline
model_aabbtram::Render::Modelprotected
model_datatram::Render::Modelprotected
nametram::Resourceprotected
origintram::Render::Modelprotected
READY enum valuetram::Resource
referencestram::Resourceprotected
RemoveReference()tram::Resourceinline
Resource(name_t name)tram::Resourceinline
SetFarDistance(float dist)tram::Render::Modelinline
SetNearDistance(float dist)tram::Render::Modelinline
sourcetram::Render::Modelprotected
Status enum nametram::Resource
statustram::Resourceprotected
Unload()tram::Render::Modelinlinevirtual
UNLOADED enum valuetram::Resource
vertex_arraytram::Render::Modelprotected
vertex_formattram::Render::Modelprotected
================================================ FILE: docs/cppapi/classtram_1_1_render_1_1_model.html ================================================ Tramway SDK: tram::Render::Model Class Reference
Tramway SDK v0.1.1

#include <model.h>

Inheritance diagram for tram::Render::Model:
tram::Resource

Public Member Functions

 Model (name_t name)
 
void LoadFromDisk ()
 
void LoadFromMemory ()
 
void Unload ()
 
vertexformat_t GetVertexFormat () const
 
vertexarray_t GetVertexArray () const
 
indexarray_t GetIndexArray () const
 
const std::vector< Bone > & GetArmature () const
 
const std::vector< Material * > & GetMaterials () const
 
const std::vector< IndexRange > & GetIndexRanges () const
 
void DrawAABB (vec3 position, quat rotation)
 Draws the AABB tree. More...
 
void FindAllFromRay (vec3 ray_pos, vec3 ray_dir, std::vector< AABBTriangle > &result)
 Finds triangles that intersect ray. More...
 
void FindAllFromAABB (vec3 min, vec3 max, std::vector< AABBTriangle > &result)
 
vec3 GetAABBMin () const
 
vec3 GetAABBMax () const
 
vec3 GetOrigin () const
 
float GetNearDistance () const
 
float GetFarDistance () const
 
void SetNearDistance (float dist)
 
void SetFarDistance (float dist)
 
- Public Member Functions inherited from tram::Resource
 Resource (name_t name)
 
Resource::Status GetStatus () const
 
name_t GetName () const
 
size_t GetReferences () const
 
bool IsLoadFailed () const
 
void AddReference ()
 
void RemoveReference ()
 
void Load ()
 

Static Public Member Functions

static ModelFind (name_t name)
 

Protected Attributes

vertexformat_t vertex_format = VERTEX_STATIC
 
vertexarray_t vertex_array = {}
 
indexarray_t index_array = {}
 
std::vector< IndexRangeindex_ranges
 
vec3 aabb_min = {0.0f, 0.0f, 0.0f}
 
vec3 aabb_max = {0.0f, 0.0f, 0.0f}
 
float fade_near = 0.0f
 
float fade_far = INFINITY
 
vec3 origin = {0.0f, 0.0f, 0.0f}
 
std::vector< Material * > materials
 
Modelsource = nullptr
 
std::vector< Bonearmature
 
ModelDatamodel_data = nullptr
 
ModelAABBmodel_aabb = nullptr
 
size_t approx_vram_usage = 0
 
- Protected Attributes inherited from tram::Resource
Status status = UNLOADED
 
name_t name
 
bool load_fail = false
 
size_t references = 0
 

Additional Inherited Members

- Public Types inherited from tram::Resource
enum  Status { UNLOADED , LOADED , READY }
 

Constructor & Destructor Documentation

◆ Model()

tram::Render::Model::Model ( name_t  name)
inline

Member Function Documentation

◆ DrawAABB()

void tram::Render::Model::DrawAABB ( vec3  position,
quat  rotation 
)

Draws the AABB tree.

Draws the AABB tree of the 3D model using debug lines. This might be useful for debugging if raycasts or some other lookups fail on the 3D model.

Parameters
positionPosition of the 3D model in the scene.
rotationRotation of the 3D model in the scene.

◆ Find()

Model * tram::Render::Model::Find ( name_t  name)
static

◆ FindAllFromAABB()

void tram::Render::Model::FindAllFromAABB ( vec3  min,
vec3  max,
std::vector< AABBTriangle > &  result 
)

◆ FindAllFromRay()

void tram::Render::Model::FindAllFromRay ( vec3  ray_pos,
vec3  ray_dir,
std::vector< AABBTriangle > &  result 
)

Finds triangles that intersect ray.

Finds the triangles that intersect the given ray. The ray's origin and direction must be provided in the local model coordinates.

◆ GetAABBMax()

vec3 tram::Render::Model::GetAABBMax ( ) const
inline

◆ GetAABBMin()

vec3 tram::Render::Model::GetAABBMin ( ) const
inline

◆ GetArmature()

const std::vector< Bone > & tram::Render::Model::GetArmature ( ) const
inline

◆ GetFarDistance()

float tram::Render::Model::GetFarDistance ( ) const
inline

◆ GetIndexArray()

indexarray_t tram::Render::Model::GetIndexArray ( ) const
inline

◆ GetIndexRanges()

const std::vector< IndexRange > & tram::Render::Model::GetIndexRanges ( ) const
inline

◆ GetMaterials()

const std::vector< Material * > & tram::Render::Model::GetMaterials ( ) const
inline

◆ GetNearDistance()

float tram::Render::Model::GetNearDistance ( ) const
inline

◆ GetOrigin()

vec3 tram::Render::Model::GetOrigin ( ) const
inline

◆ GetVertexArray()

vertexarray_t tram::Render::Model::GetVertexArray ( ) const
inline

◆ GetVertexFormat()

vertexformat_t tram::Render::Model::GetVertexFormat ( ) const
inline

◆ LoadFromDisk()

void tram::Render::Model::LoadFromDisk ( )
virtual

Implements tram::Resource.

◆ LoadFromMemory()

void tram::Render::Model::LoadFromMemory ( )
virtual

Implements tram::Resource.

◆ SetFarDistance()

void tram::Render::Model::SetFarDistance ( float  dist)
inline

◆ SetNearDistance()

void tram::Render::Model::SetNearDistance ( float  dist)
inline

◆ Unload()

void tram::Render::Model::Unload ( )
inlinevirtual

Implements tram::Resource.

Member Data Documentation

◆ aabb_max

vec3 tram::Render::Model::aabb_max = {0.0f, 0.0f, 0.0f}
protected

◆ aabb_min

vec3 tram::Render::Model::aabb_min = {0.0f, 0.0f, 0.0f}
protected

◆ approx_vram_usage

size_t tram::Render::Model::approx_vram_usage = 0
protected

◆ armature

std::vector<Bone> tram::Render::Model::armature
protected

◆ fade_far

float tram::Render::Model::fade_far = INFINITY
protected

◆ fade_near

float tram::Render::Model::fade_near = 0.0f
protected

◆ index_array

indexarray_t tram::Render::Model::index_array = {}
protected

◆ index_ranges

std::vector<IndexRange> tram::Render::Model::index_ranges
protected

◆ materials

std::vector<Material*> tram::Render::Model::materials
protected

◆ model_aabb

ModelAABB* tram::Render::Model::model_aabb = nullptr
protected

◆ model_data

ModelData* tram::Render::Model::model_data = nullptr
protected

◆ origin

vec3 tram::Render::Model::origin = {0.0f, 0.0f, 0.0f}
protected

◆ source

Model* tram::Render::Model::source = nullptr
protected

◆ vertex_array

vertexarray_t tram::Render::Model::vertex_array = {}
protected

◆ vertex_format

vertexformat_t tram::Render::Model::vertex_format = VERTEX_STATIC
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/model.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/model.cpp
================================================ FILE: docs/cppapi/classtram_1_1_render_1_1_open_g_l_1_1_shader_buffer.html ================================================ Tramway SDK: tram::Render::OpenGL::ShaderBuffer Class Reference
Tramway SDK
tram::Render::OpenGL::ShaderBuffer Class Reference

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/renderer.cpp
================================================ FILE: docs/cppapi/classtram_1_1_render_1_1_sound_graph.html ================================================ Tramway SDK: SoundGraph Class Reference
Tramway SDK v0.1.1
SoundGraph Class Reference

SoundGraph resource. More...

#include <audio/graph.h>

Detailed Description

SoundGraph resource.


The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/graph.cpp
================================================ FILE: docs/cppapi/classtram_1_1_render_1_1_sprite-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Render::Sprite Member List
================================================ FILE: docs/cppapi/classtram_1_1_render_1_1_sprite.html ================================================ Tramway SDK: tram::Render::Sprite Class Reference
Tramway SDK v0.1.1

Sprite resource. More...

#include <render/sprite.h>

Inheritance diagram for tram::Render::Sprite:
tram::Resource

Public Member Functions

 Sprite (UID name)
 
MaterialGetMaterial () const
 
void SetMaterial (Material *mat)
 
void LoadFromDisk ()
 
void LoadFromMemory ()
 
void Unload ()
 
const std::vector< SpriteFrame > & GetFrames ()
 
- Public Member Functions inherited from tram::Resource
 Resource (name_t name)
 
Resource::Status GetStatus () const
 
name_t GetName () const
 
size_t GetReferences () const
 
bool IsLoadFailed () const
 
void AddReference ()
 
void RemoveReference ()
 
void Load ()
 

Static Public Member Functions

static SpriteFind (name_t name)
 

Protected Attributes

std::vector< SpriteFrameframes
 
Materialmaterial = nullptr
 
- Protected Attributes inherited from tram::Resource
Status status = UNLOADED
 
name_t name
 
bool load_fail = false
 
size_t references = 0
 

Additional Inherited Members

- Public Types inherited from tram::Resource
enum  Status { UNLOADED , LOADED , READY }
 

Detailed Description

Sprite resource.

Sprites essentially just hold positions and sizes of rectangles, which correspond to some kind of features in the textures of the referenced Material.

See also
https://racenis.github.io/tram-sdk/documentation/render/sprite.html

Constructor & Destructor Documentation

◆ Sprite()

tram::Render::Sprite::Sprite ( UID  name)
inline

Member Function Documentation

◆ Find()

Sprite * Sprite::Find ( name_t  name)
static

◆ GetFrames()

const std::vector< SpriteFrame > & tram::Render::Sprite::GetFrames ( )
inline

◆ GetMaterial()

Material * tram::Render::Sprite::GetMaterial ( ) const
inline

◆ LoadFromDisk()

void Sprite::LoadFromDisk ( )
virtual

Implements tram::Resource.

◆ LoadFromMemory()

void Sprite::LoadFromMemory ( )
virtual

Implements tram::Resource.

◆ SetMaterial()

void tram::Render::Sprite::SetMaterial ( Material mat)
inline

◆ Unload()

void tram::Render::Sprite::Unload ( )
inlinevirtual

Implements tram::Resource.

Member Data Documentation

◆ frames

std::vector<SpriteFrame> tram::Render::Sprite::frames
protected

◆ material

Material* tram::Render::Sprite::material = nullptr
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/sprite.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/sprite.cpp
================================================ FILE: docs/cppapi/classtram_1_1_render_component-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::RenderComponent Member List

This is the complete list of members for tram::RenderComponent, including all inherited members.

aabb_tree_leaftram::RenderComponentprotected
colortram::RenderComponentprotected
draw_list_entriestram::RenderComponentprotected
EntityComponent()=defaulttram::EntityComponent
environmentmaptram::RenderComponentprotected
EventHandler(Event &event)tram::RenderComponentinlinevirtual
GetLightmap()tram::RenderComponentinline
GetLocation() consttram::RenderComponentinline
GetModel()tram::RenderComponentinline
GetParent()tram::EntityComponentinline
GetRotation() consttram::RenderComponentinline
GetScale() consttram::RenderComponentinline
Init()tram::EntityComponentvirtual
InsertDrawListEntries()tram::RenderComponentprotected
is_inittram::EntityComponentprotected
is_readytram::EntityComponentprotected
IsInit()tram::EntityComponentinline
IsReady()tram::EntityComponentinline
layertram::RenderComponentprotected
lightmaptram::RenderComponentprotected
locationtram::RenderComponentprotected
modeltram::RenderComponentprotected
parenttram::EntityComponentprotected
posetram::RenderComponentprotected
RefreshAABB()tram::RenderComponentprotected
render_flagstram::RenderComponentprotected
RenderComponent()tram::RenderComponent
ResourceReady()tram::EntityComponentprotected
resources_waitingtram::EntityComponentprotected
rotationtram::RenderComponentprotected
scaletram::RenderComponentprotected
SetArmature(AnimationComponent *armature)tram::RenderComponent
SetColor(vec3 color)tram::RenderComponent
SetDirectionaLight(bool enabled)tram::RenderComponent
SetEnvironmentMap(Render::Material *material)tram::RenderComponent
SetLayer(uint32_t layer)tram::RenderComponent
SetLightmap(name_t name)tram::RenderComponent
SetLocation(vec3 nlocation)tram::RenderComponent
SetModel(name_t name)tram::RenderComponent
SetParent(Entity *parent)tram::EntityComponentinline
SetRenderDebug(bool enabled)tram::RenderComponent
SetRotation(quat nrotation)tram::RenderComponent
SetScale(vec3 scale)tram::RenderComponent
SetTextureOffset(name_t material, vec4 offset)tram::RenderComponent
Start()tram::RenderComponentvirtual
~EntityComponent()=defaulttram::EntityComponentvirtual
~RenderComponent()tram::RenderComponent
================================================ FILE: docs/cppapi/classtram_1_1_render_component.html ================================================ Tramway SDK: tram::RenderComponent Class Reference
Tramway SDK v0.1.1

Renders a Model. More...

#include <components/render.h>

Inheritance diagram for tram::RenderComponent:
tram::EntityComponent

Public Member Functions

 RenderComponent ()
 
 ~RenderComponent ()
 
Render::ModelGetModel ()
 
name_t GetLightmap ()
 
void SetModel (name_t name)
 Set the model that the component will render. More...
 
void SetLightmap (name_t name)
 Sets the lightmap for the model. More...
 
void SetEnvironmentMap (Render::Material *material)
 Sets the environment map for the model. More...
 
void SetArmature (AnimationComponent *armature)
 Links an AnimationComponent. More...
 
void Start ()
 
vec3 GetLocation () const
 
quat GetRotation () const
 
vec3 GetScale () const
 
void SetLocation (vec3 nlocation)
 Sets the location of the model. More...
 
void SetRotation (quat nrotation)
 Sets the rotation of the model. More...
 
void SetScale (vec3 scale)
 Sets the scale of the model. More...
 
void SetColor (vec3 color)
 Sets the scale of the model. More...
 
void SetLayer (uint32_t layer)
 
void SetTextureOffset (name_t material, vec4 offset)
 
void SetDirectionaLight (bool enabled)
 Sets the world parameters for model rendering. More...
 
void SetRenderDebug (bool enabled)
 Sets render debugging. More...
 
void EventHandler (Event &event)
 
- Public Member Functions inherited from tram::EntityComponent
 EntityComponent ()=default
 
virtual ~EntityComponent ()=default
 
virtual void Init ()
 Initializes an entity component. More...
 
bool IsReady ()
 Returns the component's readiness. More...
 
bool IsInit ()
 Returns the component's init status. More...
 
EntityGetParent ()
 
void SetParent (Entity *parent)
 

Protected Member Functions

void InsertDrawListEntries ()
 
void RefreshAABB ()
 
- Protected Member Functions inherited from tram::EntityComponent
void ResourceReady ()
 Notifies the component of a streamed-in resource. More...
 

Protected Attributes

ResourceProxy< Render::Modelmodel
 
ResourceProxy< Render::Materiallightmap
 
ResourceProxy< Render::Materialenvironmentmap
 
std::vector< Render::drawlistentry_tdraw_list_entries
 
Render::Posepose = nullptr
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 scale = {1.0f, 1.0f, 1.0f}
 
vec3 color = {1.0f, 1.0f, 1.0f}
 
uint32_t layer = 0
 
void * aabb_tree_leaf = 0
 
uint32_t render_flags = 0
 
- Protected Attributes inherited from tram::EntityComponent
size_t resources_waiting = 0
 
bool is_ready = false
 
bool is_init = false
 
Entityparent = nullptr
 

Detailed Description

Constructor & Destructor Documentation

◆ RenderComponent()

tram::RenderComponent::RenderComponent ( )

◆ ~RenderComponent()

tram::RenderComponent::~RenderComponent ( )

Member Function Documentation

◆ EventHandler()

void tram::RenderComponent::EventHandler ( Event event)
inlinevirtual

Implements tram::EntityComponent.

◆ GetLightmap()

name_t tram::RenderComponent::GetLightmap ( )
inline

◆ GetLocation()

vec3 tram::RenderComponent::GetLocation ( ) const
inline

◆ GetModel()

Render::Model * tram::RenderComponent::GetModel ( )
inline

◆ GetRotation()

quat tram::RenderComponent::GetRotation ( ) const
inline

◆ GetScale()

vec3 tram::RenderComponent::GetScale ( ) const
inline

◆ InsertDrawListEntries()

void tram::RenderComponent::InsertDrawListEntries ( )
protected

◆ RefreshAABB()

void tram::RenderComponent::RefreshAABB ( )
protected

◆ SetArmature()

void tram::RenderComponent::SetArmature ( AnimationComponent armature)

Links an AnimationComponent.

This needs to be set, so that the model can be rendered with the animations played by the AnimationComponent. Alternatively, this can be set to a nullptr, if no animations are to be played. This affects only dynamic models, static models don't play animations.

◆ SetColor()

void tram::RenderComponent::SetColor ( vec3  color)

Sets the scale of the model.

◆ SetDirectionaLight()

void tram::RenderComponent::SetDirectionaLight ( bool  enabled)

Sets the world parameters for model rendering.

◆ SetEnvironmentMap()

void tram::RenderComponent::SetEnvironmentMap ( Render::Material material)

Sets the environment map for the model.

◆ SetLayer()

void tram::RenderComponent::SetLayer ( uint32_t  layer)

◆ SetLightmap()

void tram::RenderComponent::SetLightmap ( name_t  name)

Sets the lightmap for the model.

Lightmaps are rendered only for static models, so setting a lightmap for a dynamic model will do nothing.

◆ SetLocation()

void tram::RenderComponent::SetLocation ( vec3  nlocation)

Sets the location of the model.

◆ SetModel()

void tram::RenderComponent::SetModel ( name_t  name)

Set the model that the component will render.

If the model is not already loaded, then it will be added to loader queue and the component will start when it the loading is complete.

◆ SetRenderDebug()

void tram::RenderComponent::SetRenderDebug ( bool  enabled)

Sets render debugging.

If set to false, the 3D model will not have debug text for it when the render debug text rendering is turned on.

◆ SetRotation()

void tram::RenderComponent::SetRotation ( quat  nrotation)

Sets the rotation of the model.

◆ SetScale()

void tram::RenderComponent::SetScale ( vec3  scale)

Sets the scale of the model.

◆ SetTextureOffset()

void tram::RenderComponent::SetTextureOffset ( name_t  material,
vec4  offset 
)

◆ Start()

void tram::RenderComponent::Start ( )
virtual

Implements tram::EntityComponent.

Member Data Documentation

◆ aabb_tree_leaf

void* tram::RenderComponent::aabb_tree_leaf = 0
protected

◆ color

vec3 tram::RenderComponent::color = {1.0f, 1.0f, 1.0f}
protected

◆ draw_list_entries

std::vector<Render::drawlistentry_t> tram::RenderComponent::draw_list_entries
protected

◆ environmentmap

ResourceProxy<Render::Material> tram::RenderComponent::environmentmap
protected

◆ layer

uint32_t tram::RenderComponent::layer = 0
protected

◆ lightmap

ResourceProxy<Render::Material> tram::RenderComponent::lightmap
protected

◆ location

vec3 tram::RenderComponent::location = {0.0f, 0.0f, 0.0f}
protected

◆ model

ResourceProxy<Render::Model> tram::RenderComponent::model
protected

◆ pose

Render::Pose* tram::RenderComponent::pose = nullptr
protected

◆ render_flags

uint32_t tram::RenderComponent::render_flags = 0
protected

◆ rotation

quat tram::RenderComponent::rotation = {1.0f, 0.0f, 0.0f, 0.0f}
protected

◆ scale

vec3 tram::RenderComponent::scale = {1.0f, 1.0f, 1.0f}
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/render.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/render.cpp
================================================ FILE: docs/cppapi/classtram_1_1_resource-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Resource Member List

This is the complete list of members for tram::Resource, including all inherited members.

AddReference()tram::Resourceinline
GetName() consttram::Resourceinline
GetReferences() consttram::Resourceinline
GetStatus() consttram::Resourceinline
IsLoadFailed() consttram::Resourceinline
Load()tram::Resourceinline
load_failtram::Resourceprotected
LOADED enum valuetram::Resource
LoadFromDisk()=0tram::Resourcepure virtual
LoadFromMemory()=0tram::Resourcepure virtual
nametram::Resourceprotected
READY enum valuetram::Resource
referencestram::Resourceprotected
RemoveReference()tram::Resourceinline
Resource(name_t name)tram::Resourceinline
Status enum nametram::Resource
statustram::Resourceprotected
Unload()=0tram::Resourcepure virtual
UNLOADED enum valuetram::Resource
================================================ FILE: docs/cppapi/classtram_1_1_resource.html ================================================ Tramway SDK: tram::Resource Class Reference
Tramway SDK v0.1.1
tram::Resource Class Referenceabstract

#include <resource.h>

Inheritance diagram for tram::Resource:
tram::Audio::Sound tram::Audio::SoundGraph tram::Physics::CollisionModel tram::Render::Animation tram::Render::LightGraph tram::Render::Material tram::Render::Model tram::Render::Sprite

Public Types

enum  Status { UNLOADED , LOADED , READY }
 

Public Member Functions

 Resource (name_t name)
 
Resource::Status GetStatus () const
 
name_t GetName () const
 
size_t GetReferences () const
 
bool IsLoadFailed () const
 
void AddReference ()
 
void RemoveReference ()
 
virtual void LoadFromDisk ()=0
 
virtual void LoadFromMemory ()=0
 
void Load ()
 
virtual void Unload ()=0
 

Protected Attributes

Status status = UNLOADED
 
name_t name
 
bool load_fail = false
 
size_t references = 0
 

Member Enumeration Documentation

◆ Status

Enumerator
UNLOADED 
LOADED 
READY 

Constructor & Destructor Documentation

◆ Resource()

tram::Resource::Resource ( name_t  name)
inline

Member Function Documentation

◆ AddReference()

void tram::Resource::AddReference ( )
inline

◆ GetName()

name_t tram::Resource::GetName ( ) const
inline

◆ GetReferences()

size_t tram::Resource::GetReferences ( ) const
inline

◆ GetStatus()

Resource::Status tram::Resource::GetStatus ( ) const
inline

◆ IsLoadFailed()

bool tram::Resource::IsLoadFailed ( ) const
inline

◆ Load()

void tram::Resource::Load ( )
inline

◆ LoadFromDisk()

◆ LoadFromMemory()

◆ RemoveReference()

void tram::Resource::RemoveReference ( )
inline

◆ Unload()

Member Data Documentation

◆ load_fail

bool tram::Resource::load_fail = false
protected

◆ name

name_t tram::Resource::name
protected

◆ references

size_t tram::Resource::references = 0
protected

◆ status

Status tram::Resource::status = UNLOADED
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/resource.h
================================================ FILE: docs/cppapi/classtram_1_1_resource_proxy-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::ResourceProxy< T > Member List
================================================ FILE: docs/cppapi/classtram_1_1_resource_proxy.html ================================================ Tramway SDK: tram::ResourceProxy< T > Class Template Reference
Tramway SDK v0.1.1
tram::ResourceProxy< T > Class Template Reference

#include <resource.h>

Public Member Functions

 ResourceProxy (EntityComponent *parent)
 
 ~ResourceProxy ()
 
void set (Resource *new_res)
 
T * get ()
 
T * operator= (Resource *res)
 
T * operator-> ()
 
T & operator* ()
 
 operator bool ()
 

Protected Attributes

EntityComponentparent
 
Resourceresource = nullptr
 

Constructor & Destructor Documentation

◆ ResourceProxy()

template<typename T >
tram::ResourceProxy< T >::ResourceProxy ( EntityComponent parent)
inline

◆ ~ResourceProxy()

template<typename T >
tram::ResourceProxy< T >::~ResourceProxy ( )
inline

Member Function Documentation

◆ get()

template<typename T >
T * tram::ResourceProxy< T >::get ( )
inline

◆ operator bool()

template<typename T >
tram::ResourceProxy< T >::operator bool ( )
inlineexplicit

◆ operator*()

template<typename T >
T & tram::ResourceProxy< T >::operator* ( )
inline

◆ operator->()

template<typename T >
T * tram::ResourceProxy< T >::operator-> ( )
inline

◆ operator=()

template<typename T >
T * tram::ResourceProxy< T >::operator= ( Resource res)
inline

◆ set()

template<typename T >
void tram::ResourceProxy< T >::set ( Resource new_res)
inline

Member Data Documentation

◆ parent

template<typename T >
EntityComponent* tram::ResourceProxy< T >::parent
protected

◆ resource

template<typename T >
Resource* tram::ResourceProxy< T >::resource = nullptr
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/resource.h
================================================ FILE: docs/cppapi/classtram_1_1_script_1_1_interface-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Script::Interface Member List

This is the complete list of members for tram::Script::Interface, including all inherited members.

CallFunction(name_t name, std::vector< Value > parameters)=0tram::Script::Interfacepure virtual
Evaluate(const char *code)=0tram::Script::Interfacepure virtual
GetGlobal(name_t name)=0tram::Script::Interfacepure virtual
GetName()=0tram::Script::Interfacepure virtual
LoadScript(const char *path)=0tram::Script::Interfacepure virtual
SetFunction(name_t name, std::vector< Type > parameters, value_t(*function)(valuearray_t))=0tram::Script::Interfacepure virtual
SetGlobal(name_t name, value_t value)=0tram::Script::Interfacepure virtual
================================================ FILE: docs/cppapi/classtram_1_1_script_1_1_interface.html ================================================ Tramway SDK: tram::Script::Interface Class Reference
Tramway SDK v0.1.1
tram::Script::Interface Class Referenceabstract

#include <script.h>

Inheritance diagram for tram::Script::Interface:
tram::Ext::Scripting::Lua::Lua

Public Member Functions

virtual name_t GetName ()=0
 
virtual value_t GetGlobal (name_t name)=0
 
virtual void SetGlobal (name_t name, value_t value)=0
 
virtual void SetFunction (name_t name, std::vector< Type > parameters, value_t(*function)(valuearray_t))=0
 
virtual value_t CallFunction (name_t name, std::vector< Value > parameters)=0
 
virtual void LoadScript (const char *path)=0
 
virtual value_t Evaluate (const char *code)=0
 

Member Function Documentation

◆ CallFunction()

virtual value_t tram::Script::Interface::CallFunction ( name_t  name,
std::vector< Value parameters 
)
pure virtual

◆ Evaluate()

virtual value_t tram::Script::Interface::Evaluate ( const char *  code)
pure virtual

◆ GetGlobal()

virtual value_t tram::Script::Interface::GetGlobal ( name_t  name)
pure virtual

◆ GetName()

virtual name_t tram::Script::Interface::GetName ( )
pure virtual

◆ LoadScript()

virtual void tram::Script::Interface::LoadScript ( const char *  path)
pure virtual

◆ SetFunction()

virtual void tram::Script::Interface::SetFunction ( name_t  name,
std::vector< Type parameters,
value_t(*)(valuearray_t function 
)
pure virtual

◆ SetGlobal()

virtual void tram::Script::Interface::SetGlobal ( name_t  name,
value_t  value 
)
pure virtual

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/script.h
================================================ FILE: docs/cppapi/classtram_1_1_scriptable-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Scriptable< T > Member List

This is the complete list of members for tram::Scriptable< T >, including all inherited members.

EventHandler(Event &evt)tram::Scriptable< T >inline
GetType()tram::Scriptable< T >inline
Load()tram::Scriptable< T >inline
MessageHandler(Message &msg)tram::Scriptable< T >inline
SanitizeData(Value &data)tram::Scriptable< T >inline
Scriptable(const SharedEntityData &shared_data, const ValueArray &field_array, name_t type)tram::Scriptable< T >inline
Serialize()tram::Scriptable< T >inline
SetParameters()tram::Scriptable< T >inline
typetram::Scriptable< T >protected
Unload()tram::Scriptable< T >inline
UpdateParameters()tram::Scriptable< T >inline
~Scriptable()tram::Scriptable< T >inline
================================================ FILE: docs/cppapi/classtram_1_1_scriptable.html ================================================ Tramway SDK: tram::Scriptable< T > Class Template Reference
Tramway SDK v0.1.1
tram::Scriptable< T > Class Template Reference

Provides script language subclassing. More...

#include <entities/script.h>

Inheritance diagram for tram::Scriptable< T >:

Public Member Functions

 Scriptable (const SharedEntityData &shared_data, const ValueArray &field_array, name_t type)
 
 ~Scriptable ()
 
void UpdateParameters ()
 
void SetParameters ()
 
void Load ()
 
void Unload ()
 
void Serialize ()
 
void SanitizeData (Value &data)
 
void MessageHandler (Message &msg)
 
void EventHandler (Event &evt)
 
name_t GetType ()
 

Protected Attributes

name_t type
 

Detailed Description

template<typename T>
class tram::Scriptable< T >

Provides script language subclassing.

If you want to create a sublass in C++, it's easy – just #include the class header and make subclass. But if you want to do so from a scripting language, e.g. Lua, you will need an interface on the C++ side. This template provides such an interface.

See also
https://racenis.github.io/tram-sdk/documentation/entities/script.html

Constructor & Destructor Documentation

◆ Scriptable()

template<typename T >
tram::Scriptable< T >::Scriptable ( const SharedEntityData shared_data,
const ValueArray field_array,
name_t  type 
)
inline

◆ ~Scriptable()

template<typename T >
tram::Scriptable< T >::~Scriptable ( )
inline

Member Function Documentation

◆ EventHandler()

template<typename T >
void tram::Scriptable< T >::EventHandler ( Event evt)
inline

◆ GetType()

template<typename T >
name_t tram::Scriptable< T >::GetType ( )
inline

◆ Load()

template<typename T >
void tram::Scriptable< T >::Load ( )
inline

◆ MessageHandler()

template<typename T >
void tram::Scriptable< T >::MessageHandler ( Message msg)
inline

◆ SanitizeData()

template<typename T >
void tram::Scriptable< T >::SanitizeData ( Value data)
inline

◆ Serialize()

template<typename T >
void tram::Scriptable< T >::Serialize ( )
inline

◆ SetParameters()

template<typename T >
void tram::Scriptable< T >::SetParameters ( )
inline

◆ Unload()

template<typename T >
void tram::Scriptable< T >::Unload ( )
inline

◆ UpdateParameters()

template<typename T >
void tram::Scriptable< T >::UpdateParameters ( )
inline

Member Data Documentation

◆ type

template<typename T >
name_t tram::Scriptable< T >::type
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/script.h
================================================ FILE: docs/cppapi/classtram_1_1_serialized_field_array-members.html ================================================ Tramway SDK: Member List
Tramway SDK
tram::SerializedFieldArray Member List

This is the complete list of members for tram::SerializedFieldArray, including all inherited members.

operator[](size_t n) consttram::SerializedFieldArrayinline
SerializedFieldArray(const Value *first, size_t count)tram::SerializedFieldArrayinline
================================================ FILE: docs/cppapi/classtram_1_1_serialized_field_array.html ================================================ Tramway SDK: tram::SerializedFieldArray Class Reference
Tramway SDK
tram::SerializedFieldArray Class Reference

Wrapper for serialized field values. More...

#include <serialization.h>

Public Member Functions

 SerializedFieldArray (const Value *first, size_t count)
 
const Valueoperator[] (size_t n) const
 

Detailed Description

Wrapper for serialized field values.

Constructor & Destructor Documentation

◆ SerializedFieldArray()

tram::SerializedFieldArray::SerializedFieldArray ( const Value first,
size_t  count 
)
inline

Member Function Documentation

◆ operator[]()

const Value & tram::SerializedFieldArray::operator[] ( size_t  n) const
inline

The documentation for this class was generated from the following file:
================================================ FILE: docs/cppapi/classtram_1_1_signal_table-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::SignalTable Member List

This is the complete list of members for tram::SignalTable, including all inherited members.

Add(const Signal &signal)tram::SignalTable
Fire(signal_t signal, id_t sender)tram::SignalTable
Fire(signal_t signal, id_t sender, Value value)tram::SignalTable
signal_counttram::SignalTable
signalstram::SignalTable
================================================ FILE: docs/cppapi/classtram_1_1_signal_table.html ================================================ Tramway SDK: tram::SignalTable Class Reference
Tramway SDK v0.1.1
tram::SignalTable Class Reference

List of Message templates. More...

#include <framework/signal.h>

Public Member Functions

void Fire (signal_t signal, id_t sender)
 
void Fire (signal_t signal, id_t sender, Value value)
 
void Add (const Signal &signal)
 

Public Attributes

Signal signals [10]
 
size_t signal_count = 0
 

Detailed Description

List of Message templates.

Table of Message templates, i.e. Signal structs, that can be sent off by entities on certain triggers.

Member Function Documentation

◆ Add()

void tram::SignalTable::Add ( const Signal signal)

◆ Fire() [1/2]

void tram::SignalTable::Fire ( signal_t  signal,
id_t  sender 
)

◆ Fire() [2/2]

void tram::SignalTable::Fire ( signal_t  signal,
id_t  sender,
Value  value 
)

Member Data Documentation

◆ signal_count

size_t tram::SignalTable::signal_count = 0

◆ signals

Signal tram::SignalTable::signals[10]

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/signal.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/signal.cpp
================================================ FILE: docs/cppapi/classtram_1_1_sound-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Sound Member List

This is the complete list of members for tram::Sound, including all inherited members.

audiotram::Soundprotected
celltram::Entityprotected
CheckTransition()tram::Entity
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()tram::Soundvirtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Soundvirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Soundvirtual
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
Register()tram::Soundstatic
RegisterType(name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)tram::Entitystatic
rotationtram::Entityprotected
Serialize()tram::Soundvirtual
SetAutoLoad(bool is)tram::Entityinline
SetFlag(uint32_t flag, bool value)tram::Entityinlineprotected
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Soundvirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
Sound(const SharedEntityData &, const ValueArray &)tram::Sound
Sound(name_t sound, float volume, vec3 position)tram::Sound
soundtram::Soundprotected
sound_flagstram::Soundprotected
Unload()tram::Soundvirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateParameters()tram::Soundvirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
volumetram::Soundprotected
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_sound.html ================================================ Tramway SDK: tram::Sound Class Reference
Tramway SDK v0.1.1

AudioComponent wrapper. More...

#include <entities/sound.h>

Inheritance diagram for tram::Sound:
tram::Entity

Public Member Functions

 Sound (const SharedEntityData &, const ValueArray &)
 
 Sound (name_t sound, float volume, vec3 position)
 PLays a sound, then removes itself. More...
 
void UpdateParameters ()
 Called when Entity::UpdateTransform is called. More...
 
void SetParameters ()
 Called when either Entity::SetLocation or Entity::SetRotation is called. More...
 
void Load ()
 Loads an entity. More...
 
void Unload ()
 Unloads an entity. More...
 
void Serialize ()
 
void MessageHandler (Message &msg)
 Allows entities to receive messages. More...
 
name_t GetType ()
 Returns the type of the entity. More...
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 Destructs the entity. More...
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 Returns the entity's parent cell. More...
 
bool IsLoaded () const
 Returns the entity load status. More...
 
bool IsAutoLoad () const
 Returns the auto load flag status. More...
 
bool IsPersistent () const
 Returns the persistence status of an entity. More...
 
bool IsChanged () const
 
bool IsDeleted () const
 Returns the entity deletion status. More...
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 Purges the entity. More...
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 Allows entities to receive events. More...
 
void CheckTransition ()
 Check whether an entity has entered a different cell. More...
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 Updates entities. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)
 Registers a new entity type. More...
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 Creates an entity. More...
 
static EntityFind (id_t entity_id)
 Finds the entity by its ID number. More...
 
static EntityFind (name_t entity_name)
 Finds the entity by its name. More...
 

Protected Attributes

Component< AudioComponentaudio
 
name_t sound
 
float volume
 
int sound_flags
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 Registers the entity. More...
 
void Unregister ()
 Unregisters the entity. More...
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 
void SetFlag (uint32_t flag, bool value)
 

Detailed Description

AudioComponent wrapper.

Can be used for placing environmental sounds, or for playing sounds for Signal triggers, but since you're looking this up in the C++ docs, you are probably are intereseted in the Sound entity as an self-yeeting AudioComponent.

Which it can be used as.

Very successfully, might I add.

See also
https://racenis.github.io/tram-sdk/documentation/entities/sound.html

Constructor & Destructor Documentation

◆ Sound() [1/2]

tram::Sound::Sound ( const SharedEntityData ,
const ValueArray  
)

◆ Sound() [2/2]

tram::Sound::Sound ( name_t  sound,
float  volume,
vec3  position 
)

PLays a sound, then removes itself.

Member Function Documentation

◆ GetType()

name_t tram::Sound::GetType ( )
virtual

Returns the type of the entity.

Usually this method returns the same name that is used to Entity::RegisterType() its type.

Implements tram::Entity.

◆ Load()

void tram::Sound::Load ( )
virtual

Loads an entity.

Usually the Load() method for an entity type will set up its components, event listeners, etc. After being loaded, the entity will be ready for simulation.

When implementing this method, make sure to flag the entity with the LOADED flag, so that world streaming system doesn't try to load your entity twice.

Implements tram::Entity.

◆ MessageHandler()

void tram::Sound::MessageHandler ( Message msg)
virtual

Allows entities to receive messages.

Whenever an entity is sent a Message, once the Message::Dispatch() function has been called, the entity will gets the message passed to it through this method.

Implements tram::Entity.

◆ Register()

void tram::Sound::Register ( )
static

◆ Serialize()

void tram::Sound::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::Sound::SetParameters ( )
virtual

Called when either Entity::SetLocation or Entity::SetRotation is called.

Usually this method is used to relocate or rerotate an entity.

If the entity has a PhysicsComponent, its position or rotation is usually set from this method, otherwise in the next Physics update step, the entity's previous rotation and location will be restored.

Implements tram::Entity.

◆ Unload()

void tram::Sound::Unload ( )
virtual

Unloads an entity.

Usually the Load() method for an entity type will destroy its its components, event listeners, etc. After being unloaded, the entity have been removed from the simulation.

When implementing this method, make sure to clear your entity's LOADED flag, so that world streaming system can load the entity again.

Implements tram::Entity.

◆ UpdateParameters()

void tram::Sound::UpdateParameters ( )
virtual

Called when Entity::UpdateTransform is called.

From the runtime's side, only the Physics system will call the Entity::UpdateTransform() method, and through it, this method.

Usually this method is used to forward the entity's new position and rotation to its RenderComponent, if it has one.

If the entity has a PhysicsComponent, its position or rotation is never updated from this method.

Implements tram::Entity.

Member Data Documentation

◆ audio

Component<AudioComponent> tram::Sound::audio
protected

◆ sound

name_t tram::Sound::sound
protected

◆ sound_flags

int tram::Sound::sound_flags
protected

◆ volume

float tram::Sound::volume
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/sound.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/sound.cpp
================================================ FILE: docs/cppapi/classtram_1_1_spinlock-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Spinlock Member List

This is the complete list of members for tram::Spinlock, including all inherited members.

Lock()tram::Spinlockinline
Unlock()tram::Spinlockinline
================================================ FILE: docs/cppapi/classtram_1_1_spinlock.html ================================================ Tramway SDK: tram::Spinlock Class Reference
Tramway SDK v0.1.1
tram::Spinlock Class Reference

#include <spinlock.h>

Public Member Functions

void Lock ()
 
void Unlock ()
 

Member Function Documentation

◆ Lock()

void tram::Spinlock::Lock ( )
inline

◆ Unlock()

void tram::Spinlock::Unlock ( )
inline

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/spinlock.h
================================================ FILE: docs/cppapi/classtram_1_1_sprite_component-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::SpriteComponent Member List

This is the complete list of members for tram::SpriteComponent, including all inherited members.

anim_bframetram::SpriteComponentprotected
anim_frametram::SpriteComponentprotected
anim_isplayingtram::SpriteComponentprotected
anim_speedtram::SpriteComponentprotected
draw_list_entrytram::SpriteComponentprotected
EntityComponent()=defaulttram::EntityComponent
EventHandler(Event &event)tram::SpriteComponentinlinevirtual
GetParent()tram::EntityComponentinline
GetSprite()tram::SpriteComponentinline
Init()tram::EntityComponentvirtual
is_inittram::EntityComponentprotected
is_readytram::EntityComponentprotected
IsInit()tram::EntityComponentinline
IsReady()tram::EntityComponentinline
locationtram::SpriteComponentprotected
parenttram::EntityComponentprotected
Pause()tram::SpriteComponent
Play()tram::SpriteComponent
ResourceReady()tram::EntityComponentprotected
resources_waitingtram::EntityComponentprotected
SetParent(Entity *parent)tram::EntityComponentinline
SetPlaySpeed(size_t speed)tram::SpriteComponent
SetSprite(Render::Sprite *sprite)tram::SpriteComponentinline
spritetram::SpriteComponentprotected
sprite_arraytram::SpriteComponentprotected
SpriteComponent()tram::SpriteComponentinline
Start()tram::SpriteComponentvirtual
Update()tram::SpriteComponent
UpdateLocation(vec3 nlocation)tram::SpriteComponentinline
UpdateRenderListObject()tram::SpriteComponent
vertex_arraytram::SpriteComponentprotected
~EntityComponent()=defaulttram::EntityComponentvirtual
~SpriteComponent()tram::SpriteComponent
================================================ FILE: docs/cppapi/classtram_1_1_sprite_component.html ================================================ Tramway SDK: tram::SpriteComponent Class Reference
Tramway SDK v0.1.1
tram::SpriteComponent Class Reference

Provides amusing graphical effects. More...

#include <components/sprite.h>

Inheritance diagram for tram::SpriteComponent:
tram::EntityComponent

Public Member Functions

 SpriteComponent ()
 
 ~SpriteComponent ()
 
name_t GetSprite ()
 
void SetSprite (Render::Sprite *sprite)
 
void Start ()
 
void Update ()
 
void Play ()
 
void Pause ()
 
void SetPlaySpeed (size_t speed)
 
void UpdateRenderListObject ()
 
void UpdateLocation (vec3 nlocation)
 
void EventHandler (Event &event)
 
- Public Member Functions inherited from tram::EntityComponent
 EntityComponent ()=default
 
virtual ~EntityComponent ()=default
 
virtual void Init ()
 Initializes an entity component. More...
 
bool IsReady ()
 Returns the component's readiness. More...
 
bool IsInit ()
 Returns the component's init status. More...
 
EntityGetParent ()
 
void SetParent (Entity *parent)
 

Protected Attributes

ResourceProxy< Render::Spritesprite
 
vec3 location
 
size_t anim_frame = 0
 
size_t anim_speed = 0
 
size_t anim_bframe = 0
 
bool anim_isplaying = false
 
Render::drawlistentry_t draw_list_entry = {}
 
Render::vertexarray_t vertex_array = {}
 
Render::spritearray_t sprite_array = {}
 
- Protected Attributes inherited from tram::EntityComponent
size_t resources_waiting = 0
 
bool is_ready = false
 
bool is_init = false
 
Entityparent = nullptr
 

Additional Inherited Members

- Protected Member Functions inherited from tram::EntityComponent
void ResourceReady ()
 Notifies the component of a streamed-in resource. More...
 

Detailed Description

Constructor & Destructor Documentation

◆ SpriteComponent()

tram::SpriteComponent::SpriteComponent ( )
inline

◆ ~SpriteComponent()

tram::SpriteComponent::~SpriteComponent ( )

Member Function Documentation

◆ EventHandler()

void tram::SpriteComponent::EventHandler ( Event event)
inlinevirtual

Implements tram::EntityComponent.

◆ GetSprite()

name_t tram::SpriteComponent::GetSprite ( )
inline

◆ Pause()

void tram::SpriteComponent::Pause ( )

◆ Play()

void tram::SpriteComponent::Play ( )

◆ SetPlaySpeed()

void tram::SpriteComponent::SetPlaySpeed ( size_t  speed)

◆ SetSprite()

void tram::SpriteComponent::SetSprite ( Render::Sprite sprite)
inline

◆ Start()

void tram::SpriteComponent::Start ( )
virtual

Implements tram::EntityComponent.

◆ Update()

void tram::SpriteComponent::Update ( )

◆ UpdateLocation()

void tram::SpriteComponent::UpdateLocation ( vec3  nlocation)
inline

◆ UpdateRenderListObject()

void tram::SpriteComponent::UpdateRenderListObject ( )

Member Data Documentation

◆ anim_bframe

size_t tram::SpriteComponent::anim_bframe = 0
protected

◆ anim_frame

size_t tram::SpriteComponent::anim_frame = 0
protected

◆ anim_isplaying

bool tram::SpriteComponent::anim_isplaying = false
protected

◆ anim_speed

size_t tram::SpriteComponent::anim_speed = 0
protected

◆ draw_list_entry

Render::drawlistentry_t tram::SpriteComponent::draw_list_entry = {}
protected

◆ location

vec3 tram::SpriteComponent::location
protected

◆ sprite

ResourceProxy<Render::Sprite> tram::SpriteComponent::sprite
protected

◆ sprite_array

Render::spritearray_t tram::SpriteComponent::sprite_array = {}
protected

◆ vertex_array

Render::vertexarray_t tram::SpriteComponent::vertex_array = {}
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/sprite.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/sprite.cpp
================================================ FILE: docs/cppapi/classtram_1_1_stack-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Stack< T > Member List

This is the complete list of members for tram::Stack< T >, including all inherited members.

AddNew()tram::Stack< T >inline
firsttram::Stack< T >protected
firstendtram::Stack< T >protected
GetLastPtr()tram::Stack< T >inline
GetLength()tram::Stack< T >inline
lasttram::Stack< T >protected
lastendtram::Stack< T >protected
pop()tram::Stack< T >inline
push(const T &value)tram::Stack< T >inline
Remove()tram::Stack< T >inline
Reset()tram::Stack< T >inline
reset()tram::Stack< T >inline
size()tram::Stack< T >inline
Stack(std::string name, uint64_t initialSize)tram::Stack< T >inline
stackLengthtram::Stack< T >protected
stackNametram::Stack< T >protected
stackSizetram::Stack< T >protected
top()tram::Stack< T >inline
================================================ FILE: docs/cppapi/classtram_1_1_stack.html ================================================ Tramway SDK: tram::Stack< T > Class Template Reference
Tramway SDK v0.1.1
tram::Stack< T > Class Template Reference

#include <stack.h>

Public Member Functions

 Stack (std::string name, uint64_t initialSize)
 
T * AddNew ()
 
void Remove ()
 
T * GetLastPtr ()
 
uint64_t GetLength ()
 
void Reset ()
 
T & top ()
 
void push (const T &value)
 
pop ()
 
void reset ()
 
size_t size ()
 

Protected Attributes

std::string stackName
 
uint64_t stackLength
 
uint64_t stackSize
 
T * first
 
T * last
 
T * firstend
 
T * lastend
 

Constructor & Destructor Documentation

◆ Stack()

template<typename T >
tram::Stack< T >::Stack ( std::string  name,
uint64_t  initialSize 
)
inline

Member Function Documentation

◆ AddNew()

template<typename T >
T * tram::Stack< T >::AddNew ( )
inline

◆ GetLastPtr()

template<typename T >
T * tram::Stack< T >::GetLastPtr ( )
inline

◆ GetLength()

template<typename T >
uint64_t tram::Stack< T >::GetLength ( )
inline

◆ pop()

template<typename T >
T tram::Stack< T >::pop ( )
inline

◆ push()

template<typename T >
void tram::Stack< T >::push ( const T &  value)
inline

◆ Remove()

template<typename T >
void tram::Stack< T >::Remove ( )
inline

◆ Reset()

template<typename T >
void tram::Stack< T >::Reset ( )
inline

◆ reset()

template<typename T >
void tram::Stack< T >::reset ( )
inline

◆ size()

template<typename T >
size_t tram::Stack< T >::size ( )
inline

◆ top()

template<typename T >
T & tram::Stack< T >::top ( )
inline

Member Data Documentation

◆ first

template<typename T >
T* tram::Stack< T >::first
protected

◆ firstend

template<typename T >
T* tram::Stack< T >::firstend
protected

◆ last

template<typename T >
T* tram::Stack< T >::last
protected

◆ lastend

template<typename T >
T* tram::Stack< T >::lastend
protected

◆ stackLength

template<typename T >
uint64_t tram::Stack< T >::stackLength
protected

◆ stackName

template<typename T >
std::string tram::Stack< T >::stackName
protected

◆ stackSize

template<typename T >
uint64_t tram::Stack< T >::stackSize
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/stack.h
================================================ FILE: docs/cppapi/classtram_1_1_stack_pool-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::StackPool< T > Member List

This is the complete list of members for tram::StackPool< T >, including all inherited members.

AddNew(size_t units)tram::StackPool< T >inline
allocate(size_t units)tram::StackPool< T >inline
allocated_sizetram::StackPool< T >protected
available_sizetram::StackPool< T >protected
begin()tram::StackPool< T >inline
end()tram::StackPool< T >inline
firsttram::StackPool< T >protected
lasttram::StackPool< T >protected
nametram::StackPool< T >protected
Reset()tram::StackPool< T >inline
reset()tram::StackPool< T >inline
size()tram::StackPool< T >inline
StackPool(const char *name, size_t size)tram::StackPool< T >inline
StackPool(const char *name, size_t max_size, std::initializer_list< T > list)tram::StackPool< T >inline
================================================ FILE: docs/cppapi/classtram_1_1_stack_pool.html ================================================ Tramway SDK: tram::StackPool< T > Class Template Reference
Tramway SDK v0.1.1
tram::StackPool< T > Class Template Reference

Allocator. More...

#include <stackpool.h>

Public Member Functions

constexpr StackPool (const char *name, size_t size)
 
constexpr StackPool (const char *name, size_t max_size, std::initializer_list< T > list)
 
T * AddNew (size_t units)
 
T * allocate (size_t units)
 
void Reset ()
 
void reset ()
 
size_t size ()
 
T * begin ()
 
T * end ()
 

Protected Attributes

std::string name
 
size_t allocated_size
 
size_t available_size
 
T * first
 
T * last
 

Detailed Description

template<typename T>
class tram::StackPool< T >

Allocator.

Very simple allocator for data types that don't need their destructors called. Just call allocate() and specify the size of the array that you want to allocated. Use the pointer to write and store data. After you are done, you can reset all of the allocated memory with reset().

Constructor & Destructor Documentation

◆ StackPool() [1/2]

template<typename T >
constexpr tram::StackPool< T >::StackPool ( const char *  name,
size_t  size 
)
inlineconstexpr

◆ StackPool() [2/2]

template<typename T >
constexpr tram::StackPool< T >::StackPool ( const char *  name,
size_t  max_size,
std::initializer_list< T >  list 
)
inlineconstexpr

Member Function Documentation

◆ AddNew()

template<typename T >
T * tram::StackPool< T >::AddNew ( size_t  units)
inline

◆ allocate()

template<typename T >
T * tram::StackPool< T >::allocate ( size_t  units)
inline

◆ begin()

template<typename T >
T * tram::StackPool< T >::begin ( )
inline

◆ end()

template<typename T >
T * tram::StackPool< T >::end ( )
inline

◆ Reset()

template<typename T >
void tram::StackPool< T >::Reset ( )
inline

◆ reset()

template<typename T >
void tram::StackPool< T >::reset ( )
inline

◆ size()

template<typename T >
size_t tram::StackPool< T >::size ( )
inline

Member Data Documentation

◆ allocated_size

template<typename T >
size_t tram::StackPool< T >::allocated_size
protected

◆ available_size

template<typename T >
size_t tram::StackPool< T >::available_size
protected

◆ first

template<typename T >
T* tram::StackPool< T >::first
protected

◆ last

template<typename T >
T* tram::StackPool< T >::last
protected

◆ name

template<typename T >
std::string tram::StackPool< T >::name
protected

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/stackpool.h
================================================ FILE: docs/cppapi/classtram_1_1_static_world_object-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::StaticWorldObject Member List

This is the complete list of members for tram::StaticWorldObject, including all inherited members.

celltram::Entityprotected
CheckTransition()tram::Entity
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()tram::StaticWorldObjectvirtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
lightmaptram::StaticWorldObjectprotected
Load()tram::StaticWorldObjectvirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::StaticWorldObjectvirtual
modeltram::StaticWorldObjectprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
physicscomponenttram::StaticWorldObjectprotected
Register()tram::StaticWorldObjectstatic
RegisterType(name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::StaticWorldObjectprotected
rotationtram::Entityprotected
Serialize()tram::StaticWorldObjectvirtual
SetAutoLoad(bool is)tram::Entityinline
SetFlag(uint32_t flag, bool value)tram::Entityinlineprotected
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::StaticWorldObjectvirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
signalstram::Entityprotected
StaticWorldObject(const SharedEntityData &, const ValueArray &)tram::StaticWorldObject
Unload()tram::StaticWorldObjectvirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateParameters()tram::StaticWorldObjectvirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_static_world_object.html ================================================ Tramway SDK: tram::StaticWorldObject Class Reference
Tramway SDK v0.1.1

Worldspawn. More...

#include <entities/staticworldobject.h>

Inheritance diagram for tram::StaticWorldObject:
tram::Entity

Public Member Functions

 StaticWorldObject (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 Called when Entity::UpdateTransform is called. More...
 
void SetParameters ()
 Called when either Entity::SetLocation or Entity::SetRotation is called. More...
 
void Load ()
 Loads an entity. More...
 
void Unload ()
 Unloads an entity. More...
 
void Serialize ()
 
void MessageHandler (Message &msg)
 Allows entities to receive messages. More...
 
name_t GetType ()
 Returns the type of the entity. More...
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 Destructs the entity. More...
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 Returns the entity's parent cell. More...
 
bool IsLoaded () const
 Returns the entity load status. More...
 
bool IsAutoLoad () const
 Returns the auto load flag status. More...
 
bool IsPersistent () const
 Returns the persistence status of an entity. More...
 
bool IsChanged () const
 
bool IsDeleted () const
 Returns the entity deletion status. More...
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 Purges the entity. More...
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 Allows entities to receive events. More...
 
void CheckTransition ()
 Check whether an entity has entered a different cell. More...
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 Updates entities. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)
 Registers a new entity type. More...
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 Creates an entity. More...
 
static EntityFind (id_t entity_id)
 Finds the entity by its ID number. More...
 
static EntityFind (name_t entity_name)
 Finds the entity by its name. More...
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< PhysicsComponentphysicscomponent
 
name_t model
 
name_t lightmap
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 Registers the entity. More...
 
void Unregister ()
 Unregisters the entity. More...
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 
void SetFlag (uint32_t flag, bool value)
 

Detailed Description

Constructor & Destructor Documentation

◆ StaticWorldObject()

tram::StaticWorldObject::StaticWorldObject ( const SharedEntityData shared_data,
const ValueArray field_array 
)

Member Function Documentation

◆ GetType()

name_t tram::StaticWorldObject::GetType ( )
virtual

Returns the type of the entity.

Usually this method returns the same name that is used to Entity::RegisterType() its type.

Implements tram::Entity.

◆ Load()

void tram::StaticWorldObject::Load ( )
virtual

Loads an entity.

Usually the Load() method for an entity type will set up its components, event listeners, etc. After being loaded, the entity will be ready for simulation.

When implementing this method, make sure to flag the entity with the LOADED flag, so that world streaming system doesn't try to load your entity twice.

Implements tram::Entity.

◆ MessageHandler()

void tram::StaticWorldObject::MessageHandler ( Message msg)
virtual

Allows entities to receive messages.

Whenever an entity is sent a Message, once the Message::Dispatch() function has been called, the entity will gets the message passed to it through this method.

Implements tram::Entity.

◆ Register()

void tram::StaticWorldObject::Register ( )
static

◆ Serialize()

void tram::StaticWorldObject::Serialize ( )
virtual

Implements tram::Entity.

◆ SetParameters()

void tram::StaticWorldObject::SetParameters ( )
virtual

Called when either Entity::SetLocation or Entity::SetRotation is called.

Usually this method is used to relocate or rerotate an entity.

If the entity has a PhysicsComponent, its position or rotation is usually set from this method, otherwise in the next Physics update step, the entity's previous rotation and location will be restored.

Implements tram::Entity.

◆ Unload()

void tram::StaticWorldObject::Unload ( )
virtual

Unloads an entity.

Usually the Load() method for an entity type will destroy its its components, event listeners, etc. After being unloaded, the entity have been removed from the simulation.

When implementing this method, make sure to clear your entity's LOADED flag, so that world streaming system can load the entity again.

Implements tram::Entity.

◆ UpdateParameters()

void tram::StaticWorldObject::UpdateParameters ( )
virtual

Called when Entity::UpdateTransform is called.

From the runtime's side, only the Physics system will call the Entity::UpdateTransform() method, and through it, this method.

Usually this method is used to forward the entity's new position and rotation to its RenderComponent, if it has one.

If the entity has a PhysicsComponent, its position or rotation is never updated from this method.

Implements tram::Entity.

Member Data Documentation

◆ lightmap

name_t tram::StaticWorldObject::lightmap
protected

◆ model

name_t tram::StaticWorldObject::model
protected

◆ physicscomponent

Component<PhysicsComponent> tram::StaticWorldObject::physicscomponent
protected

◆ rendercomponent

Component<RenderComponent> tram::StaticWorldObject::rendercomponent
protected

The documentation for this class was generated from the following files:
================================================ FILE: docs/cppapi/classtram_1_1_template_component-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::TemplateComponent Member List
================================================ FILE: docs/cppapi/classtram_1_1_template_component.html ================================================ Tramway SDK: tram::TemplateComponent Class Reference
Tramway SDK v0.1.1
tram::TemplateComponent Class Reference

#include <template.h>

Inheritance diagram for tram::TemplateComponent:
tram::EntityComponent

Public Member Functions

 TemplateComponent ()
 
 ~TemplateComponent ()
 
void Init ()
 Initializes an entity component. More...
 
void Start ()
 
void EventHandler (Event &event)
 
- Public Member Functions inherited from tram::EntityComponent
 EntityComponent ()=default
 
virtual ~EntityComponent ()=default
 
bool IsReady ()
 Returns the component's readiness. More...
 
bool IsInit ()
 Returns the component's init status. More...
 
EntityGetParent ()
 
void SetParent (Entity *parent)
 

Additional Inherited Members

- Protected Member Functions inherited from tram::EntityComponent
void ResourceReady ()
 Notifies the component of a streamed-in resource. More...
 
- Protected Attributes inherited from tram::EntityComponent
size_t resources_waiting = 0
 
bool is_ready = false
 
bool is_init = false
 
Entityparent = nullptr
 

Constructor & Destructor Documentation

◆ TemplateComponent()

tram::TemplateComponent::TemplateComponent ( )

◆ ~TemplateComponent()

tram::TemplateComponent::~TemplateComponent ( )

Member Function Documentation

◆ EventHandler()

void tram::TemplateComponent::EventHandler ( Event event)
virtual

Implements tram::EntityComponent.

◆ Init()

void tram::TemplateComponent::Init ( )
virtual

Initializes an entity component.

If an entity component has all of its resources already loaded, this will immediately Start() the component.

Reimplemented from tram::EntityComponent.

◆ Start()

void tram::TemplateComponent::Start ( )
virtual

Implements tram::EntityComponent.


The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/template.h
================================================ FILE: docs/cppapi/classtram_1_1_text_reader_parser-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::TextReaderParser Member List
================================================ FILE: docs/cppapi/classtram_1_1_text_reader_parser.html ================================================ Tramway SDK: tram::TextReaderParser Class Reference
Tramway SDK v0.1.1
tram::TextReaderParser Class Reference
Inheritance diagram for tram::TextReaderParser:
tram::FileReaderParser

Public Member Functions

 TextReaderParser (FileReader *reader)
 
int8_t read_int8 ()
 
int16_t read_int16 ()
 
int32_t read_int32 ()
 
int64_t read_int64 ()
 
uint8_t read_uint8 ()
 
uint16_t read_uint16 ()
 
uint32_t read_uint32 ()
 
uint64_t read_uint64 ()
 
float read_float32 ()
 
double read_float64 ()
 
name_t read_name ()
 
std::string_view read_token ()
 
std::string_view read_string ()
 
std::string_view read_line ()
 
void skip_newline ()
 
void skip_whitespace ()
 
bool is_continue ()
 
bool is_error ()
 
void reset_error ()
 
- Public Member Functions inherited from tram::FileReaderParser
void set_skip_value (bool skip_value)
 
void set_skip_newline (bool skip_newline)
 

Additional Inherited Members

- Protected Attributes inherited from tram::FileReaderParser
bool skip_newline_flag = true
 
bool skip_value = true
 

Constructor & Destructor Documentation

◆ TextReaderParser()

tram::TextReaderParser::TextReaderParser ( FileReader reader)
inline

Member Function Documentation

◆ is_continue()

bool tram::TextReaderParser::is_continue ( )
inlinevirtual

◆ is_error()

bool tram::TextReaderParser::is_error ( )
inlinevirtual

◆ read_float32()

float tram::TextReaderParser::read_float32 ( )
inlinevirtual

◆ read_float64()

double tram::TextReaderParser::read_float64 ( )
inlinevirtual

◆ read_int16()

int16_t tram::TextReaderParser::read_int16 ( )
inlinevirtual

◆ read_int32()

int32_t tram::TextReaderParser::read_int32 ( )
inlinevirtual

◆ read_int64()

int64_t tram::TextReaderParser::read_int64 ( )
inlinevirtual

◆ read_int8()

int8_t tram::TextReaderParser::read_int8 ( )
inlinevirtual

◆ read_line()

std::string_view tram::TextReaderParser::read_line ( )
inlinevirtual

◆ read_name()

name_t tram::TextReaderParser::read_name ( )
inlinevirtual

◆ read_string()

std::string_view tram::TextReaderParser::read_string ( )
inlinevirtual

◆ read_token()

std::string_view tram::TextReaderParser::read_token ( )
inlinevirtual

◆ read_uint16()

uint16_t tram::TextReaderParser::read_uint16 ( )
inlinevirtual

◆ read_uint32()

uint32_t tram::TextReaderParser::read_uint32 ( )
inlinevirtual

◆ read_uint64()

uint64_t tram::TextReaderParser::read_uint64 ( )
inlinevirtual

◆ read_uint8()

uint8_t tram::TextReaderParser::read_uint8 ( )
inlinevirtual

◆ reset_error()

void tram::TextReaderParser::reset_error ( )
inlinevirtual

◆ skip_newline()

void tram::TextReaderParser::skip_newline ( )
inlinevirtual

◆ skip_whitespace()

void tram::TextReaderParser::skip_whitespace ( )
inlinevirtual

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/file.cpp
================================================ FILE: docs/cppapi/classtram_1_1_text_writer_parser-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::TextWriterParser Member List

This is the complete list of members for tram::TextWriterParser, including all inherited members.

TextWriterParser(FileWriter *writer)tram::TextWriterParserinline
write_float32(float value)tram::TextWriterParserinlinevirtual
write_float64(double value)tram::TextWriterParserinlinevirtual
write_int16(int16_t value)tram::TextWriterParserinlinevirtual
write_int32(int32_t value)tram::TextWriterParserinlinevirtual
write_int64(int64_t value)tram::TextWriterParserinlinevirtual
write_int8(int8_t value)tram::TextWriterParserinlinevirtual
write_name(name_t value)tram::TextWriterParserinlinevirtual
write_newline()tram::TextWriterParserinlinevirtual
write_string(const char *value)tram::TextWriterParserinlinevirtual
write_uint16(uint16_t value)tram::TextWriterParserinlinevirtual
write_uint32(uint32_t value)tram::TextWriterParserinlinevirtual
write_uint64(uint64_t value)tram::TextWriterParserinlinevirtual
write_uint8(uint8_t value)tram::TextWriterParserinlinevirtual
================================================ FILE: docs/cppapi/classtram_1_1_text_writer_parser.html ================================================ Tramway SDK: tram::TextWriterParser Class Reference
Tramway SDK v0.1.1
tram::TextWriterParser Class Reference
Inheritance diagram for tram::TextWriterParser:
tram::FileWriterParser

Public Member Functions

 TextWriterParser (FileWriter *writer)
 
virtual void write_int8 (int8_t value)
 
virtual void write_int16 (int16_t value)
 
virtual void write_int32 (int32_t value)
 
virtual void write_int64 (int64_t value)
 
virtual void write_uint8 (uint8_t value)
 
virtual void write_uint16 (uint16_t value)
 
virtual void write_uint32 (uint32_t value)
 
virtual void write_uint64 (uint64_t value)
 
virtual void write_float32 (float value)
 
virtual void write_float64 (double value)
 
virtual void write_name (name_t value)
 
virtual void write_string (const char *value)
 
virtual void write_newline ()
 

Constructor & Destructor Documentation

◆ TextWriterParser()

tram::TextWriterParser::TextWriterParser ( FileWriter writer)
inline

Member Function Documentation

◆ write_float32()

virtual void tram::TextWriterParser::write_float32 ( float  value)
inlinevirtual

◆ write_float64()

virtual void tram::TextWriterParser::write_float64 ( double  value)
inlinevirtual

◆ write_int16()

virtual void tram::TextWriterParser::write_int16 ( int16_t  value)
inlinevirtual

◆ write_int32()

virtual void tram::TextWriterParser::write_int32 ( int32_t  value)
inlinevirtual

◆ write_int64()

virtual void tram::TextWriterParser::write_int64 ( int64_t  value)
inlinevirtual

◆ write_int8()

virtual void tram::TextWriterParser::write_int8 ( int8_t  value)
inlinevirtual

◆ write_name()

virtual void tram::TextWriterParser::write_name ( name_t  value)
inlinevirtual

◆ write_newline()

virtual void tram::TextWriterParser::write_newline ( )
inlinevirtual

◆ write_string()

virtual void tram::TextWriterParser::write_string ( const char *  value)
inlinevirtual

◆ write_uint16()

virtual void tram::TextWriterParser::write_uint16 ( uint16_t  value)
inlinevirtual

◆ write_uint32()

virtual void tram::TextWriterParser::write_uint32 ( uint32_t  value)
inlinevirtual

◆ write_uint64()

virtual void tram::TextWriterParser::write_uint64 ( uint64_t  value)
inlinevirtual

◆ write_uint8()

virtual void tram::TextWriterParser::write_uint8 ( uint8_t  value)
inlinevirtual

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/file.cpp
================================================ FILE: docs/cppapi/classtram_1_1_transition-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Transition Member List

This is the complete list of members for tram::Transition, including all inherited members.

AddPoint(vec3 point)tram::Transition
cell_intotram::Transitionprotected
Find(name_t name)tram::Transitionstatic
GeneratePlanes(bool disp=false)tram::Transition
GetCell()tram::Transitioninline
IsInside(vec3 point)tram::Transition
Make(name_t name, WorldCell *cell_into)tram::Transitionstatic
nametram::Transitionprotected
planestram::Transitionprotected
pointstram::Transitionprotected
Transition(name_t name, WorldCell *cell_into)tram::Transition
WorldCelltram::Transitionfriend
~Transition()=deletetram::Transition
================================================ FILE: docs/cppapi/classtram_1_1_transition.html ================================================ Tramway SDK: tram::Transition Class Reference
Tramway SDK v0.1.1

Connects WorldCells together. More...

#include <framework/transition.h>

Public Member Functions

 Transition (name_t name, WorldCell *cell_into)
 
 ~Transition ()=delete
 
void AddPoint (vec3 point)
 Adds a point to the transition volume. More...
 
void GeneratePlanes (bool disp=false)
 Finalizes the transition after adding points to it. More...
 
bool IsInside (vec3 point)
 Checks whether a point is inside the transition volume. More...
 
WorldCellGetCell ()
 

Static Public Member Functions

static TransitionFind (name_t name)
 Finds a transition with the given name. More...
 
static TransitionMake (name_t name, WorldCell *cell_into)
 Creates a new transition. More...
 

Protected Attributes

name_t name
 
WorldCellcell_into
 
std::vector< vec3points
 
std::vector< vec4planes
 

Friends

class WorldCell
 

Detailed Description

Constructor & Destructor Documentation

◆ Transition()

tram::Transition::Transition ( name_t  name,
WorldCell cell_into 
)

◆ ~Transition()

tram::Transition::~Transition ( )
delete

Member Function Documentation

◆ AddPoint()

void tram::Transition::AddPoint ( vec3  point)

Adds a point to the transition volume.

Note
After adding points make sure to call Transition::GeneratePlanes().

◆ Find()

Transition * tram::Transition::Find ( name_t  name)
static

Finds a transition with the given name.

Pointer to the transition or a nullptr if wasn't found.

◆ GeneratePlanes()

void tram::Transition::GeneratePlanes ( bool  disp = false)

Finalizes the transition after adding points to it.

Parameters
dispDraws the transition planes for a single frame if set to true.

◆ GetCell()

WorldCell * tram::Transition::GetCell ( )
inline

◆ IsInside()

bool tram::Transition::IsInside ( vec3  point)

Checks whether a point is inside the transition volume.

◆ Make()

Transition * tram::Transition::Make ( name_t  name,
WorldCell cell_into 
)
static

Creates a new transition.

Parameters
nameName of the transition. Can be set to "none" if the transition doesn't need a name.
cell_intoPointer to the WorldCell into which the transition will be leading into.

Friends And Related Function Documentation

◆ WorldCell

friend class WorldCell
friend

Member Data Documentation

◆ cell_into

WorldCell* tram::Transition::cell_into
protected

◆ name

name_t tram::Transition::name
protected

◆ planes

std::vector<vec4> tram::Transition::planes
protected

◆ points

std::vector<vec3> tram::Transition::points
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/transition.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/transition.cpp
================================================ FILE: docs/cppapi/classtram_1_1_trigger-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Trigger Member List

This is the complete list of members for tram::Trigger, including all inherited members.

Activate()tram::Trigger
celltram::Entityprotected
CheckTransition()tram::Entity
collision_masktram::Triggerprotected
DELETED enum valuetram::Entityprotected
DIRTY enum valuetram::Entityprotected
DISABLE_AUTO_LOAD enum valuetram::Entityprotected
Entity()tram::Entity
Entity(name_t name)tram::Entity
Entity(const SharedEntityData &)tram::Entity
EventHandler(Event &event)tram::Entityinlinevirtual
FIELD_SERIALIZE enum valuetram::Entity
Find(id_t entity_id)tram::Entitystatic
Find(name_t entity_name)tram::Entitystatic
FireSignal(signal_t type)tram::Entityinlineprotected
FireSignal(signal_t type, Value value)tram::Entityinlineprotected
flagstram::Entityprotected
GetCell()tram::Entityinline
GetID() consttram::Entityinline
GetLocation()tram::Entityinline
GetName() consttram::Entityinline
GetRotation()tram::Entityinline
GetSignalTable()tram::Entityinline
GetType()tram::Triggervirtual
idtram::Entityprotected
IsAutoLoad() consttram::Entityinline
IsChanged() consttram::Entityinline
IsDeleted() consttram::Entityinline
IsDrawTrigger()tram::Triggerstatic
IsLoaded() consttram::Entityinline
IsLoadedFromDisk() consttram::Entityinline
IsPersistent() consttram::Entityinline
Load()tram::Triggervirtual
LOADED enum valuetram::Entityprotected
LOADED_FROM_DISK enum valuetram::Entityprotected
locationtram::Entityprotected
Make(name_t type, File *file)tram::Entitystatic
Make(name_t type, const SharedEntityData &, const ValueArray &)tram::Entitystatic
MessageHandler(Message &msg)tram::Triggervirtual
modeltram::Triggerprotected
nametram::Entityprotected
NON_PERSISTENT enum valuetram::Entityprotected
NON_SERIALIZABLE enum valuetram::Entityprotected
Register()tram::Triggerstatic
RegisterType(name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)tram::Entitystatic
RegisterType(name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)tram::Entitystatic
rendercomponenttram::Triggerprotected
rotationtram::Entityprotected
Serialize()tram::Triggervirtual
SetAutoLoad(bool is)tram::Entityinline
SetDrawTrigger(bool)tram::Triggerstatic
SetFlag(uint32_t flag, bool value)tram::Entityinlineprotected
SetLocation(vec3 loc)tram::Entityinline
SetParameters()tram::Triggervirtual
SetPersistent(bool is)tram::Entityinline
SetRotation(quat rot)tram::Entityinline
SetupModel()tram::Triggerprotected
signalstram::Entityprotected
Trigger(const SharedEntityData &, const ValueArray &)tram::Trigger
trigger_flagstram::Triggerprotected
triggercomponenttram::Triggerprotected
Unload()tram::Triggervirtual
Unregister()tram::Entityprotected
Update()tram::Entitystatic
UpdateParameters()tram::Triggervirtual
UpdateTransform(const vec3 &loc, const quat &rot)tram::Entityinline
Yeet()tram::Entity
~Entity()tram::Entityvirtual
================================================ FILE: docs/cppapi/classtram_1_1_trigger.html ================================================ Tramway SDK: tram::Trigger Class Reference
Tramway SDK v0.1.1

TriggerComponent wrapper. More...

#include <entities/trigger.h>

Inheritance diagram for tram::Trigger:
tram::Entity

Public Member Functions

 Trigger (const SharedEntityData &, const ValueArray &)
 
void UpdateParameters ()
 Called when Entity::UpdateTransform is called. More...
 
void SetParameters ()
 Called when either Entity::SetLocation or Entity::SetRotation is called. More...
 
void Load ()
 Loads an entity. More...
 
void Unload ()
 Unloads an entity. More...
 
void Serialize ()
 
void MessageHandler (Message &msg)
 Allows entities to receive messages. More...
 
void Activate ()
 
name_t GetType ()
 Returns the type of the entity. More...
 
- Public Member Functions inherited from tram::Entity
 Entity ()
 Creates an unnamed entity with a random ID. More...
 
 Entity (name_t name)
 Creates a named entity with a random ID. More...
 
 Entity (const SharedEntityData &)
 Creates an entity from a SharedEntityData. More...
 
virtual ~Entity ()
 Destructs the entity. More...
 
name_t GetName () const
 
id_t GetID () const
 
WorldCellGetCell ()
 Returns the entity's parent cell. More...
 
bool IsLoaded () const
 Returns the entity load status. More...
 
bool IsAutoLoad () const
 Returns the auto load flag status. More...
 
bool IsPersistent () const
 Returns the persistence status of an entity. More...
 
bool IsChanged () const
 
bool IsDeleted () const
 Returns the entity deletion status. More...
 
bool IsLoadedFromDisk () const
 
void Yeet ()
 Purges the entity. More...
 
void SetAutoLoad (bool is)
 
void SetPersistent (bool is)
 
void SetLocation (vec3 loc)
 
void SetRotation (quat rot)
 
void UpdateTransform (const vec3 &loc, const quat &rot)
 
const vec3GetLocation ()
 
const quatGetRotation ()
 
virtual void EventHandler (Event &event)
 Allows entities to receive events. More...
 
void CheckTransition ()
 Check whether an entity has entered a different cell. More...
 
SignalTableGetSignalTable ()
 

Static Public Member Functions

static bool IsDrawTrigger ()
 
static void SetDrawTrigger (bool)
 
static void Register ()
 
- Static Public Member Functions inherited from tram::Entity
static void Update ()
 Updates entities. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)
 Registers a new entity type. More...
 
static void RegisterType (name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)
 Registers a new entity type. More...
 
static EntityMake (name_t type, File *file)
 Loads an Entity from a File. More...
 
static EntityMake (name_t type, const SharedEntityData &, const ValueArray &)
 Creates an entity. More...
 
static EntityFind (id_t entity_id)
 Finds the entity by its ID number. More...
 
static EntityFind (name_t entity_name)
 Finds the entity by its name. More...
 

Protected Member Functions

void SetupModel ()
 
- Protected Member Functions inherited from tram::Entity
void Register ()
 Registers the entity. More...
 
void Unregister ()
 Unregisters the entity. More...
 
void FireSignal (signal_t type)
 
void FireSignal (signal_t type, Value value)
 
void SetFlag (uint32_t flag, bool value)
 

Protected Attributes

Component< RenderComponentrendercomponent
 
Component< TriggerComponenttriggercomponent
 
name_t model
 
uint32_t trigger_flags
 
uint32_t collision_mask
 
- Protected Attributes inherited from tram::Entity
id_t id = 0
 
name_t name
 
WorldCellcell = nullptr
 
SignalTablesignals = nullptr
 
quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
 
vec3 location = {0.0f, 0.0f, 0.0f}
 
uint32_t flags = 0
 

Additional Inherited Members

- Public Types inherited from tram::Entity
enum  : uint32_t { FIELD_SERIALIZE = 1 }
 
- Protected Types inherited from tram::Entity
enum  : uint32_t {
  NON_PERSISTENT = 1 , LOADED = 2 , DISABLE_AUTO_LOAD = 4 , NON_SERIALIZABLE = 8 ,
  DIRTY = 16 , DELETED = 32 , LOADED_FROM_DISK = 64
}
 

Detailed Description

Constructor & Destructor Documentation

◆ Trigger()

tram::Trigger::Trigger ( const SharedEntityData shared_data,
const ValueArray field_array 
)

Member Function Documentation

◆ Activate()

void tram::Trigger::Activate ( )

◆ GetType()

name_t tram::Trigger::GetType ( )
virtual

Returns the type of the entity.

Usually this method returns the same name that is used to Entity::RegisterType() its type.

Implements tram::Entity.

◆ IsDrawTrigger()

static bool tram::Trigger::IsDrawTrigger ( )
static

◆ Load()

void tram::Trigger::Load ( )
virtual

Loads an entity.

Usually the Load() method for an entity type will set up its components, event listeners, etc. After being loaded, the entity will be ready for simulation.

When implementing this method, make sure to flag the entity with the LOADED flag, so that world streaming system doesn't try to load your entity twice.

Implements tram::Entity.

◆ MessageHandler()

void tram::Trigger::MessageHandler ( Message msg)
virtual

Allows entities to receive messages.

Whenever an entity is sent a Message, once the Message::Dispatch() function has been called, the entity will gets the message passed to it through this method.

Implements tram::Entity.

◆ Register()

void tram::Trigger::Register ( )
static

◆ Serialize()

void tram::Trigger::Serialize ( )
virtual

Implements tram::Entity.

◆ SetDrawTrigger()

void tram::Trigger::SetDrawTrigger ( bool  draw)
static

◆ SetParameters()

void tram::Trigger::SetParameters ( )
virtual

Called when either Entity::SetLocation or Entity::SetRotation is called.

Usually this method is used to relocate or rerotate an entity.

If the entity has a PhysicsComponent, its position or rotation is usually set from this method, otherwise in the next Physics update step, the entity's previous rotation and location will be restored.

Implements tram::Entity.

◆ SetupModel()

void tram::Trigger::SetupModel ( )
protected

◆ Unload()

void tram::Trigger::Unload ( )
virtual

Unloads an entity.

Usually the Load() method for an entity type will destroy its its components, event listeners, etc. After being unloaded, the entity have been removed from the simulation.

When implementing this method, make sure to clear your entity's LOADED flag, so that world streaming system can load the entity again.

Implements tram::Entity.

◆ UpdateParameters()

void tram::Trigger::UpdateParameters ( )
virtual

Called when Entity::UpdateTransform is called.

From the runtime's side, only the Physics system will call the Entity::UpdateTransform() method, and through it, this method.

Usually this method is used to forward the entity's new position and rotation to its RenderComponent, if it has one.

If the entity has a PhysicsComponent, its position or rotation is never updated from this method.

Implements tram::Entity.

Member Data Documentation

◆ collision_mask

uint32_t tram::Trigger::collision_mask
protected

◆ model

name_t tram::Trigger::model
protected

◆ rendercomponent

Component<RenderComponent> tram::Trigger::rendercomponent
protected

◆ trigger_flags

uint32_t tram::Trigger::trigger_flags
protected

◆ triggercomponent

Component<TriggerComponent> tram::Trigger::triggercomponent
protected

The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/trigger.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/trigger.cpp
================================================ FILE: docs/cppapi/classtram_1_1_trigger_component-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::TriggerComponent Member List

This is the complete list of members for tram::TriggerComponent, including all inherited members.

Collision(const Physics::Collision &collision)tram::TriggerComponent
EntityComponent()=defaulttram::EntityComponent
EventHandler(Event &event)tram::TriggerComponentinlinevirtual
GetCollisionGroup()tram::TriggerComponentinline
GetCollisionMask()tram::TriggerComponentinline
GetModel()tram::TriggerComponentinline
GetParent()tram::EntityComponentinline
GetStoredCollisions()tram::TriggerComponentinline
Init()tram::EntityComponentvirtual
is_inittram::EntityComponentprotected
is_readytram::EntityComponentprotected
IsInit()tram::EntityComponentinline
IsReady()tram::EntityComponentinline
parenttram::EntityComponentprotected
Poll()tram::TriggerComponent
ResetCollisions()tram::TriggerComponent
ResourceReady()tram::EntityComponentprotected
resources_waitingtram::EntityComponentprotected
SetActivationCallback(collision_callback activation)tram::TriggerComponentinline
SetCollisionGroup(uint32_t flags)tram::TriggerComponent
SetCollisionMask(uint32_t flags)tram::TriggerComponent
SetDectivationCallback(collision_callback deactivation)tram::TriggerComponentinline
SetFilterCallback(filter_callback filter)tram::TriggerComponentinline
SetLocation(vec3 location)tram::TriggerComponent
SetModel(name_t model)tram::TriggerComponentinline
SetModel(Physics::CollisionModel *model)tram::TriggerComponentinline
SetParent(Entity *parent)tram::EntityComponentinline
SetRotation(quat rotation)tram::TriggerComponent
SetShape(Physics::CollisionShape shape)tram::TriggerComponent
SetStoreCollisions(bool store_collisions)tram::TriggerComponentinline
Start()tram::TriggerComponentvirtual
TriggerComponent()tram::TriggerComponentinline
~EntityComponent()=defaulttram::EntityComponentvirtual
~TriggerComponent()tram::TriggerComponent
================================================ FILE: docs/cppapi/classtram_1_1_trigger_component.html ================================================ Tramway SDK: tram::TriggerComponent Class Reference
Tramway SDK v0.1.1
tram::TriggerComponent Class Reference

Trigger wrapper. More...

#include <components/trigger.h>

Inheritance diagram for tram::TriggerComponent:
tram::EntityComponent

Public Member Functions

 TriggerComponent ()
 
 ~TriggerComponent ()
 
void EventHandler (Event &event)
 
void Start ()
 
Physics::CollisionModelGetModel ()
 
void SetModel (name_t model)
 
void SetModel (Physics::CollisionModel *model)
 
void SetShape (Physics::CollisionShape shape)
 Sets a collision shape for the trigger. More...
 
void SetActivationCallback (collision_callback activation)
 
void SetDectivationCallback (collision_callback deactivation)
 
void SetFilterCallback (filter_callback filter)
 
void SetCollisionMask (uint32_t flags)
 Sets a collision mask for the trigger. More...
 
void SetCollisionGroup (uint32_t flags)
 Sets a collision group for the trigger. More...
 
void SetStoreCollisions (bool store_collisions)
 
uint32_t GetCollisionMask ()
 
uint32_t GetCollisionGroup ()
 
void SetLocation (vec3 location)
 Sets the location of the component. More...
 
void SetRotation (quat rotation)
 Sets the rotation of the component. More...
 
const std::vector< Physics::Collision > & GetStoredCollisions ()
 
void Collision (const Physics::Collision &collision)
 Registers a collision. More...
 
void ResetCollisions ()
 Resets registered collisions. More...
 
std::vector< Physics::CollisionPoll ()
 Checks for collisions with the trigger. More...
 
- Public Member Functions inherited from tram::EntityComponent
 EntityComponent ()=default
 
virtual ~EntityComponent ()=default
 
virtual void Init ()
 Initializes an entity component. More...
 
bool IsReady ()
 Returns the component's readiness. More...
 
bool IsInit ()
 Returns the component's init status. More...
 
EntityGetParent ()
 
void SetParent (Entity *parent)
 

Additional Inherited Members

- Protected Member Functions inherited from tram::EntityComponent
void ResourceReady ()
 Notifies the component of a streamed-in resource. More...
 
- Protected Attributes inherited from tram::EntityComponent
size_t resources_waiting = 0
 
bool is_ready = false
 
bool is_init = false
 
Entityparent = nullptr
 

Detailed Description

Constructor & Destructor Documentation

◆ TriggerComponent()

tram::TriggerComponent::TriggerComponent ( )
inline

◆ ~TriggerComponent()

tram::TriggerComponent::~TriggerComponent ( )

Member Function Documentation

◆ Collision()

void tram::TriggerComponent::Collision ( const Physics::Collision collision)

Registers a collision.

This method is called from Phyics::Update().

◆ EventHandler()

void tram::TriggerComponent::EventHandler ( Event event)
inlinevirtual

Implements tram::EntityComponent.

◆ GetCollisionGroup()

uint32_t tram::TriggerComponent::GetCollisionGroup ( )
inline

◆ GetCollisionMask()

uint32_t tram::TriggerComponent::GetCollisionMask ( )
inline

◆ GetModel()

Physics::CollisionModel * tram::TriggerComponent::GetModel ( )
inline

◆ GetStoredCollisions()

const std::vector< Physics::Collision > & tram::TriggerComponent::GetStoredCollisions ( )
inline

◆ Poll()

std::vector< Physics::Collision > tram::TriggerComponent::Poll ( )

Checks for collisions with the trigger.

◆ ResetCollisions()

void tram::TriggerComponent::ResetCollisions ( )

Resets registered collisions.

This method is called from Phyics::Update().

◆ SetActivationCallback()

void tram::TriggerComponent::SetActivationCallback ( collision_callback  activation)
inline

◆ SetCollisionGroup()

void tram::TriggerComponent::SetCollisionGroup ( uint32_t  flags)

Sets a collision group for the trigger.

This method works the same as in PhysicsComponent, see PhysicsComponent::SetCollisionGroup() for more information.

◆ SetCollisionMask()

void tram::TriggerComponent::SetCollisionMask ( uint32_t  flags)

Sets a collision mask for the trigger.

This method works the same as in PhysicsComponent, see PhysicsComponent::SetCollsionMask() for more information.

◆ SetDectivationCallback()

void tram::TriggerComponent::SetDectivationCallback ( collision_callback  deactivation)
inline

◆ SetFilterCallback()

void tram::TriggerComponent::SetFilterCallback ( filter_callback  filter)
inline

◆ SetLocation()

void tram::TriggerComponent::SetLocation ( vec3  location)

Sets the location of the component.

◆ SetModel() [1/2]

void tram::TriggerComponent::SetModel ( name_t  model)
inline

◆ SetModel() [2/2]

void tram::TriggerComponent::SetModel ( Physics::CollisionModel model)
inline

◆ SetRotation()

void tram::TriggerComponent::SetRotation ( quat  rotation)

Sets the rotation of the component.

◆ SetShape()

void tram::TriggerComponent::SetShape ( Physics::CollisionShape  shape)

Sets a collision shape for the trigger.

◆ SetStoreCollisions()

void tram::TriggerComponent::SetStoreCollisions ( bool  store_collisions)
inline

◆ Start()

void tram::TriggerComponent::Start ( )
virtual

Implements tram::EntityComponent.


The documentation for this class was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/trigger.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/trigger.cpp
================================================ FILE: docs/cppapi/classtram_1_1_value-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::Value Member List

This is the complete list of members for tram::Value, including all inherited members.

AssertType(Type type) consttram::Valueinlineprotected
bool_valuetram::Value
float_valuetram::Value
GetFloat() consttram::Valueinline
GetInt() consttram::Valueinline
GetType() consttram::Valueinline
int32_valuetram::Value
IsBool() consttram::Valueinline
IsFloat() consttram::Valueinline
IsInt() consttram::Valueinline
IsName() consttram::Valueinline
IsQuat() consttram::Valueinline
IsString() consttram::Valueinline
IsVec2() consttram::Valueinline
IsVec3() consttram::Valueinline
IsVec4() consttram::Valueinline
name_valuetram::Value
operator bool() consttram::Valueinline
operator const char *() consttram::Valueinline
operator double() consttram::Valueinline
operator float() consttram::Valueinline
operator int16_t() consttram::Valueinline
operator int32_t() consttram::Valueinline
operator int64_t() consttram::Valueinline
operator int8_t() consttram::Valueinline
operator name_t() consttram::Valueinline
operator quat() consttram::Valueinline
operator uint16_t() consttram::Valueinline
operator uint32_t() consttram::Valueinline
operator uint64_t() consttram::Valueinline
operator uint8_t() consttram::Valueinline
operator vec2() consttram::Valueinline
operator vec3() consttram::Valueinline
operator vec4() consttram::Valueinline
operator=(const Value &other)tram::Valueinline
operator==(const Value &other) consttram::Valueinline
quat_valuetram::Value
string_valuetram::Value
ToString()tram::Valueinline
typetram::Valueprotected
uint32_valuetram::Value
Value()tram::Valueinline
Value(const Value &other)tram::Valueinline
Value(bool value)tram::Valueinline
Value(name_t value)tram::Valueinline
Value(const char *value)tram::Valueinline
Value(int8_t value)tram::Valueinline
Value(int16_t value)tram::Valueinline
Value(int64_t value)tram::Valueinline
Value(uint8_t value)tram::Valueinline
Value(uint16_t value)tram::Valueinline
Value(uint64_t value)tram::Valueinline
Value(double value)tram::Valueinline
Value(int32_t value)tram::Valueinline
Value(uint32_t value)tram::Valueinline
Value(vec2 value)tram::Valueinline
Value(vec3 value)tram::Valueinline
Value(vec4 value)tram::Valueinline
Value(quat value)tram::Valueinline
Value(float value)tram::Valueinline
ValuePtrtram::Valuefriend
vec2_valuetram::Value
vec3_valuetram::Value
vec4_valuetram::Value
~Value()tram::Valueinline
================================================ FILE: docs/cppapi/classtram_1_1_value.html ================================================ Tramway SDK: tram::Value Class Reference
Tramway SDK v0.1.1

Generic, type-safe union. More...

#include <value.h>

Public Member Functions

 Value ()
 
 ~Value ()
 
 Value (const Value &other)
 
Valueoperator= (const Value &other)
 
bool operator== (const Value &other) const
 
 Value (bool value)
 
 Value (name_t value)
 
 Value (const char *value)
 
 Value (int8_t value)
 
 Value (int16_t value)
 
 Value (int64_t value)
 
 Value (uint8_t value)
 
 Value (uint16_t value)
 
 Value (uint64_t value)
 
 Value (double value)
 
 Value (int32_t value)
 
 Value (uint32_t value)
 
 Value (vec2 value)
 
 Value (vec3 value)
 
 Value (vec4 value)
 
 Value (quat value)
 
 Value (float value)
 
 operator bool () const
 
 operator name_t () const
 
 operator const char * () const
 
 operator int8_t () const
 
 operator int16_t () const
 
 operator int64_t () const
 
 operator uint8_t () const
 
 operator uint16_t () const
 
 operator uint64_t () const
 
 operator double () const
 
 operator int32_t () const
 
 operator uint32_t () const
 
 operator float () const
 
 operator vec2 () const
 
 operator vec3 () const
 
 operator vec4 () const
 
 operator quat () const
 
bool IsBool () const
 
bool IsInt () const
 
bool IsFloat () const
 
bool IsName () const
 
bool IsString () const
 
bool IsVec2 () const
 
bool IsVec3 () const
 
bool IsVec4 () const
 
bool IsQuat () const
 
int GetInt () const
 
float GetFloat () const
 
std::string ToString ()
 
Type GetType () const
 

Protected Member Functions

void AssertType (Type type) const
 

Protected Attributes

Type type
 
union {
   bool   bool_value
 
   name_t   name_value
 
   const char *   string_value
 
   int32_t   int32_value
 
   uint32_t   uint32_value
 
   float   float_value
 
   vec2   vec2_value
 
   vec3   vec3_value
 
   vec4   vec4_value
 
   quat   quat_value
 
}; 
 

Friends

class ValuePtr
 

Detailed Description

Generic, type-safe union.

Constructor & Destructor Documentation

◆ Value() [1/19]

tram::Value::Value ( )
inline

◆ ~Value()

tram::Value::~Value ( )
inline

◆ Value() [2/19]

tram::Value::Value ( const Value other)
inline

◆ Value() [3/19]

tram::Value::Value ( bool  value)
inline

◆ Value() [4/19]

tram::Value::Value ( name_t  value)
inline

◆ Value() [5/19]

tram::Value::Value ( const char *  value)
inline

◆ Value() [6/19]

tram::Value::Value ( int8_t  value)
inline

◆ Value() [7/19]

tram::Value::Value ( int16_t  value)
inline

◆ Value() [8/19]

tram::Value::Value ( int64_t  value)
inline

◆ Value() [9/19]

tram::Value::Value ( uint8_t  value)
inline

◆ Value() [10/19]

tram::Value::Value ( uint16_t  value)
inline

◆ Value() [11/19]

tram::Value::Value ( uint64_t  value)
inline

◆ Value() [12/19]

tram::Value::Value ( double  value)
inline

◆ Value() [13/19]

tram::Value::Value ( int32_t  value)
inline

◆ Value() [14/19]

tram::Value::Value ( uint32_t  value)
inline

◆ Value() [15/19]

tram::Value::Value ( vec2  value)
inline

◆ Value() [16/19]

tram::Value::Value ( vec3  value)
inline

◆ Value() [17/19]

tram::Value::Value ( vec4  value)
inline

◆ Value() [18/19]

tram::Value::Value ( quat  value)
inline

◆ Value() [19/19]

tram::Value::Value ( float  value)
inline

Member Function Documentation

◆ AssertType()

void tram::Value::AssertType ( Type  type) const
inlineprotected

◆ GetFloat()

float tram::Value::GetFloat ( ) const
inline

◆ GetInt()

int tram::Value::GetInt ( ) const
inline

◆ GetType()

Type tram::Value::GetType ( ) const
inline

◆ IsBool()

bool tram::Value::IsBool ( ) const
inline

◆ IsFloat()

bool tram::Value::IsFloat ( ) const
inline

◆ IsInt()

bool tram::Value::IsInt ( ) const
inline

◆ IsName()

bool tram::Value::IsName ( ) const
inline

◆ IsQuat()

bool tram::Value::IsQuat ( ) const
inline

◆ IsString()

bool tram::Value::IsString ( ) const
inline

◆ IsVec2()

bool tram::Value::IsVec2 ( ) const
inline

◆ IsVec3()

bool tram::Value::IsVec3 ( ) const
inline

◆ IsVec4()

bool tram::Value::IsVec4 ( ) const
inline

◆ operator bool()

tram::Value::operator bool ( ) const
inline

◆ operator const char *()

tram::Value::operator const char * ( ) const
inline

◆ operator double()

tram::Value::operator double ( ) const
inline

◆ operator float()

tram::Value::operator float ( ) const
inline

◆ operator int16_t()

tram::Value::operator int16_t ( ) const
inline

◆ operator int32_t()

tram::Value::operator int32_t ( ) const
inline

◆ operator int64_t()

tram::Value::operator int64_t ( ) const
inline

◆ operator int8_t()

tram::Value::operator int8_t ( ) const
inline

◆ operator name_t()

tram::Value::operator name_t ( ) const
inline

◆ operator quat()

tram::Value::operator quat ( ) const
inline

◆ operator uint16_t()

tram::Value::operator uint16_t ( ) const
inline

◆ operator uint32_t()

tram::Value::operator uint32_t ( ) const
inline

◆ operator uint64_t()

tram::Value::operator uint64_t ( ) const
inline

◆ operator uint8_t()

tram::Value::operator uint8_t ( ) const
inline

◆ operator vec2()

tram::Value::operator vec2 ( ) const
inline

◆ operator vec3()

tram::Value::operator vec3 ( ) const
inline

◆ operator vec4()

tram::Value::operator vec4 ( ) const
inline

◆ operator=()

Value & tram::Value::operator= ( const Value other)
inline

◆ operator==()

bool tram::Value::operator== ( const Value other) const
inline

◆ ToString()

std::string tram::Value::ToString ( )
inline

Friends And Related Function Documentation

◆ ValuePtr

friend class ValuePtr
friend

Member Data Documentation

◆ 

union { ... } tram::Value::@45

◆ bool_value

bool tram::Value::bool_value

◆ float_value

float tram::Value::float_value

◆ int32_value

int32_t tram::Value::int32_value

◆ name_value

name_t tram::Value::name_value

◆ quat_value

quat tram::Value::quat_value

◆ string_value

const char* tram::Value::string_value

◆ type

Type tram::Value::type
protected

◆ uint32_value

uint32_t tram::Value::uint32_value

◆ vec2_value

vec2 tram::Value::vec2_value

◆ vec3_value

vec3 tram::Value::vec3_value

◆ vec4_value

vec4 tram::Value::vec4_value

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/value.h
================================================ FILE: docs/cppapi/classtram_1_1_value_array-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::ValueArray Member List

This is the complete list of members for tram::ValueArray, including all inherited members.

operator[](size_t n) consttram::ValueArrayinline
size() consttram::ValueArrayinline
ValueArray(const Value *first, size_t count)tram::ValueArrayinline
================================================ FILE: docs/cppapi/classtram_1_1_value_array.html ================================================ Tramway SDK: tram::ValueArray Class Reference
Tramway SDK v0.1.1
tram::ValueArray Class Reference

#include <value.h>

Public Member Functions

 ValueArray (const Value *first, size_t count)
 
const Valueoperator[] (size_t n) const
 
const size_t size () const
 

Constructor & Destructor Documentation

◆ ValueArray()

tram::ValueArray::ValueArray ( const Value first,
size_t  count 
)
inline

Member Function Documentation

◆ operator[]()

const Value & tram::ValueArray::operator[] ( size_t  n) const
inline

◆ size()

const size_t tram::ValueArray::size ( ) const
inline

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/value.h
================================================ FILE: docs/cppapi/classtram_1_1_value_ptr-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::ValuePtr Member List

This is the complete list of members for tram::ValuePtr, including all inherited members.

bool_ptrtram::ValuePtr
float_ptrtram::ValuePtr
GetType() consttram::ValuePtrinline
int32_ptrtram::ValuePtr
IsBool() consttram::ValuePtrinline
IsFloat() consttram::ValuePtrinline
IsInt() consttram::ValuePtrinline
name_ptrtram::ValuePtr
operator bool *() consttram::ValuePtrinline
operator const char **() consttram::ValuePtrinline
operator float *() consttram::ValuePtrinline
operator int32_t *() consttram::ValuePtrinline
operator name_t *() consttram::ValuePtrinline
operator quat *() consttram::ValuePtrinline
operator uint32_t *() consttram::ValuePtrinline
operator Value() consttram::ValuePtrinline
operator vec2 *() consttram::ValuePtrinline
operator vec3 *() consttram::ValuePtrinline
operator vec4 *() consttram::ValuePtrinline
quat_ptrtram::ValuePtr
SetValue(const Value &other)tram::ValuePtrinline
string_ptrtram::ValuePtr
uint32_ptrtram::ValuePtr
ValuePtr()tram::ValuePtrinline
ValuePtr(const ValuePtr &other)tram::ValuePtrinline
ValuePtr(Value &other)tram::ValuePtrinline
ValuePtr(bool *ptr)tram::ValuePtrinline
ValuePtr(name_t *ptr)tram::ValuePtrinline
ValuePtr(const char **ptr)tram::ValuePtrinline
ValuePtr(int32_t *ptr)tram::ValuePtrinline
ValuePtr(uint32_t *ptr)tram::ValuePtrinline
ValuePtr(vec2 *ptr)tram::ValuePtrinline
ValuePtr(vec3 *ptr)tram::ValuePtrinline
ValuePtr(vec4 *ptr)tram::ValuePtrinline
ValuePtr(quat *ptr)tram::ValuePtrinline
ValuePtr(float *ptr)tram::ValuePtrinline
vec2_ptrtram::ValuePtr
vec3_ptrtram::ValuePtr
vec4_ptrtram::ValuePtr
~ValuePtr()tram::ValuePtrinline
================================================ FILE: docs/cppapi/classtram_1_1_value_ptr.html ================================================ Tramway SDK: tram::ValuePtr Class Reference
Tramway SDK v0.1.1
tram::ValuePtr Class Reference

#include <value.h>

Public Member Functions

 ValuePtr ()
 
 ~ValuePtr ()
 
 ValuePtr (const ValuePtr &other)
 
 ValuePtr (Value &other)
 
 operator Value () const
 
void SetValue (const Value &other)
 
 ValuePtr (bool *ptr)
 
 ValuePtr (name_t *ptr)
 
 ValuePtr (const char **ptr)
 
 ValuePtr (int32_t *ptr)
 
 ValuePtr (uint32_t *ptr)
 
 ValuePtr (vec2 *ptr)
 
 ValuePtr (vec3 *ptr)
 
 ValuePtr (vec4 *ptr)
 
 ValuePtr (quat *ptr)
 
 ValuePtr (float *ptr)
 
 operator bool * () const
 
 operator name_t * () const
 
 operator const char ** () const
 
 operator int32_t * () const
 
 operator uint32_t * () const
 
 operator float * () const
 
 operator vec2 * () const
 
 operator vec3 * () const
 
 operator vec4 * () const
 
 operator quat * () const
 
bool IsBool () const
 
bool IsInt () const
 
bool IsFloat () const
 
Type GetType () const
 

Constructor & Destructor Documentation

◆ ValuePtr() [1/13]

tram::ValuePtr::ValuePtr ( )
inline

◆ ~ValuePtr()

tram::ValuePtr::~ValuePtr ( )
inline

◆ ValuePtr() [2/13]

tram::ValuePtr::ValuePtr ( const ValuePtr other)
inline

◆ ValuePtr() [3/13]

tram::ValuePtr::ValuePtr ( Value other)
inline

◆ ValuePtr() [4/13]

tram::ValuePtr::ValuePtr ( bool *  ptr)
inline

◆ ValuePtr() [5/13]

tram::ValuePtr::ValuePtr ( name_t ptr)
inline

◆ ValuePtr() [6/13]

tram::ValuePtr::ValuePtr ( const char **  ptr)
inline

◆ ValuePtr() [7/13]

tram::ValuePtr::ValuePtr ( int32_t *  ptr)
inline

◆ ValuePtr() [8/13]

tram::ValuePtr::ValuePtr ( uint32_t *  ptr)
inline

◆ ValuePtr() [9/13]

tram::ValuePtr::ValuePtr ( vec2 ptr)
inline

◆ ValuePtr() [10/13]

tram::ValuePtr::ValuePtr ( vec3 ptr)
inline

◆ ValuePtr() [11/13]

tram::ValuePtr::ValuePtr ( vec4 ptr)
inline

◆ ValuePtr() [12/13]

tram::ValuePtr::ValuePtr ( quat ptr)
inline

◆ ValuePtr() [13/13]

tram::ValuePtr::ValuePtr ( float *  ptr)
inline

Member Function Documentation

◆ GetType()

Type tram::ValuePtr::GetType ( ) const
inline

◆ IsBool()

bool tram::ValuePtr::IsBool ( ) const
inline

◆ IsFloat()

bool tram::ValuePtr::IsFloat ( ) const
inline

◆ IsInt()

bool tram::ValuePtr::IsInt ( ) const
inline

◆ operator bool *()

tram::ValuePtr::operator bool * ( ) const
inline

◆ operator const char **()

tram::ValuePtr::operator const char ** ( ) const
inline

◆ operator float *()

tram::ValuePtr::operator float * ( ) const
inline

◆ operator int32_t *()

tram::ValuePtr::operator int32_t * ( ) const
inline

◆ operator name_t *()

tram::ValuePtr::operator name_t * ( ) const
inline

◆ operator quat *()

tram::ValuePtr::operator quat * ( ) const
inline

◆ operator uint32_t *()

tram::ValuePtr::operator uint32_t * ( ) const
inline

◆ operator Value()

tram::ValuePtr::operator Value ( ) const
inline

◆ operator vec2 *()

tram::ValuePtr::operator vec2 * ( ) const
inline

◆ operator vec3 *()

tram::ValuePtr::operator vec3 * ( ) const
inline

◆ operator vec4 *()

tram::ValuePtr::operator vec4 * ( ) const
inline

◆ SetValue()

void tram::ValuePtr::SetValue ( const Value other)
inline

Member Data Documentation

◆ bool_ptr

bool* tram::ValuePtr::bool_ptr

◆ float_ptr

float* tram::ValuePtr::float_ptr

◆ int32_ptr

int32_t* tram::ValuePtr::int32_ptr

◆ name_ptr

name_t* tram::ValuePtr::name_ptr

◆ quat_ptr

quat* tram::ValuePtr::quat_ptr

◆ string_ptr

const char** tram::ValuePtr::string_ptr

◆ uint32_ptr

uint32_t* tram::ValuePtr::uint32_ptr

◆ vec2_ptr

vec2* tram::ValuePtr::vec2_ptr

◆ vec3_ptr

vec3* tram::ValuePtr::vec3_ptr

◆ vec4_ptr

vec4* tram::ValuePtr::vec4_ptr

The documentation for this class was generated from the following file:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/value.h
================================================ FILE: docs/cppapi/classtram_1_1_world_cell-members.html ================================================ Tramway SDK: Member List
Tramway SDK v0.1.1
tram::WorldCell Member List

This is the complete list of members for tram::WorldCell, including all inherited members.

Add(Entity *entity)tram::WorldCell
Add(Transition *transition)tram::WorldCell
AUTOMATIC_LOADING enum valuetram::WorldCellprotected
DEBUG_DRAW enum valuetram::WorldCellprotected
entitiestram::WorldCellprotected
Find(vec3 point)tram::WorldCellstatic
Find(name_t name)tram::WorldCellstatic
FindTransition(vec3 point)tram::WorldCell
flagstram::WorldCellprotected
GetEntities()tram::WorldCellinline
GetEntityCount()tram::WorldCellinline
GetName()tram::WorldCellinline
GetTransitions()tram::WorldCellinline
GetVolume()tram::WorldCellinline
HasAutomaticLoading()tram::WorldCellinline
HasInteriorLighting()tram::WorldCellinline
INTERIOR enum valuetram::WorldCellprotected
INTERIOR_LIGHTING enum valuetram::WorldCellprotected
IsDebugDraw()tram::WorldCellinline
IsInside(vec3 point)tram::WorldCell
IsInterior()tram::WorldCellinline
IsLoaded()tram::WorldCellinline
Link(WorldCell *other)tram::WorldCell
Load()tram::WorldCell
LOADED enum valuetram::WorldCellprotected
LOADED_FROM_DISK enum valuetram::WorldCellprotected
LoadFromDisk()tram::WorldCell
Make(name_t name)tram::WorldCellstatic
nametram::WorldCellprotected
Remove(Entity *entity)tram::WorldCell
SetAutomaticLoading(bool is)tram::WorldCellinline
SetDebugDraw(bool is)tram::WorldCellinline
SetFlag(uint32_t flag, bool value)tram::WorldCellinlineprotected
SetInterior(bool is)tram::WorldCellinline
SetInteriorLights(bool is)tram::WorldCellinline
transitionstram::WorldCellprotected
Unload()tram::WorldCell
volumetram::WorldCellprotected
WorldCell(name_t name)tram::WorldCellinline
================================================ FILE: docs/cppapi/classtram_1_1_world_cell.html ================================================ Tramway SDK: tram::WorldCell Struct Reference
Tramway SDK v0.1.1

World streaming unit. More...

#include <framework/worldcell.h>

Public Member Functions

 WorldCell (name_t name)
 
name_t GetName ()
 
bool IsLoaded ()
 
bool IsInterior ()
 
bool HasInteriorLighting ()
 
bool IsDebugDraw ()
 
bool HasAutomaticLoading ()
 
void SetInterior (bool is)
 
void SetInteriorLights (bool is)
 
void SetDebugDraw (bool is)
 
void SetAutomaticLoading (bool is)
 
void Load ()
 Loads the cell. More...
 
void Unload ()
 Unloads the cell. More...
 
void LoadFromDisk ()
 Loads worldcell data from disk. More...
 
void Add (Entity *entity)
 Adds an entity to the worldcell. More...
 
void Remove (Entity *entity)
 Removes an entity from the worldcell. More...
 
size_t GetEntityCount ()
 
void Add (Transition *transition)
 Adds a transition. More...
 
void Link (WorldCell *other)
 Links a worldcell. More...
 
WorldCellFindTransition (vec3 point)
 Finds a transition from a position. More...
 
const std::vector< Entity * > & GetEntities ()
 
const std::vector< Transition * > & GetTransitions ()
 
const std::vector< Transition * > & GetVolume ()
 
bool IsInside (vec3 point)
 Checks if point is inside the worldcell. More...
 

Static Public Member Functions

static WorldCellFind (vec3 point)
 Finds the WorldCell which contains a given point. More...
 
static WorldCellFind (name_t name)
 Finds a WorldCell by its name. More...
 
static WorldCellMake (name_t name)
 Creates a WorldCell by name. More...
 

Protected Types

enum  {
  LOADED = 1 , INTERIOR = 2 , INTERIOR_LIGHTING = 4 , DEBUG_DRAW = 8 ,
  AUTOMATIC_LOADING = 16 , LOADED_FROM_DISK = 32
}
 

Protected Member Functions

void SetFlag (uint32_t flag, bool value)
 

Protected Attributes

name_t name
 
uint32_t flags = AUTOMATIC_LOADING
 
std::vector< Entity * > entities
 
std::vector< Transition * > transitions
 
std::vector< Transition * > volume
 

Detailed Description

World streaming unit.

Contains entities, can be used to load and unload them.

See also
https://racenis.github.io/tram-sdk/documentation/framework/worldcell.html

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
protected
Enumerator
LOADED 
INTERIOR 
INTERIOR_LIGHTING 
DEBUG_DRAW 
AUTOMATIC_LOADING 
LOADED_FROM_DISK 

Constructor & Destructor Documentation

◆ WorldCell()

tram::WorldCell::WorldCell ( name_t  name)
inline

Member Function Documentation

◆ Add() [1/2]

void tram::WorldCell::Add ( Entity entity)

Adds an entity to the worldcell.

◆ Add() [2/2]

void tram::WorldCell::Add ( Transition transition)

Adds a transition.

Adds an outgoing transition to the worldcell.

◆ Find() [1/2]

WorldCell * tram::WorldCell::Find ( name_t  name)
static

Finds a WorldCell by its name.

Returns
Pointer to the cell if found, nullptr otherwise.

◆ Find() [2/2]

WorldCell * tram::WorldCell::Find ( vec3  point)
static

Finds the WorldCell which contains a given point.

This method will iterate through WorldCells and will try to find a WorldCell with a volume that contains the given point. It will first try finding a volume for an interior cell, otherwise it will try finding a volume for an exterior cell. If it can't find a cell, it will return a nullptr.

Returns
Pointer to a WorldCell or a nullptr.

◆ FindTransition()

WorldCell * tram::WorldCell::FindTransition ( vec3  point)

Finds a transition from a position.

This is meant to be used by entities that are seeking a WorldCell into which they can transition into.

◆ GetEntities()

const std::vector< Entity * > & tram::WorldCell::GetEntities ( )
inline

◆ GetEntityCount()

size_t tram::WorldCell::GetEntityCount ( )
inline

◆ GetName()

name_t tram::WorldCell::GetName ( )
inline

◆ GetTransitions()

const std::vector< Transition * > & tram::WorldCell::GetTransitions ( )
inline

◆ GetVolume()

const std::vector< Transition * > & tram::WorldCell::GetVolume ( )
inline

◆ HasAutomaticLoading()

bool tram::WorldCell::HasAutomaticLoading ( )
inline

◆ HasInteriorLighting()

bool tram::WorldCell::HasInteriorLighting ( )
inline

◆ IsDebugDraw()

bool tram::WorldCell::IsDebugDraw ( )
inline

◆ IsInside()

bool tram::WorldCell::IsInside ( vec3  point)

Checks if point is inside the worldcell.

◆ IsInterior()

bool tram::WorldCell::IsInterior ( )
inline

◆ IsLoaded()

bool tram::WorldCell::IsLoaded ( )
inline

◆ Link()

void tram::WorldCell::Link ( WorldCell other)

Links a worldcell.

This method will take the volume transitions assigned to the worldcell in other pointer parameter and assign them as transitions to the given cell.

◆ Load()

void tram::WorldCell::Load ( )

Loads the cell.

This will flag the cell as loaded and will load all of the entities that have been flagged as being automatically loaded.

◆ LoadFromDisk()

void tram::WorldCell::LoadFromDisk ( )

Loads worldcell data from disk.

◆ Make()

WorldCell * tram::WorldCell::Make ( name_t  name)
static

Creates a WorldCell by name.

If a cell with the given name already exists, this method will return that same cell, otherwise a new cell will be created.

Returns
Always returns the pointer to the created WorldCell.

◆ Remove()

void tram::WorldCell::Remove ( Entity entity)

Removes an entity from the worldcell.

◆ SetAutomaticLoading()

void tram::WorldCell::SetAutomaticLoading ( bool  is)
inline

◆ SetDebugDraw()

void tram::WorldCell::SetDebugDraw ( bool  is)
inline

◆ SetFlag()

void tram::WorldCell::SetFlag ( uint32_t  flag,
bool  value 
)
inlineprotected

◆ SetInterior()

void tram::WorldCell::SetInterior ( bool  is)
inline

◆ SetInteriorLights()

void tram::WorldCell::SetInteriorLights ( bool  is)
inline

◆ Unload()

void tram::WorldCell::Unload ( )

Unloads the cell.

This will flag the cell as unloaded and will unload all of the entities that have been flagged as being automatically loaded. It will also delete entities that have been flagged as being non-persistent.

Member Data Documentation

◆ entities

std::vector<Entity*> tram::WorldCell::entities
protected

◆ flags

uint32_t tram::WorldCell::flags = AUTOMATIC_LOADING
protected

◆ name

name_t tram::WorldCell::name
protected

◆ transitions

std::vector<Transition*> tram::WorldCell::transitions
protected

◆ volume

std::vector<Transition*> tram::WorldCell::volume
protected

The documentation for this struct was generated from the following files:
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/worldcell.h
  • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/worldcell.cpp
================================================ FILE: docs/cppapi/cli_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/cli.cpp File Reference
Tramway SDK
cli.cpp File Reference
================================================ FILE: docs/cppapi/cli_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/cli.h File Reference
Tramway SDK
cli.h File Reference
#include <cstdint>

Go to the source code of this file.

Namespaces

namespace  tram
 
================================================ FILE: docs/cppapi/cli_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/cli.h Source File
Tramway SDK
cli.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3
4#ifndef TRAM_SDK_FRAMEWORK_CLI_H
5#define TRAM_SDK_FRAMEWORK_CLI_H
6
7#include <cstdint>
8
9namespace tram {
10
11}
12
13#endif // TRAM_SDK_FRAMEWORK_CLI_H
Definition: api.h:17
================================================ FILE: docs/cppapi/collisionmodel_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/collisionmodel.cpp File Reference
Tramway SDK v0.1.1
collisionmodel.cpp File Reference
#include <physics/physics.h>
#include <physics/api.h>
#include <physics/collisionmodel.h>
#include <templates/hashmap.h>
#include <framework/file.h>
#include <framework/logging.h>
#include <config.h>
#include <cstring>

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Physics
 
================================================ FILE: docs/cppapi/collisionmodel_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/collisionmodel.h File Reference
Tramway SDK v0.1.1
collisionmodel.h File Reference

Go to the source code of this file.

Classes

class  tram::Physics::CollisionModel
 Physics CollisionShape model. More...
 

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Physics
 
================================================ FILE: docs/cppapi/collisionmodel_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/collisionmodel.h Source File
Tramway SDK v0.1.1
collisionmodel.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_PHYSICS_COLLISIONMODEL_H
4#define TRAM_SDK_PHYSICS_COLLISIONMODEL_H
5
7#include <physics/physics.h>
8
9namespace tram::Physics {
10
11class CollisionModel : public Resource {
12public:
13 CollisionModel(name_t mName) : Resource(mName) {}
14
15 void LoadFromDisk();
17 void Unload() {}
18
19 inline collisionshape_t GetShape() { return shape; }
20
21 static CollisionModel* Find(name_t model_name);
22protected:
24};
25
26}
27
28#endif // TRAM_SDK_PHYSICS_COLLISIONMODEL_H
Physics CollisionShape model.
Definition: collisionmodel.h:11
collisionshape_t shape
Definition: collisionmodel.h:23
void LoadFromMemory()
Definition: collisionmodel.h:16
void Unload()
Definition: collisionmodel.h:17
collisionshape_t GetShape()
Definition: collisionmodel.h:19
void LoadFromDisk()
Loads the collision model from disk.
Definition: collisionmodel.cpp:45
CollisionModel(name_t mName)
Definition: collisionmodel.h:13
static CollisionModel * Find(name_t model_name)
Finds a model.
Definition: collisionmodel.cpp:31
Definition: resource.h:11
Definition: physics.h:43
Interned string type.
Definition: uid.h:10
================================================ FILE: docs/cppapi/collisionshape_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/collisionshape.h File Reference
Tramway SDK v0.1.1
collisionshape.h File Reference
================================================ FILE: docs/cppapi/collisionshape_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/collisionshape.h Source File
Tramway SDK v0.1.1
collisionshape.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_PHYSICS_COLLISIONSHAPE_H
4#define TRAM_SDK_PHYSICS_COLLISIONSHAPE_H
5
6#include <framework/math.h>
7
16namespace tram::Physics {
17
18enum Shape : uint32_t {
26};
27
30};
31
34
35 union {
36 struct {
37 union {
38 float radius;
39 float radius_x;
40 float extent_x;
41 };
42
43 union {
44 float height;
45 float extent_y;
46 };
47
48 union {
49 float extent_z;
50 float radius_z;
51 };
52 };
53
54 struct {
56 size_t hull_size;
57 };
58
59 struct {
61 size_t mesh_size;
62 };
63 };
64
65 static inline CollisionShape Sphere(float radius);
66 static inline CollisionShape Cylinder(float radius, float height);
67 static inline CollisionShape Capsule(float radius, float height);
68 static inline CollisionShape Cone(float radius, float height);
69 static inline CollisionShape Box(vec3 dimensions);
70 static inline CollisionShape Hull(vec3* points, size_t size);
71 static inline CollisionShape Mesh(CollisionTriangle* triangles, size_t size);
72};
73
76 return {SHAPE_SPHERE, radius, 0.0f, 0.0f};
77}
78
80CollisionShape CollisionShape::Cylinder(float radius, float height) {
82}
83
85CollisionShape CollisionShape::Capsule(float radius, float height) {
86 return {SHAPE_CAPSULE, radius, height, 0.0f};
87}
88
90CollisionShape CollisionShape::Cone(float radius, float height) {
91 return {SHAPE_CONE, radius, height, 0.0f};
92}
93
96 return {SHAPE_BOX, dimensions.x, dimensions.y, dimensions.z};
97}
98
103 return CollisionShape {.type = SHAPE_HULL, .hull_points = points, .hull_size = size};
104}
105
110 return CollisionShape {.type = SHAPE_MESH, .mesh_triangles = triangles, .mesh_size = size};
111}
112
113}
114
115#endif // TRAM_SDK_PHYSICS_COLLISIONSHAPE_H
Shape
Definition: collisionshape.h:18
@ SHAPE_CONE
Definition: collisionshape.h:22
@ SHAPE_SPHERE
Definition: collisionshape.h:19
@ SHAPE_CAPSULE
Definition: collisionshape.h:21
@ SHAPE_MESH
Definition: collisionshape.h:25
@ SHAPE_BOX
Definition: collisionshape.h:23
@ SHAPE_HULL
Definition: collisionshape.h:24
@ SHAPE_CYLINDER
Definition: collisionshape.h:20
glm::vec3 vec3
Definition: math.h:11
Shape for a collider.
Definition: collisionshape.h:32
float radius_x
Definition: collisionshape.h:39
static CollisionShape Cylinder(float radius, float height)
Creates a cylinder.
Definition: collisionshape.h:80
static CollisionShape Sphere(float radius)
Creates a sphere.
Definition: collisionshape.h:75
float height
Definition: collisionshape.h:44
static CollisionShape Box(vec3 dimensions)
Creates a box.
Definition: collisionshape.h:95
float radius
Definition: collisionshape.h:38
float extent_x
Definition: collisionshape.h:40
size_t hull_size
Definition: collisionshape.h:56
vec3 * hull_points
Definition: collisionshape.h:55
static CollisionShape Cone(float radius, float height)
Creates a cone.
Definition: collisionshape.h:90
CollisionTriangle * mesh_triangles
Definition: collisionshape.h:60
float extent_z
Definition: collisionshape.h:49
static CollisionShape Hull(vec3 *points, size_t size)
Creates a convex hull.
Definition: collisionshape.h:102
float radius_z
Definition: collisionshape.h:50
float extent_y
Definition: collisionshape.h:45
static CollisionShape Mesh(CollisionTriangle *triangles, size_t size)
Creates a triangle mesh.
Definition: collisionshape.h:109
Shape type
Definition: collisionshape.h:33
size_t mesh_size
Definition: collisionshape.h:61
static CollisionShape Capsule(float radius, float height)
Creates a capsule.
Definition: collisionshape.h:85
Definition: collisionshape.h:28
vec3 p2
Definition: collisionshape.h:29
vec3 p1
Definition: collisionshape.h:29
vec3 p0
Definition: collisionshape.h:29
================================================ FILE: docs/cppapi/components_2animation_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/animation.cpp File Reference
Tramway SDK v0.1.1
animation.cpp File Reference
#include <components/animation.h>
#include <framework/entity.h>
#include <config.h>
#include <cstring>

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/components_2animation_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/animation.h File Reference
Tramway SDK v0.1.1
animation.h File Reference
#include <framework/core.h>
#include <framework/entitycomponent.h>
#include <render/render.h>
#include <render/model.h>

Go to the source code of this file.

Classes

class  tram::AnimationComponent
 Plays back Animations. More...
 
struct  tram::AnimationComponent::AnimationPlaybackInfo
 

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/components_2animation_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/animation.h Source File
Tramway SDK v0.1.1
animation.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_COMPONENTS_ARMATURECOMPONENT_H
4#define TRAM_SDK_COMPONENTS_ARMATURECOMPONENT_H
5
6#include <framework/core.h>
8#include <render/render.h>
9#include <render/model.h>
10
11namespace tram {
12
14public:
15 void Start();
16 void SetModel(Render::Model* model) { this->model = model; }
17 void SetModel(name_t model) { this->model = Render::Model::Find(model); }
18 Render::Model* GetModel() { return model.get(); }
19 Render::Pose* GetPose() { return pose; }
20
21 void SetKeyframe(name_t bone_name, const Render::Keyframe& keyframe);
23
24 void Play(name_t animation_name, uint32_t repeats, float weight, float speed, bool interpolate = true, bool pause_on_last_frame = false);
25 bool IsPlaying(name_t animation_name);
26 void Stop(name_t animation_name);
27 void Pause(name_t animation_name);
28 void Continue(name_t animation_name);
29
30 void SetWeight(name_t animation_name, float weight);
31 void SetSpeed(name_t animation_name, float speed);
32 void SetRepeats(name_t animation_name, uint32_t repeats);
33
34 void FadeIn(name_t animation_name, float length);
35 void FadeOut(name_t animation_name, float length);
36
37 void SetPause(name_t animation_name, bool pause);
38 void SetFade(name_t animation_name, bool fade_in, float fade_length);
39 void SetFrame(name_t animation_name, float frame);
40
41 void Reparent(name_t bone_name, name_t new_parent);
42
43 void Refresh();
44 void EventHandler(Event &event) { return; }
45 static bool IsDebugInfoDraw();
46 static void SetDebugInfoDraw(bool draw);
47 static void Update();
48protected:
49 static const size_t ANIM_COUNT = 8;
51 uint32_t repeats;
52 float weight;
53 float speed;
54 float frame;
58 bool fade_in;
60 bool pause;
64 };
65
66 void FindKeyframePointers(Render::Animation* animation, size_t animation_index);
67
69
70 Render::Pose* pose = nullptr;
72
74
75 const Render::Bone* armature_bones = nullptr;
78
81
84 template <typename> friend class Pool;
85};
86
87}
88
89#endif // TRAM_SDK_COMPONENTS_ARMATURECOMPONENT_H
Plays back Animations.
Definition: animation.h:13
ResourceProxy< Render::Model > model
Definition: animation.h:71
Render::Pose * GetPose()
Definition: animation.h:19
Render::Model * GetModel()
Definition: animation.h:18
bool IsPlaying(name_t animation_name)
Returns true if an animation is playing.
Definition: animation.cpp:244
void Stop(name_t animation_name)
Stops an animation if its playing.
Definition: animation.cpp:153
void SetFade(name_t animation_name, bool fade_in, float fade_length)
Fades in or fades out an animation.
Definition: animation.cpp:263
AnimationPlaybackInfo anim_info[ANIM_COUNT]
Definition: animation.h:80
size_t armature_bone_count
Definition: animation.h:76
void SetKeyframe(name_t bone_name, const Render::Keyframe &keyframe)
Sets procedural animation keyframe.
Definition: animation.cpp:70
int32_t armature_bone_parents[Render::BONE_COUNT]
Definition: animation.h:77
static bool IsDebugInfoDraw()
Checks whether the debug text is drawn.
Definition: animation.cpp:466
void SetWeight(name_t animation_name, float weight)
Sets the weight of an animation.
Definition: animation.cpp:214
static void Update()
Updates all of the armatures.
Definition: animation.cpp:299
void Start()
Definition: animation.cpp:52
void SetPause(name_t animation_name, bool pause)
Sets animation's pause state.
Definition: animation.cpp:177
void Pause(name_t animation_name)
Pauses an animation.
Definition: animation.cpp:191
void SetOnAnimationFinishCallback(void(*callback)(AnimationComponent *, name_t))
Definition: animation.h:22
const Render::Bone * armature_bones
Definition: animation.h:75
void SetModel(Render::Model *model)
Definition: animation.h:16
Render::Pose * pose
Definition: animation.h:70
name_t anim_playing[ANIM_COUNT]
Definition: animation.h:79
void SetFrame(name_t animation_name, float frame)
Sets an animation to a specific frame.
Definition: animation.cpp:306
static void SetDebugInfoDraw(bool draw)
Sets the drawing of debug info.
Definition: animation.cpp:473
void FindKeyframePointers(Render::Animation *animation, size_t animation_index)
Extracts pointers to keyframes from animation data.
Definition: animation.cpp:142
void Reparent(name_t bone_name, name_t new_parent)
Reparents a bone.
Definition: animation.cpp:280
void FadeIn(name_t animation_name, float length)
Fades in an animation.
Definition: animation.cpp:204
void SetRepeats(name_t animation_name, uint32_t repeats)
Sets the repeats of an animation.
Definition: animation.cpp:234
void(* anim_finish_callback)(AnimationComponent *, name_t)
Definition: animation.h:73
~AnimationComponent()
Definition: animation.cpp:45
void SetSpeed(name_t animation_name, float speed)
Sets the speed of an animation.
Definition: animation.cpp:224
void Continue(name_t animation_name)
Continues an animation.
Definition: animation.cpp:198
void EventHandler(Event &event)
Definition: animation.h:44
void SetModel(name_t model)
Definition: animation.h:17
static const size_t ANIM_COUNT
Definition: animation.h:49
void Play(name_t animation_name, uint32_t repeats, float weight, float speed, bool interpolate=true, bool pause_on_last_frame=false)
Plays an animation.
Definition: animation.cpp:92
void FadeOut(name_t animation_name, float length)
Fades out an animation.
Definition: animation.cpp:209
AnimationComponent()
Definition: animation.cpp:36
Render::Keyframe base_pose[Render::BONE_COUNT]
Definition: animation.h:68
void Refresh()
Updates an armature.
Definition: animation.cpp:317
Component base class.
Definition: entitycomponent.h:16
Definition: pool.h:21
Skeletal animation for a 3D model.
Definition: animation.h:45
Definition: model.h:27
static Model * Find(name_t name)
Definition: model.cpp:58
Definition: resource.h:46
const size_t BONE_COUNT
Definition: animation.h:17
Serialization, i.e.
UID name_t
Definition: uid.h:43
bool fade_out
Definition: animation.h:59
float fade_speed
Definition: animation.h:55
bool fade_in
Definition: animation.h:58
Render::Keyframe * keyframes[Render::BONE_COUNT]
Definition: animation.h:62
bool pause_on_last_frame
Definition: animation.h:61
float speed
Definition: animation.h:53
uint32_t keyframe_count[Render::BONE_COUNT]
Definition: animation.h:63
bool interpolate
Definition: animation.h:57
bool pause
Definition: animation.h:60
uint32_t repeats
Definition: animation.h:51
float weight
Definition: animation.h:52
float frame
Definition: animation.h:54
float fade_ammount
Definition: animation.h:56
Event data.
Definition: event.h:24
Bone for a 3D models skeleton.
Definition: animation.h:19
Keyframe for a skeletal animation.
Definition: animation.h:27
Definition: animation.h:35
Interned string type.
Definition: uid.h:10
================================================ FILE: docs/cppapi/components_2audio_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/audio.cpp File Reference
Tramway SDK v0.1.1
audio.cpp File Reference
#include <components/audio.h>
#include <framework/event.h>
#include <framework/settings.h>
#include <audio/api.h>
#include <audio/sound.h>
#include <config.h>

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/components_2audio_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/audio.h File Reference
Tramway SDK v0.1.1
audio.h File Reference

Go to the source code of this file.

Classes

class  tram::AudioComponent
 Plays back Sounds. More...
 

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/components_2audio_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/audio.h Source File
Tramway SDK v0.1.1
audio.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_COMPONENTS_AUDIOCOMPONENT_H
4#define TRAM_SDK_COMPONENTS_AUDIOCOMPONENT_H
5
8
9#include <components/render.h>
10
11#include <audio/sound.h>
12
13namespace tram {
14
15class RenderComponent;
16
18public:
21 void Start();
23 void SetSound(name_t name);
24 void SetRepeating(bool is_repeating);
25 bool IsPlaying();
26 void Play();
27 void Pause();
28 void Stop();
29
30 void EventHandler(Event &event){}
31
32 static bool IsSourceDraw();
33 static bool IsDebugInfoDraw();
34
35 static void SetSourceDraw(bool);
36 static void SetDebugInfoDraw(bool);
37protected:
40 vec3 location = {0.0f, 0.0f, 0.0f};
41 bool repeat = false;
42 bool play_on_start = false;
43
44 void SetupModel();
46};
47
48}
49
50#endif // TRAM_SDK_COMPONENTS_AUDIOCOMPONENT_H
Sound resource definition.
Plays back Sounds.
Definition: audio.h:17
static void SetSourceDraw(bool)
Sets the drawing of audio sources.
Definition: audio.cpp:165
static void SetDebugInfoDraw(bool)
Sets the drawing of debug info.
Definition: audio.cpp:177
void Start()
Definition: audio.cpp:49
~AudioComponent()
Definition: audio.cpp:42
bool IsPlaying()
Checks if component is playing a sound.
Definition: audio.cpp:128
vec3 location
Definition: audio.h:40
void Play()
Plays the sound.
Definition: audio.cpp:100
void Stop()
Stops the sound.
Definition: audio.cpp:118
void SetSound(name_t name)
Sets the sound that the component will play.
Definition: audio.cpp:72
static bool IsDebugInfoDraw()
Checks whether the debug text is drawn.
Definition: audio.cpp:158
static bool IsSourceDraw()
Checks whether the audio source is drawn.
Definition: audio.cpp:152
void SetRepeating(bool is_repeating)
Sets whether the component will repeat its sound.
Definition: audio.cpp:90
ResourceProxy< Audio::Sound > sound
Definition: audio.h:38
void SetupModel()
Definition: audio.cpp:137
bool repeat
Definition: audio.h:41
void EventHandler(Event &event)
Definition: audio.h:30
Component< RenderComponent > model
Definition: audio.h:45
Audio::audiosource_t source
Definition: audio.h:39
void SetLocation(vec3 location)
Sets the location from which the sound will play.
Definition: audio.cpp:77
void Pause()
Pauses the sound.
Definition: audio.cpp:111
bool play_on_start
Definition: audio.h:42
AudioComponent()
Definition: audio.h:19
Wrapper for an EntityComponent pointer.
Definition: entitycomponent.h:51
Component base class.
Definition: entitycomponent.h:16
Definition: resource.h:46
Serialization, i.e.
glm::vec3 vec3
Definition: math.h:11
Audio source handle.
Definition: audio.h:18
Event data.
Definition: event.h:24
Interned string type.
Definition: uid.h:10
================================================ FILE: docs/cppapi/components_2light_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/light.cpp File Reference
Tramway SDK v0.1.1
light.cpp File Reference
#include <components/light.h>
#include <render/scene.h>
#include <render/api.h>
#include <config.h>

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/components_2light_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/light.h File Reference
Tramway SDK v0.1.1
light.h File Reference

Go to the source code of this file.

Classes

class  tram::LightComponent
 Provides a real-time illumination for the scene. More...
 

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/components_2light_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/light.h Source File
Tramway SDK v0.1.1
light.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_COMPONENTS_LIGHTCOMPONENT_H
4#define TRAM_SDK_COMPONENTS_LIGHTCOMPONENT_H
5
7#include <components/render.h>
8#include <render/render.h>
9
10namespace tram {
11
13public:
14 void Init ();
15 void Start () {}
16
19 void SetDistance(float dist);
21 void SetExponent(float exponent);
22
23 vec3 GetColor();
24 float GetDistance();
25
26 void EventHandler(Event &event) { return; }
28
29 static bool IsLightDraw();
30 static void SetLightDraw(bool);
31protected:
32 void Update();
33
35 vec3 location = {0.0f, 0.0f, 0.0f};
36 Render::color_t color = {1.0f, 1.0f, 1.0f};
37 float distance = 15.0f;
38 vec3 direction = {0.0f, 0.0f, -1.0f};
39 float exponent = 0.0f;
40
41 void SetupModel();
43};
44
45}
46
47#endif // TRAM_SDK_COMPONENTS_LIGHTCOMPONENT_H
Wrapper for an EntityComponent pointer.
Definition: entitycomponent.h:51
Component base class.
Definition: entitycomponent.h:16
Provides a real-time illumination for the scene.
Definition: light.h:12
float GetDistance()
Returns the distance of the light.
Definition: light.cpp:96
void SetDistance(float dist)
Sets the distance of the light.
Definition: light.cpp:75
Component< RenderComponent > model
Definition: light.h:42
~LightComponent()
Definition: light.cpp:40
void SetLocation(vec3 location)
Sets the location of the light.
Definition: light.cpp:62
void SetDirection(vec3 direction)
Definition: light.cpp:80
static void SetLightDraw(bool)
Sets the drawing oflights.
Definition: light.cpp:126
void Init()
Initializes an entity component.
Definition: light.cpp:27
vec3 GetColor()
Returns the color of the light.
Definition: light.cpp:91
Render::color_t color
Definition: light.h:36
float distance
Definition: light.h:37
void EventHandler(Event &event)
Definition: light.h:26
void SetExponent(float exponent)
Definition: light.cpp:85
void SetColor(Render::color_t color)
Sets the color of the light.
Definition: light.cpp:68
Render::light_t light
Definition: light.h:34
void Update()
Definition: light.cpp:48
vec3 direction
Definition: light.h:38
void SetupModel()
Definition: light.cpp:102
void Start()
Definition: light.h:15
static bool IsLightDraw()
Checks whether the lights are drawn.
Definition: light.cpp:119
float exponent
Definition: light.h:39
vec3 location
Definition: light.h:35
vec3 color_t
Definition: render.h:16
Serialization, i.e.
glm::vec3 vec3
Definition: math.h:11
Event data.
Definition: event.h:24
Definition: render.h:173
================================================ FILE: docs/cppapi/components_2physics_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/physics.cpp File Reference
Tramway SDK v0.1.1
physics.cpp File Reference
#include <components/physics.h>
#include <physics/api.h>
#include <framework/entity.h>
#include <config.h>

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/components_2physics_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/physics.h File Reference
Tramway SDK v0.1.1
physics.h File Reference

Go to the source code of this file.

Classes

class  tram::PhysicsComponent
 Rigidbody wrapper. More...
 

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/components_2physics_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/physics.h Source File
Tramway SDK v0.1.1
physics.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_COMPONENTS_PHYSICSCOMPONENT_H
4#define TRAM_SDK_COMPONENTS_PHYSICSCOMPONENT_H
5
6#include <physics/physics.h>
9
10namespace tram {
11
13public:
14 PhysicsComponent() : collision_model(this) {}
16 void EventHandler(Event &event) {}
17 void Start();
18
20 void SetModel(name_t model);
21
22 void SetMass(float mass);
24
25 void Push(vec3 direction);
26 void Push(vec3 direction, vec3 local_position);
27 void Spin(vec3 direction);
28
29 void SetCollisionMask(uint32_t flags);
30 void SetCollisionGroup(uint32_t flags);
31
32 uint32_t GetCollisionMask();
33 uint32_t GetCollisionGroup();
34
35 void SetDebugDrawing(bool drawing);
36 void SetKinematic(bool kinematic);
37 void SetUpdateParentTransform(bool update);
38
39 void SetRotation(quat rotation);
40 void SetLocation(vec3 location);
41
43
44 void Awaken();
45 void Sleep();
46
47 void SetAngularFactor(vec3 factor);
48 void SetLinearFactor(vec3 factor);
49
50 void SetVelocity(const vec3& velocity);
52private:
54 Physics::collisionshape_t collision_shape = {nullptr};
55 Physics::rigidbody_t rigidbody = {nullptr};
56
57 float rigidbody_mass = 1.0f;
58
59 bool rigidbody_should_sleep = true;
60 bool rigidbody_should_awake = false;
61 bool update_parent_transform = true;
62 bool rigidbody_kinematic = false;
63 bool rigidbody_debug_draw = true;
64
65 vec3 rigidbody_position = {0.0f, 0.0f, 0.0f};
66 quat rigidbody_rotation = {1.0f, 0.0f, 0.0f, 0.0f};
67
68 vec3 rigidbody_offset = {0.0f, 0.0f, 0.0f};
69 vec3 rigidbody_angular_factor = {1.0f, 1.0f, 1.0f};
70 vec3 rigidbody_linear_factor = {1.0f, 1.0f, 1.0f};
71
72 uint32_t rigidbody_collision_mask = -1;
73 uint32_t rigidbody_collision_group = -1;
74};
75
76}
77
78#endif // TRAM_SDK_COMPONENTS_PHYSICSCOMPONENT_H
Component base class.
Definition: entitycomponent.h:16
Rigidbody wrapper.
Definition: physics.h:12
void SetRotation(quat rotation)
Sets the rotation of the physics object.
Definition: physics.cpp:262
void SetCollisionMask(uint32_t flags)
Sets the collision mask of the physics object.
Definition: physics.cpp:110
void Push(vec3 direction)
Pushes the physics object.
Definition: physics.cpp:156
void SetShape(Physics::CollisionShape shape)
Sets the collision shape of the physics object.
Definition: physics.cpp:136
void SetUpdateParentTransform(bool update)
Sets whether the movement of the rigibody should update parent Entity's transform.
Definition: physics.cpp:245
void Spin(vec3 direction)
Definition: physics.cpp:173
~PhysicsComponent()
Definition: physics.cpp:72
void SetAngularFactor(vec3 factor)
Sets the angular factor of the physics object.
Definition: physics.cpp:276
void EventHandler(Event &event)
Definition: physics.h:16
void SetLocation(vec3 location)
Sets the position of the physics object.
Definition: physics.cpp:250
vec3 GetVelocity()
Returns the velocity of the physics object.
Definition: physics.cpp:326
void SetCollisionGroup(uint32_t flags)
Sets the collision group of the physics object.
Definition: physics.cpp:125
uint32_t GetCollisionMask()
Returns the collision mask.
Definition: physics.cpp:95
void Start()
Definition: physics.cpp:25
void SetKinematic(bool kinematic)
Sets the physics object to kinematic.
Definition: physics.cpp:225
void SetVelocity(const vec3 &velocity)
Sets the velocity of the physics object.
Definition: physics.cpp:310
void Sleep()
Puts the object to sleep.
Definition: physics.cpp:193
void Awaken()
Awakens the object.
Definition: physics.cpp:183
uint32_t GetCollisionGroup()
Returns the collision group.
Definition: physics.cpp:101
void SetDebugDrawing(bool drawing)
Sets the debug drawing of a physics object.
Definition: physics.cpp:205
void SetLinearFactor(vec3 factor)
Sets the angular factor of the physics object.
Definition: physics.cpp:288
void DisableDeactivation()
Disables deactivation of the object.
Definition: physics.cpp:299
void SetModel(name_t model)
Sets the collision model.
Definition: physics.cpp:89
void SetMass(float mass)
Sets the mass of the physics object.
Definition: physics.cpp:144
PhysicsComponent()
Definition: physics.h:14
name_t GetModel()
Returns the name of the collision model.
Definition: physics.cpp:84
Definition: resource.h:46
Serialization, i.e.
glm::vec3 vec3
Definition: math.h:11
glm::quat quat
Definition: math.h:12
Event data.
Definition: event.h:24
Shape for a collider.
Definition: collisionshape.h:32
Definition: physics.h:43
Interned string type.
Definition: uid.h:10
================================================ FILE: docs/cppapi/components_2player_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/player.cpp File Reference
Tramway SDK v0.1.1
player.cpp File Reference
#include <components/player.h>
#include <config.h>

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/components_2player_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/player.h File Reference
Tramway SDK v0.1.1
player.h File Reference
#include <framework/ui.h>
#include <framework/event.h>
#include <framework/entity.h>
#include <components/controller.h>
#include <framework/logging.h>
#include <render/render.h>
#include <framework/message.h>

Go to the source code of this file.

Classes

class  tram::PlayerComponent
 Translates keyboard/mouse inputs into inputs for ControllerComponent. More...
 

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/components_2player_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/player.h Source File
Tramway SDK v0.1.1
player.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_COMPONENTS_PLAYERCOMPONENT_H
4#define TRAM_SDK_COMPONENTS_PLAYERCOMPONENT_H
5
6#include <framework/ui.h>
7#include <framework/event.h>
8#include <framework/entity.h>
9
11
12#include <framework/logging.h>
13
14// this is for holding
15// re: for holding what??
16// TODO: find out
17#include <render/render.h>
18#include <framework/message.h>
19
20namespace tram {
21
23public:
24 void EventHandler (Event &event);
25 void Init();
28 void SetControllerComponent (ControllerComponent* comp) { controller = comp; }
29 void Start() {}
30 void SetNoclip(bool value);
31 void SetKeyboardLook(bool value);
32
33 inline quat GetLookRotation() { return look_rotation; }
34 inline vec3 GetDirectionFacing() { return direction_facing; }
35private:
36 EventListener keydown;
37 EventListener keypress;
38 EventListener mouseposition;
39
40 quat look_rotation = {1.0f, 0.0f, 0.0f, 0.0f};
41 vec3 direction_facing = {0.0f, 0.0f, -1.0f};
42
43 bool noclipping = false;
44 bool keyboard_look = false;
45
46 void UpdateLook();
47
48 ControllerComponent* controller = nullptr;
49};
50
51}
52
53#endif // TRAM_SDK_COMPONENTS_PLAYERCOMPONENT_H
Provides an API for character controllers.
Definition: controller.h:15
Component base class.
Definition: entitycomponent.h:16
Smart wrapper class for Event listeners.
Definition: event.h:69
Translates keyboard/mouse inputs into inputs for ControllerComponent.
Definition: player.h:22
vec3 GetDirectionFacing()
Definition: player.h:34
~PlayerComponent()
Definition: player.cpp:35
void EventHandler(Event &event)
Definition: player.cpp:68
void SetControllerComponent(ControllerComponent *comp)
Definition: player.h:28
void SetNoclip(bool value)
Definition: player.cpp:39
void Start()
Definition: player.h:29
void SetKeyboardLook(bool value)
Definition: player.cpp:44
quat GetLookRotation()
Definition: player.h:33
PlayerComponent()
Definition: player.cpp:25
void Init()
Initializes an entity component.
Definition: player.cpp:29
Serialization, i.e.
glm::vec3 vec3
Definition: math.h:11
glm::quat quat
Definition: math.h:12
Event data.
Definition: event.h:24
================================================ FILE: docs/cppapi/components_2render_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/render.cpp File Reference
Tramway SDK v0.1.1
render.cpp File Reference
#include <render/api.h>
#include <components/render.h>
#include <components/animation.h>
#include <framework/entity.h>
#include <render/scene.h>
#include <render/light.h>
#include <config.h>

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/components_2render_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/render.h File Reference
Tramway SDK v0.1.1
render.h File Reference
#include <render/model.h>

Go to the source code of this file.

Classes

class  tram::RenderComponent
 Renders a Model. More...
 

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/components_2render_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/render.h Source File
Tramway SDK v0.1.1
render.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_COMPONENTS_RENDERCOMPONENT_H
4#define TRAM_SDK_COMPONENTS_RENDERCOMPONENT_H
5
6#include <render/model.h>
7
8namespace tram {
9
10class AnimationComponent;
11
13public:
16 inline Render::Model* GetModel() { return model.get(); }
17
18 inline name_t GetLightmap() { return (lightmap.get() == nullptr) ? 0 : lightmap->GetName();};
19
20 void SetModel(name_t name);
21 void SetLightmap(name_t name);
22 void SetEnvironmentMap(Render::Material* material);
23 void SetArmature(AnimationComponent* armature);
24
25 void Start();
26
27 vec3 GetLocation() const { return location; }
28 quat GetRotation() const { return rotation; }
29 vec3 GetScale() const { return scale; }
30
31 void SetLocation(vec3 nlocation);
32 void SetRotation(quat nrotation);
33 void SetScale(vec3 scale);
34 void SetColor(vec3 color);
35 void SetLayer(uint32_t layer);
36 void SetTextureOffset(name_t material, vec4 offset);
37
38 void SetDirectionaLight(bool enabled);
39 void SetRenderDebug(bool enabled);
40
41 void EventHandler(Event &event) { return; }
42protected:
44 void RefreshAABB();
45
49
50 std::vector<Render::drawlistentry_t> draw_list_entries;
51
52 Render::Pose* pose = nullptr;
53
54 vec3 location = {0.0f, 0.0f, 0.0f};
55 quat rotation = {1.0f, 0.0f, 0.0f, 0.0f};
56 vec3 scale = {1.0f, 1.0f, 1.0f};
57 vec3 color = {1.0f, 1.0f, 1.0f};
58 uint32_t layer = 0;
59
60 void* aabb_tree_leaf = 0;
61
62 uint32_t render_flags = 0;
63};
64
65}
66
67#endif // TRAM_SDK_COMPONENTS_RENDERCOMPONENT_H
Plays back Animations.
Definition: animation.h:13
Component base class.
Definition: entitycomponent.h:16
Material resource.
Definition: material.h:31
Definition: model.h:27
Renders a Model.
Definition: render.h:12
void EventHandler(Event &event)
Definition: render.h:41
vec3 color
Definition: render.h:57
void SetLightmap(name_t name)
Sets the lightmap for the model.
Definition: render.cpp:53
ResourceProxy< Render::Model > model
Definition: render.h:46
vec3 location
Definition: render.h:54
uint32_t render_flags
Definition: render.h:62
void RefreshAABB()
Definition: render.cpp:277
std::vector< Render::drawlistentry_t > draw_list_entries
Definition: render.h:50
void SetRenderDebug(bool enabled)
Sets render debugging.
Definition: render.cpp:142
name_t GetLightmap()
Definition: render.h:18
void SetDirectionaLight(bool enabled)
Sets the world parameters for model rendering.
Definition: render.cpp:123
Render::Model * GetModel()
Definition: render.h:16
ResourceProxy< Render::Material > lightmap
Definition: render.h:47
void SetEnvironmentMap(Render::Material *material)
Sets the environment map for the model.
Definition: render.cpp:66
void SetLocation(vec3 nlocation)
Sets the location of the model.
Definition: render.cpp:159
vec3 GetScale() const
Definition: render.h:29
~RenderComponent()
Definition: render.cpp:108
void Start()
Definition: render.cpp:260
uint32_t layer
Definition: render.h:58
RenderComponent()
Definition: render.cpp:104
void InsertDrawListEntries()
Definition: render.cpp:285
void SetModel(name_t name)
Set the model that the component will render.
Definition: render.cpp:33
quat rotation
Definition: render.h:55
void SetArmature(AnimationComponent *armature)
Links an AnimationComponent.
Definition: render.cpp:88
quat GetRotation() const
Definition: render.h:28
vec3 GetLocation() const
Definition: render.h:27
void SetRotation(quat nrotation)
Sets the rotation of the model.
Definition: render.cpp:180
void SetTextureOffset(name_t material, vec4 offset)
Definition: render.cpp:221
void SetScale(vec3 scale)
Sets the scale of the model.
Definition: render.cpp:195
void SetLayer(uint32_t layer)
Definition: render.cpp:209
void * aabb_tree_leaf
Definition: render.h:60
ResourceProxy< Render::Material > environmentmap
Definition: render.h:48
vec3 scale
Definition: render.h:56
void SetColor(vec3 color)
Sets the scale of the model.
Definition: render.cpp:242
Render::Pose * pose
Definition: render.h:52
Definition: resource.h:46
Serialization, i.e.
glm::vec4 vec4
Definition: math.h:15
glm::vec3 vec3
Definition: math.h:11
glm::quat quat
Definition: math.h:12
Event data.
Definition: event.h:24
Definition: animation.h:35
Interned string type.
Definition: uid.h:10
================================================ FILE: docs/cppapi/components_2sprite_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/sprite.cpp File Reference
Tramway SDK v0.1.1
sprite.cpp File Reference
#include <render/api.h>
#include <render/vertices.h>
#include <render/material.h>
#include <components/sprite.h>
#include <framework/logging.h>
#include <config.h>

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/components_2sprite_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/sprite.h File Reference
Tramway SDK v0.1.1
sprite.h File Reference
#include <render/render.h>
#include <render/sprite.h>

Go to the source code of this file.

Classes

class  tram::SpriteComponent
 Provides amusing graphical effects. More...
 

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/components_2sprite_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/sprite.h Source File
Tramway SDK v0.1.1
sprite.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_COMPONENTS_SPRITECOMPONENT_H
4#define TRAM_SDK_COMPONENTS_SPRITECOMPONENT_H
5
6#include <render/render.h>
7#include <render/sprite.h>
8
9namespace tram {
10
12public:
15 inline name_t GetSprite(){ return sprite->GetName(); }
16
18 this->sprite = sprite;
19 }
20
21 void Start();
22
23 void Update();
24
25 void Play();
26
27 void Pause();
28
29 void SetPlaySpeed(size_t speed);
30
32
33 void UpdateLocation(vec3 nlocation){
34 location = nlocation;
36 }
37
38 void EventHandler(Event &event){return;}
39
40protected:
42
44
45 size_t anim_frame = 0;
46 size_t anim_speed = 0;
47 size_t anim_bframe = 0;
48 bool anim_isplaying = false;
49
53};
54
55}
56
57#endif // TRAM_SDK_COMPONENTS_SPRITECOMPONENT_H
Component base class.
Definition: entitycomponent.h:16
Sprite resource.
Definition: sprite.h:23
Definition: resource.h:46
Provides amusing graphical effects.
Definition: sprite.h:11
void UpdateLocation(vec3 nlocation)
Definition: sprite.h:33
void UpdateRenderListObject()
Definition: sprite.cpp:69
vec3 location
Definition: sprite.h:43
Render::spritearray_t sprite_array
Definition: sprite.h:52
void SetSprite(Render::Sprite *sprite)
Definition: sprite.h:17
size_t anim_bframe
Definition: sprite.h:47
ResourceProxy< Render::Sprite > sprite
Definition: sprite.h:41
void EventHandler(Event &event)
Definition: sprite.h:38
void Pause()
Definition: sprite.cpp:102
void Update()
Definition: sprite.cpp:53
size_t anim_frame
Definition: sprite.h:45
void Start()
Definition: sprite.cpp:33
size_t anim_speed
Definition: sprite.h:46
Render::drawlistentry_t draw_list_entry
Definition: sprite.h:50
SpriteComponent()
Definition: sprite.h:13
~SpriteComponent()
Definition: sprite.cpp:27
void Play()
Definition: sprite.cpp:98
bool anim_isplaying
Definition: sprite.h:48
void SetPlaySpeed(size_t speed)
Definition: sprite.cpp:106
Render::vertexarray_t vertex_array
Definition: sprite.h:51
name_t GetSprite()
Definition: sprite.h:15
Serialization, i.e.
glm::vec3 vec3
Definition: math.h:11
Event data.
Definition: event.h:24
Definition: render.h:149
Definition: render.h:135
Definition: render.h:109
Interned string type.
Definition: uid.h:10
================================================ FILE: docs/cppapi/components_2trigger_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/trigger.cpp File Reference
Tramway SDK v0.1.1
trigger.cpp File Reference
#include <components/trigger.h>
#include <physics/api.h>
#include <config.h>

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/components_2trigger_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/trigger.h File Reference
Tramway SDK v0.1.1
trigger.h File Reference
#include <physics/physics.h>
#include <components/physics.h>
#include <vector>

Go to the source code of this file.

Classes

class  tram::TriggerComponent
 Trigger wrapper. More...
 

Namespaces

namespace  tram
 Serialization, i.e.
 

Typedefs

typedef void(* tram::collision_callback) (TriggerComponent *, Physics::Collision)
 
typedef bool(* tram::filter_callback) (TriggerComponent *, PhysicsComponent *)
 
================================================ FILE: docs/cppapi/components_2trigger_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/trigger.h Source File
Tramway SDK v0.1.1
trigger.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_COMPONENTS_TRIGGERCOMPONENT_H
4#define TRAM_SDK_COMPONENTS_TRIGGERCOMPONENT_H
5
6#include <physics/physics.h>
8
9#include <vector>
10
11namespace tram {
12
13class TriggerComponent;
14
17
19public:
20 TriggerComponent() : model(this){}
22 void EventHandler(Event &event){};
23 void Start();
24
25 Physics::CollisionModel* GetModel() { return model.get(); }
26 void SetModel(name_t model) { this->model = Physics::CollisionModel::Find(model); }
27 void SetModel(Physics::CollisionModel* model) { this->model = model; }
29
30 void SetActivationCallback(collision_callback activation) { this->activation = activation; }
31 void SetDectivationCallback(collision_callback deactivation) { this->deactivation = deactivation; }
32 void SetFilterCallback(filter_callback filter) { this->filter = filter; }
33
34 void SetCollisionMask(uint32_t flags);
35 void SetCollisionGroup(uint32_t flags);
36
37 void SetStoreCollisions(bool store_collisions) { this->store_collisions = store_collisions; }
38
39 uint32_t GetCollisionMask() { return collisionMask; }
40 uint32_t GetCollisionGroup() { return collisionGroup; }
41
42 void SetLocation(vec3 location);
43 void SetRotation(quat rotation);
44
45 const std::vector<Physics::Collision>& GetStoredCollisions() { return stored_collisions; }
46
47 // why are these not private/protected?
48 // TODO: fix
49 void Collision(const Physics::Collision& collision);
50 void ResetCollisions();
51
52 std::vector<Physics::Collision> Poll();
53private:
55
56 // TODO: why camelCase?
57 uint32_t collisionMask = -1;
58 uint32_t collisionGroup = -1;
59
60 // TODO: change to {} initialization?
61 vec3 location = vec3(0.0f, 0.0f, 0.0f);
62 quat rotation = vec3(0.0f, 0.0f, 0.0f);
63
64 Physics::collisionshape_t shape = {nullptr};
65 Physics::trigger_t trigger = {nullptr};
66
67 collision_callback activation = nullptr;
68 collision_callback deactivation = nullptr;
69 filter_callback filter = nullptr;
70
71 bool store_collisions = false;
72
73 std::vector<std::pair<uint32_t, Physics::Collision>> active_collisions;
74
75 std::vector<Physics::Collision> stored_collisions;
76};
77
78}
79
80#endif // TRAM_SDK_COMPONENTS_TRIGGERCOMPONENT_H
Component base class.
Definition: entitycomponent.h:16
Physics CollisionShape model.
Definition: collisionmodel.h:11
static CollisionModel * Find(name_t model_name)
Finds a model.
Definition: collisionmodel.cpp:31
Rigidbody wrapper.
Definition: physics.h:12
Definition: resource.h:46
Trigger wrapper.
Definition: trigger.h:18
uint32_t GetCollisionMask()
Definition: trigger.h:39
void SetLocation(vec3 location)
Sets the location of the component.
Definition: trigger.cpp:79
void EventHandler(Event &event)
Definition: trigger.h:22
void SetModel(name_t model)
Definition: trigger.h:26
void SetDectivationCallback(collision_callback deactivation)
Definition: trigger.h:31
void Start()
Definition: trigger.cpp:23
void SetStoreCollisions(bool store_collisions)
Definition: trigger.h:37
void ResetCollisions()
Resets registered collisions.
Definition: trigger.cpp:126
void SetCollisionGroup(uint32_t flags)
Sets a collision group for the trigger.
Definition: trigger.cpp:70
uint32_t GetCollisionGroup()
Definition: trigger.h:40
~TriggerComponent()
Definition: trigger.cpp:45
void SetCollisionMask(uint32_t flags)
Sets a collision mask for the trigger.
Definition: trigger.cpp:59
Physics::CollisionModel * GetModel()
Definition: trigger.h:25
void SetFilterCallback(filter_callback filter)
Definition: trigger.h:32
TriggerComponent()
Definition: trigger.h:20
void SetActivationCallback(collision_callback activation)
Definition: trigger.h:30
void Collision(const Physics::Collision &collision)
Registers a collision.
Definition: trigger.cpp:98
std::vector< Physics::Collision > Poll()
Checks for collisions with the trigger.
Definition: trigger.cpp:145
void SetModel(Physics::CollisionModel *model)
Definition: trigger.h:27
void SetShape(Physics::CollisionShape shape)
Sets a collision shape for the trigger.
Definition: trigger.cpp:52
const std::vector< Physics::Collision > & GetStoredCollisions()
Definition: trigger.h:45
void SetRotation(quat rotation)
Sets the rotation of the component.
Definition: trigger.cpp:88
Serialization, i.e.
void(* collision_callback)(TriggerComponent *, Physics::Collision)
Definition: trigger.h:15
bool(* filter_callback)(TriggerComponent *, PhysicsComponent *)
Definition: trigger.h:16
glm::vec3 vec3
Definition: math.h:11
glm::quat quat
Definition: math.h:12
Event data.
Definition: event.h:24
Physics collision data.
Definition: physics.h:34
Shape for a collider.
Definition: collisionshape.h:32
Definition: physics.h:43
Interned string type.
Definition: uid.h:10
================================================ FILE: docs/cppapi/config_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/config.h File Reference
Tramway SDK v0.1.1
config.h File Reference
#include <cstdint>

Go to the source code of this file.

Namespaces

namespace  tram
 Serialization, i.e.
 

Variables

const uint32_t tram::MAX_MATERIAL_TYPES = 20
 
const uint32_t tram::MAX_VERTEX_FORMATS = 20
 
const uint32_t tram::MAX_VERTEX_SHADERS = 20
 
const uint32_t tram::MAX_FRAGMENT_SHADERS = 20
 
const uint32_t tram::MAX_LINKED_SHADERS = 40
 
const float tram::TICK_RATE = 1.0f / 60.0f
 
const float tram::CAMERA_MULTIPLIER = 1.0f / 8.0f
 
const float tram::PHYSICS_GROUND_PLANE = -9.0f
 
const float tram::PHYSICS_GRAVITY = -9.8f
 
const uint32_t tram::RESOURCE_LIMIT_SOUND = 100
 
const uint32_t tram::RESOURCE_LIMIT_MODEL = 100
 
const uint32_t tram::RESOURCE_LIMIT_PATH = 100
 
const uint32_t tram::RESOURCE_LIMIT_COLLISION_MODEL = 500
 
const uint32_t tram::RESOURCE_LIMIT_MATERIAL = 500
 
const uint32_t tram::RESOURCE_LIMIT_SPRITE = 500
 
const uint32_t tram::RESOURCE_LIMIT_LIGHT_GRAPH = 250
 
const uint32_t tram::RESOURCE_LIMIT_SOUND_GRAPH = 250
 
const uint32_t tram::COMPONENT_LIMIT_ANIMATION = 50
 
const uint32_t tram::COMPONENT_LIMIT_AUDIO = 150
 
const uint32_t tram::COMPONENT_LIMIT_CONTROLLER = 25
 
const uint32_t tram::COMPONENT_LIMIT_LIGHT = 250
 
const uint32_t tram::COMPONENT_LIMIT_PARTICLE = 100
 
const uint32_t tram::COMPONENT_LIMIT_PHYSICS = 500
 
const uint32_t tram::COMPONENT_LIMIT_PLAYER = 5
 
const uint32_t tram::COMPONENT_LIMIT_RENDER = 1000
 
const uint32_t tram::COMPONENT_LIMIT_SPRITE = 100
 
const uint32_t tram::COMPONENT_LIMIT_DECAL = 100
 
const uint32_t tram::COMPONENT_LIMIT_TRIGGER = 50
 
const size_t tram::PATH_LIMIT = 200
 
const size_t tram::SYSTEM_LIMIT = 128
 
const uint32_t tram::SCRIPTABLE_ENTITY_TYPE_LIMIT = 50
 
const uint32_t tram::ENTITY_TYPE_LIMIT = 50
 
const uint32_t tram::RESOURCE_LOADER_QUEUE_LIMIT = 1000
 
const uint32_t tram::RESOURCE_LOADER_REQUEST_LIMIT = 1750
 
const uint32_t tram::ENTITY_LIMIT = 5000
 
const uint32_t tram::NAMED_ENTITY_LIMIT = 500
 
const uint32_t tram::LANUGAGE_STRING_CHARACTER_LIMIT = 10000
 
const uint32_t tram::LANGUAGE_STRING_LIMIT = 500
 
const uint32_t tram::MESSAGE_QUEUE_LIMIT = 500
 
const uint32_t tram::MESSAGE_PRIORITY_QUEUE_LIMIT = 250
 
const uint32_t tram::MESSAGE_DATA_LIMIT = 2000
 
const uint32_t tram::MESSAGE_TYPE_LIMIT = 100
 
const uint32_t tram::SIGNAL_TYPE_LIMIT = 100
 
const uint32_t tram::WORLDCELL_TRANSITION_LIMIT = 250
 
const uint32_t tram::KEYBOARDACTION_LIMIT = 100
 
const uint32_t tram::UID_CHARACTER_LIMIT = 20000
 
const uint32_t tram::UID_LIMIT = 2000
 
const uint32_t tram::WORLDCELL_LIMIT = 250
 
const uint32_t tram::RIGIDBODY_LIMIT = 500
 
const uint32_t tram::EXT_KITCHENSINK_ANIMATIONTABLE_LIMIT = 100
 
const uint32_t tram::EXT_KITCHENSINK_SOUNDTABLE_LIMIT = 100
 
================================================ FILE: docs/cppapi/config_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/config.h Source File
Tramway SDK v0.1.1
config.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3// This is the configuration file for the library portion of the framework.
4// If you change anything in here, you'll need to recompile everything.
5
6#ifndef TRAM_SDK_CONFIG_H
7#define TRAM_SDK_CONFIG_H
8
9#include <cstdint>
10
11namespace tram {
12
13const uint32_t MAX_MATERIAL_TYPES = 20;
14const uint32_t MAX_VERTEX_FORMATS = 20;
15
16const uint32_t MAX_VERTEX_SHADERS = 20;
17const uint32_t MAX_FRAGMENT_SHADERS = 20;
18const uint32_t MAX_LINKED_SHADERS = 40;
19
20// Rate of fixed updates
21const float TICK_RATE = 1.0f / 60.0f;
22
23// Initial first person camera sensitivity
24const float CAMERA_MULTIPLIER = 1.0f / 8.0f;
25
26// +---------------------------------------------------------------------------+
27// | |
28// | PHYSICS |
29// | |
30// +---------------------------------------------------------------------------+
31
32const float PHYSICS_GROUND_PLANE = -9.0f;
33const float PHYSICS_GRAVITY = -9.8f;
34
35// +---------------------------------------------------------------------------+
36// | |
37// | RESOURCE LIMITS |
38// | |
39// +---------------------------------------------------------------------------+
40
41// These numbers determine how much memory will be allocated for each Resource
42// type.
43
44// Currently the Resource pools won't get automatically extended if they run out
45// of space, so essentially these numbers limit how many instances of a
46// Resource type it will be possible to create.
47
48const uint32_t RESOURCE_LIMIT_SOUND = 100;
49const uint32_t RESOURCE_LIMIT_MODEL = 100;
50const uint32_t RESOURCE_LIMIT_PATH = 100;
51const uint32_t RESOURCE_LIMIT_COLLISION_MODEL = 500;
52const uint32_t RESOURCE_LIMIT_MATERIAL = 500;
53const uint32_t RESOURCE_LIMIT_SPRITE = 500;
54const uint32_t RESOURCE_LIMIT_LIGHT_GRAPH = 250; // same as worldcell limit
55const uint32_t RESOURCE_LIMIT_SOUND_GRAPH = 250; // ditto
56
57// +---------------------------------------------------------------------------+
58// | |
59// | COMPONENT LIMITS |
60// | |
61// +---------------------------------------------------------------------------+
62
63// Same as for Resources.
64
65const uint32_t COMPONENT_LIMIT_ANIMATION = 50;
66const uint32_t COMPONENT_LIMIT_AUDIO = 150;
67const uint32_t COMPONENT_LIMIT_CONTROLLER = 25;
68const uint32_t COMPONENT_LIMIT_LIGHT = 250;
69const uint32_t COMPONENT_LIMIT_PARTICLE = 100;
70const uint32_t COMPONENT_LIMIT_PHYSICS = 500;
71const uint32_t COMPONENT_LIMIT_PLAYER = 5;
72const uint32_t COMPONENT_LIMIT_RENDER = 1000;
73const uint32_t COMPONENT_LIMIT_SPRITE = 100;
74const uint32_t COMPONENT_LIMIT_DECAL = 100;
75const uint32_t COMPONENT_LIMIT_TRIGGER = 50;
76
77// +---------------------------------------------------------------------------+
78// | |
79// | OTHER LIMITS |
80// | |
81// +---------------------------------------------------------------------------+
82
83// Limit for file path length, e.g. "data/textures/material001.png"
84const size_t PATH_LIMIT = 200;
85
86// Limit for system count
87const size_t SYSTEM_LIMIT = 128;
88
89// Limit for scriptable entity types
90const uint32_t SCRIPTABLE_ENTITY_TYPE_LIMIT = 50;
91
92// Limit for all entity types
93const uint32_t ENTITY_TYPE_LIMIT = 50;
94
95// Limits for Async system resoruce streaming requests
96const uint32_t RESOURCE_LOADER_QUEUE_LIMIT = 1000;
97const uint32_t RESOURCE_LOADER_REQUEST_LIMIT = 1750;
98
99// Limits for entities
100const uint32_t ENTITY_LIMIT = 5000;
101const uint32_t NAMED_ENTITY_LIMIT = 500;
102
103// Limit for total sum of characters that can be stored in all language strings
104const uint32_t LANUGAGE_STRING_CHARACTER_LIMIT = 10000;
105
106// Limit for the number of lanugage strings
107const uint32_t LANGUAGE_STRING_LIMIT = 500;
108
109// Limit for enqueued messages before dispatch
110const uint32_t MESSAGE_QUEUE_LIMIT = 500;
111
112// Limit for enqueued messages with a delay
113const uint32_t MESSAGE_PRIORITY_QUEUE_LIMIT = 250;
114
115// Limit for message data, in bytes
116const uint32_t MESSAGE_DATA_LIMIT = 2000;
117
118// Limit for message types
119const uint32_t MESSAGE_TYPE_LIMIT = 100;
120
121// Limit for signal types
122const uint32_t SIGNAL_TYPE_LIMIT = 100;
123
124const uint32_t WORLDCELL_TRANSITION_LIMIT = 250;
125const uint32_t KEYBOARDACTION_LIMIT = 100;
126
127// Limit for total sum of characters that can be stored in all names
128const uint32_t UID_CHARACTER_LIMIT = 20000;
129
130// Limit for the number of names
131const uint32_t UID_LIMIT = 2000
132;
133const uint32_t WORLDCELL_LIMIT = 250;
134
135const uint32_t RIGIDBODY_LIMIT = 500;
136
137// +---------------------------------------------------------------------------+
138// | |
139// | EXTENSION LIMITS |
140// | |
141// +---------------------------------------------------------------------------+
142
143
146}
147
148#endif // TRAM_SDK_CONFIG_H
Serialization, i.e.
const uint32_t COMPONENT_LIMIT_LIGHT
Definition: config.h:68
const uint32_t RESOURCE_LIMIT_COLLISION_MODEL
Definition: config.h:51
const uint32_t ENTITY_LIMIT
Definition: config.h:100
const uint32_t MESSAGE_QUEUE_LIMIT
Definition: config.h:110
const uint32_t WORLDCELL_TRANSITION_LIMIT
Definition: config.h:124
const uint32_t EXT_KITCHENSINK_SOUNDTABLE_LIMIT
Definition: config.h:145
const uint32_t COMPONENT_LIMIT_PARTICLE
Definition: config.h:69
const uint32_t RESOURCE_LIMIT_MATERIAL
Definition: config.h:52
const float CAMERA_MULTIPLIER
Definition: config.h:24
const uint32_t MESSAGE_PRIORITY_QUEUE_LIMIT
Definition: config.h:113
const uint32_t RESOURCE_LOADER_REQUEST_LIMIT
Definition: config.h:97
const uint32_t COMPONENT_LIMIT_DECAL
Definition: config.h:74
const uint32_t MESSAGE_DATA_LIMIT
Definition: config.h:116
const uint32_t RESOURCE_LIMIT_SOUND
Definition: config.h:48
const size_t PATH_LIMIT
Definition: config.h:84
const uint32_t COMPONENT_LIMIT_SPRITE
Definition: config.h:73
const float PHYSICS_GRAVITY
Definition: config.h:33
const uint32_t COMPONENT_LIMIT_CONTROLLER
Definition: config.h:67
const float TICK_RATE
Definition: config.h:21
const uint32_t NAMED_ENTITY_LIMIT
Definition: config.h:101
const uint32_t MAX_VERTEX_FORMATS
Definition: config.h:14
const uint32_t KEYBOARDACTION_LIMIT
Definition: config.h:125
const uint32_t COMPONENT_LIMIT_AUDIO
Definition: config.h:66
const uint32_t RESOURCE_LIMIT_MODEL
Definition: config.h:49
const uint32_t RESOURCE_LIMIT_SOUND_GRAPH
Definition: config.h:55
const uint32_t COMPONENT_LIMIT_PLAYER
Definition: config.h:71
const uint32_t MAX_MATERIAL_TYPES
Definition: config.h:13
const uint32_t LANUGAGE_STRING_CHARACTER_LIMIT
Definition: config.h:104
const uint32_t RIGIDBODY_LIMIT
Definition: config.h:135
const uint32_t SIGNAL_TYPE_LIMIT
Definition: config.h:122
const uint32_t ENTITY_TYPE_LIMIT
Definition: config.h:93
const size_t SYSTEM_LIMIT
Definition: config.h:87
const uint32_t RESOURCE_LIMIT_PATH
Definition: config.h:50
const uint32_t WORLDCELL_LIMIT
Definition: config.h:133
const uint32_t UID_CHARACTER_LIMIT
Definition: config.h:128
const uint32_t COMPONENT_LIMIT_TRIGGER
Definition: config.h:75
const uint32_t LANGUAGE_STRING_LIMIT
Definition: config.h:107
const uint32_t MAX_FRAGMENT_SHADERS
Definition: config.h:17
const uint32_t MESSAGE_TYPE_LIMIT
Definition: config.h:119
const uint32_t RESOURCE_LIMIT_LIGHT_GRAPH
Definition: config.h:54
const uint32_t RESOURCE_LIMIT_SPRITE
Definition: config.h:53
const uint32_t RESOURCE_LOADER_QUEUE_LIMIT
Definition: config.h:96
const uint32_t MAX_VERTEX_SHADERS
Definition: config.h:16
const float PHYSICS_GROUND_PLANE
Definition: config.h:32
const uint32_t COMPONENT_LIMIT_PHYSICS
Definition: config.h:70
const uint32_t COMPONENT_LIMIT_ANIMATION
Definition: config.h:65
const uint32_t EXT_KITCHENSINK_ANIMATIONTABLE_LIMIT
Definition: config.h:144
const uint32_t MAX_LINKED_SHADERS
Definition: config.h:18
const uint32_t UID_LIMIT
Definition: config.h:131
const uint32_t SCRIPTABLE_ENTITY_TYPE_LIMIT
Definition: config.h:90
const uint32_t COMPONENT_LIMIT_RENDER
Definition: config.h:72
================================================ FILE: docs/cppapi/controller_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/controller.cpp File Reference
Tramway SDK v0.1.1
controller.cpp File Reference

Implementations for ControllerComponents. More...

#include <framework/entity.h>
#include <framework/message.h>
#include <framework/settings.h>
#include <components/controller.h>
#include <components/physics.h>
#include <components/trigger.h>
#include <render/render.h>
#include <config.h>

Namespaces

namespace  tram
 Serialization, i.e.
 

Detailed Description

Implementations for ControllerComponents.

================================================ FILE: docs/cppapi/controller_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/controller.h File Reference
Tramway SDK v0.1.1
controller.h File Reference

Go to the source code of this file.

Classes

class  tram::ControllerComponent
 Provides an API for character controllers. More...
 
class  tram::FPSControllerComponent
 Implementation of an FPS-style character controller. More...
 
class  tram::RaycastControllerComponent
 Implementation of a simple character controller. More...
 

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/controller_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/controller.h Source File
Tramway SDK v0.1.1
controller.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_COMPONENTS_CONTROLLERCOMPONENT_H
4#define TRAM_SDK_COMPONENTS_CONTROLLERCOMPONENT_H
5
6#include <framework/core.h>
8#include <physics/physics.h>
9
10namespace tram {
11
12class PhysicsComponent;
13class TriggerComponent;
14
16public:
17 virtual void Move(vec3 local_direction) = 0;
18
19 virtual void Run() = 0;
20 virtual void Crouch() = 0;
21 virtual void Fly() = 0;
22 virtual void Jump() = 0;
23 virtual void TurnLeft() = 0;
24 virtual void TurnRight() = 0;
25
26 virtual void Push(vec3 direction) = 0;
27
28 inline void SetCollisions(bool collide) { this->collide = collide; }
29
30 inline void SetLookDirection(quat direction) { look_direction = direction; }
31 inline quat GetLookDirection() const { return look_direction; }
32
33 static bool IsDebugInfoDraw();
34 static void SetDebugInfoDraw(bool);
35
36 static void Update();
37protected:
38 quat look_direction = {1.0f, 0.0f, 0.0f, 0.0f};
39 bool collide = true;
40};
41
43public:
44 void Start() override;
45 void EventHandler(Event &event) override {}
46
47 void Move(vec3 local_direction) override;
48
49 void Run() override;
50 void Crouch() override;
51 void Fly() override;
52 void Jump() override;
53 void TurnLeft() override;
54 void TurnRight() override;
55
56 void Push(vec3 direction) override;
57
58 inline void SetCollisionSize(float width, float height, float crouch_height) {
59 collision_width = width;
60 collision_height = height;
61 collision_height_crouch = crouch_height;
62 }
63
64 inline void SetStepHeight(float height, float crouch_height) {
65 step_height = height;
66 step_height_crouch = crouch_height;
67 }
68
70 wallbonk_callback = callback;
71 }
72
73 inline void SetWalkSpeed(float speed) { this->walk_speed = speed; }
74 inline void SetRunSpeed(float speed) { this->run_speed = speed; }
75 inline void SetCrouchSpeed(float speed) { this->crouch_speed = speed; }
76 inline void SetFlySpeed(float speed) { this->fly_speed = speed; }
77 inline void SetFriction(float friction) { this->friction = friction; }
78 inline void SetCollisionGroup(uint32_t group) { this->collision_group = group; }
79protected:
82
85
86 void ApplyDynamics();
88 void ResetMove();
89
90 vec3 velocity = {0.0f, 0.0f, 0.0f};
91 vec3 move_direction = {0.0f, 0.0f, 0.0f};
92
93
94 bool is_in_air = false;
95
96 float collision_width = 0.35f;
97 float collision_height = 1.85f;
99
100 float step_height = 0.35f;
101 float step_height_crouch = 0.15f;
102
103 float walk_speed = 0.1f;
104 float run_speed = 0.2f;
105 float crouch_speed = 0.05f;
106 float fly_speed = 0.2f;
107
108 float friction = 0.89f;
109
110 bool crouching = false;
111 bool running = false;
112 bool flying = false;
113
118
120
122
124 template <typename> friend class Pool;
125};
126
128public:
129 void Start() override;
130 void EventHandler(Event &event) override {}
131
132 void Move(vec3 local_direction) override;
133
134 void Run() override;
135 void Crouch() override;
136 void Fly() override;
137 void Jump() override;
138 void TurnLeft() override;
139 void TurnRight() override;
140
141 void Push(vec3 direction) override;
142
143 inline void SetCollisionSize(float width, float height, float crouch_height) {
144 collision_width = width;
145 collision_height = height;
146 //collision_height_crouch = crouch_height;
147 }
148
149 inline void SetStepHeight(float height, float crouch_height) {
150 step_height = height;
151 //step_height_crouch = crouch_height;
152 }
153
155 wallbonk_callback = callback;
156 }
157
158 inline void SetWalkSpeed(float speed) { this->walk_speed = speed; }
159 inline void SetRunSpeed(float speed) { this->run_speed = speed; }
160 inline void SetCrouchSpeed(float speed) { this->crouch_speed = speed; }
161 inline void SetFlySpeed(float speed) { this->fly_speed = speed; }
162 inline void SetFriction(float speed) { }
163 inline void SetCollisionGroup(uint32_t group) { this->collision_group = group; }
164protected:
167
169
170 void ApplyDynamics();
172 void ResetMove();
173
174 vec3 move_magnitude = {0.0f, 0.0f, 0.0f};
175 vec3 move_direction = {0.0f, 0.0f, 0.0f};
176
177 vec3 air_velocity = {0.0f, 0.0f, 0.0f};
178
179 bool enabled = false;
180
181 bool is_in_air = false;
182
183 float collision_width = 0.35f;
184 float collision_height = 1.85f;
185
186 float step_height = 0.35f;
187
188 float walk_speed = 0.1f;
189 float run_speed = 0.2f;
190 float crouch_speed = 0.05f;
191 float fly_speed = 0.2f;
192
193 bool crouching = false;
194 bool running = false;
195 bool flying = false;
196
197 int jump_frames = 0;
198
202
204
206
208 template <typename> friend class Pool;
209};
210
211}
212
213#endif // TRAM_SDK_COMPONENTS_CONTROLLERCOMPONENT_H
Wrapper for an EntityComponent pointer.
Definition: entitycomponent.h:51
Provides an API for character controllers.
Definition: controller.h:15
void SetCollisions(bool collide)
Definition: controller.h:28
virtual void Run()=0
virtual void TurnRight()=0
virtual void Move(vec3 local_direction)=0
static bool IsDebugInfoDraw()
Definition: controller.cpp:120
virtual void Push(vec3 direction)=0
void SetLookDirection(quat direction)
Definition: controller.h:30
bool collide
Definition: controller.h:39
quat GetLookDirection() const
Definition: controller.h:31
quat look_direction
Definition: controller.h:38
virtual void TurnLeft()=0
virtual void Jump()=0
static void Update()
Updates the ControllerComponents.
Definition: controller.cpp:61
virtual void Fly()=0
virtual void Crouch()=0
static void SetDebugInfoDraw(bool)
Definition: controller.cpp:124
Component base class.
Definition: entitycomponent.h:16
Implementation of an FPS-style character controller.
Definition: controller.h:42
float collision_width
Definition: controller.h:96
void Jump() override
Definition: controller.cpp:173
float walk_speed
Definition: controller.h:103
void RecoverFromCollisions()
Definition: controller.cpp:234
void Push(vec3 direction) override
Definition: controller.cpp:153
void(* wallbonk_callback)(ControllerComponent *, Physics::Collision)
Definition: controller.h:121
void SetCollisionGroup(uint32_t group)
Definition: controller.h:78
id_t standing_on
Definition: controller.h:114
bool crouching
Definition: controller.h:110
void TurnLeft() override
Definition: controller.cpp:180
void SetWallCollisionCallback(void(*callback)(ControllerComponent *, Physics::Collision))
Definition: controller.h:69
uint32_t collision_group
Definition: controller.h:119
void SetRunSpeed(float speed)
Definition: controller.h:74
vec3 standing_pos
Definition: controller.h:116
void ApplyDynamics()
Definition: controller.cpp:189
float step_height_crouch
Definition: controller.h:101
void Crouch() override
Definition: controller.cpp:165
float friction
Definition: controller.h:108
void SetFriction(float friction)
Definition: controller.h:77
float step_height
Definition: controller.h:100
void ResetMove()
Definition: controller.cpp:387
void SetCrouchSpeed(float speed)
Definition: controller.h:75
float fly_speed
Definition: controller.h:106
void SetWalkSpeed(float speed)
Definition: controller.h:73
void EventHandler(Event &event) override
Definition: controller.h:45
float run_speed
Definition: controller.h:104
void SetStepHeight(float height, float crouch_height)
Definition: controller.h:64
vec3 velocity
Definition: controller.h:90
void SetCollisionSize(float width, float height, float crouch_height)
Definition: controller.h:58
vec3 move_direction
Definition: controller.h:91
bool is_in_air
Definition: controller.h:94
float collision_height
Definition: controller.h:97
bool running
Definition: controller.h:111
void Run() override
Definition: controller.cpp:161
void TurnRight() override
Definition: controller.cpp:184
void Start() override
Definition: controller.cpp:135
void SetFlySpeed(float speed)
Definition: controller.h:76
quat standing_rot
Definition: controller.h:117
void Fly() override
Definition: controller.cpp:169
void Move(vec3 local_direction) override
Definition: controller.cpp:157
float collision_height_crouch
Definition: controller.h:98
bool flying
Definition: controller.h:112
id_t standing_on_prev
Definition: controller.h:115
float crouch_speed
Definition: controller.h:105
Component< TriggerComponent > crouch_collision
Definition: controller.h:84
Component< TriggerComponent > walk_collision
Definition: controller.h:83
Definition: pool.h:21
Implementation of a simple character controller.
Definition: controller.h:127
vec3 move_direction
Definition: controller.h:175
bool running
Definition: controller.h:194
vec3 move_magnitude
Definition: controller.h:174
void EventHandler(Event &event) override
Definition: controller.h:130
id_t standing_on
Definition: controller.h:199
Component< TriggerComponent > wall_collision
Definition: controller.h:168
void Move(vec3 local_direction) override
Definition: controller.cpp:417
bool flying
Definition: controller.h:195
void Run() override
Definition: controller.cpp:421
uint32_t collision_group
Definition: controller.h:203
void Start() override
Definition: controller.cpp:402
vec3 standing_pos
Definition: controller.h:201
void ApplyDynamics()
Definition: controller.cpp:456
void SetCollisionGroup(uint32_t group)
Definition: controller.h:163
float collision_width
Definition: controller.h:183
void Crouch() override
Definition: controller.cpp:425
vec3 air_velocity
Definition: controller.h:177
float collision_height
Definition: controller.h:184
void Fly() override
Definition: controller.cpp:429
void TurnRight() override
Definition: controller.cpp:451
void SetStepHeight(float height, float crouch_height)
Definition: controller.h:149
void SetCollisionSize(float width, float height, float crouch_height)
Definition: controller.h:143
void TurnLeft() override
Definition: controller.cpp:447
void Jump() override
Definition: controller.cpp:433
void Push(vec3 direction) override
Definition: controller.cpp:413
int jump_frames
Definition: controller.h:197
void SetFriction(float speed)
Definition: controller.h:162
void ResetMove()
Definition: controller.cpp:564
void(* wallbonk_callback)(ControllerComponent *, Physics::Collision)
Definition: controller.h:205
bool enabled
Definition: controller.h:179
bool crouching
Definition: controller.h:193
bool is_in_air
Definition: controller.h:181
void SetFlySpeed(float speed)
Definition: controller.h:161
void SetCrouchSpeed(float speed)
Definition: controller.h:160
float fly_speed
Definition: controller.h:191
float crouch_speed
Definition: controller.h:190
float run_speed
Definition: controller.h:189
float walk_speed
Definition: controller.h:188
void RecoverFromCollisions()
Definition: controller.cpp:495
float step_height
Definition: controller.h:186
void SetWalkSpeed(float speed)
Definition: controller.h:158
id_t standing_on_prev
Definition: controller.h:200
void SetWallCollisionCallback(void(*callback)(ControllerComponent *, Physics::Collision))
Definition: controller.h:154
void SetRunSpeed(float speed)
Definition: controller.h:159
@ COLL_PLAYER
Definition: physics.h:29
Serialization, i.e.
uint32_t id_t
Definition: core.h:10
glm::vec3 vec3
Definition: math.h:11
glm::quat quat
Definition: math.h:12
Event data.
Definition: event.h:24
Physics collision data.
Definition: physics.h:34
================================================ FILE: docs/cppapi/core_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/core.cpp File Reference
Tramway SDK v0.1.1
core.cpp File Reference

Core functionality of the framework. More...

#include <framework/core.h>
#include <framework/event.h>
#include <framework/system.h>
#include <framework/uid.h>
#include <framework/logging.h>
#include <platform/api.h>
#include <config.h>
#include <iostream>
#include <cassert>

Namespaces

namespace  tram
 Serialization, i.e.
 

Functions

id_t tram::GenerateID ()
 Generates a unique ID number. More...
 
uint32_t tram::GetTick ()
 Returns the current tick. More...
 
uint32_t tram::GetFrame ()
 Returns the current frame. More...
 
uint32_t tram::GetDeltaTick ()
 Returns the tick delta. More...
 
double tram::GetTickTime ()
 Same as GetFrameTime() More...
 
double tram::GetFrameTime ()
 Returns the time at the start of the current frame. More...
 
float tram::GetDeltaTime ()
 Returns the time passed between frames. More...
 
const char * tram::GetVersion ()
 Returns the version identifier of the runtime. More...
 

Detailed Description

Core functionality of the framework.

================================================ FILE: docs/cppapi/core_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/core.h File Reference
Tramway SDK v0.1.1
core.h File Reference
#include <cstdint>

Go to the source code of this file.

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Core
 

Typedefs

typedef uint32_t tram::id_t
 

Functions

id_t tram::GenerateID ()
 Generates a unique ID number. More...
 
uint32_t tram::GetTick ()
 Returns the current tick. More...
 
uint32_t tram::GetFrame ()
 Returns the current frame. More...
 
double tram::GetTickTime ()
 Same as GetFrameTime() More...
 
double tram::GetFrameTime ()
 Returns the time at the start of the current frame. More...
 
uint32_t tram::GetDeltaTick ()
 Returns the tick delta. More...
 
float tram::GetDeltaTime ()
 Returns the time passed between frames. More...
 
const char * tram::GetVersion ()
 Returns the version identifier of the runtime. More...
 
void tram::Core::Init ()
 Initializes the core of the framework. More...
 
void tram::Core::Update ()
 Updates the core system. More...
 
================================================ FILE: docs/cppapi/core_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/core.h Source File
Tramway SDK v0.1.1
core.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_FRAMEWORK_CORE_H
4#define TRAM_SDK_FRAMEWORK_CORE_H
5
6#include <cstdint>
7
8namespace tram {
9
10typedef uint32_t id_t;
11
13
14uint32_t GetTick();
15uint32_t GetFrame();
16
17double GetTickTime();
18double GetFrameTime();
19
20uint32_t GetDeltaTick();
21float GetDeltaTime();
22
23const char* GetVersion();
24
25namespace Core {
26 void Init();
27 void Update();
28}
29
30}
31
32#endif // TRAM_SDK_FRAMEWORK_CORE_H
void Init()
Initializes the core of the framework.
Definition: core.cpp:42
void Update()
Updates the core system.
Definition: core.cpp:57
Serialization, i.e.
uint32_t id_t
Definition: core.h:10
double GetTickTime()
Same as GetFrameTime()
Definition: core.cpp:114
const char * GetVersion()
Returns the version identifier of the runtime.
Definition: core.cpp:134
uint32_t GetTick()
Returns the current tick.
Definition: core.cpp:95
uint32_t GetFrame()
Returns the current frame.
Definition: core.cpp:101
uint32_t GetDeltaTick()
Returns the tick delta.
Definition: core.cpp:108
id_t GenerateID()
Generates a unique ID number.
Definition: core.cpp:35
double GetFrameTime()
Returns the time at the start of the current frame.
Definition: core.cpp:121
float GetDeltaTime()
Returns the time passed between frames.
Definition: core.cpp:129
================================================ FILE: docs/cppapi/crate_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/crate.cpp File Reference
Tramway SDK v0.1.1
crate.cpp File Reference

Namespaces

namespace  tram
 Serialization, i.e.
 

Enumerations

enum  { tram::FIELD_MODEL , tram::FIELD_COLLMODEL }
 
================================================ FILE: docs/cppapi/crate_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/crate.h File Reference
Tramway SDK v0.1.1
crate.h File Reference

Go to the source code of this file.

Classes

class  tram::Crate
 3D Model with a rigidbody attached to it. More...
 

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/crate_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/crate.h Source File
Tramway SDK v0.1.1
crate.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_ENTITIES_CRATE_H
4#define TRAM_SDK_ENTITIES_CRATE_H
5
6#include <framework/entity.h>
9
10namespace tram {
11
12class RenderComponent;
13class PhysicsComponent;
14
15class Crate : public Entity {
16public:
17 Crate(const SharedEntityData&, const ValueArray&);
18
19 Crate(const char* nname, const char* modelname, const char* collisionmodelname, vec3 pos, vec3 rot);
20 void UpdateParameters();
21 void SetParameters();
22 void Load();
23 void Unload();
24 void Serialize();
25 void MessageHandler(Message& msg);
27 static void Register();
28protected:
31
34};
35
36}
37
38#endif // TRAM_SDK_ENTITIES_CRATE_H
Wrapper for an EntityComponent pointer.
Definition: entitycomponent.h:51
3D Model with a rigidbody attached to it.
Definition: crate.h:15
void SetParameters()
Called when either Entity::SetLocation or Entity::SetRotation is called.
Definition: crate.cpp:80
void UpdateParameters()
Called when Entity::UpdateTransform is called.
Definition: crate.cpp:68
name_t GetType()
Returns the type of the entity.
Definition: crate.cpp:50
Crate(const SharedEntityData &, const ValueArray &)
Definition: crate.cpp:54
void Serialize()
Definition: crate.cpp:116
void Load()
Loads an entity.
Definition: crate.cpp:87
name_t collmodel
Definition: crate.h:33
Component< PhysicsComponent > physicscomponent
Definition: crate.h:30
Component< RenderComponent > rendercomponent
Definition: crate.h:29
void Unload()
Unloads an entity.
Definition: crate.cpp:107
name_t model
Definition: crate.h:32
void MessageHandler(Message &msg)
Allows entities to receive messages.
Definition: crate.cpp:121
static void Register()
Definition: crate.cpp:32
Entity base class.
Definition: entity.h:23
Definition: value.h:314
Serialization, i.e.
glm::vec3 vec3
Definition: math.h:11
Message data.
Definition: message.h:16
Basic Entity parameters.
Definition: entity.h:132
Interned string type.
Definition: uid.h:10
================================================ FILE: docs/cppapi/debug_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/debug.cpp File Reference
Tramway SDK v0.1.1
debug.cpp File Reference
#include <extensions/menu/debug.h>
#include <render/scene.h>
#include <physics/api.h>
#include <render/api.h>
#include <components/render.h>
#include <components/audio.h>
#include <components/animation.h>
#include <components/controller.h>
#include <components/light.h>
#include <framework/entity.h>
#include <framework/logging.h>
#include <framework/settings.h>
#include <framework/worldcell.h>
#include <framework/stats.h>
#include <framework/script.h>
#include <cstring>
#include <deque>

Classes

struct  tram::Ext::Menu::Intercept
 
struct  tram::Ext::Menu::MessageIntercept
 
struct  tram::Ext::Menu::EventIntercept
 
struct  tram::Ext::Menu::LogIntercept
 

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Ext
 
namespace  tram::Ext::Menu
 Menu framework.
 

Functions

void tram::Ext::Menu::InitCallbacks ()
 
void tram::Ext::Menu::UpdateCallbacks ()
 

Variables

std::deque< std::string > tram::Ext::Menu::console_logs
 
std::vector< Intercept * > tram::Ext::Menu::intercepts
 
================================================ FILE: docs/cppapi/debug_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/debug.h File Reference
Tramway SDK v0.1.1
debug.h File Reference
================================================ FILE: docs/cppapi/debug_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/debug.h Source File
Tramway SDK v0.1.1
debug.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_EXTENSIONS_MENU_DEBUG_H
4#define TRAM_SDK_EXTENSIONS_MENU_DEBUG_H
5
7
8#include <functional>
9
10namespace tram {
11 class WorldCell;
12}
13
14namespace tram::Ext::Menu {
15
16void InitCallbacks();
17void UpdateCallbacks();
18
19class InterceptMenu;
20class StatisticsMenu;
21
22class DebugMenu : public Menu {
23public:
24 void Display();
25 uint32_t Layer() { return 0; }
26 ~DebugMenu() = default;
27protected:
28 static bool intercept_enabled;
29 static bool statistics_enabled;
32};
33
34class EntityProperties : public Menu {
35public:
36 void SetPicked(id_t entity);
37 uint32_t Layer() { return 1; }
38 void Display();
39 ~EntityProperties() = default;
40protected:
42};
43
44class EntityPicker : public Menu {
45public:
47 uint32_t Layer() { return 1; }
48 void Display();
49 ~EntityPicker() = default;
50protected:
52};
53
54class ListSelection : public Menu {
55public:
56 ListSelection(std::function<void(uint32_t)> callback, std::vector<std::string> list);
57 uint32_t Layer() { return 2; }
58 void Display();
59 ~ListSelection() = default;
60protected:
61 std::function<void(uint32_t)> callback;
62 std::vector<std::string> list;
63};
64
65class MessageSend : public Menu {
66public:
67 void SetEntity(id_t entity);
68 void SetMessageType(uint32_t type);
69 uint32_t Layer() { return 1; }
70 void Display();
71 ~MessageSend() = default;
72protected:
73 uint32_t parameter_type = 0;
75 uint32_t message_type = 0;
76 char parameter_string[32] = "";
77};
78
79class InterceptMenu : public Menu {
80public:
81 void Display();
82 uint32_t Layer() { return 0; }
83 inline void SetOffset(uint32_t offset) { this->offset = offset; }
84 ~InterceptMenu() = default;
85protected:
86 uint32_t offset = 0;
87};
88
89class WorldCellProperties : public Menu {
90public:
92 uint32_t Layer() { return 1; }
93 void Display();
95protected:
96 WorldCell* cell = nullptr;
97};
98
99class StatisticsMenu : public Menu {
100public:
101 void Display();
102 uint32_t Layer() { return 0; }
103 ~StatisticsMenu() = default;
104};
105
106class EventEmit : public Menu {
107public:
108 void SetEventType(uint32_t type) { event_type = type; }
109 uint32_t Layer() { return 1; }
110 void Display();
111 ~EventEmit() = default;
112protected:
113 uint16_t subtype = 0;
114 uint32_t parameter_type = 0;
115 uint32_t event_type = 0;
116 char subtype_string[8] = "0";
117 char parameter_string[32] = "";
118};
119
120class SignalMenu : public Menu {
121public:
122 void SetEntity(id_t entity) { entity_id = entity; }
123 void Display();
124 uint32_t Layer() { return 2; }
125 ~SignalMenu() = default;
126protected:
128};
129
130class Options : public Menu {
131public:
132 Options() = default;
133 uint32_t Layer() { return 1; }
134 void Display();
135 ~Options() = default;
136};
137
138class Console : public Menu {
139public:
140 Console();
141 uint32_t Layer() { return 1; }
142 void Display();
143 ~Console();
144protected:
145 char* text = nullptr;
147};
148
149}
150
151#endif
Definition: debug.h:138
int history_cursor
Definition: debug.h:146
uint32_t Layer()
Definition: debug.h:141
char * text
Definition: debug.h:145
Console()
Definition: debug.cpp:908
void Display()
Definition: debug.cpp:917
~Console()
Definition: debug.cpp:913
Definition: debug.h:22
static StatisticsMenu * statistics_menu
Definition: debug.h:31
void Display()
Definition: debug.cpp:260
static InterceptMenu * intercept_menu
Definition: debug.h:30
static bool intercept_enabled
Definition: debug.h:28
uint32_t Layer()
Definition: debug.h:25
static bool statistics_enabled
Definition: debug.h:29
Definition: debug.h:44
uint32_t Layer()
Definition: debug.h:47
std::function< void(id_t)> callback
Definition: debug.h:51
EntityPicker(std::function< void(id_t)> callback)
Definition: debug.cpp:398
void Display()
Definition: debug.cpp:402
Definition: debug.h:34
void SetPicked(id_t entity)
Definition: debug.cpp:347
uint32_t Layer()
Definition: debug.h:37
id_t entity
Definition: debug.h:41
void Display()
Definition: debug.cpp:351
Definition: debug.h:106
char parameter_string[32]
Definition: debug.h:117
uint32_t event_type
Definition: debug.h:115
uint32_t Layer()
Definition: debug.h:109
void Display()
Definition: debug.cpp:723
char subtype_string[8]
Definition: debug.h:116
void SetEventType(uint32_t type)
Definition: debug.h:108
uint32_t parameter_type
Definition: debug.h:114
uint16_t subtype
Definition: debug.h:113
Definition: debug.h:79
uint32_t offset
Definition: debug.h:86
uint32_t Layer()
Definition: debug.h:82
void SetOffset(uint32_t offset)
Definition: debug.h:83
void Display()
Definition: debug.cpp:551
Definition: debug.h:54
std::vector< std::string > list
Definition: debug.h:62
uint32_t Layer()
Definition: debug.h:57
ListSelection(std::function< void(uint32_t)> callback, std::vector< std::string > list)
Definition: debug.cpp:454
std::function< void(uint32_t)> callback
Definition: debug.h:61
void Display()
Definition: debug.cpp:459
Definition: menu.h:19
Definition: debug.h:65
void SetEntity(id_t entity)
Definition: debug.cpp:486
uint32_t Layer()
Definition: debug.h:69
void SetMessageType(uint32_t type)
Definition: debug.cpp:490
id_t entity_id
Definition: debug.h:74
void Display()
Definition: debug.cpp:494
uint32_t parameter_type
Definition: debug.h:73
char parameter_string[32]
Definition: debug.h:76
uint32_t message_type
Definition: debug.h:75
Definition: debug.h:130
void Display()
Definition: debug.cpp:873
uint32_t Layer()
Definition: debug.h:133
Definition: debug.h:120
uint32_t Layer()
Definition: debug.h:124
id_t entity_id
Definition: debug.h:127
void Display()
Definition: debug.cpp:780
void SetEntity(id_t entity)
Definition: debug.h:122
Definition: debug.h:99
uint32_t Layer()
Definition: debug.h:102
void Display()
Definition: debug.cpp:665
void Display()
Definition: debug.cpp:578
uint32_t Layer()
Definition: debug.h:92
void SetPicked(WorldCell *cell)
Definition: debug.cpp:574
WorldCell * cell
Definition: debug.h:96
World streaming unit.
Definition: worldcell.h:16
Menu framework.
Definition: debug.cpp:23
void UpdateCallbacks()
Definition: debug.cpp:201
void InitCallbacks()
Definition: debug.cpp:146
value_t(* function)(valuearray_t)
Definition: lua.cpp:156
Serialization, i.e.
uint32_t id_t
Definition: core.h:10
================================================ FILE: docs/cppapi/debugdrawer_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/bullet/debugdrawer.h File Reference
Tramway SDK v0.1.1
debugdrawer.h File Reference
#include <btBulletDynamicsCommon.h>
#include <framework/gui.h>

Go to the source code of this file.

Classes

class  tram::Physics::API::PhysicsDebugDraw
 

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Physics
 
namespace  tram::Physics::API
 Physics backend API.
 
================================================ FILE: docs/cppapi/debugdrawer_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/bullet/debugdrawer.h Source File
Tramway SDK v0.1.1
debugdrawer.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef PHYSICS_BULLET_DEBUGDRAWER_H
4#define PHYSICS_BULLET_DEBUGDRAWER_H
5
6#include <btBulletDynamicsCommon.h>
7#include <framework/gui.h>
8
9namespace tram::Physics::API {
10
11class PhysicsDebugDraw : public btIDebugDraw {
12public:
13
14 void drawContactPoint(const btVector3& PointOnB, const btVector3& normalOnB, btScalar distance, int lifeTime, const btVector3& color) {
15 drawLine(PointOnB, normalOnB, color);
16 };
17
18 void reportErrorWarning(const char* warningString) {
19 std::cout << warningString << std::endl;
20 };
21
22 void draw3dText(const btVector3& location, const char* textString) {
23 //GUI::DebugText(textString, {location.getX(), location.getY(), location.getZ()}, Render::COLOR_WHITE);
24 };
25
26 void setDebugMode(int debugMode) {};
27
28 int getDebugMode() const {
29 return DBG_MAX_DEBUG_DRAW_MODE;
30 }
31
32 void drawLine(const btVector3& from, const btVector3& to, const btVector3& color){
34 {from.getX(), from.getY(), from.getZ()},
35 {to.getX(), to.getY(), to.getZ()},
36 {color.getX(), color.getY(), color.getZ()}
37 );
38 }
39};
40
41}
42
43#endif // PHYSICS_BULLET_DEBUGDRAWER_H
Definition: debugdrawer.h:11
void reportErrorWarning(const char *warningString)
Definition: debugdrawer.h:18
void setDebugMode(int debugMode)
Definition: debugdrawer.h:26
void draw3dText(const btVector3 &location, const char *textString)
Definition: debugdrawer.h:22
void drawLine(const btVector3 &from, const btVector3 &to, const btVector3 &color)
Definition: debugdrawer.h:32
int getDebugMode() const
Definition: debugdrawer.h:28
void drawContactPoint(const btVector3 &PointOnB, const btVector3 &normalOnB, btScalar distance, int lifeTime, const btVector3 &color)
Definition: debugdrawer.h:14
Physics backend API.
void AddLine(vec3 from, vec3 to, vec3 color)
Draws a line for a single frame.
Definition: render.cpp:266
================================================ FILE: docs/cppapi/decal_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/decal.cpp File Reference
Tramway SDK v0.1.1
decal.cpp File Reference
#include <components/decal.h>
#include <components/render.h>
#include <render/api.h>
#include <render/scene.h>
#include <render/vertices.h>
#include <render/material.h>
#include <framework/logging.h>
#include <config.h>

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/decal_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/decal.h File Reference
Tramway SDK v0.1.1
decal.h File Reference
#include <render/render.h>
#include <render/sprite.h>

Go to the source code of this file.

Classes

class  tram::DecalComponent
 Projects decals onto the scene. More...
 

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/decal_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/decal.h Source File
Tramway SDK v0.1.1
decal.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_COMPONENTS_DECALCOMPONENT_H
4#define TRAM_SDK_COMPONENTS_DECALCOMPONENT_H
5
6#include <render/render.h>
7#include <render/sprite.h>
8
9namespace tram {
10
12public:
15 inline name_t GetSprite() { return sprite->GetName(); }
16
18 this->sprite = sprite;
19 }
20
21 void Start();
22
23 void Update();
24
26
27 void SetScale(float scale) {
28 this->scale = scale;
29 }
30
31 void SetFrame(uint32_t frame) {
32 this->frame = frame;
33 }
34
36 this->location = location;
38 }
39
41 this->rotation = rotation;
43 }
44
45 void EventHandler(Event &event){return;}
46protected:
48
49 vec3 location = {0.0f, 0.0f, 0.0f};
50 quat rotation = {1.0f, 0.0f, 0.0f, 0.0f};
51
52 float scale = 1.0f;
53
54 uint32_t frame = 0;
55
58};
59
60}
61
62#endif // TRAM_SDK_COMPONENTS_DECALCOMPONENT_H
Projects decals onto the scene.
Definition: decal.h:11
void Update()
Definition: decal.cpp:57
quat rotation
Definition: decal.h:50
void SetScale(float scale)
Definition: decal.h:27
void SetLocation(vec3 location)
Definition: decal.h:35
vec3 location
Definition: decal.h:49
ResourceProxy< Render::Sprite > sprite
Definition: decal.h:47
Render::drawlistentry_t draw_list_entry
Definition: decal.h:56
void UpdateRenderListObject()
Definition: decal.cpp:181
DecalComponent()
Definition: decal.h:13
void EventHandler(Event &event)
Definition: decal.h:45
uint32_t frame
Definition: decal.h:54
void SetSprite(Render::Sprite *sprite)
Definition: decal.h:17
void SetRotation(quat rotation)
Definition: decal.h:40
Render::vertexarray_t vertex_array
Definition: decal.h:57
float scale
Definition: decal.h:52
~DecalComponent()
Definition: decal.cpp:32
void Start()
Definition: decal.cpp:38
void SetFrame(uint32_t frame)
Definition: decal.h:31
name_t GetSprite()
Definition: decal.h:15
Component base class.
Definition: entitycomponent.h:16
Sprite resource.
Definition: sprite.h:23
Definition: resource.h:46
Serialization, i.e.
glm::vec3 vec3
Definition: math.h:11
glm::quat quat
Definition: math.h:12
Event data.
Definition: event.h:24
Definition: render.h:149
Definition: render.h:109
Interned string type.
Definition: uid.h:10
================================================ FILE: docs/cppapi/decoration_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/decoration.cpp File Reference
Tramway SDK v0.1.1
decoration.cpp File Reference

Namespaces

namespace  tram
 Serialization, i.e.
 

Enumerations

enum  : uint32_t { tram::FLAG_LOCKED = 1 }
 
enum  { tram::FIELD_FLAGS , tram::FIELD_MODEL , tram::FIELD_ANIMATION }
 
================================================ FILE: docs/cppapi/decoration_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/decoration.h File Reference
Tramway SDK v0.1.1
decoration.h File Reference

Go to the source code of this file.

Classes

class  tram::Decoration
 3D Model with an AnimationComponent attached to it. More...
 

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/decoration_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/decoration.h Source File
Tramway SDK v0.1.1
decoration.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_ENTITIES_DECORATION_H
4#define TRAM_SDK_ENTITIES_DECORATION_H
5
6#include <framework/entity.h>
9
10namespace tram {
11
12class RenderComponent;
13class AnimationComponent;
14class PhysicsComponent;
15
16// TODO: add a field that lets you set how fast the animation fades
17// TODO: don't create animation component if there is no animation?
18
19class Decoration : public Entity {
20public:
22 void UpdateParameters();
23 void SetParameters();
24 void Load();
25 void Unload();
26 void Serialize();
27 void MessageHandler(Message& msg);
29 static void Register();
30protected:
34
36
39
41};
42
43}
44
45#endif // TRAM_SDK_ENTITIES_DECORATION_H
Wrapper for an EntityComponent pointer.
Definition: entitycomponent.h:51
3D Model with an AnimationComponent attached to it.
Definition: decoration.h:19
void Load()
Loads an entity.
Definition: decoration.cpp:76
static void Register()
Definition: decoration.cpp:37
uint32_t decoration_flags
Definition: decoration.h:40
Component< AnimationComponent > animationcomponent
Definition: decoration.h:32
void Serialize()
Definition: decoration.cpp:127
Component< PhysicsComponent > physicscomponent
Definition: decoration.h:33
void SetParameters()
Called when either Entity::SetLocation or Entity::SetRotation is called.
Definition: decoration.cpp:69
name_t GetType()
Returns the type of the entity.
Definition: decoration.cpp:50
Decoration(const SharedEntityData &, const ValueArray &)
Definition: decoration.cpp:54
void MessageHandler(Message &msg)
Allows entities to receive messages.
Definition: decoration.cpp:131
name_t animation
Definition: decoration.h:38
void RequestAnimationComponent()
Definition: decoration.cpp:106
name_t model
Definition: decoration.h:37
void Unload()
Unloads an entity.
Definition: decoration.cpp:117
Component< RenderComponent > rendercomponent
Definition: decoration.h:31
void UpdateParameters()
Called when Entity::UpdateTransform is called.
Definition: decoration.cpp:60
Entity base class.
Definition: entity.h:23
Definition: value.h:314
Serialization, i.e.
Message data.
Definition: message.h:16
Basic Entity parameters.
Definition: entity.h:132
Interned string type.
Definition: uid.h:10
================================================ FILE: docs/cppapi/definitions_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/spatial/definitions.h File Reference
Tramway SDK v0.1.1
definitions.h File Reference
#include <framework/math.h>
#include <templates/spinlock.h>

Go to the source code of this file.

Classes

struct  tram::Audio::Spatial::PathExplorationResult
 
struct  tram::Audio::Spatial::PathTracingResult
 
struct  tram::Audio::Spatial::PathFromAudioSource
 
struct  tram::Audio::Spatial::PathRenderingInfo
 
struct  tram::Audio::Spatial::AudioBuffer
 
struct  tram::Audio::Spatial::AudioSource
 
struct  tram::Audio::Spatial::AudioRender
 

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Audio
 System for doing audio related stuff.
 
namespace  tram::Audio::Spatial
 Experimental path tracing audio system.
 

Enumerations

enum  tram::Audio::Spatial::AudioSourceFlags : uint16_t { tram::Audio::Spatial::SOURCE_PLAYING = 1 , tram::Audio::Spatial::SOURCE_REPEATING = 2 }
 
enum  tram::Audio::Spatial::AudioSampleRate : uint16_t { tram::Audio::Spatial::SAMPLERATE_44100 = 1 , tram::Audio::Spatial::SAMPLERATE_22050 = 2 , tram::Audio::Spatial::SAMPLERATE_11025 = 4 }
 

Variables

const size_t tram::Audio::Spatial::PATHS_FOR_RENDERING = 10
 
const size_t tram::Audio::Spatial::PATHS_FOR_SOURCE = 5
 
const size_t tram::Audio::Spatial::PATHS_FOR_LISTENER = 5
 
const size_t tram::Audio::Spatial::BUFFER_COUNT = 1000
 
const size_t tram::Audio::Spatial::SOURCE_COUNT = 200
 
const size_t tram::Audio::Spatial::SOURCE_DEPTH_LIMIT = 3
 
const size_t tram::Audio::Spatial::LISTENER_DEPTH_LIMIT = 6
 
AudioBuffer tram::Audio::Spatial::audiobuffers [BUFFER_COUNT]
 
AudioSource tram::Audio::Spatial::audiosources [SOURCE_COUNT]
 
AudioRender tram::Audio::Spatial::audiorenders [SOURCE_COUNT]
 
vec3 tram::Audio::Spatial::listener_position
 
quat tram::Audio::Spatial::listener_orientation
 
int32_t tram::Audio::Spatial::listener_reverb_delay [5]
 
float tram::Audio::Spatial::listener_reverb_distance [5]
 
float tram::Audio::Spatial::listener_reverb_force [5]
 
float tram::Audio::Spatial::listener_reverb_normalized [5]
 
================================================ FILE: docs/cppapi/definitions_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/spatial/definitions.h Source File
Tramway SDK v0.1.1
definitions.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_AUDIO_SPATIAL_DEFINITIONS_H
4#define TRAM_SDK_AUDIO_SPATIAL_DEFINITIONS_H
5
6#include <framework/math.h>
7
9
11
12const size_t PATHS_FOR_RENDERING = 10;
13const size_t PATHS_FOR_SOURCE = 5;
14const size_t PATHS_FOR_LISTENER = 5;
15
16const size_t BUFFER_COUNT = 1000;
17const size_t SOURCE_COUNT = 200;
18
19const size_t SOURCE_DEPTH_LIMIT = 3;
20const size_t LISTENER_DEPTH_LIMIT = 6;
21
22// actually this might be useful!!! for both. or not
24 float force;
27};
28
29// this is the successful path that might need to be revalidated
31 float force;
32 float distance;
36
40
41 struct {
44};
45
47 struct {
50 float force;
53};
54
55// this is handed over to the rendering algorithm
57 float force;
58 float panning;
61};
62
63enum AudioSourceFlags : uint16_t {
66};
67
68enum AudioSampleRate : uint16_t {
72};
73
76 uint32_t channels;
77 size_t length;
78 float* data;
79};
80
81// Audio source information for path tracing
84
85 PathFromAudioSource* paths; // bidirectional paths
86
88 size_t last_path;
89};
90
91// Audio source information for rendering
94 uint16_t flags;
95 uint32_t sample;
98};
99
103
106
107extern int32_t listener_reverb_delay[5];
108extern float listener_reverb_distance[5];
109extern float listener_reverb_force[5];
110extern float listener_reverb_normalized[5];
111
112}
113
114#endif // TRAM_SDK_AUDIO_SPATIAL_DEFINITIONS_H
Definition: spinlock.h:13
Experimental path tracing audio system.
Definition: definitions.h:10
AudioBuffer audiobuffers[BUFFER_COUNT]
AudioSource audiosources[SOURCE_COUNT]
AudioRender audiorenders[SOURCE_COUNT]
const size_t SOURCE_COUNT
Definition: definitions.h:17
AudioSourceFlags
Definition: definitions.h:63
@ SOURCE_REPEATING
Definition: definitions.h:65
@ SOURCE_PLAYING
Definition: definitions.h:64
float listener_reverb_normalized[5]
const size_t SOURCE_DEPTH_LIMIT
Definition: definitions.h:19
int32_t listener_reverb_delay[5]
const size_t PATHS_FOR_RENDERING
Definition: definitions.h:12
float listener_reverb_distance[5]
const size_t LISTENER_DEPTH_LIMIT
Definition: definitions.h:20
const size_t PATHS_FOR_SOURCE
Definition: definitions.h:13
float listener_reverb_force[5]
const size_t PATHS_FOR_LISTENER
Definition: definitions.h:14
const size_t BUFFER_COUNT
Definition: definitions.h:16
AudioSampleRate
Definition: definitions.h:68
@ SAMPLERATE_22050
Definition: definitions.h:70
@ SAMPLERATE_11025
Definition: definitions.h:71
@ SAMPLERATE_44100
Definition: definitions.h:69
glm::vec3 vec3
Definition: math.h:11
glm::quat quat
Definition: math.h:12
Definition: definitions.h:74
AudioSampleRate sample_rate
Definition: definitions.h:75
float * data
Definition: definitions.h:78
uint32_t channels
Definition: definitions.h:76
size_t length
Definition: definitions.h:77
Definition: definitions.h:92
uint16_t flags
Definition: definitions.h:94
PathRenderingInfo * paths
Definition: definitions.h:97
uint32_t sample
Definition: definitions.h:95
AudioBuffer * buffer
Definition: definitions.h:96
Spinlock lock
Definition: definitions.h:93
Definition: definitions.h:82
PathFromAudioSource * paths
Definition: definitions.h:85
vec3 position
Definition: definitions.h:83
size_t last_path
Definition: definitions.h:88
PathTracingResult * result_paths
Definition: definitions.h:87
float force
Definition: definitions.h:24
vec3 sampling_direction
Definition: definitions.h:25
uint32_t cycles_since_last_hit
Definition: definitions.h:26
Definition: definitions.h:46
vec3 direction
Definition: definitions.h:49
float force
Definition: definitions.h:50
vec3 source_direction
Definition: definitions.h:52
vec3 point
Definition: definitions.h:48
struct tram::Audio::Spatial::PathFromAudioSource::@7 reflections[LISTENER_DEPTH_LIMIT]
Definition: definitions.h:56
int32_t panning_delay
Definition: definitions.h:59
float panning
Definition: definitions.h:58
float force
Definition: definitions.h:57
int32_t distance_delay
Definition: definitions.h:60
Definition: definitions.h:30
vec3 source_ideal_angle
Definition: definitions.h:39
uint32_t reflection_count
Definition: definitions.h:34
float force
Definition: definitions.h:31
uint32_t cycles_since_last_hit
Definition: definitions.h:33
vec3 point
Definition: definitions.h:42
vec3 listener_ideal_angle
Definition: definitions.h:38
struct tram::Audio::Spatial::PathTracingResult::@6 reflections[SOURCE_DEPTH_LIMIT *LISTENER_DEPTH_LIMIT]
vec3 arrival_direction
Definition: definitions.h:35
float distance
Definition: definitions.h:32
float reflection_absorption
Definition: definitions.h:37
================================================ FILE: docs/cppapi/deprecated.html ================================================ Tramway SDK: Deprecated List
Tramway SDK v0.1.1
Deprecated List
Member tram::Entity::RegisterType (name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)
Use other RegisterType() methods instead.
================================================ FILE: docs/cppapi/design_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/design.cpp File Reference
Tramway SDK
design.cpp File Reference
#include <extensions/kitchensink/design.h>
#include <framework/system.h>
#include <assert.h>

Namespaces

namespace  tram
 
namespace  tram::Ext
 
namespace  tram::Ext::Design
 

Functions

void tram::Ext::Design::Init ()
 
void tram::Ext::Design::Update ()
 

Variables

uint32_t tram::Ext::Design::KITCHENSINK_SYSTEM = -1u
 
================================================ FILE: docs/cppapi/design_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/design.h File Reference
Tramway SDK
design.h File Reference

Go to the source code of this file.

Namespaces

namespace  tram
 
namespace  tram::Ext
 
namespace  tram::Ext::Design
 

Functions

void tram::Ext::Design::Init ()
 
void tram::Ext::Design::Update ()
 
================================================ FILE: docs/cppapi/design_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/design.h Source File
Tramway SDK
design.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3
4// This extension basically contains a bunch of random reusable game mechanics.
5// They could be used to implement a FPS-type or an RPG-type game.
6
7#ifndef TRAM_SDK_EXTENSIONS_DESIGN_DESIGN_H
8#define TRAM_SDK_EXTENSIONS_DESIGN_DESIGN_H
9
10
11
12namespace tram::Ext::Design {
13 void Init();
14 void Update();
15}
16
17#endif // TRAM_SDK_EXTENSIONS_DESIGN_DESIGN_H
Definition: design.cpp:10
void Init()
Definition: design.cpp:14
void Update()
Definition: design.cpp:27
================================================ FILE: docs/cppapi/dialog_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/dialog.cpp File Reference
Tramway SDK v0.1.1
dialog.cpp File Reference

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Ext
 
namespace  tram::Ext::Kitchensink
 Extension containing random stuff that doesn't fit in anywhere else.
 

Functions

void tram::Ext::Kitchensink::RecursivelyAppendNextTopic (std::vector< name_t > &topics, name_t appendable)
 
================================================ FILE: docs/cppapi/dialog_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/dialog.h File Reference
Tramway SDK v0.1.1
dialog.h File Reference
#include <framework/value.h>
#include <vector>

Go to the source code of this file.

Classes

struct  tram::Ext::Kitchensink::DialogCondition
 
struct  tram::Ext::Kitchensink::DialogAction
 
struct  tram::Ext::Kitchensink::DialogTopic
 
class  tram::Ext::Kitchensink::DialogController
 

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Ext
 
namespace  tram::Ext::Kitchensink
 Extension containing random stuff that doesn't fit in anywhere else.
 

Enumerations

enum  tram::Ext::Kitchensink::DialogType { tram::Ext::Kitchensink::DIALOG_TOPIC , tram::Ext::Kitchensink::DIALOG_IMPORT_SINGLE , tram::Ext::Kitchensink::DIALOG_IMPORT_MULTIPLE }
 
================================================ FILE: docs/cppapi/dialog_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/dialog.h Source File
Tramway SDK v0.1.1
dialog.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_EXTENSIONS_KITCHENSINK_DIALOG_H
4#define TRAM_SDK_EXTENSIONS_KITCHENSINK_DIALOG_H
5
6#include <framework/value.h>
7
8#include <vector>
9
10namespace tram::Ext::Kitchensink {
11
16
17 // TODO: add greetings, etc.
18};
19
23
24 bool IsMet();
25};
26
30
31 void Perform();
32};
33
36
38
41
44
45 std::vector<name_t> next_topics;
46
47 std::vector<name_t> GetValidNextTopics();
48 void Gather(std::vector<name_t>& topics);
49
50 static void LoadFromDisk(const char* filename);
51
52 static DialogTopic* Make(name_t);
53 static DialogTopic* Find(name_t);
54};
55
57public:
58 DialogController(name_t initial_topic);
59
61 std::vector<name_t> GetPrompts();
62
63 bool ShouldExit();
64 void MoveTo(size_t prompt_index);
65private:
66 name_t initial_topic;
67 name_t current_topic;
68 name_t answer;
69 bool should_exit = false;
70 std::vector<name_t> next_topics;
71};
72
73}
74
75#endif // TRAM_SDK_EXTENSIONS_KITCHENSINK_DIALOG_H
void MoveTo(size_t prompt_index)
Definition: dialog.cpp:233
name_t GetAnswer()
Definition: dialog.cpp:187
bool ShouldExit()
Definition: dialog.cpp:200
DialogController(name_t initial_topic)
Definition: dialog.cpp:179
std::vector< name_t > GetPrompts()
Definition: dialog.cpp:191
Extension containing random stuff that doesn't fit in anywhere else.
Definition: ai.cpp:15
DialogType
Definition: dialog.h:12
@ DIALOG_IMPORT_MULTIPLE
Definition: dialog.h:15
@ DIALOG_TOPIC
Definition: dialog.h:13
@ DIALOG_IMPORT_SINGLE
Definition: dialog.h:14
void Perform()
Definition: dialog.cpp:24
name_t quest
Definition: dialog.h:28
name_t trigger
Definition: dialog.h:29
name_t variable
Definition: dialog.h:22
name_t quest
Definition: dialog.h:21
bool IsMet()
Definition: dialog.cpp:17
name_t prompt
Definition: dialog.h:39
name_t name
Definition: dialog.h:37
static DialogTopic * Make(name_t)
Definition: dialog.cpp:72
static DialogTopic * Find(name_t)
Definition: dialog.cpp:84
name_t answer
Definition: dialog.h:40
std::vector< name_t > GetValidNextTopics()
Definition: dialog.cpp:29
DialogCondition condition
Definition: dialog.h:42
DialogType type
Definition: dialog.h:35
DialogAction action
Definition: dialog.h:43
std::vector< name_t > next_topics
Definition: dialog.h:45
void Gather(std::vector< name_t > &topics)
Definition: dialog.cpp:48
static void LoadFromDisk(const char *filename)
Definition: dialog.cpp:88
Interned string type.
Definition: uid.h:10
================================================ FILE: docs/cppapi/dir_01fd219969118eefb63f711194f953b6.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render Directory Reference
Tramway SDK v0.1.1
render Directory Reference

Directories

directory  direct3d
 
directory  opengl
 
directory  software
 

Files

file  animation.cpp
 
file  animation.h [code]
 
file  api.h [code]
 
file  error.cpp
 
file  error.h [code]
 
file  light.cpp
 
file  light.h [code]
 
file  material.cpp
 
file  material.h [code]
 
file  model.cpp
 
file  model.h [code]
 
file  render.cpp
 
file  render.h [code]
 
file  renderer.cpp
 
file  renderer.h [code]
 
file  scene.cpp
 
file  scene.h [code]
 
file  sprite.cpp
 
file  sprite.h [code]
 
file  vertices.cpp
 
file  vertices.h [code]
 
================================================ FILE: docs/cppapi/dir_0235421c6a8b7ca6f3b3ad3f290c4a8b.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/platform Directory Reference
Tramway SDK v0.1.1
platform Directory Reference

Directories

directory  glfw
 
directory  sdl
 

Files

file  api.h [code]
 
file  file.cpp
 
file  file.h [code]
 
file  image.cpp
 
file  image.h [code]
 
file  other.cpp
 
file  other.h [code]
 
file  platform.h [code]
 
file  utils.cpp
 
================================================ FILE: docs/cppapi/dir_044994f9a1f49429ab82387beaf2fc8f.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/entities Directory Reference
Tramway SDK v0.1.1
entities Directory Reference

Files

file  crate.cpp
 
file  crate.h [code]
 
file  decoration.cpp
 
file  decoration.h [code]
 
file  light.cpp
 
file  light.h [code]
 
file  marker.cpp
 
file  marker.h [code]
 
file  player.cpp
 
file  player.h [code]
 
file  script.cpp
 
file  script.h [code]
 
file  sound.cpp
 
file  sound.h [code]
 
file  staticworldobject.cpp
 
file  staticworldobject.h [code]
 
file  trigger.cpp
 
file  trigger.h [code]
 
================================================ FILE: docs/cppapi/dir_04c6f28c877b0abd0b517b09d2cbe678.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/design Directory Reference
Tramway SDK
design Directory Reference

Files

file  attributes.cpp
 
file  attributes.h [code]
 
file  character.cpp
 
file  character.h [code]
 
file  design.cpp
 
file  design.h [code]
 
file  dialog.cpp
 
file  dialog.h [code]
 
file  entities.cpp
 
file  entities.h [code]
 
file  inventory.cpp
 
file  inventory.h [code]
 
file  quest.cpp
 
file  quest.h [code]
 
================================================ FILE: docs/cppapi/dir_25bfe7637bda9b4c8dc6e22485fc785f.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/platform/glfw Directory Reference
Tramway SDK v0.1.1
glfw Directory Reference

Files

file  glfw.cpp
 
================================================ FILE: docs/cppapi/dir_2dc1ac304fc37da9cbf93f53bf382100.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/software Directory Reference
Tramway SDK v0.1.1
software Directory Reference

Files

file  software.cpp
 
file  software.h [code]
 
================================================ FILE: docs/cppapi/dir_45a0510223f8d95df257ae4513f5dcf2.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/camera Directory Reference
Tramway SDK v0.1.1
camera Directory Reference

Files

file  camera.cpp
 
file  camera.h [code]
 
file  firstperson.cpp
 
file  firstperson.h [code]
 
file  following.cpp
 
file  following.h [code]
 
file  fpscamera.cpp
 
file  fpscamera.h [code]
 
file  thirdperson.cpp
 
file  thirdperson.h [code]
 
================================================ FILE: docs/cppapi/dir_486a74d7b0f57b9c55d744bdbb092905.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework Directory Reference
Tramway SDK v0.1.1
framework Directory Reference

Files

file  async.cpp
 Implementation of the Async system.
 
file  async.h [code]
 
file  core.cpp
 Core functionality of the framework.
 
file  core.h [code]
 
file  entity.cpp
 
file  entity.h [code]
 
file  entitycomponent.cpp
 
file  entitycomponent.h [code]
 
file  event.cpp
 
file  event.h [code]
 
file  file.cpp
 
file  file.h [code]
 
file  graph.cpp
 
file  graph.h [code]
 
file  gui.cpp
 
file  gui.h [code]
 
file  language.cpp
 
file  language.h [code]
 
file  loader.cpp
 
file  loader.h [code]
 
file  logging.cpp
 Logging and console printing services.
 
file  logging.h [code]
 
file  math.cpp
 GLM typedefs and useful math functions.
 
file  math.h [code]
 
file  message.cpp
 
file  message.h [code]
 
file  navmesh.cpp
 
file  navmesh.h [code]
 
file  path.cpp
 
file  path.h [code]
 
file  resource.h [code]
 
file  script.cpp
 
file  script.h [code]
 
file  serialization.h [code]
 
file  settings.cpp
 
file  settings.h [code]
 
file  signal.cpp
 
file  signal.h [code]
 
file  stats.cpp
 
file  stats.h [code]
 
file  system.cpp
 
file  system.h [code]
 
file  transition.cpp
 
file  transition.h [code]
 
file  type.cpp
 
file  type.h [code]
 
file  ui.cpp
 
file  ui.h [code]
 
file  uid.cpp
 
file  uid.h [code]
 
file  value.h [code]
 
file  worldcell.cpp
 
file  worldcell.h [code]
 
================================================ FILE: docs/cppapi/dir_4c096b243504cf129e41270299bfcecc.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/physics Directory Reference
Tramway SDK v0.1.1
physics Directory Reference

Directories

directory  bullet
 

Files

file  api.h [code]
 
file  collisionmodel.cpp
 
file  collisionmodel.h [code]
 
file  collisionshape.h [code]
 
file  physics.cpp
 
file  physics.h [code]
 
================================================ FILE: docs/cppapi/dir_6785e21a8529b80a9bb3fbf206311f99.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/scripting Directory Reference
Tramway SDK v0.1.1
scripting Directory Reference

Files

file  lua.cpp
 
file  lua.h [code]
 
================================================ FILE: docs/cppapi/dir_690097dbf5541613f26178bc15166d11.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions Directory Reference
Tramway SDK v0.1.1
extensions Directory Reference

Directories

directory  camera
 
directory  kitchensink
 
directory  menu
 
directory  scripting
 
================================================ FILE: docs/cppapi/dir_713f53f5525a4ba6a1756f0c27ee7b0f.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/templates Directory Reference
Tramway SDK v0.1.1
templates Directory Reference

Files

file  aabb.h [code]
 
file  hashmap.h [code]
 
file  macros.h [code]
 
file  octree.h [code]
 
file  pool.h [code]
 
file  queue.h [code]
 
file  spinlock.h [code]
 
file  stack.h [code]
 
file  stackpool.h [code]
 
file  test.h [code]
 
================================================ FILE: docs/cppapi/dir_725e1c32b4e378f03d60abea9fea9d5a.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu Directory Reference
Tramway SDK v0.1.1
menu Directory Reference

Files

file  debug.cpp
 
file  debug.h [code]
 
file  menu.cpp
 
file  menu.h [code]
 
file  system.cpp
 
file  system.h [code]
 
================================================ FILE: docs/cppapi/dir_72f27f6e39bba3da07977890c5e9396b.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink Directory Reference
Tramway SDK v0.1.1
kitchensink Directory Reference

Files

file  ai.cpp
 
file  ai.h [code]
 
file  animationtable.cpp
 
file  animationtable.h [code]
 
file  attributes.cpp
 
file  attributes.h [code]
 
file  character.cpp
 
file  character.h [code]
 
file  dialog.cpp
 
file  dialog.h [code]
 
file  entities.cpp
 
file  entities.h [code]
 
file  inventory.cpp
 
file  inventory.h [code]
 
file  kitchensink.cpp
 
file  kitchensink.h [code]
 
file  menu.cpp
 
file  menu.h [code]
 
file  probe.cpp
 
file  probe.h [code]
 
file  quest.cpp
 
file  quest.h [code]
 
file  soundtable.cpp
 
file  soundtable.h [code]
 
================================================ FILE: docs/cppapi/dir_7dd791b49cea2de8a9731625e7ba4332.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk Directory Reference
Tramway SDK v0.1.1
tram-sdk Directory Reference

Directories

directory  src
 
================================================ FILE: docs/cppapi/dir_81a2138add035487371796f7e3635d7f.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio Directory Reference
Tramway SDK v0.1.1
audio Directory Reference

Directories

directory  openal
 
directory  spatial
 
directory  template
 

Files

file  api.h [code]
 Audio API implementation header.
 
file  audio.cpp
 Main Audio system interface implementation.
 
file  audio.h [code]
 Main interface for the Audio system.
 
file  graph.cpp
 
file  graph.h [code]
 
file  sound.cpp
 
file  sound.h [code]
 Sound resource definition.
 
================================================ FILE: docs/cppapi/dir_8257c9d1ec427d0353bb282f2bab11cb.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/template Directory Reference
Tramway SDK v0.1.1
template Directory Reference

Files

file  template.cpp
 Template for Audio backend implementations.
 
================================================ FILE: docs/cppapi/dir_83c81f46d4e2adaa24ca143fb33abeaa.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/bullet Directory Reference
Tramway SDK v0.1.1
bullet Directory Reference

Files

file  actions.h [code]
 
file  bullet.cpp
 
file  debugdrawer.h [code]
 
================================================ FILE: docs/cppapi/dir_861a72433926be42e693eaf9e590afa7.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis Directory Reference
Tramway SDK v0.1.1
painis Directory Reference

Directories

directory  tram-sdk
 
================================================ FILE: docs/cppapi/dir_87e4469353846ab42ac7effb8e231a8f.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/openal Directory Reference
Tramway SDK v0.1.1
openal Directory Reference

Files

file  openal.cpp
 Implementation of the OpenAL Audio backend.
 
file  openal.h [code]
 
================================================ FILE: docs/cppapi/dir_bda26cb40acfb9f38f401dec877209b8.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/direct3d Directory Reference
Tramway SDK v0.1.1
direct3d Directory Reference

Files

file  direct3d.h [code]
 
file  renderer.cpp
 
================================================ FILE: docs/cppapi/dir_c902ca23ecd29d6b4b325f81f7f23ad0.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src Directory Reference
Tramway SDK v0.1.1
src Directory Reference

Directories

directory  audio
 
directory  components
 
directory  entities
 
directory  extensions
 
directory  framework
 
directory  physics
 
directory  platform
 
directory  render
 
directory  templates
 

Files

file  config.h [code]
 
file  main.cpp
 
================================================ FILE: docs/cppapi/dir_c91d79491a9631c76ad80e8d8bf0efb6.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl Directory Reference
Tramway SDK v0.1.1
opengl Directory Reference

Files

file  buffer.cpp
 
file  buffer.h [code]
 
file  drawlist.cpp
 
file  drawlist.h [code]
 
file  light.cpp
 
file  light.h [code]
 
file  material.cpp
 
file  material.h [code]
 
file  renderer.cpp
 
file  renderer.h [code]
 
file  shader.cpp
 
file  shader.h [code]
 
file  sprite.cpp
 
file  sprite.h [code]
 
file  texture.cpp
 
file  texture.h [code]
 
================================================ FILE: docs/cppapi/dir_cc4878aa85695f89f2ccbc192aae421c.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/platform/sdl Directory Reference
Tramway SDK v0.1.1
sdl Directory Reference

Files

file  sdl.cpp
 
================================================ FILE: docs/cppapi/dir_d6dfb888f5e5a248d906bac34bc576a1.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/spatial Directory Reference
Tramway SDK v0.1.1
spatial Directory Reference

Files

file  definitions.h [code]
 
file  output.cpp
 
file  output.h [code]
 
file  pathtracer.cpp
 
file  pathtracer.h [code]
 
file  spatial.cpp
 
file  spatial.h [code]
 Definitions for the Spatial Audio backend.
 
================================================ FILE: docs/cppapi/dir_e956729b6428f6b8620d3e268ab44978.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components Directory Reference
Tramway SDK v0.1.1
components Directory Reference

Files

file  animation.cpp
 
file  animation.h [code]
 
file  audio.cpp
 
file  audio.h [code]
 
file  controller.cpp
 Implementations for ControllerComponents.
 
file  controller.h [code]
 
file  decal.cpp
 
file  decal.h [code]
 
file  light.cpp
 
file  light.h [code]
 
file  particle.cpp
 
file  particle.h [code]
 
file  physics.cpp
 
file  physics.h [code]
 
file  player.cpp
 
file  player.h [code]
 
file  render.cpp
 
file  render.h [code]
 
file  sprite.cpp
 
file  sprite.h [code]
 
file  template.h [code]
 
file  trigger.cpp
 
file  trigger.h [code]
 
================================================ FILE: docs/cppapi/direct3d_2renderer_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/direct3d/renderer.cpp File Reference
Tramway SDK v0.1.1
renderer.cpp File Reference
#include <render/api.h>
#include <render/direct3d/direct3d.h>
#include <d3dx9.h>
#include <templates/octree.h>

Classes

struct  tram::Render::API::VertexBufferMetadata
 
struct  tram::Render::API::LayerParameters
 
struct  tram::Render::API::FVFHelper
 
struct  tram::Render::API::StaticVertex
 
struct  tram::Render::API::DynamicVertex
 
struct  tram::Render::API::LineVertex
 

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Render
 High-level Render system API.
 
namespace  tram::Render::API
 Rendering backend API.
 

Functions

std::vector< uint32_t > tram::Render::API::light_tree_ids (200)
 
void tram::Render::API::SetLightingParameters (vec3 sun_direction, vec3 sun_color, vec3 ambient_color, layer_t layer)
 
void tram::Render::API::SetScreenSize (float width, float height)
 
void tram::Render::API::SetScreenClear (vec3 clear_color, bool clear)
 
void tram::Render::API::RenderFrame ()
 
drawlistentry_t tram::Render::API::InsertDrawListEntry ()
 
void tram::Render::API::RemoveDrawListEntry (drawlistentry_t entry)
 
uint32_t tram::Render::API::GetFlags (drawlistentry_t entry)
 
void tram::Render::API::SetFlags (drawlistentry_t entry, uint32_t flags)
 
void tram::Render::API::SetLayer (drawlistentry_t entry, layer_t layer)
 
void tram::Render::API::SetPose (drawlistentry_t entry, Pose *pose)
 
void tram::Render::API::SetLightmap (drawlistentry_t entry, texturehandle_t lightmap)
 
void tram::Render::API::SetDrawListColors (drawlistentry_t entry, size_t count, vec4 *color)
 
void tram::Render::API::SetDrawListSpecularities (drawlistentry_t entry, size_t count, float *weights, float *exponents, float *transparencies)
 
void tram::Render::API::SetLights (drawlistentry_t entry, light_t *lights)
 
void tram::Render::API::SetMatrix (drawlistentry_t entry, const mat4 &matrix)
 
void tram::Render::API::SetDrawListVertexArray (drawlistentry_t entry, vertexarray_t vertex_array_handle)
 
void tram::Render::API::SetDrawListIndexArray (drawlistentry_t entry, indexarray_t index_array_handle)
 
void tram::Render::API::SetDrawListIndexRange (drawlistentry_t entry, uint32_t index_offset, uint32_t index_length)
 
bool tram::Render::API::SetDrawListShader (drawlistentry_t entry, vertexformat_t vertex_format, materialtype_t material_type)
 
void tram::Render::API::SetDrawListTextures (drawlistentry_t entry, size_t texture_count, texturehandle_t *textures)
 
light_t tram::Render::API::MakeLight ()
 
void tram::Render::API::DeleteLight (light_t light)
 
void tram::Render::API::SetLightParameters (light_t light, vec3 location, vec3 color, float distance, vec3 direction, float exponent)
 
texturehandle_t tram::Render::API::CreateTexture (ColorMode color_mode, TextureFilter texture_filter, uint32_t width, uint32_t height, void *data)
 
FVFHelper tram::Render::API::VertexDefinitionToFVF (VertexDefinition vertex_format)
 
void tram::Render::API::PackVertexBuffer (vertexarray_t &vertex_array, VertexDefinition vertex_format, FVFHelper helper, size_t vertex_count, void *vertex_data)
 
void tram::Render::API::CreateIndexedVertexArray (VertexDefinition vertex_format, vertexarray_t &vertex_array, indexarray_t &index_array, size_t vertex_size, void *vertex_data, size_t index_size, void *index_data)
 
void tram::Render::API::CreateVertexArray (VertexDefinition vertex_format, vertexarray_t &vertex_array)
 
void tram::Render::API::UpdateVertexArray (vertexarray_t &vertex_buffer, size_t data_size, void *data)
 
void tram::Render::API::SetViewMatrix (const mat4 &matrix, layer_t layer)
 
void tram::Render::API::SetProjectionMatrix (const mat4 &matrix, layer_t layer)
 
void tram::Render::API::GetScreen (char *buffer, int w, int h)
 
void tram::Render::API::Init ()
 
ContextType tram::Render::API::GetContext ()
 
uint32_t tram::Render::API::GetMaxIndexRangeLength ()
 
void tram::Render::API::SetDevice (void *)
 

Variables

Pool< D3DDrawListEntry > tram::Render::API::draw_list ("render list", 500, false)
 
Pool< D3DLight > tram::Render::API::light_list ("light list", 200, false)
 
Octree< uint32_t > tram::Render::API::light_tree
 
Pool< VertexBufferMetadata > tram::Render::API::vertex_buffer_metadata ("vertex buffer metadata", 500, false)
 
vec3 tram::Render::API::screen_clear_color = {0.2f, 0.3f, 0.3f}
 
bool tram::Render::API::clear_screen = true
 
const DWORD tram::Render::API::STATIC_VERTEX_FVF = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX2
 
const DWORD tram::Render::API::DYNAMIC_VERTEX_FVF = D3DFVF_XYZB4 | D3DFVF_LASTBETA_UBYTE4 | D3DFVF_NORMAL | D3DFVF_TEX1
 
const DWORD tram::Render::API::LINE_VERTEX_FVF = D3DFVF_XYZ | D3DFVF_DIFFUSE
 
================================================ FILE: docs/cppapi/direct3d_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/direct3d/direct3d.h File Reference
Tramway SDK v0.1.1
direct3d.h File Reference
#include <render/render.h>
#include <render/renderer.h>

Go to the source code of this file.

Classes

struct  tram::Render::API::D3DDrawListEntry
 
struct  tram::Render::API::D3DLight
 

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Render
 High-level Render system API.
 
namespace  tram::Render::API
 Rendering backend API.
 
================================================ FILE: docs/cppapi/direct3d_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/direct3d/direct3d.h Source File
Tramway SDK v0.1.1
direct3d.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_RENDER_DIRECT3D_DIRECT3D_H
4#define TRAM_SDK_RENDER_DIRECT3D_DIRECT3D_H
5
6#include <render/render.h>
7#include <render/renderer.h>
8
9namespace tram::Render::API {
11 uint32_t flags = 0;
12
13 Pose* pose = nullptr;
14
15 mat4 matrix = mat4(1.0f);
16
17 uint32_t lights[4] = {0};
18
19 IDirect3DVertexBuffer9* vertex_buffer = nullptr;
20 IDirect3DIndexBuffer9* index_buffer = nullptr;
21
22 uint32_t vertex_count = 0;
23 uint32_t index_length = 0;
24 uint32_t index_offset = 0;
25
26 uint32_t fvf = 0;
27
28 uint32_t layer = 0;
29 IDirect3DTexture9* lightmap = nullptr;
30 IDirect3DTexture9* texture = nullptr;
31
32 vec4 color = {1.0f, 1.0f, 1.0f, 1.0f};
33
34 float specular_weight = 0.0f;
35 float specular_exponent = 1.0f;
37 };
38
39 struct D3DLight {
40 vec3 location = {0.0f, 0.0f, 0.0f};
41 vec3 color = {0.0f, 0.0f, 0.0f};
42 float distance = 0.0f;
43 vec3 direction = {0.0f, 0.0f, -1.0f};
44 float exponent = 0.0f;
45 };
46}
47
48#endif // TRAM_SDK_RENDER_DIRECT3D_DIRECT3D_H
Rendering backend API.
glm::vec4 vec4
Definition: math.h:15
glm::vec3 vec3
Definition: math.h:11
glm::mat4 mat4
Definition: math.h:14
Definition: direct3d.h:10
float specular_weight
Definition: direct3d.h:34
mat4 matrix
Definition: direct3d.h:15
uint32_t layer
Definition: direct3d.h:28
float specular_transparency
Definition: direct3d.h:36
Pose * pose
Definition: direct3d.h:13
IDirect3DVertexBuffer9 * vertex_buffer
Definition: direct3d.h:19
uint32_t flags
Definition: direct3d.h:11
IDirect3DIndexBuffer9 * index_buffer
Definition: direct3d.h:20
uint32_t lights[4]
Definition: direct3d.h:17
uint32_t index_length
Definition: direct3d.h:23
uint32_t vertex_count
Definition: direct3d.h:22
float specular_exponent
Definition: direct3d.h:35
uint32_t fvf
Definition: direct3d.h:26
IDirect3DTexture9 * lightmap
Definition: direct3d.h:29
IDirect3DTexture9 * texture
Definition: direct3d.h:30
uint32_t index_offset
Definition: direct3d.h:24
vec4 color
Definition: direct3d.h:32
Definition: direct3d.h:39
float exponent
Definition: direct3d.h:44
vec3 color
Definition: direct3d.h:41
float distance
Definition: direct3d.h:42
vec3 location
Definition: direct3d.h:40
vec3 direction
Definition: direct3d.h:43
Definition: animation.h:35
================================================ FILE: docs/cppapi/doxygen.css ================================================ /* The standard CSS for doxygen 1.9.2 */ body, table, div, p, dl { font: 400 14px/22px Roboto,sans-serif; } p.reference, p.definition { font: 400 14px/22px Roboto,sans-serif; } /* @group Heading Levels */ h1.groupheader { font-size: 150%; } .title { font: 400 14px/28px Roboto,sans-serif; font-size: 150%; font-weight: bold; margin: 10px 2px; } h2.groupheader { border-bottom: 1px solid #879ECB; color: #354C7B; font-size: 150%; font-weight: normal; margin-top: 1.75em; padding-top: 8px; padding-bottom: 4px; width: 100%; } h3.groupheader { font-size: 100%; } h1, h2, h3, h4, h5, h6 { -webkit-transition: text-shadow 0.5s linear; -moz-transition: text-shadow 0.5s linear; -ms-transition: text-shadow 0.5s linear; -o-transition: text-shadow 0.5s linear; transition: text-shadow 0.5s linear; margin-right: 15px; } h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { text-shadow: 0 0 15px cyan; } dt { font-weight: bold; } ul.multicol { -moz-column-gap: 1em; -webkit-column-gap: 1em; column-gap: 1em; -moz-column-count: 3; -webkit-column-count: 3; column-count: 3; } p.startli, p.startdd { margin-top: 2px; } th p.starttd, th p.intertd, th p.endtd { font-size: 100%; font-weight: 700; } p.starttd { margin-top: 0px; } p.endli { margin-bottom: 0px; } p.enddd { margin-bottom: 4px; } p.endtd { margin-bottom: 2px; } p.interli { } p.interdd { } p.intertd { } /* @end */ caption { font-weight: bold; } span.legend { font-size: 70%; text-align: center; } h3.version { font-size: 90%; text-align: center; } div.navtab { border-right: 1px solid #A3B4D7; padding-right: 15px; text-align: right; line-height: 110%; } div.navtab table { border-spacing: 0; } td.navtab { padding-right: 6px; padding-left: 6px; } td.navtabHL { background-image: url('tab_a.png'); background-repeat:repeat-x; padding-right: 6px; padding-left: 6px; } td.navtabHL a, td.navtabHL a:visited { color: #fff; text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); } a.navtab { font-weight: bold; } div.qindex{ text-align: center; width: 100%; line-height: 140%; font-size: 130%; color: #A0A0A0; } dt.alphachar{ font-size: 180%; font-weight: bold; } .alphachar a{ color: black; } .alphachar a:hover, .alphachar a:visited{ text-decoration: none; } .classindex dl { padding: 25px; column-count:1 } .classindex dd { display:inline-block; margin-left: 50px; width: 90%; line-height: 1.15em; } .classindex dl.odd { background-color: #F8F9FC; } @media(min-width: 1120px) { .classindex dl { column-count:2 } } @media(min-width: 1320px) { .classindex dl { column-count:3 } } /* @group Link Styling */ a { color: #3D578C; font-weight: normal; text-decoration: none; } .contents a:visited { color: #4665A2; } a:hover { text-decoration: underline; } .contents a.qindexHL:visited { color: #FFFFFF; } a.el { font-weight: bold; } a.elRef { } a.code, a.code:visited, a.line, a.line:visited { color: #4665A2; } a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { color: #4665A2; } a.code.hl_class { /* style for links to class names in code snippets */ } a.code.hl_struct { /* style for links to struct names in code snippets */ } a.code.hl_union { /* style for links to union names in code snippets */ } a.code.hl_interface { /* style for links to interface names in code snippets */ } a.code.hl_protocol { /* style for links to protocol names in code snippets */ } a.code.hl_category { /* style for links to category names in code snippets */ } a.code.hl_exception { /* style for links to exception names in code snippets */ } a.code.hl_service { /* style for links to service names in code snippets */ } a.code.hl_singleton { /* style for links to singleton names in code snippets */ } a.code.hl_concept { /* style for links to concept names in code snippets */ } a.code.hl_namespace { /* style for links to namespace names in code snippets */ } a.code.hl_package { /* style for links to package names in code snippets */ } a.code.hl_define { /* style for links to macro names in code snippets */ } a.code.hl_function { /* style for links to function names in code snippets */ } a.code.hl_variable { /* style for links to variable names in code snippets */ } a.code.hl_typedef { /* style for links to typedef names in code snippets */ } a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } a.code.hl_friend { /* style for links to friend names in code snippets */ } a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } a.code.hl_property { /* style for links to property names in code snippets */ } a.code.hl_event { /* style for links to event names in code snippets */ } a.code.hl_sequence { /* style for links to sequence names in code snippets */ } a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } /* @end */ dl.el { margin-left: -1cm; } ul { overflow: hidden; /*Fixed: list item bullets overlap floating elements*/ } #side-nav ul { overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ } #main-nav ul { overflow: visible; /* reset ul rule for the navigation bar drop down lists */ } .fragment { text-align: left; direction: ltr; overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ overflow-y: hidden; } pre.fragment { border: 1px solid #C4CFE5; background-color: #FBFCFD; padding: 4px 6px; margin: 4px 8px 4px 2px; overflow: auto; word-wrap: break-word; font-size: 9pt; line-height: 125%; font-family: monospace, fixed; font-size: 105%; } div.fragment { padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ margin: 4px 8px 4px 2px; background-color: #FBFCFD; border: 1px solid #C4CFE5; } div.line { font-family: monospace, fixed; font-size: 13px; min-height: 13px; line-height: 1.0; text-wrap: unrestricted; white-space: -moz-pre-wrap; /* Moz */ white-space: -pre-wrap; /* Opera 4-6 */ white-space: -o-pre-wrap; /* Opera 7 */ white-space: pre-wrap; /* CSS3 */ word-wrap: break-word; /* IE 5.5+ */ text-indent: -53px; padding-left: 53px; padding-bottom: 0px; margin: 0px; -webkit-transition-property: background-color, box-shadow; -webkit-transition-duration: 0.5s; -moz-transition-property: background-color, box-shadow; -moz-transition-duration: 0.5s; -ms-transition-property: background-color, box-shadow; -ms-transition-duration: 0.5s; -o-transition-property: background-color, box-shadow; -o-transition-duration: 0.5s; transition-property: background-color, box-shadow; transition-duration: 0.5s; } div.line:after { content:"\000A"; white-space: pre; } div.line.glow { background-color: cyan; box-shadow: 0 0 10px cyan; } span.lineno { padding-right: 4px; margin-right: 9px; text-align: right; border-right: 2px solid #0F0; background-color: #E8E8E8; white-space: pre; } span.lineno a { background-color: #D8D8D8; } span.lineno a:hover { background-color: #C8C8C8; } .lineno { -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } div.ah, span.ah { background-color: black; font-weight: bold; color: #FFFFFF; margin-bottom: 3px; margin-top: 3px; padding: 0.2em; border: solid thin #333; border-radius: 0.5em; -webkit-border-radius: .5em; -moz-border-radius: .5em; box-shadow: 2px 2px 3px #999; -webkit-box-shadow: 2px 2px 3px #999; -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); } div.classindex ul { list-style: none; padding-left: 0; } div.classindex span.ai { display: inline-block; } div.groupHeader { margin-left: 16px; margin-top: 12px; font-weight: bold; } div.groupText { margin-left: 16px; font-style: italic; } body { background-color: white; color: black; margin: 0; } div.contents { margin-top: 10px; margin-left: 12px; margin-right: 8px; } td.indexkey { background-color: #EBEFF6; font-weight: bold; border: 1px solid #C4CFE5; margin: 2px 0px 2px 0; padding: 2px 10px; white-space: nowrap; vertical-align: top; } td.indexvalue { background-color: #EBEFF6; border: 1px solid #C4CFE5; padding: 2px 10px; margin: 2px 0px; } tr.memlist { background-color: #EEF1F7; } p.formulaDsp { text-align: center; } img.formulaDsp { } img.formulaInl, img.inline { vertical-align: middle; } div.center { text-align: center; margin-top: 0px; margin-bottom: 0px; padding: 0px; } div.center img { border: 0px; } address.footer { text-align: right; padding-right: 12px; } img.footer { border: 0px; vertical-align: middle; } .compoundTemplParams { color: #4665A2; font-size: 80%; line-height: 120%; } /* @group Code Colorization */ span.keyword { color: #008000 } span.keywordtype { color: #604020 } span.keywordflow { color: #e08000 } span.comment { color: #800000 } span.preprocessor { color: #806020 } span.stringliteral { color: #002080 } span.charliteral { color: #008080 } span.vhdldigit { color: #ff00ff } span.vhdlchar { color: #000000 } span.vhdlkeyword { color: #700070 } span.vhdllogic { color: #ff0000 } blockquote { background-color: #F7F8FB; border-left: 2px solid #9CAFD4; margin: 0 24px 0 4px; padding: 0 12px 0 16px; } blockquote.DocNodeRTL { border-left: 0; border-right: 2px solid #9CAFD4; margin: 0 4px 0 24px; padding: 0 16px 0 12px; } /* @end */ /* .search { color: #003399; font-weight: bold; } form.search { margin-bottom: 0px; margin-top: 0px; } input.search { font-size: 75%; color: #000080; font-weight: normal; background-color: #e8eef2; } */ td.tiny { font-size: 75%; } .dirtab { padding: 4px; border-collapse: collapse; border: 1px solid #A3B4D7; } th.dirtab { background: #EBEFF6; font-weight: bold; } hr { height: 0px; border: none; border-top: 1px solid #4A6AAA; } hr.footer { height: 1px; } /* @group Member Descriptions */ table.memberdecls { border-spacing: 0px; padding: 0px; } .memberdecls td, .fieldtable tr { -webkit-transition-property: background-color, box-shadow; -webkit-transition-duration: 0.5s; -moz-transition-property: background-color, box-shadow; -moz-transition-duration: 0.5s; -ms-transition-property: background-color, box-shadow; -ms-transition-duration: 0.5s; -o-transition-property: background-color, box-shadow; -o-transition-duration: 0.5s; transition-property: background-color, box-shadow; transition-duration: 0.5s; } .memberdecls td.glow, .fieldtable tr.glow { background-color: cyan; box-shadow: 0 0 15px cyan; } .mdescLeft, .mdescRight, .memItemLeft, .memItemRight, .memTemplItemLeft, .memTemplItemRight, .memTemplParams { background-color: #F9FAFC; border: none; margin: 4px; padding: 1px 0 0 8px; } .mdescLeft, .mdescRight { padding: 0px 8px 4px 8px; color: #555; } .memSeparator { border-bottom: 1px solid #DEE4F0; line-height: 1px; margin: 0px; padding: 0px; } .memItemLeft, .memTemplItemLeft { white-space: nowrap; } .memItemRight, .memTemplItemRight { width: 100%; } .memTemplParams { color: #4665A2; white-space: nowrap; font-size: 80%; } /* @end */ /* @group Member Details */ /* Styles for detailed member documentation */ .memtitle { padding: 8px; border-top: 1px solid #A8B8D9; border-left: 1px solid #A8B8D9; border-right: 1px solid #A8B8D9; border-top-right-radius: 4px; border-top-left-radius: 4px; margin-bottom: -1px; background-image: url('nav_f.png'); background-repeat: repeat-x; background-color: #E2E8F2; line-height: 1.25; font-weight: 300; float:left; } .permalink { font-size: 65%; display: inline-block; vertical-align: middle; } .memtemplate { font-size: 80%; color: #4665A2; font-weight: normal; margin-left: 9px; } .memnav { background-color: #EBEFF6; border: 1px solid #A3B4D7; text-align: center; margin: 2px; margin-right: 15px; padding: 2px; } .mempage { width: 100%; } .memitem { padding: 0; margin-bottom: 10px; margin-right: 5px; -webkit-transition: box-shadow 0.5s linear; -moz-transition: box-shadow 0.5s linear; -ms-transition: box-shadow 0.5s linear; -o-transition: box-shadow 0.5s linear; transition: box-shadow 0.5s linear; display: table !important; width: 100%; } .memitem.glow { box-shadow: 0 0 15px cyan; } .memname { font-weight: 400; margin-left: 6px; } .memname td { vertical-align: bottom; } .memproto, dl.reflist dt { border-top: 1px solid #A8B8D9; border-left: 1px solid #A8B8D9; border-right: 1px solid #A8B8D9; padding: 6px 0px 6px 0px; color: #253555; font-weight: bold; text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); background-color: #DFE5F1; /* opera specific markup */ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); border-top-right-radius: 4px; /* firefox specific markup */ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; -moz-border-radius-topright: 4px; /* webkit specific markup */ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -webkit-border-top-right-radius: 4px; } .overload { font-family: "courier new",courier,monospace; font-size: 65%; } .memdoc, dl.reflist dd { border-bottom: 1px solid #A8B8D9; border-left: 1px solid #A8B8D9; border-right: 1px solid #A8B8D9; padding: 6px 10px 2px 10px; background-color: #FBFCFD; border-top-width: 0; background-image:url('nav_g.png'); background-repeat:repeat-x; background-color: #FFFFFF; /* opera specific markup */ border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); /* firefox specific markup */ -moz-border-radius-bottomleft: 4px; -moz-border-radius-bottomright: 4px; -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; /* webkit specific markup */ -webkit-border-bottom-left-radius: 4px; -webkit-border-bottom-right-radius: 4px; -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); } dl.reflist dt { padding: 5px; } dl.reflist dd { margin: 0px 0px 10px 0px; padding: 5px; } .paramkey { text-align: right; } .paramtype { white-space: nowrap; } .paramname { color: #602020; white-space: nowrap; } .paramname em { font-style: normal; } .paramname code { line-height: 14px; } .params, .retval, .exception, .tparams { margin-left: 0px; padding-left: 0px; } .params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { font-weight: bold; vertical-align: top; } .params .paramtype, .tparams .paramtype { font-style: italic; vertical-align: top; } .params .paramdir, .tparams .paramdir { font-family: "courier new",courier,monospace; vertical-align: top; } table.mlabels { border-spacing: 0px; } td.mlabels-left { width: 100%; padding: 0px; } td.mlabels-right { vertical-align: bottom; padding: 0px; white-space: nowrap; } span.mlabels { margin-left: 8px; } span.mlabel { background-color: #728DC1; border-top:1px solid #5373B4; border-left:1px solid #5373B4; border-right:1px solid #C4CFE5; border-bottom:1px solid #C4CFE5; text-shadow: none; color: white; margin-right: 4px; padding: 2px 3px; border-radius: 3px; font-size: 7pt; white-space: nowrap; vertical-align: middle; } /* @end */ /* these are for tree view inside a (index) page */ div.directory { margin: 10px 0px; border-top: 1px solid #9CAFD4; border-bottom: 1px solid #9CAFD4; width: 100%; } .directory table { border-collapse:collapse; } .directory td { margin: 0px; padding: 0px; vertical-align: top; } .directory td.entry { white-space: nowrap; padding-right: 6px; padding-top: 3px; } .directory td.entry a { outline:none; } .directory td.entry a img { border: none; } .directory td.desc { width: 100%; padding-left: 6px; padding-right: 6px; padding-top: 3px; border-left: 1px solid rgba(0,0,0,0.05); } .directory tr.even { padding-left: 6px; background-color: #F7F8FB; } .directory img { vertical-align: -30%; } .directory .levels { white-space: nowrap; width: 100%; text-align: right; font-size: 9pt; } .directory .levels span { cursor: pointer; padding-left: 2px; padding-right: 2px; color: #3D578C; } .arrow { color: #9CAFD4; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; cursor: pointer; font-size: 80%; display: inline-block; width: 16px; height: 22px; } .icon { font-family: Arial, Helvetica; font-weight: bold; font-size: 12px; height: 14px; width: 16px; display: inline-block; background-color: #728DC1; color: white; text-align: center; border-radius: 4px; margin-left: 2px; margin-right: 2px; } .icona { width: 24px; height: 22px; display: inline-block; } .iconfopen { width: 24px; height: 18px; margin-bottom: 4px; background-image:url('folderopen.png'); background-position: 0px -4px; background-repeat: repeat-y; vertical-align:top; display: inline-block; } .iconfclosed { width: 24px; height: 18px; margin-bottom: 4px; background-image:url('folderclosed.png'); background-position: 0px -4px; background-repeat: repeat-y; vertical-align:top; display: inline-block; } .icondoc { width: 24px; height: 18px; margin-bottom: 4px; background-image:url('doc.png'); background-position: 0px -4px; background-repeat: repeat-y; vertical-align:top; display: inline-block; } table.directory { font: 400 14px Roboto,sans-serif; } /* @end */ div.dynheader { margin-top: 8px; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } address { font-style: normal; color: #2A3D61; } table.doxtable caption { caption-side: top; } table.doxtable { border-collapse:collapse; margin-top: 4px; margin-bottom: 4px; } table.doxtable td, table.doxtable th { border: 1px solid #2D4068; padding: 3px 7px 2px; } table.doxtable th { background-color: #374F7F; color: #FFFFFF; font-size: 110%; padding-bottom: 4px; padding-top: 5px; } table.fieldtable { /*width: 100%;*/ margin-bottom: 10px; border: 1px solid #A8B8D9; border-spacing: 0px; -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); } .fieldtable td, .fieldtable th { padding: 3px 7px 2px; } .fieldtable td.fieldtype, .fieldtable td.fieldname { white-space: nowrap; border-right: 1px solid #A8B8D9; border-bottom: 1px solid #A8B8D9; vertical-align: top; } .fieldtable td.fieldname { padding-top: 3px; } .fieldtable td.fielddoc { border-bottom: 1px solid #A8B8D9; /*width: 100%;*/ } .fieldtable td.fielddoc p:first-child { margin-top: 0px; } .fieldtable td.fielddoc p:last-child { margin-bottom: 2px; } .fieldtable tr:last-child td { border-bottom: none; } .fieldtable th { background-image:url('nav_f.png'); background-repeat:repeat-x; background-color: #E2E8F2; font-size: 90%; color: #253555; padding-bottom: 4px; padding-top: 5px; text-align:left; font-weight: 400; -moz-border-radius-topleft: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-left-radius: 4px; -webkit-border-top-right-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom: 1px solid #A8B8D9; } .tabsearch { top: 0px; left: 10px; height: 36px; background-image: url('tab_b.png'); z-index: 101; overflow: hidden; font-size: 13px; } .navpath ul { font-size: 11px; background-image:url('tab_b.png'); background-repeat:repeat-x; background-position: 0 -5px; height:30px; line-height:30px; color:#8AA0CC; border:solid 1px #C2CDE4; overflow:hidden; margin:0px; padding:0px; } .navpath li { list-style-type:none; float:left; padding-left:10px; padding-right:15px; background-image:url('bc_s.png'); background-repeat:no-repeat; background-position:right; color:#364D7C; } .navpath li.navelem a { height:32px; display:block; text-decoration: none; outline: none; color: #283A5D; font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); text-decoration: none; } .navpath li.navelem a:hover { color:#6884BD; } .navpath li.footer { list-style-type:none; float:right; padding-left:10px; padding-right:15px; background-image:none; background-repeat:no-repeat; background-position:right; color:#364D7C; font-size: 8pt; } div.summary { float: right; font-size: 8pt; padding-right: 5px; width: 50%; text-align: right; } div.summary a { white-space: nowrap; } table.classindex { margin: 10px; white-space: nowrap; margin-left: 3%; margin-right: 3%; width: 94%; border: 0; border-spacing: 0; padding: 0; } div.ingroups { font-size: 8pt; width: 50%; text-align: left; } div.ingroups a { white-space: nowrap; } div.header { background-image:url('nav_h.png'); background-repeat:repeat-x; background-color: #F9FAFC; margin: 0px; border-bottom: 1px solid #C4CFE5; } div.headertitle { padding: 5px 5px 5px 10px; } .PageDocRTL-title div.headertitle { text-align: right; direction: rtl; } dl { padding: 0 0 0 0; } /* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ dl.section { margin-left: 0px; padding-left: 0px; } dl.section.DocNodeRTL { margin-right: 0px; padding-right: 0px; } dl.note { margin-left: -7px; padding-left: 3px; border-left: 4px solid; border-color: #D0C000; } dl.note.DocNodeRTL { margin-left: 0; padding-left: 0; border-left: 0; margin-right: -7px; padding-right: 3px; border-right: 4px solid; border-color: #D0C000; } dl.warning, dl.attention { margin-left: -7px; padding-left: 3px; border-left: 4px solid; border-color: #FF0000; } dl.warning.DocNodeRTL, dl.attention.DocNodeRTL { margin-left: 0; padding-left: 0; border-left: 0; margin-right: -7px; padding-right: 3px; border-right: 4px solid; border-color: #FF0000; } dl.pre, dl.post, dl.invariant { margin-left: -7px; padding-left: 3px; border-left: 4px solid; border-color: #00D000; } dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL { margin-left: 0; padding-left: 0; border-left: 0; margin-right: -7px; padding-right: 3px; border-right: 4px solid; border-color: #00D000; } dl.deprecated { margin-left: -7px; padding-left: 3px; border-left: 4px solid; border-color: #505050; } dl.deprecated.DocNodeRTL { margin-left: 0; padding-left: 0; border-left: 0; margin-right: -7px; padding-right: 3px; border-right: 4px solid; border-color: #505050; } dl.todo { margin-left: -7px; padding-left: 3px; border-left: 4px solid; border-color: #00C0E0; } dl.todo.DocNodeRTL { margin-left: 0; padding-left: 0; border-left: 0; margin-right: -7px; padding-right: 3px; border-right: 4px solid; border-color: #00C0E0; } dl.test { margin-left: -7px; padding-left: 3px; border-left: 4px solid; border-color: #3030E0; } dl.test.DocNodeRTL { margin-left: 0; padding-left: 0; border-left: 0; margin-right: -7px; padding-right: 3px; border-right: 4px solid; border-color: #3030E0; } dl.bug { margin-left: -7px; padding-left: 3px; border-left: 4px solid; border-color: #C08050; } dl.bug.DocNodeRTL { margin-left: 0; padding-left: 0; border-left: 0; margin-right: -7px; padding-right: 3px; border-right: 4px solid; border-color: #C08050; } dl.section dd { margin-bottom: 6px; } #projectlogo { text-align: center; vertical-align: bottom; border-collapse: separate; } #projectlogo img { border: 0px none; } #projectalign { vertical-align: middle; } #projectname { font: 200% Tahoma, Arial,sans-serif; margin: 0px; padding: 2px 0px; } #projectbrief { font: 90% Tahoma, Arial,sans-serif; margin: 0px; padding: 0px; } #projectnumber { font: 50% Tahoma, Arial,sans-serif; margin: 0px; padding: 0px; } #titlearea { padding: 0px; margin: 0px; width: 100%; border-bottom: 1px solid #5373B4; } .image { text-align: center; } .dotgraph { text-align: center; } .mscgraph { text-align: center; } .plantumlgraph { text-align: center; } .diagraph { text-align: center; } .caption { font-weight: bold; } div.zoom { border: 1px solid #90A5CE; } dl.citelist { margin-bottom:50px; } dl.citelist dt { color:#334975; float:left; font-weight:bold; margin-right:10px; padding:5px; text-align:right; width:52px; } dl.citelist dd { margin:2px 0 2px 72px; padding:5px 0; } div.toc { padding: 14px 25px; background-color: #F4F6FA; border: 1px solid #D8DFEE; border-radius: 7px 7px 7px 7px; float: right; height: auto; margin: 0 8px 10px 10px; width: 200px; } .PageDocRTL-title div.toc { float: left !important; text-align: right; } div.toc li { background: url("bdwn.png") no-repeat scroll 0 5px transparent; font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; margin-top: 5px; padding-left: 10px; padding-top: 2px; } .PageDocRTL-title div.toc li { background-position-x: right !important; padding-left: 0 !important; padding-right: 10px; } div.toc h3 { font: bold 12px/1.2 Arial,FreeSans,sans-serif; color: #4665A2; border-bottom: 0 none; margin: 0; } div.toc ul { list-style: none outside none; border: medium none; padding: 0px; } div.toc li.level1 { margin-left: 0px; } div.toc li.level2 { margin-left: 15px; } div.toc li.level3 { margin-left: 30px; } div.toc li.level4 { margin-left: 45px; } span.emoji { /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; */ } .PageDocRTL-title div.toc li.level1 { margin-left: 0 !important; margin-right: 0; } .PageDocRTL-title div.toc li.level2 { margin-left: 0 !important; margin-right: 15px; } .PageDocRTL-title div.toc li.level3 { margin-left: 0 !important; margin-right: 30px; } .PageDocRTL-title div.toc li.level4 { margin-left: 0 !important; margin-right: 45px; } .inherit_header { font-weight: bold; color: gray; cursor: pointer; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .inherit_header td { padding: 6px 0px 2px 5px; } .inherit { display: none; } tr.heading h2 { margin-top: 12px; margin-bottom: 4px; } /* tooltip related style info */ .ttc { position: absolute; display: none; } #powerTip { cursor: default; white-space: nowrap; background-color: white; border: 1px solid gray; border-radius: 4px 4px 4px 4px; box-shadow: 1px 1px 7px gray; display: none; font-size: smaller; max-width: 80%; opacity: 0.9; padding: 1ex 1em 1em; position: absolute; z-index: 2147483647; } #powerTip div.ttdoc { color: grey; font-style: italic; } #powerTip div.ttname a { font-weight: bold; } #powerTip div.ttname { font-weight: bold; } #powerTip div.ttdeci { color: #006318; } #powerTip div { margin: 0px; padding: 0px; font: 12px/16px Roboto,sans-serif; } #powerTip:before, #powerTip:after { content: ""; position: absolute; margin: 0px; } #powerTip.n:after, #powerTip.n:before, #powerTip.s:after, #powerTip.s:before, #powerTip.w:after, #powerTip.w:before, #powerTip.e:after, #powerTip.e:before, #powerTip.ne:after, #powerTip.ne:before, #powerTip.se:after, #powerTip.se:before, #powerTip.nw:after, #powerTip.nw:before, #powerTip.sw:after, #powerTip.sw:before { border: solid transparent; content: " "; height: 0; width: 0; position: absolute; } #powerTip.n:after, #powerTip.s:after, #powerTip.w:after, #powerTip.e:after, #powerTip.nw:after, #powerTip.ne:after, #powerTip.sw:after, #powerTip.se:after { border-color: rgba(255, 255, 255, 0); } #powerTip.n:before, #powerTip.s:before, #powerTip.w:before, #powerTip.e:before, #powerTip.nw:before, #powerTip.ne:before, #powerTip.sw:before, #powerTip.se:before { border-color: rgba(128, 128, 128, 0); } #powerTip.n:after, #powerTip.n:before, #powerTip.ne:after, #powerTip.ne:before, #powerTip.nw:after, #powerTip.nw:before { top: 100%; } #powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { border-top-color: #FFFFFF; border-width: 10px; margin: 0px -10px; } #powerTip.n:before { border-top-color: #808080; border-width: 11px; margin: 0px -11px; } #powerTip.n:after, #powerTip.n:before { left: 50%; } #powerTip.nw:after, #powerTip.nw:before { right: 14px; } #powerTip.ne:after, #powerTip.ne:before { left: 14px; } #powerTip.s:after, #powerTip.s:before, #powerTip.se:after, #powerTip.se:before, #powerTip.sw:after, #powerTip.sw:before { bottom: 100%; } #powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { border-bottom-color: #FFFFFF; border-width: 10px; margin: 0px -10px; } #powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { border-bottom-color: #808080; border-width: 11px; margin: 0px -11px; } #powerTip.s:after, #powerTip.s:before { left: 50%; } #powerTip.sw:after, #powerTip.sw:before { right: 14px; } #powerTip.se:after, #powerTip.se:before { left: 14px; } #powerTip.e:after, #powerTip.e:before { left: 100%; } #powerTip.e:after { border-left-color: #FFFFFF; border-width: 10px; top: 50%; margin-top: -10px; } #powerTip.e:before { border-left-color: #808080; border-width: 11px; top: 50%; margin-top: -11px; } #powerTip.w:after, #powerTip.w:before { right: 100%; } #powerTip.w:after { border-right-color: #FFFFFF; border-width: 10px; top: 50%; margin-top: -10px; } #powerTip.w:before { border-right-color: #808080; border-width: 11px; top: 50%; margin-top: -11px; } @media print { #top { display: none; } #side-nav { display: none; } #nav-path { display: none; } body { overflow:visible; } h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } .summary { display: none; } .memitem { page-break-inside: avoid; } #doc-content { margin-left:0 !important; height:auto !important; width:auto !important; overflow:inherit; display:inline; } } /* @group Markdown */ table.markdownTable { border-collapse:collapse; margin-top: 4px; margin-bottom: 4px; } table.markdownTable td, table.markdownTable th { border: 1px solid #2D4068; padding: 3px 7px 2px; } table.markdownTable tr { } th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { background-color: #374F7F; color: #FFFFFF; font-size: 110%; padding-bottom: 4px; padding-top: 5px; } th.markdownTableHeadLeft, td.markdownTableBodyLeft { text-align: left } th.markdownTableHeadRight, td.markdownTableBodyRight { text-align: right } th.markdownTableHeadCenter, td.markdownTableBodyCenter { text-align: center } .DocNodeRTL { text-align: right; direction: rtl; } .DocNodeLTR { text-align: left; direction: ltr; } table.DocNodeRTL { width: auto; margin-right: 0; margin-left: auto; } table.DocNodeLTR { width: auto; margin-right: auto; margin-left: 0; } tt, code, kbd, samp { display: inline-block; direction:ltr; } /* @end */ u { text-decoration: underline; } ================================================ FILE: docs/cppapi/drawlist_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/drawlist.cpp File Reference
Tramway SDK v0.1.1
drawlist.cpp File Reference

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Render
 High-level Render system API.
 
namespace  tram::Render::API
 Rendering backend API.
 

Functions

drawlistentry_t tram::Render::API::InsertDrawListEntry ()
 
void tram::Render::API::RemoveDrawListEntry (drawlistentry_t entry)
 
uint32_t tram::Render::API::GetFlags (drawlistentry_t entry)
 
void tram::Render::API::SetFlags (drawlistentry_t entry, uint32_t flags)
 
void tram::Render::API::SetLayer (drawlistentry_t entry, layer_t layer)
 
void tram::Render::API::SetPose (drawlistentry_t entry, Pose *pose)
 
void tram::Render::API::SetLightmap (drawlistentry_t entry, texturehandle_t lightmap)
 
void tram::Render::API::SetEnvironmentMap (drawlistentry_t entry, texturehandle_t environmentmap)
 
void tram::Render::API::SetSphericalHarmonic (drawlistentry_t entry, sphericalharmonic_t harmonic)
 
void tram::Render::API::SetDrawListAABB (drawlistentry_t entry, vec3 min, vec3 max)
 
void tram::Render::API::SetDrawListColors (drawlistentry_t entry, size_t count, vec4 *color)
 
void tram::Render::API::SetDrawListTextureOffsets (drawlistentry_t entry, size_t count, vec4 *offset)
 
void tram::Render::API::SetLights (drawlistentry_t entry, light_t *lights)
 
void tram::Render::API::SetMatrix (drawlistentry_t entry, const mat4 &matrix)
 
void tram::Render::API::SetFadeDistance (drawlistentry_t entry, float near, float far)
 
void tram::Render::API::SetDrawListVertexArray (drawlistentry_t entry, vertexarray_t vertex_array_handle)
 
void tram::Render::API::SetDrawListIndexArray (drawlistentry_t entry, indexarray_t index_array_handle)
 
void tram::Render::API::SetDrawListSpriteArray (drawlistentry_t entry, spritearray_t sprite_array_handle)
 
void tram::Render::API::SetDrawListIndexRange (drawlistentry_t entry, uint32_t index_offset, uint32_t index_length)
 
bool tram::Render::API::SetDrawListShader (drawlistentry_t entry, vertexformat_t vertex_format, materialtype_t material_type)
 
void tram::Render::API::SetDrawListMaterials (drawlistentry_t entry, size_t material_count, material_t *materials)
 
================================================ FILE: docs/cppapi/drawlist_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/drawlist.h File Reference
Tramway SDK v0.1.1
drawlist.h File Reference

Go to the source code of this file.

Classes

struct  tram::Render::API::GLDrawListEntry
 

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Render
 High-level Render system API.
 
namespace  tram::Render::API
 Rendering backend API.
 
================================================ FILE: docs/cppapi/drawlist_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/drawlist.h Source File
Tramway SDK v0.1.1
drawlist.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_RENDER_OPENGL_DRAWLIST_H
4#define TRAM_SDK_RENDER_OPENGL_DRAWLIST_H
5
6#include <render/render.h>
7#include <render/renderer.h>
8
10
11namespace tram::Render::API {
12
14 uint32_t flags = 0;
15
16 Pose* pose = nullptr;
17
18 mat4 matrix = mat4(1.0f);
19
20 uint32_t lights[4] = {0};
21
22 uint32_t layer = 0;
23 uint32_t lightmap = 0;
24 uint32_t environmentmap = 0;
25 uint32_t vao = 0;
26 uint32_t eboLen = 0; // in primitive count
27 uint32_t eboOff = 0; // in primitive count
28 uint32_t shader = 0;
29 uint32_t texCount = 0;
33
34 vec3 aabb_min = {0.0f, 0.0f, 0.0f};
35 vec3 aabb_max = {0.0f, 0.0f, 0.0f};
36
37 float fade_near = 0.0f;
38 float fade_far = INFINITY;
39
41
43 for (int i = 0; i < 15; i++) {
44 materials[i] = nullptr;
45 colors[i] = {1.0f, 1.0f, 1.0f, 1.0f};
46 texture_transforms[i] = {0.0f, 0.0f, 0.0f, 0.0f};
47 }
48
49 harmonic = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}};
50 }
51
53 uint64_t CalcSortKey (const vec3& cameraPosition) {
54 vec3 location = matrix * vec4(0.0f, 0.0f, 0.0f, 1.0f);
55 uint64_t sortkey = 0;
56 sortkey = flags & FLAG_TRANSPARENT ? 1 : 0;
57 sortkey = sortkey << 60;
58 sortkey = sortkey | (((uint64_t)layer) << 61); // 3 bits for the layer number
59 sortkey = sortkey | (((uint64_t)shader) << 48); // 12 bits for the shader
60 sortkey = sortkey | (((uint64_t)vao) << 32); // 16 bits or the vertex array number
61 // TODO: reverse the distance if FLAG_REVERSE_SORT is set
62 // also i think that the bitmask for the distance thing is incorrect
63 sortkey = sortkey | (((uint64_t)(glm::distance(cameraPosition, location) * 3000000.0f)) & 0x00000000FFFFFFFF); // 32 bits for the distance
64 return sortkey;
65 }
66};
67
68}
69
70#endif // TRAM_SDK_RENDER_OPENGL_DRAWLIST_H
Rendering backend API.
@ FLAG_TRANSPARENT
Definition: renderer.h:17
glm::vec4 vec4
Definition: math.h:15
glm::vec3 vec3
Definition: math.h:11
glm::mat4 mat4
Definition: math.h:14
Definition: drawlist.h:13
uint32_t texCount
Definition: drawlist.h:29
vec3 aabb_min
Definition: drawlist.h:34
uint32_t eboLen
Definition: drawlist.h:26
uint64_t CalcSortKey(const vec3 &cameraPosition)
Assembles a key for sorting.
Definition: drawlist.h:53
uint32_t lights[4]
Definition: drawlist.h:20
uint32_t flags
Definition: drawlist.h:14
vec3 aabb_max
Definition: drawlist.h:35
mat4 matrix
Definition: drawlist.h:18
uint32_t lightmap
Definition: drawlist.h:23
vec4 texture_transforms[15]
Definition: drawlist.h:31
sphericalharmonic_t harmonic
Definition: drawlist.h:40
float fade_near
Definition: drawlist.h:37
uint32_t eboOff
Definition: drawlist.h:27
uint32_t layer
Definition: drawlist.h:22
uint32_t environmentmap
Definition: drawlist.h:24
GLMaterial * materials[15]
Definition: drawlist.h:32
vec4 colors[15]
Definition: drawlist.h:30
uint32_t vao
Definition: drawlist.h:25
Pose * pose
Definition: drawlist.h:16
uint32_t shader
Definition: drawlist.h:28
float fade_far
Definition: drawlist.h:38
GLDrawListEntry()
Definition: drawlist.h:42
Definition: material.h:11
Definition: animation.h:35
Definition: render.h:92
================================================ FILE: docs/cppapi/dynsections.js ================================================ /* @licstart The following is the entire license notice for the JavaScript code in this file. The MIT License (MIT) Copyright (C) 1997-2020 by Dimitri van Heesch Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @licend The above is the entire license notice for the JavaScript code in this file */ function toggleVisibility(linkObj) { var base = $(linkObj).attr('id'); var summary = $('#'+base+'-summary'); var content = $('#'+base+'-content'); var trigger = $('#'+base+'-trigger'); var src=$(trigger).attr('src'); if (content.is(':visible')===true) { content.hide(); summary.show(); $(linkObj).addClass('closed').removeClass('opened'); $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); } else { content.show(); summary.hide(); $(linkObj).removeClass('closed').addClass('opened'); $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); } return false; } function updateStripes() { $('table.directory tr'). removeClass('even').filter(':visible:even').addClass('even'); } function toggleLevel(level) { $('table.directory tr').each(function() { var l = this.id.split('_').length-1; var i = $('#img'+this.id.substring(3)); var a = $('#arr'+this.id.substring(3)); if (l Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/light.cpp File Reference
Tramway SDK v0.1.1
light.cpp File Reference
#include <framework/core.h>
#include <entities/light.h>
#include <components/light.h>
#include <render/light.h>
#include <framework/serialization.h>

Namespaces

namespace  tram
 Serialization, i.e.
 

Enumerations

enum  { tram::FIELD_COLOR , tram::FIELD_DISTANCE , tram::FIELD_DIRECTION , tram::FIELD_EXPONENT }
 
================================================ FILE: docs/cppapi/entities_2light_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/light.h File Reference
Tramway SDK v0.1.1
light.h File Reference

Go to the source code of this file.

Classes

class  tram::Light
 LightComponent wrapper. More...
 

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/entities_2light_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/light.h Source File
Tramway SDK v0.1.1
light.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_ENTITIES_LIGHT_H
4#define TRAM_SDK_ENTITIES_LIGHT_H
5
6#include <framework/entity.h>
9
10namespace tram {
11
12class LightComponent;
13
14class Light : public Entity {
15public:
16 Light(const SharedEntityData&, const ValueArray&);
17 void UpdateParameters();
18 void SetParameters();
19 void Load();
20 void Unload();
21 void Serialize();
22 void MessageHandler(Message& msg);
24 static void Register();
25protected:
27
29 float distance;
31 float exponent;
32};
33
34}
35
36#endif // TRAM_SDK_ENTITIES_LIGHT_H
Wrapper for an EntityComponent pointer.
Definition: entitycomponent.h:51
Entity base class.
Definition: entity.h:23
LightComponent wrapper.
Definition: light.h:14
float exponent
Definition: light.h:31
void Unload()
Unloads an entity.
Definition: light.cpp:76
void Serialize()
Definition: light.cpp:84
void SetParameters()
Called when either Entity::SetLocation or Entity::SetRotation is called.
Definition: light.cpp:56
float distance
Definition: light.h:29
static void Register()
Definition: light.cpp:26
name_t GetType()
Returns the type of the entity.
Definition: light.cpp:40
vec3 direction
Definition: light.h:30
void MessageHandler(Message &msg)
Allows entities to receive messages.
Definition: light.cpp:95
vec3 color
Definition: light.h:28
Light(const SharedEntityData &, const ValueArray &)
Definition: light.cpp:44
void UpdateParameters()
Called when Entity::UpdateTransform is called.
Definition: light.cpp:51
Component< LightComponent > light
Definition: light.h:26
void Load()
Loads an entity.
Definition: light.cpp:60
Definition: value.h:314
Serialization, i.e.
glm::vec3 vec3
Definition: math.h:11
Message data.
Definition: message.h:16
Basic Entity parameters.
Definition: entity.h:132
Interned string type.
Definition: uid.h:10
================================================ FILE: docs/cppapi/entities_2player_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/player.cpp File Reference
Tramway SDK v0.1.1
player.cpp File Reference

Namespaces

namespace  tram
 Serialization, i.e.
 

Variables

const float tram::collision_width = 0.35f
 
const float tram::collision_height = 1.85f
 
const float tram::collision_height_crouch = 0.5f
 
const uint32_t tram::collision_group = Physics::COLL_PLAYER
 
================================================ FILE: docs/cppapi/entities_2player_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/player.h File Reference
Tramway SDK v0.1.1
player.h File Reference

Go to the source code of this file.

Classes

class  tram::Player
 ControllerComponent with a PlayerComponent attached to it. More...
 

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/entities_2player_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/player.h Source File
Tramway SDK v0.1.1
player.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_ENTITIES_PLAYER_H
4#define TRAM_SDK_ENTITIES_PLAYER_H
5
6#include <framework/entity.h>
9
10#include <components/player.h>
12
13namespace tram {
14
15class Player : public Entity {
16public:
17 Player();
19 ~Player() {std::cout << "Player destructor!" << std::endl; Unload();}
20 void Load();
21 void Unload();
22 void Serialize();
23 void SerializeString(std::string& str);
24 void UpdateParameters();
25 void SetParameters();
26 void MessageHandler(Message& msg);
28protected:
31public:
32 // wait why is this public
34};
35
36}
37
38#endif // TRAM_SDK_ENTITIES_PLAYER_H
Wrapper for an EntityComponent pointer.
Definition: entitycomponent.h:51
Entity base class.
Definition: entity.h:23
ControllerComponent with a PlayerComponent attached to it.
Definition: player.h:15
Component< PlayerComponent > plomp
Definition: player.h:29
name_t GetType()
Returns the type of the entity.
Definition: player.cpp:42
void UpdateParameters()
Called when Entity::UpdateTransform is called.
Definition: player.cpp:85
Player()
Creates a new player.
Definition: player.cpp:32
Component< PhysicsComponent > physics_body
Definition: player.h:30
~Player()
Definition: player.h:19
void Load()
Loads an entity.
Definition: player.cpp:46
Component< FPSControllerComponent > controllercomponent
Definition: player.h:33
void SerializeString(std::string &str)
Definition: player.cpp:81
void Serialize()
Definition: player.cpp:77
void SetParameters()
Called when either Entity::SetLocation or Entity::SetRotation is called.
Definition: player.cpp:89
void MessageHandler(Message &msg)
Allows entities to receive messages.
Definition: player.cpp:94
void Unload()
Unloads an entity.
Definition: player.cpp:70
Serialization, i.e.
Message data.
Definition: message.h:16
Interned string type.
Definition: uid.h:10
================================================ FILE: docs/cppapi/entities_2script_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/script.cpp File Reference
Tramway SDK v0.1.1
script.cpp File Reference
#include <entities/script.h>
#include <framework/script.h>
#include <framework/worldcell.h>
#include <components/physics.h>
#include <templates/hashmap.h>
#include <config.h>

Classes

struct  tram::ScriptableType::ScriptableTypeInfo
 

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::ScriptableType
 

Functions

void tram::ScriptableType::Register (name_t base_type, Entity *(*constr_func)(name_t new_type, const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *))
 
Entity * tram::ScriptableType::Make (name_t base_type, name_t new_type, const SharedEntityData &data, const ValueArray &array)
 
void tram::ScriptableType::Yeet (Entity *yeetable)
 
================================================ FILE: docs/cppapi/entities_2script_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/script.h File Reference
Tramway SDK v0.1.1
script.h File Reference
#include <framework/entity.h>
#include <framework/serialization.h>
#include <framework/script.h>
#include <iostream>

Go to the source code of this file.

Classes

class  tram::Scriptable< T >
 Provides script language subclassing. More...
 

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::ScriptableType
 

Functions

void tram::ScriptableType::Register (name_t base_type, Entity *(*constr_func)(name_t new_type, const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *))
 
Entity * tram::ScriptableType::Make (name_t base_type, name_t new_type, const SharedEntityData &data, const ValueArray &array)
 
void tram::ScriptableType::Yeet (Entity *yeetable)
 
================================================ FILE: docs/cppapi/entities_2script_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/script.h Source File
Tramway SDK v0.1.1
script.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_ENTITIES_SCRIPT_H
4#define TRAM_SDK_ENTITIES_SCRIPT_H
5
6#include <framework/entity.h>
8
9#include <framework/script.h>
10
11#include <iostream>
12
13namespace tram {
14
15// TODO: make constr_func etc. into typedefs??
16namespace ScriptableType {
17 void Register(name_t base_type, Entity* (*constr_func)(name_t new_type, const SharedEntityData&, const ValueArray&), void (*destr_func)(Entity*));
18 Entity* Make(name_t base_type, name_t type, const SharedEntityData&, const ValueArray&);
19 void Yeet(Entity* yeetable);
20}
21
22template <typename T>
23class Scriptable : public T {
24public:
25 Scriptable(const SharedEntityData& shared_data, const ValueArray& field_array, name_t type) : T(shared_data, field_array) {
26 this->type = type;
27 }
28
30
32 if (Script::CallFunction("__impl_entity_update_parameters_callback", {this->id})) {
33 T::UpdateParameters();
34 }
35 }
36
38 if (Script::CallFunction("__impl_entity_set_parameters_callback", {this->id})) {
39 T::SetParameters();
40 }
41 }
42
43 void Load() {
44 if (Script::CallFunction("__impl_entity_load_callback", {this->id})) {
45 T::Load();
46 }
47 }
48
49 void Unload() {
50 if (Script::CallFunction("__impl_entity_unload_callback", {this->id})) {
51 T::Unload();
52 }
53 }
54
55 void Serialize() {
56 /*if (Script::CallFunction("__impl_entity_serialize_callback", {this->id})) {
57 if (entity) entity->Serialize();
58 }*/
59 }
60
61 inline void SanitizeData(Value& data) {
62 // there might be some issues if the message's data pointer is not pointing
63 // to a value, but something else.
64
65 // hopefully we won't get segfaults.
66 bool valid_type = data.IsFloat() || data.IsInt() || data.IsBool() || data.GetType() == TYPE_NAME;
67
68 if (!valid_type) data = Value();
69
70 if (data.GetType() == TYPE_NAME) {
71 if (!name_t::is_valid(data)) data = Value();
72 }
73 }
74
76 Value data = msg.data ? *msg.data_value : Value();
77
78 SanitizeData(data);
79
80 if (Script::CallFunction("__impl_entity_message_handler_callback", {this->id, msg.type, msg.sender, msg.receiver, data})) {
81 T::MessageHandler(msg);
82 }
83 }
84
85 void EventHandler(Event& evt) {
86 Value data = evt.data ? *evt.data_value : Value();
87
88 SanitizeData(data);
89
90 if (Script::CallFunction("__impl_entity_event_handler_callback", {this->id, evt.type, evt.subtype, evt.poster, data})) {
91 T::EventHandler(evt);
92 }
93 }
94
96 return type;
97 }
98protected:
100};
101
102}
103
104#endif // TRAM_SDK_ENTITIES_SCRIPT_H
Provides script language subclassing.
Definition: script.h:23
void UpdateParameters()
Definition: script.h:31
Scriptable(const SharedEntityData &shared_data, const ValueArray &field_array, name_t type)
Definition: script.h:25
name_t GetType()
Definition: script.h:95
void EventHandler(Event &evt)
Definition: script.h:85
void Serialize()
Definition: script.h:55
void Unload()
Definition: script.h:49
void SanitizeData(Value &data)
Definition: script.h:61
void SetParameters()
Definition: script.h:37
void Load()
Definition: script.h:43
void MessageHandler(Message &msg)
Definition: script.h:75
~Scriptable()
Definition: script.h:29
name_t type
Definition: script.h:99
Definition: value.h:314
Generic, type-safe union.
Definition: value.h:18
bool IsBool() const
Definition: value.h:128
bool IsInt() const
Definition: value.h:129
bool IsFloat() const
Definition: value.h:130
Type GetType() const
Definition: value.h:174
void Load(const char *filename)
Loads a language file.
Definition: language.cpp:33
value_t CallFunction(name_t name, std::vector< Value > parameters)
Definition: script.cpp:60
void Register(name_t base_type, Entity *(*constr_func)(name_t new_type, const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *))
Definition: script.cpp:39
void Yeet(Entity *yeetable)
Definition: script.cpp:51
Entity * Make(name_t base_type, name_t new_type, const SharedEntityData &data, const ValueArray &array)
Definition: script.cpp:43
Serialization, i.e.
@ TYPE_NAME
Definition: type.h:15
UID name_t
Definition: uid.h:43
Event data.
Definition: event.h:24
event_t type
Type of the event.
Definition: event.h:58
void * data
Pointer to arbitrary data.
Definition: event.h:63
id_t poster
Definition: event.h:60
event_t subtype
Arbitrary event subtype.
Definition: event.h:59
value_t * data_value
Pointer to a value_t.
Definition: event.h:65
Message data.
Definition: message.h:16
message_t type
Type of the message.
Definition: message.h:53
id_t receiver
ID of the Entity that will receive the message.
Definition: message.h:55
id_t sender
ID of the Entity that sent the message.
Definition: message.h:54
value_t * data_value
Pointer to a value_t.
Definition: message.h:60
void * data
Pointer to arbitrary data.
Definition: message.h:58
Basic Entity parameters.
Definition: entity.h:132
Interned string type.
Definition: uid.h:10
static bool is_valid(const UID &)
Checks whether the name is valid.
Definition: uid.cpp:121
================================================ FILE: docs/cppapi/entities_2sound_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/sound.cpp File Reference
Tramway SDK v0.1.1
sound.cpp File Reference

Namespaces

namespace  tram
 Serialization, i.e.
 

Enumerations

enum  { tram::SOUND_LOOPING = 1 , tram::SOUND_START_ON_LOAD = 2 }
 
enum  { tram::FIELD_FLAGS , tram::FIELD_SOUND , tram::FIELD_VOLUME }
 
================================================ FILE: docs/cppapi/entities_2sound_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/sound.h File Reference
Tramway SDK v0.1.1
sound.h File Reference

Go to the source code of this file.

Classes

class  tram::Sound
 AudioComponent wrapper. More...
 

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/entities_2sound_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/sound.h Source File
Tramway SDK v0.1.1
sound.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_ENTITIES_AUDIO_H
4#define TRAM_SDK_ENTITIES_AUDIO_H
5
6#include <framework/entity.h>
9
10namespace tram {
11
12class AudioComponent;
13
14class Sound : public Entity {
15public:
17
18 // this should be a static method!!!
19 // and even better, the audiocomponent should have callbacks when the
20 // audio is finished playing, so that it can delete itself.. idk
21 // TODO: racenis fix pls
22 Sound(name_t sound, float volume, vec3 position);
23 void UpdateParameters();
24 void SetParameters();
25 void Load();
26 void Unload();
27 void Serialize();
28 void MessageHandler(Message& msg);
30 static void Register();
31protected:
33
35 float volume;
37};
38
39}
40
41#endif // TRAM_SDK_ENTITIES_AUDIO_H
Audio data resource.
Definition: sound.h:18
Sound(name_t name)
Definition: sound.h:35
Wrapper for an EntityComponent pointer.
Definition: entitycomponent.h:51
Entity base class.
Definition: entity.h:23
void Load()
Definition: resource.h:32
name_t sound
Definition: sound.h:34
float volume
Definition: sound.h:35
Sound(const SharedEntityData &, const ValueArray &)
int sound_flags
Definition: sound.h:36
void Serialize()
Definition: sound.cpp:123
void Unload()
Unloads an entity.
void UpdateParameters()
Called when Entity::UpdateTransform is called.
Definition: sound.cpp:89
Component< AudioComponent > audio
Definition: sound.h:32
name_t GetType()
Returns the type of the entity.
Definition: sound.cpp:55
void SetParameters()
Called when either Entity::SetLocation or Entity::SetRotation is called.
Definition: sound.cpp:94
void MessageHandler(Message &msg)
Allows entities to receive messages.
Definition: sound.cpp:127
Definition: value.h:314
void Register(name_t base_type, Entity *(*constr_func)(name_t new_type, const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *))
Definition: script.cpp:39
Serialization, i.e.
glm::vec3 vec3
Definition: math.h:11
Message data.
Definition: message.h:16
Basic Entity parameters.
Definition: entity.h:132
Interned string type.
Definition: uid.h:10
================================================ FILE: docs/cppapi/entities_2trigger_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/trigger.cpp File Reference
Tramway SDK v0.1.1
trigger.cpp File Reference

Namespaces

namespace  tram
 Serialization, i.e.
 

Enumerations

enum  : uint32_t { tram::TRIGGER_DISABLED = 1 }
 
enum  { tram::FIELD_FLAGS , tram::FIELD_COLLISION_MASK , tram::FIELD_MODEL }
 
================================================ FILE: docs/cppapi/entities_2trigger_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/trigger.h File Reference
Tramway SDK v0.1.1
trigger.h File Reference

Go to the source code of this file.

Classes

class  tram::Trigger
 TriggerComponent wrapper. More...
 

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/entities_2trigger_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/trigger.h Source File
Tramway SDK v0.1.1
trigger.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_ENTITIES_TRIGGER_H
4#define TRAM_SDK_ENTITIES_TRIGGER_H
5
6#include <framework/entity.h>
9
10namespace tram {
11
12class RenderComponent;
13class TriggerComponent;
14
15class Trigger : public Entity {
16public:
17 Trigger(const SharedEntityData&, const ValueArray&);
18 void UpdateParameters();
19 void SetParameters();
20 void Load();
21 void Unload();
22 void Serialize();
23 void MessageHandler(Message& msg);
24 void Activate();
26 static bool IsDrawTrigger();
27 static void SetDrawTrigger(bool);
28 static void Register();
29protected:
32 void SetupModel();
33
35 uint32_t trigger_flags;
37};
38
39}
40
41#endif // TRAM_SDK_ENTITIES_TRIGGER_H
Wrapper for an EntityComponent pointer.
Definition: entitycomponent.h:51
Entity base class.
Definition: entity.h:23
TriggerComponent wrapper.
Definition: trigger.h:15
void SetParameters()
Called when either Entity::SetLocation or Entity::SetRotation is called.
Definition: trigger.cpp:72
static void Register()
Definition: trigger.cpp:43
void Load()
Loads an entity.
Definition: trigger.cpp:79
static bool IsDrawTrigger()
void MessageHandler(Message &msg)
Allows entities to receive messages.
Definition: trigger.cpp:118
Component< TriggerComponent > triggercomponent
Definition: trigger.h:31
void SetupModel()
Definition: trigger.cpp:131
void Unload()
Unloads an entity.
Definition: trigger.cpp:99
name_t model
Definition: trigger.h:34
void Activate()
Definition: trigger.cpp:112
name_t GetType()
Returns the type of the entity.
Definition: trigger.cpp:53
void Serialize()
Definition: trigger.cpp:108
uint32_t trigger_flags
Definition: trigger.h:35
void UpdateParameters()
Called when Entity::UpdateTransform is called.
Definition: trigger.cpp:63
Component< RenderComponent > rendercomponent
Definition: trigger.h:30
uint32_t collision_mask
Definition: trigger.h:36
Trigger(const SharedEntityData &, const ValueArray &)
Definition: trigger.cpp:57
static void SetDrawTrigger(bool)
Definition: trigger.cpp:146
Definition: value.h:314
Serialization, i.e.
Message data.
Definition: message.h:16
Basic Entity parameters.
Definition: entity.h:132
Interned string type.
Definition: uid.h:10
================================================ FILE: docs/cppapi/entities_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.cpp File Reference
Tramway SDK v0.1.1
entities.cpp File Reference

Classes

struct  tram::Ext::Kitchensink::EntityChildren
 

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Ext
 
namespace  tram::Ext::Kitchensink
 Extension containing random stuff that doesn't fit in anywhere else.
 

Macros

#define PlaySound(TYPE)   if (sound) SoundTable::Find(sound)->PlaySound(TYPE, origin, 1.0f);
 

Enumerations

enum  {
  tram::Ext::Kitchensink::BUTTON_FIELD_FLAGS , tram::Ext::Kitchensink::BUTTON_FIELD_MODEL , tram::Ext::Kitchensink::BUTTON_FIELD_LIGHTMAP , tram::Ext::Kitchensink::BUTTON_FIELD_ORIGIN ,
  tram::Ext::Kitchensink::BUTTON_FIELD_DIRECTION , tram::Ext::Kitchensink::BUTTON_FIELD_SPEED , tram::Ext::Kitchensink::BUTTON_FIELD_PAUSE , tram::Ext::Kitchensink::BUTTON_FIELD_DISTANCE ,
  tram::Ext::Kitchensink::BUTTON_FIELD_SOUND , tram::Ext::Kitchensink::BUTTON_FIELD_PARENT , tram::Ext::Kitchensink::BUTTON_FIELD_LAST
}
 
enum  {
  tram::Ext::Kitchensink::BUTTON_FLAG_ROTARY = 1 , tram::Ext::Kitchensink::BUTTON_FLAG_MOMENTARY = 2 , tram::Ext::Kitchensink::BUTTON_FLAG_TOGGLE = 4 , tram::Ext::Kitchensink::BUTTON_FLAG_LOCKED = 8 ,
  tram::Ext::Kitchensink::BUTTON_FLAG_PUSHED = 16
}
 
enum  {
  tram::Ext::Kitchensink::BUTTON_STATE_NADIR_WAITING , tram::Ext::Kitchensink::BUTTON_STATE_NADIR_READY , tram::Ext::Kitchensink::BUTTON_STATE_RISING , tram::Ext::Kitchensink::BUTTON_STATE_ZENITH_WAITING ,
  tram::Ext::Kitchensink::BUTTON_STATE_ZENITH_READY , tram::Ext::Kitchensink::BUTTON_STATE_LOWERING
}
 

Functions

void tram::Ext::Kitchensink::AddChild (name_t parent, id_t child)
 
void tram::Ext::Kitchensink::UpdateHierarchy (id_t parent_id)
 

Variables

Hashmap< EntityChildren > tram::Ext::Kitchensink::hierarchy_map ("hierarchy_map", 200)
 

Macro Definition Documentation

◆ PlaySound

#define PlaySound (   TYPE)    if (sound) SoundTable::Find(sound)->PlaySound(TYPE, origin, 1.0f);
================================================ FILE: docs/cppapi/entities_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h File Reference
Tramway SDK v0.1.1
entities.h File Reference
================================================ FILE: docs/cppapi/entities_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.h Source File
Tramway SDK v0.1.1
entities.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_EXTENSIONS_KITCHENSINK_ENTITIES_H
4#define TRAM_SDK_EXTENSIONS_KITCHENSINK_ENTITIES_H
5
6#include <framework/entity.h>
9
10namespace tram {
11 class RenderComponent;
12 class PhysicsComponent;
13}
14
15namespace tram::Ext::Kitchensink {
16
17class Button : public Entity {
18public:
19 Button(const SharedEntityData&, const ValueArray&);
20 void UpdateParameters(); void SetParameters();
21 void Load(); void Unload(); void Serialize();
22 void EventHandler(Event &event); void MessageHandler(Message& msg);
24 static void Register();
25protected:
28
29 void SwitchState(int);
30
32
33 uint32_t flags;
38 float speed;
39 float pause;
40 float distance;
43
46
47 float progress;
48 float timer;
49 int state;
51};
52
53class Breakable : public Entity {
54public:
57 void Load(); void Unload(); void Serialize();
59 static void Register();
60protected:
63
66};
67
68class Water : public Entity {
69public:
72 void Load(); void Unload(); void Serialize();
74 static void Register();
75protected:
78
81};
82
83class Train : public Entity {
84public:
87 void Load(); void Unload(); void Serialize();
89 static void Register();
90protected:
93
96};
97
98class Pickup : public Entity {
99public:
102 void Load(); void Unload(); void Serialize();
104 static void Register();
105protected:
108
111};
112
113class DebugText : public Entity {
114public:
117 void Load(); void Unload(); void Serialize();
119 static void Register();
120protected:
123
126};
127
128class DebugShape : public Entity {
129public:
132 void Load(); void Unload(); void Serialize();
134 static void Register();
135protected:
138
141};
142
143class TriggerAutosave : public Entity {
144public:
147 void Load(); void Unload(); void Serialize();
149 static void Register();
150protected:
153
156};
157
158class TriggerHurt : public Entity {
159public:
162 void Load(); void Unload(); void Serialize();
164 static void Register();
165protected:
168
171};
172
173class TriggerOnce : public Entity {
174public:
177 void Load(); void Unload(); void Serialize();
179 static void Register();
180protected:
183
186};
187
188class TriggerMultiple : public Entity {
189public:
192 void Load(); void Unload(); void Serialize();
194 static void Register();
195protected:
198
201};
202
203class TriggerPush : public Entity {
204public:
207 void Load(); void Unload(); void Serialize();
209 static void Register();
210protected:
213
216};
217
218class TriggerRemove : public Entity {
219public:
222 void Load(); void Unload(); void Serialize();
224 static void Register();
225protected:
228
231};
232
233class TriggerTeleport : public Entity {
234public:
237 void Load(); void Unload(); void Serialize();
239 static void Register();
240protected:
243
246};
247
249public:
252 void Load(); void Unload(); void Serialize();
254 static void Register();
255protected:
258
261};
262
263}
264
265#endif // TRAM_SDK_EXTENSIONS_KITCHENSINK_ENTITIES_H
Wrapper for an EntityComponent pointer.
Definition: entitycomponent.h:51
Entity base class.
Definition: entity.h:23
Smart wrapper class for Event listeners.
Definition: event.h:69
Definition: entities.h:53
Breakable(const SharedEntityData &, const ValueArray &)
void Load()
Loads an entity.
name_t model
Definition: entities.h:64
Component< RenderComponent > rendercomponent
Definition: entities.h:61
name_t collmodel
Definition: entities.h:65
void UpdateParameters()
Called when Entity::UpdateTransform is called.
Component< PhysicsComponent > physicscomponent
Definition: entities.h:62
void MessageHandler(Message &msg)
Allows entities to receive messages.
void Unload()
Unloads an entity.
void SetParameters()
Called when either Entity::SetLocation or Entity::SetRotation is called.
Essentially a func_door.
Definition: entities.h:17
Component< RenderComponent > rendercomponent
Definition: entities.h:26
float timer
Definition: entities.h:48
float distance
Definition: entities.h:40
vec3 start_pos
Definition: entities.h:44
Button(const SharedEntityData &, const ValueArray &)
Definition: entities.cpp:115
name_t model
Definition: entities.h:34
uint32_t flags
Definition: entities.h:33
void SetParameters()
Called when either Entity::SetLocation or Entity::SetRotation is called.
Definition: entities.cpp:186
void EventHandler(Event &event)
Allows entities to receive events.
Definition: entities.cpp:229
Component< PhysicsComponent > physicscomponent
Definition: entities.h:27
void UpdateParameters()
Called when Entity::UpdateTransform is called.
Definition: entities.cpp:149
name_t GetType()
Returns the type of the entity.
Definition: entities.cpp:111
void MessageHandler(Message &msg)
Allows entities to receive messages.
Definition: entities.cpp:304
float pause
Definition: entities.h:39
void Unload()
Unloads an entity.
Definition: entities.cpp:214
float progress
Definition: entities.h:47
int state
Definition: entities.h:49
vec3 direction
Definition: entities.h:37
name_t sound
Definition: entities.h:41
name_t lightmap
Definition: entities.h:35
void Load()
Loads an entity.
Definition: entities.cpp:191
vec3 origin
Definition: entities.h:36
void Serialize()
Definition: entities.cpp:223
EventListener tick
Definition: entities.h:31
float speed
Definition: entities.h:38
int last_activate
Definition: entities.h:50
static void Register()
Definition: entities.cpp:101
name_t parent
Definition: entities.h:42
quat start_rot
Definition: entities.h:45
Definition: entities.h:128
name_t model
Definition: entities.h:139
void SetParameters()
Called when either Entity::SetLocation or Entity::SetRotation is called.
DebugShape(const SharedEntityData &, const ValueArray &)
void UpdateParameters()
Called when Entity::UpdateTransform is called.
void MessageHandler(Message &msg)
Allows entities to receive messages.
Component< PhysicsComponent > physicscomponent
Definition: entities.h:137
name_t collmodel
Definition: entities.h:140
Component< RenderComponent > rendercomponent
Definition: entities.h:136
void Load()
Loads an entity.
void Unload()
Unloads an entity.
Definition: entities.h:113
Component< PhysicsComponent > physicscomponent
Definition: entities.h:122
void Load()
Loads an entity.
void SetParameters()
Called when either Entity::SetLocation or Entity::SetRotation is called.
DebugText(const SharedEntityData &, const ValueArray &)
name_t collmodel
Definition: entities.h:125
void MessageHandler(Message &msg)
Allows entities to receive messages.
name_t model
Definition: entities.h:124
void UpdateParameters()
Called when Entity::UpdateTransform is called.
void Unload()
Unloads an entity.
Component< RenderComponent > rendercomponent
Definition: entities.h:121
Definition: entities.h:98
name_t collmodel
Definition: entities.h:110
void MessageHandler(Message &msg)
Allows entities to receive messages.
void Unload()
Unloads an entity.
Component< RenderComponent > rendercomponent
Definition: entities.h:106
void Load()
Loads an entity.
void SetParameters()
Called when either Entity::SetLocation or Entity::SetRotation is called.
Component< PhysicsComponent > physicscomponent
Definition: entities.h:107
Pickup(const SharedEntityData &, const ValueArray &)
name_t model
Definition: entities.h:109
void UpdateParameters()
Called when Entity::UpdateTransform is called.
Definition: entities.h:83
name_t collmodel
Definition: entities.h:95
void UpdateParameters()
Called when Entity::UpdateTransform is called.
void SetParameters()
Called when either Entity::SetLocation or Entity::SetRotation is called.
Train(const SharedEntityData &, const ValueArray &)
Component< RenderComponent > rendercomponent
Definition: entities.h:91
name_t model
Definition: entities.h:94
void Load()
Loads an entity.
Component< PhysicsComponent > physicscomponent
Definition: entities.h:92
void MessageHandler(Message &msg)
Allows entities to receive messages.
void Unload()
Unloads an entity.
Definition: entities.h:143
name_t collmodel
Definition: entities.h:155
Component< RenderComponent > rendercomponent
Definition: entities.h:151
void SetParameters()
Called when either Entity::SetLocation or Entity::SetRotation is called.
Component< PhysicsComponent > physicscomponent
Definition: entities.h:152
void MessageHandler(Message &msg)
Allows entities to receive messages.
TriggerAutosave(const SharedEntityData &, const ValueArray &)
name_t model
Definition: entities.h:154
void UpdateParameters()
Called when Entity::UpdateTransform is called.
Definition: entities.h:158
name_t model
Definition: entities.h:169
Component< PhysicsComponent > physicscomponent
Definition: entities.h:167
Component< RenderComponent > rendercomponent
Definition: entities.h:166
void SetParameters()
Called when either Entity::SetLocation or Entity::SetRotation is called.
name_t collmodel
Definition: entities.h:170
void UpdateParameters()
Called when Entity::UpdateTransform is called.
void Unload()
Unloads an entity.
void MessageHandler(Message &msg)
Allows entities to receive messages.
TriggerHurt(const SharedEntityData &, const ValueArray &)
Definition: entities.h:188
void SetParameters()
Called when either Entity::SetLocation or Entity::SetRotation is called.
void UpdateParameters()
Called when Entity::UpdateTransform is called.
TriggerMultiple(const SharedEntityData &, const ValueArray &)
name_t collmodel
Definition: entities.h:200
name_t model
Definition: entities.h:199
Component< RenderComponent > rendercomponent
Definition: entities.h:196
Component< PhysicsComponent > physicscomponent
Definition: entities.h:197
void MessageHandler(Message &msg)
Allows entities to receive messages.
Definition: entities.h:173
Component< PhysicsComponent > physicscomponent
Definition: entities.h:182
void SetParameters()
Called when either Entity::SetLocation or Entity::SetRotation is called.
Component< RenderComponent > rendercomponent
Definition: entities.h:181
void UpdateParameters()
Called when Entity::UpdateTransform is called.
name_t collmodel
Definition: entities.h:185
name_t model
Definition: entities.h:184
void Unload()
Unloads an entity.
TriggerOnce(const SharedEntityData &, const ValueArray &)
void MessageHandler(Message &msg)
Allows entities to receive messages.
void MessageHandler(Message &msg)
Allows entities to receive messages.
Component< PhysicsComponent > physicscomponent
Definition: entities.h:257
name_t collmodel
Definition: entities.h:260
TriggerPlayerMovement(const SharedEntityData &, const ValueArray &)
Component< RenderComponent > rendercomponent
Definition: entities.h:256
void SetParameters()
Called when either Entity::SetLocation or Entity::SetRotation is called.
name_t model
Definition: entities.h:259
void UpdateParameters()
Called when Entity::UpdateTransform is called.
Definition: entities.h:203
void SetParameters()
Called when either Entity::SetLocation or Entity::SetRotation is called.
void MessageHandler(Message &msg)
Allows entities to receive messages.
TriggerPush(const SharedEntityData &, const ValueArray &)
name_t model
Definition: entities.h:214
name_t collmodel
Definition: entities.h:215
Component< RenderComponent > rendercomponent
Definition: entities.h:211
void Unload()
Unloads an entity.
void UpdateParameters()
Called when Entity::UpdateTransform is called.
Component< PhysicsComponent > physicscomponent
Definition: entities.h:212
Definition: entities.h:218
Component< PhysicsComponent > physicscomponent
Definition: entities.h:227
name_t model
Definition: entities.h:229
TriggerRemove(const SharedEntityData &, const ValueArray &)
void MessageHandler(Message &msg)
Allows entities to receive messages.
Component< RenderComponent > rendercomponent
Definition: entities.h:226
void Unload()
Unloads an entity.
name_t collmodel
Definition: entities.h:230
void SetParameters()
Called when either Entity::SetLocation or Entity::SetRotation is called.
void UpdateParameters()
Called when Entity::UpdateTransform is called.
Definition: entities.h:233
Component< RenderComponent > rendercomponent
Definition: entities.h:241
TriggerTeleport(const SharedEntityData &, const ValueArray &)
void MessageHandler(Message &msg)
Allows entities to receive messages.
name_t collmodel
Definition: entities.h:245
Component< PhysicsComponent > physicscomponent
Definition: entities.h:242
name_t model
Definition: entities.h:244
void UpdateParameters()
Called when Entity::UpdateTransform is called.
void SetParameters()
Called when either Entity::SetLocation or Entity::SetRotation is called.
Definition: entities.h:68
Component< PhysicsComponent > physicscomponent
Definition: entities.h:77
void Load()
Loads an entity.
Component< RenderComponent > rendercomponent
Definition: entities.h:76
Water(const SharedEntityData &, const ValueArray &)
name_t collmodel
Definition: entities.h:80
void Unload()
Unloads an entity.
void MessageHandler(Message &msg)
Allows entities to receive messages.
name_t model
Definition: entities.h:79
void UpdateParameters()
Called when Entity::UpdateTransform is called.
void SetParameters()
Called when either Entity::SetLocation or Entity::SetRotation is called.
Definition: value.h:314
Extension containing random stuff that doesn't fit in anywhere else.
Definition: ai.cpp:15
Serialization, i.e.
glm::vec3 vec3
Definition: math.h:11
glm::quat quat
Definition: math.h:12
Event data.
Definition: event.h:24
Message data.
Definition: message.h:16
Basic Entity parameters.
Definition: entity.h:132
Interned string type.
Definition: uid.h:10
================================================ FILE: docs/cppapi/entity_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/entity.cpp File Reference
Tramway SDK v0.1.1
entity.cpp File Reference
#include <framework/entity.h>
#include <framework/worldcell.h>
#include <framework/serialization.h>
#include <framework/file.h>
#include <framework/logging.h>
#include <templates/hashmap.h>
#include <config.h>
#include <iostream>
#include <unordered_map>
#include <algorithm>

Classes

struct  tram::EntityTypeInfo
 

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/entity_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/entity.h File Reference
Tramway SDK v0.1.1
entity.h File Reference
#include <framework/uid.h>
#include <framework/core.h>
#include <framework/math.h>
#include <framework/value.h>
#include <framework/signal.h>

Go to the source code of this file.

Classes

class  tram::Entity
 Entity base class. More...
 
struct  tram::Entity::FieldInfo
 
struct  tram::SharedEntityData
 Basic Entity parameters. More...
 

Namespaces

namespace  tram
 Serialization, i.e.
 

Typedefs

typedef Entity *(* tram::entity_make) (const SharedEntityData &, const ValueArray &)
 
typedef void(* tram::entity_clear) (Entity *)
 
================================================ FILE: docs/cppapi/entity_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/entity.h Source File
Tramway SDK v0.1.1
entity.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_FRAMEWORK_ENTITY_H
4#define TRAM_SDK_FRAMEWORK_ENTITY_H
5
6#include <framework/uid.h>
7#include <framework/core.h>
8#include <framework/math.h>
9#include <framework/value.h>
10#include <framework/signal.h>
11
12namespace tram {
13
14class WorldCell;
15class Message;
16struct SharedEntityData;
17struct ValueArray;
18class File;
19
20typedef Entity* (*entity_make)(const SharedEntityData&, const ValueArray&);
21typedef void (*entity_clear)(Entity*);
22
23class Entity {
24public:
25 virtual void Load() = 0;
26
27 virtual void Unload() = 0;
28
29 virtual void Serialize() = 0;
30
31 Entity();
34
35 virtual ~Entity();
36
37 inline name_t GetName() const { return name; }
38 inline id_t GetID() const { return id; }
39 inline WorldCell* GetCell() { return cell; }
40 inline bool IsLoaded() const { return flags & LOADED; }
41 inline bool IsAutoLoad() const { return !(flags & DISABLE_AUTO_LOAD); }
42 inline bool IsPersistent() const { return !(flags & NON_PERSISTENT); }
43 inline bool IsChanged() const { return flags & DIRTY; }
44 inline bool IsDeleted() const { return flags & DELETED; }
45 inline bool IsLoadedFromDisk() const { return flags & LOADED_FROM_DISK; }
46
47 void virtual UpdateParameters() = 0;
48 void virtual SetParameters() = 0;
49
50 static void Update();
51 void Yeet();
52
53 inline void SetAutoLoad(bool is) { flags = is ? flags & ~DISABLE_AUTO_LOAD : flags | DISABLE_AUTO_LOAD; }
54 inline void SetPersistent(bool is) { flags = is ? flags & ~NON_PERSISTENT : flags | NON_PERSISTENT; }
55
57 void SetRotation(quat rot) { rotation = rot; SetParameters(); }
58
59 inline void UpdateTransform(const vec3& loc, const quat& rot){
60 location = loc;
61 rotation = rot;
64 }
65
66 inline const vec3& GetLocation() { return location; }
67 inline const quat& GetRotation() { return rotation; }
68
69 virtual void MessageHandler(Message& msg) = 0;
70 virtual void EventHandler(Event &event) {};
71
72 virtual name_t GetType() = 0;
73
74 void CheckTransition();
75
76 struct FieldInfo {
77 uint32_t field_id;
79 uint32_t field_flags;
80 };
81
82 enum : uint32_t {
84 };
85
86 static void RegisterType(name_t name, entity_make, entity_clear, const Type* fields, size_t fieldcount);
87 static void RegisterType(name_t name, entity_make, entity_clear, const FieldInfo* fields, size_t fieldcount);
88 static void RegisterType(name_t name, entity_make, entity_clear, std::initializer_list<FieldInfo> fields);
89
90 inline SignalTable* GetSignalTable() { return signals; }
91
92 static Entity* Make(name_t type, File* file);
93 static Entity* Make(name_t type, const SharedEntityData&, const ValueArray&);
94 static Entity* Find(id_t entity_id);
95 static Entity* Find(name_t entity_name);
96protected:
97 enum : uint32_t {
99 LOADED = 2,
102 DIRTY = 16,
105 };
106
107 id_t id = 0;
109
110 WorldCell* cell = nullptr;
111
112 // don't really need this, since we can use the entity ID number to lookup
113 // the SignalTable for each entity
114 // TODO: fix
116
117 quat rotation = {1.0f, 0.0f, 0.0f, 0.0f};
118 vec3 location = {0.0f, 0.0f, 0.0f};
119
120 uint32_t flags = 0;
121
122 void Register();
123 void Unregister();
124 inline void FireSignal(signal_t type) { if (signals) signals->Fire(type, this->id); }
125 inline void FireSignal(signal_t type, Value value) { if (signals) signals->Fire(type, this->id, value); }
126
127 inline void SetFlag(uint32_t flag, bool value) { flags = value ? flags | flag : flags & ~flag; }
128
129 friend class WorldCell;
130};
131
134 uint64_t id = 0;
136 uint32_t flags = 0;
137 vec3 position = {0.0f, 0.0f, 0.0f};
138 quat rotation = {1.0f, 0.0f, 0.0f, 0.0f};;
139};
140
141}
142
143#endif // TRAM_SDK_FRAMEWORK_ENTITY_H
Entity base class.
Definition: entity.h:23
void SetPersistent(bool is)
Definition: entity.h:54
virtual void Serialize()=0
quat rotation
Definition: entity.h:117
bool IsPersistent() const
Returns the persistence status of an entity.
Definition: entity.h:42
id_t id
Definition: entity.h:107
void CheckTransition()
Check whether an entity has entered a different cell.
Definition: entity.cpp:228
bool IsAutoLoad() const
Returns the auto load flag status.
Definition: entity.h:41
void Register()
Registers the entity.
Definition: entity.cpp:333
virtual void Unload()=0
Unloads an entity.
virtual void EventHandler(Event &event)
Allows entities to receive events.
Definition: entity.h:70
bool IsLoaded() const
Returns the entity load status.
Definition: entity.h:40
SignalTable * signals
Definition: entity.h:115
bool IsDeleted() const
Returns the entity deletion status.
Definition: entity.h:44
virtual void Load()=0
Loads an entity.
void UpdateTransform(const vec3 &loc, const quat &rot)
Definition: entity.h:59
virtual name_t GetType()=0
Returns the type of the entity.
static Entity * Make(name_t type, File *file)
Loads an Entity from a File.
Definition: entity.cpp:417
Entity()
Creates an unnamed entity with a random ID.
Definition: entity.cpp:188
id_t GetID() const
Definition: entity.h:38
void SetFlag(uint32_t flag, bool value)
Definition: entity.h:127
static void RegisterType(name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)
Registers a new entity type.
Definition: entity.cpp:266
void SetLocation(vec3 loc)
Definition: entity.h:56
void SetAutoLoad(bool is)
Definition: entity.h:53
virtual ~Entity()
Destructs the entity.
Definition: entity.cpp:221
const vec3 & GetLocation()
Definition: entity.h:66
void Unregister()
Unregisters the entity.
Definition: entity.cpp:348
SignalTable * GetSignalTable()
Definition: entity.h:90
virtual void UpdateParameters()=0
Called when Entity::UpdateTransform is called.
void SetRotation(quat rot)
Definition: entity.h:57
@ FIELD_SERIALIZE
Definition: entity.h:83
WorldCell * GetCell()
Returns the entity's parent cell.
Definition: entity.h:39
vec3 location
Definition: entity.h:118
void FireSignal(signal_t type)
Definition: entity.h:124
@ DISABLE_AUTO_LOAD
Definition: entity.h:100
@ NON_PERSISTENT
Definition: entity.h:98
@ LOADED
Definition: entity.h:99
@ LOADED_FROM_DISK
Definition: entity.h:104
@ DELETED
Definition: entity.h:103
@ NON_SERIALIZABLE
Definition: entity.h:101
@ DIRTY
Definition: entity.h:102
bool IsChanged() const
Definition: entity.h:43
name_t name
Definition: entity.h:108
virtual void SetParameters()=0
Called when either Entity::SetLocation or Entity::SetRotation is called.
bool IsLoadedFromDisk() const
Definition: entity.h:45
void Yeet()
Purges the entity.
Definition: entity.cpp:406
WorldCell * cell
Definition: entity.h:110
virtual void MessageHandler(Message &msg)=0
Allows entities to receive messages.
const quat & GetRotation()
Definition: entity.h:67
uint32_t flags
Definition: entity.h:120
static void Update()
Updates entities.
Definition: entity.cpp:380
static Entity * Find(id_t entity_id)
Finds the entity by its ID number.
Definition: entity.cpp:361
void FireSignal(signal_t type, Value value)
Definition: entity.h:125
name_t GetName() const
Definition: entity.h:37
Very fast file reader/writer.
Definition: file.h:18
List of Message templates.
Definition: signal.h:50
void Fire(signal_t signal, id_t sender)
Definition: signal.cpp:105
Definition: value.h:314
Generic, type-safe union.
Definition: value.h:18
World streaming unit.
Definition: worldcell.h:16
Serialization, i.e.
uint32_t id_t
Definition: core.h:10
Type
Type enumeration for serialization, etc.
Definition: type.h:12
uint32_t signal_t
Definition: signal.h:12
Entity *(* entity_make)(const SharedEntityData &, const ValueArray &)
Definition: entity.h:20
glm::vec3 vec3
Definition: math.h:11
glm::quat quat
Definition: math.h:12
void(* entity_clear)(Entity *)
Definition: entity.h:21
Definition: entity.h:76
Type field_type
Definition: entity.h:78
uint32_t field_flags
Definition: entity.h:79
uint32_t field_id
Definition: entity.h:77
Event data.
Definition: event.h:24
Message data.
Definition: message.h:16
Basic Entity parameters.
Definition: entity.h:132
quat rotation
Definition: entity.h:138
uint32_t flags
Definition: entity.h:136
name_t type
Definition: entity.h:133
name_t name
Definition: entity.h:135
vec3 position
Definition: entity.h:137
Interned string type.
Definition: uid.h:10
================================================ FILE: docs/cppapi/entitycomponent_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/entitycomponent.cpp File Reference
Tramway SDK v0.1.1
entitycomponent.cpp File Reference

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/entitycomponent_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/entitycomponent.h File Reference
Tramway SDK v0.1.1
entitycomponent.h File Reference
#include <templates/pool.h>
#include <framework/core.h>
#include <framework/async.h>

Go to the source code of this file.

Classes

class  tram::EntityComponent
 Component base class. More...
 
class  tram::Component< T >
 Wrapper for an EntityComponent pointer. More...
 

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/entitycomponent_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/entitycomponent.h Source File
Tramway SDK v0.1.1
entitycomponent.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_FRAMEWORK_ENTITYCOMPONENT_H
4#define TRAM_SDK_FRAMEWORK_ENTITYCOMPONENT_H
5
6#include <templates/pool.h>
7
8#include <framework/core.h>
9#include <framework/async.h>
10
11namespace tram {
12
13class Event;
14class Entity;
15
17public:
18 EntityComponent() = default;
19 virtual ~EntityComponent() = default;
20
21 virtual void Init();
22
23 virtual void EventHandler(Event &event) = 0;
24
25 inline bool IsReady() { return is_ready; }
26 inline bool IsInit() { return is_init; }
27
28 inline Entity* GetParent() { return parent; }
29 inline void SetParent(Entity* parent) { this->parent = parent; }
30
31protected:
33 bool is_ready = false;
34 bool is_init = false;
35 Entity* parent = nullptr;
36
37 // we could make resources_waiting a uint16_t and then we could even turn
38 // is_ready and is_init into a single bitmask, saving memory
39
40 void ResourceReady();
41
42 virtual void Start() = 0;
44 template <typename T> friend class ResourceProxy;
45};
46
50template <typename T>
51class Component {
52public:
55 void make() { if (ptr) yeet(); init(); }
56 void clear() { if (ptr) yeet(); ptr = nullptr; }
57 T* get() { return ptr; }
58 T* operator->() { return ptr; }
59 T& operator*() { return ptr; }
60 operator T*() { return ptr; }
61 explicit operator bool() { return ptr != nullptr; }
62protected:
63 void init();
64 void yeet();
65
66 T* ptr = nullptr;
67};
68
69}
70
71#endif // TRAM_SDK_FRAMEWORK_ENTITYCOMPONENT_H
Wrapper for an EntityComponent pointer.
Definition: entitycomponent.h:51
T * get()
Definition: entitycomponent.h:57
Component()
Definition: entitycomponent.h:53
void make()
Definition: entitycomponent.h:55
T * ptr
Definition: entitycomponent.h:66
T * operator->()
Definition: entitycomponent.h:58
void clear()
Definition: entitycomponent.h:56
T & operator*()
Definition: entitycomponent.h:59
~Component()
Definition: entitycomponent.h:54
Component base class.
Definition: entitycomponent.h:16
bool is_init
Definition: entitycomponent.h:34
void SetParent(Entity *parent)
Definition: entitycomponent.h:29
bool IsReady()
Returns the component's readiness.
Definition: entitycomponent.h:25
virtual ~EntityComponent()=default
bool is_ready
Definition: entitycomponent.h:33
virtual void EventHandler(Event &event)=0
virtual void Start()=0
Entity * GetParent()
Definition: entitycomponent.h:28
size_t resources_waiting
Definition: entitycomponent.h:32
void ResourceReady()
Notifies the component of a streamed-in resource.
Definition: entitycomponent.cpp:53
bool IsInit()
Returns the component's init status.
Definition: entitycomponent.h:26
virtual void Init()
Initializes an entity component.
Definition: entitycomponent.cpp:39
Entity * parent
Definition: entitycomponent.h:35
Entity base class.
Definition: entity.h:23
Definition: resource.h:46
void FinishResources()
Notifies EntityComponents about finished resources.
Definition: async.cpp:243
Serialization, i.e.
Event data.
Definition: event.h:24
================================================ FILE: docs/cppapi/error_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/error.cpp File Reference
Tramway SDK v0.1.1
error.cpp File Reference
#include <render/error.h>

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Render
 High-level Render system API.
 

Functions

uint8_t * tram::Render::MakeNewErrorTexture (vec3 color1, vec3 color2)
 Generates a new error texture. More...
 
StaticModelData * tram::Render::MakeNewErrorModel ()
 Generates a new error model. More...
 
================================================ FILE: docs/cppapi/error_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/error.h File Reference
Tramway SDK v0.1.1
error.h File Reference
#include <render/vertices.h>

Go to the source code of this file.

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Render
 High-level Render system API.
 

Functions

uint8_t * tram::Render::MakeNewErrorTexture (vec3 color1, vec3 color2)
 Generates a new error texture. More...
 
StaticModelData * tram::Render::MakeNewErrorModel ()
 Generates a new error model. More...
 
================================================ FILE: docs/cppapi/error_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/error.h Source File
Tramway SDK v0.1.1
error.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_RENDER_ERROR_H
4#define TRAM_SDK_RENDER_ERROR_H
5
6#include <render/vertices.h>
7
8namespace tram::Render {
9
10uint8_t* MakeNewErrorTexture(vec3 color, vec3 color2);
11
12StaticModelData* MakeNewErrorModel();
13
14}
15
16#endif // TRAM_SDK_RENDER_ERROR_H
High-level Render system API.
Definition: gui.h:8
uint8_t * MakeNewErrorTexture(vec3 color1, vec3 color2)
Generates a new error texture.
Definition: error.cpp:9
StaticModelData * MakeNewErrorModel()
Generates a new error model.
Definition: error.cpp:34
glm::vec3 vec3
Definition: math.h:11
================================================ FILE: docs/cppapi/event_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/event.cpp File Reference
Tramway SDK v0.1.1
event.cpp File Reference
#include <vector>
#include <templates/queue.h>
#include <templates/stackpool.h>
#include <templates/hashmap.h>
#include <framework/event.h>
#include <framework/entity.h>
#include <framework/entitycomponent.h>
#include <framework/logging.h>

Classes

struct  tram::ListenerInfo
 

Namespaces

namespace  tram
 Serialization, i.e.
 

Variables

const size_t tram::MAX_EVENT_TYPES = 100
 
================================================ FILE: docs/cppapi/event_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/event.h File Reference
Tramway SDK v0.1.1
event.h File Reference
#include <cstdint>
#include <cstddef>
#include <type_traits>
#include <framework/uid.h>

Go to the source code of this file.

Classes

struct  tram::Event
 Event data. More...
 
class  tram::EventListener
 Smart wrapper class for Event listeners. More...
 

Namespaces

namespace  tram
 Serialization, i.e.
 

Typedefs

typedef uint16_t tram::event_t
 
typedef uint32_t tram::listener_t
 
typedef Value tram::value_t
 
================================================ FILE: docs/cppapi/event_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/event.h Source File
Tramway SDK v0.1.1
event.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_FRAMEWORK_EVENT_H
4#define TRAM_SDK_FRAMEWORK_EVENT_H
5
6#include <cstdint>
7#include <cstddef>
8#include <type_traits>
9
10#include <framework/uid.h>
11
12namespace tram {
13
14typedef uint16_t event_t;
15typedef uint32_t id_t;
16typedef uint32_t listener_t;
17
18class EntityComponent;
19class Entity;
20
21struct Value;
22typedef Value value_t;
23
24struct Event {
25 enum Type : event_t {
26 NONE, //< Invalid event type
27 KEYPRESS, //< Keyboard key still pressed
28 KEYDOWN, //< Keyboard key pressed
29 KEYUP, //< Keyboard key released
30 KEYCHAR, //< Keyboard input registered
31 CURSORPOS, //< Cursor moved
32 FRAME, //< Emitted every frame
33 TICK, //< Emitted every tick
34 SELECTED, //< Cursor on top of an interactable object
35 LOOK_AT, //< Entity is looking in a direction
37 };
38
39 static event_t Register(const char* name);
40 static event_t GetType(name_t name);
41 static name_t GetName(event_t type);
42 static event_t GetLast();
43
44 static void Post(const Event &event);
45 static void Dispatch();
46
48 static listener_t AddListener(event_t type, Entity* entity);
49 static listener_t AddListener(event_t type, void* data, void (*handler)(Event& event, void* data));
50 static listener_t AddListener(event_t type, void (*handler)(Event& event));
51
52 static void RemoveListener(listener_t listener_id);
53
54 static void* AllocateData(size_t ammount);
55 template <typename T> static T* AllocateData() { return (T*)AllocateData(sizeof(T)); }
56 template <typename T> static T* AllocateData(const T& data) { T* ptr = (T*)AllocateData(sizeof(T)); *ptr = data; return ptr; }
57
61
62 union {
63 void* data = nullptr;
64 int32_t data_int;
66 };
67};
68
70public:
72 void make(event_t event, Entity* parent);
73 void make(event_t event, EntityComponent* parent);
74 void make(event_t event, void (*handler)(Event& event));
75 void clear();
76 explicit operator bool() { return listener != 0; }
77protected:
79};
80
81}
82
83#endif // TRAM_SDK_FRAMEWORK_EVENT_H
Component base class.
Definition: entitycomponent.h:16
Entity base class.
Definition: entity.h:23
Smart wrapper class for Event listeners.
Definition: event.h:69
~EventListener()
Definition: event.cpp:387
listener_t listener
Definition: event.h:78
void make(event_t event, Entity *parent)
Essentially same as Event::AddListener().
Definition: event.cpp:392
void clear()
Essentially same as Event::RemoveListener().
Definition: event.cpp:410
Generic, type-safe union.
Definition: value.h:18
Serialization, i.e.
uint16_t event_t
Definition: event.h:14
uint32_t id_t
Definition: core.h:10
Value value_t
Definition: event.h:21
uint32_t listener_t
Definition: event.h:16
Event data.
Definition: event.h:24
static void RemoveListener(listener_t listener_id)
Deregisters a listener.
Definition: event.cpp:268
static T * AllocateData()
Definition: event.h:55
static event_t GetLast()
Returns the last event_t plus one.
Definition: event.cpp:186
static void Dispatch()
Dispatches events from the event queue.
Definition: event.cpp:313
event_t type
Type of the event.
Definition: event.h:58
static void Post(const Event &event)
Adds an event to the event queue.
Definition: event.cpp:366
Type
Definition: event.h:25
@ TICK
Definition: event.h:33
@ KEYCHAR
Definition: event.h:30
@ KEYUP
Definition: event.h:29
@ LAST_EVENT
Definition: event.h:36
@ CURSORPOS
Definition: event.h:31
@ FRAME
Definition: event.h:32
@ SELECTED
Definition: event.h:34
@ KEYDOWN
Definition: event.h:28
@ NONE
Definition: event.h:26
@ LOOK_AT
Definition: event.h:35
@ KEYPRESS
Definition: event.h:27
int32_t data_int
Arbitrary data integer.
Definition: event.h:64
static event_t Register(const char *name)
Registers a new event type.
Definition: event.cpp:131
void * data
Pointer to arbitrary data.
Definition: event.h:63
id_t poster
Definition: event.h:60
event_t subtype
Arbitrary event subtype.
Definition: event.h:59
value_t * data_value
Pointer to a value_t.
Definition: event.h:65
static T * AllocateData(const T &data)
Definition: event.h:56
static name_t GetName(event_t type)
Returns the name that was associated with a given event_t.
Definition: event.cpp:175
static listener_t AddListener(event_t type, EntityComponent *component)
Registers a listener.
Definition: event.cpp:203
static event_t GetType(name_t name)
Returns the event_t associated with a given name.
Definition: event.cpp:159
Interned string type.
Definition: uid.h:10
================================================ FILE: docs/cppapi/extensions_2menu_2system_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/system.cpp File Reference
Tramway SDK v0.1.1
system.cpp File Reference
#include <extensions/menu/system.h>
#include <framework/settings.h>
#include <audio/audio.h>
#include <platform/api.h>

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Ext
 
namespace  tram::Ext::Menu
 Menu framework.
 

Functions

std::string tram::Ext::Menu::string_float (float value)
 
================================================ FILE: docs/cppapi/extensions_2menu_2system_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/system.h File Reference
Tramway SDK v0.1.1
system.h File Reference
#include <extensions/menu/menu.h>
#include <functional>

Go to the source code of this file.

Classes

class  tram::Ext::Menu::SystemMenu
 
class  tram::Ext::Menu::SettingsMenu
 

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Ext
 
namespace  tram::Ext::Menu
 Menu framework.
 
================================================ FILE: docs/cppapi/extensions_2menu_2system_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/system.h Source File
Tramway SDK v0.1.1
system.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_EXTENSIONS_MENU_SYSTEM_H
4#define TRAM_SDK_EXTENSIONS_MENU_SYSTEM_H
5
7
8#include <functional>
9
10namespace tram {
11 class WorldCell;
12}
13
14namespace tram::Ext::Menu {
15
16//void InitCallbacks();
17//void UpdateCallbacks();
18
19class SystemMenu : public Menu {
20public:
21 void Display();
22 uint32_t Layer() { return 0; }
23 ~SystemMenu() = default;
24protected:
25
26};
27
28class SettingsMenu : public Menu {
29public:
30 void Display();
31 uint32_t Layer() { return 0; }
32 ~SettingsMenu() = default;
33protected:
34 uint32_t tab = 0;
35 uint32_t binding_action = 0;
36 bool binding_state_ready = false;
37};
38
39}
40
41#endif
Definition: menu.h:19
Definition: system.h:28
uint32_t Layer()
Definition: system.h:31
uint32_t tab
Definition: system.h:34
bool binding_state_ready
Definition: system.h:36
void Display()
Definition: system.cpp:77
uint32_t binding_action
Definition: system.h:35
Definition: system.h:19
uint32_t Layer()
Definition: system.h:22
void Display()
Definition: system.cpp:17
Menu framework.
Definition: debug.cpp:23
Serialization, i.e.
================================================ FILE: docs/cppapi/files.html ================================================ Tramway SDK: File List
Tramway SDK v0.1.1
File List
Here is a list of all files with brief descriptions:
[detail level 123456]
  painis
  tram-sdk
  src
  audio
  components
  entities
  extensions
  framework
  physics
  platform
  render
  templates
 config.h
 main.cpp
================================================ FILE: docs/cppapi/firstperson_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/camera/firstperson.cpp File Reference
Tramway SDK v0.1.1
firstperson.cpp File Reference

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Ext
 
namespace  tram::Ext::Camera
 Several different camera implementations.
 

Variables

const float tram::Ext::Camera::TILT_SPEED = 0.01f
 
const float tram::Ext::Camera::BOB_CHANGE_SPEED = 0.05f
 
================================================ FILE: docs/cppapi/firstperson_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/camera/firstperson.h File Reference
Tramway SDK v0.1.1
firstperson.h File Reference

Go to the source code of this file.

Classes

class  tram::Ext::Camera::FirstPersonCamera
 

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Ext
 
namespace  tram::Ext::Camera
 Several different camera implementations.
 
================================================ FILE: docs/cppapi/firstperson_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/camera/firstperson.h Source File
Tramway SDK v0.1.1
firstperson.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_EXTENSIONS_CAMERA_FIRSTPERSON_H
4#define TRAM_SDK_EXTENSIONS_CAMERA_FIRSTPERSON_H
5
7
8namespace tram::Ext::Camera {
9
10class FirstPersonCamera : public Camera {
11public:
14
15 void Update ();
16
17 void SetTilt(float tilt);
18 void SetMouselook(bool mouselook);
20 void SetBobbing(float bobbing_weight);
22 void SetBobbingTilt(float bobbing_tilt);
24 void SetBobSpeed(float speed);
25
26 float GetBob();
27 float GetWeight();
28
29 inline void SetFollowingInterpolation(float following_interpolation) { this->following_interpolation = following_interpolation; }
30 inline void SetFollowingOffset(vec3 offset) { this->following_offset = offset; }
31
32protected:
33 float tilt = 0.0f;
34 float tilt_goal = 0.0f;
35 float tilt_last = 0.0f;
36 float bob = 0.0f;
37 float bobbing_weight_goal = 0.0f;
38 float bobbing_weight = 0.0f;
39 float bobbing_distance = 0.2f;
40 float bobbing_tilt_goal = 0.0f;
41 float bobbing_tilt = 0.0f;
42 float bob_speed = 0.1f;
44 void (*bob_callback)(FirstPersonCamera*) = nullptr;
45
46 bool mouselook = false;
47 bool rotate_following = false;
48 float yaw = 0.0f;
49 float pitch = 0.0f;
50
51 vec3 following_offset = vec3 (0.0f, 0.0f, 0.0f);
53};
54
55}
56
57#endif // TRAM_SDK_EXTENSIONS_CAMERA_FIRSTPERSON_H
Interface API for cameras.
Definition: camera.h:12
Definition: firstperson.h:10
bool rotate_following
Definition: firstperson.h:47
void SetFollowingInterpolation(float following_interpolation)
Definition: firstperson.h:29
float bobbing_tilt_goal
Definition: firstperson.h:40
void SetFollowingOffset(vec3 offset)
Definition: firstperson.h:30
void SetTilt(float tilt)
Definition: firstperson.cpp:28
void SetBobSpeed(float speed)
Sets the speed of the bobs during bobbing.
Definition: firstperson.cpp:63
~FirstPersonCamera()
Definition: firstperson.h:13
float pitch
Definition: firstperson.h:49
float bobbing_tilt
Definition: firstperson.h:41
float bobbing_distance
Definition: firstperson.h:39
void SetBobbingTilt(float bobbing_tilt)
Sets the tilt bobbed during bobbing.
Definition: firstperson.cpp:58
float GetWeight()
Definition: firstperson.cpp:78
float bob_speed
Definition: firstperson.h:42
float tilt_last
Definition: firstperson.h:35
int callback_count
Definition: firstperson.h:43
float bobbing_weight_goal
Definition: firstperson.h:37
void SetRotateFollowing(bool rotate_following)
Definition: firstperson.cpp:36
float bob
Definition: firstperson.h:36
void SetBobbingCallback(void(*bob_callback)(FirstPersonCamera *))
Sets the bobbing callback.
Definition: firstperson.cpp:70
float yaw
Definition: firstperson.h:48
vec3 following_offset
Definition: firstperson.h:51
float tilt_goal
Definition: firstperson.h:34
FirstPersonCamera()
Definition: firstperson.h:12
void SetBobbingDistance(float bobbing_distance)
Sets the distance bobbed during bobbing.
Definition: firstperson.cpp:50
bool mouselook
Definition: firstperson.h:46
void SetMouselook(bool mouselook)
Definition: firstperson.cpp:32
float bobbing_weight
Definition: firstperson.h:38
float GetBob()
Definition: firstperson.cpp:74
void(* bob_callback)(FirstPersonCamera *)
Definition: firstperson.h:44
void Update()
Definition: firstperson.cpp:82
float following_interpolation
Definition: firstperson.h:52
void SetBobbing(float bobbing_weight)
Sets the weight of the bobbing.
Definition: firstperson.cpp:44
float tilt
Definition: firstperson.h:33
Several different camera implementations.
glm::vec3 vec3
Definition: math.h:11
================================================ FILE: docs/cppapi/following_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/camera/following.cpp File Reference
Tramway SDK v0.1.1
following.cpp File Reference

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Ext
 
namespace  tram::Ext::Camera
 Several different camera implementations.
 
================================================ FILE: docs/cppapi/following_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/camera/following.h File Reference
Tramway SDK v0.1.1
following.h File Reference

Go to the source code of this file.

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Ext
 
namespace  tram::Ext::Camera
 Several different camera implementations.
 
================================================ FILE: docs/cppapi/following_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/camera/following.h Source File
Tramway SDK v0.1.1
following.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3
4#ifndef TRAM_SDK_EXTENSIONS_CAMERA_FOLLOWING_H
5#define TRAM_SDK_EXTENSIONS_CAMERA_FOLLOWING_H
6
8
9namespace tram::Ext::Camera {
10
11}
12
13#endif // TRAM_SDK_EXTENSIONS_CAMERA_FOLLOWING_H
Several different camera implementations.
================================================ FILE: docs/cppapi/fpscamera_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/camera/fpscamera.cpp File Reference
Tramway SDK v0.1.1
fpscamera.cpp File Reference
================================================ FILE: docs/cppapi/fpscamera_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/camera/fpscamera.h File Reference
Tramway SDK v0.1.1
fpscamera.h File Reference
================================================ FILE: docs/cppapi/fpscamera_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/camera/fpscamera.h Source File
Tramway SDK v0.1.1
fpscamera.h
================================================ FILE: docs/cppapi/framework_2file_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/file.cpp File Reference
Tramway SDK v0.1.1
file.cpp File Reference
#include <platform/file.h>
#include <framework/file.h>
#include <framework/logging.h>
#include <charconv>
#include <cstring>

Classes

class  tram::FileReaderParser
 
class  tram::TextReaderParser
 
class  tram::FileWriterParser
 
class  tram::TextWriterParser
 

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/framework_2file_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/file.h File Reference
Tramway SDK v0.1.1
file.h File Reference
#include <string>
#include <framework/core.h>
#include <framework/uid.h>

Go to the source code of this file.

Classes

struct  tram::File
 Very fast file reader/writer. More...
 

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/framework_2file_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/file.h Source File
Tramway SDK v0.1.1
file.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_FRAMEWORK_FILE_H
4#define TRAM_SDK_FRAMEWORK_FILE_H
5
6#include <string>
7
8#include <framework/core.h>
9#include <framework/uid.h>
10
11namespace tram {
12
13class FileReader;
14class FileWriter;
15class FileReaderParser;
16class FileWriterParser;
17
18class File {
19public:
20 File (char const* path, uint32_t mode);
21 ~File();
22
23 bool is_open();
24 bool is_continue();
25
26 void write_int8(int8_t value);
27 void write_int16(int16_t value);
28 void write_int32(int32_t value);
29 void write_int64(int64_t value);
30
31 void write_uint8(uint8_t value);
32 void write_uint16(uint16_t value);
33 void write_uint32(uint32_t value);
34 void write_uint64(uint64_t value);
35
36 void write_float32(float value);
37 void write_float64(double value);
38
39 void write_name(name_t value);
40 void write_string(const char* value);
41 void write_newline();
42
43 int8_t read_int8();
44 int16_t read_int16();
45 int32_t read_int32();
46 int64_t read_int64();
47
48 uint8_t read_uint8();
49 uint16_t read_uint16();
50 uint32_t read_uint32();
51 uint64_t read_uint64();
52
53 float read_float32();
54 double read_float64();
55
57 std::string_view read_string();
58 std::string_view read_token();
59 std::string_view read_line();
60
61 void skip_linebreak();
62 void reset_flags();
63
64 bool was_error();
65
66 enum AccessMode : uint32_t {
67 READ = 1, //< Opens the file for reading.
68 WRITE = 2, //< Opens the file for writing.
69 PAUSE_LINE = 4, //< Pauses the parsing on every linebreak.
70 TEXT = 8, //< Opens file for reading/writing in whitespace seperated text format.
71 BINARY = 16 //< Not implemented yet.
72 };
73
74 // TODO: check whichever of these can be private and private them
75
76 std::string path;
77 uint32_t mode;
78
80
81 // cursors for writing
82 char* buffer = nullptr;
83 char* buffer_cursor = nullptr;
84 char* buffer_end = nullptr;
85
86
87
88 FileReader* reader = nullptr;
89 FileWriter* writer = nullptr;
92};
93
94}
95
96#endif // TRAM_SDK_FRAMEWORK_FILE_H
Very fast file reader/writer.
Definition: file.h:18
FileReaderParser * reader_parser
Definition: file.h:90
int8_t read_int8()
Definition: file.cpp:464
FileReader * reader
Definition: file.h:88
bool was_error()
Checks if there has been an error.
Definition: file.cpp:502
uint32_t read_uint32()
Definition: file.cpp:471
int32_t read_int32()
Definition: file.cpp:466
void write_int64(int64_t value)
Definition: file.cpp:447
bool is_open()
Returns true if file was opened.
Definition: file.cpp:419
std::string_view read_string()
Definition: file.cpp:479
FileWriterParser * writer_parser
Definition: file.h:91
std::string path
Definition: file.h:76
void write_name(name_t value)
Definition: file.cpp:457
uint64_t read_uint64()
Definition: file.cpp:472
float read_float32()
Definition: file.cpp:474
std::string_view read_token()
Definition: file.cpp:478
char * buffer
Definition: file.h:82
uint8_t read_uint8()
Definition: file.cpp:469
void write_float64(double value)
Definition: file.cpp:455
void write_int16(int16_t value)
Definition: file.cpp:445
~File()
Definition: file.cpp:408
bool pause_next
Definition: file.h:79
void reset_flags()
Resets the error flag.
Definition: file.cpp:491
int16_t read_int16()
Definition: file.cpp:465
char * buffer_end
Definition: file.h:84
bool is_continue()
Returns true if file parser has not reached end.
Definition: file.cpp:432
uint16_t read_uint16()
Definition: file.cpp:470
void write_newline()
Writes a newline to the file.
Definition: file.cpp:462
void write_int8(int8_t value)
Definition: file.cpp:444
void write_int32(int32_t value)
Definition: file.cpp:446
void write_uint32(uint32_t value)
Definition: file.cpp:451
char * buffer_cursor
Definition: file.h:83
std::string_view read_line()
Parses off the remaining line.
Definition: file.cpp:482
void write_uint16(uint16_t value)
Definition: file.cpp:450
File(char const *path, uint32_t mode)
Opens a file.
Definition: file.cpp:380
AccessMode
Definition: file.h:66
@ PAUSE_LINE
Definition: file.h:69
@ BINARY
Definition: file.h:71
@ WRITE
Definition: file.h:68
@ READ
Definition: file.h:67
@ TEXT
Definition: file.h:70
void skip_linebreak()
Skips over a linebreak.
Definition: file.cpp:488
void write_uint64(uint64_t value)
Definition: file.cpp:452
double read_float64()
Definition: file.cpp:475
void write_uint8(uint8_t value)
Definition: file.cpp:449
name_t read_name()
Definition: file.cpp:477
void write_string(const char *value)
Definition: file.cpp:458
uint32_t mode
Definition: file.h:77
void write_float32(float value)
Definition: file.cpp:454
FileWriter * writer
Definition: file.h:89
int64_t read_int64()
Definition: file.cpp:467
Definition: file.h:29
Definition: file.cpp:37
Definition: file.h:44
Definition: file.cpp:277
File reading backend API.
File writing backend API.
Serialization, i.e.
Interned string type.
Definition: uid.h:10
================================================ FILE: docs/cppapi/framework_2graph_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/graph.cpp File Reference
Tramway SDK v0.1.1
graph.cpp File Reference
#include <framework/graph.h>

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/framework_2graph_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/graph.h File Reference
Tramway SDK v0.1.1
graph.h File Reference
#include <framework/math.h>
#include <vector>

Go to the source code of this file.

Classes

struct  tram::Edge
 
struct  tram::Node
 
class  tram::Graph
 

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/framework_2graph_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/graph.h Source File
Tramway SDK v0.1.1
graph.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_FRAMEWORK_GRAPH_H
4#define TRAM_SDK_FRAMEWORK_GRAPH_H
5
6#include <framework/math.h>
7#include <vector>
8
9namespace tram {
10
11struct Edge {
12 uint32_t from;
13 uint32_t to;
14};
15
16struct Node {
18 std::vector<uint32_t> edges;
19};
20
21class Graph {
22protected:
23 std::vector<Node> nodes;
24 std::vector<Edge> edges;
25};
26
27}
28
29#endif // TRAM_SDK_FRAMEWORK_GRAPH_H
Definition: graph.h:21
std::vector< Edge > edges
Definition: graph.h:24
std::vector< Node > nodes
Definition: graph.h:23
Serialization, i.e.
glm::vec3 vec3
Definition: math.h:11
Definition: graph.h:11
uint32_t to
Definition: graph.h:13
uint32_t from
Definition: graph.h:12
Definition: graph.h:16
vec3 position
Definition: graph.h:17
std::vector< uint32_t > edges
Definition: graph.h:18
================================================ FILE: docs/cppapi/framework_2script_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/script.cpp File Reference
Tramway SDK v0.1.1
script.cpp File Reference
#include <framework/script.h>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <framework/core.h>
#include <framework/entity.h>
#include <framework/event.h>
#include <framework/ui.h>
#include <framework/logging.h>
#include <framework/worldcell.h>
#include <audio/audio.h>
#include <entities/script.h>
#include <physics/physics.h>
#include <physics/collisionshape.h>
#include <physics/collisionmodel.h>
#include <render/render.h>
#include <render/material.h>
#include <render/model.h>
#include <render/sprite.h>
#include <render/api.h>
#include <components/render.h>
#include <components/animation.h>
#include <components/light.h>

Namespaces

namespace  tram::Script
 Scripting API.
 
namespace  tram
 Serialization, i.e.
 

Functions

void tram::Script::SetGlobal (name_t name, value_t value)
 
value_t tram::Script::GetGlobal (name_t name)
 
void tram::Script::SetFunction (name_t name, std::vector< Type > parameters, value_t(*function)(valuearray_t))
 
value_t tram::Script::CallFunction (name_t name, std::vector< Value > parameters)
 
value_t tram::Script::Evaluate (const char *code)
 
void tram::Script::SetInterface (Interface *new_language)
 
void tram::Script::LoadScript (const char *path)
 
void tram::Script::Init ()
 
================================================ FILE: docs/cppapi/framework_2script_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/script.h File Reference
Tramway SDK v0.1.1
script.h File Reference
#include <framework/value.h>
#include <vector>

Go to the source code of this file.

Classes

class  tram::Script::Interface
 

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Script
 Scripting API.
 

Functions

void tram::Script::SetGlobal (name_t name, value_t value)
 
value_t tram::Script::GetGlobal (name_t name)
 
void tram::Script::SetFunction (name_t name, std::vector< Type > parameters, value_t(*function)(valuearray_t))
 
value_t tram::Script::CallFunction (name_t name, std::vector< Value > parameters)
 
value_t tram::Script::Evaluate (const char *code)
 
void tram::Script::SetInterface (Interface *new_language)
 
void tram::Script::LoadScript (const char *path)
 
void tram::Script::Init ()
 
================================================ FILE: docs/cppapi/framework_2script_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/script.h Source File
Tramway SDK v0.1.1
script.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_FRAMEWORK_SCRIPT_H
4#define TRAM_SDK_FRAMEWORK_SCRIPT_H
5
6#include <framework/value.h>
7#include <vector>
8
9namespace tram::Script {
10
11void SetGlobal(name_t name, value_t value);
13void SetFunction(name_t name, std::vector<Type> parameters, value_t (*function)(valuearray_t));
14value_t CallFunction(name_t name, std::vector<Value> parameters);
15value_t Evaluate(const char* code);
16
17class Interface {
18public:
19 virtual name_t GetName() = 0;
20 virtual value_t GetGlobal(name_t name) = 0;
21 virtual void SetGlobal(name_t name, value_t value) = 0;
22 virtual void SetFunction(name_t name, std::vector<Type> parameters, value_t (*function)(valuearray_t)) = 0;
23 virtual value_t CallFunction(name_t name, std::vector<Value> parameters) = 0;
24
25 virtual void LoadScript(const char* path) = 0;
26 virtual value_t Evaluate(const char* code) = 0;
27};
28
29void SetInterface(Interface* language);
30void LoadScript(const char* path);
31
32void Init();
33
34}
35
36#endif // TRAM_SDK_FRAMEWORK_SCRIPT_H
Definition: script.h:17
virtual void LoadScript(const char *path)=0
virtual value_t CallFunction(name_t name, std::vector< Value > parameters)=0
virtual value_t GetGlobal(name_t name)=0
virtual name_t GetName()=0
virtual void SetGlobal(name_t name, value_t value)=0
virtual value_t Evaluate(const char *code)=0
virtual void SetFunction(name_t name, std::vector< Type > parameters, value_t(*function)(valuearray_t))=0
Definition: value.h:314
Generic, type-safe union.
Definition: value.h:18
std::vector< Type > parameters
Definition: lua.cpp:155
Scripting API.
void SetGlobal(name_t name, value_t value)
Definition: script.cpp:48
void Init()
Definition: script.cpp:86
void SetFunction(name_t name, std::vector< Type > parameters, value_t(*function)(valuearray_t))
Definition: script.cpp:56
value_t Evaluate(const char *code)
Definition: script.cpp:64
value_t GetGlobal(name_t name)
Definition: script.cpp:52
void LoadScript(const char *path)
Definition: script.cpp:82
void SetInterface(Interface *new_language)
Definition: script.cpp:78
value_t CallFunction(name_t name, std::vector< Value > parameters)
Definition: script.cpp:60
Value value_t
Definition: event.h:21
ValueArray valuearray_t
Definition: value.h:325
UID name_t
Definition: uid.h:43
Interned string type.
Definition: uid.h:10
================================================ FILE: docs/cppapi/framework_2system_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/system.cpp File Reference
Tramway SDK v0.1.1
system.cpp File Reference
#include <framework/system.h>
#include <framework/logging.h>
#include <config.h>
#include <cassert>
#include <cstring>

Classes

struct  tram::System::SystemInfo
 

Namespaces

namespace  tram::System
 System tracking.
 
namespace  tram
 Serialization, i.e.
 

Functions

uint32_t tram::System::Register (char const *name, char const *short_name)
 Registers a new system. More...
 
system_t tram::System::Find (char const *name)
 Registers a registered system. More...
 
char const * tram::System::GetName (uint32_t system)
 Retrieves the full name of a system. More...
 
char const * tram::System::GetShortName (uint32_t system)
 Retrieves the short name of a system. More...
 
void tram::System::SetInitialized (uint32_t system, bool is_initialized)
 Sets the initialization status of a system. More...
 
bool tram::System::IsInitialized (uint32_t system)
 Checks if a system is initialized. More...
 
void tram::System::SetState (system_t system, SystemState state)
 Sets the state of a system. More...
 
void tram::System::AssertDependency (system_t system)
 
system_t tram::System::GetSystemCount ()
 Returns the total count of registered systems. More...
 
================================================ FILE: docs/cppapi/framework_2system_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/system.h File Reference
Tramway SDK v0.1.1
system.h File Reference
#include <cstdint>

Go to the source code of this file.

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::System
 System tracking.
 

Typedefs

typedef uint32_t tram::System::system_t
 

Enumerations

enum  tram::System::System : system_t {
  tram::System::INVALID , tram::System::CORE , tram::System::PLATFORM , tram::System::UI ,
  tram::System::GUI , tram::System::ASYNC , tram::System::RENDER , tram::System::PHYSICS ,
  tram::System::AUDIO , tram::System::MISC , tram::System::SYSTEM_LAST
}
 
enum  tram::System::SystemState { tram::System::YEET , tram::System::INIT , tram::System::READY }
 

Functions

uint32_t tram::System::Register (char const *name, char const *short_name)
 Registers a new system. More...
 
system_t tram::System::Find (char const *name)
 Registers a registered system. More...
 
void tram::System::SetInitialized (uint32_t system, bool is_initialized)
 Sets the initialization status of a system. More...
 
bool tram::System::IsInitialized (uint32_t system)
 Checks if a system is initialized. More...
 
void tram::System::SetState (system_t system, SystemState state)
 Sets the state of a system. More...
 
void tram::System::AssertDependency (system_t system)
 
char const * tram::System::GetName (uint32_t system)
 Retrieves the full name of a system. More...
 
char const * tram::System::GetShortName (uint32_t system)
 Retrieves the short name of a system. More...
 
system_t tram::System::GetSystemCount ()
 Returns the total count of registered systems. More...
 
================================================ FILE: docs/cppapi/framework_2system_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/system.h Source File
Tramway SDK v0.1.1
system.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_FRAMEWORK_SYSTEM_H
4#define TRAM_SDK_FRAMEWORK_SYSTEM_H
5
6#include <cstdint>
7
8namespace tram::System {
9
10typedef uint32_t system_t;
11
24};
25
29 READY
30};
31
32system_t Register(char const* name, char const* short_name);
33system_t Find(char const* name);
34
35void SetInitialized(system_t system, bool is_initialized);
36bool IsInitialized(system_t system);
37
38void SetState(system_t system, SystemState state);
39void AssertDependency(system_t system);
40
41char const* GetName(system_t system);
42char const* GetShortName(system_t system);
43uint32_t GetSystemCount();
44
45}
46
47#endif // TRAM_SDK_FRAMEWORK_SYSTEM_H
System tracking.
System
Definition: system.h:12
@ RENDER
Definition: system.h:19
@ SYSTEM_LAST
Definition: system.h:23
@ GUI
Definition: system.h:17
@ ASYNC
Definition: system.h:18
@ PLATFORM
Definition: system.h:15
@ AUDIO
Definition: system.h:21
@ MISC
Definition: system.h:22
@ INVALID
Definition: system.h:13
@ UI
Definition: system.h:16
@ CORE
Definition: system.h:14
@ PHYSICS
Definition: system.h:20
bool IsInitialized(uint32_t system)
Checks if a system is initialized.
Definition: system.cpp:133
void SetInitialized(uint32_t system, bool is_initialized)
Sets the initialization status of a system.
Definition: system.cpp:125
char const * GetName(uint32_t system)
Retrieves the full name of a system.
Definition: system.cpp:109
system_t GetSystemCount()
Returns the total count of registered systems.
Definition: system.cpp:184
uint32_t system_t
Definition: system.h:10
void SetState(system_t system, SystemState state)
Sets the state of a system.
Definition: system.cpp:145
SystemState
Definition: system.h:26
@ YEET
Definition: system.h:27
@ INIT
Definition: system.h:28
@ READY
Definition: system.h:29
system_t Find(char const *name)
Registers a registered system.
Definition: system.cpp:98
char const * GetShortName(uint32_t system)
Retrieves the short name of a system.
Definition: system.cpp:117
void AssertDependency(system_t system)
Definition: system.cpp:154
uint32_t Register(char const *name, char const *short_name)
Registers a new system.
Definition: system.cpp:55
================================================ FILE: docs/cppapi/functions.html ================================================ Tramway SDK: Class Members
Tramway SDK v0.1.1
Here is a list of all class members with links to the classes they belong to:

- a -

================================================ FILE: docs/cppapi/functions_b.html ================================================ Tramway SDK: Class Members
Tramway SDK v0.1.1
Here is a list of all class members with links to the classes they belong to:

- b -

================================================ FILE: docs/cppapi/functions_c.html ================================================ Tramway SDK: Class Members
Tramway SDK v0.1.1
Here is a list of all class members with links to the classes they belong to:

- c -

================================================ FILE: docs/cppapi/functions_d.html ================================================ Tramway SDK: Class Members
Tramway SDK v0.1.1
Here is a list of all class members with links to the classes they belong to:

- d -

================================================ FILE: docs/cppapi/functions_e.html ================================================ Tramway SDK: Class Members
Tramway SDK v0.1.1
Here is a list of all class members with links to the classes they belong to:

- e -

================================================ FILE: docs/cppapi/functions_enum.html ================================================ Tramway SDK: Class Members - Enumerations
Tramway SDK v0.1.1
 
================================================ FILE: docs/cppapi/functions_eval.html ================================================ Tramway SDK: Class Members - Enumerator
Tramway SDK v0.1.1
 

- a -

- b -

- c -

- d -

- e -

- f -

- i -

- k -

- l -

- m -

- n -

- o -

- p -

- r -

- s -

- t -

- u -

- w -

================================================ FILE: docs/cppapi/functions_f.html ================================================ Tramway SDK: Class Members
Tramway SDK v0.1.1
Here is a list of all class members with links to the classes they belong to:

- f -

================================================ FILE: docs/cppapi/functions_func.html ================================================ Tramway SDK: Class Members - Functions
Tramway SDK v0.1.1
 

- a -

================================================ FILE: docs/cppapi/functions_func_b.html ================================================ Tramway SDK: Class Members - Functions
Tramway SDK v0.1.1
================================================ FILE: docs/cppapi/functions_func_c.html ================================================ Tramway SDK: Class Members - Functions
Tramway SDK v0.1.1
================================================ FILE: docs/cppapi/functions_func_d.html ================================================ Tramway SDK: Class Members - Functions
Tramway SDK v0.1.1
================================================ FILE: docs/cppapi/functions_func_e.html ================================================ Tramway SDK: Class Members - Functions
Tramway SDK v0.1.1
================================================ FILE: docs/cppapi/functions_func_f.html ================================================ Tramway SDK: Class Members - Functions
Tramway SDK v0.1.1
 

- f -

================================================ FILE: docs/cppapi/functions_func_g.html ================================================ Tramway SDK: Class Members - Functions
Tramway SDK v0.1.1
 

- g -

================================================ FILE: docs/cppapi/functions_func_h.html ================================================ Tramway SDK: Class Members - Functions
Tramway SDK v0.1.1
 

- h -

================================================ FILE: docs/cppapi/functions_func_i.html ================================================ Tramway SDK: Class Members - Functions
Tramway SDK v0.1.1
 

- i -

================================================ FILE: docs/cppapi/functions_func_j.html ================================================ Tramway SDK: Class Members - Functions
Tramway SDK v0.1.1
================================================ FILE: docs/cppapi/functions_func_l.html ================================================ Tramway SDK: Class Members - Functions
Tramway SDK v0.1.1
 

- l -

================================================ FILE: docs/cppapi/functions_func_m.html ================================================ Tramway SDK: Class Members - Functions
Tramway SDK v0.1.1
================================================ FILE: docs/cppapi/functions_func_n.html ================================================ Tramway SDK: Class Members - Functions
Tramway SDK v0.1.1
================================================ FILE: docs/cppapi/functions_func_o.html ================================================ Tramway SDK: Class Members - Functions
Tramway SDK v0.1.1
 

- o -

================================================ FILE: docs/cppapi/functions_func_p.html ================================================ Tramway SDK: Class Members - Functions
Tramway SDK v0.1.1
================================================ FILE: docs/cppapi/functions_func_q.html ================================================ Tramway SDK: Class Members - Functions
Tramway SDK v0.1.1
================================================ FILE: docs/cppapi/functions_func_r.html ================================================ Tramway SDK: Class Members - Functions
Tramway SDK v0.1.1
 

- r -

================================================ FILE: docs/cppapi/functions_func_s.html ================================================ Tramway SDK: Class Members - Functions
Tramway SDK v0.1.1
 

- s -

================================================ FILE: docs/cppapi/functions_func_t.html ================================================ Tramway SDK: Class Members - Functions
Tramway SDK v0.1.1
================================================ FILE: docs/cppapi/functions_func_u.html ================================================ Tramway SDK: Class Members - Functions
Tramway SDK v0.1.1
 

- u -

================================================ FILE: docs/cppapi/functions_func_v.html ================================================ Tramway SDK: Class Members - Functions
Tramway SDK v0.1.1
 

- v -

================================================ FILE: docs/cppapi/functions_func_w.html ================================================ Tramway SDK: Class Members - Functions
Tramway SDK v0.1.1
================================================ FILE: docs/cppapi/functions_func_y.html ================================================ Tramway SDK: Class Members - Functions
Tramway SDK v0.1.1
================================================ FILE: docs/cppapi/functions_func_~.html ================================================ Tramway SDK: Class Members - Functions
Tramway SDK v0.1.1
 

- ~ -

================================================ FILE: docs/cppapi/functions_g.html ================================================ Tramway SDK: Class Members
Tramway SDK v0.1.1
Here is a list of all class members with links to the classes they belong to:

- g -

================================================ FILE: docs/cppapi/functions_h.html ================================================ Tramway SDK: Class Members
Tramway SDK v0.1.1
================================================ FILE: docs/cppapi/functions_i.html ================================================ Tramway SDK: Class Members
Tramway SDK v0.1.1
Here is a list of all class members with links to the classes they belong to:

- i -

================================================ FILE: docs/cppapi/functions_j.html ================================================ Tramway SDK: Class Members
Tramway SDK v0.1.1
Here is a list of all class members with links to the classes they belong to:

- j -

================================================ FILE: docs/cppapi/functions_k.html ================================================ Tramway SDK: Class Members
Tramway SDK v0.1.1
Here is a list of all class members with links to the classes they belong to:

- k -

================================================ FILE: docs/cppapi/functions_l.html ================================================ Tramway SDK: Class Members
Tramway SDK v0.1.1
Here is a list of all class members with links to the classes they belong to:

- l -

================================================ FILE: docs/cppapi/functions_m.html ================================================ Tramway SDK: Class Members
Tramway SDK v0.1.1
Here is a list of all class members with links to the classes they belong to:

- m -

================================================ FILE: docs/cppapi/functions_n.html ================================================ Tramway SDK: Class Members
Tramway SDK v0.1.1
Here is a list of all class members with links to the classes they belong to:

- n -

================================================ FILE: docs/cppapi/functions_o.html ================================================ Tramway SDK: Class Members
Tramway SDK v0.1.1
Here is a list of all class members with links to the classes they belong to:

- o -

================================================ FILE: docs/cppapi/functions_p.html ================================================ Tramway SDK: Class Members
Tramway SDK v0.1.1
Here is a list of all class members with links to the classes they belong to:

- p -

================================================ FILE: docs/cppapi/functions_prop.html ================================================ Tramway SDK: Class Members - Properties
Tramway SDK
 
================================================ FILE: docs/cppapi/functions_q.html ================================================ Tramway SDK: Class Members
Tramway SDK v0.1.1
Here is a list of all class members with links to the classes they belong to:

- q -

================================================ FILE: docs/cppapi/functions_r.html ================================================ Tramway SDK: Class Members
Tramway SDK v0.1.1
Here is a list of all class members with links to the classes they belong to:

- r -

================================================ FILE: docs/cppapi/functions_rela.html ================================================ Tramway SDK: Class Members - Related Functions
Tramway SDK v0.1.1
================================================ FILE: docs/cppapi/functions_s.html ================================================ Tramway SDK: Class Members
Tramway SDK v0.1.1
Here is a list of all class members with links to the classes they belong to:

- s -

================================================ FILE: docs/cppapi/functions_t.html ================================================ Tramway SDK: Class Members
Tramway SDK v0.1.1
Here is a list of all class members with links to the classes they belong to:

- t -

================================================ FILE: docs/cppapi/functions_type.html ================================================ Tramway SDK: Class Members - Typedefs
Tramway SDK
 
================================================ FILE: docs/cppapi/functions_u.html ================================================ Tramway SDK: Class Members
Tramway SDK v0.1.1
Here is a list of all class members with links to the classes they belong to:

- u -

================================================ FILE: docs/cppapi/functions_v.html ================================================ Tramway SDK: Class Members
Tramway SDK v0.1.1
Here is a list of all class members with links to the classes they belong to:

- v -

================================================ FILE: docs/cppapi/functions_vars.html ================================================ Tramway SDK: Class Members - Variables
Tramway SDK v0.1.1
 

- a -

================================================ FILE: docs/cppapi/functions_vars_b.html ================================================ Tramway SDK: Class Members - Variables
Tramway SDK v0.1.1
 

- b -

================================================ FILE: docs/cppapi/functions_vars_c.html ================================================ Tramway SDK: Class Members - Variables
Tramway SDK v0.1.1
 

- c -

================================================ FILE: docs/cppapi/functions_vars_d.html ================================================ Tramway SDK: Class Members - Variables
Tramway SDK v0.1.1
 

- d -

================================================ FILE: docs/cppapi/functions_vars_e.html ================================================ Tramway SDK: Class Members - Variables
Tramway SDK v0.1.1
================================================ FILE: docs/cppapi/functions_vars_f.html ================================================ Tramway SDK: Class Members - Variables
Tramway SDK v0.1.1
 

- f -

================================================ FILE: docs/cppapi/functions_vars_g.html ================================================ Tramway SDK: Class Members - Variables
Tramway SDK v0.1.1
================================================ FILE: docs/cppapi/functions_vars_h.html ================================================ Tramway SDK: Class Members - Variables
Tramway SDK v0.1.1
================================================ FILE: docs/cppapi/functions_vars_i.html ================================================ Tramway SDK: Class Members - Variables
Tramway SDK v0.1.1
 

- i -

================================================ FILE: docs/cppapi/functions_vars_j.html ================================================ Tramway SDK: Class Members - Variables
Tramway SDK v0.1.1
 

- j -

================================================ FILE: docs/cppapi/functions_vars_k.html ================================================ Tramway SDK: Class Members - Variables
Tramway SDK v0.1.1
================================================ FILE: docs/cppapi/functions_vars_l.html ================================================ Tramway SDK: Class Members - Variables
Tramway SDK v0.1.1
 

- l -

================================================ FILE: docs/cppapi/functions_vars_m.html ================================================ Tramway SDK: Class Members - Variables
Tramway SDK v0.1.1
 

- m -

================================================ FILE: docs/cppapi/functions_vars_n.html ================================================ Tramway SDK: Class Members - Variables
Tramway SDK v0.1.1
 

- n -

================================================ FILE: docs/cppapi/functions_vars_o.html ================================================ Tramway SDK: Class Members - Variables
Tramway SDK v0.1.1
================================================ FILE: docs/cppapi/functions_vars_p.html ================================================ Tramway SDK: Class Members - Variables
Tramway SDK v0.1.1
 

- p -

================================================ FILE: docs/cppapi/functions_vars_q.html ================================================ Tramway SDK: Class Members - Variables
Tramway SDK v0.1.1
================================================ FILE: docs/cppapi/functions_vars_r.html ================================================ Tramway SDK: Class Members - Variables
Tramway SDK v0.1.1
 

- r -

================================================ FILE: docs/cppapi/functions_vars_s.html ================================================ Tramway SDK: Class Members - Variables
Tramway SDK v0.1.1
 

- s -

================================================ FILE: docs/cppapi/functions_vars_t.html ================================================ Tramway SDK: Class Members - Variables
Tramway SDK v0.1.1
 

- t -

================================================ FILE: docs/cppapi/functions_vars_u.html ================================================ Tramway SDK: Class Members - Variables
Tramway SDK v0.1.1
 

- u -

================================================ FILE: docs/cppapi/functions_vars_v.html ================================================ Tramway SDK: Class Members - Variables
Tramway SDK v0.1.1
 

- v -

================================================ FILE: docs/cppapi/functions_vars_w.html ================================================ Tramway SDK: Class Members - Variables
Tramway SDK v0.1.1
================================================ FILE: docs/cppapi/functions_vars_x.html ================================================ Tramway SDK: Class Members - Variables
Tramway SDK v0.1.1
================================================ FILE: docs/cppapi/functions_vars_y.html ================================================ Tramway SDK: Class Members - Variables
Tramway SDK v0.1.1
================================================ FILE: docs/cppapi/functions_w.html ================================================ Tramway SDK: Class Members
Tramway SDK v0.1.1
Here is a list of all class members with links to the classes they belong to:

- w -

================================================ FILE: docs/cppapi/functions_x.html ================================================ Tramway SDK: Class Members
Tramway SDK v0.1.1
Here is a list of all class members with links to the classes they belong to:

- x -

================================================ FILE: docs/cppapi/functions_y.html ================================================ Tramway SDK: Class Members
Tramway SDK v0.1.1
================================================ FILE: docs/cppapi/functions_~.html ================================================ Tramway SDK: Class Members
Tramway SDK v0.1.1
Here is a list of all class members with links to the classes they belong to:

- ~ -

================================================ FILE: docs/cppapi/glfw_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/platform/glfw/glfw.cpp File Reference
Tramway SDK v0.1.1
glfw.cpp File Reference
#include <platform/api.h>
#include <platform/platform.h>
#include <framework/ui.h>
#include <framework/system.h>
#include <framework/logging.h>
#include <thread>
#include <GL/gl.h>
#include <GLFW/glfw3.h>

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Platform
 

Variables

int tram::Platform::current_monitor = 0
 
bool tram::Platform::is_fullscreen = false
 
bool tram::Platform::vsync = true
 
================================================ FILE: docs/cppapi/globals.html ================================================ Tramway SDK: File Members
Tramway SDK v0.1.1
Here is a list of all file members with links to the files they belong to:

- a -

- b -

- c -

- d -

- e -

- f -

- i -

- l -

- m -

- p -

- r -

- s -

- t -

================================================ FILE: docs/cppapi/globals_defs.html ================================================ Tramway SDK: File Members
Tramway SDK v0.1.1
 
================================================ FILE: docs/cppapi/globals_func.html ================================================ Tramway SDK: File Members
Tramway SDK v0.1.1
 
================================================ FILE: docs/cppapi/globals_vars.html ================================================ Tramway SDK: File Members
Tramway SDK v0.1.1
 
================================================ FILE: docs/cppapi/graph_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/graph.cpp File Reference
Tramway SDK
graph.cpp File Reference
#include <framework/graph.h>

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/graph_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/graph.h File Reference
Tramway SDK
graph.h File Reference
#include <framework/math.h>
#include <vector>

Go to the source code of this file.

Classes

struct  tram::Edge
 
struct  tram::Node
 
class  tram::Graph
 

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/graph_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/graph.h Source File
Tramway SDK
graph.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_FRAMEWORK_GRAPH_H
4#define TRAM_SDK_FRAMEWORK_GRAPH_H
5
6#include <framework/math.h>
7#include <vector>
8
9namespace tram {
10
11struct Edge {
12 uint32_t from;
13 uint32_t to;
14};
15
16struct Node {
18 std::vector<uint32_t> edges;
19};
20
21class Graph {
22protected:
23 std::vector<Node> nodes;
24 std::vector<Edge> edges;
25};
26
27}
28
29#endif // TRAM_SDK_FRAMEWORK_GRAPH_H
Definition: graph.h:21
std::vector< Edge > edges
Definition: graph.h:24
std::vector< Node > nodes
Definition: graph.h:23
Serialization, i.e.
glm::vec3 vec3
Definition: math.h:11
Definition: graph.h:11
uint32_t to
Definition: graph.h:13
uint32_t from
Definition: graph.h:12
Definition: graph.h:16
vec3 position
Definition: graph.h:17
std::vector< uint32_t > edges
Definition: graph.h:18
================================================ FILE: docs/cppapi/gui_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/gui.cpp File Reference
Tramway SDK v0.1.1
gui.cpp File Reference
#include <templates/stack.h>
#include <framework/gui.h>
#include <framework/system.h>
#include <framework/logging.h>
#include <framework/event.h>
#include <framework/language.h>
#include <render/api.h>
#include <render/vertices.h>
#include <render/sprite.h>
#include <render/material.h>
#include <cstring>

Classes

struct  tram::GUI::FrameObject
 

Namespaces

namespace  tram::GUI
 Immediate mode GUI system.
 
namespace  tram
 Serialization, i.e.
 

Functions

void tram::GUI::SetSelectedText (char *text)
 Sets the text which is selected in a textbox. More...
 
void tram::GUI::SetColor (Render::color_t color, GlyphType type)
 Sets the color. More...
 
void tram::GUI::SetFont (font_t font, GlyphType type)
 Sets the font. More...
 
void tram::GUI::RestoreColor (GlyphType type)
 Restores previous glyph color. More...
 
void tram::GUI::RestoreFont (GlyphType type)
 Restores previous glyph font. More...
 
void tram::GUI::SetGlyphDefaults (Render::color_t color, font_t font, GlyphType type)
 Overrides glyph default colors and fonts. More...
 
void tram::GUI::SetScaling (uint32_t scale)
 Sets the scaling factor. More...
 
uint32_t tram::GUI::GetScaling ()
 Returns the scaling factor. More...
 
void tram::GUI::SetCursorDelayed (UI::CursorType cursor)
 Sets the cursor. More...
 
void tram::GUI::Init ()
 Performs initialization of the GUI system. More...
 
void tram::GUI::UpdateDrawListFonts ()
 Submits registered fonts to the renderer. More...
 
void tram::GUI::Update ()
 Submits all of the glyphs for rendering. More...
 
font_t tram::GUI::RegisterFont (Render::Sprite *sprite)
 Registers a font. More...
 
void tram::GUI::SetGlyph (float x, float y, float z, float w, float h, float tex_x, float tex_y, float tex_w, float tex_h, const vec3 &color, font_t font)
 Adds a glyph to rendering list. More...
 
uint32_t tram::GUI::GlyphWidth (font_t font, glyph_t glyph)
 
uint32_t tram::GUI::GlyphHeight (font_t font, glyph_t glyph)
 
uint32_t tram::GUI::GlyphBorderV (font_t font, glyph_t glyph)
 
void tram::GUI::DrawGlyph (font_t font, glyph_t glyph, const vec3 &color, uint32_t x, uint32_t y, uint32_t w=0, uint32_t h=0)
 
void tram::GUI::Glyph (font_t font, glyph_t glyph)
 Draws a glyph from a font. More...
 
void tram::GUI::DrawBox (font_t font, glyph_t glyph, uint32_t x, uint32_t y, uint32_t w, uint32_t h)
 Draws a glyph box. More...
 
uint32_t tram::GUI::TextWidth (font_t font, const char *text)
 
void tram::GUI::Text (const char *text, uint32_t orientation)
 Draws text on the screen. More...
 
void tram::GUI::DrawBoxHorizontal (font_t font, glyph_t glyph, uint32_t x, uint32_t y, uint32_t w)
 Draws a horizontal bar. More...
 
void tram::GUI::PushFrame (uint32_t x, uint32_t y, uint32_t w, uint32_t h)
 Pushes a frame. More...
 
void tram::GUI::PushFrameRelative (uint32_t orientation, uint32_t offset)
 Pushes a frame releative to the previous. More...
 
void tram::GUI::PopFrame ()
 Removes a frame from the frame stack. More...
 
void tram::GUI::PushFrameRelativeKeepCursor (uint32_t orientation, uint32_t offset, bool keep_x, bool keep_y)
 Pushes a frame, but keeps the cursor in place. More...
 
void tram::GUI::PopFrameKeepCursor (bool keep_x, bool keep_y)
 
bool tram::GUI::CursorOver (uint32_t x, uint32_t y, uint32_t w, uint32_t h)
 
bool tram::GUI::ClickHandled ()
 
bool tram::GUI::ClickHandledLate ()
 
bool tram::GUI::Clicked ()
 
bool tram::GUI::Button (const char *text, bool enabled, uint32_t width)
 Draws a button. More...
 
bool tram::GUI::RadioButton (uint32_t index, uint32_t &selected, const char *text, bool enabled)
 Draws a radio button. More...
 
bool tram::GUI::CheckBox (bool &selected, const char *text, bool enabled)
 Draws a checkbox. More...
 
bool tram::GUI::Slider (float &value, bool enabled, uint32_t width)
 Draws a horizontal slider. More...
 
void tram::GUI::NewLine (uint32_t line)
 Draws a new line. More...
 
void tram::GUI::HorizontalDivider ()
 Draws a horizontal divider. More...
 
void tram::GUI::FillFrame (glyph_t glyph)
 Fills the frame with a glyph. More...
 
bool tram::GUI::TextBox (char *text, uint32_t length, bool enabled, uint32_t w, uint32_t h)
 Draws a textbox. More...
 
void tram::GUI::TextBox (const char *text, uint32_t w, uint32_t h)
 Draws a textbox. More...
 
void tram::GUI::Begin ()
 Begins the GUI commands for the frame. More...
 
void tram::GUI::End ()
 Ends the GUI commands for the frame. More...
 

Variables

uint32_t tram::GUI::last_update_frame = 0
 
bool tram::GUI::beginned = false
 
bool tram::GUI::mouse_click_not_handled = true
 
bool tram::GUI::mouse_click_not_handled_late = true
 
================================================ FILE: docs/cppapi/gui_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/gui.h File Reference
Tramway SDK v0.1.1
gui.h File Reference
#include <framework/ui.h>

Go to the source code of this file.

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Render
 High-level Render system API.
 
namespace  tram::GUI
 Immediate mode GUI system.
 

Typedefs

typedef uint32_t tram::GUI::font_t
 
typedef uint32_t tram::GUI::glyph_t
 

Enumerations

enum  tram::GUI::orientation : uint32_t {
  tram::GUI::TEXT_LEFT , tram::GUI::TEXT_CENTER , tram::GUI::TEXT_RIGHT , tram::GUI::TEXT_JUSTIFIED ,
  tram::GUI::LINE_LOW , tram::GUI::LINE_NORMAL , tram::GUI::LINE_HIGH , tram::GUI::FRAME_LEFT ,
  tram::GUI::FRAME_RIGHT , tram::GUI::FRAME_TOP , tram::GUI::FRAME_BOTTOM , tram::GUI::FRAME_LEFT_INV ,
  tram::GUI::FRAME_RIGHT_INV , tram::GUI::FRAME_TOP_INV , tram::GUI::FRAME_BOTTOM_INV , tram::GUI::FRAME_INSET ,
  tram::GUI::FRAME_CENTER_VERTICAL , tram::GUI::FRAME_CENTER_HORIZONTAL
}
 
enum  tram::GUI::GlyphType { tram::GUI::TEXT , tram::GUI::WIDGET }
 
enum  tram::GUI::widget : glyph_t {
  tram::GUI::WIDGET_TOP_LEFT = 0 , tram::GUI::WIDGET_TOP_MIDDLE = 1 , tram::GUI::WIDGET_TOP_RIGHT = 2 , tram::GUI::WIDGET_MIDDLE_LEFT = 3 ,
  tram::GUI::WIDGET_MIDDLE_MIDDLE = 4 , tram::GUI::WIDGET_MIDDLE_RIGHT = 5 , tram::GUI::WIDGET_BOTTOM_LEFT = 6 , tram::GUI::WIDGET_BOTTOM_MIDDLE = 7 ,
  tram::GUI::WIDGET_BOTTOM_RIGHT = 8 , tram::GUI::WIDGET_LEFT = 0 , tram::GUI::WIDGET_MIDDLE = 1 , tram::GUI::WIDGET_RIGHT = 2 ,
  tram::GUI::WIDGET_BUTTON = 0 , tram::GUI::WIDGET_BUTTON_PRESSED = 9 , tram::GUI::WIDGET_BUTTON_SELECTED_ENABLED = 18 , tram::GUI::WIDGET_BUTTON_SELECTED_DISABLED = 27 ,
  tram::GUI::WIDGET_BUTTON_DISABLED = 36 , tram::GUI::WIDGET_BUTTON_PRESSED_DISABLED = 45 , tram::GUI::WIDGET_WINDOW = 54 , tram::GUI::WIDGET_REVERSE_WINDOW = 63 ,
  tram::GUI::WIDGET_SELECT_BOX = 72 , tram::GUI::WIDGET_SELECT_BOX_PRESSED = 81 , tram::GUI::WIDGET_SELECT_BOX_SELECTED = 90 , tram::GUI::WIDGET_TEXT_BOX = 99 ,
  tram::GUI::WIDGET_TEXT_BOX_DISABLED = 108 , tram::GUI::WIDGET_BORDER = 117 , tram::GUI::WIDGET_SCROLL_BAR_TRACK_VERTICAL = 126 , tram::GUI::WIDGET_SCROLL_BAR_TRACK_HORIZONTAL = 129 ,
  tram::GUI::WIDGET_DIVIDER_HORIZONTAL = 132 , tram::GUI::WIDGET_DIVIDER_VERTICAL = 135 , tram::GUI::WIDGET_SLIDER_TRACK_VERTICAL = 138 , tram::GUI::WIDGET_SLIDER_TRACK_HORIZONTAL = 138 ,
  tram::GUI::WIDGET_SCROLL_BAR_VERTICAL = 144 , tram::GUI::WIDGET_SCROLL_BAR_HORIZONTAL = 147 , tram::GUI::WIDGET_TAB = 150 , tram::GUI::WIDGET_PROGESS_BAR = 153 ,
  tram::GUI::WIDGET_RADIO_BUTTON = 156 , tram::GUI::WIDGET_CHECK_BUTTON = 162 , tram::GUI::WIDGET_SLIDER_VERTICAL = 168 , tram::GUI::WIDGET_SLIDER_HORIZONTAL = 174 ,
  tram::GUI::WIDGET_BUTTON_UP = 180 , tram::GUI::WIDGET_BUTTON_DOWN = 186 , tram::GUI::WIDGET_BUTTON_LEFT = 192 , tram::GUI::WIDGET_BUTTON_RIGHT = 198 ,
  tram::GUI::WIDGET_BUTTON_EXIT = 204 , tram::GUI::WIDGET_BUTTON_HELP = 210 , tram::GUI::WIDGET_BUTTON_2_WINDOW = 216 , tram::GUI::WIDGET_BUTTON_1_WINDOW = 222 ,
  tram::GUI::WIDGET_DEFAULT = 255
}
 

Functions

void tram::GUI::Init ()
 Performs initialization of the GUI system. More...
 
void tram::GUI::Update ()
 Submits all of the glyphs for rendering. More...
 
font_t tram::GUI::RegisterFont (Render::Sprite *sprite)
 Registers a font. More...
 
void tram::GUI::SetScaling (uint32_t scale)
 Sets the scaling factor. More...
 
uint32_t tram::GUI::GetScaling ()
 Returns the scaling factor. More...
 
bool tram::GUI::ClickHandled ()
 
void tram::GUI::Begin ()
 Begins the GUI commands for the frame. More...
 
void tram::GUI::End ()
 Ends the GUI commands for the frame. More...
 
void tram::GUI::FillFrame (glyph_t glyph)
 Fills the frame with a glyph. More...
 
void tram::GUI::HorizontalDivider ()
 Draws a horizontal divider. More...
 
void tram::GUI::NewLine (uint32_t line)
 Draws a new line. More...
 
bool tram::GUI::CheckBox (bool &selected, const char *text, bool enabled)
 Draws a checkbox. More...
 
bool tram::GUI::RadioButton (uint32_t index, uint32_t &selected, const char *text, bool enabled)
 Draws a radio button. More...
 
bool tram::GUI::Button (const char *text, bool enabled, uint32_t width)
 Draws a button. More...
 
bool tram::GUI::Slider (float &value, bool enabled, uint32_t width)
 Draws a horizontal slider. More...
 
void tram::GUI::Glyph (glyph_t glyph)
 
void tram::GUI::Text (const char *text, uint32_t orientation)
 Draws text on the screen. More...
 
bool tram::GUI::TextBox (char *text, uint32_t length, bool enabled, uint32_t w, uint32_t h)
 Draws a textbox. More...
 
void tram::GUI::TextBox (const char *text, uint32_t w, uint32_t h)
 Draws a textbox. More...
 
void tram::GUI::SetColor (Render::color_t color, GlyphType type)
 Sets the color. More...
 
void tram::GUI::SetFont (font_t font, GlyphType type)
 Sets the font. More...
 
void tram::GUI::RestoreColor (GlyphType type)
 Restores previous glyph color. More...
 
void tram::GUI::RestoreFont (GlyphType type)
 Restores previous glyph font. More...
 
void tram::GUI::SetGlyphDefaults (Render::color_t color, font_t font, GlyphType type)
 Overrides glyph default colors and fonts. More...
 
void tram::GUI::PopFrameKeepCursor (bool keep_x, bool keep_y)
 
void tram::GUI::PushFrameRelative (uint32_t orientation, uint32_t offset)
 Pushes a frame releative to the previous. More...
 
void tram::GUI::PushFrameRelativeKeepCursor (uint32_t orientation, uint32_t offset, bool keep_x, bool keep_y)
 Pushes a frame, but keeps the cursor in place. More...
 
void tram::GUI::PushFrame (uint32_t x, uint32_t y, uint32_t w, uint32_t h)
 Pushes a frame. More...
 
void tram::GUI::PopFrame ()
 Removes a frame from the frame stack. More...
 
void tram::GUI::SetSelectedText (char *text)
 Sets the text which is selected in a textbox. More...
 
================================================ FILE: docs/cppapi/gui_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/gui.h Source File
Tramway SDK v0.1.1
gui.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_FRAMEWORK_GUI_H
4#define TRAM_SDK_FRAMEWORK_GUI_H
5
6#include <framework/ui.h>
7
8namespace tram::Render {
9 class Sprite;
10}
11
12namespace tram::GUI {
13
14typedef uint32_t font_t;
15typedef uint32_t glyph_t;
16
17enum orientation : uint32_t {
22
26
38};
39
42 WIDGET
43};
44
45void Init();
46void Update();
48
49void SetScaling(uint32_t);
50uint32_t GetScaling();
51
52bool ClickHandled();
53
54void Begin();
55void End();
56
57void FillFrame(glyph_t glyph);
59void NewLine(uint32_t line = LINE_NORMAL);
60
61bool CheckBox(bool& selected, const char* text, bool enabled = true);
62bool RadioButton(uint32_t index, uint32_t& selected, const char* text, bool enabled = true);
63bool Button(const char* text, bool enabled = true, uint32_t width = 0);
64bool Slider(float& value, bool enabled = true, uint32_t width = 0);
65
66void Glyph(glyph_t glyph);
67void Text(const char* text, uint32_t orientation = TEXT_LEFT);
68bool TextBox(char* text, uint32_t length, bool enabled = true, uint32_t w = 0, uint32_t h = 0);
69void TextBox(const char* text, uint32_t w = 0, uint32_t h = 0);
70
75
77
78void PopFrameKeepCursor(bool = false, bool = true);
79void PushFrameRelative(uint32_t orientation, uint32_t offset);
80void PushFrameRelativeKeepCursor(uint32_t orientation, uint32_t offset, bool = false, bool = true);
81void PushFrame(uint32_t x, uint32_t y, uint32_t w, uint32_t h);
82void PopFrame();
83
84
85
86
87void SetSelectedText(char* text);
88
99
103
141};
142
143}
144
145#endif // TRAM_SDK_FRAMEWORK_GUI_H
Sprite resource.
Definition: sprite.h:23
Immediate mode GUI system.
void HorizontalDivider()
Draws a horizontal divider.
Definition: gui.cpp:831
bool Slider(float &value, bool enabled, uint32_t width)
Draws a horizontal slider.
Definition: gui.cpp:771
void RestoreColor(GlyphType type)
Restores previous glyph color.
Definition: gui.cpp:138
bool RadioButton(uint32_t index, uint32_t &selected, const char *text, bool enabled)
Draws a radio button.
Definition: gui.cpp:703
void Update()
Submits all of the glyphs for rendering.
Definition: gui.cpp:253
void PushFrameRelativeKeepCursor(uint32_t orientation, uint32_t offset, bool keep_x, bool keep_y)
Pushes a frame, but keeps the cursor in place.
Definition: gui.cpp:609
void Text(const char *text, uint32_t orientation)
Draws text on the screen.
Definition: gui.cpp:472
orientation
Definition: gui.h:17
@ TEXT_RIGHT
Definition: gui.h:20
@ FRAME_RIGHT
Definition: gui.h:28
@ TEXT_LEFT
Definition: gui.h:18
@ LINE_LOW
Definition: gui.h:23
@ FRAME_CENTER_VERTICAL
Definition: gui.h:36
@ TEXT_JUSTIFIED
Definition: gui.h:21
@ FRAME_TOP
Definition: gui.h:29
@ FRAME_BOTTOM
Definition: gui.h:30
@ FRAME_RIGHT_INV
Definition: gui.h:32
@ LINE_NORMAL
Definition: gui.h:24
@ FRAME_CENTER_HORIZONTAL
Definition: gui.h:37
@ FRAME_INSET
Definition: gui.h:35
@ FRAME_TOP_INV
Definition: gui.h:33
@ LINE_HIGH
Definition: gui.h:25
@ TEXT_CENTER
Definition: gui.h:19
@ FRAME_BOTTOM_INV
Definition: gui.h:34
@ FRAME_LEFT_INV
Definition: gui.h:31
@ FRAME_LEFT
Definition: gui.h:27
void RestoreFont(GlyphType type)
Restores previous glyph font.
Definition: gui.cpp:147
void SetFont(font_t font, GlyphType type)
Sets the font.
Definition: gui.cpp:129
void SetSelectedText(char *text)
Sets the text which is selected in a textbox.
Definition: gui.cpp:79
void Init()
Performs initialization of the GUI system.
Definition: gui.cpp:206
bool TextBox(char *text, uint32_t length, bool enabled, uint32_t w, uint32_t h)
Draws a textbox.
Definition: gui.cpp:858
bool Button(const char *text, bool enabled, uint32_t width)
Draws a button.
Definition: gui.cpp:662
void PushFrameRelative(uint32_t orientation, uint32_t offset)
Pushes a frame releative to the previous.
Definition: gui.cpp:546
void PopFrameKeepCursor(bool keep_x, bool keep_y)
Definition: gui.cpp:617
widget
Definition: gui.h:89
@ WIDGET_BUTTON_1_WINDOW
Definition: gui.h:139
@ WIDGET_DIVIDER_HORIZONTAL
Definition: gui.h:120
@ WIDGET_RIGHT
Definition: gui.h:102
@ WIDGET_WINDOW
Definition: gui.h:110
@ WIDGET_BOTTOM_MIDDLE
Definition: gui.h:97
@ WIDGET_BUTTON_HELP
Definition: gui.h:137
@ WIDGET_TEXT_BOX
Definition: gui.h:115
@ WIDGET_TOP_LEFT
Definition: gui.h:90
@ WIDGET_SCROLL_BAR_TRACK_HORIZONTAL
Definition: gui.h:119
@ WIDGET_CHECK_BUTTON
Definition: gui.h:129
@ WIDGET_BORDER
Definition: gui.h:117
@ WIDGET_MIDDLE
Definition: gui.h:101
@ WIDGET_BUTTON_DISABLED
Definition: gui.h:108
@ WIDGET_SLIDER_TRACK_HORIZONTAL
Definition: gui.h:123
@ WIDGET_SCROLL_BAR_HORIZONTAL
Definition: gui.h:125
@ WIDGET_SCROLL_BAR_TRACK_VERTICAL
Definition: gui.h:118
@ WIDGET_MIDDLE_LEFT
Definition: gui.h:93
@ WIDGET_TOP_RIGHT
Definition: gui.h:92
@ WIDGET_SELECT_BOX
Definition: gui.h:112
@ WIDGET_SLIDER_HORIZONTAL
Definition: gui.h:131
@ WIDGET_BUTTON_PRESSED
Definition: gui.h:105
@ WIDGET_TEXT_BOX_DISABLED
Definition: gui.h:116
@ WIDGET_BUTTON_DOWN
Definition: gui.h:133
@ WIDGET_BOTTOM_RIGHT
Definition: gui.h:98
@ WIDGET_BUTTON_SELECTED_ENABLED
Definition: gui.h:106
@ WIDGET_SLIDER_TRACK_VERTICAL
Definition: gui.h:122
@ WIDGET_REVERSE_WINDOW
Definition: gui.h:111
@ WIDGET_BUTTON_SELECTED_DISABLED
Definition: gui.h:107
@ WIDGET_BUTTON_LEFT
Definition: gui.h:134
@ WIDGET_MIDDLE_MIDDLE
Definition: gui.h:94
@ WIDGET_SLIDER_VERTICAL
Definition: gui.h:130
@ WIDGET_DIVIDER_VERTICAL
Definition: gui.h:121
@ WIDGET_BUTTON_2_WINDOW
Definition: gui.h:138
@ WIDGET_DEFAULT
Definition: gui.h:140
@ WIDGET_TAB
Definition: gui.h:126
@ WIDGET_BUTTON_UP
Definition: gui.h:132
@ WIDGET_BUTTON
Definition: gui.h:104
@ WIDGET_LEFT
Definition: gui.h:100
@ WIDGET_BUTTON_PRESSED_DISABLED
Definition: gui.h:109
@ WIDGET_SELECT_BOX_PRESSED
Definition: gui.h:113
@ WIDGET_SCROLL_BAR_VERTICAL
Definition: gui.h:124
@ WIDGET_TOP_MIDDLE
Definition: gui.h:91
@ WIDGET_PROGESS_BAR
Definition: gui.h:127
@ WIDGET_BUTTON_EXIT
Definition: gui.h:136
@ WIDGET_MIDDLE_RIGHT
Definition: gui.h:95
@ WIDGET_SELECT_BOX_SELECTED
Definition: gui.h:114
@ WIDGET_BUTTON_RIGHT
Definition: gui.h:135
@ WIDGET_RADIO_BUTTON
Definition: gui.h:128
@ WIDGET_BOTTOM_LEFT
Definition: gui.h:96
bool ClickHandled()
Definition: gui.cpp:633
uint32_t GetScaling()
Returns the scaling factor.
Definition: gui.cpp:182
void SetColor(Render::color_t color, GlyphType type)
Sets the color.
Definition: gui.cpp:118
void PopFrame()
Removes a frame from the frame stack.
Definition: gui.cpp:602
void NewLine(uint32_t line)
Draws a new line.
Definition: gui.cpp:814
font_t RegisterFont(Render::Sprite *sprite)
Registers a font.
Definition: gui.cpp:307
void End()
Ends the GUI commands for the frame.
Definition: gui.cpp:976
void SetGlyphDefaults(Render::color_t color, font_t font, GlyphType type)
Overrides glyph default colors and fonts.
Definition: gui.cpp:159
void FillFrame(glyph_t glyph)
Fills the frame with a glyph.
Definition: gui.cpp:845
void PushFrame(uint32_t x, uint32_t y, uint32_t w, uint32_t h)
Pushes a frame.
Definition: gui.cpp:523
void SetScaling(uint32_t scale)
Sets the scaling factor.
Definition: gui.cpp:176
bool CheckBox(bool &selected, const char *text, bool enabled)
Draws a checkbox.
Definition: gui.cpp:737
void Glyph(font_t font, glyph_t glyph)
Draws a glyph from a font.
Definition: gui.cpp:405
uint32_t font_t
Definition: gui.h:14
GlyphType
Definition: gui.h:40
@ WIDGET
Definition: gui.h:42
@ TEXT
Definition: gui.h:41
void Begin()
Begins the GUI commands for the frame.
Definition: gui.cpp:946
uint32_t glyph_t
Definition: gui.h:15
High-level Render system API.
Definition: gui.h:8
vec3 color_t
Definition: render.h:16
================================================ FILE: docs/cppapi/hashmap_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/hashmap.h File Reference
Tramway SDK v0.1.1
hashmap.h File Reference
#include <framework/uid.h>
#include <iostream>
#include <cstring>

Go to the source code of this file.

Classes

class  tram::Hashmap< T >
 
struct  tram::Hashmap< T >::Record
 

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/hashmap_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/hashmap.h Source File
Tramway SDK v0.1.1
hashmap.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_TEMPLATES_HASHMAP_H
4#define TRAM_SDK_TEMPLATES_HASHMAP_H
5
6#include <framework/uid.h>
7#include <iostream> // error message
8#include <cstring> // memset
9
10/* instead of having two sets of each method, one with uint32_t and the other
11 * with UID, maybe we could create some kind of a struct called Key and then we
12 * could add a uint32_t converter to it and then we could add a constructor from
13 * both uint32_t and UID and then we could just have only a single of each
14 * method and all of the conversions would happen automatically
15 *
16 * TODO: investigate
17 */
18
19namespace tram {
20
21template <typename T>
22class Hashmap {
23public:
24 constexpr Hashmap(const char* name, size_t max_size) {
25 this->name = name;
26 this->max_size = max_size;
27 this->hash_parameter = max_size * 2;
28
29 size_t memory_size = ((max_size * 2) + padding) * sizeof(Record);
30
31 char* memory = (char*)::operator new(memory_size);
32
33 first = (Record*) memory;
34 last = (Record*) (memory + memory_size);
35
36 memset(memory, 0, memory_size);
37 }
38
39 constexpr Hashmap(const char* name, size_t max_size, std::initializer_list<std::pair<uint32_t, T>> list) : Hashmap(name, max_size) {
40 for (const auto& entry : list) {
41 Insert(entry.first, entry.second);
42 }
43 }
44
45 T Find(UID key) {
46 return Find(key.key);
47 }
48
49 T Find(uint32_t key) {
50 uint32_t hash = key % hash_parameter;
51
52 Record* candidate = first + hash;
53
54 while (candidate != last) {
55 if (!(candidate->flags & (FLAG_DELETED | FLAG_RECORD))) {
56 break;
57 }
58
59 if (candidate->key == key) {
60 if (candidate->flags & FLAG_DELETED) {
61 break;
62 } else {
63 return candidate->value;
64 }
65
66 }
67
68 candidate++;
69 }
70
71 return T();
72 }
73
74 bool Exists(UID key) {
75 return Exists(key.key);
76 }
77
78 bool Exists(uint32_t key) {
79 uint32_t hash = key % hash_parameter;
80
81 Record* candidate = first + hash;
82
83 while (candidate != last) {
84 if (!(candidate->flags & (FLAG_DELETED | FLAG_RECORD))) {
85 break;
86 }
87
88 if (candidate->key == key) {
89 if (candidate->flags & FLAG_DELETED) {
90 break;
91 } else {
92 return true;
93 }
94
95 }
96
97 candidate++;
98 }
99
100 return false;
101 }
102
103 void Insert(UID key, T value) {
104 Insert(key.key, value);
105 }
106
107 void Insert(uint32_t key, T value) {
108 if (size == max_size) {
109 std::cout << "Hashmap " << name << " density reached!" << std::endl;
110 }
111
112 uint32_t hash = key % hash_parameter;
113
114 Record* candidate = first + hash;
115
116 while (candidate != last) {
117 if (candidate->flags & FLAG_RECORD) {
118 if (candidate->key == key) {
119 candidate->value.~T();
120 size--;
121 break;
122 } else {
123 candidate++;
124 continue;
125 }
126 }
127
128 if (candidate->flags & FLAG_DELETED) {
129 break;
130 }
131
132 break;
133 }
134
135 if (candidate == last) {
136 std::cout << "Hashmap " << name << " overflow!" << std::endl;
137 abort();
138 }
139
140 size++;
141
142 candidate->key = key;
143 candidate->value = value;
144 candidate->flags = FLAG_RECORD;
145 }
146
147 void Remove(UID key) {
148 Remove(key.key);
149 }
150
151 void Remove(uint32_t key) {
152 uint32_t hash = key % hash_parameter;
153
154 Record* candidate = first + hash;
155
156 while (candidate != last) {
157 if (!(candidate->flags & (FLAG_DELETED | FLAG_RECORD))) {
158 return;
159 }
160
161 if (candidate->key == key) {
162 if (candidate->flags & FLAG_DELETED) {
163 return;
164 } else {
165 candidate->value.~T();
166 candidate->flags = FLAG_DELETED;
167 size--;
168 return;
169 }
170
171 }
172
173 candidate++;
174 }
175 }
176
177 T& operator[](UID key) {
178 return operator[](key.key);
179 }
180
181 T& operator[](uint32_t key) {
182 uint32_t hash = key % hash_parameter;
183
184 Record* candidate = first + hash;
185
186 while (candidate != last) {
187 if (candidate->key == key) {
188 return candidate->value;
189 }
190
191 if (candidate->flags & FLAG_RECORD) {
192 candidate++;
193 continue;
194 }
195
196 if (candidate->flags & FLAG_DELETED) {
197 break;
198 }
199
200 break;
201 }
202
203 if (candidate == last) {
204 std::cout << "Hashmap " << name << " overflow!" << std::endl;
205 abort();
206 }
207
208 size++;
209
210 if (size == max_size) {
211 std::cout << "Hashmap " << name << " density reached!" << std::endl;
212 }
213
214 candidate->key = key;
215 candidate->value = T();
216 candidate->flags = FLAG_RECORD;
217
218 return candidate->value;
219 }
220
221protected:
222 struct Record {
223 uint32_t key = 0;
224 uint32_t flags = 0;
226 };
227 const size_t padding = 10;
228
229 enum {
231 FLAG_DELETED = 2
232 };
233
234 std::string name;
235 size_t size = 0;
236 size_t max_size = 0;
237 uint32_t hash_parameter = 0;
238 Record* first = nullptr;
239 Record* last = nullptr;
240};
241
242}
243
244#endif // TRAM_SDK_TEMPLATES_HASHMAP_H
Definition: hashmap.h:22
Record * last
Definition: hashmap.h:239
constexpr Hashmap(const char *name, size_t max_size, std::initializer_list< std::pair< uint32_t, T > > list)
Definition: hashmap.h:39
size_t max_size
Definition: hashmap.h:236
T & operator[](UID key)
Definition: hashmap.h:177
T & operator[](uint32_t key)
Definition: hashmap.h:181
const size_t padding
Definition: hashmap.h:227
size_t size
Definition: hashmap.h:235
void Insert(UID key, T value)
Definition: hashmap.h:103
bool Exists(UID key)
Definition: hashmap.h:74
@ FLAG_DELETED
Definition: hashmap.h:231
@ FLAG_RECORD
Definition: hashmap.h:230
void Insert(uint32_t key, T value)
Definition: hashmap.h:107
T Find(UID key)
Definition: hashmap.h:45
bool Exists(uint32_t key)
Definition: hashmap.h:78
std::string name
Definition: hashmap.h:234
void Remove(UID key)
Definition: hashmap.h:147
void Remove(uint32_t key)
Definition: hashmap.h:151
Record * first
Definition: hashmap.h:238
constexpr Hashmap(const char *name, size_t max_size)
Definition: hashmap.h:24
uint32_t hash_parameter
Definition: hashmap.h:237
T Find(uint32_t key)
Definition: hashmap.h:49
Serialization, i.e.
Definition: hashmap.h:222
uint32_t flags
Definition: hashmap.h:224
T value
Definition: hashmap.h:225
uint32_t key
Definition: hashmap.h:223
Interned string type.
Definition: uid.h:10
uint32_t key
Definition: uid.h:40
================================================ FILE: docs/cppapi/hierarchy.html ================================================ Tramway SDK: Class Hierarchy
Tramway SDK v0.1.1
Class Hierarchy
This inheritance list is sorted roughly, but not completely, alphabetically:
[detail level 123]
 C_test_case
 Ctram::Render::AABB::AABBLeaf
 Ctram::AABBTree
 Ctram::Render::AABBTriangle
 Ctram::Ext::Kitchensink::AIAgent
 Ctram::Ext::Kitchensink::AIPackage
 Ctram::Ext::Kitchensink::AIVariable
 Ctram::AnimationComponent::AnimationPlaybackInfo
 Ctram::Ext::Kitchensink::AnimationTable
 Ctram::Ext::Kitchensink::AnimState
 Ctram::Ext::Kitchensink::AnimStateSpace
 Ctram::Ext::Kitchensink::AnimStateTransitionDefault
 Ctram::Ext::Kitchensink::AnimStateTransitionFrom
 Ctram::Ext::Kitchensink::AnimStateTransitionInto
 Ctram::Ext::Kitchensink::Attribute
 Ctram::Ext::Kitchensink::AttributeContainer
 Ctram::Ext::Kitchensink::AttributeInfo
 Ctram::Audio::Spatial::AudioBuffer
 Ctram::Audio::audiobuffer_tAudio buffer handle
 Ctram::Audio::Spatial::AudioRender
 Ctram::Audio::Spatial::AudioSource
 Ctram::Audio::audiosource_tAudio source handle
 Ctram::Ext::Kitchensink::BaseAttribute
 Ctram::Ext::Kitchensink::BaseFactionRank
 Ctram::Render::BoneBone for a 3D models skeleton
 CbtActionInterface
 CbtIDebugDraw
 CbtMotionState
 Ctram::Render::BucketMapping
 Ctram::Ext::Camera::CameraInterface API for cameras
 Ctram::Ext::Kitchensink::Character
 Ctram::Ext::Kitchensink::CharacterClass
 Ctram::Ext::Kitchensink::CharacterDisposition
 Ctram::Render::API::ClipPoint
 Ctram::Render::API::ClipTriangle
 Ctram::Physics::CollisionPhysics collision data
 Ctram::Physics::CollisionShapeShape for a collider
 Ctram::Physics::collisionshape_t
 Ctram::Physics::API::CollisionShapeTransform
 Ctram::Physics::CollisionTriangle
 Ctram::Render::API::ColorVertex
 Ctram::Component< T >Wrapper for an EntityComponent pointer
 CbtCollisionWorld::ConvexResultCallback
 Ctram::Render::API::D3DDrawListEntry
 Ctram::Render::API::D3DLight
 Ctram::Ext::Kitchensink::DialogAction
 Ctram::Ext::Kitchensink::DialogCondition
 Ctram::Ext::Kitchensink::DialogController
 Ctram::Ext::Kitchensink::DialogTopic
 Ctram::Render::drawlistentry_t
 Ctram::Render::DynamicModelVertex
 Ctram::Render::API::DynamicVertex
 Ctram::Edge
 Ctram::Ext::Kitchensink::Effect
 Ctram::EntityEntity base class
 Ctram::Ext::Kitchensink::EntityChildren
 Ctram::EntityComponentComponent base class
 Ctram::EntityTypeInfo
 Ctram::EventEvent data
 Ctram::EventListenerSmart wrapper class for Event listeners
 Ctram::Ext::Kitchensink::Faction
 Ctram::Ext::Kitchensink::FactionRank
 Ctram::Ext::Kitchensink::FactionRelation
 Ctram::Render::API::FFPHelper
 Ctram::Entity::FieldInfo
 Ctram::FileVery fast file reader/writer
 Ctram::FileReader
 CFileReaderFile reading backend API
 Ctram::FileReaderParser
 Ctram::FileSource
 Ctram::FileWriter
 CFileWriterFile writing backend API
 Ctram::FileWriterParser
 Ctram::Audio::FilterParameters
 Ctram::Render::API::FragmentShader
 Ctram::GUI::FrameObject
 Ctram::Render::API::FVFHelper
 Ctram::Render::API::GLDrawListEntry
 Ctram::Render::API::GLLight
 Ctram::Render::API::GLMaterial
 Ctram::Graph
 Ctram::Hashmap< T >
 Ctram::Render::indexarray_t
 Ctram::Render::IndexRange
 Ctram::Ext::Kitchensink::InitialAttribute
 Ctram::Ext::Menu::Intercept
 Ctram::Script::Interface
 Ctram::Ext::Kitchensink::Inventory
 Ctram::Ext::Kitchensink::InventoryFactoryInfo
 Ctram::Ext::Kitchensink::InventoryManager
 Ctram::Ext::Kitchensink::ItemClass
 Ctram::Ext::Kitchensink::ItemInstance
 Ctram::Pool< T >::iterator
 Ctram::UI::KeyBinding
 Ctram::Render::KeyframeKeyframe for a skeletal animation
 Ctram::Render::KeyframeHeader
 Ctram::Render::API::LayerParameters
 Ctram::Render::LightTree::Light
 Ctram::Render::light_t
 Ctram::Render::API::LineVertex
 Ctram::Render::LineVertex
 Ctram::Render::API::LinkedShader
 Ctram::ListenerInfo
 Ctram::Render::material_t
 Ctram::Ext::Menu::Menu
 Ctram::MessageMessage data
 Ctram::Render::ModelAABB
 Ctram::Render::ModelData
 Ctram::NavmeshNot fully implemented yet
 Ctram::NavmeshNode
 Ctram::Octree< T >::NearestSearch
 Ctram::AABBTree::Node
 Ctram::Audio::SoundGraph::Node
 Ctram::Node
 Ctram::Octree< T >::Node
 Ctram::Render::LightGraph::Node
 Ctram::Physics::API::ObjectCollision
 Ctram::Octree< T >
 Ctram::ParticleComponent::Particle
 Ctram::PathEdgeInfo
 Ctram::Audio::Spatial::PathExplorationResult
 Ctram::PathFollowerPoint constrained to a Path
 Ctram::Audio::Spatial::PathFromAudioSource
 Ctram::Audio::Spatial::PathRenderingInfo
 Ctram::Audio::Spatial::PathTracingResult
 Ctram::Render::API::Point2D
 Ctram::Pool< T >
 Ctram::PoolProxy< T >
 Ctram::PoolPtr< T >
 Ctram::Render::Pose
 Ctram::Settings::Property< T >
 Ctram::Render::AABB::QueryResponse
 Ctram::Ext::Kitchensink::Quest
 Ctram::Ext::Kitchensink::QuestTrigger
 Ctram::Ext::Kitchensink::QuestVariable
 Ctram::Queue< T >Simple queue implementation
 Ctram::Settings::RawSetting
 Ctram::Hashmap< T >::Record
 Ctram::Render::RegisteredVertexDefinition
 Ctram::Resource
 Ctram::ResourceProxy< T >
 Ctram::Async::ResourceRequest
 Ctram::Physics::rigidbody_t
 Ctram::Physics::API::RigidbodyMetadata
 Ctram::Render::API::Scanline
 Ctram::Render::API::ScanlineBuffer
 Ctram::ScriptableType::ScriptableTypeInfo
 Ctram::Settings::SettingInfo
 Ctram::Render::API::ShaderBuffer
 Ctram::Render::API::ShaderUniformMatrices
 Ctram::Render::API::ShaderUniformModelMatrices
 Ctram::SharedEntityDataBasic Entity parameters
 Ctram::SignalMessage template
 Ctram::SignalTableList of Message templates
 CSoundGraphSoundGraph resource
 Ctram::Ext::Kitchensink::SoundTableMaps actions to sounds
 Ctram::Render::SphericalHarmonic
 Ctram::Spinlock
 Ctram::Render::spritearray_t
 Ctram::Render::SpriteFrame
 Ctram::Render::SpritePoint
 Ctram::Render::SpriteVertex
 Ctram::Stack< T >
 Ctram::StackPool< T >Allocator
 Ctram::Render::StaticModelVertex
 Ctram::Render::API::StaticVertex
 Ctram::Render::API::SWDrawListEntry
 Ctram::Render::API::SWIndexArray
 Ctram::Render::API::SWLight
 Ctram::Render::API::SWTexture
 Ctram::Render::API::SWVertexArray
 Ctram::System::SystemInfo
 Ctram::Stats::SystemStat
 CT
 Ctram::Render::texturehandle_t
 Ctram::TransitionConnects WorldCells together
 Ctram::Render::Triangle
 Ctram::Render::TriangleBucket
 Ctram::Physics::trigger_t
 Ctram::UIDInterned string type
 Ctram::ValueGeneric, type-safe union
 Ctram::ValueArray
 Ctram::ValuePtr
 Ctram::Render::vertexarray_t
 Ctram::Render::VertexAttributeAtributes for vertex buffer vertices
 Ctram::Render::API::VertexBufferMetadata
 Ctram::Render::VertexDefinition
 Ctram::Render::API::VertexShader
 Ctram::WorldCellWorld streaming unit
================================================ FILE: docs/cppapi/image_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/platform/image.cpp File Reference
Tramway SDK v0.1.1
image.cpp File Reference
#include <platform/image.h>
#include <stb_image_write.h>

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Platform
 

Macros

#define STB_IMAGE_WRITE_IMPLEMENTATION
 

Functions

void tram::Platform::SaveImageToDisk (const char *name, int w, int h, const char *image)
 Saves image to disk. More...
 

Macro Definition Documentation

◆ STB_IMAGE_WRITE_IMPLEMENTATION

#define STB_IMAGE_WRITE_IMPLEMENTATION
================================================ FILE: docs/cppapi/image_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/platform/image.h File Reference
Tramway SDK v0.1.1
image.h File Reference

Go to the source code of this file.

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Platform
 

Functions

void tram::Platform::SaveImageToDisk (const char *name, int w, int h, const char *image)
 Saves image to disk. More...
 
================================================ FILE: docs/cppapi/image_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/platform/image.h Source File
Tramway SDK v0.1.1
image.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_PLATFORM_IMAGE_H
4#define TRAM_SDK_PLATFORM_IMAGE_H
5
6namespace tram::Platform {
7
8void SaveImageToDisk(const char* name, int w, int h, const char* image);
9
10}
11
12#endif // TRAM_SDK_PLATFORM_FILE_H
void SaveImageToDisk(const char *name, int w, int h, const char *image)
Saves image to disk.
Definition: image.cpp:12
================================================ FILE: docs/cppapi/index.html ================================================ Tramway SDK: Tramway SDK
Tramway SDK v0.1.1
Tramway SDK

This is the C++ API documentation portal for the Tramway SDK.

For a general overview, take a look at our main documentation page: https://racenis.github.io/tram-sdk/documentation.html
================================================ FILE: docs/cppapi/info_8dox.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/info.dox File Reference
Tramway SDK v0.1.1
C:/Users/Poga/Desktop/painis/tram-sdk/src/info.dox File Reference
================================================ FILE: docs/cppapi/inventory_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/inventory.cpp File Reference
Tramway SDK v0.1.1
inventory.cpp File Reference

Classes

struct  tram::Ext::Kitchensink::InventoryFactoryInfo
 

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Ext
 
namespace  tram::Ext::Kitchensink
 Extension containing random stuff that doesn't fit in anywhere else.
 
================================================ FILE: docs/cppapi/inventory_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/inventory.h File Reference
Tramway SDK v0.1.1
inventory.h File Reference

Go to the source code of this file.

Classes

class  tram::Ext::Kitchensink::ItemClass
 
struct  tram::Ext::Kitchensink::ItemInstance
 
class  tram::Ext::Kitchensink::InventoryManager
 
class  tram::Ext::Kitchensink::ListInventoryManager
 
class  tram::Ext::Kitchensink::Inventory
 

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Ext
 
namespace  tram::Ext::Kitchensink
 Extension containing random stuff that doesn't fit in anywhere else.
 

Typedefs

typedef void(* tram::Ext::Kitchensink::item_action_func) (Inventory *, ItemInstance *)
 
================================================ FILE: docs/cppapi/inventory_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/inventory.h Source File
Tramway SDK v0.1.1
inventory.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_EXTENSIONS_KITCHENSINK_INVENTORY_H
4#define TRAM_SDK_EXTENSIONS_KITCHENSINK_INVENTORY_H
5
7
8#include <framework/gui.h>
9
10namespace tram {
11 class Entity;
12}
13
14namespace tram::Ext::Kitchensink {
15
16struct Inventory;
17struct ItemInstance;
19
20class ItemClass {
21public:
24
27
29
30 // TODO: add getter methods
31 // in addition, these getter methods should descend the item class
32 // hierarchy and find the first valid thing to return
33
38
39 int width = 1, height = 1;
40 int stack = 1, value = 0;
41
42 float weight = 0.0f;
43
45
46 void FireEquip(Inventory*);
48 void FireAdded(Inventory*);
52 void FireIdle(Inventory*);
53
54 virtual bool OnEquip(ItemClass*, Inventory*) { return false; }
55 virtual bool OnUnequip(ItemClass*, Inventory*) { return false; }
56 virtual bool OnAdded(ItemClass*, Inventory*) { return false; }
57 virtual bool OnRemoved(ItemClass*, Inventory*) { return false; }
58 virtual bool OnPrimaryAction(ItemClass*, Inventory*) { return false; }
59 virtual bool OnSecondaryAction(ItemClass*, Inventory*) { return false; }
60 virtual bool OnIdle(ItemClass*, Inventory*) { return false; }
61
62 std::vector<Attribute> attributes;
63 std::vector<Effect> effects;
64
65 static void Register(ItemClass*);
66 static ItemClass* Find(name_t item_class);
67};
68
72 int count = 1;
73 int x = 0, y = 0;
74 bool equipped = false;
75};
76
78public:
79 virtual int AddItem(name_t item_class, int count) = 0;
80 virtual int RemoveItem(name_t item_class, int count) = 0;
81 virtual int GetItemCount(name_t item_class) = 0;
82
83 virtual std::vector<name_t> GetItems() = 0;
84
85 virtual ~InventoryManager() = default;
86
87 static InventoryManager* New(name_t compartment);
88 static void Delete(name_t compartment, InventoryManager*);
89 static void Register(name_t compartment, InventoryManager*(*make)(), void (*clear)(InventoryManager*));
90};
91
93public:
94 int AddItem(name_t item_class, int count) override;
95 int RemoveItem(name_t item_class, int count) override;
96 int GetItemCount(name_t item_class) override;
97
98 std::vector<name_t> GetItems() override;
99
100 ~ListInventoryManager() override = default;
101
102 std::vector<std::pair<name_t, int>> items;
103};
104
106public:
108
109 int AddItem(name_t item_class, int count);
110 int RemoveItem(name_t item_class, int count);
111 int GetItemCount(name_t item_class);
112
113 bool EquipItem(name_t item_class);
114 bool UnequipItem(name_t item_class);
115 bool UnequipSlot(name_t item_slot);
116 bool IsEquippedItem(name_t item);
117 bool IsEquippedSlot(name_t slot);
119
121
123
124 std::vector<std::pair<name_t, name_t>> equipped;
125 std::vector<std::pair<name_t, InventoryManager*>> compartments;
126public:
127
128 static void LoadFromDisk(const char* filename);
129 static Inventory* Find(Entity* entity);
130};
131
132}
133
134#endif // TRAM_SDK_EXTENSIONS_KITCHENSINK_INVENTORY_H
Entity base class.
Definition: entity.h:23
Definition: inventory.h:105
bool UnequipSlot(name_t item_slot)
Definition: inventory.cpp:290
bool EquipItem(name_t item_class)
Definition: inventory.cpp:228
id_t parent
Definition: inventory.h:122
static Inventory * Find(Entity *entity)
Definition: inventory.cpp:323
std::vector< std::pair< name_t, InventoryManager * > > compartments
Definition: inventory.h:125
bool UnequipItem(name_t item_class)
Definition: inventory.cpp:272
int GetItemCount(name_t item_class)
Definition: inventory.cpp:222
bool IsEquippedItem(name_t item)
Definition: inventory.cpp:308
static void LoadFromDisk(const char *filename)
Definition: inventory.cpp:335
name_t GetEquippedItem(name_t slot)
Definition: inventory.cpp:318
std::vector< std::pair< name_t, name_t > > equipped
Definition: inventory.h:124
int RemoveItem(name_t item_class, int count)
Definition: inventory.cpp:211
int AddItem(name_t item_class, int count)
Definition: inventory.cpp:200
bool IsEquippedSlot(name_t slot)
Definition: inventory.cpp:313
InventoryManager * FindCompartment(name_t compartment)
Definition: inventory.cpp:187
Inventory(id_t parent)
Definition: inventory.h:107
virtual int AddItem(name_t item_class, int count)=0
static void Register(name_t compartment, InventoryManager *(*make)(), void(*clear)(InventoryManager *))
Definition: inventory.cpp:114
virtual std::vector< name_t > GetItems()=0
virtual int GetItemCount(name_t item_class)=0
virtual int RemoveItem(name_t item_class, int count)=0
static InventoryManager * New(name_t compartment)
Definition: inventory.cpp:92
static void Delete(name_t compartment, InventoryManager *)
Definition: inventory.cpp:104
Definition: inventory.h:20
GUI::glyph_t sprite_glyph
Definition: inventory.h:36
int height
Definition: inventory.h:39
name_t equipped_slot
Definition: inventory.h:28
name_t default_compartment
Definition: inventory.h:44
virtual bool OnAdded(ItemClass *, Inventory *)
Definition: inventory.h:56
void FireEquip(Inventory *)
Definition: inventory.cpp:42
virtual bool OnSecondaryAction(ItemClass *, Inventory *)
Definition: inventory.h:59
virtual bool OnRemoved(ItemClass *, Inventory *)
Definition: inventory.h:57
static ItemClass * Find(name_t item_class)
Definition: inventory.cpp:30
name_t base_class
Definition: inventory.h:23
void FirePrimaryAction(Inventory *)
Definition: inventory.cpp:70
void FireAdded(Inventory *)
Definition: inventory.cpp:56
void FireRemoved(Inventory *)
Definition: inventory.cpp:63
GUI::font_t sprite_font
Definition: inventory.h:34
virtual bool OnIdle(ItemClass *, Inventory *)
Definition: inventory.h:60
void FireSecondaryAction(Inventory *)
Definition: inventory.cpp:77
GUI::glyph_t icon_glyph
Definition: inventory.h:37
std::vector< Attribute > attributes
Definition: inventory.h:62
virtual bool OnEquip(ItemClass *, Inventory *)
Definition: inventory.h:54
virtual bool OnPrimaryAction(ItemClass *, Inventory *)
Definition: inventory.h:58
int value
Definition: inventory.h:40
void FireIdle(Inventory *)
Definition: inventory.cpp:84
name_t name
Definition: inventory.h:22
GUI::font_t icon_font
Definition: inventory.h:35
void FireUnequip(Inventory *)
Definition: inventory.cpp:49
name_t viewmodel
Definition: inventory.h:25
float weight
Definition: inventory.h:42
std::vector< Effect > effects
Definition: inventory.h:63
virtual bool OnUnequip(ItemClass *, Inventory *)
Definition: inventory.h:55
static void Register(ItemClass *)
Definition: inventory.cpp:26
name_t worldmodel
Definition: inventory.h:26
int width
Definition: inventory.h:39
int stack
Definition: inventory.h:40
int GetItemCount(name_t item_class) override
Definition: inventory.cpp:169
std::vector< name_t > GetItems() override
Definition: inventory.cpp:178
std::vector< std::pair< name_t, int > > items
Definition: inventory.h:102
int AddItem(name_t item_class, int count) override
Definition: inventory.cpp:121
int RemoveItem(name_t item_class, int count) override
Definition: inventory.cpp:152
Extension containing random stuff that doesn't fit in anywhere else.
Definition: ai.cpp:15
void(* item_action_func)(Inventory *, ItemInstance *)
Definition: inventory.h:18
uint32_t font_t
Definition: gui.h:14
uint32_t glyph_t
Definition: gui.h:15
Serialization, i.e.
uint32_t id_t
Definition: core.h:10
Definition: inventory.h:69
name_t compartment
Definition: inventory.h:71
bool equipped
Definition: inventory.h:74
int y
Definition: inventory.h:73
int x
Definition: inventory.h:73
name_t item_class
Definition: inventory.h:70
int count
Definition: inventory.h:72
Interned string type.
Definition: uid.h:10
================================================ FILE: docs/cppapi/jquery.js ================================================ /*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ !function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element },_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler * Licensed under MIT * @author Ariel Flesler * @version 2.1.2 */ ;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 * http://www.smartmenus.org/ * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); ================================================ FILE: docs/cppapi/kitchensink_2menu_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/menu.cpp File Reference
Tramway SDK v0.1.1
menu.cpp File Reference

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Ext
 
namespace  tram::Ext::Kitchensink
 Extension containing random stuff that doesn't fit in anywhere else.
 

Variables

const size_t tram::Ext::Kitchensink::SEARCH_STRING_LENGTH = 100
 
================================================ FILE: docs/cppapi/kitchensink_2menu_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/menu.h File Reference
Tramway SDK v0.1.1
menu.h File Reference

Go to the source code of this file.

Classes

class  tram::Ext::Kitchensink::ListInventory
 
class  tram::Ext::Kitchensink::ListTrade
 
class  tram::Ext::Kitchensink::ListDialog
 
class  tram::Ext::Kitchensink::QuestList
 
class  tram::Ext::Kitchensink::KitchensinkMenuList
 

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Ext
 
namespace  tram::Ext::Kitchensink
 Extension containing random stuff that doesn't fit in anywhere else.
 
================================================ FILE: docs/cppapi/kitchensink_2menu_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/menu.h Source File
Tramway SDK v0.1.1
menu.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_EXTENSIONS_KITCHENSINK_MENU_H
4#define TRAM_SDK_EXTENSIONS_KITCHENSINK_MENU_H
5
7
9
11 void Display();
12 uint32_t Layer() { return 0; }
13};
14
15class ListTrade : public Ext::Menu::Menu {
16 void Display();
17 uint32_t Layer() { return 0; }
18};
19
21public:
22 ListDialog();
25
26 void Display();
27 uint32_t Layer() { return 0; }
28private:
29 name_t dialog_topic;
30 char* search_string = nullptr;
31};
32
33class QuestList : public Ext::Menu::Menu {
34 void Display();
35 uint32_t Layer() { return 0; }
36};
37
39 void Display();
40 uint32_t Layer() { return 0; }
41};
42
43}
44
45#endif // TRAM_SDK_EXTENSIONS_KITCHENSINK_MENU_H
~ListDialog()
Definition: menu.cpp:20
ListDialog()
Definition: menu.cpp:14
uint32_t Layer()
Definition: menu.h:27
void Display()
Definition: menu.cpp:24
Definition: menu.h:19
Extension containing random stuff that doesn't fit in anywhere else.
Definition: ai.cpp:15
Interned string type.
Definition: uid.h:10
================================================ FILE: docs/cppapi/kitchensink_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/kitchensink.cpp File Reference
Tramway SDK v0.1.1
kitchensink.cpp File Reference
#include <extensions/kitchensink/kitchensink.h>
#include <framework/system.h>
#include <assert.h>

Namespaces

namespace  tram::Ext::Kitchensink
 Extension containing random stuff that doesn't fit in anywhere else.
 
namespace  tram
 Serialization, i.e.
 
namespace  tram::Ext
 

Functions

void tram::Ext::Kitchensink::Init ()
 
void tram::Ext::Kitchensink::Update ()
 

Variables

uint32_t tram::Ext::Kitchensink::KITCHENSINK_SYSTEM = -1u
 
================================================ FILE: docs/cppapi/kitchensink_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/kitchensink.h File Reference
Tramway SDK v0.1.1
kitchensink.h File Reference

Go to the source code of this file.

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Ext
 
namespace  tram::Ext::Kitchensink
 Extension containing random stuff that doesn't fit in anywhere else.
 

Functions

void tram::Ext::Kitchensink::Init ()
 
void tram::Ext::Kitchensink::Update ()
 
================================================ FILE: docs/cppapi/kitchensink_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/kitchensink.h Source File
Tramway SDK v0.1.1
kitchensink.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_EXTENSIONS_KITCHENSINK_KITCHENSINK_H
4#define TRAM_SDK_EXTENSIONS_KITCHENSINK_KITCHENSINK_H
5
7
8void Init();
9void Update();
10
11}
12
13#endif // TRAM_SDK_EXTENSIONS_KITCHENSINK_KITCHENSINK_H
Extension containing random stuff that doesn't fit in anywhere else.
Definition: ai.cpp:15
void Update()
Definition: kitchensink.cpp:36
void Init()
Definition: kitchensink.cpp:24
================================================ FILE: docs/cppapi/lamp_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/lamp.cpp File Reference
Tramway SDK
lamp.cpp File Reference

Namespaces

namespace  tram
 

Enumerations

enum  { tram::FIELD_COLOR_R , tram::FIELD_COLOR_G , tram::FIELD_COLOR_B , tram::FIELD_DISTANCE }
 
================================================ FILE: docs/cppapi/lamp_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/lamp.h File Reference
Tramway SDK
lamp.h File Reference

Go to the source code of this file.

Classes

class  tram::Lamp
 

Namespaces

namespace  tram
 
================================================ FILE: docs/cppapi/lamp_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/lamp.h Source File
Tramway SDK
lamp.h
Go to the documentation of this file.
1// TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022
2// All rights reserved.
3
4#ifndef ENTITIES_LAMP_H
5#define ENTITIES_LAMP_H
6
7#include <framework/entity.h>
10
11namespace tram {
12
13class LightComponent;
14
15class Lamp : public Entity {
16public:
18 void UpdateParameters();
19 void SetParameters();
20 void Load();
21 void Unload();
22 void Serialize();
23 void MessageHandler(Message& msg);
24 static void Register();
25protected:
27
28 float color_r;
29 float color_g;
30 float color_b;
31 float distance;
32};
33
34}
35
36#endif // ENTITIES_LAMP_H
Wrapper for an EntityComponent pointer.
Definition: entitycomponent.h:57
Definition: entity.h:21
Definition: lamp.h:15
float distance
Definition: lamp.h:31
void MessageHandler(Message &msg)
Definition: lamp.cpp:85
float color_g
Definition: lamp.h:29
float color_r
Definition: lamp.h:28
static void Register()
Definition: lamp.cpp:26
void Unload()
Definition: lamp.cpp:64
float color_b
Definition: lamp.h:30
void Serialize()
Definition: lamp.cpp:72
void UpdateParameters()
Definition: lamp.cpp:44
void Load()
Definition: lamp.cpp:53
void SetParameters()
Definition: lamp.cpp:49
Component< LightComponent > light
Definition: lamp.h:26
Lamp(const SharedEntityData &, const SerializedFieldArray &)
Definition: lamp.cpp:36
Wrapper for serialized field values.
Definition: serialization.h:17
Definition: api.cpp:20
Definition: message.h:15
Definition: entity.cpp:24
================================================ FILE: docs/cppapi/language_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/language.cpp File Reference
Tramway SDK v0.1.1
language.cpp File Reference
#include <framework/language.h>
#include <framework/file.h>
#include <framework/logging.h>
#include <templates/stackpool.h>
#include <templates/hashmap.h>
#include <config.h>
#include <cstring>
#include <fstream>

Namespaces

namespace  tram::Language
 Localization services.
 
namespace  tram
 Serialization, i.e.
 

Functions

void tram::Language::Load (const char *filename)
 Loads a language file. More...
 
const char * tram::Language::Get (name_t name)
 Retrieves a string from the loaded language files. More...
 
char tram::Language::UTF16ToLatin7 (uint16_t code)
 Converts a UTF16 codepoint to a Latin7 codepoint. More...
 
================================================ FILE: docs/cppapi/language_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/language.h File Reference
Tramway SDK v0.1.1
language.h File Reference
#include <framework/uid.h>

Go to the source code of this file.

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Language
 Localization services.
 

Functions

const char * tram::Language::Get (name_t name)
 Retrieves a string from the loaded language files. More...
 
void tram::Language::Load (const char *filename)
 Loads a language file. More...
 
char tram::Language::UTF16ToLatin7 (uint16_t code)
 Converts a UTF16 codepoint to a Latin7 codepoint. More...
 
================================================ FILE: docs/cppapi/language_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/language.h Source File
Tramway SDK v0.1.1
language.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_FRAMEWORK_LANGUAGE_H
4#define TRAM_SDK_FRAMEWORK_LANGUAGE_H
5
6#include <framework/uid.h>
7
8namespace tram::Language {
9 const char* Get(name_t name);
10 void Load(const char* filename);
11
12 char UTF16ToLatin7(uint16_t);
13}
14
15#endif // TRAM_SDK_FRAMEWORK_LANGUAGE_H
Localization services.
void Load(const char *filename)
Loads a language file.
Definition: language.cpp:33
char UTF16ToLatin7(uint16_t code)
Converts a UTF16 codepoint to a Latin7 codepoint.
Definition: language.cpp:74
const char * Get(name_t name)
Retrieves a string from the loaded language files.
Definition: language.cpp:63
UID name_t
Definition: uid.h:43
================================================ FILE: docs/cppapi/light_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/light.cpp File Reference
Tramway SDK
light.cpp File Reference
#include <components/light.h>

Namespaces

namespace  tram
 
================================================ FILE: docs/cppapi/light_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/light.h File Reference
Tramway SDK
light.h File Reference
#include <render/api.h>

Go to the source code of this file.

Classes

class  tram::LightComponent
 

Namespaces

namespace  tram
 
================================================ FILE: docs/cppapi/light_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/light.h Source File
Tramway SDK
light.h
Go to the documentation of this file.
1// TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022
2// All rights reserved.
3
4#ifndef COMPONENTS_LIGHTCOMPONENT_H
5#define COMPONENTS_LIGHTCOMPONENT_H
6
7#include <render/api.h>
8
9namespace tram {
10
12public:
13 void Init ();
14 void Start () {}
15
18 void SetDistance (float dist);
19
20 vec3 GetColor ();
21 float GetDistance ();
22
23 void EventHandler(Event &event) { return; }
25protected:
26 void Update();
27
31 float distance;
32};
33
34}
35
36#endif // COMPONENTS_LIGHTCOMPONENT_H
Definition: entitycomponent.h:18
Definition: light.h:11
float GetDistance()
Returns the distance of the light.
Definition: light.cpp:54
void SetDistance(float dist)
Sets the distance of the light.
Definition: light.cpp:43
~LightComponent()
Definition: light.cpp:16
void SetLocation(vec3 location)
Sets the location of the light.
Definition: light.cpp:30
void Init()
Definition: light.cpp:7
vec3 GetColor()
Returns the color of the light.
Definition: light.cpp:49
Render::color_t color
Definition: light.h:30
float distance
Definition: light.h:31
void EventHandler(Event &event)
Definition: light.h:23
void SetColor(Render::color_t color)
Sets the color of the light.
Definition: light.cpp:36
Render::light_t light
Definition: light.h:28
void Update()
Definition: light.cpp:23
void Start()
Definition: light.h:14
vec3 location
Definition: light.h:29
vec3 color_t
Definition: render.h:26
void * light_t
Definition: render.h:32
Definition: api.cpp:20
glm::vec3 vec3
Definition: math.h:12
Definition: event.h:19
================================================ FILE: docs/cppapi/loader_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/loader.cpp File Reference
Tramway SDK v0.1.1
loader.cpp File Reference
#include <framework/loader.h>
#include <framework/entity.h>
#include <framework/worldcell.h>
#include <framework/transition.h>
#include <framework/logging.h>
#include <templates/pool.h>
#include <set>

Namespaces

namespace  tram::Loader
 WorldCell streaming.
 
namespace  tram
 Serialization, i.e.
 

Functions

void tram::Loader::Track (Entity *entity)
 Starts tracking an Entity. More...
 
void tram::Loader::Untrack (Entity *entity)
 Stops tracking a tracked Entity. More...
 
void tram::Loader::Update ()
 Performs WorldCell loading and unloading. More...
 

Variables

std::set< id_t > tram::Loader::tracked_entities
 
================================================ FILE: docs/cppapi/loader_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/loader.h File Reference
Tramway SDK v0.1.1
loader.h File Reference

Go to the source code of this file.

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Loader
 WorldCell streaming.
 

Functions

void tram::Loader::Track (Entity *entity)
 Starts tracking an Entity. More...
 
void tram::Loader::Untrack (Entity *entity)
 Stops tracking a tracked Entity. More...
 
void tram::Loader::Update ()
 Performs WorldCell loading and unloading. More...
 
================================================ FILE: docs/cppapi/loader_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/loader.h Source File
Tramway SDK v0.1.1
loader.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_FRAMEWORK_LOADER_H
4#define TRAM_SDK_FRAMEWORK_LOADER_H
5
6namespace tram {
7 class Entity;
8}
9
10namespace tram::Loader {
11
12void Track(Entity* entity);
13void Untrack(Entity* entity);
14
15void Update();
16
17}
18
19#endif // TRAM_SDK_FRAMEWORK_LOADER_H
WorldCell streaming.
void Track(Entity *entity)
Starts tracking an Entity.
Definition: loader.cpp:32
void Update()
Performs WorldCell loading and unloading.
Definition: loader.cpp:48
void Untrack(Entity *entity)
Stops tracking a tracked Entity.
Definition: loader.cpp:38
Serialization, i.e.
================================================ FILE: docs/cppapi/logging_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/logging.cpp File Reference
Tramway SDK v0.1.1
logging.cpp File Reference

Logging and console printing services. More...

#include <framework/logging.h>
#include <framework/system.h>
#include <platform/other.h>
#include <cstring>
#include <charconv>
#include <iostream>
#include <vector>

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::implementation
 

Functions

void tram::SetSystemLoggingSeverity (System::system_t system, Severity min_severity)
 Sets the logging severity filter. More...
 
void tram::SetDisplayLogCallback (void(*callback)(int, const char *))
 Sets the display log callback. More...
 
void tram::SetConsoleLogCallback (void(*callback)(int, const char *))
 Sets the console log callback. More...
 
void tram::implementation::concat_fmt (std::string_view &str)
 
void tram::implementation::flush_console (Severity severity, System::system_t system)
 
void tram::implementation::flush_display (int time, int system)
 
template<>
void tram::implementation::concat (const std::string_view &value)
 
template<>
void tram::implementation::concat (const std::string &value)
 
template<>
void tram::implementation::concat (const char *const &value)
 
void tram::implementation::concat (const char *value)
 
template<>
void tram::implementation::concat (const UID &value)
 
template<typename T >
void tram::implementation::to_chars_concat (const T &value)
 
template<>
void tram::implementation::concat_numeric (const int64_t &value)
 
template<>
void tram::implementation::concat_numeric (const uint64_t &value)
 
template<>
void tram::implementation::concat_numeric (const float &value)
 

Variables

char tram::implementation::buffer [500] = {'\0'}
 

Detailed Description

Logging and console printing services.

See also
https://racenis.github.io/tram-sdk/documentation/framework/logging.html
================================================ FILE: docs/cppapi/logging_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/logging.h File Reference
Tramway SDK v0.1.1
logging.h File Reference
#include <framework/core.h>
#include <framework/uid.h>
#include <framework/system.h>
#include <concepts>

Go to the source code of this file.

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::implementation
 

Enumerations

enum class  tram::Severity {
  tram::INFO , tram::WARNING , tram::ERROR , tram::CRITICAL_ERROR ,
  tram::DEFAULT
}
 

Functions

template<typename T >
void tram::implementation::concat (const T &value)
 
template<>
void tram::implementation::concat (const std::string_view &value)
 
template<>
void tram::implementation::concat (const std::string &value)
 
template<>
void tram::implementation::concat (const char *const &value)
 
template<>
void tram::implementation::concat (const UID &value)
 
template<size_t N>
void tram::implementation::concat (const char(&value)[N])
 
void tram::implementation::concat (const char *value)
 
template<typename T >
void tram::implementation::concat_numeric (const T &value)
 
template<>
void tram::implementation::concat_numeric (const int64_t &value)
 
template<>
void tram::implementation::concat_numeric (const uint64_t &value)
 
template<>
void tram::implementation::concat_numeric (const float &value)
 
void tram::implementation::concat_fmt (std::string_view &str)
 
void tram::implementation::flush_console (Severity severity, System::system_t system)
 
void tram::implementation::flush_display (int time, System::system_t system)
 
void tram::implementation::log (void(*flush)(Severity, System::system_t), Severity severity, System::system_t system, std::string_view &format)
 
template<typename T , typename... Args>
void tram::implementation::log (void(*flush)(Severity, System::system_t), Severity severity, System::system_t system, std::string_view &format, T &value, Args &&... args)
 
void tram::SetSystemLoggingSeverity (System::system_t system, Severity min_severity)
 Sets the logging severity filter. More...
 
void tram::SetDisplayLogCallback (void(int, const char *))
 
void tram::SetConsoleLogCallback (void(int, const char *))
 
template<typename... Args>
void tram::Log (Severity severity, System::system_t system, const std::string_view &format, Args &&... args)
 
template<typename... Args>
void tram::Log (System::system_t system, const std::string_view &format, Args &&... args)
 
template<typename... Args>
void tram::Log (const std::string_view &format, Args &&... args)
 
template<typename... Args>
void tram::DisplayLog (int time, const std::string_view &format, Args &&... args)
 
================================================ FILE: docs/cppapi/logging_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/logging.h Source File
Tramway SDK v0.1.1
logging.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_FRAMEWORK_LOGGING_H
4#define TRAM_SDK_FRAMEWORK_LOGGING_H
5
6#include <framework/core.h>
7#include <framework/uid.h>
8#include <framework/system.h>
9#include <concepts>
10
11namespace tram {
12
13enum class Severity {
14 INFO, //< For debugging and other verbose messages. Not printed by default.
15 WARNING, //< For errors that are corrected and require no end-user intervention.
16 ERROR, //< For significant erros that can be corrected, but require the end-user to be notified.
17 CRITICAL_ERROR, //< For errors that cannot be recovered from.
18 DEFAULT //< Informational messages, always printed.
19};
20
21namespace implementation {
22 template <typename T> void concat(const T& value) {
23 concat<const char*>("LOGGER_UNDEFINED_TYPE");
24 }
25
26 template <> void concat(const std::string_view& value);
27 template <> void concat(const std::string& value);
28 template <> void concat(const char* const& value);
29 template <> void concat(const UID& value);
30 template <size_t N>
31 void concat(const char (&value)[N]) {
32 concat<const char*>(value);
33 }
34
35 void concat(const char*);
36
37 template <typename T> void concat_numeric(const T& value) {}
38 template <> void concat_numeric(const int64_t& value);
39 template <> void concat_numeric(const uint64_t& value);
40 template <> void concat_numeric(const float& value);
41
42 template <std::signed_integral T> void concat(const T& value) {
43 concat_numeric<int64_t>(value);
44 }
45
46 template <std::unsigned_integral T> void concat(const T& value) {
47 concat_numeric<uint64_t>(value);
48 }
49
50 template <std::floating_point T> void concat(const T& value) {
51 concat_numeric<float>(value);
52 }
53
54 void concat_fmt(std::string_view& str);
55 void flush_console(Severity severity, System::system_t system);
56 void flush_display(int time, System::system_t system);
57
58
59 inline void log(void(*flush)(Severity, System::system_t), Severity severity, System::system_t system, std::string_view& format) {
60 concat_fmt(format);
61 flush(severity, system);
62 }
63
64 template <typename T, typename... Args>
65 void log(void(*flush)(Severity, System::system_t), Severity severity, System::system_t system, std::string_view& format, T& value, Args&&... args) {
66 concat_fmt(format);
67 concat(value);
68
69 log(flush, severity, system, format, args...);
70 }
71}
72
73void SetSystemLoggingSeverity(System::system_t system, Severity min_severity);
74
75void SetDisplayLogCallback(void(int, const char*));
76void SetConsoleLogCallback(void(int, const char*));
77
78template <typename... Args>
79void Log(Severity severity, System::system_t system, const std::string_view& format, Args&&... args) {
80 std::string_view format_view = format;
81 implementation::log(implementation::flush_console, severity, system, format_view, args...);
82}
83
84template <typename... Args>
85void Log(System::system_t system, const std::string_view& format, Args&&... args) {
86 std::string_view format_view = format;
88}
89
90template <typename... Args>
91void Log(const std::string_view& format, Args&&... args) {
92 std::string_view format_view = format;
94}
95
96template <typename... Args>
97void DisplayLog(int time, const std::string_view& format, Args&&... args) {
98 std::string_view format_view = format;
99 implementation::log(implementation::flush_display, time, 6, format_view, args...);
100}
101
102}
103
104#endif // TRAM_SDK_LOGGING_H
uint32_t system_t
Definition: system.h:10
void concat_fmt(std::string_view &str)
Definition: logging.cpp:62
void flush_console(Severity severity, System::system_t system)
Definition: logging.cpp:74
void concat(const std::string_view &value)
Definition: logging.cpp:134
void log(void(*flush)(Severity, System::system_t), Severity severity, System::system_t system, std::string_view &format)
Definition: logging.h:59
void concat_numeric(const int64_t &value)
Definition: logging.cpp:161
void flush_display(int time, int system)
Definition: logging.cpp:126
Serialization, i.e.
Severity
Definition: logging.h:13
void Log(Severity severity, System::system_t system, const std::string_view &format, Args &&... args)
Definition: logging.h:79
void DisplayLog(int time, const std::string_view &format, Args &&... args)
Definition: logging.h:97
void SetSystemLoggingSeverity(System::system_t system, Severity min_severity)
Sets the logging severity filter.
Definition: logging.cpp:27
void SetConsoleLogCallback(void(*callback)(int, const char *))
Sets the console log callback.
Definition: logging.cpp:48
void SetDisplayLogCallback(void(*callback)(int, const char *))
Sets the display log callback.
Definition: logging.cpp:41
Interned string type.
Definition: uid.h:10
================================================ FILE: docs/cppapi/lua_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/scripting/lua.cpp File Reference
Tramway SDK v0.1.1
lua.cpp File Reference
#include <extensions/scripting/lua.h>
#include <framework/script.h>
#include <framework/logging.h>
#include <lua.hpp>
#include <iostream>
#include <cstring>

Classes

class  tram::Ext::Scripting::Lua::Lua
 

Namespaces

namespace  tram::Ext::Scripting::Lua
 Lua bindings for the Script system.
 
namespace  tram
 Serialization, i.e.
 
namespace  tram::Ext
 
namespace  tram::Ext::Scripting
 

Functions

void tram::Ext::Scripting::Lua::Init ()
 
void tram::Ext::Scripting::Lua::Uninit ()
 

Variables

const size_t tram::Ext::Scripting::Lua::MAX_LUA_FUNCTIONS = 200
 
================================================ FILE: docs/cppapi/lua_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/scripting/lua.h File Reference
Tramway SDK v0.1.1
lua.h File Reference

Go to the source code of this file.

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Ext
 
namespace  tram::Ext::Scripting
 
namespace  tram::Ext::Scripting::Lua
 Lua bindings for the Script system.
 

Functions

void tram::Ext::Scripting::Lua::Init ()
 
void tram::Ext::Scripting::Lua::Uninit ()
 
================================================ FILE: docs/cppapi/lua_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/scripting/lua.h Source File
Tramway SDK v0.1.1
lua.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_EXTENSIONS_SCRIPTING_LUA_H
4#define TRAM_SDK_EXTENSIONS_SCRIPTING_LUA_H
5
7
8void Init();
9void Uninit();
10
11}
12
13#endif // TRAM_SDK_EXTENSIONS_SCRIPTING_LUA_H
Lua bindings for the Script system.
void Uninit()
Definition: lua.cpp:296
void Init()
Definition: lua.cpp:285
================================================ FILE: docs/cppapi/macros_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/macros.h File Reference
Tramway SDK v0.1.1
macros.h File Reference

Go to the source code of this file.

Macros

#define TRAM_SDK_REGISTER_EVENT_DATATYPE(EVENT_ID, TYPE)   template <> struct tram::EventDataType<EVENT_ID> { TYPE type; };
 This is experimental template. More...
 
#define TRAM_SDK_IMPLEMENT_POOL(TYPE, NAME, SIZE)   template <> Pool<TYPE> PoolProxy<TYPE>::pool (NAME, SIZE);
 Implements a pool. More...
 
#define TRAM_SDK_ASSERT(EXPRESSION)   if (!(EXPRESSION)) { Log("{}\nAssert at line {} in {}", #EXPRESSION, __LINE__, __FILE__); abort(); }
 
#define TRAM_SDK_ASSERT_MESSAGE(EXPRESSION, MESSAGE)   if (!(EXPRESSION)) { Log("{}\n{}\nAssert at line {} in {}", MESSAGE, #EXPRESSION, __LINE__, __FILE__); abort(); }
 
#define TRAM_SDK_ENTITY_NAME(Name)
 
#define TRAM_SDK_PROPERTY(Name, Flags)
 
#define TRAM_SDK_VIRTUAL_PROPERTY(Type, Name, Flags)
 

Macro Definition Documentation

◆ TRAM_SDK_ASSERT

#define TRAM_SDK_ASSERT (   EXPRESSION)    if (!(EXPRESSION)) { Log("{}\nAssert at line {} in {}", #EXPRESSION, __LINE__, __FILE__); abort(); }

◆ TRAM_SDK_ASSERT_MESSAGE

#define TRAM_SDK_ASSERT_MESSAGE (   EXPRESSION,
  MESSAGE 
)    if (!(EXPRESSION)) { Log("{}\n{}\nAssert at line {} in {}", MESSAGE, #EXPRESSION, __LINE__, __FILE__); abort(); }

◆ TRAM_SDK_ENTITY_NAME

#define TRAM_SDK_ENTITY_NAME (   Name)

◆ TRAM_SDK_IMPLEMENT_POOL

#define TRAM_SDK_IMPLEMENT_POOL (   TYPE,
  NAME,
  SIZE 
)    template <> Pool<TYPE> PoolProxy<TYPE>::pool (NAME, SIZE);

Implements a pool.

◆ TRAM_SDK_PROPERTY

#define TRAM_SDK_PROPERTY (   Name,
  Flags 
)

◆ TRAM_SDK_REGISTER_EVENT_DATATYPE

#define TRAM_SDK_REGISTER_EVENT_DATATYPE (   EVENT_ID,
  TYPE 
)    template <> struct tram::EventDataType<EVENT_ID> { TYPE type; };

This is experimental template.

◆ TRAM_SDK_VIRTUAL_PROPERTY

#define TRAM_SDK_VIRTUAL_PROPERTY (   Type,
  Name,
  Flags 
)
================================================ FILE: docs/cppapi/macros_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/macros.h Source File
Tramway SDK v0.1.1
macros.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3
4// This file contains some macros. All of them are completely optional.
5
6#ifndef TRAM_SDK_TEMPLATES_MACROS_H
7#define TRAM_SDK_TEMPLATES_MACROS_H
8
10#define TRAM_SDK_REGISTER_EVENT_DATATYPE(EVENT_ID, TYPE) template <> struct tram::EventDataType<EVENT_ID> { TYPE type; };
11
13#define TRAM_SDK_IMPLEMENT_POOL(TYPE, NAME, SIZE) template <> Pool<TYPE> PoolProxy<TYPE>::pool (NAME, SIZE);
14
15
16// Asserts
17
18#ifndef NDEBUG
19#define TRAM_SDK_ASSERT(EXPRESSION) if (!(EXPRESSION)) { Log("{}\nAssert at line {} in {}", #EXPRESSION, __LINE__, __FILE__); abort(); }
20#define TRAM_SDK_ASSERT_MESSAGE(EXPRESSION, MESSAGE) if (!(EXPRESSION)) { Log("{}\n{}\nAssert at line {} in {}", MESSAGE, #EXPRESSION, __LINE__, __FILE__); abort(); }
21#else
22#define TRAM_SDK_ASSERT(EXPRESSION) ;
23#define TRAM_SDK_ASSERT_MESSAGE(EXPRESSION, MESSAGE) ;
24#endif
25
26
27
28// Code generation macros
29#define TRAM_SDK_ENTITY_NAME(Name)
30#define TRAM_SDK_PROPERTY(Name, Flags)
31#define TRAM_SDK_VIRTUAL_PROPERTY(Type, Name, Flags)
32
33#endif // TRAM_SDK_TEMPLATES_MACROS_H
================================================ FILE: docs/cppapi/main_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/main.cpp File Reference
Tramway SDK v0.1.1
main.cpp File Reference
#include <iostream>
#include <framework/core.h>
#include <framework/async.h>
#include <framework/ui.h>
#include <framework/entity.h>
#include <framework/worldcell.h>
#include <framework/loader.h>
#include <framework/event.h>
#include <framework/message.h>
#include <framework/language.h>
#include <framework/script.h>
#include <framework/path.h>
#include <framework/stats.h>
#include <physics/physics.h>
#include <audio/audio.h>
#include <framework/gui.h>
#include <framework/system.h>
#include <framework/logging.h>
#include <framework/settings.h>
#include <entities/crate.h>
#include <entities/staticworldobject.h>
#include <entities/light.h>
#include <entities/player.h>
#include <entities/sound.h>
#include <entities/decoration.h>
#include <entities/trigger.h>
#include <components/render.h>
#include <components/animation.h>
#include <components/light.h>
#include <components/sprite.h>
#include <components/particle.h>
#include <components/decal.h>
#include <components/audio.h>
#include <components/controller.h>
#include <components/trigger.h>
#include <components/player.h>
#include <extensions/menu/menu.h>
#include <extensions/camera/camera.h>
#include <extensions/camera/firstperson.h>
#include <extensions/kitchensink/kitchensink.h>
#include <extensions/kitchensink/entities.h>
#include <extensions/kitchensink/inventory.h>
#include <extensions/kitchensink/soundtable.h>
#include <extensions/kitchensink/probe.h>
#include <extensions/scripting/lua.h>
#include <extensions/kitchensink/dialog.h>
#include <extensions/kitchensink/quest.h>
#include <extensions/kitchensink/menu.h>
#include <render/api.h>
#include <render/scene.h>
#include <render/light.h>
#include <platform/platform.h>
#include <platform/image.h>

Functions

void mainloop ()
 
int main (int argc, const char **argv)
 

Variables

Ext::Camera::FirstPersonCameracamera = nullptr
 
Playerplayer = nullptr
 
LightComponentlit = nullptr
 
Spritetolet_sprite = nullptr
 
SpriteComponenttolet_spinner = nullptr
 
ParticleComponenttolet_emitter = nullptr
 
DecalComponenttolet_sprayer = nullptr
 
Audio::Soundderp = nullptr
 
Audio::Soundeerp = nullptr
 
AudioComponentderp_player = nullptr
 
RenderComponentbinguser = nullptr
 
RenderComponentmonguser = nullptr
 
RenderComponentdingbat = nullptr
 
AnimationComponentmonguser_armature = nullptr
 
bool record = false
 
PathFollowerfollower = nullptr
 
vec3 initial_follower = {0.1f, 1.0f, 1.5f}
 
Component< RenderComponentchamberpot
 

Function Documentation

◆ main()

int main ( int  argc,
const char **  argv 
)

◆ mainloop()

void mainloop ( )

Variable Documentation

◆ binguser

RenderComponent* binguser = nullptr

◆ camera

Ext::Camera::FirstPersonCamera* camera = nullptr

◆ chamberpot

◆ derp

Audio::Sound* derp = nullptr

◆ derp_player

AudioComponent* derp_player = nullptr

◆ dingbat

RenderComponent* dingbat = nullptr

◆ eerp

Audio::Sound* eerp = nullptr

◆ follower

PathFollower* follower = nullptr

◆ initial_follower

vec3 initial_follower = {0.1f, 1.0f, 1.5f}

◆ lit

LightComponent* lit = nullptr

◆ monguser

RenderComponent* monguser = nullptr

◆ monguser_armature

AnimationComponent* monguser_armature = nullptr

◆ player

Player* player = nullptr

◆ record

bool record = false

◆ tolet_emitter

ParticleComponent* tolet_emitter = nullptr

◆ tolet_spinner

SpriteComponent* tolet_spinner = nullptr

◆ tolet_sprayer

DecalComponent* tolet_sprayer = nullptr

◆ tolet_sprite

Sprite* tolet_sprite = nullptr
================================================ FILE: docs/cppapi/marker_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/marker.cpp File Reference
Tramway SDK v0.1.1
marker.cpp File Reference
#include <entities/marker.h>
#include <entities/script.h>

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/marker_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/marker.h File Reference
Tramway SDK v0.1.1
marker.h File Reference

Go to the source code of this file.

Classes

class  tram::Marker
 Functionally inert. More...
 

Namespaces

namespace  tram
 Serialization, i.e.
 
================================================ FILE: docs/cppapi/marker_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/marker.h Source File
Tramway SDK v0.1.1
marker.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_ENTITIES_MARKER_H
4#define TRAM_SDK_ENTITIES_MARKER_H
5
6#include <framework/entity.h>
8
9namespace tram {
10
11class Marker : public Entity {
12public:
13 Marker(const SharedEntityData&, const ValueArray&);
14
15 void UpdateParameters();
16 void SetParameters();
17 void Load();
18 void Unload();
19 void Serialize();
20 void MessageHandler(Message& msg);
22 static void Register();
23};
24
25}
26
27#endif // TRAM_SDK_ENTITIES_MARKER_H
Entity base class.
Definition: entity.h:23
Functionally inert.
Definition: marker.h:11
void UpdateParameters()
Called when Entity::UpdateTransform is called.
Definition: marker.cpp:39
Marker(const SharedEntityData &, const ValueArray &)
Definition: marker.cpp:17
void Load()
Loads an entity.
Definition: marker.cpp:41
void Serialize()
Definition: marker.cpp:43
static void Register()
Definition: marker.cpp:19
void SetParameters()
Called when either Entity::SetLocation or Entity::SetRotation is called.
Definition: marker.cpp:40
name_t GetType()
Returns the type of the entity.
Definition: marker.cpp:35
void Unload()
Unloads an entity.
Definition: marker.cpp:42
void MessageHandler(Message &msg)
Allows entities to receive messages.
Definition: marker.cpp:44
Definition: value.h:314
Serialization, i.e.
Message data.
Definition: message.h:16
Basic Entity parameters.
Definition: entity.h:132
Interned string type.
Definition: uid.h:10
================================================ FILE: docs/cppapi/material_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/material.cpp File Reference
Tramway SDK v0.1.1
material.cpp File Reference
#include <stb_image.h>
#include <framework/core.h>
#include <framework/stats.h>
#include <framework/file.h>
#include <render/material.h>
#include <render/api.h>
#include <render/error.h>
#include <templates/hashmap.h>
#include <config.h>
#include <fstream>

Namespaces

namespace  tram
 Serialization, i.e.
 
namespace  tram::Render
 High-level Render system API.
 

Macros

#define STB_IMAGE_IMPLEMENTATION
 
#define STBI_ONLY_PNG
 

Macro Definition Documentation

◆ STB_IMAGE_IMPLEMENTATION

#define STB_IMAGE_IMPLEMENTATION

◆ STBI_ONLY_PNG

#define STBI_ONLY_PNG
================================================ FILE: docs/cppapi/material_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/material.h File Reference
Tramway SDK v0.1.1
material.h File Reference
================================================ FILE: docs/cppapi/material_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/material.h Source File
Tramway SDK v0.1.1
material.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_RENDER_MATERIAL_H
4#define TRAM_SDK_RENDER_MATERIAL_H
5
6#include <render/render.h>
7
8namespace tram::Render {
9
23};
24
29};
30
31class Material : public Resource {
32public:
35
36 inline texturehandle_t GetTexture() const { return texture; }
37 inline material_t GetMaterial() const { return material; }
38 inline uint32_t GetWidth() const { return width; }
39 inline uint32_t GetHeight() const { return height; }
40 inline materialtype_t GetType() const { return type; }
41 inline MaterialProperty GetProperty() const { return property; }
42 inline vec3 GetColor() const { return color; }
43 inline float GetSpecularWeight() const { return specular_weight; }
44 inline float GetSpecularExponent() const { return specular_exponent; }
45 inline float GetSpecularTransparency() const { return specular_transparency; }
46
47 // TODO: update the material in the API when these are called
48 void SetMaterialType(materialtype_t type) { this->type = type; }
51 void SetColor(color_t color) { this->color = color; }
52 void SetSpecular(float weight, float exponent, float transparency) { specular_weight = weight; specular_exponent = exponent; specular_transparency = transparency; }
53 void SetReflectivity(float reflectivity) { this->reflectivity = reflectivity; }
54 void SetTextureType(TextureType texture_type) { this->texture_type = texture_type; }
55 void SetSource(Material* source) { this->source = source; }
56
57 void MakePattern(vec3 color1, vec3 color2);
58
59 void LoadFromDisk();
60 void LoadFromMemory();
61
62 void Unload() {}
63
64 static Material* Find(name_t name);
66
67 static void LoadMaterialInfo(const char* filename);
68
69protected:
75
76 material_t material = {.generic = nullptr};
77
78 Material* source = nullptr;
79
80 vec3 color = {1.0f, 1.0f, 1.0f};
81 float specular_weight = 0.0f;
82 float specular_exponent = 1.0f;
84 float reflectivity = 0.0f;
85
86 uint32_t width = 0;
87 uint32_t height = 0;
88 uint8_t channels = 0;
89 uint8_t* texture_data = nullptr;
91
92 friend class Sprite;
93};
94
95}
96
97#endif // TRAM_SDK_RENDER_MATERIAL_H
Material resource.
Definition: material.h:31
Material * source
Definition: material.h:78
void SetSpecular(float weight, float exponent, float transparency)
Definition: material.h:52
void LoadFromDisk()
Definition: material.cpp:224
MaterialProperty GetProperty() const
Definition: material.h:41
vec3 GetColor() const
Definition: material.h:42
void SetTextureType(TextureType texture_type)
Definition: material.h:54
size_t approx_vram_usage
Definition: material.h:90
void SetMaterialProperty(MaterialProperty property)
Definition: material.h:50
material_t GetMaterial() const
Definition: material.h:37
vec3 color
Definition: material.h:80
void SetMaterialType(materialtype_t type)
Definition: material.h:48
static Material * Make(name_t name, materialtype_t type)
Creates a material.
Definition: material.cpp:175
float GetSpecularWeight() const
Definition: material.h:43
void LoadFromMemory()
Pushes material textures to GPU.
Definition: material.cpp:298
void SetMaterialFilter(MaterialFilter filter)
Definition: material.h:49
uint32_t width
Definition: material.h:86
uint32_t GetWidth() const
Definition: material.h:38
float GetSpecularTransparency() const
Definition: material.h:45
Material(name_t name)
Definition: material.h:33
uint32_t height
Definition: material.h:87
uint8_t * texture_data
Definition: material.h:89
texturehandle_t texture
Definition: material.h:70
static void LoadMaterialInfo(const char *filename)
Loads a Material definition file.
Definition: material.cpp:45
TextureType texture_type
Definition: material.h:74
void SetSource(Material *source)
Definition: material.h:55
texturehandle_t GetTexture() const
Definition: material.h:36
MaterialProperty property
Definition: material.h:73
static Material * Find(name_t name)
Finds a Material.
Definition: material.cpp:193
float specular_transparency
Definition: material.h:83
MaterialFilter filter
Definition: material.h:72
float GetSpecularExponent() const
Definition: material.h:44
uint32_t GetHeight() const
Definition: material.h:39
materialtype_t GetType() const
Definition: material.h:40
void SetReflectivity(float reflectivity)
Definition: material.h:53
float reflectivity
Definition: material.h:84
material_t material
Definition: material.h:76
uint8_t channels
Definition: material.h:88
void SetColor(color_t color)
Definition: material.h:51
float specular_exponent
Definition: material.h:82
float specular_weight
Definition: material.h:81
void MakePattern(vec3 color1, vec3 color2)
Makes Material a pattern.
Definition: material.cpp:212
materialtype_t type
Definition: material.h:71
void Unload()
Definition: material.h:62
Sprite resource.
Definition: sprite.h:23
Definition: resource.h:11
name_t name
Definition: resource.h:37
High-level Render system API.
Definition: gui.h:8
@ MATERIAL_TEXTURE
Definition: render.h:76
vec3 color_t
Definition: render.h:16
uint32_t materialtype_t
Definition: render.h:20
MaterialProperty
Definition: material.h:10
@ PROPERTY_METAL_THIN
Definition: material.h:12
@ PROPERTY_GRATE
Definition: material.h:15
@ PROPERTY_SNOW
Definition: material.h:19
@ PROPERTY_SLIME
Definition: material.h:13
@ PROPERTY_GRASS
Definition: material.h:20
@ PROPERTY_GLASS
Definition: material.h:18
@ PROPERTY_WOOD
Definition: material.h:16
@ PROPERTY_TILE
Definition: material.h:14
@ PROPERTY_COMPUTER
Definition: material.h:17
@ PROPERTY_CONCRETE
Definition: material.h:21
@ PROPERTY_FLESH
Definition: material.h:22
@ PROPERTY_METAL
Definition: material.h:11
MaterialFilter
Definition: render.h:87
@ FILTER_NEAREST
Definition: render.h:88
TextureType
Definition: material.h:25
@ TEXTURE_SOURCE
Definition: material.h:28
@ TEXTURE_NONE
Definition: material.h:26
@ TEXTURE_SAME
Definition: material.h:27
glm::vec3 vec3
Definition: math.h:11
Definition: render.h:186
void * generic
Definition: render.h:191
Definition: render.h:160
Interned string type.
Definition: uid.h:10
================================================ FILE: docs/cppapi/math_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/math.cpp File Reference
Tramway SDK v0.1.1
math.cpp File Reference

GLM typedefs and useful math functions. More...

#include <framework/math.h>

Namespaces

namespace  tram
 Serialization, i.e.
 

Functions

void tram::QuatLookAt (quat &quaternion, const vec3 &from, const vec3 &to)
 Rotates a quaternion to face a point. More...
 
void tram::ProjectLine (vec3 &point, const vec3 &from, const vec3 &to)
 Projects a point on a line. More...
 
vec3 tram::RayTriangleIntersection (vec3 ray_pos, vec3 ray_dir, vec3 point1, vec3 point2, vec3 point3)
 Finds the intersection between a ray and a triangle. More...
 
vec3 tram::MergeAABBMin (vec3 a, vec3 b)
 Merges the min component of an AABB. More...
 
vec3 tram::MergeAABBMax (vec3 a, vec3 b)
 Merges the max component of an AABB. More...
 
void tram::RotateAABB (vec3 &min, vec3 &max, quat rotation)
 Rotates an AABB box by the given rotation. More...
 
void tram::RotateAABB (vec3 &min, vec3 &max, mat4 rotation)
 
mat4 tram::PositionRotationToMatrix (const vec3 &position, const quat &rotation)
 Generates a transform matrix. More...
 
mat4 tram::PositionRotationScaleToMatrix (const vec3 &position, const quat &rotation, const vec3 &scale)
 Generates a transform matrix. More...
 

Detailed Description

GLM typedefs and useful math functions.

See also
https://racenis.github.io/tram-sdk/documentation/framework/math.html
================================================ FILE: docs/cppapi/math_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/math.h File Reference
Tramway SDK v0.1.1
math.h File Reference
#include <glm/glm.hpp>
#include <glm/gtx/quaternion.hpp>

Go to the source code of this file.

Namespaces

namespace  tram
 Serialization, i.e.
 

Typedefs

typedef glm::vec3 tram::vec3
 
typedef glm::quat tram::quat
 
typedef glm::mat2 tram::mat2
 
typedef glm::mat4 tram::mat4
 
typedef glm::vec4 tram::vec4
 
typedef glm::vec2 tram::vec2
 
typedef glm::ivec3 tram::ivec3
 
typedef glm::ivec4 tram::ivec4
 
typedef glm::uvec3 tram::uvec3
 
typedef glm::uvec4 tram::uvec4
 

Functions

const vec3 tram::DIRECTION_FORWARD (0.0f, 0.0f, -1.0f)
 
const vec3 tram::DIRECTION_SIDE (1.0f, 0.0f, 0.0f)
 
const vec3 tram::DIRECTION_UP (0.0f, 1.0f, 0.0f)
 
const vec3 tram::IDENTITY_POSITION (0.0f, 0.0f, 0.0f)
 
const quat tram::IDENTITY_ROTATION (1.0f, 0.0f, 0.0f, 0.0f)
 
const vec3 tram::IDENTITY_SCALE (1.0f, 1.0f, 1.0f)
 
void tram::QuatLookAt (quat &quaternion, const vec3 &from, const vec3 &to)
 Rotates a quaternion to face a point. More...
 
void tram::ProjectLine (vec3 &point, const vec3 &from, const vec3 &to)
 Projects a point on a line. More...
 
vec3 tram::RayTriangleIntersection (vec3 ray_pos, vec3 ray_dir, vec3 point1, vec3 point2, vec3 point3)
 Finds the intersection between a ray and a triangle. More...
 
vec3 tram::MergeAABBMin (vec3 a, vec3 b)
 Merges the min component of an AABB. More...
 
vec3 tram::MergeAABBMax (vec3 a, vec3 b)
 Merges the max component of an AABB. More...
 
void tram::RotateAABB (vec3 &min, vec3 &max, quat rotation)
 Rotates an AABB box by the given rotation. More...
 
void tram::RotateAABB (vec3 &min, vec3 &max, mat4 rotation)
 
mat4 tram::PositionRotationToMatrix (const vec3 &position, const quat &rotation)
 Generates a transform matrix. More...
 
mat4 tram::PositionRotationScaleToMatrix (const vec3 &position, const quat &rotation, const vec3 &scale)
 Generates a transform matrix. More...
 
================================================ FILE: docs/cppapi/math_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/math.h Source File
Tramway SDK v0.1.1
math.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_FRAMEWORK_MATH_H
4#define TRAM_SDK_FRAMEWORK_MATH_H
5
6#include <glm/glm.hpp>
7#include <glm/gtx/quaternion.hpp>
8
9namespace tram {
10
21
22const vec3 DIRECTION_FORWARD (0.0f, 0.0f, -1.0f);
23const vec3 DIRECTION_SIDE (1.0f, 0.0f, 0.0f);
24const vec3 DIRECTION_UP (0.0f, 1.0f, 0.0f);
25
26const vec3 IDENTITY_POSITION (0.0f, 0.0f, 0.0f);
27const quat IDENTITY_ROTATION (1.0f, 0.0f, 0.0f, 0.0f);
28const vec3 IDENTITY_SCALE (1.0f, 1.0f, 1.0f);
29
30void QuatLookAt(quat& quaternion, const vec3& from, const vec3& to);
31void ProjectLine(vec3& point, const vec3& from, const vec3& to);
32
33vec3 RayTriangleIntersection(vec3 ray_pos, vec3 ray_dir, vec3 point1, vec3 point2, vec3 point3);
34
37
38void RotateAABB(vec3& min, vec3& max, quat rotation);
39void RotateAABB(vec3& min, vec3& max, mat4 rotation);
40
41mat4 PositionRotationToMatrix(const vec3& position, const quat& rotation);
42mat4 PositionRotationScaleToMatrix(const vec3& position, const quat& rotation, const vec3& scale);
43
44}
45
46#endif // TRAM_SDK_FRAMEWORK_MATH_H
Serialization, i.e.
const vec3 DIRECTION_SIDE(1.0f, 0.0f, 0.0f)
glm::mat2 mat2
Definition: math.h:13
glm::ivec4 ivec4
Definition: math.h:18
glm::vec4 vec4
Definition: math.h:15
glm::vec2 vec2
Definition: math.h:16
glm::ivec3 ivec3
Definition: math.h:17
vec3 MergeAABBMin(vec3 a, vec3 b)
Merges the min component of an AABB.
Definition: math.cpp:79
const vec3 IDENTITY_POSITION(0.0f, 0.0f, 0.0f)
glm::uvec3 uvec3
Definition: math.h:19
glm::vec3 vec3
Definition: math.h:11
const quat IDENTITY_ROTATION(1.0f, 0.0f, 0.0f, 0.0f)
const vec3 IDENTITY_SCALE(1.0f, 1.0f, 1.0f)
glm::quat quat
Definition: math.h:12
vec3 RayTriangleIntersection(vec3 ray_pos, vec3 ray_dir, vec3 point1, vec3 point2, vec3 point3)
Finds the intersection between a ray and a triangle.
Definition: math.cpp:40
void QuatLookAt(quat &quaternion, const vec3 &from, const vec3 &to)
Rotates a quaternion to face a point.
Definition: math.cpp:18
mat4 PositionRotationScaleToMatrix(const vec3 &position, const quat &rotation, const vec3 &scale)
Generates a transform matrix.
Definition: math.cpp:161
glm::mat4 mat4
Definition: math.h:14
mat4 PositionRotationToMatrix(const vec3 &position, const quat &rotation)
Generates a transform matrix.
Definition: math.cpp:153
const vec3 DIRECTION_UP(0.0f, 1.0f, 0.0f)
glm::uvec4 uvec4
Definition: math.h:20
const vec3 DIRECTION_FORWARD(0.0f, 0.0f, -1.0f)
vec3 MergeAABBMax(vec3 a, vec3 b)
Merges the max component of an AABB.
Definition: math.cpp:88
void RotateAABB(vec3 &min, vec3 &max, quat rotation)
Rotates an AABB box by the given rotation.
Definition: math.cpp:100
void ProjectLine(vec3 &point, const vec3 &from, const vec3 &to)
Projects a point on a line.
Definition: math.cpp:26
================================================ FILE: docs/cppapi/menu.js ================================================ /* @licstart The following is the entire license notice for the JavaScript code in this file. The MIT License (MIT) Copyright (C) 1997-2020 by Dimitri van Heesch Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @licend The above is the entire license notice for the JavaScript code in this file */ function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { function makeTree(data,relPath) { var result=''; if ('children' in data) { result+=''; } return result; } var searchBox; if (searchEnabled) { if (serverSide) { searchBox='
'+ '
'+ '
'+ ''+ '
'+ '
'+ '
'+ '
'; } else { searchBox='
'+ ''+ ''+ ''+ ''+ ''+ '' '' '
'; } } $('#main-nav').before('
'+ ''+ ''+ '
'); $('#main-nav').append(makeTree(menudata,relPath)); $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); if (searchBox) { $('#main-menu').append('
  • '); } var $mainMenuState = $('#main-menu-state'); var prevWidth = 0; if ($mainMenuState.length) { function initResizableIfExists() { if (typeof initResizable==='function') initResizable(); } // animate mobile menu $mainMenuState.change(function(e) { var $menu = $('#main-menu'); var options = { duration: 250, step: initResizableIfExists }; if (this.checked) { options['complete'] = function() { $menu.css('display', 'block') }; $menu.hide().slideDown(options); } else { options['complete'] = function() { $menu.css('display', 'none') }; $menu.show().slideUp(options); } }); // set default menu visibility function resetState() { var $menu = $('#main-menu'); var $mainMenuState = $('#main-menu-state'); var newWidth = $(window).outerWidth(); if (newWidth!=prevWidth) { if ($(window).outerWidth()<768) { $mainMenuState.prop('checked',false); $menu.hide(); $('#searchBoxPos1').html(searchBox); $('#searchBoxPos2').hide(); } else { $menu.show(); $('#searchBoxPos1').empty(); $('#searchBoxPos2').html(searchBox); $('#searchBoxPos2').show(); } prevWidth = newWidth; } } $(window).ready(function() { resetState(); initResizableIfExists(); }); $(window).resize(resetState); } $('#main-menu').smartmenus(); } /* @license-end */ ================================================ FILE: docs/cppapi/menu_2menu_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/menu.cpp File Reference
    Tramway SDK v0.1.1
    menu.cpp File Reference
    #include <framework/gui.h>
    #include <framework/stats.h>
    #include <framework/worldcell.h>
    #include <framework/system.h>
    #include <physics/physics.h>
    #include <render/render.h>
    #include <render/sprite.h>
    #include <render/material.h>
    #include <templates/stack.h>
    #include <extensions/menu/menu.h>
    #include <extensions/menu/debug.h>
    #include <extensions/menu/system.h>
    #include <algorithm>

    Namespaces

    namespace  tram::Ext::Menu
     Menu framework.
     
    namespace  tram::Ext::Menu::Menu
     Menu base interface class.
     
    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Ext
     

    Functions

    void tram::Ext::Menu::ToggleMenuState ()
     
    void tram::Ext::Menu::CloseAll ()
     
    void tram::Ext::Menu::Init ()
     
    void tram::Ext::Menu::Update ()
     
    void tram::Ext::Menu::DebugMenue ()
     

    Variables

    font_t tram::Ext::Menu::FONT_WIDGETS = 0
     
    font_t tram::Ext::Menu::FONT_TEXT = 0
     
    font_t tram::Ext::Menu::FONT_TEXT_BOLD = 0
     
    font_t tram::Ext::Menu::FONT_HEADER = 0
     
    font_t tram::Ext::Menu::FONT_PIXELART = 0
     
    uint32_t tram::Ext::Menu::MENU_SYSTEM = -1
     
    DebugMenu * tram::Ext::Menu::debug_menu = nullptr
     
    std::vector< Menu * > tram::Ext::Menu::menu_stack
     
    std::vector< Menu * > tram::Ext::Menu::menu_list
     
    ================================================ FILE: docs/cppapi/menu_2menu_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/menu.h File Reference
    Tramway SDK v0.1.1
    menu.h File Reference
    #include <framework/gui.h>

    Go to the source code of this file.

    Classes

    class  tram::Ext::Menu::Menu
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Ext
     
    namespace  tram::Ext::Menu
     Menu framework.
     

    Functions

    void tram::Ext::Menu::Init ()
     
    void tram::Ext::Menu::Update ()
     
    ================================================ FILE: docs/cppapi/menu_2menu_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/menu.h Source File
    Tramway SDK v0.1.1
    menu.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_EXTENSIONS_MENU_MENU_H
    4#define TRAM_SDK_EXTENSIONS_MENU_MENU_H
    5
    6#include <framework/gui.h>
    7
    8namespace tram::Ext::Menu {
    9
    10void Init();
    11void Update();
    12
    18
    19class Menu {
    20public:
    21 virtual void Display() = 0;
    22 virtual uint32_t Layer() = 0;
    23 virtual ~Menu() = default;
    24
    25 static void Push(Menu*);
    26 static bool Pop();
    27 static bool Empty();
    28 static void Clear();
    29
    30 static void Add(Menu*);
    31 static void Remove(Menu*);
    32};
    33
    34}
    35
    36#endif
    Definition: menu.h:19
    static bool Pop()
    Pops the topmost menu from the stack.
    Definition: menu.cpp:178
    static void Clear()
    Clears the menu stack.
    Definition: menu.cpp:203
    static void Add(Menu *)
    Definition: menu.cpp:211
    virtual ~Menu()=default
    static bool Empty()
    Checks whether the menu stack is empty.
    Definition: menu.cpp:195
    virtual uint32_t Layer()=0
    virtual void Display()=0
    static void Remove(Menu *)
    Definition: menu.cpp:217
    static void Push(Menu *)
    Pushes menu on the menu stack.
    Definition: menu.cpp:167
    Menu framework.
    Definition: debug.cpp:23
    font_t FONT_PIXELART
    Definition: menu.cpp:59
    void Init()
    Definition: menu.cpp:101
    font_t FONT_WIDGETS
    Definition: menu.cpp:55
    font_t FONT_TEXT
    Definition: menu.cpp:56
    font_t FONT_TEXT_BOLD
    Definition: menu.cpp:57
    void Update()
    Definition: menu.cpp:143
    font_t FONT_HEADER
    Definition: menu.cpp:58
    uint32_t font_t
    Definition: gui.h:14
    ================================================ FILE: docs/cppapi/menu_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/menu.cpp File Reference
    Tramway SDK
    menu.cpp File Reference
    #include <framework/gui.h>
    #include <framework/stats.h>
    #include <framework/worldcell.h>
    #include <framework/system.h>
    #include <physics/physics.h>
    #include <render/render.h>
    #include <render/sprite.h>
    #include <render/material.h>
    #include <templates/stack.h>
    #include <extensions/menu/menu.h>
    #include <extensions/menu/debug.h>
    #include <extensions/menu/system.h>
    #include <algorithm>

    Namespaces

    namespace  tram
     
    namespace  tram::Ext
     
    namespace  tram::Ext::Menu
     

    Functions

    void tram::Ext::Menu::ToggleMenuState ()
     
    void tram::Ext::Menu::CloseAll ()
     
    void tram::Ext::Menu::EscapeMenuKeyboard ()
     
    void tram::Ext::Menu::DebugMenuKeyboard ()
     
    void tram::Ext::Menu::Init ()
     
    void tram::Ext::Menu::Update ()
     
    void tram::Ext::Menu::DebugMenue ()
     

    Variables

    font_t tram::Ext::Menu::FONT_WIDGETS = 0
     
    font_t tram::Ext::Menu::FONT_TEXT = 0
     
    font_t tram::Ext::Menu::FONT_TEXT_BOLD = 0
     
    font_t tram::Ext::Menu::FONT_HEADER = 0
     
    font_t tram::Ext::Menu::FONT_PIXELART = 0
     
    uint32_t tram::Ext::Menu::MENU_SYSTEM = -1
     
    DebugMenu * tram::Ext::Menu::debug_menu = nullptr
     
    std::vector< Menu * > tram::Ext::Menu::menu_stack
     
    std::vector< Menu * > tram::Ext::Menu::menu_list
     
    ================================================ FILE: docs/cppapi/menu_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/menu.h File Reference
    Tramway SDK
    menu.h File Reference
    #include <framework/gui.h>

    Go to the source code of this file.

    Classes

    class  tram::Ext::Menu::Menu
     

    Namespaces

    namespace  tram
     
    namespace  tram::Ext
     
    namespace  tram::Ext::Menu
     

    Functions

    void tram::Ext::Menu::Init ()
     
    void tram::Ext::Menu::Update ()
     
    ================================================ FILE: docs/cppapi/menu_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/menu.h Source File
    Tramway SDK
    menu.h
    Go to the documentation of this file.
    1// TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022
    2// All rights reserved.
    3
    4#ifndef TRAM_SDK_EXTENSIONS_MENU_MENU_H
    5#define TRAM_SDK_EXTENSIONS_MENU_MENU_H
    6
    7#include <framework/gui.h>
    8
    9namespace tram::Ext::Menu {
    10
    11void Init();
    12void Update();
    13
    19
    20class Menu {
    21public:
    22 virtual void Display() = 0;
    23 virtual uint32_t Layer() = 0;
    24 virtual ~Menu() = default;
    25
    26 static void Push(Menu*);
    27 static bool Pop();
    28 static bool Empty();
    29 static void Clear();
    30
    31 static void Add(Menu*);
    32 static void Remove(Menu*);
    33};
    34
    35}
    36
    37#endif
    Definition: menu.h:20
    static bool Pop()
    Definition: menu.cpp:168
    static void Clear()
    Definition: menu.cpp:182
    static void Add(Menu *)
    Definition: menu.cpp:189
    virtual ~Menu()=default
    static bool Empty()
    Definition: menu.cpp:178
    virtual uint32_t Layer()=0
    virtual void Display()=0
    static void Remove(Menu *)
    Definition: menu.cpp:193
    static void Push(Menu *)
    Definition: menu.cpp:163
    Definition: debug.cpp:14
    font_t FONT_PIXELART
    Definition: menu.cpp:31
    void Init()
    Definition: menu.cpp:97
    font_t FONT_WIDGETS
    Definition: menu.cpp:27
    font_t FONT_TEXT
    Definition: menu.cpp:28
    font_t FONT_TEXT_BOLD
    Definition: menu.cpp:29
    void Update()
    Definition: menu.cpp:134
    font_t FONT_HEADER
    Definition: menu.cpp:30
    uint32_t font_t
    Definition: gui.h:15
    ================================================ FILE: docs/cppapi/menudata.js ================================================ /* @licstart The following is the entire license notice for the JavaScript code in this file. The MIT License (MIT) Copyright (C) 1997-2020 by Dimitri van Heesch Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @licend The above is the entire license notice for the JavaScript code in this file */ var menudata={children:[ {text:"Main Page",url:"index.html"}, {text:"Related Pages",url:"pages.html"}, {text:"Namespaces",url:"namespaces.html",children:[ {text:"Namespace List",url:"namespaces.html"}, {text:"Namespace Members",url:"namespacemembers.html",children:[ {text:"All",url:"namespacemembers.html",children:[ {text:"a",url:"namespacemembers.html#index_a"}, {text:"b",url:"namespacemembers_b.html#index_b"}, {text:"c",url:"namespacemembers_c.html#index_c"}, {text:"d",url:"namespacemembers_d.html#index_d"}, {text:"e",url:"namespacemembers_e.html#index_e"}, {text:"f",url:"namespacemembers_f.html#index_f"}, {text:"g",url:"namespacemembers_g.html#index_g"}, {text:"h",url:"namespacemembers_h.html#index_h"}, {text:"i",url:"namespacemembers_i.html#index_i"}, {text:"k",url:"namespacemembers_k.html#index_k"}, {text:"l",url:"namespacemembers_l.html#index_l"}, {text:"m",url:"namespacemembers_m.html#index_m"}, {text:"n",url:"namespacemembers_n.html#index_n"}, {text:"o",url:"namespacemembers_o.html#index_o"}, {text:"p",url:"namespacemembers_p.html#index_p"}, {text:"q",url:"namespacemembers_q.html#index_q"}, {text:"r",url:"namespacemembers_r.html#index_r"}, {text:"s",url:"namespacemembers_s.html#index_s"}, {text:"t",url:"namespacemembers_t.html#index_t"}, {text:"u",url:"namespacemembers_u.html#index_u"}, {text:"v",url:"namespacemembers_v.html#index_v"}, {text:"w",url:"namespacemembers_w.html#index_w"}, {text:"y",url:"namespacemembers_y.html#index_y"}]}, {text:"Functions",url:"namespacemembers_func.html",children:[ {text:"a",url:"namespacemembers_func.html#index_a"}, {text:"b",url:"namespacemembers_func_b.html#index_b"}, {text:"c",url:"namespacemembers_func_c.html#index_c"}, {text:"d",url:"namespacemembers_func_d.html#index_d"}, {text:"e",url:"namespacemembers_func_e.html#index_e"}, {text:"f",url:"namespacemembers_func_f.html#index_f"}, {text:"g",url:"namespacemembers_func_g.html#index_g"}, {text:"h",url:"namespacemembers_func_h.html#index_h"}, {text:"i",url:"namespacemembers_func_i.html#index_i"}, {text:"k",url:"namespacemembers_func_k.html#index_k"}, {text:"l",url:"namespacemembers_func_l.html#index_l"}, {text:"m",url:"namespacemembers_func_m.html#index_m"}, {text:"n",url:"namespacemembers_func_n.html#index_n"}, {text:"p",url:"namespacemembers_func_p.html#index_p"}, {text:"q",url:"namespacemembers_func_q.html#index_q"}, {text:"r",url:"namespacemembers_func_r.html#index_r"}, {text:"s",url:"namespacemembers_func_s.html#index_s"}, {text:"t",url:"namespacemembers_func_t.html#index_t"}, {text:"u",url:"namespacemembers_func_u.html#index_u"}, {text:"v",url:"namespacemembers_func_v.html#index_v"}, {text:"y",url:"namespacemembers_func_y.html#index_y"}]}, {text:"Variables",url:"namespacemembers_vars.html",children:[ {text:"a",url:"namespacemembers_vars.html#index_a"}, {text:"b",url:"namespacemembers_vars.html#index_b"}, {text:"c",url:"namespacemembers_vars.html#index_c"}, {text:"d",url:"namespacemembers_vars.html#index_d"}, {text:"e",url:"namespacemembers_vars.html#index_e"}, {text:"f",url:"namespacemembers_vars.html#index_f"}, {text:"h",url:"namespacemembers_vars.html#index_h"}, {text:"i",url:"namespacemembers_vars.html#index_i"}, {text:"k",url:"namespacemembers_vars.html#index_k"}, {text:"l",url:"namespacemembers_vars.html#index_l"}, {text:"m",url:"namespacemembers_vars.html#index_m"}, {text:"n",url:"namespacemembers_vars.html#index_n"}, {text:"o",url:"namespacemembers_vars.html#index_o"}, {text:"p",url:"namespacemembers_vars.html#index_p"}, {text:"r",url:"namespacemembers_vars.html#index_r"}, {text:"s",url:"namespacemembers_vars.html#index_s"}, {text:"t",url:"namespacemembers_vars.html#index_t"}, {text:"u",url:"namespacemembers_vars.html#index_u"}, {text:"v",url:"namespacemembers_vars.html#index_v"}, {text:"w",url:"namespacemembers_vars.html#index_w"}]}, {text:"Typedefs",url:"namespacemembers_type.html",children:[ {text:"a",url:"namespacemembers_type.html#index_a"}, {text:"c",url:"namespacemembers_type.html#index_c"}, {text:"e",url:"namespacemembers_type.html#index_e"}, {text:"f",url:"namespacemembers_type.html#index_f"}, {text:"g",url:"namespacemembers_type.html#index_g"}, {text:"i",url:"namespacemembers_type.html#index_i"}, {text:"k",url:"namespacemembers_type.html#index_k"}, {text:"l",url:"namespacemembers_type.html#index_l"}, {text:"m",url:"namespacemembers_type.html#index_m"}, {text:"n",url:"namespacemembers_type.html#index_n"}, {text:"p",url:"namespacemembers_type.html#index_p"}, {text:"q",url:"namespacemembers_type.html#index_q"}, {text:"s",url:"namespacemembers_type.html#index_s"}, {text:"u",url:"namespacemembers_type.html#index_u"}, {text:"v",url:"namespacemembers_type.html#index_v"}]}, {text:"Enumerations",url:"namespacemembers_enum.html",children:[ {text:"a",url:"namespacemembers_enum.html#index_a"}, {text:"c",url:"namespacemembers_enum.html#index_c"}, {text:"d",url:"namespacemembers_enum.html#index_d"}, {text:"f",url:"namespacemembers_enum.html#index_f"}, {text:"g",url:"namespacemembers_enum.html#index_g"}, {text:"i",url:"namespacemembers_enum.html#index_i"}, {text:"k",url:"namespacemembers_enum.html#index_k"}, {text:"m",url:"namespacemembers_enum.html#index_m"}, {text:"o",url:"namespacemembers_enum.html#index_o"}, {text:"p",url:"namespacemembers_enum.html#index_p"}, {text:"q",url:"namespacemembers_enum.html#index_q"}, {text:"r",url:"namespacemembers_enum.html#index_r"}, {text:"s",url:"namespacemembers_enum.html#index_s"}, {text:"t",url:"namespacemembers_enum.html#index_t"}, {text:"u",url:"namespacemembers_enum.html#index_u"}, {text:"v",url:"namespacemembers_enum.html#index_v"}, {text:"w",url:"namespacemembers_enum.html#index_w"}]}, {text:"Enumerator",url:"namespacemembers_eval.html",children:[ {text:"a",url:"namespacemembers_eval.html#index_a"}, {text:"b",url:"namespacemembers_eval_b.html#index_b"}, {text:"c",url:"namespacemembers_eval_c.html#index_c"}, {text:"d",url:"namespacemembers_eval_d.html#index_d"}, {text:"e",url:"namespacemembers_eval_e.html#index_e"}, {text:"f",url:"namespacemembers_eval_f.html#index_f"}, {text:"g",url:"namespacemembers_eval_g.html#index_g"}, {text:"i",url:"namespacemembers_eval_i.html#index_i"}, {text:"k",url:"namespacemembers_eval_k.html#index_k"}, {text:"l",url:"namespacemembers_eval_l.html#index_l"}, {text:"m",url:"namespacemembers_eval_m.html#index_m"}, {text:"n",url:"namespacemembers_eval_n.html#index_n"}, {text:"p",url:"namespacemembers_eval_p.html#index_p"}, {text:"q",url:"namespacemembers_eval_q.html#index_q"}, {text:"r",url:"namespacemembers_eval_r.html#index_r"}, {text:"s",url:"namespacemembers_eval_s.html#index_s"}, {text:"t",url:"namespacemembers_eval_t.html#index_t"}, {text:"u",url:"namespacemembers_eval_u.html#index_u"}, {text:"v",url:"namespacemembers_eval_v.html#index_v"}, {text:"w",url:"namespacemembers_eval_w.html#index_w"}, {text:"y",url:"namespacemembers_eval_y.html#index_y"}]}]}]}, {text:"Classes",url:"annotated.html",children:[ {text:"Class List",url:"annotated.html"}, {text:"Class Index",url:"classes.html"}, {text:"Class Hierarchy",url:"hierarchy.html"}, {text:"Class Members",url:"functions.html",children:[ {text:"All",url:"functions.html",children:[ {text:"a",url:"functions.html#index_a"}, {text:"b",url:"functions_b.html#index_b"}, {text:"c",url:"functions_c.html#index_c"}, {text:"d",url:"functions_d.html#index_d"}, {text:"e",url:"functions_e.html#index_e"}, {text:"f",url:"functions_f.html#index_f"}, {text:"g",url:"functions_g.html#index_g"}, {text:"h",url:"functions_h.html#index_h"}, {text:"i",url:"functions_i.html#index_i"}, {text:"j",url:"functions_j.html#index_j"}, {text:"k",url:"functions_k.html#index_k"}, {text:"l",url:"functions_l.html#index_l"}, {text:"m",url:"functions_m.html#index_m"}, {text:"n",url:"functions_n.html#index_n"}, {text:"o",url:"functions_o.html#index_o"}, {text:"p",url:"functions_p.html#index_p"}, {text:"q",url:"functions_q.html#index_q"}, {text:"r",url:"functions_r.html#index_r"}, {text:"s",url:"functions_s.html#index_s"}, {text:"t",url:"functions_t.html#index_t"}, {text:"u",url:"functions_u.html#index_u"}, {text:"v",url:"functions_v.html#index_v"}, {text:"w",url:"functions_w.html#index_w"}, {text:"x",url:"functions_x.html#index_x"}, {text:"y",url:"functions_y.html#index_y"}, {text:"~",url:"functions_~.html#index__7E"}]}, {text:"Functions",url:"functions_func.html",children:[ {text:"a",url:"functions_func.html#index_a"}, {text:"b",url:"functions_func_b.html#index_b"}, {text:"c",url:"functions_func_c.html#index_c"}, {text:"d",url:"functions_func_d.html#index_d"}, {text:"e",url:"functions_func_e.html#index_e"}, {text:"f",url:"functions_func_f.html#index_f"}, {text:"g",url:"functions_func_g.html#index_g"}, {text:"h",url:"functions_func_h.html#index_h"}, {text:"i",url:"functions_func_i.html#index_i"}, {text:"j",url:"functions_func_j.html#index_j"}, {text:"l",url:"functions_func_l.html#index_l"}, {text:"m",url:"functions_func_m.html#index_m"}, {text:"n",url:"functions_func_n.html#index_n"}, {text:"o",url:"functions_func_o.html#index_o"}, {text:"p",url:"functions_func_p.html#index_p"}, {text:"q",url:"functions_func_q.html#index_q"}, {text:"r",url:"functions_func_r.html#index_r"}, {text:"s",url:"functions_func_s.html#index_s"}, {text:"t",url:"functions_func_t.html#index_t"}, {text:"u",url:"functions_func_u.html#index_u"}, {text:"v",url:"functions_func_v.html#index_v"}, {text:"w",url:"functions_func_w.html#index_w"}, {text:"y",url:"functions_func_y.html#index_y"}, {text:"~",url:"functions_func_~.html#index__7E"}]}, {text:"Variables",url:"functions_vars.html",children:[ {text:"a",url:"functions_vars.html#index_a"}, {text:"b",url:"functions_vars_b.html#index_b"}, {text:"c",url:"functions_vars_c.html#index_c"}, {text:"d",url:"functions_vars_d.html#index_d"}, {text:"e",url:"functions_vars_e.html#index_e"}, {text:"f",url:"functions_vars_f.html#index_f"}, {text:"g",url:"functions_vars_g.html#index_g"}, {text:"h",url:"functions_vars_h.html#index_h"}, {text:"i",url:"functions_vars_i.html#index_i"}, {text:"j",url:"functions_vars_j.html#index_j"}, {text:"k",url:"functions_vars_k.html#index_k"}, {text:"l",url:"functions_vars_l.html#index_l"}, {text:"m",url:"functions_vars_m.html#index_m"}, {text:"n",url:"functions_vars_n.html#index_n"}, {text:"o",url:"functions_vars_o.html#index_o"}, {text:"p",url:"functions_vars_p.html#index_p"}, {text:"q",url:"functions_vars_q.html#index_q"}, {text:"r",url:"functions_vars_r.html#index_r"}, {text:"s",url:"functions_vars_s.html#index_s"}, {text:"t",url:"functions_vars_t.html#index_t"}, {text:"u",url:"functions_vars_u.html#index_u"}, {text:"v",url:"functions_vars_v.html#index_v"}, {text:"w",url:"functions_vars_w.html#index_w"}, {text:"x",url:"functions_vars_x.html#index_x"}, {text:"y",url:"functions_vars_y.html#index_y"}]}, {text:"Enumerations",url:"functions_enum.html"}, {text:"Enumerator",url:"functions_eval.html",children:[ {text:"a",url:"functions_eval.html#index_a"}, {text:"b",url:"functions_eval.html#index_b"}, {text:"c",url:"functions_eval.html#index_c"}, {text:"d",url:"functions_eval.html#index_d"}, {text:"e",url:"functions_eval.html#index_e"}, {text:"f",url:"functions_eval.html#index_f"}, {text:"i",url:"functions_eval.html#index_i"}, {text:"k",url:"functions_eval.html#index_k"}, {text:"l",url:"functions_eval.html#index_l"}, {text:"m",url:"functions_eval.html#index_m"}, {text:"n",url:"functions_eval.html#index_n"}, {text:"o",url:"functions_eval.html#index_o"}, {text:"p",url:"functions_eval.html#index_p"}, {text:"r",url:"functions_eval.html#index_r"}, {text:"s",url:"functions_eval.html#index_s"}, {text:"t",url:"functions_eval.html#index_t"}, {text:"u",url:"functions_eval.html#index_u"}, {text:"w",url:"functions_eval.html#index_w"}]}, {text:"Related Functions",url:"functions_rela.html"}]}]}, {text:"Files",url:"files.html",children:[ {text:"File List",url:"files.html"}, {text:"File Members",url:"globals.html",children:[ {text:"All",url:"globals.html",children:[ {text:"a",url:"globals.html#index_a"}, {text:"b",url:"globals.html#index_b"}, {text:"c",url:"globals.html#index_c"}, {text:"d",url:"globals.html#index_d"}, {text:"e",url:"globals.html#index_e"}, {text:"f",url:"globals.html#index_f"}, {text:"i",url:"globals.html#index_i"}, {text:"l",url:"globals.html#index_l"}, {text:"m",url:"globals.html#index_m"}, {text:"p",url:"globals.html#index_p"}, {text:"r",url:"globals.html#index_r"}, {text:"s",url:"globals.html#index_s"}, {text:"t",url:"globals.html#index_t"}]}, {text:"Functions",url:"globals_func.html"}, {text:"Variables",url:"globals_vars.html"}, {text:"Macros",url:"globals_defs.html"}]}]}]} ================================================ FILE: docs/cppapi/message_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/message.cpp File Reference
    Tramway SDK v0.1.1
    message.cpp File Reference
    #include <framework/message.h>
    #include <framework/entity.h>
    #include <framework/logging.h>
    #include <templates/queue.h>
    #include <templates/pool.h>
    #include <templates/stackpool.h>
    #include <templates/hashmap.h>
    #include <config.h>
    #include <queue>

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    ================================================ FILE: docs/cppapi/message_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/message.h File Reference
    Tramway SDK v0.1.1
    message.h File Reference
    #include <framework/uid.h>

    Go to the source code of this file.

    Classes

    struct  tram::Message
     Message data. More...
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     

    Typedefs

    typedef uint32_t tram::message_t
     
    ================================================ FILE: docs/cppapi/message_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/message.h Source File
    Tramway SDK v0.1.1
    message.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_FRAMEWORK_MESSAGE_H
    4#define TRAM_SDK_FRAMEWORK_MESSAGE_H
    5
    6#include <framework/uid.h>
    7
    8namespace tram {
    9
    10typedef uint32_t message_t;
    11typedef uint32_t id_t;
    12
    13struct Value;
    14typedef Value value_t;
    15
    16struct Message {
    17 enum Type : message_t {
    38 };
    39
    40 static message_t Register(const char* name);
    41 static message_t GetType(name_t name);
    43 static message_t GetLast();
    44
    45 static void Send(const Message& message);
    46 static void Send(const Message& message, float delay);
    47 static void Dispatch();
    48 static void* AllocateData(size_t ammount);
    49 template <typename T> static T* AllocateData() { return (T*)AllocateData(sizeof(T)); }
    50 template <typename T> static T* AllocateData(const T& data) { T* ptr = (T*)AllocateData(sizeof(T)); *ptr = data; return ptr; }
    51 static void SetInterceptCallback(void(const Message&));
    52
    56
    57 union {
    58 void* data = nullptr;
    59 int32_t data_int;
    61 };
    62};
    63
    64}
    65
    66#endif // TRAM_SDK_FRAMEWORK_MESSAGE_H
    Generic, type-safe union.
    Definition: value.h:18
    Serialization, i.e.
    uint32_t id_t
    Definition: core.h:10
    uint32_t message_t
    Definition: message.h:10
    Value value_t
    Definition: event.h:21
    Message data.
    Definition: message.h:16
    message_t type
    Type of the message.
    Definition: message.h:53
    static message_t GetLast()
    Returns the last message_t plus one.
    Definition: message.cpp:147
    id_t receiver
    ID of the Entity that will receive the message.
    Definition: message.h:55
    id_t sender
    ID of the Entity that sent the message.
    Definition: message.h:54
    static message_t Register(const char *name)
    Registers a new message type.
    Definition: message.cpp:96
    static void Send(const Message &message)
    Sends a message.
    Definition: message.cpp:180
    static T * AllocateData()
    Definition: message.h:49
    static void Dispatch()
    Dispatches sent messsages.
    Definition: message.cpp:153
    int32_t data_int
    Arbitrary data integer.
    Definition: message.h:59
    static T * AllocateData(const T &data)
    Definition: message.h:50
    static message_t GetType(name_t name)
    Finds a message type from a name.
    Definition: message.cpp:120
    Type
    Definition: message.h:17
    @ STOP
    Definition: message.h:29
    @ ACTIVATE
    Definition: message.h:30
    @ SELECT
    Definition: message.h:32
    @ UNLOCK
    Definition: message.h:24
    @ KILL
    Definition: message.h:26
    @ SET_FLAG_ON
    Definition: message.h:35
    @ SET_ANIMATION
    Definition: message.h:34
    @ TRIGGER
    Definition: message.h:27
    @ NONE
    Definition: message.h:18
    @ SET_PROGRESS
    Definition: message.h:33
    @ CLOSE
    Definition: message.h:22
    @ PING
    Definition: message.h:19
    @ SET_FLAG_OFF
    Definition: message.h:36
    @ TOGGLE
    Definition: message.h:25
    @ LAST_MESSAGE
    Definition: message.h:37
    @ ACTIVATE_ONCE
    Definition: message.h:31
    @ MOVE_PICK_UP
    Definition: message.h:20
    @ OPEN
    Definition: message.h:21
    @ START
    Definition: message.h:28
    @ LOCK
    Definition: message.h:23
    static name_t GetName(message_t type)
    Gets a nessage type name.
    Definition: message.cpp:136
    static void SetInterceptCallback(void(const Message &))
    Definition: message.cpp:217
    value_t * data_value
    Pointer to a value_t.
    Definition: message.h:60
    void * data
    Pointer to arbitrary data.
    Definition: message.h:58
    Interned string type.
    Definition: uid.h:10
    ================================================ FILE: docs/cppapi/model_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/model.cpp File Reference
    Tramway SDK v0.1.1
    model.cpp File Reference
    #include <framework/core.h>
    #include <framework/stats.h>
    #include <framework/file.h>
    #include <framework/logging.h>
    #include <render/model.h>
    #include <render/api.h>
    #include <render/vertices.h>
    #include <render/error.h>
    #include <framework/async.h>
    #include <fstream>
    #include <cstring>
    #include <templates/hashmap.h>
    #include <templates/aabb.h>
    #include <charconv>

    Classes

    struct  tram::Render::ModelAABB
     
    struct  tram::Render::TriangleBucket
     
    struct  tram::Render::BucketMapping
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Render
     High-level Render system API.
     
    ================================================ FILE: docs/cppapi/model_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/model.h File Reference
    Tramway SDK v0.1.1
    model.h File Reference
    #include <render/material.h>

    Go to the source code of this file.

    Classes

    struct  tram::Render::AABBTriangle
     
    struct  tram::Render::IndexRange
     
    class  tram::Render::Model
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Render
     High-level Render system API.
     
    ================================================ FILE: docs/cppapi/model_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/model.h Source File
    Tramway SDK v0.1.1
    model.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_RENDER_MODEL_H
    4#define TRAM_SDK_RENDER_MODEL_H
    5
    6#include <render/material.h>
    7
    8namespace tram::Render {
    9
    10struct ModelData;
    11struct ModelAABB;
    12
    16 uint32_t material;
    17};
    18
    19struct IndexRange {
    20 uint32_t index_offset = 0;
    21 uint32_t index_length = 0;
    22 uint32_t material_count = 0;
    24 uint32_t materials[15] = { 0 };
    25};
    26
    27class Model : public Resource {
    28public:
    30
    31 void LoadFromDisk();
    32 void LoadFromMemory();
    33
    34 void Unload() {}
    35
    37
    40
    41 const std::vector<Bone>& GetArmature() const { return armature; }
    42 const std::vector<Material*>& GetMaterials() const { return materials; }
    43 const std::vector<IndexRange>& GetIndexRanges() const { return index_ranges; }
    44
    45 void DrawAABB(vec3 position, quat rotation);
    46 void FindAllFromRay(vec3 ray_pos, vec3 ray_dir, std::vector<AABBTriangle>& result);
    47 void FindAllFromAABB(vec3 min, vec3 max, std::vector<AABBTriangle>& result);
    48
    49 vec3 GetAABBMin() const { return aabb_min; }
    50 vec3 GetAABBMax() const { return aabb_max; }
    51
    52 vec3 GetOrigin() const { return origin; }
    53
    54 float GetNearDistance() const { return fade_near; }
    55 float GetFarDistance() const { return fade_far; }
    56 void SetNearDistance(float dist) { fade_near = dist; }
    57 void SetFarDistance(float dist) { fade_far = dist; }
    58
    59 static Model* Find(name_t name);
    60
    61protected:
    63
    66
    67 std::vector<IndexRange> index_ranges;
    68
    69 vec3 aabb_min = {0.0f, 0.0f, 0.0f};
    70 vec3 aabb_max = {0.0f, 0.0f, 0.0f};
    71
    72 float fade_near = 0.0f;
    73 float fade_far = INFINITY;
    74
    75 vec3 origin = {0.0f, 0.0f, 0.0f};
    76
    77 std::vector<Material*> materials;
    78
    79 Model* source = nullptr;
    80
    81 std::vector<Bone> armature;
    85};
    86
    87}
    88
    89
    90#endif // TRAM_SDK_RENDER_MODEL_H
    Definition: model.h:27
    static Model * Find(name_t name)
    Definition: model.cpp:58
    vec3 aabb_max
    Definition: model.h:70
    void LoadFromDisk()
    Definition: model.cpp:287
    void DrawAABB(vec3 position, quat rotation)
    Draws the AABB tree.
    Definition: model.cpp:205
    vec3 GetAABBMin() const
    Definition: model.h:49
    void FindAllFromRay(vec3 ray_pos, vec3 ray_dir, std::vector< AABBTriangle > &result)
    Finds triangles that intersect ray.
    Definition: model.cpp:143
    vec3 GetOrigin() const
    Definition: model.h:52
    indexarray_t GetIndexArray() const
    Definition: model.h:39
    void LoadFromMemory()
    Definition: model.cpp:69
    ModelAABB * model_aabb
    Definition: model.h:83
    void SetNearDistance(float dist)
    Definition: model.h:56
    float GetFarDistance() const
    Definition: model.h:55
    size_t approx_vram_usage
    Definition: model.h:84
    void FindAllFromAABB(vec3 min, vec3 max, std::vector< AABBTriangle > &result)
    Definition: model.cpp:154
    std::vector< IndexRange > index_ranges
    Definition: model.h:67
    const std::vector< IndexRange > & GetIndexRanges() const
    Definition: model.h:43
    vec3 aabb_min
    Definition: model.h:69
    ModelData * model_data
    Definition: model.h:82
    std::vector< Bone > armature
    Definition: model.h:81
    void Unload()
    Definition: model.h:34
    const std::vector< Bone > & GetArmature() const
    Definition: model.h:41
    vertexformat_t GetVertexFormat() const
    Definition: model.h:36
    Model(name_t name)
    Definition: model.h:29
    indexarray_t index_array
    Definition: model.h:65
    float fade_near
    Definition: model.h:72
    float GetNearDistance() const
    Definition: model.h:54
    float fade_far
    Definition: model.h:73
    vertexarray_t vertex_array
    Definition: model.h:64
    vec3 GetAABBMax() const
    Definition: model.h:50
    vertexarray_t GetVertexArray() const
    Definition: model.h:38
    Model * source
    Definition: model.h:79
    void SetFarDistance(float dist)
    Definition: model.h:57
    std::vector< Material * > materials
    Definition: model.h:77
    const std::vector< Material * > & GetMaterials() const
    Definition: model.h:42
    vertexformat_t vertex_format
    Definition: model.h:62
    vec3 origin
    Definition: model.h:75
    Definition: resource.h:11
    name_t name
    Definition: resource.h:37
    High-level Render system API.
    Definition: gui.h:8
    uint32_t vertexformat_t
    Definition: render.h:19
    @ VERTEX_STATIC
    Definition: render.h:68
    uint32_t materialtype_t
    Definition: render.h:20
    glm::vec3 vec3
    Definition: math.h:11
    glm::quat quat
    Definition: math.h:12
    Definition: model.h:13
    vec3 normal
    Definition: model.h:15
    uint32_t material
    Definition: model.h:16
    vec3 point1
    Definition: model.h:14
    vec3 point2
    Definition: model.h:14
    vec3 point3
    Definition: model.h:14
    Definition: model.h:19
    materialtype_t material_type
    Definition: model.h:23
    uint32_t material_count
    Definition: model.h:22
    uint32_t index_length
    Definition: model.h:21
    uint32_t materials[15]
    Definition: model.h:24
    uint32_t index_offset
    Definition: model.h:20
    Definition: model.cpp:134
    Definition: vertices.h:58
    Definition: render.h:126
    Definition: render.h:109
    Interned string type.
    Definition: uid.h:10
    ================================================ FILE: docs/cppapi/motionstates_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/bullet/motionstates.h File Reference
    Tramway SDK
    motionstates.h File Reference
    #include <btBulletDynamicsCommon.h>
    #include <framework/core.h>
    #include <framework/entity.h>
    #include <components/physics.h>
    #include <components/animation.h>

    Go to the source code of this file.

    Classes

    class  tram::Physics::EntMotionState
     
    class  tram::Physics::ArmMotionState
     

    Namespaces

    namespace  tram
     TODO:
     
    namespace  tram::Physics
     
    ================================================ FILE: docs/cppapi/motionstates_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/bullet/motionstates.h Source File
    Tramway SDK
    motionstates.h
    Go to the documentation of this file.
    1// TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022
    2// All rights reserved.
    3
    4#ifndef PHYSICS_BULLET_MOTIONSTATES_H
    5#define PHYSICS_BULLET_MOTIONSTATES_H
    6
    7#include <btBulletDynamicsCommon.h>
    8
    9#include <framework/core.h>
    10#include <framework/entity.h>
    11
    12#include <components/physics.h>
    14
    15namespace tram::Physics {
    16
    17
    18class EntMotionState : public btMotionState {
    19public:
    20 EntMotionState (Entity* ent, vec3& offset) {
    21 entity = ent;
    22 troffse = offset;
    23 }
    24
    25 virtual ~EntMotionState() {
    26 }
    27
    28 void SetEntity(Entity* ent) {
    29 entity = ent;
    30 }
    31
    32 virtual void getWorldTransform (btTransform &worldTrans) const {
    33 vec3 loc;
    34 quat rot;
    35
    36 if (entity == nullptr){
    37 loc = vec3(0.0f, 0.0f, 0.0f);
    38 rot = quat(vec3(0.0f, 0.0f, 0.0f));
    39 } else {
    40 loc = entity->GetLocation();
    41 rot = entity->GetRotation();
    42 }
    43
    44 loc += troffse;
    45
    46 btVector3 translation;
    47 translation.setX(loc.x);
    48 translation.setY(loc.y);
    49 translation.setZ(loc.z);
    50
    51 btQuaternion rotation;
    52 rotation.setX(rot.x);
    53 rotation.setY(rot.y);
    54 rotation.setZ(rot.z);
    55 rotation.setW(rot.w);
    56
    57 btTransform transf;
    58 transf.setRotation(rotation);
    59 transf.setOrigin(translation);
    60
    61 worldTrans = transf;
    62 }
    63
    64 virtual void setWorldTransform (const btTransform &worldTrans) {
    65 if (entity == nullptr) return;
    66
    67 vec3 location;
    68 quat rotation;
    69
    70 btQuaternion rot = worldTrans.getRotation();
    71 btVector3 loc = worldTrans.getOrigin();
    72
    73 location.x = loc.getX();
    74 location.y = loc.getY();
    75 location.z = loc.getZ();
    76
    77 location -= troffse;
    78
    79 rotation.x = rot.getX();
    80 rotation.y = rot.getY();
    81 rotation.z = rot.getZ();
    82 rotation.w = rot.getW();
    83
    84 entity->UpdateTransform(location, rotation);
    85 }
    86
    87protected:
    88 Entity* entity = nullptr;
    90};
    91
    92class ArmMotionState : public btMotionState {
    93public:
    94 ArmMotionState (name_t boneName, AnimationComponent* armature, vec3 bindPos, Entity* entity, PhysicsComponent* physicsComp) {
    95 ent = entity;
    96 arm = armature;
    97 offset = bindPos;
    98 bone = boneName;
    99 physcomp = physicsComp;
    100 }
    101
    102 virtual ~ArmMotionState() {}
    103
    104 virtual void getWorldTransform (btTransform &worldTrans) const {
    105 vec3 loc = ent->GetLocation();
    106 quat rot = ent->GetRotation();
    107
    108 loc += rot * offset;
    109
    110 btVector3 translation;
    111 translation.setX(loc.x);
    112 translation.setY(loc.y);
    113 translation.setZ(loc.z);
    114
    115 btQuaternion rotation;
    116 rotation.setX(rot.x);
    117 rotation.setY(rot.y);
    118 rotation.setZ(rot.z);
    119 rotation.setW(rot.w);
    120
    121 btTransform transf;
    122 transf.setRotation(rotation);
    123 transf.setOrigin(translation);
    124
    125 worldTrans = transf;
    126 }
    127
    128 virtual void setWorldTransform (const btTransform &worldTrans) {
    129 vec3 location;
    130 quat rotation;
    131
    132 btQuaternion rot = worldTrans.getRotation();
    133 btVector3 loc = worldTrans.getOrigin();
    134
    135 location.x = loc.getX();
    136 location.y = loc.getY();
    137 location.z = loc.getZ();
    138
    139 rotation.x = rot.getX();
    140 rotation.y = rot.getY();
    141 rotation.z = rot.getZ();
    142 rotation.w = rot.getW();
    143
    144 vec3 ent_loc = ent->GetLocation();
    145 quat ent_rot = ent->GetRotation();
    146
    147
    148 location = location - ent_loc;
    149 location = glm::inverse(ent_rot) * location;
    150 location = location - offset;
    151
    152 rotation = rotation * glm::inverse(ent_rot);
    153
    154 Render::Keyframe kframe;
    155 kframe.rotation = rotation;
    156 kframe.location = location;
    157
    158 arm->SetBoneKeyframe(bone, kframe);
    159 }
    160
    161protected:
    167};
    168
    169}
    170
    171#endif // PHYSICS_BULLET_MOTIONSTATES_H
    Plays back Animations.
    Definition: animation.h:13
    Entity base class.
    Definition: entity.h:20
    void UpdateTransform(const vec3 &loc, const quat &rot)
    Definition: entity.h:56
    const vec3 & GetLocation()
    Definition: entity.h:63
    const quat & GetRotation()
    Definition: entity.h:64
    Definition: motionstates.h:92
    virtual ~ArmMotionState()
    Definition: motionstates.h:102
    ArmMotionState(name_t boneName, AnimationComponent *armature, vec3 bindPos, Entity *entity, PhysicsComponent *physicsComp)
    Definition: motionstates.h:94
    PhysicsComponent * physcomp
    Definition: motionstates.h:162
    vec3 offset
    Definition: motionstates.h:165
    name_t bone
    Definition: motionstates.h:166
    AnimationComponent * arm
    Definition: motionstates.h:163
    Entity * ent
    Definition: motionstates.h:164
    virtual void getWorldTransform(btTransform &worldTrans) const
    Definition: motionstates.h:104
    virtual void setWorldTransform(const btTransform &worldTrans)
    Definition: motionstates.h:128
    Definition: motionstates.h:18
    virtual void getWorldTransform(btTransform &worldTrans) const
    Definition: motionstates.h:32
    virtual void setWorldTransform(const btTransform &worldTrans)
    Definition: motionstates.h:64
    vec3 troffse
    Definition: motionstates.h:89
    Entity * entity
    Definition: motionstates.h:88
    virtual ~EntMotionState()
    Definition: motionstates.h:25
    EntMotionState(Entity *ent, vec3 &offset)
    Definition: motionstates.h:20
    void SetEntity(Entity *ent)
    Definition: motionstates.h:28
    Rigidbody wrapper.
    Definition: physics.h:12
    glm::vec3 vec3
    Definition: math.h:11
    glm::quat quat
    Definition: math.h:12
    Keyframe for a skeletal animation.
    Definition: animation.h:27
    vec3 location
    Definition: animation.h:29
    quat rotation
    Definition: animation.h:30
    Interned string type.
    Definition: uid.h:10
    ================================================ FILE: docs/cppapi/namespacemembers.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
    Here is a list of all namespace members with links to the namespace documentation for each member:

    - a -

    ================================================ FILE: docs/cppapi/namespacemembers_b.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
    Here is a list of all namespace members with links to the namespace documentation for each member:

    - b -

    ================================================ FILE: docs/cppapi/namespacemembers_c.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
    Here is a list of all namespace members with links to the namespace documentation for each member:

    - c -

    ================================================ FILE: docs/cppapi/namespacemembers_d.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
    Here is a list of all namespace members with links to the namespace documentation for each member:

    - d -

    ================================================ FILE: docs/cppapi/namespacemembers_e.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
    Here is a list of all namespace members with links to the namespace documentation for each member:

    - e -

    ================================================ FILE: docs/cppapi/namespacemembers_enum.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - a -

    - c -

    - d -

    - f -

    • FileMedium : tram
    • FileStatus : tram

    - g -

    - i -

    - k -

    - m -

    - o -

    - p -

    - q -

    - r -

    - s -

    - t -

    - u -

    - v -

    - w -

    ================================================ FILE: docs/cppapi/namespacemembers_eval.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - a -

    ================================================ FILE: docs/cppapi/namespacemembers_eval_b.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - b -

    ================================================ FILE: docs/cppapi/namespacemembers_eval_c.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - c -

    ================================================ FILE: docs/cppapi/namespacemembers_eval_d.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - d -

    ================================================ FILE: docs/cppapi/namespacemembers_eval_e.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - e -

    ================================================ FILE: docs/cppapi/namespacemembers_eval_f.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - f -

    ================================================ FILE: docs/cppapi/namespacemembers_eval_g.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - g -

    ================================================ FILE: docs/cppapi/namespacemembers_eval_i.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - i -

    ================================================ FILE: docs/cppapi/namespacemembers_eval_k.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - k -

    ================================================ FILE: docs/cppapi/namespacemembers_eval_l.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - l -

    ================================================ FILE: docs/cppapi/namespacemembers_eval_m.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - m -

    ================================================ FILE: docs/cppapi/namespacemembers_eval_n.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - n -

    ================================================ FILE: docs/cppapi/namespacemembers_eval_p.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - p -

    ================================================ FILE: docs/cppapi/namespacemembers_eval_q.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - q -

    ================================================ FILE: docs/cppapi/namespacemembers_eval_r.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - r -

    ================================================ FILE: docs/cppapi/namespacemembers_eval_s.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - s -

    ================================================ FILE: docs/cppapi/namespacemembers_eval_t.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - t -

    ================================================ FILE: docs/cppapi/namespacemembers_eval_u.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - u -

    ================================================ FILE: docs/cppapi/namespacemembers_eval_v.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - v -

    ================================================ FILE: docs/cppapi/namespacemembers_eval_w.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - w -

    ================================================ FILE: docs/cppapi/namespacemembers_eval_y.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - y -

    ================================================ FILE: docs/cppapi/namespacemembers_f.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
    Here is a list of all namespace members with links to the namespace documentation for each member:

    - f -

    ================================================ FILE: docs/cppapi/namespacemembers_func.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - a -

    ================================================ FILE: docs/cppapi/namespacemembers_func_b.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - b -

    ================================================ FILE: docs/cppapi/namespacemembers_func_c.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - c -

    ================================================ FILE: docs/cppapi/namespacemembers_func_d.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - d -

    ================================================ FILE: docs/cppapi/namespacemembers_func_e.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - e -

    ================================================ FILE: docs/cppapi/namespacemembers_func_f.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - f -

    ================================================ FILE: docs/cppapi/namespacemembers_func_g.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - g -

    ================================================ FILE: docs/cppapi/namespacemembers_func_h.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - h -

    ================================================ FILE: docs/cppapi/namespacemembers_func_i.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - i -

    ================================================ FILE: docs/cppapi/namespacemembers_func_k.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - k -

    ================================================ FILE: docs/cppapi/namespacemembers_func_l.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - l -

    ================================================ FILE: docs/cppapi/namespacemembers_func_m.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - m -

    ================================================ FILE: docs/cppapi/namespacemembers_func_n.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - n -

    ================================================ FILE: docs/cppapi/namespacemembers_func_p.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - p -

    ================================================ FILE: docs/cppapi/namespacemembers_func_q.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - q -

    • QuatLookAt() : tram
    ================================================ FILE: docs/cppapi/namespacemembers_func_r.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - r -

    ================================================ FILE: docs/cppapi/namespacemembers_func_s.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - s -

    ================================================ FILE: docs/cppapi/namespacemembers_func_t.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - t -

    ================================================ FILE: docs/cppapi/namespacemembers_func_u.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - u -

    ================================================ FILE: docs/cppapi/namespacemembers_func_v.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - v -

    ================================================ FILE: docs/cppapi/namespacemembers_func_w.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK
     

    - w -

    • write_text_to_chars() : tram
    ================================================ FILE: docs/cppapi/namespacemembers_func_x.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK
     

    - x -

    ================================================ FILE: docs/cppapi/namespacemembers_func_y.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - y -

    ================================================ FILE: docs/cppapi/namespacemembers_g.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
    Here is a list of all namespace members with links to the namespace documentation for each member:

    - g -

    ================================================ FILE: docs/cppapi/namespacemembers_h.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
    Here is a list of all namespace members with links to the namespace documentation for each member:

    - h -

    ================================================ FILE: docs/cppapi/namespacemembers_i.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
    Here is a list of all namespace members with links to the namespace documentation for each member:

    - i -

    ================================================ FILE: docs/cppapi/namespacemembers_k.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
    Here is a list of all namespace members with links to the namespace documentation for each member:

    - k -

    ================================================ FILE: docs/cppapi/namespacemembers_l.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
    Here is a list of all namespace members with links to the namespace documentation for each member:

    - l -

    ================================================ FILE: docs/cppapi/namespacemembers_m.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
    Here is a list of all namespace members with links to the namespace documentation for each member:

    - m -

    ================================================ FILE: docs/cppapi/namespacemembers_n.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
    Here is a list of all namespace members with links to the namespace documentation for each member:

    - n -

    ================================================ FILE: docs/cppapi/namespacemembers_o.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
    Here is a list of all namespace members with links to the namespace documentation for each member:

    - o -

    ================================================ FILE: docs/cppapi/namespacemembers_p.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
    Here is a list of all namespace members with links to the namespace documentation for each member:

    - p -

    ================================================ FILE: docs/cppapi/namespacemembers_q.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
    Here is a list of all namespace members with links to the namespace documentation for each member:

    - q -

    ================================================ FILE: docs/cppapi/namespacemembers_r.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
    Here is a list of all namespace members with links to the namespace documentation for each member:

    - r -

    ================================================ FILE: docs/cppapi/namespacemembers_s.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
    Here is a list of all namespace members with links to the namespace documentation for each member:

    - s -

    ================================================ FILE: docs/cppapi/namespacemembers_t.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
    Here is a list of all namespace members with links to the namespace documentation for each member:

    - t -

    ================================================ FILE: docs/cppapi/namespacemembers_type.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - a -

    - c -

    - e -

    • entity_clear : tram
    • entity_make : tram
    • event_t : tram

    - f -

    - g -

    - i -

    - k -

    - l -

    - m -

    - n -

    - p -

    • PoopProxy : tram

    - q -

    - s -

    - u -

    - v -

    ================================================ FILE: docs/cppapi/namespacemembers_u.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
    Here is a list of all namespace members with links to the namespace documentation for each member:

    - u -

    ================================================ FILE: docs/cppapi/namespacemembers_v.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
    Here is a list of all namespace members with links to the namespace documentation for each member:

    - v -

    ================================================ FILE: docs/cppapi/namespacemembers_vars.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
     

    - a -

    - b -

    - c -

    - d -

    - e -

    • ENTITY_LIMIT : tram
    • ENTITY_TYPE_LIMIT : tram
    • EXT_KITCHENSINK_ANIMATIONTABLE_LIMIT : tram
    • EXT_KITCHENSINK_SOUNDTABLE_LIMIT : tram

    - f -

    - h -

    - i -

    - k -

    - l -

    - m -

    - n -

    - o -

    - p -

    - r -

    • RESOURCE_LIMIT_COLLISION_MODEL : tram
    • RESOURCE_LIMIT_LIGHT_GRAPH : tram
    • RESOURCE_LIMIT_MATERIAL : tram
    • RESOURCE_LIMIT_MODEL : tram
    • RESOURCE_LIMIT_PATH : tram
    • RESOURCE_LIMIT_SOUND : tram
    • RESOURCE_LIMIT_SOUND_GRAPH : tram
    • RESOURCE_LIMIT_SPRITE : tram
    • RESOURCE_LOADER_QUEUE_LIMIT : tram
    • RESOURCE_LOADER_REQUEST_LIMIT : tram
    • RIGIDBODY_LIMIT : tram
    • rigidbody_metadata_pool : tram::Physics::API

    - s -

    - t -

    - u -

    • UID_CHARACTER_LIMIT : tram
    • UID_LIMIT : tram

    - v -

    - w -

    • WORLDCELL_LIMIT : tram
    • WORLDCELL_TRANSITION_LIMIT : tram
    ================================================ FILE: docs/cppapi/namespacemembers_w.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
    Here is a list of all namespace members with links to the namespace documentation for each member:

    - w -

    ================================================ FILE: docs/cppapi/namespacemembers_x.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK
    Here is a list of all namespace members with links to the namespace documentation for each member:

    - x -

    ================================================ FILE: docs/cppapi/namespacemembers_y.html ================================================ Tramway SDK: Namespace Members
    Tramway SDK v0.1.1
    Here is a list of all namespace members with links to the namespace documentation for each member:

    - y -

    ================================================ FILE: docs/cppapi/namespaces.html ================================================ Tramway SDK: Namespace List
    Tramway SDK v0.1.1
    Namespace List
    Here is a list of all namespaces with brief descriptions:
    [detail level 12345]
     NtramSerialization, i.e
     NAsyncMulti-threading and Resource streaming
     NAudioSystem for doing audio related stuff
     NCore
     NExt
     NGUIImmediate mode GUI system
     Nimplementation
     NLanguageLocalization services
     NLoaderWorldCell streaming
     NPhysics
     NPlatform
     NRenderHigh-level Render system API
     NScriptScripting API
     NScriptableType
     NSettingsApplication setting management and CLI command parser
     NStatsResource usage statistics
     NSystemSystem tracking
     NUIUser interface system
     CAABBTree
     CAnimationComponentPlays back Animations
     CAudioComponentPlays back Sounds
     CComponentWrapper for an EntityComponent pointer
     CControllerComponentProvides an API for character controllers
     CCrate3D Model with a rigidbody attached to it
     CDecalComponentProjects decals onto the scene
     CDecoration3D Model with an AnimationComponent attached to it
     CDiskReader
     CDiskWriter
     CEdge
     CEntityEntity base class
     CEntityComponentComponent base class
     CEntityTypeInfo
     CEventEvent data
     CEventListenerSmart wrapper class for Event listeners
     CFileVery fast file reader/writer
     CFileReader
     CFileReaderParser
     CFileSource
     CFileWriter
     CFileWriterParser
     CFPSControllerComponentImplementation of an FPS-style character controller
     CGraph
     CHashmap
     CLightLightComponent wrapper
     CLightComponentProvides a real-time illumination for the scene
     CListenerInfo
     CMarkerFunctionally inert
     CMessageMessage data
     CNavmeshNot fully implemented yet
     CNavmeshNode
     CNode
     COctree
     CParticleComponentProvides amusing graphical effects
     CPathBase class for graphs
     CPathEdgeInfo
     CPathFollowerPoint constrained to a Path
     CPhysicsComponentRigidbody wrapper
     CPlayerControllerComponent with a PlayerComponent attached to it
     CPlayerComponentTranslates keyboard/mouse inputs into inputs for ControllerComponent
     CPool
     CPoolProxy
     CPoolPtr
     CQueueSimple queue implementation
     CRaycastControllerComponentImplementation of a simple character controller
     CRenderComponentRenders a Model
     CResource
     CResourceProxy
     CScriptableProvides script language subclassing
     CSharedEntityDataBasic Entity parameters
     CSignalMessage template
     CSignalTableList of Message templates
     CSoundAudioComponent wrapper
     CSpinlock
     CSpriteComponentProvides amusing graphical effects
     CStack
     CStackPoolAllocator
     CStaticWorldObjectWorldspawn
     CTemplateComponent
     CTextReaderParser
     CTextWriterParser
     CTransitionConnects WorldCells together
     CTriggerTriggerComponent wrapper
     CTriggerComponentTrigger wrapper
     CUIDInterned string type
     CValueGeneric, type-safe union
     CValueArray
     CValuePtr
     CWorldCellWorld streaming unit
    ================================================ FILE: docs/cppapi/namespacetram.html ================================================ Tramway SDK: tram Namespace Reference
    Tramway SDK v0.1.1
    tram Namespace Reference

    Serialization, i.e. More...

    Namespaces

    namespace  Async
     Multi-threading and Resource streaming.
     
    namespace  Audio
     System for doing audio related stuff.
     
    namespace  Core
     
    namespace  Ext
     
    namespace  GUI
     Immediate mode GUI system.
     
    namespace  implementation
     
    namespace  Language
     Localization services.
     
    namespace  Loader
     WorldCell streaming.
     
    namespace  Physics
     
    namespace  Platform
     
    namespace  Render
     High-level Render system API.
     
    namespace  Script
     Scripting API.
     
    namespace  ScriptableType
     
    namespace  Settings
     Application setting management and CLI command parser.
     
    namespace  Stats
     Resource usage statistics.
     
    namespace  System
     System tracking.
     
    namespace  UI
     User interface system.
     

    Classes

    class  AABBTree
     
    class  AnimationComponent
     Plays back Animations. More...
     
    class  AudioComponent
     Plays back Sounds. More...
     
    class  Component
     Wrapper for an EntityComponent pointer. More...
     
    class  ControllerComponent
     Provides an API for character controllers. More...
     
    class  Crate
     3D Model with a rigidbody attached to it. More...
     
    class  DecalComponent
     Projects decals onto the scene. More...
     
    class  Decoration
     3D Model with an AnimationComponent attached to it. More...
     
    class  DiskReader
     
    class  DiskWriter
     
    struct  Edge
     
    class  Entity
     Entity base class. More...
     
    class  EntityComponent
     Component base class. More...
     
    struct  EntityTypeInfo
     
    struct  Event
     Event data. More...
     
    class  EventListener
     Smart wrapper class for Event listeners. More...
     
    struct  File
     Very fast file reader/writer. More...
     
    class  FileReader
     
    class  FileReaderParser
     
    struct  FileSource
     
    class  FileWriter
     
    class  FileWriterParser
     
    class  FPSControllerComponent
     Implementation of an FPS-style character controller. More...
     
    class  Graph
     
    class  Hashmap
     
    class  Light
     LightComponent wrapper. More...
     
    class  LightComponent
     Provides a real-time illumination for the scene. More...
     
    struct  ListenerInfo
     
    class  Marker
     Functionally inert. More...
     
    struct  Message
     Message data. More...
     
    class  Navmesh
     Not fully implemented yet. More...
     
    struct  NavmeshNode
     
    struct  Node
     
    class  Octree
     
    class  ParticleComponent
     Provides amusing graphical effects. More...
     
    class  Path
     Base class for graphs. More...
     
    struct  PathEdgeInfo
     
    class  PathFollower
     Point constrained to a Path. More...
     
    class  PhysicsComponent
     Rigidbody wrapper. More...
     
    class  Player
     ControllerComponent with a PlayerComponent attached to it. More...
     
    class  PlayerComponent
     Translates keyboard/mouse inputs into inputs for ControllerComponent. More...
     
    class  Pool
     
    class  PoolProxy
     
    class  PoolPtr
     
    class  Queue
     Simple queue implementation. More...
     
    class  RaycastControllerComponent
     Implementation of a simple character controller. More...
     
    class  RenderComponent
     Renders a Model. More...
     
    class  Resource
     
    class  ResourceProxy
     
    class  Scriptable
     Provides script language subclassing. More...
     
    struct  SharedEntityData
     Basic Entity parameters. More...
     
    struct  Signal
     Message template. More...
     
    class  SignalTable
     List of Message templates. More...
     
    class  Sound
     AudioComponent wrapper. More...
     
    class  Spinlock
     
    class  SpriteComponent
     Provides amusing graphical effects. More...
     
    class  Stack
     
    class  StackPool
     Allocator. More...
     
    class  StaticWorldObject
     Worldspawn. More...
     
    class  TemplateComponent
     
    class  TextReaderParser
     
    class  TextWriterParser
     
    class  Transition
     Connects WorldCells together. More...
     
    class  Trigger
     TriggerComponent wrapper. More...
     
    class  TriggerComponent
     Trigger wrapper. More...
     
    struct  UID
     Interned string type. More...
     
    class  Value
     Generic, type-safe union. More...
     
    class  ValueArray
     
    class  ValuePtr
     
    struct  WorldCell
     World streaming unit. More...
     

    Typedefs

    typedef void(* collision_callback) (TriggerComponent *, Physics::Collision)
     
    typedef bool(* filter_callback) (TriggerComponent *, PhysicsComponent *)
     
    typedef uint32_t id_t
     
    typedef Entity *(* entity_make) (const SharedEntityData &, const ValueArray &)
     
    typedef void(* entity_clear) (Entity *)
     
    typedef uint16_t event_t
     
    typedef uint32_t listener_t
     
    typedef Value value_t
     
    typedef glm::vec3 vec3
     
    typedef glm::quat quat
     
    typedef glm::mat2 mat2
     
    typedef glm::mat4 mat4
     
    typedef glm::vec4 vec4
     
    typedef glm::vec2 vec2
     
    typedef glm::ivec3 ivec3
     
    typedef glm::ivec4 ivec4
     
    typedef glm::uvec3 uvec3
     
    typedef glm::uvec4 uvec4
     
    typedef uint32_t message_t
     
    typedef uint32_t node_id_t
     
    typedef uint32_t signal_t
     
    typedef UID name_t
     
    typedef ValueArray valuearray_t
     
    template<typename T >
    using PoopProxy = PoolProxy< T >
     

    Enumerations

    enum  { FIELD_MODEL , FIELD_COLLMODEL }
     
    enum  : uint32_t { FLAG_LOCKED = 1 }
     
    enum  { FIELD_FLAGS , FIELD_MODEL , FIELD_ANIMATION }
     
    enum  { FIELD_COLOR , FIELD_DISTANCE , FIELD_DIRECTION , FIELD_EXPONENT }
     
    enum  { SOUND_LOOPING = 1 , SOUND_START_ON_LOAD = 2 }
     
    enum  { FIELD_FLAGS , FIELD_SOUND , FIELD_VOLUME }
     
    enum  { FIELD_MODEL , FIELD_LIGHTMAP }
     
    enum  : uint32_t { TRIGGER_DISABLED = 1 }
     
    enum  { FIELD_FLAGS , FIELD_COLLISION_MASK , FIELD_MODEL }
     
    enum class  Severity {
      INFO , WARNING , ERROR , CRITICAL_ERROR ,
      DEFAULT
    }
     
    enum  PathType {
      PATH_STRAIGHT , PATH_LEFT , PATH_RIGHT , PATH_LINEAR ,
      PATH_CURVE
    }
     
    enum  Type : uint32_t {
      TYPE_UNDEFINED , TYPE_BOOL , TYPE_NAME , TYPE_STRING ,
      TYPE_INT8 , TYPE_INT16 , TYPE_INT32 , TYPE_UINT8 ,
      TYPE_UINT16 , TYPE_UINT32 , TYPE_FLOAT32 , TYPE_VEC2 ,
      TYPE_VEC3 , TYPE_VEC4 , TYPE_QUAT
    }
     Type enumeration for serialization, etc. More...
     
    enum class  FileStatus { IO_ERROR , READY }
     
    enum class  FileMedium { DISK , USER , ARCHIVE , HTTP }
     

    Functions

    id_t GenerateID ()
     Generates a unique ID number. More...
     
    uint32_t GetTick ()
     Returns the current tick. More...
     
    uint32_t GetFrame ()
     Returns the current frame. More...
     
    uint32_t GetDeltaTick ()
     Returns the tick delta. More...
     
    double GetTickTime ()
     Same as GetFrameTime() More...
     
    double GetFrameTime ()
     Returns the time at the start of the current frame. More...
     
    float GetDeltaTime ()
     Returns the time passed between frames. More...
     
    const char * GetVersion ()
     Returns the version identifier of the runtime. More...
     
    void SetSystemLoggingSeverity (System::system_t system, Severity min_severity)
     Sets the logging severity filter. More...
     
    void SetDisplayLogCallback (void(*callback)(int, const char *))
     Sets the display log callback. More...
     
    void SetConsoleLogCallback (void(*callback)(int, const char *))
     Sets the console log callback. More...
     
    void SetDisplayLogCallback (void(int, const char *))
     
    void SetConsoleLogCallback (void(int, const char *))
     
    template<typename... Args>
    void Log (Severity severity, System::system_t system, const std::string_view &format, Args &&... args)
     
    template<typename... Args>
    void Log (System::system_t system, const std::string_view &format, Args &&... args)
     
    template<typename... Args>
    void Log (const std::string_view &format, Args &&... args)
     
    template<typename... Args>
    void DisplayLog (int time, const std::string_view &format, Args &&... args)
     
    void QuatLookAt (quat &quaternion, const vec3 &from, const vec3 &to)
     Rotates a quaternion to face a point. More...
     
    void ProjectLine (vec3 &point, const vec3 &from, const vec3 &to)
     Projects a point on a line. More...
     
    vec3 RayTriangleIntersection (vec3 ray_pos, vec3 ray_dir, vec3 point1, vec3 point2, vec3 point3)
     Finds the intersection between a ray and a triangle. More...
     
    vec3 MergeAABBMin (vec3 a, vec3 b)
     Merges the min component of an AABB. More...
     
    vec3 MergeAABBMax (vec3 a, vec3 b)
     Merges the max component of an AABB. More...
     
    void RotateAABB (vec3 &min, vec3 &max, quat rotation)
     Rotates an AABB box by the given rotation. More...
     
    void RotateAABB (vec3 &min, vec3 &max, mat4 rotation)
     
    mat4 PositionRotationToMatrix (const vec3 &position, const quat &rotation)
     Generates a transform matrix. More...
     
    mat4 PositionRotationScaleToMatrix (const vec3 &position, const quat &rotation, const vec3 &scale)
     Generates a transform matrix. More...
     
    const vec3 DIRECTION_FORWARD (0.0f, 0.0f, -1.0f)
     
    const vec3 DIRECTION_SIDE (1.0f, 0.0f, 0.0f)
     
    const vec3 DIRECTION_UP (0.0f, 1.0f, 0.0f)
     
    const vec3 IDENTITY_POSITION (0.0f, 0.0f, 0.0f)
     
    const quat IDENTITY_ROTATION (1.0f, 0.0f, 0.0f, 0.0f)
     
    const vec3 IDENTITY_SCALE (1.0f, 1.0f, 1.0f)
     
    const char * TypeToString (Type type)
     Converts type enum to string. More...
     

    Variables

    const uint32_t MAX_MATERIAL_TYPES = 20
     
    const uint32_t MAX_VERTEX_FORMATS = 20
     
    const uint32_t MAX_VERTEX_SHADERS = 20
     
    const uint32_t MAX_FRAGMENT_SHADERS = 20
     
    const uint32_t MAX_LINKED_SHADERS = 40
     
    const float TICK_RATE = 1.0f / 60.0f
     
    const float CAMERA_MULTIPLIER = 1.0f / 8.0f
     
    const float PHYSICS_GROUND_PLANE = -9.0f
     
    const float PHYSICS_GRAVITY = -9.8f
     
    const uint32_t RESOURCE_LIMIT_SOUND = 100
     
    const uint32_t RESOURCE_LIMIT_MODEL = 100
     
    const uint32_t RESOURCE_LIMIT_PATH = 100
     
    const uint32_t RESOURCE_LIMIT_COLLISION_MODEL = 500
     
    const uint32_t RESOURCE_LIMIT_MATERIAL = 500
     
    const uint32_t RESOURCE_LIMIT_SPRITE = 500
     
    const uint32_t RESOURCE_LIMIT_LIGHT_GRAPH = 250
     
    const uint32_t RESOURCE_LIMIT_SOUND_GRAPH = 250
     
    const uint32_t COMPONENT_LIMIT_ANIMATION = 50
     
    const uint32_t COMPONENT_LIMIT_AUDIO = 150
     
    const uint32_t COMPONENT_LIMIT_CONTROLLER = 25
     
    const uint32_t COMPONENT_LIMIT_LIGHT = 250
     
    const uint32_t COMPONENT_LIMIT_PARTICLE = 100
     
    const uint32_t COMPONENT_LIMIT_PHYSICS = 500
     
    const uint32_t COMPONENT_LIMIT_PLAYER = 5
     
    const uint32_t COMPONENT_LIMIT_RENDER = 1000
     
    const uint32_t COMPONENT_LIMIT_SPRITE = 100
     
    const uint32_t COMPONENT_LIMIT_DECAL = 100
     
    const uint32_t COMPONENT_LIMIT_TRIGGER = 50
     
    const size_t PATH_LIMIT = 200
     
    const size_t SYSTEM_LIMIT = 128
     
    const uint32_t SCRIPTABLE_ENTITY_TYPE_LIMIT = 50
     
    const uint32_t ENTITY_TYPE_LIMIT = 50
     
    const uint32_t RESOURCE_LOADER_QUEUE_LIMIT = 1000
     
    const uint32_t RESOURCE_LOADER_REQUEST_LIMIT = 1750
     
    const uint32_t ENTITY_LIMIT = 5000
     
    const uint32_t NAMED_ENTITY_LIMIT = 500
     
    const uint32_t LANUGAGE_STRING_CHARACTER_LIMIT = 10000
     
    const uint32_t LANGUAGE_STRING_LIMIT = 500
     
    const uint32_t MESSAGE_QUEUE_LIMIT = 500
     
    const uint32_t MESSAGE_PRIORITY_QUEUE_LIMIT = 250
     
    const uint32_t MESSAGE_DATA_LIMIT = 2000
     
    const uint32_t MESSAGE_TYPE_LIMIT = 100
     
    const uint32_t SIGNAL_TYPE_LIMIT = 100
     
    const uint32_t WORLDCELL_TRANSITION_LIMIT = 250
     
    const uint32_t KEYBOARDACTION_LIMIT = 100
     
    const uint32_t UID_CHARACTER_LIMIT = 20000
     
    const uint32_t UID_LIMIT = 2000
     
    const uint32_t WORLDCELL_LIMIT = 250
     
    const uint32_t RIGIDBODY_LIMIT = 500
     
    const uint32_t EXT_KITCHENSINK_ANIMATIONTABLE_LIMIT = 100
     
    const uint32_t EXT_KITCHENSINK_SOUNDTABLE_LIMIT = 100
     
    const float collision_width = 0.35f
     
    const float collision_height = 1.85f
     
    const float collision_height_crouch = 0.5f
     
    const uint32_t collision_group = Physics::COLL_PLAYER
     
    const size_t MAX_EVENT_TYPES = 100
     

    Detailed Description

    Serialization, i.e.

    saving application state is not implemented yet.

    I will probably get around to it sometime.

    Typedef Documentation

    ◆ collision_callback

    typedef void(* tram::collision_callback) (TriggerComponent *, Physics::Collision)

    ◆ entity_clear

    typedef void(* tram::entity_clear) (Entity *)

    ◆ entity_make

    typedef Entity *(* tram::entity_make) (const SharedEntityData &, const ValueArray &)

    ◆ event_t

    typedef uint16_t tram::event_t

    ◆ filter_callback

    typedef bool(* tram::filter_callback) (TriggerComponent *, PhysicsComponent *)

    ◆ id_t

    typedef uint32_t tram::id_t

    ◆ ivec3

    typedef glm::ivec3 tram::ivec3

    ◆ ivec4

    typedef glm::ivec4 tram::ivec4

    ◆ listener_t

    typedef uint32_t tram::listener_t

    ◆ mat2

    typedef glm::mat2 tram::mat2

    ◆ mat4

    typedef glm::mat4 tram::mat4

    ◆ message_t

    typedef uint32_t tram::message_t

    ◆ name_t

    typedef UID tram::name_t

    ◆ node_id_t

    typedef uint32_t tram::node_id_t

    ◆ PoopProxy

    template<typename T >
    using tram::PoopProxy = typedef PoolProxy<T>

    ◆ quat

    typedef glm::quat tram::quat

    ◆ signal_t

    typedef uint32_t tram::signal_t

    ◆ uvec3

    typedef glm::uvec3 tram::uvec3

    ◆ uvec4

    typedef glm::uvec4 tram::uvec4

    ◆ value_t

    ◆ valuearray_t

    ◆ vec2

    typedef glm::vec2 tram::vec2

    ◆ vec3

    typedef glm::vec3 tram::vec3

    ◆ vec4

    typedef glm::vec4 tram::vec4

    Enumeration Type Documentation

    ◆ anonymous enum

    anonymous enum
    Enumerator
    FIELD_FLAGS 
    FIELD_MODEL 
    FIELD_ANIMATION 

    ◆ anonymous enum

    anonymous enum
    Enumerator
    FIELD_COLOR 
    FIELD_DISTANCE 
    FIELD_DIRECTION 
    FIELD_EXPONENT 

    ◆ anonymous enum

    anonymous enum
    Enumerator
    SOUND_LOOPING 
    SOUND_START_ON_LOAD 

    ◆ anonymous enum

    anonymous enum
    Enumerator
    FIELD_FLAGS 
    FIELD_SOUND 
    FIELD_VOLUME 

    ◆ anonymous enum

    anonymous enum
    Enumerator
    FIELD_MODEL 
    FIELD_LIGHTMAP 

    ◆ anonymous enum

    anonymous enum : uint32_t
    Enumerator
    TRIGGER_DISABLED 

    ◆ anonymous enum

    anonymous enum
    Enumerator
    FIELD_FLAGS 
    FIELD_COLLISION_MASK 
    FIELD_MODEL 

    ◆ anonymous enum

    anonymous enum
    Enumerator
    FIELD_MODEL 
    FIELD_COLLMODEL 

    ◆ anonymous enum

    anonymous enum : uint32_t
    Enumerator
    FLAG_LOCKED 

    ◆ FileMedium

    enum class tram::FileMedium
    strong
    Enumerator
    DISK 
    USER 
    ARCHIVE 
    HTTP 

    ◆ FileStatus

    enum class tram::FileStatus
    strong
    Enumerator
    IO_ERROR 
    READY 

    ◆ PathType

    Enumerator
    PATH_STRAIGHT 
    PATH_LEFT 
    PATH_RIGHT 
    PATH_LINEAR 
    PATH_CURVE 

    ◆ Severity

    enum class tram::Severity
    strong
    Enumerator
    INFO 
    WARNING 
    ERROR 
    CRITICAL_ERROR 
    DEFAULT 

    ◆ Type

    enum tram::Type : uint32_t

    Type enumeration for serialization, etc.

    Enumerator
    TYPE_UNDEFINED 
    TYPE_BOOL 
    TYPE_NAME 
    TYPE_STRING 
    TYPE_INT8 
    TYPE_INT16 
    TYPE_INT32 
    TYPE_UINT8 
    TYPE_UINT16 
    TYPE_UINT32 
    TYPE_FLOAT32 
    TYPE_VEC2 
    TYPE_VEC3 
    TYPE_VEC4 
    TYPE_QUAT 

    Function Documentation

    ◆ DIRECTION_FORWARD()

    const vec3 tram::DIRECTION_FORWARD ( 0.  0f,
    0.  0f,
    -1.  0f 
    )

    ◆ DIRECTION_SIDE()

    const vec3 tram::DIRECTION_SIDE ( 1.  0f,
    0.  0f,
    0.  0f 
    )

    ◆ DIRECTION_UP()

    const vec3 tram::DIRECTION_UP ( 0.  0f,
    1.  0f,
    0.  0f 
    )

    ◆ DisplayLog()

    template<typename... Args>
    void tram::DisplayLog ( int  time,
    const std::string_view &  format,
    Args &&...  args 
    )

    ◆ GenerateID()

    id_t tram::GenerateID ( )

    Generates a unique ID number.

    ◆ GetDeltaTick()

    uint32_t tram::GetDeltaTick ( )

    Returns the tick delta.

    If multiple ticks have occured between calls to Core::Update(), this value will reflect that.

    ◆ GetDeltaTime()

    float tram::GetDeltaTime ( )

    Returns the time passed between frames.

    This value changes only when Core::Update() is called.

    Returns
    Time, in seconds, that has passed between the start of the previous and the start of the current frame.

    ◆ GetFrame()

    uint32_t tram::GetFrame ( )

    Returns the current frame.

    Returns
    The number of times Core::Update() has been called.

    ◆ GetFrameTime()

    double tram::GetFrameTime ( )

    Returns the time at the start of the current frame.

    This value changes only when Core::Update() is called.

    Returns
    Time, in seconds, since the application was started.

    ◆ GetTick()

    uint32_t tram::GetTick ( )

    Returns the current tick.

    This value gets incremented at a rate of 60 ticks per second.

    Note
    Tick rate of 60 ticks per second is only the default. The actual value might have been changed in the runtime configuration.
    Returns
    Count of ticks since the application was started.

    ◆ GetTickTime()

    double tram::GetTickTime ( )

    Same as GetFrameTime()

    ◆ GetVersion()

    const char * tram::GetVersion ( )

    Returns the version identifier of the runtime.

    ◆ IDENTITY_POSITION()

    const vec3 tram::IDENTITY_POSITION ( 0.  0f,
    0.  0f,
    0.  0f 
    )

    ◆ IDENTITY_ROTATION()

    const quat tram::IDENTITY_ROTATION ( 1.  0f,
    0.  0f,
    0.  0f,
    0.  0f 
    )

    ◆ IDENTITY_SCALE()

    const vec3 tram::IDENTITY_SCALE ( 1.  0f,
    1.  0f,
    1.  0f 
    )

    ◆ Log() [1/3]

    template<typename... Args>
    void tram::Log ( const std::string_view &  format,
    Args &&...  args 
    )

    ◆ Log() [2/3]

    template<typename... Args>
    void tram::Log ( Severity  severity,
    System::system_t  system,
    const std::string_view &  format,
    Args &&...  args 
    )

    ◆ Log() [3/3]

    template<typename... Args>
    void tram::Log ( System::system_t  system,
    const std::string_view &  format,
    Args &&...  args 
    )

    ◆ MergeAABBMax()

    vec3 tram::MergeAABBMax ( vec3  a,
    vec3  b 
    )

    Merges the max component of an AABB.

    ◆ MergeAABBMin()

    vec3 tram::MergeAABBMin ( vec3  a,
    vec3  b 
    )

    Merges the min component of an AABB.

    ◆ PositionRotationScaleToMatrix()

    mat4 tram::PositionRotationScaleToMatrix ( const vec3 position,
    const quat rotation,
    const vec3 scale 
    )

    Generates a transform matrix.

    ◆ PositionRotationToMatrix()

    mat4 tram::PositionRotationToMatrix ( const vec3 position,
    const quat rotation 
    )

    Generates a transform matrix.

    ◆ ProjectLine()

    void tram::ProjectLine ( vec3 point,
    const vec3 from,
    const vec3 to 
    )

    Projects a point on a line.

    Parameters
    [in,out]pointPoint that will be projected.
    [in]fromFirst endpoint of the line.
    [in]toSecond endpoint of the line.

    ◆ QuatLookAt()

    void tram::QuatLookAt ( quat quaternion,
    const vec3 from,
    const vec3 to 
    )

    Rotates a quaternion to face a point.

    Useful for pointing objects at things.

    ◆ RayTriangleIntersection()

    vec3 tram::RayTriangleIntersection ( vec3  ray_pos,
    vec3  ray_dir,
    vec3  point1,
    vec3  point2,
    vec3  point3 
    )

    Finds the intersection between a ray and a triangle.

    If the ray intersects the triangle, the returned vector will be the 3D coordinates of the intersection. If the ray does not intersect the triangle, the function will return a vector with all of its components set to the floating-point INFINITY.

    Parameters
    ray_posRay origin, 3D coordinate.
    ray_dirRay direction, normal vector. Needs to be normalized.
    point1,point2,point3Triangle vertex coordinates.

    ◆ RotateAABB() [1/2]

    void tram::RotateAABB ( vec3 min,
    vec3 max,
    mat4  rotation 
    )

    ◆ RotateAABB() [2/2]

    void tram::RotateAABB ( vec3 min,
    vec3 max,
    quat  rotation 
    )

    Rotates an AABB box by the given rotation.

    ◆ SetConsoleLogCallback() [1/2]

    void tram::SetConsoleLogCallback ( void(*)(int, const char *)  callback)

    Sets the console log callback.

    Whenever a message is written to console, it will alos be passed to the console log callback.

    ◆ SetConsoleLogCallback() [2/2]

    void tram::SetConsoleLogCallback ( void(int, const char *)  )

    ◆ SetDisplayLogCallback() [1/2]

    void tram::SetDisplayLogCallback ( void(*)(int, const char *)  callback)

    Sets the display log callback.

    When a message is logged by calling DisplayLog(), it will be formatted and then the result will be passed in to the display log callback.

    ◆ SetDisplayLogCallback() [2/2]

    void tram::SetDisplayLogCallback ( void(int, const char *)  )

    ◆ SetSystemLoggingSeverity()

    void tram::SetSystemLoggingSeverity ( System::system_t  system,
    Severity  min_severity 
    )

    Sets the logging severity filter.

    Parameters
    systemSystem for which the filter will apply.
    min_severityThe lowest severity which the filter will let through All lower severities will be filtered out.

    ◆ TypeToString()

    const char * tram::TypeToString ( Type  type)

    Converts type enum to string.

    Variable Documentation

    ◆ CAMERA_MULTIPLIER

    const float tram::CAMERA_MULTIPLIER = 1.0f / 8.0f

    ◆ collision_group

    const uint32_t tram::collision_group = Physics::COLL_PLAYER

    ◆ collision_height

    const float tram::collision_height = 1.85f

    ◆ collision_height_crouch

    const float tram::collision_height_crouch = 0.5f

    ◆ collision_width

    const float tram::collision_width = 0.35f

    ◆ COMPONENT_LIMIT_ANIMATION

    const uint32_t tram::COMPONENT_LIMIT_ANIMATION = 50

    ◆ COMPONENT_LIMIT_AUDIO

    const uint32_t tram::COMPONENT_LIMIT_AUDIO = 150

    ◆ COMPONENT_LIMIT_CONTROLLER

    const uint32_t tram::COMPONENT_LIMIT_CONTROLLER = 25

    ◆ COMPONENT_LIMIT_DECAL

    const uint32_t tram::COMPONENT_LIMIT_DECAL = 100

    ◆ COMPONENT_LIMIT_LIGHT

    const uint32_t tram::COMPONENT_LIMIT_LIGHT = 250

    ◆ COMPONENT_LIMIT_PARTICLE

    const uint32_t tram::COMPONENT_LIMIT_PARTICLE = 100

    ◆ COMPONENT_LIMIT_PHYSICS

    const uint32_t tram::COMPONENT_LIMIT_PHYSICS = 500

    ◆ COMPONENT_LIMIT_PLAYER

    const uint32_t tram::COMPONENT_LIMIT_PLAYER = 5

    ◆ COMPONENT_LIMIT_RENDER

    const uint32_t tram::COMPONENT_LIMIT_RENDER = 1000

    ◆ COMPONENT_LIMIT_SPRITE

    const uint32_t tram::COMPONENT_LIMIT_SPRITE = 100

    ◆ COMPONENT_LIMIT_TRIGGER

    const uint32_t tram::COMPONENT_LIMIT_TRIGGER = 50

    ◆ ENTITY_LIMIT

    const uint32_t tram::ENTITY_LIMIT = 5000

    ◆ ENTITY_TYPE_LIMIT

    const uint32_t tram::ENTITY_TYPE_LIMIT = 50

    ◆ EXT_KITCHENSINK_ANIMATIONTABLE_LIMIT

    const uint32_t tram::EXT_KITCHENSINK_ANIMATIONTABLE_LIMIT = 100

    ◆ EXT_KITCHENSINK_SOUNDTABLE_LIMIT

    const uint32_t tram::EXT_KITCHENSINK_SOUNDTABLE_LIMIT = 100

    ◆ KEYBOARDACTION_LIMIT

    const uint32_t tram::KEYBOARDACTION_LIMIT = 100

    ◆ LANGUAGE_STRING_LIMIT

    const uint32_t tram::LANGUAGE_STRING_LIMIT = 500

    ◆ LANUGAGE_STRING_CHARACTER_LIMIT

    const uint32_t tram::LANUGAGE_STRING_CHARACTER_LIMIT = 10000

    ◆ MAX_EVENT_TYPES

    const size_t tram::MAX_EVENT_TYPES = 100

    ◆ MAX_FRAGMENT_SHADERS

    const uint32_t tram::MAX_FRAGMENT_SHADERS = 20

    ◆ MAX_LINKED_SHADERS

    const uint32_t tram::MAX_LINKED_SHADERS = 40

    ◆ MAX_MATERIAL_TYPES

    const uint32_t tram::MAX_MATERIAL_TYPES = 20

    ◆ MAX_VERTEX_FORMATS

    const uint32_t tram::MAX_VERTEX_FORMATS = 20

    ◆ MAX_VERTEX_SHADERS

    const uint32_t tram::MAX_VERTEX_SHADERS = 20

    ◆ MESSAGE_DATA_LIMIT

    const uint32_t tram::MESSAGE_DATA_LIMIT = 2000

    ◆ MESSAGE_PRIORITY_QUEUE_LIMIT

    const uint32_t tram::MESSAGE_PRIORITY_QUEUE_LIMIT = 250

    ◆ MESSAGE_QUEUE_LIMIT

    const uint32_t tram::MESSAGE_QUEUE_LIMIT = 500

    ◆ MESSAGE_TYPE_LIMIT

    const uint32_t tram::MESSAGE_TYPE_LIMIT = 100

    ◆ NAMED_ENTITY_LIMIT

    const uint32_t tram::NAMED_ENTITY_LIMIT = 500

    ◆ PATH_LIMIT

    const size_t tram::PATH_LIMIT = 200

    ◆ PHYSICS_GRAVITY

    const float tram::PHYSICS_GRAVITY = -9.8f

    ◆ PHYSICS_GROUND_PLANE

    const float tram::PHYSICS_GROUND_PLANE = -9.0f

    ◆ RESOURCE_LIMIT_COLLISION_MODEL

    const uint32_t tram::RESOURCE_LIMIT_COLLISION_MODEL = 500

    ◆ RESOURCE_LIMIT_LIGHT_GRAPH

    const uint32_t tram::RESOURCE_LIMIT_LIGHT_GRAPH = 250

    ◆ RESOURCE_LIMIT_MATERIAL

    const uint32_t tram::RESOURCE_LIMIT_MATERIAL = 500

    ◆ RESOURCE_LIMIT_MODEL

    const uint32_t tram::RESOURCE_LIMIT_MODEL = 100

    ◆ RESOURCE_LIMIT_PATH

    const uint32_t tram::RESOURCE_LIMIT_PATH = 100

    ◆ RESOURCE_LIMIT_SOUND

    const uint32_t tram::RESOURCE_LIMIT_SOUND = 100

    ◆ RESOURCE_LIMIT_SOUND_GRAPH

    const uint32_t tram::RESOURCE_LIMIT_SOUND_GRAPH = 250

    ◆ RESOURCE_LIMIT_SPRITE

    const uint32_t tram::RESOURCE_LIMIT_SPRITE = 500

    ◆ RESOURCE_LOADER_QUEUE_LIMIT

    const uint32_t tram::RESOURCE_LOADER_QUEUE_LIMIT = 1000

    ◆ RESOURCE_LOADER_REQUEST_LIMIT

    const uint32_t tram::RESOURCE_LOADER_REQUEST_LIMIT = 1750

    ◆ RIGIDBODY_LIMIT

    const uint32_t tram::RIGIDBODY_LIMIT = 500

    ◆ SCRIPTABLE_ENTITY_TYPE_LIMIT

    const uint32_t tram::SCRIPTABLE_ENTITY_TYPE_LIMIT = 50

    ◆ SIGNAL_TYPE_LIMIT

    const uint32_t tram::SIGNAL_TYPE_LIMIT = 100

    ◆ SYSTEM_LIMIT

    const size_t tram::SYSTEM_LIMIT = 128

    ◆ TICK_RATE

    const float tram::TICK_RATE = 1.0f / 60.0f

    ◆ UID_CHARACTER_LIMIT

    const uint32_t tram::UID_CHARACTER_LIMIT = 20000

    ◆ UID_LIMIT

    const uint32_t tram::UID_LIMIT = 2000

    ◆ WORLDCELL_LIMIT

    const uint32_t tram::WORLDCELL_LIMIT = 250

    ◆ WORLDCELL_TRANSITION_LIMIT

    const uint32_t tram::WORLDCELL_TRANSITION_LIMIT = 250
    ================================================ FILE: docs/cppapi/namespacetram_1_1_async.html ================================================ Tramway SDK: tram::Async Namespace Reference
    Tramway SDK v0.1.1
    tram::Async Namespace Reference

    Multi-threading and Resource streaming. More...

    Classes

    struct  ResourceRequest
     

    Enumerations

    enum  RequestNotification { NONE , COMPONENT , CALLBACK }
     

    Functions

    void RequestResource (EntityComponent *requester, Resource *resource)
     Adds a resource to the loading queue. More...
     
    void RequestResource (void(*callback)(void *data), void *data, Resource *resource)
     Adds a resource to the loading queue. More...
     
    void CancelRequest (EntityComponent *requester, Resource *resource)
     Cancels a resource load request. More...
     
    void LoadDependency (Resource *resource)
     Loads a resource from disk, skipping the queue. More...
     
    void LoadResourcesFromDisk ()
     Processes the first resource queue. More...
     
    void LoadResourcesFromMemory ()
     Processes the second resource queue. More...
     
    void FinishResources ()
     Notifies EntityComponents about finished resources. More...
     
    void Init (size_t threads)
     Starts the async resource loader thread. More...
     
    void Yeet ()
     Stops the async resource loader thread. More...
     
    size_t GetWaitingResources ()
     Returns number of resources in queues. More...
     

    Detailed Description

    Multi-threading and Resource streaming.

    Currently Async only does Resource streaming, but we could do other kinds of Async processing in the future too.

    See also
    https://racenis.github.io/tram-sdk/documentation/framework/async.html

    Enumeration Type Documentation

    ◆ RequestNotification

    Enumerator
    NONE 
    COMPONENT 
    CALLBACK 

    Function Documentation

    ◆ CancelRequest()

    void tram::Async::CancelRequest ( EntityComponent requester,
    Resource resource 
    )

    Cancels a resource load request.

    Should be called if the EntityComponent that requested a Resource to be loaded will be destructed before the Resource has finished loading.

    Note
    The resource will be fully loaded anyway, but the requester will not be notified.

    ◆ FinishResources()

    void tram::Async::FinishResources ( )

    Notifies EntityComponents about finished resources.

    ◆ GetWaitingResources()

    size_t tram::Async::GetWaitingResources ( )

    Returns number of resources in queues.

    ◆ Init()

    void tram::Async::Init ( size_t  threads)

    Starts the async resource loader thread.

    Parameters
    Numberof threads for async loading.

    ◆ LoadDependency()

    void tram::Async::LoadDependency ( Resource resource)

    Loads a resource from disk, skipping the queue.

    Shouldn't be used outside of resource LoadFromDisk() methods.

    ◆ LoadResourcesFromDisk()

    void tram::Async::LoadResourcesFromDisk ( )

    Processes the first resource queue.

    If there are any resource loader threads active, this function will not do anything, instead allowing the loader threads to load the resources.

    ◆ LoadResourcesFromMemory()

    void tram::Async::LoadResourcesFromMemory ( )

    Processes the second resource queue.

    Warning
    This function should only be called from the rendering thread.

    ◆ RequestResource() [1/2]

    void tram::Async::RequestResource ( EntityComponent requester,
    Resource resource 
    )

    Adds a resource to the loading queue.

    Parameters
    requesterEntityComponent that will be notified when the resource is loaded. Can be set to nullptr, in which case nothing will be notified.
    requested_resourceThe resource that will be loaded.

    ◆ RequestResource() [2/2]

    void tram::Async::RequestResource ( void(*)(void *data)  callback,
    void *  data,
    Resource resource 
    )

    Adds a resource to the loading queue.

    Parameters
    callbackCallback function which will be called when the resource has been loaded and is ready for use.
    dataData pointer, which will be passed to as a parameter to the callback function.
    requested_resourceThe resource that will be loaded.

    ◆ Yeet()

    void tram::Async::Yeet ( )

    Stops the async resource loader thread.

    ================================================ FILE: docs/cppapi/namespacetram_1_1_audio.html ================================================ Tramway SDK: tram::Audio Namespace Reference
    Tramway SDK v0.1.1
    tram::Audio Namespace Reference

    System for doing audio related stuff. More...

    Namespaces

    namespace  API
     Audio backend API.
     
    namespace  Spatial
     Experimental path tracing audio system.
     

    Classes

    struct  audiobuffer_t
     Audio buffer handle. More...
     
    struct  audiosource_t
     Audio source handle. More...
     
    struct  FilterParameters
     
    class  Sound
     Audio data resource. More...
     
    class  SoundGraph
     

    Functions

    void Init ()
     Starts the Audio system. More...
     
    void Update ()
     Updates the Audio system. More...
     
    void Uninit ()
     
    void SetVolume (float value)
     
    float GetVolume ()
     
    void SetListenerPosition (vec3 position)
     See Audio::API::SetListenerPosition(). More...
     
    void SetListenerOrientation (quat orientation)
     See Audio::API::SetListenerOrientation(). More...
     

    Detailed Description

    System for doing audio related stuff.

    Function Documentation

    ◆ GetVolume()

    float tram::Audio::GetVolume ( )

    ◆ Init()

    void tram::Audio::Init ( )

    Starts the Audio system.

    ◆ SetListenerOrientation()

    void tram::Audio::SetListenerOrientation ( quat  orientation)

    ◆ SetListenerPosition()

    void tram::Audio::SetListenerPosition ( vec3  position)

    ◆ SetVolume()

    void tram::Audio::SetVolume ( float  value)

    ◆ Uninit()

    void tram::Audio::Uninit ( )

    ◆ Update()

    void tram::Audio::Update ( )

    Updates the Audio system.

    ================================================ FILE: docs/cppapi/namespacetram_1_1_audio_1_1_a_p_i.html ================================================ Tramway SDK: tram::Audio::API Namespace Reference
    Tramway SDK v0.1.1
    tram::Audio::API Namespace Reference

    Audio backend API. More...

    Functions

    void Init ()
     
    void Update ()
     
    void Uninit ()
     
    void SetListenerPosition (vec3 position)
     Sets the listener position. More...
     
    void SetListenerOrientation (quat orientation)
     Sets the listener orientation. More...
     
    void SetListenerGain (float gain)
     
    audiobuffer_t MakeAudioBuffer (const int16_t *audio_data, int32_t length, int32_t samples, int32_t channels)
     Creates audio buffers from raw audio data. More...
     
    void RemoveAudioBuffer (audiobuffer_t buffer)
     Deletes audio buffers. More...
     
    audiosource_t MakeAudioSource ()
     Creates an audio source. More...
     
    void SetAudioSourcePitch (audiosource_t source, float pitch)
     Sets the pitch of an audio source. More...
     
    void SetAudioSourceGain (audiosource_t source, float gain)
     Sets the gain of an audio source. More...
     
    void SetAudioSourcePosition (audiosource_t source, vec3 position)
     Sets the position of an audio source. More...
     
    void SetAudioSourceVelocity (audiosource_t source, vec3 velocity)
     Sets the velocity of an audio source. More...
     
    void SetAudioSourceRepeating (audiosource_t source, bool repeating)
     Sets the repetition of an audio source. More...
     
    void SetAudioSourceBuffer (audiosource_t source, audiobuffer_t buffer)
     Sets the buffers that the audio source will play. More...
     
    void PlayAudioSource (audiosource_t source)
     Plays an audio source. More...
     
    void PauseAudioSource (audiosource_t source)
     Pauses the audio source. More...
     
    void StopAudioSource (audiosource_t source)
     Stops the audio source. More...
     
    bool IsAudioSourcePlaying (audiosource_t source)
     Checks if an audio source is playing. More...
     
    void RemoveAudioSource (audiosource_t source)
     Deletes an audio source. More...
     

    Detailed Description

    Audio backend API.

    Function Documentation

    ◆ Init()

    void tram::Audio::API::Init ( )

    ◆ IsAudioSourcePlaying()

    bool tram::Audio::API::IsAudioSourcePlaying ( audiosource_t  source)

    Checks if an audio source is playing.

    Returns
    True if the audio source is playing a sound, false otherwise.

    ◆ MakeAudioBuffer()

    audiobuffer_t tram::Audio::API::MakeAudioBuffer ( const int16_t *  audio_data,
    int32_t  length,
    int32_t  samples,
    int32_t  channels 
    )

    Creates audio buffers from raw audio data.

    Parameters
    audio_dataPointer to the raw audio data, stored as 16 bit PCM.
    lengthLength of the raw audio data, in samples.
    buffer_countCreated buffer count will be stored in this variable.

    ◆ MakeAudioSource()

    audiosource_t tram::Audio::API::MakeAudioSource ( )

    Creates an audio source.

    Returns
    A new audio source handle.

    ◆ PauseAudioSource()

    void tram::Audio::API::PauseAudioSource ( audiosource_t  source)

    Pauses the audio source.

    ◆ PlayAudioSource()

    void tram::Audio::API::PlayAudioSource ( audiosource_t  source)

    Plays an audio source.

    ◆ RemoveAudioBuffer()

    void tram::Audio::API::RemoveAudioBuffer ( audiobuffer_t  buffer)

    Deletes audio buffers.

    ◆ RemoveAudioSource()

    void tram::Audio::API::RemoveAudioSource ( audiosource_t  source)

    Deletes an audio source.

    If you do this, then the audio source handle will become invalid. Call MakeAudioSource() to get a new one.

    ◆ SetAudioSourceBuffer()

    void tram::Audio::API::SetAudioSourceBuffer ( audiosource_t  source,
    audiobuffer_t  buffer 
    )

    Sets the buffers that the audio source will play.

    ◆ SetAudioSourceGain()

    void tram::Audio::API::SetAudioSourceGain ( audiosource_t  source,
    float  gain 
    )

    Sets the gain of an audio source.

    Parameters
    gain1.0f is the regular gain. Halving the value decreases the gain by 6dB.

    ◆ SetAudioSourcePitch()

    void tram::Audio::API::SetAudioSourcePitch ( audiosource_t  source,
    float  pitch 
    )

    Sets the pitch of an audio source.

    Parameters
    pitch1.0f is the regular pitch. Halving the value decreases the pitch by an octave. Doubling the value increases the pitch by an octave.

    ◆ SetAudioSourcePosition()

    void tram::Audio::API::SetAudioSourcePosition ( audiosource_t  source,
    vec3  position 
    )

    Sets the position of an audio source.

    ◆ SetAudioSourceRepeating()

    void tram::Audio::API::SetAudioSourceRepeating ( audiosource_t  source,
    bool  repeating 
    )

    Sets the repetition of an audio source.

    Parameters
    repeatingTrue if the sound repeats after playing, false if it just stops.

    ◆ SetAudioSourceVelocity()

    void tram::Audio::API::SetAudioSourceVelocity ( audiosource_t  source,
    vec3  velocity 
    )

    Sets the velocity of an audio source.

    ◆ SetListenerGain()

    void tram::Audio::API::SetListenerGain ( float  gain)

    ◆ SetListenerOrientation()

    void tram::Audio::API::SetListenerOrientation ( quat  orientation)

    Sets the listener orientation.

    Parameters
    orientationListener orientation. Under normal circumstances, it should be the same as render view rotation.

    ◆ SetListenerPosition()

    void tram::Audio::API::SetListenerPosition ( vec3  position)

    Sets the listener position.

    Parameters
    positionListener position. Under normal circumstances, it should be the same as render view position.

    ◆ StopAudioSource()

    void tram::Audio::API::StopAudioSource ( audiosource_t  source)

    Stops the audio source.

    ◆ Uninit()

    void tram::Audio::API::Uninit ( )

    ◆ Update()

    void tram::Audio::API::Update ( )
    ================================================ FILE: docs/cppapi/namespacetram_1_1_audio_1_1_open_a_l.html ================================================ Tramway SDK: tram::Audio::OpenAL Namespace Reference
    Tramway SDK
    tram::Audio::OpenAL Namespace Reference

    Functions

    void Init ()
     
    void Update ()
     
    void Uninit ()
     
    void SetListenerPosition (const glm::vec3 &position)
     
    void SetListenerOrientation (const glm::quat &orientation)
     
    audiobuffer_tMakeAudioBuffer (const int16_t *audio_data, int32_t length, int32_t samples, int32_t channels, int32_t &buffer_count)
     
    void RemoveAudioBuffer (audiobuffer_t *buffers, int32_t buffer_count)
     
    audiosource_t MakeAudioSource ()
     
    void SetAudioSourcePitch (audiosource_t source, float pitch)
     
    void SetAudioSourceGain (audiosource_t source, float gain)
     
    void SetAudioSourcePosition (audiosource_t source, vec3 position)
     
    void SetAudioSourceVelocity (audiosource_t source, vec3 velocity)
     
    void SetAudioSourceRepeating (audiosource_t source, bool repeating)
     
    void SetAudioSourceBuffer (audiosource_t source, const audiobuffer_t *buffers, int32_t buffer_count)
     
    void PlayAudioSource (audiosource_t source)
     
    void PauseAudioSource (audiosource_t source)
     
    void StopAudioSource (audiosource_t source)
     
    bool IsAudioSourcePlaying (audiosource_t source)
     
    void RemoveAudioSource (audiosource_t source)
     

    Variables

    ALCdevice * sound_device = nullptr
     
    ALCcontext * sound_context = nullptr
     

    Function Documentation

    ◆ Init()

    void tram::Audio::OpenAL::Init ( )

    ◆ IsAudioSourcePlaying()

    bool tram::Audio::OpenAL::IsAudioSourcePlaying ( audiosource_t  source)

    ◆ MakeAudioBuffer()

    audiobuffer_t * tram::Audio::OpenAL::MakeAudioBuffer ( const int16_t *  audio_data,
    int32_t  length,
    int32_t  samples,
    int32_t  channels,
    int32_t &  buffer_count 
    )

    ◆ MakeAudioSource()

    audiosource_t tram::Audio::OpenAL::MakeAudioSource ( )

    ◆ PauseAudioSource()

    void tram::Audio::OpenAL::PauseAudioSource ( audiosource_t  source)

    ◆ PlayAudioSource()

    void tram::Audio::OpenAL::PlayAudioSource ( audiosource_t  source)

    ◆ RemoveAudioBuffer()

    void tram::Audio::OpenAL::RemoveAudioBuffer ( audiobuffer_t buffers,
    int32_t  buffer_count 
    )

    ◆ RemoveAudioSource()

    void tram::Audio::OpenAL::RemoveAudioSource ( audiosource_t  source)

    ◆ SetAudioSourceBuffer()

    void tram::Audio::OpenAL::SetAudioSourceBuffer ( audiosource_t  source,
    const audiobuffer_t buffers,
    int32_t  buffer_count 
    )

    ◆ SetAudioSourceGain()

    void tram::Audio::OpenAL::SetAudioSourceGain ( audiosource_t  source,
    float  gain 
    )

    ◆ SetAudioSourcePitch()

    void tram::Audio::OpenAL::SetAudioSourcePitch ( audiosource_t  source,
    float  pitch 
    )

    ◆ SetAudioSourcePosition()

    void tram::Audio::OpenAL::SetAudioSourcePosition ( audiosource_t  source,
    vec3  position 
    )

    ◆ SetAudioSourceRepeating()

    void tram::Audio::OpenAL::SetAudioSourceRepeating ( audiosource_t  source,
    bool  repeating 
    )

    ◆ SetAudioSourceVelocity()

    void tram::Audio::OpenAL::SetAudioSourceVelocity ( audiosource_t  source,
    vec3  velocity 
    )

    ◆ SetListenerOrientation()

    void tram::Audio::OpenAL::SetListenerOrientation ( const glm::quat &  orientation)

    ◆ SetListenerPosition()

    void tram::Audio::OpenAL::SetListenerPosition ( const glm::vec3 &  position)

    ◆ StopAudioSource()

    void tram::Audio::OpenAL::StopAudioSource ( audiosource_t  source)

    ◆ Uninit()

    void tram::Audio::OpenAL::Uninit ( )

    ◆ Update()

    void tram::Audio::OpenAL::Update ( )

    Variable Documentation

    ◆ sound_context

    ALCcontext* tram::Audio::OpenAL::sound_context = nullptr

    ◆ sound_device

    ALCdevice* tram::Audio::OpenAL::sound_device = nullptr
    ================================================ FILE: docs/cppapi/namespacetram_1_1_audio_1_1_spatial.html ================================================ Tramway SDK: tram::Audio::Spatial Namespace Reference
    Tramway SDK v0.1.1
    tram::Audio::Spatial Namespace Reference

    Experimental path tracing audio system. More...

    Classes

    struct  AudioBuffer
     
    struct  AudioRender
     
    struct  AudioSource
     
    struct  PathExplorationResult
     
    struct  PathFromAudioSource
     
    struct  PathRenderingInfo
     
    struct  PathTracingResult
     

    Enumerations

    enum  AudioSourceFlags : uint16_t { SOURCE_PLAYING = 1 , SOURCE_REPEATING = 2 }
     
    enum  AudioSampleRate : uint16_t { SAMPLERATE_44100 = 1 , SAMPLERATE_22050 = 2 , SAMPLERATE_11025 = 4 }
     

    Functions

    void InitOutput ()
     
    void UpdateOutput ()
     
    void UninitOutput ()
     
    void LockRenderlist ()
     
    void UnlockRenderlist ()
     
    void FindPaths (PathExplorationResult &result, bool metropolis, vec3 position)
     
    void FindPathsMetropolis (PathExplorationResult *exploration, PathTracingResult *result, vec3 position)
     
    void InitExplorationPaths (PathExplorationResult *paths)
     
    void ValidateResult (PathTracingResult &result, vec3 position)
     
    void RenderResult (PathTracingResult &result, vec3 position)
     
    void CheckReverb (PathExplorationResult *paths)
     
    void MakeSomeSourcePaths (PathFromAudioSource &path, vec3 source_position)
     

    Variables

    const size_t PATHS_FOR_RENDERING = 10
     
    const size_t PATHS_FOR_SOURCE = 5
     
    const size_t PATHS_FOR_LISTENER = 5
     
    const size_t BUFFER_COUNT = 1000
     
    const size_t SOURCE_COUNT = 200
     
    const size_t SOURCE_DEPTH_LIMIT = 3
     
    const size_t LISTENER_DEPTH_LIMIT = 6
     
    AudioBuffer audiobuffers [BUFFER_COUNT]
     
    AudioSource audiosources [SOURCE_COUNT]
     
    AudioRender audiorenders [SOURCE_COUNT]
     
    vec3 listener_position
     
    quat listener_orientation
     
    int32_t listener_reverb_delay [5]
     
    float listener_reverb_distance [5]
     
    float listener_reverb_force [5]
     
    float listener_reverb_normalized [5]
     

    Detailed Description

    Experimental path tracing audio system.

    It uses bi-directional path tracing together with Primary Sample Space Metropolis Light Transport algorithm to find paths between the listener and audio sources.

    It then attentuates sounds based on surface reflection absorption and distance, does panning based on the angle between the listener and the last reflection and then convolves the resulting impulse response with the sound being played back by the audio source.

    Sounds pretty bad (needs tweaking), very slow as well (no optimizations).

    I haven't tried recently, but it probably doesn't even compile.

    Todo:

    Make sure that it compiles and do some improvements

    Investigate the possibilities of using hardware accelerated ray-tracing

    I am very poor and can't afford a graphics card, NVIDIA pls sponsor me

    Enumeration Type Documentation

    ◆ AudioSampleRate

    Enumerator
    SAMPLERATE_44100 
    SAMPLERATE_22050 
    SAMPLERATE_11025 

    ◆ AudioSourceFlags

    Enumerator
    SOURCE_PLAYING 
    SOURCE_REPEATING 

    Function Documentation

    ◆ CheckReverb()

    void tram::Audio::Spatial::CheckReverb ( PathExplorationResult paths)

    ◆ FindPaths()

    void tram::Audio::Spatial::FindPaths ( PathExplorationResult result,
    bool  metropolis,
    vec3  position 
    )

    ◆ FindPathsMetropolis()

    void tram::Audio::Spatial::FindPathsMetropolis ( PathExplorationResult exploration,
    PathTracingResult result,
    vec3  position 
    )

    ◆ InitExplorationPaths()

    void tram::Audio::Spatial::InitExplorationPaths ( PathExplorationResult paths)

    ◆ InitOutput()

    void tram::Audio::Spatial::InitOutput ( )

    ◆ LockRenderlist()

    void tram::Audio::Spatial::LockRenderlist ( )

    ◆ MakeSomeSourcePaths()

    void tram::Audio::Spatial::MakeSomeSourcePaths ( PathFromAudioSource path,
    vec3  source_position 
    )

    ◆ RenderResult()

    void tram::Audio::Spatial::RenderResult ( PathTracingResult result,
    vec3  position 
    )

    ◆ UninitOutput()

    void tram::Audio::Spatial::UninitOutput ( )

    ◆ UnlockRenderlist()

    void tram::Audio::Spatial::UnlockRenderlist ( )

    ◆ UpdateOutput()

    void tram::Audio::Spatial::UpdateOutput ( )

    ◆ ValidateResult()

    void tram::Audio::Spatial::ValidateResult ( PathTracingResult result,
    vec3  position 
    )

    Variable Documentation

    ◆ audiobuffers

    AudioBuffer tram::Audio::Spatial::audiobuffers[BUFFER_COUNT]
    extern

    ◆ audiorenders

    AudioRender tram::Audio::Spatial::audiorenders[SOURCE_COUNT]
    extern

    ◆ audiosources

    AudioSource tram::Audio::Spatial::audiosources[SOURCE_COUNT]
    extern

    ◆ BUFFER_COUNT

    const size_t tram::Audio::Spatial::BUFFER_COUNT = 1000

    ◆ LISTENER_DEPTH_LIMIT

    const size_t tram::Audio::Spatial::LISTENER_DEPTH_LIMIT = 6

    ◆ listener_orientation

    quat tram::Audio::Spatial::listener_orientation
    extern

    ◆ listener_position

    vec3 tram::Audio::Spatial::listener_position
    extern

    ◆ listener_reverb_delay

    int32_t tram::Audio::Spatial::listener_reverb_delay[5]
    extern

    ◆ listener_reverb_distance

    float tram::Audio::Spatial::listener_reverb_distance[5]
    extern

    ◆ listener_reverb_force

    float tram::Audio::Spatial::listener_reverb_force[5]
    extern

    ◆ listener_reverb_normalized

    float tram::Audio::Spatial::listener_reverb_normalized[5]
    extern

    ◆ PATHS_FOR_LISTENER

    const size_t tram::Audio::Spatial::PATHS_FOR_LISTENER = 5

    ◆ PATHS_FOR_RENDERING

    const size_t tram::Audio::Spatial::PATHS_FOR_RENDERING = 10

    ◆ PATHS_FOR_SOURCE

    const size_t tram::Audio::Spatial::PATHS_FOR_SOURCE = 5

    ◆ SOURCE_COUNT

    const size_t tram::Audio::Spatial::SOURCE_COUNT = 200

    ◆ SOURCE_DEPTH_LIMIT

    const size_t tram::Audio::Spatial::SOURCE_DEPTH_LIMIT = 3
    ================================================ FILE: docs/cppapi/namespacetram_1_1_core.html ================================================ Tramway SDK: tram::Core Namespace Reference
    Tramway SDK v0.1.1
    tram::Core Namespace Reference

    Functions

    void Init ()
     Initializes the core of the framework. More...
     
    void Update ()
     Updates the core system. More...
     

    Function Documentation

    ◆ Init()

    void tram::Core::Init ( )

    Initializes the core of the framework.

    ◆ Update()

    void tram::Core::Update ( )

    Updates the core system.

    Note
    This should be called only once per update cycle.
    ================================================ FILE: docs/cppapi/namespacetram_1_1_ext.html ================================================ Tramway SDK: tram::Ext Namespace Reference
    Tramway SDK v0.1.1
    tram::Ext Namespace Reference

    Namespaces

    namespace  Camera
     Several different camera implementations.
     
    namespace  Kitchensink
     Extension containing random stuff that doesn't fit in anywhere else.
     
    namespace  Menu
     Menu framework.
     
    namespace  Scripting
     
    ================================================ FILE: docs/cppapi/namespacetram_1_1_ext_1_1_camera.html ================================================ Tramway SDK: tram::Ext::Camera Namespace Reference
    Tramway SDK v0.1.1
    tram::Ext::Camera Namespace Reference

    Several different camera implementations. More...

    Classes

    class  Camera
     Interface API for cameras. More...
     
    class  FirstPersonCamera
     

    Functions

    void Init ()
     
    void Update ()
     

    Variables

    System::system_t CAMERA_SYSTEM = -1u
     
    Cameraselected_camera = nullptr
     
    Settings::Property< float > shake_multiplier = {1.0f, "camerashake", Settings::NONE}
     
    id_t look_at_entity = 0
     
    quat look_at_direction = {1.0f, 0.0f, 0.0f, 0.0f}
     
    const float TILT_SPEED = 0.01f
     
    const float BOB_CHANGE_SPEED = 0.05f
     

    Detailed Description

    Several different camera implementations.

    Function Documentation

    ◆ Init()

    void tram::Ext::Camera::Init ( )

    ◆ Update()

    void tram::Ext::Camera::Update ( )

    Variable Documentation

    ◆ BOB_CHANGE_SPEED

    const float tram::Ext::Camera::BOB_CHANGE_SPEED = 0.05f

    ◆ CAMERA_SYSTEM

    System::system_t tram::Ext::Camera::CAMERA_SYSTEM = -1u

    ◆ look_at_direction

    quat tram::Ext::Camera::look_at_direction = {1.0f, 0.0f, 0.0f, 0.0f}

    ◆ look_at_entity

    id_t tram::Ext::Camera::look_at_entity = 0

    ◆ selected_camera

    Camera* tram::Ext::Camera::selected_camera = nullptr

    ◆ shake_multiplier

    float tram::Ext::Camera::shake_multiplier = {1.0f, "camerashake", Settings::NONE}

    ◆ TILT_SPEED

    const float tram::Ext::Camera::TILT_SPEED = 0.01f
    ================================================ FILE: docs/cppapi/namespacetram_1_1_ext_1_1_design.html ================================================ Tramway SDK: tram::Ext::Design Namespace Reference
    Tramway SDK
    tram::Ext::Design Namespace Reference

    Classes

    class  Breakable
     
    class  Button
     Essentially a func_door. More...
     
    class  DebugShape
     
    class  DebugText
     
    struct  EntityChildren
     
    class  Pickup
     
    class  SoundTable
     Maps actions to sounds. More...
     
    class  Train
     
    class  TriggerAutosave
     
    class  TriggerHurt
     
    class  TriggerMultiple
     
    class  TriggerOnce
     
    class  TriggerPlayerMovement
     
    class  TriggerPush
     
    class  TriggerRemove
     
    class  TriggerTeleport
     
    class  Water
     

    Enumerations

    enum  {
      BUTTON_FIELD_FLAGS , BUTTON_FIELD_MODEL , BUTTON_FIELD_LIGHTMAP , BUTTON_FIELD_ORIGIN ,
      BUTTON_FIELD_DIRECTION , BUTTON_FIELD_SPEED , BUTTON_FIELD_PAUSE , BUTTON_FIELD_DISTANCE ,
      BUTTON_FIELD_SOUND , BUTTON_FIELD_PARENT , BUTTON_FIELD_LAST
    }
     
    enum  {
      BUTTON_FLAG_ROTARY = 1 , BUTTON_FLAG_MOMENTARY = 2 , BUTTON_FLAG_TOGGLE = 4 , BUTTON_FLAG_LOCKED = 8 ,
      BUTTON_FLAG_PUSHED = 16
    }
     
    enum  {
      BUTTON_STATE_NADIR_WAITING , BUTTON_STATE_NADIR_READY , BUTTON_STATE_RISING , BUTTON_STATE_ZENITH_WAITING ,
      BUTTON_STATE_ZENITH_READY , BUTTON_STATE_LOWERING
    }
     
    enum  SoundAction {
      SOUND_OPEN , SOUND_CLOSE , SOUND_LOCKED , SOUND_END_OPEN ,
      SOUND_END_CLOSE , SOUND_WALK_ON , SOUND_JUMP_ON , SOUND_HIT
    }
     

    Functions

    void AddChild (name_t parent, id_t child)
     
    void UpdateHierarchy (id_t parent_id)
     

    Variables

    Hashmap< EntityChildrenhierarchy_map ("hierarchy_map", 200)
     

    Enumeration Type Documentation

    ◆ anonymous enum

    anonymous enum
    Enumerator
    BUTTON_FIELD_FLAGS 
    BUTTON_FIELD_MODEL 
    BUTTON_FIELD_LIGHTMAP 
    BUTTON_FIELD_ORIGIN 
    BUTTON_FIELD_DIRECTION 
    BUTTON_FIELD_SPEED 
    BUTTON_FIELD_PAUSE 
    BUTTON_FIELD_DISTANCE 
    BUTTON_FIELD_SOUND 
    BUTTON_FIELD_PARENT 
    BUTTON_FIELD_LAST 

    ◆ anonymous enum

    anonymous enum
    Enumerator
    BUTTON_FLAG_ROTARY 
    BUTTON_FLAG_MOMENTARY 
    BUTTON_FLAG_TOGGLE 
    BUTTON_FLAG_LOCKED 
    BUTTON_FLAG_PUSHED 

    ◆ anonymous enum

    anonymous enum
    Enumerator
    BUTTON_STATE_NADIR_WAITING 
    BUTTON_STATE_NADIR_READY 
    BUTTON_STATE_RISING 
    BUTTON_STATE_ZENITH_WAITING 
    BUTTON_STATE_ZENITH_READY 
    BUTTON_STATE_LOWERING 

    ◆ SoundAction

    Enumerator
    SOUND_OPEN 
    SOUND_CLOSE 
    SOUND_LOCKED 
    SOUND_END_OPEN 
    SOUND_END_CLOSE 
    SOUND_WALK_ON 
    SOUND_JUMP_ON 
    SOUND_HIT 

    Function Documentation

    ◆ AddChild()

    void tram::Ext::Design::AddChild ( name_t  parent,
    id_t  child 
    )

    ◆ UpdateHierarchy()

    void tram::Ext::Design::UpdateHierarchy ( id_t  parent_id)

    Variable Documentation

    ◆ hierarchy_map

    Hashmap< EntityChildren > tram::Ext::Design::hierarchy_map("hierarchy_map", 200) ( "hierarchy_map"  ,
    200   
    )
    ================================================ FILE: docs/cppapi/namespacetram_1_1_ext_1_1_kitchensink.html ================================================ Tramway SDK: tram::Ext::Kitchensink Namespace Reference
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink Namespace Reference

    Extension containing random stuff that doesn't fit in anywhere else. More...

    Classes

    class  AIAgent
     
    class  AIPackage
     
    struct  AIVariable
     
    class  AnimationStateComponent
     
    class  AnimationTable
     
    struct  AnimState
     
    struct  AnimStateSpace
     
    struct  AnimStateTransitionDefault
     
    struct  AnimStateTransitionFrom
     
    struct  AnimStateTransitionInto
     
    struct  Attribute
     
    struct  AttributeContainer
     
    class  AttributeInfo
     
    struct  BaseAttribute
     
    struct  BaseFactionRank
     
    class  Breakable
     
    class  Button
     Essentially a func_door. More...
     
    class  Character
     
    class  CharacterClass
     
    struct  CharacterDisposition
     
    class  DebugShape
     
    class  DebugText
     
    struct  DialogAction
     
    struct  DialogCondition
     
    class  DialogController
     
    struct  DialogTopic
     
    struct  Effect
     
    struct  EntityChildren
     
    class  Faction
     
    struct  FactionRank
     
    struct  FactionRelation
     
    struct  InitialAttribute
     
    class  Inventory
     
    struct  InventoryFactoryInfo
     
    class  InventoryManager
     
    class  ItemClass
     
    struct  ItemInstance
     
    class  KitchensinkMenuList
     
    class  ListDialog
     
    class  ListInventory
     
    class  ListInventoryManager
     
    class  ListTrade
     
    class  Pickup
     
    struct  Quest
     
    class  QuestEntity
     
    class  QuestList
     
    struct  QuestTrigger
     
    struct  QuestVariable
     
    class  SoundTable
     Maps actions to sounds. More...
     
    class  Train
     
    class  TriggerAutosave
     
    class  TriggerHurt
     
    class  TriggerMultiple
     
    class  TriggerOnce
     
    class  TriggerPlayerMovement
     
    class  TriggerPush
     
    class  TriggerRemove
     
    class  TriggerTeleport
     
    class  Water
     

    Typedefs

    typedef AIPackage *(* ai_package_constr) (valuearray_t)
     
    typedef void(* item_action_func) (Inventory *, ItemInstance *)
     

    Enumerations

    enum  : int { EFFECT_RAISE_BASE , EFFECT_RAISE_CONSTANT , EFFECT_NEGATE_CHANGE }
     
    enum  DialogType { DIALOG_TOPIC , DIALOG_IMPORT_SINGLE , DIALOG_IMPORT_MULTIPLE }
     
    enum  {
      BUTTON_FIELD_FLAGS , BUTTON_FIELD_MODEL , BUTTON_FIELD_LIGHTMAP , BUTTON_FIELD_ORIGIN ,
      BUTTON_FIELD_DIRECTION , BUTTON_FIELD_SPEED , BUTTON_FIELD_PAUSE , BUTTON_FIELD_DISTANCE ,
      BUTTON_FIELD_SOUND , BUTTON_FIELD_PARENT , BUTTON_FIELD_LAST
    }
     
    enum  {
      BUTTON_FLAG_ROTARY = 1 , BUTTON_FLAG_MOMENTARY = 2 , BUTTON_FLAG_TOGGLE = 4 , BUTTON_FLAG_LOCKED = 8 ,
      BUTTON_FLAG_PUSHED = 16
    }
     
    enum  {
      BUTTON_STATE_NADIR_WAITING , BUTTON_STATE_NADIR_READY , BUTTON_STATE_RISING , BUTTON_STATE_ZENITH_WAITING ,
      BUTTON_STATE_ZENITH_READY , BUTTON_STATE_LOWERING
    }
     
    enum  quest_t : int {
      QUEST_VAR_INVALID , QUEST_VAR_VALUE , QUEST_VAR_OBJECTIVE , QUEST_VAR_VALUE_IS ,
      QUEST_VAR_VALUE_IS_NOT , QUEST_VAR_VALUE_GREATER , QUEST_VAR_VALUE_GREATER_OR_EQUAL , QUEST_VAR_VALUE_LESS ,
      QUEST_VAR_VALUE_LESS_OR_EQUAL , QUEST_VAR_CONDITION_NOT , QUEST_VAR_CONDITION_AND , QUEST_VAR_CONDITION_OR ,
      QUEST_VAR_CONDITION_SCRIPT , QUEST_VAR_ENTITY_ITEM_COUNT , QUEST_TGR_SET_VARIABLE , QUEST_TGR_SET_OBJECTIVE ,
      QUEST_TGR_INCREMENT , QUEST_TGR_SHOW_MESSAGE
    }
     
    enum  SoundAction {
      SOUND_OPEN , SOUND_CLOSE , SOUND_LOCKED , SOUND_END_OPEN ,
      SOUND_END_CLOSE , SOUND_WALK_ON , SOUND_JUMP_ON , SOUND_HIT
    }
     

    Functions

    void InitAI ()
     
    void UpdateAI ()
     
    Hashmap< AttributeContainer * > containers ("Ext::Kitchensink::AttributeContainer Hashmap", ATTRIBUTE_CONTAINER_COUNT)
     
    Hashmap< AttributeInfo * > infos ("Ext::Kitchensink::AttributeInfo Hashmap", ATTRIBUTE_INFO_COUNT)
     
    Hashmap< Faction * > factions ("Ext::Kitchensink::Faction Hashmap", FACTION_COUNT)
     
    Hashmap< CharacterClass * > character_classes ("Ext::Kitchensink::Character Hashmap", CHARACTER_COUNT)
     
    Hashmap< Character * > characters ("Ext::Kitchensink::CharacterClass Hashmap", CLASS_COUNT)
     
    void RecursivelyAppendNextTopic (std::vector< name_t > &topics, name_t appendable)
     
    void AddChild (name_t parent, id_t child)
     
    void UpdateHierarchy (id_t parent_id)
     
    void Init ()
     
    void Update ()
     
    void RegisterRenderEnvironmentMapShortcut ()
     
    void RenderEnvironmentMaps (WorldCell *cell)
     

    Variables

    Hashmap< EntityChildrenhierarchy_map ("hierarchy_map", 200)
     
    uint32_t KITCHENSINK_SYSTEM = -1u
     
    const size_t SEARCH_STRING_LENGTH = 100
     

    Detailed Description

    Extension containing random stuff that doesn't fit in anywhere else.

    Featuring a collection (mostly) unfinished re-usable game mechanics for RPG games, as well as a couple of useful data tools and entities.

    This is where you can find out func_door analog too.

    Typedef Documentation

    ◆ ai_package_constr

    typedef AIPackage *(* tram::Ext::Kitchensink::ai_package_constr) (valuearray_t)

    ◆ item_action_func

    typedef void(* tram::Ext::Kitchensink::item_action_func) (Inventory *, ItemInstance *)

    Enumeration Type Documentation

    ◆ anonymous enum

    anonymous enum : int
    Enumerator
    EFFECT_RAISE_BASE 
    EFFECT_RAISE_CONSTANT 
    EFFECT_NEGATE_CHANGE 

    ◆ anonymous enum

    anonymous enum
    Enumerator
    BUTTON_FIELD_FLAGS 
    BUTTON_FIELD_MODEL 
    BUTTON_FIELD_LIGHTMAP 
    BUTTON_FIELD_ORIGIN 
    BUTTON_FIELD_DIRECTION 
    BUTTON_FIELD_SPEED 
    BUTTON_FIELD_PAUSE 
    BUTTON_FIELD_DISTANCE 
    BUTTON_FIELD_SOUND 
    BUTTON_FIELD_PARENT 
    BUTTON_FIELD_LAST 

    ◆ anonymous enum

    anonymous enum
    Enumerator
    BUTTON_FLAG_ROTARY 
    BUTTON_FLAG_MOMENTARY 
    BUTTON_FLAG_TOGGLE 
    BUTTON_FLAG_LOCKED 
    BUTTON_FLAG_PUSHED 

    ◆ anonymous enum

    anonymous enum
    Enumerator
    BUTTON_STATE_NADIR_WAITING 
    BUTTON_STATE_NADIR_READY 
    BUTTON_STATE_RISING 
    BUTTON_STATE_ZENITH_WAITING 
    BUTTON_STATE_ZENITH_READY 
    BUTTON_STATE_LOWERING 

    ◆ DialogType

    Enumerator
    DIALOG_TOPIC 
    DIALOG_IMPORT_SINGLE 
    DIALOG_IMPORT_MULTIPLE 

    ◆ quest_t

    Enumerator
    QUEST_VAR_INVALID 
    QUEST_VAR_VALUE 
    QUEST_VAR_OBJECTIVE 
    QUEST_VAR_VALUE_IS 
    QUEST_VAR_VALUE_IS_NOT 
    QUEST_VAR_VALUE_GREATER 
    QUEST_VAR_VALUE_GREATER_OR_EQUAL 
    QUEST_VAR_VALUE_LESS 
    QUEST_VAR_VALUE_LESS_OR_EQUAL 
    QUEST_VAR_CONDITION_NOT 
    QUEST_VAR_CONDITION_AND 
    QUEST_VAR_CONDITION_OR 
    QUEST_VAR_CONDITION_SCRIPT 
    QUEST_VAR_ENTITY_ITEM_COUNT 
    QUEST_TGR_SET_VARIABLE 
    QUEST_TGR_SET_OBJECTIVE 
    QUEST_TGR_INCREMENT 
    QUEST_TGR_SHOW_MESSAGE 

    ◆ SoundAction

    Enumerator
    SOUND_OPEN 
    SOUND_CLOSE 
    SOUND_LOCKED 
    SOUND_END_OPEN 
    SOUND_END_CLOSE 
    SOUND_WALK_ON 
    SOUND_JUMP_ON 
    SOUND_HIT 

    Function Documentation

    ◆ AddChild()

    void tram::Ext::Kitchensink::AddChild ( name_t  parent,
    id_t  child 
    )

    ◆ character_classes()

    Hashmap< CharacterClass * > tram::Ext::Kitchensink::character_classes ( "Ext::Kitchensink::Character Hashmap ,
    CHARACTER_COUNT   
    )

    ◆ characters()

    Hashmap< Character * > tram::Ext::Kitchensink::characters ( "Ext::Kitchensink::CharacterClass Hashmap ,
    CLASS_COUNT   
    )

    ◆ containers()

    Hashmap< AttributeContainer * > tram::Ext::Kitchensink::containers ( "Ext::Kitchensink::AttributeContainer Hashmap ,
    ATTRIBUTE_CONTAINER_COUNT   
    )

    ◆ factions()

    Hashmap< Faction * > tram::Ext::Kitchensink::factions ( "Ext::Kitchensink::Faction Hashmap ,
    FACTION_COUNT   
    )

    ◆ infos()

    Hashmap< AttributeInfo * > tram::Ext::Kitchensink::infos ( "Ext::Kitchensink::AttributeInfo Hashmap ,
    ATTRIBUTE_INFO_COUNT   
    )

    ◆ Init()

    void tram::Ext::Kitchensink::Init ( )

    ◆ InitAI()

    void tram::Ext::Kitchensink::InitAI ( )

    ◆ RecursivelyAppendNextTopic()

    void tram::Ext::Kitchensink::RecursivelyAppendNextTopic ( std::vector< name_t > &  topics,
    name_t  appendable 
    )

    ◆ RegisterRenderEnvironmentMapShortcut()

    void tram::Ext::Kitchensink::RegisterRenderEnvironmentMapShortcut ( )

    ◆ RenderEnvironmentMaps()

    void tram::Ext::Kitchensink::RenderEnvironmentMaps ( WorldCell cell)

    ◆ Update()

    void tram::Ext::Kitchensink::Update ( )

    ◆ UpdateAI()

    void tram::Ext::Kitchensink::UpdateAI ( )

    ◆ UpdateHierarchy()

    void tram::Ext::Kitchensink::UpdateHierarchy ( id_t  parent_id)

    Variable Documentation

    ◆ hierarchy_map

    Hashmap< EntityChildren > tram::Ext::Kitchensink::hierarchy_map("hierarchy_map", 200) ( "hierarchy_map"  ,
    200   
    )

    ◆ KITCHENSINK_SYSTEM

    uint32_t tram::Ext::Kitchensink::KITCHENSINK_SYSTEM = -1u

    ◆ SEARCH_STRING_LENGTH

    const size_t tram::Ext::Kitchensink::SEARCH_STRING_LENGTH = 100
    ================================================ FILE: docs/cppapi/namespacetram_1_1_ext_1_1_menu.html ================================================ Tramway SDK: tram::Ext::Menu Namespace Reference
    Tramway SDK v0.1.1
    tram::Ext::Menu Namespace Reference

    Menu framework. More...

    Namespaces

    namespace  Menu
     Menu base interface class.
     

    Classes

    class  Console
     
    class  DebugMenu
     
    class  EntityPicker
     
    class  EntityProperties
     
    class  EventEmit
     
    struct  EventIntercept
     
    struct  Intercept
     
    class  InterceptMenu
     
    class  ListSelection
     
    struct  LogIntercept
     
    class  Menu
     
    struct  MessageIntercept
     
    class  MessageSend
     
    class  Options
     
    class  SettingsMenu
     
    class  SignalMenu
     
    class  StatisticsMenu
     
    class  SystemMenu
     
    class  WorldCellProperties
     

    Functions

    void InitCallbacks ()
     
    void UpdateCallbacks ()
     
    void ToggleMenuState ()
     
    void CloseAll ()
     
    void Init ()
     
    void Update ()
     
    void DebugMenue ()
     
    std::string string_float (float value)
     

    Variables

    std::deque< std::string > console_logs
     
    std::vector< Intercept * > intercepts
     
    font_t FONT_WIDGETS = 0
     
    font_t FONT_TEXT = 0
     
    font_t FONT_TEXT_BOLD = 0
     
    font_t FONT_HEADER = 0
     
    font_t FONT_PIXELART = 0
     
    uint32_t MENU_SYSTEM = -1
     
    DebugMenudebug_menu = nullptr
     
    std::vector< Menu * > menu_stack
     
    std::vector< Menu * > menu_list
     

    Detailed Description

    Menu framework.

    Built on top of the GUI system, this menu framework allows the creation of menus. It also has some pre-built menus, like the debug menu and the system menu.

    Function Documentation

    ◆ CloseAll()

    void tram::Ext::Menu::CloseAll ( )

    ◆ DebugMenue()

    void tram::Ext::Menu::DebugMenue ( )

    ◆ Init()

    void tram::Ext::Menu::Init ( )

    ◆ InitCallbacks()

    void tram::Ext::Menu::InitCallbacks ( )

    ◆ string_float()

    std::string tram::Ext::Menu::string_float ( float  value)

    ◆ ToggleMenuState()

    void tram::Ext::Menu::ToggleMenuState ( )

    ◆ Update()

    void tram::Ext::Menu::Update ( )

    ◆ UpdateCallbacks()

    void tram::Ext::Menu::UpdateCallbacks ( )

    Variable Documentation

    ◆ console_logs

    std::deque<std::string> tram::Ext::Menu::console_logs

    ◆ debug_menu

    DebugMenu* tram::Ext::Menu::debug_menu = nullptr

    ◆ FONT_HEADER

    GUI::font_t tram::Ext::Menu::FONT_HEADER = 0

    ◆ FONT_PIXELART

    GUI::font_t tram::Ext::Menu::FONT_PIXELART = 0

    ◆ FONT_TEXT

    GUI::font_t tram::Ext::Menu::FONT_TEXT = 0

    ◆ FONT_TEXT_BOLD

    GUI::font_t tram::Ext::Menu::FONT_TEXT_BOLD = 0

    ◆ FONT_WIDGETS

    GUI::font_t tram::Ext::Menu::FONT_WIDGETS = 0

    ◆ intercepts

    std::vector<Intercept*> tram::Ext::Menu::intercepts

    ◆ menu_list

    std::vector<Menu*> tram::Ext::Menu::menu_list

    ◆ menu_stack

    std::vector<Menu*> tram::Ext::Menu::menu_stack

    ◆ MENU_SYSTEM

    uint32_t tram::Ext::Menu::MENU_SYSTEM = -1
    ================================================ FILE: docs/cppapi/namespacetram_1_1_ext_1_1_menu_1_1_menu.html ================================================ Tramway SDK: tram::Ext::Menu::Menu Namespace Reference
    Tramway SDK v0.1.1
    tram::Ext::Menu::Menu Namespace Reference

    Menu base interface class. More...

    Detailed Description

    Menu base interface class.

    To implement this interface, implement the Display() method. This method will be called once per frame and needs to draw the menu. Then implement the Layer() method. This method needs to return the layer index of the menu.

    The menu framework will draw only the topmost menu in the menu stack with any given index.

    When you are ready to deploy a menu, create it using new and Push() it on the stack. After that, you can forget it. When it gets popped from the stack, it will be deleted for you.

    ================================================ FILE: docs/cppapi/namespacetram_1_1_ext_1_1_scripting.html ================================================ Tramway SDK: tram::Ext::Scripting Namespace Reference
    Tramway SDK v0.1.1
    tram::Ext::Scripting Namespace Reference

    Namespaces

    namespace  Lua
     Lua bindings for the Script system.
     
    ================================================ FILE: docs/cppapi/namespacetram_1_1_ext_1_1_scripting_1_1_lua.html ================================================ Tramway SDK: tram::Ext::Scripting::Lua Namespace Reference
    Tramway SDK v0.1.1
    tram::Ext::Scripting::Lua Namespace Reference

    Lua bindings for the Script system. More...

    Classes

    class  Lua
     

    Functions

    void Init ()
     
    void Uninit ()
     

    Variables

    const size_t MAX_LUA_FUNCTIONS = 200
     

    Detailed Description

    Lua bindings for the Script system.

    Function Documentation

    ◆ Init()

    void tram::Ext::Scripting::Lua::Init ( )

    ◆ Uninit()

    void tram::Ext::Scripting::Lua::Uninit ( )

    Variable Documentation

    ◆ function

    value_t(* tram::Ext::Scripting::Lua::function) (valuearray_t) ( valuearray_t  ) = nullptr

    ◆ MAX_LUA_FUNCTIONS

    const size_t tram::Ext::Scripting::Lua::MAX_LUA_FUNCTIONS = 200

    ◆ parameters

    std::vector<Type> tram::Ext::Scripting::Lua::parameters
    ================================================ FILE: docs/cppapi/namespacetram_1_1_g_u_i.html ================================================ Tramway SDK: tram::GUI Namespace Reference
    Tramway SDK v0.1.1
    tram::GUI Namespace Reference

    Immediate mode GUI system. More...

    Classes

    struct  FrameObject
     

    Typedefs

    typedef uint32_t font_t
     
    typedef uint32_t glyph_t
     

    Enumerations

    enum  orientation : uint32_t {
      TEXT_LEFT , TEXT_CENTER , TEXT_RIGHT , TEXT_JUSTIFIED ,
      LINE_LOW , LINE_NORMAL , LINE_HIGH , FRAME_LEFT ,
      FRAME_RIGHT , FRAME_TOP , FRAME_BOTTOM , FRAME_LEFT_INV ,
      FRAME_RIGHT_INV , FRAME_TOP_INV , FRAME_BOTTOM_INV , FRAME_INSET ,
      FRAME_CENTER_VERTICAL , FRAME_CENTER_HORIZONTAL
    }
     
    enum  GlyphType { TEXT , WIDGET }
     
    enum  widget : glyph_t {
      WIDGET_TOP_LEFT = 0 , WIDGET_TOP_MIDDLE = 1 , WIDGET_TOP_RIGHT = 2 , WIDGET_MIDDLE_LEFT = 3 ,
      WIDGET_MIDDLE_MIDDLE = 4 , WIDGET_MIDDLE_RIGHT = 5 , WIDGET_BOTTOM_LEFT = 6 , WIDGET_BOTTOM_MIDDLE = 7 ,
      WIDGET_BOTTOM_RIGHT = 8 , WIDGET_LEFT = 0 , WIDGET_MIDDLE = 1 , WIDGET_RIGHT = 2 ,
      WIDGET_BUTTON = 0 , WIDGET_BUTTON_PRESSED = 9 , WIDGET_BUTTON_SELECTED_ENABLED = 18 , WIDGET_BUTTON_SELECTED_DISABLED = 27 ,
      WIDGET_BUTTON_DISABLED = 36 , WIDGET_BUTTON_PRESSED_DISABLED = 45 , WIDGET_WINDOW = 54 , WIDGET_REVERSE_WINDOW = 63 ,
      WIDGET_SELECT_BOX = 72 , WIDGET_SELECT_BOX_PRESSED = 81 , WIDGET_SELECT_BOX_SELECTED = 90 , WIDGET_TEXT_BOX = 99 ,
      WIDGET_TEXT_BOX_DISABLED = 108 , WIDGET_BORDER = 117 , WIDGET_SCROLL_BAR_TRACK_VERTICAL = 126 , WIDGET_SCROLL_BAR_TRACK_HORIZONTAL = 129 ,
      WIDGET_DIVIDER_HORIZONTAL = 132 , WIDGET_DIVIDER_VERTICAL = 135 , WIDGET_SLIDER_TRACK_VERTICAL = 138 , WIDGET_SLIDER_TRACK_HORIZONTAL = 138 ,
      WIDGET_SCROLL_BAR_VERTICAL = 144 , WIDGET_SCROLL_BAR_HORIZONTAL = 147 , WIDGET_TAB = 150 , WIDGET_PROGESS_BAR = 153 ,
      WIDGET_RADIO_BUTTON = 156 , WIDGET_CHECK_BUTTON = 162 , WIDGET_SLIDER_VERTICAL = 168 , WIDGET_SLIDER_HORIZONTAL = 174 ,
      WIDGET_BUTTON_UP = 180 , WIDGET_BUTTON_DOWN = 186 , WIDGET_BUTTON_LEFT = 192 , WIDGET_BUTTON_RIGHT = 198 ,
      WIDGET_BUTTON_EXIT = 204 , WIDGET_BUTTON_HELP = 210 , WIDGET_BUTTON_2_WINDOW = 216 , WIDGET_BUTTON_1_WINDOW = 222 ,
      WIDGET_DEFAULT = 255
    }
     

    Functions

    void SetSelectedText (char *text)
     Sets the text which is selected in a textbox. More...
     
    void SetColor (Render::color_t color, GlyphType type)
     Sets the color. More...
     
    void SetFont (font_t font, GlyphType type)
     Sets the font. More...
     
    void RestoreColor (GlyphType type)
     Restores previous glyph color. More...
     
    void RestoreFont (GlyphType type)
     Restores previous glyph font. More...
     
    void SetGlyphDefaults (Render::color_t color, font_t font, GlyphType type)
     Overrides glyph default colors and fonts. More...
     
    void SetScaling (uint32_t scale)
     Sets the scaling factor. More...
     
    uint32_t GetScaling ()
     Returns the scaling factor. More...
     
    void SetCursorDelayed (UI::CursorType cursor)
     Sets the cursor. More...
     
    void Init ()
     Performs initialization of the GUI system. More...
     
    void UpdateDrawListFonts ()
     Submits registered fonts to the renderer. More...
     
    void Update ()
     Submits all of the glyphs for rendering. More...
     
    font_t RegisterFont (Render::Sprite *sprite)
     Registers a font. More...
     
    void SetGlyph (float x, float y, float z, float w, float h, float tex_x, float tex_y, float tex_w, float tex_h, const vec3 &color, font_t font)
     Adds a glyph to rendering list. More...
     
    uint32_t GlyphWidth (font_t font, glyph_t glyph)
     
    uint32_t GlyphHeight (font_t font, glyph_t glyph)
     
    uint32_t GlyphBorderV (font_t font, glyph_t glyph)
     
    void DrawGlyph (font_t font, glyph_t glyph, const vec3 &color, uint32_t x, uint32_t y, uint32_t w=0, uint32_t h=0)
     
    void Glyph (font_t font, glyph_t glyph)
     Draws a glyph from a font. More...
     
    void DrawBox (font_t font, glyph_t glyph, uint32_t x, uint32_t y, uint32_t w, uint32_t h)
     Draws a glyph box. More...
     
    uint32_t TextWidth (font_t font, const char *text)
     
    void Text (const char *text, uint32_t orientation)
     Draws text on the screen. More...
     
    void DrawBoxHorizontal (font_t font, glyph_t glyph, uint32_t x, uint32_t y, uint32_t w)
     Draws a horizontal bar. More...
     
    void PushFrame (uint32_t x, uint32_t y, uint32_t w, uint32_t h)
     Pushes a frame. More...
     
    void PushFrameRelative (uint32_t orientation, uint32_t offset)
     Pushes a frame releative to the previous. More...
     
    void PopFrame ()
     Removes a frame from the frame stack. More...
     
    void PushFrameRelativeKeepCursor (uint32_t orientation, uint32_t offset, bool keep_x, bool keep_y)
     Pushes a frame, but keeps the cursor in place. More...
     
    void PopFrameKeepCursor (bool keep_x, bool keep_y)
     
    bool CursorOver (uint32_t x, uint32_t y, uint32_t w, uint32_t h)
     
    bool ClickHandled ()
     
    bool ClickHandledLate ()
     
    bool Clicked ()
     
    bool Button (const char *text, bool enabled, uint32_t width)
     Draws a button. More...
     
    bool RadioButton (uint32_t index, uint32_t &selected, const char *text, bool enabled)
     Draws a radio button. More...
     
    bool CheckBox (bool &selected, const char *text, bool enabled)
     Draws a checkbox. More...
     
    bool Slider (float &value, bool enabled, uint32_t width)
     Draws a horizontal slider. More...
     
    void NewLine (uint32_t line)
     Draws a new line. More...
     
    void HorizontalDivider ()
     Draws a horizontal divider. More...
     
    void FillFrame (glyph_t glyph)
     Fills the frame with a glyph. More...
     
    bool TextBox (char *text, uint32_t length, bool enabled, uint32_t w, uint32_t h)
     Draws a textbox. More...
     
    void TextBox (const char *text, uint32_t w, uint32_t h)
     Draws a textbox. More...
     
    void Begin ()
     Begins the GUI commands for the frame. More...
     
    void End ()
     Ends the GUI commands for the frame. More...
     
    void Glyph (glyph_t glyph)
     

    Variables

    uint32_t last_update_frame = 0
     
    bool beginned = false
     
    bool mouse_click_not_handled = true
     
    bool mouse_click_not_handled_late = true
     

    Detailed Description

    Immediate mode GUI system.

    If you don't like it, you can always integrate imgui, but I personally very much prefer this way of building GUIs.

    First you need to register fonts, which are just Sprites. The glyphs are just sprite frame indices. There are some default fonts in the Ext::Menu system, if you don't want to make your own fonts.

    To draw widgets, just call their respective functions once per frame.

    To position the widgets, use the frame pushing and popping functions.

    See also
    https://racenis.github.io/tram-sdk/documentation/framework/gui.html

    Typedef Documentation

    ◆ font_t

    typedef uint32_t tram::GUI::font_t

    ◆ glyph_t

    typedef uint32_t tram::GUI::glyph_t

    Enumeration Type Documentation

    ◆ GlyphType

    Enumerator
    TEXT 
    WIDGET 

    ◆ orientation

    enum tram::GUI::orientation : uint32_t
    Enumerator
    TEXT_LEFT 
    TEXT_CENTER 
    TEXT_RIGHT 
    TEXT_JUSTIFIED 
    LINE_LOW 
    LINE_NORMAL 
    LINE_HIGH 
    FRAME_LEFT 
    FRAME_RIGHT 
    FRAME_TOP 
    FRAME_BOTTOM 
    FRAME_LEFT_INV 
    FRAME_RIGHT_INV 
    FRAME_TOP_INV 
    FRAME_BOTTOM_INV 
    FRAME_INSET 
    FRAME_CENTER_VERTICAL 
    FRAME_CENTER_HORIZONTAL 

    ◆ widget

    Enumerator
    WIDGET_TOP_LEFT 
    WIDGET_TOP_MIDDLE 
    WIDGET_TOP_RIGHT 
    WIDGET_MIDDLE_LEFT 
    WIDGET_MIDDLE_MIDDLE 
    WIDGET_MIDDLE_RIGHT 
    WIDGET_BOTTOM_LEFT 
    WIDGET_BOTTOM_MIDDLE 
    WIDGET_BOTTOM_RIGHT 
    WIDGET_LEFT 
    WIDGET_MIDDLE 
    WIDGET_RIGHT 
    WIDGET_BUTTON 
    WIDGET_BUTTON_PRESSED 
    WIDGET_BUTTON_SELECTED_ENABLED 
    WIDGET_BUTTON_SELECTED_DISABLED 
    WIDGET_BUTTON_DISABLED 
    WIDGET_BUTTON_PRESSED_DISABLED 
    WIDGET_WINDOW 
    WIDGET_REVERSE_WINDOW 
    WIDGET_SELECT_BOX 
    WIDGET_SELECT_BOX_PRESSED 
    WIDGET_SELECT_BOX_SELECTED 
    WIDGET_TEXT_BOX 
    WIDGET_TEXT_BOX_DISABLED 
    WIDGET_BORDER 
    WIDGET_SCROLL_BAR_TRACK_VERTICAL 
    WIDGET_SCROLL_BAR_TRACK_HORIZONTAL 
    WIDGET_DIVIDER_HORIZONTAL 
    WIDGET_DIVIDER_VERTICAL 
    WIDGET_SLIDER_TRACK_VERTICAL 
    WIDGET_SLIDER_TRACK_HORIZONTAL 
    WIDGET_SCROLL_BAR_VERTICAL 
    WIDGET_SCROLL_BAR_HORIZONTAL 
    WIDGET_TAB 
    WIDGET_PROGESS_BAR 
    WIDGET_RADIO_BUTTON 
    WIDGET_CHECK_BUTTON 
    WIDGET_SLIDER_VERTICAL 
    WIDGET_SLIDER_HORIZONTAL 
    WIDGET_BUTTON_UP 
    WIDGET_BUTTON_DOWN 
    WIDGET_BUTTON_LEFT 
    WIDGET_BUTTON_RIGHT 
    WIDGET_BUTTON_EXIT 
    WIDGET_BUTTON_HELP 
    WIDGET_BUTTON_2_WINDOW 
    WIDGET_BUTTON_1_WINDOW 
    WIDGET_DEFAULT 

    Function Documentation

    ◆ Begin()

    void tram::GUI::Begin ( )

    Begins the GUI commands for the frame.

    Pushes the first frame to the frame stack. This function has to be called first, before the End() and the Update() functions. You can call Begin() as much as you want, you just have to call an End() before you can call Begin() again. This should help dealing a bit with the global state that the system has.

    ◆ Button()

    bool tram::GUI::Button ( const char *  text,
    bool  enabled,
    uint32_t  width 
    )

    Draws a button.

    Parameters
    textText of the button.
    enabledIf set to false, the button won't be clickable.
    widthWidth of the button, in pixels.
    Returns
    True if the button was clicked on.

    ◆ CheckBox()

    bool tram::GUI::CheckBox ( bool &  selected,
    const char *  text,
    bool  enabled 
    )

    Draws a checkbox.

    Parameters
    selectedIf set to true, the button will be drawn checked.
    textText of the button.
    enabledIf set to false, the button won't be clickable.
    Returns
    True if clicked on. The modified state of the button will be written out to the selected parameter.

    ◆ Clicked()

    bool tram::GUI::Clicked ( )

    ◆ ClickHandled()

    bool tram::GUI::ClickHandled ( )

    ◆ ClickHandledLate()

    bool tram::GUI::ClickHandledLate ( )

    ◆ CursorOver()

    bool tram::GUI::CursorOver ( uint32_t  x,
    uint32_t  y,
    uint32_t  w,
    uint32_t  h 
    )

    ◆ DrawBox()

    void tram::GUI::DrawBox ( font_t  font,
    glyph_t  glyph,
    uint32_t  x,
    uint32_t  y,
    uint32_t  w,
    uint32_t  h 
    )

    Draws a glyph box.

    Glyph boxes are set up so that the first glyph, i.e. the one that you pass in the glyph parameter is the top-left corner. Then the numerically next glyph is take as the top-middle glpyh, then the top-right. This continues going left-to-right, top-to-bottom until all 9 squares are covered. If you are using a default widget layout font, you can use the enum values WIDGET_WINDOW, WIDGET_REVERSE_WINDOW, WIDGET_BUTTON, WIDGET_SELECT_BOX or WIDGET_BORDER for the glyph index.

    ◆ DrawBoxHorizontal()

    void tram::GUI::DrawBoxHorizontal ( font_t  font,
    glyph_t  glyph,
    uint32_t  x,
    uint32_t  y,
    uint32_t  w 
    )

    Draws a horizontal bar.

    Similar to how DrawBox() is used, except we only have 3 squares, the left, middle and right.

    ◆ DrawGlyph()

    void tram::GUI::DrawGlyph ( font_t  font,
    glyph_t  glyph,
    const vec3 color,
    uint32_t  x,
    uint32_t  y,
    uint32_t  w = 0,
    uint32_t  h = 0 
    )

    ◆ End()

    void tram::GUI::End ( )

    Ends the GUI commands for the frame.

    This has to be called sometime after Begin(), but before Update().

    ◆ FillFrame()

    void tram::GUI::FillFrame ( glyph_t  glyph)

    Fills the frame with a glyph.

    Uses the DrawBox() function internally, so it works just like it, except that it uses the topmost frame to determine the position and sixze of the box.

    ◆ GetScaling()

    uint32_t tram::GUI::GetScaling ( )

    Returns the scaling factor.

    See SetScaling().

    ◆ Glyph() [1/2]

    void tram::GUI::Glyph ( font_t  font,
    glyph_t  glyph 
    )

    Draws a glyph from a font.

    ◆ Glyph() [2/2]

    void tram::GUI::Glyph ( glyph_t  glyph)

    ◆ GlyphBorderV()

    uint32_t tram::GUI::GlyphBorderV ( font_t  font,
    glyph_t  glyph 
    )

    ◆ GlyphHeight()

    uint32_t tram::GUI::GlyphHeight ( font_t  font,
    glyph_t  glyph 
    )

    ◆ GlyphWidth()

    uint32_t tram::GUI::GlyphWidth ( font_t  font,
    glyph_t  glyph 
    )

    ◆ HorizontalDivider()

    void tram::GUI::HorizontalDivider ( )

    Draws a horizontal divider.

    ◆ Init()

    void tram::GUI::Init ( )

    Performs initialization of the GUI system.

    Render system must be initialized first.

    ◆ NewLine()

    void tram::GUI::NewLine ( uint32_t  line)

    Draws a new line.

    Essentially just moves the cursor down a little bit and resets it to the left side of the frame. Sort of like a line break.

    Parameters
    lineLine type. Either LINE_LOW, LINE_NORMAL or LINE_HIGH.

    ◆ PopFrame()

    void tram::GUI::PopFrame ( )

    Removes a frame from the frame stack.

    ◆ PopFrameKeepCursor()

    void tram::GUI::PopFrameKeepCursor ( bool  keep_x,
    bool  keep_y 
    )

    ◆ PushFrame()

    void tram::GUI::PushFrame ( uint32_t  x,
    uint32_t  y,
    uint32_t  w,
    uint32_t  h 
    )

    Pushes a frame.

    The coordinates are in absolute screen cooordinates. This function could be useful for something, I just can't think of anything.

    ◆ PushFrameRelative()

    void tram::GUI::PushFrameRelative ( uint32_t  orientation,
    uint32_t  offset 
    )

    Pushes a frame releative to the previous.

    Check the regulat HTML docs on the website for a graphical description with, i.e. with images, to see how this works. But essentially what this function does, is it takes the previous frame and measures out the offset from the specified orientation and then pushes a new frame with the are from the offset. Initially the first frame is pushed, and it takes up the whole screen. If you wanted to use make the topmost 200px part of the screen a frame, you would set the orientation to FRAME_TOP and offset to 200.

    ◆ PushFrameRelativeKeepCursor()

    void tram::GUI::PushFrameRelativeKeepCursor ( uint32_t  orientation,
    uint32_t  offset,
    bool  keep_x,
    bool  keep_y 
    )

    Pushes a frame, but keeps the cursor in place.

    Identical to PushFrameRelative(), except this function will not reset the cursor to the top-left corner of the frame.

    ◆ RadioButton()

    bool tram::GUI::RadioButton ( uint32_t  index,
    uint32_t &  selected,
    const char *  text,
    bool  enabled 
    )

    Draws a radio button.

    Parameters
    indexIndex of this button.
    selectedIndex of the selected button.
    textText next to the button.
    enableIf set to true, the button won't be clickable
    Returns
    True if the button was clicked on. The new selected button index will be written to the selected parameter.

    ◆ RegisterFont()

    font_t tram::GUI::RegisterFont ( Render::Sprite sprite)

    Registers a font.

    Returns
    Font handle that can be used with all of the GUI widget functions.

    ◆ RestoreColor()

    void tram::GUI::RestoreColor ( GlyphType  type)

    Restores previous glyph color.

    See SetColor().

    ◆ RestoreFont()

    void tram::GUI::RestoreFont ( GlyphType  type)

    Restores previous glyph font.

    See SetFont().

    ◆ SetColor()

    void tram::GUI::SetColor ( Render::color_t  color,
    GlyphType  type 
    )

    Sets the color.

    Pushes color to color stack. Each glyph type gets its own color stack. The previously set color can be restored using RestoreColor(). GlyphType::TEXT will set the text rendering color of the Text() function, as well as the text that is drawn by the RadioButton() and CheckBox() functions, on top of all Button() buttons and in TextBox() textboxes. GlyphType::WIDGET will set the color that will be used when drawing non-text widget glyphs. By default it is Render::COLOR_WHITE. This stack is reset every time the GUI::Begin() function is called. The default values can be overriden with SetGlyphDefaults().

    Parameters
    colorRGB color that will be set. Take a look at the Render system's header or docs to see what kinds of predefined colors are available.
    typeThe type of the glyph that this color will be applied to.

    ◆ SetCursorDelayed()

    void tram::GUI::SetCursorDelayed ( UI::CursorType  cursor)

    Sets the cursor.

    The difference between using this function and the cursor setting function in the UI system, is that this function will only switch the cursor if it has been changed, i.e. it will issue the UI::SetCursor() command only if this function receives a new parameter. This means that GUI widgets can change the cursor, but the it is also possible to change it using the UI function and this function will not override it, except if the cursor is placed over a widget.

    ◆ SetFont()

    void tram::GUI::SetFont ( font_t  font,
    GlyphType  type 
    )

    Sets the font.

    Works the same as SetColor(), except for fonts. A font needs to be registered with RegisterFont() first. Widget fonts need to use the widget font layout to be displayed properly.

    ◆ SetGlyph()

    void tram::GUI::SetGlyph ( float  x,
    float  y,
    float  z,
    float  w,
    float  h,
    float  tex_x,
    float  tex_y,
    float  tex_w,
    float  tex_h,
    const vec3 color,
    font_t  font 
    )

    Adds a glyph to rendering list.

    Triangularizes a glyph from its params and then it get sent off to rendering via the glyph rendering list.

    ◆ SetGlyphDefaults()

    void tram::GUI::SetGlyphDefaults ( Render::color_t  color,
    font_t  font,
    GlyphType  type 
    )

    Overrides glyph default colors and fonts.

    Whenever GUI::Begin() is called, the color and font passed to this function will be set as the color and font used for the glyph drawing functions. If you are using the Ext::Menu extension and its default fonts, you don't need to call this function.

    ◆ SetScaling()

    void tram::GUI::SetScaling ( uint32_t  scale)

    Sets the scaling factor.

    If set to 1, the GUI will be drawn normally. If set to 2, then everything will be drawn twice as large. If set to 3, then everything will be drawn three times as large. I don't recommend going above that.

    ◆ SetSelectedText()

    void tram::GUI::SetSelectedText ( char *  text)

    Sets the text which is selected in a textbox.

    The way the framework remembers which TextBox you have clicked on and are editing is that once a TextBox is clicked on, the framework remembers the pointer of the text that is being edited. The actual TextBox string is updated only when the TextBox() function is called. If you want to deselect any TextBox, call this function with a nullptr.

    ◆ Slider()

    bool tram::GUI::Slider ( float &  value,
    bool  enabled,
    uint32_t  width 
    )

    Draws a horizontal slider.

    Parameters
    valueValue of the slider, between 0.0f and 1.0f.
    enabledIf set to false, the slider won't be draggable.
    widthWidth of the slider, in pixels.
    Returns
    True if the slider was clicked on. The slider's new value will be written out to the value variable.

    ◆ Text()

    void tram::GUI::Text ( const char *  text,
    uint32_t  orientation 
    )

    Draws text on the screen.

    Parameters
    orientationEither TEXT_LEFT, TEXT_CENTER, TEXT_RIGHT or TEXT_JUSTIFIED. The default is TEXT_LEFT.
    textThe text that will drawn to screen.

    ◆ TextBox() [1/2]

    bool tram::GUI::TextBox ( char *  text,
    uint32_t  length,
    bool  enabled,
    uint32_t  w,
    uint32_t  h 
    )

    Draws a textbox.

    Parameters
    textText in the textbox. This will be editable.
    lengthLength of the text buffer.
    enabledIf false, the textbox won't be editable.
    w,hDimensions of the textbox, in pixels.

    ◆ TextBox() [2/2]

    void tram::GUI::TextBox ( const char *  text,
    uint32_t  w,
    uint32_t  h 
    )

    Draws a textbox.

    Essentially identical to the other TextBox() function, except this one accepts a const char* text. This also means that the text in the textbox won't be editable and it will be drawn as disabled.

    ◆ TextWidth()

    uint32_t tram::GUI::TextWidth ( font_t  font,
    const char *  text 
    )

    ◆ Update()

    void tram::GUI::Update ( )

    Submits all of the glyphs for rendering.

    Also updates cursor, if needed by SetCursorDelayed().

    ◆ UpdateDrawListFonts()

    void tram::GUI::UpdateDrawListFonts ( )

    Submits registered fonts to the renderer.

    Variable Documentation

    ◆ beginned

    bool tram::GUI::beginned = false

    ◆ last_update_frame

    uint32_t tram::GUI::last_update_frame = 0

    ◆ mouse_click_not_handled

    bool tram::GUI::mouse_click_not_handled = true

    ◆ mouse_click_not_handled_late

    bool tram::GUI::mouse_click_not_handled_late = true
    ================================================ FILE: docs/cppapi/namespacetram_1_1_language.html ================================================ Tramway SDK: tram::Language Namespace Reference
    Tramway SDK v0.1.1
    tram::Language Namespace Reference

    Localization services. More...

    Functions

    void Load (const char *filename)
     Loads a language file. More...
     
    const char * Get (name_t name)
     Retrieves a string from the loaded language files. More...
     
    char UTF16ToLatin7 (uint16_t code)
     Converts a UTF16 codepoint to a Latin7 codepoint. More...
     

    Detailed Description

    Localization services.

    Provides services for application localization, character re-encoding, translation, etc.

    See also
    https://racenis.github.io/tram-sdk/documentation/framework/language.html

    Function Documentation

    ◆ Get()

    const char * tram::Language::Get ( name_t  name)

    Retrieves a string from the loaded language files.

    ◆ Load()

    void tram::Language::Load ( const char *  filename)

    Loads a language file.

    ◆ UTF16ToLatin7()

    char tram::Language::UTF16ToLatin7 ( uint16_t  code)

    Converts a UTF16 codepoint to a Latin7 codepoint.

    ================================================ FILE: docs/cppapi/namespacetram_1_1_loader.html ================================================ Tramway SDK: tram::Loader Namespace Reference
    Tramway SDK v0.1.1
    tram::Loader Namespace Reference

    WorldCell streaming. More...

    Functions

    void Track (Entity *entity)
     Starts tracking an Entity. More...
     
    void Untrack (Entity *entity)
     Stops tracking a tracked Entity. More...
     
    void Update ()
     Performs WorldCell loading and unloading. More...
     

    Variables

    std::set< id_ttracked_entities
     

    Detailed Description

    WorldCell streaming.

    Provides services for application localization, character re-encoding, translation, etc.

    See also
    https://racenis.github.io/tram-sdk/documentation/framework/loader.html

    Function Documentation

    ◆ Track()

    void tram::Loader::Track ( Entity entity)

    Starts tracking an Entity.

    See Loader::Update().

    ◆ Untrack()

    void tram::Loader::Untrack ( Entity entity)

    Stops tracking a tracked Entity.

    See Loader::Untrack().

    ◆ Update()

    void tram::Loader::Update ( )

    Performs WorldCell loading and unloading.

    Calling this function will apply a constraint to the load status of all WorldCells, whereby cells which either contain a tracked entity, or are directly connected to such a cell, will be loaded, and all other cells will be unloaded. See also Loader::Track() and Loader::Untrack().

    Variable Documentation

    ◆ tracked_entities

    std::set<id_t> tram::Loader::tracked_entities
    ================================================ FILE: docs/cppapi/namespacetram_1_1_physics.html ================================================ Tramway SDK: tram::Physics Namespace Reference
    Tramway SDK v0.1.1
    tram::Physics Namespace Reference

    Namespaces

    namespace  API
     Physics backend API.
     

    Classes

    struct  Collision
     Physics collision data. More...
     
    class  CollisionModel
     Physics CollisionShape model. More...
     
    struct  CollisionShape
     Shape for a collider. More...
     
    struct  collisionshape_t
     
    struct  CollisionTriangle
     
    class  PathAction
     
    struct  rigidbody_t
     
    struct  trigger_t
     

    Enumerations

    enum  Shape : uint32_t {
      SHAPE_SPHERE , SHAPE_CYLINDER , SHAPE_CAPSULE , SHAPE_CONE ,
      SHAPE_BOX , SHAPE_HULL , SHAPE_MESH
    }
     
    enum  CollisionGroup : uint32_t {
      COLL_WORLDOBJ = 2 , COLL_STATICOBJ = 4 , COLL_DYNAMICOBJ = 8 , COLL_TRIGGER = 16 ,
      COLL_PLAYER = 32 , COLL_MONSTER = 64 , COLL_VEHICLE = 128
    }
     

    Functions

    void Init ()
     Initializes the physics system. More...
     
    void Update ()
     Updates the physics system. More...
     
    Collision Raycast (const vec3 &from, const vec3 &to, uint32_t collision_mask)
     Performs a raycast. More...
     
    std::vector< CollisionShapecast (const CollisionShape &shape, const vec3 &from, const vec3 &to, uint32_t collision_mask)
     I have no idea if this function works. (yes it does) More...
     

    Enumeration Type Documentation

    ◆ CollisionGroup

    Enumerator
    COLL_WORLDOBJ 
    COLL_STATICOBJ 
    COLL_DYNAMICOBJ 
    COLL_TRIGGER 
    COLL_PLAYER 
    COLL_MONSTER 
    COLL_VEHICLE 

    ◆ Shape

    enum tram::Physics::Shape : uint32_t
    Enumerator
    SHAPE_SPHERE 
    SHAPE_CYLINDER 
    SHAPE_CAPSULE 
    SHAPE_CONE 
    SHAPE_BOX 
    SHAPE_HULL 
    SHAPE_MESH 

    Function Documentation

    ◆ Init()

    void tram::Physics::Init ( )

    Initializes the physics system.

    ◆ Raycast()

    Collision tram::Physics::Raycast ( const vec3 from,
    const vec3 to,
    uint32_t  collision_mask 
    )

    Performs a raycast.

    Performs a raycast from from to to.

    Returns
    Collision struct. If there was nothing found, then the pointer in the struct will be set to nullptr.

    ◆ Shapecast()

    std::vector< Collision > tram::Physics::Shapecast ( const CollisionShape shape,
    const vec3 from,
    const vec3 to,
    uint32_t  collision_mask 
    )

    I have no idea if this function works. (yes it does)

    ◆ Update()

    void tram::Physics::Update ( )

    Updates the physics system.

    Should only be called once in the update cycle.

    ================================================ FILE: docs/cppapi/namespacetram_1_1_physics_1_1_a_p_i.html ================================================ Tramway SDK: tram::Physics::API Namespace Reference
    Tramway SDK v0.1.1
    tram::Physics::API Namespace Reference

    Physics backend API. More...

    Classes

    class  CallbackMotionState
     
    struct  CollisionShapeTransform
     
    struct  ObjectCollision
     
    class  PhysicsDebugDraw
     
    struct  RigidbodyMetadata
     
    struct  ShapecastCallback
     

    Typedefs

    typedef std::pair< vec3, quat >(* get_trf_callback) (void *)
     
    typedef void(* set_trf_callback) (void *, std::pair< vec3, quat >)
     
    typedef void(* col_callback) (void *, void *, ObjectCollision)
     

    Enumerations

    enum  UserIndex : int { USERINDEX_RIGIDBODY = 3 , USERINDEX_TRIGGER = 4 }
     
    enum  MetadataType { METADATA_RIGIDBODY , METADATA_TRIGGER }
     

    Functions

    collisionshape_t MakeCollisionShape (CollisionShapeTransform *shapes, size_t shape_count)
     
    collisionshape_t MakeCollisionShape (CollisionShape shape)
     
    void YeetCollisionShape (collisionshape_t shape)
     
    rigidbody_t MakeRigidbody (collisionshape_t shape, float mass, vec3 position, quat rotation, uint32_t mask, uint32_t group, get_trf_callback get_callback, set_trf_callback set_callback, void *data)
     
    void YeetRigidbody (rigidbody_t rigidbody)
     
    void SetRigidbodyTransformCallback (rigidbody_t rigidbody, get_trf_callback get_callback, set_trf_callback set_callback, void *data)
     
    void SetRigidbodyCollisionCallback (rigidbody_t rigidbody, col_callback callback, void *data)
     
    void SetRigidbodyCollisionMask (rigidbody_t rigidbody, uint32_t mask)
     
    void SetRigidbodyCollisionGroup (rigidbody_t rigidbody, uint32_t group)
     
    void SetRigidbodyLocation (rigidbody_t rigidbody, vec3 location)
     
    void SetRigidbodyRotation (rigidbody_t rigidbody, quat rotation)
     
    void SetRigidbodyMass (rigidbody_t rigidbody, float mass)
     
    void PushRigidbody (rigidbody_t rigidbody, vec3 direction)
     
    void PushRigidbody (rigidbody_t rigidbody, vec3 direction, vec3 local)
     
    void SpinRigidbody (rigidbody_t rigidbody, vec3 direction)
     
    void SetRigidbodyDebugDrawing (rigidbody_t rigidbody, bool drawing)
     
    void SetRigidbodyKinematic (rigidbody_t rigidbody, bool kinematic)
     
    void SetRigidbodyAngularFactor (rigidbody_t rigidbody, vec3 factor)
     
    void SetRigidbodyLinearFactor (rigidbody_t rigidbody, vec3 factor)
     
    void SetRigidbodyVelocity (rigidbody_t rigidbody, vec3 velocity)
     
    vec3 GetRigidbodyVelocity (rigidbody_t rigidbody)
     
    void AwakenRigidbody (rigidbody_t rigidbody)
     
    void SleepRigidbody (rigidbody_t rigidbody)
     
    void DisableRigidbodyDeactivation (rigidbody_t rigidbody)
     
    trigger_t MakeTrigger (collisionshape_t shape, uint32_t mask, uint32_t group, vec3 position, quat rotation)
     
    void YeetTrigger (trigger_t)
     
    void SetTriggerCollisionCallback (trigger_t rigidbody, col_callback callback, void *data)
     
    void SetTriggerCollisionMask (trigger_t rigidbody, uint32_t mask)
     
    void SetTriggerCollisionGroup (trigger_t rigidbody, uint32_t group)
     
    void SetTriggerLocation (trigger_t rigidbody, vec3 location)
     
    void SetTriggerRotation (trigger_t rigidbody, quat location)
     
    std::pair< ObjectCollision, void * > Raycast (vec3 from, vec3 to, uint32_t collision_mask)
     
    std::vector< std::pair< ObjectCollision, void * > > Shapecast (CollisionShape shape, vec3 from, vec3 to, uint32_t collision_mask)
     
    void Init ()
     
    void StepPhysics ()
     
    void DrawDebug ()
     
    void DrawDebug (bool)
     
    void SetRigidbodyTransformCallback (rigidbody_t rigidbody, std::pair< vec3, quat >(*get_transform_callback)(void *), void(*set_transform_callback)(void *, std::pair< vec3, quat >), void *data)
     

    Variables

    Pool< RigidbodyMetadatarigidbody_metadata_pool ("RigidbodyMetadata pool", RIGIDBODY_LIMIT)
     

    Detailed Description

    Physics backend API.

    Typedef Documentation

    ◆ col_callback

    typedef void(* tram::Physics::API::col_callback) (void *, void *, ObjectCollision)

    ◆ get_trf_callback

    typedef std::pair< vec3, quat >(* tram::Physics::API::get_trf_callback) (void *)

    ◆ set_trf_callback

    typedef void(* tram::Physics::API::set_trf_callback) (void *, std::pair< vec3, quat >)

    Enumeration Type Documentation

    ◆ MetadataType

    Enumerator
    METADATA_RIGIDBODY 
    METADATA_TRIGGER 

    ◆ UserIndex

    Enumerator
    USERINDEX_RIGIDBODY 
    USERINDEX_TRIGGER 

    Function Documentation

    ◆ AwakenRigidbody()

    void tram::Physics::API::AwakenRigidbody ( rigidbody_t  rigidbody)

    ◆ DisableRigidbodyDeactivation()

    void tram::Physics::API::DisableRigidbodyDeactivation ( rigidbody_t  rigidbody)

    ◆ DrawDebug() [1/2]

    void tram::Physics::API::DrawDebug ( )

    ◆ DrawDebug() [2/2]

    void tram::Physics::API::DrawDebug ( bool  draw)

    ◆ GetRigidbodyVelocity()

    vec3 tram::Physics::API::GetRigidbodyVelocity ( rigidbody_t  rigidbody)

    ◆ Init()

    void tram::Physics::API::Init ( )

    ◆ MakeCollisionShape() [1/2]

    collisionshape_t tram::Physics::API::MakeCollisionShape ( CollisionShape  shape)

    ◆ MakeCollisionShape() [2/2]

    collisionshape_t tram::Physics::API::MakeCollisionShape ( CollisionShapeTransform shapes,
    size_t  shape_count 
    )

    ◆ MakeRigidbody()

    rigidbody_t tram::Physics::API::MakeRigidbody ( collisionshape_t  shape,
    float  mass,
    vec3  position,
    quat  rotation,
    uint32_t  mask,
    uint32_t  group,
    get_trf_callback  get_callback,
    set_trf_callback  set_callback,
    void *  data 
    )

    ◆ MakeTrigger()

    trigger_t tram::Physics::API::MakeTrigger ( collisionshape_t  shape,
    uint32_t  mask,
    uint32_t  group,
    vec3  position,
    quat  rotation 
    )

    ◆ PushRigidbody() [1/2]

    void tram::Physics::API::PushRigidbody ( rigidbody_t  rigidbody,
    vec3  direction 
    )

    ◆ PushRigidbody() [2/2]

    void tram::Physics::API::PushRigidbody ( rigidbody_t  rigidbody,
    vec3  direction,
    vec3  local 
    )

    ◆ Raycast()

    std::pair< ObjectCollision, void * > tram::Physics::API::Raycast ( vec3  from,
    vec3  to,
    uint32_t  collision_mask 
    )

    ◆ SetRigidbodyAngularFactor()

    void tram::Physics::API::SetRigidbodyAngularFactor ( rigidbody_t  rigidbody,
    vec3  factor 
    )

    ◆ SetRigidbodyCollisionCallback()

    void tram::Physics::API::SetRigidbodyCollisionCallback ( rigidbody_t  rigidbody,
    col_callback  callback,
    void *  data 
    )

    ◆ SetRigidbodyCollisionGroup()

    void tram::Physics::API::SetRigidbodyCollisionGroup ( rigidbody_t  rigidbody,
    uint32_t  group 
    )

    ◆ SetRigidbodyCollisionMask()

    void tram::Physics::API::SetRigidbodyCollisionMask ( rigidbody_t  rigidbody,
    uint32_t  mask 
    )

    ◆ SetRigidbodyDebugDrawing()

    void tram::Physics::API::SetRigidbodyDebugDrawing ( rigidbody_t  rigidbody,
    bool  drawing 
    )

    ◆ SetRigidbodyKinematic()

    void tram::Physics::API::SetRigidbodyKinematic ( rigidbody_t  rigidbody,
    bool  kinematic 
    )

    ◆ SetRigidbodyLinearFactor()

    void tram::Physics::API::SetRigidbodyLinearFactor ( rigidbody_t  rigidbody,
    vec3  factor 
    )

    ◆ SetRigidbodyLocation()

    void tram::Physics::API::SetRigidbodyLocation ( rigidbody_t  rigidbody,
    vec3  location 
    )

    ◆ SetRigidbodyMass()

    void tram::Physics::API::SetRigidbodyMass ( rigidbody_t  rigidbody,
    float  mass 
    )

    ◆ SetRigidbodyRotation()

    void tram::Physics::API::SetRigidbodyRotation ( rigidbody_t  rigidbody,
    quat  rotation 
    )

    ◆ SetRigidbodyTransformCallback() [1/2]

    void tram::Physics::API::SetRigidbodyTransformCallback ( rigidbody_t  rigidbody,
    get_trf_callback  get_callback,
    set_trf_callback  set_callback,
    void *  data 
    )

    ◆ SetRigidbodyTransformCallback() [2/2]

    void tram::Physics::API::SetRigidbodyTransformCallback ( rigidbody_t  rigidbody,
    std::pair< vec3, quat >(*)(void *)  get_transform_callback,
    void(*)(void *, std::pair< vec3, quat >)  set_transform_callback,
    void *  data 
    )

    ◆ SetRigidbodyVelocity()

    void tram::Physics::API::SetRigidbodyVelocity ( rigidbody_t  rigidbody,
    vec3  velocity 
    )

    ◆ SetTriggerCollisionCallback()

    void tram::Physics::API::SetTriggerCollisionCallback ( trigger_t  rigidbody,
    col_callback  callback,
    void *  data 
    )

    ◆ SetTriggerCollisionGroup()

    void tram::Physics::API::SetTriggerCollisionGroup ( trigger_t  rigidbody,
    uint32_t  group 
    )

    ◆ SetTriggerCollisionMask()

    void tram::Physics::API::SetTriggerCollisionMask ( trigger_t  rigidbody,
    uint32_t  mask 
    )

    ◆ SetTriggerLocation()

    void tram::Physics::API::SetTriggerLocation ( trigger_t  rigidbody,
    vec3  location 
    )

    ◆ SetTriggerRotation()

    void tram::Physics::API::SetTriggerRotation ( trigger_t  rigidbody,
    quat  location 
    )

    ◆ Shapecast()

    std::vector< std::pair< ObjectCollision, void * > > tram::Physics::API::Shapecast ( CollisionShape  shape,
    vec3  from,
    vec3  to,
    uint32_t  collision_mask 
    )

    ◆ SleepRigidbody()

    void tram::Physics::API::SleepRigidbody ( rigidbody_t  rigidbody)

    ◆ SpinRigidbody()

    void tram::Physics::API::SpinRigidbody ( rigidbody_t  rigidbody,
    vec3  direction 
    )

    ◆ StepPhysics()

    void tram::Physics::API::StepPhysics ( )

    ◆ YeetCollisionShape()

    void tram::Physics::API::YeetCollisionShape ( collisionshape_t  shape)

    ◆ YeetRigidbody()

    void tram::Physics::API::YeetRigidbody ( rigidbody_t  rigidbody)

    ◆ YeetTrigger()

    void tram::Physics::API::YeetTrigger ( trigger_t  trigger)

    Variable Documentation

    ◆ rigidbody_metadata_pool

    Pool< RigidbodyMetadata > tram::Physics::API::rigidbody_metadata_pool("RigidbodyMetadata pool", RIGIDBODY_LIMIT) ( "RigidbodyMetadata pool"  ,
    RIGIDBODY_LIMIT   
    )
    ================================================ FILE: docs/cppapi/namespacetram_1_1_physics_1_1_bullet.html ================================================ Tramway SDK: tram::Physics::Bullet Namespace Reference
    Tramway SDK
    tram::Physics::Bullet Namespace Reference
    ================================================ FILE: docs/cppapi/namespacetram_1_1_platform.html ================================================ Tramway SDK: tram::Platform Namespace Reference
    Tramway SDK v0.1.1
    tram::Platform Namespace Reference

    Namespaces

    namespace  Input
     Input backend API.
     
    namespace  Window
     Windowing backend API.
     

    Functions

    void SaveImageToDisk (const char *name, int w, int h, const char *image)
     Saves image to disk. More...
     
    void TryDebugging ()
     Attempts to break into debugger. More...
     
    void ShowErrorDialog (const char *message, const char *title)
     
    void SetScale (int s)
     

    Variables

    int current_monitor = 0
     
    bool is_fullscreen = false
     
    bool vsync = true
     

    Function Documentation

    ◆ SaveImageToDisk()

    void tram::Platform::SaveImageToDisk ( const char *  name,
    int  w,
    int  h,
    const char *  image 
    )

    Saves image to disk.

    Image needs to be in a RGB 8-bit format.

    ◆ SetScale()

    void tram::Platform::SetScale ( int  s)

    ◆ ShowErrorDialog()

    void tram::Platform::ShowErrorDialog ( const char *  message,
    const char *  title 
    )

    ◆ TryDebugging()

    void tram::Platform::TryDebugging ( )

    Attempts to break into debugger.

    This function will try to determine if the program is being debugged, and if it is, then it will break into debugger. If it isn't being debugged, it will do nothing.

    Variable Documentation

    ◆ current_monitor

    int tram::Platform::current_monitor = 0

    ◆ is_fullscreen

    bool tram::Platform::is_fullscreen = false

    ◆ vsync

    bool tram::Platform::vsync = true
    ================================================ FILE: docs/cppapi/namespacetram_1_1_platform_1_1_input.html ================================================ Tramway SDK: tram::Platform::Input Namespace Reference
    Tramway SDK v0.1.1
    tram::Platform::Input Namespace Reference

    Input backend API. More...

    Functions

    void Init ()
     
    void Update ()
     
    void Uninit ()
     

    Detailed Description

    Input backend API.

    Function Documentation

    ◆ Init()

    void tram::Platform::Input::Init ( )

    ◆ Uninit()

    void tram::Platform::Input::Uninit ( )

    ◆ Update()

    void tram::Platform::Input::Update ( )
    ================================================ FILE: docs/cppapi/namespacetram_1_1_platform_1_1_window.html ================================================ Tramway SDK: tram::Platform::Window Namespace Reference
    Tramway SDK v0.1.1
    tram::Platform::Window Namespace Reference

    Windowing backend API. More...

    Enumerations

    enum  CursorType { CURSOR_DEFAULT , CURSOR_TEXT , CURSOR_CLICK }
     

    Functions

    void Init ()
     
    void Update ()
     
    void Uninit ()
     
    void SetTitle (const char *)
     
    void SetSize (int w, int h)
     
    void SetCursor (CursorType)
     
    void SetCursorPosition (float x, float y)
     
    void EnableCursor ()
     
    void DisableCursor ()
     
    void SetScale (int s)
     
    double GetTime ()
     
    int GetCurrentMonitor ()
     
    int GetMonitorCount ()
     
    void SetMonitor (int monitor)
     
    bool IsFullscreen ()
     
    void SetFullscreen (bool)
     
    bool IsVsync ()
     
    void SetVsync (bool)
     
    bool IsRawInput ()
     
    void SetRawInput (bool)
     
    bool IsRenderContextThread ()
     

    Detailed Description

    Windowing backend API.

    Enumeration Type Documentation

    ◆ CursorType

    Enumerator
    CURSOR_DEFAULT 
    CURSOR_TEXT 
    CURSOR_CLICK 

    Function Documentation

    ◆ DisableCursor()

    void tram::Platform::Window::DisableCursor ( )

    ◆ EnableCursor()

    void tram::Platform::Window::EnableCursor ( )

    ◆ GetCurrentMonitor()

    int tram::Platform::Window::GetCurrentMonitor ( )

    ◆ GetMonitorCount()

    int tram::Platform::Window::GetMonitorCount ( )

    ◆ GetTime()

    double tram::Platform::Window::GetTime ( )

    ◆ Init()

    void tram::Platform::Window::Init ( )

    ◆ IsFullscreen()

    bool tram::Platform::Window::IsFullscreen ( )

    ◆ IsRawInput()

    bool tram::Platform::Window::IsRawInput ( )

    ◆ IsRenderContextThread()

    bool tram::Platform::Window::IsRenderContextThread ( )

    ◆ IsVsync()

    bool tram::Platform::Window::IsVsync ( )

    ◆ SetCursor()

    void tram::Platform::Window::SetCursor ( CursorType  cursor)

    ◆ SetCursorPosition()

    void tram::Platform::Window::SetCursorPosition ( float  x,
    float  y 
    )

    ◆ SetFullscreen()

    void tram::Platform::Window::SetFullscreen ( bool  fullscreen)

    ◆ SetMonitor()

    void tram::Platform::Window::SetMonitor ( int  monitor)

    ◆ SetRawInput()

    void tram::Platform::Window::SetRawInput ( bool  input)

    ◆ SetScale()

    void tram::Platform::Window::SetScale ( int  s)

    ◆ SetSize()

    void tram::Platform::Window::SetSize ( int  w,
    int  h 
    )

    ◆ SetTitle()

    void tram::Platform::Window::SetTitle ( const char *  title)

    ◆ SetVsync()

    void tram::Platform::Window::SetVsync ( bool  value)

    ◆ Uninit()

    void tram::Platform::Window::Uninit ( )

    ◆ Update()

    void tram::Platform::Window::Update ( )
    ================================================ FILE: docs/cppapi/namespacetram_1_1_render.html ================================================ Tramway SDK: tram::Render Namespace Reference
    Tramway SDK v0.1.1
    tram::Render Namespace Reference

    High-level Render system API. More...

    Namespaces

    namespace  AABB
     
    namespace  API
     Rendering backend API.
     
    namespace  LightTree
     Scene light tree.
     
    namespace  SceneTree
     Scene tree.
     

    Classes

    struct  AABBTriangle
     
    class  Animation
     Skeletal animation for a 3D model. More...
     
    struct  Bone
     Bone for a 3D models skeleton. More...
     
    struct  BucketMapping
     
    struct  drawlistentry_t
     
    struct  DynamicModelData
     
    struct  DynamicModelVertex
     
    struct  indexarray_t
     
    struct  IndexRange
     
    struct  Keyframe
     Keyframe for a skeletal animation. More...
     
    struct  KeyframeHeader
     
    struct  light_t
     
    class  LightGraph
     LightGraph resource. More...
     
    struct  LineVertex
     
    class  Material
     Material resource. More...
     
    struct  material_t
     
    class  Model
     
    struct  ModelAABB
     
    struct  ModelData
     
    struct  Pose
     
    struct  RegisteredVertexDefinition
     
    struct  SphericalHarmonic
     
    class  Sprite
     Sprite resource. More...
     
    struct  spritearray_t
     
    struct  SpriteFrame
     
    struct  SpritePoint
     
    struct  SpriteVertex
     
    struct  StaticModelData
     
    struct  StaticModelVertex
     
    struct  texturehandle_t
     
    struct  Triangle
     
    struct  TriangleBucket
     
    struct  vertexarray_t
     
    struct  VertexAttribute
     Atributes for vertex buffer vertices. More...
     
    struct  VertexDefinition
     

    Typedefs

    typedef std::pair< name_t, uint64_t > NameCount
     
    typedef vec3 color_t
     
    typedef uint32_t layer_t
     
    typedef uint32_t vertexformat_t
     
    typedef uint32_t materialtype_t
     
    typedef SphericalHarmonic sphericalharmonic_t
     
    typedef void * aabbleaf_t
     

    Enumerations

    enum  MaterialProperty {
      PROPERTY_METAL , PROPERTY_METAL_THIN , PROPERTY_SLIME , PROPERTY_TILE ,
      PROPERTY_GRATE , PROPERTY_WOOD , PROPERTY_COMPUTER , PROPERTY_GLASS ,
      PROPERTY_SNOW , PROPERTY_GRASS , PROPERTY_CONCRETE , PROPERTY_FLESH
    }
     
    enum  TextureType { TEXTURE_NONE , TEXTURE_SAME , TEXTURE_SOURCE }
     
    enum  VertexFormats : vertexformat_t {
      VERTEX_STATIC , VERTEX_DYNAMIC , VERTEX_SPRITE , VERTEX_LINE ,
      VERTEX_LAST
    }
     
    enum  MaterialTypes : materialtype_t {
      MATERIAL_TEXTURE , MATERIAL_TEXTURE_ALPHA , MATERIAL_LIGHTMAP , MATERIAL_ENVIRONMENTMAP ,
      MATERIAL_MSDF , MATERIAL_GLYPH , MATERIAL_WATER , MATERIAL_FLAT_COLOR ,
      MATERIAL_LAST
    }
     
    enum  MaterialFilter { FILTER_NEAREST , FILTER_LINEAR }
     
    enum  renderflags : uint32_t {
      FLAG_NO_RENDER = 0 , FLAG_RENDER = 1 , FLAG_DRAW_INDEXED = 4 , FLAG_REVERSE_SORT = 8 ,
      FLAG_TRANSPARENT = 16 , FLAG_NO_DEPTH_TEST = 32 , FLAG_NO_DIRECTIONAL = 64 , FLAG_DRAW_LINES = 128 ,
      FLAG_DISABLE_LIGHTING = 256 , FLAG_NO_DEBUG = 512 , FLAG_USE_AABB = 1024
    }
     Flags for DrawListObjects. More...
     
    enum  ColorMode { COLORMODE_R , COLORMODE_RG , COLORMODE_RGB , COLORMODE_RGBA }
     Texture color mode. More...
     
    enum  TextureFilter { TEXTUREFILTER_NEAREST , TEXTUREFILTER_LINEAR , TEXTUREFILTER_LINEAR_MIPMAPPED }
     Texture filters. More...
     

    Functions

    Hashmap< Animation * > animation_list ("model name list", 500)
     
    uint8_t * MakeNewErrorTexture (vec3 color1, vec3 color2)
     Generates a new error texture. More...
     
    StaticModelDataMakeNewErrorModel ()
     Generates a new error model. More...
     
    void Init ()
     Initializes the rendering system. More...
     
    void Render ()
     Renders a single frame. More...
     
    void SetSunDirection (color_t direction, layer_t layer)
     Sets the sun direction. More...
     
    void SetSunColor (color_t color, layer_t layer)
     Sets the sun color. More...
     
    void SetAmbientColor (color_t color, layer_t layer)
     Sets the ambient color. More...
     
    void SetScreenSize (float width, float height)
     
    void SetViewFov (float fov, layer_t layer)
     
    float GetViewFov (layer_t layer)
     
    void SetOrthoRatio (float ratio, layer_t layer)
     
    void SetViewDistance (float dist, layer_t layer)
     
    float GetViewDistance (layer_t layer)
     
    void SetViewPosition (vec3 position, layer_t layer)
     Sets the view position. More...
     
    void SetViewRotation (quat rotation, layer_t layer)
     Sets the view rotation. More...
     
    vec3 GetViewPosition (layer_t layer)
     Returns the view position for a given layer. More...
     
    quat GetViewRotation (layer_t layer)
     Returns the view rotation for a given layer. More...
     
    void AddLine (vec3 from, vec3 to, vec3 color)
     Draws a line for a single frame. More...
     
    void AddLineMarker (vec3 location, vec3 color)
     Draws a cross marker for a single frame. More...
     
    void AddLineAABB (vec3 min, vec3 max, vec3 center, quat rotation, vec3 color)
     Draws an AABB box for a single frame. More...
     
    void AddSphere (vec3 pos, float radius, color_t color)
     Draws a sphere for a single frame. More...
     
    void AddCylinder (vec3 pos, float height, float radius, color_t color)
     Draws a cylinder for a single frame. More...
     
    void AddCube (vec3 pos, float height, float radius, color_t color)
     Draws a cube for a single frame. More...
     
    void AddText (vec3 pos, const char *text, color_t color)
     Draws text, in 3D space, for a single frame. More...
     
    void AddText (float x, float y, const char *text, color_t color)
     Draws text, on the screen, for a single frame. More...
     
    void Project (const vec3 &point, vec3 &result, layer_t layer)
     Projects a point into screen coordinates. More...
     
    vec3 ProjectInverse (vec3 point, layer_t layer)
     Reverses screen coordinates into world coordinates. More...
     
    vertexformat_t RegisterVertexFormat (const char *name)
     Allocates a new vertex format. More...
     
    materialtype_t RegisterMaterialType (const char *name)
     Allocates a new material type. More...
     
    vertexformat_t FindVertexFormat (const char *name)
     Finds an already allocated vertex format by its name. More...
     
    materialtype_t FindMaterialType (const char *name)
     Finds an already material type format by its name. More...
     
    const char * GetVertexFormatName (vertexformat_t type)
     Finds an allocated vertex format's name. More...
     
    const char * GetMaterialTypeName (materialtype_t type)
     Finds an allocated material type's name. More...
     
    const color_t COLOR_WHITE (1.0f, 1.0f, 1.0f)
     
    const color_t COLOR_RED (1.0f, 0.0f, 0.0f)
     
    const color_t COLOR_GREEN (0.0f, 1.0f, 0.0f)
     
    const color_t COLOR_BLUE (0.0f, 0.0f, 1.0f)
     
    const color_t COLOR_YELLOW (1.0f, 1.0f, 0.0f)
     
    const color_t COLOR_PINK (1.0f, 0.0f, 1.0f)
     
    const color_t COLOR_CYAN (0.0f, 1.0f, 1.0f)
     
    const color_t COLOR_BLACK (0.0f, 0.0f, 0.0f)
     
    const color_t COLOR_GRAY (0.3f, 0.3f, 0.3f)
     
    void RegisterVertexDefinition (vertexformat_t format, VertexDefinition definition)
     Registers a VertexDefinition for a specified vertex format. More...
     
    VertexDefinition GetVertexDefinition (vertexformat_t format)
     Returns a previously registered VertexDefinition. More...
     

    Variables

    StackPool< uint8_t > animation_pool ("animation keyframe pool", 1024 *1024)
     
    const size_t BONE_COUNT = 30
     
    struct {
       vec3   tram::Render::view_position = {0.0f, 0.0f, 0.0f}
     
       quat   tram::Render::view_rotation = {1.0f, 0.0f, 0.0f, 0.0f}
     
       float   tram::Render::view_fov = 60.0f
     
       float   tram::Render::near_plane = 0.01f
     
       float   tram::Render::far_plane = 750.0f
     
       float   tram::Render::ortho_ratio = 1.0f
     
       vec3   tram::Render::sun_direction = {0.0f, 1.0f, 0.0f}
     
       vec3   tram::Render::sun_color = {1.0f, 1.0f, 1.0f}
     
       vec3   tram::Render::ambient_color = {0.0f, 0.0f, 0.0f}
     
       mat4   tram::Render::projection = mat4(1.0f)
     
       mat4   tram::Render::view = mat4(1.0f)
     
    view_properties [7]
     
    bool THIRD_PERSON = false
     
    bool DRAW_RENDER_DEBUG = false
     
    vertexarray_t colorlines_vertex_array = {}
     
    drawlistentry_t colorlines_entry
     
    vertexarray_t debugtext_vertex_array = {}
     
    drawlistentry_t debugtext_entry
     
    Spritefont_debug = nullptr
     
    std::vector< LineVertexcolorlines
     
    std::vector< SpriteVertextextvertices
     

    Detailed Description

    High-level Render system API.

    Typedef Documentation

    ◆ aabbleaf_t

    typedef void* tram::Render::aabbleaf_t

    ◆ color_t

    ◆ layer_t

    typedef uint32_t tram::Render::layer_t

    ◆ materialtype_t

    typedef uint32_t tram::Render::materialtype_t

    ◆ NameCount

    typedef std::pair<name_t, uint64_t> tram::Render::NameCount

    ◆ sphericalharmonic_t

    ◆ vertexformat_t

    typedef uint32_t tram::Render::vertexformat_t

    Enumeration Type Documentation

    ◆ ColorMode

    Texture color mode.

    Enumerator
    COLORMODE_R 
    COLORMODE_RG 
    COLORMODE_RGB 
    COLORMODE_RGBA 

    ◆ MaterialFilter

    Enumerator
    FILTER_NEAREST 
    FILTER_LINEAR 

    ◆ MaterialProperty

    Enumerator
    PROPERTY_METAL 
    PROPERTY_METAL_THIN 
    PROPERTY_SLIME 
    PROPERTY_TILE 
    PROPERTY_GRATE 
    PROPERTY_WOOD 
    PROPERTY_COMPUTER 
    PROPERTY_GLASS 
    PROPERTY_SNOW 
    PROPERTY_GRASS 
    PROPERTY_CONCRETE 
    PROPERTY_FLESH 

    ◆ MaterialTypes

    Enumerator
    MATERIAL_TEXTURE 
    MATERIAL_TEXTURE_ALPHA 
    MATERIAL_LIGHTMAP 
    MATERIAL_ENVIRONMENTMAP 
    MATERIAL_MSDF 
    MATERIAL_GLYPH 
    MATERIAL_WATER 
    MATERIAL_FLAT_COLOR 
    MATERIAL_LAST 

    ◆ renderflags

    enum tram::Render::renderflags : uint32_t

    Flags for DrawListObjects.

    Enumerator
    FLAG_NO_RENDER 
    FLAG_RENDER 
    FLAG_DRAW_INDEXED 
    FLAG_REVERSE_SORT 
    FLAG_TRANSPARENT 
    FLAG_NO_DEPTH_TEST 
    FLAG_NO_DIRECTIONAL 
    FLAG_DRAW_LINES 
    FLAG_DISABLE_LIGHTING 
    FLAG_NO_DEBUG 
    FLAG_USE_AABB 

    ◆ TextureFilter

    Texture filters.

    Enumerator
    TEXTUREFILTER_NEAREST 
    TEXTUREFILTER_LINEAR 
    TEXTUREFILTER_LINEAR_MIPMAPPED 

    ◆ TextureType

    Enumerator
    TEXTURE_NONE 
    TEXTURE_SAME 
    TEXTURE_SOURCE 

    ◆ VertexFormats

    Enumerator
    VERTEX_STATIC 
    VERTEX_DYNAMIC 
    VERTEX_SPRITE 
    VERTEX_LINE 
    VERTEX_LAST 

    Function Documentation

    ◆ AddCube()

    void tram::Render::AddCube ( vec3  pos,
    float  height,
    float  radius,
    color_t  color 
    )

    Draws a cube for a single frame.

    Note
    Not implmented.

    ◆ AddCylinder()

    void tram::Render::AddCylinder ( vec3  pos,
    float  height,
    float  radius,
    color_t  color 
    )

    Draws a cylinder for a single frame.

    Note
    Not implmented.

    ◆ AddLine()

    void tram::Render::AddLine ( vec3  from,
    vec3  to,
    vec3  color 
    )

    Draws a line for a single frame.

    ◆ AddLineAABB()

    void tram::Render::AddLineAABB ( vec3  min,
    vec3  max,
    vec3  center,
    quat  rotation,
    vec3  color 
    )

    Draws an AABB box for a single frame.

    ◆ AddLineMarker()

    void tram::Render::AddLineMarker ( vec3  location,
    vec3  color 
    )

    Draws a cross marker for a single frame.

    ◆ AddSphere()

    void tram::Render::AddSphere ( vec3  pos,
    float  radius,
    color_t  color 
    )

    Draws a sphere for a single frame.

    ◆ AddText() [1/2]

    void tram::Render::AddText ( float  x,
    float  y,
    const char *  text,
    color_t  color 
    )

    Draws text, on the screen, for a single frame.

    ◆ AddText() [2/2]

    void tram::Render::AddText ( vec3  pos,
    const char *  text,
    color_t  color 
    )

    Draws text, in 3D space, for a single frame.

    ◆ animation_list()

    Hashmap< Animation * > tram::Render::animation_list ( "model name list"  ,
    500   
    )

    ◆ COLOR_BLACK()

    const color_t tram::Render::COLOR_BLACK ( 0.  0f,
    0.  0f,
    0.  0f 
    )

    ◆ COLOR_BLUE()

    const color_t tram::Render::COLOR_BLUE ( 0.  0f,
    0.  0f,
    1.  0f 
    )

    ◆ COLOR_CYAN()

    const color_t tram::Render::COLOR_CYAN ( 0.  0f,
    1.  0f,
    1.  0f 
    )

    ◆ COLOR_GRAY()

    const color_t tram::Render::COLOR_GRAY ( 0.  3f,
    0.  3f,
    0.  3f 
    )

    ◆ COLOR_GREEN()

    const color_t tram::Render::COLOR_GREEN ( 0.  0f,
    1.  0f,
    0.  0f 
    )

    ◆ COLOR_PINK()

    const color_t tram::Render::COLOR_PINK ( 1.  0f,
    0.  0f,
    1.  0f 
    )

    ◆ COLOR_RED()

    const color_t tram::Render::COLOR_RED ( 1.  0f,
    0.  0f,
    0.  0f 
    )

    ◆ COLOR_WHITE()

    const color_t tram::Render::COLOR_WHITE ( 1.  0f,
    1.  0f,
    1.  0f 
    )

    ◆ COLOR_YELLOW()

    const color_t tram::Render::COLOR_YELLOW ( 1.  0f,
    1.  0f,
    0.  0f 
    )

    ◆ FindMaterialType()

    materialtype_t tram::Render::FindMaterialType ( const char *  name)

    Finds an already material type format by its name.

    ◆ FindVertexFormat()

    vertexformat_t tram::Render::FindVertexFormat ( const char *  name)

    Finds an already allocated vertex format by its name.

    ◆ GetMaterialTypeName()

    const char * tram::Render::GetMaterialTypeName ( materialtype_t  type)

    Finds an allocated material type's name.

    ◆ GetVertexDefinition()

    VertexDefinition tram::Render::GetVertexDefinition ( vertexformat_t  format)

    Returns a previously registered VertexDefinition.

    ◆ GetVertexFormatName()

    const char * tram::Render::GetVertexFormatName ( vertexformat_t  type)

    Finds an allocated vertex format's name.

    ◆ GetViewDistance()

    float tram::Render::GetViewDistance ( layer_t  layer)

    ◆ GetViewFov()

    float tram::Render::GetViewFov ( layer_t  layer)

    ◆ GetViewPosition()

    vec3 tram::Render::GetViewPosition ( layer_t  layer)

    Returns the view position for a given layer.

    ◆ GetViewRotation()

    quat tram::Render::GetViewRotation ( layer_t  layer)

    Returns the view rotation for a given layer.

    ◆ Init()

    void tram::Render::Init ( )

    Initializes the rendering system.

    Note
    Core and UI systems need to be initialized before initializing the render system.

    ◆ MakeNewErrorModel()

    StaticModelData * tram::Render::MakeNewErrorModel ( )

    Generates a new error model.

    ◆ MakeNewErrorTexture()

    uint8_t * tram::Render::MakeNewErrorTexture ( vec3  color1,
    vec3  color2 
    )

    Generates a new error texture.

    Returns
    Buffer to a 3 channel, 64x64 texture.

    ◆ Project()

    void tram::Render::Project ( const vec3 point,
    vec3 result,
    layer_t  layer 
    )

    Projects a point into screen coordinates.

    ◆ ProjectInverse()

    vec3 tram::Render::ProjectInverse ( vec3  point,
    layer_t  layer 
    )

    Reverses screen coordinates into world coordinates.

    ◆ RegisterMaterialType()

    materialtype_t tram::Render::RegisterMaterialType ( const char *  name)

    Allocates a new material type.

    ◆ RegisterVertexDefinition()

    void tram::Render::RegisterVertexDefinition ( vertexformat_t  format,
    VertexDefinition  definition 
    )

    Registers a VertexDefinition for a specified vertex format.

    Note
    For the VertexDefinition's 'attributes' only the pointer will be copied, the underlying memory will not be copied – make sure that it doesn't point to stack memory, or other memory that could be overwritten.

    ◆ RegisterVertexFormat()

    vertexformat_t tram::Render::RegisterVertexFormat ( const char *  name)

    Allocates a new vertex format.

    ◆ Render()

    void tram::Render::Render ( )

    Renders a single frame.

    ◆ SetAmbientColor()

    void tram::Render::SetAmbientColor ( color_t  color,
    layer_t  layer 
    )

    Sets the ambient color.

    Parameters
    colorAmbient color.
    layerRendering layer to which the ambient color will be applied.

    ◆ SetOrthoRatio()

    void tram::Render::SetOrthoRatio ( float  ratio,
    layer_t  layer 
    )

    ◆ SetScreenSize()

    void tram::Render::SetScreenSize ( float  width,
    float  height 
    )

    ◆ SetSunColor()

    void tram::Render::SetSunColor ( color_t  color,
    layer_t  layer 
    )

    Sets the sun color.

    Parameters
    colorColor of the sun.
    layerRendering layer to which the sun color will be applied.

    ◆ SetSunDirection()

    void tram::Render::SetSunDirection ( color_t  direction,
    layer_t  layer 
    )

    Sets the sun direction.

    Parameters
    directionNormal vector pointing towards the sun.
    layerRendering layer to which the sun direction will be applied.

    ◆ SetViewDistance()

    void tram::Render::SetViewDistance ( float  dist,
    layer_t  layer 
    )

    ◆ SetViewFov()

    void tram::Render::SetViewFov ( float  fov,
    layer_t  layer 
    )

    ◆ SetViewPosition()

    void tram::Render::SetViewPosition ( vec3  position,
    layer_t  layer 
    )

    Sets the view position.

    Parameters
    positionView position.
    layerRendering layer to which the view position will be applied.

    ◆ SetViewRotation()

    void tram::Render::SetViewRotation ( quat  rotation,
    layer_t  layer 
    )

    Sets the view rotation.

    Parameters
    rotationView rotation.
    layerRendering layer to which the view rotation will be applied.

    Variable Documentation

    ◆ ambient_color

    vec3 tram::Render::ambient_color = {0.0f, 0.0f, 0.0f}

    ◆ animation_pool

    StackPool< uint8_t > tram::Render::animation_pool("animation keyframe pool", 1024 *1024) ( "animation keyframe pool"  ,
    1024 *  1024 
    )

    ◆ BONE_COUNT

    const size_t tram::Render::BONE_COUNT = 30

    ◆ colorlines

    std::vector<LineVertex> tram::Render::colorlines

    ◆ colorlines_entry

    drawlistentry_t tram::Render::colorlines_entry

    ◆ colorlines_vertex_array

    vertexarray_t tram::Render::colorlines_vertex_array = {}

    ◆ debugtext_entry

    drawlistentry_t tram::Render::debugtext_entry

    ◆ debugtext_vertex_array

    vertexarray_t tram::Render::debugtext_vertex_array = {}

    ◆ DRAW_RENDER_DEBUG

    bool tram::Render::DRAW_RENDER_DEBUG = false

    ◆ far_plane

    float tram::Render::far_plane = 750.0f

    ◆ font_debug

    Sprite* tram::Render::font_debug = nullptr

    ◆ near_plane

    float tram::Render::near_plane = 0.01f

    ◆ ortho_ratio

    float tram::Render::ortho_ratio = 1.0f

    ◆ projection

    mat4 tram::Render::projection = mat4(1.0f)

    ◆ sun_color

    vec3 tram::Render::sun_color = {1.0f, 1.0f, 1.0f}

    ◆ sun_direction

    vec3 tram::Render::sun_direction = {0.0f, 1.0f, 0.0f}

    ◆ textvertices

    std::vector<SpriteVertex> tram::Render::textvertices

    ◆ THIRD_PERSON

    bool tram::Render::THIRD_PERSON = false

    ◆ view

    mat4 tram::Render::view = mat4(1.0f)

    ◆ view_fov

    float tram::Render::view_fov = 60.0f

    ◆ view_position

    vec3 tram::Render::view_position = {0.0f, 0.0f, 0.0f}

    ◆ 

    struct { ... } tram::Render::view_properties[7]

    ◆ view_rotation

    quat tram::Render::view_rotation = {1.0f, 0.0f, 0.0f, 0.0f}
    ================================================ FILE: docs/cppapi/namespacetram_1_1_render_1_1_a_a_b_b.html ================================================ Tramway SDK: tram::Render::AABB Namespace Reference
    Tramway SDK v0.1.1
    tram::Render::AABB Namespace Reference

    Classes

    struct  AABBLeaf
     
    struct  QueryResponse
     

    Enumerations

    enum  ReferenceType : uint32_t { REFERENCE_RENDERCOMPONENT = 1 }
     

    Functions

    aabbleaf_t InsertLeaf (RenderComponent *component, vec3 position, quat rotation, vec3 scale)
     Inserts a RenderComponent leaf into the scene tree. More...
     
    void RemoveLeaf (aabbleaf_t leaf_id)
     Removes a leaf from. More...
     
    QueryResponse FindNearestFromRay (vec3 ray_pos, vec3 ray_dir, uint32_t mask)
     Peforms a raycast and retrieves the nearest object. More...
     
    void FindAllIntersectionsFromAABB (vec3 min, vec3 max, std::function< void(ReferenceType, EntityComponent *)> callback)
     
    void DebugDrawTree ()
     Draws the scene tree for a single frame. More...
     

    Enumeration Type Documentation

    ◆ ReferenceType

    Enumerator
    REFERENCE_RENDERCOMPONENT 

    Function Documentation

    ◆ DebugDrawTree()

    void tram::Render::AABB::DebugDrawTree ( )

    Draws the scene tree for a single frame.

    ◆ FindAllIntersectionsFromAABB()

    void tram::Render::AABB::FindAllIntersectionsFromAABB ( vec3  min,
    vec3  max,
    std::function< void(ReferenceType, EntityComponent *)>  callback 
    )

    ◆ FindNearestFromRay()

    QueryResponse tram::Render::AABB::FindNearestFromRay ( vec3  ray_pos,
    vec3  ray_dir,
    uint32_t  mask 
    )

    Peforms a raycast and retrieves the nearest object.

    ◆ InsertLeaf()

    aabbleaf_t tram::Render::AABB::InsertLeaf ( RenderComponent component,
    vec3  position,
    quat  rotation,
    vec3  scale 
    )

    Inserts a RenderComponent leaf into the scene tree.

    Returns
    Handle to the inserted leaf.

    ◆ RemoveLeaf()

    void tram::Render::AABB::RemoveLeaf ( aabbleaf_t  leaf_id)

    Removes a leaf from.

    ================================================ FILE: docs/cppapi/namespacetram_1_1_render_1_1_a_p_i.html ================================================ Tramway SDK: tram::Render::API Namespace Reference
    Tramway SDK v0.1.1
    tram::Render::API Namespace Reference

    Rendering backend API. More...

    Classes

    struct  ClipPoint
     
    struct  ClipTriangle
     
    struct  ColorVertex
     
    struct  D3DDrawListEntry
     
    struct  D3DLight
     
    struct  DynamicVertex
     
    struct  FFPHelper
     
    class  FragmentShader
     
    struct  FVFHelper
     
    struct  GLDrawListEntry
     
    struct  GLLight
     
    struct  GLMaterial
     
    struct  LayerParameters
     
    struct  LineVertex
     
    class  LinkedShader
     
    struct  Point2D
     
    struct  Scanline
     
    struct  ScanlineBuffer
     
    class  ShaderBuffer
     
    struct  ShaderUniformMatrices
     
    struct  ShaderUniformModelMatrices
     
    struct  StaticVertex
     
    struct  SWDrawListEntry
     
    struct  SWIndexArray
     
    struct  SWLight
     
    struct  SWTexture
     
    struct  SWVertexArray
     
    struct  VertexBufferMetadata
     
    class  VertexShader
     

    Typedefs

    typedef uint32_t shaderflags_t
     

    Enumerations

    enum  ContextType {
      CONTEXT_OPENGL , CONTEXT_WEBGL , CONTEXT_DIRECT3D , CONTEXT_SOFTWARE ,
      CONTEXT_NONE
    }
     
    enum  ShaderFlag : shaderflags_t { SHADER_NONE = 0 , SHADER_SPECULAR = 1 , SHADER_LIGHTMAP = 2 }
     
    enum  SWTextureMode { SW_NEAREST , SW_BLENDED }
     
    enum  SWVertexType { SW_STATIC_LIGHTMAPPED , SW_DYNAMIC_BLENDED , SW_STATIC_COLORED , SW_SPRITE }
     

    Functions

    void Init ()
     
    void RenderFrame ()
     
    void SetScreenSize (float width, float height)
     
    void SetScreenClear (vec3 clear_color, bool clear)
     
    void SetLightingParameters (vec3 sun_direction, vec3 sun_color, vec3 ambient_color, layer_t layer)
     
    void SetViewMatrix (const mat4 &matrix, layer_t layer)
     
    void SetProjectionMatrix (const mat4 &matrix, layer_t layer)
     
    void GetScreen (char *buffer, int w, int h)
     
    void RegisterShader (vertexformat_t format, materialtype_t type, const char *vertex_shader, const char *fragment_shader)
     
    drawlistentry_t InsertDrawListEntry ()
     
    void RemoveDrawListEntry (drawlistentry_t entry)
     
    uint32_t GetFlags (drawlistentry_t entry)
     
    void SetFlags (drawlistentry_t entry, uint32_t flags)
     
    void SetLayer (drawlistentry_t entry, layer_t layer)
     
    void SetPose (drawlistentry_t entry, Pose *pose)
     
    void SetLightmap (drawlistentry_t entry, texturehandle_t lightmap)
     
    void SetEnvironmentMap (drawlistentry_t entry, texturehandle_t environmentmap)
     
    void SetSphericalHarmonic (drawlistentry_t entry, sphericalharmonic_t harmonic)
     
    void SetLights (drawlistentry_t entry, light_t *lights)
     
    void SetMatrix (drawlistentry_t entry, const mat4 &matrix)
     
    void SetFadeDistance (drawlistentry_t entry, float near, float far)
     
    void SetDrawListVertexArray (drawlistentry_t entry, vertexarray_t vertex_array_handle)
     
    void SetDrawListIndexArray (drawlistentry_t entry, indexarray_t index_array_handle)
     
    void SetDrawListIndexRange (drawlistentry_t entry, uint32_t index_offset, uint32_t index_length)
     
    void SetDrawListSpriteArray (drawlistentry_t entry, spritearray_t sprite_array_handle)
     
    bool SetDrawListShader (drawlistentry_t entry, vertexformat_t vertex_format, materialtype_t material_type)
     
    void SetDrawListMaterials (drawlistentry_t entry, size_t material_count, material_t *materials)
     
    void SetDrawListColors (drawlistentry_t entry, size_t count, vec4 *color)
     
    void SetDrawListTextureOffsets (drawlistentry_t entry, size_t count, vec4 *offset)
     
    void SetDrawListAABB (drawlistentry_t entry, vec3 min, vec3 max)
     
    void CreateIndexedVertexArray (VertexDefinition vertex_format, vertexarray_t &vertex_array, indexarray_t &index_array, size_t vertex_size, void *vertex_data, size_t index_size, void *index_data)
     
    void CreateVertexArray (VertexDefinition vertex_format, vertexarray_t &vertex_array)
     
    void UpdateVertexArray (vertexarray_t &vertex_buffer, size_t data_size, void *data)
     
    texturehandle_t CreateTexture (ColorMode color_mode, TextureFilter texture_filter, uint32_t width, uint32_t height, void *data)
     
    spritearray_t CreateSpriteArray ()
     
    void UpdateSpriteArray (spritearray_t array, size_t data_size, void *data)
     
    light_t MakeLight ()
     
    void DeleteLight (light_t light)
     
    void SetLightParameters (light_t light, vec3 location, vec3 color, float distance, vec3 direction, float exponent)
     
    material_t MakeMaterial ()
     
    void DeleteMaterial (material_t material)
     
    void SetMaterialTexture (material_t material, texturehandle_t texture)
     
    void SetMaterialColor (material_t material, vec4 color)
     
    void SetMaterialSpecularWeight (material_t material, float weight)
     
    void SetMaterialSpecularExponent (material_t material, float exponent)
     
    void SetMaterialSpecularTransparency (material_t material, float transparency)
     
    void SetMaterialReflectivity (material_t material, float reflectivity)
     
    ContextType GetContext ()
     
    uint32_t GetMaxIndexRangeLength ()
     
    void SetDevice (void *)
     
    bool IsDebugMode ()
     
    void SetDebugMode (bool)
     
    std::vector< uint32_t > light_tree_ids (200)
     
    void SetDrawListSpecularities (drawlistentry_t entry, size_t count, float *weights, float *exponents, float *transparencies)
     
    void SetDrawListTextures (drawlistentry_t entry, size_t texture_count, texturehandle_t *textures)
     
    FVFHelper VertexDefinitionToFVF (VertexDefinition vertex_format)
     
    void PackVertexBuffer (vertexarray_t &vertex_array, VertexDefinition vertex_format, FVFHelper helper, size_t vertex_count, void *vertex_data)
     
    uint32_t MakeUniformBuffer (const char *name, uint32_t binding, uint32_t initial_size)
     
    void UploadUniformBuffer (uint32_t handle, uint32_t data_size, void *data)
     
    void SetViewParameters (vec3 position, quat rotation, uint32_t layer)
     
    void BindUniformBlock (const char *name, uint32_t binding)
     
    uint32_t FindShader (vertexformat_t format, materialtype_t type, shaderflags_t mask)
     
    uint32_t GetAnyShader (shaderflags_t mask)
     
    void CompileShaders ()
     
    uint16_t IntColor (vec3 color)
     
    vec3 RGBColor (uint16_t color)
     
    void BlitDot (uint32_t x, uint32_t y, uint16_t color)
     
    void BlitLineOctant0 (uint32_t x0, uint32_t y0, uint32_t delta_x, uint32_t delta_y, int32_t direction, uint32_t color)
     
    void BlitLineOctant1 (uint32_t x0, uint32_t y0, uint32_t delta_x, uint32_t delta_y, int32_t direction, uint32_t color)
     
    void BlitLine (int32_t x0, int32_t y0, int32_t x1, int32_t y1, uint16_t color)
     
    template<bool set_span_first>
    void MakeSpans (int32_t x0, int32_t y0, int32_t x1, int32_t y1, int32_t p0, int32_t p1, int32_t skip_first, Scanline **scanline_array)
     
    void ScanlineConvertTriangle (ScanlineBuffer *scanlines, Point2D *vertices)
     
    void RasterizeTriangle (ScanlineBuffer *scanlines, Point2D *vertices)
     
    void RasterizeTriangleLightmapped (ScanlineBuffer *scanlines, Point2D *vertices, uint16_t color, vec2 *texture_uvs, vec2 *lightmap_uvs, SWTexture *texture, SWTexture *lightmap)
     
    void RasterizeTriangleShadedTextured (ScanlineBuffer *scanlines, Point2D *vertices, vec3 *colors, vec3 *speculars, vec2 *texture_uvs, SWTexture *texture)
     
    void ClipLineInClipSpace (vec4 &point0, vec4 &point1)
     
    vec4 ClipSinglePointLine (vec4 *outside, vec4 *inside)
     
    vec4 ClipSinglePointLineLeftPlane (vec4 outside, vec4 inside)
     
    vec4 ClipSinglePointLineRightPlane (vec4 outside, vec4 inside)
     
    vec4 ClipSinglePointLineBottomPlane (vec4 outside, vec4 inside)
     
    vec4 ClipSinglePointLineTopPlane (vec4 outside, vec4 inside)
     
    vec4 ClipSinglePointLineNearPlane (vec4 outside, vec4 inside)
     
    vec4 ClipSinglePointLineFarPlane (vec4 outside, vec4 inside)
     
    ClipPoint ClipSingleClipPointLineLeftPlane (ClipPoint outside, ClipPoint inside)
     
    ClipPoint ClipSingleClipPointLineRightPlane (ClipPoint outside, ClipPoint inside)
     
    ClipPoint ClipSingleClipPointLineBottomPlane (ClipPoint outside, ClipPoint inside)
     
    ClipPoint ClipSingleClipPointLineTopPlane (ClipPoint outside, ClipPoint inside)
     
    ClipPoint ClipSingleClipPointLineNearPlane (ClipPoint outside, ClipPoint inside)
     
    ClipPoint ClipSingleClipPointLineFarPlane (ClipPoint outside, ClipPoint inside)
     
    void PerspectiveDivision (vec4 &p)
     
    void PerspectiveDivision (vec4 &p0, vec4 &p1)
     
    std::pair< int32_t, int32_t > ClipSpaceToScreenSpace (const vec4 p)
     
    bool PointVisible (vec4 p)
     
    bool PointOutsideLeftPlane (vec4 p)
     
    bool PointOutsideRightPlane (vec4 p)
     
    bool PointOutsideBottomPlane (vec4 p)
     
    bool PointOutsideTopPlane (vec4 p)
     
    bool PointOutsideNearPlane (vec4 p)
     
    bool PointOutsideFarPlane (vec4 p)
     
    bool LineVisible (vec4 p0, vec4 p1)
     
    bool TriangleVisible (vec4 p0, vec4 p1, vec4 p2)
     
    void ClipRenderLine (vec4 p0, vec4 p1, uint16_t color)
     
    size_t ClipTriangleList (ClipTriangle *triangles)
     
    void ParseFormat (vertexarray_t &vertex_array, VertexDefinition vertex_format)
     
    void PackVertices (vertexarray_t &vertex_array, void *data, size_t count)
     

    Variables

    Pool< D3DDrawListEntrydraw_list ("render list", 500, false)
     
    Pool< D3DLightlight_list ("light list", 200, false)
     
    Octree< uint32_t > light_tree
     
    Pool< VertexBufferMetadatavertex_buffer_metadata ("vertex buffer metadata", 500, false)
     
    vec3 screen_clear_color = {0.2f, 0.3f, 0.3f}
     
    bool clear_screen = true
     
    const DWORD STATIC_VERTEX_FVF = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX2
     
    const DWORD DYNAMIC_VERTEX_FVF = D3DFVF_XYZB4 | D3DFVF_LASTBETA_UBYTE4 | D3DFVF_NORMAL | D3DFVF_TEX1
     
    const DWORD LINE_VERTEX_FVF = D3DFVF_XYZ | D3DFVF_DIFFUSE
     
    ShaderUniformMatrices matrices
     
    ShaderUniformModelMatrices modelMatrices
     
    const uint32_t matrix_uniform_binding = 0
     
    const uint32_t model_matrix_uniform_binding = 1
     
    const uint32_t light_uniform_binding = 2
     
    const uint32_t bone_uniform_binding = 3
     
    uint32_t matrix_uniform_buffer
     
    uint32_t model_matrix_uniform_buffer
     
    uint32_t light_uniform_buffer
     
    uint32_t bone_uniform_buffer
     
    const char * shader_path = "shaders/gles3/"
     
    Pool< SWTexturetexture_list ("texture list", 200, false)
     
    Pool< SWVertexArrayvertex_arrays ("vertex_arrays list", 200, false)
     
    Pool< SWIndexArrayindex_arrays ("index_arrays list", 200, false)
     
    ScanlineBufferscanlines = new ScanlineBuffer
     

    Detailed Description

    Rendering backend API.

    Typedef Documentation

    ◆ shaderflags_t

    Enumeration Type Documentation

    ◆ ContextType

    Enumerator
    CONTEXT_OPENGL 
    CONTEXT_WEBGL 
    CONTEXT_DIRECT3D 
    CONTEXT_SOFTWARE 
    CONTEXT_NONE 

    ◆ ShaderFlag

    Enumerator
    SHADER_NONE 
    SHADER_SPECULAR 
    SHADER_LIGHTMAP 

    ◆ SWTextureMode

    Enumerator
    SW_NEAREST 
    SW_BLENDED 

    ◆ SWVertexType

    Enumerator
    SW_STATIC_LIGHTMAPPED 
    SW_DYNAMIC_BLENDED 
    SW_STATIC_COLORED 
    SW_SPRITE 

    Function Documentation

    ◆ BindUniformBlock()

    void tram::Render::API::BindUniformBlock ( const char *  name,
    uint32_t  binding 
    )

    ◆ BlitDot()

    void tram::Render::API::BlitDot ( uint32_t  x,
    uint32_t  y,
    uint16_t  color 
    )

    ◆ BlitLine()

    void tram::Render::API::BlitLine ( int32_t  x0,
    int32_t  y0,
    int32_t  x1,
    int32_t  y1,
    uint16_t  color 
    )

    ◆ BlitLineOctant0()

    void tram::Render::API::BlitLineOctant0 ( uint32_t  x0,
    uint32_t  y0,
    uint32_t  delta_x,
    uint32_t  delta_y,
    int32_t  direction,
    uint32_t  color 
    )

    ◆ BlitLineOctant1()

    void tram::Render::API::BlitLineOctant1 ( uint32_t  x0,
    uint32_t  y0,
    uint32_t  delta_x,
    uint32_t  delta_y,
    int32_t  direction,
    uint32_t  color 
    )

    ◆ ClipLineInClipSpace()

    void tram::Render::API::ClipLineInClipSpace ( vec4 point0,
    vec4 point1 
    )

    ◆ ClipRenderLine()

    void tram::Render::API::ClipRenderLine ( vec4  p0,
    vec4  p1,
    uint16_t  color 
    )

    ◆ ClipSingleClipPointLineBottomPlane()

    ClipPoint tram::Render::API::ClipSingleClipPointLineBottomPlane ( ClipPoint  outside,
    ClipPoint  inside 
    )

    ◆ ClipSingleClipPointLineFarPlane()

    ClipPoint tram::Render::API::ClipSingleClipPointLineFarPlane ( ClipPoint  outside,
    ClipPoint  inside 
    )

    ◆ ClipSingleClipPointLineLeftPlane()

    ClipPoint tram::Render::API::ClipSingleClipPointLineLeftPlane ( ClipPoint  outside,
    ClipPoint  inside 
    )

    ◆ ClipSingleClipPointLineNearPlane()

    ClipPoint tram::Render::API::ClipSingleClipPointLineNearPlane ( ClipPoint  outside,
    ClipPoint  inside 
    )

    ◆ ClipSingleClipPointLineRightPlane()

    ClipPoint tram::Render::API::ClipSingleClipPointLineRightPlane ( ClipPoint  outside,
    ClipPoint  inside 
    )

    ◆ ClipSingleClipPointLineTopPlane()

    ClipPoint tram::Render::API::ClipSingleClipPointLineTopPlane ( ClipPoint  outside,
    ClipPoint  inside 
    )

    ◆ ClipSinglePointLine()

    vec4 tram::Render::API::ClipSinglePointLine ( vec4 outside,
    vec4 inside 
    )

    ◆ ClipSinglePointLineBottomPlane()

    vec4 tram::Render::API::ClipSinglePointLineBottomPlane ( vec4  outside,
    vec4  inside 
    )

    ◆ ClipSinglePointLineFarPlane()

    vec4 tram::Render::API::ClipSinglePointLineFarPlane ( vec4  outside,
    vec4  inside 
    )

    ◆ ClipSinglePointLineLeftPlane()

    vec4 tram::Render::API::ClipSinglePointLineLeftPlane ( vec4  outside,
    vec4  inside 
    )

    ◆ ClipSinglePointLineNearPlane()

    vec4 tram::Render::API::ClipSinglePointLineNearPlane ( vec4  outside,
    vec4  inside 
    )

    ◆ ClipSinglePointLineRightPlane()

    vec4 tram::Render::API::ClipSinglePointLineRightPlane ( vec4  outside,
    vec4  inside 
    )

    ◆ ClipSinglePointLineTopPlane()

    vec4 tram::Render::API::ClipSinglePointLineTopPlane ( vec4  outside,
    vec4  inside 
    )

    ◆ ClipSpaceToScreenSpace()

    std::pair< int32_t, int32_t > tram::Render::API::ClipSpaceToScreenSpace ( const vec4  p)

    ◆ ClipTriangleList()

    size_t tram::Render::API::ClipTriangleList ( ClipTriangle triangles)

    ◆ CompileShaders()

    void tram::Render::API::CompileShaders ( )

    ◆ CreateIndexedVertexArray()

    void tram::Render::API::CreateIndexedVertexArray ( VertexDefinition  vertex_format,
    vertexarray_t vertex_array,
    indexarray_t index_array,
    size_t  vertex_size,
    void *  vertex_data,
    size_t  index_size,
    void *  index_data 
    )

    ◆ CreateSpriteArray()

    spritearray_t tram::Render::API::CreateSpriteArray ( )

    ◆ CreateTexture()

    texturehandle_t tram::Render::API::CreateTexture ( ColorMode  color_mode,
    TextureFilter  texture_filter,
    uint32_t  width,
    uint32_t  height,
    void *  data 
    )

    ◆ CreateVertexArray()

    void tram::Render::API::CreateVertexArray ( VertexDefinition  vertex_format,
    vertexarray_t vertex_array 
    )

    ◆ DeleteLight()

    void tram::Render::API::DeleteLight ( light_t  light)

    ◆ DeleteMaterial()

    void tram::Render::API::DeleteMaterial ( material_t  material)

    ◆ FindShader()

    uint32_t tram::Render::API::FindShader ( vertexformat_t  format,
    materialtype_t  type,
    shaderflags_t  mask 
    )

    ◆ GetAnyShader()

    uint32_t tram::Render::API::GetAnyShader ( shaderflags_t  mask)

    ◆ GetContext()

    ContextType tram::Render::API::GetContext ( )

    ◆ GetFlags()

    uint32_t tram::Render::API::GetFlags ( drawlistentry_t  entry)

    ◆ GetMaxIndexRangeLength()

    uint32_t tram::Render::API::GetMaxIndexRangeLength ( )

    ◆ GetScreen()

    void tram::Render::API::GetScreen ( char *  buffer,
    int  w,
    int  h 
    )

    ◆ Init()

    void tram::Render::API::Init ( )

    ◆ InsertDrawListEntry()

    drawlistentry_t tram::Render::API::InsertDrawListEntry ( )

    ◆ IntColor()

    uint16_t tram::Render::API::IntColor ( vec3  color)

    ◆ IsDebugMode()

    bool tram::Render::API::IsDebugMode ( )

    ◆ light_tree_ids()

    std::vector< uint32_t > tram::Render::API::light_tree_ids ( 200  )

    ◆ LineVisible()

    bool tram::Render::API::LineVisible ( vec4  p0,
    vec4  p1 
    )

    ◆ MakeLight()

    light_t tram::Render::API::MakeLight ( )

    ◆ MakeMaterial()

    material_t tram::Render::API::MakeMaterial ( )

    ◆ MakeSpans()

    template<bool set_span_first>
    void tram::Render::API::MakeSpans ( int32_t  x0,
    int32_t  y0,
    int32_t  x1,
    int32_t  y1,
    int32_t  p0,
    int32_t  p1,
    int32_t  skip_first,
    Scanline **  scanline_array 
    )

    ◆ MakeUniformBuffer()

    uint32_t tram::Render::API::MakeUniformBuffer ( const char *  name,
    uint32_t  binding,
    uint32_t  initial_size 
    )

    ◆ PackVertexBuffer()

    void tram::Render::API::PackVertexBuffer ( vertexarray_t vertex_array,
    VertexDefinition  vertex_format,
    FVFHelper  helper,
    size_t  vertex_count,
    void *  vertex_data 
    )

    ◆ PackVertices()

    void tram::Render::API::PackVertices ( vertexarray_t vertex_array,
    void *  data,
    size_t  count 
    )

    ◆ ParseFormat()

    void tram::Render::API::ParseFormat ( vertexarray_t vertex_array,
    VertexDefinition  vertex_format 
    )

    ◆ PerspectiveDivision() [1/2]

    void tram::Render::API::PerspectiveDivision ( vec4 p)

    ◆ PerspectiveDivision() [2/2]

    void tram::Render::API::PerspectiveDivision ( vec4 p0,
    vec4 p1 
    )

    ◆ PointOutsideBottomPlane()

    bool tram::Render::API::PointOutsideBottomPlane ( vec4  p)

    ◆ PointOutsideFarPlane()

    bool tram::Render::API::PointOutsideFarPlane ( vec4  p)

    ◆ PointOutsideLeftPlane()

    bool tram::Render::API::PointOutsideLeftPlane ( vec4  p)

    ◆ PointOutsideNearPlane()

    bool tram::Render::API::PointOutsideNearPlane ( vec4  p)

    ◆ PointOutsideRightPlane()

    bool tram::Render::API::PointOutsideRightPlane ( vec4  p)

    ◆ PointOutsideTopPlane()

    bool tram::Render::API::PointOutsideTopPlane ( vec4  p)

    ◆ PointVisible()

    bool tram::Render::API::PointVisible ( vec4  p)

    ◆ RasterizeTriangle()

    void tram::Render::API::RasterizeTriangle ( ScanlineBuffer scanlines,
    Point2D vertices 
    )

    ◆ RasterizeTriangleLightmapped()

    void tram::Render::API::RasterizeTriangleLightmapped ( ScanlineBuffer scanlines,
    Point2D vertices,
    uint16_t  color,
    vec2 texture_uvs,
    vec2 lightmap_uvs,
    SWTexture texture,
    SWTexture lightmap 
    )

    ◆ RasterizeTriangleShadedTextured()

    void tram::Render::API::RasterizeTriangleShadedTextured ( ScanlineBuffer scanlines,
    Point2D vertices,
    vec3 colors,
    vec3 speculars,
    vec2 texture_uvs,
    SWTexture texture 
    )

    ◆ RegisterShader()

    void tram::Render::API::RegisterShader ( vertexformat_t  format,
    materialtype_t  type,
    const char *  vertex_shader,
    const char *  fragment_shader 
    )

    ◆ RemoveDrawListEntry()

    void tram::Render::API::RemoveDrawListEntry ( drawlistentry_t  entry)

    ◆ RenderFrame()

    void tram::Render::API::RenderFrame ( )

    ◆ RGBColor()

    vec3 tram::Render::API::RGBColor ( uint16_t  color)

    ◆ ScanlineConvertTriangle()

    void tram::Render::API::ScanlineConvertTriangle ( ScanlineBuffer scanlines,
    Point2D vertices 
    )

    ◆ SetDebugMode()

    void tram::Render::API::SetDebugMode ( bool  mode)

    ◆ SetDevice()

    void tram::Render::API::SetDevice ( void *  new_device)

    ◆ SetDrawListAABB()

    void tram::Render::API::SetDrawListAABB ( drawlistentry_t  entry,
    vec3  min,
    vec3  max 
    )

    ◆ SetDrawListColors()

    void tram::Render::API::SetDrawListColors ( drawlistentry_t  entry,
    size_t  count,
    vec4 color 
    )

    ◆ SetDrawListIndexArray()

    void tram::Render::API::SetDrawListIndexArray ( drawlistentry_t  entry,
    indexarray_t  index_array_handle 
    )

    ◆ SetDrawListIndexRange()

    void tram::Render::API::SetDrawListIndexRange ( drawlistentry_t  entry,
    uint32_t  index_offset,
    uint32_t  index_length 
    )

    ◆ SetDrawListMaterials()

    void tram::Render::API::SetDrawListMaterials ( drawlistentry_t  entry,
    size_t  material_count,
    material_t materials 
    )

    ◆ SetDrawListShader()

    void tram::Render::API::SetDrawListShader ( drawlistentry_t  entry,
    vertexformat_t  vertex_format,
    materialtype_t  material_type 
    )

    ◆ SetDrawListSpecularities()

    void tram::Render::API::SetDrawListSpecularities ( drawlistentry_t  entry,
    size_t  count,
    float *  weights,
    float *  exponents,
    float *  transparencies 
    )

    ◆ SetDrawListSpriteArray()

    void tram::Render::API::SetDrawListSpriteArray ( drawlistentry_t  entry,
    spritearray_t  sprite_array_handle 
    )

    ◆ SetDrawListTextureOffsets()

    void tram::Render::API::SetDrawListTextureOffsets ( drawlistentry_t  entry,
    size_t  count,
    vec4 offset 
    )

    ◆ SetDrawListTextures()

    void tram::Render::API::SetDrawListTextures ( drawlistentry_t  entry,
    size_t  texture_count,
    texturehandle_t textures 
    )

    ◆ SetDrawListVertexArray()

    void tram::Render::API::SetDrawListVertexArray ( drawlistentry_t  entry,
    vertexarray_t  vertex_array_handle 
    )

    ◆ SetEnvironmentMap()

    void tram::Render::API::SetEnvironmentMap ( drawlistentry_t  entry,
    texturehandle_t  environmentmap 
    )

    ◆ SetFadeDistance()

    void tram::Render::API::SetFadeDistance ( drawlistentry_t  entry,
    float  near,
    float  far 
    )

    ◆ SetFlags()

    void tram::Render::API::SetFlags ( drawlistentry_t  entry,
    uint32_t  flags 
    )

    ◆ SetLayer()

    void tram::Render::API::SetLayer ( drawlistentry_t  entry,
    layer_t  layer 
    )

    ◆ SetLightingParameters()

    void tram::Render::API::SetLightingParameters ( vec3  sun_direction,
    vec3  sun_color,
    vec3  ambient_color,
    layer_t  layer 
    )

    ◆ SetLightmap()

    void tram::Render::API::SetLightmap ( drawlistentry_t  entry,
    texturehandle_t  lightmap 
    )

    ◆ SetLightParameters()

    void tram::Render::API::SetLightParameters ( light_t  light,
    vec3  location,
    vec3  color,
    float  distance,
    vec3  direction,
    float  exponent 
    )

    ◆ SetLights()

    void tram::Render::API::SetLights ( drawlistentry_t  entry,
    light_t lights 
    )

    ◆ SetMaterialColor()

    void tram::Render::API::SetMaterialColor ( material_t  material,
    vec4  color 
    )

    ◆ SetMaterialReflectivity()

    void tram::Render::API::SetMaterialReflectivity ( material_t  material,
    float  reflectivity 
    )

    ◆ SetMaterialSpecularExponent()

    void tram::Render::API::SetMaterialSpecularExponent ( material_t  material,
    float  exponent 
    )

    ◆ SetMaterialSpecularTransparency()

    void tram::Render::API::SetMaterialSpecularTransparency ( material_t  material,
    float  transparency 
    )

    ◆ SetMaterialSpecularWeight()

    void tram::Render::API::SetMaterialSpecularWeight ( material_t  material,
    float  weight 
    )

    ◆ SetMaterialTexture()

    void tram::Render::API::SetMaterialTexture ( material_t  material,
    texturehandle_t  texture 
    )

    ◆ SetMatrix()

    void tram::Render::API::SetMatrix ( drawlistentry_t  entry,
    const mat4 matrix 
    )

    ◆ SetPose()

    void tram::Render::API::SetPose ( drawlistentry_t  entry,
    Pose pose 
    )

    ◆ SetProjectionMatrix()

    void tram::Render::API::SetProjectionMatrix ( const mat4 matrix,
    layer_t  layer 
    )

    ◆ SetScreenClear()

    void tram::Render::API::SetScreenClear ( vec3  clear_color,
    bool  clear 
    )

    ◆ SetScreenSize()

    void tram::Render::API::SetScreenSize ( float  width,
    float  height 
    )

    ◆ SetSphericalHarmonic()

    void tram::Render::API::SetSphericalHarmonic ( drawlistentry_t  entry,
    sphericalharmonic_t  harmonic 
    )

    ◆ SetViewMatrix()

    void tram::Render::API::SetViewMatrix ( const mat4 matrix,
    layer_t  layer 
    )

    ◆ SetViewParameters()

    void tram::Render::API::SetViewParameters ( vec3  position,
    quat  rotation,
    uint32_t  layer 
    )

    ◆ TriangleVisible()

    bool tram::Render::API::TriangleVisible ( vec4  p0,
    vec4  p1,
    vec4  p2 
    )

    ◆ UpdateSpriteArray()

    void tram::Render::API::UpdateSpriteArray ( spritearray_t  array,
    size_t  data_size,
    void *  data 
    )

    ◆ UpdateVertexArray()

    void tram::Render::API::UpdateVertexArray ( vertexarray_t vertex_buffer,
    size_t  data_size,
    void *  data 
    )

    ◆ UploadUniformBuffer()

    void tram::Render::API::UploadUniformBuffer ( uint32_t  handle,
    uint32_t  data_size,
    void *  data 
    )

    ◆ VertexDefinitionToFVF()

    FVFHelper tram::Render::API::VertexDefinitionToFVF ( VertexDefinition  vertex_format)

    Variable Documentation

    ◆ bone_uniform_binding

    const uint32_t tram::Render::API::bone_uniform_binding = 3

    ◆ bone_uniform_buffer

    uint32_t tram::Render::API::bone_uniform_buffer

    ◆ clear_screen

    static bool tram::Render::API::clear_screen = true

    ◆ draw_list

    Pool< SWDrawListEntry > tram::Render::API::draw_list ( "render list"  ,
    500  ,
    false   
    )

    ◆ DYNAMIC_VERTEX_FVF

    const DWORD tram::Render::API::DYNAMIC_VERTEX_FVF = D3DFVF_XYZB4 | D3DFVF_LASTBETA_UBYTE4 | D3DFVF_NORMAL | D3DFVF_TEX1

    ◆ index_arrays

    Pool< SWIndexArray > tram::Render::API::index_arrays("index_arrays list", 200, false) ( "index_arrays list"  ,
    200  ,
    false   
    )

    ◆ light_list

    Pool< SWLight > tram::Render::API::light_list ( "light list"  ,
    200  ,
    false   
    )

    ◆ light_tree

    Octree<uint32_t> tram::Render::API::light_tree

    ◆ light_uniform_binding

    const uint32_t tram::Render::API::light_uniform_binding = 2

    ◆ light_uniform_buffer

    uint32_t tram::Render::API::light_uniform_buffer

    ◆ LINE_VERTEX_FVF

    const DWORD tram::Render::API::LINE_VERTEX_FVF = D3DFVF_XYZ | D3DFVF_DIFFUSE

    ◆ matrices

    ShaderUniformMatrices tram::Render::API::matrices

    ◆ matrix_uniform_binding

    const uint32_t tram::Render::API::matrix_uniform_binding = 0

    ◆ matrix_uniform_buffer

    uint32_t tram::Render::API::matrix_uniform_buffer

    ◆ model_matrix_uniform_binding

    const uint32_t tram::Render::API::model_matrix_uniform_binding = 1

    ◆ model_matrix_uniform_buffer

    uint32_t tram::Render::API::model_matrix_uniform_buffer

    ◆ modelMatrices

    ShaderUniformModelMatrices tram::Render::API::modelMatrices

    ◆ scanlines

    ScanlineBuffer* tram::Render::API::scanlines = new ScanlineBuffer

    ◆ screen_clear_color

    static vec3 tram::Render::API::screen_clear_color = {0.2f, 0.3f, 0.3f}

    ◆ shader_path

    const char* tram::Render::API::shader_path = "shaders/gles3/"

    ◆ STATIC_VERTEX_FVF

    const DWORD tram::Render::API::STATIC_VERTEX_FVF = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX2

    ◆ texture_list

    Pool< SWTexture > tram::Render::API::texture_list("texture list", 200, false) ( "texture list"  ,
    200  ,
    false   
    )

    ◆ vertex_arrays

    Pool< SWVertexArray > tram::Render::API::vertex_arrays("vertex_arrays list", 200, false) ( "vertex_arrays list"  ,
    200  ,
    false   
    )

    ◆ vertex_buffer_metadata

    Pool< VertexBufferMetadata > tram::Render::API::vertex_buffer_metadata("vertex buffer metadata", 500, false) ( "vertex buffer metadata"  ,
    500  ,
    false   
    )
    ================================================ FILE: docs/cppapi/namespacetram_1_1_render_1_1_light_tree.html ================================================ Tramway SDK: tram::Render::LightTree Namespace Reference
    Tramway SDK v0.1.1
    tram::Render::LightTree Namespace Reference

    Scene light tree. More...

    Classes

    struct  Light
     

    Functions

    Octree< Light * > light_tree ("light tree", 200)
     
    void AddLight (light_t light, vec3 pos, float dist)
     Adds a light to the light tree. More...
     
    void FindLights (vec3 position, light_t *dest)
     Finds the 4 nearest lights to a given position. More...
     
    void RemoveLight (light_t light)
     Removes a light from the light tree. More...
     

    Variables

    Pool< Lightlight_list ("lighttree pool", 200)
     

    Detailed Description

    Scene light tree.

    Contains all of the dynamic lights in the scene. Useful for finding which lights are illuminating a certain 3D model in the scene.

    Internally uses an Octree.

    Function Documentation

    ◆ AddLight()

    void tram::Render::LightTree::AddLight ( light_t  light,
    vec3  pos,
    float  dist 
    )

    Adds a light to the light tree.

    ◆ FindLights()

    void tram::Render::LightTree::FindLights ( vec3  position,
    light_t dest 
    )

    Finds the 4 nearest lights to a given position.

    Parameters
    positionPosition from which the lights will be searched.
    destPointer to an array of 4 light_t.

    ◆ light_tree()

    Octree< Light * > tram::Render::LightTree::light_tree ( "light tree"  ,
    200   
    )

    ◆ RemoveLight()

    void tram::Render::LightTree::RemoveLight ( light_t  light)

    Removes a light from the light tree.

    Variable Documentation

    ◆ light_list

    Pool< Light > tram::Render::LightTree::light_list("lighttree pool", 200) ( "lighttree pool"  ,
    200   
    )
    ================================================ FILE: docs/cppapi/namespacetram_1_1_render_1_1_open_g_l.html ================================================ Tramway SDK: tram::Render::OpenGL Namespace Reference
    Tramway SDK
    tram::Render::OpenGL Namespace Reference

    Classes

    struct  DrawListEntry
     
    struct  FragmentShader
     
    struct  LayerParameters
     
    struct  LightListEntry
     
    struct  LinkedShader
     
    class  ShaderBuffer
     
    struct  ShaderUniformMatrices
     
    struct  ShaderUniformModelMatrices
     
    struct  VertexShader
     

    Functions

    void Init ()
     
    void Render ()
     
    void SetScreenSize (float width, float height)
     
    drawlistentry_t InsertDrawListEntry ()
     
    uint32_t GetFlags (drawlistentry_t entry)
     
    void SetFlags (drawlistentry_t entry, uint32_t flags)
     
    void SetPose (drawlistentry_t entry, Pose *pose)
     
    void SetLightmap (drawlistentry_t entry, uint32_t lightmap)
     
    void SetLights (drawlistentry_t entry, uint32_t *lights)
     
    void SetMatrix (drawlistentry_t entry, const mat4 &matrix)
     
    void SetDrawListVertexArray (drawlistentry_t entry, uint32_t vertex_array_handle)
     
    void SetDrawListIndexRange (drawlistentry_t entry, uint32_t index_offset, uint32_t index_length)
     
    void SetDrawListShader (drawlistentry_t entry, vertexformat_t vertex_format, materialtype_t material_type)
     
    void SetDrawListTextures (drawlistentry_t entry, size_t texture_count, uint32_t *textures)
     
    void SetScreenClear (vec3 clear_color, bool clear)
     
    void SetLightingParameters (vec3 sun_direction, vec3 sun_color, vec3 ambient_color, uint32_t layer)
     
    void SetCameraParameters (vec3 position, quat rotation, uint32_t layer)
     
    light_t MakeLight ()
     
    void DeleteLight (light_t light)
     
    void SetLightParameters (light_t light, vec3 location, vec3 color, float distance)
     
    void RemoveDrawListEntry (drawlistentry_t entry)
     
    uint32_t CreateTexture (ColorMode color_mode, TextureFilter texture_filter, uint32_t width, uint32_t height, void *data)
     
    void CreateIndexedVertexArray (VertexDefinition vertex_format, vertexhandle_t &vertex_buffer_handle, vertexhandle_t &index_buffer_handle, vertexhandle_t &vertex_array_handle, size_t vertex_size, void *vertex_data, size_t index_size, void *index_data)
     
    void CreateVertexArray (VertexDefinition vertex_format, vertexhandle_t &vertex_buffer_handle, vertexhandle_t &vertex_array_handle)
     
    void UpdateVertexArray (vertexhandle_t vertex_buffer_handle, size_t data_size, void *data)
     
    void RenderFrame ()
     
    std::vector< uint32_t > light_tree_ids (200)
     
    uint32_t MakeUniformBuffer (const char *name, uint32_t binding, uint32_t initial_size)
     
    void UploadUniformBuffer (uint32_t handle, uint32_t data_size, void *data)
     
    void CompileShaders ()
     
    uint32_t FindShader (vertexformat_t format, materialtype_t type)
     
    void RegisterShader (vertexformat_t format, materialtype_t type, const char *vertex_shader, const char *fragment_shader)
     
    void BindUniformBlock (const char *name, uint32_t binding)
     
    uint32_t LoadVertexShader (name_t name)
     
    uint32_t LoadFragmentShader (name_t name)
     
    uint32_t LinkShader (uint32_t vertex_shader, uint32_t fragment_shader)
     
    void BindTextures (uint32_t shader)
     

    Variables

    Pool< DrawListEntrydraw_list ("render list", 500, false)
     
    Pool< LightListEntrylight_list ("light list", 200, false)
     
    Octree< uint32_t > light_tree
     
    ShaderUniformMatrices matrices
     
    ShaderUniformModelMatrices modelMatrices
     
    const uint32_t matrix_uniform_binding = 0
     
    const uint32_t model_matrix_uniform_binding = 1
     
    const uint32_t light_uniform_binding = 2
     
    const uint32_t bone_uniform_binding = 3
     
    uint32_t matrix_uniform_buffer
     
    uint32_t model_matrix_uniform_buffer
     
    uint32_t light_uniform_buffer
     
    uint32_t bone_uniform_buffer
     
    vec3 screen_clear_color = {0.2f, 0.3f, 0.3f}
     
    bool clear_screen = true
     
    const uint32_t MAX_MATERIAL_TYPES = 10
     
    const uint32_t MAX_VERTEX_FORMATS = 10
     
    const uint32_t MAX_VERTEX_SHADERS = 20
     
    const uint32_t MAX_FRAGMENT_SHADERS = 20
     
    const uint32_t MAX_LINKED_SHADERS = 40
     
    const char * shader_path = "shaders/opengl3/"
     

    Function Documentation

    ◆ BindTextures()

    void tram::Render::OpenGL::BindTextures ( uint32_t  shader)

    ◆ BindUniformBlock()

    void tram::Render::OpenGL::BindUniformBlock ( const char *  name,
    uint32_t  binding 
    )

    ◆ CompileShaders()

    void tram::Render::OpenGL::CompileShaders ( )

    ◆ CreateIndexedVertexArray()

    void tram::Render::OpenGL::CreateIndexedVertexArray ( VertexDefinition  vertex_format,
    vertexhandle_t vertex_buffer_handle,
    vertexhandle_t index_buffer_handle,
    vertexhandle_t vertex_array_handle,
    size_t  vertex_size,
    void *  vertex_data,
    size_t  index_size,
    void *  index_data 
    )

    ◆ CreateTexture()

    texturehandle_t tram::Render::OpenGL::CreateTexture ( ColorMode  color_mode,
    TextureFilter  texture_filter,
    uint32_t  width,
    uint32_t  height,
    void *  data 
    )

    ◆ CreateVertexArray()

    void tram::Render::OpenGL::CreateVertexArray ( VertexDefinition  vertex_format,
    vertexhandle_t vertex_buffer_handle,
    vertexhandle_t vertex_array_handle 
    )

    ◆ DeleteLight()

    void tram::Render::OpenGL::DeleteLight ( light_t  light)

    ◆ FindShader()

    uint32_t tram::Render::OpenGL::FindShader ( vertexformat_t  format,
    materialtype_t  type 
    )

    ◆ GetFlags()

    uint32_t tram::Render::OpenGL::GetFlags ( drawlistentry_t  entry)

    ◆ Init()

    void tram::Render::OpenGL::Init ( )

    ◆ InsertDrawListEntry()

    drawlistentry_t tram::Render::OpenGL::InsertDrawListEntry ( )

    ◆ light_tree_ids()

    std::vector< uint32_t > tram::Render::OpenGL::light_tree_ids ( 200  )

    ◆ LinkShader()

    uint32_t tram::Render::OpenGL::LinkShader ( uint32_t  vertex_shader,
    uint32_t  fragment_shader 
    )

    ◆ LoadFragmentShader()

    uint32_t tram::Render::OpenGL::LoadFragmentShader ( name_t  name)

    ◆ LoadVertexShader()

    uint32_t tram::Render::OpenGL::LoadVertexShader ( name_t  name)

    ◆ MakeLight()

    light_t tram::Render::OpenGL::MakeLight ( )

    ◆ MakeUniformBuffer()

    uint32_t tram::Render::OpenGL::MakeUniformBuffer ( const char *  name,
    uint32_t  binding,
    uint32_t  initial_size 
    )

    ◆ RegisterShader()

    void tram::Render::OpenGL::RegisterShader ( vertexformat_t  format,
    materialtype_t  type,
    const char *  vertex_shader,
    const char *  fragment_shader 
    )

    ◆ RemoveDrawListEntry()

    void tram::Render::OpenGL::RemoveDrawListEntry ( drawlistentry_t  entry)

    ◆ Render()

    void tram::Render::OpenGL::Render ( )

    ◆ RenderFrame()

    void tram::Render::OpenGL::RenderFrame ( )

    ◆ SetCameraParameters()

    void tram::Render::OpenGL::SetCameraParameters ( vec3  position,
    quat  rotation,
    uint32_t  layer 
    )

    ◆ SetDrawListIndexRange()

    void tram::Render::OpenGL::SetDrawListIndexRange ( drawlistentry_t  entry,
    uint32_t  index_offset,
    uint32_t  index_length 
    )

    ◆ SetDrawListShader()

    void tram::Render::OpenGL::SetDrawListShader ( drawlistentry_t  entry,
    vertexformat_t  vertex_format,
    materialtype_t  material_type 
    )

    ◆ SetDrawListTextures()

    void tram::Render::OpenGL::SetDrawListTextures ( drawlistentry_t  entry,
    size_t  texture_count,
    uint32_t *  textures 
    )

    ◆ SetDrawListVertexArray()

    void tram::Render::OpenGL::SetDrawListVertexArray ( drawlistentry_t  entry,
    uint32_t  vertex_array_handle 
    )

    ◆ SetFlags()

    void tram::Render::OpenGL::SetFlags ( drawlistentry_t  entry,
    uint32_t  flags 
    )

    ◆ SetLightingParameters()

    void tram::Render::OpenGL::SetLightingParameters ( vec3  sun_direction,
    vec3  sun_color,
    vec3  ambient_color,
    uint32_t  layer 
    )

    ◆ SetLightmap()

    void tram::Render::OpenGL::SetLightmap ( drawlistentry_t  entry,
    uint32_t  lightmap 
    )

    ◆ SetLightParameters()

    void tram::Render::OpenGL::SetLightParameters ( light_t  light,
    vec3  location,
    vec3  color,
    float  distance 
    )

    ◆ SetLights()

    void tram::Render::OpenGL::SetLights ( drawlistentry_t  entry,
    uint32_t *  lights 
    )

    ◆ SetMatrix()

    void tram::Render::OpenGL::SetMatrix ( drawlistentry_t  entry,
    const mat4 matrix 
    )

    ◆ SetPose()

    void tram::Render::OpenGL::SetPose ( drawlistentry_t  entry,
    Pose pose 
    )

    ◆ SetScreenClear()

    void tram::Render::OpenGL::SetScreenClear ( vec3  clear_color,
    bool  clear 
    )

    ◆ SetScreenSize()

    void tram::Render::OpenGL::SetScreenSize ( float  width,
    float  height 
    )

    ◆ UpdateVertexArray()

    void tram::Render::OpenGL::UpdateVertexArray ( vertexhandle_t  vertex_buffer_handle,
    size_t  data_size,
    void *  data 
    )

    ◆ UploadUniformBuffer()

    void tram::Render::OpenGL::UploadUniformBuffer ( uint32_t  handle,
    uint32_t  data_size,
    void *  data 
    )

    Variable Documentation

    ◆ bone_uniform_binding

    const uint32_t tram::Render::OpenGL::bone_uniform_binding = 3

    ◆ bone_uniform_buffer

    uint32_t tram::Render::OpenGL::bone_uniform_buffer

    ◆ clear_screen

    bool tram::Render::OpenGL::clear_screen = true

    ◆ draw_list

    Pool< DrawListEntry > tram::Render::OpenGL::draw_list("render list", 500, false) ( "render list"  ,
    500  ,
    false   
    )

    ◆ light_list

    Pool< LightListEntry > tram::Render::OpenGL::light_list("light list", 200, false) ( "light list"  ,
    200  ,
    false   
    )

    ◆ light_tree

    Octree<uint32_t> tram::Render::OpenGL::light_tree

    ◆ light_uniform_binding

    const uint32_t tram::Render::OpenGL::light_uniform_binding = 2

    ◆ light_uniform_buffer

    uint32_t tram::Render::OpenGL::light_uniform_buffer

    ◆ matrices

    ShaderUniformMatrices tram::Render::OpenGL::matrices

    ◆ matrix_uniform_binding

    const uint32_t tram::Render::OpenGL::matrix_uniform_binding = 0

    ◆ matrix_uniform_buffer

    uint32_t tram::Render::OpenGL::matrix_uniform_buffer

    ◆ MAX_FRAGMENT_SHADERS

    const uint32_t tram::Render::OpenGL::MAX_FRAGMENT_SHADERS = 20

    ◆ MAX_LINKED_SHADERS

    const uint32_t tram::Render::OpenGL::MAX_LINKED_SHADERS = 40

    ◆ MAX_MATERIAL_TYPES

    const uint32_t tram::Render::OpenGL::MAX_MATERIAL_TYPES = 10

    ◆ MAX_VERTEX_FORMATS

    const uint32_t tram::Render::OpenGL::MAX_VERTEX_FORMATS = 10

    ◆ MAX_VERTEX_SHADERS

    const uint32_t tram::Render::OpenGL::MAX_VERTEX_SHADERS = 20

    ◆ model_matrix_uniform_binding

    const uint32_t tram::Render::OpenGL::model_matrix_uniform_binding = 1

    ◆ model_matrix_uniform_buffer

    uint32_t tram::Render::OpenGL::model_matrix_uniform_buffer

    ◆ modelMatrices

    ShaderUniformModelMatrices tram::Render::OpenGL::modelMatrices

    ◆ screen_clear_color

    vec3 tram::Render::OpenGL::screen_clear_color = {0.2f, 0.3f, 0.3f}

    ◆ shader_path

    const char* tram::Render::OpenGL::shader_path = "shaders/opengl3/"
    ================================================ FILE: docs/cppapi/namespacetram_1_1_render_1_1_scene_tree.html ================================================ Tramway SDK: tram::Render::SceneTree Namespace Reference
    Tramway SDK v0.1.1
    tram::Render::SceneTree Namespace Reference

    Scene tree. More...

    Detailed Description

    Scene tree.

    Contains the AABBs of all 3D models in the scene. Useful for quickly querying the scene, doing raycasts on the 3D geometry, etc.

    Internally uses an AABB tree.

    ================================================ FILE: docs/cppapi/namespacetram_1_1_script.html ================================================ Tramway SDK: tram::Script Namespace Reference
    Tramway SDK v0.1.1
    tram::Script Namespace Reference

    Scripting API. More...

    Classes

    class  Interface
     

    Functions

    void SetGlobal (name_t name, value_t value)
     
    value_t GetGlobal (name_t name)
     
    void SetFunction (name_t name, std::vector< Type > parameters, value_t(*function)(valuearray_t))
     
    value_t CallFunction (name_t name, std::vector< Value > parameters)
     
    value_t Evaluate (const char *code)
     
    void SetInterface (Interface *new_language)
     
    void LoadScript (const char *path)
     
    void Init ()
     

    Detailed Description

    Scripting API.

    Allows calling scripting language functions and allows them to call into framework functions.

    See also
    https://racenis.github.io/tram-sdk/documentation/framework/script.html

    Function Documentation

    ◆ CallFunction()

    value_t tram::Script::CallFunction ( name_t  name,
    std::vector< Value parameters 
    )

    ◆ Evaluate()

    value_t tram::Script::Evaluate ( const char *  code)

    ◆ GetGlobal()

    value_t tram::Script::GetGlobal ( name_t  name)

    ◆ Init()

    void tram::Script::Init ( )

    ◆ LoadScript()

    void tram::Script::LoadScript ( const char *  path)

    ◆ SetFunction()

    void tram::Script::SetFunction ( name_t  name,
    std::vector< Type parameters,
    value_t(*)(valuearray_t function 
    )

    ◆ SetGlobal()

    void tram::Script::SetGlobal ( name_t  name,
    value_t  value 
    )

    ◆ SetInterface()

    void tram::Script::SetInterface ( Interface new_language)
    ================================================ FILE: docs/cppapi/namespacetram_1_1_scriptable_type.html ================================================ Tramway SDK: tram::ScriptableType Namespace Reference
    Tramway SDK v0.1.1
    tram::ScriptableType Namespace Reference

    Classes

    struct  ScriptableTypeInfo
     

    Functions

    void Register (name_t base_type, Entity *(*constr_func)(name_t new_type, const SharedEntityData &, const ValueArray &), void(*destr_func)(Entity *))
     
    EntityMake (name_t base_type, name_t new_type, const SharedEntityData &data, const ValueArray &array)
     
    void Yeet (Entity *yeetable)
     

    Function Documentation

    ◆ Make()

    Entity * tram::ScriptableType::Make ( name_t  base_type,
    name_t  new_type,
    const SharedEntityData data,
    const ValueArray array 
    )

    ◆ Register()

    void tram::ScriptableType::Register ( name_t  base_type,
    Entity *(*)(name_t new_type, const SharedEntityData &, const ValueArray &)  constr_func,
    void(*)(Entity *)  destr_func 
    )

    ◆ Yeet()

    void tram::ScriptableType::Yeet ( Entity yeetable)
    ================================================ FILE: docs/cppapi/namespacetram_1_1_settings.html ================================================ Tramway SDK: tram::Settings Namespace Reference
    Tramway SDK v0.1.1
    tram::Settings Namespace Reference

    Application setting management and CLI command parser. More...

    Classes

    struct  Property
     
    struct  RawSetting
     
    struct  SettingInfo
     

    Enumerations

    enum  : uint32_t { USER = 1 , APPLICATION = 2 , MENU = 4 , NONE = 0 }
     

    Functions

    void SetFromRaw (SettingInfo &info)
     
    void SetAndStore (SettingInfo info)
     
    void Register (bool &value, const char *name, uint32_t flags)
     
    void Register (float &value, const char *name, uint32_t flags)
     
    void Register (int32_t &value, const char *name, uint32_t flags)
     
    void Register (uint32_t &value, const char *name, uint32_t flags)
     
    Value Get (name_t name)
     
    void Set (name_t name, Value value)
     
    void Parse (const char **argv, int argc)
     
    uint32_t Flags (name_t name)
     
    std::vector< name_tGetSettings (uint32_t filter)
     
    void Save (const char *file)
     
    void Load (const char *file)
     

    Variables

    const int SETTING_LIMIT = 200
     

    Detailed Description

    Application setting management and CLI command parser.

    Enumeration Type Documentation

    ◆ anonymous enum

    anonymous enum : uint32_t
    Enumerator
    USER 
    APPLICATION 
    MENU 
    NONE 

    Function Documentation

    ◆ Flags()

    uint32_t tram::Settings::Flags ( name_t  name)

    ◆ Get()

    Value tram::Settings::Get ( name_t  name)

    ◆ GetSettings()

    std::vector< name_t > tram::Settings::GetSettings ( uint32_t  filter)

    ◆ Load()

    void tram::Settings::Load ( const char *  file)

    ◆ Parse()

    void tram::Settings::Parse ( const char **  argv,
    int  argc 
    )

    ◆ Register() [1/4]

    void tram::Settings::Register ( bool &  value,
    const char *  name,
    uint32_t  flags 
    )

    ◆ Register() [2/4]

    void tram::Settings::Register ( float &  value,
    const char *  name,
    uint32_t  flags 
    )

    ◆ Register() [3/4]

    void tram::Settings::Register ( int32_t &  value,
    const char *  name,
    uint32_t  flags 
    )

    ◆ Register() [4/4]

    void tram::Settings::Register ( uint32_t &  value,
    const char *  name,
    uint32_t  flags 
    )

    ◆ Save()

    void tram::Settings::Save ( const char *  file)

    ◆ Set()

    void tram::Settings::Set ( name_t  name,
    Value  value 
    )

    ◆ SetAndStore()

    void tram::Settings::SetAndStore ( SettingInfo  info)

    ◆ SetFromRaw()

    void tram::Settings::SetFromRaw ( SettingInfo info)

    Variable Documentation

    ◆ SETTING_LIMIT

    const int tram::Settings::SETTING_LIMIT = 200
    ================================================ FILE: docs/cppapi/namespacetram_1_1_stats.html ================================================ Tramway SDK: tram::Stats Namespace Reference
    Tramway SDK v0.1.1
    tram::Stats Namespace Reference

    Resource usage statistics. More...

    Classes

    struct  SystemStat
     

    Enumerations

    enum  Resource : uint32_t { RESOURCE_VRAM , RESOURCE_DRAWCALL }
     

    Functions

    void Start (System::system_t system)
     Starts counting time spent on a system. More...
     
    void Stop (System::system_t system)
     Stops counting time spent on a system. More...
     
    void Add (Resource resource, size_t ammount)
     Adds an ammount of a resource. More...
     
    void Remove (Resource resource, size_t ammount)
     Removes an ammount of a resource. More...
     
    void Collate ()
     Collates all of the time statistics. More...
     
    size_t GetStat (Resource resource)
     Returns the uncollated ammount of a resource. More...
     
    double GetStat (System::system_t system)
     Returns the collated time of a system. More...
     
    double GetStatUncollated (System::system_t system)
     Returns the uncollated time of a system. More...
     
    double GetStatAverage (System::system_t system)
     Returns the ammount of resource, averaged over the last second. More...
     

    Detailed Description

    Resource usage statistics.

    Keeps track of resource usage, time spent by different systems, as well as various other counters.

    See also
    https://racenis.github.io/tram-sdk/documentation/framework/stats.html

    Enumeration Type Documentation

    ◆ Resource

    enum tram::Stats::Resource : uint32_t
    Enumerator
    RESOURCE_VRAM 
    RESOURCE_DRAWCALL 

    Function Documentation

    ◆ Add()

    void tram::Stats::Add ( Resource  resource,
    size_t  ammount 
    )

    Adds an ammount of a resource.

    ◆ Collate()

    void tram::Stats::Collate ( )

    Collates all of the time statistics.

    ◆ GetStat() [1/2]

    size_t tram::Stats::GetStat ( Resource  resource)

    Returns the uncollated ammount of a resource.

    ◆ GetStat() [2/2]

    double tram::Stats::GetStat ( System::system_t  system)

    Returns the collated time of a system.

    ◆ GetStatAverage()

    double tram::Stats::GetStatAverage ( System::system_t  system)

    Returns the ammount of resource, averaged over the last second.

    ◆ GetStatUncollated()

    double tram::Stats::GetStatUncollated ( System::system_t  system)

    Returns the uncollated time of a system.

    ◆ Remove()

    void tram::Stats::Remove ( Resource  resource,
    size_t  ammount 
    )

    Removes an ammount of a resource.

    ◆ Start()

    void tram::Stats::Start ( System::system_t  system)

    Starts counting time spent on a system.

    ◆ Stop()

    void tram::Stats::Stop ( System::system_t  system)

    Stops counting time spent on a system.

    ================================================ FILE: docs/cppapi/namespacetram_1_1_system.html ================================================ Tramway SDK: tram::System Namespace Reference
    Tramway SDK v0.1.1
    tram::System Namespace Reference

    System tracking. More...

    Classes

    struct  SystemInfo
     

    Typedefs

    typedef uint32_t system_t
     

    Enumerations

    enum  System : system_t {
      INVALID , CORE , PLATFORM , UI ,
      GUI , ASYNC , RENDER , PHYSICS ,
      AUDIO , MISC , SYSTEM_LAST
    }
     
    enum  SystemState { YEET , INIT , READY }
     

    Functions

    uint32_t Register (char const *name, char const *short_name)
     Registers a new system. More...
     
    system_t Find (char const *name)
     Registers a registered system. More...
     
    char const * GetName (uint32_t system)
     Retrieves the full name of a system. More...
     
    char const * GetShortName (uint32_t system)
     Retrieves the short name of a system. More...
     
    void SetInitialized (uint32_t system, bool is_initialized)
     Sets the initialization status of a system. More...
     
    bool IsInitialized (uint32_t system)
     Checks if a system is initialized. More...
     
    void SetState (system_t system, SystemState state)
     Sets the state of a system. More...
     
    void AssertDependency (system_t system)
     
    system_t GetSystemCount ()
     Returns the total count of registered systems. More...
     

    Detailed Description

    System tracking.

    This system keeps track of other systems, their initialization status, as well as their names.

    See also
    https://racenis.github.io/tram-sdk/documentation/framework/system.html

    Typedef Documentation

    ◆ system_t

    typedef uint32_t tram::System::system_t

    Enumeration Type Documentation

    ◆ System

    Enumerator
    INVALID 
    CORE 
    PLATFORM 
    UI 
    GUI 
    ASYNC 
    RENDER 
    PHYSICS 
    AUDIO 
    MISC 
    SYSTEM_LAST 

    ◆ SystemState

    Enumerator
    YEET 
    INIT 
    READY 

    Function Documentation

    ◆ AssertDependency()

    void tram::System::AssertDependency ( system_t  system)

    ◆ Find()

    system_t tram::System::Find ( char const *  name)

    Registers a registered system.

    If the system was registered with the Register() function, its system_t identificator will be returned. If a system with the name was not registered, this function will return a SYSTEM_INVALID identificator.

    ◆ GetName()

    char const * tram::System::GetName ( uint32_t  system)

    Retrieves the full name of a system.

    ◆ GetShortName()

    char const * tram::System::GetShortName ( uint32_t  system)

    Retrieves the short name of a system.

    ◆ GetSystemCount()

    uint32_t tram::System::GetSystemCount ( )

    Returns the total count of registered systems.

    ◆ IsInitialized()

    bool tram::System::IsInitialized ( uint32_t  system)

    Checks if a system is initialized.

    ◆ Register()

    system_t tram::System::Register ( char const *  name,
    char const *  short_name 
    )

    Registers a new system.

    Parameters
    nameFull name of the system.
    short_nameName of the system that will be displayed in log messages.

    ◆ SetInitialized()

    void tram::System::SetInitialized ( uint32_t  system,
    bool  is_initialized 
    )

    Sets the initialization status of a system.

    ◆ SetState()

    void tram::System::SetState ( system_t  system,
    SystemState  state 
    )

    Sets the state of a system.

    • YEET when a system is uninitialized.
    • INIT when a system is initializing.
    • READY when a system is initialized.
    ================================================ FILE: docs/cppapi/namespacetram_1_1_u_i.html ================================================ Tramway SDK: tram::UI Namespace Reference
    Tramway SDK v0.1.1
    tram::UI Namespace Reference

    User interface system. More...

    Classes

    struct  KeyBinding
     

    Typedefs

    typedef uint16_t keyboardaction_t
     

    Enumerations

    enum  KeyboardKey : uint16_t {
      KEY_SPACE , KEY_APOSTROPHE , KEY_COMMA , KEY_MINUS ,
      KEY_PERIOD , KEY_SLASH , KEY_0 , KEY_1 ,
      KEY_2 , KEY_3 , KEY_4 , KEY_5 ,
      KEY_6 , KEY_7 , KEY_8 , KEY_9 ,
      KEY_SEMICOLON , KEY_EQUAL , KEY_A , KEY_B ,
      KEY_C , KEY_D , KEY_E , KEY_F ,
      KEY_G , KEY_H , KEY_I , KEY_J ,
      KEY_K , KEY_L , KEY_M , KEY_N ,
      KEY_O , KEY_P , KEY_Q , KEY_R ,
      KEY_S , KEY_T , KEY_U , KEY_V ,
      KEY_W , KEY_X , KEY_Y , KEY_Z ,
      KEY_LEFT_BRACKET , KEY_BACKSLASH , KEY_RIGHT_BRACKET , KEY_GRAVE_ACCENT ,
      KEY_WORLD_1 , KEY_WORLD_2 , KEY_ESCAPE , KEY_ENTER ,
      KEY_TAB , KEY_BACKSPACE , KEY_INSERT , KEY_DELETE ,
      KEY_RIGHT , KEY_LEFT , KEY_DOWN , KEY_UP ,
      KEY_PAGE_UP , KEY_PAGE_DOWN , KEY_HOME , KEY_END ,
      KEY_CAPS_LOCK , KEY_SCROLL_LOCK , KEY_NUM_LOCK , KEY_PRINT_SCREEN ,
      KEY_PAUSE , KEY_F1 , KEY_F2 , KEY_F3 ,
      KEY_F4 , KEY_F5 , KEY_F6 , KEY_F7 ,
      KEY_F8 , KEY_F9 , KEY_F10 , KEY_F11 ,
      KEY_F12 , KEY_F13 , KEY_F14 , KEY_F15 ,
      KEY_F16 , KEY_F17 , KEY_F18 , KEY_F19 ,
      KEY_F20 , KEY_F21 , KEY_F22 , KEY_F23 ,
      KEY_F24 , KEY_F25 , KEY_KP_0 , KEY_KP_1 ,
      KEY_KP_2 , KEY_KP_3 , KEY_KP_4 , KEY_KP_5 ,
      KEY_KP_6 , KEY_KP_7 , KEY_KP_8 , KEY_KP_9 ,
      KEY_KP_DECIMAL , KEY_KP_DIVIDE , KEY_KP_MULTIPLY , KEY_KP_SUBTRACT ,
      KEY_KP_ADD , KEY_KP_ENTER , KEY_KP_EQUAL , KEY_LEFT_SHIFT ,
      KEY_LEFT_CONTROL , KEY_LEFT_ALT , KEY_LEFT_SUPER , KEY_RIGHT_SHIFT ,
      KEY_RIGHT_CONTROL , KEY_RIGHT_ALT , KEY_RIGHT_SUPER , KEY_MENU ,
      KEY_RIGHTMOUSE , KEY_LEFTMOUSE , KEY_MIDDLEMOUSE , KEY_LASTKEY
    }
     
    enum  KeyboardAxis : uint16_t { KEY_MOUSE_X , KEY_MOUSE_Y , KEY_MOUSE_SCROLL , KEY_LASTAXIS }
     
    enum  InputState {
      STATE_DEFAULT , STATE_NO_INPUT , STATE_FLYING , STATE_MENU_OPEN ,
      STATE_CURSOR
    }
     
    enum  KeyboardAction : keyboardaction_t {
      KEY_ACTION_NONE , KEY_ACTION_FORWARD , KEY_ACTION_BACKWARD , KEY_ACTION_STRAFE_LEFT ,
      KEY_ACTION_STRAFE_RIGHT , KEY_ACTION_UP , KEY_ACTION_DOWN , KEY_ACTION_LEFT ,
      KEY_ACTION_RIGHT , KEY_ACTION_JUMP , KEY_ACTION_CROUCH , KEY_ACTION_SPRINT ,
      KEY_ACTION_FLY , KEY_ACTION_ACTIVATE , KEY_ACTION_PRIMARY , KEY_ACTION_SECONDARY ,
      KEY_ACTION_LAST
    }
     
    enum  CursorType { CURSOR_DEFAULT , CURSOR_TEXT , CURSOR_CLICK }
     

    Functions

    void BindKeyboardKey (KeyboardKey key, keyboardaction_t action)
     
    void BindKeyboardKey (KeyboardKey key, void(*action)())
     
    void BindKeyboardKey (KeyboardKey key, void(*action)(KeyboardKey))
     
    void Init ()
     Initializes the UI system. More...
     
    void Uninit ()
     Uninitializes the UI system. More...
     
    void Update ()
     Updates the UI system. More...
     
    void EndFrame ()
     Ends the frame and updates the window. More...
     
    void SetWebMainLoop (void(*loop_function)(void))
     
    float GetScreenWidth ()
     
    float GetScreenHeight ()
     
    void SetWindowTitle (const char *title)
     
    void SetWindowSize (int w, int h)
     Sets the window size. More...
     
    void SetCursor (CursorType cursor)
     
    void SetInputState (InputState state)
     
    InputState GetInputState ()
     
    bool PollKeyboardKey (KeyboardKey key)
     Checks the state of a key for the current frame. More...
     
    float PollKeyboardAxis (KeyboardAxis key)
     Checks the state of an axis for the current frame. More...
     
    float PollKeyboardAxisDelta (KeyboardAxis key)
     Checks the change of an axis for since the last frame. More...
     
    float GetAxisSensitivity (KeyboardAxis key)
     
    void SetAxisSensitivity (KeyboardAxis key, float value)
     
    void KeyPress (KeyboardKey key)
     
    void KeyRelease (KeyboardKey key)
     
    void KeyCode (uint16_t code)
     
    void KeyMouse (float xpos, float ypos)
     
    void KeyScroll (float value)
     
    void ScreenResize (int width, int height)
     
    void ScreenClose ()
     
    bool ShouldExit ()
     
    keyboardaction_t RegisterKeyboardAction (const char *name)
     
    keyboardaction_t GetKeyboardAction (name_t name)
     
    name_t GetKeyboardActionName (keyboardaction_t type)
     
    std::vector< std::pair< keyboardaction_t, std::vector< KeyboardKey > > > GetAllKeyboardKeyBindings ()
     
    const char * GetKeyboardKeyName (KeyboardKey key)
     

    Variables

    const float CAMERA_SENSITIVITY = 6.0f
     
    const float CAMERA_SPEED = 6.0f
     

    Detailed Description

    User interface system.

    Handles opening the window, taking in keyboard and mouse inputs.

    See also
    https://racenis.github.io/tram-sdk/documentation/framework/ui.html

    Typedef Documentation

    ◆ keyboardaction_t

    typedef uint16_t tram::UI::keyboardaction_t

    Enumeration Type Documentation

    ◆ CursorType

    Enumerator
    CURSOR_DEFAULT 
    CURSOR_TEXT 
    CURSOR_CLICK 

    ◆ InputState

    Enumerator
    STATE_DEFAULT 
    STATE_NO_INPUT 
    STATE_FLYING 
    STATE_MENU_OPEN 
    STATE_CURSOR 

    ◆ KeyboardAction

    Enumerator
    KEY_ACTION_NONE 
    KEY_ACTION_FORWARD 
    KEY_ACTION_BACKWARD 
    KEY_ACTION_STRAFE_LEFT 
    KEY_ACTION_STRAFE_RIGHT 
    KEY_ACTION_UP 
    KEY_ACTION_DOWN 
    KEY_ACTION_LEFT 
    KEY_ACTION_RIGHT 
    KEY_ACTION_JUMP 
    KEY_ACTION_CROUCH 
    KEY_ACTION_SPRINT 
    KEY_ACTION_FLY 
    KEY_ACTION_ACTIVATE 
    KEY_ACTION_PRIMARY 
    KEY_ACTION_SECONDARY 
    KEY_ACTION_LAST 

    ◆ KeyboardAxis

    enum tram::UI::KeyboardAxis : uint16_t
    Enumerator
    KEY_MOUSE_X 
    KEY_MOUSE_Y 
    KEY_MOUSE_SCROLL 
    KEY_LASTAXIS 

    ◆ KeyboardKey

    enum tram::UI::KeyboardKey : uint16_t
    Enumerator
    KEY_SPACE 
    KEY_APOSTROPHE 
    KEY_COMMA 
    KEY_MINUS 
    KEY_PERIOD 
    KEY_SLASH 
    KEY_0 
    KEY_1 
    KEY_2 
    KEY_3 
    KEY_4 
    KEY_5 
    KEY_6 
    KEY_7 
    KEY_8 
    KEY_9 
    KEY_SEMICOLON 
    KEY_EQUAL 
    KEY_A 
    KEY_B 
    KEY_C 
    KEY_D 
    KEY_E 
    KEY_F 
    KEY_G 
    KEY_H 
    KEY_I 
    KEY_J 
    KEY_K 
    KEY_L 
    KEY_M 
    KEY_N 
    KEY_O 
    KEY_P 
    KEY_Q 
    KEY_R 
    KEY_S 
    KEY_T 
    KEY_U 
    KEY_V 
    KEY_W 
    KEY_X 
    KEY_Y 
    KEY_Z 
    KEY_LEFT_BRACKET 
    KEY_BACKSLASH 
    KEY_RIGHT_BRACKET 
    KEY_GRAVE_ACCENT 
    KEY_WORLD_1 
    KEY_WORLD_2 
    KEY_ESCAPE 
    KEY_ENTER 
    KEY_TAB 
    KEY_BACKSPACE 
    KEY_INSERT 
    KEY_DELETE 
    KEY_RIGHT 
    KEY_LEFT 
    KEY_DOWN 
    KEY_UP 
    KEY_PAGE_UP 
    KEY_PAGE_DOWN 
    KEY_HOME 
    KEY_END 
    KEY_CAPS_LOCK 
    KEY_SCROLL_LOCK 
    KEY_NUM_LOCK 
    KEY_PRINT_SCREEN 
    KEY_PAUSE 
    KEY_F1 
    KEY_F2 
    KEY_F3 
    KEY_F4 
    KEY_F5 
    KEY_F6 
    KEY_F7 
    KEY_F8 
    KEY_F9 
    KEY_F10 
    KEY_F11 
    KEY_F12 
    KEY_F13 
    KEY_F14 
    KEY_F15 
    KEY_F16 
    KEY_F17 
    KEY_F18 
    KEY_F19 
    KEY_F20 
    KEY_F21 
    KEY_F22 
    KEY_F23 
    KEY_F24 
    KEY_F25 
    KEY_KP_0 
    KEY_KP_1 
    KEY_KP_2 
    KEY_KP_3 
    KEY_KP_4 
    KEY_KP_5 
    KEY_KP_6 
    KEY_KP_7 
    KEY_KP_8 
    KEY_KP_9 
    KEY_KP_DECIMAL 
    KEY_KP_DIVIDE 
    KEY_KP_MULTIPLY 
    KEY_KP_SUBTRACT 
    KEY_KP_ADD 
    KEY_KP_ENTER 
    KEY_KP_EQUAL 
    KEY_LEFT_SHIFT 
    KEY_LEFT_CONTROL 
    KEY_LEFT_ALT 
    KEY_LEFT_SUPER 
    KEY_RIGHT_SHIFT 
    KEY_RIGHT_CONTROL 
    KEY_RIGHT_ALT 
    KEY_RIGHT_SUPER 
    KEY_MENU 
    KEY_RIGHTMOUSE 
    KEY_LEFTMOUSE 
    KEY_MIDDLEMOUSE 
    KEY_LASTKEY 

    Function Documentation

    ◆ BindKeyboardKey() [1/3]

    void tram::UI::BindKeyboardKey ( KeyboardKey  key,
    keyboardaction_t  action 
    )

    ◆ BindKeyboardKey() [2/3]

    void tram::UI::BindKeyboardKey ( KeyboardKey  key,
    void(*)()  action 
    )

    ◆ BindKeyboardKey() [3/3]

    void tram::UI::BindKeyboardKey ( KeyboardKey  key,
    void(*)(KeyboardKey action 
    )

    ◆ EndFrame()

    void tram::UI::EndFrame ( )

    Ends the frame and updates the window.

    ◆ GetAllKeyboardKeyBindings()

    std::vector< std::pair< keyboardaction_t, std::vector< KeyboardKey > > > tram::UI::GetAllKeyboardKeyBindings ( )

    ◆ GetAxisSensitivity()

    float tram::UI::GetAxisSensitivity ( KeyboardAxis  key)

    ◆ GetInputState()

    InputState tram::UI::GetInputState ( )

    ◆ GetKeyboardAction()

    keyboardaction_t tram::UI::GetKeyboardAction ( name_t  name)

    ◆ GetKeyboardActionName()

    name_t tram::UI::GetKeyboardActionName ( keyboardaction_t  type)

    ◆ GetKeyboardKeyName()

    const char * tram::UI::GetKeyboardKeyName ( KeyboardKey  key)

    ◆ GetScreenHeight()

    float tram::UI::GetScreenHeight ( )

    ◆ GetScreenWidth()

    float tram::UI::GetScreenWidth ( )

    ◆ Init()

    void tram::Platform::Input::Init ( )

    Initializes the UI system.

    This will open the window.

    ◆ KeyCode()

    void tram::UI::KeyCode ( uint16_t  code)

    ◆ KeyMouse()

    void tram::UI::KeyMouse ( float  xpos,
    float  ypos 
    )

    ◆ KeyPress()

    void tram::UI::KeyPress ( KeyboardKey  key)

    ◆ KeyRelease()

    void tram::UI::KeyRelease ( KeyboardKey  key)

    ◆ KeyScroll()

    void tram::UI::KeyScroll ( float  value)

    ◆ PollKeyboardAxis()

    float tram::UI::PollKeyboardAxis ( KeyboardAxis  key)

    Checks the state of an axis for the current frame.

    Returns
    Value of the axis.

    ◆ PollKeyboardAxisDelta()

    float tram::UI::PollKeyboardAxisDelta ( KeyboardAxis  key)

    Checks the change of an axis for since the last frame.

    Returns
    Value of the axis delta.

    ◆ PollKeyboardKey()

    bool tram::UI::PollKeyboardKey ( KeyboardKey  key)

    Checks the state of a key for the current frame.

    Returns
    True, if key is pressed, false otherwise.

    ◆ RegisterKeyboardAction()

    keyboardaction_t tram::UI::RegisterKeyboardAction ( const char *  name)

    ◆ ScreenClose()

    void tram::UI::ScreenClose ( )

    ◆ ScreenResize()

    void tram::UI::ScreenResize ( int  width,
    int  height 
    )

    ◆ SetAxisSensitivity()

    void tram::UI::SetAxisSensitivity ( KeyboardAxis  key,
    float  value 
    )

    ◆ SetCursor()

    void tram::UI::SetCursor ( CursorType  cursor)

    ◆ SetInputState()

    void tram::UI::SetInputState ( InputState  state)

    ◆ SetWebMainLoop()

    void tram::UI::SetWebMainLoop ( void(*)(void)  loop_function)

    ◆ SetWindowSize()

    void tram::UI::SetWindowSize ( int  w,
    int  h 
    )

    Sets the window size.

    The width and height are the pixel value of the window.

    ◆ SetWindowTitle()

    void tram::UI::SetWindowTitle ( const char *  title)

    ◆ ShouldExit()

    bool tram::UI::ShouldExit ( )

    ◆ Uninit()

    void tram::Platform::Input::Uninit ( )

    Uninitializes the UI system.

    Closes the window.

    ◆ Update()

    void tram::Platform::Input::Update ( )

    Updates the UI system.

    When called, this will cause the UI state to be updated and all of the keypress and mouse movement events to be emitted.

    Variable Documentation

    ◆ CAMERA_SENSITIVITY

    const float tram::UI::CAMERA_SENSITIVITY = 6.0f

    ◆ CAMERA_SPEED

    const float tram::UI::CAMERA_SPEED = 6.0f
    ================================================ FILE: docs/cppapi/namespacetram_1_1implementation.html ================================================ Tramway SDK: tram::implementation Namespace Reference
    Tramway SDK v0.1.1
    tram::implementation Namespace Reference

    Functions

    void concat_fmt (std::string_view &str)
     
    void flush_console (Severity severity, System::system_t system)
     
    void flush_display (int time, int system)
     
    template<>
    void concat (const std::string_view &value)
     
    template<>
    void concat (const std::string &value)
     
    template<>
    void concat (const char *const &value)
     
    void concat (const char *value)
     
    template<>
    void concat (const UID &value)
     
    template<typename T >
    void to_chars_concat (const T &value)
     
    template<>
    void concat_numeric (const int64_t &value)
     
    template<>
    void concat_numeric (const uint64_t &value)
     
    template<>
    void concat_numeric (const float &value)
     
    template<typename T >
    void concat (const T &value)
     
    template<size_t N>
    void concat (const char(&value)[N])
     
    template<typename T >
    void concat_numeric (const T &value)
     
    void flush_display (int time, System::system_t system)
     
    void log (void(*flush)(Severity, System::system_t), Severity severity, System::system_t system, std::string_view &format)
     
    template<typename T , typename... Args>
    void log (void(*flush)(Severity, System::system_t), Severity severity, System::system_t system, std::string_view &format, T &value, Args &&... args)
     

    Variables

    char buffer [500] = {'\0'}
     

    Function Documentation

    ◆ concat() [1/7]

    template<>
    void tram::implementation::concat ( const char *const &  value)

    ◆ concat() [2/7]

    void tram::implementation::concat ( const char *  value)

    ◆ concat() [3/7]

    template<size_t N>
    void tram::implementation::concat ( const char(&)  value[N])

    ◆ concat() [4/7]

    template<>
    void tram::implementation::concat ( const std::string &  value)

    ◆ concat() [5/7]

    template<>
    void tram::implementation::concat ( const std::string_view &  value)

    ◆ concat() [6/7]

    template<typename T >
    void tram::implementation::concat ( const T &  value)

    ◆ concat() [7/7]

    template<>
    void tram::implementation::concat ( const UID value)

    ◆ concat_fmt()

    void tram::implementation::concat_fmt ( std::string_view &  str)

    ◆ concat_numeric() [1/4]

    template<>
    void tram::implementation::concat_numeric ( const float &  value)

    ◆ concat_numeric() [2/4]

    template<>
    void tram::implementation::concat_numeric ( const int64_t &  value)

    ◆ concat_numeric() [3/4]

    template<typename T >
    void tram::implementation::concat_numeric ( const T &  value)

    ◆ concat_numeric() [4/4]

    template<>
    void tram::implementation::concat_numeric ( const uint64_t &  value)

    ◆ flush_console()

    void tram::implementation::flush_console ( Severity  severity,
    System::system_t  system 
    )

    ◆ flush_display() [1/2]

    void tram::implementation::flush_display ( int  time,
    int  system 
    )

    ◆ flush_display() [2/2]

    void tram::implementation::flush_display ( int  time,
    System::system_t  system 
    )

    ◆ log() [1/2]

    void tram::implementation::log ( void(*)(Severity, System::system_t flush,
    Severity  severity,
    System::system_t  system,
    std::string_view &  format 
    )
    inline

    ◆ log() [2/2]

    template<typename T , typename... Args>
    void tram::implementation::log ( void(*)(Severity, System::system_t flush,
    Severity  severity,
    System::system_t  system,
    std::string_view &  format,
    T &  value,
    Args &&...  args 
    )

    ◆ to_chars_concat()

    template<typename T >
    void tram::implementation::to_chars_concat ( const T &  value)

    Variable Documentation

    ◆ buffer

    char tram::implementation::buffer[500] = {'\0'}
    ================================================ FILE: docs/cppapi/navigation_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/navigation.cpp File Reference
    Tramway SDK
    navigation.cpp File Reference
    ================================================ FILE: docs/cppapi/navigation_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/navigation.h File Reference
    Tramway SDK
    navigation.h File Reference
    #include <templates/octree.h>
    #include <framework/core.h>
    #include <framework/uid.h>
    #include <framework/math.h>

    Go to the source code of this file.

    Namespaces

    namespace  tram
     TODO:
     
    ================================================ FILE: docs/cppapi/navigation_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/navigation.h Source File
    Tramway SDK
    navigation.h
    Go to the documentation of this file.
    1// TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022
    2// All rights reserved.
    3
    4#ifndef TRAM_SDK_FRAMEWORK_NAVIGATION_H
    5#define TRAM_SDK_FRAMEWORK_NAVIGATION_H
    6
    7#include <templates/octree.h>
    8
    9#include <framework/core.h>
    10#include <framework/uid.h>
    11#include <framework/math.h>
    12
    13namespace tram {
    14
    15}
    16
    17#endif // TRAM_SDK_FRAMEWORK_NAVIGATION_H
    TODO:
    ================================================ FILE: docs/cppapi/navmesh_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/navmesh.cpp File Reference
    Tramway SDK v0.1.1
    navmesh.cpp File Reference
    #include <framework/navmesh.h>
    #include <framework/file.h>
    #include <templates/pool.h>
    #include <templates/hashmap.h>
    #include <unordered_map>
    #include <cstring>

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    ================================================ FILE: docs/cppapi/navmesh_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/navmesh.h File Reference
    Tramway SDK v0.1.1
    navmesh.h File Reference
    #include <framework/core.h>
    #include <framework/uid.h>
    #include <framework/math.h>
    #include <vector>

    Go to the source code of this file.

    Classes

    struct  tram::NavmeshNode
     
    class  tram::Navmesh
     Not fully implemented yet. More...
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     

    Typedefs

    typedef uint32_t tram::node_id_t
     
    ================================================ FILE: docs/cppapi/navmesh_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/navmesh.h Source File
    Tramway SDK v0.1.1
    navmesh.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_FRAMEWORK_NAVMESH_H
    4#define TRAM_SDK_FRAMEWORK_NAVMESH_H
    5
    6#include <framework/core.h>
    7#include <framework/uid.h>
    8#include <framework/math.h>
    9
    10#include <vector>
    11
    12namespace tram {
    13
    14typedef uint32_t node_id_t;
    15
    19};
    20
    21class Navmesh {
    22public:
    24 ~Navmesh() = delete;
    25
    26 inline name_t GetName() { return name; }
    27 inline const std::vector<node_id_t>& GetNodes() { return nodes; }
    28
    29 void LoadFromDisk();
    30
    31 static NavmeshNode GetNavmeshNode (node_id_t node_id);
    32 static Navmesh* Find (name_t name);
    33protected:
    35 std::vector<node_id_t> nodes;
    36};
    37
    38}
    39
    40#endif // TRAM_SDK_FRAMEWORK_NAVMESH_H
    Not fully implemented yet.
    Definition: navmesh.h:21
    Navmesh(name_t name)
    Definition: navmesh.h:23
    std::vector< node_id_t > nodes
    Definition: navmesh.h:35
    ~Navmesh()=delete
    const std::vector< node_id_t > & GetNodes()
    Definition: navmesh.h:27
    void LoadFromDisk()
    Definition: navmesh.cpp:59
    static NavmeshNode GetNavmeshNode(node_id_t node_id)
    Definition: navmesh.cpp:45
    name_t GetName()
    Definition: navmesh.h:26
    name_t name
    Definition: navmesh.h:34
    static Navmesh * Find(name_t name)
    Definition: navmesh.cpp:49
    Serialization, i.e.
    glm::vec3 vec3
    Definition: math.h:11
    uint32_t node_id_t
    Definition: navmesh.h:14
    Definition: navmesh.h:16
    node_id_t right
    Definition: navmesh.h:17
    node_id_t prev
    Definition: navmesh.h:17
    vec3 position
    Definition: navmesh.h:18
    node_id_t next
    Definition: navmesh.h:17
    node_id_t left
    Definition: navmesh.h:17
    Interned string type.
    Definition: uid.h:10
    ================================================ FILE: docs/cppapi/octree_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/octree.h File Reference
    Tramway SDK v0.1.1
    octree.h File Reference
    #include <vector>
    #include <algorithm>
    #include <framework/math.h>
    #include <templates/pool.h>

    Go to the source code of this file.

    Classes

    class  tram::Octree< T >
     
    struct  tram::Octree< T >::Node
     
    struct  tram::Octree< T >::NearestSearch
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    ================================================ FILE: docs/cppapi/octree_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/octree.h Source File
    Tramway SDK v0.1.1
    octree.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_TEMPLATES_OCTREE_H
    4#define TRAM_SDK_TEMPLATES_OCTREE_H
    5
    6#include <vector>
    7#include <algorithm>
    8#include <framework/math.h>
    9#include <templates/pool.h>
    10
    11namespace tram {
    12
    13template <typename T>
    14class Octree {
    15public:
    16 Octree(const char* name, size_t size) : nodes(name, size) {
    17 root = nodes.AddNew();
    18 root->mid_point = {0.0f, 0.0f, 0.0f};
    19 root->half_extent = 100.0f;
    20 }
    21
    22 uint32_t Insert(vec3 point, T data) {
    23 Node* new_leaf = nodes.AddNew(Node {.point = point, .data = data});
    24 Insert(root, new_leaf);
    25 return nodes.index(new_leaf);
    26 }
    27
    28 void Remove(uint32_t node) {
    29 Remove(&nodes[node]);
    30 }
    31
    32 size_t Find(T* array, vec3 point) {
    33 NearestSearch search = {.point = point};
    34 search.point = point;
    35
    36 FindNearest(&search, root);
    37
    38 for (int i = 0 ; i < search.found ; i++) {
    39 array[i] = search.nearest[i]->data;
    40 }
    41
    42 return search.found;
    43 }
    44
    45 void Draw() {
    46 Draw(root);
    47 }
    48
    49 // temporary compatibility methods
    50 // TODO: remove
    51 uint32_t AddLeaf(T type, float x, float y, float z){
    52 return Insert({x, y, z}, type);
    53 }
    54
    55 void RemoveLeaf(uint32_t leaf_id){
    56 Remove(leaf_id);
    57 }
    58
    59 size_t FindNearest(T result[], float x, float y, float z){
    60 return Find(result, {x, y, z});
    61 }
    62
    63protected:
    64 enum Octant {
    73 };
    74
    75 struct Node {
    76 Node* octants[8] = {nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr};
    77
    78 Node* parent = nullptr;
    79
    81
    82 float half_extent = 1.0f;
    83
    85
    87
    88 inline bool IsLeaf() {
    89 return !IsNode();
    90 }
    91
    92 inline bool IsNode() {
    93 for (int i = 0; i < 8; i++) if (octants[i]) return true;
    94 return false;
    95 }
    96 };
    97
    99
    100 Node* root = nullptr;
    101
    102 void Insert(Node* parent, Node* leaf) {
    103 Octant octant_type = GetOctant(parent->mid_point, leaf->point);
    104 Node*& octant = parent->octants[octant_type];
    105
    106 if (octant) {
    107 if (octant->IsNode()) {
    108 Insert(octant, leaf);
    109 } else {
    110 Node* existing_leaf = octant;
    111
    112 if (glm::distance(existing_leaf->point, leaf->point) == 0.0f) {
    113 std::cout << "Point " << leaf->point.x << " " << leaf->point.y << " " << leaf->point.z << " already in tree!" << std::endl;
    114 return;
    115 }
    116
    117 octant = NewNode(octant_type, parent);
    118
    119 Insert(octant, existing_leaf);
    120 Insert(octant, leaf);
    121 }
    122 } else {
    123 octant = leaf;
    124 leaf->parent = parent;
    125 }
    126 }
    127
    128 void Remove(Node* node) {
    129 // don't allow removing root node
    130 if (!node->parent) return;
    131
    132 // remove node from parent
    133 for (int i = 0; i < 8; i++) {
    134 if (node->parent->octants[i] == node) {
    135 node->parent->octants[i] = nullptr;
    136 break;
    137 }
    138 }
    139
    140 //delete node;
    141 nodes.Remove(node);
    142 }
    143
    145 Node* nearest[4] = {nullptr, nullptr, nullptr, nullptr};
    146 float distance[4] = {INFINITY, INFINITY, INFINITY, INFINITY};
    148 float farthest_distance = -INFINITY;
    150 int found = 0;
    151 };
    152
    153 void FindNearest(NearestSearch* search, Node* parent_node) {
    154 int first_octant = GetOctant(parent_node->mid_point, search->point);
    155
    156 FindNearest(search, parent_node, first_octant);
    157
    158 for (int i = 0 ; i < 8; i++) {
    159 if (i != first_octant) FindNearest(search, parent_node, i);
    160 }
    161 }
    162
    163 void FindNearest(NearestSearch* search, Node* parent_node, int octant) {
    164 Node* search_node = parent_node->octants[octant];
    165
    166 if (!search_node) return;
    167
    168 if (search_node->IsNode()) {
    169 // do the nearest check
    170 if (search->found >= 4) {
    171 float nearest_possible = glm::distance(search->point, search_node->mid_point) - 1.73205f * search_node->half_extent;
    172 if (nearest_possible > search->farthest_distance) return;
    173 }
    174
    175 FindNearest(search, search_node);
    176 } else {
    177 if (search->found < 4) {
    178 float distance = glm::distance(search_node->point, search->point);
    179
    180 search->nearest[search->found] = search_node;
    181 search->distance[search->found] = distance;
    182
    183 if (search->farthest_distance < distance) {
    184 search->farthest_distance = distance;
    185 search->farthest_index = search->found;
    186 }
    187
    188 search->found++;
    189 } else {
    190 float distance = glm::distance(search_node->point, search->point);
    191
    192 if (search->farthest_distance < distance) {
    193 return;
    194 }
    195
    196 search->distance[search->farthest_index] = distance;
    197 search->nearest[search->farthest_index] = search_node;
    198
    199 search->farthest_distance = -INFINITY;
    200 for (int i = 0; i < 4; i++) {
    201 if (search->farthest_distance < search->distance[i]) {
    202 search->farthest_distance = search->distance[i];
    203 search->farthest_index = i;
    204 }
    205 }
    206 }
    207 }
    208 }
    209
    210 Node* NewNode(Octant octant, Node* parent) {
    211 Node* node = nodes.AddNew();
    212
    213 node->parent = parent;
    214
    215 node->half_extent = parent->half_extent / 2.0f;
    216 node->mid_point = parent->mid_point;
    217
    218 switch (octant) {
    220 node->mid_point.x -= node->half_extent;
    221 node->mid_point.y += node->half_extent;
    222 node->mid_point.z -= node->half_extent;
    223 break;
    225 node->mid_point.x -= node->half_extent;
    226 node->mid_point.y += node->half_extent;
    227 node->mid_point.z += node->half_extent;
    228 break;
    230 node->mid_point.x += node->half_extent;
    231 node->mid_point.y += node->half_extent;
    232 node->mid_point.z -= node->half_extent;
    233 break;
    235 node->mid_point.x += node->half_extent;
    236 node->mid_point.y += node->half_extent;
    237 node->mid_point.z += node->half_extent;
    238 break;
    240 node->mid_point.x -= node->half_extent;
    241 node->mid_point.y -= node->half_extent;
    242 node->mid_point.z -= node->half_extent;
    243 break;
    245 node->mid_point.x -= node->half_extent;
    246 node->mid_point.y -= node->half_extent;
    247 node->mid_point.z += node->half_extent;
    248 break;
    250 node->mid_point.x += node->half_extent;
    251 node->mid_point.y -= node->half_extent;
    252 node->mid_point.z -= node->half_extent;
    253 break;
    255 node->mid_point.x += node->half_extent;
    256 node->mid_point.y -= node->half_extent;
    257 node->mid_point.z += node->half_extent;
    258 break;
    259 }
    260
    261 return node;
    262 }
    263
    264 Octant GetOctant(vec3 mid, vec3 point) {
    265 if (point.y < mid.y) {
    266 if (point.x < mid.x) {
    267 if (point.z < mid.z) {
    269 } else {
    271 }
    272 } else {
    273 if (point.z < mid.z) {
    275 } else {
    277 }
    278 }
    279 } else {
    280 if (point.x < mid.x) {
    281 if (point.z < mid.z) {
    283 } else {
    285 }
    286 } else {
    287 if (point.z < mid.z) {
    289 } else {
    291 }
    292 }
    293 }
    294
    295 }
    296
    297 void Draw(Node * node) {
    298 if (node->IsNode()) {
    299 /*vec3 p00 = node->mid_point + vec3(node->width, node->width, node->width);
    300 vec3 p01 = node->mid_point + vec3(-node->width, node->width, node->width);
    301 vec3 p02 = node->mid_point + vec3(node->width, node->width, -node->width);
    302 vec3 p03 = node->mid_point + vec3(-node->width, node->width, -node->width);
    303 vec3 p10 = node->mid_point + vec3(node->width, -node->width, node->width);
    304 vec3 p11 = node->mid_point + vec3(-node->width, -node->width, node->width);
    305 vec3 p12 = node->mid_point + vec3(node->width, -node->width, -node->width);
    306 vec3 p13 = node->mid_point + vec3(-node->width, -node->width, -node->width);
    307
    308 AddLine(p00, p01, COLOR_YELLOW);
    309 AddLine(p00, p02, COLOR_YELLOW);
    310 AddLine(p03, p01, COLOR_YELLOW);
    311 AddLine(p03, p02, COLOR_YELLOW);
    312
    313 AddLine(p10, p11, COLOR_YELLOW);
    314 AddLine(p10, p12, COLOR_YELLOW);
    315 AddLine(p13, p11, COLOR_YELLOW);
    316 AddLine(p13, p12, COLOR_YELLOW);
    317
    318 AddLine(p00, p10, COLOR_YELLOW);
    319 AddLine(p01, p11, COLOR_YELLOW);
    320 AddLine(p02, p12, COLOR_YELLOW);
    321 AddLine(p03, p13, COLOR_YELLOW);*/
    322
    323 for (int i = 0 ; i < 8; i++) {
    324 if (node->octants[i]) Draw(node->octants[i]);
    325 }
    326 } else {
    327 //AddLineMarker(node->point, COLOR_GREEN);
    328 }
    329 }
    330
    331};
    332
    333}
    334
    335#endif // TRAM_SDK_TEMPLATES_OCTREE_H
    Definition: octree.h:14
    void Insert(Node *parent, Node *leaf)
    Definition: octree.h:102
    void Draw()
    Definition: octree.h:45
    Pool< Node > nodes
    Definition: octree.h:98
    Octree(const char *name, size_t size)
    Definition: octree.h:16
    Node * root
    Definition: octree.h:100
    void Draw(Node *node)
    Definition: octree.h:297
    void FindNearest(NearestSearch *search, Node *parent_node, int octant)
    Definition: octree.h:163
    Node * NewNode(Octant octant, Node *parent)
    Definition: octree.h:210
    void Remove(Node *node)
    Definition: octree.h:128
    size_t Find(T *array, vec3 point)
    Definition: octree.h:32
    Octant
    Definition: octree.h:64
    @ OCTANT_BOTTOM_RIGHT_FRONT
    Definition: octree.h:72
    @ OCTANT_BOTTOM_LEFT_BACK
    Definition: octree.h:69
    @ OCTANT_TOP_RIGHT_FRONT
    Definition: octree.h:68
    @ OCTANT_TOP_RIGHT_BACK
    Definition: octree.h:67
    @ OCTANT_TOP_LEFT_BACK
    Definition: octree.h:65
    @ OCTANT_BOTTOM_LEFT_FRONT
    Definition: octree.h:70
    @ OCTANT_BOTTOM_RIGHT_BACK
    Definition: octree.h:71
    @ OCTANT_TOP_LEFT_FRONT
    Definition: octree.h:66
    void Remove(uint32_t node)
    Definition: octree.h:28
    Octant GetOctant(vec3 mid, vec3 point)
    Definition: octree.h:264
    void RemoveLeaf(uint32_t leaf_id)
    Definition: octree.h:55
    uint32_t AddLeaf(T type, float x, float y, float z)
    Definition: octree.h:51
    size_t FindNearest(T result[], float x, float y, float z)
    Definition: octree.h:59
    void FindNearest(NearestSearch *search, Node *parent_node)
    Definition: octree.h:153
    uint32_t Insert(vec3 point, T data)
    Definition: octree.h:22
    Definition: pool.h:21
    Serialization, i.e.
    glm::vec3 vec3
    Definition: math.h:11
    Definition: octree.h:144
    int found
    Definition: octree.h:150
    Node * nearest[4]
    Definition: octree.h:145
    float distance[4]
    Definition: octree.h:146
    float farthest_distance
    Definition: octree.h:148
    int farthest_index
    Definition: octree.h:147
    vec3 point
    Definition: octree.h:149
    Definition: octree.h:75
    Node * parent
    Definition: octree.h:78
    bool IsNode()
    Definition: octree.h:92
    float half_extent
    Definition: octree.h:82
    vec3 point
    Definition: octree.h:84
    Node * octants[8]
    Definition: octree.h:76
    vec3 mid_point
    Definition: octree.h:80
    bool IsLeaf()
    Definition: octree.h:88
    T data
    Definition: octree.h:86
    ================================================ FILE: docs/cppapi/openal_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/openal/openal.cpp File Reference
    Tramway SDK v0.1.1
    openal.cpp File Reference

    Implementation of the OpenAL Audio backend. More...

    #include <audio/api.h>
    #include <framework/logging.h>
    #include <framework/system.h>
    #include <AL/alc.h>
    #include <AL/al.h>

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Audio
     System for doing audio related stuff.
     
    namespace  tram::Audio::API
     Audio backend API.
     

    Functions

    void tram::Audio::API::Init ()
     
    void tram::Audio::API::Update ()
     
    void tram::Audio::API::Uninit ()
     
    void tram::Audio::API::SetListenerPosition (vec3 position)
     Sets the listener position. More...
     
    void tram::Audio::API::SetListenerOrientation (quat orientation)
     Sets the listener orientation. More...
     
    void tram::Audio::API::SetListenerGain (float gain)
     
    audiobuffer_t tram::Audio::API::MakeAudioBuffer (const int16_t *audio_data, int32_t length, int32_t samples, int32_t channels)
     Creates audio buffers from raw audio data. More...
     
    void tram::Audio::API::RemoveAudioBuffer (audiobuffer_t buffer)
     Deletes audio buffers. More...
     
    audiosource_t tram::Audio::API::MakeAudioSource ()
     Creates an audio source. More...
     
    void tram::Audio::API::SetAudioSourcePitch (audiosource_t source, float pitch)
     Sets the pitch of an audio source. More...
     
    void tram::Audio::API::SetAudioSourceGain (audiosource_t source, float gain)
     Sets the gain of an audio source. More...
     
    void tram::Audio::API::SetAudioSourcePosition (audiosource_t source, vec3 position)
     Sets the position of an audio source. More...
     
    void tram::Audio::API::SetAudioSourceVelocity (audiosource_t source, vec3 velocity)
     Sets the velocity of an audio source. More...
     
    void tram::Audio::API::SetAudioSourceRepeating (audiosource_t source, bool repeating)
     Sets the repetition of an audio source. More...
     
    void tram::Audio::API::SetAudioSourceBuffer (audiosource_t source, audiobuffer_t buffer)
     Sets the buffers that the audio source will play. More...
     
    void tram::Audio::API::PlayAudioSource (audiosource_t source)
     Plays an audio source. More...
     
    void tram::Audio::API::PauseAudioSource (audiosource_t source)
     Pauses the audio source. More...
     
    void tram::Audio::API::StopAudioSource (audiosource_t source)
     Stops the audio source. More...
     
    bool tram::Audio::API::IsAudioSourcePlaying (audiosource_t source)
     Checks if an audio source is playing. More...
     
    void tram::Audio::API::RemoveAudioSource (audiosource_t source)
     Deletes an audio source. More...
     

    Detailed Description

    Implementation of the OpenAL Audio backend.

    ================================================ FILE: docs/cppapi/openal_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/openal/openal.h File Reference
    Tramway SDK v0.1.1
    openal.h File Reference
    ================================================ FILE: docs/cppapi/openal_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/openal/openal.h Source File
    Tramway SDK v0.1.1
    openal.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_AUDIO_OPENAL_OPENAL_H
    4#define TRAM_SDK_AUDIO_OPENAL_OPENAL_H
    5
    6// Not deleting this file yet, might need it in the future.
    7
    8#endif // TRAM_SDK_AUDIO_OPENAL_OPENAL_H
    ================================================ FILE: docs/cppapi/opengl_2error_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/error.cpp File Reference
    Tramway SDK
    error.cpp File Reference
    ================================================ FILE: docs/cppapi/opengl_2material_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/material.cpp File Reference
    Tramway SDK v0.1.1
    material.cpp File Reference
    #include <render/opengl/material.h>
    #include <config.h>

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Render
     High-level Render system API.
     
    namespace  tram::Render::API
     Rendering backend API.
     

    Functions

    material_t tram::Render::API::MakeMaterial ()
     
    void tram::Render::API::DeleteMaterial (material_t material)
     
    void tram::Render::API::SetMaterialTexture (material_t material, texturehandle_t texture)
     
    void tram::Render::API::SetMaterialColor (material_t material, vec4 color)
     
    void tram::Render::API::SetMaterialSpecularWeight (material_t material, float weight)
     
    void tram::Render::API::SetMaterialSpecularExponent (material_t material, float exponent)
     
    void tram::Render::API::SetMaterialSpecularTransparency (material_t material, float transparency)
     
    void tram::Render::API::SetMaterialReflectivity (material_t material, float reflectivity)
     
    ================================================ FILE: docs/cppapi/opengl_2material_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/material.h File Reference
    Tramway SDK v0.1.1
    material.h File Reference
    #include <render/render.h>
    #include <render/renderer.h>

    Go to the source code of this file.

    Classes

    struct  tram::Render::API::GLMaterial
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Render
     High-level Render system API.
     
    namespace  tram::Render::API
     Rendering backend API.
     
    ================================================ FILE: docs/cppapi/opengl_2material_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/material.h Source File
    Tramway SDK v0.1.1
    material.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_RENDER_OPENGL_MATERIAL_H
    4#define TRAM_SDK_RENDER_OPENGL_MATERIAL_H
    5
    6#include <render/render.h>
    7#include <render/renderer.h>
    8
    9namespace tram::Render::API {
    10
    11struct GLMaterial {
    12 uint32_t gl_texture = 0;
    13 float specular_weight = 0.0f;
    14 float specular_exponent = 1.0f;
    16 float reflectivity = 0.0f;
    17 vec4 color = {1.0f, 1.0f, 1.0f, 1.0f};
    18};
    19
    20}
    21
    22#endif // TRAM_SDK_RENDER_OPENGL_MATERIAL_H
    Rendering backend API.
    glm::vec4 vec4
    Definition: math.h:15
    Definition: material.h:11
    float specular_exponent
    Definition: material.h:14
    float specular_weight
    Definition: material.h:13
    float reflectivity
    Definition: material.h:16
    float specular_transparency
    Definition: material.h:15
    uint32_t gl_texture
    Definition: material.h:12
    vec4 color
    Definition: material.h:17
    ================================================ FILE: docs/cppapi/opengl_2renderer_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/renderer.cpp File Reference
    Tramway SDK v0.1.1
    renderer.cpp File Reference
    #include <render/opengl/renderer.h>
    #include <render/opengl/light.h>
    #include <render/opengl/shader.h>
    #include <render/opengl/drawlist.h>
    #include <render/vertices.h>
    #include <render/api.h>
    #include <framework/settings.h>
    #include <framework/stats.h>
    #include <templates/octree.h>
    #include <GL/gl.h>
    #include <GLES3/gl3.h>
    #include <glm/gtc/type_ptr.hpp>

    Classes

    struct  tram::Render::API::ShaderUniformMatrices
     
    struct  tram::Render::API::ShaderUniformModelMatrices
     
    struct  tram::Render::API::LayerParameters
     
    class  tram::Render::API::ShaderBuffer
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Render
     High-level Render system API.
     
    namespace  tram::Render::API
     Rendering backend API.
     

    Functions

    uint32_t tram::Render::API::MakeUniformBuffer (const char *name, uint32_t binding, uint32_t initial_size)
     
    void tram::Render::API::UploadUniformBuffer (uint32_t handle, uint32_t data_size, void *data)
     
    void tram::Render::API::SetLightingParameters (vec3 sun_direction, vec3 sun_color, vec3 ambient_color, layer_t layer)
     
    void tram::Render::API::SetViewParameters (vec3 position, quat rotation, uint32_t layer)
     
    void tram::Render::API::SetScreenSize (float width, float height)
     
    void tram::Render::API::SetScreenClear (vec3 clear_color, bool clear)
     
    void tram::Render::API::RenderFrame ()
     
    void tram::Render::API::SetViewMatrix (const mat4 &matrix, layer_t layer)
     
    void tram::Render::API::SetProjectionMatrix (const mat4 &matrix, layer_t layer)
     
    void tram::Render::API::GetScreen (char *buffer, int w, int h)
     
    void tram::Render::API::Init ()
     
    ContextType tram::Render::API::GetContext ()
     
    uint32_t tram::Render::API::GetMaxIndexRangeLength ()
     
    void tram::Render::API::SetDevice (void *)
     
    bool tram::Render::API::IsDebugMode ()
     
    void tram::Render::API::SetDebugMode (bool)
     

    Variables

    ShaderUniformMatrices tram::Render::API::matrices
     
    ShaderUniformModelMatrices tram::Render::API::modelMatrices
     
    const uint32_t tram::Render::API::matrix_uniform_binding = 0
     
    const uint32_t tram::Render::API::model_matrix_uniform_binding = 1
     
    const uint32_t tram::Render::API::light_uniform_binding = 2
     
    const uint32_t tram::Render::API::bone_uniform_binding = 3
     
    uint32_t tram::Render::API::matrix_uniform_buffer
     
    uint32_t tram::Render::API::model_matrix_uniform_buffer
     
    uint32_t tram::Render::API::light_uniform_buffer
     
    uint32_t tram::Render::API::bone_uniform_buffer
     
    ================================================ FILE: docs/cppapi/opengl_2renderer_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/renderer.h File Reference
    Tramway SDK v0.1.1
    renderer.h File Reference
    #include <render/render.h>
    #include <render/renderer.h>

    Go to the source code of this file.

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Render
     High-level Render system API.
     
    namespace  tram::Render::API
     Rendering backend API.
     
    ================================================ FILE: docs/cppapi/opengl_2renderer_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/renderer.h Source File
    Tramway SDK v0.1.1
    renderer.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_RENDER_OPENGL_RENDERER_H
    4#define TRAM_SDK_RENDER_OPENGL_RENDERER_H
    5
    6#include <render/render.h>
    7#include <render/renderer.h>
    8
    9namespace tram::Render::API {
    10
    11
    12
    13}
    14
    15#endif // TRAM_SDK_RENDER_OPENGL_RENDERER_H
    Rendering backend API.
    ================================================ FILE: docs/cppapi/other_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/platform/other.cpp File Reference
    Tramway SDK v0.1.1
    other.cpp File Reference
    #include <platform/other.h>

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Platform
     

    Functions

    void tram::Platform::TryDebugging ()
     Attempts to break into debugger. More...
     
    void tram::Platform::ShowErrorDialog (const char *message, const char *title)
     
    ================================================ FILE: docs/cppapi/other_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/platform/other.h File Reference
    Tramway SDK v0.1.1
    other.h File Reference

    Go to the source code of this file.

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Platform
     

    Functions

    void tram::Platform::TryDebugging ()
     Attempts to break into debugger. More...
     
    void tram::Platform::ShowErrorDialog (const char *message, const char *title)
     
    ================================================ FILE: docs/cppapi/other_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/platform/other.h Source File
    Tramway SDK v0.1.1
    other.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_PLATFORM_OTHER_H
    4#define TRAM_SDK_PLATFORM_OTHER_H
    5
    6namespace tram::Platform {
    7
    8void TryDebugging();
    9void ShowErrorDialog(const char*, const char* = nullptr);
    10
    11}
    12
    13#endif // TRAM_SDK_PLATFORM_OTHER_H
    void ShowErrorDialog(const char *message, const char *title)
    Definition: other.cpp:28
    void TryDebugging()
    Attempts to break into debugger.
    Definition: other.cpp:17
    ================================================ FILE: docs/cppapi/output_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/spatial/output.cpp File Reference
    Tramway SDK v0.1.1
    output.cpp File Reference
    ================================================ FILE: docs/cppapi/output_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/spatial/output.h File Reference
    Tramway SDK v0.1.1
    output.h File Reference
    #include <audio/spatial/definitions.h>
    #include <vector>

    Go to the source code of this file.

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Audio
     System for doing audio related stuff.
     
    namespace  tram::Audio::Spatial
     Experimental path tracing audio system.
     

    Functions

    void tram::Audio::Spatial::InitOutput ()
     
    void tram::Audio::Spatial::UpdateOutput ()
     
    void tram::Audio::Spatial::UninitOutput ()
     
    void tram::Audio::Spatial::LockRenderlist ()
     
    void tram::Audio::Spatial::UnlockRenderlist ()
     
    ================================================ FILE: docs/cppapi/output_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/spatial/output.h Source File
    Tramway SDK v0.1.1
    output.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_AUDIO_SPATIAL_OUTPUT_H
    4#define TRAM_SDK_AUDIO_SPATIAL_OUTPUT_H
    5
    7
    8#include <vector>
    9
    10namespace tram::Audio::Spatial {
    11
    15
    18
    19}
    20
    21#endif // TRAM_SDK_AUDIO_SPATIAL_OUTPUT_H
    Experimental path tracing audio system.
    Definition: definitions.h:10
    ================================================ FILE: docs/cppapi/pages.html ================================================ Tramway SDK: Related Pages
    Tramway SDK v0.1.1
    Related Pages
    Here is a list of all related documentation pages:
    ================================================ FILE: docs/cppapi/particle_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/particle.cpp File Reference
    Tramway SDK v0.1.1
    particle.cpp File Reference
    #include <render/api.h>
    #include <render/vertices.h>
    #include <components/particle.h>
    #include <render/material.h>
    #include <config.h>

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    ================================================ FILE: docs/cppapi/particle_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/particle.h File Reference
    Tramway SDK v0.1.1
    particle.h File Reference
    #include <render/render.h>
    #include <render/sprite.h>

    Go to the source code of this file.

    Classes

    class  tram::ParticleComponent
     Provides amusing graphical effects. More...
     
    struct  tram::ParticleComponent::Particle
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    ================================================ FILE: docs/cppapi/particle_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/particle.h Source File
    Tramway SDK v0.1.1
    particle.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_COMPONENTS_PARTICLECOMPONENT_H
    4#define TRAM_SDK_COMPONENTS_PARTICLECOMPONENT_H
    5
    6#include <render/render.h>
    7#include <render/sprite.h>
    8
    9namespace tram {
    10
    12public:
    13 struct Particle {
    16 uint32_t age;
    17 };
    18
    21 inline name_t GetSprite() { return sprite->GetName(); }
    22
    24 this->sprite = sprite;
    25 }
    26
    27 void Start();
    28
    29 void Update();
    30
    32
    33 void UpdateLocation(vec3 nlocation){
    34 location = nlocation;
    36 }
    37
    38 void EventHandler(Event &event){return;}
    39
    40 void EmitParticle (const Particle& particle);
    41
    42 // put these behind getter/setter methods, maybe?
    43 uint32_t emission_rate = 1;
    44 uint32_t particle_max_age = 120;
    45 vec3 gravity = vec3(0.0f, -0.005f, 0.0f);
    46 vec3 initial_velocity = vec3(0.0f, 0.15f, 0.0f);
    48protected:
    49 std::vector<Particle> particles;
    51
    53
    56};
    57
    58}
    59
    60#endif // TRAM_SDK_COMPONENTS_PARTICLECOMPONENT_H
    Component base class.
    Definition: entitycomponent.h:16
    Provides amusing graphical effects.
    Definition: particle.h:11
    ~ParticleComponent()
    Definition: particle.cpp:26
    ResourceProxy< Render::Sprite > sprite
    Definition: particle.h:50
    name_t GetSprite()
    Definition: particle.h:21
    void EmitParticle(const Particle &particle)
    Definition: particle.cpp:32
    uint32_t emission_rate
    Definition: particle.h:43
    vec3 initial_velocity
    Definition: particle.h:46
    vec3 gravity
    Definition: particle.h:45
    ParticleComponent()
    Definition: particle.h:19
    void EventHandler(Event &event)
    Definition: particle.h:38
    void UpdateRenderListObject()
    Definition: particle.cpp:87
    void SetSprite(Render::Sprite *sprite)
    Definition: particle.h:23
    void Update()
    Definition: particle.cpp:54
    uint32_t particle_max_age
    Definition: particle.h:44
    Render::drawlistentry_t draw_list_entry
    Definition: particle.h:54
    vec3 location
    Definition: particle.h:52
    void Start()
    Definition: particle.cpp:36
    float initial_velocity_randomness
    Definition: particle.h:47
    std::vector< Particle > particles
    Definition: particle.h:49
    Render::vertexarray_t vertex_array
    Definition: particle.h:55
    void UpdateLocation(vec3 nlocation)
    Definition: particle.h:33
    Sprite resource.
    Definition: sprite.h:23
    Definition: resource.h:46
    Serialization, i.e.
    glm::vec3 vec3
    Definition: math.h:11
    Event data.
    Definition: event.h:24
    Definition: particle.h:13
    uint32_t age
    Definition: particle.h:16
    vec3 coords
    Definition: particle.h:14
    vec3 velocity
    Definition: particle.h:15
    Definition: render.h:149
    Definition: render.h:109
    Interned string type.
    Definition: uid.h:10
    ================================================ FILE: docs/cppapi/path_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/path.cpp File Reference
    Tramway SDK v0.1.1
    path.cpp File Reference
    #include <framework/path.h>
    #include <framework/file.h>
    #include <framework/logging.h>
    #include <render/render.h>
    #include <templates/pool.h>
    #include <templates/hashmap.h>
    #include <config.h>
    #include <unordered_map>
    #include <cstring>

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    ================================================ FILE: docs/cppapi/path_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/path.h File Reference
    Tramway SDK v0.1.1
    path.h File Reference
    #include <framework/graph.h>
    #include <framework/uid.h>

    Go to the source code of this file.

    Classes

    struct  tram::PathEdgeInfo
     
    class  tram::Path
     Base class for graphs. More...
     
    class  tram::PathFollower
     Point constrained to a Path. More...
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     

    Enumerations

    enum  tram::PathType {
      tram::PATH_STRAIGHT , tram::PATH_LEFT , tram::PATH_RIGHT , tram::PATH_LINEAR ,
      tram::PATH_CURVE
    }
     
    ================================================ FILE: docs/cppapi/path_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/path.h Source File
    Tramway SDK v0.1.1
    path.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_FRAMEWORK_PATH_H
    4#define TRAM_SDK_FRAMEWORK_PATH_H
    5
    6#include <framework/graph.h>
    7
    8#include <framework/uid.h>
    9
    10namespace tram {
    11
    13 PATH_STRAIGHT, //< Path vertex connection interpreted as a straight line.
    14 PATH_LEFT, //< Path vertex connection interpreted as a left turn.
    15 PATH_RIGHT, //< Path vertex connection interpreted as a right turn.
    16
    17 PATH_LINEAR, //< Path will be interpreted as being made of straight line segments.
    18 PATH_CURVE //< Not implemented.
    19};
    20
    23};
    24
    25class PathFollower;
    26
    27class Path : public Graph {
    28public:
    30
    31 void LoadFromDisk();
    32
    33 void Draw();
    34
    35 static Path* Find(name_t name);
    36protected:
    37 ~Path() = delete;
    38
    39 friend class PathFollower;
    40
    42 std::vector<PathEdgeInfo> edge_infos;
    43};
    44
    46public:
    47 PathFollower(Path* path, vec3 initial_pos, PathType type);
    48
    49 void Advance(float);
    50
    51 void Project(vec3);
    52
    53 void TurnLeft();
    54 void TurnRight();
    55 void TurnStraight();
    56
    59
    60 void SetOrientation(vec3);
    61
    62 float progress;
    63 uint32_t prev;
    64 uint32_t next;
    68};
    69
    70}
    71
    72#endif // TRAM_SDK_FRAMEWORK_PATH_H
    Definition: graph.h:21
    Point constrained to a Path.
    Definition: path.h:45
    void Advance(float)
    Advances the follower along the path.
    Definition: path.cpp:132
    void TurnRight()
    Definition: path.cpp:224
    PathFollower(Path *path, vec3 initial_pos, PathType type)
    Creates a new PathFollower for a path.
    Definition: path.cpp:119
    uint32_t next
    Definition: path.h:64
    vec3 GetPosition()
    Definition: path.cpp:211
    PathType direction
    Definition: path.h:66
    vec3 GetTangent()
    Definition: path.cpp:217
    void SetOrientation(vec3)
    Definition: path.cpp:201
    uint32_t prev
    Definition: path.h:63
    PathType type
    Definition: path.h:65
    void Project(vec3)
    Definition: path.cpp:179
    float progress
    Definition: path.h:62
    void TurnStraight()
    Definition: path.cpp:227
    Path * path
    Definition: path.h:67
    Base class for graphs.
    Definition: path.h:27
    void LoadFromDisk()
    Definition: path.cpp:61
    ~Path()=delete
    std::vector< PathEdgeInfo > edge_infos
    Definition: path.h:42
    name_t name
    Definition: path.h:41
    Path(name_t name)
    Definition: path.h:29
    void Draw()
    Draws the path's line segments.
    Definition: path.cpp:112
    static Path * Find(name_t name)
    Finds a path.
    Definition: path.cpp:50
    Serialization, i.e.
    glm::vec3 vec3
    Definition: math.h:11
    PathType
    Definition: path.h:12
    @ PATH_RIGHT
    Definition: path.h:15
    @ PATH_STRAIGHT
    Definition: path.h:13
    @ PATH_CURVE
    Definition: path.h:18
    @ PATH_LEFT
    Definition: path.h:14
    @ PATH_LINEAR
    Definition: path.h:17
    Definition: path.h:21
    PathType type
    Definition: path.h:22
    Interned string type.
    Definition: uid.h:10
    ================================================ FILE: docs/cppapi/pathtracer_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/spatial/pathtracer.cpp File Reference
    Tramway SDK v0.1.1
    pathtracer.cpp File Reference
    ================================================ FILE: docs/cppapi/pathtracer_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/spatial/pathtracer.h File Reference
    Tramway SDK v0.1.1
    pathtracer.h File Reference
    #include <audio/spatial/definitions.h>
    #include <vector>

    Go to the source code of this file.

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Audio
     System for doing audio related stuff.
     
    namespace  tram::Audio::Spatial
     Experimental path tracing audio system.
     

    Functions

    void tram::Audio::Spatial::FindPaths (PathExplorationResult &result, bool metropolis, vec3 position)
     
    void tram::Audio::Spatial::FindPathsMetropolis (PathExplorationResult *exploration, PathTracingResult *result, vec3 position)
     
    void tram::Audio::Spatial::InitExplorationPaths (PathExplorationResult *paths)
     
    void tram::Audio::Spatial::ValidateResult (PathTracingResult &result, vec3 position)
     
    void tram::Audio::Spatial::RenderResult (PathTracingResult &result, vec3 position)
     
    void tram::Audio::Spatial::CheckReverb (PathExplorationResult *paths)
     
    void tram::Audio::Spatial::MakeSomeSourcePaths (PathFromAudioSource &path, vec3 source_position)
     
    ================================================ FILE: docs/cppapi/pathtracer_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/spatial/pathtracer.h Source File
    Tramway SDK v0.1.1
    pathtracer.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_AUDIO_SPATIAL_PATHTRACER_H
    4#define TRAM_SDK_AUDIO_SPATIAL_PATHTRACER_H
    5
    7
    8#include <vector>
    9
    10namespace tram::Audio::Spatial {
    11
    12//void FindPaths(std::vector<PathTracingResult>& paths, vec3 position);
    13
    14void FindPaths(PathExplorationResult& result, bool metropolis, vec3 position);
    15
    17
    19
    20void ValidateResult(PathTracingResult& result, vec3 position);
    21void RenderResult(PathTracingResult& result, vec3 position);
    22
    24
    25void MakeSomeSourcePaths(PathFromAudioSource& path, vec3 source_position);
    26}
    27
    28#endif // TRAM_SDK_AUDIO_SPATIAL_PATHTRACER_H
    Experimental path tracing audio system.
    Definition: definitions.h:10
    void CheckReverb(PathExplorationResult *paths)
    void InitExplorationPaths(PathExplorationResult *paths)
    void RenderResult(PathTracingResult &result, vec3 position)
    void FindPaths(PathExplorationResult &result, bool metropolis, vec3 position)
    void FindPathsMetropolis(PathExplorationResult *exploration, PathTracingResult *result, vec3 position)
    void MakeSomeSourcePaths(PathFromAudioSource &path, vec3 source_position)
    void ValidateResult(PathTracingResult &result, vec3 position)
    glm::vec3 vec3
    Definition: math.h:11
    Definition: definitions.h:46
    Definition: definitions.h:30
    ================================================ FILE: docs/cppapi/physics_2api_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/api.h File Reference
    Tramway SDK v0.1.1
    api.h File Reference

    Go to the source code of this file.

    Classes

    struct  tram::Physics::API::CollisionShapeTransform
     
    struct  tram::Physics::API::ObjectCollision
     

    Namespaces

    namespace  tram::Physics::API
     Physics backend API.
     
    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Physics
     

    Typedefs

    typedef std::pair< vec3, quat >(* tram::Physics::API::get_trf_callback) (void *)
     
    typedef void(* tram::Physics::API::set_trf_callback) (void *, std::pair< vec3, quat >)
     
    typedef void(* tram::Physics::API::col_callback) (void *, void *, ObjectCollision)
     

    Functions

    collisionshape_t tram::Physics::API::MakeCollisionShape (CollisionShapeTransform *shapes, size_t shape_count)
     
    collisionshape_t tram::Physics::API::MakeCollisionShape (CollisionShape shape)
     
    void tram::Physics::API::YeetCollisionShape (collisionshape_t shape)
     
    rigidbody_t tram::Physics::API::MakeRigidbody (collisionshape_t shape, float mass, vec3 position, quat rotation, uint32_t mask, uint32_t group, get_trf_callback get_callback, set_trf_callback set_callback, void *data)
     
    void tram::Physics::API::YeetRigidbody (rigidbody_t rigidbody)
     
    void tram::Physics::API::SetRigidbodyTransformCallback (rigidbody_t rigidbody, get_trf_callback get_callback, set_trf_callback set_callback, void *data)
     
    void tram::Physics::API::SetRigidbodyCollisionCallback (rigidbody_t rigidbody, col_callback callback, void *data)
     
    void tram::Physics::API::SetRigidbodyCollisionMask (rigidbody_t rigidbody, uint32_t mask)
     
    void tram::Physics::API::SetRigidbodyCollisionGroup (rigidbody_t rigidbody, uint32_t group)
     
    void tram::Physics::API::SetRigidbodyLocation (rigidbody_t rigidbody, vec3 location)
     
    void tram::Physics::API::SetRigidbodyRotation (rigidbody_t rigidbody, quat rotation)
     
    void tram::Physics::API::SetRigidbodyMass (rigidbody_t rigidbody, float mass)
     
    void tram::Physics::API::PushRigidbody (rigidbody_t rigidbody, vec3 direction)
     
    void tram::Physics::API::PushRigidbody (rigidbody_t rigidbody, vec3 direction, vec3 local)
     
    void tram::Physics::API::SpinRigidbody (rigidbody_t rigidbody, vec3 direction)
     
    void tram::Physics::API::SetRigidbodyDebugDrawing (rigidbody_t rigidbody, bool drawing)
     
    void tram::Physics::API::SetRigidbodyKinematic (rigidbody_t rigidbody, bool kinematic)
     
    void tram::Physics::API::SetRigidbodyAngularFactor (rigidbody_t rigidbody, vec3 factor)
     
    void tram::Physics::API::SetRigidbodyLinearFactor (rigidbody_t rigidbody, vec3 factor)
     
    void tram::Physics::API::SetRigidbodyVelocity (rigidbody_t rigidbody, vec3 velocity)
     
    vec3 tram::Physics::API::GetRigidbodyVelocity (rigidbody_t rigidbody)
     
    void tram::Physics::API::AwakenRigidbody (rigidbody_t rigidbody)
     
    void tram::Physics::API::SleepRigidbody (rigidbody_t rigidbody)
     
    void tram::Physics::API::DisableRigidbodyDeactivation (rigidbody_t rigidbody)
     
    trigger_t tram::Physics::API::MakeTrigger (collisionshape_t shape, uint32_t mask, uint32_t group, vec3 position, quat rotation)
     
    void tram::Physics::API::YeetTrigger (trigger_t)
     
    void tram::Physics::API::SetTriggerCollisionCallback (trigger_t rigidbody, col_callback callback, void *data)
     
    void tram::Physics::API::SetTriggerCollisionMask (trigger_t rigidbody, uint32_t mask)
     
    void tram::Physics::API::SetTriggerCollisionGroup (trigger_t rigidbody, uint32_t group)
     
    void tram::Physics::API::SetTriggerLocation (trigger_t rigidbody, vec3 location)
     
    void tram::Physics::API::SetTriggerRotation (trigger_t rigidbody, quat location)
     
    std::pair< ObjectCollision, void * > tram::Physics::API::Raycast (vec3 from, vec3 to, uint32_t collision_mask)
     
    std::vector< std::pair< ObjectCollision, void * > > tram::Physics::API::Shapecast (CollisionShape shape, vec3 from, vec3 to, uint32_t collision_mask)
     
    void tram::Physics::API::Init ()
     
    void tram::Physics::API::StepPhysics ()
     
    void tram::Physics::API::DrawDebug ()
     
    void tram::Physics::API::DrawDebug (bool)
     
    ================================================ FILE: docs/cppapi/physics_2api_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/api.h Source File
    Tramway SDK v0.1.1
    api.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_PHYSICS_API_H
    4#define TRAM_SDK_PHYSICS_API_H
    5
    6#include <physics/physics.h>
    8
    15namespace tram::Physics::API {
    16
    21};
    22
    26 float distance;
    27};
    28
    29typedef std::pair<vec3, quat>(*get_trf_callback)(void*);
    30typedef void(*set_trf_callback)(void*, std::pair<vec3, quat>);
    31typedef void(*col_callback)(void*, void*, ObjectCollision);
    32
    36
    37rigidbody_t MakeRigidbody(collisionshape_t shape, float mass, vec3 position, quat rotation, uint32_t mask, uint32_t group, get_trf_callback get_callback, set_trf_callback set_callback, void* data);
    38void YeetRigidbody(rigidbody_t rigidbody);
    39void SetRigidbodyTransformCallback(rigidbody_t rigidbody, get_trf_callback get_callback, set_trf_callback set_callback, void* data);
    40void SetRigidbodyCollisionCallback(rigidbody_t rigidbody, col_callback callback, void* data);
    41void SetRigidbodyCollisionMask(rigidbody_t rigidbody, uint32_t mask);
    42void SetRigidbodyCollisionGroup(rigidbody_t rigidbody, uint32_t group);
    43void SetRigidbodyLocation(rigidbody_t rigidbody, vec3 location);
    44void SetRigidbodyRotation(rigidbody_t rigidbody, quat rotation);
    45void SetRigidbodyMass(rigidbody_t rigidbody, float mass);
    46void PushRigidbody(rigidbody_t rigidbody, vec3 direction);
    47void PushRigidbody(rigidbody_t rigidbody, vec3 direction, vec3 local);
    48void SpinRigidbody(rigidbody_t rigidbody, vec3 direction);
    49void SetRigidbodyDebugDrawing(rigidbody_t rigidbody, bool drawing);
    50void SetRigidbodyKinematic(rigidbody_t rigidbody, bool kinematic);
    51void SetRigidbodyAngularFactor(rigidbody_t rigidbody, vec3 factor);
    52void SetRigidbodyLinearFactor(rigidbody_t rigidbody, vec3 factor);
    53void SetRigidbodyVelocity(rigidbody_t rigidbody, vec3 velocity);
    55void AwakenRigidbody(rigidbody_t rigidbody);
    56void SleepRigidbody(rigidbody_t rigidbody);
    58
    59trigger_t MakeTrigger(collisionshape_t shape, uint32_t mask, uint32_t group, vec3 position, quat rotation);
    61void SetTriggerCollisionCallback(trigger_t rigidbody, col_callback callback, void* data);
    62void SetTriggerCollisionMask(trigger_t rigidbody, uint32_t mask);
    63void SetTriggerCollisionGroup(trigger_t rigidbody, uint32_t group);
    64void SetTriggerLocation(trigger_t rigidbody, vec3 location);
    65void SetTriggerRotation(trigger_t rigidbody, quat location);
    66
    67std::pair<ObjectCollision, void*> Raycast(vec3 from, vec3 to, uint32_t collision_mask);
    68std::vector<std::pair<ObjectCollision, void*>> Shapecast(CollisionShape shape, vec3 from, vec3 to, uint32_t collision_mask);
    69
    70void Init();
    71void StepPhysics();
    72void DrawDebug();
    73void DrawDebug(bool);
    74
    75}
    76
    77#endif // TRAM_SDK_PHYSICS_API_H
    Physics backend API.
    void SetRigidbodyTransformCallback(rigidbody_t rigidbody, get_trf_callback get_callback, set_trf_callback set_callback, void *data)
    void AwakenRigidbody(rigidbody_t rigidbody)
    Definition: bullet.cpp:321
    void StepPhysics()
    Definition: bullet.cpp:514
    void DrawDebug()
    Definition: bullet.cpp:577
    void SetRigidbodyCollisionGroup(rigidbody_t rigidbody, uint32_t group)
    Definition: bullet.cpp:240
    vec3 GetRigidbodyVelocity(rigidbody_t rigidbody)
    Definition: bullet.cpp:316
    trigger_t MakeTrigger(collisionshape_t shape, uint32_t mask, uint32_t group, vec3 position, quat rotation)
    Definition: bullet.cpp:333
    std::pair< vec3, quat >(* get_trf_callback)(void *)
    Definition: api.h:29
    void SetRigidbodyRotation(rigidbody_t rigidbody, quat rotation)
    Definition: bullet.cpp:252
    void SpinRigidbody(rigidbody_t rigidbody, vec3 direction)
    Definition: bullet.cpp:272
    void SetRigidbodyLinearFactor(rigidbody_t rigidbody, vec3 factor)
    Definition: bullet.cpp:301
    void YeetCollisionShape(collisionshape_t shape)
    Definition: bullet.cpp:185
    void SleepRigidbody(rigidbody_t rigidbody)
    Definition: bullet.cpp:325
    void DisableRigidbodyDeactivation(rigidbody_t rigidbody)
    Definition: bullet.cpp:329
    void Init()
    Definition: bullet.cpp:486
    rigidbody_t MakeRigidbody(collisionshape_t shape, float mass, vec3 position, quat rotation, uint32_t mask, uint32_t group, get_trf_callback get_callback, set_trf_callback set_callback, void *data)
    Definition: bullet.cpp:190
    void SetRigidbodyMass(rigidbody_t rigidbody, float mass)
    Definition: bullet.cpp:258
    void SetRigidbodyKinematic(rigidbody_t rigidbody, bool kinematic)
    Definition: bullet.cpp:287
    void SetRigidbodyCollisionMask(rigidbody_t rigidbody, uint32_t mask)
    Definition: bullet.cpp:234
    void YeetRigidbody(rigidbody_t rigidbody)
    Definition: bullet.cpp:218
    void SetTriggerLocation(trigger_t rigidbody, vec3 location)
    Definition: bullet.cpp:390
    void PushRigidbody(rigidbody_t rigidbody, vec3 direction)
    Definition: bullet.cpp:262
    void SetRigidbodyAngularFactor(rigidbody_t rigidbody, vec3 factor)
    Definition: bullet.cpp:297
    void(* set_trf_callback)(void *, std::pair< vec3, quat >)
    Definition: api.h:30
    void SetTriggerCollisionCallback(trigger_t rigidbody, col_callback callback, void *data)
    Definition: bullet.cpp:373
    void SetRigidbodyDebugDrawing(rigidbody_t rigidbody, bool drawing)
    Definition: bullet.cpp:277
    collisionshape_t MakeCollisionShape(CollisionShapeTransform *shapes, size_t shape_count)
    Definition: bullet.cpp:156
    void SetTriggerCollisionMask(trigger_t rigidbody, uint32_t mask)
    Definition: bullet.cpp:378
    void SetRigidbodyCollisionCallback(rigidbody_t rigidbody, col_callback callback, void *data)
    Definition: bullet.cpp:229
    void YeetTrigger(trigger_t)
    Definition: bullet.cpp:368
    std::pair< ObjectCollision, void * > Raycast(vec3 from, vec3 to, uint32_t collision_mask)
    Definition: bullet.cpp:402
    void SetRigidbodyLocation(rigidbody_t rigidbody, vec3 location)
    Definition: bullet.cpp:246
    void(* col_callback)(void *, void *, ObjectCollision)
    Definition: api.h:31
    void SetTriggerRotation(trigger_t rigidbody, quat location)
    Definition: bullet.cpp:396
    void SetRigidbodyVelocity(rigidbody_t rigidbody, vec3 velocity)
    Definition: bullet.cpp:305
    std::vector< std::pair< ObjectCollision, void * > > Shapecast(CollisionShape shape, vec3 from, vec3 to, uint32_t collision_mask)
    Definition: bullet.cpp:459
    void SetTriggerCollisionGroup(trigger_t rigidbody, uint32_t group)
    Definition: bullet.cpp:384
    glm::vec3 vec3
    Definition: math.h:11
    glm::quat quat
    Definition: math.h:12
    CollisionShape shape
    Definition: api.h:18
    vec3 point
    Definition: api.h:24
    vec3 normal
    Definition: api.h:25
    float distance
    Definition: api.h:26
    Shape for a collider.
    Definition: collisionshape.h:32
    Definition: physics.h:43
    Definition: physics.h:52
    Definition: physics.h:47
    ================================================ FILE: docs/cppapi/physics_2physics_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/physics.cpp File Reference
    Tramway SDK v0.1.1
    physics.cpp File Reference
    #include <physics/physics.h>
    #include <physics/api.h>
    #include <framework/system.h>
    #include <framework/stats.h>

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Physics
     

    Functions

    void tram::Physics::Init ()
     Initializes the physics system. More...
     
    void tram::Physics::Update ()
     Updates the physics system. More...
     
    Collision tram::Physics::Raycast (const vec3 &from, const vec3 &to, uint32_t collision_mask)
     Performs a raycast. More...
     
    std::vector< Collision > tram::Physics::Shapecast (const CollisionShape &shape, const vec3 &from, const vec3 &to, uint32_t collision_mask)
     I have no idea if this function works. (yes it does) More...
     
    ================================================ FILE: docs/cppapi/physics_2physics_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/physics.h File Reference
    Tramway SDK v0.1.1
    physics.h File Reference
    #include <framework/core.h>
    #include <framework/math.h>
    #include <vector>

    Go to the source code of this file.

    Classes

    struct  tram::Physics::Collision
     Physics collision data. More...
     
    struct  tram::Physics::collisionshape_t
     
    struct  tram::Physics::trigger_t
     
    struct  tram::Physics::rigidbody_t
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Physics
     
    namespace  tram::Physics::API
     Physics backend API.
     

    Enumerations

    enum  tram::Physics::CollisionGroup : uint32_t {
      tram::Physics::COLL_WORLDOBJ = 2 , tram::Physics::COLL_STATICOBJ = 4 , tram::Physics::COLL_DYNAMICOBJ = 8 , tram::Physics::COLL_TRIGGER = 16 ,
      tram::Physics::COLL_PLAYER = 32 , tram::Physics::COLL_MONSTER = 64 , tram::Physics::COLL_VEHICLE = 128
    }
     

    Functions

    void tram::Physics::Init ()
     Initializes the physics system. More...
     
    void tram::Physics::Update ()
     Updates the physics system. More...
     
    Collision tram::Physics::Raycast (const vec3 &from, const vec3 &to, uint32_t collision_mask)
     Performs a raycast. More...
     
    std::vector< Collision > tram::Physics::Shapecast (const CollisionShape &shape, const vec3 &from, const vec3 &to, uint32_t collision_mask)
     I have no idea if this function works. (yes it does) More...
     
    ================================================ FILE: docs/cppapi/physics_2physics_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/physics.h Source File
    Tramway SDK v0.1.1
    physics.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_PHYSICS_PHYSICS_H
    4#define TRAM_SDK_PHYSICS_PHYSICS_H
    5
    6#include <framework/core.h>
    7#include <framework/math.h>
    8
    9#include <vector>
    10
    11struct btCollisionShape;
    12struct btCollisionObject;
    13struct btRigidBody;
    14
    15namespace tram {
    16 class PhysicsComponent;
    17}
    18
    19namespace tram::Physics {
    20
    21void Init();
    22void Update();
    23
    24enum CollisionGroup : uint32_t {
    25 COLL_WORLDOBJ = 2, //< Worldspawns
    26 COLL_STATICOBJ = 4, //< Decorations, doors, elevators and platforms
    27 COLL_DYNAMICOBJ = 8, //< Crates and other
    28 COLL_TRIGGER = 16, //< Triggers
    29 COLL_PLAYER = 32, //< Players
    30 COLL_MONSTER = 64, //< Monsters and other NPCs
    31 COLL_VEHICLE = 128 //< Trams and microbuses
    32};
    33
    34struct Collision {
    38 float distance;
    39};
    40
    41namespace API { struct RigidbodyMetadata; }
    42
    44 btCollisionShape* bt_shape;
    45};
    46
    47struct trigger_t {
    48 btCollisionObject* bt_collisionshape;
    50};
    51
    53 btRigidBody* bt_rigidbody;
    55};
    56
    57class CollisionShape;
    58
    59Collision Raycast(const vec3& from, const vec3& to, uint32_t collision_mask = -1);
    60std::vector<Collision> Shapecast(const CollisionShape& shape, const vec3& from, const vec3& to, uint32_t collision_mask = -1);
    61
    62}
    63
    64#endif // TRAM_SDK_PHYSICS_PHYSICS_H
    Rigidbody wrapper.
    Definition: physics.h:12
    void Init()
    Initializes the physics system.
    Definition: physics.cpp:37
    std::vector< Collision > Shapecast(const CollisionShape &shape, const vec3 &from, const vec3 &to, uint32_t collision_mask)
    I have no idea if this function works. (yes it does)
    Definition: physics.cpp:67
    CollisionGroup
    Definition: physics.h:24
    @ COLL_TRIGGER
    Definition: physics.h:28
    @ COLL_VEHICLE
    Definition: physics.h:31
    @ COLL_WORLDOBJ
    Definition: physics.h:25
    @ COLL_STATICOBJ
    Definition: physics.h:26
    @ COLL_PLAYER
    Definition: physics.h:29
    @ COLL_MONSTER
    Definition: physics.h:30
    @ COLL_DYNAMICOBJ
    Definition: physics.h:27
    Collision Raycast(const vec3 &from, const vec3 &to, uint32_t collision_mask)
    Performs a raycast.
    Definition: physics.cpp:60
    void Update()
    Updates the physics system.
    Definition: physics.cpp:48
    Serialization, i.e.
    glm::vec3 vec3
    Definition: math.h:11
    Definition: bullet.cpp:100
    Physics collision data.
    Definition: physics.h:34
    vec3 normal
    Normal vector of the surface that the collision happened with.
    Definition: physics.h:37
    vec3 point
    Position of the collision in world space.
    Definition: physics.h:36
    PhysicsComponent * collider
    Pointer to a PhysicsComponent that owns the rigidbody with which the collision happened.
    Definition: physics.h:35
    float distance
    Distance of the collision, i.e.
    Definition: physics.h:38
    Shape for a collider.
    Definition: collisionshape.h:32
    Definition: physics.h:43
    btCollisionShape * bt_shape
    Definition: physics.h:44
    Definition: physics.h:52
    btRigidBody * bt_rigidbody
    Definition: physics.h:53
    API::RigidbodyMetadata * bt_metadata
    Definition: physics.h:54
    Definition: physics.h:47
    API::RigidbodyMetadata * bt_metadata
    Definition: physics.h:49
    btCollisionObject * bt_collisionshape
    Definition: physics.h:48
    ================================================ FILE: docs/cppapi/platform_2api_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/platform/api.h File Reference
    Tramway SDK v0.1.1
    api.h File Reference
    #include <cstddef>

    Go to the source code of this file.

    Namespaces

    namespace  tram::Platform::Window
     Windowing backend API.
     
    namespace  tram::Platform::Input
     Input backend API.
     
    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Platform
     

    Enumerations

    enum  tram::Platform::Window::CursorType { tram::Platform::Window::CURSOR_DEFAULT , tram::Platform::Window::CURSOR_TEXT , tram::Platform::Window::CURSOR_CLICK }
     

    Functions

    void tram::Platform::Window::Init ()
     
    void tram::Platform::Window::Update ()
     
    void tram::Platform::Window::Uninit ()
     
    void tram::Platform::Window::SetTitle (const char *)
     
    void tram::Platform::Window::SetSize (int w, int h)
     
    void tram::Platform::Window::SetCursor (CursorType)
     
    void tram::Platform::Window::SetCursorPosition (float x, float y)
     
    void tram::Platform::Window::EnableCursor ()
     
    void tram::Platform::Window::DisableCursor ()
     
    void tram::Platform::Window::SetScale (int s)
     
    double tram::Platform::Window::GetTime ()
     
    int tram::Platform::Window::GetCurrentMonitor ()
     
    int tram::Platform::Window::GetMonitorCount ()
     
    void tram::Platform::Window::SetMonitor (int monitor)
     
    bool tram::Platform::Window::IsFullscreen ()
     
    void tram::Platform::Window::SetFullscreen (bool)
     
    bool tram::Platform::Window::IsVsync ()
     
    void tram::Platform::Window::SetVsync (bool)
     
    bool tram::Platform::Window::IsRawInput ()
     
    void tram::Platform::Window::SetRawInput (bool)
     
    bool tram::Platform::Window::IsRenderContextThread ()
     
    void tram::Platform::Input::Init ()
     
    void tram::Platform::Input::Update ()
     
    void tram::Platform::Input::Uninit ()
     
    ================================================ FILE: docs/cppapi/platform_2api_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/platform/api.h Source File
    Tramway SDK v0.1.1
    api.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_PLATFORM_API_H
    4#define TRAM_SDK_PLATFORM_API_H
    5
    6#include <cstddef>
    7
    20namespace tram::Platform::Window {
    21
    22void Init();
    23void Update();
    24void Uninit();
    25
    26void SetTitle(const char*);
    27void SetSize(int w, int h);
    28
    33};
    34
    36void SetCursorPosition(float x, float y);
    37
    38void EnableCursor();
    39void DisableCursor();
    40
    41void SetScale(int s);
    42
    43double GetTime();
    44
    46int GetMonitorCount();
    47void SetMonitor(int monitor);
    48bool IsFullscreen();
    49void SetFullscreen(bool);
    50bool IsVsync();
    51void SetVsync(bool);
    52bool IsRawInput();
    53void SetRawInput(bool);
    54
    56
    57}
    58
    59namespace tram::Platform::Input {
    60
    61void Init();
    62void Update();
    63void Uninit();
    64
    65}
    66
    67#endif // TRAM_SDK_PLATFORM_API_H
    Input backend API.
    Windowing backend API.
    CursorType
    Definition: api.h:29
    @ CURSOR_DEFAULT
    Definition: api.h:30
    @ CURSOR_CLICK
    Definition: api.h:32
    @ CURSOR_TEXT
    Definition: api.h:31
    void EnableCursor()
    Definition: glfw.cpp:174
    void SetFullscreen(bool)
    Definition: glfw.cpp:214
    int GetMonitorCount()
    Definition: glfw.cpp:199
    double GetTime()
    Definition: glfw.cpp:190
    bool IsFullscreen()
    Definition: glfw.cpp:210
    int GetCurrentMonitor()
    Definition: glfw.cpp:195
    void DisableCursor()
    Definition: glfw.cpp:178
    void SetMonitor(int monitor)
    Definition: glfw.cpp:205
    bool IsVsync()
    Definition: glfw.cpp:241
    bool IsRawInput()
    Definition: glfw.cpp:182
    void SetTitle(const char *)
    Definition: glfw.cpp:156
    bool IsRenderContextThread()
    Definition: glfw.cpp:255
    void SetRawInput(bool)
    Definition: glfw.cpp:186
    void SetVsync(bool)
    Definition: glfw.cpp:245
    void SetCursorPosition(float x, float y)
    Definition: glfw.cpp:170
    void SetCursor(CursorType)
    Definition: glfw.cpp:166
    void SetSize(int w, int h)
    Definition: glfw.cpp:161
    ================================================ FILE: docs/cppapi/platform_2file_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/platform/file.cpp File Reference
    Tramway SDK v0.1.1
    file.cpp File Reference
    #include <cassert>
    #include <iostream>
    #include <platform/file.h>
    #include <framework/logging.h>

    Classes

    class  tram::DiskReader
     
    class  tram::DiskWriter
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    ================================================ FILE: docs/cppapi/platform_2file_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/platform/file.h File Reference
    Tramway SDK v0.1.1
    file.h File Reference
    #include <cstddef>
    #include <string>
    #include <vector>

    Go to the source code of this file.

    Classes

    struct  tram::FileSource
     
    class  tram::FileReader
     
    class  tram::FileWriter
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     

    Enumerations

    enum class  tram::FileStatus { tram::IO_ERROR , tram::READY }
     
    enum class  tram::FileMedium { tram::DISK , tram::USER , tram::ARCHIVE , tram::HTTP }
     
    ================================================ FILE: docs/cppapi/platform_2file_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/platform/file.h Source File
    Tramway SDK v0.1.1
    file.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_PLATFORM_FILE_H
    4#define TRAM_SDK_PLATFORM_FILE_H
    5
    6#include <cstddef>
    7#include <string>
    8#include <vector>
    9
    10namespace tram {
    11
    12enum class FileStatus {
    14 READY
    15};
    16
    17enum class FileMedium {
    18 DISK,
    19 USER,
    20 ARCHIVE,
    21 HTTP
    22};
    23
    24struct FileSource {
    26 std::string path;
    27};
    28
    30public:
    31 virtual ~FileReader() = default;
    32
    33 virtual const char* GetContents() = 0;
    34 virtual size_t GetSize() = 0;
    35 virtual FileStatus GetStatus() = 0;
    36 virtual void Yeet() = 0;
    37
    38 static FileReader* GetReader(const char* path);
    39
    40 static void SetSearchList();
    41 static std::vector<FileSource> GetSearchList();
    42};
    43
    45public:
    46 virtual ~FileWriter() = default;
    47
    48 virtual void SetContents(const char* contents, size_t size) = 0;
    49 virtual FileStatus GetStatus() = 0;
    50 virtual void Yeet() = 0;
    51
    52 static FileWriter* GetWriter(const char* path);
    53
    54 static void SetMediumList();
    55 static std::vector<FileSource> GetMediumList();
    56};
    57
    58}
    59
    60#endif // PLATFORM_FILE_H
    Definition: file.h:29
    static std::vector< FileSource > GetSearchList()
    Definition: file.cpp:107
    virtual size_t GetSize()=0
    virtual const char * GetContents()=0
    static void SetSearchList()
    Definition: file.cpp:103
    virtual void Yeet()=0
    virtual ~FileReader()=default
    static FileReader * GetReader(const char *path)
    Definition: file.cpp:99
    virtual FileStatus GetStatus()=0
    Definition: file.h:44
    virtual void SetContents(const char *contents, size_t size)=0
    virtual void Yeet()=0
    static void SetMediumList()
    Definition: file.cpp:160
    virtual ~FileWriter()=default
    static std::vector< FileSource > GetMediumList()
    Definition: file.cpp:164
    static FileWriter * GetWriter(const char *path)
    Definition: file.cpp:155
    virtual FileStatus GetStatus()=0
    Serialization, i.e.
    FileMedium
    Definition: file.h:17
    FileStatus
    Definition: file.h:12
    Definition: file.h:24
    FileMedium medium
    Definition: file.h:25
    std::string path
    Definition: file.h:26
    ================================================ FILE: docs/cppapi/platform_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/platform/platform.h File Reference
    Tramway SDK v0.1.1
    platform.h File Reference

    Go to the source code of this file.

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    ================================================ FILE: docs/cppapi/platform_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/platform/platform.h Source File
    Tramway SDK v0.1.1
    platform.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_PLATFORM_PLATFORM_H
    4#define TRAM_SDK_PLATFORM_PLATFORM_H
    5
    6namespace tram {
    7
    8}
    9
    10#endif // PLATFORM_PLATFORM_H
    Serialization, i.e.
    ================================================ FILE: docs/cppapi/pool_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/pool.h File Reference
    Tramway SDK v0.1.1
    pool.h File Reference
    #include <string>
    #include <iostream>
    #include <cassert>

    Go to the source code of this file.

    Classes

    class  tram::Pool< T >
     
    struct  tram::Pool< T >::iterator
     
    class  tram::PoolProxy< T >
     
    class  tram::PoolPtr< T >
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     

    Typedefs

    template<typename T >
    using tram::PoopProxy = PoolProxy< T >
     
    ================================================ FILE: docs/cppapi/pool_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/pool.h Source File
    Tramway SDK v0.1.1
    pool.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_TEMPLATES_POOL_H
    4#define TRAM_SDK_TEMPLATES_POOL_H
    5
    6#include <string>
    7#include <iostream>
    8#include <cassert>
    9
    10/* this is one of the oldest files in the library, hence why it looks so awful.
    11 * it probably would be a good idea to clean up the code, but editing this file
    12 * causes the whole library to re-compile and I don't really feel like doing it
    13 * now. also adding this comment caused the whole library to recompile. also
    14 * adding this bit at the end caused the library to re-compile. I should
    15 * probably stop editing this file.
    16 */
    17
    18namespace tram {
    19
    20template <typename T>
    21class Pool {
    22protected:
    23 std::string poolName;
    24 uint64_t poolSize;
    25 uint64_t maxSize;
    27 T* last;
    29public:
    30 struct iterator {
    31 iterator(T* ptr) : ptr(ptr) {}
    32
    33 T& operator*() const { return *ptr; }
    34 T* operator->() { return ptr; }
    35
    36 iterator& operator++() { do ptr++; while (*((uint64_t*)ptr) == 0 && *(((uint64_t*)ptr) + 1) != 0); return *this; }
    37
    38 iterator operator++(int) { iterator tmp = *this; ++(*this); return tmp; }
    39
    40 friend bool operator== (const iterator& a, const iterator& b) { return a.ptr == b.ptr; };
    41 friend bool operator!= (const iterator& a, const iterator& b) { return a.ptr != b.ptr; };
    42
    43 T* ptr;
    44 };
    45
    46 constexpr Pool(const char* name, uint64_t initialSize/*, bool skipFirst = false*/) {
    47 poolName = name;
    48 maxSize = initialSize;
    49 //poolSize = skipFirst ? 1 : 0;
    50 poolSize = 0;
    51
    52 first = static_cast<T*>(::operator new((initialSize * sizeof(T)) + sizeof(uint64_t) * 2));
    53 last = first;
    55
    56 /*if (skipFirst) {
    57 last++;
    58 lastfree++;
    59 }*/
    60
    61 *((uint64_t*)last) = 0;
    62 *(((uint64_t*)last) + 1) = 0;
    63 };
    64
    65 constexpr Pool(const char* name, uint64_t initialSize, std::initializer_list<T> list) : Pool(name, initialSize) {
    66 for (const auto& entry : list) {
    67 //*AddNew(1) = entry; // not good, but works
    68 AddNew(entry);
    69 }
    70 }
    71
    72 template <typename... Args>
    73 T* AddNew(Args&&... args){
    74 if(poolSize == maxSize){
    75 std::cout << "Pool " << poolName << " out of space!" << std::endl;
    76 abort();
    77 }
    78
    79 T* newobj;
    80
    81 if(lastfree != last){
    82 newobj = lastfree;
    83 uint64_t* skip = reinterpret_cast<uint64_t*>(lastfree);
    84 skip++;
    85 T** skip2 = reinterpret_cast<T**>(skip);
    86 lastfree = *skip2;
    87 } else {
    88 newobj = lastfree;
    89 last++;
    90 lastfree++;
    91
    92 *((uint64_t*)last) = 0;
    93 *(((uint64_t*)last) + 1) = 0;
    94 }
    95
    96 new(newobj) T(std::forward<Args>(args)...);
    97
    98 poolSize++;
    99
    100 return newobj;
    101 };
    102
    103 void Remove(T* removeptr){
    104 assert(removeptr >= first && removeptr < last); // pointer is in pool
    105 removeptr->~T(); // destruct
    106 uint64_t* skip = reinterpret_cast<uint64_t*>(removeptr);
    107 *skip = 0; // mark as empty
    108 skip++;
    109 T** nextfree = reinterpret_cast<T**>(skip);
    110 *nextfree = lastfree; // add pointer to previous free place
    111 lastfree = removeptr;
    112 poolSize--;
    113 };
    114 T& operator[](size_t index) { return *(first + index); } // note that there is no checking for whether the index is valid
    115 T* GetFirst() {return first;}; // yeet?
    116 T* GetLast() {return last;}; // also yeet?
    117 iterator begin() {auto ptr = first; while (*((uint64_t*)ptr) == 0 && ptr < last) ptr++; return ptr;};
    118 iterator end() {return last;};
    119 size_t GetSize() const {return poolSize;}; // yeet too?
    120 size_t size() const {return poolSize;};
    121 size_t index(const T* ptr) const {return ptr - first;};
    122
    124 bool validate (const T* ptr) const {
    125 return ptr >= first && ptr <= last && *((uint64_t*)ptr) != 0;
    126 }
    127
    128 // make sure that there will be enough room for the empty place marker and free list pointer
    129 static_assert(sizeof(T) >= sizeof(T*) + sizeof(uint64_t));
    130 //static_assert(sizeof(T) % sizeof(uint64_t) == 0); // idk what this is
    131};
    132
    133template <typename T>
    135public:
    136 template <typename... Args>
    137 static T* New(Args&&... args){return pool.AddNew(std::forward<Args>(args)...);}
    138 static void Delete(T* obj){pool.Remove(obj);}
    139 static Pool<T>& GetPool(){return pool;}
    140protected:
    141 static Pool<T> pool;
    142};
    143
    144template <typename T> using PoopProxy = PoolProxy<T>;
    145
    146template <typename T>
    147class PoolPtr {
    148public:
    151 T* GetResource() { return ptr; }
    152 T* operator->() { return ptr; }
    153 T& operator*() { return ptr; }
    154 explicit operator bool() { return ptr != nullptr; }
    155protected:
    156 T* ptr;
    157};
    158
    159}
    160
    161#endif // TRAM_SDK_TEMPLATES_POOL_H
    Definition: pool.h:21
    constexpr Pool(const char *name, uint64_t initialSize, std::initializer_list< T > list)
    Definition: pool.h:65
    T * lastfree
    Definition: pool.h:28
    bool validate(const T *ptr) const
    Checks if an object can be accessed through iteration.
    Definition: pool.h:124
    T * AddNew(Args &&... args)
    Definition: pool.h:73
    uint64_t poolSize
    Definition: pool.h:24
    T * last
    Definition: pool.h:27
    iterator end()
    Definition: pool.h:118
    constexpr Pool(const char *name, uint64_t initialSize)
    Definition: pool.h:46
    void Remove(T *removeptr)
    Definition: pool.h:103
    T * GetLast()
    Definition: pool.h:116
    std::string poolName
    Definition: pool.h:23
    size_t index(const T *ptr) const
    Definition: pool.h:121
    iterator begin()
    Definition: pool.h:117
    uint64_t maxSize
    Definition: pool.h:25
    T * first
    Definition: pool.h:26
    T & operator[](size_t index)
    Definition: pool.h:114
    T * GetFirst()
    Definition: pool.h:115
    size_t size() const
    Definition: pool.h:120
    size_t GetSize() const
    Definition: pool.h:119
    Definition: pool.h:134
    static void Delete(T *obj)
    Definition: pool.h:138
    static Pool< T > & GetPool()
    Definition: pool.h:139
    static T * New(Args &&... args)
    Definition: pool.h:137
    static Pool< T > pool
    Definition: pool.h:141
    Definition: pool.h:147
    T * GetResource()
    Definition: pool.h:151
    T * operator->()
    Definition: pool.h:152
    ~PoolPtr()
    Definition: pool.h:150
    T & operator*()
    Definition: pool.h:153
    T * ptr
    Definition: pool.h:156
    PoolPtr()
    Definition: pool.h:149
    Serialization, i.e.
    Definition: pool.h:30
    iterator(T *ptr)
    Definition: pool.h:31
    T * operator->()
    Definition: pool.h:34
    friend bool operator!=(const iterator &a, const iterator &b)
    Definition: pool.h:41
    T * ptr
    Definition: pool.h:41
    friend bool operator==(const iterator &a, const iterator &b)
    Definition: pool.h:40
    iterator operator++(int)
    Definition: pool.h:38
    T & operator*() const
    Definition: pool.h:33
    iterator & operator++()
    Definition: pool.h:36
    ================================================ FILE: docs/cppapi/probe_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/probe.cpp File Reference
    Tramway SDK v0.1.1
    probe.cpp File Reference
    #include <extensions/kitchensink/probe.h>
    #include <render/light.h>
    #include <render/api.h>
    #include <framework/ui.h>
    #include <framework/gui.h>
    #include <framework/logging.h>
    #include <platform/image.h>

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Ext
     
    namespace  tram::Ext::Kitchensink
     Extension containing random stuff that doesn't fit in anywhere else.
     

    Functions

    void tram::Ext::Kitchensink::RegisterRenderEnvironmentMapShortcut ()
     
    void tram::Ext::Kitchensink::RenderEnvironmentMaps (WorldCell *cell)
     
    ================================================ FILE: docs/cppapi/probe_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/probe.h File Reference
    Tramway SDK v0.1.1
    probe.h File Reference

    Go to the source code of this file.

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Ext
     
    namespace  tram::Ext::Kitchensink
     Extension containing random stuff that doesn't fit in anywhere else.
     

    Functions

    void tram::Ext::Kitchensink::RegisterRenderEnvironmentMapShortcut ()
     
    void tram::Ext::Kitchensink::RenderEnvironmentMaps (WorldCell *cell)
     
    ================================================ FILE: docs/cppapi/probe_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/probe.h Source File
    Tramway SDK v0.1.1
    probe.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_EXTENSIONS_KITCHENSINK_PROBE_H
    4#define TRAM_SDK_EXTENSIONS_KITCHENSINK_PROBE_H
    5
    7
    9
    11void RenderEnvironmentMaps(WorldCell*);
    12
    13}
    14
    15#endif // TRAM_SDK_EXTENSIONS_KITCHENSINK_PROBE_H
    Extension containing random stuff that doesn't fit in anywhere else.
    Definition: ai.cpp:15
    void RegisterRenderEnvironmentMapShortcut()
    Definition: probe.cpp:16
    void RenderEnvironmentMaps(WorldCell *cell)
    Definition: probe.cpp:28
    ================================================ FILE: docs/cppapi/query_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/query.h File Reference
    Tramway SDK
    query.h File Reference
    #include <cstdint>
    #include <cstddef>

    Go to the source code of this file.

    Namespaces

    namespace  tram
     

    Typedefs

    typedef uint32_t tram::query_t
     

    Enumerations

    enum  tram::Query : query_t {
      tram::QUERY_PICKUPABLE , tram::QUERY_LOOK_DIRECTION , tram::QUERY_BOUNDING_BOX_MIN , tram::QUERY_BOUNDING_BOX_MAX ,
      tram::LAST_QUERY
    }
     
    ================================================ FILE: docs/cppapi/query_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/query.h Source File
    Tramway SDK
    query.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3
    4#ifndef TRAM_SDK_FRAMEWORK_QUERY_H
    5#define TRAM_SDK_FRAMEWORK_QUERY_H
    6
    7#include <cstdint>
    8#include <cstddef>
    9
    10namespace tram {
    11
    12typedef uint32_t query_t;
    13
    14enum Query : query_t {
    20};
    21
    22}
    23
    24#endif // TRAM_SDK_FRAMEWORK_QUERY_H
    Definition: api.h:17
    uint32_t query_t
    Definition: query.h:12
    Query
    Definition: query.h:14
    @ QUERY_PICKUPABLE
    Definition: query.h:15
    @ LAST_QUERY
    Definition: query.h:19
    @ QUERY_BOUNDING_BOX_MAX
    Definition: query.h:18
    @ QUERY_BOUNDING_BOX_MIN
    Definition: query.h:17
    @ QUERY_LOOK_DIRECTION
    Definition: query.h:16
    ================================================ FILE: docs/cppapi/quest_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/quest.cpp File Reference
    Tramway SDK v0.1.1
    quest.cpp File Reference
    #include <extensions/kitchensink/quest.h>
    #include <extensions/kitchensink/inventory.h>
    #include <framework/entity.h>
    #include <framework/script.h>
    #include <framework/file.h>
    #include <templates/pool.h>
    #include <cstring>

    Classes

    class  tram::Ext::Kitchensink::QuestEntity
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Ext
     
    namespace  tram::Ext::Kitchensink
     Extension containing random stuff that doesn't fit in anywhere else.
     
    ================================================ FILE: docs/cppapi/quest_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/quest.h File Reference
    Tramway SDK v0.1.1
    quest.h File Reference
    ================================================ FILE: docs/cppapi/quest_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/quest.h Source File
    Tramway SDK v0.1.1
    quest.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_EXTENSIONS_KITCHENSINK_QUEST_H
    4#define TRAM_SDK_EXTENSIONS_KITCHENSINK_QUEST_H
    5
    6#include <framework/value.h>
    7
    8#include <vector>
    9
    10namespace tram::Ext::Kitchensink {
    11
    12enum quest_t : int {
    14
    17
    25
    28
    30
    31
    33
    34
    39};
    40
    44
    45 union {
    46 struct {
    49
    50 struct {
    55
    56 struct {
    59
    60 struct {
    63
    64 // if quest2 set, then variable2 is name of the quest's variable
    65 // if quest is not set, then variable2 is the Value for comparison
    68
    70
    71 struct {
    74 int count;
    76 };
    77
    80
    87
    90
    92
    94
    96
    99
    102 //QuestVariable& operator=(QuestVariable& a, const QuestVariable& b);
    103
    105};
    106
    110
    111 name_t condition; // condition, if any, for firing
    112
    113 name_t variable; // name for variable which will be set
    114 value_t value; // variable name for which will be set
    115
    117 void SetObjective(name_t name, name_t state);
    119};
    120
    121struct Quest {
    123
    125
    126 std::vector<QuestVariable> variables;
    127 std::vector<QuestTrigger> triggers;
    128
    129 // TODO: add trigger script
    130 // if can't find in trigger list, then call script
    131
    133 void SetVariable(name_t, Value);
    134
    135 void FireTrigger(name_t);
    136
    137 static void Init();
    138
    139
    140 static std::vector<Quest*> FindAll(bool unknown_also);
    141
    142 static void LoadFromDisk(const char* filename);
    143 static Quest* Find(name_t quest);
    144};
    145
    146}
    147
    148#endif // TRAM_SDK_EXTENSIONS_KITCHENSINK_QUEST_H
    Generic, type-safe union.
    Definition: value.h:18
    Extension containing random stuff that doesn't fit in anywhere else.
    Definition: ai.cpp:15
    quest_t
    Definition: quest.h:12
    @ QUEST_VAR_CONDITION_OR
    Definition: quest.h:27
    @ QUEST_VAR_VALUE_GREATER_OR_EQUAL
    Definition: quest.h:21
    @ QUEST_TGR_INCREMENT
    Definition: quest.h:37
    @ QUEST_VAR_CONDITION_AND
    Definition: quest.h:26
    @ QUEST_VAR_INVALID
    Definition: quest.h:13
    @ QUEST_VAR_CONDITION_NOT
    Definition: quest.h:24
    @ QUEST_TGR_SET_OBJECTIVE
    Definition: quest.h:36
    @ QUEST_VAR_CONDITION_SCRIPT
    Definition: quest.h:29
    @ QUEST_VAR_VALUE_IS
    Definition: quest.h:18
    @ QUEST_VAR_VALUE
    Definition: quest.h:15
    @ QUEST_VAR_OBJECTIVE
    Definition: quest.h:16
    @ QUEST_TGR_SET_VARIABLE
    Definition: quest.h:35
    @ QUEST_VAR_ENTITY_ITEM_COUNT
    Definition: quest.h:32
    @ QUEST_VAR_VALUE_LESS_OR_EQUAL
    Definition: quest.h:23
    @ QUEST_VAR_VALUE_GREATER
    Definition: quest.h:20
    @ QUEST_VAR_VALUE_IS_NOT
    Definition: quest.h:19
    @ QUEST_VAR_VALUE_LESS
    Definition: quest.h:22
    @ QUEST_TGR_SHOW_MESSAGE
    Definition: quest.h:38
    Definition: quest.h:121
    Value GetVariable(name_t)
    Definition: quest.cpp:286
    static void Init()
    Definition: quest.cpp:397
    name_t name
    Definition: quest.h:124
    static Quest * Find(name_t quest)
    Definition: quest.cpp:385
    Quest(name_t name)
    Definition: quest.h:122
    void SetVariable(name_t, Value)
    Definition: quest.cpp:296
    static void LoadFromDisk(const char *filename)
    Definition: quest.cpp:427
    void FireTrigger(name_t)
    Definition: quest.cpp:318
    std::vector< QuestVariable > variables
    Definition: quest.h:126
    static std::vector< Quest * > FindAll(bool unknown_also)
    Definition: quest.cpp:353
    std::vector< QuestTrigger > triggers
    Definition: quest.h:127
    name_t name
    Definition: quest.h:108
    name_t variable
    Definition: quest.h:113
    quest_t type
    Definition: quest.h:109
    name_t condition
    Definition: quest.h:111
    value_t value
    Definition: quest.h:114
    void SetIncrement(name_t variable)
    Definition: quest.cpp:279
    void SetObjective(name_t name, name_t state)
    Definition: quest.cpp:273
    void SetValue(name_t variable, Value)
    Definition: quest.cpp:267
    name_t item
    Definition: quest.h:73
    ~QuestVariable()
    Definition: quest.h:98
    static QuestVariable Value(name_t, value_t)
    Definition: quest.cpp:35
    struct tram::Ext::Kitchensink::QuestVariable::@21::@26 comparison
    name_t quest1
    Definition: quest.h:61
    static QuestVariable ItemCount(name_t, name_t, name_t)
    Definition: quest.cpp:196
    static QuestVariable Script(name_t, name_t)
    Definition: quest.cpp:172
    static QuestVariable Is(name_t, name_t, name_t, name_t, value_t)
    Definition: quest.cpp:46
    value_t variable2
    Definition: quest.h:67
    QuestVariable & operator=(const QuestVariable &)
    Definition: quest.cpp:30
    QuestVariable()
    Definition: quest.h:97
    static QuestVariable Or(name_t, name_t, name_t, name_t, value_t)
    Definition: quest.cpp:158
    int count
    Definition: quest.h:74
    struct tram::Ext::Kitchensink::QuestVariable::@21::@25 script
    static QuestVariable Less(name_t, name_t, name_t, name_t, value_t)
    Definition: quest.cpp:102
    name_t entity
    Definition: quest.h:72
    struct tram::Ext::Kitchensink::QuestVariable::@21::@24 objective
    static QuestVariable Greater(name_t, name_t, name_t, name_t, value_t)
    Definition: quest.cpp:74
    quest_t type
    Definition: quest.h:43
    static QuestVariable Not(name_t, name_t, name_t)
    Definition: quest.cpp:130
    name_t subtitle
    Definition: quest.h:53
    name_t value
    Definition: quest.h:51
    static QuestVariable LessOrEqual(name_t, name_t, name_t, name_t, value_t)
    Definition: quest.cpp:116
    Value value
    Definition: quest.h:47
    static QuestVariable IsNot(name_t, name_t, name_t, name_t, value_t)
    Definition: quest.cpp:60
    static QuestVariable GreaterOrEqual(name_t, name_t, name_t, name_t, value_t)
    Definition: quest.cpp:88
    name_t name
    Definition: quest.h:42
    static QuestVariable Objective(name_t, name_t, name_t, name_t)
    Definition: quest.cpp:183
    value_t Evaluate()
    Definition: quest.cpp:220
    name_t variable1
    Definition: quest.h:62
    name_t title
    Definition: quest.h:52
    static QuestVariable And(name_t, name_t, name_t, name_t, value_t)
    Definition: quest.cpp:144
    name_t quest2
    Definition: quest.h:66
    Interned string type.
    Definition: uid.h:10
    ================================================ FILE: docs/cppapi/queue_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/queue.h File Reference
    Tramway SDK v0.1.1
    queue.h File Reference
    #include <iostream>
    #include <atomic>

    Go to the source code of this file.

    Classes

    class  tram::Queue< T >
     Simple queue implementation. More...
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    ================================================ FILE: docs/cppapi/queue_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/queue.h Source File
    Tramway SDK v0.1.1
    queue.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_TEMPLATES_QUEUE_H
    4#define TRAM_SDK_TEMPLATES_QUEUE_H
    5
    6#include <iostream>
    7#include <atomic>
    8
    9namespace tram {
    10
    16template <typename T>
    17class Queue {
    18public:
    19 Queue() = delete;
    20 Queue(const Queue&) = delete;
    21 Queue(Queue&&) = delete;
    22 Queue(const char* name, size_t count) : name(name), count(count) {
    23 T* allocated_memory = (T*)::operator new (count * sizeof(T));
    24
    25 first = allocated_memory;
    26 last = allocated_memory;
    27
    28 memory_start = allocated_memory;
    29 memory_end = allocated_memory + count;
    30
    31 csize = 0;
    32 }
    33
    35 template <typename... Args>
    36 void push(Args&&... args) {
    37 lock();
    38
    39 if (count == csize) {
    40 std::cout << "Queue " << name << " out of space!" << std::endl;
    41 unlock();
    42 return;
    43 }
    44
    45 new (last) T (std::forward<Args>(args)...);
    46
    47 last++;
    48 csize++;
    49
    50 // wrap around
    51 if (last == memory_end) {
    53 }
    54
    55 unlock();
    56 }
    57
    58 void pop() {
    59 first->~T();
    60
    61 first++;
    62 csize--;
    63
    64 // wrap around
    65 if (first == memory_end) {
    67 }
    68 }
    69
    70 T& front() {
    71 return *first;
    72 }
    73
    74 T& back() {
    75 if (T* elem = last - 1; elem < memory_start) {
    76 return *(memory_end - 1);
    77 } else {
    78 return *last;
    79 }
    80 }
    81
    86 bool try_pop(T& value) {
    87 lock();
    88
    89 if (csize == 0) {
    90 unlock();
    91 return false;
    92 }
    93
    94 value = *first;
    95 pop();
    96
    97 unlock();
    98 return true;
    99 }
    100
    101 size_t size() { return csize; }
    102
    103 void lock() { while (spinlock.exchange(true)); }
    104 void unlock() { spinlock.store(false); }
    105
    106protected:
    107 const char* name; // name of queue for log messages etc.
    108 size_t csize; // how many elements are in queue right now
    109 size_t count; // how many elements can be added to queue
    110 T* first; // first element in queue
    111 T* last; // one past last element in queue
    112 T* memory_start; // beginning of allocated memory
    113 T* memory_end; // end of allocated memory
    114
    115 std::atomic<bool> spinlock = {false};
    116};
    117
    118}
    119
    120#endif // TRAM_SDK_TEMPLATES_QUEUE_H
    Simple queue implementation.
    Definition: queue.h:17
    bool try_pop(T &value)
    Thread safe.
    Definition: queue.h:86
    void unlock()
    Definition: queue.h:104
    void lock()
    Definition: queue.h:103
    T * memory_start
    Definition: queue.h:112
    Queue(Queue &&)=delete
    void push(Args &&... args)
    Thread safe.
    Definition: queue.h:36
    T & front()
    Definition: queue.h:70
    Queue(const Queue &)=delete
    std::atomic< bool > spinlock
    Definition: queue.h:115
    void pop()
    Definition: queue.h:58
    T * last
    Definition: queue.h:111
    size_t count
    Definition: queue.h:109
    const char * name
    Definition: queue.h:107
    T * memory_end
    Definition: queue.h:113
    T & back()
    Definition: queue.h:74
    Queue(const char *name, size_t count)
    Definition: queue.h:22
    Queue()=delete
    T * first
    Definition: queue.h:110
    size_t csize
    Definition: queue.h:108
    size_t size()
    Definition: queue.h:101
    Serialization, i.e.
    ================================================ FILE: docs/cppapi/render_2aabb_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/aabb.h File Reference
    Tramway SDK
    aabb.h File Reference
    #include <framework/math.h>
    #include <render/model.h>

    Go to the source code of this file.

    Classes

    struct  tram::Render::AABB::QueryResponse
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Render
     High-level Render system API.
     
    namespace  tram::Render::AABB
     Scene tree.
     
    namespace  tram::Render::LightTree
     Scene light tree.
     

    Typedefs

    typedef void * tram::Render::aabbleaf_t
     

    Enumerations

    enum  tram::Render::AABB::ReferenceType : uint32_t { tram::Render::AABB::REFERENCE_RENDERCOMPONENT = 1 }
     

    Functions

    aabbleaf_t tram::Render::AABB::InsertLeaf (RenderComponent *component, vec3 position, quat rotation, vec3 scale)
     Inserts a RenderComponent leaf into the scene tree. More...
     
    void tram::Render::AABB::RemoveLeaf (aabbleaf_t leaf_id)
     Removes a leaf from. More...
     
    QueryResponse tram::Render::AABB::FindNearestFromRay (vec3 ray_pos, vec3 ray_dir, uint32_t mask)
     Peforms a raycast and retrieves the nearest object. More...
     
    void tram::Render::AABB::DebugDrawTree ()
     Draws the scene tree for a single frame. More...
     
    void tram::Render::LightTree::AddLight (light_t light, vec3 pos, float dist)
     Adds a light to the light tree. More...
     
    void tram::Render::LightTree::FindLights (vec3 position, light_t *dest)
     Finds the 4 nearest lights to a given position. More...
     
    void tram::Render::LightTree::RemoveLight (light_t light)
     Removes a light from the light tree. More...
     
    ================================================ FILE: docs/cppapi/render_2aabb_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/aabb.h Source File
    Tramway SDK
    aabb.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_RENDER_AABB_H
    4#define TRAM_SDK_RENDER_AABB_H
    5
    6#include <framework/math.h>
    7#include <render/model.h>
    8
    9namespace tram {
    10 class RenderComponent;
    11}
    12
    13namespace tram::Render {
    14 typedef void* aabbleaf_t;
    15}
    16
    17namespace tram::Render::AABB {
    18
    19enum ReferenceType : uint32_t {
    21};
    22
    25 void* data;
    26
    29};
    30
    31aabbleaf_t InsertLeaf(RenderComponent* component, vec3 position, quat rotation, vec3 scale);
    32void RemoveLeaf(aabbleaf_t leaf);
    33
    34QueryResponse FindNearestFromRay(vec3 ray_pos, vec3 ray_dir, uint32_t mask);
    35
    36void DebugDrawTree();
    37
    38}
    39
    41
    42void AddLight(light_t light, vec3 pos, float dist);
    43void FindLights(vec3 position, light_t* dest);
    44void RemoveLight(light_t light);
    45
    46}
    47
    48#endif // TRAM_SDK_RENDER_AABB_H
    Renders a Model.
    Definition: render.h:12
    void RemoveLeaf(aabbleaf_t leaf_id)
    Removes a leaf from.
    Definition: aabb.cpp:101
    ReferenceType
    Definition: aabb.h:19
    @ REFERENCE_RENDERCOMPONENT
    Definition: aabb.h:20
    QueryResponse FindNearestFromRay(vec3 ray_pos, vec3 ray_dir, uint32_t mask)
    Peforms a raycast and retrieves the nearest object.
    Definition: aabb.cpp:113
    aabbleaf_t InsertLeaf(RenderComponent *component, vec3 position, quat rotation, vec3 scale)
    Inserts a RenderComponent leaf into the scene tree.
    Definition: aabb.cpp:61
    void DebugDrawTree()
    Draws the scene tree for a single frame.
    Definition: aabb.cpp:184
    Scene light tree.
    void AddLight(light_t light, vec3 pos, float dist)
    Adds a light to the light tree.
    Definition: aabb.cpp:203
    void RemoveLight(light_t light)
    Removes a light from the light tree.
    Definition: aabb.cpp:230
    void FindLights(vec3 position, light_t *dest)
    Finds the 4 nearest lights to a given position.
    Definition: aabb.cpp:216
    High-level Render system API.
    Definition: gui.h:8
    void * aabbleaf_t
    Definition: aabb.h:14
    Serialization, i.e.
    glm::vec3 vec3
    Definition: math.h:11
    glm::quat quat
    Definition: math.h:12
    vec3 intersection
    Definition: aabb.h:27
    ReferenceType type
    Definition: aabb.h:24
    AABBTriangle triangle
    Definition: aabb.h:28
    void * data
    Definition: aabb.h:25
    Definition: model.h:13
    Definition: render.h:166
    ================================================ FILE: docs/cppapi/render_2animation_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/animation.cpp File Reference
    Tramway SDK v0.1.1
    animation.cpp File Reference
    #include <render/animation.h>
    #include <components/animation.h>
    #include <framework/logging.h>
    #include <framework/file.h>
    #include <templates/hashmap.h>
    #include <templates/stackpool.h>
    #include <cstring>

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Render
     High-level Render system API.
     

    Functions

    Hashmap< Animation * > tram::Render::animation_list ("model name list", 500)
     

    Variables

    StackPool< uint8_t > tram::Render::animation_pool ("animation keyframe pool", 1024 *1024)
     
    ================================================ FILE: docs/cppapi/render_2animation_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/animation.h File Reference
    Tramway SDK v0.1.1
    animation.h File Reference
    #include <unordered_map>
    #include <framework/core.h>
    #include <framework/uid.h>
    #include <framework/resource.h>
    #include <framework/math.h>

    Go to the source code of this file.

    Classes

    struct  tram::Render::Bone
     Bone for a 3D models skeleton. More...
     
    struct  tram::Render::Keyframe
     Keyframe for a skeletal animation. More...
     
    struct  tram::Render::Pose
     
    struct  tram::Render::KeyframeHeader
     
    class  tram::Render::Animation
     Skeletal animation for a 3D model. More...
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Render
     High-level Render system API.
     

    Typedefs

    typedef std::pair< name_t, uint64_t > tram::Render::NameCount
     

    Variables

    const size_t tram::Render::BONE_COUNT = 30
     
    ================================================ FILE: docs/cppapi/render_2animation_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/animation.h Source File
    Tramway SDK v0.1.1
    animation.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_ARMATURE_H
    4#define TRAM_SDK_ARMATURE_H
    5
    6#include <unordered_map>
    7
    8#include <framework/core.h>
    9#include <framework/uid.h>
    10#include <framework/resource.h>
    11
    12#include <framework/math.h>
    13
    14namespace tram::Render {
    15
    16typedef std::pair<name_t, uint64_t> NameCount; // animation header
    17const size_t BONE_COUNT = 30; // bone count in a pose
    18
    19struct Bone {
    21 int32_t parent = -1;
    22 vec3 head = {0.0f, 0.0f, 0.0f};
    23 vec3 tail = {1.0f, 1.0f, 1.0f};
    24 float roll = 0.0f;
    25};
    26
    27struct Keyframe {
    28 float frame = 0.0f;
    29 vec3 location = {0.0f, 0.0f, 0.0f};
    30 quat rotation = {1.0f, 0.0f, 0.0f, 0.0f};
    31 vec3 scale = {1.0f, 1.0f, 1.0f};
    32 char padding[4]; // for emscripten ??
    33};
    34
    35struct Pose {
    37};
    38
    43};
    44
    45class Animation : public Resource {
    46public:
    48
    50 uint32_t GetKeyframeCount(name_t bone);
    51
    52 inline KeyframeHeader* GetHeader(uint32_t index) { return &headers[index]; }
    53 inline uint32_t GetHeaderCount() { return header_count; }
    54
    55 void LoadFromDisk();
    57
    58 void Unload();
    59
    60 static Animation* Find(name_t name);
    61 static void LoadAll();
    62private:
    63 Keyframe* keyframes = nullptr;
    64
    65 KeyframeHeader* headers = nullptr;
    66 uint32_t header_count = 0;
    67};
    68
    69}
    70
    71#endif // TRAM_SDK_ARMATURE_H
    Skeletal animation for a 3D model.
    Definition: animation.h:45
    void LoadFromMemory()
    Definition: animation.h:56
    uint32_t GetKeyframeCount(name_t bone)
    Definition: animation.cpp:170
    uint32_t GetHeaderCount()
    Definition: animation.h:53
    KeyframeHeader * GetHeader(uint32_t index)
    Definition: animation.h:52
    void LoadFromDisk()
    Definition: animation.cpp:91
    static Animation * Find(name_t name)
    Definition: animation.cpp:180
    void Unload()
    Definition: animation.cpp:156
    Animation(name_t name)
    Definition: animation.h:47
    Keyframe * GetKeyframes(name_t bone)
    Definition: animation.cpp:160
    Definition: resource.h:11
    name_t name
    Definition: resource.h:37
    High-level Render system API.
    Definition: gui.h:8
    std::pair< name_t, uint64_t > NameCount
    Definition: animation.h:16
    const size_t BONE_COUNT
    Definition: animation.h:17
    glm::vec3 vec3
    Definition: math.h:11
    glm::quat quat
    Definition: math.h:12
    glm::mat4 mat4
    Definition: math.h:14
    Bone for a 3D models skeleton.
    Definition: animation.h:19
    float roll
    Rotation of the bone.
    Definition: animation.h:24
    int32_t parent
    Parent index of the bone.
    Definition: animation.h:21
    name_t name
    Unique identifier for the bone.
    Definition: animation.h:20
    vec3 head
    Origin of the bone.
    Definition: animation.h:22
    vec3 tail
    Direction of the bone.
    Definition: animation.h:23
    Definition: animation.h:39
    uint32_t keyframe_offset
    Definition: animation.h:41
    uint32_t keyframe_count
    Definition: animation.h:42
    name_t bone
    Definition: animation.h:40
    Keyframe for a skeletal animation.
    Definition: animation.h:27
    float frame
    Used only when keyframes are used in the context of an animation.
    Definition: animation.h:28
    char padding[4]
    Definition: animation.h:32
    vec3 location
    Definition: animation.h:29
    vec3 scale
    Definition: animation.h:31
    quat rotation
    Definition: animation.h:30
    Definition: animation.h:35
    mat4 pose[BONE_COUNT]
    Definition: animation.h:36
    Interned string type.
    Definition: uid.h:10
    ================================================ FILE: docs/cppapi/render_2api_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/api.h File Reference
    Tramway SDK v0.1.1
    api.h File Reference
    #include <render/render.h>
    #include <render/renderer.h>

    Go to the source code of this file.

    Namespaces

    namespace  tram::Render::API
     Rendering backend API.
     
    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Render
     High-level Render system API.
     

    Enumerations

    enum  tram::Render::API::ContextType {
      tram::Render::API::CONTEXT_OPENGL , tram::Render::API::CONTEXT_WEBGL , tram::Render::API::CONTEXT_DIRECT3D , tram::Render::API::CONTEXT_SOFTWARE ,
      tram::Render::API::CONTEXT_NONE
    }
     

    Functions

    void tram::Render::API::Init ()
     
    void tram::Render::API::RenderFrame ()
     
    void tram::Render::API::SetScreenSize (float width, float height)
     
    void tram::Render::API::SetScreenClear (vec3 clear_color, bool clear)
     
    void tram::Render::API::SetLightingParameters (vec3 sun_direction, vec3 sun_color, vec3 ambient_color, layer_t layer)
     
    void tram::Render::API::SetViewMatrix (const mat4 &matrix, layer_t layer)
     
    void tram::Render::API::SetProjectionMatrix (const mat4 &matrix, layer_t layer)
     
    void tram::Render::API::GetScreen (char *buffer, int w, int h)
     
    void tram::Render::API::RegisterShader (vertexformat_t format, materialtype_t type, const char *vertex_shader, const char *fragment_shader)
     
    drawlistentry_t tram::Render::API::InsertDrawListEntry ()
     
    void tram::Render::API::RemoveDrawListEntry (drawlistentry_t entry)
     
    uint32_t tram::Render::API::GetFlags (drawlistentry_t entry)
     
    void tram::Render::API::SetFlags (drawlistentry_t entry, uint32_t flags)
     
    void tram::Render::API::SetLayer (drawlistentry_t entry, layer_t layer)
     
    void tram::Render::API::SetPose (drawlistentry_t entry, Pose *pose)
     
    void tram::Render::API::SetLightmap (drawlistentry_t entry, texturehandle_t lightmap)
     
    void tram::Render::API::SetEnvironmentMap (drawlistentry_t entry, texturehandle_t environmentmap)
     
    void tram::Render::API::SetSphericalHarmonic (drawlistentry_t entry, sphericalharmonic_t harmonic)
     
    void tram::Render::API::SetLights (drawlistentry_t entry, light_t *lights)
     
    void tram::Render::API::SetMatrix (drawlistentry_t entry, const mat4 &matrix)
     
    void tram::Render::API::SetFadeDistance (drawlistentry_t entry, float near, float far)
     
    void tram::Render::API::SetDrawListVertexArray (drawlistentry_t entry, vertexarray_t vertex_array_handle)
     
    void tram::Render::API::SetDrawListIndexArray (drawlistentry_t entry, indexarray_t index_array_handle)
     
    void tram::Render::API::SetDrawListIndexRange (drawlistentry_t entry, uint32_t index_offset, uint32_t index_length)
     
    void tram::Render::API::SetDrawListSpriteArray (drawlistentry_t entry, spritearray_t sprite_array_handle)
     
    bool tram::Render::API::SetDrawListShader (drawlistentry_t entry, vertexformat_t vertex_format, materialtype_t material_type)
     
    void tram::Render::API::SetDrawListMaterials (drawlistentry_t entry, size_t material_count, material_t *materials)
     
    void tram::Render::API::SetDrawListColors (drawlistentry_t entry, size_t count, vec4 *color)
     
    void tram::Render::API::SetDrawListTextureOffsets (drawlistentry_t entry, size_t count, vec4 *offset)
     
    void tram::Render::API::SetDrawListAABB (drawlistentry_t entry, vec3 min, vec3 max)
     
    void tram::Render::API::CreateIndexedVertexArray (VertexDefinition vertex_format, vertexarray_t &vertex_array, indexarray_t &index_array, size_t vertex_size, void *vertex_data, size_t index_size, void *index_data)
     
    void tram::Render::API::CreateVertexArray (VertexDefinition vertex_format, vertexarray_t &vertex_array)
     
    void tram::Render::API::UpdateVertexArray (vertexarray_t &vertex_buffer, size_t data_size, void *data)
     
    texturehandle_t tram::Render::API::CreateTexture (ColorMode color_mode, TextureFilter texture_filter, uint32_t width, uint32_t height, void *data)
     
    spritearray_t tram::Render::API::CreateSpriteArray ()
     
    void tram::Render::API::UpdateSpriteArray (spritearray_t array, size_t data_size, void *data)
     
    light_t tram::Render::API::MakeLight ()
     
    void tram::Render::API::DeleteLight (light_t light)
     
    void tram::Render::API::SetLightParameters (light_t light, vec3 location, vec3 color, float distance, vec3 direction, float exponent)
     
    material_t tram::Render::API::MakeMaterial ()
     
    void tram::Render::API::DeleteMaterial (material_t material)
     
    void tram::Render::API::SetMaterialTexture (material_t material, texturehandle_t texture)
     
    void tram::Render::API::SetMaterialColor (material_t material, vec4 color)
     
    void tram::Render::API::SetMaterialSpecularWeight (material_t material, float weight)
     
    void tram::Render::API::SetMaterialSpecularExponent (material_t material, float exponent)
     
    void tram::Render::API::SetMaterialSpecularTransparency (material_t material, float transparency)
     
    void tram::Render::API::SetMaterialReflectivity (material_t material, float reflectivity)
     
    ContextType tram::Render::API::GetContext ()
     
    uint32_t tram::Render::API::GetMaxIndexRangeLength ()
     
    void tram::Render::API::SetDevice (void *)
     
    bool tram::Render::API::IsDebugMode ()
     
    void tram::Render::API::SetDebugMode (bool)
     
    ================================================ FILE: docs/cppapi/render_2api_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/api.h Source File
    Tramway SDK v0.1.1
    api.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_RENDER_API_H
    4#define TRAM_SDK_RENDER_API_H
    5
    6#include <render/render.h>
    7#include <render/renderer.h>
    8
    15namespace tram::Render::API {
    16
    17// meta functions
    18void Init();
    19void RenderFrame();
    20
    21void SetScreenSize(float width, float height);
    22void SetScreenClear(vec3 clear_color, bool clear);
    23
    25
    26void SetViewMatrix(const mat4& matrix, layer_t layer);
    27void SetProjectionMatrix(const mat4& matrix, layer_t layer);
    28
    29void GetScreen(char* buffer, int w, int h);
    30
    31void RegisterShader(vertexformat_t format, materialtype_t type, const char* vertex_shader, const char* fragment_shader);
    32
    33// drawlist functions
    34drawlistentry_t InsertDrawListEntry();
    35void RemoveDrawListEntry(drawlistentry_t entry);
    36
    37uint32_t GetFlags(drawlistentry_t entry);
    38void SetFlags(drawlistentry_t entry, uint32_t flags);
    39void SetLayer(drawlistentry_t entry, layer_t layer);
    40void SetPose(drawlistentry_t entry, Pose* pose);
    41void SetLightmap(drawlistentry_t entry, texturehandle_t lightmap);
    42void SetEnvironmentMap(drawlistentry_t entry, texturehandle_t environmentmap);
    43void SetSphericalHarmonic(drawlistentry_t entry, sphericalharmonic_t harmonic);
    44void SetLights(drawlistentry_t entry, light_t* lights);
    45void SetMatrix(drawlistentry_t entry, const mat4& matrix);
    46void SetFadeDistance(drawlistentry_t entry, float near, float far);
    47
    48void SetDrawListVertexArray(drawlistentry_t entry, vertexarray_t vertex_array_handle);
    49void SetDrawListIndexArray(drawlistentry_t entry, indexarray_t index_array_handle);
    50void SetDrawListIndexRange(drawlistentry_t entry, uint32_t index_offset, uint32_t index_length);
    51void SetDrawListSpriteArray(drawlistentry_t entry, spritearray_t sprite_array_handle);
    52
    53bool SetDrawListShader(drawlistentry_t entry, vertexformat_t vertex_format, materialtype_t material_type);
    54
    55void SetDrawListMaterials(drawlistentry_t entry, size_t material_count, material_t* materials);
    56
    57void SetDrawListColors(drawlistentry_t entry, size_t count, vec4* color);
    58
    59void SetDrawListTextureOffsets(drawlistentry_t entry, size_t count, vec4* offset);
    60void SetDrawListAABB(drawlistentry_t entry, vec3 min, vec3 max);
    61
    62// vertex buffer functions
    63void CreateIndexedVertexArray(VertexDefinition vertex_format, vertexarray_t& vertex_array, indexarray_t& index_array, size_t vertex_size, void* vertex_data, size_t index_size, void* index_data);
    64void CreateVertexArray(VertexDefinition vertex_format, vertexarray_t& vertex_array);
    65void UpdateVertexArray(vertexarray_t& vertex_buffer, size_t data_size, void* data);
    66// TODO: add deletion functions
    67
    68// texture functions
    69texturehandle_t CreateTexture(ColorMode color_mode, TextureFilter texture_filter, uint32_t width, uint32_t height, void* data);
    70// TODO: add deletion function
    71// TODO: add update functions (filter?)
    72
    73// sprite functions
    74spritearray_t CreateSpriteArray();
    75void UpdateSpriteArray(spritearray_t array, size_t data_size, void* data);
    76
    77
    78// light functions
    79light_t MakeLight();
    80void DeleteLight(light_t light);
    81void SetLightParameters(light_t light, vec3 location, vec3 color, float distance, vec3 direction, float exponent);
    82// TODO: decompose big function?
    83
    84// material functions
    85material_t MakeMaterial();
    86void DeleteMaterial(material_t material);
    87void SetMaterialTexture(material_t material, texturehandle_t texture);
    88void SetMaterialColor(material_t material, vec4 color);
    89void SetMaterialSpecularWeight(material_t material, float weight);
    90void SetMaterialSpecularExponent(material_t material, float exponent);
    91void SetMaterialSpecularTransparency(material_t material, float transparency);
    92void SetMaterialReflectivity(material_t material, float reflectivity);
    93
    101
    103uint32_t GetMaxIndexRangeLength();
    104void SetDevice(void*);
    105
    106bool IsDebugMode();
    107void SetDebugMode(bool);
    108
    109}
    110
    111#endif // TRAM_SDK_RENDER_API_H
    Rendering backend API.
    uint32_t GetFlags(drawlistentry_t entry)
    Definition: renderer.cpp:242
    void SetDrawListMaterials(drawlistentry_t entry, size_t material_count, material_t *materials)
    Definition: drawlist.cpp:112
    void SetMaterialSpecularTransparency(material_t material, float transparency)
    Definition: material.cpp:37
    void RenderFrame()
    Definition: renderer.cpp:62
    void SetFlags(drawlistentry_t entry, uint32_t flags)
    Definition: renderer.cpp:246
    void SetSphericalHarmonic(drawlistentry_t entry, sphericalharmonic_t harmonic)
    Definition: drawlist.cpp:48
    ContextType GetContext()
    Definition: renderer.cpp:803
    uint32_t GetMaxIndexRangeLength()
    Definition: renderer.cpp:807
    drawlistentry_t InsertDrawListEntry()
    Definition: renderer.cpp:234
    void UpdateVertexArray(vertexarray_t &vertex_buffer, size_t data_size, void *data)
    Definition: renderer.cpp:690
    void SetViewMatrix(const mat4 &matrix, layer_t layer)
    Definition: renderer.cpp:732
    void DeleteMaterial(material_t material)
    Definition: material.cpp:17
    void SetMaterialSpecularWeight(material_t material, float weight)
    Definition: material.cpp:29
    void UpdateSpriteArray(spritearray_t array, size_t data_size, void *data)
    Definition: sprite.cpp:15
    void Init()
    Definition: renderer.cpp:768
    bool SetDrawListShader(drawlistentry_t entry, vertexformat_t vertex_format, materialtype_t material_type)
    Definition: renderer.cpp:302
    void SetLightmap(drawlistentry_t entry, texturehandle_t lightmap)
    Definition: renderer.cpp:258
    void SetDrawListIndexArray(drawlistentry_t entry, indexarray_t index_array_handle)
    Definition: renderer.cpp:293
    void SetScreenSize(float width, float height)
    Definition: renderer.cpp:50
    void SetScreenClear(vec3 clear_color, bool clear)
    Definition: renderer.cpp:54
    void SetDrawListVertexArray(drawlistentry_t entry, vertexarray_t vertex_array_handle)
    Definition: renderer.cpp:286
    void RemoveDrawListEntry(drawlistentry_t entry)
    Definition: renderer.cpp:238
    ContextType
    Definition: api.h:94
    @ CONTEXT_WEBGL
    Definition: api.h:96
    @ CONTEXT_NONE
    Definition: api.h:99
    @ CONTEXT_DIRECT3D
    Definition: api.h:97
    @ CONTEXT_OPENGL
    Definition: api.h:95
    @ CONTEXT_SOFTWARE
    Definition: api.h:98
    void SetEnvironmentMap(drawlistentry_t entry, texturehandle_t environmentmap)
    Definition: drawlist.cpp:44
    void SetMaterialColor(material_t material, vec4 color)
    Definition: material.cpp:25
    void SetPose(drawlistentry_t entry, Pose *pose)
    Definition: renderer.cpp:254
    void RegisterShader(vertexformat_t format, materialtype_t type, const char *vertex_shader, const char *fragment_shader)
    Definition: shader.cpp:343
    void SetFadeDistance(drawlistentry_t entry, float near, float far)
    Definition: drawlist.cpp:80
    void SetDrawListAABB(drawlistentry_t entry, vec3 min, vec3 max)
    Definition: drawlist.cpp:52
    void SetMaterialSpecularExponent(material_t material, float exponent)
    Definition: material.cpp:33
    texturehandle_t CreateTexture(ColorMode color_mode, TextureFilter texture_filter, uint32_t width, uint32_t height, void *data)
    Definition: renderer.cpp:346
    void GetScreen(char *buffer, int w, int h)
    Definition: renderer.cpp:744
    void CreateVertexArray(VertexDefinition vertex_format, vertexarray_t &vertex_array)
    Definition: renderer.cpp:655
    void SetMaterialReflectivity(material_t material, float reflectivity)
    Definition: material.cpp:41
    void SetDebugMode(bool)
    Definition: renderer.cpp:521
    void SetLightParameters(light_t light, vec3 location, vec3 color, float distance, vec3 direction, float exponent)
    Definition: renderer.cpp:329
    light_t MakeLight()
    Definition: renderer.cpp:310
    void SetProjectionMatrix(const mat4 &matrix, layer_t layer)
    Definition: renderer.cpp:737
    void SetMaterialTexture(material_t material, texturehandle_t texture)
    Definition: material.cpp:21
    void SetDrawListSpriteArray(drawlistentry_t entry, spritearray_t sprite_array_handle)
    Definition: drawlist.cpp:93
    bool IsDebugMode()
    Definition: renderer.cpp:517
    void SetLightingParameters(vec3 sun_direction, vec3 sun_color, vec3 ambient_color, layer_t layer)
    Definition: renderer.cpp:44
    void SetDrawListTextureOffsets(drawlistentry_t entry, size_t count, vec4 *offset)
    Definition: drawlist.cpp:63
    void SetDrawListColors(drawlistentry_t entry, size_t count, vec4 *color)
    Definition: renderer.cpp:262
    void SetDrawListIndexRange(drawlistentry_t entry, uint32_t index_offset, uint32_t index_length)
    Definition: renderer.cpp:297
    void SetLights(drawlistentry_t entry, light_t *lights)
    Definition: renderer.cpp:272
    void DeleteLight(light_t light)
    Definition: renderer.cpp:320
    void SetMatrix(drawlistentry_t entry, const mat4 &matrix)
    Definition: renderer.cpp:278
    void CreateIndexedVertexArray(VertexDefinition vertex_format, vertexarray_t &vertex_array, indexarray_t &index_array, size_t vertex_size, void *vertex_data, size_t index_size, void *index_data)
    Definition: renderer.cpp:608
    void SetDevice(void *)
    Definition: renderer.cpp:811
    spritearray_t CreateSpriteArray()
    Definition: sprite.cpp:8
    void SetLayer(drawlistentry_t entry, layer_t layer)
    Definition: renderer.cpp:250
    material_t MakeMaterial()
    Definition: material.cpp:13
    vec3 ambient_color
    Definition: render.cpp:40
    uint32_t vertexformat_t
    Definition: render.h:19
    vec3 sun_color
    Definition: render.cpp:39
    uint32_t layer_t
    Definition: render.h:17
    uint32_t materialtype_t
    Definition: render.h:20
    ColorMode
    Texture color mode.
    Definition: renderer.h:27
    TextureFilter
    Texture filters.
    Definition: renderer.h:35
    vec3 sun_direction
    Definition: render.cpp:38
    SphericalHarmonic sphericalharmonic_t
    Definition: render.h:96
    char buffer[500]
    Definition: logging.cpp:60
    glm::vec4 vec4
    Definition: math.h:15
    glm::vec3 vec3
    Definition: math.h:11
    glm::mat4 mat4
    Definition: math.h:14
    ================================================ FILE: docs/cppapi/render_2light_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/light.cpp File Reference
    Tramway SDK v0.1.1
    light.cpp File Reference
    #include <render/light.h>
    #include <render/material.h>
    #include <framework/file.h>
    #include <framework/logging.h>
    #include <templates/hashmap.h>
    #include <config.h>
    #include <render/render.h>
    ================================================ FILE: docs/cppapi/render_2light_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/light.h File Reference
    Tramway SDK v0.1.1
    light.h File Reference
    #include <render/render.h>
    #include <framework/resource.h>
    #include <vector>

    Go to the source code of this file.

    Classes

    class  tram::Render::LightGraph
     LightGraph resource. More...
     
    struct  tram::Render::LightGraph::Node
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Render
     High-level Render system API.
     
    ================================================ FILE: docs/cppapi/render_2light_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/light.h Source File
    Tramway SDK v0.1.1
    light.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_RENDER_LIGHT_H
    4#define TRAM_SDK_RENDER_LIGHT_H
    5
    6#include <render/render.h>
    8
    9#include <vector>
    10
    11namespace tram::Render {
    12
    13class Material;
    14
    15class LightGraph : public Resource {
    16public:
    18
    19 void LoadFromDisk();
    21
    22 void Unload() {}
    23
    24 std::vector<std::pair<uint32_t, vec3>> GetEnvironmentProbes();
    25
    26 static bool ContainsEntity(id_t entity);
    27 static SphericalHarmonic LookupHarmonic(vec3 position, uint32_t layers);
    28 static Material* LookupEnvironmentMap(vec3 position);
    29 static LightGraph* Find(name_t name);
    30protected:
    31 struct Node {
    33 bool has_light = false;
    34 bool has_reflection = false;
    36 std::vector<SphericalHarmonic> constants;
    37 };
    38
    39 std::vector<id_t> entities;
    40 std::vector<Node> nodes;
    41 std::vector<std::pair<uint32_t, uint32_t>> edges;
    42};
    43
    44}
    45
    46#endif // TRAM_SDK_RENDER_LIGHT_H
    LightGraph resource.
    Definition: light.h:15
    std::vector< std::pair< uint32_t, uint32_t > > edges
    Definition: light.h:41
    std::vector< std::pair< uint32_t, vec3 > > GetEnvironmentProbes()
    Definition: light.cpp:45
    static Material * LookupEnvironmentMap(vec3 position)
    Definition: light.cpp:51
    LightGraph(name_t name)
    Definition: light.h:17
    static LightGraph * Find(name_t name)
    Definition: light.cpp:149
    static bool ContainsEntity(id_t entity)
    Definition: light.cpp:36
    std::vector< id_t > entities
    Definition: light.h:39
    void Unload()
    Definition: light.h:22
    void LoadFromDisk()
    Definition: light.cpp:160
    static SphericalHarmonic LookupHarmonic(vec3 position, uint32_t layers)
    Definition: light.cpp:70
    std::vector< Node > nodes
    Definition: light.h:40
    void LoadFromMemory()
    Definition: light.h:20
    Material resource.
    Definition: material.h:31
    Definition: resource.h:11
    name_t name
    Definition: resource.h:37
    High-level Render system API.
    Definition: gui.h:8
    uint32_t id_t
    Definition: core.h:10
    glm::vec3 vec3
    Definition: math.h:11
    Definition: light.h:31
    bool has_reflection
    Definition: light.h:34
    bool has_light
    Definition: light.h:33
    std::vector< SphericalHarmonic > constants
    Definition: light.h:36
    vec3 position
    Definition: light.h:32
    Material * environment_map
    Definition: light.h:35
    Definition: render.h:92
    Interned string type.
    Definition: uid.h:10
    ================================================ FILE: docs/cppapi/render_2opengl_2api_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/api.h File Reference
    Tramway SDK
    api.h File Reference
    ================================================ FILE: docs/cppapi/render_2opengl_2api_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/api.h Source File
    Tramway SDK
    api.h
    Go to the documentation of this file.
    1#ifndef TRAM_SDK_RENDER_OPENGL_API_H
    2#define TRAM_SDK_RENDER_OPENGL_API_H
    3
    4#include <render/render.h>
    5#include <render/renderer.h>
    6
    7//namespace tram::Render::OpenGL {
    8
    9//void Init();
    10
    11//void Render();
    12
    13//void SetScreenSize (float width, float height);
    14
    15//drawlistentry_t InsertDrawListEntry ();
    16//uint32_t GetFlags (drawlistentry_t entry);
    17//void SetFlags (drawlistentry_t entry, uint32_t flags);
    18//void SetLayer (drawlistentry_t entry, uint32_t flags);
    19//void SetPose (drawlistentry_t entry, Pose* pose);
    20//void SetLightmap (drawlistentry_t entry, uint32_t lightmap);
    21//void SetLights (drawlistentry_t entry, uint32_t* lights);
    22//void SetMatrix (drawlistentry_t entry, const mat4& matrix);
    23//void SetDrawListVertexArray (drawlistentry_t entry, uint32_t vertex_array_handle);
    24//void SetDrawListIndexRange (drawlistentry_t entry, uint32_t index_offset, uint32_t index_length);
    25//void SetDrawListShader (drawlistentry_t entry, vertexformat_t vertex_format, materialtype_t material_type);
    26//void SetDrawListTextures (drawlistentry_t entry, size_t texture_count, uint32_t* textures);
    27//void SetScreenClear (vec3 clear_color, bool clear);
    28
    29//void SetLightingParameters (vec3 sun_direction, vec3 sun_color, vec3 ambient_color, uint32_t layer);
    30//void SetViewParameters (vec3 position, quat rotation, uint32_t layer);
    31
    32//light_t MakeLight ();
    33//void DeleteLight (light_t light);
    34
    35//void SetLightParameters (light_t light, vec3 location, vec3 color, float distance);
    36
    37//void RemoveDrawListEntry (drawlistentry_t entry);
    38
    39//uint32_t CreateTexture (ColorMode color_mode, TextureFilter texture_filter, uint32_t width, uint32_t height, void* data);
    40
    41// this bit of the API is a bit leaky
    42// might change later!
    43//void CreateIndexedVertexArray (VertexDefinition vertex_format, vertexhandle_t& vertex_buffer_handle, vertexhandle_t& index_buffer_handle, vertexhandle_t& vertex_array_handle, size_t vertex_size, void* vertex_data, size_t index_size, void* index_data);
    44//void CreateVertexArray (VertexDefinition vertex_format, vertexhandle_t& vertex_buffer_handle, vertexhandle_t& vertex_array_handle);
    45//void UpdateVertexArray (vertexhandle_t vertex_buffer_handle, size_t data_size, void* data);
    46
    47//void RenderFrame ();
    48
    49//}
    50
    51#endif // TRAM_SDK_RENDER_OPENGL_API_H
    ================================================ FILE: docs/cppapi/render_2opengl_2light_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/light.cpp File Reference
    Tramway SDK v0.1.1
    light.cpp File Reference
    #include <render/opengl/light.h>
    #include <config.h>

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Render
     High-level Render system API.
     
    namespace  tram::Render::API
     Rendering backend API.
     

    Functions

    light_t tram::Render::API::MakeLight ()
     
    void tram::Render::API::DeleteLight (light_t light)
     
    void tram::Render::API::SetLightParameters (light_t light, vec3 location, vec3 color, float distance, vec3 direction, float exponent)
     
    ================================================ FILE: docs/cppapi/render_2opengl_2light_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/light.h File Reference
    Tramway SDK v0.1.1
    light.h File Reference
    #include <render/render.h>
    #include <render/renderer.h>

    Go to the source code of this file.

    Classes

    struct  tram::Render::API::GLLight
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Render
     High-level Render system API.
     
    namespace  tram::Render::API
     Rendering backend API.
     
    ================================================ FILE: docs/cppapi/render_2opengl_2light_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/light.h Source File
    Tramway SDK v0.1.1
    light.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_RENDER_OPENGL_LIGHT_H
    4#define TRAM_SDK_RENDER_OPENGL_LIGHT_H
    5
    6#include <render/render.h>
    7#include <render/renderer.h>
    8
    9namespace tram::Render::API {
    10
    11struct GLLight {
    12 vec3 location = {0.0f, 0.0f, 0.0f};
    13 float padding;
    14 vec3 color = {0.0f, 0.0f, 0.0f};
    15 float distance = 0.0f;
    16 vec3 direction = {0.0f, 0.0f, -1.0f};
    17 float exponent = 0.0f;
    18 float padding2[4];
    19};
    20
    21}
    22
    23#endif // TRAM_SDK_RENDER_OPENGL_LIGHT_H
    Rendering backend API.
    glm::vec3 vec3
    Definition: math.h:11
    Definition: light.h:11
    float exponent
    Definition: light.h:17
    vec3 direction
    Definition: light.h:16
    float padding
    Definition: light.h:13
    vec3 color
    Definition: light.h:14
    float distance
    Definition: light.h:15
    vec3 location
    Definition: light.h:12
    float padding2[4]
    Definition: light.h:18
    ================================================ FILE: docs/cppapi/render_2opengl_2sprite_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/sprite.cpp File Reference
    Tramway SDK v0.1.1
    sprite.cpp File Reference
    #include <render/api.h>
    #include <render/vertices.h>

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Render
     High-level Render system API.
     
    namespace  tram::Render::API
     Rendering backend API.
     

    Functions

    spritearray_t tram::Render::API::CreateSpriteArray ()
     
    void tram::Render::API::UpdateSpriteArray (spritearray_t array, size_t data_size, void *data)
     
    ================================================ FILE: docs/cppapi/render_2opengl_2sprite_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/sprite.h File Reference
    Tramway SDK v0.1.1
    sprite.h File Reference
    #include <render/render.h>
    #include <render/renderer.h>

    Go to the source code of this file.

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Render
     High-level Render system API.
     
    namespace  tram::Render::API
     Rendering backend API.
     
    ================================================ FILE: docs/cppapi/render_2opengl_2sprite_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/sprite.h Source File
    Tramway SDK v0.1.1
    sprite.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_RENDER_OPENGL_SPRITE_H
    4#define TRAM_SDK_RENDER_OPENGL_SPRITE_H
    5
    6#include <render/render.h>
    7#include <render/renderer.h>
    8
    9namespace tram::Render::API {
    10
    11
    12
    13}
    14
    15#endif // TRAM_SDK_RENDER_OPENGL_SPRITE_H
    Rendering backend API.
    ================================================ FILE: docs/cppapi/render_2render_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/render.cpp File Reference
    Tramway SDK v0.1.1
    render.cpp File Reference
    #include <framework/core.h>
    #include <framework/system.h>
    #include <framework/stats.h>
    #include <render/render.h>
    #include <render/renderer.h>
    #include <render/vertices.h>
    #include <components/render.h>
    #include <components/sprite.h>
    #include <components/particle.h>
    #include <render/api.h>
    #include <config.h>
    #include <cstring>

    Namespaces

    namespace  tram::Render
     High-level Render system API.
     
    namespace  tram
     Serialization, i.e.
     

    Functions

    void tram::Render::Init ()
     Initializes the rendering system. More...
     
    void tram::Render::Render ()
     Renders a single frame. More...
     
    void tram::Render::SetSunDirection (color_t direction, layer_t layer)
     Sets the sun direction. More...
     
    void tram::Render::SetSunColor (color_t color, layer_t layer)
     Sets the sun color. More...
     
    void tram::Render::SetAmbientColor (color_t color, layer_t layer)
     Sets the ambient color. More...
     
    void tram::Render::SetScreenSize (float width, float height)
     
    void tram::Render::SetViewFov (float fov, layer_t layer)
     
    float tram::Render::GetViewFov (layer_t layer)
     
    void tram::Render::SetOrthoRatio (float ratio, layer_t layer)
     
    void tram::Render::SetViewDistance (float dist, layer_t layer)
     
    float tram::Render::GetViewDistance (layer_t layer)
     
    void tram::Render::SetViewPosition (vec3 position, layer_t layer)
     Sets the view position. More...
     
    void tram::Render::SetViewRotation (quat rotation, layer_t layer)
     Sets the view rotation. More...
     
    vec3 tram::Render::GetViewPosition (layer_t layer)
     Returns the view position for a given layer. More...
     
    quat tram::Render::GetViewRotation (layer_t layer)
     Returns the view rotation for a given layer. More...
     
    void tram::Render::AddLine (vec3 from, vec3 to, vec3 color)
     Draws a line for a single frame. More...
     
    void tram::Render::AddLineMarker (vec3 location, vec3 color)
     Draws a cross marker for a single frame. More...
     
    void tram::Render::AddLineAABB (vec3 min, vec3 max, vec3 center, quat rotation, vec3 color)
     Draws an AABB box for a single frame. More...
     
    void tram::Render::AddSphere (vec3 pos, float radius, color_t color)
     Draws a sphere for a single frame. More...
     
    void tram::Render::AddCylinder (vec3 pos, float height, float radius, color_t color)
     Draws a cylinder for a single frame. More...
     
    void tram::Render::AddCube (vec3 pos, float height, float radius, color_t color)
     Draws a cube for a single frame. More...
     
    void tram::Render::AddText (vec3 pos, const char *text, color_t color)
     Draws text, in 3D space, for a single frame. More...
     
    void tram::Render::AddText (float x, float y, const char *text, color_t color)
     Draws text, on the screen, for a single frame. More...
     
    void tram::Render::Project (const vec3 &point, vec3 &result, layer_t layer)
     Projects a point into screen coordinates. More...
     
    vec3 tram::Render::ProjectInverse (vec3 point, layer_t layer)
     Reverses screen coordinates into world coordinates. More...
     
    vertexformat_t tram::Render::RegisterVertexFormat (const char *name)
     Allocates a new vertex format. More...
     
    materialtype_t tram::Render::RegisterMaterialType (const char *name)
     Allocates a new material type. More...
     
    vertexformat_t tram::Render::FindVertexFormat (const char *name)
     Finds an already allocated vertex format by its name. More...
     
    materialtype_t tram::Render::FindMaterialType (const char *name)
     Finds an already material type format by its name. More...
     
    const char * tram::Render::GetVertexFormatName (vertexformat_t type)
     Finds an allocated vertex format's name. More...
     
    const char * tram::Render::GetMaterialTypeName (materialtype_t type)
     Finds an allocated material type's name. More...
     

    Variables

    struct {
       vec3   tram::Render::view_position = {0.0f, 0.0f, 0.0f}
     
       quat   tram::Render::view_rotation = {1.0f, 0.0f, 0.0f, 0.0f}
     
       float   tram::Render::view_fov = 60.0f
     
       float   tram::Render::near_plane = 0.01f
     
       float   tram::Render::far_plane = 750.0f
     
       float   tram::Render::ortho_ratio = 1.0f
     
       vec3   tram::Render::sun_direction = {0.0f, 1.0f, 0.0f}
     
       vec3   tram::Render::sun_color = {1.0f, 1.0f, 1.0f}
     
       vec3   tram::Render::ambient_color = {0.0f, 0.0f, 0.0f}
     
       mat4   tram::Render::projection = mat4(1.0f)
     
       mat4   tram::Render::view = mat4(1.0f)
     
    tram::Render::view_properties [7]
     
    bool tram::Render::THIRD_PERSON = false
     
    bool tram::Render::DRAW_RENDER_DEBUG = false
     
    vertexarray_t tram::Render::colorlines_vertex_array = {}
     
    drawlistentry_t tram::Render::colorlines_entry
     
    vertexarray_t tram::Render::debugtext_vertex_array = {}
     
    drawlistentry_t tram::Render::debugtext_entry
     
    Spritetram::Render::font_debug = nullptr
     
    std::vector< LineVertextram::Render::colorlines
     
    std::vector< SpriteVertextram::Render::textvertices
     
    ================================================ FILE: docs/cppapi/render_2render_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/render.h File Reference
    Tramway SDK v0.1.1
    render.h File Reference
    #include <vector>
    #include <render/animation.h>

    Go to the source code of this file.

    Classes

    struct  tram::Render::SphericalHarmonic
     
    struct  tram::Render::vertexarray_t
     
    struct  tram::Render::indexarray_t
     
    struct  tram::Render::spritearray_t
     
    struct  tram::Render::drawlistentry_t
     
    struct  tram::Render::texturehandle_t
     
    struct  tram::Render::light_t
     
    struct  tram::Render::material_t
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Render
     High-level Render system API.
     
    namespace  tram::Render::API
     Rendering backend API.
     

    Typedefs

    typedef vec3 tram::Render::color_t
     
    typedef uint32_t tram::Render::layer_t
     
    typedef uint32_t tram::Render::vertexformat_t
     
    typedef uint32_t tram::Render::materialtype_t
     
    typedef SphericalHarmonic tram::Render::sphericalharmonic_t
     

    Enumerations

    enum  tram::Render::VertexFormats : vertexformat_t {
      tram::Render::VERTEX_STATIC , tram::Render::VERTEX_DYNAMIC , tram::Render::VERTEX_SPRITE , tram::Render::VERTEX_LINE ,
      tram::Render::VERTEX_LAST
    }
     
    enum  tram::Render::MaterialTypes : materialtype_t {
      tram::Render::MATERIAL_TEXTURE , tram::Render::MATERIAL_TEXTURE_ALPHA , tram::Render::MATERIAL_LIGHTMAP , tram::Render::MATERIAL_ENVIRONMENTMAP ,
      tram::Render::MATERIAL_MSDF , tram::Render::MATERIAL_GLYPH , tram::Render::MATERIAL_WATER , tram::Render::MATERIAL_FLAT_COLOR ,
      tram::Render::MATERIAL_LAST
    }
     
    enum  tram::Render::MaterialFilter { tram::Render::FILTER_NEAREST , tram::Render::FILTER_LINEAR }
     

    Functions

    void tram::Render::Init ()
     Initializes the rendering system. More...
     
    void tram::Render::Render ()
     Renders a single frame. More...
     
    void tram::Render::Project (const vec3 &point, vec3 &result, layer_t layer)
     Projects a point into screen coordinates. More...
     
    vec3 tram::Render::ProjectInverse (vec3 point, layer_t layer)
     Reverses screen coordinates into world coordinates. More...
     
    void tram::Render::SetSunDirection (color_t direction, layer_t layer)
     Sets the sun direction. More...
     
    void tram::Render::SetSunColor (color_t color, layer_t layer)
     Sets the sun color. More...
     
    void tram::Render::SetAmbientColor (color_t color, layer_t layer)
     Sets the ambient color. More...
     
    void tram::Render::SetScreenSize (float width, float height)
     
    void tram::Render::SetOrthoRatio (float ratio, layer_t layer)
     
    void tram::Render::SetViewFov (float fov, layer_t layer)
     
    float tram::Render::GetViewFov (layer_t layer)
     
    void tram::Render::SetViewDistance (float dist, layer_t layer)
     
    float tram::Render::GetViewDistance (layer_t layer)
     
    void tram::Render::SetViewPosition (vec3 position, layer_t layer)
     Sets the view position. More...
     
    void tram::Render::SetViewRotation (quat rotation, layer_t layer)
     Sets the view rotation. More...
     
    vec3 tram::Render::GetViewPosition (layer_t layer)
     Returns the view position for a given layer. More...
     
    quat tram::Render::GetViewRotation (layer_t layer)
     Returns the view rotation for a given layer. More...
     
    const color_t tram::Render::COLOR_WHITE (1.0f, 1.0f, 1.0f)
     
    const color_t tram::Render::COLOR_RED (1.0f, 0.0f, 0.0f)
     
    const color_t tram::Render::COLOR_GREEN (0.0f, 1.0f, 0.0f)
     
    const color_t tram::Render::COLOR_BLUE (0.0f, 0.0f, 1.0f)
     
    const color_t tram::Render::COLOR_YELLOW (1.0f, 1.0f, 0.0f)
     
    const color_t tram::Render::COLOR_PINK (1.0f, 0.0f, 1.0f)
     
    const color_t tram::Render::COLOR_CYAN (0.0f, 1.0f, 1.0f)
     
    const color_t tram::Render::COLOR_BLACK (0.0f, 0.0f, 0.0f)
     
    const color_t tram::Render::COLOR_GRAY (0.3f, 0.3f, 0.3f)
     
    void tram::Render::AddLine (vec3 from, vec3 to, vec3 color)
     Draws a line for a single frame. More...
     
    void tram::Render::AddLineMarker (vec3 location, vec3 color)
     Draws a cross marker for a single frame. More...
     
    void tram::Render::AddLineAABB (vec3 min, vec3 max, vec3 center, quat rotation, vec3 color)
     Draws an AABB box for a single frame. More...
     
    void tram::Render::AddSphere (vec3 pos, float radius, color_t color)
     Draws a sphere for a single frame. More...
     
    void tram::Render::AddCylinder (vec3 pos, float height, float radius, color_t color)
     Draws a cylinder for a single frame. More...
     
    void tram::Render::AddCube (vec3 pos, float height, float radius, color_t color)
     Draws a cube for a single frame. More...
     
    void tram::Render::AddText (vec3 pos, const char *text, color_t color)
     Draws text, in 3D space, for a single frame. More...
     
    void tram::Render::AddText (float x, float y, const char *text, color_t color)
     Draws text, on the screen, for a single frame. More...
     
    vertexformat_t tram::Render::RegisterVertexFormat (const char *name)
     Allocates a new vertex format. More...
     
    materialtype_t tram::Render::RegisterMaterialType (const char *name)
     Allocates a new material type. More...
     
    vertexformat_t tram::Render::FindVertexFormat (const char *name)
     Finds an already allocated vertex format by its name. More...
     
    materialtype_t tram::Render::FindMaterialType (const char *name)
     Finds an already material type format by its name. More...
     
    const char * tram::Render::GetVertexFormatName (vertexformat_t type)
     Finds an allocated vertex format's name. More...
     
    const char * tram::Render::GetMaterialTypeName (materialtype_t type)
     Finds an allocated material type's name. More...
     
    ================================================ FILE: docs/cppapi/render_2render_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/render.h Source File
    Tramway SDK v0.1.1
    render.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_RENDER_H
    4#define TRAM_SDK_RENDER_H
    5
    6#include <vector>
    7
    8#include <render/animation.h>
    9
    10struct IDirect3DVertexBuffer9;
    11struct IDirect3DIndexBuffer9;
    12struct IDirect3DTexture9;
    13
    14namespace tram::Render {
    15
    16typedef vec3 color_t;
    17typedef uint32_t layer_t;
    18
    19typedef uint32_t vertexformat_t;
    20typedef uint32_t materialtype_t;
    21
    22void Init();
    23void Render();
    24
    25void Project(const vec3& point, vec3& result, layer_t layer = 0);
    26vec3 ProjectInverse(vec3 point, layer_t layer = 0);
    27
    28void SetSunDirection(vec3 direction, layer_t layer = 0);
    29void SetSunColor(color_t color, layer_t layer = 0);
    30void SetAmbientColor(color_t color, layer_t layer = 0);
    31
    32void SetScreenSize(float width, float height);
    33
    34void SetOrthoRatio(float ratio, layer_t layer = 0);
    35
    36void SetViewFov(float fov, layer_t layer = 0);
    37float GetViewFov(layer_t layer = 0);
    38
    39void SetViewDistance(float dist, layer_t layer = 0);
    40float GetViewDistance(layer_t layer = 0);
    41
    42void SetViewPosition(vec3 position, layer_t layer = 0);
    43void SetViewRotation(quat rotation, layer_t layer = 0);
    44
    47
    48const color_t COLOR_WHITE (1.0f, 1.0f, 1.0f);
    49const color_t COLOR_RED (1.0f, 0.0f, 0.0f);
    50const color_t COLOR_GREEN (0.0f, 1.0f, 0.0f);
    51const color_t COLOR_BLUE (0.0f, 0.0f, 1.0f);
    52const color_t COLOR_YELLOW (1.0f, 1.0f, 0.0f);
    53const color_t COLOR_PINK (1.0f, 0.0f, 1.0f);
    54const color_t COLOR_CYAN (0.0f, 1.0f, 1.0f);
    55const color_t COLOR_BLACK (0.0f, 0.0f, 0.0f);
    56const color_t COLOR_GRAY (0.3f, 0.3f, 0.3f);
    57
    58void AddLine(vec3 from, vec3 to, color_t color);
    59void AddLineMarker(vec3 location, color_t color);
    60void AddLineAABB(vec3 min, vec3 max, vec3 center, quat rotation, vec3 color);
    61void AddSphere(vec3 pos, float radius, color_t color);
    62void AddCylinder(vec3 pos, float height, float radius, color_t color);
    63void AddCube(vec3 pos, float height, float radius, color_t color);
    64void AddText(vec3 pos, const char* text, color_t color = COLOR_WHITE);
    65void AddText(float x, float y, const char* text, color_t color = COLOR_WHITE);
    66
    73};
    74
    85};
    86
    90};
    91
    94};
    95
    97
    98vertexformat_t RegisterVertexFormat(const char* name);
    99materialtype_t RegisterMaterialType(const char* name);
    100
    101vertexformat_t FindVertexFormat(const char* name);
    102materialtype_t FindMaterialType(const char* name);
    103
    104const char* GetVertexFormatName(vertexformat_t type);
    105const char* GetMaterialTypeName(materialtype_t type);
    106
    107namespace API { struct SWVertexArray; }
    108
    110 union {
    111 struct {
    114 };
    115 struct {
    116 IDirect3DVertexBuffer9* d3d_vertex_buffer;
    117 uint32_t d3d_metadata;
    118 };
    120 void* generic;
    121 };
    122};
    123
    124namespace API { struct SWIndexArray; }
    125
    127 union {
    129 IDirect3DIndexBuffer9* d3d_index_buffer;
    131 void* generic;
    132 };
    133};
    134
    136 union {
    138 void* generic;
    139 };
    140
    141 // TODO: add whatever you need for the D3D renderer
    142 // TODO: also add everything for the SW renderer
    143};
    144
    145namespace API { struct GLDrawListEntry; }
    146namespace API { struct D3DDrawListEntry; }
    147namespace API { struct SWDrawListEntry; }
    148
    150 union {
    154 void* generic;
    155 };
    156};
    157
    158namespace API { struct SWTexture; }
    159
    161 union {
    163 IDirect3DTexture9* d3d_texture_handle;
    165 void* generic;
    166 };
    167};
    168
    169namespace API { struct GLLight; }
    170namespace API { struct D3DLight; }
    171namespace API { struct SWLight; }
    172
    173struct light_t {
    174 union {
    178 void* generic;
    179 };
    180};
    181
    182namespace API { struct GLMaterial; }
    183namespace API { struct D3DMaterial; }
    184namespace API { struct SWMaterial; }
    185
    187 union {
    189 API::D3DMaterial* d3d;
    190 API::SWMaterial* sw;
    191 void* generic;
    192 };
    193};
    194
    195}
    196
    197#endif // TRAM_SDK_RENDER_H
    High-level Render system API.
    Definition: gui.h:8
    const char * GetMaterialTypeName(materialtype_t type)
    Finds an allocated material type's name.
    Definition: render.cpp:521
    float GetViewDistance(layer_t layer)
    Definition: render.cpp:233
    const color_t COLOR_BLACK(0.0f, 0.0f, 0.0f)
    void SetViewFov(float fov, layer_t layer)
    Definition: render.cpp:215
    MaterialTypes
    Definition: render.h:75
    @ MATERIAL_LIGHTMAP
    Definition: render.h:78
    @ MATERIAL_TEXTURE_ALPHA
    Definition: render.h:77
    @ MATERIAL_LAST
    Definition: render.h:84
    @ MATERIAL_GLYPH
    Definition: render.h:81
    @ MATERIAL_FLAT_COLOR
    Definition: render.h:83
    @ MATERIAL_ENVIRONMENTMAP
    Definition: render.h:79
    @ MATERIAL_WATER
    Definition: render.h:82
    @ MATERIAL_MSDF
    Definition: render.h:80
    @ MATERIAL_TEXTURE
    Definition: render.h:76
    vec3 color_t
    Definition: render.h:16
    vertexformat_t FindVertexFormat(const char *name)
    Finds an already allocated vertex format by its name.
    Definition: render.cpp:496
    const color_t COLOR_GRAY(0.3f, 0.3f, 0.3f)
    const color_t COLOR_RED(1.0f, 0.0f, 0.0f)
    void Init()
    Initializes the rendering system.
    Definition: render.cpp:105
    const color_t COLOR_GREEN(0.0f, 1.0f, 0.0f)
    uint32_t vertexformat_t
    Definition: render.h:19
    vertexformat_t RegisterVertexFormat(const char *name)
    Allocates a new vertex format.
    Definition: render.cpp:478
    void AddCylinder(vec3 pos, float height, float radius, color_t color)
    Draws a cylinder for a single frame.
    Definition: render.cpp:330
    const color_t COLOR_YELLOW(1.0f, 1.0f, 0.0f)
    void SetSunDirection(color_t direction, layer_t layer)
    Sets the sun direction.
    Definition: render.cpp:183
    VertexFormats
    Definition: render.h:67
    @ VERTEX_SPRITE
    Definition: render.h:70
    @ VERTEX_DYNAMIC
    Definition: render.h:69
    @ VERTEX_STATIC
    Definition: render.h:68
    @ VERTEX_LAST
    Definition: render.h:72
    @ VERTEX_LINE
    Definition: render.h:71
    void Render()
    Renders a single frame.
    Definition: render.cpp:157
    quat GetViewRotation(layer_t layer)
    Returns the view rotation for a given layer.
    Definition: render.cpp:261
    void Project(const vec3 &point, vec3 &result, layer_t layer)
    Projects a point into screen coordinates.
    Definition: render.cpp:438
    void SetViewDistance(float dist, layer_t layer)
    Definition: render.cpp:229
    void AddCube(vec3 pos, float height, float radius, color_t color)
    Draws a cube for a single frame.
    Definition: render.cpp:336
    void SetViewRotation(quat rotation, layer_t layer)
    Sets the view rotation.
    Definition: render.cpp:250
    void SetViewPosition(vec3 position, layer_t layer)
    Sets the view position.
    Definition: render.cpp:242
    materialtype_t RegisterMaterialType(const char *name)
    Allocates a new material type.
    Definition: render.cpp:487
    void SetSunColor(color_t color, layer_t layer)
    Sets the sun color.
    Definition: render.cpp:191
    float GetViewFov(layer_t layer)
    Definition: render.cpp:220
    uint32_t layer_t
    Definition: render.h:17
    materialtype_t FindMaterialType(const char *name)
    Finds an already material type format by its name.
    Definition: render.cpp:505
    uint32_t materialtype_t
    Definition: render.h:20
    const color_t COLOR_CYAN(0.0f, 1.0f, 1.0f)
    const color_t COLOR_PINK(1.0f, 0.0f, 1.0f)
    void AddLineAABB(vec3 min, vec3 max, vec3 center, quat rotation, vec3 color)
    Draws an AABB box for a single frame.
    Definition: render.cpp:279
    void SetOrthoRatio(float ratio, layer_t layer)
    Definition: render.cpp:224
    MaterialFilter
    Definition: render.h:87
    @ FILTER_NEAREST
    Definition: render.h:88
    @ FILTER_LINEAR
    Definition: render.h:89
    void AddLine(vec3 from, vec3 to, vec3 color)
    Draws a line for a single frame.
    Definition: render.cpp:266
    void SetScreenSize(float width, float height)
    Definition: render.cpp:204
    const color_t COLOR_BLUE(0.0f, 0.0f, 1.0f)
    const char * GetVertexFormatName(vertexformat_t type)
    Finds an allocated vertex format's name.
    Definition: render.cpp:514
    const color_t COLOR_WHITE(1.0f, 1.0f, 1.0f)
    void AddSphere(vec3 pos, float radius, color_t color)
    Draws a sphere for a single frame.
    Definition: render.cpp:320
    void SetAmbientColor(color_t color, layer_t layer)
    Sets the ambient color.
    Definition: render.cpp:199
    void AddText(vec3 pos, const char *text, color_t color)
    Draws text, in 3D space, for a single frame.
    Definition: render.cpp:341
    vec3 GetViewPosition(layer_t layer)
    Returns the view position for a given layer.
    Definition: render.cpp:256
    SphericalHarmonic sphericalharmonic_t
    Definition: render.h:96
    void AddLineMarker(vec3 location, vec3 color)
    Draws a cross marker for a single frame.
    Definition: render.cpp:272
    vec3 ProjectInverse(vec3 point, layer_t layer)
    Reverses screen coordinates into world coordinates.
    Definition: render.cpp:447
    glm::vec3 vec3
    Definition: math.h:11
    glm::quat quat
    Definition: math.h:12
    Definition: direct3d.h:10
    Definition: direct3d.h:39
    Definition: drawlist.h:13
    Definition: light.h:11
    Definition: material.h:11
    Definition: software.h:65
    Definition: software.h:57
    Definition: software.h:11
    Definition: software.h:24
    Definition: software.h:49
    Definition: render.h:92
    vec3 l21
    Definition: render.h:93
    vec3 l00
    Definition: render.h:93
    vec3 l2m2
    Definition: render.h:93
    vec3 l10
    Definition: render.h:93
    vec3 l1m1
    Definition: render.h:93
    vec3 l20
    Definition: render.h:93
    vec3 l11
    Definition: render.h:93
    vec3 l22
    Definition: render.h:93
    vec3 l2m1
    Definition: render.h:93
    Definition: render.h:149
    API::GLDrawListEntry * gl
    Definition: render.h:151
    API::SWDrawListEntry * sw
    Definition: render.h:153
    API::D3DDrawListEntry * d3d
    Definition: render.h:152
    Definition: render.h:126
    IDirect3DIndexBuffer9 * d3d_index_buffer
    Definition: render.h:129
    API::SWIndexArray * sw_index_array
    Definition: render.h:130
    uint32_t gl_index_buffer
    Definition: render.h:128
    Definition: render.h:173
    API::GLLight * gl
    Definition: render.h:175
    API::D3DLight * d3d
    Definition: render.h:176
    API::SWLight * sw
    Definition: render.h:177
    Definition: render.h:186
    API::SWMaterial * sw
    Definition: render.h:190
    API::GLMaterial * gl
    Definition: render.h:188
    API::D3DMaterial * d3d
    Definition: render.h:189
    Definition: render.h:135
    vertexarray_t vertex_array
    Definition: render.h:137
    Definition: render.h:160
    uint32_t gl_texture_handle
    Definition: render.h:162
    IDirect3DTexture9 * d3d_texture_handle
    Definition: render.h:163
    API::SWTexture * sw_texture
    Definition: render.h:164
    Definition: render.h:109
    API::SWVertexArray * sw_vertex_array
    Definition: render.h:119
    IDirect3DVertexBuffer9 * d3d_vertex_buffer
    Definition: render.h:116
    uint32_t gl_vertex_array
    Definition: render.h:112
    uint32_t gl_vertex_buffer
    Definition: render.h:113
    uint32_t d3d_metadata
    Definition: render.h:117
    ================================================ FILE: docs/cppapi/render_2sprite_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/sprite.cpp File Reference
    Tramway SDK v0.1.1
    sprite.cpp File Reference
    #include <render/sprite.h>
    #include <render/renderer.h>
    #include <render/material.h>
    #include <framework/async.h>
    #include <framework/logging.h>
    #include <framework/file.h>
    #include <templates/hashmap.h>
    #include <config.h>
    #include <fstream>
    #include <sstream>

    Functions

    Hashmap< Sprite * > sprite_list ("Sprite name list", RESOURCE_LIMIT_SPRITE)
     

    Function Documentation

    ◆ sprite_list()

    Hashmap< Sprite * > sprite_list ( "Sprite name list"  ,
    RESOURCE_LIMIT_SPRITE   
    )
    ================================================ FILE: docs/cppapi/render_2sprite_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/sprite.h File Reference
    Tramway SDK v0.1.1
    sprite.h File Reference
    #include <render/render.h>

    Go to the source code of this file.

    Classes

    struct  tram::Render::SpriteFrame
     
    class  tram::Render::Sprite
     Sprite resource. More...
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Render
     High-level Render system API.
     
    ================================================ FILE: docs/cppapi/render_2sprite_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/sprite.h Source File
    Tramway SDK v0.1.1
    sprite.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_RENDER_SPRITE_H
    4#define TRAM_SDK_RENDER_SPRITE_H
    5
    6#include <render/render.h>
    7
    8namespace tram::Render {
    9
    10class Material;
    11
    13 uint16_t offset_x;
    14 uint16_t offset_y;
    15 uint16_t width;
    16 uint16_t height;
    17 uint16_t midpoint_x;
    18 uint16_t midpoint_y;
    19 uint16_t border_h;
    20 uint16_t border_v;
    21};
    22
    23class Sprite : public Resource {
    24public:
    26 inline Material* GetMaterial () const { return material; }
    27 inline void SetMaterial (Material* mat) { material = mat; }
    28
    29 void LoadFromDisk();
    30 void LoadFromMemory();
    31
    32 void Unload() {}
    33
    34 const std::vector<SpriteFrame>& GetFrames() { return frames; };
    35
    36 static Sprite* Find(name_t name);
    37protected:
    38 std::vector<SpriteFrame> frames;
    39 Material* material = nullptr;
    40};
    41
    42}
    43
    44#endif // TRAM_SDK_RENDER_SPRITE_H
    Material resource.
    Definition: material.h:31
    Sprite resource.
    Definition: sprite.h:23
    void SetMaterial(Material *mat)
    Definition: sprite.h:27
    void LoadFromDisk()
    Definition: sprite.cpp:54
    void Unload()
    Definition: sprite.h:32
    void LoadFromMemory()
    Definition: sprite.cpp:49
    const std::vector< SpriteFrame > & GetFrames()
    Definition: sprite.h:34
    static Sprite * Find(name_t name)
    Definition: sprite.cpp:37
    Material * GetMaterial() const
    Definition: sprite.h:26
    Material * material
    Definition: sprite.h:39
    std::vector< SpriteFrame > frames
    Definition: sprite.h:38
    Sprite(UID name)
    Definition: sprite.h:25
    Definition: resource.h:11
    name_t name
    Definition: resource.h:37
    High-level Render system API.
    Definition: gui.h:8
    Definition: sprite.h:12
    uint16_t border_v
    Definition: sprite.h:20
    uint16_t height
    Definition: sprite.h:16
    uint16_t offset_y
    Definition: sprite.h:14
    uint16_t midpoint_y
    Definition: sprite.h:18
    uint16_t offset_x
    Definition: sprite.h:13
    uint16_t border_h
    Definition: sprite.h:19
    uint16_t width
    Definition: sprite.h:15
    uint16_t midpoint_x
    Definition: sprite.h:17
    Interned string type.
    Definition: uid.h:10
    ================================================ FILE: docs/cppapi/renderer_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/renderer.cpp File Reference
    Tramway SDK v0.1.1
    renderer.cpp File Reference
    #include <render/renderer.h>
    #include <render/vertices.h>
    #include <framework/logging.h>

    Classes

    struct  tram::Render::RegisteredVertexDefinition
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Render
     High-level Render system API.
     

    Functions

    void tram::Render::RegisterVertexDefinition (vertexformat_t format, VertexDefinition definition)
     Registers a VertexDefinition for a specified vertex format. More...
     
    VertexDefinition tram::Render::GetVertexDefinition (vertexformat_t format)
     Returns a previously registered VertexDefinition. More...
     
    ================================================ FILE: docs/cppapi/renderer_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/renderer.h File Reference
    Tramway SDK v0.1.1
    renderer.h File Reference
    #include <render/render.h>

    Go to the source code of this file.

    Classes

    struct  tram::Render::VertexAttribute
     Atributes for vertex buffer vertices. More...
     
    struct  tram::Render::VertexDefinition
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Render
     High-level Render system API.
     

    Enumerations

    enum  tram::Render::renderflags : uint32_t {
      tram::Render::FLAG_NO_RENDER = 0 , tram::Render::FLAG_RENDER = 1 , tram::Render::FLAG_DRAW_INDEXED = 4 , tram::Render::FLAG_REVERSE_SORT = 8 ,
      tram::Render::FLAG_TRANSPARENT = 16 , tram::Render::FLAG_NO_DEPTH_TEST = 32 , tram::Render::FLAG_NO_DIRECTIONAL = 64 , tram::Render::FLAG_DRAW_LINES = 128 ,
      tram::Render::FLAG_DISABLE_LIGHTING = 256 , tram::Render::FLAG_NO_DEBUG = 512 , tram::Render::FLAG_USE_AABB = 1024
    }
     Flags for DrawListObjects. More...
     
    enum  tram::Render::ColorMode { tram::Render::COLORMODE_R , tram::Render::COLORMODE_RG , tram::Render::COLORMODE_RGB , tram::Render::COLORMODE_RGBA }
     Texture color mode. More...
     
    enum  tram::Render::TextureFilter { tram::Render::TEXTUREFILTER_NEAREST , tram::Render::TEXTUREFILTER_LINEAR , tram::Render::TEXTUREFILTER_LINEAR_MIPMAPPED }
     Texture filters. More...
     

    Functions

    void tram::Render::RegisterVertexDefinition (vertexformat_t format, VertexDefinition definition)
     Registers a VertexDefinition for a specified vertex format. More...
     
    VertexDefinition tram::Render::GetVertexDefinition (vertexformat_t format)
     Returns a previously registered VertexDefinition. More...
     
    ================================================ FILE: docs/cppapi/renderer_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/renderer.h Source File
    Tramway SDK v0.1.1
    renderer.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_RENDER_RENDERER_H
    4#define TRAM_SDK_RENDER_RENDERER_H
    5
    6#include <render/render.h>
    7
    8namespace tram::Render {
    9
    11enum renderflags: uint32_t {
    12 FLAG_NO_RENDER = 0, //< Object is not rendered.
    13 FLAG_RENDER = 1, //< Object is rendered.
    14
    15 FLAG_DRAW_INDEXED = 4, //< Vertex buffer has indices.
    16 FLAG_REVERSE_SORT = 8, //< Furthest objects are rendered first.
    17 FLAG_TRANSPARENT = 16, //< Object is transparent and is rendered last.
    18 FLAG_NO_DEPTH_TEST = 32, //< Object is rendered on top of other objects.
    19 FLAG_NO_DIRECTIONAL = 64, //< Object is not lit by directional lighting.
    20 FLAG_DRAW_LINES = 128, //< Object is rendered as lines. Otherwise rendered as triangles.
    21 FLAG_DISABLE_LIGHTING = 256, //< Object is rendered without lighting.
    22 FLAG_NO_DEBUG = 512, //< Object does not get debugged.
    23 FLAG_USE_AABB = 1024 //< Object has an AABB that can be used for filtering.
    24};
    25
    28 COLORMODE_R, //< Contains only red channel, pixel is 1 byte long.
    29 COLORMODE_RG, //< Contains red and green channels, pixel is 2 bytes long.
    30 COLORMODE_RGB, //< Contains red, green and blue channels, pixel is 3 bytes long.
    31 COLORMODE_RGBA //< Contains red, green, blue and alpha channels, pixel is 4 bytes long.
    32};
    33
    37 TEXTUREFILTER_LINEAR, //< Textures use linear filtering.
    38 TEXTUREFILTER_LINEAR_MIPMAPPED //< Textures use linear filtering and are mipmapped.
    39};
    40
    43 enum {
    46 UINT32
    48 enum {
    57 } ffp_type; //< Tells the FFP how to interpret this attribute.
    58 uint32_t size; //< Size of the attribute, in bytes.
    59 uint32_t stride; //< Distance between same attribute in different vertices, in bytes.
    60 uint64_t offset; //< Offset of beginning of attribute in vertex buffer.
    61};
    62
    66};
    67
    70
    71
    72}
    73
    74#endif // TRAM_SDK_RENDER_RENDERER_H
    High-level Render system API.
    Definition: gui.h:8
    void RegisterVertexDefinition(vertexformat_t format, VertexDefinition definition)
    Registers a VertexDefinition for a specified vertex format.
    Definition: renderer.cpp:61
    uint32_t vertexformat_t
    Definition: render.h:19
    renderflags
    Flags for DrawListObjects.
    Definition: renderer.h:11
    @ FLAG_NO_RENDER
    Definition: renderer.h:12
    @ FLAG_DRAW_INDEXED
    Definition: renderer.h:15
    @ FLAG_NO_DEBUG
    Definition: renderer.h:22
    @ FLAG_REVERSE_SORT
    Definition: renderer.h:16
    @ FLAG_USE_AABB
    Definition: renderer.h:23
    @ FLAG_DISABLE_LIGHTING
    Definition: renderer.h:21
    @ FLAG_RENDER
    Definition: renderer.h:13
    @ FLAG_NO_DEPTH_TEST
    Definition: renderer.h:18
    @ FLAG_TRANSPARENT
    Definition: renderer.h:17
    @ FLAG_NO_DIRECTIONAL
    Definition: renderer.h:19
    @ FLAG_DRAW_LINES
    Definition: renderer.h:20
    ColorMode
    Texture color mode.
    Definition: renderer.h:27
    @ COLORMODE_RG
    Definition: renderer.h:29
    @ COLORMODE_R
    Definition: renderer.h:28
    @ COLORMODE_RGBA
    Definition: renderer.h:31
    @ COLORMODE_RGB
    Definition: renderer.h:30
    TextureFilter
    Texture filters.
    Definition: renderer.h:35
    @ TEXTUREFILTER_LINEAR
    Definition: renderer.h:37
    @ TEXTUREFILTER_LINEAR_MIPMAPPED
    Definition: renderer.h:38
    @ TEXTUREFILTER_NEAREST
    Definition: renderer.h:36
    VertexDefinition GetVertexDefinition(vertexformat_t format)
    Returns a previously registered VertexDefinition.
    Definition: renderer.cpp:76
    Atributes for vertex buffer vertices.
    Definition: renderer.h:42
    uint32_t stride
    Definition: renderer.h:59
    enum tram::Render::VertexAttribute::@82 type
    @ FFP_COLOR
    Definition: renderer.h:52
    @ FFP_POSITION
    Definition: renderer.h:50
    @ FFP_BONE_INDEX
    Definition: renderer.h:55
    @ FFP_IGNORE
    Definition: renderer.h:49
    @ FFP_LIGHTMAP
    Definition: renderer.h:54
    @ FFP_BONE_WEIGHT
    Definition: renderer.h:56
    @ FFP_TEXTURE
    Definition: renderer.h:53
    @ FFP_NORMAL
    Definition: renderer.h:51
    uint32_t size
    Definition: renderer.h:58
    @ INT32
    Definition: renderer.h:45
    @ FLOAT32
    Definition: renderer.h:44
    @ UINT32
    Definition: renderer.h:46
    uint64_t offset
    Definition: renderer.h:60
    enum tram::Render::VertexAttribute::@83 ffp_type
    Definition: renderer.h:63
    const VertexAttribute * attributes
    Definition: renderer.h:64
    size_t attribute_count
    Definition: renderer.h:65
    ================================================ FILE: docs/cppapi/resource_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/resource.h File Reference
    Tramway SDK v0.1.1
    resource.h File Reference

    Go to the source code of this file.

    Classes

    class  tram::Resource
     
    class  tram::ResourceProxy< T >
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Async
     Multi-threading and Resource streaming.
     

    Functions

    void tram::Async::RequestResource (EntityComponent *requester, Resource *resource)
     Adds a resource to the loading queue. More...
     
    ================================================ FILE: docs/cppapi/resource_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/resource.h Source File
    Tramway SDK v0.1.1
    resource.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_FRAMEWORK_RESOURCE_H
    4#define TRAM_SDK_FRAMEWORK_RESOURCE_H
    5
    6#include <framework/uid.h>
    8
    9namespace tram {
    10
    11class Resource {
    12public:
    13 enum Status {
    14 UNLOADED, //< Resource not in memory. Can't be used.
    15 LOADED, //< Resource loaded in memory, but still needs some processing (like uploading to video memory).
    16 READY, //< Resource is ready for sus.
    17 };
    18
    20
    21 inline Resource::Status GetStatus() const { return status; }
    22 inline name_t GetName() const { return name; }
    23 inline size_t GetReferences() const { return references; }
    24 inline bool IsLoadFailed() const { return load_fail; }
    25
    26 inline void AddReference() { references++; }
    27 inline void RemoveReference() { references--; }
    28
    29 virtual void LoadFromDisk() = 0;
    30 virtual void LoadFromMemory() = 0;
    31
    33
    34 virtual void Unload() = 0;
    35protected:
    38 bool load_fail = false;
    39 size_t references = 0;
    40};
    41
    42
    43namespace Async { void RequestResource (EntityComponent* requester, Resource* requested_resource); }
    44
    45template <typename T>
    47public:
    49 ~ResourceProxy() { set(nullptr); }
    50 void set(Resource* new_res){
    51 if (new_res == resource) return;
    52
    53 if (resource) {
    56 }
    57
    58 resource = new_res;
    59
    60 if (resource) {
    62
    66 }
    67 }
    68 }
    69 T* get() { return (T*)resource; }
    70 T* operator= (Resource* res) { set(res); return get(); }
    71 T* operator->() { return (T*)resource; }
    72 T& operator*() { return *((T*)resource); }
    73 explicit operator bool() { return resource != nullptr; }
    74protected:
    76 Resource* resource = nullptr;
    77};
    78
    79}
    80
    81#endif // TRAM_SDK_FRAMEWORK_RESOURCE_H
    Component base class.
    Definition: entitycomponent.h:16
    size_t resources_waiting
    Definition: entitycomponent.h:32
    Definition: resource.h:11
    virtual void Unload()=0
    name_t name
    Definition: resource.h:37
    void Load()
    Definition: resource.h:32
    name_t GetName() const
    Definition: resource.h:22
    void RemoveReference()
    Definition: resource.h:27
    Resource::Status GetStatus() const
    Definition: resource.h:21
    virtual void LoadFromDisk()=0
    Resource(name_t name)
    Definition: resource.h:19
    Status
    Definition: resource.h:13
    @ LOADED
    Definition: resource.h:15
    @ READY
    Definition: resource.h:16
    @ UNLOADED
    Definition: resource.h:14
    bool IsLoadFailed() const
    Definition: resource.h:24
    size_t references
    Definition: resource.h:39
    virtual void LoadFromMemory()=0
    Status status
    Definition: resource.h:36
    size_t GetReferences() const
    Definition: resource.h:23
    void AddReference()
    Definition: resource.h:26
    bool load_fail
    Definition: resource.h:38
    Definition: resource.h:46
    T * operator->()
    Definition: resource.h:71
    Resource * resource
    Definition: resource.h:76
    void set(Resource *new_res)
    Definition: resource.h:50
    T & operator*()
    Definition: resource.h:72
    T * get()
    Definition: resource.h:69
    ResourceProxy(EntityComponent *parent)
    Definition: resource.h:48
    EntityComponent * parent
    Definition: resource.h:75
    ~ResourceProxy()
    Definition: resource.h:49
    T * operator=(Resource *res)
    Definition: resource.h:70
    void CancelRequest(EntityComponent *requester, Resource *resource)
    Cancels a resource load request.
    Definition: async.cpp:126
    void RequestResource(EntityComponent *requester, Resource *resource)
    Adds a resource to the loading queue.
    Definition: async.cpp:91
    Serialization, i.e.
    Interned string type.
    Definition: uid.h:10
    ================================================ FILE: docs/cppapi/scene_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/scene.cpp File Reference
    Tramway SDK v0.1.1
    scene.cpp File Reference
    #include <render/scene.h>
    #include <components/render.h>
    #include <render/model.h>
    #include <templates/pool.h>
    #include <templates/aabb.h>
    #include <templates/octree.h>

    Classes

    struct  tram::Render::AABB::AABBLeaf
     
    struct  tram::Render::LightTree::Light
     

    Namespaces

    namespace  tram::Render::SceneTree
     Scene tree.
     
    namespace  tram::Render::LightTree
     Scene light tree.
     
    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Render
     High-level Render system API.
     
    namespace  tram::Render::AABB
     

    Functions

    aabbleaf_t tram::Render::AABB::InsertLeaf (RenderComponent *component, vec3 position, quat rotation, vec3 scale)
     Inserts a RenderComponent leaf into the scene tree. More...
     
    void tram::Render::AABB::RemoveLeaf (aabbleaf_t leaf_id)
     Removes a leaf from. More...
     
    QueryResponse tram::Render::AABB::FindNearestFromRay (vec3 ray_pos, vec3 ray_dir, uint32_t mask)
     Peforms a raycast and retrieves the nearest object. More...
     
    void tram::Render::AABB::FindAllIntersectionsFromAABB (vec3 min, vec3 max, std::function< void(ReferenceType, EntityComponent *)> callback)
     
    void tram::Render::AABB::DebugDrawTree ()
     Draws the scene tree for a single frame. More...
     
    Octree< Light * > tram::Render::LightTree::light_tree ("light tree", 200)
     
    void tram::Render::LightTree::AddLight (light_t light, vec3 pos, float dist)
     Adds a light to the light tree. More...
     
    void tram::Render::LightTree::FindLights (vec3 position, light_t *dest)
     Finds the 4 nearest lights to a given position. More...
     
    void tram::Render::LightTree::RemoveLight (light_t light)
     Removes a light from the light tree. More...
     

    Variables

    Pool< Light > tram::Render::LightTree::light_list ("lighttree pool", 200)
     
    ================================================ FILE: docs/cppapi/scene_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/scene.h File Reference
    Tramway SDK v0.1.1
    scene.h File Reference
    #include <framework/math.h>
    #include <render/model.h>
    #include <functional>

    Go to the source code of this file.

    Classes

    struct  tram::Render::AABB::QueryResponse
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Render
     High-level Render system API.
     
    namespace  tram::Render::AABB
     
    namespace  tram::Render::LightTree
     Scene light tree.
     

    Typedefs

    typedef void * tram::Render::aabbleaf_t
     

    Enumerations

    enum  tram::Render::AABB::ReferenceType : uint32_t { tram::Render::AABB::REFERENCE_RENDERCOMPONENT = 1 }
     

    Functions

    aabbleaf_t tram::Render::AABB::InsertLeaf (RenderComponent *component, vec3 position, quat rotation, vec3 scale)
     Inserts a RenderComponent leaf into the scene tree. More...
     
    void tram::Render::AABB::RemoveLeaf (aabbleaf_t leaf_id)
     Removes a leaf from. More...
     
    QueryResponse tram::Render::AABB::FindNearestFromRay (vec3 ray_pos, vec3 ray_dir, uint32_t mask)
     Peforms a raycast and retrieves the nearest object. More...
     
    void tram::Render::AABB::FindAllIntersectionsFromAABB (vec3 min, vec3 max, std::function< void(ReferenceType, EntityComponent *)> callback)
     
    void tram::Render::AABB::DebugDrawTree ()
     Draws the scene tree for a single frame. More...
     
    void tram::Render::LightTree::AddLight (light_t light, vec3 pos, float dist)
     Adds a light to the light tree. More...
     
    void tram::Render::LightTree::FindLights (vec3 position, light_t *dest)
     Finds the 4 nearest lights to a given position. More...
     
    void tram::Render::LightTree::RemoveLight (light_t light)
     Removes a light from the light tree. More...
     
    ================================================ FILE: docs/cppapi/scene_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/scene.h Source File
    Tramway SDK v0.1.1
    scene.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_RENDER_SCENE_H
    4#define TRAM_SDK_RENDER_SCENE_H
    5
    6#include <framework/math.h>
    7#include <render/model.h>
    8
    9#include <functional>
    10
    11namespace tram {
    12 class RenderComponent;
    13}
    14
    15namespace tram::Render {
    16 typedef void* aabbleaf_t;
    17}
    18
    19namespace tram::Render::AABB {
    20
    21enum ReferenceType : uint32_t {
    23};
    24
    27 void* data;
    28
    31};
    32
    33aabbleaf_t InsertLeaf(RenderComponent* component, vec3 position, quat rotation, vec3 scale);
    34void RemoveLeaf(aabbleaf_t leaf);
    35
    36QueryResponse FindNearestFromRay(vec3 ray_pos, vec3 ray_dir, uint32_t mask);
    37
    39
    40void DebugDrawTree();
    41
    42}
    43
    45
    46void AddLight(light_t light, vec3 pos, float dist);
    47void FindLights(vec3 position, light_t* dest);
    48void RemoveLight(light_t light);
    49
    50}
    51
    52#endif // TRAM_SDK_RENDER_SCENE_H
    Component base class.
    Definition: entitycomponent.h:16
    Renders a Model.
    Definition: render.h:12
    value_t(* function)(valuearray_t)
    Definition: lua.cpp:156
    Definition: scene.cpp:41
    void RemoveLeaf(aabbleaf_t leaf_id)
    Removes a leaf from.
    Definition: scene.cpp:101
    void FindAllIntersectionsFromAABB(vec3 min, vec3 max, std::function< void(ReferenceType, EntityComponent *)> callback)
    Definition: scene.cpp:167
    ReferenceType
    Definition: scene.h:21
    @ REFERENCE_RENDERCOMPONENT
    Definition: scene.h:22
    QueryResponse FindNearestFromRay(vec3 ray_pos, vec3 ray_dir, uint32_t mask)
    Peforms a raycast and retrieves the nearest object.
    Definition: scene.cpp:113
    aabbleaf_t InsertLeaf(RenderComponent *component, vec3 position, quat rotation, vec3 scale)
    Inserts a RenderComponent leaf into the scene tree.
    Definition: scene.cpp:61
    void DebugDrawTree()
    Draws the scene tree for a single frame.
    Definition: scene.cpp:193
    Scene light tree.
    void AddLight(light_t light, vec3 pos, float dist)
    Adds a light to the light tree.
    Definition: scene.cpp:212
    void RemoveLight(light_t light)
    Removes a light from the light tree.
    Definition: scene.cpp:239
    void FindLights(vec3 position, light_t *dest)
    Finds the 4 nearest lights to a given position.
    Definition: scene.cpp:225
    High-level Render system API.
    Definition: gui.h:8
    void * aabbleaf_t
    Definition: scene.h:16
    Serialization, i.e.
    glm::vec3 vec3
    Definition: math.h:11
    glm::quat quat
    Definition: math.h:12
    Definition: scene.h:25
    vec3 intersection
    Definition: scene.h:29
    ReferenceType type
    Definition: scene.h:26
    AABBTriangle triangle
    Definition: scene.h:30
    void * data
    Definition: scene.h:27
    Definition: model.h:13
    Definition: render.h:173
    ================================================ FILE: docs/cppapi/script_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/script.cpp File Reference
    Tramway SDK
    script.cpp File Reference
    #include <framework/script.h>
    #include <cstring>
    #include <iostream>
    #include <framework/core.h>
    #include <framework/entity.h>
    #include <framework/event.h>
    #include <framework/ui.h>
    #include <audio/audio.h>
    #include <render/render.h>
    #include <render/material.h>
    #include <render/model.h>
    #include <render/sprite.h>
    #include <physics/physics.h>

    Namespaces

    namespace  tram
     
    namespace  tram::Script
     

    Functions

    void tram::Script::SetGlobal (name_t name, value_t value)
     
    value_t tram::Script::GetGlobal (name_t name)
     
    void tram::Script::SetFunction (name_t name, std::vector< Type > parameters, value_t(*function)(valuearray_t))
     
    value_t tram::Script::CallFunction (name_t name, std::vector< Value > parameters)
     
    void tram::Script::SetLanguage (Language lang)
     
    void tram::Script::LoadScript (const char *path)
     
    void tram::Script::Init ()
     
    ================================================ FILE: docs/cppapi/script_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/script.h File Reference
    Tramway SDK
    script.h File Reference
    #include <framework/value.h>
    #include <vector>

    Go to the source code of this file.

    Classes

    struct  tram::Script::Language
     

    Namespaces

    namespace  tram
     
    namespace  tram::Script
     

    Functions

    void tram::Script::SetGlobal (name_t name, value_t value)
     
    value_t tram::Script::GetGlobal (name_t name)
     
    void tram::Script::SetFunction (name_t name, std::vector< Type > parameters, value_t(*function)(valuearray_t))
     
    value_t tram::Script::CallFunction (name_t name, std::vector< Value > parameters)
     
    void tram::Script::SetLanguage (Language lang)
     
    void tram::Script::LoadScript (const char *path)
     
    void tram::Script::Init ()
     
    ================================================ FILE: docs/cppapi/script_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/script.h Source File
    Tramway SDK
    script.h
    Go to the documentation of this file.
    1// TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022
    2// All rights reserved.
    3
    4#ifndef TRAM_SDK_FRAMEWORK_SCRIPT_H
    5#define TRAM_SDK_FRAMEWORK_SCRIPT_H
    6
    7#include <framework/value.h>
    8#include <vector>
    9
    10namespace tram::Script {
    11
    12void SetGlobal(name_t name, value_t value);
    14void SetFunction(name_t name, std::vector<Type> parameters, value_t (*function)(valuearray_t));
    15value_t CallFunction(name_t name, std::vector<Value> parameters);
    16
    17
    18struct Language {
    20
    22 void (*set_global)(name_t name, value_t value);
    23 void (*set_function)(name_t name, std::vector<Type> parameters, value_t (*function)(valuearray_t));
    24 value_t (*call_function)(name_t name, std::vector<Value> parameters);
    25
    26 void (*load_script)(const char* path);
    27};
    28
    29void SetLanguage(Language language);
    30void LoadScript(const char* path);
    31
    32void Init();
    33
    34}
    35
    36#endif // TRAM_SDK_FRAMEWORK_SCRIPT_H
    Generic, type-safe union.
    Definition: value.h:18
    std::vector< Type > parameters
    Definition: lua.cpp:156
    Definition: script.cpp:23
    void SetGlobal(name_t name, value_t value)
    Definition: script.cpp:34
    void Init()
    Definition: script.cpp:58
    void SetFunction(name_t name, std::vector< Type > parameters, value_t(*function)(valuearray_t))
    Definition: script.cpp:42
    void SetLanguage(Language lang)
    Definition: script.cpp:50
    value_t GetGlobal(name_t name)
    Definition: script.cpp:38
    void LoadScript(const char *path)
    Definition: script.cpp:54
    value_t CallFunction(name_t name, std::vector< Value > parameters)
    Definition: script.cpp:46
    Value value_t
    Definition: value.h:346
    ValueArray valuearray_t
    Definition: value.h:347
    UID name_t
    Definition: uid.h:40
    Definition: script.h:18
    name_t name
    Definition: script.h:19
    void(* load_script)(const char *path)
    Definition: script.h:26
    void(* set_global)(name_t name, value_t value)
    Definition: script.h:22
    void(* set_function)(name_t name, std::vector< Type > parameters, value_t(*function)(valuearray_t))
    Definition: script.h:23
    value_t(* call_function)(name_t name, std::vector< Value > parameters)
    Definition: script.h:24
    value_t(* get_global)(name_t name)
    Definition: script.h:21
    Definition: uid.h:11
    ================================================ FILE: docs/cppapi/sdl_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/platform/sdl/sdl.cpp File Reference
    Tramway SDK v0.1.1
    sdl.cpp File Reference
    #include <platform/api.h>
    #include <platform/platform.h>
    #include <framework/ui.h>
    #include <framework/logging.h>
    #include <render/api.h>
    #include <SDL.h>
    #include <SDL_syswm.h>
    #include <glad.c>

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Platform
     

    Functions

    void tram::Platform::SetScale (int s)
     
    ================================================ FILE: docs/cppapi/search/all_0.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/all_0.js ================================================ var searchData= [ ['_5ftest_5fcase_0',['_test_case',['../struct__test__case.html',1,'']]] ]; ================================================ FILE: docs/cppapi/search/all_1.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/all_1.js ================================================ var searchData= [ ['aabb_2eh_0',['aabb.h',['../aabb_8h.html',1,'']]], ['aabb_5fmax_1',['aabb_max',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#a4cd6d561d1c22dcbf7e81a7fc1b4e9ed',1,'tram::Render::API::GLDrawListEntry::aabb_max()'],['../classtram_1_1_render_1_1_model.html#a030f9e0ab4d7afbaf589eb18e767c3a2',1,'tram::Render::Model::aabb_max()']]], ['aabb_5fmin_2',['aabb_min',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#a0d85b48d0b7d54b45de4f436571e40b0',1,'tram::Render::API::GLDrawListEntry::aabb_min()'],['../classtram_1_1_render_1_1_model.html#a743debf3087f34ef70b7b98d5d1d3e6c',1,'tram::Render::Model::aabb_min()']]], ['aabb_5ftree_5fleaf_3',['aabb_tree_leaf',['../classtram_1_1_render_component.html#ae40a30e7729ab549faf072c9b0440ae5',1,'tram::RenderComponent']]], ['aabbdistance_4',['AABBDistance',['../classtram_1_1_a_a_b_b_tree.html#a854ba4aa154dfc14b544cc142418b63b',1,'tram::AABBTree']]], ['aabbintersect_5',['AABBIntersect',['../classtram_1_1_a_a_b_b_tree.html#a0fdc8691cc5674bcd2b18e1b287301e1',1,'tram::AABBTree']]], ['aabbleaf_6',['AABBLeaf',['../structtram_1_1_render_1_1_a_a_b_b_1_1_a_a_b_b_leaf.html',1,'tram::Render::AABB']]], ['aabbleaf_5ft_7',['aabbleaf_t',['../namespacetram_1_1_render.html#ab19b566afd13e36e1b377bd19adab144',1,'tram::Render']]], ['aabboverlap_8',['AABBOverlap',['../classtram_1_1_a_a_b_b_tree.html#afe35ffcff47d45bf7b4dad9b2d510d80',1,'tram::AABBTree']]], ['aabbsurface_9',['AABBSurface',['../classtram_1_1_a_a_b_b_tree.html#ad990b44be408032340081fb22dbc1ca2',1,'tram::AABBTree']]], ['aabbtree_10',['AABBTree',['../classtram_1_1_a_a_b_b_tree.html#a567a82fddf4d8649dec4f358fe08da29',1,'tram::AABBTree::AABBTree()'],['../classtram_1_1_a_a_b_b_tree.html',1,'tram::AABBTree']]], ['aabbtriangle_11',['AABBTriangle',['../structtram_1_1_render_1_1_a_a_b_b_triangle.html',1,'tram::Render']]], ['aabbvolume_12',['AABBVolume',['../classtram_1_1_a_a_b_b_tree.html#a715f0769ae31e4adfcea697bf841dd77',1,'tram::AABBTree']]], ['abbrv_13',['abbrv',['../struct__test__case.html#a99c028d2ac17e92affe9fec7483b98a6',1,'_test_case']]], ['accessmode_14',['AccessMode',['../classtram_1_1_file.html#ab340a7edca3c73f54d764cd17b362477',1,'tram::File']]], ['action_15',['action',['../structtram_1_1_u_i_1_1_key_binding.html#a891c15910a42f723bbc0db27e2dd3e41',1,'tram::UI::KeyBinding::action()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_topic.html#ab41b9820fb4c0943c7e564fc790cf636',1,'tram::Ext::Kitchensink::DialogTopic::action()']]], ['actions_2eh_16',['actions.h',['../actions_8h.html',1,'']]], ['activate_17',['ACTIVATE',['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6a3df791ecf039d9c7b4bc33d2d309d402',1,'tram::Signal::ACTIVATE()'],['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afda22521d1c8ac869500c5e2bac43e6acd0',1,'tram::Message::ACTIVATE()']]], ['activate_18',['Activate',['../classtram_1_1_trigger.html#a99650ea152bb5eb058cdb49d19bc4ecc',1,'tram::Trigger']]], ['activate_5fonce_19',['ACTIVATE_ONCE',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afdac734cee3c6945cb40d1e23a5b6e12a3a',1,'tram::Message']]], ['add_20',['Add',['../namespacetram_1_1_stats.html#a7d1692841a6345016a11319bb9d5a3aa',1,'tram::Stats::Add()'],['../classtram_1_1_ext_1_1_menu_1_1_menu.html#a1daec0fd40b63b2ebedbbc99dee5cb80',1,'tram::Ext::Menu::Menu::Add()'],['../classtram_1_1_world_cell.html#a6d8c426c88e1a950304ce2b499a2a065',1,'tram::WorldCell::Add()'],['../classtram_1_1_signal_table.html#a42153d34f72f7fd4e3b43eec183d61a4',1,'tram::SignalTable::Add()'],['../classtram_1_1_world_cell.html#a13cf0ae3a6ecb0f8d9c4800f24c914ef',1,'tram::WorldCell::Add()']]], ['addbaseclass_21',['AddBaseClass',['../classtram_1_1_ext_1_1_kitchensink_1_1_character_class.html#a84d3d60fea7430558208b30e8281d751',1,'tram::Ext::Kitchensink::CharacterClass']]], ['addcharacter_22',['AddCharacter',['../classtram_1_1_ext_1_1_kitchensink_1_1_faction.html#ae240133d8845aeae9cffc999e37a1763',1,'tram::Ext::Kitchensink::Faction']]], ['addchild_23',['AddChild',['../namespacetram_1_1_ext_1_1_kitchensink.html#a16caf89d1fcf378195a2f0fa188b0156',1,'tram::Ext::Kitchensink']]], ['addclass_24',['AddClass',['../classtram_1_1_ext_1_1_kitchensink_1_1_character.html#ab8675fad8c679169af255b91d45b807d',1,'tram::Ext::Kitchensink::Character']]], ['addcube_25',['AddCube',['../namespacetram_1_1_render.html#a80ac9a1f629a048bc89f3a816783db87',1,'tram::Render']]], ['addcylinder_26',['AddCylinder',['../namespacetram_1_1_render.html#a504da26659f9ff6e512e052ccd974ce8',1,'tram::Render']]], ['addfaction_27',['AddFaction',['../classtram_1_1_ext_1_1_kitchensink_1_1_character_class.html#a86b83d010b464d657533f54684f3b819',1,'tram::Ext::Kitchensink::CharacterClass']]], ['additem_28',['AddItem',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#ac82a46651c702a1efac9917179d42263',1,'tram::Ext::Kitchensink::Inventory::AddItem()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory_manager.html#a36bc5edd165aedb4ff48c5ef27426a4d',1,'tram::Ext::Kitchensink::InventoryManager::AddItem()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_list_inventory_manager.html#a86886a96730029deb9c866327eec9484',1,'tram::Ext::Kitchensink::ListInventoryManager::AddItem()']]], ['addleaf_29',['AddLeaf',['../classtram_1_1_octree.html#af27324144ece2995f714d7fb6a9a802d',1,'tram::Octree']]], ['addlight_30',['AddLight',['../namespacetram_1_1_render_1_1_light_tree.html#aad6c0b080cf76a2e64216adc9318807e',1,'tram::Render::LightTree']]], ['addline_31',['AddLine',['../namespacetram_1_1_render.html#aaf8ef81eae0da772762ff835a3a24536',1,'tram::Render']]], ['addlineaabb_32',['AddLineAABB',['../namespacetram_1_1_render.html#aa2585f6dc9fbeddf62db686a5dbafbea',1,'tram::Render']]], ['addlinemarker_33',['AddLineMarker',['../namespacetram_1_1_render.html#ae5ab2f07c068f59f0ded62a742e05fdf',1,'tram::Render']]], ['addlistener_34',['AddListener',['../structtram_1_1_event.html#a5610bb4c11e4610b9b13ea2301e14f39',1,'tram::Event::AddListener(event_t type, void(*handler)(Event &event))'],['../structtram_1_1_event.html#a817b7223a8818863e27dba112ade5930',1,'tram::Event::AddListener(event_t type, void *data, void(*handler)(Event &event, void *data))'],['../structtram_1_1_event.html#a912991992322aab15d777e22848332cb',1,'tram::Event::AddListener(event_t type, Entity *entity)'],['../structtram_1_1_event.html#af1a090951d04d0b72b10020a273d8f05',1,'tram::Event::AddListener(event_t type, EntityComponent *component)']]], ['addnew_35',['AddNew',['../classtram_1_1_stack_pool.html#a4f26be1e8228843b1d4928fbd584997e',1,'tram::StackPool::AddNew()'],['../classtram_1_1_stack.html#aef5ef45fb8c20c2f54ebcb7953be1556',1,'tram::Stack::AddNew()'],['../classtram_1_1_pool.html#a2b0b341946b782acc6ca1959b7452488',1,'tram::Pool::AddNew()']]], ['addpoint_36',['AddPoint',['../classtram_1_1_transition.html#a0abe4ca65b69601118f03ed677b276c0',1,'tram::Transition']]], ['addreference_37',['AddReference',['../classtram_1_1_resource.html#ae12c04585a9bf0e7f6f14e394d649978',1,'tram::Resource']]], ['addsingleresult_38',['addSingleResult',['../structtram_1_1_physics_1_1_a_p_i_1_1_shapecast_callback.html#ab75650c5457a0594da168d17a03dab9f',1,'tram::Physics::API::ShapecastCallback']]], ['addsound_39',['AddSound',['../classtram_1_1_ext_1_1_kitchensink_1_1_sound_table.html#a8d4546e389d3135619016bd4ad493bc2',1,'tram::Ext::Kitchensink::SoundTable']]], ['addsphere_40',['AddSphere',['../namespacetram_1_1_render.html#ac8426b2175dd44cfee749c08ae81583c',1,'tram::Render']]], ['addstate_41',['AddState',['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_table.html#af80681af9d6461c2545e1ba6f3559a0d',1,'tram::Ext::Kitchensink::AnimationTable']]], ['addstatespace_42',['AddStateSpace',['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_table.html#a4ccd358ff8f03863bb1c431931175c8d',1,'tram::Ext::Kitchensink::AnimationTable']]], ['addtext_43',['AddText',['../namespacetram_1_1_render.html#acb324f6e78d295296dd65efb3d3071af',1,'tram::Render::AddText(vec3 pos, const char *text, color_t color)'],['../namespacetram_1_1_render.html#af0419e9b99eb8d74ca41fd30f32e3e13',1,'tram::Render::AddText(float x, float y, const char *text, color_t color)']]], ['addtransition_44',['AddTransition',['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_table.html#abb6ce7a99352a9ed067351ed8598a321',1,'tram::Ext::Kitchensink::AnimationTable::AddTransition(AnimStateTransitionDefault)'],['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_table.html#a1d0ea0b121a54d5ecee11eda9b8a621c',1,'tram::Ext::Kitchensink::AnimationTable::AddTransition(AnimStateTransitionFrom)'],['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_table.html#a3e2e0645eebf89ec94fa0e8352503c3b',1,'tram::Ext::Kitchensink::AnimationTable::AddTransition(AnimStateTransitionInto)']]], ['advance_45',['Advance',['../classtram_1_1_path_follower.html#a3517e3cd4fbc2f47b7a4b46743bcbaa0',1,'tram::PathFollower']]], ['affected_5fvalue_46',['affected_value',['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute.html#a122e60f9dedb9ba701a35eceb8c82476',1,'tram::Ext::Kitchensink::Attribute']]], ['age_47',['age',['../structtram_1_1_particle_component_1_1_particle.html#a037670487eaab8302dfc4aff5dcaf9c1',1,'tram::ParticleComponent::Particle']]], ['ai_2ecpp_48',['ai.cpp',['../ai_8cpp.html',1,'']]], ['ai_2eh_49',['ai.h',['../ai_8h.html',1,'']]], ['ai_5fpackage_5fconstr_50',['ai_package_constr',['../namespacetram_1_1_ext_1_1_kitchensink.html#a7ed49c241e07b037e40bcb940995e442',1,'tram::Ext::Kitchensink']]], ['aiagent_51',['AIAgent',['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html',1,'tram::Ext::Kitchensink']]], ['aipackage_52',['AIPackage',['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_package.html',1,'tram::Ext::Kitchensink']]], ['air_5fvelocity_53',['air_velocity',['../classtram_1_1_raycast_controller_component.html#a762a880efb2b272fb8e19edac34c7893',1,'tram::RaycastControllerComponent']]], ['aivariable_54',['AIVariable',['../structtram_1_1_ext_1_1_kitchensink_1_1_a_i_variable.html',1,'tram::Ext::Kitchensink']]], ['al_5fbuffer_5fcount_55',['al_buffer_count',['../structtram_1_1_audio_1_1audiobuffer__t.html#a6885d64a1de9cf00a1c92e833342717c',1,'tram::Audio::audiobuffer_t']]], ['al_5fbuffers_56',['al_buffers',['../structtram_1_1_audio_1_1audiobuffer__t.html#af57828b299513dfcf833b82c420376ad',1,'tram::Audio::audiobuffer_t']]], ['al_5fsource_57',['al_source',['../structtram_1_1_audio_1_1audiosource__t.html#a329f753b9c5fe9317e2bc22bc493b3c7',1,'tram::Audio::audiosource_t']]], ['allocate_58',['allocate',['../classtram_1_1_stack_pool.html#a6ce93b4a50a7e007acd3bbfdf8482d84',1,'tram::StackPool']]], ['allocated_5fsize_59',['allocated_size',['../classtram_1_1_stack_pool.html#aaeba247ccf78620d37bfb23ac812f123',1,'tram::StackPool']]], ['allocated_5fvertex_5fcount_60',['allocated_vertex_count',['../structtram_1_1_render_1_1_a_p_i_1_1_vertex_buffer_metadata.html#a05b3e968c350358dc7309eeb7cd76246',1,'tram::Render::API::VertexBufferMetadata']]], ['allocatedata_61',['AllocateData',['../structtram_1_1_event.html#ae0dda15a570f291dc9efd56058027f35',1,'tram::Event::AllocateData(size_t ammount)'],['../structtram_1_1_event.html#acdd37976a6d83ee51522e128feb72039',1,'tram::Event::AllocateData(const T &data)'],['../structtram_1_1_message.html#a14d91051b699371994bacfd7d0cf0a6d',1,'tram::Message::AllocateData(size_t ammount)'],['../structtram_1_1_message.html#a944e18391daa913fad2807ba33463a8e',1,'tram::Message::AllocateData()'],['../structtram_1_1_message.html#abc663230fe9deda62a6b1da94d65b90b',1,'tram::Message::AllocateData(const T &data)'],['../structtram_1_1_event.html#a0e33b78a59445000e7fbe10f97e32305',1,'tram::Event::AllocateData()']]], ['ambient_5fcolor_62',['ambient_color',['../namespacetram_1_1_render.html#a3789b74039f89d50409081cdc8fc1457',1,'tram::Render::ambient_color()'],['../structtram_1_1_render_1_1_a_p_i_1_1_layer_parameters.html#ad69fb09970588b36db1fd69a307211d6',1,'tram::Render::API::LayerParameters::ambient_color()']]], ['ambientcolor_63',['ambientColor',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#abbdd547abac3fec00f41c6fbf3879436',1,'tram::Render::API::ShaderUniformModelMatrices']]], ['and_64',['And',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#aec3fd459b2220d63b3aae47c2dfbb71a',1,'tram::Ext::Kitchensink::QuestVariable']]], ['anim_5fbframe_65',['anim_bframe',['../classtram_1_1_sprite_component.html#a60f9208d310ee25c0ae44d212b23a88c',1,'tram::SpriteComponent']]], ['anim_5fcount_66',['ANIM_COUNT',['../classtram_1_1_animation_component.html#ae44dc606d6f719e5a470fdc6ed013e27',1,'tram::AnimationComponent']]], ['anim_5ffinish_5fcallback_67',['anim_finish_callback',['../classtram_1_1_animation_component.html#abe657fb3e7986f8344a6a1aa5d1a40d7',1,'tram::AnimationComponent']]], ['anim_5fframe_68',['anim_frame',['../classtram_1_1_sprite_component.html#a88b7103d26803ae5ea1315648ef813e1',1,'tram::SpriteComponent']]], ['anim_5finfo_69',['anim_info',['../classtram_1_1_animation_component.html#a41874c91efb221e22ce606804aedf1c2',1,'tram::AnimationComponent']]], ['anim_5fisplaying_70',['anim_isplaying',['../classtram_1_1_sprite_component.html#af50cea976158bc2472c9df7cee551157',1,'tram::SpriteComponent']]], ['anim_5fplaying_71',['anim_playing',['../classtram_1_1_animation_component.html#a8cfc453f4f1a8e3d39ef58fd0ceb71e4',1,'tram::AnimationComponent']]], ['anim_5fspeed_72',['anim_speed',['../classtram_1_1_sprite_component.html#a94e1866fddd8e554075eb49016f924bf',1,'tram::SpriteComponent']]], ['animation_73',['animation',['../classtram_1_1_decoration.html#a9ed3fb5e8c71f3491fe57c843e0325e1',1,'tram::Decoration::animation()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state.html#af2f443e6c0e1f4195e88666fd512708d',1,'tram::Ext::Kitchensink::AnimState::animation()']]], ['animation_74',['Animation',['../classtram_1_1_render_1_1_animation.html#aeb52730a357d678921b547c4eae16405',1,'tram::Render::Animation::Animation()'],['../classtram_1_1_render_1_1_animation.html',1,'tram::Render::Animation']]], ['animation_2ecpp_75',['animation.cpp',['../render_2animation_8cpp.html',1,'(Global Namespace)'],['../components_2animation_8cpp.html',1,'(Global Namespace)']]], ['animation_2eh_76',['animation.h',['../render_2animation_8h.html',1,'(Global Namespace)'],['../components_2animation_8h.html',1,'(Global Namespace)']]], ['animation_5flist_77',['animation_list',['../namespacetram_1_1_render.html#a7dd412c7626de34a2b2e4fd4d750dd4a',1,'tram::Render']]], ['animation_5fpool_78',['animation_pool',['../namespacetram_1_1_render.html#a4241295a3e7f28b70cfc9a4fa831903d',1,'tram::Render']]], ['animationcomponent_79',['animationcomponent',['../classtram_1_1_decoration.html#a24081b56bcc532c09441c1f4a71d0e12',1,'tram::Decoration']]], ['animationcomponent_80',['AnimationComponent',['../classtram_1_1_animation_component.html#af773091315f64f349184c6f9055dc5ad',1,'tram::AnimationComponent::AnimationComponent()'],['../classtram_1_1_animation_component.html',1,'tram::AnimationComponent']]], ['animationplaybackinfo_81',['AnimationPlaybackInfo',['../structtram_1_1_animation_component_1_1_animation_playback_info.html',1,'tram::AnimationComponent']]], ['animationstatecomponent_82',['AnimationStateComponent',['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_state_component.html',1,'tram::Ext::Kitchensink']]], ['animationtable_83',['AnimationTable',['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_state_component.html#a6aa4df8a5973b3bb06701c7e430ba123',1,'tram::Ext::Kitchensink::AnimationStateComponent::AnimationTable()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_table.html#a1cb9d318dcab93ae71a377f195ceb3bc',1,'tram::Ext::Kitchensink::AnimationTable::AnimationTable()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_table.html',1,'tram::Ext::Kitchensink::AnimationTable']]], ['animationtable_2ecpp_84',['animationtable.cpp',['../animationtable_8cpp.html',1,'']]], ['animationtable_2eh_85',['animationtable.h',['../animationtable_8h.html',1,'']]], ['animstate_86',['AnimState',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state.html',1,'tram::Ext::Kitchensink']]], ['animstatespace_87',['AnimStateSpace',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_space.html',1,'tram::Ext::Kitchensink']]], ['animstatetransitiondefault_88',['AnimStateTransitionDefault',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_default.html',1,'tram::Ext::Kitchensink']]], ['animstatetransitionfrom_89',['AnimStateTransitionFrom',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_from.html',1,'tram::Ext::Kitchensink']]], ['animstatetransitioninto_90',['AnimStateTransitionInto',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_into.html',1,'tram::Ext::Kitchensink']]], ['answer_91',['answer',['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_topic.html#a9210fb3d74cbf84d790863396b671a4b',1,'tram::Ext::Kitchensink::DialogTopic']]], ['api_2eh_92',['api.h',['../render_2api_8h.html',1,'(Global Namespace)'],['../platform_2api_8h.html',1,'(Global Namespace)'],['../physics_2api_8h.html',1,'(Global Namespace)'],['../audio_2api_8h.html',1,'(Global Namespace)']]], ['application_93',['APPLICATION',['../namespacetram_1_1_settings.html#a0861538a476a71457a80e698e710eef1a5e8d3d37d3d54ed5793dfc159630d0db',1,'tram::Settings']]], ['applydynamics_94',['ApplyDynamics',['../classtram_1_1_raycast_controller_component.html#a63b3bdb3d6d211eb1ce407a900b612a7',1,'tram::RaycastControllerComponent::ApplyDynamics()'],['../classtram_1_1_f_p_s_controller_component.html#a396834cd7a573800365e68a4aa49122b',1,'tram::FPSControllerComponent::ApplyDynamics()']]], ['applyeffect_95',['ApplyEffect',['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container.html#aed0fd0323979e353abd8c61dcb9384a8',1,'tram::Ext::Kitchensink::AttributeContainer']]], ['approx_5fvram_5fusage_96',['approx_vram_usage',['../classtram_1_1_render_1_1_material.html#a10304337c81204bdcf59fb2ae03e9428',1,'tram::Render::Material::approx_vram_usage()'],['../classtram_1_1_render_1_1_model.html#a69f11a78aa41ff398b91ffde31efb2b7',1,'tram::Render::Model::approx_vram_usage()']]], ['archive_97',['ARCHIVE',['../namespacetram.html#a529c8d3e049a7dcc4425fbe040e4c531a71f01f32e90440fd6039511dde69e995',1,'tram']]], ['armature_98',['armature',['../classtram_1_1_render_1_1_model.html#a7da36392dce1f4256a6ce67620501430',1,'tram::Render::Model']]], ['armature_5fbone_5fcount_99',['armature_bone_count',['../classtram_1_1_animation_component.html#a548e0d34bf1bb6b24a534b759b83ccd8',1,'tram::AnimationComponent']]], ['armature_5fbone_5fparents_100',['armature_bone_parents',['../classtram_1_1_animation_component.html#a61a263a46b3af801e91b0306f65bd5b8',1,'tram::AnimationComponent']]], ['armature_5fbones_101',['armature_bones',['../classtram_1_1_animation_component.html#a86100bcacc626be6040580f705248072',1,'tram::AnimationComponent']]], ['arrival_5fdirection_102',['arrival_direction',['../structtram_1_1_audio_1_1_spatial_1_1_path_tracing_result.html#aab4ef60ba584a8d10ab12d5fe2674b32',1,'tram::Audio::Spatial::PathTracingResult']]], ['assert_103',['ASSERT',['../test_8h.html#ad014a2a071494bbabc34b48eeebadbf3',1,'test.h']]], ['assertdependency_104',['AssertDependency',['../namespacetram_1_1_system.html#ae343978bd8ac9ddbc48dbffa5aea2f49',1,'tram::System']]], ['asserttype_105',['AssertType',['../classtram_1_1_value.html#a3e8a6869e6364b63c6bc73e7ffb49916',1,'tram::Value']]], ['async_106',['ASYNC',['../namespacetram_1_1_system.html#a02b5e7a5340ef5ca42a650ca4d8ade65a8f56dd168853c665aca65b28e1b0fa4f',1,'tram::System']]], ['async_2ecpp_107',['async.cpp',['../async_8cpp.html',1,'']]], ['async_2eh_108',['async.h',['../async_8h.html',1,'']]], ['attribute_109',['attribute',['../structtram_1_1_ext_1_1_kitchensink_1_1_effect.html#a22bd1353836cf3bde3fed6137a801617',1,'tram::Ext::Kitchensink::Effect::attribute()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_initial_attribute.html#a588b56210da3d6628ceb90e106684a08',1,'tram::Ext::Kitchensink::InitialAttribute::attribute()']]], ['attribute_110',['Attribute',['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute.html',1,'tram::Ext::Kitchensink']]], ['attribute_5fcontainer_5fcount_111',['ATTRIBUTE_CONTAINER_COUNT',['../attributes_8cpp.html#a84627f70639f661d824e70f33c21021d',1,'attributes.cpp']]], ['attribute_5fcount_112',['attribute_count',['../structtram_1_1_render_1_1_vertex_definition.html#a40ed4f54909928aa59fd3de4f3c7f451',1,'tram::Render::VertexDefinition']]], ['attribute_5finfo_5fcount_113',['ATTRIBUTE_INFO_COUNT',['../attributes_8cpp.html#a9b8616fa5aa349f32551242738af8269',1,'attributes.cpp']]], ['attributecontainer_114',['AttributeContainer',['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container.html',1,'tram::Ext::Kitchensink']]], ['attributeinfo_115',['AttributeInfo',['../classtram_1_1_ext_1_1_kitchensink_1_1_attribute_info.html',1,'tram::Ext::Kitchensink']]], ['attributes_116',['attributes',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a7ae02dc32f976f0cfe1b54c09f65d84b',1,'tram::Ext::Kitchensink::ItemClass::attributes()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container.html#a683cbb898b97a9d6e6d9ee800ea965a6',1,'tram::Ext::Kitchensink::AttributeContainer::attributes()'],['../structtram_1_1_render_1_1_vertex_definition.html#a02fb890eb9d7bf33a5613bc6868ea9ae',1,'tram::Render::VertexDefinition::attributes()']]], ['attributes_2ecpp_117',['attributes.cpp',['../attributes_8cpp.html',1,'']]], ['attributes_2eh_118',['attributes.h',['../attributes_8h.html',1,'']]], ['audio_119',['audio',['../classtram_1_1_sound.html#a934d998958463921ee96f604e7934a1b',1,'tram::Sound']]], ['audio_120',['AUDIO',['../namespacetram_1_1_system.html#a02b5e7a5340ef5ca42a650ca4d8ade65aa677dba760329e1c8a19f1b9564fb0ee',1,'tram::System']]], ['audio_2ecpp_121',['audio.cpp',['../components_2audio_8cpp.html',1,'(Global Namespace)'],['../audio_2audio_8cpp.html',1,'(Global Namespace)']]], ['audio_2eh_122',['audio.h',['../components_2audio_8h.html',1,'(Global Namespace)'],['../audio_2audio_8h.html',1,'(Global Namespace)']]], ['audiobuffer_123',['AudioBuffer',['../structtram_1_1_audio_1_1_spatial_1_1_audio_buffer.html',1,'tram::Audio::Spatial']]], ['audiobuffer_5ft_124',['audiobuffer_t',['../structtram_1_1_audio_1_1audiobuffer__t.html',1,'tram::Audio']]], ['audiobuffers_125',['audiobuffers',['../namespacetram_1_1_audio_1_1_spatial.html#a0220900672de1f44004ac3fbea75384e',1,'tram::Audio::Spatial']]], ['audiocomponent_126',['AudioComponent',['../classtram_1_1_audio_component.html#aff631c814eda2b4e8b615ebe9a4217f5',1,'tram::AudioComponent::AudioComponent()'],['../classtram_1_1_audio_component.html',1,'tram::AudioComponent']]], ['audiorender_127',['AudioRender',['../structtram_1_1_audio_1_1_spatial_1_1_audio_render.html',1,'tram::Audio::Spatial']]], ['audiorenders_128',['audiorenders',['../namespacetram_1_1_audio_1_1_spatial.html#a1707c3651d829fc8dccf07265d990501',1,'tram::Audio::Spatial']]], ['audiosamplerate_129',['AudioSampleRate',['../namespacetram_1_1_audio_1_1_spatial.html#ade3f518b6f4fc8663aa6cc3143481f92',1,'tram::Audio::Spatial']]], ['audiosource_130',['AudioSource',['../structtram_1_1_audio_1_1_spatial_1_1_audio_source.html',1,'tram::Audio::Spatial']]], ['audiosource_5ft_131',['audiosource_t',['../structtram_1_1_audio_1_1audiosource__t.html',1,'tram::Audio']]], ['audiosourceflags_132',['AudioSourceFlags',['../namespacetram_1_1_audio_1_1_spatial.html#a29e8b2fda522dd1d5e8f4ec648217351',1,'tram::Audio::Spatial']]], ['audiosources_133',['audiosources',['../namespacetram_1_1_audio_1_1_spatial.html#a09a8fe4a1def9a9851bd0eb34988036f',1,'tram::Audio::Spatial']]], ['automatic_5floading_134',['AUTOMATIC_LOADING',['../classtram_1_1_world_cell.html#a90b9ed6e3265fb6b3e569669117fd514a5bcce5b3c7f26f25c0a5e06cb8658c7f',1,'tram::WorldCell']]], ['available_5fsize_135',['available_size',['../classtram_1_1_stack_pool.html#a72cd4ac04fad51347b627f2d894b75d8',1,'tram::StackPool']]], ['average_5fcount_136',['average_count',['../structtram_1_1_stats_1_1_system_stat.html#acf35b66321a2c018ca20c7a53c0c2ca3',1,'tram::Stats::SystemStat']]], ['awaken_137',['Awaken',['../classtram_1_1_physics_component.html#aa05aa42d0ba5486d18a5c6951c2dcf7a',1,'tram::PhysicsComponent']]], ['awakenrigidbody_138',['AwakenRigidbody',['../namespacetram_1_1_physics_1_1_a_p_i.html#a165f12c0aa8cf05d459e9ceb71c5a629',1,'tram::Physics::API']]], ['finishresources_139',['FinishResources',['../classtram_1_1_entity_component.html#a8f3324eae61258fe34ef99f2b994ac02',1,'tram::EntityComponent']]] ]; ================================================ FILE: docs/cppapi/search/all_10.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/all_10.js ================================================ var searchData= [ ['p0_0',['p0',['../structtram_1_1_physics_1_1_collision_triangle.html#af79a85c745ddbf74ab90304395826b6c',1,'tram::Physics::CollisionTriangle']]], ['p1_1',['p1',['../structtram_1_1_physics_1_1_collision_triangle.html#a3bfb775d8ba71bf1452495ac6aa73a1d',1,'tram::Physics::CollisionTriangle']]], ['p2_2',['p2',['../structtram_1_1_physics_1_1_collision_triangle.html#a2fd02ff41418623b5dcc960512a0c342',1,'tram::Physics::CollisionTriangle']]], ['package_5fstack_3',['package_stack',['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html#aecf643b955c103675f0ae066f443dd16',1,'tram::Ext::Kitchensink::AIAgent']]], ['packvertexbuffer_4',['PackVertexBuffer',['../namespacetram_1_1_render_1_1_a_p_i.html#ac9c8b1770aeeff3ea24c789c104551ae',1,'tram::Render::API']]], ['packvertices_5',['PackVertices',['../namespacetram_1_1_render_1_1_a_p_i.html#a3c1162ce946a884d6018685ec1157c51',1,'tram::Render::API']]], ['padding_6',['padding',['../classtram_1_1_hashmap.html#a2eb7e0ca3a72367b3944121636bd74cc',1,'tram::Hashmap::padding()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_index_array.html#a2de31335d50d09b3228d92b4129dad6f',1,'tram::Render::API::SWIndexArray::padding()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_light.html#a77e3100b3b9e5768fd058115e131d221',1,'tram::Render::API::GLLight::padding()'],['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_matrices.html#a0caf5926243d94dddc492057c25363cf',1,'tram::Render::API::ShaderUniformMatrices::padding()'],['../structtram_1_1_render_1_1_keyframe.html#a1cd5b08f51a3ae82605f1aeb22ef52c1',1,'tram::Render::Keyframe::padding()'],['../structtram_1_1_async_1_1_resource_request.html#a5dcec7fba31fe955a878c7689bebcb5e',1,'tram::Async::ResourceRequest::padding()']]], ['padding2_7',['padding2',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_light.html#aaf9eba5b5c1706e06920f3ed97880984',1,'tram::Render::API::GLLight']]], ['panning_8',['panning',['../structtram_1_1_audio_1_1_spatial_1_1_path_rendering_info.html#a78cb51ec6fb70e03023f07e2e73a4151',1,'tram::Audio::Spatial::PathRenderingInfo']]], ['panning_5fdelay_9',['panning_delay',['../structtram_1_1_audio_1_1_spatial_1_1_path_rendering_info.html#a25cccaf4eef89dd7b557744b85e0c4a5',1,'tram::Audio::Spatial::PathRenderingInfo']]], ['param1_10',['param1',['../structtram_1_1_audio_1_1_filter_parameters.html#ae3e26b76955919a2680af843d03241b2',1,'tram::Audio::FilterParameters']]], ['param2_11',['param2',['../structtram_1_1_audio_1_1_filter_parameters.html#a9850c062a0de94c19491e7f2cf65ce1e',1,'tram::Audio::FilterParameters']]], ['parameter_5fstring_12',['parameter_string',['../classtram_1_1_ext_1_1_menu_1_1_message_send.html#ac7674c2ea9dadef8e94fb4f9407271e3',1,'tram::Ext::Menu::MessageSend::parameter_string()'],['../classtram_1_1_ext_1_1_menu_1_1_event_emit.html#a123fd9dd1b5828d6e09669773c1c80d1',1,'tram::Ext::Menu::EventEmit::parameter_string()']]], ['parameter_5ftype_13',['parameter_type',['../classtram_1_1_ext_1_1_menu_1_1_event_emit.html#ac74668908219798e42ccb5c73b8b60fd',1,'tram::Ext::Menu::EventEmit::parameter_type()'],['../classtram_1_1_ext_1_1_menu_1_1_message_send.html#ac3eb62488f5accdcc4f60ef0f9d93fb0',1,'tram::Ext::Menu::MessageSend::parameter_type()']]], ['parameters_14',['parameters',['../structtram_1_1_audio_1_1_sound_graph_1_1_node.html#a602e0ab95181fce7095038d2c7e8cc60',1,'tram::Audio::SoundGraph::Node::parameters()'],['../namespacetram_1_1_ext_1_1_scripting_1_1_lua.html#a63ffedf8d40f57cc6c53d9f617b1fcc5',1,'tram::Ext::Scripting::Lua::parameters()']]], ['parent_15',['parent',['../structtram_1_1_octree_1_1_node.html#a3824ba3c3a244a92562817cf43c102df',1,'tram::Octree::Node::parent()'],['../structtram_1_1_a_a_b_b_tree_1_1_node.html#a70fe0c482870a3a4a60f17eaacc2be33',1,'tram::AABBTree::Node::parent()'],['../structtram_1_1_render_1_1_bone.html#aa35e3897afb1d7c407ce7b85251742e3',1,'tram::Render::Bone::parent()'],['../classtram_1_1_resource_proxy.html#ad0386a7f5c0158ead0174c2cdd25c2b6',1,'tram::ResourceProxy::parent()'],['../classtram_1_1_entity_component.html#aea0aa7626e36e31f1621ba81925cb56b',1,'tram::EntityComponent::parent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#a121a1bf7605e24565f69bb965c2ad731',1,'tram::Ext::Kitchensink::Inventory::parent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#ad9c047256c4c960006fcada8a7d03ede',1,'tram::Ext::Kitchensink::Button::parent()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_space.html#a5ff4f114e9722b8a4bcda22212789b9a',1,'tram::Ext::Kitchensink::AnimStateSpace::parent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_package.html#a9647c7b82c89b70b1f28c6b6fa7f6349',1,'tram::Ext::Kitchensink::AIPackage::parent()']]], ['parse_16',['Parse',['../namespacetram_1_1_settings.html#a2194732b7c9aa48722e59cd5e5ceb456',1,'tram::Settings']]], ['parseformat_17',['ParseFormat',['../namespacetram_1_1_render_1_1_a_p_i.html#a7e05816b2379825525b322e68af15424',1,'tram::Render::API']]], ['particle_18',['Particle',['../structtram_1_1_particle_component_1_1_particle.html',1,'tram::ParticleComponent']]], ['particle_2ecpp_19',['particle.cpp',['../particle_8cpp.html',1,'']]], ['particle_2eh_20',['particle.h',['../particle_8h.html',1,'']]], ['particle_5fmax_5fage_21',['particle_max_age',['../classtram_1_1_particle_component.html#ac12c10889354895c145ddfbd759ed2c2',1,'tram::ParticleComponent']]], ['particlecomponent_22',['ParticleComponent',['../classtram_1_1_particle_component.html#a53990e83ab645269af4e740d72d6914b',1,'tram::ParticleComponent::ParticleComponent()'],['../classtram_1_1_particle_component.html',1,'tram::ParticleComponent']]], ['particles_23',['particles',['../classtram_1_1_particle_component.html#af671bbcfbdb0e2560ac63704b17e98f4',1,'tram::ParticleComponent']]], ['path_24',['path',['../classtram_1_1_path_follower.html#afef4ecc46377cb395a63dbd67bc16c9c',1,'tram::PathFollower::path()'],['../classtram_1_1_file.html#a3d25cbe667ab658dbaea6655a6321782',1,'tram::File::path()'],['../structtram_1_1_file_source.html#a5addd94ec280b82396cff93ec0ece536',1,'tram::FileSource::path()']]], ['path_25',['Path',['../classtram_1_1_path.html#a9a0e7ff4de05db6ced2dd6ef0e1a2d75',1,'tram::Path::Path()'],['../classtram_1_1_path.html',1,'tram::Path']]], ['path_2ecpp_26',['path.cpp',['../path_8cpp.html',1,'']]], ['path_2eh_27',['path.h',['../path_8h.html',1,'']]], ['path_5fcurve_28',['PATH_CURVE',['../namespacetram.html#a8285e82eb5cb49da9f6a5a02dd0560a2a2fb053d09179ae21da8b7f17c2f6861b',1,'tram']]], ['path_5fleft_29',['PATH_LEFT',['../namespacetram.html#a8285e82eb5cb49da9f6a5a02dd0560a2a468f0ebb474e7d12003ea27e5db8b617',1,'tram']]], ['path_5flimit_30',['PATH_LIMIT',['../namespacetram.html#a4c8eb191637ec58035b98bc8a3dc7955',1,'tram']]], ['path_5flinear_31',['PATH_LINEAR',['../namespacetram.html#a8285e82eb5cb49da9f6a5a02dd0560a2ac758fff69db3c028ba8f599d47bac3fd',1,'tram']]], ['path_5fright_32',['PATH_RIGHT',['../namespacetram.html#a8285e82eb5cb49da9f6a5a02dd0560a2a0589ae9b6078dd155c3ead82cb3eed0f',1,'tram']]], ['path_5fstraight_33',['PATH_STRAIGHT',['../namespacetram.html#a8285e82eb5cb49da9f6a5a02dd0560a2a13db939fe9562c84c1f83073156459fc',1,'tram']]], ['pathaction_34',['PathAction',['../classtram_1_1_physics_1_1_path_action.html#a22e23ed7cfd09968f5bc0663befd1d9c',1,'tram::Physics::PathAction::PathAction()'],['../classtram_1_1_physics_1_1_path_action.html',1,'tram::Physics::PathAction']]], ['pathedgeinfo_35',['PathEdgeInfo',['../structtram_1_1_path_edge_info.html',1,'tram']]], ['pathexplorationresult_36',['PathExplorationResult',['../structtram_1_1_audio_1_1_spatial_1_1_path_exploration_result.html',1,'tram::Audio::Spatial']]], ['pathfollower_37',['PathFollower',['../classtram_1_1_path_follower.html#a86f5375b9ad4e9ee064df8782c357b49',1,'tram::PathFollower::PathFollower()'],['../classtram_1_1_path.html#a7c5bae106d82b3014171a0347a70d2a8',1,'tram::Path::PathFollower()'],['../classtram_1_1_path_follower.html',1,'tram::PathFollower']]], ['pathfromaudiosource_38',['PathFromAudioSource',['../structtram_1_1_audio_1_1_spatial_1_1_path_from_audio_source.html',1,'tram::Audio::Spatial']]], ['pathrenderinginfo_39',['PathRenderingInfo',['../structtram_1_1_audio_1_1_spatial_1_1_path_rendering_info.html',1,'tram::Audio::Spatial']]], ['paths_40',['paths',['../structtram_1_1_audio_1_1_spatial_1_1_audio_render.html#a2aa48cc3aaf2682ae9d82c25d9efa6b8',1,'tram::Audio::Spatial::AudioRender::paths()'],['../structtram_1_1_audio_1_1_spatial_1_1_audio_source.html#a2307e10b58bfd5e4226f76a8fd562630',1,'tram::Audio::Spatial::AudioSource::paths()']]], ['paths_5ffor_5flistener_41',['PATHS_FOR_LISTENER',['../namespacetram_1_1_audio_1_1_spatial.html#abe41831e149db1775fb1a738b693a2e4',1,'tram::Audio::Spatial']]], ['paths_5ffor_5frendering_42',['PATHS_FOR_RENDERING',['../namespacetram_1_1_audio_1_1_spatial.html#a84078cbb908ef623f2337cdce8a777b9',1,'tram::Audio::Spatial']]], ['paths_5ffor_5fsource_43',['PATHS_FOR_SOURCE',['../namespacetram_1_1_audio_1_1_spatial.html#ab6d4c2f9690d64f882c492e5e9075eae',1,'tram::Audio::Spatial']]], ['pathtracer_2ecpp_44',['pathtracer.cpp',['../pathtracer_8cpp.html',1,'']]], ['pathtracer_2eh_45',['pathtracer.h',['../pathtracer_8h.html',1,'']]], ['pathtracingresult_46',['PathTracingResult',['../structtram_1_1_audio_1_1_spatial_1_1_path_tracing_result.html',1,'tram::Audio::Spatial']]], ['pathtype_47',['PathType',['../namespacetram.html#a8285e82eb5cb49da9f6a5a02dd0560a2',1,'tram']]], ['pause_48',['Pause',['../classtram_1_1_sprite_component.html#a83f36a6e77225ccb7fd60f0f70f78972',1,'tram::SpriteComponent']]], ['pause_49',['pause',['../structtram_1_1_animation_component_1_1_animation_playback_info.html#a7ac66228a0680599c017d9dad5bbcc6c',1,'tram::AnimationComponent::AnimationPlaybackInfo::pause()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a86d016cc6943098f57b0b48ae9b39b8e',1,'tram::Ext::Kitchensink::Button::pause()']]], ['pause_50',['Pause',['../classtram_1_1_animation_component.html#a752f8c4d9982c2a406e80597a85158cd',1,'tram::AnimationComponent::Pause()'],['../classtram_1_1_audio_component.html#ad8d20d0b929c8ac8666d80dac82ce0df',1,'tram::AudioComponent::Pause()']]], ['pause_5flast_51',['pause_last',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state.html#aa4d3e08ffedcce66e94535cf569b183f',1,'tram::Ext::Kitchensink::AnimState']]], ['pause_5fline_52',['PAUSE_LINE',['../classtram_1_1_file.html#ab340a7edca3c73f54d764cd17b362477a3498da60161cfd421524d4b5a5262d1f',1,'tram::File']]], ['pause_5fnext_53',['pause_next',['../classtram_1_1_file.html#a5b6f66dee66294cd7095cb4bc4a3a265',1,'tram::File']]], ['pause_5fon_5flast_5fframe_54',['pause_on_last_frame',['../structtram_1_1_animation_component_1_1_animation_playback_info.html#a5cd0230ac57aa0d044f40a4f159e07da',1,'tram::AnimationComponent::AnimationPlaybackInfo']]], ['pauseaudiosource_55',['PauseAudioSource',['../namespacetram_1_1_audio_1_1_a_p_i.html#ab58ddd72a8b81823756b0d141e015590',1,'tram::Audio::API']]], ['perform_56',['Perform',['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_action.html#a773e06de51af612cd67bc422a37cfda4',1,'tram::Ext::Kitchensink::DialogAction']]], ['perspectivedivision_57',['PerspectiveDivision',['../namespacetram_1_1_render_1_1_a_p_i.html#a437320a39ddec40f81acdc942eeb9940',1,'tram::Render::API::PerspectiveDivision(vec4 &p0, vec4 &p1)'],['../namespacetram_1_1_render_1_1_a_p_i.html#a835ced33fd7a5c9239310fdcffd701f8',1,'tram::Render::API::PerspectiveDivision(vec4 &p)']]], ['physics_58',['PHYSICS',['../namespacetram_1_1_system.html#a02b5e7a5340ef5ca42a650ca4d8ade65afacc4f271a47ef1f95656f32030c2622',1,'tram::System']]], ['physics_2ecpp_59',['physics.cpp',['../physics_2physics_8cpp.html',1,'(Global Namespace)'],['../components_2physics_8cpp.html',1,'(Global Namespace)']]], ['physics_2eh_60',['physics.h',['../components_2physics_8h.html',1,'(Global Namespace)'],['../physics_2physics_8h.html',1,'(Global Namespace)']]], ['physics_5fbody_61',['physics_body',['../classtram_1_1_player.html#a70d0096e740c70b9d4b2a4d1f567166b',1,'tram::Player']]], ['physics_5fgravity_62',['PHYSICS_GRAVITY',['../namespacetram.html#a62a53097647f52336381e7470fb2abe5',1,'tram']]], ['physics_5fground_5fplane_63',['PHYSICS_GROUND_PLANE',['../namespacetram.html#aee70318c6bcb6ab23a4c627b40ffc247',1,'tram']]], ['physicscomponent_64',['physicscomponent',['../classtram_1_1_crate.html#a81bf1b61c023f0923ded303fabf343f2',1,'tram::Crate::physicscomponent()'],['../classtram_1_1_decoration.html#a583857b0ebd4e260c7ef634ff93d7bdf',1,'tram::Decoration::physicscomponent()'],['../classtram_1_1_static_world_object.html#afcf86a58f1164ab9bef21c7f01e42def',1,'tram::StaticWorldObject::physicscomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a4dd2f1f76ca0846de1455e4ad4d1cf8d',1,'tram::Ext::Kitchensink::Button::physicscomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_breakable.html#ac912d2b557ffcb5d2883ea43646b5b17',1,'tram::Ext::Kitchensink::Breakable::physicscomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_train.html#ad72e7fe2faf8817a399bf94ada70c562',1,'tram::Ext::Kitchensink::Train::physicscomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_pickup.html#a881a5ba8049060a6ac23f30404c0d8e2',1,'tram::Ext::Kitchensink::Pickup::physicscomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_text.html#a24ac74bcb44bef87d855544b8040e83d',1,'tram::Ext::Kitchensink::DebugText::physicscomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_shape.html#a4b6d2a2cc1fa252481c5418e50d26c74',1,'tram::Ext::Kitchensink::DebugShape::physicscomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_autosave.html#a641f20fdc9e0a3f0887be88f0198580c',1,'tram::Ext::Kitchensink::TriggerAutosave::physicscomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_hurt.html#a1fcf1fd373b0735b96983688eaa52961',1,'tram::Ext::Kitchensink::TriggerHurt::physicscomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_once.html#a1134b7b7a4a65ce7902004bb4dd75a50',1,'tram::Ext::Kitchensink::TriggerOnce::physicscomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_multiple.html#add39da54898ba26a33986bd99872abaa',1,'tram::Ext::Kitchensink::TriggerMultiple::physicscomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_push.html#aee5d9dfe5e798739bb70eb16d2a9948e',1,'tram::Ext::Kitchensink::TriggerPush::physicscomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_remove.html#a127f6410a4f40845b89d2b917154d09d',1,'tram::Ext::Kitchensink::TriggerRemove::physicscomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_teleport.html#aa1eabe6c002caa539efb57b79345520f',1,'tram::Ext::Kitchensink::TriggerTeleport::physicscomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_player_movement.html#a5bf7a2365438d0aff49a42ba6809de17',1,'tram::Ext::Kitchensink::TriggerPlayerMovement::physicscomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_water.html#a1d604782c7dd64c7d26a515b35e9defb',1,'tram::Ext::Kitchensink::Water::physicscomponent()']]], ['physicscomponent_65',['PhysicsComponent',['../classtram_1_1_physics_component.html#ae945e9f6b3d40e2fd3764a6f9ccd8f3d',1,'tram::PhysicsComponent::PhysicsComponent()'],['../classtram_1_1_physics_component.html',1,'tram::PhysicsComponent']]], ['physicsdebugdraw_66',['PhysicsDebugDraw',['../classtram_1_1_physics_1_1_a_p_i_1_1_physics_debug_draw.html',1,'tram::Physics::API']]], ['pickup_67',['Pickup',['../classtram_1_1_ext_1_1_kitchensink_1_1_pickup.html#aa14c29d40df5968c605f63bdd03cd3d0',1,'tram::Ext::Kitchensink::Pickup::Pickup()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_pickup.html',1,'tram::Ext::Kitchensink::Pickup']]], ['ping_68',['PING',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afda88ef805d301227661029ccb4e90e262e',1,'tram::Message']]], ['pitch_69',['pitch',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a44a70884e100d0b6a198b3ec588a68b6',1,'tram::Ext::Camera::FirstPersonCamera']]], ['pixels_70',['pixels',['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_texture.html#a95971f9092686bb8428c980f655d7334',1,'tram::Render::API::SWTexture']]], ['planes_71',['planes',['../classtram_1_1_transition.html#a15309d1c272d449fb0bda318deb76dd7',1,'tram::Transition']]], ['platform_72',['PLATFORM',['../namespacetram_1_1_system.html#a02b5e7a5340ef5ca42a650ca4d8ade65a922fa0106a11539d618969d792a6e1b9',1,'tram::System']]], ['platform_2eh_73',['platform.h',['../platform_8h.html',1,'']]], ['play_74',['Play',['../classtram_1_1_animation_component.html#ae64dafa0a2ea87a033e0fa4bd342f5ad',1,'tram::AnimationComponent::Play()'],['../classtram_1_1_audio_component.html#a46dea84e302ded4f9d1cb4a19a15a4fd',1,'tram::AudioComponent::Play()'],['../classtram_1_1_sprite_component.html#af3bb6eacd3c918f5c227840bcea5f4e1',1,'tram::SpriteComponent::Play()']]], ['play_5fon_5fstart_75',['play_on_start',['../classtram_1_1_audio_component.html#afa9685950e016f31ca90c71839cd7852',1,'tram::AudioComponent']]], ['playaudiosource_76',['PlayAudioSource',['../namespacetram_1_1_audio_1_1_a_p_i.html#a909017b3d28ed5fe14bac0b516770bb5',1,'tram::Audio::API']]], ['player_77',['player',['../main_8cpp.html#a96781128d3743da3d17e0fdd91afba7b',1,'main.cpp']]], ['player_78',['Player',['../classtram_1_1_player.html#a54576337a20fd6e5f753a1e9716900b7',1,'tram::Player::Player()'],['../classtram_1_1_player.html#a96db3f6f72ef25251dced6d52448fbe7',1,'tram::Player::Player(name_t)'],['../classtram_1_1_player.html',1,'tram::Player']]], ['player_2ecpp_79',['player.cpp',['../components_2player_8cpp.html',1,'(Global Namespace)'],['../entities_2player_8cpp.html',1,'(Global Namespace)']]], ['player_2eh_80',['player.h',['../entities_2player_8h.html',1,'(Global Namespace)'],['../components_2player_8h.html',1,'(Global Namespace)']]], ['playercomponent_81',['PlayerComponent',['../classtram_1_1_player_component.html#ae5e66423537fa62170701cbf69c2882f',1,'tram::PlayerComponent::PlayerComponent()'],['../classtram_1_1_player_component.html',1,'tram::PlayerComponent']]], ['playsound_82',['PlaySound',['../classtram_1_1_ext_1_1_kitchensink_1_1_sound_table.html#ad31116a4938a4f571022d9c33eeae03d',1,'tram::Ext::Kitchensink::SoundTable::PlaySound(SoundAction type, vec3 position, float volume)'],['../classtram_1_1_ext_1_1_kitchensink_1_1_sound_table.html#a7a6df6a1a197749301a22f3026617a86',1,'tram::Ext::Kitchensink::SoundTable::PlaySound(SoundAction type)'],['../entities_8cpp.html#a4366553d515649fefe284775ebaed16e',1,'PlaySound(): entities.cpp']]], ['plomp_83',['plomp',['../classtram_1_1_player.html#a02a0f79e73da31e380ab604773461b4b',1,'tram::Player']]], ['point_84',['point',['../structtram_1_1_octree_1_1_nearest_search.html#adf2e15ec26f3738dd03c6712de61df5e',1,'tram::Octree::NearestSearch::point()'],['../structtram_1_1_audio_1_1_spatial_1_1_path_tracing_result.html#a56f99496bd44366e4bca18e6ca954952',1,'tram::Audio::Spatial::PathTracingResult::point()'],['../structtram_1_1_audio_1_1_spatial_1_1_path_from_audio_source.html#a5f809d617ba9af7d80992d569868ccb7',1,'tram::Audio::Spatial::PathFromAudioSource::point()'],['../structtram_1_1_physics_1_1_a_p_i_1_1_object_collision.html#a092ad31904c1e2c66386ee35b85f151a',1,'tram::Physics::API::ObjectCollision::point()'],['../structtram_1_1_physics_1_1_collision.html#a6d9ec6fb6b22c4d6c7426a6ac99962ce',1,'tram::Physics::Collision::point()'],['../structtram_1_1_octree_1_1_node.html#a6547353b4a05dc60327f462ff73e0757',1,'tram::Octree::Node::point()']]], ['point1_85',['point1',['../structtram_1_1_render_1_1_a_a_b_b_triangle.html#a6706198c449462db4acad33bfccc4a73',1,'tram::Render::AABBTriangle']]], ['point2_86',['point2',['../structtram_1_1_render_1_1_a_a_b_b_triangle.html#a912b569097565c02f6614349d39ba473',1,'tram::Render::AABBTriangle']]], ['point2d_87',['Point2D',['../structtram_1_1_render_1_1_a_p_i_1_1_point2_d.html',1,'tram::Render::API']]], ['point3_88',['point3',['../structtram_1_1_render_1_1_a_a_b_b_triangle.html#abda9898750755ee69a75ae3251a92148',1,'tram::Render::AABBTriangle']]], ['pointoutsidebottomplane_89',['PointOutsideBottomPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#a376abbcab88b34e51794e7e0ece4ec58',1,'tram::Render::API']]], ['pointoutsidefarplane_90',['PointOutsideFarPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#a5b8d2a62665b8a1f7fe6546ff6f09065',1,'tram::Render::API']]], ['pointoutsideleftplane_91',['PointOutsideLeftPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#aaae15e056fdabbbbdcb09cfe005b4242',1,'tram::Render::API']]], ['pointoutsidenearplane_92',['PointOutsideNearPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#abb0e4d781ba0d59d10503ec6aa352e46',1,'tram::Render::API']]], ['pointoutsiderightplane_93',['PointOutsideRightPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#a3911859adbfe0d04739e68361004226b',1,'tram::Render::API']]], ['pointoutsidetopplane_94',['PointOutsideTopPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#a70fdb5f6dca386dfe2f3fef83cb1a6db',1,'tram::Render::API']]], ['points_95',['points',['../classtram_1_1_transition.html#a43d8d05a4e4a8e59ebd166d65a6f193b',1,'tram::Transition::points()'],['../structtram_1_1_render_1_1_a_p_i_1_1_clip_triangle.html#a937617e87e580c7b4c0c4e0a3a07316f',1,'tram::Render::API::ClipTriangle::points()']]], ['pointvisible_96',['PointVisible',['../namespacetram_1_1_render_1_1_a_p_i.html#a305347e27d6c34316bee82ec791699aa',1,'tram::Render::API']]], ['poll_97',['Poll',['../classtram_1_1_trigger_component.html#ae6374eae5d6d91477a7abadc14a19b20',1,'tram::TriggerComponent']]], ['pollkeyboardaxis_98',['PollKeyboardAxis',['../namespacetram_1_1_u_i.html#a3667dadfea3dcd6dff80d60611fb7cdc',1,'tram::UI']]], ['pollkeyboardaxisdelta_99',['PollKeyboardAxisDelta',['../namespacetram_1_1_u_i.html#a5cb12417deb961741e7269cbe3398dd1',1,'tram::UI']]], ['pollkeyboardkey_100',['PollKeyboardKey',['../namespacetram_1_1_u_i.html#a7a1f37f6e233c727f219f06aefc745ef',1,'tram::UI']]], ['pool_101',['pool',['../classtram_1_1_pool_proxy.html#a9ccc00cffda0d7145eafd0200ce096e5',1,'tram::PoolProxy::pool("Path pool", RESOURCE_LIMIT_PATH)'],['../classtram_1_1_pool_proxy.html#a723d321955d74db634af0e4ab271b83c',1,'tram::PoolProxy::pool("worldcelltransition pool", WORLDCELL_TRANSITION_LIMIT)'],['../classtram_1_1_pool_proxy.html#ab9460e6c8698b9c98ce783f162632258',1,'tram::PoolProxy::pool("Worldcell pool", WORLDCELL_LIMIT)'],['../classtram_1_1_pool_proxy.html#a8c9901a9a4d72574c76864140ba646f6',1,'tram::PoolProxy::pool("GLDrawListEntry pool", 1000)'],['../classtram_1_1_pool_proxy.html#a120a8282dfe1622b41d36f70ff239fc8',1,'tram::PoolProxy::pool("GLLight pool", COMPONENT_LIMIT_LIGHT, {tram::Render::API::GLLight{}})'],['../classtram_1_1_pool_proxy.html#aa4966ced53d457eaf4047aada15c0ddd',1,'tram::PoolProxy::pool("GLMaterial pool", RESOURCE_LIMIT_MATERIAL)']]], ['pool_102',['Pool',['../classtram_1_1_animation_component.html#a49d9babe42ba7f509bcff47a95b2c110',1,'tram::AnimationComponent::Pool()'],['../classtram_1_1_f_p_s_controller_component.html#a49d9babe42ba7f509bcff47a95b2c110',1,'tram::FPSControllerComponent::Pool()'],['../classtram_1_1_raycast_controller_component.html#a49d9babe42ba7f509bcff47a95b2c110',1,'tram::RaycastControllerComponent::Pool()'],['../classtram_1_1_pool.html#a57e13a9a51ca187af45f052b3d70b17f',1,'tram::Pool::Pool(const char *name, uint64_t initialSize)'],['../classtram_1_1_pool.html#a0650ba8f22b8180249c5a9050256f979',1,'tram::Pool::Pool(const char *name, uint64_t initialSize, std::initializer_list< T > list)']]], ['pool_103',['pool',['../classtram_1_1_pool_proxy.html#ad6e9619a7833dc2b54ee8cbe1d27ef51',1,'tram::PoolProxy::pool()'],['../classtram_1_1_pool_proxy.html#aedcb7d9eceb53a8a1495741d098658c1',1,'tram::PoolProxy::pool("Sound Resource pool", RESOURCE_LIMIT_SOUND)'],['../classtram_1_1_pool_proxy.html#ab37438f9460b4f23ed37fa5c751e5d92',1,'tram::PoolProxy::pool("AnimationComponent pool", COMPONENT_LIMIT_ANIMATION)'],['../classtram_1_1_pool_proxy.html#a132113c7cf9888dcf791d1bdae86a4ce',1,'tram::PoolProxy::pool("AudioComponent pool", COMPONENT_LIMIT_AUDIO)'],['../classtram_1_1_pool_proxy.html#a15a62f52369603f61fda4a0c3aab3453',1,'tram::PoolProxy::pool("FPSControllerComponent pool", COMPONENT_LIMIT_CONTROLLER)'],['../classtram_1_1_pool_proxy.html#a8c8f705895edd3f1ef5416a39dcfb289',1,'tram::PoolProxy::pool("RaycastControllerComponent pool", COMPONENT_LIMIT_CONTROLLER)'],['../classtram_1_1_pool_proxy.html#a87680b64deb218fbd3c991fe36e45449',1,'tram::PoolProxy::pool("DecalComponent pool", COMPONENT_LIMIT_DECAL)'],['../classtram_1_1_pool_proxy.html#afd8b1fb3154ba576098996c425b8008b',1,'tram::PoolProxy::pool("LightComponent pool", COMPONENT_LIMIT_LIGHT)'],['../classtram_1_1_pool_proxy.html#ab583e428b551012df0fe5d86e0787c23',1,'tram::PoolProxy::pool("ParticleComponent pool", COMPONENT_LIMIT_PARTICLE)'],['../classtram_1_1_pool_proxy.html#af892e1cc1c5b55d1de83b23a7f6acd7a',1,'tram::PoolProxy::pool("PhysicsComponent pool", COMPONENT_LIMIT_PHYSICS)'],['../classtram_1_1_pool_proxy.html#adec8cf47dae0c2c7dbcac50b62c4b4ce',1,'tram::PoolProxy::pool("PlayerComponent pool", COMPONENT_LIMIT_PLAYER)'],['../classtram_1_1_pool_proxy.html#a17815902e003552d6c1843f655b50606',1,'tram::PoolProxy::pool("RenderComponent pool", COMPONENT_LIMIT_RENDER)'],['../classtram_1_1_pool_proxy.html#a549d35aabd0230f175b2f78681c55408',1,'tram::PoolProxy::pool("SpriteComponent pool", COMPONENT_LIMIT_SPRITE)'],['../classtram_1_1_pool_proxy.html#a605e61fa1ef7ff0fa4ca51f4a351bb09',1,'tram::PoolProxy::pool("TriggerComponent pool", COMPONENT_LIMIT_TRIGGER)'],['../classtram_1_1_pool_proxy.html#af9f3b37524524346fdc58b79b3b0a148',1,'tram::PoolProxy::pool("ai_agent_list pool", 100)'],['../classtram_1_1_pool_proxy.html#a6b9f8209e7c3b8eea4675f06acb65b0c',1,'tram::PoolProxy::pool("AnimationTable pool", EXT_KITCHENSINK_ANIMATIONTABLE_LIMIT)'],['../classtram_1_1_pool_proxy.html#a12f234e6bf9f9403ee4efb999a2a2a09',1,'tram::PoolProxy::pool("Ext::Kitchensink::AttributeContainer Pool", ATTRIBUTE_CONTAINER_COUNT)'],['../classtram_1_1_pool_proxy.html#abb5ee08a098040647676affc6c7f23de',1,'tram::PoolProxy::pool("Ext::Kitchensink::Faction Pool", FACTION_COUNT)'],['../classtram_1_1_pool_proxy.html#ae60e28486ed4752fdb1c22baa4ea81b2',1,'tram::PoolProxy::pool("Ext::Kitchensink::Character Pool", CHARACTER_COUNT)'],['../classtram_1_1_pool_proxy.html#ab758ff8edc0858676caf8051a77d8408',1,'tram::PoolProxy::pool("Ext::Kitchensink::CharacterClass Pool", CLASS_COUNT)'],['../classtram_1_1_pool_proxy.html#ae158206e9edb5f68852a8b43972f3991',1,'tram::PoolProxy::pool("SoundTable pool", EXT_KITCHENSINK_SOUNDTABLE_LIMIT)'],['../classtram_1_1_pool_proxy.html#af8e4dd501fdaba304cc75fab9d0122f9',1,'tram::PoolProxy::pool("navmesh pool", 100)']]], ['pool_104',['Pool',['../classtram_1_1_pool.html',1,'tram']]], ['pool_2eh_105',['pool.h',['../pool_8h.html',1,'']]], ['poolname_106',['poolName',['../classtram_1_1_pool.html#a7c93c6c74e11a18855e33e69a87d481f',1,'tram::Pool']]], ['poolproxy_107',['PoolProxy',['../classtram_1_1_pool_proxy.html',1,'tram']]], ['poolptr_108',['PoolPtr',['../classtram_1_1_pool_ptr.html#adffa17bd2f9d7fd2242ed255a7832324',1,'tram::PoolPtr::PoolPtr()'],['../classtram_1_1_pool_ptr.html',1,'tram::PoolPtr< T >']]], ['poolsize_109',['poolSize',['../classtram_1_1_pool.html#a4208869bc738c75f8c11b7b65b526564',1,'tram::Pool']]], ['poopproxy_110',['PoopProxy',['../namespacetram.html#a72cce72d3494bf0e132892a3735ac229',1,'tram']]], ['pop_111',['pop',['../classtram_1_1_stack.html#a8c5bca889246272bd6fbc0789e7a2841',1,'tram::Stack::pop()'],['../classtram_1_1_queue.html#aa2211c6ebb109da351fbc179fa8ea03b',1,'tram::Queue::pop()']]], ['pop_112',['Pop',['../classtram_1_1_ext_1_1_menu_1_1_menu.html#a06f962abc8aeb9e7782cbd637d56f0fd',1,'tram::Ext::Menu::Menu']]], ['popframe_113',['PopFrame',['../namespacetram_1_1_g_u_i.html#a76a6d727998bc4ad99cd754ca2cf54a0',1,'tram::GUI']]], ['popframekeepcursor_114',['PopFrameKeepCursor',['../namespacetram_1_1_g_u_i.html#a53e9477d97918587d29a2b44a378dcbf',1,'tram::GUI']]], ['pos_115',['pos',['../structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html#a121754a2c7e31faab70e3d3f64e11521',1,'tram::Render::API::StaticVertex::pos()'],['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#a4d99341a991cf7b2a8b4f298e4e96afd',1,'tram::Render::API::DynamicVertex::pos()'],['../structtram_1_1_render_1_1_a_p_i_1_1_color_vertex.html#a90cad82d292fb32eb4149d3cd5992b91',1,'tram::Render::API::ColorVertex::pos()']]], ['pos_5fx_116',['pos_x',['../structtram_1_1_render_1_1_a_p_i_1_1_line_vertex.html#a07bdacffe0baf8fd7b6f179b525105ac',1,'tram::Render::API::LineVertex::pos_x()'],['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#a8712dd86d3119a4fc6ddbf92c235067f',1,'tram::Render::API::DynamicVertex::pos_x()'],['../structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html#ab7fad3a06c395b99809f8957e73e4cc2',1,'tram::Render::API::StaticVertex::pos_x()']]], ['pos_5fy_117',['pos_y',['../structtram_1_1_render_1_1_a_p_i_1_1_line_vertex.html#ae0cc6aaaecc942735cf306818d019a67',1,'tram::Render::API::LineVertex::pos_y()'],['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#ac2f4357b94953eee0475ad9f61889816',1,'tram::Render::API::DynamicVertex::pos_y()'],['../structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html#a4aec6b58286bda99e48c539f5b273ca6',1,'tram::Render::API::StaticVertex::pos_y()']]], ['pos_5fz_118',['pos_z',['../structtram_1_1_render_1_1_a_p_i_1_1_line_vertex.html#a4e8c58a3a5bee43731ebe1d31ffcb1bf',1,'tram::Render::API::LineVertex::pos_z()'],['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#a748a5f6c0a267fb6b51f1180e78c504a',1,'tram::Render::API::DynamicVertex::pos_z()'],['../structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html#a483db60e761add751c3b23e81bedcb93',1,'tram::Render::API::StaticVertex::pos_z()']]], ['pose_119',['pose',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#ad431ba61a7c7f2673948abacbf85aa0d',1,'tram::Render::API::GLDrawListEntry::pose()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html#a81ae414cf1df35f7eae3e7301df25377',1,'tram::Render::API::SWDrawListEntry::pose()'],['../classtram_1_1_render_component.html#affc6cba67cad84483c2dd69ba952a7f3',1,'tram::RenderComponent::pose()'],['../classtram_1_1_animation_component.html#a8ca6edc357f6d61b8750acdec9d4de77',1,'tram::AnimationComponent::pose()'],['../structtram_1_1_render_1_1_pose.html#a80a33d6441ac42610e7cae4e31c8b1bb',1,'tram::Render::Pose::pose()'],['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#a53e75e90c2e6720867d49dbfe3d379a2',1,'tram::Render::API::D3DDrawListEntry::pose()']]], ['pose_120',['Pose',['../structtram_1_1_render_1_1_pose.html',1,'tram::Render']]], ['position_121',['position',['../structtram_1_1_shared_entity_data.html#af1759c89e46d55eb848b84f67cc0c3f1',1,'tram::SharedEntityData::position()'],['../structtram_1_1_node.html#a189f24e56e385fcf1e9ff4b4b40c7b7a',1,'tram::Node::position()'],['../structtram_1_1_navmesh_node.html#aae10ee4d482ec0937f6246279734e0f1',1,'tram::NavmeshNode::position()'],['../structtram_1_1_physics_1_1_a_p_i_1_1_collision_shape_transform.html#af65c9e8ab913b92a3b19454ab7747105',1,'tram::Physics::API::CollisionShapeTransform::position()'],['../classtram_1_1_physics_1_1_a_p_i_1_1_callback_motion_state.html#a2374bce1a3ea318d53f293d90231d431',1,'tram::Physics::API::CallbackMotionState::position()'],['../structtram_1_1_render_1_1_a_p_i_1_1_f_v_f_helper.html#a81dd8b7602640a63b63ef086aab65c0f',1,'tram::Render::API::FVFHelper::position()'],['../structtram_1_1_render_1_1_light_graph_1_1_node.html#ac676ead25ef8bcd8846345f39d733a12',1,'tram::Render::LightGraph::Node::position()'],['../structtram_1_1_render_1_1_light_tree_1_1_light.html#ae48221ebf0f2f7822ab6afdf24178acc',1,'tram::Render::LightTree::Light::position()'],['../structtram_1_1_render_1_1_a_p_i_1_1_f_f_p_helper.html#ac01392b410606fc8a96f548c3054414f',1,'tram::Render::API::FFPHelper::position()'],['../classtram_1_1_ext_1_1_camera_1_1_camera.html#a071bb8522454174c7048ed6f3dcda4df',1,'tram::Ext::Camera::Camera::position()'],['../structtram_1_1_audio_1_1_spatial_1_1_audio_source.html#a45a1264a5f87e8e4cbc767b3511adfc6',1,'tram::Audio::Spatial::AudioSource::position()'],['../structtram_1_1_audio_1_1_sound_graph_1_1_node.html#a0a633c6d644b35fad08de5f63dbb9e83',1,'tram::Audio::SoundGraph::Node::position()'],['../structtram_1_1_render_1_1_sprite_point.html#a3103f0ed581c4c8e8a43bc89ed981450',1,'tram::Render::SpritePoint::position()']]], ['positionrotationscaletomatrix_122',['PositionRotationScaleToMatrix',['../namespacetram.html#a9d150b4b732715b4989afe480bb3ef98',1,'tram']]], ['positionrotationtomatrix_123',['PositionRotationToMatrix',['../namespacetram.html#ab488668dddf5085ed2f05fef803dba33',1,'tram']]], ['post_124',['Post',['../structtram_1_1_event.html#a2964632c82d23cc106fb57530210c774',1,'tram::Event']]], ['poster_125',['poster',['../structtram_1_1_event.html#a92418dc8036094cf309758831c14deed',1,'tram::Event']]], ['prev_126',['prev',['../structtram_1_1_navmesh_node.html#a56530b45077f4b6e6bf49e254b4a5ad5',1,'tram::NavmeshNode::prev()'],['../classtram_1_1_path_follower.html#ace8a71f492daf52acb64b89fd21bc025',1,'tram::PathFollower::prev()']]], ['print_127',['Print',['../structtram_1_1_a_a_b_b_tree_1_1_node.html#aef471e23e1400e7c4f466576552a5146',1,'tram::AABBTree::Node']]], ['probe_2ecpp_128',['probe.cpp',['../probe_8cpp.html',1,'']]], ['probe_2eh_129',['probe.h',['../probe_8h.html',1,'']]], ['process_130',['Process',['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_package.html#aefe04093df4daf73c85b271413d19868',1,'tram::Ext::Kitchensink::AIPackage']]], ['progress_131',['progress',['../classtram_1_1_path_follower.html#adc605aaf1c4740b70ebe8a16be03af60',1,'tram::PathFollower']]], ['progress_132',['PROGRESS',['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6a7cc11bd95a71a01ae61ef329e2a149f4',1,'tram::Signal']]], ['progress_133',['progress',['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a90673adbb238aace522e9ab8be1218d6',1,'tram::Ext::Kitchensink::Button']]], ['project_134',['Project',['../classtram_1_1_path_follower.html#ada75b25602de0ccf13cc6a3c46885132',1,'tram::PathFollower::Project()'],['../namespacetram_1_1_render.html#a67eb4708222066d5a516c5eff9a14fa7',1,'tram::Render::Project(const vec3 &point, vec3 &result, layer_t layer)']]], ['projectinverse_135',['ProjectInverse',['../namespacetram_1_1_render.html#afe4a18573155f61186484e55955c6dac',1,'tram::Render']]], ['projection_136',['projection',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_matrices.html#a392cd9d354cb1ca50b9cbde197f687a2',1,'tram::Render::API::ShaderUniformMatrices::projection()'],['../namespacetram_1_1_render.html#a4b4ea9d6c17adfd0a9343d5908b5dcdc',1,'tram::Render::projection()']]], ['projection_5fmatrix_137',['projection_matrix',['../structtram_1_1_render_1_1_a_p_i_1_1_layer_parameters.html#a90f643942f1e49d84aaf87c8d9edc1fc',1,'tram::Render::API::LayerParameters']]], ['projectline_138',['ProjectLine',['../namespacetram.html#afb93166d174dd8e63b4ea02836446b11',1,'tram']]], ['prompt_139',['prompt',['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_topic.html#a078f196f4d258ea6dda98a69263ceae8',1,'tram::Ext::Kitchensink::DialogTopic']]], ['property_140',['Property',['../structtram_1_1_settings_1_1_property.html#ab24720ae7aee4b0f1018012b553096a3',1,'tram::Settings::Property::Property(std::initializer_list< value_t > values)'],['../structtram_1_1_settings_1_1_property.html#a9ac260b077617f945253284397723dad',1,'tram::Settings::Property::Property(const T &value)']]], ['property_141',['property',['../classtram_1_1_render_1_1_material.html#a758d1a53191fd27bec22aa269b1edd21',1,'tram::Render::Material']]], ['property_142',['Property',['../structtram_1_1_settings_1_1_property.html',1,'tram::Settings']]], ['property_5fcomputer_143',['PROPERTY_COMPUTER',['../namespacetram_1_1_render.html#aa55781f294a5a76e9cba54376f45a43fada33452c93d29a0fc18f1d8f09bc44b8',1,'tram::Render']]], ['property_5fconcrete_144',['PROPERTY_CONCRETE',['../namespacetram_1_1_render.html#aa55781f294a5a76e9cba54376f45a43fae2b1b6ada982d1c1c61a36e1c2f31126',1,'tram::Render']]], ['property_5fflesh_145',['PROPERTY_FLESH',['../namespacetram_1_1_render.html#aa55781f294a5a76e9cba54376f45a43faf0c2cbb57c6cfcc43710333ef255aea4',1,'tram::Render']]], ['property_5fglass_146',['PROPERTY_GLASS',['../namespacetram_1_1_render.html#aa55781f294a5a76e9cba54376f45a43fa9fe641e38a1a52f765bd88a14bed407a',1,'tram::Render']]], ['property_5fgrass_147',['PROPERTY_GRASS',['../namespacetram_1_1_render.html#aa55781f294a5a76e9cba54376f45a43fa63132978d6ea9a5eed11e5ee7117410f',1,'tram::Render']]], ['property_5fgrate_148',['PROPERTY_GRATE',['../namespacetram_1_1_render.html#aa55781f294a5a76e9cba54376f45a43fa06905ec293dc3675d21274cf114d4d65',1,'tram::Render']]], ['property_5fmetal_149',['PROPERTY_METAL',['../namespacetram_1_1_render.html#aa55781f294a5a76e9cba54376f45a43faf0f9e334f61c84e46541a7cc6a568b96',1,'tram::Render']]], ['property_5fmetal_5fthin_150',['PROPERTY_METAL_THIN',['../namespacetram_1_1_render.html#aa55781f294a5a76e9cba54376f45a43fa00e42e8d7d6988b4a9300714b8bbc7a7',1,'tram::Render']]], ['property_5fslime_151',['PROPERTY_SLIME',['../namespacetram_1_1_render.html#aa55781f294a5a76e9cba54376f45a43fa3df30b149393b17bb9b6a1b647012119',1,'tram::Render']]], ['property_5fsnow_152',['PROPERTY_SNOW',['../namespacetram_1_1_render.html#aa55781f294a5a76e9cba54376f45a43fa14a30486b4b7c0ec56c9474618d94e86',1,'tram::Render']]], ['property_5ftile_153',['PROPERTY_TILE',['../namespacetram_1_1_render.html#aa55781f294a5a76e9cba54376f45a43facd803e1bd20fa9d04a0e97284feeb2b9',1,'tram::Render']]], ['property_5fwood_154',['PROPERTY_WOOD',['../namespacetram_1_1_render.html#aa55781f294a5a76e9cba54376f45a43fab3fd02f2941169418a236b4de11c1c0b',1,'tram::Render']]], ['ptr_155',['ptr',['../classtram_1_1_pool_ptr.html#aba35892d9d52fdbeb76f74fdbe9ed80f',1,'tram::PoolPtr::ptr()'],['../structtram_1_1_pool_1_1iterator.html#a808c822ba3bb0ba92a806f668c934fa7',1,'tram::Pool::iterator::ptr()'],['../classtram_1_1_component.html#a76e7065ebab1cd17d4cabe184ff78dfe',1,'tram::Component::ptr()']]], ['push_156',['Push',['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html#aa8590467f7d1239c7e12e07a63ee0012',1,'tram::Ext::Kitchensink::AIAgent::Push()'],['../classtram_1_1_physics_component.html#af5569e651b77b56a659f4b3a988f04b1',1,'tram::PhysicsComponent::Push(vec3 direction, vec3 local_position)'],['../classtram_1_1_physics_component.html#a056cae53c34b56b074f364251ca545e4',1,'tram::PhysicsComponent::Push(vec3 direction)'],['../classtram_1_1_raycast_controller_component.html#a8780bc5e7bb5938ba85b7a2ae950dff4',1,'tram::RaycastControllerComponent::Push()'],['../classtram_1_1_f_p_s_controller_component.html#a178afe3b43f00f0a289a19d2fe323d9c',1,'tram::FPSControllerComponent::Push()'],['../classtram_1_1_controller_component.html#a85d0688b2477652353b92a7662fdc36a',1,'tram::ControllerComponent::Push()']]], ['push_157',['push',['../classtram_1_1_stack.html#af88a0407075f961d55e94de1f4ee9588',1,'tram::Stack::push()'],['../classtram_1_1_queue.html#a85bfdb354ca6e34201d6554bc541bfe1',1,'tram::Queue::push()']]], ['push_158',['Push',['../classtram_1_1_ext_1_1_menu_1_1_menu.html#afaf4c154f0f256b684b9ca9a7d7f057f',1,'tram::Ext::Menu::Menu']]], ['pushframe_159',['PushFrame',['../namespacetram_1_1_g_u_i.html#abbe4fc88597f2b5171c105e74bcf8301',1,'tram::GUI']]], ['pushframerelative_160',['PushFrameRelative',['../namespacetram_1_1_g_u_i.html#a4d59dd004d2a1ae7aed485247d674dc6',1,'tram::GUI']]], ['pushframerelativekeepcursor_161',['PushFrameRelativeKeepCursor',['../namespacetram_1_1_g_u_i.html#a1cde426a98964d4f4780ff78b9663b18',1,'tram::GUI']]], ['pushoverride_162',['PushOverride',['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html#a89181f116b73c484e5b57dbd2152a7c2',1,'tram::Ext::Kitchensink::AIAgent']]], ['pushrigidbody_163',['PushRigidbody',['../namespacetram_1_1_physics_1_1_a_p_i.html#a7b6a5a76cb66998131a863a64989aa39',1,'tram::Physics::API::PushRigidbody(rigidbody_t rigidbody, vec3 direction)'],['../namespacetram_1_1_physics_1_1_a_p_i.html#a04c616c8fd1cabe3561bc91f4a084392',1,'tram::Physics::API::PushRigidbody(rigidbody_t rigidbody, vec3 direction, vec3 local)']]] ]; ================================================ FILE: docs/cppapi/search/all_11.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/all_11.js ================================================ var searchData= [ ['quat_0',['quat',['../namespacetram.html#a6ba8befa39d714232ba6f05ade798893',1,'tram']]], ['quat_5fptr_1',['quat_ptr',['../classtram_1_1_value_ptr.html#a87abd9913a910f4dd2b5c20a987347d3',1,'tram::ValuePtr']]], ['quat_5fvalue_2',['quat_value',['../classtram_1_1_value.html#a66085936ba2cabe6e5a327253c6c9aa7',1,'tram::Value']]], ['quatlookat_3',['QuatLookAt',['../namespacetram.html#a9a9788a262342a3b6cf9b08117faedcf',1,'tram']]], ['queryresponse_4',['QueryResponse',['../structtram_1_1_render_1_1_a_a_b_b_1_1_query_response.html',1,'tram::Render::AABB']]], ['quest_5',['quest',['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_condition.html#acd0cc2ffea91837a2e51e9a7919ee198',1,'tram::Ext::Kitchensink::DialogCondition::quest()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_action.html#ab7830ce3388bcc68886658f6ebac4401',1,'tram::Ext::Kitchensink::DialogAction::quest()']]], ['quest_6',['Quest',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest.html#a683519bebd8b57ca04103a79858ca885',1,'tram::Ext::Kitchensink::Quest::Quest()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest.html',1,'tram::Ext::Kitchensink::Quest']]], ['quest_2ecpp_7',['quest.cpp',['../quest_8cpp.html',1,'']]], ['quest_2eh_8',['quest.h',['../quest_8h.html',1,'']]], ['quest1_9',['quest1',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a278406d8202cc8c9ec06e6f7970d58ed',1,'tram::Ext::Kitchensink::QuestVariable']]], ['quest2_10',['quest2',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#af8ab60abb939875937f7a0ef894c45e1',1,'tram::Ext::Kitchensink::QuestVariable']]], ['quest_5ft_11',['quest_t',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1b',1,'tram::Ext::Kitchensink']]], ['quest_5ftgr_5fincrement_12',['QUEST_TGR_INCREMENT',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1ba17b72845d665cf133b85f8f9f6a266a7',1,'tram::Ext::Kitchensink']]], ['quest_5ftgr_5fset_5fobjective_13',['QUEST_TGR_SET_OBJECTIVE',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1ba5be55952382cfcbdeff33c9848c751a6',1,'tram::Ext::Kitchensink']]], ['quest_5ftgr_5fset_5fvariable_14',['QUEST_TGR_SET_VARIABLE',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1bab3184e4606cdb4af3d7c99634d68643c',1,'tram::Ext::Kitchensink']]], ['quest_5ftgr_5fshow_5fmessage_15',['QUEST_TGR_SHOW_MESSAGE',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1baed1f0c08592a54fabf9d38da32861069',1,'tram::Ext::Kitchensink']]], ['quest_5fvar_5fcondition_5fand_16',['QUEST_VAR_CONDITION_AND',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1ba186f563d6876469d9a15d27843a5b53e',1,'tram::Ext::Kitchensink']]], ['quest_5fvar_5fcondition_5fnot_17',['QUEST_VAR_CONDITION_NOT',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1ba5222f372b4fc5839970f0e83836d8963',1,'tram::Ext::Kitchensink']]], ['quest_5fvar_5fcondition_5for_18',['QUEST_VAR_CONDITION_OR',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1ba08d52f2b0b110ace1985eebf58c530b7',1,'tram::Ext::Kitchensink']]], ['quest_5fvar_5fcondition_5fscript_19',['QUEST_VAR_CONDITION_SCRIPT',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1ba6c8b793de899085ef9a4e667f0494aa7',1,'tram::Ext::Kitchensink']]], ['quest_5fvar_5fentity_5fitem_5fcount_20',['QUEST_VAR_ENTITY_ITEM_COUNT',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1bac81c3a50657104e20115d48fcce012f1',1,'tram::Ext::Kitchensink']]], ['quest_5fvar_5finvalid_21',['QUEST_VAR_INVALID',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1ba30cbed799aadafbe321339018783ea86',1,'tram::Ext::Kitchensink']]], ['quest_5fvar_5fobjective_22',['QUEST_VAR_OBJECTIVE',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1ba9f6abb709c8d8e059f95ba9effdeaea6',1,'tram::Ext::Kitchensink']]], ['quest_5fvar_5fvalue_23',['QUEST_VAR_VALUE',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1ba96ef0600cecd28d4995fa0d7752cbdcc',1,'tram::Ext::Kitchensink']]], ['quest_5fvar_5fvalue_5fgreater_24',['QUEST_VAR_VALUE_GREATER',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1bad093ff9e327a290e2386fdb6f9e640dd',1,'tram::Ext::Kitchensink']]], ['quest_5fvar_5fvalue_5fgreater_5for_5fequal_25',['QUEST_VAR_VALUE_GREATER_OR_EQUAL',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1ba0d54b933eb12ed94fc946b685e46d7a2',1,'tram::Ext::Kitchensink']]], ['quest_5fvar_5fvalue_5fis_26',['QUEST_VAR_VALUE_IS',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1ba7f25c526cc3e1223bc2d6697cfb7cf71',1,'tram::Ext::Kitchensink']]], ['quest_5fvar_5fvalue_5fis_5fnot_27',['QUEST_VAR_VALUE_IS_NOT',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1bad3dea61a0fac22587a0c9e7dbb202e0b',1,'tram::Ext::Kitchensink']]], ['quest_5fvar_5fvalue_5fless_28',['QUEST_VAR_VALUE_LESS',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1bae7561b1caf29ca996a233daa45274a97',1,'tram::Ext::Kitchensink']]], ['quest_5fvar_5fvalue_5fless_5for_5fequal_29',['QUEST_VAR_VALUE_LESS_OR_EQUAL',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1bace549e0bce35a03eacba99bc23a86816',1,'tram::Ext::Kitchensink']]], ['questentity_30',['QuestEntity',['../classtram_1_1_ext_1_1_kitchensink_1_1_quest_entity.html#a96675f3d8b439116d9fff376f212efbb',1,'tram::Ext::Kitchensink::QuestEntity::QuestEntity()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_quest_entity.html',1,'tram::Ext::Kitchensink::QuestEntity']]], ['questlist_31',['QuestList',['../classtram_1_1_ext_1_1_kitchensink_1_1_quest_list.html',1,'tram::Ext::Kitchensink']]], ['questtrigger_32',['QuestTrigger',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_trigger.html',1,'tram::Ext::Kitchensink']]], ['questvariable_33',['QuestVariable',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a59fa09daf71db92b76d7543e45dabefd',1,'tram::Ext::Kitchensink::QuestVariable::QuestVariable()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#aa398510013c7875c7ac6d3d1b0b3fdd2',1,'tram::Ext::Kitchensink::QuestVariable::QuestVariable(const QuestVariable &)'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html',1,'tram::Ext::Kitchensink::QuestVariable']]], ['queue_34',['Queue',['../classtram_1_1_queue.html#a710adca95612b66427f7f6cc918492ef',1,'tram::Queue::Queue(Queue &&)=delete'],['../classtram_1_1_queue.html#ad797d5d45ded6116bc9bbd23e8848e9d',1,'tram::Queue::Queue(const char *name, size_t count)'],['../classtram_1_1_queue.html#a9a53c8973a5cb86f76b039ef0f3d0ee6',1,'tram::Queue::Queue(const Queue &)=delete'],['../classtram_1_1_queue.html#adbc2d690665b980a97b26eb2cf0fb4e4',1,'tram::Queue::Queue()=delete'],['../classtram_1_1_queue.html',1,'tram::Queue< T >']]], ['queue_2eh_35',['queue.h',['../queue_8h.html',1,'']]] ]; ================================================ FILE: docs/cppapi/search/all_12.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/all_12.js ================================================ var searchData= [ ['radiobutton_0',['RadioButton',['../namespacetram_1_1_g_u_i.html#a1488c8699f98eaaefd9dab7d1e220604',1,'tram::GUI']]], ['radius_1',['radius',['../structtram_1_1_physics_1_1_collision_shape.html#a3aea9804127806597d0b72a0bb643c3d',1,'tram::Physics::CollisionShape']]], ['radius_5fx_2',['radius_x',['../structtram_1_1_physics_1_1_collision_shape.html#a11613d734d20966282442b4b2c1614fc',1,'tram::Physics::CollisionShape']]], ['radius_5fz_3',['radius_z',['../structtram_1_1_physics_1_1_collision_shape.html#a9ae3a56320a72a76d882ba2e84b699a7',1,'tram::Physics::CollisionShape']]], ['rank_4',['rank',['../structtram_1_1_ext_1_1_kitchensink_1_1_faction_rank.html#a571ec9260b660c807637a3a4645a171d',1,'tram::Ext::Kitchensink::FactionRank::rank()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_base_faction_rank.html#af762dbee29581d65a7afbb771c9638ae',1,'tram::Ext::Kitchensink::BaseFactionRank::rank()']]], ['ranks_5',['ranks',['../classtram_1_1_ext_1_1_kitchensink_1_1_faction.html#a04d109da4bb8712655c604c986d6df2d',1,'tram::Ext::Kitchensink::Faction']]], ['rasterizetriangle_6',['RasterizeTriangle',['../namespacetram_1_1_render_1_1_a_p_i.html#a437bf04f6a5b4400240d03c0349935bf',1,'tram::Render::API']]], ['rasterizetrianglelightmapped_7',['RasterizeTriangleLightmapped',['../namespacetram_1_1_render_1_1_a_p_i.html#a5fbc57a2c1adf8740ab7744fd8dbacfd',1,'tram::Render::API']]], ['rasterizetriangleshadedtextured_8',['RasterizeTriangleShadedTextured',['../namespacetram_1_1_render_1_1_a_p_i.html#a43eeada3415ce497712a8e7c5d341a7a',1,'tram::Render::API']]], ['rawsetting_9',['RawSetting',['../structtram_1_1_settings_1_1_raw_setting.html',1,'tram::Settings']]], ['raycast_10',['Raycast',['../namespacetram_1_1_physics.html#aa3616a0153cf20031eff7b3aba43e7f9',1,'tram::Physics::Raycast()'],['../namespacetram_1_1_physics_1_1_a_p_i.html#ab6725b1082075301a1d07f52948788fa',1,'tram::Physics::API::Raycast()']]], ['raycastcontrollercomponent_11',['RaycastControllerComponent',['../classtram_1_1_raycast_controller_component.html#a5b2d1abffafb92a86d9e48ead1eec5d9',1,'tram::RaycastControllerComponent::RaycastControllerComponent()'],['../classtram_1_1_raycast_controller_component.html',1,'tram::RaycastControllerComponent']]], ['raytriangleintersection_12',['RayTriangleIntersection',['../namespacetram.html#a709b43407c76d65a5e0e9567d55fb212',1,'tram']]], ['read_13',['READ',['../classtram_1_1_file.html#ab340a7edca3c73f54d764cd17b362477a5e3d5e80c10e5d25d26a648c1f26e02d',1,'tram::File']]], ['read_5ffloat32_14',['read_float32',['../classtram_1_1_file_reader_parser.html#af8a5e8c5ed7909608b3c75a2c75f6e7d',1,'tram::FileReaderParser::read_float32()'],['../classtram_1_1_text_reader_parser.html#af178bb228cb9309753ca06926faf7142',1,'tram::TextReaderParser::read_float32()'],['../classtram_1_1_file.html#a49b122601c017e1964144c23cbe290fd',1,'tram::File::read_float32()']]], ['read_5ffloat64_15',['read_float64',['../classtram_1_1_text_reader_parser.html#aadab4b54c1468cb34f498da0403d919d',1,'tram::TextReaderParser::read_float64()'],['../classtram_1_1_file.html#ac11afdd957e7a113e25c101eea4ac241',1,'tram::File::read_float64()'],['../classtram_1_1_file_reader_parser.html#a5946a704dfee7567c528c50d02bcf74a',1,'tram::FileReaderParser::read_float64()=0']]], ['read_5fint16_16',['read_int16',['../classtram_1_1_file_reader_parser.html#a6589a27772f1c001af13d50a0111be72',1,'tram::FileReaderParser::read_int16()'],['../classtram_1_1_text_reader_parser.html#a99abb84482da2a05ca31f6099c5e9fad',1,'tram::TextReaderParser::read_int16()'],['../classtram_1_1_file.html#a5d7ea9f1ad7cb867061aea6a4ed1b89d',1,'tram::File::read_int16()']]], ['read_5fint32_17',['read_int32',['../classtram_1_1_file_reader_parser.html#a9f21c9d82fd1ddbe3170d41e9c4454f8',1,'tram::FileReaderParser::read_int32()'],['../classtram_1_1_text_reader_parser.html#a7b891300d2c4c863fed16dccba4566cd',1,'tram::TextReaderParser::read_int32()'],['../classtram_1_1_file.html#a225dfcebd4c490f19388cfb7aca8e0a6',1,'tram::File::read_int32()']]], ['read_5fint64_18',['read_int64',['../classtram_1_1_file_reader_parser.html#ad20fc7bfba19d51c9ade3b5a4d07f0e0',1,'tram::FileReaderParser::read_int64()'],['../classtram_1_1_text_reader_parser.html#ab4d063176ad5ddb665980b05f4162316',1,'tram::TextReaderParser::read_int64()'],['../classtram_1_1_file.html#af10fb5448d6e77230bdc268d328c0857',1,'tram::File::read_int64()']]], ['read_5fint8_19',['read_int8',['../classtram_1_1_text_reader_parser.html#ac2727568c3a10f2e173ec4179f3e354e',1,'tram::TextReaderParser::read_int8()'],['../classtram_1_1_file.html#a039568453770acbc144c9fdce0f3fc68',1,'tram::File::read_int8()'],['../classtram_1_1_file_reader_parser.html#ada15ac5d1a3d84549898524e2b1faaec',1,'tram::FileReaderParser::read_int8()']]], ['read_5fline_20',['read_line',['../classtram_1_1_file.html#aaa1c1eca4e5feb35b576da5533408b17',1,'tram::File::read_line()'],['../classtram_1_1_text_reader_parser.html#a9bcbf9cc72a0631af8222c378dc767b8',1,'tram::TextReaderParser::read_line()'],['../classtram_1_1_file_reader_parser.html#a8d6d0fc588569a550368355fb99c5724',1,'tram::FileReaderParser::read_line()']]], ['read_5fname_21',['read_name',['../classtram_1_1_file.html#aca554d85c9430ee8d39ddb16c41e72e3',1,'tram::File::read_name()'],['../classtram_1_1_text_reader_parser.html#a467ff7b32859f86869bf2134e3b5f7b9',1,'tram::TextReaderParser::read_name()'],['../classtram_1_1_file_reader_parser.html#acc84d2050fc037feebe7e97681baf986',1,'tram::FileReaderParser::read_name()']]], ['read_5fstring_22',['read_string',['../classtram_1_1_file.html#a384df5b223c9e0d2535a622e282a356e',1,'tram::File::read_string()'],['../classtram_1_1_text_reader_parser.html#a51d680fae0e08d2b468d114192d36516',1,'tram::TextReaderParser::read_string()'],['../classtram_1_1_file_reader_parser.html#a0bac8a5eb06119787111423ce520c005',1,'tram::FileReaderParser::read_string()=0']]], ['read_5ftoken_23',['read_token',['../classtram_1_1_file_reader_parser.html#a398699124bf0cba7680196ca16425bf3',1,'tram::FileReaderParser::read_token()'],['../classtram_1_1_text_reader_parser.html#ad02dd97ca99e1b028a5c662a7c46f1d3',1,'tram::TextReaderParser::read_token()'],['../classtram_1_1_file.html#a49ba33b0139ddde95daf7f88adbeca79',1,'tram::File::read_token()']]], ['read_5fuint16_24',['read_uint16',['../classtram_1_1_text_reader_parser.html#a25ef758dce299e3013327c59fa8276de',1,'tram::TextReaderParser::read_uint16()'],['../classtram_1_1_file_reader_parser.html#a8a80b30acb200e9eeebacdf2da6d931d',1,'tram::FileReaderParser::read_uint16()'],['../classtram_1_1_file.html#a64635a9d28e30c7300d6a7459302d723',1,'tram::File::read_uint16()']]], ['read_5fuint32_25',['read_uint32',['../classtram_1_1_file_reader_parser.html#af1be7fcf9c20d57a470425db1d01c973',1,'tram::FileReaderParser::read_uint32()'],['../classtram_1_1_text_reader_parser.html#af27393ec11a775c33135bdf8af3ee14c',1,'tram::TextReaderParser::read_uint32()'],['../classtram_1_1_file.html#a153f0eccaaaca9cacdb4bb082060bcbc',1,'tram::File::read_uint32()']]], ['read_5fuint64_26',['read_uint64',['../classtram_1_1_file.html#a48c7cadf209801e17f3cc2f7b3bb877e',1,'tram::File::read_uint64()'],['../classtram_1_1_text_reader_parser.html#a8d1e49afadde9b3ac293308b3f72394f',1,'tram::TextReaderParser::read_uint64()'],['../classtram_1_1_file_reader_parser.html#adab7efdbacf1949c1b79510804f58827',1,'tram::FileReaderParser::read_uint64()']]], ['read_5fuint8_27',['read_uint8',['../classtram_1_1_file.html#a4f4075e222dd524d4132b616225d191d',1,'tram::File::read_uint8()'],['../classtram_1_1_text_reader_parser.html#a72087b8d7d3fe5aae9195ac35edb5023',1,'tram::TextReaderParser::read_uint8()'],['../classtram_1_1_file_reader_parser.html#a5527b551c2f71b78d9ae3e8c00b61d6e',1,'tram::FileReaderParser::read_uint8()']]], ['reader_28',['reader',['../classtram_1_1_file.html#a13e1dda97ae8a262ce9e28257c2aea1e',1,'tram::File']]], ['reader_5fparser_29',['reader_parser',['../classtram_1_1_file.html#a00a329e60e55d43c3df1159b5f36de18',1,'tram::File']]], ['ready_30',['READY',['../namespacetram_1_1_system.html#a4703b937891576671c79a6d02a63c0a2afe2c2852d86a0bab7964b332561c1958',1,'tram::System::READY()'],['../namespacetram.html#a972c59287ba467dbfe003f137609550da2baa69eafc7204f3bd8648eba580c489',1,'tram::READY()'],['../classtram_1_1_resource.html#a7a4ce943d482665189305b828868c2a4aa3769d5e294e6b2450a45d76dabd4084',1,'tram::Resource::READY()']]], ['recalculate_31',['Recalculate',['../classtram_1_1_ext_1_1_kitchensink_1_1_attribute_info.html#ab2c7811e4fd4d8ef5c00a8085d0eef4b',1,'tram::Ext::Kitchensink::AttributeInfo']]], ['receiver_32',['receiver',['../structtram_1_1_ext_1_1_menu_1_1_message_intercept.html#a46c8966a8a40c2904944a704e28bb8bc',1,'tram::Ext::Menu::MessageIntercept::receiver()'],['../structtram_1_1_message.html#a1d8a1a38aac71f1a0725b52ce898b7b1',1,'tram::Message::receiver()'],['../structtram_1_1_signal.html#a51beeb43406c2be5e68d4f43265e7eb6',1,'tram::Signal::receiver()']]], ['record_33',['record',['../main_8cpp.html#a24abc1cdb33ae6cc929ae21787c1cec9',1,'main.cpp']]], ['record_34',['Record',['../structtram_1_1_hashmap_1_1_record.html',1,'tram::Hashmap']]], ['recoverfromcollisions_35',['RecoverFromCollisions',['../classtram_1_1_f_p_s_controller_component.html#a14fa87139f0ba7e8325019afb05f56ff',1,'tram::FPSControllerComponent::RecoverFromCollisions()'],['../classtram_1_1_raycast_controller_component.html#ae97c6619effa4d637ecaca717798ba45',1,'tram::RaycastControllerComponent::RecoverFromCollisions()']]], ['recursivelyappendnexttopic_36',['RecursivelyAppendNextTopic',['../namespacetram_1_1_ext_1_1_kitchensink.html#a388f74aaa8aeb8efd221f91bf2014504',1,'tram::Ext::Kitchensink']]], ['ref_5ftype_37',['ref_type',['../structtram_1_1_render_1_1_a_a_b_b_1_1_a_a_b_b_leaf.html#a25ddbe86d347600cbfda7432448d05b5',1,'tram::Render::AABB::AABBLeaf']]], ['reference_5frendercomponent_38',['REFERENCE_RENDERCOMPONENT',['../namespacetram_1_1_render_1_1_a_a_b_b.html#a5bb0d1f9511914c037cd30f91aa9264cacd9048859d266397d2abe34d831b84ec',1,'tram::Render::AABB']]], ['references_39',['references',['../classtram_1_1_resource.html#a9f937078a3f7e3df1ad275528e615539',1,'tram::Resource']]], ['referencetype_40',['ReferenceType',['../namespacetram_1_1_render_1_1_a_a_b_b.html#a5bb0d1f9511914c037cd30f91aa9264c',1,'tram::Render::AABB']]], ['reflection_5fabsorption_41',['reflection_absorption',['../structtram_1_1_audio_1_1_spatial_1_1_path_tracing_result.html#ad239e98f2f77864eb10988803b8729d3',1,'tram::Audio::Spatial::PathTracingResult']]], ['reflection_5fcount_42',['reflection_count',['../structtram_1_1_audio_1_1_spatial_1_1_path_tracing_result.html#a241ad9bff06f84bc1924722fa97ef5ec',1,'tram::Audio::Spatial::PathTracingResult']]], ['reflections_43',['reflections',['../structtram_1_1_audio_1_1_spatial_1_1_path_tracing_result.html#aa3558215b661cecc8bb1ec9bb2654898',1,'tram::Audio::Spatial::PathTracingResult::reflections()'],['../structtram_1_1_audio_1_1_spatial_1_1_path_from_audio_source.html#ad8d0951179c5050779f6c44c83dc3ba5',1,'tram::Audio::Spatial::PathFromAudioSource::reflections()']]], ['reflectivity_44',['reflectivity',['../classtram_1_1_render_1_1_material.html#a9f91bdfa808477343ccdc76aaeb8abd6',1,'tram::Render::Material::reflectivity()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_material.html#a32337dbe065506cde40f754aa3e8f4d7',1,'tram::Render::API::GLMaterial::reflectivity()']]], ['refresh_45',['Refresh',['../classtram_1_1_animation_component.html#af951b71145c810f51d1c6c04feff431a',1,'tram::AnimationComponent']]], ['refreshaabb_46',['RefreshAABB',['../classtram_1_1_render_component.html#a51f449b6197db27708cbd4ebfb6ed433',1,'tram::RenderComponent']]], ['register_47',['Register',['../namespacetram_1_1_settings.html#aa67d64e20ae324efb9693944c7a56823',1,'tram::Settings::Register(int32_t &value, const char *name, uint32_t flags)'],['../namespacetram_1_1_settings.html#a56e0d9f488dcff9a350929bf4ef3f8d5',1,'tram::Settings::Register(bool &value, const char *name, uint32_t flags)'],['../namespacetram_1_1_scriptable_type.html#a1920e75c5a3e8de81df686d8f4073d04',1,'tram::ScriptableType::Register()'],['../namespacetram_1_1_settings.html#a8a4aec9c01b32664d1849fe0afde230c',1,'tram::Settings::Register()'],['../classtram_1_1_crate.html#aff35e03d11ebc3c23ab1c10f80aeb109',1,'tram::Crate::Register()'],['../classtram_1_1_decoration.html#a1b74c5467bdfdcf8749f0b3c172832ad',1,'tram::Decoration::Register()'],['../classtram_1_1_light.html#aab4ab5b5a486c5b765906b62da2eaa46',1,'tram::Light::Register()'],['../classtram_1_1_marker.html#a6122424fbc20e0355ca793c26481d961',1,'tram::Marker::Register()'],['../classtram_1_1_sound.html#a588c740a125c4956b97155e89838884e',1,'tram::Sound::Register()'],['../classtram_1_1_static_world_object.html#a8e563a79c899fe488977537b60f5f051',1,'tram::StaticWorldObject::Register()'],['../classtram_1_1_trigger.html#a695e8a121f4c3e42dbe4afcd1adecbe2',1,'tram::Trigger::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_package.html#a084b23b5977c656c8b6792c3e2704df7',1,'tram::Ext::Kitchensink::AIPackage::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_attribute_info.html#a1ed7709d6bccc5c11c042e1f9062c4c8',1,'tram::Ext::Kitchensink::AttributeInfo::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#ad10e29486dbc5f775f99ad93f94b265c',1,'tram::Ext::Kitchensink::Button::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_breakable.html#a1de507d7dea92475ef9f2437f1e58e6f',1,'tram::Ext::Kitchensink::Breakable::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_water.html#aa1ea56987cb0695dbb7747307895107a',1,'tram::Ext::Kitchensink::Water::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_train.html#ae4baca0092d7c385ae72abe24f017e52',1,'tram::Ext::Kitchensink::Train::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_pickup.html#a0e0f4eb79e699f1e7c1ec86bd859e6b9',1,'tram::Ext::Kitchensink::Pickup::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_text.html#a2cfbebb081bb04c2c636f90378f62499',1,'tram::Ext::Kitchensink::DebugText::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_shape.html#aa0ac5e2d0194f5d8a000240e5fdb81aa',1,'tram::Ext::Kitchensink::DebugShape::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_autosave.html#a42d3c79e2604d3e8f7b66c13dbfa47cf',1,'tram::Ext::Kitchensink::TriggerAutosave::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_hurt.html#ad355370a396ef40aa776d75b1f5c8792',1,'tram::Ext::Kitchensink::TriggerHurt::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_once.html#a4772ae9b7dc27bc1b58d876381a22a23',1,'tram::Ext::Kitchensink::TriggerOnce::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_multiple.html#af34ee313ba0e8e9fa03ec43a45cd99de',1,'tram::Ext::Kitchensink::TriggerMultiple::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_push.html#a40042ae95b62c4b861aed2b5688f151d',1,'tram::Ext::Kitchensink::TriggerPush::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_remove.html#acc0a673bdbc61686390ddc48f8e93ed6',1,'tram::Ext::Kitchensink::TriggerRemove::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_teleport.html#ac43c05116add4165f154679954941b1a',1,'tram::Ext::Kitchensink::TriggerTeleport::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_player_movement.html#a22615e5cbc341c9b9b97fa83b64cf889',1,'tram::Ext::Kitchensink::TriggerPlayerMovement::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#aee7dc2dfd34cc554c1428c897e2ab043',1,'tram::Ext::Kitchensink::ItemClass::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory_manager.html#a38a603ab838ff6b5896f2a19f3c15e1c',1,'tram::Ext::Kitchensink::InventoryManager::Register()'],['../classtram_1_1_entity.html#a21f52a14480f7dec666418d7ba17524c',1,'tram::Entity::Register()'],['../structtram_1_1_event.html#a71beec0c04550efde19bc6e76e5b209d',1,'tram::Event::Register()'],['../structtram_1_1_message.html#a404d077230b30357e8f515ee5b93149a',1,'tram::Message::Register()'],['../structtram_1_1_signal.html#a4cec75e6f5a3987de0924f8c204565f8',1,'tram::Signal::Register()'],['../classtram_1_1_render_1_1_a_p_i_1_1_linked_shader.html#a4e8506ce47f417ec8d0b10d71acec396',1,'tram::Render::API::LinkedShader::Register()'],['../namespacetram_1_1_system.html#aee7d79683193e5c01dab72b3bd84e710',1,'tram::System::Register()'],['../namespacetram_1_1_settings.html#ae777d5373a811ea16bac85f681608054',1,'tram::Settings::Register()']]], ['registered_48',['registered',['../structtram_1_1_render_1_1_registered_vertex_definition.html#a771519468d6787026df59c277ee94ae2',1,'tram::Render::RegisteredVertexDefinition']]], ['registeredvertexdefinition_49',['RegisteredVertexDefinition',['../structtram_1_1_render_1_1_registered_vertex_definition.html',1,'tram::Render']]], ['registerfont_50',['RegisterFont',['../namespacetram_1_1_g_u_i.html#a7b243fa8e17bd3e09a70b94f9f0a8054',1,'tram::GUI']]], ['registerkeyboardaction_51',['RegisterKeyboardAction',['../namespacetram_1_1_u_i.html#a01f1e35610c8d42fbf3f65a1b192dcb9',1,'tram::UI']]], ['registermaterialtype_52',['RegisterMaterialType',['../namespacetram_1_1_render.html#a86482f81f22e15a053cf87bd77b863fa',1,'tram::Render']]], ['registerrenderenvironmentmapshortcut_53',['RegisterRenderEnvironmentMapShortcut',['../namespacetram_1_1_ext_1_1_kitchensink.html#aac57df31b8265b053fcc5470b852a85a',1,'tram::Ext::Kitchensink']]], ['registershader_54',['RegisterShader',['../namespacetram_1_1_render_1_1_a_p_i.html#a63b87913acfc6af2fd7e39754dc1522d',1,'tram::Render::API']]], ['registertype_55',['RegisterType',['../classtram_1_1_entity.html#a688ecc3f647b88edae8704c9330d2afe',1,'tram::Entity::RegisterType(name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)'],['../classtram_1_1_entity.html#a9611e07ae9178831c24f65d35e936199',1,'tram::Entity::RegisterType(name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)'],['../classtram_1_1_entity.html#abf07867be6c8d765620cf6ad3a1b2525',1,'tram::Entity::RegisterType(name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)']]], ['registeruniformblock_56',['RegisterUniformBlock',['../classtram_1_1_render_1_1_a_p_i_1_1_linked_shader.html#ad06e322a21edacc9e1aa8a99b997f1b2',1,'tram::Render::API::LinkedShader']]], ['registervertexdefinition_57',['RegisterVertexDefinition',['../namespacetram_1_1_render.html#a457bd7e3ddb309251cb2cd0ffe1a5b37',1,'tram::Render']]], ['registervertexformat_58',['RegisterVertexFormat',['../namespacetram_1_1_render.html#a4ee55080a07d32caee9f42ce596d7e18',1,'tram::Render']]], ['relations_59',['relations',['../classtram_1_1_ext_1_1_kitchensink_1_1_faction.html#a8863648b8b05263ec564eb65d860793f',1,'tram::Ext::Kitchensink::Faction']]], ['remove_60',['Remove',['../namespacetram_1_1_stats.html#a9686b4d0c7f066e945be48a67719d799',1,'tram::Stats::Remove()'],['../classtram_1_1_ext_1_1_menu_1_1_menu.html#aa9d042bb7757a4a95a634582c36eb7db',1,'tram::Ext::Menu::Menu::Remove()'],['../classtram_1_1_world_cell.html#ab9fc8c0a06f6867f636663a55721f338',1,'tram::WorldCell::Remove()'],['../classtram_1_1_hashmap.html#aa5ec795eaaa273c57e3362be015a9dcb',1,'tram::Hashmap::Remove(UID key)'],['../classtram_1_1_hashmap.html#aaa8261398da94654cde9e61690810199',1,'tram::Hashmap::Remove(uint32_t key)'],['../classtram_1_1_octree.html#a712401b2423a34b64d7205459ddacf55',1,'tram::Octree::Remove()'],['../classtram_1_1_pool.html#a60d25b55dc178234fd501c6329c1b7aa',1,'tram::Pool::Remove()'],['../classtram_1_1_stack.html#a3cca2aef7b2091fff5bd9772b3f19edc',1,'tram::Stack::Remove()'],['../classtram_1_1_octree.html#a8496d30bf8f12e11b61923a06ee14e3d',1,'tram::Octree::Remove()']]], ['removeaudiobuffer_61',['RemoveAudioBuffer',['../namespacetram_1_1_audio_1_1_a_p_i.html#a0724c17fd3523893b97ee2a6aa8a090d',1,'tram::Audio::API']]], ['removeaudiosource_62',['RemoveAudioSource',['../namespacetram_1_1_audio_1_1_a_p_i.html#af490232ec82451014fb9e858f3feca68',1,'tram::Audio::API']]], ['removecharacter_63',['RemoveCharacter',['../classtram_1_1_ext_1_1_kitchensink_1_1_faction.html#abe0e002aef7acae2e30fc9c756777b1f',1,'tram::Ext::Kitchensink::Faction']]], ['removedrawlistentry_64',['RemoveDrawListEntry',['../namespacetram_1_1_render_1_1_a_p_i.html#a4a13fea5192ecde4d6483fd7ac4109d2',1,'tram::Render::API']]], ['removeeffect_65',['RemoveEffect',['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container.html#a47b495de8ee956c0871fc192ab4fa224',1,'tram::Ext::Kitchensink::AttributeContainer']]], ['removehierarchy_66',['RemoveHierarchy',['../classtram_1_1_a_a_b_b_tree.html#aa064aa5b6071d82fe3dc84bb08c07474',1,'tram::AABBTree']]], ['removeitem_67',['RemoveItem',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#a8de2d037b208dbd8efc4976e3a0a8547',1,'tram::Ext::Kitchensink::Inventory::RemoveItem()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory_manager.html#ab2b80ac808e4806ab9302a8e63a6c9be',1,'tram::Ext::Kitchensink::InventoryManager::RemoveItem()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_list_inventory_manager.html#abd31745962ddee971598846630493ddc',1,'tram::Ext::Kitchensink::ListInventoryManager::RemoveItem()']]], ['removeleaf_68',['RemoveLeaf',['../namespacetram_1_1_render_1_1_a_a_b_b.html#a0714a6a654730b3f04222f08c26c8eec',1,'tram::Render::AABB::RemoveLeaf()'],['../classtram_1_1_octree.html#a9b95a094d1299eac280c2baaeef43f3b',1,'tram::Octree::RemoveLeaf()'],['../classtram_1_1_a_a_b_b_tree.html#a9efb144bb94afd82a7c58a0ecd16a1a6',1,'tram::AABBTree::RemoveLeaf()']]], ['removelight_69',['RemoveLight',['../namespacetram_1_1_render_1_1_light_tree.html#acbb22184ab1cca95ca3dd1f250e3f12d',1,'tram::Render::LightTree']]], ['removelistener_70',['RemoveListener',['../structtram_1_1_event.html#a092d09e0b63277a8fbc77e92c0a61be5',1,'tram::Event']]], ['removereference_71',['RemoveReference',['../classtram_1_1_resource.html#a4c975d7c7ef4a34ac9b2dc72977e10f9',1,'tram::Resource']]], ['render_72',['Render',['../namespacetram_1_1_render.html#a5862ead09843f2489307cec433956d17',1,'tram::Render']]], ['render_73',['RENDER',['../namespacetram_1_1_system.html#a02b5e7a5340ef5ca42a650ca4d8ade65a002f90cdb21c6e590918357ef589f0d7',1,'tram::System']]], ['render_2ecpp_74',['render.cpp',['../components_2render_8cpp.html',1,'(Global Namespace)'],['../render_2render_8cpp.html',1,'(Global Namespace)']]], ['render_2eh_75',['render.h',['../render_2render_8h.html',1,'(Global Namespace)'],['../components_2render_8h.html',1,'(Global Namespace)']]], ['render_5fflags_76',['render_flags',['../classtram_1_1_render_component.html#a49a2e872ecfb59e33f5ab7974b01c13f',1,'tram::RenderComponent']]], ['rendercomponent_77',['rendercomponent',['../classtram_1_1_ext_1_1_kitchensink_1_1_pickup.html#a329479016aa8bba237d77d9b81d708bd',1,'tram::Ext::Kitchensink::Pickup::rendercomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_text.html#aea53d3e3b4c26becbb0f358cf8e13dcd',1,'tram::Ext::Kitchensink::DebugText::rendercomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_shape.html#aa1a0877cf652538dc29c81a2b7be004c',1,'tram::Ext::Kitchensink::DebugShape::rendercomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_autosave.html#a2f6cd3e9f01819693f25f76ea1deffe1',1,'tram::Ext::Kitchensink::TriggerAutosave::rendercomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_hurt.html#a61e6183e35fdce3b974628d18c0f8ca5',1,'tram::Ext::Kitchensink::TriggerHurt::rendercomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_multiple.html#a6d39ed9a2cbfab6cd334b9af39d99bc2',1,'tram::Ext::Kitchensink::TriggerMultiple::rendercomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_push.html#a5b9ef4de873d19b9f989c967c26904d8',1,'tram::Ext::Kitchensink::TriggerPush::rendercomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_remove.html#a97e548c324cbdb15b6f90dbfea4eb2fe',1,'tram::Ext::Kitchensink::TriggerRemove::rendercomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_teleport.html#a1ee314c75612530d797e07b5e2dff085',1,'tram::Ext::Kitchensink::TriggerTeleport::rendercomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_player_movement.html#ac98c9d0daa251c124f7bb347138c6d86',1,'tram::Ext::Kitchensink::TriggerPlayerMovement::rendercomponent()'],['../structtram_1_1_render_1_1_a_a_b_b_1_1_a_a_b_b_leaf.html#a0c210b34d5b66cf3a0f26eb37a45f773',1,'tram::Render::AABB::AABBLeaf::rendercomponent()'],['../classtram_1_1_static_world_object.html#a51c9c75f31cfe28bc7934498bf4b3dfe',1,'tram::StaticWorldObject::rendercomponent()'],['../classtram_1_1_decoration.html#ade298a17a196fd33a11d421657e5a423',1,'tram::Decoration::rendercomponent()']]], ['rendercomponent_78',['RenderComponent',['../classtram_1_1_render_component.html#aa32cca5b26feda97cbbed341d6633285',1,'tram::RenderComponent']]], ['rendercomponent_79',['rendercomponent',['../classtram_1_1_crate.html#aab88e1a8a682dcc308d4c9119abd711c',1,'tram::Crate::rendercomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a02890ff2bdddc5eda0fb4b325318ae35',1,'tram::Ext::Kitchensink::Button::rendercomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_train.html#a993b1fba83b57ed7da2f068a63e12e9a',1,'tram::Ext::Kitchensink::Train::rendercomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_water.html#a57defa0f79a1b97c9154ef7d3318963f',1,'tram::Ext::Kitchensink::Water::rendercomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_breakable.html#a9cd3710f61b4079ce2f48d9b21a8ff80',1,'tram::Ext::Kitchensink::Breakable::rendercomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_once.html#a218ca60c7aa10b956ce4db11d0411ac6',1,'tram::Ext::Kitchensink::TriggerOnce::rendercomponent()'],['../classtram_1_1_trigger.html#ac9ce430e5009ab03a6065d4ec1520816',1,'tram::Trigger::rendercomponent()']]], ['rendercomponent_80',['RenderComponent',['../classtram_1_1_render_component.html',1,'tram']]], ['renderenvironmentmaps_81',['RenderEnvironmentMaps',['../namespacetram_1_1_ext_1_1_kitchensink.html#aad417990ff2a73e06c72f341d12c1c9b',1,'tram::Ext::Kitchensink']]], ['renderer_2ecpp_82',['renderer.cpp',['../direct3d_2renderer_8cpp.html',1,'(Global Namespace)'],['../opengl_2renderer_8cpp.html',1,'(Global Namespace)'],['../renderer_8cpp.html',1,'(Global Namespace)']]], ['renderer_2eh_83',['renderer.h',['../renderer_8h.html',1,'(Global Namespace)'],['../opengl_2renderer_8h.html',1,'(Global Namespace)']]], ['renderflags_84',['renderflags',['../namespacetram_1_1_render.html#ac048699f6dc8dc5b8681c8aa3ac65d9c',1,'tram::Render']]], ['renderframe_85',['RenderFrame',['../namespacetram_1_1_render_1_1_a_p_i.html#a0d75088dd180366fb45cb86654694db9',1,'tram::Render::API']]], ['renderresult_86',['RenderResult',['../namespacetram_1_1_audio_1_1_spatial.html#a4fce28512165221d8874ab495d005804',1,'tram::Audio::Spatial']]], ['reparent_87',['Reparent',['../classtram_1_1_animation_component.html#aaa1fa307b6434b4f33232fd2fb831590',1,'tram::AnimationComponent']]], ['repeat_88',['repeat',['../classtram_1_1_audio_component.html#ab1cbca3ac78210b1c284dc6309a6b303',1,'tram::AudioComponent']]], ['repeats_89',['repeats',['../structtram_1_1_animation_component_1_1_animation_playback_info.html#ab1317f7c6f09824b1dc5a8df6b35bf7c',1,'tram::AnimationComponent::AnimationPlaybackInfo::repeats()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state.html#a076616449b844c51000c7b65940443b8',1,'tram::Ext::Kitchensink::AnimState::repeats()']]], ['reporterrorwarning_90',['reportErrorWarning',['../classtram_1_1_physics_1_1_a_p_i_1_1_physics_debug_draw.html#a0c323eedacd1cf9f7cd2d5c7ef4be405',1,'tram::Physics::API::PhysicsDebugDraw']]], ['requestanimationcomponent_91',['RequestAnimationComponent',['../classtram_1_1_decoration.html#aa0c8b3925860c63caa0c525c9160195d',1,'tram::Decoration']]], ['requester_92',['requester',['../structtram_1_1_async_1_1_resource_request.html#a6d012e198b66993662a598ea69a022c9',1,'tram::Async::ResourceRequest']]], ['requestnotification_93',['RequestNotification',['../namespacetram_1_1_async.html#a3852629b110e5e57e85140bb5fe518e5',1,'tram::Async']]], ['requestresource_94',['RequestResource',['../namespacetram_1_1_async.html#a9db009e1493d70c2ce388b2910e32fa2',1,'tram::Async::RequestResource(EntityComponent *requester, Resource *resource)'],['../namespacetram_1_1_async.html#aa2234c4cb0590d5672aa3bf4bb78703f',1,'tram::Async::RequestResource(void(*callback)(void *data), void *data, Resource *resource)']]], ['reset_95',['reset',['../classtram_1_1_stack.html#a3d06fa32cc63d712025d3090f03887b3',1,'tram::Stack::reset()'],['../classtram_1_1_stack_pool.html#aed5f3ae73582e286a4f9964fc65e73a0',1,'tram::StackPool::reset()']]], ['reset_96',['Reset',['../classtram_1_1_stack.html#a4718060e0b69b752026d144a5db7e152',1,'tram::Stack::Reset()'],['../classtram_1_1_stack_pool.html#a45ca522e92ec2faada60b18dad845832',1,'tram::StackPool::Reset()']]], ['reset_5ferror_97',['reset_error',['../classtram_1_1_file_reader_parser.html#a9efa5234488245dbb7918bfdd5bc41bd',1,'tram::FileReaderParser::reset_error()'],['../classtram_1_1_text_reader_parser.html#ac24ef033c2f6c0db5ebb5aad736a0435',1,'tram::TextReaderParser::reset_error()']]], ['reset_5fflags_98',['reset_flags',['../classtram_1_1_file.html#a5c4dc235347eed3842168ad548d1d5a6',1,'tram::File']]], ['resetcollisions_99',['ResetCollisions',['../classtram_1_1_trigger_component.html#a78db310fadbc1c2c572fa7e7deaf93c8',1,'tram::TriggerComponent']]], ['resetmove_100',['ResetMove',['../classtram_1_1_f_p_s_controller_component.html#a5302db1fe5d853e5bb0845ea5b0fa5f5',1,'tram::FPSControllerComponent::ResetMove()'],['../classtram_1_1_raycast_controller_component.html#a9f0a5b5809b046971e2b8f23d34f4838',1,'tram::RaycastControllerComponent::ResetMove()']]], ['resource_101',['resource',['../structtram_1_1_async_1_1_resource_request.html#afd7d16241779d48e5da39b7a6de4fb65',1,'tram::Async::ResourceRequest::resource()'],['../classtram_1_1_resource_proxy.html#a1f763b625481fde25be8bcdb2b9387ea',1,'tram::ResourceProxy::resource()']]], ['resource_102',['Resource',['../classtram_1_1_resource.html#a634805edb61d305a1ed69e35dbe4aeb3',1,'tram::Resource::Resource()'],['../namespacetram_1_1_stats.html#a3308525cd94517390ff06b22b9fef78e',1,'tram::Stats::Resource()'],['../classtram_1_1_resource.html',1,'tram::Resource']]], ['resource_2eh_103',['resource.h',['../resource_8h.html',1,'']]], ['resource_5fdrawcall_104',['RESOURCE_DRAWCALL',['../namespacetram_1_1_stats.html#a3308525cd94517390ff06b22b9fef78ea30dfa36d594401ff8bc2fa42bdaef635',1,'tram::Stats']]], ['resource_5flimit_5fcollision_5fmodel_105',['RESOURCE_LIMIT_COLLISION_MODEL',['../namespacetram.html#a09905cc9b5568b71843490d4d6ce5fc3',1,'tram']]], ['resource_5flimit_5flight_5fgraph_106',['RESOURCE_LIMIT_LIGHT_GRAPH',['../namespacetram.html#acfe37808bb06b05bc9596bc3242e95ce',1,'tram']]], ['resource_5flimit_5fmaterial_107',['RESOURCE_LIMIT_MATERIAL',['../namespacetram.html#a204e0f9d92f93902f454380c35b33c49',1,'tram']]], ['resource_5flimit_5fmodel_108',['RESOURCE_LIMIT_MODEL',['../namespacetram.html#a824fea7217919eb6958e08a8bbab50d1',1,'tram']]], ['resource_5flimit_5fpath_109',['RESOURCE_LIMIT_PATH',['../namespacetram.html#aaffd4a95c2adf2e132260b84190ca660',1,'tram']]], ['resource_5flimit_5fsound_110',['RESOURCE_LIMIT_SOUND',['../namespacetram.html#a4057f0499e008e4ce99545c3d38f1ddf',1,'tram']]], ['resource_5flimit_5fsound_5fgraph_111',['RESOURCE_LIMIT_SOUND_GRAPH',['../namespacetram.html#a899ede00065e962b5ca2528841e45aa7',1,'tram']]], ['resource_5flimit_5fsprite_112',['RESOURCE_LIMIT_SPRITE',['../namespacetram.html#ad2e37d16ae78faab3eb2d8140fcd8b5e',1,'tram']]], ['resource_5floader_5fqueue_5flimit_113',['RESOURCE_LOADER_QUEUE_LIMIT',['../namespacetram.html#ae549eb9876cd460a36ec048cd029af97',1,'tram']]], ['resource_5floader_5frequest_5flimit_114',['RESOURCE_LOADER_REQUEST_LIMIT',['../namespacetram.html#a35b3cdfbe899c26e6da0068331ef4a03',1,'tram']]], ['resource_5fvram_115',['RESOURCE_VRAM',['../namespacetram_1_1_stats.html#a3308525cd94517390ff06b22b9fef78ea5562dbf309e54c68ea2c9be9659c3998',1,'tram::Stats']]], ['resourceproxy_116',['ResourceProxy',['../classtram_1_1_entity_component.html#aee6f37c71b1449f8cbbc9522dedbea6d',1,'tram::EntityComponent::ResourceProxy()'],['../classtram_1_1_resource_proxy.html#ac391d66e8b3b4a5da5c27e8b29d3086c',1,'tram::ResourceProxy::ResourceProxy()'],['../classtram_1_1_resource_proxy.html',1,'tram::ResourceProxy< T >']]], ['resourceready_117',['ResourceReady',['../classtram_1_1_entity_component.html#a7f860b05911af126e8bd152492466b40',1,'tram::EntityComponent']]], ['resourcerequest_118',['ResourceRequest',['../structtram_1_1_async_1_1_resource_request.html',1,'tram::Async']]], ['resources_5fwaiting_119',['resources_waiting',['../classtram_1_1_entity_component.html#a67f362753d2e2c2e5859ceab8b9461ce',1,'tram::EntityComponent']]], ['restorecolor_120',['RestoreColor',['../namespacetram_1_1_g_u_i.html#a13a111a88e62cb6d8dd4434c22881dc5',1,'tram::GUI']]], ['restorefont_121',['RestoreFont',['../namespacetram_1_1_g_u_i.html#a2750747aff85f20a25ae9bb33dd72bec',1,'tram::GUI']]], ['result_5fpaths_122',['result_paths',['../structtram_1_1_audio_1_1_spatial_1_1_audio_source.html#a9b6559e0ee3ca945a46bcf95ca60d25e',1,'tram::Audio::Spatial::AudioSource']]], ['rgbcolor_123',['RGBColor',['../namespacetram_1_1_render_1_1_a_p_i.html#a53824581d902c1e57599bd544a99a0fb',1,'tram::Render::API']]], ['right_124',['right',['../structtram_1_1_a_a_b_b_tree_1_1_node.html#a57ca67dfe98a914549d55d710ef8fec6',1,'tram::AABBTree::Node::right()'],['../structtram_1_1_navmesh_node.html#a08dc0bcb36ae016bcc80f318a06b292f',1,'tram::NavmeshNode::right()']]], ['rigidbody_5flimit_125',['RIGIDBODY_LIMIT',['../namespacetram.html#a95ef9ff7b7e26c1f357c10707720163a',1,'tram']]], ['rigidbody_5fmetadata_5fpool_126',['rigidbody_metadata_pool',['../namespacetram_1_1_physics_1_1_a_p_i.html#a7fe1815cf77d8668e3eb109f279d1681',1,'tram::Physics::API']]], ['rigidbody_5ft_127',['rigidbody_t',['../structtram_1_1_physics_1_1rigidbody__t.html',1,'tram::Physics']]], ['rigidbodymetadata_128',['RigidbodyMetadata',['../structtram_1_1_physics_1_1_a_p_i_1_1_rigidbody_metadata.html',1,'tram::Physics::API']]], ['roll_129',['roll',['../structtram_1_1_render_1_1_bone.html#a2233872a355e1400ec15d418addceba9',1,'tram::Render::Bone']]], ['root_130',['root',['../classtram_1_1_octree.html#a339f6bc48edaea36835c72727179450f',1,'tram::Octree::root()'],['../classtram_1_1_a_a_b_b_tree.html#a6e50b9b4d4d2dde317cef8dcb3ce648c',1,'tram::AABBTree::root()']]], ['rotate_5ffollowing_131',['rotate_following',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a01612b2beb8614c3602232f3313e143b',1,'tram::Ext::Camera::FirstPersonCamera']]], ['rotateaabb_132',['RotateAABB',['../namespacetram.html#aecd3454b9944728f9e8beca79fb86a4b',1,'tram::RotateAABB(vec3 &min, vec3 &max, mat4 rotation)'],['../namespacetram.html#ae55bcde03ae63b1ceec8fb99f4416a55',1,'tram::RotateAABB(vec3 &min, vec3 &max, quat rotation)']]], ['rotation_133',['rotation',['../classtram_1_1_ext_1_1_camera_1_1_camera.html#a3e35e4579d49fde2164b2eda46d38423',1,'tram::Ext::Camera::Camera::rotation()'],['../classtram_1_1_decal_component.html#a0ecda8cd0fd000ba8d9af749319d198a',1,'tram::DecalComponent::rotation()'],['../classtram_1_1_render_component.html#ab662c48c42ac7423a1be25def0850aeb',1,'tram::RenderComponent::rotation()'],['../classtram_1_1_entity.html#a0525838325f363757549a3faa3267a62',1,'tram::Entity::rotation()'],['../structtram_1_1_shared_entity_data.html#a08cdfe854b58bb8a32ca9594866186c5',1,'tram::SharedEntityData::rotation()'],['../structtram_1_1_render_1_1_sprite_point.html#ac1308953c2313e45cb7b3f82c35a409f',1,'tram::Render::SpritePoint::rotation()'],['../classtram_1_1_physics_1_1_a_p_i_1_1_callback_motion_state.html#a8eb70310ddfbbf5915e9f243317e845e',1,'tram::Physics::API::CallbackMotionState::rotation()'],['../structtram_1_1_render_1_1_keyframe.html#a9a2801c157a6717bfc008716b4c28a83',1,'tram::Render::Keyframe::rotation()'],['../structtram_1_1_physics_1_1_a_p_i_1_1_collision_shape_transform.html#a5f018e305b8e1f25cd8bf8b2939605d1',1,'tram::Physics::API::CollisionShapeTransform::rotation()']]], ['run_134',['Run',['../classtram_1_1_raycast_controller_component.html#a5d4e68ef39d6a803e86f9b6fed954995',1,'tram::RaycastControllerComponent::Run()'],['../classtram_1_1_f_p_s_controller_component.html#a8cdc505ef5241f71136c2ff356e55615',1,'tram::FPSControllerComponent::Run()'],['../classtram_1_1_controller_component.html#a09830a27a27ef8b419a9cf9e60446121',1,'tram::ControllerComponent::Run()']]], ['run_5fspeed_135',['run_speed',['../classtram_1_1_f_p_s_controller_component.html#a69f90eea486552552948362847c43ee6',1,'tram::FPSControllerComponent::run_speed()'],['../classtram_1_1_raycast_controller_component.html#ac9876016d424f59dcbd70a22264ea0ed',1,'tram::RaycastControllerComponent::run_speed()']]], ['running_136',['running',['../classtram_1_1_f_p_s_controller_component.html#a897a4b4f81cc5bba6e619a053abec6b9',1,'tram::FPSControllerComponent::running()'],['../classtram_1_1_raycast_controller_component.html#a1ff2fa537cf973283b7385f4b9c12eea',1,'tram::RaycastControllerComponent::running()']]] ]; ================================================ FILE: docs/cppapi/search/all_13.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/all_13.js ================================================ var searchData= [ ['sample_0',['sample',['../structtram_1_1_audio_1_1_spatial_1_1_audio_render.html#a3de86af0e9c4a8ecf0b84c74f66b815e',1,'tram::Audio::Spatial::AudioRender']]], ['sample_5frate_1',['sample_rate',['../classtram_1_1_audio_1_1_sound.html#a31e7f9540ea880eb01e07c5a887d1911',1,'tram::Audio::Sound::sample_rate()'],['../structtram_1_1_audio_1_1_spatial_1_1_audio_buffer.html#a31d58d975d8c500b69f62db5d998cb4f',1,'tram::Audio::Spatial::AudioBuffer::sample_rate()']]], ['samplerate_5f11025_2',['SAMPLERATE_11025',['../namespacetram_1_1_audio_1_1_spatial.html#ade3f518b6f4fc8663aa6cc3143481f92aac71770f82a6275d05bd2bbca3197136',1,'tram::Audio::Spatial']]], ['samplerate_5f22050_3',['SAMPLERATE_22050',['../namespacetram_1_1_audio_1_1_spatial.html#ade3f518b6f4fc8663aa6cc3143481f92a169e074b5f1d0c78d330391b2af84f67',1,'tram::Audio::Spatial']]], ['samplerate_5f44100_4',['SAMPLERATE_44100',['../namespacetram_1_1_audio_1_1_spatial.html#ade3f518b6f4fc8663aa6cc3143481f92adea809ee311892b0def96da9d7daea32',1,'tram::Audio::Spatial']]], ['sampling_5fdirection_5',['sampling_direction',['../structtram_1_1_audio_1_1_spatial_1_1_path_exploration_result.html#a46a0473cea400f336d28d65b5625cd7d',1,'tram::Audio::Spatial::PathExplorationResult']]], ['sanitizedata_6',['SanitizeData',['../classtram_1_1_scriptable.html#a51e08621ef581d5991528c9b8e5b0134',1,'tram::Scriptable']]], ['save_7',['Save',['../namespacetram_1_1_settings.html#af223a059620ac414794cb974b5923b77',1,'tram::Settings']]], ['saveimagetodisk_8',['SaveImageToDisk',['../namespacetram_1_1_platform.html#a62f1df4ce7fc6c46cd5cf3d348d1ac5d',1,'tram::Platform']]], ['scale_9',['scale',['../classtram_1_1_render_component.html#aeb591d2819300ff65ac05acfd171fe4c',1,'tram::RenderComponent::scale()'],['../classtram_1_1_decal_component.html#abe8edd2e09691f0f2f0a5b2f150f7cca',1,'tram::DecalComponent::scale()'],['../structtram_1_1_render_1_1_keyframe.html#a77e3cb6ebfeb2417da1887eb85a0b7c5',1,'tram::Render::Keyframe::scale()']]], ['scanline_10',['Scanline',['../structtram_1_1_render_1_1_a_p_i_1_1_scanline.html',1,'tram::Render::API']]], ['scanline_5flength_11',['scanline_length',['../structtram_1_1_render_1_1_a_p_i_1_1_scanline_buffer.html#a1b58e3c8b743fa7395633e6f1dfc2169',1,'tram::Render::API::ScanlineBuffer']]], ['scanlinebuffer_12',['ScanlineBuffer',['../structtram_1_1_render_1_1_a_p_i_1_1_scanline_buffer.html',1,'tram::Render::API']]], ['scanlineconverttriangle_13',['ScanlineConvertTriangle',['../namespacetram_1_1_render_1_1_a_p_i.html#a50224ff62bbe42c2feaaf53994343449',1,'tram::Render::API']]], ['scanlines_14',['scanlines',['../namespacetram_1_1_render_1_1_a_p_i.html#a98aac604b36b4bd1c29a5580cd309cb7',1,'tram::Render::API::scanlines()'],['../structtram_1_1_render_1_1_a_p_i_1_1_scanline_buffer.html#a19c45e4651ead4e492155c6392ea5019',1,'tram::Render::API::ScanlineBuffer::scanlines()']]], ['scene_2ecpp_15',['scene.cpp',['../scene_8cpp.html',1,'']]], ['scene_2eh_16',['scene.h',['../scene_8h.html',1,'']]], ['screen_5fclear_5fcolor_17',['screen_clear_color',['../namespacetram_1_1_render_1_1_a_p_i.html#ab8259e25142ce465c1c745dd91f4618e',1,'tram::Render::API']]], ['screenclose_18',['ScreenClose',['../namespacetram_1_1_u_i.html#aca1f573178e278ecf636cbe954aa6487',1,'tram::UI']]], ['screenheight_19',['screenHeight',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#a989f62e254b867c662ead69c0fe6bbe5',1,'tram::Render::API::ShaderUniformModelMatrices']]], ['screenresize_20',['ScreenResize',['../namespacetram_1_1_u_i.html#a8ca04b3e70a301b34b59d9aa2dde6282',1,'tram::UI']]], ['screenwidth_21',['screenWidth',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#a8e39494459b73be83dfbeef16e5775d2',1,'tram::Render::API::ShaderUniformModelMatrices']]], ['script_22',['script',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a5db92704bb3700f46790b108525400e5',1,'tram::Ext::Kitchensink::QuestVariable::script()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html#a000cfce98b029d0db88a9cbbc17bc070',1,'tram::Ext::Kitchensink::AIAgent::script()']]], ['script_23',['Script',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a33142a6aaa4cbf2fab8888fc13a1477c',1,'tram::Ext::Kitchensink::QuestVariable']]], ['script_2ecpp_24',['script.cpp',['../entities_2script_8cpp.html',1,'(Global Namespace)'],['../framework_2script_8cpp.html',1,'(Global Namespace)']]], ['script_2eh_25',['script.h',['../framework_2script_8h.html',1,'(Global Namespace)'],['../entities_2script_8h.html',1,'(Global Namespace)']]], ['scriptable_26',['Scriptable',['../classtram_1_1_scriptable.html#a155369bc0f7a32617d2b9addb29daea7',1,'tram::Scriptable::Scriptable()'],['../classtram_1_1_scriptable.html',1,'tram::Scriptable< T >']]], ['scriptable_5fentity_5ftype_5flimit_27',['SCRIPTABLE_ENTITY_TYPE_LIMIT',['../namespacetram.html#afde783f76b29484fca014a71379688da',1,'tram']]], ['scriptabletypeinfo_28',['ScriptableTypeInfo',['../structtram_1_1_scriptable_type_1_1_scriptable_type_info.html',1,'tram::ScriptableType']]], ['sdl_2ecpp_29',['sdl.cpp',['../sdl_8cpp.html',1,'']]], ['search_5fstring_5flength_30',['SEARCH_STRING_LENGTH',['../namespacetram_1_1_ext_1_1_kitchensink.html#a6a6727c817a50b06905e75396bc8eb1d',1,'tram::Ext::Kitchensink']]], ['select_31',['SELECT',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afda25c37f57fe797d8c8f13fc639eac22aa',1,'tram::Message']]], ['selected_32',['SELECTED',['../structtram_1_1_event.html#a569d6673fa83d2a5ec86b3d0c36c8765a95f4763a21669c2b729ec12f7e6970c6',1,'tram::Event']]], ['selected_5fcamera_33',['selected_camera',['../namespacetram_1_1_ext_1_1_camera.html#acf02ee4711f59697606b71a4712e98bc',1,'tram::Ext::Camera']]], ['send_34',['Send',['../structtram_1_1_message.html#a9e97e1f98831bf5a18bf28a7f6ece953',1,'tram::Message::Send(const Message &message, float delay)'],['../structtram_1_1_message.html#a4c7116e2921062b636dbf57a152046a8',1,'tram::Message::Send(const Message &message)']]], ['sender_35',['sender',['../structtram_1_1_message.html#a28e9498ff0a7bb62e84f2a6c2589fa94',1,'tram::Message::sender()'],['../structtram_1_1_ext_1_1_menu_1_1_message_intercept.html#a435b82f7becf196d66c0951f6df0b256',1,'tram::Ext::Menu::MessageIntercept::sender()']]], ['serialization_2eh_36',['serialization.h',['../serialization_8h.html',1,'']]], ['serialize_37',['Serialize',['../classtram_1_1_decoration.html#a3be7afb5d539dfef12b41d9132b051ae',1,'tram::Decoration::Serialize()'],['../classtram_1_1_light.html#a1b28bc6a6961ed135f688efd63930d1d',1,'tram::Light::Serialize()'],['../classtram_1_1_marker.html#a5c9a6085109982a942bf4f08c8b6cb09',1,'tram::Marker::Serialize()'],['../classtram_1_1_player.html#abda0826d3fb3a3ef717a4b8704745b61',1,'tram::Player::Serialize()'],['../classtram_1_1_scriptable.html#a382a7e9d207bb65e475aa0012f9a2ac6',1,'tram::Scriptable::Serialize()'],['../classtram_1_1_sound.html#a41a7fbea5ee99ed28d7d586de0b8f794',1,'tram::Sound::Serialize()'],['../classtram_1_1_static_world_object.html#a7db1c49df54e8a3be9f874af923b196f',1,'tram::StaticWorldObject::Serialize()'],['../classtram_1_1_trigger.html#aa5b794eeecfb4a50395bb0013a5a0d2f',1,'tram::Trigger::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#ac06e45332876905bc76befbaf387b20f',1,'tram::Ext::Kitchensink::Button::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_breakable.html#aa00b9673f6363852e48c7522e202fd30',1,'tram::Ext::Kitchensink::Breakable::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_water.html#a91048dbb77098e96000955924add2157',1,'tram::Ext::Kitchensink::Water::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_train.html#aae6220e39a9664f2279dc889179b21b9',1,'tram::Ext::Kitchensink::Train::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_pickup.html#aa3a8dd7dd03c77cc765e2f8e279f7802',1,'tram::Ext::Kitchensink::Pickup::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_text.html#aed52a8cb6a7d734e0da47fed6b687de3',1,'tram::Ext::Kitchensink::DebugText::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_shape.html#aa0fedc7fe85850fe25383fe839b67738',1,'tram::Ext::Kitchensink::DebugShape::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_autosave.html#ad054dbd579c90c448a21a741a4e14b43',1,'tram::Ext::Kitchensink::TriggerAutosave::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_hurt.html#a4b08beab647a0ea56a113ac035d4061a',1,'tram::Ext::Kitchensink::TriggerHurt::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_once.html#a25d11e16da07ac56161f2bc4b1ef7359',1,'tram::Ext::Kitchensink::TriggerOnce::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_push.html#a5311486ac974e5897071824f0d03ee6e',1,'tram::Ext::Kitchensink::TriggerPush::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_remove.html#aea1ec1ba74f293b5043d00d7899fb734',1,'tram::Ext::Kitchensink::TriggerRemove::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_teleport.html#a2ec405cef2fbc36f67215266939c4382',1,'tram::Ext::Kitchensink::TriggerTeleport::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_player_movement.html#a8235ebd895fe382b080d2e0a70e1738f',1,'tram::Ext::Kitchensink::TriggerPlayerMovement::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_quest_entity.html#aaca880ca76b51e2ce862148a895f61ab',1,'tram::Ext::Kitchensink::QuestEntity::Serialize()'],['../classtram_1_1_entity.html#a022989dd6fae21cdb65af24f26648488',1,'tram::Entity::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_multiple.html#aa87df5a1dc89880323ba8e5c306de546',1,'tram::Ext::Kitchensink::TriggerMultiple::Serialize()'],['../classtram_1_1_crate.html#a5e88d32ca11233d9f779f6182e808934',1,'tram::Crate::Serialize()']]], ['serializestring_38',['SerializeString',['../classtram_1_1_player.html#aab33b3c6c47189f920a5d4f0bee78528',1,'tram::Player']]], ['set_39',['set',['../classtram_1_1_resource_proxy.html#a3481987ea325fd008b4dc41f4ab64dc1',1,'tram::ResourceProxy']]], ['set_40',['Set',['../namespacetram_1_1_settings.html#a33ec2bfcebab7ee764566a172fab7cb5',1,'tram::Settings']]], ['set_5fanimation_41',['SET_ANIMATION',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afda7060aac17306329964fe7abda5b538c8',1,'tram::Message']]], ['set_5fflag_5foff_42',['SET_FLAG_OFF',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afda8fe9a252ea757ae7d93edf0da09172d8',1,'tram::Message']]], ['set_5fflag_5fon_43',['SET_FLAG_ON',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afda6339dff2f96fb0b14555a2df9c70195d',1,'tram::Message']]], ['set_5fprogress_44',['SET_PROGRESS',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afda80330a58630331f2b6204ffadc99b68b',1,'tram::Message']]], ['set_5fskip_5fnewline_45',['set_skip_newline',['../classtram_1_1_file_reader_parser.html#a593aa775ae47147f9328673822adb7d1',1,'tram::FileReaderParser']]], ['set_5fskip_5fvalue_46',['set_skip_value',['../classtram_1_1_file_reader_parser.html#a99a0e7fd09920b898ef0a275b202541a',1,'tram::FileReaderParser']]], ['set_5ftransform_5fcallback_47',['set_transform_callback',['../classtram_1_1_physics_1_1_a_p_i_1_1_callback_motion_state.html#af92a134178d01636e1b003a46daafdda',1,'tram::Physics::API::CallbackMotionState']]], ['set_5ftrf_5fcallback_48',['set_trf_callback',['../namespacetram_1_1_physics_1_1_a_p_i.html#a8e2158a307c228002d615529011ac455',1,'tram::Physics::API']]], ['setactivationcallback_49',['SetActivationCallback',['../classtram_1_1_trigger_component.html#ad30c23103020b9c9144d21835793f892',1,'tram::TriggerComponent']]], ['setactive_50',['SetActive',['../classtram_1_1_ext_1_1_camera_1_1_camera.html#ad08e1bd8a37aa799617220b19e2df508',1,'tram::Ext::Camera::Camera']]], ['setambientcolor_51',['SetAmbientColor',['../namespacetram_1_1_render.html#acb0e80ad32fe24d60dc62e58017b37b2',1,'tram::Render']]], ['setandstore_52',['SetAndStore',['../namespacetram_1_1_settings.html#ac51701ca424bff0d1a8251fc6b128643',1,'tram::Settings']]], ['setangularfactor_53',['SetAngularFactor',['../classtram_1_1_physics_component.html#a4a7c6f98fc1ff033c6988c35bc14c999',1,'tram::PhysicsComponent']]], ['setanimationcomponent_54',['SetAnimationComponent',['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_state_component.html#a353c54cd4574695e428894719609c595',1,'tram::Ext::Kitchensink::AnimationStateComponent']]], ['setanimationstatecomponent_55',['SetAnimationStateComponent',['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html#a3b750ab68f6cd76205f6f39a8b98f8e8',1,'tram::Ext::Kitchensink::AIAgent']]], ['setanimationtable_56',['SetAnimationTable',['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_state_component.html#aa549e6a492118321af2af17a1c342290',1,'tram::Ext::Kitchensink::AnimationStateComponent']]], ['setarmature_57',['SetArmature',['../classtram_1_1_render_component.html#ab67dd56c013753efd5c8fa9866daab88',1,'tram::RenderComponent']]], ['setattribute_58',['SetAttribute',['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container.html#a7e832ff6e766b735b531d9b7e9b10a64',1,'tram::Ext::Kitchensink::AttributeContainer::SetAttribute()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_character_class.html#ab809fb75392382fe9c0081e2b1c72248',1,'tram::Ext::Kitchensink::CharacterClass::SetAttribute()']]], ['setaudiosourcebuffer_59',['SetAudioSourceBuffer',['../namespacetram_1_1_audio_1_1_a_p_i.html#a66d344898a8b0355218f36cddc369046',1,'tram::Audio::API']]], ['setaudiosourcegain_60',['SetAudioSourceGain',['../namespacetram_1_1_audio_1_1_a_p_i.html#aa34a3e351de4035848dc1280ef3e824f',1,'tram::Audio::API']]], ['setaudiosourcepitch_61',['SetAudioSourcePitch',['../namespacetram_1_1_audio_1_1_a_p_i.html#aa3b7d9891305e368e07d7ad863d628c6',1,'tram::Audio::API']]], ['setaudiosourceposition_62',['SetAudioSourcePosition',['../namespacetram_1_1_audio_1_1_a_p_i.html#a273ec7fe95edfbd9414878e67eadaf4b',1,'tram::Audio::API']]], ['setaudiosourcerepeating_63',['SetAudioSourceRepeating',['../namespacetram_1_1_audio_1_1_a_p_i.html#a7420c760d8243ed9e24b2af3a77e4e2c',1,'tram::Audio::API']]], ['setaudiosourcevelocity_64',['SetAudioSourceVelocity',['../namespacetram_1_1_audio_1_1_a_p_i.html#a7a9b62489392c6a82eda4a2157cad570',1,'tram::Audio::API']]], ['setautoload_65',['SetAutoLoad',['../classtram_1_1_entity.html#a742a345ed3da6d6966040b4a2045ce8e',1,'tram::Entity']]], ['setautomaticloading_66',['SetAutomaticLoading',['../classtram_1_1_world_cell.html#afb21e78a8b34ebcb39f149f50436b859',1,'tram::WorldCell']]], ['setaxissensitivity_67',['SetAxisSensitivity',['../namespacetram_1_1_u_i.html#aafa7d6428092dcd22b4ea486c948baf5',1,'tram::UI']]], ['setbasedisposition_68',['SetBaseDisposition',['../classtram_1_1_ext_1_1_kitchensink_1_1_character.html#a250fa84700e6ae73eb75f343f8a7b1c2',1,'tram::Ext::Kitchensink::Character']]], ['setbobbing_69',['SetBobbing',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#afc8754d53b7ba8698791378dbda72007',1,'tram::Ext::Camera::FirstPersonCamera']]], ['setbobbingcallback_70',['SetBobbingCallback',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a9c90b959c76be84f182e826b60f4d1bb',1,'tram::Ext::Camera::FirstPersonCamera']]], ['setbobbingdistance_71',['SetBobbingDistance',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#ab1b10331c68852d99dadeaba25aae16d',1,'tram::Ext::Camera::FirstPersonCamera']]], ['setbobbingtilt_72',['SetBobbingTilt',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a647225bd7bd3d33fc1295b8e59945b1a',1,'tram::Ext::Camera::FirstPersonCamera']]], ['setbobspeed_73',['SetBobSpeed',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a34cc63ef60051ea61e79d460563d8806',1,'tram::Ext::Camera::FirstPersonCamera']]], ['setcharacterloyalty_74',['SetCharacterLoyalty',['../classtram_1_1_ext_1_1_kitchensink_1_1_faction.html#ad8d824372cef0f862a20d2e0e1cc6efc',1,'tram::Ext::Kitchensink::Faction']]], ['setcharacterrank_75',['SetCharacterRank',['../classtram_1_1_ext_1_1_kitchensink_1_1_faction.html#a4b2fb5b81f7d1d27dab2eac014eddef4',1,'tram::Ext::Kitchensink::Faction']]], ['setcollisiongroup_76',['SetCollisionGroup',['../classtram_1_1_trigger_component.html#a924939c39095e5cf7444b00578423e75',1,'tram::TriggerComponent::SetCollisionGroup()'],['../classtram_1_1_physics_component.html#a62ca80aadcd392cc94243f1a42d1b06e',1,'tram::PhysicsComponent::SetCollisionGroup()'],['../classtram_1_1_raycast_controller_component.html#a6588e19ca0bc87e0ddf3f53f6b938df4',1,'tram::RaycastControllerComponent::SetCollisionGroup()'],['../classtram_1_1_f_p_s_controller_component.html#a198a3b9279dffb137f56bb510b65cf79',1,'tram::FPSControllerComponent::SetCollisionGroup()']]], ['setcollisionmask_77',['SetCollisionMask',['../classtram_1_1_trigger_component.html#aaa9f40c6c3afaddd4657b6a2e5ea35e4',1,'tram::TriggerComponent::SetCollisionMask()'],['../classtram_1_1_physics_component.html#a02d7278815c993d0c267002740e2cc10',1,'tram::PhysicsComponent::SetCollisionMask()']]], ['setcollisions_78',['SetCollisions',['../classtram_1_1_controller_component.html#a005c65e23bba7635c05821a5bebbdf47',1,'tram::ControllerComponent']]], ['setcollisionsize_79',['SetCollisionSize',['../classtram_1_1_raycast_controller_component.html#a83c8376ae644ba75c5caa09803e4e8ef',1,'tram::RaycastControllerComponent::SetCollisionSize()'],['../classtram_1_1_f_p_s_controller_component.html#a790794239c994c8c15f988edee64ae70',1,'tram::FPSControllerComponent::SetCollisionSize()']]], ['setcolor_80',['SetColor',['../namespacetram_1_1_g_u_i.html#a7210e80143cdcc0ce28a57c0b283fca6',1,'tram::GUI::SetColor()'],['../classtram_1_1_light_component.html#ac9245097981e9adcb4f31f83513a071b',1,'tram::LightComponent::SetColor()'],['../classtram_1_1_render_component.html#af17bf80e41504736aafbed51e68777cb',1,'tram::RenderComponent::SetColor()'],['../classtram_1_1_render_1_1_material.html#ac450fbb7d4e815d5d84aee35acf40fc8',1,'tram::Render::Material::SetColor()']]], ['setconsolelogcallback_81',['SetConsoleLogCallback',['../namespacetram.html#ad6e944197c5e9252268255850e7d15fb',1,'tram::SetConsoleLogCallback(void(*callback)(int, const char *))'],['../namespacetram.html#aaf2fa22ee1b4ccc8fc03fe49402db0c5',1,'tram::SetConsoleLogCallback(void(int, const char *))']]], ['setcontents_82',['SetContents',['../classtram_1_1_file_writer.html#a74186dc3ea104ae0fa72c23f96ef7e80',1,'tram::FileWriter::SetContents()'],['../classtram_1_1_disk_writer.html#a6430c8e4e068ca19c9b31f1d0899b34c',1,'tram::DiskWriter::SetContents()']]], ['setcontrollercomponent_83',['SetControllerComponent',['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html#a7740703b2a0dfef31440331972ca0bdf',1,'tram::Ext::Kitchensink::AIAgent::SetControllerComponent()'],['../classtram_1_1_player_component.html#a8487102a9cb10c8c9b59e4aa8c0d4c56',1,'tram::PlayerComponent::SetControllerComponent()']]], ['setcrouchspeed_84',['SetCrouchSpeed',['../classtram_1_1_raycast_controller_component.html#ab9cc4edd8b6e0076ee4e6ffd0df8353c',1,'tram::RaycastControllerComponent::SetCrouchSpeed()'],['../classtram_1_1_f_p_s_controller_component.html#a576c462ea53d985f902085041cfafc72',1,'tram::FPSControllerComponent::SetCrouchSpeed()']]], ['setcursor_85',['SetCursor',['../namespacetram_1_1_u_i.html#a6ca596524ffb0c21621d8cfdcf9c5fbf',1,'tram::UI::SetCursor()'],['../namespacetram_1_1_platform_1_1_window.html#af8f96fbc1d628f67ed4301d47d67120a',1,'tram::Platform::Window::SetCursor()']]], ['setcursordelayed_86',['SetCursorDelayed',['../namespacetram_1_1_g_u_i.html#a722e52d1cec8ee81a55e26dc1a4c63c8',1,'tram::GUI']]], ['setcursorposition_87',['SetCursorPosition',['../namespacetram_1_1_platform_1_1_window.html#aeadcf3d1d5fbf11485b74214f091819e',1,'tram::Platform::Window']]], ['setdebugdraw_88',['SetDebugDraw',['../classtram_1_1_world_cell.html#add3fba0e03d6c7e4b9ba05f83cf811f8',1,'tram::WorldCell']]], ['setdebugdrawing_89',['SetDebugDrawing',['../classtram_1_1_physics_component.html#aa352025ec22ad95c90b1b4055eaca758',1,'tram::PhysicsComponent']]], ['setdebuginfodraw_90',['SetDebugInfoDraw',['../classtram_1_1_controller_component.html#af7b5cdc611a17b8a7261e14df61c56dd',1,'tram::ControllerComponent::SetDebugInfoDraw()'],['../classtram_1_1_animation_component.html#a9040237d0b7095c4f3c40263bbf8428e',1,'tram::AnimationComponent::SetDebugInfoDraw()'],['../classtram_1_1_audio_component.html#a08da2d9226240fb8e37b91b77145f0cf',1,'tram::AudioComponent::SetDebugInfoDraw()']]], ['setdebugmode_91',['setDebugMode',['../classtram_1_1_physics_1_1_a_p_i_1_1_physics_debug_draw.html#a77b61272d7ad912dc96eb1b4e721a6b2',1,'tram::Physics::API::PhysicsDebugDraw']]], ['setdebugmode_92',['SetDebugMode',['../namespacetram_1_1_render_1_1_a_p_i.html#a7d69a7f95415804042a41c3580a7c56f',1,'tram::Render::API']]], ['setdectivationcallback_93',['SetDectivationCallback',['../classtram_1_1_trigger_component.html#a5810d82217bbf1ba29a40beca70ce30d',1,'tram::TriggerComponent']]], ['setdevice_94',['SetDevice',['../namespacetram_1_1_render_1_1_a_p_i.html#ae66b8323eef7ab765ad466ec90da6ed6',1,'tram::Render::API']]], ['setdirection_95',['SetDirection',['../classtram_1_1_light_component.html#a407b59e1e8c215a030e5eff1aba7d7d1',1,'tram::LightComponent']]], ['setdirectionalight_96',['SetDirectionaLight',['../classtram_1_1_render_component.html#a6f3130e436973f3e9f9f949e642df68d',1,'tram::RenderComponent']]], ['setdisplaylogcallback_97',['SetDisplayLogCallback',['../namespacetram.html#aeb62c461f07f0472724808f099abd05d',1,'tram::SetDisplayLogCallback(void(*callback)(int, const char *))'],['../namespacetram.html#a6386f26cd40ff74930ce7855564b513d',1,'tram::SetDisplayLogCallback(void(int, const char *))']]], ['setdistance_98',['SetDistance',['../classtram_1_1_light_component.html#a1861087271aee66c91c327ec199000da',1,'tram::LightComponent']]], ['setdrawlistaabb_99',['SetDrawListAABB',['../namespacetram_1_1_render_1_1_a_p_i.html#a68a28820f27f670a90c2a644aa199728',1,'tram::Render::API']]], ['setdrawlistcolors_100',['SetDrawListColors',['../namespacetram_1_1_render_1_1_a_p_i.html#ab591dae55495d78c86d150973ea3bef1',1,'tram::Render::API']]], ['setdrawlistindexarray_101',['SetDrawListIndexArray',['../namespacetram_1_1_render_1_1_a_p_i.html#a411524f6804a132bdfdf7e95d318fe6a',1,'tram::Render::API']]], ['setdrawlistindexrange_102',['SetDrawListIndexRange',['../namespacetram_1_1_render_1_1_a_p_i.html#ac78a374d698ab9d252afd86163c19440',1,'tram::Render::API']]], ['setdrawlistmaterials_103',['SetDrawListMaterials',['../namespacetram_1_1_render_1_1_a_p_i.html#a020f2e580879d12bf3b84b0ed5b9ab70',1,'tram::Render::API']]], ['setdrawlistshader_104',['SetDrawListShader',['../namespacetram_1_1_render_1_1_a_p_i.html#a3724426196e2fad6e190726003249aed',1,'tram::Render::API']]], ['setdrawlistspecularities_105',['SetDrawListSpecularities',['../namespacetram_1_1_render_1_1_a_p_i.html#a96595ff7b2190bcc3b764d3ff9f6f5b8',1,'tram::Render::API']]], ['setdrawlistspritearray_106',['SetDrawListSpriteArray',['../namespacetram_1_1_render_1_1_a_p_i.html#a9089059c10db7896ab1796273aab81b7',1,'tram::Render::API']]], ['setdrawlisttextureoffsets_107',['SetDrawListTextureOffsets',['../namespacetram_1_1_render_1_1_a_p_i.html#aabd8944a6224d5713a02ab8805acf20d',1,'tram::Render::API']]], ['setdrawlisttextures_108',['SetDrawListTextures',['../namespacetram_1_1_render_1_1_a_p_i.html#aac05dea68d3b978e4303cf1c2164f44c',1,'tram::Render::API']]], ['setdrawlistvertexarray_109',['SetDrawListVertexArray',['../namespacetram_1_1_render_1_1_a_p_i.html#a4642bc504c6d77fde8a824bb95c5ec16',1,'tram::Render::API']]], ['setdrawtrigger_110',['SetDrawTrigger',['../classtram_1_1_trigger.html#ae6703ba2939bf5799cec0c87eb677038',1,'tram::Trigger']]], ['setentity_111',['SetEntity',['../classtram_1_1_ext_1_1_menu_1_1_signal_menu.html#afb8fba8b653379700d91bef8816f036e',1,'tram::Ext::Menu::SignalMenu::SetEntity()'],['../classtram_1_1_ext_1_1_menu_1_1_message_send.html#a0895a5a8ed80b2a60a59cb1fe37a5cc1',1,'tram::Ext::Menu::MessageSend::SetEntity()']]], ['setenvironmentmap_112',['SetEnvironmentMap',['../namespacetram_1_1_render_1_1_a_p_i.html#a52c5145a1f9715fcb38218c4c6383fcf',1,'tram::Render::API::SetEnvironmentMap()'],['../classtram_1_1_render_component.html#a81729832968e5f5656d3b230cd0f66fd',1,'tram::RenderComponent::SetEnvironmentMap()']]], ['seteventtype_113',['SetEventType',['../classtram_1_1_ext_1_1_menu_1_1_event_emit.html#ab8f2c00eee82630287cf68b3d9ca9469',1,'tram::Ext::Menu::EventEmit']]], ['setexponent_114',['SetExponent',['../classtram_1_1_light_component.html#ac7375045221c2b515f18c1b5893f048f',1,'tram::LightComponent']]], ['setfade_115',['SetFade',['../classtram_1_1_animation_component.html#a2fcbfb0820bce127c4ef9c82238a296f',1,'tram::AnimationComponent']]], ['setfadedistance_116',['SetFadeDistance',['../namespacetram_1_1_render_1_1_a_p_i.html#a664d9f1a7426b3a1505975402100480a',1,'tram::Render::API']]], ['setfardistance_117',['SetFarDistance',['../classtram_1_1_render_1_1_model.html#acf0073d6b4982cb158d3d7289afa9266',1,'tram::Render::Model']]], ['setfiltercallback_118',['SetFilterCallback',['../classtram_1_1_trigger_component.html#ac4d9c4e43a0e75b00ec6de674c9b7bc5',1,'tram::TriggerComponent']]], ['setflag_119',['SetFlag',['../classtram_1_1_entity.html#a613b86846cd7d82c666367c98d266e6e',1,'tram::Entity::SetFlag()'],['../classtram_1_1_world_cell.html#a7ee87e1140b9f20b04463f0342135050',1,'tram::WorldCell::SetFlag()']]], ['setflags_120',['SetFlags',['../namespacetram_1_1_render_1_1_a_p_i.html#a10a6b549dc7e27d1f27c14bd2e3fc896',1,'tram::Render::API']]], ['setflyspeed_121',['SetFlySpeed',['../classtram_1_1_raycast_controller_component.html#aafc558e1478f35254aa19f0bfd4bbac9',1,'tram::RaycastControllerComponent::SetFlySpeed()'],['../classtram_1_1_f_p_s_controller_component.html#ac0b5fd2754147656c7a45085715119c6',1,'tram::FPSControllerComponent::SetFlySpeed()']]], ['setfollowing_122',['SetFollowing',['../classtram_1_1_ext_1_1_camera_1_1_camera.html#a890d07770b117f45d57435f233f29da3',1,'tram::Ext::Camera::Camera']]], ['setfollowinginterpolation_123',['SetFollowingInterpolation',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a0b2dd1c3281e606b65cabb974583dcab',1,'tram::Ext::Camera::FirstPersonCamera']]], ['setfollowinglookat_124',['SetFollowingLookat',['../classtram_1_1_ext_1_1_camera_1_1_camera.html#a025cfc11ad96bc784c5b6b7dfdfd57cf',1,'tram::Ext::Camera::Camera']]], ['setfollowingoffset_125',['SetFollowingOffset',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a25ab9c4939a27be11cb70b3d5adfda40',1,'tram::Ext::Camera::FirstPersonCamera']]], ['setfont_126',['SetFont',['../namespacetram_1_1_g_u_i.html#a2a3c432ea9156a810b47d5e9836d861a',1,'tram::GUI']]], ['setframe_127',['SetFrame',['../classtram_1_1_animation_component.html#a8f3653661fe211b4b809c1fdbdcc8d08',1,'tram::AnimationComponent::SetFrame()'],['../classtram_1_1_decal_component.html#af3ff3ceaf63a48c77bbadd3788384ce6',1,'tram::DecalComponent::SetFrame()']]], ['setfriction_128',['SetFriction',['../classtram_1_1_f_p_s_controller_component.html#a4a55f5fdc6a0540f3843309ec6f53894',1,'tram::FPSControllerComponent::SetFriction()'],['../classtram_1_1_raycast_controller_component.html#a8e3f7be1fc7488057d7319883300dc5f',1,'tram::RaycastControllerComponent::SetFriction()']]], ['setfromraw_129',['SetFromRaw',['../namespacetram_1_1_settings.html#a1eb24fa09d0b62f743ff74a99945b8ea',1,'tram::Settings']]], ['setfullscreen_130',['SetFullscreen',['../namespacetram_1_1_platform_1_1_window.html#a225b179d574437d4573c016bfeed7fe4',1,'tram::Platform::Window']]], ['setfunction_131',['SetFunction',['../namespacetram_1_1_script.html#a446f2631dceec969ceccee5841e8e019',1,'tram::Script::SetFunction()'],['../classtram_1_1_script_1_1_interface.html#aee03e2ec9682ab4d801bed9eaf53f703',1,'tram::Script::Interface::SetFunction()']]], ['setglobal_132',['SetGlobal',['../namespacetram_1_1_script.html#a3052ee4f8a5d4cba402b9342e3a7b0a6',1,'tram::Script::SetGlobal()'],['../classtram_1_1_script_1_1_interface.html#ac3540126716b8a6a8675cf859ab8152b',1,'tram::Script::Interface::SetGlobal()']]], ['setglyph_133',['SetGlyph',['../namespacetram_1_1_g_u_i.html#ac467099a0542b69fb101532431fef5a1',1,'tram::GUI']]], ['setglyphdefaults_134',['SetGlyphDefaults',['../namespacetram_1_1_g_u_i.html#a8b13f224cb4fc10e56e14f176d93b95d',1,'tram::GUI']]], ['setincrement_135',['SetIncrement',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_trigger.html#ac60462a520bb57318bea757ecbfb9db5',1,'tram::Ext::Kitchensink::QuestTrigger']]], ['setinitialized_136',['SetInitialized',['../namespacetram_1_1_system.html#a268bed781cdfb281916c2475f969b55d',1,'tram::System']]], ['setinputstate_137',['SetInputState',['../namespacetram_1_1_u_i.html#abdd66ea8df097a0c2b314b87850cef35',1,'tram::UI']]], ['setinterceptcallback_138',['SetInterceptCallback',['../structtram_1_1_message.html#ae415c262a095fd620ef84c7c8654a02f',1,'tram::Message']]], ['setinterface_139',['SetInterface',['../namespacetram_1_1_script.html#ad66379be86f633359248ee30b1d7b073',1,'tram::Script']]], ['setinterior_140',['SetInterior',['../classtram_1_1_world_cell.html#a38a76916bccb66a452c50c083aa315bf',1,'tram::WorldCell']]], ['setinteriorlights_141',['SetInteriorLights',['../classtram_1_1_world_cell.html#a8e14746ba0ad7786857dcc73987cc7b9',1,'tram::WorldCell']]], ['setkeyboardlook_142',['SetKeyboardLook',['../classtram_1_1_player_component.html#ab188c1286058f995a0260cc488d32daa',1,'tram::PlayerComponent']]], ['setkeyframe_143',['SetKeyframe',['../classtram_1_1_animation_component.html#a56d81b59bfb31b228aacaeda632474ba',1,'tram::AnimationComponent']]], ['setkinematic_144',['SetKinematic',['../classtram_1_1_physics_component.html#a80d73825a4421015c00f3fe968b6b090',1,'tram::PhysicsComponent']]], ['setlayer_145',['SetLayer',['../namespacetram_1_1_render_1_1_a_p_i.html#afac0e9fbfee600d48f07f13a04ad5e50',1,'tram::Render::API::SetLayer()'],['../classtram_1_1_render_component.html#ad7c9df8966b4b2e87c0afbb9b75fffdc',1,'tram::RenderComponent::SetLayer()']]], ['setlayermask_146',['SetLayerMask',['../classtram_1_1_ext_1_1_camera_1_1_camera.html#ab3f35ec6484b5b14ed1d67fda34e42f8',1,'tram::Ext::Camera::Camera']]], ['setlightdraw_147',['SetLightDraw',['../classtram_1_1_light_component.html#a4a3e561c198c80a5f5ffdbc3168e6dfd',1,'tram::LightComponent']]], ['setlightingparameters_148',['SetLightingParameters',['../namespacetram_1_1_render_1_1_a_p_i.html#aa88196543e9de714a86037204e01f75c',1,'tram::Render::API']]], ['setlightmap_149',['SetLightmap',['../classtram_1_1_render_component.html#a3eb6d145b4258093f8fcd1487edf2874',1,'tram::RenderComponent::SetLightmap()'],['../namespacetram_1_1_render_1_1_a_p_i.html#a3e3f408a1abea6b59284b89e49624950',1,'tram::Render::API::SetLightmap(drawlistentry_t entry, texturehandle_t lightmap)']]], ['setlightparameters_150',['SetLightParameters',['../namespacetram_1_1_render_1_1_a_p_i.html#a832d87127faad4c76d3b09fb0efcbb39',1,'tram::Render::API']]], ['setlights_151',['SetLights',['../namespacetram_1_1_render_1_1_a_p_i.html#ac9af752a04919c1be9443f491ba9364a',1,'tram::Render::API']]], ['setlinearfactor_152',['SetLinearFactor',['../classtram_1_1_physics_component.html#aaf3bcc38317375d73fd6b7b426aaedc2',1,'tram::PhysicsComponent']]], ['setlistenergain_153',['SetListenerGain',['../namespacetram_1_1_audio_1_1_a_p_i.html#a0722507591b4bba19c85e8f9d8088704',1,'tram::Audio::API']]], ['setlistenerorientation_154',['SetListenerOrientation',['../namespacetram_1_1_audio_1_1_a_p_i.html#a0ec692e07524255ef5c814ccbff53b1b',1,'tram::Audio::API::SetListenerOrientation()'],['../namespacetram_1_1_audio.html#acd913701b5ffec0d613acaca89266eab',1,'tram::Audio::SetListenerOrientation()']]], ['setlistenerposition_155',['SetListenerPosition',['../namespacetram_1_1_audio_1_1_a_p_i.html#a8c238a85c44a1be22223921bb836673b',1,'tram::Audio::API::SetListenerPosition()'],['../namespacetram_1_1_audio.html#ae4700c24d6f820914c7f36ea15203727',1,'tram::Audio::SetListenerPosition()']]], ['setlistenertransform_156',['SetListenerTransform',['../classtram_1_1_ext_1_1_camera_1_1_camera.html#af377217d1922777d7d6513b28434c876',1,'tram::Ext::Camera::Camera']]], ['setlocation_157',['SetLocation',['../classtram_1_1_audio_component.html#ad0fc5f3971f62787f84b8150f6a2e1df',1,'tram::AudioComponent::SetLocation()'],['../classtram_1_1_decal_component.html#a1c1f2732d6481c3e25c7a5bca8c0f7e6',1,'tram::DecalComponent::SetLocation()'],['../classtram_1_1_light_component.html#a3eaddbed4577c9c58915b1eafad0617a',1,'tram::LightComponent::SetLocation()'],['../classtram_1_1_physics_component.html#a619f8a0efc2df26aaed1e5ef2e541b0a',1,'tram::PhysicsComponent::SetLocation()'],['../classtram_1_1_render_component.html#a81f2ac27fa4516443e6a11f3371736d4',1,'tram::RenderComponent::SetLocation()'],['../classtram_1_1_trigger_component.html#a0fcaae81162184053fc3354de8fae8cc',1,'tram::TriggerComponent::SetLocation()'],['../classtram_1_1_entity.html#a6e2489225d5ca4a76b702b4d138963de',1,'tram::Entity::SetLocation()']]], ['setlookdirection_158',['SetLookDirection',['../classtram_1_1_controller_component.html#a92c6a99db84d365877eb1e6f45b406ce',1,'tram::ControllerComponent']]], ['setmass_159',['SetMass',['../classtram_1_1_physics_component.html#ae2431ad05061b3ead05fc896aa78fa8b',1,'tram::PhysicsComponent']]], ['setmaterial_160',['SetMaterial',['../classtram_1_1_render_1_1_sprite.html#a0bac764220b653067aaed890943d28cc',1,'tram::Render::Sprite']]], ['setmaterialcolor_161',['SetMaterialColor',['../namespacetram_1_1_render_1_1_a_p_i.html#a58fe214fe7c887e0911762eefa69f1ef',1,'tram::Render::API']]], ['setmaterialfilter_162',['SetMaterialFilter',['../classtram_1_1_render_1_1_material.html#a37155313cda78e8032afeed80b2dc8bc',1,'tram::Render::Material']]], ['setmaterialproperty_163',['SetMaterialProperty',['../classtram_1_1_render_1_1_material.html#a15456a50f775b0b406e376947b71bb04',1,'tram::Render::Material']]], ['setmaterialreflectivity_164',['SetMaterialReflectivity',['../namespacetram_1_1_render_1_1_a_p_i.html#a777441cfb7c5806fcc7411a51739af30',1,'tram::Render::API']]], ['setmaterialspecularexponent_165',['SetMaterialSpecularExponent',['../namespacetram_1_1_render_1_1_a_p_i.html#a6fca8cce2a22ed1edf6cc3fe8f241c7f',1,'tram::Render::API']]], ['setmaterialspeculartransparency_166',['SetMaterialSpecularTransparency',['../namespacetram_1_1_render_1_1_a_p_i.html#a071cd1636bc88d93e740e78ad0c6a3be',1,'tram::Render::API']]], ['setmaterialspecularweight_167',['SetMaterialSpecularWeight',['../namespacetram_1_1_render_1_1_a_p_i.html#a295d16334d54c86ddc7599a56546dc56',1,'tram::Render::API']]], ['setmaterialtexture_168',['SetMaterialTexture',['../namespacetram_1_1_render_1_1_a_p_i.html#a8bd81654a22565c08d8b34aa9c405c14',1,'tram::Render::API']]], ['setmaterialtype_169',['SetMaterialType',['../classtram_1_1_render_1_1_material.html#a25207b8d6b7c4ed0805a732bc196125e',1,'tram::Render::Material']]], ['setmatrix_170',['SetMatrix',['../namespacetram_1_1_render_1_1_a_p_i.html#ad62b8a1dc88abdbcf24dbcbc97571b22',1,'tram::Render::API']]], ['setmediumlist_171',['SetMediumList',['../classtram_1_1_file_writer.html#a9c50a8afb948a19a9bc89d6353046aab',1,'tram::FileWriter']]], ['setmessagetype_172',['SetMessageType',['../classtram_1_1_ext_1_1_menu_1_1_message_send.html#a44e7e4389ab204102b9d53581be518d7',1,'tram::Ext::Menu::MessageSend']]], ['setmodel_173',['SetModel',['../classtram_1_1_animation_component.html#ae18431fe0083fcb808cf91cac0a25ee2',1,'tram::AnimationComponent::SetModel()'],['../classtram_1_1_physics_component.html#acceb6cafd1dd8635ed56ec71a1c61f85',1,'tram::PhysicsComponent::SetModel()'],['../classtram_1_1_animation_component.html#a8a927071d5509777104ff0de4d613782',1,'tram::AnimationComponent::SetModel()'],['../classtram_1_1_render_component.html#ab4769cf5994097dc687169595ceac02b',1,'tram::RenderComponent::SetModel()'],['../classtram_1_1_trigger_component.html#a1c35e8061d5dc72e113fa4fc52f875fc',1,'tram::TriggerComponent::SetModel(name_t model)'],['../classtram_1_1_trigger_component.html#ae965164c2483a255585e9998abe87df9',1,'tram::TriggerComponent::SetModel(Physics::CollisionModel *model)']]], ['setmonitor_174',['SetMonitor',['../namespacetram_1_1_platform_1_1_window.html#a58daaf85f6e0870b9bcdb2a443356213',1,'tram::Platform::Window']]], ['setmouselook_175',['SetMouselook',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#ade2f1910a021d9f4b2e836fa170f9f4a',1,'tram::Ext::Camera::FirstPersonCamera']]], ['setneardistance_176',['SetNearDistance',['../classtram_1_1_render_1_1_model.html#a5e2bf8fce6f1b151e5ce019d437f7604',1,'tram::Render::Model']]], ['setnoclip_177',['SetNoclip',['../classtram_1_1_player_component.html#a9a1e25c0111518b35070974b80a1ce7d',1,'tram::PlayerComponent']]], ['setobjective_178',['SetObjective',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_trigger.html#acd10df0459a57b9b8384a697d1a67ea8',1,'tram::Ext::Kitchensink::QuestTrigger']]], ['setoffset_179',['SetOffset',['../classtram_1_1_ext_1_1_menu_1_1_intercept_menu.html#a5b0714060be9fd26726a1aa37108edc2',1,'tram::Ext::Menu::InterceptMenu']]], ['setonanimationfinishcallback_180',['SetOnAnimationFinishCallback',['../classtram_1_1_animation_component.html#a82fda1bdec933e8b63788b286081885a',1,'tram::AnimationComponent']]], ['setorientation_181',['SetOrientation',['../classtram_1_1_path_follower.html#aca1321d0863fe982ec2d827135ab8ee2',1,'tram::PathFollower']]], ['setorthoratio_182',['SetOrthoRatio',['../namespacetram_1_1_render.html#aa988a06a114b75baae33e244628ecd32',1,'tram::Render']]], ['setparameters_183',['SetParameters',['../classtram_1_1_static_world_object.html#a48e342917b51b7002d803a43d32daca3',1,'tram::StaticWorldObject::SetParameters()'],['../classtram_1_1_trigger.html#a2537a228019f8807f75f7169238614e4',1,'tram::Trigger::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a29563d3cf838e8bd7f981b155a61fb72',1,'tram::Ext::Kitchensink::Button::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_breakable.html#af79ddccccc2a9a8fabb87a5634e91c3d',1,'tram::Ext::Kitchensink::Breakable::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_water.html#ad17e120992eba3ccc7a4a17160a8bfa3',1,'tram::Ext::Kitchensink::Water::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_train.html#a46ab45c6f44dbf65bc6dcdfff52f9798',1,'tram::Ext::Kitchensink::Train::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_pickup.html#a7b7238d413eddcfdda31aeff7e55afb0',1,'tram::Ext::Kitchensink::Pickup::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_text.html#a8358248f0c5e4f2f1a8d6c999454f483',1,'tram::Ext::Kitchensink::DebugText::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_shape.html#a1ecd14f21602db88a06c2b160cfa9174',1,'tram::Ext::Kitchensink::DebugShape::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_autosave.html#a588c6567a94f6b471ae8528053ca244a',1,'tram::Ext::Kitchensink::TriggerAutosave::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_hurt.html#a6c720eeebbc10b399c75cbf7225f8f7b',1,'tram::Ext::Kitchensink::TriggerHurt::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_once.html#a18ef2e180b564569ebfb773ec83d9e45',1,'tram::Ext::Kitchensink::TriggerOnce::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_multiple.html#a0acfdc56498029e59f4eaa3f389b8967',1,'tram::Ext::Kitchensink::TriggerMultiple::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_push.html#a0a01698a8de860ef2d97e6a0f57b7c25',1,'tram::Ext::Kitchensink::TriggerPush::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_remove.html#ac802678eba14b6f7396fa242f3b389fa',1,'tram::Ext::Kitchensink::TriggerRemove::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_teleport.html#ac617bac29cb094149c2904a13c2e0de1',1,'tram::Ext::Kitchensink::TriggerTeleport::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_player_movement.html#ad550edd2a6389a2ce7ef3e840dd14e7a',1,'tram::Ext::Kitchensink::TriggerPlayerMovement::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_quest_entity.html#adc40d013900ce2da25ac6487593b24bb',1,'tram::Ext::Kitchensink::QuestEntity::SetParameters()'],['../classtram_1_1_entity.html#ac9e3adac30cac41573d2bdda676a0832',1,'tram::Entity::SetParameters()'],['../classtram_1_1_crate.html#a2fd93587f542e04c90e066df25468540',1,'tram::Crate::SetParameters()'],['../classtram_1_1_decoration.html#a6bd26ad8c997a12796c4523dd0f3f8e6',1,'tram::Decoration::SetParameters()'],['../classtram_1_1_light.html#a4c76b25a1ea34c90b9eed095443e143f',1,'tram::Light::SetParameters()'],['../classtram_1_1_marker.html#a6217c8c7e40bb9a4904b28c2d0c44ded',1,'tram::Marker::SetParameters()'],['../classtram_1_1_player.html#ad91ecec5652fba7dc3d061b7823bc699',1,'tram::Player::SetParameters()'],['../classtram_1_1_scriptable.html#aa5c6c82c64f014b7a9068899f7282c68',1,'tram::Scriptable::SetParameters()'],['../classtram_1_1_sound.html#ab40d5d4f1ca14bcd32a252326f333bfa',1,'tram::Sound::SetParameters()']]], ['setparent_184',['SetParent',['../classtram_1_1_entity_component.html#a1683ad236bce69ab4b2c2dac75ef526a',1,'tram::EntityComponent']]], ['setpause_185',['SetPause',['../classtram_1_1_animation_component.html#a73a899480e5814119ddb716c93253b4a',1,'tram::AnimationComponent']]], ['setpersistent_186',['SetPersistent',['../classtram_1_1_entity.html#a0143b5547a4eeef3e1501defe9882514',1,'tram::Entity']]], ['setpicked_187',['SetPicked',['../classtram_1_1_ext_1_1_menu_1_1_entity_properties.html#a2465ce3aca5ad2e0b1e7b4b69090132c',1,'tram::Ext::Menu::EntityProperties::SetPicked()'],['../classtram_1_1_ext_1_1_menu_1_1_world_cell_properties.html#a93063bcbb048c2fd86995f4ca5ad0ab4',1,'tram::Ext::Menu::WorldCellProperties::SetPicked()']]], ['setplayspeed_188',['SetPlaySpeed',['../classtram_1_1_sprite_component.html#af67c5b9890fa7c815e53e39927db6c81',1,'tram::SpriteComponent']]], ['setpose_189',['SetPose',['../namespacetram_1_1_render_1_1_a_p_i.html#a5a2dbe49094868d5a7efea439f9148f0',1,'tram::Render::API']]], ['setposition_190',['SetPosition',['../classtram_1_1_ext_1_1_camera_1_1_camera.html#a551344bef8e92a63362a56e61ba47e93',1,'tram::Ext::Camera::Camera']]], ['setprojectionmatrix_191',['SetProjectionMatrix',['../namespacetram_1_1_render_1_1_a_p_i.html#a8712a5ab1b0f028eb8559586b458262d',1,'tram::Render::API']]], ['setrawinput_192',['SetRawInput',['../namespacetram_1_1_platform_1_1_window.html#aa2fd499590eebaf0a891068d1bac9945',1,'tram::Platform::Window']]], ['setreflectivity_193',['SetReflectivity',['../classtram_1_1_render_1_1_material.html#a9ec5c89d070ff541a3ac8b449524a1be',1,'tram::Render::Material']]], ['setrelation_194',['SetRelation',['../classtram_1_1_ext_1_1_kitchensink_1_1_faction.html#a925e58834615871b89a1e8e7e223a54b',1,'tram::Ext::Kitchensink::Faction']]], ['setrenderdebug_195',['SetRenderDebug',['../classtram_1_1_render_component.html#a5957906efb717b5596b1c6f12fbe6ded',1,'tram::RenderComponent']]], ['setrepeating_196',['SetRepeating',['../classtram_1_1_audio_component.html#aa6d30f7ac730409c6d4a50edfc1d2ee9',1,'tram::AudioComponent']]], ['setrepeats_197',['SetRepeats',['../classtram_1_1_animation_component.html#ab837c1cffe19cc9baa3ea3bc80577cdb',1,'tram::AnimationComponent']]], ['setrigidbodyangularfactor_198',['SetRigidbodyAngularFactor',['../namespacetram_1_1_physics_1_1_a_p_i.html#a7c4e5faa028c12c82946698a1110c1cd',1,'tram::Physics::API']]], ['setrigidbodycollisioncallback_199',['SetRigidbodyCollisionCallback',['../namespacetram_1_1_physics_1_1_a_p_i.html#aacd35951302ec4c164498096dc1b4f59',1,'tram::Physics::API']]], ['setrigidbodycollisiongroup_200',['SetRigidbodyCollisionGroup',['../namespacetram_1_1_physics_1_1_a_p_i.html#a1c06fae565edc0f7e9724d2699d206e5',1,'tram::Physics::API']]], ['setrigidbodycollisionmask_201',['SetRigidbodyCollisionMask',['../namespacetram_1_1_physics_1_1_a_p_i.html#a6a8846f245dd0179318174a1e7379c8e',1,'tram::Physics::API']]], ['setrigidbodydebugdrawing_202',['SetRigidbodyDebugDrawing',['../namespacetram_1_1_physics_1_1_a_p_i.html#a94909ae121eee8f34565dc482b16d74d',1,'tram::Physics::API']]], ['setrigidbodykinematic_203',['SetRigidbodyKinematic',['../namespacetram_1_1_physics_1_1_a_p_i.html#a69384c8fc4867f74184957c7b70ab882',1,'tram::Physics::API']]], ['setrigidbodylinearfactor_204',['SetRigidbodyLinearFactor',['../namespacetram_1_1_physics_1_1_a_p_i.html#a4adab24a698129a226d8dc841539738a',1,'tram::Physics::API']]], ['setrigidbodylocation_205',['SetRigidbodyLocation',['../namespacetram_1_1_physics_1_1_a_p_i.html#ac2cbf02cab4746c0351a894fe480d166',1,'tram::Physics::API']]], ['setrigidbodymass_206',['SetRigidbodyMass',['../namespacetram_1_1_physics_1_1_a_p_i.html#a679d86cb7ebb5221e0c7655f728392b7',1,'tram::Physics::API']]], ['setrigidbodyrotation_207',['SetRigidbodyRotation',['../namespacetram_1_1_physics_1_1_a_p_i.html#a3d0d81d724fbaf34ae5c7b159fe61aef',1,'tram::Physics::API']]], ['setrigidbodytransformcallback_208',['SetRigidbodyTransformCallback',['../namespacetram_1_1_physics_1_1_a_p_i.html#ad0713a3c44d84eee3bd0823cb58705f6',1,'tram::Physics::API::SetRigidbodyTransformCallback(rigidbody_t rigidbody, std::pair< vec3, quat >(*get_transform_callback)(void *), void(*set_transform_callback)(void *, std::pair< vec3, quat >), void *data)'],['../namespacetram_1_1_physics_1_1_a_p_i.html#a0abede70f73e5a367c12fc46a28b6fa3',1,'tram::Physics::API::SetRigidbodyTransformCallback(rigidbody_t rigidbody, get_trf_callback get_callback, set_trf_callback set_callback, void *data)']]], ['setrigidbodyvelocity_209',['SetRigidbodyVelocity',['../namespacetram_1_1_physics_1_1_a_p_i.html#ae4a9270ecabf522b0978581496d4f0b7',1,'tram::Physics::API']]], ['setrotatefollowing_210',['SetRotateFollowing',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a81a3ae850df9d192387b0a16e39fe160',1,'tram::Ext::Camera::FirstPersonCamera']]], ['setrotation_211',['SetRotation',['../classtram_1_1_decal_component.html#ab83fc898b9b0eebb2534149a51d0bbad',1,'tram::DecalComponent::SetRotation()'],['../classtram_1_1_physics_component.html#a012cb69d2fc0bc2dedacd198e2de04dc',1,'tram::PhysicsComponent::SetRotation()'],['../classtram_1_1_render_component.html#ac254a9ca5d3e3aaf19831ed8cba3da74',1,'tram::RenderComponent::SetRotation()'],['../classtram_1_1_trigger_component.html#afa86224935cc08c00224dc774da9c71d',1,'tram::TriggerComponent::SetRotation()'],['../classtram_1_1_entity.html#a9a15c4d86ef5f814eb8cc9b70cb8ced3',1,'tram::Entity::SetRotation()'],['../classtram_1_1_ext_1_1_camera_1_1_camera.html#a1c2bd59cd7281d90dbc88be202982a93',1,'tram::Ext::Camera::Camera::SetRotation()']]], ['setrunspeed_212',['SetRunSpeed',['../classtram_1_1_f_p_s_controller_component.html#a35420874880b9df73e292e495aa1e1dc',1,'tram::FPSControllerComponent::SetRunSpeed()'],['../classtram_1_1_raycast_controller_component.html#afec9667d19d362fddf18e23fe5375c2a',1,'tram::RaycastControllerComponent::SetRunSpeed()']]], ['setscale_213',['SetScale',['../classtram_1_1_decal_component.html#a0f75089eb63e3ad93137cad8a208a85c',1,'tram::DecalComponent::SetScale()'],['../classtram_1_1_render_component.html#ad4839670e65963fc3c247f01de60e8a3',1,'tram::RenderComponent::SetScale()'],['../namespacetram_1_1_platform_1_1_window.html#ad7000ba82ae8a78716a4d46451b7e3fc',1,'tram::Platform::Window::SetScale()'],['../namespacetram_1_1_platform.html#a13e3e0fd03175cb1a3fcab404e3f0ef5',1,'tram::Platform::SetScale()']]], ['setscaling_214',['SetScaling',['../namespacetram_1_1_g_u_i.html#abc96e6226a9e9abe317c04fe4661ee35',1,'tram::GUI']]], ['setscreenclear_215',['SetScreenClear',['../namespacetram_1_1_render_1_1_a_p_i.html#a4546d61832af8f8af9038e5d060afe70',1,'tram::Render::API']]], ['setscreensize_216',['SetScreenSize',['../namespacetram_1_1_render.html#abcb118a759504ad9bc0993ca69f7231e',1,'tram::Render::SetScreenSize()'],['../namespacetram_1_1_render_1_1_a_p_i.html#a453419fa3a31de6918ce7c54454b1314',1,'tram::Render::API::SetScreenSize()']]], ['setsearchlist_217',['SetSearchList',['../classtram_1_1_file_reader.html#a8a7d782b12279f564439c0438365c91a',1,'tram::FileReader']]], ['setselectedtext_218',['SetSelectedText',['../namespacetram_1_1_g_u_i.html#a2cea0738110390ba9a29efd3abde74ed',1,'tram::GUI']]], ['setshape_219',['SetShape',['../classtram_1_1_physics_component.html#a0956a47778936024e1d1b245728a680c',1,'tram::PhysicsComponent::SetShape()'],['../classtram_1_1_trigger_component.html#af69d3a60b12eebbbdec84c83b049941e',1,'tram::TriggerComponent::SetShape()']]], ['setsize_220',['SetSize',['../namespacetram_1_1_platform_1_1_window.html#af936ef79e15427ab64724cb9c0b102d2',1,'tram::Platform::Window']]], ['setsound_221',['SetSound',['../classtram_1_1_audio_component.html#a736977966c4d0485ef879349eeef271e',1,'tram::AudioComponent']]], ['setsource_222',['SetSource',['../classtram_1_1_render_1_1_material.html#a5f29589bc4853e8f7a7b321be58fc51b',1,'tram::Render::Material']]], ['setsourcedraw_223',['SetSourceDraw',['../classtram_1_1_audio_component.html#a07c6b771da60423e0357a1c872db6ed3',1,'tram::AudioComponent']]], ['setspecular_224',['SetSpecular',['../classtram_1_1_render_1_1_material.html#a059b96f9b911c30041d21d47ac27cb6f',1,'tram::Render::Material']]], ['setspeed_225',['SetSpeed',['../classtram_1_1_animation_component.html#acfacd194c9559609030b7aff261ea9f1',1,'tram::AnimationComponent']]], ['setsphericalharmonic_226',['SetSphericalHarmonic',['../namespacetram_1_1_render_1_1_a_p_i.html#a10c0e3ee3da9bfa728e219bf497ed773',1,'tram::Render::API']]], ['setsprite_227',['SetSprite',['../classtram_1_1_decal_component.html#aa1a667b7f5e747d2216eeab28bf99de9',1,'tram::DecalComponent::SetSprite()'],['../classtram_1_1_particle_component.html#a8798a3b667e45954102f0eae33d3b941',1,'tram::ParticleComponent::SetSprite()'],['../classtram_1_1_sprite_component.html#a567f7ce43923f04380bc6a04d8f4b5a2',1,'tram::SpriteComponent::SetSprite()']]], ['setstate_228',['SetState',['../namespacetram_1_1_system.html#a3b2b06b04a927a1cbb754d1054130ddb',1,'tram::System']]], ['setstateanimation_229',['SetStateAnimation',['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_table.html#a504aca8b015e8fca48124474966a6e1e',1,'tram::Ext::Kitchensink::AnimationTable']]], ['setstatenextstate_230',['SetStateNextState',['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_table.html#a57b233bcdc733ea9c7128d23499ef5cc',1,'tram::Ext::Kitchensink::AnimationTable']]], ['setstepheight_231',['SetStepHeight',['../classtram_1_1_raycast_controller_component.html#a8152d995918ad6bda5a35d3bbf4be894',1,'tram::RaycastControllerComponent::SetStepHeight()'],['../classtram_1_1_f_p_s_controller_component.html#a70b7b9fae981e57ff334e5a5a5abbc8f',1,'tram::FPSControllerComponent::SetStepHeight()']]], ['setstorecollisions_232',['SetStoreCollisions',['../classtram_1_1_trigger_component.html#a646ebe8013bad9a91574d603995847b5',1,'tram::TriggerComponent']]], ['setsuncolor_233',['SetSunColor',['../namespacetram_1_1_render.html#a8804912a4838fc7b29819738b86f2b68',1,'tram::Render']]], ['setsundirection_234',['SetSunDirection',['../namespacetram_1_1_render.html#a542bb444bfd6387612406c107509bbff',1,'tram::Render']]], ['setsystemloggingseverity_235',['SetSystemLoggingSeverity',['../namespacetram.html#ad33d1b97d4055d1dc0ed20da61825d07',1,'tram']]], ['settextureoffset_236',['SetTextureOffset',['../classtram_1_1_render_component.html#ad0cdc3be1acbe43f6fd315948c73611a',1,'tram::RenderComponent']]], ['settexturetype_237',['SetTextureType',['../classtram_1_1_render_1_1_material.html#a0dd09cbb341520b030f16cc4f64a2689',1,'tram::Render::Material']]], ['settilt_238',['SetTilt',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a264a29b441d6180743b3a59b7d14476f',1,'tram::Ext::Camera::FirstPersonCamera']]], ['setting_5flimit_239',['SETTING_LIMIT',['../namespacetram_1_1_settings.html#a18bc51cda3b8cbce070d4d8a3dfef15f',1,'tram::Settings']]], ['settinginfo_240',['SettingInfo',['../structtram_1_1_settings_1_1_setting_info.html',1,'tram::Settings']]], ['settings_2ecpp_241',['settings.cpp',['../settings_8cpp.html',1,'']]], ['settings_2eh_242',['settings.h',['../settings_8h.html',1,'']]], ['settingsmenu_243',['SettingsMenu',['../classtram_1_1_ext_1_1_menu_1_1_settings_menu.html',1,'tram::Ext::Menu']]], ['settitle_244',['SetTitle',['../namespacetram_1_1_platform_1_1_window.html#a9c20800318f5aa9b5d9b8a357c20e7e5',1,'tram::Platform::Window']]], ['settransformcallback_245',['SetTransformCallback',['../classtram_1_1_physics_1_1_a_p_i_1_1_callback_motion_state.html#aa4cd905f3f85673090c5cd67957a8307',1,'tram::Physics::API::CallbackMotionState']]], ['settriggercollisioncallback_246',['SetTriggerCollisionCallback',['../namespacetram_1_1_physics_1_1_a_p_i.html#a92e3c5b470bbf94447cc20b17aa4397e',1,'tram::Physics::API']]], ['settriggercollisiongroup_247',['SetTriggerCollisionGroup',['../namespacetram_1_1_physics_1_1_a_p_i.html#af28f53e5e058544eebb6f3fb1dca5810',1,'tram::Physics::API']]], ['settriggercollisionmask_248',['SetTriggerCollisionMask',['../namespacetram_1_1_physics_1_1_a_p_i.html#aa4126218afb311b1eebc568240714fbd',1,'tram::Physics::API']]], ['settriggerlocation_249',['SetTriggerLocation',['../namespacetram_1_1_physics_1_1_a_p_i.html#a7562c6255d4d3aa1f54ea321af65a4f8',1,'tram::Physics::API']]], ['settriggerrotation_250',['SetTriggerRotation',['../namespacetram_1_1_physics_1_1_a_p_i.html#ad66528623ab1c92b411137a246641b6e',1,'tram::Physics::API']]], ['setupdateparenttransform_251',['SetUpdateParentTransform',['../classtram_1_1_physics_component.html#a1a84053f86862350a329a1607c62f9a7',1,'tram::PhysicsComponent']]], ['setupmodel_252',['SetupModel',['../classtram_1_1_trigger.html#a888c3a8eafbed2f160ada1af651de268',1,'tram::Trigger::SetupModel()'],['../classtram_1_1_light_component.html#ae603c601fe95f22db85c49b1bc53f800',1,'tram::LightComponent::SetupModel()'],['../classtram_1_1_audio_component.html#aacd7fc7a708e8bae044c8fa34bca2031',1,'tram::AudioComponent::SetupModel()']]], ['setvalue_253',['SetValue',['../classtram_1_1_value_ptr.html#a611fec6779600e3a3508e87fa9a83f6a',1,'tram::ValuePtr::SetValue()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_trigger.html#aded1963fcaa2fe9e73bd27258d16b7af',1,'tram::Ext::Kitchensink::QuestTrigger::SetValue()']]], ['setvariable_254',['SetVariable',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest.html#a923d2830ead5ba315b40a9b8551dda7e',1,'tram::Ext::Kitchensink::Quest']]], ['setvelocity_255',['SetVelocity',['../classtram_1_1_physics_component.html#a8570e4138cdd40ea3547017f2fff1394',1,'tram::PhysicsComponent']]], ['setviewdistance_256',['SetViewDistance',['../namespacetram_1_1_render.html#a6957c2557d41fe2fb76646cea2266eeb',1,'tram::Render']]], ['setviewfov_257',['SetViewFov',['../namespacetram_1_1_render.html#a2aaf3e85135fa18435eb0d9412ca3a6d',1,'tram::Render']]], ['setviewmatrix_258',['SetViewMatrix',['../namespacetram_1_1_render_1_1_a_p_i.html#a23c877f60360662f3a1de1fd11957936',1,'tram::Render::API']]], ['setviewparameters_259',['SetViewParameters',['../namespacetram_1_1_render_1_1_a_p_i.html#a860017f77f92d43c2b09b5ff526d61b4',1,'tram::Render::API']]], ['setviewposition_260',['SetViewPosition',['../namespacetram_1_1_render.html#a844a096223a3c0f236c7ef8f304a24f8',1,'tram::Render']]], ['setviewrotation_261',['SetViewRotation',['../namespacetram_1_1_render.html#a81a4ef257882a1513b6077fd05d1d1c7',1,'tram::Render']]], ['setviewtransform_262',['SetViewTransform',['../classtram_1_1_ext_1_1_camera_1_1_camera.html#a391d685c473cd0dcabbeb372938357f5',1,'tram::Ext::Camera::Camera']]], ['setvolume_263',['SetVolume',['../namespacetram_1_1_audio.html#a95222c442aeb50c4b0efd0c1a284eea3',1,'tram::Audio']]], ['setvsync_264',['SetVsync',['../namespacetram_1_1_platform_1_1_window.html#adf3bd7faf17dc6100dd061c8aa1bfaa4',1,'tram::Platform::Window']]], ['setwalkspeed_265',['SetWalkSpeed',['../classtram_1_1_raycast_controller_component.html#aec04a4c35f1bc0449e3f944e9034d7c3',1,'tram::RaycastControllerComponent::SetWalkSpeed()'],['../classtram_1_1_f_p_s_controller_component.html#a5a0be1714e44e2397bf5339ec569f8ba',1,'tram::FPSControllerComponent::SetWalkSpeed(float speed)']]], ['setwallcollisioncallback_266',['SetWallCollisionCallback',['../classtram_1_1_f_p_s_controller_component.html#a245323aa009e05cb44bde289b2ca75e2',1,'tram::FPSControllerComponent::SetWallCollisionCallback()'],['../classtram_1_1_raycast_controller_component.html#af9a6f218caee176cc5b25510edc9b34f',1,'tram::RaycastControllerComponent::SetWallCollisionCallback()']]], ['setwebmainloop_267',['SetWebMainLoop',['../namespacetram_1_1_u_i.html#a654d5f4b77f90147a9098acce21b19df',1,'tram::UI']]], ['setweight_268',['SetWeight',['../classtram_1_1_animation_component.html#a6433689ecdafdbcfe82ba1436a21f41c',1,'tram::AnimationComponent']]], ['setwindowsize_269',['SetWindowSize',['../namespacetram_1_1_u_i.html#a39ef71fa7757a83fa159686920f16f78',1,'tram::UI']]], ['setwindowtitle_270',['SetWindowTitle',['../namespacetram_1_1_u_i.html#a390f8622eafc311400a2454f11dfc016',1,'tram::UI']]], ['setworldtransform_271',['setWorldTransform',['../classtram_1_1_physics_1_1_a_p_i_1_1_callback_motion_state.html#a813941aee5728ff97d671972b1b180b7',1,'tram::Physics::API::CallbackMotionState']]], ['severity_272',['Severity',['../namespacetram.html#a34ab368bc856f9bd71bfcb4f2bb86c56',1,'tram']]], ['shader_273',['shader',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#ae0e14420c779fa4bc2fbd4f8246ce78b',1,'tram::Render::API::GLDrawListEntry']]], ['shader_2ecpp_274',['shader.cpp',['../shader_8cpp.html',1,'']]], ['shader_2eh_275',['shader.h',['../shader_8h.html',1,'']]], ['shader_5flightmap_276',['SHADER_LIGHTMAP',['../namespacetram_1_1_render_1_1_a_p_i.html#a0a0206969f4d402cd5e729bd34391517a32b9ba4ddcd11c5cc6742966a1c24e53',1,'tram::Render::API']]], ['shader_5fnone_277',['SHADER_NONE',['../namespacetram_1_1_render_1_1_a_p_i.html#a0a0206969f4d402cd5e729bd34391517a924f5c47b4962d4252d116c2e4641fc4',1,'tram::Render::API']]], ['shader_5fpath_278',['shader_path',['../namespacetram_1_1_render_1_1_a_p_i.html#a55369c124562c90d626b1a67a3e2477e',1,'tram::Render::API']]], ['shader_5fspecular_279',['SHADER_SPECULAR',['../namespacetram_1_1_render_1_1_a_p_i.html#a0a0206969f4d402cd5e729bd34391517aaf523bd1d505855eb402ae729cb552a0',1,'tram::Render::API']]], ['shaderbuffer_280',['ShaderBuffer',['../classtram_1_1_render_1_1_a_p_i_1_1_shader_buffer.html',1,'tram::Render::API']]], ['shaderflag_281',['ShaderFlag',['../namespacetram_1_1_render_1_1_a_p_i.html#a0a0206969f4d402cd5e729bd34391517',1,'tram::Render::API']]], ['shaderflags_5ft_282',['shaderflags_t',['../namespacetram_1_1_render_1_1_a_p_i.html#adc040e3232e63f994c1e3c1d1579c976',1,'tram::Render::API']]], ['shaderuniformmatrices_283',['ShaderUniformMatrices',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_matrices.html',1,'tram::Render::API']]], ['shaderuniformmodelmatrices_284',['ShaderUniformModelMatrices',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html',1,'tram::Render::API']]], ['shake_5fmultiplier_285',['shake_multiplier',['../namespacetram_1_1_ext_1_1_camera.html#a810e7f445faeca85ab997f2c0d9c4bed',1,'tram::Ext::Camera']]], ['shape_286',['shape',['../structtram_1_1_physics_1_1_a_p_i_1_1_collision_shape_transform.html#a05e28343c7cc2518e829f6f8151d22d8',1,'tram::Physics::API::CollisionShapeTransform::shape()'],['../classtram_1_1_physics_1_1_collision_model.html#a1e1df5d474c902a9043f7c2c3f5526bd',1,'tram::Physics::CollisionModel::shape()']]], ['shape_287',['Shape',['../namespacetram_1_1_physics.html#abe8615cdc9ae6d697635a3a024e90470',1,'tram::Physics']]], ['shape_5fbox_288',['SHAPE_BOX',['../namespacetram_1_1_physics.html#abe8615cdc9ae6d697635a3a024e90470ab5dfdaaa7551c0d3dfc1f83fe5e2c5c4',1,'tram::Physics']]], ['shape_5fcapsule_289',['SHAPE_CAPSULE',['../namespacetram_1_1_physics.html#abe8615cdc9ae6d697635a3a024e90470a7b5b398889fced1c5ab79ab282dc4070',1,'tram::Physics']]], ['shape_5fcone_290',['SHAPE_CONE',['../namespacetram_1_1_physics.html#abe8615cdc9ae6d697635a3a024e90470a0e7a9317522c84731b8a3610ed56023b',1,'tram::Physics']]], ['shape_5fcylinder_291',['SHAPE_CYLINDER',['../namespacetram_1_1_physics.html#abe8615cdc9ae6d697635a3a024e90470af2ee4d68fba8f9cafa1b5e46fbf84f04',1,'tram::Physics']]], ['shape_5fhull_292',['SHAPE_HULL',['../namespacetram_1_1_physics.html#abe8615cdc9ae6d697635a3a024e90470aebd34133bb70b2f3b749a97ecba9a7c6',1,'tram::Physics']]], ['shape_5fmesh_293',['SHAPE_MESH',['../namespacetram_1_1_physics.html#abe8615cdc9ae6d697635a3a024e90470a8c92deed143d83925369f4bbac1d79d3',1,'tram::Physics']]], ['shape_5fsphere_294',['SHAPE_SPHERE',['../namespacetram_1_1_physics.html#abe8615cdc9ae6d697635a3a024e90470a2e2d1dec24f7a13509f6c93e916c29de',1,'tram::Physics']]], ['shapecast_295',['Shapecast',['../namespacetram_1_1_physics.html#a415045d72320d7d4512e4ecdc430d89f',1,'tram::Physics::Shapecast()'],['../namespacetram_1_1_physics_1_1_a_p_i.html#af1231217a76d2c25b7134554ce9dac2d',1,'tram::Physics::API::Shapecast()']]], ['shapecastcallback_296',['ShapecastCallback',['../structtram_1_1_physics_1_1_a_p_i_1_1_shapecast_callback.html#a71bda3c478c917d209b6513b99c1f1b1',1,'tram::Physics::API::ShapecastCallback::ShapecastCallback()'],['../structtram_1_1_physics_1_1_a_p_i_1_1_shapecast_callback.html',1,'tram::Physics::API::ShapecastCallback']]], ['sharedentitydata_297',['SharedEntityData',['../structtram_1_1_shared_entity_data.html',1,'tram']]], ['short_5fname_298',['short_name',['../structtram_1_1_system_1_1_system_info.html#af25347b2e3971892ca5c6cd2b9b782cd',1,'tram::System::SystemInfo']]], ['shouldexit_299',['ShouldExit',['../namespacetram_1_1_u_i.html#a5f001c3dd4e24194b7b8b7e6ae73d6b4',1,'tram::UI::ShouldExit()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_dialog_controller.html#ab1134f34b965c2b538a4d8ca670c233b',1,'tram::Ext::Kitchensink::DialogController::ShouldExit()']]], ['showerrordialog_300',['ShowErrorDialog',['../namespacetram_1_1_platform.html#a43ffc908587bc0a0680d4e923bf6fb54',1,'tram::Platform']]], ['signal_301',['Signal',['../structtram_1_1_signal.html',1,'tram']]], ['signal_2ecpp_302',['signal.cpp',['../signal_8cpp.html',1,'']]], ['signal_2eh_303',['signal.h',['../signal_8h.html',1,'']]], ['signal_5fcount_304',['signal_count',['../classtram_1_1_signal_table.html#a938437fad98477de3bdc6ff5238fcff1',1,'tram::SignalTable']]], ['signal_5ft_305',['signal_t',['../namespacetram.html#a2efd897a3a954a002664292b5d6264d6',1,'tram']]], ['signal_5ftype_5flimit_306',['SIGNAL_TYPE_LIMIT',['../namespacetram.html#a9773c849e7f41480842e5cd1d8d4de73',1,'tram']]], ['signalmenu_307',['SignalMenu',['../classtram_1_1_ext_1_1_menu_1_1_signal_menu.html',1,'tram::Ext::Menu']]], ['signals_308',['signals',['../classtram_1_1_signal_table.html#ad8d71747477523bc6cd3ebaf8af62397',1,'tram::SignalTable::signals()'],['../classtram_1_1_entity.html#a32d15f20656ffc4da923380374605df0',1,'tram::Entity::signals()']]], ['signaltable_309',['SignalTable',['../classtram_1_1_signal_table.html',1,'tram']]], ['size_310',['size',['../classtram_1_1_hashmap.html#a42d72204053c0f76f228ffcbd5b70411',1,'tram::Hashmap::size()'],['../classtram_1_1_value_array.html#ac33d43e6eeffbfaad8a4349dd56c2230',1,'tram::ValueArray::size()'],['../classtram_1_1_stack_pool.html#aa1b01a988e50384b053dab3204b2872f',1,'tram::StackPool::size()'],['../classtram_1_1_pool.html#aeac3545f8646c676dcc84748db30dfcc',1,'tram::Pool::size()'],['../classtram_1_1_queue.html#afc039b82d19e4eedbcc47c0f537a7fd4',1,'tram::Queue::size()'],['../classtram_1_1_stack.html#a1b57914b1686d486e8e724dd4ef511b2',1,'tram::Stack::size()'],['../structtram_1_1_render_1_1_vertex_attribute.html#a4b9b3ff2c6594e5c1cecbc5d362ab4b8',1,'tram::Render::VertexAttribute::size()']]], ['skip_5flinebreak_311',['skip_linebreak',['../classtram_1_1_file.html#ab5086d2c4a3d374fbf26241e6c14c64f',1,'tram::File']]], ['skip_5fnewline_312',['skip_newline',['../classtram_1_1_file_reader_parser.html#a2e9e3bce8f6b88355092541992be60ab',1,'tram::FileReaderParser::skip_newline()'],['../classtram_1_1_text_reader_parser.html#a0cba960c7fd3821e8142e4bdffadfe05',1,'tram::TextReaderParser::skip_newline()']]], ['skip_5fnewline_5fflag_313',['skip_newline_flag',['../classtram_1_1_file_reader_parser.html#a8a40dde3c4452991d297c18b8f4098bd',1,'tram::FileReaderParser']]], ['skip_5fvalue_314',['skip_value',['../classtram_1_1_file_reader_parser.html#aa4102a29b7986a007aed7ffac17d6227',1,'tram::FileReaderParser']]], ['skip_5fwhitespace_315',['skip_whitespace',['../classtram_1_1_file_reader_parser.html#a3f7c3a32719c64fb24ecd8e0a781738e',1,'tram::FileReaderParser::skip_whitespace()'],['../classtram_1_1_text_reader_parser.html#a81ad733ab82054803ee16aee53958897',1,'tram::TextReaderParser::skip_whitespace()']]], ['sleep_316',['Sleep',['../classtram_1_1_physics_component.html#a8901baef618e56f57553d613bc8af2cc',1,'tram::PhysicsComponent']]], ['sleeprigidbody_317',['SleepRigidbody',['../namespacetram_1_1_physics_1_1_a_p_i.html#a59055c8583f280409fd8fbc7df08f2f4',1,'tram::Physics::API']]], ['slider_318',['Slider',['../namespacetram_1_1_g_u_i.html#a081da10ffbacc71992b191a911acf1b8',1,'tram::GUI']]], ['software_2ecpp_319',['software.cpp',['../software_8cpp.html',1,'']]], ['software_2eh_320',['software.h',['../software_8h.html',1,'']]], ['sound_321',['sound',['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a9769adf64aaa9639b7855aeb3919ee6f',1,'tram::Ext::Kitchensink::Button::sound()'],['../classtram_1_1_sound.html#a06e516eef6120b6ccad7f04189b15dfb',1,'tram::Sound::sound()'],['../classtram_1_1_audio_component.html#aaa933d4c47c8636b20a47ae313a79230',1,'tram::AudioComponent::sound()']]], ['sound_322',['Sound',['../classtram_1_1_sound.html#aad69728aae94531aae365a3762d1a4e7',1,'tram::Sound::Sound(name_t sound, float volume, vec3 position)'],['../classtram_1_1_sound.html#a2f9189b04fcabb7aca986bf123e44c37',1,'tram::Sound::Sound(const SharedEntityData &, const ValueArray &)'],['../classtram_1_1_audio_1_1_sound.html#a8210efc515c9fff335ca38e09fadd398',1,'tram::Audio::Sound::Sound()'],['../classtram_1_1_audio_1_1_sound.html',1,'tram::Audio::Sound'],['../classtram_1_1_sound.html',1,'tram::Sound']]], ['sound_2ecpp_323',['sound.cpp',['../audio_2sound_8cpp.html',1,'(Global Namespace)'],['../entities_2sound_8cpp.html',1,'(Global Namespace)']]], ['sound_2eh_324',['sound.h',['../entities_2sound_8h.html',1,'(Global Namespace)'],['../audio_2sound_8h.html',1,'(Global Namespace)']]], ['sound_5fbuffer_325',['sound_buffer',['../classtram_1_1_audio_1_1_sound.html#a515eabe2a7fd2c3c230f651592ec2c53',1,'tram::Audio::Sound']]], ['sound_5fclose_326',['SOUND_CLOSE',['../namespacetram_1_1_ext_1_1_kitchensink.html#ac0b6180871852d23893d3339b6beed53a0b1510724c55be0cad2e892725226c4d',1,'tram::Ext::Kitchensink']]], ['sound_5fdata_327',['sound_data',['../classtram_1_1_audio_1_1_sound.html#a98e435c2eb675251a7b2826d1cee3e9d',1,'tram::Audio::Sound']]], ['sound_5fend_5fclose_328',['SOUND_END_CLOSE',['../namespacetram_1_1_ext_1_1_kitchensink.html#ac0b6180871852d23893d3339b6beed53a477e1a3f1473578ac80f685cd411a3d1',1,'tram::Ext::Kitchensink']]], ['sound_5fend_5fopen_329',['SOUND_END_OPEN',['../namespacetram_1_1_ext_1_1_kitchensink.html#ac0b6180871852d23893d3339b6beed53a9c3e411d1043f7a77edc2a1c39177f5e',1,'tram::Ext::Kitchensink']]], ['sound_5fflags_330',['sound_flags',['../classtram_1_1_sound.html#a3c17af183ae0f42e2b59f221281a9494',1,'tram::Sound']]], ['sound_5fhit_331',['SOUND_HIT',['../namespacetram_1_1_ext_1_1_kitchensink.html#ac0b6180871852d23893d3339b6beed53ab806d576cdea3d633ec61b5b3f1b9acb',1,'tram::Ext::Kitchensink']]], ['sound_5fjump_5fon_332',['SOUND_JUMP_ON',['../namespacetram_1_1_ext_1_1_kitchensink.html#ac0b6180871852d23893d3339b6beed53aa78540b88200263453173ba9037db0f8',1,'tram::Ext::Kitchensink']]], ['sound_5flength_333',['sound_length',['../classtram_1_1_audio_1_1_sound.html#a9fd0ad9ee54f5c3beaa148532d97726e',1,'tram::Audio::Sound']]], ['sound_5flocked_334',['SOUND_LOCKED',['../namespacetram_1_1_ext_1_1_kitchensink.html#ac0b6180871852d23893d3339b6beed53ad8d8417ecb3b9e599d26ee4e9c8d7d75',1,'tram::Ext::Kitchensink']]], ['sound_5flooping_335',['SOUND_LOOPING',['../namespacetram.html#a9f451d1ee1334ce10a83ea2f79c93370a2b98109c83d1a5e315eda5bd27f24c6d',1,'tram']]], ['sound_5fopen_336',['SOUND_OPEN',['../namespacetram_1_1_ext_1_1_kitchensink.html#ac0b6180871852d23893d3339b6beed53a1945da65354169336d298153cc6d6fcd',1,'tram::Ext::Kitchensink']]], ['sound_5fstart_5fon_5fload_337',['SOUND_START_ON_LOAD',['../namespacetram.html#a9f451d1ee1334ce10a83ea2f79c93370a8343d10ea6ccc52ae5edac8e1b9f44a8',1,'tram']]], ['sound_5fwalk_5fon_338',['SOUND_WALK_ON',['../namespacetram_1_1_ext_1_1_kitchensink.html#ac0b6180871852d23893d3339b6beed53a9d256387912c4726b3722a012d6d47b1',1,'tram::Ext::Kitchensink']]], ['soundaction_339',['SoundAction',['../namespacetram_1_1_ext_1_1_kitchensink.html#ac0b6180871852d23893d3339b6beed53',1,'tram::Ext::Kitchensink']]], ['soundgraph_340',['SoundGraph',['../classtram_1_1_audio_1_1_sound_graph.html#ad9ef3ae1d9537e6e955cd7c8d1357d3c',1,'tram::Audio::SoundGraph::SoundGraph()'],['../classtram_1_1_audio_1_1_sound_graph.html',1,'tram::Audio::SoundGraph'],['../classtram_1_1_render_1_1_sound_graph.html',1,'SoundGraph']]], ['soundtable_341',['SoundTable',['../classtram_1_1_ext_1_1_kitchensink_1_1_sound_table.html',1,'tram::Ext::Kitchensink']]], ['soundtable_2ecpp_342',['soundtable.cpp',['../soundtable_8cpp.html',1,'']]], ['soundtable_2eh_343',['soundtable.h',['../soundtable_8h.html',1,'']]], ['source_344',['source',['../classtram_1_1_audio_component.html#acfa284e522ae3aa9cb61337b23327171',1,'tram::AudioComponent::source()'],['../classtram_1_1_render_1_1_material.html#a0106a7e3c671374dcfd7b68b7b363394',1,'tram::Render::Material::source()'],['../classtram_1_1_render_1_1_model.html#ac23726058a2d599fbcf09c6d774f6c91',1,'tram::Render::Model::source()']]], ['source_5fcount_345',['SOURCE_COUNT',['../namespacetram_1_1_audio_1_1_spatial.html#a1dc54415cd0414f047cfd68c37ef13a8',1,'tram::Audio::Spatial']]], ['source_5fdepth_5flimit_346',['SOURCE_DEPTH_LIMIT',['../namespacetram_1_1_audio_1_1_spatial.html#a470153ad5cab64ede6d4a517710c7aee',1,'tram::Audio::Spatial']]], ['source_5fdirection_347',['source_direction',['../structtram_1_1_audio_1_1_spatial_1_1_path_from_audio_source.html#a2cc3ae9172c3a920dab2553009c900d6',1,'tram::Audio::Spatial::PathFromAudioSource']]], ['source_5fideal_5fangle_348',['source_ideal_angle',['../structtram_1_1_audio_1_1_spatial_1_1_path_tracing_result.html#a217efabbc7b81c3fe4ca8ac67526863b',1,'tram::Audio::Spatial::PathTracingResult']]], ['source_5fplaying_349',['SOURCE_PLAYING',['../namespacetram_1_1_audio_1_1_spatial.html#a29e8b2fda522dd1d5e8f4ec648217351a76edfe568a1b4a6cd61ea9e4634d4338',1,'tram::Audio::Spatial']]], ['source_5frepeating_350',['SOURCE_REPEATING',['../namespacetram_1_1_audio_1_1_spatial.html#a29e8b2fda522dd1d5e8f4ec648217351a16c59175dddfde6cd9721d2eab2c577f',1,'tram::Audio::Spatial']]], ['spatial_2ecpp_351',['spatial.cpp',['../spatial_8cpp.html',1,'']]], ['spatial_2eh_352',['spatial.h',['../spatial_8h.html',1,'']]], ['spawn_353',['SPAWN',['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6a9690ebb5954232b7d16f29442a036476',1,'tram::Signal']]], ['special_5foption_354',['special_option',['../structtram_1_1_u_i_1_1_key_binding.html#ad131bfe825ffebbbe5129c31adab3f89',1,'tram::UI::KeyBinding']]], ['special_5foption2_355',['special_option2',['../structtram_1_1_u_i_1_1_key_binding.html#af82a3db19fbf9a3a80f768ad2f129acd',1,'tram::UI::KeyBinding']]], ['specular_356',['specular',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#a5894b06241aa52b860a8d73d8c3c526b',1,'tram::Render::API::ShaderUniformModelMatrices']]], ['specular_5fexponent_357',['specular_exponent',['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#ab7df87a59ab31eee8df41c3686f35200',1,'tram::Render::API::D3DDrawListEntry::specular_exponent()'],['../classtram_1_1_render_1_1_material.html#ace75dc47785b62f847b18bd282ee140b',1,'tram::Render::Material::specular_exponent()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_material.html#a07e7b84d5737ca1179d08607b6dd06aa',1,'tram::Render::API::GLMaterial::specular_exponent()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html#abdad019161ef217d6bdbb2c34f22e3de',1,'tram::Render::API::SWDrawListEntry::specular_exponent()']]], ['specular_5ftransparency_358',['specular_transparency',['../classtram_1_1_render_1_1_material.html#a840d1b1dc3b84dc2a5b4b7f24e02e8c6',1,'tram::Render::Material::specular_transparency()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_material.html#a5c1937af80981904bbfedfbf9b144b64',1,'tram::Render::API::GLMaterial::specular_transparency()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html#a5ef81d3e413cd46fc8d06fcb14e1438d',1,'tram::Render::API::SWDrawListEntry::specular_transparency()'],['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#a38e16ee087cd107bad43a77b4556223e',1,'tram::Render::API::D3DDrawListEntry::specular_transparency()']]], ['specular_5fweight_359',['specular_weight',['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#a09a0f6696c1a4d4b64b30376826316b3',1,'tram::Render::API::D3DDrawListEntry::specular_weight()'],['../classtram_1_1_render_1_1_material.html#acf5a270cd06229986d2953ff2b2d9944',1,'tram::Render::Material::specular_weight()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_material.html#a1260401099f04ec467b0ac463f48c83f',1,'tram::Render::API::GLMaterial::specular_weight()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html#a05b99dbe35234a661eaf6e7b0ac12698',1,'tram::Render::API::SWDrawListEntry::specular_weight()']]], ['speed_360',['speed',['../structtram_1_1_animation_component_1_1_animation_playback_info.html#a605b9819919b636a4ec02c58bbea28d6',1,'tram::AnimationComponent::AnimationPlaybackInfo::speed()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state.html#a96c66b08a366597595eac4038641834e',1,'tram::Ext::Kitchensink::AnimState::speed()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#ac47c81071b86e3b5876d1baa0c263080',1,'tram::Ext::Kitchensink::Button::speed()']]], ['sphere_361',['Sphere',['../structtram_1_1_physics_1_1_collision_shape.html#a208f202b55cc4bed0b0eb7f181e9b33b',1,'tram::Physics::CollisionShape']]], ['sphericalharmonic_362',['SphericalHarmonic',['../structtram_1_1_render_1_1_spherical_harmonic.html',1,'tram::Render']]], ['sphericalharmonic_5ft_363',['sphericalharmonic_t',['../namespacetram_1_1_render.html#adc772ee58f3700260f2f155f334fd6d5',1,'tram::Render']]], ['spin_364',['Spin',['../classtram_1_1_physics_component.html#a39981bb11f6e8eb4dcce36f4c380ebec',1,'tram::PhysicsComponent']]], ['spinlock_365',['spinlock',['../classtram_1_1_queue.html#aa0cce633bc90e45e142d32a0e7827d88',1,'tram::Queue']]], ['spinlock_366',['Spinlock',['../classtram_1_1_spinlock.html',1,'tram']]], ['spinlock_2eh_367',['spinlock.h',['../spinlock_8h.html',1,'']]], ['spinrigidbody_368',['SpinRigidbody',['../namespacetram_1_1_physics_1_1_a_p_i.html#a43d326db472ec5a9e499b2816a5588c1',1,'tram::Physics::API']]], ['sprite_369',['sprite',['../classtram_1_1_decal_component.html#a311a631005417b52f325462a23685f78',1,'tram::DecalComponent::sprite()'],['../classtram_1_1_particle_component.html#a10d73a307d53059911966e00f9ea0154',1,'tram::ParticleComponent::sprite()'],['../classtram_1_1_sprite_component.html#a620c3aef918cd8570932341099d5d7c4',1,'tram::SpriteComponent::sprite()']]], ['sprite_370',['Sprite',['../classtram_1_1_render_1_1_material.html#a3292175d54d93d126ba2829249316344',1,'tram::Render::Material::Sprite()'],['../classtram_1_1_render_1_1_sprite.html#ad6ccadbf3c461fc6a579506dab6d40b9',1,'tram::Render::Sprite::Sprite()'],['../classtram_1_1_render_1_1_sprite.html',1,'tram::Render::Sprite']]], ['sprite_2ecpp_371',['sprite.cpp',['../components_2sprite_8cpp.html',1,'(Global Namespace)'],['../render_2opengl_2sprite_8cpp.html',1,'(Global Namespace)'],['../render_2sprite_8cpp.html',1,'(Global Namespace)']]], ['sprite_2eh_372',['sprite.h',['../render_2sprite_8h.html',1,'(Global Namespace)'],['../components_2sprite_8h.html',1,'(Global Namespace)'],['../render_2opengl_2sprite_8h.html',1,'(Global Namespace)']]], ['sprite_5farray_373',['sprite_array',['../classtram_1_1_sprite_component.html#a4fbf77711c216c8fcc0b3187708e10f9',1,'tram::SpriteComponent']]], ['sprite_5ffont_374',['sprite_font',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a5446fb0643408689bf3e3228ae0e204a',1,'tram::Ext::Kitchensink::ItemClass']]], ['sprite_5fglyph_375',['sprite_glyph',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a01e50cc84077d0e95c63843fc9bf318e',1,'tram::Ext::Kitchensink::ItemClass']]], ['sprite_5flist_376',['sprite_list',['../render_2sprite_8cpp.html#aa7ba6e3579e4897ccc9c2e5f8d033b20',1,'sprite.cpp']]], ['spritearray_5ft_377',['spritearray_t',['../structtram_1_1_render_1_1spritearray__t.html',1,'tram::Render']]], ['spritecomponent_378',['SpriteComponent',['../classtram_1_1_sprite_component.html#ac1a001371822ddc0a285e0741ea2bdb4',1,'tram::SpriteComponent::SpriteComponent()'],['../classtram_1_1_sprite_component.html',1,'tram::SpriteComponent']]], ['spriteframe_379',['SpriteFrame',['../structtram_1_1_render_1_1_sprite_frame.html',1,'tram::Render']]], ['spritepoint_380',['SpritePoint',['../structtram_1_1_render_1_1_sprite_point.html',1,'tram::Render']]], ['spritevertex_381',['SpriteVertex',['../structtram_1_1_render_1_1_sprite_vertex.html',1,'tram::Render']]], ['stack_382',['Stack',['../classtram_1_1_stack.html#af07b289d86a6b75514c2ae1412d0ab41',1,'tram::Stack']]], ['stack_383',['stack',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#afe8942947a3e1323eec2ab314c64b2ad',1,'tram::Ext::Kitchensink::ItemClass']]], ['stack_384',['Stack',['../classtram_1_1_stack.html',1,'tram']]], ['stack_2eh_385',['stack.h',['../stack_8h.html',1,'']]], ['stack_5fheight_386',['stack_height',['../structtram_1_1_g_u_i_1_1_frame_object.html#abed55225f2d2c6c5d15ff99eaee05d9c',1,'tram::GUI::FrameObject']]], ['stacklength_387',['stackLength',['../classtram_1_1_stack.html#acfba6f478c25b9476568caba14833fb4',1,'tram::Stack']]], ['stackname_388',['stackName',['../classtram_1_1_stack.html#a5f6b6fb4a9090e80ade67b4937959e3e',1,'tram::Stack']]], ['stackpool_389',['StackPool',['../classtram_1_1_stack_pool.html#a12110066565425c621d05ee4dffbb70c',1,'tram::StackPool::StackPool(const char *name, size_t size)'],['../classtram_1_1_stack_pool.html#ac045057c72646b08dd0042b49ca9170b',1,'tram::StackPool::StackPool(const char *name, size_t max_size, std::initializer_list< T > list)'],['../classtram_1_1_stack_pool.html',1,'tram::StackPool< T >']]], ['stackpool_2eh_390',['stackpool.h',['../stackpool_8h.html',1,'']]], ['stacksize_391',['stackSize',['../classtram_1_1_stack.html#a382ca6f3fd7d1f13fc9f5c1decbf206a',1,'tram::Stack']]], ['standing_5fon_392',['standing_on',['../classtram_1_1_raycast_controller_component.html#a46760dcc830550459b52f6b26cd80bcb',1,'tram::RaycastControllerComponent::standing_on()'],['../classtram_1_1_f_p_s_controller_component.html#a1a9c20ae30cc0939f1c09febafb1a001',1,'tram::FPSControllerComponent::standing_on()']]], ['standing_5fon_5fprev_393',['standing_on_prev',['../classtram_1_1_raycast_controller_component.html#af3f3c01dc71c60f64fd65709c294e39d',1,'tram::RaycastControllerComponent::standing_on_prev()'],['../classtram_1_1_f_p_s_controller_component.html#ae4a70bf3706f1cbada7ed97f70482fe4',1,'tram::FPSControllerComponent::standing_on_prev()']]], ['standing_5fpos_394',['standing_pos',['../classtram_1_1_raycast_controller_component.html#a621f23a281ed1fc9ab27bbb0ac4103e6',1,'tram::RaycastControllerComponent::standing_pos()'],['../classtram_1_1_f_p_s_controller_component.html#a37f280a78fdb1596861619db391ff09a',1,'tram::FPSControllerComponent::standing_pos()']]], ['standing_5frot_395',['standing_rot',['../classtram_1_1_f_p_s_controller_component.html#ac1c3824186959467cdf5f12a5f2684cc',1,'tram::FPSControllerComponent']]], ['start_396',['Start',['../classtram_1_1_light_component.html#aee724429d715a9da2793d66b0938080f',1,'tram::LightComponent::Start()'],['../classtram_1_1_particle_component.html#ae89750f03a9e6c0beef9de59414f7a25',1,'tram::ParticleComponent::Start()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_state_component.html#a335a1c5814483482acbaf2417e624da4',1,'tram::Ext::Kitchensink::AnimationStateComponent::Start()'],['../classtram_1_1_entity_component.html#a64cc26454bf92a709eef5e19931695d6',1,'tram::EntityComponent::Start()']]], ['start_397',['START',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afdaefb80d59450ad6bd1ebed0479a8fc282',1,'tram::Message']]], ['start_398',['Start',['../classtram_1_1_decal_component.html#aec504c10a2756f3d0c7746d706483be9',1,'tram::DecalComponent::Start()'],['../classtram_1_1_audio_component.html#a0a1ef247f18c73318db0355a6b0a44f3',1,'tram::AudioComponent::Start()'],['../classtram_1_1_trigger_component.html#a62a3322c918a0cf7b2793b94b1144059',1,'tram::TriggerComponent::Start()'],['../classtram_1_1_animation_component.html#a6d476ab03612c5e87aadfb6b70a1a8fb',1,'tram::AnimationComponent::Start()'],['../classtram_1_1_physics_component.html#a79d8c1c7d1a2df6937ac901532c880b2',1,'tram::PhysicsComponent::Start()'],['../classtram_1_1_player_component.html#aa8a009699e5fd349e952284665e1d1c3',1,'tram::PlayerComponent::Start()'],['../classtram_1_1_render_component.html#a97f294652a7627376510082ca4935490',1,'tram::RenderComponent::Start()'],['../classtram_1_1_sprite_component.html#a8a8fe6d5647764bf064a432ec26f59e4',1,'tram::SpriteComponent::Start()'],['../classtram_1_1_template_component.html#a41a703bfee11a984319c23ca8b58601d',1,'tram::TemplateComponent::Start()'],['../classtram_1_1_f_p_s_controller_component.html#ab078a61443c6f5d29fa5a9bb1fa06aea',1,'tram::FPSControllerComponent::Start()'],['../classtram_1_1_raycast_controller_component.html#a61f46b2f0838fe1db449109a531f1dad',1,'tram::RaycastControllerComponent::Start()'],['../namespacetram_1_1_stats.html#a3b4a3c925a0c33d945546aac71b22c58',1,'tram::Stats::Start()']]], ['start_5fpos_399',['start_pos',['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a12a4f0a94979b7b9c112fe3d43dfefcd',1,'tram::Ext::Kitchensink::Button']]], ['start_5frot_400',['start_rot',['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#ae091221f1e75d235db2a4ab7ba30b83b',1,'tram::Ext::Kitchensink::Button']]], ['start_5ftest_401',['START_TEST',['../test_8h.html#a33b3bceb630bc5fc81c06aaad9c1fb6f',1,'test.h']]], ['start_5fy_402',['start_y',['../structtram_1_1_render_1_1_a_p_i_1_1_scanline_buffer.html#a5f182b42c73e158605f8eb2c0a0ca373',1,'tram::Render::API::ScanlineBuffer']]], ['state_403',['state',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_default.html#acf9e01d5a11aa7a4b40a7135a8bb10e9',1,'tram::Ext::Kitchensink::AnimStateTransitionDefault::state()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a91ceb993b3cbf17626bccd4899157514',1,'tram::Ext::Kitchensink::Button::state()'],['../structtram_1_1_system_1_1_system_info.html#a44f69f3ce380405fc41b7dfff7079beb',1,'tram::System::SystemInfo::state()']]], ['state_5fcursor_404',['STATE_CURSOR',['../namespacetram_1_1_u_i.html#aef59b5ccd9382ca4fdd1f951a9b68aefa12b82658eb8500babd0132e1ef48d60c',1,'tram::UI']]], ['state_5fdefault_405',['STATE_DEFAULT',['../namespacetram_1_1_u_i.html#aef59b5ccd9382ca4fdd1f951a9b68aefac85efc9d2a4eb7e1cc2262d7dff47a2d',1,'tram::UI']]], ['state_5fflying_406',['STATE_FLYING',['../namespacetram_1_1_u_i.html#aef59b5ccd9382ca4fdd1f951a9b68aefa27b3b1ef62f6dbd05179b47d610ddda6',1,'tram::UI']]], ['state_5fmenu_5fopen_407',['STATE_MENU_OPEN',['../namespacetram_1_1_u_i.html#aef59b5ccd9382ca4fdd1f951a9b68aefadb34ad1fcde66543097a2bf401fa4a12',1,'tram::UI']]], ['state_5fno_5finput_408',['STATE_NO_INPUT',['../namespacetram_1_1_u_i.html#aef59b5ccd9382ca4fdd1f951a9b68aefa0ba9af9131cd70f1cd88e11a2f0ddfd9',1,'tram::UI']]], ['state_5fspace_409',['state_space',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state.html#a462487781aa6ea8911cb37bc3064b575',1,'tram::Ext::Kitchensink::AnimState']]], ['states_410',['states',['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_state_component.html#ab06a67f085e005f0e985fd03f1bd2dcc',1,'tram::Ext::Kitchensink::AnimationStateComponent']]], ['static_5fvertex_5ffvf_411',['STATIC_VERTEX_FVF',['../namespacetram_1_1_render_1_1_a_p_i.html#aae43b3038bb50f8c12f079db41ce172e',1,'tram::Render::API']]], ['staticmodeldata_412',['StaticModelData',['../structtram_1_1_render_1_1_static_model_data.html',1,'tram::Render']]], ['staticmodelvertex_413',['StaticModelVertex',['../structtram_1_1_render_1_1_static_model_vertex.html',1,'tram::Render']]], ['staticvertex_414',['StaticVertex',['../structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html',1,'tram::Render::API']]], ['staticworldobject_415',['StaticWorldObject',['../classtram_1_1_static_world_object.html#a08c7e874c022df3ec4a4c6bc5a09a2e3',1,'tram::StaticWorldObject::StaticWorldObject()'],['../classtram_1_1_static_world_object.html',1,'tram::StaticWorldObject']]], ['staticworldobject_2ecpp_416',['staticworldobject.cpp',['../staticworldobject_8cpp.html',1,'']]], ['staticworldobject_2eh_417',['staticworldobject.h',['../staticworldobject_8h.html',1,'']]], ['statistics_5fenabled_418',['statistics_enabled',['../classtram_1_1_ext_1_1_menu_1_1_debug_menu.html#ae2ef205978570aa98b85d92117664971',1,'tram::Ext::Menu::DebugMenu']]], ['statistics_5fmenu_419',['statistics_menu',['../classtram_1_1_ext_1_1_menu_1_1_debug_menu.html#a0f6a07f1747a26714f916feaa04d01ab',1,'tram::Ext::Menu::DebugMenu']]], ['statisticsmenu_420',['StatisticsMenu',['../classtram_1_1_ext_1_1_menu_1_1_statistics_menu.html',1,'tram::Ext::Menu']]], ['stats_2ecpp_421',['stats.cpp',['../stats_8cpp.html',1,'']]], ['stats_2eh_422',['stats.h',['../stats_8h.html',1,'']]], ['status_423',['Status',['../classtram_1_1_resource.html#a7a4ce943d482665189305b828868c2a4',1,'tram::Resource']]], ['status_424',['status',['../classtram_1_1_resource.html#ad797d797d3fb0e517063f8178b0ff243',1,'tram::Resource']]], ['stb_5fimage_5fimplementation_425',['STB_IMAGE_IMPLEMENTATION',['../material_8cpp.html#a18372412ad2fc3ce1e3240b3cf0efe78',1,'material.cpp']]], ['stb_5fimage_5fwrite_5fimplementation_426',['STB_IMAGE_WRITE_IMPLEMENTATION',['../image_8cpp.html#aefe397a94e8feddc652f92ef40ce9597',1,'image.cpp']]], ['stbi_5fonly_5fpng_427',['STBI_ONLY_PNG',['../material_8cpp.html#a305f0db3256dd1248d3f17a83f7a6129',1,'material.cpp']]], ['step_5fheight_428',['step_height',['../classtram_1_1_raycast_controller_component.html#aebcd878947abb26efd9f9fe66d6caf6b',1,'tram::RaycastControllerComponent::step_height()'],['../classtram_1_1_f_p_s_controller_component.html#a4b07abe21f47fc5dbac586aa45875fa0',1,'tram::FPSControllerComponent::step_height()']]], ['step_5fheight_5fcrouch_429',['step_height_crouch',['../classtram_1_1_f_p_s_controller_component.html#a4074f2e9e605af90024754008010a1a9',1,'tram::FPSControllerComponent']]], ['stepphysics_430',['StepPhysics',['../namespacetram_1_1_physics_1_1_a_p_i.html#a18ff0dc10793f33e66b57c8cd29d9fa2',1,'tram::Physics::API']]], ['stop_431',['Stop',['../namespacetram_1_1_stats.html#a254f2eae826c19cdfaa8acdc7a80310b',1,'tram::Stats::Stop()'],['../classtram_1_1_audio_component.html#a4acdea9eb5e1750b2c2ff66f07b9daf5',1,'tram::AudioComponent::Stop()'],['../classtram_1_1_animation_component.html#a29f7010dec34fdcd9c7a3e9bcadf2b96',1,'tram::AnimationComponent::Stop()']]], ['stop_432',['STOP',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afda1ad9eec2532ec3093a0fcb54d5da9785',1,'tram::Message']]], ['stopaudiosource_433',['StopAudioSource',['../namespacetram_1_1_audio_1_1_a_p_i.html#a77e3f4ff9024d2adb99aab7a03cb2261',1,'tram::Audio::API']]], ['stride_434',['stride',['../structtram_1_1_render_1_1_vertex_attribute.html#a244d28f089f6ad9cda2ca2dd04dd41ca',1,'tram::Render::VertexAttribute']]], ['string_5ffloat_435',['string_float',['../namespacetram_1_1_ext_1_1_menu.html#aab031015981522b1ea19979d05d54770',1,'tram::Ext::Menu']]], ['string_5fptr_436',['string_ptr',['../classtram_1_1_value_ptr.html#aa41430152ae099fa046cb717764a5f73',1,'tram::ValuePtr']]], ['string_5fvalue_437',['string_value',['../classtram_1_1_value.html#a7ee321f7843e602cdf1dc6ec6d8c707b',1,'tram::Value']]], ['subtitle_438',['subtitle',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a89dca0079262b8780f559d02c7865799',1,'tram::Ext::Kitchensink::QuestVariable']]], ['subtype_439',['subtype',['../classtram_1_1_ext_1_1_menu_1_1_event_emit.html#afbcb5e97dee6c1c8eb8a4e4fff488c4f',1,'tram::Ext::Menu::EventEmit::subtype()'],['../structtram_1_1_ext_1_1_menu_1_1_event_intercept.html#a2d1db56536b83ffc15b91bf8ea8138ee',1,'tram::Ext::Menu::EventIntercept::subtype()'],['../structtram_1_1_event.html#ab499b6c8117176c1c2d782faf862412e',1,'tram::Event::subtype()']]], ['subtype_5fstring_440',['subtype_string',['../classtram_1_1_ext_1_1_menu_1_1_event_emit.html#ab28d6b55f6c036ebd9399dd1bbb22e25',1,'tram::Ext::Menu::EventEmit']]], ['succ_441',['succ',['../struct__test__case.html#a11762360b352fb17f288e1f11b69efaa',1,'_test_case']]], ['sun_5fcolor_442',['sun_color',['../structtram_1_1_render_1_1_a_p_i_1_1_layer_parameters.html#a9f4010d78ed2b6398c86bbd3bfa3d3b4',1,'tram::Render::API::LayerParameters::sun_color()'],['../namespacetram_1_1_render.html#a786b665a3cc7c9557dd8d67a418bcaaf',1,'tram::Render::sun_color()']]], ['sun_5fdirection_443',['sun_direction',['../namespacetram_1_1_render.html#ad44eb5b755e8ae84746af1b369c01908',1,'tram::Render::sun_direction()'],['../structtram_1_1_render_1_1_a_p_i_1_1_layer_parameters.html#a76cca2cbf53a6cb3f21faee686130d82',1,'tram::Render::API::LayerParameters::sun_direction()']]], ['suncolor_444',['sunColor',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#aa6fbe14bdb769a5454cba00b17f66718',1,'tram::Render::API::ShaderUniformModelMatrices']]], ['sundirection_445',['sunDirection',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#acfdaa66e9dfe4c104bc5e7dba81d98fe',1,'tram::Render::API::ShaderUniformModelMatrices']]], ['sunweight_446',['sunWeight',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#aaf90895edcb47ffbbe0190184358ad6d',1,'tram::Render::API::ShaderUniformModelMatrices']]], ['sw_447',['sw',['../structtram_1_1_render_1_1light__t.html#a8884681b5c37bd90c77607fe04738d27',1,'tram::Render::light_t::sw()'],['../structtram_1_1_render_1_1material__t.html#a5e46477c4edac192b6977a69bf2cda1b',1,'tram::Render::material_t::sw()'],['../structtram_1_1_render_1_1drawlistentry__t.html#aa19e9354b8948dc1e47a4c5983cad9b2',1,'tram::Render::drawlistentry_t::sw()']]], ['sw_5fblended_448',['SW_BLENDED',['../namespacetram_1_1_render_1_1_a_p_i.html#a435f5c7784d296fc909a87b6c6190a8ca716baa2db5e2b2ff5b4fb7b841f3c0f4',1,'tram::Render::API']]], ['sw_5fdynamic_5fblended_449',['SW_DYNAMIC_BLENDED',['../namespacetram_1_1_render_1_1_a_p_i.html#a52ad3127cec9daa2f9c83ca8875dd2d2a00b5e4053744cb39cb6155be720d7419',1,'tram::Render::API']]], ['sw_5findex_5farray_450',['sw_index_array',['../structtram_1_1_render_1_1indexarray__t.html#a8ad83d6138df2d320f3ada45e47ac8de',1,'tram::Render::indexarray_t']]], ['sw_5fnearest_451',['SW_NEAREST',['../namespacetram_1_1_render_1_1_a_p_i.html#a435f5c7784d296fc909a87b6c6190a8ca1da7efb4481bda8396c5e620c0df3c31',1,'tram::Render::API']]], ['sw_5fsprite_452',['SW_SPRITE',['../namespacetram_1_1_render_1_1_a_p_i.html#a52ad3127cec9daa2f9c83ca8875dd2d2a7f4a9f5e1fe4e061d733b4da886ba1f8',1,'tram::Render::API']]], ['sw_5fstatic_5fcolored_453',['SW_STATIC_COLORED',['../namespacetram_1_1_render_1_1_a_p_i.html#a52ad3127cec9daa2f9c83ca8875dd2d2a94f59d3013c40170946204191132570a',1,'tram::Render::API']]], ['sw_5fstatic_5flightmapped_454',['SW_STATIC_LIGHTMAPPED',['../namespacetram_1_1_render_1_1_a_p_i.html#a52ad3127cec9daa2f9c83ca8875dd2d2a5f33f9d3675e0124018172ead149c255',1,'tram::Render::API']]], ['sw_5ftexture_455',['sw_texture',['../structtram_1_1_render_1_1texturehandle__t.html#ac29891059d4c6b816fa4a6e515f1bced',1,'tram::Render::texturehandle_t']]], ['sw_5fvertex_5farray_456',['sw_vertex_array',['../structtram_1_1_render_1_1vertexarray__t.html#a58e132836686f81374a161a1a4b79a7f',1,'tram::Render::vertexarray_t']]], ['swdrawlistentry_457',['SWDrawListEntry',['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html',1,'tram::Render::API']]], ['swindexarray_458',['SWIndexArray',['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_index_array.html',1,'tram::Render::API']]], ['switchstate_459',['SwitchState',['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#ab4cc583a65fe7ce2582924ca93283361',1,'tram::Ext::Kitchensink::Button::SwitchState()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_state_component.html#a616a6e22840e08cf291834d172b22ee7',1,'tram::Ext::Kitchensink::AnimationStateComponent::SwitchState()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_table.html#ac68d960146cdf7525c403fa80dce8d1f',1,'tram::Ext::Kitchensink::AnimationTable::SwitchState()']]], ['swlight_460',['SWLight',['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_light.html',1,'tram::Render::API']]], ['swtexture_461',['SWTexture',['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_texture.html',1,'tram::Render::API']]], ['swtexturemode_462',['SWTextureMode',['../namespacetram_1_1_render_1_1_a_p_i.html#a435f5c7784d296fc909a87b6c6190a8c',1,'tram::Render::API']]], ['swvertexarray_463',['SWVertexArray',['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_vertex_array.html',1,'tram::Render::API']]], ['swvertextype_464',['SWVertexType',['../namespacetram_1_1_render_1_1_a_p_i.html#a52ad3127cec9daa2f9c83ca8875dd2d2',1,'tram::Render::API']]], ['system_465',['System',['../namespacetram_1_1_system.html#a02b5e7a5340ef5ca42a650ca4d8ade65',1,'tram::System']]], ['system_2ecpp_466',['system.cpp',['../extensions_2menu_2system_8cpp.html',1,'(Global Namespace)'],['../framework_2system_8cpp.html',1,'(Global Namespace)']]], ['system_2eh_467',['system.h',['../extensions_2menu_2system_8h.html',1,'(Global Namespace)'],['../framework_2system_8h.html',1,'(Global Namespace)']]], ['system_5flast_468',['SYSTEM_LAST',['../namespacetram_1_1_system.html#a02b5e7a5340ef5ca42a650ca4d8ade65a01dd7ac92f0b981b22c96c5d43882da4',1,'tram::System']]], ['system_5flimit_469',['SYSTEM_LIMIT',['../namespacetram.html#aa4a96a9b06c171a66beb3fe0066ac6b5',1,'tram']]], ['system_5ft_470',['system_t',['../namespacetram_1_1_system.html#a3480b59cb32a6f70ad1fce1626b64e40',1,'tram::System']]], ['systeminfo_471',['SystemInfo',['../structtram_1_1_system_1_1_system_info.html',1,'tram::System']]], ['systemmenu_472',['SystemMenu',['../classtram_1_1_ext_1_1_menu_1_1_system_menu.html',1,'tram::Ext::Menu']]], ['systemstat_473',['SystemStat',['../structtram_1_1_stats_1_1_system_stat.html',1,'tram::Stats']]], ['systemstate_474',['SystemState',['../namespacetram_1_1_system.html#a4703b937891576671c79a6d02a63c0a2',1,'tram::System']]] ]; ================================================ FILE: docs/cppapi/search/all_14.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/all_14.js ================================================ var searchData= [ ['aabb_0',['AABB',['../namespacetram_1_1_render_1_1_a_a_b_b.html',1,'tram::Render']]], ['api_1',['API',['../namespacetram_1_1_audio_1_1_a_p_i.html',1,'tram::Audio::API'],['../namespacetram_1_1_physics_1_1_a_p_i.html',1,'tram::Physics::API'],['../namespacetram_1_1_render_1_1_a_p_i.html',1,'tram::Render::API']]], ['async_2',['Async',['../namespacetram_1_1_async.html',1,'tram']]], ['audio_3',['Audio',['../namespacetram_1_1_audio.html',1,'tram']]], ['camera_4',['Camera',['../namespacetram_1_1_ext_1_1_camera.html',1,'tram::Ext']]], ['core_5',['Core',['../namespacetram_1_1_core.html',1,'tram']]], ['ext_6',['Ext',['../namespacetram_1_1_ext.html',1,'tram']]], ['gui_7',['GUI',['../namespacetram_1_1_g_u_i.html',1,'tram']]], ['implementation_8',['implementation',['../namespacetram_1_1implementation.html',1,'tram']]], ['input_9',['Input',['../namespacetram_1_1_platform_1_1_input.html',1,'tram::Platform']]], ['kitchensink_10',['Kitchensink',['../namespacetram_1_1_ext_1_1_kitchensink.html',1,'tram::Ext']]], ['language_11',['Language',['../namespacetram_1_1_language.html',1,'tram']]], ['lighttree_12',['LightTree',['../namespacetram_1_1_render_1_1_light_tree.html',1,'tram::Render']]], ['loader_13',['Loader',['../namespacetram_1_1_loader.html',1,'tram']]], ['lua_14',['Lua',['../namespacetram_1_1_ext_1_1_scripting_1_1_lua.html',1,'tram::Ext::Scripting']]], ['menu_15',['Menu',['../namespacetram_1_1_ext_1_1_menu.html',1,'tram::Ext::Menu'],['../namespacetram_1_1_ext_1_1_menu_1_1_menu.html',1,'tram::Ext::Menu::Menu']]], ['physics_16',['Physics',['../namespacetram_1_1_physics.html',1,'tram']]], ['platform_17',['Platform',['../namespacetram_1_1_platform.html',1,'tram']]], ['pool_18',['Pool',['../classtram_1_1_audio_1_1_sound.html#a6138aa72cd0b6a55be22d74ab84c65d6',1,'tram::Audio::Sound']]], ['render_19',['Render',['../namespacetram_1_1_render.html',1,'tram']]], ['scenetree_20',['SceneTree',['../namespacetram_1_1_render_1_1_scene_tree.html',1,'tram::Render']]], ['script_21',['Script',['../namespacetram_1_1_script.html',1,'tram']]], ['scriptabletype_22',['ScriptableType',['../namespacetram_1_1_scriptable_type.html',1,'tram']]], ['scripting_23',['Scripting',['../namespacetram_1_1_ext_1_1_scripting.html',1,'tram::Ext']]], ['settings_24',['Settings',['../namespacetram_1_1_settings.html',1,'tram']]], ['spatial_25',['Spatial',['../namespacetram_1_1_audio_1_1_spatial.html',1,'tram::Audio']]], ['stats_26',['Stats',['../namespacetram_1_1_stats.html',1,'tram']]], ['system_27',['System',['../namespacetram_1_1_system.html',1,'tram']]], ['tab_28',['tab',['../classtram_1_1_ext_1_1_menu_1_1_settings_menu.html#a51abff2b754e4376be37a35cceacc839',1,'tram::Ext::Menu::SettingsMenu']]], ['table_29',['table',['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_state_component.html#a61c57d2abc379ab7551ae47f74d31688',1,'tram::Ext::Kitchensink::AnimationStateComponent']]], ['tag_30',['tag',['../structtram_1_1_ext_1_1_kitchensink_1_1_effect.html#a00596a75be2bf65fa1d2e03dcfeb435b',1,'tram::Ext::Kitchensink::Effect']]], ['tail_31',['tail',['../structtram_1_1_render_1_1_bone.html#aeb360901af3cd399664d42fc7f45b621',1,'tram::Render::Bone']]], ['template_2ecpp_32',['template.cpp',['../template_8cpp.html',1,'']]], ['template_2eh_33',['template.h',['../template_8h.html',1,'']]], ['templatecomponent_34',['TemplateComponent',['../classtram_1_1_template_component.html#ac49dab36bc93c1d44db3fa7b78ec3367',1,'tram::TemplateComponent::TemplateComponent()'],['../classtram_1_1_template_component.html',1,'tram::TemplateComponent']]], ['test_2eh_35',['test.h',['../test_8h.html',1,'']]], ['test_5fcase_36',['TEST_CASE',['../test_8h.html#adf0988a4a0680d35bed223d0b021437e',1,'test.h']]], ['tex_37',['tex',['../structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html#a24707e6d30a0f70142d473bddba876be',1,'tram::Render::API::StaticVertex::tex()'],['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#a2d81747033b8094cbafb222ab1f42150',1,'tram::Render::API::DynamicVertex::tex()'],['../structtram_1_1_render_1_1_static_model_vertex.html#ad51bc04758264d5ac8dc9bde8902b224',1,'tram::Render::StaticModelVertex::tex()'],['../structtram_1_1_render_1_1_dynamic_model_vertex.html#a20afebb7b239ed53a388bb53e32d9cf9',1,'tram::Render::DynamicModelVertex::tex()']]], ['tex_5fx_38',['tex_x',['../structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html#add3d074d339900d6e0484f32a21530e5',1,'tram::Render::API::StaticVertex::tex_x()'],['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#ac1f682bed82ea178bd8beb9d9390be82',1,'tram::Render::API::DynamicVertex::tex_x()']]], ['tex_5fy_39',['tex_y',['../structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html#a2f7ff3ae59f5008deb76ecb7b4ffb6d9',1,'tram::Render::API::StaticVertex::tex_y()'],['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#a9e180bc6be33c64cf919a1fdfe5556ed',1,'tram::Render::API::DynamicVertex::tex_y()']]], ['texco_40',['texco',['../structtram_1_1_render_1_1_sprite_vertex.html#abeffdb3fc7194d2e43ca60aab57f5343',1,'tram::Render::SpriteVertex']]], ['texcount_41',['texCount',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#a00d701e6b4117b3ea568a1733d5f4455',1,'tram::Render::API::GLDrawListEntry']]], ['text_42',['TEXT',['../namespacetram_1_1_g_u_i.html#aed177dc7d46e43f3cf52662fecbaf0a6abfe639cbd14f55a92f4ebe8375a1ac2d',1,'tram::GUI']]], ['text_43',['Text',['../namespacetram_1_1_g_u_i.html#a1eeac17180cfd99f45e0d997766543c9',1,'tram::GUI']]], ['text_44',['text',['../classtram_1_1_ext_1_1_menu_1_1_console.html#a6a03f676654c17d2aaeadf875b90f4e1',1,'tram::Ext::Menu::Console']]], ['text_45',['TEXT',['../classtram_1_1_file.html#ab340a7edca3c73f54d764cd17b362477a6518ec116fa14720023ab555ac98fc78',1,'tram::File']]], ['text_5fcenter_46',['TEXT_CENTER',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefaab9068e1ea84d1d6500fff39f40432d8',1,'tram::GUI']]], ['text_5fjustified_47',['TEXT_JUSTIFIED',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefa5599915901369f00b9f42ac84e491a2c',1,'tram::GUI']]], ['text_5fleft_48',['TEXT_LEFT',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefa1e9c20e6fa371be1c425b7a6e7f6618d',1,'tram::GUI']]], ['text_5fright_49',['TEXT_RIGHT',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefa06eff8d79ce30aab6563d6e3f35ce4aa',1,'tram::GUI']]], ['textbox_50',['TextBox',['../namespacetram_1_1_g_u_i.html#a356c2eeb0e6b3a8c19ed6ee19a448619',1,'tram::GUI::TextBox(char *text, uint32_t length, bool enabled, uint32_t w, uint32_t h)'],['../namespacetram_1_1_g_u_i.html#a197eda70726287d8c846535df181e486',1,'tram::GUI::TextBox(const char *text, uint32_t w, uint32_t h)']]], ['textreaderparser_51',['TextReaderParser',['../classtram_1_1_text_reader_parser.html#a4c9bda65a540a5c369b1bc5c36d19943',1,'tram::TextReaderParser::TextReaderParser()'],['../classtram_1_1_text_reader_parser.html',1,'tram::TextReaderParser']]], ['texture_52',['texture',['../structtram_1_1_render_1_1_a_p_i_1_1_f_f_p_helper.html#af5774461282b48faa2dd20a0be390d20',1,'tram::Render::API::FFPHelper::texture()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html#a908345371794e728c6e67ca027a81b31',1,'tram::Render::API::SWDrawListEntry::texture()'],['../structtram_1_1_render_1_1_static_model_vertex.html#a14236fc030ada6beb923c59481356738',1,'tram::Render::StaticModelVertex::texture()'],['../structtram_1_1_render_1_1_dynamic_model_vertex.html#a72c02c5037cf0f6f2fc3b7a843c3a1e3',1,'tram::Render::DynamicModelVertex::texture()'],['../structtram_1_1_render_1_1_sprite_vertex.html#a8085377574c6989403d1bd2c3f7fb65e',1,'tram::Render::SpriteVertex::texture()'],['../structtram_1_1_render_1_1_sprite_point.html#a3b0683b95f728e95b47705da6c22db99',1,'tram::Render::SpritePoint::texture()'],['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#ae8a6150817c6af5a23681465585f807b',1,'tram::Render::API::D3DDrawListEntry::texture()'],['../structtram_1_1_render_1_1_a_p_i_1_1_f_v_f_helper.html#a842dd15f583c42dbba0b870848b2788e',1,'tram::Render::API::FVFHelper::texture()'],['../classtram_1_1_render_1_1_material.html#a5a6e15bdcaf42aaab5e8553733663037',1,'tram::Render::Material::texture()']]], ['texture_2ecpp_53',['texture.cpp',['../texture_8cpp.html',1,'']]], ['texture_2eh_54',['texture.h',['../texture_8h.html',1,'']]], ['texture_5fdata_55',['texture_data',['../classtram_1_1_render_1_1_material.html#a56f47f2d65d43e654d0abf9d104dce3d',1,'tram::Render::Material']]], ['texture_5flist_56',['texture_list',['../namespacetram_1_1_render_1_1_a_p_i.html#ae22731df276abfeb90be9ca92e40d03e',1,'tram::Render::API']]], ['texture_5fnone_57',['TEXTURE_NONE',['../namespacetram_1_1_render.html#ae823e9f58d9c8060a531459eec5ff811ae02c2e6f4cec72ea436b28aad4efd80b',1,'tram::Render']]], ['texture_5foffset_58',['texture_offset',['../structtram_1_1_render_1_1_sprite_point.html#a9a13cc02b4286881dd37bc6675e30516',1,'tram::Render::SpritePoint']]], ['texture_5fsame_59',['TEXTURE_SAME',['../namespacetram_1_1_render.html#ae823e9f58d9c8060a531459eec5ff811af6589e2c02fc50470840c08b9892f043',1,'tram::Render']]], ['texture_5fsize_60',['texture_size',['../structtram_1_1_render_1_1_sprite_point.html#a94456d286185795097932358effe13a3',1,'tram::Render::SpritePoint']]], ['texture_5fsource_61',['TEXTURE_SOURCE',['../namespacetram_1_1_render.html#ae823e9f58d9c8060a531459eec5ff811a3cfd37b75ddc6c3ba8caa20597d6c863',1,'tram::Render']]], ['texture_5ftransforms_62',['texture_transforms',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#a7f6207739a1721d96706eeb5b263b711',1,'tram::Render::API::ShaderUniformModelMatrices::texture_transforms()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#a70b0e18a2a7c521c25994b24941984ec',1,'tram::Render::API::GLDrawListEntry::texture_transforms()']]], ['texture_5ftype_63',['texture_type',['../classtram_1_1_render_1_1_material.html#a5eecc16043ab3c30d158f22429c3fd43',1,'tram::Render::Material']]], ['texturefilter_64',['TextureFilter',['../namespacetram_1_1_render.html#ad3c2cb5af20e13497cc81f62d22b430c',1,'tram::Render']]], ['texturefilter_5flinear_65',['TEXTUREFILTER_LINEAR',['../namespacetram_1_1_render.html#ad3c2cb5af20e13497cc81f62d22b430ca811c3596f6fa1f1dc908e87d7e45d3ef',1,'tram::Render']]], ['texturefilter_5flinear_5fmipmapped_66',['TEXTUREFILTER_LINEAR_MIPMAPPED',['../namespacetram_1_1_render.html#ad3c2cb5af20e13497cc81f62d22b430ca9975010d94838d5395406df69da07d91',1,'tram::Render']]], ['texturefilter_5fnearest_67',['TEXTUREFILTER_NEAREST',['../namespacetram_1_1_render.html#ad3c2cb5af20e13497cc81f62d22b430caf20b0ce0de416c5d5b69e1674ab4b647',1,'tram::Render']]], ['texturehandle_5ft_68',['texturehandle_t',['../structtram_1_1_render_1_1texturehandle__t.html',1,'tram::Render']]], ['texturetype_69',['TextureType',['../namespacetram_1_1_render.html#ae823e9f58d9c8060a531459eec5ff811',1,'tram::Render']]], ['textvertices_70',['textvertices',['../namespacetram_1_1_render.html#acbf7d35ffc1fe3624a48655681f07209',1,'tram::Render']]], ['textwidth_71',['TextWidth',['../namespacetram_1_1_g_u_i.html#af581d06594c177e5c1e7ea98db61382f',1,'tram::GUI']]], ['textwriterparser_72',['TextWriterParser',['../classtram_1_1_text_writer_parser.html#a3e74edee81b110b0166b90e3bf17e31c',1,'tram::TextWriterParser::TextWriterParser()'],['../classtram_1_1_text_writer_parser.html',1,'tram::TextWriterParser']]], ['third_5fperson_73',['THIRD_PERSON',['../namespacetram_1_1_render.html#a8c04f6971cbc222d951bd80fb9fb56b9',1,'tram::Render']]], ['thirdperson_2ecpp_74',['thirdperson.cpp',['../thirdperson_8cpp.html',1,'']]], ['thirdperson_2eh_75',['thirdperson.h',['../thirdperson_8h.html',1,'']]], ['tick_76',['Tick',['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container.html#a5256dac8514420f9b45698cb2298c024',1,'tram::Ext::Kitchensink::AttributeContainer']]], ['tick_77',['TICK',['../structtram_1_1_event.html#a569d6673fa83d2a5ec86b3d0c36c8765a5f4725790d09920d33c0121683f8e436',1,'tram::Event']]], ['tick_78',['tick',['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#ac41e197036c5ef823dbcd7f6bb5ae240',1,'tram::Ext::Kitchensink::Button']]], ['tick_5frate_79',['TICK_RATE',['../namespacetram.html#a675b9496ee55fb465aa5d4972b45bac7',1,'tram']]], ['tilt_80',['tilt',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#afdc06174463b8c44161f9f74f73fb81f',1,'tram::Ext::Camera::FirstPersonCamera']]], ['tilt_5fgoal_81',['tilt_goal',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#aa9a3d94e83b762fc15edbf7d3da266a0',1,'tram::Ext::Camera::FirstPersonCamera']]], ['tilt_5flast_82',['tilt_last',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a77c42a4916c08b1a297720aff63a77c7',1,'tram::Ext::Camera::FirstPersonCamera']]], ['tilt_5fspeed_83',['TILT_SPEED',['../namespacetram_1_1_ext_1_1_camera.html#af85f9d24f3adcf1113b2c6425f8474ac',1,'tram::Ext::Camera']]], ['time_84',['time',['../structtram_1_1_ext_1_1_menu_1_1_intercept.html#a6b7b147914bc32b6a2b76e9eb7fbef9a',1,'tram::Ext::Menu::Intercept::time()'],['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#ab38766b73e84418db17ba19afabb6d39',1,'tram::Render::API::ShaderUniformModelMatrices::time()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_effect.html#af2a9120bba4c62aabf617297bda2edaf',1,'tram::Ext::Kitchensink::Effect::time()']]], ['time_5fspent_85',['time_spent',['../structtram_1_1_stats_1_1_system_stat.html#a32672156fe327f706f10a187b186b1fa',1,'tram::Stats::SystemStat']]], ['time_5fspent_5faverage_86',['time_spent_average',['../structtram_1_1_stats_1_1_system_stat.html#a93bb42e1b4287d0ee87ea740f51f561f',1,'tram::Stats::SystemStat']]], ['time_5fspent_5faverage_5fcollated_87',['time_spent_average_collated',['../structtram_1_1_stats_1_1_system_stat.html#a347ff65490bda5b7174efe440dac0859',1,'tram::Stats::SystemStat']]], ['time_5fspent_5fcollated_88',['time_spent_collated',['../structtram_1_1_stats_1_1_system_stat.html#a16f80dfae2be619ec215d29cd18390d2',1,'tram::Stats::SystemStat']]], ['time_5fspent_5ftotal_89',['time_spent_total',['../structtram_1_1_stats_1_1_system_stat.html#a1d92dce48ee382f655b1d0412604d4ae',1,'tram::Stats::SystemStat']]], ['time_5fstarted_90',['time_started',['../structtram_1_1_stats_1_1_system_stat.html#a5a348062859b92b2ed6defce303d9e24',1,'tram::Stats::SystemStat']]], ['timer_91',['timer',['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a06388461c6b4eb74595e5231b97f1534',1,'tram::Ext::Kitchensink::Button']]], ['title_92',['title',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#ad6574937d3491e89d92d0fab8f3ec746',1,'tram::Ext::Kitchensink::QuestVariable']]], ['to_93',['to',['../structtram_1_1_edge.html#a3b4b8a5653bb798802c9319ed8374cee',1,'tram::Edge']]], ['to_5fchars_5fconcat_94',['to_chars_concat',['../namespacetram_1_1implementation.html#a28f9a5440be4ee4b82bf3ff7eebba2fe',1,'tram::implementation']]], ['todo_20list_95',['Todo List',['../todo.html',1,'']]], ['toggle_96',['TOGGLE',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afda93e680ef8cb095acd544a1f003fd6d59',1,'tram::Message']]], ['togglemenustate_97',['ToggleMenuState',['../namespacetram_1_1_ext_1_1_menu.html#a6fb37f42d3452b509021c8ccf3c1b17c',1,'tram::Ext::Menu']]], ['tolet_5femitter_98',['tolet_emitter',['../main_8cpp.html#aa6314261586f8d6bdb38d84211ab9068',1,'main.cpp']]], ['tolet_5fspinner_99',['tolet_spinner',['../main_8cpp.html#aef1afcddb99ee1a555eb26a6904d7362',1,'main.cpp']]], ['tolet_5fsprayer_100',['tolet_sprayer',['../main_8cpp.html#aa6df28e8f20bf2b2154a6676327ac225',1,'main.cpp']]], ['tolet_5fsprite_101',['tolet_sprite',['../main_8cpp.html#ad5b4101b5ff3df42a2fe16f3499d1e67',1,'main.cpp']]], ['top_102',['top',['../classtram_1_1_stack.html#a30a5b622fc4d1be6a302f2101e423e43',1,'tram::Stack']]], ['tostring_103',['ToString',['../classtram_1_1_value.html#a5e5cc98ba9a99ddd337091c91a917c8c',1,'tram::Value']]], ['totl_5fasserts_104',['totl_asserts',['../struct__test__case.html#ad41c1983f63c22e6891e73714a4f7494',1,'_test_case']]], ['track_105',['Track',['../namespacetram_1_1_loader.html#a682ad9ccb8fee9638cfea657405e9d54',1,'tram::Loader']]], ['tracked_5fentities_106',['tracked_entities',['../namespacetram_1_1_loader.html#acc765a2553ec7b9c33e50b473d38d371',1,'tram::Loader']]], ['train_107',['Train',['../classtram_1_1_ext_1_1_kitchensink_1_1_train.html#a8d6109469356d31dfe601d2324204a77',1,'tram::Ext::Kitchensink::Train::Train()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_train.html',1,'tram::Ext::Kitchensink::Train']]], ['tram_108',['tram',['../namespacetram.html',1,'']]], ['tram_5fsdk_5fassert_109',['TRAM_SDK_ASSERT',['../macros_8h.html#ab8acc3253ef25e7241078bb72714f386',1,'macros.h']]], ['tram_5fsdk_5fassert_5fmessage_110',['TRAM_SDK_ASSERT_MESSAGE',['../macros_8h.html#a152c2304044652f7572e5759c6535a2c',1,'macros.h']]], ['tram_5fsdk_5fentity_5fname_111',['TRAM_SDK_ENTITY_NAME',['../macros_8h.html#a8f9f5f41852998a382c115e4f6bbf159',1,'macros.h']]], ['tram_5fsdk_5fimplement_5fpool_112',['TRAM_SDK_IMPLEMENT_POOL',['../macros_8h.html#ad00c543490e5b3b7db91b1fdb62d44cb',1,'macros.h']]], ['tram_5fsdk_5fproperty_113',['TRAM_SDK_PROPERTY',['../macros_8h.html#a295f857ea2759f1ca46a41b9bf3dec1a',1,'macros.h']]], ['tram_5fsdk_5fregister_5fevent_5fdatatype_114',['TRAM_SDK_REGISTER_EVENT_DATATYPE',['../macros_8h.html#a52706c5e76dff5554e6be98274f86e3d',1,'macros.h']]], ['tram_5fsdk_5fvirtual_5fproperty_115',['TRAM_SDK_VIRTUAL_PROPERTY',['../macros_8h.html#a2b6582f54dfcdb7471a7a86d9c01eafe',1,'macros.h']]], ['tramway_20sdk_116',['Tramway SDK',['../index.html',1,'']]], ['transition_117',['Transition',['../classtram_1_1_transition.html',1,'tram::Transition'],['../classtram_1_1_transition.html#a42f1c234540f31c6f9e67e332e5f55b2',1,'tram::Transition::Transition()']]], ['transition_2ecpp_118',['transition.cpp',['../transition_8cpp.html',1,'']]], ['transition_2eh_119',['transition.h',['../transition_8h.html',1,'']]], ['transitions_120',['transitions',['../classtram_1_1_world_cell.html#a4d8144c3a7c27244fb6c8fb87c9783a5',1,'tram::WorldCell']]], ['tree_121',['tree',['../structtram_1_1_render_1_1_model_a_a_b_b.html#af540dbe8676bc422d33cc7140f733e2d',1,'tram::Render::ModelAABB']]], ['tree_5fhandle_122',['tree_handle',['../structtram_1_1_render_1_1_light_tree_1_1_light.html#aded7a9c4c5e7c06e84b2ac9d0967e2b8',1,'tram::Render::LightTree::Light']]], ['triangle_123',['Triangle',['../structtram_1_1_render_1_1_triangle.html',1,'tram::Render']]], ['triangle_124',['triangle',['../structtram_1_1_render_1_1_a_a_b_b_1_1_query_response.html#ae3f83ed0e19fec90c88b5057ea34e965',1,'tram::Render::AABB::QueryResponse']]], ['trianglebucket_125',['TriangleBucket',['../structtram_1_1_render_1_1_triangle_bucket.html',1,'tram::Render']]], ['triangles_126',['triangles',['../structtram_1_1_render_1_1_model_a_a_b_b.html#ab9d31a748f2085bda0d9db193d8865dd',1,'tram::Render::ModelAABB::triangles()'],['../structtram_1_1_render_1_1_triangle_bucket.html#a9d41d11849a7b16ec57526b77e1f3388',1,'tram::Render::TriangleBucket::triangles()']]], ['trianglevisible_127',['TriangleVisible',['../namespacetram_1_1_render_1_1_a_p_i.html#a908e98b46914c044b8631b88babccb0f',1,'tram::Render::API']]], ['trigger_128',['Trigger',['../classtram_1_1_trigger.html',1,'tram']]], ['trigger_129',['TRIGGER',['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6afedf8321ba6bcc2dffe71710785714fd',1,'tram::Signal::TRIGGER()'],['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afda7212349b95502a98e821a6a03013e23c',1,'tram::Message::TRIGGER()']]], ['trigger_130',['Trigger',['../classtram_1_1_trigger.html#ad3b87b8e7ae11e8813593402ff1ae12c',1,'tram::Trigger']]], ['trigger_131',['trigger',['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_action.html#ad286a54082f47f5755efd6cc9c73823c',1,'tram::Ext::Kitchensink::DialogAction']]], ['trigger_2ecpp_132',['trigger.cpp',['../components_2trigger_8cpp.html',1,'(Global Namespace)'],['../entities_2trigger_8cpp.html',1,'(Global Namespace)']]], ['trigger_2eh_133',['trigger.h',['../entities_2trigger_8h.html',1,'(Global Namespace)'],['../components_2trigger_8h.html',1,'(Global Namespace)']]], ['trigger_5fdisabled_134',['TRIGGER_DISABLED',['../namespacetram.html#a7df27030d05a9ea15250c9c9811a6f80ac0129f4f79c932b3b87cc690cfafb159',1,'tram']]], ['trigger_5fflags_135',['trigger_flags',['../classtram_1_1_trigger.html#ab6e57dd6a789d4f62c5a85b2b6974040',1,'tram::Trigger']]], ['trigger_5ft_136',['trigger_t',['../structtram_1_1_physics_1_1trigger__t.html',1,'tram::Physics']]], ['triggerautosave_137',['TriggerAutosave',['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_autosave.html',1,'tram::Ext::Kitchensink::TriggerAutosave'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_autosave.html#ac6a7eaffb4459cf10007606b0f9c8f8b',1,'tram::Ext::Kitchensink::TriggerAutosave::TriggerAutosave()']]], ['triggercomponent_138',['TriggerComponent',['../classtram_1_1_trigger_component.html',1,'tram']]], ['triggercomponent_139',['triggercomponent',['../classtram_1_1_trigger.html#a72b18d259352340995c217999106916d',1,'tram::Trigger']]], ['triggercomponent_140',['TriggerComponent',['../classtram_1_1_trigger_component.html#acb29106d21d1cf02169a58c1c82c86a3',1,'tram::TriggerComponent']]], ['triggerhurt_141',['TriggerHurt',['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_hurt.html',1,'tram::Ext::Kitchensink::TriggerHurt'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_hurt.html#ae6b5d706f8a9d56a245ac555ec95a44d',1,'tram::Ext::Kitchensink::TriggerHurt::TriggerHurt()']]], ['triggermultiple_142',['TriggerMultiple',['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_multiple.html',1,'tram::Ext::Kitchensink::TriggerMultiple'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_multiple.html#a4602154e8a02a03eae992f400079dfb4',1,'tram::Ext::Kitchensink::TriggerMultiple::TriggerMultiple()']]], ['triggeronce_143',['TriggerOnce',['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_once.html',1,'tram::Ext::Kitchensink::TriggerOnce'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_once.html#accb4e63a197bbd0d350b72d58dc6a127',1,'tram::Ext::Kitchensink::TriggerOnce::TriggerOnce()']]], ['triggerplayermovement_144',['TriggerPlayerMovement',['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_player_movement.html',1,'tram::Ext::Kitchensink::TriggerPlayerMovement'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_player_movement.html#a944ce8f354e4ba224b3ba2257a80257b',1,'tram::Ext::Kitchensink::TriggerPlayerMovement::TriggerPlayerMovement()']]], ['triggerpush_145',['TriggerPush',['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_push.html',1,'tram::Ext::Kitchensink::TriggerPush'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_push.html#a19f24315f51a42ac631cd6e9031f196a',1,'tram::Ext::Kitchensink::TriggerPush::TriggerPush()']]], ['triggerremove_146',['TriggerRemove',['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_remove.html',1,'tram::Ext::Kitchensink::TriggerRemove'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_remove.html#a32851695a736fb2e4419782991115f99',1,'tram::Ext::Kitchensink::TriggerRemove::TriggerRemove()']]], ['triggers_147',['triggers',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest.html#af46e76fae1a86683f0b2221b995c62aa',1,'tram::Ext::Kitchensink::Quest']]], ['triggerteleport_148',['TriggerTeleport',['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_teleport.html',1,'tram::Ext::Kitchensink::TriggerTeleport'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_teleport.html#a2dc8dfbaa1e358714459a4854860aa8d',1,'tram::Ext::Kitchensink::TriggerTeleport::TriggerTeleport()']]], ['try_5fpop_149',['try_pop',['../classtram_1_1_queue.html#a0c059b66ef5b9bac992a134da0b9768a',1,'tram::Queue']]], ['trydebugging_150',['TryDebugging',['../namespacetram_1_1_platform.html#abafedf61de1bb3dc299c601f678ca6d5',1,'tram::Platform']]], ['turnleft_151',['TurnLeft',['../classtram_1_1_controller_component.html#ad173b5388f4168d4de4acd13e4819089',1,'tram::ControllerComponent::TurnLeft()'],['../classtram_1_1_f_p_s_controller_component.html#a23e43852ea4528a1b50f28628f5a9f20',1,'tram::FPSControllerComponent::TurnLeft()'],['../classtram_1_1_raycast_controller_component.html#a84b8137c59028604b98c6087ddf03bec',1,'tram::RaycastControllerComponent::TurnLeft()'],['../classtram_1_1_path_follower.html#aa88ed283123c1543ce714b87ec215ba8',1,'tram::PathFollower::TurnLeft()']]], ['turnright_152',['TurnRight',['../classtram_1_1_raycast_controller_component.html#a7f441e43b9e92927dbb4103cf7fa3052',1,'tram::RaycastControllerComponent::TurnRight()'],['../classtram_1_1_path_follower.html#a4a7dc721d2c2def8c57b73bf3e398314',1,'tram::PathFollower::TurnRight()'],['../classtram_1_1_f_p_s_controller_component.html#aa68f65e5a902e77db578edf8d1b4af34',1,'tram::FPSControllerComponent::TurnRight()'],['../classtram_1_1_controller_component.html#a1ebc25137ba38f067f7986e3a5f1d5db',1,'tram::ControllerComponent::TurnRight()']]], ['turnstraight_153',['TurnStraight',['../classtram_1_1_path_follower.html#af9aa9d6eca479eb74eca580212dc42a2',1,'tram::PathFollower']]], ['type_154',['type',['../structtram_1_1_render_1_1_a_a_b_b_1_1_query_response.html#acbc9174af642114af907b43460aa2b39',1,'tram::Render::AABB::QueryResponse::type()'],['../structtram_1_1_render_1_1_vertex_attribute.html#a3e41ef607217ea0dd93110df26b9d672',1,'tram::Render::VertexAttribute::type()'],['../structtram_1_1_settings_1_1_setting_info.html#a77fe25accfc80bff790e3f81ebfb527e',1,'tram::Settings::SettingInfo::type()'],['../classtram_1_1_render_1_1_material.html#adafa815945158f89825308d5286869d2',1,'tram::Render::Material::type()'],['../structtram_1_1_physics_1_1_collision_shape.html#ad4f0ef4192b9763bc7775ef9f6b9a26b',1,'tram::Physics::CollisionShape::type()'],['../structtram_1_1_physics_1_1_a_p_i_1_1_rigidbody_metadata.html#aea210efa373c418e2c0ddb2b5ecc623c',1,'tram::Physics::API::RigidbodyMetadata::type()'],['../classtram_1_1_value.html#af5bb94d263f9f0a53c7a317b903fa8aa',1,'tram::Value::type()'],['../structtram_1_1_signal.html#a0a38e6da9341346a46338ba52c2be472',1,'tram::Signal::type()'],['../classtram_1_1_path_follower.html#ad11ffc06ffa7fa6b5fd4732ee7ec70ab',1,'tram::PathFollower::type()'],['../structtram_1_1_path_edge_info.html#a26b5bde92d299e926fffa3cd942cfdbc',1,'tram::PathEdgeInfo::type()'],['../structtram_1_1_message.html#a0f822eec485aa46e9c93e9445526c8c1',1,'tram::Message::type()'],['../structtram_1_1_event.html#a26cc77ee3a08567434f0b475a148007a',1,'tram::Event::type()'],['../structtram_1_1_listener_info.html#a07e1a856ac9f66c9b9f71644d23ada02',1,'tram::ListenerInfo::type()'],['../structtram_1_1_shared_entity_data.html#a64c88d3fd0cd94c90c66f1dd9dd5ce9e',1,'tram::SharedEntityData::type()'],['../structtram_1_1_ext_1_1_menu_1_1_event_intercept.html#a26cca1d8441ace64474409596e11338a',1,'tram::Ext::Menu::EventIntercept::type()'],['../structtram_1_1_ext_1_1_menu_1_1_message_intercept.html#ad4a5ce94c977ea6b4c6a0c95b1176769',1,'tram::Ext::Menu::MessageIntercept::type()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_trigger.html#a7913f7b41be31d418a7811479db0a6e5',1,'tram::Ext::Kitchensink::QuestTrigger::type()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a7d0db342f3f3eed6bc5d8e2bad2bea5d',1,'tram::Ext::Kitchensink::QuestVariable::type()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_topic.html#aaeb1f8e04e35e34ff363d9fd6b8eeb0a',1,'tram::Ext::Kitchensink::DialogTopic::type()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_effect.html#a1ed0d5f39ee959afa066eef7c765e546',1,'tram::Ext::Kitchensink::Effect::type()'],['../classtram_1_1_scriptable.html#ae2b71cc843f216e53f0eeb2a4ebed28e',1,'tram::Scriptable::type()']]], ['type_155',['Type',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afd',1,'tram::Message::Type()'],['../structtram_1_1_event.html#a569d6673fa83d2a5ec86b3d0c36c8765',1,'tram::Event::Type()'],['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609',1,'tram::Type()'],['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6',1,'tram::Signal::Type()']]], ['type_156',['type',['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_vertex_array.html#a9696b067eb3e37d068c606ba565da133',1,'tram::Render::API::SWVertexArray']]], ['type_2ecpp_157',['type.cpp',['../type_8cpp.html',1,'']]], ['type_2eh_158',['type.h',['../type_8h.html',1,'']]], ['type_5fbool_159',['TYPE_BOOL',['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609a111453a4d7714cf86faa97be315b46cc',1,'tram']]], ['type_5ffloat32_160',['TYPE_FLOAT32',['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609afa725a1f951661b708f729b920749c1d',1,'tram']]], ['type_5fint16_161',['TYPE_INT16',['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609a49b78449d81fdcd2a93b3d5fa92325c4',1,'tram']]], ['type_5fint32_162',['TYPE_INT32',['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609a86fd0d5ff1171a6451643f81818e90a5',1,'tram']]], ['type_5fint8_163',['TYPE_INT8',['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609ad0d568cbbb0814f238d210d2b4e9d3c0',1,'tram']]], ['type_5fname_164',['TYPE_NAME',['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609af71a0101efab7293c5e5e7d0e1fddd8c',1,'tram']]], ['type_5fquat_165',['TYPE_QUAT',['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609ab4f55e3ac7164edcba77a919c4c6c92b',1,'tram']]], ['type_5fstring_166',['TYPE_STRING',['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609a3d336d61c1e5bc13bd9118a9eaef27b6',1,'tram']]], ['type_5fuint16_167',['TYPE_UINT16',['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609af8ea1dfd3e18e18031dd0108f82b07ef',1,'tram']]], ['type_5fuint32_168',['TYPE_UINT32',['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609a844da12f97bd954de21a57e8a2a92417',1,'tram']]], ['type_5fuint8_169',['TYPE_UINT8',['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609ab89f008c241c92259b4b0c1d4d91624e',1,'tram']]], ['type_5fundefined_170',['TYPE_UNDEFINED',['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609ad58e67edf974dfb07e729461f8705f05',1,'tram']]], ['type_5fvec2_171',['TYPE_VEC2',['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609a4f418b5865c768e38124f40a4ce833e4',1,'tram']]], ['type_5fvec3_172',['TYPE_VEC3',['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609aa18f8ff29f12654a098855735f6ec009',1,'tram']]], ['type_5fvec4_173',['TYPE_VEC4',['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609ab74623faa07cd1460524e37db8650aee',1,'tram']]], ['typetostring_174',['TypeToString',['../namespacetram.html#a8f6d1d8931b6fc9fe7e5767f1352383e',1,'tram']]], ['ui_175',['UI',['../namespacetram_1_1_u_i.html',1,'tram']]], ['window_176',['Window',['../namespacetram_1_1_platform_1_1_window.html',1,'tram::Platform']]] ]; ================================================ FILE: docs/cppapi/search/all_15.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/all_15.js ================================================ var searchData= [ ['ui_0',['UI',['../namespacetram_1_1_system.html#a02b5e7a5340ef5ca42a650ca4d8ade65ad88b5fea78202cf57786b8c73b33de50',1,'tram::System']]], ['ui_2ecpp_1',['ui.cpp',['../ui_8cpp.html',1,'']]], ['ui_2eh_2',['ui.h',['../ui_8h.html',1,'']]], ['uid_3',['UID',['../structtram_1_1_u_i_d.html',1,'tram::UID'],['../structtram_1_1_u_i_d.html#aab45feed090c6e1b82756eb8a47c8c2e',1,'tram::UID::UID()'],['../structtram_1_1_u_i_d.html#a5d4fdf9f636c6e28fefbb716b0c1ad82',1,'tram::UID::UID(const UID &value)'],['../structtram_1_1_u_i_d.html#a8b30e026e1776200b7f91f67c7492aea',1,'tram::UID::UID(const std::string &value)'],['../structtram_1_1_u_i_d.html#a4bfd2fabbf7538d9145235b83784332a',1,'tram::UID::UID(const char *value)']]], ['uid_2ecpp_4',['uid.cpp',['../uid_8cpp.html',1,'']]], ['uid_2eh_5',['uid.h',['../uid_8h.html',1,'']]], ['uid_5fcharacter_5flimit_6',['UID_CHARACTER_LIMIT',['../namespacetram.html#abd586f202b2593831d3d48a18eb15776',1,'tram']]], ['uid_5flimit_7',['UID_LIMIT',['../namespacetram.html#af8599d00d63ed9f6ee3eecb0c0b136b8',1,'tram']]], ['uint32_8',['UINT32',['../structtram_1_1_render_1_1_vertex_attribute.html#a5478d84843dda2d90f4628b2e2c39868aef6493c68c47d96ac90a5ec12a80ecf8',1,'tram::Render::VertexAttribute']]], ['uint32_9',['uint32',['../structtram_1_1_settings_1_1_setting_info.html#a5d38111e0ad99f7248006277064dffe5',1,'tram::Settings::SettingInfo']]], ['uint32_5fptr_10',['uint32_ptr',['../classtram_1_1_value_ptr.html#a1916311938740122169aaf88c83aefa9',1,'tram::ValuePtr']]], ['uint32_5fvalue_11',['uint32_value',['../classtram_1_1_value.html#a7be0d3e1625e7bc8cb398908153709de',1,'tram::Value']]], ['unequipitem_12',['UnequipItem',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#a3947148514d07596275b3ceddef07ed1',1,'tram::Ext::Kitchensink::Inventory']]], ['unequipslot_13',['UnequipSlot',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#a020f087850b6993a1d3751c2b133063d',1,'tram::Ext::Kitchensink::Inventory']]], ['uninit_14',['Uninit',['../namespacetram_1_1_audio.html#a999017ca4b466fef799869fd591d134e',1,'tram::Audio::Uninit()'],['../namespacetram_1_1_audio_1_1_a_p_i.html#adb92f6546681004b6ec62abf005d3f68',1,'tram::Audio::API::Uninit()'],['../namespacetram_1_1_ext_1_1_scripting_1_1_lua.html#a0b662ed28da72b11080b7948181fa066',1,'tram::Ext::Scripting::Lua::Uninit()'],['../namespacetram_1_1_u_i.html#a5206ed605c69006a0d6ad1b2dafb2a80',1,'tram::UI::Uninit()'],['../namespacetram_1_1_platform_1_1_window.html#a573de0dcedb42bb3fc34a010d3cbff38',1,'tram::Platform::Window::Uninit()'],['../namespacetram_1_1_platform_1_1_input.html#a5206ed605c69006a0d6ad1b2dafb2a80',1,'tram::Platform::Input::Uninit()']]], ['uninitoutput_15',['UninitOutput',['../namespacetram_1_1_audio_1_1_spatial.html#abd2e06cbc247c1a503526098fb084789',1,'tram::Audio::Spatial']]], ['unload_16',['Unload',['../classtram_1_1_static_world_object.html#abe3ba490eff6dbed046904e2cda3aa01',1,'tram::StaticWorldObject::Unload()'],['../classtram_1_1_trigger.html#a8c2c332e744a2e780974d4638d388c6e',1,'tram::Trigger::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a8eac7f52eb37a936c9378307412c6c08',1,'tram::Ext::Kitchensink::Button::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_breakable.html#af2fc102e7da4b0707df89f56909a1c20',1,'tram::Ext::Kitchensink::Breakable::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_water.html#a81376f797590abe8a90b35ac999a0613',1,'tram::Ext::Kitchensink::Water::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_train.html#afa1b79f17c17ead03058dd28ae1cc3ef',1,'tram::Ext::Kitchensink::Train::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_pickup.html#a2881141c1ee4783d0b719b1dd28a68e6',1,'tram::Ext::Kitchensink::Pickup::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_text.html#ade7918dd8156ee4252c58eece2cfdb98',1,'tram::Ext::Kitchensink::DebugText::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_shape.html#affdabd90a946e7aae9301f7d47d87fe1',1,'tram::Ext::Kitchensink::DebugShape::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_autosave.html#aea36c18cd09a2fc62b2cd8713744c903',1,'tram::Ext::Kitchensink::TriggerAutosave::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_hurt.html#ac28bb3aede402f40174b4348a10e1cf9',1,'tram::Ext::Kitchensink::TriggerHurt::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_once.html#aa0cc2cfba975cf5a964444914ea15cc9',1,'tram::Ext::Kitchensink::TriggerOnce::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_multiple.html#a9df96abe2232f3566983f29a87e62254',1,'tram::Ext::Kitchensink::TriggerMultiple::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_push.html#aba68720ed7fe5a20f905404548cd71be',1,'tram::Ext::Kitchensink::TriggerPush::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_remove.html#ab3aa0697b3e09b938d18c71253fefb90',1,'tram::Ext::Kitchensink::TriggerRemove::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_teleport.html#a6c178b1022efc43f197d8bebc4e1ba32',1,'tram::Ext::Kitchensink::TriggerTeleport::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_player_movement.html#a566d546dad8cbfe6758851ac38442a9a',1,'tram::Ext::Kitchensink::TriggerPlayerMovement::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_quest_entity.html#afb7d9e51247faff2fb3b2a67372260fd',1,'tram::Ext::Kitchensink::QuestEntity::Unload()'],['../classtram_1_1_entity.html#a2b9df5ef54954cdcd7b0f3af7aa7f829',1,'tram::Entity::Unload()'],['../classtram_1_1_resource.html#a11d6ce36b6bf1d520bb63d6413e99299',1,'tram::Resource::Unload()'],['../classtram_1_1_world_cell.html#ad023bb63d9cb471fb1b4ab17d59c9b63',1,'tram::WorldCell::Unload()'],['../classtram_1_1_physics_1_1_collision_model.html#a2f20c343448ae313aea88be28784704c',1,'tram::Physics::CollisionModel::Unload()'],['../classtram_1_1_render_1_1_animation.html#ad47884e1acea138f8b664bc2d418dfd6',1,'tram::Render::Animation::Unload()'],['../classtram_1_1_render_1_1_light_graph.html#a798e549b6f611fceee1549ecdf63658a',1,'tram::Render::LightGraph::Unload()'],['../classtram_1_1_render_1_1_material.html#aefa2777f79de1882362e0fc50099a46e',1,'tram::Render::Material::Unload()'],['../classtram_1_1_render_1_1_model.html#a7e5db9d7130f9cda66ad3be78026c673',1,'tram::Render::Model::Unload()'],['../classtram_1_1_audio_1_1_sound_graph.html#a5e25152edb671610cb0edca497a653de',1,'tram::Audio::SoundGraph::Unload()'],['../classtram_1_1_audio_1_1_sound.html#a6070314c5146a08863b061aeafede2b2',1,'tram::Audio::Sound::Unload()'],['../classtram_1_1_crate.html#ab8336e58a8dcb7e3631db13003011232',1,'tram::Crate::Unload()'],['../classtram_1_1_render_1_1_sprite.html#a163aa5c3d09db10acb35f4446705faa4',1,'tram::Render::Sprite::Unload()'],['../classtram_1_1_decoration.html#ad8917fa59a923deca11f37f96825f9b5',1,'tram::Decoration::Unload()'],['../classtram_1_1_light.html#a14d15741d030edc15620a73fbfaf0256',1,'tram::Light::Unload()'],['../classtram_1_1_marker.html#ad8cb67e60618a29e0d170527f30d3e71',1,'tram::Marker::Unload()'],['../classtram_1_1_player.html#afddc1a9d1a0e2a61cc8bb13e210c0643',1,'tram::Player::Unload()'],['../classtram_1_1_scriptable.html#a4f92e3739872ff0938669d2d493f932d',1,'tram::Scriptable::Unload()'],['../classtram_1_1_sound.html#a6070314c5146a08863b061aeafede2b2',1,'tram::Sound::Unload()']]], ['unloaded_17',['UNLOADED',['../classtram_1_1_resource.html#a7a4ce943d482665189305b828868c2a4aaf2b9e0d9106fbd6dac3913e0b23f11d',1,'tram::Resource']]], ['unlock_18',['unlock',['../classtram_1_1_queue.html#a264f19470d0c440e15b3fea1a3ca083a',1,'tram::Queue']]], ['unlock_19',['Unlock',['../classtram_1_1_spinlock.html#abc3aa4bbf54049125b46326dec076634',1,'tram::Spinlock']]], ['unlock_20',['UNLOCK',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afda293259ce10e99401eb22c95c3e2af001',1,'tram::Message']]], ['unlockrenderlist_21',['UnlockRenderlist',['../namespacetram_1_1_audio_1_1_spatial.html#a1f2da687a7b846d596f35af37ae63841',1,'tram::Audio::Spatial']]], ['unregister_22',['Unregister',['../classtram_1_1_entity.html#a80727e0995ac3f27addb02613c8e5edd',1,'tram::Entity']]], ['untrack_23',['Untrack',['../namespacetram_1_1_loader.html#add220f7fedcb52197b68d9d17115ceaa',1,'tram::Loader']]], ['update_24',['Update',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#afb2ef9be0c07a1df11c53cf1a6d632fe',1,'tram::Ext::Camera::FirstPersonCamera::Update()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html#a2d6f211e82a9785ead2324aa02ad7222',1,'tram::Ext::Kitchensink::AIAgent::Update()'],['../classtram_1_1_entity.html#af4a0a09ff81566de5b217018529844c5',1,'tram::Entity::Update()'],['../namespacetram_1_1_platform_1_1_window.html#aaed5c879e7890030c7db2b6a03949f39',1,'tram::Platform::Window::Update()'],['../classtram_1_1_animation_component.html#a6553e17f7e26893e25cca1b229a2ab65',1,'tram::AnimationComponent::Update()'],['../classtram_1_1_controller_component.html#adc0d17de6313da06268b3c14b18e8dcf',1,'tram::ControllerComponent::Update()'],['../classtram_1_1_decal_component.html#a0c93631ef6012a9b3e77b973debda630',1,'tram::DecalComponent::Update()'],['../classtram_1_1_light_component.html#ae3a23ce02a2f45cbfcc386a78acc5db4',1,'tram::LightComponent::Update()'],['../classtram_1_1_particle_component.html#a87d6c21e29d20330fba57f8d3b2134cd',1,'tram::ParticleComponent::Update()'],['../classtram_1_1_sprite_component.html#a8755153a58b06a785cd393fb23252b3c',1,'tram::SpriteComponent::Update()'],['../classtram_1_1_ext_1_1_camera_1_1_camera.html#ae0d37368dbc256f74d6a8eb756fbcd63',1,'tram::Ext::Camera::Camera::Update()'],['../namespacetram_1_1_audio_1_1_a_p_i.html#a55057fbdf290e0782209c5b31d972488',1,'tram::Audio::API::Update()'],['../namespacetram_1_1_audio.html#acb768aeb78a526fe6c4378db6041b06b',1,'tram::Audio::Update()'],['../namespacetram_1_1_ext_1_1_camera.html#abe8df61bea8ea5f58fa6efa942eeaa4c',1,'tram::Ext::Camera::Update()'],['../namespacetram_1_1_ext_1_1_kitchensink.html#a4999baa52dc92a9e3e5ce094d39e6a6f',1,'tram::Ext::Kitchensink::Update()'],['../namespacetram_1_1_ext_1_1_menu.html#ae5c12ef1b6e9e1cc0ee542e6296e9057',1,'tram::Ext::Menu::Update()'],['../namespacetram_1_1_core.html#aca02676414df9541f853df2376da13bd',1,'tram::Core::Update()'],['../namespacetram_1_1_g_u_i.html#a19bd1015c21055a46d61eb4193a888cc',1,'tram::GUI::Update()'],['../namespacetram_1_1_loader.html#aa2ff0e373bfa20733197131513624505',1,'tram::Loader::Update()'],['../namespacetram_1_1_u_i.html#a8d6af6713f2e6c053cacfaab7e628438',1,'tram::UI::Update()'],['../namespacetram_1_1_physics.html#aba25e48ea456c82d6c11ef12b2862184',1,'tram::Physics::Update()'],['../namespacetram_1_1_platform_1_1_input.html#a8d6af6713f2e6c053cacfaab7e628438',1,'tram::Platform::Input::Update()']]], ['updateaction_25',['updateAction',['../classtram_1_1_physics_1_1_path_action.html#a41ae4385e939b2c9eca055424032d050',1,'tram::Physics::PathAction']]], ['updateai_26',['UpdateAI',['../namespacetram_1_1_ext_1_1_kitchensink.html#aa032a6e16a417cef3ada074352b8a242',1,'tram::Ext::Kitchensink']]], ['updatecallbacks_27',['UpdateCallbacks',['../namespacetram_1_1_ext_1_1_menu.html#aabf1b590c1e568b43ccb3060adf2fa22',1,'tram::Ext::Menu']]], ['updatedrawlistfonts_28',['UpdateDrawListFonts',['../namespacetram_1_1_g_u_i.html#aa150493c2b4c1d204d394ec3a8145ef1',1,'tram::GUI']]], ['updatehierarchy_29',['UpdateHierarchy',['../namespacetram_1_1_ext_1_1_kitchensink.html#a68dcf197af43441da209e8296de00111',1,'tram::Ext::Kitchensink']]], ['updatelocation_30',['UpdateLocation',['../classtram_1_1_sprite_component.html#a067d3592ad5bfba2afba0b4a6a447ee8',1,'tram::SpriteComponent::UpdateLocation()'],['../classtram_1_1_particle_component.html#afd1c7f1296b2b2d19aa4f7a7eea2893b',1,'tram::ParticleComponent::UpdateLocation()']]], ['updateoutput_31',['UpdateOutput',['../namespacetram_1_1_audio_1_1_spatial.html#a1369d0d3a2339c9205f38130aaa18b05',1,'tram::Audio::Spatial']]], ['updateparameters_32',['UpdateParameters',['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_push.html#abfe9a81308db168ea94212b43c2b2c59',1,'tram::Ext::Kitchensink::TriggerPush::UpdateParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_remove.html#ad6d873ff183a86de8c1997f3c59f6416',1,'tram::Ext::Kitchensink::TriggerRemove::UpdateParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_teleport.html#aa839f0ebcb29f3e79f4bd91aa5c67a5b',1,'tram::Ext::Kitchensink::TriggerTeleport::UpdateParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_player_movement.html#afdf06caa8341620e6e60fcefcd953286',1,'tram::Ext::Kitchensink::TriggerPlayerMovement::UpdateParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_quest_entity.html#ae1268d343f92cdd87ea7ba095a29b6d8',1,'tram::Ext::Kitchensink::QuestEntity::UpdateParameters()'],['../classtram_1_1_entity.html#a8654143c591ec6d8dcb5d2414d4d63a3',1,'tram::Entity::UpdateParameters()'],['../classtram_1_1_crate.html#a30a0ab1f7c54b15b1eb0a02a381790bd',1,'tram::Crate::UpdateParameters()'],['../classtram_1_1_decoration.html#af3ea5d13e17e6b50f233a9104892ba1c',1,'tram::Decoration::UpdateParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_multiple.html#a0bf6e059ed5c51f77ec170c98d88038d',1,'tram::Ext::Kitchensink::TriggerMultiple::UpdateParameters()'],['../classtram_1_1_light.html#ae075d84f1f0778ac30f0ba35d040998f',1,'tram::Light::UpdateParameters()'],['../classtram_1_1_marker.html#a1a145d01d9bdd8d6aebd38b3ce27cf3d',1,'tram::Marker::UpdateParameters()'],['../classtram_1_1_player.html#a34cfa479567416e9aa5b3b147b44fdb5',1,'tram::Player::UpdateParameters()'],['../classtram_1_1_scriptable.html#a119e711f82fe681c38b372634754bfe2',1,'tram::Scriptable::UpdateParameters()'],['../classtram_1_1_sound.html#a859500a040dbfa4ac1e303fc2f9b3723',1,'tram::Sound::UpdateParameters()'],['../classtram_1_1_static_world_object.html#a304c5569f576f950ff443c4fd5910f9b',1,'tram::StaticWorldObject::UpdateParameters()'],['../classtram_1_1_trigger.html#ac3db6f95f9583f10e1bbe88f0915e389',1,'tram::Trigger::UpdateParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a5fb8a5285093beccc894039c5102aab4',1,'tram::Ext::Kitchensink::Button::UpdateParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_breakable.html#aae8c4d28e4f057e28f392e96a498890c',1,'tram::Ext::Kitchensink::Breakable::UpdateParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_water.html#acf40cdc632ca2113b4299ac9ce9387d4',1,'tram::Ext::Kitchensink::Water::UpdateParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_train.html#a101e803dc193a3588f046f7e33ec2167',1,'tram::Ext::Kitchensink::Train::UpdateParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_pickup.html#afc230744f36cb7dc31dcd30ce8d97881',1,'tram::Ext::Kitchensink::Pickup::UpdateParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_text.html#ac335b5e268c6bde3d3d7dbbd7c9358a5',1,'tram::Ext::Kitchensink::DebugText::UpdateParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_shape.html#a2e0f87444db5fef3bd831bea39775302',1,'tram::Ext::Kitchensink::DebugShape::UpdateParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_autosave.html#aeb7b0630b5ed9fa40444e378fa5b5681',1,'tram::Ext::Kitchensink::TriggerAutosave::UpdateParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_hurt.html#a81726364a17268ea23d810a35ce4d3b2',1,'tram::Ext::Kitchensink::TriggerHurt::UpdateParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_once.html#a30104cdda5bc47e58da125d3bf574fc6',1,'tram::Ext::Kitchensink::TriggerOnce::UpdateParameters()']]], ['updateparentaabb_33',['UpdateParentAABB',['../classtram_1_1_a_a_b_b_tree.html#a32675d95c889b42d34ec88309ccc1adc',1,'tram::AABBTree']]], ['updaterenderlistobject_34',['UpdateRenderListObject',['../classtram_1_1_decal_component.html#a59130c628a9585b0c39b12b96b915994',1,'tram::DecalComponent::UpdateRenderListObject()'],['../classtram_1_1_particle_component.html#a809c4b587625c3050decf6df8de83c07',1,'tram::ParticleComponent::UpdateRenderListObject()'],['../classtram_1_1_sprite_component.html#a0ebab8875f064f5119b9bd976fe7f117',1,'tram::SpriteComponent::UpdateRenderListObject()']]], ['updatespritearray_35',['UpdateSpriteArray',['../namespacetram_1_1_render_1_1_a_p_i.html#a2c690bed4e6f7ccf1e001526b6b6f013',1,'tram::Render::API']]], ['updatetransform_36',['UpdateTransform',['../classtram_1_1_entity.html#a475636f78b92b3eca43ce1d01da4fcb8',1,'tram::Entity']]], ['updatevertexarray_37',['UpdateVertexArray',['../namespacetram_1_1_render_1_1_a_p_i.html#a23acf51fa4097aecd557d23f73131463',1,'tram::Render::API']]], ['uploaduniformbuffer_38',['UploadUniformBuffer',['../namespacetram_1_1_render_1_1_a_p_i.html#a6a7dd403c84682d2d554721e611e5880',1,'tram::Render::API']]], ['use_39',['USE',['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6a82485cb8296d8eb5604d3aba9e489e29',1,'tram::Signal']]], ['user_40',['USER',['../namespacetram_1_1_settings.html#a0861538a476a71457a80e698e710eef1ab553ee57502969cce370c35c3f47fa20',1,'tram::Settings::USER()'],['../namespacetram.html#a529c8d3e049a7dcc4425fbe040e4c531a2e40ad879e955201df4dedbf8d479a12',1,'tram::USER()']]], ['userindex_41',['UserIndex',['../namespacetram_1_1_physics_1_1_a_p_i.html#a142223787cfe33696de7cd92c8ae663c',1,'tram::Physics::API']]], ['userindex_5frigidbody_42',['USERINDEX_RIGIDBODY',['../namespacetram_1_1_physics_1_1_a_p_i.html#a142223787cfe33696de7cd92c8ae663ca9e73c15871f0e5bf0d0c703f2806847c',1,'tram::Physics::API']]], ['userindex_5ftrigger_43',['USERINDEX_TRIGGER',['../namespacetram_1_1_physics_1_1_a_p_i.html#a142223787cfe33696de7cd92c8ae663cadbe60cd188938c521a61b0ca3cc66b72',1,'tram::Physics::API']]], ['utf16tolatin7_44',['UTF16ToLatin7',['../namespacetram_1_1_language.html#aef5799e241bda18ef51f887437408573',1,'tram::Language']]], ['utils_2ecpp_45',['utils.cpp',['../utils_8cpp.html',1,'']]], ['uvec3_46',['uvec3',['../namespacetram.html#a6302de3ebd59f9e8325c9d2f2752b78f',1,'tram']]], ['uvec4_47',['uvec4',['../namespacetram.html#ac9bd3cda50ab2180695b6e4bc8bddb74',1,'tram']]] ]; ================================================ FILE: docs/cppapi/search/all_16.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/all_16.js ================================================ var searchData= [ ['validate_0',['validate',['../classtram_1_1_pool.html#a10facadf048aa836508ffd73c22fbc69',1,'tram::Pool']]], ['validateresult_1',['ValidateResult',['../namespacetram_1_1_audio_1_1_spatial.html#ad48745046cf034947258d77acad7b082',1,'tram::Audio::Spatial']]], ['validatetree_2',['ValidateTree',['../classtram_1_1_a_a_b_b_tree.html#a509b43b26b87d2c14783fb7af4ddfb3d',1,'tram::AABBTree::ValidateTree(Node *node)'],['../classtram_1_1_a_a_b_b_tree.html#abc30ba522129a7fe8d093bce4f9ab6c9',1,'tram::AABBTree::ValidateTree(Node *node, size_t num)']]], ['value_3',['Value',['../classtram_1_1_value.html',1,'tram']]], ['value_4',['value',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#ad77d58b02c65c98115798f167a4a6cb4',1,'tram::Ext::Kitchensink::QuestVariable::value()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a9fea540d2b9a8fec5b7bec83329d33fa',1,'tram::Ext::Kitchensink::QuestVariable::value()'],['../structtram_1_1_settings_1_1_property.html#a5389ad0ee0f0f3c870ba776440671897',1,'tram::Settings::Property::value()'],['../structtram_1_1_a_a_b_b_tree_1_1_node.html#ab59c932ba14cda33cd9918d02ef074c1',1,'tram::AABBTree::Node::value()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_trigger.html#a9cce590fff9284b7c0e791495517aa8e',1,'tram::Ext::Kitchensink::QuestTrigger::value()'],['../structtram_1_1_ext_1_1_menu_1_1_message_intercept.html#aed2f13180c49a2b73832bc00d0bf9a93',1,'tram::Ext::Menu::MessageIntercept::value()'],['../structtram_1_1_ext_1_1_menu_1_1_event_intercept.html#a9c997714569712e28893f2422f6aad8e',1,'tram::Ext::Menu::EventIntercept::value()'],['../structtram_1_1_settings_1_1_raw_setting.html#a3f36f7e9e8252147d72a427c735b5d7b',1,'tram::Settings::RawSetting::value()'],['../structtram_1_1_hashmap_1_1_record.html#ab2c09b3dcf41d13a53dc2d65e6a60996',1,'tram::Hashmap::Record::value()']]], ['value_5',['Value',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a18c205b49926dee3f171363f65249349',1,'tram::Ext::Kitchensink::QuestVariable::Value()'],['../classtram_1_1_value.html#a5794f8b98f39f0f898874e38bbe9c66f',1,'tram::Value::Value()'],['../classtram_1_1_value.html#ab72671e0091919d1657ac549e9b6bc60',1,'tram::Value::Value(const Value &other)'],['../classtram_1_1_value.html#a853b7775d3db060de6868c3e284e1305',1,'tram::Value::Value(bool value)'],['../classtram_1_1_value.html#a6c99dda196237da9884bd1390dd40f6e',1,'tram::Value::Value(name_t value)'],['../classtram_1_1_value.html#a598196e2d0a2320326b46ed5ca9e6055',1,'tram::Value::Value(const char *value)'],['../classtram_1_1_value.html#ac3b2d9648f97190efe021f4c8345d585',1,'tram::Value::Value(int8_t value)'],['../classtram_1_1_value.html#a32ac730eae3ebef2c9d4218db19f27e5',1,'tram::Value::Value(int16_t value)'],['../classtram_1_1_value.html#a831372ec4d00555168651da5fd654641',1,'tram::Value::Value(int64_t value)'],['../classtram_1_1_value.html#a8aa70a82725f60f68b3d24865edfc275',1,'tram::Value::Value(uint8_t value)'],['../classtram_1_1_value.html#ac198c01333d3f9819a8e08faf95cabeb',1,'tram::Value::Value(uint16_t value)'],['../classtram_1_1_value.html#afe9d45f9c080eacff5b16b8a61e94b6b',1,'tram::Value::Value(uint64_t value)'],['../classtram_1_1_value.html#a17f14d1a9ac224f049a63fe867f93f8e',1,'tram::Value::Value(double value)'],['../classtram_1_1_value.html#a5da5adfcfc734e81d6d10833b551d427',1,'tram::Value::Value(int32_t value)'],['../classtram_1_1_value.html#a21076ffaf589d2099a0ab3d3abe27bb8',1,'tram::Value::Value(uint32_t value)'],['../classtram_1_1_value.html#ad9061d7a9f7f1d440bed085327cb1893',1,'tram::Value::Value(vec2 value)'],['../classtram_1_1_value.html#a39d9d95afcdd16dc499d694e458fb553',1,'tram::Value::Value(vec3 value)'],['../classtram_1_1_value.html#a55c1e2fc1d44a258a1e7574f8dc8301d',1,'tram::Value::Value(vec4 value)'],['../classtram_1_1_value.html#a6b7c80c5327bd2f41fd145d1f9bb3716',1,'tram::Value::Value(quat value)'],['../classtram_1_1_value.html#ad1f3542b668e1dabe541a89be2338e94',1,'tram::Value::Value(float value)']]], ['value_6',['value',['../structtram_1_1_ext_1_1_kitchensink_1_1_a_i_variable.html#ab8f5ca82a06f30ec861907366c362436',1,'tram::Ext::Kitchensink::AIVariable::value()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_effect.html#a57feec2c1a36fad9bebd6884684f1fd5',1,'tram::Ext::Kitchensink::Effect::value()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_initial_attribute.html#a5860f657091240f31bf7d180e659f9fd',1,'tram::Ext::Kitchensink::InitialAttribute::value()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_base_attribute.html#af66cdb9500769f91ecff0c49a489d887',1,'tram::Ext::Kitchensink::BaseAttribute::value()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a94f01baa040314e9e8bd6b218dffc904',1,'tram::Ext::Kitchensink::ItemClass::value()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#aa38c56e4efe619fcefd99a1f87047c88',1,'tram::Ext::Kitchensink::QuestVariable::value()']]], ['value_2eh_7',['value.h',['../value_8h.html',1,'']]], ['value_5ft_8',['value_t',['../namespacetram.html#a7d506d80abf93dd017a92dbcb169f9c4',1,'tram']]], ['valuearray_9',['ValueArray',['../classtram_1_1_value_array.html',1,'tram::ValueArray'],['../classtram_1_1_value_array.html#ae0c421c4cb96c4a568d54f7761324552',1,'tram::ValueArray::ValueArray()']]], ['valuearray_5ft_10',['valuearray_t',['../namespacetram.html#a9a399a2754b52b60de20e936546d0637',1,'tram']]], ['valueptr_11',['ValuePtr',['../classtram_1_1_value_ptr.html',1,'tram::ValuePtr'],['../classtram_1_1_value_ptr.html#a1bdaf5ddd78cea7f6265b7f2885bd49f',1,'tram::ValuePtr::ValuePtr(vec3 *ptr)'],['../classtram_1_1_value_ptr.html#a92882c2ebfa617edca2359ee75f49db3',1,'tram::ValuePtr::ValuePtr(vec4 *ptr)'],['../classtram_1_1_value_ptr.html#a522c59ef5b59f1ed23637a64bf26f26e',1,'tram::ValuePtr::ValuePtr(quat *ptr)'],['../classtram_1_1_value_ptr.html#a90a98402ca4571e3de89695ccfb9bd35',1,'tram::ValuePtr::ValuePtr(float *ptr)'],['../classtram_1_1_value.html#a32a3f364acb79fb996044d7d31bc994e',1,'tram::Value::ValuePtr()'],['../classtram_1_1_value_ptr.html#a710718917b773c0a1e242cd9d1adb8ab',1,'tram::ValuePtr::ValuePtr()'],['../classtram_1_1_value_ptr.html#ab32d7ed3d22a06ad91776f2604d70e1a',1,'tram::ValuePtr::ValuePtr(const ValuePtr &other)'],['../classtram_1_1_value_ptr.html#ac0043fc618372996a0b05f85074a06b6',1,'tram::ValuePtr::ValuePtr(Value &other)'],['../classtram_1_1_value_ptr.html#a1d7b7f756a82db8ceaa542a2a991702b',1,'tram::ValuePtr::ValuePtr(bool *ptr)'],['../classtram_1_1_value_ptr.html#aeca88a1e5474cb104fcf79d0c579b583',1,'tram::ValuePtr::ValuePtr(name_t *ptr)'],['../classtram_1_1_value_ptr.html#ae34aab6f72a348a3cb5ac1d953e0df60',1,'tram::ValuePtr::ValuePtr(const char **ptr)'],['../classtram_1_1_value_ptr.html#ae042fdfe2489cb32bece84e5993b1c14',1,'tram::ValuePtr::ValuePtr(int32_t *ptr)'],['../classtram_1_1_value_ptr.html#ae055d89765f91e6dbaa448feaf0063c4',1,'tram::ValuePtr::ValuePtr(uint32_t *ptr)'],['../classtram_1_1_value_ptr.html#a47f3134ee2d01c4d863774e072a535e4',1,'tram::ValuePtr::ValuePtr(vec2 *ptr)']]], ['vao_12',['vao',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#ac984d3f4c21946c93809b5e07408fc1d',1,'tram::Render::API::GLDrawListEntry']]], ['variable_13',['variable',['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_condition.html#a14f314e9911fc87757376b5267df2b78',1,'tram::Ext::Kitchensink::DialogCondition::variable()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_trigger.html#a4d0df39a718f4aea2e2bbb77317db257',1,'tram::Ext::Kitchensink::QuestTrigger::variable()']]], ['variable1_14',['variable1',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#ad57c101bc6373283564cf19973ef47ce',1,'tram::Ext::Kitchensink::QuestVariable']]], ['variable2_15',['variable2',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a3c9c1cd6c108fb87f86e98fccc21a7ff',1,'tram::Ext::Kitchensink::QuestVariable']]], ['variables_16',['variables',['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html#a07dad067bc1ef1dbfeaa7603a0c20130',1,'tram::Ext::Kitchensink::AIAgent::variables()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest.html#abaeea35c7bce4071e8d4276215c78969',1,'tram::Ext::Kitchensink::Quest::variables()']]], ['vec2_17',['vec2',['../namespacetram.html#a2d99e12b9721e0d27d105d40a52bbc49',1,'tram']]], ['vec2_5fptr_18',['vec2_ptr',['../classtram_1_1_value_ptr.html#ab31b750bd4f2b23f2279519ca9e3a5b3',1,'tram::ValuePtr']]], ['vec2_5fvalue_19',['vec2_value',['../classtram_1_1_value.html#a5b771cb492491a14a1b2ff4aebf0ab3a',1,'tram::Value']]], ['vec3_20',['vec3',['../namespacetram.html#a632d9fcf54e995edd8c66e25cb7c1891',1,'tram']]], ['vec3_5fptr_21',['vec3_ptr',['../classtram_1_1_value_ptr.html#ac25851bd286667025b81cdf9b29c60ba',1,'tram::ValuePtr']]], ['vec3_5fvalue_22',['vec3_value',['../classtram_1_1_value.html#a76b971a65a139f711180c348be2b8dae',1,'tram::Value']]], ['vec4_23',['vec4',['../namespacetram.html#a1d95095efd075f601cb4afe9ff24c93b',1,'tram']]], ['vec4_5fptr_24',['vec4_ptr',['../classtram_1_1_value_ptr.html#a9a40889e3cb361b60b2ca68b9ad5866d',1,'tram::ValuePtr']]], ['vec4_5fvalue_25',['vec4_value',['../classtram_1_1_value.html#a52f124f1bb9637ad3ae7763768382ca8',1,'tram::Value']]], ['velocity_26',['velocity',['../structtram_1_1_particle_component_1_1_particle.html#af301390c50da385d76cb05fe2540e40f',1,'tram::ParticleComponent::Particle::velocity()'],['../classtram_1_1_f_p_s_controller_component.html#a73e7514f41a865feee9c0f9af2963911',1,'tram::FPSControllerComponent::velocity()']]], ['vertex_5farray_27',['vertex_array',['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html#a615823889f7fb122e6eeffc9c4404ed2',1,'tram::Render::API::SWDrawListEntry::vertex_array()'],['../classtram_1_1_decal_component.html#abc2da65e6a353c30908e5826b744b217',1,'tram::DecalComponent::vertex_array()'],['../classtram_1_1_particle_component.html#afc6cc6df023adfb622490cb39dee2df2',1,'tram::ParticleComponent::vertex_array()'],['../classtram_1_1_sprite_component.html#af8e1293692c40c7817c7f7523c2d2ef7',1,'tram::SpriteComponent::vertex_array()'],['../classtram_1_1_render_1_1_model.html#ab5b0370a3b31cb6fa1b9ae0ad969a5aa',1,'tram::Render::Model::vertex_array()'],['../structtram_1_1_render_1_1spritearray__t.html#a3a692b3332da76d0b2202f8831ae77b5',1,'tram::Render::spritearray_t::vertex_array()']]], ['vertex_5farrays_28',['vertex_arrays',['../namespacetram_1_1_render_1_1_a_p_i.html#af33e7d508d254e6d15926d063789d2a2',1,'tram::Render::API']]], ['vertex_5fbuffer_29',['vertex_buffer',['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#a58d427c9d7b5147bbbdc8d77a67d3891',1,'tram::Render::API::D3DDrawListEntry']]], ['vertex_5fbuffer_5fmetadata_30',['vertex_buffer_metadata',['../namespacetram_1_1_render_1_1_a_p_i.html#a7897c51fe39d6a65173b8f12bb3b6185',1,'tram::Render::API']]], ['vertex_5fcount_31',['vertex_count',['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#ab339e52985c6c382e0b314d2b4b8081c',1,'tram::Render::API::D3DDrawListEntry::vertex_count()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_vertex_array.html#add67c8209f7725b412aa0b3c24ab534f',1,'tram::Render::API::SWVertexArray::vertex_count()']]], ['vertex_5fdynamic_32',['VERTEX_DYNAMIC',['../namespacetram_1_1_render.html#a55401591f1faf2a435bdb5eb188ad2c8a2b7b747a45e6dc165399cd79730221fe',1,'tram::Render']]], ['vertex_5fformat_33',['vertex_format',['../structtram_1_1_render_1_1_a_p_i_1_1_vertex_buffer_metadata.html#a03f717cdd3ef607182b8a4865d1c7d64',1,'tram::Render::API::VertexBufferMetadata::vertex_format()'],['../classtram_1_1_render_1_1_model.html#af924ab3580f9d3e0b5fb773fa2afd8d8',1,'tram::Render::Model::vertex_format()']]], ['vertex_5flast_34',['VERTEX_LAST',['../namespacetram_1_1_render.html#a55401591f1faf2a435bdb5eb188ad2c8ac6efea31b82282c07b93044c570f0481',1,'tram::Render']]], ['vertex_5fline_35',['VERTEX_LINE',['../namespacetram_1_1_render.html#a55401591f1faf2a435bdb5eb188ad2c8aca3254ad94ebb6b1de5f49ed69adf02d',1,'tram::Render']]], ['vertex_5fsprite_36',['VERTEX_SPRITE',['../namespacetram_1_1_render.html#a55401591f1faf2a435bdb5eb188ad2c8a0da15a89b461de653834eec6475e2051',1,'tram::Render']]], ['vertex_5fstatic_37',['VERTEX_STATIC',['../namespacetram_1_1_render.html#a55401591f1faf2a435bdb5eb188ad2c8ac16ec92851118708abd2a9e6d844de77',1,'tram::Render']]], ['vertexarray_5ft_38',['vertexarray_t',['../structtram_1_1_render_1_1vertexarray__t.html',1,'tram::Render']]], ['vertexattribute_39',['VertexAttribute',['../structtram_1_1_render_1_1_vertex_attribute.html',1,'tram::Render']]], ['vertexbuffermetadata_40',['VertexBufferMetadata',['../structtram_1_1_render_1_1_a_p_i_1_1_vertex_buffer_metadata.html',1,'tram::Render::API']]], ['vertexdefinition_41',['VertexDefinition',['../structtram_1_1_render_1_1_vertex_definition.html',1,'tram::Render']]], ['vertexdefinitiontofvf_42',['VertexDefinitionToFVF',['../namespacetram_1_1_render_1_1_a_p_i.html#ab4057f1a8dc032f5f4aded5bc14b5119',1,'tram::Render::API']]], ['vertexformat_5ft_43',['vertexformat_t',['../namespacetram_1_1_render.html#a4e5691f40b84e848c0d9b19b285bf0e2',1,'tram::Render']]], ['vertexformats_44',['VertexFormats',['../namespacetram_1_1_render.html#a55401591f1faf2a435bdb5eb188ad2c8',1,'tram::Render']]], ['vertexshader_45',['VertexShader',['../classtram_1_1_render_1_1_a_p_i_1_1_vertex_shader.html',1,'tram::Render::API']]], ['verticality_46',['verticality',['../structtram_1_1_render_1_1_sprite_vertex.html#a6368e6f15b611c6bcc3160bac1d80ca8',1,'tram::Render::SpriteVertex']]], ['vertices_47',['vertices',['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_vertex_array.html#ab33cd2e86d75d32f47c3071e186fc44d',1,'tram::Render::API::SWVertexArray::vertices()'],['../structtram_1_1_render_1_1_dynamic_model_data.html#a95478c605a0c584ac6710fb1cc79c473',1,'tram::Render::DynamicModelData::vertices()'],['../structtram_1_1_render_1_1_static_model_data.html#ad57619c7212131ac5bcef78c008e9bb0',1,'tram::Render::StaticModelData::vertices()']]], ['vertices_2ecpp_48',['vertices.cpp',['../vertices_8cpp.html',1,'']]], ['vertices_2eh_49',['vertices.h',['../vertices_8h.html',1,'']]], ['view_50',['view',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_matrices.html#a7251aa6f10820a419a8927fc4bdebf26',1,'tram::Render::API::ShaderUniformMatrices::view()'],['../namespacetram_1_1_render.html#af103c344516eb912ffbee889c05775cc',1,'tram::Render::view()']]], ['view_5ffov_51',['view_fov',['../namespacetram_1_1_render.html#af4c8e9b6a1eec2f0b34697baf4a4249c',1,'tram::Render']]], ['view_5fmatrix_52',['view_matrix',['../structtram_1_1_render_1_1_a_p_i_1_1_layer_parameters.html#ae5f470f758b077022ece9b02d9853b95',1,'tram::Render::API::LayerParameters']]], ['view_5fpos_53',['view_pos',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_matrices.html#ad95d2f70b74eb3b43089224555935caf',1,'tram::Render::API::ShaderUniformMatrices']]], ['view_5fposition_54',['view_position',['../structtram_1_1_render_1_1_a_p_i_1_1_layer_parameters.html#afd5f17ca5eda416d0f7f19344a60e5bd',1,'tram::Render::API::LayerParameters::view_position()'],['../namespacetram_1_1_render.html#ac04ea2d1a0ebf06f9737506c4a145349',1,'tram::Render::view_position()']]], ['view_5fproperties_55',['view_properties',['../namespacetram_1_1_render.html#a6d7d51d8e68a3a77b1015fa31e838e57',1,'tram::Render']]], ['view_5frotation_56',['view_rotation',['../namespacetram_1_1_render.html#a296b3bccc75faa4a1c6bfae290d673d6',1,'tram::Render']]], ['viewmodel_57',['viewmodel',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#ac9e52c97862461717796ec8e567cd506',1,'tram::Ext::Kitchensink::ItemClass']]], ['voffset_58',['voffset',['../structtram_1_1_render_1_1_sprite_vertex.html#a5fb739d8f642c69f87f111a8a668b001',1,'tram::Render::SpriteVertex']]], ['volume_59',['volume',['../classtram_1_1_world_cell.html#a8cc37dbda76f539084cba7950b355b22',1,'tram::WorldCell::volume()'],['../classtram_1_1_sound.html#a08126edbad4f337264ff1206e96ef145',1,'tram::Sound::volume()']]], ['vsync_60',['vsync',['../namespacetram_1_1_platform.html#a45688259010e30ccfd694bf81f4abc99',1,'tram::Platform']]] ]; ================================================ FILE: docs/cppapi/search/all_17.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/all_17.js ================================================ var searchData= [ ['w_0',['w',['../structtram_1_1_g_u_i_1_1_frame_object.html#aaa17bd9855c951ce25ef26a5e0c97cd6',1,'tram::GUI::FrameObject']]], ['walk_5fcollision_1',['walk_collision',['../classtram_1_1_f_p_s_controller_component.html#af2a12d9cc7a245087852634e14b9bb2d',1,'tram::FPSControllerComponent']]], ['walk_5fspeed_2',['walk_speed',['../classtram_1_1_f_p_s_controller_component.html#a1180c411c80596ee1d75daa987ce96f7',1,'tram::FPSControllerComponent::walk_speed()'],['../classtram_1_1_raycast_controller_component.html#ad0e8ba76175ff6d4adabaa860ea82bd3',1,'tram::RaycastControllerComponent::walk_speed()']]], ['wall_5fcollision_3',['wall_collision',['../classtram_1_1_raycast_controller_component.html#a4989dfffd26974233d53a1d6c4eb8407',1,'tram::RaycastControllerComponent']]], ['wallbonk_5fcallback_4',['wallbonk_callback',['../classtram_1_1_f_p_s_controller_component.html#a179230b5c2c207d38f12b1e784f00bb2',1,'tram::FPSControllerComponent::wallbonk_callback()'],['../classtram_1_1_raycast_controller_component.html#aa0b73d887c0b9349667c2dc9271e45cd',1,'tram::RaycastControllerComponent::wallbonk_callback()']]], ['warning_5',['WARNING',['../namespacetram.html#a34ab368bc856f9bd71bfcb4f2bb86c56a059e9861e0400dfbe05c98a841f3f96b',1,'tram']]], ['was_5ferror_6',['was_error',['../classtram_1_1_file.html#a14fa0ae7b7ebe485fddf204df95c905f',1,'tram::File']]], ['water_7',['Water',['../classtram_1_1_ext_1_1_kitchensink_1_1_water.html',1,'tram::Ext::Kitchensink::Water'],['../classtram_1_1_ext_1_1_kitchensink_1_1_water.html#a61815d9fed63e4724d8704b8f7eb99e2',1,'tram::Ext::Kitchensink::Water::Water()']]], ['weight_8',['weight',['../structtram_1_1_animation_component_1_1_animation_playback_info.html#ab88da3c134852e675a0a1b0138dd6b81',1,'tram::AnimationComponent::AnimationPlaybackInfo::weight()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state.html#ae1d093333e0433d071a618226768270e',1,'tram::Ext::Kitchensink::AnimState::weight()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#ad2e897d231ebf85514642793c8595175',1,'tram::Ext::Kitchensink::ItemClass::weight()']]], ['wgt_9',['wgt',['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#a0db7472217610a8c7032a85aeef22413',1,'tram::Render::API::DynamicVertex']]], ['wgt_5f1_10',['wgt_1',['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#a078c81bb38d4951accfc6df9c00a92d5',1,'tram::Render::API::DynamicVertex']]], ['wgt_5f2_11',['wgt_2',['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#a924179d40de8890d819f55b061c720dc',1,'tram::Render::API::DynamicVertex']]], ['wgt_5f3_12',['wgt_3',['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#a73488e66a1c64254438c49676239f567',1,'tram::Render::API::DynamicVertex']]], ['wgt_5fi_13',['wgt_i',['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#ab36ec5e7ab8d27a963c2a160a8dfe359',1,'tram::Render::API::DynamicVertex']]], ['widget_14',['WIDGET',['../namespacetram_1_1_g_u_i.html#aed177dc7d46e43f3cf52662fecbaf0a6a48da4725286ba176bffc3ddc5ab2aa24',1,'tram::GUI']]], ['widget_15',['widget',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1',1,'tram::GUI']]], ['widget_5fborder_16',['WIDGET_BORDER',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a288375715fc56e1428e163f7737c9755',1,'tram::GUI']]], ['widget_5fbottom_5fleft_17',['WIDGET_BOTTOM_LEFT',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1af28be408ba1f85c75d8e82321b1690c9',1,'tram::GUI']]], ['widget_5fbottom_5fmiddle_18',['WIDGET_BOTTOM_MIDDLE',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a0fb26b364c50c4db472ce498b3f3b2b8',1,'tram::GUI']]], ['widget_5fbottom_5fright_19',['WIDGET_BOTTOM_RIGHT',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a4e5a270739d7cd63b52e69ecaae854df',1,'tram::GUI']]], ['widget_5fbutton_20',['WIDGET_BUTTON',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a8fe5f8b635b453d316df64a80e6b0c58',1,'tram::GUI']]], ['widget_5fbutton_5f1_5fwindow_21',['WIDGET_BUTTON_1_WINDOW',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a05c885b34b9322641a6d73aea7773e1f',1,'tram::GUI']]], ['widget_5fbutton_5f2_5fwindow_22',['WIDGET_BUTTON_2_WINDOW',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a811458e951868c94ac60b14eede5c06a',1,'tram::GUI']]], ['widget_5fbutton_5fdisabled_23',['WIDGET_BUTTON_DISABLED',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a2d7380a25c2607e1f4918b15bc9a19b9',1,'tram::GUI']]], ['widget_5fbutton_5fdown_24',['WIDGET_BUTTON_DOWN',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a4d5ac84d958f2447cbe84f9aa6febb6e',1,'tram::GUI']]], ['widget_5fbutton_5fexit_25',['WIDGET_BUTTON_EXIT',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1ad8917083f0691ad8480e4663ca65f92f',1,'tram::GUI']]], ['widget_5fbutton_5fhelp_26',['WIDGET_BUTTON_HELP',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a16e6c73545efbda66f5ddf6db3e051b2',1,'tram::GUI']]], ['widget_5fbutton_5fleft_27',['WIDGET_BUTTON_LEFT',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a686d11c06b4cd2243f53f593038a44a3',1,'tram::GUI']]], ['widget_5fbutton_5fpressed_28',['WIDGET_BUTTON_PRESSED',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a3cb065ba1c044aea4d5324c505196005',1,'tram::GUI']]], ['widget_5fbutton_5fpressed_5fdisabled_29',['WIDGET_BUTTON_PRESSED_DISABLED',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1aa7084cb5cfbd4484e6d25d9e45184e52',1,'tram::GUI']]], ['widget_5fbutton_5fright_30',['WIDGET_BUTTON_RIGHT',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1ae1a968e27456a02ea20df7a01edd2925',1,'tram::GUI']]], ['widget_5fbutton_5fselected_5fdisabled_31',['WIDGET_BUTTON_SELECTED_DISABLED',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a6624ba8fc8bb24a188aa8aeaef64ad82',1,'tram::GUI']]], ['widget_5fbutton_5fselected_5fenabled_32',['WIDGET_BUTTON_SELECTED_ENABLED',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a6251b4c7c648ebc44de8cd4308496c29',1,'tram::GUI']]], ['widget_5fbutton_5fup_33',['WIDGET_BUTTON_UP',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a88dde871d55777c757c7ac3585cbc315',1,'tram::GUI']]], ['widget_5fcheck_5fbutton_34',['WIDGET_CHECK_BUTTON',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a1d1c09efe24b08eecaa3e8499e3c0b04',1,'tram::GUI']]], ['widget_5fdefault_35',['WIDGET_DEFAULT',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a81dc1f5bdaeac23554dd91d090c28664',1,'tram::GUI']]], ['widget_5fdivider_5fhorizontal_36',['WIDGET_DIVIDER_HORIZONTAL',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a06c7dd7b52ac02d304b96e2d8607df09',1,'tram::GUI']]], ['widget_5fdivider_5fvertical_37',['WIDGET_DIVIDER_VERTICAL',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a7b49ba0d1d26cfba2cdd5ce3de8a8fda',1,'tram::GUI']]], ['widget_5fleft_38',['WIDGET_LEFT',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a94196edf414a3b0a32bebd4a2d4098c9',1,'tram::GUI']]], ['widget_5fmiddle_39',['WIDGET_MIDDLE',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a2cf14d139df473a8ae69fc15f70b0c47',1,'tram::GUI']]], ['widget_5fmiddle_5fleft_40',['WIDGET_MIDDLE_LEFT',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a3781ffd15bc0497fe8bb6914f3f4c162',1,'tram::GUI']]], ['widget_5fmiddle_5fmiddle_41',['WIDGET_MIDDLE_MIDDLE',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a72ea4daaba6e760a76d6b40eee74ef44',1,'tram::GUI']]], ['widget_5fmiddle_5fright_42',['WIDGET_MIDDLE_RIGHT',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1adb168efcef55492cffb1228bcc6be6a9',1,'tram::GUI']]], ['widget_5fprogess_5fbar_43',['WIDGET_PROGESS_BAR',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1ad64339dee0b99f2734657fb71ccc2c37',1,'tram::GUI']]], ['widget_5fradio_5fbutton_44',['WIDGET_RADIO_BUTTON',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1af03845a03923971c0f0c25be45192525',1,'tram::GUI']]], ['widget_5freverse_5fwindow_45',['WIDGET_REVERSE_WINDOW',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a65b54ebe6aedd029c23657f1f8969d3b',1,'tram::GUI']]], ['widget_5fright_46',['WIDGET_RIGHT',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a0b7a3592ed83f984fdb65982278dd291',1,'tram::GUI']]], ['widget_5fscroll_5fbar_5fhorizontal_47',['WIDGET_SCROLL_BAR_HORIZONTAL',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a304530150480931bb8b5b5836ce49cdc',1,'tram::GUI']]], ['widget_5fscroll_5fbar_5ftrack_5fhorizontal_48',['WIDGET_SCROLL_BAR_TRACK_HORIZONTAL',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a1bb74bb58fdefa45afa6fe4c3fa242e7',1,'tram::GUI']]], ['widget_5fscroll_5fbar_5ftrack_5fvertical_49',['WIDGET_SCROLL_BAR_TRACK_VERTICAL',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a328a052e1848b362bd99119bfc4b5c9f',1,'tram::GUI']]], ['widget_5fscroll_5fbar_5fvertical_50',['WIDGET_SCROLL_BAR_VERTICAL',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1aa7b8ae824573bb1b44f2fc8d402a7e86',1,'tram::GUI']]], ['widget_5fselect_5fbox_51',['WIDGET_SELECT_BOX',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a3ae7d7c322fc27d607180c633cedc2ec',1,'tram::GUI']]], ['widget_5fselect_5fbox_5fpressed_52',['WIDGET_SELECT_BOX_PRESSED',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1aa75f29ad29f628c63d9e96408996bd6f',1,'tram::GUI']]], ['widget_5fselect_5fbox_5fselected_53',['WIDGET_SELECT_BOX_SELECTED',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1add809a3f52b68a13ba2005f4379d3a44',1,'tram::GUI']]], ['widget_5fslider_5fhorizontal_54',['WIDGET_SLIDER_HORIZONTAL',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a3cad8e90400248d0e65e69df03d08543',1,'tram::GUI']]], ['widget_5fslider_5ftrack_5fhorizontal_55',['WIDGET_SLIDER_TRACK_HORIZONTAL',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a2df6db20f587dc87edcd52cf8d6481de',1,'tram::GUI']]], ['widget_5fslider_5ftrack_5fvertical_56',['WIDGET_SLIDER_TRACK_VERTICAL',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a631f870e14a146ad565a98757457e00b',1,'tram::GUI']]], ['widget_5fslider_5fvertical_57',['WIDGET_SLIDER_VERTICAL',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a742bec56b7461b8fac393ba74e5fd334',1,'tram::GUI']]], ['widget_5ftab_58',['WIDGET_TAB',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a83d5658a1b1c8e3d7cc8258a98539e41',1,'tram::GUI']]], ['widget_5ftext_5fbox_59',['WIDGET_TEXT_BOX',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a1a58f10d4774879f67773be73099ac95',1,'tram::GUI']]], ['widget_5ftext_5fbox_5fdisabled_60',['WIDGET_TEXT_BOX_DISABLED',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a42eafb8ac9b1e31d0f7d7bb14c5af45f',1,'tram::GUI']]], ['widget_5ftop_5fleft_61',['WIDGET_TOP_LEFT',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a1b25994b6b491488d2bb3d21f93be505',1,'tram::GUI']]], ['widget_5ftop_5fmiddle_62',['WIDGET_TOP_MIDDLE',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1ac59c390211a381ff98cd66ff93106e2c',1,'tram::GUI']]], ['widget_5ftop_5fright_63',['WIDGET_TOP_RIGHT',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a39b6661549648d74a3760128c0323dc1',1,'tram::GUI']]], ['widget_5fwindow_64',['WIDGET_WINDOW',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a0d131a74010abdcb8ccf5fe1eb9d7f5c',1,'tram::GUI']]], ['width_65',['width',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#af21e13dba2bf5003456f23075e616c9f',1,'tram::Ext::Kitchensink::ItemClass::width()'],['../classtram_1_1_render_1_1_material.html#a39fdf6cc003568ca64a0b47af65d0cca',1,'tram::Render::Material::width()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_texture.html#ae907dbc5c37e4a1e92440c7518e242d6',1,'tram::Render::API::SWTexture::width()'],['../structtram_1_1_render_1_1_sprite_frame.html#ae3a9270cdf9fc55044ab6eea633efb58',1,'tram::Render::SpriteFrame::width()']]], ['worldcell_66',['WorldCell',['../classtram_1_1_world_cell.html',1,'tram::WorldCell'],['../classtram_1_1_entity.html#a84136aa23993ba45f0745a9d9488ab54',1,'tram::Entity::WorldCell()'],['../classtram_1_1_transition.html#a84136aa23993ba45f0745a9d9488ab54',1,'tram::Transition::WorldCell()'],['../classtram_1_1_world_cell.html#abb50e84305e87fea83abf124d311d4f8',1,'tram::WorldCell::WorldCell()']]], ['worldcell_2ecpp_67',['worldcell.cpp',['../worldcell_8cpp.html',1,'']]], ['worldcell_2eh_68',['worldcell.h',['../worldcell_8h.html',1,'']]], ['worldcell_5flimit_69',['WORLDCELL_LIMIT',['../namespacetram.html#ab751286624cca492c1abca52f7e0be8c',1,'tram']]], ['worldcell_5ftransition_5flimit_70',['WORLDCELL_TRANSITION_LIMIT',['../namespacetram.html#a1423ecbdc7b2879d47ac484d812fda50',1,'tram']]], ['worldcellproperties_71',['WorldCellProperties',['../classtram_1_1_ext_1_1_menu_1_1_world_cell_properties.html',1,'tram::Ext::Menu']]], ['worldmodel_72',['worldmodel',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#af12183588fa7ee60e0f173f60a0e841a',1,'tram::Ext::Kitchensink::ItemClass']]], ['write_73',['WRITE',['../classtram_1_1_file.html#ab340a7edca3c73f54d764cd17b362477a4e4881217ac0f0eed34368fb2d5fcece',1,'tram::File']]], ['write_5ffloat32_74',['write_float32',['../classtram_1_1_text_writer_parser.html#a173dd06aa86fe89323ca1002e579fbd5',1,'tram::TextWriterParser::write_float32()'],['../classtram_1_1_file.html#ad37a6a76adf4fd5db765e860a9a20bcf',1,'tram::File::write_float32()'],['../classtram_1_1_file_writer_parser.html#a52e41cf58a05494af4458da3fa5d47c7',1,'tram::FileWriterParser::write_float32()']]], ['write_5ffloat64_75',['write_float64',['../classtram_1_1_text_writer_parser.html#ab5d92f52efcf315bba5c093f36a26da5',1,'tram::TextWriterParser::write_float64()'],['../classtram_1_1_file_writer_parser.html#aeadeaa02b140dc0aff5f9bd0dfe9d912',1,'tram::FileWriterParser::write_float64()'],['../classtram_1_1_file.html#a52e71d6324ee7624dee122a59523001c',1,'tram::File::write_float64()']]], ['write_5fint16_76',['write_int16',['../classtram_1_1_file_writer_parser.html#a33e6287ccf1da5b872e9b71892b15b55',1,'tram::FileWriterParser::write_int16()'],['../classtram_1_1_text_writer_parser.html#ade23c91446806e0d7ec6c8ddc1b3af3c',1,'tram::TextWriterParser::write_int16()'],['../classtram_1_1_file.html#a56ca0eb625c5fcef16158a9f107f8a1f',1,'tram::File::write_int16()']]], ['write_5fint32_77',['write_int32',['../classtram_1_1_file_writer_parser.html#a40db8bb41ac6b1df2b8f4f7706e4af51',1,'tram::FileWriterParser::write_int32()'],['../classtram_1_1_text_writer_parser.html#a9c9890c6861506c1b2b66aced0bd7880',1,'tram::TextWriterParser::write_int32()'],['../classtram_1_1_file.html#a912eac8b041a22b2468d4fc2ae2ffbfb',1,'tram::File::write_int32()']]], ['write_5fint64_78',['write_int64',['../classtram_1_1_file_writer_parser.html#aea0efc41d6117ffe74c289fe56b9b78a',1,'tram::FileWriterParser::write_int64()'],['../classtram_1_1_file.html#a3164abdb1966197ca2e9a6cd018770da',1,'tram::File::write_int64()'],['../classtram_1_1_text_writer_parser.html#ae39447a94ffa853f810d7c7967013ef8',1,'tram::TextWriterParser::write_int64()']]], ['write_5fint8_79',['write_int8',['../classtram_1_1_file.html#a89b2859ed0ef1b7d66c5a4d9a2d536b2',1,'tram::File::write_int8()'],['../classtram_1_1_file_writer_parser.html#a2624b7ac01f990d990719ef32f7491f6',1,'tram::FileWriterParser::write_int8()'],['../classtram_1_1_text_writer_parser.html#ad407f6ac2320d490426b64d7de4c8dbc',1,'tram::TextWriterParser::write_int8()']]], ['write_5fname_80',['write_name',['../classtram_1_1_file_writer_parser.html#aee67e0442a2f5db24bfdf9aa9bf37a52',1,'tram::FileWriterParser::write_name()'],['../classtram_1_1_text_writer_parser.html#a93311a154ad4f18ff15bcb705f31d80b',1,'tram::TextWriterParser::write_name()'],['../classtram_1_1_file.html#a3ec500f5f4c888093fdb6d93568fe9f3',1,'tram::File::write_name()']]], ['write_5fnewline_81',['write_newline',['../classtram_1_1_text_writer_parser.html#ab02072d2e22fd07014cf42c19a2e1ef5',1,'tram::TextWriterParser::write_newline()'],['../classtram_1_1_file.html#a7c2767ad1dfe1bc5d644f1a255ba9875',1,'tram::File::write_newline()'],['../classtram_1_1_file_writer_parser.html#ad9e6518d91f1a691b801032c280d3c33',1,'tram::FileWriterParser::write_newline()=0']]], ['write_5fstring_82',['write_string',['../classtram_1_1_file_writer_parser.html#af7d962155444c0960d1192b99638915d',1,'tram::FileWriterParser::write_string()'],['../classtram_1_1_text_writer_parser.html#a7657b9c3de6cef1a9f09be0da5869929',1,'tram::TextWriterParser::write_string()'],['../classtram_1_1_file.html#acc94c6e5b903c64232ac97079038db91',1,'tram::File::write_string()']]], ['write_5fuint16_83',['write_uint16',['../classtram_1_1_file_writer_parser.html#ac99d04d600e6ac1cc4814dc3c0c35a5b',1,'tram::FileWriterParser::write_uint16()'],['../classtram_1_1_text_writer_parser.html#a01ea6be8c09ed2edd59d11f78170fee4',1,'tram::TextWriterParser::write_uint16()'],['../classtram_1_1_file.html#aaef1b401396e62884686b4773b9e5f6e',1,'tram::File::write_uint16(uint16_t value)']]], ['write_5fuint32_84',['write_uint32',['../classtram_1_1_file.html#a968e1d9420146f006a7c4868a8978ec5',1,'tram::File::write_uint32()'],['../classtram_1_1_text_writer_parser.html#a2eee18a0fc2e2c118d4405222a98fb9e',1,'tram::TextWriterParser::write_uint32()'],['../classtram_1_1_file_writer_parser.html#ab8baa4186c11c563a27f2c3947c62772',1,'tram::FileWriterParser::write_uint32()']]], ['write_5fuint64_85',['write_uint64',['../classtram_1_1_text_writer_parser.html#a887dfa879f5b48ea59e72389db4c436d',1,'tram::TextWriterParser::write_uint64()'],['../classtram_1_1_file.html#abfb1b5c29a40ddbada1f8c01b9c7143e',1,'tram::File::write_uint64()'],['../classtram_1_1_file_writer_parser.html#aa29b2c3cd1646e0b81316cd39b8a8542',1,'tram::FileWriterParser::write_uint64()']]], ['write_5fuint8_86',['write_uint8',['../classtram_1_1_file.html#ac8b334b12d808c3bb28ebb92cc8db2d5',1,'tram::File::write_uint8()'],['../classtram_1_1_text_writer_parser.html#a1354ba4b11cded7f82a0982aee9fd389',1,'tram::TextWriterParser::write_uint8()'],['../classtram_1_1_file_writer_parser.html#a771545ed3ba23219575e1e10e28fad2b',1,'tram::FileWriterParser::write_uint8()']]], ['writer_87',['writer',['../classtram_1_1_file.html#ae80f51acbe4f7c016309d1525b00e25a',1,'tram::File']]], ['writer_5fparser_88',['writer_parser',['../classtram_1_1_file.html#a3a53d60bca18a5afefa92a1ed1b70bd1',1,'tram::File']]] ]; ================================================ FILE: docs/cppapi/search/all_18.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/all_18.js ================================================ var searchData= [ ['x_0',['x',['../structtram_1_1_ext_1_1_kitchensink_1_1_item_instance.html#aba27042000b273495cc18583b811d66a',1,'tram::Ext::Kitchensink::ItemInstance::x()'],['../structtram_1_1_g_u_i_1_1_frame_object.html#a5b80eddf57e0744b870d933958f2d70e',1,'tram::GUI::FrameObject::x()'],['../structtram_1_1_render_1_1_a_p_i_1_1_point2_d.html#acb12d46b028d44cca7d143396173c039',1,'tram::Render::API::Point2D::x()']]] ]; ================================================ FILE: docs/cppapi/search/all_19.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/all_19.js ================================================ var searchData= [ ['y_0',['y',['../structtram_1_1_ext_1_1_kitchensink_1_1_item_instance.html#ab1af2c957c7634bcd1d1ece6f0436c87',1,'tram::Ext::Kitchensink::ItemInstance::y()'],['../structtram_1_1_g_u_i_1_1_frame_object.html#a98e4cea97c1c2ceef0aa79ccf27749c2',1,'tram::GUI::FrameObject::y()'],['../structtram_1_1_render_1_1_a_p_i_1_1_point2_d.html#af783aee7c4be2562b7bc790843622c28',1,'tram::Render::API::Point2D::y()']]], ['yaw_1',['yaw',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#aa2a9d5accb0655fdb4185a73866bb13b',1,'tram::Ext::Camera::FirstPersonCamera']]], ['yeet_2',['Yeet',['../classtram_1_1_entity.html#ad3430330bb5b0f51f64b23ea38396f91',1,'tram::Entity::Yeet()'],['../classtram_1_1_disk_reader.html#a81a139b80db9fbced34f8bb2f4a753cf',1,'tram::DiskReader::Yeet()'],['../classtram_1_1_disk_writer.html#a564c3fea7e402a81699e563310b58acb',1,'tram::DiskWriter::Yeet()'],['../classtram_1_1_file_reader.html#aadf272a73650e58beb40679038b8fafd',1,'tram::FileReader::Yeet()'],['../classtram_1_1_file_writer.html#a83856556c818cf185c04b5e5e26a0021',1,'tram::FileWriter::Yeet()']]], ['yeet_3',['yeet',['../classtram_1_1_component.html#a49462f491b7ab20bc064693927baf3d4',1,'tram::Component::yeet()'],['../classtram_1_1_component.html#a92887e8a968a2e5c33afde0a97d909d3',1,'tram::Component::yeet()'],['../classtram_1_1_component.html#a7fd2f109de653312be2dd05e70bcb456',1,'tram::Component::yeet()'],['../classtram_1_1_component.html#ade7b2c38396c3e7b4e56575f8a0d45dd',1,'tram::Component::yeet()'],['../classtram_1_1_component.html#a56bd08e6a719e3ce42b1befec0871314',1,'tram::Component::yeet()'],['../classtram_1_1_component.html#a9b57dacbc4100263efa58393d4dcee71',1,'tram::Component::yeet()'],['../classtram_1_1_component.html#abf8fb2ac22a613aeec1352f2b6fd9f19',1,'tram::Component::yeet()'],['../classtram_1_1_component.html#ab03a41f9f06ec0498dbbe9936f89f15a',1,'tram::Component::yeet()'],['../classtram_1_1_component.html#aeff899a413c447e8b1f0c43c2ee1b22d',1,'tram::Component::yeet()'],['../classtram_1_1_component.html#a2eaafb5a31e19e33fd479f78f74dfdbc',1,'tram::Component::yeet()'],['../classtram_1_1_component.html#a33a0538e443702363c86b29422ddecf1',1,'tram::Component::yeet()'],['../classtram_1_1_component.html#adc47ac1f2a537bc6f1bd71203ae7c27a',1,'tram::Component::yeet()'],['../classtram_1_1_component.html#ad29f0c53f47721905f77a3f83a4d2b97',1,'tram::Component::yeet()']]], ['yeet_4',['Yeet',['../namespacetram_1_1_scriptable_type.html#a2be0d23b1b7952145abea19ad2bf6c73',1,'tram::ScriptableType::Yeet()'],['../namespacetram_1_1_async.html#a808bec0c78a3d989b202cc84afed0cfb',1,'tram::Async::Yeet()']]], ['yeet_5',['YEET',['../namespacetram_1_1_system.html#a4703b937891576671c79a6d02a63c0a2a6e9e1e44ddd4a383ea30f9f1d3fac00d',1,'tram::System']]], ['yeetcollisionshape_6',['YeetCollisionShape',['../namespacetram_1_1_physics_1_1_a_p_i.html#a54bd52773f6a40688ec69b6fe87749ce',1,'tram::Physics::API']]], ['yeetrigidbody_7',['YeetRigidbody',['../namespacetram_1_1_physics_1_1_a_p_i.html#a6aa3f489a407250ed34d2b79f4ec83b3',1,'tram::Physics::API']]], ['yeettrigger_8',['YeetTrigger',['../namespacetram_1_1_physics_1_1_a_p_i.html#ab0d01da7b5dffd60aeb55dce7bb92694',1,'tram::Physics::API']]] ]; ================================================ FILE: docs/cppapi/search/all_1a.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/all_1a.js ================================================ var searchData= [ ['_7eaabbtree_0',['~AABBTree',['../classtram_1_1_a_a_b_b_tree.html#a10e8e2eef3ea7b92fe8f62019efb6ebc',1,'tram::AABBTree']]], ['_7eaipackage_1',['~AIPackage',['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_package.html#ad02bb92b98ecc4359ded1713f01eb19e',1,'tram::Ext::Kitchensink::AIPackage']]], ['_7eanimationcomponent_2',['~AnimationComponent',['../classtram_1_1_animation_component.html#ac6008fd710fcfd5b79795890d0535bee',1,'tram::AnimationComponent']]], ['_7eaudiocomponent_3',['~AudioComponent',['../classtram_1_1_audio_component.html#a0a9b7571ead611ac20d86a8c94b15b13',1,'tram::AudioComponent']]], ['_7ecallbackmotionstate_4',['~CallbackMotionState',['../classtram_1_1_physics_1_1_a_p_i_1_1_callback_motion_state.html#a1563529ba951ebec065cf23c7f9d6d59',1,'tram::Physics::API::CallbackMotionState']]], ['_7ecamera_5',['~Camera',['../classtram_1_1_ext_1_1_camera_1_1_camera.html#a35fe3922be2a20a08e724d5d18303111',1,'tram::Ext::Camera::Camera']]], ['_7ecomponent_6',['~Component',['../classtram_1_1_component.html#af9e29eb673f1f11ec14d75aa19d6be1f',1,'tram::Component']]], ['_7econsole_7',['~Console',['../classtram_1_1_ext_1_1_menu_1_1_console.html#adda3db0c47e9495176196c91373522fe',1,'tram::Ext::Menu::Console']]], ['_7edebugmenu_8',['~DebugMenu',['../classtram_1_1_ext_1_1_menu_1_1_debug_menu.html#a7188e373f52410e350fbf91d27c4a9b7',1,'tram::Ext::Menu::DebugMenu']]], ['_7edecalcomponent_9',['~DecalComponent',['../classtram_1_1_decal_component.html#ae71a412c19ba4fbc92fbb17507992267',1,'tram::DecalComponent']]], ['_7ediskreader_10',['~DiskReader',['../classtram_1_1_disk_reader.html#ae9cd54f4c0b32c92fc8dc33238adb228',1,'tram::DiskReader']]], ['_7ediskwriter_11',['~DiskWriter',['../classtram_1_1_disk_writer.html#a798d3cd845e210a17c372c1485b7e587',1,'tram::DiskWriter']]], ['_7eentity_12',['~Entity',['../classtram_1_1_entity.html#a79fd0e828bd002ca6d4505dbc63739e2',1,'tram::Entity']]], ['_7eentitycomponent_13',['~EntityComponent',['../classtram_1_1_entity_component.html#a4c959cc80467ad2e753972bdc4eb7c33',1,'tram::EntityComponent']]], ['_7eentitypicker_14',['~EntityPicker',['../classtram_1_1_ext_1_1_menu_1_1_entity_picker.html#ae218519cd786e399c27b562fdeada24b',1,'tram::Ext::Menu::EntityPicker']]], ['_7eentityproperties_15',['~EntityProperties',['../classtram_1_1_ext_1_1_menu_1_1_entity_properties.html#aa64a874d80a135c0eaa412fde3320808',1,'tram::Ext::Menu::EntityProperties']]], ['_7eeventemit_16',['~EventEmit',['../classtram_1_1_ext_1_1_menu_1_1_event_emit.html#a7fe5f93eb89e11119d5cf0fb44e02494',1,'tram::Ext::Menu::EventEmit']]], ['_7eeventlistener_17',['~EventListener',['../classtram_1_1_event_listener.html#a34b25d8225afb354e3e7ff8fe7ba78b1',1,'tram::EventListener']]], ['_7efile_18',['~File',['../classtram_1_1_file.html#a56f8b809eeff67f9d5ed18580d8fe857',1,'tram::File']]], ['_7efilereader_19',['~FileReader',['../classtram_1_1_file_reader.html#ac1c9f2016c1c475ed82418fb2a2dca8f',1,'tram::FileReader']]], ['_7efilewriter_20',['~FileWriter',['../classtram_1_1_file_writer.html#ab9657acc04bba611bd8f061dcd207f1c',1,'tram::FileWriter']]], ['_7efirstpersoncamera_21',['~FirstPersonCamera',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a3f5112b4261174831aa1e4664fcfb503',1,'tram::Ext::Camera::FirstPersonCamera']]], ['_7efpscontrollercomponent_22',['~FPSControllerComponent',['../classtram_1_1_f_p_s_controller_component.html#a4c0d475fb7ef8b5c98b800b8921cf660',1,'tram::FPSControllerComponent']]], ['_7eintercept_23',['~Intercept',['../structtram_1_1_ext_1_1_menu_1_1_intercept.html#a1f44c91b5eaebb2f6eaab53b76796ce6',1,'tram::Ext::Menu::Intercept']]], ['_7einterceptmenu_24',['~InterceptMenu',['../classtram_1_1_ext_1_1_menu_1_1_intercept_menu.html#a8e311e211e2d9b0d025ce9e1e571a166',1,'tram::Ext::Menu::InterceptMenu']]], ['_7einventorymanager_25',['~InventoryManager',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory_manager.html#a40e187b17336deef3396e8883fad0c6d',1,'tram::Ext::Kitchensink::InventoryManager']]], ['_7elightcomponent_26',['~LightComponent',['../classtram_1_1_light_component.html#a3cfee9529794960ce2238cd8306c438b',1,'tram::LightComponent']]], ['_7elistdialog_27',['~ListDialog',['../classtram_1_1_ext_1_1_kitchensink_1_1_list_dialog.html#a57879c46dacd3aa040198ffeb3c3cc27',1,'tram::Ext::Kitchensink::ListDialog']]], ['_7elistinventorymanager_28',['~ListInventoryManager',['../classtram_1_1_ext_1_1_kitchensink_1_1_list_inventory_manager.html#a5ec9bf5e8398291fcb6271ec4944fb6b',1,'tram::Ext::Kitchensink::ListInventoryManager']]], ['_7elistselection_29',['~ListSelection',['../classtram_1_1_ext_1_1_menu_1_1_list_selection.html#acc2b7e76a954f3d314a73908d427d03b',1,'tram::Ext::Menu::ListSelection']]], ['_7emenu_30',['~Menu',['../classtram_1_1_ext_1_1_menu_1_1_menu.html#a4661c15d6f311be1f7957a4e0ab28305',1,'tram::Ext::Menu::Menu']]], ['_7emessagesend_31',['~MessageSend',['../classtram_1_1_ext_1_1_menu_1_1_message_send.html#a20a8253e3f5b3401aad9cfad27133fb4',1,'tram::Ext::Menu::MessageSend']]], ['_7enavmesh_32',['~Navmesh',['../classtram_1_1_navmesh.html#a6d3c3d41afd62d9551361c255ef9cff3',1,'tram::Navmesh']]], ['_7eoptions_33',['~Options',['../classtram_1_1_ext_1_1_menu_1_1_options.html#a047aa5cac263824ead3e543667b2289b',1,'tram::Ext::Menu::Options']]], ['_7eparticlecomponent_34',['~ParticleComponent',['../classtram_1_1_particle_component.html#a08d2217761e8209be71fb5accfcfcfd7',1,'tram::ParticleComponent']]], ['_7epath_35',['~Path',['../classtram_1_1_path.html#a25df1c0c40a359d561e259394593626f',1,'tram::Path']]], ['_7ephysicscomponent_36',['~PhysicsComponent',['../classtram_1_1_physics_component.html#a4669765afef6e232241d24959bf6a3ba',1,'tram::PhysicsComponent']]], ['_7eplayer_37',['~Player',['../classtram_1_1_player.html#a751cd1b280c732f44f018c82464badcc',1,'tram::Player']]], ['_7eplayercomponent_38',['~PlayerComponent',['../classtram_1_1_player_component.html#a6cf70a77be2388b6062f19b3fa16b1f1',1,'tram::PlayerComponent']]], ['_7epoolptr_39',['~PoolPtr',['../classtram_1_1_pool_ptr.html#aa3872ea828f4efe84b9392f565df53a3',1,'tram::PoolPtr']]], ['_7equestvariable_40',['~QuestVariable',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a0fe85e14b47e33482e46c8138d76d5ba',1,'tram::Ext::Kitchensink::QuestVariable']]], ['_7eraycastcontrollercomponent_41',['~RaycastControllerComponent',['../classtram_1_1_raycast_controller_component.html#ae1b1d5c0947337f319d4a6ac8e29ee01',1,'tram::RaycastControllerComponent']]], ['_7erendercomponent_42',['~RenderComponent',['../classtram_1_1_render_component.html#a8c087151758ef3a7210c7a8c8f8607dd',1,'tram::RenderComponent']]], ['_7eresourceproxy_43',['~ResourceProxy',['../classtram_1_1_resource_proxy.html#ae53d8742d944de173e8eb489f7aadb63',1,'tram::ResourceProxy']]], ['_7escriptable_44',['~Scriptable',['../classtram_1_1_scriptable.html#ac46dc1ccdef6f82c56563b4b498d07bf',1,'tram::Scriptable']]], ['_7esettingsmenu_45',['~SettingsMenu',['../classtram_1_1_ext_1_1_menu_1_1_settings_menu.html#a95521cbfe6936dd0cd0011a107589491',1,'tram::Ext::Menu::SettingsMenu']]], ['_7esignalmenu_46',['~SignalMenu',['../classtram_1_1_ext_1_1_menu_1_1_signal_menu.html#ae32579e6e3511bb5642aa3abf416f6e1',1,'tram::Ext::Menu::SignalMenu']]], ['_7espritecomponent_47',['~SpriteComponent',['../classtram_1_1_sprite_component.html#ac3af9ed8e95feb7d735398fbdd5eb4d2',1,'tram::SpriteComponent']]], ['_7estatisticsmenu_48',['~StatisticsMenu',['../classtram_1_1_ext_1_1_menu_1_1_statistics_menu.html#a6ebc52f5c684a20cfad01e7c62e95809',1,'tram::Ext::Menu::StatisticsMenu']]], ['_7esystemmenu_49',['~SystemMenu',['../classtram_1_1_ext_1_1_menu_1_1_system_menu.html#a65e0843f9e22ac47984d5f7e2ba6a8ce',1,'tram::Ext::Menu::SystemMenu']]], ['_7etemplatecomponent_50',['~TemplateComponent',['../classtram_1_1_template_component.html#a8e89883fc13d2969e300e3dab133624d',1,'tram::TemplateComponent']]], ['_7etransition_51',['~Transition',['../classtram_1_1_transition.html#a7aca14200b843ed9d5f623d7637a5e3b',1,'tram::Transition']]], ['_7etriggercomponent_52',['~TriggerComponent',['../classtram_1_1_trigger_component.html#a9fa2ed0795ec0f93390762bc849c8012',1,'tram::TriggerComponent']]], ['_7euid_53',['~UID',['../structtram_1_1_u_i_d.html#a43f5c1a2523a9ed0ea40b42b730ab835',1,'tram::UID']]], ['_7evalue_54',['~Value',['../classtram_1_1_value.html#a57e02b0f0c958d2a5ac93722d1118b7d',1,'tram::Value']]], ['_7evalueptr_55',['~ValuePtr',['../classtram_1_1_value_ptr.html#aba2c848ef361b2ba2a85e8d4b9a5dfab',1,'tram::ValuePtr']]], ['_7eworldcellproperties_56',['~WorldCellProperties',['../classtram_1_1_ext_1_1_menu_1_1_world_cell_properties.html#af55b32e6c2a70a39efe13fd92ed3574f',1,'tram::Ext::Menu::WorldCellProperties']]] ]; ================================================ FILE: docs/cppapi/search/all_2.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/all_2.js ================================================ var searchData= [ ['back_0',['back',['../classtram_1_1_queue.html#abdeabcac12516595916ee8f3b600e392',1,'tram::Queue']]], ['barycentric_1',['barycentric',['../structtram_1_1_render_1_1_a_p_i_1_1_clip_point.html#ac0a612c9c2e16b94104e01063987446a',1,'tram::Render::API::ClipPoint']]], ['base_5fattributes_2',['base_attributes',['../classtram_1_1_ext_1_1_kitchensink_1_1_character_class.html#a91bc67d549a53384a0b1aef0ced9fcd7',1,'tram::Ext::Kitchensink::CharacterClass']]], ['base_5fclass_3',['base_class',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a38235d74c6c43032f0f53e84df2e00e4',1,'tram::Ext::Kitchensink::ItemClass']]], ['base_5fclasses_4',['base_classes',['../classtram_1_1_ext_1_1_kitchensink_1_1_character_class.html#adb00f39ea738b0df3ad9648819a215d0',1,'tram::Ext::Kitchensink::CharacterClass']]], ['base_5ffactions_5',['base_factions',['../classtram_1_1_ext_1_1_kitchensink_1_1_character_class.html#a8d6ce94fb5780a54fe9fff4d03f1d057',1,'tram::Ext::Kitchensink::CharacterClass']]], ['base_5fpose_6',['base_pose',['../classtram_1_1_animation_component.html#af919af95bb7414728434643fcaeda10c',1,'tram::AnimationComponent']]], ['base_5ftype_7',['base_type',['../structtram_1_1_scriptable_type_1_1_scriptable_type_info.html#ac57965a45a8f5897954176c01038698d',1,'tram::ScriptableType::ScriptableTypeInfo']]], ['base_5fvalue_8',['base_value',['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute.html#ae7621d33bbc6e85404781094a53a436e',1,'tram::Ext::Kitchensink::Attribute']]], ['baseattribute_9',['BaseAttribute',['../structtram_1_1_ext_1_1_kitchensink_1_1_base_attribute.html',1,'tram::Ext::Kitchensink']]], ['basefactionrank_10',['BaseFactionRank',['../structtram_1_1_ext_1_1_kitchensink_1_1_base_faction_rank.html',1,'tram::Ext::Kitchensink']]], ['begin_11',['begin',['../structtram_1_1_render_1_1_a_p_i_1_1_scanline.html#a3372ad996c67ffcf0bcd0099498981c7',1,'tram::Render::API::Scanline::begin()'],['../classtram_1_1_pool.html#aae84df45d298efe25e64b9f688f97916',1,'tram::Pool::begin()'],['../classtram_1_1_stack_pool.html#a4124c926206e0e06403f8cff5a999b43',1,'tram::StackPool::begin()']]], ['begin_12',['Begin',['../namespacetram_1_1_g_u_i.html#af4ecd3d74bffd0e8e5fd26061418ef4f',1,'tram::GUI']]], ['begin_5fadv_13',['begin_adv',['../structtram_1_1_render_1_1_a_p_i_1_1_scanline.html#a699ad631d7655c390f9271d1d3fd1cc5',1,'tram::Render::API::Scanline']]], ['begin_5fp0_14',['begin_p0',['../structtram_1_1_render_1_1_a_p_i_1_1_scanline.html#a3802a9a9b40e56ec27089ffbdda2be16',1,'tram::Render::API::Scanline']]], ['begin_5fp1_15',['begin_p1',['../structtram_1_1_render_1_1_a_p_i_1_1_scanline.html#ac943df2f987544ca5bc87a5b2ff17334',1,'tram::Render::API::Scanline']]], ['beginned_16',['beginned',['../namespacetram_1_1_g_u_i.html#a2fd25b3a9a83f7a905fd70aeda3cf2d8',1,'tram::GUI']]], ['binary_17',['BINARY',['../classtram_1_1_file.html#ab340a7edca3c73f54d764cd17b362477a48058d1f6460f840218c5f0f3cf9189d',1,'tram::File']]], ['binding_5faction_18',['binding_action',['../classtram_1_1_ext_1_1_menu_1_1_settings_menu.html#a6d4a3d849008c2cf884787555a373725',1,'tram::Ext::Menu::SettingsMenu']]], ['binding_5fstate_5fready_19',['binding_state_ready',['../classtram_1_1_ext_1_1_menu_1_1_settings_menu.html#a5975fcefcf9922e267a6de09fa00a479',1,'tram::Ext::Menu::SettingsMenu']]], ['bindkeyboardkey_20',['BindKeyboardKey',['../namespacetram_1_1_u_i.html#a581823cdaa8ed3cef6f48d2610961511',1,'tram::UI::BindKeyboardKey(KeyboardKey key, void(*action)(KeyboardKey))'],['../namespacetram_1_1_u_i.html#aa3f058ce3fd0e6b76f3224eb80f547c9',1,'tram::UI::BindKeyboardKey(KeyboardKey key, keyboardaction_t action)'],['../namespacetram_1_1_u_i.html#a49763cc0300d866370805b94a99f36fd',1,'tram::UI::BindKeyboardKey(KeyboardKey key, void(*action)())']]], ['binduniformblock_21',['BindUniformBlock',['../namespacetram_1_1_render_1_1_a_p_i.html#a507d7fd9947ed6152f9593c6611a91d4',1,'tram::Render::API::BindUniformBlock()'],['../classtram_1_1_render_1_1_a_p_i_1_1_linked_shader.html#aa69a85e88039257fec2cdd5feaee0fb0',1,'tram::Render::API::LinkedShader::BindUniformBlock()']]], ['binguser_22',['binguser',['../main_8cpp.html#a7b2977ab1d0adc9fca3191665cdbd8a8',1,'main.cpp']]], ['blitdot_23',['BlitDot',['../namespacetram_1_1_render_1_1_a_p_i.html#ad8c4f13e2fd00320c101a35f7b075d08',1,'tram::Render::API']]], ['blitline_24',['BlitLine',['../namespacetram_1_1_render_1_1_a_p_i.html#aa57aa8935b2da2b2c1818efd4a790a8d',1,'tram::Render::API']]], ['blitlineoctant0_25',['BlitLineOctant0',['../namespacetram_1_1_render_1_1_a_p_i.html#abad5cda7dcbf4bc90ed26a65e9cc5fde',1,'tram::Render::API']]], ['blitlineoctant1_26',['BlitLineOctant1',['../namespacetram_1_1_render_1_1_a_p_i.html#ae135a0bcb76598854ab17a5edafbb69c',1,'tram::Render::API']]], ['bob_27',['bob',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a939144795493647266dfed3c37f7964e',1,'tram::Ext::Camera::FirstPersonCamera']]], ['bob_5fcallback_28',['bob_callback',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#afa6a623662e232f8d979eb703d905834',1,'tram::Ext::Camera::FirstPersonCamera']]], ['bob_5fchange_5fspeed_29',['BOB_CHANGE_SPEED',['../namespacetram_1_1_ext_1_1_camera.html#a9ebbcf579061fce613ced15545380bee',1,'tram::Ext::Camera']]], ['bob_5fspeed_30',['bob_speed',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a71b4981935bc58995e4ee9ffb2f6c573',1,'tram::Ext::Camera::FirstPersonCamera']]], ['bobbing_5fdistance_31',['bobbing_distance',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a55e48a64290f4a40a6332c4536c6e194',1,'tram::Ext::Camera::FirstPersonCamera']]], ['bobbing_5ftilt_32',['bobbing_tilt',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a4fee900edc8986fbf21a110744bca1dc',1,'tram::Ext::Camera::FirstPersonCamera']]], ['bobbing_5ftilt_5fgoal_33',['bobbing_tilt_goal',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a0cdf4f127893f1b3a00701b5de1cac0d',1,'tram::Ext::Camera::FirstPersonCamera']]], ['bobbing_5fweight_34',['bobbing_weight',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#ae4d02663d09577f0771f3c145e826ae2',1,'tram::Ext::Camera::FirstPersonCamera']]], ['bobbing_5fweight_5fgoal_35',['bobbing_weight_goal',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a7e08632db39929c5d34f38709e5ea28f',1,'tram::Ext::Camera::FirstPersonCamera']]], ['bone_36',['bone',['../structtram_1_1_render_1_1_keyframe_header.html#aede52b0456d0af84c59386e2f7b4e5e0',1,'tram::Render::KeyframeHeader::bone()'],['../structtram_1_1_render_1_1_dynamic_model_vertex.html#a14eec60b6751efb3a18233b51b09d874',1,'tram::Render::DynamicModelVertex::bone()']]], ['bone_37',['Bone',['../structtram_1_1_render_1_1_bone.html',1,'tram::Render']]], ['bone_5fcount_38',['BONE_COUNT',['../namespacetram_1_1_render.html#ae4355f7ab257050d67eb34b6c95b58e6',1,'tram::Render']]], ['bone_5findex_39',['bone_index',['../structtram_1_1_render_1_1_a_p_i_1_1_f_f_p_helper.html#ac24edf27fe09335c5ae659ad0dbbe32e',1,'tram::Render::API::FFPHelper::bone_index()'],['../structtram_1_1_render_1_1_a_p_i_1_1_f_v_f_helper.html#ab873ad3f80505bc83e65f9f2edf69468',1,'tram::Render::API::FVFHelper::bone_index()']]], ['bone_5funiform_5fbinding_40',['bone_uniform_binding',['../namespacetram_1_1_render_1_1_a_p_i.html#ace7ae8e4df165fb13c29c639727147c8',1,'tram::Render::API']]], ['bone_5funiform_5fbuffer_41',['bone_uniform_buffer',['../namespacetram_1_1_render_1_1_a_p_i.html#ae204460e13beeb7a70031b5f393fcacb',1,'tram::Render::API']]], ['bone_5fweight_42',['bone_weight',['../structtram_1_1_render_1_1_a_p_i_1_1_f_f_p_helper.html#aeb3b8d76aa80b1f680820bdfc47cb2e9',1,'tram::Render::API::FFPHelper::bone_weight()'],['../structtram_1_1_render_1_1_a_p_i_1_1_f_v_f_helper.html#a8422b55f8d7c41e6df476ae1093e4022',1,'tram::Render::API::FVFHelper::bone_weight()']]], ['boneweight_43',['boneweight',['../structtram_1_1_render_1_1_dynamic_model_vertex.html#a2dede085a14ed82c933ed72e555d2fb2',1,'tram::Render::DynamicModelVertex']]], ['bool32_44',['bool32',['../structtram_1_1_settings_1_1_setting_info.html#a09eb1679fe614e71bbc8a08ba3e593fa',1,'tram::Settings::SettingInfo']]], ['bool_5fptr_45',['bool_ptr',['../classtram_1_1_value_ptr.html#a6a5d3a375ce2d32d453e42796e777103',1,'tram::ValuePtr']]], ['bool_5fvalue_46',['bool_value',['../classtram_1_1_value.html#a0ce8527b48ea24e7312b7fe8b7ba9cb8',1,'tram::Value']]], ['border_5fh_47',['border_h',['../structtram_1_1_render_1_1_sprite_frame.html#ab6f18d025d640c62966bd57c417fdaa7',1,'tram::Render::SpriteFrame']]], ['border_5fv_48',['border_v',['../structtram_1_1_render_1_1_sprite_frame.html#a2bc1e1c80b941539bf4bd98f0ad01ed6',1,'tram::Render::SpriteFrame']]], ['box_49',['Box',['../structtram_1_1_physics_1_1_collision_shape.html#a2fe0b464de813a7b9e4756ed81882bd3',1,'tram::Physics::CollisionShape']]], ['breakable_50',['Breakable',['../classtram_1_1_ext_1_1_kitchensink_1_1_breakable.html#a391835e621041d6ff5d42830deb4551d',1,'tram::Ext::Kitchensink::Breakable::Breakable()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_breakable.html',1,'tram::Ext::Kitchensink::Breakable']]], ['bt_5fcollisionshape_51',['bt_collisionshape',['../structtram_1_1_physics_1_1trigger__t.html#aba9c93ad4d520e049fcea5713032bdf4',1,'tram::Physics::trigger_t']]], ['bt_5fmetadata_52',['bt_metadata',['../structtram_1_1_physics_1_1trigger__t.html#a71cfc73a8237b3ef17fe522d9c8060fa',1,'tram::Physics::trigger_t::bt_metadata()'],['../structtram_1_1_physics_1_1rigidbody__t.html#a57287fd1b0bb9650403230e67c315fc9',1,'tram::Physics::rigidbody_t::bt_metadata()']]], ['bt_5frigidbody_53',['bt_rigidbody',['../structtram_1_1_physics_1_1rigidbody__t.html#a4b513c1a384b224dc1225c02c314b9f3',1,'tram::Physics::rigidbody_t']]], ['bt_5fshape_54',['bt_shape',['../structtram_1_1_physics_1_1collisionshape__t.html#a11986390d77b413d024f236a8e9f41e7',1,'tram::Physics::collisionshape_t']]], ['bucket_55',['bucket',['../structtram_1_1_render_1_1_bucket_mapping.html#a933815398d8912dd7b24d70fbe88a0d8',1,'tram::Render::BucketMapping']]], ['bucketmapping_56',['BucketMapping',['../structtram_1_1_render_1_1_bucket_mapping.html',1,'tram::Render']]], ['buffer_57',['buffer',['../structtram_1_1_audio_1_1_spatial_1_1_audio_render.html#aa2e3f19d4d0628de60db45e064d97212',1,'tram::Audio::Spatial::AudioRender::buffer()'],['../classtram_1_1_file.html#a4b74a4d3fee7a6b42781d13b4c09c0bf',1,'tram::File::buffer()'],['../namespacetram_1_1implementation.html#a8098d615040fde5cc1fc55269394ccb7',1,'tram::implementation::buffer()']]], ['buffer_2ecpp_58',['buffer.cpp',['../buffer_8cpp.html',1,'']]], ['buffer_2eh_59',['buffer.h',['../buffer_8h.html',1,'']]], ['buffer_5fcount_60',['BUFFER_COUNT',['../namespacetram_1_1_audio_1_1_spatial.html#ac53db006980b48a77fdcc80c34854c20',1,'tram::Audio::Spatial']]], ['buffer_5fcursor_61',['buffer_cursor',['../classtram_1_1_file.html#aa4875014953235da2776dac766558fad',1,'tram::File']]], ['buffer_5fend_62',['buffer_end',['../classtram_1_1_file.html#a5dfaae97d414184a8999f401fe07b01f',1,'tram::File']]], ['bullet_2ecpp_63',['bullet.cpp',['../bullet_8cpp.html',1,'']]], ['button_64',['Button',['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a1cdc713f455d7e0df9815ce1c75b67b9',1,'tram::Ext::Kitchensink::Button::Button()'],['../namespacetram_1_1_g_u_i.html#a36df4e7f162a96882c85976374864e7a',1,'tram::GUI::Button()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html',1,'tram::Ext::Kitchensink::Button']]], ['button_5ffield_5fdirection_65',['BUTTON_FIELD_DIRECTION',['../namespacetram_1_1_ext_1_1_kitchensink.html#ad924f50692439454362f23d98fb1ffe7a92474d3f271e766f76971dda90cd0362',1,'tram::Ext::Kitchensink']]], ['button_5ffield_5fdistance_66',['BUTTON_FIELD_DISTANCE',['../namespacetram_1_1_ext_1_1_kitchensink.html#ad924f50692439454362f23d98fb1ffe7ac099af4787961ca1566e96824af7ffc7',1,'tram::Ext::Kitchensink']]], ['button_5ffield_5fflags_67',['BUTTON_FIELD_FLAGS',['../namespacetram_1_1_ext_1_1_kitchensink.html#ad924f50692439454362f23d98fb1ffe7a028447ade1e576d6a3596bedf3517528',1,'tram::Ext::Kitchensink']]], ['button_5ffield_5flast_68',['BUTTON_FIELD_LAST',['../namespacetram_1_1_ext_1_1_kitchensink.html#ad924f50692439454362f23d98fb1ffe7af808d6a5415653e978a37bc90f1712ca',1,'tram::Ext::Kitchensink']]], ['button_5ffield_5flightmap_69',['BUTTON_FIELD_LIGHTMAP',['../namespacetram_1_1_ext_1_1_kitchensink.html#ad924f50692439454362f23d98fb1ffe7abd316ee424b7b23bc29edb3db10d7971',1,'tram::Ext::Kitchensink']]], ['button_5ffield_5fmodel_70',['BUTTON_FIELD_MODEL',['../namespacetram_1_1_ext_1_1_kitchensink.html#ad924f50692439454362f23d98fb1ffe7a5939dee0aa6a66cd382da9d723dc5119',1,'tram::Ext::Kitchensink']]], ['button_5ffield_5forigin_71',['BUTTON_FIELD_ORIGIN',['../namespacetram_1_1_ext_1_1_kitchensink.html#ad924f50692439454362f23d98fb1ffe7abccb49cfe3ecf4a7089d3f68b31d5733',1,'tram::Ext::Kitchensink']]], ['button_5ffield_5fparent_72',['BUTTON_FIELD_PARENT',['../namespacetram_1_1_ext_1_1_kitchensink.html#ad924f50692439454362f23d98fb1ffe7a07490a9283436693bf80c3c6b0058c01',1,'tram::Ext::Kitchensink']]], ['button_5ffield_5fpause_73',['BUTTON_FIELD_PAUSE',['../namespacetram_1_1_ext_1_1_kitchensink.html#ad924f50692439454362f23d98fb1ffe7afe4015956bfc5bb557953716e66a1661',1,'tram::Ext::Kitchensink']]], ['button_5ffield_5fsound_74',['BUTTON_FIELD_SOUND',['../namespacetram_1_1_ext_1_1_kitchensink.html#ad924f50692439454362f23d98fb1ffe7a728d91fe623b79e8061cafa8a4652b36',1,'tram::Ext::Kitchensink']]], ['button_5ffield_5fspeed_75',['BUTTON_FIELD_SPEED',['../namespacetram_1_1_ext_1_1_kitchensink.html#ad924f50692439454362f23d98fb1ffe7a52b7c6c18b3e554e70783d4fbff24377',1,'tram::Ext::Kitchensink']]], ['button_5fflag_5flocked_76',['BUTTON_FLAG_LOCKED',['../namespacetram_1_1_ext_1_1_kitchensink.html#ac280e36a407bbb9e04103c5b98a6d6d4a256eaf735f9a4e3d494796a41a86020f',1,'tram::Ext::Kitchensink']]], ['button_5fflag_5fmomentary_77',['BUTTON_FLAG_MOMENTARY',['../namespacetram_1_1_ext_1_1_kitchensink.html#ac280e36a407bbb9e04103c5b98a6d6d4a32a1fe42b0a3f2c8fe9a144c063d8875',1,'tram::Ext::Kitchensink']]], ['button_5fflag_5fpushed_78',['BUTTON_FLAG_PUSHED',['../namespacetram_1_1_ext_1_1_kitchensink.html#ac280e36a407bbb9e04103c5b98a6d6d4ac3fd8b6adb00899959c6922434df8667',1,'tram::Ext::Kitchensink']]], ['button_5fflag_5frotary_79',['BUTTON_FLAG_ROTARY',['../namespacetram_1_1_ext_1_1_kitchensink.html#ac280e36a407bbb9e04103c5b98a6d6d4accb92c1699f26653b36e7d8e034de0ab',1,'tram::Ext::Kitchensink']]], ['button_5fflag_5ftoggle_80',['BUTTON_FLAG_TOGGLE',['../namespacetram_1_1_ext_1_1_kitchensink.html#ac280e36a407bbb9e04103c5b98a6d6d4ad5ba4fa14d330818e7cb9d2d925bfd89',1,'tram::Ext::Kitchensink']]], ['button_5fstate_5flowering_81',['BUTTON_STATE_LOWERING',['../namespacetram_1_1_ext_1_1_kitchensink.html#a0d1eaa08844d3f7ecb0fafaa53d7eea0a9539b1c85c98e25e6d3bfbdec2a53a10',1,'tram::Ext::Kitchensink']]], ['button_5fstate_5fnadir_5fready_82',['BUTTON_STATE_NADIR_READY',['../namespacetram_1_1_ext_1_1_kitchensink.html#a0d1eaa08844d3f7ecb0fafaa53d7eea0abe12753cafabc3489ec75a7d078c2938',1,'tram::Ext::Kitchensink']]], ['button_5fstate_5fnadir_5fwaiting_83',['BUTTON_STATE_NADIR_WAITING',['../namespacetram_1_1_ext_1_1_kitchensink.html#a0d1eaa08844d3f7ecb0fafaa53d7eea0a0be36c3333481d4855b2113b7cabc18c',1,'tram::Ext::Kitchensink']]], ['button_5fstate_5frising_84',['BUTTON_STATE_RISING',['../namespacetram_1_1_ext_1_1_kitchensink.html#a0d1eaa08844d3f7ecb0fafaa53d7eea0a0ef998e800a26a482cca479d2f93e691',1,'tram::Ext::Kitchensink']]], ['button_5fstate_5fzenith_5fready_85',['BUTTON_STATE_ZENITH_READY',['../namespacetram_1_1_ext_1_1_kitchensink.html#a0d1eaa08844d3f7ecb0fafaa53d7eea0a8e326dcbf2adbe29156062f45c99c2d9',1,'tram::Ext::Kitchensink']]], ['button_5fstate_5fzenith_5fwaiting_86',['BUTTON_STATE_ZENITH_WAITING',['../namespacetram_1_1_ext_1_1_kitchensink.html#a0d1eaa08844d3f7ecb0fafaa53d7eea0a558287c453525abd4baca12cb3b0f3e9',1,'tram::Ext::Kitchensink']]] ]; ================================================ FILE: docs/cppapi/search/all_3.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/all_3.js ================================================ var searchData= [ ['calcsortkey_0',['CalcSortKey',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#a3460a35f7e6246b3990b5b09f26c6415',1,'tram::Render::API::GLDrawListEntry']]], ['callback_1',['callback',['../classtram_1_1_ext_1_1_menu_1_1_list_selection.html#a5651a090194d79d5ce22e0bca536b760',1,'tram::Ext::Menu::ListSelection::callback()'],['../structtram_1_1_async_1_1_resource_request.html#a18c34da06b9f3eea7875699d11781cc5',1,'tram::Async::ResourceRequest::callback()'],['../classtram_1_1_ext_1_1_menu_1_1_entity_picker.html#a8c023a757a11debd8fd69ed09164e78a',1,'tram::Ext::Menu::EntityPicker::callback()']]], ['callback_2',['CALLBACK',['../namespacetram_1_1_async.html#a3852629b110e5e57e85140bb5fe518e5a1e2e20d91f42657d02e821985a4bd96c',1,'tram::Async']]], ['callback_5fcount_3',['callback_count',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a78e5e9c142141e83c4060ac83702e261',1,'tram::Ext::Camera::FirstPersonCamera']]], ['callback_5fdata_4',['callback_data',['../structtram_1_1_async_1_1_resource_request.html#aa5757146bd87abef32ac1f65ff1965ea',1,'tram::Async::ResourceRequest']]], ['callbackmotionstate_5',['CallbackMotionState',['../classtram_1_1_physics_1_1_a_p_i_1_1_callback_motion_state.html#aa3c82472daee6498cab94722d7d43a05',1,'tram::Physics::API::CallbackMotionState::CallbackMotionState()'],['../classtram_1_1_physics_1_1_a_p_i_1_1_callback_motion_state.html',1,'tram::Physics::API::CallbackMotionState']]], ['callfunction_6',['CallFunction',['../classtram_1_1_script_1_1_interface.html#a5aba7adedc8003e03a2cb0d161b9faed',1,'tram::Script::Interface::CallFunction()'],['../namespacetram_1_1_script.html#af8e8489ae939b80cca8c7b220c230447',1,'tram::Script::CallFunction()']]], ['camera_7',['camera',['../main_8cpp.html#a9b1d1ad26dca3cdfbe7bcabb98c50bcd',1,'main.cpp']]], ['camera_8',['Camera',['../classtram_1_1_ext_1_1_camera_1_1_camera.html',1,'tram::Ext::Camera']]], ['camera_2ecpp_9',['camera.cpp',['../camera_8cpp.html',1,'']]], ['camera_2eh_10',['camera.h',['../camera_8h.html',1,'']]], ['camera_5fmultiplier_11',['CAMERA_MULTIPLIER',['../namespacetram.html#a26aea911deb4f2a882fecaa9db2cca5f',1,'tram']]], ['camera_5fsensitivity_12',['CAMERA_SENSITIVITY',['../namespacetram_1_1_u_i.html#a2613ca9ec2e1a030b94d21e9e87281af',1,'tram::UI']]], ['camera_5fspeed_13',['CAMERA_SPEED',['../namespacetram_1_1_u_i.html#acf999f961120350df3549cff1d0c9b0c',1,'tram::UI']]], ['camera_5fsystem_14',['CAMERA_SYSTEM',['../namespacetram_1_1_ext_1_1_camera.html#a9ef902fd854a7068580fccde152ed56d',1,'tram::Ext::Camera']]], ['cancelrequest_15',['CancelRequest',['../namespacetram_1_1_async.html#a00df174c441553df6c3728c4355a4b7e',1,'tram::Async']]], ['capsule_16',['Capsule',['../structtram_1_1_physics_1_1_collision_shape.html#afae4406289b2e70a53335128889c4248',1,'tram::Physics::CollisionShape']]], ['cell_17',['cell',['../classtram_1_1_entity.html#ad3fb3cd40bf0ec9c846a46704d4f7470',1,'tram::Entity::cell()'],['../classtram_1_1_ext_1_1_menu_1_1_world_cell_properties.html#af1e688384507e5243de02c997e49f8fc',1,'tram::Ext::Menu::WorldCellProperties::cell()']]], ['cell_5finto_18',['cell_into',['../classtram_1_1_transition.html#a0d8f2bf93f2ea1502d7ef4faf5a019c5',1,'tram::Transition']]], ['center_19',['center',['../structtram_1_1_render_1_1_sprite_point.html#abc7c9bdede266f19ac735648da416620',1,'tram::Render::SpritePoint']]], ['chamberpot_20',['chamberpot',['../main_8cpp.html#acc812653ff7db6ef5da9d01fbfd28f17',1,'main.cpp']]], ['channels_21',['channels',['../structtram_1_1_audio_1_1_spatial_1_1_audio_buffer.html#aa356def298534b01ba646ab533a9340f',1,'tram::Audio::Spatial::AudioBuffer::channels()'],['../classtram_1_1_audio_1_1_sound.html#a946974537a8c3a039a9c49a4edb7f369',1,'tram::Audio::Sound::channels()'],['../classtram_1_1_render_1_1_material.html#aa342a4e570d577fd626ee7999ca2fd2b',1,'tram::Render::Material::channels()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_texture.html#a964e2ce1c9da10fdb367faf75368e18d',1,'tram::Render::API::SWTexture::channels()']]], ['character_22',['character',['../structtram_1_1_ext_1_1_kitchensink_1_1_faction_rank.html#a9b34eaee9f8316ebd6bc36e3e30aaed6',1,'tram::Ext::Kitchensink::FactionRank::character()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_character_disposition.html#ad88789d2cf725bb4c89baf02e542a974',1,'tram::Ext::Kitchensink::CharacterDisposition::character()']]], ['character_23',['Character',['../classtram_1_1_ext_1_1_kitchensink_1_1_character.html',1,'tram::Ext::Kitchensink']]], ['character_2ecpp_24',['character.cpp',['../character_8cpp.html',1,'']]], ['character_2eh_25',['character.h',['../character_8h.html',1,'']]], ['character_5fclass_26',['character_class',['../classtram_1_1_ext_1_1_kitchensink_1_1_character.html#a2daf2dcab1aad5fbe67778562158b7b5',1,'tram::Ext::Kitchensink::Character']]], ['character_5fclasses_27',['character_classes',['../namespacetram_1_1_ext_1_1_kitchensink.html#a4573e832ec8b71f1590c7f8e05a5c6c7',1,'tram::Ext::Kitchensink']]], ['character_5fcount_28',['CHARACTER_COUNT',['../character_8cpp.html#af6d152c6a0610a977ca689f1a964a1cf',1,'character.cpp']]], ['characterclass_29',['CharacterClass',['../classtram_1_1_ext_1_1_kitchensink_1_1_character_class.html',1,'tram::Ext::Kitchensink']]], ['characterdisposition_30',['CharacterDisposition',['../structtram_1_1_ext_1_1_kitchensink_1_1_character_disposition.html',1,'tram::Ext::Kitchensink']]], ['characters_31',['characters',['../namespacetram_1_1_ext_1_1_kitchensink.html#ad4518a370e2bb8c8160f21d50cd952c4',1,'tram::Ext::Kitchensink']]], ['checkbox_32',['CheckBox',['../namespacetram_1_1_g_u_i.html#abd53a76b58ffc880c50cd76f1b6019bf',1,'tram::GUI']]], ['checkreverb_33',['CheckReverb',['../namespacetram_1_1_audio_1_1_spatial.html#a3d836ed6f922b4b64472050dd5b99304',1,'tram::Audio::Spatial']]], ['checktransition_34',['CheckTransition',['../classtram_1_1_entity.html#a0fa0c3702c54eb536cd07eaf49dc799a',1,'tram::Entity']]], ['children_35',['children',['../structtram_1_1_ext_1_1_kitchensink_1_1_entity_children.html#aa6ddfcd9329072939a5ee08991b275af',1,'tram::Ext::Kitchensink::EntityChildren']]], ['class_5fcount_36',['CLASS_COUNT',['../character_8cpp.html#a1b511158ca6796bb813f3bdb64369417',1,'character.cpp']]], ['clear_37',['clear',['../structtram_1_1_ext_1_1_kitchensink_1_1_inventory_factory_info.html#a05a7d18aa421d23935e61ad99cb4e23f',1,'tram::Ext::Kitchensink::InventoryFactoryInfo']]], ['clear_38',['Clear',['../classtram_1_1_ext_1_1_menu_1_1_menu.html#a172b7acc126ab25cbbb7162c7ae75f19',1,'tram::Ext::Menu::Menu::Clear()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html#ab0e2c46e1b281bc6f2d87c2c7f432272',1,'tram::Ext::Kitchensink::AIAgent::Clear()']]], ['clear_39',['clear',['../classtram_1_1_event_listener.html#adbbf55ccc50a2a2745bbd06adde45e1b',1,'tram::EventListener::clear()'],['../classtram_1_1_component.html#a913f66e1f83b18318e0962d532e77376',1,'tram::Component::clear()']]], ['clear_5fscreen_40',['clear_screen',['../namespacetram_1_1_render_1_1_a_p_i.html#a7f589aad0fe82884c1fc279e5f29092e',1,'tram::Render::API']]], ['clearoverride_41',['ClearOverride',['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html#a8b061b128f6b9e6494ed77517224db9a',1,'tram::Ext::Kitchensink::AIAgent']]], ['clicked_42',['Clicked',['../namespacetram_1_1_g_u_i.html#a0d4089794c4aca324d8c19d02ef80a07',1,'tram::GUI']]], ['clickhandled_43',['ClickHandled',['../namespacetram_1_1_g_u_i.html#a6121817714545cc76730037226ca285f',1,'tram::GUI']]], ['clickhandledlate_44',['ClickHandledLate',['../namespacetram_1_1_g_u_i.html#aa6bfb846ae3573d59924997f6ce098b8',1,'tram::GUI']]], ['cliplineinclipspace_45',['ClipLineInClipSpace',['../namespacetram_1_1_render_1_1_a_p_i.html#ab1c5b9548adfc17b5f3a7343e9194b00',1,'tram::Render::API']]], ['clippoint_46',['ClipPoint',['../structtram_1_1_render_1_1_a_p_i_1_1_clip_point.html',1,'tram::Render::API']]], ['cliprenderline_47',['ClipRenderLine',['../namespacetram_1_1_render_1_1_a_p_i.html#a1abd96bf65b5421ee6da77b7f125f3e0',1,'tram::Render::API']]], ['clipsingleclippointlinebottomplane_48',['ClipSingleClipPointLineBottomPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#ae2e0dddbb04d632038f35b35c93119ca',1,'tram::Render::API']]], ['clipsingleclippointlinefarplane_49',['ClipSingleClipPointLineFarPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#acf4c3092dfcec8d8ed7d4fb68be7fb7a',1,'tram::Render::API']]], ['clipsingleclippointlineleftplane_50',['ClipSingleClipPointLineLeftPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#abd64f4c4eafba9f6c03d7019f10a31b8',1,'tram::Render::API']]], ['clipsingleclippointlinenearplane_51',['ClipSingleClipPointLineNearPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#aef9b243efb8e2ad402b88e472fad8263',1,'tram::Render::API']]], ['clipsingleclippointlinerightplane_52',['ClipSingleClipPointLineRightPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#a1d1b7577bb0f160333ab20bd9edabadb',1,'tram::Render::API']]], ['clipsingleclippointlinetopplane_53',['ClipSingleClipPointLineTopPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#a80773bbd781af72dee05332f2e581d0e',1,'tram::Render::API']]], ['clipsinglepointline_54',['ClipSinglePointLine',['../namespacetram_1_1_render_1_1_a_p_i.html#a46caee60f68174eb2c6591274b2a2718',1,'tram::Render::API']]], ['clipsinglepointlinebottomplane_55',['ClipSinglePointLineBottomPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#a7f56b51da726200209f842f1679692c8',1,'tram::Render::API']]], ['clipsinglepointlinefarplane_56',['ClipSinglePointLineFarPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#a3acf6872da87792eac2ed0d1ed5907e8',1,'tram::Render::API']]], ['clipsinglepointlineleftplane_57',['ClipSinglePointLineLeftPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#ab5aff334ca94068954abaa63a7f2e8a0',1,'tram::Render::API']]], ['clipsinglepointlinenearplane_58',['ClipSinglePointLineNearPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#a1e3989389fafae9238714ed27974352e',1,'tram::Render::API']]], ['clipsinglepointlinerightplane_59',['ClipSinglePointLineRightPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#a08517cac3da578ca3841551b8d2e98d5',1,'tram::Render::API']]], ['clipsinglepointlinetopplane_60',['ClipSinglePointLineTopPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#a7f4da9afb94ac65936c1fd9b71100f1d',1,'tram::Render::API']]], ['clipspacetoscreenspace_61',['ClipSpaceToScreenSpace',['../namespacetram_1_1_render_1_1_a_p_i.html#ac21da51349e4de14ceba43b117898853',1,'tram::Render::API']]], ['cliptriangle_62',['ClipTriangle',['../structtram_1_1_render_1_1_a_p_i_1_1_clip_triangle.html',1,'tram::Render::API']]], ['cliptrianglelist_63',['ClipTriangleList',['../namespacetram_1_1_render_1_1_a_p_i.html#af8330d284873597a2d985086d85e94ef',1,'tram::Render::API']]], ['close_64',['CLOSE',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afda804fd125ffcb561b7664348dd4f481aa',1,'tram::Message::CLOSE()'],['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6a03cc5db0ca5e74167bf7cdee1feb3315',1,'tram::Signal::CLOSE()']]], ['closeall_65',['CloseAll',['../namespacetram_1_1_ext_1_1_menu.html#abbbd02bf188571d1d66399c4f1ffb295',1,'tram::Ext::Menu']]], ['co_66',['co',['../structtram_1_1_render_1_1_dynamic_model_vertex.html#abe2dcd54a8992ee1eb86927943ec84d4',1,'tram::Render::DynamicModelVertex::co()'],['../structtram_1_1_render_1_1_static_model_vertex.html#a03a02fdd57efe92a0436710cc9f35376',1,'tram::Render::StaticModelVertex::co()'],['../structtram_1_1_render_1_1_sprite_vertex.html#ac907370fcda98fc09892bf2d6b5ca589',1,'tram::Render::SpriteVertex::co()'],['../structtram_1_1_render_1_1_line_vertex.html#a19733733fc175c6d7892ecc8233ca9c3',1,'tram::Render::LineVertex::co()']]], ['col_67',['col',['../structtram_1_1_render_1_1_a_p_i_1_1_color_vertex.html#a9df94956349fae1207826426888b308c',1,'tram::Render::API::ColorVertex']]], ['col_5fcallback_68',['col_callback',['../namespacetram_1_1_physics_1_1_a_p_i.html#acd529fe6abcfcd4c2e82d455cddee7f7',1,'tram::Physics::API']]], ['coll_5fdynamicobj_69',['COLL_DYNAMICOBJ',['../namespacetram_1_1_physics.html#a5b8f6a7bd1ffb55b55a5f534008406f8ada93bb639c3353ec4e0e96311fd39ad4',1,'tram::Physics']]], ['coll_5fmonster_70',['COLL_MONSTER',['../namespacetram_1_1_physics.html#a5b8f6a7bd1ffb55b55a5f534008406f8ab4df3752bcc815d93a68e60b473f3473',1,'tram::Physics']]], ['coll_5fplayer_71',['COLL_PLAYER',['../namespacetram_1_1_physics.html#a5b8f6a7bd1ffb55b55a5f534008406f8a841ef1760b61cef0e7da530c47cafb65',1,'tram::Physics']]], ['coll_5fstaticobj_72',['COLL_STATICOBJ',['../namespacetram_1_1_physics.html#a5b8f6a7bd1ffb55b55a5f534008406f8a692e3914ee76adacd3617acf7c0b001f',1,'tram::Physics']]], ['coll_5ftrigger_73',['COLL_TRIGGER',['../namespacetram_1_1_physics.html#a5b8f6a7bd1ffb55b55a5f534008406f8a0a6bfe7e23b7e4bc04404c729057a658',1,'tram::Physics']]], ['coll_5fvehicle_74',['COLL_VEHICLE',['../namespacetram_1_1_physics.html#a5b8f6a7bd1ffb55b55a5f534008406f8a4fe6355fc11904c1e79a3b936e299287',1,'tram::Physics']]], ['coll_5fworldobj_75',['COLL_WORLDOBJ',['../namespacetram_1_1_physics.html#a5b8f6a7bd1ffb55b55a5f534008406f8a592c0e5ecae83ad6b89e1c408b1434ec',1,'tram::Physics']]], ['collate_76',['Collate',['../namespacetram_1_1_stats.html#a1240fac658a4410cdd81f6944087a024',1,'tram::Stats']]], ['collide_77',['collide',['../classtram_1_1_controller_component.html#a93abb6fa1349a41b93f53450817f9839',1,'tram::ControllerComponent']]], ['collider_78',['collider',['../structtram_1_1_physics_1_1_collision.html#a9f47771842fd66f970df994aaf4364ff',1,'tram::Physics::Collision']]], ['collision_79',['Collision',['../classtram_1_1_trigger_component.html#ad3b53b1d861f09301a7d6dfb34fb667d',1,'tram::TriggerComponent::Collision()'],['../structtram_1_1_physics_1_1_collision.html',1,'tram::Physics::Collision']]], ['collision_5fcallback_80',['collision_callback',['../structtram_1_1_physics_1_1_a_p_i_1_1_rigidbody_metadata.html#a55749e240a2fd4f7dd0f86138f172181',1,'tram::Physics::API::RigidbodyMetadata::collision_callback()'],['../namespacetram.html#a0ec6f1beb2db1148bf277a12019a7ac0',1,'tram::collision_callback()']]], ['collision_5fdata_81',['collision_data',['../structtram_1_1_physics_1_1_a_p_i_1_1_rigidbody_metadata.html#a76f7624540258f9c63b2ec9d3cd564d7',1,'tram::Physics::API::RigidbodyMetadata']]], ['collision_5fflags_82',['collision_flags',['../structtram_1_1_physics_1_1_a_p_i_1_1_rigidbody_metadata.html#a244fc4d3569fdb5dcf085618c9e43994',1,'tram::Physics::API::RigidbodyMetadata']]], ['collision_5fgroup_83',['collision_group',['../namespacetram.html#a47a4bfe3c127f07cf4fa3a20e3785f8a',1,'tram::collision_group()'],['../classtram_1_1_f_p_s_controller_component.html#a2b9917a31e94c6ba8f331dfc19184299',1,'tram::FPSControllerComponent::collision_group()'],['../classtram_1_1_raycast_controller_component.html#a61464776123849a63632483d70f9f099',1,'tram::RaycastControllerComponent::collision_group()'],['../structtram_1_1_physics_1_1_a_p_i_1_1_rigidbody_metadata.html#afa6c56afdaf9c872476e22c40c377ead',1,'tram::Physics::API::RigidbodyMetadata::collision_group()']]], ['collision_5fheight_84',['collision_height',['../namespacetram.html#a73098ef9a80f90afd7d8f6ff04e420b9',1,'tram::collision_height()'],['../classtram_1_1_f_p_s_controller_component.html#a87c5ec8a494fd31a64e42492959673ed',1,'tram::FPSControllerComponent::collision_height()'],['../classtram_1_1_raycast_controller_component.html#a77d4b6aa40aaff452eb3793ddf9f087a',1,'tram::RaycastControllerComponent::collision_height()']]], ['collision_5fheight_5fcrouch_85',['collision_height_crouch',['../namespacetram.html#a7cc6a6286e4acb91210a3c71fb8e805f',1,'tram::collision_height_crouch()'],['../classtram_1_1_f_p_s_controller_component.html#aca171f9f6200c93a0dd9dadab48cfa04',1,'tram::FPSControllerComponent::collision_height_crouch()']]], ['collision_5fmask_86',['collision_mask',['../structtram_1_1_physics_1_1_a_p_i_1_1_rigidbody_metadata.html#a3a4939cc208da60f4699370c0cd06cfb',1,'tram::Physics::API::RigidbodyMetadata::collision_mask()'],['../structtram_1_1_physics_1_1_a_p_i_1_1_shapecast_callback.html#a484204bd5bd9c58a35435ea149de92b0',1,'tram::Physics::API::ShapecastCallback::collision_mask()'],['../classtram_1_1_trigger.html#acd2708416416c4ecefaaf3d58022fe68',1,'tram::Trigger::collision_mask()']]], ['collision_5fwidth_87',['collision_width',['../namespacetram.html#a1759e20de49502fc468e5b65e7baf481',1,'tram::collision_width()'],['../classtram_1_1_raycast_controller_component.html#a68e41561de1361f67cb1782d0dc0a97f',1,'tram::RaycastControllerComponent::collision_width()'],['../classtram_1_1_f_p_s_controller_component.html#a039b23d22ab01048dfacf106b1f33781',1,'tram::FPSControllerComponent::collision_width()']]], ['collisiongroup_88',['CollisionGroup',['../namespacetram_1_1_physics.html#a5b8f6a7bd1ffb55b55a5f534008406f8',1,'tram::Physics']]], ['collisionmodel_89',['CollisionModel',['../classtram_1_1_physics_1_1_collision_model.html#ae85bad411b05db1eaa6ce1dc585c3dbc',1,'tram::Physics::CollisionModel::CollisionModel()'],['../classtram_1_1_physics_1_1_collision_model.html',1,'tram::Physics::CollisionModel']]], ['collisionmodel_2ecpp_90',['collisionmodel.cpp',['../collisionmodel_8cpp.html',1,'']]], ['collisionmodel_2eh_91',['collisionmodel.h',['../collisionmodel_8h.html',1,'']]], ['collisions_92',['collisions',['../structtram_1_1_physics_1_1_a_p_i_1_1_shapecast_callback.html#a47ade4608bfdc01f7b7b9bdf9afacac8',1,'tram::Physics::API::ShapecastCallback']]], ['collisionshape_93',['CollisionShape',['../structtram_1_1_physics_1_1_collision_shape.html',1,'tram::Physics']]], ['collisionshape_2eh_94',['collisionshape.h',['../collisionshape_8h.html',1,'']]], ['collisionshape_5ft_95',['collisionshape_t',['../structtram_1_1_physics_1_1collisionshape__t.html',1,'tram::Physics']]], ['collisionshapetransform_96',['CollisionShapeTransform',['../structtram_1_1_physics_1_1_a_p_i_1_1_collision_shape_transform.html',1,'tram::Physics::API']]], ['collisiontriangle_97',['CollisionTriangle',['../structtram_1_1_physics_1_1_collision_triangle.html',1,'tram::Physics']]], ['collmodel_98',['collmodel',['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_remove.html#ac318ecbabe95dcb0beedd361a048cbaa',1,'tram::Ext::Kitchensink::TriggerRemove::collmodel()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_teleport.html#a413cebe7dae0b94c8445d9cc4692d88a',1,'tram::Ext::Kitchensink::TriggerTeleport::collmodel()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_player_movement.html#a6bcb6e7ecadc6d10fc9cb87afab88539',1,'tram::Ext::Kitchensink::TriggerPlayerMovement::collmodel()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_multiple.html#a46495b4ffb89238697269f7dde7ba3f8',1,'tram::Ext::Kitchensink::TriggerMultiple::collmodel()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_once.html#a6aaf60e131f0300688ae31d33413e4e0',1,'tram::Ext::Kitchensink::TriggerOnce::collmodel()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_autosave.html#a0d72864744e1e06e95d53d7dfad8e775',1,'tram::Ext::Kitchensink::TriggerAutosave::collmodel()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_train.html#a0ffb909fcfd24bf1eb7e1abd23af9e88',1,'tram::Ext::Kitchensink::Train::collmodel()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_pickup.html#a0ca93c8adc4f2ef76393b972dc9decaf',1,'tram::Ext::Kitchensink::Pickup::collmodel()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_breakable.html#a9dd4b432726ee750a3c86fff4e6886ee',1,'tram::Ext::Kitchensink::Breakable::collmodel()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_text.html#a9d06ca5c12e96a67c3f5560ad8832215',1,'tram::Ext::Kitchensink::DebugText::collmodel()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_shape.html#a9ad7471be8c0660f00e4f383673cd811',1,'tram::Ext::Kitchensink::DebugShape::collmodel()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_push.html#a3c59dbb31bfa17213ffd45b84c655a5c',1,'tram::Ext::Kitchensink::TriggerPush::collmodel()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_hurt.html#a6c79786157db20e80cc05ac169212de7',1,'tram::Ext::Kitchensink::TriggerHurt::collmodel()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_water.html#a7814a30089783833b4f13ab9f009b4ea',1,'tram::Ext::Kitchensink::Water::collmodel()'],['../classtram_1_1_crate.html#a739363f4998b4e6367a8dbc620156a34',1,'tram::Crate::collmodel()']]], ['color_99',['color',['../classtram_1_1_render_component.html#a3802d623d0009f2649888be1a23dfba4',1,'tram::RenderComponent::color()'],['../classtram_1_1_light.html#ac704c0af1a53820b9dcbcaa991650787',1,'tram::Light::color()'],['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#aff53e1b18af098752ef32e98869439e7',1,'tram::Render::API::D3DDrawListEntry::color()'],['../structtram_1_1_render_1_1_a_p_i_1_1_f_v_f_helper.html#ace2a0fa5572ce1b168fe94cb20ec08a2',1,'tram::Render::API::FVFHelper::color()'],['../structtram_1_1_render_1_1_a_p_i_1_1_line_vertex.html#a7881817677d8099c98465c08652c6588',1,'tram::Render::API::LineVertex::color()'],['../classtram_1_1_render_1_1_material.html#a22ce9caef788daf431d1e339fe72423d',1,'tram::Render::Material::color()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_light.html#a78cdd846a56cbb9ca8d7085a04a0edde',1,'tram::Render::API::GLLight::color()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_material.html#ae6842cdc5bd66c705914b4d4b11a61a8',1,'tram::Render::API::GLMaterial::color()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_light.html#ac7bf8ca7901ad82b4055cca7a9f17929',1,'tram::Render::API::SWLight::color()'],['../structtram_1_1_render_1_1_a_p_i_1_1_f_f_p_helper.html#accf51615aa39c47f2218b2a2b54da19e',1,'tram::Render::API::FFPHelper::color()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html#a63460358088c63ffeb9c361e7ac8398f',1,'tram::Render::API::SWDrawListEntry::color()'],['../structtram_1_1_render_1_1_sprite_vertex.html#add933d35ed49d8979c02c6a817bf347e',1,'tram::Render::SpriteVertex::color()'],['../structtram_1_1_render_1_1_line_vertex.html#a89e5b2b41533702bef6a605c4443de40',1,'tram::Render::LineVertex::color()'],['../structtram_1_1_render_1_1_sprite_point.html#ae6af3c7ee1e7f4b5e23b31fd159fbd1e',1,'tram::Render::SpritePoint::color()'],['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_light.html#a5fd841ddfed89181a99b82c83f26298a',1,'tram::Render::API::D3DLight::color()'],['../classtram_1_1_light_component.html#a9613f69281a1170cd3465920fc8254ef',1,'tram::LightComponent::color()']]], ['color_5fblack_100',['COLOR_BLACK',['../namespacetram_1_1_render.html#a1881266fc3e4ccfe6161b9f53816c1b4',1,'tram::Render']]], ['color_5fblue_101',['COLOR_BLUE',['../namespacetram_1_1_render.html#ac2545e14772852a87dae9066123c2646',1,'tram::Render']]], ['color_5fcyan_102',['COLOR_CYAN',['../namespacetram_1_1_render.html#a9bece9ac513eed3675e8fc05dde16e2c',1,'tram::Render']]], ['color_5fgray_103',['COLOR_GRAY',['../namespacetram_1_1_render.html#a38f1da44cef9b7d17113d9204723e561',1,'tram::Render']]], ['color_5fgreen_104',['COLOR_GREEN',['../namespacetram_1_1_render.html#a46842a211bc249ada03b3879ee9e7d61',1,'tram::Render']]], ['color_5fpink_105',['COLOR_PINK',['../namespacetram_1_1_render.html#aa08fcc8a83e73c8896423742971d97fd',1,'tram::Render']]], ['color_5fred_106',['COLOR_RED',['../namespacetram_1_1_render.html#a3d207aeb8d3bd302970a0ce72b15f98a',1,'tram::Render']]], ['color_5ft_107',['color_t',['../namespacetram_1_1_render.html#a32fb4b5bd9e12e48f08e6ff4ce8817b8',1,'tram::Render']]], ['color_5fwhite_108',['COLOR_WHITE',['../namespacetram_1_1_render.html#ac3b0b62b8ab1781496fd3a2ac86eaa7a',1,'tram::Render']]], ['color_5fyellow_109',['COLOR_YELLOW',['../namespacetram_1_1_render.html#a528da7221f08fab1b6d5e3b3cacdb8fc',1,'tram::Render']]], ['colorlines_110',['colorlines',['../namespacetram_1_1_render.html#a4fbef4fea80d616dcb5ca311f69e32d6',1,'tram::Render']]], ['colorlines_5fentry_111',['colorlines_entry',['../namespacetram_1_1_render.html#afdc87f9f25286c1ac68113e173db9c65',1,'tram::Render']]], ['colorlines_5fvertex_5farray_112',['colorlines_vertex_array',['../namespacetram_1_1_render.html#a56939aaf0348435b0e53119c4df5ce6f',1,'tram::Render']]], ['colormode_113',['ColorMode',['../namespacetram_1_1_render.html#ac973dc59905532e29e79841ae76af894',1,'tram::Render']]], ['colormode_5fr_114',['COLORMODE_R',['../namespacetram_1_1_render.html#ac973dc59905532e29e79841ae76af894a85a444049030a1778193c39eed3a0519',1,'tram::Render']]], ['colormode_5frg_115',['COLORMODE_RG',['../namespacetram_1_1_render.html#ac973dc59905532e29e79841ae76af894a74b0578836d9a93c2731f68b14224cda',1,'tram::Render']]], ['colormode_5frgb_116',['COLORMODE_RGB',['../namespacetram_1_1_render.html#ac973dc59905532e29e79841ae76af894ae9f556d36de484416685e7e5d2bd3efc',1,'tram::Render']]], ['colormode_5frgba_117',['COLORMODE_RGBA',['../namespacetram_1_1_render.html#ac973dc59905532e29e79841ae76af894ae27c6265a9141741207b650f597a74ae',1,'tram::Render']]], ['colors_118',['colors',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#a65ce88387a56b47a03820d4c69aa38f7',1,'tram::Render::API::ShaderUniformModelMatrices::colors()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#ac329ee9b6d3154d5f81d1cb322bdb464',1,'tram::Render::API::GLDrawListEntry::colors()']]], ['colorvertex_119',['ColorVertex',['../structtram_1_1_render_1_1_a_p_i_1_1_color_vertex.html',1,'tram::Render::API']]], ['comparison_120',['comparison',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a21b68aede57e29c31f3abac8c0c4fef6',1,'tram::Ext::Kitchensink::QuestVariable']]], ['compartment_121',['compartment',['../structtram_1_1_ext_1_1_kitchensink_1_1_item_instance.html#a16fa6fa3ba81cb1533d9eb56446e7090',1,'tram::Ext::Kitchensink::ItemInstance']]], ['compartments_122',['compartments',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#a2a252220bb1ea4bd2303bb6b54cfeba7',1,'tram::Ext::Kitchensink::Inventory']]], ['compileshaders_123',['CompileShaders',['../namespacetram_1_1_render_1_1_a_p_i.html#a39a089d719f123c75f967ca2a7065d4d',1,'tram::Render::API']]], ['component_124',['COMPONENT',['../namespacetram_1_1_async.html#a3852629b110e5e57e85140bb5fe518e5a3c24b0dd40835b178028420b095d347e',1,'tram::Async']]], ['component_125',['Component',['../classtram_1_1_component.html#a45fa994315db8371fbd6b59cfa5d4979',1,'tram::Component']]], ['component_126',['component',['../structtram_1_1_listener_info.html#aee7f801b96773125388c51639472d1bf',1,'tram::ListenerInfo::component()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_state_component.html#ad3332339eb0ad584e6dea173f1a03ad7',1,'tram::Ext::Kitchensink::AnimationStateComponent::component()']]], ['component_127',['Component',['../classtram_1_1_component.html',1,'tram']]], ['component_5flimit_5fanimation_128',['COMPONENT_LIMIT_ANIMATION',['../namespacetram.html#aefb7b9aa5163a6725fc02bde6672b88f',1,'tram']]], ['component_5flimit_5faudio_129',['COMPONENT_LIMIT_AUDIO',['../namespacetram.html#a7db4cca9ab5ecae0d8d4de7effd6aec5',1,'tram']]], ['component_5flimit_5fcontroller_130',['COMPONENT_LIMIT_CONTROLLER',['../namespacetram.html#a66281a5ccd6da73b86dd9a2ba49585a2',1,'tram']]], ['component_5flimit_5fdecal_131',['COMPONENT_LIMIT_DECAL',['../namespacetram.html#a38c17cf408e9c052cf6e8250250ef68f',1,'tram']]], ['component_5flimit_5flight_132',['COMPONENT_LIMIT_LIGHT',['../namespacetram.html#a0351a7a038c0c51bf2e41a37bb54702c',1,'tram']]], ['component_5flimit_5fparticle_133',['COMPONENT_LIMIT_PARTICLE',['../namespacetram.html#a1ef1096144023efed74009fd55ff4668',1,'tram']]], ['component_5flimit_5fphysics_134',['COMPONENT_LIMIT_PHYSICS',['../namespacetram.html#aef0b54c575d166021a519456e745e5a8',1,'tram']]], ['component_5flimit_5fplayer_135',['COMPONENT_LIMIT_PLAYER',['../namespacetram.html#a8d062bfaaf077ec23a49b1e932f27b6a',1,'tram']]], ['component_5flimit_5frender_136',['COMPONENT_LIMIT_RENDER',['../namespacetram.html#afdf2b176e856c8c025e6c5a05b376f2f',1,'tram']]], ['component_5flimit_5fsprite_137',['COMPONENT_LIMIT_SPRITE',['../namespacetram.html#a5099d59ad2cf7be3d5f16024f0a1443d',1,'tram']]], ['component_5flimit_5ftrigger_138',['COMPONENT_LIMIT_TRIGGER',['../namespacetram.html#abf691e9b98162d05d0b235cf0f3d9387',1,'tram']]], ['concat_139',['concat',['../namespacetram_1_1implementation.html#a6faec7dc4da15e2576e1a201d4eb164a',1,'tram::implementation::concat(const std::string_view &value)'],['../namespacetram_1_1implementation.html#a39fba9c0eb726295d1456c1651b12d45',1,'tram::implementation::concat(const std::string &value)'],['../namespacetram_1_1implementation.html#acebb47b38e9273b2c259256c7a8fee5f',1,'tram::implementation::concat(const char *const &value)'],['../namespacetram_1_1implementation.html#a4cec4f0b2a5a9e7fb164820607f105d4',1,'tram::implementation::concat(const char *value)'],['../namespacetram_1_1implementation.html#a7a2a311b556467311387960228c67ab8',1,'tram::implementation::concat(const UID &value)'],['../namespacetram_1_1implementation.html#ad81660eda2af6067bdf5708b9157a524',1,'tram::implementation::concat(const T &value)'],['../namespacetram_1_1implementation.html#a4bb77cc33a48fded3045407919472113',1,'tram::implementation::concat(const char(&value)[N])']]], ['concat_5ffmt_140',['concat_fmt',['../namespacetram_1_1implementation.html#a03b4b9c9589ff25e1b1df4e5491b829f',1,'tram::implementation']]], ['concat_5fnumeric_141',['concat_numeric',['../namespacetram_1_1implementation.html#aac1de7cbd86415606d60e0476fa6fd56',1,'tram::implementation::concat_numeric(const int64_t &value)'],['../namespacetram_1_1implementation.html#ae9f6692c3813328fafd9e99871fafb04',1,'tram::implementation::concat_numeric(const uint64_t &value)'],['../namespacetram_1_1implementation.html#a829582177c315b267d8c5d25071dc20b',1,'tram::implementation::concat_numeric(const T &value)'],['../namespacetram_1_1implementation.html#a8a5a3ae9f84e3585cda2b06cd8221d69',1,'tram::implementation::concat_numeric(const float &value)']]], ['condition_142',['condition',['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_topic.html#aa78509b95f65ce2d8974875004cd736f',1,'tram::Ext::Kitchensink::DialogTopic::condition()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_trigger.html#a8b50d062701669c3cd83ae8f4ecced33',1,'tram::Ext::Kitchensink::QuestTrigger::condition()']]], ['cone_143',['Cone',['../structtram_1_1_physics_1_1_collision_shape.html#a6bfd9e0a322b6a7c5babf73c33695f5b',1,'tram::Physics::CollisionShape']]], ['config_2eh_144',['config.h',['../config_8h.html',1,'']]], ['console_145',['Console',['../classtram_1_1_ext_1_1_menu_1_1_console.html#a8f37ecf596d0db477707c9d3ed698953',1,'tram::Ext::Menu::Console::Console()'],['../classtram_1_1_ext_1_1_menu_1_1_console.html',1,'tram::Ext::Menu::Console']]], ['console_5flogs_146',['console_logs',['../namespacetram_1_1_ext_1_1_menu.html#af86d588e63468dd9f7b354da13f18124',1,'tram::Ext::Menu']]], ['constants_147',['constants',['../structtram_1_1_render_1_1_light_graph_1_1_node.html#aa9aec84624a3677767c4ba9f1e593a35',1,'tram::Render::LightGraph::Node']]], ['constr_5ffunc_148',['constr_func',['../structtram_1_1_scriptable_type_1_1_scriptable_type_info.html#a54731a0f6990e3594ea9973b38848e1f',1,'tram::ScriptableType::ScriptableTypeInfo']]], ['constructor_149',['constructor',['../structtram_1_1_entity_type_info.html#a6f02871ebb50c56b606338eb05d0e11f',1,'tram::EntityTypeInfo']]], ['containers_150',['containers',['../namespacetram_1_1_ext_1_1_kitchensink.html#aaea789ed77d5f63e8cfe9f4ca2a4ac42',1,'tram::Ext::Kitchensink']]], ['containsentity_151',['ContainsEntity',['../classtram_1_1_render_1_1_light_graph.html#a5d61946d71fd0b3765492c2f7b5d4e58',1,'tram::Render::LightGraph']]], ['context_5fdirect3d_152',['CONTEXT_DIRECT3D',['../namespacetram_1_1_render_1_1_a_p_i.html#a4aa628366e46526d2722302d9ce9d230a40b500f8960ee646ebd96e8d05dae86e',1,'tram::Render::API']]], ['context_5fnone_153',['CONTEXT_NONE',['../namespacetram_1_1_render_1_1_a_p_i.html#a4aa628366e46526d2722302d9ce9d230a3f5d25beb76d002f053806e9cfe529b2',1,'tram::Render::API']]], ['context_5fopengl_154',['CONTEXT_OPENGL',['../namespacetram_1_1_render_1_1_a_p_i.html#a4aa628366e46526d2722302d9ce9d230aac082f7410744614278abecf95d7ba9f',1,'tram::Render::API']]], ['context_5fsoftware_155',['CONTEXT_SOFTWARE',['../namespacetram_1_1_render_1_1_a_p_i.html#a4aa628366e46526d2722302d9ce9d230ab492cfde782a179b9019e8691e20d8ae',1,'tram::Render::API']]], ['context_5fwebgl_156',['CONTEXT_WEBGL',['../namespacetram_1_1_render_1_1_a_p_i.html#a4aa628366e46526d2722302d9ce9d230a1c61e90aa0c562e92bb6f53ee5f01160',1,'tram::Render::API']]], ['contexttype_157',['ContextType',['../namespacetram_1_1_render_1_1_a_p_i.html#a4aa628366e46526d2722302d9ce9d230',1,'tram::Render::API']]], ['continue_158',['Continue',['../classtram_1_1_animation_component.html#ad6f14c184f255d16a73dd7fb1ad3b52f',1,'tram::AnimationComponent']]], ['controller_2ecpp_159',['controller.cpp',['../controller_8cpp.html',1,'']]], ['controller_2eh_160',['controller.h',['../controller_8h.html',1,'']]], ['controllercomponent_161',['controllercomponent',['../classtram_1_1_player.html#a9a9d322035d6f80a89abf2e67337c52e',1,'tram::Player']]], ['controllercomponent_162',['ControllerComponent',['../classtram_1_1_f_p_s_controller_component.html#a9fd3c58ec8707c5995232f089e6ef91b',1,'tram::FPSControllerComponent::ControllerComponent()'],['../classtram_1_1_raycast_controller_component.html#a9fd3c58ec8707c5995232f089e6ef91b',1,'tram::RaycastControllerComponent::ControllerComponent()'],['../classtram_1_1_controller_component.html',1,'tram::ControllerComponent']]], ['coordinate_163',['coordinate',['../structtram_1_1_render_1_1_a_p_i_1_1_clip_point.html#a9358b7eaf18d3e55f16ed4837a736612',1,'tram::Render::API::ClipPoint']]], ['coords_164',['coords',['../structtram_1_1_particle_component_1_1_particle.html#abda26a74eb7cae259f526ae455d912f2',1,'tram::ParticleComponent::Particle']]], ['core_165',['CORE',['../namespacetram_1_1_system.html#a02b5e7a5340ef5ca42a650ca4d8ade65ada08d006736503d6ad767d03f59716a0',1,'tram::System']]], ['core_2ecpp_166',['core.cpp',['../core_8cpp.html',1,'']]], ['core_2eh_167',['core.h',['../core_8h.html',1,'']]], ['count_168',['count',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a5c5f6e13ed0ceddb4b4507c59db2423d',1,'tram::Ext::Kitchensink::QuestVariable::count()'],['../classtram_1_1_queue.html#aa896915df22a178fe292fc763131184c',1,'tram::Queue::count()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_item_instance.html#af357d83441c2dc2f703d809fdc3585a0',1,'tram::Ext::Kitchensink::ItemInstance::count()']]], ['crate_169',['Crate',['../classtram_1_1_crate.html#a5b3a84d80ef6d5107b4eed8b6f4a07f1',1,'tram::Crate::Crate(const SharedEntityData &, const ValueArray &)'],['../classtram_1_1_crate.html#a1a395f9988ba5ae548823524ea33da06',1,'tram::Crate::Crate(const char *nname, const char *modelname, const char *collisionmodelname, vec3 pos, vec3 rot)'],['../classtram_1_1_crate.html',1,'tram::Crate']]], ['crate_2ecpp_170',['crate.cpp',['../crate_8cpp.html',1,'']]], ['crate_2eh_171',['crate.h',['../crate_8h.html',1,'']]], ['createindexedvertexarray_172',['CreateIndexedVertexArray',['../namespacetram_1_1_render_1_1_a_p_i.html#ae22f8a73faf3d561003265a51e3ca2b3',1,'tram::Render::API']]], ['createspritearray_173',['CreateSpriteArray',['../namespacetram_1_1_render_1_1_a_p_i.html#af87e801d1160ed2235b7188a506f753d',1,'tram::Render::API']]], ['createtexture_174',['CreateTexture',['../namespacetram_1_1_render_1_1_a_p_i.html#a72ff5f43fc09f16266e3fc9ed33715af',1,'tram::Render::API']]], ['createvertexarray_175',['CreateVertexArray',['../namespacetram_1_1_render_1_1_a_p_i.html#a76f3030e7ef229bee087b336d8882232',1,'tram::Render::API']]], ['critical_5ferror_176',['CRITICAL_ERROR',['../namespacetram.html#a34ab368bc856f9bd71bfcb4f2bb86c56a195c3aaf9aee74d8d2e715f0bc8c33e5',1,'tram']]], ['crouch_177',['Crouch',['../classtram_1_1_f_p_s_controller_component.html#a44ff24373b7604e870849d286e3fe86e',1,'tram::FPSControllerComponent::Crouch()'],['../classtram_1_1_raycast_controller_component.html#a6cde78db12e923186e1d548a2ceb9d8d',1,'tram::RaycastControllerComponent::Crouch()'],['../classtram_1_1_controller_component.html#aeca250fb793765f6d36d00ef05e9f931',1,'tram::ControllerComponent::Crouch()']]], ['crouch_5fcollision_178',['crouch_collision',['../classtram_1_1_f_p_s_controller_component.html#aef3a06f85b58004fca42a4c42f5249c5',1,'tram::FPSControllerComponent']]], ['crouch_5fspeed_179',['crouch_speed',['../classtram_1_1_f_p_s_controller_component.html#ae9f922b8e4f7224dbae472337193752d',1,'tram::FPSControllerComponent::crouch_speed()'],['../classtram_1_1_raycast_controller_component.html#ac4fb92ffbcee998d0d015535549f763d',1,'tram::RaycastControllerComponent::crouch_speed()']]], ['crouching_180',['crouching',['../classtram_1_1_f_p_s_controller_component.html#a21405af6b1d6b8fda3258d50960428cb',1,'tram::FPSControllerComponent::crouching()'],['../classtram_1_1_raycast_controller_component.html#aa6bcf9e2bb535b216000806c8750f5bf',1,'tram::RaycastControllerComponent::crouching()']]], ['csize_181',['csize',['../classtram_1_1_queue.html#afa65ddd7ad10c02cefc507a06c4cbbd1',1,'tram::Queue']]], ['current_5fmonitor_182',['current_monitor',['../namespacetram_1_1_platform.html#ac2ffb1c1eceb5cc52cb771ab6f1f0b26',1,'tram::Platform']]], ['current_5fvertex_5fcount_183',['current_vertex_count',['../structtram_1_1_render_1_1_a_p_i_1_1_vertex_buffer_metadata.html#ae6f0ee162005ad6d33c0209241cce706',1,'tram::Render::API::VertexBufferMetadata']]], ['cursor_5fclick_184',['CURSOR_CLICK',['../namespacetram_1_1_u_i.html#a6ae9e156e84d2049fc1e691a10e0348fa7d5caca61a671199d777b087902542c2',1,'tram::UI::CURSOR_CLICK()'],['../namespacetram_1_1_platform_1_1_window.html#a1ed03f0da21527169589f581e55c881fa92266bf16a3d2465b5b78fc4b7657dec',1,'tram::Platform::Window::CURSOR_CLICK()']]], ['cursor_5fdefault_185',['CURSOR_DEFAULT',['../namespacetram_1_1_u_i.html#a6ae9e156e84d2049fc1e691a10e0348fae0745982afd357e57249fd3d8ccc41e2',1,'tram::UI::CURSOR_DEFAULT()'],['../namespacetram_1_1_platform_1_1_window.html#a1ed03f0da21527169589f581e55c881fa4ef504a754ec99acfe83324f48f35131',1,'tram::Platform::Window::CURSOR_DEFAULT()']]], ['cursor_5ftext_186',['CURSOR_TEXT',['../namespacetram_1_1_u_i.html#a6ae9e156e84d2049fc1e691a10e0348fa038670b3ea8b7062e29f83da791209dd',1,'tram::UI::CURSOR_TEXT()'],['../namespacetram_1_1_platform_1_1_window.html#a1ed03f0da21527169589f581e55c881fad289a01bac20159f7b9ce592364b5f0c',1,'tram::Platform::Window::CURSOR_TEXT()']]], ['cursor_5fx_187',['cursor_x',['../structtram_1_1_g_u_i_1_1_frame_object.html#a0262f15becf5e99247d3cdf051548501',1,'tram::GUI::FrameObject']]], ['cursor_5fy_188',['cursor_y',['../structtram_1_1_g_u_i_1_1_frame_object.html#adced63c254bc9b79b3f1d2ad5f07943e',1,'tram::GUI::FrameObject']]], ['cursorover_189',['CursorOver',['../namespacetram_1_1_g_u_i.html#a4e023aaf6835da7993924f1796035f0c',1,'tram::GUI']]], ['cursorpos_190',['CURSORPOS',['../structtram_1_1_event.html#a569d6673fa83d2a5ec86b3d0c36c8765a84ac6f8e04f99e15f7ca86f4e40ccffd',1,'tram::Event']]], ['cursortype_191',['CursorType',['../namespacetram_1_1_u_i.html#a6ae9e156e84d2049fc1e691a10e0348f',1,'tram::UI::CursorType()'],['../namespacetram_1_1_platform_1_1_window.html#a1ed03f0da21527169589f581e55c881f',1,'tram::Platform::Window::CursorType()']]], ['cycles_5fsince_5flast_5fhit_192',['cycles_since_last_hit',['../structtram_1_1_audio_1_1_spatial_1_1_path_exploration_result.html#aebc3bf33c046d283ef6fe0b83a8e73ff',1,'tram::Audio::Spatial::PathExplorationResult::cycles_since_last_hit()'],['../structtram_1_1_audio_1_1_spatial_1_1_path_tracing_result.html#a4f0cda1076cd190d46c1a0f03e9f9f44',1,'tram::Audio::Spatial::PathTracingResult::cycles_since_last_hit()']]], ['cylinder_193',['Cylinder',['../structtram_1_1_physics_1_1_collision_shape.html#a16a7c9a700bb8498cdc70e4b57e1c248',1,'tram::Physics::CollisionShape']]] ]; ================================================ FILE: docs/cppapi/search/all_4.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/all_4.js ================================================ var searchData= [ ['d3d_0',['d3d',['../structtram_1_1_render_1_1material__t.html#a8fb78cd8900865b9c344ca0a026e15d5',1,'tram::Render::material_t::d3d()'],['../structtram_1_1_render_1_1light__t.html#a79b25b22803214088591ba7e3f9816d5',1,'tram::Render::light_t::d3d()'],['../structtram_1_1_render_1_1drawlistentry__t.html#acb9edd62e1b55899b00774b19239001a',1,'tram::Render::drawlistentry_t::d3d()']]], ['d3d_5findex_5fbuffer_1',['d3d_index_buffer',['../structtram_1_1_render_1_1indexarray__t.html#a0446d36e56fb1aefc070c9b5b0ee64a3',1,'tram::Render::indexarray_t']]], ['d3d_5fmetadata_2',['d3d_metadata',['../structtram_1_1_render_1_1vertexarray__t.html#ace7fc23faf01f8916c670a611c9997be',1,'tram::Render::vertexarray_t']]], ['d3d_5ftexture_5fhandle_3',['d3d_texture_handle',['../structtram_1_1_render_1_1texturehandle__t.html#a52a3d65c111609ceea98acc5efcd735e',1,'tram::Render::texturehandle_t']]], ['d3d_5fvertex_5fbuffer_4',['d3d_vertex_buffer',['../structtram_1_1_render_1_1vertexarray__t.html#a5f4fecb59b0b4c52b656d6bf8f8a5f8e',1,'tram::Render::vertexarray_t']]], ['d3ddrawlistentry_5',['D3DDrawListEntry',['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html',1,'tram::Render::API']]], ['d3dlight_6',['D3DLight',['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_light.html',1,'tram::Render::API']]], ['data_7',['data',['../structtram_1_1_signal.html#ae11edb11f1051d538fd09157108bed26',1,'tram::Signal::data()'],['../structtram_1_1_event.html#a877f4911d3811c501fdb4841aae78d10',1,'tram::Event::data()'],['../structtram_1_1_listener_info.html#aa652abf363801df8691b1700d5531af0',1,'tram::ListenerInfo::data()'],['../structtram_1_1_audio_1_1_spatial_1_1_audio_buffer.html#a88c6843050757be44715ec68be75aee7',1,'tram::Audio::Spatial::AudioBuffer::data()'],['../structtram_1_1_message.html#af2dcffd8b7a243a909af718abcac4925',1,'tram::Message::data()'],['../structtram_1_1_octree_1_1_node.html#ae7e2eb79df26b8c7877defbe17d2e8eb',1,'tram::Octree::Node::data()'],['../structtram_1_1_render_1_1_a_a_b_b_1_1_query_response.html#aee216817295b389fd464292129006984',1,'tram::Render::AABB::QueryResponse::data()']]], ['data_5ffunction_8',['data_function',['../structtram_1_1_listener_info.html#a2e4f01f36470ce06dd3565b51838a722',1,'tram::ListenerInfo']]], ['data_5fint_9',['data_int',['../structtram_1_1_event.html#a6f907880059f690671dda82db28439f5',1,'tram::Event::data_int()'],['../structtram_1_1_message.html#aa694cba3fcc077563b3d47e36a818494',1,'tram::Message::data_int()']]], ['data_5fpointer_10',['data_pointer',['../classtram_1_1_physics_1_1_a_p_i_1_1_callback_motion_state.html#ae865860d86b2764693cf6e37a49c7d97',1,'tram::Physics::API::CallbackMotionState']]], ['data_5fvalue_11',['data_value',['../structtram_1_1_event.html#ac2c8fdcc08e45feb8b90b6899e69e319',1,'tram::Event::data_value()'],['../structtram_1_1_message.html#af0bef4c3d63c5908c15440636071d25d',1,'tram::Message::data_value()']]], ['debug_2ecpp_12',['debug.cpp',['../debug_8cpp.html',1,'']]], ['debug_2eh_13',['debug.h',['../debug_8h.html',1,'']]], ['debug_5fdraw_14',['DEBUG_DRAW',['../classtram_1_1_world_cell.html#a90b9ed6e3265fb6b3e569669117fd514a53db64208d71f275b14f759d1371d326',1,'tram::WorldCell']]], ['debug_5fmenu_15',['debug_menu',['../namespacetram_1_1_ext_1_1_menu.html#a97df158550c8ac0179e812214570003b',1,'tram::Ext::Menu']]], ['debugdraw_16',['debugDraw',['../classtram_1_1_physics_1_1_path_action.html#a8dce3b286d6b2e756a8b9890bf9d9992',1,'tram::Physics::PathAction']]], ['debugdrawer_2eh_17',['debugdrawer.h',['../debugdrawer_8h.html',1,'']]], ['debugdrawtree_18',['DebugDrawTree',['../namespacetram_1_1_render_1_1_a_a_b_b.html#ad017e45f12e6ac18dfa2417e462525ef',1,'tram::Render::AABB']]], ['debugmenu_19',['DebugMenu',['../classtram_1_1_ext_1_1_menu_1_1_debug_menu.html',1,'tram::Ext::Menu']]], ['debugmenue_20',['DebugMenue',['../namespacetram_1_1_ext_1_1_menu.html#afe05ec9db55f3311aea523260dcf8db7',1,'tram::Ext::Menu']]], ['debugshape_21',['DebugShape',['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_shape.html#a20bdf86907cd7ccadbffa94d53dfac0d',1,'tram::Ext::Kitchensink::DebugShape::DebugShape()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_shape.html',1,'tram::Ext::Kitchensink::DebugShape']]], ['debugtext_22',['DebugText',['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_text.html#a9246c8960e6ae16f5c13bcb030d2608a',1,'tram::Ext::Kitchensink::DebugText::DebugText()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_text.html',1,'tram::Ext::Kitchensink::DebugText']]], ['debugtext_5fentry_23',['debugtext_entry',['../namespacetram_1_1_render.html#a2e1e2410b7586fbd9fcc9ac537f6b58c',1,'tram::Render']]], ['debugtext_5fvertex_5farray_24',['debugtext_vertex_array',['../namespacetram_1_1_render.html#aef5acbc59557fb9733ae605596cb9ab4',1,'tram::Render']]], ['decal_2ecpp_25',['decal.cpp',['../decal_8cpp.html',1,'']]], ['decal_2eh_26',['decal.h',['../decal_8h.html',1,'']]], ['decalcomponent_27',['DecalComponent',['../classtram_1_1_decal_component.html#a86fa64e28b7c9c0784be77892022a96d',1,'tram::DecalComponent::DecalComponent()'],['../classtram_1_1_decal_component.html',1,'tram::DecalComponent']]], ['decoration_28',['Decoration',['../classtram_1_1_decoration.html#a80442c970e96a9d3ec14046048833d87',1,'tram::Decoration::Decoration()'],['../classtram_1_1_decoration.html',1,'tram::Decoration']]], ['decoration_2ecpp_29',['decoration.cpp',['../decoration_8cpp.html',1,'']]], ['decoration_2eh_30',['decoration.h',['../decoration_8h.html',1,'']]], ['decoration_5fflags_31',['decoration_flags',['../classtram_1_1_decoration.html#a1d99378203e46938e612013702b092d6',1,'tram::Decoration']]], ['default_32',['DEFAULT',['../namespacetram.html#a34ab368bc856f9bd71bfcb4f2bb86c56a5b39c8b553c821e7cddc6da64b5bd2ee',1,'tram']]], ['default_5fcompartment_33',['default_compartment',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a153ebc85b2da1604a680fc0556f54578',1,'tram::Ext::Kitchensink::ItemClass']]], ['definition_34',['definition',['../structtram_1_1_render_1_1_registered_vertex_definition.html#a6838d38a4634cb93fb1b8def21470fa0',1,'tram::Render::RegisteredVertexDefinition']]], ['definitions_2eh_35',['definitions.h',['../definitions_8h.html',1,'']]], ['delay_36',['delay',['../structtram_1_1_signal.html#ac598b7c14aded31cbd9b2eedb4e5dfe0',1,'tram::Signal']]], ['delete_37',['Delete',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory_manager.html#af3c70682b3ed7f666e4170aa14a1fea0',1,'tram::Ext::Kitchensink::InventoryManager::Delete()'],['../classtram_1_1_pool_proxy.html#a0565709eb51102242ceb5488fc66f8ff',1,'tram::PoolProxy::Delete()']]], ['deleted_38',['DELETED',['../classtram_1_1_entity.html#aaed86a9cc626eeab1796509f702ff378a755858b0f8f5109a99faab0024d3606d',1,'tram::Entity']]], ['deletelight_39',['DeleteLight',['../namespacetram_1_1_render_1_1_a_p_i.html#acf65aad3d61388081cff7f81c92368a4',1,'tram::Render::API']]], ['deletematerial_40',['DeleteMaterial',['../namespacetram_1_1_render_1_1_a_p_i.html#a26c75429ce3913f26e9df148750d4716',1,'tram::Render::API']]], ['deprecated_20list_41',['Deprecated List',['../deprecated.html',1,'']]], ['depth_42',['depth',['../structtram_1_1_render_1_1_a_p_i_1_1_point2_d.html#a990ab3ba3b03564739d41f9645cd2f30',1,'tram::Render::API::Point2D']]], ['derp_43',['derp',['../main_8cpp.html#a8bb2bbfa377225bdc2575d60f73eb24d',1,'main.cpp']]], ['derp_5fplayer_44',['derp_player',['../main_8cpp.html#a705d8710b0919174ceba4c291f26824b',1,'main.cpp']]], ['destr_5ffunc_45',['destr_func',['../structtram_1_1_scriptable_type_1_1_scriptable_type_info.html#a60e82d60aa627ae742b2092a4e0c51e9',1,'tram::ScriptableType::ScriptableTypeInfo']]], ['destructor_46',['destructor',['../structtram_1_1_entity_type_info.html#aa4106992bfbeb9121dee27f03bc67fc2',1,'tram::EntityTypeInfo']]], ['dialog_2ecpp_47',['dialog.cpp',['../dialog_8cpp.html',1,'']]], ['dialog_2eh_48',['dialog.h',['../dialog_8h.html',1,'']]], ['dialog_5fimport_5fmultiple_49',['DIALOG_IMPORT_MULTIPLE',['../namespacetram_1_1_ext_1_1_kitchensink.html#a9ab8b667486c023b0e1defc92b807c54a1f9c9efebeaf5ae87702e8d7f0e857f1',1,'tram::Ext::Kitchensink']]], ['dialog_5fimport_5fsingle_50',['DIALOG_IMPORT_SINGLE',['../namespacetram_1_1_ext_1_1_kitchensink.html#a9ab8b667486c023b0e1defc92b807c54aa7241fe428070fbc73d0d87ee7d667bd',1,'tram::Ext::Kitchensink']]], ['dialog_5ftopic_51',['DIALOG_TOPIC',['../namespacetram_1_1_ext_1_1_kitchensink.html#a9ab8b667486c023b0e1defc92b807c54a40a60c2f1361e5bbf88a083d32560ed5',1,'tram::Ext::Kitchensink']]], ['dialogaction_52',['DialogAction',['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_action.html',1,'tram::Ext::Kitchensink']]], ['dialogcondition_53',['DialogCondition',['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_condition.html',1,'tram::Ext::Kitchensink']]], ['dialogcontroller_54',['DialogController',['../classtram_1_1_ext_1_1_kitchensink_1_1_dialog_controller.html#ab13380e0377c25667f57e127f1971ae7',1,'tram::Ext::Kitchensink::DialogController::DialogController()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_dialog_controller.html',1,'tram::Ext::Kitchensink::DialogController']]], ['dialogtopic_55',['DialogTopic',['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_topic.html',1,'tram::Ext::Kitchensink']]], ['dialogtype_56',['DialogType',['../namespacetram_1_1_ext_1_1_kitchensink.html#a9ab8b667486c023b0e1defc92b807c54',1,'tram::Ext::Kitchensink']]], ['dimensions_57',['dimensions',['../structtram_1_1_render_1_1_sprite_point.html#ae43f9f3709a9cf44fb321dee4b2c336a',1,'tram::Render::SpritePoint']]], ['dingbat_58',['dingbat',['../main_8cpp.html#a39e40a8e7cee2dd7c112dcd36fe20cb6',1,'main.cpp']]], ['direct3d_2eh_59',['direct3d.h',['../direct3d_8h.html',1,'']]], ['direction_60',['direction',['../classtram_1_1_light.html#ab4a742307b9c463eef63115ad3b19ae3',1,'tram::Light::direction()'],['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_light.html#aead638bd05a0ed7dc438c22814381fd5',1,'tram::Render::API::D3DLight::direction()'],['../classtram_1_1_path_follower.html#ab026659adb3008a000bb00753cc74e07',1,'tram::PathFollower::direction()'],['../classtram_1_1_light_component.html#ae3d891ff89275a995fddeda744b085cf',1,'tram::LightComponent::direction()'],['../structtram_1_1_audio_1_1_spatial_1_1_path_from_audio_source.html#a0daad3712479c354367bbb338368f6a7',1,'tram::Audio::Spatial::PathFromAudioSource::direction()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a96280d02e43933a1164d053405b673b1',1,'tram::Ext::Kitchensink::Button::direction()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_light.html#a58b24ce258b313935592f59caa960391',1,'tram::Render::API::GLLight::direction()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_light.html#ae2ce38d13d603acace4061af8a68e421',1,'tram::Render::API::SWLight::direction()']]], ['direction_5fforward_61',['DIRECTION_FORWARD',['../namespacetram.html#acc61b04dbad891d3eb08e0b5eb842395',1,'tram']]], ['direction_5fside_62',['DIRECTION_SIDE',['../namespacetram.html#a03a6f88b2cb4818644b5f1fe7e7e3511',1,'tram']]], ['direction_5fup_63',['DIRECTION_UP',['../namespacetram.html#ac7e1cf0d1d50c4b3afaac5727d3f5680',1,'tram']]], ['dirty_64',['DIRTY',['../classtram_1_1_entity.html#aaed86a9cc626eeab1796509f702ff378af7284fe296d74a18b12dab1faee25e7e',1,'tram::Entity']]], ['disable_5fauto_5fload_65',['DISABLE_AUTO_LOAD',['../classtram_1_1_entity.html#aaed86a9cc626eeab1796509f702ff378a1f8b96cb9a0642c1ce332e10d9b01152',1,'tram::Entity']]], ['disablecursor_66',['DisableCursor',['../namespacetram_1_1_platform_1_1_window.html#a4172bf310d20904476bbdd69dedc2947',1,'tram::Platform::Window']]], ['disabledeactivation_67',['DisableDeactivation',['../classtram_1_1_physics_component.html#acad64c1b68c2f78fa2febef09e8f393a',1,'tram::PhysicsComponent']]], ['disablerigidbodydeactivation_68',['DisableRigidbodyDeactivation',['../namespacetram_1_1_physics_1_1_a_p_i.html#a5bc20f737d7d6dae2bb8a8c768b04cb7',1,'tram::Physics::API']]], ['disk_69',['DISK',['../namespacetram.html#a529c8d3e049a7dcc4425fbe040e4c531a290d4b81f4e2b47d86fd1b0170e9aab7',1,'tram']]], ['diskreader_70',['DiskReader',['../classtram_1_1_disk_reader.html#a565638ef66be9c7cd05200056762cc30',1,'tram::DiskReader::DiskReader()'],['../classtram_1_1_disk_reader.html',1,'tram::DiskReader']]], ['diskwriter_71',['DiskWriter',['../classtram_1_1_disk_writer.html#ad12321c26492fcaef43740bf21120d25',1,'tram::DiskWriter::DiskWriter()'],['../classtram_1_1_disk_writer.html',1,'tram::DiskWriter']]], ['dispatch_72',['Dispatch',['../structtram_1_1_event.html#a1d1f19efb6907f2fd3eccc398dd2a9f3',1,'tram::Event::Dispatch()'],['../structtram_1_1_message.html#aa148e227c8da865e87f8122c0f4ab41a',1,'tram::Message::Dispatch()']]], ['display_73',['Display',['../classtram_1_1_ext_1_1_menu_1_1_entity_picker.html#ad21501bc964c628113e9b89f396e602c',1,'tram::Ext::Menu::EntityPicker::Display()'],['../classtram_1_1_ext_1_1_menu_1_1_list_selection.html#a5f67db7b4e9fa99e969427ecee0636f6',1,'tram::Ext::Menu::ListSelection::Display()'],['../classtram_1_1_ext_1_1_menu_1_1_message_send.html#a71295df4e886a77b31a12f873b8cf5c2',1,'tram::Ext::Menu::MessageSend::Display()'],['../classtram_1_1_ext_1_1_menu_1_1_intercept_menu.html#ace624827c9bfd8ef24aa15db1c2249c3',1,'tram::Ext::Menu::InterceptMenu::Display()'],['../classtram_1_1_ext_1_1_menu_1_1_world_cell_properties.html#a10cc9429cb5dca2cfbbb12505d28acbc',1,'tram::Ext::Menu::WorldCellProperties::Display()'],['../classtram_1_1_ext_1_1_menu_1_1_statistics_menu.html#a397886851d7cc3d304c552a8807e0596',1,'tram::Ext::Menu::StatisticsMenu::Display()'],['../classtram_1_1_ext_1_1_menu_1_1_event_emit.html#a62ff56e1969bb2b7cdd49446f8688de2',1,'tram::Ext::Menu::EventEmit::Display()'],['../classtram_1_1_ext_1_1_menu_1_1_signal_menu.html#af2d0156404c23e79e3700b2cb0936282',1,'tram::Ext::Menu::SignalMenu::Display()'],['../classtram_1_1_ext_1_1_menu_1_1_options.html#a2987ac69185cc8573e00557bcc8eda86',1,'tram::Ext::Menu::Options::Display()'],['../classtram_1_1_ext_1_1_menu_1_1_console.html#aae32f9a7938c628c698659957609cd7c',1,'tram::Ext::Menu::Console::Display()'],['../classtram_1_1_ext_1_1_menu_1_1_menu.html#a99db3585e61c0c71f99ef8637edce775',1,'tram::Ext::Menu::Menu::Display()'],['../classtram_1_1_ext_1_1_menu_1_1_system_menu.html#aebef9f1ed425a93b52230f3d176a765a',1,'tram::Ext::Menu::SystemMenu::Display()'],['../classtram_1_1_ext_1_1_menu_1_1_settings_menu.html#a629fd955067640b30e849692d1eb5cfb',1,'tram::Ext::Menu::SettingsMenu::Display()'],['../structtram_1_1_ext_1_1_menu_1_1_log_intercept.html#ad70ddb5580e8cb9c2203f873bf006f15',1,'tram::Ext::Menu::LogIntercept::Display()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_list_dialog.html#a95629efafbccd335e434a1c97b9c6d21',1,'tram::Ext::Kitchensink::ListDialog::Display()'],['../structtram_1_1_ext_1_1_menu_1_1_intercept.html#a895d3bf8867a84c9001e51b5e0601539',1,'tram::Ext::Menu::Intercept::Display()'],['../structtram_1_1_ext_1_1_menu_1_1_message_intercept.html#aba89a9144dabfeaa8946944f3489ad3a',1,'tram::Ext::Menu::MessageIntercept::Display()'],['../structtram_1_1_ext_1_1_menu_1_1_event_intercept.html#a01e67c6d1a67bd394e8f74816eb1b924',1,'tram::Ext::Menu::EventIntercept::Display()'],['../classtram_1_1_ext_1_1_menu_1_1_debug_menu.html#a18c5d317ba9354cd41742e98fc2f723d',1,'tram::Ext::Menu::DebugMenu::Display()'],['../classtram_1_1_ext_1_1_menu_1_1_entity_properties.html#af4c550343edb9f75ef00d1b15e66636e',1,'tram::Ext::Menu::EntityProperties::Display()']]], ['displaylog_74',['DisplayLog',['../namespacetram.html#aafb9d3143cd13b2e8267161ce4813fce',1,'tram']]], ['disposition_75',['disposition',['../structtram_1_1_ext_1_1_kitchensink_1_1_character_disposition.html#a6f7910b8365a22cfa1b26fc7927df5f7',1,'tram::Ext::Kitchensink::CharacterDisposition::disposition()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_faction_relation.html#a2036e1b6447ae394e0a9e429f744e765',1,'tram::Ext::Kitchensink::FactionRelation::disposition()']]], ['dispositions_76',['dispositions',['../classtram_1_1_ext_1_1_kitchensink_1_1_character.html#a3bb575e1785d96a33747804dc658bffc',1,'tram::Ext::Kitchensink::Character']]], ['distance_77',['distance',['../structtram_1_1_physics_1_1_collision.html#ae80a8d88309f42e12b2fa84e0e8809a8',1,'tram::Physics::Collision::distance()'],['../structtram_1_1_render_1_1_light_tree_1_1_light.html#ae6f7549b89b1f8e6fd5a6c6c8c37f858',1,'tram::Render::LightTree::Light::distance()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_light.html#a99216bd4b9cc9d114f1a17f41d77faab',1,'tram::Render::API::GLLight::distance()'],['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_light.html#a67a2716e3f6f00f40642d9db82569271',1,'tram::Render::API::D3DLight::distance()'],['../structtram_1_1_octree_1_1_nearest_search.html#aa6bbbfe8160af656016aa78c0fb106f2',1,'tram::Octree::NearestSearch::distance()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_light.html#a9068a6c1a70d5227827ec2d85e8c1c67',1,'tram::Render::API::SWLight::distance()'],['../structtram_1_1_physics_1_1_a_p_i_1_1_object_collision.html#ab97dd0b0dde2624c20f0b1c9551d91ad',1,'tram::Physics::API::ObjectCollision::distance()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a07df9007e2a4fa2938fe69f78e2db2c0',1,'tram::Ext::Kitchensink::Button::distance()'],['../classtram_1_1_light.html#a8ebcbf936a12dbcef52e33fe7efe4653',1,'tram::Light::distance()'],['../classtram_1_1_light_component.html#a97341de0a9ff1c7ebd0d9ae721af0bac',1,'tram::LightComponent::distance()'],['../structtram_1_1_audio_1_1_spatial_1_1_path_tracing_result.html#abf8c49606dda008b43d5035691a72549',1,'tram::Audio::Spatial::PathTracingResult::distance()']]], ['distance_5fdelay_78',['distance_delay',['../structtram_1_1_audio_1_1_spatial_1_1_path_rendering_info.html#ae2caac1002a91fa0d362a3edbf3cb45e',1,'tram::Audio::Spatial::PathRenderingInfo']]], ['draw_79',['Draw',['../classtram_1_1_octree.html#a687c55bafdd80a22f550de2cbb1a8197',1,'tram::Octree::Draw()'],['../classtram_1_1_path.html#aa5f2edca27bfb5eccec30976a3bb9b29',1,'tram::Path::Draw()'],['../classtram_1_1_octree.html#a03a71d1c84b4b3408a2929859a386d38',1,'tram::Octree::Draw()']]], ['draw3dtext_80',['draw3dText',['../classtram_1_1_physics_1_1_a_p_i_1_1_physics_debug_draw.html#abee77254ff778ce50a428302815f0e3c',1,'tram::Physics::API::PhysicsDebugDraw']]], ['draw_5flist_81',['draw_list',['../namespacetram_1_1_render_1_1_a_p_i.html#a9ee5db9b2d1a8b354779f2a611792671',1,'tram::Render::API']]], ['draw_5flist_5fentries_82',['draw_list_entries',['../classtram_1_1_render_component.html#a593b1a595fd07f68a4c4aa3fdfeb33c4',1,'tram::RenderComponent']]], ['draw_5flist_5fentry_83',['draw_list_entry',['../classtram_1_1_decal_component.html#a3e8165999c84aaa7af2d92e22b0e19cf',1,'tram::DecalComponent::draw_list_entry()'],['../classtram_1_1_sprite_component.html#ab8df644a8df43af1ffdf9de7ce156ac8',1,'tram::SpriteComponent::draw_list_entry()'],['../classtram_1_1_particle_component.html#ac7bc366fee1d155a6f7f60ca1c7474cc',1,'tram::ParticleComponent::draw_list_entry()']]], ['draw_5frender_5fdebug_84',['DRAW_RENDER_DEBUG',['../namespacetram_1_1_render.html#a0328476aed6f9a79b37ead38c539d30b',1,'tram::Render']]], ['drawaabb_85',['DrawAABB',['../classtram_1_1_render_1_1_model.html#a1154b475ba52ad0bcae60926b9a1a014',1,'tram::Render::Model']]], ['drawbox_86',['DrawBox',['../namespacetram_1_1_g_u_i.html#a8712e4716acb1c5eab60d40112c81d88',1,'tram::GUI']]], ['drawboxhorizontal_87',['DrawBoxHorizontal',['../namespacetram_1_1_g_u_i.html#aaf5392e3e82d599804ba655dc2bba32c',1,'tram::GUI']]], ['drawcontactpoint_88',['drawContactPoint',['../classtram_1_1_physics_1_1_a_p_i_1_1_physics_debug_draw.html#afe6a8f72a58739c6ea26e3312b813cdd',1,'tram::Physics::API::PhysicsDebugDraw']]], ['drawdebug_89',['DrawDebug',['../namespacetram_1_1_physics_1_1_a_p_i.html#a1acb48d6ea2049b83205bbab3dc594e7',1,'tram::Physics::API::DrawDebug()'],['../namespacetram_1_1_physics_1_1_a_p_i.html#a11e3876e4d86bc1c3b68d5d35c08ced6',1,'tram::Physics::API::DrawDebug(bool)']]], ['drawglyph_90',['DrawGlyph',['../namespacetram_1_1_g_u_i.html#a15d7e1006b2983a29f7f63f7dc2a6e73',1,'tram::GUI']]], ['drawline_91',['drawLine',['../classtram_1_1_physics_1_1_a_p_i_1_1_physics_debug_draw.html#adae82b61c61a54f3b62cdd0499b9cb44',1,'tram::Physics::API::PhysicsDebugDraw']]], ['drawlist_2ecpp_92',['drawlist.cpp',['../drawlist_8cpp.html',1,'']]], ['drawlist_2eh_93',['drawlist.h',['../drawlist_8h.html',1,'']]], ['drawlistentry_5ft_94',['drawlistentry_t',['../structtram_1_1_render_1_1drawlistentry__t.html',1,'tram::Render']]], ['dynamic_5fvertex_5ffvf_95',['DYNAMIC_VERTEX_FVF',['../namespacetram_1_1_render_1_1_a_p_i.html#a1c2a4d0725f893593398cf0a61aa69a2',1,'tram::Render::API']]], ['dynamicmodeldata_96',['DynamicModelData',['../structtram_1_1_render_1_1_dynamic_model_data.html',1,'tram::Render']]], ['dynamicmodelvertex_97',['DynamicModelVertex',['../structtram_1_1_render_1_1_dynamic_model_vertex.html',1,'tram::Render']]], ['dynamicvertex_98',['DynamicVertex',['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html',1,'tram::Render::API']]] ]; ================================================ FILE: docs/cppapi/search/all_5.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/all_5.js ================================================ var searchData= [ ['ebolen_0',['eboLen',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#a28960b58e1684771943364ceddfe4917',1,'tram::Render::API::GLDrawListEntry']]], ['ebooff_1',['eboOff',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#a865e421a077ef2c6fafe376311afe40a',1,'tram::Render::API::GLDrawListEntry']]], ['edge_2',['Edge',['../structtram_1_1_edge.html',1,'tram']]], ['edge_5finfos_3',['edge_infos',['../classtram_1_1_path.html#a296e431440d4a7572afa87217fd46996',1,'tram::Path']]], ['edges_4',['edges',['../classtram_1_1_render_1_1_light_graph.html#a076e24396cd1802aa4abbd69d49e1c8d',1,'tram::Render::LightGraph::edges()'],['../classtram_1_1_graph.html#a4c1e9f785fe9ac3fe2665d073f2a6722',1,'tram::Graph::edges()'],['../structtram_1_1_node.html#a28d12d5232b5f9651565664e0eae3cce',1,'tram::Node::edges()'],['../classtram_1_1_audio_1_1_sound_graph.html#a6862a1fe3026f98bafee3fc0cf8c465e',1,'tram::Audio::SoundGraph::edges()']]], ['eerp_5',['eerp',['../main_8cpp.html#ad4a7109a74a328b58d1568997f025a46',1,'main.cpp']]], ['effect_6',['Effect',['../structtram_1_1_ext_1_1_kitchensink_1_1_effect.html',1,'tram::Ext::Kitchensink']]], ['effect_5fnegate_5fchange_7',['EFFECT_NEGATE_CHANGE',['../namespacetram_1_1_ext_1_1_kitchensink.html#a6c0031a7853f40659433180bd98fb62aa09ec84b29c3ed038c814ca806a69c13b',1,'tram::Ext::Kitchensink']]], ['effect_5fraise_5fbase_8',['EFFECT_RAISE_BASE',['../namespacetram_1_1_ext_1_1_kitchensink.html#a6c0031a7853f40659433180bd98fb62aa92bb5b3112a435f52d9cee38c24cff0f',1,'tram::Ext::Kitchensink']]], ['effect_5fraise_5fconstant_9',['EFFECT_RAISE_CONSTANT',['../namespacetram_1_1_ext_1_1_kitchensink.html#a6c0031a7853f40659433180bd98fb62aa423e4ab891e299f94c62e8e47d1d0b56',1,'tram::Ext::Kitchensink']]], ['effective_5fvalue_10',['effective_value',['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute.html#a9bccf3052c467ffcd74f2d542dfa7112',1,'tram::Ext::Kitchensink::Attribute']]], ['effects_11',['effects',['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container.html#a71f44dcd6e534fd2366ee31be69497ae',1,'tram::Ext::Kitchensink::AttributeContainer::effects()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#ad45de9b346dd461a8529e23a44e0dde4',1,'tram::Ext::Kitchensink::ItemClass::effects()']]], ['emission_5frate_12',['emission_rate',['../classtram_1_1_particle_component.html#a1d1a56c1b5c8ce7539663dba1d485c32',1,'tram::ParticleComponent']]], ['emitparticle_13',['EmitParticle',['../classtram_1_1_particle_component.html#a154e0103510b6ba7bfe4e0c5109bb420',1,'tram::ParticleComponent']]], ['emitter_14',['emitter',['../structtram_1_1_ext_1_1_menu_1_1_event_intercept.html#a4e5f06420a95be438108f03861401004',1,'tram::Ext::Menu::EventIntercept']]], ['empty_15',['Empty',['../classtram_1_1_ext_1_1_menu_1_1_menu.html#a8dc18857f173b127ee34a3fd65306d9f',1,'tram::Ext::Menu::Menu']]], ['enablecursor_16',['EnableCursor',['../namespacetram_1_1_platform_1_1_window.html#a2079845fb32cb1e0a7a65742f381a567',1,'tram::Platform::Window']]], ['enabled_17',['enabled',['../classtram_1_1_raycast_controller_component.html#aa5342f7e4fb16df60863ed8831887d75',1,'tram::RaycastControllerComponent']]], ['end_18',['end',['../classtram_1_1_pool.html#a4916bb192a24754ced8b7e712dd55107',1,'tram::Pool::end()'],['../structtram_1_1_render_1_1_a_p_i_1_1_scanline.html#a4d94aa4b204cb90a9455e131a24e3909',1,'tram::Render::API::Scanline::end()']]], ['end_19',['End',['../namespacetram_1_1_g_u_i.html#a7eb89f38a5f8e51434e7fdc3c21245e1',1,'tram::GUI']]], ['end_20',['end',['../classtram_1_1_stack_pool.html#abd79d28bc444c59c3a1435e7580a3498',1,'tram::StackPool']]], ['end_5fadv_21',['end_adv',['../structtram_1_1_render_1_1_a_p_i_1_1_scanline.html#ab5319d20339ecf03164380c91dbbdb33',1,'tram::Render::API::Scanline']]], ['end_5fclose_22',['END_CLOSE',['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6a220403760a74088dbd4275cec3bbd9d2',1,'tram::Signal']]], ['end_5fopen_23',['END_OPEN',['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6a36ae2c817312031d045362ee51b2933f',1,'tram::Signal']]], ['end_5fp0_24',['end_p0',['../structtram_1_1_render_1_1_a_p_i_1_1_scanline.html#aa91f1dea5fe7fb9dd33fd4f0533bfc49',1,'tram::Render::API::Scanline']]], ['end_5fp1_25',['end_p1',['../structtram_1_1_render_1_1_a_p_i_1_1_scanline.html#aca649d2fe5fff4af41971c73edca2e1c',1,'tram::Render::API::Scanline']]], ['end_5ftest_26',['END_TEST',['../test_8h.html#aefcd1ca1799d2395f7bbe3c50bcc8ff8',1,'test.h']]], ['endframe_27',['EndFrame',['../namespacetram_1_1_u_i.html#a303b8e17aa7e0dff5839a0b1ab33d391',1,'tram::UI']]], ['enter_5ftrigger_28',['ENTER_TRIGGER',['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6a8e4d860c423ec5e375a1f45c182f402c',1,'tram::Signal']]], ['entities_29',['entities',['../classtram_1_1_world_cell.html#a2c0e438bdf14ec661b99ce78df3a6e22',1,'tram::WorldCell::entities()'],['../classtram_1_1_render_1_1_light_graph.html#a5ecc9ba96984a2e7fc95704c46b98049',1,'tram::Render::LightGraph::entities()']]], ['entities_2ecpp_30',['entities.cpp',['../entities_8cpp.html',1,'']]], ['entities_2eh_31',['entities.h',['../entities_8h.html',1,'']]], ['entity_32',['Entity',['../classtram_1_1_entity.html#a5cd683c73f9413ca09d5417c550eaf3d',1,'tram::Entity::Entity()'],['../classtram_1_1_entity.html#ab2c160e37d196c3a8f7224adbe282f8e',1,'tram::Entity::Entity(name_t name)'],['../classtram_1_1_entity.html#aae1750f202fa57bb040126c1d8af0b80',1,'tram::Entity::Entity(const SharedEntityData &)']]], ['entity_33',['entity',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a6cbf029ca43aa8a9780b4beb654d65be',1,'tram::Ext::Kitchensink::QuestVariable::entity()'],['../classtram_1_1_ext_1_1_menu_1_1_entity_properties.html#acf1bf7e593e36cb4b389c6632623b0e3',1,'tram::Ext::Menu::EntityProperties::entity()'],['../structtram_1_1_listener_info.html#a91672b06dda91ac838e8f21fa43afb32',1,'tram::ListenerInfo::entity()']]], ['entity_34',['Entity',['../classtram_1_1_entity.html',1,'tram']]], ['entity_2ecpp_35',['entity.cpp',['../entity_8cpp.html',1,'']]], ['entity_2eh_36',['entity.h',['../entity_8h.html',1,'']]], ['entity_5fclear_37',['entity_clear',['../namespacetram.html#acb6f2c041e69a847713e8d29f66dc58b',1,'tram']]], ['entity_5fid_38',['entity_id',['../classtram_1_1_ext_1_1_menu_1_1_signal_menu.html#a1b88163f3d0384c8d005d5457a75c923',1,'tram::Ext::Menu::SignalMenu::entity_id()'],['../classtram_1_1_ext_1_1_menu_1_1_message_send.html#a4a0c4f4d89dead8b68cdf556558bf446',1,'tram::Ext::Menu::MessageSend::entity_id()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_character.html#a9d2a11a8e15e555048c4c5213023ce32',1,'tram::Ext::Kitchensink::Character::entity_id()']]], ['entity_5flimit_39',['ENTITY_LIMIT',['../namespacetram.html#a0ddcd411f4af0e1052aa1c3341eb7e4d',1,'tram']]], ['entity_5fmake_40',['entity_make',['../namespacetram.html#a5f7e406660923fb9a2cc0a8628fa0c3d',1,'tram']]], ['entity_5ftype_5flimit_41',['ENTITY_TYPE_LIMIT',['../namespacetram.html#aa3d5c2a5f250a9d674df10bdfa5904d2',1,'tram']]], ['entitychildren_42',['EntityChildren',['../structtram_1_1_ext_1_1_kitchensink_1_1_entity_children.html',1,'tram::Ext::Kitchensink']]], ['entitycomponent_43',['EntityComponent',['../classtram_1_1_entity_component.html#a407901dc86e2eeb0b594d3730081f3e8',1,'tram::EntityComponent::EntityComponent()'],['../classtram_1_1_entity_component.html',1,'tram::EntityComponent']]], ['entitycomponent_2ecpp_44',['entitycomponent.cpp',['../entitycomponent_8cpp.html',1,'']]], ['entitycomponent_2eh_45',['entitycomponent.h',['../entitycomponent_8h.html',1,'']]], ['entitypicker_46',['EntityPicker',['../classtram_1_1_ext_1_1_menu_1_1_entity_picker.html#ab1f5eb1fcacb7e7e21312fca561f48af',1,'tram::Ext::Menu::EntityPicker::EntityPicker()'],['../classtram_1_1_ext_1_1_menu_1_1_entity_picker.html',1,'tram::Ext::Menu::EntityPicker']]], ['entityproperties_47',['EntityProperties',['../classtram_1_1_ext_1_1_menu_1_1_entity_properties.html',1,'tram::Ext::Menu']]], ['entitytypeinfo_48',['EntityTypeInfo',['../structtram_1_1_entity_type_info.html',1,'tram']]], ['environment_5fmap_49',['environment_map',['../structtram_1_1_render_1_1_light_graph_1_1_node.html#aee5b13a5643db5232b8a49eeafbdc3f5',1,'tram::Render::LightGraph::Node']]], ['environmentmap_50',['environmentmap',['../classtram_1_1_render_component.html#ae8e60fbf5d87ba817101190869396393',1,'tram::RenderComponent::environmentmap()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#aaf126029f650661e7a83c6a054f57308',1,'tram::Render::API::GLDrawListEntry::environmentmap()']]], ['equipitem_51',['EquipItem',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#a0d4285f55bb35f3df054086b8433be71',1,'tram::Ext::Kitchensink::Inventory']]], ['equipped_52',['equipped',['../structtram_1_1_ext_1_1_kitchensink_1_1_item_instance.html#a8a5bc739c95aa6b49e82d5b4325d250f',1,'tram::Ext::Kitchensink::ItemInstance::equipped()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#a8cd3c4606f66405f417609f1c45e9e78',1,'tram::Ext::Kitchensink::Inventory::equipped()']]], ['equipped_5fslot_53',['equipped_slot',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a13ad05e4fa0c7e16c8982ae4b2b54e25',1,'tram::Ext::Kitchensink::ItemClass']]], ['error_54',['ERROR',['../namespacetram.html#a34ab368bc856f9bd71bfcb4f2bb86c56abb1ca97ec761fc37101737ba0aa2e7c5',1,'tram']]], ['error_2ecpp_55',['error.cpp',['../error_8cpp.html',1,'']]], ['error_2eh_56',['error.h',['../error_8h.html',1,'']]], ['evaluate_57',['Evaluate',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#ad202900b3ff880d1dfd139b9e9c6029d',1,'tram::Ext::Kitchensink::QuestVariable::Evaluate()'],['../classtram_1_1_script_1_1_interface.html#ae8cde55720004d7319685163a092ca4a',1,'tram::Script::Interface::Evaluate()'],['../namespacetram_1_1_script.html#a658aaf0911ed091e1f6566375fc45142',1,'tram::Script::Evaluate()']]], ['event_58',['Event',['../structtram_1_1_event.html',1,'tram']]], ['event_2ecpp_59',['event.cpp',['../event_8cpp.html',1,'']]], ['event_2eh_60',['event.h',['../event_8h.html',1,'']]], ['event_5ft_61',['event_t',['../namespacetram.html#a0183b475d47925143ca46259ec594d90',1,'tram']]], ['event_5ftype_62',['event_type',['../classtram_1_1_ext_1_1_menu_1_1_event_emit.html#a3a3692407b1c476b25a80d299caa09a1',1,'tram::Ext::Menu::EventEmit']]], ['eventemit_63',['EventEmit',['../classtram_1_1_ext_1_1_menu_1_1_event_emit.html',1,'tram::Ext::Menu']]], ['eventhandler_64',['EventHandler',['../classtram_1_1_scriptable.html#a2ece532aab87d1570b1af751ffaf0f16',1,'tram::Scriptable::EventHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_state_component.html#af88977e10e060bf16fb2398dd127edad',1,'tram::Ext::Kitchensink::AnimationStateComponent::EventHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a328b1b451e9dabf23d90ea283bfb73bc',1,'tram::Ext::Kitchensink::Button::EventHandler()'],['../classtram_1_1_entity.html#a2ca775133055e997ef91ac3db27f2a0a',1,'tram::Entity::EventHandler()'],['../classtram_1_1_animation_component.html#adc4711c76a0f6e6875f2e57400724f5b',1,'tram::AnimationComponent::EventHandler()'],['../classtram_1_1_audio_component.html#ac455283db7b930059f29e82905172ce8',1,'tram::AudioComponent::EventHandler()'],['../classtram_1_1_f_p_s_controller_component.html#a5c5b27f8fb2ca29b48fc4d291b71b8d3',1,'tram::FPSControllerComponent::EventHandler()'],['../classtram_1_1_raycast_controller_component.html#a3a8fb26c4de4b8c90b698f1f16ca3958',1,'tram::RaycastControllerComponent::EventHandler()'],['../classtram_1_1_decal_component.html#a8a57cc185df060416fd0d3b69cd7422d',1,'tram::DecalComponent::EventHandler()'],['../classtram_1_1_light_component.html#ac5d511b09dd704670222c89f7f4bfb40',1,'tram::LightComponent::EventHandler()'],['../classtram_1_1_particle_component.html#a7403bb854acd08f1060bf3b659d62c75',1,'tram::ParticleComponent::EventHandler()'],['../classtram_1_1_physics_component.html#a60cc1624fa5521dfcd05449e99a123d8',1,'tram::PhysicsComponent::EventHandler()'],['../classtram_1_1_entity_component.html#a596335e001ab39c1f575ece6defaf04b',1,'tram::EntityComponent::EventHandler()'],['../classtram_1_1_player_component.html#a7880e2d2d99db2ebfed2115f3682c4c8',1,'tram::PlayerComponent::EventHandler()'],['../classtram_1_1_render_component.html#a18fa5b9e63b9ef19051e0c705a19e46e',1,'tram::RenderComponent::EventHandler()'],['../classtram_1_1_sprite_component.html#a69fa78a5255a802e1975ce0a4eea868f',1,'tram::SpriteComponent::EventHandler()'],['../classtram_1_1_template_component.html#ac2eeaaa1164b1a5cbbc6f54b5ce16dc2',1,'tram::TemplateComponent::EventHandler()'],['../classtram_1_1_trigger_component.html#a1576403ad5e3fe824e53453660ba90c5',1,'tram::TriggerComponent::EventHandler()']]], ['eventintercept_65',['EventIntercept',['../structtram_1_1_ext_1_1_menu_1_1_event_intercept.html',1,'tram::Ext::Menu']]], ['eventlistener_66',['EventListener',['../classtram_1_1_event_listener.html',1,'tram']]], ['exists_67',['Exists',['../classtram_1_1_hashmap.html#a5598902c979d9635a7fa9c8b3aff4f4e',1,'tram::Hashmap::Exists(UID key)'],['../classtram_1_1_hashmap.html#a88408232bfa868c8345ed898a3a61162',1,'tram::Hashmap::Exists(uint32_t key)']]], ['exit_5ftrigger_68',['EXIT_TRIGGER',['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6a2eb75594d68f8fa95cd2101a5a3e9ee4',1,'tram::Signal']]], ['exponent_69',['exponent',['../classtram_1_1_light_component.html#af28678281fb5b2012af9bba987aaf2f4',1,'tram::LightComponent::exponent()'],['../classtram_1_1_light.html#a0b11cd3d1f0ba7c48345eb54134848c3',1,'tram::Light::exponent()'],['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_light.html#a035db274a74493fd1c49bb5c7b2229c7',1,'tram::Render::API::D3DLight::exponent()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_light.html#a0bbe7d80789eab7c5206ce463e320f3f',1,'tram::Render::API::GLLight::exponent()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_light.html#a1838c501762f397cdd64335cced1e092',1,'tram::Render::API::SWLight::exponent()']]], ['ext_5fkitchensink_5fanimationtable_5flimit_70',['EXT_KITCHENSINK_ANIMATIONTABLE_LIMIT',['../namespacetram.html#af1919b7d31f90785f9b208acbdeb8576',1,'tram']]], ['ext_5fkitchensink_5fsoundtable_5flimit_71',['EXT_KITCHENSINK_SOUNDTABLE_LIMIT',['../namespacetram.html#a16fcee576d8ededdde2fb49658013315',1,'tram']]], ['extent_5fx_72',['extent_x',['../structtram_1_1_physics_1_1_collision_shape.html#a4350269fc3bb66af08e57cc8051457c5',1,'tram::Physics::CollisionShape']]], ['extent_5fy_73',['extent_y',['../structtram_1_1_physics_1_1_collision_shape.html#aab4dbf0584616aab6910c8a070c70a26',1,'tram::Physics::CollisionShape']]], ['extent_5fz_74',['extent_z',['../structtram_1_1_physics_1_1_collision_shape.html#a863758c71ebd465cb595af8e3320f456',1,'tram::Physics::CollisionShape']]] ]; ================================================ FILE: docs/cppapi/search/all_6.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/all_6.js ================================================ var searchData= [ ['faction_0',['Faction',['../classtram_1_1_ext_1_1_kitchensink_1_1_character.html#abd70d3fa6043bc857bf6bc4d82805737',1,'tram::Ext::Kitchensink::Character']]], ['faction_1',['faction',['../structtram_1_1_ext_1_1_kitchensink_1_1_faction_relation.html#a71cc30c73f550a5fd4007bc494b44c29',1,'tram::Ext::Kitchensink::FactionRelation::faction()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_base_faction_rank.html#a68423eb013d6a0f6b2d8eed2ef4e19cf',1,'tram::Ext::Kitchensink::BaseFactionRank::faction()']]], ['faction_2',['Faction',['../classtram_1_1_ext_1_1_kitchensink_1_1_faction.html',1,'tram::Ext::Kitchensink']]], ['faction_5fcount_3',['FACTION_COUNT',['../character_8cpp.html#ae5c94b904d8f09d1f4fab73abcb58758',1,'character.cpp']]], ['factionrank_4',['FactionRank',['../structtram_1_1_ext_1_1_kitchensink_1_1_faction_rank.html',1,'tram::Ext::Kitchensink']]], ['factionrelation_5',['FactionRelation',['../structtram_1_1_ext_1_1_kitchensink_1_1_faction_relation.html',1,'tram::Ext::Kitchensink']]], ['factions_6',['factions',['../classtram_1_1_ext_1_1_kitchensink_1_1_character.html#ad38cfbf13b3b0044fb9b1b2fece43e37',1,'tram::Ext::Kitchensink::Character::factions()'],['../namespacetram_1_1_ext_1_1_kitchensink.html#ab0abcbf31d67465bc42fb01a8eec2bef',1,'tram::Ext::Kitchensink::factions()']]], ['fade_5fammount_7',['fade_ammount',['../structtram_1_1_animation_component_1_1_animation_playback_info.html#ae085e9df26b79fc91ac3a18d469bce96',1,'tram::AnimationComponent::AnimationPlaybackInfo']]], ['fade_5ffar_8',['fade_far',['../classtram_1_1_render_1_1_model.html#ab23a8639f37acbb57c7b2bd59f72f0e0',1,'tram::Render::Model::fade_far()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#ae282428d355cd814ebf720a5885adab2',1,'tram::Render::API::GLDrawListEntry::fade_far()']]], ['fade_5fin_9',['fade_in',['../structtram_1_1_animation_component_1_1_animation_playback_info.html#a447bcffb27576df3ed62a4f8e7a1ac29',1,'tram::AnimationComponent::AnimationPlaybackInfo']]], ['fade_5fin_5ftime_10',['fade_in_time',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_default.html#a48f08ce7495ae730fd0f89e7fcf19f57',1,'tram::Ext::Kitchensink::AnimStateTransitionDefault']]], ['fade_5fnear_11',['fade_near',['../classtram_1_1_render_1_1_model.html#aa81edd4e91330f0613abeecc945e323d',1,'tram::Render::Model::fade_near()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#a832edf238874e59d291c76e04b22ccec',1,'tram::Render::API::GLDrawListEntry::fade_near()']]], ['fade_5fout_12',['fade_out',['../structtram_1_1_animation_component_1_1_animation_playback_info.html#a048b270710009b885b74f65c311d4585',1,'tram::AnimationComponent::AnimationPlaybackInfo']]], ['fade_5fout_5ftime_13',['fade_out_time',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_default.html#a2eb7130d015e139f42813ac89cf7cfee',1,'tram::Ext::Kitchensink::AnimStateTransitionDefault']]], ['fade_5fspeed_14',['fade_speed',['../structtram_1_1_animation_component_1_1_animation_playback_info.html#a393f1b21fb4bf95d0d20a99fe1b6a4c8',1,'tram::AnimationComponent::AnimationPlaybackInfo']]], ['fade_5ftime_15',['fade_time',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_from.html#a7ccb60919e27cfe5cf01b20e824f494a',1,'tram::Ext::Kitchensink::AnimStateTransitionFrom::fade_time()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_into.html#a800a33afe025e16593895da5634bff6e',1,'tram::Ext::Kitchensink::AnimStateTransitionInto::fade_time()']]], ['fadein_16',['FadeIn',['../classtram_1_1_animation_component.html#aaf4161bf1e5c2cee940304cf35b8c178',1,'tram::AnimationComponent']]], ['fadeout_17',['FadeOut',['../classtram_1_1_animation_component.html#aeb3ad3551105ef1e3a6306808900ae50',1,'tram::AnimationComponent']]], ['fail_18',['fail',['../struct__test__case.html#ad2d0094cb5eb924936cb840093b1048f',1,'_test_case']]], ['fail_5fasserts_19',['fail_asserts',['../struct__test__case.html#ae886ab44d5b05f5d6bbece76e2f423b1',1,'_test_case']]], ['far_5fplane_20',['far_plane',['../namespacetram_1_1_render.html#aaa39b7e5e70c04e8c22233f173f0ac82',1,'tram::Render']]], ['farthest_5fdistance_21',['farthest_distance',['../structtram_1_1_octree_1_1_nearest_search.html#aa822dea4fb296786eb30325c47e18635',1,'tram::Octree::NearestSearch']]], ['farthest_5findex_22',['farthest_index',['../structtram_1_1_octree_1_1_nearest_search.html#ad0e4df7ab810d7077f6237205f63aa58',1,'tram::Octree::NearestSearch']]], ['ffp_5fbone_5findex_23',['FFP_BONE_INDEX',['../structtram_1_1_render_1_1_vertex_attribute.html#a3e46db7ca21dfef52d3e8adb8ff21a81a74a3fdb7bfeb1bb08716624bce81d847',1,'tram::Render::VertexAttribute']]], ['ffp_5fbone_5fweight_24',['FFP_BONE_WEIGHT',['../structtram_1_1_render_1_1_vertex_attribute.html#a3e46db7ca21dfef52d3e8adb8ff21a81ab3a4f45918953e4a245da004e17e31b2',1,'tram::Render::VertexAttribute']]], ['ffp_5fcolor_25',['FFP_COLOR',['../structtram_1_1_render_1_1_vertex_attribute.html#a3e46db7ca21dfef52d3e8adb8ff21a81a144f2d22f3cbd87fd4b0af33730d06a0',1,'tram::Render::VertexAttribute']]], ['ffp_5fignore_26',['FFP_IGNORE',['../structtram_1_1_render_1_1_vertex_attribute.html#a3e46db7ca21dfef52d3e8adb8ff21a81a79a2ffd5522f4648ed66407aaa5caf23',1,'tram::Render::VertexAttribute']]], ['ffp_5flightmap_27',['FFP_LIGHTMAP',['../structtram_1_1_render_1_1_vertex_attribute.html#a3e46db7ca21dfef52d3e8adb8ff21a81aa5215ee0c7371d8c67a0abcf1b8f8507',1,'tram::Render::VertexAttribute']]], ['ffp_5fnormal_28',['FFP_NORMAL',['../structtram_1_1_render_1_1_vertex_attribute.html#a3e46db7ca21dfef52d3e8adb8ff21a81ac9314abdec089aafc611ab43ffba5f01',1,'tram::Render::VertexAttribute']]], ['ffp_5fposition_29',['FFP_POSITION',['../structtram_1_1_render_1_1_vertex_attribute.html#a3e46db7ca21dfef52d3e8adb8ff21a81a163ad63558542d36ba9827c777dd2f08',1,'tram::Render::VertexAttribute']]], ['ffp_5ftexture_30',['FFP_TEXTURE',['../structtram_1_1_render_1_1_vertex_attribute.html#a3e46db7ca21dfef52d3e8adb8ff21a81ac1ba003af48f60bd2cc918f7c6987b86',1,'tram::Render::VertexAttribute']]], ['ffp_5ftype_31',['ffp_type',['../structtram_1_1_render_1_1_vertex_attribute.html#aee67a88dcdc860897f24790716674422',1,'tram::Render::VertexAttribute']]], ['ffphelper_32',['FFPHelper',['../structtram_1_1_render_1_1_a_p_i_1_1_f_f_p_helper.html',1,'tram::Render::API']]], ['field_5fanimation_33',['FIELD_ANIMATION',['../namespacetram.html#a21be90fb412cdf8c5703ab2155b270a4a294cfaf164e1fc2aa7233f26a29041d3',1,'tram']]], ['field_5fcollision_5fmask_34',['FIELD_COLLISION_MASK',['../namespacetram.html#af7146bfc7fadecfa5f4443e416a5a356a9613ced1d60f3a1213ebb4ee3c5fef82',1,'tram']]], ['field_5fcollmodel_35',['FIELD_COLLMODEL',['../namespacetram.html#abebf242bd359cf070de0a7074f31d7c2a7d3bbda6c810b29444fe1f7ba9d2a33f',1,'tram']]], ['field_5fcolor_36',['FIELD_COLOR',['../namespacetram.html#a480f7c687b7792584a6b60552bf1ce4ca40844fb482bc115a59cb3946075b8bf8',1,'tram']]], ['field_5fdirection_37',['FIELD_DIRECTION',['../namespacetram.html#a480f7c687b7792584a6b60552bf1ce4cad5f489826b6b9f360cd8f9f72a657708',1,'tram']]], ['field_5fdistance_38',['FIELD_DISTANCE',['../namespacetram.html#a480f7c687b7792584a6b60552bf1ce4ca5a7593cfaa5e8d4b977d96749103b34f',1,'tram']]], ['field_5fexponent_39',['FIELD_EXPONENT',['../namespacetram.html#a480f7c687b7792584a6b60552bf1ce4caec62432636aab03a5e13f90c724f3f2a',1,'tram']]], ['field_5fflags_40',['FIELD_FLAGS',['../namespacetram.html#af7146bfc7fadecfa5f4443e416a5a356a209938ad94122f6e58232d271d762615',1,'tram']]], ['field_5fflags_41',['field_flags',['../structtram_1_1_entity_1_1_field_info.html#ab70f9293bd89845c16aeb3f1d44901c3',1,'tram::Entity::FieldInfo']]], ['field_5fid_42',['field_id',['../structtram_1_1_entity_1_1_field_info.html#afc597660b771bd0d90e3e1c4b5fd5558',1,'tram::Entity::FieldInfo']]], ['field_5flightmap_43',['FIELD_LIGHTMAP',['../namespacetram.html#a717981bca7f8ce2fc1d263cec32f2e71ad872d96f0629a60291cde0384b221c2b',1,'tram']]], ['field_5fmodel_44',['FIELD_MODEL',['../namespacetram.html#af7146bfc7fadecfa5f4443e416a5a356a13cd63275162d147854397503537f0be',1,'tram']]], ['field_5fserialize_45',['FIELD_SERIALIZE',['../classtram_1_1_entity.html#a9c07ba341c9b5a9d969a5ba58ccb7d8fa2de12a0ad5fcc748aaa165d9c5cab16b',1,'tram::Entity']]], ['field_5fsound_46',['FIELD_SOUND',['../namespacetram.html#a32f771ce4ec7817ac72d4835f558c424a3567cbf4114feaeae8973646109c78c6',1,'tram']]], ['field_5ftype_47',['field_type',['../structtram_1_1_entity_1_1_field_info.html#a37fb586096567f2c3da11d696f119fd0',1,'tram::Entity::FieldInfo']]], ['field_5fvolume_48',['FIELD_VOLUME',['../namespacetram.html#a32f771ce4ec7817ac72d4835f558c424a5a098c343d8b04be1628923d86b259a2',1,'tram']]], ['fieldcount_49',['fieldcount',['../structtram_1_1_entity_type_info.html#a4e9c84b465297f05ccb785d6b9f26e81',1,'tram::EntityTypeInfo']]], ['fieldinfo_50',['FieldInfo',['../structtram_1_1_entity_1_1_field_info.html',1,'tram::Entity']]], ['fields_51',['fields',['../structtram_1_1_entity_type_info.html#a24f9612233dc930fe6f85d1e6e001fd8',1,'tram::EntityTypeInfo']]], ['file_52',['File',['../classtram_1_1_file.html#ab1b5812649adfd4ed0b16998c08beed6',1,'tram::File::File()'],['../classtram_1_1_file.html',1,'tram::File']]], ['file_2ecpp_53',['file.cpp',['../platform_2file_8cpp.html',1,'(Global Namespace)'],['../framework_2file_8cpp.html',1,'(Global Namespace)']]], ['file_2eh_54',['file.h',['../platform_2file_8h.html',1,'(Global Namespace)'],['../framework_2file_8h.html',1,'(Global Namespace)']]], ['filemedium_55',['FileMedium',['../namespacetram.html#a529c8d3e049a7dcc4425fbe040e4c531',1,'tram']]], ['filereader_56',['FileReader',['../classtram_1_1_file_reader.html',1,'tram::FileReader'],['../classtram_1_1_platform_1_1_file_reader.html',1,'FileReader']]], ['filereaderparser_57',['FileReaderParser',['../classtram_1_1_file_reader_parser.html',1,'tram']]], ['filesource_58',['FileSource',['../structtram_1_1_file_source.html',1,'tram']]], ['filestatus_59',['FileStatus',['../namespacetram.html#a972c59287ba467dbfe003f137609550d',1,'tram']]], ['filewriter_60',['FileWriter',['../classtram_1_1_file_writer.html',1,'tram::FileWriter'],['../classtram_1_1_platform_1_1_file_writer.html',1,'FileWriter']]], ['filewriterparser_61',['FileWriterParser',['../classtram_1_1_file_writer_parser.html',1,'tram']]], ['fillframe_62',['FillFrame',['../namespacetram_1_1_g_u_i.html#aa9e738ecaea859c6a6839587a10c4ac6',1,'tram::GUI']]], ['filter_63',['filter',['../classtram_1_1_render_1_1_material.html#a8793fc03d8f1a34076f3af8739323a42',1,'tram::Render::Material']]], ['filter_5fcallback_64',['filter_callback',['../namespacetram.html#a2ffbf64ab17d509c8a5dc283f437a5b7',1,'tram']]], ['filter_5flinear_65',['FILTER_LINEAR',['../namespacetram_1_1_render.html#aab519c3dc6ead26c1a7695e4c3b5501ca6de99baf59757370ce7015f1acdabfc7',1,'tram::Render']]], ['filter_5fnearest_66',['FILTER_NEAREST',['../namespacetram_1_1_render.html#aab519c3dc6ead26c1a7695e4c3b5501ca3f92e1775eab20a3d572e3256446199c',1,'tram::Render']]], ['filterparameters_67',['FilterParameters',['../structtram_1_1_audio_1_1_filter_parameters.html',1,'tram::Audio']]], ['find_68',['Find',['../classtram_1_1_ext_1_1_kitchensink_1_1_character.html#a70f852d7053390285611b9a81062e1f2',1,'tram::Ext::Kitchensink::Character::Find()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_topic.html#a6de61f6febffca8612e76926575df914',1,'tram::Ext::Kitchensink::DialogTopic::Find()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a378e9829bffe817d03eec5844816015b',1,'tram::Ext::Kitchensink::ItemClass::Find()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#a1d6dcf5fb1afcbaa6cb79de3bfbbf97b',1,'tram::Ext::Kitchensink::Inventory::Find()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest.html#a678d358f3b12331a4f01ac12cd161773',1,'tram::Ext::Kitchensink::Quest::Find()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_sound_table.html#ae4cbf60676839ac61f953d315f0ac3cc',1,'tram::Ext::Kitchensink::SoundTable::Find()'],['../classtram_1_1_entity.html#afba6aa3dbbd10ebc42beb6729bdb7da2',1,'tram::Entity::Find(id_t entity_id)'],['../classtram_1_1_entity.html#aa949dd2fafeb955d699271dbe41c75ec',1,'tram::Entity::Find(name_t entity_name)'],['../classtram_1_1_navmesh.html#aff49c111f072f7c12a1e209960a1cb6f',1,'tram::Navmesh::Find()'],['../classtram_1_1_path.html#ace5eac8a595a419404e4b4489f91a62a',1,'tram::Path::Find()'],['../classtram_1_1_transition.html#a1308ec63595db0c05d3085de4f50d9ce',1,'tram::Transition::Find()'],['../classtram_1_1_world_cell.html#abe83e953cd5a7905807a1f4ab8157d01',1,'tram::WorldCell::Find(vec3 point)'],['../classtram_1_1_world_cell.html#a7757aa7efe44bb6bb948b559948e12b3',1,'tram::WorldCell::Find(name_t name)'],['../classtram_1_1_physics_1_1_collision_model.html#af125ec91786a3422e236709fb2ee72da',1,'tram::Physics::CollisionModel::Find()'],['../classtram_1_1_render_1_1_animation.html#ac0bf7285a28f37f9e41d66c4325f8799',1,'tram::Render::Animation::Find()'],['../classtram_1_1_render_1_1_light_graph.html#a33ebe4cfeae7cd18ceacb54d3e4c5a3f',1,'tram::Render::LightGraph::Find()'],['../classtram_1_1_render_1_1_material.html#a79794b5c6356b0a4da39a6c9cf468fbc',1,'tram::Render::Material::Find()'],['../classtram_1_1_render_1_1_model.html#a02abf1c725962593c6bbfa17d4fa2e43',1,'tram::Render::Model::Find()'],['../classtram_1_1_render_1_1_a_p_i_1_1_vertex_shader.html#a953ba1f0a3d7657b8a242ae8193b0987',1,'tram::Render::API::VertexShader::Find()'],['../classtram_1_1_render_1_1_a_p_i_1_1_fragment_shader.html#a7d679ad0deb8e595b3182c6c0e786de3',1,'tram::Render::API::FragmentShader::Find()'],['../classtram_1_1_render_1_1_sprite.html#a661555af281cb553323a07a3bf39c08e',1,'tram::Render::Sprite::Find()'],['../classtram_1_1_hashmap.html#a7520d8013e86f06e43c2d46aacba39c1',1,'tram::Hashmap::Find(UID key)'],['../classtram_1_1_hashmap.html#afea08bf4be8e807fc6da90e1992e3df9',1,'tram::Hashmap::Find(uint32_t key)'],['../classtram_1_1_octree.html#a78b461493864e5124fa6972004a754d6',1,'tram::Octree::Find()'],['../classtram_1_1_audio_1_1_sound_graph.html#aaa0cdf6c6a42f59b3cc2362db60c16d3',1,'tram::Audio::SoundGraph::Find()'],['../classtram_1_1_audio_1_1_sound.html#add19eef6a4ddc9d13638368c623f572a',1,'tram::Audio::Sound::Find()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html#ab263983af0673c1974878b5d7299492e',1,'tram::Ext::Kitchensink::AIAgent::Find()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_table.html#ae762d3e66cb45a4739a5cbfa915da3a1',1,'tram::Ext::Kitchensink::AnimationTable::Find()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_attribute_info.html#a3ee5018c065a5d17681306983e5240b5',1,'tram::Ext::Kitchensink::AttributeInfo::Find()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container.html#a16dcafc82dbe7851b127f9bbf6a42933',1,'tram::Ext::Kitchensink::AttributeContainer::Find(Entity *)'],['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container.html#aea111bc346b485851485b4354b766b0e',1,'tram::Ext::Kitchensink::AttributeContainer::Find(id_t)'],['../classtram_1_1_ext_1_1_kitchensink_1_1_faction.html#a1f3e834fa982e5d591e0e382fc477e9c',1,'tram::Ext::Kitchensink::Faction::Find()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_character_class.html#ac7025bc9d8e297e380181b2f005f854d',1,'tram::Ext::Kitchensink::CharacterClass::Find()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_character.html#aad6e2471fc73d5228e202990dba4af13',1,'tram::Ext::Kitchensink::Character::Find()'],['../namespacetram_1_1_system.html#a80685c0799c2a0af7c493bfaf7de86de',1,'tram::System::Find()']]], ['findaabbintersection_69',['FindAABBIntersection',['../classtram_1_1_a_a_b_b_tree.html#a51ebff27bd53240096c90c198b970dab',1,'tram::AABBTree::FindAABBIntersection(Node *node, vec3 min, vec3 max, auto callback)'],['../classtram_1_1_a_a_b_b_tree.html#a72800aa33c03780b35f5510d8c80526b',1,'tram::AABBTree::FindAABBIntersection(vec3 min, vec3 max, auto callback)']]], ['findall_70',['FindAll',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest.html#ada625bbce2632f2d828a2f3b721f9165',1,'tram::Ext::Kitchensink::Quest']]], ['findallfromaabb_71',['FindAllFromAABB',['../classtram_1_1_render_1_1_model.html#a6c1e5a51904349dbac4e6055b54f087a',1,'tram::Render::Model']]], ['findallfromray_72',['FindAllFromRay',['../classtram_1_1_render_1_1_model.html#a3c38cde838ea3f56d2e77c23c8a1d77f',1,'tram::Render::Model']]], ['findallintersectionsfromaabb_73',['FindAllIntersectionsFromAABB',['../namespacetram_1_1_render_1_1_a_a_b_b.html#a5030c8f345b2d6543274015951361d4d',1,'tram::Render::AABB']]], ['findcompartment_74',['FindCompartment',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#af287eac367f38581825d3b4302642af9',1,'tram::Ext::Kitchensink::Inventory']]], ['findintersection_75',['FindIntersection',['../classtram_1_1_a_a_b_b_tree.html#ab91f605c9d68f45e8d5d5c0ae05e12ba',1,'tram::AABBTree::FindIntersection(vec3 ray_pos, vec3 ray_dir, float distance_limit, auto filter) const'],['../classtram_1_1_a_a_b_b_tree.html#a1f62c3784491fc7b1b924e9801d5685d',1,'tram::AABBTree::FindIntersection(vec3 ray_pos, vec3 ray_dir, Node *node, std::vector< uint32_t > &result) const']]], ['findintersectionrecursive_76',['FindIntersectionRecursive',['../classtram_1_1_a_a_b_b_tree.html#a6ce2d61d0eb768a2c41b5832177d71b1',1,'tram::AABBTree']]], ['findkeyframepointers_77',['FindKeyframePointers',['../classtram_1_1_animation_component.html#aaa1ec23cc54f20569e9cce6a90844bc9',1,'tram::AnimationComponent']]], ['findlights_78',['FindLights',['../namespacetram_1_1_render_1_1_light_tree.html#ae353165809c1cd85edb8e42944c0dee4',1,'tram::Render::LightTree']]], ['findmaterialtype_79',['FindMaterialType',['../namespacetram_1_1_render.html#a94a9ceb0462c8a24b1912ffd179c33f7',1,'tram::Render']]], ['findnearest_80',['FindNearest',['../classtram_1_1_octree.html#a6ac6abd129adbfd434a034a7f156d7c7',1,'tram::Octree::FindNearest(NearestSearch *search, Node *parent_node, int octant)'],['../classtram_1_1_octree.html#af89de216af27eedb69a0255dc8f5baa3',1,'tram::Octree::FindNearest(NearestSearch *search, Node *parent_node)'],['../classtram_1_1_octree.html#af4b6041ef1096c464a9197a89037ea73',1,'tram::Octree::FindNearest(T result[], float x, float y, float z)']]], ['findnearestfromray_81',['FindNearestFromRay',['../namespacetram_1_1_render_1_1_a_a_b_b.html#a631b3af49e3238165b6005edf3608394',1,'tram::Render::AABB']]], ['findpaths_82',['FindPaths',['../namespacetram_1_1_audio_1_1_spatial.html#a9e3e22294df1b1d269a8617a1b65291b',1,'tram::Audio::Spatial']]], ['findpathsmetropolis_83',['FindPathsMetropolis',['../namespacetram_1_1_audio_1_1_spatial.html#abac4b381854c802af06d8b08b9643434',1,'tram::Audio::Spatial']]], ['findshader_84',['FindShader',['../classtram_1_1_render_1_1_a_p_i_1_1_linked_shader.html#aa5dc3db8286a72fc93e0c24a1ae6d7a5',1,'tram::Render::API::LinkedShader::FindShader()'],['../namespacetram_1_1_render_1_1_a_p_i.html#ac0c7d3299f33f45e1b65ea4b795eedee',1,'tram::Render::API::FindShader()']]], ['findsibling_85',['FindSibling',['../classtram_1_1_a_a_b_b_tree.html#ab2029865cbcf492b0c6dd70899a6fdf1',1,'tram::AABBTree']]], ['findtransition_86',['FindTransition',['../classtram_1_1_world_cell.html#ad17560365ad3f35f832fe14cb2ad7be6',1,'tram::WorldCell']]], ['findvertexformat_87',['FindVertexFormat',['../namespacetram_1_1_render.html#a353a7d1babbd0a6f8bfc7bf1b4eb5a8c',1,'tram::Render']]], ['finishresources_88',['FinishResources',['../namespacetram_1_1_async.html#aed73e549dce7f281ed1d2d8bb31c7b65',1,'tram::Async']]], ['fire_89',['Fire',['../classtram_1_1_signal_table.html#a52fe697c321904e1b59f0ed655c3e3d9',1,'tram::SignalTable::Fire(signal_t signal, id_t sender, Value value)'],['../classtram_1_1_signal_table.html#a6268d498a6ba6846e797499a3100fe41',1,'tram::SignalTable::Fire(signal_t signal, id_t sender)']]], ['fireadded_90',['FireAdded',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a4567cddbfd773f1d162c9947a61d7acf',1,'tram::Ext::Kitchensink::ItemClass']]], ['fireequip_91',['FireEquip',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a27b6d1e19c2219ef08b38e0f6301b78a',1,'tram::Ext::Kitchensink::ItemClass']]], ['fireidle_92',['FireIdle',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#aa63c9f3e897107f6a145fab913be5690',1,'tram::Ext::Kitchensink::ItemClass']]], ['fireprimaryaction_93',['FirePrimaryAction',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a3af8732cfbd61416567a257612f1320e',1,'tram::Ext::Kitchensink::ItemClass']]], ['fireremoved_94',['FireRemoved',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a4b4d3c932032e2881323f1ec42e74f85',1,'tram::Ext::Kitchensink::ItemClass']]], ['firesecondaryaction_95',['FireSecondaryAction',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a66d439782843161ca256d3f777b77a95',1,'tram::Ext::Kitchensink::ItemClass']]], ['firesignal_96',['FireSignal',['../classtram_1_1_entity.html#aa83f617be04b68ab23d2f42a248b9e7d',1,'tram::Entity::FireSignal(signal_t type)'],['../classtram_1_1_entity.html#afbad8d97ef0905782c6aa0ef8ca7cf88',1,'tram::Entity::FireSignal(signal_t type, Value value)']]], ['firetrigger_97',['FireTrigger',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest.html#ab9a78d09f8a3235d107d07420f867184',1,'tram::Ext::Kitchensink::Quest']]], ['fireunequip_98',['FireUnequip',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#ac84ab7cd8c9fd41df4d50716df9d4bda',1,'tram::Ext::Kitchensink::ItemClass']]], ['first_99',['first',['../classtram_1_1_stack_pool.html#aaf7603622a4b6515c9d00f26c758e34c',1,'tram::StackPool::first()'],['../classtram_1_1_pool.html#ac3fa225dfc0f2bcbdb8b99cd532159f6',1,'tram::Pool::first()'],['../classtram_1_1_hashmap.html#ab8e29b96d85af1c96d46f4eef83472b3',1,'tram::Hashmap::first()'],['../classtram_1_1_queue.html#af7bdb257fbe379deddd3b3e810311a19',1,'tram::Queue::first()'],['../classtram_1_1_stack.html#a0d0e42f7cb952325a56a77c5097f93a4',1,'tram::Stack::first()']]], ['firstend_100',['firstend',['../classtram_1_1_stack.html#aef2cc6aeb5ebd3ee4365cce47e29dfdf',1,'tram::Stack']]], ['firstperson_2ecpp_101',['firstperson.cpp',['../firstperson_8cpp.html',1,'']]], ['firstperson_2eh_102',['firstperson.h',['../firstperson_8h.html',1,'']]], ['firstpersoncamera_103',['FirstPersonCamera',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#ab0b6d243e23d1e3bab6897ca8c846b0e',1,'tram::Ext::Camera::FirstPersonCamera::FirstPersonCamera()'],['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html',1,'tram::Ext::Camera::FirstPersonCamera']]], ['flag_5fdeleted_104',['FLAG_DELETED',['../classtram_1_1_hashmap.html#a5dba31c8c90742090caf46529e6771c7ab892ee7040996433c21bafc1cbe06b83',1,'tram::Hashmap']]], ['flag_5fdisable_5flighting_105',['FLAG_DISABLE_LIGHTING',['../namespacetram_1_1_render.html#ac048699f6dc8dc5b8681c8aa3ac65d9ca98b0957a0ef2b44bc45bad5f3eca0223',1,'tram::Render']]], ['flag_5fdraw_5findexed_106',['FLAG_DRAW_INDEXED',['../namespacetram_1_1_render.html#ac048699f6dc8dc5b8681c8aa3ac65d9ca21d08069337093c63805e471da1044ab',1,'tram::Render']]], ['flag_5fdraw_5flines_107',['FLAG_DRAW_LINES',['../namespacetram_1_1_render.html#ac048699f6dc8dc5b8681c8aa3ac65d9caf506d03848aef5c27c97cd4798ef2d0a',1,'tram::Render']]], ['flag_5flocked_108',['FLAG_LOCKED',['../namespacetram.html#ace0f2946cbdd6fa99edd7597d589c36aab86ea350289e16e0769a2c5ded29841c',1,'tram']]], ['flag_5fno_5fdebug_109',['FLAG_NO_DEBUG',['../namespacetram_1_1_render.html#ac048699f6dc8dc5b8681c8aa3ac65d9ca2edd1aba3d257f1a0649ac703f1487e9',1,'tram::Render']]], ['flag_5fno_5fdepth_5ftest_110',['FLAG_NO_DEPTH_TEST',['../namespacetram_1_1_render.html#ac048699f6dc8dc5b8681c8aa3ac65d9cae7db99a59b57cfb480a99322e5ee3282',1,'tram::Render']]], ['flag_5fno_5fdirectional_111',['FLAG_NO_DIRECTIONAL',['../namespacetram_1_1_render.html#ac048699f6dc8dc5b8681c8aa3ac65d9caf3fc1cfd17228e4739e682643d403aaf',1,'tram::Render']]], ['flag_5fno_5frender_112',['FLAG_NO_RENDER',['../namespacetram_1_1_render.html#ac048699f6dc8dc5b8681c8aa3ac65d9ca08d94ef5eb8ba141c253f1d338873bd4',1,'tram::Render']]], ['flag_5frecord_113',['FLAG_RECORD',['../classtram_1_1_hashmap.html#a5dba31c8c90742090caf46529e6771c7accc46643e3f50f499ab2ffac37d02f74',1,'tram::Hashmap']]], ['flag_5frender_114',['FLAG_RENDER',['../namespacetram_1_1_render.html#ac048699f6dc8dc5b8681c8aa3ac65d9ca9a2628bf2260f59af082c0527ec370a4',1,'tram::Render']]], ['flag_5freverse_5fsort_115',['FLAG_REVERSE_SORT',['../namespacetram_1_1_render.html#ac048699f6dc8dc5b8681c8aa3ac65d9ca67cbaea35d33f46ff65e43e7180d1bb9',1,'tram::Render']]], ['flag_5ftransparent_116',['FLAG_TRANSPARENT',['../namespacetram_1_1_render.html#ac048699f6dc8dc5b8681c8aa3ac65d9caed3ea54d0ca27e6f6ccf6bbf97de2d8a',1,'tram::Render']]], ['flag_5fuse_5faabb_117',['FLAG_USE_AABB',['../namespacetram_1_1_render.html#ac048699f6dc8dc5b8681c8aa3ac65d9ca6d518bb47788015018288f63f111d364',1,'tram::Render']]], ['flags_118',['flags',['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html#ac41f6b41aba38a7099bca75a12e45a66',1,'tram::Render::API::SWDrawListEntry::flags()'],['../structtram_1_1_hashmap_1_1_record.html#a67309019d9e71aeb7fa5fca434c86526',1,'tram::Hashmap::Record::flags()']]], ['flags_119',['Flags',['../namespacetram_1_1_settings.html#a482e75867f85885025dc262763b8df40',1,'tram::Settings']]], ['flags_120',['flags',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#a4a282542da7ede553863e63080b53e77',1,'tram::Render::API::GLDrawListEntry::flags()'],['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#a5e85792af5fd8e02fd1ccbc924a55d1c',1,'tram::Render::API::D3DDrawListEntry::flags()'],['../classtram_1_1_world_cell.html#a47609a24f5f428ede775c09d633096f2',1,'tram::WorldCell::flags()'],['../structtram_1_1_settings_1_1_setting_info.html#a15ded2e3664456c138ea8aad9f3704da',1,'tram::Settings::SettingInfo::flags()'],['../classtram_1_1_entity.html#af48fa95d5f1f47aebc79545a861cd478',1,'tram::Entity::flags()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a230b3c266b55a9107188d5ceb44d2aab',1,'tram::Ext::Kitchensink::Button::flags()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_effect.html#a72c383540fc6f43645df6c5c658bbf63',1,'tram::Ext::Kitchensink::Effect::flags()'],['../structtram_1_1_audio_1_1_spatial_1_1_audio_render.html#a0e6693da21f0990dd89c5745b018764d',1,'tram::Audio::Spatial::AudioRender::flags()'],['../structtram_1_1_shared_entity_data.html#a4a85b5f990cc351ec57869c3fe08335f',1,'tram::SharedEntityData::flags()']]], ['float32_121',['float32',['../structtram_1_1_settings_1_1_setting_info.html#af59a80050b35c6db46f3a65a25a8e8c9',1,'tram::Settings::SettingInfo']]], ['float32_122',['FLOAT32',['../structtram_1_1_render_1_1_vertex_attribute.html#a5478d84843dda2d90f4628b2e2c39868aee86317317f7f033b64772b793f25495',1,'tram::Render::VertexAttribute']]], ['float_5fptr_123',['float_ptr',['../classtram_1_1_value_ptr.html#af358e691eb1c70e81271966fdef46dfb',1,'tram::ValuePtr']]], ['float_5fvalue_124',['float_value',['../classtram_1_1_value.html#ad054720a352630eda06a3d7ee750f067',1,'tram::Value']]], ['flush_5fconsole_125',['flush_console',['../namespacetram_1_1implementation.html#a4f7ee627cbe8593eb958c9ac61ccd2eb',1,'tram::implementation']]], ['flush_5fdisplay_126',['flush_display',['../namespacetram_1_1implementation.html#ac91c6a3049a88f77305379c3185e9a48',1,'tram::implementation::flush_display(int time, int system)'],['../namespacetram_1_1implementation.html#afa314b84e606df8e9955afd0b5d3f84e',1,'tram::implementation::flush_display(int time, System::system_t system)']]], ['fly_127',['Fly',['../classtram_1_1_controller_component.html#ae13d3ca8940732bb64b80f0d0a789bfe',1,'tram::ControllerComponent::Fly()'],['../classtram_1_1_raycast_controller_component.html#a7905d17bead35cf596c7fe19132e548b',1,'tram::RaycastControllerComponent::Fly()'],['../classtram_1_1_f_p_s_controller_component.html#ac3921936820398b0ed5d343732f5fbbb',1,'tram::FPSControllerComponent::Fly()']]], ['fly_5fspeed_128',['fly_speed',['../classtram_1_1_raycast_controller_component.html#ac3bc0f6a436b974dd1e207565bcee873',1,'tram::RaycastControllerComponent::fly_speed()'],['../classtram_1_1_f_p_s_controller_component.html#a59caaa80439479140ec150e4abfb6f36',1,'tram::FPSControllerComponent::fly_speed()']]], ['flying_129',['flying',['../classtram_1_1_raycast_controller_component.html#a5481a92132dc6b4c1b6cbf6266fc7a1a',1,'tram::RaycastControllerComponent::flying()'],['../classtram_1_1_f_p_s_controller_component.html#adcec1e7d2eb544a14884da99d7de9341',1,'tram::FPSControllerComponent::flying()']]], ['follower_130',['follower',['../main_8cpp.html#a6ad3920985a278030871ba19a36e9029',1,'main.cpp']]], ['following_131',['following',['../classtram_1_1_ext_1_1_camera_1_1_camera.html#ac824c2a2d2ec9f37965808a6f2197c79',1,'tram::Ext::Camera::Camera']]], ['following_2ecpp_132',['following.cpp',['../following_8cpp.html',1,'']]], ['following_2eh_133',['following.h',['../following_8h.html',1,'']]], ['following_5finterpolation_134',['following_interpolation',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#afc061f0deae8ee4e0abc66d55544208b',1,'tram::Ext::Camera::FirstPersonCamera']]], ['following_5flistener_135',['following_listener',['../classtram_1_1_ext_1_1_camera_1_1_camera.html#ac3852212644df817be31acab2fb4231b',1,'tram::Ext::Camera::Camera']]], ['following_5flookat_136',['following_lookat',['../classtram_1_1_ext_1_1_camera_1_1_camera.html#aaa242b24d1a6f48e868dcf73b9ca72d5',1,'tram::Ext::Camera::Camera']]], ['following_5foffset_137',['following_offset',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#aa5267817e3d8ad5268a7a7149586f624',1,'tram::Ext::Camera::FirstPersonCamera']]], ['font_5fdebug_138',['font_debug',['../namespacetram_1_1_render.html#a02ef1036594289bf19ebfa9927708a5d',1,'tram::Render']]], ['font_5fheader_139',['FONT_HEADER',['../namespacetram_1_1_ext_1_1_menu.html#afb19d70c23fefc9206a68b19238f0361',1,'tram::Ext::Menu']]], ['font_5fpixelart_140',['FONT_PIXELART',['../namespacetram_1_1_ext_1_1_menu.html#a19b646bf9a31f4080201096d7c78b468',1,'tram::Ext::Menu']]], ['font_5ft_141',['font_t',['../namespacetram_1_1_g_u_i.html#ad72e4051d38000777cac376d29fc18a1',1,'tram::GUI']]], ['font_5ftext_142',['FONT_TEXT',['../namespacetram_1_1_ext_1_1_menu.html#a8fba4d434da7bccc5f0a79b97f45301a',1,'tram::Ext::Menu']]], ['font_5ftext_5fbold_143',['FONT_TEXT_BOLD',['../namespacetram_1_1_ext_1_1_menu.html#ac48d19ee29fc32e75b0c11bf85004bd3',1,'tram::Ext::Menu']]], ['font_5fwidgets_144',['FONT_WIDGETS',['../namespacetram_1_1_ext_1_1_menu.html#a69fad955abedb48b03076af467f31466',1,'tram::Ext::Menu']]], ['force_145',['force',['../structtram_1_1_audio_1_1_spatial_1_1_path_exploration_result.html#a43985ab3f8a3450cb1f6d9c732c2b9e7',1,'tram::Audio::Spatial::PathExplorationResult::force()'],['../structtram_1_1_audio_1_1_spatial_1_1_path_tracing_result.html#a493b960cdc2495f703f392b83e2ef657',1,'tram::Audio::Spatial::PathTracingResult::force()'],['../structtram_1_1_audio_1_1_spatial_1_1_path_rendering_info.html#ab2e46bddf62459ce6f74591478c1f09b',1,'tram::Audio::Spatial::PathRenderingInfo::force()'],['../structtram_1_1_audio_1_1_spatial_1_1_path_from_audio_source.html#a224a92306d48694e4256b258d1ad0c2b',1,'tram::Audio::Spatial::PathFromAudioSource::force()']]], ['format_146',['format',['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_vertex_array.html#ae5c1736575294cb01427786c8bc8e3a2',1,'tram::Render::API::SWVertexArray']]], ['found_147',['found',['../structtram_1_1_octree_1_1_nearest_search.html#a0a4cacd8eca108ce703cc4ede667550b',1,'tram::Octree::NearestSearch']]], ['fpscamera_2ecpp_148',['fpscamera.cpp',['../fpscamera_8cpp.html',1,'']]], ['fpscamera_2eh_149',['fpscamera.h',['../fpscamera_8h.html',1,'']]], ['fpscontrollercomponent_150',['FPSControllerComponent',['../classtram_1_1_f_p_s_controller_component.html#a6f50d65657568e5d1afe87dd8cf17d91',1,'tram::FPSControllerComponent::FPSControllerComponent()'],['../classtram_1_1_f_p_s_controller_component.html',1,'tram::FPSControllerComponent']]], ['fragmentshader_151',['FragmentShader',['../classtram_1_1_render_1_1_a_p_i_1_1_fragment_shader.html',1,'tram::Render::API']]], ['frame_152',['frame',['../structtram_1_1_animation_component_1_1_animation_playback_info.html#ada1f5f7cfa76593710d843a609d7c35b',1,'tram::AnimationComponent::AnimationPlaybackInfo::frame()'],['../classtram_1_1_decal_component.html#a8cde217b87b345af7bd38a674afeea13',1,'tram::DecalComponent::frame()']]], ['frame_153',['FRAME',['../structtram_1_1_event.html#a569d6673fa83d2a5ec86b3d0c36c8765a8feafca698ba40be02d682358b638efa',1,'tram::Event']]], ['frame_154',['frame',['../structtram_1_1_render_1_1_keyframe.html#a0a8682e86efe22d381951a748d49b617',1,'tram::Render::Keyframe']]], ['frame_5fbottom_155',['FRAME_BOTTOM',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefa7748663007d8947e6bf4bce366df534c',1,'tram::GUI']]], ['frame_5fbottom_5finv_156',['FRAME_BOTTOM_INV',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefacfb3ce3ac246f9bc9609bfb340ae7dfd',1,'tram::GUI']]], ['frame_5fcenter_5fhorizontal_157',['FRAME_CENTER_HORIZONTAL',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefa95bd1777b43114754f8c3dba6b2918e6',1,'tram::GUI']]], ['frame_5fcenter_5fvertical_158',['FRAME_CENTER_VERTICAL',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefa2ea467ec8de3c873daca99f6e28bd484',1,'tram::GUI']]], ['frame_5finset_159',['FRAME_INSET',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefa98142b3610036479f66047dcf5277a71',1,'tram::GUI']]], ['frame_5fleft_160',['FRAME_LEFT',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefafce4689473a6a893962e0605f8ba84e7',1,'tram::GUI']]], ['frame_5fleft_5finv_161',['FRAME_LEFT_INV',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefaf3de8d80436e3cd82525f79e84ff1057',1,'tram::GUI']]], ['frame_5fright_162',['FRAME_RIGHT',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefa12ad966aac117df6a4f0090230801f25',1,'tram::GUI']]], ['frame_5fright_5finv_163',['FRAME_RIGHT_INV',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefa79e0b80984df5db58ef3e444503984a7',1,'tram::GUI']]], ['frame_5ftop_164',['FRAME_TOP',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefa5f7d391746d81b33b1a09ac367bbd9d6',1,'tram::GUI']]], ['frame_5ftop_5finv_165',['FRAME_TOP_INV',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefa9a17d7ae2dca7f74667d4ca2d132ee73',1,'tram::GUI']]], ['frameobject_166',['FrameObject',['../structtram_1_1_g_u_i_1_1_frame_object.html',1,'tram::GUI']]], ['frames_167',['frames',['../classtram_1_1_render_1_1_sprite.html#ad1f3d4b42af2c6ae60e8eccac3368d4c',1,'tram::Render::Sprite']]], ['friction_168',['friction',['../classtram_1_1_f_p_s_controller_component.html#a451fd7c7b46f15d8c41966e57389d9f3',1,'tram::FPSControllerComponent']]], ['from_169',['from',['../structtram_1_1_edge.html#ad6343a5ac259ec2941d5aabd5a06908e',1,'tram::Edge']]], ['from_5fstate_170',['from_state',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_from.html#abce9f4aa66e81f7bdacdd957145bf2d8',1,'tram::Ext::Kitchensink::AnimStateTransitionFrom::from_state()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_into.html#a8ef52cbdfa3fe1b8b13a7b479ccf0ec0',1,'tram::Ext::Kitchensink::AnimStateTransitionInto::from_state()']]], ['front_171',['front',['../classtram_1_1_queue.html#a869affb595c884f94449617be6ba5da0',1,'tram::Queue']]], ['fullname_172',['fullname',['../struct__test__case.html#a028f8c7752296eebd358db5357c46064',1,'_test_case']]], ['function_173',['function',['../structtram_1_1_listener_info.html#aa34513becad7ae12187bd4654f930df2',1,'tram::ListenerInfo::function()'],['../namespacetram_1_1_ext_1_1_scripting_1_1_lua.html#a4eb0c0bc6178c8d324c89f213a5a1a15',1,'tram::Ext::Scripting::Lua::function()']]], ['fvf_174',['fvf',['../structtram_1_1_render_1_1_a_p_i_1_1_f_v_f_helper.html#a0d36c1cfc5b492d3e1bb07506635b81e',1,'tram::Render::API::FVFHelper::fvf()'],['../structtram_1_1_render_1_1_a_p_i_1_1_vertex_buffer_metadata.html#aa5759a20251376053ea53b5b51efedee',1,'tram::Render::API::VertexBufferMetadata::fvf()'],['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#acc24155c9681da771fe7102a101561ae',1,'tram::Render::API::D3DDrawListEntry::fvf()']]], ['fvfhelper_175',['FVFHelper',['../structtram_1_1_render_1_1_a_p_i_1_1_f_v_f_helper.html',1,'tram::Render::API']]] ]; ================================================ FILE: docs/cppapi/search/all_7.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/all_7.js ================================================ var searchData= [ ['gather_0',['Gather',['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_topic.html#af40984203be124856962da32edaac92d',1,'tram::Ext::Kitchensink::DialogTopic']]], ['gatherbaseattributes_1',['GatherBaseAttributes',['../classtram_1_1_ext_1_1_kitchensink_1_1_character_class.html#af5638f87859e56de9420d25e4e5668a8',1,'tram::Ext::Kitchensink::CharacterClass']]], ['gatherfactions_2',['GatherFactions',['../classtram_1_1_ext_1_1_kitchensink_1_1_character_class.html#a2afeea3b907ba87955f7f636a3681599',1,'tram::Ext::Kitchensink::CharacterClass']]], ['generateid_3',['GenerateID',['../namespacetram.html#ad9db30198d176e4ffed5b38273c4beb0',1,'tram']]], ['generateplanes_4',['GeneratePlanes',['../classtram_1_1_transition.html#ad2c202e43fb8725030c17c88176a36bb',1,'tram::Transition']]], ['generic_5',['generic',['../structtram_1_1_render_1_1vertexarray__t.html#a6233f7ad4c54f375d0a7faf2a7fd54a8',1,'tram::Render::vertexarray_t::generic()'],['../structtram_1_1_render_1_1indexarray__t.html#a86c0b0a651bf16d9bb3b7566a325290f',1,'tram::Render::indexarray_t::generic()'],['../structtram_1_1_audio_1_1audiosource__t.html#a8cb8354dafecc4ccb01a425de4ed202e',1,'tram::Audio::audiosource_t::generic()'],['../structtram_1_1_audio_1_1audiobuffer__t.html#aa6218cbba41fa39bd964c556ffe4b756',1,'tram::Audio::audiobuffer_t::generic()'],['../structtram_1_1_render_1_1spritearray__t.html#ab76a2d9193e201e274efa86af5ce5af7',1,'tram::Render::spritearray_t::generic()'],['../structtram_1_1_render_1_1drawlistentry__t.html#aaf774d6b3835faaadbbadd9cd65ac626',1,'tram::Render::drawlistentry_t::generic()'],['../structtram_1_1_render_1_1texturehandle__t.html#af0041c0ed8d24e29e6e09cff06e8a6ac',1,'tram::Render::texturehandle_t::generic()'],['../structtram_1_1_render_1_1light__t.html#a9435b381024f28d7b66f0235be42c28f',1,'tram::Render::light_t::generic()'],['../structtram_1_1_render_1_1material__t.html#aa4163a9839bbec7828aab7a0bba5861c',1,'tram::Render::material_t::generic()']]], ['get_6',['Get',['../namespacetram_1_1_settings.html#a2e673200f6c75070a5e40f65e46f92dd',1,'tram::Settings::Get()'],['../namespacetram_1_1_language.html#af059d31d855f0bf0fc06dfc1a170c834',1,'tram::Language::Get()']]], ['get_7',['get',['../classtram_1_1_component.html#a129fcc4a535b3bbd7ae878a22b36e541',1,'tram::Component::get()'],['../classtram_1_1_resource_proxy.html#abcaffdba60268a1aa0c1ed19249f63b0',1,'tram::ResourceProxy::get()']]], ['get_5ftransform_5fcallback_8',['get_transform_callback',['../classtram_1_1_physics_1_1_a_p_i_1_1_callback_motion_state.html#ab97d0dfa12197e6fa79055fd3bfc57ba',1,'tram::Physics::API::CallbackMotionState']]], ['get_5ftrf_5fcallback_9',['get_trf_callback',['../namespacetram_1_1_physics_1_1_a_p_i.html#a36463524ce5c3d5ee5d8c9bf2d4258bd',1,'tram::Physics::API']]], ['getaabbmax_10',['GetAABBMax',['../classtram_1_1_render_1_1_model.html#ab6e9404f95096afaea9226fe975e697b',1,'tram::Render::Model::GetAABBMax()'],['../classtram_1_1_a_a_b_b_tree.html#a61d5cb103f8529afdd926a8b6a1cf79a',1,'tram::AABBTree::GetAABBMax()']]], ['getaabbmin_11',['GetAABBMin',['../classtram_1_1_render_1_1_model.html#a181f0a0d0b56d4f7235181ddd1cbeec0',1,'tram::Render::Model::GetAABBMin()'],['../classtram_1_1_a_a_b_b_tree.html#ab7b01ca3a4bd8402b5337819d0482fce',1,'tram::AABBTree::GetAABBMin()']]], ['getallkeyboardkeybindings_12',['GetAllKeyboardKeyBindings',['../namespacetram_1_1_u_i.html#a95733211eecad5c91c9f4ae453765a91',1,'tram::UI']]], ['getanimationcomponent_13',['GetAnimationComponent',['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_state_component.html#ac6894d78aa54b2d0bf5bb4f55766c43b',1,'tram::Ext::Kitchensink::AnimationStateComponent']]], ['getanimationstatecomponent_14',['GetAnimationStateComponent',['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html#a74c4e40e62073f4a4016ef0080d144f4',1,'tram::Ext::Kitchensink::AIAgent']]], ['getanswer_15',['GetAnswer',['../classtram_1_1_ext_1_1_kitchensink_1_1_dialog_controller.html#a80e5cf34f6478ba8921ad4df746252db',1,'tram::Ext::Kitchensink::DialogController']]], ['getanyshader_16',['GetAnyShader',['../classtram_1_1_render_1_1_a_p_i_1_1_linked_shader.html#aade702f067875442fe766814c664247c',1,'tram::Render::API::LinkedShader::GetAnyShader()'],['../namespacetram_1_1_render_1_1_a_p_i.html#a50e0305574ac545c1e62fd272d9c0c04',1,'tram::Render::API::GetAnyShader()']]], ['getarmature_17',['GetArmature',['../classtram_1_1_render_1_1_model.html#a823633680904cb6940047f5aeec3ef4e',1,'tram::Render::Model']]], ['getattribute_18',['GetAttribute',['../classtram_1_1_ext_1_1_kitchensink_1_1_character_class.html#a70e3248022a5813fa317d70d610c8096',1,'tram::Ext::Kitchensink::CharacterClass::GetAttribute()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container.html#a3ee8ff405063d9cbd58792ddfb225ac7',1,'tram::Ext::Kitchensink::AttributeContainer::GetAttribute(name_t attribute)']]], ['getattributebase_19',['GetAttributeBase',['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container.html#a5ac70ad8c111191b8c1fb8dd44e706e1',1,'tram::Ext::Kitchensink::AttributeContainer']]], ['getaxissensitivity_20',['GetAxisSensitivity',['../namespacetram_1_1_u_i.html#a2e57de90a0a4d8616e2ac2115bc2a09c',1,'tram::UI']]], ['getbasedisposition_21',['GetBaseDisposition',['../classtram_1_1_ext_1_1_kitchensink_1_1_character.html#ad00663d7d18b7b6d37adaf0b6337b8a5',1,'tram::Ext::Kitchensink::Character']]], ['getbob_22',['GetBob',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#aefecd2a76d3631867157caa5ba9b7c9a',1,'tram::Ext::Camera::FirstPersonCamera']]], ['getcell_23',['GetCell',['../classtram_1_1_entity.html#a9fe6fef78260ef5d7a3dc425e26ca375',1,'tram::Entity::GetCell()'],['../classtram_1_1_transition.html#ac2617a4858326884753cc3198c7d6560',1,'tram::Transition::GetCell()']]], ['getcharacterloyalty_24',['GetCharacterLoyalty',['../classtram_1_1_ext_1_1_kitchensink_1_1_faction.html#a9fa045c160d1fecb4cde3f76ab729ffa',1,'tram::Ext::Kitchensink::Faction']]], ['getcharacterrank_25',['GetCharacterRank',['../classtram_1_1_ext_1_1_kitchensink_1_1_faction.html#af48b732c21adc306f5856cb68ab300bf',1,'tram::Ext::Kitchensink::Faction']]], ['getcollisiongroup_26',['GetCollisionGroup',['../classtram_1_1_physics_component.html#aa0797c00f3d5e3a0ccb35da8b3ac42b2',1,'tram::PhysicsComponent::GetCollisionGroup()'],['../classtram_1_1_trigger_component.html#a93405806332d5309d8ab674c072d2461',1,'tram::TriggerComponent::GetCollisionGroup()']]], ['getcollisionmask_27',['GetCollisionMask',['../classtram_1_1_physics_component.html#a6d048406bb6f934d3167d046cf23d42a',1,'tram::PhysicsComponent::GetCollisionMask()'],['../classtram_1_1_trigger_component.html#a04476746aae520a06b1ec9fe65c0a5a0',1,'tram::TriggerComponent::GetCollisionMask()']]], ['getcolor_28',['GetColor',['../classtram_1_1_light_component.html#a71e038c2e9a0cde417f2b1899ff87349',1,'tram::LightComponent::GetColor()'],['../classtram_1_1_render_1_1_material.html#a0c43d7ae57a787c8ea3f69341d98be2d',1,'tram::Render::Material::GetColor()']]], ['getcontents_29',['GetContents',['../classtram_1_1_disk_reader.html#a57f73b425546a6fde55c2d863d8f095c',1,'tram::DiskReader::GetContents()'],['../classtram_1_1_file_reader.html#a359b60e4d588f6721a56bf619e85dded',1,'tram::FileReader::GetContents()']]], ['getcontext_30',['GetContext',['../namespacetram_1_1_render_1_1_a_p_i.html#a1132a0b2a9d3f0e2cf62dc5db40a6504',1,'tram::Render::API']]], ['getcontrollercomponent_31',['GetControllerComponent',['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html#adfe0bb1d9761a59c4d36a83239fea93a',1,'tram::Ext::Kitchensink::AIAgent']]], ['getcurrentmonitor_32',['GetCurrentMonitor',['../namespacetram_1_1_platform_1_1_window.html#a3a71748e1f64a454dc9b47260b67b035',1,'tram::Platform::Window']]], ['getdebugmode_33',['getDebugMode',['../classtram_1_1_physics_1_1_a_p_i_1_1_physics_debug_draw.html#ae8dfaf1b441990503c10aad22f87cf3f',1,'tram::Physics::API::PhysicsDebugDraw']]], ['getdeltatick_34',['GetDeltaTick',['../namespacetram.html#ac5510fd86603682d0cac4954bff11620',1,'tram']]], ['getdeltatime_35',['GetDeltaTime',['../namespacetram.html#af8af5a4731abe7a1b4cc34780bd1eb06',1,'tram']]], ['getdirectionfacing_36',['GetDirectionFacing',['../classtram_1_1_player_component.html#a521c6d15a3a7feb9d6f03fb08e7da7e0',1,'tram::PlayerComponent']]], ['getdisposition_37',['GetDisposition',['../classtram_1_1_ext_1_1_kitchensink_1_1_faction.html#a0fccfeb5e5a198b94e2cef7825bfd113',1,'tram::Ext::Kitchensink::Faction::GetDisposition()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_character.html#a763a7386afa5ddb550fdd616acdebdc7',1,'tram::Ext::Kitchensink::Character::GetDisposition()']]], ['getdistance_38',['GetDistance',['../classtram_1_1_light_component.html#a12116f3c73a230d6f2ba928d0f6af33f',1,'tram::LightComponent']]], ['getentities_39',['GetEntities',['../classtram_1_1_world_cell.html#a9521430ae60c9fa514b98fa2e5a5c01f',1,'tram::WorldCell']]], ['getentitycount_40',['GetEntityCount',['../classtram_1_1_world_cell.html#a8d1863ca31c03feec24439e296d3f5fe',1,'tram::WorldCell']]], ['getenvironmentprobes_41',['GetEnvironmentProbes',['../classtram_1_1_render_1_1_light_graph.html#a07e34cb8706381d97bc4e138a625a1bf',1,'tram::Render::LightGraph']]], ['getequippeditem_42',['GetEquippedItem',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#a8058f00b02aaddacea2eaee65dd5abe2',1,'tram::Ext::Kitchensink::Inventory']]], ['getfardistance_43',['GetFarDistance',['../classtram_1_1_render_1_1_model.html#a6552762c2c420643726ac9e6dac495af',1,'tram::Render::Model']]], ['getfirst_44',['GetFirst',['../classtram_1_1_pool.html#ad803699e4dab92b42ba4a86180f60acc',1,'tram::Pool']]], ['getflags_45',['GetFlags',['../namespacetram_1_1_render_1_1_a_p_i.html#a01464db10e614acc7db508e0ecdc642c',1,'tram::Render::API']]], ['getfloat_46',['GetFloat',['../classtram_1_1_value.html#a6c06918b9f54415fb97892f2009d54b1',1,'tram::Value']]], ['getfollowing_47',['GetFollowing',['../classtram_1_1_ext_1_1_camera_1_1_camera.html#abb082f0d019697d9555343905772e265',1,'tram::Ext::Camera::Camera']]], ['getformat_48',['GetFormat',['../classtram_1_1_render_1_1_a_p_i_1_1_linked_shader.html#a610721a4bf5b10a94a192863f45e366f',1,'tram::Render::API::LinkedShader']]], ['getfragmentshader_49',['GetFragmentShader',['../classtram_1_1_render_1_1_a_p_i_1_1_linked_shader.html#a8ac81e93a84a25d344d1d60fa614506c',1,'tram::Render::API::LinkedShader']]], ['getframe_50',['GetFrame',['../namespacetram.html#aa3909d6bfd02679f663541f787f9c7b4',1,'tram']]], ['getframes_51',['GetFrames',['../classtram_1_1_render_1_1_sprite.html#a259105984bbeb254bb9124fba78a2596',1,'tram::Render::Sprite']]], ['getframetime_52',['GetFrameTime',['../namespacetram.html#aed55d85a1ab5cc85a558d180313eb64e',1,'tram']]], ['getglobal_53',['GetGlobal',['../classtram_1_1_script_1_1_interface.html#a7265800ebc35b2221b25a4ba843b0697',1,'tram::Script::Interface::GetGlobal()'],['../namespacetram_1_1_script.html#a917b2fc2737b5d72d66ce869fad40b2a',1,'tram::Script::GetGlobal()']]], ['getheader_54',['GetHeader',['../classtram_1_1_render_1_1_animation.html#a97148015f708147071e224e18128b442',1,'tram::Render::Animation']]], ['getheadercount_55',['GetHeaderCount',['../classtram_1_1_render_1_1_animation.html#a8d75cbe7f57a4b7b77f38ca710cadf30',1,'tram::Render::Animation']]], ['getheight_56',['GetHeight',['../classtram_1_1_render_1_1_material.html#a98628ad183a5289b9f6f7a407c9005c0',1,'tram::Render::Material']]], ['getid_57',['GetID',['../classtram_1_1_entity.html#a5ec303fd15c52e42d390eabeece5365f',1,'tram::Entity']]], ['getindexarray_58',['GetIndexArray',['../classtram_1_1_render_1_1_model.html#a435b6a7e005789637eacb30bc37bdbb9',1,'tram::Render::Model']]], ['getindexranges_59',['GetIndexRanges',['../classtram_1_1_render_1_1_model.html#a71b7db1a28b591e3d4fa7eb58b6c196d',1,'tram::Render::Model']]], ['getinputstate_60',['GetInputState',['../namespacetram_1_1_u_i.html#a6865ff9dd91ce26566f1867e6005980d',1,'tram::UI']]], ['getint_61',['GetInt',['../classtram_1_1_value.html#a3673f59ae7ba469c1d088fffe04cc4dd',1,'tram::Value']]], ['getitemcount_62',['GetItemCount',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory_manager.html#a7eb3c4a11513b9eed6fe34bd89cd43dc',1,'tram::Ext::Kitchensink::InventoryManager::GetItemCount()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_list_inventory_manager.html#a0f45f90b7e0f0a5223dd478538530da9',1,'tram::Ext::Kitchensink::ListInventoryManager::GetItemCount()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#a4950e478978bec57a319ab31fa25c944',1,'tram::Ext::Kitchensink::Inventory::GetItemCount()']]], ['getitems_63',['GetItems',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory_manager.html#a3b028ac27cbb2380d88ae2775f3c3272',1,'tram::Ext::Kitchensink::InventoryManager::GetItems()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_list_inventory_manager.html#a1b9b03dd24817da053563d6e0a39a980',1,'tram::Ext::Kitchensink::ListInventoryManager::GetItems()']]], ['getkeyboardaction_64',['GetKeyboardAction',['../namespacetram_1_1_u_i.html#a151dea9e688c18e631f2aaef4758497b',1,'tram::UI']]], ['getkeyboardactionname_65',['GetKeyboardActionName',['../namespacetram_1_1_u_i.html#aecde138c9de471bd9ef945d534669832',1,'tram::UI']]], ['getkeyboardkeyname_66',['GetKeyboardKeyName',['../namespacetram_1_1_u_i.html#a6c013d6464921c3bdcb5b3a2906148ce',1,'tram::UI']]], ['getkeyframecount_67',['GetKeyframeCount',['../classtram_1_1_render_1_1_animation.html#a815b1115dfa11c8e21cf305d24ac49f8',1,'tram::Render::Animation']]], ['getkeyframes_68',['GetKeyframes',['../classtram_1_1_render_1_1_animation.html#afa51937c2a487fe82bafdb2d4056e30c',1,'tram::Render::Animation']]], ['getlast_69',['GetLast',['../structtram_1_1_event.html#a181fc927e0b983c6d1af3d0a1ed4ed15',1,'tram::Event::GetLast()'],['../structtram_1_1_message.html#a19be3fd1d26c56de4fcd721376b39c90',1,'tram::Message::GetLast()'],['../classtram_1_1_pool.html#a6ccf1a748fa7d1f7caa10d7358f64b50',1,'tram::Pool::GetLast()']]], ['getlastptr_70',['GetLastPtr',['../classtram_1_1_stack.html#a961d9d65f2fce72c72514203eefea7eb',1,'tram::Stack']]], ['getlength_71',['GetLength',['../classtram_1_1_audio_1_1_sound.html#a9c780daf835dce88cf19d267aa427266',1,'tram::Audio::Sound::GetLength()'],['../classtram_1_1_stack.html#a53b43f3330a4e398271d8c71d119e99a',1,'tram::Stack::GetLength()']]], ['getlightmap_72',['GetLightmap',['../classtram_1_1_render_component.html#a5feee4df39aba6a4652817159cc5d4c8',1,'tram::RenderComponent']]], ['getlocation_73',['GetLocation',['../classtram_1_1_render_component.html#ac1c0477f22ef04154367915c0294848b',1,'tram::RenderComponent::GetLocation()'],['../classtram_1_1_entity.html#a7bf177c08614dd697b23cd021c7fbfda',1,'tram::Entity::GetLocation()']]], ['getlookdirection_74',['GetLookDirection',['../classtram_1_1_controller_component.html#a94439cce310fb5bc23485b3e23f19cfb',1,'tram::ControllerComponent']]], ['getlookrotation_75',['GetLookRotation',['../classtram_1_1_player_component.html#adcba02c6226d985aece150ce291830f6',1,'tram::PlayerComponent']]], ['getmaterial_76',['GetMaterial',['../classtram_1_1_render_1_1_material.html#a22ae5b8db7d434e07318cf201defc953',1,'tram::Render::Material::GetMaterial()'],['../classtram_1_1_render_1_1_sprite.html#a7c98ddbe57968a26bb8bb5f6a86ca359',1,'tram::Render::Sprite::GetMaterial()']]], ['getmaterials_77',['GetMaterials',['../classtram_1_1_render_1_1_model.html#ae764be80aa1071ca7f459bb7b341fd8e',1,'tram::Render::Model']]], ['getmaterialtypename_78',['GetMaterialTypeName',['../namespacetram_1_1_render.html#a0356f2f33a144760b168fbc84d5c1931',1,'tram::Render']]], ['getmaxindexrangelength_79',['GetMaxIndexRangeLength',['../namespacetram_1_1_render_1_1_a_p_i.html#a18bc917a04c062cb18a310880301f545',1,'tram::Render::API']]], ['getmediumlist_80',['GetMediumList',['../classtram_1_1_file_writer.html#abcf99237a3774981e16c871ec68b1473',1,'tram::FileWriter']]], ['getmodel_81',['GetModel',['../classtram_1_1_animation_component.html#a10847fac3c1cd2e8750fda898eff512d',1,'tram::AnimationComponent::GetModel()'],['../classtram_1_1_physics_component.html#af9c6e58635ec55d523a23a0f70f8216d',1,'tram::PhysicsComponent::GetModel()'],['../classtram_1_1_render_component.html#a743ccc0b2357cec2f80a4db1f5dc301c',1,'tram::RenderComponent::GetModel()'],['../classtram_1_1_trigger_component.html#aac9479cb3992294f494eefba8061ad1d',1,'tram::TriggerComponent::GetModel()']]], ['getmonitorcount_82',['GetMonitorCount',['../namespacetram_1_1_platform_1_1_window.html#a254ec949eaaef45870d59c02a4c35381',1,'tram::Platform::Window']]], ['getname_83',['GetName',['../structtram_1_1_event.html#aee54dc533e45e7e43fb0ada6308f8d80',1,'tram::Event::GetName()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_attribute_info.html#a4dddff605761144769af37f736b0d99a',1,'tram::Ext::Kitchensink::AttributeInfo::GetName()'],['../namespacetram_1_1_system.html#a2ca63f47f3cfdfd0eb183d46b36f9701',1,'tram::System::GetName()'],['../classtram_1_1_entity.html#afe85e71ed0b3321908e0c86c58a71271',1,'tram::Entity::GetName()'],['../structtram_1_1_message.html#adad7616c7def22014e7c8f276e65fe77',1,'tram::Message::GetName()'],['../classtram_1_1_navmesh.html#aea73348a1b3d10864820e6b1dd711b94',1,'tram::Navmesh::GetName()'],['../classtram_1_1_resource.html#a2967c7a144291895ef629bb1b5d15acb',1,'tram::Resource::GetName()'],['../classtram_1_1_script_1_1_interface.html#a7a41316c12ef797af3cd9fe6cc89bbbe',1,'tram::Script::Interface::GetName()'],['../structtram_1_1_signal.html#a0f13121126c5ae11e4ae73a4cbfdbcdd',1,'tram::Signal::GetName()'],['../classtram_1_1_world_cell.html#ac65638978ab32fe02e3bcebf5feaf6b9',1,'tram::WorldCell::GetName()'],['../classtram_1_1_render_1_1_a_p_i_1_1_vertex_shader.html#a3be13e88fa61161353ca4f29254e3957',1,'tram::Render::API::VertexShader::GetName()'],['../classtram_1_1_render_1_1_a_p_i_1_1_fragment_shader.html#a83780b2e28d8d0432404f10a0a60e7bb',1,'tram::Render::API::FragmentShader::GetName()']]], ['getnavmeshnode_84',['GetNavmeshNode',['../classtram_1_1_navmesh.html#a9b5d215639881339b98b16b5c2bb56da',1,'tram::Navmesh']]], ['getneardistance_85',['GetNearDistance',['../classtram_1_1_render_1_1_model.html#aaf703730644d7fab65d1a9a21534b1d7',1,'tram::Render::Model']]], ['getnodes_86',['GetNodes',['../classtram_1_1_navmesh.html#a6f0d4a5f4fa94bb06a7731126c1f03e9',1,'tram::Navmesh']]], ['getoctant_87',['GetOctant',['../classtram_1_1_octree.html#a886968cb23838b42a4ea381eda9a93b4',1,'tram::Octree']]], ['getorigin_88',['GetOrigin',['../classtram_1_1_render_1_1_model.html#a3d3484e3d729819081e525321fa0cc22',1,'tram::Render::Model']]], ['getparent_89',['GetParent',['../classtram_1_1_entity_component.html#a678a0fce6a2deac1fa04baaed4db3009',1,'tram::EntityComponent']]], ['getpool_90',['GetPool',['../classtram_1_1_pool_proxy.html#a1a4541a7cb8ccbb3fe2c074ecece4905',1,'tram::PoolProxy']]], ['getpose_91',['GetPose',['../classtram_1_1_animation_component.html#a04aa5c1f59cfafd2485a5f8ac1376cc1',1,'tram::AnimationComponent']]], ['getposition_92',['GetPosition',['../classtram_1_1_path_follower.html#a9e95681a6535da9569bea660127a52bb',1,'tram::PathFollower::GetPosition()'],['../classtram_1_1_ext_1_1_camera_1_1_camera.html#af738a04eb564e9d69d6f0c1db42f9f5b',1,'tram::Ext::Camera::Camera::GetPosition()']]], ['getprompts_93',['GetPrompts',['../classtram_1_1_ext_1_1_kitchensink_1_1_dialog_controller.html#ae25eee3d66e055232539c9c5fe471c39',1,'tram::Ext::Kitchensink::DialogController']]], ['getproperty_94',['GetProperty',['../classtram_1_1_render_1_1_material.html#a0c225923c45cf941c0b3e9d16897411d',1,'tram::Render::Material']]], ['getreader_95',['GetReader',['../classtram_1_1_file_reader.html#adeafb2e1ec0d9d2c9e2ea25b0d705f14',1,'tram::FileReader']]], ['getreferences_96',['GetReferences',['../classtram_1_1_resource.html#adbe7a1f09b0aa6eec9c5f930180008fb',1,'tram::Resource']]], ['getrelation_97',['GetRelation',['../classtram_1_1_ext_1_1_kitchensink_1_1_faction.html#aacebbb1b8bcdf040a4d70a88d91c2bb7',1,'tram::Ext::Kitchensink::Faction']]], ['getresource_98',['GetResource',['../classtram_1_1_pool_ptr.html#a05567d055c22c94213c1108f1197dc16',1,'tram::PoolPtr']]], ['getrigidbodyvelocity_99',['GetRigidbodyVelocity',['../namespacetram_1_1_physics_1_1_a_p_i.html#a1f0061f6029ee06aa8be370d33d1a48c',1,'tram::Physics::API']]], ['getrotation_100',['GetRotation',['../classtram_1_1_render_component.html#abb6747392d707e0dca643a0400adef75',1,'tram::RenderComponent::GetRotation()'],['../classtram_1_1_ext_1_1_camera_1_1_camera.html#ac812c8e3643823efb034b61ec368047a',1,'tram::Ext::Camera::Camera::GetRotation()'],['../classtram_1_1_entity.html#adbb214d504101d5113d149fa0f06e162',1,'tram::Entity::GetRotation()']]], ['getscale_101',['GetScale',['../classtram_1_1_render_component.html#a82831dd25d49e53768209fe6b22ec736',1,'tram::RenderComponent']]], ['getscaling_102',['GetScaling',['../namespacetram_1_1_g_u_i.html#a6592f1eadaa540d5d79a87d24363d69e',1,'tram::GUI']]], ['getscreen_103',['GetScreen',['../namespacetram_1_1_render_1_1_a_p_i.html#a746afea6f8369d0a1570bb46b7a6e9b3',1,'tram::Render::API']]], ['getscreenheight_104',['GetScreenHeight',['../namespacetram_1_1_u_i.html#a982ad2ea96f9db1688a0004ba480bb66',1,'tram::UI']]], ['getscreenwidth_105',['GetScreenWidth',['../namespacetram_1_1_u_i.html#a761e8c28f0e3748eb8b618b1fd393aca',1,'tram::UI']]], ['getsearchlist_106',['GetSearchList',['../classtram_1_1_file_reader.html#a13fadbba64b0b75fc9c52bf64fbfe116',1,'tram::FileReader']]], ['getsettings_107',['GetSettings',['../namespacetram_1_1_settings.html#a4d6040ae5a9915dcc4d905693a63b67a',1,'tram::Settings']]], ['getshader_108',['GetShader',['../classtram_1_1_render_1_1_a_p_i_1_1_vertex_shader.html#ac6d1cade6063ff972474b5d23e95722c',1,'tram::Render::API::VertexShader::GetShader()'],['../classtram_1_1_render_1_1_a_p_i_1_1_fragment_shader.html#a3e89b66d402de11dc6d4622d71569535',1,'tram::Render::API::FragmentShader::GetShader()'],['../classtram_1_1_render_1_1_a_p_i_1_1_linked_shader.html#acf41b46206e406a90a1cd1992b902760',1,'tram::Render::API::LinkedShader::GetShader()']]], ['getshape_109',['GetShape',['../classtram_1_1_physics_1_1_collision_model.html#a4f42c4b06373d96f98faffedc3e5c098',1,'tram::Physics::CollisionModel']]], ['getshortname_110',['GetShortName',['../namespacetram_1_1_system.html#aa9b274cc4e89cca2157eae886db07355',1,'tram::System']]], ['getsignaltable_111',['GetSignalTable',['../classtram_1_1_entity.html#a8439e1ea14f61418caf8fccc00315bbb',1,'tram::Entity']]], ['getsize_112',['GetSize',['../classtram_1_1_file_reader.html#a28bb4f3c47fb4aa8a2241b2944986bdc',1,'tram::FileReader::GetSize()'],['../classtram_1_1_pool.html#afcc89e07039f40d888ef8bb970467ff2',1,'tram::Pool::GetSize()'],['../classtram_1_1_disk_reader.html#ad2b0b2e4625d5d1a6e4d914b561fc4e7',1,'tram::DiskReader::GetSize()']]], ['getsound_113',['GetSound',['../classtram_1_1_ext_1_1_kitchensink_1_1_sound_table.html#ab1f347b3f34189f5b870633c9ee8d52b',1,'tram::Ext::Kitchensink::SoundTable']]], ['getspecularexponent_114',['GetSpecularExponent',['../classtram_1_1_render_1_1_material.html#a8bfc4e66a2677349bdd4cec129005d51',1,'tram::Render::Material']]], ['getspeculartransparency_115',['GetSpecularTransparency',['../classtram_1_1_render_1_1_material.html#a4ffa819bc7d2db2bc228ae5649fbf5cd',1,'tram::Render::Material']]], ['getspecularweight_116',['GetSpecularWeight',['../classtram_1_1_render_1_1_material.html#a2ab043c6f5e8a512ac9ca34916b43485',1,'tram::Render::Material']]], ['getsprite_117',['GetSprite',['../classtram_1_1_decal_component.html#afc221ff999d6777f7d0bf15a63e8b11b',1,'tram::DecalComponent::GetSprite()'],['../classtram_1_1_particle_component.html#a13b0e3b68f2b4fd346525baba49a7481',1,'tram::ParticleComponent::GetSprite()'],['../classtram_1_1_sprite_component.html#afe9a51092931932104237e352f15267f',1,'tram::SpriteComponent::GetSprite()']]], ['getstat_118',['GetStat',['../namespacetram_1_1_stats.html#a47a75adf92f441eaf8c99564471f028b',1,'tram::Stats::GetStat(Resource resource)'],['../namespacetram_1_1_stats.html#ac6bed4088975e4651fdcffd10f2d1ddb',1,'tram::Stats::GetStat(System::system_t system)']]], ['getstataverage_119',['GetStatAverage',['../namespacetram_1_1_stats.html#a9fb3323e6726d2010fab092bc9180dd1',1,'tram::Stats']]], ['getstatuncollated_120',['GetStatUncollated',['../namespacetram_1_1_stats.html#adc7ecc593e1e434e5df1f573651e146a',1,'tram::Stats']]], ['getstatus_121',['GetStatus',['../classtram_1_1_resource.html#a52f4c25fe2642109f7f35088419cd086',1,'tram::Resource::GetStatus()'],['../classtram_1_1_disk_reader.html#afc56907851741e91da516352020ca264',1,'tram::DiskReader::GetStatus()'],['../classtram_1_1_disk_writer.html#a8b530f156118353d4ba12d332d4e832a',1,'tram::DiskWriter::GetStatus()'],['../classtram_1_1_file_reader.html#afe64d8768d91a14f788e7d518591a572',1,'tram::FileReader::GetStatus()'],['../classtram_1_1_file_writer.html#ae51986fead14e4b024fea535c0986cec',1,'tram::FileWriter::GetStatus()']]], ['getstoredcollisions_122',['GetStoredCollisions',['../classtram_1_1_trigger_component.html#af88fca014f6f9615930c02f82ae00db3',1,'tram::TriggerComponent']]], ['getsystemcount_123',['GetSystemCount',['../namespacetram_1_1_system.html#a338ea827ae004b8133debac8bb1428a6',1,'tram::System']]], ['gettangent_124',['GetTangent',['../classtram_1_1_path_follower.html#abdf8f79ad276308156aa2780e24412c9',1,'tram::PathFollower']]], ['gettexture_125',['GetTexture',['../classtram_1_1_render_1_1_material.html#a7364618a398768519758ff9ffd7b3c4b',1,'tram::Render::Material']]], ['gettick_126',['GetTick',['../namespacetram.html#a45d3de117b68f4c584f4b9012b230557',1,'tram']]], ['getticktime_127',['GetTickTime',['../namespacetram.html#a370b9480a4f179e6e4c41d9d6a70fcb7',1,'tram']]], ['gettime_128',['GetTime',['../namespacetram_1_1_platform_1_1_window.html#a25eea05c5898d99a27460394bc17ee92',1,'tram::Platform::Window']]], ['gettransitions_129',['GetTransitions',['../classtram_1_1_world_cell.html#a2fa5f2ba361a94f37a1f981771cdafaa',1,'tram::WorldCell']]], ['gettype_130',['GetType',['../structtram_1_1_signal.html#a326e6aa18ff7b00902541db375c050af',1,'tram::Signal::GetType()'],['../structtram_1_1_message.html#ad27f76114ca903dded8f84890c302119',1,'tram::Message::GetType()'],['../structtram_1_1_event.html#af584b523e077a59452a91153334e75cd',1,'tram::Event::GetType()'],['../classtram_1_1_entity.html#a552606c9eec8f007aaf42d251aaaa264',1,'tram::Entity::GetType()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_quest_entity.html#acf19095d4330eb1ec6628be8e86b6e5c',1,'tram::Ext::Kitchensink::QuestEntity::GetType()'],['../classtram_1_1_trigger.html#aa0bd3f37d64f909978372c5323778438',1,'tram::Trigger::GetType()'],['../classtram_1_1_static_world_object.html#a7ad11c2699b96d4f78f55d032a4e63e9',1,'tram::StaticWorldObject::GetType()'],['../classtram_1_1_sound.html#aa8a9115da334eec12b8b837d9d47b689',1,'tram::Sound::GetType()'],['../classtram_1_1_scriptable.html#a1e3c2da150ec8c8b7b075867cc6165b1',1,'tram::Scriptable::GetType()'],['../classtram_1_1_player.html#a10a805e40469321fb7d6fa1f66d0c0eb',1,'tram::Player::GetType()'],['../classtram_1_1_marker.html#ab7246a7be4136d9e70ba8a253b00a2d5',1,'tram::Marker::GetType()'],['../classtram_1_1_light.html#aaee848b4fe419b1fc6c82282b31aa9dd',1,'tram::Light::GetType()'],['../classtram_1_1_decoration.html#a7e637e1beaf0cfc3a933d7a72304122b',1,'tram::Decoration::GetType()'],['../classtram_1_1_crate.html#a378f96494bd77812a24ca507be4ac434',1,'tram::Crate::GetType()'],['../classtram_1_1_render_1_1_a_p_i_1_1_linked_shader.html#a59da53365a58b0590b41d763cac529c7',1,'tram::Render::API::LinkedShader::GetType()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a7ce13fa0441d27759aab3911ec2940ec',1,'tram::Ext::Kitchensink::Button::GetType()'],['../classtram_1_1_value_ptr.html#a9c37ca2a5950081f0d84e161d3f8fd50',1,'tram::ValuePtr::GetType()'],['../classtram_1_1_render_1_1_material.html#a9ab0ad47f18952f0014e01714435309f',1,'tram::Render::Material::GetType()'],['../classtram_1_1_value.html#aec15d455c732150f97eb47662f23fedf',1,'tram::Value::GetType()']]], ['getvalidnexttopics_131',['GetValidNextTopics',['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_topic.html#a92b21c6a95d462272577358cc702d16f',1,'tram::Ext::Kitchensink::DialogTopic']]], ['getvariable_132',['GetVariable',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest.html#a28b905e9fb5bec79e66daad45578a60c',1,'tram::Ext::Kitchensink::Quest']]], ['getvelocity_133',['GetVelocity',['../classtram_1_1_physics_component.html#a61fef009717a9e4724dee61359319094',1,'tram::PhysicsComponent']]], ['getversion_134',['GetVersion',['../namespacetram.html#a3b5616291800641604306bbf678b3873',1,'tram']]], ['getvertexarray_135',['GetVertexArray',['../classtram_1_1_render_1_1_model.html#ac05721211dc33f67e5f59a4da99b4b96',1,'tram::Render::Model']]], ['getvertexdefinition_136',['GetVertexDefinition',['../namespacetram_1_1_render.html#ae7cb3ec82d35f3a4b5bf4fbb7f15a429',1,'tram::Render']]], ['getvertexformat_137',['GetVertexFormat',['../classtram_1_1_render_1_1_model.html#a878a07665c85cc2b0b45e9eed4012a56',1,'tram::Render::Model']]], ['getvertexformatname_138',['GetVertexFormatName',['../namespacetram_1_1_render.html#ac38b6a74526f6b0bcc15fb23dbc965b6',1,'tram::Render']]], ['getvertexshader_139',['GetVertexShader',['../classtram_1_1_render_1_1_a_p_i_1_1_linked_shader.html#abd8d0225e99fe0bda893abde0429e0fa',1,'tram::Render::API::LinkedShader']]], ['getviewdistance_140',['GetViewDistance',['../namespacetram_1_1_render.html#a0a15770929caa8b52620ed6b2cd3f731',1,'tram::Render']]], ['getviewfov_141',['GetViewFov',['../namespacetram_1_1_render.html#a91420cfff2ed4a2548d27a0924000187',1,'tram::Render']]], ['getviewposition_142',['GetViewPosition',['../namespacetram_1_1_render.html#acfbfc3fc3b9bcc20aba46673364bfa6b',1,'tram::Render']]], ['getviewrotation_143',['GetViewRotation',['../namespacetram_1_1_render.html#a588afc5ab26e5dea5924df08c70f95bf',1,'tram::Render']]], ['getvolume_144',['GetVolume',['../classtram_1_1_world_cell.html#a5d383de9e1314938cf44ba8dc976150a',1,'tram::WorldCell::GetVolume()'],['../namespacetram_1_1_audio.html#ac8184c5ea205ddd19e0795f8ffdd7c1c',1,'tram::Audio::GetVolume()']]], ['getwaitingresources_145',['GetWaitingResources',['../namespacetram_1_1_async.html#af447ff406255f241322da550d5d027a3',1,'tram::Async']]], ['getweight_146',['GetWeight',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a69082df187434d24ec21dbcafa93f2ec',1,'tram::Ext::Camera::FirstPersonCamera']]], ['getwidth_147',['GetWidth',['../classtram_1_1_render_1_1_material.html#a3c06e86d3701b7377e4a86f4d6faeaac',1,'tram::Render::Material']]], ['getworldtransform_148',['getWorldTransform',['../classtram_1_1_physics_1_1_a_p_i_1_1_callback_motion_state.html#a3c4651578a5cc3573ddf5dad03eb305f',1,'tram::Physics::API::CallbackMotionState']]], ['getwriter_149',['GetWriter',['../classtram_1_1_file_writer.html#acdf5bcd53cc32c0c7f268d73a9fca3cc',1,'tram::FileWriter']]], ['gl_150',['gl',['../structtram_1_1_render_1_1material__t.html#a8a2afd08577348cd6d892f0fe0f2743f',1,'tram::Render::material_t::gl()'],['../structtram_1_1_render_1_1light__t.html#a0f207f290e0ca7fbdf9df1a3232332aa',1,'tram::Render::light_t::gl()'],['../structtram_1_1_render_1_1drawlistentry__t.html#a926aab37c6029049aa1910bbee5f9a47',1,'tram::Render::drawlistentry_t::gl()']]], ['gl_5findex_5fbuffer_151',['gl_index_buffer',['../structtram_1_1_render_1_1indexarray__t.html#ab8718d1b7ff7dfb2e5dfd4bd4feff552',1,'tram::Render::indexarray_t']]], ['gl_5ftexture_152',['gl_texture',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_material.html#a910bf64758275e7a85ddf7cb1762b461',1,'tram::Render::API::GLMaterial']]], ['gl_5ftexture_5fhandle_153',['gl_texture_handle',['../structtram_1_1_render_1_1texturehandle__t.html#a43671e152005e2c0623b3492672751ee',1,'tram::Render::texturehandle_t']]], ['gl_5fvertex_5farray_154',['gl_vertex_array',['../structtram_1_1_render_1_1vertexarray__t.html#a823c61d8f42e8d1f378d8e7208163371',1,'tram::Render::vertexarray_t']]], ['gl_5fvertex_5fbuffer_155',['gl_vertex_buffer',['../structtram_1_1_render_1_1vertexarray__t.html#abf17d9003261e94d8d26b6f32e29b23f',1,'tram::Render::vertexarray_t']]], ['gldrawlistentry_156',['GLDrawListEntry',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#af7bb6164cd2f0ca88d08e2dd524f2c28',1,'tram::Render::API::GLDrawListEntry::GLDrawListEntry()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html',1,'tram::Render::API::GLDrawListEntry']]], ['glfw_2ecpp_157',['glfw.cpp',['../glfw_8cpp.html',1,'']]], ['gllight_158',['GLLight',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_light.html',1,'tram::Render::API']]], ['glmaterial_159',['GLMaterial',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_material.html',1,'tram::Render::API']]], ['glyph_160',['Glyph',['../namespacetram_1_1_g_u_i.html#ac9ba68cbd0b4343af392b64083f10f13',1,'tram::GUI::Glyph(font_t font, glyph_t glyph)'],['../namespacetram_1_1_g_u_i.html#ab9cbc24cc6766595f1a063de7c32e568',1,'tram::GUI::Glyph(glyph_t glyph)']]], ['glyph_5ft_161',['glyph_t',['../namespacetram_1_1_g_u_i.html#afecdfd821a1e89c4d62d0f8b420ca33a',1,'tram::GUI']]], ['glyphborderv_162',['GlyphBorderV',['../namespacetram_1_1_g_u_i.html#a34d71791d5b4905b42111ea613a087e6',1,'tram::GUI']]], ['glyphheight_163',['GlyphHeight',['../namespacetram_1_1_g_u_i.html#a5998935f32f2b821313449f0254dccf0',1,'tram::GUI']]], ['glyphtype_164',['GlyphType',['../namespacetram_1_1_g_u_i.html#aed177dc7d46e43f3cf52662fecbaf0a6',1,'tram::GUI']]], ['glyphwidth_165',['GlyphWidth',['../namespacetram_1_1_g_u_i.html#a643f4e389961bc9ccb05092ea58cccc6',1,'tram::GUI']]], ['graph_166',['Graph',['../classtram_1_1_graph.html',1,'tram']]], ['graph_2ecpp_167',['graph.cpp',['../framework_2graph_8cpp.html',1,'(Global Namespace)'],['../audio_2graph_8cpp.html',1,'(Global Namespace)']]], ['graph_2eh_168',['graph.h',['../framework_2graph_8h.html',1,'(Global Namespace)'],['../audio_2graph_8h.html',1,'(Global Namespace)']]], ['gravity_169',['gravity',['../classtram_1_1_particle_component.html#a49ca6619dc2cc1f51243c26b9700650a',1,'tram::ParticleComponent']]], ['greater_170',['Greater',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a7279723d0adb71d2ac2bb9a960f3029d',1,'tram::Ext::Kitchensink::QuestVariable']]], ['greaterorequal_171',['GreaterOrEqual',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#aacf971b4d14c9d97ab7f522f53409a35',1,'tram::Ext::Kitchensink::QuestVariable']]], ['groups_172',['groups',['../structtram_1_1_render_1_1_dynamic_model_data.html#ab12ffc9bc3a25b66d24b120f4563f1b3',1,'tram::Render::DynamicModelData']]], ['gui_173',['GUI',['../namespacetram_1_1_system.html#a02b5e7a5340ef5ca42a650ca4d8ade65a26ca0a3dcc38523be3b96f153dac237a',1,'tram::System']]], ['gui_2ecpp_174',['gui.cpp',['../gui_8cpp.html',1,'']]], ['gui_2eh_175',['gui.h',['../gui_8h.html',1,'']]] ]; ================================================ FILE: docs/cppapi/search/all_8.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/all_8.js ================================================ var searchData= [ ['h_0',['h',['../structtram_1_1_g_u_i_1_1_frame_object.html#a70f4e81acd34d11127d304faee8e9752',1,'tram::GUI::FrameObject']]], ['half_5fextent_1',['half_extent',['../structtram_1_1_octree_1_1_node.html#a452e2b6329f9a981b6eb3738613f871d',1,'tram::Octree::Node']]], ['handle_2',['handle',['../structtram_1_1_listener_info.html#aee785f4d7173a7fc8a9ea904251990c2',1,'tram::ListenerInfo::handle()'],['../structtram_1_1_render_1_1_light_tree_1_1_light.html#a525f786cf65ecf4555843a773941e519',1,'tram::Render::LightTree::Light::handle()']]], ['harmonic_3',['harmonic',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#a74b3a8569c8bc84e8df38aa62da38f20',1,'tram::Render::API::GLDrawListEntry']]], ['has_5flight_4',['has_light',['../structtram_1_1_render_1_1_light_graph_1_1_node.html#aa1ce3c4277d9f6afbd8360c932ddeb9f',1,'tram::Render::LightGraph::Node']]], ['has_5freflection_5',['has_reflection',['../structtram_1_1_render_1_1_light_graph_1_1_node.html#a0fa39d48f3054f6ac06005afe60c8166',1,'tram::Render::LightGraph::Node']]], ['hasattribute_6',['HasAttribute',['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container.html#a68b8159d853b0027b4afe738b67707f9',1,'tram::Ext::Kitchensink::AttributeContainer']]], ['hasautomaticloading_7',['HasAutomaticLoading',['../classtram_1_1_world_cell.html#a9005d19a5708c2fc52d97c632ff638f6',1,'tram::WorldCell']]], ['hasbaseclass_8',['HasBaseClass',['../classtram_1_1_ext_1_1_kitchensink_1_1_character_class.html#a5e87837dea2d956226d92986b23dadd2',1,'tram::Ext::Kitchensink::CharacterClass']]], ['hascharacter_9',['HasCharacter',['../classtram_1_1_ext_1_1_kitchensink_1_1_faction.html#a52cf75871489b10c7a6bf1ca2ad407b1',1,'tram::Ext::Kitchensink::Faction']]], ['hasclass_10',['HasClass',['../classtram_1_1_ext_1_1_kitchensink_1_1_character.html#a7f663500e9a6aa3dad2ea05fdbf4226f',1,'tram::Ext::Kitchensink::Character']]], ['hash_5fparameter_11',['hash_parameter',['../classtram_1_1_hashmap.html#aed9ce370a0606d8f753370f537bd9ca5',1,'tram::Hashmap']]], ['hashmap_12',['Hashmap',['../classtram_1_1_hashmap.html#ac573657ae86fff9e00d4eea5e525f09c',1,'tram::Hashmap::Hashmap(const char *name, size_t max_size)'],['../classtram_1_1_hashmap.html#a0ffe9a0a3a55b18c2f01928055e3c8fc',1,'tram::Hashmap::Hashmap(const char *name, size_t max_size, std::initializer_list< std::pair< uint32_t, T > > list)'],['../classtram_1_1_hashmap.html',1,'tram::Hashmap< T >']]], ['hashmap_2eh_13',['hashmap.h',['../hashmap_8h.html',1,'']]], ['hasinteriorlighting_14',['HasInteriorLighting',['../classtram_1_1_world_cell.html#af0b8ff336e94162438f66b7670312345',1,'tram::WorldCell']]], ['head_15',['head',['../structtram_1_1_render_1_1_bone.html#ae3620af03d2adb4b04f0e1c9e1648800',1,'tram::Render::Bone']]], ['height_16',['height',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a0f62e3b657e2410379cb293cc1ac0da2',1,'tram::Ext::Kitchensink::ItemClass::height()'],['../structtram_1_1_physics_1_1_collision_shape.html#a2dd2e0e04264791e0f363e6aaf0a777d',1,'tram::Physics::CollisionShape::height()'],['../classtram_1_1_render_1_1_material.html#a51a02ef0d56c1cf312bbb92c97087e7b',1,'tram::Render::Material::height()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_texture.html#a5c8fdd2162a423532bc06502910f1579',1,'tram::Render::API::SWTexture::height()'],['../structtram_1_1_render_1_1_sprite_frame.html#a70f2bdc216f92de2f441546154a47114',1,'tram::Render::SpriteFrame::height()']]], ['helper_17',['helper',['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_vertex_array.html#aac501573a4eabe407679900bd4d814a4',1,'tram::Render::API::SWVertexArray']]], ['hierarchy_5fmap_18',['hierarchy_map',['../namespacetram_1_1_ext_1_1_kitchensink.html#a88dc3b5c5e10e0a3f59566278143dd3e',1,'tram::Ext::Kitchensink']]], ['history_5fcursor_19',['history_cursor',['../classtram_1_1_ext_1_1_menu_1_1_console.html#a5f626c471a7e2d91b3fb5b2c4a03b8e5',1,'tram::Ext::Menu::Console']]], ['horizontaldivider_20',['HorizontalDivider',['../namespacetram_1_1_g_u_i.html#a0568bf9d9061984bf013f44b50ff5e56',1,'tram::GUI']]], ['http_21',['HTTP',['../namespacetram.html#a529c8d3e049a7dcc4425fbe040e4c531a293c9ea246ff9985dc6f62a650f78986',1,'tram']]], ['hull_22',['Hull',['../structtram_1_1_physics_1_1_collision_shape.html#a883545f482ba93253bfa3c03764dcf96',1,'tram::Physics::CollisionShape']]], ['hull_5fpoints_23',['hull_points',['../structtram_1_1_physics_1_1_collision_shape.html#a6275c4f2f2e95cd9ad571f7c0f749fca',1,'tram::Physics::CollisionShape']]], ['hull_5fsize_24',['hull_size',['../structtram_1_1_physics_1_1_collision_shape.html#a483912b8ad6fc27f23f7c634f9aea053',1,'tram::Physics::CollisionShape']]] ]; ================================================ FILE: docs/cppapi/search/all_9.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/all_9.js ================================================ var searchData= [ ['icon_5ffont_0',['icon_font',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#ac623e7fc63960697ee68bc58b83468ac',1,'tram::Ext::Kitchensink::ItemClass']]], ['icon_5fglyph_1',['icon_glyph',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a7558e88a147da74a438982f195c16684',1,'tram::Ext::Kitchensink::ItemClass']]], ['id_2',['id',['../classtram_1_1_entity.html#a0e0037fe55b567a2f73a84e4e6932197',1,'tram::Entity::id()'],['../structtram_1_1_shared_entity_data.html#a4220b9dc04f5c5a94ae1a92347ae697f',1,'tram::SharedEntityData::id()']]], ['id_5ft_3',['id_t',['../namespacetram.html#a25ae39989bce3dab64401c3956be9c03',1,'tram']]], ['identity_5fposition_4',['IDENTITY_POSITION',['../namespacetram.html#a54978c27914521c35127181e9cb0f849',1,'tram']]], ['identity_5frotation_5',['IDENTITY_ROTATION',['../namespacetram.html#a6643f20251af5564678ffc98ef58be9e',1,'tram']]], ['identity_5fscale_6',['IDENTITY_SCALE',['../namespacetram.html#a6aa1af51cd6d3679c00e656d1473cd46',1,'tram']]], ['image_2ecpp_7',['image.cpp',['../image_8cpp.html',1,'']]], ['image_2eh_8',['image.h',['../image_8h.html',1,'']]], ['ind_9',['ind',['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#aadbe189ab3e4e334794d0dc588694fb3',1,'tram::Render::API::DynamicVertex']]], ['index_10',['index',['../classtram_1_1_pool.html#a7ffa82540f27a9b7ff4da2b75daebbf5',1,'tram::Pool']]], ['index_5farray_11',['index_array',['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html#a5014bfeba11937acbddee274ab2a240a',1,'tram::Render::API::SWDrawListEntry::index_array()'],['../classtram_1_1_render_1_1_model.html#aa5dee7ccfa3ff825f135ab07ae71a719',1,'tram::Render::Model::index_array()']]], ['index_5farrays_12',['index_arrays',['../namespacetram_1_1_render_1_1_a_p_i.html#a95fa95ded8f82269167051e3c98f42b8',1,'tram::Render::API']]], ['index_5fbuffer_13',['index_buffer',['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#a7690e858e67902794ba8421881381bb8',1,'tram::Render::API::D3DDrawListEntry']]], ['index_5fcount_14',['index_count',['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_index_array.html#ab13f8b1dc90072e971b2b6c997eb2f57',1,'tram::Render::API::SWIndexArray']]], ['index_5fin_5fbucket_15',['index_in_bucket',['../structtram_1_1_render_1_1_bucket_mapping.html#aac8991fd658ce5b7c20f4bd8c07d7a95',1,'tram::Render::BucketMapping']]], ['index_5flength_16',['index_length',['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#a7f6a06108ebc5a50ab5144af1d60d474',1,'tram::Render::API::D3DDrawListEntry::index_length()'],['../structtram_1_1_render_1_1_index_range.html#a79dd94c687b439d58019231d29437d23',1,'tram::Render::IndexRange::index_length()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html#a2becbbd55e937640b93428514e1feaf9',1,'tram::Render::API::SWDrawListEntry::index_length()']]], ['index_5foffset_17',['index_offset',['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#aeee744eb4618ad8390ff3fdf7a4f504f',1,'tram::Render::API::D3DDrawListEntry::index_offset()'],['../structtram_1_1_render_1_1_index_range.html#ade22f8be5ffc1e0de728fa94ed496e72',1,'tram::Render::IndexRange::index_offset()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html#abe68abe6d073d4442922709f286fe084',1,'tram::Render::API::SWDrawListEntry::index_offset()']]], ['index_5franges_18',['index_ranges',['../classtram_1_1_render_1_1_model.html#a6dcde60794df195d5cbdc942b9e7f712',1,'tram::Render::Model']]], ['indexarray_5ft_19',['indexarray_t',['../structtram_1_1_render_1_1indexarray__t.html',1,'tram::Render']]], ['indexrange_20',['IndexRange',['../structtram_1_1_render_1_1_index_range.html',1,'tram::Render']]], ['indices_21',['indices',['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_index_array.html#a1d40640fcd34e0d04e93967015a3f31a',1,'tram::Render::API::SWIndexArray::indices()'],['../structtram_1_1_render_1_1_triangle.html#a2582220ecd2310b21a7391756b283d39',1,'tram::Render::Triangle::indices()'],['../structtram_1_1_render_1_1_static_model_data.html#ac608149e0f9e85bf4b102e750c375abd',1,'tram::Render::StaticModelData::indices()'],['../structtram_1_1_render_1_1_dynamic_model_data.html#a1035c833b573784ed658754feb0b7c17',1,'tram::Render::DynamicModelData::indices()']]], ['info_22',['INFO',['../namespacetram.html#a34ab368bc856f9bd71bfcb4f2bb86c56a551b723eafd6a31d444fcb2f5920fbd3',1,'tram']]], ['info_2edox_23',['info.dox',['../info_8dox.html',1,'']]], ['infos_24',['infos',['../namespacetram_1_1_ext_1_1_kitchensink.html#af26c7178edaf07fc00c3ffb0048472c5',1,'tram::Ext::Kitchensink']]], ['init_25',['Init',['../namespacetram_1_1_u_i.html#a34c539a00c1e5228b2ee9d9f69de5af8',1,'tram::UI::Init()'],['../namespacetram_1_1_physics_1_1_a_p_i.html#a5d061813173c9cc7d06ff1fe5bb20717',1,'tram::Physics::API::Init()'],['../namespacetram_1_1_physics.html#a176087bb562e45cdb38d96605d03ded6',1,'tram::Physics::Init()'],['../namespacetram_1_1_platform_1_1_window.html#af03eb6bcb74b8f5ac5fe208c82c7e7b5',1,'tram::Platform::Window::Init()'],['../namespacetram_1_1_platform_1_1_input.html#a34c539a00c1e5228b2ee9d9f69de5af8',1,'tram::Platform::Input::Init()'],['../namespacetram_1_1_render_1_1_a_p_i.html#a3333e144d9fcb3f23192760dabce0d0d',1,'tram::Render::API::Init()'],['../namespacetram_1_1_render.html#a432d184f3b358b4f7ee6daf055f9ef74',1,'tram::Render::Init()']]], ['init_26',['INIT',['../namespacetram_1_1_system.html#a4703b937891576671c79a6d02a63c0a2a8549b677c065a257a9f4d0c56a38cf38',1,'tram::System']]], ['init_27',['Init',['../namespacetram_1_1_audio_1_1_a_p_i.html#a8d3b6a316e9eabc092a7302995d545bd',1,'tram::Audio::API::Init()'],['../namespacetram_1_1_audio.html#aabd3c9eadd115d4d66e324ffed163470',1,'tram::Audio::Init()'],['../namespacetram_1_1_ext_1_1_camera.html#ad252c0b524249e43b5b04f649a6697c2',1,'tram::Ext::Camera::Init()'],['../namespacetram_1_1_ext_1_1_kitchensink.html#aabfec8af9b6f67d87256ceb0565b8cc6',1,'tram::Ext::Kitchensink::Init()'],['../classtram_1_1_light_component.html#a523c8f75bcd17b885098fe30956d88a6',1,'tram::LightComponent::Init()'],['../classtram_1_1_player_component.html#afcbc45d601e912238fbe419681db88dd',1,'tram::PlayerComponent::Init()'],['../classtram_1_1_template_component.html#a6e081f7006cb6a8b6c0621a7ee6d81f9',1,'tram::TemplateComponent::Init()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest.html#a45dcecc77ac3add50354215a87117f58',1,'tram::Ext::Kitchensink::Quest::Init()'],['../classtram_1_1_entity_component.html#ab5d797d6fd60beef019062e228679eb7',1,'tram::EntityComponent::Init()']]], ['init_28',['init',['../classtram_1_1_component.html#a6cd91a842686662e8cceccd2920c3619',1,'tram::Component::init()'],['../classtram_1_1_component.html#a1e0318f6b89ca572f28e9fed070dd32b',1,'tram::Component::init()'],['../classtram_1_1_component.html#ad96889276619fda754e4af68a5075db2',1,'tram::Component::init()'],['../classtram_1_1_component.html#a4ba7f565d501661914c7648cd1b62b44',1,'tram::Component::init()'],['../classtram_1_1_component.html#ae956519770a3e6c53b9bcecf407676b6',1,'tram::Component::init()'],['../classtram_1_1_component.html#a0abec218348d77cebbfa73723815606f',1,'tram::Component::init()'],['../classtram_1_1_component.html#a81ec0494d37dea609b33cf00cf0c33d3',1,'tram::Component::init()'],['../classtram_1_1_component.html#ab30ccc33ece77ac0526eccd693de6a1a',1,'tram::Component::init()'],['../classtram_1_1_component.html#a451ffe51f9f1e27648f7a5f585eb1ea4',1,'tram::Component::init()'],['../classtram_1_1_component.html#a54a5bab4377e5b7895691516332639ac',1,'tram::Component::init()'],['../classtram_1_1_component.html#a827f85fff0e002fb5706f4ade3ddc72a',1,'tram::Component::init()'],['../classtram_1_1_component.html#ac8b7faa733f01297be8df3a2ea685eed',1,'tram::Component::init()'],['../classtram_1_1_component.html#a3848187d991b7185779a6c237957bd9c',1,'tram::Component::init()']]], ['init_29',['Init',['../namespacetram_1_1_ext_1_1_menu.html#a389cad79647a9142bb4683217d94387a',1,'tram::Ext::Menu::Init()'],['../namespacetram_1_1_ext_1_1_scripting_1_1_lua.html#a83bba368580b03eba8830e61ce8f13ab',1,'tram::Ext::Scripting::Lua::Init()'],['../namespacetram_1_1_async.html#abf1180d68deb60ea65e90073f8f8eaf0',1,'tram::Async::Init()'],['../namespacetram_1_1_core.html#a1704d5ca7badba9cc7486134bf2cc578',1,'tram::Core::Init()'],['../namespacetram_1_1_g_u_i.html#a2d278da9263fa009f2eaa8ea8d67eaa0',1,'tram::GUI::Init()'],['../namespacetram_1_1_script.html#a3df9d0d4778b39ca7c95328ae4fd5a22',1,'tram::Script::Init()']]], ['initai_30',['InitAI',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab9a442aa76563ab70aff7c560a3bb953',1,'tram::Ext::Kitchensink']]], ['initcallbacks_31',['InitCallbacks',['../namespacetram_1_1_ext_1_1_menu.html#ab6a5cd004740b52fff348c26ee0a8b6c',1,'tram::Ext::Menu']]], ['initexplorationpaths_32',['InitExplorationPaths',['../namespacetram_1_1_audio_1_1_spatial.html#a3dcc76efc87914d95c6011db3972eda4',1,'tram::Audio::Spatial']]], ['initial_5ffollower_33',['initial_follower',['../main_8cpp.html#a26541762e56e12ecf3defe0cdf54445c',1,'main.cpp']]], ['initial_5fvelocity_34',['initial_velocity',['../classtram_1_1_particle_component.html#a430a79ebe6cdfed63f9197226acbf2a3',1,'tram::ParticleComponent']]], ['initial_5fvelocity_5frandomness_35',['initial_velocity_randomness',['../classtram_1_1_particle_component.html#af090a25e299547146b68263c6a70fc83',1,'tram::ParticleComponent']]], ['initialattribute_36',['InitialAttribute',['../structtram_1_1_ext_1_1_kitchensink_1_1_initial_attribute.html',1,'tram::Ext::Kitchensink']]], ['initoutput_37',['InitOutput',['../namespacetram_1_1_audio_1_1_spatial.html#a1d958660cb3bf23f87e78a3a2a36d912',1,'tram::Audio::Spatial']]], ['inputstate_38',['InputState',['../namespacetram_1_1_u_i.html#aef59b5ccd9382ca4fdd1f951a9b68aef',1,'tram::UI']]], ['insert_39',['Insert',['../classtram_1_1_octree.html#a02470aaeb494f3903c6f45e0e3357510',1,'tram::Octree::Insert(Node *parent, Node *leaf)'],['../classtram_1_1_octree.html#aff7cf2c6bf99856721156aa6dcdf0b72',1,'tram::Octree::Insert(vec3 point, T data)'],['../classtram_1_1_hashmap.html#a68af1a319c6ffabf571332939b4633c0',1,'tram::Hashmap::Insert(uint32_t key, T value)'],['../classtram_1_1_hashmap.html#a4b0e9748d29a4b4af463af55307818da',1,'tram::Hashmap::Insert(UID key, T value)']]], ['insertdrawlistentries_40',['InsertDrawListEntries',['../classtram_1_1_render_component.html#aae0ec9b022b64f9cfc19885dc6eee2c1',1,'tram::RenderComponent']]], ['insertdrawlistentry_41',['InsertDrawListEntry',['../namespacetram_1_1_render_1_1_a_p_i.html#a1a5a35d0071849e1f4a44362df772ce1',1,'tram::Render::API']]], ['insertleaf_42',['InsertLeaf',['../classtram_1_1_a_a_b_b_tree.html#a09154884a07d9aec60f8e84f54292d41',1,'tram::AABBTree::InsertLeaf()'],['../namespacetram_1_1_render_1_1_a_a_b_b.html#a6625049c0bc385b24b326868ad74a779',1,'tram::Render::AABB::InsertLeaf()']]], ['int32_43',['int32',['../structtram_1_1_settings_1_1_setting_info.html#aaab2c92712b3450a253e4eca1d648707',1,'tram::Settings::SettingInfo']]], ['int32_44',['INT32',['../structtram_1_1_render_1_1_vertex_attribute.html#a5478d84843dda2d90f4628b2e2c39868ad6e1ed11fa35b400322354060286eb3a',1,'tram::Render::VertexAttribute']]], ['int32_5fptr_45',['int32_ptr',['../classtram_1_1_value_ptr.html#a30acbba06034afaa772635752a46979d',1,'tram::ValuePtr']]], ['int32_5fvalue_46',['int32_value',['../classtram_1_1_value.html#a032355ea52d6ea101a88388e2a7f2714',1,'tram::Value']]], ['intcolor_47',['IntColor',['../namespacetram_1_1_render_1_1_a_p_i.html#aaa272bbd99e773f619519f24981b411b',1,'tram::Render::API']]], ['intercept_48',['Intercept',['../structtram_1_1_ext_1_1_menu_1_1_intercept.html',1,'tram::Ext::Menu']]], ['intercept_5fenabled_49',['intercept_enabled',['../classtram_1_1_ext_1_1_menu_1_1_debug_menu.html#aaaeebe9c42d5ca723a4523549f3c633a',1,'tram::Ext::Menu::DebugMenu']]], ['intercept_5fmenu_50',['intercept_menu',['../classtram_1_1_ext_1_1_menu_1_1_debug_menu.html#a3b84d612747abe7ce7521ec867b6df42',1,'tram::Ext::Menu::DebugMenu']]], ['interceptmenu_51',['InterceptMenu',['../classtram_1_1_ext_1_1_menu_1_1_intercept_menu.html',1,'tram::Ext::Menu']]], ['intercepts_52',['intercepts',['../namespacetram_1_1_ext_1_1_menu.html#ad8d4e5481ecd0bb091a930107037e0c2',1,'tram::Ext::Menu']]], ['interface_53',['Interface',['../classtram_1_1_script_1_1_interface.html',1,'tram::Script']]], ['interior_54',['INTERIOR',['../classtram_1_1_world_cell.html#a90b9ed6e3265fb6b3e569669117fd514a6ddd0d1668e3847063a1ef166854a507',1,'tram::WorldCell']]], ['interior_5flighting_55',['INTERIOR_LIGHTING',['../classtram_1_1_world_cell.html#a90b9ed6e3265fb6b3e569669117fd514abc50d99cd3e56932a7a61ba6471f5101',1,'tram::WorldCell']]], ['interpolate_56',['interpolate',['../structtram_1_1_animation_component_1_1_animation_playback_info.html#a7456d5837fff021227866a7e713af0bb',1,'tram::AnimationComponent::AnimationPlaybackInfo::interpolate()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state.html#a3092db31243a93267bddd5f9797696fa',1,'tram::Ext::Kitchensink::AnimState::interpolate()']]], ['intersection_57',['intersection',['../structtram_1_1_render_1_1_a_a_b_b_1_1_query_response.html#a7731e6615a0676cbaa1aa81668314256',1,'tram::Render::AABB::QueryResponse']]], ['into_5fstate_58',['into_state',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_from.html#a4fc967dfe7caf8f300842148f0b8eba0',1,'tram::Ext::Kitchensink::AnimStateTransitionFrom::into_state()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_into.html#a68ba9c13086b86f10f80cd36e61200d8',1,'tram::Ext::Kitchensink::AnimStateTransitionInto::into_state()']]], ['invalid_59',['INVALID',['../namespacetram_1_1_system.html#a02b5e7a5340ef5ca42a650ca4d8ade65ac3f542a5593bbe1407d0beb44980d861',1,'tram::System']]], ['inventory_60',['Inventory',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#af7a1b00c5dfadf08f99151978659a9c2',1,'tram::Ext::Kitchensink::Inventory::Inventory()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html',1,'tram::Ext::Kitchensink::Inventory']]], ['inventory_2ecpp_61',['inventory.cpp',['../inventory_8cpp.html',1,'']]], ['inventory_2eh_62',['inventory.h',['../inventory_8h.html',1,'']]], ['inventoryfactoryinfo_63',['InventoryFactoryInfo',['../structtram_1_1_ext_1_1_kitchensink_1_1_inventory_factory_info.html',1,'tram::Ext::Kitchensink']]], ['inventorymanager_64',['InventoryManager',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory_manager.html',1,'tram::Ext::Kitchensink']]], ['io_5ferror_65',['IO_ERROR',['../namespacetram.html#a972c59287ba467dbfe003f137609550da198489bd72edc2407c15917c5323cd93',1,'tram']]], ['is_66',['Is',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a36e6f0dae5f477802b91bd4cafe72f56',1,'tram::Ext::Kitchensink::QuestVariable']]], ['is_5fcontinue_67',['is_continue',['../classtram_1_1_file_reader_parser.html#afd0f9db53311ddb1c724c286cd18545b',1,'tram::FileReaderParser::is_continue()'],['../classtram_1_1_text_reader_parser.html#ac4fed2bc3815fed4a548ad35f7a30a17',1,'tram::TextReaderParser::is_continue()'],['../classtram_1_1_file.html#a613cfcd9ed88d5edacd33b345ddaa558',1,'tram::File::is_continue()']]], ['is_5fempty_68',['is_empty',['../structtram_1_1_u_i_d.html#a1c632137cc995abd646d872429f059a0',1,'tram::UID']]], ['is_5ferror_69',['is_error',['../classtram_1_1_file_reader_parser.html#a9f33622ce91e090714839f2209e1a151',1,'tram::FileReaderParser::is_error()'],['../classtram_1_1_text_reader_parser.html#a783ecd25f9221a1ecdc6ae7075dff15b',1,'tram::TextReaderParser::is_error()']]], ['is_5ffullscreen_70',['is_fullscreen',['../namespacetram_1_1_platform.html#a6f880cc4d19fcc8b45f2405afe847765',1,'tram::Platform']]], ['is_5fin_5fair_71',['is_in_air',['../classtram_1_1_raycast_controller_component.html#aafc457ddb805587b041ad13495aaa6c6',1,'tram::RaycastControllerComponent::is_in_air()'],['../classtram_1_1_f_p_s_controller_component.html#a8579e399cc88ea96ad4d62d2cce9790c',1,'tram::FPSControllerComponent::is_in_air()']]], ['is_5finit_72',['is_init',['../classtram_1_1_entity_component.html#a0e65307b795d61b931c6b3600fc737ac',1,'tram::EntityComponent']]], ['is_5fopen_73',['is_open',['../classtram_1_1_file.html#a35ac8b7f25c9644484adb16e6315ac13',1,'tram::File']]], ['is_5fready_74',['is_ready',['../classtram_1_1_entity_component.html#a4dcceab63838befe9fbffc1c3bc19918',1,'tram::EntityComponent']]], ['is_5fvalid_75',['is_valid',['../structtram_1_1_u_i_d.html#a819c4f8b86a7fb91519937f2cf8e4449',1,'tram::UID']]], ['isaudiosourceplaying_76',['IsAudioSourcePlaying',['../namespacetram_1_1_audio_1_1_a_p_i.html#a8e6b04b5e38e41ca29049e7d3f36d596',1,'tram::Audio::API']]], ['isautoload_77',['IsAutoLoad',['../classtram_1_1_entity.html#a147a88601da58a30ee3d39bbc2c2da12',1,'tram::Entity']]], ['isbool_78',['IsBool',['../classtram_1_1_value.html#a5730c454f7a08e4ad926fa0438e0ca02',1,'tram::Value::IsBool()'],['../classtram_1_1_value_ptr.html#ac28b4b028d4493d27a7f6e1fa6d5fda5',1,'tram::ValuePtr::IsBool()']]], ['ischanged_79',['IsChanged',['../classtram_1_1_entity.html#ab439f567d570a3bbd0f80c5d2e025eb0',1,'tram::Entity']]], ['isdebugdraw_80',['IsDebugDraw',['../classtram_1_1_world_cell.html#a906f8e64babfe45db448955b205226e1',1,'tram::WorldCell']]], ['isdebuginfodraw_81',['IsDebugInfoDraw',['../classtram_1_1_controller_component.html#a827a701de4481f78563b75fce6ea55a2',1,'tram::ControllerComponent::IsDebugInfoDraw()'],['../classtram_1_1_audio_component.html#a8f7d175b19b8e5b40994132c416a404e',1,'tram::AudioComponent::IsDebugInfoDraw()'],['../classtram_1_1_animation_component.html#a622f5ba394f586c8eddde6acfbc968e0',1,'tram::AnimationComponent::IsDebugInfoDraw()']]], ['isdebugmode_82',['IsDebugMode',['../namespacetram_1_1_render_1_1_a_p_i.html#aa5310d3f1d84890fdd8b6c9b8ceead3f',1,'tram::Render::API']]], ['isdeleted_83',['IsDeleted',['../classtram_1_1_entity.html#a409d0640de875ed0bdf2b8b71cfe75ee',1,'tram::Entity']]], ['isdrawtrigger_84',['IsDrawTrigger',['../classtram_1_1_trigger.html#a6eafc910dc841bea5073d9cd27a14f77',1,'tram::Trigger']]], ['isequippeditem_85',['IsEquippedItem',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#a53fa2c2df9e2cb7c28395f23a91b42f6',1,'tram::Ext::Kitchensink::Inventory']]], ['isequippedslot_86',['IsEquippedSlot',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#aee945a9c74d9e50a5fe5f01430cc124c',1,'tram::Ext::Kitchensink::Inventory']]], ['isfloat_87',['IsFloat',['../classtram_1_1_value_ptr.html#a3a0c3c020fc28d602f348a2771185274',1,'tram::ValuePtr::IsFloat()'],['../classtram_1_1_value.html#adf7c16903c484a39086cc193fa4d3f1e',1,'tram::Value::IsFloat()']]], ['isfullscreen_88',['IsFullscreen',['../namespacetram_1_1_platform_1_1_window.html#a283d6de486d8c8808e78da64f2a4667e',1,'tram::Platform::Window']]], ['isinfaction_89',['IsInFaction',['../classtram_1_1_ext_1_1_kitchensink_1_1_character.html#a61fe7823c735263feb55c31b615e858e',1,'tram::Ext::Kitchensink::Character']]], ['isinit_90',['IsInit',['../classtram_1_1_entity_component.html#aad321b7c26fd5f710cf1e0e48f605a8a',1,'tram::EntityComponent']]], ['isinitialized_91',['IsInitialized',['../namespacetram_1_1_system.html#a1c1f26d92502016519f4a147cdc0fbc2',1,'tram::System']]], ['isinside_92',['IsInside',['../classtram_1_1_transition.html#aa10c4f5e137fa766558505864995af4f',1,'tram::Transition::IsInside()'],['../classtram_1_1_world_cell.html#a68de53ebe113f1cddbd433dd048acf70',1,'tram::WorldCell::IsInside()']]], ['isint_93',['IsInt',['../classtram_1_1_value.html#abcedb8e96c6af96db3dacb1b5859cf61',1,'tram::Value::IsInt()'],['../classtram_1_1_value_ptr.html#a2510ece20da4a990011d9b3487000695',1,'tram::ValuePtr::IsInt()']]], ['isinterior_94',['IsInterior',['../classtram_1_1_world_cell.html#a539e63e21eadaeda761161d2e162ecf8',1,'tram::WorldCell']]], ['isleaf_95',['IsLeaf',['../structtram_1_1_octree_1_1_node.html#acf0b359104e69ae9202d41f55db25429',1,'tram::Octree::Node::IsLeaf()'],['../structtram_1_1_a_a_b_b_tree_1_1_node.html#a6ca75579cef2d995affbeced0c4f3ee4',1,'tram::AABBTree::Node::IsLeaf()']]], ['islightdraw_96',['IsLightDraw',['../classtram_1_1_light_component.html#aefae135fe915548285a2363b92e2915b',1,'tram::LightComponent']]], ['isloaded_97',['IsLoaded',['../classtram_1_1_world_cell.html#af970d01a2b78d45162c94c3acab1e4a6',1,'tram::WorldCell::IsLoaded()'],['../classtram_1_1_entity.html#a305ae4e799b36c4111f5cd089748f422',1,'tram::Entity::IsLoaded() const']]], ['isloadedfromdisk_98',['IsLoadedFromDisk',['../classtram_1_1_entity.html#ace4932f5988e14152753e4de7de86a4a',1,'tram::Entity']]], ['isloadfailed_99',['IsLoadFailed',['../classtram_1_1_resource.html#a81746c1ca8f0d380259f8906a79942b8',1,'tram::Resource']]], ['ismet_100',['IsMet',['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_condition.html#adaa8ef03f80dfbe1e610747674d556a7',1,'tram::Ext::Kitchensink::DialogCondition']]], ['isname_101',['IsName',['../classtram_1_1_value.html#abaa6b4a80038f14d4d9fac5742011900',1,'tram::Value']]], ['isnode_102',['IsNode',['../structtram_1_1_octree_1_1_node.html#a3abcf52999ab189502ffbd384f5c598c',1,'tram::Octree::Node']]], ['isnot_103',['IsNot',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#aa919ae019059ff89faca34a829962fa0',1,'tram::Ext::Kitchensink::QuestVariable']]], ['ispersistent_104',['IsPersistent',['../classtram_1_1_entity.html#a07ace4859c60707136639f33cd525c0a',1,'tram::Entity']]], ['isplaying_105',['IsPlaying',['../classtram_1_1_animation_component.html#a27c7ff48133b01c79777af78e4ee5a07',1,'tram::AnimationComponent::IsPlaying()'],['../classtram_1_1_audio_component.html#a0cb407f67786c11bda3f8a4352796a58',1,'tram::AudioComponent::IsPlaying()']]], ['isquat_106',['IsQuat',['../classtram_1_1_value.html#a0025245d17103e5061144c0914a2598c',1,'tram::Value']]], ['israwinput_107',['IsRawInput',['../namespacetram_1_1_platform_1_1_window.html#a767093572b3a28a3c4c3bb86c9f2fdaa',1,'tram::Platform::Window']]], ['isready_108',['IsReady',['../classtram_1_1_entity_component.html#a1ae29198858d24d3aba6914bdee6a46f',1,'tram::EntityComponent']]], ['isrendercontextthread_109',['IsRenderContextThread',['../namespacetram_1_1_platform_1_1_window.html#a9cb305ebdf39acfb85f04ef54d867703',1,'tram::Platform::Window']]], ['issourcedraw_110',['IsSourceDraw',['../classtram_1_1_audio_component.html#a9d8448140c994b866c61118e80887c58',1,'tram::AudioComponent']]], ['isstring_111',['IsString',['../classtram_1_1_value.html#ad59a44468143c7dfdafca922f37eb380',1,'tram::Value']]], ['isvec2_112',['IsVec2',['../classtram_1_1_value.html#af19a2afc58fe6b53f4817d8177930508',1,'tram::Value']]], ['isvec3_113',['IsVec3',['../classtram_1_1_value.html#ac300cdbdca5c4e2f5b4a890033fe79af',1,'tram::Value']]], ['isvec4_114',['IsVec4',['../classtram_1_1_value.html#a81e95640899e63a329a020a6fe2dfebc',1,'tram::Value']]], ['isvsync_115',['IsVsync',['../namespacetram_1_1_platform_1_1_window.html#a5f0dc2c949f69dbde94b216e53d26797',1,'tram::Platform::Window']]], ['item_116',['item',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a074b98a66cd3f7404053c41d564be669',1,'tram::Ext::Kitchensink::QuestVariable::item()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#aabc1c4ce438e88d992880d126648a343',1,'tram::Ext::Kitchensink::QuestVariable::item()']]], ['item_5faction_5ffunc_117',['item_action_func',['../namespacetram_1_1_ext_1_1_kitchensink.html#a4b23e475cb12c9bd604bb44cc06e52d8',1,'tram::Ext::Kitchensink']]], ['item_5fclass_118',['item_class',['../structtram_1_1_ext_1_1_kitchensink_1_1_item_instance.html#ad30fe5398e295fa0edc24ee7e1b3f06f',1,'tram::Ext::Kitchensink::ItemInstance']]], ['itemclass_119',['ItemClass',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html',1,'tram::Ext::Kitchensink']]], ['itemcount_120',['ItemCount',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a27ee71a112e47b3caf0e8e167653a3ed',1,'tram::Ext::Kitchensink::QuestVariable']]], ['iteminstance_121',['ItemInstance',['../structtram_1_1_ext_1_1_kitchensink_1_1_item_instance.html',1,'tram::Ext::Kitchensink']]], ['items_122',['items',['../classtram_1_1_ext_1_1_kitchensink_1_1_list_inventory_manager.html#a706782e911333fcfafae739d283995a2',1,'tram::Ext::Kitchensink::ListInventoryManager']]], ['iterator_123',['iterator',['../structtram_1_1_pool_1_1iterator.html#a457d9529077f98de008f5c96ff860eb0',1,'tram::Pool::iterator::iterator()'],['../structtram_1_1_pool_1_1iterator.html',1,'tram::Pool< T >::iterator']]], ['ivec3_124',['ivec3',['../namespacetram.html#a376f6f34fd81bba7071907b5226432f9',1,'tram']]], ['ivec4_125',['ivec4',['../namespacetram.html#a1632687848b1fc76b67d96646ef5a691',1,'tram']]] ]; ================================================ FILE: docs/cppapi/search/all_a.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/all_a.js ================================================ var searchData= [ ['jump_0',['Jump',['../classtram_1_1_controller_component.html#ad5ac49ff2ac8a5c96dbd8c341d445f76',1,'tram::ControllerComponent::Jump()'],['../classtram_1_1_f_p_s_controller_component.html#a05586398229c44cfafe8b9c6fdb3f2d8',1,'tram::FPSControllerComponent::Jump()'],['../classtram_1_1_raycast_controller_component.html#a865d92b888b684f1a8ddfc550509dfc8',1,'tram::RaycastControllerComponent::Jump() override']]], ['jump_5fframes_1',['jump_frames',['../classtram_1_1_raycast_controller_component.html#a8a2115c6f76c654ad0daa63421474d92',1,'tram::RaycastControllerComponent']]] ]; ================================================ FILE: docs/cppapi/search/all_b.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/all_b.js ================================================ var searchData= [ ['key_0',['key',['../structtram_1_1_hashmap_1_1_record.html#ac3d3cebcb5768feb0ca9f6f4d1c7e02a',1,'tram::Hashmap::Record::key()'],['../structtram_1_1_settings_1_1_raw_setting.html#ad489cdd3d038e1cd7cae211fd9646431',1,'tram::Settings::RawSetting::key()'],['../structtram_1_1_u_i_d.html#a9d2e43bf7b4f21af160251d969e37af8',1,'tram::UID::key()']]], ['key_5f0_1',['KEY_0',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a65437d90c5caa67d4724f54553508e9e',1,'tram::UI']]], ['key_5f1_2',['KEY_1',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ae3a336ff48b187617d8637dd2718e7ae',1,'tram::UI']]], ['key_5f2_3',['KEY_2',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9aa953f283270f27bd5fe8222f587ead41',1,'tram::UI']]], ['key_5f3_4',['KEY_3',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9aceda48a96fdeb639c66c87d1fa235b37',1,'tram::UI']]], ['key_5f4_5',['KEY_4',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9aab815d03fe3a3bceae097559b6621736',1,'tram::UI']]], ['key_5f5_6',['KEY_5',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a09d550ac685c22bb4d5300f1b561d584',1,'tram::UI']]], ['key_5f6_7',['KEY_6',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a0fd671dc791741b42da6eabebe4ca390',1,'tram::UI']]], ['key_5f7_8',['KEY_7',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a84a9c489b8f14cca0868c37d657ab1da',1,'tram::UI']]], ['key_5f8_9',['KEY_8',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9aa9b00c9fc9bbf4eb7f217174c80ca004',1,'tram::UI']]], ['key_5f9_10',['KEY_9',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a562a379580554859b14364ea2bdcc71e',1,'tram::UI']]], ['key_5fa_11',['KEY_A',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a69b752301befc5f3a4d907be6f7629b9',1,'tram::UI']]], ['key_5faction_5factivate_12',['KEY_ACTION_ACTIVATE',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99a076e3f62c43d41515fc4f49ff52caabd',1,'tram::UI']]], ['key_5faction_5fbackward_13',['KEY_ACTION_BACKWARD',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99a9086284540999b0ce7ebe45247de8c39',1,'tram::UI']]], ['key_5faction_5fcrouch_14',['KEY_ACTION_CROUCH',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99ac1d329520148264671aecb8bfdd340f2',1,'tram::UI']]], ['key_5faction_5fdown_15',['KEY_ACTION_DOWN',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99a90778630020380ab86ef277e27a92603',1,'tram::UI']]], ['key_5faction_5ffly_16',['KEY_ACTION_FLY',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99a59cf019c9e17effcf31b30c805ff5fd7',1,'tram::UI']]], ['key_5faction_5fforward_17',['KEY_ACTION_FORWARD',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99a2ab360c8d227a318e206cd60302220e0',1,'tram::UI']]], ['key_5faction_5fjump_18',['KEY_ACTION_JUMP',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99ad9cd378006df175750430fe1a2de542e',1,'tram::UI']]], ['key_5faction_5flast_19',['KEY_ACTION_LAST',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99addfb9f474cccad06817f61d7d9881cf9',1,'tram::UI']]], ['key_5faction_5fleft_20',['KEY_ACTION_LEFT',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99af7f10fa172ce512ff124f22f7eaf76eb',1,'tram::UI']]], ['key_5faction_5fnone_21',['KEY_ACTION_NONE',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99a260f4ae152cb86c6657c321a97d42f40',1,'tram::UI']]], ['key_5faction_5fprimary_22',['KEY_ACTION_PRIMARY',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99a4243be2902836000e58876f71bcd6d90',1,'tram::UI']]], ['key_5faction_5fright_23',['KEY_ACTION_RIGHT',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99a05969ba3d0841548ca5c74e520acceea',1,'tram::UI']]], ['key_5faction_5fsecondary_24',['KEY_ACTION_SECONDARY',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99a26612bdb65d175cc56131b1ab416954c',1,'tram::UI']]], ['key_5faction_5fsprint_25',['KEY_ACTION_SPRINT',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99aa5239b56b4a53ca00c16ba6ba82faf7e',1,'tram::UI']]], ['key_5faction_5fstrafe_5fleft_26',['KEY_ACTION_STRAFE_LEFT',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99a466d107fc666cf939873650da55b36d9',1,'tram::UI']]], ['key_5faction_5fstrafe_5fright_27',['KEY_ACTION_STRAFE_RIGHT',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99a3153636a951f4fe7961e1531b10bd1b9',1,'tram::UI']]], ['key_5faction_5fup_28',['KEY_ACTION_UP',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99a1df68d53996f14b271458109f5c74859',1,'tram::UI']]], ['key_5fapostrophe_29',['KEY_APOSTROPHE',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a7c8104f6c5d08d99e2b8a126f883bddf',1,'tram::UI']]], ['key_5fb_30',['KEY_B',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9aaee26a121b3a7ecc334e0767f00a70d7',1,'tram::UI']]], ['key_5fbackslash_31',['KEY_BACKSLASH',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9acf6224b6422ea249b4a3b235aba12b30',1,'tram::UI']]], ['key_5fbackspace_32',['KEY_BACKSPACE',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a08b565df6cf04d6dd3340510fdeeda5c',1,'tram::UI']]], ['key_5fc_33',['KEY_C',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ad00c2f86ceadf9093d621f0020cc8111',1,'tram::UI']]], ['key_5fcaps_5flock_34',['KEY_CAPS_LOCK',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9adae0bf1fb06302b73ddb8ceba5df75d3',1,'tram::UI']]], ['key_5fcomma_35',['KEY_COMMA',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a76bf98cee4a061d34598d858be264cd3',1,'tram::UI']]], ['key_5fd_36',['KEY_D',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9acd1ed18883f019a4fbf609580215e283',1,'tram::UI']]], ['key_5fdelete_37',['KEY_DELETE',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a1589d6ef189b4ac3fa79a86f5c54154f',1,'tram::UI']]], ['key_5fdown_38',['KEY_DOWN',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a50ada7aae92f4fcb249e20f3227ca1b7',1,'tram::UI']]], ['key_5fe_39',['KEY_E',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a4a02c40bbf639ad789c13c578f989dea',1,'tram::UI']]], ['key_5fend_40',['KEY_END',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a4d2455d4d22bcf88b705d9bf758dcc95',1,'tram::UI']]], ['key_5fenter_41',['KEY_ENTER',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a76401413bb93ff3e71adddc5d6b4ea3d',1,'tram::UI']]], ['key_5fequal_42',['KEY_EQUAL',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ae3ab9bd431f46c16051fa07c0bc90bcd',1,'tram::UI']]], ['key_5fescape_43',['KEY_ESCAPE',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9abd3eb119fd58b73594acea4545d8eb49',1,'tram::UI']]], ['key_5ff_44',['KEY_F',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9aca57442c7bcab260391fb5f29ee3c6c3',1,'tram::UI']]], ['key_5ff1_45',['KEY_F1',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9adab858cfb830bf92e4aeda721befd126',1,'tram::UI']]], ['key_5ff10_46',['KEY_F10',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9afeea4fcee657263b7309bb3df45cba78',1,'tram::UI']]], ['key_5ff11_47',['KEY_F11',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a883bff2a025e52694148f0c2e426cf03',1,'tram::UI']]], ['key_5ff12_48',['KEY_F12',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a9ecaf975717fee1e6ef34eaeb89790bd',1,'tram::UI']]], ['key_5ff13_49',['KEY_F13',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a2450cca859342b1b0232eb713bd62783',1,'tram::UI']]], ['key_5ff14_50',['KEY_F14',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a04a43fccb3b5f46fd89d69eb768b00b6',1,'tram::UI']]], ['key_5ff15_51',['KEY_F15',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ae69389e08b08925a36b9cdd07aee0f36',1,'tram::UI']]], ['key_5ff16_52',['KEY_F16',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9abb510afb8b9257bfc55dc903a8962819',1,'tram::UI']]], ['key_5ff17_53',['KEY_F17',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a8839d85d99e2a494b68890ed9da64daa',1,'tram::UI']]], ['key_5ff18_54',['KEY_F18',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a52c0f592224c6fc6e05d3d6423a96cfb',1,'tram::UI']]], ['key_5ff19_55',['KEY_F19',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a209ff909ac90cf0283d967f79cc2f910',1,'tram::UI']]], ['key_5ff2_56',['KEY_F2',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a61169512aa6359e9a471477823f463fc',1,'tram::UI']]], ['key_5ff20_57',['KEY_F20',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a99563910c4089bb0757836e3e4b8ad03',1,'tram::UI']]], ['key_5ff21_58',['KEY_F21',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ac205aca8c92ea3e8bcfcb455cde81410',1,'tram::UI']]], ['key_5ff22_59',['KEY_F22',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a8c33c781cca98efefda19291cbe7fbd7',1,'tram::UI']]], ['key_5ff23_60',['KEY_F23',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a99bddd837fe2be48872a0ca77265a02c',1,'tram::UI']]], ['key_5ff24_61',['KEY_F24',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9aabc4c90cb2b3e6b0489e9a0d244daffd',1,'tram::UI']]], ['key_5ff25_62',['KEY_F25',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9abd5cfd042feed366f2014670fb7575c0',1,'tram::UI']]], ['key_5ff3_63',['KEY_F3',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ac3318863e23da41cdb1211b4998c4f5b',1,'tram::UI']]], ['key_5ff4_64',['KEY_F4',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a372fbac101c73e052a6d80c79db7541d',1,'tram::UI']]], ['key_5ff5_65',['KEY_F5',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a5839ff3c35479538c66a126a95a1ea7a',1,'tram::UI']]], ['key_5ff6_66',['KEY_F6',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a79f3423e223d68ae943c5254a429f523',1,'tram::UI']]], ['key_5ff7_67',['KEY_F7',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ae144b84145992ccde121f27d42c7cfc4',1,'tram::UI']]], ['key_5ff8_68',['KEY_F8',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a100b49a46873faed9c936065fa8ec083',1,'tram::UI']]], ['key_5ff9_69',['KEY_F9',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a2d056aa6db1428d01d3b23b397ed40c2',1,'tram::UI']]], ['key_5fg_70',['KEY_G',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a69969530a5d1d24554b12a6ac17aad20',1,'tram::UI']]], ['key_5fgrave_5faccent_71',['KEY_GRAVE_ACCENT',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ac16d2495f2e0ad5db18868ffecd016ed',1,'tram::UI']]], ['key_5fh_72',['KEY_H',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ae8ccc2a44e4bbe61742a3e1aa1d5f808',1,'tram::UI']]], ['key_5fhome_73',['KEY_HOME',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a49be5538de01fda8d9f1c01a38559ddc',1,'tram::UI']]], ['key_5fi_74',['KEY_I',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a2443c38294500dcbd81b37a6da743787',1,'tram::UI']]], ['key_5finsert_75',['KEY_INSERT',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9aa072fdfab871f337f8fc0da6acae7508',1,'tram::UI']]], ['key_5fj_76',['KEY_J',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ab914308d1d5c183beee4b1e5de50bd66',1,'tram::UI']]], ['key_5fk_77',['KEY_K',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a3243162f0d4f7b54b99186f52716b0ab',1,'tram::UI']]], ['key_5fkp_5f0_78',['KEY_KP_0',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a11320158e4c6b1ee2eaa85de773478be',1,'tram::UI']]], ['key_5fkp_5f1_79',['KEY_KP_1',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a3c49139f417b568a3db68492f84de02d',1,'tram::UI']]], ['key_5fkp_5f2_80',['KEY_KP_2',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a40b9ce26532098fabe2d4024735ffded',1,'tram::UI']]], ['key_5fkp_5f3_81',['KEY_KP_3',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a2b1e11784d8c56555f3bb53270aea92c',1,'tram::UI']]], ['key_5fkp_5f4_82',['KEY_KP_4',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a18661a0216c2a833e439d7f58dd08172',1,'tram::UI']]], ['key_5fkp_5f5_83',['KEY_KP_5',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a21c8bed6edc424845ca57b0cd546b498',1,'tram::UI']]], ['key_5fkp_5f6_84',['KEY_KP_6',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a0ec59343c2a98d537ff7805715136bf5',1,'tram::UI']]], ['key_5fkp_5f7_85',['KEY_KP_7',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ad8c6f95a09ee0612aaf90926fa8efc1a',1,'tram::UI']]], ['key_5fkp_5f8_86',['KEY_KP_8',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a827aa5629b54051ef62be5b653d42901',1,'tram::UI']]], ['key_5fkp_5f9_87',['KEY_KP_9',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ae2d4522e9402af36973ee244c1ea8959',1,'tram::UI']]], ['key_5fkp_5fadd_88',['KEY_KP_ADD',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a88c3bed03d9746ee5d29791785c2f70b',1,'tram::UI']]], ['key_5fkp_5fdecimal_89',['KEY_KP_DECIMAL',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a459511af96035124f096b16dafeb5862',1,'tram::UI']]], ['key_5fkp_5fdivide_90',['KEY_KP_DIVIDE',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a879c1fe86636b4cd2f421dd769972f49',1,'tram::UI']]], ['key_5fkp_5fenter_91',['KEY_KP_ENTER',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a4d49655cb7a568a34431639694d3d665',1,'tram::UI']]], ['key_5fkp_5fequal_92',['KEY_KP_EQUAL',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9aadcd3b27239865a98778acc1671fbbad',1,'tram::UI']]], ['key_5fkp_5fmultiply_93',['KEY_KP_MULTIPLY',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a177ac49be216ce7a254abc7fbfd7d4e5',1,'tram::UI']]], ['key_5fkp_5fsubtract_94',['KEY_KP_SUBTRACT',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a5587286e8256cdd129cd715e129f41fd',1,'tram::UI']]], ['key_5fl_95',['KEY_L',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a4f3eab8d07ff29a6fcd7ddb560469bbc',1,'tram::UI']]], ['key_5flastaxis_96',['KEY_LASTAXIS',['../namespacetram_1_1_u_i.html#aace717edeba1f507cd383c7d1f00e064ab7fba8f6f26d9907c971775a44ceeed2',1,'tram::UI']]], ['key_5flastkey_97',['KEY_LASTKEY',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9af34f41b344dc079076521012c729a450',1,'tram::UI']]], ['key_5fleft_98',['KEY_LEFT',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a1d420499e5a93232a3f3fcf83729add6',1,'tram::UI']]], ['key_5fleft_5falt_99',['KEY_LEFT_ALT',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a241aec56571dc4ecf29a15c780253f34',1,'tram::UI']]], ['key_5fleft_5fbracket_100',['KEY_LEFT_BRACKET',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ad12c03040aff876f71d0536260626849',1,'tram::UI']]], ['key_5fleft_5fcontrol_101',['KEY_LEFT_CONTROL',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a121d6705933ca4b329538569b386ef35',1,'tram::UI']]], ['key_5fleft_5fshift_102',['KEY_LEFT_SHIFT',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a6975cca52ea36c81c0d056f00506205c',1,'tram::UI']]], ['key_5fleft_5fsuper_103',['KEY_LEFT_SUPER',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a004d71e440f811db5a803f58a96b0ef7',1,'tram::UI']]], ['key_5fleftmouse_104',['KEY_LEFTMOUSE',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9aa816822358691cbc4a3357d21699d40e',1,'tram::UI']]], ['key_5fm_105',['KEY_M',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a504213d8c07892e5474b10a27eba806d',1,'tram::UI']]], ['key_5fmenu_106',['KEY_MENU',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ac053172e8885ba9a6cc0dcce61be6825',1,'tram::UI']]], ['key_5fmiddlemouse_107',['KEY_MIDDLEMOUSE',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9af837c69d666b76476c0df2d1b787f9de',1,'tram::UI']]], ['key_5fminus_108',['KEY_MINUS',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a78cf64e98df9ca5559f27d97c3e9d6b3',1,'tram::UI']]], ['key_5fmouse_5fscroll_109',['KEY_MOUSE_SCROLL',['../namespacetram_1_1_u_i.html#aace717edeba1f507cd383c7d1f00e064a75cfdc48455414e815068fdb2f27ff0a',1,'tram::UI']]], ['key_5fmouse_5fx_110',['KEY_MOUSE_X',['../namespacetram_1_1_u_i.html#aace717edeba1f507cd383c7d1f00e064a1b5aaf04a80eebb831a4cb781aa5d077',1,'tram::UI']]], ['key_5fmouse_5fy_111',['KEY_MOUSE_Y',['../namespacetram_1_1_u_i.html#aace717edeba1f507cd383c7d1f00e064a9acff80ae609b9842ec96d2ec7cfa401',1,'tram::UI']]], ['key_5fn_112',['KEY_N',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a94b3a8e7447c1a4dc8f9c1df8f100c25',1,'tram::UI']]], ['key_5fnum_5flock_113',['KEY_NUM_LOCK',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a896d3cc0f76a3ebc14dc960265e73462',1,'tram::UI']]], ['key_5fo_114',['KEY_O',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a647dc8d7292b79a396b74fb76b654e01',1,'tram::UI']]], ['key_5fp_115',['KEY_P',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a1364c846ab1fb1bd231e0a33ab840695',1,'tram::UI']]], ['key_5fpage_5fdown_116',['KEY_PAGE_DOWN',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a2a746cdb3b9ec58cd66095bb4a3aceac',1,'tram::UI']]], ['key_5fpage_5fup_117',['KEY_PAGE_UP',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a9cb458069447eafb5d86658176b8032e',1,'tram::UI']]], ['key_5fpause_118',['KEY_PAUSE',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9aef93744dfaee588745f651c77f24cf50',1,'tram::UI']]], ['key_5fperiod_119',['KEY_PERIOD',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ac5295758df806be9a4f5eb9057c253c0',1,'tram::UI']]], ['key_5fprint_5fscreen_120',['KEY_PRINT_SCREEN',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a6941d464b7ba2e0185eba26cd1a60e12',1,'tram::UI']]], ['key_5fq_121',['KEY_Q',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a220bd95fc6428bff9fb31368839b5ae6',1,'tram::UI']]], ['key_5fr_122',['KEY_R',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ad1642afcc58232b9e6f12f6f3cc208fc',1,'tram::UI']]], ['key_5fright_123',['KEY_RIGHT',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9aa205961286cd337ec06902909fb154e6',1,'tram::UI']]], ['key_5fright_5falt_124',['KEY_RIGHT_ALT',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9afaf27e7af0aee992b05d18764258ff16',1,'tram::UI']]], ['key_5fright_5fbracket_125',['KEY_RIGHT_BRACKET',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ae1d3cc6b1216baf0546b60321178cccc',1,'tram::UI']]], ['key_5fright_5fcontrol_126',['KEY_RIGHT_CONTROL',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ae55ea7c6af938ac5867bf7d2e17b4321',1,'tram::UI']]], ['key_5fright_5fshift_127',['KEY_RIGHT_SHIFT',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a71212b3b964bc010cbe1e28c0ebe98a6',1,'tram::UI']]], ['key_5fright_5fsuper_128',['KEY_RIGHT_SUPER',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a10d0bf239c52e0e5f6579b672d179a96',1,'tram::UI']]], ['key_5frightmouse_129',['KEY_RIGHTMOUSE',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a6101d82366a7de86f4dc96e14a965479',1,'tram::UI']]], ['key_5fs_130',['KEY_S',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a7604f42d8b8bcf46bc692a7abb6417a4',1,'tram::UI']]], ['key_5fscroll_5flock_131',['KEY_SCROLL_LOCK',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ab6ce6bc7d35678baf784ad6408dc5163',1,'tram::UI']]], ['key_5fsemicolon_132',['KEY_SEMICOLON',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a7f249c51c85b70d88b3111981395fc12',1,'tram::UI']]], ['key_5fslash_133',['KEY_SLASH',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a90604854aaf219402dcd8dcef0e0e90d',1,'tram::UI']]], ['key_5fspace_134',['KEY_SPACE',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a079997c8c91cd20d3ebadc87cf6d1f91',1,'tram::UI']]], ['key_5ft_135',['KEY_T',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ad4c7822edd979f8bdedd5e6163f56aa6',1,'tram::UI']]], ['key_5ftab_136',['KEY_TAB',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a9137d1e85435e1ffdd1ae5dfb60642ce',1,'tram::UI']]], ['key_5fu_137',['KEY_U',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ad534a3e46746e91991157a05eb7d3cb8',1,'tram::UI']]], ['key_5fup_138',['KEY_UP',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9abe5aae21c145c2c6f5d0997b4bb72513',1,'tram::UI']]], ['key_5fv_139',['KEY_V',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a39bc230491a0f214530797586b693d72',1,'tram::UI']]], ['key_5fw_140',['KEY_W',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9af03983e7a15a27c5ea4b5eeea851132a',1,'tram::UI']]], ['key_5fworld_5f1_141',['KEY_WORLD_1',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a89dc956618bf640b45ee4a294ebdf306',1,'tram::UI']]], ['key_5fworld_5f2_142',['KEY_WORLD_2',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a1663093048d8896ab8430aed03ffa4e8',1,'tram::UI']]], ['key_5fx_143',['KEY_X',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a9a2534085f6831bba64642f48e16541c',1,'tram::UI']]], ['key_5fy_144',['KEY_Y',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ac98369b8a3b7464424f590a189d7f16b',1,'tram::UI']]], ['key_5fz_145',['KEY_Z',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a57e21efd8cdb16815ddb8b3d522fd8e2',1,'tram::UI']]], ['keybinding_146',['KeyBinding',['../structtram_1_1_u_i_1_1_key_binding.html',1,'tram::UI']]], ['keyboardaction_147',['KeyboardAction',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99',1,'tram::UI']]], ['keyboardaction_5flimit_148',['KEYBOARDACTION_LIMIT',['../namespacetram.html#a7c062f0c7a0634e170676191a5fc33ba',1,'tram']]], ['keyboardaction_5ft_149',['keyboardaction_t',['../namespacetram_1_1_u_i.html#a7127b8ce6c937f44455685b8ec1f0461',1,'tram::UI']]], ['keyboardaxis_150',['KeyboardAxis',['../namespacetram_1_1_u_i.html#aace717edeba1f507cd383c7d1f00e064',1,'tram::UI']]], ['keyboardkey_151',['KeyboardKey',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9',1,'tram::UI']]], ['keychar_152',['KEYCHAR',['../structtram_1_1_event.html#a569d6673fa83d2a5ec86b3d0c36c8765a666e52b2727737f31e9817000fed8201',1,'tram::Event']]], ['keycode_153',['KeyCode',['../namespacetram_1_1_u_i.html#ac636614381ad3dbc2f776a81b079d7aa',1,'tram::UI']]], ['keydown_154',['KEYDOWN',['../structtram_1_1_event.html#a569d6673fa83d2a5ec86b3d0c36c8765aa052e9950f1d2312d34d82e91687e393',1,'tram::Event']]], ['keyframe_155',['Keyframe',['../structtram_1_1_render_1_1_keyframe.html',1,'tram::Render']]], ['keyframe_5fcount_156',['keyframe_count',['../structtram_1_1_animation_component_1_1_animation_playback_info.html#a71d6f0678bda33baa5635c35df35f4e8',1,'tram::AnimationComponent::AnimationPlaybackInfo::keyframe_count()'],['../structtram_1_1_render_1_1_keyframe_header.html#ad5759dfc006442feaed40a25e8f19629',1,'tram::Render::KeyframeHeader::keyframe_count()']]], ['keyframe_5foffset_157',['keyframe_offset',['../structtram_1_1_render_1_1_keyframe_header.html#a63ce32117d2989baf934941940c747ae',1,'tram::Render::KeyframeHeader']]], ['keyframeheader_158',['KeyframeHeader',['../structtram_1_1_render_1_1_keyframe_header.html',1,'tram::Render']]], ['keyframes_159',['keyframes',['../structtram_1_1_animation_component_1_1_animation_playback_info.html#a46acadd400538066abb77bebaee607bc',1,'tram::AnimationComponent::AnimationPlaybackInfo']]], ['keymouse_160',['KeyMouse',['../namespacetram_1_1_u_i.html#aa2ea74c6f62438b6f846bee415717c6b',1,'tram::UI']]], ['keypress_161',['KEYPRESS',['../structtram_1_1_event.html#a569d6673fa83d2a5ec86b3d0c36c8765aebce1b240f10af279a3528b2e1a66be1',1,'tram::Event']]], ['keypress_162',['KeyPress',['../namespacetram_1_1_u_i.html#ad23f479a3671059a175ec92cc496018d',1,'tram::UI']]], ['keyrelease_163',['KeyRelease',['../namespacetram_1_1_u_i.html#a46b24e31c21dac00a0d569caeed3a3c7',1,'tram::UI']]], ['keyscroll_164',['KeyScroll',['../namespacetram_1_1_u_i.html#a6b5c256e6ef51e21a36a61a03114383c',1,'tram::UI']]], ['keyup_165',['KEYUP',['../structtram_1_1_event.html#a569d6673fa83d2a5ec86b3d0c36c8765a6af1fe1cbf5d703f660915d9d3132d03',1,'tram::Event']]], ['kill_166',['KILL',['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6a3553b17921e781edc3cf5231e7d074e6',1,'tram::Signal::KILL()'],['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afda4f54ab68d5ca6abbfdf4a90c4f4d56fb',1,'tram::Message::KILL()']]], ['kitchensink_2ecpp_167',['kitchensink.cpp',['../kitchensink_8cpp.html',1,'']]], ['kitchensink_2eh_168',['kitchensink.h',['../kitchensink_8h.html',1,'']]], ['kitchensink_5fsystem_169',['KITCHENSINK_SYSTEM',['../namespacetram_1_1_ext_1_1_kitchensink.html#acada14362be543540a0a63813c3a68a7',1,'tram::Ext::Kitchensink']]], ['kitchensinkmenulist_170',['KitchensinkMenuList',['../classtram_1_1_ext_1_1_kitchensink_1_1_kitchensink_menu_list.html',1,'tram::Ext::Kitchensink']]] ]; ================================================ FILE: docs/cppapi/search/all_c.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/all_c.js ================================================ var searchData= [ ['l00_0',['l00',['../structtram_1_1_render_1_1_spherical_harmonic.html#a2fde1bd3674e6c203b2a2e7c8d8e07e8',1,'tram::Render::SphericalHarmonic::l00()'],['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#af95ce39082aca3d3b042baf2d557026d',1,'tram::Render::API::ShaderUniformModelMatrices::l00()']]], ['l10_1',['l10',['../structtram_1_1_render_1_1_spherical_harmonic.html#a4e2b108386258d38350834e9a27b0fa5',1,'tram::Render::SphericalHarmonic::l10()'],['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#ad6eb45bf4538c03eb0feb42dabb711dd',1,'tram::Render::API::ShaderUniformModelMatrices::l10()']]], ['l11_2',['l11',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#a000c1b753af3925ea749caf983a6933a',1,'tram::Render::API::ShaderUniformModelMatrices::l11()'],['../structtram_1_1_render_1_1_spherical_harmonic.html#aadeb8364aa07f05f2205f45edd341156',1,'tram::Render::SphericalHarmonic::l11()']]], ['l1m1_3',['l1m1',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#afd6502029f8f67602ccea8590d5a04b6',1,'tram::Render::API::ShaderUniformModelMatrices::l1m1()'],['../structtram_1_1_render_1_1_spherical_harmonic.html#a7092c1cfbcf8e874806928c2d2c238cb',1,'tram::Render::SphericalHarmonic::l1m1()']]], ['l20_4',['l20',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#ad072a1d1260143d7540ccee58dae20eb',1,'tram::Render::API::ShaderUniformModelMatrices::l20()'],['../structtram_1_1_render_1_1_spherical_harmonic.html#aaabe11128777b6ba8ff82ab0e66e6bf3',1,'tram::Render::SphericalHarmonic::l20()']]], ['l21_5',['l21',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#aba2e8aa574479f3238defdda372fb316',1,'tram::Render::API::ShaderUniformModelMatrices::l21()'],['../structtram_1_1_render_1_1_spherical_harmonic.html#a1025a228f68a93c7b8615b88fd396c48',1,'tram::Render::SphericalHarmonic::l21()']]], ['l22_6',['l22',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#a848095a6e0880c5988c75ecce810213a',1,'tram::Render::API::ShaderUniformModelMatrices::l22()'],['../structtram_1_1_render_1_1_spherical_harmonic.html#ac053c1c3de62cd1e3437549721d4d1ab',1,'tram::Render::SphericalHarmonic::l22()']]], ['l2m1_7',['l2m1',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#ae2eb22be8a185c17e85dc12a42a55e0a',1,'tram::Render::API::ShaderUniformModelMatrices::l2m1()'],['../structtram_1_1_render_1_1_spherical_harmonic.html#ad8260971060597fb0edb9c00677ac751',1,'tram::Render::SphericalHarmonic::l2m1()']]], ['l2m2_8',['l2m2',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#a6fa948a1fffff9cfe0007da4edb0e3ff',1,'tram::Render::API::ShaderUniformModelMatrices::l2m2()'],['../structtram_1_1_render_1_1_spherical_harmonic.html#a31d249ba90d9ca39cd367cb245a60ebd',1,'tram::Render::SphericalHarmonic::l2m2()']]], ['language_2ecpp_9',['language.cpp',['../language_8cpp.html',1,'']]], ['language_2eh_10',['language.h',['../language_8h.html',1,'']]], ['language_5fstring_5flimit_11',['LANGUAGE_STRING_LIMIT',['../namespacetram.html#ac465c542500fdf2dc7483c0d15896d8b',1,'tram']]], ['lanugage_5fstring_5fcharacter_5flimit_12',['LANUGAGE_STRING_CHARACTER_LIMIT',['../namespacetram.html#a94cfdaa4232d3dde886253c4eafcd4e9',1,'tram']]], ['last_13',['last',['../classtram_1_1_hashmap.html#a08c1ce10f128f0995b5e82d8f372b6f1',1,'tram::Hashmap::last()'],['../classtram_1_1_queue.html#aa63013a7088d526ff1529718777848f1',1,'tram::Queue::last()'],['../classtram_1_1_stack.html#a68378c5ce401f8baa36270fbe3174bd0',1,'tram::Stack::last()'],['../classtram_1_1_stack_pool.html#a0c46cfa4c88b248b51a096436d4a4147',1,'tram::StackPool::last()'],['../classtram_1_1_pool.html#a4623a5f83e0f8a60e0189b4dd1cb7792',1,'tram::Pool::last()']]], ['last_5factivate_14',['last_activate',['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#ac4a1ce474fcd9da9bf9fc66dd27281ed',1,'tram::Ext::Kitchensink::Button']]], ['last_5fevent_15',['LAST_EVENT',['../structtram_1_1_event.html#a569d6673fa83d2a5ec86b3d0c36c8765a6ff49b678610c7c9535811b1457b65f8',1,'tram::Event']]], ['last_5fmessage_16',['LAST_MESSAGE',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afda96a5ae11c632629632b9aff371451303',1,'tram::Message']]], ['last_5fpath_17',['last_path',['../structtram_1_1_audio_1_1_spatial_1_1_audio_source.html#a8768b3b7278d9cc7cf1401a56b9ee64f',1,'tram::Audio::Spatial::AudioSource']]], ['last_5fsignal_18',['LAST_SIGNAL',['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6a8777185c2588cce0992b52afd378c79f',1,'tram::Signal']]], ['last_5ftick_19',['last_tick',['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container.html#a33b5848afcb8d3758b9c39b5ac3de2c1',1,'tram::Ext::Kitchensink::AttributeContainer']]], ['last_5fupdate_5fframe_20',['last_update_frame',['../namespacetram_1_1_g_u_i.html#a6b89bb5200e494e6cd5a0191bf527df0',1,'tram::GUI']]], ['lastend_21',['lastend',['../classtram_1_1_stack.html#aa0969199ef282f64cc05a4954bc67bb7',1,'tram::Stack']]], ['lastfree_22',['lastfree',['../classtram_1_1_pool.html#a09e44e2d85b1f84461756d203450e014',1,'tram::Pool']]], ['layer_23',['Layer',['../classtram_1_1_ext_1_1_menu_1_1_console.html#a6784de1db0572c2424cea93c4e0722dc',1,'tram::Ext::Menu::Console::Layer()'],['../classtram_1_1_ext_1_1_menu_1_1_menu.html#a972ff0163ab4ebc7d8acacce5d09a921',1,'tram::Ext::Menu::Menu::Layer()'],['../classtram_1_1_ext_1_1_menu_1_1_system_menu.html#a692ddb36ef07913c6a6595e3446370b8',1,'tram::Ext::Menu::SystemMenu::Layer()'],['../classtram_1_1_ext_1_1_menu_1_1_settings_menu.html#a48a51fdd2b0697dc7eea3934e247760f',1,'tram::Ext::Menu::SettingsMenu::Layer()']]], ['layer_24',['layer',['../classtram_1_1_render_component.html#a9af00bf62b86a65cfecda4579cea9081',1,'tram::RenderComponent::layer()'],['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#a2b5170151eece25917d7ec3bd7ffc18e',1,'tram::Render::API::D3DDrawListEntry::layer()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#aac3c45c286b4c4e9fea14811c685a7b8',1,'tram::Render::API::GLDrawListEntry::layer()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html#a8312bc4a540cc25641d8b0cdf848b9dd',1,'tram::Render::API::SWDrawListEntry::layer()']]], ['layer_25',['Layer',['../classtram_1_1_ext_1_1_kitchensink_1_1_list_dialog.html#a80fddca313006f7df721f6a76c4c0f46',1,'tram::Ext::Kitchensink::ListDialog::Layer()'],['../classtram_1_1_ext_1_1_menu_1_1_debug_menu.html#acbe4b614ff313801176a8d5c9323f200',1,'tram::Ext::Menu::DebugMenu::Layer()'],['../classtram_1_1_ext_1_1_menu_1_1_entity_properties.html#a4a5a2895e27ec27d0872dbc9551d64f4',1,'tram::Ext::Menu::EntityProperties::Layer()'],['../classtram_1_1_ext_1_1_menu_1_1_entity_picker.html#a82465472dd314737a46e71a4bb490413',1,'tram::Ext::Menu::EntityPicker::Layer()'],['../classtram_1_1_ext_1_1_menu_1_1_list_selection.html#a37f83670863cef2947520bfc87bf7439',1,'tram::Ext::Menu::ListSelection::Layer()'],['../classtram_1_1_ext_1_1_menu_1_1_message_send.html#a0aac25870c19be99a9dbec77f3941bd6',1,'tram::Ext::Menu::MessageSend::Layer()'],['../classtram_1_1_ext_1_1_menu_1_1_intercept_menu.html#a350714cafdedf14bb78f9ccbc0c5d6b9',1,'tram::Ext::Menu::InterceptMenu::Layer()'],['../classtram_1_1_ext_1_1_menu_1_1_world_cell_properties.html#a4ebf84a47dcf839b8b4cc56c968e9647',1,'tram::Ext::Menu::WorldCellProperties::Layer()'],['../classtram_1_1_ext_1_1_menu_1_1_statistics_menu.html#a0ecc5a8babc2c7f2efed7d7d05f57fc9',1,'tram::Ext::Menu::StatisticsMenu::Layer()'],['../classtram_1_1_ext_1_1_menu_1_1_event_emit.html#a3b6187201edc29ec7ce239ac0eaad7af',1,'tram::Ext::Menu::EventEmit::Layer()'],['../classtram_1_1_ext_1_1_menu_1_1_signal_menu.html#a0a8ace39c5fbd999a3651c9c3042b3a7',1,'tram::Ext::Menu::SignalMenu::Layer()'],['../classtram_1_1_ext_1_1_menu_1_1_options.html#aa6713b9bb4a7e222ce6ea27a7ecee557',1,'tram::Ext::Menu::Options::Layer()']]], ['layer_5fmask_26',['layer_mask',['../classtram_1_1_ext_1_1_camera_1_1_camera.html#a7ed7e7879eb1dbfb568d72099a8c74d0',1,'tram::Ext::Camera::Camera']]], ['layer_5ft_27',['layer_t',['../namespacetram_1_1_render.html#a92b94ac310d4c8df9a4294518ffd75c8',1,'tram::Render']]], ['layerparameters_28',['LayerParameters',['../structtram_1_1_render_1_1_a_p_i_1_1_layer_parameters.html',1,'tram::Render::API']]], ['leaf_29',['leaf',['../structtram_1_1_render_1_1_a_a_b_b_1_1_a_a_b_b_leaf.html#ad1a2099435858c965b4ddb5e4dbea1e6',1,'tram::Render::AABB::AABBLeaf']]], ['left_30',['left',['../structtram_1_1_a_a_b_b_tree_1_1_node.html#a31d0922f21e58394dad1993d731601b3',1,'tram::AABBTree::Node::left()'],['../structtram_1_1_navmesh_node.html#ae94caf6d6598ec97d187913ec353ed31',1,'tram::NavmeshNode::left()']]], ['length_31',['length',['../structtram_1_1_audio_1_1_spatial_1_1_audio_buffer.html#aedd3b42bb186f9f0902e148cb315e64c',1,'tram::Audio::Spatial::AudioBuffer']]], ['less_32',['Less',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a60afb565dd3a1e281129e5564ec3d3c1',1,'tram::Ext::Kitchensink::QuestVariable']]], ['lessorequal_33',['LessOrEqual',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#aa15fbf47249f3a14cfa3e1bd33a10b56',1,'tram::Ext::Kitchensink::QuestVariable']]], ['light_34',['light',['../classtram_1_1_light_component.html#ad6cf4eb83f59c3bd63368dc6f79e6df9',1,'tram::LightComponent::light()'],['../classtram_1_1_light.html#af5eb3563a405edc4d1344432268cd7a9',1,'tram::Light::light()']]], ['light_35',['Light',['../classtram_1_1_light.html#ad1690e5bb21843da0f5ef2c16a6219ff',1,'tram::Light::Light()'],['../classtram_1_1_light.html',1,'tram::Light'],['../structtram_1_1_render_1_1_light_tree_1_1_light.html',1,'tram::Render::LightTree::Light']]], ['light_2ecpp_36',['light.cpp',['../render_2light_8cpp.html',1,'(Global Namespace)'],['../render_2opengl_2light_8cpp.html',1,'(Global Namespace)'],['../components_2light_8cpp.html',1,'(Global Namespace)'],['../entities_2light_8cpp.html',1,'(Global Namespace)']]], ['light_2eh_37',['light.h',['../components_2light_8h.html',1,'(Global Namespace)'],['../render_2light_8h.html',1,'(Global Namespace)'],['../render_2opengl_2light_8h.html',1,'(Global Namespace)'],['../entities_2light_8h.html',1,'(Global Namespace)']]], ['light_5flist_38',['light_list',['../namespacetram_1_1_render_1_1_a_p_i.html#a22c9b2ef54e756a89652662cc7ad099e',1,'tram::Render::API::light_list()'],['../namespacetram_1_1_render_1_1_light_tree.html#ace17f1d05c614eb447987103188f6fe8',1,'tram::Render::LightTree::light_list()']]], ['light_5ft_39',['light_t',['../structtram_1_1_render_1_1light__t.html',1,'tram::Render']]], ['light_5ftree_40',['light_tree',['../namespacetram_1_1_render_1_1_a_p_i.html#a4855c01cc36bad195643cf956389b5de',1,'tram::Render::API::light_tree()'],['../namespacetram_1_1_render_1_1_light_tree.html#a6baeaf6a8a379247c5a02079c1ef92cb',1,'tram::Render::LightTree::light_tree()']]], ['light_5ftree_5fids_41',['light_tree_ids',['../namespacetram_1_1_render_1_1_a_p_i.html#a8e818c0f10852d65d1464fa7db96faaa',1,'tram::Render::API']]], ['light_5funiform_5fbinding_42',['light_uniform_binding',['../namespacetram_1_1_render_1_1_a_p_i.html#a0be78caaebe8d1e8e924fac4021c7955',1,'tram::Render::API']]], ['light_5funiform_5fbuffer_43',['light_uniform_buffer',['../namespacetram_1_1_render_1_1_a_p_i.html#aa86b61fec7a4aff417768d154811ad32',1,'tram::Render::API']]], ['lightcomponent_44',['LightComponent',['../classtram_1_1_light_component.html',1,'tram']]], ['lightgraph_45',['LightGraph',['../classtram_1_1_render_1_1_light_graph.html#a32f29f8d80661eedcfe32d72e7f11def',1,'tram::Render::LightGraph::LightGraph()'],['../classtram_1_1_render_1_1_light_graph.html',1,'tram::Render::LightGraph']]], ['lightmap_46',['lightmap',['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#aaabf5a2f388426badc47c45deff2a92c',1,'tram::Ext::Kitchensink::Button::lightmap()'],['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#ae3fe0f4405b6bf946621d32ea4313980',1,'tram::Render::API::D3DDrawListEntry::lightmap()'],['../structtram_1_1_render_1_1_a_p_i_1_1_f_v_f_helper.html#af69f0b192cb4f3f7b4332c356146db14',1,'tram::Render::API::FVFHelper::lightmap()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#a67f380744f271dbece03c8f081c86bf1',1,'tram::Render::API::GLDrawListEntry::lightmap()'],['../structtram_1_1_render_1_1_a_p_i_1_1_f_f_p_helper.html#abea9e4cefc78f34737c5ec3a4c78e635',1,'tram::Render::API::FFPHelper::lightmap()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html#ada769a583a606a1cce9acbeaf75c0055',1,'tram::Render::API::SWDrawListEntry::lightmap()'],['../classtram_1_1_render_component.html#a7d0c1122a6e9b85ccd68fb5b2a3b2914',1,'tram::RenderComponent::lightmap()'],['../classtram_1_1_static_world_object.html#a6686c2178ae7e6444df5f9887c2199d7',1,'tram::StaticWorldObject::lightmap()']]], ['lights_47',['lights',['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#a78b0d32279518eb5cd60d66a2fc9f4fe',1,'tram::Render::API::D3DDrawListEntry::lights()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#a41a219aed82e2711a6e78adfcdfb299f',1,'tram::Render::API::GLDrawListEntry::lights()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html#a5e765e4ee8dd68acf7ece8f12d0663c7',1,'tram::Render::API::SWDrawListEntry::lights()']]], ['lighttex_48',['lighttex',['../structtram_1_1_render_1_1_static_model_vertex.html#ab1ff0529e48d198c0875ccb58f73eb18',1,'tram::Render::StaticModelVertex']]], ['limit_49',['limit',['../structtram_1_1_signal.html#aeea99e2596e8761fc321edb7876fd138',1,'tram::Signal']]], ['line_5fhigh_50',['LINE_HIGH',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefaa82e6b81c1dad1e5be58b33af7dd8d13',1,'tram::GUI']]], ['line_5flow_51',['LINE_LOW',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefa25770615c52ba66df41c25c40f294120',1,'tram::GUI']]], ['line_5fnormal_52',['LINE_NORMAL',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefa88618d8270351e0a56f9c48b9a7ea890',1,'tram::GUI']]], ['line_5fvertex_5ffvf_53',['LINE_VERTEX_FVF',['../namespacetram_1_1_render_1_1_a_p_i.html#a092639593561b8318a7db302cde0cd97',1,'tram::Render::API']]], ['linevertex_54',['LineVertex',['../structtram_1_1_render_1_1_a_p_i_1_1_line_vertex.html',1,'tram::Render::API::LineVertex'],['../structtram_1_1_render_1_1_line_vertex.html',1,'tram::Render::LineVertex']]], ['linevisible_55',['LineVisible',['../namespacetram_1_1_render_1_1_a_p_i.html#a66e59e9064356a39cc2fdcc936ba7e0b',1,'tram::Render::API']]], ['link_56',['Link',['../classtram_1_1_world_cell.html#acfada914f06d4f84530531b1117b5280',1,'tram::WorldCell']]], ['linkedshader_57',['LinkedShader',['../classtram_1_1_render_1_1_a_p_i_1_1_linked_shader.html',1,'tram::Render::API']]], ['list_58',['list',['../classtram_1_1_ext_1_1_menu_1_1_list_selection.html#a03f4f84b736a200aafa2848c1e3e02cd',1,'tram::Ext::Menu::ListSelection']]], ['listdialog_59',['ListDialog',['../classtram_1_1_ext_1_1_kitchensink_1_1_list_dialog.html#a7efdad5869f1dee758dd15a5c49e9d8c',1,'tram::Ext::Kitchensink::ListDialog::ListDialog()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_list_dialog.html#a150d52aef6f1ab1053a824ada7801c1d',1,'tram::Ext::Kitchensink::ListDialog::ListDialog(name_t)'],['../classtram_1_1_ext_1_1_kitchensink_1_1_list_dialog.html',1,'tram::Ext::Kitchensink::ListDialog']]], ['listener_60',['listener',['../classtram_1_1_event_listener.html#a930c397fc9144345c9fd431db387f329',1,'tram::EventListener']]], ['listener_5fcomponent_61',['LISTENER_COMPONENT',['../structtram_1_1_listener_info.html#a92c413c2c02e7a4f40f59d27dd94de0fa3f989e91e3bfe4271d96a41254195a99',1,'tram::ListenerInfo']]], ['listener_5fdata_5ffunction_62',['LISTENER_DATA_FUNCTION',['../structtram_1_1_listener_info.html#a92c413c2c02e7a4f40f59d27dd94de0fa5c5d57b139c0be8c8136418756f7150c',1,'tram::ListenerInfo']]], ['listener_5fdeleted_63',['LISTENER_DELETED',['../structtram_1_1_listener_info.html#a92c413c2c02e7a4f40f59d27dd94de0fa209a858d23af3b0b1b8737235412e5d0',1,'tram::ListenerInfo']]], ['listener_5fdepth_5flimit_64',['LISTENER_DEPTH_LIMIT',['../namespacetram_1_1_audio_1_1_spatial.html#aa61124c29ea3a00d8124d9c20dd8a4af',1,'tram::Audio::Spatial']]], ['listener_5fentity_65',['LISTENER_ENTITY',['../structtram_1_1_listener_info.html#a92c413c2c02e7a4f40f59d27dd94de0fadca681ed634170780b5eb66663ebeb5b',1,'tram::ListenerInfo']]], ['listener_5ffunction_66',['LISTENER_FUNCTION',['../structtram_1_1_listener_info.html#a92c413c2c02e7a4f40f59d27dd94de0fa094d897ff3fc5cf407e8d5d13c71f0a5',1,'tram::ListenerInfo']]], ['listener_5fideal_5fangle_67',['listener_ideal_angle',['../structtram_1_1_audio_1_1_spatial_1_1_path_tracing_result.html#aa24833c62159206914afc05979470fa8',1,'tram::Audio::Spatial::PathTracingResult']]], ['listener_5forientation_68',['listener_orientation',['../namespacetram_1_1_audio_1_1_spatial.html#acb9b0bd1fd2aee84d39ac5b2f656eac8',1,'tram::Audio::Spatial']]], ['listener_5fposition_69',['listener_position',['../namespacetram_1_1_audio_1_1_spatial.html#a7d4e5961da95174066a93816b9b418ad',1,'tram::Audio::Spatial']]], ['listener_5freverb_5fdelay_70',['listener_reverb_delay',['../namespacetram_1_1_audio_1_1_spatial.html#a572ed0408e51e97d4aab9499559dcabe',1,'tram::Audio::Spatial']]], ['listener_5freverb_5fdistance_71',['listener_reverb_distance',['../namespacetram_1_1_audio_1_1_spatial.html#a8d1dc309e3904bd79c244bbc63c00839',1,'tram::Audio::Spatial']]], ['listener_5freverb_5fforce_72',['listener_reverb_force',['../namespacetram_1_1_audio_1_1_spatial.html#abadc037457811482c0cc517072ab1f77',1,'tram::Audio::Spatial']]], ['listener_5freverb_5fnormalized_73',['listener_reverb_normalized',['../namespacetram_1_1_audio_1_1_spatial.html#a4353683a488762dd6403d5c7d5f6e1fb',1,'tram::Audio::Spatial']]], ['listener_5ft_74',['listener_t',['../namespacetram.html#abc1aacd663943b92d06f10950a9f10d0',1,'tram']]], ['listenerinfo_75',['ListenerInfo',['../structtram_1_1_listener_info.html',1,'tram']]], ['listenertype_76',['ListenerType',['../structtram_1_1_listener_info.html#a92c413c2c02e7a4f40f59d27dd94de0f',1,'tram::ListenerInfo']]], ['listinventory_77',['ListInventory',['../classtram_1_1_ext_1_1_kitchensink_1_1_list_inventory.html',1,'tram::Ext::Kitchensink']]], ['listinventorymanager_78',['ListInventoryManager',['../classtram_1_1_ext_1_1_kitchensink_1_1_list_inventory_manager.html',1,'tram::Ext::Kitchensink']]], ['listselection_79',['ListSelection',['../classtram_1_1_ext_1_1_menu_1_1_list_selection.html#a3d214fa7bbb5d943a33213188da06d4f',1,'tram::Ext::Menu::ListSelection::ListSelection()'],['../classtram_1_1_ext_1_1_menu_1_1_list_selection.html',1,'tram::Ext::Menu::ListSelection']]], ['listtrade_80',['ListTrade',['../classtram_1_1_ext_1_1_kitchensink_1_1_list_trade.html',1,'tram::Ext::Kitchensink']]], ['lit_81',['lit',['../structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html#a0859b3baf93722d9d62189c3647e6f84',1,'tram::Render::API::StaticVertex::lit()'],['../main_8cpp.html#a3c4f14ce2eba453f60e455656652a950',1,'lit(): main.cpp']]], ['lit_5fx_82',['lit_x',['../structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html#a53eed8281dac3f4bed2ede27d0954189',1,'tram::Render::API::StaticVertex']]], ['lit_5fy_83',['lit_y',['../structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html#ac62101b4f1d1623067501c1fd21c0e19',1,'tram::Render::API::StaticVertex']]], ['load_84',['Load',['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_hurt.html#af6eb6f5d84da2055d5f4d361c951646f',1,'tram::Ext::Kitchensink::TriggerHurt::Load()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_once.html#a0779152e5dfe962f7cea735d6da6c5c8',1,'tram::Ext::Kitchensink::TriggerOnce::Load()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_multiple.html#a09b7e8d6f7c06354087c7bbed605a0dc',1,'tram::Ext::Kitchensink::TriggerMultiple::Load()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_push.html#a09d780452b0c4c3affdad42d728ccb9f',1,'tram::Ext::Kitchensink::TriggerPush::Load()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_remove.html#a452f9f9d0d4b8864d59bfa8d93c2e128',1,'tram::Ext::Kitchensink::TriggerRemove::Load()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_teleport.html#aa6638ecd68bb098631b31097e320839a',1,'tram::Ext::Kitchensink::TriggerTeleport::Load()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_player_movement.html#aff679002a0af88434745c06eacb3eadd',1,'tram::Ext::Kitchensink::TriggerPlayerMovement::Load()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_quest_entity.html#acc37e81bc1cd3bf3459d8884e158737d',1,'tram::Ext::Kitchensink::QuestEntity::Load()'],['../classtram_1_1_entity.html#a42f5dbd06dc0014191ac78e6c2900386',1,'tram::Entity::Load()'],['../classtram_1_1_resource.html#a25c818d18a10010f342eaae99c083826',1,'tram::Resource::Load()'],['../classtram_1_1_world_cell.html#a587fab236965840dbf0b5254f562b2f6',1,'tram::WorldCell::Load()'],['../classtram_1_1_crate.html#a69259e33129f5d795e4fc449cc50a430',1,'tram::Crate::Load()'],['../classtram_1_1_decoration.html#a18546c61e3519a3a6ab882e7deb160fb',1,'tram::Decoration::Load()'],['../classtram_1_1_light.html#af787551e1e7ceecc73891f52811050b0',1,'tram::Light::Load()'],['../classtram_1_1_marker.html#a5ad81cd0f4cb4a426ac37ef1519f5357',1,'tram::Marker::Load()'],['../classtram_1_1_player.html#a7e5497fa4c5d70508cd8928a625bb2d7',1,'tram::Player::Load()'],['../classtram_1_1_scriptable.html#aad1310e7fddbaee776682f678d745208',1,'tram::Scriptable::Load()'],['../classtram_1_1_sound.html#ac7999efe8694dde2bbd32140c515c391',1,'tram::Sound::Load()'],['../classtram_1_1_static_world_object.html#a9fef88663daf97d8d472e29d480f29cc',1,'tram::StaticWorldObject::Load()'],['../classtram_1_1_trigger.html#a6d880e5d98a9a6210c79bf19d280219c',1,'tram::Trigger::Load()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#aae16221eb106915c8e3e509709f52952',1,'tram::Ext::Kitchensink::Button::Load()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_breakable.html#a430889350ca4370924e484230119c29e',1,'tram::Ext::Kitchensink::Breakable::Load()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_water.html#a2ae4115b327140de3532868a80f6738c',1,'tram::Ext::Kitchensink::Water::Load()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_train.html#ad2659a3719dc8658bb53300fc312cd76',1,'tram::Ext::Kitchensink::Train::Load()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_pickup.html#a649fb346d1ab51b8cfcc2d21a8e87d37',1,'tram::Ext::Kitchensink::Pickup::Load()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_text.html#a33ea59023d2ab8334d03f2eca1920472',1,'tram::Ext::Kitchensink::DebugText::Load()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_shape.html#aca488fc2cc2ee6132747b7f9ee2aa5af',1,'tram::Ext::Kitchensink::DebugShape::Load()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_autosave.html#a1ddc0ce845dfe63f5c7fa089a5309925',1,'tram::Ext::Kitchensink::TriggerAutosave::Load()'],['../namespacetram_1_1_language.html#a33a74954652fedfbc85aab8cdd4c99f3',1,'tram::Language::Load()'],['../namespacetram_1_1_settings.html#a455697cb70a2b3f4f481dba130d6b181',1,'tram::Settings::Load()']]], ['load_5ffail_85',['load_fail',['../classtram_1_1_resource.html#af0e8d76a1a9490a659b8ef54b1357a59',1,'tram::Resource']]], ['loadall_86',['LoadAll',['../classtram_1_1_render_1_1_animation.html#acd6c4015e2d1ed771624e80141eb29fd',1,'tram::Render::Animation']]], ['loaddependency_87',['LoadDependency',['../namespacetram_1_1_async.html#a9e1b28345fded87fa20aee192ddcce0f',1,'tram::Async']]], ['loaded_88',['LOADED',['../classtram_1_1_entity.html#aaed86a9cc626eeab1796509f702ff378a58c799076c57526cf98b222b7c9ccb0b',1,'tram::Entity::LOADED()'],['../classtram_1_1_resource.html#a7a4ce943d482665189305b828868c2a4a1cd089eb2e1c0a5a211eed70d4cd18f2',1,'tram::Resource::LOADED()'],['../classtram_1_1_world_cell.html#a90b9ed6e3265fb6b3e569669117fd514a87adfa2880447ba4a45de045b1e55ea1',1,'tram::WorldCell::LOADED()']]], ['loaded_5ffrom_5fdisk_89',['LOADED_FROM_DISK',['../classtram_1_1_entity.html#aaed86a9cc626eeab1796509f702ff378a6527c86a34651be34b20c68178af4cdd',1,'tram::Entity::LOADED_FROM_DISK()'],['../classtram_1_1_world_cell.html#a90b9ed6e3265fb6b3e569669117fd514a6b5701f7e4536f58cd7bb5ec2496e33d',1,'tram::WorldCell::LOADED_FROM_DISK()']]], ['loader_2ecpp_90',['loader.cpp',['../loader_8cpp.html',1,'']]], ['loader_2eh_91',['loader.h',['../loader_8h.html',1,'']]], ['loadfromdisk_92',['LoadFromDisk',['../classtram_1_1_render_1_1_light_graph.html#a7dd1cd54e31470a76c5919dfb8311629',1,'tram::Render::LightGraph::LoadFromDisk()'],['../classtram_1_1_render_1_1_material.html#a0a50eea94634fac18b6a8fc13332f9f5',1,'tram::Render::Material::LoadFromDisk()'],['../classtram_1_1_render_1_1_model.html#a10296fe276ff9ac4d87dc9db6451092f',1,'tram::Render::Model::LoadFromDisk()'],['../classtram_1_1_render_1_1_sprite.html#a128d2e728b4a7b035b2a2436ad83a77a',1,'tram::Render::Sprite::LoadFromDisk()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container.html#a69e3f0e2bea54c85f6ae123d0409a86e',1,'tram::Ext::Kitchensink::AttributeContainer::LoadFromDisk()'],['../classtram_1_1_audio_1_1_sound.html#ae681916d6ba3394f2993162be809738c',1,'tram::Audio::Sound::LoadFromDisk()'],['../classtram_1_1_audio_1_1_sound_graph.html#ac716178da1e5c588036e57756bbcd76f',1,'tram::Audio::SoundGraph::LoadFromDisk()'],['../classtram_1_1_world_cell.html#a71c4e65daebc0e0dd1244843f8148c33',1,'tram::WorldCell::LoadFromDisk()'],['../classtram_1_1_physics_1_1_collision_model.html#a89325e4cec53a937d5f189701505344e',1,'tram::Physics::CollisionModel::LoadFromDisk()'],['../classtram_1_1_render_1_1_animation.html#aa0a4327e94e5babd310c67593cf4dae7',1,'tram::Render::Animation::LoadFromDisk()'],['../classtram_1_1_resource.html#a5dc8ecdb5e36b98015fe2f2ea0de6e14',1,'tram::Resource::LoadFromDisk()'],['../classtram_1_1_path.html#a03b3057af03cc8870dc7a699cdb1a77c',1,'tram::Path::LoadFromDisk()'],['../classtram_1_1_navmesh.html#a792dae6d4c013fb3f773c1bf851a3f6c',1,'tram::Navmesh::LoadFromDisk()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest.html#aadf35ec9fef560168ee449692458e1d8',1,'tram::Ext::Kitchensink::Quest::LoadFromDisk()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#a68d8a76e4253d7236b9b1ce50483750c',1,'tram::Ext::Kitchensink::Inventory::LoadFromDisk()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_topic.html#afb41bd714afd933a421568dbd55cd99a',1,'tram::Ext::Kitchensink::DialogTopic::LoadFromDisk()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_character.html#abe19a06c096ca336b0951e93013675e2',1,'tram::Ext::Kitchensink::Character::LoadFromDisk()']]], ['loadfrommemory_93',['LoadFromMemory',['../classtram_1_1_audio_1_1_sound_graph.html#ad953426922078e22c045f5d04517b650',1,'tram::Audio::SoundGraph::LoadFromMemory()'],['../classtram_1_1_audio_1_1_sound.html#a8e7cecf626c003bbb39fd560da2d68a0',1,'tram::Audio::Sound::LoadFromMemory()'],['../classtram_1_1_resource.html#aabc50d5a44a79da0f323e829711a6b0b',1,'tram::Resource::LoadFromMemory()'],['../classtram_1_1_physics_1_1_collision_model.html#a2d4b731dbae6f63ce4f665ccd60a94e0',1,'tram::Physics::CollisionModel::LoadFromMemory()'],['../classtram_1_1_render_1_1_sprite.html#a1fb88f43158526d7330e36bdbba2f86c',1,'tram::Render::Sprite::LoadFromMemory()'],['../classtram_1_1_render_1_1_model.html#a4d4127ce3dd4bd14ca6c2a559137a57e',1,'tram::Render::Model::LoadFromMemory()'],['../classtram_1_1_render_1_1_material.html#a3006d4a771167841597b0ee169213744',1,'tram::Render::Material::LoadFromMemory()'],['../classtram_1_1_render_1_1_light_graph.html#af1948a05344456f61b7c26f2871c7a91',1,'tram::Render::LightGraph::LoadFromMemory()'],['../classtram_1_1_render_1_1_animation.html#a256a3c4dc1998b67c26aab28b7684d9d',1,'tram::Render::Animation::LoadFromMemory()']]], ['loadmaterialinfo_94',['LoadMaterialInfo',['../classtram_1_1_render_1_1_material.html#a5d94a73e4b23271686808101fd33211a',1,'tram::Render::Material']]], ['loadresourcesfromdisk_95',['LoadResourcesFromDisk',['../namespacetram_1_1_async.html#a15485706aae380a728a9e771feabb503',1,'tram::Async']]], ['loadresourcesfrommemory_96',['LoadResourcesFromMemory',['../namespacetram_1_1_async.html#a165152c16b8171d9a4acdfd2d80592de',1,'tram::Async']]], ['loadscript_97',['LoadScript',['../namespacetram_1_1_script.html#aadbf03d624e136dc8f25ab15c15e9f1a',1,'tram::Script::LoadScript()'],['../classtram_1_1_script_1_1_interface.html#a133e2307fda40c3d2ab284e809a0f434',1,'tram::Script::Interface::LoadScript()']]], ['location_98',['location',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_light.html#aaba013dff6639e491d1e9f82e40bd5c9',1,'tram::Render::API::GLLight::location()'],['../classtram_1_1_audio_component.html#a1ff1eab65a76f78216b57665a6c8b464',1,'tram::AudioComponent::location()'],['../classtram_1_1_decal_component.html#a2f8e987f85f6ff0720b415e87509510e',1,'tram::DecalComponent::location()'],['../classtram_1_1_light_component.html#afc605268cb96a739eee4ff721fc013d1',1,'tram::LightComponent::location()'],['../classtram_1_1_particle_component.html#acb488cd232ea710d12db28f52d199377',1,'tram::ParticleComponent::location()'],['../classtram_1_1_render_component.html#a473efffe2b970de9b84d7c55c7e22f72',1,'tram::RenderComponent::location()'],['../classtram_1_1_sprite_component.html#a2d21c7134a144caa924c0c76fdd44e9b',1,'tram::SpriteComponent::location()'],['../classtram_1_1_entity.html#aa2a31ccd75576ca82547ed1feed60d8c',1,'tram::Entity::location()'],['../structtram_1_1_render_1_1_keyframe.html#a54ad174c2d1454d5b8699463918241cc',1,'tram::Render::Keyframe::location()'],['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_light.html#acbab4448a21e3615bd881388b0af1a8b',1,'tram::Render::API::D3DLight::location()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_light.html#a2b570e30f7b76c312622439f7ea7323e',1,'tram::Render::API::SWLight::location()']]], ['lock_99',['lock',['../classtram_1_1_queue.html#a45fae4fa6028c6f6f5c714f9bd88e6b8',1,'tram::Queue::lock()'],['../structtram_1_1_audio_1_1_spatial_1_1_audio_render.html#ae791d5a4cb90154dccd3baa41bd19442',1,'tram::Audio::Spatial::AudioRender::lock()']]], ['lock_100',['Lock',['../classtram_1_1_spinlock.html#a9ab6e05f0a2d8cb920081fa3507eb864',1,'tram::Spinlock']]], ['lock_101',['LOCK',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afdaf080d077b786681283fc6cdef14e0760',1,'tram::Message']]], ['locked_5fuse_102',['LOCKED_USE',['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6ae8146d8232bb6831a1194a39c668fd78',1,'tram::Signal']]], ['lockrenderlist_103',['LockRenderlist',['../namespacetram_1_1_audio_1_1_spatial.html#af0ceb28e435bdcb3504d0702785e2ad4',1,'tram::Audio::Spatial']]], ['log_104',['Log',['../namespacetram.html#a78660be0737c048109e94b12da8376c1',1,'tram::Log(Severity severity, System::system_t system, const std::string_view &format, Args &&... args)'],['../namespacetram.html#ab55eb49c2df70f400895dab88b146d00',1,'tram::Log(System::system_t system, const std::string_view &format, Args &&... args)'],['../namespacetram.html#a1d9753464d0d21a28f513716fa797cd8',1,'tram::Log(const std::string_view &format, Args &&... args)']]], ['log_105',['log',['../namespacetram_1_1implementation.html#a9e18832774c9a92e285eeb0cfa84d64d',1,'tram::implementation::log(void(*flush)(Severity, System::system_t), Severity severity, System::system_t system, std::string_view &format)'],['../namespacetram_1_1implementation.html#aaddb11c3ce07c8bbb6e9dc206f13fff3',1,'tram::implementation::log(void(*flush)(Severity, System::system_t), Severity severity, System::system_t system, std::string_view &format, T &value, Args &&... args)']]], ['logging_2ecpp_106',['logging.cpp',['../logging_8cpp.html',1,'']]], ['logging_2eh_107',['logging.h',['../logging_8h.html',1,'']]], ['logintercept_108',['LogIntercept',['../structtram_1_1_ext_1_1_menu_1_1_log_intercept.html',1,'tram::Ext::Menu']]], ['look_5fat_109',['LOOK_AT',['../structtram_1_1_event.html#a569d6673fa83d2a5ec86b3d0c36c8765ae40a6fc2fbfe23e1efe200dfea7e1c5d',1,'tram::Event']]], ['look_5fat_5fdirection_110',['look_at_direction',['../namespacetram_1_1_ext_1_1_camera.html#ae2730c41e6bab8d84d06e89700724e9e',1,'tram::Ext::Camera']]], ['look_5fat_5fentity_111',['look_at_entity',['../namespacetram_1_1_ext_1_1_camera.html#a07e626d2d01f42be6f6f209cc12cbc18',1,'tram::Ext::Camera']]], ['look_5fdirection_112',['look_direction',['../classtram_1_1_controller_component.html#ad160a058e6730f0040aa6a9338e15750',1,'tram::ControllerComponent']]], ['lookupenvironmentmap_113',['LookupEnvironmentMap',['../classtram_1_1_render_1_1_light_graph.html#a0c98cd60f1386f73c654536c70147351',1,'tram::Render::LightGraph']]], ['lookupfilter_114',['LookupFilter',['../classtram_1_1_audio_1_1_sound_graph.html#a3d22cc051810eba6e6e9bcc88191e67f',1,'tram::Audio::SoundGraph']]], ['lookupharmonic_115',['LookupHarmonic',['../classtram_1_1_render_1_1_light_graph.html#ad506de9dafeee1b2e44727ac031f0d4a',1,'tram::Render::LightGraph']]], ['loyalty_116',['loyalty',['../structtram_1_1_ext_1_1_kitchensink_1_1_faction_rank.html#abeca783c9890c1faaadc5d8faefad347',1,'tram::Ext::Kitchensink::FactionRank::loyalty()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_base_faction_rank.html#ac64acf21dbf7f0ce28fc4976aa610806',1,'tram::Ext::Kitchensink::BaseFactionRank::loyalty()']]], ['lua_117',['Lua',['../classtram_1_1_ext_1_1_scripting_1_1_lua_1_1_lua.html',1,'tram::Ext::Scripting::Lua']]], ['lua_2ecpp_118',['lua.cpp',['../lua_8cpp.html',1,'']]], ['lua_2eh_119',['lua.h',['../lua_8h.html',1,'']]] ]; ================================================ FILE: docs/cppapi/search/all_d.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/all_d.js ================================================ var searchData= [ ['macros_2eh_0',['macros.h',['../macros_8h.html',1,'']]], ['main_1',['main',['../main_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main.cpp']]], ['main_2ecpp_2',['main.cpp',['../main_8cpp.html',1,'']]], ['mainloop_3',['mainloop',['../main_8cpp.html#a896df4ffe3f986ad843e4d191cd712b3',1,'main.cpp']]], ['make_4',['make',['../classtram_1_1_event_listener.html#afabda0702b19ce175e7603c6e3624ea1',1,'tram::EventListener']]], ['make_5',['Make',['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_package.html#ace7ea2819350d9638a0980f288c62416',1,'tram::Ext::Kitchensink::AIPackage::Make()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_topic.html#a62f08db43d9b1adc67326d1910b3bf0f',1,'tram::Ext::Kitchensink::DialogTopic::Make()'],['../classtram_1_1_entity.html#a5bde1559d6170dca943fa7f41dde7ea9',1,'tram::Entity::Make(name_t type, File *file)'],['../classtram_1_1_entity.html#a357bb17d489c2f456994c1fa4150f333',1,'tram::Entity::Make(name_t type, const SharedEntityData &, const ValueArray &)'],['../classtram_1_1_transition.html#aa87cde46adb540c592be7626e595119c',1,'tram::Transition::Make()'],['../classtram_1_1_world_cell.html#ac34c6821383503d786d5de19caba1041',1,'tram::WorldCell::Make()'],['../classtram_1_1_render_1_1_material.html#a25c1c97007d7229c7adb8a4e9986e70d',1,'tram::Render::Material::Make()'],['../namespacetram_1_1_scriptable_type.html#a69a13c0e50a7af34965201fdee75210b',1,'tram::ScriptableType::Make()']]], ['make_6',['make',['../structtram_1_1_ext_1_1_kitchensink_1_1_inventory_factory_info.html#a71e5a6e2f63dc97ca9bc99bdcda4634e',1,'tram::Ext::Kitchensink::InventoryFactoryInfo::make()'],['../classtram_1_1_component.html#a677f4c2d5457aa376fba89d95f3ca8c9',1,'tram::Component::make()'],['../classtram_1_1_event_listener.html#ad0763adada010c84064f47422fce20ec',1,'tram::EventListener::make(event_t event, Entity *parent)'],['../classtram_1_1_event_listener.html#a53f1f1eb7860d9f8e2138c0b605cbefc',1,'tram::EventListener::make(event_t event, EntityComponent *parent)']]], ['makeaudiobuffer_7',['MakeAudioBuffer',['../namespacetram_1_1_audio_1_1_a_p_i.html#aaaac5e27e3363b227c4ea0d70f8844a0',1,'tram::Audio::API']]], ['makeaudiosource_8',['MakeAudioSource',['../namespacetram_1_1_audio_1_1_a_p_i.html#a02a046aaade1a4a0290db64f9514816b',1,'tram::Audio::API']]], ['makecollisionshape_9',['MakeCollisionShape',['../namespacetram_1_1_physics_1_1_a_p_i.html#a94cd3fb5de4826d7e83dd17450d30612',1,'tram::Physics::API::MakeCollisionShape(CollisionShapeTransform *shapes, size_t shape_count)'],['../namespacetram_1_1_physics_1_1_a_p_i.html#a871da86313d2f9e88539c71940ac8e89',1,'tram::Physics::API::MakeCollisionShape(CollisionShape shape)']]], ['makelight_10',['MakeLight',['../namespacetram_1_1_render_1_1_a_p_i.html#a86dea3f6c3851af17406ccee3bdc8b85',1,'tram::Render::API']]], ['makematerial_11',['MakeMaterial',['../namespacetram_1_1_render_1_1_a_p_i.html#afaefcc84f8bd511adca07903dd4cd276',1,'tram::Render::API']]], ['makenewerrormodel_12',['MakeNewErrorModel',['../namespacetram_1_1_render.html#a7e7fe9a01e4909b61222ad2214175b8e',1,'tram::Render']]], ['makenewerrortexture_13',['MakeNewErrorTexture',['../namespacetram_1_1_render.html#a1ebeba7bcc783c32d08b2948d2640a37',1,'tram::Render']]], ['makepattern_14',['MakePattern',['../classtram_1_1_render_1_1_material.html#acfdd1c7fb5e2c4057855d2dcf7ee75a7',1,'tram::Render::Material']]], ['makerigidbody_15',['MakeRigidbody',['../namespacetram_1_1_physics_1_1_a_p_i.html#a5e1dea21d1c0aa5c2f2eec460c9be277',1,'tram::Physics::API']]], ['makesomesourcepaths_16',['MakeSomeSourcePaths',['../namespacetram_1_1_audio_1_1_spatial.html#ac07a5c7f91a197dfdd8544a505a71576',1,'tram::Audio::Spatial']]], ['makespans_17',['MakeSpans',['../namespacetram_1_1_render_1_1_a_p_i.html#a84dcc808d228294d594b6bb0a97e3869',1,'tram::Render::API']]], ['maketrigger_18',['MakeTrigger',['../namespacetram_1_1_physics_1_1_a_p_i.html#a2268940df819b4cd3a4cf431515ac19d',1,'tram::Physics::API']]], ['makeuniformbuffer_19',['MakeUniformBuffer',['../namespacetram_1_1_render_1_1_a_p_i.html#abe7ed6af822251d71e03add10aa5c14e',1,'tram::Render::API']]], ['marker_20',['Marker',['../classtram_1_1_marker.html#a1c59918f30d773f92bdea30840ef63a1',1,'tram::Marker::Marker()'],['../classtram_1_1_marker.html',1,'tram::Marker']]], ['marker_2ecpp_21',['marker.cpp',['../marker_8cpp.html',1,'']]], ['marker_2eh_22',['marker.h',['../marker_8h.html',1,'']]], ['mat2_23',['mat2',['../namespacetram.html#a1449f767374f220889ec5253470ac9d9',1,'tram']]], ['mat4_24',['mat4',['../namespacetram.html#aa105cf31ac2e470934e6b0827a14d942',1,'tram']]], ['material_25',['Material',['../classtram_1_1_render_1_1_material.html#a7953b137f0390f6e729efe9e9cf86aa3',1,'tram::Render::Material::Material(name_t name, materialtype_t type)'],['../classtram_1_1_render_1_1_material.html#a5174425b4875181d93adc3926d2d7441',1,'tram::Render::Material::Material(name_t name)']]], ['material_26',['material',['../classtram_1_1_render_1_1_material.html#aa1af831cde7f02d1d9c76c2223638197',1,'tram::Render::Material::material()'],['../structtram_1_1_render_1_1_a_a_b_b_triangle.html#a5b4b6aa924442e2390bf50cc9f601c75',1,'tram::Render::AABBTriangle::material()'],['../classtram_1_1_render_1_1_sprite.html#aca24e7f82749a755a8118a46b3729a3b',1,'tram::Render::Sprite::material()']]], ['material_27',['Material',['../classtram_1_1_render_1_1_material.html',1,'tram::Render']]], ['material_2ecpp_28',['material.cpp',['../material_8cpp.html',1,'(Global Namespace)'],['../opengl_2material_8cpp.html',1,'(Global Namespace)']]], ['material_2eh_29',['material.h',['../opengl_2material_8h.html',1,'(Global Namespace)'],['../material_8h.html',1,'(Global Namespace)']]], ['material_5fcount_30',['material_count',['../structtram_1_1_render_1_1_index_range.html#a14c45f9b3939a2e5238a8600a7534196',1,'tram::Render::IndexRange']]], ['material_5fenvironmentmap_31',['MATERIAL_ENVIRONMENTMAP',['../namespacetram_1_1_render.html#a315a4bade1773ce2a425e5e7702c003eab3c06e1d79de6f9c4b972d1cb999da4d',1,'tram::Render']]], ['material_5fflat_5fcolor_32',['MATERIAL_FLAT_COLOR',['../namespacetram_1_1_render.html#a315a4bade1773ce2a425e5e7702c003eaa6dd8472dc4c68ec742267e42f35b943',1,'tram::Render']]], ['material_5fglyph_33',['MATERIAL_GLYPH',['../namespacetram_1_1_render.html#a315a4bade1773ce2a425e5e7702c003ea682ec4dc9c0e2f2bc0c9240a2a2ea004',1,'tram::Render']]], ['material_5flast_34',['MATERIAL_LAST',['../namespacetram_1_1_render.html#a315a4bade1773ce2a425e5e7702c003ea5b08ab6f4c7f3deb1d5d137e5beb629f',1,'tram::Render']]], ['material_5flightmap_35',['MATERIAL_LIGHTMAP',['../namespacetram_1_1_render.html#a315a4bade1773ce2a425e5e7702c003ea18dd7f6f787feb198b3e7edb65298605',1,'tram::Render']]], ['material_5fmsdf_36',['MATERIAL_MSDF',['../namespacetram_1_1_render.html#a315a4bade1773ce2a425e5e7702c003ead0ee78b3fd22ca7f74c90e0599f8ef0f',1,'tram::Render']]], ['material_5ft_37',['material_t',['../structtram_1_1_render_1_1material__t.html',1,'tram::Render']]], ['material_5ftexture_38',['MATERIAL_TEXTURE',['../namespacetram_1_1_render.html#a315a4bade1773ce2a425e5e7702c003ead42b4d3349a29728811b787cc7bc7632',1,'tram::Render']]], ['material_5ftexture_5falpha_39',['MATERIAL_TEXTURE_ALPHA',['../namespacetram_1_1_render.html#a315a4bade1773ce2a425e5e7702c003ea3812bb1fe713fff55c3ed971c25324ac',1,'tram::Render']]], ['material_5ftype_40',['material_type',['../structtram_1_1_render_1_1_triangle_bucket.html#a75c3cdb4cdc7c330594859449fb1dd0f',1,'tram::Render::TriangleBucket::material_type()'],['../structtram_1_1_render_1_1_index_range.html#a125c674b4ce58b771a833686ed8b6205',1,'tram::Render::IndexRange::material_type()']]], ['material_5fwater_41',['MATERIAL_WATER',['../namespacetram_1_1_render.html#a315a4bade1773ce2a425e5e7702c003eab4828c9e426ef1f1cc97c9d20fb9d6dc',1,'tram::Render']]], ['materialfilter_42',['MaterialFilter',['../namespacetram_1_1_render.html#aab519c3dc6ead26c1a7695e4c3b5501c',1,'tram::Render']]], ['materialproperty_43',['MaterialProperty',['../namespacetram_1_1_render.html#aa55781f294a5a76e9cba54376f45a43f',1,'tram::Render']]], ['materials_44',['materials',['../classtram_1_1_render_1_1_model.html#add4100bd27f40383014ada9f1038e1d1',1,'tram::Render::Model::materials()'],['../structtram_1_1_render_1_1_triangle_bucket.html#a279a79cbe2932b9f9fd33cf9d856f088',1,'tram::Render::TriangleBucket::materials()'],['../structtram_1_1_render_1_1_index_range.html#aa0179744732873180811f35532344320',1,'tram::Render::IndexRange::materials()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#aafdb1c878c1a40c28478169a730e3c18',1,'tram::Render::API::GLDrawListEntry::materials()']]], ['materialtype_5ft_45',['materialtype_t',['../namespacetram_1_1_render.html#a9be8283c1665f7d42c97367d857d43cc',1,'tram::Render']]], ['materialtypes_46',['MaterialTypes',['../namespacetram_1_1_render.html#a315a4bade1773ce2a425e5e7702c003e',1,'tram::Render']]], ['math_2ecpp_47',['math.cpp',['../math_8cpp.html',1,'']]], ['math_2eh_48',['math.h',['../math_8h.html',1,'']]], ['matrices_49',['matrices',['../namespacetram_1_1_render_1_1_a_p_i.html#a6dfddeaa3cef9401836d64332bf741d7',1,'tram::Render::API']]], ['matrix_50',['matrix',['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html#a963fb9fdc188ee14b78c1514dc4a2360',1,'tram::Render::API::SWDrawListEntry::matrix()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#a4d34b1b8c60ff21a937113dc78b7d4a4',1,'tram::Render::API::GLDrawListEntry::matrix()'],['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#a140d4caf20bd86230ad43a203602020f',1,'tram::Render::API::D3DDrawListEntry::matrix()']]], ['matrix_5funiform_5fbinding_51',['matrix_uniform_binding',['../namespacetram_1_1_render_1_1_a_p_i.html#a6e1d5dec0444c684f0afec150c59bfc0',1,'tram::Render::API']]], ['matrix_5funiform_5fbuffer_52',['matrix_uniform_buffer',['../namespacetram_1_1_render_1_1_a_p_i.html#a2de134ec2f22c719dbf8e81f7ee6852d',1,'tram::Render::API']]], ['max_53',['max',['../structtram_1_1_a_a_b_b_tree_1_1_node.html#a76065598bad42f58e74815676b4232fc',1,'tram::AABBTree::Node']]], ['max_5fevent_5ftypes_54',['MAX_EVENT_TYPES',['../namespacetram.html#a67acb96d23f8bfea55638bc35178d08d',1,'tram']]], ['max_5ffragment_5fshaders_55',['MAX_FRAGMENT_SHADERS',['../namespacetram.html#ac5209551801f3515acbdabc46e957f45',1,'tram']]], ['max_5flinked_5fshaders_56',['MAX_LINKED_SHADERS',['../namespacetram.html#af6d768de9b8d7f850907e74b15f654ab',1,'tram']]], ['max_5flua_5ffunctions_57',['MAX_LUA_FUNCTIONS',['../namespacetram_1_1_ext_1_1_scripting_1_1_lua.html#a4cfafc75c333b7b33aa642f4a2dfa952',1,'tram::Ext::Scripting::Lua']]], ['max_5fmaterial_5ftypes_58',['MAX_MATERIAL_TYPES',['../namespacetram.html#a917f372f74717cd689223239e73f0ec5',1,'tram']]], ['max_5fsize_59',['max_size',['../classtram_1_1_hashmap.html#a1624bb31327369ea902f87e19531d6aa',1,'tram::Hashmap']]], ['max_5fvertex_5fformats_60',['MAX_VERTEX_FORMATS',['../namespacetram.html#a7bc148b33d35076ac28624e78c06e32f',1,'tram']]], ['max_5fvertex_5fshaders_61',['MAX_VERTEX_SHADERS',['../namespacetram.html#aeb3f21bc4e94ced5691b7a802ce417e5',1,'tram']]], ['maxsize_62',['maxSize',['../classtram_1_1_pool.html#aba0758ee3091dd01f8f880000973d805',1,'tram::Pool']]], ['maybe_5fflag_63',['maybe_flag',['../structtram_1_1_settings_1_1_raw_setting.html#a6524501498362b74170adbf0250fba28',1,'tram::Settings::RawSetting']]], ['medium_64',['medium',['../structtram_1_1_file_source.html#a13ed2bed034f6bdbfb616d75141c8d63',1,'tram::FileSource']]], ['memory_5fend_65',['memory_end',['../classtram_1_1_queue.html#abdd8f8cca203a1cb1612535dc418bf37',1,'tram::Queue']]], ['memory_5fstart_66',['memory_start',['../classtram_1_1_queue.html#a5a96adeb0d29e7f5f6f53c4171d19390',1,'tram::Queue']]], ['menu_67',['MENU',['../namespacetram_1_1_settings.html#a0861538a476a71457a80e698e710eef1a451735aa4dbc8730e0238c1d87758273',1,'tram::Settings']]], ['menu_68',['Menu',['../classtram_1_1_ext_1_1_menu_1_1_menu.html',1,'tram::Ext::Menu']]], ['menu_2ecpp_69',['menu.cpp',['../kitchensink_2menu_8cpp.html',1,'(Global Namespace)'],['../menu_2menu_8cpp.html',1,'(Global Namespace)']]], ['menu_2eh_70',['menu.h',['../kitchensink_2menu_8h.html',1,'(Global Namespace)'],['../menu_2menu_8h.html',1,'(Global Namespace)']]], ['menu_5flist_71',['menu_list',['../namespacetram_1_1_ext_1_1_menu.html#a430defe2c6bc8ce1fb5d75b41b558113',1,'tram::Ext::Menu']]], ['menu_5fstack_72',['menu_stack',['../namespacetram_1_1_ext_1_1_menu.html#ad6f40542aa62e171700b1c195770c014',1,'tram::Ext::Menu']]], ['menu_5fsystem_73',['MENU_SYSTEM',['../namespacetram_1_1_ext_1_1_menu.html#ac964e0479522fe9ecac4f78c47de8674',1,'tram::Ext::Menu']]], ['mergeaabbmax_74',['MergeAABBMax',['../namespacetram.html#ad77ebd7184cb4042cd3f12789f7f6888',1,'tram::MergeAABBMax()'],['../classtram_1_1_a_a_b_b_tree.html#a7381f1d5ef18522f092b20432af0c291',1,'tram::AABBTree::MergeAABBMax(vec3 a, vec3 b)']]], ['mergeaabbmin_75',['MergeAABBMin',['../classtram_1_1_a_a_b_b_tree.html#aa25621c85212298d11a04b79b8638609',1,'tram::AABBTree::MergeAABBMin()'],['../namespacetram.html#a47d29b14ffc788f302abead903c46544',1,'tram::MergeAABBMin()']]], ['mesh_76',['Mesh',['../structtram_1_1_physics_1_1_collision_shape.html#ab1b9dd4a5ab3e27a4325d18df5e4d096',1,'tram::Physics::CollisionShape']]], ['mesh_5fsize_77',['mesh_size',['../structtram_1_1_physics_1_1_collision_shape.html#aec3a6b467737e8ca959299a9173d30b7',1,'tram::Physics::CollisionShape']]], ['mesh_5ftriangles_78',['mesh_triangles',['../structtram_1_1_physics_1_1_collision_shape.html#a7c3bf4d26299f93f429849ad4f075a5c',1,'tram::Physics::CollisionShape']]], ['message_79',['message',['../structtram_1_1_ext_1_1_menu_1_1_log_intercept.html#a2a20b88ce99a306fdf5ab41a905550e0',1,'tram::Ext::Menu::LogIntercept']]], ['message_80',['Message',['../structtram_1_1_message.html',1,'tram']]], ['message_2ecpp_81',['message.cpp',['../message_8cpp.html',1,'']]], ['message_2eh_82',['message.h',['../message_8h.html',1,'']]], ['message_5fdata_5flimit_83',['MESSAGE_DATA_LIMIT',['../namespacetram.html#a3e23af0f990c870da7822e6160160173',1,'tram']]], ['message_5fpriority_5fqueue_5flimit_84',['MESSAGE_PRIORITY_QUEUE_LIMIT',['../namespacetram.html#a2b1778620231829d63a83b6c451b60c2',1,'tram']]], ['message_5fqueue_5flimit_85',['MESSAGE_QUEUE_LIMIT',['../namespacetram.html#a13df257c04982a0237aed3b1d1a18388',1,'tram']]], ['message_5ft_86',['message_t',['../namespacetram.html#a2d629e975ff280fbd5d11c40edb519f0',1,'tram']]], ['message_5ftype_87',['message_type',['../classtram_1_1_ext_1_1_menu_1_1_message_send.html#af5a139a253bf7fccfbd60307e4552d03',1,'tram::Ext::Menu::MessageSend::message_type()'],['../structtram_1_1_signal.html#a7781884f42b0b91a9adf65f682ee88b9',1,'tram::Signal::message_type()']]], ['message_5ftype_5flimit_88',['MESSAGE_TYPE_LIMIT',['../namespacetram.html#ac5765d4ac76416672f8f55e6e4e48b9b',1,'tram']]], ['messagehandler_89',['MessageHandler',['../classtram_1_1_trigger.html#a6fba995382f75a47579141e409b6c4c2',1,'tram::Trigger::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a7ffa11cb9e77ee441e75c12c776daf2d',1,'tram::Ext::Kitchensink::Button::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_breakable.html#aee0cec5c3827047160688f550eb3a9f4',1,'tram::Ext::Kitchensink::Breakable::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_multiple.html#afba3b0305dadaadb47d03e299d5feed0',1,'tram::Ext::Kitchensink::TriggerMultiple::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_train.html#ae2325d13d9f15bca5e4cac7111f95bab',1,'tram::Ext::Kitchensink::Train::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_remove.html#a361107230fc5fd0c1193cf0dfcd3f9ef',1,'tram::Ext::Kitchensink::TriggerRemove::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_push.html#a16e84722dd3f82b8d31241c7a61adba7',1,'tram::Ext::Kitchensink::TriggerPush::MessageHandler()'],['../classtram_1_1_light.html#ac45d1bc54463861a0b9919b8eca264aa',1,'tram::Light::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_once.html#aea523f5b59a0d9495f264dfc46a11d77',1,'tram::Ext::Kitchensink::TriggerOnce::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_hurt.html#ad528676eb4cc1bee09c8d61b18a60e49',1,'tram::Ext::Kitchensink::TriggerHurt::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_autosave.html#a7b9229167dc5e4e523673d81b715950f',1,'tram::Ext::Kitchensink::TriggerAutosave::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_shape.html#a3db61b3a8693e5b27a5be2f811d2dff0',1,'tram::Ext::Kitchensink::DebugShape::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_text.html#ab3a96a3bea79e5de1e4db4b958d82450',1,'tram::Ext::Kitchensink::DebugText::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_pickup.html#a13c6b811f951816a92465949a34c3932',1,'tram::Ext::Kitchensink::Pickup::MessageHandler()'],['../classtram_1_1_entity.html#ad81126191ef55c6ff2b3b112ce6c9cdb',1,'tram::Entity::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_quest_entity.html#a1fe119992afcc7629ca0395f40b6a78b',1,'tram::Ext::Kitchensink::QuestEntity::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_player_movement.html#a2f2b494dec320ccfe9a8c11dee242053',1,'tram::Ext::Kitchensink::TriggerPlayerMovement::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_teleport.html#a3bbf1ab021f484e52d3c54f6c64cf2fd',1,'tram::Ext::Kitchensink::TriggerTeleport::MessageHandler()'],['../classtram_1_1_static_world_object.html#aadf4aa7defed528401d1b40561b56e38',1,'tram::StaticWorldObject::MessageHandler()'],['../classtram_1_1_sound.html#afaf38811530319b1021f29e07f1b02c9',1,'tram::Sound::MessageHandler()'],['../classtram_1_1_scriptable.html#abfdd163bed725d0adf7a42efcba0d200',1,'tram::Scriptable::MessageHandler()'],['../classtram_1_1_player.html#ae00d494c1e34cc0387008e94ac6863a2',1,'tram::Player::MessageHandler()'],['../classtram_1_1_marker.html#ae890d19a9b46205c1be064f6c08291df',1,'tram::Marker::MessageHandler()'],['../classtram_1_1_decoration.html#a9d89648397f17f989b157f3981f4d41f',1,'tram::Decoration::MessageHandler()'],['../classtram_1_1_crate.html#af7343196750b22c09851f50d779faa86',1,'tram::Crate::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_water.html#a82504fffe38ba4dbecd3ea108d6b23ef',1,'tram::Ext::Kitchensink::Water::MessageHandler()']]], ['messageintercept_90',['MessageIntercept',['../structtram_1_1_ext_1_1_menu_1_1_message_intercept.html',1,'tram::Ext::Menu']]], ['messagesend_91',['MessageSend',['../classtram_1_1_ext_1_1_menu_1_1_message_send.html',1,'tram::Ext::Menu']]], ['metadata_5frigidbody_92',['METADATA_RIGIDBODY',['../namespacetram_1_1_physics_1_1_a_p_i.html#a7fe5a316a9a2a82e6fefebb795f58eb0a683885e7afa6ad15b84e90ec65051818',1,'tram::Physics::API']]], ['metadata_5ftrigger_93',['METADATA_TRIGGER',['../namespacetram_1_1_physics_1_1_a_p_i.html#a7fe5a316a9a2a82e6fefebb795f58eb0a5fb012083160bfb528a3b549ce276c04',1,'tram::Physics::API']]], ['metadatatype_94',['MetadataType',['../namespacetram_1_1_physics_1_1_a_p_i.html#a7fe5a316a9a2a82e6fefebb795f58eb0',1,'tram::Physics::API']]], ['mid_5fpoint_95',['mid_point',['../structtram_1_1_octree_1_1_node.html#a9f504886cb278bba4d7b3646c7a6f8f1',1,'tram::Octree::Node']]], ['midpoint_5fx_96',['midpoint_x',['../structtram_1_1_render_1_1_sprite_frame.html#ae60529c0aba231cf453f559d756f3f03',1,'tram::Render::SpriteFrame']]], ['midpoint_5fy_97',['midpoint_y',['../structtram_1_1_render_1_1_sprite_frame.html#a9eb4dd892a159105c8cd75208b151b64',1,'tram::Render::SpriteFrame']]], ['min_98',['min',['../structtram_1_1_a_a_b_b_tree_1_1_node.html#a93c5a016f35c05c08f454db6db446113',1,'tram::AABBTree::Node']]], ['misc_99',['MISC',['../namespacetram_1_1_system.html#a02b5e7a5340ef5ca42a650ca4d8ade65abeb938a79405470de9ba19372a7eb207',1,'tram::System']]], ['mode_100',['mode',['../classtram_1_1_file.html#acd6ce0e7642fe94f378dc8a749efdcb9',1,'tram::File::mode()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_texture.html#a2560949172455dcc62693eb9161f4d44',1,'tram::Render::API::SWTexture::mode()']]], ['model_101',['model',['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_teleport.html#aa7de7abe61d44d1229d02632344a3117',1,'tram::Ext::Kitchensink::TriggerTeleport::model()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_player_movement.html#ae52d91988675dae168e7ccc18e36b737',1,'tram::Ext::Kitchensink::TriggerPlayerMovement::model()'],['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#a4282d72e8b3c644febb6531d275854ce',1,'tram::Render::API::ShaderUniformModelMatrices::model()'],['../classtram_1_1_render_component.html#a3f3ff752d0389444e9450d9d3c27ac2b',1,'tram::RenderComponent::model()'],['../classtram_1_1_animation_component.html#a03643f9802dcb7bfe3afdabc432c3025',1,'tram::AnimationComponent::model()'],['../classtram_1_1_audio_component.html#acbf584247d4a88f0fa923f9e5b426f84',1,'tram::AudioComponent::model()'],['../classtram_1_1_light_component.html#a3bab1eb0115b251850a8342774d18a28',1,'tram::LightComponent::model()'],['../classtram_1_1_crate.html#af5795bc6e73fbf1f6f40968ed4d53d96',1,'tram::Crate::model()'],['../classtram_1_1_decoration.html#ab6212cdb928b6d3f28cdd0ed5d7b6053',1,'tram::Decoration::model()']]], ['model_102',['Model',['../classtram_1_1_render_1_1_model.html#a9b316fb88f81c47f0af41604333df822',1,'tram::Render::Model']]], ['model_103',['model',['../classtram_1_1_static_world_object.html#a0f37865a6e409691526901290d6c1d8b',1,'tram::StaticWorldObject::model()'],['../classtram_1_1_trigger.html#a9646278b81b27211890f5895400d216d',1,'tram::Trigger::model()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a1eda56e61bb29500549213c1d194a550',1,'tram::Ext::Kitchensink::Button::model()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_breakable.html#a74d7eb13aeb7ac3a513fef56b0fe0bf4',1,'tram::Ext::Kitchensink::Breakable::model()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_water.html#abce68a2e7fe9394d10f26ab51fe14e21',1,'tram::Ext::Kitchensink::Water::model()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_train.html#aa4eb604d75a4b015c214a73385b8583a',1,'tram::Ext::Kitchensink::Train::model()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_pickup.html#ac077e8cc4096fec6612b47ff60054279',1,'tram::Ext::Kitchensink::Pickup::model()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_text.html#ac289a25bd2a5fbdd29c0d3572a99db27',1,'tram::Ext::Kitchensink::DebugText::model()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_shape.html#a0ab7b3efe24ac2f24fc2e94bbcc779bc',1,'tram::Ext::Kitchensink::DebugShape::model()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_autosave.html#ae330b7417b6da030f0932f51d9282902',1,'tram::Ext::Kitchensink::TriggerAutosave::model()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_hurt.html#a1695bf4215ec18944897194e0abff99c',1,'tram::Ext::Kitchensink::TriggerHurt::model()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_once.html#a964426361804464f0916bfb2619691a7',1,'tram::Ext::Kitchensink::TriggerOnce::model()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_multiple.html#a4c73c411f8c7f31cb6a9db8863f0d2e4',1,'tram::Ext::Kitchensink::TriggerMultiple::model()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_push.html#a2119ac49d5090511a7f49419025cc877',1,'tram::Ext::Kitchensink::TriggerPush::model()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_remove.html#a17be889e28adc003ba638f2b8ee1a0cb',1,'tram::Ext::Kitchensink::TriggerRemove::model()']]], ['model_104',['Model',['../classtram_1_1_render_1_1_model.html',1,'tram::Render']]], ['model_2ecpp_105',['model.cpp',['../model_8cpp.html',1,'']]], ['model_2eh_106',['model.h',['../model_8h.html',1,'']]], ['model_5faabb_107',['model_aabb',['../classtram_1_1_render_1_1_model.html#a5308aff655f38cf12503c88a7d82cd01',1,'tram::Render::Model']]], ['model_5fdata_108',['model_data',['../classtram_1_1_render_1_1_model.html#a7559c74fb4b4ebb3c643dc721ec84167',1,'tram::Render::Model']]], ['model_5fmatrix_5funiform_5fbinding_109',['model_matrix_uniform_binding',['../namespacetram_1_1_render_1_1_a_p_i.html#a2a0501e16181b7cde9c9983906abf9dd',1,'tram::Render::API']]], ['model_5fmatrix_5funiform_5fbuffer_110',['model_matrix_uniform_buffer',['../namespacetram_1_1_render_1_1_a_p_i.html#a2caf5fc3ac8c9036ca6b9be0180c98ec',1,'tram::Render::API']]], ['modelaabb_111',['ModelAABB',['../structtram_1_1_render_1_1_model_a_a_b_b.html',1,'tram::Render']]], ['modeldata_112',['ModelData',['../structtram_1_1_render_1_1_model_data.html',1,'tram::Render']]], ['modellights_113',['modelLights',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#a466d03b2582d755052fec416d5b41ed9',1,'tram::Render::API::ShaderUniformModelMatrices']]], ['modelmatrices_114',['modelMatrices',['../namespacetram_1_1_render_1_1_a_p_i.html#aa07f4e77940a42bcb683f6a5fe639598',1,'tram::Render::API']]], ['monguser_115',['monguser',['../main_8cpp.html#a9968db2fbe46c1d2ce9a76ccdff7929c',1,'main.cpp']]], ['monguser_5farmature_116',['monguser_armature',['../main_8cpp.html#ac2200d84471744e6d70ce13d0835a5c9',1,'main.cpp']]], ['motion_5fstate_117',['motion_state',['../structtram_1_1_physics_1_1_a_p_i_1_1_rigidbody_metadata.html#a796afd885b22f43971092effd71696aa',1,'tram::Physics::API::RigidbodyMetadata']]], ['mouse_5fclick_5fnot_5fhandled_118',['mouse_click_not_handled',['../namespacetram_1_1_g_u_i.html#a8cd56d99b85b29b8659648e28bb1f5ca',1,'tram::GUI']]], ['mouse_5fclick_5fnot_5fhandled_5flate_119',['mouse_click_not_handled_late',['../namespacetram_1_1_g_u_i.html#a64d510448e860481081147bb9e1ef0d6',1,'tram::GUI']]], ['mouselook_120',['mouselook',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#ab7853506fcff02e0836600d49dd6c302',1,'tram::Ext::Camera::FirstPersonCamera']]], ['move_121',['Move',['../classtram_1_1_raycast_controller_component.html#a535ed363eec2dcf7f8232aeb1f594fb0',1,'tram::RaycastControllerComponent::Move()'],['../classtram_1_1_controller_component.html#a72c9c834cd28d9c7cdbd16e48d6146f6',1,'tram::ControllerComponent::Move()'],['../classtram_1_1_f_p_s_controller_component.html#ac47fe6964c8f7590a92f8fa5be91c825',1,'tram::FPSControllerComponent::Move(vec3 local_direction) override']]], ['move_5fdirection_122',['move_direction',['../classtram_1_1_f_p_s_controller_component.html#a7f8e30150636e41889103015053db656',1,'tram::FPSControllerComponent::move_direction()'],['../classtram_1_1_raycast_controller_component.html#a1bd33cca14d40e584b11c5794653dfe4',1,'tram::RaycastControllerComponent::move_direction()']]], ['move_5fmagnitude_123',['move_magnitude',['../classtram_1_1_raycast_controller_component.html#a2324ab257417857ba243ff51605ec8ae',1,'tram::RaycastControllerComponent']]], ['move_5fpick_5fup_124',['MOVE_PICK_UP',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afdad871312fc591cdf55d895050b433f107',1,'tram::Message']]], ['moveto_125',['MoveTo',['../classtram_1_1_ext_1_1_kitchensink_1_1_dialog_controller.html#a63a0067b174a312d9f08a935f86f1226',1,'tram::Ext::Kitchensink::DialogController']]] ]; ================================================ FILE: docs/cppapi/search/all_e.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/all_e.js ================================================ var searchData= [ ['name_0',['name',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_space.html#ad0a26b8eab6b4bf5ceb070fb8a933e61',1,'tram::Ext::Kitchensink::AnimStateSpace::name()'],['../classtram_1_1_resource.html#a1fdc62041e403a7a4a49c9860ff00b83',1,'tram::Resource::name()'],['../classtram_1_1_path.html#a7933eedcc33af28cc227944e586fee3f',1,'tram::Path::name()'],['../classtram_1_1_navmesh.html#afa5f4827ce36be9a7e41fe2d4f4dc55f',1,'tram::Navmesh::name()'],['../structtram_1_1_shared_entity_data.html#a7b51e3157cac585cc29e5fac4e4c92e1',1,'tram::SharedEntityData::name()'],['../classtram_1_1_entity.html#ab9b31a0d34775a0f01a2bef87efd3140',1,'tram::Entity::name()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest.html#a4970c1dac3ff3944988953b026fe61a7',1,'tram::Ext::Kitchensink::Quest::name()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_trigger.html#a2c73379c1b2dc328379689c441b4f6c8',1,'tram::Ext::Kitchensink::QuestTrigger::name()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state.html#a2d83ea50ba1cea2d5c129c0aef94ba37',1,'tram::Ext::Kitchensink::AnimState::name()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute.html#a120d6552e1adf281dad0a69266fd0d7b',1,'tram::Ext::Kitchensink::Attribute::name()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_effect.html#ab233fd8a0eeb7e70c0be0b243d8ebe4a',1,'tram::Ext::Kitchensink::Effect::name()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_attribute_info.html#a7c20f9f0740b7cb843b7f83236c7ce48',1,'tram::Ext::Kitchensink::AttributeInfo::name()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_faction.html#ae37fd3f67a9a89138abf720d56b9ab3f',1,'tram::Ext::Kitchensink::Faction::name()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_base_attribute.html#a510e0c24a6e61c55033bc18a038ed719',1,'tram::Ext::Kitchensink::BaseAttribute::name()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_topic.html#a4b3b0ac1cc9d4f78bdbcc3c40e1dda9c',1,'tram::Ext::Kitchensink::DialogTopic::name()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#abeaafff54d0a01ac7f6dfb3299bfeafe',1,'tram::Ext::Kitchensink::ItemClass::name()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#abdaedd33351ad672e211fecaabf207bd',1,'tram::Ext::Kitchensink::QuestVariable::name()'],['../structtram_1_1_settings_1_1_setting_info.html#a50e929f975c24f00c030d31f89132d87',1,'tram::Settings::SettingInfo::name()'],['../structtram_1_1_system_1_1_system_info.html#abaf1fcdb583a3c57d96ddcd49699a848',1,'tram::System::SystemInfo::name()'],['../classtram_1_1_transition.html#a47224165493129a93ae5d7cd71993ab0',1,'tram::Transition::name()'],['../classtram_1_1_world_cell.html#aa592b038ed73c8e2accc3ab41deb3d05',1,'tram::WorldCell::name()'],['../structtram_1_1_render_1_1_bone.html#ab98135b9d804b337b5415c5ca1462e84',1,'tram::Render::Bone::name()'],['../classtram_1_1_hashmap.html#a93e079fec725ee981f46656dec2b57fb',1,'tram::Hashmap::name()'],['../classtram_1_1_queue.html#aba308a2dd5f4e5dac2841047c46fa9bd',1,'tram::Queue::name()'],['../classtram_1_1_stack_pool.html#a8c6122dde12481b629f2f7b1ce2afc28',1,'tram::StackPool::name()']]], ['name_5fptr_1',['name_ptr',['../classtram_1_1_value_ptr.html#a9335ead8270ada0fd06cab62315dd646',1,'tram::ValuePtr']]], ['name_5ft_2',['name_t',['../namespacetram.html#ad77b577436f476438699a1c4da9d549c',1,'tram']]], ['name_5fvalue_3',['name_value',['../classtram_1_1_value.html#a602ff619b99e1e7bf104968b0e6cc105',1,'tram::Value']]], ['namecount_4',['NameCount',['../namespacetram_1_1_render.html#a5c915c417ac6870808de6e5dff23c287',1,'tram::Render']]], ['named_5fentity_5flimit_5',['NAMED_ENTITY_LIMIT',['../namespacetram.html#a746e6432794113f984198f336d8cce65',1,'tram']]], ['navmesh_6',['Navmesh',['../classtram_1_1_navmesh.html#a17689cf25d70bd126c147747daa8c559',1,'tram::Navmesh::Navmesh()'],['../classtram_1_1_navmesh.html',1,'tram::Navmesh']]], ['navmesh_2ecpp_7',['navmesh.cpp',['../navmesh_8cpp.html',1,'']]], ['navmesh_2eh_8',['navmesh.h',['../navmesh_8h.html',1,'']]], ['navmeshnode_9',['NavmeshNode',['../structtram_1_1_navmesh_node.html',1,'tram']]], ['near_5fplane_10',['near_plane',['../namespacetram_1_1_render.html#a5af0e03c95ed2805bfff581e9a09922f',1,'tram::Render']]], ['nearest_11',['nearest',['../structtram_1_1_octree_1_1_nearest_search.html#a720eef381f2e423cce0ca23f94add470',1,'tram::Octree::NearestSearch']]], ['nearestsearch_12',['NearestSearch',['../structtram_1_1_octree_1_1_nearest_search.html',1,'tram::Octree']]], ['new_13',['New',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory_manager.html#abe28a6894e388eb7ab8894278211222c',1,'tram::Ext::Kitchensink::InventoryManager::New()'],['../classtram_1_1_pool_proxy.html#a799c01c3a6c1648adb02038baff3e30a',1,'tram::PoolProxy::New()']]], ['newline_14',['NewLine',['../namespacetram_1_1_g_u_i.html#a76d6631e615a2c8e9fb923d034b92507',1,'tram::GUI']]], ['newnode_15',['NewNode',['../classtram_1_1_octree.html#a6d0d4f09bc8a2edd9abe38415e91bcc8',1,'tram::Octree']]], ['next_16',['next',['../structtram_1_1_navmesh_node.html#ad3d50642ce0f2c8aa8beb13fc48ca2e2',1,'tram::NavmeshNode::next()'],['../classtram_1_1_path_follower.html#a97bd194a87f8c4d747b1c737a34f8c53',1,'tram::PathFollower::next()']]], ['next_5fstate_17',['next_state',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state.html#ab37350588a0e40d138aa060e4477a3ee',1,'tram::Ext::Kitchensink::AnimState']]], ['next_5ftopics_18',['next_topics',['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_topic.html#ad7c75b7bab534c7d74ea772608285213',1,'tram::Ext::Kitchensink::DialogTopic']]], ['no_5fquote_19',['no_quote',['../structtram_1_1_u_i_d.html#a1b9ca41783891921e10ab8eea617db47',1,'tram::UID']]], ['node_20',['Node',['../structtram_1_1_a_a_b_b_tree_1_1_node.html',1,'tram::AABBTree::Node'],['../structtram_1_1_audio_1_1_sound_graph_1_1_node.html',1,'tram::Audio::SoundGraph::Node'],['../structtram_1_1_node.html',1,'tram::Node'],['../structtram_1_1_octree_1_1_node.html',1,'tram::Octree< T >::Node'],['../structtram_1_1_render_1_1_light_graph_1_1_node.html',1,'tram::Render::LightGraph::Node']]], ['node_5fid_5ft_21',['node_id_t',['../namespacetram.html#ac0fd37b7041ae8a9df2990aab1946e4c',1,'tram']]], ['nodes_22',['nodes',['../classtram_1_1_audio_1_1_sound_graph.html#afa8bc79a4c17ed1850d6f24d9110f37e',1,'tram::Audio::SoundGraph::nodes()'],['../classtram_1_1_graph.html#a95178b1e2898a6f4ba58c8b72aa2873d',1,'tram::Graph::nodes()'],['../classtram_1_1_navmesh.html#a267e74b526a850dce2b51459113082f7',1,'tram::Navmesh::nodes()'],['../classtram_1_1_render_1_1_light_graph.html#aea188bfb0d41aa49aea9898a72fd0ff2',1,'tram::Render::LightGraph::nodes()'],['../classtram_1_1_octree.html#a220207230fbc117b610f5b4a1cf38d65',1,'tram::Octree::nodes()']]], ['non_5fpersistent_23',['NON_PERSISTENT',['../classtram_1_1_entity.html#aaed86a9cc626eeab1796509f702ff378a2b07df103621567e55bd08cf7eaf6295',1,'tram::Entity']]], ['non_5fserializable_24',['NON_SERIALIZABLE',['../classtram_1_1_entity.html#aaed86a9cc626eeab1796509f702ff378a801be8e427a55a5afd0ab13515c3b4c3',1,'tram::Entity']]], ['none_25',['NONE',['../structtram_1_1_event.html#a569d6673fa83d2a5ec86b3d0c36c8765aded002c9efb73820628351359fd03c77',1,'tram::Event::NONE()'],['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afda7ae53af63c049ac73b14c74e217b9748',1,'tram::Message::NONE()'],['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6a0cc507ea9a180827724f623883db14b4',1,'tram::Signal::NONE()'],['../namespacetram_1_1_settings.html#a0861538a476a71457a80e698e710eef1abc55e02cfcd95615d38f62a14ebbc530',1,'tram::Settings::NONE()'],['../namespacetram_1_1_async.html#a3852629b110e5e57e85140bb5fe518e5a81db66b6ed079088749c66cca26aa725',1,'tram::Async::NONE()']]], ['normal_26',['normal',['../structtram_1_1_physics_1_1_a_p_i_1_1_object_collision.html#a29cedd1e3495373e681e36fa2e835403',1,'tram::Physics::API::ObjectCollision::normal()'],['../structtram_1_1_physics_1_1_collision.html#a690a4beda93af1b5ebc99d8c8fbf781b',1,'tram::Physics::Collision::normal()'],['../structtram_1_1_render_1_1_a_p_i_1_1_f_v_f_helper.html#a1404df1c7ae080b5bc1b02abef7c8be4',1,'tram::Render::API::FVFHelper::normal()'],['../structtram_1_1_render_1_1_a_a_b_b_triangle.html#a15f432bcb85141fa1bd8d9db631a552b',1,'tram::Render::AABBTriangle::normal()'],['../structtram_1_1_render_1_1_static_model_vertex.html#a75f016333052129270d3ec90b7e19e92',1,'tram::Render::StaticModelVertex::normal()'],['../structtram_1_1_render_1_1_dynamic_model_vertex.html#ae360db7530c291cdcb6464a083824520',1,'tram::Render::DynamicModelVertex::normal()'],['../structtram_1_1_render_1_1_a_p_i_1_1_f_f_p_helper.html#aae50347cfce0859d5827af69495e6664',1,'tram::Render::API::FFPHelper::normal()']]], ['not_27',['Not',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a836e78370020eb0f3939b0cbb7d67b5d',1,'tram::Ext::Kitchensink::QuestVariable']]], ['notification_5ftype_28',['notification_type',['../structtram_1_1_async_1_1_resource_request.html#ab379a8d5ddb692bc89f984e3b50b28d2',1,'tram::Async::ResourceRequest']]], ['nrm_29',['nrm',['../structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html#a688746f8f14a10efc891cf21050a8124',1,'tram::Render::API::StaticVertex::nrm()'],['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#aa0adeb384b4118a57a77b3c9cb26c140',1,'tram::Render::API::DynamicVertex::nrm()']]], ['nrm_5fx_30',['nrm_x',['../structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html#ae979b200874e1c01a4527b4f1164d8dd',1,'tram::Render::API::StaticVertex::nrm_x()'],['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#a497ee794924fd0a703819a500a55f925',1,'tram::Render::API::DynamicVertex::nrm_x()']]], ['nrm_5fy_31',['nrm_y',['../structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html#a82764d3aeda76e41829894da5c73c686',1,'tram::Render::API::StaticVertex::nrm_y()'],['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#a9efb756c481030e4f235dc3c7877185b',1,'tram::Render::API::DynamicVertex::nrm_y()']]], ['nrm_5fz_32',['nrm_z',['../structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html#a334cd02aa75a7460392752076ce9b910',1,'tram::Render::API::StaticVertex::nrm_z()'],['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#a51c8374f9bfabfec978dc16fe67f7249',1,'tram::Render::API::DynamicVertex::nrm_z()']]] ]; ================================================ FILE: docs/cppapi/search/all_f.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/all_f.js ================================================ var searchData= [ ['objectcollision_0',['ObjectCollision',['../structtram_1_1_physics_1_1_a_p_i_1_1_object_collision.html',1,'tram::Physics::API']]], ['objective_1',['objective',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a7021e12190dd43a86f02ea92fc0bb700',1,'tram::Ext::Kitchensink::QuestVariable']]], ['objective_2',['Objective',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#ac300d9727ec2d9e12f536168075c07ef',1,'tram::Ext::Kitchensink::QuestVariable']]], ['octant_3',['Octant',['../classtram_1_1_octree.html#a7d20e8b44f034b8f8c6748d004c72321',1,'tram::Octree']]], ['octant_5fbottom_5fleft_5fback_4',['OCTANT_BOTTOM_LEFT_BACK',['../classtram_1_1_octree.html#a7d20e8b44f034b8f8c6748d004c72321a2725927ea43dc9ad1d75bf626e7a3122',1,'tram::Octree']]], ['octant_5fbottom_5fleft_5ffront_5',['OCTANT_BOTTOM_LEFT_FRONT',['../classtram_1_1_octree.html#a7d20e8b44f034b8f8c6748d004c72321aa2db770146af64ef460c9178aa13e716',1,'tram::Octree']]], ['octant_5fbottom_5fright_5fback_6',['OCTANT_BOTTOM_RIGHT_BACK',['../classtram_1_1_octree.html#a7d20e8b44f034b8f8c6748d004c72321afa2be5c65b39f91ddb5ce010124498b9',1,'tram::Octree']]], ['octant_5fbottom_5fright_5ffront_7',['OCTANT_BOTTOM_RIGHT_FRONT',['../classtram_1_1_octree.html#a7d20e8b44f034b8f8c6748d004c72321a1216bd5563a5df6cc9d366567ade4ca9',1,'tram::Octree']]], ['octant_5ftop_5fleft_5fback_8',['OCTANT_TOP_LEFT_BACK',['../classtram_1_1_octree.html#a7d20e8b44f034b8f8c6748d004c72321a80ea459a34a50a932b66112239ddfe02',1,'tram::Octree']]], ['octant_5ftop_5fleft_5ffront_9',['OCTANT_TOP_LEFT_FRONT',['../classtram_1_1_octree.html#a7d20e8b44f034b8f8c6748d004c72321aff19451a99f6f71ad5c4ffc06c011ddc',1,'tram::Octree']]], ['octant_5ftop_5fright_5fback_10',['OCTANT_TOP_RIGHT_BACK',['../classtram_1_1_octree.html#a7d20e8b44f034b8f8c6748d004c72321a49bfceafb3d3275a8eb3b92b6efc7494',1,'tram::Octree']]], ['octant_5ftop_5fright_5ffront_11',['OCTANT_TOP_RIGHT_FRONT',['../classtram_1_1_octree.html#a7d20e8b44f034b8f8c6748d004c72321a34ff0d0904aca63b2f65a0ffcb5f779a',1,'tram::Octree']]], ['octants_12',['octants',['../structtram_1_1_octree_1_1_node.html#a95c1f7044d872a41e611dd968405771d',1,'tram::Octree::Node']]], ['octree_13',['Octree',['../classtram_1_1_octree.html#a2d86fab3ff9590542faa44a542e90a30',1,'tram::Octree::Octree()'],['../classtram_1_1_octree.html',1,'tram::Octree< T >']]], ['octree_2eh_14',['octree.h',['../octree_8h.html',1,'']]], ['offset_15',['offset',['../structtram_1_1_render_1_1_vertex_attribute.html#a5f80d9935ba524ba91ac7a76ad40ea63',1,'tram::Render::VertexAttribute::offset()'],['../classtram_1_1_ext_1_1_menu_1_1_intercept_menu.html#a2c39ca031c740b68ca7695bb8c3af75c',1,'tram::Ext::Menu::InterceptMenu::offset()']]], ['offset_5fx_16',['offset_x',['../structtram_1_1_render_1_1_sprite_frame.html#ab4657070362abc108e5838bb7c1c20e0',1,'tram::Render::SpriteFrame']]], ['offset_5fy_17',['offset_y',['../structtram_1_1_render_1_1_sprite_frame.html#a8ed7da0b5f25a4b6c74db2864ba0162e',1,'tram::Render::SpriteFrame']]], ['onadded_18',['OnAdded',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a2018e6ddb7b0daa520a7dc275bb3a8f0',1,'tram::Ext::Kitchensink::ItemClass']]], ['onequip_19',['OnEquip',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a871da89199081aeee3bc4b351764c5fb',1,'tram::Ext::Kitchensink::ItemClass']]], ['onidle_20',['OnIdle',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a5605b4cce1b10ffb337f7e4d746034e2',1,'tram::Ext::Kitchensink::ItemClass']]], ['onprimaryaction_21',['OnPrimaryAction',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a8dc131c2ab76acccbc139c941193dbde',1,'tram::Ext::Kitchensink::ItemClass']]], ['onremoved_22',['OnRemoved',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a2ebc7201376c73944e667f90e69e527d',1,'tram::Ext::Kitchensink::ItemClass']]], ['onsecondaryaction_23',['OnSecondaryAction',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a2e7fd99ac987efb75922a0ac3d1bfd6d',1,'tram::Ext::Kitchensink::ItemClass']]], ['onunequip_24',['OnUnequip',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#aed8df724d985ebd66f934bf3bdc00b18',1,'tram::Ext::Kitchensink::ItemClass']]], ['open_25',['OPEN',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afdae0caa75bd4a1fa8c53b159a5194b07af',1,'tram::Message::OPEN()'],['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6ab0e0dc7772a2218a1e9d77acfbd36927',1,'tram::Signal::OPEN()']]], ['openal_2ecpp_26',['openal.cpp',['../openal_8cpp.html',1,'']]], ['openal_2eh_27',['openal.h',['../openal_8h.html',1,'']]], ['operator_20bool_28',['operator bool',['../classtram_1_1_component.html#ac42050ff047751f66c1549099461d047',1,'tram::Component::operator bool()'],['../classtram_1_1_event_listener.html#a470747c16eea957d442a15279c4d1ad4',1,'tram::EventListener::operator bool()'],['../classtram_1_1_resource_proxy.html#aa6e978c36ec5f1eafd43563e75d5e071',1,'tram::ResourceProxy::operator bool()'],['../structtram_1_1_u_i_d.html#a711568eafe8684f867cadc960073424d',1,'tram::UID::operator bool()'],['../classtram_1_1_value.html#a9e4adfed646e5615bba90d78396a1520',1,'tram::Value::operator bool()'],['../classtram_1_1_pool_ptr.html#ad9256249e1bdc3d11359e8916dfe25c2',1,'tram::PoolPtr::operator bool()']]], ['operator_20bool_20_2a_29',['operator bool *',['../classtram_1_1_value_ptr.html#af8e50ee83fee75e420ac76981b8d06c4',1,'tram::ValuePtr']]], ['operator_20char_20const_20_2a_30',['operator char const *',['../structtram_1_1_u_i_d.html#a9af82bbfd8dcab2fc38cc817a2dbffe9',1,'tram::UID']]], ['operator_20const_20char_20_2a_31',['operator const char *',['../classtram_1_1_value.html#a15856860b73c5d576801dae6f4715dfe',1,'tram::Value']]], ['operator_20const_20char_20_2a_2a_32',['operator const char **',['../classtram_1_1_value_ptr.html#a77f0013cb0d9b53db31f09f4de6c2967',1,'tram::ValuePtr']]], ['operator_20double_33',['operator double',['../classtram_1_1_value.html#a9639ed16d4cb470358687dc976993470',1,'tram::Value']]], ['operator_20float_34',['operator float',['../classtram_1_1_value.html#a1175f90f2eab9d3d316914b1ee84aeb0',1,'tram::Value']]], ['operator_20float_20_2a_35',['operator float *',['../classtram_1_1_value_ptr.html#adb4fc61323ca7975037a71dce2b28d9b',1,'tram::ValuePtr']]], ['operator_20int16_5ft_36',['operator int16_t',['../classtram_1_1_value.html#aa1b1ea0a628e85c8dcc81b7764d0aa6f',1,'tram::Value']]], ['operator_20int32_5ft_37',['operator int32_t',['../classtram_1_1_value.html#ae53ccc02b30523aa2709b44dc43fda69',1,'tram::Value']]], ['operator_20int32_5ft_20_2a_38',['operator int32_t *',['../classtram_1_1_value_ptr.html#ab0a5e0c74d237cee355b29fd9da38c86',1,'tram::ValuePtr']]], ['operator_20int64_5ft_39',['operator int64_t',['../classtram_1_1_value.html#a39d40edb670c7aecc861261018a57d85',1,'tram::Value']]], ['operator_20int8_5ft_40',['operator int8_t',['../classtram_1_1_value.html#aa919d5718da818826402272ff33bf164',1,'tram::Value']]], ['operator_20name_5ft_41',['operator name_t',['../classtram_1_1_value.html#add6cf0d6e6e2830cf8caf35509735ff9',1,'tram::Value']]], ['operator_20name_5ft_20_2a_42',['operator name_t *',['../classtram_1_1_value_ptr.html#a4736ff47afb4c66c197c4f006b22c9c5',1,'tram::ValuePtr']]], ['operator_20quat_43',['operator quat',['../classtram_1_1_value.html#a7794e38049e0b66a7cc567dd119b46c2',1,'tram::Value']]], ['operator_20quat_20_2a_44',['operator quat *',['../classtram_1_1_value_ptr.html#a4ac212df5db186a5a5f2c4e4639b07d0',1,'tram::ValuePtr']]], ['operator_20t_45',['operator T',['../structtram_1_1_settings_1_1_property.html#a658015428992dd46bb49a68c9a714dd0',1,'tram::Settings::Property']]], ['operator_20t_2a_46',['operator T*',['../classtram_1_1_component.html#a53f799110efd1ab0687820f197916abd',1,'tram::Component']]], ['operator_20uint16_5ft_47',['operator uint16_t',['../classtram_1_1_value.html#aa28db4afe53e6e7d8c28996b9e3fb748',1,'tram::Value']]], ['operator_20uint32_5ft_48',['operator uint32_t',['../classtram_1_1_value.html#a784abb3dd60f5c793651f1aa1d837154',1,'tram::Value']]], ['operator_20uint32_5ft_20_2a_49',['operator uint32_t *',['../classtram_1_1_value_ptr.html#aa6b8c236803c98f1444cefa27f4898e7',1,'tram::ValuePtr']]], ['operator_20uint64_5ft_50',['operator uint64_t',['../classtram_1_1_value.html#a9ae9787d652066d81e5c5c8cd2bb0577',1,'tram::Value']]], ['operator_20uint8_5ft_51',['operator uint8_t',['../classtram_1_1_value.html#a2c5a0317d82668f998a66d8761569987',1,'tram::Value']]], ['operator_20value_52',['operator Value',['../classtram_1_1_value_ptr.html#a574e55635d32e94735d03e09622eccd8',1,'tram::ValuePtr']]], ['operator_20vec2_53',['operator vec2',['../classtram_1_1_value.html#acddba52345b86f24d2cb810b99774175',1,'tram::Value']]], ['operator_20vec2_20_2a_54',['operator vec2 *',['../classtram_1_1_value_ptr.html#a73f06a36dab1e2913d5151249a2e6108',1,'tram::ValuePtr']]], ['operator_20vec3_55',['operator vec3',['../classtram_1_1_value.html#ad1db6f75ec7be66818e032e2c0115d45',1,'tram::Value']]], ['operator_20vec3_20_2a_56',['operator vec3 *',['../classtram_1_1_value_ptr.html#af8d2ca7e235ca06306a250b9c8e51d45',1,'tram::ValuePtr']]], ['operator_20vec4_57',['operator vec4',['../classtram_1_1_value.html#ada6847b5e4ee399009ffbffe1cc57189',1,'tram::Value']]], ['operator_20vec4_20_2a_58',['operator vec4 *',['../classtram_1_1_value_ptr.html#aaacda1660f2ba288b538f5ec5de89063',1,'tram::ValuePtr']]], ['operator_21_3d_59',['operator!=',['../structtram_1_1_pool_1_1iterator.html#a55a8ee0e80dad1a7da9d751c25bc0386',1,'tram::Pool::iterator']]], ['operator_2a_60',['operator*',['../structtram_1_1_pool_1_1iterator.html#ae1b598c681e2e0993cd726817c7304cf',1,'tram::Pool::iterator::operator*()'],['../classtram_1_1_pool_ptr.html#aab24751b40c889dac6e66c78bdb4adbb',1,'tram::PoolPtr::operator*()'],['../classtram_1_1_component.html#aa83c13894934e104f7b7fb9f95a2864e',1,'tram::Component::operator*()'],['../classtram_1_1_resource_proxy.html#a40da59b39b0d3b1467775c655d06007b',1,'tram::ResourceProxy::operator*()']]], ['operator_2b_2b_61',['operator++',['../structtram_1_1_pool_1_1iterator.html#af29387992afc913f26300d7b779a4db8',1,'tram::Pool::iterator::operator++()'],['../structtram_1_1_pool_1_1iterator.html#a8cd774ed78f4aa2e1e23d005e8f43302',1,'tram::Pool::iterator::operator++(int)']]], ['operator_2d_3e_62',['operator->',['../classtram_1_1_component.html#a7867337d41058f8bdd955736e2ba1127',1,'tram::Component::operator->()'],['../classtram_1_1_resource_proxy.html#a12bcf3a4db3fb67fbfbca4e904fe6e11',1,'tram::ResourceProxy::operator->()'],['../structtram_1_1_pool_1_1iterator.html#a48a325f43b759e963ebc8f9a6791cdcb',1,'tram::Pool::iterator::operator->()'],['../classtram_1_1_pool_ptr.html#a6d00d265dff562e8bba6d9712d26006e',1,'tram::PoolPtr::operator->()']]], ['operator_3d_63',['operator=',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a4ab73b956ef675005147fe16651de78b',1,'tram::Ext::Kitchensink::QuestVariable::operator=()'],['../classtram_1_1_resource_proxy.html#ae9b5619de08c190d93c0cf7aa9736df9',1,'tram::ResourceProxy::operator=()'],['../structtram_1_1_u_i_d.html#ae2a5ed9b778bcc983f12591981d2802e',1,'tram::UID::operator=()'],['../classtram_1_1_value.html#a4baee4afcfd915fab1056bbe3e90b889',1,'tram::Value::operator=()']]], ['operator_3d_3d_64',['operator==',['../structtram_1_1_u_i_d.html#a0a5dbb6d93d93b65abf71ae5d84d4823',1,'tram::UID::operator==(const UID &other) const'],['../structtram_1_1_u_i_d.html#a1dbeaf14b2261159f5a2569fc5289587',1,'tram::UID::operator==(const char *other) const'],['../classtram_1_1_value.html#a055377410aa38120a535afb9b3cd69e3',1,'tram::Value::operator==()'],['../structtram_1_1_pool_1_1iterator.html#a81d10d7799462c7ca5e7cf19119ca356',1,'tram::Pool::iterator::operator==()']]], ['operator_5b_5d_65',['operator[]',['../classtram_1_1_value_array.html#ac27d29e59b70dc51bcfe4e16f7826952',1,'tram::ValueArray::operator[]()'],['../classtram_1_1_hashmap.html#a16e686d27f2c5d67800e40fa01f2d97d',1,'tram::Hashmap::operator[](UID key)'],['../classtram_1_1_hashmap.html#a2a1f0c5b852df8b670b19293784c75ff',1,'tram::Hashmap::operator[](uint32_t key)'],['../classtram_1_1_pool.html#ad3e5247f51702e2e59fd5b62436f326c',1,'tram::Pool::operator[]()']]], ['options_66',['Options',['../classtram_1_1_ext_1_1_menu_1_1_options.html#a11552024ef3e7976cf5b0fbcbbd63d22',1,'tram::Ext::Menu::Options::Options()'],['../classtram_1_1_ext_1_1_menu_1_1_options.html',1,'tram::Ext::Menu::Options']]], ['or_67',['Or',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a5a8c1d8a4ba4f4059112ea7dbe9a2b65',1,'tram::Ext::Kitchensink::QuestVariable']]], ['orientation_68',['orientation',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deef',1,'tram::GUI']]], ['origin_69',['origin',['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#abd3ab3f24e9881fafefd2f8f47e1e902',1,'tram::Ext::Kitchensink::Button::origin()'],['../classtram_1_1_render_1_1_model.html#aff4ea02ba501bed88104e795ca72f100',1,'tram::Render::Model::origin()']]], ['ortho_5fratio_70',['ortho_ratio',['../namespacetram_1_1_render.html#a1b80c54f15430a66aae59f839ece5e7d',1,'tram::Render']]], ['other_2ecpp_71',['other.cpp',['../other_8cpp.html',1,'']]], ['other_2eh_72',['other.h',['../other_8h.html',1,'']]], ['output_2ecpp_73',['output.cpp',['../output_8cpp.html',1,'']]], ['output_2eh_74',['output.h',['../output_8h.html',1,'']]], ['override_5fstack_75',['override_stack',['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html#a7c1f9cd1c54afd025f332f11c4643cb1',1,'tram::Ext::Kitchensink::AIAgent']]], ['string_76',['string',['../structtram_1_1_u_i_d.html#adef010b946f7cc1ea7f7ecac7df3e801',1,'tram::UID']]] ]; ================================================ FILE: docs/cppapi/search/classes_0.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/classes_0.js ================================================ var searchData= [ ['_5ftest_5fcase_0',['_test_case',['../struct__test__case.html',1,'']]] ]; ================================================ FILE: docs/cppapi/search/classes_1.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/classes_1.js ================================================ var searchData= [ ['aabbleaf_0',['AABBLeaf',['../structtram_1_1_render_1_1_a_a_b_b_1_1_a_a_b_b_leaf.html',1,'tram::Render::AABB']]], ['aabbtree_1',['AABBTree',['../classtram_1_1_a_a_b_b_tree.html',1,'tram']]], ['aabbtriangle_2',['AABBTriangle',['../structtram_1_1_render_1_1_a_a_b_b_triangle.html',1,'tram::Render']]], ['aiagent_3',['AIAgent',['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html',1,'tram::Ext::Kitchensink']]], ['aipackage_4',['AIPackage',['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_package.html',1,'tram::Ext::Kitchensink']]], ['aivariable_5',['AIVariable',['../structtram_1_1_ext_1_1_kitchensink_1_1_a_i_variable.html',1,'tram::Ext::Kitchensink']]], ['animation_6',['Animation',['../classtram_1_1_render_1_1_animation.html',1,'tram::Render']]], ['animationcomponent_7',['AnimationComponent',['../classtram_1_1_animation_component.html',1,'tram']]], ['animationplaybackinfo_8',['AnimationPlaybackInfo',['../structtram_1_1_animation_component_1_1_animation_playback_info.html',1,'tram::AnimationComponent']]], ['animationstatecomponent_9',['AnimationStateComponent',['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_state_component.html',1,'tram::Ext::Kitchensink']]], ['animationtable_10',['AnimationTable',['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_table.html',1,'tram::Ext::Kitchensink']]], ['animstate_11',['AnimState',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state.html',1,'tram::Ext::Kitchensink']]], ['animstatespace_12',['AnimStateSpace',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_space.html',1,'tram::Ext::Kitchensink']]], ['animstatetransitiondefault_13',['AnimStateTransitionDefault',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_default.html',1,'tram::Ext::Kitchensink']]], ['animstatetransitionfrom_14',['AnimStateTransitionFrom',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_from.html',1,'tram::Ext::Kitchensink']]], ['animstatetransitioninto_15',['AnimStateTransitionInto',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_into.html',1,'tram::Ext::Kitchensink']]], ['attribute_16',['Attribute',['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute.html',1,'tram::Ext::Kitchensink']]], ['attributecontainer_17',['AttributeContainer',['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container.html',1,'tram::Ext::Kitchensink']]], ['attributeinfo_18',['AttributeInfo',['../classtram_1_1_ext_1_1_kitchensink_1_1_attribute_info.html',1,'tram::Ext::Kitchensink']]], ['audiobuffer_19',['AudioBuffer',['../structtram_1_1_audio_1_1_spatial_1_1_audio_buffer.html',1,'tram::Audio::Spatial']]], ['audiobuffer_5ft_20',['audiobuffer_t',['../structtram_1_1_audio_1_1audiobuffer__t.html',1,'tram::Audio']]], ['audiocomponent_21',['AudioComponent',['../classtram_1_1_audio_component.html',1,'tram']]], ['audiorender_22',['AudioRender',['../structtram_1_1_audio_1_1_spatial_1_1_audio_render.html',1,'tram::Audio::Spatial']]], ['audiosource_23',['AudioSource',['../structtram_1_1_audio_1_1_spatial_1_1_audio_source.html',1,'tram::Audio::Spatial']]], ['audiosource_5ft_24',['audiosource_t',['../structtram_1_1_audio_1_1audiosource__t.html',1,'tram::Audio']]] ]; ================================================ FILE: docs/cppapi/search/classes_10.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/classes_10.js ================================================ var searchData= [ ['queryresponse_0',['QueryResponse',['../structtram_1_1_render_1_1_a_a_b_b_1_1_query_response.html',1,'tram::Render::AABB']]], ['quest_1',['Quest',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest.html',1,'tram::Ext::Kitchensink']]], ['questentity_2',['QuestEntity',['../classtram_1_1_ext_1_1_kitchensink_1_1_quest_entity.html',1,'tram::Ext::Kitchensink']]], ['questlist_3',['QuestList',['../classtram_1_1_ext_1_1_kitchensink_1_1_quest_list.html',1,'tram::Ext::Kitchensink']]], ['questtrigger_4',['QuestTrigger',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_trigger.html',1,'tram::Ext::Kitchensink']]], ['questvariable_5',['QuestVariable',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html',1,'tram::Ext::Kitchensink']]], ['queue_6',['Queue',['../classtram_1_1_queue.html',1,'tram']]] ]; ================================================ FILE: docs/cppapi/search/classes_11.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/classes_11.js ================================================ var searchData= [ ['rawsetting_0',['RawSetting',['../structtram_1_1_settings_1_1_raw_setting.html',1,'tram::Settings']]], ['raycastcontrollercomponent_1',['RaycastControllerComponent',['../classtram_1_1_raycast_controller_component.html',1,'tram']]], ['record_2',['Record',['../structtram_1_1_hashmap_1_1_record.html',1,'tram::Hashmap']]], ['registeredvertexdefinition_3',['RegisteredVertexDefinition',['../structtram_1_1_render_1_1_registered_vertex_definition.html',1,'tram::Render']]], ['rendercomponent_4',['RenderComponent',['../classtram_1_1_render_component.html',1,'tram']]], ['resource_5',['Resource',['../classtram_1_1_resource.html',1,'tram']]], ['resourceproxy_6',['ResourceProxy',['../classtram_1_1_resource_proxy.html',1,'tram']]], ['resourcerequest_7',['ResourceRequest',['../structtram_1_1_async_1_1_resource_request.html',1,'tram::Async']]], ['rigidbody_5ft_8',['rigidbody_t',['../structtram_1_1_physics_1_1rigidbody__t.html',1,'tram::Physics']]], ['rigidbodymetadata_9',['RigidbodyMetadata',['../structtram_1_1_physics_1_1_a_p_i_1_1_rigidbody_metadata.html',1,'tram::Physics::API']]] ]; ================================================ FILE: docs/cppapi/search/classes_12.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/classes_12.js ================================================ var searchData= [ ['scanline_0',['Scanline',['../structtram_1_1_render_1_1_a_p_i_1_1_scanline.html',1,'tram::Render::API']]], ['scanlinebuffer_1',['ScanlineBuffer',['../structtram_1_1_render_1_1_a_p_i_1_1_scanline_buffer.html',1,'tram::Render::API']]], ['scriptable_2',['Scriptable',['../classtram_1_1_scriptable.html',1,'tram']]], ['scriptabletypeinfo_3',['ScriptableTypeInfo',['../structtram_1_1_scriptable_type_1_1_scriptable_type_info.html',1,'tram::ScriptableType']]], ['settinginfo_4',['SettingInfo',['../structtram_1_1_settings_1_1_setting_info.html',1,'tram::Settings']]], ['settingsmenu_5',['SettingsMenu',['../classtram_1_1_ext_1_1_menu_1_1_settings_menu.html',1,'tram::Ext::Menu']]], ['shaderbuffer_6',['ShaderBuffer',['../classtram_1_1_render_1_1_a_p_i_1_1_shader_buffer.html',1,'tram::Render::API']]], ['shaderuniformmatrices_7',['ShaderUniformMatrices',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_matrices.html',1,'tram::Render::API']]], ['shaderuniformmodelmatrices_8',['ShaderUniformModelMatrices',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html',1,'tram::Render::API']]], ['shapecastcallback_9',['ShapecastCallback',['../structtram_1_1_physics_1_1_a_p_i_1_1_shapecast_callback.html',1,'tram::Physics::API']]], ['sharedentitydata_10',['SharedEntityData',['../structtram_1_1_shared_entity_data.html',1,'tram']]], ['signal_11',['Signal',['../structtram_1_1_signal.html',1,'tram']]], ['signalmenu_12',['SignalMenu',['../classtram_1_1_ext_1_1_menu_1_1_signal_menu.html',1,'tram::Ext::Menu']]], ['signaltable_13',['SignalTable',['../classtram_1_1_signal_table.html',1,'tram']]], ['sound_14',['Sound',['../classtram_1_1_audio_1_1_sound.html',1,'tram::Audio::Sound'],['../classtram_1_1_sound.html',1,'tram::Sound']]], ['soundgraph_15',['SoundGraph',['../classtram_1_1_audio_1_1_sound_graph.html',1,'tram::Audio::SoundGraph'],['../classtram_1_1_render_1_1_sound_graph.html',1,'SoundGraph']]], ['soundtable_16',['SoundTable',['../classtram_1_1_ext_1_1_kitchensink_1_1_sound_table.html',1,'tram::Ext::Kitchensink']]], ['sphericalharmonic_17',['SphericalHarmonic',['../structtram_1_1_render_1_1_spherical_harmonic.html',1,'tram::Render']]], ['spinlock_18',['Spinlock',['../classtram_1_1_spinlock.html',1,'tram']]], ['sprite_19',['Sprite',['../classtram_1_1_render_1_1_sprite.html',1,'tram::Render']]], ['spritearray_5ft_20',['spritearray_t',['../structtram_1_1_render_1_1spritearray__t.html',1,'tram::Render']]], ['spritecomponent_21',['SpriteComponent',['../classtram_1_1_sprite_component.html',1,'tram']]], ['spriteframe_22',['SpriteFrame',['../structtram_1_1_render_1_1_sprite_frame.html',1,'tram::Render']]], ['spritepoint_23',['SpritePoint',['../structtram_1_1_render_1_1_sprite_point.html',1,'tram::Render']]], ['spritevertex_24',['SpriteVertex',['../structtram_1_1_render_1_1_sprite_vertex.html',1,'tram::Render']]], ['stack_25',['Stack',['../classtram_1_1_stack.html',1,'tram']]], ['stackpool_26',['StackPool',['../classtram_1_1_stack_pool.html',1,'tram']]], ['staticmodeldata_27',['StaticModelData',['../structtram_1_1_render_1_1_static_model_data.html',1,'tram::Render']]], ['staticmodelvertex_28',['StaticModelVertex',['../structtram_1_1_render_1_1_static_model_vertex.html',1,'tram::Render']]], ['staticvertex_29',['StaticVertex',['../structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html',1,'tram::Render::API']]], ['staticworldobject_30',['StaticWorldObject',['../classtram_1_1_static_world_object.html',1,'tram']]], ['statisticsmenu_31',['StatisticsMenu',['../classtram_1_1_ext_1_1_menu_1_1_statistics_menu.html',1,'tram::Ext::Menu']]], ['swdrawlistentry_32',['SWDrawListEntry',['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html',1,'tram::Render::API']]], ['swindexarray_33',['SWIndexArray',['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_index_array.html',1,'tram::Render::API']]], ['swlight_34',['SWLight',['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_light.html',1,'tram::Render::API']]], ['swtexture_35',['SWTexture',['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_texture.html',1,'tram::Render::API']]], ['swvertexarray_36',['SWVertexArray',['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_vertex_array.html',1,'tram::Render::API']]], ['systeminfo_37',['SystemInfo',['../structtram_1_1_system_1_1_system_info.html',1,'tram::System']]], ['systemmenu_38',['SystemMenu',['../classtram_1_1_ext_1_1_menu_1_1_system_menu.html',1,'tram::Ext::Menu']]], ['systemstat_39',['SystemStat',['../structtram_1_1_stats_1_1_system_stat.html',1,'tram::Stats']]] ]; ================================================ FILE: docs/cppapi/search/classes_13.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/classes_13.js ================================================ var searchData= [ ['templatecomponent_0',['TemplateComponent',['../classtram_1_1_template_component.html',1,'tram']]], ['textreaderparser_1',['TextReaderParser',['../classtram_1_1_text_reader_parser.html',1,'tram']]], ['texturehandle_5ft_2',['texturehandle_t',['../structtram_1_1_render_1_1texturehandle__t.html',1,'tram::Render']]], ['textwriterparser_3',['TextWriterParser',['../classtram_1_1_text_writer_parser.html',1,'tram']]], ['train_4',['Train',['../classtram_1_1_ext_1_1_kitchensink_1_1_train.html',1,'tram::Ext::Kitchensink']]], ['transition_5',['Transition',['../classtram_1_1_transition.html',1,'tram']]], ['triangle_6',['Triangle',['../structtram_1_1_render_1_1_triangle.html',1,'tram::Render']]], ['trianglebucket_7',['TriangleBucket',['../structtram_1_1_render_1_1_triangle_bucket.html',1,'tram::Render']]], ['trigger_8',['Trigger',['../classtram_1_1_trigger.html',1,'tram']]], ['trigger_5ft_9',['trigger_t',['../structtram_1_1_physics_1_1trigger__t.html',1,'tram::Physics']]], ['triggerautosave_10',['TriggerAutosave',['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_autosave.html',1,'tram::Ext::Kitchensink']]], ['triggercomponent_11',['TriggerComponent',['../classtram_1_1_trigger_component.html',1,'tram']]], ['triggerhurt_12',['TriggerHurt',['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_hurt.html',1,'tram::Ext::Kitchensink']]], ['triggermultiple_13',['TriggerMultiple',['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_multiple.html',1,'tram::Ext::Kitchensink']]], ['triggeronce_14',['TriggerOnce',['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_once.html',1,'tram::Ext::Kitchensink']]], ['triggerplayermovement_15',['TriggerPlayerMovement',['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_player_movement.html',1,'tram::Ext::Kitchensink']]], ['triggerpush_16',['TriggerPush',['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_push.html',1,'tram::Ext::Kitchensink']]], ['triggerremove_17',['TriggerRemove',['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_remove.html',1,'tram::Ext::Kitchensink']]], ['triggerteleport_18',['TriggerTeleport',['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_teleport.html',1,'tram::Ext::Kitchensink']]] ]; ================================================ FILE: docs/cppapi/search/classes_14.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/classes_14.js ================================================ var searchData= [ ['uid_0',['UID',['../structtram_1_1_u_i_d.html',1,'tram']]] ]; ================================================ FILE: docs/cppapi/search/classes_15.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/classes_15.js ================================================ var searchData= [ ['value_0',['Value',['../classtram_1_1_value.html',1,'tram']]], ['valuearray_1',['ValueArray',['../classtram_1_1_value_array.html',1,'tram']]], ['valueptr_2',['ValuePtr',['../classtram_1_1_value_ptr.html',1,'tram']]], ['vertexarray_5ft_3',['vertexarray_t',['../structtram_1_1_render_1_1vertexarray__t.html',1,'tram::Render']]], ['vertexattribute_4',['VertexAttribute',['../structtram_1_1_render_1_1_vertex_attribute.html',1,'tram::Render']]], ['vertexbuffermetadata_5',['VertexBufferMetadata',['../structtram_1_1_render_1_1_a_p_i_1_1_vertex_buffer_metadata.html',1,'tram::Render::API']]], ['vertexdefinition_6',['VertexDefinition',['../structtram_1_1_render_1_1_vertex_definition.html',1,'tram::Render']]], ['vertexshader_7',['VertexShader',['../classtram_1_1_render_1_1_a_p_i_1_1_vertex_shader.html',1,'tram::Render::API']]] ]; ================================================ FILE: docs/cppapi/search/classes_16.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/classes_16.js ================================================ var searchData= [ ['water_0',['Water',['../classtram_1_1_ext_1_1_kitchensink_1_1_water.html',1,'tram::Ext::Kitchensink']]], ['worldcell_1',['WorldCell',['../classtram_1_1_world_cell.html',1,'tram']]], ['worldcellproperties_2',['WorldCellProperties',['../classtram_1_1_ext_1_1_menu_1_1_world_cell_properties.html',1,'tram::Ext::Menu']]] ]; ================================================ FILE: docs/cppapi/search/classes_2.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/classes_2.js ================================================ var searchData= [ ['baseattribute_0',['BaseAttribute',['../structtram_1_1_ext_1_1_kitchensink_1_1_base_attribute.html',1,'tram::Ext::Kitchensink']]], ['basefactionrank_1',['BaseFactionRank',['../structtram_1_1_ext_1_1_kitchensink_1_1_base_faction_rank.html',1,'tram::Ext::Kitchensink']]], ['bone_2',['Bone',['../structtram_1_1_render_1_1_bone.html',1,'tram::Render']]], ['breakable_3',['Breakable',['../classtram_1_1_ext_1_1_kitchensink_1_1_breakable.html',1,'tram::Ext::Kitchensink']]], ['bucketmapping_4',['BucketMapping',['../structtram_1_1_render_1_1_bucket_mapping.html',1,'tram::Render']]], ['button_5',['Button',['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html',1,'tram::Ext::Kitchensink']]] ]; ================================================ FILE: docs/cppapi/search/classes_3.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/classes_3.js ================================================ var searchData= [ ['callbackmotionstate_0',['CallbackMotionState',['../classtram_1_1_physics_1_1_a_p_i_1_1_callback_motion_state.html',1,'tram::Physics::API']]], ['camera_1',['Camera',['../classtram_1_1_ext_1_1_camera_1_1_camera.html',1,'tram::Ext::Camera']]], ['character_2',['Character',['../classtram_1_1_ext_1_1_kitchensink_1_1_character.html',1,'tram::Ext::Kitchensink']]], ['characterclass_3',['CharacterClass',['../classtram_1_1_ext_1_1_kitchensink_1_1_character_class.html',1,'tram::Ext::Kitchensink']]], ['characterdisposition_4',['CharacterDisposition',['../structtram_1_1_ext_1_1_kitchensink_1_1_character_disposition.html',1,'tram::Ext::Kitchensink']]], ['clippoint_5',['ClipPoint',['../structtram_1_1_render_1_1_a_p_i_1_1_clip_point.html',1,'tram::Render::API']]], ['cliptriangle_6',['ClipTriangle',['../structtram_1_1_render_1_1_a_p_i_1_1_clip_triangle.html',1,'tram::Render::API']]], ['collision_7',['Collision',['../structtram_1_1_physics_1_1_collision.html',1,'tram::Physics']]], ['collisionmodel_8',['CollisionModel',['../classtram_1_1_physics_1_1_collision_model.html',1,'tram::Physics']]], ['collisionshape_9',['CollisionShape',['../structtram_1_1_physics_1_1_collision_shape.html',1,'tram::Physics']]], ['collisionshape_5ft_10',['collisionshape_t',['../structtram_1_1_physics_1_1collisionshape__t.html',1,'tram::Physics']]], ['collisionshapetransform_11',['CollisionShapeTransform',['../structtram_1_1_physics_1_1_a_p_i_1_1_collision_shape_transform.html',1,'tram::Physics::API']]], ['collisiontriangle_12',['CollisionTriangle',['../structtram_1_1_physics_1_1_collision_triangle.html',1,'tram::Physics']]], ['colorvertex_13',['ColorVertex',['../structtram_1_1_render_1_1_a_p_i_1_1_color_vertex.html',1,'tram::Render::API']]], ['component_14',['Component',['../classtram_1_1_component.html',1,'tram']]], ['console_15',['Console',['../classtram_1_1_ext_1_1_menu_1_1_console.html',1,'tram::Ext::Menu']]], ['controllercomponent_16',['ControllerComponent',['../classtram_1_1_controller_component.html',1,'tram']]], ['crate_17',['Crate',['../classtram_1_1_crate.html',1,'tram']]] ]; ================================================ FILE: docs/cppapi/search/classes_4.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/classes_4.js ================================================ var searchData= [ ['d3ddrawlistentry_0',['D3DDrawListEntry',['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html',1,'tram::Render::API']]], ['d3dlight_1',['D3DLight',['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_light.html',1,'tram::Render::API']]], ['debugmenu_2',['DebugMenu',['../classtram_1_1_ext_1_1_menu_1_1_debug_menu.html',1,'tram::Ext::Menu']]], ['debugshape_3',['DebugShape',['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_shape.html',1,'tram::Ext::Kitchensink']]], ['debugtext_4',['DebugText',['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_text.html',1,'tram::Ext::Kitchensink']]], ['decalcomponent_5',['DecalComponent',['../classtram_1_1_decal_component.html',1,'tram']]], ['decoration_6',['Decoration',['../classtram_1_1_decoration.html',1,'tram']]], ['dialogaction_7',['DialogAction',['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_action.html',1,'tram::Ext::Kitchensink']]], ['dialogcondition_8',['DialogCondition',['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_condition.html',1,'tram::Ext::Kitchensink']]], ['dialogcontroller_9',['DialogController',['../classtram_1_1_ext_1_1_kitchensink_1_1_dialog_controller.html',1,'tram::Ext::Kitchensink']]], ['dialogtopic_10',['DialogTopic',['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_topic.html',1,'tram::Ext::Kitchensink']]], ['diskreader_11',['DiskReader',['../classtram_1_1_disk_reader.html',1,'tram']]], ['diskwriter_12',['DiskWriter',['../classtram_1_1_disk_writer.html',1,'tram']]], ['drawlistentry_5ft_13',['drawlistentry_t',['../structtram_1_1_render_1_1drawlistentry__t.html',1,'tram::Render']]], ['dynamicmodeldata_14',['DynamicModelData',['../structtram_1_1_render_1_1_dynamic_model_data.html',1,'tram::Render']]], ['dynamicmodelvertex_15',['DynamicModelVertex',['../structtram_1_1_render_1_1_dynamic_model_vertex.html',1,'tram::Render']]], ['dynamicvertex_16',['DynamicVertex',['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html',1,'tram::Render::API']]] ]; ================================================ FILE: docs/cppapi/search/classes_5.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/classes_5.js ================================================ var searchData= [ ['edge_0',['Edge',['../structtram_1_1_edge.html',1,'tram']]], ['effect_1',['Effect',['../structtram_1_1_ext_1_1_kitchensink_1_1_effect.html',1,'tram::Ext::Kitchensink']]], ['entity_2',['Entity',['../classtram_1_1_entity.html',1,'tram']]], ['entitychildren_3',['EntityChildren',['../structtram_1_1_ext_1_1_kitchensink_1_1_entity_children.html',1,'tram::Ext::Kitchensink']]], ['entitycomponent_4',['EntityComponent',['../classtram_1_1_entity_component.html',1,'tram']]], ['entitypicker_5',['EntityPicker',['../classtram_1_1_ext_1_1_menu_1_1_entity_picker.html',1,'tram::Ext::Menu']]], ['entityproperties_6',['EntityProperties',['../classtram_1_1_ext_1_1_menu_1_1_entity_properties.html',1,'tram::Ext::Menu']]], ['entitytypeinfo_7',['EntityTypeInfo',['../structtram_1_1_entity_type_info.html',1,'tram']]], ['event_8',['Event',['../structtram_1_1_event.html',1,'tram']]], ['eventemit_9',['EventEmit',['../classtram_1_1_ext_1_1_menu_1_1_event_emit.html',1,'tram::Ext::Menu']]], ['eventintercept_10',['EventIntercept',['../structtram_1_1_ext_1_1_menu_1_1_event_intercept.html',1,'tram::Ext::Menu']]], ['eventlistener_11',['EventListener',['../classtram_1_1_event_listener.html',1,'tram']]] ]; ================================================ FILE: docs/cppapi/search/classes_6.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/classes_6.js ================================================ var searchData= [ ['faction_0',['Faction',['../classtram_1_1_ext_1_1_kitchensink_1_1_faction.html',1,'tram::Ext::Kitchensink']]], ['factionrank_1',['FactionRank',['../structtram_1_1_ext_1_1_kitchensink_1_1_faction_rank.html',1,'tram::Ext::Kitchensink']]], ['factionrelation_2',['FactionRelation',['../structtram_1_1_ext_1_1_kitchensink_1_1_faction_relation.html',1,'tram::Ext::Kitchensink']]], ['ffphelper_3',['FFPHelper',['../structtram_1_1_render_1_1_a_p_i_1_1_f_f_p_helper.html',1,'tram::Render::API']]], ['fieldinfo_4',['FieldInfo',['../structtram_1_1_entity_1_1_field_info.html',1,'tram::Entity']]], ['file_5',['File',['../classtram_1_1_file.html',1,'tram']]], ['filereader_6',['FileReader',['../classtram_1_1_file_reader.html',1,'tram::FileReader'],['../classtram_1_1_platform_1_1_file_reader.html',1,'FileReader']]], ['filereaderparser_7',['FileReaderParser',['../classtram_1_1_file_reader_parser.html',1,'tram']]], ['filesource_8',['FileSource',['../structtram_1_1_file_source.html',1,'tram']]], ['filewriter_9',['FileWriter',['../classtram_1_1_file_writer.html',1,'tram::FileWriter'],['../classtram_1_1_platform_1_1_file_writer.html',1,'FileWriter']]], ['filewriterparser_10',['FileWriterParser',['../classtram_1_1_file_writer_parser.html',1,'tram']]], ['filterparameters_11',['FilterParameters',['../structtram_1_1_audio_1_1_filter_parameters.html',1,'tram::Audio']]], ['firstpersoncamera_12',['FirstPersonCamera',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html',1,'tram::Ext::Camera']]], ['fpscontrollercomponent_13',['FPSControllerComponent',['../classtram_1_1_f_p_s_controller_component.html',1,'tram']]], ['fragmentshader_14',['FragmentShader',['../classtram_1_1_render_1_1_a_p_i_1_1_fragment_shader.html',1,'tram::Render::API']]], ['frameobject_15',['FrameObject',['../structtram_1_1_g_u_i_1_1_frame_object.html',1,'tram::GUI']]], ['fvfhelper_16',['FVFHelper',['../structtram_1_1_render_1_1_a_p_i_1_1_f_v_f_helper.html',1,'tram::Render::API']]] ]; ================================================ FILE: docs/cppapi/search/classes_7.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/classes_7.js ================================================ var searchData= [ ['gldrawlistentry_0',['GLDrawListEntry',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html',1,'tram::Render::API']]], ['gllight_1',['GLLight',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_light.html',1,'tram::Render::API']]], ['glmaterial_2',['GLMaterial',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_material.html',1,'tram::Render::API']]], ['graph_3',['Graph',['../classtram_1_1_graph.html',1,'tram']]] ]; ================================================ FILE: docs/cppapi/search/classes_8.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/classes_8.js ================================================ var searchData= [ ['hashmap_0',['Hashmap',['../classtram_1_1_hashmap.html',1,'tram']]] ]; ================================================ FILE: docs/cppapi/search/classes_9.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/classes_9.js ================================================ var searchData= [ ['indexarray_5ft_0',['indexarray_t',['../structtram_1_1_render_1_1indexarray__t.html',1,'tram::Render']]], ['indexrange_1',['IndexRange',['../structtram_1_1_render_1_1_index_range.html',1,'tram::Render']]], ['initialattribute_2',['InitialAttribute',['../structtram_1_1_ext_1_1_kitchensink_1_1_initial_attribute.html',1,'tram::Ext::Kitchensink']]], ['intercept_3',['Intercept',['../structtram_1_1_ext_1_1_menu_1_1_intercept.html',1,'tram::Ext::Menu']]], ['interceptmenu_4',['InterceptMenu',['../classtram_1_1_ext_1_1_menu_1_1_intercept_menu.html',1,'tram::Ext::Menu']]], ['interface_5',['Interface',['../classtram_1_1_script_1_1_interface.html',1,'tram::Script']]], ['inventory_6',['Inventory',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html',1,'tram::Ext::Kitchensink']]], ['inventoryfactoryinfo_7',['InventoryFactoryInfo',['../structtram_1_1_ext_1_1_kitchensink_1_1_inventory_factory_info.html',1,'tram::Ext::Kitchensink']]], ['inventorymanager_8',['InventoryManager',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory_manager.html',1,'tram::Ext::Kitchensink']]], ['itemclass_9',['ItemClass',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html',1,'tram::Ext::Kitchensink']]], ['iteminstance_10',['ItemInstance',['../structtram_1_1_ext_1_1_kitchensink_1_1_item_instance.html',1,'tram::Ext::Kitchensink']]], ['iterator_11',['iterator',['../structtram_1_1_pool_1_1iterator.html',1,'tram::Pool']]] ]; ================================================ FILE: docs/cppapi/search/classes_a.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/classes_a.js ================================================ var searchData= [ ['keybinding_0',['KeyBinding',['../structtram_1_1_u_i_1_1_key_binding.html',1,'tram::UI']]], ['keyframe_1',['Keyframe',['../structtram_1_1_render_1_1_keyframe.html',1,'tram::Render']]], ['keyframeheader_2',['KeyframeHeader',['../structtram_1_1_render_1_1_keyframe_header.html',1,'tram::Render']]], ['kitchensinkmenulist_3',['KitchensinkMenuList',['../classtram_1_1_ext_1_1_kitchensink_1_1_kitchensink_menu_list.html',1,'tram::Ext::Kitchensink']]] ]; ================================================ FILE: docs/cppapi/search/classes_b.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/classes_b.js ================================================ var searchData= [ ['layerparameters_0',['LayerParameters',['../structtram_1_1_render_1_1_a_p_i_1_1_layer_parameters.html',1,'tram::Render::API']]], ['light_1',['Light',['../classtram_1_1_light.html',1,'tram::Light'],['../structtram_1_1_render_1_1_light_tree_1_1_light.html',1,'tram::Render::LightTree::Light']]], ['light_5ft_2',['light_t',['../structtram_1_1_render_1_1light__t.html',1,'tram::Render']]], ['lightcomponent_3',['LightComponent',['../classtram_1_1_light_component.html',1,'tram']]], ['lightgraph_4',['LightGraph',['../classtram_1_1_render_1_1_light_graph.html',1,'tram::Render']]], ['linevertex_5',['LineVertex',['../structtram_1_1_render_1_1_a_p_i_1_1_line_vertex.html',1,'tram::Render::API::LineVertex'],['../structtram_1_1_render_1_1_line_vertex.html',1,'tram::Render::LineVertex']]], ['linkedshader_6',['LinkedShader',['../classtram_1_1_render_1_1_a_p_i_1_1_linked_shader.html',1,'tram::Render::API']]], ['listdialog_7',['ListDialog',['../classtram_1_1_ext_1_1_kitchensink_1_1_list_dialog.html',1,'tram::Ext::Kitchensink']]], ['listenerinfo_8',['ListenerInfo',['../structtram_1_1_listener_info.html',1,'tram']]], ['listinventory_9',['ListInventory',['../classtram_1_1_ext_1_1_kitchensink_1_1_list_inventory.html',1,'tram::Ext::Kitchensink']]], ['listinventorymanager_10',['ListInventoryManager',['../classtram_1_1_ext_1_1_kitchensink_1_1_list_inventory_manager.html',1,'tram::Ext::Kitchensink']]], ['listselection_11',['ListSelection',['../classtram_1_1_ext_1_1_menu_1_1_list_selection.html',1,'tram::Ext::Menu']]], ['listtrade_12',['ListTrade',['../classtram_1_1_ext_1_1_kitchensink_1_1_list_trade.html',1,'tram::Ext::Kitchensink']]], ['logintercept_13',['LogIntercept',['../structtram_1_1_ext_1_1_menu_1_1_log_intercept.html',1,'tram::Ext::Menu']]], ['lua_14',['Lua',['../classtram_1_1_ext_1_1_scripting_1_1_lua_1_1_lua.html',1,'tram::Ext::Scripting::Lua']]] ]; ================================================ FILE: docs/cppapi/search/classes_c.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/classes_c.js ================================================ var searchData= [ ['marker_0',['Marker',['../classtram_1_1_marker.html',1,'tram']]], ['material_1',['Material',['../classtram_1_1_render_1_1_material.html',1,'tram::Render']]], ['material_5ft_2',['material_t',['../structtram_1_1_render_1_1material__t.html',1,'tram::Render']]], ['menu_3',['Menu',['../classtram_1_1_ext_1_1_menu_1_1_menu.html',1,'tram::Ext::Menu']]], ['message_4',['Message',['../structtram_1_1_message.html',1,'tram']]], ['messageintercept_5',['MessageIntercept',['../structtram_1_1_ext_1_1_menu_1_1_message_intercept.html',1,'tram::Ext::Menu']]], ['messagesend_6',['MessageSend',['../classtram_1_1_ext_1_1_menu_1_1_message_send.html',1,'tram::Ext::Menu']]], ['model_7',['Model',['../classtram_1_1_render_1_1_model.html',1,'tram::Render']]], ['modelaabb_8',['ModelAABB',['../structtram_1_1_render_1_1_model_a_a_b_b.html',1,'tram::Render']]], ['modeldata_9',['ModelData',['../structtram_1_1_render_1_1_model_data.html',1,'tram::Render']]] ]; ================================================ FILE: docs/cppapi/search/classes_d.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/classes_d.js ================================================ var searchData= [ ['navmesh_0',['Navmesh',['../classtram_1_1_navmesh.html',1,'tram']]], ['navmeshnode_1',['NavmeshNode',['../structtram_1_1_navmesh_node.html',1,'tram']]], ['nearestsearch_2',['NearestSearch',['../structtram_1_1_octree_1_1_nearest_search.html',1,'tram::Octree']]], ['node_3',['Node',['../structtram_1_1_a_a_b_b_tree_1_1_node.html',1,'tram::AABBTree::Node'],['../structtram_1_1_audio_1_1_sound_graph_1_1_node.html',1,'tram::Audio::SoundGraph::Node'],['../structtram_1_1_node.html',1,'tram::Node'],['../structtram_1_1_octree_1_1_node.html',1,'tram::Octree< T >::Node'],['../structtram_1_1_render_1_1_light_graph_1_1_node.html',1,'tram::Render::LightGraph::Node']]] ]; ================================================ FILE: docs/cppapi/search/classes_e.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/classes_e.js ================================================ var searchData= [ ['objectcollision_0',['ObjectCollision',['../structtram_1_1_physics_1_1_a_p_i_1_1_object_collision.html',1,'tram::Physics::API']]], ['octree_1',['Octree',['../classtram_1_1_octree.html',1,'tram']]], ['options_2',['Options',['../classtram_1_1_ext_1_1_menu_1_1_options.html',1,'tram::Ext::Menu']]] ]; ================================================ FILE: docs/cppapi/search/classes_f.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/classes_f.js ================================================ var searchData= [ ['particle_0',['Particle',['../structtram_1_1_particle_component_1_1_particle.html',1,'tram::ParticleComponent']]], ['particlecomponent_1',['ParticleComponent',['../classtram_1_1_particle_component.html',1,'tram']]], ['path_2',['Path',['../classtram_1_1_path.html',1,'tram']]], ['pathaction_3',['PathAction',['../classtram_1_1_physics_1_1_path_action.html',1,'tram::Physics']]], ['pathedgeinfo_4',['PathEdgeInfo',['../structtram_1_1_path_edge_info.html',1,'tram']]], ['pathexplorationresult_5',['PathExplorationResult',['../structtram_1_1_audio_1_1_spatial_1_1_path_exploration_result.html',1,'tram::Audio::Spatial']]], ['pathfollower_6',['PathFollower',['../classtram_1_1_path_follower.html',1,'tram']]], ['pathfromaudiosource_7',['PathFromAudioSource',['../structtram_1_1_audio_1_1_spatial_1_1_path_from_audio_source.html',1,'tram::Audio::Spatial']]], ['pathrenderinginfo_8',['PathRenderingInfo',['../structtram_1_1_audio_1_1_spatial_1_1_path_rendering_info.html',1,'tram::Audio::Spatial']]], ['pathtracingresult_9',['PathTracingResult',['../structtram_1_1_audio_1_1_spatial_1_1_path_tracing_result.html',1,'tram::Audio::Spatial']]], ['physicscomponent_10',['PhysicsComponent',['../classtram_1_1_physics_component.html',1,'tram']]], ['physicsdebugdraw_11',['PhysicsDebugDraw',['../classtram_1_1_physics_1_1_a_p_i_1_1_physics_debug_draw.html',1,'tram::Physics::API']]], ['pickup_12',['Pickup',['../classtram_1_1_ext_1_1_kitchensink_1_1_pickup.html',1,'tram::Ext::Kitchensink']]], ['player_13',['Player',['../classtram_1_1_player.html',1,'tram']]], ['playercomponent_14',['PlayerComponent',['../classtram_1_1_player_component.html',1,'tram']]], ['point2d_15',['Point2D',['../structtram_1_1_render_1_1_a_p_i_1_1_point2_d.html',1,'tram::Render::API']]], ['pool_16',['Pool',['../classtram_1_1_pool.html',1,'tram']]], ['poolproxy_17',['PoolProxy',['../classtram_1_1_pool_proxy.html',1,'tram']]], ['poolptr_18',['PoolPtr',['../classtram_1_1_pool_ptr.html',1,'tram']]], ['pose_19',['Pose',['../structtram_1_1_render_1_1_pose.html',1,'tram::Render']]], ['property_20',['Property',['../structtram_1_1_settings_1_1_property.html',1,'tram::Settings']]] ]; ================================================ FILE: docs/cppapi/search/defines_0.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/defines_0.js ================================================ var searchData= [ ['assert_0',['ASSERT',['../test_8h.html#ad014a2a071494bbabc34b48eeebadbf3',1,'test.h']]] ]; ================================================ FILE: docs/cppapi/search/defines_1.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/defines_1.js ================================================ var searchData= [ ['end_5ftest_0',['END_TEST',['../test_8h.html#aefcd1ca1799d2395f7bbe3c50bcc8ff8',1,'test.h']]] ]; ================================================ FILE: docs/cppapi/search/defines_2.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/defines_2.js ================================================ var searchData= [ ['playsound_0',['PlaySound',['../entities_8cpp.html#a4366553d515649fefe284775ebaed16e',1,'entities.cpp']]] ]; ================================================ FILE: docs/cppapi/search/defines_3.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/defines_3.js ================================================ var searchData= [ ['start_5ftest_0',['START_TEST',['../test_8h.html#a33b3bceb630bc5fc81c06aaad9c1fb6f',1,'test.h']]], ['stb_5fimage_5fimplementation_1',['STB_IMAGE_IMPLEMENTATION',['../material_8cpp.html#a18372412ad2fc3ce1e3240b3cf0efe78',1,'material.cpp']]], ['stb_5fimage_5fwrite_5fimplementation_2',['STB_IMAGE_WRITE_IMPLEMENTATION',['../image_8cpp.html#aefe397a94e8feddc652f92ef40ce9597',1,'image.cpp']]], ['stbi_5fonly_5fpng_3',['STBI_ONLY_PNG',['../material_8cpp.html#a305f0db3256dd1248d3f17a83f7a6129',1,'material.cpp']]] ]; ================================================ FILE: docs/cppapi/search/defines_4.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/defines_4.js ================================================ var searchData= [ ['test_5fcase_0',['TEST_CASE',['../test_8h.html#adf0988a4a0680d35bed223d0b021437e',1,'test.h']]], ['tram_5fsdk_5fassert_1',['TRAM_SDK_ASSERT',['../macros_8h.html#ab8acc3253ef25e7241078bb72714f386',1,'macros.h']]], ['tram_5fsdk_5fassert_5fmessage_2',['TRAM_SDK_ASSERT_MESSAGE',['../macros_8h.html#a152c2304044652f7572e5759c6535a2c',1,'macros.h']]], ['tram_5fsdk_5fentity_5fname_3',['TRAM_SDK_ENTITY_NAME',['../macros_8h.html#a8f9f5f41852998a382c115e4f6bbf159',1,'macros.h']]], ['tram_5fsdk_5fimplement_5fpool_4',['TRAM_SDK_IMPLEMENT_POOL',['../macros_8h.html#ad00c543490e5b3b7db91b1fdb62d44cb',1,'macros.h']]], ['tram_5fsdk_5fproperty_5',['TRAM_SDK_PROPERTY',['../macros_8h.html#a295f857ea2759f1ca46a41b9bf3dec1a',1,'macros.h']]], ['tram_5fsdk_5fregister_5fevent_5fdatatype_6',['TRAM_SDK_REGISTER_EVENT_DATATYPE',['../macros_8h.html#a52706c5e76dff5554e6be98274f86e3d',1,'macros.h']]], ['tram_5fsdk_5fvirtual_5fproperty_7',['TRAM_SDK_VIRTUAL_PROPERTY',['../macros_8h.html#a2b6582f54dfcdb7471a7a86d9c01eafe',1,'macros.h']]] ]; ================================================ FILE: docs/cppapi/search/defines_5.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/defines_5.js ================================================ var searchData= [ ['test_5fcase_0',['TEST_CASE',['../test_8h.html#adf0988a4a0680d35bed223d0b021437e',1,'test.h']]], ['tram_5fsdk_5fassert_1',['TRAM_SDK_ASSERT',['../macros_8h.html#ab8acc3253ef25e7241078bb72714f386',1,'macros.h']]], ['tram_5fsdk_5fassert_5fmessage_2',['TRAM_SDK_ASSERT_MESSAGE',['../macros_8h.html#a152c2304044652f7572e5759c6535a2c',1,'macros.h']]], ['tram_5fsdk_5fimplement_5fpool_3',['TRAM_SDK_IMPLEMENT_POOL',['../macros_8h.html#ad00c543490e5b3b7db91b1fdb62d44cb',1,'macros.h']]], ['tram_5fsdk_5fregister_5fevent_5fdatatype_4',['TRAM_SDK_REGISTER_EVENT_DATATYPE',['../macros_8h.html#a52706c5e76dff5554e6be98274f86e3d',1,'macros.h']]] ]; ================================================ FILE: docs/cppapi/search/enums_0.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enums_0.js ================================================ var searchData= [ ['accessmode_0',['AccessMode',['../classtram_1_1_file.html#ab340a7edca3c73f54d764cd17b362477',1,'tram::File']]], ['audiosamplerate_1',['AudioSampleRate',['../namespacetram_1_1_audio_1_1_spatial.html#ade3f518b6f4fc8663aa6cc3143481f92',1,'tram::Audio::Spatial']]], ['audiosourceflags_2',['AudioSourceFlags',['../namespacetram_1_1_audio_1_1_spatial.html#a29e8b2fda522dd1d5e8f4ec648217351',1,'tram::Audio::Spatial']]] ]; ================================================ FILE: docs/cppapi/search/enums_1.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enums_1.js ================================================ var searchData= [ ['collisiongroup_0',['CollisionGroup',['../namespacetram_1_1_physics.html#a5b8f6a7bd1ffb55b55a5f534008406f8',1,'tram::Physics']]], ['colormode_1',['ColorMode',['../namespacetram_1_1_render.html#ac973dc59905532e29e79841ae76af894',1,'tram::Render']]], ['contexttype_2',['ContextType',['../namespacetram_1_1_render_1_1_a_p_i.html#a4aa628366e46526d2722302d9ce9d230',1,'tram::Render::API']]], ['cursortype_3',['CursorType',['../namespacetram_1_1_u_i.html#a6ae9e156e84d2049fc1e691a10e0348f',1,'tram::UI::CursorType()'],['../namespacetram_1_1_platform_1_1_window.html#a1ed03f0da21527169589f581e55c881f',1,'tram::Platform::Window::CursorType()']]] ]; ================================================ FILE: docs/cppapi/search/enums_10.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enums_10.js ================================================ var searchData= [ ['vertexformats_0',['VertexFormats',['../namespacetram_1_1_render.html#a55401591f1faf2a435bdb5eb188ad2c8',1,'tram::Render']]] ]; ================================================ FILE: docs/cppapi/search/enums_11.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enums_11.js ================================================ var searchData= [ ['widget_0',['widget',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1',1,'tram::GUI']]] ]; ================================================ FILE: docs/cppapi/search/enums_2.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enums_2.js ================================================ var searchData= [ ['dialogtype_0',['DialogType',['../namespacetram_1_1_ext_1_1_kitchensink.html#a9ab8b667486c023b0e1defc92b807c54',1,'tram::Ext::Kitchensink']]] ]; ================================================ FILE: docs/cppapi/search/enums_3.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enums_3.js ================================================ var searchData= [ ['filemedium_0',['FileMedium',['../namespacetram.html#a529c8d3e049a7dcc4425fbe040e4c531',1,'tram']]], ['filestatus_1',['FileStatus',['../namespacetram.html#a972c59287ba467dbfe003f137609550d',1,'tram']]] ]; ================================================ FILE: docs/cppapi/search/enums_4.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enums_4.js ================================================ var searchData= [ ['glyphtype_0',['GlyphType',['../namespacetram_1_1_g_u_i.html#aed177dc7d46e43f3cf52662fecbaf0a6',1,'tram::GUI']]] ]; ================================================ FILE: docs/cppapi/search/enums_5.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enums_5.js ================================================ var searchData= [ ['inputstate_0',['InputState',['../namespacetram_1_1_u_i.html#aef59b5ccd9382ca4fdd1f951a9b68aef',1,'tram::UI']]] ]; ================================================ FILE: docs/cppapi/search/enums_6.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enums_6.js ================================================ var searchData= [ ['keyboardaction_0',['KeyboardAction',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99',1,'tram::UI']]], ['keyboardaxis_1',['KeyboardAxis',['../namespacetram_1_1_u_i.html#aace717edeba1f507cd383c7d1f00e064',1,'tram::UI']]], ['keyboardkey_2',['KeyboardKey',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9',1,'tram::UI']]] ]; ================================================ FILE: docs/cppapi/search/enums_7.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enums_7.js ================================================ var searchData= [ ['listenertype_0',['ListenerType',['../structtram_1_1_listener_info.html#a92c413c2c02e7a4f40f59d27dd94de0f',1,'tram::ListenerInfo']]] ]; ================================================ FILE: docs/cppapi/search/enums_8.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enums_8.js ================================================ var searchData= [ ['materialfilter_0',['MaterialFilter',['../namespacetram_1_1_render.html#aab519c3dc6ead26c1a7695e4c3b5501c',1,'tram::Render']]], ['materialproperty_1',['MaterialProperty',['../namespacetram_1_1_render.html#aa55781f294a5a76e9cba54376f45a43f',1,'tram::Render']]], ['materialtypes_2',['MaterialTypes',['../namespacetram_1_1_render.html#a315a4bade1773ce2a425e5e7702c003e',1,'tram::Render']]], ['metadatatype_3',['MetadataType',['../namespacetram_1_1_physics_1_1_a_p_i.html#a7fe5a316a9a2a82e6fefebb795f58eb0',1,'tram::Physics::API']]] ]; ================================================ FILE: docs/cppapi/search/enums_9.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enums_9.js ================================================ var searchData= [ ['octant_0',['Octant',['../classtram_1_1_octree.html#a7d20e8b44f034b8f8c6748d004c72321',1,'tram::Octree']]], ['orientation_1',['orientation',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deef',1,'tram::GUI']]] ]; ================================================ FILE: docs/cppapi/search/enums_a.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enums_a.js ================================================ var searchData= [ ['pathtype_0',['PathType',['../namespacetram.html#a8285e82eb5cb49da9f6a5a02dd0560a2',1,'tram']]] ]; ================================================ FILE: docs/cppapi/search/enums_b.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enums_b.js ================================================ var searchData= [ ['quest_5ft_0',['quest_t',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1b',1,'tram::Ext::Kitchensink']]] ]; ================================================ FILE: docs/cppapi/search/enums_c.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enums_c.js ================================================ var searchData= [ ['referencetype_0',['ReferenceType',['../namespacetram_1_1_render_1_1_a_a_b_b.html#a5bb0d1f9511914c037cd30f91aa9264c',1,'tram::Render::AABB']]], ['renderflags_1',['renderflags',['../namespacetram_1_1_render.html#ac048699f6dc8dc5b8681c8aa3ac65d9c',1,'tram::Render']]], ['requestnotification_2',['RequestNotification',['../namespacetram_1_1_async.html#a3852629b110e5e57e85140bb5fe518e5',1,'tram::Async']]], ['resource_3',['Resource',['../namespacetram_1_1_stats.html#a3308525cd94517390ff06b22b9fef78e',1,'tram::Stats']]] ]; ================================================ FILE: docs/cppapi/search/enums_d.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enums_d.js ================================================ var searchData= [ ['severity_0',['Severity',['../namespacetram.html#a34ab368bc856f9bd71bfcb4f2bb86c56',1,'tram']]], ['shaderflag_1',['ShaderFlag',['../namespacetram_1_1_render_1_1_a_p_i.html#a0a0206969f4d402cd5e729bd34391517',1,'tram::Render::API']]], ['shape_2',['Shape',['../namespacetram_1_1_physics.html#abe8615cdc9ae6d697635a3a024e90470',1,'tram::Physics']]], ['soundaction_3',['SoundAction',['../namespacetram_1_1_ext_1_1_kitchensink.html#ac0b6180871852d23893d3339b6beed53',1,'tram::Ext::Kitchensink']]], ['status_4',['Status',['../classtram_1_1_resource.html#a7a4ce943d482665189305b828868c2a4',1,'tram::Resource']]], ['swtexturemode_5',['SWTextureMode',['../namespacetram_1_1_render_1_1_a_p_i.html#a435f5c7784d296fc909a87b6c6190a8c',1,'tram::Render::API']]], ['swvertextype_6',['SWVertexType',['../namespacetram_1_1_render_1_1_a_p_i.html#a52ad3127cec9daa2f9c83ca8875dd2d2',1,'tram::Render::API']]], ['system_7',['System',['../namespacetram_1_1_system.html#a02b5e7a5340ef5ca42a650ca4d8ade65',1,'tram::System']]], ['systemstate_8',['SystemState',['../namespacetram_1_1_system.html#a4703b937891576671c79a6d02a63c0a2',1,'tram::System']]] ]; ================================================ FILE: docs/cppapi/search/enums_e.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enums_e.js ================================================ var searchData= [ ['texturefilter_0',['TextureFilter',['../namespacetram_1_1_render.html#ad3c2cb5af20e13497cc81f62d22b430c',1,'tram::Render']]], ['texturetype_1',['TextureType',['../namespacetram_1_1_render.html#ae823e9f58d9c8060a531459eec5ff811',1,'tram::Render']]], ['type_2',['Type',['../structtram_1_1_event.html#a569d6673fa83d2a5ec86b3d0c36c8765',1,'tram::Event::Type()'],['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afd',1,'tram::Message::Type()'],['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6',1,'tram::Signal::Type()'],['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609',1,'tram::Type()']]] ]; ================================================ FILE: docs/cppapi/search/enums_f.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enums_f.js ================================================ var searchData= [ ['userindex_0',['UserIndex',['../namespacetram_1_1_physics_1_1_a_p_i.html#a142223787cfe33696de7cd92c8ae663c',1,'tram::Physics::API']]] ]; ================================================ FILE: docs/cppapi/search/enumvalues_0.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enumvalues_0.js ================================================ var searchData= [ ['activate_0',['ACTIVATE',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afda22521d1c8ac869500c5e2bac43e6acd0',1,'tram::Message::ACTIVATE()'],['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6a3df791ecf039d9c7b4bc33d2d309d402',1,'tram::Signal::ACTIVATE()']]], ['activate_5fonce_1',['ACTIVATE_ONCE',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afdac734cee3c6945cb40d1e23a5b6e12a3a',1,'tram::Message']]], ['application_2',['APPLICATION',['../namespacetram_1_1_settings.html#a0861538a476a71457a80e698e710eef1a5e8d3d37d3d54ed5793dfc159630d0db',1,'tram::Settings']]], ['archive_3',['ARCHIVE',['../namespacetram.html#a529c8d3e049a7dcc4425fbe040e4c531a71f01f32e90440fd6039511dde69e995',1,'tram']]], ['async_4',['ASYNC',['../namespacetram_1_1_system.html#a02b5e7a5340ef5ca42a650ca4d8ade65a8f56dd168853c665aca65b28e1b0fa4f',1,'tram::System']]], ['audio_5',['AUDIO',['../namespacetram_1_1_system.html#a02b5e7a5340ef5ca42a650ca4d8ade65aa677dba760329e1c8a19f1b9564fb0ee',1,'tram::System']]], ['automatic_5floading_6',['AUTOMATIC_LOADING',['../classtram_1_1_world_cell.html#a90b9ed6e3265fb6b3e569669117fd514a5bcce5b3c7f26f25c0a5e06cb8658c7f',1,'tram::WorldCell']]] ]; ================================================ FILE: docs/cppapi/search/enumvalues_1.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enumvalues_1.js ================================================ var searchData= [ ['binary_0',['BINARY',['../classtram_1_1_file.html#ab340a7edca3c73f54d764cd17b362477a48058d1f6460f840218c5f0f3cf9189d',1,'tram::File']]], ['button_5ffield_5fdirection_1',['BUTTON_FIELD_DIRECTION',['../namespacetram_1_1_ext_1_1_kitchensink.html#ad924f50692439454362f23d98fb1ffe7a92474d3f271e766f76971dda90cd0362',1,'tram::Ext::Kitchensink']]], ['button_5ffield_5fdistance_2',['BUTTON_FIELD_DISTANCE',['../namespacetram_1_1_ext_1_1_kitchensink.html#ad924f50692439454362f23d98fb1ffe7ac099af4787961ca1566e96824af7ffc7',1,'tram::Ext::Kitchensink']]], ['button_5ffield_5fflags_3',['BUTTON_FIELD_FLAGS',['../namespacetram_1_1_ext_1_1_kitchensink.html#ad924f50692439454362f23d98fb1ffe7a028447ade1e576d6a3596bedf3517528',1,'tram::Ext::Kitchensink']]], ['button_5ffield_5flast_4',['BUTTON_FIELD_LAST',['../namespacetram_1_1_ext_1_1_kitchensink.html#ad924f50692439454362f23d98fb1ffe7af808d6a5415653e978a37bc90f1712ca',1,'tram::Ext::Kitchensink']]], ['button_5ffield_5flightmap_5',['BUTTON_FIELD_LIGHTMAP',['../namespacetram_1_1_ext_1_1_kitchensink.html#ad924f50692439454362f23d98fb1ffe7abd316ee424b7b23bc29edb3db10d7971',1,'tram::Ext::Kitchensink']]], ['button_5ffield_5fmodel_6',['BUTTON_FIELD_MODEL',['../namespacetram_1_1_ext_1_1_kitchensink.html#ad924f50692439454362f23d98fb1ffe7a5939dee0aa6a66cd382da9d723dc5119',1,'tram::Ext::Kitchensink']]], ['button_5ffield_5forigin_7',['BUTTON_FIELD_ORIGIN',['../namespacetram_1_1_ext_1_1_kitchensink.html#ad924f50692439454362f23d98fb1ffe7abccb49cfe3ecf4a7089d3f68b31d5733',1,'tram::Ext::Kitchensink']]], ['button_5ffield_5fparent_8',['BUTTON_FIELD_PARENT',['../namespacetram_1_1_ext_1_1_kitchensink.html#ad924f50692439454362f23d98fb1ffe7a07490a9283436693bf80c3c6b0058c01',1,'tram::Ext::Kitchensink']]], ['button_5ffield_5fpause_9',['BUTTON_FIELD_PAUSE',['../namespacetram_1_1_ext_1_1_kitchensink.html#ad924f50692439454362f23d98fb1ffe7afe4015956bfc5bb557953716e66a1661',1,'tram::Ext::Kitchensink']]], ['button_5ffield_5fsound_10',['BUTTON_FIELD_SOUND',['../namespacetram_1_1_ext_1_1_kitchensink.html#ad924f50692439454362f23d98fb1ffe7a728d91fe623b79e8061cafa8a4652b36',1,'tram::Ext::Kitchensink']]], ['button_5ffield_5fspeed_11',['BUTTON_FIELD_SPEED',['../namespacetram_1_1_ext_1_1_kitchensink.html#ad924f50692439454362f23d98fb1ffe7a52b7c6c18b3e554e70783d4fbff24377',1,'tram::Ext::Kitchensink']]], ['button_5fflag_5flocked_12',['BUTTON_FLAG_LOCKED',['../namespacetram_1_1_ext_1_1_kitchensink.html#ac280e36a407bbb9e04103c5b98a6d6d4a256eaf735f9a4e3d494796a41a86020f',1,'tram::Ext::Kitchensink']]], ['button_5fflag_5fmomentary_13',['BUTTON_FLAG_MOMENTARY',['../namespacetram_1_1_ext_1_1_kitchensink.html#ac280e36a407bbb9e04103c5b98a6d6d4a32a1fe42b0a3f2c8fe9a144c063d8875',1,'tram::Ext::Kitchensink']]], ['button_5fflag_5fpushed_14',['BUTTON_FLAG_PUSHED',['../namespacetram_1_1_ext_1_1_kitchensink.html#ac280e36a407bbb9e04103c5b98a6d6d4ac3fd8b6adb00899959c6922434df8667',1,'tram::Ext::Kitchensink']]], ['button_5fflag_5frotary_15',['BUTTON_FLAG_ROTARY',['../namespacetram_1_1_ext_1_1_kitchensink.html#ac280e36a407bbb9e04103c5b98a6d6d4accb92c1699f26653b36e7d8e034de0ab',1,'tram::Ext::Kitchensink']]], ['button_5fflag_5ftoggle_16',['BUTTON_FLAG_TOGGLE',['../namespacetram_1_1_ext_1_1_kitchensink.html#ac280e36a407bbb9e04103c5b98a6d6d4ad5ba4fa14d330818e7cb9d2d925bfd89',1,'tram::Ext::Kitchensink']]], ['button_5fstate_5flowering_17',['BUTTON_STATE_LOWERING',['../namespacetram_1_1_ext_1_1_kitchensink.html#a0d1eaa08844d3f7ecb0fafaa53d7eea0a9539b1c85c98e25e6d3bfbdec2a53a10',1,'tram::Ext::Kitchensink']]], ['button_5fstate_5fnadir_5fready_18',['BUTTON_STATE_NADIR_READY',['../namespacetram_1_1_ext_1_1_kitchensink.html#a0d1eaa08844d3f7ecb0fafaa53d7eea0abe12753cafabc3489ec75a7d078c2938',1,'tram::Ext::Kitchensink']]], ['button_5fstate_5fnadir_5fwaiting_19',['BUTTON_STATE_NADIR_WAITING',['../namespacetram_1_1_ext_1_1_kitchensink.html#a0d1eaa08844d3f7ecb0fafaa53d7eea0a0be36c3333481d4855b2113b7cabc18c',1,'tram::Ext::Kitchensink']]], ['button_5fstate_5frising_20',['BUTTON_STATE_RISING',['../namespacetram_1_1_ext_1_1_kitchensink.html#a0d1eaa08844d3f7ecb0fafaa53d7eea0a0ef998e800a26a482cca479d2f93e691',1,'tram::Ext::Kitchensink']]], ['button_5fstate_5fzenith_5fready_21',['BUTTON_STATE_ZENITH_READY',['../namespacetram_1_1_ext_1_1_kitchensink.html#a0d1eaa08844d3f7ecb0fafaa53d7eea0a8e326dcbf2adbe29156062f45c99c2d9',1,'tram::Ext::Kitchensink']]], ['button_5fstate_5fzenith_5fwaiting_22',['BUTTON_STATE_ZENITH_WAITING',['../namespacetram_1_1_ext_1_1_kitchensink.html#a0d1eaa08844d3f7ecb0fafaa53d7eea0a558287c453525abd4baca12cb3b0f3e9',1,'tram::Ext::Kitchensink']]] ]; ================================================ FILE: docs/cppapi/search/enumvalues_10.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enumvalues_10.js ================================================ var searchData= [ ['read_0',['READ',['../classtram_1_1_file.html#ab340a7edca3c73f54d764cd17b362477a5e3d5e80c10e5d25d26a648c1f26e02d',1,'tram::File']]], ['ready_1',['READY',['../classtram_1_1_resource.html#a7a4ce943d482665189305b828868c2a4aa3769d5e294e6b2450a45d76dabd4084',1,'tram::Resource::READY()'],['../namespacetram_1_1_system.html#a4703b937891576671c79a6d02a63c0a2afe2c2852d86a0bab7964b332561c1958',1,'tram::System::READY()'],['../namespacetram.html#a972c59287ba467dbfe003f137609550da2baa69eafc7204f3bd8648eba580c489',1,'tram::READY()']]], ['reference_5frendercomponent_2',['REFERENCE_RENDERCOMPONENT',['../namespacetram_1_1_render_1_1_a_a_b_b.html#a5bb0d1f9511914c037cd30f91aa9264cacd9048859d266397d2abe34d831b84ec',1,'tram::Render::AABB']]], ['render_3',['RENDER',['../namespacetram_1_1_system.html#a02b5e7a5340ef5ca42a650ca4d8ade65a002f90cdb21c6e590918357ef589f0d7',1,'tram::System']]], ['resource_5fdrawcall_4',['RESOURCE_DRAWCALL',['../namespacetram_1_1_stats.html#a3308525cd94517390ff06b22b9fef78ea30dfa36d594401ff8bc2fa42bdaef635',1,'tram::Stats']]], ['resource_5fvram_5',['RESOURCE_VRAM',['../namespacetram_1_1_stats.html#a3308525cd94517390ff06b22b9fef78ea5562dbf309e54c68ea2c9be9659c3998',1,'tram::Stats']]] ]; ================================================ FILE: docs/cppapi/search/enumvalues_11.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enumvalues_11.js ================================================ var searchData= [ ['samplerate_5f11025_0',['SAMPLERATE_11025',['../namespacetram_1_1_audio_1_1_spatial.html#ade3f518b6f4fc8663aa6cc3143481f92aac71770f82a6275d05bd2bbca3197136',1,'tram::Audio::Spatial']]], ['samplerate_5f22050_1',['SAMPLERATE_22050',['../namespacetram_1_1_audio_1_1_spatial.html#ade3f518b6f4fc8663aa6cc3143481f92a169e074b5f1d0c78d330391b2af84f67',1,'tram::Audio::Spatial']]], ['samplerate_5f44100_2',['SAMPLERATE_44100',['../namespacetram_1_1_audio_1_1_spatial.html#ade3f518b6f4fc8663aa6cc3143481f92adea809ee311892b0def96da9d7daea32',1,'tram::Audio::Spatial']]], ['select_3',['SELECT',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afda25c37f57fe797d8c8f13fc639eac22aa',1,'tram::Message']]], ['selected_4',['SELECTED',['../structtram_1_1_event.html#a569d6673fa83d2a5ec86b3d0c36c8765a95f4763a21669c2b729ec12f7e6970c6',1,'tram::Event']]], ['set_5fanimation_5',['SET_ANIMATION',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afda7060aac17306329964fe7abda5b538c8',1,'tram::Message']]], ['set_5fflag_5foff_6',['SET_FLAG_OFF',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afda8fe9a252ea757ae7d93edf0da09172d8',1,'tram::Message']]], ['set_5fflag_5fon_7',['SET_FLAG_ON',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afda6339dff2f96fb0b14555a2df9c70195d',1,'tram::Message']]], ['set_5fprogress_8',['SET_PROGRESS',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afda80330a58630331f2b6204ffadc99b68b',1,'tram::Message']]], ['shader_5flightmap_9',['SHADER_LIGHTMAP',['../namespacetram_1_1_render_1_1_a_p_i.html#a0a0206969f4d402cd5e729bd34391517a32b9ba4ddcd11c5cc6742966a1c24e53',1,'tram::Render::API']]], ['shader_5fnone_10',['SHADER_NONE',['../namespacetram_1_1_render_1_1_a_p_i.html#a0a0206969f4d402cd5e729bd34391517a924f5c47b4962d4252d116c2e4641fc4',1,'tram::Render::API']]], ['shader_5fspecular_11',['SHADER_SPECULAR',['../namespacetram_1_1_render_1_1_a_p_i.html#a0a0206969f4d402cd5e729bd34391517aaf523bd1d505855eb402ae729cb552a0',1,'tram::Render::API']]], ['shape_5fbox_12',['SHAPE_BOX',['../namespacetram_1_1_physics.html#abe8615cdc9ae6d697635a3a024e90470ab5dfdaaa7551c0d3dfc1f83fe5e2c5c4',1,'tram::Physics']]], ['shape_5fcapsule_13',['SHAPE_CAPSULE',['../namespacetram_1_1_physics.html#abe8615cdc9ae6d697635a3a024e90470a7b5b398889fced1c5ab79ab282dc4070',1,'tram::Physics']]], ['shape_5fcone_14',['SHAPE_CONE',['../namespacetram_1_1_physics.html#abe8615cdc9ae6d697635a3a024e90470a0e7a9317522c84731b8a3610ed56023b',1,'tram::Physics']]], ['shape_5fcylinder_15',['SHAPE_CYLINDER',['../namespacetram_1_1_physics.html#abe8615cdc9ae6d697635a3a024e90470af2ee4d68fba8f9cafa1b5e46fbf84f04',1,'tram::Physics']]], ['shape_5fhull_16',['SHAPE_HULL',['../namespacetram_1_1_physics.html#abe8615cdc9ae6d697635a3a024e90470aebd34133bb70b2f3b749a97ecba9a7c6',1,'tram::Physics']]], ['shape_5fmesh_17',['SHAPE_MESH',['../namespacetram_1_1_physics.html#abe8615cdc9ae6d697635a3a024e90470a8c92deed143d83925369f4bbac1d79d3',1,'tram::Physics']]], ['shape_5fsphere_18',['SHAPE_SPHERE',['../namespacetram_1_1_physics.html#abe8615cdc9ae6d697635a3a024e90470a2e2d1dec24f7a13509f6c93e916c29de',1,'tram::Physics']]], ['sound_5fclose_19',['SOUND_CLOSE',['../namespacetram_1_1_ext_1_1_kitchensink.html#ac0b6180871852d23893d3339b6beed53a0b1510724c55be0cad2e892725226c4d',1,'tram::Ext::Kitchensink']]], ['sound_5fend_5fclose_20',['SOUND_END_CLOSE',['../namespacetram_1_1_ext_1_1_kitchensink.html#ac0b6180871852d23893d3339b6beed53a477e1a3f1473578ac80f685cd411a3d1',1,'tram::Ext::Kitchensink']]], ['sound_5fend_5fopen_21',['SOUND_END_OPEN',['../namespacetram_1_1_ext_1_1_kitchensink.html#ac0b6180871852d23893d3339b6beed53a9c3e411d1043f7a77edc2a1c39177f5e',1,'tram::Ext::Kitchensink']]], ['sound_5fhit_22',['SOUND_HIT',['../namespacetram_1_1_ext_1_1_kitchensink.html#ac0b6180871852d23893d3339b6beed53ab806d576cdea3d633ec61b5b3f1b9acb',1,'tram::Ext::Kitchensink']]], ['sound_5fjump_5fon_23',['SOUND_JUMP_ON',['../namespacetram_1_1_ext_1_1_kitchensink.html#ac0b6180871852d23893d3339b6beed53aa78540b88200263453173ba9037db0f8',1,'tram::Ext::Kitchensink']]], ['sound_5flocked_24',['SOUND_LOCKED',['../namespacetram_1_1_ext_1_1_kitchensink.html#ac0b6180871852d23893d3339b6beed53ad8d8417ecb3b9e599d26ee4e9c8d7d75',1,'tram::Ext::Kitchensink']]], ['sound_5flooping_25',['SOUND_LOOPING',['../namespacetram.html#a9f451d1ee1334ce10a83ea2f79c93370a2b98109c83d1a5e315eda5bd27f24c6d',1,'tram']]], ['sound_5fopen_26',['SOUND_OPEN',['../namespacetram_1_1_ext_1_1_kitchensink.html#ac0b6180871852d23893d3339b6beed53a1945da65354169336d298153cc6d6fcd',1,'tram::Ext::Kitchensink']]], ['sound_5fstart_5fon_5fload_27',['SOUND_START_ON_LOAD',['../namespacetram.html#a9f451d1ee1334ce10a83ea2f79c93370a8343d10ea6ccc52ae5edac8e1b9f44a8',1,'tram']]], ['sound_5fwalk_5fon_28',['SOUND_WALK_ON',['../namespacetram_1_1_ext_1_1_kitchensink.html#ac0b6180871852d23893d3339b6beed53a9d256387912c4726b3722a012d6d47b1',1,'tram::Ext::Kitchensink']]], ['source_5fplaying_29',['SOURCE_PLAYING',['../namespacetram_1_1_audio_1_1_spatial.html#a29e8b2fda522dd1d5e8f4ec648217351a76edfe568a1b4a6cd61ea9e4634d4338',1,'tram::Audio::Spatial']]], ['source_5frepeating_30',['SOURCE_REPEATING',['../namespacetram_1_1_audio_1_1_spatial.html#a29e8b2fda522dd1d5e8f4ec648217351a16c59175dddfde6cd9721d2eab2c577f',1,'tram::Audio::Spatial']]], ['spawn_31',['SPAWN',['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6a9690ebb5954232b7d16f29442a036476',1,'tram::Signal']]], ['start_32',['START',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afdaefb80d59450ad6bd1ebed0479a8fc282',1,'tram::Message']]], ['state_5fcursor_33',['STATE_CURSOR',['../namespacetram_1_1_u_i.html#aef59b5ccd9382ca4fdd1f951a9b68aefa12b82658eb8500babd0132e1ef48d60c',1,'tram::UI']]], ['state_5fdefault_34',['STATE_DEFAULT',['../namespacetram_1_1_u_i.html#aef59b5ccd9382ca4fdd1f951a9b68aefac85efc9d2a4eb7e1cc2262d7dff47a2d',1,'tram::UI']]], ['state_5fflying_35',['STATE_FLYING',['../namespacetram_1_1_u_i.html#aef59b5ccd9382ca4fdd1f951a9b68aefa27b3b1ef62f6dbd05179b47d610ddda6',1,'tram::UI']]], ['state_5fmenu_5fopen_36',['STATE_MENU_OPEN',['../namespacetram_1_1_u_i.html#aef59b5ccd9382ca4fdd1f951a9b68aefadb34ad1fcde66543097a2bf401fa4a12',1,'tram::UI']]], ['state_5fno_5finput_37',['STATE_NO_INPUT',['../namespacetram_1_1_u_i.html#aef59b5ccd9382ca4fdd1f951a9b68aefa0ba9af9131cd70f1cd88e11a2f0ddfd9',1,'tram::UI']]], ['stop_38',['STOP',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afda1ad9eec2532ec3093a0fcb54d5da9785',1,'tram::Message']]], ['sw_5fblended_39',['SW_BLENDED',['../namespacetram_1_1_render_1_1_a_p_i.html#a435f5c7784d296fc909a87b6c6190a8ca716baa2db5e2b2ff5b4fb7b841f3c0f4',1,'tram::Render::API']]], ['sw_5fdynamic_5fblended_40',['SW_DYNAMIC_BLENDED',['../namespacetram_1_1_render_1_1_a_p_i.html#a52ad3127cec9daa2f9c83ca8875dd2d2a00b5e4053744cb39cb6155be720d7419',1,'tram::Render::API']]], ['sw_5fnearest_41',['SW_NEAREST',['../namespacetram_1_1_render_1_1_a_p_i.html#a435f5c7784d296fc909a87b6c6190a8ca1da7efb4481bda8396c5e620c0df3c31',1,'tram::Render::API']]], ['sw_5fsprite_42',['SW_SPRITE',['../namespacetram_1_1_render_1_1_a_p_i.html#a52ad3127cec9daa2f9c83ca8875dd2d2a7f4a9f5e1fe4e061d733b4da886ba1f8',1,'tram::Render::API']]], ['sw_5fstatic_5fcolored_43',['SW_STATIC_COLORED',['../namespacetram_1_1_render_1_1_a_p_i.html#a52ad3127cec9daa2f9c83ca8875dd2d2a94f59d3013c40170946204191132570a',1,'tram::Render::API']]], ['sw_5fstatic_5flightmapped_44',['SW_STATIC_LIGHTMAPPED',['../namespacetram_1_1_render_1_1_a_p_i.html#a52ad3127cec9daa2f9c83ca8875dd2d2a5f33f9d3675e0124018172ead149c255',1,'tram::Render::API']]], ['system_5flast_45',['SYSTEM_LAST',['../namespacetram_1_1_system.html#a02b5e7a5340ef5ca42a650ca4d8ade65a01dd7ac92f0b981b22c96c5d43882da4',1,'tram::System']]] ]; ================================================ FILE: docs/cppapi/search/enumvalues_12.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enumvalues_12.js ================================================ var searchData= [ ['text_0',['TEXT',['../classtram_1_1_file.html#ab340a7edca3c73f54d764cd17b362477a6518ec116fa14720023ab555ac98fc78',1,'tram::File::TEXT()'],['../namespacetram_1_1_g_u_i.html#aed177dc7d46e43f3cf52662fecbaf0a6abfe639cbd14f55a92f4ebe8375a1ac2d',1,'tram::GUI::TEXT()']]], ['text_5fcenter_1',['TEXT_CENTER',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefaab9068e1ea84d1d6500fff39f40432d8',1,'tram::GUI']]], ['text_5fjustified_2',['TEXT_JUSTIFIED',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefa5599915901369f00b9f42ac84e491a2c',1,'tram::GUI']]], ['text_5fleft_3',['TEXT_LEFT',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefa1e9c20e6fa371be1c425b7a6e7f6618d',1,'tram::GUI']]], ['text_5fright_4',['TEXT_RIGHT',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefa06eff8d79ce30aab6563d6e3f35ce4aa',1,'tram::GUI']]], ['texture_5fnone_5',['TEXTURE_NONE',['../namespacetram_1_1_render.html#ae823e9f58d9c8060a531459eec5ff811ae02c2e6f4cec72ea436b28aad4efd80b',1,'tram::Render']]], ['texture_5fsame_6',['TEXTURE_SAME',['../namespacetram_1_1_render.html#ae823e9f58d9c8060a531459eec5ff811af6589e2c02fc50470840c08b9892f043',1,'tram::Render']]], ['texture_5fsource_7',['TEXTURE_SOURCE',['../namespacetram_1_1_render.html#ae823e9f58d9c8060a531459eec5ff811a3cfd37b75ddc6c3ba8caa20597d6c863',1,'tram::Render']]], ['texturefilter_5flinear_8',['TEXTUREFILTER_LINEAR',['../namespacetram_1_1_render.html#ad3c2cb5af20e13497cc81f62d22b430ca811c3596f6fa1f1dc908e87d7e45d3ef',1,'tram::Render']]], ['texturefilter_5flinear_5fmipmapped_9',['TEXTUREFILTER_LINEAR_MIPMAPPED',['../namespacetram_1_1_render.html#ad3c2cb5af20e13497cc81f62d22b430ca9975010d94838d5395406df69da07d91',1,'tram::Render']]], ['texturefilter_5fnearest_10',['TEXTUREFILTER_NEAREST',['../namespacetram_1_1_render.html#ad3c2cb5af20e13497cc81f62d22b430caf20b0ce0de416c5d5b69e1674ab4b647',1,'tram::Render']]], ['tick_11',['TICK',['../structtram_1_1_event.html#a569d6673fa83d2a5ec86b3d0c36c8765a5f4725790d09920d33c0121683f8e436',1,'tram::Event']]], ['toggle_12',['TOGGLE',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afda93e680ef8cb095acd544a1f003fd6d59',1,'tram::Message']]], ['trigger_13',['TRIGGER',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afda7212349b95502a98e821a6a03013e23c',1,'tram::Message::TRIGGER()'],['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6afedf8321ba6bcc2dffe71710785714fd',1,'tram::Signal::TRIGGER()']]], ['trigger_5fdisabled_14',['TRIGGER_DISABLED',['../namespacetram.html#a7df27030d05a9ea15250c9c9811a6f80ac0129f4f79c932b3b87cc690cfafb159',1,'tram']]], ['type_5fbool_15',['TYPE_BOOL',['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609a111453a4d7714cf86faa97be315b46cc',1,'tram']]], ['type_5ffloat32_16',['TYPE_FLOAT32',['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609afa725a1f951661b708f729b920749c1d',1,'tram']]], ['type_5fint16_17',['TYPE_INT16',['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609a49b78449d81fdcd2a93b3d5fa92325c4',1,'tram']]], ['type_5fint32_18',['TYPE_INT32',['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609a86fd0d5ff1171a6451643f81818e90a5',1,'tram']]], ['type_5fint8_19',['TYPE_INT8',['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609ad0d568cbbb0814f238d210d2b4e9d3c0',1,'tram']]], ['type_5fname_20',['TYPE_NAME',['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609af71a0101efab7293c5e5e7d0e1fddd8c',1,'tram']]], ['type_5fquat_21',['TYPE_QUAT',['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609ab4f55e3ac7164edcba77a919c4c6c92b',1,'tram']]], ['type_5fstring_22',['TYPE_STRING',['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609a3d336d61c1e5bc13bd9118a9eaef27b6',1,'tram']]], ['type_5fuint16_23',['TYPE_UINT16',['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609af8ea1dfd3e18e18031dd0108f82b07ef',1,'tram']]], ['type_5fuint32_24',['TYPE_UINT32',['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609a844da12f97bd954de21a57e8a2a92417',1,'tram']]], ['type_5fuint8_25',['TYPE_UINT8',['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609ab89f008c241c92259b4b0c1d4d91624e',1,'tram']]], ['type_5fundefined_26',['TYPE_UNDEFINED',['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609ad58e67edf974dfb07e729461f8705f05',1,'tram']]], ['type_5fvec2_27',['TYPE_VEC2',['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609a4f418b5865c768e38124f40a4ce833e4',1,'tram']]], ['type_5fvec3_28',['TYPE_VEC3',['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609aa18f8ff29f12654a098855735f6ec009',1,'tram']]], ['type_5fvec4_29',['TYPE_VEC4',['../namespacetram.html#a2b5d2fc96be5dd5baddedba49a7ef609ab74623faa07cd1460524e37db8650aee',1,'tram']]] ]; ================================================ FILE: docs/cppapi/search/enumvalues_13.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enumvalues_13.js ================================================ var searchData= [ ['ui_0',['UI',['../namespacetram_1_1_system.html#a02b5e7a5340ef5ca42a650ca4d8ade65ad88b5fea78202cf57786b8c73b33de50',1,'tram::System']]], ['uint32_1',['UINT32',['../structtram_1_1_render_1_1_vertex_attribute.html#a5478d84843dda2d90f4628b2e2c39868aef6493c68c47d96ac90a5ec12a80ecf8',1,'tram::Render::VertexAttribute']]], ['unloaded_2',['UNLOADED',['../classtram_1_1_resource.html#a7a4ce943d482665189305b828868c2a4aaf2b9e0d9106fbd6dac3913e0b23f11d',1,'tram::Resource']]], ['unlock_3',['UNLOCK',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afda293259ce10e99401eb22c95c3e2af001',1,'tram::Message']]], ['use_4',['USE',['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6a82485cb8296d8eb5604d3aba9e489e29',1,'tram::Signal']]], ['user_5',['USER',['../namespacetram_1_1_settings.html#a0861538a476a71457a80e698e710eef1ab553ee57502969cce370c35c3f47fa20',1,'tram::Settings::USER()'],['../namespacetram.html#a529c8d3e049a7dcc4425fbe040e4c531a2e40ad879e955201df4dedbf8d479a12',1,'tram::USER()']]], ['userindex_5frigidbody_6',['USERINDEX_RIGIDBODY',['../namespacetram_1_1_physics_1_1_a_p_i.html#a142223787cfe33696de7cd92c8ae663ca9e73c15871f0e5bf0d0c703f2806847c',1,'tram::Physics::API']]], ['userindex_5ftrigger_7',['USERINDEX_TRIGGER',['../namespacetram_1_1_physics_1_1_a_p_i.html#a142223787cfe33696de7cd92c8ae663cadbe60cd188938c521a61b0ca3cc66b72',1,'tram::Physics::API']]] ]; ================================================ FILE: docs/cppapi/search/enumvalues_14.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enumvalues_14.js ================================================ var searchData= [ ['vertex_5fdynamic_0',['VERTEX_DYNAMIC',['../namespacetram_1_1_render.html#a55401591f1faf2a435bdb5eb188ad2c8a2b7b747a45e6dc165399cd79730221fe',1,'tram::Render']]], ['vertex_5flast_1',['VERTEX_LAST',['../namespacetram_1_1_render.html#a55401591f1faf2a435bdb5eb188ad2c8ac6efea31b82282c07b93044c570f0481',1,'tram::Render']]], ['vertex_5fline_2',['VERTEX_LINE',['../namespacetram_1_1_render.html#a55401591f1faf2a435bdb5eb188ad2c8aca3254ad94ebb6b1de5f49ed69adf02d',1,'tram::Render']]], ['vertex_5fsprite_3',['VERTEX_SPRITE',['../namespacetram_1_1_render.html#a55401591f1faf2a435bdb5eb188ad2c8a0da15a89b461de653834eec6475e2051',1,'tram::Render']]], ['vertex_5fstatic_4',['VERTEX_STATIC',['../namespacetram_1_1_render.html#a55401591f1faf2a435bdb5eb188ad2c8ac16ec92851118708abd2a9e6d844de77',1,'tram::Render']]] ]; ================================================ FILE: docs/cppapi/search/enumvalues_15.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enumvalues_15.js ================================================ var searchData= [ ['warning_0',['WARNING',['../namespacetram.html#a34ab368bc856f9bd71bfcb4f2bb86c56a059e9861e0400dfbe05c98a841f3f96b',1,'tram']]], ['widget_1',['WIDGET',['../namespacetram_1_1_g_u_i.html#aed177dc7d46e43f3cf52662fecbaf0a6a48da4725286ba176bffc3ddc5ab2aa24',1,'tram::GUI']]], ['widget_5fborder_2',['WIDGET_BORDER',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a288375715fc56e1428e163f7737c9755',1,'tram::GUI']]], ['widget_5fbottom_5fleft_3',['WIDGET_BOTTOM_LEFT',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1af28be408ba1f85c75d8e82321b1690c9',1,'tram::GUI']]], ['widget_5fbottom_5fmiddle_4',['WIDGET_BOTTOM_MIDDLE',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a0fb26b364c50c4db472ce498b3f3b2b8',1,'tram::GUI']]], ['widget_5fbottom_5fright_5',['WIDGET_BOTTOM_RIGHT',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a4e5a270739d7cd63b52e69ecaae854df',1,'tram::GUI']]], ['widget_5fbutton_6',['WIDGET_BUTTON',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a8fe5f8b635b453d316df64a80e6b0c58',1,'tram::GUI']]], ['widget_5fbutton_5f1_5fwindow_7',['WIDGET_BUTTON_1_WINDOW',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a05c885b34b9322641a6d73aea7773e1f',1,'tram::GUI']]], ['widget_5fbutton_5f2_5fwindow_8',['WIDGET_BUTTON_2_WINDOW',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a811458e951868c94ac60b14eede5c06a',1,'tram::GUI']]], ['widget_5fbutton_5fdisabled_9',['WIDGET_BUTTON_DISABLED',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a2d7380a25c2607e1f4918b15bc9a19b9',1,'tram::GUI']]], ['widget_5fbutton_5fdown_10',['WIDGET_BUTTON_DOWN',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a4d5ac84d958f2447cbe84f9aa6febb6e',1,'tram::GUI']]], ['widget_5fbutton_5fexit_11',['WIDGET_BUTTON_EXIT',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1ad8917083f0691ad8480e4663ca65f92f',1,'tram::GUI']]], ['widget_5fbutton_5fhelp_12',['WIDGET_BUTTON_HELP',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a16e6c73545efbda66f5ddf6db3e051b2',1,'tram::GUI']]], ['widget_5fbutton_5fleft_13',['WIDGET_BUTTON_LEFT',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a686d11c06b4cd2243f53f593038a44a3',1,'tram::GUI']]], ['widget_5fbutton_5fpressed_14',['WIDGET_BUTTON_PRESSED',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a3cb065ba1c044aea4d5324c505196005',1,'tram::GUI']]], ['widget_5fbutton_5fpressed_5fdisabled_15',['WIDGET_BUTTON_PRESSED_DISABLED',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1aa7084cb5cfbd4484e6d25d9e45184e52',1,'tram::GUI']]], ['widget_5fbutton_5fright_16',['WIDGET_BUTTON_RIGHT',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1ae1a968e27456a02ea20df7a01edd2925',1,'tram::GUI']]], ['widget_5fbutton_5fselected_5fdisabled_17',['WIDGET_BUTTON_SELECTED_DISABLED',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a6624ba8fc8bb24a188aa8aeaef64ad82',1,'tram::GUI']]], ['widget_5fbutton_5fselected_5fenabled_18',['WIDGET_BUTTON_SELECTED_ENABLED',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a6251b4c7c648ebc44de8cd4308496c29',1,'tram::GUI']]], ['widget_5fbutton_5fup_19',['WIDGET_BUTTON_UP',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a88dde871d55777c757c7ac3585cbc315',1,'tram::GUI']]], ['widget_5fcheck_5fbutton_20',['WIDGET_CHECK_BUTTON',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a1d1c09efe24b08eecaa3e8499e3c0b04',1,'tram::GUI']]], ['widget_5fdefault_21',['WIDGET_DEFAULT',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a81dc1f5bdaeac23554dd91d090c28664',1,'tram::GUI']]], ['widget_5fdivider_5fhorizontal_22',['WIDGET_DIVIDER_HORIZONTAL',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a06c7dd7b52ac02d304b96e2d8607df09',1,'tram::GUI']]], ['widget_5fdivider_5fvertical_23',['WIDGET_DIVIDER_VERTICAL',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a7b49ba0d1d26cfba2cdd5ce3de8a8fda',1,'tram::GUI']]], ['widget_5fleft_24',['WIDGET_LEFT',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a94196edf414a3b0a32bebd4a2d4098c9',1,'tram::GUI']]], ['widget_5fmiddle_25',['WIDGET_MIDDLE',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a2cf14d139df473a8ae69fc15f70b0c47',1,'tram::GUI']]], ['widget_5fmiddle_5fleft_26',['WIDGET_MIDDLE_LEFT',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a3781ffd15bc0497fe8bb6914f3f4c162',1,'tram::GUI']]], ['widget_5fmiddle_5fmiddle_27',['WIDGET_MIDDLE_MIDDLE',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a72ea4daaba6e760a76d6b40eee74ef44',1,'tram::GUI']]], ['widget_5fmiddle_5fright_28',['WIDGET_MIDDLE_RIGHT',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1adb168efcef55492cffb1228bcc6be6a9',1,'tram::GUI']]], ['widget_5fprogess_5fbar_29',['WIDGET_PROGESS_BAR',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1ad64339dee0b99f2734657fb71ccc2c37',1,'tram::GUI']]], ['widget_5fradio_5fbutton_30',['WIDGET_RADIO_BUTTON',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1af03845a03923971c0f0c25be45192525',1,'tram::GUI']]], ['widget_5freverse_5fwindow_31',['WIDGET_REVERSE_WINDOW',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a65b54ebe6aedd029c23657f1f8969d3b',1,'tram::GUI']]], ['widget_5fright_32',['WIDGET_RIGHT',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a0b7a3592ed83f984fdb65982278dd291',1,'tram::GUI']]], ['widget_5fscroll_5fbar_5fhorizontal_33',['WIDGET_SCROLL_BAR_HORIZONTAL',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a304530150480931bb8b5b5836ce49cdc',1,'tram::GUI']]], ['widget_5fscroll_5fbar_5ftrack_5fhorizontal_34',['WIDGET_SCROLL_BAR_TRACK_HORIZONTAL',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a1bb74bb58fdefa45afa6fe4c3fa242e7',1,'tram::GUI']]], ['widget_5fscroll_5fbar_5ftrack_5fvertical_35',['WIDGET_SCROLL_BAR_TRACK_VERTICAL',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a328a052e1848b362bd99119bfc4b5c9f',1,'tram::GUI']]], ['widget_5fscroll_5fbar_5fvertical_36',['WIDGET_SCROLL_BAR_VERTICAL',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1aa7b8ae824573bb1b44f2fc8d402a7e86',1,'tram::GUI']]], ['widget_5fselect_5fbox_37',['WIDGET_SELECT_BOX',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a3ae7d7c322fc27d607180c633cedc2ec',1,'tram::GUI']]], ['widget_5fselect_5fbox_5fpressed_38',['WIDGET_SELECT_BOX_PRESSED',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1aa75f29ad29f628c63d9e96408996bd6f',1,'tram::GUI']]], ['widget_5fselect_5fbox_5fselected_39',['WIDGET_SELECT_BOX_SELECTED',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1add809a3f52b68a13ba2005f4379d3a44',1,'tram::GUI']]], ['widget_5fslider_5fhorizontal_40',['WIDGET_SLIDER_HORIZONTAL',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a3cad8e90400248d0e65e69df03d08543',1,'tram::GUI']]], ['widget_5fslider_5ftrack_5fhorizontal_41',['WIDGET_SLIDER_TRACK_HORIZONTAL',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a2df6db20f587dc87edcd52cf8d6481de',1,'tram::GUI']]], ['widget_5fslider_5ftrack_5fvertical_42',['WIDGET_SLIDER_TRACK_VERTICAL',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a631f870e14a146ad565a98757457e00b',1,'tram::GUI']]], ['widget_5fslider_5fvertical_43',['WIDGET_SLIDER_VERTICAL',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a742bec56b7461b8fac393ba74e5fd334',1,'tram::GUI']]], ['widget_5ftab_44',['WIDGET_TAB',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a83d5658a1b1c8e3d7cc8258a98539e41',1,'tram::GUI']]], ['widget_5ftext_5fbox_45',['WIDGET_TEXT_BOX',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a1a58f10d4774879f67773be73099ac95',1,'tram::GUI']]], ['widget_5ftext_5fbox_5fdisabled_46',['WIDGET_TEXT_BOX_DISABLED',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a42eafb8ac9b1e31d0f7d7bb14c5af45f',1,'tram::GUI']]], ['widget_5ftop_5fleft_47',['WIDGET_TOP_LEFT',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a1b25994b6b491488d2bb3d21f93be505',1,'tram::GUI']]], ['widget_5ftop_5fmiddle_48',['WIDGET_TOP_MIDDLE',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1ac59c390211a381ff98cd66ff93106e2c',1,'tram::GUI']]], ['widget_5ftop_5fright_49',['WIDGET_TOP_RIGHT',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a39b6661549648d74a3760128c0323dc1',1,'tram::GUI']]], ['widget_5fwindow_50',['WIDGET_WINDOW',['../namespacetram_1_1_g_u_i.html#a6000fd29fa38db33926bfe7980344fe1a0d131a74010abdcb8ccf5fe1eb9d7f5c',1,'tram::GUI']]], ['write_51',['WRITE',['../classtram_1_1_file.html#ab340a7edca3c73f54d764cd17b362477a4e4881217ac0f0eed34368fb2d5fcece',1,'tram::File']]] ]; ================================================ FILE: docs/cppapi/search/enumvalues_16.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enumvalues_16.js ================================================ var searchData= [ ['yeet_0',['YEET',['../namespacetram_1_1_system.html#a4703b937891576671c79a6d02a63c0a2a6e9e1e44ddd4a383ea30f9f1d3fac00d',1,'tram::System']]] ]; ================================================ FILE: docs/cppapi/search/enumvalues_2.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enumvalues_2.js ================================================ var searchData= [ ['callback_0',['CALLBACK',['../namespacetram_1_1_async.html#a3852629b110e5e57e85140bb5fe518e5a1e2e20d91f42657d02e821985a4bd96c',1,'tram::Async']]], ['close_1',['CLOSE',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afda804fd125ffcb561b7664348dd4f481aa',1,'tram::Message::CLOSE()'],['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6a03cc5db0ca5e74167bf7cdee1feb3315',1,'tram::Signal::CLOSE()']]], ['coll_5fdynamicobj_2',['COLL_DYNAMICOBJ',['../namespacetram_1_1_physics.html#a5b8f6a7bd1ffb55b55a5f534008406f8ada93bb639c3353ec4e0e96311fd39ad4',1,'tram::Physics']]], ['coll_5fmonster_3',['COLL_MONSTER',['../namespacetram_1_1_physics.html#a5b8f6a7bd1ffb55b55a5f534008406f8ab4df3752bcc815d93a68e60b473f3473',1,'tram::Physics']]], ['coll_5fplayer_4',['COLL_PLAYER',['../namespacetram_1_1_physics.html#a5b8f6a7bd1ffb55b55a5f534008406f8a841ef1760b61cef0e7da530c47cafb65',1,'tram::Physics']]], ['coll_5fstaticobj_5',['COLL_STATICOBJ',['../namespacetram_1_1_physics.html#a5b8f6a7bd1ffb55b55a5f534008406f8a692e3914ee76adacd3617acf7c0b001f',1,'tram::Physics']]], ['coll_5ftrigger_6',['COLL_TRIGGER',['../namespacetram_1_1_physics.html#a5b8f6a7bd1ffb55b55a5f534008406f8a0a6bfe7e23b7e4bc04404c729057a658',1,'tram::Physics']]], ['coll_5fvehicle_7',['COLL_VEHICLE',['../namespacetram_1_1_physics.html#a5b8f6a7bd1ffb55b55a5f534008406f8a4fe6355fc11904c1e79a3b936e299287',1,'tram::Physics']]], ['coll_5fworldobj_8',['COLL_WORLDOBJ',['../namespacetram_1_1_physics.html#a5b8f6a7bd1ffb55b55a5f534008406f8a592c0e5ecae83ad6b89e1c408b1434ec',1,'tram::Physics']]], ['colormode_5fr_9',['COLORMODE_R',['../namespacetram_1_1_render.html#ac973dc59905532e29e79841ae76af894a85a444049030a1778193c39eed3a0519',1,'tram::Render']]], ['colormode_5frg_10',['COLORMODE_RG',['../namespacetram_1_1_render.html#ac973dc59905532e29e79841ae76af894a74b0578836d9a93c2731f68b14224cda',1,'tram::Render']]], ['colormode_5frgb_11',['COLORMODE_RGB',['../namespacetram_1_1_render.html#ac973dc59905532e29e79841ae76af894ae9f556d36de484416685e7e5d2bd3efc',1,'tram::Render']]], ['colormode_5frgba_12',['COLORMODE_RGBA',['../namespacetram_1_1_render.html#ac973dc59905532e29e79841ae76af894ae27c6265a9141741207b650f597a74ae',1,'tram::Render']]], ['component_13',['COMPONENT',['../namespacetram_1_1_async.html#a3852629b110e5e57e85140bb5fe518e5a3c24b0dd40835b178028420b095d347e',1,'tram::Async']]], ['context_5fdirect3d_14',['CONTEXT_DIRECT3D',['../namespacetram_1_1_render_1_1_a_p_i.html#a4aa628366e46526d2722302d9ce9d230a40b500f8960ee646ebd96e8d05dae86e',1,'tram::Render::API']]], ['context_5fnone_15',['CONTEXT_NONE',['../namespacetram_1_1_render_1_1_a_p_i.html#a4aa628366e46526d2722302d9ce9d230a3f5d25beb76d002f053806e9cfe529b2',1,'tram::Render::API']]], ['context_5fopengl_16',['CONTEXT_OPENGL',['../namespacetram_1_1_render_1_1_a_p_i.html#a4aa628366e46526d2722302d9ce9d230aac082f7410744614278abecf95d7ba9f',1,'tram::Render::API']]], ['context_5fsoftware_17',['CONTEXT_SOFTWARE',['../namespacetram_1_1_render_1_1_a_p_i.html#a4aa628366e46526d2722302d9ce9d230ab492cfde782a179b9019e8691e20d8ae',1,'tram::Render::API']]], ['context_5fwebgl_18',['CONTEXT_WEBGL',['../namespacetram_1_1_render_1_1_a_p_i.html#a4aa628366e46526d2722302d9ce9d230a1c61e90aa0c562e92bb6f53ee5f01160',1,'tram::Render::API']]], ['core_19',['CORE',['../namespacetram_1_1_system.html#a02b5e7a5340ef5ca42a650ca4d8ade65ada08d006736503d6ad767d03f59716a0',1,'tram::System']]], ['critical_5ferror_20',['CRITICAL_ERROR',['../namespacetram.html#a34ab368bc856f9bd71bfcb4f2bb86c56a195c3aaf9aee74d8d2e715f0bc8c33e5',1,'tram']]], ['cursor_5fclick_21',['CURSOR_CLICK',['../namespacetram_1_1_u_i.html#a6ae9e156e84d2049fc1e691a10e0348fa7d5caca61a671199d777b087902542c2',1,'tram::UI::CURSOR_CLICK()'],['../namespacetram_1_1_platform_1_1_window.html#a1ed03f0da21527169589f581e55c881fa92266bf16a3d2465b5b78fc4b7657dec',1,'tram::Platform::Window::CURSOR_CLICK()']]], ['cursor_5fdefault_22',['CURSOR_DEFAULT',['../namespacetram_1_1_u_i.html#a6ae9e156e84d2049fc1e691a10e0348fae0745982afd357e57249fd3d8ccc41e2',1,'tram::UI::CURSOR_DEFAULT()'],['../namespacetram_1_1_platform_1_1_window.html#a1ed03f0da21527169589f581e55c881fa4ef504a754ec99acfe83324f48f35131',1,'tram::Platform::Window::CURSOR_DEFAULT()']]], ['cursor_5ftext_23',['CURSOR_TEXT',['../namespacetram_1_1_u_i.html#a6ae9e156e84d2049fc1e691a10e0348fa038670b3ea8b7062e29f83da791209dd',1,'tram::UI::CURSOR_TEXT()'],['../namespacetram_1_1_platform_1_1_window.html#a1ed03f0da21527169589f581e55c881fad289a01bac20159f7b9ce592364b5f0c',1,'tram::Platform::Window::CURSOR_TEXT()']]], ['cursorpos_24',['CURSORPOS',['../structtram_1_1_event.html#a569d6673fa83d2a5ec86b3d0c36c8765a84ac6f8e04f99e15f7ca86f4e40ccffd',1,'tram::Event']]] ]; ================================================ FILE: docs/cppapi/search/enumvalues_3.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enumvalues_3.js ================================================ var searchData= [ ['debug_5fdraw_0',['DEBUG_DRAW',['../classtram_1_1_world_cell.html#a90b9ed6e3265fb6b3e569669117fd514a53db64208d71f275b14f759d1371d326',1,'tram::WorldCell']]], ['default_1',['DEFAULT',['../namespacetram.html#a34ab368bc856f9bd71bfcb4f2bb86c56a5b39c8b553c821e7cddc6da64b5bd2ee',1,'tram']]], ['deleted_2',['DELETED',['../classtram_1_1_entity.html#aaed86a9cc626eeab1796509f702ff378a755858b0f8f5109a99faab0024d3606d',1,'tram::Entity']]], ['dialog_5fimport_5fmultiple_3',['DIALOG_IMPORT_MULTIPLE',['../namespacetram_1_1_ext_1_1_kitchensink.html#a9ab8b667486c023b0e1defc92b807c54a1f9c9efebeaf5ae87702e8d7f0e857f1',1,'tram::Ext::Kitchensink']]], ['dialog_5fimport_5fsingle_4',['DIALOG_IMPORT_SINGLE',['../namespacetram_1_1_ext_1_1_kitchensink.html#a9ab8b667486c023b0e1defc92b807c54aa7241fe428070fbc73d0d87ee7d667bd',1,'tram::Ext::Kitchensink']]], ['dialog_5ftopic_5',['DIALOG_TOPIC',['../namespacetram_1_1_ext_1_1_kitchensink.html#a9ab8b667486c023b0e1defc92b807c54a40a60c2f1361e5bbf88a083d32560ed5',1,'tram::Ext::Kitchensink']]], ['dirty_6',['DIRTY',['../classtram_1_1_entity.html#aaed86a9cc626eeab1796509f702ff378af7284fe296d74a18b12dab1faee25e7e',1,'tram::Entity']]], ['disable_5fauto_5fload_7',['DISABLE_AUTO_LOAD',['../classtram_1_1_entity.html#aaed86a9cc626eeab1796509f702ff378a1f8b96cb9a0642c1ce332e10d9b01152',1,'tram::Entity']]], ['disk_8',['DISK',['../namespacetram.html#a529c8d3e049a7dcc4425fbe040e4c531a290d4b81f4e2b47d86fd1b0170e9aab7',1,'tram']]] ]; ================================================ FILE: docs/cppapi/search/enumvalues_4.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enumvalues_4.js ================================================ var searchData= [ ['effect_5fnegate_5fchange_0',['EFFECT_NEGATE_CHANGE',['../namespacetram_1_1_ext_1_1_kitchensink.html#a6c0031a7853f40659433180bd98fb62aa09ec84b29c3ed038c814ca806a69c13b',1,'tram::Ext::Kitchensink']]], ['effect_5fraise_5fbase_1',['EFFECT_RAISE_BASE',['../namespacetram_1_1_ext_1_1_kitchensink.html#a6c0031a7853f40659433180bd98fb62aa92bb5b3112a435f52d9cee38c24cff0f',1,'tram::Ext::Kitchensink']]], ['effect_5fraise_5fconstant_2',['EFFECT_RAISE_CONSTANT',['../namespacetram_1_1_ext_1_1_kitchensink.html#a6c0031a7853f40659433180bd98fb62aa423e4ab891e299f94c62e8e47d1d0b56',1,'tram::Ext::Kitchensink']]], ['end_5fclose_3',['END_CLOSE',['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6a220403760a74088dbd4275cec3bbd9d2',1,'tram::Signal']]], ['end_5fopen_4',['END_OPEN',['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6a36ae2c817312031d045362ee51b2933f',1,'tram::Signal']]], ['enter_5ftrigger_5',['ENTER_TRIGGER',['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6a8e4d860c423ec5e375a1f45c182f402c',1,'tram::Signal']]], ['error_6',['ERROR',['../namespacetram.html#a34ab368bc856f9bd71bfcb4f2bb86c56abb1ca97ec761fc37101737ba0aa2e7c5',1,'tram']]], ['exit_5ftrigger_7',['EXIT_TRIGGER',['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6a2eb75594d68f8fa95cd2101a5a3e9ee4',1,'tram::Signal']]] ]; ================================================ FILE: docs/cppapi/search/enumvalues_5.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enumvalues_5.js ================================================ var searchData= [ ['ffp_5fbone_5findex_0',['FFP_BONE_INDEX',['../structtram_1_1_render_1_1_vertex_attribute.html#a3e46db7ca21dfef52d3e8adb8ff21a81a74a3fdb7bfeb1bb08716624bce81d847',1,'tram::Render::VertexAttribute']]], ['ffp_5fbone_5fweight_1',['FFP_BONE_WEIGHT',['../structtram_1_1_render_1_1_vertex_attribute.html#a3e46db7ca21dfef52d3e8adb8ff21a81ab3a4f45918953e4a245da004e17e31b2',1,'tram::Render::VertexAttribute']]], ['ffp_5fcolor_2',['FFP_COLOR',['../structtram_1_1_render_1_1_vertex_attribute.html#a3e46db7ca21dfef52d3e8adb8ff21a81a144f2d22f3cbd87fd4b0af33730d06a0',1,'tram::Render::VertexAttribute']]], ['ffp_5fignore_3',['FFP_IGNORE',['../structtram_1_1_render_1_1_vertex_attribute.html#a3e46db7ca21dfef52d3e8adb8ff21a81a79a2ffd5522f4648ed66407aaa5caf23',1,'tram::Render::VertexAttribute']]], ['ffp_5flightmap_4',['FFP_LIGHTMAP',['../structtram_1_1_render_1_1_vertex_attribute.html#a3e46db7ca21dfef52d3e8adb8ff21a81aa5215ee0c7371d8c67a0abcf1b8f8507',1,'tram::Render::VertexAttribute']]], ['ffp_5fnormal_5',['FFP_NORMAL',['../structtram_1_1_render_1_1_vertex_attribute.html#a3e46db7ca21dfef52d3e8adb8ff21a81ac9314abdec089aafc611ab43ffba5f01',1,'tram::Render::VertexAttribute']]], ['ffp_5fposition_6',['FFP_POSITION',['../structtram_1_1_render_1_1_vertex_attribute.html#a3e46db7ca21dfef52d3e8adb8ff21a81a163ad63558542d36ba9827c777dd2f08',1,'tram::Render::VertexAttribute']]], ['ffp_5ftexture_7',['FFP_TEXTURE',['../structtram_1_1_render_1_1_vertex_attribute.html#a3e46db7ca21dfef52d3e8adb8ff21a81ac1ba003af48f60bd2cc918f7c6987b86',1,'tram::Render::VertexAttribute']]], ['field_5fanimation_8',['FIELD_ANIMATION',['../namespacetram.html#a21be90fb412cdf8c5703ab2155b270a4a294cfaf164e1fc2aa7233f26a29041d3',1,'tram']]], ['field_5fcollision_5fmask_9',['FIELD_COLLISION_MASK',['../namespacetram.html#af7146bfc7fadecfa5f4443e416a5a356a9613ced1d60f3a1213ebb4ee3c5fef82',1,'tram']]], ['field_5fcollmodel_10',['FIELD_COLLMODEL',['../namespacetram.html#abebf242bd359cf070de0a7074f31d7c2a7d3bbda6c810b29444fe1f7ba9d2a33f',1,'tram']]], ['field_5fcolor_11',['FIELD_COLOR',['../namespacetram.html#a480f7c687b7792584a6b60552bf1ce4ca40844fb482bc115a59cb3946075b8bf8',1,'tram']]], ['field_5fdirection_12',['FIELD_DIRECTION',['../namespacetram.html#a480f7c687b7792584a6b60552bf1ce4cad5f489826b6b9f360cd8f9f72a657708',1,'tram']]], ['field_5fdistance_13',['FIELD_DISTANCE',['../namespacetram.html#a480f7c687b7792584a6b60552bf1ce4ca5a7593cfaa5e8d4b977d96749103b34f',1,'tram']]], ['field_5fexponent_14',['FIELD_EXPONENT',['../namespacetram.html#a480f7c687b7792584a6b60552bf1ce4caec62432636aab03a5e13f90c724f3f2a',1,'tram']]], ['field_5fflags_15',['FIELD_FLAGS',['../namespacetram.html#af7146bfc7fadecfa5f4443e416a5a356a209938ad94122f6e58232d271d762615',1,'tram']]], ['field_5flightmap_16',['FIELD_LIGHTMAP',['../namespacetram.html#a717981bca7f8ce2fc1d263cec32f2e71ad872d96f0629a60291cde0384b221c2b',1,'tram']]], ['field_5fmodel_17',['FIELD_MODEL',['../namespacetram.html#af7146bfc7fadecfa5f4443e416a5a356a13cd63275162d147854397503537f0be',1,'tram']]], ['field_5fserialize_18',['FIELD_SERIALIZE',['../classtram_1_1_entity.html#a9c07ba341c9b5a9d969a5ba58ccb7d8fa2de12a0ad5fcc748aaa165d9c5cab16b',1,'tram::Entity']]], ['field_5fsound_19',['FIELD_SOUND',['../namespacetram.html#a32f771ce4ec7817ac72d4835f558c424a3567cbf4114feaeae8973646109c78c6',1,'tram']]], ['field_5fvolume_20',['FIELD_VOLUME',['../namespacetram.html#a32f771ce4ec7817ac72d4835f558c424a5a098c343d8b04be1628923d86b259a2',1,'tram']]], ['filter_5flinear_21',['FILTER_LINEAR',['../namespacetram_1_1_render.html#aab519c3dc6ead26c1a7695e4c3b5501ca6de99baf59757370ce7015f1acdabfc7',1,'tram::Render']]], ['filter_5fnearest_22',['FILTER_NEAREST',['../namespacetram_1_1_render.html#aab519c3dc6ead26c1a7695e4c3b5501ca3f92e1775eab20a3d572e3256446199c',1,'tram::Render']]], ['flag_5fdeleted_23',['FLAG_DELETED',['../classtram_1_1_hashmap.html#a5dba31c8c90742090caf46529e6771c7ab892ee7040996433c21bafc1cbe06b83',1,'tram::Hashmap']]], ['flag_5fdisable_5flighting_24',['FLAG_DISABLE_LIGHTING',['../namespacetram_1_1_render.html#ac048699f6dc8dc5b8681c8aa3ac65d9ca98b0957a0ef2b44bc45bad5f3eca0223',1,'tram::Render']]], ['flag_5fdraw_5findexed_25',['FLAG_DRAW_INDEXED',['../namespacetram_1_1_render.html#ac048699f6dc8dc5b8681c8aa3ac65d9ca21d08069337093c63805e471da1044ab',1,'tram::Render']]], ['flag_5fdraw_5flines_26',['FLAG_DRAW_LINES',['../namespacetram_1_1_render.html#ac048699f6dc8dc5b8681c8aa3ac65d9caf506d03848aef5c27c97cd4798ef2d0a',1,'tram::Render']]], ['flag_5flocked_27',['FLAG_LOCKED',['../namespacetram.html#ace0f2946cbdd6fa99edd7597d589c36aab86ea350289e16e0769a2c5ded29841c',1,'tram']]], ['flag_5fno_5fdebug_28',['FLAG_NO_DEBUG',['../namespacetram_1_1_render.html#ac048699f6dc8dc5b8681c8aa3ac65d9ca2edd1aba3d257f1a0649ac703f1487e9',1,'tram::Render']]], ['flag_5fno_5fdepth_5ftest_29',['FLAG_NO_DEPTH_TEST',['../namespacetram_1_1_render.html#ac048699f6dc8dc5b8681c8aa3ac65d9cae7db99a59b57cfb480a99322e5ee3282',1,'tram::Render']]], ['flag_5fno_5fdirectional_30',['FLAG_NO_DIRECTIONAL',['../namespacetram_1_1_render.html#ac048699f6dc8dc5b8681c8aa3ac65d9caf3fc1cfd17228e4739e682643d403aaf',1,'tram::Render']]], ['flag_5fno_5frender_31',['FLAG_NO_RENDER',['../namespacetram_1_1_render.html#ac048699f6dc8dc5b8681c8aa3ac65d9ca08d94ef5eb8ba141c253f1d338873bd4',1,'tram::Render']]], ['flag_5frecord_32',['FLAG_RECORD',['../classtram_1_1_hashmap.html#a5dba31c8c90742090caf46529e6771c7accc46643e3f50f499ab2ffac37d02f74',1,'tram::Hashmap']]], ['flag_5frender_33',['FLAG_RENDER',['../namespacetram_1_1_render.html#ac048699f6dc8dc5b8681c8aa3ac65d9ca9a2628bf2260f59af082c0527ec370a4',1,'tram::Render']]], ['flag_5freverse_5fsort_34',['FLAG_REVERSE_SORT',['../namespacetram_1_1_render.html#ac048699f6dc8dc5b8681c8aa3ac65d9ca67cbaea35d33f46ff65e43e7180d1bb9',1,'tram::Render']]], ['flag_5ftransparent_35',['FLAG_TRANSPARENT',['../namespacetram_1_1_render.html#ac048699f6dc8dc5b8681c8aa3ac65d9caed3ea54d0ca27e6f6ccf6bbf97de2d8a',1,'tram::Render']]], ['flag_5fuse_5faabb_36',['FLAG_USE_AABB',['../namespacetram_1_1_render.html#ac048699f6dc8dc5b8681c8aa3ac65d9ca6d518bb47788015018288f63f111d364',1,'tram::Render']]], ['float32_37',['FLOAT32',['../structtram_1_1_render_1_1_vertex_attribute.html#a5478d84843dda2d90f4628b2e2c39868aee86317317f7f033b64772b793f25495',1,'tram::Render::VertexAttribute']]], ['frame_38',['FRAME',['../structtram_1_1_event.html#a569d6673fa83d2a5ec86b3d0c36c8765a8feafca698ba40be02d682358b638efa',1,'tram::Event']]], ['frame_5fbottom_39',['FRAME_BOTTOM',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefa7748663007d8947e6bf4bce366df534c',1,'tram::GUI']]], ['frame_5fbottom_5finv_40',['FRAME_BOTTOM_INV',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefacfb3ce3ac246f9bc9609bfb340ae7dfd',1,'tram::GUI']]], ['frame_5fcenter_5fhorizontal_41',['FRAME_CENTER_HORIZONTAL',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefa95bd1777b43114754f8c3dba6b2918e6',1,'tram::GUI']]], ['frame_5fcenter_5fvertical_42',['FRAME_CENTER_VERTICAL',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefa2ea467ec8de3c873daca99f6e28bd484',1,'tram::GUI']]], ['frame_5finset_43',['FRAME_INSET',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefa98142b3610036479f66047dcf5277a71',1,'tram::GUI']]], ['frame_5fleft_44',['FRAME_LEFT',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefafce4689473a6a893962e0605f8ba84e7',1,'tram::GUI']]], ['frame_5fleft_5finv_45',['FRAME_LEFT_INV',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefaf3de8d80436e3cd82525f79e84ff1057',1,'tram::GUI']]], ['frame_5fright_46',['FRAME_RIGHT',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefa12ad966aac117df6a4f0090230801f25',1,'tram::GUI']]], ['frame_5fright_5finv_47',['FRAME_RIGHT_INV',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefa79e0b80984df5db58ef3e444503984a7',1,'tram::GUI']]], ['frame_5ftop_48',['FRAME_TOP',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefa5f7d391746d81b33b1a09ac367bbd9d6',1,'tram::GUI']]], ['frame_5ftop_5finv_49',['FRAME_TOP_INV',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefa9a17d7ae2dca7f74667d4ca2d132ee73',1,'tram::GUI']]] ]; ================================================ FILE: docs/cppapi/search/enumvalues_6.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enumvalues_6.js ================================================ var searchData= [ ['gui_0',['GUI',['../namespacetram_1_1_system.html#a02b5e7a5340ef5ca42a650ca4d8ade65a26ca0a3dcc38523be3b96f153dac237a',1,'tram::System']]] ]; ================================================ FILE: docs/cppapi/search/enumvalues_7.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enumvalues_7.js ================================================ var searchData= [ ['http_0',['HTTP',['../namespacetram.html#a529c8d3e049a7dcc4425fbe040e4c531a293c9ea246ff9985dc6f62a650f78986',1,'tram']]] ]; ================================================ FILE: docs/cppapi/search/enumvalues_8.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enumvalues_8.js ================================================ var searchData= [ ['info_0',['INFO',['../namespacetram.html#a34ab368bc856f9bd71bfcb4f2bb86c56a551b723eafd6a31d444fcb2f5920fbd3',1,'tram']]], ['init_1',['INIT',['../namespacetram_1_1_system.html#a4703b937891576671c79a6d02a63c0a2a8549b677c065a257a9f4d0c56a38cf38',1,'tram::System']]], ['int32_2',['INT32',['../structtram_1_1_render_1_1_vertex_attribute.html#a5478d84843dda2d90f4628b2e2c39868ad6e1ed11fa35b400322354060286eb3a',1,'tram::Render::VertexAttribute']]], ['interior_3',['INTERIOR',['../classtram_1_1_world_cell.html#a90b9ed6e3265fb6b3e569669117fd514a6ddd0d1668e3847063a1ef166854a507',1,'tram::WorldCell']]], ['interior_5flighting_4',['INTERIOR_LIGHTING',['../classtram_1_1_world_cell.html#a90b9ed6e3265fb6b3e569669117fd514abc50d99cd3e56932a7a61ba6471f5101',1,'tram::WorldCell']]], ['invalid_5',['INVALID',['../namespacetram_1_1_system.html#a02b5e7a5340ef5ca42a650ca4d8ade65ac3f542a5593bbe1407d0beb44980d861',1,'tram::System']]], ['io_5ferror_6',['IO_ERROR',['../namespacetram.html#a972c59287ba467dbfe003f137609550da198489bd72edc2407c15917c5323cd93',1,'tram']]] ]; ================================================ FILE: docs/cppapi/search/enumvalues_9.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enumvalues_9.js ================================================ var searchData= [ ['key_5f0_0',['KEY_0',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a65437d90c5caa67d4724f54553508e9e',1,'tram::UI']]], ['key_5f1_1',['KEY_1',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ae3a336ff48b187617d8637dd2718e7ae',1,'tram::UI']]], ['key_5f2_2',['KEY_2',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9aa953f283270f27bd5fe8222f587ead41',1,'tram::UI']]], ['key_5f3_3',['KEY_3',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9aceda48a96fdeb639c66c87d1fa235b37',1,'tram::UI']]], ['key_5f4_4',['KEY_4',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9aab815d03fe3a3bceae097559b6621736',1,'tram::UI']]], ['key_5f5_5',['KEY_5',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a09d550ac685c22bb4d5300f1b561d584',1,'tram::UI']]], ['key_5f6_6',['KEY_6',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a0fd671dc791741b42da6eabebe4ca390',1,'tram::UI']]], ['key_5f7_7',['KEY_7',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a84a9c489b8f14cca0868c37d657ab1da',1,'tram::UI']]], ['key_5f8_8',['KEY_8',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9aa9b00c9fc9bbf4eb7f217174c80ca004',1,'tram::UI']]], ['key_5f9_9',['KEY_9',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a562a379580554859b14364ea2bdcc71e',1,'tram::UI']]], ['key_5fa_10',['KEY_A',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a69b752301befc5f3a4d907be6f7629b9',1,'tram::UI']]], ['key_5faction_5factivate_11',['KEY_ACTION_ACTIVATE',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99a076e3f62c43d41515fc4f49ff52caabd',1,'tram::UI']]], ['key_5faction_5fbackward_12',['KEY_ACTION_BACKWARD',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99a9086284540999b0ce7ebe45247de8c39',1,'tram::UI']]], ['key_5faction_5fcrouch_13',['KEY_ACTION_CROUCH',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99ac1d329520148264671aecb8bfdd340f2',1,'tram::UI']]], ['key_5faction_5fdown_14',['KEY_ACTION_DOWN',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99a90778630020380ab86ef277e27a92603',1,'tram::UI']]], ['key_5faction_5ffly_15',['KEY_ACTION_FLY',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99a59cf019c9e17effcf31b30c805ff5fd7',1,'tram::UI']]], ['key_5faction_5fforward_16',['KEY_ACTION_FORWARD',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99a2ab360c8d227a318e206cd60302220e0',1,'tram::UI']]], ['key_5faction_5fjump_17',['KEY_ACTION_JUMP',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99ad9cd378006df175750430fe1a2de542e',1,'tram::UI']]], ['key_5faction_5flast_18',['KEY_ACTION_LAST',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99addfb9f474cccad06817f61d7d9881cf9',1,'tram::UI']]], ['key_5faction_5fleft_19',['KEY_ACTION_LEFT',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99af7f10fa172ce512ff124f22f7eaf76eb',1,'tram::UI']]], ['key_5faction_5fnone_20',['KEY_ACTION_NONE',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99a260f4ae152cb86c6657c321a97d42f40',1,'tram::UI']]], ['key_5faction_5fprimary_21',['KEY_ACTION_PRIMARY',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99a4243be2902836000e58876f71bcd6d90',1,'tram::UI']]], ['key_5faction_5fright_22',['KEY_ACTION_RIGHT',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99a05969ba3d0841548ca5c74e520acceea',1,'tram::UI']]], ['key_5faction_5fsecondary_23',['KEY_ACTION_SECONDARY',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99a26612bdb65d175cc56131b1ab416954c',1,'tram::UI']]], ['key_5faction_5fsprint_24',['KEY_ACTION_SPRINT',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99aa5239b56b4a53ca00c16ba6ba82faf7e',1,'tram::UI']]], ['key_5faction_5fstrafe_5fleft_25',['KEY_ACTION_STRAFE_LEFT',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99a466d107fc666cf939873650da55b36d9',1,'tram::UI']]], ['key_5faction_5fstrafe_5fright_26',['KEY_ACTION_STRAFE_RIGHT',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99a3153636a951f4fe7961e1531b10bd1b9',1,'tram::UI']]], ['key_5faction_5fup_27',['KEY_ACTION_UP',['../namespacetram_1_1_u_i.html#a642ac99af3c1ebae068607e82baa5f99a1df68d53996f14b271458109f5c74859',1,'tram::UI']]], ['key_5fapostrophe_28',['KEY_APOSTROPHE',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a7c8104f6c5d08d99e2b8a126f883bddf',1,'tram::UI']]], ['key_5fb_29',['KEY_B',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9aaee26a121b3a7ecc334e0767f00a70d7',1,'tram::UI']]], ['key_5fbackslash_30',['KEY_BACKSLASH',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9acf6224b6422ea249b4a3b235aba12b30',1,'tram::UI']]], ['key_5fbackspace_31',['KEY_BACKSPACE',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a08b565df6cf04d6dd3340510fdeeda5c',1,'tram::UI']]], ['key_5fc_32',['KEY_C',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ad00c2f86ceadf9093d621f0020cc8111',1,'tram::UI']]], ['key_5fcaps_5flock_33',['KEY_CAPS_LOCK',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9adae0bf1fb06302b73ddb8ceba5df75d3',1,'tram::UI']]], ['key_5fcomma_34',['KEY_COMMA',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a76bf98cee4a061d34598d858be264cd3',1,'tram::UI']]], ['key_5fd_35',['KEY_D',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9acd1ed18883f019a4fbf609580215e283',1,'tram::UI']]], ['key_5fdelete_36',['KEY_DELETE',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a1589d6ef189b4ac3fa79a86f5c54154f',1,'tram::UI']]], ['key_5fdown_37',['KEY_DOWN',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a50ada7aae92f4fcb249e20f3227ca1b7',1,'tram::UI']]], ['key_5fe_38',['KEY_E',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a4a02c40bbf639ad789c13c578f989dea',1,'tram::UI']]], ['key_5fend_39',['KEY_END',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a4d2455d4d22bcf88b705d9bf758dcc95',1,'tram::UI']]], ['key_5fenter_40',['KEY_ENTER',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a76401413bb93ff3e71adddc5d6b4ea3d',1,'tram::UI']]], ['key_5fequal_41',['KEY_EQUAL',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ae3ab9bd431f46c16051fa07c0bc90bcd',1,'tram::UI']]], ['key_5fescape_42',['KEY_ESCAPE',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9abd3eb119fd58b73594acea4545d8eb49',1,'tram::UI']]], ['key_5ff_43',['KEY_F',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9aca57442c7bcab260391fb5f29ee3c6c3',1,'tram::UI']]], ['key_5ff1_44',['KEY_F1',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9adab858cfb830bf92e4aeda721befd126',1,'tram::UI']]], ['key_5ff10_45',['KEY_F10',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9afeea4fcee657263b7309bb3df45cba78',1,'tram::UI']]], ['key_5ff11_46',['KEY_F11',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a883bff2a025e52694148f0c2e426cf03',1,'tram::UI']]], ['key_5ff12_47',['KEY_F12',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a9ecaf975717fee1e6ef34eaeb89790bd',1,'tram::UI']]], ['key_5ff13_48',['KEY_F13',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a2450cca859342b1b0232eb713bd62783',1,'tram::UI']]], ['key_5ff14_49',['KEY_F14',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a04a43fccb3b5f46fd89d69eb768b00b6',1,'tram::UI']]], ['key_5ff15_50',['KEY_F15',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ae69389e08b08925a36b9cdd07aee0f36',1,'tram::UI']]], ['key_5ff16_51',['KEY_F16',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9abb510afb8b9257bfc55dc903a8962819',1,'tram::UI']]], ['key_5ff17_52',['KEY_F17',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a8839d85d99e2a494b68890ed9da64daa',1,'tram::UI']]], ['key_5ff18_53',['KEY_F18',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a52c0f592224c6fc6e05d3d6423a96cfb',1,'tram::UI']]], ['key_5ff19_54',['KEY_F19',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a209ff909ac90cf0283d967f79cc2f910',1,'tram::UI']]], ['key_5ff2_55',['KEY_F2',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a61169512aa6359e9a471477823f463fc',1,'tram::UI']]], ['key_5ff20_56',['KEY_F20',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a99563910c4089bb0757836e3e4b8ad03',1,'tram::UI']]], ['key_5ff21_57',['KEY_F21',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ac205aca8c92ea3e8bcfcb455cde81410',1,'tram::UI']]], ['key_5ff22_58',['KEY_F22',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a8c33c781cca98efefda19291cbe7fbd7',1,'tram::UI']]], ['key_5ff23_59',['KEY_F23',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a99bddd837fe2be48872a0ca77265a02c',1,'tram::UI']]], ['key_5ff24_60',['KEY_F24',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9aabc4c90cb2b3e6b0489e9a0d244daffd',1,'tram::UI']]], ['key_5ff25_61',['KEY_F25',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9abd5cfd042feed366f2014670fb7575c0',1,'tram::UI']]], ['key_5ff3_62',['KEY_F3',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ac3318863e23da41cdb1211b4998c4f5b',1,'tram::UI']]], ['key_5ff4_63',['KEY_F4',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a372fbac101c73e052a6d80c79db7541d',1,'tram::UI']]], ['key_5ff5_64',['KEY_F5',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a5839ff3c35479538c66a126a95a1ea7a',1,'tram::UI']]], ['key_5ff6_65',['KEY_F6',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a79f3423e223d68ae943c5254a429f523',1,'tram::UI']]], ['key_5ff7_66',['KEY_F7',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ae144b84145992ccde121f27d42c7cfc4',1,'tram::UI']]], ['key_5ff8_67',['KEY_F8',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a100b49a46873faed9c936065fa8ec083',1,'tram::UI']]], ['key_5ff9_68',['KEY_F9',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a2d056aa6db1428d01d3b23b397ed40c2',1,'tram::UI']]], ['key_5fg_69',['KEY_G',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a69969530a5d1d24554b12a6ac17aad20',1,'tram::UI']]], ['key_5fgrave_5faccent_70',['KEY_GRAVE_ACCENT',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ac16d2495f2e0ad5db18868ffecd016ed',1,'tram::UI']]], ['key_5fh_71',['KEY_H',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ae8ccc2a44e4bbe61742a3e1aa1d5f808',1,'tram::UI']]], ['key_5fhome_72',['KEY_HOME',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a49be5538de01fda8d9f1c01a38559ddc',1,'tram::UI']]], ['key_5fi_73',['KEY_I',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a2443c38294500dcbd81b37a6da743787',1,'tram::UI']]], ['key_5finsert_74',['KEY_INSERT',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9aa072fdfab871f337f8fc0da6acae7508',1,'tram::UI']]], ['key_5fj_75',['KEY_J',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ab914308d1d5c183beee4b1e5de50bd66',1,'tram::UI']]], ['key_5fk_76',['KEY_K',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a3243162f0d4f7b54b99186f52716b0ab',1,'tram::UI']]], ['key_5fkp_5f0_77',['KEY_KP_0',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a11320158e4c6b1ee2eaa85de773478be',1,'tram::UI']]], ['key_5fkp_5f1_78',['KEY_KP_1',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a3c49139f417b568a3db68492f84de02d',1,'tram::UI']]], ['key_5fkp_5f2_79',['KEY_KP_2',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a40b9ce26532098fabe2d4024735ffded',1,'tram::UI']]], ['key_5fkp_5f3_80',['KEY_KP_3',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a2b1e11784d8c56555f3bb53270aea92c',1,'tram::UI']]], ['key_5fkp_5f4_81',['KEY_KP_4',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a18661a0216c2a833e439d7f58dd08172',1,'tram::UI']]], ['key_5fkp_5f5_82',['KEY_KP_5',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a21c8bed6edc424845ca57b0cd546b498',1,'tram::UI']]], ['key_5fkp_5f6_83',['KEY_KP_6',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a0ec59343c2a98d537ff7805715136bf5',1,'tram::UI']]], ['key_5fkp_5f7_84',['KEY_KP_7',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ad8c6f95a09ee0612aaf90926fa8efc1a',1,'tram::UI']]], ['key_5fkp_5f8_85',['KEY_KP_8',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a827aa5629b54051ef62be5b653d42901',1,'tram::UI']]], ['key_5fkp_5f9_86',['KEY_KP_9',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ae2d4522e9402af36973ee244c1ea8959',1,'tram::UI']]], ['key_5fkp_5fadd_87',['KEY_KP_ADD',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a88c3bed03d9746ee5d29791785c2f70b',1,'tram::UI']]], ['key_5fkp_5fdecimal_88',['KEY_KP_DECIMAL',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a459511af96035124f096b16dafeb5862',1,'tram::UI']]], ['key_5fkp_5fdivide_89',['KEY_KP_DIVIDE',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a879c1fe86636b4cd2f421dd769972f49',1,'tram::UI']]], ['key_5fkp_5fenter_90',['KEY_KP_ENTER',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a4d49655cb7a568a34431639694d3d665',1,'tram::UI']]], ['key_5fkp_5fequal_91',['KEY_KP_EQUAL',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9aadcd3b27239865a98778acc1671fbbad',1,'tram::UI']]], ['key_5fkp_5fmultiply_92',['KEY_KP_MULTIPLY',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a177ac49be216ce7a254abc7fbfd7d4e5',1,'tram::UI']]], ['key_5fkp_5fsubtract_93',['KEY_KP_SUBTRACT',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a5587286e8256cdd129cd715e129f41fd',1,'tram::UI']]], ['key_5fl_94',['KEY_L',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a4f3eab8d07ff29a6fcd7ddb560469bbc',1,'tram::UI']]], ['key_5flastaxis_95',['KEY_LASTAXIS',['../namespacetram_1_1_u_i.html#aace717edeba1f507cd383c7d1f00e064ab7fba8f6f26d9907c971775a44ceeed2',1,'tram::UI']]], ['key_5flastkey_96',['KEY_LASTKEY',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9af34f41b344dc079076521012c729a450',1,'tram::UI']]], ['key_5fleft_97',['KEY_LEFT',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a1d420499e5a93232a3f3fcf83729add6',1,'tram::UI']]], ['key_5fleft_5falt_98',['KEY_LEFT_ALT',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a241aec56571dc4ecf29a15c780253f34',1,'tram::UI']]], ['key_5fleft_5fbracket_99',['KEY_LEFT_BRACKET',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ad12c03040aff876f71d0536260626849',1,'tram::UI']]], ['key_5fleft_5fcontrol_100',['KEY_LEFT_CONTROL',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a121d6705933ca4b329538569b386ef35',1,'tram::UI']]], ['key_5fleft_5fshift_101',['KEY_LEFT_SHIFT',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a6975cca52ea36c81c0d056f00506205c',1,'tram::UI']]], ['key_5fleft_5fsuper_102',['KEY_LEFT_SUPER',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a004d71e440f811db5a803f58a96b0ef7',1,'tram::UI']]], ['key_5fleftmouse_103',['KEY_LEFTMOUSE',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9aa816822358691cbc4a3357d21699d40e',1,'tram::UI']]], ['key_5fm_104',['KEY_M',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a504213d8c07892e5474b10a27eba806d',1,'tram::UI']]], ['key_5fmenu_105',['KEY_MENU',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ac053172e8885ba9a6cc0dcce61be6825',1,'tram::UI']]], ['key_5fmiddlemouse_106',['KEY_MIDDLEMOUSE',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9af837c69d666b76476c0df2d1b787f9de',1,'tram::UI']]], ['key_5fminus_107',['KEY_MINUS',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a78cf64e98df9ca5559f27d97c3e9d6b3',1,'tram::UI']]], ['key_5fmouse_5fscroll_108',['KEY_MOUSE_SCROLL',['../namespacetram_1_1_u_i.html#aace717edeba1f507cd383c7d1f00e064a75cfdc48455414e815068fdb2f27ff0a',1,'tram::UI']]], ['key_5fmouse_5fx_109',['KEY_MOUSE_X',['../namespacetram_1_1_u_i.html#aace717edeba1f507cd383c7d1f00e064a1b5aaf04a80eebb831a4cb781aa5d077',1,'tram::UI']]], ['key_5fmouse_5fy_110',['KEY_MOUSE_Y',['../namespacetram_1_1_u_i.html#aace717edeba1f507cd383c7d1f00e064a9acff80ae609b9842ec96d2ec7cfa401',1,'tram::UI']]], ['key_5fn_111',['KEY_N',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a94b3a8e7447c1a4dc8f9c1df8f100c25',1,'tram::UI']]], ['key_5fnum_5flock_112',['KEY_NUM_LOCK',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a896d3cc0f76a3ebc14dc960265e73462',1,'tram::UI']]], ['key_5fo_113',['KEY_O',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a647dc8d7292b79a396b74fb76b654e01',1,'tram::UI']]], ['key_5fp_114',['KEY_P',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a1364c846ab1fb1bd231e0a33ab840695',1,'tram::UI']]], ['key_5fpage_5fdown_115',['KEY_PAGE_DOWN',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a2a746cdb3b9ec58cd66095bb4a3aceac',1,'tram::UI']]], ['key_5fpage_5fup_116',['KEY_PAGE_UP',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a9cb458069447eafb5d86658176b8032e',1,'tram::UI']]], ['key_5fpause_117',['KEY_PAUSE',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9aef93744dfaee588745f651c77f24cf50',1,'tram::UI']]], ['key_5fperiod_118',['KEY_PERIOD',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ac5295758df806be9a4f5eb9057c253c0',1,'tram::UI']]], ['key_5fprint_5fscreen_119',['KEY_PRINT_SCREEN',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a6941d464b7ba2e0185eba26cd1a60e12',1,'tram::UI']]], ['key_5fq_120',['KEY_Q',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a220bd95fc6428bff9fb31368839b5ae6',1,'tram::UI']]], ['key_5fr_121',['KEY_R',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ad1642afcc58232b9e6f12f6f3cc208fc',1,'tram::UI']]], ['key_5fright_122',['KEY_RIGHT',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9aa205961286cd337ec06902909fb154e6',1,'tram::UI']]], ['key_5fright_5falt_123',['KEY_RIGHT_ALT',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9afaf27e7af0aee992b05d18764258ff16',1,'tram::UI']]], ['key_5fright_5fbracket_124',['KEY_RIGHT_BRACKET',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ae1d3cc6b1216baf0546b60321178cccc',1,'tram::UI']]], ['key_5fright_5fcontrol_125',['KEY_RIGHT_CONTROL',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ae55ea7c6af938ac5867bf7d2e17b4321',1,'tram::UI']]], ['key_5fright_5fshift_126',['KEY_RIGHT_SHIFT',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a71212b3b964bc010cbe1e28c0ebe98a6',1,'tram::UI']]], ['key_5fright_5fsuper_127',['KEY_RIGHT_SUPER',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a10d0bf239c52e0e5f6579b672d179a96',1,'tram::UI']]], ['key_5frightmouse_128',['KEY_RIGHTMOUSE',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a6101d82366a7de86f4dc96e14a965479',1,'tram::UI']]], ['key_5fs_129',['KEY_S',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a7604f42d8b8bcf46bc692a7abb6417a4',1,'tram::UI']]], ['key_5fscroll_5flock_130',['KEY_SCROLL_LOCK',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ab6ce6bc7d35678baf784ad6408dc5163',1,'tram::UI']]], ['key_5fsemicolon_131',['KEY_SEMICOLON',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a7f249c51c85b70d88b3111981395fc12',1,'tram::UI']]], ['key_5fslash_132',['KEY_SLASH',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a90604854aaf219402dcd8dcef0e0e90d',1,'tram::UI']]], ['key_5fspace_133',['KEY_SPACE',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a079997c8c91cd20d3ebadc87cf6d1f91',1,'tram::UI']]], ['key_5ft_134',['KEY_T',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ad4c7822edd979f8bdedd5e6163f56aa6',1,'tram::UI']]], ['key_5ftab_135',['KEY_TAB',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a9137d1e85435e1ffdd1ae5dfb60642ce',1,'tram::UI']]], ['key_5fu_136',['KEY_U',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ad534a3e46746e91991157a05eb7d3cb8',1,'tram::UI']]], ['key_5fup_137',['KEY_UP',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9abe5aae21c145c2c6f5d0997b4bb72513',1,'tram::UI']]], ['key_5fv_138',['KEY_V',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a39bc230491a0f214530797586b693d72',1,'tram::UI']]], ['key_5fw_139',['KEY_W',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9af03983e7a15a27c5ea4b5eeea851132a',1,'tram::UI']]], ['key_5fworld_5f1_140',['KEY_WORLD_1',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a89dc956618bf640b45ee4a294ebdf306',1,'tram::UI']]], ['key_5fworld_5f2_141',['KEY_WORLD_2',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a1663093048d8896ab8430aed03ffa4e8',1,'tram::UI']]], ['key_5fx_142',['KEY_X',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a9a2534085f6831bba64642f48e16541c',1,'tram::UI']]], ['key_5fy_143',['KEY_Y',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9ac98369b8a3b7464424f590a189d7f16b',1,'tram::UI']]], ['key_5fz_144',['KEY_Z',['../namespacetram_1_1_u_i.html#acf6b27efa4c062d8c7110a6fb9f9fde9a57e21efd8cdb16815ddb8b3d522fd8e2',1,'tram::UI']]], ['keychar_145',['KEYCHAR',['../structtram_1_1_event.html#a569d6673fa83d2a5ec86b3d0c36c8765a666e52b2727737f31e9817000fed8201',1,'tram::Event']]], ['keydown_146',['KEYDOWN',['../structtram_1_1_event.html#a569d6673fa83d2a5ec86b3d0c36c8765aa052e9950f1d2312d34d82e91687e393',1,'tram::Event']]], ['keypress_147',['KEYPRESS',['../structtram_1_1_event.html#a569d6673fa83d2a5ec86b3d0c36c8765aebce1b240f10af279a3528b2e1a66be1',1,'tram::Event']]], ['keyup_148',['KEYUP',['../structtram_1_1_event.html#a569d6673fa83d2a5ec86b3d0c36c8765a6af1fe1cbf5d703f660915d9d3132d03',1,'tram::Event']]], ['kill_149',['KILL',['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6a3553b17921e781edc3cf5231e7d074e6',1,'tram::Signal::KILL()'],['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afda4f54ab68d5ca6abbfdf4a90c4f4d56fb',1,'tram::Message::KILL()']]] ]; ================================================ FILE: docs/cppapi/search/enumvalues_a.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enumvalues_a.js ================================================ var searchData= [ ['last_5fevent_0',['LAST_EVENT',['../structtram_1_1_event.html#a569d6673fa83d2a5ec86b3d0c36c8765a6ff49b678610c7c9535811b1457b65f8',1,'tram::Event']]], ['last_5fmessage_1',['LAST_MESSAGE',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afda96a5ae11c632629632b9aff371451303',1,'tram::Message']]], ['last_5fsignal_2',['LAST_SIGNAL',['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6a8777185c2588cce0992b52afd378c79f',1,'tram::Signal']]], ['line_5fhigh_3',['LINE_HIGH',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefaa82e6b81c1dad1e5be58b33af7dd8d13',1,'tram::GUI']]], ['line_5flow_4',['LINE_LOW',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefa25770615c52ba66df41c25c40f294120',1,'tram::GUI']]], ['line_5fnormal_5',['LINE_NORMAL',['../namespacetram_1_1_g_u_i.html#a25b2f7af6fe6845d047fd58c6232deefa88618d8270351e0a56f9c48b9a7ea890',1,'tram::GUI']]], ['listener_5fcomponent_6',['LISTENER_COMPONENT',['../structtram_1_1_listener_info.html#a92c413c2c02e7a4f40f59d27dd94de0fa3f989e91e3bfe4271d96a41254195a99',1,'tram::ListenerInfo']]], ['listener_5fdata_5ffunction_7',['LISTENER_DATA_FUNCTION',['../structtram_1_1_listener_info.html#a92c413c2c02e7a4f40f59d27dd94de0fa5c5d57b139c0be8c8136418756f7150c',1,'tram::ListenerInfo']]], ['listener_5fdeleted_8',['LISTENER_DELETED',['../structtram_1_1_listener_info.html#a92c413c2c02e7a4f40f59d27dd94de0fa209a858d23af3b0b1b8737235412e5d0',1,'tram::ListenerInfo']]], ['listener_5fentity_9',['LISTENER_ENTITY',['../structtram_1_1_listener_info.html#a92c413c2c02e7a4f40f59d27dd94de0fadca681ed634170780b5eb66663ebeb5b',1,'tram::ListenerInfo']]], ['listener_5ffunction_10',['LISTENER_FUNCTION',['../structtram_1_1_listener_info.html#a92c413c2c02e7a4f40f59d27dd94de0fa094d897ff3fc5cf407e8d5d13c71f0a5',1,'tram::ListenerInfo']]], ['loaded_11',['LOADED',['../classtram_1_1_entity.html#aaed86a9cc626eeab1796509f702ff378a58c799076c57526cf98b222b7c9ccb0b',1,'tram::Entity::LOADED()'],['../classtram_1_1_resource.html#a7a4ce943d482665189305b828868c2a4a1cd089eb2e1c0a5a211eed70d4cd18f2',1,'tram::Resource::LOADED()'],['../classtram_1_1_world_cell.html#a90b9ed6e3265fb6b3e569669117fd514a87adfa2880447ba4a45de045b1e55ea1',1,'tram::WorldCell::LOADED()']]], ['loaded_5ffrom_5fdisk_12',['LOADED_FROM_DISK',['../classtram_1_1_entity.html#aaed86a9cc626eeab1796509f702ff378a6527c86a34651be34b20c68178af4cdd',1,'tram::Entity::LOADED_FROM_DISK()'],['../classtram_1_1_world_cell.html#a90b9ed6e3265fb6b3e569669117fd514a6b5701f7e4536f58cd7bb5ec2496e33d',1,'tram::WorldCell::LOADED_FROM_DISK()']]], ['lock_13',['LOCK',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afdaf080d077b786681283fc6cdef14e0760',1,'tram::Message']]], ['locked_5fuse_14',['LOCKED_USE',['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6ae8146d8232bb6831a1194a39c668fd78',1,'tram::Signal']]], ['look_5fat_15',['LOOK_AT',['../structtram_1_1_event.html#a569d6673fa83d2a5ec86b3d0c36c8765ae40a6fc2fbfe23e1efe200dfea7e1c5d',1,'tram::Event']]] ]; ================================================ FILE: docs/cppapi/search/enumvalues_b.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enumvalues_b.js ================================================ var searchData= [ ['material_5fenvironmentmap_0',['MATERIAL_ENVIRONMENTMAP',['../namespacetram_1_1_render.html#a315a4bade1773ce2a425e5e7702c003eab3c06e1d79de6f9c4b972d1cb999da4d',1,'tram::Render']]], ['material_5fflat_5fcolor_1',['MATERIAL_FLAT_COLOR',['../namespacetram_1_1_render.html#a315a4bade1773ce2a425e5e7702c003eaa6dd8472dc4c68ec742267e42f35b943',1,'tram::Render']]], ['material_5fglyph_2',['MATERIAL_GLYPH',['../namespacetram_1_1_render.html#a315a4bade1773ce2a425e5e7702c003ea682ec4dc9c0e2f2bc0c9240a2a2ea004',1,'tram::Render']]], ['material_5flast_3',['MATERIAL_LAST',['../namespacetram_1_1_render.html#a315a4bade1773ce2a425e5e7702c003ea5b08ab6f4c7f3deb1d5d137e5beb629f',1,'tram::Render']]], ['material_5flightmap_4',['MATERIAL_LIGHTMAP',['../namespacetram_1_1_render.html#a315a4bade1773ce2a425e5e7702c003ea18dd7f6f787feb198b3e7edb65298605',1,'tram::Render']]], ['material_5fmsdf_5',['MATERIAL_MSDF',['../namespacetram_1_1_render.html#a315a4bade1773ce2a425e5e7702c003ead0ee78b3fd22ca7f74c90e0599f8ef0f',1,'tram::Render']]], ['material_5ftexture_6',['MATERIAL_TEXTURE',['../namespacetram_1_1_render.html#a315a4bade1773ce2a425e5e7702c003ead42b4d3349a29728811b787cc7bc7632',1,'tram::Render']]], ['material_5ftexture_5falpha_7',['MATERIAL_TEXTURE_ALPHA',['../namespacetram_1_1_render.html#a315a4bade1773ce2a425e5e7702c003ea3812bb1fe713fff55c3ed971c25324ac',1,'tram::Render']]], ['material_5fwater_8',['MATERIAL_WATER',['../namespacetram_1_1_render.html#a315a4bade1773ce2a425e5e7702c003eab4828c9e426ef1f1cc97c9d20fb9d6dc',1,'tram::Render']]], ['menu_9',['MENU',['../namespacetram_1_1_settings.html#a0861538a476a71457a80e698e710eef1a451735aa4dbc8730e0238c1d87758273',1,'tram::Settings']]], ['metadata_5frigidbody_10',['METADATA_RIGIDBODY',['../namespacetram_1_1_physics_1_1_a_p_i.html#a7fe5a316a9a2a82e6fefebb795f58eb0a683885e7afa6ad15b84e90ec65051818',1,'tram::Physics::API']]], ['metadata_5ftrigger_11',['METADATA_TRIGGER',['../namespacetram_1_1_physics_1_1_a_p_i.html#a7fe5a316a9a2a82e6fefebb795f58eb0a5fb012083160bfb528a3b549ce276c04',1,'tram::Physics::API']]], ['misc_12',['MISC',['../namespacetram_1_1_system.html#a02b5e7a5340ef5ca42a650ca4d8ade65abeb938a79405470de9ba19372a7eb207',1,'tram::System']]], ['move_5fpick_5fup_13',['MOVE_PICK_UP',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afdad871312fc591cdf55d895050b433f107',1,'tram::Message']]] ]; ================================================ FILE: docs/cppapi/search/enumvalues_c.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enumvalues_c.js ================================================ var searchData= [ ['non_5fpersistent_0',['NON_PERSISTENT',['../classtram_1_1_entity.html#aaed86a9cc626eeab1796509f702ff378a2b07df103621567e55bd08cf7eaf6295',1,'tram::Entity']]], ['non_5fserializable_1',['NON_SERIALIZABLE',['../classtram_1_1_entity.html#aaed86a9cc626eeab1796509f702ff378a801be8e427a55a5afd0ab13515c3b4c3',1,'tram::Entity']]], ['none_2',['NONE',['../structtram_1_1_event.html#a569d6673fa83d2a5ec86b3d0c36c8765aded002c9efb73820628351359fd03c77',1,'tram::Event::NONE()'],['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afda7ae53af63c049ac73b14c74e217b9748',1,'tram::Message::NONE()'],['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6a0cc507ea9a180827724f623883db14b4',1,'tram::Signal::NONE()'],['../namespacetram_1_1_async.html#a3852629b110e5e57e85140bb5fe518e5a81db66b6ed079088749c66cca26aa725',1,'tram::Async::NONE()'],['../namespacetram_1_1_settings.html#a0861538a476a71457a80e698e710eef1abc55e02cfcd95615d38f62a14ebbc530',1,'tram::Settings::NONE()']]] ]; ================================================ FILE: docs/cppapi/search/enumvalues_d.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enumvalues_d.js ================================================ var searchData= [ ['octant_5fbottom_5fleft_5fback_0',['OCTANT_BOTTOM_LEFT_BACK',['../classtram_1_1_octree.html#a7d20e8b44f034b8f8c6748d004c72321a2725927ea43dc9ad1d75bf626e7a3122',1,'tram::Octree']]], ['octant_5fbottom_5fleft_5ffront_1',['OCTANT_BOTTOM_LEFT_FRONT',['../classtram_1_1_octree.html#a7d20e8b44f034b8f8c6748d004c72321aa2db770146af64ef460c9178aa13e716',1,'tram::Octree']]], ['octant_5fbottom_5fright_5fback_2',['OCTANT_BOTTOM_RIGHT_BACK',['../classtram_1_1_octree.html#a7d20e8b44f034b8f8c6748d004c72321afa2be5c65b39f91ddb5ce010124498b9',1,'tram::Octree']]], ['octant_5fbottom_5fright_5ffront_3',['OCTANT_BOTTOM_RIGHT_FRONT',['../classtram_1_1_octree.html#a7d20e8b44f034b8f8c6748d004c72321a1216bd5563a5df6cc9d366567ade4ca9',1,'tram::Octree']]], ['octant_5ftop_5fleft_5fback_4',['OCTANT_TOP_LEFT_BACK',['../classtram_1_1_octree.html#a7d20e8b44f034b8f8c6748d004c72321a80ea459a34a50a932b66112239ddfe02',1,'tram::Octree']]], ['octant_5ftop_5fleft_5ffront_5',['OCTANT_TOP_LEFT_FRONT',['../classtram_1_1_octree.html#a7d20e8b44f034b8f8c6748d004c72321aff19451a99f6f71ad5c4ffc06c011ddc',1,'tram::Octree']]], ['octant_5ftop_5fright_5fback_6',['OCTANT_TOP_RIGHT_BACK',['../classtram_1_1_octree.html#a7d20e8b44f034b8f8c6748d004c72321a49bfceafb3d3275a8eb3b92b6efc7494',1,'tram::Octree']]], ['octant_5ftop_5fright_5ffront_7',['OCTANT_TOP_RIGHT_FRONT',['../classtram_1_1_octree.html#a7d20e8b44f034b8f8c6748d004c72321a34ff0d0904aca63b2f65a0ffcb5f779a',1,'tram::Octree']]], ['open_8',['OPEN',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afdae0caa75bd4a1fa8c53b159a5194b07af',1,'tram::Message::OPEN()'],['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6ab0e0dc7772a2218a1e9d77acfbd36927',1,'tram::Signal::OPEN()']]] ]; ================================================ FILE: docs/cppapi/search/enumvalues_e.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enumvalues_e.js ================================================ var searchData= [ ['path_5fcurve_0',['PATH_CURVE',['../namespacetram.html#a8285e82eb5cb49da9f6a5a02dd0560a2a2fb053d09179ae21da8b7f17c2f6861b',1,'tram']]], ['path_5fleft_1',['PATH_LEFT',['../namespacetram.html#a8285e82eb5cb49da9f6a5a02dd0560a2a468f0ebb474e7d12003ea27e5db8b617',1,'tram']]], ['path_5flinear_2',['PATH_LINEAR',['../namespacetram.html#a8285e82eb5cb49da9f6a5a02dd0560a2ac758fff69db3c028ba8f599d47bac3fd',1,'tram']]], ['path_5fright_3',['PATH_RIGHT',['../namespacetram.html#a8285e82eb5cb49da9f6a5a02dd0560a2a0589ae9b6078dd155c3ead82cb3eed0f',1,'tram']]], ['path_5fstraight_4',['PATH_STRAIGHT',['../namespacetram.html#a8285e82eb5cb49da9f6a5a02dd0560a2a13db939fe9562c84c1f83073156459fc',1,'tram']]], ['pause_5fline_5',['PAUSE_LINE',['../classtram_1_1_file.html#ab340a7edca3c73f54d764cd17b362477a3498da60161cfd421524d4b5a5262d1f',1,'tram::File']]], ['physics_6',['PHYSICS',['../namespacetram_1_1_system.html#a02b5e7a5340ef5ca42a650ca4d8ade65afacc4f271a47ef1f95656f32030c2622',1,'tram::System']]], ['ping_7',['PING',['../structtram_1_1_message.html#ad7f83643df194a92e3376d78596b9afda88ef805d301227661029ccb4e90e262e',1,'tram::Message']]], ['platform_8',['PLATFORM',['../namespacetram_1_1_system.html#a02b5e7a5340ef5ca42a650ca4d8ade65a922fa0106a11539d618969d792a6e1b9',1,'tram::System']]], ['progress_9',['PROGRESS',['../structtram_1_1_signal.html#ac4962f60874f650d905fb2a935922af6a7cc11bd95a71a01ae61ef329e2a149f4',1,'tram::Signal']]], ['property_5fcomputer_10',['PROPERTY_COMPUTER',['../namespacetram_1_1_render.html#aa55781f294a5a76e9cba54376f45a43fada33452c93d29a0fc18f1d8f09bc44b8',1,'tram::Render']]], ['property_5fconcrete_11',['PROPERTY_CONCRETE',['../namespacetram_1_1_render.html#aa55781f294a5a76e9cba54376f45a43fae2b1b6ada982d1c1c61a36e1c2f31126',1,'tram::Render']]], ['property_5fflesh_12',['PROPERTY_FLESH',['../namespacetram_1_1_render.html#aa55781f294a5a76e9cba54376f45a43faf0c2cbb57c6cfcc43710333ef255aea4',1,'tram::Render']]], ['property_5fglass_13',['PROPERTY_GLASS',['../namespacetram_1_1_render.html#aa55781f294a5a76e9cba54376f45a43fa9fe641e38a1a52f765bd88a14bed407a',1,'tram::Render']]], ['property_5fgrass_14',['PROPERTY_GRASS',['../namespacetram_1_1_render.html#aa55781f294a5a76e9cba54376f45a43fa63132978d6ea9a5eed11e5ee7117410f',1,'tram::Render']]], ['property_5fgrate_15',['PROPERTY_GRATE',['../namespacetram_1_1_render.html#aa55781f294a5a76e9cba54376f45a43fa06905ec293dc3675d21274cf114d4d65',1,'tram::Render']]], ['property_5fmetal_16',['PROPERTY_METAL',['../namespacetram_1_1_render.html#aa55781f294a5a76e9cba54376f45a43faf0f9e334f61c84e46541a7cc6a568b96',1,'tram::Render']]], ['property_5fmetal_5fthin_17',['PROPERTY_METAL_THIN',['../namespacetram_1_1_render.html#aa55781f294a5a76e9cba54376f45a43fa00e42e8d7d6988b4a9300714b8bbc7a7',1,'tram::Render']]], ['property_5fslime_18',['PROPERTY_SLIME',['../namespacetram_1_1_render.html#aa55781f294a5a76e9cba54376f45a43fa3df30b149393b17bb9b6a1b647012119',1,'tram::Render']]], ['property_5fsnow_19',['PROPERTY_SNOW',['../namespacetram_1_1_render.html#aa55781f294a5a76e9cba54376f45a43fa14a30486b4b7c0ec56c9474618d94e86',1,'tram::Render']]], ['property_5ftile_20',['PROPERTY_TILE',['../namespacetram_1_1_render.html#aa55781f294a5a76e9cba54376f45a43facd803e1bd20fa9d04a0e97284feeb2b9',1,'tram::Render']]], ['property_5fwood_21',['PROPERTY_WOOD',['../namespacetram_1_1_render.html#aa55781f294a5a76e9cba54376f45a43fab3fd02f2941169418a236b4de11c1c0b',1,'tram::Render']]] ]; ================================================ FILE: docs/cppapi/search/enumvalues_f.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/enumvalues_f.js ================================================ var searchData= [ ['quest_5ftgr_5fincrement_0',['QUEST_TGR_INCREMENT',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1ba17b72845d665cf133b85f8f9f6a266a7',1,'tram::Ext::Kitchensink']]], ['quest_5ftgr_5fset_5fobjective_1',['QUEST_TGR_SET_OBJECTIVE',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1ba5be55952382cfcbdeff33c9848c751a6',1,'tram::Ext::Kitchensink']]], ['quest_5ftgr_5fset_5fvariable_2',['QUEST_TGR_SET_VARIABLE',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1bab3184e4606cdb4af3d7c99634d68643c',1,'tram::Ext::Kitchensink']]], ['quest_5ftgr_5fshow_5fmessage_3',['QUEST_TGR_SHOW_MESSAGE',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1baed1f0c08592a54fabf9d38da32861069',1,'tram::Ext::Kitchensink']]], ['quest_5fvar_5fcondition_5fand_4',['QUEST_VAR_CONDITION_AND',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1ba186f563d6876469d9a15d27843a5b53e',1,'tram::Ext::Kitchensink']]], ['quest_5fvar_5fcondition_5fnot_5',['QUEST_VAR_CONDITION_NOT',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1ba5222f372b4fc5839970f0e83836d8963',1,'tram::Ext::Kitchensink']]], ['quest_5fvar_5fcondition_5for_6',['QUEST_VAR_CONDITION_OR',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1ba08d52f2b0b110ace1985eebf58c530b7',1,'tram::Ext::Kitchensink']]], ['quest_5fvar_5fcondition_5fscript_7',['QUEST_VAR_CONDITION_SCRIPT',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1ba6c8b793de899085ef9a4e667f0494aa7',1,'tram::Ext::Kitchensink']]], ['quest_5fvar_5fentity_5fitem_5fcount_8',['QUEST_VAR_ENTITY_ITEM_COUNT',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1bac81c3a50657104e20115d48fcce012f1',1,'tram::Ext::Kitchensink']]], ['quest_5fvar_5finvalid_9',['QUEST_VAR_INVALID',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1ba30cbed799aadafbe321339018783ea86',1,'tram::Ext::Kitchensink']]], ['quest_5fvar_5fobjective_10',['QUEST_VAR_OBJECTIVE',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1ba9f6abb709c8d8e059f95ba9effdeaea6',1,'tram::Ext::Kitchensink']]], ['quest_5fvar_5fvalue_11',['QUEST_VAR_VALUE',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1ba96ef0600cecd28d4995fa0d7752cbdcc',1,'tram::Ext::Kitchensink']]], ['quest_5fvar_5fvalue_5fgreater_12',['QUEST_VAR_VALUE_GREATER',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1bad093ff9e327a290e2386fdb6f9e640dd',1,'tram::Ext::Kitchensink']]], ['quest_5fvar_5fvalue_5fgreater_5for_5fequal_13',['QUEST_VAR_VALUE_GREATER_OR_EQUAL',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1ba0d54b933eb12ed94fc946b685e46d7a2',1,'tram::Ext::Kitchensink']]], ['quest_5fvar_5fvalue_5fis_14',['QUEST_VAR_VALUE_IS',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1ba7f25c526cc3e1223bc2d6697cfb7cf71',1,'tram::Ext::Kitchensink']]], ['quest_5fvar_5fvalue_5fis_5fnot_15',['QUEST_VAR_VALUE_IS_NOT',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1bad3dea61a0fac22587a0c9e7dbb202e0b',1,'tram::Ext::Kitchensink']]], ['quest_5fvar_5fvalue_5fless_16',['QUEST_VAR_VALUE_LESS',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1bae7561b1caf29ca996a233daa45274a97',1,'tram::Ext::Kitchensink']]], ['quest_5fvar_5fvalue_5fless_5for_5fequal_17',['QUEST_VAR_VALUE_LESS_OR_EQUAL',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab3814d859340fe53dd54ca8fa8f84f1bace549e0bce35a03eacba99bc23a86816',1,'tram::Ext::Kitchensink']]] ]; ================================================ FILE: docs/cppapi/search/files_0.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/files_0.js ================================================ var searchData= [ ['aabb_2eh_0',['aabb.h',['../aabb_8h.html',1,'']]], ['actions_2eh_1',['actions.h',['../actions_8h.html',1,'']]], ['ai_2ecpp_2',['ai.cpp',['../ai_8cpp.html',1,'']]], ['ai_2eh_3',['ai.h',['../ai_8h.html',1,'']]], ['animation_2ecpp_4',['animation.cpp',['../components_2animation_8cpp.html',1,'(Global Namespace)'],['../render_2animation_8cpp.html',1,'(Global Namespace)']]], ['animation_2eh_5',['animation.h',['../components_2animation_8h.html',1,'(Global Namespace)'],['../render_2animation_8h.html',1,'(Global Namespace)']]], ['animationtable_2ecpp_6',['animationtable.cpp',['../animationtable_8cpp.html',1,'']]], ['animationtable_2eh_7',['animationtable.h',['../animationtable_8h.html',1,'']]], ['api_2eh_8',['api.h',['../audio_2api_8h.html',1,'(Global Namespace)'],['../physics_2api_8h.html',1,'(Global Namespace)'],['../platform_2api_8h.html',1,'(Global Namespace)'],['../render_2api_8h.html',1,'(Global Namespace)']]], ['async_2ecpp_9',['async.cpp',['../async_8cpp.html',1,'']]], ['async_2eh_10',['async.h',['../async_8h.html',1,'']]], ['attributes_2ecpp_11',['attributes.cpp',['../attributes_8cpp.html',1,'']]], ['attributes_2eh_12',['attributes.h',['../attributes_8h.html',1,'']]], ['audio_2ecpp_13',['audio.cpp',['../audio_2audio_8cpp.html',1,'(Global Namespace)'],['../components_2audio_8cpp.html',1,'(Global Namespace)']]], ['audio_2eh_14',['audio.h',['../audio_2audio_8h.html',1,'(Global Namespace)'],['../components_2audio_8h.html',1,'(Global Namespace)']]] ]; ================================================ FILE: docs/cppapi/search/files_1.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/files_1.js ================================================ var searchData= [ ['buffer_2ecpp_0',['buffer.cpp',['../buffer_8cpp.html',1,'']]], ['buffer_2eh_1',['buffer.h',['../buffer_8h.html',1,'']]], ['bullet_2ecpp_2',['bullet.cpp',['../bullet_8cpp.html',1,'']]] ]; ================================================ FILE: docs/cppapi/search/files_10.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/files_10.js ================================================ var searchData= [ ['render_2ecpp_0',['render.cpp',['../components_2render_8cpp.html',1,'(Global Namespace)'],['../render_2render_8cpp.html',1,'(Global Namespace)']]], ['render_2eh_1',['render.h',['../components_2render_8h.html',1,'(Global Namespace)'],['../render_2render_8h.html',1,'(Global Namespace)']]], ['renderer_2ecpp_2',['renderer.cpp',['../direct3d_2renderer_8cpp.html',1,'(Global Namespace)'],['../opengl_2renderer_8cpp.html',1,'(Global Namespace)'],['../renderer_8cpp.html',1,'(Global Namespace)']]], ['renderer_2eh_3',['renderer.h',['../opengl_2renderer_8h.html',1,'(Global Namespace)'],['../renderer_8h.html',1,'(Global Namespace)']]], ['resource_2eh_4',['resource.h',['../resource_8h.html',1,'']]] ]; ================================================ FILE: docs/cppapi/search/files_11.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/files_11.js ================================================ var searchData= [ ['scene_2ecpp_0',['scene.cpp',['../scene_8cpp.html',1,'']]], ['scene_2eh_1',['scene.h',['../scene_8h.html',1,'']]], ['script_2ecpp_2',['script.cpp',['../entities_2script_8cpp.html',1,'(Global Namespace)'],['../framework_2script_8cpp.html',1,'(Global Namespace)']]], ['script_2eh_3',['script.h',['../entities_2script_8h.html',1,'(Global Namespace)'],['../framework_2script_8h.html',1,'(Global Namespace)']]], ['sdl_2ecpp_4',['sdl.cpp',['../sdl_8cpp.html',1,'']]], ['serialization_2eh_5',['serialization.h',['../serialization_8h.html',1,'']]], ['settings_2ecpp_6',['settings.cpp',['../settings_8cpp.html',1,'']]], ['settings_2eh_7',['settings.h',['../settings_8h.html',1,'']]], ['shader_2ecpp_8',['shader.cpp',['../shader_8cpp.html',1,'']]], ['shader_2eh_9',['shader.h',['../shader_8h.html',1,'']]], ['signal_2ecpp_10',['signal.cpp',['../signal_8cpp.html',1,'']]], ['signal_2eh_11',['signal.h',['../signal_8h.html',1,'']]], ['software_2ecpp_12',['software.cpp',['../software_8cpp.html',1,'']]], ['software_2eh_13',['software.h',['../software_8h.html',1,'']]], ['sound_2ecpp_14',['sound.cpp',['../audio_2sound_8cpp.html',1,'(Global Namespace)'],['../entities_2sound_8cpp.html',1,'(Global Namespace)']]], ['sound_2eh_15',['sound.h',['../audio_2sound_8h.html',1,'(Global Namespace)'],['../entities_2sound_8h.html',1,'(Global Namespace)']]], ['soundtable_2ecpp_16',['soundtable.cpp',['../soundtable_8cpp.html',1,'']]], ['soundtable_2eh_17',['soundtable.h',['../soundtable_8h.html',1,'']]], ['spatial_2ecpp_18',['spatial.cpp',['../spatial_8cpp.html',1,'']]], ['spatial_2eh_19',['spatial.h',['../spatial_8h.html',1,'']]], ['spinlock_2eh_20',['spinlock.h',['../spinlock_8h.html',1,'']]], ['sprite_2ecpp_21',['sprite.cpp',['../components_2sprite_8cpp.html',1,'(Global Namespace)'],['../render_2opengl_2sprite_8cpp.html',1,'(Global Namespace)'],['../render_2sprite_8cpp.html',1,'(Global Namespace)']]], ['sprite_2eh_22',['sprite.h',['../components_2sprite_8h.html',1,'(Global Namespace)'],['../render_2opengl_2sprite_8h.html',1,'(Global Namespace)'],['../render_2sprite_8h.html',1,'(Global Namespace)']]], ['stack_2eh_23',['stack.h',['../stack_8h.html',1,'']]], ['stackpool_2eh_24',['stackpool.h',['../stackpool_8h.html',1,'']]], ['staticworldobject_2ecpp_25',['staticworldobject.cpp',['../staticworldobject_8cpp.html',1,'']]], ['staticworldobject_2eh_26',['staticworldobject.h',['../staticworldobject_8h.html',1,'']]], ['stats_2ecpp_27',['stats.cpp',['../stats_8cpp.html',1,'']]], ['stats_2eh_28',['stats.h',['../stats_8h.html',1,'']]], ['system_2ecpp_29',['system.cpp',['../framework_2system_8cpp.html',1,'(Global Namespace)'],['../extensions_2menu_2system_8cpp.html',1,'(Global Namespace)']]], ['system_2eh_30',['system.h',['../extensions_2menu_2system_8h.html',1,'(Global Namespace)'],['../framework_2system_8h.html',1,'(Global Namespace)']]] ]; ================================================ FILE: docs/cppapi/search/files_12.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/files_12.js ================================================ var searchData= [ ['template_2ecpp_0',['template.cpp',['../template_8cpp.html',1,'']]], ['template_2eh_1',['template.h',['../template_8h.html',1,'']]], ['test_2eh_2',['test.h',['../test_8h.html',1,'']]], ['texture_2ecpp_3',['texture.cpp',['../texture_8cpp.html',1,'']]], ['texture_2eh_4',['texture.h',['../texture_8h.html',1,'']]], ['thirdperson_2ecpp_5',['thirdperson.cpp',['../thirdperson_8cpp.html',1,'']]], ['thirdperson_2eh_6',['thirdperson.h',['../thirdperson_8h.html',1,'']]], ['transition_2ecpp_7',['transition.cpp',['../transition_8cpp.html',1,'']]], ['transition_2eh_8',['transition.h',['../transition_8h.html',1,'']]], ['trigger_2ecpp_9',['trigger.cpp',['../components_2trigger_8cpp.html',1,'(Global Namespace)'],['../entities_2trigger_8cpp.html',1,'(Global Namespace)']]], ['trigger_2eh_10',['trigger.h',['../components_2trigger_8h.html',1,'(Global Namespace)'],['../entities_2trigger_8h.html',1,'(Global Namespace)']]], ['type_2ecpp_11',['type.cpp',['../type_8cpp.html',1,'']]], ['type_2eh_12',['type.h',['../type_8h.html',1,'']]] ]; ================================================ FILE: docs/cppapi/search/files_13.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/files_13.js ================================================ var searchData= [ ['ui_2ecpp_0',['ui.cpp',['../ui_8cpp.html',1,'']]], ['ui_2eh_1',['ui.h',['../ui_8h.html',1,'']]], ['uid_2ecpp_2',['uid.cpp',['../uid_8cpp.html',1,'']]], ['uid_2eh_3',['uid.h',['../uid_8h.html',1,'']]], ['utils_2ecpp_4',['utils.cpp',['../utils_8cpp.html',1,'']]] ]; ================================================ FILE: docs/cppapi/search/files_14.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/files_14.js ================================================ var searchData= [ ['value_2eh_0',['value.h',['../value_8h.html',1,'']]], ['vertices_2ecpp_1',['vertices.cpp',['../vertices_8cpp.html',1,'']]], ['vertices_2eh_2',['vertices.h',['../vertices_8h.html',1,'']]] ]; ================================================ FILE: docs/cppapi/search/files_15.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/files_15.js ================================================ var searchData= [ ['worldcell_2ecpp_0',['worldcell.cpp',['../worldcell_8cpp.html',1,'']]], ['worldcell_2eh_1',['worldcell.h',['../worldcell_8h.html',1,'']]] ]; ================================================ FILE: docs/cppapi/search/files_2.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/files_2.js ================================================ var searchData= [ ['camera_2ecpp_0',['camera.cpp',['../camera_8cpp.html',1,'']]], ['camera_2eh_1',['camera.h',['../camera_8h.html',1,'']]], ['character_2ecpp_2',['character.cpp',['../character_8cpp.html',1,'']]], ['character_2eh_3',['character.h',['../character_8h.html',1,'']]], ['collisionmodel_2ecpp_4',['collisionmodel.cpp',['../collisionmodel_8cpp.html',1,'']]], ['collisionmodel_2eh_5',['collisionmodel.h',['../collisionmodel_8h.html',1,'']]], ['collisionshape_2eh_6',['collisionshape.h',['../collisionshape_8h.html',1,'']]], ['config_2eh_7',['config.h',['../config_8h.html',1,'']]], ['controller_2ecpp_8',['controller.cpp',['../controller_8cpp.html',1,'']]], ['controller_2eh_9',['controller.h',['../controller_8h.html',1,'']]], ['core_2ecpp_10',['core.cpp',['../core_8cpp.html',1,'']]], ['core_2eh_11',['core.h',['../core_8h.html',1,'']]], ['crate_2ecpp_12',['crate.cpp',['../crate_8cpp.html',1,'']]], ['crate_2eh_13',['crate.h',['../crate_8h.html',1,'']]] ]; ================================================ FILE: docs/cppapi/search/files_3.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/files_3.js ================================================ var searchData= [ ['debug_2ecpp_0',['debug.cpp',['../debug_8cpp.html',1,'']]], ['debug_2eh_1',['debug.h',['../debug_8h.html',1,'']]], ['debugdrawer_2eh_2',['debugdrawer.h',['../debugdrawer_8h.html',1,'']]], ['decal_2ecpp_3',['decal.cpp',['../decal_8cpp.html',1,'']]], ['decal_2eh_4',['decal.h',['../decal_8h.html',1,'']]], ['decoration_2ecpp_5',['decoration.cpp',['../decoration_8cpp.html',1,'']]], ['decoration_2eh_6',['decoration.h',['../decoration_8h.html',1,'']]], ['definitions_2eh_7',['definitions.h',['../definitions_8h.html',1,'']]], ['dialog_2ecpp_8',['dialog.cpp',['../dialog_8cpp.html',1,'']]], ['dialog_2eh_9',['dialog.h',['../dialog_8h.html',1,'']]], ['direct3d_2eh_10',['direct3d.h',['../direct3d_8h.html',1,'']]], ['drawlist_2ecpp_11',['drawlist.cpp',['../drawlist_8cpp.html',1,'']]], ['drawlist_2eh_12',['drawlist.h',['../drawlist_8h.html',1,'']]] ]; ================================================ FILE: docs/cppapi/search/files_4.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/files_4.js ================================================ var searchData= [ ['entities_2ecpp_0',['entities.cpp',['../entities_8cpp.html',1,'']]], ['entities_2eh_1',['entities.h',['../entities_8h.html',1,'']]], ['entity_2ecpp_2',['entity.cpp',['../entity_8cpp.html',1,'']]], ['entity_2eh_3',['entity.h',['../entity_8h.html',1,'']]], ['entitycomponent_2ecpp_4',['entitycomponent.cpp',['../entitycomponent_8cpp.html',1,'']]], ['entitycomponent_2eh_5',['entitycomponent.h',['../entitycomponent_8h.html',1,'']]], ['error_2ecpp_6',['error.cpp',['../error_8cpp.html',1,'']]], ['error_2eh_7',['error.h',['../error_8h.html',1,'']]], ['event_2ecpp_8',['event.cpp',['../event_8cpp.html',1,'']]], ['event_2eh_9',['event.h',['../event_8h.html',1,'']]] ]; ================================================ FILE: docs/cppapi/search/files_5.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/files_5.js ================================================ var searchData= [ ['file_2ecpp_0',['file.cpp',['../framework_2file_8cpp.html',1,'(Global Namespace)'],['../platform_2file_8cpp.html',1,'(Global Namespace)']]], ['file_2eh_1',['file.h',['../framework_2file_8h.html',1,'(Global Namespace)'],['../platform_2file_8h.html',1,'(Global Namespace)']]], ['firstperson_2ecpp_2',['firstperson.cpp',['../firstperson_8cpp.html',1,'']]], ['firstperson_2eh_3',['firstperson.h',['../firstperson_8h.html',1,'']]], ['following_2ecpp_4',['following.cpp',['../following_8cpp.html',1,'']]], ['following_2eh_5',['following.h',['../following_8h.html',1,'']]], ['fpscamera_2ecpp_6',['fpscamera.cpp',['../fpscamera_8cpp.html',1,'']]], ['fpscamera_2eh_7',['fpscamera.h',['../fpscamera_8h.html',1,'']]] ]; ================================================ FILE: docs/cppapi/search/files_6.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/files_6.js ================================================ var searchData= [ ['glfw_2ecpp_0',['glfw.cpp',['../glfw_8cpp.html',1,'']]], ['graph_2ecpp_1',['graph.cpp',['../audio_2graph_8cpp.html',1,'(Global Namespace)'],['../framework_2graph_8cpp.html',1,'(Global Namespace)']]], ['graph_2eh_2',['graph.h',['../audio_2graph_8h.html',1,'(Global Namespace)'],['../framework_2graph_8h.html',1,'(Global Namespace)']]], ['gui_2ecpp_3',['gui.cpp',['../gui_8cpp.html',1,'']]], ['gui_2eh_4',['gui.h',['../gui_8h.html',1,'']]] ]; ================================================ FILE: docs/cppapi/search/files_7.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/files_7.js ================================================ var searchData= [ ['hashmap_2eh_0',['hashmap.h',['../hashmap_8h.html',1,'']]] ]; ================================================ FILE: docs/cppapi/search/files_8.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/files_8.js ================================================ var searchData= [ ['image_2ecpp_0',['image.cpp',['../image_8cpp.html',1,'']]], ['image_2eh_1',['image.h',['../image_8h.html',1,'']]], ['info_2edox_2',['info.dox',['../info_8dox.html',1,'']]], ['inventory_2ecpp_3',['inventory.cpp',['../inventory_8cpp.html',1,'']]], ['inventory_2eh_4',['inventory.h',['../inventory_8h.html',1,'']]] ]; ================================================ FILE: docs/cppapi/search/files_9.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/files_9.js ================================================ var searchData= [ ['kitchensink_2ecpp_0',['kitchensink.cpp',['../kitchensink_8cpp.html',1,'']]], ['kitchensink_2eh_1',['kitchensink.h',['../kitchensink_8h.html',1,'']]] ]; ================================================ FILE: docs/cppapi/search/files_a.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/files_a.js ================================================ var searchData= [ ['language_2ecpp_0',['language.cpp',['../language_8cpp.html',1,'']]], ['language_2eh_1',['language.h',['../language_8h.html',1,'']]], ['light_2ecpp_2',['light.cpp',['../components_2light_8cpp.html',1,'(Global Namespace)'],['../entities_2light_8cpp.html',1,'(Global Namespace)'],['../render_2light_8cpp.html',1,'(Global Namespace)'],['../render_2opengl_2light_8cpp.html',1,'(Global Namespace)']]], ['light_2eh_3',['light.h',['../components_2light_8h.html',1,'(Global Namespace)'],['../entities_2light_8h.html',1,'(Global Namespace)'],['../render_2light_8h.html',1,'(Global Namespace)'],['../render_2opengl_2light_8h.html',1,'(Global Namespace)']]], ['loader_2ecpp_4',['loader.cpp',['../loader_8cpp.html',1,'']]], ['loader_2eh_5',['loader.h',['../loader_8h.html',1,'']]], ['logging_2ecpp_6',['logging.cpp',['../logging_8cpp.html',1,'']]], ['logging_2eh_7',['logging.h',['../logging_8h.html',1,'']]], ['lua_2ecpp_8',['lua.cpp',['../lua_8cpp.html',1,'']]], ['lua_2eh_9',['lua.h',['../lua_8h.html',1,'']]] ]; ================================================ FILE: docs/cppapi/search/files_b.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/files_b.js ================================================ var searchData= [ ['macros_2eh_0',['macros.h',['../macros_8h.html',1,'']]], ['main_2ecpp_1',['main.cpp',['../main_8cpp.html',1,'']]], ['marker_2ecpp_2',['marker.cpp',['../marker_8cpp.html',1,'']]], ['marker_2eh_3',['marker.h',['../marker_8h.html',1,'']]], ['material_2ecpp_4',['material.cpp',['../material_8cpp.html',1,'(Global Namespace)'],['../opengl_2material_8cpp.html',1,'(Global Namespace)']]], ['material_2eh_5',['material.h',['../material_8h.html',1,'(Global Namespace)'],['../opengl_2material_8h.html',1,'(Global Namespace)']]], ['math_2ecpp_6',['math.cpp',['../math_8cpp.html',1,'']]], ['math_2eh_7',['math.h',['../math_8h.html',1,'']]], ['menu_2ecpp_8',['menu.cpp',['../kitchensink_2menu_8cpp.html',1,'(Global Namespace)'],['../menu_2menu_8cpp.html',1,'(Global Namespace)']]], ['menu_2eh_9',['menu.h',['../kitchensink_2menu_8h.html',1,'(Global Namespace)'],['../menu_2menu_8h.html',1,'(Global Namespace)']]], ['message_2ecpp_10',['message.cpp',['../message_8cpp.html',1,'']]], ['message_2eh_11',['message.h',['../message_8h.html',1,'']]], ['model_2ecpp_12',['model.cpp',['../model_8cpp.html',1,'']]], ['model_2eh_13',['model.h',['../model_8h.html',1,'']]] ]; ================================================ FILE: docs/cppapi/search/files_c.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/files_c.js ================================================ var searchData= [ ['navmesh_2ecpp_0',['navmesh.cpp',['../navmesh_8cpp.html',1,'']]], ['navmesh_2eh_1',['navmesh.h',['../navmesh_8h.html',1,'']]] ]; ================================================ FILE: docs/cppapi/search/files_d.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/files_d.js ================================================ var searchData= [ ['octree_2eh_0',['octree.h',['../octree_8h.html',1,'']]], ['openal_2ecpp_1',['openal.cpp',['../openal_8cpp.html',1,'']]], ['openal_2eh_2',['openal.h',['../openal_8h.html',1,'']]], ['other_2ecpp_3',['other.cpp',['../other_8cpp.html',1,'']]], ['other_2eh_4',['other.h',['../other_8h.html',1,'']]], ['output_2ecpp_5',['output.cpp',['../output_8cpp.html',1,'']]], ['output_2eh_6',['output.h',['../output_8h.html',1,'']]] ]; ================================================ FILE: docs/cppapi/search/files_e.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/files_e.js ================================================ var searchData= [ ['particle_2ecpp_0',['particle.cpp',['../particle_8cpp.html',1,'']]], ['particle_2eh_1',['particle.h',['../particle_8h.html',1,'']]], ['path_2ecpp_2',['path.cpp',['../path_8cpp.html',1,'']]], ['path_2eh_3',['path.h',['../path_8h.html',1,'']]], ['pathtracer_2ecpp_4',['pathtracer.cpp',['../pathtracer_8cpp.html',1,'']]], ['pathtracer_2eh_5',['pathtracer.h',['../pathtracer_8h.html',1,'']]], ['physics_2ecpp_6',['physics.cpp',['../components_2physics_8cpp.html',1,'(Global Namespace)'],['../physics_2physics_8cpp.html',1,'(Global Namespace)']]], ['physics_2eh_7',['physics.h',['../components_2physics_8h.html',1,'(Global Namespace)'],['../physics_2physics_8h.html',1,'(Global Namespace)']]], ['platform_2eh_8',['platform.h',['../platform_8h.html',1,'']]], ['player_2ecpp_9',['player.cpp',['../components_2player_8cpp.html',1,'(Global Namespace)'],['../entities_2player_8cpp.html',1,'(Global Namespace)']]], ['player_2eh_10',['player.h',['../components_2player_8h.html',1,'(Global Namespace)'],['../entities_2player_8h.html',1,'(Global Namespace)']]], ['pool_2eh_11',['pool.h',['../pool_8h.html',1,'']]], ['probe_2ecpp_12',['probe.cpp',['../probe_8cpp.html',1,'']]], ['probe_2eh_13',['probe.h',['../probe_8h.html',1,'']]] ]; ================================================ FILE: docs/cppapi/search/files_f.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/files_f.js ================================================ var searchData= [ ['quest_2ecpp_0',['quest.cpp',['../quest_8cpp.html',1,'']]], ['quest_2eh_1',['quest.h',['../quest_8h.html',1,'']]], ['queue_2eh_2',['queue.h',['../queue_8h.html',1,'']]] ]; ================================================ FILE: docs/cppapi/search/functions_0.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/functions_0.js ================================================ var searchData= [ ['aabbdistance_0',['AABBDistance',['../classtram_1_1_a_a_b_b_tree.html#a854ba4aa154dfc14b544cc142418b63b',1,'tram::AABBTree']]], ['aabbintersect_1',['AABBIntersect',['../classtram_1_1_a_a_b_b_tree.html#a0fdc8691cc5674bcd2b18e1b287301e1',1,'tram::AABBTree']]], ['aabboverlap_2',['AABBOverlap',['../classtram_1_1_a_a_b_b_tree.html#afe35ffcff47d45bf7b4dad9b2d510d80',1,'tram::AABBTree']]], ['aabbsurface_3',['AABBSurface',['../classtram_1_1_a_a_b_b_tree.html#ad990b44be408032340081fb22dbc1ca2',1,'tram::AABBTree']]], ['aabbtree_4',['AABBTree',['../classtram_1_1_a_a_b_b_tree.html#a567a82fddf4d8649dec4f358fe08da29',1,'tram::AABBTree']]], ['aabbvolume_5',['AABBVolume',['../classtram_1_1_a_a_b_b_tree.html#a715f0769ae31e4adfcea697bf841dd77',1,'tram::AABBTree']]], ['activate_6',['Activate',['../classtram_1_1_trigger.html#a99650ea152bb5eb058cdb49d19bc4ecc',1,'tram::Trigger']]], ['add_7',['Add',['../classtram_1_1_ext_1_1_menu_1_1_menu.html#a1daec0fd40b63b2ebedbbc99dee5cb80',1,'tram::Ext::Menu::Menu::Add()'],['../classtram_1_1_signal_table.html#a42153d34f72f7fd4e3b43eec183d61a4',1,'tram::SignalTable::Add()'],['../classtram_1_1_world_cell.html#a13cf0ae3a6ecb0f8d9c4800f24c914ef',1,'tram::WorldCell::Add(Entity *entity)'],['../classtram_1_1_world_cell.html#a6d8c426c88e1a950304ce2b499a2a065',1,'tram::WorldCell::Add(Transition *transition)'],['../namespacetram_1_1_stats.html#a7d1692841a6345016a11319bb9d5a3aa',1,'tram::Stats::Add()']]], ['addbaseclass_8',['AddBaseClass',['../classtram_1_1_ext_1_1_kitchensink_1_1_character_class.html#a84d3d60fea7430558208b30e8281d751',1,'tram::Ext::Kitchensink::CharacterClass']]], ['addcharacter_9',['AddCharacter',['../classtram_1_1_ext_1_1_kitchensink_1_1_faction.html#ae240133d8845aeae9cffc999e37a1763',1,'tram::Ext::Kitchensink::Faction']]], ['addchild_10',['AddChild',['../namespacetram_1_1_ext_1_1_kitchensink.html#a16caf89d1fcf378195a2f0fa188b0156',1,'tram::Ext::Kitchensink']]], ['addclass_11',['AddClass',['../classtram_1_1_ext_1_1_kitchensink_1_1_character.html#ab8675fad8c679169af255b91d45b807d',1,'tram::Ext::Kitchensink::Character']]], ['addcube_12',['AddCube',['../namespacetram_1_1_render.html#a80ac9a1f629a048bc89f3a816783db87',1,'tram::Render']]], ['addcylinder_13',['AddCylinder',['../namespacetram_1_1_render.html#a504da26659f9ff6e512e052ccd974ce8',1,'tram::Render']]], ['addfaction_14',['AddFaction',['../classtram_1_1_ext_1_1_kitchensink_1_1_character_class.html#a86b83d010b464d657533f54684f3b819',1,'tram::Ext::Kitchensink::CharacterClass']]], ['additem_15',['AddItem',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory_manager.html#a36bc5edd165aedb4ff48c5ef27426a4d',1,'tram::Ext::Kitchensink::InventoryManager::AddItem()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_list_inventory_manager.html#a86886a96730029deb9c866327eec9484',1,'tram::Ext::Kitchensink::ListInventoryManager::AddItem()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#ac82a46651c702a1efac9917179d42263',1,'tram::Ext::Kitchensink::Inventory::AddItem()']]], ['addleaf_16',['AddLeaf',['../classtram_1_1_octree.html#af27324144ece2995f714d7fb6a9a802d',1,'tram::Octree']]], ['addlight_17',['AddLight',['../namespacetram_1_1_render_1_1_light_tree.html#aad6c0b080cf76a2e64216adc9318807e',1,'tram::Render::LightTree']]], ['addline_18',['AddLine',['../namespacetram_1_1_render.html#aaf8ef81eae0da772762ff835a3a24536',1,'tram::Render']]], ['addlineaabb_19',['AddLineAABB',['../namespacetram_1_1_render.html#aa2585f6dc9fbeddf62db686a5dbafbea',1,'tram::Render']]], ['addlinemarker_20',['AddLineMarker',['../namespacetram_1_1_render.html#ae5ab2f07c068f59f0ded62a742e05fdf',1,'tram::Render']]], ['addlistener_21',['AddListener',['../structtram_1_1_event.html#a912991992322aab15d777e22848332cb',1,'tram::Event::AddListener(event_t type, Entity *entity)'],['../structtram_1_1_event.html#af1a090951d04d0b72b10020a273d8f05',1,'tram::Event::AddListener(event_t type, EntityComponent *component)'],['../structtram_1_1_event.html#a5610bb4c11e4610b9b13ea2301e14f39',1,'tram::Event::AddListener(event_t type, void(*handler)(Event &event))'],['../structtram_1_1_event.html#a817b7223a8818863e27dba112ade5930',1,'tram::Event::AddListener(event_t type, void *data, void(*handler)(Event &event, void *data))']]], ['addnew_22',['AddNew',['../classtram_1_1_stack_pool.html#a4f26be1e8228843b1d4928fbd584997e',1,'tram::StackPool::AddNew()'],['../classtram_1_1_pool.html#a2b0b341946b782acc6ca1959b7452488',1,'tram::Pool::AddNew()'],['../classtram_1_1_stack.html#aef5ef45fb8c20c2f54ebcb7953be1556',1,'tram::Stack::AddNew()']]], ['addpoint_23',['AddPoint',['../classtram_1_1_transition.html#a0abe4ca65b69601118f03ed677b276c0',1,'tram::Transition']]], ['addreference_24',['AddReference',['../classtram_1_1_resource.html#ae12c04585a9bf0e7f6f14e394d649978',1,'tram::Resource']]], ['addsingleresult_25',['addSingleResult',['../structtram_1_1_physics_1_1_a_p_i_1_1_shapecast_callback.html#ab75650c5457a0594da168d17a03dab9f',1,'tram::Physics::API::ShapecastCallback']]], ['addsound_26',['AddSound',['../classtram_1_1_ext_1_1_kitchensink_1_1_sound_table.html#a8d4546e389d3135619016bd4ad493bc2',1,'tram::Ext::Kitchensink::SoundTable']]], ['addsphere_27',['AddSphere',['../namespacetram_1_1_render.html#ac8426b2175dd44cfee749c08ae81583c',1,'tram::Render']]], ['addstate_28',['AddState',['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_table.html#af80681af9d6461c2545e1ba6f3559a0d',1,'tram::Ext::Kitchensink::AnimationTable']]], ['addstatespace_29',['AddStateSpace',['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_table.html#a4ccd358ff8f03863bb1c431931175c8d',1,'tram::Ext::Kitchensink::AnimationTable']]], ['addtext_30',['AddText',['../namespacetram_1_1_render.html#acb324f6e78d295296dd65efb3d3071af',1,'tram::Render::AddText(vec3 pos, const char *text, color_t color)'],['../namespacetram_1_1_render.html#af0419e9b99eb8d74ca41fd30f32e3e13',1,'tram::Render::AddText(float x, float y, const char *text, color_t color)']]], ['addtransition_31',['AddTransition',['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_table.html#abb6ce7a99352a9ed067351ed8598a321',1,'tram::Ext::Kitchensink::AnimationTable::AddTransition(AnimStateTransitionDefault)'],['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_table.html#a1d0ea0b121a54d5ecee11eda9b8a621c',1,'tram::Ext::Kitchensink::AnimationTable::AddTransition(AnimStateTransitionFrom)'],['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_table.html#a3e2e0645eebf89ec94fa0e8352503c3b',1,'tram::Ext::Kitchensink::AnimationTable::AddTransition(AnimStateTransitionInto)']]], ['advance_32',['Advance',['../classtram_1_1_path_follower.html#a3517e3cd4fbc2f47b7a4b46743bcbaa0',1,'tram::PathFollower']]], ['allocate_33',['allocate',['../classtram_1_1_stack_pool.html#a6ce93b4a50a7e007acd3bbfdf8482d84',1,'tram::StackPool']]], ['allocatedata_34',['AllocateData',['../structtram_1_1_event.html#ae0dda15a570f291dc9efd56058027f35',1,'tram::Event::AllocateData(size_t ammount)'],['../structtram_1_1_event.html#a0e33b78a59445000e7fbe10f97e32305',1,'tram::Event::AllocateData()'],['../structtram_1_1_event.html#acdd37976a6d83ee51522e128feb72039',1,'tram::Event::AllocateData(const T &data)'],['../structtram_1_1_message.html#a14d91051b699371994bacfd7d0cf0a6d',1,'tram::Message::AllocateData(size_t ammount)'],['../structtram_1_1_message.html#a944e18391daa913fad2807ba33463a8e',1,'tram::Message::AllocateData()'],['../structtram_1_1_message.html#abc663230fe9deda62a6b1da94d65b90b',1,'tram::Message::AllocateData(const T &data)']]], ['and_35',['And',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#aec3fd459b2220d63b3aae47c2dfbb71a',1,'tram::Ext::Kitchensink::QuestVariable']]], ['animation_36',['Animation',['../classtram_1_1_render_1_1_animation.html#aeb52730a357d678921b547c4eae16405',1,'tram::Render::Animation']]], ['animation_5flist_37',['animation_list',['../namespacetram_1_1_render.html#a7dd412c7626de34a2b2e4fd4d750dd4a',1,'tram::Render']]], ['animationcomponent_38',['AnimationComponent',['../classtram_1_1_animation_component.html#af773091315f64f349184c6f9055dc5ad',1,'tram::AnimationComponent']]], ['animationtable_39',['AnimationTable',['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_table.html#a1cb9d318dcab93ae71a377f195ceb3bc',1,'tram::Ext::Kitchensink::AnimationTable']]], ['applydynamics_40',['ApplyDynamics',['../classtram_1_1_f_p_s_controller_component.html#a396834cd7a573800365e68a4aa49122b',1,'tram::FPSControllerComponent::ApplyDynamics()'],['../classtram_1_1_raycast_controller_component.html#a63b3bdb3d6d211eb1ce407a900b612a7',1,'tram::RaycastControllerComponent::ApplyDynamics()']]], ['applyeffect_41',['ApplyEffect',['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container.html#aed0fd0323979e353abd8c61dcb9384a8',1,'tram::Ext::Kitchensink::AttributeContainer']]], ['assertdependency_42',['AssertDependency',['../namespacetram_1_1_system.html#ae343978bd8ac9ddbc48dbffa5aea2f49',1,'tram::System']]], ['asserttype_43',['AssertType',['../classtram_1_1_value.html#a3e8a6869e6364b63c6bc73e7ffb49916',1,'tram::Value']]], ['audiocomponent_44',['AudioComponent',['../classtram_1_1_audio_component.html#aff631c814eda2b4e8b615ebe9a4217f5',1,'tram::AudioComponent']]], ['awaken_45',['Awaken',['../classtram_1_1_physics_component.html#aa05aa42d0ba5486d18a5c6951c2dcf7a',1,'tram::PhysicsComponent']]], ['awakenrigidbody_46',['AwakenRigidbody',['../namespacetram_1_1_physics_1_1_a_p_i.html#a165f12c0aa8cf05d459e9ceb71c5a629',1,'tram::Physics::API']]] ]; ================================================ FILE: docs/cppapi/search/functions_1.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/functions_1.js ================================================ var searchData= [ ['back_0',['back',['../classtram_1_1_queue.html#abdeabcac12516595916ee8f3b600e392',1,'tram::Queue']]], ['begin_1',['begin',['../classtram_1_1_pool.html#aae84df45d298efe25e64b9f688f97916',1,'tram::Pool::begin()'],['../classtram_1_1_stack_pool.html#a4124c926206e0e06403f8cff5a999b43',1,'tram::StackPool::begin()']]], ['begin_2',['Begin',['../namespacetram_1_1_g_u_i.html#af4ecd3d74bffd0e8e5fd26061418ef4f',1,'tram::GUI']]], ['bindkeyboardkey_3',['BindKeyboardKey',['../namespacetram_1_1_u_i.html#aa3f058ce3fd0e6b76f3224eb80f547c9',1,'tram::UI::BindKeyboardKey(KeyboardKey key, keyboardaction_t action)'],['../namespacetram_1_1_u_i.html#a49763cc0300d866370805b94a99f36fd',1,'tram::UI::BindKeyboardKey(KeyboardKey key, void(*action)())'],['../namespacetram_1_1_u_i.html#a581823cdaa8ed3cef6f48d2610961511',1,'tram::UI::BindKeyboardKey(KeyboardKey key, void(*action)(KeyboardKey))']]], ['binduniformblock_4',['BindUniformBlock',['../classtram_1_1_render_1_1_a_p_i_1_1_linked_shader.html#aa69a85e88039257fec2cdd5feaee0fb0',1,'tram::Render::API::LinkedShader::BindUniformBlock()'],['../namespacetram_1_1_render_1_1_a_p_i.html#a507d7fd9947ed6152f9593c6611a91d4',1,'tram::Render::API::BindUniformBlock(const char *name, uint32_t binding)']]], ['blitdot_5',['BlitDot',['../namespacetram_1_1_render_1_1_a_p_i.html#ad8c4f13e2fd00320c101a35f7b075d08',1,'tram::Render::API']]], ['blitline_6',['BlitLine',['../namespacetram_1_1_render_1_1_a_p_i.html#aa57aa8935b2da2b2c1818efd4a790a8d',1,'tram::Render::API']]], ['blitlineoctant0_7',['BlitLineOctant0',['../namespacetram_1_1_render_1_1_a_p_i.html#abad5cda7dcbf4bc90ed26a65e9cc5fde',1,'tram::Render::API']]], ['blitlineoctant1_8',['BlitLineOctant1',['../namespacetram_1_1_render_1_1_a_p_i.html#ae135a0bcb76598854ab17a5edafbb69c',1,'tram::Render::API']]], ['box_9',['Box',['../structtram_1_1_physics_1_1_collision_shape.html#a2fe0b464de813a7b9e4756ed81882bd3',1,'tram::Physics::CollisionShape']]], ['breakable_10',['Breakable',['../classtram_1_1_ext_1_1_kitchensink_1_1_breakable.html#a391835e621041d6ff5d42830deb4551d',1,'tram::Ext::Kitchensink::Breakable']]], ['button_11',['Button',['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a1cdc713f455d7e0df9815ce1c75b67b9',1,'tram::Ext::Kitchensink::Button::Button()'],['../namespacetram_1_1_g_u_i.html#a36df4e7f162a96882c85976374864e7a',1,'tram::GUI::Button()']]] ]; ================================================ FILE: docs/cppapi/search/functions_10.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/functions_10.js ================================================ var searchData= [ ['quatlookat_0',['QuatLookAt',['../namespacetram.html#a9a9788a262342a3b6cf9b08117faedcf',1,'tram']]], ['quest_1',['Quest',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest.html#a683519bebd8b57ca04103a79858ca885',1,'tram::Ext::Kitchensink::Quest']]], ['questentity_2',['QuestEntity',['../classtram_1_1_ext_1_1_kitchensink_1_1_quest_entity.html#a96675f3d8b439116d9fff376f212efbb',1,'tram::Ext::Kitchensink::QuestEntity']]], ['questvariable_3',['QuestVariable',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a59fa09daf71db92b76d7543e45dabefd',1,'tram::Ext::Kitchensink::QuestVariable::QuestVariable()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#aa398510013c7875c7ac6d3d1b0b3fdd2',1,'tram::Ext::Kitchensink::QuestVariable::QuestVariable(const QuestVariable &)']]], ['queue_4',['Queue',['../classtram_1_1_queue.html#adbc2d690665b980a97b26eb2cf0fb4e4',1,'tram::Queue::Queue()=delete'],['../classtram_1_1_queue.html#a9a53c8973a5cb86f76b039ef0f3d0ee6',1,'tram::Queue::Queue(const Queue &)=delete'],['../classtram_1_1_queue.html#a710adca95612b66427f7f6cc918492ef',1,'tram::Queue::Queue(Queue &&)=delete'],['../classtram_1_1_queue.html#ad797d5d45ded6116bc9bbd23e8848e9d',1,'tram::Queue::Queue(const char *name, size_t count)']]] ]; ================================================ FILE: docs/cppapi/search/functions_11.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/functions_11.js ================================================ var searchData= [ ['radiobutton_0',['RadioButton',['../namespacetram_1_1_g_u_i.html#a1488c8699f98eaaefd9dab7d1e220604',1,'tram::GUI']]], ['rasterizetriangle_1',['RasterizeTriangle',['../namespacetram_1_1_render_1_1_a_p_i.html#a437bf04f6a5b4400240d03c0349935bf',1,'tram::Render::API']]], ['rasterizetrianglelightmapped_2',['RasterizeTriangleLightmapped',['../namespacetram_1_1_render_1_1_a_p_i.html#a5fbc57a2c1adf8740ab7744fd8dbacfd',1,'tram::Render::API']]], ['rasterizetriangleshadedtextured_3',['RasterizeTriangleShadedTextured',['../namespacetram_1_1_render_1_1_a_p_i.html#a43eeada3415ce497712a8e7c5d341a7a',1,'tram::Render::API']]], ['raycast_4',['Raycast',['../namespacetram_1_1_physics.html#aa3616a0153cf20031eff7b3aba43e7f9',1,'tram::Physics::Raycast()'],['../namespacetram_1_1_physics_1_1_a_p_i.html#ab6725b1082075301a1d07f52948788fa',1,'tram::Physics::API::Raycast()']]], ['raycastcontrollercomponent_5',['RaycastControllerComponent',['../classtram_1_1_raycast_controller_component.html#a5b2d1abffafb92a86d9e48ead1eec5d9',1,'tram::RaycastControllerComponent']]], ['raytriangleintersection_6',['RayTriangleIntersection',['../namespacetram.html#a709b43407c76d65a5e0e9567d55fb212',1,'tram']]], ['read_5ffloat32_7',['read_float32',['../classtram_1_1_file_reader_parser.html#af8a5e8c5ed7909608b3c75a2c75f6e7d',1,'tram::FileReaderParser::read_float32()'],['../classtram_1_1_text_reader_parser.html#af178bb228cb9309753ca06926faf7142',1,'tram::TextReaderParser::read_float32()'],['../classtram_1_1_file.html#a49b122601c017e1964144c23cbe290fd',1,'tram::File::read_float32()']]], ['read_5ffloat64_8',['read_float64',['../classtram_1_1_file_reader_parser.html#a5946a704dfee7567c528c50d02bcf74a',1,'tram::FileReaderParser::read_float64()'],['../classtram_1_1_text_reader_parser.html#aadab4b54c1468cb34f498da0403d919d',1,'tram::TextReaderParser::read_float64()'],['../classtram_1_1_file.html#ac11afdd957e7a113e25c101eea4ac241',1,'tram::File::read_float64()']]], ['read_5fint16_9',['read_int16',['../classtram_1_1_file_reader_parser.html#a6589a27772f1c001af13d50a0111be72',1,'tram::FileReaderParser::read_int16()'],['../classtram_1_1_text_reader_parser.html#a99abb84482da2a05ca31f6099c5e9fad',1,'tram::TextReaderParser::read_int16()'],['../classtram_1_1_file.html#a5d7ea9f1ad7cb867061aea6a4ed1b89d',1,'tram::File::read_int16()']]], ['read_5fint32_10',['read_int32',['../classtram_1_1_file_reader_parser.html#a9f21c9d82fd1ddbe3170d41e9c4454f8',1,'tram::FileReaderParser::read_int32()'],['../classtram_1_1_file.html#a225dfcebd4c490f19388cfb7aca8e0a6',1,'tram::File::read_int32()'],['../classtram_1_1_text_reader_parser.html#a7b891300d2c4c863fed16dccba4566cd',1,'tram::TextReaderParser::read_int32()']]], ['read_5fint64_11',['read_int64',['../classtram_1_1_file.html#af10fb5448d6e77230bdc268d328c0857',1,'tram::File::read_int64()'],['../classtram_1_1_text_reader_parser.html#ab4d063176ad5ddb665980b05f4162316',1,'tram::TextReaderParser::read_int64()'],['../classtram_1_1_file_reader_parser.html#ad20fc7bfba19d51c9ade3b5a4d07f0e0',1,'tram::FileReaderParser::read_int64()']]], ['read_5fint8_12',['read_int8',['../classtram_1_1_file.html#a039568453770acbc144c9fdce0f3fc68',1,'tram::File::read_int8()'],['../classtram_1_1_file_reader_parser.html#ada15ac5d1a3d84549898524e2b1faaec',1,'tram::FileReaderParser::read_int8()'],['../classtram_1_1_text_reader_parser.html#ac2727568c3a10f2e173ec4179f3e354e',1,'tram::TextReaderParser::read_int8()']]], ['read_5fline_13',['read_line',['../classtram_1_1_file_reader_parser.html#a8d6d0fc588569a550368355fb99c5724',1,'tram::FileReaderParser::read_line()'],['../classtram_1_1_text_reader_parser.html#a9bcbf9cc72a0631af8222c378dc767b8',1,'tram::TextReaderParser::read_line()'],['../classtram_1_1_file.html#aaa1c1eca4e5feb35b576da5533408b17',1,'tram::File::read_line()']]], ['read_5fname_14',['read_name',['../classtram_1_1_file_reader_parser.html#acc84d2050fc037feebe7e97681baf986',1,'tram::FileReaderParser::read_name()'],['../classtram_1_1_text_reader_parser.html#a467ff7b32859f86869bf2134e3b5f7b9',1,'tram::TextReaderParser::read_name()'],['../classtram_1_1_file.html#aca554d85c9430ee8d39ddb16c41e72e3',1,'tram::File::read_name()']]], ['read_5fstring_15',['read_string',['../classtram_1_1_file_reader_parser.html#a0bac8a5eb06119787111423ce520c005',1,'tram::FileReaderParser::read_string()'],['../classtram_1_1_text_reader_parser.html#a51d680fae0e08d2b468d114192d36516',1,'tram::TextReaderParser::read_string()'],['../classtram_1_1_file.html#a384df5b223c9e0d2535a622e282a356e',1,'tram::File::read_string()']]], ['read_5ftoken_16',['read_token',['../classtram_1_1_text_reader_parser.html#ad02dd97ca99e1b028a5c662a7c46f1d3',1,'tram::TextReaderParser::read_token()'],['../classtram_1_1_file.html#a49ba33b0139ddde95daf7f88adbeca79',1,'tram::File::read_token()'],['../classtram_1_1_file_reader_parser.html#a398699124bf0cba7680196ca16425bf3',1,'tram::FileReaderParser::read_token()=0']]], ['read_5fuint16_17',['read_uint16',['../classtram_1_1_file_reader_parser.html#a8a80b30acb200e9eeebacdf2da6d931d',1,'tram::FileReaderParser::read_uint16()'],['../classtram_1_1_text_reader_parser.html#a25ef758dce299e3013327c59fa8276de',1,'tram::TextReaderParser::read_uint16()'],['../classtram_1_1_file.html#a64635a9d28e30c7300d6a7459302d723',1,'tram::File::read_uint16()']]], ['read_5fuint32_18',['read_uint32',['../classtram_1_1_file_reader_parser.html#af1be7fcf9c20d57a470425db1d01c973',1,'tram::FileReaderParser::read_uint32()'],['../classtram_1_1_text_reader_parser.html#af27393ec11a775c33135bdf8af3ee14c',1,'tram::TextReaderParser::read_uint32()'],['../classtram_1_1_file.html#a153f0eccaaaca9cacdb4bb082060bcbc',1,'tram::File::read_uint32()']]], ['read_5fuint64_19',['read_uint64',['../classtram_1_1_text_reader_parser.html#a8d1e49afadde9b3ac293308b3f72394f',1,'tram::TextReaderParser::read_uint64()'],['../classtram_1_1_file.html#a48c7cadf209801e17f3cc2f7b3bb877e',1,'tram::File::read_uint64()'],['../classtram_1_1_file_reader_parser.html#adab7efdbacf1949c1b79510804f58827',1,'tram::FileReaderParser::read_uint64()=0']]], ['read_5fuint8_20',['read_uint8',['../classtram_1_1_file_reader_parser.html#a5527b551c2f71b78d9ae3e8c00b61d6e',1,'tram::FileReaderParser::read_uint8()'],['../classtram_1_1_file.html#a4f4075e222dd524d4132b616225d191d',1,'tram::File::read_uint8()'],['../classtram_1_1_text_reader_parser.html#a72087b8d7d3fe5aae9195ac35edb5023',1,'tram::TextReaderParser::read_uint8()']]], ['recalculate_21',['Recalculate',['../classtram_1_1_ext_1_1_kitchensink_1_1_attribute_info.html#ab2c7811e4fd4d8ef5c00a8085d0eef4b',1,'tram::Ext::Kitchensink::AttributeInfo']]], ['recoverfromcollisions_22',['RecoverFromCollisions',['../classtram_1_1_f_p_s_controller_component.html#a14fa87139f0ba7e8325019afb05f56ff',1,'tram::FPSControllerComponent::RecoverFromCollisions()'],['../classtram_1_1_raycast_controller_component.html#ae97c6619effa4d637ecaca717798ba45',1,'tram::RaycastControllerComponent::RecoverFromCollisions()']]], ['recursivelyappendnexttopic_23',['RecursivelyAppendNextTopic',['../namespacetram_1_1_ext_1_1_kitchensink.html#a388f74aaa8aeb8efd221f91bf2014504',1,'tram::Ext::Kitchensink']]], ['refresh_24',['Refresh',['../classtram_1_1_animation_component.html#af951b71145c810f51d1c6c04feff431a',1,'tram::AnimationComponent']]], ['refreshaabb_25',['RefreshAABB',['../classtram_1_1_render_component.html#a51f449b6197db27708cbd4ebfb6ed433',1,'tram::RenderComponent']]], ['register_26',['Register',['../classtram_1_1_ext_1_1_kitchensink_1_1_attribute_info.html#a1ed7709d6bccc5c11c042e1f9062c4c8',1,'tram::Ext::Kitchensink::AttributeInfo::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#ad10e29486dbc5f775f99ad93f94b265c',1,'tram::Ext::Kitchensink::Button::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_breakable.html#a1de507d7dea92475ef9f2437f1e58e6f',1,'tram::Ext::Kitchensink::Breakable::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_water.html#aa1ea56987cb0695dbb7747307895107a',1,'tram::Ext::Kitchensink::Water::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_train.html#ae4baca0092d7c385ae72abe24f017e52',1,'tram::Ext::Kitchensink::Train::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_pickup.html#a0e0f4eb79e699f1e7c1ec86bd859e6b9',1,'tram::Ext::Kitchensink::Pickup::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_text.html#a2cfbebb081bb04c2c636f90378f62499',1,'tram::Ext::Kitchensink::DebugText::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_shape.html#aa0ac5e2d0194f5d8a000240e5fdb81aa',1,'tram::Ext::Kitchensink::DebugShape::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_autosave.html#a42d3c79e2604d3e8f7b66c13dbfa47cf',1,'tram::Ext::Kitchensink::TriggerAutosave::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_hurt.html#ad355370a396ef40aa776d75b1f5c8792',1,'tram::Ext::Kitchensink::TriggerHurt::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_once.html#a4772ae9b7dc27bc1b58d876381a22a23',1,'tram::Ext::Kitchensink::TriggerOnce::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_multiple.html#af34ee313ba0e8e9fa03ec43a45cd99de',1,'tram::Ext::Kitchensink::TriggerMultiple::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_push.html#a40042ae95b62c4b861aed2b5688f151d',1,'tram::Ext::Kitchensink::TriggerPush::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_remove.html#acc0a673bdbc61686390ddc48f8e93ed6',1,'tram::Ext::Kitchensink::TriggerRemove::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_teleport.html#ac43c05116add4165f154679954941b1a',1,'tram::Ext::Kitchensink::TriggerTeleport::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_player_movement.html#a22615e5cbc341c9b9b97fa83b64cf889',1,'tram::Ext::Kitchensink::TriggerPlayerMovement::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#aee7dc2dfd34cc554c1428c897e2ab043',1,'tram::Ext::Kitchensink::ItemClass::Register()'],['../classtram_1_1_crate.html#aff35e03d11ebc3c23ab1c10f80aeb109',1,'tram::Crate::Register()'],['../classtram_1_1_entity.html#a21f52a14480f7dec666418d7ba17524c',1,'tram::Entity::Register()'],['../structtram_1_1_event.html#a71beec0c04550efde19bc6e76e5b209d',1,'tram::Event::Register()'],['../structtram_1_1_message.html#a404d077230b30357e8f515ee5b93149a',1,'tram::Message::Register()'],['../structtram_1_1_signal.html#a4cec75e6f5a3987de0924f8c204565f8',1,'tram::Signal::Register()'],['../classtram_1_1_render_1_1_a_p_i_1_1_linked_shader.html#a4e8506ce47f417ec8d0b10d71acec396',1,'tram::Render::API::LinkedShader::Register()'],['../classtram_1_1_decoration.html#a1b74c5467bdfdcf8749f0b3c172832ad',1,'tram::Decoration::Register()'],['../classtram_1_1_light.html#aab4ab5b5a486c5b765906b62da2eaa46',1,'tram::Light::Register()'],['../classtram_1_1_marker.html#a6122424fbc20e0355ca793c26481d961',1,'tram::Marker::Register()'],['../classtram_1_1_sound.html#a588c740a125c4956b97155e89838884e',1,'tram::Sound::Register()'],['../classtram_1_1_static_world_object.html#a8e563a79c899fe488977537b60f5f051',1,'tram::StaticWorldObject::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory_manager.html#a38a603ab838ff6b5896f2a19f3c15e1c',1,'tram::Ext::Kitchensink::InventoryManager::Register()'],['../classtram_1_1_trigger.html#a695e8a121f4c3e42dbe4afcd1adecbe2',1,'tram::Trigger::Register()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_package.html#a084b23b5977c656c8b6792c3e2704df7',1,'tram::Ext::Kitchensink::AIPackage::Register()'],['../namespacetram_1_1_scriptable_type.html#a1920e75c5a3e8de81df686d8f4073d04',1,'tram::ScriptableType::Register()'],['../namespacetram_1_1_settings.html#a56e0d9f488dcff9a350929bf4ef3f8d5',1,'tram::Settings::Register(bool &value, const char *name, uint32_t flags)'],['../namespacetram_1_1_settings.html#ae777d5373a811ea16bac85f681608054',1,'tram::Settings::Register(float &value, const char *name, uint32_t flags)'],['../namespacetram_1_1_settings.html#aa67d64e20ae324efb9693944c7a56823',1,'tram::Settings::Register(int32_t &value, const char *name, uint32_t flags)'],['../namespacetram_1_1_settings.html#a8a4aec9c01b32664d1849fe0afde230c',1,'tram::Settings::Register(uint32_t &value, const char *name, uint32_t flags)'],['../namespacetram_1_1_system.html#aee7d79683193e5c01dab72b3bd84e710',1,'tram::System::Register()']]], ['registerfont_27',['RegisterFont',['../namespacetram_1_1_g_u_i.html#a7b243fa8e17bd3e09a70b94f9f0a8054',1,'tram::GUI']]], ['registerkeyboardaction_28',['RegisterKeyboardAction',['../namespacetram_1_1_u_i.html#a01f1e35610c8d42fbf3f65a1b192dcb9',1,'tram::UI']]], ['registermaterialtype_29',['RegisterMaterialType',['../namespacetram_1_1_render.html#a86482f81f22e15a053cf87bd77b863fa',1,'tram::Render']]], ['registerrenderenvironmentmapshortcut_30',['RegisterRenderEnvironmentMapShortcut',['../namespacetram_1_1_ext_1_1_kitchensink.html#aac57df31b8265b053fcc5470b852a85a',1,'tram::Ext::Kitchensink']]], ['registershader_31',['RegisterShader',['../namespacetram_1_1_render_1_1_a_p_i.html#a63b87913acfc6af2fd7e39754dc1522d',1,'tram::Render::API']]], ['registertype_32',['RegisterType',['../classtram_1_1_entity.html#a9611e07ae9178831c24f65d35e936199',1,'tram::Entity::RegisterType(name_t name, entity_make, entity_clear, const FieldInfo *fields, size_t fieldcount)'],['../classtram_1_1_entity.html#abf07867be6c8d765620cf6ad3a1b2525',1,'tram::Entity::RegisterType(name_t name, entity_make, entity_clear, std::initializer_list< FieldInfo > fields)'],['../classtram_1_1_entity.html#a688ecc3f647b88edae8704c9330d2afe',1,'tram::Entity::RegisterType(name_t name, entity_make, entity_clear, const Type *fields, size_t fieldcount)']]], ['registeruniformblock_33',['RegisterUniformBlock',['../classtram_1_1_render_1_1_a_p_i_1_1_linked_shader.html#ad06e322a21edacc9e1aa8a99b997f1b2',1,'tram::Render::API::LinkedShader']]], ['registervertexdefinition_34',['RegisterVertexDefinition',['../namespacetram_1_1_render.html#a457bd7e3ddb309251cb2cd0ffe1a5b37',1,'tram::Render']]], ['registervertexformat_35',['RegisterVertexFormat',['../namespacetram_1_1_render.html#a4ee55080a07d32caee9f42ce596d7e18',1,'tram::Render']]], ['remove_36',['Remove',['../namespacetram_1_1_stats.html#a9686b4d0c7f066e945be48a67719d799',1,'tram::Stats::Remove()'],['../classtram_1_1_ext_1_1_menu_1_1_menu.html#aa9d042bb7757a4a95a634582c36eb7db',1,'tram::Ext::Menu::Menu::Remove()'],['../classtram_1_1_world_cell.html#ab9fc8c0a06f6867f636663a55721f338',1,'tram::WorldCell::Remove()'],['../classtram_1_1_hashmap.html#aa5ec795eaaa273c57e3362be015a9dcb',1,'tram::Hashmap::Remove(UID key)'],['../classtram_1_1_hashmap.html#aaa8261398da94654cde9e61690810199',1,'tram::Hashmap::Remove(uint32_t key)'],['../classtram_1_1_octree.html#a8496d30bf8f12e11b61923a06ee14e3d',1,'tram::Octree::Remove(uint32_t node)'],['../classtram_1_1_octree.html#a712401b2423a34b64d7205459ddacf55',1,'tram::Octree::Remove(Node *node)'],['../classtram_1_1_pool.html#a60d25b55dc178234fd501c6329c1b7aa',1,'tram::Pool::Remove()'],['../classtram_1_1_stack.html#a3cca2aef7b2091fff5bd9772b3f19edc',1,'tram::Stack::Remove()']]], ['removeaudiobuffer_37',['RemoveAudioBuffer',['../namespacetram_1_1_audio_1_1_a_p_i.html#a0724c17fd3523893b97ee2a6aa8a090d',1,'tram::Audio::API']]], ['removeaudiosource_38',['RemoveAudioSource',['../namespacetram_1_1_audio_1_1_a_p_i.html#af490232ec82451014fb9e858f3feca68',1,'tram::Audio::API']]], ['removecharacter_39',['RemoveCharacter',['../classtram_1_1_ext_1_1_kitchensink_1_1_faction.html#abe0e002aef7acae2e30fc9c756777b1f',1,'tram::Ext::Kitchensink::Faction']]], ['removedrawlistentry_40',['RemoveDrawListEntry',['../namespacetram_1_1_render_1_1_a_p_i.html#a4a13fea5192ecde4d6483fd7ac4109d2',1,'tram::Render::API']]], ['removeeffect_41',['RemoveEffect',['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container.html#a47b495de8ee956c0871fc192ab4fa224',1,'tram::Ext::Kitchensink::AttributeContainer']]], ['removehierarchy_42',['RemoveHierarchy',['../classtram_1_1_a_a_b_b_tree.html#aa064aa5b6071d82fe3dc84bb08c07474',1,'tram::AABBTree']]], ['removeitem_43',['RemoveItem',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#a8de2d037b208dbd8efc4976e3a0a8547',1,'tram::Ext::Kitchensink::Inventory::RemoveItem()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_list_inventory_manager.html#abd31745962ddee971598846630493ddc',1,'tram::Ext::Kitchensink::ListInventoryManager::RemoveItem()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory_manager.html#ab2b80ac808e4806ab9302a8e63a6c9be',1,'tram::Ext::Kitchensink::InventoryManager::RemoveItem()']]], ['removeleaf_44',['RemoveLeaf',['../namespacetram_1_1_render_1_1_a_a_b_b.html#a0714a6a654730b3f04222f08c26c8eec',1,'tram::Render::AABB::RemoveLeaf()'],['../classtram_1_1_octree.html#a9b95a094d1299eac280c2baaeef43f3b',1,'tram::Octree::RemoveLeaf()'],['../classtram_1_1_a_a_b_b_tree.html#a9efb144bb94afd82a7c58a0ecd16a1a6',1,'tram::AABBTree::RemoveLeaf()']]], ['removelight_45',['RemoveLight',['../namespacetram_1_1_render_1_1_light_tree.html#acbb22184ab1cca95ca3dd1f250e3f12d',1,'tram::Render::LightTree']]], ['removelistener_46',['RemoveListener',['../structtram_1_1_event.html#a092d09e0b63277a8fbc77e92c0a61be5',1,'tram::Event']]], ['removereference_47',['RemoveReference',['../classtram_1_1_resource.html#a4c975d7c7ef4a34ac9b2dc72977e10f9',1,'tram::Resource']]], ['render_48',['Render',['../namespacetram_1_1_render.html#a5862ead09843f2489307cec433956d17',1,'tram::Render']]], ['rendercomponent_49',['RenderComponent',['../classtram_1_1_render_component.html#aa32cca5b26feda97cbbed341d6633285',1,'tram::RenderComponent']]], ['renderenvironmentmaps_50',['RenderEnvironmentMaps',['../namespacetram_1_1_ext_1_1_kitchensink.html#aad417990ff2a73e06c72f341d12c1c9b',1,'tram::Ext::Kitchensink']]], ['renderframe_51',['RenderFrame',['../namespacetram_1_1_render_1_1_a_p_i.html#a0d75088dd180366fb45cb86654694db9',1,'tram::Render::API']]], ['renderresult_52',['RenderResult',['../namespacetram_1_1_audio_1_1_spatial.html#a4fce28512165221d8874ab495d005804',1,'tram::Audio::Spatial']]], ['reparent_53',['Reparent',['../classtram_1_1_animation_component.html#aaa1fa307b6434b4f33232fd2fb831590',1,'tram::AnimationComponent']]], ['reporterrorwarning_54',['reportErrorWarning',['../classtram_1_1_physics_1_1_a_p_i_1_1_physics_debug_draw.html#a0c323eedacd1cf9f7cd2d5c7ef4be405',1,'tram::Physics::API::PhysicsDebugDraw']]], ['requestanimationcomponent_55',['RequestAnimationComponent',['../classtram_1_1_decoration.html#aa0c8b3925860c63caa0c525c9160195d',1,'tram::Decoration']]], ['requestresource_56',['RequestResource',['../namespacetram_1_1_async.html#a9db009e1493d70c2ce388b2910e32fa2',1,'tram::Async::RequestResource(EntityComponent *requester, Resource *resource)'],['../namespacetram_1_1_async.html#aa2234c4cb0590d5672aa3bf4bb78703f',1,'tram::Async::RequestResource(void(*callback)(void *data), void *data, Resource *resource)']]], ['reset_57',['Reset',['../classtram_1_1_stack.html#a4718060e0b69b752026d144a5db7e152',1,'tram::Stack']]], ['reset_58',['reset',['../classtram_1_1_stack_pool.html#aed5f3ae73582e286a4f9964fc65e73a0',1,'tram::StackPool::reset()'],['../classtram_1_1_stack.html#a3d06fa32cc63d712025d3090f03887b3',1,'tram::Stack::reset()']]], ['reset_59',['Reset',['../classtram_1_1_stack_pool.html#a45ca522e92ec2faada60b18dad845832',1,'tram::StackPool']]], ['reset_5ferror_60',['reset_error',['../classtram_1_1_text_reader_parser.html#ac24ef033c2f6c0db5ebb5aad736a0435',1,'tram::TextReaderParser::reset_error()'],['../classtram_1_1_file_reader_parser.html#a9efa5234488245dbb7918bfdd5bc41bd',1,'tram::FileReaderParser::reset_error()']]], ['reset_5fflags_61',['reset_flags',['../classtram_1_1_file.html#a5c4dc235347eed3842168ad548d1d5a6',1,'tram::File']]], ['resetcollisions_62',['ResetCollisions',['../classtram_1_1_trigger_component.html#a78db310fadbc1c2c572fa7e7deaf93c8',1,'tram::TriggerComponent']]], ['resetmove_63',['ResetMove',['../classtram_1_1_raycast_controller_component.html#a9f0a5b5809b046971e2b8f23d34f4838',1,'tram::RaycastControllerComponent::ResetMove()'],['../classtram_1_1_f_p_s_controller_component.html#a5302db1fe5d853e5bb0845ea5b0fa5f5',1,'tram::FPSControllerComponent::ResetMove()']]], ['resource_64',['Resource',['../classtram_1_1_resource.html#a634805edb61d305a1ed69e35dbe4aeb3',1,'tram::Resource']]], ['resourceproxy_65',['ResourceProxy',['../classtram_1_1_resource_proxy.html#ac391d66e8b3b4a5da5c27e8b29d3086c',1,'tram::ResourceProxy']]], ['resourceready_66',['ResourceReady',['../classtram_1_1_entity_component.html#a7f860b05911af126e8bd152492466b40',1,'tram::EntityComponent']]], ['restorecolor_67',['RestoreColor',['../namespacetram_1_1_g_u_i.html#a13a111a88e62cb6d8dd4434c22881dc5',1,'tram::GUI']]], ['restorefont_68',['RestoreFont',['../namespacetram_1_1_g_u_i.html#a2750747aff85f20a25ae9bb33dd72bec',1,'tram::GUI']]], ['rgbcolor_69',['RGBColor',['../namespacetram_1_1_render_1_1_a_p_i.html#a53824581d902c1e57599bd544a99a0fb',1,'tram::Render::API']]], ['rotateaabb_70',['RotateAABB',['../namespacetram.html#aecd3454b9944728f9e8beca79fb86a4b',1,'tram::RotateAABB(vec3 &min, vec3 &max, mat4 rotation)'],['../namespacetram.html#ae55bcde03ae63b1ceec8fb99f4416a55',1,'tram::RotateAABB(vec3 &min, vec3 &max, quat rotation)']]], ['run_71',['Run',['../classtram_1_1_f_p_s_controller_component.html#a8cdc505ef5241f71136c2ff356e55615',1,'tram::FPSControllerComponent::Run()'],['../classtram_1_1_controller_component.html#a09830a27a27ef8b419a9cf9e60446121',1,'tram::ControllerComponent::Run()'],['../classtram_1_1_raycast_controller_component.html#a5d4e68ef39d6a803e86f9b6fed954995',1,'tram::RaycastControllerComponent::Run()']]] ]; ================================================ FILE: docs/cppapi/search/functions_12.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/functions_12.js ================================================ var searchData= [ ['sanitizedata_0',['SanitizeData',['../classtram_1_1_scriptable.html#a51e08621ef581d5991528c9b8e5b0134',1,'tram::Scriptable']]], ['save_1',['Save',['../namespacetram_1_1_settings.html#af223a059620ac414794cb974b5923b77',1,'tram::Settings']]], ['saveimagetodisk_2',['SaveImageToDisk',['../namespacetram_1_1_platform.html#a62f1df4ce7fc6c46cd5cf3d348d1ac5d',1,'tram::Platform']]], ['scanlineconverttriangle_3',['ScanlineConvertTriangle',['../namespacetram_1_1_render_1_1_a_p_i.html#a50224ff62bbe42c2feaaf53994343449',1,'tram::Render::API']]], ['screenclose_4',['ScreenClose',['../namespacetram_1_1_u_i.html#aca1f573178e278ecf636cbe954aa6487',1,'tram::UI']]], ['screenresize_5',['ScreenResize',['../namespacetram_1_1_u_i.html#a8ca04b3e70a301b34b59d9aa2dde6282',1,'tram::UI']]], ['script_6',['Script',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a33142a6aaa4cbf2fab8888fc13a1477c',1,'tram::Ext::Kitchensink::QuestVariable']]], ['scriptable_7',['Scriptable',['../classtram_1_1_scriptable.html#a155369bc0f7a32617d2b9addb29daea7',1,'tram::Scriptable']]], ['send_8',['Send',['../structtram_1_1_message.html#a4c7116e2921062b636dbf57a152046a8',1,'tram::Message::Send(const Message &message)'],['../structtram_1_1_message.html#a9e97e1f98831bf5a18bf28a7f6ece953',1,'tram::Message::Send(const Message &message, float delay)']]], ['serialize_9',['Serialize',['../classtram_1_1_crate.html#a5e88d32ca11233d9f779f6182e808934',1,'tram::Crate::Serialize()'],['../classtram_1_1_decoration.html#a3be7afb5d539dfef12b41d9132b051ae',1,'tram::Decoration::Serialize()'],['../classtram_1_1_light.html#a1b28bc6a6961ed135f688efd63930d1d',1,'tram::Light::Serialize()'],['../classtram_1_1_marker.html#a5c9a6085109982a942bf4f08c8b6cb09',1,'tram::Marker::Serialize()'],['../classtram_1_1_player.html#abda0826d3fb3a3ef717a4b8704745b61',1,'tram::Player::Serialize()'],['../classtram_1_1_scriptable.html#a382a7e9d207bb65e475aa0012f9a2ac6',1,'tram::Scriptable::Serialize()'],['../classtram_1_1_sound.html#a41a7fbea5ee99ed28d7d586de0b8f794',1,'tram::Sound::Serialize()'],['../classtram_1_1_static_world_object.html#a7db1c49df54e8a3be9f874af923b196f',1,'tram::StaticWorldObject::Serialize()'],['../classtram_1_1_trigger.html#aa5b794eeecfb4a50395bb0013a5a0d2f',1,'tram::Trigger::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#ac06e45332876905bc76befbaf387b20f',1,'tram::Ext::Kitchensink::Button::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_text.html#aed52a8cb6a7d734e0da47fed6b687de3',1,'tram::Ext::Kitchensink::DebugText::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_shape.html#aa0fedc7fe85850fe25383fe839b67738',1,'tram::Ext::Kitchensink::DebugShape::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_autosave.html#ad054dbd579c90c448a21a741a4e14b43',1,'tram::Ext::Kitchensink::TriggerAutosave::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_hurt.html#a4b08beab647a0ea56a113ac035d4061a',1,'tram::Ext::Kitchensink::TriggerHurt::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_once.html#a25d11e16da07ac56161f2bc4b1ef7359',1,'tram::Ext::Kitchensink::TriggerOnce::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_multiple.html#aa87df5a1dc89880323ba8e5c306de546',1,'tram::Ext::Kitchensink::TriggerMultiple::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_push.html#a5311486ac974e5897071824f0d03ee6e',1,'tram::Ext::Kitchensink::TriggerPush::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_remove.html#aea1ec1ba74f293b5043d00d7899fb734',1,'tram::Ext::Kitchensink::TriggerRemove::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_teleport.html#a2ec405cef2fbc36f67215266939c4382',1,'tram::Ext::Kitchensink::TriggerTeleport::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_player_movement.html#a8235ebd895fe382b080d2e0a70e1738f',1,'tram::Ext::Kitchensink::TriggerPlayerMovement::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_quest_entity.html#aaca880ca76b51e2ce862148a895f61ab',1,'tram::Ext::Kitchensink::QuestEntity::Serialize()'],['../classtram_1_1_entity.html#a022989dd6fae21cdb65af24f26648488',1,'tram::Entity::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_train.html#aae6220e39a9664f2279dc889179b21b9',1,'tram::Ext::Kitchensink::Train::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_water.html#a91048dbb77098e96000955924add2157',1,'tram::Ext::Kitchensink::Water::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_breakable.html#aa00b9673f6363852e48c7522e202fd30',1,'tram::Ext::Kitchensink::Breakable::Serialize()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_pickup.html#aa3a8dd7dd03c77cc765e2f8e279f7802',1,'tram::Ext::Kitchensink::Pickup::Serialize()']]], ['serializestring_10',['SerializeString',['../classtram_1_1_player.html#aab33b3c6c47189f920a5d4f0bee78528',1,'tram::Player']]], ['set_11',['set',['../classtram_1_1_resource_proxy.html#a3481987ea325fd008b4dc41f4ab64dc1',1,'tram::ResourceProxy']]], ['set_12',['Set',['../namespacetram_1_1_settings.html#a33ec2bfcebab7ee764566a172fab7cb5',1,'tram::Settings']]], ['set_5fskip_5fnewline_13',['set_skip_newline',['../classtram_1_1_file_reader_parser.html#a593aa775ae47147f9328673822adb7d1',1,'tram::FileReaderParser']]], ['set_5fskip_5fvalue_14',['set_skip_value',['../classtram_1_1_file_reader_parser.html#a99a0e7fd09920b898ef0a275b202541a',1,'tram::FileReaderParser']]], ['setactivationcallback_15',['SetActivationCallback',['../classtram_1_1_trigger_component.html#ad30c23103020b9c9144d21835793f892',1,'tram::TriggerComponent']]], ['setactive_16',['SetActive',['../classtram_1_1_ext_1_1_camera_1_1_camera.html#ad08e1bd8a37aa799617220b19e2df508',1,'tram::Ext::Camera::Camera']]], ['setambientcolor_17',['SetAmbientColor',['../namespacetram_1_1_render.html#acb0e80ad32fe24d60dc62e58017b37b2',1,'tram::Render']]], ['setandstore_18',['SetAndStore',['../namespacetram_1_1_settings.html#ac51701ca424bff0d1a8251fc6b128643',1,'tram::Settings']]], ['setangularfactor_19',['SetAngularFactor',['../classtram_1_1_physics_component.html#a4a7c6f98fc1ff033c6988c35bc14c999',1,'tram::PhysicsComponent']]], ['setanimationcomponent_20',['SetAnimationComponent',['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_state_component.html#a353c54cd4574695e428894719609c595',1,'tram::Ext::Kitchensink::AnimationStateComponent']]], ['setanimationstatecomponent_21',['SetAnimationStateComponent',['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html#a3b750ab68f6cd76205f6f39a8b98f8e8',1,'tram::Ext::Kitchensink::AIAgent']]], ['setanimationtable_22',['SetAnimationTable',['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_state_component.html#aa549e6a492118321af2af17a1c342290',1,'tram::Ext::Kitchensink::AnimationStateComponent']]], ['setarmature_23',['SetArmature',['../classtram_1_1_render_component.html#ab67dd56c013753efd5c8fa9866daab88',1,'tram::RenderComponent']]], ['setattribute_24',['SetAttribute',['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container.html#a7e832ff6e766b735b531d9b7e9b10a64',1,'tram::Ext::Kitchensink::AttributeContainer::SetAttribute()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_character_class.html#ab809fb75392382fe9c0081e2b1c72248',1,'tram::Ext::Kitchensink::CharacterClass::SetAttribute()']]], ['setaudiosourcebuffer_25',['SetAudioSourceBuffer',['../namespacetram_1_1_audio_1_1_a_p_i.html#a66d344898a8b0355218f36cddc369046',1,'tram::Audio::API']]], ['setaudiosourcegain_26',['SetAudioSourceGain',['../namespacetram_1_1_audio_1_1_a_p_i.html#aa34a3e351de4035848dc1280ef3e824f',1,'tram::Audio::API']]], ['setaudiosourcepitch_27',['SetAudioSourcePitch',['../namespacetram_1_1_audio_1_1_a_p_i.html#aa3b7d9891305e368e07d7ad863d628c6',1,'tram::Audio::API']]], ['setaudiosourceposition_28',['SetAudioSourcePosition',['../namespacetram_1_1_audio_1_1_a_p_i.html#a273ec7fe95edfbd9414878e67eadaf4b',1,'tram::Audio::API']]], ['setaudiosourcerepeating_29',['SetAudioSourceRepeating',['../namespacetram_1_1_audio_1_1_a_p_i.html#a7420c760d8243ed9e24b2af3a77e4e2c',1,'tram::Audio::API']]], ['setaudiosourcevelocity_30',['SetAudioSourceVelocity',['../namespacetram_1_1_audio_1_1_a_p_i.html#a7a9b62489392c6a82eda4a2157cad570',1,'tram::Audio::API']]], ['setautoload_31',['SetAutoLoad',['../classtram_1_1_entity.html#a742a345ed3da6d6966040b4a2045ce8e',1,'tram::Entity']]], ['setautomaticloading_32',['SetAutomaticLoading',['../classtram_1_1_world_cell.html#afb21e78a8b34ebcb39f149f50436b859',1,'tram::WorldCell']]], ['setaxissensitivity_33',['SetAxisSensitivity',['../namespacetram_1_1_u_i.html#aafa7d6428092dcd22b4ea486c948baf5',1,'tram::UI']]], ['setbasedisposition_34',['SetBaseDisposition',['../classtram_1_1_ext_1_1_kitchensink_1_1_character.html#a250fa84700e6ae73eb75f343f8a7b1c2',1,'tram::Ext::Kitchensink::Character']]], ['setbobbing_35',['SetBobbing',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#afc8754d53b7ba8698791378dbda72007',1,'tram::Ext::Camera::FirstPersonCamera']]], ['setbobbingcallback_36',['SetBobbingCallback',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a9c90b959c76be84f182e826b60f4d1bb',1,'tram::Ext::Camera::FirstPersonCamera']]], ['setbobbingdistance_37',['SetBobbingDistance',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#ab1b10331c68852d99dadeaba25aae16d',1,'tram::Ext::Camera::FirstPersonCamera']]], ['setbobbingtilt_38',['SetBobbingTilt',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a647225bd7bd3d33fc1295b8e59945b1a',1,'tram::Ext::Camera::FirstPersonCamera']]], ['setbobspeed_39',['SetBobSpeed',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a34cc63ef60051ea61e79d460563d8806',1,'tram::Ext::Camera::FirstPersonCamera']]], ['setcharacterloyalty_40',['SetCharacterLoyalty',['../classtram_1_1_ext_1_1_kitchensink_1_1_faction.html#ad8d824372cef0f862a20d2e0e1cc6efc',1,'tram::Ext::Kitchensink::Faction']]], ['setcharacterrank_41',['SetCharacterRank',['../classtram_1_1_ext_1_1_kitchensink_1_1_faction.html#a4b2fb5b81f7d1d27dab2eac014eddef4',1,'tram::Ext::Kitchensink::Faction']]], ['setcollisiongroup_42',['SetCollisionGroup',['../classtram_1_1_f_p_s_controller_component.html#a198a3b9279dffb137f56bb510b65cf79',1,'tram::FPSControllerComponent::SetCollisionGroup()'],['../classtram_1_1_raycast_controller_component.html#a6588e19ca0bc87e0ddf3f53f6b938df4',1,'tram::RaycastControllerComponent::SetCollisionGroup()'],['../classtram_1_1_physics_component.html#a62ca80aadcd392cc94243f1a42d1b06e',1,'tram::PhysicsComponent::SetCollisionGroup()'],['../classtram_1_1_trigger_component.html#a924939c39095e5cf7444b00578423e75',1,'tram::TriggerComponent::SetCollisionGroup()']]], ['setcollisionmask_43',['SetCollisionMask',['../classtram_1_1_physics_component.html#a02d7278815c993d0c267002740e2cc10',1,'tram::PhysicsComponent::SetCollisionMask()'],['../classtram_1_1_trigger_component.html#aaa9f40c6c3afaddd4657b6a2e5ea35e4',1,'tram::TriggerComponent::SetCollisionMask()']]], ['setcollisions_44',['SetCollisions',['../classtram_1_1_controller_component.html#a005c65e23bba7635c05821a5bebbdf47',1,'tram::ControllerComponent']]], ['setcollisionsize_45',['SetCollisionSize',['../classtram_1_1_f_p_s_controller_component.html#a790794239c994c8c15f988edee64ae70',1,'tram::FPSControllerComponent::SetCollisionSize()'],['../classtram_1_1_raycast_controller_component.html#a83c8376ae644ba75c5caa09803e4e8ef',1,'tram::RaycastControllerComponent::SetCollisionSize()']]], ['setcolor_46',['SetColor',['../classtram_1_1_render_component.html#af17bf80e41504736aafbed51e68777cb',1,'tram::RenderComponent::SetColor()'],['../classtram_1_1_render_1_1_material.html#ac450fbb7d4e815d5d84aee35acf40fc8',1,'tram::Render::Material::SetColor()'],['../classtram_1_1_light_component.html#ac9245097981e9adcb4f31f83513a071b',1,'tram::LightComponent::SetColor()'],['../namespacetram_1_1_g_u_i.html#a7210e80143cdcc0ce28a57c0b283fca6',1,'tram::GUI::SetColor()']]], ['setconsolelogcallback_47',['SetConsoleLogCallback',['../namespacetram.html#aaf2fa22ee1b4ccc8fc03fe49402db0c5',1,'tram::SetConsoleLogCallback(void(int, const char *))'],['../namespacetram.html#ad6e944197c5e9252268255850e7d15fb',1,'tram::SetConsoleLogCallback(void(*callback)(int, const char *))']]], ['setcontents_48',['SetContents',['../classtram_1_1_disk_writer.html#a6430c8e4e068ca19c9b31f1d0899b34c',1,'tram::DiskWriter::SetContents()'],['../classtram_1_1_file_writer.html#a74186dc3ea104ae0fa72c23f96ef7e80',1,'tram::FileWriter::SetContents()']]], ['setcontrollercomponent_49',['SetControllerComponent',['../classtram_1_1_player_component.html#a8487102a9cb10c8c9b59e4aa8c0d4c56',1,'tram::PlayerComponent::SetControllerComponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html#a7740703b2a0dfef31440331972ca0bdf',1,'tram::Ext::Kitchensink::AIAgent::SetControllerComponent()']]], ['setcrouchspeed_50',['SetCrouchSpeed',['../classtram_1_1_f_p_s_controller_component.html#a576c462ea53d985f902085041cfafc72',1,'tram::FPSControllerComponent::SetCrouchSpeed()'],['../classtram_1_1_raycast_controller_component.html#ab9cc4edd8b6e0076ee4e6ffd0df8353c',1,'tram::RaycastControllerComponent::SetCrouchSpeed()']]], ['setcursor_51',['SetCursor',['../namespacetram_1_1_platform_1_1_window.html#af8f96fbc1d628f67ed4301d47d67120a',1,'tram::Platform::Window::SetCursor()'],['../namespacetram_1_1_u_i.html#a6ca596524ffb0c21621d8cfdcf9c5fbf',1,'tram::UI::SetCursor()']]], ['setcursordelayed_52',['SetCursorDelayed',['../namespacetram_1_1_g_u_i.html#a722e52d1cec8ee81a55e26dc1a4c63c8',1,'tram::GUI']]], ['setcursorposition_53',['SetCursorPosition',['../namespacetram_1_1_platform_1_1_window.html#aeadcf3d1d5fbf11485b74214f091819e',1,'tram::Platform::Window']]], ['setdebugdraw_54',['SetDebugDraw',['../classtram_1_1_world_cell.html#add3fba0e03d6c7e4b9ba05f83cf811f8',1,'tram::WorldCell']]], ['setdebugdrawing_55',['SetDebugDrawing',['../classtram_1_1_physics_component.html#aa352025ec22ad95c90b1b4055eaca758',1,'tram::PhysicsComponent']]], ['setdebuginfodraw_56',['SetDebugInfoDraw',['../classtram_1_1_audio_component.html#a08da2d9226240fb8e37b91b77145f0cf',1,'tram::AudioComponent::SetDebugInfoDraw()'],['../classtram_1_1_controller_component.html#af7b5cdc611a17b8a7261e14df61c56dd',1,'tram::ControllerComponent::SetDebugInfoDraw()'],['../classtram_1_1_animation_component.html#a9040237d0b7095c4f3c40263bbf8428e',1,'tram::AnimationComponent::SetDebugInfoDraw()']]], ['setdebugmode_57',['setDebugMode',['../classtram_1_1_physics_1_1_a_p_i_1_1_physics_debug_draw.html#a77b61272d7ad912dc96eb1b4e721a6b2',1,'tram::Physics::API::PhysicsDebugDraw']]], ['setdebugmode_58',['SetDebugMode',['../namespacetram_1_1_render_1_1_a_p_i.html#a7d69a7f95415804042a41c3580a7c56f',1,'tram::Render::API']]], ['setdectivationcallback_59',['SetDectivationCallback',['../classtram_1_1_trigger_component.html#a5810d82217bbf1ba29a40beca70ce30d',1,'tram::TriggerComponent']]], ['setdevice_60',['SetDevice',['../namespacetram_1_1_render_1_1_a_p_i.html#ae66b8323eef7ab765ad466ec90da6ed6',1,'tram::Render::API']]], ['setdirection_61',['SetDirection',['../classtram_1_1_light_component.html#a407b59e1e8c215a030e5eff1aba7d7d1',1,'tram::LightComponent']]], ['setdirectionalight_62',['SetDirectionaLight',['../classtram_1_1_render_component.html#a6f3130e436973f3e9f9f949e642df68d',1,'tram::RenderComponent']]], ['setdisplaylogcallback_63',['SetDisplayLogCallback',['../namespacetram.html#aeb62c461f07f0472724808f099abd05d',1,'tram::SetDisplayLogCallback(void(*callback)(int, const char *))'],['../namespacetram.html#a6386f26cd40ff74930ce7855564b513d',1,'tram::SetDisplayLogCallback(void(int, const char *))']]], ['setdistance_64',['SetDistance',['../classtram_1_1_light_component.html#a1861087271aee66c91c327ec199000da',1,'tram::LightComponent']]], ['setdrawlistaabb_65',['SetDrawListAABB',['../namespacetram_1_1_render_1_1_a_p_i.html#a68a28820f27f670a90c2a644aa199728',1,'tram::Render::API']]], ['setdrawlistcolors_66',['SetDrawListColors',['../namespacetram_1_1_render_1_1_a_p_i.html#ab591dae55495d78c86d150973ea3bef1',1,'tram::Render::API']]], ['setdrawlistindexarray_67',['SetDrawListIndexArray',['../namespacetram_1_1_render_1_1_a_p_i.html#a411524f6804a132bdfdf7e95d318fe6a',1,'tram::Render::API']]], ['setdrawlistindexrange_68',['SetDrawListIndexRange',['../namespacetram_1_1_render_1_1_a_p_i.html#ac78a374d698ab9d252afd86163c19440',1,'tram::Render::API']]], ['setdrawlistmaterials_69',['SetDrawListMaterials',['../namespacetram_1_1_render_1_1_a_p_i.html#a020f2e580879d12bf3b84b0ed5b9ab70',1,'tram::Render::API']]], ['setdrawlistshader_70',['SetDrawListShader',['../namespacetram_1_1_render_1_1_a_p_i.html#a3724426196e2fad6e190726003249aed',1,'tram::Render::API']]], ['setdrawlistspecularities_71',['SetDrawListSpecularities',['../namespacetram_1_1_render_1_1_a_p_i.html#a96595ff7b2190bcc3b764d3ff9f6f5b8',1,'tram::Render::API']]], ['setdrawlistspritearray_72',['SetDrawListSpriteArray',['../namespacetram_1_1_render_1_1_a_p_i.html#a9089059c10db7896ab1796273aab81b7',1,'tram::Render::API']]], ['setdrawlisttextureoffsets_73',['SetDrawListTextureOffsets',['../namespacetram_1_1_render_1_1_a_p_i.html#aabd8944a6224d5713a02ab8805acf20d',1,'tram::Render::API']]], ['setdrawlisttextures_74',['SetDrawListTextures',['../namespacetram_1_1_render_1_1_a_p_i.html#aac05dea68d3b978e4303cf1c2164f44c',1,'tram::Render::API']]], ['setdrawlistvertexarray_75',['SetDrawListVertexArray',['../namespacetram_1_1_render_1_1_a_p_i.html#a4642bc504c6d77fde8a824bb95c5ec16',1,'tram::Render::API']]], ['setdrawtrigger_76',['SetDrawTrigger',['../classtram_1_1_trigger.html#ae6703ba2939bf5799cec0c87eb677038',1,'tram::Trigger']]], ['setentity_77',['SetEntity',['../classtram_1_1_ext_1_1_menu_1_1_message_send.html#a0895a5a8ed80b2a60a59cb1fe37a5cc1',1,'tram::Ext::Menu::MessageSend::SetEntity()'],['../classtram_1_1_ext_1_1_menu_1_1_signal_menu.html#afb8fba8b653379700d91bef8816f036e',1,'tram::Ext::Menu::SignalMenu::SetEntity()']]], ['setenvironmentmap_78',['SetEnvironmentMap',['../classtram_1_1_render_component.html#a81729832968e5f5656d3b230cd0f66fd',1,'tram::RenderComponent::SetEnvironmentMap()'],['../namespacetram_1_1_render_1_1_a_p_i.html#a52c5145a1f9715fcb38218c4c6383fcf',1,'tram::Render::API::SetEnvironmentMap()']]], ['seteventtype_79',['SetEventType',['../classtram_1_1_ext_1_1_menu_1_1_event_emit.html#ab8f2c00eee82630287cf68b3d9ca9469',1,'tram::Ext::Menu::EventEmit']]], ['setexponent_80',['SetExponent',['../classtram_1_1_light_component.html#ac7375045221c2b515f18c1b5893f048f',1,'tram::LightComponent']]], ['setfade_81',['SetFade',['../classtram_1_1_animation_component.html#a2fcbfb0820bce127c4ef9c82238a296f',1,'tram::AnimationComponent']]], ['setfadedistance_82',['SetFadeDistance',['../namespacetram_1_1_render_1_1_a_p_i.html#a664d9f1a7426b3a1505975402100480a',1,'tram::Render::API']]], ['setfardistance_83',['SetFarDistance',['../classtram_1_1_render_1_1_model.html#acf0073d6b4982cb158d3d7289afa9266',1,'tram::Render::Model']]], ['setfiltercallback_84',['SetFilterCallback',['../classtram_1_1_trigger_component.html#ac4d9c4e43a0e75b00ec6de674c9b7bc5',1,'tram::TriggerComponent']]], ['setflag_85',['SetFlag',['../classtram_1_1_world_cell.html#a7ee87e1140b9f20b04463f0342135050',1,'tram::WorldCell::SetFlag()'],['../classtram_1_1_entity.html#a613b86846cd7d82c666367c98d266e6e',1,'tram::Entity::SetFlag()']]], ['setflags_86',['SetFlags',['../namespacetram_1_1_render_1_1_a_p_i.html#a10a6b549dc7e27d1f27c14bd2e3fc896',1,'tram::Render::API']]], ['setflyspeed_87',['SetFlySpeed',['../classtram_1_1_raycast_controller_component.html#aafc558e1478f35254aa19f0bfd4bbac9',1,'tram::RaycastControllerComponent::SetFlySpeed()'],['../classtram_1_1_f_p_s_controller_component.html#ac0b5fd2754147656c7a45085715119c6',1,'tram::FPSControllerComponent::SetFlySpeed()']]], ['setfollowing_88',['SetFollowing',['../classtram_1_1_ext_1_1_camera_1_1_camera.html#a890d07770b117f45d57435f233f29da3',1,'tram::Ext::Camera::Camera']]], ['setfollowinginterpolation_89',['SetFollowingInterpolation',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a0b2dd1c3281e606b65cabb974583dcab',1,'tram::Ext::Camera::FirstPersonCamera']]], ['setfollowinglookat_90',['SetFollowingLookat',['../classtram_1_1_ext_1_1_camera_1_1_camera.html#a025cfc11ad96bc784c5b6b7dfdfd57cf',1,'tram::Ext::Camera::Camera']]], ['setfollowingoffset_91',['SetFollowingOffset',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a25ab9c4939a27be11cb70b3d5adfda40',1,'tram::Ext::Camera::FirstPersonCamera']]], ['setfont_92',['SetFont',['../namespacetram_1_1_g_u_i.html#a2a3c432ea9156a810b47d5e9836d861a',1,'tram::GUI']]], ['setframe_93',['SetFrame',['../classtram_1_1_animation_component.html#a8f3653661fe211b4b809c1fdbdcc8d08',1,'tram::AnimationComponent::SetFrame()'],['../classtram_1_1_decal_component.html#af3ff3ceaf63a48c77bbadd3788384ce6',1,'tram::DecalComponent::SetFrame()']]], ['setfriction_94',['SetFriction',['../classtram_1_1_raycast_controller_component.html#a8e3f7be1fc7488057d7319883300dc5f',1,'tram::RaycastControllerComponent::SetFriction()'],['../classtram_1_1_f_p_s_controller_component.html#a4a55f5fdc6a0540f3843309ec6f53894',1,'tram::FPSControllerComponent::SetFriction()']]], ['setfromraw_95',['SetFromRaw',['../namespacetram_1_1_settings.html#a1eb24fa09d0b62f743ff74a99945b8ea',1,'tram::Settings']]], ['setfullscreen_96',['SetFullscreen',['../namespacetram_1_1_platform_1_1_window.html#a225b179d574437d4573c016bfeed7fe4',1,'tram::Platform::Window']]], ['setfunction_97',['SetFunction',['../classtram_1_1_script_1_1_interface.html#aee03e2ec9682ab4d801bed9eaf53f703',1,'tram::Script::Interface::SetFunction()'],['../namespacetram_1_1_script.html#a446f2631dceec969ceccee5841e8e019',1,'tram::Script::SetFunction(name_t name, std::vector< Type > parameters, value_t(*function)(valuearray_t))']]], ['setglobal_98',['SetGlobal',['../namespacetram_1_1_script.html#a3052ee4f8a5d4cba402b9342e3a7b0a6',1,'tram::Script::SetGlobal()'],['../classtram_1_1_script_1_1_interface.html#ac3540126716b8a6a8675cf859ab8152b',1,'tram::Script::Interface::SetGlobal()']]], ['setglyph_99',['SetGlyph',['../namespacetram_1_1_g_u_i.html#ac467099a0542b69fb101532431fef5a1',1,'tram::GUI']]], ['setglyphdefaults_100',['SetGlyphDefaults',['../namespacetram_1_1_g_u_i.html#a8b13f224cb4fc10e56e14f176d93b95d',1,'tram::GUI']]], ['setincrement_101',['SetIncrement',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_trigger.html#ac60462a520bb57318bea757ecbfb9db5',1,'tram::Ext::Kitchensink::QuestTrigger']]], ['setinitialized_102',['SetInitialized',['../namespacetram_1_1_system.html#a268bed781cdfb281916c2475f969b55d',1,'tram::System']]], ['setinputstate_103',['SetInputState',['../namespacetram_1_1_u_i.html#abdd66ea8df097a0c2b314b87850cef35',1,'tram::UI']]], ['setinterceptcallback_104',['SetInterceptCallback',['../structtram_1_1_message.html#ae415c262a095fd620ef84c7c8654a02f',1,'tram::Message']]], ['setinterface_105',['SetInterface',['../namespacetram_1_1_script.html#ad66379be86f633359248ee30b1d7b073',1,'tram::Script']]], ['setinterior_106',['SetInterior',['../classtram_1_1_world_cell.html#a38a76916bccb66a452c50c083aa315bf',1,'tram::WorldCell']]], ['setinteriorlights_107',['SetInteriorLights',['../classtram_1_1_world_cell.html#a8e14746ba0ad7786857dcc73987cc7b9',1,'tram::WorldCell']]], ['setkeyboardlook_108',['SetKeyboardLook',['../classtram_1_1_player_component.html#ab188c1286058f995a0260cc488d32daa',1,'tram::PlayerComponent']]], ['setkeyframe_109',['SetKeyframe',['../classtram_1_1_animation_component.html#a56d81b59bfb31b228aacaeda632474ba',1,'tram::AnimationComponent']]], ['setkinematic_110',['SetKinematic',['../classtram_1_1_physics_component.html#a80d73825a4421015c00f3fe968b6b090',1,'tram::PhysicsComponent']]], ['setlayer_111',['SetLayer',['../namespacetram_1_1_render_1_1_a_p_i.html#afac0e9fbfee600d48f07f13a04ad5e50',1,'tram::Render::API::SetLayer()'],['../classtram_1_1_render_component.html#ad7c9df8966b4b2e87c0afbb9b75fffdc',1,'tram::RenderComponent::SetLayer()']]], ['setlayermask_112',['SetLayerMask',['../classtram_1_1_ext_1_1_camera_1_1_camera.html#ab3f35ec6484b5b14ed1d67fda34e42f8',1,'tram::Ext::Camera::Camera']]], ['setlightdraw_113',['SetLightDraw',['../classtram_1_1_light_component.html#a4a3e561c198c80a5f5ffdbc3168e6dfd',1,'tram::LightComponent']]], ['setlightingparameters_114',['SetLightingParameters',['../namespacetram_1_1_render_1_1_a_p_i.html#aa88196543e9de714a86037204e01f75c',1,'tram::Render::API']]], ['setlightmap_115',['SetLightmap',['../classtram_1_1_render_component.html#a3eb6d145b4258093f8fcd1487edf2874',1,'tram::RenderComponent::SetLightmap()'],['../namespacetram_1_1_render_1_1_a_p_i.html#a3e3f408a1abea6b59284b89e49624950',1,'tram::Render::API::SetLightmap(drawlistentry_t entry, texturehandle_t lightmap)']]], ['setlightparameters_116',['SetLightParameters',['../namespacetram_1_1_render_1_1_a_p_i.html#a832d87127faad4c76d3b09fb0efcbb39',1,'tram::Render::API']]], ['setlights_117',['SetLights',['../namespacetram_1_1_render_1_1_a_p_i.html#ac9af752a04919c1be9443f491ba9364a',1,'tram::Render::API']]], ['setlinearfactor_118',['SetLinearFactor',['../classtram_1_1_physics_component.html#aaf3bcc38317375d73fd6b7b426aaedc2',1,'tram::PhysicsComponent']]], ['setlistenergain_119',['SetListenerGain',['../namespacetram_1_1_audio_1_1_a_p_i.html#a0722507591b4bba19c85e8f9d8088704',1,'tram::Audio::API']]], ['setlistenerorientation_120',['SetListenerOrientation',['../namespacetram_1_1_audio_1_1_a_p_i.html#a0ec692e07524255ef5c814ccbff53b1b',1,'tram::Audio::API::SetListenerOrientation()'],['../namespacetram_1_1_audio.html#acd913701b5ffec0d613acaca89266eab',1,'tram::Audio::SetListenerOrientation(quat orientation)']]], ['setlistenerposition_121',['SetListenerPosition',['../namespacetram_1_1_audio.html#ae4700c24d6f820914c7f36ea15203727',1,'tram::Audio::SetListenerPosition()'],['../namespacetram_1_1_audio_1_1_a_p_i.html#a8c238a85c44a1be22223921bb836673b',1,'tram::Audio::API::SetListenerPosition()']]], ['setlistenertransform_122',['SetListenerTransform',['../classtram_1_1_ext_1_1_camera_1_1_camera.html#af377217d1922777d7d6513b28434c876',1,'tram::Ext::Camera::Camera']]], ['setlocation_123',['SetLocation',['../classtram_1_1_decal_component.html#a1c1f2732d6481c3e25c7a5bca8c0f7e6',1,'tram::DecalComponent::SetLocation()'],['../classtram_1_1_audio_component.html#ad0fc5f3971f62787f84b8150f6a2e1df',1,'tram::AudioComponent::SetLocation()'],['../classtram_1_1_physics_component.html#a619f8a0efc2df26aaed1e5ef2e541b0a',1,'tram::PhysicsComponent::SetLocation()'],['../classtram_1_1_light_component.html#a3eaddbed4577c9c58915b1eafad0617a',1,'tram::LightComponent::SetLocation()'],['../classtram_1_1_entity.html#a6e2489225d5ca4a76b702b4d138963de',1,'tram::Entity::SetLocation()'],['../classtram_1_1_trigger_component.html#a0fcaae81162184053fc3354de8fae8cc',1,'tram::TriggerComponent::SetLocation()'],['../classtram_1_1_render_component.html#a81f2ac27fa4516443e6a11f3371736d4',1,'tram::RenderComponent::SetLocation()']]], ['setlookdirection_124',['SetLookDirection',['../classtram_1_1_controller_component.html#a92c6a99db84d365877eb1e6f45b406ce',1,'tram::ControllerComponent']]], ['setmass_125',['SetMass',['../classtram_1_1_physics_component.html#ae2431ad05061b3ead05fc896aa78fa8b',1,'tram::PhysicsComponent']]], ['setmaterial_126',['SetMaterial',['../classtram_1_1_render_1_1_sprite.html#a0bac764220b653067aaed890943d28cc',1,'tram::Render::Sprite']]], ['setmaterialcolor_127',['SetMaterialColor',['../namespacetram_1_1_render_1_1_a_p_i.html#a58fe214fe7c887e0911762eefa69f1ef',1,'tram::Render::API']]], ['setmaterialfilter_128',['SetMaterialFilter',['../classtram_1_1_render_1_1_material.html#a37155313cda78e8032afeed80b2dc8bc',1,'tram::Render::Material']]], ['setmaterialproperty_129',['SetMaterialProperty',['../classtram_1_1_render_1_1_material.html#a15456a50f775b0b406e376947b71bb04',1,'tram::Render::Material']]], ['setmaterialreflectivity_130',['SetMaterialReflectivity',['../namespacetram_1_1_render_1_1_a_p_i.html#a777441cfb7c5806fcc7411a51739af30',1,'tram::Render::API']]], ['setmaterialspecularexponent_131',['SetMaterialSpecularExponent',['../namespacetram_1_1_render_1_1_a_p_i.html#a6fca8cce2a22ed1edf6cc3fe8f241c7f',1,'tram::Render::API']]], ['setmaterialspeculartransparency_132',['SetMaterialSpecularTransparency',['../namespacetram_1_1_render_1_1_a_p_i.html#a071cd1636bc88d93e740e78ad0c6a3be',1,'tram::Render::API']]], ['setmaterialspecularweight_133',['SetMaterialSpecularWeight',['../namespacetram_1_1_render_1_1_a_p_i.html#a295d16334d54c86ddc7599a56546dc56',1,'tram::Render::API']]], ['setmaterialtexture_134',['SetMaterialTexture',['../namespacetram_1_1_render_1_1_a_p_i.html#a8bd81654a22565c08d8b34aa9c405c14',1,'tram::Render::API']]], ['setmaterialtype_135',['SetMaterialType',['../classtram_1_1_render_1_1_material.html#a25207b8d6b7c4ed0805a732bc196125e',1,'tram::Render::Material']]], ['setmatrix_136',['SetMatrix',['../namespacetram_1_1_render_1_1_a_p_i.html#ad62b8a1dc88abdbcf24dbcbc97571b22',1,'tram::Render::API']]], ['setmediumlist_137',['SetMediumList',['../classtram_1_1_file_writer.html#a9c50a8afb948a19a9bc89d6353046aab',1,'tram::FileWriter']]], ['setmessagetype_138',['SetMessageType',['../classtram_1_1_ext_1_1_menu_1_1_message_send.html#a44e7e4389ab204102b9d53581be518d7',1,'tram::Ext::Menu::MessageSend']]], ['setmodel_139',['SetModel',['../classtram_1_1_animation_component.html#ae18431fe0083fcb808cf91cac0a25ee2',1,'tram::AnimationComponent::SetModel()'],['../classtram_1_1_physics_component.html#acceb6cafd1dd8635ed56ec71a1c61f85',1,'tram::PhysicsComponent::SetModel()'],['../classtram_1_1_render_component.html#ab4769cf5994097dc687169595ceac02b',1,'tram::RenderComponent::SetModel()'],['../classtram_1_1_trigger_component.html#a1c35e8061d5dc72e113fa4fc52f875fc',1,'tram::TriggerComponent::SetModel(name_t model)'],['../classtram_1_1_trigger_component.html#ae965164c2483a255585e9998abe87df9',1,'tram::TriggerComponent::SetModel(Physics::CollisionModel *model)'],['../classtram_1_1_animation_component.html#a8a927071d5509777104ff0de4d613782',1,'tram::AnimationComponent::SetModel()']]], ['setmonitor_140',['SetMonitor',['../namespacetram_1_1_platform_1_1_window.html#a58daaf85f6e0870b9bcdb2a443356213',1,'tram::Platform::Window']]], ['setmouselook_141',['SetMouselook',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#ade2f1910a021d9f4b2e836fa170f9f4a',1,'tram::Ext::Camera::FirstPersonCamera']]], ['setneardistance_142',['SetNearDistance',['../classtram_1_1_render_1_1_model.html#a5e2bf8fce6f1b151e5ce019d437f7604',1,'tram::Render::Model']]], ['setnoclip_143',['SetNoclip',['../classtram_1_1_player_component.html#a9a1e25c0111518b35070974b80a1ce7d',1,'tram::PlayerComponent']]], ['setobjective_144',['SetObjective',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_trigger.html#acd10df0459a57b9b8384a697d1a67ea8',1,'tram::Ext::Kitchensink::QuestTrigger']]], ['setoffset_145',['SetOffset',['../classtram_1_1_ext_1_1_menu_1_1_intercept_menu.html#a5b0714060be9fd26726a1aa37108edc2',1,'tram::Ext::Menu::InterceptMenu']]], ['setonanimationfinishcallback_146',['SetOnAnimationFinishCallback',['../classtram_1_1_animation_component.html#a82fda1bdec933e8b63788b286081885a',1,'tram::AnimationComponent']]], ['setorientation_147',['SetOrientation',['../classtram_1_1_path_follower.html#aca1321d0863fe982ec2d827135ab8ee2',1,'tram::PathFollower']]], ['setorthoratio_148',['SetOrthoRatio',['../namespacetram_1_1_render.html#aa988a06a114b75baae33e244628ecd32',1,'tram::Render']]], ['setparameters_149',['SetParameters',['../classtram_1_1_trigger.html#a2537a228019f8807f75f7169238614e4',1,'tram::Trigger::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a29563d3cf838e8bd7f981b155a61fb72',1,'tram::Ext::Kitchensink::Button::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_breakable.html#af79ddccccc2a9a8fabb87a5634e91c3d',1,'tram::Ext::Kitchensink::Breakable::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_water.html#ad17e120992eba3ccc7a4a17160a8bfa3',1,'tram::Ext::Kitchensink::Water::SetParameters()'],['../classtram_1_1_player.html#ad91ecec5652fba7dc3d061b7823bc699',1,'tram::Player::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_pickup.html#a7b7238d413eddcfdda31aeff7e55afb0',1,'tram::Ext::Kitchensink::Pickup::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_text.html#a8358248f0c5e4f2f1a8d6c999454f483',1,'tram::Ext::Kitchensink::DebugText::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_shape.html#a1ecd14f21602db88a06c2b160cfa9174',1,'tram::Ext::Kitchensink::DebugShape::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_train.html#a46ab45c6f44dbf65bc6dcdfff52f9798',1,'tram::Ext::Kitchensink::Train::SetParameters()'],['../classtram_1_1_crate.html#a2fd93587f542e04c90e066df25468540',1,'tram::Crate::SetParameters()'],['../classtram_1_1_decoration.html#a6bd26ad8c997a12796c4523dd0f3f8e6',1,'tram::Decoration::SetParameters()'],['../classtram_1_1_light.html#a4c76b25a1ea34c90b9eed095443e143f',1,'tram::Light::SetParameters()'],['../classtram_1_1_marker.html#a6217c8c7e40bb9a4904b28c2d0c44ded',1,'tram::Marker::SetParameters()'],['../classtram_1_1_entity.html#ac9e3adac30cac41573d2bdda676a0832',1,'tram::Entity::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_quest_entity.html#adc40d013900ce2da25ac6487593b24bb',1,'tram::Ext::Kitchensink::QuestEntity::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_player_movement.html#ad550edd2a6389a2ce7ef3e840dd14e7a',1,'tram::Ext::Kitchensink::TriggerPlayerMovement::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_teleport.html#ac617bac29cb094149c2904a13c2e0de1',1,'tram::Ext::Kitchensink::TriggerTeleport::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_remove.html#ac802678eba14b6f7396fa242f3b389fa',1,'tram::Ext::Kitchensink::TriggerRemove::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_push.html#a0a01698a8de860ef2d97e6a0f57b7c25',1,'tram::Ext::Kitchensink::TriggerPush::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_once.html#a18ef2e180b564569ebfb773ec83d9e45',1,'tram::Ext::Kitchensink::TriggerOnce::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_autosave.html#a588c6567a94f6b471ae8528053ca244a',1,'tram::Ext::Kitchensink::TriggerAutosave::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_hurt.html#a6c720eeebbc10b399c75cbf7225f8f7b',1,'tram::Ext::Kitchensink::TriggerHurt::SetParameters()'],['../classtram_1_1_scriptable.html#aa5c6c82c64f014b7a9068899f7282c68',1,'tram::Scriptable::SetParameters()'],['../classtram_1_1_sound.html#ab40d5d4f1ca14bcd32a252326f333bfa',1,'tram::Sound::SetParameters()'],['../classtram_1_1_static_world_object.html#a48e342917b51b7002d803a43d32daca3',1,'tram::StaticWorldObject::SetParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_multiple.html#a0acfdc56498029e59f4eaa3f389b8967',1,'tram::Ext::Kitchensink::TriggerMultiple::SetParameters()']]], ['setparent_150',['SetParent',['../classtram_1_1_entity_component.html#a1683ad236bce69ab4b2c2dac75ef526a',1,'tram::EntityComponent']]], ['setpause_151',['SetPause',['../classtram_1_1_animation_component.html#a73a899480e5814119ddb716c93253b4a',1,'tram::AnimationComponent']]], ['setpersistent_152',['SetPersistent',['../classtram_1_1_entity.html#a0143b5547a4eeef3e1501defe9882514',1,'tram::Entity']]], ['setpicked_153',['SetPicked',['../classtram_1_1_ext_1_1_menu_1_1_world_cell_properties.html#a93063bcbb048c2fd86995f4ca5ad0ab4',1,'tram::Ext::Menu::WorldCellProperties::SetPicked()'],['../classtram_1_1_ext_1_1_menu_1_1_entity_properties.html#a2465ce3aca5ad2e0b1e7b4b69090132c',1,'tram::Ext::Menu::EntityProperties::SetPicked()']]], ['setplayspeed_154',['SetPlaySpeed',['../classtram_1_1_sprite_component.html#af67c5b9890fa7c815e53e39927db6c81',1,'tram::SpriteComponent']]], ['setpose_155',['SetPose',['../namespacetram_1_1_render_1_1_a_p_i.html#a5a2dbe49094868d5a7efea439f9148f0',1,'tram::Render::API']]], ['setposition_156',['SetPosition',['../classtram_1_1_ext_1_1_camera_1_1_camera.html#a551344bef8e92a63362a56e61ba47e93',1,'tram::Ext::Camera::Camera']]], ['setprojectionmatrix_157',['SetProjectionMatrix',['../namespacetram_1_1_render_1_1_a_p_i.html#a8712a5ab1b0f028eb8559586b458262d',1,'tram::Render::API']]], ['setrawinput_158',['SetRawInput',['../namespacetram_1_1_platform_1_1_window.html#aa2fd499590eebaf0a891068d1bac9945',1,'tram::Platform::Window']]], ['setreflectivity_159',['SetReflectivity',['../classtram_1_1_render_1_1_material.html#a9ec5c89d070ff541a3ac8b449524a1be',1,'tram::Render::Material']]], ['setrelation_160',['SetRelation',['../classtram_1_1_ext_1_1_kitchensink_1_1_faction.html#a925e58834615871b89a1e8e7e223a54b',1,'tram::Ext::Kitchensink::Faction']]], ['setrenderdebug_161',['SetRenderDebug',['../classtram_1_1_render_component.html#a5957906efb717b5596b1c6f12fbe6ded',1,'tram::RenderComponent']]], ['setrepeating_162',['SetRepeating',['../classtram_1_1_audio_component.html#aa6d30f7ac730409c6d4a50edfc1d2ee9',1,'tram::AudioComponent']]], ['setrepeats_163',['SetRepeats',['../classtram_1_1_animation_component.html#ab837c1cffe19cc9baa3ea3bc80577cdb',1,'tram::AnimationComponent']]], ['setrigidbodyangularfactor_164',['SetRigidbodyAngularFactor',['../namespacetram_1_1_physics_1_1_a_p_i.html#a7c4e5faa028c12c82946698a1110c1cd',1,'tram::Physics::API']]], ['setrigidbodycollisioncallback_165',['SetRigidbodyCollisionCallback',['../namespacetram_1_1_physics_1_1_a_p_i.html#aacd35951302ec4c164498096dc1b4f59',1,'tram::Physics::API']]], ['setrigidbodycollisiongroup_166',['SetRigidbodyCollisionGroup',['../namespacetram_1_1_physics_1_1_a_p_i.html#a1c06fae565edc0f7e9724d2699d206e5',1,'tram::Physics::API']]], ['setrigidbodycollisionmask_167',['SetRigidbodyCollisionMask',['../namespacetram_1_1_physics_1_1_a_p_i.html#a6a8846f245dd0179318174a1e7379c8e',1,'tram::Physics::API']]], ['setrigidbodydebugdrawing_168',['SetRigidbodyDebugDrawing',['../namespacetram_1_1_physics_1_1_a_p_i.html#a94909ae121eee8f34565dc482b16d74d',1,'tram::Physics::API']]], ['setrigidbodykinematic_169',['SetRigidbodyKinematic',['../namespacetram_1_1_physics_1_1_a_p_i.html#a69384c8fc4867f74184957c7b70ab882',1,'tram::Physics::API']]], ['setrigidbodylinearfactor_170',['SetRigidbodyLinearFactor',['../namespacetram_1_1_physics_1_1_a_p_i.html#a4adab24a698129a226d8dc841539738a',1,'tram::Physics::API']]], ['setrigidbodylocation_171',['SetRigidbodyLocation',['../namespacetram_1_1_physics_1_1_a_p_i.html#ac2cbf02cab4746c0351a894fe480d166',1,'tram::Physics::API']]], ['setrigidbodymass_172',['SetRigidbodyMass',['../namespacetram_1_1_physics_1_1_a_p_i.html#a679d86cb7ebb5221e0c7655f728392b7',1,'tram::Physics::API']]], ['setrigidbodyrotation_173',['SetRigidbodyRotation',['../namespacetram_1_1_physics_1_1_a_p_i.html#a3d0d81d724fbaf34ae5c7b159fe61aef',1,'tram::Physics::API']]], ['setrigidbodytransformcallback_174',['SetRigidbodyTransformCallback',['../namespacetram_1_1_physics_1_1_a_p_i.html#a0abede70f73e5a367c12fc46a28b6fa3',1,'tram::Physics::API::SetRigidbodyTransformCallback(rigidbody_t rigidbody, get_trf_callback get_callback, set_trf_callback set_callback, void *data)'],['../namespacetram_1_1_physics_1_1_a_p_i.html#ad0713a3c44d84eee3bd0823cb58705f6',1,'tram::Physics::API::SetRigidbodyTransformCallback(rigidbody_t rigidbody, std::pair< vec3, quat >(*get_transform_callback)(void *), void(*set_transform_callback)(void *, std::pair< vec3, quat >), void *data)']]], ['setrigidbodyvelocity_175',['SetRigidbodyVelocity',['../namespacetram_1_1_physics_1_1_a_p_i.html#ae4a9270ecabf522b0978581496d4f0b7',1,'tram::Physics::API']]], ['setrotatefollowing_176',['SetRotateFollowing',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a81a3ae850df9d192387b0a16e39fe160',1,'tram::Ext::Camera::FirstPersonCamera']]], ['setrotation_177',['SetRotation',['../classtram_1_1_entity.html#a9a15c4d86ef5f814eb8cc9b70cb8ced3',1,'tram::Entity::SetRotation()'],['../classtram_1_1_ext_1_1_camera_1_1_camera.html#a1c2bd59cd7281d90dbc88be202982a93',1,'tram::Ext::Camera::Camera::SetRotation()'],['../classtram_1_1_trigger_component.html#afa86224935cc08c00224dc774da9c71d',1,'tram::TriggerComponent::SetRotation()'],['../classtram_1_1_render_component.html#ac254a9ca5d3e3aaf19831ed8cba3da74',1,'tram::RenderComponent::SetRotation()'],['../classtram_1_1_physics_component.html#a012cb69d2fc0bc2dedacd198e2de04dc',1,'tram::PhysicsComponent::SetRotation()'],['../classtram_1_1_decal_component.html#ab83fc898b9b0eebb2534149a51d0bbad',1,'tram::DecalComponent::SetRotation()']]], ['setrunspeed_178',['SetRunSpeed',['../classtram_1_1_f_p_s_controller_component.html#a35420874880b9df73e292e495aa1e1dc',1,'tram::FPSControllerComponent::SetRunSpeed()'],['../classtram_1_1_raycast_controller_component.html#afec9667d19d362fddf18e23fe5375c2a',1,'tram::RaycastControllerComponent::SetRunSpeed()']]], ['setscale_179',['SetScale',['../namespacetram_1_1_platform.html#a13e3e0fd03175cb1a3fcab404e3f0ef5',1,'tram::Platform::SetScale()'],['../classtram_1_1_decal_component.html#a0f75089eb63e3ad93137cad8a208a85c',1,'tram::DecalComponent::SetScale()'],['../classtram_1_1_render_component.html#ad4839670e65963fc3c247f01de60e8a3',1,'tram::RenderComponent::SetScale()'],['../namespacetram_1_1_platform_1_1_window.html#ad7000ba82ae8a78716a4d46451b7e3fc',1,'tram::Platform::Window::SetScale()']]], ['setscaling_180',['SetScaling',['../namespacetram_1_1_g_u_i.html#abc96e6226a9e9abe317c04fe4661ee35',1,'tram::GUI']]], ['setscreenclear_181',['SetScreenClear',['../namespacetram_1_1_render_1_1_a_p_i.html#a4546d61832af8f8af9038e5d060afe70',1,'tram::Render::API']]], ['setscreensize_182',['SetScreenSize',['../namespacetram_1_1_render_1_1_a_p_i.html#a453419fa3a31de6918ce7c54454b1314',1,'tram::Render::API::SetScreenSize()'],['../namespacetram_1_1_render.html#abcb118a759504ad9bc0993ca69f7231e',1,'tram::Render::SetScreenSize()']]], ['setsearchlist_183',['SetSearchList',['../classtram_1_1_file_reader.html#a8a7d782b12279f564439c0438365c91a',1,'tram::FileReader']]], ['setselectedtext_184',['SetSelectedText',['../namespacetram_1_1_g_u_i.html#a2cea0738110390ba9a29efd3abde74ed',1,'tram::GUI']]], ['setshape_185',['SetShape',['../classtram_1_1_trigger_component.html#af69d3a60b12eebbbdec84c83b049941e',1,'tram::TriggerComponent::SetShape()'],['../classtram_1_1_physics_component.html#a0956a47778936024e1d1b245728a680c',1,'tram::PhysicsComponent::SetShape()']]], ['setsize_186',['SetSize',['../namespacetram_1_1_platform_1_1_window.html#af936ef79e15427ab64724cb9c0b102d2',1,'tram::Platform::Window']]], ['setsound_187',['SetSound',['../classtram_1_1_audio_component.html#a736977966c4d0485ef879349eeef271e',1,'tram::AudioComponent']]], ['setsource_188',['SetSource',['../classtram_1_1_render_1_1_material.html#a5f29589bc4853e8f7a7b321be58fc51b',1,'tram::Render::Material']]], ['setsourcedraw_189',['SetSourceDraw',['../classtram_1_1_audio_component.html#a07c6b771da60423e0357a1c872db6ed3',1,'tram::AudioComponent']]], ['setspecular_190',['SetSpecular',['../classtram_1_1_render_1_1_material.html#a059b96f9b911c30041d21d47ac27cb6f',1,'tram::Render::Material']]], ['setspeed_191',['SetSpeed',['../classtram_1_1_animation_component.html#acfacd194c9559609030b7aff261ea9f1',1,'tram::AnimationComponent']]], ['setsphericalharmonic_192',['SetSphericalHarmonic',['../namespacetram_1_1_render_1_1_a_p_i.html#a10c0e3ee3da9bfa728e219bf497ed773',1,'tram::Render::API']]], ['setsprite_193',['SetSprite',['../classtram_1_1_decal_component.html#aa1a667b7f5e747d2216eeab28bf99de9',1,'tram::DecalComponent::SetSprite()'],['../classtram_1_1_particle_component.html#a8798a3b667e45954102f0eae33d3b941',1,'tram::ParticleComponent::SetSprite()'],['../classtram_1_1_sprite_component.html#a567f7ce43923f04380bc6a04d8f4b5a2',1,'tram::SpriteComponent::SetSprite()']]], ['setstate_194',['SetState',['../namespacetram_1_1_system.html#a3b2b06b04a927a1cbb754d1054130ddb',1,'tram::System']]], ['setstateanimation_195',['SetStateAnimation',['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_table.html#a504aca8b015e8fca48124474966a6e1e',1,'tram::Ext::Kitchensink::AnimationTable']]], ['setstatenextstate_196',['SetStateNextState',['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_table.html#a57b233bcdc733ea9c7128d23499ef5cc',1,'tram::Ext::Kitchensink::AnimationTable']]], ['setstepheight_197',['SetStepHeight',['../classtram_1_1_raycast_controller_component.html#a8152d995918ad6bda5a35d3bbf4be894',1,'tram::RaycastControllerComponent::SetStepHeight()'],['../classtram_1_1_f_p_s_controller_component.html#a70b7b9fae981e57ff334e5a5a5abbc8f',1,'tram::FPSControllerComponent::SetStepHeight()']]], ['setstorecollisions_198',['SetStoreCollisions',['../classtram_1_1_trigger_component.html#a646ebe8013bad9a91574d603995847b5',1,'tram::TriggerComponent']]], ['setsuncolor_199',['SetSunColor',['../namespacetram_1_1_render.html#a8804912a4838fc7b29819738b86f2b68',1,'tram::Render']]], ['setsundirection_200',['SetSunDirection',['../namespacetram_1_1_render.html#a542bb444bfd6387612406c107509bbff',1,'tram::Render']]], ['setsystemloggingseverity_201',['SetSystemLoggingSeverity',['../namespacetram.html#ad33d1b97d4055d1dc0ed20da61825d07',1,'tram']]], ['settextureoffset_202',['SetTextureOffset',['../classtram_1_1_render_component.html#ad0cdc3be1acbe43f6fd315948c73611a',1,'tram::RenderComponent']]], ['settexturetype_203',['SetTextureType',['../classtram_1_1_render_1_1_material.html#a0dd09cbb341520b030f16cc4f64a2689',1,'tram::Render::Material']]], ['settilt_204',['SetTilt',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a264a29b441d6180743b3a59b7d14476f',1,'tram::Ext::Camera::FirstPersonCamera']]], ['settitle_205',['SetTitle',['../namespacetram_1_1_platform_1_1_window.html#a9c20800318f5aa9b5d9b8a357c20e7e5',1,'tram::Platform::Window']]], ['settransformcallback_206',['SetTransformCallback',['../classtram_1_1_physics_1_1_a_p_i_1_1_callback_motion_state.html#aa4cd905f3f85673090c5cd67957a8307',1,'tram::Physics::API::CallbackMotionState']]], ['settriggercollisioncallback_207',['SetTriggerCollisionCallback',['../namespacetram_1_1_physics_1_1_a_p_i.html#a92e3c5b470bbf94447cc20b17aa4397e',1,'tram::Physics::API']]], ['settriggercollisiongroup_208',['SetTriggerCollisionGroup',['../namespacetram_1_1_physics_1_1_a_p_i.html#af28f53e5e058544eebb6f3fb1dca5810',1,'tram::Physics::API']]], ['settriggercollisionmask_209',['SetTriggerCollisionMask',['../namespacetram_1_1_physics_1_1_a_p_i.html#aa4126218afb311b1eebc568240714fbd',1,'tram::Physics::API']]], ['settriggerlocation_210',['SetTriggerLocation',['../namespacetram_1_1_physics_1_1_a_p_i.html#a7562c6255d4d3aa1f54ea321af65a4f8',1,'tram::Physics::API']]], ['settriggerrotation_211',['SetTriggerRotation',['../namespacetram_1_1_physics_1_1_a_p_i.html#ad66528623ab1c92b411137a246641b6e',1,'tram::Physics::API']]], ['setupdateparenttransform_212',['SetUpdateParentTransform',['../classtram_1_1_physics_component.html#a1a84053f86862350a329a1607c62f9a7',1,'tram::PhysicsComponent']]], ['setupmodel_213',['SetupModel',['../classtram_1_1_audio_component.html#aacd7fc7a708e8bae044c8fa34bca2031',1,'tram::AudioComponent::SetupModel()'],['../classtram_1_1_trigger.html#a888c3a8eafbed2f160ada1af651de268',1,'tram::Trigger::SetupModel()'],['../classtram_1_1_light_component.html#ae603c601fe95f22db85c49b1bc53f800',1,'tram::LightComponent::SetupModel()']]], ['setvalue_214',['SetValue',['../classtram_1_1_value_ptr.html#a611fec6779600e3a3508e87fa9a83f6a',1,'tram::ValuePtr::SetValue()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_trigger.html#aded1963fcaa2fe9e73bd27258d16b7af',1,'tram::Ext::Kitchensink::QuestTrigger::SetValue()']]], ['setvariable_215',['SetVariable',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest.html#a923d2830ead5ba315b40a9b8551dda7e',1,'tram::Ext::Kitchensink::Quest']]], ['setvelocity_216',['SetVelocity',['../classtram_1_1_physics_component.html#a8570e4138cdd40ea3547017f2fff1394',1,'tram::PhysicsComponent']]], ['setviewdistance_217',['SetViewDistance',['../namespacetram_1_1_render.html#a6957c2557d41fe2fb76646cea2266eeb',1,'tram::Render']]], ['setviewfov_218',['SetViewFov',['../namespacetram_1_1_render.html#a2aaf3e85135fa18435eb0d9412ca3a6d',1,'tram::Render']]], ['setviewmatrix_219',['SetViewMatrix',['../namespacetram_1_1_render_1_1_a_p_i.html#a23c877f60360662f3a1de1fd11957936',1,'tram::Render::API']]], ['setviewparameters_220',['SetViewParameters',['../namespacetram_1_1_render_1_1_a_p_i.html#a860017f77f92d43c2b09b5ff526d61b4',1,'tram::Render::API']]], ['setviewposition_221',['SetViewPosition',['../namespacetram_1_1_render.html#a844a096223a3c0f236c7ef8f304a24f8',1,'tram::Render']]], ['setviewrotation_222',['SetViewRotation',['../namespacetram_1_1_render.html#a81a4ef257882a1513b6077fd05d1d1c7',1,'tram::Render']]], ['setviewtransform_223',['SetViewTransform',['../classtram_1_1_ext_1_1_camera_1_1_camera.html#a391d685c473cd0dcabbeb372938357f5',1,'tram::Ext::Camera::Camera']]], ['setvolume_224',['SetVolume',['../namespacetram_1_1_audio.html#a95222c442aeb50c4b0efd0c1a284eea3',1,'tram::Audio']]], ['setvsync_225',['SetVsync',['../namespacetram_1_1_platform_1_1_window.html#adf3bd7faf17dc6100dd061c8aa1bfaa4',1,'tram::Platform::Window']]], ['setwalkspeed_226',['SetWalkSpeed',['../classtram_1_1_f_p_s_controller_component.html#a5a0be1714e44e2397bf5339ec569f8ba',1,'tram::FPSControllerComponent::SetWalkSpeed()'],['../classtram_1_1_raycast_controller_component.html#aec04a4c35f1bc0449e3f944e9034d7c3',1,'tram::RaycastControllerComponent::SetWalkSpeed(float speed)']]], ['setwallcollisioncallback_227',['SetWallCollisionCallback',['../classtram_1_1_raycast_controller_component.html#af9a6f218caee176cc5b25510edc9b34f',1,'tram::RaycastControllerComponent::SetWallCollisionCallback()'],['../classtram_1_1_f_p_s_controller_component.html#a245323aa009e05cb44bde289b2ca75e2',1,'tram::FPSControllerComponent::SetWallCollisionCallback()']]], ['setwebmainloop_228',['SetWebMainLoop',['../namespacetram_1_1_u_i.html#a654d5f4b77f90147a9098acce21b19df',1,'tram::UI']]], ['setweight_229',['SetWeight',['../classtram_1_1_animation_component.html#a6433689ecdafdbcfe82ba1436a21f41c',1,'tram::AnimationComponent']]], ['setwindowsize_230',['SetWindowSize',['../namespacetram_1_1_u_i.html#a39ef71fa7757a83fa159686920f16f78',1,'tram::UI']]], ['setwindowtitle_231',['SetWindowTitle',['../namespacetram_1_1_u_i.html#a390f8622eafc311400a2454f11dfc016',1,'tram::UI']]], ['setworldtransform_232',['setWorldTransform',['../classtram_1_1_physics_1_1_a_p_i_1_1_callback_motion_state.html#a813941aee5728ff97d671972b1b180b7',1,'tram::Physics::API::CallbackMotionState']]], ['shapecast_233',['Shapecast',['../namespacetram_1_1_physics.html#a415045d72320d7d4512e4ecdc430d89f',1,'tram::Physics::Shapecast()'],['../namespacetram_1_1_physics_1_1_a_p_i.html#af1231217a76d2c25b7134554ce9dac2d',1,'tram::Physics::API::Shapecast()']]], ['shapecastcallback_234',['ShapecastCallback',['../structtram_1_1_physics_1_1_a_p_i_1_1_shapecast_callback.html#a71bda3c478c917d209b6513b99c1f1b1',1,'tram::Physics::API::ShapecastCallback']]], ['shouldexit_235',['ShouldExit',['../classtram_1_1_ext_1_1_kitchensink_1_1_dialog_controller.html#ab1134f34b965c2b538a4d8ca670c233b',1,'tram::Ext::Kitchensink::DialogController::ShouldExit()'],['../namespacetram_1_1_u_i.html#a5f001c3dd4e24194b7b8b7e6ae73d6b4',1,'tram::UI::ShouldExit()']]], ['showerrordialog_236',['ShowErrorDialog',['../namespacetram_1_1_platform.html#a43ffc908587bc0a0680d4e923bf6fb54',1,'tram::Platform']]], ['size_237',['size',['../classtram_1_1_value_array.html#ac33d43e6eeffbfaad8a4349dd56c2230',1,'tram::ValueArray::size()'],['../classtram_1_1_pool.html#aeac3545f8646c676dcc84748db30dfcc',1,'tram::Pool::size()'],['../classtram_1_1_stack_pool.html#aa1b01a988e50384b053dab3204b2872f',1,'tram::StackPool::size()'],['../classtram_1_1_stack.html#a1b57914b1686d486e8e724dd4ef511b2',1,'tram::Stack::size()'],['../classtram_1_1_queue.html#afc039b82d19e4eedbcc47c0f537a7fd4',1,'tram::Queue::size()']]], ['skip_5flinebreak_238',['skip_linebreak',['../classtram_1_1_file.html#ab5086d2c4a3d374fbf26241e6c14c64f',1,'tram::File']]], ['skip_5fnewline_239',['skip_newline',['../classtram_1_1_text_reader_parser.html#a0cba960c7fd3821e8142e4bdffadfe05',1,'tram::TextReaderParser::skip_newline()'],['../classtram_1_1_file_reader_parser.html#a2e9e3bce8f6b88355092541992be60ab',1,'tram::FileReaderParser::skip_newline()']]], ['skip_5fwhitespace_240',['skip_whitespace',['../classtram_1_1_text_reader_parser.html#a81ad733ab82054803ee16aee53958897',1,'tram::TextReaderParser::skip_whitespace()'],['../classtram_1_1_file_reader_parser.html#a3f7c3a32719c64fb24ecd8e0a781738e',1,'tram::FileReaderParser::skip_whitespace()']]], ['sleep_241',['Sleep',['../classtram_1_1_physics_component.html#a8901baef618e56f57553d613bc8af2cc',1,'tram::PhysicsComponent']]], ['sleeprigidbody_242',['SleepRigidbody',['../namespacetram_1_1_physics_1_1_a_p_i.html#a59055c8583f280409fd8fbc7df08f2f4',1,'tram::Physics::API']]], ['slider_243',['Slider',['../namespacetram_1_1_g_u_i.html#a081da10ffbacc71992b191a911acf1b8',1,'tram::GUI']]], ['sound_244',['Sound',['../classtram_1_1_sound.html#a2f9189b04fcabb7aca986bf123e44c37',1,'tram::Sound::Sound(const SharedEntityData &, const ValueArray &)'],['../classtram_1_1_sound.html#aad69728aae94531aae365a3762d1a4e7',1,'tram::Sound::Sound(name_t sound, float volume, vec3 position)'],['../classtram_1_1_audio_1_1_sound.html#a8210efc515c9fff335ca38e09fadd398',1,'tram::Audio::Sound::Sound()']]], ['soundgraph_245',['SoundGraph',['../classtram_1_1_audio_1_1_sound_graph.html#ad9ef3ae1d9537e6e955cd7c8d1357d3c',1,'tram::Audio::SoundGraph']]], ['sphere_246',['Sphere',['../structtram_1_1_physics_1_1_collision_shape.html#a208f202b55cc4bed0b0eb7f181e9b33b',1,'tram::Physics::CollisionShape']]], ['spin_247',['Spin',['../classtram_1_1_physics_component.html#a39981bb11f6e8eb4dcce36f4c380ebec',1,'tram::PhysicsComponent']]], ['spinrigidbody_248',['SpinRigidbody',['../namespacetram_1_1_physics_1_1_a_p_i.html#a43d326db472ec5a9e499b2816a5588c1',1,'tram::Physics::API']]], ['sprite_249',['Sprite',['../classtram_1_1_render_1_1_sprite.html#ad6ccadbf3c461fc6a579506dab6d40b9',1,'tram::Render::Sprite']]], ['sprite_5flist_250',['sprite_list',['../render_2sprite_8cpp.html#aa7ba6e3579e4897ccc9c2e5f8d033b20',1,'sprite.cpp']]], ['spritecomponent_251',['SpriteComponent',['../classtram_1_1_sprite_component.html#ac1a001371822ddc0a285e0741ea2bdb4',1,'tram::SpriteComponent']]], ['stack_252',['Stack',['../classtram_1_1_stack.html#af07b289d86a6b75514c2ae1412d0ab41',1,'tram::Stack']]], ['stackpool_253',['StackPool',['../classtram_1_1_stack_pool.html#ac045057c72646b08dd0042b49ca9170b',1,'tram::StackPool::StackPool(const char *name, size_t max_size, std::initializer_list< T > list)'],['../classtram_1_1_stack_pool.html#a12110066565425c621d05ee4dffbb70c',1,'tram::StackPool::StackPool(const char *name, size_t size)']]], ['start_254',['Start',['../classtram_1_1_physics_component.html#a79d8c1c7d1a2df6937ac901532c880b2',1,'tram::PhysicsComponent::Start()'],['../classtram_1_1_player_component.html#aa8a009699e5fd349e952284665e1d1c3',1,'tram::PlayerComponent::Start()'],['../classtram_1_1_entity_component.html#a64cc26454bf92a709eef5e19931695d6',1,'tram::EntityComponent::Start()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_state_component.html#a335a1c5814483482acbaf2417e624da4',1,'tram::Ext::Kitchensink::AnimationStateComponent::Start()'],['../classtram_1_1_trigger_component.html#a62a3322c918a0cf7b2793b94b1144059',1,'tram::TriggerComponent::Start()'],['../classtram_1_1_template_component.html#a41a703bfee11a984319c23ca8b58601d',1,'tram::TemplateComponent::Start()'],['../classtram_1_1_sprite_component.html#a8a8fe6d5647764bf064a432ec26f59e4',1,'tram::SpriteComponent::Start()'],['../classtram_1_1_render_component.html#a97f294652a7627376510082ca4935490',1,'tram::RenderComponent::Start()'],['../classtram_1_1_particle_component.html#ae89750f03a9e6c0beef9de59414f7a25',1,'tram::ParticleComponent::Start()'],['../classtram_1_1_light_component.html#aee724429d715a9da2793d66b0938080f',1,'tram::LightComponent::Start()'],['../classtram_1_1_decal_component.html#aec504c10a2756f3d0c7746d706483be9',1,'tram::DecalComponent::Start()'],['../classtram_1_1_raycast_controller_component.html#a61f46b2f0838fe1db449109a531f1dad',1,'tram::RaycastControllerComponent::Start()'],['../classtram_1_1_f_p_s_controller_component.html#ab078a61443c6f5d29fa5a9bb1fa06aea',1,'tram::FPSControllerComponent::Start()'],['../classtram_1_1_audio_component.html#a0a1ef247f18c73318db0355a6b0a44f3',1,'tram::AudioComponent::Start()'],['../classtram_1_1_animation_component.html#a6d476ab03612c5e87aadfb6b70a1a8fb',1,'tram::AnimationComponent::Start()'],['../namespacetram_1_1_stats.html#a3b4a3c925a0c33d945546aac71b22c58',1,'tram::Stats::Start()']]], ['staticworldobject_255',['StaticWorldObject',['../classtram_1_1_static_world_object.html#a08c7e874c022df3ec4a4c6bc5a09a2e3',1,'tram::StaticWorldObject']]], ['stepphysics_256',['StepPhysics',['../namespacetram_1_1_physics_1_1_a_p_i.html#a18ff0dc10793f33e66b57c8cd29d9fa2',1,'tram::Physics::API']]], ['stop_257',['Stop',['../classtram_1_1_animation_component.html#a29f7010dec34fdcd9c7a3e9bcadf2b96',1,'tram::AnimationComponent::Stop()'],['../classtram_1_1_audio_component.html#a4acdea9eb5e1750b2c2ff66f07b9daf5',1,'tram::AudioComponent::Stop()'],['../namespacetram_1_1_stats.html#a254f2eae826c19cdfaa8acdc7a80310b',1,'tram::Stats::Stop()']]], ['stopaudiosource_258',['StopAudioSource',['../namespacetram_1_1_audio_1_1_a_p_i.html#a77e3f4ff9024d2adb99aab7a03cb2261',1,'tram::Audio::API']]], ['string_5ffloat_259',['string_float',['../namespacetram_1_1_ext_1_1_menu.html#aab031015981522b1ea19979d05d54770',1,'tram::Ext::Menu']]], ['succ_260',['succ',['../struct__test__case.html#a11762360b352fb17f288e1f11b69efaa',1,'_test_case']]], ['switchstate_261',['SwitchState',['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_table.html#ac68d960146cdf7525c403fa80dce8d1f',1,'tram::Ext::Kitchensink::AnimationTable::SwitchState()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_state_component.html#a616a6e22840e08cf291834d172b22ee7',1,'tram::Ext::Kitchensink::AnimationStateComponent::SwitchState()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#ab4cc583a65fe7ce2582924ca93283361',1,'tram::Ext::Kitchensink::Button::SwitchState()']]] ]; ================================================ FILE: docs/cppapi/search/functions_13.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/functions_13.js ================================================ var searchData= [ ['templatecomponent_0',['TemplateComponent',['../classtram_1_1_template_component.html#ac49dab36bc93c1d44db3fa7b78ec3367',1,'tram::TemplateComponent']]], ['text_1',['Text',['../namespacetram_1_1_g_u_i.html#a1eeac17180cfd99f45e0d997766543c9',1,'tram::GUI']]], ['textbox_2',['TextBox',['../namespacetram_1_1_g_u_i.html#a356c2eeb0e6b3a8c19ed6ee19a448619',1,'tram::GUI::TextBox(char *text, uint32_t length, bool enabled, uint32_t w, uint32_t h)'],['../namespacetram_1_1_g_u_i.html#a197eda70726287d8c846535df181e486',1,'tram::GUI::TextBox(const char *text, uint32_t w, uint32_t h)']]], ['textreaderparser_3',['TextReaderParser',['../classtram_1_1_text_reader_parser.html#a4c9bda65a540a5c369b1bc5c36d19943',1,'tram::TextReaderParser']]], ['textwidth_4',['TextWidth',['../namespacetram_1_1_g_u_i.html#af581d06594c177e5c1e7ea98db61382f',1,'tram::GUI']]], ['textwriterparser_5',['TextWriterParser',['../classtram_1_1_text_writer_parser.html#a3e74edee81b110b0166b90e3bf17e31c',1,'tram::TextWriterParser']]], ['tick_6',['Tick',['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container.html#a5256dac8514420f9b45698cb2298c024',1,'tram::Ext::Kitchensink::AttributeContainer']]], ['to_5fchars_5fconcat_7',['to_chars_concat',['../namespacetram_1_1implementation.html#a28f9a5440be4ee4b82bf3ff7eebba2fe',1,'tram::implementation']]], ['togglemenustate_8',['ToggleMenuState',['../namespacetram_1_1_ext_1_1_menu.html#a6fb37f42d3452b509021c8ccf3c1b17c',1,'tram::Ext::Menu']]], ['top_9',['top',['../classtram_1_1_stack.html#a30a5b622fc4d1be6a302f2101e423e43',1,'tram::Stack']]], ['tostring_10',['ToString',['../classtram_1_1_value.html#a5e5cc98ba9a99ddd337091c91a917c8c',1,'tram::Value']]], ['track_11',['Track',['../namespacetram_1_1_loader.html#a682ad9ccb8fee9638cfea657405e9d54',1,'tram::Loader']]], ['train_12',['Train',['../classtram_1_1_ext_1_1_kitchensink_1_1_train.html#a8d6109469356d31dfe601d2324204a77',1,'tram::Ext::Kitchensink::Train']]], ['transition_13',['Transition',['../classtram_1_1_transition.html#a42f1c234540f31c6f9e67e332e5f55b2',1,'tram::Transition']]], ['trianglevisible_14',['TriangleVisible',['../namespacetram_1_1_render_1_1_a_p_i.html#a908e98b46914c044b8631b88babccb0f',1,'tram::Render::API']]], ['trigger_15',['Trigger',['../classtram_1_1_trigger.html#ad3b87b8e7ae11e8813593402ff1ae12c',1,'tram::Trigger']]], ['triggerautosave_16',['TriggerAutosave',['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_autosave.html#ac6a7eaffb4459cf10007606b0f9c8f8b',1,'tram::Ext::Kitchensink::TriggerAutosave']]], ['triggercomponent_17',['TriggerComponent',['../classtram_1_1_trigger_component.html#acb29106d21d1cf02169a58c1c82c86a3',1,'tram::TriggerComponent']]], ['triggerhurt_18',['TriggerHurt',['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_hurt.html#ae6b5d706f8a9d56a245ac555ec95a44d',1,'tram::Ext::Kitchensink::TriggerHurt']]], ['triggermultiple_19',['TriggerMultiple',['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_multiple.html#a4602154e8a02a03eae992f400079dfb4',1,'tram::Ext::Kitchensink::TriggerMultiple']]], ['triggeronce_20',['TriggerOnce',['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_once.html#accb4e63a197bbd0d350b72d58dc6a127',1,'tram::Ext::Kitchensink::TriggerOnce']]], ['triggerplayermovement_21',['TriggerPlayerMovement',['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_player_movement.html#a944ce8f354e4ba224b3ba2257a80257b',1,'tram::Ext::Kitchensink::TriggerPlayerMovement']]], ['triggerpush_22',['TriggerPush',['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_push.html#a19f24315f51a42ac631cd6e9031f196a',1,'tram::Ext::Kitchensink::TriggerPush']]], ['triggerremove_23',['TriggerRemove',['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_remove.html#a32851695a736fb2e4419782991115f99',1,'tram::Ext::Kitchensink::TriggerRemove']]], ['triggerteleport_24',['TriggerTeleport',['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_teleport.html#a2dc8dfbaa1e358714459a4854860aa8d',1,'tram::Ext::Kitchensink::TriggerTeleport']]], ['try_5fpop_25',['try_pop',['../classtram_1_1_queue.html#a0c059b66ef5b9bac992a134da0b9768a',1,'tram::Queue']]], ['trydebugging_26',['TryDebugging',['../namespacetram_1_1_platform.html#abafedf61de1bb3dc299c601f678ca6d5',1,'tram::Platform']]], ['turnleft_27',['TurnLeft',['../classtram_1_1_f_p_s_controller_component.html#a23e43852ea4528a1b50f28628f5a9f20',1,'tram::FPSControllerComponent::TurnLeft()'],['../classtram_1_1_raycast_controller_component.html#a84b8137c59028604b98c6087ddf03bec',1,'tram::RaycastControllerComponent::TurnLeft()'],['../classtram_1_1_path_follower.html#aa88ed283123c1543ce714b87ec215ba8',1,'tram::PathFollower::TurnLeft()'],['../classtram_1_1_controller_component.html#ad173b5388f4168d4de4acd13e4819089',1,'tram::ControllerComponent::TurnLeft()=0']]], ['turnright_28',['TurnRight',['../classtram_1_1_controller_component.html#a1ebc25137ba38f067f7986e3a5f1d5db',1,'tram::ControllerComponent::TurnRight()'],['../classtram_1_1_f_p_s_controller_component.html#aa68f65e5a902e77db578edf8d1b4af34',1,'tram::FPSControllerComponent::TurnRight()'],['../classtram_1_1_raycast_controller_component.html#a7f441e43b9e92927dbb4103cf7fa3052',1,'tram::RaycastControllerComponent::TurnRight()'],['../classtram_1_1_path_follower.html#a4a7dc721d2c2def8c57b73bf3e398314',1,'tram::PathFollower::TurnRight()']]], ['turnstraight_29',['TurnStraight',['../classtram_1_1_path_follower.html#af9aa9d6eca479eb74eca580212dc42a2',1,'tram::PathFollower']]], ['typetostring_30',['TypeToString',['../namespacetram.html#a8f6d1d8931b6fc9fe7e5767f1352383e',1,'tram']]] ]; ================================================ FILE: docs/cppapi/search/functions_14.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/functions_14.js ================================================ var searchData= [ ['uid_0',['UID',['../structtram_1_1_u_i_d.html#aab45feed090c6e1b82756eb8a47c8c2e',1,'tram::UID::UID()'],['../structtram_1_1_u_i_d.html#a5d4fdf9f636c6e28fefbb716b0c1ad82',1,'tram::UID::UID(const UID &value)'],['../structtram_1_1_u_i_d.html#a8b30e026e1776200b7f91f67c7492aea',1,'tram::UID::UID(const std::string &value)'],['../structtram_1_1_u_i_d.html#a4bfd2fabbf7538d9145235b83784332a',1,'tram::UID::UID(const char *value)']]], ['unequipitem_1',['UnequipItem',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#a3947148514d07596275b3ceddef07ed1',1,'tram::Ext::Kitchensink::Inventory']]], ['unequipslot_2',['UnequipSlot',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#a020f087850b6993a1d3751c2b133063d',1,'tram::Ext::Kitchensink::Inventory']]], ['uninit_3',['Uninit',['../namespacetram_1_1_u_i.html#a5206ed605c69006a0d6ad1b2dafb2a80',1,'tram::UI::Uninit()'],['../namespacetram_1_1_audio.html#a999017ca4b466fef799869fd591d134e',1,'tram::Audio::Uninit()'],['../namespacetram_1_1_audio_1_1_a_p_i.html#adb92f6546681004b6ec62abf005d3f68',1,'tram::Audio::API::Uninit()'],['../namespacetram_1_1_ext_1_1_scripting_1_1_lua.html#a0b662ed28da72b11080b7948181fa066',1,'tram::Ext::Scripting::Lua::Uninit()'],['../namespacetram_1_1_platform_1_1_window.html#a573de0dcedb42bb3fc34a010d3cbff38',1,'tram::Platform::Window::Uninit()'],['../namespacetram_1_1_platform_1_1_input.html#a5206ed605c69006a0d6ad1b2dafb2a80',1,'tram::Platform::Input::Uninit()']]], ['uninitoutput_4',['UninitOutput',['../namespacetram_1_1_audio_1_1_spatial.html#abd2e06cbc247c1a503526098fb084789',1,'tram::Audio::Spatial']]], ['unload_5',['Unload',['../classtram_1_1_scriptable.html#a4f92e3739872ff0938669d2d493f932d',1,'tram::Scriptable::Unload()'],['../classtram_1_1_sound.html#a6070314c5146a08863b061aeafede2b2',1,'tram::Sound::Unload()'],['../classtram_1_1_static_world_object.html#abe3ba490eff6dbed046904e2cda3aa01',1,'tram::StaticWorldObject::Unload()'],['../classtram_1_1_trigger.html#a8c2c332e744a2e780974d4638d388c6e',1,'tram::Trigger::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a8eac7f52eb37a936c9378307412c6c08',1,'tram::Ext::Kitchensink::Button::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_breakable.html#af2fc102e7da4b0707df89f56909a1c20',1,'tram::Ext::Kitchensink::Breakable::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_water.html#a81376f797590abe8a90b35ac999a0613',1,'tram::Ext::Kitchensink::Water::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_train.html#afa1b79f17c17ead03058dd28ae1cc3ef',1,'tram::Ext::Kitchensink::Train::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_pickup.html#a2881141c1ee4783d0b719b1dd28a68e6',1,'tram::Ext::Kitchensink::Pickup::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_text.html#ade7918dd8156ee4252c58eece2cfdb98',1,'tram::Ext::Kitchensink::DebugText::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_shape.html#affdabd90a946e7aae9301f7d47d87fe1',1,'tram::Ext::Kitchensink::DebugShape::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_autosave.html#aea36c18cd09a2fc62b2cd8713744c903',1,'tram::Ext::Kitchensink::TriggerAutosave::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_hurt.html#ac28bb3aede402f40174b4348a10e1cf9',1,'tram::Ext::Kitchensink::TriggerHurt::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_once.html#aa0cc2cfba975cf5a964444914ea15cc9',1,'tram::Ext::Kitchensink::TriggerOnce::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_multiple.html#a9df96abe2232f3566983f29a87e62254',1,'tram::Ext::Kitchensink::TriggerMultiple::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_push.html#aba68720ed7fe5a20f905404548cd71be',1,'tram::Ext::Kitchensink::TriggerPush::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_remove.html#ab3aa0697b3e09b938d18c71253fefb90',1,'tram::Ext::Kitchensink::TriggerRemove::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_teleport.html#a6c178b1022efc43f197d8bebc4e1ba32',1,'tram::Ext::Kitchensink::TriggerTeleport::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_player_movement.html#a566d546dad8cbfe6758851ac38442a9a',1,'tram::Ext::Kitchensink::TriggerPlayerMovement::Unload()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_quest_entity.html#afb7d9e51247faff2fb3b2a67372260fd',1,'tram::Ext::Kitchensink::QuestEntity::Unload()'],['../classtram_1_1_entity.html#a2b9df5ef54954cdcd7b0f3af7aa7f829',1,'tram::Entity::Unload()'],['../classtram_1_1_resource.html#a11d6ce36b6bf1d520bb63d6413e99299',1,'tram::Resource::Unload()'],['../classtram_1_1_world_cell.html#ad023bb63d9cb471fb1b4ab17d59c9b63',1,'tram::WorldCell::Unload()'],['../classtram_1_1_physics_1_1_collision_model.html#a2f20c343448ae313aea88be28784704c',1,'tram::Physics::CollisionModel::Unload()'],['../classtram_1_1_render_1_1_animation.html#ad47884e1acea138f8b664bc2d418dfd6',1,'tram::Render::Animation::Unload()'],['../classtram_1_1_render_1_1_light_graph.html#a798e549b6f611fceee1549ecdf63658a',1,'tram::Render::LightGraph::Unload()'],['../classtram_1_1_render_1_1_material.html#aefa2777f79de1882362e0fc50099a46e',1,'tram::Render::Material::Unload()'],['../classtram_1_1_render_1_1_model.html#a7e5db9d7130f9cda66ad3be78026c673',1,'tram::Render::Model::Unload()'],['../classtram_1_1_audio_1_1_sound_graph.html#a5e25152edb671610cb0edca497a653de',1,'tram::Audio::SoundGraph::Unload()'],['../classtram_1_1_audio_1_1_sound.html#a6070314c5146a08863b061aeafede2b2',1,'tram::Audio::Sound::Unload()'],['../classtram_1_1_crate.html#ab8336e58a8dcb7e3631db13003011232',1,'tram::Crate::Unload()'],['../classtram_1_1_render_1_1_sprite.html#a163aa5c3d09db10acb35f4446705faa4',1,'tram::Render::Sprite::Unload()'],['../classtram_1_1_decoration.html#ad8917fa59a923deca11f37f96825f9b5',1,'tram::Decoration::Unload()'],['../classtram_1_1_light.html#a14d15741d030edc15620a73fbfaf0256',1,'tram::Light::Unload()'],['../classtram_1_1_marker.html#ad8cb67e60618a29e0d170527f30d3e71',1,'tram::Marker::Unload()'],['../classtram_1_1_player.html#afddc1a9d1a0e2a61cc8bb13e210c0643',1,'tram::Player::Unload()']]], ['unlock_6',['Unlock',['../classtram_1_1_spinlock.html#abc3aa4bbf54049125b46326dec076634',1,'tram::Spinlock']]], ['unlock_7',['unlock',['../classtram_1_1_queue.html#a264f19470d0c440e15b3fea1a3ca083a',1,'tram::Queue']]], ['unlockrenderlist_8',['UnlockRenderlist',['../namespacetram_1_1_audio_1_1_spatial.html#a1f2da687a7b846d596f35af37ae63841',1,'tram::Audio::Spatial']]], ['unregister_9',['Unregister',['../classtram_1_1_entity.html#a80727e0995ac3f27addb02613c8e5edd',1,'tram::Entity']]], ['untrack_10',['Untrack',['../namespacetram_1_1_loader.html#add220f7fedcb52197b68d9d17115ceaa',1,'tram::Loader']]], ['update_11',['Update',['../classtram_1_1_sprite_component.html#a8755153a58b06a785cd393fb23252b3c',1,'tram::SpriteComponent::Update()'],['../classtram_1_1_ext_1_1_camera_1_1_camera.html#ae0d37368dbc256f74d6a8eb756fbcd63',1,'tram::Ext::Camera::Camera::Update()'],['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#afb2ef9be0c07a1df11c53cf1a6d632fe',1,'tram::Ext::Camera::FirstPersonCamera::Update()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html#a2d6f211e82a9785ead2324aa02ad7222',1,'tram::Ext::Kitchensink::AIAgent::Update()'],['../classtram_1_1_entity.html#af4a0a09ff81566de5b217018529844c5',1,'tram::Entity::Update()'],['../namespacetram_1_1_g_u_i.html#a19bd1015c21055a46d61eb4193a888cc',1,'tram::GUI::Update()'],['../classtram_1_1_animation_component.html#a6553e17f7e26893e25cca1b229a2ab65',1,'tram::AnimationComponent::Update()'],['../classtram_1_1_controller_component.html#adc0d17de6313da06268b3c14b18e8dcf',1,'tram::ControllerComponent::Update()'],['../classtram_1_1_decal_component.html#a0c93631ef6012a9b3e77b973debda630',1,'tram::DecalComponent::Update()'],['../classtram_1_1_light_component.html#ae3a23ce02a2f45cbfcc386a78acc5db4',1,'tram::LightComponent::Update()'],['../classtram_1_1_particle_component.html#a87d6c21e29d20330fba57f8d3b2134cd',1,'tram::ParticleComponent::Update()'],['../namespacetram_1_1_audio_1_1_a_p_i.html#a55057fbdf290e0782209c5b31d972488',1,'tram::Audio::API::Update()'],['../namespacetram_1_1_audio.html#acb768aeb78a526fe6c4378db6041b06b',1,'tram::Audio::Update()'],['../namespacetram_1_1_ext_1_1_camera.html#abe8df61bea8ea5f58fa6efa942eeaa4c',1,'tram::Ext::Camera::Update()'],['../namespacetram_1_1_ext_1_1_kitchensink.html#a4999baa52dc92a9e3e5ce094d39e6a6f',1,'tram::Ext::Kitchensink::Update()'],['../namespacetram_1_1_ext_1_1_menu.html#ae5c12ef1b6e9e1cc0ee542e6296e9057',1,'tram::Ext::Menu::Update()'],['../namespacetram_1_1_core.html#aca02676414df9541f853df2376da13bd',1,'tram::Core::Update()'],['../namespacetram_1_1_loader.html#aa2ff0e373bfa20733197131513624505',1,'tram::Loader::Update()'],['../namespacetram_1_1_u_i.html#a8d6af6713f2e6c053cacfaab7e628438',1,'tram::UI::Update()'],['../namespacetram_1_1_physics.html#aba25e48ea456c82d6c11ef12b2862184',1,'tram::Physics::Update()'],['../namespacetram_1_1_platform_1_1_window.html#aaed5c879e7890030c7db2b6a03949f39',1,'tram::Platform::Window::Update()'],['../namespacetram_1_1_platform_1_1_input.html#a8d6af6713f2e6c053cacfaab7e628438',1,'tram::Platform::Input::Update()']]], ['updateaction_12',['updateAction',['../classtram_1_1_physics_1_1_path_action.html#a41ae4385e939b2c9eca055424032d050',1,'tram::Physics::PathAction']]], ['updateai_13',['UpdateAI',['../namespacetram_1_1_ext_1_1_kitchensink.html#aa032a6e16a417cef3ada074352b8a242',1,'tram::Ext::Kitchensink']]], ['updatecallbacks_14',['UpdateCallbacks',['../namespacetram_1_1_ext_1_1_menu.html#aabf1b590c1e568b43ccb3060adf2fa22',1,'tram::Ext::Menu']]], ['updatedrawlistfonts_15',['UpdateDrawListFonts',['../namespacetram_1_1_g_u_i.html#aa150493c2b4c1d204d394ec3a8145ef1',1,'tram::GUI']]], ['updatehierarchy_16',['UpdateHierarchy',['../namespacetram_1_1_ext_1_1_kitchensink.html#a68dcf197af43441da209e8296de00111',1,'tram::Ext::Kitchensink']]], ['updatelocation_17',['UpdateLocation',['../classtram_1_1_sprite_component.html#a067d3592ad5bfba2afba0b4a6a447ee8',1,'tram::SpriteComponent::UpdateLocation()'],['../classtram_1_1_particle_component.html#afd1c7f1296b2b2d19aa4f7a7eea2893b',1,'tram::ParticleComponent::UpdateLocation()']]], ['updateoutput_18',['UpdateOutput',['../namespacetram_1_1_audio_1_1_spatial.html#a1369d0d3a2339c9205f38130aaa18b05',1,'tram::Audio::Spatial']]], ['updateparameters_19',['UpdateParameters',['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_once.html#a30104cdda5bc47e58da125d3bf574fc6',1,'tram::Ext::Kitchensink::TriggerOnce::UpdateParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_multiple.html#a0bf6e059ed5c51f77ec170c98d88038d',1,'tram::Ext::Kitchensink::TriggerMultiple::UpdateParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_push.html#abfe9a81308db168ea94212b43c2b2c59',1,'tram::Ext::Kitchensink::TriggerPush::UpdateParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_remove.html#ad6d873ff183a86de8c1997f3c59f6416',1,'tram::Ext::Kitchensink::TriggerRemove::UpdateParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_teleport.html#aa839f0ebcb29f3e79f4bd91aa5c67a5b',1,'tram::Ext::Kitchensink::TriggerTeleport::UpdateParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_player_movement.html#afdf06caa8341620e6e60fcefcd953286',1,'tram::Ext::Kitchensink::TriggerPlayerMovement::UpdateParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_quest_entity.html#ae1268d343f92cdd87ea7ba095a29b6d8',1,'tram::Ext::Kitchensink::QuestEntity::UpdateParameters()'],['../classtram_1_1_entity.html#a8654143c591ec6d8dcb5d2414d4d63a3',1,'tram::Entity::UpdateParameters()'],['../classtram_1_1_crate.html#a30a0ab1f7c54b15b1eb0a02a381790bd',1,'tram::Crate::UpdateParameters()'],['../classtram_1_1_light.html#ae075d84f1f0778ac30f0ba35d040998f',1,'tram::Light::UpdateParameters()'],['../classtram_1_1_marker.html#a1a145d01d9bdd8d6aebd38b3ce27cf3d',1,'tram::Marker::UpdateParameters()'],['../classtram_1_1_player.html#a34cfa479567416e9aa5b3b147b44fdb5',1,'tram::Player::UpdateParameters()'],['../classtram_1_1_scriptable.html#a119e711f82fe681c38b372634754bfe2',1,'tram::Scriptable::UpdateParameters()'],['../classtram_1_1_sound.html#a859500a040dbfa4ac1e303fc2f9b3723',1,'tram::Sound::UpdateParameters()'],['../classtram_1_1_static_world_object.html#a304c5569f576f950ff443c4fd5910f9b',1,'tram::StaticWorldObject::UpdateParameters()'],['../classtram_1_1_trigger.html#ac3db6f95f9583f10e1bbe88f0915e389',1,'tram::Trigger::UpdateParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a5fb8a5285093beccc894039c5102aab4',1,'tram::Ext::Kitchensink::Button::UpdateParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_breakable.html#aae8c4d28e4f057e28f392e96a498890c',1,'tram::Ext::Kitchensink::Breakable::UpdateParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_water.html#acf40cdc632ca2113b4299ac9ce9387d4',1,'tram::Ext::Kitchensink::Water::UpdateParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_train.html#a101e803dc193a3588f046f7e33ec2167',1,'tram::Ext::Kitchensink::Train::UpdateParameters()'],['../classtram_1_1_decoration.html#af3ea5d13e17e6b50f233a9104892ba1c',1,'tram::Decoration::UpdateParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_pickup.html#afc230744f36cb7dc31dcd30ce8d97881',1,'tram::Ext::Kitchensink::Pickup::UpdateParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_text.html#ac335b5e268c6bde3d3d7dbbd7c9358a5',1,'tram::Ext::Kitchensink::DebugText::UpdateParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_shape.html#a2e0f87444db5fef3bd831bea39775302',1,'tram::Ext::Kitchensink::DebugShape::UpdateParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_hurt.html#a81726364a17268ea23d810a35ce4d3b2',1,'tram::Ext::Kitchensink::TriggerHurt::UpdateParameters()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_autosave.html#aeb7b0630b5ed9fa40444e378fa5b5681',1,'tram::Ext::Kitchensink::TriggerAutosave::UpdateParameters()']]], ['updateparentaabb_20',['UpdateParentAABB',['../classtram_1_1_a_a_b_b_tree.html#a32675d95c889b42d34ec88309ccc1adc',1,'tram::AABBTree']]], ['updaterenderlistobject_21',['UpdateRenderListObject',['../classtram_1_1_sprite_component.html#a0ebab8875f064f5119b9bd976fe7f117',1,'tram::SpriteComponent::UpdateRenderListObject()'],['../classtram_1_1_particle_component.html#a809c4b587625c3050decf6df8de83c07',1,'tram::ParticleComponent::UpdateRenderListObject()'],['../classtram_1_1_decal_component.html#a59130c628a9585b0c39b12b96b915994',1,'tram::DecalComponent::UpdateRenderListObject()']]], ['updatespritearray_22',['UpdateSpriteArray',['../namespacetram_1_1_render_1_1_a_p_i.html#a2c690bed4e6f7ccf1e001526b6b6f013',1,'tram::Render::API']]], ['updatetransform_23',['UpdateTransform',['../classtram_1_1_entity.html#a475636f78b92b3eca43ce1d01da4fcb8',1,'tram::Entity']]], ['updatevertexarray_24',['UpdateVertexArray',['../namespacetram_1_1_render_1_1_a_p_i.html#a23acf51fa4097aecd557d23f73131463',1,'tram::Render::API']]], ['uploaduniformbuffer_25',['UploadUniformBuffer',['../namespacetram_1_1_render_1_1_a_p_i.html#a6a7dd403c84682d2d554721e611e5880',1,'tram::Render::API']]], ['utf16tolatin7_26',['UTF16ToLatin7',['../namespacetram_1_1_language.html#aef5799e241bda18ef51f887437408573',1,'tram::Language']]] ]; ================================================ FILE: docs/cppapi/search/functions_15.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/functions_15.js ================================================ var searchData= [ ['validate_0',['validate',['../classtram_1_1_pool.html#a10facadf048aa836508ffd73c22fbc69',1,'tram::Pool']]], ['validateresult_1',['ValidateResult',['../namespacetram_1_1_audio_1_1_spatial.html#ad48745046cf034947258d77acad7b082',1,'tram::Audio::Spatial']]], ['validatetree_2',['ValidateTree',['../classtram_1_1_a_a_b_b_tree.html#a509b43b26b87d2c14783fb7af4ddfb3d',1,'tram::AABBTree::ValidateTree(Node *node)'],['../classtram_1_1_a_a_b_b_tree.html#abc30ba522129a7fe8d093bce4f9ab6c9',1,'tram::AABBTree::ValidateTree(Node *node, size_t num)']]], ['value_3',['Value',['../classtram_1_1_value.html#a5794f8b98f39f0f898874e38bbe9c66f',1,'tram::Value::Value()'],['../classtram_1_1_value.html#ab72671e0091919d1657ac549e9b6bc60',1,'tram::Value::Value(const Value &other)'],['../classtram_1_1_value.html#a853b7775d3db060de6868c3e284e1305',1,'tram::Value::Value(bool value)'],['../classtram_1_1_value.html#a6c99dda196237da9884bd1390dd40f6e',1,'tram::Value::Value(name_t value)'],['../classtram_1_1_value.html#a598196e2d0a2320326b46ed5ca9e6055',1,'tram::Value::Value(const char *value)'],['../classtram_1_1_value.html#ac3b2d9648f97190efe021f4c8345d585',1,'tram::Value::Value(int8_t value)'],['../classtram_1_1_value.html#a32ac730eae3ebef2c9d4218db19f27e5',1,'tram::Value::Value(int16_t value)'],['../classtram_1_1_value.html#a831372ec4d00555168651da5fd654641',1,'tram::Value::Value(int64_t value)'],['../classtram_1_1_value.html#a8aa70a82725f60f68b3d24865edfc275',1,'tram::Value::Value(uint8_t value)'],['../classtram_1_1_value.html#ac198c01333d3f9819a8e08faf95cabeb',1,'tram::Value::Value(uint16_t value)'],['../classtram_1_1_value.html#afe9d45f9c080eacff5b16b8a61e94b6b',1,'tram::Value::Value(uint64_t value)'],['../classtram_1_1_value.html#a17f14d1a9ac224f049a63fe867f93f8e',1,'tram::Value::Value(double value)'],['../classtram_1_1_value.html#a5da5adfcfc734e81d6d10833b551d427',1,'tram::Value::Value(int32_t value)'],['../classtram_1_1_value.html#a21076ffaf589d2099a0ab3d3abe27bb8',1,'tram::Value::Value(uint32_t value)'],['../classtram_1_1_value.html#ad9061d7a9f7f1d440bed085327cb1893',1,'tram::Value::Value(vec2 value)'],['../classtram_1_1_value.html#a39d9d95afcdd16dc499d694e458fb553',1,'tram::Value::Value(vec3 value)'],['../classtram_1_1_value.html#a55c1e2fc1d44a258a1e7574f8dc8301d',1,'tram::Value::Value(vec4 value)'],['../classtram_1_1_value.html#a6b7c80c5327bd2f41fd145d1f9bb3716',1,'tram::Value::Value(quat value)'],['../classtram_1_1_value.html#ad1f3542b668e1dabe541a89be2338e94',1,'tram::Value::Value(float value)'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a18c205b49926dee3f171363f65249349',1,'tram::Ext::Kitchensink::QuestVariable::Value()']]], ['valuearray_4',['ValueArray',['../classtram_1_1_value_array.html#ae0c421c4cb96c4a568d54f7761324552',1,'tram::ValueArray']]], ['valueptr_5',['ValuePtr',['../classtram_1_1_value_ptr.html#a710718917b773c0a1e242cd9d1adb8ab',1,'tram::ValuePtr::ValuePtr()'],['../classtram_1_1_value_ptr.html#ab32d7ed3d22a06ad91776f2604d70e1a',1,'tram::ValuePtr::ValuePtr(const ValuePtr &other)'],['../classtram_1_1_value_ptr.html#ac0043fc618372996a0b05f85074a06b6',1,'tram::ValuePtr::ValuePtr(Value &other)'],['../classtram_1_1_value_ptr.html#a1d7b7f756a82db8ceaa542a2a991702b',1,'tram::ValuePtr::ValuePtr(bool *ptr)'],['../classtram_1_1_value_ptr.html#aeca88a1e5474cb104fcf79d0c579b583',1,'tram::ValuePtr::ValuePtr(name_t *ptr)'],['../classtram_1_1_value_ptr.html#ae34aab6f72a348a3cb5ac1d953e0df60',1,'tram::ValuePtr::ValuePtr(const char **ptr)'],['../classtram_1_1_value_ptr.html#ae042fdfe2489cb32bece84e5993b1c14',1,'tram::ValuePtr::ValuePtr(int32_t *ptr)'],['../classtram_1_1_value_ptr.html#ae055d89765f91e6dbaa448feaf0063c4',1,'tram::ValuePtr::ValuePtr(uint32_t *ptr)'],['../classtram_1_1_value_ptr.html#a47f3134ee2d01c4d863774e072a535e4',1,'tram::ValuePtr::ValuePtr(vec2 *ptr)'],['../classtram_1_1_value_ptr.html#a1bdaf5ddd78cea7f6265b7f2885bd49f',1,'tram::ValuePtr::ValuePtr(vec3 *ptr)'],['../classtram_1_1_value_ptr.html#a92882c2ebfa617edca2359ee75f49db3',1,'tram::ValuePtr::ValuePtr(vec4 *ptr)'],['../classtram_1_1_value_ptr.html#a522c59ef5b59f1ed23637a64bf26f26e',1,'tram::ValuePtr::ValuePtr(quat *ptr)'],['../classtram_1_1_value_ptr.html#a90a98402ca4571e3de89695ccfb9bd35',1,'tram::ValuePtr::ValuePtr(float *ptr)']]], ['vertexdefinitiontofvf_6',['VertexDefinitionToFVF',['../namespacetram_1_1_render_1_1_a_p_i.html#ab4057f1a8dc032f5f4aded5bc14b5119',1,'tram::Render::API']]] ]; ================================================ FILE: docs/cppapi/search/functions_16.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/functions_16.js ================================================ var searchData= [ ['was_5ferror_0',['was_error',['../classtram_1_1_file.html#a14fa0ae7b7ebe485fddf204df95c905f',1,'tram::File']]], ['water_1',['Water',['../classtram_1_1_ext_1_1_kitchensink_1_1_water.html#a61815d9fed63e4724d8704b8f7eb99e2',1,'tram::Ext::Kitchensink::Water']]], ['worldcell_2',['WorldCell',['../classtram_1_1_world_cell.html#abb50e84305e87fea83abf124d311d4f8',1,'tram::WorldCell']]], ['write_5ffloat32_3',['write_float32',['../classtram_1_1_file_writer_parser.html#a52e41cf58a05494af4458da3fa5d47c7',1,'tram::FileWriterParser::write_float32()'],['../classtram_1_1_text_writer_parser.html#a173dd06aa86fe89323ca1002e579fbd5',1,'tram::TextWriterParser::write_float32()'],['../classtram_1_1_file.html#ad37a6a76adf4fd5db765e860a9a20bcf',1,'tram::File::write_float32()']]], ['write_5ffloat64_4',['write_float64',['../classtram_1_1_file_writer_parser.html#aeadeaa02b140dc0aff5f9bd0dfe9d912',1,'tram::FileWriterParser::write_float64()'],['../classtram_1_1_text_writer_parser.html#ab5d92f52efcf315bba5c093f36a26da5',1,'tram::TextWriterParser::write_float64()'],['../classtram_1_1_file.html#a52e71d6324ee7624dee122a59523001c',1,'tram::File::write_float64()']]], ['write_5fint16_5',['write_int16',['../classtram_1_1_file_writer_parser.html#a33e6287ccf1da5b872e9b71892b15b55',1,'tram::FileWriterParser::write_int16()'],['../classtram_1_1_text_writer_parser.html#ade23c91446806e0d7ec6c8ddc1b3af3c',1,'tram::TextWriterParser::write_int16()'],['../classtram_1_1_file.html#a56ca0eb625c5fcef16158a9f107f8a1f',1,'tram::File::write_int16()']]], ['write_5fint32_6',['write_int32',['../classtram_1_1_file_writer_parser.html#a40db8bb41ac6b1df2b8f4f7706e4af51',1,'tram::FileWriterParser::write_int32()'],['../classtram_1_1_text_writer_parser.html#a9c9890c6861506c1b2b66aced0bd7880',1,'tram::TextWriterParser::write_int32()'],['../classtram_1_1_file.html#a912eac8b041a22b2468d4fc2ae2ffbfb',1,'tram::File::write_int32()']]], ['write_5fint64_7',['write_int64',['../classtram_1_1_file_writer_parser.html#aea0efc41d6117ffe74c289fe56b9b78a',1,'tram::FileWriterParser::write_int64()'],['../classtram_1_1_text_writer_parser.html#ae39447a94ffa853f810d7c7967013ef8',1,'tram::TextWriterParser::write_int64()'],['../classtram_1_1_file.html#a3164abdb1966197ca2e9a6cd018770da',1,'tram::File::write_int64()']]], ['write_5fint8_8',['write_int8',['../classtram_1_1_file_writer_parser.html#a2624b7ac01f990d990719ef32f7491f6',1,'tram::FileWriterParser::write_int8()'],['../classtram_1_1_text_writer_parser.html#ad407f6ac2320d490426b64d7de4c8dbc',1,'tram::TextWriterParser::write_int8()'],['../classtram_1_1_file.html#a89b2859ed0ef1b7d66c5a4d9a2d536b2',1,'tram::File::write_int8()']]], ['write_5fname_9',['write_name',['../classtram_1_1_file_writer_parser.html#aee67e0442a2f5db24bfdf9aa9bf37a52',1,'tram::FileWriterParser::write_name()'],['../classtram_1_1_text_writer_parser.html#a93311a154ad4f18ff15bcb705f31d80b',1,'tram::TextWriterParser::write_name()'],['../classtram_1_1_file.html#a3ec500f5f4c888093fdb6d93568fe9f3',1,'tram::File::write_name()']]], ['write_5fnewline_10',['write_newline',['../classtram_1_1_file_writer_parser.html#ad9e6518d91f1a691b801032c280d3c33',1,'tram::FileWriterParser::write_newline()'],['../classtram_1_1_text_writer_parser.html#ab02072d2e22fd07014cf42c19a2e1ef5',1,'tram::TextWriterParser::write_newline()'],['../classtram_1_1_file.html#a7c2767ad1dfe1bc5d644f1a255ba9875',1,'tram::File::write_newline()']]], ['write_5fstring_11',['write_string',['../classtram_1_1_file_writer_parser.html#af7d962155444c0960d1192b99638915d',1,'tram::FileWriterParser::write_string()'],['../classtram_1_1_text_writer_parser.html#a7657b9c3de6cef1a9f09be0da5869929',1,'tram::TextWriterParser::write_string()'],['../classtram_1_1_file.html#acc94c6e5b903c64232ac97079038db91',1,'tram::File::write_string()']]], ['write_5fuint16_12',['write_uint16',['../classtram_1_1_file_writer_parser.html#ac99d04d600e6ac1cc4814dc3c0c35a5b',1,'tram::FileWriterParser::write_uint16()'],['../classtram_1_1_text_writer_parser.html#a01ea6be8c09ed2edd59d11f78170fee4',1,'tram::TextWriterParser::write_uint16()'],['../classtram_1_1_file.html#aaef1b401396e62884686b4773b9e5f6e',1,'tram::File::write_uint16()']]], ['write_5fuint32_13',['write_uint32',['../classtram_1_1_file_writer_parser.html#ab8baa4186c11c563a27f2c3947c62772',1,'tram::FileWriterParser::write_uint32()'],['../classtram_1_1_text_writer_parser.html#a2eee18a0fc2e2c118d4405222a98fb9e',1,'tram::TextWriterParser::write_uint32()'],['../classtram_1_1_file.html#a968e1d9420146f006a7c4868a8978ec5',1,'tram::File::write_uint32()']]], ['write_5fuint64_14',['write_uint64',['../classtram_1_1_file_writer_parser.html#aa29b2c3cd1646e0b81316cd39b8a8542',1,'tram::FileWriterParser::write_uint64()'],['../classtram_1_1_text_writer_parser.html#a887dfa879f5b48ea59e72389db4c436d',1,'tram::TextWriterParser::write_uint64()'],['../classtram_1_1_file.html#abfb1b5c29a40ddbada1f8c01b9c7143e',1,'tram::File::write_uint64()']]], ['write_5fuint8_15',['write_uint8',['../classtram_1_1_file_writer_parser.html#a771545ed3ba23219575e1e10e28fad2b',1,'tram::FileWriterParser::write_uint8()'],['../classtram_1_1_text_writer_parser.html#a1354ba4b11cded7f82a0982aee9fd389',1,'tram::TextWriterParser::write_uint8()'],['../classtram_1_1_file.html#ac8b334b12d808c3bb28ebb92cc8db2d5',1,'tram::File::write_uint8()']]] ]; ================================================ FILE: docs/cppapi/search/functions_17.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/functions_17.js ================================================ var searchData= [ ['yeet_0',['Yeet',['../classtram_1_1_entity.html#ad3430330bb5b0f51f64b23ea38396f91',1,'tram::Entity::Yeet()'],['../classtram_1_1_disk_reader.html#a81a139b80db9fbced34f8bb2f4a753cf',1,'tram::DiskReader::Yeet()'],['../classtram_1_1_disk_writer.html#a564c3fea7e402a81699e563310b58acb',1,'tram::DiskWriter::Yeet()'],['../classtram_1_1_file_reader.html#aadf272a73650e58beb40679038b8fafd',1,'tram::FileReader::Yeet()'],['../classtram_1_1_file_writer.html#a83856556c818cf185c04b5e5e26a0021',1,'tram::FileWriter::Yeet()']]], ['yeet_1',['yeet',['../classtram_1_1_component.html#a49462f491b7ab20bc064693927baf3d4',1,'tram::Component::yeet()'],['../classtram_1_1_component.html#a92887e8a968a2e5c33afde0a97d909d3',1,'tram::Component::yeet()'],['../classtram_1_1_component.html#a7fd2f109de653312be2dd05e70bcb456',1,'tram::Component::yeet()'],['../classtram_1_1_component.html#ade7b2c38396c3e7b4e56575f8a0d45dd',1,'tram::Component::yeet()'],['../classtram_1_1_component.html#a56bd08e6a719e3ce42b1befec0871314',1,'tram::Component::yeet()'],['../classtram_1_1_component.html#a9b57dacbc4100263efa58393d4dcee71',1,'tram::Component::yeet()'],['../classtram_1_1_component.html#abf8fb2ac22a613aeec1352f2b6fd9f19',1,'tram::Component::yeet()'],['../classtram_1_1_component.html#ab03a41f9f06ec0498dbbe9936f89f15a',1,'tram::Component::yeet()'],['../classtram_1_1_component.html#aeff899a413c447e8b1f0c43c2ee1b22d',1,'tram::Component::yeet()'],['../classtram_1_1_component.html#a2eaafb5a31e19e33fd479f78f74dfdbc',1,'tram::Component::yeet()'],['../classtram_1_1_component.html#a33a0538e443702363c86b29422ddecf1',1,'tram::Component::yeet()'],['../classtram_1_1_component.html#adc47ac1f2a537bc6f1bd71203ae7c27a',1,'tram::Component::yeet()'],['../classtram_1_1_component.html#ad29f0c53f47721905f77a3f83a4d2b97',1,'tram::Component::yeet()']]], ['yeet_2',['Yeet',['../namespacetram_1_1_scriptable_type.html#a2be0d23b1b7952145abea19ad2bf6c73',1,'tram::ScriptableType::Yeet()'],['../namespacetram_1_1_async.html#a808bec0c78a3d989b202cc84afed0cfb',1,'tram::Async::Yeet()']]], ['yeetcollisionshape_3',['YeetCollisionShape',['../namespacetram_1_1_physics_1_1_a_p_i.html#a54bd52773f6a40688ec69b6fe87749ce',1,'tram::Physics::API']]], ['yeetrigidbody_4',['YeetRigidbody',['../namespacetram_1_1_physics_1_1_a_p_i.html#a6aa3f489a407250ed34d2b79f4ec83b3',1,'tram::Physics::API']]], ['yeettrigger_5',['YeetTrigger',['../namespacetram_1_1_physics_1_1_a_p_i.html#ab0d01da7b5dffd60aeb55dce7bb92694',1,'tram::Physics::API']]] ]; ================================================ FILE: docs/cppapi/search/functions_18.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/functions_18.js ================================================ var searchData= [ ['_7eaabbtree_0',['~AABBTree',['../classtram_1_1_a_a_b_b_tree.html#a10e8e2eef3ea7b92fe8f62019efb6ebc',1,'tram::AABBTree']]], ['_7eaipackage_1',['~AIPackage',['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_package.html#ad02bb92b98ecc4359ded1713f01eb19e',1,'tram::Ext::Kitchensink::AIPackage']]], ['_7eanimationcomponent_2',['~AnimationComponent',['../classtram_1_1_animation_component.html#ac6008fd710fcfd5b79795890d0535bee',1,'tram::AnimationComponent']]], ['_7eaudiocomponent_3',['~AudioComponent',['../classtram_1_1_audio_component.html#a0a9b7571ead611ac20d86a8c94b15b13',1,'tram::AudioComponent']]], ['_7ecallbackmotionstate_4',['~CallbackMotionState',['../classtram_1_1_physics_1_1_a_p_i_1_1_callback_motion_state.html#a1563529ba951ebec065cf23c7f9d6d59',1,'tram::Physics::API::CallbackMotionState']]], ['_7ecamera_5',['~Camera',['../classtram_1_1_ext_1_1_camera_1_1_camera.html#a35fe3922be2a20a08e724d5d18303111',1,'tram::Ext::Camera::Camera']]], ['_7ecomponent_6',['~Component',['../classtram_1_1_component.html#af9e29eb673f1f11ec14d75aa19d6be1f',1,'tram::Component']]], ['_7econsole_7',['~Console',['../classtram_1_1_ext_1_1_menu_1_1_console.html#adda3db0c47e9495176196c91373522fe',1,'tram::Ext::Menu::Console']]], ['_7edebugmenu_8',['~DebugMenu',['../classtram_1_1_ext_1_1_menu_1_1_debug_menu.html#a7188e373f52410e350fbf91d27c4a9b7',1,'tram::Ext::Menu::DebugMenu']]], ['_7edecalcomponent_9',['~DecalComponent',['../classtram_1_1_decal_component.html#ae71a412c19ba4fbc92fbb17507992267',1,'tram::DecalComponent']]], ['_7ediskreader_10',['~DiskReader',['../classtram_1_1_disk_reader.html#ae9cd54f4c0b32c92fc8dc33238adb228',1,'tram::DiskReader']]], ['_7ediskwriter_11',['~DiskWriter',['../classtram_1_1_disk_writer.html#a798d3cd845e210a17c372c1485b7e587',1,'tram::DiskWriter']]], ['_7eentity_12',['~Entity',['../classtram_1_1_entity.html#a79fd0e828bd002ca6d4505dbc63739e2',1,'tram::Entity']]], ['_7eentitycomponent_13',['~EntityComponent',['../classtram_1_1_entity_component.html#a4c959cc80467ad2e753972bdc4eb7c33',1,'tram::EntityComponent']]], ['_7eentitypicker_14',['~EntityPicker',['../classtram_1_1_ext_1_1_menu_1_1_entity_picker.html#ae218519cd786e399c27b562fdeada24b',1,'tram::Ext::Menu::EntityPicker']]], ['_7eentityproperties_15',['~EntityProperties',['../classtram_1_1_ext_1_1_menu_1_1_entity_properties.html#aa64a874d80a135c0eaa412fde3320808',1,'tram::Ext::Menu::EntityProperties']]], ['_7eeventemit_16',['~EventEmit',['../classtram_1_1_ext_1_1_menu_1_1_event_emit.html#a7fe5f93eb89e11119d5cf0fb44e02494',1,'tram::Ext::Menu::EventEmit']]], ['_7eeventlistener_17',['~EventListener',['../classtram_1_1_event_listener.html#a34b25d8225afb354e3e7ff8fe7ba78b1',1,'tram::EventListener']]], ['_7efile_18',['~File',['../classtram_1_1_file.html#a56f8b809eeff67f9d5ed18580d8fe857',1,'tram::File']]], ['_7efilereader_19',['~FileReader',['../classtram_1_1_file_reader.html#ac1c9f2016c1c475ed82418fb2a2dca8f',1,'tram::FileReader']]], ['_7efilewriter_20',['~FileWriter',['../classtram_1_1_file_writer.html#ab9657acc04bba611bd8f061dcd207f1c',1,'tram::FileWriter']]], ['_7efirstpersoncamera_21',['~FirstPersonCamera',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a3f5112b4261174831aa1e4664fcfb503',1,'tram::Ext::Camera::FirstPersonCamera']]], ['_7efpscontrollercomponent_22',['~FPSControllerComponent',['../classtram_1_1_f_p_s_controller_component.html#a4c0d475fb7ef8b5c98b800b8921cf660',1,'tram::FPSControllerComponent']]], ['_7eintercept_23',['~Intercept',['../structtram_1_1_ext_1_1_menu_1_1_intercept.html#a1f44c91b5eaebb2f6eaab53b76796ce6',1,'tram::Ext::Menu::Intercept']]], ['_7einterceptmenu_24',['~InterceptMenu',['../classtram_1_1_ext_1_1_menu_1_1_intercept_menu.html#a8e311e211e2d9b0d025ce9e1e571a166',1,'tram::Ext::Menu::InterceptMenu']]], ['_7einventorymanager_25',['~InventoryManager',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory_manager.html#a40e187b17336deef3396e8883fad0c6d',1,'tram::Ext::Kitchensink::InventoryManager']]], ['_7elightcomponent_26',['~LightComponent',['../classtram_1_1_light_component.html#a3cfee9529794960ce2238cd8306c438b',1,'tram::LightComponent']]], ['_7elistdialog_27',['~ListDialog',['../classtram_1_1_ext_1_1_kitchensink_1_1_list_dialog.html#a57879c46dacd3aa040198ffeb3c3cc27',1,'tram::Ext::Kitchensink::ListDialog']]], ['_7elistinventorymanager_28',['~ListInventoryManager',['../classtram_1_1_ext_1_1_kitchensink_1_1_list_inventory_manager.html#a5ec9bf5e8398291fcb6271ec4944fb6b',1,'tram::Ext::Kitchensink::ListInventoryManager']]], ['_7elistselection_29',['~ListSelection',['../classtram_1_1_ext_1_1_menu_1_1_list_selection.html#acc2b7e76a954f3d314a73908d427d03b',1,'tram::Ext::Menu::ListSelection']]], ['_7emenu_30',['~Menu',['../classtram_1_1_ext_1_1_menu_1_1_menu.html#a4661c15d6f311be1f7957a4e0ab28305',1,'tram::Ext::Menu::Menu']]], ['_7emessagesend_31',['~MessageSend',['../classtram_1_1_ext_1_1_menu_1_1_message_send.html#a20a8253e3f5b3401aad9cfad27133fb4',1,'tram::Ext::Menu::MessageSend']]], ['_7enavmesh_32',['~Navmesh',['../classtram_1_1_navmesh.html#a6d3c3d41afd62d9551361c255ef9cff3',1,'tram::Navmesh']]], ['_7eoptions_33',['~Options',['../classtram_1_1_ext_1_1_menu_1_1_options.html#a047aa5cac263824ead3e543667b2289b',1,'tram::Ext::Menu::Options']]], ['_7eparticlecomponent_34',['~ParticleComponent',['../classtram_1_1_particle_component.html#a08d2217761e8209be71fb5accfcfcfd7',1,'tram::ParticleComponent']]], ['_7epath_35',['~Path',['../classtram_1_1_path.html#a25df1c0c40a359d561e259394593626f',1,'tram::Path']]], ['_7ephysicscomponent_36',['~PhysicsComponent',['../classtram_1_1_physics_component.html#a4669765afef6e232241d24959bf6a3ba',1,'tram::PhysicsComponent']]], ['_7eplayer_37',['~Player',['../classtram_1_1_player.html#a751cd1b280c732f44f018c82464badcc',1,'tram::Player']]], ['_7eplayercomponent_38',['~PlayerComponent',['../classtram_1_1_player_component.html#a6cf70a77be2388b6062f19b3fa16b1f1',1,'tram::PlayerComponent']]], ['_7epoolptr_39',['~PoolPtr',['../classtram_1_1_pool_ptr.html#aa3872ea828f4efe84b9392f565df53a3',1,'tram::PoolPtr']]], ['_7equestvariable_40',['~QuestVariable',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a0fe85e14b47e33482e46c8138d76d5ba',1,'tram::Ext::Kitchensink::QuestVariable']]], ['_7eraycastcontrollercomponent_41',['~RaycastControllerComponent',['../classtram_1_1_raycast_controller_component.html#ae1b1d5c0947337f319d4a6ac8e29ee01',1,'tram::RaycastControllerComponent']]], ['_7erendercomponent_42',['~RenderComponent',['../classtram_1_1_render_component.html#a8c087151758ef3a7210c7a8c8f8607dd',1,'tram::RenderComponent']]], ['_7eresourceproxy_43',['~ResourceProxy',['../classtram_1_1_resource_proxy.html#ae53d8742d944de173e8eb489f7aadb63',1,'tram::ResourceProxy']]], ['_7escriptable_44',['~Scriptable',['../classtram_1_1_scriptable.html#ac46dc1ccdef6f82c56563b4b498d07bf',1,'tram::Scriptable']]], ['_7esettingsmenu_45',['~SettingsMenu',['../classtram_1_1_ext_1_1_menu_1_1_settings_menu.html#a95521cbfe6936dd0cd0011a107589491',1,'tram::Ext::Menu::SettingsMenu']]], ['_7esignalmenu_46',['~SignalMenu',['../classtram_1_1_ext_1_1_menu_1_1_signal_menu.html#ae32579e6e3511bb5642aa3abf416f6e1',1,'tram::Ext::Menu::SignalMenu']]], ['_7espritecomponent_47',['~SpriteComponent',['../classtram_1_1_sprite_component.html#ac3af9ed8e95feb7d735398fbdd5eb4d2',1,'tram::SpriteComponent']]], ['_7estatisticsmenu_48',['~StatisticsMenu',['../classtram_1_1_ext_1_1_menu_1_1_statistics_menu.html#a6ebc52f5c684a20cfad01e7c62e95809',1,'tram::Ext::Menu::StatisticsMenu']]], ['_7esystemmenu_49',['~SystemMenu',['../classtram_1_1_ext_1_1_menu_1_1_system_menu.html#a65e0843f9e22ac47984d5f7e2ba6a8ce',1,'tram::Ext::Menu::SystemMenu']]], ['_7etemplatecomponent_50',['~TemplateComponent',['../classtram_1_1_template_component.html#a8e89883fc13d2969e300e3dab133624d',1,'tram::TemplateComponent']]], ['_7etransition_51',['~Transition',['../classtram_1_1_transition.html#a7aca14200b843ed9d5f623d7637a5e3b',1,'tram::Transition']]], ['_7etriggercomponent_52',['~TriggerComponent',['../classtram_1_1_trigger_component.html#a9fa2ed0795ec0f93390762bc849c8012',1,'tram::TriggerComponent']]], ['_7euid_53',['~UID',['../structtram_1_1_u_i_d.html#a43f5c1a2523a9ed0ea40b42b730ab835',1,'tram::UID']]], ['_7evalue_54',['~Value',['../classtram_1_1_value.html#a57e02b0f0c958d2a5ac93722d1118b7d',1,'tram::Value']]], ['_7evalueptr_55',['~ValuePtr',['../classtram_1_1_value_ptr.html#aba2c848ef361b2ba2a85e8d4b9a5dfab',1,'tram::ValuePtr']]], ['_7eworldcellproperties_56',['~WorldCellProperties',['../classtram_1_1_ext_1_1_menu_1_1_world_cell_properties.html#af55b32e6c2a70a39efe13fd92ed3574f',1,'tram::Ext::Menu::WorldCellProperties']]] ]; ================================================ FILE: docs/cppapi/search/functions_2.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/functions_2.js ================================================ var searchData= [ ['calcsortkey_0',['CalcSortKey',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#a3460a35f7e6246b3990b5b09f26c6415',1,'tram::Render::API::GLDrawListEntry']]], ['callbackmotionstate_1',['CallbackMotionState',['../classtram_1_1_physics_1_1_a_p_i_1_1_callback_motion_state.html#aa3c82472daee6498cab94722d7d43a05',1,'tram::Physics::API::CallbackMotionState']]], ['callfunction_2',['CallFunction',['../classtram_1_1_script_1_1_interface.html#a5aba7adedc8003e03a2cb0d161b9faed',1,'tram::Script::Interface::CallFunction()'],['../namespacetram_1_1_script.html#af8e8489ae939b80cca8c7b220c230447',1,'tram::Script::CallFunction()']]], ['cancelrequest_3',['CancelRequest',['../namespacetram_1_1_async.html#a00df174c441553df6c3728c4355a4b7e',1,'tram::Async']]], ['capsule_4',['Capsule',['../structtram_1_1_physics_1_1_collision_shape.html#afae4406289b2e70a53335128889c4248',1,'tram::Physics::CollisionShape']]], ['character_5fclasses_5',['character_classes',['../namespacetram_1_1_ext_1_1_kitchensink.html#a4573e832ec8b71f1590c7f8e05a5c6c7',1,'tram::Ext::Kitchensink']]], ['characters_6',['characters',['../namespacetram_1_1_ext_1_1_kitchensink.html#ad4518a370e2bb8c8160f21d50cd952c4',1,'tram::Ext::Kitchensink']]], ['checkbox_7',['CheckBox',['../namespacetram_1_1_g_u_i.html#abd53a76b58ffc880c50cd76f1b6019bf',1,'tram::GUI']]], ['checkreverb_8',['CheckReverb',['../namespacetram_1_1_audio_1_1_spatial.html#a3d836ed6f922b4b64472050dd5b99304',1,'tram::Audio::Spatial']]], ['checktransition_9',['CheckTransition',['../classtram_1_1_entity.html#a0fa0c3702c54eb536cd07eaf49dc799a',1,'tram::Entity']]], ['clear_10',['clear',['../classtram_1_1_component.html#a913f66e1f83b18318e0962d532e77376',1,'tram::Component::clear()'],['../classtram_1_1_event_listener.html#adbbf55ccc50a2a2745bbd06adde45e1b',1,'tram::EventListener::clear()']]], ['clear_11',['Clear',['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html#ab0e2c46e1b281bc6f2d87c2c7f432272',1,'tram::Ext::Kitchensink::AIAgent::Clear()'],['../classtram_1_1_ext_1_1_menu_1_1_menu.html#a172b7acc126ab25cbbb7162c7ae75f19',1,'tram::Ext::Menu::Menu::Clear()']]], ['clearoverride_12',['ClearOverride',['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html#a8b061b128f6b9e6494ed77517224db9a',1,'tram::Ext::Kitchensink::AIAgent']]], ['clicked_13',['Clicked',['../namespacetram_1_1_g_u_i.html#a0d4089794c4aca324d8c19d02ef80a07',1,'tram::GUI']]], ['clickhandled_14',['ClickHandled',['../namespacetram_1_1_g_u_i.html#a6121817714545cc76730037226ca285f',1,'tram::GUI']]], ['clickhandledlate_15',['ClickHandledLate',['../namespacetram_1_1_g_u_i.html#aa6bfb846ae3573d59924997f6ce098b8',1,'tram::GUI']]], ['cliplineinclipspace_16',['ClipLineInClipSpace',['../namespacetram_1_1_render_1_1_a_p_i.html#ab1c5b9548adfc17b5f3a7343e9194b00',1,'tram::Render::API']]], ['cliprenderline_17',['ClipRenderLine',['../namespacetram_1_1_render_1_1_a_p_i.html#a1abd96bf65b5421ee6da77b7f125f3e0',1,'tram::Render::API']]], ['clipsingleclippointlinebottomplane_18',['ClipSingleClipPointLineBottomPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#ae2e0dddbb04d632038f35b35c93119ca',1,'tram::Render::API']]], ['clipsingleclippointlinefarplane_19',['ClipSingleClipPointLineFarPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#acf4c3092dfcec8d8ed7d4fb68be7fb7a',1,'tram::Render::API']]], ['clipsingleclippointlineleftplane_20',['ClipSingleClipPointLineLeftPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#abd64f4c4eafba9f6c03d7019f10a31b8',1,'tram::Render::API']]], ['clipsingleclippointlinenearplane_21',['ClipSingleClipPointLineNearPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#aef9b243efb8e2ad402b88e472fad8263',1,'tram::Render::API']]], ['clipsingleclippointlinerightplane_22',['ClipSingleClipPointLineRightPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#a1d1b7577bb0f160333ab20bd9edabadb',1,'tram::Render::API']]], ['clipsingleclippointlinetopplane_23',['ClipSingleClipPointLineTopPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#a80773bbd781af72dee05332f2e581d0e',1,'tram::Render::API']]], ['clipsinglepointline_24',['ClipSinglePointLine',['../namespacetram_1_1_render_1_1_a_p_i.html#a46caee60f68174eb2c6591274b2a2718',1,'tram::Render::API']]], ['clipsinglepointlinebottomplane_25',['ClipSinglePointLineBottomPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#a7f56b51da726200209f842f1679692c8',1,'tram::Render::API']]], ['clipsinglepointlinefarplane_26',['ClipSinglePointLineFarPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#a3acf6872da87792eac2ed0d1ed5907e8',1,'tram::Render::API']]], ['clipsinglepointlineleftplane_27',['ClipSinglePointLineLeftPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#ab5aff334ca94068954abaa63a7f2e8a0',1,'tram::Render::API']]], ['clipsinglepointlinenearplane_28',['ClipSinglePointLineNearPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#a1e3989389fafae9238714ed27974352e',1,'tram::Render::API']]], ['clipsinglepointlinerightplane_29',['ClipSinglePointLineRightPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#a08517cac3da578ca3841551b8d2e98d5',1,'tram::Render::API']]], ['clipsinglepointlinetopplane_30',['ClipSinglePointLineTopPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#a7f4da9afb94ac65936c1fd9b71100f1d',1,'tram::Render::API']]], ['clipspacetoscreenspace_31',['ClipSpaceToScreenSpace',['../namespacetram_1_1_render_1_1_a_p_i.html#ac21da51349e4de14ceba43b117898853',1,'tram::Render::API']]], ['cliptrianglelist_32',['ClipTriangleList',['../namespacetram_1_1_render_1_1_a_p_i.html#af8330d284873597a2d985086d85e94ef',1,'tram::Render::API']]], ['closeall_33',['CloseAll',['../namespacetram_1_1_ext_1_1_menu.html#abbbd02bf188571d1d66399c4f1ffb295',1,'tram::Ext::Menu']]], ['collate_34',['Collate',['../namespacetram_1_1_stats.html#a1240fac658a4410cdd81f6944087a024',1,'tram::Stats']]], ['collision_35',['Collision',['../classtram_1_1_trigger_component.html#ad3b53b1d861f09301a7d6dfb34fb667d',1,'tram::TriggerComponent']]], ['collisionmodel_36',['CollisionModel',['../classtram_1_1_physics_1_1_collision_model.html#ae85bad411b05db1eaa6ce1dc585c3dbc',1,'tram::Physics::CollisionModel']]], ['color_5fblack_37',['COLOR_BLACK',['../namespacetram_1_1_render.html#a1881266fc3e4ccfe6161b9f53816c1b4',1,'tram::Render']]], ['color_5fblue_38',['COLOR_BLUE',['../namespacetram_1_1_render.html#ac2545e14772852a87dae9066123c2646',1,'tram::Render']]], ['color_5fcyan_39',['COLOR_CYAN',['../namespacetram_1_1_render.html#a9bece9ac513eed3675e8fc05dde16e2c',1,'tram::Render']]], ['color_5fgray_40',['COLOR_GRAY',['../namespacetram_1_1_render.html#a38f1da44cef9b7d17113d9204723e561',1,'tram::Render']]], ['color_5fgreen_41',['COLOR_GREEN',['../namespacetram_1_1_render.html#a46842a211bc249ada03b3879ee9e7d61',1,'tram::Render']]], ['color_5fpink_42',['COLOR_PINK',['../namespacetram_1_1_render.html#aa08fcc8a83e73c8896423742971d97fd',1,'tram::Render']]], ['color_5fred_43',['COLOR_RED',['../namespacetram_1_1_render.html#a3d207aeb8d3bd302970a0ce72b15f98a',1,'tram::Render']]], ['color_5fwhite_44',['COLOR_WHITE',['../namespacetram_1_1_render.html#ac3b0b62b8ab1781496fd3a2ac86eaa7a',1,'tram::Render']]], ['color_5fyellow_45',['COLOR_YELLOW',['../namespacetram_1_1_render.html#a528da7221f08fab1b6d5e3b3cacdb8fc',1,'tram::Render']]], ['compileshaders_46',['CompileShaders',['../namespacetram_1_1_render_1_1_a_p_i.html#a39a089d719f123c75f967ca2a7065d4d',1,'tram::Render::API']]], ['component_47',['Component',['../classtram_1_1_component.html#a45fa994315db8371fbd6b59cfa5d4979',1,'tram::Component']]], ['concat_48',['concat',['../namespacetram_1_1implementation.html#a39fba9c0eb726295d1456c1651b12d45',1,'tram::implementation::concat(const std::string &value)'],['../namespacetram_1_1implementation.html#a6faec7dc4da15e2576e1a201d4eb164a',1,'tram::implementation::concat(const std::string_view &value)'],['../namespacetram_1_1implementation.html#acebb47b38e9273b2c259256c7a8fee5f',1,'tram::implementation::concat(const char *const &value)'],['../namespacetram_1_1implementation.html#a4cec4f0b2a5a9e7fb164820607f105d4',1,'tram::implementation::concat(const char *value)'],['../namespacetram_1_1implementation.html#a7a2a311b556467311387960228c67ab8',1,'tram::implementation::concat(const UID &value)'],['../namespacetram_1_1implementation.html#ad81660eda2af6067bdf5708b9157a524',1,'tram::implementation::concat(const T &value)'],['../namespacetram_1_1implementation.html#a4bb77cc33a48fded3045407919472113',1,'tram::implementation::concat(const char(&value)[N])']]], ['concat_5ffmt_49',['concat_fmt',['../namespacetram_1_1implementation.html#a03b4b9c9589ff25e1b1df4e5491b829f',1,'tram::implementation']]], ['concat_5fnumeric_50',['concat_numeric',['../namespacetram_1_1implementation.html#a829582177c315b267d8c5d25071dc20b',1,'tram::implementation::concat_numeric(const T &value)'],['../namespacetram_1_1implementation.html#aac1de7cbd86415606d60e0476fa6fd56',1,'tram::implementation::concat_numeric(const int64_t &value)'],['../namespacetram_1_1implementation.html#ae9f6692c3813328fafd9e99871fafb04',1,'tram::implementation::concat_numeric(const uint64_t &value)'],['../namespacetram_1_1implementation.html#a8a5a3ae9f84e3585cda2b06cd8221d69',1,'tram::implementation::concat_numeric(const float &value)']]], ['cone_51',['Cone',['../structtram_1_1_physics_1_1_collision_shape.html#a6bfd9e0a322b6a7c5babf73c33695f5b',1,'tram::Physics::CollisionShape']]], ['console_52',['Console',['../classtram_1_1_ext_1_1_menu_1_1_console.html#a8f37ecf596d0db477707c9d3ed698953',1,'tram::Ext::Menu::Console']]], ['containers_53',['containers',['../namespacetram_1_1_ext_1_1_kitchensink.html#aaea789ed77d5f63e8cfe9f4ca2a4ac42',1,'tram::Ext::Kitchensink']]], ['containsentity_54',['ContainsEntity',['../classtram_1_1_render_1_1_light_graph.html#a5d61946d71fd0b3765492c2f7b5d4e58',1,'tram::Render::LightGraph']]], ['continue_55',['Continue',['../classtram_1_1_animation_component.html#ad6f14c184f255d16a73dd7fb1ad3b52f',1,'tram::AnimationComponent']]], ['crate_56',['Crate',['../classtram_1_1_crate.html#a1a395f9988ba5ae548823524ea33da06',1,'tram::Crate::Crate(const char *nname, const char *modelname, const char *collisionmodelname, vec3 pos, vec3 rot)'],['../classtram_1_1_crate.html#a5b3a84d80ef6d5107b4eed8b6f4a07f1',1,'tram::Crate::Crate(const SharedEntityData &, const ValueArray &)']]], ['createindexedvertexarray_57',['CreateIndexedVertexArray',['../namespacetram_1_1_render_1_1_a_p_i.html#ae22f8a73faf3d561003265a51e3ca2b3',1,'tram::Render::API']]], ['createspritearray_58',['CreateSpriteArray',['../namespacetram_1_1_render_1_1_a_p_i.html#af87e801d1160ed2235b7188a506f753d',1,'tram::Render::API']]], ['createtexture_59',['CreateTexture',['../namespacetram_1_1_render_1_1_a_p_i.html#a72ff5f43fc09f16266e3fc9ed33715af',1,'tram::Render::API']]], ['createvertexarray_60',['CreateVertexArray',['../namespacetram_1_1_render_1_1_a_p_i.html#a76f3030e7ef229bee087b336d8882232',1,'tram::Render::API']]], ['crouch_61',['Crouch',['../classtram_1_1_raycast_controller_component.html#a6cde78db12e923186e1d548a2ceb9d8d',1,'tram::RaycastControllerComponent::Crouch()'],['../classtram_1_1_f_p_s_controller_component.html#a44ff24373b7604e870849d286e3fe86e',1,'tram::FPSControllerComponent::Crouch()'],['../classtram_1_1_controller_component.html#aeca250fb793765f6d36d00ef05e9f931',1,'tram::ControllerComponent::Crouch()']]], ['cursorover_62',['CursorOver',['../namespacetram_1_1_g_u_i.html#a4e023aaf6835da7993924f1796035f0c',1,'tram::GUI']]], ['cylinder_63',['Cylinder',['../structtram_1_1_physics_1_1_collision_shape.html#a16a7c9a700bb8498cdc70e4b57e1c248',1,'tram::Physics::CollisionShape']]] ]; ================================================ FILE: docs/cppapi/search/functions_3.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/functions_3.js ================================================ var searchData= [ ['debugdraw_0',['debugDraw',['../classtram_1_1_physics_1_1_path_action.html#a8dce3b286d6b2e756a8b9890bf9d9992',1,'tram::Physics::PathAction']]], ['debugdrawtree_1',['DebugDrawTree',['../namespacetram_1_1_render_1_1_a_a_b_b.html#ad017e45f12e6ac18dfa2417e462525ef',1,'tram::Render::AABB']]], ['debugmenue_2',['DebugMenue',['../namespacetram_1_1_ext_1_1_menu.html#afe05ec9db55f3311aea523260dcf8db7',1,'tram::Ext::Menu']]], ['debugshape_3',['DebugShape',['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_shape.html#a20bdf86907cd7ccadbffa94d53dfac0d',1,'tram::Ext::Kitchensink::DebugShape']]], ['debugtext_4',['DebugText',['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_text.html#a9246c8960e6ae16f5c13bcb030d2608a',1,'tram::Ext::Kitchensink::DebugText']]], ['decalcomponent_5',['DecalComponent',['../classtram_1_1_decal_component.html#a86fa64e28b7c9c0784be77892022a96d',1,'tram::DecalComponent']]], ['decoration_6',['Decoration',['../classtram_1_1_decoration.html#a80442c970e96a9d3ec14046048833d87',1,'tram::Decoration']]], ['delete_7',['Delete',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory_manager.html#af3c70682b3ed7f666e4170aa14a1fea0',1,'tram::Ext::Kitchensink::InventoryManager::Delete()'],['../classtram_1_1_pool_proxy.html#a0565709eb51102242ceb5488fc66f8ff',1,'tram::PoolProxy::Delete()']]], ['deletelight_8',['DeleteLight',['../namespacetram_1_1_render_1_1_a_p_i.html#acf65aad3d61388081cff7f81c92368a4',1,'tram::Render::API']]], ['deletematerial_9',['DeleteMaterial',['../namespacetram_1_1_render_1_1_a_p_i.html#a26c75429ce3913f26e9df148750d4716',1,'tram::Render::API']]], ['dialogcontroller_10',['DialogController',['../classtram_1_1_ext_1_1_kitchensink_1_1_dialog_controller.html#ab13380e0377c25667f57e127f1971ae7',1,'tram::Ext::Kitchensink::DialogController']]], ['direction_5fforward_11',['DIRECTION_FORWARD',['../namespacetram.html#acc61b04dbad891d3eb08e0b5eb842395',1,'tram']]], ['direction_5fside_12',['DIRECTION_SIDE',['../namespacetram.html#a03a6f88b2cb4818644b5f1fe7e7e3511',1,'tram']]], ['direction_5fup_13',['DIRECTION_UP',['../namespacetram.html#ac7e1cf0d1d50c4b3afaac5727d3f5680',1,'tram']]], ['disablecursor_14',['DisableCursor',['../namespacetram_1_1_platform_1_1_window.html#a4172bf310d20904476bbdd69dedc2947',1,'tram::Platform::Window']]], ['disabledeactivation_15',['DisableDeactivation',['../classtram_1_1_physics_component.html#acad64c1b68c2f78fa2febef09e8f393a',1,'tram::PhysicsComponent']]], ['disablerigidbodydeactivation_16',['DisableRigidbodyDeactivation',['../namespacetram_1_1_physics_1_1_a_p_i.html#a5bc20f737d7d6dae2bb8a8c768b04cb7',1,'tram::Physics::API']]], ['diskreader_17',['DiskReader',['../classtram_1_1_disk_reader.html#a565638ef66be9c7cd05200056762cc30',1,'tram::DiskReader']]], ['diskwriter_18',['DiskWriter',['../classtram_1_1_disk_writer.html#ad12321c26492fcaef43740bf21120d25',1,'tram::DiskWriter']]], ['dispatch_19',['Dispatch',['../structtram_1_1_event.html#a1d1f19efb6907f2fd3eccc398dd2a9f3',1,'tram::Event::Dispatch()'],['../structtram_1_1_message.html#aa148e227c8da865e87f8122c0f4ab41a',1,'tram::Message::Dispatch()']]], ['display_20',['Display',['../classtram_1_1_ext_1_1_kitchensink_1_1_list_dialog.html#a95629efafbccd335e434a1c97b9c6d21',1,'tram::Ext::Kitchensink::ListDialog::Display()'],['../structtram_1_1_ext_1_1_menu_1_1_intercept.html#a895d3bf8867a84c9001e51b5e0601539',1,'tram::Ext::Menu::Intercept::Display()'],['../structtram_1_1_ext_1_1_menu_1_1_message_intercept.html#aba89a9144dabfeaa8946944f3489ad3a',1,'tram::Ext::Menu::MessageIntercept::Display()'],['../structtram_1_1_ext_1_1_menu_1_1_event_intercept.html#a01e67c6d1a67bd394e8f74816eb1b924',1,'tram::Ext::Menu::EventIntercept::Display()'],['../structtram_1_1_ext_1_1_menu_1_1_log_intercept.html#ad70ddb5580e8cb9c2203f873bf006f15',1,'tram::Ext::Menu::LogIntercept::Display()'],['../classtram_1_1_ext_1_1_menu_1_1_debug_menu.html#a18c5d317ba9354cd41742e98fc2f723d',1,'tram::Ext::Menu::DebugMenu::Display()'],['../classtram_1_1_ext_1_1_menu_1_1_options.html#a2987ac69185cc8573e00557bcc8eda86',1,'tram::Ext::Menu::Options::Display()'],['../classtram_1_1_ext_1_1_menu_1_1_console.html#aae32f9a7938c628c698659957609cd7c',1,'tram::Ext::Menu::Console::Display()'],['../classtram_1_1_ext_1_1_menu_1_1_menu.html#a99db3585e61c0c71f99ef8637edce775',1,'tram::Ext::Menu::Menu::Display()'],['../classtram_1_1_ext_1_1_menu_1_1_system_menu.html#aebef9f1ed425a93b52230f3d176a765a',1,'tram::Ext::Menu::SystemMenu::Display()'],['../classtram_1_1_ext_1_1_menu_1_1_settings_menu.html#a629fd955067640b30e849692d1eb5cfb',1,'tram::Ext::Menu::SettingsMenu::Display()'],['../classtram_1_1_ext_1_1_menu_1_1_event_emit.html#a62ff56e1969bb2b7cdd49446f8688de2',1,'tram::Ext::Menu::EventEmit::Display()'],['../classtram_1_1_ext_1_1_menu_1_1_statistics_menu.html#a397886851d7cc3d304c552a8807e0596',1,'tram::Ext::Menu::StatisticsMenu::Display()'],['../classtram_1_1_ext_1_1_menu_1_1_world_cell_properties.html#a10cc9429cb5dca2cfbbb12505d28acbc',1,'tram::Ext::Menu::WorldCellProperties::Display()'],['../classtram_1_1_ext_1_1_menu_1_1_intercept_menu.html#ace624827c9bfd8ef24aa15db1c2249c3',1,'tram::Ext::Menu::InterceptMenu::Display()'],['../classtram_1_1_ext_1_1_menu_1_1_message_send.html#a71295df4e886a77b31a12f873b8cf5c2',1,'tram::Ext::Menu::MessageSend::Display()'],['../classtram_1_1_ext_1_1_menu_1_1_list_selection.html#a5f67db7b4e9fa99e969427ecee0636f6',1,'tram::Ext::Menu::ListSelection::Display()'],['../classtram_1_1_ext_1_1_menu_1_1_entity_picker.html#ad21501bc964c628113e9b89f396e602c',1,'tram::Ext::Menu::EntityPicker::Display()'],['../classtram_1_1_ext_1_1_menu_1_1_entity_properties.html#af4c550343edb9f75ef00d1b15e66636e',1,'tram::Ext::Menu::EntityProperties::Display()'],['../classtram_1_1_ext_1_1_menu_1_1_signal_menu.html#af2d0156404c23e79e3700b2cb0936282',1,'tram::Ext::Menu::SignalMenu::Display()']]], ['displaylog_21',['DisplayLog',['../namespacetram.html#aafb9d3143cd13b2e8267161ce4813fce',1,'tram']]], ['draw_22',['Draw',['../classtram_1_1_path.html#aa5f2edca27bfb5eccec30976a3bb9b29',1,'tram::Path::Draw()'],['../classtram_1_1_octree.html#a03a71d1c84b4b3408a2929859a386d38',1,'tram::Octree::Draw()'],['../classtram_1_1_octree.html#a687c55bafdd80a22f550de2cbb1a8197',1,'tram::Octree::Draw(Node *node)']]], ['draw3dtext_23',['draw3dText',['../classtram_1_1_physics_1_1_a_p_i_1_1_physics_debug_draw.html#abee77254ff778ce50a428302815f0e3c',1,'tram::Physics::API::PhysicsDebugDraw']]], ['drawaabb_24',['DrawAABB',['../classtram_1_1_render_1_1_model.html#a1154b475ba52ad0bcae60926b9a1a014',1,'tram::Render::Model']]], ['drawbox_25',['DrawBox',['../namespacetram_1_1_g_u_i.html#a8712e4716acb1c5eab60d40112c81d88',1,'tram::GUI']]], ['drawboxhorizontal_26',['DrawBoxHorizontal',['../namespacetram_1_1_g_u_i.html#aaf5392e3e82d599804ba655dc2bba32c',1,'tram::GUI']]], ['drawcontactpoint_27',['drawContactPoint',['../classtram_1_1_physics_1_1_a_p_i_1_1_physics_debug_draw.html#afe6a8f72a58739c6ea26e3312b813cdd',1,'tram::Physics::API::PhysicsDebugDraw']]], ['drawdebug_28',['DrawDebug',['../namespacetram_1_1_physics_1_1_a_p_i.html#a1acb48d6ea2049b83205bbab3dc594e7',1,'tram::Physics::API::DrawDebug()'],['../namespacetram_1_1_physics_1_1_a_p_i.html#a11e3876e4d86bc1c3b68d5d35c08ced6',1,'tram::Physics::API::DrawDebug(bool)']]], ['drawglyph_29',['DrawGlyph',['../namespacetram_1_1_g_u_i.html#a15d7e1006b2983a29f7f63f7dc2a6e73',1,'tram::GUI']]], ['drawline_30',['drawLine',['../classtram_1_1_physics_1_1_a_p_i_1_1_physics_debug_draw.html#adae82b61c61a54f3b62cdd0499b9cb44',1,'tram::Physics::API::PhysicsDebugDraw']]] ]; ================================================ FILE: docs/cppapi/search/functions_4.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/functions_4.js ================================================ var searchData= [ ['emitparticle_0',['EmitParticle',['../classtram_1_1_particle_component.html#a154e0103510b6ba7bfe4e0c5109bb420',1,'tram::ParticleComponent']]], ['empty_1',['Empty',['../classtram_1_1_ext_1_1_menu_1_1_menu.html#a8dc18857f173b127ee34a3fd65306d9f',1,'tram::Ext::Menu::Menu']]], ['enablecursor_2',['EnableCursor',['../namespacetram_1_1_platform_1_1_window.html#a2079845fb32cb1e0a7a65742f381a567',1,'tram::Platform::Window']]], ['end_3',['end',['../classtram_1_1_pool.html#a4916bb192a24754ced8b7e712dd55107',1,'tram::Pool::end()'],['../classtram_1_1_stack_pool.html#abd79d28bc444c59c3a1435e7580a3498',1,'tram::StackPool::end()']]], ['end_4',['End',['../namespacetram_1_1_g_u_i.html#a7eb89f38a5f8e51434e7fdc3c21245e1',1,'tram::GUI']]], ['endframe_5',['EndFrame',['../namespacetram_1_1_u_i.html#a303b8e17aa7e0dff5839a0b1ab33d391',1,'tram::UI']]], ['entity_6',['Entity',['../classtram_1_1_entity.html#a5cd683c73f9413ca09d5417c550eaf3d',1,'tram::Entity::Entity()'],['../classtram_1_1_entity.html#ab2c160e37d196c3a8f7224adbe282f8e',1,'tram::Entity::Entity(name_t name)'],['../classtram_1_1_entity.html#aae1750f202fa57bb040126c1d8af0b80',1,'tram::Entity::Entity(const SharedEntityData &)']]], ['entitycomponent_7',['EntityComponent',['../classtram_1_1_entity_component.html#a407901dc86e2eeb0b594d3730081f3e8',1,'tram::EntityComponent']]], ['entitypicker_8',['EntityPicker',['../classtram_1_1_ext_1_1_menu_1_1_entity_picker.html#ab1f5eb1fcacb7e7e21312fca561f48af',1,'tram::Ext::Menu::EntityPicker']]], ['equipitem_9',['EquipItem',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#a0d4285f55bb35f3df054086b8433be71',1,'tram::Ext::Kitchensink::Inventory']]], ['evaluate_10',['Evaluate',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#ad202900b3ff880d1dfd139b9e9c6029d',1,'tram::Ext::Kitchensink::QuestVariable::Evaluate()'],['../classtram_1_1_script_1_1_interface.html#ae8cde55720004d7319685163a092ca4a',1,'tram::Script::Interface::Evaluate()'],['../namespacetram_1_1_script.html#a658aaf0911ed091e1f6566375fc45142',1,'tram::Script::Evaluate()']]], ['eventhandler_11',['EventHandler',['../classtram_1_1_animation_component.html#adc4711c76a0f6e6875f2e57400724f5b',1,'tram::AnimationComponent::EventHandler()'],['../classtram_1_1_audio_component.html#ac455283db7b930059f29e82905172ce8',1,'tram::AudioComponent::EventHandler()'],['../classtram_1_1_f_p_s_controller_component.html#a5c5b27f8fb2ca29b48fc4d291b71b8d3',1,'tram::FPSControllerComponent::EventHandler()'],['../classtram_1_1_physics_component.html#a60cc1624fa5521dfcd05449e99a123d8',1,'tram::PhysicsComponent::EventHandler()'],['../classtram_1_1_player_component.html#a7880e2d2d99db2ebfed2115f3682c4c8',1,'tram::PlayerComponent::EventHandler()'],['../classtram_1_1_render_component.html#a18fa5b9e63b9ef19051e0c705a19e46e',1,'tram::RenderComponent::EventHandler()'],['../classtram_1_1_sprite_component.html#a69fa78a5255a802e1975ce0a4eea868f',1,'tram::SpriteComponent::EventHandler()'],['../classtram_1_1_template_component.html#ac2eeaaa1164b1a5cbbc6f54b5ce16dc2',1,'tram::TemplateComponent::EventHandler()'],['../classtram_1_1_trigger_component.html#a1576403ad5e3fe824e53453660ba90c5',1,'tram::TriggerComponent::EventHandler()'],['../classtram_1_1_scriptable.html#a2ece532aab87d1570b1af751ffaf0f16',1,'tram::Scriptable::EventHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_state_component.html#af88977e10e060bf16fb2398dd127edad',1,'tram::Ext::Kitchensink::AnimationStateComponent::EventHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a328b1b451e9dabf23d90ea283bfb73bc',1,'tram::Ext::Kitchensink::Button::EventHandler()'],['../classtram_1_1_entity.html#a2ca775133055e997ef91ac3db27f2a0a',1,'tram::Entity::EventHandler()'],['../classtram_1_1_entity_component.html#a596335e001ab39c1f575ece6defaf04b',1,'tram::EntityComponent::EventHandler()'],['../classtram_1_1_light_component.html#ac5d511b09dd704670222c89f7f4bfb40',1,'tram::LightComponent::EventHandler()'],['../classtram_1_1_decal_component.html#a8a57cc185df060416fd0d3b69cd7422d',1,'tram::DecalComponent::EventHandler()'],['../classtram_1_1_raycast_controller_component.html#a3a8fb26c4de4b8c90b698f1f16ca3958',1,'tram::RaycastControllerComponent::EventHandler()'],['../classtram_1_1_particle_component.html#a7403bb854acd08f1060bf3b659d62c75',1,'tram::ParticleComponent::EventHandler()']]], ['exists_12',['Exists',['../classtram_1_1_hashmap.html#a5598902c979d9635a7fa9c8b3aff4f4e',1,'tram::Hashmap::Exists(UID key)'],['../classtram_1_1_hashmap.html#a88408232bfa868c8345ed898a3a61162',1,'tram::Hashmap::Exists(uint32_t key)']]] ]; ================================================ FILE: docs/cppapi/search/functions_5.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/functions_5.js ================================================ var searchData= [ ['factions_0',['factions',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab0abcbf31d67465bc42fb01a8eec2bef',1,'tram::Ext::Kitchensink']]], ['fadein_1',['FadeIn',['../classtram_1_1_animation_component.html#aaf4161bf1e5c2cee940304cf35b8c178',1,'tram::AnimationComponent']]], ['fadeout_2',['FadeOut',['../classtram_1_1_animation_component.html#aeb3ad3551105ef1e3a6306808900ae50',1,'tram::AnimationComponent']]], ['fail_3',['fail',['../struct__test__case.html#ad2d0094cb5eb924936cb840093b1048f',1,'_test_case']]], ['file_4',['File',['../classtram_1_1_file.html#ab1b5812649adfd4ed0b16998c08beed6',1,'tram::File']]], ['fillframe_5',['FillFrame',['../namespacetram_1_1_g_u_i.html#aa9e738ecaea859c6a6839587a10c4ac6',1,'tram::GUI']]], ['find_6',['Find',['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html#ab263983af0673c1974878b5d7299492e',1,'tram::Ext::Kitchensink::AIAgent::Find()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_table.html#ae762d3e66cb45a4739a5cbfa915da3a1',1,'tram::Ext::Kitchensink::AnimationTable::Find()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_attribute_info.html#a3ee5018c065a5d17681306983e5240b5',1,'tram::Ext::Kitchensink::AttributeInfo::Find()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container.html#a16dcafc82dbe7851b127f9bbf6a42933',1,'tram::Ext::Kitchensink::AttributeContainer::Find(Entity *)'],['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container.html#aea111bc346b485851485b4354b766b0e',1,'tram::Ext::Kitchensink::AttributeContainer::Find(id_t)'],['../classtram_1_1_ext_1_1_kitchensink_1_1_faction.html#a1f3e834fa982e5d591e0e382fc477e9c',1,'tram::Ext::Kitchensink::Faction::Find()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_character_class.html#ac7025bc9d8e297e380181b2f005f854d',1,'tram::Ext::Kitchensink::CharacterClass::Find()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_character.html#aad6e2471fc73d5228e202990dba4af13',1,'tram::Ext::Kitchensink::Character::Find(Entity *entity)'],['../classtram_1_1_ext_1_1_kitchensink_1_1_character.html#a70f852d7053390285611b9a81062e1f2',1,'tram::Ext::Kitchensink::Character::Find(id_t entity_id)'],['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_topic.html#a6de61f6febffca8612e76926575df914',1,'tram::Ext::Kitchensink::DialogTopic::Find()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a378e9829bffe817d03eec5844816015b',1,'tram::Ext::Kitchensink::ItemClass::Find()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#a1d6dcf5fb1afcbaa6cb79de3bfbbf97b',1,'tram::Ext::Kitchensink::Inventory::Find()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest.html#a678d358f3b12331a4f01ac12cd161773',1,'tram::Ext::Kitchensink::Quest::Find()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_sound_table.html#ae4cbf60676839ac61f953d315f0ac3cc',1,'tram::Ext::Kitchensink::SoundTable::Find()'],['../classtram_1_1_entity.html#afba6aa3dbbd10ebc42beb6729bdb7da2',1,'tram::Entity::Find(id_t entity_id)'],['../classtram_1_1_entity.html#aa949dd2fafeb955d699271dbe41c75ec',1,'tram::Entity::Find(name_t entity_name)'],['../classtram_1_1_navmesh.html#aff49c111f072f7c12a1e209960a1cb6f',1,'tram::Navmesh::Find()'],['../classtram_1_1_path.html#ace5eac8a595a419404e4b4489f91a62a',1,'tram::Path::Find()'],['../classtram_1_1_transition.html#a1308ec63595db0c05d3085de4f50d9ce',1,'tram::Transition::Find()'],['../classtram_1_1_world_cell.html#abe83e953cd5a7905807a1f4ab8157d01',1,'tram::WorldCell::Find(vec3 point)'],['../classtram_1_1_world_cell.html#a7757aa7efe44bb6bb948b559948e12b3',1,'tram::WorldCell::Find(name_t name)'],['../classtram_1_1_physics_1_1_collision_model.html#af125ec91786a3422e236709fb2ee72da',1,'tram::Physics::CollisionModel::Find()'],['../classtram_1_1_render_1_1_animation.html#ac0bf7285a28f37f9e41d66c4325f8799',1,'tram::Render::Animation::Find()'],['../classtram_1_1_render_1_1_light_graph.html#a33ebe4cfeae7cd18ceacb54d3e4c5a3f',1,'tram::Render::LightGraph::Find()'],['../classtram_1_1_render_1_1_material.html#a79794b5c6356b0a4da39a6c9cf468fbc',1,'tram::Render::Material::Find()'],['../classtram_1_1_render_1_1_model.html#a02abf1c725962593c6bbfa17d4fa2e43',1,'tram::Render::Model::Find()'],['../classtram_1_1_render_1_1_a_p_i_1_1_vertex_shader.html#a953ba1f0a3d7657b8a242ae8193b0987',1,'tram::Render::API::VertexShader::Find()'],['../classtram_1_1_render_1_1_a_p_i_1_1_fragment_shader.html#a7d679ad0deb8e595b3182c6c0e786de3',1,'tram::Render::API::FragmentShader::Find()'],['../classtram_1_1_render_1_1_sprite.html#a661555af281cb553323a07a3bf39c08e',1,'tram::Render::Sprite::Find()'],['../classtram_1_1_hashmap.html#a7520d8013e86f06e43c2d46aacba39c1',1,'tram::Hashmap::Find(UID key)'],['../classtram_1_1_hashmap.html#afea08bf4be8e807fc6da90e1992e3df9',1,'tram::Hashmap::Find(uint32_t key)'],['../classtram_1_1_octree.html#a78b461493864e5124fa6972004a754d6',1,'tram::Octree::Find()'],['../classtram_1_1_audio_1_1_sound_graph.html#aaa0cdf6c6a42f59b3cc2362db60c16d3',1,'tram::Audio::SoundGraph::Find()'],['../classtram_1_1_audio_1_1_sound.html#add19eef6a4ddc9d13638368c623f572a',1,'tram::Audio::Sound::Find()'],['../namespacetram_1_1_system.html#a80685c0799c2a0af7c493bfaf7de86de',1,'tram::System::Find()']]], ['findaabbintersection_7',['FindAABBIntersection',['../classtram_1_1_a_a_b_b_tree.html#a72800aa33c03780b35f5510d8c80526b',1,'tram::AABBTree::FindAABBIntersection(vec3 min, vec3 max, auto callback)'],['../classtram_1_1_a_a_b_b_tree.html#a51ebff27bd53240096c90c198b970dab',1,'tram::AABBTree::FindAABBIntersection(Node *node, vec3 min, vec3 max, auto callback)']]], ['findall_8',['FindAll',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest.html#ada625bbce2632f2d828a2f3b721f9165',1,'tram::Ext::Kitchensink::Quest']]], ['findallfromaabb_9',['FindAllFromAABB',['../classtram_1_1_render_1_1_model.html#a6c1e5a51904349dbac4e6055b54f087a',1,'tram::Render::Model']]], ['findallfromray_10',['FindAllFromRay',['../classtram_1_1_render_1_1_model.html#a3c38cde838ea3f56d2e77c23c8a1d77f',1,'tram::Render::Model']]], ['findallintersectionsfromaabb_11',['FindAllIntersectionsFromAABB',['../namespacetram_1_1_render_1_1_a_a_b_b.html#a5030c8f345b2d6543274015951361d4d',1,'tram::Render::AABB']]], ['findcompartment_12',['FindCompartment',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#af287eac367f38581825d3b4302642af9',1,'tram::Ext::Kitchensink::Inventory']]], ['findintersection_13',['FindIntersection',['../classtram_1_1_a_a_b_b_tree.html#a1f62c3784491fc7b1b924e9801d5685d',1,'tram::AABBTree::FindIntersection(vec3 ray_pos, vec3 ray_dir, Node *node, std::vector< uint32_t > &result) const'],['../classtram_1_1_a_a_b_b_tree.html#ab91f605c9d68f45e8d5d5c0ae05e12ba',1,'tram::AABBTree::FindIntersection(vec3 ray_pos, vec3 ray_dir, float distance_limit, auto filter) const']]], ['findintersectionrecursive_14',['FindIntersectionRecursive',['../classtram_1_1_a_a_b_b_tree.html#a6ce2d61d0eb768a2c41b5832177d71b1',1,'tram::AABBTree']]], ['findkeyframepointers_15',['FindKeyframePointers',['../classtram_1_1_animation_component.html#aaa1ec23cc54f20569e9cce6a90844bc9',1,'tram::AnimationComponent']]], ['findlights_16',['FindLights',['../namespacetram_1_1_render_1_1_light_tree.html#ae353165809c1cd85edb8e42944c0dee4',1,'tram::Render::LightTree']]], ['findmaterialtype_17',['FindMaterialType',['../namespacetram_1_1_render.html#a94a9ceb0462c8a24b1912ffd179c33f7',1,'tram::Render']]], ['findnearest_18',['FindNearest',['../classtram_1_1_octree.html#a6ac6abd129adbfd434a034a7f156d7c7',1,'tram::Octree::FindNearest(NearestSearch *search, Node *parent_node, int octant)'],['../classtram_1_1_octree.html#af4b6041ef1096c464a9197a89037ea73',1,'tram::Octree::FindNearest(T result[], float x, float y, float z)'],['../classtram_1_1_octree.html#af89de216af27eedb69a0255dc8f5baa3',1,'tram::Octree::FindNearest(NearestSearch *search, Node *parent_node)']]], ['findnearestfromray_19',['FindNearestFromRay',['../namespacetram_1_1_render_1_1_a_a_b_b.html#a631b3af49e3238165b6005edf3608394',1,'tram::Render::AABB']]], ['findpaths_20',['FindPaths',['../namespacetram_1_1_audio_1_1_spatial.html#a9e3e22294df1b1d269a8617a1b65291b',1,'tram::Audio::Spatial']]], ['findpathsmetropolis_21',['FindPathsMetropolis',['../namespacetram_1_1_audio_1_1_spatial.html#abac4b381854c802af06d8b08b9643434',1,'tram::Audio::Spatial']]], ['findshader_22',['FindShader',['../classtram_1_1_render_1_1_a_p_i_1_1_linked_shader.html#aa5dc3db8286a72fc93e0c24a1ae6d7a5',1,'tram::Render::API::LinkedShader::FindShader()'],['../namespacetram_1_1_render_1_1_a_p_i.html#ac0c7d3299f33f45e1b65ea4b795eedee',1,'tram::Render::API::FindShader()']]], ['findsibling_23',['FindSibling',['../classtram_1_1_a_a_b_b_tree.html#ab2029865cbcf492b0c6dd70899a6fdf1',1,'tram::AABBTree']]], ['findtransition_24',['FindTransition',['../classtram_1_1_world_cell.html#ad17560365ad3f35f832fe14cb2ad7be6',1,'tram::WorldCell']]], ['findvertexformat_25',['FindVertexFormat',['../namespacetram_1_1_render.html#a353a7d1babbd0a6f8bfc7bf1b4eb5a8c',1,'tram::Render']]], ['finishresources_26',['FinishResources',['../namespacetram_1_1_async.html#aed73e549dce7f281ed1d2d8bb31c7b65',1,'tram::Async']]], ['fire_27',['Fire',['../classtram_1_1_signal_table.html#a6268d498a6ba6846e797499a3100fe41',1,'tram::SignalTable::Fire(signal_t signal, id_t sender)'],['../classtram_1_1_signal_table.html#a52fe697c321904e1b59f0ed655c3e3d9',1,'tram::SignalTable::Fire(signal_t signal, id_t sender, Value value)']]], ['fireadded_28',['FireAdded',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a4567cddbfd773f1d162c9947a61d7acf',1,'tram::Ext::Kitchensink::ItemClass']]], ['fireequip_29',['FireEquip',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a27b6d1e19c2219ef08b38e0f6301b78a',1,'tram::Ext::Kitchensink::ItemClass']]], ['fireidle_30',['FireIdle',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#aa63c9f3e897107f6a145fab913be5690',1,'tram::Ext::Kitchensink::ItemClass']]], ['fireprimaryaction_31',['FirePrimaryAction',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a3af8732cfbd61416567a257612f1320e',1,'tram::Ext::Kitchensink::ItemClass']]], ['fireremoved_32',['FireRemoved',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a4b4d3c932032e2881323f1ec42e74f85',1,'tram::Ext::Kitchensink::ItemClass']]], ['firesecondaryaction_33',['FireSecondaryAction',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a66d439782843161ca256d3f777b77a95',1,'tram::Ext::Kitchensink::ItemClass']]], ['firesignal_34',['FireSignal',['../classtram_1_1_entity.html#aa83f617be04b68ab23d2f42a248b9e7d',1,'tram::Entity::FireSignal(signal_t type)'],['../classtram_1_1_entity.html#afbad8d97ef0905782c6aa0ef8ca7cf88',1,'tram::Entity::FireSignal(signal_t type, Value value)']]], ['firetrigger_35',['FireTrigger',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest.html#ab9a78d09f8a3235d107d07420f867184',1,'tram::Ext::Kitchensink::Quest']]], ['fireunequip_36',['FireUnequip',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#ac84ab7cd8c9fd41df4d50716df9d4bda',1,'tram::Ext::Kitchensink::ItemClass']]], ['firstpersoncamera_37',['FirstPersonCamera',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#ab0b6d243e23d1e3bab6897ca8c846b0e',1,'tram::Ext::Camera::FirstPersonCamera']]], ['flags_38',['Flags',['../namespacetram_1_1_settings.html#a482e75867f85885025dc262763b8df40',1,'tram::Settings']]], ['flush_5fconsole_39',['flush_console',['../namespacetram_1_1implementation.html#a4f7ee627cbe8593eb958c9ac61ccd2eb',1,'tram::implementation']]], ['flush_5fdisplay_40',['flush_display',['../namespacetram_1_1implementation.html#afa314b84e606df8e9955afd0b5d3f84e',1,'tram::implementation::flush_display(int time, System::system_t system)'],['../namespacetram_1_1implementation.html#ac91c6a3049a88f77305379c3185e9a48',1,'tram::implementation::flush_display(int time, int system)']]], ['fly_41',['Fly',['../classtram_1_1_f_p_s_controller_component.html#ac3921936820398b0ed5d343732f5fbbb',1,'tram::FPSControllerComponent::Fly()'],['../classtram_1_1_controller_component.html#ae13d3ca8940732bb64b80f0d0a789bfe',1,'tram::ControllerComponent::Fly()'],['../classtram_1_1_raycast_controller_component.html#a7905d17bead35cf596c7fe19132e548b',1,'tram::RaycastControllerComponent::Fly()']]], ['fpscontrollercomponent_42',['FPSControllerComponent',['../classtram_1_1_f_p_s_controller_component.html#a6f50d65657568e5d1afe87dd8cf17d91',1,'tram::FPSControllerComponent']]], ['front_43',['front',['../classtram_1_1_queue.html#a869affb595c884f94449617be6ba5da0',1,'tram::Queue']]] ]; ================================================ FILE: docs/cppapi/search/functions_6.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/functions_6.js ================================================ var searchData= [ ['gather_0',['Gather',['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_topic.html#af40984203be124856962da32edaac92d',1,'tram::Ext::Kitchensink::DialogTopic']]], ['gatherbaseattributes_1',['GatherBaseAttributes',['../classtram_1_1_ext_1_1_kitchensink_1_1_character_class.html#af5638f87859e56de9420d25e4e5668a8',1,'tram::Ext::Kitchensink::CharacterClass']]], ['gatherfactions_2',['GatherFactions',['../classtram_1_1_ext_1_1_kitchensink_1_1_character_class.html#a2afeea3b907ba87955f7f636a3681599',1,'tram::Ext::Kitchensink::CharacterClass']]], ['generateid_3',['GenerateID',['../namespacetram.html#ad9db30198d176e4ffed5b38273c4beb0',1,'tram']]], ['generateplanes_4',['GeneratePlanes',['../classtram_1_1_transition.html#ad2c202e43fb8725030c17c88176a36bb',1,'tram::Transition']]], ['get_5',['get',['../classtram_1_1_component.html#a129fcc4a535b3bbd7ae878a22b36e541',1,'tram::Component::get()'],['../classtram_1_1_resource_proxy.html#abcaffdba60268a1aa0c1ed19249f63b0',1,'tram::ResourceProxy::get()']]], ['get_6',['Get',['../namespacetram_1_1_language.html#af059d31d855f0bf0fc06dfc1a170c834',1,'tram::Language::Get()'],['../namespacetram_1_1_settings.html#a2e673200f6c75070a5e40f65e46f92dd',1,'tram::Settings::Get()']]], ['getaabbmax_7',['GetAABBMax',['../classtram_1_1_render_1_1_model.html#ab6e9404f95096afaea9226fe975e697b',1,'tram::Render::Model::GetAABBMax()'],['../classtram_1_1_a_a_b_b_tree.html#a61d5cb103f8529afdd926a8b6a1cf79a',1,'tram::AABBTree::GetAABBMax()']]], ['getaabbmin_8',['GetAABBMin',['../classtram_1_1_render_1_1_model.html#a181f0a0d0b56d4f7235181ddd1cbeec0',1,'tram::Render::Model::GetAABBMin()'],['../classtram_1_1_a_a_b_b_tree.html#ab7b01ca3a4bd8402b5337819d0482fce',1,'tram::AABBTree::GetAABBMin()']]], ['getallkeyboardkeybindings_9',['GetAllKeyboardKeyBindings',['../namespacetram_1_1_u_i.html#a95733211eecad5c91c9f4ae453765a91',1,'tram::UI']]], ['getanimationcomponent_10',['GetAnimationComponent',['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_state_component.html#ac6894d78aa54b2d0bf5bb4f55766c43b',1,'tram::Ext::Kitchensink::AnimationStateComponent']]], ['getanimationstatecomponent_11',['GetAnimationStateComponent',['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html#a74c4e40e62073f4a4016ef0080d144f4',1,'tram::Ext::Kitchensink::AIAgent']]], ['getanswer_12',['GetAnswer',['../classtram_1_1_ext_1_1_kitchensink_1_1_dialog_controller.html#a80e5cf34f6478ba8921ad4df746252db',1,'tram::Ext::Kitchensink::DialogController']]], ['getanyshader_13',['GetAnyShader',['../classtram_1_1_render_1_1_a_p_i_1_1_linked_shader.html#aade702f067875442fe766814c664247c',1,'tram::Render::API::LinkedShader::GetAnyShader()'],['../namespacetram_1_1_render_1_1_a_p_i.html#a50e0305574ac545c1e62fd272d9c0c04',1,'tram::Render::API::GetAnyShader()']]], ['getarmature_14',['GetArmature',['../classtram_1_1_render_1_1_model.html#a823633680904cb6940047f5aeec3ef4e',1,'tram::Render::Model']]], ['getattribute_15',['GetAttribute',['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container.html#a3ee8ff405063d9cbd58792ddfb225ac7',1,'tram::Ext::Kitchensink::AttributeContainer::GetAttribute()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_character_class.html#a70e3248022a5813fa317d70d610c8096',1,'tram::Ext::Kitchensink::CharacterClass::GetAttribute()']]], ['getattributebase_16',['GetAttributeBase',['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container.html#a5ac70ad8c111191b8c1fb8dd44e706e1',1,'tram::Ext::Kitchensink::AttributeContainer']]], ['getaxissensitivity_17',['GetAxisSensitivity',['../namespacetram_1_1_u_i.html#a2e57de90a0a4d8616e2ac2115bc2a09c',1,'tram::UI']]], ['getbasedisposition_18',['GetBaseDisposition',['../classtram_1_1_ext_1_1_kitchensink_1_1_character.html#ad00663d7d18b7b6d37adaf0b6337b8a5',1,'tram::Ext::Kitchensink::Character']]], ['getbob_19',['GetBob',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#aefecd2a76d3631867157caa5ba9b7c9a',1,'tram::Ext::Camera::FirstPersonCamera']]], ['getcell_20',['GetCell',['../classtram_1_1_entity.html#a9fe6fef78260ef5d7a3dc425e26ca375',1,'tram::Entity::GetCell()'],['../classtram_1_1_transition.html#ac2617a4858326884753cc3198c7d6560',1,'tram::Transition::GetCell()']]], ['getcharacterloyalty_21',['GetCharacterLoyalty',['../classtram_1_1_ext_1_1_kitchensink_1_1_faction.html#a9fa045c160d1fecb4cde3f76ab729ffa',1,'tram::Ext::Kitchensink::Faction']]], ['getcharacterrank_22',['GetCharacterRank',['../classtram_1_1_ext_1_1_kitchensink_1_1_faction.html#af48b732c21adc306f5856cb68ab300bf',1,'tram::Ext::Kitchensink::Faction']]], ['getcollisiongroup_23',['GetCollisionGroup',['../classtram_1_1_physics_component.html#aa0797c00f3d5e3a0ccb35da8b3ac42b2',1,'tram::PhysicsComponent::GetCollisionGroup()'],['../classtram_1_1_trigger_component.html#a93405806332d5309d8ab674c072d2461',1,'tram::TriggerComponent::GetCollisionGroup()']]], ['getcollisionmask_24',['GetCollisionMask',['../classtram_1_1_physics_component.html#a6d048406bb6f934d3167d046cf23d42a',1,'tram::PhysicsComponent::GetCollisionMask()'],['../classtram_1_1_trigger_component.html#a04476746aae520a06b1ec9fe65c0a5a0',1,'tram::TriggerComponent::GetCollisionMask()']]], ['getcolor_25',['GetColor',['../classtram_1_1_light_component.html#a71e038c2e9a0cde417f2b1899ff87349',1,'tram::LightComponent::GetColor()'],['../classtram_1_1_render_1_1_material.html#a0c43d7ae57a787c8ea3f69341d98be2d',1,'tram::Render::Material::GetColor()']]], ['getcontents_26',['GetContents',['../classtram_1_1_disk_reader.html#a57f73b425546a6fde55c2d863d8f095c',1,'tram::DiskReader::GetContents()'],['../classtram_1_1_file_reader.html#a359b60e4d588f6721a56bf619e85dded',1,'tram::FileReader::GetContents()']]], ['getcontext_27',['GetContext',['../namespacetram_1_1_render_1_1_a_p_i.html#a1132a0b2a9d3f0e2cf62dc5db40a6504',1,'tram::Render::API']]], ['getcontrollercomponent_28',['GetControllerComponent',['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html#adfe0bb1d9761a59c4d36a83239fea93a',1,'tram::Ext::Kitchensink::AIAgent']]], ['getcurrentmonitor_29',['GetCurrentMonitor',['../namespacetram_1_1_platform_1_1_window.html#a3a71748e1f64a454dc9b47260b67b035',1,'tram::Platform::Window']]], ['getdebugmode_30',['getDebugMode',['../classtram_1_1_physics_1_1_a_p_i_1_1_physics_debug_draw.html#ae8dfaf1b441990503c10aad22f87cf3f',1,'tram::Physics::API::PhysicsDebugDraw']]], ['getdeltatick_31',['GetDeltaTick',['../namespacetram.html#ac5510fd86603682d0cac4954bff11620',1,'tram']]], ['getdeltatime_32',['GetDeltaTime',['../namespacetram.html#af8af5a4731abe7a1b4cc34780bd1eb06',1,'tram']]], ['getdirectionfacing_33',['GetDirectionFacing',['../classtram_1_1_player_component.html#a521c6d15a3a7feb9d6f03fb08e7da7e0',1,'tram::PlayerComponent']]], ['getdisposition_34',['GetDisposition',['../classtram_1_1_ext_1_1_kitchensink_1_1_faction.html#a0fccfeb5e5a198b94e2cef7825bfd113',1,'tram::Ext::Kitchensink::Faction::GetDisposition()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_character.html#a763a7386afa5ddb550fdd616acdebdc7',1,'tram::Ext::Kitchensink::Character::GetDisposition()']]], ['getdistance_35',['GetDistance',['../classtram_1_1_light_component.html#a12116f3c73a230d6f2ba928d0f6af33f',1,'tram::LightComponent']]], ['getentities_36',['GetEntities',['../classtram_1_1_world_cell.html#a9521430ae60c9fa514b98fa2e5a5c01f',1,'tram::WorldCell']]], ['getentitycount_37',['GetEntityCount',['../classtram_1_1_world_cell.html#a8d1863ca31c03feec24439e296d3f5fe',1,'tram::WorldCell']]], ['getenvironmentprobes_38',['GetEnvironmentProbes',['../classtram_1_1_render_1_1_light_graph.html#a07e34cb8706381d97bc4e138a625a1bf',1,'tram::Render::LightGraph']]], ['getequippeditem_39',['GetEquippedItem',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#a8058f00b02aaddacea2eaee65dd5abe2',1,'tram::Ext::Kitchensink::Inventory']]], ['getfardistance_40',['GetFarDistance',['../classtram_1_1_render_1_1_model.html#a6552762c2c420643726ac9e6dac495af',1,'tram::Render::Model']]], ['getfirst_41',['GetFirst',['../classtram_1_1_pool.html#ad803699e4dab92b42ba4a86180f60acc',1,'tram::Pool']]], ['getflags_42',['GetFlags',['../namespacetram_1_1_render_1_1_a_p_i.html#a01464db10e614acc7db508e0ecdc642c',1,'tram::Render::API']]], ['getfloat_43',['GetFloat',['../classtram_1_1_value.html#a6c06918b9f54415fb97892f2009d54b1',1,'tram::Value']]], ['getfollowing_44',['GetFollowing',['../classtram_1_1_ext_1_1_camera_1_1_camera.html#abb082f0d019697d9555343905772e265',1,'tram::Ext::Camera::Camera']]], ['getformat_45',['GetFormat',['../classtram_1_1_render_1_1_a_p_i_1_1_linked_shader.html#a610721a4bf5b10a94a192863f45e366f',1,'tram::Render::API::LinkedShader']]], ['getfragmentshader_46',['GetFragmentShader',['../classtram_1_1_render_1_1_a_p_i_1_1_linked_shader.html#a8ac81e93a84a25d344d1d60fa614506c',1,'tram::Render::API::LinkedShader']]], ['getframe_47',['GetFrame',['../namespacetram.html#aa3909d6bfd02679f663541f787f9c7b4',1,'tram']]], ['getframes_48',['GetFrames',['../classtram_1_1_render_1_1_sprite.html#a259105984bbeb254bb9124fba78a2596',1,'tram::Render::Sprite']]], ['getframetime_49',['GetFrameTime',['../namespacetram.html#aed55d85a1ab5cc85a558d180313eb64e',1,'tram']]], ['getglobal_50',['GetGlobal',['../classtram_1_1_script_1_1_interface.html#a7265800ebc35b2221b25a4ba843b0697',1,'tram::Script::Interface::GetGlobal()'],['../namespacetram_1_1_script.html#a917b2fc2737b5d72d66ce869fad40b2a',1,'tram::Script::GetGlobal()']]], ['getheader_51',['GetHeader',['../classtram_1_1_render_1_1_animation.html#a97148015f708147071e224e18128b442',1,'tram::Render::Animation']]], ['getheadercount_52',['GetHeaderCount',['../classtram_1_1_render_1_1_animation.html#a8d75cbe7f57a4b7b77f38ca710cadf30',1,'tram::Render::Animation']]], ['getheight_53',['GetHeight',['../classtram_1_1_render_1_1_material.html#a98628ad183a5289b9f6f7a407c9005c0',1,'tram::Render::Material']]], ['getid_54',['GetID',['../classtram_1_1_entity.html#a5ec303fd15c52e42d390eabeece5365f',1,'tram::Entity']]], ['getindexarray_55',['GetIndexArray',['../classtram_1_1_render_1_1_model.html#a435b6a7e005789637eacb30bc37bdbb9',1,'tram::Render::Model']]], ['getindexranges_56',['GetIndexRanges',['../classtram_1_1_render_1_1_model.html#a71b7db1a28b591e3d4fa7eb58b6c196d',1,'tram::Render::Model']]], ['getinputstate_57',['GetInputState',['../namespacetram_1_1_u_i.html#a6865ff9dd91ce26566f1867e6005980d',1,'tram::UI']]], ['getint_58',['GetInt',['../classtram_1_1_value.html#a3673f59ae7ba469c1d088fffe04cc4dd',1,'tram::Value']]], ['getitemcount_59',['GetItemCount',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory_manager.html#a7eb3c4a11513b9eed6fe34bd89cd43dc',1,'tram::Ext::Kitchensink::InventoryManager::GetItemCount()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_list_inventory_manager.html#a0f45f90b7e0f0a5223dd478538530da9',1,'tram::Ext::Kitchensink::ListInventoryManager::GetItemCount()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#a4950e478978bec57a319ab31fa25c944',1,'tram::Ext::Kitchensink::Inventory::GetItemCount()']]], ['getitems_60',['GetItems',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory_manager.html#a3b028ac27cbb2380d88ae2775f3c3272',1,'tram::Ext::Kitchensink::InventoryManager::GetItems()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_list_inventory_manager.html#a1b9b03dd24817da053563d6e0a39a980',1,'tram::Ext::Kitchensink::ListInventoryManager::GetItems()']]], ['getkeyboardaction_61',['GetKeyboardAction',['../namespacetram_1_1_u_i.html#a151dea9e688c18e631f2aaef4758497b',1,'tram::UI']]], ['getkeyboardactionname_62',['GetKeyboardActionName',['../namespacetram_1_1_u_i.html#aecde138c9de471bd9ef945d534669832',1,'tram::UI']]], ['getkeyboardkeyname_63',['GetKeyboardKeyName',['../namespacetram_1_1_u_i.html#a6c013d6464921c3bdcb5b3a2906148ce',1,'tram::UI']]], ['getkeyframecount_64',['GetKeyframeCount',['../classtram_1_1_render_1_1_animation.html#a815b1115dfa11c8e21cf305d24ac49f8',1,'tram::Render::Animation']]], ['getkeyframes_65',['GetKeyframes',['../classtram_1_1_render_1_1_animation.html#afa51937c2a487fe82bafdb2d4056e30c',1,'tram::Render::Animation']]], ['getlast_66',['GetLast',['../structtram_1_1_event.html#a181fc927e0b983c6d1af3d0a1ed4ed15',1,'tram::Event::GetLast()'],['../structtram_1_1_message.html#a19be3fd1d26c56de4fcd721376b39c90',1,'tram::Message::GetLast()'],['../classtram_1_1_pool.html#a6ccf1a748fa7d1f7caa10d7358f64b50',1,'tram::Pool::GetLast()']]], ['getlastptr_67',['GetLastPtr',['../classtram_1_1_stack.html#a961d9d65f2fce72c72514203eefea7eb',1,'tram::Stack']]], ['getlength_68',['GetLength',['../classtram_1_1_stack.html#a53b43f3330a4e398271d8c71d119e99a',1,'tram::Stack::GetLength()'],['../classtram_1_1_audio_1_1_sound.html#a9c780daf835dce88cf19d267aa427266',1,'tram::Audio::Sound::GetLength()']]], ['getlightmap_69',['GetLightmap',['../classtram_1_1_render_component.html#a5feee4df39aba6a4652817159cc5d4c8',1,'tram::RenderComponent']]], ['getlocation_70',['GetLocation',['../classtram_1_1_entity.html#a7bf177c08614dd697b23cd021c7fbfda',1,'tram::Entity::GetLocation()'],['../classtram_1_1_render_component.html#ac1c0477f22ef04154367915c0294848b',1,'tram::RenderComponent::GetLocation()']]], ['getlookdirection_71',['GetLookDirection',['../classtram_1_1_controller_component.html#a94439cce310fb5bc23485b3e23f19cfb',1,'tram::ControllerComponent']]], ['getlookrotation_72',['GetLookRotation',['../classtram_1_1_player_component.html#adcba02c6226d985aece150ce291830f6',1,'tram::PlayerComponent']]], ['getmaterial_73',['GetMaterial',['../classtram_1_1_render_1_1_material.html#a22ae5b8db7d434e07318cf201defc953',1,'tram::Render::Material::GetMaterial()'],['../classtram_1_1_render_1_1_sprite.html#a7c98ddbe57968a26bb8bb5f6a86ca359',1,'tram::Render::Sprite::GetMaterial()']]], ['getmaterials_74',['GetMaterials',['../classtram_1_1_render_1_1_model.html#ae764be80aa1071ca7f459bb7b341fd8e',1,'tram::Render::Model']]], ['getmaterialtypename_75',['GetMaterialTypeName',['../namespacetram_1_1_render.html#a0356f2f33a144760b168fbc84d5c1931',1,'tram::Render']]], ['getmaxindexrangelength_76',['GetMaxIndexRangeLength',['../namespacetram_1_1_render_1_1_a_p_i.html#a18bc917a04c062cb18a310880301f545',1,'tram::Render::API']]], ['getmediumlist_77',['GetMediumList',['../classtram_1_1_file_writer.html#abcf99237a3774981e16c871ec68b1473',1,'tram::FileWriter']]], ['getmodel_78',['GetModel',['../classtram_1_1_render_component.html#a743ccc0b2357cec2f80a4db1f5dc301c',1,'tram::RenderComponent::GetModel()'],['../classtram_1_1_physics_component.html#af9c6e58635ec55d523a23a0f70f8216d',1,'tram::PhysicsComponent::GetModel()'],['../classtram_1_1_animation_component.html#a10847fac3c1cd2e8750fda898eff512d',1,'tram::AnimationComponent::GetModel()'],['../classtram_1_1_trigger_component.html#aac9479cb3992294f494eefba8061ad1d',1,'tram::TriggerComponent::GetModel()']]], ['getmonitorcount_79',['GetMonitorCount',['../namespacetram_1_1_platform_1_1_window.html#a254ec949eaaef45870d59c02a4c35381',1,'tram::Platform::Window']]], ['getname_80',['GetName',['../classtram_1_1_script_1_1_interface.html#a7a41316c12ef797af3cd9fe6cc89bbbe',1,'tram::Script::Interface::GetName()'],['../structtram_1_1_signal.html#a0f13121126c5ae11e4ae73a4cbfdbcdd',1,'tram::Signal::GetName()'],['../classtram_1_1_world_cell.html#ac65638978ab32fe02e3bcebf5feaf6b9',1,'tram::WorldCell::GetName()'],['../classtram_1_1_render_1_1_a_p_i_1_1_vertex_shader.html#a3be13e88fa61161353ca4f29254e3957',1,'tram::Render::API::VertexShader::GetName()'],['../classtram_1_1_render_1_1_a_p_i_1_1_fragment_shader.html#a83780b2e28d8d0432404f10a0a60e7bb',1,'tram::Render::API::FragmentShader::GetName()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_attribute_info.html#a4dddff605761144769af37f736b0d99a',1,'tram::Ext::Kitchensink::AttributeInfo::GetName()'],['../structtram_1_1_event.html#aee54dc533e45e7e43fb0ada6308f8d80',1,'tram::Event::GetName()'],['../classtram_1_1_entity.html#afe85e71ed0b3321908e0c86c58a71271',1,'tram::Entity::GetName()'],['../structtram_1_1_message.html#adad7616c7def22014e7c8f276e65fe77',1,'tram::Message::GetName()'],['../classtram_1_1_navmesh.html#aea73348a1b3d10864820e6b1dd711b94',1,'tram::Navmesh::GetName()'],['../classtram_1_1_resource.html#a2967c7a144291895ef629bb1b5d15acb',1,'tram::Resource::GetName()'],['../namespacetram_1_1_system.html#a2ca63f47f3cfdfd0eb183d46b36f9701',1,'tram::System::GetName()']]], ['getnavmeshnode_81',['GetNavmeshNode',['../classtram_1_1_navmesh.html#a9b5d215639881339b98b16b5c2bb56da',1,'tram::Navmesh']]], ['getneardistance_82',['GetNearDistance',['../classtram_1_1_render_1_1_model.html#aaf703730644d7fab65d1a9a21534b1d7',1,'tram::Render::Model']]], ['getnodes_83',['GetNodes',['../classtram_1_1_navmesh.html#a6f0d4a5f4fa94bb06a7731126c1f03e9',1,'tram::Navmesh']]], ['getoctant_84',['GetOctant',['../classtram_1_1_octree.html#a886968cb23838b42a4ea381eda9a93b4',1,'tram::Octree']]], ['getorigin_85',['GetOrigin',['../classtram_1_1_render_1_1_model.html#a3d3484e3d729819081e525321fa0cc22',1,'tram::Render::Model']]], ['getparent_86',['GetParent',['../classtram_1_1_entity_component.html#a678a0fce6a2deac1fa04baaed4db3009',1,'tram::EntityComponent']]], ['getpool_87',['GetPool',['../classtram_1_1_pool_proxy.html#a1a4541a7cb8ccbb3fe2c074ecece4905',1,'tram::PoolProxy']]], ['getpose_88',['GetPose',['../classtram_1_1_animation_component.html#a04aa5c1f59cfafd2485a5f8ac1376cc1',1,'tram::AnimationComponent']]], ['getposition_89',['GetPosition',['../classtram_1_1_ext_1_1_camera_1_1_camera.html#af738a04eb564e9d69d6f0c1db42f9f5b',1,'tram::Ext::Camera::Camera::GetPosition()'],['../classtram_1_1_path_follower.html#a9e95681a6535da9569bea660127a52bb',1,'tram::PathFollower::GetPosition()']]], ['getprompts_90',['GetPrompts',['../classtram_1_1_ext_1_1_kitchensink_1_1_dialog_controller.html#ae25eee3d66e055232539c9c5fe471c39',1,'tram::Ext::Kitchensink::DialogController']]], ['getproperty_91',['GetProperty',['../classtram_1_1_render_1_1_material.html#a0c225923c45cf941c0b3e9d16897411d',1,'tram::Render::Material']]], ['getreader_92',['GetReader',['../classtram_1_1_file_reader.html#adeafb2e1ec0d9d2c9e2ea25b0d705f14',1,'tram::FileReader']]], ['getreferences_93',['GetReferences',['../classtram_1_1_resource.html#adbe7a1f09b0aa6eec9c5f930180008fb',1,'tram::Resource']]], ['getrelation_94',['GetRelation',['../classtram_1_1_ext_1_1_kitchensink_1_1_faction.html#aacebbb1b8bcdf040a4d70a88d91c2bb7',1,'tram::Ext::Kitchensink::Faction']]], ['getresource_95',['GetResource',['../classtram_1_1_pool_ptr.html#a05567d055c22c94213c1108f1197dc16',1,'tram::PoolPtr']]], ['getrigidbodyvelocity_96',['GetRigidbodyVelocity',['../namespacetram_1_1_physics_1_1_a_p_i.html#a1f0061f6029ee06aa8be370d33d1a48c',1,'tram::Physics::API']]], ['getrotation_97',['GetRotation',['../classtram_1_1_entity.html#adbb214d504101d5113d149fa0f06e162',1,'tram::Entity::GetRotation()'],['../classtram_1_1_render_component.html#abb6747392d707e0dca643a0400adef75',1,'tram::RenderComponent::GetRotation()'],['../classtram_1_1_ext_1_1_camera_1_1_camera.html#ac812c8e3643823efb034b61ec368047a',1,'tram::Ext::Camera::Camera::GetRotation()']]], ['getscale_98',['GetScale',['../classtram_1_1_render_component.html#a82831dd25d49e53768209fe6b22ec736',1,'tram::RenderComponent']]], ['getscaling_99',['GetScaling',['../namespacetram_1_1_g_u_i.html#a6592f1eadaa540d5d79a87d24363d69e',1,'tram::GUI']]], ['getscreen_100',['GetScreen',['../namespacetram_1_1_render_1_1_a_p_i.html#a746afea6f8369d0a1570bb46b7a6e9b3',1,'tram::Render::API']]], ['getscreenheight_101',['GetScreenHeight',['../namespacetram_1_1_u_i.html#a982ad2ea96f9db1688a0004ba480bb66',1,'tram::UI']]], ['getscreenwidth_102',['GetScreenWidth',['../namespacetram_1_1_u_i.html#a761e8c28f0e3748eb8b618b1fd393aca',1,'tram::UI']]], ['getsearchlist_103',['GetSearchList',['../classtram_1_1_file_reader.html#a13fadbba64b0b75fc9c52bf64fbfe116',1,'tram::FileReader']]], ['getsettings_104',['GetSettings',['../namespacetram_1_1_settings.html#a4d6040ae5a9915dcc4d905693a63b67a',1,'tram::Settings']]], ['getshader_105',['GetShader',['../classtram_1_1_render_1_1_a_p_i_1_1_vertex_shader.html#ac6d1cade6063ff972474b5d23e95722c',1,'tram::Render::API::VertexShader::GetShader()'],['../classtram_1_1_render_1_1_a_p_i_1_1_linked_shader.html#acf41b46206e406a90a1cd1992b902760',1,'tram::Render::API::LinkedShader::GetShader()'],['../classtram_1_1_render_1_1_a_p_i_1_1_fragment_shader.html#a3e89b66d402de11dc6d4622d71569535',1,'tram::Render::API::FragmentShader::GetShader()']]], ['getshape_106',['GetShape',['../classtram_1_1_physics_1_1_collision_model.html#a4f42c4b06373d96f98faffedc3e5c098',1,'tram::Physics::CollisionModel']]], ['getshortname_107',['GetShortName',['../namespacetram_1_1_system.html#aa9b274cc4e89cca2157eae886db07355',1,'tram::System']]], ['getsignaltable_108',['GetSignalTable',['../classtram_1_1_entity.html#a8439e1ea14f61418caf8fccc00315bbb',1,'tram::Entity']]], ['getsize_109',['GetSize',['../classtram_1_1_file_reader.html#a28bb4f3c47fb4aa8a2241b2944986bdc',1,'tram::FileReader::GetSize()'],['../classtram_1_1_pool.html#afcc89e07039f40d888ef8bb970467ff2',1,'tram::Pool::GetSize()'],['../classtram_1_1_disk_reader.html#ad2b0b2e4625d5d1a6e4d914b561fc4e7',1,'tram::DiskReader::GetSize()']]], ['getsound_110',['GetSound',['../classtram_1_1_ext_1_1_kitchensink_1_1_sound_table.html#ab1f347b3f34189f5b870633c9ee8d52b',1,'tram::Ext::Kitchensink::SoundTable']]], ['getspecularexponent_111',['GetSpecularExponent',['../classtram_1_1_render_1_1_material.html#a8bfc4e66a2677349bdd4cec129005d51',1,'tram::Render::Material']]], ['getspeculartransparency_112',['GetSpecularTransparency',['../classtram_1_1_render_1_1_material.html#a4ffa819bc7d2db2bc228ae5649fbf5cd',1,'tram::Render::Material']]], ['getspecularweight_113',['GetSpecularWeight',['../classtram_1_1_render_1_1_material.html#a2ab043c6f5e8a512ac9ca34916b43485',1,'tram::Render::Material']]], ['getsprite_114',['GetSprite',['../classtram_1_1_sprite_component.html#afe9a51092931932104237e352f15267f',1,'tram::SpriteComponent::GetSprite()'],['../classtram_1_1_particle_component.html#a13b0e3b68f2b4fd346525baba49a7481',1,'tram::ParticleComponent::GetSprite()'],['../classtram_1_1_decal_component.html#afc221ff999d6777f7d0bf15a63e8b11b',1,'tram::DecalComponent::GetSprite()']]], ['getstat_115',['GetStat',['../namespacetram_1_1_stats.html#a47a75adf92f441eaf8c99564471f028b',1,'tram::Stats::GetStat(Resource resource)'],['../namespacetram_1_1_stats.html#ac6bed4088975e4651fdcffd10f2d1ddb',1,'tram::Stats::GetStat(System::system_t system)']]], ['getstataverage_116',['GetStatAverage',['../namespacetram_1_1_stats.html#a9fb3323e6726d2010fab092bc9180dd1',1,'tram::Stats']]], ['getstatuncollated_117',['GetStatUncollated',['../namespacetram_1_1_stats.html#adc7ecc593e1e434e5df1f573651e146a',1,'tram::Stats']]], ['getstatus_118',['GetStatus',['../classtram_1_1_file_reader.html#afe64d8768d91a14f788e7d518591a572',1,'tram::FileReader::GetStatus()'],['../classtram_1_1_disk_writer.html#a8b530f156118353d4ba12d332d4e832a',1,'tram::DiskWriter::GetStatus()'],['../classtram_1_1_disk_reader.html#afc56907851741e91da516352020ca264',1,'tram::DiskReader::GetStatus()'],['../classtram_1_1_file_writer.html#ae51986fead14e4b024fea535c0986cec',1,'tram::FileWriter::GetStatus()'],['../classtram_1_1_resource.html#a52f4c25fe2642109f7f35088419cd086',1,'tram::Resource::GetStatus()']]], ['getstoredcollisions_119',['GetStoredCollisions',['../classtram_1_1_trigger_component.html#af88fca014f6f9615930c02f82ae00db3',1,'tram::TriggerComponent']]], ['getsystemcount_120',['GetSystemCount',['../namespacetram_1_1_system.html#a338ea827ae004b8133debac8bb1428a6',1,'tram::System']]], ['gettangent_121',['GetTangent',['../classtram_1_1_path_follower.html#abdf8f79ad276308156aa2780e24412c9',1,'tram::PathFollower']]], ['gettexture_122',['GetTexture',['../classtram_1_1_render_1_1_material.html#a7364618a398768519758ff9ffd7b3c4b',1,'tram::Render::Material']]], ['gettick_123',['GetTick',['../namespacetram.html#a45d3de117b68f4c584f4b9012b230557',1,'tram']]], ['getticktime_124',['GetTickTime',['../namespacetram.html#a370b9480a4f179e6e4c41d9d6a70fcb7',1,'tram']]], ['gettime_125',['GetTime',['../namespacetram_1_1_platform_1_1_window.html#a25eea05c5898d99a27460394bc17ee92',1,'tram::Platform::Window']]], ['gettransitions_126',['GetTransitions',['../classtram_1_1_world_cell.html#a2fa5f2ba361a94f37a1f981771cdafaa',1,'tram::WorldCell']]], ['gettype_127',['GetType',['../classtram_1_1_value_ptr.html#a9c37ca2a5950081f0d84e161d3f8fd50',1,'tram::ValuePtr::GetType()'],['../classtram_1_1_render_1_1_material.html#a9ab0ad47f18952f0014e01714435309f',1,'tram::Render::Material::GetType()'],['../classtram_1_1_render_1_1_a_p_i_1_1_linked_shader.html#a59da53365a58b0590b41d763cac529c7',1,'tram::Render::API::LinkedShader::GetType()'],['../classtram_1_1_static_world_object.html#a7ad11c2699b96d4f78f55d032a4e63e9',1,'tram::StaticWorldObject::GetType()'],['../classtram_1_1_crate.html#a378f96494bd77812a24ca507be4ac434',1,'tram::Crate::GetType()'],['../classtram_1_1_decoration.html#a7e637e1beaf0cfc3a933d7a72304122b',1,'tram::Decoration::GetType()'],['../classtram_1_1_light.html#aaee848b4fe419b1fc6c82282b31aa9dd',1,'tram::Light::GetType()'],['../classtram_1_1_marker.html#ab7246a7be4136d9e70ba8a253b00a2d5',1,'tram::Marker::GetType()'],['../classtram_1_1_player.html#a10a805e40469321fb7d6fa1f66d0c0eb',1,'tram::Player::GetType()'],['../classtram_1_1_scriptable.html#a1e3c2da150ec8c8b7b075867cc6165b1',1,'tram::Scriptable::GetType()'],['../classtram_1_1_sound.html#aa8a9115da334eec12b8b837d9d47b689',1,'tram::Sound::GetType()'],['../classtram_1_1_trigger.html#aa0bd3f37d64f909978372c5323778438',1,'tram::Trigger::GetType()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a7ce13fa0441d27759aab3911ec2940ec',1,'tram::Ext::Kitchensink::Button::GetType()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_quest_entity.html#acf19095d4330eb1ec6628be8e86b6e5c',1,'tram::Ext::Kitchensink::QuestEntity::GetType()'],['../classtram_1_1_entity.html#a552606c9eec8f007aaf42d251aaaa264',1,'tram::Entity::GetType()'],['../structtram_1_1_event.html#af584b523e077a59452a91153334e75cd',1,'tram::Event::GetType()'],['../structtram_1_1_message.html#ad27f76114ca903dded8f84890c302119',1,'tram::Message::GetType()'],['../structtram_1_1_signal.html#a326e6aa18ff7b00902541db375c050af',1,'tram::Signal::GetType()'],['../classtram_1_1_value.html#aec15d455c732150f97eb47662f23fedf',1,'tram::Value::GetType()']]], ['getvalidnexttopics_128',['GetValidNextTopics',['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_topic.html#a92b21c6a95d462272577358cc702d16f',1,'tram::Ext::Kitchensink::DialogTopic']]], ['getvariable_129',['GetVariable',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest.html#a28b905e9fb5bec79e66daad45578a60c',1,'tram::Ext::Kitchensink::Quest']]], ['getvelocity_130',['GetVelocity',['../classtram_1_1_physics_component.html#a61fef009717a9e4724dee61359319094',1,'tram::PhysicsComponent']]], ['getversion_131',['GetVersion',['../namespacetram.html#a3b5616291800641604306bbf678b3873',1,'tram']]], ['getvertexarray_132',['GetVertexArray',['../classtram_1_1_render_1_1_model.html#ac05721211dc33f67e5f59a4da99b4b96',1,'tram::Render::Model']]], ['getvertexdefinition_133',['GetVertexDefinition',['../namespacetram_1_1_render.html#ae7cb3ec82d35f3a4b5bf4fbb7f15a429',1,'tram::Render']]], ['getvertexformat_134',['GetVertexFormat',['../classtram_1_1_render_1_1_model.html#a878a07665c85cc2b0b45e9eed4012a56',1,'tram::Render::Model']]], ['getvertexformatname_135',['GetVertexFormatName',['../namespacetram_1_1_render.html#ac38b6a74526f6b0bcc15fb23dbc965b6',1,'tram::Render']]], ['getvertexshader_136',['GetVertexShader',['../classtram_1_1_render_1_1_a_p_i_1_1_linked_shader.html#abd8d0225e99fe0bda893abde0429e0fa',1,'tram::Render::API::LinkedShader']]], ['getviewdistance_137',['GetViewDistance',['../namespacetram_1_1_render.html#a0a15770929caa8b52620ed6b2cd3f731',1,'tram::Render']]], ['getviewfov_138',['GetViewFov',['../namespacetram_1_1_render.html#a91420cfff2ed4a2548d27a0924000187',1,'tram::Render']]], ['getviewposition_139',['GetViewPosition',['../namespacetram_1_1_render.html#acfbfc3fc3b9bcc20aba46673364bfa6b',1,'tram::Render']]], ['getviewrotation_140',['GetViewRotation',['../namespacetram_1_1_render.html#a588afc5ab26e5dea5924df08c70f95bf',1,'tram::Render']]], ['getvolume_141',['GetVolume',['../classtram_1_1_world_cell.html#a5d383de9e1314938cf44ba8dc976150a',1,'tram::WorldCell::GetVolume()'],['../namespacetram_1_1_audio.html#ac8184c5ea205ddd19e0795f8ffdd7c1c',1,'tram::Audio::GetVolume()']]], ['getwaitingresources_142',['GetWaitingResources',['../namespacetram_1_1_async.html#af447ff406255f241322da550d5d027a3',1,'tram::Async']]], ['getweight_143',['GetWeight',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a69082df187434d24ec21dbcafa93f2ec',1,'tram::Ext::Camera::FirstPersonCamera']]], ['getwidth_144',['GetWidth',['../classtram_1_1_render_1_1_material.html#a3c06e86d3701b7377e4a86f4d6faeaac',1,'tram::Render::Material']]], ['getworldtransform_145',['getWorldTransform',['../classtram_1_1_physics_1_1_a_p_i_1_1_callback_motion_state.html#a3c4651578a5cc3573ddf5dad03eb305f',1,'tram::Physics::API::CallbackMotionState']]], ['getwriter_146',['GetWriter',['../classtram_1_1_file_writer.html#acdf5bcd53cc32c0c7f268d73a9fca3cc',1,'tram::FileWriter']]], ['gldrawlistentry_147',['GLDrawListEntry',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#af7bb6164cd2f0ca88d08e2dd524f2c28',1,'tram::Render::API::GLDrawListEntry']]], ['glyph_148',['Glyph',['../namespacetram_1_1_g_u_i.html#ac9ba68cbd0b4343af392b64083f10f13',1,'tram::GUI::Glyph(font_t font, glyph_t glyph)'],['../namespacetram_1_1_g_u_i.html#ab9cbc24cc6766595f1a063de7c32e568',1,'tram::GUI::Glyph(glyph_t glyph)']]], ['glyphborderv_149',['GlyphBorderV',['../namespacetram_1_1_g_u_i.html#a34d71791d5b4905b42111ea613a087e6',1,'tram::GUI']]], ['glyphheight_150',['GlyphHeight',['../namespacetram_1_1_g_u_i.html#a5998935f32f2b821313449f0254dccf0',1,'tram::GUI']]], ['glyphwidth_151',['GlyphWidth',['../namespacetram_1_1_g_u_i.html#a643f4e389961bc9ccb05092ea58cccc6',1,'tram::GUI']]], ['greater_152',['Greater',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a7279723d0adb71d2ac2bb9a960f3029d',1,'tram::Ext::Kitchensink::QuestVariable']]], ['greaterorequal_153',['GreaterOrEqual',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#aacf971b4d14c9d97ab7f522f53409a35',1,'tram::Ext::Kitchensink::QuestVariable']]] ]; ================================================ FILE: docs/cppapi/search/functions_7.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/functions_7.js ================================================ var searchData= [ ['hasattribute_0',['HasAttribute',['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container.html#a68b8159d853b0027b4afe738b67707f9',1,'tram::Ext::Kitchensink::AttributeContainer']]], ['hasautomaticloading_1',['HasAutomaticLoading',['../classtram_1_1_world_cell.html#a9005d19a5708c2fc52d97c632ff638f6',1,'tram::WorldCell']]], ['hasbaseclass_2',['HasBaseClass',['../classtram_1_1_ext_1_1_kitchensink_1_1_character_class.html#a5e87837dea2d956226d92986b23dadd2',1,'tram::Ext::Kitchensink::CharacterClass']]], ['hascharacter_3',['HasCharacter',['../classtram_1_1_ext_1_1_kitchensink_1_1_faction.html#a52cf75871489b10c7a6bf1ca2ad407b1',1,'tram::Ext::Kitchensink::Faction']]], ['hasclass_4',['HasClass',['../classtram_1_1_ext_1_1_kitchensink_1_1_character.html#a7f663500e9a6aa3dad2ea05fdbf4226f',1,'tram::Ext::Kitchensink::Character']]], ['hashmap_5',['Hashmap',['../classtram_1_1_hashmap.html#ac573657ae86fff9e00d4eea5e525f09c',1,'tram::Hashmap::Hashmap(const char *name, size_t max_size)'],['../classtram_1_1_hashmap.html#a0ffe9a0a3a55b18c2f01928055e3c8fc',1,'tram::Hashmap::Hashmap(const char *name, size_t max_size, std::initializer_list< std::pair< uint32_t, T > > list)']]], ['hasinteriorlighting_6',['HasInteriorLighting',['../classtram_1_1_world_cell.html#af0b8ff336e94162438f66b7670312345',1,'tram::WorldCell']]], ['horizontaldivider_7',['HorizontalDivider',['../namespacetram_1_1_g_u_i.html#a0568bf9d9061984bf013f44b50ff5e56',1,'tram::GUI']]], ['hull_8',['Hull',['../structtram_1_1_physics_1_1_collision_shape.html#a883545f482ba93253bfa3c03764dcf96',1,'tram::Physics::CollisionShape']]] ]; ================================================ FILE: docs/cppapi/search/functions_8.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/functions_8.js ================================================ var searchData= [ ['identity_5fposition_0',['IDENTITY_POSITION',['../namespacetram.html#a54978c27914521c35127181e9cb0f849',1,'tram']]], ['identity_5frotation_1',['IDENTITY_ROTATION',['../namespacetram.html#a6643f20251af5564678ffc98ef58be9e',1,'tram']]], ['identity_5fscale_2',['IDENTITY_SCALE',['../namespacetram.html#a6aa1af51cd6d3679c00e656d1473cd46',1,'tram']]], ['index_3',['index',['../classtram_1_1_pool.html#a7ffa82540f27a9b7ff4da2b75daebbf5',1,'tram::Pool']]], ['infos_4',['infos',['../namespacetram_1_1_ext_1_1_kitchensink.html#af26c7178edaf07fc00c3ffb0048472c5',1,'tram::Ext::Kitchensink']]], ['init_5',['Init',['../classtram_1_1_light_component.html#a523c8f75bcd17b885098fe30956d88a6',1,'tram::LightComponent::Init()'],['../classtram_1_1_player_component.html#afcbc45d601e912238fbe419681db88dd',1,'tram::PlayerComponent::Init()'],['../classtram_1_1_template_component.html#a6e081f7006cb6a8b6c0621a7ee6d81f9',1,'tram::TemplateComponent::Init()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest.html#a45dcecc77ac3add50354215a87117f58',1,'tram::Ext::Kitchensink::Quest::Init()'],['../classtram_1_1_entity_component.html#ab5d797d6fd60beef019062e228679eb7',1,'tram::EntityComponent::Init()']]], ['init_6',['init',['../classtram_1_1_component.html#a6cd91a842686662e8cceccd2920c3619',1,'tram::Component::init()'],['../classtram_1_1_component.html#a1e0318f6b89ca572f28e9fed070dd32b',1,'tram::Component::init()'],['../classtram_1_1_component.html#ad96889276619fda754e4af68a5075db2',1,'tram::Component::init()'],['../classtram_1_1_component.html#a4ba7f565d501661914c7648cd1b62b44',1,'tram::Component::init()'],['../classtram_1_1_component.html#ae956519770a3e6c53b9bcecf407676b6',1,'tram::Component::init()'],['../classtram_1_1_component.html#a0abec218348d77cebbfa73723815606f',1,'tram::Component::init()'],['../classtram_1_1_component.html#a81ec0494d37dea609b33cf00cf0c33d3',1,'tram::Component::init()'],['../classtram_1_1_component.html#ab30ccc33ece77ac0526eccd693de6a1a',1,'tram::Component::init()'],['../classtram_1_1_component.html#a451ffe51f9f1e27648f7a5f585eb1ea4',1,'tram::Component::init()'],['../classtram_1_1_component.html#a54a5bab4377e5b7895691516332639ac',1,'tram::Component::init()'],['../classtram_1_1_component.html#a827f85fff0e002fb5706f4ade3ddc72a',1,'tram::Component::init()'],['../classtram_1_1_component.html#ac8b7faa733f01297be8df3a2ea685eed',1,'tram::Component::init()'],['../classtram_1_1_component.html#a3848187d991b7185779a6c237957bd9c',1,'tram::Component::init()']]], ['init_7',['Init',['../namespacetram_1_1_render.html#a432d184f3b358b4f7ee6daf055f9ef74',1,'tram::Render::Init()'],['../namespacetram_1_1_audio_1_1_a_p_i.html#a8d3b6a316e9eabc092a7302995d545bd',1,'tram::Audio::API::Init()'],['../namespacetram_1_1_audio.html#aabd3c9eadd115d4d66e324ffed163470',1,'tram::Audio::Init()'],['../namespacetram_1_1_ext_1_1_camera.html#ad252c0b524249e43b5b04f649a6697c2',1,'tram::Ext::Camera::Init()'],['../namespacetram_1_1_ext_1_1_kitchensink.html#aabfec8af9b6f67d87256ceb0565b8cc6',1,'tram::Ext::Kitchensink::Init()'],['../namespacetram_1_1_ext_1_1_menu.html#a389cad79647a9142bb4683217d94387a',1,'tram::Ext::Menu::Init()'],['../namespacetram_1_1_ext_1_1_scripting_1_1_lua.html#a83bba368580b03eba8830e61ce8f13ab',1,'tram::Ext::Scripting::Lua::Init()'],['../namespacetram_1_1_async.html#abf1180d68deb60ea65e90073f8f8eaf0',1,'tram::Async::Init()'],['../namespacetram_1_1_core.html#a1704d5ca7badba9cc7486134bf2cc578',1,'tram::Core::Init()'],['../namespacetram_1_1_g_u_i.html#a2d278da9263fa009f2eaa8ea8d67eaa0',1,'tram::GUI::Init()'],['../namespacetram_1_1_script.html#a3df9d0d4778b39ca7c95328ae4fd5a22',1,'tram::Script::Init()'],['../namespacetram_1_1_u_i.html#a34c539a00c1e5228b2ee9d9f69de5af8',1,'tram::UI::Init()'],['../namespacetram_1_1_physics_1_1_a_p_i.html#a5d061813173c9cc7d06ff1fe5bb20717',1,'tram::Physics::API::Init()'],['../namespacetram_1_1_physics.html#a176087bb562e45cdb38d96605d03ded6',1,'tram::Physics::Init()'],['../namespacetram_1_1_platform_1_1_window.html#af03eb6bcb74b8f5ac5fe208c82c7e7b5',1,'tram::Platform::Window::Init()'],['../namespacetram_1_1_platform_1_1_input.html#a34c539a00c1e5228b2ee9d9f69de5af8',1,'tram::Platform::Input::Init()'],['../namespacetram_1_1_render_1_1_a_p_i.html#a3333e144d9fcb3f23192760dabce0d0d',1,'tram::Render::API::Init()']]], ['initai_8',['InitAI',['../namespacetram_1_1_ext_1_1_kitchensink.html#ab9a442aa76563ab70aff7c560a3bb953',1,'tram::Ext::Kitchensink']]], ['initcallbacks_9',['InitCallbacks',['../namespacetram_1_1_ext_1_1_menu.html#ab6a5cd004740b52fff348c26ee0a8b6c',1,'tram::Ext::Menu']]], ['initexplorationpaths_10',['InitExplorationPaths',['../namespacetram_1_1_audio_1_1_spatial.html#a3dcc76efc87914d95c6011db3972eda4',1,'tram::Audio::Spatial']]], ['initoutput_11',['InitOutput',['../namespacetram_1_1_audio_1_1_spatial.html#a1d958660cb3bf23f87e78a3a2a36d912',1,'tram::Audio::Spatial']]], ['insert_12',['Insert',['../classtram_1_1_hashmap.html#a4b0e9748d29a4b4af463af55307818da',1,'tram::Hashmap::Insert(UID key, T value)'],['../classtram_1_1_hashmap.html#a68af1a319c6ffabf571332939b4633c0',1,'tram::Hashmap::Insert(uint32_t key, T value)'],['../classtram_1_1_octree.html#aff7cf2c6bf99856721156aa6dcdf0b72',1,'tram::Octree::Insert(vec3 point, T data)'],['../classtram_1_1_octree.html#a02470aaeb494f3903c6f45e0e3357510',1,'tram::Octree::Insert(Node *parent, Node *leaf)']]], ['insertdrawlistentries_13',['InsertDrawListEntries',['../classtram_1_1_render_component.html#aae0ec9b022b64f9cfc19885dc6eee2c1',1,'tram::RenderComponent']]], ['insertdrawlistentry_14',['InsertDrawListEntry',['../namespacetram_1_1_render_1_1_a_p_i.html#a1a5a35d0071849e1f4a44362df772ce1',1,'tram::Render::API']]], ['insertleaf_15',['InsertLeaf',['../classtram_1_1_a_a_b_b_tree.html#a09154884a07d9aec60f8e84f54292d41',1,'tram::AABBTree::InsertLeaf()'],['../namespacetram_1_1_render_1_1_a_a_b_b.html#a6625049c0bc385b24b326868ad74a779',1,'tram::Render::AABB::InsertLeaf()']]], ['intcolor_16',['IntColor',['../namespacetram_1_1_render_1_1_a_p_i.html#aaa272bbd99e773f619519f24981b411b',1,'tram::Render::API']]], ['inventory_17',['Inventory',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#af7a1b00c5dfadf08f99151978659a9c2',1,'tram::Ext::Kitchensink::Inventory']]], ['is_18',['Is',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a36e6f0dae5f477802b91bd4cafe72f56',1,'tram::Ext::Kitchensink::QuestVariable']]], ['is_5fcontinue_19',['is_continue',['../classtram_1_1_file_reader_parser.html#afd0f9db53311ddb1c724c286cd18545b',1,'tram::FileReaderParser::is_continue()'],['../classtram_1_1_text_reader_parser.html#ac4fed2bc3815fed4a548ad35f7a30a17',1,'tram::TextReaderParser::is_continue()'],['../classtram_1_1_file.html#a613cfcd9ed88d5edacd33b345ddaa558',1,'tram::File::is_continue()']]], ['is_5fempty_20',['is_empty',['../structtram_1_1_u_i_d.html#a1c632137cc995abd646d872429f059a0',1,'tram::UID']]], ['is_5ferror_21',['is_error',['../classtram_1_1_file_reader_parser.html#a9f33622ce91e090714839f2209e1a151',1,'tram::FileReaderParser::is_error()'],['../classtram_1_1_text_reader_parser.html#a783ecd25f9221a1ecdc6ae7075dff15b',1,'tram::TextReaderParser::is_error()']]], ['is_5fopen_22',['is_open',['../classtram_1_1_file.html#a35ac8b7f25c9644484adb16e6315ac13',1,'tram::File']]], ['is_5fvalid_23',['is_valid',['../structtram_1_1_u_i_d.html#a819c4f8b86a7fb91519937f2cf8e4449',1,'tram::UID']]], ['isaudiosourceplaying_24',['IsAudioSourcePlaying',['../namespacetram_1_1_audio_1_1_a_p_i.html#a8e6b04b5e38e41ca29049e7d3f36d596',1,'tram::Audio::API']]], ['isautoload_25',['IsAutoLoad',['../classtram_1_1_entity.html#a147a88601da58a30ee3d39bbc2c2da12',1,'tram::Entity']]], ['isbool_26',['IsBool',['../classtram_1_1_value.html#a5730c454f7a08e4ad926fa0438e0ca02',1,'tram::Value::IsBool()'],['../classtram_1_1_value_ptr.html#ac28b4b028d4493d27a7f6e1fa6d5fda5',1,'tram::ValuePtr::IsBool()']]], ['ischanged_27',['IsChanged',['../classtram_1_1_entity.html#ab439f567d570a3bbd0f80c5d2e025eb0',1,'tram::Entity']]], ['isdebugdraw_28',['IsDebugDraw',['../classtram_1_1_world_cell.html#a906f8e64babfe45db448955b205226e1',1,'tram::WorldCell']]], ['isdebuginfodraw_29',['IsDebugInfoDraw',['../classtram_1_1_animation_component.html#a622f5ba394f586c8eddde6acfbc968e0',1,'tram::AnimationComponent::IsDebugInfoDraw()'],['../classtram_1_1_audio_component.html#a8f7d175b19b8e5b40994132c416a404e',1,'tram::AudioComponent::IsDebugInfoDraw()'],['../classtram_1_1_controller_component.html#a827a701de4481f78563b75fce6ea55a2',1,'tram::ControllerComponent::IsDebugInfoDraw()']]], ['isdebugmode_30',['IsDebugMode',['../namespacetram_1_1_render_1_1_a_p_i.html#aa5310d3f1d84890fdd8b6c9b8ceead3f',1,'tram::Render::API']]], ['isdeleted_31',['IsDeleted',['../classtram_1_1_entity.html#a409d0640de875ed0bdf2b8b71cfe75ee',1,'tram::Entity']]], ['isdrawtrigger_32',['IsDrawTrigger',['../classtram_1_1_trigger.html#a6eafc910dc841bea5073d9cd27a14f77',1,'tram::Trigger']]], ['isequippeditem_33',['IsEquippedItem',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#a53fa2c2df9e2cb7c28395f23a91b42f6',1,'tram::Ext::Kitchensink::Inventory']]], ['isequippedslot_34',['IsEquippedSlot',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#aee945a9c74d9e50a5fe5f01430cc124c',1,'tram::Ext::Kitchensink::Inventory']]], ['isfloat_35',['IsFloat',['../classtram_1_1_value.html#adf7c16903c484a39086cc193fa4d3f1e',1,'tram::Value::IsFloat()'],['../classtram_1_1_value_ptr.html#a3a0c3c020fc28d602f348a2771185274',1,'tram::ValuePtr::IsFloat()']]], ['isfullscreen_36',['IsFullscreen',['../namespacetram_1_1_platform_1_1_window.html#a283d6de486d8c8808e78da64f2a4667e',1,'tram::Platform::Window']]], ['isinfaction_37',['IsInFaction',['../classtram_1_1_ext_1_1_kitchensink_1_1_character.html#a61fe7823c735263feb55c31b615e858e',1,'tram::Ext::Kitchensink::Character']]], ['isinit_38',['IsInit',['../classtram_1_1_entity_component.html#aad321b7c26fd5f710cf1e0e48f605a8a',1,'tram::EntityComponent']]], ['isinitialized_39',['IsInitialized',['../namespacetram_1_1_system.html#a1c1f26d92502016519f4a147cdc0fbc2',1,'tram::System']]], ['isinside_40',['IsInside',['../classtram_1_1_transition.html#aa10c4f5e137fa766558505864995af4f',1,'tram::Transition::IsInside()'],['../classtram_1_1_world_cell.html#a68de53ebe113f1cddbd433dd048acf70',1,'tram::WorldCell::IsInside()']]], ['isint_41',['IsInt',['../classtram_1_1_value.html#abcedb8e96c6af96db3dacb1b5859cf61',1,'tram::Value::IsInt()'],['../classtram_1_1_value_ptr.html#a2510ece20da4a990011d9b3487000695',1,'tram::ValuePtr::IsInt()']]], ['isinterior_42',['IsInterior',['../classtram_1_1_world_cell.html#a539e63e21eadaeda761161d2e162ecf8',1,'tram::WorldCell']]], ['isleaf_43',['IsLeaf',['../structtram_1_1_a_a_b_b_tree_1_1_node.html#a6ca75579cef2d995affbeced0c4f3ee4',1,'tram::AABBTree::Node::IsLeaf()'],['../structtram_1_1_octree_1_1_node.html#acf0b359104e69ae9202d41f55db25429',1,'tram::Octree::Node::IsLeaf()']]], ['islightdraw_44',['IsLightDraw',['../classtram_1_1_light_component.html#aefae135fe915548285a2363b92e2915b',1,'tram::LightComponent']]], ['isloaded_45',['IsLoaded',['../classtram_1_1_entity.html#a305ae4e799b36c4111f5cd089748f422',1,'tram::Entity::IsLoaded()'],['../classtram_1_1_world_cell.html#af970d01a2b78d45162c94c3acab1e4a6',1,'tram::WorldCell::IsLoaded()']]], ['isloadedfromdisk_46',['IsLoadedFromDisk',['../classtram_1_1_entity.html#ace4932f5988e14152753e4de7de86a4a',1,'tram::Entity']]], ['isloadfailed_47',['IsLoadFailed',['../classtram_1_1_resource.html#a81746c1ca8f0d380259f8906a79942b8',1,'tram::Resource']]], ['ismet_48',['IsMet',['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_condition.html#adaa8ef03f80dfbe1e610747674d556a7',1,'tram::Ext::Kitchensink::DialogCondition']]], ['isname_49',['IsName',['../classtram_1_1_value.html#abaa6b4a80038f14d4d9fac5742011900',1,'tram::Value']]], ['isnode_50',['IsNode',['../structtram_1_1_octree_1_1_node.html#a3abcf52999ab189502ffbd384f5c598c',1,'tram::Octree::Node']]], ['isnot_51',['IsNot',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#aa919ae019059ff89faca34a829962fa0',1,'tram::Ext::Kitchensink::QuestVariable']]], ['ispersistent_52',['IsPersistent',['../classtram_1_1_entity.html#a07ace4859c60707136639f33cd525c0a',1,'tram::Entity']]], ['isplaying_53',['IsPlaying',['../classtram_1_1_audio_component.html#a0cb407f67786c11bda3f8a4352796a58',1,'tram::AudioComponent::IsPlaying()'],['../classtram_1_1_animation_component.html#a27c7ff48133b01c79777af78e4ee5a07',1,'tram::AnimationComponent::IsPlaying()']]], ['isquat_54',['IsQuat',['../classtram_1_1_value.html#a0025245d17103e5061144c0914a2598c',1,'tram::Value']]], ['israwinput_55',['IsRawInput',['../namespacetram_1_1_platform_1_1_window.html#a767093572b3a28a3c4c3bb86c9f2fdaa',1,'tram::Platform::Window']]], ['isready_56',['IsReady',['../classtram_1_1_entity_component.html#a1ae29198858d24d3aba6914bdee6a46f',1,'tram::EntityComponent']]], ['isrendercontextthread_57',['IsRenderContextThread',['../namespacetram_1_1_platform_1_1_window.html#a9cb305ebdf39acfb85f04ef54d867703',1,'tram::Platform::Window']]], ['issourcedraw_58',['IsSourceDraw',['../classtram_1_1_audio_component.html#a9d8448140c994b866c61118e80887c58',1,'tram::AudioComponent']]], ['isstring_59',['IsString',['../classtram_1_1_value.html#ad59a44468143c7dfdafca922f37eb380',1,'tram::Value']]], ['isvec2_60',['IsVec2',['../classtram_1_1_value.html#af19a2afc58fe6b53f4817d8177930508',1,'tram::Value']]], ['isvec3_61',['IsVec3',['../classtram_1_1_value.html#ac300cdbdca5c4e2f5b4a890033fe79af',1,'tram::Value']]], ['isvec4_62',['IsVec4',['../classtram_1_1_value.html#a81e95640899e63a329a020a6fe2dfebc',1,'tram::Value']]], ['isvsync_63',['IsVsync',['../namespacetram_1_1_platform_1_1_window.html#a5f0dc2c949f69dbde94b216e53d26797',1,'tram::Platform::Window']]], ['itemcount_64',['ItemCount',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a27ee71a112e47b3caf0e8e167653a3ed',1,'tram::Ext::Kitchensink::QuestVariable']]], ['iterator_65',['iterator',['../structtram_1_1_pool_1_1iterator.html#a457d9529077f98de008f5c96ff860eb0',1,'tram::Pool::iterator']]] ]; ================================================ FILE: docs/cppapi/search/functions_9.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/functions_9.js ================================================ var searchData= [ ['jump_0',['Jump',['../classtram_1_1_controller_component.html#ad5ac49ff2ac8a5c96dbd8c341d445f76',1,'tram::ControllerComponent::Jump()'],['../classtram_1_1_f_p_s_controller_component.html#a05586398229c44cfafe8b9c6fdb3f2d8',1,'tram::FPSControllerComponent::Jump()'],['../classtram_1_1_raycast_controller_component.html#a865d92b888b684f1a8ddfc550509dfc8',1,'tram::RaycastControllerComponent::Jump()']]] ]; ================================================ FILE: docs/cppapi/search/functions_a.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/functions_a.js ================================================ var searchData= [ ['keycode_0',['KeyCode',['../namespacetram_1_1_u_i.html#ac636614381ad3dbc2f776a81b079d7aa',1,'tram::UI']]], ['keymouse_1',['KeyMouse',['../namespacetram_1_1_u_i.html#aa2ea74c6f62438b6f846bee415717c6b',1,'tram::UI']]], ['keypress_2',['KeyPress',['../namespacetram_1_1_u_i.html#ad23f479a3671059a175ec92cc496018d',1,'tram::UI']]], ['keyrelease_3',['KeyRelease',['../namespacetram_1_1_u_i.html#a46b24e31c21dac00a0d569caeed3a3c7',1,'tram::UI']]], ['keyscroll_4',['KeyScroll',['../namespacetram_1_1_u_i.html#a6b5c256e6ef51e21a36a61a03114383c',1,'tram::UI']]] ]; ================================================ FILE: docs/cppapi/search/functions_b.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/functions_b.js ================================================ var searchData= [ ['layer_0',['Layer',['../classtram_1_1_ext_1_1_kitchensink_1_1_list_dialog.html#a80fddca313006f7df721f6a76c4c0f46',1,'tram::Ext::Kitchensink::ListDialog::Layer()'],['../classtram_1_1_ext_1_1_menu_1_1_debug_menu.html#acbe4b614ff313801176a8d5c9323f200',1,'tram::Ext::Menu::DebugMenu::Layer()'],['../classtram_1_1_ext_1_1_menu_1_1_entity_properties.html#a4a5a2895e27ec27d0872dbc9551d64f4',1,'tram::Ext::Menu::EntityProperties::Layer()'],['../classtram_1_1_ext_1_1_menu_1_1_entity_picker.html#a82465472dd314737a46e71a4bb490413',1,'tram::Ext::Menu::EntityPicker::Layer()'],['../classtram_1_1_ext_1_1_menu_1_1_list_selection.html#a37f83670863cef2947520bfc87bf7439',1,'tram::Ext::Menu::ListSelection::Layer()'],['../classtram_1_1_ext_1_1_menu_1_1_message_send.html#a0aac25870c19be99a9dbec77f3941bd6',1,'tram::Ext::Menu::MessageSend::Layer()'],['../classtram_1_1_ext_1_1_menu_1_1_intercept_menu.html#a350714cafdedf14bb78f9ccbc0c5d6b9',1,'tram::Ext::Menu::InterceptMenu::Layer()'],['../classtram_1_1_ext_1_1_menu_1_1_world_cell_properties.html#a4ebf84a47dcf839b8b4cc56c968e9647',1,'tram::Ext::Menu::WorldCellProperties::Layer()'],['../classtram_1_1_ext_1_1_menu_1_1_statistics_menu.html#a0ecc5a8babc2c7f2efed7d7d05f57fc9',1,'tram::Ext::Menu::StatisticsMenu::Layer()'],['../classtram_1_1_ext_1_1_menu_1_1_event_emit.html#a3b6187201edc29ec7ce239ac0eaad7af',1,'tram::Ext::Menu::EventEmit::Layer()'],['../classtram_1_1_ext_1_1_menu_1_1_signal_menu.html#a0a8ace39c5fbd999a3651c9c3042b3a7',1,'tram::Ext::Menu::SignalMenu::Layer()'],['../classtram_1_1_ext_1_1_menu_1_1_options.html#aa6713b9bb4a7e222ce6ea27a7ecee557',1,'tram::Ext::Menu::Options::Layer()'],['../classtram_1_1_ext_1_1_menu_1_1_console.html#a6784de1db0572c2424cea93c4e0722dc',1,'tram::Ext::Menu::Console::Layer()'],['../classtram_1_1_ext_1_1_menu_1_1_menu.html#a972ff0163ab4ebc7d8acacce5d09a921',1,'tram::Ext::Menu::Menu::Layer()'],['../classtram_1_1_ext_1_1_menu_1_1_system_menu.html#a692ddb36ef07913c6a6595e3446370b8',1,'tram::Ext::Menu::SystemMenu::Layer()'],['../classtram_1_1_ext_1_1_menu_1_1_settings_menu.html#a48a51fdd2b0697dc7eea3934e247760f',1,'tram::Ext::Menu::SettingsMenu::Layer()']]], ['less_1',['Less',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a60afb565dd3a1e281129e5564ec3d3c1',1,'tram::Ext::Kitchensink::QuestVariable']]], ['lessorequal_2',['LessOrEqual',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#aa15fbf47249f3a14cfa3e1bd33a10b56',1,'tram::Ext::Kitchensink::QuestVariable']]], ['light_3',['Light',['../classtram_1_1_light.html#ad1690e5bb21843da0f5ef2c16a6219ff',1,'tram::Light']]], ['light_5ftree_4',['light_tree',['../namespacetram_1_1_render_1_1_light_tree.html#a6baeaf6a8a379247c5a02079c1ef92cb',1,'tram::Render::LightTree']]], ['light_5ftree_5fids_5',['light_tree_ids',['../namespacetram_1_1_render_1_1_a_p_i.html#a8e818c0f10852d65d1464fa7db96faaa',1,'tram::Render::API']]], ['lightgraph_6',['LightGraph',['../classtram_1_1_render_1_1_light_graph.html#a32f29f8d80661eedcfe32d72e7f11def',1,'tram::Render::LightGraph']]], ['linevisible_7',['LineVisible',['../namespacetram_1_1_render_1_1_a_p_i.html#a66e59e9064356a39cc2fdcc936ba7e0b',1,'tram::Render::API']]], ['link_8',['Link',['../classtram_1_1_world_cell.html#acfada914f06d4f84530531b1117b5280',1,'tram::WorldCell']]], ['listdialog_9',['ListDialog',['../classtram_1_1_ext_1_1_kitchensink_1_1_list_dialog.html#a7efdad5869f1dee758dd15a5c49e9d8c',1,'tram::Ext::Kitchensink::ListDialog::ListDialog()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_list_dialog.html#a150d52aef6f1ab1053a824ada7801c1d',1,'tram::Ext::Kitchensink::ListDialog::ListDialog(name_t)']]], ['listselection_10',['ListSelection',['../classtram_1_1_ext_1_1_menu_1_1_list_selection.html#a3d214fa7bbb5d943a33213188da06d4f',1,'tram::Ext::Menu::ListSelection']]], ['load_11',['Load',['../classtram_1_1_marker.html#a5ad81cd0f4cb4a426ac37ef1519f5357',1,'tram::Marker::Load()'],['../classtram_1_1_player.html#a7e5497fa4c5d70508cd8928a625bb2d7',1,'tram::Player::Load()'],['../classtram_1_1_scriptable.html#aad1310e7fddbaee776682f678d745208',1,'tram::Scriptable::Load()'],['../classtram_1_1_sound.html#ac7999efe8694dde2bbd32140c515c391',1,'tram::Sound::Load()'],['../classtram_1_1_static_world_object.html#a9fef88663daf97d8d472e29d480f29cc',1,'tram::StaticWorldObject::Load()'],['../classtram_1_1_trigger.html#a6d880e5d98a9a6210c79bf19d280219c',1,'tram::Trigger::Load()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#aae16221eb106915c8e3e509709f52952',1,'tram::Ext::Kitchensink::Button::Load()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_breakable.html#a430889350ca4370924e484230119c29e',1,'tram::Ext::Kitchensink::Breakable::Load()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_water.html#a2ae4115b327140de3532868a80f6738c',1,'tram::Ext::Kitchensink::Water::Load()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_train.html#ad2659a3719dc8658bb53300fc312cd76',1,'tram::Ext::Kitchensink::Train::Load()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_pickup.html#a649fb346d1ab51b8cfcc2d21a8e87d37',1,'tram::Ext::Kitchensink::Pickup::Load()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_text.html#a33ea59023d2ab8334d03f2eca1920472',1,'tram::Ext::Kitchensink::DebugText::Load()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_shape.html#aca488fc2cc2ee6132747b7f9ee2aa5af',1,'tram::Ext::Kitchensink::DebugShape::Load()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_autosave.html#a1ddc0ce845dfe63f5c7fa089a5309925',1,'tram::Ext::Kitchensink::TriggerAutosave::Load()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_hurt.html#af6eb6f5d84da2055d5f4d361c951646f',1,'tram::Ext::Kitchensink::TriggerHurt::Load()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_once.html#a0779152e5dfe962f7cea735d6da6c5c8',1,'tram::Ext::Kitchensink::TriggerOnce::Load()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_multiple.html#a09b7e8d6f7c06354087c7bbed605a0dc',1,'tram::Ext::Kitchensink::TriggerMultiple::Load()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_push.html#a09d780452b0c4c3affdad42d728ccb9f',1,'tram::Ext::Kitchensink::TriggerPush::Load()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_remove.html#a452f9f9d0d4b8864d59bfa8d93c2e128',1,'tram::Ext::Kitchensink::TriggerRemove::Load()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_teleport.html#aa6638ecd68bb098631b31097e320839a',1,'tram::Ext::Kitchensink::TriggerTeleport::Load()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_player_movement.html#aff679002a0af88434745c06eacb3eadd',1,'tram::Ext::Kitchensink::TriggerPlayerMovement::Load()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_quest_entity.html#acc37e81bc1cd3bf3459d8884e158737d',1,'tram::Ext::Kitchensink::QuestEntity::Load()'],['../classtram_1_1_entity.html#a42f5dbd06dc0014191ac78e6c2900386',1,'tram::Entity::Load()'],['../classtram_1_1_resource.html#a25c818d18a10010f342eaae99c083826',1,'tram::Resource::Load()'],['../classtram_1_1_world_cell.html#a587fab236965840dbf0b5254f562b2f6',1,'tram::WorldCell::Load()'],['../classtram_1_1_crate.html#a69259e33129f5d795e4fc449cc50a430',1,'tram::Crate::Load()'],['../classtram_1_1_decoration.html#a18546c61e3519a3a6ab882e7deb160fb',1,'tram::Decoration::Load()'],['../classtram_1_1_light.html#af787551e1e7ceecc73891f52811050b0',1,'tram::Light::Load()'],['../namespacetram_1_1_language.html#a33a74954652fedfbc85aab8cdd4c99f3',1,'tram::Language::Load()'],['../namespacetram_1_1_settings.html#a455697cb70a2b3f4f481dba130d6b181',1,'tram::Settings::Load()']]], ['loadall_12',['LoadAll',['../classtram_1_1_render_1_1_animation.html#acd6c4015e2d1ed771624e80141eb29fd',1,'tram::Render::Animation']]], ['loaddependency_13',['LoadDependency',['../namespacetram_1_1_async.html#a9e1b28345fded87fa20aee192ddcce0f',1,'tram::Async']]], ['loadfromdisk_14',['LoadFromDisk',['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_topic.html#afb41bd714afd933a421568dbd55cd99a',1,'tram::Ext::Kitchensink::DialogTopic::LoadFromDisk()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#a68d8a76e4253d7236b9b1ce50483750c',1,'tram::Ext::Kitchensink::Inventory::LoadFromDisk()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest.html#aadf35ec9fef560168ee449692458e1d8',1,'tram::Ext::Kitchensink::Quest::LoadFromDisk()'],['../classtram_1_1_navmesh.html#a792dae6d4c013fb3f773c1bf851a3f6c',1,'tram::Navmesh::LoadFromDisk()'],['../classtram_1_1_path.html#a03b3057af03cc8870dc7a699cdb1a77c',1,'tram::Path::LoadFromDisk()'],['../classtram_1_1_resource.html#a5dc8ecdb5e36b98015fe2f2ea0de6e14',1,'tram::Resource::LoadFromDisk()'],['../classtram_1_1_world_cell.html#a71c4e65daebc0e0dd1244843f8148c33',1,'tram::WorldCell::LoadFromDisk()'],['../classtram_1_1_physics_1_1_collision_model.html#a89325e4cec53a937d5f189701505344e',1,'tram::Physics::CollisionModel::LoadFromDisk()'],['../classtram_1_1_render_1_1_animation.html#aa0a4327e94e5babd310c67593cf4dae7',1,'tram::Render::Animation::LoadFromDisk()'],['../classtram_1_1_render_1_1_light_graph.html#a7dd1cd54e31470a76c5919dfb8311629',1,'tram::Render::LightGraph::LoadFromDisk()'],['../classtram_1_1_render_1_1_material.html#a0a50eea94634fac18b6a8fc13332f9f5',1,'tram::Render::Material::LoadFromDisk()'],['../classtram_1_1_render_1_1_model.html#a10296fe276ff9ac4d87dc9db6451092f',1,'tram::Render::Model::LoadFromDisk()'],['../classtram_1_1_render_1_1_sprite.html#a128d2e728b4a7b035b2a2436ad83a77a',1,'tram::Render::Sprite::LoadFromDisk()'],['../classtram_1_1_audio_1_1_sound_graph.html#ac716178da1e5c588036e57756bbcd76f',1,'tram::Audio::SoundGraph::LoadFromDisk()'],['../classtram_1_1_audio_1_1_sound.html#ae681916d6ba3394f2993162be809738c',1,'tram::Audio::Sound::LoadFromDisk()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container.html#a69e3f0e2bea54c85f6ae123d0409a86e',1,'tram::Ext::Kitchensink::AttributeContainer::LoadFromDisk()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_character.html#abe19a06c096ca336b0951e93013675e2',1,'tram::Ext::Kitchensink::Character::LoadFromDisk()']]], ['loadfrommemory_15',['LoadFromMemory',['../classtram_1_1_audio_1_1_sound_graph.html#ad953426922078e22c045f5d04517b650',1,'tram::Audio::SoundGraph::LoadFromMemory()'],['../classtram_1_1_audio_1_1_sound.html#a8e7cecf626c003bbb39fd560da2d68a0',1,'tram::Audio::Sound::LoadFromMemory()'],['../classtram_1_1_resource.html#aabc50d5a44a79da0f323e829711a6b0b',1,'tram::Resource::LoadFromMemory()'],['../classtram_1_1_physics_1_1_collision_model.html#a2d4b731dbae6f63ce4f665ccd60a94e0',1,'tram::Physics::CollisionModel::LoadFromMemory()'],['../classtram_1_1_render_1_1_animation.html#a256a3c4dc1998b67c26aab28b7684d9d',1,'tram::Render::Animation::LoadFromMemory()'],['../classtram_1_1_render_1_1_light_graph.html#af1948a05344456f61b7c26f2871c7a91',1,'tram::Render::LightGraph::LoadFromMemory()'],['../classtram_1_1_render_1_1_model.html#a4d4127ce3dd4bd14ca6c2a559137a57e',1,'tram::Render::Model::LoadFromMemory()'],['../classtram_1_1_render_1_1_sprite.html#a1fb88f43158526d7330e36bdbba2f86c',1,'tram::Render::Sprite::LoadFromMemory()'],['../classtram_1_1_render_1_1_material.html#a3006d4a771167841597b0ee169213744',1,'tram::Render::Material::LoadFromMemory()']]], ['loadmaterialinfo_16',['LoadMaterialInfo',['../classtram_1_1_render_1_1_material.html#a5d94a73e4b23271686808101fd33211a',1,'tram::Render::Material']]], ['loadresourcesfromdisk_17',['LoadResourcesFromDisk',['../namespacetram_1_1_async.html#a15485706aae380a728a9e771feabb503',1,'tram::Async']]], ['loadresourcesfrommemory_18',['LoadResourcesFromMemory',['../namespacetram_1_1_async.html#a165152c16b8171d9a4acdfd2d80592de',1,'tram::Async']]], ['loadscript_19',['LoadScript',['../classtram_1_1_script_1_1_interface.html#a133e2307fda40c3d2ab284e809a0f434',1,'tram::Script::Interface::LoadScript()'],['../namespacetram_1_1_script.html#aadbf03d624e136dc8f25ab15c15e9f1a',1,'tram::Script::LoadScript()']]], ['lock_20',['Lock',['../classtram_1_1_spinlock.html#a9ab6e05f0a2d8cb920081fa3507eb864',1,'tram::Spinlock']]], ['lock_21',['lock',['../classtram_1_1_queue.html#a45fae4fa6028c6f6f5c714f9bd88e6b8',1,'tram::Queue']]], ['lockrenderlist_22',['LockRenderlist',['../namespacetram_1_1_audio_1_1_spatial.html#af0ceb28e435bdcb3504d0702785e2ad4',1,'tram::Audio::Spatial']]], ['log_23',['Log',['../namespacetram.html#a78660be0737c048109e94b12da8376c1',1,'tram::Log(Severity severity, System::system_t system, const std::string_view &format, Args &&... args)'],['../namespacetram.html#ab55eb49c2df70f400895dab88b146d00',1,'tram::Log(System::system_t system, const std::string_view &format, Args &&... args)'],['../namespacetram.html#a1d9753464d0d21a28f513716fa797cd8',1,'tram::Log(const std::string_view &format, Args &&... args)']]], ['log_24',['log',['../namespacetram_1_1implementation.html#a9e18832774c9a92e285eeb0cfa84d64d',1,'tram::implementation::log(void(*flush)(Severity, System::system_t), Severity severity, System::system_t system, std::string_view &format)'],['../namespacetram_1_1implementation.html#aaddb11c3ce07c8bbb6e9dc206f13fff3',1,'tram::implementation::log(void(*flush)(Severity, System::system_t), Severity severity, System::system_t system, std::string_view &format, T &value, Args &&... args)']]], ['lookupenvironmentmap_25',['LookupEnvironmentMap',['../classtram_1_1_render_1_1_light_graph.html#a0c98cd60f1386f73c654536c70147351',1,'tram::Render::LightGraph']]], ['lookupfilter_26',['LookupFilter',['../classtram_1_1_audio_1_1_sound_graph.html#a3d22cc051810eba6e6e9bcc88191e67f',1,'tram::Audio::SoundGraph']]], ['lookupharmonic_27',['LookupHarmonic',['../classtram_1_1_render_1_1_light_graph.html#ad506de9dafeee1b2e44727ac031f0d4a',1,'tram::Render::LightGraph']]] ]; ================================================ FILE: docs/cppapi/search/functions_c.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/functions_c.js ================================================ var searchData= [ ['main_0',['main',['../main_8cpp.html#a217dbf8b442f20279ea00b898af96f52',1,'main.cpp']]], ['mainloop_1',['mainloop',['../main_8cpp.html#a896df4ffe3f986ad843e4d191cd712b3',1,'main.cpp']]], ['make_2',['make',['../classtram_1_1_component.html#a677f4c2d5457aa376fba89d95f3ca8c9',1,'tram::Component::make()'],['../classtram_1_1_event_listener.html#ad0763adada010c84064f47422fce20ec',1,'tram::EventListener::make(event_t event, Entity *parent)'],['../classtram_1_1_event_listener.html#a53f1f1eb7860d9f8e2138c0b605cbefc',1,'tram::EventListener::make(event_t event, EntityComponent *parent)'],['../classtram_1_1_event_listener.html#afabda0702b19ce175e7603c6e3624ea1',1,'tram::EventListener::make(event_t event, void(*handler)(Event &event))']]], ['make_3',['Make',['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_package.html#ace7ea2819350d9638a0980f288c62416',1,'tram::Ext::Kitchensink::AIPackage::Make()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_topic.html#a62f08db43d9b1adc67326d1910b3bf0f',1,'tram::Ext::Kitchensink::DialogTopic::Make()'],['../classtram_1_1_entity.html#a5bde1559d6170dca943fa7f41dde7ea9',1,'tram::Entity::Make(name_t type, File *file)'],['../classtram_1_1_entity.html#a357bb17d489c2f456994c1fa4150f333',1,'tram::Entity::Make(name_t type, const SharedEntityData &, const ValueArray &)'],['../classtram_1_1_transition.html#aa87cde46adb540c592be7626e595119c',1,'tram::Transition::Make()'],['../classtram_1_1_world_cell.html#ac34c6821383503d786d5de19caba1041',1,'tram::WorldCell::Make()'],['../classtram_1_1_render_1_1_material.html#a25c1c97007d7229c7adb8a4e9986e70d',1,'tram::Render::Material::Make()'],['../namespacetram_1_1_scriptable_type.html#a69a13c0e50a7af34965201fdee75210b',1,'tram::ScriptableType::Make()']]], ['makeaudiobuffer_4',['MakeAudioBuffer',['../namespacetram_1_1_audio_1_1_a_p_i.html#aaaac5e27e3363b227c4ea0d70f8844a0',1,'tram::Audio::API']]], ['makeaudiosource_5',['MakeAudioSource',['../namespacetram_1_1_audio_1_1_a_p_i.html#a02a046aaade1a4a0290db64f9514816b',1,'tram::Audio::API']]], ['makecollisionshape_6',['MakeCollisionShape',['../namespacetram_1_1_physics_1_1_a_p_i.html#a871da86313d2f9e88539c71940ac8e89',1,'tram::Physics::API::MakeCollisionShape(CollisionShape shape)'],['../namespacetram_1_1_physics_1_1_a_p_i.html#a94cd3fb5de4826d7e83dd17450d30612',1,'tram::Physics::API::MakeCollisionShape(CollisionShapeTransform *shapes, size_t shape_count)']]], ['makelight_7',['MakeLight',['../namespacetram_1_1_render_1_1_a_p_i.html#a86dea3f6c3851af17406ccee3bdc8b85',1,'tram::Render::API']]], ['makematerial_8',['MakeMaterial',['../namespacetram_1_1_render_1_1_a_p_i.html#afaefcc84f8bd511adca07903dd4cd276',1,'tram::Render::API']]], ['makenewerrormodel_9',['MakeNewErrorModel',['../namespacetram_1_1_render.html#a7e7fe9a01e4909b61222ad2214175b8e',1,'tram::Render']]], ['makenewerrortexture_10',['MakeNewErrorTexture',['../namespacetram_1_1_render.html#a1ebeba7bcc783c32d08b2948d2640a37',1,'tram::Render']]], ['makepattern_11',['MakePattern',['../classtram_1_1_render_1_1_material.html#acfdd1c7fb5e2c4057855d2dcf7ee75a7',1,'tram::Render::Material']]], ['makerigidbody_12',['MakeRigidbody',['../namespacetram_1_1_physics_1_1_a_p_i.html#a5e1dea21d1c0aa5c2f2eec460c9be277',1,'tram::Physics::API']]], ['makesomesourcepaths_13',['MakeSomeSourcePaths',['../namespacetram_1_1_audio_1_1_spatial.html#ac07a5c7f91a197dfdd8544a505a71576',1,'tram::Audio::Spatial']]], ['makespans_14',['MakeSpans',['../namespacetram_1_1_render_1_1_a_p_i.html#a84dcc808d228294d594b6bb0a97e3869',1,'tram::Render::API']]], ['maketrigger_15',['MakeTrigger',['../namespacetram_1_1_physics_1_1_a_p_i.html#a2268940df819b4cd3a4cf431515ac19d',1,'tram::Physics::API']]], ['makeuniformbuffer_16',['MakeUniformBuffer',['../namespacetram_1_1_render_1_1_a_p_i.html#abe7ed6af822251d71e03add10aa5c14e',1,'tram::Render::API']]], ['marker_17',['Marker',['../classtram_1_1_marker.html#a1c59918f30d773f92bdea30840ef63a1',1,'tram::Marker']]], ['material_18',['Material',['../classtram_1_1_render_1_1_material.html#a5174425b4875181d93adc3926d2d7441',1,'tram::Render::Material::Material(name_t name)'],['../classtram_1_1_render_1_1_material.html#a7953b137f0390f6e729efe9e9cf86aa3',1,'tram::Render::Material::Material(name_t name, materialtype_t type)']]], ['mergeaabbmax_19',['MergeAABBMax',['../classtram_1_1_a_a_b_b_tree.html#a7381f1d5ef18522f092b20432af0c291',1,'tram::AABBTree::MergeAABBMax()'],['../namespacetram.html#ad77ebd7184cb4042cd3f12789f7f6888',1,'tram::MergeAABBMax()']]], ['mergeaabbmin_20',['MergeAABBMin',['../classtram_1_1_a_a_b_b_tree.html#aa25621c85212298d11a04b79b8638609',1,'tram::AABBTree::MergeAABBMin()'],['../namespacetram.html#a47d29b14ffc788f302abead903c46544',1,'tram::MergeAABBMin()']]], ['mesh_21',['Mesh',['../structtram_1_1_physics_1_1_collision_shape.html#ab1b9dd4a5ab3e27a4325d18df5e4d096',1,'tram::Physics::CollisionShape']]], ['messagehandler_22',['MessageHandler',['../classtram_1_1_crate.html#af7343196750b22c09851f50d779faa86',1,'tram::Crate::MessageHandler()'],['../classtram_1_1_decoration.html#a9d89648397f17f989b157f3981f4d41f',1,'tram::Decoration::MessageHandler()'],['../classtram_1_1_light.html#ac45d1bc54463861a0b9919b8eca264aa',1,'tram::Light::MessageHandler()'],['../classtram_1_1_marker.html#ae890d19a9b46205c1be064f6c08291df',1,'tram::Marker::MessageHandler()'],['../classtram_1_1_player.html#ae00d494c1e34cc0387008e94ac6863a2',1,'tram::Player::MessageHandler()'],['../classtram_1_1_scriptable.html#abfdd163bed725d0adf7a42efcba0d200',1,'tram::Scriptable::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_autosave.html#a7b9229167dc5e4e523673d81b715950f',1,'tram::Ext::Kitchensink::TriggerAutosave::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_hurt.html#ad528676eb4cc1bee09c8d61b18a60e49',1,'tram::Ext::Kitchensink::TriggerHurt::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_once.html#aea523f5b59a0d9495f264dfc46a11d77',1,'tram::Ext::Kitchensink::TriggerOnce::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_pickup.html#a13c6b811f951816a92465949a34c3932',1,'tram::Ext::Kitchensink::Pickup::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_train.html#ae2325d13d9f15bca5e4cac7111f95bab',1,'tram::Ext::Kitchensink::Train::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_water.html#a82504fffe38ba4dbecd3ea108d6b23ef',1,'tram::Ext::Kitchensink::Water::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_breakable.html#aee0cec5c3827047160688f550eb3a9f4',1,'tram::Ext::Kitchensink::Breakable::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a7ffa11cb9e77ee441e75c12c776daf2d',1,'tram::Ext::Kitchensink::Button::MessageHandler()'],['../classtram_1_1_trigger.html#a6fba995382f75a47579141e409b6c4c2',1,'tram::Trigger::MessageHandler()'],['../classtram_1_1_entity.html#ad81126191ef55c6ff2b3b112ce6c9cdb',1,'tram::Entity::MessageHandler()'],['../classtram_1_1_sound.html#afaf38811530319b1021f29e07f1b02c9',1,'tram::Sound::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_shape.html#a3db61b3a8693e5b27a5be2f811d2dff0',1,'tram::Ext::Kitchensink::DebugShape::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_quest_entity.html#a1fe119992afcc7629ca0395f40b6a78b',1,'tram::Ext::Kitchensink::QuestEntity::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_player_movement.html#a2f2b494dec320ccfe9a8c11dee242053',1,'tram::Ext::Kitchensink::TriggerPlayerMovement::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_text.html#ab3a96a3bea79e5de1e4db4b958d82450',1,'tram::Ext::Kitchensink::DebugText::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_teleport.html#a3bbf1ab021f484e52d3c54f6c64cf2fd',1,'tram::Ext::Kitchensink::TriggerTeleport::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_remove.html#a361107230fc5fd0c1193cf0dfcd3f9ef',1,'tram::Ext::Kitchensink::TriggerRemove::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_push.html#a16e84722dd3f82b8d31241c7a61adba7',1,'tram::Ext::Kitchensink::TriggerPush::MessageHandler()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_multiple.html#afba3b0305dadaadb47d03e299d5feed0',1,'tram::Ext::Kitchensink::TriggerMultiple::MessageHandler()'],['../classtram_1_1_static_world_object.html#aadf4aa7defed528401d1b40561b56e38',1,'tram::StaticWorldObject::MessageHandler()']]], ['model_23',['Model',['../classtram_1_1_render_1_1_model.html#a9b316fb88f81c47f0af41604333df822',1,'tram::Render::Model']]], ['move_24',['Move',['../classtram_1_1_controller_component.html#a72c9c834cd28d9c7cdbd16e48d6146f6',1,'tram::ControllerComponent::Move()'],['../classtram_1_1_f_p_s_controller_component.html#ac47fe6964c8f7590a92f8fa5be91c825',1,'tram::FPSControllerComponent::Move()'],['../classtram_1_1_raycast_controller_component.html#a535ed363eec2dcf7f8232aeb1f594fb0',1,'tram::RaycastControllerComponent::Move()']]], ['moveto_25',['MoveTo',['../classtram_1_1_ext_1_1_kitchensink_1_1_dialog_controller.html#a63a0067b174a312d9f08a935f86f1226',1,'tram::Ext::Kitchensink::DialogController']]] ]; ================================================ FILE: docs/cppapi/search/functions_d.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/functions_d.js ================================================ var searchData= [ ['navmesh_0',['Navmesh',['../classtram_1_1_navmesh.html#a17689cf25d70bd126c147747daa8c559',1,'tram::Navmesh']]], ['new_1',['New',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory_manager.html#abe28a6894e388eb7ab8894278211222c',1,'tram::Ext::Kitchensink::InventoryManager::New()'],['../classtram_1_1_pool_proxy.html#a799c01c3a6c1648adb02038baff3e30a',1,'tram::PoolProxy::New()']]], ['newline_2',['NewLine',['../namespacetram_1_1_g_u_i.html#a76d6631e615a2c8e9fb923d034b92507',1,'tram::GUI']]], ['newnode_3',['NewNode',['../classtram_1_1_octree.html#a6d0d4f09bc8a2edd9abe38415e91bcc8',1,'tram::Octree']]], ['no_5fquote_4',['no_quote',['../structtram_1_1_u_i_d.html#a1b9ca41783891921e10ab8eea617db47',1,'tram::UID']]], ['not_5',['Not',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a836e78370020eb0f3939b0cbb7d67b5d',1,'tram::Ext::Kitchensink::QuestVariable']]] ]; ================================================ FILE: docs/cppapi/search/functions_e.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/functions_e.js ================================================ var searchData= [ ['objective_0',['Objective',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#ac300d9727ec2d9e12f536168075c07ef',1,'tram::Ext::Kitchensink::QuestVariable']]], ['octree_1',['Octree',['../classtram_1_1_octree.html#a2d86fab3ff9590542faa44a542e90a30',1,'tram::Octree']]], ['onadded_2',['OnAdded',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a2018e6ddb7b0daa520a7dc275bb3a8f0',1,'tram::Ext::Kitchensink::ItemClass']]], ['onequip_3',['OnEquip',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a871da89199081aeee3bc4b351764c5fb',1,'tram::Ext::Kitchensink::ItemClass']]], ['onidle_4',['OnIdle',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a5605b4cce1b10ffb337f7e4d746034e2',1,'tram::Ext::Kitchensink::ItemClass']]], ['onprimaryaction_5',['OnPrimaryAction',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a8dc131c2ab76acccbc139c941193dbde',1,'tram::Ext::Kitchensink::ItemClass']]], ['onremoved_6',['OnRemoved',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a2ebc7201376c73944e667f90e69e527d',1,'tram::Ext::Kitchensink::ItemClass']]], ['onsecondaryaction_7',['OnSecondaryAction',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a2e7fd99ac987efb75922a0ac3d1bfd6d',1,'tram::Ext::Kitchensink::ItemClass']]], ['onunequip_8',['OnUnequip',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#aed8df724d985ebd66f934bf3bdc00b18',1,'tram::Ext::Kitchensink::ItemClass']]], ['operator_20bool_9',['operator bool',['../classtram_1_1_component.html#ac42050ff047751f66c1549099461d047',1,'tram::Component::operator bool()'],['../classtram_1_1_event_listener.html#a470747c16eea957d442a15279c4d1ad4',1,'tram::EventListener::operator bool()'],['../classtram_1_1_resource_proxy.html#aa6e978c36ec5f1eafd43563e75d5e071',1,'tram::ResourceProxy::operator bool()'],['../structtram_1_1_u_i_d.html#a711568eafe8684f867cadc960073424d',1,'tram::UID::operator bool()'],['../classtram_1_1_value.html#a9e4adfed646e5615bba90d78396a1520',1,'tram::Value::operator bool()'],['../classtram_1_1_pool_ptr.html#ad9256249e1bdc3d11359e8916dfe25c2',1,'tram::PoolPtr::operator bool()']]], ['operator_20bool_20_2a_10',['operator bool *',['../classtram_1_1_value_ptr.html#af8e50ee83fee75e420ac76981b8d06c4',1,'tram::ValuePtr']]], ['operator_20char_20const_20_2a_11',['operator char const *',['../structtram_1_1_u_i_d.html#a9af82bbfd8dcab2fc38cc817a2dbffe9',1,'tram::UID']]], ['operator_20const_20char_20_2a_12',['operator const char *',['../classtram_1_1_value.html#a15856860b73c5d576801dae6f4715dfe',1,'tram::Value']]], ['operator_20const_20char_20_2a_2a_13',['operator const char **',['../classtram_1_1_value_ptr.html#a77f0013cb0d9b53db31f09f4de6c2967',1,'tram::ValuePtr']]], ['operator_20double_14',['operator double',['../classtram_1_1_value.html#a9639ed16d4cb470358687dc976993470',1,'tram::Value']]], ['operator_20float_15',['operator float',['../classtram_1_1_value.html#a1175f90f2eab9d3d316914b1ee84aeb0',1,'tram::Value']]], ['operator_20float_20_2a_16',['operator float *',['../classtram_1_1_value_ptr.html#adb4fc61323ca7975037a71dce2b28d9b',1,'tram::ValuePtr']]], ['operator_20int16_5ft_17',['operator int16_t',['../classtram_1_1_value.html#aa1b1ea0a628e85c8dcc81b7764d0aa6f',1,'tram::Value']]], ['operator_20int32_5ft_18',['operator int32_t',['../classtram_1_1_value.html#ae53ccc02b30523aa2709b44dc43fda69',1,'tram::Value']]], ['operator_20int32_5ft_20_2a_19',['operator int32_t *',['../classtram_1_1_value_ptr.html#ab0a5e0c74d237cee355b29fd9da38c86',1,'tram::ValuePtr']]], ['operator_20int64_5ft_20',['operator int64_t',['../classtram_1_1_value.html#a39d40edb670c7aecc861261018a57d85',1,'tram::Value']]], ['operator_20int8_5ft_21',['operator int8_t',['../classtram_1_1_value.html#aa919d5718da818826402272ff33bf164',1,'tram::Value']]], ['operator_20name_5ft_22',['operator name_t',['../classtram_1_1_value.html#add6cf0d6e6e2830cf8caf35509735ff9',1,'tram::Value']]], ['operator_20name_5ft_20_2a_23',['operator name_t *',['../classtram_1_1_value_ptr.html#a4736ff47afb4c66c197c4f006b22c9c5',1,'tram::ValuePtr']]], ['operator_20quat_24',['operator quat',['../classtram_1_1_value.html#a7794e38049e0b66a7cc567dd119b46c2',1,'tram::Value']]], ['operator_20quat_20_2a_25',['operator quat *',['../classtram_1_1_value_ptr.html#a4ac212df5db186a5a5f2c4e4639b07d0',1,'tram::ValuePtr']]], ['operator_20t_26',['operator T',['../structtram_1_1_settings_1_1_property.html#a658015428992dd46bb49a68c9a714dd0',1,'tram::Settings::Property']]], ['operator_20t_2a_27',['operator T*',['../classtram_1_1_component.html#a53f799110efd1ab0687820f197916abd',1,'tram::Component']]], ['operator_20uint16_5ft_28',['operator uint16_t',['../classtram_1_1_value.html#aa28db4afe53e6e7d8c28996b9e3fb748',1,'tram::Value']]], ['operator_20uint32_5ft_29',['operator uint32_t',['../classtram_1_1_value.html#a784abb3dd60f5c793651f1aa1d837154',1,'tram::Value']]], ['operator_20uint32_5ft_20_2a_30',['operator uint32_t *',['../classtram_1_1_value_ptr.html#aa6b8c236803c98f1444cefa27f4898e7',1,'tram::ValuePtr']]], ['operator_20uint64_5ft_31',['operator uint64_t',['../classtram_1_1_value.html#a9ae9787d652066d81e5c5c8cd2bb0577',1,'tram::Value']]], ['operator_20uint8_5ft_32',['operator uint8_t',['../classtram_1_1_value.html#a2c5a0317d82668f998a66d8761569987',1,'tram::Value']]], ['operator_20value_33',['operator Value',['../classtram_1_1_value_ptr.html#a574e55635d32e94735d03e09622eccd8',1,'tram::ValuePtr']]], ['operator_20vec2_34',['operator vec2',['../classtram_1_1_value.html#acddba52345b86f24d2cb810b99774175',1,'tram::Value']]], ['operator_20vec2_20_2a_35',['operator vec2 *',['../classtram_1_1_value_ptr.html#a73f06a36dab1e2913d5151249a2e6108',1,'tram::ValuePtr']]], ['operator_20vec3_36',['operator vec3',['../classtram_1_1_value.html#ad1db6f75ec7be66818e032e2c0115d45',1,'tram::Value']]], ['operator_20vec3_20_2a_37',['operator vec3 *',['../classtram_1_1_value_ptr.html#af8d2ca7e235ca06306a250b9c8e51d45',1,'tram::ValuePtr']]], ['operator_20vec4_38',['operator vec4',['../classtram_1_1_value.html#ada6847b5e4ee399009ffbffe1cc57189',1,'tram::Value']]], ['operator_20vec4_20_2a_39',['operator vec4 *',['../classtram_1_1_value_ptr.html#aaacda1660f2ba288b538f5ec5de89063',1,'tram::ValuePtr']]], ['operator_2a_40',['operator*',['../classtram_1_1_pool_ptr.html#aab24751b40c889dac6e66c78bdb4adbb',1,'tram::PoolPtr::operator*()'],['../classtram_1_1_component.html#aa83c13894934e104f7b7fb9f95a2864e',1,'tram::Component::operator*()'],['../classtram_1_1_resource_proxy.html#a40da59b39b0d3b1467775c655d06007b',1,'tram::ResourceProxy::operator*()'],['../structtram_1_1_pool_1_1iterator.html#ae1b598c681e2e0993cd726817c7304cf',1,'tram::Pool::iterator::operator*() const']]], ['operator_2b_2b_41',['operator++',['../structtram_1_1_pool_1_1iterator.html#a8cd774ed78f4aa2e1e23d005e8f43302',1,'tram::Pool::iterator::operator++(int)'],['../structtram_1_1_pool_1_1iterator.html#af29387992afc913f26300d7b779a4db8',1,'tram::Pool::iterator::operator++()']]], ['operator_2d_3e_42',['operator->',['../classtram_1_1_component.html#a7867337d41058f8bdd955736e2ba1127',1,'tram::Component::operator->()'],['../classtram_1_1_resource_proxy.html#a12bcf3a4db3fb67fbfbca4e904fe6e11',1,'tram::ResourceProxy::operator->()'],['../structtram_1_1_pool_1_1iterator.html#a48a325f43b759e963ebc8f9a6791cdcb',1,'tram::Pool::iterator::operator->()'],['../classtram_1_1_pool_ptr.html#a6d00d265dff562e8bba6d9712d26006e',1,'tram::PoolPtr::operator->()']]], ['operator_3d_43',['operator=',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a4ab73b956ef675005147fe16651de78b',1,'tram::Ext::Kitchensink::QuestVariable::operator=()'],['../classtram_1_1_resource_proxy.html#ae9b5619de08c190d93c0cf7aa9736df9',1,'tram::ResourceProxy::operator=()'],['../structtram_1_1_u_i_d.html#ae2a5ed9b778bcc983f12591981d2802e',1,'tram::UID::operator=()'],['../classtram_1_1_value.html#a4baee4afcfd915fab1056bbe3e90b889',1,'tram::Value::operator=()']]], ['operator_3d_3d_44',['operator==',['../structtram_1_1_u_i_d.html#a0a5dbb6d93d93b65abf71ae5d84d4823',1,'tram::UID::operator==(const UID &other) const'],['../structtram_1_1_u_i_d.html#a1dbeaf14b2261159f5a2569fc5289587',1,'tram::UID::operator==(const char *other) const'],['../classtram_1_1_value.html#a055377410aa38120a535afb9b3cd69e3',1,'tram::Value::operator==()']]], ['operator_5b_5d_45',['operator[]',['../classtram_1_1_value_array.html#ac27d29e59b70dc51bcfe4e16f7826952',1,'tram::ValueArray::operator[]()'],['../classtram_1_1_hashmap.html#a16e686d27f2c5d67800e40fa01f2d97d',1,'tram::Hashmap::operator[](UID key)'],['../classtram_1_1_hashmap.html#a2a1f0c5b852df8b670b19293784c75ff',1,'tram::Hashmap::operator[](uint32_t key)'],['../classtram_1_1_pool.html#ad3e5247f51702e2e59fd5b62436f326c',1,'tram::Pool::operator[]()']]], ['options_46',['Options',['../classtram_1_1_ext_1_1_menu_1_1_options.html#a11552024ef3e7976cf5b0fbcbbd63d22',1,'tram::Ext::Menu::Options']]], ['or_47',['Or',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a5a8c1d8a4ba4f4059112ea7dbe9a2b65',1,'tram::Ext::Kitchensink::QuestVariable']]], ['string_48',['string',['../structtram_1_1_u_i_d.html#adef010b946f7cc1ea7f7ecac7df3e801',1,'tram::UID']]] ]; ================================================ FILE: docs/cppapi/search/functions_f.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/functions_f.js ================================================ var searchData= [ ['packvertexbuffer_0',['PackVertexBuffer',['../namespacetram_1_1_render_1_1_a_p_i.html#ac9c8b1770aeeff3ea24c789c104551ae',1,'tram::Render::API']]], ['packvertices_1',['PackVertices',['../namespacetram_1_1_render_1_1_a_p_i.html#a3c1162ce946a884d6018685ec1157c51',1,'tram::Render::API']]], ['parse_2',['Parse',['../namespacetram_1_1_settings.html#a2194732b7c9aa48722e59cd5e5ceb456',1,'tram::Settings']]], ['parseformat_3',['ParseFormat',['../namespacetram_1_1_render_1_1_a_p_i.html#a7e05816b2379825525b322e68af15424',1,'tram::Render::API']]], ['particlecomponent_4',['ParticleComponent',['../classtram_1_1_particle_component.html#a53990e83ab645269af4e740d72d6914b',1,'tram::ParticleComponent']]], ['path_5',['Path',['../classtram_1_1_path.html#a9a0e7ff4de05db6ced2dd6ef0e1a2d75',1,'tram::Path']]], ['pathaction_6',['PathAction',['../classtram_1_1_physics_1_1_path_action.html#a22e23ed7cfd09968f5bc0663befd1d9c',1,'tram::Physics::PathAction']]], ['pathfollower_7',['PathFollower',['../classtram_1_1_path_follower.html#a86f5375b9ad4e9ee064df8782c357b49',1,'tram::PathFollower']]], ['pause_8',['Pause',['../classtram_1_1_animation_component.html#a752f8c4d9982c2a406e80597a85158cd',1,'tram::AnimationComponent::Pause()'],['../classtram_1_1_audio_component.html#ad8d20d0b929c8ac8666d80dac82ce0df',1,'tram::AudioComponent::Pause()'],['../classtram_1_1_sprite_component.html#a83f36a6e77225ccb7fd60f0f70f78972',1,'tram::SpriteComponent::Pause()']]], ['pauseaudiosource_9',['PauseAudioSource',['../namespacetram_1_1_audio_1_1_a_p_i.html#ab58ddd72a8b81823756b0d141e015590',1,'tram::Audio::API']]], ['perform_10',['Perform',['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_action.html#a773e06de51af612cd67bc422a37cfda4',1,'tram::Ext::Kitchensink::DialogAction']]], ['perspectivedivision_11',['PerspectiveDivision',['../namespacetram_1_1_render_1_1_a_p_i.html#a437320a39ddec40f81acdc942eeb9940',1,'tram::Render::API::PerspectiveDivision(vec4 &p0, vec4 &p1)'],['../namespacetram_1_1_render_1_1_a_p_i.html#a835ced33fd7a5c9239310fdcffd701f8',1,'tram::Render::API::PerspectiveDivision(vec4 &p)']]], ['physicscomponent_12',['PhysicsComponent',['../classtram_1_1_physics_component.html#ae945e9f6b3d40e2fd3764a6f9ccd8f3d',1,'tram::PhysicsComponent']]], ['pickup_13',['Pickup',['../classtram_1_1_ext_1_1_kitchensink_1_1_pickup.html#aa14c29d40df5968c605f63bdd03cd3d0',1,'tram::Ext::Kitchensink::Pickup']]], ['play_14',['Play',['../classtram_1_1_animation_component.html#ae64dafa0a2ea87a033e0fa4bd342f5ad',1,'tram::AnimationComponent::Play()'],['../classtram_1_1_audio_component.html#a46dea84e302ded4f9d1cb4a19a15a4fd',1,'tram::AudioComponent::Play()'],['../classtram_1_1_sprite_component.html#af3bb6eacd3c918f5c227840bcea5f4e1',1,'tram::SpriteComponent::Play()']]], ['playaudiosource_15',['PlayAudioSource',['../namespacetram_1_1_audio_1_1_a_p_i.html#a909017b3d28ed5fe14bac0b516770bb5',1,'tram::Audio::API']]], ['player_16',['Player',['../classtram_1_1_player.html#a54576337a20fd6e5f753a1e9716900b7',1,'tram::Player::Player()'],['../classtram_1_1_player.html#a96db3f6f72ef25251dced6d52448fbe7',1,'tram::Player::Player(name_t)']]], ['playercomponent_17',['PlayerComponent',['../classtram_1_1_player_component.html#ae5e66423537fa62170701cbf69c2882f',1,'tram::PlayerComponent']]], ['playsound_18',['PlaySound',['../classtram_1_1_ext_1_1_kitchensink_1_1_sound_table.html#a7a6df6a1a197749301a22f3026617a86',1,'tram::Ext::Kitchensink::SoundTable::PlaySound(SoundAction type)'],['../classtram_1_1_ext_1_1_kitchensink_1_1_sound_table.html#ad31116a4938a4f571022d9c33eeae03d',1,'tram::Ext::Kitchensink::SoundTable::PlaySound(SoundAction type, vec3 position, float volume)']]], ['pointoutsidebottomplane_19',['PointOutsideBottomPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#a376abbcab88b34e51794e7e0ece4ec58',1,'tram::Render::API']]], ['pointoutsidefarplane_20',['PointOutsideFarPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#a5b8d2a62665b8a1f7fe6546ff6f09065',1,'tram::Render::API']]], ['pointoutsideleftplane_21',['PointOutsideLeftPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#aaae15e056fdabbbbdcb09cfe005b4242',1,'tram::Render::API']]], ['pointoutsidenearplane_22',['PointOutsideNearPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#abb0e4d781ba0d59d10503ec6aa352e46',1,'tram::Render::API']]], ['pointoutsiderightplane_23',['PointOutsideRightPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#a3911859adbfe0d04739e68361004226b',1,'tram::Render::API']]], ['pointoutsidetopplane_24',['PointOutsideTopPlane',['../namespacetram_1_1_render_1_1_a_p_i.html#a70fdb5f6dca386dfe2f3fef83cb1a6db',1,'tram::Render::API']]], ['pointvisible_25',['PointVisible',['../namespacetram_1_1_render_1_1_a_p_i.html#a305347e27d6c34316bee82ec791699aa',1,'tram::Render::API']]], ['poll_26',['Poll',['../classtram_1_1_trigger_component.html#ae6374eae5d6d91477a7abadc14a19b20',1,'tram::TriggerComponent']]], ['pollkeyboardaxis_27',['PollKeyboardAxis',['../namespacetram_1_1_u_i.html#a3667dadfea3dcd6dff80d60611fb7cdc',1,'tram::UI']]], ['pollkeyboardaxisdelta_28',['PollKeyboardAxisDelta',['../namespacetram_1_1_u_i.html#a5cb12417deb961741e7269cbe3398dd1',1,'tram::UI']]], ['pollkeyboardkey_29',['PollKeyboardKey',['../namespacetram_1_1_u_i.html#a7a1f37f6e233c727f219f06aefc745ef',1,'tram::UI']]], ['pool_30',['Pool',['../classtram_1_1_pool.html#a57e13a9a51ca187af45f052b3d70b17f',1,'tram::Pool::Pool(const char *name, uint64_t initialSize)'],['../classtram_1_1_pool.html#a0650ba8f22b8180249c5a9050256f979',1,'tram::Pool::Pool(const char *name, uint64_t initialSize, std::initializer_list< T > list)']]], ['pool_31',['pool',['../classtram_1_1_pool_proxy.html#aedcb7d9eceb53a8a1495741d098658c1',1,'tram::PoolProxy::pool("Sound Resource pool", RESOURCE_LIMIT_SOUND)'],['../classtram_1_1_pool_proxy.html#ab37438f9460b4f23ed37fa5c751e5d92',1,'tram::PoolProxy::pool("AnimationComponent pool", COMPONENT_LIMIT_ANIMATION)'],['../classtram_1_1_pool_proxy.html#a132113c7cf9888dcf791d1bdae86a4ce',1,'tram::PoolProxy::pool("AudioComponent pool", COMPONENT_LIMIT_AUDIO)'],['../classtram_1_1_pool_proxy.html#a15a62f52369603f61fda4a0c3aab3453',1,'tram::PoolProxy::pool("FPSControllerComponent pool", COMPONENT_LIMIT_CONTROLLER)'],['../classtram_1_1_pool_proxy.html#a8c8f705895edd3f1ef5416a39dcfb289',1,'tram::PoolProxy::pool("RaycastControllerComponent pool", COMPONENT_LIMIT_CONTROLLER)'],['../classtram_1_1_pool_proxy.html#a87680b64deb218fbd3c991fe36e45449',1,'tram::PoolProxy::pool("DecalComponent pool", COMPONENT_LIMIT_DECAL)'],['../classtram_1_1_pool_proxy.html#afd8b1fb3154ba576098996c425b8008b',1,'tram::PoolProxy::pool("LightComponent pool", COMPONENT_LIMIT_LIGHT)'],['../classtram_1_1_pool_proxy.html#ab583e428b551012df0fe5d86e0787c23',1,'tram::PoolProxy::pool("ParticleComponent pool", COMPONENT_LIMIT_PARTICLE)'],['../classtram_1_1_pool_proxy.html#af892e1cc1c5b55d1de83b23a7f6acd7a',1,'tram::PoolProxy::pool("PhysicsComponent pool", COMPONENT_LIMIT_PHYSICS)'],['../classtram_1_1_pool_proxy.html#adec8cf47dae0c2c7dbcac50b62c4b4ce',1,'tram::PoolProxy::pool("PlayerComponent pool", COMPONENT_LIMIT_PLAYER)'],['../classtram_1_1_pool_proxy.html#a17815902e003552d6c1843f655b50606',1,'tram::PoolProxy::pool("RenderComponent pool", COMPONENT_LIMIT_RENDER)'],['../classtram_1_1_pool_proxy.html#abb5ee08a098040647676affc6c7f23de',1,'tram::PoolProxy::pool("Ext::Kitchensink::Faction Pool", FACTION_COUNT)'],['../classtram_1_1_pool_proxy.html#a12f234e6bf9f9403ee4efb999a2a2a09',1,'tram::PoolProxy::pool("Ext::Kitchensink::AttributeContainer Pool", ATTRIBUTE_CONTAINER_COUNT)'],['../classtram_1_1_pool_proxy.html#a6b9f8209e7c3b8eea4675f06acb65b0c',1,'tram::PoolProxy::pool("AnimationTable pool", EXT_KITCHENSINK_ANIMATIONTABLE_LIMIT)'],['../classtram_1_1_pool_proxy.html#af9f3b37524524346fdc58b79b3b0a148',1,'tram::PoolProxy::pool("ai_agent_list pool", 100)'],['../classtram_1_1_pool_proxy.html#a605e61fa1ef7ff0fa4ca51f4a351bb09',1,'tram::PoolProxy::pool("TriggerComponent pool", COMPONENT_LIMIT_TRIGGER)'],['../classtram_1_1_pool_proxy.html#a549d35aabd0230f175b2f78681c55408',1,'tram::PoolProxy::pool("SpriteComponent pool", COMPONENT_LIMIT_SPRITE)'],['../classtram_1_1_pool_proxy.html#ae60e28486ed4752fdb1c22baa4ea81b2',1,'tram::PoolProxy::pool("Ext::Kitchensink::Character Pool", CHARACTER_COUNT)'],['../classtram_1_1_pool_proxy.html#ab758ff8edc0858676caf8051a77d8408',1,'tram::PoolProxy::pool("Ext::Kitchensink::CharacterClass Pool", CLASS_COUNT)'],['../classtram_1_1_pool_proxy.html#ae158206e9edb5f68852a8b43972f3991',1,'tram::PoolProxy::pool("SoundTable pool", EXT_KITCHENSINK_SOUNDTABLE_LIMIT)'],['../classtram_1_1_pool_proxy.html#af8e4dd501fdaba304cc75fab9d0122f9',1,'tram::PoolProxy::pool("navmesh pool", 100)'],['../classtram_1_1_pool_proxy.html#a9ccc00cffda0d7145eafd0200ce096e5',1,'tram::PoolProxy::pool("Path pool", RESOURCE_LIMIT_PATH)'],['../classtram_1_1_pool_proxy.html#a723d321955d74db634af0e4ab271b83c',1,'tram::PoolProxy::pool("worldcelltransition pool", WORLDCELL_TRANSITION_LIMIT)'],['../classtram_1_1_pool_proxy.html#ab9460e6c8698b9c98ce783f162632258',1,'tram::PoolProxy::pool("Worldcell pool", WORLDCELL_LIMIT)'],['../classtram_1_1_pool_proxy.html#a8c9901a9a4d72574c76864140ba646f6',1,'tram::PoolProxy::pool("GLDrawListEntry pool", 1000)'],['../classtram_1_1_pool_proxy.html#a120a8282dfe1622b41d36f70ff239fc8',1,'tram::PoolProxy::pool("GLLight pool", COMPONENT_LIMIT_LIGHT, {tram::Render::API::GLLight{}})'],['../classtram_1_1_pool_proxy.html#aa4966ced53d457eaf4047aada15c0ddd',1,'tram::PoolProxy::pool("GLMaterial pool", RESOURCE_LIMIT_MATERIAL)']]], ['poolptr_32',['PoolPtr',['../classtram_1_1_pool_ptr.html#adffa17bd2f9d7fd2242ed255a7832324',1,'tram::PoolPtr']]], ['pop_33',['pop',['../classtram_1_1_queue.html#aa2211c6ebb109da351fbc179fa8ea03b',1,'tram::Queue::pop()'],['../classtram_1_1_stack.html#a8c5bca889246272bd6fbc0789e7a2841',1,'tram::Stack::pop()']]], ['pop_34',['Pop',['../classtram_1_1_ext_1_1_menu_1_1_menu.html#a06f962abc8aeb9e7782cbd637d56f0fd',1,'tram::Ext::Menu::Menu']]], ['popframe_35',['PopFrame',['../namespacetram_1_1_g_u_i.html#a76a6d727998bc4ad99cd754ca2cf54a0',1,'tram::GUI']]], ['popframekeepcursor_36',['PopFrameKeepCursor',['../namespacetram_1_1_g_u_i.html#a53e9477d97918587d29a2b44a378dcbf',1,'tram::GUI']]], ['positionrotationscaletomatrix_37',['PositionRotationScaleToMatrix',['../namespacetram.html#a9d150b4b732715b4989afe480bb3ef98',1,'tram']]], ['positionrotationtomatrix_38',['PositionRotationToMatrix',['../namespacetram.html#ab488668dddf5085ed2f05fef803dba33',1,'tram']]], ['post_39',['Post',['../structtram_1_1_event.html#a2964632c82d23cc106fb57530210c774',1,'tram::Event']]], ['print_40',['Print',['../structtram_1_1_a_a_b_b_tree_1_1_node.html#aef471e23e1400e7c4f466576552a5146',1,'tram::AABBTree::Node']]], ['process_41',['Process',['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_package.html#aefe04093df4daf73c85b271413d19868',1,'tram::Ext::Kitchensink::AIPackage']]], ['project_42',['Project',['../namespacetram_1_1_render.html#a67eb4708222066d5a516c5eff9a14fa7',1,'tram::Render::Project()'],['../classtram_1_1_path_follower.html#ada75b25602de0ccf13cc6a3c46885132',1,'tram::PathFollower::Project()']]], ['projectinverse_43',['ProjectInverse',['../namespacetram_1_1_render.html#afe4a18573155f61186484e55955c6dac',1,'tram::Render']]], ['projectline_44',['ProjectLine',['../namespacetram.html#afb93166d174dd8e63b4ea02836446b11',1,'tram']]], ['property_45',['Property',['../structtram_1_1_settings_1_1_property.html#a9ac260b077617f945253284397723dad',1,'tram::Settings::Property::Property(const T &value)'],['../structtram_1_1_settings_1_1_property.html#ab24720ae7aee4b0f1018012b553096a3',1,'tram::Settings::Property::Property(std::initializer_list< value_t > values)']]], ['push_46',['push',['../classtram_1_1_stack.html#af88a0407075f961d55e94de1f4ee9588',1,'tram::Stack::push()'],['../classtram_1_1_queue.html#a85bfdb354ca6e34201d6554bc541bfe1',1,'tram::Queue::push()']]], ['push_47',['Push',['../classtram_1_1_ext_1_1_menu_1_1_menu.html#afaf4c154f0f256b684b9ca9a7d7f057f',1,'tram::Ext::Menu::Menu::Push()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html#aa8590467f7d1239c7e12e07a63ee0012',1,'tram::Ext::Kitchensink::AIAgent::Push()'],['../classtram_1_1_physics_component.html#af5569e651b77b56a659f4b3a988f04b1',1,'tram::PhysicsComponent::Push(vec3 direction, vec3 local_position)'],['../classtram_1_1_physics_component.html#a056cae53c34b56b074f364251ca545e4',1,'tram::PhysicsComponent::Push(vec3 direction)'],['../classtram_1_1_f_p_s_controller_component.html#a178afe3b43f00f0a289a19d2fe323d9c',1,'tram::FPSControllerComponent::Push()'],['../classtram_1_1_controller_component.html#a85d0688b2477652353b92a7662fdc36a',1,'tram::ControllerComponent::Push()'],['../classtram_1_1_raycast_controller_component.html#a8780bc5e7bb5938ba85b7a2ae950dff4',1,'tram::RaycastControllerComponent::Push()']]], ['pushframe_48',['PushFrame',['../namespacetram_1_1_g_u_i.html#abbe4fc88597f2b5171c105e74bcf8301',1,'tram::GUI']]], ['pushframerelative_49',['PushFrameRelative',['../namespacetram_1_1_g_u_i.html#a4d59dd004d2a1ae7aed485247d674dc6',1,'tram::GUI']]], ['pushframerelativekeepcursor_50',['PushFrameRelativeKeepCursor',['../namespacetram_1_1_g_u_i.html#a1cde426a98964d4f4780ff78b9663b18',1,'tram::GUI']]], ['pushoverride_51',['PushOverride',['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html#a89181f116b73c484e5b57dbd2152a7c2',1,'tram::Ext::Kitchensink::AIAgent']]], ['pushrigidbody_52',['PushRigidbody',['../namespacetram_1_1_physics_1_1_a_p_i.html#a7b6a5a76cb66998131a863a64989aa39',1,'tram::Physics::API::PushRigidbody(rigidbody_t rigidbody, vec3 direction)'],['../namespacetram_1_1_physics_1_1_a_p_i.html#a04c616c8fd1cabe3561bc91f4a084392',1,'tram::Physics::API::PushRigidbody(rigidbody_t rigidbody, vec3 direction, vec3 local)']]] ]; ================================================ FILE: docs/cppapi/search/namespaces_0.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/namespaces_0.js ================================================ var searchData= [ ['aabb_0',['AABB',['../namespacetram_1_1_render_1_1_a_a_b_b.html',1,'tram::Render']]], ['api_1',['API',['../namespacetram_1_1_audio_1_1_a_p_i.html',1,'tram::Audio::API'],['../namespacetram_1_1_physics_1_1_a_p_i.html',1,'tram::Physics::API'],['../namespacetram_1_1_render_1_1_a_p_i.html',1,'tram::Render::API']]], ['async_2',['Async',['../namespacetram_1_1_async.html',1,'tram']]], ['audio_3',['Audio',['../namespacetram_1_1_audio.html',1,'tram']]], ['camera_4',['Camera',['../namespacetram_1_1_ext_1_1_camera.html',1,'tram::Ext']]], ['core_5',['Core',['../namespacetram_1_1_core.html',1,'tram']]], ['ext_6',['Ext',['../namespacetram_1_1_ext.html',1,'tram']]], ['gui_7',['GUI',['../namespacetram_1_1_g_u_i.html',1,'tram']]], ['implementation_8',['implementation',['../namespacetram_1_1implementation.html',1,'tram']]], ['input_9',['Input',['../namespacetram_1_1_platform_1_1_input.html',1,'tram::Platform']]], ['kitchensink_10',['Kitchensink',['../namespacetram_1_1_ext_1_1_kitchensink.html',1,'tram::Ext']]], ['language_11',['Language',['../namespacetram_1_1_language.html',1,'tram']]], ['lighttree_12',['LightTree',['../namespacetram_1_1_render_1_1_light_tree.html',1,'tram::Render']]], ['loader_13',['Loader',['../namespacetram_1_1_loader.html',1,'tram']]], ['lua_14',['Lua',['../namespacetram_1_1_ext_1_1_scripting_1_1_lua.html',1,'tram::Ext::Scripting']]], ['menu_15',['Menu',['../namespacetram_1_1_ext_1_1_menu.html',1,'tram::Ext::Menu'],['../namespacetram_1_1_ext_1_1_menu_1_1_menu.html',1,'tram::Ext::Menu::Menu']]], ['physics_16',['Physics',['../namespacetram_1_1_physics.html',1,'tram']]], ['platform_17',['Platform',['../namespacetram_1_1_platform.html',1,'tram']]], ['render_18',['Render',['../namespacetram_1_1_render.html',1,'tram']]], ['scenetree_19',['SceneTree',['../namespacetram_1_1_render_1_1_scene_tree.html',1,'tram::Render']]], ['script_20',['Script',['../namespacetram_1_1_script.html',1,'tram']]], ['scriptabletype_21',['ScriptableType',['../namespacetram_1_1_scriptable_type.html',1,'tram']]], ['scripting_22',['Scripting',['../namespacetram_1_1_ext_1_1_scripting.html',1,'tram::Ext']]], ['settings_23',['Settings',['../namespacetram_1_1_settings.html',1,'tram']]], ['spatial_24',['Spatial',['../namespacetram_1_1_audio_1_1_spatial.html',1,'tram::Audio']]], ['stats_25',['Stats',['../namespacetram_1_1_stats.html',1,'tram']]], ['system_26',['System',['../namespacetram_1_1_system.html',1,'tram']]], ['tram_27',['tram',['../namespacetram.html',1,'']]], ['ui_28',['UI',['../namespacetram_1_1_u_i.html',1,'tram']]], ['window_29',['Window',['../namespacetram_1_1_platform_1_1_window.html',1,'tram::Platform']]] ]; ================================================ FILE: docs/cppapi/search/nomatches.html ================================================
    No Matches
    ================================================ FILE: docs/cppapi/search/pages_0.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/pages_0.js ================================================ var searchData= [ ['deprecated_20list_0',['Deprecated List',['../deprecated.html',1,'']]] ]; ================================================ FILE: docs/cppapi/search/pages_1.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/pages_1.js ================================================ var searchData= [ ['todo_20list_0',['Todo List',['../todo.html',1,'']]], ['tramway_20sdk_1',['Tramway SDK',['../index.html',1,'']]] ]; ================================================ FILE: docs/cppapi/search/properties_0.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/properties_0.js ================================================ var searchData= [ ['property_5fmetal_0',['PROPERTY_METAL',['../classtram_1_1_render_1_1_material.html#a7e3b38b78a8cf0bb37f2bf22281d7928',1,'tram::Render::Material']]] ]; ================================================ FILE: docs/cppapi/search/related_0.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/related_0.js ================================================ var searchData= [ ['animationtable_0',['AnimationTable',['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_state_component.html#a6aa4df8a5973b3bb06701c7e430ba123',1,'tram::Ext::Kitchensink::AnimationStateComponent']]], ['finishresources_1',['FinishResources',['../classtram_1_1_entity_component.html#a8f3324eae61258fe34ef99f2b994ac02',1,'tram::EntityComponent']]] ]; ================================================ FILE: docs/cppapi/search/related_1.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/related_1.js ================================================ var searchData= [ ['controllercomponent_0',['ControllerComponent',['../classtram_1_1_f_p_s_controller_component.html#a9fd3c58ec8707c5995232f089e6ef91b',1,'tram::FPSControllerComponent::ControllerComponent()'],['../classtram_1_1_raycast_controller_component.html#a9fd3c58ec8707c5995232f089e6ef91b',1,'tram::RaycastControllerComponent::ControllerComponent()']]] ]; ================================================ FILE: docs/cppapi/search/related_2.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/related_2.js ================================================ var searchData= [ ['faction_0',['Faction',['../classtram_1_1_ext_1_1_kitchensink_1_1_character.html#abd70d3fa6043bc857bf6bc4d82805737',1,'tram::Ext::Kitchensink::Character']]] ]; ================================================ FILE: docs/cppapi/search/related_3.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/related_3.js ================================================ var searchData= [ ['operator_21_3d_0',['operator!=',['../structtram_1_1_pool_1_1iterator.html#a55a8ee0e80dad1a7da9d751c25bc0386',1,'tram::Pool::iterator']]], ['operator_3d_3d_1',['operator==',['../structtram_1_1_pool_1_1iterator.html#a81d10d7799462c7ca5e7cf19119ca356',1,'tram::Pool::iterator']]] ]; ================================================ FILE: docs/cppapi/search/related_4.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/related_4.js ================================================ var searchData= [ ['pathfollower_0',['PathFollower',['../classtram_1_1_path.html#a7c5bae106d82b3014171a0347a70d2a8',1,'tram::Path']]], ['pool_1',['Pool',['../classtram_1_1_animation_component.html#a49d9babe42ba7f509bcff47a95b2c110',1,'tram::AnimationComponent::Pool()'],['../classtram_1_1_f_p_s_controller_component.html#a49d9babe42ba7f509bcff47a95b2c110',1,'tram::FPSControllerComponent::Pool()'],['../classtram_1_1_raycast_controller_component.html#a49d9babe42ba7f509bcff47a95b2c110',1,'tram::RaycastControllerComponent::Pool()']]] ]; ================================================ FILE: docs/cppapi/search/related_5.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/related_5.js ================================================ var searchData= [ ['resourceproxy_0',['ResourceProxy',['../classtram_1_1_entity_component.html#aee6f37c71b1449f8cbbc9522dedbea6d',1,'tram::EntityComponent']]] ]; ================================================ FILE: docs/cppapi/search/related_6.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/related_6.js ================================================ var searchData= [ ['sprite_0',['Sprite',['../classtram_1_1_render_1_1_material.html#a3292175d54d93d126ba2829249316344',1,'tram::Render::Material']]] ]; ================================================ FILE: docs/cppapi/search/related_7.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/related_7.js ================================================ var searchData= [ ['pool_0',['Pool',['../classtram_1_1_audio_1_1_sound.html#a6138aa72cd0b6a55be22d74ab84c65d6',1,'tram::Audio::Sound']]] ]; ================================================ FILE: docs/cppapi/search/related_8.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/related_8.js ================================================ var searchData= [ ['valueptr_0',['ValuePtr',['../classtram_1_1_value.html#a32a3f364acb79fb996044d7d31bc994e',1,'tram::Value']]] ]; ================================================ FILE: docs/cppapi/search/related_9.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/related_9.js ================================================ var searchData= [ ['worldcell_0',['WorldCell',['../classtram_1_1_entity.html#a84136aa23993ba45f0745a9d9488ab54',1,'tram::Entity::WorldCell()'],['../classtram_1_1_transition.html#a84136aa23993ba45f0745a9d9488ab54',1,'tram::Transition::WorldCell()']]] ]; ================================================ FILE: docs/cppapi/search/search.css ================================================ /*---------------- Search Box */ #MSearchBox { white-space : nowrap; background: white; border-radius: 0.65em; box-shadow: inset 0.5px 0.5px 3px 0px #555; z-index: 102; } #MSearchBox .left { display: inline-block; vertical-align: middle; height: 1.4em; } #MSearchSelect { display: inline-block; vertical-align: middle; height: 19px; padding: 0 0 0 0.3em; margin: 0; } #MSearchField { display: inline-block; vertical-align: middle; width: 7.5em; height: 19px; margin: 0 0.15em; padding: 0; line-height: 1em; border:none; color: #909090; outline: none; font-family: Arial, Verdana, sans-serif; -webkit-border-radius: 0px; border-radius: 0px; background: none; } @media(hover: none) { /* to avoid zooming on iOS */ #MSearchField { font-size: 16px; } } #MSearchBox .right { display: inline-block; vertical-align: middle; width: 1.4em; height: 1.4em; } #MSearchClose { display: none; font-size: inherit; background : none; border: none; margin: 0; padding: 0; outline: none; } #MSearchCloseImg { height: 1.4em; padding: 0.3em; margin: 0; } .MSearchBoxActive #MSearchField { color: #000000; } #main-menu > li:last-child { /* This
  • object is the parent of the search bar */ display: flex; justify-content: center; align-items: center; height: 36px; margin-right: 1em; } /*---------------- Search filter selection */ #MSearchSelectWindow { display: none; position: absolute; left: 0; top: 0; border: 1px solid #90A5CE; background-color: #F9FAFC; z-index: 10001; padding-top: 4px; padding-bottom: 4px; -moz-border-radius: 4px; -webkit-border-top-left-radius: 4px; -webkit-border-top-right-radius: 4px; -webkit-border-bottom-left-radius: 4px; -webkit-border-bottom-right-radius: 4px; -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); } .SelectItem { font: 8pt Arial, Verdana, sans-serif; padding-left: 2px; padding-right: 12px; border: 0px; } span.SelectionMark { margin-right: 4px; font-family: monospace; outline-style: none; text-decoration: none; } a.SelectItem { display: block; outline-style: none; color: #000000; text-decoration: none; padding-left: 6px; padding-right: 12px; } a.SelectItem:focus, a.SelectItem:active { color: #000000; outline-style: none; text-decoration: none; } a.SelectItem:hover { color: #FFFFFF; background-color: #3D578C; outline-style: none; text-decoration: none; cursor: pointer; display: block; } /*---------------- Search results window */ iframe#MSearchResults { /*width: 60ex;*/ height: 15em; } #MSearchResultsWindow { display: none; position: absolute; left: 0; top: 0; border: 1px solid #000; background-color: #EEF1F7; z-index:10000; } /* ----------------------------------- */ #SRIndex { clear:both; padding-bottom: 15px; } .SREntry { font-size: 10pt; padding-left: 1ex; } .SRPage .SREntry { font-size: 8pt; padding: 1px 5px; } body.SRPage { margin: 5px 2px; } .SRChildren { padding-left: 3ex; padding-bottom: .5em } .SRPage .SRChildren { display: none; } .SRSymbol { font-weight: bold; color: #425E97; font-family: Arial, Verdana, sans-serif; text-decoration: none; outline: none; } a.SRScope { display: block; color: #425E97; font-family: Arial, Verdana, sans-serif; text-decoration: none; outline: none; } a.SRSymbol:focus, a.SRSymbol:active, a.SRScope:focus, a.SRScope:active { text-decoration: underline; } span.SRScope { padding-left: 4px; font-family: Arial, Verdana, sans-serif; } .SRPage .SRStatus { padding: 2px 5px; font-size: 8pt; font-style: italic; font-family: Arial, Verdana, sans-serif; } .SRResult { display: none; } div.searchresults { margin-left: 10px; margin-right: 10px; } /*---------------- External search page results */ .searchresult { background-color: #F0F3F8; } .pages b { color: white; padding: 5px 5px 3px 5px; background-image: url("../tab_a.png"); background-repeat: repeat-x; text-shadow: 0 1px 1px #000000; } .pages { line-height: 17px; margin-left: 4px; text-decoration: none; } .hl { font-weight: bold; } #searchresults { margin-bottom: 20px; } .searchpages { margin-top: 10px; } ================================================ FILE: docs/cppapi/search/search.js ================================================ /* @licstart The following is the entire license notice for the JavaScript code in this file. The MIT License (MIT) Copyright (C) 1997-2020 by Dimitri van Heesch Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @licend The above is the entire license notice for the JavaScript code in this file */ function convertToId(search) { var result = ''; for (i=0;i do a search { this.Search(); } } this.OnSearchSelectKey = function(evt) { var e = (evt) ? evt : window.event; // for IE if (e.keyCode==40 && this.searchIndex0) // Up { this.searchIndex--; this.OnSelectItem(this.searchIndex); } else if (e.keyCode==13 || e.keyCode==27) { this.OnSelectItem(this.searchIndex); this.CloseSelectionWindow(); this.DOMSearchField().focus(); } return false; } // --------- Actions // Closes the results window. this.CloseResultsWindow = function() { this.DOMPopupSearchResultsWindow().style.display = 'none'; this.DOMSearchClose().style.display = 'none'; this.Activate(false); } this.CloseSelectionWindow = function() { this.DOMSearchSelectWindow().style.display = 'none'; } // Performs a search. this.Search = function() { this.keyTimeout = 0; // strip leading whitespace var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); var code = searchValue.toLowerCase().charCodeAt(0); var idxChar = searchValue.substr(0, 1).toLowerCase(); if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair { idxChar = searchValue.substr(0, 2); } var resultsPage; var resultsPageWithSearch; var hasResultsPage; var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); if (idx!=-1) { var hexCode=idx.toString(16); resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension; resultsPageWithSearch = resultsPage+'?'+escape(searchValue); hasResultsPage = true; } else // nothing available for this search term { resultsPage = this.resultsPath + '/nomatches' + this.extension; resultsPageWithSearch = resultsPage; hasResultsPage = false; } window.frames.MSearchResults.location = resultsPageWithSearch; var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); if (domPopupSearchResultsWindow.style.display!='block') { var domSearchBox = this.DOMSearchBox(); this.DOMSearchClose().style.display = 'inline-block'; var domPopupSearchResults = this.DOMPopupSearchResults(); var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; domPopupSearchResultsWindow.style.display = 'block'; left -= domPopupSearchResults.offsetWidth; var maxWidth = document.body.clientWidth; var width = 400; if (left<10) left=10; if (width+left+8>maxWidth) width=maxWidth-left-8; domPopupSearchResultsWindow.style.top = top + 'px'; domPopupSearchResultsWindow.style.left = left + 'px'; domPopupSearchResultsWindow.style.width = width + 'px'; } this.lastSearchValue = searchValue; this.lastResultsPage = resultsPage; } // -------- Activation Functions // Activates or deactivates the search panel, resetting things to // their default values if necessary. this.Activate = function(isActive) { if (isActive || // open it this.DOMPopupSearchResultsWindow().style.display == 'block' ) { this.DOMSearchBox().className = 'MSearchBoxActive'; var searchField = this.DOMSearchField(); if (searchField.value == this.searchLabel) // clear "Search" term upon entry { searchField.value = ''; this.searchActive = true; } } else if (!isActive) // directly remove the panel { this.DOMSearchBox().className = 'MSearchBoxInactive'; this.DOMSearchField().value = this.searchLabel; this.searchActive = false; this.lastSearchValue = '' this.lastResultsPage = ''; } } } // ----------------------------------------------------------------------- // The class that handles everything on the search results page. function SearchResults(name) { // The number of matches from the last run of . this.lastMatchCount = 0; this.lastKey = 0; this.repeatOn = false; // Toggles the visibility of the passed element ID. this.FindChildElement = function(id) { var parentElement = document.getElementById(id); var element = parentElement.firstChild; while (element && element!=parentElement) { if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') { return element; } if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) { element = element.firstChild; } else if (element.nextSibling) { element = element.nextSibling; } else { do { element = element.parentNode; } while (element && element!=parentElement && !element.nextSibling); if (element && element!=parentElement) { element = element.nextSibling; } } } } this.Toggle = function(id) { var element = this.FindChildElement(id); if (element) { if (element.style.display == 'block') { element.style.display = 'none'; } else { element.style.display = 'block'; } } } // Searches for the passed string. If there is no parameter, // it takes it from the URL query. // // Always returns true, since other documents may try to call it // and that may or may not be possible. this.Search = function(search) { if (!search) // get search word from URL { search = window.location.search; search = search.substring(1); // Remove the leading '?' search = unescape(search); } search = search.replace(/^ +/, ""); // strip leading spaces search = search.replace(/ +$/, ""); // strip trailing spaces search = search.toLowerCase(); search = convertToId(search); var resultRows = document.getElementsByTagName("div"); var matches = 0; var i = 0; while (i < resultRows.length) { var row = resultRows.item(i); if (row.className == "SRResult") { var rowMatchName = row.id.toLowerCase(); rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' if (search.length<=rowMatchName.length && rowMatchName.substr(0, search.length)==search) { row.style.display = 'block'; matches++; } else { row.style.display = 'none'; } } i++; } document.getElementById("Searching").style.display='none'; if (matches == 0) // no results { document.getElementById("NoMatches").style.display='block'; } else // at least one result { document.getElementById("NoMatches").style.display='none'; } this.lastMatchCount = matches; return true; } // return the first item with index index or higher that is visible this.NavNext = function(index) { var focusItem; while (1) { var focusName = 'Item'+index; focusItem = document.getElementById(focusName); if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { break; } else if (!focusItem) // last element { break; } focusItem=null; index++; } return focusItem; } this.NavPrev = function(index) { var focusItem; while (1) { var focusName = 'Item'+index; focusItem = document.getElementById(focusName); if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { break; } else if (!focusItem) // last element { break; } focusItem=null; index--; } return focusItem; } this.ProcessKeys = function(e) { if (e.type == "keydown") { this.repeatOn = false; this.lastKey = e.keyCode; } else if (e.type == "keypress") { if (!this.repeatOn) { if (this.lastKey) this.repeatOn = true; return false; // ignore first keypress after keydown } } else if (e.type == "keyup") { this.lastKey = 0; this.repeatOn = false; } return this.lastKey!=0; } this.Nav = function(evt,itemIndex) { var e = (evt) ? evt : window.event; // for IE if (e.keyCode==13) return true; if (!this.ProcessKeys(e)) return false; if (this.lastKey==38) // Up { var newIndex = itemIndex-1; var focusItem = this.NavPrev(newIndex); if (focusItem) { var child = this.FindChildElement(focusItem.parentNode.parentNode.id); if (child && child.style.display == 'block') // children visible { var n=0; var tmpElem; while (1) // search for last child { tmpElem = document.getElementById('Item'+newIndex+'_c'+n); if (tmpElem) { focusItem = tmpElem; } else // found it! { break; } n++; } } } if (focusItem) { focusItem.focus(); } else // return focus to search field { parent.document.getElementById("MSearchField").focus(); } } else if (this.lastKey==40) // Down { var newIndex = itemIndex+1; var focusItem; var item = document.getElementById('Item'+itemIndex); var elem = this.FindChildElement(item.parentNode.parentNode.id); if (elem && elem.style.display == 'block') // children visible { focusItem = document.getElementById('Item'+itemIndex+'_c0'); } if (!focusItem) focusItem = this.NavNext(newIndex); if (focusItem) focusItem.focus(); } else if (this.lastKey==39) // Right { var item = document.getElementById('Item'+itemIndex); var elem = this.FindChildElement(item.parentNode.parentNode.id); if (elem) elem.style.display = 'block'; } else if (this.lastKey==37) // Left { var item = document.getElementById('Item'+itemIndex); var elem = this.FindChildElement(item.parentNode.parentNode.id); if (elem) elem.style.display = 'none'; } else if (this.lastKey==27) // Escape { parent.searchBox.CloseResultsWindow(); parent.document.getElementById("MSearchField").focus(); } else if (this.lastKey==13) // Enter { return true; } return false; } this.NavChild = function(evt,itemIndex,childIndex) { var e = (evt) ? evt : window.event; // for IE if (e.keyCode==13) return true; if (!this.ProcessKeys(e)) return false; if (this.lastKey==38) // Up { if (childIndex>0) { var newIndex = childIndex-1; document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); } else // already at first child, jump to parent { document.getElementById('Item'+itemIndex).focus(); } } else if (this.lastKey==40) // Down { var newIndex = childIndex+1; var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); if (!elem) // last child, jump to parent next parent { elem = this.NavNext(itemIndex+1); } if (elem) { elem.focus(); } } else if (this.lastKey==27) // Escape { parent.searchBox.CloseResultsWindow(); parent.document.getElementById("MSearchField").focus(); } else if (this.lastKey==13) // Enter { return true; } return false; } } function setKeyActions(elem,action) { elem.setAttribute('onkeydown',action); elem.setAttribute('onkeypress',action); elem.setAttribute('onkeyup',action); } function setClassAttr(elem,attr) { elem.setAttribute('class',attr); elem.setAttribute('className',attr); } function createResults() { var results = document.getElementById("SRResults"); for (var e=0; e
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/typedefs_0.js ================================================ var searchData= [ ['aabbleaf_5ft_0',['aabbleaf_t',['../namespacetram_1_1_render.html#ab19b566afd13e36e1b377bd19adab144',1,'tram::Render']]], ['ai_5fpackage_5fconstr_1',['ai_package_constr',['../namespacetram_1_1_ext_1_1_kitchensink.html#a7ed49c241e07b037e40bcb940995e442',1,'tram::Ext::Kitchensink']]] ]; ================================================ FILE: docs/cppapi/search/typedefs_1.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/typedefs_1.js ================================================ var searchData= [ ['col_5fcallback_0',['col_callback',['../namespacetram_1_1_physics_1_1_a_p_i.html#acd529fe6abcfcd4c2e82d455cddee7f7',1,'tram::Physics::API']]], ['collision_5fcallback_1',['collision_callback',['../namespacetram.html#a0ec6f1beb2db1148bf277a12019a7ac0',1,'tram']]], ['color_5ft_2',['color_t',['../namespacetram_1_1_render.html#a32fb4b5bd9e12e48f08e6ff4ce8817b8',1,'tram::Render']]] ]; ================================================ FILE: docs/cppapi/search/typedefs_2.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/typedefs_2.js ================================================ var searchData= [ ['entity_5fclear_0',['entity_clear',['../namespacetram.html#acb6f2c041e69a847713e8d29f66dc58b',1,'tram']]], ['entity_5fmake_1',['entity_make',['../namespacetram.html#a5f7e406660923fb9a2cc0a8628fa0c3d',1,'tram']]], ['event_5ft_2',['event_t',['../namespacetram.html#a0183b475d47925143ca46259ec594d90',1,'tram']]] ]; ================================================ FILE: docs/cppapi/search/typedefs_3.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/typedefs_3.js ================================================ var searchData= [ ['filter_5fcallback_0',['filter_callback',['../namespacetram.html#a2ffbf64ab17d509c8a5dc283f437a5b7',1,'tram']]], ['font_5ft_1',['font_t',['../namespacetram_1_1_g_u_i.html#ad72e4051d38000777cac376d29fc18a1',1,'tram::GUI']]] ]; ================================================ FILE: docs/cppapi/search/typedefs_4.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/typedefs_4.js ================================================ var searchData= [ ['get_5ftrf_5fcallback_0',['get_trf_callback',['../namespacetram_1_1_physics_1_1_a_p_i.html#a36463524ce5c3d5ee5d8c9bf2d4258bd',1,'tram::Physics::API']]], ['glyph_5ft_1',['glyph_t',['../namespacetram_1_1_g_u_i.html#afecdfd821a1e89c4d62d0f8b420ca33a',1,'tram::GUI']]] ]; ================================================ FILE: docs/cppapi/search/typedefs_5.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/typedefs_5.js ================================================ var searchData= [ ['id_5ft_0',['id_t',['../namespacetram.html#a25ae39989bce3dab64401c3956be9c03',1,'tram']]], ['item_5faction_5ffunc_1',['item_action_func',['../namespacetram_1_1_ext_1_1_kitchensink.html#a4b23e475cb12c9bd604bb44cc06e52d8',1,'tram::Ext::Kitchensink']]], ['ivec3_2',['ivec3',['../namespacetram.html#a376f6f34fd81bba7071907b5226432f9',1,'tram']]], ['ivec4_3',['ivec4',['../namespacetram.html#a1632687848b1fc76b67d96646ef5a691',1,'tram']]] ]; ================================================ FILE: docs/cppapi/search/typedefs_6.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/typedefs_6.js ================================================ var searchData= [ ['keyboardaction_5ft_0',['keyboardaction_t',['../namespacetram_1_1_u_i.html#a7127b8ce6c937f44455685b8ec1f0461',1,'tram::UI']]] ]; ================================================ FILE: docs/cppapi/search/typedefs_7.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/typedefs_7.js ================================================ var searchData= [ ['layer_5ft_0',['layer_t',['../namespacetram_1_1_render.html#a92b94ac310d4c8df9a4294518ffd75c8',1,'tram::Render']]], ['listener_5ft_1',['listener_t',['../namespacetram.html#abc1aacd663943b92d06f10950a9f10d0',1,'tram']]] ]; ================================================ FILE: docs/cppapi/search/typedefs_8.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/typedefs_8.js ================================================ var searchData= [ ['mat2_0',['mat2',['../namespacetram.html#a1449f767374f220889ec5253470ac9d9',1,'tram']]], ['mat4_1',['mat4',['../namespacetram.html#aa105cf31ac2e470934e6b0827a14d942',1,'tram']]], ['materialtype_5ft_2',['materialtype_t',['../namespacetram_1_1_render.html#a9be8283c1665f7d42c97367d857d43cc',1,'tram::Render']]], ['message_5ft_3',['message_t',['../namespacetram.html#a2d629e975ff280fbd5d11c40edb519f0',1,'tram']]] ]; ================================================ FILE: docs/cppapi/search/typedefs_9.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/typedefs_9.js ================================================ var searchData= [ ['name_5ft_0',['name_t',['../namespacetram.html#ad77b577436f476438699a1c4da9d549c',1,'tram']]], ['namecount_1',['NameCount',['../namespacetram_1_1_render.html#a5c915c417ac6870808de6e5dff23c287',1,'tram::Render']]], ['node_5fid_5ft_2',['node_id_t',['../namespacetram.html#ac0fd37b7041ae8a9df2990aab1946e4c',1,'tram']]] ]; ================================================ FILE: docs/cppapi/search/typedefs_a.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/typedefs_a.js ================================================ var searchData= [ ['poopproxy_0',['PoopProxy',['../namespacetram.html#a72cce72d3494bf0e132892a3735ac229',1,'tram']]] ]; ================================================ FILE: docs/cppapi/search/typedefs_b.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/typedefs_b.js ================================================ var searchData= [ ['quat_0',['quat',['../namespacetram.html#a6ba8befa39d714232ba6f05ade798893',1,'tram']]] ]; ================================================ FILE: docs/cppapi/search/typedefs_c.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/typedefs_c.js ================================================ var searchData= [ ['set_5ftrf_5fcallback_0',['set_trf_callback',['../namespacetram_1_1_physics_1_1_a_p_i.html#a8e2158a307c228002d615529011ac455',1,'tram::Physics::API']]], ['shaderflags_5ft_1',['shaderflags_t',['../namespacetram_1_1_render_1_1_a_p_i.html#adc040e3232e63f994c1e3c1d1579c976',1,'tram::Render::API']]], ['signal_5ft_2',['signal_t',['../namespacetram.html#a2efd897a3a954a002664292b5d6264d6',1,'tram']]], ['sphericalharmonic_5ft_3',['sphericalharmonic_t',['../namespacetram_1_1_render.html#adc772ee58f3700260f2f155f334fd6d5',1,'tram::Render']]], ['system_5ft_4',['system_t',['../namespacetram_1_1_system.html#a3480b59cb32a6f70ad1fce1626b64e40',1,'tram::System']]] ]; ================================================ FILE: docs/cppapi/search/typedefs_d.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/typedefs_d.js ================================================ var searchData= [ ['uvec3_0',['uvec3',['../namespacetram.html#a6302de3ebd59f9e8325c9d2f2752b78f',1,'tram']]], ['uvec4_1',['uvec4',['../namespacetram.html#ac9bd3cda50ab2180695b6e4bc8bddb74',1,'tram']]] ]; ================================================ FILE: docs/cppapi/search/typedefs_e.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/typedefs_e.js ================================================ var searchData= [ ['value_5ft_0',['value_t',['../namespacetram.html#a7d506d80abf93dd017a92dbcb169f9c4',1,'tram']]], ['valuearray_5ft_1',['valuearray_t',['../namespacetram.html#a9a399a2754b52b60de20e936546d0637',1,'tram']]], ['vec2_2',['vec2',['../namespacetram.html#a2d99e12b9721e0d27d105d40a52bbc49',1,'tram']]], ['vec3_3',['vec3',['../namespacetram.html#a632d9fcf54e995edd8c66e25cb7c1891',1,'tram']]], ['vec4_4',['vec4',['../namespacetram.html#a1d95095efd075f601cb4afe9ff24c93b',1,'tram']]], ['vertexformat_5ft_5',['vertexformat_t',['../namespacetram_1_1_render.html#a4e5691f40b84e848c0d9b19b285bf0e2',1,'tram::Render']]] ]; ================================================ FILE: docs/cppapi/search/variables_0.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/variables_0.js ================================================ var searchData= [ ['aabb_5fmax_0',['aabb_max',['../classtram_1_1_render_1_1_model.html#a030f9e0ab4d7afbaf589eb18e767c3a2',1,'tram::Render::Model::aabb_max()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#a4cd6d561d1c22dcbf7e81a7fc1b4e9ed',1,'tram::Render::API::GLDrawListEntry::aabb_max()']]], ['aabb_5fmin_1',['aabb_min',['../classtram_1_1_render_1_1_model.html#a743debf3087f34ef70b7b98d5d1d3e6c',1,'tram::Render::Model::aabb_min()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#a0d85b48d0b7d54b45de4f436571e40b0',1,'tram::Render::API::GLDrawListEntry::aabb_min()']]], ['aabb_5ftree_5fleaf_2',['aabb_tree_leaf',['../classtram_1_1_render_component.html#ae40a30e7729ab549faf072c9b0440ae5',1,'tram::RenderComponent']]], ['abbrv_3',['abbrv',['../struct__test__case.html#a99c028d2ac17e92affe9fec7483b98a6',1,'_test_case']]], ['action_4',['action',['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_topic.html#ab41b9820fb4c0943c7e564fc790cf636',1,'tram::Ext::Kitchensink::DialogTopic::action()'],['../structtram_1_1_u_i_1_1_key_binding.html#a891c15910a42f723bbc0db27e2dd3e41',1,'tram::UI::KeyBinding::action()']]], ['affected_5fvalue_5',['affected_value',['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute.html#a122e60f9dedb9ba701a35eceb8c82476',1,'tram::Ext::Kitchensink::Attribute']]], ['age_6',['age',['../structtram_1_1_particle_component_1_1_particle.html#a037670487eaab8302dfc4aff5dcaf9c1',1,'tram::ParticleComponent::Particle']]], ['air_5fvelocity_7',['air_velocity',['../classtram_1_1_raycast_controller_component.html#a762a880efb2b272fb8e19edac34c7893',1,'tram::RaycastControllerComponent']]], ['al_5fbuffer_5fcount_8',['al_buffer_count',['../structtram_1_1_audio_1_1audiobuffer__t.html#a6885d64a1de9cf00a1c92e833342717c',1,'tram::Audio::audiobuffer_t']]], ['al_5fbuffers_9',['al_buffers',['../structtram_1_1_audio_1_1audiobuffer__t.html#af57828b299513dfcf833b82c420376ad',1,'tram::Audio::audiobuffer_t']]], ['al_5fsource_10',['al_source',['../structtram_1_1_audio_1_1audiosource__t.html#a329f753b9c5fe9317e2bc22bc493b3c7',1,'tram::Audio::audiosource_t']]], ['allocated_5fsize_11',['allocated_size',['../classtram_1_1_stack_pool.html#aaeba247ccf78620d37bfb23ac812f123',1,'tram::StackPool']]], ['allocated_5fvertex_5fcount_12',['allocated_vertex_count',['../structtram_1_1_render_1_1_a_p_i_1_1_vertex_buffer_metadata.html#a05b3e968c350358dc7309eeb7cd76246',1,'tram::Render::API::VertexBufferMetadata']]], ['ambient_5fcolor_13',['ambient_color',['../structtram_1_1_render_1_1_a_p_i_1_1_layer_parameters.html#ad69fb09970588b36db1fd69a307211d6',1,'tram::Render::API::LayerParameters::ambient_color()'],['../namespacetram_1_1_render.html#a3789b74039f89d50409081cdc8fc1457',1,'tram::Render::ambient_color()']]], ['ambientcolor_14',['ambientColor',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#abbdd547abac3fec00f41c6fbf3879436',1,'tram::Render::API::ShaderUniformModelMatrices']]], ['anim_5fbframe_15',['anim_bframe',['../classtram_1_1_sprite_component.html#a60f9208d310ee25c0ae44d212b23a88c',1,'tram::SpriteComponent']]], ['anim_5fcount_16',['ANIM_COUNT',['../classtram_1_1_animation_component.html#ae44dc606d6f719e5a470fdc6ed013e27',1,'tram::AnimationComponent']]], ['anim_5ffinish_5fcallback_17',['anim_finish_callback',['../classtram_1_1_animation_component.html#abe657fb3e7986f8344a6a1aa5d1a40d7',1,'tram::AnimationComponent']]], ['anim_5fframe_18',['anim_frame',['../classtram_1_1_sprite_component.html#a88b7103d26803ae5ea1315648ef813e1',1,'tram::SpriteComponent']]], ['anim_5finfo_19',['anim_info',['../classtram_1_1_animation_component.html#a41874c91efb221e22ce606804aedf1c2',1,'tram::AnimationComponent']]], ['anim_5fisplaying_20',['anim_isplaying',['../classtram_1_1_sprite_component.html#af50cea976158bc2472c9df7cee551157',1,'tram::SpriteComponent']]], ['anim_5fplaying_21',['anim_playing',['../classtram_1_1_animation_component.html#a8cfc453f4f1a8e3d39ef58fd0ceb71e4',1,'tram::AnimationComponent']]], ['anim_5fspeed_22',['anim_speed',['../classtram_1_1_sprite_component.html#a94e1866fddd8e554075eb49016f924bf',1,'tram::SpriteComponent']]], ['animation_23',['animation',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state.html#af2f443e6c0e1f4195e88666fd512708d',1,'tram::Ext::Kitchensink::AnimState::animation()'],['../classtram_1_1_decoration.html#a9ed3fb5e8c71f3491fe57c843e0325e1',1,'tram::Decoration::animation()']]], ['animation_5fpool_24',['animation_pool',['../namespacetram_1_1_render.html#a4241295a3e7f28b70cfc9a4fa831903d',1,'tram::Render']]], ['animationcomponent_25',['animationcomponent',['../classtram_1_1_decoration.html#a24081b56bcc532c09441c1f4a71d0e12',1,'tram::Decoration']]], ['answer_26',['answer',['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_topic.html#a9210fb3d74cbf84d790863396b671a4b',1,'tram::Ext::Kitchensink::DialogTopic']]], ['approx_5fvram_5fusage_27',['approx_vram_usage',['../classtram_1_1_render_1_1_material.html#a10304337c81204bdcf59fb2ae03e9428',1,'tram::Render::Material::approx_vram_usage()'],['../classtram_1_1_render_1_1_model.html#a69f11a78aa41ff398b91ffde31efb2b7',1,'tram::Render::Model::approx_vram_usage()']]], ['armature_28',['armature',['../classtram_1_1_render_1_1_model.html#a7da36392dce1f4256a6ce67620501430',1,'tram::Render::Model']]], ['armature_5fbone_5fcount_29',['armature_bone_count',['../classtram_1_1_animation_component.html#a548e0d34bf1bb6b24a534b759b83ccd8',1,'tram::AnimationComponent']]], ['armature_5fbone_5fparents_30',['armature_bone_parents',['../classtram_1_1_animation_component.html#a61a263a46b3af801e91b0306f65bd5b8',1,'tram::AnimationComponent']]], ['armature_5fbones_31',['armature_bones',['../classtram_1_1_animation_component.html#a86100bcacc626be6040580f705248072',1,'tram::AnimationComponent']]], ['arrival_5fdirection_32',['arrival_direction',['../structtram_1_1_audio_1_1_spatial_1_1_path_tracing_result.html#aab4ef60ba584a8d10ab12d5fe2674b32',1,'tram::Audio::Spatial::PathTracingResult']]], ['attribute_33',['attribute',['../structtram_1_1_ext_1_1_kitchensink_1_1_effect.html#a22bd1353836cf3bde3fed6137a801617',1,'tram::Ext::Kitchensink::Effect::attribute()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_initial_attribute.html#a588b56210da3d6628ceb90e106684a08',1,'tram::Ext::Kitchensink::InitialAttribute::attribute()']]], ['attribute_5fcontainer_5fcount_34',['ATTRIBUTE_CONTAINER_COUNT',['../attributes_8cpp.html#a84627f70639f661d824e70f33c21021d',1,'attributes.cpp']]], ['attribute_5fcount_35',['attribute_count',['../structtram_1_1_render_1_1_vertex_definition.html#a40ed4f54909928aa59fd3de4f3c7f451',1,'tram::Render::VertexDefinition']]], ['attribute_5finfo_5fcount_36',['ATTRIBUTE_INFO_COUNT',['../attributes_8cpp.html#a9b8616fa5aa349f32551242738af8269',1,'attributes.cpp']]], ['attributes_37',['attributes',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a7ae02dc32f976f0cfe1b54c09f65d84b',1,'tram::Ext::Kitchensink::ItemClass::attributes()'],['../structtram_1_1_render_1_1_vertex_definition.html#a02fb890eb9d7bf33a5613bc6868ea9ae',1,'tram::Render::VertexDefinition::attributes()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container.html#a683cbb898b97a9d6e6d9ee800ea965a6',1,'tram::Ext::Kitchensink::AttributeContainer::attributes()']]], ['audio_38',['audio',['../classtram_1_1_sound.html#a934d998958463921ee96f604e7934a1b',1,'tram::Sound']]], ['audiobuffers_39',['audiobuffers',['../namespacetram_1_1_audio_1_1_spatial.html#a0220900672de1f44004ac3fbea75384e',1,'tram::Audio::Spatial']]], ['audiorenders_40',['audiorenders',['../namespacetram_1_1_audio_1_1_spatial.html#a1707c3651d829fc8dccf07265d990501',1,'tram::Audio::Spatial']]], ['audiosources_41',['audiosources',['../namespacetram_1_1_audio_1_1_spatial.html#a09a8fe4a1def9a9851bd0eb34988036f',1,'tram::Audio::Spatial']]], ['available_5fsize_42',['available_size',['../classtram_1_1_stack_pool.html#a72cd4ac04fad51347b627f2d894b75d8',1,'tram::StackPool']]], ['average_5fcount_43',['average_count',['../structtram_1_1_stats_1_1_system_stat.html#acf35b66321a2c018ca20c7a53c0c2ca3',1,'tram::Stats::SystemStat']]] ]; ================================================ FILE: docs/cppapi/search/variables_1.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/variables_1.js ================================================ var searchData= [ ['barycentric_0',['barycentric',['../structtram_1_1_render_1_1_a_p_i_1_1_clip_point.html#ac0a612c9c2e16b94104e01063987446a',1,'tram::Render::API::ClipPoint']]], ['base_5fattributes_1',['base_attributes',['../classtram_1_1_ext_1_1_kitchensink_1_1_character_class.html#a91bc67d549a53384a0b1aef0ced9fcd7',1,'tram::Ext::Kitchensink::CharacterClass']]], ['base_5fclass_2',['base_class',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a38235d74c6c43032f0f53e84df2e00e4',1,'tram::Ext::Kitchensink::ItemClass']]], ['base_5fclasses_3',['base_classes',['../classtram_1_1_ext_1_1_kitchensink_1_1_character_class.html#adb00f39ea738b0df3ad9648819a215d0',1,'tram::Ext::Kitchensink::CharacterClass']]], ['base_5ffactions_4',['base_factions',['../classtram_1_1_ext_1_1_kitchensink_1_1_character_class.html#a8d6ce94fb5780a54fe9fff4d03f1d057',1,'tram::Ext::Kitchensink::CharacterClass']]], ['base_5fpose_5',['base_pose',['../classtram_1_1_animation_component.html#af919af95bb7414728434643fcaeda10c',1,'tram::AnimationComponent']]], ['base_5ftype_6',['base_type',['../structtram_1_1_scriptable_type_1_1_scriptable_type_info.html#ac57965a45a8f5897954176c01038698d',1,'tram::ScriptableType::ScriptableTypeInfo']]], ['base_5fvalue_7',['base_value',['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute.html#ae7621d33bbc6e85404781094a53a436e',1,'tram::Ext::Kitchensink::Attribute']]], ['begin_8',['begin',['../structtram_1_1_render_1_1_a_p_i_1_1_scanline.html#a3372ad996c67ffcf0bcd0099498981c7',1,'tram::Render::API::Scanline']]], ['begin_5fadv_9',['begin_adv',['../structtram_1_1_render_1_1_a_p_i_1_1_scanline.html#a699ad631d7655c390f9271d1d3fd1cc5',1,'tram::Render::API::Scanline']]], ['begin_5fp0_10',['begin_p0',['../structtram_1_1_render_1_1_a_p_i_1_1_scanline.html#a3802a9a9b40e56ec27089ffbdda2be16',1,'tram::Render::API::Scanline']]], ['begin_5fp1_11',['begin_p1',['../structtram_1_1_render_1_1_a_p_i_1_1_scanline.html#ac943df2f987544ca5bc87a5b2ff17334',1,'tram::Render::API::Scanline']]], ['beginned_12',['beginned',['../namespacetram_1_1_g_u_i.html#a2fd25b3a9a83f7a905fd70aeda3cf2d8',1,'tram::GUI']]], ['binding_5faction_13',['binding_action',['../classtram_1_1_ext_1_1_menu_1_1_settings_menu.html#a6d4a3d849008c2cf884787555a373725',1,'tram::Ext::Menu::SettingsMenu']]], ['binding_5fstate_5fready_14',['binding_state_ready',['../classtram_1_1_ext_1_1_menu_1_1_settings_menu.html#a5975fcefcf9922e267a6de09fa00a479',1,'tram::Ext::Menu::SettingsMenu']]], ['binguser_15',['binguser',['../main_8cpp.html#a7b2977ab1d0adc9fca3191665cdbd8a8',1,'main.cpp']]], ['bob_16',['bob',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a939144795493647266dfed3c37f7964e',1,'tram::Ext::Camera::FirstPersonCamera']]], ['bob_5fcallback_17',['bob_callback',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#afa6a623662e232f8d979eb703d905834',1,'tram::Ext::Camera::FirstPersonCamera']]], ['bob_5fchange_5fspeed_18',['BOB_CHANGE_SPEED',['../namespacetram_1_1_ext_1_1_camera.html#a9ebbcf579061fce613ced15545380bee',1,'tram::Ext::Camera']]], ['bob_5fspeed_19',['bob_speed',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a71b4981935bc58995e4ee9ffb2f6c573',1,'tram::Ext::Camera::FirstPersonCamera']]], ['bobbing_5fdistance_20',['bobbing_distance',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a55e48a64290f4a40a6332c4536c6e194',1,'tram::Ext::Camera::FirstPersonCamera']]], ['bobbing_5ftilt_21',['bobbing_tilt',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a4fee900edc8986fbf21a110744bca1dc',1,'tram::Ext::Camera::FirstPersonCamera']]], ['bobbing_5ftilt_5fgoal_22',['bobbing_tilt_goal',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a0cdf4f127893f1b3a00701b5de1cac0d',1,'tram::Ext::Camera::FirstPersonCamera']]], ['bobbing_5fweight_23',['bobbing_weight',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#ae4d02663d09577f0771f3c145e826ae2',1,'tram::Ext::Camera::FirstPersonCamera']]], ['bobbing_5fweight_5fgoal_24',['bobbing_weight_goal',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a7e08632db39929c5d34f38709e5ea28f',1,'tram::Ext::Camera::FirstPersonCamera']]], ['bone_25',['bone',['../structtram_1_1_render_1_1_keyframe_header.html#aede52b0456d0af84c59386e2f7b4e5e0',1,'tram::Render::KeyframeHeader::bone()'],['../structtram_1_1_render_1_1_dynamic_model_vertex.html#a14eec60b6751efb3a18233b51b09d874',1,'tram::Render::DynamicModelVertex::bone()']]], ['bone_5fcount_26',['BONE_COUNT',['../namespacetram_1_1_render.html#ae4355f7ab257050d67eb34b6c95b58e6',1,'tram::Render']]], ['bone_5findex_27',['bone_index',['../structtram_1_1_render_1_1_a_p_i_1_1_f_v_f_helper.html#ab873ad3f80505bc83e65f9f2edf69468',1,'tram::Render::API::FVFHelper::bone_index()'],['../structtram_1_1_render_1_1_a_p_i_1_1_f_f_p_helper.html#ac24edf27fe09335c5ae659ad0dbbe32e',1,'tram::Render::API::FFPHelper::bone_index()']]], ['bone_5funiform_5fbinding_28',['bone_uniform_binding',['../namespacetram_1_1_render_1_1_a_p_i.html#ace7ae8e4df165fb13c29c639727147c8',1,'tram::Render::API']]], ['bone_5funiform_5fbuffer_29',['bone_uniform_buffer',['../namespacetram_1_1_render_1_1_a_p_i.html#ae204460e13beeb7a70031b5f393fcacb',1,'tram::Render::API']]], ['bone_5fweight_30',['bone_weight',['../structtram_1_1_render_1_1_a_p_i_1_1_f_v_f_helper.html#a8422b55f8d7c41e6df476ae1093e4022',1,'tram::Render::API::FVFHelper::bone_weight()'],['../structtram_1_1_render_1_1_a_p_i_1_1_f_f_p_helper.html#aeb3b8d76aa80b1f680820bdfc47cb2e9',1,'tram::Render::API::FFPHelper::bone_weight()']]], ['boneweight_31',['boneweight',['../structtram_1_1_render_1_1_dynamic_model_vertex.html#a2dede085a14ed82c933ed72e555d2fb2',1,'tram::Render::DynamicModelVertex']]], ['bool32_32',['bool32',['../structtram_1_1_settings_1_1_setting_info.html#a09eb1679fe614e71bbc8a08ba3e593fa',1,'tram::Settings::SettingInfo']]], ['bool_5fptr_33',['bool_ptr',['../classtram_1_1_value_ptr.html#a6a5d3a375ce2d32d453e42796e777103',1,'tram::ValuePtr']]], ['bool_5fvalue_34',['bool_value',['../classtram_1_1_value.html#a0ce8527b48ea24e7312b7fe8b7ba9cb8',1,'tram::Value']]], ['border_5fh_35',['border_h',['../structtram_1_1_render_1_1_sprite_frame.html#ab6f18d025d640c62966bd57c417fdaa7',1,'tram::Render::SpriteFrame']]], ['border_5fv_36',['border_v',['../structtram_1_1_render_1_1_sprite_frame.html#a2bc1e1c80b941539bf4bd98f0ad01ed6',1,'tram::Render::SpriteFrame']]], ['bt_5fcollisionshape_37',['bt_collisionshape',['../structtram_1_1_physics_1_1trigger__t.html#aba9c93ad4d520e049fcea5713032bdf4',1,'tram::Physics::trigger_t']]], ['bt_5fmetadata_38',['bt_metadata',['../structtram_1_1_physics_1_1trigger__t.html#a71cfc73a8237b3ef17fe522d9c8060fa',1,'tram::Physics::trigger_t::bt_metadata()'],['../structtram_1_1_physics_1_1rigidbody__t.html#a57287fd1b0bb9650403230e67c315fc9',1,'tram::Physics::rigidbody_t::bt_metadata()']]], ['bt_5frigidbody_39',['bt_rigidbody',['../structtram_1_1_physics_1_1rigidbody__t.html#a4b513c1a384b224dc1225c02c314b9f3',1,'tram::Physics::rigidbody_t']]], ['bt_5fshape_40',['bt_shape',['../structtram_1_1_physics_1_1collisionshape__t.html#a11986390d77b413d024f236a8e9f41e7',1,'tram::Physics::collisionshape_t']]], ['bucket_41',['bucket',['../structtram_1_1_render_1_1_bucket_mapping.html#a933815398d8912dd7b24d70fbe88a0d8',1,'tram::Render::BucketMapping']]], ['buffer_42',['buffer',['../structtram_1_1_audio_1_1_spatial_1_1_audio_render.html#aa2e3f19d4d0628de60db45e064d97212',1,'tram::Audio::Spatial::AudioRender::buffer()'],['../classtram_1_1_file.html#a4b74a4d3fee7a6b42781d13b4c09c0bf',1,'tram::File::buffer()'],['../namespacetram_1_1implementation.html#a8098d615040fde5cc1fc55269394ccb7',1,'tram::implementation::buffer()']]], ['buffer_5fcount_43',['BUFFER_COUNT',['../namespacetram_1_1_audio_1_1_spatial.html#ac53db006980b48a77fdcc80c34854c20',1,'tram::Audio::Spatial']]], ['buffer_5fcursor_44',['buffer_cursor',['../classtram_1_1_file.html#aa4875014953235da2776dac766558fad',1,'tram::File']]], ['buffer_5fend_45',['buffer_end',['../classtram_1_1_file.html#a5dfaae97d414184a8999f401fe07b01f',1,'tram::File']]] ]; ================================================ FILE: docs/cppapi/search/variables_10.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/variables_10.js ================================================ var searchData= [ ['quat_5fptr_0',['quat_ptr',['../classtram_1_1_value_ptr.html#a87abd9913a910f4dd2b5c20a987347d3',1,'tram::ValuePtr']]], ['quat_5fvalue_1',['quat_value',['../classtram_1_1_value.html#a66085936ba2cabe6e5a327253c6c9aa7',1,'tram::Value']]], ['quest_2',['quest',['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_condition.html#acd0cc2ffea91837a2e51e9a7919ee198',1,'tram::Ext::Kitchensink::DialogCondition::quest()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_action.html#ab7830ce3388bcc68886658f6ebac4401',1,'tram::Ext::Kitchensink::DialogAction::quest()']]], ['quest1_3',['quest1',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a278406d8202cc8c9ec06e6f7970d58ed',1,'tram::Ext::Kitchensink::QuestVariable']]], ['quest2_4',['quest2',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#af8ab60abb939875937f7a0ef894c45e1',1,'tram::Ext::Kitchensink::QuestVariable']]] ]; ================================================ FILE: docs/cppapi/search/variables_11.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/variables_11.js ================================================ var searchData= [ ['radius_0',['radius',['../structtram_1_1_physics_1_1_collision_shape.html#a3aea9804127806597d0b72a0bb643c3d',1,'tram::Physics::CollisionShape']]], ['radius_5fx_1',['radius_x',['../structtram_1_1_physics_1_1_collision_shape.html#a11613d734d20966282442b4b2c1614fc',1,'tram::Physics::CollisionShape']]], ['radius_5fz_2',['radius_z',['../structtram_1_1_physics_1_1_collision_shape.html#a9ae3a56320a72a76d882ba2e84b699a7',1,'tram::Physics::CollisionShape']]], ['rank_3',['rank',['../structtram_1_1_ext_1_1_kitchensink_1_1_faction_rank.html#a571ec9260b660c807637a3a4645a171d',1,'tram::Ext::Kitchensink::FactionRank::rank()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_base_faction_rank.html#af762dbee29581d65a7afbb771c9638ae',1,'tram::Ext::Kitchensink::BaseFactionRank::rank()']]], ['ranks_4',['ranks',['../classtram_1_1_ext_1_1_kitchensink_1_1_faction.html#a04d109da4bb8712655c604c986d6df2d',1,'tram::Ext::Kitchensink::Faction']]], ['reader_5',['reader',['../classtram_1_1_file.html#a13e1dda97ae8a262ce9e28257c2aea1e',1,'tram::File']]], ['reader_5fparser_6',['reader_parser',['../classtram_1_1_file.html#a00a329e60e55d43c3df1159b5f36de18',1,'tram::File']]], ['receiver_7',['receiver',['../structtram_1_1_ext_1_1_menu_1_1_message_intercept.html#a46c8966a8a40c2904944a704e28bb8bc',1,'tram::Ext::Menu::MessageIntercept::receiver()'],['../structtram_1_1_message.html#a1d8a1a38aac71f1a0725b52ce898b7b1',1,'tram::Message::receiver()'],['../structtram_1_1_signal.html#a51beeb43406c2be5e68d4f43265e7eb6',1,'tram::Signal::receiver()']]], ['record_8',['record',['../main_8cpp.html#a24abc1cdb33ae6cc929ae21787c1cec9',1,'main.cpp']]], ['ref_5ftype_9',['ref_type',['../structtram_1_1_render_1_1_a_a_b_b_1_1_a_a_b_b_leaf.html#a25ddbe86d347600cbfda7432448d05b5',1,'tram::Render::AABB::AABBLeaf']]], ['references_10',['references',['../classtram_1_1_resource.html#a9f937078a3f7e3df1ad275528e615539',1,'tram::Resource']]], ['reflection_5fabsorption_11',['reflection_absorption',['../structtram_1_1_audio_1_1_spatial_1_1_path_tracing_result.html#ad239e98f2f77864eb10988803b8729d3',1,'tram::Audio::Spatial::PathTracingResult']]], ['reflection_5fcount_12',['reflection_count',['../structtram_1_1_audio_1_1_spatial_1_1_path_tracing_result.html#a241ad9bff06f84bc1924722fa97ef5ec',1,'tram::Audio::Spatial::PathTracingResult']]], ['reflections_13',['reflections',['../structtram_1_1_audio_1_1_spatial_1_1_path_tracing_result.html#aa3558215b661cecc8bb1ec9bb2654898',1,'tram::Audio::Spatial::PathTracingResult::reflections()'],['../structtram_1_1_audio_1_1_spatial_1_1_path_from_audio_source.html#ad8d0951179c5050779f6c44c83dc3ba5',1,'tram::Audio::Spatial::PathFromAudioSource::reflections()']]], ['reflectivity_14',['reflectivity',['../classtram_1_1_render_1_1_material.html#a9f91bdfa808477343ccdc76aaeb8abd6',1,'tram::Render::Material::reflectivity()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_material.html#a32337dbe065506cde40f754aa3e8f4d7',1,'tram::Render::API::GLMaterial::reflectivity()']]], ['registered_15',['registered',['../structtram_1_1_render_1_1_registered_vertex_definition.html#a771519468d6787026df59c277ee94ae2',1,'tram::Render::RegisteredVertexDefinition']]], ['relations_16',['relations',['../classtram_1_1_ext_1_1_kitchensink_1_1_faction.html#a8863648b8b05263ec564eb65d860793f',1,'tram::Ext::Kitchensink::Faction']]], ['render_5fflags_17',['render_flags',['../classtram_1_1_render_component.html#a49a2e872ecfb59e33f5ab7974b01c13f',1,'tram::RenderComponent']]], ['rendercomponent_18',['rendercomponent',['../classtram_1_1_decoration.html#ade298a17a196fd33a11d421657e5a423',1,'tram::Decoration::rendercomponent()'],['../classtram_1_1_static_world_object.html#a51c9c75f31cfe28bc7934498bf4b3dfe',1,'tram::StaticWorldObject::rendercomponent()'],['../classtram_1_1_trigger.html#ac9ce430e5009ab03a6065d4ec1520816',1,'tram::Trigger::rendercomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a02890ff2bdddc5eda0fb4b325318ae35',1,'tram::Ext::Kitchensink::Button::rendercomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_breakable.html#a9cd3710f61b4079ce2f48d9b21a8ff80',1,'tram::Ext::Kitchensink::Breakable::rendercomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_water.html#a57defa0f79a1b97c9154ef7d3318963f',1,'tram::Ext::Kitchensink::Water::rendercomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_train.html#a993b1fba83b57ed7da2f068a63e12e9a',1,'tram::Ext::Kitchensink::Train::rendercomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_pickup.html#a329479016aa8bba237d77d9b81d708bd',1,'tram::Ext::Kitchensink::Pickup::rendercomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_text.html#aea53d3e3b4c26becbb0f358cf8e13dcd',1,'tram::Ext::Kitchensink::DebugText::rendercomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_shape.html#aa1a0877cf652538dc29c81a2b7be004c',1,'tram::Ext::Kitchensink::DebugShape::rendercomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_autosave.html#a2f6cd3e9f01819693f25f76ea1deffe1',1,'tram::Ext::Kitchensink::TriggerAutosave::rendercomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_hurt.html#a61e6183e35fdce3b974628d18c0f8ca5',1,'tram::Ext::Kitchensink::TriggerHurt::rendercomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_once.html#a218ca60c7aa10b956ce4db11d0411ac6',1,'tram::Ext::Kitchensink::TriggerOnce::rendercomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_multiple.html#a6d39ed9a2cbfab6cd334b9af39d99bc2',1,'tram::Ext::Kitchensink::TriggerMultiple::rendercomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_push.html#a5b9ef4de873d19b9f989c967c26904d8',1,'tram::Ext::Kitchensink::TriggerPush::rendercomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_remove.html#a97e548c324cbdb15b6f90dbfea4eb2fe',1,'tram::Ext::Kitchensink::TriggerRemove::rendercomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_teleport.html#a1ee314c75612530d797e07b5e2dff085',1,'tram::Ext::Kitchensink::TriggerTeleport::rendercomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_player_movement.html#ac98c9d0daa251c124f7bb347138c6d86',1,'tram::Ext::Kitchensink::TriggerPlayerMovement::rendercomponent()'],['../structtram_1_1_render_1_1_a_a_b_b_1_1_a_a_b_b_leaf.html#a0c210b34d5b66cf3a0f26eb37a45f773',1,'tram::Render::AABB::AABBLeaf::rendercomponent()'],['../classtram_1_1_crate.html#aab88e1a8a682dcc308d4c9119abd711c',1,'tram::Crate::rendercomponent()']]], ['repeat_19',['repeat',['../classtram_1_1_audio_component.html#ab1cbca3ac78210b1c284dc6309a6b303',1,'tram::AudioComponent']]], ['repeats_20',['repeats',['../structtram_1_1_animation_component_1_1_animation_playback_info.html#ab1317f7c6f09824b1dc5a8df6b35bf7c',1,'tram::AnimationComponent::AnimationPlaybackInfo::repeats()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state.html#a076616449b844c51000c7b65940443b8',1,'tram::Ext::Kitchensink::AnimState::repeats()']]], ['requester_21',['requester',['../structtram_1_1_async_1_1_resource_request.html#a6d012e198b66993662a598ea69a022c9',1,'tram::Async::ResourceRequest']]], ['resource_22',['resource',['../structtram_1_1_async_1_1_resource_request.html#afd7d16241779d48e5da39b7a6de4fb65',1,'tram::Async::ResourceRequest::resource()'],['../classtram_1_1_resource_proxy.html#a1f763b625481fde25be8bcdb2b9387ea',1,'tram::ResourceProxy::resource()']]], ['resource_5flimit_5fcollision_5fmodel_23',['RESOURCE_LIMIT_COLLISION_MODEL',['../namespacetram.html#a09905cc9b5568b71843490d4d6ce5fc3',1,'tram']]], ['resource_5flimit_5flight_5fgraph_24',['RESOURCE_LIMIT_LIGHT_GRAPH',['../namespacetram.html#acfe37808bb06b05bc9596bc3242e95ce',1,'tram']]], ['resource_5flimit_5fmaterial_25',['RESOURCE_LIMIT_MATERIAL',['../namespacetram.html#a204e0f9d92f93902f454380c35b33c49',1,'tram']]], ['resource_5flimit_5fmodel_26',['RESOURCE_LIMIT_MODEL',['../namespacetram.html#a824fea7217919eb6958e08a8bbab50d1',1,'tram']]], ['resource_5flimit_5fpath_27',['RESOURCE_LIMIT_PATH',['../namespacetram.html#aaffd4a95c2adf2e132260b84190ca660',1,'tram']]], ['resource_5flimit_5fsound_28',['RESOURCE_LIMIT_SOUND',['../namespacetram.html#a4057f0499e008e4ce99545c3d38f1ddf',1,'tram']]], ['resource_5flimit_5fsound_5fgraph_29',['RESOURCE_LIMIT_SOUND_GRAPH',['../namespacetram.html#a899ede00065e962b5ca2528841e45aa7',1,'tram']]], ['resource_5flimit_5fsprite_30',['RESOURCE_LIMIT_SPRITE',['../namespacetram.html#ad2e37d16ae78faab3eb2d8140fcd8b5e',1,'tram']]], ['resource_5floader_5fqueue_5flimit_31',['RESOURCE_LOADER_QUEUE_LIMIT',['../namespacetram.html#ae549eb9876cd460a36ec048cd029af97',1,'tram']]], ['resource_5floader_5frequest_5flimit_32',['RESOURCE_LOADER_REQUEST_LIMIT',['../namespacetram.html#a35b3cdfbe899c26e6da0068331ef4a03',1,'tram']]], ['resources_5fwaiting_33',['resources_waiting',['../classtram_1_1_entity_component.html#a67f362753d2e2c2e5859ceab8b9461ce',1,'tram::EntityComponent']]], ['result_5fpaths_34',['result_paths',['../structtram_1_1_audio_1_1_spatial_1_1_audio_source.html#a9b6559e0ee3ca945a46bcf95ca60d25e',1,'tram::Audio::Spatial::AudioSource']]], ['right_35',['right',['../structtram_1_1_navmesh_node.html#a08dc0bcb36ae016bcc80f318a06b292f',1,'tram::NavmeshNode::right()'],['../structtram_1_1_a_a_b_b_tree_1_1_node.html#a57ca67dfe98a914549d55d710ef8fec6',1,'tram::AABBTree::Node::right()']]], ['rigidbody_5flimit_36',['RIGIDBODY_LIMIT',['../namespacetram.html#a95ef9ff7b7e26c1f357c10707720163a',1,'tram']]], ['rigidbody_5fmetadata_5fpool_37',['rigidbody_metadata_pool',['../namespacetram_1_1_physics_1_1_a_p_i.html#a7fe1815cf77d8668e3eb109f279d1681',1,'tram::Physics::API']]], ['roll_38',['roll',['../structtram_1_1_render_1_1_bone.html#a2233872a355e1400ec15d418addceba9',1,'tram::Render::Bone']]], ['root_39',['root',['../classtram_1_1_a_a_b_b_tree.html#a6e50b9b4d4d2dde317cef8dcb3ce648c',1,'tram::AABBTree::root()'],['../classtram_1_1_octree.html#a339f6bc48edaea36835c72727179450f',1,'tram::Octree::root()']]], ['rotate_5ffollowing_40',['rotate_following',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a01612b2beb8614c3602232f3313e143b',1,'tram::Ext::Camera::FirstPersonCamera']]], ['rotation_41',['rotation',['../structtram_1_1_shared_entity_data.html#a08cdfe854b58bb8a32ca9594866186c5',1,'tram::SharedEntityData::rotation()'],['../classtram_1_1_physics_1_1_a_p_i_1_1_callback_motion_state.html#a8eb70310ddfbbf5915e9f243317e845e',1,'tram::Physics::API::CallbackMotionState::rotation()'],['../structtram_1_1_render_1_1_keyframe.html#a9a2801c157a6717bfc008716b4c28a83',1,'tram::Render::Keyframe::rotation()'],['../structtram_1_1_render_1_1_sprite_point.html#ac1308953c2313e45cb7b3f82c35a409f',1,'tram::Render::SpritePoint::rotation()'],['../classtram_1_1_decal_component.html#a0ecda8cd0fd000ba8d9af749319d198a',1,'tram::DecalComponent::rotation()'],['../classtram_1_1_render_component.html#ab662c48c42ac7423a1be25def0850aeb',1,'tram::RenderComponent::rotation()'],['../classtram_1_1_ext_1_1_camera_1_1_camera.html#a3e35e4579d49fde2164b2eda46d38423',1,'tram::Ext::Camera::Camera::rotation()'],['../classtram_1_1_entity.html#a0525838325f363757549a3faa3267a62',1,'tram::Entity::rotation()'],['../structtram_1_1_physics_1_1_a_p_i_1_1_collision_shape_transform.html#a5f018e305b8e1f25cd8bf8b2939605d1',1,'tram::Physics::API::CollisionShapeTransform::rotation()']]], ['run_5fspeed_42',['run_speed',['../classtram_1_1_raycast_controller_component.html#ac9876016d424f59dcbd70a22264ea0ed',1,'tram::RaycastControllerComponent::run_speed()'],['../classtram_1_1_f_p_s_controller_component.html#a69f90eea486552552948362847c43ee6',1,'tram::FPSControllerComponent::run_speed()']]], ['running_43',['running',['../classtram_1_1_f_p_s_controller_component.html#a897a4b4f81cc5bba6e619a053abec6b9',1,'tram::FPSControllerComponent::running()'],['../classtram_1_1_raycast_controller_component.html#a1ff2fa537cf973283b7385f4b9c12eea',1,'tram::RaycastControllerComponent::running()']]] ]; ================================================ FILE: docs/cppapi/search/variables_12.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/variables_12.js ================================================ var searchData= [ ['sample_0',['sample',['../structtram_1_1_audio_1_1_spatial_1_1_audio_render.html#a3de86af0e9c4a8ecf0b84c74f66b815e',1,'tram::Audio::Spatial::AudioRender']]], ['sample_5frate_1',['sample_rate',['../classtram_1_1_audio_1_1_sound.html#a31e7f9540ea880eb01e07c5a887d1911',1,'tram::Audio::Sound::sample_rate()'],['../structtram_1_1_audio_1_1_spatial_1_1_audio_buffer.html#a31d58d975d8c500b69f62db5d998cb4f',1,'tram::Audio::Spatial::AudioBuffer::sample_rate()']]], ['sampling_5fdirection_2',['sampling_direction',['../structtram_1_1_audio_1_1_spatial_1_1_path_exploration_result.html#a46a0473cea400f336d28d65b5625cd7d',1,'tram::Audio::Spatial::PathExplorationResult']]], ['scale_3',['scale',['../classtram_1_1_decal_component.html#abe8edd2e09691f0f2f0a5b2f150f7cca',1,'tram::DecalComponent::scale()'],['../classtram_1_1_render_component.html#aeb591d2819300ff65ac05acfd171fe4c',1,'tram::RenderComponent::scale()'],['../structtram_1_1_render_1_1_keyframe.html#a77e3cb6ebfeb2417da1887eb85a0b7c5',1,'tram::Render::Keyframe::scale()']]], ['scanline_5flength_4',['scanline_length',['../structtram_1_1_render_1_1_a_p_i_1_1_scanline_buffer.html#a1b58e3c8b743fa7395633e6f1dfc2169',1,'tram::Render::API::ScanlineBuffer']]], ['scanlines_5',['scanlines',['../structtram_1_1_render_1_1_a_p_i_1_1_scanline_buffer.html#a19c45e4651ead4e492155c6392ea5019',1,'tram::Render::API::ScanlineBuffer::scanlines()'],['../namespacetram_1_1_render_1_1_a_p_i.html#a98aac604b36b4bd1c29a5580cd309cb7',1,'tram::Render::API::scanlines()']]], ['screen_5fclear_5fcolor_6',['screen_clear_color',['../namespacetram_1_1_render_1_1_a_p_i.html#ab8259e25142ce465c1c745dd91f4618e',1,'tram::Render::API']]], ['screenheight_7',['screenHeight',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#a989f62e254b867c662ead69c0fe6bbe5',1,'tram::Render::API::ShaderUniformModelMatrices']]], ['screenwidth_8',['screenWidth',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#a8e39494459b73be83dfbeef16e5775d2',1,'tram::Render::API::ShaderUniformModelMatrices']]], ['script_9',['script',['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html#a000cfce98b029d0db88a9cbbc17bc070',1,'tram::Ext::Kitchensink::AIAgent::script()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a5db92704bb3700f46790b108525400e5',1,'tram::Ext::Kitchensink::QuestVariable::script()']]], ['scriptable_5fentity_5ftype_5flimit_10',['SCRIPTABLE_ENTITY_TYPE_LIMIT',['../namespacetram.html#afde783f76b29484fca014a71379688da',1,'tram']]], ['search_5fstring_5flength_11',['SEARCH_STRING_LENGTH',['../namespacetram_1_1_ext_1_1_kitchensink.html#a6a6727c817a50b06905e75396bc8eb1d',1,'tram::Ext::Kitchensink']]], ['selected_5fcamera_12',['selected_camera',['../namespacetram_1_1_ext_1_1_camera.html#acf02ee4711f59697606b71a4712e98bc',1,'tram::Ext::Camera']]], ['sender_13',['sender',['../structtram_1_1_ext_1_1_menu_1_1_message_intercept.html#a435b82f7becf196d66c0951f6df0b256',1,'tram::Ext::Menu::MessageIntercept::sender()'],['../structtram_1_1_message.html#a28e9498ff0a7bb62e84f2a6c2589fa94',1,'tram::Message::sender()']]], ['set_5ftransform_5fcallback_14',['set_transform_callback',['../classtram_1_1_physics_1_1_a_p_i_1_1_callback_motion_state.html#af92a134178d01636e1b003a46daafdda',1,'tram::Physics::API::CallbackMotionState']]], ['setting_5flimit_15',['SETTING_LIMIT',['../namespacetram_1_1_settings.html#a18bc51cda3b8cbce070d4d8a3dfef15f',1,'tram::Settings']]], ['shader_16',['shader',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#ae0e14420c779fa4bc2fbd4f8246ce78b',1,'tram::Render::API::GLDrawListEntry']]], ['shader_5fpath_17',['shader_path',['../namespacetram_1_1_render_1_1_a_p_i.html#a55369c124562c90d626b1a67a3e2477e',1,'tram::Render::API']]], ['shake_5fmultiplier_18',['shake_multiplier',['../namespacetram_1_1_ext_1_1_camera.html#a810e7f445faeca85ab997f2c0d9c4bed',1,'tram::Ext::Camera']]], ['shape_19',['shape',['../structtram_1_1_physics_1_1_a_p_i_1_1_collision_shape_transform.html#a05e28343c7cc2518e829f6f8151d22d8',1,'tram::Physics::API::CollisionShapeTransform::shape()'],['../classtram_1_1_physics_1_1_collision_model.html#a1e1df5d474c902a9043f7c2c3f5526bd',1,'tram::Physics::CollisionModel::shape()']]], ['short_5fname_20',['short_name',['../structtram_1_1_system_1_1_system_info.html#af25347b2e3971892ca5c6cd2b9b782cd',1,'tram::System::SystemInfo']]], ['signal_5fcount_21',['signal_count',['../classtram_1_1_signal_table.html#a938437fad98477de3bdc6ff5238fcff1',1,'tram::SignalTable']]], ['signal_5ftype_5flimit_22',['SIGNAL_TYPE_LIMIT',['../namespacetram.html#a9773c849e7f41480842e5cd1d8d4de73',1,'tram']]], ['signals_23',['signals',['../classtram_1_1_signal_table.html#ad8d71747477523bc6cd3ebaf8af62397',1,'tram::SignalTable::signals()'],['../classtram_1_1_entity.html#a32d15f20656ffc4da923380374605df0',1,'tram::Entity::signals()']]], ['size_24',['size',['../structtram_1_1_render_1_1_vertex_attribute.html#a4b9b3ff2c6594e5c1cecbc5d362ab4b8',1,'tram::Render::VertexAttribute::size()'],['../classtram_1_1_hashmap.html#a42d72204053c0f76f228ffcbd5b70411',1,'tram::Hashmap::size()']]], ['skip_5fnewline_5fflag_25',['skip_newline_flag',['../classtram_1_1_file_reader_parser.html#a8a40dde3c4452991d297c18b8f4098bd',1,'tram::FileReaderParser']]], ['skip_5fvalue_26',['skip_value',['../classtram_1_1_file_reader_parser.html#aa4102a29b7986a007aed7ffac17d6227',1,'tram::FileReaderParser']]], ['sound_27',['sound',['../classtram_1_1_audio_component.html#aaa933d4c47c8636b20a47ae313a79230',1,'tram::AudioComponent::sound()'],['../classtram_1_1_sound.html#a06e516eef6120b6ccad7f04189b15dfb',1,'tram::Sound::sound()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a9769adf64aaa9639b7855aeb3919ee6f',1,'tram::Ext::Kitchensink::Button::sound()']]], ['sound_5fbuffer_28',['sound_buffer',['../classtram_1_1_audio_1_1_sound.html#a515eabe2a7fd2c3c230f651592ec2c53',1,'tram::Audio::Sound']]], ['sound_5fdata_29',['sound_data',['../classtram_1_1_audio_1_1_sound.html#a98e435c2eb675251a7b2826d1cee3e9d',1,'tram::Audio::Sound']]], ['sound_5fflags_30',['sound_flags',['../classtram_1_1_sound.html#a3c17af183ae0f42e2b59f221281a9494',1,'tram::Sound']]], ['sound_5flength_31',['sound_length',['../classtram_1_1_audio_1_1_sound.html#a9fd0ad9ee54f5c3beaa148532d97726e',1,'tram::Audio::Sound']]], ['source_32',['source',['../classtram_1_1_audio_component.html#acfa284e522ae3aa9cb61337b23327171',1,'tram::AudioComponent::source()'],['../classtram_1_1_render_1_1_material.html#a0106a7e3c671374dcfd7b68b7b363394',1,'tram::Render::Material::source()'],['../classtram_1_1_render_1_1_model.html#ac23726058a2d599fbcf09c6d774f6c91',1,'tram::Render::Model::source()']]], ['source_5fcount_33',['SOURCE_COUNT',['../namespacetram_1_1_audio_1_1_spatial.html#a1dc54415cd0414f047cfd68c37ef13a8',1,'tram::Audio::Spatial']]], ['source_5fdepth_5flimit_34',['SOURCE_DEPTH_LIMIT',['../namespacetram_1_1_audio_1_1_spatial.html#a470153ad5cab64ede6d4a517710c7aee',1,'tram::Audio::Spatial']]], ['source_5fdirection_35',['source_direction',['../structtram_1_1_audio_1_1_spatial_1_1_path_from_audio_source.html#a2cc3ae9172c3a920dab2553009c900d6',1,'tram::Audio::Spatial::PathFromAudioSource']]], ['source_5fideal_5fangle_36',['source_ideal_angle',['../structtram_1_1_audio_1_1_spatial_1_1_path_tracing_result.html#a217efabbc7b81c3fe4ca8ac67526863b',1,'tram::Audio::Spatial::PathTracingResult']]], ['special_5foption_37',['special_option',['../structtram_1_1_u_i_1_1_key_binding.html#ad131bfe825ffebbbe5129c31adab3f89',1,'tram::UI::KeyBinding']]], ['special_5foption2_38',['special_option2',['../structtram_1_1_u_i_1_1_key_binding.html#af82a3db19fbf9a3a80f768ad2f129acd',1,'tram::UI::KeyBinding']]], ['specular_39',['specular',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#a5894b06241aa52b860a8d73d8c3c526b',1,'tram::Render::API::ShaderUniformModelMatrices']]], ['specular_5fexponent_40',['specular_exponent',['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#ab7df87a59ab31eee8df41c3686f35200',1,'tram::Render::API::D3DDrawListEntry::specular_exponent()'],['../classtram_1_1_render_1_1_material.html#ace75dc47785b62f847b18bd282ee140b',1,'tram::Render::Material::specular_exponent()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_material.html#a07e7b84d5737ca1179d08607b6dd06aa',1,'tram::Render::API::GLMaterial::specular_exponent()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html#abdad019161ef217d6bdbb2c34f22e3de',1,'tram::Render::API::SWDrawListEntry::specular_exponent()']]], ['specular_5ftransparency_41',['specular_transparency',['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#a38e16ee087cd107bad43a77b4556223e',1,'tram::Render::API::D3DDrawListEntry::specular_transparency()'],['../classtram_1_1_render_1_1_material.html#a840d1b1dc3b84dc2a5b4b7f24e02e8c6',1,'tram::Render::Material::specular_transparency()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_material.html#a5c1937af80981904bbfedfbf9b144b64',1,'tram::Render::API::GLMaterial::specular_transparency()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html#a5ef81d3e413cd46fc8d06fcb14e1438d',1,'tram::Render::API::SWDrawListEntry::specular_transparency()']]], ['specular_5fweight_42',['specular_weight',['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#a09a0f6696c1a4d4b64b30376826316b3',1,'tram::Render::API::D3DDrawListEntry::specular_weight()'],['../classtram_1_1_render_1_1_material.html#acf5a270cd06229986d2953ff2b2d9944',1,'tram::Render::Material::specular_weight()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_material.html#a1260401099f04ec467b0ac463f48c83f',1,'tram::Render::API::GLMaterial::specular_weight()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html#a05b99dbe35234a661eaf6e7b0ac12698',1,'tram::Render::API::SWDrawListEntry::specular_weight()']]], ['speed_43',['speed',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state.html#a96c66b08a366597595eac4038641834e',1,'tram::Ext::Kitchensink::AnimState::speed()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#ac47c81071b86e3b5876d1baa0c263080',1,'tram::Ext::Kitchensink::Button::speed()'],['../structtram_1_1_animation_component_1_1_animation_playback_info.html#a605b9819919b636a4ec02c58bbea28d6',1,'tram::AnimationComponent::AnimationPlaybackInfo::speed()']]], ['spinlock_44',['spinlock',['../classtram_1_1_queue.html#aa0cce633bc90e45e142d32a0e7827d88',1,'tram::Queue']]], ['sprite_45',['sprite',['../classtram_1_1_decal_component.html#a311a631005417b52f325462a23685f78',1,'tram::DecalComponent::sprite()'],['../classtram_1_1_particle_component.html#a10d73a307d53059911966e00f9ea0154',1,'tram::ParticleComponent::sprite()'],['../classtram_1_1_sprite_component.html#a620c3aef918cd8570932341099d5d7c4',1,'tram::SpriteComponent::sprite()']]], ['sprite_5farray_46',['sprite_array',['../classtram_1_1_sprite_component.html#a4fbf77711c216c8fcc0b3187708e10f9',1,'tram::SpriteComponent']]], ['sprite_5ffont_47',['sprite_font',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a5446fb0643408689bf3e3228ae0e204a',1,'tram::Ext::Kitchensink::ItemClass']]], ['sprite_5fglyph_48',['sprite_glyph',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a01e50cc84077d0e95c63843fc9bf318e',1,'tram::Ext::Kitchensink::ItemClass']]], ['stack_49',['stack',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#afe8942947a3e1323eec2ab314c64b2ad',1,'tram::Ext::Kitchensink::ItemClass']]], ['stack_5fheight_50',['stack_height',['../structtram_1_1_g_u_i_1_1_frame_object.html#abed55225f2d2c6c5d15ff99eaee05d9c',1,'tram::GUI::FrameObject']]], ['stacklength_51',['stackLength',['../classtram_1_1_stack.html#acfba6f478c25b9476568caba14833fb4',1,'tram::Stack']]], ['stackname_52',['stackName',['../classtram_1_1_stack.html#a5f6b6fb4a9090e80ade67b4937959e3e',1,'tram::Stack']]], ['stacksize_53',['stackSize',['../classtram_1_1_stack.html#a382ca6f3fd7d1f13fc9f5c1decbf206a',1,'tram::Stack']]], ['standing_5fon_54',['standing_on',['../classtram_1_1_raycast_controller_component.html#a46760dcc830550459b52f6b26cd80bcb',1,'tram::RaycastControllerComponent::standing_on()'],['../classtram_1_1_f_p_s_controller_component.html#a1a9c20ae30cc0939f1c09febafb1a001',1,'tram::FPSControllerComponent::standing_on()']]], ['standing_5fon_5fprev_55',['standing_on_prev',['../classtram_1_1_raycast_controller_component.html#af3f3c01dc71c60f64fd65709c294e39d',1,'tram::RaycastControllerComponent::standing_on_prev()'],['../classtram_1_1_f_p_s_controller_component.html#ae4a70bf3706f1cbada7ed97f70482fe4',1,'tram::FPSControllerComponent::standing_on_prev()']]], ['standing_5fpos_56',['standing_pos',['../classtram_1_1_raycast_controller_component.html#a621f23a281ed1fc9ab27bbb0ac4103e6',1,'tram::RaycastControllerComponent::standing_pos()'],['../classtram_1_1_f_p_s_controller_component.html#a37f280a78fdb1596861619db391ff09a',1,'tram::FPSControllerComponent::standing_pos()']]], ['standing_5frot_57',['standing_rot',['../classtram_1_1_f_p_s_controller_component.html#ac1c3824186959467cdf5f12a5f2684cc',1,'tram::FPSControllerComponent']]], ['start_5fpos_58',['start_pos',['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a12a4f0a94979b7b9c112fe3d43dfefcd',1,'tram::Ext::Kitchensink::Button']]], ['start_5frot_59',['start_rot',['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#ae091221f1e75d235db2a4ab7ba30b83b',1,'tram::Ext::Kitchensink::Button']]], ['start_5fy_60',['start_y',['../structtram_1_1_render_1_1_a_p_i_1_1_scanline_buffer.html#a5f182b42c73e158605f8eb2c0a0ca373',1,'tram::Render::API::ScanlineBuffer']]], ['state_61',['state',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_default.html#acf9e01d5a11aa7a4b40a7135a8bb10e9',1,'tram::Ext::Kitchensink::AnimStateTransitionDefault::state()'],['../structtram_1_1_system_1_1_system_info.html#a44f69f3ce380405fc41b7dfff7079beb',1,'tram::System::SystemInfo::state()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a91ceb993b3cbf17626bccd4899157514',1,'tram::Ext::Kitchensink::Button::state()']]], ['state_5fspace_62',['state_space',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state.html#a462487781aa6ea8911cb37bc3064b575',1,'tram::Ext::Kitchensink::AnimState']]], ['states_63',['states',['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_state_component.html#ab06a67f085e005f0e985fd03f1bd2dcc',1,'tram::Ext::Kitchensink::AnimationStateComponent']]], ['static_5fvertex_5ffvf_64',['STATIC_VERTEX_FVF',['../namespacetram_1_1_render_1_1_a_p_i.html#aae43b3038bb50f8c12f079db41ce172e',1,'tram::Render::API']]], ['statistics_5fenabled_65',['statistics_enabled',['../classtram_1_1_ext_1_1_menu_1_1_debug_menu.html#ae2ef205978570aa98b85d92117664971',1,'tram::Ext::Menu::DebugMenu']]], ['statistics_5fmenu_66',['statistics_menu',['../classtram_1_1_ext_1_1_menu_1_1_debug_menu.html#a0f6a07f1747a26714f916feaa04d01ab',1,'tram::Ext::Menu::DebugMenu']]], ['status_67',['status',['../classtram_1_1_resource.html#ad797d797d3fb0e517063f8178b0ff243',1,'tram::Resource']]], ['step_5fheight_68',['step_height',['../classtram_1_1_f_p_s_controller_component.html#a4b07abe21f47fc5dbac586aa45875fa0',1,'tram::FPSControllerComponent::step_height()'],['../classtram_1_1_raycast_controller_component.html#aebcd878947abb26efd9f9fe66d6caf6b',1,'tram::RaycastControllerComponent::step_height()']]], ['step_5fheight_5fcrouch_69',['step_height_crouch',['../classtram_1_1_f_p_s_controller_component.html#a4074f2e9e605af90024754008010a1a9',1,'tram::FPSControllerComponent']]], ['stride_70',['stride',['../structtram_1_1_render_1_1_vertex_attribute.html#a244d28f089f6ad9cda2ca2dd04dd41ca',1,'tram::Render::VertexAttribute']]], ['string_5fptr_71',['string_ptr',['../classtram_1_1_value_ptr.html#aa41430152ae099fa046cb717764a5f73',1,'tram::ValuePtr']]], ['string_5fvalue_72',['string_value',['../classtram_1_1_value.html#a7ee321f7843e602cdf1dc6ec6d8c707b',1,'tram::Value']]], ['subtitle_73',['subtitle',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a89dca0079262b8780f559d02c7865799',1,'tram::Ext::Kitchensink::QuestVariable']]], ['subtype_74',['subtype',['../structtram_1_1_event.html#ab499b6c8117176c1c2d782faf862412e',1,'tram::Event::subtype()'],['../classtram_1_1_ext_1_1_menu_1_1_event_emit.html#afbcb5e97dee6c1c8eb8a4e4fff488c4f',1,'tram::Ext::Menu::EventEmit::subtype()'],['../structtram_1_1_ext_1_1_menu_1_1_event_intercept.html#a2d1db56536b83ffc15b91bf8ea8138ee',1,'tram::Ext::Menu::EventIntercept::subtype()']]], ['subtype_5fstring_75',['subtype_string',['../classtram_1_1_ext_1_1_menu_1_1_event_emit.html#ab28d6b55f6c036ebd9399dd1bbb22e25',1,'tram::Ext::Menu::EventEmit']]], ['sun_5fcolor_76',['sun_color',['../structtram_1_1_render_1_1_a_p_i_1_1_layer_parameters.html#a9f4010d78ed2b6398c86bbd3bfa3d3b4',1,'tram::Render::API::LayerParameters::sun_color()'],['../namespacetram_1_1_render.html#a786b665a3cc7c9557dd8d67a418bcaaf',1,'tram::Render::sun_color()']]], ['sun_5fdirection_77',['sun_direction',['../structtram_1_1_render_1_1_a_p_i_1_1_layer_parameters.html#a76cca2cbf53a6cb3f21faee686130d82',1,'tram::Render::API::LayerParameters::sun_direction()'],['../namespacetram_1_1_render.html#ad44eb5b755e8ae84746af1b369c01908',1,'tram::Render::sun_direction()']]], ['suncolor_78',['sunColor',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#aa6fbe14bdb769a5454cba00b17f66718',1,'tram::Render::API::ShaderUniformModelMatrices']]], ['sundirection_79',['sunDirection',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#acfdaa66e9dfe4c104bc5e7dba81d98fe',1,'tram::Render::API::ShaderUniformModelMatrices']]], ['sunweight_80',['sunWeight',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#aaf90895edcb47ffbbe0190184358ad6d',1,'tram::Render::API::ShaderUniformModelMatrices']]], ['sw_81',['sw',['../structtram_1_1_render_1_1drawlistentry__t.html#aa19e9354b8948dc1e47a4c5983cad9b2',1,'tram::Render::drawlistentry_t::sw()'],['../structtram_1_1_render_1_1light__t.html#a8884681b5c37bd90c77607fe04738d27',1,'tram::Render::light_t::sw()'],['../structtram_1_1_render_1_1material__t.html#a5e46477c4edac192b6977a69bf2cda1b',1,'tram::Render::material_t::sw()']]], ['sw_5findex_5farray_82',['sw_index_array',['../structtram_1_1_render_1_1indexarray__t.html#a8ad83d6138df2d320f3ada45e47ac8de',1,'tram::Render::indexarray_t']]], ['sw_5ftexture_83',['sw_texture',['../structtram_1_1_render_1_1texturehandle__t.html#ac29891059d4c6b816fa4a6e515f1bced',1,'tram::Render::texturehandle_t']]], ['sw_5fvertex_5farray_84',['sw_vertex_array',['../structtram_1_1_render_1_1vertexarray__t.html#a58e132836686f81374a161a1a4b79a7f',1,'tram::Render::vertexarray_t']]], ['system_5flimit_85',['SYSTEM_LIMIT',['../namespacetram.html#aa4a96a9b06c171a66beb3fe0066ac6b5',1,'tram']]] ]; ================================================ FILE: docs/cppapi/search/variables_13.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/variables_13.js ================================================ var searchData= [ ['tab_0',['tab',['../classtram_1_1_ext_1_1_menu_1_1_settings_menu.html#a51abff2b754e4376be37a35cceacc839',1,'tram::Ext::Menu::SettingsMenu']]], ['table_1',['table',['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_state_component.html#a61c57d2abc379ab7551ae47f74d31688',1,'tram::Ext::Kitchensink::AnimationStateComponent']]], ['tag_2',['tag',['../structtram_1_1_ext_1_1_kitchensink_1_1_effect.html#a00596a75be2bf65fa1d2e03dcfeb435b',1,'tram::Ext::Kitchensink::Effect']]], ['tail_3',['tail',['../structtram_1_1_render_1_1_bone.html#aeb360901af3cd399664d42fc7f45b621',1,'tram::Render::Bone']]], ['tex_4',['tex',['../structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html#a24707e6d30a0f70142d473bddba876be',1,'tram::Render::API::StaticVertex::tex()'],['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#a2d81747033b8094cbafb222ab1f42150',1,'tram::Render::API::DynamicVertex::tex()'],['../structtram_1_1_render_1_1_static_model_vertex.html#ad51bc04758264d5ac8dc9bde8902b224',1,'tram::Render::StaticModelVertex::tex()'],['../structtram_1_1_render_1_1_dynamic_model_vertex.html#a20afebb7b239ed53a388bb53e32d9cf9',1,'tram::Render::DynamicModelVertex::tex()']]], ['tex_5fx_5',['tex_x',['../structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html#add3d074d339900d6e0484f32a21530e5',1,'tram::Render::API::StaticVertex::tex_x()'],['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#ac1f682bed82ea178bd8beb9d9390be82',1,'tram::Render::API::DynamicVertex::tex_x()']]], ['tex_5fy_6',['tex_y',['../structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html#a2f7ff3ae59f5008deb76ecb7b4ffb6d9',1,'tram::Render::API::StaticVertex::tex_y()'],['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#a9e180bc6be33c64cf919a1fdfe5556ed',1,'tram::Render::API::DynamicVertex::tex_y()']]], ['texco_7',['texco',['../structtram_1_1_render_1_1_sprite_vertex.html#abeffdb3fc7194d2e43ca60aab57f5343',1,'tram::Render::SpriteVertex']]], ['texcount_8',['texCount',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#a00d701e6b4117b3ea568a1733d5f4455',1,'tram::Render::API::GLDrawListEntry']]], ['text_9',['text',['../classtram_1_1_ext_1_1_menu_1_1_console.html#a6a03f676654c17d2aaeadf875b90f4e1',1,'tram::Ext::Menu::Console']]], ['texture_10',['texture',['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#ae8a6150817c6af5a23681465585f807b',1,'tram::Render::API::D3DDrawListEntry::texture()'],['../structtram_1_1_render_1_1_a_p_i_1_1_f_v_f_helper.html#a842dd15f583c42dbba0b870848b2788e',1,'tram::Render::API::FVFHelper::texture()'],['../classtram_1_1_render_1_1_material.html#a5a6e15bdcaf42aaab5e8553733663037',1,'tram::Render::Material::texture()'],['../structtram_1_1_render_1_1_a_p_i_1_1_f_f_p_helper.html#af5774461282b48faa2dd20a0be390d20',1,'tram::Render::API::FFPHelper::texture()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html#a908345371794e728c6e67ca027a81b31',1,'tram::Render::API::SWDrawListEntry::texture()'],['../structtram_1_1_render_1_1_static_model_vertex.html#a14236fc030ada6beb923c59481356738',1,'tram::Render::StaticModelVertex::texture()'],['../structtram_1_1_render_1_1_dynamic_model_vertex.html#a72c02c5037cf0f6f2fc3b7a843c3a1e3',1,'tram::Render::DynamicModelVertex::texture()'],['../structtram_1_1_render_1_1_sprite_vertex.html#a8085377574c6989403d1bd2c3f7fb65e',1,'tram::Render::SpriteVertex::texture()'],['../structtram_1_1_render_1_1_sprite_point.html#a3b0683b95f728e95b47705da6c22db99',1,'tram::Render::SpritePoint::texture()']]], ['texture_5fdata_11',['texture_data',['../classtram_1_1_render_1_1_material.html#a56f47f2d65d43e654d0abf9d104dce3d',1,'tram::Render::Material']]], ['texture_5flist_12',['texture_list',['../namespacetram_1_1_render_1_1_a_p_i.html#ae22731df276abfeb90be9ca92e40d03e',1,'tram::Render::API']]], ['texture_5foffset_13',['texture_offset',['../structtram_1_1_render_1_1_sprite_point.html#a9a13cc02b4286881dd37bc6675e30516',1,'tram::Render::SpritePoint']]], ['texture_5fsize_14',['texture_size',['../structtram_1_1_render_1_1_sprite_point.html#a94456d286185795097932358effe13a3',1,'tram::Render::SpritePoint']]], ['texture_5ftransforms_15',['texture_transforms',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#a70b0e18a2a7c521c25994b24941984ec',1,'tram::Render::API::GLDrawListEntry::texture_transforms()'],['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#a7f6207739a1721d96706eeb5b263b711',1,'tram::Render::API::ShaderUniformModelMatrices::texture_transforms()']]], ['texture_5ftype_16',['texture_type',['../classtram_1_1_render_1_1_material.html#a5eecc16043ab3c30d158f22429c3fd43',1,'tram::Render::Material']]], ['textvertices_17',['textvertices',['../namespacetram_1_1_render.html#acbf7d35ffc1fe3624a48655681f07209',1,'tram::Render']]], ['third_5fperson_18',['THIRD_PERSON',['../namespacetram_1_1_render.html#a8c04f6971cbc222d951bd80fb9fb56b9',1,'tram::Render']]], ['tick_19',['tick',['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#ac41e197036c5ef823dbcd7f6bb5ae240',1,'tram::Ext::Kitchensink::Button']]], ['tick_5frate_20',['TICK_RATE',['../namespacetram.html#a675b9496ee55fb465aa5d4972b45bac7',1,'tram']]], ['tilt_21',['tilt',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#afdc06174463b8c44161f9f74f73fb81f',1,'tram::Ext::Camera::FirstPersonCamera']]], ['tilt_5fgoal_22',['tilt_goal',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#aa9a3d94e83b762fc15edbf7d3da266a0',1,'tram::Ext::Camera::FirstPersonCamera']]], ['tilt_5flast_23',['tilt_last',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a77c42a4916c08b1a297720aff63a77c7',1,'tram::Ext::Camera::FirstPersonCamera']]], ['tilt_5fspeed_24',['TILT_SPEED',['../namespacetram_1_1_ext_1_1_camera.html#af85f9d24f3adcf1113b2c6425f8474ac',1,'tram::Ext::Camera']]], ['time_25',['time',['../structtram_1_1_ext_1_1_kitchensink_1_1_effect.html#af2a9120bba4c62aabf617297bda2edaf',1,'tram::Ext::Kitchensink::Effect::time()'],['../structtram_1_1_ext_1_1_menu_1_1_intercept.html#a6b7b147914bc32b6a2b76e9eb7fbef9a',1,'tram::Ext::Menu::Intercept::time()'],['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#ab38766b73e84418db17ba19afabb6d39',1,'tram::Render::API::ShaderUniformModelMatrices::time()']]], ['time_5fspent_26',['time_spent',['../structtram_1_1_stats_1_1_system_stat.html#a32672156fe327f706f10a187b186b1fa',1,'tram::Stats::SystemStat']]], ['time_5fspent_5faverage_27',['time_spent_average',['../structtram_1_1_stats_1_1_system_stat.html#a93bb42e1b4287d0ee87ea740f51f561f',1,'tram::Stats::SystemStat']]], ['time_5fspent_5faverage_5fcollated_28',['time_spent_average_collated',['../structtram_1_1_stats_1_1_system_stat.html#a347ff65490bda5b7174efe440dac0859',1,'tram::Stats::SystemStat']]], ['time_5fspent_5fcollated_29',['time_spent_collated',['../structtram_1_1_stats_1_1_system_stat.html#a16f80dfae2be619ec215d29cd18390d2',1,'tram::Stats::SystemStat']]], ['time_5fspent_5ftotal_30',['time_spent_total',['../structtram_1_1_stats_1_1_system_stat.html#a1d92dce48ee382f655b1d0412604d4ae',1,'tram::Stats::SystemStat']]], ['time_5fstarted_31',['time_started',['../structtram_1_1_stats_1_1_system_stat.html#a5a348062859b92b2ed6defce303d9e24',1,'tram::Stats::SystemStat']]], ['timer_32',['timer',['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a06388461c6b4eb74595e5231b97f1534',1,'tram::Ext::Kitchensink::Button']]], ['title_33',['title',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#ad6574937d3491e89d92d0fab8f3ec746',1,'tram::Ext::Kitchensink::QuestVariable']]], ['to_34',['to',['../structtram_1_1_edge.html#a3b4b8a5653bb798802c9319ed8374cee',1,'tram::Edge']]], ['tolet_5femitter_35',['tolet_emitter',['../main_8cpp.html#aa6314261586f8d6bdb38d84211ab9068',1,'main.cpp']]], ['tolet_5fspinner_36',['tolet_spinner',['../main_8cpp.html#aef1afcddb99ee1a555eb26a6904d7362',1,'main.cpp']]], ['tolet_5fsprayer_37',['tolet_sprayer',['../main_8cpp.html#aa6df28e8f20bf2b2154a6676327ac225',1,'main.cpp']]], ['tolet_5fsprite_38',['tolet_sprite',['../main_8cpp.html#ad5b4101b5ff3df42a2fe16f3499d1e67',1,'main.cpp']]], ['totl_5fasserts_39',['totl_asserts',['../struct__test__case.html#ad41c1983f63c22e6891e73714a4f7494',1,'_test_case']]], ['tracked_5fentities_40',['tracked_entities',['../namespacetram_1_1_loader.html#acc765a2553ec7b9c33e50b473d38d371',1,'tram::Loader']]], ['transitions_41',['transitions',['../classtram_1_1_world_cell.html#a4d8144c3a7c27244fb6c8fb87c9783a5',1,'tram::WorldCell']]], ['tree_42',['tree',['../structtram_1_1_render_1_1_model_a_a_b_b.html#af540dbe8676bc422d33cc7140f733e2d',1,'tram::Render::ModelAABB']]], ['tree_5fhandle_43',['tree_handle',['../structtram_1_1_render_1_1_light_tree_1_1_light.html#aded7a9c4c5e7c06e84b2ac9d0967e2b8',1,'tram::Render::LightTree::Light']]], ['triangle_44',['triangle',['../structtram_1_1_render_1_1_a_a_b_b_1_1_query_response.html#ae3f83ed0e19fec90c88b5057ea34e965',1,'tram::Render::AABB::QueryResponse']]], ['triangles_45',['triangles',['../structtram_1_1_render_1_1_model_a_a_b_b.html#ab9d31a748f2085bda0d9db193d8865dd',1,'tram::Render::ModelAABB::triangles()'],['../structtram_1_1_render_1_1_triangle_bucket.html#a9d41d11849a7b16ec57526b77e1f3388',1,'tram::Render::TriangleBucket::triangles()']]], ['trigger_46',['trigger',['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_action.html#ad286a54082f47f5755efd6cc9c73823c',1,'tram::Ext::Kitchensink::DialogAction']]], ['trigger_5fflags_47',['trigger_flags',['../classtram_1_1_trigger.html#ab6e57dd6a789d4f62c5a85b2b6974040',1,'tram::Trigger']]], ['triggercomponent_48',['triggercomponent',['../classtram_1_1_trigger.html#a72b18d259352340995c217999106916d',1,'tram::Trigger']]], ['triggers_49',['triggers',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest.html#af46e76fae1a86683f0b2221b995c62aa',1,'tram::Ext::Kitchensink::Quest']]], ['type_50',['type',['../structtram_1_1_message.html#a0f822eec485aa46e9c93e9445526c8c1',1,'tram::Message::type()'],['../structtram_1_1_path_edge_info.html#a26b5bde92d299e926fffa3cd942cfdbc',1,'tram::PathEdgeInfo::type()'],['../classtram_1_1_path_follower.html#ad11ffc06ffa7fa6b5fd4732ee7ec70ab',1,'tram::PathFollower::type()'],['../structtram_1_1_settings_1_1_setting_info.html#a77fe25accfc80bff790e3f81ebfb527e',1,'tram::Settings::SettingInfo::type()'],['../structtram_1_1_signal.html#a0a38e6da9341346a46338ba52c2be472',1,'tram::Signal::type()'],['../classtram_1_1_value.html#af5bb94d263f9f0a53c7a317b903fa8aa',1,'tram::Value::type()'],['../structtram_1_1_physics_1_1_a_p_i_1_1_rigidbody_metadata.html#aea210efa373c418e2c0ddb2b5ecc623c',1,'tram::Physics::API::RigidbodyMetadata::type()'],['../structtram_1_1_physics_1_1_collision_shape.html#ad4f0ef4192b9763bc7775ef9f6b9a26b',1,'tram::Physics::CollisionShape::type()'],['../classtram_1_1_render_1_1_material.html#adafa815945158f89825308d5286869d2',1,'tram::Render::Material::type()'],['../structtram_1_1_render_1_1_vertex_attribute.html#a3e41ef607217ea0dd93110df26b9d672',1,'tram::Render::VertexAttribute::type()'],['../structtram_1_1_event.html#a26cc77ee3a08567434f0b475a148007a',1,'tram::Event::type()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_vertex_array.html#a9696b067eb3e37d068c606ba565da133',1,'tram::Render::API::SWVertexArray::type()'],['../classtram_1_1_scriptable.html#ae2b71cc843f216e53f0eeb2a4ebed28e',1,'tram::Scriptable::type()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_effect.html#a1ed0d5f39ee959afa066eef7c765e546',1,'tram::Ext::Kitchensink::Effect::type()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_topic.html#aaeb1f8e04e35e34ff363d9fd6b8eeb0a',1,'tram::Ext::Kitchensink::DialogTopic::type()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a7d0db342f3f3eed6bc5d8e2bad2bea5d',1,'tram::Ext::Kitchensink::QuestVariable::type()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_trigger.html#a7913f7b41be31d418a7811479db0a6e5',1,'tram::Ext::Kitchensink::QuestTrigger::type()'],['../structtram_1_1_ext_1_1_menu_1_1_message_intercept.html#ad4a5ce94c977ea6b4c6a0c95b1176769',1,'tram::Ext::Menu::MessageIntercept::type()'],['../structtram_1_1_ext_1_1_menu_1_1_event_intercept.html#a26cca1d8441ace64474409596e11338a',1,'tram::Ext::Menu::EventIntercept::type()'],['../structtram_1_1_shared_entity_data.html#a64c88d3fd0cd94c90c66f1dd9dd5ce9e',1,'tram::SharedEntityData::type()'],['../structtram_1_1_listener_info.html#a07e1a856ac9f66c9b9f71644d23ada02',1,'tram::ListenerInfo::type()'],['../structtram_1_1_render_1_1_a_a_b_b_1_1_query_response.html#acbc9174af642114af907b43460aa2b39',1,'tram::Render::AABB::QueryResponse::type()']]] ]; ================================================ FILE: docs/cppapi/search/variables_14.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/variables_14.js ================================================ var searchData= [ ['uid_5fcharacter_5flimit_0',['UID_CHARACTER_LIMIT',['../namespacetram.html#abd586f202b2593831d3d48a18eb15776',1,'tram']]], ['uid_5flimit_1',['UID_LIMIT',['../namespacetram.html#af8599d00d63ed9f6ee3eecb0c0b136b8',1,'tram']]], ['uint32_2',['uint32',['../structtram_1_1_settings_1_1_setting_info.html#a5d38111e0ad99f7248006277064dffe5',1,'tram::Settings::SettingInfo']]], ['uint32_5fptr_3',['uint32_ptr',['../classtram_1_1_value_ptr.html#a1916311938740122169aaf88c83aefa9',1,'tram::ValuePtr']]], ['uint32_5fvalue_4',['uint32_value',['../classtram_1_1_value.html#a7be0d3e1625e7bc8cb398908153709de',1,'tram::Value']]] ]; ================================================ FILE: docs/cppapi/search/variables_15.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/variables_15.js ================================================ var searchData= [ ['value_0',['value',['../structtram_1_1_ext_1_1_kitchensink_1_1_a_i_variable.html#ab8f5ca82a06f30ec861907366c362436',1,'tram::Ext::Kitchensink::AIVariable::value()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_effect.html#a57feec2c1a36fad9bebd6884684f1fd5',1,'tram::Ext::Kitchensink::Effect::value()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_initial_attribute.html#a5860f657091240f31bf7d180e659f9fd',1,'tram::Ext::Kitchensink::InitialAttribute::value()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_base_attribute.html#af66cdb9500769f91ecff0c49a489d887',1,'tram::Ext::Kitchensink::BaseAttribute::value()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a94f01baa040314e9e8bd6b218dffc904',1,'tram::Ext::Kitchensink::ItemClass::value()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#aa38c56e4efe619fcefd99a1f87047c88',1,'tram::Ext::Kitchensink::QuestVariable::value()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#ad77d58b02c65c98115798f167a4a6cb4',1,'tram::Ext::Kitchensink::QuestVariable::value()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a9fea540d2b9a8fec5b7bec83329d33fa',1,'tram::Ext::Kitchensink::QuestVariable::value()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_trigger.html#a9cce590fff9284b7c0e791495517aa8e',1,'tram::Ext::Kitchensink::QuestTrigger::value()'],['../structtram_1_1_ext_1_1_menu_1_1_message_intercept.html#aed2f13180c49a2b73832bc00d0bf9a93',1,'tram::Ext::Menu::MessageIntercept::value()'],['../structtram_1_1_ext_1_1_menu_1_1_event_intercept.html#a9c997714569712e28893f2422f6aad8e',1,'tram::Ext::Menu::EventIntercept::value()'],['../structtram_1_1_settings_1_1_raw_setting.html#a3f36f7e9e8252147d72a427c735b5d7b',1,'tram::Settings::RawSetting::value()'],['../structtram_1_1_settings_1_1_property.html#a5389ad0ee0f0f3c870ba776440671897',1,'tram::Settings::Property::value()'],['../structtram_1_1_a_a_b_b_tree_1_1_node.html#ab59c932ba14cda33cd9918d02ef074c1',1,'tram::AABBTree::Node::value()'],['../structtram_1_1_hashmap_1_1_record.html#ab2c09b3dcf41d13a53dc2d65e6a60996',1,'tram::Hashmap::Record::value()']]], ['vao_1',['vao',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#ac984d3f4c21946c93809b5e07408fc1d',1,'tram::Render::API::GLDrawListEntry']]], ['variable_2',['variable',['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_condition.html#a14f314e9911fc87757376b5267df2b78',1,'tram::Ext::Kitchensink::DialogCondition::variable()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_trigger.html#a4d0df39a718f4aea2e2bbb77317db257',1,'tram::Ext::Kitchensink::QuestTrigger::variable()']]], ['variable1_3',['variable1',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#ad57c101bc6373283564cf19973ef47ce',1,'tram::Ext::Kitchensink::QuestVariable']]], ['variable2_4',['variable2',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a3c9c1cd6c108fb87f86e98fccc21a7ff',1,'tram::Ext::Kitchensink::QuestVariable']]], ['variables_5',['variables',['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html#a07dad067bc1ef1dbfeaa7603a0c20130',1,'tram::Ext::Kitchensink::AIAgent::variables()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest.html#abaeea35c7bce4071e8d4276215c78969',1,'tram::Ext::Kitchensink::Quest::variables()']]], ['vec2_5fptr_6',['vec2_ptr',['../classtram_1_1_value_ptr.html#ab31b750bd4f2b23f2279519ca9e3a5b3',1,'tram::ValuePtr']]], ['vec2_5fvalue_7',['vec2_value',['../classtram_1_1_value.html#a5b771cb492491a14a1b2ff4aebf0ab3a',1,'tram::Value']]], ['vec3_5fptr_8',['vec3_ptr',['../classtram_1_1_value_ptr.html#ac25851bd286667025b81cdf9b29c60ba',1,'tram::ValuePtr']]], ['vec3_5fvalue_9',['vec3_value',['../classtram_1_1_value.html#a76b971a65a139f711180c348be2b8dae',1,'tram::Value']]], ['vec4_5fptr_10',['vec4_ptr',['../classtram_1_1_value_ptr.html#a9a40889e3cb361b60b2ca68b9ad5866d',1,'tram::ValuePtr']]], ['vec4_5fvalue_11',['vec4_value',['../classtram_1_1_value.html#a52f124f1bb9637ad3ae7763768382ca8',1,'tram::Value']]], ['velocity_12',['velocity',['../classtram_1_1_f_p_s_controller_component.html#a73e7514f41a865feee9c0f9af2963911',1,'tram::FPSControllerComponent::velocity()'],['../structtram_1_1_particle_component_1_1_particle.html#af301390c50da385d76cb05fe2540e40f',1,'tram::ParticleComponent::Particle::velocity()']]], ['vertex_5farray_13',['vertex_array',['../classtram_1_1_decal_component.html#abc2da65e6a353c30908e5826b744b217',1,'tram::DecalComponent::vertex_array()'],['../classtram_1_1_particle_component.html#afc6cc6df023adfb622490cb39dee2df2',1,'tram::ParticleComponent::vertex_array()'],['../classtram_1_1_sprite_component.html#af8e1293692c40c7817c7f7523c2d2ef7',1,'tram::SpriteComponent::vertex_array()'],['../classtram_1_1_render_1_1_model.html#ab5b0370a3b31cb6fa1b9ae0ad969a5aa',1,'tram::Render::Model::vertex_array()'],['../structtram_1_1_render_1_1spritearray__t.html#a3a692b3332da76d0b2202f8831ae77b5',1,'tram::Render::spritearray_t::vertex_array()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html#a615823889f7fb122e6eeffc9c4404ed2',1,'tram::Render::API::SWDrawListEntry::vertex_array()']]], ['vertex_5farrays_14',['vertex_arrays',['../namespacetram_1_1_render_1_1_a_p_i.html#af33e7d508d254e6d15926d063789d2a2',1,'tram::Render::API']]], ['vertex_5fbuffer_15',['vertex_buffer',['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#a58d427c9d7b5147bbbdc8d77a67d3891',1,'tram::Render::API::D3DDrawListEntry']]], ['vertex_5fbuffer_5fmetadata_16',['vertex_buffer_metadata',['../namespacetram_1_1_render_1_1_a_p_i.html#a7897c51fe39d6a65173b8f12bb3b6185',1,'tram::Render::API']]], ['vertex_5fcount_17',['vertex_count',['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#ab339e52985c6c382e0b314d2b4b8081c',1,'tram::Render::API::D3DDrawListEntry::vertex_count()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_vertex_array.html#add67c8209f7725b412aa0b3c24ab534f',1,'tram::Render::API::SWVertexArray::vertex_count()']]], ['vertex_5fformat_18',['vertex_format',['../structtram_1_1_render_1_1_a_p_i_1_1_vertex_buffer_metadata.html#a03f717cdd3ef607182b8a4865d1c7d64',1,'tram::Render::API::VertexBufferMetadata::vertex_format()'],['../classtram_1_1_render_1_1_model.html#af924ab3580f9d3e0b5fb773fa2afd8d8',1,'tram::Render::Model::vertex_format()']]], ['verticality_19',['verticality',['../structtram_1_1_render_1_1_sprite_vertex.html#a6368e6f15b611c6bcc3160bac1d80ca8',1,'tram::Render::SpriteVertex']]], ['vertices_20',['vertices',['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_vertex_array.html#ab33cd2e86d75d32f47c3071e186fc44d',1,'tram::Render::API::SWVertexArray::vertices()'],['../structtram_1_1_render_1_1_static_model_data.html#ad57619c7212131ac5bcef78c008e9bb0',1,'tram::Render::StaticModelData::vertices()'],['../structtram_1_1_render_1_1_dynamic_model_data.html#a95478c605a0c584ac6710fb1cc79c473',1,'tram::Render::DynamicModelData::vertices()']]], ['view_21',['view',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_matrices.html#a7251aa6f10820a419a8927fc4bdebf26',1,'tram::Render::API::ShaderUniformMatrices::view()'],['../namespacetram_1_1_render.html#af103c344516eb912ffbee889c05775cc',1,'tram::Render::view()']]], ['view_5ffov_22',['view_fov',['../namespacetram_1_1_render.html#af4c8e9b6a1eec2f0b34697baf4a4249c',1,'tram::Render']]], ['view_5fmatrix_23',['view_matrix',['../structtram_1_1_render_1_1_a_p_i_1_1_layer_parameters.html#ae5f470f758b077022ece9b02d9853b95',1,'tram::Render::API::LayerParameters']]], ['view_5fpos_24',['view_pos',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_matrices.html#ad95d2f70b74eb3b43089224555935caf',1,'tram::Render::API::ShaderUniformMatrices']]], ['view_5fposition_25',['view_position',['../structtram_1_1_render_1_1_a_p_i_1_1_layer_parameters.html#afd5f17ca5eda416d0f7f19344a60e5bd',1,'tram::Render::API::LayerParameters::view_position()'],['../namespacetram_1_1_render.html#ac04ea2d1a0ebf06f9737506c4a145349',1,'tram::Render::view_position()']]], ['view_5fproperties_26',['view_properties',['../namespacetram_1_1_render.html#a6d7d51d8e68a3a77b1015fa31e838e57',1,'tram::Render']]], ['view_5frotation_27',['view_rotation',['../namespacetram_1_1_render.html#a296b3bccc75faa4a1c6bfae290d673d6',1,'tram::Render']]], ['viewmodel_28',['viewmodel',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#ac9e52c97862461717796ec8e567cd506',1,'tram::Ext::Kitchensink::ItemClass']]], ['voffset_29',['voffset',['../structtram_1_1_render_1_1_sprite_vertex.html#a5fb739d8f642c69f87f111a8a668b001',1,'tram::Render::SpriteVertex']]], ['volume_30',['volume',['../classtram_1_1_sound.html#a08126edbad4f337264ff1206e96ef145',1,'tram::Sound::volume()'],['../classtram_1_1_world_cell.html#a8cc37dbda76f539084cba7950b355b22',1,'tram::WorldCell::volume()']]], ['vsync_31',['vsync',['../namespacetram_1_1_platform.html#a45688259010e30ccfd694bf81f4abc99',1,'tram::Platform']]] ]; ================================================ FILE: docs/cppapi/search/variables_16.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/variables_16.js ================================================ var searchData= [ ['w_0',['w',['../structtram_1_1_g_u_i_1_1_frame_object.html#aaa17bd9855c951ce25ef26a5e0c97cd6',1,'tram::GUI::FrameObject']]], ['walk_5fcollision_1',['walk_collision',['../classtram_1_1_f_p_s_controller_component.html#af2a12d9cc7a245087852634e14b9bb2d',1,'tram::FPSControllerComponent']]], ['walk_5fspeed_2',['walk_speed',['../classtram_1_1_f_p_s_controller_component.html#a1180c411c80596ee1d75daa987ce96f7',1,'tram::FPSControllerComponent::walk_speed()'],['../classtram_1_1_raycast_controller_component.html#ad0e8ba76175ff6d4adabaa860ea82bd3',1,'tram::RaycastControllerComponent::walk_speed()']]], ['wall_5fcollision_3',['wall_collision',['../classtram_1_1_raycast_controller_component.html#a4989dfffd26974233d53a1d6c4eb8407',1,'tram::RaycastControllerComponent']]], ['wallbonk_5fcallback_4',['wallbonk_callback',['../classtram_1_1_f_p_s_controller_component.html#a179230b5c2c207d38f12b1e784f00bb2',1,'tram::FPSControllerComponent::wallbonk_callback()'],['../classtram_1_1_raycast_controller_component.html#aa0b73d887c0b9349667c2dc9271e45cd',1,'tram::RaycastControllerComponent::wallbonk_callback()']]], ['weight_5',['weight',['../structtram_1_1_animation_component_1_1_animation_playback_info.html#ab88da3c134852e675a0a1b0138dd6b81',1,'tram::AnimationComponent::AnimationPlaybackInfo::weight()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state.html#ae1d093333e0433d071a618226768270e',1,'tram::Ext::Kitchensink::AnimState::weight()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#ad2e897d231ebf85514642793c8595175',1,'tram::Ext::Kitchensink::ItemClass::weight()']]], ['wgt_6',['wgt',['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#a0db7472217610a8c7032a85aeef22413',1,'tram::Render::API::DynamicVertex']]], ['wgt_5f1_7',['wgt_1',['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#a078c81bb38d4951accfc6df9c00a92d5',1,'tram::Render::API::DynamicVertex']]], ['wgt_5f2_8',['wgt_2',['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#a924179d40de8890d819f55b061c720dc',1,'tram::Render::API::DynamicVertex']]], ['wgt_5f3_9',['wgt_3',['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#a73488e66a1c64254438c49676239f567',1,'tram::Render::API::DynamicVertex']]], ['wgt_5fi_10',['wgt_i',['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#ab36ec5e7ab8d27a963c2a160a8dfe359',1,'tram::Render::API::DynamicVertex']]], ['width_11',['width',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#af21e13dba2bf5003456f23075e616c9f',1,'tram::Ext::Kitchensink::ItemClass::width()'],['../classtram_1_1_render_1_1_material.html#a39fdf6cc003568ca64a0b47af65d0cca',1,'tram::Render::Material::width()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_texture.html#ae907dbc5c37e4a1e92440c7518e242d6',1,'tram::Render::API::SWTexture::width()'],['../structtram_1_1_render_1_1_sprite_frame.html#ae3a9270cdf9fc55044ab6eea633efb58',1,'tram::Render::SpriteFrame::width()']]], ['worldcell_5flimit_12',['WORLDCELL_LIMIT',['../namespacetram.html#ab751286624cca492c1abca52f7e0be8c',1,'tram']]], ['worldcell_5ftransition_5flimit_13',['WORLDCELL_TRANSITION_LIMIT',['../namespacetram.html#a1423ecbdc7b2879d47ac484d812fda50',1,'tram']]], ['worldmodel_14',['worldmodel',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#af12183588fa7ee60e0f173f60a0e841a',1,'tram::Ext::Kitchensink::ItemClass']]], ['writer_15',['writer',['../classtram_1_1_file.html#ae80f51acbe4f7c016309d1525b00e25a',1,'tram::File']]], ['writer_5fparser_16',['writer_parser',['../classtram_1_1_file.html#a3a53d60bca18a5afefa92a1ed1b70bd1',1,'tram::File']]] ]; ================================================ FILE: docs/cppapi/search/variables_17.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/variables_17.js ================================================ var searchData= [ ['x_0',['x',['../structtram_1_1_ext_1_1_kitchensink_1_1_item_instance.html#aba27042000b273495cc18583b811d66a',1,'tram::Ext::Kitchensink::ItemInstance::x()'],['../structtram_1_1_g_u_i_1_1_frame_object.html#a5b80eddf57e0744b870d933958f2d70e',1,'tram::GUI::FrameObject::x()'],['../structtram_1_1_render_1_1_a_p_i_1_1_point2_d.html#acb12d46b028d44cca7d143396173c039',1,'tram::Render::API::Point2D::x()']]] ]; ================================================ FILE: docs/cppapi/search/variables_18.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/variables_18.js ================================================ var searchData= [ ['y_0',['y',['../structtram_1_1_ext_1_1_kitchensink_1_1_item_instance.html#ab1af2c957c7634bcd1d1ece6f0436c87',1,'tram::Ext::Kitchensink::ItemInstance::y()'],['../structtram_1_1_g_u_i_1_1_frame_object.html#a98e4cea97c1c2ceef0aa79ccf27749c2',1,'tram::GUI::FrameObject::y()'],['../structtram_1_1_render_1_1_a_p_i_1_1_point2_d.html#af783aee7c4be2562b7bc790843622c28',1,'tram::Render::API::Point2D::y()']]], ['yaw_1',['yaw',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#aa2a9d5accb0655fdb4185a73866bb13b',1,'tram::Ext::Camera::FirstPersonCamera']]] ]; ================================================ FILE: docs/cppapi/search/variables_2.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/variables_2.js ================================================ var searchData= [ ['callback_0',['callback',['../classtram_1_1_ext_1_1_menu_1_1_entity_picker.html#a8c023a757a11debd8fd69ed09164e78a',1,'tram::Ext::Menu::EntityPicker::callback()'],['../classtram_1_1_ext_1_1_menu_1_1_list_selection.html#a5651a090194d79d5ce22e0bca536b760',1,'tram::Ext::Menu::ListSelection::callback()'],['../structtram_1_1_async_1_1_resource_request.html#a18c34da06b9f3eea7875699d11781cc5',1,'tram::Async::ResourceRequest::callback()']]], ['callback_5fcount_1',['callback_count',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a78e5e9c142141e83c4060ac83702e261',1,'tram::Ext::Camera::FirstPersonCamera']]], ['callback_5fdata_2',['callback_data',['../structtram_1_1_async_1_1_resource_request.html#aa5757146bd87abef32ac1f65ff1965ea',1,'tram::Async::ResourceRequest']]], ['camera_3',['camera',['../main_8cpp.html#a9b1d1ad26dca3cdfbe7bcabb98c50bcd',1,'main.cpp']]], ['camera_5fmultiplier_4',['CAMERA_MULTIPLIER',['../namespacetram.html#a26aea911deb4f2a882fecaa9db2cca5f',1,'tram']]], ['camera_5fsensitivity_5',['CAMERA_SENSITIVITY',['../namespacetram_1_1_u_i.html#a2613ca9ec2e1a030b94d21e9e87281af',1,'tram::UI']]], ['camera_5fspeed_6',['CAMERA_SPEED',['../namespacetram_1_1_u_i.html#acf999f961120350df3549cff1d0c9b0c',1,'tram::UI']]], ['camera_5fsystem_7',['CAMERA_SYSTEM',['../namespacetram_1_1_ext_1_1_camera.html#a9ef902fd854a7068580fccde152ed56d',1,'tram::Ext::Camera']]], ['cell_8',['cell',['../classtram_1_1_ext_1_1_menu_1_1_world_cell_properties.html#af1e688384507e5243de02c997e49f8fc',1,'tram::Ext::Menu::WorldCellProperties::cell()'],['../classtram_1_1_entity.html#ad3fb3cd40bf0ec9c846a46704d4f7470',1,'tram::Entity::cell()']]], ['cell_5finto_9',['cell_into',['../classtram_1_1_transition.html#a0d8f2bf93f2ea1502d7ef4faf5a019c5',1,'tram::Transition']]], ['center_10',['center',['../structtram_1_1_render_1_1_sprite_point.html#abc7c9bdede266f19ac735648da416620',1,'tram::Render::SpritePoint']]], ['chamberpot_11',['chamberpot',['../main_8cpp.html#acc812653ff7db6ef5da9d01fbfd28f17',1,'main.cpp']]], ['channels_12',['channels',['../classtram_1_1_audio_1_1_sound.html#a946974537a8c3a039a9c49a4edb7f369',1,'tram::Audio::Sound::channels()'],['../structtram_1_1_audio_1_1_spatial_1_1_audio_buffer.html#aa356def298534b01ba646ab533a9340f',1,'tram::Audio::Spatial::AudioBuffer::channels()'],['../classtram_1_1_render_1_1_material.html#aa342a4e570d577fd626ee7999ca2fd2b',1,'tram::Render::Material::channels()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_texture.html#a964e2ce1c9da10fdb367faf75368e18d',1,'tram::Render::API::SWTexture::channels()']]], ['character_13',['character',['../structtram_1_1_ext_1_1_kitchensink_1_1_faction_rank.html#a9b34eaee9f8316ebd6bc36e3e30aaed6',1,'tram::Ext::Kitchensink::FactionRank::character()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_character_disposition.html#ad88789d2cf725bb4c89baf02e542a974',1,'tram::Ext::Kitchensink::CharacterDisposition::character()']]], ['character_5fclass_14',['character_class',['../classtram_1_1_ext_1_1_kitchensink_1_1_character.html#a2daf2dcab1aad5fbe67778562158b7b5',1,'tram::Ext::Kitchensink::Character']]], ['character_5fcount_15',['CHARACTER_COUNT',['../character_8cpp.html#af6d152c6a0610a977ca689f1a964a1cf',1,'character.cpp']]], ['children_16',['children',['../structtram_1_1_ext_1_1_kitchensink_1_1_entity_children.html#aa6ddfcd9329072939a5ee08991b275af',1,'tram::Ext::Kitchensink::EntityChildren']]], ['class_5fcount_17',['CLASS_COUNT',['../character_8cpp.html#a1b511158ca6796bb813f3bdb64369417',1,'character.cpp']]], ['clear_18',['clear',['../structtram_1_1_ext_1_1_kitchensink_1_1_inventory_factory_info.html#a05a7d18aa421d23935e61ad99cb4e23f',1,'tram::Ext::Kitchensink::InventoryFactoryInfo']]], ['clear_5fscreen_19',['clear_screen',['../namespacetram_1_1_render_1_1_a_p_i.html#a7f589aad0fe82884c1fc279e5f29092e',1,'tram::Render::API']]], ['co_20',['co',['../structtram_1_1_render_1_1_line_vertex.html#a19733733fc175c6d7892ecc8233ca9c3',1,'tram::Render::LineVertex::co()'],['../structtram_1_1_render_1_1_sprite_vertex.html#ac907370fcda98fc09892bf2d6b5ca589',1,'tram::Render::SpriteVertex::co()'],['../structtram_1_1_render_1_1_dynamic_model_vertex.html#abe2dcd54a8992ee1eb86927943ec84d4',1,'tram::Render::DynamicModelVertex::co()'],['../structtram_1_1_render_1_1_static_model_vertex.html#a03a02fdd57efe92a0436710cc9f35376',1,'tram::Render::StaticModelVertex::co()']]], ['col_21',['col',['../structtram_1_1_render_1_1_a_p_i_1_1_color_vertex.html#a9df94956349fae1207826426888b308c',1,'tram::Render::API::ColorVertex']]], ['collide_22',['collide',['../classtram_1_1_controller_component.html#a93abb6fa1349a41b93f53450817f9839',1,'tram::ControllerComponent']]], ['collider_23',['collider',['../structtram_1_1_physics_1_1_collision.html#a9f47771842fd66f970df994aaf4364ff',1,'tram::Physics::Collision']]], ['collision_5fcallback_24',['collision_callback',['../structtram_1_1_physics_1_1_a_p_i_1_1_rigidbody_metadata.html#a55749e240a2fd4f7dd0f86138f172181',1,'tram::Physics::API::RigidbodyMetadata']]], ['collision_5fdata_25',['collision_data',['../structtram_1_1_physics_1_1_a_p_i_1_1_rigidbody_metadata.html#a76f7624540258f9c63b2ec9d3cd564d7',1,'tram::Physics::API::RigidbodyMetadata']]], ['collision_5fflags_26',['collision_flags',['../structtram_1_1_physics_1_1_a_p_i_1_1_rigidbody_metadata.html#a244fc4d3569fdb5dcf085618c9e43994',1,'tram::Physics::API::RigidbodyMetadata']]], ['collision_5fgroup_27',['collision_group',['../classtram_1_1_f_p_s_controller_component.html#a2b9917a31e94c6ba8f331dfc19184299',1,'tram::FPSControllerComponent::collision_group()'],['../classtram_1_1_raycast_controller_component.html#a61464776123849a63632483d70f9f099',1,'tram::RaycastControllerComponent::collision_group()'],['../structtram_1_1_physics_1_1_a_p_i_1_1_rigidbody_metadata.html#afa6c56afdaf9c872476e22c40c377ead',1,'tram::Physics::API::RigidbodyMetadata::collision_group()'],['../namespacetram.html#a47a4bfe3c127f07cf4fa3a20e3785f8a',1,'tram::collision_group()']]], ['collision_5fheight_28',['collision_height',['../classtram_1_1_f_p_s_controller_component.html#a87c5ec8a494fd31a64e42492959673ed',1,'tram::FPSControllerComponent::collision_height()'],['../classtram_1_1_raycast_controller_component.html#a77d4b6aa40aaff452eb3793ddf9f087a',1,'tram::RaycastControllerComponent::collision_height()'],['../namespacetram.html#a73098ef9a80f90afd7d8f6ff04e420b9',1,'tram::collision_height()']]], ['collision_5fheight_5fcrouch_29',['collision_height_crouch',['../namespacetram.html#a7cc6a6286e4acb91210a3c71fb8e805f',1,'tram::collision_height_crouch()'],['../classtram_1_1_f_p_s_controller_component.html#aca171f9f6200c93a0dd9dadab48cfa04',1,'tram::FPSControllerComponent::collision_height_crouch()']]], ['collision_5fmask_30',['collision_mask',['../structtram_1_1_physics_1_1_a_p_i_1_1_rigidbody_metadata.html#a3a4939cc208da60f4699370c0cd06cfb',1,'tram::Physics::API::RigidbodyMetadata::collision_mask()'],['../structtram_1_1_physics_1_1_a_p_i_1_1_shapecast_callback.html#a484204bd5bd9c58a35435ea149de92b0',1,'tram::Physics::API::ShapecastCallback::collision_mask()'],['../classtram_1_1_trigger.html#acd2708416416c4ecefaaf3d58022fe68',1,'tram::Trigger::collision_mask()']]], ['collision_5fwidth_31',['collision_width',['../namespacetram.html#a1759e20de49502fc468e5b65e7baf481',1,'tram::collision_width()'],['../classtram_1_1_f_p_s_controller_component.html#a039b23d22ab01048dfacf106b1f33781',1,'tram::FPSControllerComponent::collision_width()'],['../classtram_1_1_raycast_controller_component.html#a68e41561de1361f67cb1782d0dc0a97f',1,'tram::RaycastControllerComponent::collision_width()']]], ['collisions_32',['collisions',['../structtram_1_1_physics_1_1_a_p_i_1_1_shapecast_callback.html#a47ade4608bfdc01f7b7b9bdf9afacac8',1,'tram::Physics::API::ShapecastCallback']]], ['collmodel_33',['collmodel',['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_shape.html#a9ad7471be8c0660f00e4f383673cd811',1,'tram::Ext::Kitchensink::DebugShape::collmodel()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_autosave.html#a0d72864744e1e06e95d53d7dfad8e775',1,'tram::Ext::Kitchensink::TriggerAutosave::collmodel()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_hurt.html#a6c79786157db20e80cc05ac169212de7',1,'tram::Ext::Kitchensink::TriggerHurt::collmodel()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_once.html#a6aaf60e131f0300688ae31d33413e4e0',1,'tram::Ext::Kitchensink::TriggerOnce::collmodel()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_multiple.html#a46495b4ffb89238697269f7dde7ba3f8',1,'tram::Ext::Kitchensink::TriggerMultiple::collmodel()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_remove.html#ac318ecbabe95dcb0beedd361a048cbaa',1,'tram::Ext::Kitchensink::TriggerRemove::collmodel()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_teleport.html#a413cebe7dae0b94c8445d9cc4692d88a',1,'tram::Ext::Kitchensink::TriggerTeleport::collmodel()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_player_movement.html#a6bcb6e7ecadc6d10fc9cb87afab88539',1,'tram::Ext::Kitchensink::TriggerPlayerMovement::collmodel()'],['../classtram_1_1_crate.html#a739363f4998b4e6367a8dbc620156a34',1,'tram::Crate::collmodel()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_breakable.html#a9dd4b432726ee750a3c86fff4e6886ee',1,'tram::Ext::Kitchensink::Breakable::collmodel()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_water.html#a7814a30089783833b4f13ab9f009b4ea',1,'tram::Ext::Kitchensink::Water::collmodel()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_train.html#a0ffb909fcfd24bf1eb7e1abd23af9e88',1,'tram::Ext::Kitchensink::Train::collmodel()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_pickup.html#a0ca93c8adc4f2ef76393b972dc9decaf',1,'tram::Ext::Kitchensink::Pickup::collmodel()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_text.html#a9d06ca5c12e96a67c3f5560ad8832215',1,'tram::Ext::Kitchensink::DebugText::collmodel()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_push.html#a3c59dbb31bfa17213ffd45b84c655a5c',1,'tram::Ext::Kitchensink::TriggerPush::collmodel()']]], ['color_34',['color',['../structtram_1_1_render_1_1_sprite_vertex.html#add933d35ed49d8979c02c6a817bf347e',1,'tram::Render::SpriteVertex::color()'],['../structtram_1_1_render_1_1_line_vertex.html#a89e5b2b41533702bef6a605c4443de40',1,'tram::Render::LineVertex::color()'],['../structtram_1_1_render_1_1_sprite_point.html#ae6af3c7ee1e7f4b5e23b31fd159fbd1e',1,'tram::Render::SpritePoint::color()'],['../classtram_1_1_light_component.html#a9613f69281a1170cd3465920fc8254ef',1,'tram::LightComponent::color()'],['../classtram_1_1_render_component.html#a3802d623d0009f2649888be1a23dfba4',1,'tram::RenderComponent::color()'],['../classtram_1_1_light.html#ac704c0af1a53820b9dcbcaa991650787',1,'tram::Light::color()'],['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#aff53e1b18af098752ef32e98869439e7',1,'tram::Render::API::D3DDrawListEntry::color()'],['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_light.html#a5fd841ddfed89181a99b82c83f26298a',1,'tram::Render::API::D3DLight::color()'],['../structtram_1_1_render_1_1_a_p_i_1_1_f_v_f_helper.html#ace2a0fa5572ce1b168fe94cb20ec08a2',1,'tram::Render::API::FVFHelper::color()'],['../structtram_1_1_render_1_1_a_p_i_1_1_line_vertex.html#a7881817677d8099c98465c08652c6588',1,'tram::Render::API::LineVertex::color()'],['../classtram_1_1_render_1_1_material.html#a22ce9caef788daf431d1e339fe72423d',1,'tram::Render::Material::color()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_light.html#a78cdd846a56cbb9ca8d7085a04a0edde',1,'tram::Render::API::GLLight::color()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_material.html#ae6842cdc5bd66c705914b4d4b11a61a8',1,'tram::Render::API::GLMaterial::color()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_light.html#ac7bf8ca7901ad82b4055cca7a9f17929',1,'tram::Render::API::SWLight::color()'],['../structtram_1_1_render_1_1_a_p_i_1_1_f_f_p_helper.html#accf51615aa39c47f2218b2a2b54da19e',1,'tram::Render::API::FFPHelper::color()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html#a63460358088c63ffeb9c361e7ac8398f',1,'tram::Render::API::SWDrawListEntry::color()']]], ['colorlines_35',['colorlines',['../namespacetram_1_1_render.html#a4fbef4fea80d616dcb5ca311f69e32d6',1,'tram::Render']]], ['colorlines_5fentry_36',['colorlines_entry',['../namespacetram_1_1_render.html#afdc87f9f25286c1ac68113e173db9c65',1,'tram::Render']]], ['colorlines_5fvertex_5farray_37',['colorlines_vertex_array',['../namespacetram_1_1_render.html#a56939aaf0348435b0e53119c4df5ce6f',1,'tram::Render']]], ['colors_38',['colors',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#ac329ee9b6d3154d5f81d1cb322bdb464',1,'tram::Render::API::GLDrawListEntry::colors()'],['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#a65ce88387a56b47a03820d4c69aa38f7',1,'tram::Render::API::ShaderUniformModelMatrices::colors()']]], ['comparison_39',['comparison',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a21b68aede57e29c31f3abac8c0c4fef6',1,'tram::Ext::Kitchensink::QuestVariable']]], ['compartment_40',['compartment',['../structtram_1_1_ext_1_1_kitchensink_1_1_item_instance.html#a16fa6fa3ba81cb1533d9eb56446e7090',1,'tram::Ext::Kitchensink::ItemInstance']]], ['compartments_41',['compartments',['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#a2a252220bb1ea4bd2303bb6b54cfeba7',1,'tram::Ext::Kitchensink::Inventory']]], ['component_42',['component',['../structtram_1_1_listener_info.html#aee7f801b96773125388c51639472d1bf',1,'tram::ListenerInfo::component()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_animation_state_component.html#ad3332339eb0ad584e6dea173f1a03ad7',1,'tram::Ext::Kitchensink::AnimationStateComponent::component()']]], ['component_5flimit_5fanimation_43',['COMPONENT_LIMIT_ANIMATION',['../namespacetram.html#aefb7b9aa5163a6725fc02bde6672b88f',1,'tram']]], ['component_5flimit_5faudio_44',['COMPONENT_LIMIT_AUDIO',['../namespacetram.html#a7db4cca9ab5ecae0d8d4de7effd6aec5',1,'tram']]], ['component_5flimit_5fcontroller_45',['COMPONENT_LIMIT_CONTROLLER',['../namespacetram.html#a66281a5ccd6da73b86dd9a2ba49585a2',1,'tram']]], ['component_5flimit_5fdecal_46',['COMPONENT_LIMIT_DECAL',['../namespacetram.html#a38c17cf408e9c052cf6e8250250ef68f',1,'tram']]], ['component_5flimit_5flight_47',['COMPONENT_LIMIT_LIGHT',['../namespacetram.html#a0351a7a038c0c51bf2e41a37bb54702c',1,'tram']]], ['component_5flimit_5fparticle_48',['COMPONENT_LIMIT_PARTICLE',['../namespacetram.html#a1ef1096144023efed74009fd55ff4668',1,'tram']]], ['component_5flimit_5fphysics_49',['COMPONENT_LIMIT_PHYSICS',['../namespacetram.html#aef0b54c575d166021a519456e745e5a8',1,'tram']]], ['component_5flimit_5fplayer_50',['COMPONENT_LIMIT_PLAYER',['../namespacetram.html#a8d062bfaaf077ec23a49b1e932f27b6a',1,'tram']]], ['component_5flimit_5frender_51',['COMPONENT_LIMIT_RENDER',['../namespacetram.html#afdf2b176e856c8c025e6c5a05b376f2f',1,'tram']]], ['component_5flimit_5fsprite_52',['COMPONENT_LIMIT_SPRITE',['../namespacetram.html#a5099d59ad2cf7be3d5f16024f0a1443d',1,'tram']]], ['component_5flimit_5ftrigger_53',['COMPONENT_LIMIT_TRIGGER',['../namespacetram.html#abf691e9b98162d05d0b235cf0f3d9387',1,'tram']]], ['condition_54',['condition',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_trigger.html#a8b50d062701669c3cd83ae8f4ecced33',1,'tram::Ext::Kitchensink::QuestTrigger::condition()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_topic.html#aa78509b95f65ce2d8974875004cd736f',1,'tram::Ext::Kitchensink::DialogTopic::condition()']]], ['console_5flogs_55',['console_logs',['../namespacetram_1_1_ext_1_1_menu.html#af86d588e63468dd9f7b354da13f18124',1,'tram::Ext::Menu']]], ['constants_56',['constants',['../structtram_1_1_render_1_1_light_graph_1_1_node.html#aa9aec84624a3677767c4ba9f1e593a35',1,'tram::Render::LightGraph::Node']]], ['constr_5ffunc_57',['constr_func',['../structtram_1_1_scriptable_type_1_1_scriptable_type_info.html#a54731a0f6990e3594ea9973b38848e1f',1,'tram::ScriptableType::ScriptableTypeInfo']]], ['constructor_58',['constructor',['../structtram_1_1_entity_type_info.html#a6f02871ebb50c56b606338eb05d0e11f',1,'tram::EntityTypeInfo']]], ['controllercomponent_59',['controllercomponent',['../classtram_1_1_player.html#a9a9d322035d6f80a89abf2e67337c52e',1,'tram::Player']]], ['coordinate_60',['coordinate',['../structtram_1_1_render_1_1_a_p_i_1_1_clip_point.html#a9358b7eaf18d3e55f16ed4837a736612',1,'tram::Render::API::ClipPoint']]], ['coords_61',['coords',['../structtram_1_1_particle_component_1_1_particle.html#abda26a74eb7cae259f526ae455d912f2',1,'tram::ParticleComponent::Particle']]], ['count_62',['count',['../classtram_1_1_queue.html#aa896915df22a178fe292fc763131184c',1,'tram::Queue::count()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a5c5f6e13ed0ceddb4b4507c59db2423d',1,'tram::Ext::Kitchensink::QuestVariable::count()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_item_instance.html#af357d83441c2dc2f703d809fdc3585a0',1,'tram::Ext::Kitchensink::ItemInstance::count()']]], ['crouch_5fcollision_63',['crouch_collision',['../classtram_1_1_f_p_s_controller_component.html#aef3a06f85b58004fca42a4c42f5249c5',1,'tram::FPSControllerComponent']]], ['crouch_5fspeed_64',['crouch_speed',['../classtram_1_1_raycast_controller_component.html#ac4fb92ffbcee998d0d015535549f763d',1,'tram::RaycastControllerComponent::crouch_speed()'],['../classtram_1_1_f_p_s_controller_component.html#ae9f922b8e4f7224dbae472337193752d',1,'tram::FPSControllerComponent::crouch_speed()']]], ['crouching_65',['crouching',['../classtram_1_1_raycast_controller_component.html#aa6bcf9e2bb535b216000806c8750f5bf',1,'tram::RaycastControllerComponent::crouching()'],['../classtram_1_1_f_p_s_controller_component.html#a21405af6b1d6b8fda3258d50960428cb',1,'tram::FPSControllerComponent::crouching()']]], ['csize_66',['csize',['../classtram_1_1_queue.html#afa65ddd7ad10c02cefc507a06c4cbbd1',1,'tram::Queue']]], ['current_5fmonitor_67',['current_monitor',['../namespacetram_1_1_platform.html#ac2ffb1c1eceb5cc52cb771ab6f1f0b26',1,'tram::Platform']]], ['current_5fvertex_5fcount_68',['current_vertex_count',['../structtram_1_1_render_1_1_a_p_i_1_1_vertex_buffer_metadata.html#ae6f0ee162005ad6d33c0209241cce706',1,'tram::Render::API::VertexBufferMetadata']]], ['cursor_5fx_69',['cursor_x',['../structtram_1_1_g_u_i_1_1_frame_object.html#a0262f15becf5e99247d3cdf051548501',1,'tram::GUI::FrameObject']]], ['cursor_5fy_70',['cursor_y',['../structtram_1_1_g_u_i_1_1_frame_object.html#adced63c254bc9b79b3f1d2ad5f07943e',1,'tram::GUI::FrameObject']]], ['cycles_5fsince_5flast_5fhit_71',['cycles_since_last_hit',['../structtram_1_1_audio_1_1_spatial_1_1_path_tracing_result.html#a4f0cda1076cd190d46c1a0f03e9f9f44',1,'tram::Audio::Spatial::PathTracingResult::cycles_since_last_hit()'],['../structtram_1_1_audio_1_1_spatial_1_1_path_exploration_result.html#aebc3bf33c046d283ef6fe0b83a8e73ff',1,'tram::Audio::Spatial::PathExplorationResult::cycles_since_last_hit()']]] ]; ================================================ FILE: docs/cppapi/search/variables_3.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/variables_3.js ================================================ var searchData= [ ['d3d_0',['d3d',['../structtram_1_1_render_1_1drawlistentry__t.html#acb9edd62e1b55899b00774b19239001a',1,'tram::Render::drawlistentry_t::d3d()'],['../structtram_1_1_render_1_1light__t.html#a79b25b22803214088591ba7e3f9816d5',1,'tram::Render::light_t::d3d()'],['../structtram_1_1_render_1_1material__t.html#a8fb78cd8900865b9c344ca0a026e15d5',1,'tram::Render::material_t::d3d()']]], ['d3d_5findex_5fbuffer_1',['d3d_index_buffer',['../structtram_1_1_render_1_1indexarray__t.html#a0446d36e56fb1aefc070c9b5b0ee64a3',1,'tram::Render::indexarray_t']]], ['d3d_5fmetadata_2',['d3d_metadata',['../structtram_1_1_render_1_1vertexarray__t.html#ace7fc23faf01f8916c670a611c9997be',1,'tram::Render::vertexarray_t']]], ['d3d_5ftexture_5fhandle_3',['d3d_texture_handle',['../structtram_1_1_render_1_1texturehandle__t.html#a52a3d65c111609ceea98acc5efcd735e',1,'tram::Render::texturehandle_t']]], ['d3d_5fvertex_5fbuffer_4',['d3d_vertex_buffer',['../structtram_1_1_render_1_1vertexarray__t.html#a5f4fecb59b0b4c52b656d6bf8f8a5f8e',1,'tram::Render::vertexarray_t']]], ['data_5',['data',['../structtram_1_1_audio_1_1_spatial_1_1_audio_buffer.html#a88c6843050757be44715ec68be75aee7',1,'tram::Audio::Spatial::AudioBuffer::data()'],['../structtram_1_1_listener_info.html#aa652abf363801df8691b1700d5531af0',1,'tram::ListenerInfo::data()'],['../structtram_1_1_event.html#a877f4911d3811c501fdb4841aae78d10',1,'tram::Event::data()'],['../structtram_1_1_message.html#af2dcffd8b7a243a909af718abcac4925',1,'tram::Message::data()'],['../structtram_1_1_signal.html#ae11edb11f1051d538fd09157108bed26',1,'tram::Signal::data()'],['../structtram_1_1_render_1_1_a_a_b_b_1_1_query_response.html#aee216817295b389fd464292129006984',1,'tram::Render::AABB::QueryResponse::data()'],['../structtram_1_1_octree_1_1_node.html#ae7e2eb79df26b8c7877defbe17d2e8eb',1,'tram::Octree::Node::data()']]], ['data_5ffunction_6',['data_function',['../structtram_1_1_listener_info.html#a2e4f01f36470ce06dd3565b51838a722',1,'tram::ListenerInfo']]], ['data_5fint_7',['data_int',['../structtram_1_1_event.html#a6f907880059f690671dda82db28439f5',1,'tram::Event::data_int()'],['../structtram_1_1_message.html#aa694cba3fcc077563b3d47e36a818494',1,'tram::Message::data_int()']]], ['data_5fpointer_8',['data_pointer',['../classtram_1_1_physics_1_1_a_p_i_1_1_callback_motion_state.html#ae865860d86b2764693cf6e37a49c7d97',1,'tram::Physics::API::CallbackMotionState']]], ['data_5fvalue_9',['data_value',['../structtram_1_1_event.html#ac2c8fdcc08e45feb8b90b6899e69e319',1,'tram::Event::data_value()'],['../structtram_1_1_message.html#af0bef4c3d63c5908c15440636071d25d',1,'tram::Message::data_value()']]], ['debug_5fmenu_10',['debug_menu',['../namespacetram_1_1_ext_1_1_menu.html#a97df158550c8ac0179e812214570003b',1,'tram::Ext::Menu']]], ['debugtext_5fentry_11',['debugtext_entry',['../namespacetram_1_1_render.html#a2e1e2410b7586fbd9fcc9ac537f6b58c',1,'tram::Render']]], ['debugtext_5fvertex_5farray_12',['debugtext_vertex_array',['../namespacetram_1_1_render.html#aef5acbc59557fb9733ae605596cb9ab4',1,'tram::Render']]], ['decoration_5fflags_13',['decoration_flags',['../classtram_1_1_decoration.html#a1d99378203e46938e612013702b092d6',1,'tram::Decoration']]], ['default_5fcompartment_14',['default_compartment',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a153ebc85b2da1604a680fc0556f54578',1,'tram::Ext::Kitchensink::ItemClass']]], ['definition_15',['definition',['../structtram_1_1_render_1_1_registered_vertex_definition.html#a6838d38a4634cb93fb1b8def21470fa0',1,'tram::Render::RegisteredVertexDefinition']]], ['delay_16',['delay',['../structtram_1_1_signal.html#ac598b7c14aded31cbd9b2eedb4e5dfe0',1,'tram::Signal']]], ['depth_17',['depth',['../structtram_1_1_render_1_1_a_p_i_1_1_point2_d.html#a990ab3ba3b03564739d41f9645cd2f30',1,'tram::Render::API::Point2D']]], ['derp_18',['derp',['../main_8cpp.html#a8bb2bbfa377225bdc2575d60f73eb24d',1,'main.cpp']]], ['derp_5fplayer_19',['derp_player',['../main_8cpp.html#a705d8710b0919174ceba4c291f26824b',1,'main.cpp']]], ['destr_5ffunc_20',['destr_func',['../structtram_1_1_scriptable_type_1_1_scriptable_type_info.html#a60e82d60aa627ae742b2092a4e0c51e9',1,'tram::ScriptableType::ScriptableTypeInfo']]], ['destructor_21',['destructor',['../structtram_1_1_entity_type_info.html#aa4106992bfbeb9121dee27f03bc67fc2',1,'tram::EntityTypeInfo']]], ['dimensions_22',['dimensions',['../structtram_1_1_render_1_1_sprite_point.html#ae43f9f3709a9cf44fb321dee4b2c336a',1,'tram::Render::SpritePoint']]], ['dingbat_23',['dingbat',['../main_8cpp.html#a39e40a8e7cee2dd7c112dcd36fe20cb6',1,'main.cpp']]], ['direction_24',['direction',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_light.html#a58b24ce258b313935592f59caa960391',1,'tram::Render::API::GLLight::direction()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_light.html#ae2ce38d13d603acace4061af8a68e421',1,'tram::Render::API::SWLight::direction()'],['../structtram_1_1_audio_1_1_spatial_1_1_path_from_audio_source.html#a0daad3712479c354367bbb338368f6a7',1,'tram::Audio::Spatial::PathFromAudioSource::direction()'],['../classtram_1_1_light_component.html#ae3d891ff89275a995fddeda744b085cf',1,'tram::LightComponent::direction()'],['../classtram_1_1_light.html#ab4a742307b9c463eef63115ad3b19ae3',1,'tram::Light::direction()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a96280d02e43933a1164d053405b673b1',1,'tram::Ext::Kitchensink::Button::direction()'],['../classtram_1_1_path_follower.html#ab026659adb3008a000bb00753cc74e07',1,'tram::PathFollower::direction()'],['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_light.html#aead638bd05a0ed7dc438c22814381fd5',1,'tram::Render::API::D3DLight::direction()']]], ['disposition_25',['disposition',['../structtram_1_1_ext_1_1_kitchensink_1_1_faction_relation.html#a2036e1b6447ae394e0a9e429f744e765',1,'tram::Ext::Kitchensink::FactionRelation::disposition()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_character_disposition.html#a6f7910b8365a22cfa1b26fc7927df5f7',1,'tram::Ext::Kitchensink::CharacterDisposition::disposition()']]], ['dispositions_26',['dispositions',['../classtram_1_1_ext_1_1_kitchensink_1_1_character.html#a3bb575e1785d96a33747804dc658bffc',1,'tram::Ext::Kitchensink::Character']]], ['distance_27',['distance',['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a07df9007e2a4fa2938fe69f78e2db2c0',1,'tram::Ext::Kitchensink::Button::distance()'],['../structtram_1_1_physics_1_1_a_p_i_1_1_object_collision.html#ab97dd0b0dde2624c20f0b1c9551d91ad',1,'tram::Physics::API::ObjectCollision::distance()'],['../structtram_1_1_physics_1_1_collision.html#ae80a8d88309f42e12b2fa84e0e8809a8',1,'tram::Physics::Collision::distance()'],['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_light.html#a67a2716e3f6f00f40642d9db82569271',1,'tram::Render::API::D3DLight::distance()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_light.html#a99216bd4b9cc9d114f1a17f41d77faab',1,'tram::Render::API::GLLight::distance()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_light.html#a9068a6c1a70d5227827ec2d85e8c1c67',1,'tram::Render::API::SWLight::distance()'],['../structtram_1_1_octree_1_1_nearest_search.html#aa6bbbfe8160af656016aa78c0fb106f2',1,'tram::Octree::NearestSearch::distance()'],['../structtram_1_1_render_1_1_light_tree_1_1_light.html#ae6f7549b89b1f8e6fd5a6c6c8c37f858',1,'tram::Render::LightTree::Light::distance()'],['../structtram_1_1_audio_1_1_spatial_1_1_path_tracing_result.html#abf8c49606dda008b43d5035691a72549',1,'tram::Audio::Spatial::PathTracingResult::distance()'],['../classtram_1_1_light_component.html#a97341de0a9ff1c7ebd0d9ae721af0bac',1,'tram::LightComponent::distance()'],['../classtram_1_1_light.html#a8ebcbf936a12dbcef52e33fe7efe4653',1,'tram::Light::distance()']]], ['distance_5fdelay_28',['distance_delay',['../structtram_1_1_audio_1_1_spatial_1_1_path_rendering_info.html#ae2caac1002a91fa0d362a3edbf3cb45e',1,'tram::Audio::Spatial::PathRenderingInfo']]], ['draw_5flist_29',['draw_list',['../namespacetram_1_1_render_1_1_a_p_i.html#a9ee5db9b2d1a8b354779f2a611792671',1,'tram::Render::API']]], ['draw_5flist_5fentries_30',['draw_list_entries',['../classtram_1_1_render_component.html#a593b1a595fd07f68a4c4aa3fdfeb33c4',1,'tram::RenderComponent']]], ['draw_5flist_5fentry_31',['draw_list_entry',['../classtram_1_1_decal_component.html#a3e8165999c84aaa7af2d92e22b0e19cf',1,'tram::DecalComponent::draw_list_entry()'],['../classtram_1_1_particle_component.html#ac7bc366fee1d155a6f7f60ca1c7474cc',1,'tram::ParticleComponent::draw_list_entry()'],['../classtram_1_1_sprite_component.html#ab8df644a8df43af1ffdf9de7ce156ac8',1,'tram::SpriteComponent::draw_list_entry()']]], ['draw_5frender_5fdebug_32',['DRAW_RENDER_DEBUG',['../namespacetram_1_1_render.html#a0328476aed6f9a79b37ead38c539d30b',1,'tram::Render']]], ['dynamic_5fvertex_5ffvf_33',['DYNAMIC_VERTEX_FVF',['../namespacetram_1_1_render_1_1_a_p_i.html#a1c2a4d0725f893593398cf0a61aa69a2',1,'tram::Render::API']]] ]; ================================================ FILE: docs/cppapi/search/variables_4.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/variables_4.js ================================================ var searchData= [ ['ebolen_0',['eboLen',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#a28960b58e1684771943364ceddfe4917',1,'tram::Render::API::GLDrawListEntry']]], ['ebooff_1',['eboOff',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#a865e421a077ef2c6fafe376311afe40a',1,'tram::Render::API::GLDrawListEntry']]], ['edge_5finfos_2',['edge_infos',['../classtram_1_1_path.html#a296e431440d4a7572afa87217fd46996',1,'tram::Path']]], ['edges_3',['edges',['../classtram_1_1_audio_1_1_sound_graph.html#a6862a1fe3026f98bafee3fc0cf8c465e',1,'tram::Audio::SoundGraph::edges()'],['../structtram_1_1_node.html#a28d12d5232b5f9651565664e0eae3cce',1,'tram::Node::edges()'],['../classtram_1_1_graph.html#a4c1e9f785fe9ac3fe2665d073f2a6722',1,'tram::Graph::edges()'],['../classtram_1_1_render_1_1_light_graph.html#a076e24396cd1802aa4abbd69d49e1c8d',1,'tram::Render::LightGraph::edges()']]], ['eerp_4',['eerp',['../main_8cpp.html#ad4a7109a74a328b58d1568997f025a46',1,'main.cpp']]], ['effective_5fvalue_5',['effective_value',['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute.html#a9bccf3052c467ffcd74f2d542dfa7112',1,'tram::Ext::Kitchensink::Attribute']]], ['effects_6',['effects',['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container.html#a71f44dcd6e534fd2366ee31be69497ae',1,'tram::Ext::Kitchensink::AttributeContainer::effects()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#ad45de9b346dd461a8529e23a44e0dde4',1,'tram::Ext::Kitchensink::ItemClass::effects()']]], ['emission_5frate_7',['emission_rate',['../classtram_1_1_particle_component.html#a1d1a56c1b5c8ce7539663dba1d485c32',1,'tram::ParticleComponent']]], ['emitter_8',['emitter',['../structtram_1_1_ext_1_1_menu_1_1_event_intercept.html#a4e5f06420a95be438108f03861401004',1,'tram::Ext::Menu::EventIntercept']]], ['enabled_9',['enabled',['../classtram_1_1_raycast_controller_component.html#aa5342f7e4fb16df60863ed8831887d75',1,'tram::RaycastControllerComponent']]], ['end_10',['end',['../structtram_1_1_render_1_1_a_p_i_1_1_scanline.html#a4d94aa4b204cb90a9455e131a24e3909',1,'tram::Render::API::Scanline']]], ['end_5fadv_11',['end_adv',['../structtram_1_1_render_1_1_a_p_i_1_1_scanline.html#ab5319d20339ecf03164380c91dbbdb33',1,'tram::Render::API::Scanline']]], ['end_5fp0_12',['end_p0',['../structtram_1_1_render_1_1_a_p_i_1_1_scanline.html#aa91f1dea5fe7fb9dd33fd4f0533bfc49',1,'tram::Render::API::Scanline']]], ['end_5fp1_13',['end_p1',['../structtram_1_1_render_1_1_a_p_i_1_1_scanline.html#aca649d2fe5fff4af41971c73edca2e1c',1,'tram::Render::API::Scanline']]], ['entities_14',['entities',['../classtram_1_1_world_cell.html#a2c0e438bdf14ec661b99ce78df3a6e22',1,'tram::WorldCell::entities()'],['../classtram_1_1_render_1_1_light_graph.html#a5ecc9ba96984a2e7fc95704c46b98049',1,'tram::Render::LightGraph::entities()']]], ['entity_15',['entity',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a6cbf029ca43aa8a9780b4beb654d65be',1,'tram::Ext::Kitchensink::QuestVariable::entity()'],['../classtram_1_1_ext_1_1_menu_1_1_entity_properties.html#acf1bf7e593e36cb4b389c6632623b0e3',1,'tram::Ext::Menu::EntityProperties::entity()'],['../structtram_1_1_listener_info.html#a91672b06dda91ac838e8f21fa43afb32',1,'tram::ListenerInfo::entity()']]], ['entity_5fid_16',['entity_id',['../classtram_1_1_ext_1_1_menu_1_1_message_send.html#a4a0c4f4d89dead8b68cdf556558bf446',1,'tram::Ext::Menu::MessageSend::entity_id()'],['../classtram_1_1_ext_1_1_menu_1_1_signal_menu.html#a1b88163f3d0384c8d005d5457a75c923',1,'tram::Ext::Menu::SignalMenu::entity_id()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_character.html#a9d2a11a8e15e555048c4c5213023ce32',1,'tram::Ext::Kitchensink::Character::entity_id()']]], ['entity_5flimit_17',['ENTITY_LIMIT',['../namespacetram.html#a0ddcd411f4af0e1052aa1c3341eb7e4d',1,'tram']]], ['entity_5ftype_5flimit_18',['ENTITY_TYPE_LIMIT',['../namespacetram.html#aa3d5c2a5f250a9d674df10bdfa5904d2',1,'tram']]], ['environment_5fmap_19',['environment_map',['../structtram_1_1_render_1_1_light_graph_1_1_node.html#aee5b13a5643db5232b8a49eeafbdc3f5',1,'tram::Render::LightGraph::Node']]], ['environmentmap_20',['environmentmap',['../classtram_1_1_render_component.html#ae8e60fbf5d87ba817101190869396393',1,'tram::RenderComponent::environmentmap()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#aaf126029f650661e7a83c6a054f57308',1,'tram::Render::API::GLDrawListEntry::environmentmap()']]], ['equipped_21',['equipped',['../structtram_1_1_ext_1_1_kitchensink_1_1_item_instance.html#a8a5bc739c95aa6b49e82d5b4325d250f',1,'tram::Ext::Kitchensink::ItemInstance::equipped()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#a8cd3c4606f66405f417609f1c45e9e78',1,'tram::Ext::Kitchensink::Inventory::equipped()']]], ['equipped_5fslot_22',['equipped_slot',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a13ad05e4fa0c7e16c8982ae4b2b54e25',1,'tram::Ext::Kitchensink::ItemClass']]], ['event_5ftype_23',['event_type',['../classtram_1_1_ext_1_1_menu_1_1_event_emit.html#a3a3692407b1c476b25a80d299caa09a1',1,'tram::Ext::Menu::EventEmit']]], ['exponent_24',['exponent',['../classtram_1_1_light_component.html#af28678281fb5b2012af9bba987aaf2f4',1,'tram::LightComponent::exponent()'],['../classtram_1_1_light.html#a0b11cd3d1f0ba7c48345eb54134848c3',1,'tram::Light::exponent()'],['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_light.html#a035db274a74493fd1c49bb5c7b2229c7',1,'tram::Render::API::D3DLight::exponent()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_light.html#a0bbe7d80789eab7c5206ce463e320f3f',1,'tram::Render::API::GLLight::exponent()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_light.html#a1838c501762f397cdd64335cced1e092',1,'tram::Render::API::SWLight::exponent()']]], ['ext_5fkitchensink_5fanimationtable_5flimit_25',['EXT_KITCHENSINK_ANIMATIONTABLE_LIMIT',['../namespacetram.html#af1919b7d31f90785f9b208acbdeb8576',1,'tram']]], ['ext_5fkitchensink_5fsoundtable_5flimit_26',['EXT_KITCHENSINK_SOUNDTABLE_LIMIT',['../namespacetram.html#a16fcee576d8ededdde2fb49658013315',1,'tram']]], ['extent_5fx_27',['extent_x',['../structtram_1_1_physics_1_1_collision_shape.html#a4350269fc3bb66af08e57cc8051457c5',1,'tram::Physics::CollisionShape']]], ['extent_5fy_28',['extent_y',['../structtram_1_1_physics_1_1_collision_shape.html#aab4dbf0584616aab6910c8a070c70a26',1,'tram::Physics::CollisionShape']]], ['extent_5fz_29',['extent_z',['../structtram_1_1_physics_1_1_collision_shape.html#a863758c71ebd465cb595af8e3320f456',1,'tram::Physics::CollisionShape']]] ]; ================================================ FILE: docs/cppapi/search/variables_5.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/variables_5.js ================================================ var searchData= [ ['faction_0',['faction',['../structtram_1_1_ext_1_1_kitchensink_1_1_faction_relation.html#a71cc30c73f550a5fd4007bc494b44c29',1,'tram::Ext::Kitchensink::FactionRelation::faction()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_base_faction_rank.html#a68423eb013d6a0f6b2d8eed2ef4e19cf',1,'tram::Ext::Kitchensink::BaseFactionRank::faction()']]], ['faction_5fcount_1',['FACTION_COUNT',['../character_8cpp.html#ae5c94b904d8f09d1f4fab73abcb58758',1,'character.cpp']]], ['factions_2',['factions',['../classtram_1_1_ext_1_1_kitchensink_1_1_character.html#ad38cfbf13b3b0044fb9b1b2fece43e37',1,'tram::Ext::Kitchensink::Character']]], ['fade_5fammount_3',['fade_ammount',['../structtram_1_1_animation_component_1_1_animation_playback_info.html#ae085e9df26b79fc91ac3a18d469bce96',1,'tram::AnimationComponent::AnimationPlaybackInfo']]], ['fade_5ffar_4',['fade_far',['../classtram_1_1_render_1_1_model.html#ab23a8639f37acbb57c7b2bd59f72f0e0',1,'tram::Render::Model::fade_far()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#ae282428d355cd814ebf720a5885adab2',1,'tram::Render::API::GLDrawListEntry::fade_far()']]], ['fade_5fin_5',['fade_in',['../structtram_1_1_animation_component_1_1_animation_playback_info.html#a447bcffb27576df3ed62a4f8e7a1ac29',1,'tram::AnimationComponent::AnimationPlaybackInfo']]], ['fade_5fin_5ftime_6',['fade_in_time',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_default.html#a48f08ce7495ae730fd0f89e7fcf19f57',1,'tram::Ext::Kitchensink::AnimStateTransitionDefault']]], ['fade_5fnear_7',['fade_near',['../classtram_1_1_render_1_1_model.html#aa81edd4e91330f0613abeecc945e323d',1,'tram::Render::Model::fade_near()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#a832edf238874e59d291c76e04b22ccec',1,'tram::Render::API::GLDrawListEntry::fade_near()']]], ['fade_5fout_8',['fade_out',['../structtram_1_1_animation_component_1_1_animation_playback_info.html#a048b270710009b885b74f65c311d4585',1,'tram::AnimationComponent::AnimationPlaybackInfo']]], ['fade_5fout_5ftime_9',['fade_out_time',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_default.html#a2eb7130d015e139f42813ac89cf7cfee',1,'tram::Ext::Kitchensink::AnimStateTransitionDefault']]], ['fade_5fspeed_10',['fade_speed',['../structtram_1_1_animation_component_1_1_animation_playback_info.html#a393f1b21fb4bf95d0d20a99fe1b6a4c8',1,'tram::AnimationComponent::AnimationPlaybackInfo']]], ['fade_5ftime_11',['fade_time',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_from.html#a7ccb60919e27cfe5cf01b20e824f494a',1,'tram::Ext::Kitchensink::AnimStateTransitionFrom::fade_time()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_into.html#a800a33afe025e16593895da5634bff6e',1,'tram::Ext::Kitchensink::AnimStateTransitionInto::fade_time()']]], ['fail_5fasserts_12',['fail_asserts',['../struct__test__case.html#ae886ab44d5b05f5d6bbece76e2f423b1',1,'_test_case']]], ['far_5fplane_13',['far_plane',['../namespacetram_1_1_render.html#aaa39b7e5e70c04e8c22233f173f0ac82',1,'tram::Render']]], ['farthest_5fdistance_14',['farthest_distance',['../structtram_1_1_octree_1_1_nearest_search.html#aa822dea4fb296786eb30325c47e18635',1,'tram::Octree::NearestSearch']]], ['farthest_5findex_15',['farthest_index',['../structtram_1_1_octree_1_1_nearest_search.html#ad0e4df7ab810d7077f6237205f63aa58',1,'tram::Octree::NearestSearch']]], ['ffp_5ftype_16',['ffp_type',['../structtram_1_1_render_1_1_vertex_attribute.html#aee67a88dcdc860897f24790716674422',1,'tram::Render::VertexAttribute']]], ['field_5fflags_17',['field_flags',['../structtram_1_1_entity_1_1_field_info.html#ab70f9293bd89845c16aeb3f1d44901c3',1,'tram::Entity::FieldInfo']]], ['field_5fid_18',['field_id',['../structtram_1_1_entity_1_1_field_info.html#afc597660b771bd0d90e3e1c4b5fd5558',1,'tram::Entity::FieldInfo']]], ['field_5ftype_19',['field_type',['../structtram_1_1_entity_1_1_field_info.html#a37fb586096567f2c3da11d696f119fd0',1,'tram::Entity::FieldInfo']]], ['fieldcount_20',['fieldcount',['../structtram_1_1_entity_type_info.html#a4e9c84b465297f05ccb785d6b9f26e81',1,'tram::EntityTypeInfo']]], ['fields_21',['fields',['../structtram_1_1_entity_type_info.html#a24f9612233dc930fe6f85d1e6e001fd8',1,'tram::EntityTypeInfo']]], ['filter_22',['filter',['../classtram_1_1_render_1_1_material.html#a8793fc03d8f1a34076f3af8739323a42',1,'tram::Render::Material']]], ['first_23',['first',['../classtram_1_1_hashmap.html#ab8e29b96d85af1c96d46f4eef83472b3',1,'tram::Hashmap::first()'],['../classtram_1_1_pool.html#ac3fa225dfc0f2bcbdb8b99cd532159f6',1,'tram::Pool::first()'],['../classtram_1_1_queue.html#af7bdb257fbe379deddd3b3e810311a19',1,'tram::Queue::first()'],['../classtram_1_1_stack.html#a0d0e42f7cb952325a56a77c5097f93a4',1,'tram::Stack::first()'],['../classtram_1_1_stack_pool.html#aaf7603622a4b6515c9d00f26c758e34c',1,'tram::StackPool::first()']]], ['firstend_24',['firstend',['../classtram_1_1_stack.html#aef2cc6aeb5ebd3ee4365cce47e29dfdf',1,'tram::Stack']]], ['flags_25',['flags',['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a230b3c266b55a9107188d5ceb44d2aab',1,'tram::Ext::Kitchensink::Button::flags()'],['../classtram_1_1_entity.html#af48fa95d5f1f47aebc79545a861cd478',1,'tram::Entity::flags()'],['../structtram_1_1_shared_entity_data.html#a4a85b5f990cc351ec57869c3fe08335f',1,'tram::SharedEntityData::flags()'],['../structtram_1_1_settings_1_1_setting_info.html#a15ded2e3664456c138ea8aad9f3704da',1,'tram::Settings::SettingInfo::flags()'],['../classtram_1_1_world_cell.html#a47609a24f5f428ede775c09d633096f2',1,'tram::WorldCell::flags()'],['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#a5e85792af5fd8e02fd1ccbc924a55d1c',1,'tram::Render::API::D3DDrawListEntry::flags()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#a4a282542da7ede553863e63080b53e77',1,'tram::Render::API::GLDrawListEntry::flags()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html#ac41f6b41aba38a7099bca75a12e45a66',1,'tram::Render::API::SWDrawListEntry::flags()'],['../structtram_1_1_hashmap_1_1_record.html#a67309019d9e71aeb7fa5fca434c86526',1,'tram::Hashmap::Record::flags()'],['../structtram_1_1_audio_1_1_spatial_1_1_audio_render.html#a0e6693da21f0990dd89c5745b018764d',1,'tram::Audio::Spatial::AudioRender::flags()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_effect.html#a72c383540fc6f43645df6c5c658bbf63',1,'tram::Ext::Kitchensink::Effect::flags()']]], ['float32_26',['float32',['../structtram_1_1_settings_1_1_setting_info.html#af59a80050b35c6db46f3a65a25a8e8c9',1,'tram::Settings::SettingInfo']]], ['float_5fptr_27',['float_ptr',['../classtram_1_1_value_ptr.html#af358e691eb1c70e81271966fdef46dfb',1,'tram::ValuePtr']]], ['float_5fvalue_28',['float_value',['../classtram_1_1_value.html#ad054720a352630eda06a3d7ee750f067',1,'tram::Value']]], ['fly_5fspeed_29',['fly_speed',['../classtram_1_1_f_p_s_controller_component.html#a59caaa80439479140ec150e4abfb6f36',1,'tram::FPSControllerComponent::fly_speed()'],['../classtram_1_1_raycast_controller_component.html#ac3bc0f6a436b974dd1e207565bcee873',1,'tram::RaycastControllerComponent::fly_speed()']]], ['flying_30',['flying',['../classtram_1_1_f_p_s_controller_component.html#adcec1e7d2eb544a14884da99d7de9341',1,'tram::FPSControllerComponent::flying()'],['../classtram_1_1_raycast_controller_component.html#a5481a92132dc6b4c1b6cbf6266fc7a1a',1,'tram::RaycastControllerComponent::flying()']]], ['follower_31',['follower',['../main_8cpp.html#a6ad3920985a278030871ba19a36e9029',1,'main.cpp']]], ['following_32',['following',['../classtram_1_1_ext_1_1_camera_1_1_camera.html#ac824c2a2d2ec9f37965808a6f2197c79',1,'tram::Ext::Camera::Camera']]], ['following_5finterpolation_33',['following_interpolation',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#afc061f0deae8ee4e0abc66d55544208b',1,'tram::Ext::Camera::FirstPersonCamera']]], ['following_5flistener_34',['following_listener',['../classtram_1_1_ext_1_1_camera_1_1_camera.html#ac3852212644df817be31acab2fb4231b',1,'tram::Ext::Camera::Camera']]], ['following_5flookat_35',['following_lookat',['../classtram_1_1_ext_1_1_camera_1_1_camera.html#aaa242b24d1a6f48e868dcf73b9ca72d5',1,'tram::Ext::Camera::Camera']]], ['following_5foffset_36',['following_offset',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#aa5267817e3d8ad5268a7a7149586f624',1,'tram::Ext::Camera::FirstPersonCamera']]], ['font_5fdebug_37',['font_debug',['../namespacetram_1_1_render.html#a02ef1036594289bf19ebfa9927708a5d',1,'tram::Render']]], ['font_5fheader_38',['FONT_HEADER',['../namespacetram_1_1_ext_1_1_menu.html#afb19d70c23fefc9206a68b19238f0361',1,'tram::Ext::Menu']]], ['font_5fpixelart_39',['FONT_PIXELART',['../namespacetram_1_1_ext_1_1_menu.html#a19b646bf9a31f4080201096d7c78b468',1,'tram::Ext::Menu']]], ['font_5ftext_40',['FONT_TEXT',['../namespacetram_1_1_ext_1_1_menu.html#a8fba4d434da7bccc5f0a79b97f45301a',1,'tram::Ext::Menu']]], ['font_5ftext_5fbold_41',['FONT_TEXT_BOLD',['../namespacetram_1_1_ext_1_1_menu.html#ac48d19ee29fc32e75b0c11bf85004bd3',1,'tram::Ext::Menu']]], ['font_5fwidgets_42',['FONT_WIDGETS',['../namespacetram_1_1_ext_1_1_menu.html#a69fad955abedb48b03076af467f31466',1,'tram::Ext::Menu']]], ['force_43',['force',['../structtram_1_1_audio_1_1_spatial_1_1_path_exploration_result.html#a43985ab3f8a3450cb1f6d9c732c2b9e7',1,'tram::Audio::Spatial::PathExplorationResult::force()'],['../structtram_1_1_audio_1_1_spatial_1_1_path_tracing_result.html#a493b960cdc2495f703f392b83e2ef657',1,'tram::Audio::Spatial::PathTracingResult::force()'],['../structtram_1_1_audio_1_1_spatial_1_1_path_from_audio_source.html#a224a92306d48694e4256b258d1ad0c2b',1,'tram::Audio::Spatial::PathFromAudioSource::force()'],['../structtram_1_1_audio_1_1_spatial_1_1_path_rendering_info.html#ab2e46bddf62459ce6f74591478c1f09b',1,'tram::Audio::Spatial::PathRenderingInfo::force()']]], ['format_44',['format',['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_vertex_array.html#ae5c1736575294cb01427786c8bc8e3a2',1,'tram::Render::API::SWVertexArray']]], ['found_45',['found',['../structtram_1_1_octree_1_1_nearest_search.html#a0a4cacd8eca108ce703cc4ede667550b',1,'tram::Octree::NearestSearch']]], ['frame_46',['frame',['../structtram_1_1_animation_component_1_1_animation_playback_info.html#ada1f5f7cfa76593710d843a609d7c35b',1,'tram::AnimationComponent::AnimationPlaybackInfo::frame()'],['../classtram_1_1_decal_component.html#a8cde217b87b345af7bd38a674afeea13',1,'tram::DecalComponent::frame()'],['../structtram_1_1_render_1_1_keyframe.html#a0a8682e86efe22d381951a748d49b617',1,'tram::Render::Keyframe::frame()']]], ['frames_47',['frames',['../classtram_1_1_render_1_1_sprite.html#ad1f3d4b42af2c6ae60e8eccac3368d4c',1,'tram::Render::Sprite']]], ['friction_48',['friction',['../classtram_1_1_f_p_s_controller_component.html#a451fd7c7b46f15d8c41966e57389d9f3',1,'tram::FPSControllerComponent']]], ['from_49',['from',['../structtram_1_1_edge.html#ad6343a5ac259ec2941d5aabd5a06908e',1,'tram::Edge']]], ['from_5fstate_50',['from_state',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_from.html#abce9f4aa66e81f7bdacdd957145bf2d8',1,'tram::Ext::Kitchensink::AnimStateTransitionFrom::from_state()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_into.html#a8ef52cbdfa3fe1b8b13a7b479ccf0ec0',1,'tram::Ext::Kitchensink::AnimStateTransitionInto::from_state()']]], ['fullname_51',['fullname',['../struct__test__case.html#a028f8c7752296eebd358db5357c46064',1,'_test_case']]], ['function_52',['function',['../structtram_1_1_listener_info.html#aa34513becad7ae12187bd4654f930df2',1,'tram::ListenerInfo::function()'],['../namespacetram_1_1_ext_1_1_scripting_1_1_lua.html#a4eb0c0bc6178c8d324c89f213a5a1a15',1,'tram::Ext::Scripting::Lua::function()']]], ['fvf_53',['fvf',['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#acc24155c9681da771fe7102a101561ae',1,'tram::Render::API::D3DDrawListEntry::fvf()'],['../structtram_1_1_render_1_1_a_p_i_1_1_vertex_buffer_metadata.html#aa5759a20251376053ea53b5b51efedee',1,'tram::Render::API::VertexBufferMetadata::fvf()'],['../structtram_1_1_render_1_1_a_p_i_1_1_f_v_f_helper.html#a0d36c1cfc5b492d3e1bb07506635b81e',1,'tram::Render::API::FVFHelper::fvf()']]] ]; ================================================ FILE: docs/cppapi/search/variables_6.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/variables_6.js ================================================ var searchData= [ ['generic_0',['generic',['../structtram_1_1_audio_1_1audiosource__t.html#a8cb8354dafecc4ccb01a425de4ed202e',1,'tram::Audio::audiosource_t::generic()'],['../structtram_1_1_audio_1_1audiobuffer__t.html#aa6218cbba41fa39bd964c556ffe4b756',1,'tram::Audio::audiobuffer_t::generic()'],['../structtram_1_1_render_1_1vertexarray__t.html#a6233f7ad4c54f375d0a7faf2a7fd54a8',1,'tram::Render::vertexarray_t::generic()'],['../structtram_1_1_render_1_1indexarray__t.html#a86c0b0a651bf16d9bb3b7566a325290f',1,'tram::Render::indexarray_t::generic()'],['../structtram_1_1_render_1_1spritearray__t.html#ab76a2d9193e201e274efa86af5ce5af7',1,'tram::Render::spritearray_t::generic()'],['../structtram_1_1_render_1_1drawlistentry__t.html#aaf774d6b3835faaadbbadd9cd65ac626',1,'tram::Render::drawlistentry_t::generic()'],['../structtram_1_1_render_1_1texturehandle__t.html#af0041c0ed8d24e29e6e09cff06e8a6ac',1,'tram::Render::texturehandle_t::generic()'],['../structtram_1_1_render_1_1light__t.html#a9435b381024f28d7b66f0235be42c28f',1,'tram::Render::light_t::generic()'],['../structtram_1_1_render_1_1material__t.html#aa4163a9839bbec7828aab7a0bba5861c',1,'tram::Render::material_t::generic()']]], ['get_5ftransform_5fcallback_1',['get_transform_callback',['../classtram_1_1_physics_1_1_a_p_i_1_1_callback_motion_state.html#ab97d0dfa12197e6fa79055fd3bfc57ba',1,'tram::Physics::API::CallbackMotionState']]], ['gl_2',['gl',['../structtram_1_1_render_1_1drawlistentry__t.html#a926aab37c6029049aa1910bbee5f9a47',1,'tram::Render::drawlistentry_t::gl()'],['../structtram_1_1_render_1_1light__t.html#a0f207f290e0ca7fbdf9df1a3232332aa',1,'tram::Render::light_t::gl()'],['../structtram_1_1_render_1_1material__t.html#a8a2afd08577348cd6d892f0fe0f2743f',1,'tram::Render::material_t::gl()']]], ['gl_5findex_5fbuffer_3',['gl_index_buffer',['../structtram_1_1_render_1_1indexarray__t.html#ab8718d1b7ff7dfb2e5dfd4bd4feff552',1,'tram::Render::indexarray_t']]], ['gl_5ftexture_4',['gl_texture',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_material.html#a910bf64758275e7a85ddf7cb1762b461',1,'tram::Render::API::GLMaterial']]], ['gl_5ftexture_5fhandle_5',['gl_texture_handle',['../structtram_1_1_render_1_1texturehandle__t.html#a43671e152005e2c0623b3492672751ee',1,'tram::Render::texturehandle_t']]], ['gl_5fvertex_5farray_6',['gl_vertex_array',['../structtram_1_1_render_1_1vertexarray__t.html#a823c61d8f42e8d1f378d8e7208163371',1,'tram::Render::vertexarray_t']]], ['gl_5fvertex_5fbuffer_7',['gl_vertex_buffer',['../structtram_1_1_render_1_1vertexarray__t.html#abf17d9003261e94d8d26b6f32e29b23f',1,'tram::Render::vertexarray_t']]], ['gravity_8',['gravity',['../classtram_1_1_particle_component.html#a49ca6619dc2cc1f51243c26b9700650a',1,'tram::ParticleComponent']]], ['groups_9',['groups',['../structtram_1_1_render_1_1_dynamic_model_data.html#ab12ffc9bc3a25b66d24b120f4563f1b3',1,'tram::Render::DynamicModelData']]] ]; ================================================ FILE: docs/cppapi/search/variables_7.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/variables_7.js ================================================ var searchData= [ ['h_0',['h',['../structtram_1_1_g_u_i_1_1_frame_object.html#a70f4e81acd34d11127d304faee8e9752',1,'tram::GUI::FrameObject']]], ['half_5fextent_1',['half_extent',['../structtram_1_1_octree_1_1_node.html#a452e2b6329f9a981b6eb3738613f871d',1,'tram::Octree::Node']]], ['handle_2',['handle',['../structtram_1_1_listener_info.html#aee785f4d7173a7fc8a9ea904251990c2',1,'tram::ListenerInfo::handle()'],['../structtram_1_1_render_1_1_light_tree_1_1_light.html#a525f786cf65ecf4555843a773941e519',1,'tram::Render::LightTree::Light::handle()']]], ['harmonic_3',['harmonic',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#a74b3a8569c8bc84e8df38aa62da38f20',1,'tram::Render::API::GLDrawListEntry']]], ['has_5flight_4',['has_light',['../structtram_1_1_render_1_1_light_graph_1_1_node.html#aa1ce3c4277d9f6afbd8360c932ddeb9f',1,'tram::Render::LightGraph::Node']]], ['has_5freflection_5',['has_reflection',['../structtram_1_1_render_1_1_light_graph_1_1_node.html#a0fa39d48f3054f6ac06005afe60c8166',1,'tram::Render::LightGraph::Node']]], ['hash_5fparameter_6',['hash_parameter',['../classtram_1_1_hashmap.html#aed9ce370a0606d8f753370f537bd9ca5',1,'tram::Hashmap']]], ['head_7',['head',['../structtram_1_1_render_1_1_bone.html#ae3620af03d2adb4b04f0e1c9e1648800',1,'tram::Render::Bone']]], ['height_8',['height',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a0f62e3b657e2410379cb293cc1ac0da2',1,'tram::Ext::Kitchensink::ItemClass::height()'],['../structtram_1_1_physics_1_1_collision_shape.html#a2dd2e0e04264791e0f363e6aaf0a777d',1,'tram::Physics::CollisionShape::height()'],['../classtram_1_1_render_1_1_material.html#a51a02ef0d56c1cf312bbb92c97087e7b',1,'tram::Render::Material::height()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_texture.html#a5c8fdd2162a423532bc06502910f1579',1,'tram::Render::API::SWTexture::height()'],['../structtram_1_1_render_1_1_sprite_frame.html#a70f2bdc216f92de2f441546154a47114',1,'tram::Render::SpriteFrame::height()']]], ['helper_9',['helper',['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_vertex_array.html#aac501573a4eabe407679900bd4d814a4',1,'tram::Render::API::SWVertexArray']]], ['hierarchy_5fmap_10',['hierarchy_map',['../namespacetram_1_1_ext_1_1_kitchensink.html#a88dc3b5c5e10e0a3f59566278143dd3e',1,'tram::Ext::Kitchensink']]], ['history_5fcursor_11',['history_cursor',['../classtram_1_1_ext_1_1_menu_1_1_console.html#a5f626c471a7e2d91b3fb5b2c4a03b8e5',1,'tram::Ext::Menu::Console']]], ['hull_5fpoints_12',['hull_points',['../structtram_1_1_physics_1_1_collision_shape.html#a6275c4f2f2e95cd9ad571f7c0f749fca',1,'tram::Physics::CollisionShape']]], ['hull_5fsize_13',['hull_size',['../structtram_1_1_physics_1_1_collision_shape.html#a483912b8ad6fc27f23f7c634f9aea053',1,'tram::Physics::CollisionShape']]] ]; ================================================ FILE: docs/cppapi/search/variables_8.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/variables_8.js ================================================ var searchData= [ ['icon_5ffont_0',['icon_font',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#ac623e7fc63960697ee68bc58b83468ac',1,'tram::Ext::Kitchensink::ItemClass']]], ['icon_5fglyph_1',['icon_glyph',['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#a7558e88a147da74a438982f195c16684',1,'tram::Ext::Kitchensink::ItemClass']]], ['id_2',['id',['../classtram_1_1_entity.html#a0e0037fe55b567a2f73a84e4e6932197',1,'tram::Entity::id()'],['../structtram_1_1_shared_entity_data.html#a4220b9dc04f5c5a94ae1a92347ae697f',1,'tram::SharedEntityData::id()']]], ['ind_3',['ind',['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#aadbe189ab3e4e334794d0dc588694fb3',1,'tram::Render::API::DynamicVertex']]], ['index_5farray_4',['index_array',['../classtram_1_1_render_1_1_model.html#aa5dee7ccfa3ff825f135ab07ae71a719',1,'tram::Render::Model::index_array()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html#a5014bfeba11937acbddee274ab2a240a',1,'tram::Render::API::SWDrawListEntry::index_array()']]], ['index_5farrays_5',['index_arrays',['../namespacetram_1_1_render_1_1_a_p_i.html#a95fa95ded8f82269167051e3c98f42b8',1,'tram::Render::API']]], ['index_5fbuffer_6',['index_buffer',['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#a7690e858e67902794ba8421881381bb8',1,'tram::Render::API::D3DDrawListEntry']]], ['index_5fcount_7',['index_count',['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_index_array.html#ab13f8b1dc90072e971b2b6c997eb2f57',1,'tram::Render::API::SWIndexArray']]], ['index_5fin_5fbucket_8',['index_in_bucket',['../structtram_1_1_render_1_1_bucket_mapping.html#aac8991fd658ce5b7c20f4bd8c07d7a95',1,'tram::Render::BucketMapping']]], ['index_5flength_9',['index_length',['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#a7f6a06108ebc5a50ab5144af1d60d474',1,'tram::Render::API::D3DDrawListEntry::index_length()'],['../structtram_1_1_render_1_1_index_range.html#a79dd94c687b439d58019231d29437d23',1,'tram::Render::IndexRange::index_length()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html#a2becbbd55e937640b93428514e1feaf9',1,'tram::Render::API::SWDrawListEntry::index_length()']]], ['index_5foffset_10',['index_offset',['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#aeee744eb4618ad8390ff3fdf7a4f504f',1,'tram::Render::API::D3DDrawListEntry::index_offset()'],['../structtram_1_1_render_1_1_index_range.html#ade22f8be5ffc1e0de728fa94ed496e72',1,'tram::Render::IndexRange::index_offset()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html#abe68abe6d073d4442922709f286fe084',1,'tram::Render::API::SWDrawListEntry::index_offset()']]], ['index_5franges_11',['index_ranges',['../classtram_1_1_render_1_1_model.html#a6dcde60794df195d5cbdc942b9e7f712',1,'tram::Render::Model']]], ['indices_12',['indices',['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_index_array.html#a1d40640fcd34e0d04e93967015a3f31a',1,'tram::Render::API::SWIndexArray::indices()'],['../structtram_1_1_render_1_1_triangle.html#a2582220ecd2310b21a7391756b283d39',1,'tram::Render::Triangle::indices()'],['../structtram_1_1_render_1_1_static_model_data.html#ac608149e0f9e85bf4b102e750c375abd',1,'tram::Render::StaticModelData::indices()'],['../structtram_1_1_render_1_1_dynamic_model_data.html#a1035c833b573784ed658754feb0b7c17',1,'tram::Render::DynamicModelData::indices()']]], ['initial_5ffollower_13',['initial_follower',['../main_8cpp.html#a26541762e56e12ecf3defe0cdf54445c',1,'main.cpp']]], ['initial_5fvelocity_14',['initial_velocity',['../classtram_1_1_particle_component.html#a430a79ebe6cdfed63f9197226acbf2a3',1,'tram::ParticleComponent']]], ['initial_5fvelocity_5frandomness_15',['initial_velocity_randomness',['../classtram_1_1_particle_component.html#af090a25e299547146b68263c6a70fc83',1,'tram::ParticleComponent']]], ['int32_16',['int32',['../structtram_1_1_settings_1_1_setting_info.html#aaab2c92712b3450a253e4eca1d648707',1,'tram::Settings::SettingInfo']]], ['int32_5fptr_17',['int32_ptr',['../classtram_1_1_value_ptr.html#a30acbba06034afaa772635752a46979d',1,'tram::ValuePtr']]], ['int32_5fvalue_18',['int32_value',['../classtram_1_1_value.html#a032355ea52d6ea101a88388e2a7f2714',1,'tram::Value']]], ['intercept_5fenabled_19',['intercept_enabled',['../classtram_1_1_ext_1_1_menu_1_1_debug_menu.html#aaaeebe9c42d5ca723a4523549f3c633a',1,'tram::Ext::Menu::DebugMenu']]], ['intercept_5fmenu_20',['intercept_menu',['../classtram_1_1_ext_1_1_menu_1_1_debug_menu.html#a3b84d612747abe7ce7521ec867b6df42',1,'tram::Ext::Menu::DebugMenu']]], ['intercepts_21',['intercepts',['../namespacetram_1_1_ext_1_1_menu.html#ad8d4e5481ecd0bb091a930107037e0c2',1,'tram::Ext::Menu']]], ['interpolate_22',['interpolate',['../structtram_1_1_animation_component_1_1_animation_playback_info.html#a7456d5837fff021227866a7e713af0bb',1,'tram::AnimationComponent::AnimationPlaybackInfo::interpolate()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state.html#a3092db31243a93267bddd5f9797696fa',1,'tram::Ext::Kitchensink::AnimState::interpolate()']]], ['intersection_23',['intersection',['../structtram_1_1_render_1_1_a_a_b_b_1_1_query_response.html#a7731e6615a0676cbaa1aa81668314256',1,'tram::Render::AABB::QueryResponse']]], ['into_5fstate_24',['into_state',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_from.html#a4fc967dfe7caf8f300842148f0b8eba0',1,'tram::Ext::Kitchensink::AnimStateTransitionFrom::into_state()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_into.html#a68ba9c13086b86f10f80cd36e61200d8',1,'tram::Ext::Kitchensink::AnimStateTransitionInto::into_state()']]], ['is_5ffullscreen_25',['is_fullscreen',['../namespacetram_1_1_platform.html#a6f880cc4d19fcc8b45f2405afe847765',1,'tram::Platform']]], ['is_5fin_5fair_26',['is_in_air',['../classtram_1_1_f_p_s_controller_component.html#a8579e399cc88ea96ad4d62d2cce9790c',1,'tram::FPSControllerComponent::is_in_air()'],['../classtram_1_1_raycast_controller_component.html#aafc457ddb805587b041ad13495aaa6c6',1,'tram::RaycastControllerComponent::is_in_air()']]], ['is_5finit_27',['is_init',['../classtram_1_1_entity_component.html#a0e65307b795d61b931c6b3600fc737ac',1,'tram::EntityComponent']]], ['is_5fready_28',['is_ready',['../classtram_1_1_entity_component.html#a4dcceab63838befe9fbffc1c3bc19918',1,'tram::EntityComponent']]], ['item_29',['item',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a074b98a66cd3f7404053c41d564be669',1,'tram::Ext::Kitchensink::QuestVariable::item()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#aabc1c4ce438e88d992880d126648a343',1,'tram::Ext::Kitchensink::QuestVariable::item()']]], ['item_5fclass_30',['item_class',['../structtram_1_1_ext_1_1_kitchensink_1_1_item_instance.html#ad30fe5398e295fa0edc24ee7e1b3f06f',1,'tram::Ext::Kitchensink::ItemInstance']]], ['items_31',['items',['../classtram_1_1_ext_1_1_kitchensink_1_1_list_inventory_manager.html#a706782e911333fcfafae739d283995a2',1,'tram::Ext::Kitchensink::ListInventoryManager']]] ]; ================================================ FILE: docs/cppapi/search/variables_9.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/variables_9.js ================================================ var searchData= [ ['jump_5fframes_0',['jump_frames',['../classtram_1_1_raycast_controller_component.html#a8a2115c6f76c654ad0daa63421474d92',1,'tram::RaycastControllerComponent']]] ]; ================================================ FILE: docs/cppapi/search/variables_a.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/variables_a.js ================================================ var searchData= [ ['key_0',['key',['../structtram_1_1_settings_1_1_raw_setting.html#ad489cdd3d038e1cd7cae211fd9646431',1,'tram::Settings::RawSetting::key()'],['../structtram_1_1_u_i_d.html#a9d2e43bf7b4f21af160251d969e37af8',1,'tram::UID::key()'],['../structtram_1_1_hashmap_1_1_record.html#ac3d3cebcb5768feb0ca9f6f4d1c7e02a',1,'tram::Hashmap::Record::key()']]], ['keyboardaction_5flimit_1',['KEYBOARDACTION_LIMIT',['../namespacetram.html#a7c062f0c7a0634e170676191a5fc33ba',1,'tram']]], ['keyframe_5fcount_2',['keyframe_count',['../structtram_1_1_animation_component_1_1_animation_playback_info.html#a71d6f0678bda33baa5635c35df35f4e8',1,'tram::AnimationComponent::AnimationPlaybackInfo::keyframe_count()'],['../structtram_1_1_render_1_1_keyframe_header.html#ad5759dfc006442feaed40a25e8f19629',1,'tram::Render::KeyframeHeader::keyframe_count()']]], ['keyframe_5foffset_3',['keyframe_offset',['../structtram_1_1_render_1_1_keyframe_header.html#a63ce32117d2989baf934941940c747ae',1,'tram::Render::KeyframeHeader']]], ['keyframes_4',['keyframes',['../structtram_1_1_animation_component_1_1_animation_playback_info.html#a46acadd400538066abb77bebaee607bc',1,'tram::AnimationComponent::AnimationPlaybackInfo']]], ['kitchensink_5fsystem_5',['KITCHENSINK_SYSTEM',['../namespacetram_1_1_ext_1_1_kitchensink.html#acada14362be543540a0a63813c3a68a7',1,'tram::Ext::Kitchensink']]] ]; ================================================ FILE: docs/cppapi/search/variables_b.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/variables_b.js ================================================ var searchData= [ ['l00_0',['l00',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#af95ce39082aca3d3b042baf2d557026d',1,'tram::Render::API::ShaderUniformModelMatrices::l00()'],['../structtram_1_1_render_1_1_spherical_harmonic.html#a2fde1bd3674e6c203b2a2e7c8d8e07e8',1,'tram::Render::SphericalHarmonic::l00()']]], ['l10_1',['l10',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#ad6eb45bf4538c03eb0feb42dabb711dd',1,'tram::Render::API::ShaderUniformModelMatrices::l10()'],['../structtram_1_1_render_1_1_spherical_harmonic.html#a4e2b108386258d38350834e9a27b0fa5',1,'tram::Render::SphericalHarmonic::l10()']]], ['l11_2',['l11',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#a000c1b753af3925ea749caf983a6933a',1,'tram::Render::API::ShaderUniformModelMatrices::l11()'],['../structtram_1_1_render_1_1_spherical_harmonic.html#aadeb8364aa07f05f2205f45edd341156',1,'tram::Render::SphericalHarmonic::l11()']]], ['l1m1_3',['l1m1',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#afd6502029f8f67602ccea8590d5a04b6',1,'tram::Render::API::ShaderUniformModelMatrices::l1m1()'],['../structtram_1_1_render_1_1_spherical_harmonic.html#a7092c1cfbcf8e874806928c2d2c238cb',1,'tram::Render::SphericalHarmonic::l1m1()']]], ['l20_4',['l20',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#ad072a1d1260143d7540ccee58dae20eb',1,'tram::Render::API::ShaderUniformModelMatrices::l20()'],['../structtram_1_1_render_1_1_spherical_harmonic.html#aaabe11128777b6ba8ff82ab0e66e6bf3',1,'tram::Render::SphericalHarmonic::l20()']]], ['l21_5',['l21',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#aba2e8aa574479f3238defdda372fb316',1,'tram::Render::API::ShaderUniformModelMatrices::l21()'],['../structtram_1_1_render_1_1_spherical_harmonic.html#a1025a228f68a93c7b8615b88fd396c48',1,'tram::Render::SphericalHarmonic::l21()']]], ['l22_6',['l22',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#a848095a6e0880c5988c75ecce810213a',1,'tram::Render::API::ShaderUniformModelMatrices::l22()'],['../structtram_1_1_render_1_1_spherical_harmonic.html#ac053c1c3de62cd1e3437549721d4d1ab',1,'tram::Render::SphericalHarmonic::l22()']]], ['l2m1_7',['l2m1',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#ae2eb22be8a185c17e85dc12a42a55e0a',1,'tram::Render::API::ShaderUniformModelMatrices::l2m1()'],['../structtram_1_1_render_1_1_spherical_harmonic.html#ad8260971060597fb0edb9c00677ac751',1,'tram::Render::SphericalHarmonic::l2m1()']]], ['l2m2_8',['l2m2',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#a6fa948a1fffff9cfe0007da4edb0e3ff',1,'tram::Render::API::ShaderUniformModelMatrices::l2m2()'],['../structtram_1_1_render_1_1_spherical_harmonic.html#a31d249ba90d9ca39cd367cb245a60ebd',1,'tram::Render::SphericalHarmonic::l2m2()']]], ['language_5fstring_5flimit_9',['LANGUAGE_STRING_LIMIT',['../namespacetram.html#ac465c542500fdf2dc7483c0d15896d8b',1,'tram']]], ['lanugage_5fstring_5fcharacter_5flimit_10',['LANUGAGE_STRING_CHARACTER_LIMIT',['../namespacetram.html#a94cfdaa4232d3dde886253c4eafcd4e9',1,'tram']]], ['last_11',['last',['../classtram_1_1_hashmap.html#a08c1ce10f128f0995b5e82d8f372b6f1',1,'tram::Hashmap::last()'],['../classtram_1_1_pool.html#a4623a5f83e0f8a60e0189b4dd1cb7792',1,'tram::Pool::last()'],['../classtram_1_1_queue.html#aa63013a7088d526ff1529718777848f1',1,'tram::Queue::last()'],['../classtram_1_1_stack.html#a68378c5ce401f8baa36270fbe3174bd0',1,'tram::Stack::last()'],['../classtram_1_1_stack_pool.html#a0c46cfa4c88b248b51a096436d4a4147',1,'tram::StackPool::last()']]], ['last_5factivate_12',['last_activate',['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#ac4a1ce474fcd9da9bf9fc66dd27281ed',1,'tram::Ext::Kitchensink::Button']]], ['last_5fpath_13',['last_path',['../structtram_1_1_audio_1_1_spatial_1_1_audio_source.html#a8768b3b7278d9cc7cf1401a56b9ee64f',1,'tram::Audio::Spatial::AudioSource']]], ['last_5ftick_14',['last_tick',['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container.html#a33b5848afcb8d3758b9c39b5ac3de2c1',1,'tram::Ext::Kitchensink::AttributeContainer']]], ['last_5fupdate_5fframe_15',['last_update_frame',['../namespacetram_1_1_g_u_i.html#a6b89bb5200e494e6cd5a0191bf527df0',1,'tram::GUI']]], ['lastend_16',['lastend',['../classtram_1_1_stack.html#aa0969199ef282f64cc05a4954bc67bb7',1,'tram::Stack']]], ['lastfree_17',['lastfree',['../classtram_1_1_pool.html#a09e44e2d85b1f84461756d203450e014',1,'tram::Pool']]], ['layer_18',['layer',['../classtram_1_1_render_component.html#a9af00bf62b86a65cfecda4579cea9081',1,'tram::RenderComponent::layer()'],['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#a2b5170151eece25917d7ec3bd7ffc18e',1,'tram::Render::API::D3DDrawListEntry::layer()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#aac3c45c286b4c4e9fea14811c685a7b8',1,'tram::Render::API::GLDrawListEntry::layer()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html#a8312bc4a540cc25641d8b0cdf848b9dd',1,'tram::Render::API::SWDrawListEntry::layer()']]], ['layer_5fmask_19',['layer_mask',['../classtram_1_1_ext_1_1_camera_1_1_camera.html#a7ed7e7879eb1dbfb568d72099a8c74d0',1,'tram::Ext::Camera::Camera']]], ['leaf_20',['leaf',['../structtram_1_1_render_1_1_a_a_b_b_1_1_a_a_b_b_leaf.html#ad1a2099435858c965b4ddb5e4dbea1e6',1,'tram::Render::AABB::AABBLeaf']]], ['left_21',['left',['../structtram_1_1_navmesh_node.html#ae94caf6d6598ec97d187913ec353ed31',1,'tram::NavmeshNode::left()'],['../structtram_1_1_a_a_b_b_tree_1_1_node.html#a31d0922f21e58394dad1993d731601b3',1,'tram::AABBTree::Node::left()']]], ['length_22',['length',['../structtram_1_1_audio_1_1_spatial_1_1_audio_buffer.html#aedd3b42bb186f9f0902e148cb315e64c',1,'tram::Audio::Spatial::AudioBuffer']]], ['light_23',['light',['../classtram_1_1_light_component.html#ad6cf4eb83f59c3bd63368dc6f79e6df9',1,'tram::LightComponent::light()'],['../classtram_1_1_light.html#af5eb3563a405edc4d1344432268cd7a9',1,'tram::Light::light()']]], ['light_5flist_24',['light_list',['../namespacetram_1_1_render_1_1_a_p_i.html#a22c9b2ef54e756a89652662cc7ad099e',1,'tram::Render::API::light_list()'],['../namespacetram_1_1_render_1_1_light_tree.html#ace17f1d05c614eb447987103188f6fe8',1,'tram::Render::LightTree::light_list()']]], ['light_5ftree_25',['light_tree',['../namespacetram_1_1_render_1_1_a_p_i.html#a4855c01cc36bad195643cf956389b5de',1,'tram::Render::API']]], ['light_5funiform_5fbinding_26',['light_uniform_binding',['../namespacetram_1_1_render_1_1_a_p_i.html#a0be78caaebe8d1e8e924fac4021c7955',1,'tram::Render::API']]], ['light_5funiform_5fbuffer_27',['light_uniform_buffer',['../namespacetram_1_1_render_1_1_a_p_i.html#aa86b61fec7a4aff417768d154811ad32',1,'tram::Render::API']]], ['lightmap_28',['lightmap',['../classtram_1_1_render_component.html#a7d0c1122a6e9b85ccd68fb5b2a3b2914',1,'tram::RenderComponent::lightmap()'],['../classtram_1_1_static_world_object.html#a6686c2178ae7e6444df5f9887c2199d7',1,'tram::StaticWorldObject::lightmap()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#aaabf5a2f388426badc47c45deff2a92c',1,'tram::Ext::Kitchensink::Button::lightmap()'],['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#ae3fe0f4405b6bf946621d32ea4313980',1,'tram::Render::API::D3DDrawListEntry::lightmap()'],['../structtram_1_1_render_1_1_a_p_i_1_1_f_v_f_helper.html#af69f0b192cb4f3f7b4332c356146db14',1,'tram::Render::API::FVFHelper::lightmap()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#a67f380744f271dbece03c8f081c86bf1',1,'tram::Render::API::GLDrawListEntry::lightmap()'],['../structtram_1_1_render_1_1_a_p_i_1_1_f_f_p_helper.html#abea9e4cefc78f34737c5ec3a4c78e635',1,'tram::Render::API::FFPHelper::lightmap()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html#ada769a583a606a1cce9acbeaf75c0055',1,'tram::Render::API::SWDrawListEntry::lightmap()']]], ['lights_29',['lights',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#a41a219aed82e2711a6e78adfcdfb299f',1,'tram::Render::API::GLDrawListEntry::lights()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html#a5e765e4ee8dd68acf7ece8f12d0663c7',1,'tram::Render::API::SWDrawListEntry::lights()'],['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#a78b0d32279518eb5cd60d66a2fc9f4fe',1,'tram::Render::API::D3DDrawListEntry::lights()']]], ['lighttex_30',['lighttex',['../structtram_1_1_render_1_1_static_model_vertex.html#ab1ff0529e48d198c0875ccb58f73eb18',1,'tram::Render::StaticModelVertex']]], ['limit_31',['limit',['../structtram_1_1_signal.html#aeea99e2596e8761fc321edb7876fd138',1,'tram::Signal']]], ['line_5fvertex_5ffvf_32',['LINE_VERTEX_FVF',['../namespacetram_1_1_render_1_1_a_p_i.html#a092639593561b8318a7db302cde0cd97',1,'tram::Render::API']]], ['list_33',['list',['../classtram_1_1_ext_1_1_menu_1_1_list_selection.html#a03f4f84b736a200aafa2848c1e3e02cd',1,'tram::Ext::Menu::ListSelection']]], ['listener_34',['listener',['../classtram_1_1_event_listener.html#a930c397fc9144345c9fd431db387f329',1,'tram::EventListener']]], ['listener_5fdepth_5flimit_35',['LISTENER_DEPTH_LIMIT',['../namespacetram_1_1_audio_1_1_spatial.html#aa61124c29ea3a00d8124d9c20dd8a4af',1,'tram::Audio::Spatial']]], ['listener_5fideal_5fangle_36',['listener_ideal_angle',['../structtram_1_1_audio_1_1_spatial_1_1_path_tracing_result.html#aa24833c62159206914afc05979470fa8',1,'tram::Audio::Spatial::PathTracingResult']]], ['listener_5forientation_37',['listener_orientation',['../namespacetram_1_1_audio_1_1_spatial.html#acb9b0bd1fd2aee84d39ac5b2f656eac8',1,'tram::Audio::Spatial']]], ['listener_5fposition_38',['listener_position',['../namespacetram_1_1_audio_1_1_spatial.html#a7d4e5961da95174066a93816b9b418ad',1,'tram::Audio::Spatial']]], ['listener_5freverb_5fdelay_39',['listener_reverb_delay',['../namespacetram_1_1_audio_1_1_spatial.html#a572ed0408e51e97d4aab9499559dcabe',1,'tram::Audio::Spatial']]], ['listener_5freverb_5fdistance_40',['listener_reverb_distance',['../namespacetram_1_1_audio_1_1_spatial.html#a8d1dc309e3904bd79c244bbc63c00839',1,'tram::Audio::Spatial']]], ['listener_5freverb_5fforce_41',['listener_reverb_force',['../namespacetram_1_1_audio_1_1_spatial.html#abadc037457811482c0cc517072ab1f77',1,'tram::Audio::Spatial']]], ['listener_5freverb_5fnormalized_42',['listener_reverb_normalized',['../namespacetram_1_1_audio_1_1_spatial.html#a4353683a488762dd6403d5c7d5f6e1fb',1,'tram::Audio::Spatial']]], ['lit_43',['lit',['../main_8cpp.html#a3c4f14ce2eba453f60e455656652a950',1,'lit(): main.cpp'],['../structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html#a0859b3baf93722d9d62189c3647e6f84',1,'tram::Render::API::StaticVertex::lit()']]], ['lit_5fx_44',['lit_x',['../structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html#a53eed8281dac3f4bed2ede27d0954189',1,'tram::Render::API::StaticVertex']]], ['lit_5fy_45',['lit_y',['../structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html#ac62101b4f1d1623067501c1fd21c0e19',1,'tram::Render::API::StaticVertex']]], ['load_5ffail_46',['load_fail',['../classtram_1_1_resource.html#af0e8d76a1a9490a659b8ef54b1357a59',1,'tram::Resource']]], ['location_47',['location',['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_light.html#a2b570e30f7b76c312622439f7ea7323e',1,'tram::Render::API::SWLight::location()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_light.html#aaba013dff6639e491d1e9f82e40bd5c9',1,'tram::Render::API::GLLight::location()'],['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_light.html#acbab4448a21e3615bd881388b0af1a8b',1,'tram::Render::API::D3DLight::location()'],['../structtram_1_1_render_1_1_keyframe.html#a54ad174c2d1454d5b8699463918241cc',1,'tram::Render::Keyframe::location()'],['../classtram_1_1_entity.html#aa2a31ccd75576ca82547ed1feed60d8c',1,'tram::Entity::location()'],['../classtram_1_1_sprite_component.html#a2d21c7134a144caa924c0c76fdd44e9b',1,'tram::SpriteComponent::location()'],['../classtram_1_1_render_component.html#a473efffe2b970de9b84d7c55c7e22f72',1,'tram::RenderComponent::location()'],['../classtram_1_1_particle_component.html#acb488cd232ea710d12db28f52d199377',1,'tram::ParticleComponent::location()'],['../classtram_1_1_light_component.html#afc605268cb96a739eee4ff721fc013d1',1,'tram::LightComponent::location()'],['../classtram_1_1_decal_component.html#a2f8e987f85f6ff0720b415e87509510e',1,'tram::DecalComponent::location()'],['../classtram_1_1_audio_component.html#a1ff1eab65a76f78216b57665a6c8b464',1,'tram::AudioComponent::location()']]], ['lock_48',['lock',['../structtram_1_1_audio_1_1_spatial_1_1_audio_render.html#ae791d5a4cb90154dccd3baa41bd19442',1,'tram::Audio::Spatial::AudioRender']]], ['look_5fat_5fdirection_49',['look_at_direction',['../namespacetram_1_1_ext_1_1_camera.html#ae2730c41e6bab8d84d06e89700724e9e',1,'tram::Ext::Camera']]], ['look_5fat_5fentity_50',['look_at_entity',['../namespacetram_1_1_ext_1_1_camera.html#a07e626d2d01f42be6f6f209cc12cbc18',1,'tram::Ext::Camera']]], ['look_5fdirection_51',['look_direction',['../classtram_1_1_controller_component.html#ad160a058e6730f0040aa6a9338e15750',1,'tram::ControllerComponent']]], ['loyalty_52',['loyalty',['../structtram_1_1_ext_1_1_kitchensink_1_1_faction_rank.html#abeca783c9890c1faaadc5d8faefad347',1,'tram::Ext::Kitchensink::FactionRank::loyalty()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_base_faction_rank.html#ac64acf21dbf7f0ce28fc4976aa610806',1,'tram::Ext::Kitchensink::BaseFactionRank::loyalty()']]] ]; ================================================ FILE: docs/cppapi/search/variables_c.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/variables_c.js ================================================ var searchData= [ ['make_0',['make',['../structtram_1_1_ext_1_1_kitchensink_1_1_inventory_factory_info.html#a71e5a6e2f63dc97ca9bc99bdcda4634e',1,'tram::Ext::Kitchensink::InventoryFactoryInfo']]], ['material_1',['material',['../classtram_1_1_render_1_1_material.html#aa1af831cde7f02d1d9c76c2223638197',1,'tram::Render::Material::material()'],['../structtram_1_1_render_1_1_a_a_b_b_triangle.html#a5b4b6aa924442e2390bf50cc9f601c75',1,'tram::Render::AABBTriangle::material()'],['../classtram_1_1_render_1_1_sprite.html#aca24e7f82749a755a8118a46b3729a3b',1,'tram::Render::Sprite::material()']]], ['material_5fcount_2',['material_count',['../structtram_1_1_render_1_1_index_range.html#a14c45f9b3939a2e5238a8600a7534196',1,'tram::Render::IndexRange']]], ['material_5ftype_3',['material_type',['../structtram_1_1_render_1_1_triangle_bucket.html#a75c3cdb4cdc7c330594859449fb1dd0f',1,'tram::Render::TriangleBucket::material_type()'],['../structtram_1_1_render_1_1_index_range.html#a125c674b4ce58b771a833686ed8b6205',1,'tram::Render::IndexRange::material_type()']]], ['materials_4',['materials',['../structtram_1_1_render_1_1_triangle_bucket.html#a279a79cbe2932b9f9fd33cf9d856f088',1,'tram::Render::TriangleBucket::materials()'],['../structtram_1_1_render_1_1_index_range.html#aa0179744732873180811f35532344320',1,'tram::Render::IndexRange::materials()'],['../classtram_1_1_render_1_1_model.html#add4100bd27f40383014ada9f1038e1d1',1,'tram::Render::Model::materials()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#aafdb1c878c1a40c28478169a730e3c18',1,'tram::Render::API::GLDrawListEntry::materials()']]], ['matrices_5',['matrices',['../namespacetram_1_1_render_1_1_a_p_i.html#a6dfddeaa3cef9401836d64332bf741d7',1,'tram::Render::API']]], ['matrix_6',['matrix',['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#a140d4caf20bd86230ad43a203602020f',1,'tram::Render::API::D3DDrawListEntry::matrix()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#a4d34b1b8c60ff21a937113dc78b7d4a4',1,'tram::Render::API::GLDrawListEntry::matrix()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html#a963fb9fdc188ee14b78c1514dc4a2360',1,'tram::Render::API::SWDrawListEntry::matrix()']]], ['matrix_5funiform_5fbinding_7',['matrix_uniform_binding',['../namespacetram_1_1_render_1_1_a_p_i.html#a6e1d5dec0444c684f0afec150c59bfc0',1,'tram::Render::API']]], ['matrix_5funiform_5fbuffer_8',['matrix_uniform_buffer',['../namespacetram_1_1_render_1_1_a_p_i.html#a2de134ec2f22c719dbf8e81f7ee6852d',1,'tram::Render::API']]], ['max_9',['max',['../structtram_1_1_a_a_b_b_tree_1_1_node.html#a76065598bad42f58e74815676b4232fc',1,'tram::AABBTree::Node']]], ['max_5fevent_5ftypes_10',['MAX_EVENT_TYPES',['../namespacetram.html#a67acb96d23f8bfea55638bc35178d08d',1,'tram']]], ['max_5ffragment_5fshaders_11',['MAX_FRAGMENT_SHADERS',['../namespacetram.html#ac5209551801f3515acbdabc46e957f45',1,'tram']]], ['max_5flinked_5fshaders_12',['MAX_LINKED_SHADERS',['../namespacetram.html#af6d768de9b8d7f850907e74b15f654ab',1,'tram']]], ['max_5flua_5ffunctions_13',['MAX_LUA_FUNCTIONS',['../namespacetram_1_1_ext_1_1_scripting_1_1_lua.html#a4cfafc75c333b7b33aa642f4a2dfa952',1,'tram::Ext::Scripting::Lua']]], ['max_5fmaterial_5ftypes_14',['MAX_MATERIAL_TYPES',['../namespacetram.html#a917f372f74717cd689223239e73f0ec5',1,'tram']]], ['max_5fsize_15',['max_size',['../classtram_1_1_hashmap.html#a1624bb31327369ea902f87e19531d6aa',1,'tram::Hashmap']]], ['max_5fvertex_5fformats_16',['MAX_VERTEX_FORMATS',['../namespacetram.html#a7bc148b33d35076ac28624e78c06e32f',1,'tram']]], ['max_5fvertex_5fshaders_17',['MAX_VERTEX_SHADERS',['../namespacetram.html#aeb3f21bc4e94ced5691b7a802ce417e5',1,'tram']]], ['maxsize_18',['maxSize',['../classtram_1_1_pool.html#aba0758ee3091dd01f8f880000973d805',1,'tram::Pool']]], ['maybe_5fflag_19',['maybe_flag',['../structtram_1_1_settings_1_1_raw_setting.html#a6524501498362b74170adbf0250fba28',1,'tram::Settings::RawSetting']]], ['medium_20',['medium',['../structtram_1_1_file_source.html#a13ed2bed034f6bdbfb616d75141c8d63',1,'tram::FileSource']]], ['memory_5fend_21',['memory_end',['../classtram_1_1_queue.html#abdd8f8cca203a1cb1612535dc418bf37',1,'tram::Queue']]], ['memory_5fstart_22',['memory_start',['../classtram_1_1_queue.html#a5a96adeb0d29e7f5f6f53c4171d19390',1,'tram::Queue']]], ['menu_5flist_23',['menu_list',['../namespacetram_1_1_ext_1_1_menu.html#a430defe2c6bc8ce1fb5d75b41b558113',1,'tram::Ext::Menu']]], ['menu_5fstack_24',['menu_stack',['../namespacetram_1_1_ext_1_1_menu.html#ad6f40542aa62e171700b1c195770c014',1,'tram::Ext::Menu']]], ['menu_5fsystem_25',['MENU_SYSTEM',['../namespacetram_1_1_ext_1_1_menu.html#ac964e0479522fe9ecac4f78c47de8674',1,'tram::Ext::Menu']]], ['mesh_5fsize_26',['mesh_size',['../structtram_1_1_physics_1_1_collision_shape.html#aec3a6b467737e8ca959299a9173d30b7',1,'tram::Physics::CollisionShape']]], ['mesh_5ftriangles_27',['mesh_triangles',['../structtram_1_1_physics_1_1_collision_shape.html#a7c3bf4d26299f93f429849ad4f075a5c',1,'tram::Physics::CollisionShape']]], ['message_28',['message',['../structtram_1_1_ext_1_1_menu_1_1_log_intercept.html#a2a20b88ce99a306fdf5ab41a905550e0',1,'tram::Ext::Menu::LogIntercept']]], ['message_5fdata_5flimit_29',['MESSAGE_DATA_LIMIT',['../namespacetram.html#a3e23af0f990c870da7822e6160160173',1,'tram']]], ['message_5fpriority_5fqueue_5flimit_30',['MESSAGE_PRIORITY_QUEUE_LIMIT',['../namespacetram.html#a2b1778620231829d63a83b6c451b60c2',1,'tram']]], ['message_5fqueue_5flimit_31',['MESSAGE_QUEUE_LIMIT',['../namespacetram.html#a13df257c04982a0237aed3b1d1a18388',1,'tram']]], ['message_5ftype_32',['message_type',['../classtram_1_1_ext_1_1_menu_1_1_message_send.html#af5a139a253bf7fccfbd60307e4552d03',1,'tram::Ext::Menu::MessageSend::message_type()'],['../structtram_1_1_signal.html#a7781884f42b0b91a9adf65f682ee88b9',1,'tram::Signal::message_type()']]], ['message_5ftype_5flimit_33',['MESSAGE_TYPE_LIMIT',['../namespacetram.html#ac5765d4ac76416672f8f55e6e4e48b9b',1,'tram']]], ['mid_5fpoint_34',['mid_point',['../structtram_1_1_octree_1_1_node.html#a9f504886cb278bba4d7b3646c7a6f8f1',1,'tram::Octree::Node']]], ['midpoint_5fx_35',['midpoint_x',['../structtram_1_1_render_1_1_sprite_frame.html#ae60529c0aba231cf453f559d756f3f03',1,'tram::Render::SpriteFrame']]], ['midpoint_5fy_36',['midpoint_y',['../structtram_1_1_render_1_1_sprite_frame.html#a9eb4dd892a159105c8cd75208b151b64',1,'tram::Render::SpriteFrame']]], ['min_37',['min',['../structtram_1_1_a_a_b_b_tree_1_1_node.html#a93c5a016f35c05c08f454db6db446113',1,'tram::AABBTree::Node']]], ['mode_38',['mode',['../classtram_1_1_file.html#acd6ce0e7642fe94f378dc8a749efdcb9',1,'tram::File::mode()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_texture.html#a2560949172455dcc62693eb9161f4d44',1,'tram::Render::API::SWTexture::mode()']]], ['model_39',['model',['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_text.html#ac289a25bd2a5fbdd29c0d3572a99db27',1,'tram::Ext::Kitchensink::DebugText::model()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_shape.html#a0ab7b3efe24ac2f24fc2e94bbcc779bc',1,'tram::Ext::Kitchensink::DebugShape::model()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_autosave.html#ae330b7417b6da030f0932f51d9282902',1,'tram::Ext::Kitchensink::TriggerAutosave::model()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_hurt.html#a1695bf4215ec18944897194e0abff99c',1,'tram::Ext::Kitchensink::TriggerHurt::model()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_once.html#a964426361804464f0916bfb2619691a7',1,'tram::Ext::Kitchensink::TriggerOnce::model()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_multiple.html#a4c73c411f8c7f31cb6a9db8863f0d2e4',1,'tram::Ext::Kitchensink::TriggerMultiple::model()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_push.html#a2119ac49d5090511a7f49419025cc877',1,'tram::Ext::Kitchensink::TriggerPush::model()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_remove.html#a17be889e28adc003ba638f2b8ee1a0cb',1,'tram::Ext::Kitchensink::TriggerRemove::model()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_teleport.html#aa7de7abe61d44d1229d02632344a3117',1,'tram::Ext::Kitchensink::TriggerTeleport::model()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_player_movement.html#ae52d91988675dae168e7ccc18e36b737',1,'tram::Ext::Kitchensink::TriggerPlayerMovement::model()'],['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#a4282d72e8b3c644febb6531d275854ce',1,'tram::Render::API::ShaderUniformModelMatrices::model()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_pickup.html#ac077e8cc4096fec6612b47ff60054279',1,'tram::Ext::Kitchensink::Pickup::model()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a1eda56e61bb29500549213c1d194a550',1,'tram::Ext::Kitchensink::Button::model()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_train.html#aa4eb604d75a4b015c214a73385b8583a',1,'tram::Ext::Kitchensink::Train::model()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_water.html#abce68a2e7fe9394d10f26ab51fe14e21',1,'tram::Ext::Kitchensink::Water::model()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_breakable.html#a74d7eb13aeb7ac3a513fef56b0fe0bf4',1,'tram::Ext::Kitchensink::Breakable::model()'],['../classtram_1_1_trigger.html#a9646278b81b27211890f5895400d216d',1,'tram::Trigger::model()'],['../classtram_1_1_static_world_object.html#a0f37865a6e409691526901290d6c1d8b',1,'tram::StaticWorldObject::model()'],['../classtram_1_1_decoration.html#ab6212cdb928b6d3f28cdd0ed5d7b6053',1,'tram::Decoration::model()'],['../classtram_1_1_crate.html#af5795bc6e73fbf1f6f40968ed4d53d96',1,'tram::Crate::model()'],['../classtram_1_1_render_component.html#a3f3ff752d0389444e9450d9d3c27ac2b',1,'tram::RenderComponent::model()'],['../classtram_1_1_light_component.html#a3bab1eb0115b251850a8342774d18a28',1,'tram::LightComponent::model()'],['../classtram_1_1_audio_component.html#acbf584247d4a88f0fa923f9e5b426f84',1,'tram::AudioComponent::model()'],['../classtram_1_1_animation_component.html#a03643f9802dcb7bfe3afdabc432c3025',1,'tram::AnimationComponent::model()']]], ['model_5faabb_40',['model_aabb',['../classtram_1_1_render_1_1_model.html#a5308aff655f38cf12503c88a7d82cd01',1,'tram::Render::Model']]], ['model_5fdata_41',['model_data',['../classtram_1_1_render_1_1_model.html#a7559c74fb4b4ebb3c643dc721ec84167',1,'tram::Render::Model']]], ['model_5fmatrix_5funiform_5fbinding_42',['model_matrix_uniform_binding',['../namespacetram_1_1_render_1_1_a_p_i.html#a2a0501e16181b7cde9c9983906abf9dd',1,'tram::Render::API']]], ['model_5fmatrix_5funiform_5fbuffer_43',['model_matrix_uniform_buffer',['../namespacetram_1_1_render_1_1_a_p_i.html#a2caf5fc3ac8c9036ca6b9be0180c98ec',1,'tram::Render::API']]], ['modellights_44',['modelLights',['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html#a466d03b2582d755052fec416d5b41ed9',1,'tram::Render::API::ShaderUniformModelMatrices']]], ['modelmatrices_45',['modelMatrices',['../namespacetram_1_1_render_1_1_a_p_i.html#aa07f4e77940a42bcb683f6a5fe639598',1,'tram::Render::API']]], ['monguser_46',['monguser',['../main_8cpp.html#a9968db2fbe46c1d2ce9a76ccdff7929c',1,'main.cpp']]], ['monguser_5farmature_47',['monguser_armature',['../main_8cpp.html#ac2200d84471744e6d70ce13d0835a5c9',1,'main.cpp']]], ['motion_5fstate_48',['motion_state',['../structtram_1_1_physics_1_1_a_p_i_1_1_rigidbody_metadata.html#a796afd885b22f43971092effd71696aa',1,'tram::Physics::API::RigidbodyMetadata']]], ['mouse_5fclick_5fnot_5fhandled_49',['mouse_click_not_handled',['../namespacetram_1_1_g_u_i.html#a8cd56d99b85b29b8659648e28bb1f5ca',1,'tram::GUI']]], ['mouse_5fclick_5fnot_5fhandled_5flate_50',['mouse_click_not_handled_late',['../namespacetram_1_1_g_u_i.html#a64d510448e860481081147bb9e1ef0d6',1,'tram::GUI']]], ['mouselook_51',['mouselook',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#ab7853506fcff02e0836600d49dd6c302',1,'tram::Ext::Camera::FirstPersonCamera']]], ['move_5fdirection_52',['move_direction',['../classtram_1_1_raycast_controller_component.html#a1bd33cca14d40e584b11c5794653dfe4',1,'tram::RaycastControllerComponent::move_direction()'],['../classtram_1_1_f_p_s_controller_component.html#a7f8e30150636e41889103015053db656',1,'tram::FPSControllerComponent::move_direction()']]], ['move_5fmagnitude_53',['move_magnitude',['../classtram_1_1_raycast_controller_component.html#a2324ab257417857ba243ff51605ec8ae',1,'tram::RaycastControllerComponent']]] ]; ================================================ FILE: docs/cppapi/search/variables_d.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/variables_d.js ================================================ var searchData= [ ['name_0',['name',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_space.html#ad0a26b8eab6b4bf5ceb070fb8a933e61',1,'tram::Ext::Kitchensink::AnimStateSpace::name()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state.html#a2d83ea50ba1cea2d5c129c0aef94ba37',1,'tram::Ext::Kitchensink::AnimState::name()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_attribute.html#a120d6552e1adf281dad0a69266fd0d7b',1,'tram::Ext::Kitchensink::Attribute::name()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_effect.html#ab233fd8a0eeb7e70c0be0b243d8ebe4a',1,'tram::Ext::Kitchensink::Effect::name()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_attribute_info.html#a7c20f9f0740b7cb843b7f83236c7ce48',1,'tram::Ext::Kitchensink::AttributeInfo::name()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_faction.html#ae37fd3f67a9a89138abf720d56b9ab3f',1,'tram::Ext::Kitchensink::Faction::name()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_base_attribute.html#a510e0c24a6e61c55033bc18a038ed719',1,'tram::Ext::Kitchensink::BaseAttribute::name()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_topic.html#a4b3b0ac1cc9d4f78bdbcc3c40e1dda9c',1,'tram::Ext::Kitchensink::DialogTopic::name()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_item_class.html#abeaafff54d0a01ac7f6dfb3299bfeafe',1,'tram::Ext::Kitchensink::ItemClass::name()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#abdaedd33351ad672e211fecaabf207bd',1,'tram::Ext::Kitchensink::QuestVariable::name()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_trigger.html#a2c73379c1b2dc328379689c441b4f6c8',1,'tram::Ext::Kitchensink::QuestTrigger::name()'],['../structtram_1_1_ext_1_1_kitchensink_1_1_quest.html#a4970c1dac3ff3944988953b026fe61a7',1,'tram::Ext::Kitchensink::Quest::name()'],['../classtram_1_1_entity.html#ab9b31a0d34775a0f01a2bef87efd3140',1,'tram::Entity::name()'],['../structtram_1_1_shared_entity_data.html#a7b51e3157cac585cc29e5fac4e4c92e1',1,'tram::SharedEntityData::name()'],['../classtram_1_1_navmesh.html#afa5f4827ce36be9a7e41fe2d4f4dc55f',1,'tram::Navmesh::name()'],['../classtram_1_1_path.html#a7933eedcc33af28cc227944e586fee3f',1,'tram::Path::name()'],['../classtram_1_1_resource.html#a1fdc62041e403a7a4a49c9860ff00b83',1,'tram::Resource::name()'],['../structtram_1_1_settings_1_1_setting_info.html#a50e929f975c24f00c030d31f89132d87',1,'tram::Settings::SettingInfo::name()'],['../structtram_1_1_system_1_1_system_info.html#abaf1fcdb583a3c57d96ddcd49699a848',1,'tram::System::SystemInfo::name()'],['../classtram_1_1_transition.html#a47224165493129a93ae5d7cd71993ab0',1,'tram::Transition::name()'],['../classtram_1_1_world_cell.html#aa592b038ed73c8e2accc3ab41deb3d05',1,'tram::WorldCell::name()'],['../structtram_1_1_render_1_1_bone.html#ab98135b9d804b337b5415c5ca1462e84',1,'tram::Render::Bone::name()'],['../classtram_1_1_hashmap.html#a93e079fec725ee981f46656dec2b57fb',1,'tram::Hashmap::name()'],['../classtram_1_1_queue.html#aba308a2dd5f4e5dac2841047c46fa9bd',1,'tram::Queue::name()'],['../classtram_1_1_stack_pool.html#a8c6122dde12481b629f2f7b1ce2afc28',1,'tram::StackPool::name()']]], ['name_5fptr_1',['name_ptr',['../classtram_1_1_value_ptr.html#a9335ead8270ada0fd06cab62315dd646',1,'tram::ValuePtr']]], ['name_5fvalue_2',['name_value',['../classtram_1_1_value.html#a602ff619b99e1e7bf104968b0e6cc105',1,'tram::Value']]], ['named_5fentity_5flimit_3',['NAMED_ENTITY_LIMIT',['../namespacetram.html#a746e6432794113f984198f336d8cce65',1,'tram']]], ['near_5fplane_4',['near_plane',['../namespacetram_1_1_render.html#a5af0e03c95ed2805bfff581e9a09922f',1,'tram::Render']]], ['nearest_5',['nearest',['../structtram_1_1_octree_1_1_nearest_search.html#a720eef381f2e423cce0ca23f94add470',1,'tram::Octree::NearestSearch']]], ['next_6',['next',['../structtram_1_1_navmesh_node.html#ad3d50642ce0f2c8aa8beb13fc48ca2e2',1,'tram::NavmeshNode::next()'],['../classtram_1_1_path_follower.html#a97bd194a87f8c4d747b1c737a34f8c53',1,'tram::PathFollower::next()']]], ['next_5fstate_7',['next_state',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state.html#ab37350588a0e40d138aa060e4477a3ee',1,'tram::Ext::Kitchensink::AnimState']]], ['next_5ftopics_8',['next_topics',['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_topic.html#ad7c75b7bab534c7d74ea772608285213',1,'tram::Ext::Kitchensink::DialogTopic']]], ['nodes_9',['nodes',['../classtram_1_1_audio_1_1_sound_graph.html#afa8bc79a4c17ed1850d6f24d9110f37e',1,'tram::Audio::SoundGraph::nodes()'],['../classtram_1_1_graph.html#a95178b1e2898a6f4ba58c8b72aa2873d',1,'tram::Graph::nodes()'],['../classtram_1_1_navmesh.html#a267e74b526a850dce2b51459113082f7',1,'tram::Navmesh::nodes()'],['../classtram_1_1_render_1_1_light_graph.html#aea188bfb0d41aa49aea9898a72fd0ff2',1,'tram::Render::LightGraph::nodes()'],['../classtram_1_1_octree.html#a220207230fbc117b610f5b4a1cf38d65',1,'tram::Octree::nodes()']]], ['normal_10',['normal',['../structtram_1_1_physics_1_1_a_p_i_1_1_object_collision.html#a29cedd1e3495373e681e36fa2e835403',1,'tram::Physics::API::ObjectCollision::normal()'],['../structtram_1_1_physics_1_1_collision.html#a690a4beda93af1b5ebc99d8c8fbf781b',1,'tram::Physics::Collision::normal()'],['../structtram_1_1_render_1_1_a_p_i_1_1_f_v_f_helper.html#a1404df1c7ae080b5bc1b02abef7c8be4',1,'tram::Render::API::FVFHelper::normal()'],['../structtram_1_1_render_1_1_a_a_b_b_triangle.html#a15f432bcb85141fa1bd8d9db631a552b',1,'tram::Render::AABBTriangle::normal()'],['../structtram_1_1_render_1_1_a_p_i_1_1_f_f_p_helper.html#aae50347cfce0859d5827af69495e6664',1,'tram::Render::API::FFPHelper::normal()'],['../structtram_1_1_render_1_1_dynamic_model_vertex.html#ae360db7530c291cdcb6464a083824520',1,'tram::Render::DynamicModelVertex::normal()'],['../structtram_1_1_render_1_1_static_model_vertex.html#a75f016333052129270d3ec90b7e19e92',1,'tram::Render::StaticModelVertex::normal()']]], ['notification_5ftype_11',['notification_type',['../structtram_1_1_async_1_1_resource_request.html#ab379a8d5ddb692bc89f984e3b50b28d2',1,'tram::Async::ResourceRequest']]], ['nrm_12',['nrm',['../structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html#a688746f8f14a10efc891cf21050a8124',1,'tram::Render::API::StaticVertex::nrm()'],['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#aa0adeb384b4118a57a77b3c9cb26c140',1,'tram::Render::API::DynamicVertex::nrm()']]], ['nrm_5fx_13',['nrm_x',['../structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html#ae979b200874e1c01a4527b4f1164d8dd',1,'tram::Render::API::StaticVertex::nrm_x()'],['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#a497ee794924fd0a703819a500a55f925',1,'tram::Render::API::DynamicVertex::nrm_x()']]], ['nrm_5fy_14',['nrm_y',['../structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html#a82764d3aeda76e41829894da5c73c686',1,'tram::Render::API::StaticVertex::nrm_y()'],['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#a9efb756c481030e4f235dc3c7877185b',1,'tram::Render::API::DynamicVertex::nrm_y()']]], ['nrm_5fz_15',['nrm_z',['../structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html#a334cd02aa75a7460392752076ce9b910',1,'tram::Render::API::StaticVertex::nrm_z()'],['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#a51c8374f9bfabfec978dc16fe67f7249',1,'tram::Render::API::DynamicVertex::nrm_z()']]] ]; ================================================ FILE: docs/cppapi/search/variables_e.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/variables_e.js ================================================ var searchData= [ ['objective_0',['objective',['../structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html#a7021e12190dd43a86f02ea92fc0bb700',1,'tram::Ext::Kitchensink::QuestVariable']]], ['octants_1',['octants',['../structtram_1_1_octree_1_1_node.html#a95c1f7044d872a41e611dd968405771d',1,'tram::Octree::Node']]], ['offset_2',['offset',['../classtram_1_1_ext_1_1_menu_1_1_intercept_menu.html#a2c39ca031c740b68ca7695bb8c3af75c',1,'tram::Ext::Menu::InterceptMenu::offset()'],['../structtram_1_1_render_1_1_vertex_attribute.html#a5f80d9935ba524ba91ac7a76ad40ea63',1,'tram::Render::VertexAttribute::offset()']]], ['offset_5fx_3',['offset_x',['../structtram_1_1_render_1_1_sprite_frame.html#ab4657070362abc108e5838bb7c1c20e0',1,'tram::Render::SpriteFrame']]], ['offset_5fy_4',['offset_y',['../structtram_1_1_render_1_1_sprite_frame.html#a8ed7da0b5f25a4b6c74db2864ba0162e',1,'tram::Render::SpriteFrame']]], ['origin_5',['origin',['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#abd3ab3f24e9881fafefd2f8f47e1e902',1,'tram::Ext::Kitchensink::Button::origin()'],['../classtram_1_1_render_1_1_model.html#aff4ea02ba501bed88104e795ca72f100',1,'tram::Render::Model::origin()']]], ['ortho_5fratio_6',['ortho_ratio',['../namespacetram_1_1_render.html#a1b80c54f15430a66aae59f839ece5e7d',1,'tram::Render']]], ['override_5fstack_7',['override_stack',['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html#a7c1f9cd1c54afd025f332f11c4643cb1',1,'tram::Ext::Kitchensink::AIAgent']]] ]; ================================================ FILE: docs/cppapi/search/variables_f.html ================================================
    Loading...
    Searching...
    No Matches
    ================================================ FILE: docs/cppapi/search/variables_f.js ================================================ var searchData= [ ['p0_0',['p0',['../structtram_1_1_physics_1_1_collision_triangle.html#af79a85c745ddbf74ab90304395826b6c',1,'tram::Physics::CollisionTriangle']]], ['p1_1',['p1',['../structtram_1_1_physics_1_1_collision_triangle.html#a3bfb775d8ba71bf1452495ac6aa73a1d',1,'tram::Physics::CollisionTriangle']]], ['p2_2',['p2',['../structtram_1_1_physics_1_1_collision_triangle.html#a2fd02ff41418623b5dcc960512a0c342',1,'tram::Physics::CollisionTriangle']]], ['package_5fstack_3',['package_stack',['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_agent.html#aecf643b955c103675f0ae066f443dd16',1,'tram::Ext::Kitchensink::AIAgent']]], ['padding_4',['padding',['../structtram_1_1_async_1_1_resource_request.html#a5dcec7fba31fe955a878c7689bebcb5e',1,'tram::Async::ResourceRequest::padding()'],['../structtram_1_1_render_1_1_keyframe.html#a1cd5b08f51a3ae82605f1aeb22ef52c1',1,'tram::Render::Keyframe::padding()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_light.html#a77e3100b3b9e5768fd058115e131d221',1,'tram::Render::API::GLLight::padding()'],['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_matrices.html#a0caf5926243d94dddc492057c25363cf',1,'tram::Render::API::ShaderUniformMatrices::padding()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_index_array.html#a2de31335d50d09b3228d92b4129dad6f',1,'tram::Render::API::SWIndexArray::padding()'],['../classtram_1_1_hashmap.html#a2eb7e0ca3a72367b3944121636bd74cc',1,'tram::Hashmap::padding()']]], ['padding2_5',['padding2',['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_light.html#aaf9eba5b5c1706e06920f3ed97880984',1,'tram::Render::API::GLLight']]], ['panning_6',['panning',['../structtram_1_1_audio_1_1_spatial_1_1_path_rendering_info.html#a78cb51ec6fb70e03023f07e2e73a4151',1,'tram::Audio::Spatial::PathRenderingInfo']]], ['panning_5fdelay_7',['panning_delay',['../structtram_1_1_audio_1_1_spatial_1_1_path_rendering_info.html#a25cccaf4eef89dd7b557744b85e0c4a5',1,'tram::Audio::Spatial::PathRenderingInfo']]], ['param1_8',['param1',['../structtram_1_1_audio_1_1_filter_parameters.html#ae3e26b76955919a2680af843d03241b2',1,'tram::Audio::FilterParameters']]], ['param2_9',['param2',['../structtram_1_1_audio_1_1_filter_parameters.html#a9850c062a0de94c19491e7f2cf65ce1e',1,'tram::Audio::FilterParameters']]], ['parameter_5fstring_10',['parameter_string',['../classtram_1_1_ext_1_1_menu_1_1_message_send.html#ac7674c2ea9dadef8e94fb4f9407271e3',1,'tram::Ext::Menu::MessageSend::parameter_string()'],['../classtram_1_1_ext_1_1_menu_1_1_event_emit.html#a123fd9dd1b5828d6e09669773c1c80d1',1,'tram::Ext::Menu::EventEmit::parameter_string()']]], ['parameter_5ftype_11',['parameter_type',['../classtram_1_1_ext_1_1_menu_1_1_message_send.html#ac3eb62488f5accdcc4f60ef0f9d93fb0',1,'tram::Ext::Menu::MessageSend::parameter_type()'],['../classtram_1_1_ext_1_1_menu_1_1_event_emit.html#ac74668908219798e42ccb5c73b8b60fd',1,'tram::Ext::Menu::EventEmit::parameter_type()']]], ['parameters_12',['parameters',['../structtram_1_1_audio_1_1_sound_graph_1_1_node.html#a602e0ab95181fce7095038d2c7e8cc60',1,'tram::Audio::SoundGraph::Node::parameters()'],['../namespacetram_1_1_ext_1_1_scripting_1_1_lua.html#a63ffedf8d40f57cc6c53d9f617b1fcc5',1,'tram::Ext::Scripting::Lua::parameters()']]], ['parent_13',['parent',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_space.html#a5ff4f114e9722b8a4bcda22212789b9a',1,'tram::Ext::Kitchensink::AnimStateSpace::parent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#ad9c047256c4c960006fcada8a7d03ede',1,'tram::Ext::Kitchensink::Button::parent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_inventory.html#a121a1bf7605e24565f69bb965c2ad731',1,'tram::Ext::Kitchensink::Inventory::parent()'],['../classtram_1_1_entity_component.html#aea0aa7626e36e31f1621ba81925cb56b',1,'tram::EntityComponent::parent()'],['../classtram_1_1_resource_proxy.html#ad0386a7f5c0158ead0174c2cdd25c2b6',1,'tram::ResourceProxy::parent()'],['../structtram_1_1_render_1_1_bone.html#aa35e3897afb1d7c407ce7b85251742e3',1,'tram::Render::Bone::parent()'],['../structtram_1_1_a_a_b_b_tree_1_1_node.html#a70fe0c482870a3a4a60f17eaacc2be33',1,'tram::AABBTree::Node::parent()'],['../structtram_1_1_octree_1_1_node.html#a3824ba3c3a244a92562817cf43c102df',1,'tram::Octree::Node::parent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_a_i_package.html#a9647c7b82c89b70b1f28c6b6fa7f6349',1,'tram::Ext::Kitchensink::AIPackage::parent()']]], ['particle_5fmax_5fage_14',['particle_max_age',['../classtram_1_1_particle_component.html#ac12c10889354895c145ddfbd759ed2c2',1,'tram::ParticleComponent']]], ['particles_15',['particles',['../classtram_1_1_particle_component.html#af671bbcfbdb0e2560ac63704b17e98f4',1,'tram::ParticleComponent']]], ['path_16',['path',['../classtram_1_1_file.html#a3d25cbe667ab658dbaea6655a6321782',1,'tram::File::path()'],['../classtram_1_1_path_follower.html#afef4ecc46377cb395a63dbd67bc16c9c',1,'tram::PathFollower::path()'],['../structtram_1_1_file_source.html#a5addd94ec280b82396cff93ec0ece536',1,'tram::FileSource::path()']]], ['path_5flimit_17',['PATH_LIMIT',['../namespacetram.html#a4c8eb191637ec58035b98bc8a3dc7955',1,'tram']]], ['paths_18',['paths',['../structtram_1_1_audio_1_1_spatial_1_1_audio_source.html#a2307e10b58bfd5e4226f76a8fd562630',1,'tram::Audio::Spatial::AudioSource::paths()'],['../structtram_1_1_audio_1_1_spatial_1_1_audio_render.html#a2aa48cc3aaf2682ae9d82c25d9efa6b8',1,'tram::Audio::Spatial::AudioRender::paths()']]], ['paths_5ffor_5flistener_19',['PATHS_FOR_LISTENER',['../namespacetram_1_1_audio_1_1_spatial.html#abe41831e149db1775fb1a738b693a2e4',1,'tram::Audio::Spatial']]], ['paths_5ffor_5frendering_20',['PATHS_FOR_RENDERING',['../namespacetram_1_1_audio_1_1_spatial.html#a84078cbb908ef623f2337cdce8a777b9',1,'tram::Audio::Spatial']]], ['paths_5ffor_5fsource_21',['PATHS_FOR_SOURCE',['../namespacetram_1_1_audio_1_1_spatial.html#ab6d4c2f9690d64f882c492e5e9075eae',1,'tram::Audio::Spatial']]], ['pause_22',['pause',['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a86d016cc6943098f57b0b48ae9b39b8e',1,'tram::Ext::Kitchensink::Button::pause()'],['../structtram_1_1_animation_component_1_1_animation_playback_info.html#a7ac66228a0680599c017d9dad5bbcc6c',1,'tram::AnimationComponent::AnimationPlaybackInfo::pause()']]], ['pause_5flast_23',['pause_last',['../structtram_1_1_ext_1_1_kitchensink_1_1_anim_state.html#aa4d3e08ffedcce66e94535cf569b183f',1,'tram::Ext::Kitchensink::AnimState']]], ['pause_5fnext_24',['pause_next',['../classtram_1_1_file.html#a5b6f66dee66294cd7095cb4bc4a3a265',1,'tram::File']]], ['pause_5fon_5flast_5fframe_25',['pause_on_last_frame',['../structtram_1_1_animation_component_1_1_animation_playback_info.html#a5cd0230ac57aa0d044f40a4f159e07da',1,'tram::AnimationComponent::AnimationPlaybackInfo']]], ['physics_5fbody_26',['physics_body',['../classtram_1_1_player.html#a70d0096e740c70b9d4b2a4d1f567166b',1,'tram::Player']]], ['physics_5fgravity_27',['PHYSICS_GRAVITY',['../namespacetram.html#a62a53097647f52336381e7470fb2abe5',1,'tram']]], ['physics_5fground_5fplane_28',['PHYSICS_GROUND_PLANE',['../namespacetram.html#aee70318c6bcb6ab23a4c627b40ffc247',1,'tram']]], ['physicscomponent_29',['physicscomponent',['../classtram_1_1_decoration.html#a583857b0ebd4e260c7ef634ff93d7bdf',1,'tram::Decoration::physicscomponent()'],['../classtram_1_1_static_world_object.html#afcf86a58f1164ab9bef21c7f01e42def',1,'tram::StaticWorldObject::physicscomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a4dd2f1f76ca0846de1455e4ad4d1cf8d',1,'tram::Ext::Kitchensink::Button::physicscomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_breakable.html#ac912d2b557ffcb5d2883ea43646b5b17',1,'tram::Ext::Kitchensink::Breakable::physicscomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_water.html#a1d604782c7dd64c7d26a515b35e9defb',1,'tram::Ext::Kitchensink::Water::physicscomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_train.html#ad72e7fe2faf8817a399bf94ada70c562',1,'tram::Ext::Kitchensink::Train::physicscomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_pickup.html#a881a5ba8049060a6ac23f30404c0d8e2',1,'tram::Ext::Kitchensink::Pickup::physicscomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_text.html#a24ac74bcb44bef87d855544b8040e83d',1,'tram::Ext::Kitchensink::DebugText::physicscomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_debug_shape.html#a4b6d2a2cc1fa252481c5418e50d26c74',1,'tram::Ext::Kitchensink::DebugShape::physicscomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_autosave.html#a641f20fdc9e0a3f0887be88f0198580c',1,'tram::Ext::Kitchensink::TriggerAutosave::physicscomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_hurt.html#a1fcf1fd373b0735b96983688eaa52961',1,'tram::Ext::Kitchensink::TriggerHurt::physicscomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_once.html#a1134b7b7a4a65ce7902004bb4dd75a50',1,'tram::Ext::Kitchensink::TriggerOnce::physicscomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_multiple.html#add39da54898ba26a33986bd99872abaa',1,'tram::Ext::Kitchensink::TriggerMultiple::physicscomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_push.html#aee5d9dfe5e798739bb70eb16d2a9948e',1,'tram::Ext::Kitchensink::TriggerPush::physicscomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_remove.html#a127f6410a4f40845b89d2b917154d09d',1,'tram::Ext::Kitchensink::TriggerRemove::physicscomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_teleport.html#aa1eabe6c002caa539efb57b79345520f',1,'tram::Ext::Kitchensink::TriggerTeleport::physicscomponent()'],['../classtram_1_1_ext_1_1_kitchensink_1_1_trigger_player_movement.html#a5bf7a2365438d0aff49a42ba6809de17',1,'tram::Ext::Kitchensink::TriggerPlayerMovement::physicscomponent()'],['../classtram_1_1_crate.html#a81bf1b61c023f0923ded303fabf343f2',1,'tram::Crate::physicscomponent()']]], ['pitch_30',['pitch',['../classtram_1_1_ext_1_1_camera_1_1_first_person_camera.html#a44a70884e100d0b6a198b3ec588a68b6',1,'tram::Ext::Camera::FirstPersonCamera']]], ['pixels_31',['pixels',['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_texture.html#a95971f9092686bb8428c980f655d7334',1,'tram::Render::API::SWTexture']]], ['planes_32',['planes',['../classtram_1_1_transition.html#a15309d1c272d449fb0bda318deb76dd7',1,'tram::Transition']]], ['play_5fon_5fstart_33',['play_on_start',['../classtram_1_1_audio_component.html#afa9685950e016f31ca90c71839cd7852',1,'tram::AudioComponent']]], ['player_34',['player',['../main_8cpp.html#a96781128d3743da3d17e0fdd91afba7b',1,'main.cpp']]], ['plomp_35',['plomp',['../classtram_1_1_player.html#a02a0f79e73da31e380ab604773461b4b',1,'tram::Player']]], ['point_36',['point',['../structtram_1_1_physics_1_1_a_p_i_1_1_object_collision.html#a092ad31904c1e2c66386ee35b85f151a',1,'tram::Physics::API::ObjectCollision::point()'],['../structtram_1_1_physics_1_1_collision.html#a6d9ec6fb6b22c4d6c7426a6ac99962ce',1,'tram::Physics::Collision::point()'],['../structtram_1_1_octree_1_1_node.html#a6547353b4a05dc60327f462ff73e0757',1,'tram::Octree::Node::point()'],['../structtram_1_1_octree_1_1_nearest_search.html#adf2e15ec26f3738dd03c6712de61df5e',1,'tram::Octree::NearestSearch::point()'],['../structtram_1_1_audio_1_1_spatial_1_1_path_tracing_result.html#a56f99496bd44366e4bca18e6ca954952',1,'tram::Audio::Spatial::PathTracingResult::point()'],['../structtram_1_1_audio_1_1_spatial_1_1_path_from_audio_source.html#a5f809d617ba9af7d80992d569868ccb7',1,'tram::Audio::Spatial::PathFromAudioSource::point()']]], ['point1_37',['point1',['../structtram_1_1_render_1_1_a_a_b_b_triangle.html#a6706198c449462db4acad33bfccc4a73',1,'tram::Render::AABBTriangle']]], ['point2_38',['point2',['../structtram_1_1_render_1_1_a_a_b_b_triangle.html#a912b569097565c02f6614349d39ba473',1,'tram::Render::AABBTriangle']]], ['point3_39',['point3',['../structtram_1_1_render_1_1_a_a_b_b_triangle.html#abda9898750755ee69a75ae3251a92148',1,'tram::Render::AABBTriangle']]], ['points_40',['points',['../classtram_1_1_transition.html#a43d8d05a4e4a8e59ebd166d65a6f193b',1,'tram::Transition::points()'],['../structtram_1_1_render_1_1_a_p_i_1_1_clip_triangle.html#a937617e87e580c7b4c0c4e0a3a07316f',1,'tram::Render::API::ClipTriangle::points()']]], ['pool_41',['pool',['../classtram_1_1_pool_proxy.html#ad6e9619a7833dc2b54ee8cbe1d27ef51',1,'tram::PoolProxy']]], ['poolname_42',['poolName',['../classtram_1_1_pool.html#a7c93c6c74e11a18855e33e69a87d481f',1,'tram::Pool']]], ['poolsize_43',['poolSize',['../classtram_1_1_pool.html#a4208869bc738c75f8c11b7b65b526564',1,'tram::Pool']]], ['pos_44',['pos',['../structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html#a121754a2c7e31faab70e3d3f64e11521',1,'tram::Render::API::StaticVertex::pos()'],['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#a4d99341a991cf7b2a8b4f298e4e96afd',1,'tram::Render::API::DynamicVertex::pos()'],['../structtram_1_1_render_1_1_a_p_i_1_1_color_vertex.html#a90cad82d292fb32eb4149d3cd5992b91',1,'tram::Render::API::ColorVertex::pos()']]], ['pos_5fx_45',['pos_x',['../structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html#ab7fad3a06c395b99809f8957e73e4cc2',1,'tram::Render::API::StaticVertex::pos_x()'],['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#a8712dd86d3119a4fc6ddbf92c235067f',1,'tram::Render::API::DynamicVertex::pos_x()'],['../structtram_1_1_render_1_1_a_p_i_1_1_line_vertex.html#a07bdacffe0baf8fd7b6f179b525105ac',1,'tram::Render::API::LineVertex::pos_x()']]], ['pos_5fy_46',['pos_y',['../structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html#a4aec6b58286bda99e48c539f5b273ca6',1,'tram::Render::API::StaticVertex::pos_y()'],['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#ac2f4357b94953eee0475ad9f61889816',1,'tram::Render::API::DynamicVertex::pos_y()'],['../structtram_1_1_render_1_1_a_p_i_1_1_line_vertex.html#ae0cc6aaaecc942735cf306818d019a67',1,'tram::Render::API::LineVertex::pos_y()']]], ['pos_5fz_47',['pos_z',['../structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html#a483db60e761add751c3b23e81bedcb93',1,'tram::Render::API::StaticVertex::pos_z()'],['../structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html#a748a5f6c0a267fb6b51f1180e78c504a',1,'tram::Render::API::DynamicVertex::pos_z()'],['../structtram_1_1_render_1_1_a_p_i_1_1_line_vertex.html#a4e8c58a3a5bee43731ebe1d31ffcb1bf',1,'tram::Render::API::LineVertex::pos_z()']]], ['pose_48',['pose',['../classtram_1_1_animation_component.html#a8ca6edc357f6d61b8750acdec9d4de77',1,'tram::AnimationComponent::pose()'],['../classtram_1_1_render_component.html#affc6cba67cad84483c2dd69ba952a7f3',1,'tram::RenderComponent::pose()'],['../structtram_1_1_render_1_1_pose.html#a80a33d6441ac42610e7cae4e31c8b1bb',1,'tram::Render::Pose::pose()'],['../structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html#a53e75e90c2e6720867d49dbfe3d379a2',1,'tram::Render::API::D3DDrawListEntry::pose()'],['../structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html#ad431ba61a7c7f2673948abacbf85aa0d',1,'tram::Render::API::GLDrawListEntry::pose()'],['../structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html#a81ae414cf1df35f7eae3e7301df25377',1,'tram::Render::API::SWDrawListEntry::pose()']]], ['position_49',['position',['../structtram_1_1_render_1_1_a_p_i_1_1_f_v_f_helper.html#a81dd8b7602640a63b63ef086aab65c0f',1,'tram::Render::API::FVFHelper::position()'],['../structtram_1_1_render_1_1_light_graph_1_1_node.html#ac676ead25ef8bcd8846345f39d733a12',1,'tram::Render::LightGraph::Node::position()'],['../structtram_1_1_render_1_1_light_tree_1_1_light.html#ae48221ebf0f2f7822ab6afdf24178acc',1,'tram::Render::LightTree::Light::position()'],['../structtram_1_1_render_1_1_a_p_i_1_1_f_f_p_helper.html#ac01392b410606fc8a96f548c3054414f',1,'tram::Render::API::FFPHelper::position()'],['../structtram_1_1_render_1_1_sprite_point.html#a3103f0ed581c4c8e8a43bc89ed981450',1,'tram::Render::SpritePoint::position()'],['../structtram_1_1_audio_1_1_sound_graph_1_1_node.html#a0a633c6d644b35fad08de5f63dbb9e83',1,'tram::Audio::SoundGraph::Node::position()'],['../structtram_1_1_audio_1_1_spatial_1_1_audio_source.html#a45a1264a5f87e8e4cbc767b3511adfc6',1,'tram::Audio::Spatial::AudioSource::position()'],['../classtram_1_1_ext_1_1_camera_1_1_camera.html#a071bb8522454174c7048ed6f3dcda4df',1,'tram::Ext::Camera::Camera::position()'],['../structtram_1_1_shared_entity_data.html#af1759c89e46d55eb848b84f67cc0c3f1',1,'tram::SharedEntityData::position()'],['../structtram_1_1_node.html#a189f24e56e385fcf1e9ff4b4b40c7b7a',1,'tram::Node::position()'],['../structtram_1_1_navmesh_node.html#aae10ee4d482ec0937f6246279734e0f1',1,'tram::NavmeshNode::position()'],['../structtram_1_1_physics_1_1_a_p_i_1_1_collision_shape_transform.html#af65c9e8ab913b92a3b19454ab7747105',1,'tram::Physics::API::CollisionShapeTransform::position()'],['../classtram_1_1_physics_1_1_a_p_i_1_1_callback_motion_state.html#a2374bce1a3ea318d53f293d90231d431',1,'tram::Physics::API::CallbackMotionState::position()']]], ['poster_50',['poster',['../structtram_1_1_event.html#a92418dc8036094cf309758831c14deed',1,'tram::Event']]], ['prev_51',['prev',['../structtram_1_1_navmesh_node.html#a56530b45077f4b6e6bf49e254b4a5ad5',1,'tram::NavmeshNode::prev()'],['../classtram_1_1_path_follower.html#ace8a71f492daf52acb64b89fd21bc025',1,'tram::PathFollower::prev()']]], ['progress_52',['progress',['../classtram_1_1_ext_1_1_kitchensink_1_1_button.html#a90673adbb238aace522e9ab8be1218d6',1,'tram::Ext::Kitchensink::Button::progress()'],['../classtram_1_1_path_follower.html#adc605aaf1c4740b70ebe8a16be03af60',1,'tram::PathFollower::progress()']]], ['projection_53',['projection',['../namespacetram_1_1_render.html#a4b4ea9d6c17adfd0a9343d5908b5dcdc',1,'tram::Render::projection()'],['../structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_matrices.html#a392cd9d354cb1ca50b9cbde197f687a2',1,'tram::Render::API::ShaderUniformMatrices::projection()']]], ['projection_5fmatrix_54',['projection_matrix',['../structtram_1_1_render_1_1_a_p_i_1_1_layer_parameters.html#a90f643942f1e49d84aaf87c8d9edc1fc',1,'tram::Render::API::LayerParameters']]], ['prompt_55',['prompt',['../structtram_1_1_ext_1_1_kitchensink_1_1_dialog_topic.html#a078f196f4d258ea6dda98a69263ceae8',1,'tram::Ext::Kitchensink::DialogTopic']]], ['property_56',['property',['../classtram_1_1_render_1_1_material.html#a758d1a53191fd27bec22aa269b1edd21',1,'tram::Render::Material']]], ['ptr_57',['ptr',['../classtram_1_1_component.html#a76e7065ebab1cd17d4cabe184ff78dfe',1,'tram::Component::ptr()'],['../structtram_1_1_pool_1_1iterator.html#a808c822ba3bb0ba92a806f668c934fa7',1,'tram::Pool::iterator::ptr()'],['../classtram_1_1_pool_ptr.html#aba35892d9d52fdbeb76f74fdbe9ed80f',1,'tram::PoolPtr::ptr()']]] ]; ================================================ FILE: docs/cppapi/serialization_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/serialization.h File Reference
    Tramway SDK v0.1.1
    serialization.h File Reference
    #include <cassert>
    #include <framework/uid.h>
    #include <framework/value.h>
    #include <framework/math.h>

    Go to the source code of this file.

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    ================================================ FILE: docs/cppapi/serialization_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/serialization.h Source File
    Tramway SDK v0.1.1
    serialization.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_FRAMEWORK_SERIALIZATION_H
    4#define TRAM_SDK_FRAMEWORK_SERIALIZATION_H
    5
    6#include <cassert>
    7
    8#include <framework/uid.h>
    9#include <framework/value.h>
    10
    11#include <framework/math.h>
    12
    19namespace tram {
    20
    22/*class SerializedFieldArray {
    23public:
    24 SerializedFieldArray(const Value* first, size_t count) : first_field(first), field_count(count) {}
    25 const Value& operator [](size_t n) const { assert(n < field_count); return first_field[n]; }
    26private:
    27 const Value* first_field;
    28 size_t field_count;
    29};*/
    30
    31}
    32
    33#endif // TRAM_SDK_FRAMEWORK_SERIALIZATION_H
    Serialization, i.e.
    ================================================ FILE: docs/cppapi/settings_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/settings.cpp File Reference
    Tramway SDK v0.1.1
    settings.cpp File Reference
    #include <framework/settings.h>
    #include <framework/logging.h>
    #include <templates/hashmap.h>
    #include <templates/pool.h>
    #include <vector>

    Classes

    struct  tram::Settings::SettingInfo
     
    struct  tram::Settings::RawSetting
     

    Namespaces

    namespace  tram::Settings
     Application setting management and CLI command parser.
     
    namespace  tram
     Serialization, i.e.
     

    Functions

    void tram::Settings::SetFromRaw (SettingInfo &info)
     
    void tram::Settings::SetAndStore (SettingInfo info)
     
    void tram::Settings::Register (bool &value, const char *name, uint32_t flags)
     
    void tram::Settings::Register (float &value, const char *name, uint32_t flags)
     
    void tram::Settings::Register (int32_t &value, const char *name, uint32_t flags)
     
    void tram::Settings::Register (uint32_t &value, const char *name, uint32_t flags)
     
    Value tram::Settings::Get (name_t name)
     
    void tram::Settings::Set (name_t name, Value value)
     
    void tram::Settings::Parse (const char **argv, int argc)
     
    uint32_t tram::Settings::Flags (name_t name)
     
    std::vector< name_t > tram::Settings::GetSettings (uint32_t filter)
     
    void tram::Settings::Save (const char *file)
     
    void tram::Settings::Load (const char *file)
     

    Variables

    const int tram::Settings::SETTING_LIMIT = 200
     
    ================================================ FILE: docs/cppapi/settings_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/settings.h File Reference
    Tramway SDK v0.1.1
    settings.h File Reference
    #include <framework/value.h>
    #include <initializer_list>
    #include <vector>

    Go to the source code of this file.

    Classes

    struct  tram::Settings::Property< T >
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Settings
     Application setting management and CLI command parser.
     

    Enumerations

    enum  : uint32_t { tram::Settings::USER = 1 , tram::Settings::APPLICATION = 2 , tram::Settings::MENU = 4 , tram::Settings::NONE = 0 }
     

    Functions

    void tram::Settings::Register (bool &value, const char *name, uint32_t flags)
     
    void tram::Settings::Register (float &value, const char *name, uint32_t flags)
     
    void tram::Settings::Register (int32_t &value, const char *name, uint32_t flags)
     
    void tram::Settings::Register (uint32_t &value, const char *name, uint32_t flags)
     
    Value tram::Settings::Get (name_t name)
     
    void tram::Settings::Set (name_t name, Value value)
     
    void tram::Settings::Parse (const char **argv, int argc)
     
    void tram::Settings::Save (const char *file)
     
    void tram::Settings::Load (const char *file)
     
    uint32_t tram::Settings::Flags (name_t name)
     
    std::vector< name_t > tram::Settings::GetSettings (uint32_t filter)
     
    ================================================ FILE: docs/cppapi/settings_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/settings.h Source File
    Tramway SDK v0.1.1
    settings.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_FRAMEWORK_SETTINGS_H
    4#define TRAM_SDK_FRAMEWORK_SETTINGS_H
    5
    6#include <framework/value.h>
    7
    8#include <initializer_list>
    9#include <vector>
    10
    11namespace tram::Settings {
    12
    13enum : uint32_t {
    14 USER = 1, //< Save the setting in user data
    15 APPLICATION = 2, //< Save the setting in application state data
    16 MENU = 4, //< Show the setting in the setting menu
    17
    18 // maybe we could add some read-only or write-only flags?
    19
    20 NONE = 0
    21};
    22
    23void Register(bool& value, const char* name, uint32_t flags);
    24void Register(float& value, const char* name, uint32_t flags);
    25void Register(int32_t& value, const char* name, uint32_t flags);
    26void Register(uint32_t& value, const char* name, uint32_t flags);
    27
    28Value Get(name_t name);
    29void Set(name_t name, Value value);
    30
    31void Parse(const char** argv, int argc);
    32
    33void Save(const char* file);
    34void Load(const char* file);
    35
    36uint32_t Flags(name_t name);
    37
    38std::vector<name_t> GetSettings(uint32_t filter);
    39
    40template<typename T>
    41struct Property {
    42 Property(std::initializer_list<value_t> values) {
    43 value = values.begin()[0];
    44
    45 const char* name = values.begin()[1];
    46 uint32_t flags = values.begin()[2];
    47
    48 Register(value, name, flags);
    49 }
    50
    51 Property(const T& value) {
    52 this->value = value;
    53 }
    54
    55 /*T& operator=(const Setting<T>& other) {
    56 this->value = other;
    57 return *this;
    58 }*/
    59
    60 operator T() {
    61 return value;
    62 }
    63
    65};
    66
    67}
    68
    69#endif // TRAM_SDK_FRAMEWORK_SETTINGS_H
    Generic, type-safe union.
    Definition: value.h:18
    Application setting management and CLI command parser.
    @ MENU
    Definition: settings.h:16
    @ APPLICATION
    Definition: settings.h:15
    @ USER
    Definition: settings.h:14
    @ NONE
    Definition: settings.h:20
    void Parse(const char **argv, int argc)
    Definition: settings.cpp:178
    Value Get(name_t name)
    Definition: settings.cpp:114
    void Set(name_t name, Value value)
    Definition: settings.cpp:148
    void Load(const char *file)
    Definition: settings.cpp:247
    uint32_t Flags(name_t name)
    Definition: settings.cpp:233
    std::vector< name_t > GetSettings(uint32_t filter)
    Definition: settings.cpp:238
    void Register(bool &value, const char *name, uint32_t flags)
    Definition: settings.cpp:96
    void Save(const char *file)
    Definition: settings.cpp:243
    Definition: settings.h:41
    T value
    Definition: settings.h:64
    Property(const T &value)
    Definition: settings.h:51
    Property(std::initializer_list< value_t > values)
    Definition: settings.h:42
    Interned string type.
    Definition: uid.h:10
    ================================================ FILE: docs/cppapi/shader_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/shader.cpp File Reference
    Tramway SDK v0.1.1
    shader.cpp File Reference
    #include <cassert>
    #include <iostream>
    #include <fstream>
    #include <sstream>
    #include <cstring>
    #include <config.h>
    #include <GL/gl.h>
    #include <GLES3/gl3.h>
    #include <framework/logging.h>
    #include <platform/file.h>
    #include <render/opengl/shader.h>
    #include <render/opengl/renderer.h>

    Classes

    class  tram::Render::API::VertexShader
     
    class  tram::Render::API::FragmentShader
     
    class  tram::Render::API::LinkedShader
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Render
     High-level Render system API.
     
    namespace  tram::Render::API
     Rendering backend API.
     

    Functions

    void tram::Render::API::BindUniformBlock (const char *name, uint32_t binding)
     
    void tram::Render::API::RegisterShader (vertexformat_t format, materialtype_t type, const char *vertex_shader, const char *fragment_shader)
     
    uint32_t tram::Render::API::FindShader (vertexformat_t format, materialtype_t type, shaderflags_t mask)
     
    uint32_t tram::Render::API::GetAnyShader (shaderflags_t mask)
     
    void tram::Render::API::CompileShaders ()
     

    Variables

    const char * tram::Render::API::shader_path = "shaders/gles3/"
     
    ================================================ FILE: docs/cppapi/shader_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/shader.h File Reference
    Tramway SDK v0.1.1
    shader.h File Reference
    #include <render/render.h>
    #include <render/renderer.h>

    Go to the source code of this file.

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Render
     High-level Render system API.
     
    namespace  tram::Render::API
     Rendering backend API.
     

    Typedefs

    typedef uint32_t tram::Render::API::shaderflags_t
     

    Enumerations

    enum  tram::Render::API::ShaderFlag : shaderflags_t { tram::Render::API::SHADER_NONE = 0 , tram::Render::API::SHADER_SPECULAR = 1 , tram::Render::API::SHADER_LIGHTMAP = 2 }
     

    Functions

    void tram::Render::API::CompileShaders ()
     
    uint32_t tram::Render::API::FindShader (vertexformat_t format, materialtype_t type, shaderflags_t mask)
     
    uint32_t tram::Render::API::GetAnyShader (shaderflags_t mask)
     
    void tram::Render::API::RegisterShader (vertexformat_t format, materialtype_t type, const char *vertex_shader, const char *fragment_shader)
     
    void tram::Render::API::BindUniformBlock (const char *name, uint32_t binding)
     
    ================================================ FILE: docs/cppapi/shader_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/shader.h Source File
    Tramway SDK v0.1.1
    shader.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_RENDER_OPENGL_SHADER_H
    4#define TRAM_SDK_RENDER_OPENGL_SHADER_H
    5
    6#include <render/render.h>
    7#include <render/renderer.h>
    8
    9namespace tram::Render::API {
    10
    11typedef uint32_t shaderflags_t;
    12
    17};
    18
    19void CompileShaders();
    20
    21uint32_t FindShader(vertexformat_t format, materialtype_t type, shaderflags_t mask);
    22uint32_t GetAnyShader(shaderflags_t mask);
    23void RegisterShader(vertexformat_t format, materialtype_t type, const char* vertex_shader, const char* fragment_shader);
    24
    25void BindUniformBlock (const char* name, uint32_t binding);
    26
    27}
    28
    29#endif // TRAM_SDK_RENDER_OPENGL_SHADER_H
    Rendering backend API.
    ShaderFlag
    Definition: shader.h:13
    @ SHADER_LIGHTMAP
    Definition: shader.h:16
    @ SHADER_NONE
    Definition: shader.h:14
    @ SHADER_SPECULAR
    Definition: shader.h:15
    void CompileShaders()
    Definition: shader.cpp:355
    void BindUniformBlock(const char *name, uint32_t binding)
    Definition: shader.cpp:339
    uint32_t GetAnyShader(shaderflags_t mask)
    Definition: shader.cpp:351
    void RegisterShader(vertexformat_t format, materialtype_t type, const char *vertex_shader, const char *fragment_shader)
    Definition: shader.cpp:343
    uint32_t FindShader(vertexformat_t format, materialtype_t type, shaderflags_t mask)
    Definition: shader.cpp:347
    uint32_t shaderflags_t
    Definition: shader.h:11
    uint32_t vertexformat_t
    Definition: render.h:19
    uint32_t materialtype_t
    Definition: render.h:20
    ================================================ FILE: docs/cppapi/signal_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/signal.cpp File Reference
    Tramway SDK v0.1.1
    signal.cpp File Reference
    #include <templates/hashmap.h>
    #include <framework/signal.h>
    #include <framework/entity.h>
    #include <framework/value.h>
    #include <framework/logging.h>
    #include <config.h>

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    ================================================ FILE: docs/cppapi/signal_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/signal.h File Reference
    Tramway SDK v0.1.1
    signal.h File Reference
    #include <framework/message.h>
    #include <framework/event.h>
    #include <framework/uid.h>

    Go to the source code of this file.

    Classes

    struct  tram::Signal
     Message template. More...
     
    class  tram::SignalTable
     List of Message templates. More...
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     

    Typedefs

    typedef uint32_t tram::signal_t
     
    ================================================ FILE: docs/cppapi/signal_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/signal.h Source File
    Tramway SDK v0.1.1
    signal.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_FRAMEWORK_SIGNAL_H
    4#define TRAM_SDK_FRAMEWORK_SIGNAL_H
    5
    6#include <framework/message.h>
    7#include <framework/event.h>
    8#include <framework/uid.h>
    9
    10namespace tram {
    11
    12typedef uint32_t signal_t;
    13
    14struct Value;
    15
    16struct Signal {
    17 enum Type : signal_t {
    33 };
    34
    36
    38 void* data;
    39
    40 float delay;
    41 int limit;
    42
    44
    45 static signal_t Register(const char* name);
    46 static signal_t GetType(name_t name);
    48};
    49
    51public:
    52 void Fire(signal_t signal, id_t sender);
    53 void Fire(signal_t signal, id_t sender, Value value);
    54 void Add(const Signal& signal);
    55public:
    57 size_t signal_count = 0;
    58};
    59
    60}
    61
    62#endif // TRAM_SDK_FRAMEWORK_SIGNAL_H
    List of Message templates.
    Definition: signal.h:50
    void Add(const Signal &signal)
    Definition: signal.cpp:163
    void Fire(signal_t signal, id_t sender)
    Definition: signal.cpp:105
    size_t signal_count
    Definition: signal.h:57
    Signal signals[10]
    Definition: signal.h:56
    Generic, type-safe union.
    Definition: value.h:18
    Serialization, i.e.
    uint32_t id_t
    Definition: core.h:10
    uint32_t message_t
    Definition: message.h:10
    uint32_t signal_t
    Definition: signal.h:12
    Message template.
    Definition: signal.h:16
    signal_t type
    Definition: signal.h:35
    static name_t GetName(signal_t type)
    Gets a nessage type name.
    Definition: signal.cpp:96
    static signal_t GetType(name_t name)
    Finds a message type from a name.
    Definition: signal.cpp:80
    static signal_t Register(const char *name)
    Registers a new message type.
    Definition: signal.cpp:56
    name_t receiver
    Definition: signal.h:37
    message_t message_type
    Definition: signal.h:43
    Type
    Definition: signal.h:17
    @ CLOSE
    Definition: signal.h:25
    @ NONE
    Definition: signal.h:18
    @ END_CLOSE
    Definition: signal.h:27
    @ EXIT_TRIGGER
    Definition: signal.h:30
    @ KILL
    Definition: signal.h:20
    @ END_OPEN
    Definition: signal.h:26
    @ ACTIVATE
    Definition: signal.h:21
    @ PROGRESS
    Definition: signal.h:31
    @ USE
    Definition: signal.h:22
    @ LAST_SIGNAL
    Definition: signal.h:32
    @ ENTER_TRIGGER
    Definition: signal.h:29
    @ SPAWN
    Definition: signal.h:19
    @ OPEN
    Definition: signal.h:24
    @ LOCKED_USE
    Definition: signal.h:23
    @ TRIGGER
    Definition: signal.h:28
    float delay
    Definition: signal.h:40
    void * data
    Definition: signal.h:38
    int limit
    Definition: signal.h:41
    Interned string type.
    Definition: uid.h:10
    ================================================ FILE: docs/cppapi/software_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/software/software.cpp File Reference
    Tramway SDK v0.1.1
    software.cpp File Reference
    #include <render/software/software.h>
    #include <render/api.h>
    #include <templates/octree.h>
    #include <cstdlib>
    #include <cstring>

    Classes

    struct  tram::Render::API::LayerParameters
     
    struct  tram::Render::API::Scanline
     
    struct  tram::Render::API::ScanlineBuffer
     
    struct  tram::Render::API::Point2D
     
    struct  tram::Render::API::StaticVertex
     
    struct  tram::Render::API::DynamicVertex
     
    struct  tram::Render::API::ColorVertex
     
    struct  tram::Render::API::ClipPoint
     
    struct  tram::Render::API::ClipTriangle
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Render
     High-level Render system API.
     
    namespace  tram::Render::API
     Rendering backend API.
     

    Functions

    void tram::Render::API::SetLightingParameters (vec3 sun_direction, vec3 sun_color, vec3 ambient_color, layer_t layer)
     
    void tram::Render::API::SetScreenSize (float width, float height)
     
    void tram::Render::API::SetScreenClear (vec3 clear_color, bool clear)
     
    uint16_t tram::Render::API::IntColor (vec3 color)
     
    vec3 tram::Render::API::RGBColor (uint16_t color)
     
    void tram::Render::API::BlitDot (uint32_t x, uint32_t y, uint16_t color)
     
    void tram::Render::API::BlitLineOctant0 (uint32_t x0, uint32_t y0, uint32_t delta_x, uint32_t delta_y, int32_t direction, uint32_t color)
     
    void tram::Render::API::BlitLineOctant1 (uint32_t x0, uint32_t y0, uint32_t delta_x, uint32_t delta_y, int32_t direction, uint32_t color)
     
    void tram::Render::API::BlitLine (int32_t x0, int32_t y0, int32_t x1, int32_t y1, uint16_t color)
     
    template<bool set_span_first>
    void tram::Render::API::MakeSpans (int32_t x0, int32_t y0, int32_t x1, int32_t y1, int32_t p0, int32_t p1, int32_t skip_first, Scanline **scanline_array)
     
    void tram::Render::API::ScanlineConvertTriangle (ScanlineBuffer *scanlines, Point2D *vertices)
     
    void tram::Render::API::RasterizeTriangle (ScanlineBuffer *scanlines, Point2D *vertices)
     
    void tram::Render::API::RasterizeTriangleLightmapped (ScanlineBuffer *scanlines, Point2D *vertices, uint16_t color, vec2 *texture_uvs, vec2 *lightmap_uvs, SWTexture *texture, SWTexture *lightmap)
     
    void tram::Render::API::RasterizeTriangleShadedTextured (ScanlineBuffer *scanlines, Point2D *vertices, vec3 *colors, vec3 *speculars, vec2 *texture_uvs, SWTexture *texture)
     
    void tram::Render::API::ClipLineInClipSpace (vec4 &point0, vec4 &point1)
     
    vec4 tram::Render::API::ClipSinglePointLine (vec4 *outside, vec4 *inside)
     
    vec4 tram::Render::API::ClipSinglePointLineLeftPlane (vec4 outside, vec4 inside)
     
    vec4 tram::Render::API::ClipSinglePointLineRightPlane (vec4 outside, vec4 inside)
     
    vec4 tram::Render::API::ClipSinglePointLineBottomPlane (vec4 outside, vec4 inside)
     
    vec4 tram::Render::API::ClipSinglePointLineTopPlane (vec4 outside, vec4 inside)
     
    vec4 tram::Render::API::ClipSinglePointLineNearPlane (vec4 outside, vec4 inside)
     
    vec4 tram::Render::API::ClipSinglePointLineFarPlane (vec4 outside, vec4 inside)
     
    ClipPoint tram::Render::API::ClipSingleClipPointLineLeftPlane (ClipPoint outside, ClipPoint inside)
     
    ClipPoint tram::Render::API::ClipSingleClipPointLineRightPlane (ClipPoint outside, ClipPoint inside)
     
    ClipPoint tram::Render::API::ClipSingleClipPointLineBottomPlane (ClipPoint outside, ClipPoint inside)
     
    ClipPoint tram::Render::API::ClipSingleClipPointLineTopPlane (ClipPoint outside, ClipPoint inside)
     
    ClipPoint tram::Render::API::ClipSingleClipPointLineNearPlane (ClipPoint outside, ClipPoint inside)
     
    ClipPoint tram::Render::API::ClipSingleClipPointLineFarPlane (ClipPoint outside, ClipPoint inside)
     
    void tram::Render::API::PerspectiveDivision (vec4 &p)
     
    void tram::Render::API::PerspectiveDivision (vec4 &p0, vec4 &p1)
     
    std::pair< int32_t, int32_t > tram::Render::API::ClipSpaceToScreenSpace (const vec4 p)
     
    bool tram::Render::API::PointVisible (vec4 p)
     
    bool tram::Render::API::PointOutsideLeftPlane (vec4 p)
     
    bool tram::Render::API::PointOutsideRightPlane (vec4 p)
     
    bool tram::Render::API::PointOutsideBottomPlane (vec4 p)
     
    bool tram::Render::API::PointOutsideTopPlane (vec4 p)
     
    bool tram::Render::API::PointOutsideNearPlane (vec4 p)
     
    bool tram::Render::API::PointOutsideFarPlane (vec4 p)
     
    bool tram::Render::API::LineVisible (vec4 p0, vec4 p1)
     
    bool tram::Render::API::TriangleVisible (vec4 p0, vec4 p1, vec4 p2)
     
    void tram::Render::API::ClipRenderLine (vec4 p0, vec4 p1, uint16_t color)
     
    size_t tram::Render::API::ClipTriangleList (ClipTriangle *triangles)
     
    void tram::Render::API::RenderFrame ()
     
    drawlistentry_t tram::Render::API::InsertDrawListEntry ()
     
    void tram::Render::API::RemoveDrawListEntry (drawlistentry_t entry)
     
    uint32_t tram::Render::API::GetFlags (drawlistentry_t entry)
     
    void tram::Render::API::SetFlags (drawlistentry_t entry, uint32_t flags)
     
    void tram::Render::API::SetLayer (drawlistentry_t entry, layer_t layer)
     
    void tram::Render::API::SetPose (drawlistentry_t entry, Pose *pose)
     
    void tram::Render::API::SetLightmap (drawlistentry_t entry, texturehandle_t lightmap)
     
    void tram::Render::API::SetDrawListColors (drawlistentry_t entry, size_t count, vec4 *color)
     
    void tram::Render::API::SetDrawListSpecularities (drawlistentry_t entry, size_t count, float *weights, float *exponents, float *transparencies)
     
    void tram::Render::API::SetLights (drawlistentry_t entry, light_t *lights)
     
    void tram::Render::API::SetMatrix (drawlistentry_t entry, const mat4 &matrix)
     
    void tram::Render::API::SetDrawListVertexArray (drawlistentry_t entry, vertexarray_t vertex_array_handle)
     
    void tram::Render::API::SetDrawListIndexArray (drawlistentry_t entry, indexarray_t index_array_handle)
     
    void tram::Render::API::SetDrawListIndexRange (drawlistentry_t entry, uint32_t index_offset, uint32_t index_length)
     
    bool tram::Render::API::SetDrawListShader (drawlistentry_t entry, vertexformat_t vertex_format, materialtype_t material_type)
     
    void tram::Render::API::SetDrawListTextures (drawlistentry_t entry, size_t texture_count, texturehandle_t *textures)
     
    light_t tram::Render::API::MakeLight ()
     
    void tram::Render::API::DeleteLight (light_t light)
     
    void tram::Render::API::SetLightParameters (light_t light, vec3 location, vec3 color, float distance, vec3 direction, float exponent)
     
    texturehandle_t tram::Render::API::CreateTexture (ColorMode color_mode, TextureFilter texture_filter, uint32_t width, uint32_t height, void *data)
     
    void tram::Render::API::ParseFormat (vertexarray_t &vertex_array, VertexDefinition vertex_format)
     
    void tram::Render::API::PackVertices (vertexarray_t &vertex_array, void *data, size_t count)
     
    void tram::Render::API::CreateIndexedVertexArray (VertexDefinition vertex_format, vertexarray_t &vertex_array, indexarray_t &index_array, size_t vertex_size, void *vertex_data, size_t index_size, void *index_data)
     
    void tram::Render::API::CreateVertexArray (VertexDefinition vertex_format, vertexarray_t &vertex_array)
     
    void tram::Render::API::UpdateVertexArray (vertexarray_t &vertex_buffer, size_t data_size, void *data)
     
    void tram::Render::API::SetViewMatrix (const mat4 &matrix, layer_t layer)
     
    void tram::Render::API::SetProjectionMatrix (const mat4 &matrix, layer_t layer)
     
    void tram::Render::API::GetScreen (char *buffer, int w, int h)
     
    void tram::Render::API::Init ()
     
    ContextType tram::Render::API::GetContext ()
     
    uint32_t tram::Render::API::GetMaxIndexRangeLength ()
     
    void tram::Render::API::SetDevice (void *)
     

    Variables

    Pool< SWTexture > tram::Render::API::texture_list ("texture list", 200, false)
     
    Pool< SWVertexArray > tram::Render::API::vertex_arrays ("vertex_arrays list", 200, false)
     
    Pool< SWIndexArray > tram::Render::API::index_arrays ("index_arrays list", 200, false)
     
    ScanlineBuffer * tram::Render::API::scanlines = new ScanlineBuffer
     
    Pool< D3DDrawListEntry > tram::Render::API::draw_list ("render list", 500, false)
     
    Pool< D3DLight > tram::Render::API::light_list ("light list", 200, false)
     
    ================================================ FILE: docs/cppapi/software_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/software/software.h File Reference
    Tramway SDK v0.1.1
    software.h File Reference
    ================================================ FILE: docs/cppapi/software_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/software/software.h Source File
    Tramway SDK v0.1.1
    software.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_RENDER_SOFTWARE_SOFTWARE_H
    4#define TRAM_SDK_RENDER_SOFTWARE_SOFTWARE_H
    5
    6#include <render/render.h>
    7#include <render/renderer.h>
    8
    9namespace tram::Render::API {
    10
    11struct SWLight {
    12 vec3 location = {0.0f, 0.0f, 0.0f};
    13 vec3 color = {0.0f, 0.0f, 0.0f};
    14 float distance = 0.0f;
    15 vec3 direction = {0.0f, 0.0f, -1.0f};
    16 float exponent = 0.0f;
    17};
    18
    22};
    23
    24struct SWTexture {
    25 int width;
    26 int height;
    29 uint8_t* pixels = nullptr;
    30};
    31
    37};
    38
    39struct FFPHelper {
    40 int position = -1;
    41 int normal = -1;
    42 int color = -1;
    43 int texture = -1;
    44 int lightmap = -1;
    45 int bone_index = -1;
    46 int bone_weight = -1;
    47};
    48
    51 void* vertices = nullptr;
    52 size_t vertex_count = 0;
    55};
    56
    58 size_t index_count = 0;
    59 uint32_t* indices = nullptr;
    60#ifndef __x86_64__
    61 void* padding;
    62#endif
    63};
    64
    66 uint32_t flags = 0;
    67
    68 Pose* pose = nullptr;
    69
    70 mat4 matrix = mat4(1.0f);
    71
    72 SWLight* lights[4] = {nullptr, nullptr, nullptr, nullptr};
    73
    74 uint32_t layer = 0;
    75 SWTexture* lightmap = nullptr;
    78 uint32_t index_length = 0;
    79 uint32_t index_offset = 0;
    80 SWTexture* texture = nullptr;
    81 vec4 color = {1.0f, 1.0f, 1.0f, 1.0f};
    82 float specular_weight = 1.0f;
    83 float specular_exponent = 1.0f;
    85};
    86
    87}
    88
    89#endif // TRAM_SDK_RENDER_SOFTWARE_SOFTWARE_H
    Rendering backend API.
    SWTextureMode
    Definition: software.h:19
    @ SW_NEAREST
    Definition: software.h:20
    @ SW_BLENDED
    Definition: software.h:21
    SWVertexType
    Definition: software.h:32
    @ SW_DYNAMIC_BLENDED
    Definition: software.h:34
    @ SW_STATIC_LIGHTMAPPED
    Definition: software.h:33
    @ SW_SPRITE
    Definition: software.h:36
    @ SW_STATIC_COLORED
    Definition: software.h:35
    glm::vec4 vec4
    Definition: math.h:15
    glm::vec3 vec3
    Definition: math.h:11
    glm::mat4 mat4
    Definition: math.h:14
    Definition: software.h:39
    int normal
    Definition: software.h:41
    int lightmap
    Definition: software.h:44
    int position
    Definition: software.h:40
    int bone_index
    Definition: software.h:45
    int color
    Definition: software.h:42
    int bone_weight
    Definition: software.h:46
    int texture
    Definition: software.h:43
    Definition: software.h:65
    float specular_weight
    Definition: software.h:82
    uint32_t index_length
    Definition: software.h:78
    SWIndexArray * index_array
    Definition: software.h:77
    SWLight * lights[4]
    Definition: software.h:72
    float specular_transparency
    Definition: software.h:84
    SWVertexArray * vertex_array
    Definition: software.h:76
    vec4 color
    Definition: software.h:81
    Pose * pose
    Definition: software.h:68
    uint32_t layer
    Definition: software.h:74
    SWTexture * texture
    Definition: software.h:80
    mat4 matrix
    Definition: software.h:70
    float specular_exponent
    Definition: software.h:83
    uint32_t index_offset
    Definition: software.h:79
    uint32_t flags
    Definition: software.h:66
    SWTexture * lightmap
    Definition: software.h:75
    Definition: software.h:57
    uint32_t * indices
    Definition: software.h:59
    void * padding
    Definition: software.h:61
    size_t index_count
    Definition: software.h:58
    Definition: software.h:11
    float exponent
    Definition: software.h:16
    vec3 location
    Definition: software.h:12
    float distance
    Definition: software.h:14
    vec3 color
    Definition: software.h:13
    vec3 direction
    Definition: software.h:15
    Definition: software.h:24
    SWTextureMode mode
    Definition: software.h:28
    int height
    Definition: software.h:26
    uint8_t * pixels
    Definition: software.h:29
    int channels
    Definition: software.h:27
    int width
    Definition: software.h:25
    Definition: software.h:49
    SWVertexType type
    Definition: software.h:50
    FFPHelper helper
    Definition: software.h:54
    void * vertices
    Definition: software.h:51
    size_t vertex_count
    Definition: software.h:52
    VertexDefinition format
    Definition: software.h:53
    Definition: animation.h:35
    Definition: renderer.h:63
    ================================================ FILE: docs/cppapi/sound_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/sound.cpp File Reference
    Tramway SDK
    sound.cpp File Reference
    #include <stb_vorbis.c>
    #include <audio/sound.h>
    #include <audio/api.h>
    #include <framework/logging.h>
    #include <framework/system.h>
    #include <templates/hashmap.h>

    Namespaces

    namespace  tram
     
    namespace  tram::Audio
     

    Functions

    Hashmap< Sound * > tram::Audio::SOUND_MAP ("Sound hash map", 500)
     
    ================================================ FILE: docs/cppapi/sound_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/sound.h File Reference
    Tramway SDK
    sound.h File Reference
    #include <audio/audio.h>
    #include <framework/resource.h>

    Go to the source code of this file.

    Classes

    class  tram::Audio::Sound
     

    Namespaces

    namespace  tram
     
    namespace  tram::Audio
     
    ================================================ FILE: docs/cppapi/sound_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/sound.h Source File
    Tramway SDK
    sound.h
    Go to the documentation of this file.
    1// TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022
    2// All rights reserved.
    3
    4#ifndef TRAM_SDK_AUDIO_SOUND_H
    5#define TRAM_SDK_AUDIO_SOUND_H
    6
    7#include <audio/audio.h>
    8
    10
    11namespace tram::Audio {
    12
    13class Sound : public Resource {
    14public:
    16 int32_t sound_buffer_count = 0;
    17 int32_t channels = 0;
    18 int32_t sample_rate = 0;
    19 int32_t sound_length = 0;
    20 int16_t* sound_data = nullptr;
    21
    22 void Load() { LoadFromDisk(); }
    23 void LoadFromDisk();
    25 void Unload();
    26 static Sound* Find (name_t name);
    27
    28protected:
    30 template <typename> friend class tram::Pool;
    31};
    32
    33}
    34
    35#endif // TRAM_SDK_AUDIO_SOUND_H
    36
    Definition: sound.h:13
    int32_t sample_rate
    Definition: sound.h:18
    void Load()
    Definition: sound.h:22
    void Unload()
    Removes the sound from memory.
    Definition: sound.cpp:41
    int32_t sound_buffer_count
    Definition: sound.h:16
    Sound(name_t name)
    Definition: sound.h:29
    void LoadFromMemory()
    Definition: sound.h:24
    int32_t channels
    Definition: sound.h:17
    int16_t * sound_data
    Definition: sound.h:20
    int32_t sound_length
    Definition: sound.h:19
    audiobuffer_t * sound_buffers
    Definition: sound.h:15
    static Sound * Find(name_t name)
    Finds a sound by a name.
    Definition: sound.cpp:49
    void LoadFromDisk()
    Loads the sound from the disk.
    Definition: sound.cpp:23
    Definition: pool.h:14
    Definition: resource.h:12
    name_t name
    Definition: resource.h:38
    Definition: api.cpp:20
    uint32_t audiobuffer_t
    Definition: audio.h:13
    Definition: uid.h:11
    ================================================ FILE: docs/cppapi/soundtable_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/soundtable.cpp File Reference
    Tramway SDK v0.1.1
    soundtable.cpp File Reference

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Ext
     
    namespace  tram::Ext::Kitchensink
     Extension containing random stuff that doesn't fit in anywhere else.
     
    ================================================ FILE: docs/cppapi/soundtable_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/soundtable.h File Reference
    Tramway SDK v0.1.1
    soundtable.h File Reference
    ================================================ FILE: docs/cppapi/soundtable_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/soundtable.h Source File
    Tramway SDK v0.1.1
    soundtable.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_EXTENSIONS_KITCHENSINK_SOUNDTABLE_H
    4#define TRAM_SDK_EXTENSIONS_KITCHENSINK_SOUNDTABLE_H
    5
    6#include <vector>
    7#include <framework/uid.h>
    8#include <framework/math.h>
    9
    10namespace tram::Ext::Kitchensink {
    11
    18
    22};
    23
    25public:
    26 void AddSound(SoundAction type, name_t sound);
    28 void PlaySound(SoundAction type);
    29 void PlaySound(SoundAction type, vec3 position, float volume);
    30
    31 static SoundTable* Find(name_t name);
    32private:
    33 std::vector<std::pair<SoundAction, name_t>> sounds;
    34};
    35
    36}
    37
    38#endif // TRAM_SDK_EXTENSIONS_KITCHENSINK_SOUNDTABLE_H
    Maps actions to sounds.
    Definition: soundtable.h:24
    void PlaySound(SoundAction type)
    Definition: soundtable.cpp:53
    void AddSound(SoundAction type, name_t sound)
    Definition: soundtable.cpp:37
    name_t GetSound(SoundAction type)
    Definition: soundtable.cpp:41
    static SoundTable * Find(name_t name)
    Definition: soundtable.cpp:63
    Extension containing random stuff that doesn't fit in anywhere else.
    Definition: ai.cpp:15
    SoundAction
    Definition: soundtable.h:12
    @ SOUND_CLOSE
    Definition: soundtable.h:14
    @ SOUND_OPEN
    Definition: soundtable.h:13
    @ SOUND_END_CLOSE
    Definition: soundtable.h:17
    @ SOUND_END_OPEN
    Definition: soundtable.h:16
    @ SOUND_WALK_ON
    Definition: soundtable.h:19
    @ SOUND_JUMP_ON
    Definition: soundtable.h:20
    @ SOUND_HIT
    Definition: soundtable.h:21
    @ SOUND_LOCKED
    Definition: soundtable.h:15
    glm::vec3 vec3
    Definition: math.h:11
    Interned string type.
    Definition: uid.h:10
    ================================================ FILE: docs/cppapi/spatial_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/spatial/spatial.cpp File Reference
    Tramway SDK v0.1.1
    spatial.cpp File Reference

    Namespaces

    namespace  tram::Audio::Spatial
     Experimental path tracing audio system.
     
    ================================================ FILE: docs/cppapi/spatial_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/spatial/spatial.h File Reference
    Tramway SDK v0.1.1
    spatial.h File Reference

    Definitions for the Spatial Audio backend. More...

    Go to the source code of this file.

    Detailed Description

    Definitions for the Spatial Audio backend.

    It hasn't been compiled in years, so it is probably broken, but I will keep the code here, just in case I want to revive it in the future.

    ================================================ FILE: docs/cppapi/spatial_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/spatial/spatial.h Source File
    Tramway SDK v0.1.1
    spatial.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    12#ifndef TRAM_SDK_AUDIO_SPATIAL_SPATIAL_H
    13#define TRAM_SDK_AUDIO_SPATIAL_SPATIAL_H
    14
    15/*#include <audio/audio.h>
    16
    17namespace tram::Audio::Spatial {
    18
    19void Init();
    20void Update();
    21void Uninit();
    22
    23void SetListenerPosition(const vec3& position);
    24void SetListenerOrientation(const quat& orientation);
    25
    26audiobuffer_t* MakeAudioBuffer(const int16_t* audio_data, int32_t length, int32_t samples, int32_t channels, int32_t& buffer_count);
    27void RemoveAudioBuffer(audiobuffer_t* buffers, int32_t buffer_count);
    28
    29audiosource_t MakeAudioSource();
    30
    31void SetAudioSourcePitch (audiosource_t source, float pitch);
    32void SetAudioSourceGain (audiosource_t source, float gain);
    33void SetAudioSourcePosition (audiosource_t source, vec3 position);
    34void SetAudioSourceVelocity (audiosource_t source, vec3 velocity);
    35void SetAudioSourceRepeating (audiosource_t source, bool repeating);
    36
    37void SetAudioSourceBuffer(audiosource_t source, const audiobuffer_t* buffers, int32_t buffer_count);
    38
    39void PlayAudioSource (audiosource_t source);
    40void PauseAudioSource (audiosource_t source);
    41void StopAudioSource (audiosource_t source);
    42
    43bool IsAudioSourcePlaying (audiosource_t source);
    44
    45void RemoveAudioSource (audiosource_t source);
    46
    47}*/
    48
    49#endif // TRAM_SDK_AUDIO_SPATIAL_SPATIAL_H
    ================================================ FILE: docs/cppapi/spinlock_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/spinlock.h File Reference
    Tramway SDK v0.1.1
    spinlock.h File Reference
    #include <atomic>

    Go to the source code of this file.

    Classes

    class  tram::Spinlock
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    ================================================ FILE: docs/cppapi/spinlock_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/spinlock.h Source File
    Tramway SDK v0.1.1
    spinlock.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_TEMPLATES_SPINLOCK_H
    4#define TRAM_SDK_TEMPLATES_SPINLOCK_H
    5
    6#include <atomic>
    7
    8/* I have no idea how useful this is.
    9 */
    10
    11namespace tram {
    12
    13class Spinlock {
    14public:
    15 void Lock() {
    16 while (lock.exchange(true));
    17 }
    18
    19 void Unlock() {
    20 lock.store(false);
    21 }
    22private:
    23 std::atomic<bool> lock = {false};
    24};
    25
    26}
    27
    28#endif // TRAM_SDK_TEMPLATES_SPINLOCK_H
    Definition: spinlock.h:13
    void Lock()
    Definition: spinlock.h:15
    void Unlock()
    Definition: spinlock.h:19
    Serialization, i.e.
    ================================================ FILE: docs/cppapi/stack_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/stack.h File Reference
    Tramway SDK v0.1.1
    stack.h File Reference
    #include <string>
    #include <iostream>

    Go to the source code of this file.

    Classes

    class  tram::Stack< T >
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    ================================================ FILE: docs/cppapi/stack_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/stack.h Source File
    Tramway SDK v0.1.1
    stack.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_TEMPLATES_STACK_H
    4#define TRAM_SDK_TEMPLATES_STACK_H
    5
    6#include <string>
    7#include <iostream>
    8
    9/* copy-pasting queue code might have not been the best idea. anyway, it would
    10 * be nice to yeet all of the old names of methods an keep only the new aliases.
    11 *
    12 * the internal stuff should also be rewritten to be actually understandable
    13 */
    14
    15namespace tram {
    16 template <typename T>
    17 class Stack{
    18 protected:
    19 // TODO: figure out what is going on in here???
    20 std::string stackName; //name of queue for log messages etc.
    21 uint64_t stackLength; //how many elements are in queue right now
    22 uint64_t stackSize; //how many elements can be added to queue
    23 T* first; //first element in queue
    24 T* last; //one past last element in queue
    27 public:
    28 Stack(std::string name, uint64_t initialSize){
    29 stackName = name;
    30 stackSize = initialSize;
    31 stackLength = 0;
    32
    33 char* newmemory = (char*)::operator new(initialSize * sizeof(T));
    34 first = (T*)newmemory;
    35 last = first;
    37 lastend = (T*)newmemory + (initialSize * sizeof(T));
    38 };
    39 T* AddNew(){
    41 std::cout << "Stack " << stackName << " out of space!" << std::endl;
    42 return nullptr;
    43 }
    44
    45 T* newobj = last;
    46 new(newobj) T;
    47 last++;
    49 return newobj;
    50 };
    51 void Remove(){
    52 if(last == firstend){
    53 std::cout << "Stack " << stackName << " already empty!" << std::endl;
    54 };
    55 last--;
    57 };
    59 if (stackLength == 0)
    60 return nullptr;
    61 else
    62 return last - 1;
    63 };
    64 uint64_t GetLength(){return stackLength;};
    65 void Reset(){
    66 stackLength = 0;
    67 last = first;
    68 }
    69
    70 T& top() { return *GetLastPtr(); }
    71 void push(const T& value) { *AddNew() = value; }
    72 T pop() { T value = top(); Remove(); return value; }
    73 void reset() { Reset(); }
    74 size_t size() {return GetLength(); }
    75 };
    76}
    77
    78#endif // TRAM_SDK_TEMPLATES_STACK_H
    Definition: stack.h:17
    T * first
    Definition: stack.h:23
    size_t size()
    Definition: stack.h:74
    T & top()
    Definition: stack.h:70
    uint64_t stackSize
    Definition: stack.h:22
    void Remove()
    Definition: stack.h:51
    void reset()
    Definition: stack.h:73
    void Reset()
    Definition: stack.h:65
    uint64_t GetLength()
    Definition: stack.h:64
    std::string stackName
    Definition: stack.h:20
    T * last
    Definition: stack.h:24
    T pop()
    Definition: stack.h:72
    T * GetLastPtr()
    Definition: stack.h:58
    T * lastend
    Definition: stack.h:26
    uint64_t stackLength
    Definition: stack.h:21
    T * firstend
    Definition: stack.h:25
    T * AddNew()
    Definition: stack.h:39
    Stack(std::string name, uint64_t initialSize)
    Definition: stack.h:28
    void push(const T &value)
    Definition: stack.h:71
    Serialization, i.e.
    ================================================ FILE: docs/cppapi/stackpool_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/stackpool.h File Reference
    Tramway SDK v0.1.1
    stackpool.h File Reference
    #include <string>
    #include <iostream>

    Go to the source code of this file.

    Classes

    class  tram::StackPool< T >
     Allocator. More...
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    ================================================ FILE: docs/cppapi/stackpool_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/stackpool.h Source File
    Tramway SDK v0.1.1
    stackpool.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_TEMPLATES_STACKPOOL_H
    4#define TRAM_SDK_TEMPLATES_STACKPOOL_H
    5
    6#include <string>
    7#include <iostream>
    8
    9namespace tram {
    10
    16template <typename T>
    17class StackPool {
    18public:
    19 constexpr StackPool(const char* name, size_t size) {
    20 this->name = name;
    21 this->available_size = size;
    22 this->allocated_size = 0;
    23
    24 first = static_cast<T*>(::operator new(size * sizeof(T)));
    25 last = first;
    26 }
    27
    28 constexpr StackPool(const char* name, size_t max_size, std::initializer_list<T> list) : StackPool(name, max_size) {
    29 for (const auto& entry : list) {
    30 *AddNew(1) = entry; // not good, but works
    31 }
    32 }
    33
    34 T* AddNew(size_t units) {
    35 if (allocated_size + units > available_size) {
    36 std::cout << "StackPool " << name << " out of space!" << std::endl;
    37 return nullptr;
    38 }
    39
    40 T* allocation = last;
    41
    42 allocated_size += units;
    43 last += units;
    44
    45 return allocation;
    46 }
    47
    48 T* allocate(size_t units) {
    49 return AddNew(units);
    50 }
    51
    52 void Reset() {
    54 last = first;
    55 }
    56
    57 void reset() {
    58 Reset();
    59 }
    60
    61 size_t size() { return allocated_size; }
    62 T* begin() { return first; }
    63 T* end() { return last; }
    64
    65protected:
    66 std::string name;
    70 T* last;
    71};
    72
    73}
    74
    75#endif // TRAM_SDK_TEMPLATES_STACKPOOL_H
    Allocator.
    Definition: stackpool.h:17
    T * last
    Definition: stackpool.h:70
    constexpr StackPool(const char *name, size_t size)
    Definition: stackpool.h:19
    T * begin()
    Definition: stackpool.h:62
    void Reset()
    Definition: stackpool.h:52
    T * AddNew(size_t units)
    Definition: stackpool.h:34
    T * allocate(size_t units)
    Definition: stackpool.h:48
    size_t available_size
    Definition: stackpool.h:68
    std::string name
    Definition: stackpool.h:66
    size_t size()
    Definition: stackpool.h:61
    size_t allocated_size
    Definition: stackpool.h:67
    T * first
    Definition: stackpool.h:69
    T * end()
    Definition: stackpool.h:63
    constexpr StackPool(const char *name, size_t max_size, std::initializer_list< T > list)
    Definition: stackpool.h:28
    void reset()
    Definition: stackpool.h:57
    Serialization, i.e.
    ================================================ FILE: docs/cppapi/staticworldobject_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/staticworldobject.cpp File Reference
    Tramway SDK v0.1.1
    staticworldobject.cpp File Reference

    Namespaces

    namespace  tram
     Serialization, i.e.
     

    Enumerations

    enum  { tram::FIELD_MODEL , tram::FIELD_LIGHTMAP }
     
    ================================================ FILE: docs/cppapi/staticworldobject_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/staticworldobject.h File Reference
    Tramway SDK v0.1.1
    staticworldobject.h File Reference

    Go to the source code of this file.

    Classes

    class  tram::StaticWorldObject
     Worldspawn. More...
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    ================================================ FILE: docs/cppapi/staticworldobject_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/staticworldobject.h Source File
    Tramway SDK v0.1.1
    staticworldobject.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef ENTITIES_STATICWORLDOBJECT_H
    4#define ENTITIES_STATICWORLDOBJECT_H
    5
    6#include <framework/entity.h>
    9
    10namespace tram {
    11
    12class RenderComponent;
    13class PhysicsComponent;
    14
    15class StaticWorldObject : public Entity {
    16public:
    18 void UpdateParameters();
    19 void SetParameters();
    20 void Load();
    21 void Unload();
    22 void Serialize();
    23 void MessageHandler(Message& msg);
    25 static void Register();
    26protected:
    29
    32};
    33
    34}
    35
    36#endif // ENTITIES_STATICWORLDOBJECT_H
    Wrapper for an EntityComponent pointer.
    Definition: entitycomponent.h:51
    Entity base class.
    Definition: entity.h:23
    Worldspawn.
    Definition: staticworldobject.h:15
    StaticWorldObject(const SharedEntityData &, const ValueArray &)
    Definition: staticworldobject.cpp:44
    name_t model
    Definition: staticworldobject.h:30
    void UpdateParameters()
    Called when Entity::UpdateTransform is called.
    Definition: staticworldobject.cpp:49
    void SetParameters()
    Called when either Entity::SetLocation or Entity::SetRotation is called.
    Definition: staticworldobject.cpp:56
    Component< RenderComponent > rendercomponent
    Definition: staticworldobject.h:27
    name_t lightmap
    Definition: staticworldobject.h:31
    name_t GetType()
    Returns the type of the entity.
    Definition: staticworldobject.cpp:40
    void Serialize()
    Definition: staticworldobject.cpp:97
    static void Register()
    Definition: staticworldobject.cpp:28
    void Load()
    Loads an entity.
    Definition: staticworldobject.cpp:65
    void MessageHandler(Message &msg)
    Allows entities to receive messages.
    Definition: staticworldobject.cpp:102
    void Unload()
    Unloads an entity.
    Definition: staticworldobject.cpp:88
    Component< PhysicsComponent > physicscomponent
    Definition: staticworldobject.h:28
    Definition: value.h:314
    Serialization, i.e.
    Message data.
    Definition: message.h:16
    Basic Entity parameters.
    Definition: entity.h:132
    Interned string type.
    Definition: uid.h:10
    ================================================ FILE: docs/cppapi/stats_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/stats.cpp File Reference
    Tramway SDK v0.1.1
    stats.cpp File Reference
    #include <framework/stats.h>
    #include <framework/core.h>
    #include <framework/logging.h>
    #include <platform/api.h>
    #include <vector>
    #include <cassert>

    Classes

    struct  tram::Stats::SystemStat
     

    Namespaces

    namespace  tram::Stats
     Resource usage statistics.
     
    namespace  tram
     Serialization, i.e.
     

    Functions

    void tram::Stats::Start (System::system_t system)
     Starts counting time spent on a system. More...
     
    void tram::Stats::Stop (System::system_t system)
     Stops counting time spent on a system. More...
     
    void tram::Stats::Add (Resource resource, size_t ammount)
     Adds an ammount of a resource. More...
     
    void tram::Stats::Remove (Resource resource, size_t ammount)
     Removes an ammount of a resource. More...
     
    void tram::Stats::Collate ()
     Collates all of the time statistics. More...
     
    size_t tram::Stats::GetStat (Resource resource)
     Returns the uncollated ammount of a resource. More...
     
    double tram::Stats::GetStat (System::system_t system)
     Returns the collated time of a system. More...
     
    double tram::Stats::GetStatUncollated (System::system_t system)
     Returns the uncollated time of a system. More...
     
    double tram::Stats::GetStatAverage (System::system_t system)
     Returns the ammount of resource, averaged over the last second. More...
     
    ================================================ FILE: docs/cppapi/stats_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/stats.h File Reference
    Tramway SDK v0.1.1
    stats.h File Reference
    #include <framework/system.h>
    #include <cstddef>

    Go to the source code of this file.

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Stats
     Resource usage statistics.
     

    Enumerations

    enum  tram::Stats::Resource : uint32_t { tram::Stats::RESOURCE_VRAM , tram::Stats::RESOURCE_DRAWCALL }
     

    Functions

    void tram::Stats::Start (System::system_t system)
     Starts counting time spent on a system. More...
     
    void tram::Stats::Stop (System::system_t system)
     Stops counting time spent on a system. More...
     
    void tram::Stats::Add (Resource resource, size_t ammount)
     Adds an ammount of a resource. More...
     
    void tram::Stats::Remove (Resource resource, size_t ammount)
     Removes an ammount of a resource. More...
     
    void tram::Stats::Collate ()
     Collates all of the time statistics. More...
     
    size_t tram::Stats::GetStat (Resource resource)
     Returns the uncollated ammount of a resource. More...
     
    double tram::Stats::GetStat (System::system_t system)
     Returns the collated time of a system. More...
     
    double tram::Stats::GetStatAverage (System::system_t system)
     Returns the ammount of resource, averaged over the last second. More...
     
    double tram::Stats::GetStatUncollated (System::system_t system)
     Returns the uncollated time of a system. More...
     
    ================================================ FILE: docs/cppapi/stats_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/stats.h Source File
    Tramway SDK v0.1.1
    stats.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_FRAMEWORK_STATS_H
    4#define TRAM_SDK_FRAMEWORK_STATS_H
    5
    6#include <framework/system.h>
    7
    8#include <cstddef>
    9
    10namespace tram::Stats {
    11
    12enum Resource : uint32_t {
    15};
    16
    17void Start(System::system_t system);
    18void Stop(System::system_t system);
    19
    20void Add(Resource resource, size_t ammount);
    21void Remove(Resource resource, size_t ammount);
    22
    23void Collate();
    24
    25size_t GetStat(Resource resource);
    26double GetStat(System::system_t system);
    27double GetStatAverage(System::system_t system);
    29
    30}
    31
    32#endif // TRAM_SDK_FRAMEWORK_STATS_H
    Definition: resource.h:11
    Resource usage statistics.
    void Collate()
    Collates all of the time statistics.
    Definition: stats.cpp:95
    void Stop(System::system_t system)
    Stops counting time spent on a system.
    Definition: stats.cpp:60
    Resource
    Definition: stats.h:12
    @ RESOURCE_DRAWCALL
    Definition: stats.h:14
    @ RESOURCE_VRAM
    Definition: stats.h:13
    void Start(System::system_t system)
    Starts counting time spent on a system.
    Definition: stats.cpp:42
    size_t GetStat(Resource resource)
    Returns the uncollated ammount of a resource.
    Definition: stats.cpp:127
    void Add(Resource resource, size_t ammount)
    Adds an ammount of a resource.
    Definition: stats.cpp:75
    void Remove(Resource resource, size_t ammount)
    Removes an ammount of a resource.
    Definition: stats.cpp:85
    double GetStatAverage(System::system_t system)
    Returns the ammount of resource, averaged over the last second.
    Definition: stats.cpp:157
    double GetStatUncollated(System::system_t system)
    Returns the uncollated time of a system.
    Definition: stats.cpp:147
    uint32_t system_t
    Definition: system.h:10
    ================================================ FILE: docs/cppapi/struct__test__case-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    _test_case Member List

    This is the complete list of members for _test_case, including all inherited members.

    abbrv_test_case
    fail()_test_caseinline
    fail_asserts_test_case
    fullname_test_case
    succ()_test_caseinline
    totl_asserts_test_case
    ================================================ FILE: docs/cppapi/struct__test__case.html ================================================ Tramway SDK: _test_case Struct Reference
    Tramway SDK v0.1.1

    #include <test.h>

    Public Member Functions

    void fail ()
     
    void succ ()
     

    Public Attributes

    const char * fullname
     
    const char * abbrv
     
    int totl_asserts = 0
     
    int fail_asserts = 0
     

    Member Function Documentation

    ◆ fail()

    void _test_case::fail ( )
    inline

    ◆ succ()

    void _test_case::succ ( )
    inline

    Member Data Documentation

    ◆ abbrv

    const char* _test_case::abbrv

    ◆ fail_asserts

    int _test_case::fail_asserts = 0

    ◆ fullname

    const char* _test_case::fullname

    ◆ totl_asserts

    int _test_case::totl_asserts = 0

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/test.h
    ================================================ FILE: docs/cppapi/structtram_1_1_a_a_b_b_tree_1_1_node-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::AABBTree::Node Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_a_a_b_b_tree_1_1_node.html ================================================ Tramway SDK: tram::AABBTree::Node Struct Reference
    Tramway SDK v0.1.1
    tram::AABBTree::Node Struct Reference

    #include <aabb.h>

    Public Member Functions

    bool IsLeaf () const
     
    void Print () const
     

    Public Attributes

    union {
       Node *   left = nullptr
     
       uint32_t   value
     
    }; 
     
    Noderight = nullptr
     
    Nodeparent = nullptr
     
    vec3 min
     
    vec3 max
     

    Member Function Documentation

    ◆ IsLeaf()

    bool tram::AABBTree::Node::IsLeaf ( ) const
    inline

    ◆ Print()

    void tram::AABBTree::Node::Print ( ) const
    inline

    Member Data Documentation

    ◆ 

    union { ... } tram::AABBTree::Node::@87

    ◆ left

    Node* tram::AABBTree::Node::left = nullptr

    ◆ max

    vec3 tram::AABBTree::Node::max

    ◆ min

    vec3 tram::AABBTree::Node::min

    ◆ parent

    Node* tram::AABBTree::Node::parent = nullptr

    ◆ right

    Node* tram::AABBTree::Node::right = nullptr

    ◆ value

    uint32_t tram::AABBTree::Node::value

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/aabb.h
    ================================================ FILE: docs/cppapi/structtram_1_1_animation_component_1_1_animation_playback_info-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::AnimationComponent::AnimationPlaybackInfo Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_animation_component_1_1_animation_playback_info.html ================================================ Tramway SDK: tram::AnimationComponent::AnimationPlaybackInfo Struct Reference
    Tramway SDK v0.1.1
    tram::AnimationComponent::AnimationPlaybackInfo Struct Reference

    #include <animation.h>

    Public Attributes

    uint32_t repeats
     
    float weight
     
    float speed
     
    float frame
     
    float fade_speed
     
    float fade_ammount
     
    bool interpolate
     
    bool fade_in
     
    bool fade_out
     
    bool pause
     
    bool pause_on_last_frame
     
    Render::Keyframekeyframes [Render::BONE_COUNT] = {nullptr}
     
    uint32_t keyframe_count [Render::BONE_COUNT] = {0}
     

    Member Data Documentation

    ◆ fade_ammount

    float tram::AnimationComponent::AnimationPlaybackInfo::fade_ammount

    ◆ fade_in

    bool tram::AnimationComponent::AnimationPlaybackInfo::fade_in

    ◆ fade_out

    bool tram::AnimationComponent::AnimationPlaybackInfo::fade_out

    ◆ fade_speed

    float tram::AnimationComponent::AnimationPlaybackInfo::fade_speed

    ◆ frame

    float tram::AnimationComponent::AnimationPlaybackInfo::frame

    ◆ interpolate

    bool tram::AnimationComponent::AnimationPlaybackInfo::interpolate

    ◆ keyframe_count

    uint32_t tram::AnimationComponent::AnimationPlaybackInfo::keyframe_count[Render::BONE_COUNT] = {0}

    ◆ keyframes

    Render::Keyframe* tram::AnimationComponent::AnimationPlaybackInfo::keyframes[Render::BONE_COUNT] = {nullptr}

    ◆ pause

    bool tram::AnimationComponent::AnimationPlaybackInfo::pause

    ◆ pause_on_last_frame

    bool tram::AnimationComponent::AnimationPlaybackInfo::pause_on_last_frame

    ◆ repeats

    uint32_t tram::AnimationComponent::AnimationPlaybackInfo::repeats

    ◆ speed

    float tram::AnimationComponent::AnimationPlaybackInfo::speed

    ◆ weight

    float tram::AnimationComponent::AnimationPlaybackInfo::weight

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/animation.h
    ================================================ FILE: docs/cppapi/structtram_1_1_async_1_1_resource_request-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Async::ResourceRequest Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_async_1_1_resource_request.html ================================================ Tramway SDK: tram::Async::ResourceRequest Struct Reference
    Tramway SDK v0.1.1
    tram::Async::ResourceRequest Struct Reference

    Public Attributes

    RequestNotification notification_type
     
    Resourceresource = nullptr
     
    union {
       struct {
          void(*   callback )(void *)
     
          void *   callback_data
     
       } 
     
       EntityComponent *   requester
     
    }; 
     
    void * padding [2]
     

    Member Data Documentation

    ◆ 

    union { ... } tram::Async::ResourceRequest::@30

    ◆ callback

    void(* tram::Async::ResourceRequest::callback) (void *)

    ◆ callback_data

    void* tram::Async::ResourceRequest::callback_data

    ◆ notification_type

    RequestNotification tram::Async::ResourceRequest::notification_type

    ◆ padding

    void* tram::Async::ResourceRequest::padding[2]

    ◆ requester

    EntityComponent* tram::Async::ResourceRequest::requester

    ◆ resource

    Resource* tram::Async::ResourceRequest::resource = nullptr

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/async.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_audio_1_1_filter_parameters-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Audio::FilterParameters Member List

    This is the complete list of members for tram::Audio::FilterParameters, including all inherited members.

    param1tram::Audio::FilterParameters
    param2tram::Audio::FilterParameters
    ================================================ FILE: docs/cppapi/structtram_1_1_audio_1_1_filter_parameters.html ================================================ Tramway SDK: tram::Audio::FilterParameters Struct Reference
    Tramway SDK v0.1.1
    tram::Audio::FilterParameters Struct Reference

    #include <graph.h>

    Public Attributes

    float param1
     
    float param2
     

    Member Data Documentation

    ◆ param1

    float tram::Audio::FilterParameters::param1

    ◆ param2

    float tram::Audio::FilterParameters::param2

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/graph.h
    ================================================ FILE: docs/cppapi/structtram_1_1_audio_1_1_sound_graph_1_1_node-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Audio::SoundGraph::Node Member List

    This is the complete list of members for tram::Audio::SoundGraph::Node, including all inherited members.

    parameterstram::Audio::SoundGraph::Node
    positiontram::Audio::SoundGraph::Node
    ================================================ FILE: docs/cppapi/structtram_1_1_audio_1_1_sound_graph_1_1_node.html ================================================ Tramway SDK: tram::Audio::SoundGraph::Node Struct Reference
    Tramway SDK v0.1.1
    tram::Audio::SoundGraph::Node Struct Reference

    #include <graph.h>

    Public Attributes

    vec3 position
     
    FilterParameters parameters
     

    Member Data Documentation

    ◆ parameters

    FilterParameters tram::Audio::SoundGraph::Node::parameters

    ◆ position

    vec3 tram::Audio::SoundGraph::Node::position

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/graph.h
    ================================================ FILE: docs/cppapi/structtram_1_1_audio_1_1_spatial_1_1_audio_buffer-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Audio::Spatial::AudioBuffer Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_audio_1_1_spatial_1_1_audio_buffer.html ================================================ Tramway SDK: tram::Audio::Spatial::AudioBuffer Struct Reference
    Tramway SDK v0.1.1
    tram::Audio::Spatial::AudioBuffer Struct Reference

    #include <definitions.h>

    Public Attributes

    AudioSampleRate sample_rate
     
    uint32_t channels
     
    size_t length
     
    float * data
     

    Member Data Documentation

    ◆ channels

    uint32_t tram::Audio::Spatial::AudioBuffer::channels

    ◆ data

    float* tram::Audio::Spatial::AudioBuffer::data

    ◆ length

    size_t tram::Audio::Spatial::AudioBuffer::length

    ◆ sample_rate

    AudioSampleRate tram::Audio::Spatial::AudioBuffer::sample_rate

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/spatial/definitions.h
    ================================================ FILE: docs/cppapi/structtram_1_1_audio_1_1_spatial_1_1_audio_render-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Audio::Spatial::AudioRender Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_audio_1_1_spatial_1_1_audio_render.html ================================================ Tramway SDK: tram::Audio::Spatial::AudioRender Struct Reference
    Tramway SDK v0.1.1
    tram::Audio::Spatial::AudioRender Struct Reference

    #include <definitions.h>

    Public Attributes

    Spinlock lock
     
    uint16_t flags
     
    uint32_t sample
     
    AudioBufferbuffer
     
    PathRenderingInfopaths
     

    Member Data Documentation

    ◆ buffer

    AudioBuffer* tram::Audio::Spatial::AudioRender::buffer

    ◆ flags

    uint16_t tram::Audio::Spatial::AudioRender::flags

    ◆ lock

    Spinlock tram::Audio::Spatial::AudioRender::lock

    ◆ paths

    PathRenderingInfo* tram::Audio::Spatial::AudioRender::paths

    ◆ sample

    uint32_t tram::Audio::Spatial::AudioRender::sample

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/spatial/definitions.h
    ================================================ FILE: docs/cppapi/structtram_1_1_audio_1_1_spatial_1_1_audio_source-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Audio::Spatial::AudioSource Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_audio_1_1_spatial_1_1_audio_source.html ================================================ Tramway SDK: tram::Audio::Spatial::AudioSource Struct Reference
    Tramway SDK v0.1.1
    tram::Audio::Spatial::AudioSource Struct Reference

    #include <definitions.h>

    Public Attributes

    vec3 position
     
    PathFromAudioSourcepaths
     
    PathTracingResultresult_paths
     
    size_t last_path
     

    Member Data Documentation

    ◆ last_path

    size_t tram::Audio::Spatial::AudioSource::last_path

    ◆ paths

    PathFromAudioSource* tram::Audio::Spatial::AudioSource::paths

    ◆ position

    vec3 tram::Audio::Spatial::AudioSource::position

    ◆ result_paths

    PathTracingResult* tram::Audio::Spatial::AudioSource::result_paths

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/spatial/definitions.h
    ================================================ FILE: docs/cppapi/structtram_1_1_audio_1_1_spatial_1_1_path_exploration_result-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Audio::Spatial::PathExplorationResult Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_audio_1_1_spatial_1_1_path_exploration_result.html ================================================ Tramway SDK: tram::Audio::Spatial::PathExplorationResult Struct Reference
    Tramway SDK v0.1.1
    tram::Audio::Spatial::PathExplorationResult Struct Reference

    #include <definitions.h>

    Public Attributes

    float force
     
    vec3 sampling_direction
     
    uint32_t cycles_since_last_hit
     

    Member Data Documentation

    ◆ cycles_since_last_hit

    uint32_t tram::Audio::Spatial::PathExplorationResult::cycles_since_last_hit

    ◆ force

    float tram::Audio::Spatial::PathExplorationResult::force

    ◆ sampling_direction

    vec3 tram::Audio::Spatial::PathExplorationResult::sampling_direction

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/spatial/definitions.h
    ================================================ FILE: docs/cppapi/structtram_1_1_audio_1_1_spatial_1_1_path_from_audio_source-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Audio::Spatial::PathFromAudioSource Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_audio_1_1_spatial_1_1_path_from_audio_source.html ================================================ Tramway SDK: tram::Audio::Spatial::PathFromAudioSource Struct Reference
    Tramway SDK v0.1.1
    tram::Audio::Spatial::PathFromAudioSource Struct Reference

    #include <definitions.h>

    Public Attributes

    struct {
       vec3   point
     
       vec3   direction
     
       float   force
     
    reflections [LISTENER_DEPTH_LIMIT]
     
    vec3 source_direction
     

    Member Data Documentation

    ◆ direction

    vec3 tram::Audio::Spatial::PathFromAudioSource::direction

    ◆ force

    float tram::Audio::Spatial::PathFromAudioSource::force

    ◆ point

    vec3 tram::Audio::Spatial::PathFromAudioSource::point

    ◆ 

    struct { ... } tram::Audio::Spatial::PathFromAudioSource::reflections[LISTENER_DEPTH_LIMIT]

    ◆ source_direction

    vec3 tram::Audio::Spatial::PathFromAudioSource::source_direction

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/spatial/definitions.h
    ================================================ FILE: docs/cppapi/structtram_1_1_audio_1_1_spatial_1_1_path_rendering_info-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Audio::Spatial::PathRenderingInfo Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_audio_1_1_spatial_1_1_path_rendering_info.html ================================================ Tramway SDK: tram::Audio::Spatial::PathRenderingInfo Struct Reference
    Tramway SDK v0.1.1
    tram::Audio::Spatial::PathRenderingInfo Struct Reference

    #include <definitions.h>

    Public Attributes

    float force
     
    float panning
     
    int32_t panning_delay
     
    int32_t distance_delay
     

    Member Data Documentation

    ◆ distance_delay

    int32_t tram::Audio::Spatial::PathRenderingInfo::distance_delay

    ◆ force

    float tram::Audio::Spatial::PathRenderingInfo::force

    ◆ panning

    float tram::Audio::Spatial::PathRenderingInfo::panning

    ◆ panning_delay

    int32_t tram::Audio::Spatial::PathRenderingInfo::panning_delay

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/spatial/definitions.h
    ================================================ FILE: docs/cppapi/structtram_1_1_audio_1_1_spatial_1_1_path_segment-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Audio::Spatial::PathSegment Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_audio_1_1_spatial_1_1_path_segment.html ================================================ Tramway SDK: tram::Audio::Spatial::PathSegment Struct Reference
    Tramway SDK
    tram::Audio::Spatial::PathSegment Struct Reference

    Public Attributes

    vec3 segment_start
     
    vec3 segment_end
     

    Member Data Documentation

    ◆ segment_end

    vec3 tram::Audio::Spatial::PathSegment::segment_end

    ◆ segment_start

    vec3 tram::Audio::Spatial::PathSegment::segment_start

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/spatial/pathtracer.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_audio_1_1_spatial_1_1_path_tracing_result-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Audio::Spatial::PathTracingResult Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_audio_1_1_spatial_1_1_path_tracing_result.html ================================================ Tramway SDK: tram::Audio::Spatial::PathTracingResult Struct Reference
    Tramway SDK v0.1.1
    tram::Audio::Spatial::PathTracingResult Struct Reference

    #include <definitions.h>

    Public Attributes

    float force
     
    float distance
     
    uint32_t cycles_since_last_hit
     
    uint32_t reflection_count
     
    vec3 arrival_direction
     
    float reflection_absorption
     
    vec3 listener_ideal_angle
     
    vec3 source_ideal_angle
     
    struct {
       vec3   point
     
    reflections [SOURCE_DEPTH_LIMIT *LISTENER_DEPTH_LIMIT]
     

    Member Data Documentation

    ◆ arrival_direction

    vec3 tram::Audio::Spatial::PathTracingResult::arrival_direction

    ◆ cycles_since_last_hit

    uint32_t tram::Audio::Spatial::PathTracingResult::cycles_since_last_hit

    ◆ distance

    float tram::Audio::Spatial::PathTracingResult::distance

    ◆ force

    float tram::Audio::Spatial::PathTracingResult::force

    ◆ listener_ideal_angle

    vec3 tram::Audio::Spatial::PathTracingResult::listener_ideal_angle

    ◆ point

    vec3 tram::Audio::Spatial::PathTracingResult::point

    ◆ reflection_absorption

    float tram::Audio::Spatial::PathTracingResult::reflection_absorption

    ◆ reflection_count

    uint32_t tram::Audio::Spatial::PathTracingResult::reflection_count

    ◆ 

    struct { ... } tram::Audio::Spatial::PathTracingResult::reflections[SOURCE_DEPTH_LIMIT * LISTENER_DEPTH_LIMIT]

    ◆ source_ideal_angle

    vec3 tram::Audio::Spatial::PathTracingResult::source_ideal_angle

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/spatial/definitions.h
    ================================================ FILE: docs/cppapi/structtram_1_1_audio_1_1audiobuffer__t-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Audio::audiobuffer_t Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_audio_1_1audiobuffer__t.html ================================================ Tramway SDK: tram::Audio::audiobuffer_t Struct Reference
    Tramway SDK v0.1.1
    tram::Audio::audiobuffer_t Struct Reference

    Audio buffer handle. More...

    #include <audio.h>

    Public Attributes

    union {
       struct {
          uint32_t *   al_buffers
     
          int32_t   al_buffer_count
     
       } 
     
       void *   generic
     
    }; 
     

    Detailed Description

    Audio buffer handle.

    Member Data Documentation

    ◆ 

    union { ... } tram::Audio::audiobuffer_t::@3

    ◆ al_buffer_count

    int32_t tram::Audio::audiobuffer_t::al_buffer_count

    ◆ al_buffers

    uint32_t* tram::Audio::audiobuffer_t::al_buffers

    ◆ generic

    void* tram::Audio::audiobuffer_t::generic

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/audio.h
    ================================================ FILE: docs/cppapi/structtram_1_1_audio_1_1audiosource__t-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Audio::audiosource_t Member List

    This is the complete list of members for tram::Audio::audiosource_t, including all inherited members.

    al_sourcetram::Audio::audiosource_t
    generictram::Audio::audiosource_t
    ================================================ FILE: docs/cppapi/structtram_1_1_audio_1_1audiosource__t.html ================================================ Tramway SDK: tram::Audio::audiosource_t Struct Reference
    Tramway SDK v0.1.1
    tram::Audio::audiosource_t Struct Reference

    Audio source handle. More...

    #include <audio.h>

    Public Attributes

    union {
       uint32_t   al_source
     
       void *   generic
     
    }; 
     

    Detailed Description

    Audio source handle.

    Member Data Documentation

    ◆ 

    union { ... } tram::Audio::audiosource_t::@1

    ◆ al_source

    uint32_t tram::Audio::audiosource_t::al_source

    ◆ generic

    void* tram::Audio::audiosource_t::generic

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/audio.h
    ================================================ FILE: docs/cppapi/structtram_1_1_edge-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Edge Member List

    This is the complete list of members for tram::Edge, including all inherited members.

    fromtram::Edge
    totram::Edge
    ================================================ FILE: docs/cppapi/structtram_1_1_edge.html ================================================ Tramway SDK: tram::Edge Struct Reference
    Tramway SDK v0.1.1
    tram::Edge Struct Reference

    #include <graph.h>

    Public Attributes

    uint32_t from
     
    uint32_t to
     

    Member Data Documentation

    ◆ from

    uint32_t tram::Edge::from

    ◆ to

    uint32_t tram::Edge::to

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/graph.h
    ================================================ FILE: docs/cppapi/structtram_1_1_entity_1_1_field_info-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Entity::FieldInfo Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_entity_1_1_field_info.html ================================================ Tramway SDK: tram::Entity::FieldInfo Struct Reference
    Tramway SDK v0.1.1
    tram::Entity::FieldInfo Struct Reference

    #include <entity.h>

    Public Attributes

    uint32_t field_id
     
    Type field_type
     
    uint32_t field_flags
     

    Member Data Documentation

    ◆ field_flags

    uint32_t tram::Entity::FieldInfo::field_flags

    ◆ field_id

    uint32_t tram::Entity::FieldInfo::field_id

    ◆ field_type

    Type tram::Entity::FieldInfo::field_type

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/entity.h
    ================================================ FILE: docs/cppapi/structtram_1_1_entity_type_info-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::EntityTypeInfo Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_entity_type_info.html ================================================ Tramway SDK: tram::EntityTypeInfo Struct Reference
    Tramway SDK v0.1.1
    tram::EntityTypeInfo Struct Reference

    Public Attributes

    Entity *(* constructor )(const SharedEntityData &, const ValueArray &) = nullptr
     
    void(* destructor )(Entity *) = nullptr
     
    const Entity::FieldInfofields = nullptr
     
    size_t fieldcount = 0
     

    Member Data Documentation

    ◆ constructor

    Entity *(* tram::EntityTypeInfo::constructor) (const SharedEntityData &, const ValueArray &) = nullptr

    ◆ destructor

    void(* tram::EntityTypeInfo::destructor) (Entity *) = nullptr

    ◆ fieldcount

    size_t tram::EntityTypeInfo::fieldcount = 0

    ◆ fields

    const Entity::FieldInfo* tram::EntityTypeInfo::fields = nullptr

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/entity.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_event-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Event Member List

    This is the complete list of members for tram::Event, including all inherited members.

    AddListener(event_t type, EntityComponent *component)tram::Eventstatic
    AddListener(event_t type, Entity *entity)tram::Eventstatic
    AddListener(event_t type, void *data, void(*handler)(Event &event, void *data))tram::Eventstatic
    AddListener(event_t type, void(*handler)(Event &event))tram::Eventstatic
    AllocateData(size_t ammount)tram::Eventstatic
    AllocateData()tram::Eventinlinestatic
    AllocateData(const T &data)tram::Eventinlinestatic
    CURSORPOS enum valuetram::Event
    datatram::Event
    data_inttram::Event
    data_valuetram::Event
    Dispatch()tram::Eventstatic
    FRAME enum valuetram::Event
    GetLast()tram::Eventstatic
    GetName(event_t type)tram::Eventstatic
    GetType(name_t name)tram::Eventstatic
    KEYCHAR enum valuetram::Event
    KEYDOWN enum valuetram::Event
    KEYPRESS enum valuetram::Event
    KEYUP enum valuetram::Event
    LAST_EVENT enum valuetram::Event
    LOOK_AT enum valuetram::Event
    NONE enum valuetram::Event
    Post(const Event &event)tram::Eventstatic
    postertram::Event
    Register(const char *name)tram::Eventstatic
    RemoveListener(listener_t listener_id)tram::Eventstatic
    SELECTED enum valuetram::Event
    subtypetram::Event
    TICK enum valuetram::Event
    Type enum nametram::Event
    typetram::Event
    ================================================ FILE: docs/cppapi/structtram_1_1_event.html ================================================ Tramway SDK: tram::Event Struct Reference
    Tramway SDK v0.1.1

    Event data. More...

    #include <framework/event.h>

    Public Types

    enum  Type : event_t {
      NONE , KEYPRESS , KEYDOWN , KEYUP ,
      KEYCHAR , CURSORPOS , FRAME , TICK ,
      SELECTED , LOOK_AT , LAST_EVENT
    }
     

    Static Public Member Functions

    static event_t Register (const char *name)
     Registers a new event type. More...
     
    static event_t GetType (name_t name)
     Returns the event_t associated with a given name. More...
     
    static name_t GetName (event_t type)
     Returns the name that was associated with a given event_t. More...
     
    static event_t GetLast ()
     Returns the last event_t plus one. More...
     
    static void Post (const Event &event)
     Adds an event to the event queue. More...
     
    static void Dispatch ()
     Dispatches events from the event queue. More...
     
    static listener_t AddListener (event_t type, EntityComponent *component)
     Registers a listener. More...
     
    static listener_t AddListener (event_t type, Entity *entity)
     Registers a listener. More...
     
    static listener_t AddListener (event_t type, void *data, void(*handler)(Event &event, void *data))
     Registers a listener. More...
     
    static listener_t AddListener (event_t type, void(*handler)(Event &event))
     Registers a listener. More...
     
    static void RemoveListener (listener_t listener_id)
     Deregisters a listener. More...
     
    static void * AllocateData (size_t ammount)
     Allocates space for event data. More...
     
    template<typename T >
    static T * AllocateData ()
     
    template<typename T >
    static T * AllocateData (const T &data)
     

    Public Attributes

    event_t type
     Type of the event. More...
     
    event_t subtype
     Arbitrary event subtype. More...
     
    id_t poster
     
    union {
       void *   data = nullptr
     
       int32_t   data_int
     
       value_t *   data_value
     
    }; 
     

    Detailed Description

    Event data.

    Fill in the struct fields and then use Event::Post() to send it out to listeners.

    Member Enumeration Documentation

    ◆ Type

    Enumerator
    NONE 
    KEYPRESS 
    KEYDOWN 
    KEYUP 
    KEYCHAR 
    CURSORPOS 
    FRAME 
    TICK 
    SELECTED 
    LOOK_AT 
    LAST_EVENT 

    Member Function Documentation

    ◆ AddListener() [1/4]

    listener_t tram::Event::AddListener ( event_t  type,
    Entity entity 
    )
    static

    Registers a listener.

    ◆ AddListener() [2/4]

    listener_t tram::Event::AddListener ( event_t  type,
    EntityComponent component 
    )
    static

    Registers a listener.

    ◆ AddListener() [3/4]

    listener_t tram::Event::AddListener ( event_t  type,
    void *  data,
    void(*)(Event &event, void *data handler 
    )
    static

    Registers a listener.

    ◆ AddListener() [4/4]

    listener_t tram::Event::AddListener ( event_t  type,
    void(*)(Event &event)  handler 
    )
    static

    Registers a listener.

    ◆ AllocateData() [1/3]

    template<typename T >
    static T * tram::Event::AllocateData ( )
    inlinestatic

    ◆ AllocateData() [2/3]

    template<typename T >
    static T * tram::Event::AllocateData ( const T &  data)
    inlinestatic

    ◆ AllocateData() [3/3]

    void * tram::Event::AllocateData ( size_t  ammount)
    static

    Allocates space for event data.

    This allocation is useful for storing the additional data (Event::data pointer), for events, since all allocated space will be cleared once all events have been dispatched.

    Note
    Only store POD data types in the allocated memory. Either that, or prepare for memory leaks. Altough an IDE might complain that a value_t is not POD, you can ignore the warning. Overwriting a value_t shouldn't cause memory leaks.

    ◆ Dispatch()

    void tram::Event::Dispatch ( )
    static

    Dispatches events from the event queue.

    ◆ GetLast()

    event_t tram::Event::GetLast ( )
    static

    Returns the last event_t plus one.

    Useful for iterating over all registered events, i.e. in a while (++event < Event::GetLast()); or a similar loop.

    ◆ GetName()

    name_t tram::Event::GetName ( event_t  type)
    static

    Returns the name that was associated with a given event_t.

    ◆ GetType()

    event_t tram::Event::GetType ( name_t  name)
    static

    Returns the event_t associated with a given name.

    ◆ Post()

    void tram::Event::Post ( const Event event)
    static

    Adds an event to the event queue.

    ◆ Register()

    event_t tram::Event::Register ( const char *  name)
    static

    Registers a new event type.

    ◆ RemoveListener()

    void tram::Event::RemoveListener ( listener_t  listener_id)
    static

    Deregisters a listener.

    Member Data Documentation

    ◆ 

    union { ... } tram::Event::@38

    ◆ data

    tram::Event::data = nullptr

    Pointer to arbitrary data.

    Can be set to a nullptr. Some event types have specific data, e.g. structs or other types that they need their data pointers to be pointing to. For your own event types, you can use this pointer for whatever purpose you want. If uncertain, set this to a nullptr.

    ◆ data_int

    tram::Event::data_int

    Arbitrary data integer.

    ◆ data_value

    tram::Event::data_value

    ◆ poster

    id_t tram::Event::poster

    ◆ subtype

    tram::Event::subtype

    Arbitrary event subtype.

    Some event types have subtypes with specific semantics, but if you create your own event types, you can use the subtype field for anything.

    ◆ type

    tram::Event::type

    Type of the event.


    The documentation for this struct was generated from the following files:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/event.h
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/event.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_design_1_1_attribute_bag-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Ext::Design::AttributeBag Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_design_1_1_attribute_bag.html ================================================ Tramway SDK: tram::Ext::Design::AttributeBag Struct Reference
    Tramway SDK
    tram::Ext::Design::AttributeBag Struct Reference

    #include <attributes.h>

    Public Member Functions

    float GetAttribute (attribute type)
     
    const AttributeInstanceGetBaseAttribute (attribute type)
     
    void SetBaseAttribute (attribute type, const AttributeInstance &new_attrib)
     
    bool HasAttribute (attribute type)
     
    void RemoveBoosts ()
     
    void ExpireBoosts ()
     
    void ApplyBoost (const AttributeBoost &boost)
     
    void RemoveBoost (const AttributeBoost &boost)
     
    void Tick ()
     

    Public Attributes

    std::vector< AttributeInstanceattributes
     
    std::vector< AttributeBoostboosts
     

    Member Function Documentation

    ◆ ApplyBoost()

    void tram::Ext::Design::AttributeBag::ApplyBoost ( const AttributeBoost boost)

    ◆ ExpireBoosts()

    void tram::Ext::Design::AttributeBag::ExpireBoosts ( )

    ◆ GetAttribute()

    float tram::Ext::Design::AttributeBag::GetAttribute ( attribute  type)

    ◆ GetBaseAttribute()

    const AttributeInstance & tram::Ext::Design::AttributeBag::GetBaseAttribute ( attribute  type)

    ◆ HasAttribute()

    bool tram::Ext::Design::AttributeBag::HasAttribute ( attribute  type)

    ◆ RemoveBoost()

    void tram::Ext::Design::AttributeBag::RemoveBoost ( const AttributeBoost boost)

    ◆ RemoveBoosts()

    void tram::Ext::Design::AttributeBag::RemoveBoosts ( )

    ◆ SetBaseAttribute()

    void tram::Ext::Design::AttributeBag::SetBaseAttribute ( attribute  type,
    const AttributeInstance new_attrib 
    )

    ◆ Tick()

    void tram::Ext::Design::AttributeBag::Tick ( )

    Member Data Documentation

    ◆ attributes

    std::vector<AttributeInstance> tram::Ext::Design::AttributeBag::attributes

    ◆ boosts

    std::vector<AttributeBoost> tram::Ext::Design::AttributeBag::boosts

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/attributes.h
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_design_1_1_attribute_boost-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Ext::Design::AttributeBoost Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_design_1_1_attribute_boost.html ================================================ Tramway SDK: tram::Ext::Design::AttributeBoost Struct Reference
    Tramway SDK
    tram::Ext::Design::AttributeBoost Struct Reference

    #include <attributes.h>

    Public Attributes

    attribute type
     
    int expires
     
    float boost
     
    bool boost_multiply
     
    bool boost_once
     

    Member Data Documentation

    ◆ boost

    float tram::Ext::Design::AttributeBoost::boost

    ◆ boost_multiply

    bool tram::Ext::Design::AttributeBoost::boost_multiply

    ◆ boost_once

    bool tram::Ext::Design::AttributeBoost::boost_once

    ◆ expires

    int tram::Ext::Design::AttributeBoost::expires

    ◆ type

    attribute tram::Ext::Design::AttributeBoost::type

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/attributes.h
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_design_1_1_attribute_definition-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Ext::Design::AttributeDefinition Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_design_1_1_attribute_definition.html ================================================ Tramway SDK: tram::Ext::Design::AttributeDefinition Struct Reference
    Tramway SDK
    tram::Ext::Design::AttributeDefinition Struct Reference

    #include <attributes.h>

    Static Public Member Functions

    static attribute Register (const AttributeDefinition &def)
     
    static void Replace (attribute attrib, const AttributeDefinition &def)
     

    Public Attributes

    name_t name
     
    float min_value
     
    float max_value
     
    bool integer
     
    bool linear_boost
     
    bool stack_boost
     

    Member Function Documentation

    ◆ Register()

    static attribute tram::Ext::Design::AttributeDefinition::Register ( const AttributeDefinition def)
    static

    ◆ Replace()

    static void tram::Ext::Design::AttributeDefinition::Replace ( attribute  attrib,
    const AttributeDefinition def 
    )
    static

    Member Data Documentation

    ◆ integer

    bool tram::Ext::Design::AttributeDefinition::integer

    ◆ linear_boost

    bool tram::Ext::Design::AttributeDefinition::linear_boost

    ◆ max_value

    float tram::Ext::Design::AttributeDefinition::max_value

    ◆ min_value

    float tram::Ext::Design::AttributeDefinition::min_value

    ◆ name

    name_t tram::Ext::Design::AttributeDefinition::name

    ◆ stack_boost

    bool tram::Ext::Design::AttributeDefinition::stack_boost

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/attributes.h
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_design_1_1_attribute_instance-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Ext::Design::AttributeInstance Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_design_1_1_attribute_instance.html ================================================ Tramway SDK: tram::Ext::Design::AttributeInstance Struct Reference
    Tramway SDK
    tram::Ext::Design::AttributeInstance Struct Reference

    #include <attributes.h>

    Public Attributes

    attribute type
     
    float value
     
    float max_value
     

    Member Data Documentation

    ◆ max_value

    float tram::Ext::Design::AttributeInstance::max_value

    ◆ type

    attribute tram::Ext::Design::AttributeInstance::type

    ◆ value

    float tram::Ext::Design::AttributeInstance::value

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/attributes.h
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_design_1_1_character_class-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Ext::Design::CharacterClass Member List

    This is the complete list of members for tram::Ext::Design::CharacterClass, including all inherited members.

    Register(name_t name, const CharacterClass &def)tram::Ext::Design::CharacterClass
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_design_1_1_character_class.html ================================================ Tramway SDK: tram::Ext::Design::CharacterClass Struct Reference
    Tramway SDK
    tram::Ext::Design::CharacterClass Struct Reference

    #include <character.h>

    Public Member Functions

    void Register (name_t name, const CharacterClass &def)
     

    Member Function Documentation

    ◆ Register()

    void tram::Ext::Design::CharacterClass::Register ( name_t  name,
    const CharacterClass def 
    )

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/character.h
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_design_1_1_dialog_action-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Ext::Design::DialogAction Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_design_1_1_dialog_action.html ================================================ Tramway SDK: tram::Ext::Design::DialogAction Struct Reference
    Tramway SDK
    tram::Ext::Design::DialogAction Struct Reference

    #include <dialog.h>

    Public Types

    enum  Type { QUEST_SET_STAGE , QUEST_ADVANCE_STAGE , PLAYER_GIVE_ITEM , PLAYER_TAKE_ITEM }
     

    Public Attributes

    Type type
     
    name_t quest
     
    name_t stage
     
    name_t item_class
     
    int item_count
     
    name_t message
     
    Value value
     

    Member Enumeration Documentation

    ◆ Type

    Enumerator
    QUEST_SET_STAGE 
    QUEST_ADVANCE_STAGE 
    PLAYER_GIVE_ITEM 
    PLAYER_TAKE_ITEM 

    Member Data Documentation

    ◆ item_class

    name_t tram::Ext::Design::DialogAction::item_class

    ◆ item_count

    int tram::Ext::Design::DialogAction::item_count

    ◆ message

    name_t tram::Ext::Design::DialogAction::message

    ◆ quest

    name_t tram::Ext::Design::DialogAction::quest

    ◆ stage

    name_t tram::Ext::Design::DialogAction::stage

    ◆ type

    Type tram::Ext::Design::DialogAction::type

    ◆ value

    Value tram::Ext::Design::DialogAction::value

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/dialog.h
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_design_1_1_dialog_condition-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Ext::Design::DialogCondition Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_design_1_1_dialog_condition.html ================================================ Tramway SDK: tram::Ext::Design::DialogCondition Struct Reference
    Tramway SDK
    tram::Ext::Design::DialogCondition Struct Reference

    #include <dialog.h>

    Public Types

    enum  Type { QUEST_STAGE_MORETHAN , QUEST_STAGE_LESSTHAN , PLAYER_HAS_ITEM , ENTITY_QUERY }
     

    Public Attributes

    Type type
     
    name_t quest
     
    name_t stage
     
    name_t query
     
    Value value
     

    Member Enumeration Documentation

    ◆ Type

    Enumerator
    QUEST_STAGE_MORETHAN 
    QUEST_STAGE_LESSTHAN 
    PLAYER_HAS_ITEM 
    ENTITY_QUERY 

    Member Data Documentation

    ◆ query

    name_t tram::Ext::Design::DialogCondition::query

    ◆ quest

    name_t tram::Ext::Design::DialogCondition::quest

    ◆ stage

    name_t tram::Ext::Design::DialogCondition::stage

    ◆ type

    Type tram::Ext::Design::DialogCondition::type

    ◆ value

    Value tram::Ext::Design::DialogCondition::value

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/dialog.h
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_design_1_1_dialog_topic-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Ext::Design::DialogTopic Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_design_1_1_dialog_topic.html ================================================ Tramway SDK: tram::Ext::Design::DialogTopic Struct Reference
    Tramway SDK
    tram::Ext::Design::DialogTopic Struct Reference

    #include <dialog.h>

    Public Member Functions

    void Register (const DialogTopic &topic)
     
    const DialogTopicFind (name_t topic)
     

    Public Attributes

    name_t name
     
    name_t prompt
     
    name_t answer
     
    std::vector< DialogConditionconditions
     
    std::vector< DialogActionactions
     
    std::vector< name_tnext_topics
     

    Member Function Documentation

    ◆ Find()

    const DialogTopic & tram::Ext::Design::DialogTopic::Find ( name_t  topic)

    ◆ Register()

    void tram::Ext::Design::DialogTopic::Register ( const DialogTopic topic)

    Member Data Documentation

    ◆ actions

    std::vector<DialogAction> tram::Ext::Design::DialogTopic::actions

    ◆ answer

    name_t tram::Ext::Design::DialogTopic::answer

    ◆ conditions

    std::vector<DialogCondition> tram::Ext::Design::DialogTopic::conditions

    ◆ name

    name_t tram::Ext::Design::DialogTopic::name

    ◆ next_topics

    std::vector<name_t> tram::Ext::Design::DialogTopic::next_topics

    ◆ prompt

    name_t tram::Ext::Design::DialogTopic::prompt

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/dialog.h
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_design_1_1_entity_children-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Ext::Design::EntityChildren Member List

    This is the complete list of members for tram::Ext::Design::EntityChildren, including all inherited members.

    childrentram::Ext::Design::EntityChildren
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_design_1_1_entity_children.html ================================================ Tramway SDK: tram::Ext::Design::EntityChildren Struct Reference
    Tramway SDK
    tram::Ext::Design::EntityChildren Struct Reference

    Public Attributes

    std::vector< id_tchildren
     

    Member Data Documentation

    ◆ children

    std::vector<id_t> tram::Ext::Design::EntityChildren::children

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_design_1_1_inventory-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Ext::Design::Inventory Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_design_1_1_inventory.html ================================================ Tramway SDK: tram::Ext::Design::Inventory Struct Reference
    Tramway SDK
    tram::Ext::Design::Inventory Struct Reference

    #include <inventory.h>

    Public Member Functions

    void AddItem (const ItemInstance &item)
     
    void AddItem (item_class item, int count)
     
    void RemoveItem (item_class item, int count)
     

    Public Attributes

    std::vector< ItemInstanceitems
     
    int holding = -1
     
    int width = 1
     
    int height = 1
     
    bool allow_overlap = true
     

    Member Function Documentation

    ◆ AddItem() [1/2]

    void tram::Ext::Design::Inventory::AddItem ( const ItemInstance item)

    ◆ AddItem() [2/2]

    void tram::Ext::Design::Inventory::AddItem ( item_class  item,
    int  count 
    )

    ◆ RemoveItem()

    void tram::Ext::Design::Inventory::RemoveItem ( item_class  item,
    int  count 
    )

    Member Data Documentation

    ◆ allow_overlap

    bool tram::Ext::Design::Inventory::allow_overlap = true

    ◆ height

    int tram::Ext::Design::Inventory::height = 1

    ◆ holding

    int tram::Ext::Design::Inventory::holding = -1

    ◆ items

    std::vector<ItemInstance> tram::Ext::Design::Inventory::items

    ◆ width

    int tram::Ext::Design::Inventory::width = 1

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/inventory.h
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_design_1_1_item_class-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Ext::Design::ItemClass Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_design_1_1_item_class.html ================================================ Tramway SDK: tram::Ext::Design::ItemClass Struct Reference
    Tramway SDK
    tram::Ext::Design::ItemClass Struct Reference

    #include <inventory.h>

    Public Member Functions

    item_class Register (name_t name, const ItemClass &def)
     

    Public Attributes

    name_t name
     
    name_t viewmodel
     
    name_t viewmodel_animation
     
    name_t primary_action_animation
     
    name_t secondary_action_animation
     
    name_t primary_action
     
    name_t secondary_action
     
    bool draw_hands = false
     
    int sprite = -1
     
    int width = 1
     
    int height = 1
     
    int stack = 1
     
    std::vector< AttributeBoostbase_boosts
     

    Member Function Documentation

    ◆ Register()

    item_class tram::Ext::Design::ItemClass::Register ( name_t  name,
    const ItemClass def 
    )

    Member Data Documentation

    ◆ base_boosts

    std::vector<AttributeBoost> tram::Ext::Design::ItemClass::base_boosts

    ◆ draw_hands

    bool tram::Ext::Design::ItemClass::draw_hands = false

    ◆ height

    int tram::Ext::Design::ItemClass::height = 1

    ◆ name

    name_t tram::Ext::Design::ItemClass::name

    ◆ primary_action

    name_t tram::Ext::Design::ItemClass::primary_action

    ◆ primary_action_animation

    name_t tram::Ext::Design::ItemClass::primary_action_animation

    ◆ secondary_action

    name_t tram::Ext::Design::ItemClass::secondary_action

    ◆ secondary_action_animation

    name_t tram::Ext::Design::ItemClass::secondary_action_animation

    ◆ sprite

    int tram::Ext::Design::ItemClass::sprite = -1

    ◆ stack

    int tram::Ext::Design::ItemClass::stack = 1

    ◆ viewmodel

    name_t tram::Ext::Design::ItemClass::viewmodel

    ◆ viewmodel_animation

    name_t tram::Ext::Design::ItemClass::viewmodel_animation

    ◆ width

    int tram::Ext::Design::ItemClass::width = 1

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/inventory.h
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_design_1_1_item_instance-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Ext::Design::ItemInstance Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_design_1_1_item_instance.html ================================================ Tramway SDK: tram::Ext::Design::ItemInstance Struct Reference
    Tramway SDK
    tram::Ext::Design::ItemInstance Struct Reference

    #include <inventory.h>

    Public Attributes

    int x = 0
     
    int y = 0
     
    int count = 1
     
    item_class item_class
     

    Member Data Documentation

    ◆ count

    int tram::Ext::Design::ItemInstance::count = 1

    ◆ item_class

    item_class tram::Ext::Design::ItemInstance::item_class

    ◆ x

    int tram::Ext::Design::ItemInstance::x = 0

    ◆ y

    int tram::Ext::Design::ItemInstance::y = 0

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/inventory.h
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_design_1_1_item_property-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Ext::Design::ItemProperty Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_design_1_1_item_property.html ================================================ Tramway SDK: tram::Ext::Design::ItemProperty Struct Reference
    Tramway SDK
    tram::Ext::Design::ItemProperty Struct Reference

    #include <inventory.h>

    Public Types

    enum  Type { ATTRIBUTE_BOOST , FLAG }
     

    Public Attributes

    Type type
     
    union {
       AttributeBoost   attribute_boost
     
       name_t   flag
     
    }; 
     

    Member Enumeration Documentation

    ◆ Type

    Enumerator
    ATTRIBUTE_BOOST 
    FLAG 

    Member Data Documentation

    ◆ 

    union { ... } tram::Ext::Design::ItemProperty::@21

    ◆ attribute_boost

    AttributeBoost tram::Ext::Design::ItemProperty::attribute_boost

    ◆ flag

    name_t tram::Ext::Design::ItemProperty::flag

    ◆ type

    Type tram::Ext::Design::ItemProperty::type

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/inventory.h
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_a_i_variable-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::AIVariable Member List

    This is the complete list of members for tram::Ext::Kitchensink::AIVariable, including all inherited members.

    valuetram::Ext::Kitchensink::AIVariable
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_a_i_variable.html ================================================ Tramway SDK: tram::Ext::Kitchensink::AIVariable Struct Reference
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::AIVariable Struct Reference

    #include <ai.h>

    Public Attributes

    Value value
     

    Member Data Documentation

    ◆ value

    Value tram::Ext::Kitchensink::AIVariable::value

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/ai.h
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_anim_state-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::AnimState Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_anim_state.html ================================================ Tramway SDK: tram::Ext::Kitchensink::AnimState Struct Reference
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::AnimState Struct Reference

    #include <animationtable.h>

    Public Attributes

    name_t name
     
    name_t animation
     
    uint32_t repeats
     
    float weight
     
    float speed
     
    bool interpolate
     
    bool pause_last
     
    name_t state_space
     
    name_t next_state
     

    Member Data Documentation

    ◆ animation

    name_t tram::Ext::Kitchensink::AnimState::animation

    ◆ interpolate

    bool tram::Ext::Kitchensink::AnimState::interpolate

    ◆ name

    name_t tram::Ext::Kitchensink::AnimState::name

    ◆ next_state

    name_t tram::Ext::Kitchensink::AnimState::next_state

    ◆ pause_last

    bool tram::Ext::Kitchensink::AnimState::pause_last

    ◆ repeats

    uint32_t tram::Ext::Kitchensink::AnimState::repeats

    ◆ speed

    float tram::Ext::Kitchensink::AnimState::speed

    ◆ state_space

    name_t tram::Ext::Kitchensink::AnimState::state_space

    ◆ weight

    float tram::Ext::Kitchensink::AnimState::weight

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/animationtable.h
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_space-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::AnimStateSpace Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_space.html ================================================ Tramway SDK: tram::Ext::Kitchensink::AnimStateSpace Struct Reference
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::AnimStateSpace Struct Reference

    #include <animationtable.h>

    Public Attributes

    name_t name
     
    name_t parent
     

    Member Data Documentation

    ◆ name

    name_t tram::Ext::Kitchensink::AnimStateSpace::name

    ◆ parent

    name_t tram::Ext::Kitchensink::AnimStateSpace::parent

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/animationtable.h
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_default-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::AnimStateTransitionDefault Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_default.html ================================================ Tramway SDK: tram::Ext::Kitchensink::AnimStateTransitionDefault Struct Reference
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::AnimStateTransitionDefault Struct Reference

    #include <animationtable.h>

    Public Attributes

    name_t state
     
    float fade_in_time
     
    float fade_out_time
     

    Member Data Documentation

    ◆ fade_in_time

    float tram::Ext::Kitchensink::AnimStateTransitionDefault::fade_in_time

    ◆ fade_out_time

    float tram::Ext::Kitchensink::AnimStateTransitionDefault::fade_out_time

    ◆ state

    name_t tram::Ext::Kitchensink::AnimStateTransitionDefault::state

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/animationtable.h
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_from-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::AnimStateTransitionFrom Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_from.html ================================================ Tramway SDK: tram::Ext::Kitchensink::AnimStateTransitionFrom Struct Reference
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::AnimStateTransitionFrom Struct Reference

    #include <animationtable.h>

    Public Attributes

    name_t from_state
     
    name_t into_state
     
    float fade_time
     

    Member Data Documentation

    ◆ fade_time

    float tram::Ext::Kitchensink::AnimStateTransitionFrom::fade_time

    ◆ from_state

    name_t tram::Ext::Kitchensink::AnimStateTransitionFrom::from_state

    ◆ into_state

    name_t tram::Ext::Kitchensink::AnimStateTransitionFrom::into_state

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/animationtable.h
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_into-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::AnimStateTransitionInto Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_anim_state_transition_into.html ================================================ Tramway SDK: tram::Ext::Kitchensink::AnimStateTransitionInto Struct Reference
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::AnimStateTransitionInto Struct Reference

    #include <animationtable.h>

    Public Attributes

    name_t from_state
     
    name_t into_state
     
    float fade_time
     

    Member Data Documentation

    ◆ fade_time

    float tram::Ext::Kitchensink::AnimStateTransitionInto::fade_time

    ◆ from_state

    name_t tram::Ext::Kitchensink::AnimStateTransitionInto::from_state

    ◆ into_state

    name_t tram::Ext::Kitchensink::AnimStateTransitionInto::into_state

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/animationtable.h
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_attribute-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::Attribute Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_attribute.html ================================================ Tramway SDK: tram::Ext::Kitchensink::Attribute Struct Reference
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::Attribute Struct Reference

    #include <attributes.h>

    Public Attributes

    name_t name
     
    float base_value
     
    float affected_value
     
    float effective_value
     

    Member Data Documentation

    ◆ affected_value

    float tram::Ext::Kitchensink::Attribute::affected_value

    ◆ base_value

    float tram::Ext::Kitchensink::Attribute::base_value

    ◆ effective_value

    float tram::Ext::Kitchensink::Attribute::effective_value

    ◆ name

    name_t tram::Ext::Kitchensink::Attribute::name

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/attributes.h
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::AttributeContainer Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_attribute_container.html ================================================ Tramway SDK: tram::Ext::Kitchensink::AttributeContainer Struct Reference
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::AttributeContainer Struct Reference

    #include <attributes.h>

    Public Member Functions

    float GetAttribute (name_t attribute)
     
    float GetAttributeBase (name_t attribute)
     
    void SetAttribute (name_t attribute, float base_value)
     
    void ApplyEffect (Effect effect)
     
    void RemoveEffect (name_t tag)
     
    bool HasAttribute (name_t type)
     
    void Tick ()
     

    Static Public Member Functions

    static AttributeContainerFind (Entity *)
     
    static AttributeContainerFind (id_t)
     
    static void LoadFromDisk (const char *)
     

    Public Attributes

    float last_tick = 0.0f
     
    std::vector< Attributeattributes
     
    std::vector< Effecteffects
     

    Member Function Documentation

    ◆ ApplyEffect()

    void tram::Ext::Kitchensink::AttributeContainer::ApplyEffect ( Effect  effect)

    ◆ Find() [1/2]

    AttributeContainer * tram::Ext::Kitchensink::AttributeContainer::Find ( Entity entity)
    static

    ◆ Find() [2/2]

    AttributeContainer * tram::Ext::Kitchensink::AttributeContainer::Find ( id_t  entity_id)
    static

    ◆ GetAttribute()

    float tram::Ext::Kitchensink::AttributeContainer::GetAttribute ( name_t  attribute)

    ◆ GetAttributeBase()

    float tram::Ext::Kitchensink::AttributeContainer::GetAttributeBase ( name_t  attribute)

    ◆ HasAttribute()

    bool tram::Ext::Kitchensink::AttributeContainer::HasAttribute ( name_t  type)

    ◆ LoadFromDisk()

    void tram::Ext::Kitchensink::AttributeContainer::LoadFromDisk ( const char *  filename)
    static

    ◆ RemoveEffect()

    void tram::Ext::Kitchensink::AttributeContainer::RemoveEffect ( name_t  tag)

    ◆ SetAttribute()

    void tram::Ext::Kitchensink::AttributeContainer::SetAttribute ( name_t  attribute,
    float  base_value 
    )

    ◆ Tick()

    void tram::Ext::Kitchensink::AttributeContainer::Tick ( )

    Member Data Documentation

    ◆ attributes

    std::vector<Attribute> tram::Ext::Kitchensink::AttributeContainer::attributes

    ◆ effects

    std::vector<Effect> tram::Ext::Kitchensink::AttributeContainer::effects

    ◆ last_tick

    float tram::Ext::Kitchensink::AttributeContainer::last_tick = 0.0f

    The documentation for this struct was generated from the following files:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/attributes.h
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/attributes.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_attribute_modifier-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Ext::Kitchensink::AttributeModifier Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_attribute_modifier.html ================================================ Tramway SDK: tram::Ext::Kitchensink::AttributeModifier Struct Reference
    Tramway SDK
    tram::Ext::Kitchensink::AttributeModifier Struct Reference

    #include <attributes.h>

    Public Attributes

    name_t name
     
    name_t tag
     
    float value
     
    int flags
     
    float time
     

    Member Data Documentation

    ◆ flags

    int tram::Ext::Kitchensink::AttributeModifier::flags

    ◆ name

    name_t tram::Ext::Kitchensink::AttributeModifier::name

    ◆ tag

    name_t tram::Ext::Kitchensink::AttributeModifier::tag

    ◆ time

    float tram::Ext::Kitchensink::AttributeModifier::time

    ◆ value

    float tram::Ext::Kitchensink::AttributeModifier::value

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/attributes.h
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_base_attribute-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::BaseAttribute Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_base_attribute.html ================================================ Tramway SDK: tram::Ext::Kitchensink::BaseAttribute Struct Reference
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::BaseAttribute Struct Reference

    #include <character.h>

    Public Attributes

    name_t name
     
    float value
     

    Member Data Documentation

    ◆ name

    name_t tram::Ext::Kitchensink::BaseAttribute::name

    ◆ value

    float tram::Ext::Kitchensink::BaseAttribute::value

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/character.h
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_base_faction_rank-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::BaseFactionRank Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_base_faction_rank.html ================================================ Tramway SDK: tram::Ext::Kitchensink::BaseFactionRank Struct Reference
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::BaseFactionRank Struct Reference

    #include <character.h>

    Public Attributes

    Factionfaction
     
    float rank
     
    float loyalty
     

    Member Data Documentation

    ◆ faction

    Faction* tram::Ext::Kitchensink::BaseFactionRank::faction

    ◆ loyalty

    float tram::Ext::Kitchensink::BaseFactionRank::loyalty

    ◆ rank

    float tram::Ext::Kitchensink::BaseFactionRank::rank

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/character.h
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_character_disposition-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::CharacterDisposition Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_character_disposition.html ================================================ Tramway SDK: tram::Ext::Kitchensink::CharacterDisposition Struct Reference
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::CharacterDisposition Struct Reference

    #include <character.h>

    Public Attributes

    Charactercharacter
     
    float disposition
     

    Member Data Documentation

    ◆ character

    Character* tram::Ext::Kitchensink::CharacterDisposition::character

    ◆ disposition

    float tram::Ext::Kitchensink::CharacterDisposition::disposition

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/character.h
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_dialog_action-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::DialogAction Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_dialog_action.html ================================================ Tramway SDK: tram::Ext::Kitchensink::DialogAction Struct Reference
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::DialogAction Struct Reference

    #include <dialog.h>

    Public Member Functions

    void Perform ()
     

    Public Attributes

    name_t quest
     
    name_t trigger
     

    Member Function Documentation

    ◆ Perform()

    void tram::Ext::Kitchensink::DialogAction::Perform ( )

    Member Data Documentation

    ◆ quest

    name_t tram::Ext::Kitchensink::DialogAction::quest

    ◆ trigger

    name_t tram::Ext::Kitchensink::DialogAction::trigger

    The documentation for this struct was generated from the following files:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/dialog.h
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/dialog.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_dialog_condition-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::DialogCondition Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_dialog_condition.html ================================================ Tramway SDK: tram::Ext::Kitchensink::DialogCondition Struct Reference
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::DialogCondition Struct Reference

    #include <dialog.h>

    Public Member Functions

    bool IsMet ()
     

    Public Attributes

    name_t quest
     
    name_t variable
     

    Member Function Documentation

    ◆ IsMet()

    bool tram::Ext::Kitchensink::DialogCondition::IsMet ( )

    Member Data Documentation

    ◆ quest

    name_t tram::Ext::Kitchensink::DialogCondition::quest

    ◆ variable

    name_t tram::Ext::Kitchensink::DialogCondition::variable

    The documentation for this struct was generated from the following files:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/dialog.h
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/dialog.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_dialog_topic-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::DialogTopic Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_dialog_topic.html ================================================ Tramway SDK: tram::Ext::Kitchensink::DialogTopic Struct Reference
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::DialogTopic Struct Reference

    #include <dialog.h>

    Public Member Functions

    std::vector< name_tGetValidNextTopics ()
     
    void Gather (std::vector< name_t > &topics)
     

    Static Public Member Functions

    static void LoadFromDisk (const char *filename)
     
    static DialogTopicMake (name_t)
     
    static DialogTopicFind (name_t)
     

    Public Attributes

    DialogType type = DIALOG_TOPIC
     
    name_t name
     
    name_t prompt
     
    name_t answer
     
    DialogCondition condition
     
    DialogAction action
     
    std::vector< name_tnext_topics
     

    Member Function Documentation

    ◆ Find()

    DialogTopic * tram::Ext::Kitchensink::DialogTopic::Find ( name_t  name)
    static

    ◆ Gather()

    void tram::Ext::Kitchensink::DialogTopic::Gather ( std::vector< name_t > &  topics)

    ◆ GetValidNextTopics()

    std::vector< name_t > tram::Ext::Kitchensink::DialogTopic::GetValidNextTopics ( )

    ◆ LoadFromDisk()

    void tram::Ext::Kitchensink::DialogTopic::LoadFromDisk ( const char *  filename)
    static

    ◆ Make()

    DialogTopic * tram::Ext::Kitchensink::DialogTopic::Make ( name_t  name)
    static

    Member Data Documentation

    ◆ action

    DialogAction tram::Ext::Kitchensink::DialogTopic::action

    ◆ answer

    name_t tram::Ext::Kitchensink::DialogTopic::answer

    ◆ condition

    DialogCondition tram::Ext::Kitchensink::DialogTopic::condition

    ◆ name

    name_t tram::Ext::Kitchensink::DialogTopic::name

    ◆ next_topics

    std::vector<name_t> tram::Ext::Kitchensink::DialogTopic::next_topics

    ◆ prompt

    name_t tram::Ext::Kitchensink::DialogTopic::prompt

    ◆ type

    DialogType tram::Ext::Kitchensink::DialogTopic::type = DIALOG_TOPIC

    The documentation for this struct was generated from the following files:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/dialog.h
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/dialog.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_effect-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::Effect Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_effect.html ================================================ Tramway SDK: tram::Ext::Kitchensink::Effect Struct Reference
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::Effect Struct Reference

    #include <attributes.h>

    Public Attributes

    name_t attribute
     
    name_t name
     
    name_t tag
     
    float value
     
    int type
     
    int flags
     
    float time
     

    Member Data Documentation

    ◆ attribute

    name_t tram::Ext::Kitchensink::Effect::attribute

    ◆ flags

    int tram::Ext::Kitchensink::Effect::flags

    ◆ name

    name_t tram::Ext::Kitchensink::Effect::name

    ◆ tag

    name_t tram::Ext::Kitchensink::Effect::tag

    ◆ time

    float tram::Ext::Kitchensink::Effect::time

    ◆ type

    int tram::Ext::Kitchensink::Effect::type

    ◆ value

    float tram::Ext::Kitchensink::Effect::value

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/attributes.h
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_entity_children-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::EntityChildren Member List

    This is the complete list of members for tram::Ext::Kitchensink::EntityChildren, including all inherited members.

    childrentram::Ext::Kitchensink::EntityChildren
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_entity_children.html ================================================ Tramway SDK: tram::Ext::Kitchensink::EntityChildren Struct Reference
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::EntityChildren Struct Reference

    Public Attributes

    std::vector< id_tchildren
     

    Member Data Documentation

    ◆ children

    std::vector<id_t> tram::Ext::Kitchensink::EntityChildren::children

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/entities.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_faction_rank-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::FactionRank Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_faction_rank.html ================================================ Tramway SDK: tram::Ext::Kitchensink::FactionRank Struct Reference
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::FactionRank Struct Reference

    #include <character.h>

    Public Attributes

    Charactercharacter
     
    float rank
     
    float loyalty
     

    Member Data Documentation

    ◆ character

    Character* tram::Ext::Kitchensink::FactionRank::character

    ◆ loyalty

    float tram::Ext::Kitchensink::FactionRank::loyalty

    ◆ rank

    float tram::Ext::Kitchensink::FactionRank::rank

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/character.h
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_faction_relation-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::FactionRelation Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_faction_relation.html ================================================ Tramway SDK: tram::Ext::Kitchensink::FactionRelation Struct Reference
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::FactionRelation Struct Reference

    #include <character.h>

    Public Attributes

    Factionfaction
     
    float disposition
     

    Member Data Documentation

    ◆ disposition

    float tram::Ext::Kitchensink::FactionRelation::disposition

    ◆ faction

    Faction* tram::Ext::Kitchensink::FactionRelation::faction

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/character.h
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_initial_attribute-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::InitialAttribute Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_initial_attribute.html ================================================ Tramway SDK: tram::Ext::Kitchensink::InitialAttribute Struct Reference
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::InitialAttribute Struct Reference

    Public Attributes

    name_t attribute
     
    float value
     

    Member Data Documentation

    ◆ attribute

    name_t tram::Ext::Kitchensink::InitialAttribute::attribute

    ◆ value

    float tram::Ext::Kitchensink::InitialAttribute::value

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/character.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_inventory-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Ext::Kitchensink::Inventory Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_inventory.html ================================================ Tramway SDK: tram::Ext::Kitchensink::Inventory Struct Reference
    Tramway SDK
    tram::Ext::Kitchensink::Inventory Struct Reference

    #include <inventory.h>

    Public Member Functions

    int AddItem (const ItemInstance &item)
     
    int AddItem (name_t item_class, int count)
     
    int RemoveItem (name_t item_class, int count)
     
    int GetItemCount (name_t item_class)
     

    Static Public Member Functions

    static InventoryFind (id_t id)
     

    Public Attributes

    std::vector< ItemInstanceitems
     
    int width = 1
     
    int height = 1
     
    bool allow_overlap = true
     

    Member Function Documentation

    ◆ AddItem() [1/2]

    int tram::Ext::Kitchensink::Inventory::AddItem ( const ItemInstance item)

    ◆ AddItem() [2/2]

    int tram::Ext::Kitchensink::Inventory::AddItem ( name_t  item_class,
    int  count 
    )

    ◆ Find()

    Inventory * tram::Ext::Kitchensink::Inventory::Find ( id_t  id)
    static

    ◆ GetItemCount()

    int tram::Ext::Kitchensink::Inventory::GetItemCount ( name_t  item_class)

    ◆ RemoveItem()

    int tram::Ext::Kitchensink::Inventory::RemoveItem ( name_t  item_class,
    int  count 
    )

    Member Data Documentation

    ◆ allow_overlap

    bool tram::Ext::Kitchensink::Inventory::allow_overlap = true

    ◆ height

    int tram::Ext::Kitchensink::Inventory::height = 1

    ◆ items

    std::vector<ItemInstance> tram::Ext::Kitchensink::Inventory::items

    ◆ width

    int tram::Ext::Kitchensink::Inventory::width = 1

    The documentation for this struct was generated from the following files:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/inventory.h
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/inventory.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_inventory_factory_info-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::InventoryFactoryInfo Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_inventory_factory_info.html ================================================ Tramway SDK: tram::Ext::Kitchensink::InventoryFactoryInfo Struct Reference
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::InventoryFactoryInfo Struct Reference

    Public Attributes

    InventoryManager *(* make )(void) = nullptr
     
    void(* clear )(InventoryManager *) = nullptr
     

    Member Data Documentation

    ◆ clear

    void(* tram::Ext::Kitchensink::InventoryFactoryInfo::clear) (InventoryManager *) = nullptr

    ◆ make

    InventoryManager *(* tram::Ext::Kitchensink::InventoryFactoryInfo::make) (void) = nullptr

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/inventory.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_item_class-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Ext::Kitchensink::ItemClass Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_item_class.html ================================================ Tramway SDK: tram::Ext::Kitchensink::ItemClass Struct Reference
    Tramway SDK
    tram::Ext::Kitchensink::ItemClass Struct Reference

    #include <inventory.h>

    Static Public Member Functions

    static ItemClassFind (name_t item_class)
     

    Public Attributes

    name_t name
     
    name_t viewmodel
     
    name_t worldmodel
     
    item_action_func primary_action = nullptr
     
    item_action_func secondary_action = nullptr
     
    item_action_func idle_action = nullptr
     
    bool draw_hands = false
     
    name_t equipped_slot
     
    GUI::font_t sprite_font = 0
     
    GUI::font_t icon_font = 0
     
    GUI::glyph_t sprite_glyph = 0
     
    GUI::glyph_t icon_glyph = 0
     
    int width = 1
     
    int height = 1
     
    int stack = 1
     
    float weight = 0.0f
     
    std::vector< Attributeattributes
     

    Member Function Documentation

    ◆ Find()

    ItemClass * tram::Ext::Kitchensink::ItemClass::Find ( name_t  item_class)
    static

    Member Data Documentation

    ◆ attributes

    std::vector<Attribute> tram::Ext::Kitchensink::ItemClass::attributes

    ◆ draw_hands

    bool tram::Ext::Kitchensink::ItemClass::draw_hands = false

    ◆ equipped_slot

    name_t tram::Ext::Kitchensink::ItemClass::equipped_slot

    ◆ height

    int tram::Ext::Kitchensink::ItemClass::height = 1

    ◆ icon_font

    GUI::font_t tram::Ext::Kitchensink::ItemClass::icon_font = 0

    ◆ icon_glyph

    GUI::glyph_t tram::Ext::Kitchensink::ItemClass::icon_glyph = 0

    ◆ idle_action

    item_action_func tram::Ext::Kitchensink::ItemClass::idle_action = nullptr

    ◆ name

    name_t tram::Ext::Kitchensink::ItemClass::name

    ◆ primary_action

    item_action_func tram::Ext::Kitchensink::ItemClass::primary_action = nullptr

    ◆ secondary_action

    item_action_func tram::Ext::Kitchensink::ItemClass::secondary_action = nullptr

    ◆ sprite_font

    GUI::font_t tram::Ext::Kitchensink::ItemClass::sprite_font = 0

    ◆ sprite_glyph

    GUI::glyph_t tram::Ext::Kitchensink::ItemClass::sprite_glyph = 0

    ◆ stack

    int tram::Ext::Kitchensink::ItemClass::stack = 1

    ◆ viewmodel

    name_t tram::Ext::Kitchensink::ItemClass::viewmodel

    ◆ weight

    float tram::Ext::Kitchensink::ItemClass::weight = 0.0f

    ◆ width

    int tram::Ext::Kitchensink::ItemClass::width = 1

    ◆ worldmodel

    name_t tram::Ext::Kitchensink::ItemClass::worldmodel

    The documentation for this struct was generated from the following files:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/inventory.h
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/inventory.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_item_instance-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::ItemInstance Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_item_instance.html ================================================ Tramway SDK: tram::Ext::Kitchensink::ItemInstance Struct Reference
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::ItemInstance Struct Reference

    #include <inventory.h>

    Public Attributes

    name_t item_class
     
    name_t compartment
     
    int count = 1
     
    int x = 0
     
    int y = 0
     
    bool equipped = false
     

    Member Data Documentation

    ◆ compartment

    name_t tram::Ext::Kitchensink::ItemInstance::compartment

    ◆ count

    int tram::Ext::Kitchensink::ItemInstance::count = 1

    ◆ equipped

    bool tram::Ext::Kitchensink::ItemInstance::equipped = false

    ◆ item_class

    name_t tram::Ext::Kitchensink::ItemInstance::item_class

    ◆ x

    int tram::Ext::Kitchensink::ItemInstance::x = 0

    ◆ y

    int tram::Ext::Kitchensink::ItemInstance::y = 0

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/inventory.h
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_quest-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::Quest Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_quest.html ================================================ Tramway SDK: tram::Ext::Kitchensink::Quest Struct Reference
    Tramway SDK v0.1.1

    #include <quest.h>

    Public Member Functions

     Quest (name_t name)
     
    Value GetVariable (name_t)
     
    void SetVariable (name_t, Value)
     
    void FireTrigger (name_t)
     

    Static Public Member Functions

    static void Init ()
     
    static std::vector< Quest * > FindAll (bool unknown_also)
     
    static void LoadFromDisk (const char *filename)
     
    static QuestFind (name_t quest)
     

    Public Attributes

    name_t name
     
    std::vector< QuestVariablevariables
     
    std::vector< QuestTriggertriggers
     

    Constructor & Destructor Documentation

    ◆ Quest()

    tram::Ext::Kitchensink::Quest::Quest ( name_t  name)
    inline

    Member Function Documentation

    ◆ Find()

    Quest * tram::Ext::Kitchensink::Quest::Find ( name_t  quest)
    static

    ◆ FindAll()

    std::vector< Quest * > tram::Ext::Kitchensink::Quest::FindAll ( bool  unknown_also)
    static

    ◆ FireTrigger()

    void tram::Ext::Kitchensink::Quest::FireTrigger ( name_t  name)

    ◆ GetVariable()

    Value tram::Ext::Kitchensink::Quest::GetVariable ( name_t  name)

    ◆ Init()

    void tram::Ext::Kitchensink::Quest::Init ( )
    static

    ◆ LoadFromDisk()

    void tram::Ext::Kitchensink::Quest::LoadFromDisk ( const char *  filename)
    static

    ◆ SetVariable()

    void tram::Ext::Kitchensink::Quest::SetVariable ( name_t  name,
    Value  value 
    )

    Member Data Documentation

    ◆ name

    name_t tram::Ext::Kitchensink::Quest::name

    ◆ triggers

    std::vector<QuestTrigger> tram::Ext::Kitchensink::Quest::triggers

    ◆ variables

    std::vector<QuestVariable> tram::Ext::Kitchensink::Quest::variables

    The documentation for this struct was generated from the following files:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/quest.h
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/quest.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_quest_trigger-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::QuestTrigger Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_quest_trigger.html ================================================ Tramway SDK: tram::Ext::Kitchensink::QuestTrigger Struct Reference
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::QuestTrigger Struct Reference

    #include <quest.h>

    Public Member Functions

    void SetValue (name_t variable, Value)
     
    void SetObjective (name_t name, name_t state)
     
    void SetIncrement (name_t variable)
     

    Public Attributes

    name_t name
     
    quest_t type
     
    name_t condition
     
    name_t variable
     
    value_t value
     

    Member Function Documentation

    ◆ SetIncrement()

    void tram::Ext::Kitchensink::QuestTrigger::SetIncrement ( name_t  variable)

    ◆ SetObjective()

    void tram::Ext::Kitchensink::QuestTrigger::SetObjective ( name_t  name,
    name_t  state 
    )

    ◆ SetValue()

    void tram::Ext::Kitchensink::QuestTrigger::SetValue ( name_t  variable,
    Value  value 
    )

    Member Data Documentation

    ◆ condition

    name_t tram::Ext::Kitchensink::QuestTrigger::condition

    ◆ name

    name_t tram::Ext::Kitchensink::QuestTrigger::name

    ◆ type

    quest_t tram::Ext::Kitchensink::QuestTrigger::type

    ◆ value

    value_t tram::Ext::Kitchensink::QuestTrigger::value

    ◆ variable

    name_t tram::Ext::Kitchensink::QuestTrigger::variable

    The documentation for this struct was generated from the following files:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/quest.h
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/quest.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::QuestVariable Member List

    This is the complete list of members for tram::Ext::Kitchensink::QuestVariable, including all inherited members.

    And(name_t, name_t, name_t, name_t, value_t)tram::Ext::Kitchensink::QuestVariablestatic
    comparisontram::Ext::Kitchensink::QuestVariable
    counttram::Ext::Kitchensink::QuestVariable
    entitytram::Ext::Kitchensink::QuestVariable
    Evaluate()tram::Ext::Kitchensink::QuestVariable
    Greater(name_t, name_t, name_t, name_t, value_t)tram::Ext::Kitchensink::QuestVariablestatic
    GreaterOrEqual(name_t, name_t, name_t, name_t, value_t)tram::Ext::Kitchensink::QuestVariablestatic
    Is(name_t, name_t, name_t, name_t, value_t)tram::Ext::Kitchensink::QuestVariablestatic
    IsNot(name_t, name_t, name_t, name_t, value_t)tram::Ext::Kitchensink::QuestVariablestatic
    itemtram::Ext::Kitchensink::QuestVariable
    itemtram::Ext::Kitchensink::QuestVariable
    ItemCount(name_t, name_t, name_t)tram::Ext::Kitchensink::QuestVariablestatic
    Less(name_t, name_t, name_t, name_t, value_t)tram::Ext::Kitchensink::QuestVariablestatic
    LessOrEqual(name_t, name_t, name_t, name_t, value_t)tram::Ext::Kitchensink::QuestVariablestatic
    nametram::Ext::Kitchensink::QuestVariable
    Not(name_t, name_t, name_t)tram::Ext::Kitchensink::QuestVariablestatic
    Objective(name_t, name_t, name_t, name_t)tram::Ext::Kitchensink::QuestVariablestatic
    objectivetram::Ext::Kitchensink::QuestVariable
    operator=(const QuestVariable &)tram::Ext::Kitchensink::QuestVariable
    Or(name_t, name_t, name_t, name_t, value_t)tram::Ext::Kitchensink::QuestVariablestatic
    quest1tram::Ext::Kitchensink::QuestVariable
    quest2tram::Ext::Kitchensink::QuestVariable
    QuestVariable()tram::Ext::Kitchensink::QuestVariableinline
    QuestVariable(const QuestVariable &)tram::Ext::Kitchensink::QuestVariable
    scripttram::Ext::Kitchensink::QuestVariable
    Script(name_t, name_t)tram::Ext::Kitchensink::QuestVariablestatic
    subtitletram::Ext::Kitchensink::QuestVariable
    titletram::Ext::Kitchensink::QuestVariable
    typetram::Ext::Kitchensink::QuestVariable
    valuetram::Ext::Kitchensink::QuestVariable
    valuetram::Ext::Kitchensink::QuestVariable
    valuetram::Ext::Kitchensink::QuestVariable
    Value(name_t, value_t)tram::Ext::Kitchensink::QuestVariablestatic
    variable1tram::Ext::Kitchensink::QuestVariable
    variable2tram::Ext::Kitchensink::QuestVariable
    ~QuestVariable()tram::Ext::Kitchensink::QuestVariableinline
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_kitchensink_1_1_quest_variable.html ================================================ Tramway SDK: tram::Ext::Kitchensink::QuestVariable Struct Reference
    Tramway SDK v0.1.1
    tram::Ext::Kitchensink::QuestVariable Struct Reference

    #include <quest.h>

    Public Member Functions

     QuestVariable ()
     
     ~QuestVariable ()
     
     QuestVariable (const QuestVariable &)
     
    QuestVariableoperator= (const QuestVariable &)
     
    value_t Evaluate ()
     

    Static Public Member Functions

    static QuestVariable Value (name_t, value_t)
     
    static QuestVariable Objective (name_t, name_t, name_t, name_t)
     
    static QuestVariable Is (name_t, name_t, name_t, name_t, value_t)
     
    static QuestVariable IsNot (name_t, name_t, name_t, name_t, value_t)
     
    static QuestVariable Greater (name_t, name_t, name_t, name_t, value_t)
     
    static QuestVariable GreaterOrEqual (name_t, name_t, name_t, name_t, value_t)
     
    static QuestVariable Less (name_t, name_t, name_t, name_t, value_t)
     
    static QuestVariable LessOrEqual (name_t, name_t, name_t, name_t, value_t)
     
    static QuestVariable And (name_t, name_t, name_t, name_t, value_t)
     
    static QuestVariable Or (name_t, name_t, name_t, name_t, value_t)
     
    static QuestVariable Not (name_t, name_t, name_t)
     
    static QuestVariable Script (name_t, name_t)
     
    static QuestVariable ItemCount (name_t, name_t, name_t)
     

    Public Attributes

    name_t name
     
    quest_t type
     
    union {
       struct {
          Value   value
     
       }   value
     
       struct {
          name_t   value
     
          name_t   title
     
          name_t   subtitle
     
       }   objective
     
       struct {
          name_t   name
     
       }   script
     
       struct {
          name_t   quest1
     
          name_t   variable1
     
          name_t   quest2
     
          value_t   variable2
     
       }   comparison
     
       struct {
          name_t   entity
     
          name_t   item
     
          int   count
     
       }   item
     
    }; 
     

    Constructor & Destructor Documentation

    ◆ QuestVariable() [1/2]

    tram::Ext::Kitchensink::QuestVariable::QuestVariable ( )
    inline

    ◆ ~QuestVariable()

    tram::Ext::Kitchensink::QuestVariable::~QuestVariable ( )
    inline

    ◆ QuestVariable() [2/2]

    tram::Ext::Kitchensink::QuestVariable::QuestVariable ( const QuestVariable other)

    Member Function Documentation

    ◆ And()

    QuestVariable tram::Ext::Kitchensink::QuestVariable::And ( name_t  name,
    name_t  quest1,
    name_t  var1,
    name_t  quest2,
    value_t  var2 
    )
    static

    ◆ Evaluate()

    value_t tram::Ext::Kitchensink::QuestVariable::Evaluate ( )

    ◆ Greater()

    QuestVariable tram::Ext::Kitchensink::QuestVariable::Greater ( name_t  name,
    name_t  quest1,
    name_t  var1,
    name_t  quest2,
    value_t  var2 
    )
    static

    ◆ GreaterOrEqual()

    QuestVariable tram::Ext::Kitchensink::QuestVariable::GreaterOrEqual ( name_t  name,
    name_t  quest1,
    name_t  var1,
    name_t  quest2,
    value_t  var2 
    )
    static

    ◆ Is()

    QuestVariable tram::Ext::Kitchensink::QuestVariable::Is ( name_t  name,
    name_t  quest1,
    name_t  var1,
    name_t  quest2,
    value_t  var2 
    )
    static

    ◆ IsNot()

    QuestVariable tram::Ext::Kitchensink::QuestVariable::IsNot ( name_t  name,
    name_t  quest1,
    name_t  var1,
    name_t  quest2,
    value_t  var2 
    )
    static

    ◆ ItemCount()

    QuestVariable tram::Ext::Kitchensink::QuestVariable::ItemCount ( name_t  name,
    name_t  entity,
    name_t  item 
    )
    static

    ◆ Less()

    QuestVariable tram::Ext::Kitchensink::QuestVariable::Less ( name_t  name,
    name_t  quest1,
    name_t  var1,
    name_t  quest2,
    value_t  var2 
    )
    static

    ◆ LessOrEqual()

    QuestVariable tram::Ext::Kitchensink::QuestVariable::LessOrEqual ( name_t  name,
    name_t  quest1,
    name_t  var1,
    name_t  quest2,
    value_t  var2 
    )
    static

    ◆ Not()

    QuestVariable tram::Ext::Kitchensink::QuestVariable::Not ( name_t  name,
    name_t  quest1,
    name_t  var1 
    )
    static

    ◆ Objective()

    QuestVariable tram::Ext::Kitchensink::QuestVariable::Objective ( name_t  name,
    name_t  value,
    name_t  title,
    name_t  description 
    )
    static

    ◆ operator=()

    QuestVariable & tram::Ext::Kitchensink::QuestVariable::operator= ( const QuestVariable other)

    ◆ Or()

    QuestVariable tram::Ext::Kitchensink::QuestVariable::Or ( name_t  name,
    name_t  quest1,
    name_t  var1,
    name_t  quest2,
    value_t  var2 
    )
    static

    ◆ Script()

    QuestVariable tram::Ext::Kitchensink::QuestVariable::Script ( name_t  name,
    name_t  script 
    )
    static

    ◆ Value()

    QuestVariable tram::Ext::Kitchensink::QuestVariable::Value ( name_t  name,
    value_t  value 
    )
    static

    Member Data Documentation

    ◆ 

    union { ... } tram::Ext::Kitchensink::QuestVariable::@22

    ◆ 

    struct { ... } tram::Ext::Kitchensink::QuestVariable::comparison

    ◆ count

    int tram::Ext::Kitchensink::QuestVariable::count

    ◆ entity

    name_t tram::Ext::Kitchensink::QuestVariable::entity

    ◆ item [1/2]

    name_t tram::Ext::Kitchensink::QuestVariable::item

    ◆  [2/2]

    struct { ... } tram::Ext::Kitchensink::QuestVariable::item

    ◆ name

    name_t tram::Ext::Kitchensink::QuestVariable::name

    ◆ 

    struct { ... } tram::Ext::Kitchensink::QuestVariable::objective

    ◆ quest1

    name_t tram::Ext::Kitchensink::QuestVariable::quest1

    ◆ quest2

    name_t tram::Ext::Kitchensink::QuestVariable::quest2

    ◆ 

    struct { ... } tram::Ext::Kitchensink::QuestVariable::script

    ◆ subtitle

    name_t tram::Ext::Kitchensink::QuestVariable::subtitle

    ◆ title

    name_t tram::Ext::Kitchensink::QuestVariable::title

    ◆ type

    quest_t tram::Ext::Kitchensink::QuestVariable::type

    ◆ value [1/3]

    Value tram::Ext::Kitchensink::QuestVariable::value

    ◆  [2/3]

    struct { ... } tram::Ext::Kitchensink::QuestVariable::value

    ◆ value [3/3]

    name_t tram::Ext::Kitchensink::QuestVariable::value

    ◆ variable1

    name_t tram::Ext::Kitchensink::QuestVariable::variable1

    ◆ variable2

    value_t tram::Ext::Kitchensink::QuestVariable::variable2

    The documentation for this struct was generated from the following files:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/quest.h
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/kitchensink/quest.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_menu_1_1_event_intercept-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Ext::Menu::EventIntercept Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_menu_1_1_event_intercept.html ================================================ Tramway SDK: tram::Ext::Menu::EventIntercept Struct Reference
    Tramway SDK v0.1.1
    tram::Ext::Menu::EventIntercept Struct Reference
    Inheritance diagram for tram::Ext::Menu::EventIntercept:
    tram::Ext::Menu::Intercept

    Public Member Functions

    void Display ()
     
    - Public Member Functions inherited from tram::Ext::Menu::Intercept
    virtual ~Intercept ()=default
     

    Public Attributes

    std::string emitter
     
    std::string type
     
    std::string subtype
     
    std::string value
     
    - Public Attributes inherited from tram::Ext::Menu::Intercept
    unsigned int time
     

    Member Function Documentation

    ◆ Display()

    void tram::Ext::Menu::EventIntercept::Display ( )
    inlinevirtual

    Member Data Documentation

    ◆ emitter

    std::string tram::Ext::Menu::EventIntercept::emitter

    ◆ subtype

    std::string tram::Ext::Menu::EventIntercept::subtype

    ◆ type

    std::string tram::Ext::Menu::EventIntercept::type

    ◆ value

    std::string tram::Ext::Menu::EventIntercept::value

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/debug.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_menu_1_1_intercept-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Ext::Menu::Intercept Member List

    This is the complete list of members for tram::Ext::Menu::Intercept, including all inherited members.

    Display()=0tram::Ext::Menu::Interceptpure virtual
    timetram::Ext::Menu::Intercept
    ~Intercept()=defaulttram::Ext::Menu::Interceptvirtual
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_menu_1_1_intercept.html ================================================ Tramway SDK: tram::Ext::Menu::Intercept Struct Reference
    Tramway SDK v0.1.1
    tram::Ext::Menu::Intercept Struct Referenceabstract
    Inheritance diagram for tram::Ext::Menu::Intercept:
    tram::Ext::Menu::EventIntercept tram::Ext::Menu::LogIntercept tram::Ext::Menu::MessageIntercept

    Public Member Functions

    virtual void Display ()=0
     
    virtual ~Intercept ()=default
     

    Public Attributes

    unsigned int time
     

    Constructor & Destructor Documentation

    ◆ ~Intercept()

    virtual tram::Ext::Menu::Intercept::~Intercept ( )
    virtualdefault

    Member Function Documentation

    ◆ Display()

    virtual void tram::Ext::Menu::Intercept::Display ( )
    pure virtual

    Member Data Documentation

    ◆ time

    unsigned int tram::Ext::Menu::Intercept::time

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/debug.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_menu_1_1_log_intercept-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Ext::Menu::LogIntercept Member List

    This is the complete list of members for tram::Ext::Menu::LogIntercept, including all inherited members.

    Display()tram::Ext::Menu::LogInterceptinlinevirtual
    messagetram::Ext::Menu::LogIntercept
    timetram::Ext::Menu::Intercept
    ~Intercept()=defaulttram::Ext::Menu::Interceptvirtual
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_menu_1_1_log_intercept.html ================================================ Tramway SDK: tram::Ext::Menu::LogIntercept Struct Reference
    Tramway SDK v0.1.1
    tram::Ext::Menu::LogIntercept Struct Reference
    Inheritance diagram for tram::Ext::Menu::LogIntercept:
    tram::Ext::Menu::Intercept

    Public Member Functions

    void Display ()
     
    - Public Member Functions inherited from tram::Ext::Menu::Intercept
    virtual ~Intercept ()=default
     

    Public Attributes

    std::string message
     
    - Public Attributes inherited from tram::Ext::Menu::Intercept
    unsigned int time
     

    Member Function Documentation

    ◆ Display()

    void tram::Ext::Menu::LogIntercept::Display ( )
    inlinevirtual

    Member Data Documentation

    ◆ message

    std::string tram::Ext::Menu::LogIntercept::message

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/debug.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_menu_1_1_message_intercept-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Ext::Menu::MessageIntercept Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_ext_1_1_menu_1_1_message_intercept.html ================================================ Tramway SDK: tram::Ext::Menu::MessageIntercept Struct Reference
    Tramway SDK v0.1.1
    tram::Ext::Menu::MessageIntercept Struct Reference
    Inheritance diagram for tram::Ext::Menu::MessageIntercept:
    tram::Ext::Menu::Intercept

    Public Member Functions

    void Display ()
     
    - Public Member Functions inherited from tram::Ext::Menu::Intercept
    virtual ~Intercept ()=default
     

    Public Attributes

    std::string receiver
     
    std::string sender
     
    std::string type
     
    std::string value
     
    - Public Attributes inherited from tram::Ext::Menu::Intercept
    unsigned int time
     

    Member Function Documentation

    ◆ Display()

    void tram::Ext::Menu::MessageIntercept::Display ( )
    inlinevirtual

    Member Data Documentation

    ◆ receiver

    std::string tram::Ext::Menu::MessageIntercept::receiver

    ◆ sender

    std::string tram::Ext::Menu::MessageIntercept::sender

    ◆ type

    std::string tram::Ext::Menu::MessageIntercept::type

    ◆ value

    std::string tram::Ext::Menu::MessageIntercept::value

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/menu/debug.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_file_source-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::FileSource Member List

    This is the complete list of members for tram::FileSource, including all inherited members.

    mediumtram::FileSource
    pathtram::FileSource
    ================================================ FILE: docs/cppapi/structtram_1_1_file_source.html ================================================ Tramway SDK: tram::FileSource Struct Reference
    Tramway SDK v0.1.1
    tram::FileSource Struct Reference

    #include <file.h>

    Public Attributes

    FileMedium medium
     
    std::string path
     

    Member Data Documentation

    ◆ medium

    FileMedium tram::FileSource::medium

    ◆ path

    std::string tram::FileSource::path

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/platform/file.h
    ================================================ FILE: docs/cppapi/structtram_1_1_g_u_i_1_1_frame_object-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::GUI::FrameObject Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_g_u_i_1_1_frame_object.html ================================================ Tramway SDK: tram::GUI::FrameObject Struct Reference
    Tramway SDK v0.1.1
    tram::GUI::FrameObject Struct Reference

    Public Attributes

    uint32_t x
     
    uint32_t y
     
    uint32_t w
     
    uint32_t h
     
    uint32_t cursor_x
     
    uint32_t cursor_y
     
    uint32_t stack_height
     

    Member Data Documentation

    ◆ cursor_x

    uint32_t tram::GUI::FrameObject::cursor_x

    ◆ cursor_y

    uint32_t tram::GUI::FrameObject::cursor_y

    ◆ h

    uint32_t tram::GUI::FrameObject::h

    ◆ stack_height

    uint32_t tram::GUI::FrameObject::stack_height

    ◆ w

    uint32_t tram::GUI::FrameObject::w

    ◆ x

    uint32_t tram::GUI::FrameObject::x

    ◆ y

    uint32_t tram::GUI::FrameObject::y

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/gui.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_hashmap_1_1_record-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Hashmap< T >::Record Member List

    This is the complete list of members for tram::Hashmap< T >::Record, including all inherited members.

    flagstram::Hashmap< T >::Record
    keytram::Hashmap< T >::Record
    valuetram::Hashmap< T >::Record
    ================================================ FILE: docs/cppapi/structtram_1_1_hashmap_1_1_record.html ================================================ Tramway SDK: tram::Hashmap< T >::Record Struct Reference
    Tramway SDK v0.1.1
    tram::Hashmap< T >::Record Struct Reference

    #include <hashmap.h>

    Public Attributes

    uint32_t key = 0
     
    uint32_t flags = 0
     
    value
     

    Member Data Documentation

    ◆ flags

    template<typename T >
    uint32_t tram::Hashmap< T >::Record::flags = 0

    ◆ key

    template<typename T >
    uint32_t tram::Hashmap< T >::Record::key = 0

    ◆ value

    template<typename T >
    T tram::Hashmap< T >::Record::value

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/hashmap.h
    ================================================ FILE: docs/cppapi/structtram_1_1_listener_info-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::ListenerInfo Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_listener_info.html ================================================ Tramway SDK: tram::ListenerInfo Struct Reference
    Tramway SDK v0.1.1
    tram::ListenerInfo Struct Reference

    Public Types

    enum  ListenerType : uint32_t {
      LISTENER_COMPONENT , LISTENER_ENTITY , LISTENER_DATA_FUNCTION , LISTENER_FUNCTION ,
      LISTENER_DELETED
    }
     

    Public Attributes

    union {
       EntityComponent *   component = nullptr
     
       Entity *   entity
     
       void(*   data_function )(Event &event, void *data)
     
       void(*   function )(Event &event)
     
    }; 
     
    void * data
     
    listener_t handle = -1
     
    ListenerType type = LISTENER_COMPONENT
     

    Member Enumeration Documentation

    ◆ ListenerType

    Enumerator
    LISTENER_COMPONENT 
    LISTENER_ENTITY 
    LISTENER_DATA_FUNCTION 
    LISTENER_FUNCTION 
    LISTENER_DELETED 

    Member Data Documentation

    ◆ 

    union { ... } tram::ListenerInfo::@36

    ◆ component

    EntityComponent* tram::ListenerInfo::component = nullptr

    ◆ data

    void* tram::ListenerInfo::data

    ◆ data_function

    void(* tram::ListenerInfo::data_function) (Event &event, void *data)

    ◆ entity

    Entity* tram::ListenerInfo::entity

    ◆ function

    void(* tram::ListenerInfo::function) (Event &event)

    ◆ handle

    listener_t tram::ListenerInfo::handle = -1

    ◆ type

    ListenerType tram::ListenerInfo::type = LISTENER_COMPONENT

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/event.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_message-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Message Member List

    This is the complete list of members for tram::Message, including all inherited members.

    ACTIVATE enum valuetram::Message
    ACTIVATE_ONCE enum valuetram::Message
    AllocateData(size_t ammount)tram::Messagestatic
    AllocateData()tram::Messageinlinestatic
    AllocateData(const T &data)tram::Messageinlinestatic
    CLOSE enum valuetram::Message
    datatram::Message
    data_inttram::Message
    data_valuetram::Message
    Dispatch()tram::Messagestatic
    GetLast()tram::Messagestatic
    GetName(message_t type)tram::Messagestatic
    GetType(name_t name)tram::Messagestatic
    KILL enum valuetram::Message
    LAST_MESSAGE enum valuetram::Message
    LOCK enum valuetram::Message
    MOVE_PICK_UP enum valuetram::Message
    NONE enum valuetram::Message
    OPEN enum valuetram::Message
    PING enum valuetram::Message
    receivertram::Message
    Register(const char *name)tram::Messagestatic
    SELECT enum valuetram::Message
    Send(const Message &message)tram::Messagestatic
    Send(const Message &message, float delay)tram::Messagestatic
    sendertram::Message
    SET_ANIMATION enum valuetram::Message
    SET_FLAG_OFF enum valuetram::Message
    SET_FLAG_ON enum valuetram::Message
    SET_PROGRESS enum valuetram::Message
    SetInterceptCallback(void(const Message &))tram::Messagestatic
    START enum valuetram::Message
    STOP enum valuetram::Message
    TOGGLE enum valuetram::Message
    TRIGGER enum valuetram::Message
    typetram::Message
    Type enum nametram::Message
    UNLOCK enum valuetram::Message
    ================================================ FILE: docs/cppapi/structtram_1_1_message.html ================================================ Tramway SDK: tram::Message Struct Reference
    Tramway SDK v0.1.1

    Message data. More...

    #include <framework/message.h>

    Public Types

    enum  Type : message_t {
      NONE , PING , MOVE_PICK_UP , OPEN ,
      CLOSE , LOCK , UNLOCK , TOGGLE ,
      KILL , TRIGGER , START , STOP ,
      ACTIVATE , ACTIVATE_ONCE , SELECT , SET_PROGRESS ,
      SET_ANIMATION , SET_FLAG_ON , SET_FLAG_OFF , LAST_MESSAGE
    }
     

    Static Public Member Functions

    static message_t Register (const char *name)
     Registers a new message type. More...
     
    static message_t GetType (name_t name)
     Finds a message type from a name. More...
     
    static name_t GetName (message_t type)
     Gets a nessage type name. More...
     
    static message_t GetLast ()
     Returns the last message_t plus one. More...
     
    static void Send (const Message &message)
     Sends a message. More...
     
    static void Send (const Message &message, float delay)
     Semds a message into the future. More...
     
    static void Dispatch ()
     Dispatches sent messsages. More...
     
    static void * AllocateData (size_t ammount)
     Allocates space for message data. More...
     
    template<typename T >
    static T * AllocateData ()
     
    template<typename T >
    static T * AllocateData (const T &data)
     
    static void SetInterceptCallback (void(const Message &))
     

    Public Attributes

    message_t type
     Type of the message. More...
     
    id_t sender
     ID of the Entity that sent the message. More...
     
    id_t receiver
     ID of the Entity that will receive the message. More...
     
    union {
       void *   data = nullptr
     
       int32_t   data_int
     
       value_t *   data_value
     
    }; 
     

    Detailed Description

    Message data.

    Fill in the struct fields and then use Message::Send() to send it out to listeners.

    Member Enumeration Documentation

    ◆ Type

    Enumerator
    NONE 
    PING 
    MOVE_PICK_UP 
    OPEN 
    CLOSE 
    LOCK 
    UNLOCK 
    TOGGLE 
    KILL 
    TRIGGER 
    START 
    STOP 
    ACTIVATE 
    ACTIVATE_ONCE 
    SELECT 
    SET_PROGRESS 
    SET_ANIMATION 
    SET_FLAG_ON 
    SET_FLAG_OFF 
    LAST_MESSAGE 

    Member Function Documentation

    ◆ AllocateData() [1/3]

    template<typename T >
    static T * tram::Message::AllocateData ( )
    inlinestatic

    ◆ AllocateData() [2/3]

    template<typename T >
    static T * tram::Message::AllocateData ( const T &  data)
    inlinestatic

    ◆ AllocateData() [3/3]

    void * tram::Message::AllocateData ( size_t  ammount)
    static

    Allocates space for message data.

    This allocation is useful for storing the additional data (Message::data pointer), for messages, since all allocated space will be cleared once all messages have been dispatched. This only applies to messages that are sent without a time delay, if you're sending messages with a delay, then you'll need to allocate memory for their data yourself.

    Note
    Remember to only use POD data types.

    ◆ Dispatch()

    void tram::Message::Dispatch ( )
    static

    Dispatches sent messsages.

    Dispatches the messages that have been sent using the Message::Send() function.

    ◆ GetLast()

    message_t tram::Message::GetLast ( )
    static

    Returns the last message_t plus one.

    Useful for iterating over all registered messages, i.e. in a while (++message < Message::GetLast()); or a similar loop.

    ◆ GetName()

    name_t tram::Message::GetName ( message_t  type)
    static

    Gets a nessage type name.

    ◆ GetType()

    message_t tram::Message::GetType ( name_t  name)
    static

    Finds a message type from a name.

    ◆ Register()

    message_t tram::Message::Register ( const char *  name)
    static

    Registers a new message type.

    Returns
    Unique message type number.

    ◆ Send() [1/2]

    void tram::Message::Send ( const Message message)
    static

    Sends a message.

    Message will be delivered to the Entity with the ID number specified in the Message::receiver field, by calling its Entity::MessageHandler() method.

    ◆ Send() [2/2]

    void tram::Message::Send ( const Message message,
    float  delay 
    )
    static

    Semds a message into the future.

    Same as Message::Send(), but the actual sending will be delayed until specified ammount of ticks have passed.

    Parameters
    messageMessage to be sent.
    whenHow many ticks need to pass until the message will be sent out, i.e. if you want to send a message out in 1 secons, set this parameter to 60.

    ◆ SetInterceptCallback()

    void tram::Message::SetInterceptCallback ( void(const Message &)  )
    static

    Member Data Documentation

    ◆ 

    union { ... } tram::Message::@40

    ◆ data

    tram::Message::data = nullptr

    Pointer to arbitrary data.

    Can be set to a nullptr. Some message types have specific data, e.g. structs or other types that they need their data pointers to be pointing to. For your own message types, you can use this pointer for whatever purpose you want. If uncertain, set this to a nullptr.

    ◆ data_int

    tram::Message::data_int

    Arbitrary data integer.

    ◆ data_value

    tram::Message::data_value

    ◆ receiver

    tram::Message::receiver

    ID of the Entity that will receive the message.

    Set to the ID of an Entity.

    ◆ sender

    tram::Message::sender

    ID of the Entity that sent the message.

    Either set to the ID of an Entity, or can be set to zero.

    ◆ type

    tram::Message::type

    Type of the message.


    The documentation for this struct was generated from the following files:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/message.h
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/message.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_navmesh_node-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::NavmeshNode Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_navmesh_node.html ================================================ Tramway SDK: tram::NavmeshNode Struct Reference
    Tramway SDK v0.1.1
    tram::NavmeshNode Struct Reference

    #include <navmesh.h>

    Public Attributes

    node_id_t next
     
    node_id_t prev
     
    node_id_t left
     
    node_id_t right
     
    vec3 position
     

    Member Data Documentation

    ◆ left

    node_id_t tram::NavmeshNode::left

    ◆ next

    node_id_t tram::NavmeshNode::next

    ◆ position

    vec3 tram::NavmeshNode::position

    ◆ prev

    node_id_t tram::NavmeshNode::prev

    ◆ right

    node_id_t tram::NavmeshNode::right

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/navmesh.h
    ================================================ FILE: docs/cppapi/structtram_1_1_node-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Node Member List

    This is the complete list of members for tram::Node, including all inherited members.

    edgestram::Node
    positiontram::Node
    ================================================ FILE: docs/cppapi/structtram_1_1_node.html ================================================ Tramway SDK: tram::Node Struct Reference
    Tramway SDK v0.1.1
    tram::Node Struct Reference

    #include <graph.h>

    Public Attributes

    vec3 position
     
    std::vector< uint32_t > edges
     

    Member Data Documentation

    ◆ edges

    std::vector<uint32_t> tram::Node::edges

    ◆ position

    vec3 tram::Node::position

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/graph.h
    ================================================ FILE: docs/cppapi/structtram_1_1_octree_1_1_nearest_search-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Octree< T >::NearestSearch Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_octree_1_1_nearest_search.html ================================================ Tramway SDK: tram::Octree< T >::NearestSearch Struct Reference
    Tramway SDK v0.1.1
    tram::Octree< T >::NearestSearch Struct Reference

    #include <octree.h>

    Public Attributes

    Nodenearest [4] = {nullptr, nullptr, nullptr, nullptr}
     
    float distance [4] = {INFINITY, INFINITY, INFINITY, INFINITY}
     
    int farthest_index = 0
     
    float farthest_distance = -INFINITY
     
    vec3 point
     
    int found = 0
     

    Member Data Documentation

    ◆ distance

    template<typename T >
    float tram::Octree< T >::NearestSearch::distance[4] = {INFINITY, INFINITY, INFINITY, INFINITY}

    ◆ farthest_distance

    template<typename T >
    float tram::Octree< T >::NearestSearch::farthest_distance = -INFINITY

    ◆ farthest_index

    template<typename T >
    int tram::Octree< T >::NearestSearch::farthest_index = 0

    ◆ found

    template<typename T >
    int tram::Octree< T >::NearestSearch::found = 0

    ◆ nearest

    template<typename T >
    Node* tram::Octree< T >::NearestSearch::nearest[4] = {nullptr, nullptr, nullptr, nullptr}

    ◆ point

    template<typename T >
    vec3 tram::Octree< T >::NearestSearch::point

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/octree.h
    ================================================ FILE: docs/cppapi/structtram_1_1_octree_1_1_node-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Octree< T >::Node Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_octree_1_1_node.html ================================================ Tramway SDK: tram::Octree< T >::Node Struct Reference
    Tramway SDK v0.1.1
    tram::Octree< T >::Node Struct Reference

    #include <octree.h>

    Public Member Functions

    bool IsLeaf ()
     
    bool IsNode ()
     

    Public Attributes

    Nodeoctants [8] = {nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr}
     
    Nodeparent = nullptr
     
    vec3 mid_point
     
    float half_extent = 1.0f
     
    vec3 point
     
    data
     

    Member Function Documentation

    ◆ IsLeaf()

    template<typename T >
    bool tram::Octree< T >::Node::IsLeaf ( )
    inline

    ◆ IsNode()

    template<typename T >
    bool tram::Octree< T >::Node::IsNode ( )
    inline

    Member Data Documentation

    ◆ data

    template<typename T >
    T tram::Octree< T >::Node::data

    ◆ half_extent

    template<typename T >
    float tram::Octree< T >::Node::half_extent = 1.0f

    ◆ mid_point

    template<typename T >
    vec3 tram::Octree< T >::Node::mid_point

    ◆ octants

    template<typename T >
    Node* tram::Octree< T >::Node::octants[8] = {nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr}

    ◆ parent

    template<typename T >
    Node* tram::Octree< T >::Node::parent = nullptr

    ◆ point

    template<typename T >
    vec3 tram::Octree< T >::Node::point

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/octree.h
    ================================================ FILE: docs/cppapi/structtram_1_1_particle_component_1_1_particle-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::ParticleComponent::Particle Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_particle_component_1_1_particle.html ================================================ Tramway SDK: tram::ParticleComponent::Particle Struct Reference
    Tramway SDK v0.1.1
    tram::ParticleComponent::Particle Struct Reference

    #include <particle.h>

    Public Attributes

    vec3 coords
     
    vec3 velocity
     
    uint32_t age
     

    Member Data Documentation

    ◆ age

    uint32_t tram::ParticleComponent::Particle::age

    ◆ coords

    vec3 tram::ParticleComponent::Particle::coords

    ◆ velocity

    vec3 tram::ParticleComponent::Particle::velocity

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/particle.h
    ================================================ FILE: docs/cppapi/structtram_1_1_path_edge_info-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::PathEdgeInfo Member List

    This is the complete list of members for tram::PathEdgeInfo, including all inherited members.

    typetram::PathEdgeInfo
    ================================================ FILE: docs/cppapi/structtram_1_1_path_edge_info.html ================================================ Tramway SDK: tram::PathEdgeInfo Struct Reference
    Tramway SDK v0.1.1
    tram::PathEdgeInfo Struct Reference

    #include <path.h>

    Public Attributes

    PathType type
     

    Member Data Documentation

    ◆ type

    PathType tram::PathEdgeInfo::type

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/path.h
    ================================================ FILE: docs/cppapi/structtram_1_1_path_node-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::PathNode Member List

    This is the complete list of members for tram::PathNode, including all inherited members.

    lefttram::PathNode
    nexttram::PathNode
    positiontram::PathNode
    prevtram::PathNode
    righttram::PathNode
    ================================================ FILE: docs/cppapi/structtram_1_1_path_node.html ================================================ Tramway SDK: tram::PathNode Struct Reference
    Tramway SDK
    tram::PathNode Struct Reference

    #include <path.h>

    Public Attributes

    node_id_t next
     
    node_id_t prev
     
    node_id_t left
     
    node_id_t right
     
    vec3 position
     

    Member Data Documentation

    ◆ left

    node_id_t tram::PathNode::left

    ◆ next

    node_id_t tram::PathNode::next

    ◆ position

    vec3 tram::PathNode::position

    ◆ prev

    node_id_t tram::PathNode::prev

    ◆ right

    node_id_t tram::PathNode::right

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/path.h
    ================================================ FILE: docs/cppapi/structtram_1_1_physics_1_1_a_p_i_1_1_collision_shape_transform-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Physics::API::CollisionShapeTransform Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_physics_1_1_a_p_i_1_1_collision_shape_transform.html ================================================ Tramway SDK: tram::Physics::API::CollisionShapeTransform Struct Reference
    Tramway SDK v0.1.1
    tram::Physics::API::CollisionShapeTransform Struct Reference

    #include <api.h>

    Public Attributes

    CollisionShape shape
     
    vec3 position
     
    quat rotation
     

    Member Data Documentation

    ◆ position

    vec3 tram::Physics::API::CollisionShapeTransform::position

    ◆ rotation

    quat tram::Physics::API::CollisionShapeTransform::rotation

    ◆ shape

    CollisionShape tram::Physics::API::CollisionShapeTransform::shape

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/api.h
    ================================================ FILE: docs/cppapi/structtram_1_1_physics_1_1_a_p_i_1_1_object_collision-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Physics::API::ObjectCollision Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_physics_1_1_a_p_i_1_1_object_collision.html ================================================ Tramway SDK: tram::Physics::API::ObjectCollision Struct Reference
    Tramway SDK v0.1.1
    tram::Physics::API::ObjectCollision Struct Reference

    #include <api.h>

    Public Attributes

    vec3 point
     
    vec3 normal
     
    float distance
     

    Member Data Documentation

    ◆ distance

    float tram::Physics::API::ObjectCollision::distance

    ◆ normal

    vec3 tram::Physics::API::ObjectCollision::normal

    ◆ point

    vec3 tram::Physics::API::ObjectCollision::point

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/api.h
    ================================================ FILE: docs/cppapi/structtram_1_1_physics_1_1_a_p_i_1_1_rigidbody_metadata-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Physics::API::RigidbodyMetadata Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_physics_1_1_a_p_i_1_1_rigidbody_metadata.html ================================================ Tramway SDK: tram::Physics::API::RigidbodyMetadata Struct Reference
    Tramway SDK v0.1.1
    tram::Physics::API::RigidbodyMetadata Struct Reference

    Public Attributes

    uint32_t collision_mask = -1
     
    uint32_t collision_group = -1
     
    uint32_t collision_flags = 0
     
    CallbackMotionStatemotion_state = nullptr
     
    MetadataType type
     
    col_callback collision_callback = nullptr
     
    void * collision_data = nullptr
     

    Member Data Documentation

    ◆ collision_callback

    col_callback tram::Physics::API::RigidbodyMetadata::collision_callback = nullptr

    ◆ collision_data

    void* tram::Physics::API::RigidbodyMetadata::collision_data = nullptr

    ◆ collision_flags

    uint32_t tram::Physics::API::RigidbodyMetadata::collision_flags = 0

    ◆ collision_group

    uint32_t tram::Physics::API::RigidbodyMetadata::collision_group = -1

    ◆ collision_mask

    uint32_t tram::Physics::API::RigidbodyMetadata::collision_mask = -1

    ◆ motion_state

    CallbackMotionState* tram::Physics::API::RigidbodyMetadata::motion_state = nullptr

    ◆ type

    MetadataType tram::Physics::API::RigidbodyMetadata::type

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/bullet/bullet.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_physics_1_1_a_p_i_1_1_shapecast_callback-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Physics::API::ShapecastCallback Member List

    This is the complete list of members for tram::Physics::API::ShapecastCallback, including all inherited members.

    addSingleResult(btCollisionWorld::LocalConvexResult &convexResult, bool normalInWorldSpace)tram::Physics::API::ShapecastCallbackinline
    collision_masktram::Physics::API::ShapecastCallback
    collisionstram::Physics::API::ShapecastCallback
    ShapecastCallback(std::vector< std::pair< ObjectCollision, void * > > &collisions, uint32_t collision_mask)tram::Physics::API::ShapecastCallbackinline
    ================================================ FILE: docs/cppapi/structtram_1_1_physics_1_1_a_p_i_1_1_shapecast_callback.html ================================================ Tramway SDK: tram::Physics::API::ShapecastCallback Struct Reference
    Tramway SDK v0.1.1
    tram::Physics::API::ShapecastCallback Struct Reference
    Inheritance diagram for tram::Physics::API::ShapecastCallback:

    Public Member Functions

     ShapecastCallback (std::vector< std::pair< ObjectCollision, void * > > &collisions, uint32_t collision_mask)
     
    btScalar addSingleResult (btCollisionWorld::LocalConvexResult &convexResult, bool normalInWorldSpace)
     

    Public Attributes

    std::vector< std::pair< ObjectCollision, void * > > & collisions
     
    uint32_t collision_mask
     

    Constructor & Destructor Documentation

    ◆ ShapecastCallback()

    tram::Physics::API::ShapecastCallback::ShapecastCallback ( std::vector< std::pair< ObjectCollision, void * > > &  collisions,
    uint32_t  collision_mask 
    )
    inline

    Member Function Documentation

    ◆ addSingleResult()

    btScalar tram::Physics::API::ShapecastCallback::addSingleResult ( btCollisionWorld::LocalConvexResult &  convexResult,
    bool  normalInWorldSpace 
    )
    inline

    Member Data Documentation

    ◆ collision_mask

    uint32_t tram::Physics::API::ShapecastCallback::collision_mask

    ◆ collisions

    std::vector<std::pair<ObjectCollision, void*> >& tram::Physics::API::ShapecastCallback::collisions

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/bullet/bullet.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_physics_1_1_bullet_1_1_shapecast_callback-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Physics::Bullet::ShapecastCallback Member List

    This is the complete list of members for tram::Physics::Bullet::ShapecastCallback, including all inherited members.

    addSingleResult(btCollisionWorld::LocalConvexResult &convexResult, bool normalInWorldSpace)tram::Physics::Bullet::ShapecastCallbackinline
    collision_masktram::Physics::Bullet::ShapecastCallback
    collisionstram::Physics::Bullet::ShapecastCallback
    ShapecastCallback(std::vector< Physics::Collision > &collisions, uint32_t collision_mask)tram::Physics::Bullet::ShapecastCallbackinline
    ================================================ FILE: docs/cppapi/structtram_1_1_physics_1_1_bullet_1_1_shapecast_callback.html ================================================ Tramway SDK: tram::Physics::Bullet::ShapecastCallback Struct Reference
    Tramway SDK
    tram::Physics::Bullet::ShapecastCallback Struct Reference
    Inheritance diagram for tram::Physics::Bullet::ShapecastCallback:

    Public Member Functions

     ShapecastCallback (std::vector< Physics::Collision > &collisions, uint32_t collision_mask)
     
    btScalar addSingleResult (btCollisionWorld::LocalConvexResult &convexResult, bool normalInWorldSpace)
     

    Public Attributes

    std::vector< Physics::Collision > & collisions
     
    uint32_t collision_mask
     

    Constructor & Destructor Documentation

    ◆ ShapecastCallback()

    tram::Physics::Bullet::ShapecastCallback::ShapecastCallback ( std::vector< Physics::Collision > &  collisions,
    uint32_t  collision_mask 
    )
    inline

    Member Function Documentation

    ◆ addSingleResult()

    btScalar tram::Physics::Bullet::ShapecastCallback::addSingleResult ( btCollisionWorld::LocalConvexResult &  convexResult,
    bool  normalInWorldSpace 
    )
    inline

    Member Data Documentation

    ◆ collision_mask

    uint32_t tram::Physics::Bullet::ShapecastCallback::collision_mask

    ◆ collisions

    std::vector<Physics::Collision>& tram::Physics::Bullet::ShapecastCallback::collisions

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/bullet/bullet.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_physics_1_1_collision-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Physics::Collision Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_physics_1_1_collision.html ================================================ Tramway SDK: tram::Physics::Collision Struct Reference
    Tramway SDK v0.1.1
    tram::Physics::Collision Struct Reference

    Physics collision data. More...

    #include <physics/physics.h>

    Public Attributes

    PhysicsComponentcollider
     Pointer to a PhysicsComponent that owns the rigidbody with which the collision happened. More...
     
    vec3 point
     Position of the collision in world space. More...
     
    vec3 normal
     Normal vector of the surface that the collision happened with. More...
     
    float distance
     Distance of the collision, i.e. More...
     

    Detailed Description

    Physics collision data.

    Used to represent a collision between two physics objects. Sometimes a function always returns a Collision struct, but it can still fail, such as the Raycast() function, which can perform a raycast that doesn't hit anything. In such a case the structs vector properties will be zeroed-out and the collider will be set to a nullptr.

    Member Data Documentation

    ◆ collider

    tram::Physics::Collision::collider

    Pointer to a PhysicsComponent that owns the rigidbody with which the collision happened.

    ◆ distance

    tram::Physics::Collision::distance

    Distance of the collision, i.e.

    how far the colliders penetrated each other.

    ◆ normal

    tram::Physics::Collision::normal

    Normal vector of the surface that the collision happened with.

    ◆ point

    tram::Physics::Collision::point

    Position of the collision in world space.


    The documentation for this struct was generated from the following files:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/physics.h
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/physics.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_physics_1_1_collision_shape-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Physics::CollisionShape Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_physics_1_1_collision_shape.html ================================================ Tramway SDK: tram::Physics::CollisionShape Struct Reference
    Tramway SDK v0.1.1
    tram::Physics::CollisionShape Struct Reference

    Shape for a collider. More...

    #include <physics/collisionshape.h>

    Static Public Member Functions

    static CollisionShape Sphere (float radius)
     Creates a sphere. More...
     
    static CollisionShape Cylinder (float radius, float height)
     Creates a cylinder. More...
     
    static CollisionShape Capsule (float radius, float height)
     Creates a capsule. More...
     
    static CollisionShape Cone (float radius, float height)
     Creates a cone. More...
     
    static CollisionShape Box (vec3 dimensions)
     Creates a box. More...
     
    static CollisionShape Hull (vec3 *points, size_t size)
     Creates a convex hull. More...
     
    static CollisionShape Mesh (CollisionTriangle *triangles, size_t size)
     Creates a triangle mesh. More...
     

    Public Attributes

    Shape type
     
    union {
       struct {
          union {
             float   radius
     
             float   radius_x
     
             float   extent_x
     
          } 
     
          union {
             float   height
     
             float   extent_y
     
          } 
     
          union {
             float   extent_z
     
             float   radius_z
     
          } 
     
       } 
     
       struct {
          vec3 *   hull_points
     
          size_t   hull_size
     
       } 
     
       struct {
          CollisionTriangle *   mesh_triangles
     
          size_t   mesh_size
     
       } 
     
    }; 
     

    Detailed Description

    Member Function Documentation

    ◆ Box()

    CollisionShape tram::Physics::CollisionShape::Box ( vec3  dimensions)
    inlinestatic

    Creates a box.

    ◆ Capsule()

    CollisionShape tram::Physics::CollisionShape::Capsule ( float  radius,
    float  height 
    )
    inlinestatic

    Creates a capsule.

    ◆ Cone()

    CollisionShape tram::Physics::CollisionShape::Cone ( float  radius,
    float  height 
    )
    inlinestatic

    Creates a cone.

    ◆ Cylinder()

    CollisionShape tram::Physics::CollisionShape::Cylinder ( float  radius,
    float  height 
    )
    inlinestatic

    Creates a cylinder.

    ◆ Hull()

    CollisionShape tram::Physics::CollisionShape::Hull ( vec3 points,
    size_t  size 
    )
    inlinestatic

    Creates a convex hull.

    Note
    Memory pointed to by the point pointer should not be freed until the CollisionShape is no longer in use.

    ◆ Mesh()

    CollisionShape tram::Physics::CollisionShape::Mesh ( CollisionTriangle triangles,
    size_t  size 
    )
    inlinestatic

    Creates a triangle mesh.

    Note
    Memory pointed to by the triangle pointer should not be freed until the CollisionShape is no longer in use.

    ◆ Sphere()

    CollisionShape tram::Physics::CollisionShape::Sphere ( float  radius)
    inlinestatic

    Creates a sphere.

    Member Data Documentation

    ◆ 

    union { ... } tram::Physics::CollisionShape::@50

    ◆ extent_x

    float tram::Physics::CollisionShape::extent_x

    ◆ extent_y

    float tram::Physics::CollisionShape::extent_y

    ◆ extent_z

    float tram::Physics::CollisionShape::extent_z

    ◆ height

    float tram::Physics::CollisionShape::height

    ◆ hull_points

    vec3* tram::Physics::CollisionShape::hull_points

    ◆ hull_size

    size_t tram::Physics::CollisionShape::hull_size

    ◆ mesh_size

    size_t tram::Physics::CollisionShape::mesh_size

    ◆ mesh_triangles

    CollisionTriangle* tram::Physics::CollisionShape::mesh_triangles

    ◆ radius

    float tram::Physics::CollisionShape::radius

    ◆ radius_x

    float tram::Physics::CollisionShape::radius_x

    ◆ radius_z

    float tram::Physics::CollisionShape::radius_z

    ◆ type

    Shape tram::Physics::CollisionShape::type

    The documentation for this struct was generated from the following file:
    ================================================ FILE: docs/cppapi/structtram_1_1_physics_1_1_collision_triangle-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Physics::CollisionTriangle Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_physics_1_1_collision_triangle.html ================================================ Tramway SDK: tram::Physics::CollisionTriangle Struct Reference
    Tramway SDK v0.1.1
    tram::Physics::CollisionTriangle Struct Reference

    #include <collisionshape.h>

    Public Attributes

    vec3 p0
     
    vec3 p1
     
    vec3 p2
     

    Member Data Documentation

    ◆ p0

    vec3 tram::Physics::CollisionTriangle::p0

    ◆ p1

    vec3 tram::Physics::CollisionTriangle::p1

    ◆ p2

    vec3 tram::Physics::CollisionTriangle::p2

    The documentation for this struct was generated from the following file:
    ================================================ FILE: docs/cppapi/structtram_1_1_physics_1_1collisionshape__t-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Physics::collisionshape_t Member List

    This is the complete list of members for tram::Physics::collisionshape_t, including all inherited members.

    bt_shapetram::Physics::collisionshape_t
    ================================================ FILE: docs/cppapi/structtram_1_1_physics_1_1collisionshape__t.html ================================================ Tramway SDK: tram::Physics::collisionshape_t Struct Reference
    Tramway SDK v0.1.1
    tram::Physics::collisionshape_t Struct Reference

    #include <physics.h>

    Public Attributes

    btCollisionShape * bt_shape
     

    Member Data Documentation

    ◆ bt_shape

    btCollisionShape* tram::Physics::collisionshape_t::bt_shape

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/physics.h
    ================================================ FILE: docs/cppapi/structtram_1_1_physics_1_1rigidbody__t-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Physics::rigidbody_t Member List

    This is the complete list of members for tram::Physics::rigidbody_t, including all inherited members.

    bt_metadatatram::Physics::rigidbody_t
    bt_rigidbodytram::Physics::rigidbody_t
    ================================================ FILE: docs/cppapi/structtram_1_1_physics_1_1rigidbody__t.html ================================================ Tramway SDK: tram::Physics::rigidbody_t Struct Reference
    Tramway SDK v0.1.1
    tram::Physics::rigidbody_t Struct Reference

    #include <physics.h>

    Public Attributes

    btRigidBody * bt_rigidbody
     
    API::RigidbodyMetadatabt_metadata
     

    Member Data Documentation

    ◆ bt_metadata

    API::RigidbodyMetadata* tram::Physics::rigidbody_t::bt_metadata

    ◆ bt_rigidbody

    btRigidBody* tram::Physics::rigidbody_t::bt_rigidbody

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/physics.h
    ================================================ FILE: docs/cppapi/structtram_1_1_physics_1_1trigger__t-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Physics::trigger_t Member List

    This is the complete list of members for tram::Physics::trigger_t, including all inherited members.

    bt_collisionshapetram::Physics::trigger_t
    bt_metadatatram::Physics::trigger_t
    ================================================ FILE: docs/cppapi/structtram_1_1_physics_1_1trigger__t.html ================================================ Tramway SDK: tram::Physics::trigger_t Struct Reference
    Tramway SDK v0.1.1
    tram::Physics::trigger_t Struct Reference

    #include <physics.h>

    Public Attributes

    btCollisionObject * bt_collisionshape
     
    API::RigidbodyMetadatabt_metadata
     

    Member Data Documentation

    ◆ bt_collisionshape

    btCollisionObject* tram::Physics::trigger_t::bt_collisionshape

    ◆ bt_metadata

    API::RigidbodyMetadata* tram::Physics::trigger_t::bt_metadata

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/physics/physics.h
    ================================================ FILE: docs/cppapi/structtram_1_1_physics_constraint-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::PhysicsConstraint Member List

    This is the complete list of members for tram::PhysicsConstraint, including all inherited members.

    constrainttram::PhysicsConstraint
    othertram::PhysicsConstraint
    ================================================ FILE: docs/cppapi/structtram_1_1_physics_constraint.html ================================================ Tramway SDK: tram::PhysicsConstraint Struct Reference
    Tramway SDK
    tram::PhysicsConstraint Struct Reference

    #include <physics.h>

    Public Attributes

    PhysicsComponentother
     
    btTypedConstraint * constraint
     

    Member Data Documentation

    ◆ constraint

    btTypedConstraint* tram::PhysicsConstraint::constraint

    ◆ other

    PhysicsComponent* tram::PhysicsConstraint::other

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/physics.h
    ================================================ FILE: docs/cppapi/structtram_1_1_pool_1_1iterator-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Pool< T >::iterator Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_pool_1_1iterator.html ================================================ Tramway SDK: tram::Pool< T >::iterator Struct Reference
    Tramway SDK v0.1.1
    tram::Pool< T >::iterator Struct Reference

    #include <pool.h>

    Public Member Functions

     iterator (T *ptr)
     
    T & operator* () const
     
    T * operator-> ()
     
    iteratoroperator++ ()
     
    iterator operator++ (int)
     

    Public Attributes

    T * ptr
     

    Friends

    bool operator== (const iterator &a, const iterator &b)
     
    bool operator!= (const iterator &a, const iterator &b)
     

    Constructor & Destructor Documentation

    ◆ iterator()

    template<typename T >
    tram::Pool< T >::iterator::iterator ( T *  ptr)
    inline

    Member Function Documentation

    ◆ operator*()

    template<typename T >
    T & tram::Pool< T >::iterator::operator* ( ) const
    inline

    ◆ operator++() [1/2]

    template<typename T >
    iterator & tram::Pool< T >::iterator::operator++ ( )
    inline

    ◆ operator++() [2/2]

    template<typename T >
    iterator tram::Pool< T >::iterator::operator++ ( int  )
    inline

    ◆ operator->()

    template<typename T >
    T * tram::Pool< T >::iterator::operator-> ( )
    inline

    Friends And Related Function Documentation

    ◆ operator!=

    template<typename T >
    bool operator!= ( const iterator a,
    const iterator b 
    )
    friend

    ◆ operator==

    template<typename T >
    bool operator== ( const iterator a,
    const iterator b 
    )
    friend

    Member Data Documentation

    ◆ ptr

    template<typename T >
    T* tram::Pool< T >::iterator::ptr

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/pool.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_a_b_b_1_1_a_a_b_b_leaf-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::AABB::AABBLeaf Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_a_b_b_1_1_a_a_b_b_leaf.html ================================================ Tramway SDK: tram::Render::AABB::AABBLeaf Struct Reference
    Tramway SDK v0.1.1
    tram::Render::AABB::AABBLeaf Struct Reference

    Public Attributes

    ReferenceType ref_type
     
    AABBTree::Nodeleaf
     
    union {
       RenderComponent *   rendercomponent
     
    }; 
     

    Member Data Documentation

    ◆ 

    union { ... } tram::Render::AABB::AABBLeaf::@85

    ◆ leaf

    AABBTree::Node* tram::Render::AABB::AABBLeaf::leaf

    ◆ ref_type

    ReferenceType tram::Render::AABB::AABBLeaf::ref_type

    ◆ rendercomponent

    RenderComponent* tram::Render::AABB::AABBLeaf::rendercomponent

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/scene.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_a_b_b_1_1_query_response-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::AABB::QueryResponse Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_a_b_b_1_1_query_response.html ================================================ Tramway SDK: tram::Render::AABB::QueryResponse Struct Reference
    Tramway SDK v0.1.1
    tram::Render::AABB::QueryResponse Struct Reference

    #include <scene.h>

    Public Attributes

    ReferenceType type
     
    void * data
     
    vec3 intersection
     
    AABBTriangle triangle
     

    Member Data Documentation

    ◆ data

    void* tram::Render::AABB::QueryResponse::data

    ◆ intersection

    vec3 tram::Render::AABB::QueryResponse::intersection

    ◆ triangle

    AABBTriangle tram::Render::AABB::QueryResponse::triangle

    ◆ type

    ReferenceType tram::Render::AABB::QueryResponse::type

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/scene.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_a_b_b_triangle-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::AABBTriangle Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_a_b_b_triangle.html ================================================ Tramway SDK: tram::Render::AABBTriangle Struct Reference
    Tramway SDK v0.1.1
    tram::Render::AABBTriangle Struct Reference

    #include <model.h>

    Public Attributes

    vec3 point1
     
    vec3 point2
     
    vec3 point3
     
    vec3 normal
     
    uint32_t material
     

    Member Data Documentation

    ◆ material

    uint32_t tram::Render::AABBTriangle::material

    ◆ normal

    vec3 tram::Render::AABBTriangle::normal

    ◆ point1

    vec3 tram::Render::AABBTriangle::point1

    ◆ point2

    vec3 tram::Render::AABBTriangle::point2

    ◆ point3

    vec3 tram::Render::AABBTriangle::point3

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/model.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_clip_point-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::API::ClipPoint Member List

    This is the complete list of members for tram::Render::API::ClipPoint, including all inherited members.

    barycentrictram::Render::API::ClipPoint
    coordinatetram::Render::API::ClipPoint
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_clip_point.html ================================================ Tramway SDK: tram::Render::API::ClipPoint Struct Reference
    Tramway SDK v0.1.1
    tram::Render::API::ClipPoint Struct Reference

    Public Attributes

    vec4 coordinate
     
    vec3 barycentric
     

    Member Data Documentation

    ◆ barycentric

    vec3 tram::Render::API::ClipPoint::barycentric

    ◆ coordinate

    vec4 tram::Render::API::ClipPoint::coordinate

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/software/software.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_clip_triangle-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::API::ClipTriangle Member List

    This is the complete list of members for tram::Render::API::ClipTriangle, including all inherited members.

    pointstram::Render::API::ClipTriangle
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_clip_triangle.html ================================================ Tramway SDK: tram::Render::API::ClipTriangle Struct Reference
    Tramway SDK v0.1.1
    tram::Render::API::ClipTriangle Struct Reference

    Public Attributes

    ClipPoint points [3]
     

    Member Data Documentation

    ◆ points

    ClipPoint tram::Render::API::ClipTriangle::points[3]

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/software/software.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_color_vertex-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::API::ColorVertex Member List

    This is the complete list of members for tram::Render::API::ColorVertex, including all inherited members.

    coltram::Render::API::ColorVertex
    postram::Render::API::ColorVertex
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_color_vertex.html ================================================ Tramway SDK: tram::Render::API::ColorVertex Struct Reference
    Tramway SDK v0.1.1
    tram::Render::API::ColorVertex Struct Reference

    Public Attributes

    vec3 pos
     
    vec3 col
     

    Member Data Documentation

    ◆ col

    vec3 tram::Render::API::ColorVertex::col

    ◆ pos

    vec3 tram::Render::API::ColorVertex::pos

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/software/software.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::API::D3DDrawListEntry Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_d3_d_draw_list_entry.html ================================================ Tramway SDK: tram::Render::API::D3DDrawListEntry Struct Reference
    Tramway SDK v0.1.1
    tram::Render::API::D3DDrawListEntry Struct Reference

    #include <direct3d.h>

    Public Attributes

    uint32_t flags = 0
     
    Posepose = nullptr
     
    mat4 matrix = mat4(1.0f)
     
    uint32_t lights [4] = {0}
     
    IDirect3DVertexBuffer9 * vertex_buffer = nullptr
     
    IDirect3DIndexBuffer9 * index_buffer = nullptr
     
    uint32_t vertex_count = 0
     
    uint32_t index_length = 0
     
    uint32_t index_offset = 0
     
    uint32_t fvf = 0
     
    uint32_t layer = 0
     
    IDirect3DTexture9 * lightmap = nullptr
     
    IDirect3DTexture9 * texture = nullptr
     
    vec4 color = {1.0f, 1.0f, 1.0f, 1.0f}
     
    float specular_weight = 0.0f
     
    float specular_exponent = 1.0f
     
    float specular_transparency = 1.0f
     

    Member Data Documentation

    ◆ color

    vec4 tram::Render::API::D3DDrawListEntry::color = {1.0f, 1.0f, 1.0f, 1.0f}

    ◆ flags

    uint32_t tram::Render::API::D3DDrawListEntry::flags = 0

    ◆ fvf

    uint32_t tram::Render::API::D3DDrawListEntry::fvf = 0

    ◆ index_buffer

    IDirect3DIndexBuffer9* tram::Render::API::D3DDrawListEntry::index_buffer = nullptr

    ◆ index_length

    uint32_t tram::Render::API::D3DDrawListEntry::index_length = 0

    ◆ index_offset

    uint32_t tram::Render::API::D3DDrawListEntry::index_offset = 0

    ◆ layer

    uint32_t tram::Render::API::D3DDrawListEntry::layer = 0

    ◆ lightmap

    IDirect3DTexture9* tram::Render::API::D3DDrawListEntry::lightmap = nullptr

    ◆ lights

    uint32_t tram::Render::API::D3DDrawListEntry::lights[4] = {0}

    ◆ matrix

    mat4 tram::Render::API::D3DDrawListEntry::matrix = mat4(1.0f)

    ◆ pose

    Pose* tram::Render::API::D3DDrawListEntry::pose = nullptr

    ◆ specular_exponent

    float tram::Render::API::D3DDrawListEntry::specular_exponent = 1.0f

    ◆ specular_transparency

    float tram::Render::API::D3DDrawListEntry::specular_transparency = 1.0f

    ◆ specular_weight

    float tram::Render::API::D3DDrawListEntry::specular_weight = 0.0f

    ◆ texture

    IDirect3DTexture9* tram::Render::API::D3DDrawListEntry::texture = nullptr

    ◆ vertex_buffer

    IDirect3DVertexBuffer9* tram::Render::API::D3DDrawListEntry::vertex_buffer = nullptr

    ◆ vertex_count

    uint32_t tram::Render::API::D3DDrawListEntry::vertex_count = 0

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/direct3d/direct3d.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_d3_d_light-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::API::D3DLight Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_d3_d_light.html ================================================ Tramway SDK: tram::Render::API::D3DLight Struct Reference
    Tramway SDK v0.1.1
    tram::Render::API::D3DLight Struct Reference

    #include <direct3d.h>

    Public Attributes

    vec3 location = {0.0f, 0.0f, 0.0f}
     
    vec3 color = {0.0f, 0.0f, 0.0f}
     
    float distance = 0.0f
     
    vec3 direction = {0.0f, 0.0f, -1.0f}
     
    float exponent = 0.0f
     

    Member Data Documentation

    ◆ color

    vec3 tram::Render::API::D3DLight::color = {0.0f, 0.0f, 0.0f}

    ◆ direction

    vec3 tram::Render::API::D3DLight::direction = {0.0f, 0.0f, -1.0f}

    ◆ distance

    float tram::Render::API::D3DLight::distance = 0.0f

    ◆ exponent

    float tram::Render::API::D3DLight::exponent = 0.0f

    ◆ location

    vec3 tram::Render::API::D3DLight::location = {0.0f, 0.0f, 0.0f}

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/direct3d/direct3d.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_draw_list_entry-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Render::API::DrawListEntry Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_draw_list_entry.html ================================================ Tramway SDK: tram::Render::API::DrawListEntry Struct Reference
    Tramway SDK
    tram::Render::API::DrawListEntry Struct Reference

    #include <renderer.h>

    Public Member Functions

     DrawListEntry ()
     
    uint64_t CalcSortKey (const glm::vec3 &cameraPosition)
     Assembles a key for sorting. More...
     

    Public Attributes

    uint32_t flags = 0
     
    Posepose = nullptr
     
    mat4 matrix = mat4(1.0f)
     
    uint32_t lights [4] = {0}
     
    uint32_t layer = 0
     
    uint32_t lightmap = 0
     
    uint32_t vao = 0
     
    uint32_t eboLen = 0
     
    uint32_t eboOff = 0
     
    uint32_t shader = 0
     
    uint32_t texCount = 0
     
    uint32_t textures [15] = {0}
     
    vec4 colors [15]
     
    float specular_weights [15]
     
    float specular_powers [15]
     
    char padding [4]
     

    Constructor & Destructor Documentation

    ◆ DrawListEntry()

    tram::Render::API::DrawListEntry::DrawListEntry ( )
    inline

    Member Function Documentation

    ◆ CalcSortKey()

    uint64_t tram::Render::API::DrawListEntry::CalcSortKey ( const glm::vec3 &  cameraPosition)
    inline

    Assembles a key for sorting.

    Member Data Documentation

    ◆ colors

    vec4 tram::Render::API::DrawListEntry::colors[15]

    ◆ eboLen

    uint32_t tram::Render::API::DrawListEntry::eboLen = 0

    ◆ eboOff

    uint32_t tram::Render::API::DrawListEntry::eboOff = 0

    ◆ flags

    uint32_t tram::Render::API::DrawListEntry::flags = 0

    ◆ layer

    uint32_t tram::Render::API::DrawListEntry::layer = 0

    ◆ lightmap

    uint32_t tram::Render::API::DrawListEntry::lightmap = 0

    ◆ lights

    uint32_t tram::Render::API::DrawListEntry::lights[4] = {0}

    ◆ matrix

    mat4 tram::Render::API::DrawListEntry::matrix = mat4(1.0f)

    ◆ padding

    char tram::Render::API::DrawListEntry::padding[4]

    ◆ pose

    Pose* tram::Render::API::DrawListEntry::pose = nullptr

    ◆ shader

    uint32_t tram::Render::API::DrawListEntry::shader = 0

    ◆ specular_powers

    float tram::Render::API::DrawListEntry::specular_powers[15]

    ◆ specular_weights

    float tram::Render::API::DrawListEntry::specular_weights[15]

    ◆ texCount

    uint32_t tram::Render::API::DrawListEntry::texCount = 0

    ◆ textures

    uint32_t tram::Render::API::DrawListEntry::textures[15] = {0}

    ◆ vao

    uint32_t tram::Render::API::DrawListEntry::vao = 0

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/renderer.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::API::DynamicVertex Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_dynamic_vertex.html ================================================ Tramway SDK: tram::Render::API::DynamicVertex Struct Reference
    Tramway SDK v0.1.1
    tram::Render::API::DynamicVertex Struct Reference

    Public Attributes

    float pos_x
     
    float pos_y
     
    float pos_z
     
    float wgt_1
     
    float wgt_2
     
    float wgt_3
     
    DWORD wgt_i
     
    float nrm_x
     
    float nrm_y
     
    float nrm_z
     
    float tex_x
     
    float tex_y
     
    vec3 pos
     
    vec3 nrm
     
    vec2 tex
     
    vec4 wgt
     
    ivec4 ind
     

    Member Data Documentation

    ◆ ind

    ivec4 tram::Render::API::DynamicVertex::ind

    ◆ nrm

    vec3 tram::Render::API::DynamicVertex::nrm

    ◆ nrm_x

    float tram::Render::API::DynamicVertex::nrm_x

    ◆ nrm_y

    float tram::Render::API::DynamicVertex::nrm_y

    ◆ nrm_z

    float tram::Render::API::DynamicVertex::nrm_z

    ◆ pos

    vec3 tram::Render::API::DynamicVertex::pos

    ◆ pos_x

    float tram::Render::API::DynamicVertex::pos_x

    ◆ pos_y

    float tram::Render::API::DynamicVertex::pos_y

    ◆ pos_z

    float tram::Render::API::DynamicVertex::pos_z

    ◆ tex

    vec2 tram::Render::API::DynamicVertex::tex

    ◆ tex_x

    float tram::Render::API::DynamicVertex::tex_x

    ◆ tex_y

    float tram::Render::API::DynamicVertex::tex_y

    ◆ wgt

    vec4 tram::Render::API::DynamicVertex::wgt

    ◆ wgt_1

    float tram::Render::API::DynamicVertex::wgt_1

    ◆ wgt_2

    float tram::Render::API::DynamicVertex::wgt_2

    ◆ wgt_3

    float tram::Render::API::DynamicVertex::wgt_3

    ◆ wgt_i

    DWORD tram::Render::API::DynamicVertex::wgt_i

    The documentation for this struct was generated from the following files:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/direct3d/renderer.cpp
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/software/software.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_f_f_p_helper-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::API::FFPHelper Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_f_f_p_helper.html ================================================ Tramway SDK: tram::Render::API::FFPHelper Struct Reference
    Tramway SDK v0.1.1
    tram::Render::API::FFPHelper Struct Reference

    #include <software.h>

    Public Attributes

    int position = -1
     
    int normal = -1
     
    int color = -1
     
    int texture = -1
     
    int lightmap = -1
     
    int bone_index = -1
     
    int bone_weight = -1
     

    Member Data Documentation

    ◆ bone_index

    int tram::Render::API::FFPHelper::bone_index = -1

    ◆ bone_weight

    int tram::Render::API::FFPHelper::bone_weight = -1

    ◆ color

    int tram::Render::API::FFPHelper::color = -1

    ◆ lightmap

    int tram::Render::API::FFPHelper::lightmap = -1

    ◆ normal

    int tram::Render::API::FFPHelper::normal = -1

    ◆ position

    int tram::Render::API::FFPHelper::position = -1

    ◆ texture

    int tram::Render::API::FFPHelper::texture = -1

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/software/software.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_f_v_f_helper-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::API::FVFHelper Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_f_v_f_helper.html ================================================ Tramway SDK: tram::Render::API::FVFHelper Struct Reference
    Tramway SDK v0.1.1
    tram::Render::API::FVFHelper Struct Reference

    Public Attributes

    int position = -1
     
    int normal = -1
     
    int color = -1
     
    int texture = -1
     
    int lightmap = -1
     
    int bone_index = -1
     
    int bone_weight = -1
     
    DWORD fvf = 0
     

    Member Data Documentation

    ◆ bone_index

    int tram::Render::API::FVFHelper::bone_index = -1

    ◆ bone_weight

    int tram::Render::API::FVFHelper::bone_weight = -1

    ◆ color

    int tram::Render::API::FVFHelper::color = -1

    ◆ fvf

    DWORD tram::Render::API::FVFHelper::fvf = 0

    ◆ lightmap

    int tram::Render::API::FVFHelper::lightmap = -1

    ◆ normal

    int tram::Render::API::FVFHelper::normal = -1

    ◆ position

    int tram::Render::API::FVFHelper::position = -1

    ◆ texture

    int tram::Render::API::FVFHelper::texture = -1

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/direct3d/renderer.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_fragment_shader-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Render::API::FragmentShader Member List

    This is the complete list of members for tram::Render::API::FragmentShader, including all inherited members.

    compiled_shadertram::Render::API::FragmentShader
    nametram::Render::API::FragmentShader
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_fragment_shader.html ================================================ Tramway SDK: tram::Render::API::FragmentShader Struct Reference
    Tramway SDK
    tram::Render::API::FragmentShader Struct Reference

    Public Attributes

    name_t name
     
    uint32_t compiled_shader
     

    Member Data Documentation

    ◆ compiled_shader

    uint32_t tram::Render::API::FragmentShader::compiled_shader

    ◆ name

    name_t tram::Render::API::FragmentShader::name

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/shader.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::API::GLDrawListEntry Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_g_l_draw_list_entry.html ================================================ Tramway SDK: tram::Render::API::GLDrawListEntry Struct Reference
    Tramway SDK v0.1.1
    tram::Render::API::GLDrawListEntry Struct Reference

    #include <drawlist.h>

    Public Member Functions

     GLDrawListEntry ()
     
    uint64_t CalcSortKey (const vec3 &cameraPosition)
     Assembles a key for sorting. More...
     

    Public Attributes

    uint32_t flags = 0
     
    Posepose = nullptr
     
    mat4 matrix = mat4(1.0f)
     
    uint32_t lights [4] = {0}
     
    uint32_t layer = 0
     
    uint32_t lightmap = 0
     
    uint32_t environmentmap = 0
     
    uint32_t vao = 0
     
    uint32_t eboLen = 0
     
    uint32_t eboOff = 0
     
    uint32_t shader = 0
     
    uint32_t texCount = 0
     
    vec4 colors [15]
     
    vec4 texture_transforms [15]
     
    GLMaterialmaterials [15]
     
    vec3 aabb_min = {0.0f, 0.0f, 0.0f}
     
    vec3 aabb_max = {0.0f, 0.0f, 0.0f}
     
    float fade_near = 0.0f
     
    float fade_far = INFINITY
     
    sphericalharmonic_t harmonic
     

    Constructor & Destructor Documentation

    ◆ GLDrawListEntry()

    tram::Render::API::GLDrawListEntry::GLDrawListEntry ( )
    inline

    Member Function Documentation

    ◆ CalcSortKey()

    uint64_t tram::Render::API::GLDrawListEntry::CalcSortKey ( const vec3 cameraPosition)
    inline

    Assembles a key for sorting.

    Member Data Documentation

    ◆ aabb_max

    vec3 tram::Render::API::GLDrawListEntry::aabb_max = {0.0f, 0.0f, 0.0f}

    ◆ aabb_min

    vec3 tram::Render::API::GLDrawListEntry::aabb_min = {0.0f, 0.0f, 0.0f}

    ◆ colors

    vec4 tram::Render::API::GLDrawListEntry::colors[15]

    ◆ eboLen

    uint32_t tram::Render::API::GLDrawListEntry::eboLen = 0

    ◆ eboOff

    uint32_t tram::Render::API::GLDrawListEntry::eboOff = 0

    ◆ environmentmap

    uint32_t tram::Render::API::GLDrawListEntry::environmentmap = 0

    ◆ fade_far

    float tram::Render::API::GLDrawListEntry::fade_far = INFINITY

    ◆ fade_near

    float tram::Render::API::GLDrawListEntry::fade_near = 0.0f

    ◆ flags

    uint32_t tram::Render::API::GLDrawListEntry::flags = 0

    ◆ harmonic

    sphericalharmonic_t tram::Render::API::GLDrawListEntry::harmonic

    ◆ layer

    uint32_t tram::Render::API::GLDrawListEntry::layer = 0

    ◆ lightmap

    uint32_t tram::Render::API::GLDrawListEntry::lightmap = 0

    ◆ lights

    uint32_t tram::Render::API::GLDrawListEntry::lights[4] = {0}

    ◆ materials

    GLMaterial* tram::Render::API::GLDrawListEntry::materials[15]

    ◆ matrix

    mat4 tram::Render::API::GLDrawListEntry::matrix = mat4(1.0f)

    ◆ pose

    Pose* tram::Render::API::GLDrawListEntry::pose = nullptr

    ◆ shader

    uint32_t tram::Render::API::GLDrawListEntry::shader = 0

    ◆ texCount

    uint32_t tram::Render::API::GLDrawListEntry::texCount = 0

    ◆ texture_transforms

    vec4 tram::Render::API::GLDrawListEntry::texture_transforms[15]

    ◆ vao

    uint32_t tram::Render::API::GLDrawListEntry::vao = 0

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/drawlist.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_g_l_light-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::API::GLLight Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_g_l_light.html ================================================ Tramway SDK: tram::Render::API::GLLight Struct Reference
    Tramway SDK v0.1.1
    tram::Render::API::GLLight Struct Reference

    #include <light.h>

    Public Attributes

    vec3 location = {0.0f, 0.0f, 0.0f}
     
    float padding
     
    vec3 color = {0.0f, 0.0f, 0.0f}
     
    float distance = 0.0f
     
    vec3 direction = {0.0f, 0.0f, -1.0f}
     
    float exponent = 0.0f
     
    float padding2 [4]
     

    Member Data Documentation

    ◆ color

    vec3 tram::Render::API::GLLight::color = {0.0f, 0.0f, 0.0f}

    ◆ direction

    vec3 tram::Render::API::GLLight::direction = {0.0f, 0.0f, -1.0f}

    ◆ distance

    float tram::Render::API::GLLight::distance = 0.0f

    ◆ exponent

    float tram::Render::API::GLLight::exponent = 0.0f

    ◆ location

    vec3 tram::Render::API::GLLight::location = {0.0f, 0.0f, 0.0f}

    ◆ padding

    float tram::Render::API::GLLight::padding

    ◆ padding2

    float tram::Render::API::GLLight::padding2[4]

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/light.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_g_l_material-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::API::GLMaterial Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_g_l_material.html ================================================ Tramway SDK: tram::Render::API::GLMaterial Struct Reference
    Tramway SDK v0.1.1
    tram::Render::API::GLMaterial Struct Reference

    #include <material.h>

    Public Attributes

    uint32_t gl_texture = 0
     
    float specular_weight = 0.0f
     
    float specular_exponent = 1.0f
     
    float specular_transparency = 0.0f
     
    float reflectivity = 0.0f
     
    vec4 color = {1.0f, 1.0f, 1.0f, 1.0f}
     

    Member Data Documentation

    ◆ color

    vec4 tram::Render::API::GLMaterial::color = {1.0f, 1.0f, 1.0f, 1.0f}

    ◆ gl_texture

    uint32_t tram::Render::API::GLMaterial::gl_texture = 0

    ◆ reflectivity

    float tram::Render::API::GLMaterial::reflectivity = 0.0f

    ◆ specular_exponent

    float tram::Render::API::GLMaterial::specular_exponent = 1.0f

    ◆ specular_transparency

    float tram::Render::API::GLMaterial::specular_transparency = 0.0f

    ◆ specular_weight

    float tram::Render::API::GLMaterial::specular_weight = 0.0f

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/material.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_layer_parameters-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::API::LayerParameters Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_layer_parameters.html ================================================ Tramway SDK: tram::Render::API::LayerParameters Struct Reference
    Tramway SDK v0.1.1
    tram::Render::API::LayerParameters Struct Reference

    Public Attributes

    mat4 projection_matrix = mat4(1.0f)
     
    mat4 view_matrix = mat4(1.0f)
     
    vec3 view_position = {1.0f, 1.0f, 1.0f}
     
    vec3 sun_direction = {0.0f, 1.0f, 0.0f}
     
    vec3 sun_color = {1.0f, 1.0f, 1.0f}
     
    vec3 ambient_color = {0.3f, 0.3f, 0.3f}
     

    Member Data Documentation

    ◆ ambient_color

    vec3 tram::Render::API::LayerParameters::ambient_color = {0.3f, 0.3f, 0.3f}

    ◆ projection_matrix

    mat4 tram::Render::API::LayerParameters::projection_matrix = mat4(1.0f)

    ◆ sun_color

    vec3 tram::Render::API::LayerParameters::sun_color = {1.0f, 1.0f, 1.0f}

    ◆ sun_direction

    vec3 tram::Render::API::LayerParameters::sun_direction = {0.0f, 1.0f, 0.0f}

    ◆ view_matrix

    mat4 tram::Render::API::LayerParameters::view_matrix = mat4(1.0f)

    ◆ view_position

    vec3 tram::Render::API::LayerParameters::view_position = {1.0f, 1.0f, 1.0f}

    The documentation for this struct was generated from the following files:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/direct3d/renderer.cpp
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/renderer.cpp
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/software/software.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_light_list_entry-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Render::API::LightListEntry Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_light_list_entry.html ================================================ Tramway SDK: tram::Render::API::LightListEntry Struct Reference
    Tramway SDK
    tram::Render::API::LightListEntry Struct Reference

    #include <renderer.h>

    Public Attributes

    vec3 location = {0.0f, 0.0f, 0.0f}
     
    float padding
     
    vec3 color = {0.0f, 0.0f, 0.0f}
     
    float distance = 0.0f
     
    float padding2 [8]
     

    Member Data Documentation

    ◆ color

    vec3 tram::Render::API::LightListEntry::color = {0.0f, 0.0f, 0.0f}

    ◆ distance

    float tram::Render::API::LightListEntry::distance = 0.0f

    ◆ location

    vec3 tram::Render::API::LightListEntry::location = {0.0f, 0.0f, 0.0f}

    ◆ padding

    float tram::Render::API::LightListEntry::padding

    ◆ padding2

    float tram::Render::API::LightListEntry::padding2[8]

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/renderer.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_line_vertex-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::API::LineVertex Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_line_vertex.html ================================================ Tramway SDK: tram::Render::API::LineVertex Struct Reference
    Tramway SDK v0.1.1
    tram::Render::API::LineVertex Struct Reference

    Public Attributes

    float pos_x
     
    float pos_y
     
    float pos_z
     
    D3DCOLOR color
     

    Member Data Documentation

    ◆ color

    D3DCOLOR tram::Render::API::LineVertex::color

    ◆ pos_x

    float tram::Render::API::LineVertex::pos_x

    ◆ pos_y

    float tram::Render::API::LineVertex::pos_y

    ◆ pos_z

    float tram::Render::API::LineVertex::pos_z

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/direct3d/renderer.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_linked_shader-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Render::API::LinkedShader Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_linked_shader.html ================================================ Tramway SDK: tram::Render::API::LinkedShader Struct Reference
    Tramway SDK
    tram::Render::API::LinkedShader Struct Reference

    Public Attributes

    vertexformat_t vertex_format
     
    materialtype_t material_type
     
    uint32_t linked_shader
     
    name_t vertex_shader
     
    name_t fragment_shader
     

    Member Data Documentation

    ◆ fragment_shader

    name_t tram::Render::API::LinkedShader::fragment_shader

    ◆ linked_shader

    uint32_t tram::Render::API::LinkedShader::linked_shader

    ◆ material_type

    materialtype_t tram::Render::API::LinkedShader::material_type

    ◆ vertex_format

    vertexformat_t tram::Render::API::LinkedShader::vertex_format

    ◆ vertex_shader

    name_t tram::Render::API::LinkedShader::vertex_shader

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/shader.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_point2_d-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::API::Point2D Member List

    This is the complete list of members for tram::Render::API::Point2D, including all inherited members.

    depthtram::Render::API::Point2D
    xtram::Render::API::Point2D
    ytram::Render::API::Point2D
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_point2_d.html ================================================ Tramway SDK: tram::Render::API::Point2D Struct Reference
    Tramway SDK v0.1.1
    tram::Render::API::Point2D Struct Reference

    Public Attributes

    int32_t x
     
    int32_t y
     
    uint32_t depth
     

    Member Data Documentation

    ◆ depth

    uint32_t tram::Render::API::Point2D::depth

    ◆ x

    int32_t tram::Render::API::Point2D::x

    ◆ y

    int32_t tram::Render::API::Point2D::y

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/software/software.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::API::SWDrawListEntry Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_s_w_draw_list_entry.html ================================================ Tramway SDK: tram::Render::API::SWDrawListEntry Struct Reference
    Tramway SDK v0.1.1
    tram::Render::API::SWDrawListEntry Struct Reference

    #include <software.h>

    Public Attributes

    uint32_t flags = 0
     
    Posepose = nullptr
     
    mat4 matrix = mat4(1.0f)
     
    SWLightlights [4] = {nullptr, nullptr, nullptr, nullptr}
     
    uint32_t layer = 0
     
    SWTexturelightmap = nullptr
     
    SWVertexArrayvertex_array = nullptr
     
    SWIndexArrayindex_array = nullptr
     
    uint32_t index_length = 0
     
    uint32_t index_offset = 0
     
    SWTexturetexture = nullptr
     
    vec4 color = {1.0f, 1.0f, 1.0f, 1.0f}
     
    float specular_weight = 1.0f
     
    float specular_exponent = 1.0f
     
    float specular_transparency = 1.0f
     

    Member Data Documentation

    ◆ color

    vec4 tram::Render::API::SWDrawListEntry::color = {1.0f, 1.0f, 1.0f, 1.0f}

    ◆ flags

    uint32_t tram::Render::API::SWDrawListEntry::flags = 0

    ◆ index_array

    SWIndexArray* tram::Render::API::SWDrawListEntry::index_array = nullptr

    ◆ index_length

    uint32_t tram::Render::API::SWDrawListEntry::index_length = 0

    ◆ index_offset

    uint32_t tram::Render::API::SWDrawListEntry::index_offset = 0

    ◆ layer

    uint32_t tram::Render::API::SWDrawListEntry::layer = 0

    ◆ lightmap

    SWTexture* tram::Render::API::SWDrawListEntry::lightmap = nullptr

    ◆ lights

    SWLight* tram::Render::API::SWDrawListEntry::lights[4] = {nullptr, nullptr, nullptr, nullptr}

    ◆ matrix

    mat4 tram::Render::API::SWDrawListEntry::matrix = mat4(1.0f)

    ◆ pose

    Pose* tram::Render::API::SWDrawListEntry::pose = nullptr

    ◆ specular_exponent

    float tram::Render::API::SWDrawListEntry::specular_exponent = 1.0f

    ◆ specular_transparency

    float tram::Render::API::SWDrawListEntry::specular_transparency = 1.0f

    ◆ specular_weight

    float tram::Render::API::SWDrawListEntry::specular_weight = 1.0f

    ◆ texture

    SWTexture* tram::Render::API::SWDrawListEntry::texture = nullptr

    ◆ vertex_array

    SWVertexArray* tram::Render::API::SWDrawListEntry::vertex_array = nullptr

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/software/software.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_s_w_index_array-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::API::SWIndexArray Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_s_w_index_array.html ================================================ Tramway SDK: tram::Render::API::SWIndexArray Struct Reference
    Tramway SDK v0.1.1
    tram::Render::API::SWIndexArray Struct Reference

    #include <software.h>

    Public Attributes

    size_t index_count = 0
     
    uint32_t * indices = nullptr
     
    void * padding
     

    Member Data Documentation

    ◆ index_count

    size_t tram::Render::API::SWIndexArray::index_count = 0

    ◆ indices

    uint32_t* tram::Render::API::SWIndexArray::indices = nullptr

    ◆ padding

    void* tram::Render::API::SWIndexArray::padding

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/software/software.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_s_w_light-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::API::SWLight Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_s_w_light.html ================================================ Tramway SDK: tram::Render::API::SWLight Struct Reference
    Tramway SDK v0.1.1
    tram::Render::API::SWLight Struct Reference

    #include <software.h>

    Public Attributes

    vec3 location = {0.0f, 0.0f, 0.0f}
     
    vec3 color = {0.0f, 0.0f, 0.0f}
     
    float distance = 0.0f
     
    vec3 direction = {0.0f, 0.0f, -1.0f}
     
    float exponent = 0.0f
     

    Member Data Documentation

    ◆ color

    vec3 tram::Render::API::SWLight::color = {0.0f, 0.0f, 0.0f}

    ◆ direction

    vec3 tram::Render::API::SWLight::direction = {0.0f, 0.0f, -1.0f}

    ◆ distance

    float tram::Render::API::SWLight::distance = 0.0f

    ◆ exponent

    float tram::Render::API::SWLight::exponent = 0.0f

    ◆ location

    vec3 tram::Render::API::SWLight::location = {0.0f, 0.0f, 0.0f}

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/software/software.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_s_w_texture-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::API::SWTexture Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_s_w_texture.html ================================================ Tramway SDK: tram::Render::API::SWTexture Struct Reference
    Tramway SDK v0.1.1
    tram::Render::API::SWTexture Struct Reference

    #include <software.h>

    Public Attributes

    int width
     
    int height
     
    int channels
     
    SWTextureMode mode = SW_NEAREST
     
    uint8_t * pixels = nullptr
     

    Member Data Documentation

    ◆ channels

    int tram::Render::API::SWTexture::channels

    ◆ height

    int tram::Render::API::SWTexture::height

    ◆ mode

    SWTextureMode tram::Render::API::SWTexture::mode = SW_NEAREST

    ◆ pixels

    uint8_t* tram::Render::API::SWTexture::pixels = nullptr

    ◆ width

    int tram::Render::API::SWTexture::width

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/software/software.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_s_w_vertex_array-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::API::SWVertexArray Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_s_w_vertex_array.html ================================================ Tramway SDK: tram::Render::API::SWVertexArray Struct Reference
    Tramway SDK v0.1.1
    tram::Render::API::SWVertexArray Struct Reference

    #include <software.h>

    Public Attributes

    SWVertexType type = SW_STATIC_LIGHTMAPPED
     
    void * vertices = nullptr
     
    size_t vertex_count = 0
     
    VertexDefinition format
     
    FFPHelper helper
     

    Member Data Documentation

    ◆ format

    VertexDefinition tram::Render::API::SWVertexArray::format

    ◆ helper

    FFPHelper tram::Render::API::SWVertexArray::helper

    ◆ type

    SWVertexType tram::Render::API::SWVertexArray::type = SW_STATIC_LIGHTMAPPED

    ◆ vertex_count

    size_t tram::Render::API::SWVertexArray::vertex_count = 0

    ◆ vertices

    void* tram::Render::API::SWVertexArray::vertices = nullptr

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/software/software.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_scanline-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::API::Scanline Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_scanline.html ================================================ Tramway SDK: tram::Render::API::Scanline Struct Reference
    Tramway SDK v0.1.1
    tram::Render::API::Scanline Struct Reference

    Public Attributes

    uint16_t begin
     
    uint16_t end
     
    uint16_t begin_p0
     
    uint16_t begin_p1
     
    int32_t begin_adv
     
    uint16_t end_p0
     
    uint16_t end_p1
     
    int32_t end_adv
     

    Member Data Documentation

    ◆ begin

    uint16_t tram::Render::API::Scanline::begin

    ◆ begin_adv

    int32_t tram::Render::API::Scanline::begin_adv

    ◆ begin_p0

    uint16_t tram::Render::API::Scanline::begin_p0

    ◆ begin_p1

    uint16_t tram::Render::API::Scanline::begin_p1

    ◆ end

    uint16_t tram::Render::API::Scanline::end

    ◆ end_adv

    int32_t tram::Render::API::Scanline::end_adv

    ◆ end_p0

    uint16_t tram::Render::API::Scanline::end_p0

    ◆ end_p1

    uint16_t tram::Render::API::Scanline::end_p1

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/software/software.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_scanline_buffer-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::API::ScanlineBuffer Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_scanline_buffer.html ================================================ Tramway SDK: tram::Render::API::ScanlineBuffer Struct Reference
    Tramway SDK v0.1.1
    tram::Render::API::ScanlineBuffer Struct Reference

    Public Attributes

    Scanline scanlines [1000]
     
    int32_t scanline_length = 0
     
    int32_t start_y = 0
     

    Member Data Documentation

    ◆ scanline_length

    int32_t tram::Render::API::ScanlineBuffer::scanline_length = 0

    ◆ scanlines

    Scanline tram::Render::API::ScanlineBuffer::scanlines[1000]

    ◆ start_y

    int32_t tram::Render::API::ScanlineBuffer::start_y = 0

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/software/software.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_matrices-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::API::ShaderUniformMatrices Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_matrices.html ================================================ Tramway SDK: tram::Render::API::ShaderUniformMatrices Struct Reference
    Tramway SDK v0.1.1
    tram::Render::API::ShaderUniformMatrices Struct Reference

    Public Attributes

    mat4 projection
     
    mat4 view
     Projection matrix. More...
     
    vec3 view_pos
     View matrix. More...
     
    float padding
     

    Member Data Documentation

    ◆ padding

    float tram::Render::API::ShaderUniformMatrices::padding

    ◆ projection

    mat4 tram::Render::API::ShaderUniformMatrices::projection

    ◆ view

    mat4 tram::Render::API::ShaderUniformMatrices::view

    Projection matrix.

    ◆ view_pos

    vec3 tram::Render::API::ShaderUniformMatrices::view_pos

    View matrix.


    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/renderer.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::API::ShaderUniformModelMatrices Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_shader_uniform_model_matrices.html ================================================ Tramway SDK: tram::Render::API::ShaderUniformModelMatrices Struct Reference
    Tramway SDK v0.1.1
    tram::Render::API::ShaderUniformModelMatrices Struct Reference

    Public Attributes

    mat4 model
     
    uvec4 modelLights
     Model -> world space matrix. Rotates and translates vertices from how they are defined in the model to where they will appear in the world. More...
     
    vec4 sunDirection
     Indices for lights in the light list. The shader will use these 4 indices to determine with which lights the model should be lit up. More...
     
    vec4 sunColor
     Normalized vector. Sunlight direction. More...
     
    vec4 ambientColor
     Sunlight color. More...
     
    float time
     Shadow color. More...
     
    float sunWeight
     
    float screenWidth
     
    float screenHeight
     
    vec4 colors [15]
     
    vec4 specular [15]
     
    vec4 texture_transforms [15]
     
    vec4 l00
     
    vec4 l1m1
     
    vec4 l10
     
    vec4 l11
     
    vec4 l2m2
     
    vec4 l2m1
     
    vec4 l20
     
    vec4 l21
     
    vec4 l22
     

    Member Data Documentation

    ◆ ambientColor

    vec4 tram::Render::API::ShaderUniformModelMatrices::ambientColor

    Sunlight color.

    ◆ colors

    vec4 tram::Render::API::ShaderUniformModelMatrices::colors[15]

    ◆ l00

    vec4 tram::Render::API::ShaderUniformModelMatrices::l00

    ◆ l10

    vec4 tram::Render::API::ShaderUniformModelMatrices::l10

    ◆ l11

    vec4 tram::Render::API::ShaderUniformModelMatrices::l11

    ◆ l1m1

    vec4 tram::Render::API::ShaderUniformModelMatrices::l1m1

    ◆ l20

    vec4 tram::Render::API::ShaderUniformModelMatrices::l20

    ◆ l21

    vec4 tram::Render::API::ShaderUniformModelMatrices::l21

    ◆ l22

    vec4 tram::Render::API::ShaderUniformModelMatrices::l22

    ◆ l2m1

    vec4 tram::Render::API::ShaderUniformModelMatrices::l2m1

    ◆ l2m2

    vec4 tram::Render::API::ShaderUniformModelMatrices::l2m2

    ◆ model

    mat4 tram::Render::API::ShaderUniformModelMatrices::model

    ◆ modelLights

    uvec4 tram::Render::API::ShaderUniformModelMatrices::modelLights

    Model -> world space matrix. Rotates and translates vertices from how they are defined in the model to where they will appear in the world.

    ◆ screenHeight

    float tram::Render::API::ShaderUniformModelMatrices::screenHeight

    ◆ screenWidth

    float tram::Render::API::ShaderUniformModelMatrices::screenWidth

    ◆ specular

    vec4 tram::Render::API::ShaderUniformModelMatrices::specular[15]

    ◆ sunColor

    vec4 tram::Render::API::ShaderUniformModelMatrices::sunColor

    Normalized vector. Sunlight direction.

    ◆ sunDirection

    vec4 tram::Render::API::ShaderUniformModelMatrices::sunDirection

    Indices for lights in the light list. The shader will use these 4 indices to determine with which lights the model should be lit up.

    ◆ sunWeight

    float tram::Render::API::ShaderUniformModelMatrices::sunWeight

    ◆ texture_transforms

    vec4 tram::Render::API::ShaderUniformModelMatrices::texture_transforms[15]

    ◆ time

    float tram::Render::API::ShaderUniformModelMatrices::time

    Shadow color.


    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/renderer.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_static_vertex-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::API::StaticVertex Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_static_vertex.html ================================================ Tramway SDK: tram::Render::API::StaticVertex Struct Reference
    Tramway SDK v0.1.1
    tram::Render::API::StaticVertex Struct Reference

    Public Attributes

    float pos_x
     
    float pos_y
     
    float pos_z
     
    float nrm_x
     
    float nrm_y
     
    float nrm_z
     
    float tex_x
     
    float tex_y
     
    float lit_x
     
    float lit_y
     
    vec3 pos
     
    vec3 nrm
     
    vec2 tex
     
    vec2 lit
     

    Member Data Documentation

    ◆ lit

    vec2 tram::Render::API::StaticVertex::lit

    ◆ lit_x

    float tram::Render::API::StaticVertex::lit_x

    ◆ lit_y

    float tram::Render::API::StaticVertex::lit_y

    ◆ nrm

    vec3 tram::Render::API::StaticVertex::nrm

    ◆ nrm_x

    float tram::Render::API::StaticVertex::nrm_x

    ◆ nrm_y

    float tram::Render::API::StaticVertex::nrm_y

    ◆ nrm_z

    float tram::Render::API::StaticVertex::nrm_z

    ◆ pos

    vec3 tram::Render::API::StaticVertex::pos

    ◆ pos_x

    float tram::Render::API::StaticVertex::pos_x

    ◆ pos_y

    float tram::Render::API::StaticVertex::pos_y

    ◆ pos_z

    float tram::Render::API::StaticVertex::pos_z

    ◆ tex

    vec2 tram::Render::API::StaticVertex::tex

    ◆ tex_x

    float tram::Render::API::StaticVertex::tex_x

    ◆ tex_y

    float tram::Render::API::StaticVertex::tex_y

    The documentation for this struct was generated from the following files:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/direct3d/renderer.cpp
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/software/software.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_vertex_buffer_metadata-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::API::VertexBufferMetadata Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_vertex_buffer_metadata.html ================================================ Tramway SDK: tram::Render::API::VertexBufferMetadata Struct Reference
    Tramway SDK v0.1.1
    tram::Render::API::VertexBufferMetadata Struct Reference

    Public Attributes

    VertexDefinition vertex_format
     
    DWORD fvf
     
    size_t current_vertex_count
     
    size_t allocated_vertex_count
     

    Member Data Documentation

    ◆ allocated_vertex_count

    size_t tram::Render::API::VertexBufferMetadata::allocated_vertex_count

    ◆ current_vertex_count

    size_t tram::Render::API::VertexBufferMetadata::current_vertex_count

    ◆ fvf

    DWORD tram::Render::API::VertexBufferMetadata::fvf

    ◆ vertex_format

    VertexDefinition tram::Render::API::VertexBufferMetadata::vertex_format

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/direct3d/renderer.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_vertex_shader-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Render::API::VertexShader Member List

    This is the complete list of members for tram::Render::API::VertexShader, including all inherited members.

    compiled_shadertram::Render::API::VertexShader
    nametram::Render::API::VertexShader
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_a_p_i_1_1_vertex_shader.html ================================================ Tramway SDK: tram::Render::API::VertexShader Struct Reference
    Tramway SDK
    tram::Render::API::VertexShader Struct Reference

    Public Attributes

    name_t name
     
    uint32_t compiled_shader
     

    Member Data Documentation

    ◆ compiled_shader

    uint32_t tram::Render::API::VertexShader::compiled_shader

    ◆ name

    name_t tram::Render::API::VertexShader::name

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/shader.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_bone-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::Bone Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_bone.html ================================================ Tramway SDK: tram::Render::Bone Struct Reference
    Tramway SDK v0.1.1
    tram::Render::Bone Struct Reference

    Bone for a 3D models skeleton. More...

    #include <render/animation.h>

    Public Attributes

    name_t name
     Unique identifier for the bone. More...
     
    int32_t parent = -1
     Parent index of the bone. More...
     
    vec3 head = {0.0f, 0.0f, 0.0f}
     Origin of the bone. More...
     
    vec3 tail = {1.0f, 1.0f, 1.0f}
     Direction of the bone. More...
     
    float roll = 0.0f
     Rotation of the bone. More...
     

    Detailed Description

    Bone for a 3D models skeleton.

    The name property identifies a bone and is referenced in animations. The parent property is used to construct the skeletal hierarchy. The head, tail and roll properties are used to construct the bone's local space within the local space of the 3D model.

    Member Data Documentation

    ◆ head

    tram::Render::Bone::head = {0.0f, 0.0f, 0.0f}

    Origin of the bone.

    Position in model space. The bone will rotate and scale around this point.

    ◆ name

    tram::Render::Bone::name

    Unique identifier for the bone.

    Must be unique in the context of a skeleton. This name is how Animation keyframes will reference the bone.

    ◆ parent

    tram::Render::Bone::parent = -1

    Parent index of the bone.

    This index is in the context of a skeleton. If set to an index of some other bone, this bone will move together with the parent bone. Can be set to -1 if you don't want the bone to move with any other bone, and instead want it to move with the models origin or for bones with no parents, i.e. root bones.

    ◆ roll

    tram::Render::Bone::roll = 0.0f

    Rotation of the bone.

    Determines the rotation of the bone around its z axis. This is used to determine in which direction the x and y axis of the bone local space will be pointing in.

    See also
    tram::Render::Animation
    https://racenis.github.io/tram-sdk/documentation/render/animation.html

    ◆ tail

    tram::Render::Bone::tail = {1.0f, 1.0f, 1.0f}

    Direction of the bone.

    Position in model space. The vector going from the head of the bone to the tail of the bone will be used as the z axis of the bone.


    The documentation for this struct was generated from the following files:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/animation.h
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/animation.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_bucket_mapping-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::BucketMapping Member List

    This is the complete list of members for tram::Render::BucketMapping, including all inherited members.

    buckettram::Render::BucketMapping
    index_in_buckettram::Render::BucketMapping
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_bucket_mapping.html ================================================ Tramway SDK: tram::Render::BucketMapping Struct Reference
    Tramway SDK v0.1.1
    tram::Render::BucketMapping Struct Reference

    Public Attributes

    int32_t bucket = -1
     
    int32_t index_in_bucket = -1
     

    Member Data Documentation

    ◆ bucket

    int32_t tram::Render::BucketMapping::bucket = -1

    ◆ index_in_bucket

    int32_t tram::Render::BucketMapping::index_in_bucket = -1

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/model.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_dynamic_model_data-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::DynamicModelData Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_dynamic_model_data.html ================================================ Tramway SDK: tram::Render::DynamicModelData Struct Reference
    Tramway SDK v0.1.1
    tram::Render::DynamicModelData Struct Reference

    #include <vertices.h>

    Inheritance diagram for tram::Render::DynamicModelData:
    tram::Render::ModelData

    Public Attributes

    std::vector< DynamicModelVertexvertices
     
    std::vector< Triangleindices
     
    std::vector< UIDgroups
     

    Member Data Documentation

    ◆ groups

    std::vector<UID> tram::Render::DynamicModelData::groups

    ◆ indices

    std::vector<Triangle> tram::Render::DynamicModelData::indices

    ◆ vertices

    std::vector<DynamicModelVertex> tram::Render::DynamicModelData::vertices

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/vertices.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_dynamic_model_vertex-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::DynamicModelVertex Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_dynamic_model_vertex.html ================================================ Tramway SDK: tram::Render::DynamicModelVertex Struct Reference
    Tramway SDK v0.1.1
    tram::Render::DynamicModelVertex Struct Reference

    #include <vertices.h>

    Public Attributes

    vec3 co
     
    vec3 normal
     
    vec2 tex
     
    ivec4 bone
     
    vec4 boneweight
     
    uint32_t texture
     

    Member Data Documentation

    ◆ bone

    ivec4 tram::Render::DynamicModelVertex::bone

    ◆ boneweight

    vec4 tram::Render::DynamicModelVertex::boneweight

    ◆ co

    vec3 tram::Render::DynamicModelVertex::co

    ◆ normal

    vec3 tram::Render::DynamicModelVertex::normal

    ◆ tex

    vec2 tram::Render::DynamicModelVertex::tex

    ◆ texture

    uint32_t tram::Render::DynamicModelVertex::texture

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/vertices.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_index_range-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::IndexRange Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_index_range.html ================================================ Tramway SDK: tram::Render::IndexRange Struct Reference
    Tramway SDK v0.1.1
    tram::Render::IndexRange Struct Reference

    #include <model.h>

    Public Attributes

    uint32_t index_offset = 0
     
    uint32_t index_length = 0
     
    uint32_t material_count = 0
     
    materialtype_t material_type
     
    uint32_t materials [15] = { 0 }
     

    Member Data Documentation

    ◆ index_length

    uint32_t tram::Render::IndexRange::index_length = 0

    ◆ index_offset

    uint32_t tram::Render::IndexRange::index_offset = 0

    ◆ material_count

    uint32_t tram::Render::IndexRange::material_count = 0

    ◆ material_type

    materialtype_t tram::Render::IndexRange::material_type

    ◆ materials

    uint32_t tram::Render::IndexRange::materials[15] = { 0 }

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/model.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_keyframe-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::Keyframe Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_keyframe.html ================================================ Tramway SDK: tram::Render::Keyframe Struct Reference
    Tramway SDK v0.1.1
    tram::Render::Keyframe Struct Reference

    Keyframe for a skeletal animation. More...

    #include <render/animation.h>

    Public Attributes

    float frame = 0.0f
     Used only when keyframes are used in the context of an animation. More...
     
    vec3 location = {0.0f, 0.0f, 0.0f}
     
    quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
     
    vec3 scale = {1.0f, 1.0f, 1.0f}
     
    char padding [4]
     

    Detailed Description

    Keyframe for a skeletal animation.

    All of the translation, rotation and scaling operations will be performed in a given bone's local space.

    Member Data Documentation

    ◆ frame

    tram::Render::Keyframe::frame = 0.0f

    Used only when keyframes are used in the context of an animation.

    See also
    tram::Render::Animation
    https://racenis.github.io/tram-sdk/documentation/render/animation.html

    ◆ location

    vec3 tram::Render::Keyframe::location = {0.0f, 0.0f, 0.0f}

    ◆ padding

    char tram::Render::Keyframe::padding[4]

    ◆ rotation

    quat tram::Render::Keyframe::rotation = {1.0f, 0.0f, 0.0f, 0.0f}

    ◆ scale

    vec3 tram::Render::Keyframe::scale = {1.0f, 1.0f, 1.0f}

    The documentation for this struct was generated from the following files:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/animation.h
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/animation.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_keyframe_header-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::KeyframeHeader Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_keyframe_header.html ================================================ Tramway SDK: tram::Render::KeyframeHeader Struct Reference
    Tramway SDK v0.1.1
    tram::Render::KeyframeHeader Struct Reference

    #include <animation.h>

    Public Attributes

    name_t bone
     
    uint32_t keyframe_offset
     
    uint32_t keyframe_count
     

    Member Data Documentation

    ◆ bone

    name_t tram::Render::KeyframeHeader::bone

    ◆ keyframe_count

    uint32_t tram::Render::KeyframeHeader::keyframe_count

    ◆ keyframe_offset

    uint32_t tram::Render::KeyframeHeader::keyframe_offset

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/animation.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_light_graph_1_1_node-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::LightGraph::Node Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_light_graph_1_1_node.html ================================================ Tramway SDK: tram::Render::LightGraph::Node Struct Reference
    Tramway SDK v0.1.1
    tram::Render::LightGraph::Node Struct Reference

    #include <light.h>

    Public Attributes

    vec3 position
     
    bool has_light = false
     
    bool has_reflection = false
     
    Materialenvironment_map = nullptr
     
    std::vector< SphericalHarmonicconstants
     

    Member Data Documentation

    ◆ constants

    std::vector<SphericalHarmonic> tram::Render::LightGraph::Node::constants

    ◆ environment_map

    Material* tram::Render::LightGraph::Node::environment_map = nullptr

    ◆ has_light

    bool tram::Render::LightGraph::Node::has_light = false

    ◆ has_reflection

    bool tram::Render::LightGraph::Node::has_reflection = false

    ◆ position

    vec3 tram::Render::LightGraph::Node::position

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/light.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_light_tree_1_1_light-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::LightTree::Light Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_light_tree_1_1_light.html ================================================ Tramway SDK: tram::Render::LightTree::Light Struct Reference
    Tramway SDK v0.1.1
    tram::Render::LightTree::Light Struct Reference

    Public Attributes

    light_t handle
     
    vec3 position
     
    float distance
     
    uint32_t tree_handle
     

    Member Data Documentation

    ◆ distance

    float tram::Render::LightTree::Light::distance

    ◆ handle

    light_t tram::Render::LightTree::Light::handle

    ◆ position

    vec3 tram::Render::LightTree::Light::position

    ◆ tree_handle

    uint32_t tram::Render::LightTree::Light::tree_handle

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/scene.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_line_vertex-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::LineVertex Member List

    This is the complete list of members for tram::Render::LineVertex, including all inherited members.

    cotram::Render::LineVertex
    colortram::Render::LineVertex
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_line_vertex.html ================================================ Tramway SDK: tram::Render::LineVertex Struct Reference
    Tramway SDK v0.1.1
    tram::Render::LineVertex Struct Reference

    #include <vertices.h>

    Public Attributes

    vec3 co
     
    vec3 color
     

    Member Data Documentation

    ◆ co

    vec3 tram::Render::LineVertex::co

    ◆ color

    vec3 tram::Render::LineVertex::color

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/vertices.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_model_a_a_b_b-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::ModelAABB Member List

    This is the complete list of members for tram::Render::ModelAABB, including all inherited members.

    treetram::Render::ModelAABB
    trianglestram::Render::ModelAABB
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_model_a_a_b_b.html ================================================ Tramway SDK: tram::Render::ModelAABB Struct Reference
    Tramway SDK v0.1.1
    tram::Render::ModelAABB Struct Reference

    Public Attributes

    AABBTree tree
     
    std::vector< AABBTriangletriangles
     

    Member Data Documentation

    ◆ tree

    AABBTree tram::Render::ModelAABB::tree

    ◆ triangles

    std::vector<AABBTriangle> tram::Render::ModelAABB::triangles

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/model.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_model_data.html ================================================ Tramway SDK: tram::Render::ModelData Struct Reference
    Tramway SDK v0.1.1
    tram::Render::ModelData Struct Reference

    #include <vertices.h>

    Inheritance diagram for tram::Render::ModelData:
    tram::Render::DynamicModelData tram::Render::StaticModelData

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/vertices.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_open_g_l_1_1_draw_list_entry-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Render::OpenGL::DrawListEntry Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_open_g_l_1_1_draw_list_entry.html ================================================ Tramway SDK: tram::Render::OpenGL::DrawListEntry Struct Reference
    Tramway SDK
    tram::Render::OpenGL::DrawListEntry Struct Reference

    #include <renderer.h>

    Public Member Functions

    uint64_t CalcSortKey (const glm::vec3 &cameraPosition)
     Assembles a key for sorting. More...
     

    Public Attributes

    uint32_t flags = 0
     
    Posepose = nullptr
     
    mat4 matrix = mat4(1.0f)
     
    uint32_t lights [4] = {0}
     
    uint32_t layer = 0
     
    uint32_t lightmap = 0
     
    uint32_t vao = 0
     
    uint32_t eboLen = 0
     
    uint32_t eboOff = 0
     
    uint32_t shader = 0
     
    uint32_t texCount = 0
     
    uint32_t textures [15] = {0}
     
    char padding [4]
     

    Member Function Documentation

    ◆ CalcSortKey()

    uint64_t tram::Render::OpenGL::DrawListEntry::CalcSortKey ( const glm::vec3 &  cameraPosition)
    inline

    Assembles a key for sorting.

    Member Data Documentation

    ◆ eboLen

    uint32_t tram::Render::OpenGL::DrawListEntry::eboLen = 0

    ◆ eboOff

    uint32_t tram::Render::OpenGL::DrawListEntry::eboOff = 0

    ◆ flags

    uint32_t tram::Render::OpenGL::DrawListEntry::flags = 0

    ◆ layer

    uint32_t tram::Render::OpenGL::DrawListEntry::layer = 0

    ◆ lightmap

    uint32_t tram::Render::OpenGL::DrawListEntry::lightmap = 0

    ◆ lights

    uint32_t tram::Render::OpenGL::DrawListEntry::lights[4] = {0}

    ◆ matrix

    mat4 tram::Render::OpenGL::DrawListEntry::matrix = mat4(1.0f)

    ◆ padding

    char tram::Render::OpenGL::DrawListEntry::padding[4]

    ◆ pose

    Pose* tram::Render::OpenGL::DrawListEntry::pose = nullptr

    ◆ shader

    uint32_t tram::Render::OpenGL::DrawListEntry::shader = 0

    ◆ texCount

    uint32_t tram::Render::OpenGL::DrawListEntry::texCount = 0

    ◆ textures

    uint32_t tram::Render::OpenGL::DrawListEntry::textures[15] = {0}

    ◆ vao

    uint32_t tram::Render::OpenGL::DrawListEntry::vao = 0

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/renderer.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_open_g_l_1_1_fragment_shader-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Render::OpenGL::FragmentShader Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_open_g_l_1_1_fragment_shader.html ================================================ Tramway SDK: tram::Render::OpenGL::FragmentShader Struct Reference
    Tramway SDK
    tram::Render::OpenGL::FragmentShader Struct Reference

    Public Attributes

    name_t name
     
    uint32_t compiled_shader
     

    Member Data Documentation

    ◆ compiled_shader

    uint32_t tram::Render::OpenGL::FragmentShader::compiled_shader

    ◆ name

    name_t tram::Render::OpenGL::FragmentShader::name

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/shader.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_open_g_l_1_1_layer_parameters-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Render::OpenGL::LayerParameters Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_open_g_l_1_1_layer_parameters.html ================================================ Tramway SDK: tram::Render::OpenGL::LayerParameters Struct Reference
    Tramway SDK
    tram::Render::OpenGL::LayerParameters Struct Reference

    Public Attributes

    vec3 camera_position = {0.0f, 0.0f, 0.0f}
     
    quat camera_rotation = {1.0f, 0.0f, 0.0f, 0.0f}
     
    vec3 sun_direction = {0.0f, 1.0f, 0.0f}
     
    vec3 sun_color = {1.0f, 1.0f, 1.0f}
     
    vec3 ambient_color = {0.3f, 0.3f, 0.3f}
     

    Member Data Documentation

    ◆ ambient_color

    vec3 tram::Render::OpenGL::LayerParameters::ambient_color = {0.3f, 0.3f, 0.3f}

    ◆ camera_position

    vec3 tram::Render::OpenGL::LayerParameters::camera_position = {0.0f, 0.0f, 0.0f}

    ◆ camera_rotation

    quat tram::Render::OpenGL::LayerParameters::camera_rotation = {1.0f, 0.0f, 0.0f, 0.0f}

    ◆ sun_color

    vec3 tram::Render::OpenGL::LayerParameters::sun_color = {1.0f, 1.0f, 1.0f}

    ◆ sun_direction

    vec3 tram::Render::OpenGL::LayerParameters::sun_direction = {0.0f, 1.0f, 0.0f}

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/renderer.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_open_g_l_1_1_light_list_entry-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Render::OpenGL::LightListEntry Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_open_g_l_1_1_light_list_entry.html ================================================ Tramway SDK: tram::Render::OpenGL::LightListEntry Struct Reference
    Tramway SDK
    tram::Render::OpenGL::LightListEntry Struct Reference

    #include <renderer.h>

    Public Attributes

    vec3 location = {0.0f, 0.0f, 0.0f}
     
    float padding
     
    vec3 color = {0.0f, 0.0f, 0.0f}
     
    float distance = 0.0f
     
    float padding2 [8]
     

    Member Data Documentation

    ◆ color

    vec3 tram::Render::OpenGL::LightListEntry::color = {0.0f, 0.0f, 0.0f}

    ◆ distance

    float tram::Render::OpenGL::LightListEntry::distance = 0.0f

    ◆ location

    vec3 tram::Render::OpenGL::LightListEntry::location = {0.0f, 0.0f, 0.0f}

    ◆ padding

    float tram::Render::OpenGL::LightListEntry::padding

    ◆ padding2

    float tram::Render::OpenGL::LightListEntry::padding2[8]

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/renderer.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_open_g_l_1_1_linked_shader-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Render::OpenGL::LinkedShader Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_open_g_l_1_1_linked_shader.html ================================================ Tramway SDK: tram::Render::OpenGL::LinkedShader Struct Reference
    Tramway SDK
    tram::Render::OpenGL::LinkedShader Struct Reference

    Public Attributes

    vertexformat_t vertex_format
     
    materialtype_t material_type
     
    uint32_t linked_shader
     
    name_t vertex_shader
     
    name_t fragment_shader
     

    Member Data Documentation

    ◆ fragment_shader

    name_t tram::Render::OpenGL::LinkedShader::fragment_shader

    ◆ linked_shader

    uint32_t tram::Render::OpenGL::LinkedShader::linked_shader

    ◆ material_type

    materialtype_t tram::Render::OpenGL::LinkedShader::material_type

    ◆ vertex_format

    vertexformat_t tram::Render::OpenGL::LinkedShader::vertex_format

    ◆ vertex_shader

    name_t tram::Render::OpenGL::LinkedShader::vertex_shader

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/shader.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_open_g_l_1_1_shader_uniform_matrices-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Render::OpenGL::ShaderUniformMatrices Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_open_g_l_1_1_shader_uniform_matrices.html ================================================ Tramway SDK: tram::Render::OpenGL::ShaderUniformMatrices Struct Reference
    Tramway SDK
    tram::Render::OpenGL::ShaderUniformMatrices Struct Reference

    Public Attributes

    glm::mat4 projection
     
    glm::mat4 view
     Projection matrix. More...
     

    Member Data Documentation

    ◆ projection

    glm::mat4 tram::Render::OpenGL::ShaderUniformMatrices::projection

    ◆ view

    glm::mat4 tram::Render::OpenGL::ShaderUniformMatrices::view

    Projection matrix.


    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/renderer.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_open_g_l_1_1_shader_uniform_model_matrices-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Render::OpenGL::ShaderUniformModelMatrices Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_open_g_l_1_1_shader_uniform_model_matrices.html ================================================ Tramway SDK: tram::Render::OpenGL::ShaderUniformModelMatrices Struct Reference
    Tramway SDK
    tram::Render::OpenGL::ShaderUniformModelMatrices Struct Reference

    Public Attributes

    glm::mat4 model
     
    glm::uvec4 modelLights
     Model -> world space matrix. Rotates and translates vertices from how they are defined in the model to where they will appear in the world. More...
     
    glm::vec4 sunDirection
     Indices for lights in the light list. The shader will use these 4 indices to determine with which lights the model should be lit up. More...
     
    glm::vec4 sunColor
     Normalized vector. Sunlight direction. More...
     
    glm::vec4 ambientColor
     Sunlight color. More...
     
    float time
     Shadow color. More...
     
    float sunWeight
     
    float screenWidth
     
    float screenHeight
     

    Member Data Documentation

    ◆ ambientColor

    glm::vec4 tram::Render::OpenGL::ShaderUniformModelMatrices::ambientColor

    Sunlight color.

    ◆ model

    glm::mat4 tram::Render::OpenGL::ShaderUniformModelMatrices::model

    ◆ modelLights

    glm::uvec4 tram::Render::OpenGL::ShaderUniformModelMatrices::modelLights

    Model -> world space matrix. Rotates and translates vertices from how they are defined in the model to where they will appear in the world.

    ◆ screenHeight

    float tram::Render::OpenGL::ShaderUniformModelMatrices::screenHeight

    ◆ screenWidth

    float tram::Render::OpenGL::ShaderUniformModelMatrices::screenWidth

    ◆ sunColor

    glm::vec4 tram::Render::OpenGL::ShaderUniformModelMatrices::sunColor

    Normalized vector. Sunlight direction.

    ◆ sunDirection

    glm::vec4 tram::Render::OpenGL::ShaderUniformModelMatrices::sunDirection

    Indices for lights in the light list. The shader will use these 4 indices to determine with which lights the model should be lit up.

    ◆ sunWeight

    float tram::Render::OpenGL::ShaderUniformModelMatrices::sunWeight

    ◆ time

    float tram::Render::OpenGL::ShaderUniformModelMatrices::time

    Shadow color.


    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/renderer.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_open_g_l_1_1_vertex_shader-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Render::OpenGL::VertexShader Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_open_g_l_1_1_vertex_shader.html ================================================ Tramway SDK: tram::Render::OpenGL::VertexShader Struct Reference
    Tramway SDK
    tram::Render::OpenGL::VertexShader Struct Reference

    Public Attributes

    name_t name
     
    uint32_t compiled_shader
     

    Member Data Documentation

    ◆ compiled_shader

    uint32_t tram::Render::OpenGL::VertexShader::compiled_shader

    ◆ name

    name_t tram::Render::OpenGL::VertexShader::name

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/shader.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_pose-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::Pose Member List

    This is the complete list of members for tram::Render::Pose, including all inherited members.

    posetram::Render::Pose
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_pose.html ================================================ Tramway SDK: tram::Render::Pose Struct Reference
    Tramway SDK v0.1.1
    tram::Render::Pose Struct Reference

    #include <animation.h>

    Public Attributes

    mat4 pose [BONE_COUNT]
     

    Member Data Documentation

    ◆ pose

    mat4 tram::Render::Pose::pose[BONE_COUNT]

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/animation.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_registered_vertex_definition-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::RegisteredVertexDefinition Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_registered_vertex_definition.html ================================================ Tramway SDK: tram::Render::RegisteredVertexDefinition Struct Reference
    Tramway SDK v0.1.1
    tram::Render::RegisteredVertexDefinition Struct Reference

    Public Attributes

    bool registered = false
     
    VertexDefinition definition
     

    Member Data Documentation

    ◆ definition

    VertexDefinition tram::Render::RegisteredVertexDefinition::definition

    ◆ registered

    bool tram::Render::RegisteredVertexDefinition::registered = false

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/renderer.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_spherical_harmonic-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::SphericalHarmonic Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_spherical_harmonic.html ================================================ Tramway SDK: tram::Render::SphericalHarmonic Struct Reference
    Tramway SDK v0.1.1
    tram::Render::SphericalHarmonic Struct Reference

    #include <render.h>

    Public Attributes

    vec3 l00
     
    vec3 l1m1
     
    vec3 l10
     
    vec3 l11
     
    vec3 l2m2
     
    vec3 l2m1
     
    vec3 l20
     
    vec3 l21
     
    vec3 l22
     

    Member Data Documentation

    ◆ l00

    vec3 tram::Render::SphericalHarmonic::l00

    ◆ l10

    vec3 tram::Render::SphericalHarmonic::l10

    ◆ l11

    vec3 tram::Render::SphericalHarmonic::l11

    ◆ l1m1

    vec3 tram::Render::SphericalHarmonic::l1m1

    ◆ l20

    vec3 tram::Render::SphericalHarmonic::l20

    ◆ l21

    vec3 tram::Render::SphericalHarmonic::l21

    ◆ l22

    vec3 tram::Render::SphericalHarmonic::l22

    ◆ l2m1

    vec3 tram::Render::SphericalHarmonic::l2m1

    ◆ l2m2

    vec3 tram::Render::SphericalHarmonic::l2m2

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/render.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_sprite_frame-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::SpriteFrame Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_sprite_frame.html ================================================ Tramway SDK: tram::Render::SpriteFrame Struct Reference
    Tramway SDK v0.1.1
    tram::Render::SpriteFrame Struct Reference

    #include <sprite.h>

    Public Attributes

    uint16_t offset_x
     
    uint16_t offset_y
     
    uint16_t width
     
    uint16_t height
     
    uint16_t midpoint_x
     
    uint16_t midpoint_y
     
    uint16_t border_h
     
    uint16_t border_v
     

    Member Data Documentation

    ◆ border_h

    uint16_t tram::Render::SpriteFrame::border_h

    ◆ border_v

    uint16_t tram::Render::SpriteFrame::border_v

    ◆ height

    uint16_t tram::Render::SpriteFrame::height

    ◆ midpoint_x

    uint16_t tram::Render::SpriteFrame::midpoint_x

    ◆ midpoint_y

    uint16_t tram::Render::SpriteFrame::midpoint_y

    ◆ offset_x

    uint16_t tram::Render::SpriteFrame::offset_x

    ◆ offset_y

    uint16_t tram::Render::SpriteFrame::offset_y

    ◆ width

    uint16_t tram::Render::SpriteFrame::width

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/sprite.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_sprite_point-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::SpritePoint Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_sprite_point.html ================================================ Tramway SDK: tram::Render::SpritePoint Struct Reference
    Tramway SDK v0.1.1
    tram::Render::SpritePoint Struct Reference

    #include <vertices.h>

    Public Attributes

    vec3 position
     
    vec3 center
     
    vec3 color
     
    float rotation
     
    vec2 dimensions
     
    vec2 texture_offset
     
    vec2 texture_size
     
    uint32_t texture
     

    Member Data Documentation

    ◆ center

    vec3 tram::Render::SpritePoint::center

    ◆ color

    vec3 tram::Render::SpritePoint::color

    ◆ dimensions

    vec2 tram::Render::SpritePoint::dimensions

    ◆ position

    vec3 tram::Render::SpritePoint::position

    ◆ rotation

    float tram::Render::SpritePoint::rotation

    ◆ texture

    uint32_t tram::Render::SpritePoint::texture

    ◆ texture_offset

    vec2 tram::Render::SpritePoint::texture_offset

    ◆ texture_size

    vec2 tram::Render::SpritePoint::texture_size

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/vertices.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_sprite_vertex-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::SpriteVertex Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_sprite_vertex.html ================================================ Tramway SDK: tram::Render::SpriteVertex Struct Reference
    Tramway SDK v0.1.1
    tram::Render::SpriteVertex Struct Reference

    #include <vertices.h>

    Public Attributes

    vec3 co
     
    vec2 voffset
     
    vec2 texco
     
    vec3 color
     
    float verticality
     
    uint32_t texture
     

    Member Data Documentation

    ◆ co

    vec3 tram::Render::SpriteVertex::co

    ◆ color

    vec3 tram::Render::SpriteVertex::color

    ◆ texco

    vec2 tram::Render::SpriteVertex::texco

    ◆ texture

    uint32_t tram::Render::SpriteVertex::texture

    ◆ verticality

    float tram::Render::SpriteVertex::verticality

    ◆ voffset

    vec2 tram::Render::SpriteVertex::voffset

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/vertices.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_static_model_data-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::StaticModelData Member List

    This is the complete list of members for tram::Render::StaticModelData, including all inherited members.

    indicestram::Render::StaticModelData
    verticestram::Render::StaticModelData
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_static_model_data.html ================================================ Tramway SDK: tram::Render::StaticModelData Struct Reference
    Tramway SDK v0.1.1
    tram::Render::StaticModelData Struct Reference

    #include <vertices.h>

    Inheritance diagram for tram::Render::StaticModelData:
    tram::Render::ModelData

    Public Attributes

    std::vector< StaticModelVertexvertices
     
    std::vector< Triangleindices
     

    Member Data Documentation

    ◆ indices

    std::vector<Triangle> tram::Render::StaticModelData::indices

    ◆ vertices

    std::vector<StaticModelVertex> tram::Render::StaticModelData::vertices

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/vertices.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_static_model_vertex-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::StaticModelVertex Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_static_model_vertex.html ================================================ Tramway SDK: tram::Render::StaticModelVertex Struct Reference
    Tramway SDK v0.1.1
    tram::Render::StaticModelVertex Struct Reference

    #include <vertices.h>

    Public Attributes

    vec3 co
     
    vec3 normal
     
    vec2 tex
     
    vec2 lighttex
     
    uint32_t texture
     

    Member Data Documentation

    ◆ co

    vec3 tram::Render::StaticModelVertex::co

    ◆ lighttex

    vec2 tram::Render::StaticModelVertex::lighttex

    ◆ normal

    vec3 tram::Render::StaticModelVertex::normal

    ◆ tex

    vec2 tram::Render::StaticModelVertex::tex

    ◆ texture

    uint32_t tram::Render::StaticModelVertex::texture

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/vertices.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_triangle-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::Triangle Member List

    This is the complete list of members for tram::Render::Triangle, including all inherited members.

    indicestram::Render::Triangle
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_triangle.html ================================================ Tramway SDK: tram::Render::Triangle Struct Reference
    Tramway SDK v0.1.1
    tram::Render::Triangle Struct Reference

    #include <vertices.h>

    Public Attributes

    ivec3 indices
     

    Member Data Documentation

    ◆ indices

    ivec3 tram::Render::Triangle::indices

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/vertices.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_triangle_bucket-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::TriangleBucket Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_triangle_bucket.html ================================================ Tramway SDK: tram::Render::TriangleBucket Struct Reference
    Tramway SDK v0.1.1
    tram::Render::TriangleBucket Struct Reference

    Public Attributes

    materialtype_t material_type
     
    std::vector< uint32_t > materials
     
    std::vector< Triangletriangles
     

    Member Data Documentation

    ◆ material_type

    materialtype_t tram::Render::TriangleBucket::material_type

    ◆ materials

    std::vector<uint32_t> tram::Render::TriangleBucket::materials

    ◆ triangles

    std::vector<Triangle> tram::Render::TriangleBucket::triangles

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/model.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_vertex_attribute-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::VertexAttribute Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_vertex_attribute.html ================================================ Tramway SDK: tram::Render::VertexAttribute Struct Reference
    Tramway SDK v0.1.1
    tram::Render::VertexAttribute Struct Reference

    Atributes for vertex buffer vertices. More...

    #include <renderer.h>

    Public Types

    enum  { FLOAT32 , INT32 , UINT32 }
     
    enum  {
      FFP_IGNORE , FFP_POSITION , FFP_NORMAL , FFP_COLOR ,
      FFP_TEXTURE , FFP_LIGHTMAP , FFP_BONE_INDEX , FFP_BONE_WEIGHT
    }
     

    Public Attributes

    enum tram::Render::VertexAttribute:: { ... }  type
     
    enum tram::Render::VertexAttribute:: { ... }  ffp_type
     
    uint32_t size
     
    uint32_t stride
     
    uint64_t offset
     

    Detailed Description

    Atributes for vertex buffer vertices.

    Member Enumeration Documentation

    ◆ anonymous enum

    anonymous enum
    Enumerator
    FLOAT32 
    INT32 
    UINT32 

    ◆ anonymous enum

    anonymous enum
    Enumerator
    FFP_IGNORE 
    FFP_POSITION 
    FFP_NORMAL 
    FFP_COLOR 
    FFP_TEXTURE 
    FFP_LIGHTMAP 
    FFP_BONE_INDEX 
    FFP_BONE_WEIGHT 

    Member Data Documentation

    ◆ 

    enum { ... } tram::Render::VertexAttribute::ffp_type

    ◆ offset

    uint64_t tram::Render::VertexAttribute::offset

    ◆ size

    uint32_t tram::Render::VertexAttribute::size

    ◆ stride

    uint32_t tram::Render::VertexAttribute::stride

    ◆ 

    enum { ... } tram::Render::VertexAttribute::type

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/renderer.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_vertex_definition-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::VertexDefinition Member List

    This is the complete list of members for tram::Render::VertexDefinition, including all inherited members.

    attribute_counttram::Render::VertexDefinition
    attributestram::Render::VertexDefinition
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1_vertex_definition.html ================================================ Tramway SDK: tram::Render::VertexDefinition Struct Reference
    Tramway SDK v0.1.1
    tram::Render::VertexDefinition Struct Reference

    #include <renderer.h>

    Public Attributes

    const VertexAttributeattributes
     
    size_t attribute_count
     

    Member Data Documentation

    ◆ attribute_count

    size_t tram::Render::VertexDefinition::attribute_count

    ◆ attributes

    const VertexAttribute* tram::Render::VertexDefinition::attributes

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/renderer.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1drawlistentry__t-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::drawlistentry_t Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1drawlistentry__t.html ================================================ Tramway SDK: tram::Render::drawlistentry_t Struct Reference
    Tramway SDK v0.1.1
    tram::Render::drawlistentry_t Struct Reference

    #include <render.h>

    Public Attributes

    union {
       API::GLDrawListEntry *   gl
     
       API::D3DDrawListEntry *   d3d
     
       API::SWDrawListEntry *   sw
     
       void *   generic
     
    }; 
     

    Member Data Documentation

    ◆ 

    union { ... } tram::Render::drawlistentry_t::@75

    ◆ d3d

    API::D3DDrawListEntry* tram::Render::drawlistentry_t::d3d

    ◆ generic

    void* tram::Render::drawlistentry_t::generic

    ◆ gl

    API::GLDrawListEntry* tram::Render::drawlistentry_t::gl

    ◆ sw

    API::SWDrawListEntry* tram::Render::drawlistentry_t::sw

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/render.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1indexarray__t-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::indexarray_t Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1indexarray__t.html ================================================ Tramway SDK: tram::Render::indexarray_t Struct Reference
    Tramway SDK v0.1.1
    tram::Render::indexarray_t Struct Reference

    #include <render.h>

    Public Attributes

    union {
       uint32_t   gl_index_buffer
     
       IDirect3DIndexBuffer9 *   d3d_index_buffer
     
       API::SWIndexArray *   sw_index_array
     
       void *   generic
     
    }; 
     

    Member Data Documentation

    ◆ 

    union { ... } tram::Render::indexarray_t::@71

    ◆ d3d_index_buffer

    IDirect3DIndexBuffer9* tram::Render::indexarray_t::d3d_index_buffer

    ◆ generic

    void* tram::Render::indexarray_t::generic

    ◆ gl_index_buffer

    uint32_t tram::Render::indexarray_t::gl_index_buffer

    ◆ sw_index_array

    API::SWIndexArray* tram::Render::indexarray_t::sw_index_array

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/render.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1light__t-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::light_t Member List

    This is the complete list of members for tram::Render::light_t, including all inherited members.

    d3dtram::Render::light_t
    generictram::Render::light_t
    gltram::Render::light_t
    swtram::Render::light_t
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1light__t.html ================================================ Tramway SDK: tram::Render::light_t Struct Reference
    Tramway SDK v0.1.1
    tram::Render::light_t Struct Reference

    #include <render.h>

    Public Attributes

    union {
       API::GLLight *   gl
     
       API::D3DLight *   d3d
     
       API::SWLight *   sw
     
       void *   generic
     
    }; 
     

    Member Data Documentation

    ◆ 

    union { ... } tram::Render::light_t::@79

    ◆ d3d

    API::D3DLight* tram::Render::light_t::d3d

    ◆ generic

    void* tram::Render::light_t::generic

    ◆ gl

    API::GLLight* tram::Render::light_t::gl

    ◆ sw

    API::SWLight* tram::Render::light_t::sw

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/render.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1material__t-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::material_t Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1material__t.html ================================================ Tramway SDK: tram::Render::material_t Struct Reference
    Tramway SDK v0.1.1
    tram::Render::material_t Struct Reference

    #include <render.h>

    Public Attributes

    union {
       API::GLMaterial *   gl
     
       API::D3DMaterial *   d3d
     
       API::SWMaterial *   sw
     
       void *   generic
     
    }; 
     

    Member Data Documentation

    ◆ 

    union { ... } tram::Render::material_t::@81

    ◆ d3d

    API::D3DMaterial* tram::Render::material_t::d3d

    ◆ generic

    void* tram::Render::material_t::generic

    ◆ gl

    API::GLMaterial* tram::Render::material_t::gl

    ◆ sw

    API::SWMaterial* tram::Render::material_t::sw

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/render.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1spritearray__t-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::spritearray_t Member List

    This is the complete list of members for tram::Render::spritearray_t, including all inherited members.

    generictram::Render::spritearray_t
    vertex_arraytram::Render::spritearray_t
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1spritearray__t.html ================================================ Tramway SDK: tram::Render::spritearray_t Struct Reference
    Tramway SDK v0.1.1
    tram::Render::spritearray_t Struct Reference

    #include <render.h>

    Public Attributes

    union {
       vertexarray_t   vertex_array
     
       void *   generic
     
    }; 
     

    Member Data Documentation

    ◆ 

    union { ... } tram::Render::spritearray_t::@73

    ◆ generic

    void* tram::Render::spritearray_t::generic

    ◆ vertex_array

    vertexarray_t tram::Render::spritearray_t::vertex_array

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/render.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1texturehandle__t-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::texturehandle_t Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1texturehandle__t.html ================================================ Tramway SDK: tram::Render::texturehandle_t Struct Reference
    Tramway SDK v0.1.1
    tram::Render::texturehandle_t Struct Reference

    #include <render.h>

    Public Attributes

    union {
       uint32_t   gl_texture_handle
     
       IDirect3DTexture9 *   d3d_texture_handle
     
       API::SWTexture *   sw_texture
     
       void *   generic
     
    }; 
     

    Member Data Documentation

    ◆ 

    union { ... } tram::Render::texturehandle_t::@77

    ◆ d3d_texture_handle

    IDirect3DTexture9* tram::Render::texturehandle_t::d3d_texture_handle

    ◆ generic

    void* tram::Render::texturehandle_t::generic

    ◆ gl_texture_handle

    uint32_t tram::Render::texturehandle_t::gl_texture_handle

    ◆ sw_texture

    API::SWTexture* tram::Render::texturehandle_t::sw_texture

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/render.h
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1vertexarray__t-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Render::vertexarray_t Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_render_1_1vertexarray__t.html ================================================ Tramway SDK: tram::Render::vertexarray_t Struct Reference
    Tramway SDK v0.1.1
    tram::Render::vertexarray_t Struct Reference

    #include <render.h>

    Public Attributes

    union {
       struct {
          uint32_t   gl_vertex_array
     
          uint32_t   gl_vertex_buffer
     
       } 
     
       struct {
          IDirect3DVertexBuffer9 *   d3d_vertex_buffer
     
          uint32_t   d3d_metadata
     
       } 
     
       API::SWVertexArray *   sw_vertex_array
     
       void *   generic
     
    }; 
     

    Member Data Documentation

    ◆ 

    union { ... } tram::Render::vertexarray_t::@65

    ◆ d3d_metadata

    uint32_t tram::Render::vertexarray_t::d3d_metadata

    ◆ d3d_vertex_buffer

    IDirect3DVertexBuffer9* tram::Render::vertexarray_t::d3d_vertex_buffer

    ◆ generic

    void* tram::Render::vertexarray_t::generic

    ◆ gl_vertex_array

    uint32_t tram::Render::vertexarray_t::gl_vertex_array

    ◆ gl_vertex_buffer

    uint32_t tram::Render::vertexarray_t::gl_vertex_buffer

    ◆ sw_vertex_array

    API::SWVertexArray* tram::Render::vertexarray_t::sw_vertex_array

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/render/render.h
    ================================================ FILE: docs/cppapi/structtram_1_1_script_1_1_language-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::Script::Language Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_script_1_1_language.html ================================================ Tramway SDK: tram::Script::Language Struct Reference
    Tramway SDK
    tram::Script::Language Struct Reference

    #include <script.h>

    Public Attributes

    name_t name
     
    value_t(* get_global )(name_t name)
     
    void(* set_global )(name_t name, value_t value)
     
    void(* set_function )(name_t name, std::vector< Type > parameters, value_t(*function)(valuearray_t))
     
    value_t(* call_function )(name_t name, std::vector< Value > parameters)
     
    void(* load_script )(const char *path)
     
    value_t(* evaluate )(const char *code)
     

    Member Data Documentation

    ◆ call_function

    value_t(* tram::Script::Language::call_function) (name_t name, std::vector< Value > parameters)

    ◆ evaluate

    value_t(* tram::Script::Language::evaluate) (const char *code)

    ◆ get_global

    value_t(* tram::Script::Language::get_global) (name_t name)

    ◆ load_script

    void(* tram::Script::Language::load_script) (const char *path)

    ◆ name

    name_t tram::Script::Language::name

    ◆ set_function

    void(* tram::Script::Language::set_function) (name_t name, std::vector< Type > parameters, value_t(*function)(valuearray_t))

    ◆ set_global

    void(* tram::Script::Language::set_global) (name_t name, value_t value)

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/script.h
    ================================================ FILE: docs/cppapi/structtram_1_1_scriptable_type_1_1_scriptable_type_info-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::ScriptableType::ScriptableTypeInfo Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_scriptable_type_1_1_scriptable_type_info.html ================================================ Tramway SDK: tram::ScriptableType::ScriptableTypeInfo Struct Reference
    Tramway SDK v0.1.1
    tram::ScriptableType::ScriptableTypeInfo Struct Reference

    Public Attributes

    name_t base_type
     
    Entity *(* constr_func )(name_t new_type, const SharedEntityData &, const ValueArray &) = nullptr
     
    void(* destr_func )(Entity *) = nullptr
     

    Member Data Documentation

    ◆ base_type

    name_t tram::ScriptableType::ScriptableTypeInfo::base_type

    ◆ constr_func

    Entity *(* tram::ScriptableType::ScriptableTypeInfo::constr_func) (name_t new_type, const SharedEntityData &, const ValueArray &) = nullptr

    ◆ destr_func

    void(* tram::ScriptableType::ScriptableTypeInfo::destr_func) (Entity *) = nullptr

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/entities/script.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_settings_1_1_property-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Settings::Property< T > Member List

    This is the complete list of members for tram::Settings::Property< T >, including all inherited members.

    operator T()tram::Settings::Property< T >inline
    Property(std::initializer_list< value_t > values)tram::Settings::Property< T >inline
    Property(const T &value)tram::Settings::Property< T >inline
    valuetram::Settings::Property< T >
    ================================================ FILE: docs/cppapi/structtram_1_1_settings_1_1_property.html ================================================ Tramway SDK: tram::Settings::Property< T > Struct Template Reference
    Tramway SDK v0.1.1
    tram::Settings::Property< T > Struct Template Reference

    #include <settings.h>

    Public Member Functions

     Property (std::initializer_list< value_t > values)
     
     Property (const T &value)
     
     operator T ()
     

    Public Attributes

    value
     

    Constructor & Destructor Documentation

    ◆ Property() [1/2]

    template<typename T >
    tram::Settings::Property< T >::Property ( std::initializer_list< value_t values)
    inline

    ◆ Property() [2/2]

    template<typename T >
    tram::Settings::Property< T >::Property ( const T &  value)
    inline

    Member Function Documentation

    ◆ operator T()

    template<typename T >
    tram::Settings::Property< T >::operator T ( )
    inline

    Member Data Documentation

    ◆ value

    template<typename T >
    T tram::Settings::Property< T >::value

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/settings.h
    ================================================ FILE: docs/cppapi/structtram_1_1_settings_1_1_raw_setting-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Settings::RawSetting Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_settings_1_1_raw_setting.html ================================================ Tramway SDK: tram::Settings::RawSetting Struct Reference
    Tramway SDK v0.1.1
    tram::Settings::RawSetting Struct Reference

    Public Attributes

    const char * key
     
    const char * value
     
    bool maybe_flag
     

    Member Data Documentation

    ◆ key

    const char* tram::Settings::RawSetting::key

    ◆ maybe_flag

    bool tram::Settings::RawSetting::maybe_flag

    ◆ value

    const char* tram::Settings::RawSetting::value

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/settings.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_settings_1_1_setting_info-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Settings::SettingInfo Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_settings_1_1_setting_info.html ================================================ Tramway SDK: tram::Settings::SettingInfo Struct Reference
    Tramway SDK v0.1.1
    tram::Settings::SettingInfo Struct Reference

    Public Attributes

    union {
       int32_t *   int32
     
       uint32_t *   uint32
     
       float *   float32
     
       bool *   bool32
     
    }; 
     
    Type type
     
    const char * name
     
    uint32_t flags
     

    Member Data Documentation

    ◆ 

    union { ... } tram::Settings::SettingInfo::@42

    ◆ bool32

    bool* tram::Settings::SettingInfo::bool32

    ◆ flags

    uint32_t tram::Settings::SettingInfo::flags

    ◆ float32

    float* tram::Settings::SettingInfo::float32

    ◆ int32

    int32_t* tram::Settings::SettingInfo::int32

    ◆ name

    const char* tram::Settings::SettingInfo::name

    ◆ type

    Type tram::Settings::SettingInfo::type

    ◆ uint32

    uint32_t* tram::Settings::SettingInfo::uint32

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/settings.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_shared_entity_data-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::SharedEntityData Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_shared_entity_data.html ================================================ Tramway SDK: tram::SharedEntityData Struct Reference
    Tramway SDK v0.1.1
    tram::SharedEntityData Struct Reference

    Basic Entity parameters. More...

    #include <framework/entity.h>

    Public Attributes

    name_t type
     
    uint64_t id = 0
     
    name_t name
     
    uint32_t flags = 0
     
    vec3 position = {0.0f, 0.0f, 0.0f}
     
    quat rotation = {1.0f, 0.0f, 0.0f, 0.0f}
     

    Detailed Description

    Basic Entity parameters.

    Used for Entity serialization. This struct contains the parameters that every Entity type shares in common.

    Member Data Documentation

    ◆ flags

    uint32_t tram::SharedEntityData::flags = 0

    ◆ id

    uint64_t tram::SharedEntityData::id = 0

    ◆ name

    name_t tram::SharedEntityData::name

    ◆ position

    vec3 tram::SharedEntityData::position = {0.0f, 0.0f, 0.0f}

    ◆ rotation

    quat tram::SharedEntityData::rotation = {1.0f, 0.0f, 0.0f, 0.0f}

    ◆ type

    name_t tram::SharedEntityData::type

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/entity.h
    ================================================ FILE: docs/cppapi/structtram_1_1_signal-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Signal Member List

    This is the complete list of members for tram::Signal, including all inherited members.

    ACTIVATE enum valuetram::Signal
    CLOSE enum valuetram::Signal
    datatram::Signal
    delaytram::Signal
    END_CLOSE enum valuetram::Signal
    END_OPEN enum valuetram::Signal
    ENTER_TRIGGER enum valuetram::Signal
    EXIT_TRIGGER enum valuetram::Signal
    GetName(signal_t type)tram::Signalstatic
    GetType(name_t name)tram::Signalstatic
    KILL enum valuetram::Signal
    LAST_SIGNAL enum valuetram::Signal
    limittram::Signal
    LOCKED_USE enum valuetram::Signal
    message_typetram::Signal
    NONE enum valuetram::Signal
    OPEN enum valuetram::Signal
    PROGRESS enum valuetram::Signal
    receivertram::Signal
    Register(const char *name)tram::Signalstatic
    SPAWN enum valuetram::Signal
    TRIGGER enum valuetram::Signal
    Type enum nametram::Signal
    typetram::Signal
    USE enum valuetram::Signal
    ================================================ FILE: docs/cppapi/structtram_1_1_signal.html ================================================ Tramway SDK: tram::Signal Struct Reference
    Tramway SDK v0.1.1

    Message template. More...

    #include <framework/signal.h>

    Public Types

    enum  Type : signal_t {
      NONE , SPAWN , KILL , ACTIVATE ,
      USE , LOCKED_USE , OPEN , CLOSE ,
      END_OPEN , END_CLOSE , TRIGGER , ENTER_TRIGGER ,
      EXIT_TRIGGER , PROGRESS , LAST_SIGNAL
    }
     

    Static Public Member Functions

    static signal_t Register (const char *name)
     Registers a new message type. More...
     
    static signal_t GetType (name_t name)
     Finds a message type from a name. More...
     
    static name_t GetName (signal_t type)
     Gets a nessage type name. More...
     

    Public Attributes

    signal_t type = NONE
     
    name_t receiver
     
    void * data
     
    float delay
     
    int limit
     
    message_t message_type
     

    Detailed Description

    Message template.

    Table of Message templates that can be sent off by entities on certain triggers.

    See also
    https://racenis.github.io/tram-sdk/documentation/framework/signal.html

    Member Enumeration Documentation

    ◆ Type

    Enumerator
    NONE 
    SPAWN 
    KILL 
    ACTIVATE 
    USE 
    LOCKED_USE 
    OPEN 
    CLOSE 
    END_OPEN 
    END_CLOSE 
    TRIGGER 
    ENTER_TRIGGER 
    EXIT_TRIGGER 
    PROGRESS 
    LAST_SIGNAL 

    Member Function Documentation

    ◆ GetName()

    name_t tram::Signal::GetName ( signal_t  type)
    static

    Gets a nessage type name.

    ◆ GetType()

    signal_t tram::Signal::GetType ( name_t  name)
    static

    Finds a message type from a name.

    ◆ Register()

    signal_t tram::Signal::Register ( const char *  name)
    static

    Registers a new message type.

    Returns
    Unique message type number.

    Member Data Documentation

    ◆ data

    void* tram::Signal::data

    ◆ delay

    float tram::Signal::delay

    ◆ limit

    int tram::Signal::limit

    ◆ message_type

    message_t tram::Signal::message_type

    ◆ receiver

    name_t tram::Signal::receiver

    ◆ type

    signal_t tram::Signal::type = NONE

    The documentation for this struct was generated from the following files:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/signal.h
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/signal.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_stats_1_1_system_stat-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::Stats::SystemStat Member List
    ================================================ FILE: docs/cppapi/structtram_1_1_stats_1_1_system_stat.html ================================================ Tramway SDK: tram::Stats::SystemStat Struct Reference
    Tramway SDK v0.1.1
    tram::Stats::SystemStat Struct Reference

    Public Attributes

    double time_started = -1.0f
     
    double time_spent = 0.0f
     
    double time_spent_collated = 0.0f
     
    double time_spent_total = 0.0f
     
    double time_spent_average = 0.0f
     
    double time_spent_average_collated = 0.0f
     
    int average_count = 0
     

    Member Data Documentation

    ◆ average_count

    int tram::Stats::SystemStat::average_count = 0

    ◆ time_spent

    double tram::Stats::SystemStat::time_spent = 0.0f

    ◆ time_spent_average

    double tram::Stats::SystemStat::time_spent_average = 0.0f

    ◆ time_spent_average_collated

    double tram::Stats::SystemStat::time_spent_average_collated = 0.0f

    ◆ time_spent_collated

    double tram::Stats::SystemStat::time_spent_collated = 0.0f

    ◆ time_spent_total

    double tram::Stats::SystemStat::time_spent_total = 0.0f

    ◆ time_started

    double tram::Stats::SystemStat::time_started = -1.0f

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/stats.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_system_1_1_system_info-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::System::SystemInfo Member List

    This is the complete list of members for tram::System::SystemInfo, including all inherited members.

    nametram::System::SystemInfo
    short_nametram::System::SystemInfo
    statetram::System::SystemInfo
    ================================================ FILE: docs/cppapi/structtram_1_1_system_1_1_system_info.html ================================================ Tramway SDK: tram::System::SystemInfo Struct Reference
    Tramway SDK v0.1.1
    tram::System::SystemInfo Struct Reference

    Public Attributes

    char const * name
     
    char const * short_name
     
    SystemState state
     

    Member Data Documentation

    ◆ name

    char const* tram::System::SystemInfo::name

    ◆ short_name

    char const* tram::System::SystemInfo::short_name

    ◆ state

    SystemState tram::System::SystemInfo::state

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/system.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_trigger_poll_callback-members.html ================================================ Tramway SDK: Member List
    Tramway SDK
    tram::TriggerPollCallback Member List

    This is the complete list of members for tram::TriggerPollCallback, including all inherited members.

    addSingleResult(btManifoldPoint &cp, const btCollisionObjectWrapper *coll_obj0, int, int, const btCollisionObjectWrapper *coll_obj1, int, int)tram::TriggerPollCallbackinline
    collisionstram::TriggerPollCallback
    TriggerPollCallback(std::vector< Physics::Collision > &collisions)tram::TriggerPollCallbackinline
    ================================================ FILE: docs/cppapi/structtram_1_1_trigger_poll_callback.html ================================================ Tramway SDK: tram::TriggerPollCallback Struct Reference
    Tramway SDK
    tram::TriggerPollCallback Struct Reference
    Inheritance diagram for tram::TriggerPollCallback:

    Public Member Functions

     TriggerPollCallback (std::vector< Physics::Collision > &collisions)
     
    btScalar addSingleResult (btManifoldPoint &cp, const btCollisionObjectWrapper *coll_obj0, int, int, const btCollisionObjectWrapper *coll_obj1, int, int)
     

    Public Attributes

    std::vector< Physics::Collision > & collisions
     

    Constructor & Destructor Documentation

    ◆ TriggerPollCallback()

    tram::TriggerPollCallback::TriggerPollCallback ( std::vector< Physics::Collision > &  collisions)
    inline

    Member Function Documentation

    ◆ addSingleResult()

    btScalar tram::TriggerPollCallback::addSingleResult ( btManifoldPoint &  cp,
    const btCollisionObjectWrapper *  coll_obj0,
    int  ,
    int  ,
    const btCollisionObjectWrapper *  coll_obj1,
    int  ,
    int   
    )
    inline

    Member Data Documentation

    ◆ collisions

    std::vector<Physics::Collision>& tram::TriggerPollCallback::collisions

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/components/trigger.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_u_i_1_1_key_binding-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::UI::KeyBinding Member List

    This is the complete list of members for tram::UI::KeyBinding, including all inherited members.

    actiontram::UI::KeyBinding
    special_optiontram::UI::KeyBinding
    special_option2tram::UI::KeyBinding
    ================================================ FILE: docs/cppapi/structtram_1_1_u_i_1_1_key_binding.html ================================================ Tramway SDK: tram::UI::KeyBinding Struct Reference
    Tramway SDK v0.1.1
    tram::UI::KeyBinding Struct Reference

    Public Attributes

    keyboardaction_t action = KEY_ACTION_NONE
     
    void(* special_option )(void) = nullptr
     
    void(* special_option2 )(KeyboardKey) = nullptr
     

    Member Data Documentation

    ◆ action

    keyboardaction_t tram::UI::KeyBinding::action = KEY_ACTION_NONE

    ◆ special_option

    void(* tram::UI::KeyBinding::special_option) (void) = nullptr

    ◆ special_option2

    void(* tram::UI::KeyBinding::special_option2) (KeyboardKey) = nullptr

    The documentation for this struct was generated from the following file:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/ui.cpp
    ================================================ FILE: docs/cppapi/structtram_1_1_u_i_d-members.html ================================================ Tramway SDK: Member List
    Tramway SDK v0.1.1
    tram::UID Member List

    This is the complete list of members for tram::UID, including all inherited members.

    is_empty(const char *)tram::UIDstatic
    is_valid(const UID &)tram::UIDstatic
    keytram::UID
    no_quote(const char *)tram::UIDstatic
    operator bool()tram::UIDinlineexplicit
    operator char const *() consttram::UID
    operator std::string() consttram::UID
    operator=(const UID &value)tram::UIDinline
    operator==(const UID &other) consttram::UIDinline
    operator==(const char *other) consttram::UIDinline
    UID()tram::UIDinline
    UID(const UID &value)tram::UIDinline
    UID(const std::string &value)tram::UID
    UID(const char *value)tram::UID
    ~UID()tram::UIDinline
    ================================================ FILE: docs/cppapi/structtram_1_1_u_i_d.html ================================================ Tramway SDK: tram::UID Struct Reference
    Tramway SDK v0.1.1

    Interned string type. More...

    #include <framework/uid.h>

    Public Member Functions

     UID ()
     
     UID (const UID &value)
     
     ~UID ()
     
     UID (const std::string &value)
     
     UID (const char *value)
     Interns a string. More...
     
    UIDoperator= (const UID &value)
     
    bool operator== (const UID &other) const
     
    bool operator== (const char *other) const
     
     operator bool ()
     
     operator std::string () const
     
     operator char const * () const
     

    Static Public Member Functions

    static bool no_quote (const char *)
     Checks whether the name will need quotes. More...
     
    static bool is_empty (const char *)
     Checks whether a string consists of only whitespace. More...
     
    static bool is_valid (const UID &)
     Checks whether the name is valid. More...
     

    Public Attributes

    uint32_t key = 0
     

    Detailed Description

    Interned string type.

    Should intern strings in O(1) as long as the total number of interned strings is lower than UID_LIMIT. In either case, interned string comparison will always be O(1). If you are converting a lot of strings, it is best to do so early, because the internment process, altough nearly constant time, does, in fact, take some time.

    See also
    https://racenis.github.io/tram-sdk/documentation/framework/uid.html

    Constructor & Destructor Documentation

    ◆ UID() [1/4]

    tram::UID::UID ( )
    inline

    ◆ UID() [2/4]

    tram::UID::UID ( const UID value)
    inline

    ◆ ~UID()

    tram::UID::~UID ( )
    inline

    ◆ UID() [3/4]

    tram::UID::UID ( const std::string &  value)

    ◆ UID() [4/4]

    tram::UID::UID ( const char *  value)

    Interns a string.

    This will intern the string and return a little UID that you can put in your little pockets and take away with you. For best results I recommend using the no_quotes() and is_empty() functions to first check whether a given string will also be a good name. A string that isn't empty and doesn't need quotes is a good name.

    Parameters
    valueThe string which will be interned.
    Note
    Empty strings and

    Member Function Documentation

    ◆ is_empty()

    bool tram::UID::is_empty ( const char *  str)
    static

    Checks whether a string consists of only whitespace.

    Returns
    True, if string contains at least a single non-whitespace character.

    ◆ is_valid()

    bool tram::UID::is_valid ( const UID value)
    static

    Checks whether the name is valid.

    Due to bad memory handling practices, it is possible to create a name with such a key, that when this name's string is looked up from the string table and dereferenced, a segfault occurs. This function checks whether a segfault is likely to occur when given a name to check. This is done by a simple bounds check on the string table.

    Returns
    True, if using a name is safe.

    ◆ no_quote()

    bool tram::UID::no_quote ( const char *  str)
    static

    Checks whether the name will need quotes.

    When parsing a name from a text file, if a name has spaces in it, then it will require quotes around it to be parsed in correctly. This function checks whether a certain string will be able to be parsed as a name correctly, without quotes.

    Returns
    True, if the string won't need quotes.

    ◆ operator bool()

    tram::UID::operator bool ( )
    inlineexplicit

    ◆ operator char const *()

    tram::UID::operator char const * ( ) const

    ◆ operator std::string()

    tram::UID::operator std::string ( ) const

    ◆ operator=()

    UID & tram::UID::operator= ( const UID value)
    inline

    ◆ operator==() [1/2]

    bool tram::UID::operator== ( const char *  other) const
    inline

    ◆ operator==() [2/2]

    bool tram::UID::operator== ( const UID other) const
    inline

    Member Data Documentation

    ◆ key

    uint32_t tram::UID::key = 0

    The documentation for this struct was generated from the following files:
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/uid.h
    • C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/uid.cpp
    ================================================ FILE: docs/cppapi/system_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/system.cpp File Reference
    Tramway SDK
    system.cpp File Reference
    #include <framework/system.h>
    #include <cassert>

    Classes

    struct  tram::System::SystemInfo
     

    Namespaces

    namespace  tram
     
    namespace  tram::System
     

    Functions

    uint32_t tram::System::Register (char const *name, char const *short_name)
     Registers a new system. More...
     
    char const * tram::System::GetName (uint32_t system)
     Retrieves the full name of a system. More...
     
    char const * tram::System::GetShortName (uint32_t system)
     Retrieves the short name of a system. More...
     
    void tram::System::SetInitialized (uint32_t system, bool is_initialized)
     Sets the initialization status of a system. More...
     
    bool tram::System::IsInitialized (uint32_t system)
     Checks if a system is initialized. More...
     
    void tram::System::SetUpdated (uint32_t system, bool is_updated)
     Sets the update status of a system. More...
     
    bool tram::System::IsUpdated (uint32_t system)
     Checks if a system is updated. More...
     
    system_t tram::System::GetSystemCount ()
     Returns the total count of registered systems. More...
     
    ================================================ FILE: docs/cppapi/system_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/system.h File Reference
    Tramway SDK
    system.h File Reference
    #include <cstdint>

    Go to the source code of this file.

    Namespaces

    namespace  tram
     
    namespace  tram::System
     

    Typedefs

    typedef uint32_t tram::System::system_t
     

    Enumerations

    enum  tram::System::System : system_t {
      tram::System::SYSTEM_CORE , tram::System::SYSTEM_PLATFORM , tram::System::SYSTEM_UI , tram::System::SYSTEM_GUI ,
      tram::System::SYSTEM_ASYNC , tram::System::SYSTEM_RENDER , tram::System::SYSTEM_PHYSICS , tram::System::SYSTEM_AUDIO ,
      tram::System::SYSTEM_MISC , tram::System::SYSTEM_LAST
    }
     

    Functions

    uint32_t tram::System::Register (char const *name, char const *short_name)
     Registers a new system. More...
     
    void tram::System::SetInitialized (uint32_t system, bool is_initialized)
     Sets the initialization status of a system. More...
     
    bool tram::System::IsInitialized (uint32_t system)
     Checks if a system is initialized. More...
     
    void tram::System::SetUpdated (uint32_t system, bool is_updated)
     Sets the update status of a system. More...
     
    bool tram::System::IsUpdated (uint32_t system)
     Checks if a system is updated. More...
     
    char const * tram::System::GetName (uint32_t system)
     Retrieves the full name of a system. More...
     
    char const * tram::System::GetShortName (uint32_t system)
     Retrieves the short name of a system. More...
     
    system_t tram::System::GetSystemCount ()
     Returns the total count of registered systems. More...
     
    ================================================ FILE: docs/cppapi/system_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/system.h Source File
    Tramway SDK
    system.h
    Go to the documentation of this file.
    1// TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022
    2// All rights reserved.
    3
    4#ifndef TRAM_SDK_FRAMEWORK_SYSTEM_H
    5#define TRAM_SDK_FRAMEWORK_SYSTEM_H
    6
    7#include <cstdint>
    8
    9namespace tram::System {
    10
    11typedef uint32_t system_t;
    23};
    24
    25system_t Register(char const* name, char const* short_name);
    26void SetInitialized(system_t system, bool is_initialized);
    27bool IsInitialized(system_t system);
    28void SetUpdated(system_t system, bool is_updated);
    29bool IsUpdated(system_t system);
    30char const* GetName(system_t system);
    31char const* GetShortName(system_t system);
    32uint32_t GetSystemCount();
    33
    34}
    35
    36#endif // TRAM_SDK_FRAMEWORK_SYSTEM_H
    Definition: system.cpp:7
    System
    Definition: system.h:12
    @ SYSTEM_LAST
    Definition: system.h:22
    @ SYSTEM_ASYNC
    Definition: system.h:17
    @ SYSTEM_RENDER
    Definition: system.h:18
    @ SYSTEM_PHYSICS
    Definition: system.h:19
    @ SYSTEM_GUI
    Definition: system.h:16
    @ SYSTEM_CORE
    Definition: system.h:13
    @ SYSTEM_UI
    Definition: system.h:15
    @ SYSTEM_MISC
    Definition: system.h:21
    @ SYSTEM_AUDIO
    Definition: system.h:20
    @ SYSTEM_PLATFORM
    Definition: system.h:14
    bool IsInitialized(uint32_t system)
    Checks if a system is initialized.
    Definition: system.cpp:65
    void SetUpdated(uint32_t system, bool is_updated)
    Sets the update status of a system.
    Definition: system.cpp:74
    void SetInitialized(uint32_t system, bool is_initialized)
    Sets the initialization status of a system.
    Definition: system.cpp:59
    char const * GetName(uint32_t system)
    Retrieves the full name of a system.
    Definition: system.cpp:47
    system_t GetSystemCount()
    Returns the total count of registered systems.
    Definition: system.cpp:89
    uint32_t system_t
    Definition: system.h:11
    bool IsUpdated(uint32_t system)
    Checks if a system is updated.
    Definition: system.cpp:80
    char const * GetShortName(uint32_t system)
    Retrieves the short name of a system.
    Definition: system.cpp:53
    uint32_t Register(char const *name, char const *short_name)
    Registers a new system.
    Definition: system.cpp:33
    ================================================ FILE: docs/cppapi/tabs.css ================================================ .sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:#666;-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} ================================================ FILE: docs/cppapi/template_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/audio/template/template.cpp File Reference
    Tramway SDK v0.1.1
    template.cpp File Reference

    Template for Audio backend implementations. More...

    #include <audio/api.h>
    #include <framework/logging.h>

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Audio
     System for doing audio related stuff.
     
    namespace  tram::Audio::API
     Audio backend API.
     

    Functions

    void tram::Audio::API::Init ()
     
    void tram::Audio::API::Update ()
     
    void tram::Audio::API::Uninit ()
     
    void tram::Audio::API::SetListenerPosition (vec3 position)
     Sets the listener position. More...
     
    void tram::Audio::API::SetListenerOrientation (quat orientation)
     Sets the listener orientation. More...
     
    audiobuffer_t tram::Audio::API::MakeAudioBuffer (const int16_t *audio_data, int32_t length, int32_t samples, int32_t channels)
     Creates audio buffers from raw audio data. More...
     
    void tram::Audio::API::RemoveAudioBuffer (audiobuffer_t buffer)
     Deletes audio buffers. More...
     
    audiosource_t tram::Audio::API::MakeAudioSource ()
     Creates an audio source. More...
     
    void tram::Audio::API::SetAudioSourcePitch (audiosource_t source, float pitch)
     Sets the pitch of an audio source. More...
     
    void tram::Audio::API::SetAudioSourceGain (audiosource_t source, float gain)
     Sets the gain of an audio source. More...
     
    void tram::Audio::API::SetAudioSourcePosition (audiosource_t source, vec3 position)
     Sets the position of an audio source. More...
     
    void tram::Audio::API::SetAudioSourceVelocity (audiosource_t source, vec3 velocity)
     Sets the velocity of an audio source. More...
     
    void tram::Audio::API::SetAudioSourceRepeating (audiosource_t source, bool repeating)
     Sets the repetition of an audio source. More...
     
    void tram::Audio::API::SetAudioSourceBuffer (audiosource_t source, audiobuffer_t buffer)
     Sets the buffers that the audio source will play. More...
     
    void tram::Audio::API::PlayAudioSource (audiosource_t source)
     Plays an audio source. More...
     
    void tram::Audio::API::PauseAudioSource (audiosource_t source)
     Pauses the audio source. More...
     
    void tram::Audio::API::StopAudioSource (audiosource_t source)
     Stops the audio source. More...
     
    bool tram::Audio::API::IsAudioSourcePlaying (audiosource_t source)
     Checks if an audio source is playing. More...
     
    void tram::Audio::API::RemoveAudioSource (audiosource_t source)
     Deletes an audio source. More...
     

    Detailed Description

    Template for Audio backend implementations.

    This template can also be used as a blank Audio backend if no audio is needed to be played and the system won't be used.

    ================================================ FILE: docs/cppapi/template_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/template.h File Reference
    Tramway SDK v0.1.1
    template.h File Reference

    Go to the source code of this file.

    Classes

    class  tram::TemplateComponent
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    ================================================ FILE: docs/cppapi/template_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/template.h Source File
    Tramway SDK v0.1.1
    template.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_COMPONENTS_TEMPLATECOMPONENT_H
    4#define TRAM_SDK_COMPONENTS_TEMPLATECOMPONENT_H
    5
    7
    8namespace tram {
    9
    11public:
    14 void Init();
    15 void Start();
    16 void EventHandler(Event &event);
    17};
    18
    19}
    20
    21#endif // TRAM_SDK_COMPONENTS_TEMPLATECOMPONENT_H
    Component base class.
    Definition: entitycomponent.h:16
    Definition: template.h:10
    void Init()
    Initializes an entity component.
    void EventHandler(Event &event)
    Serialization, i.e.
    Event data.
    Definition: event.h:24
    ================================================ FILE: docs/cppapi/templates_2aabb_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/aabb.h File Reference
    Tramway SDK
    aabb.h File Reference
    #include <framework/math.h>
    #include <framework/logging.h>
    #include <framework/core.h>
    #include <iostream>
    #include <vector>

    Go to the source code of this file.

    Classes

    class  tram::AABBTree
     
    struct  tram::AABBTree::Node
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    ================================================ FILE: docs/cppapi/templates_2aabb_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/aabb.h Source File
    Tramway SDK
    aabb.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_TEMPLATES_AABB_H
    4#define TRAM_SDK_TEMPLATES_AABB_H
    5
    6#include <framework/math.h>
    7#include <framework/logging.h>
    8#include <framework/core.h>
    9
    10#include <iostream>
    11
    12#include <vector>
    13
    14namespace tram {
    15
    16class AABBTree {
    17public:
    21 }
    22
    23 vec3 GetAABBMin() { return root->min; }
    24 vec3 GetAABBMax() { return root->max; }
    25
    26 struct Node;
    27
    28 Node* InsertLeaf (uint32_t value, vec3 min, vec3 max) {
    29 Node* new_node = new Node;
    30
    31 new_node->value = value;
    32
    33 new_node->min = min;
    34 new_node->max = max;
    35
    36 if (root->left == nullptr) {
    37 root->left = new_node;
    38 new_node->parent = root;
    39
    40 if (root->right) {
    42 } else {
    43 root->min = new_node->min;
    44 root->max = new_node->max;
    45 }
    46
    47 return new_node;
    48 }
    49
    50 if (root->right == nullptr) {
    51 root->right = new_node;
    52 new_node->parent = root;
    53
    54 if (root->left) {
    56 } else {
    57 root->min = new_node->min;
    58 root->max = new_node->max;
    59 }
    60
    61 return new_node;
    62 }
    63
    64 Node* sibling = FindSibling(min, max, root);
    65 Node* sibling_parent = sibling->parent;
    66 Node* new_parent = new Node;
    67
    68 if (sibling_parent->left == sibling) {
    69 sibling_parent->left = new_parent;
    70 } else if (sibling_parent->right == sibling) {
    71 sibling_parent->right = new_parent;
    72 } else {
    73 assert(false);
    74 }
    75
    76 new_parent->parent = sibling_parent;
    77
    78 new_parent->left = new_node;
    79 new_parent->right = sibling;
    80
    81 sibling->parent = new_parent;
    82 new_node->parent = new_parent;
    83
    84 UpdateParentAABB(new_parent);
    85
    87
    88 return new_node;
    89 }
    90
    91 void RemoveLeaf(Node* node) {
    92 assert(node);
    93
    94 Node* parent = node->parent;
    95 Node* sibling = parent->left == node ? parent->right : parent->left;
    96
    97 if (parent->left != node && parent->right != node) {
    98 assert(false);
    99 }
    100
    101 if (parent == root) {
    102 if (parent->left == node) {
    103 parent->left = nullptr;
    104
    105 if (sibling) {
    106 parent->min = sibling->min;
    107 parent->max = sibling->max;
    108 }
    109 } else {
    110 parent->right = nullptr;
    111
    112 if (sibling) {
    113 parent->min = sibling->min;
    114 parent->max = sibling->max;
    115 }
    116 }
    117
    118 delete node;
    119
    121
    122 return;
    123 }
    124
    125 Node* grandparent = parent->parent;
    126
    127 if (grandparent->left == parent) {
    128 grandparent->left = sibling;
    129 } else {
    130 grandparent->right = sibling;
    131 }
    132
    133 sibling->parent = grandparent;
    134
    135 UpdateParentAABB(grandparent);
    136
    137 delete node;
    138 delete parent;
    139
    141 }
    142
    143 void RemoveHierarchy(Node* node) {
    144 if (node->IsLeaf()) {
    145 delete node;
    146 } else {
    147 RemoveHierarchy(node->left);
    148 RemoveHierarchy(node->right);
    149 delete node;
    150 }
    151 }
    152
    153 void FindIntersection (vec3 ray_pos, vec3 ray_dir, Node* node, std::vector<uint32_t>& result) {
    154 bool is_node_intersect = AABBIntersect(ray_pos, ray_dir, node->min, node->max);
    155
    156 if (is_node_intersect) {
    157 if (node->IsLeaf() && node != root) {
    158 result.push_back(node->value);
    159 } else {
    160 if (node->left) FindIntersection (ray_pos, ray_dir, node->left, result);
    161 if (node->right) FindIntersection (ray_pos, ray_dir, node->right, result);
    162 }
    163 }
    164 }
    165
    166//private:
    167
    168 void UpdateParentAABB (Node* node) {
    169 assert(!node->IsLeaf());
    170
    171 Node* left_child = node->left;
    172 Node* right_child = node->right;
    173
    174 if (!left_child || !right_child) {
    175 assert(node == root);
    176
    177 if (!left_child && right_child) {
    178 node->min = right_child->min;
    179 node->max = right_child->max;
    180 } else if (left_child && !right_child) {
    181 node->min = left_child->min;
    182 node->max = left_child->max;
    183 } else {
    184 node->min = {0.0f, 0.0f, 0.0f};
    185 node->max = {0.0f, 0.0f, 0.0f};
    186 }
    187
    188 return;
    189 }
    190
    191
    192 node->min = MergeAABBMin(left_child->min, right_child->min);
    193 node->max = MergeAABBMax(left_child->max, right_child->max);
    194
    195 if (node->parent != nullptr) {
    197 }
    198
    199 assert(node->parent != node);
    200 }
    201
    202 // searches the children of search_node to find a sibling for target_node
    203 Node* FindSibling (vec3 min, vec3 max, Node* node) {
    204 assert(node);
    205
    206 if (node->IsLeaf()) {
    207 return node;
    208 }
    209
    210 if (node->left == nullptr) {
    211 assert(false);
    212 }
    213 assert(node->left);
    214 assert(node->right);
    215
    216 vec3 left_merge_min = MergeAABBMin(min, node->left->min);
    217 vec3 left_merge_max = MergeAABBMax(max, node->left->max);
    218
    219 vec3 right_merge_min = MergeAABBMin(min, node->right->min);
    220 vec3 right_merge_max = MergeAABBMax(max, node->right->max);
    221
    222 float left_merge_volume = AABBVolume(left_merge_min, left_merge_max);
    223 float right_merge_volume = AABBVolume(right_merge_min, right_merge_max);
    224
    225 //float left_merge_volume = AABBSurface(left_merge_min, left_merge_max);
    226 //float right_merge_volume = AABBSurface(right_merge_min, right_merge_max);
    227
    228 if (left_merge_volume < right_merge_volume) {
    229 return FindSibling(min, max, node->left);
    230 } else {
    231 return FindSibling(min, max, node->right);
    232 }
    233 }
    234
    235
    236 void ValidateTree (Node* node) {
    237 return;
    238 if (root->parent != nullptr) {
    239 //if (((Node*)0)->IsLeaf()) assert(false);
    240 }
    241
    242 return;
    243 ValidateTree (node, 0);
    244 }
    245 void ValidateTree (Node* node, size_t num) {
    246 assert(node);
    247 assert((long long)node > 100);
    248
    249 if (num > 400) {
    250 //if (((Node*)0)->IsLeaf()) assert(false);
    251 }
    252
    253 if (node->IsLeaf() && node != root) {
    254 //assert(node->value < 40000);
    255 } else {
    256 if (node != root || (node == root && node->left))ValidateTree(node->left, num+1);
    257 if (node != root || (node == root && node->right))ValidateTree(node->right, num+1);
    258 }
    259 }
    260
    261 static vec3 MergeAABBMin (vec3 a, vec3 b) {
    262 return vec3 {
    263 a.x < b.x ? a.x : b.x,
    264 a.y < b.y ? a.y : b.y,
    265 a.z < b.z ? a.z : b.z
    266 };// - vec3 {0.1f, 0.1f, 0.1f};
    267 }
    268
    269 static vec3 MergeAABBMax (vec3 a, vec3 b) {
    270 return vec3 {
    271 a.x > b.x ? a.x : b.x,
    272 a.y > b.y ? a.y : b.y,
    273 a.z > b.z ? a.z : b.z
    274 };// + vec3 {0.1f, 0.1f, 0.1f};
    275 }
    276
    277 static float AABBVolume (vec3 min, vec3 max) {
    278 return (max.x - min.x) * (max.y - min.y) * (max.z - min.z);
    279 }
    280
    281 static float AABBSurface (vec3 min, vec3 max) {
    282 float x = max.x - min.x;
    283 float y = max.y - min.y;
    284 float z = max.z - min.z;
    285
    286 assert(max.x >= min.x);
    287 assert(max.y >= min.y);
    288 assert(max.z >= min.z);
    289
    290 return 2 * ((x * y) + (x * z) + (y * z));
    291 }
    292
    293 static bool AABBIntersect (vec3 ray_pos, vec3 ray_dir, vec3 min, vec3 max) {
    294 vec3 t1 = (min - ray_pos) / ray_dir; // what happens if ray_dir == 0.0f?
    295 vec3 t2 = (max - ray_pos) / ray_dir; // TODO: check
    296
    297 vec3 t1min = glm::min(t1, t2);
    298 vec3 t2max = glm::max(t1, t2);
    299
    300 float tnear = glm::max(glm::max(t1min.x, t1min.y), t1min.z);
    301 float tfar = glm::min(glm::min(t2max.x, t2max.y), t2max.z);
    302
    303 return tfar >= tnear;
    304 }
    305
    306 struct Node {
    307 bool IsLeaf () const { return right == 0; }
    308
    309 void Print () const { std::cout << " l: " << left << " r: " << right << " p: " << parent << std::endl; }
    310
    311 union {
    312 Node* left = nullptr;
    313 uint32_t value;
    314 };
    315
    316 Node* right = nullptr;
    317 Node* parent = nullptr;
    318
    321 };
    322
    323 Node* root = new Node {nullptr, nullptr, nullptr, {0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f}};
    324};
    325
    326}
    327
    328#endif // TRAM_SDK_TEMPLATES_AABB_H
    Definition: aabb.h:16
    Node * InsertLeaf(uint32_t value, vec3 min, vec3 max)
    Definition: aabb.h:28
    static bool AABBIntersect(vec3 ray_pos, vec3 ray_dir, vec3 min, vec3 max)
    Definition: aabb.h:293
    ~AABBTree()
    Definition: aabb.h:19
    void UpdateParentAABB(Node *node)
    Definition: aabb.h:168
    void ValidateTree(Node *node)
    Definition: aabb.h:236
    AABBTree()
    Definition: aabb.h:18
    vec3 GetAABBMax()
    Definition: aabb.h:24
    Node * root
    Definition: aabb.h:323
    static float AABBVolume(vec3 min, vec3 max)
    Definition: aabb.h:277
    static vec3 MergeAABBMax(vec3 a, vec3 b)
    Definition: aabb.h:269
    void RemoveLeaf(Node *node)
    Definition: aabb.h:91
    void RemoveHierarchy(Node *node)
    Definition: aabb.h:143
    static vec3 MergeAABBMin(vec3 a, vec3 b)
    Definition: aabb.h:261
    Node * FindSibling(vec3 min, vec3 max, Node *node)
    Definition: aabb.h:203
    vec3 GetAABBMin()
    Definition: aabb.h:23
    void ValidateTree(Node *node, size_t num)
    Definition: aabb.h:245
    void FindIntersection(vec3 ray_pos, vec3 ray_dir, Node *node, std::vector< uint32_t > &result)
    Definition: aabb.h:153
    static float AABBSurface(vec3 min, vec3 max)
    Definition: aabb.h:281
    Serialization, i.e.
    glm::vec3 vec3
    Definition: math.h:11
    Definition: aabb.h:306
    Node * left
    Definition: aabb.h:312
    Node * right
    Definition: aabb.h:316
    bool IsLeaf() const
    Definition: aabb.h:307
    Node * parent
    Definition: aabb.h:317
    vec3 max
    Definition: aabb.h:320
    vec3 min
    Definition: aabb.h:319
    uint32_t value
    Definition: aabb.h:313
    void Print() const
    Definition: aabb.h:309
    Definition: graph.h:16
    ================================================ FILE: docs/cppapi/test_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/test.h File Reference
    Tramway SDK v0.1.1
    test.h File Reference
    #include <cstdio>
    #include <cstring>

    Go to the source code of this file.

    Classes

    struct  _test_case
     

    Macros

    #define ASSERT(X)   if (!(X)) { printf("Assert %s fail on line %i\n", #X, __LINE__); _last_test_case->fail(); } else { _last_test_case->succ(); }
     
    #define TEST_CASE(X, Y)
     
    #define START_TEST    int main(int argc, char** argv) {
     
    #define END_TEST
     

    Macro Definition Documentation

    ◆ ASSERT

    #define ASSERT (   X)    if (!(X)) { printf("Assert %s fail on line %i\n", #X, __LINE__); _last_test_case->fail(); } else { _last_test_case->succ(); }

    ◆ END_TEST

    #define END_TEST
    Value:
    bool fail = false;\
    \
    printf("\nRESULTS:\n");\
    \
    for (int i = 0; i < _test_case_count; i++) {\
    auto c = &_all_test_cases[i];\
    \
    if (c->fail_asserts > 0) {\
    fail = true;\
    }\
    \
    int p = c->totl_asserts - c->fail_asserts;\
    int t = c->totl_asserts;\
    \
    printf("Test %s %s (%i/%i)\n", c->fullname, c->abbrv, p, t);\
    }\
    \
    return fail ? -1 : 0;\
    }
    int totl_asserts
    Definition: test.h:16

    ◆ START_TEST

    #define START_TEST    int main(int argc, char** argv) {

    ◆ TEST_CASE

    #define TEST_CASE (   X,
     
    )
    Value:
    _last_test_case = &_all_test_cases[_test_case_count]; \
    _test_case_count++; \
    \
    _last_test_case->fullname = X; \
    _last_test_case->abbrv = Y;
    const char * fullname
    Definition: test.h:13
    ================================================ FILE: docs/cppapi/test_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/templates/test.h Source File
    Tramway SDK v0.1.1
    test.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_TEMPLATES_TEST_H
    4#define TRAM_SDK_TEMPLATES_TEST_H
    5
    6#include <cstdio>
    7#include <cstring>
    8
    9// This is the framwork for testing the library.
    10// It not actually part of library. But only test. I am testing.
    11
    12struct _test_case {
    13 const char* fullname;
    14 const char* abbrv;
    15
    16 int totl_asserts = 0;
    17 int fail_asserts = 0;
    18
    19 void fail() {
    22 }
    23
    24 void succ() {
    26 }
    27};
    28
    29static _test_case _all_test_cases[100];
    30static int _test_case_count = 0;
    31static _test_case* _last_test_case = nullptr;
    32
    33#define ASSERT(X) if (!(X)) { printf("Assert %s fail on line %i\n", #X, __LINE__); _last_test_case->fail(); } else { _last_test_case->succ(); }
    34
    35
    36
    37
    38
    39
    40
    41#define TEST_CASE(X, Y) \
    42 _last_test_case = &_all_test_cases[_test_case_count]; \
    43 _test_case_count++; \
    44 \
    45 _last_test_case->fullname = X; \
    46 _last_test_case->abbrv = Y;
    47
    48
    49#define START_TEST \
    50 int main(int argc, char** argv) {
    51
    52#define END_TEST \
    53 bool fail = false;\
    54\
    55printf("\nRESULTS:\n");\
    56\
    57 for (int i = 0; i < _test_case_count; i++) {\
    58 auto c = &_all_test_cases[i];\
    59 \
    60 if (c->fail_asserts > 0) {\
    61 fail = true;\
    62 }\
    63 \
    64 int p = c->totl_asserts - c->fail_asserts;\
    65 int t = c->totl_asserts;\
    66 \
    67 printf("Test %s %s (%i/%i)\n", c->fullname, c->abbrv, p, t);\
    68 }\
    69\
    70 return fail ? -1 : 0;\
    71}
    72
    73
    74#endif // TRAM_SDK_TEMPLATES_TEST_H
    Definition: test.h:12
    const char * fullname
    Definition: test.h:13
    void succ()
    Definition: test.h:24
    const char * abbrv
    Definition: test.h:14
    void fail()
    Definition: test.h:19
    int totl_asserts
    Definition: test.h:16
    int fail_asserts
    Definition: test.h:17
    ================================================ FILE: docs/cppapi/texture_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/texture.cpp File Reference
    Tramway SDK v0.1.1
    texture.cpp File Reference
    #include <render/opengl/texture.h>
    #include <config.h>
    #include <GL/gl.h>
    #include <GLES3/gl3.h>

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Render
     High-level Render system API.
     
    namespace  tram::Render::API
     Rendering backend API.
     

    Functions

    texturehandle_t tram::Render::API::CreateTexture (ColorMode color_mode, TextureFilter texture_filter, uint32_t width, uint32_t height, void *data)
     
    ================================================ FILE: docs/cppapi/texture_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/texture.h File Reference
    Tramway SDK v0.1.1
    texture.h File Reference
    #include <render/render.h>
    #include <render/renderer.h>

    Go to the source code of this file.

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Render
     High-level Render system API.
     
    namespace  tram::Render::API
     Rendering backend API.
     
    ================================================ FILE: docs/cppapi/texture_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/opengl/texture.h Source File
    Tramway SDK v0.1.1
    texture.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_RENDER_OPENGL_TEXTURE_H
    4#define TRAM_SDK_RENDER_OPENGL_TEXTURE_H
    5
    6#include <render/render.h>
    7#include <render/renderer.h>
    8
    9namespace tram::Render::API {
    10
    11}
    12
    13#endif // TRAM_SDK_RENDER_OPENGL_TEXTURE_H
    Rendering backend API.
    ================================================ FILE: docs/cppapi/thirdperson_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/camera/thirdperson.cpp File Reference
    Tramway SDK v0.1.1
    thirdperson.cpp File Reference

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Ext
     
    namespace  tram::Ext::Camera
     Several different camera implementations.
     
    ================================================ FILE: docs/cppapi/thirdperson_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/camera/thirdperson.h File Reference
    Tramway SDK v0.1.1
    thirdperson.h File Reference

    Go to the source code of this file.

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Ext
     
    namespace  tram::Ext::Camera
     Several different camera implementations.
     
    ================================================ FILE: docs/cppapi/thirdperson_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/extensions/camera/thirdperson.h Source File
    Tramway SDK v0.1.1
    thirdperson.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_EXTENSIONS_CAMERA_THIRDPERSON_H
    4#define TRAM_SDK_EXTENSIONS_CAMERA_THIRDPERSON_H
    5
    7
    8namespace tram::Ext::Camera {
    9
    10}
    11
    12#endif // TRAM_SDK_EXTENSIONS_CAMERA_THIRDPERSON_H
    Several different camera implementations.
    ================================================ FILE: docs/cppapi/time_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/platform/time.cpp File Reference
    Tramway SDK
    time.cpp File Reference
    #include <platform/time.h>
    #include <GLFW/glfw3.h>

    Namespaces

    namespace  tram
     

    Functions

    double tram::GetTime ()
     Retrieves the current time. More...
     
    ================================================ FILE: docs/cppapi/time_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/platform/time.h File Reference
    Tramway SDK
    time.h File Reference

    Go to the source code of this file.

    Namespaces

    namespace  tram
     
    ================================================ FILE: docs/cppapi/time_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/platform/time.h Source File
    Tramway SDK
    time.h
    Go to the documentation of this file.
    1// TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022
    2// All rights reserved.
    3
    4#ifndef TRAM_SDK_PLATFORM_FILE_H
    5#define TRAM_SDK_PLATFORM_FILE_H
    6
    7namespace tram {
    8
    9// should this be? in line a namespace? like PLATFORM::GetTime()?????
    10
    11//double GetTime();
    12
    13}
    14
    15#endif // TRAM_SDK_PLATFORM_FILE_H
    Definition: api.h:9
    ================================================ FILE: docs/cppapi/todo.html ================================================ Tramway SDK: Todo List
    Tramway SDK v0.1.1
    Todo List
    Namespace tram::Audio::Spatial

    Make sure that it compiles and do some improvements

    Investigate the possibilities of using hardware accelerated ray-tracing

    I am very poor and can't afford a graphics card, NVIDIA pls sponsor me

    Class tram::Physics::PathAction
    finish!!!
    ================================================ FILE: docs/cppapi/transition_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/transition.cpp File Reference
    Tramway SDK v0.1.1
    transition.cpp File Reference
    #include <framework/transition.h>
    #include <framework/worldcell.h>
    #include <framework/logging.h>
    #include <render/render.h>
    #include <templates/hashmap.h>
    #include <config.h>
    #include <algorithm>

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    ================================================ FILE: docs/cppapi/transition_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/transition.h File Reference
    Tramway SDK v0.1.1
    transition.h File Reference
    #include <vector>
    #include <framework/uid.h>
    #include <framework/math.h>

    Go to the source code of this file.

    Classes

    class  tram::Transition
     Connects WorldCells together. More...
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    ================================================ FILE: docs/cppapi/transition_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/transition.h Source File
    Tramway SDK v0.1.1
    transition.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_FRAMEWORK_TRANSITION_H
    4#define TRAM_SDK_FRAMEWORK_TRANSITION_H
    5
    6#include <vector>
    7
    8#include <framework/uid.h>
    9#include <framework/math.h>
    10
    11namespace tram {
    12
    13class WorldCell;
    14
    16public:
    18 ~Transition() = delete;
    19 void AddPoint (vec3 point);
    20 void GeneratePlanes (bool disp = false);
    21 bool IsInside (vec3 point);
    23 static Transition* Find(name_t name);
    25protected:
    28 std::vector<vec3> points;
    29 std::vector<vec4> planes;
    30 friend class WorldCell;
    31};
    32
    33}
    34
    35#endif // TRAM_SDK_FRAMEWORK_TRANSITION_H
    Connects WorldCells together.
    Definition: transition.h:15
    void AddPoint(vec3 point)
    Adds a point to the transition volume.
    Definition: transition.cpp:63
    WorldCell * cell_into
    Definition: transition.h:27
    static Transition * Find(name_t name)
    Finds a transition with the given name.
    Definition: transition.cpp:29
    std::vector< vec4 > planes
    Definition: transition.h:29
    Transition(name_t name, WorldCell *cell_into)
    Definition: transition.cpp:52
    std::vector< vec3 > points
    Definition: transition.h:28
    name_t name
    Definition: transition.h:26
    ~Transition()=delete
    bool IsInside(vec3 point)
    Checks whether a point is inside the transition volume.
    Definition: transition.cpp:68
    static Transition * Make(name_t name, WorldCell *cell_into)
    Creates a new transition.
    Definition: transition.cpp:38
    WorldCell * GetCell()
    Definition: transition.h:22
    void GeneratePlanes(bool disp=false)
    Finalizes the transition after adding points to it.
    Definition: transition.cpp:76
    World streaming unit.
    Definition: worldcell.h:16
    Serialization, i.e.
    glm::vec3 vec3
    Definition: math.h:11
    Interned string type.
    Definition: uid.h:10
    ================================================ FILE: docs/cppapi/trigger_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/trigger.cpp File Reference
    Tramway SDK
    trigger.cpp File Reference

    Classes

    struct  tram::TriggerPollCallback
     

    Namespaces

    namespace  tram
     
    ================================================ FILE: docs/cppapi/trigger_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/trigger.h File Reference
    Tramway SDK
    trigger.h File Reference
    #include <physics/physics.h>
    #include <components/physics.h>
    #include <vector>

    Go to the source code of this file.

    Classes

    class  tram::TriggerComponent
     

    Namespaces

    namespace  tram
     
    ================================================ FILE: docs/cppapi/trigger_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/components/trigger.h Source File
    Tramway SDK
    trigger.h
    Go to the documentation of this file.
    1// TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022
    2// All rights reserved.
    3
    4#ifndef TRAM_SDK_COMPONENTS_TRIGGERCOMPONENT_H
    5#define TRAM_SDK_COMPONENTS_TRIGGERCOMPONENT_H
    6
    7#include <physics/physics.h>
    9
    10#include <vector>
    11
    12class btCollisionShape;
    13class btCollisionObject;
    14
    15namespace tram {
    16
    18public:
    19 TriggerComponent() : model(this){}
    21 void EventHandler(Event &event){};
    22 void Start();
    23
    24 name_t GetModel(){ return model->GetName(); }
    25 void SetModel(name_t modelName){ model = Physics::CollisionModel::Find(modelName); }
    27
    28 void SetActivationCallback(void (*activation_callback)(TriggerComponent*, Physics::Collision)) { this->activation_callback = activation_callback; }
    29 void SetDectivationCallback(void (*deactivation_callback)(TriggerComponent*, Physics::Collision)) { this->deactivation_callback = deactivation_callback; }
    30 void SetFilterCallback(bool (*filter_callback)(TriggerComponent*, PhysicsComponent*)) { this->filter_callback = filter_callback; }
    31
    32 void SetCollisionMask(uint32_t flags);
    33 void SetCollisionGroup(uint32_t flags);
    34
    35 void SetStoreCollisions(bool store_collisions) { this->store_collisions = store_collisions; }
    36
    37 uint32_t GetCollisionMask() { return collisionMask; }
    38 uint32_t GetCollisionGroup() { return collisionGroup; }
    39
    40 void SetLocation(glm::vec3 location);
    41 void SetRotation(glm::quat rotation);
    42
    43 std::vector<Physics::Collision> GetStoredCollisions() { return stored_collisions; }
    44
    45 void Collision (const Physics::Collision& collision);
    46 void ResetCollisions();
    47
    48 std::vector<Physics::Collision> Poll ();
    49private:
    51
    52 uint32_t collisionMask = -1;
    53 uint32_t collisionGroup = -1;
    54
    55 glm::vec3 location = vec3 (0.0f, 0.0f, 0.0f);
    56 glm::quat rotation = vec3 (0.0f, 0.0f, 0.0f);
    57
    58 btCollisionShape* shape = nullptr;
    59 btCollisionObject* trigger = nullptr;
    60
    61 void (*activation_callback)(TriggerComponent*, Physics::Collision) = nullptr;
    62 void (*deactivation_callback)(TriggerComponent*, Physics::Collision) = nullptr;
    63 bool (*filter_callback)(TriggerComponent*, PhysicsComponent*) = nullptr;
    64
    65 bool is_collided = false;
    66 bool was_collided = false;
    67
    68 bool store_collisions = false;
    69
    70 Physics::Collision collision;
    71
    72 std::vector<Physics::Collision> stored_collisions;
    73};
    74
    75}
    76
    77#endif // TRAM_SDK_COMPONENTS_TRIGGERCOMPONENT_H
    Definition: entitycomponent.h:18
    static CollisionModel * Find(name_t model_name)
    Finds a model.
    Definition: collisionmodel.cpp:19
    Definition: physics.h:28
    Definition: resource.h:47
    Definition: trigger.h:17
    uint32_t GetCollisionMask()
    Definition: trigger.h:37
    void EventHandler(Event &event)
    Definition: trigger.h:21
    void SetLocation(glm::vec3 location)
    Sets the location of the component.
    Definition: trigger.cpp:81
    void SetActivationCallback(void(*activation_callback)(TriggerComponent *, Physics::Collision))
    Definition: trigger.h:28
    void SetDectivationCallback(void(*deactivation_callback)(TriggerComponent *, Physics::Collision))
    Definition: trigger.h:29
    void SetFilterCallback(bool(*filter_callback)(TriggerComponent *, PhysicsComponent *))
    Definition: trigger.h:30
    void Start()
    Definition: trigger.cpp:14
    void SetStoreCollisions(bool store_collisions)
    Definition: trigger.h:35
    void ResetCollisions()
    Resets registered collisions.
    Definition: trigger.cpp:121
    void SetCollisionGroup(uint32_t flags)
    Sets a collision group for the trigger.
    Definition: trigger.cpp:71
    uint32_t GetCollisionGroup()
    Definition: trigger.h:38
    ~TriggerComponent()
    Definition: trigger.cpp:44
    void SetCollisionMask(uint32_t flags)
    Sets a collision mask for the trigger.
    Definition: trigger.cpp:59
    name_t GetModel()
    Definition: trigger.h:24
    void SetModel(name_t modelName)
    Definition: trigger.h:25
    void SetRotation(glm::quat rotation)
    Sets the rotation of the component.
    Definition: trigger.cpp:92
    TriggerComponent()
    Definition: trigger.h:19
    void Collision(const Physics::Collision &collision)
    Registers a collision.
    Definition: trigger.cpp:104
    std::vector< Physics::Collision > Poll()
    Checks for collisions with the trigger.
    Definition: trigger.cpp:184
    std::vector< Physics::Collision > GetStoredCollisions()
    Definition: trigger.h:43
    void SetShape(Physics::CollisionShape shape)
    Sets a collision shape for the trigger.
    Definition: trigger.cpp:52
    Definition: api.cpp:20
    glm::vec3 vec3
    Definition: math.h:12
    glm::quat quat
    Definition: math.h:13
    Definition: event.h:19
    Definition: physics.h:31
    Definition: collisionshape.h:19
    Definition: uid.h:11
    ================================================ FILE: docs/cppapi/type_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/type.cpp File Reference
    Tramway SDK v0.1.1
    type.cpp File Reference
    #include <framework/type.h>

    Namespaces

    namespace  tram
     Serialization, i.e.
     

    Functions

    const char * tram::TypeToString (Type type)
     Converts type enum to string. More...
     
    ================================================ FILE: docs/cppapi/type_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/type.h File Reference
    Tramway SDK v0.1.1
    type.h File Reference
    #include <cstdint>

    Go to the source code of this file.

    Namespaces

    namespace  tram
     Serialization, i.e.
     

    Enumerations

    enum  tram::Type : uint32_t {
      tram::TYPE_UNDEFINED , tram::TYPE_BOOL , tram::TYPE_NAME , tram::TYPE_STRING ,
      tram::TYPE_INT8 , tram::TYPE_INT16 , tram::TYPE_INT32 , tram::TYPE_UINT8 ,
      tram::TYPE_UINT16 , tram::TYPE_UINT32 , tram::TYPE_FLOAT32 , tram::TYPE_VEC2 ,
      tram::TYPE_VEC3 , tram::TYPE_VEC4 , tram::TYPE_QUAT
    }
     Type enumeration for serialization, etc. More...
     

    Functions

    const char * tram::TypeToString (Type type)
     Converts type enum to string. More...
     
    ================================================ FILE: docs/cppapi/type_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/type.h Source File
    Tramway SDK v0.1.1
    type.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_FRAMEWORK_TYPES_H
    4#define TRAM_SDK_FRAMEWORK_TYPES_H
    5
    6#include <cstdint>
    7
    8namespace tram {
    9
    11
    12enum Type : uint32_t {
    13 TYPE_UNDEFINED, //< When you don't know what the type is.
    14 TYPE_BOOL, //< Bool. Defaults to C++ bool type.
    15 TYPE_NAME, //< Our own name_t hashtable string.
    16 TYPE_STRING, //< Generic string. Defaults to a char array.
    17 TYPE_INT8, //< Signed 8 bit long integer.
    18 TYPE_INT16, //< Signed 16 bit long integer.
    19 TYPE_INT32, //< Signed 32 bit long integer.
    20 TYPE_UINT8, //< Unsigned 8 bit long integer.
    21 TYPE_UINT16, //< Unsigned 16 bit long integer.
    22 TYPE_UINT32, //< Unsigned 32 bit long integer.
    23 TYPE_FLOAT32, //< Normal precision floating-point.
    24 TYPE_VEC2, //< Normal precision floating-point 2 element vector.
    25 TYPE_VEC3, //< Normal precision floating-point 3 element vector.
    26 TYPE_VEC4, //< Normal precision floating-point 4 element vector.
    27 TYPE_QUAT, //< Normal precision floating-point quaternion.
    28};
    29
    30const char* TypeToString(Type type);
    31
    32}
    33
    34#endif // TRAM_SDK_FRAMEWORK_TYPES_H
    Serialization, i.e.
    Type
    Type enumeration for serialization, etc.
    Definition: type.h:12
    @ TYPE_BOOL
    Definition: type.h:14
    @ TYPE_STRING
    Definition: type.h:16
    @ TYPE_INT16
    Definition: type.h:18
    @ TYPE_VEC2
    Definition: type.h:24
    @ TYPE_UINT32
    Definition: type.h:22
    @ TYPE_INT32
    Definition: type.h:19
    @ TYPE_VEC3
    Definition: type.h:25
    @ TYPE_QUAT
    Definition: type.h:27
    @ TYPE_VEC4
    Definition: type.h:26
    @ TYPE_UINT8
    Definition: type.h:20
    @ TYPE_INT8
    Definition: type.h:17
    @ TYPE_UNDEFINED
    Definition: type.h:13
    @ TYPE_NAME
    Definition: type.h:15
    @ TYPE_UINT16
    Definition: type.h:21
    @ TYPE_FLOAT32
    Definition: type.h:23
    const char * TypeToString(Type type)
    Converts type enum to string.
    Definition: type.cpp:8
    ================================================ FILE: docs/cppapi/ui_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/ui.cpp File Reference
    Tramway SDK v0.1.1
    ui.cpp File Reference
    #include <platform/platform.h>
    #include <platform/image.h>
    #include <platform/api.h>
    #include <framework/core.h>
    #include <framework/event.h>
    #include <framework/ui.h>
    #include <framework/system.h>
    #include <framework/logging.h>
    #include <render/render.h>
    #include <render/api.h>
    #include <config.h>
    #include <fstream>
    #include <cstring>
    #include <algorithm>
    #include <ctime>
    #include <templates/hashmap.h>

    Classes

    struct  tram::UI::KeyBinding
     

    Namespaces

    namespace  tram::UI
     User interface system.
     
    namespace  tram
     Serialization, i.e.
     

    Functions

    void tram::UI::BindKeyboardKey (KeyboardKey key, keyboardaction_t action)
     
    void tram::UI::BindKeyboardKey (KeyboardKey key, void(*action)())
     
    void tram::UI::BindKeyboardKey (KeyboardKey key, void(*action)(KeyboardKey))
     
    void tram::UI::Init ()
     Initializes the UI system. More...
     
    void tram::UI::Uninit ()
     Uninitializes the UI system. More...
     
    void tram::UI::Update ()
     Updates the UI system. More...
     
    void tram::UI::EndFrame ()
     Ends the frame and updates the window. More...
     
    void tram::UI::SetWebMainLoop (void(*loop_function)(void))
     
    float tram::UI::GetScreenWidth ()
     
    float tram::UI::GetScreenHeight ()
     
    void tram::UI::SetWindowTitle (const char *title)
     
    void tram::UI::SetWindowSize (int w, int h)
     Sets the window size. More...
     
    void tram::UI::SetCursor (CursorType cursor)
     
    void tram::UI::SetInputState (InputState state)
     
    InputState tram::UI::GetInputState ()
     
    bool tram::UI::PollKeyboardKey (KeyboardKey key)
     Checks the state of a key for the current frame. More...
     
    float tram::UI::PollKeyboardAxis (KeyboardAxis key)
     Checks the state of an axis for the current frame. More...
     
    float tram::UI::PollKeyboardAxisDelta (KeyboardAxis key)
     Checks the change of an axis for since the last frame. More...
     
    float tram::UI::GetAxisSensitivity (KeyboardAxis key)
     
    void tram::UI::SetAxisSensitivity (KeyboardAxis key, float value)
     
    void tram::UI::KeyPress (KeyboardKey key)
     
    void tram::UI::KeyRelease (KeyboardKey key)
     
    void tram::UI::KeyCode (uint16_t code)
     
    void tram::UI::KeyMouse (float xpos, float ypos)
     
    void tram::UI::KeyScroll (float value)
     
    void tram::UI::ScreenResize (int width, int height)
     
    void tram::UI::ScreenClose ()
     
    bool tram::UI::ShouldExit ()
     
    keyboardaction_t tram::UI::RegisterKeyboardAction (const char *name)
     
    keyboardaction_t tram::UI::GetKeyboardAction (name_t name)
     
    name_t tram::UI::GetKeyboardActionName (keyboardaction_t type)
     
    std::vector< std::pair< keyboardaction_t, std::vector< KeyboardKey > > > tram::UI::GetAllKeyboardKeyBindings ()
     
    const char * tram::UI::GetKeyboardKeyName (KeyboardKey key)
     
    ================================================ FILE: docs/cppapi/ui_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/ui.h File Reference
    Tramway SDK v0.1.1
    ui.h File Reference
    #include <render/render.h>

    Go to the source code of this file.

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::UI
     User interface system.
     

    Typedefs

    typedef uint16_t tram::UI::keyboardaction_t
     

    Enumerations

    enum  tram::UI::KeyboardKey : uint16_t {
      tram::UI::KEY_SPACE , tram::UI::KEY_APOSTROPHE , tram::UI::KEY_COMMA , tram::UI::KEY_MINUS ,
      tram::UI::KEY_PERIOD , tram::UI::KEY_SLASH , tram::UI::KEY_0 , tram::UI::KEY_1 ,
      tram::UI::KEY_2 , tram::UI::KEY_3 , tram::UI::KEY_4 , tram::UI::KEY_5 ,
      tram::UI::KEY_6 , tram::UI::KEY_7 , tram::UI::KEY_8 , tram::UI::KEY_9 ,
      tram::UI::KEY_SEMICOLON , tram::UI::KEY_EQUAL , tram::UI::KEY_A , tram::UI::KEY_B ,
      tram::UI::KEY_C , tram::UI::KEY_D , tram::UI::KEY_E , tram::UI::KEY_F ,
      tram::UI::KEY_G , tram::UI::KEY_H , tram::UI::KEY_I , tram::UI::KEY_J ,
      tram::UI::KEY_K , tram::UI::KEY_L , tram::UI::KEY_M , tram::UI::KEY_N ,
      tram::UI::KEY_O , tram::UI::KEY_P , tram::UI::KEY_Q , tram::UI::KEY_R ,
      tram::UI::KEY_S , tram::UI::KEY_T , tram::UI::KEY_U , tram::UI::KEY_V ,
      tram::UI::KEY_W , tram::UI::KEY_X , tram::UI::KEY_Y , tram::UI::KEY_Z ,
      tram::UI::KEY_LEFT_BRACKET , tram::UI::KEY_BACKSLASH , tram::UI::KEY_RIGHT_BRACKET , tram::UI::KEY_GRAVE_ACCENT ,
      tram::UI::KEY_WORLD_1 , tram::UI::KEY_WORLD_2 , tram::UI::KEY_ESCAPE , tram::UI::KEY_ENTER ,
      tram::UI::KEY_TAB , tram::UI::KEY_BACKSPACE , tram::UI::KEY_INSERT , tram::UI::KEY_DELETE ,
      tram::UI::KEY_RIGHT , tram::UI::KEY_LEFT , tram::UI::KEY_DOWN , tram::UI::KEY_UP ,
      tram::UI::KEY_PAGE_UP , tram::UI::KEY_PAGE_DOWN , tram::UI::KEY_HOME , tram::UI::KEY_END ,
      tram::UI::KEY_CAPS_LOCK , tram::UI::KEY_SCROLL_LOCK , tram::UI::KEY_NUM_LOCK , tram::UI::KEY_PRINT_SCREEN ,
      tram::UI::KEY_PAUSE , tram::UI::KEY_F1 , tram::UI::KEY_F2 , tram::UI::KEY_F3 ,
      tram::UI::KEY_F4 , tram::UI::KEY_F5 , tram::UI::KEY_F6 , tram::UI::KEY_F7 ,
      tram::UI::KEY_F8 , tram::UI::KEY_F9 , tram::UI::KEY_F10 , tram::UI::KEY_F11 ,
      tram::UI::KEY_F12 , tram::UI::KEY_F13 , tram::UI::KEY_F14 , tram::UI::KEY_F15 ,
      tram::UI::KEY_F16 , tram::UI::KEY_F17 , tram::UI::KEY_F18 , tram::UI::KEY_F19 ,
      tram::UI::KEY_F20 , tram::UI::KEY_F21 , tram::UI::KEY_F22 , tram::UI::KEY_F23 ,
      tram::UI::KEY_F24 , tram::UI::KEY_F25 , tram::UI::KEY_KP_0 , tram::UI::KEY_KP_1 ,
      tram::UI::KEY_KP_2 , tram::UI::KEY_KP_3 , tram::UI::KEY_KP_4 , tram::UI::KEY_KP_5 ,
      tram::UI::KEY_KP_6 , tram::UI::KEY_KP_7 , tram::UI::KEY_KP_8 , tram::UI::KEY_KP_9 ,
      tram::UI::KEY_KP_DECIMAL , tram::UI::KEY_KP_DIVIDE , tram::UI::KEY_KP_MULTIPLY , tram::UI::KEY_KP_SUBTRACT ,
      tram::UI::KEY_KP_ADD , tram::UI::KEY_KP_ENTER , tram::UI::KEY_KP_EQUAL , tram::UI::KEY_LEFT_SHIFT ,
      tram::UI::KEY_LEFT_CONTROL , tram::UI::KEY_LEFT_ALT , tram::UI::KEY_LEFT_SUPER , tram::UI::KEY_RIGHT_SHIFT ,
      tram::UI::KEY_RIGHT_CONTROL , tram::UI::KEY_RIGHT_ALT , tram::UI::KEY_RIGHT_SUPER , tram::UI::KEY_MENU ,
      tram::UI::KEY_RIGHTMOUSE , tram::UI::KEY_LEFTMOUSE , tram::UI::KEY_MIDDLEMOUSE , tram::UI::KEY_LASTKEY
    }
     
    enum  tram::UI::KeyboardAxis : uint16_t { tram::UI::KEY_MOUSE_X , tram::UI::KEY_MOUSE_Y , tram::UI::KEY_MOUSE_SCROLL , tram::UI::KEY_LASTAXIS }
     
    enum  tram::UI::InputState {
      tram::UI::STATE_DEFAULT , tram::UI::STATE_NO_INPUT , tram::UI::STATE_FLYING , tram::UI::STATE_MENU_OPEN ,
      tram::UI::STATE_CURSOR
    }
     
    enum  tram::UI::KeyboardAction : keyboardaction_t {
      tram::UI::KEY_ACTION_NONE , tram::UI::KEY_ACTION_FORWARD , tram::UI::KEY_ACTION_BACKWARD , tram::UI::KEY_ACTION_STRAFE_LEFT ,
      tram::UI::KEY_ACTION_STRAFE_RIGHT , tram::UI::KEY_ACTION_UP , tram::UI::KEY_ACTION_DOWN , tram::UI::KEY_ACTION_LEFT ,
      tram::UI::KEY_ACTION_RIGHT , tram::UI::KEY_ACTION_JUMP , tram::UI::KEY_ACTION_CROUCH , tram::UI::KEY_ACTION_SPRINT ,
      tram::UI::KEY_ACTION_FLY , tram::UI::KEY_ACTION_ACTIVATE , tram::UI::KEY_ACTION_PRIMARY , tram::UI::KEY_ACTION_SECONDARY ,
      tram::UI::KEY_ACTION_LAST
    }
     
    enum  tram::UI::CursorType { tram::UI::CURSOR_DEFAULT , tram::UI::CURSOR_TEXT , tram::UI::CURSOR_CLICK }
     

    Functions

    void tram::UI::Init ()
     Initializes the UI system. More...
     
    void tram::UI::Uninit ()
     Uninitializes the UI system. More...
     
    void tram::UI::Update ()
     Updates the UI system. More...
     
    void tram::UI::EndFrame ()
     Ends the frame and updates the window. More...
     
    float tram::UI::GetScreenWidth ()
     
    float tram::UI::GetScreenHeight ()
     
    void tram::UI::SetWindowTitle (const char *title)
     
    void tram::UI::SetWindowSize (int w, int h)
     Sets the window size. More...
     
    void tram::UI::SetCursor (CursorType cursor)
     
    void tram::UI::SetWebMainLoop (void(*loop_function)(void))
     
    void tram::UI::BindKeyboardKey (KeyboardKey key, keyboardaction_t action)
     
    void tram::UI::BindKeyboardKey (KeyboardKey key, void(*action)())
     
    void tram::UI::BindKeyboardKey (KeyboardKey key, void(*action)(KeyboardKey))
     
    bool tram::UI::PollKeyboardKey (KeyboardKey key)
     Checks the state of a key for the current frame. More...
     
    float tram::UI::PollKeyboardAxis (KeyboardAxis key)
     Checks the state of an axis for the current frame. More...
     
    float tram::UI::PollKeyboardAxisDelta (KeyboardAxis key)
     Checks the change of an axis for since the last frame. More...
     
    void tram::UI::SetInputState (InputState state)
     
    InputState tram::UI::GetInputState ()
     
    void tram::UI::KeyPress (KeyboardKey key)
     
    void tram::UI::KeyRelease (KeyboardKey key)
     
    void tram::UI::KeyCode (uint16_t code)
     
    void tram::UI::KeyMouse (float xpos, float ypos)
     
    void tram::UI::KeyScroll (float value)
     
    void tram::UI::ScreenResize (int width, int height)
     
    void tram::UI::ScreenClose ()
     
    float tram::UI::GetAxisSensitivity (KeyboardAxis key)
     
    void tram::UI::SetAxisSensitivity (KeyboardAxis key, float value)
     
    keyboardaction_t tram::UI::RegisterKeyboardAction (const char *name)
     
    keyboardaction_t tram::UI::GetKeyboardAction (name_t name)
     
    name_t tram::UI::GetKeyboardActionName (keyboardaction_t type)
     
    std::vector< std::pair< keyboardaction_t, std::vector< KeyboardKey > > > tram::UI::GetAllKeyboardKeyBindings ()
     
    const char * tram::UI::GetKeyboardKeyName (KeyboardKey key)
     
    bool tram::UI::ShouldExit ()
     

    Variables

    const float tram::UI::CAMERA_SENSITIVITY = 6.0f
     
    const float tram::UI::CAMERA_SPEED = 6.0f
     
    ================================================ FILE: docs/cppapi/ui_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/ui.h Source File
    Tramway SDK v0.1.1
    ui.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_FRAMEWORK_UI_H
    4#define TRAM_SDK_FRAMEWORK_UI_H
    5
    6#include <render/render.h>
    7
    8namespace tram::UI {
    9
    10enum KeyboardKey : uint16_t {
    11 // stutter keys
    13
    14 // number keys
    16
    17 // programming keys
    19
    20 // letter keys
    23
    24 // keys that you press by accident
    26
    27 // i have no idea what these are
    29
    30 // stutter keys
    32
    33 // arrow keys
    35
    36 // keys right above arrow keys
    39
    40 // function keys
    47
    48 // keyoad keys
    51
    52 // modfier keys
    55
    56 // i have no idea what this key is
    58
    59 // mouse keys
    63
    65};
    66
    67enum KeyboardAxis : uint16_t {
    72};
    73
    75 STATE_DEFAULT, //< Normal input, events get generated, cursor disabled.
    76 STATE_NO_INPUT, //< Inputs get ignored, no cursor.
    77 STATE_FLYING, //< Events are skipped, inputs directly move view.
    78 STATE_MENU_OPEN, //< Input gets registered, but no events are generated, cursor enabled.
    79 STATE_CURSOR //< Normal input, events get generated, but cursor enabled.
    80};
    81
    82typedef uint16_t keyboardaction_t;
    83
    103
    109
    110const float CAMERA_SENSITIVITY = 6.0f;
    111const float CAMERA_SPEED = 6.0f;
    112
    113void Init();
    114void Uninit();
    115void Update();
    116void EndFrame();
    117
    118float GetScreenWidth();
    119float GetScreenHeight();
    120
    121void SetWindowTitle(const char* title);
    122void SetWindowSize(int w, int h);
    123
    124void SetCursor(CursorType cursor);
    125
    126void SetWebMainLoop(void(*loop_function)(void));
    127
    129void BindKeyboardKey(KeyboardKey key, void (*action)());
    130void BindKeyboardKey(KeyboardKey key, void (*action)(KeyboardKey));
    131
    135
    136void SetInputState(InputState state);
    138
    139// maybe instead of each platform calling this? these could be fed as pointers
    140// into the platform?
    141// TODO: fix
    142void KeyPress(KeyboardKey key);
    143void KeyRelease(KeyboardKey key);
    144void KeyCode(uint16_t code);
    145void KeyMouse(float x_value, float y_value);
    146void KeyScroll(float value);
    147void ScreenResize(int w, int h);
    148void ScreenClose();
    149
    151void SetAxisSensitivity(KeyboardAxis axis, float value);
    152
    156
    157std::vector<std::pair<keyboardaction_t, std::vector<KeyboardKey>>> GetAllKeyboardKeyBindings();
    158const char* GetKeyboardKeyName(KeyboardKey key);
    159
    160bool ShouldExit();
    161
    162}
    163
    164#endif // TRAM_SDK_FRAMEWORK_UI_H
    User interface system.
    keyboardaction_t RegisterKeyboardAction(const char *name)
    Definition: ui.cpp:382
    keyboardaction_t GetKeyboardAction(name_t name)
    Definition: ui.cpp:405
    const float CAMERA_SENSITIVITY
    Definition: ui.h:110
    float GetAxisSensitivity(KeyboardAxis key)
    Definition: ui.cpp:291
    void EndFrame()
    Ends the frame and updates the window.
    Definition: ui.cpp:188
    void Init()
    Initializes the UI system.
    Definition: ui.cpp:121
    float PollKeyboardAxis(KeyboardAxis key)
    Checks the state of an axis for the current frame.
    Definition: ui.cpp:281
    void SetWindowTitle(const char *title)
    Definition: ui.cpp:210
    void SetWindowSize(int w, int h)
    Sets the window size.
    Definition: ui.cpp:217
    void KeyRelease(KeyboardKey key)
    Definition: ui.cpp:313
    void Uninit()
    Uninitializes the UI system.
    Definition: ui.cpp:132
    float PollKeyboardAxisDelta(KeyboardAxis key)
    Checks the change of an axis for since the last frame.
    Definition: ui.cpp:287
    bool ShouldExit()
    Definition: ui.cpp:356
    KeyboardAction
    Definition: ui.h:84
    @ KEY_ACTION_RIGHT
    Definition: ui.h:93
    @ KEY_ACTION_ACTIVATE
    Definition: ui.h:98
    @ KEY_ACTION_UP
    Definition: ui.h:90
    @ KEY_ACTION_NONE
    Definition: ui.h:85
    @ KEY_ACTION_SECONDARY
    Definition: ui.h:100
    @ KEY_ACTION_FORWARD
    Definition: ui.h:86
    @ KEY_ACTION_STRAFE_RIGHT
    Definition: ui.h:89
    @ KEY_ACTION_PRIMARY
    Definition: ui.h:99
    @ KEY_ACTION_STRAFE_LEFT
    Definition: ui.h:88
    @ KEY_ACTION_FLY
    Definition: ui.h:97
    @ KEY_ACTION_DOWN
    Definition: ui.h:91
    @ KEY_ACTION_BACKWARD
    Definition: ui.h:87
    @ KEY_ACTION_SPRINT
    Definition: ui.h:96
    @ KEY_ACTION_CROUCH
    Definition: ui.h:95
    @ KEY_ACTION_JUMP
    Definition: ui.h:94
    @ KEY_ACTION_LAST
    Definition: ui.h:101
    @ KEY_ACTION_LEFT
    Definition: ui.h:92
    void SetWebMainLoop(void(*loop_function)(void))
    Definition: ui.cpp:192
    InputState GetInputState()
    Definition: ui.cpp:269
    CursorType
    Definition: ui.h:104
    @ CURSOR_TEXT
    Definition: ui.h:106
    @ CURSOR_CLICK
    Definition: ui.h:107
    @ CURSOR_DEFAULT
    Definition: ui.h:105
    void KeyScroll(float value)
    Definition: ui.cpp:342
    const char * GetKeyboardKeyName(KeyboardKey key)
    Definition: ui.cpp:448
    void SetCursor(CursorType cursor)
    Definition: ui.cpp:225
    uint16_t keyboardaction_t
    Definition: ui.h:82
    float GetScreenWidth()
    Definition: ui.cpp:201
    bool PollKeyboardKey(KeyboardKey key)
    Checks the state of a key for the current frame.
    Definition: ui.cpp:275
    void ScreenResize(int width, int height)
    Definition: ui.cpp:346
    void Update()
    Updates the UI system.
    Definition: ui.cpp:140
    std::vector< std::pair< keyboardaction_t, std::vector< KeyboardKey > > > GetAllKeyboardKeyBindings()
    Definition: ui.cpp:428
    float GetScreenHeight()
    Definition: ui.cpp:205
    void KeyMouse(float xpos, float ypos)
    Definition: ui.cpp:327
    void BindKeyboardKey(KeyboardKey key, keyboardaction_t action)
    Definition: ui.cpp:107
    KeyboardAxis
    Definition: ui.h:67
    @ KEY_MOUSE_X
    Definition: ui.h:68
    @ KEY_MOUSE_SCROLL
    Definition: ui.h:70
    @ KEY_MOUSE_Y
    Definition: ui.h:69
    @ KEY_LASTAXIS
    Definition: ui.h:71
    void SetAxisSensitivity(KeyboardAxis key, float value)
    Definition: ui.cpp:295
    void SetInputState(InputState state)
    Definition: ui.cpp:239
    void KeyCode(uint16_t code)
    Definition: ui.cpp:323
    void ScreenClose()
    Definition: ui.cpp:352
    KeyboardKey
    Definition: ui.h:10
    @ KEY_LEFT_SUPER
    Definition: ui.h:53
    @ KEY_F14
    Definition: ui.h:43
    @ KEY_SPACE
    Definition: ui.h:12
    @ KEY_BACKSPACE
    Definition: ui.h:31
    @ KEY_5
    Definition: ui.h:15
    @ KEY_KP_6
    Definition: ui.h:46
    @ KEY_6
    Definition: ui.h:15
    @ KEY_F8
    Definition: ui.h:42
    @ KEY_RIGHT_SUPER
    Definition: ui.h:54
    @ KEY_KP_0
    Definition: ui.h:45
    @ KEY_LEFT_CONTROL
    Definition: ui.h:53
    @ KEY_P
    Definition: ui.h:22
    @ KEY_DELETE
    Definition: ui.h:31
    @ KEY_WORLD_2
    Definition: ui.h:28
    @ KEY_KP_MULTIPLY
    Definition: ui.h:49
    @ KEY_KP_4
    Definition: ui.h:45
    @ KEY_LEFT
    Definition: ui.h:34
    @ KEY_F19
    Definition: ui.h:43
    @ KEY_KP_5
    Definition: ui.h:45
    @ KEY_Q
    Definition: ui.h:22
    @ KEY_LEFT_ALT
    Definition: ui.h:53
    @ KEY_I
    Definition: ui.h:21
    @ KEY_F13
    Definition: ui.h:42
    @ KEY_PAGE_DOWN
    Definition: ui.h:37
    @ KEY_KP_3
    Definition: ui.h:45
    @ KEY_F9
    Definition: ui.h:42
    @ KEY_K
    Definition: ui.h:21
    @ KEY_F4
    Definition: ui.h:41
    @ KEY_V
    Definition: ui.h:22
    @ KEY_KP_1
    Definition: ui.h:45
    @ KEY_KP_2
    Definition: ui.h:45
    @ KEY_KP_DECIMAL
    Definition: ui.h:49
    @ KEY_HOME
    Definition: ui.h:37
    @ KEY_E
    Definition: ui.h:21
    @ KEY_END
    Definition: ui.h:37
    @ KEY_KP_ENTER
    Definition: ui.h:50
    @ KEY_L
    Definition: ui.h:21
    @ KEY_M
    Definition: ui.h:21
    @ KEY_DOWN
    Definition: ui.h:34
    @ KEY_F18
    Definition: ui.h:43
    @ KEY_KP_SUBTRACT
    Definition: ui.h:49
    @ KEY_9
    Definition: ui.h:15
    @ KEY_Z
    Definition: ui.h:22
    @ KEY_F5
    Definition: ui.h:41
    @ KEY_RIGHTMOUSE
    Definition: ui.h:60
    @ KEY_F2
    Definition: ui.h:41
    @ KEY_O
    Definition: ui.h:22
    @ KEY_0
    Definition: ui.h:15
    @ KEY_PRINT_SCREEN
    Definition: ui.h:38
    @ KEY_LEFT_SHIFT
    Definition: ui.h:53
    @ KEY_G
    Definition: ui.h:21
    @ KEY_A
    Definition: ui.h:21
    @ KEY_RIGHT_SHIFT
    Definition: ui.h:54
    @ KEY_S
    Definition: ui.h:22
    @ KEY_ENTER
    Definition: ui.h:31
    @ KEY_COMMA
    Definition: ui.h:12
    @ KEY_MINUS
    Definition: ui.h:12
    @ KEY_F6
    Definition: ui.h:41
    @ KEY_APOSTROPHE
    Definition: ui.h:12
    @ KEY_SEMICOLON
    Definition: ui.h:18
    @ KEY_KP_8
    Definition: ui.h:46
    @ KEY_7
    Definition: ui.h:15
    @ KEY_KP_DIVIDE
    Definition: ui.h:49
    @ KEY_F17
    Definition: ui.h:43
    @ KEY_F11
    Definition: ui.h:42
    @ KEY_KP_ADD
    Definition: ui.h:49
    @ KEY_NUM_LOCK
    Definition: ui.h:38
    @ KEY_WORLD_1
    Definition: ui.h:28
    @ KEY_F22
    Definition: ui.h:44
    @ KEY_SLASH
    Definition: ui.h:12
    @ KEY_TAB
    Definition: ui.h:31
    @ KEY_N
    Definition: ui.h:22
    @ KEY_F20
    Definition: ui.h:44
    @ KEY_F23
    Definition: ui.h:44
    @ KEY_X
    Definition: ui.h:22
    @ KEY_PAGE_UP
    Definition: ui.h:37
    @ KEY_F12
    Definition: ui.h:42
    @ KEY_INSERT
    Definition: ui.h:31
    @ KEY_RIGHT
    Definition: ui.h:34
    @ KEY_LEFTMOUSE
    Definition: ui.h:61
    @ KEY_2
    Definition: ui.h:15
    @ KEY_8
    Definition: ui.h:15
    @ KEY_4
    Definition: ui.h:15
    @ KEY_F24
    Definition: ui.h:44
    @ KEY_KP_EQUAL
    Definition: ui.h:50
    @ KEY_B
    Definition: ui.h:21
    @ KEY_SCROLL_LOCK
    Definition: ui.h:38
    @ KEY_J
    Definition: ui.h:21
    @ KEY_F16
    Definition: ui.h:43
    @ KEY_ESCAPE
    Definition: ui.h:31
    @ KEY_F25
    Definition: ui.h:44
    @ KEY_UP
    Definition: ui.h:34
    @ KEY_MENU
    Definition: ui.h:57
    @ KEY_GRAVE_ACCENT
    Definition: ui.h:25
    @ KEY_F21
    Definition: ui.h:44
    @ KEY_F3
    Definition: ui.h:41
    @ KEY_PERIOD
    Definition: ui.h:12
    @ KEY_Y
    Definition: ui.h:22
    @ KEY_F
    Definition: ui.h:21
    @ KEY_D
    Definition: ui.h:21
    @ KEY_3
    Definition: ui.h:15
    @ KEY_BACKSLASH
    Definition: ui.h:25
    @ KEY_C
    Definition: ui.h:21
    @ KEY_LEFT_BRACKET
    Definition: ui.h:25
    @ KEY_R
    Definition: ui.h:22
    @ KEY_T
    Definition: ui.h:22
    @ KEY_U
    Definition: ui.h:22
    @ KEY_KP_7
    Definition: ui.h:46
    @ KEY_F1
    Definition: ui.h:41
    @ KEY_CAPS_LOCK
    Definition: ui.h:38
    @ KEY_F7
    Definition: ui.h:42
    @ KEY_RIGHT_BRACKET
    Definition: ui.h:25
    @ KEY_KP_9
    Definition: ui.h:46
    @ KEY_1
    Definition: ui.h:15
    @ KEY_EQUAL
    Definition: ui.h:18
    @ KEY_RIGHT_CONTROL
    Definition: ui.h:54
    @ KEY_F15
    Definition: ui.h:43
    @ KEY_H
    Definition: ui.h:21
    @ KEY_PAUSE
    Definition: ui.h:38
    @ KEY_W
    Definition: ui.h:22
    @ KEY_LASTKEY
    Definition: ui.h:64
    @ KEY_MIDDLEMOUSE
    Definition: ui.h:62
    @ KEY_RIGHT_ALT
    Definition: ui.h:54
    @ KEY_F10
    Definition: ui.h:42
    const float CAMERA_SPEED
    Definition: ui.h:111
    void KeyPress(KeyboardKey key)
    Definition: ui.cpp:299
    name_t GetKeyboardActionName(keyboardaction_t type)
    Definition: ui.cpp:420
    InputState
    Definition: ui.h:74
    @ STATE_NO_INPUT
    Definition: ui.h:76
    @ STATE_CURSOR
    Definition: ui.h:79
    @ STATE_FLYING
    Definition: ui.h:77
    @ STATE_DEFAULT
    Definition: ui.h:75
    @ STATE_MENU_OPEN
    Definition: ui.h:78
    Interned string type.
    Definition: uid.h:10
    ================================================ FILE: docs/cppapi/uid_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/uid.cpp File Reference
    Tramway SDK v0.1.1
    uid.cpp File Reference
    #include <framework/uid.h>
    #include <cstring>
    #include <templates/stackpool.h>
    #include <templates/hashmap.h>
    #include <config.h>
    #include <murmur.h>

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    ================================================ FILE: docs/cppapi/uid_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/uid.h File Reference
    Tramway SDK v0.1.1
    uid.h File Reference
    #include <string>

    Go to the source code of this file.

    Classes

    struct  tram::UID
     Interned string type. More...
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     

    Typedefs

    typedef UID tram::name_t
     
    ================================================ FILE: docs/cppapi/uid_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/uid.h Source File
    Tramway SDK v0.1.1
    uid.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_FRAMEWORK_UID_H
    4#define TRAM_SDK_FRAMEWORK_UID_H
    5
    6#include <string>
    7
    8namespace tram {
    9
    10struct UID {
    11 UID() {}
    12 UID(const UID& value) { *this = value; }
    13 ~UID() {}
    14
    15 UID(const std::string& value);
    16 UID(const char* value);
    17
    18 UID& operator=(const UID& value) {
    19 key = value.key;
    20 return *this;
    21 }
    22
    23 bool operator==(const UID& other) const {
    24 return key == other.key;
    25 }
    26
    27 bool operator==(const char* other) const {
    28 return key == UID(other).key;
    29 }
    30
    31 explicit operator bool() { return key; }
    32
    33 operator std::string() const;
    34 operator char const*() const;
    35
    36 static bool no_quote(const char*);
    37 static bool is_empty(const char*);
    38 static bool is_valid(const UID&);
    39
    40 uint32_t key = 0;
    41};
    42
    43typedef UID name_t;
    44
    45}
    46
    47#endif // TRAM_SDK_FRAMEWORK_UID_H
    Serialization, i.e.
    UID name_t
    Definition: uid.h:43
    Interned string type.
    Definition: uid.h:10
    bool operator==(const UID &other) const
    Definition: uid.h:23
    static bool no_quote(const char *)
    Checks whether the name will need quotes.
    Definition: uid.cpp:131
    static bool is_empty(const char *)
    Checks whether a string consists of only whitespace.
    Definition: uid.cpp:144
    bool operator==(const char *other) const
    Definition: uid.h:27
    ~UID()
    Definition: uid.h:13
    UID(const UID &value)
    Definition: uid.h:12
    static bool is_valid(const UID &)
    Checks whether the name is valid.
    Definition: uid.cpp:121
    uint32_t key
    Definition: uid.h:40
    UID()
    Definition: uid.h:11
    UID & operator=(const UID &value)
    Definition: uid.h:18
    ================================================ FILE: docs/cppapi/utils_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/platform/utils.cpp File Reference
    Tramway SDK v0.1.1
    utils.cpp File Reference
    ================================================ FILE: docs/cppapi/value_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/value.h File Reference
    Tramway SDK v0.1.1
    value.h File Reference
    #include <cassert>
    #include <framework/type.h>
    #include <framework/uid.h>
    #include <framework/math.h>
    #include <framework/logging.h>

    Go to the source code of this file.

    Classes

    class  tram::Value
     Generic, type-safe union. More...
     
    class  tram::ValuePtr
     
    class  tram::ValueArray
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     

    Typedefs

    typedef ValueArray tram::valuearray_t
     
    ================================================ FILE: docs/cppapi/value_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/value.h Source File
    Tramway SDK v0.1.1
    value.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_FRAMEWORK_VALUE_H
    4#define TRAM_SDK_FRAMEWORK_VALUE_H
    5
    6#include <cassert>
    7
    8#include <framework/type.h>
    9#include <framework/uid.h>
    10#include <framework/math.h>
    11#include <framework/logging.h>
    12
    13namespace tram {
    14
    15class ValuePtr;
    16
    18class Value {
    19public:
    20 Value() : vec4_value({0, 0, 0, 0}) { type = TYPE_UNDEFINED; }
    21 ~Value() {}
    22
    23 Value(const Value& other) : vec4_value(other.vec4_value) /* hehe */ { type = other.type; }
    24
    25 Value& operator=(const Value& other) {
    26 vec4_value = other.vec4_value;
    27 type = other.type; return *this;
    28 }
    29
    30 bool operator==(const Value& other) const {
    31 switch (type) {
    32 case TYPE_BOOL:
    33 if (other.GetType() != TYPE_BOOL) return false; else return bool_value == other.bool_value;
    34 case TYPE_INT32:
    35 case TYPE_UINT32:
    36 if (!other.IsInt() && !other.IsFloat()) return false; else return GetInt() == other.GetInt();
    37 case TYPE_FLOAT32:
    38 if (!other.IsInt() && !other.IsFloat()) return false; else return GetFloat() == other.GetFloat();
    39 case TYPE_NAME:
    40 if (other.GetType() != TYPE_NAME) return false; else return name_value == other.name_value;
    41 case TYPE_STRING:
    42 return false; // TODO: fix this
    43 case TYPE_VEC2:
    44 if (other.GetType() != TYPE_VEC2) return false; else return vec2_value == other.vec2_value;
    45 case TYPE_VEC3:
    46 if (other.GetType() != TYPE_VEC3) return false; else return vec3_value == other.vec3_value;
    47 case TYPE_VEC4:
    48 if (other.GetType() != TYPE_VEC4) return false; else return vec4_value == other.vec4_value;
    49 case TYPE_QUAT:
    50 if (other.GetType() != TYPE_QUAT) return false; else return quat_value == other.quat_value;
    51 default: return false;
    52 }
    53 }
    54
    55 Value(bool value) : bool_value(value) { type = TYPE_BOOL; }
    56 Value(name_t value) : name_value(value) { type = TYPE_NAME; }
    57 Value(const char* value) : string_value(value) { type = TYPE_STRING; }
    58
    59 Value(int8_t value) : int32_value(value) { type = TYPE_INT32; }
    60 Value(int16_t value) : int32_value(value) { type = TYPE_INT32; }
    61 Value(int64_t value) : int32_value(value) { type = TYPE_INT32; }
    62
    63 Value(uint8_t value) : uint32_value(value) { type = TYPE_UINT32; }
    64 Value(uint16_t value) : uint32_value(value) { type = TYPE_UINT32; }
    65 Value(uint64_t value) : uint32_value(value) { type = TYPE_UINT32; }
    66
    67 Value(double value) : float_value(value) { type = TYPE_FLOAT32; }
    68
    69 Value(int32_t value) : int32_value(value) { type = TYPE_INT32; }
    70
    71 Value(uint32_t value) : uint32_value(value) { type = TYPE_UINT32; }
    72
    73 Value(vec2 value) : vec2_value(value) { type = TYPE_VEC2; }
    74 Value(vec3 value) : vec3_value(value) { type = TYPE_VEC3; }
    75 Value(vec4 value) : vec4_value(value) { type = TYPE_VEC4; }
    76
    77 Value(quat value) : quat_value(value) { type = TYPE_QUAT; }
    78
    79 Value(float value) : float_value(value) { type = TYPE_FLOAT32; }
    80
    81 operator bool() const { AssertType(TYPE_BOOL); return bool_value; }
    82
    83 operator name_t() const {
    84 if (type == TYPE_STRING) {
    85 return (name_t)string_value;
    86 }
    87
    89
    90 return name_value;
    91 }
    92 operator const char*() const {
    93 if (type == TYPE_NAME) {
    94 return name_value;
    95 }
    96
    98
    99 return string_value;
    100 }
    101
    102
    103 operator int8_t() const { return (int32_t)*this; }
    104 operator int16_t() const { return (int32_t)*this; }
    105 operator int64_t() const { return (int32_t)*this; }
    106
    107 operator uint8_t() const { return (uint32_t)*this; }
    108 operator uint16_t() const { return (uint32_t)*this; }
    109 operator uint64_t() const { return (uint32_t)*this; }
    110
    111 operator double() const { return (float)*this; }
    112
    113 operator int32_t() const { AssertType(TYPE_INT32); return int32_value; }
    114
    115 //operator uint16_t() const { if (type != TYPE_UINT16) {__asm__ volatile("int $0x03");} /*assert(type == TYPE_UINT16);*/ return uint16_value; }
    116 operator uint32_t() const { AssertType(TYPE_UINT32); return uint32_value; }
    117
    118 operator float() const { AssertType(TYPE_FLOAT32); return float_value; }
    119
    120 operator vec2() const { AssertType(TYPE_VEC2); return vec2_value; }
    121 operator vec3() const { AssertType(TYPE_VEC3); return vec3_value; }
    122 operator vec4() const { AssertType(TYPE_VEC4); return vec4_value; }
    123
    124 operator quat() const { AssertType(TYPE_QUAT); return quat_value; }
    125
    126
    127
    128 inline bool IsBool() const { return type == TYPE_BOOL; }
    129 inline bool IsInt() const { return type == TYPE_INT32 || type == TYPE_UINT32; }
    130 inline bool IsFloat() const { return type == TYPE_FLOAT32; }
    131 inline bool IsName() const { return type == TYPE_NAME; }
    132 inline bool IsString() const { return type == TYPE_STRING; }
    133 inline bool IsVec2() const { return type == TYPE_VEC2; }
    134 inline bool IsVec3() const { return type == TYPE_VEC3; }
    135 inline bool IsVec4() const { return type == TYPE_VEC4; }
    136 inline bool IsQuat() const { return type == TYPE_QUAT; }
    137
    138 inline int GetInt() const {
    139 switch (type) {
    140 case TYPE_INT32: return int32_value;
    141 case TYPE_UINT32: return int32_value;
    142 case TYPE_FLOAT32: return float_value;
    143 default: return 0;
    144 }
    145 }
    146
    147 inline float GetFloat() const {
    148 switch (type) {
    149 case TYPE_INT32: return int32_value;
    150 case TYPE_UINT32: return uint32_value;
    151 case TYPE_FLOAT32: return float_value;
    152 default: return 0;
    153 }
    154 }
    155
    156 inline std::string ToString() {
    157 switch (type) {
    158 case TYPE_UNDEFINED: return "undefined";
    159 case TYPE_BOOL: return bool_value ? "true" : "false";
    160 case TYPE_INT32: return std::to_string(int32_value);
    161 case TYPE_UINT32: return std::to_string(uint32_value);
    162 case TYPE_FLOAT32: return std::to_string(float_value);
    163 case TYPE_NAME: return name_value;
    164 case TYPE_STRING: return string_value;
    165 case TYPE_VEC2: return std::to_string(vec2_value.x) + ";" + std::to_string(vec2_value.y);
    166 case TYPE_VEC3: return std::to_string(vec3_value.x) + ";" + std::to_string(vec3_value.y) + ";" + std::to_string(vec3_value.z);
    167 case TYPE_VEC4: return std::to_string(vec4_value.x) + ";" + std::to_string(vec4_value.y) + ";" + std::to_string(vec4_value.z) + ";" + std::to_string(vec4_value.w);
    168 case TYPE_QUAT: return std::to_string(quat_value.x) + ";" + std::to_string(quat_value.y) + ";" + std::to_string(quat_value.z) + ";" + std::to_string(quat_value.w);
    169 default: return "unknown";
    170 }
    171
    172 }
    173
    174 inline Type GetType() const { return type; }
    175protected:
    177
    178 void AssertType(Type type) const {
    179 if (this->type != type) {
    180 Log(Severity::CRITICAL_ERROR, System::CORE, "Value of type {} used in a {} context", TypeToString(this->type), TypeToString(type));
    181 }
    182 }
    183
    184 union {
    187 const char* string_value;
    188 int32_t int32_value;
    189 uint32_t uint32_value;
    195 };
    196
    197 friend class ValuePtr;
    198};
    199
    200class ValuePtr {
    201public:
    202 ValuePtr() : uint32_ptr(nullptr) { type = TYPE_UNDEFINED; }
    204
    205 ValuePtr(const ValuePtr& other) : vec4_ptr(other.vec4_ptr) { type = other.type; }
    206
    207 ValuePtr(Value& other) {
    208 type = other.GetType();
    209
    210 switch (type) {
    211 case TYPE_BOOL: bool_ptr = &other.bool_value; break;
    212 case TYPE_INT32: int32_ptr = &other.int32_value; break;
    213 case TYPE_UINT32: uint32_ptr = &other.uint32_value; break;
    214 case TYPE_FLOAT32: float_ptr = &other.float_value; break;
    215 case TYPE_NAME: name_ptr = &other.name_value; break;
    216 case TYPE_STRING: string_ptr = &other.string_value; break;
    217 case TYPE_VEC2: vec2_ptr = &other.vec2_value; break;
    218 case TYPE_VEC3: vec3_ptr = &other.vec3_value; break;
    219 case TYPE_VEC4: vec4_ptr = &other.vec4_value; break;
    220 case TYPE_QUAT: quat_ptr = &other.quat_value; break;
    221 default: assert(false);
    222 }
    223 }
    224
    225 operator Value() const {
    226 switch (type) {
    227 case TYPE_UNDEFINED: return Value();
    228 case TYPE_BOOL: return *bool_ptr;
    229 case TYPE_INT32: return *int32_ptr;
    230 case TYPE_UINT32: return *uint32_ptr;
    231 case TYPE_FLOAT32: return *float_ptr;
    232 case TYPE_NAME: return *name_ptr;
    233 case TYPE_STRING: return *string_ptr;
    234 case TYPE_VEC2: return *vec2_ptr;
    235 case TYPE_VEC3: return *vec3_ptr;
    236 case TYPE_VEC4: return *vec4_ptr;
    237 case TYPE_QUAT: return *quat_ptr;
    238 default: assert(false); return Value();
    239 }
    240 }
    241
    242 void SetValue(const Value& other) {
    243 assert(type == other.GetType());
    244
    245 switch (type) {
    246 case TYPE_BOOL: *bool_ptr = (bool)other; break;
    247 case TYPE_INT32: *int32_ptr = (int32_t)other; break;
    248 case TYPE_UINT32: *uint32_ptr = (uint32_t)other; break;
    249 case TYPE_FLOAT32: *float_ptr = (float)other; break;
    250 case TYPE_NAME: *name_ptr = (name_t)other; break;
    251 case TYPE_STRING: *string_ptr = (const char*)other; break;
    252 case TYPE_VEC2: *vec2_ptr = (vec2)other; break;
    253 case TYPE_VEC3: *vec3_ptr = (vec3)other; break;
    254 case TYPE_VEC4: *vec4_ptr = (vec4)other; break;
    255 case TYPE_QUAT: *quat_ptr = (quat)other; break;
    256 default: assert(false);
    257 }
    258 }
    259
    260 ValuePtr(bool* ptr) : bool_ptr(ptr) { type = TYPE_BOOL; }
    261 ValuePtr(name_t* ptr) : name_ptr(ptr) { type = TYPE_NAME; }
    262 ValuePtr(const char** ptr) : string_ptr(ptr) { type = TYPE_STRING; }
    263
    264 ValuePtr(int32_t* ptr) : int32_ptr(ptr) { type = TYPE_INT32; }
    265
    266 ValuePtr(uint32_t* ptr) : uint32_ptr(ptr) { type = TYPE_UINT32; }
    267
    268 ValuePtr(vec2* ptr) : vec2_ptr(ptr) { type = TYPE_VEC2; }
    269 ValuePtr(vec3* ptr) : vec3_ptr(ptr) { type = TYPE_VEC3; }
    270 ValuePtr(vec4* ptr) : vec4_ptr(ptr) { type = TYPE_VEC4; }
    271
    272 ValuePtr(quat* ptr) : quat_ptr(ptr) { type = TYPE_QUAT; }
    273
    274 ValuePtr(float* ptr) : float_ptr(ptr) { type = TYPE_FLOAT32; }
    275
    276 operator bool*() const { assert(type == TYPE_BOOL); return bool_ptr; }
    277 operator name_t*() const { assert(type == TYPE_NAME); return name_ptr; }
    278 operator const char**() const { assert(type == TYPE_STRING); return string_ptr; }
    279
    280 operator int32_t*() const { assert(type == TYPE_INT32); return int32_ptr; }
    281
    282 operator uint32_t*() const { assert(type == TYPE_UINT32); return uint32_ptr; }
    283
    284 operator float*() const { assert(type == TYPE_FLOAT32); return float_ptr; }
    285
    286 operator vec2*() const { assert(type == TYPE_VEC2); return vec2_ptr; }
    287 operator vec3*() const { assert(type == TYPE_VEC3); return vec3_ptr; }
    288 operator vec4*() const { assert(type == TYPE_VEC4); return vec4_ptr; }
    289
    290 operator quat*() const { assert(type == TYPE_QUAT); return quat_ptr; }
    291
    292 inline bool IsBool() const { return type == TYPE_BOOL; }
    293 inline bool IsInt() const { return type == TYPE_INT32 || type == TYPE_UINT32; }
    294 inline bool IsFloat() const { return type == TYPE_FLOAT32; }
    295
    296 inline Type GetType() const { return type; }
    297private:
    298 Type type;
    299
    300 union {
    301 bool* bool_ptr;
    303 const char** string_ptr;
    304 int32_t* int32_ptr;
    305 uint32_t* uint32_ptr;
    306 float* float_ptr;
    311 };
    312};
    313
    315public:
    316 ValueArray(const Value* first, size_t count) : first_field(first), field_count(count) {}
    317 const Value& operator [](size_t n) const { assert(n < field_count); return first_field[n]; }
    318 const size_t size() const { return field_count; }
    319private:
    320 const Value* first_field;
    321 size_t field_count;
    322};
    323
    324typedef Value value_t;
    326
    327}
    328
    329#endif // TRAM_SDK_FRAMEWORK_VALUE_H
    Definition: value.h:314
    const Value & operator[](size_t n) const
    Definition: value.h:317
    const size_t size() const
    Definition: value.h:318
    ValueArray(const Value *first, size_t count)
    Definition: value.h:316
    Generic, type-safe union.
    Definition: value.h:18
    bool IsQuat() const
    Definition: value.h:136
    int32_t int32_value
    Definition: value.h:188
    bool operator==(const Value &other) const
    Definition: value.h:30
    bool bool_value
    Definition: value.h:185
    Value(double value)
    Definition: value.h:67
    Value(uint32_t value)
    Definition: value.h:71
    Value(int16_t value)
    Definition: value.h:60
    int GetInt() const
    Definition: value.h:138
    Value(vec3 value)
    Definition: value.h:74
    void AssertType(Type type) const
    Definition: value.h:178
    Value & operator=(const Value &other)
    Definition: value.h:25
    vec4 vec4_value
    Definition: value.h:193
    Value(vec4 value)
    Definition: value.h:75
    bool IsBool() const
    Definition: value.h:128
    Value()
    Definition: value.h:20
    ~Value()
    Definition: value.h:21
    Value(const char *value)
    Definition: value.h:57
    vec2 vec2_value
    Definition: value.h:191
    Value(int32_t value)
    Definition: value.h:69
    std::string ToString()
    Definition: value.h:156
    name_t name_value
    Definition: value.h:186
    quat quat_value
    Definition: value.h:194
    Value(quat value)
    Definition: value.h:77
    float GetFloat() const
    Definition: value.h:147
    Value(name_t value)
    Definition: value.h:56
    vec3 vec3_value
    Definition: value.h:192
    uint32_t uint32_value
    Definition: value.h:189
    const char * string_value
    Definition: value.h:187
    bool IsVec4() const
    Definition: value.h:135
    Value(int64_t value)
    Definition: value.h:61
    Value(bool value)
    Definition: value.h:55
    Value(uint8_t value)
    Definition: value.h:63
    Value(const Value &other)
    Definition: value.h:23
    bool IsName() const
    Definition: value.h:131
    bool IsInt() const
    Definition: value.h:129
    Value(uint16_t value)
    Definition: value.h:64
    bool IsVec3() const
    Definition: value.h:134
    Value(int8_t value)
    Definition: value.h:59
    float float_value
    Definition: value.h:190
    Value(float value)
    Definition: value.h:79
    bool IsString() const
    Definition: value.h:132
    Value(vec2 value)
    Definition: value.h:73
    bool IsFloat() const
    Definition: value.h:130
    Type GetType() const
    Definition: value.h:174
    bool IsVec2() const
    Definition: value.h:133
    Type type
    Definition: value.h:176
    Value(uint64_t value)
    Definition: value.h:65
    Definition: value.h:200
    uint32_t * uint32_ptr
    Definition: value.h:305
    ValuePtr(vec3 *ptr)
    Definition: value.h:269
    ValuePtr(bool *ptr)
    Definition: value.h:260
    bool IsInt() const
    Definition: value.h:293
    int32_t * int32_ptr
    Definition: value.h:304
    bool IsFloat() const
    Definition: value.h:294
    ValuePtr(vec2 *ptr)
    Definition: value.h:268
    ValuePtr(quat *ptr)
    Definition: value.h:272
    void SetValue(const Value &other)
    Definition: value.h:242
    bool * bool_ptr
    Definition: value.h:301
    ValuePtr()
    Definition: value.h:202
    quat * quat_ptr
    Definition: value.h:310
    ValuePtr(float *ptr)
    Definition: value.h:274
    ValuePtr(vec4 *ptr)
    Definition: value.h:270
    name_t * name_ptr
    Definition: value.h:302
    vec4 * vec4_ptr
    Definition: value.h:309
    Type GetType() const
    Definition: value.h:296
    const char ** string_ptr
    Definition: value.h:303
    vec2 * vec2_ptr
    Definition: value.h:307
    ValuePtr(const ValuePtr &other)
    Definition: value.h:205
    ~ValuePtr()
    Definition: value.h:203
    ValuePtr(Value &other)
    Definition: value.h:207
    vec3 * vec3_ptr
    Definition: value.h:308
    bool IsBool() const
    Definition: value.h:292
    ValuePtr(int32_t *ptr)
    Definition: value.h:264
    ValuePtr(uint32_t *ptr)
    Definition: value.h:266
    ValuePtr(const char **ptr)
    Definition: value.h:262
    ValuePtr(name_t *ptr)
    Definition: value.h:261
    float * float_ptr
    Definition: value.h:306
    @ CORE
    Definition: system.h:14
    Serialization, i.e.
    glm::vec4 vec4
    Definition: math.h:15
    Type
    Type enumeration for serialization, etc.
    Definition: type.h:12
    @ TYPE_BOOL
    Definition: type.h:14
    @ TYPE_STRING
    Definition: type.h:16
    @ TYPE_VEC2
    Definition: type.h:24
    @ TYPE_UINT32
    Definition: type.h:22
    @ TYPE_INT32
    Definition: type.h:19
    @ TYPE_VEC3
    Definition: type.h:25
    @ TYPE_QUAT
    Definition: type.h:27
    @ TYPE_VEC4
    Definition: type.h:26
    @ TYPE_UNDEFINED
    Definition: type.h:13
    @ TYPE_NAME
    Definition: type.h:15
    @ TYPE_FLOAT32
    Definition: type.h:23
    glm::vec2 vec2
    Definition: math.h:16
    glm::vec3 vec3
    Definition: math.h:11
    glm::quat quat
    Definition: math.h:12
    void Log(Severity severity, System::system_t system, const std::string_view &format, Args &&... args)
    Definition: logging.h:79
    Value value_t
    Definition: event.h:21
    const char * TypeToString(Type type)
    Converts type enum to string.
    Definition: type.cpp:8
    ValueArray valuearray_t
    Definition: value.h:325
    UID name_t
    Definition: uid.h:43
    Interned string type.
    Definition: uid.h:10
    ================================================ FILE: docs/cppapi/vertices_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/vertices.cpp File Reference
    Tramway SDK v0.1.1
    vertices.cpp File Reference
    ================================================ FILE: docs/cppapi/vertices_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/vertices.h File Reference
    Tramway SDK v0.1.1
    vertices.h File Reference
    #include <render/renderer.h>
    #include <render/render.h>

    Go to the source code of this file.

    Classes

    struct  tram::Render::StaticModelVertex
     
    struct  tram::Render::DynamicModelVertex
     
    struct  tram::Render::SpriteVertex
     
    struct  tram::Render::LineVertex
     
    struct  tram::Render::Triangle
     
    struct  tram::Render::SpritePoint
     
    struct  tram::Render::ModelData
     
    struct  tram::Render::StaticModelData
     
    struct  tram::Render::DynamicModelData
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    namespace  tram::Render
     High-level Render system API.
     
    ================================================ FILE: docs/cppapi/vertices_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/render/vertices.h Source File
    Tramway SDK v0.1.1
    vertices.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_RENDER_VERTICES_H
    4#define TRAM_SDK_RENDER_VERTICES_H
    5
    6#include <render/renderer.h>
    7
    8#include <render/render.h>
    9
    10namespace tram::Render {
    11
    13 vec3 co; //< Vertex position in object space.
    14 vec3 normal; //< Vertex normal vector.
    15 vec2 tex; //< Vertex texture coordinates.
    16 vec2 lighttex; //< Vertex lightmap coordinates.
    17 uint32_t texture; //< Vertex texture material index.
    18};
    19
    21 vec3 co; //< Vertex position in object space.
    22 vec3 normal; //< Vertex normal vector.
    23 vec2 tex; //< Vertex texture coordinates.
    24 ivec4 bone; //< Vertex bone indices.
    25 vec4 boneweight; //< Vertex bone weights.
    26 uint32_t texture; //< Vertex texture material index.
    27};
    28
    30 vec3 co; //< Sprite position in object space.
    31 vec2 voffset; //< Vertex offset in projection space.
    32 vec2 texco; //< Vertex texture coordinates.
    33 vec3 color; //< Vertex color.
    34 float verticality; //< I don't remember.
    35 uint32_t texture; //< Vertex texture material index.
    36};
    37
    38struct LineVertex {
    39 vec3 co; //< Vertex position in object space.
    40 vec3 color; //< Vertex color.
    41};
    42
    43struct Triangle {
    44 ivec3 indices; //< Triangle vertex indices.
    45};
    46
    51 float rotation;
    55 uint32_t texture;
    56};
    57
    58struct ModelData {};
    59
    60struct StaticModelData : public ModelData {
    61 std::vector<StaticModelVertex> vertices;
    62 std::vector<Triangle> indices;
    63};
    64
    65struct DynamicModelData : public ModelData {
    66 std::vector<DynamicModelVertex> vertices;
    67 std::vector<Triangle> indices;
    68 std::vector<UID> groups;
    69};
    70
    71}
    72
    73#endif // TRAM_SDK_RENDER_VERTICES_H
    High-level Render system API.
    Definition: gui.h:8
    glm::ivec4 ivec4
    Definition: math.h:18
    glm::vec4 vec4
    Definition: math.h:15
    glm::vec2 vec2
    Definition: math.h:16
    glm::ivec3 ivec3
    Definition: math.h:17
    glm::vec3 vec3
    Definition: math.h:11
    Definition: renderer.cpp:449
    Definition: vertices.h:65
    std::vector< Triangle > indices
    Definition: vertices.h:67
    std::vector< DynamicModelVertex > vertices
    Definition: vertices.h:66
    std::vector< UID > groups
    Definition: vertices.h:68
    Definition: vertices.h:20
    ivec4 bone
    Definition: vertices.h:24
    vec2 tex
    Definition: vertices.h:23
    vec4 boneweight
    Definition: vertices.h:25
    uint32_t texture
    Definition: vertices.h:26
    vec3 co
    Definition: vertices.h:21
    vec3 normal
    Definition: vertices.h:22
    vec3 co
    Definition: vertices.h:39
    vec3 color
    Definition: vertices.h:40
    Definition: vertices.h:58
    Definition: vertices.h:47
    vec3 position
    Definition: vertices.h:48
    uint32_t texture
    Definition: vertices.h:55
    vec2 texture_size
    Definition: vertices.h:54
    vec2 texture_offset
    Definition: vertices.h:53
    vec3 center
    Definition: vertices.h:49
    float rotation
    Definition: vertices.h:51
    vec2 dimensions
    Definition: vertices.h:52
    vec3 color
    Definition: vertices.h:50
    Definition: vertices.h:29
    vec2 voffset
    Definition: vertices.h:31
    float verticality
    Definition: vertices.h:34
    uint32_t texture
    Definition: vertices.h:35
    vec2 texco
    Definition: vertices.h:32
    vec3 co
    Definition: vertices.h:30
    vec3 color
    Definition: vertices.h:33
    Definition: vertices.h:60
    std::vector< Triangle > indices
    Definition: vertices.h:62
    std::vector< StaticModelVertex > vertices
    Definition: vertices.h:61
    Definition: vertices.h:12
    vec3 co
    Definition: vertices.h:13
    uint32_t texture
    Definition: vertices.h:17
    vec3 normal
    Definition: vertices.h:14
    vec2 lighttex
    Definition: vertices.h:16
    vec2 tex
    Definition: vertices.h:15
    Definition: vertices.h:43
    ivec3 indices
    Definition: vertices.h:44
    ================================================ FILE: docs/cppapi/worldcell_8cpp.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/worldcell.cpp File Reference
    Tramway SDK v0.1.1
    worldcell.cpp File Reference
    #include <framework/worldcell.h>
    #include <framework/entity.h>
    #include <framework/transition.h>
    #include <framework/file.h>
    #include <framework/logging.h>
    #include <templates/pool.h>
    #include <templates/hashmap.h>
    #include <render/render.h>
    #include <config.h>
    #include <algorithm>
    #include <fstream>
    #include <cstring>
    #include <sstream>

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    ================================================ FILE: docs/cppapi/worldcell_8h.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/worldcell.h File Reference
    Tramway SDK v0.1.1
    worldcell.h File Reference
    #include <vector>
    #include <framework/uid.h>
    #include <framework/math.h>

    Go to the source code of this file.

    Classes

    struct  tram::WorldCell
     World streaming unit. More...
     

    Namespaces

    namespace  tram
     Serialization, i.e.
     
    ================================================ FILE: docs/cppapi/worldcell_8h_source.html ================================================ Tramway SDK: C:/Users/Poga/Desktop/painis/tram-sdk/src/framework/worldcell.h Source File
    Tramway SDK v0.1.1
    worldcell.h
    Go to the documentation of this file.
    1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
    2
    3#ifndef TRAM_SDK_FRAMEWORK_WORLDCELL_H
    4#define TRAM_SDK_FRAMEWORK_WORLDCELL_H
    5
    6#include <vector>
    7
    8#include <framework/uid.h>
    9#include <framework/math.h>
    10
    11namespace tram {
    12
    13class Entity;
    14class Transition;
    15
    16class WorldCell {
    17public:
    18 WorldCell(name_t name) { this->name = name; }
    19
    20 inline name_t GetName() { return name; }
    21
    22 inline bool IsLoaded() { return flags & LOADED; }
    23 inline bool IsInterior() { return flags & INTERIOR; }
    24 inline bool HasInteriorLighting() { return flags & INTERIOR_LIGHTING; }
    25 inline bool IsDebugDraw() { return flags & DEBUG_DRAW; }
    26 inline bool HasAutomaticLoading() { return flags & AUTOMATIC_LOADING; }
    27
    28 inline void SetInterior(bool is) { SetFlag(INTERIOR, is); }
    29 inline void SetInteriorLights(bool is) { SetFlag(INTERIOR_LIGHTING, is); }
    30 inline void SetDebugDraw(bool is) { SetFlag(DEBUG_DRAW, is); }
    31 inline void SetAutomaticLoading(bool is) { SetFlag(AUTOMATIC_LOADING, is); }
    32
    33 void Load();
    34 void Unload();
    35
    36 void LoadFromDisk();
    37
    38 void Add(Entity* entity);
    39 void Remove(Entity* entity);
    40
    41 size_t GetEntityCount() { return entities.size(); }
    42
    43 void Add(Transition* transition);
    44
    45 void Link(WorldCell* other);
    46
    48
    49 inline const std::vector<Entity*>& GetEntities() { return entities; }
    50 inline const std::vector<Transition*>& GetTransitions() { return transitions; }
    51 inline const std::vector<Transition*>& GetVolume() { return volume; }
    52
    53
    54 bool IsInside(vec3 point);
    55
    56 static WorldCell* Find (vec3 point);
    57 static WorldCell* Find (name_t name);
    58 static WorldCell* Make (name_t name);
    59
    60protected:
    61 enum {
    62 LOADED = 1,
    68 };
    69
    70 inline void SetFlag(uint32_t flag, bool value) { flags = value ? flags | flag : flags & ~flag; };
    71
    74 std::vector<Entity*> entities;
    75 std::vector<Transition*> transitions;
    76 std::vector<Transition*> volume;
    77};
    78
    79}
    80
    81#endif // TRAM_SDK_FRAMEWORK_WORLDCELL_H
    Entity base class.
    Definition: entity.h:23
    Connects WorldCells together.
    Definition: transition.h:15
    World streaming unit.
    Definition: worldcell.h:16
    void Add(Entity *entity)
    Adds an entity to the worldcell.
    Definition: worldcell.cpp:191
    std::vector< Entity * > entities
    Definition: worldcell.h:74
    const std::vector< Transition * > & GetTransitions()
    Definition: worldcell.h:50
    void SetInterior(bool is)
    Definition: worldcell.h:28
    uint32_t flags
    Definition: worldcell.h:73
    std::vector< Transition * > transitions
    Definition: worldcell.h:75
    bool IsInterior()
    Definition: worldcell.h:23
    void Load()
    Loads the cell.
    Definition: worldcell.cpp:83
    const std::vector< Transition * > & GetVolume()
    Definition: worldcell.h:51
    bool IsInside(vec3 point)
    Checks if point is inside the worldcell.
    Definition: worldcell.cpp:168
    void LoadFromDisk()
    Loads worldcell data from disk.
    Definition: worldcell.cpp:248
    void SetFlag(uint32_t flag, bool value)
    Definition: worldcell.h:70
    std::vector< Transition * > volume
    Definition: worldcell.h:76
    size_t GetEntityCount()
    Definition: worldcell.h:41
    void SetInteriorLights(bool is)
    Definition: worldcell.h:29
    bool HasAutomaticLoading()
    Definition: worldcell.h:26
    bool IsDebugDraw()
    Definition: worldcell.h:25
    @ DEBUG_DRAW
    Definition: worldcell.h:65
    @ AUTOMATIC_LOADING
    Definition: worldcell.h:66
    @ LOADED_FROM_DISK
    Definition: worldcell.h:67
    @ INTERIOR
    Definition: worldcell.h:63
    @ LOADED
    Definition: worldcell.h:62
    @ INTERIOR_LIGHTING
    Definition: worldcell.h:64
    const std::vector< Entity * > & GetEntities()
    Definition: worldcell.h:49
    name_t name
    Definition: worldcell.h:70
    void Remove(Entity *entity)
    Removes an entity from the worldcell.
    Definition: worldcell.cpp:226
    WorldCell(name_t name)
    Definition: worldcell.h:18
    static WorldCell * Find(vec3 point)
    Finds the WorldCell which contains a given point.
    Definition: worldcell.cpp:67
    static WorldCell * Make(name_t name)
    Creates a WorldCell by name.
    Definition: worldcell.cpp:49
    name_t GetName()
    Definition: worldcell.h:20
    void Link(WorldCell *other)
    Links a worldcell.
    Definition: worldcell.cpp:179
    void Unload()
    Unloads the cell.
    Definition: worldcell.cpp:101
    WorldCell * FindTransition(vec3 point)
    Finds a transition from a position.
    Definition: worldcell.cpp:132
    void SetDebugDraw(bool is)
    Definition: worldcell.h:30
    bool HasInteriorLighting()
    Definition: worldcell.h:24
    bool IsLoaded()
    Definition: worldcell.h:22
    void SetAutomaticLoading(bool is)
    Definition: worldcell.h:31
    Serialization, i.e.
    glm::vec3 vec3
    Definition: math.h:11
    Interned string type.
    Definition: uid.h:10
    ================================================ FILE: docs/default.css ================================================ body { font-size: 10pt; font-family: Arial,Helvetica,sans-serif; /*font-family: Verdana,Arial,Helvetica,sans-serif;*/ } .titlebar { position: relative; } .titlebar .links { position: absolute; bottom: 0; right: 0; padding-right: 5px; padding-bottom: 2px; } .menubar a, .menubar a:link, .menubar a:visited, .menubar a:focus, .menubar a:active { color: white; } .menubar a:hover { color: white; text-decoration: none; } .menubar { font-family: Verdana,Arial,Helvetica,sans-serif; } .navbar { width: 100%; } .navbar .left { width: 50px; } .navbar .middle { text-align: center; } .navbar .right { width: 50px; text-align: right; } .resizable { width: 320px; } h1, h2, h3, h4, h5 { margin-top: 0; margin-bottom: 0; } p { margin-top: 4px; margin-bottom: 4px; } h1 { font-size: 16pt; } h2 { font-size: 12pt; } h3 { font-size: 11pt; } h4 { font-size: 10pt; } ul { margin-top: 0; padding-left: 20px; } .codefunc { color: blue; } .codeclass { color: blue; } .codekeyw { color: red; } .codecomm { color: green; } .codelit { color: orange; } .codespac { color: blue; } .codeexample { white-space: pre; } .infobox { /* margin: 0px 10px 0px 10px;*/ margin: 10px 0px 10px 0px; padding: 10px 15px 10px 15px; border: 2px groove gray; } /* disables animated GIFs if reduced motion is requested */ @media (prefers-reduced-motion) { .animated { display: none; } } ================================================ FILE: docs/desktop.ini ================================================ [ViewState] Mode= Vid= FolderType=Documents ================================================ FILE: docs/documentation/audio.html ================================================ Audio | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Audio


    The audio system provides audio playback services.

    Currently it only supports playing back audio from audio files, and from .ogg format audio files in particular.

    In the future, the system will be enhanced to allow streaming audio, and possibly to allow for more formats to be used.

    If you want to easily play back sounds in your levels, check out the Sound entity. It also has a scripting API option, which is useful for playing back sound effects.

    If you want to incorporate audio playback into the entities you are constructing, you will find the Audio Component useful.

    Key concepts


    Sound

    A sound is a Resource. It contains audio data loaded from an .ogg audio file.

    Source

    A source will play back the audio contained in a Sound. It can be positioned in 3D space.

    Listener

    A listener is usually attached to the render view. It has a position and an orientation.

    It determines how the sources should sound like, relative to it, i.e. if a sound source is next to the listener, it will sound very loud, and if it is moved to be very far from the listener, it will be very quiet.

    Programming in C++


    // TODO: implement

    Scripting in Lua


    // TODO: implement

    Backends


    Just like Physics and Render, the Audio system provides an interface for swapping out the audio system backends. The possible options are:

    OpenAL

    This is the default Audio backend. It uses the OpenAL library to play back audio.

    Spatial

    An experimental audio backend. Uses path tracing adapted from the primary sample space metropolis light transport algorithm. Very fancy, but also very slow and broken. Might not even compile without some fixes.

    Template

    The template for implementing further backends. Implements only stubs of the internal API functions. Can be used if you don't want to use any audio.
















    ================================================ FILE: docs/documentation/components/animation.html ================================================ Animation Component | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Animation Component


    This EntityComponent plays back animations. More precisely, it generates pose matrices for the deformation of 3D models. It basically lets you animate 3D models.

    With this component you get 8 tracks to play back animations on. You also get an additional track for procedural animations.

    Multiple animations get added together. This can be used to animate parts of characters seperately.

    The playback speed of animations can be changed. This is useful for movement animations.

    You can also set up weights for animations. For example, you could create a nodding animation for a character. Then you could play it back with a weight of 0.2 to get a slight nod, 0.5 to get a normal nod and 1.0 to get a very enthusiastic nod.

    There are also fade-ins and fade-outs, which gradually increase or decrease the animation weight. This could be used, for example, if you created a walking animation for a character, which you could fade out, to make the character appear as if it is gradually coming to a stop.

    There is some limited animation re-targeting – if the model for which you created the animations has an armature which is similar enough for the model which you want to animate, you can play back the same animations ande everything will work. The bone names do need to be exactly the same in both models.

    Programming in C++


    #include <components/animation.h>
    API documentation page.

    The only thing that you need to do before initializing this component? You need to feed it a model. This has to be a dynamic model, since static models have no bone data in them.

    Component<AnimationComponent> component;

    component.make();
    component->SetModel("mongus");
    component->Init();

    Then you can begin playing some animations. You do need to make sure that the animation that you want to play is already loaded, since I forgot to add the code for them to be automatically streamed in. Anyway:

    Animation::Find("mongus-run")->Load(); component->PlayAnimation("mongus-run", -1, 1.0f, 1.0f);

    If you look closely, you will notice that we set the number of repeats to -1. This means that it will repeat for a very long time. It will stop eventually, but it will take at least 2 years for an application running at 60 FPS.

    To actually view the animation that you are playing, you need to attach it to a RenderComponent.

    Component<RenderComponent> model;

    model.make();
    model->SetModel("mongus");
    model->Init();

    model->SetArmature(component);

    The possibilities of animation playback are limitless. Check the API documentation for more information.

    Scripting in Lua


    Still working on this.
















    ================================================ FILE: docs/documentation/components/audio.html ================================================ Audio Component | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Audio Component


    This EntityComponent is a wrapper for audio sources.

    Pass in the sound which it needs to play, the position of the audio source and it will play it. Very easy. Very simple.

    Programming in C++


    #include <components/audio.h>
    API documentation page.

    Currently sounds won't get automatically streamed in via the Async system, so make sure that the sound is already loaded before passing it to the component:

    Sound::Find("my-sound")->Load();

    Remember to store the Component<> smart pointer in a class, static variable, or otherwise ensure that it doesn't immediately get destructed.

    Component<AudioComponent> audio;

    audio.make();
    audio->SetLocation({0.0f, 0.0f, 0.0f});
    audio->SetSound("my-sound");
    audio->SetRepeating(true);
    audio->Init();

    After initialization, you can begin playback of the sound, pause it or stop it completely.

    audio->Play();  // Begins the playback of the sound
    audio->Pause(); // Pauses the playback
    audio->Stop();  // Cancels the playback

    You can also check the status of the playback.

    // Since we stopped the playback, this will
    // evaluate to false
    if (audio->IsPlaying()) {
        printf("Audio source is playing.");
    } else {
        printf("Audio source has stopped.");
    }


    Scripting in Lua


    Not yet implemented.
















    ================================================ FILE: docs/documentation/components/controller.html ================================================ Controller Component | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Controller Component


    This EntityComponent can be used for controlling players and NPCs and that sort of stuff.

    Programming in C++


    #include <components/controller.h>
    API documentation page.

    All you really need to do to get started is just the creation of the component. Also you need to feed in a pointer to the entity which will be controlled by this component. It will automatically update the position of it when it moves.

    Component<ControllerComponent> component;

    component.make();
    component->SetParent(this);
    component->Init();

    After that, you can begin sending commands to the component. Check the API documentation to see what kinds of commands there are. You can also look at the implementation of the PlayerComponent to see an example of the usage of the component.

    Scripting in Lua


    Not done yet.
















    ================================================ FILE: docs/documentation/components/light.html ================================================ Light Component | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Light Component


    This EntityComponent is a wrapper around a light.

    Programming in C++


    #include <components/light.h>
    API documentation page.

    It's very simple, just pick the position of the light and its color. If you want to increase the brightness of the light, multiply the

    Component<LightComponent> component;

    const float brightness = 2.0f;
    const vec3 color = {0.38f, 0.25f, 0.31f};

    component.make();
    component->SetLocation({0.0f, 0.0f, 0.0f});
    component->SetColor(brightness * color);
    component->Init();

    If you want to turn the light from a point light into a spotlight, you can set its direction and exponent. The direction is a direction normal vector. The exponent starts at 1.0 and increasing it narrows the spotlight's width.

    component->SetDirection(DIRECTION_FORWARD);
    component->SetExponent(16.0f);


    Scripting in Lua


    Still working on it...
















    ================================================ FILE: docs/documentation/components/particle.html ================================================ Particle Component | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Particle Component


    This EntityComponent allows the creation of a particle system.

    The API is still not finallized. It's possible to manually spawn in individual particles, but this feature is still being worked on.

    If you have any suggestions, consider leaving a Github issue.

    Programming in C++


    #include <components/sprite.h>
    API documentation page.

    Scripting in Lua


    Still working on it...
















    ================================================ FILE: docs/documentation/components/physics.html ================================================ Physics Component | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Physics Component


    This EntityComponent is a wrapper around a rigidbody.

    // TODO: finish

    Programming in C++


    #include <components/physics.h>
    API documentation page.

    // TODO: finish

    Scripting in Lua


    Still working on it... might be finished soon...
















    ================================================ FILE: docs/documentation/components/player.html ================================================ Player Component | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Player Component


    This EntityComponent can be used to translate UI inputs into inputs for the ControllerComponent

    // TODO: finish

    Programming in C++


    #include <components/player.h>
    API documentation page.

    // TODO: finish

    Scripting in Lua


    Working.... working....
















    ================================================ FILE: docs/documentation/components/render.html ================================================ Render Component | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Render Component


    This EntityComponent is a wrapper around a draw list entry. It provides an easy to use interface by which it is possible to add a 3D model to the scene and to manipulate it in various ways.

    This is the first component I created for the framework and the one I have been cooking for the longest. Hopefully it is also very good and very useful. If you do not find it very useful, leave a Github issue.

    // TODO: finish

    Programming in C++


    #include <components/template.h>
    API documentation page.

    // TODO: finish

    Scripting in Lua


    This one will probably the first that I work on. But still working on...
















    ================================================ FILE: docs/documentation/components/sprite.html ================================================ Sprite Component | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Sprite Component


    This EntityComponent displays a sprite.

    If the spritesheet contains multiple sprites, it's possible to play them as an animation. Very neat!

    Programming in C++


    #include <components/sprite.h>
    API documentation page.

    To get started, construct the component, feed it a sprite and set its location. It might take a few moments for the sprite to be streamed in.

    Component<SpriteComponent> component;

    component.make();
    component->SetSprite(Sprite::Find("poland"));
    comopennt->UpdateLocation({3.0f, 1.2f, -1.0f});
    component->Init();

    If you want to play the spritesheet as an animation.

    component->SetPlaySpeed(2);
    component->Play();


    Scripting in Lua


    Eventually it will be finished, but might take some time.
















    ================================================ FILE: docs/documentation/components/template.html ================================================ Template Component | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Template Component


    This EntityComponent is a template. You can copy it to quickly create new components.

    Programming in C++


    #include <components/template.h>
    API documentation page.

    You probably don't want to use this component directly. Just copy the files components/template.h and components/template.cpp, rename them to mycomponent.h and mycomponent.cpp respectively and inside of these new files replace each instance of TemplateComponent with MyComponent.

    Other frameworks have fancy commandline scripts to let you quickly create new components. We do not have any fancy scripts. You will need to create your components manually.

    Scripting in Lua


    For scripting there will be a scripting component. That you will be able to use. But it's not fully implemented yet.
















    ================================================ FILE: docs/documentation/components/trigger.html ================================================ Trigger Component | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Trigger Component


    This EntityComponent is a wrapper around a trigger.

    The trigger itself is triggered by rigidbodies moving into its volume. You can add a callback, which will be fired when that happens, or you can have it store the collision data, so that you can pick it up and to whatever you want to do with it.

    The volume of the trigger can be taken from a collision model, or a collision shape.

    // TODO: finish

    Programming in C++


    #include <components/template.h>
    API documentation page.

    // TODO: finish

    Scripting in Lua


    Yes, working. Very working.
















    ================================================ FILE: docs/documentation/components.html ================================================ Components | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Components


    The framework comes packaged with some pre-made EntityComponents. Some of these components are convenient wrappers around lower level systems, others have some logic of their own.

    These components are:

    • Animation
    • Allows playback of Animations for 3D models. Can be attached to a RenderComponent.

    • Audio
    • A wrapper around an audio source. Can be used to play back sounds.

    • Controller
    • Controller for characters, i.e. player, NPCs. Accepts movement commands, i.e. walk, turn, jump, etc.

    • Light
    • A wrapper around a light. Used to illuminate the 3D scene.

    • Particle
    • Enables the creation of particle effects, i.e. smoke, sparks, falling leaves, snow, etc.

    • Physics
    • A wrapper around a rigidbody in the physics simulation.

    • Player
    • Maps input from the UI system into commands for a CharacterController.

    • Render
    • A wrapper around a draw list entry. Used to display 3D models in the scene.

    • Sprite
    • Can be used to display a flat 2D image in a 3D scene.

    • Template
    • Blank component, the source of which can be copied to be used as a base to create new components.

    • Trigger
    • A wrapper around a trigger. Can fire off callbacks when a rigidbody enters its volume.
















    ================================================ FILE: docs/documentation/entities/crate.html ================================================ Crate | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Crate


    This entity can be placed in a level. It doesn't do anything other than do normal rigidbody stuff.

    Fields


    Model | Name

    Name of the 3D model.

    Collision Model | Name

    Name of the collision model.

    Messages


    There are none.

    Signals


    There are none.
















    ================================================ FILE: docs/documentation/entities/decoration.html ================================================ Sound | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Decoration


    Displays a 3D model and optionally plays back an animation on it.

    Fields


    Flags | Int32

    Bitmask, see flags section.

    Model | Name

    Name of both the 3D model and the collision model.

    Animation | Name

    Name of the animation that the model will play. If set to none, no animation will be played and the AnimationComponent won't even be created.

    Flags


    1 | FLAG_LOCKED

    The decoration is locked and prevented from activating.

    Messages


    Select | SELECT

    If the decoration isn't locked, it will emit a Selected event.

    Activate Once | ACTIVATE_ONCE

    If the decoration isn't locked, it will fire the Activate and the Use signals.

    Lock | LOCK

    Locks the decoration.

    Unlock | UNLOCK

    Unlocks the decoration.

    Toggle | TOGGLE

    If an animation is set and is being played, it will be stopped. If it is stopped, it will be restarted.

    Kill | KILL

    Yeets the entity.

    Start | START

    If an animation is set, it will be played back.

    Stop | STOP

    If an animation is being played back, it will be stopped.

    Set Animation | SET_ANIMATION

    Switches which animation the component will play back. The data pointer of the message needs to be set to a Value which contains the name of the animation to which the switch is happening.

    Signals


    Activate | ACTIVATE

    Fired when the entity is activated and isn't locked.

    Use | USE

    Fired when the entity is activated and isn't locked.
















    ================================================ FILE: docs/documentation/entities/light.html ================================================ Light | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Light


    Places a light into the scene.

    Fields


    Color | Vec3

    The color of the light.

    Distance | Float32

    Maximum distance, in meters, that the light is allowed to travel. Used for lightmapping optimiziations.

    Direction | Vec3

    The direction of the light, if used as a spotlight. If you want a point light, set this to a random unit vector like {0, 1, 0}.

    Exponent | Float32

    Spotlight exponent. Higher values means narrower spot. Set this value to 1.0 to get a point light.

    Messages


    There are none.

    Signals


    There are none.
















    ================================================ FILE: docs/documentation/entities/marker.html ================================================ Marker | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Marker


    This entity doesm't do anything.

    Fields


    There are none.

    Messages


    There are none.

    Signals


    There are none.
















    ================================================ FILE: docs/documentation/entities/player.html ================================================ Player | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Player


    Adds a player. The entity will accept keyboard inputs and move about.

    Since this entity type doesn't get registered and has no fields, it can't be placed in the level editor. Instead, it should be created through code.

    Fields


    There are none.

    Messages


    There are none.

    Signals


    There are none.
















    ================================================ FILE: docs/documentation/entities/sound.html ================================================ Sound | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Sound


    This entity can be placed in a level to play back sounds.

    It also has a constructor so that it can be created thorugh code. If created this way, the entity will yeet itself once it finishes playing back the sound. This way you can play a sound effect and then forget it.

    Fields


    Flags | Int32

    Bitmask, see flags section.

    Sound | Name

    Name of the sound that the entity will play back.

    Volume | Float32

    How loud the sound will be. From 0.0 to 1.0.

    Flags


    1 | SOUND_LOOPING

    The sound will loop after finishing.

    2 | SOUND_START_ON_LOAD

    The sound will begin playback as soon as the entity is loaded. Useful for ambient sort of environmental sounds

    Messages


    Toggle | TOGGLE

    If the sound is being played, it will be stopped. If it is stopped, it will start again.

    Kill | KILL

    This yeets the entity.

    Start | START

    Starts playing back the sound.

    Stop | STOP

    Stops playing back the sound.

    Signals


    There are none.
















    ================================================ FILE: docs/documentation/entities/staticwobj.html ================================================ Static World Object | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Static World Object


    This entity is used for worldspawns. To make parts of the level out of.

    Fields


    Model | Name

    Name of both of the 3D model and the collision model.

    Lightmap | Name

    Name of the lightmap material.

    Messages


    There are none.

    Signals


    There are none.
















    ================================================ FILE: docs/documentation/entities/trigger.html ================================================ Trigger | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Trigger


    This entity can be used to detect collisions with other entities.

    Fields


    Flags | UInt32

    Bitmask, see flags section.

    Collision Mask | UInt32

    The collision mask of the trigger.

    Model | Name

    Name of the collision model that the trigger will use.

    Flags


    1 | TRIGGER_DISABLED

    This will disable the trigger from being triggered.

    Messages


    Lock | LOCK

    Disables the trigger.

    Unlock | UNLOCK

    Enables the trigger.

    Signals


    Activate | ACTIVATE

    Fired when an entity collides with the trigger volume.
















    ================================================ FILE: docs/documentation/entities.html ================================================ Entities | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Entities

    The framework comes with some pre-made enitites. These are very nice, you should try using them. If you want, you can extend them by subclassing them and building a new entity on top of them.
















    ================================================ FILE: docs/documentation/entitydefinition.html ================================================ Entity Definition | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Entity Definition


    It's the .entdef file in the data directory.

    // TODO: document















    ================================================ FILE: docs/documentation/extensions/camera.html ================================================ Camera | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Camera


    All camera types basically do a bit of logic and then come up with a position and a rotation. Then they pass them over to the Render system to and use them to set the View and pass them to the Audio system to set the listener.

    Programming in C++


    Camera Interface

    #include <extensions/camera/camera.h>
    API documentation page.

    First Person Camera

    #include <extensions/camera/firstperson.h>
    API documentation page.

    Here's how to do a first person camera.

    // here will be our camera
    Ext::Camera::FirstPersonCamera* camera = nullptr;

    // this will be our player
    Entity* player = Entity::Find("player");

    // let's make a new camera
    camera = new Ext::Camera::FirstPersonCamera;

    // this attaches the camera to the player
    camera->SetFollowing(player);

    // this will allow rotation of the camera
    // by moving the mouse cursor
    camera->SetMouselook(true);

    // this will rotate the player with the
    // camera. useful if player has a visible
    // 3D model
    camera->SetRotateFollowing(true);

    // this will position the camera half a meter
    // above the player entity's middle point
    camera->SetFollowingOffset({0.0f, 0.5f, 0.0f});

    // this turns on the camera
    camera->SetActive();

    There are other camera types, but they are sort of unfinished.
















    ================================================ FILE: docs/documentation/extensions/kitchensink/animationtable.html ================================================ AnimationTable | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    AnimationTable


    This is what is called a hierarchical animation blend space tree graph node automata. It basically lets you define how an AnimationComponent should switch between animations, and which animations it can and which ones it cannot play back at the same time.

    Key concepts


    State

    When in a given state, the component will play back an animation. When the state is switched, it will perform the configured transition, such as a fade-in or fade-out.

    State space

    The state space holds a They are organized hierarchically, and higher state spaces can override lower state spaces with their state.

    For example, a character could have a state space for torso and for legs, both of which could be parented to a full body state space. It could then play back animations on the torso and legs seperately, but sometimes it is easier to create an animation for the armature together, like when climbing a ladder, so then a state could be changed in the full body space and it would override the animations of torso and legs.

    Transition

    When a transition between two states occurs, the animations have to be switched. A transition determines how this occurs. It allows to configure fade-ins, fade-outs and their durations.

    Programming in C++


    I still haven't finalized the API and debugged everything, so it's not finished yet.
















    ================================================ FILE: docs/documentation/extensions/kitchensink/soundtable.html ================================================ SoundTable | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    SoundTable


    A sound table contains many-to-many mappings from a key to a name of a sound. This allows to associate sounds with a certain category.

    For example, Button entity has a sound table parameter. When it opens or close, it will look up the sounds mapped to the SOUND_OPEN and SOUND_CLOSE keys respectively. If it finds a sound that is mapped to a give key, it will play it back.

    Since there can be multiple sounds mapped to the same key, if there arises such a situation when a sound is being looked up and there are multiple sounds associated with the given key, a random sound that is mapped to said key will be returned.

    Programming in C++


    #include <extensions/kitchensink/soundtable.h>
    API documentation page.

    Very simple API. It was supposed to be very simple, so it is such.

    SoundTable* table = SoundTable::Find("table");

    table->AddSound(SOUND_OPEN, "open1");
    table->AddSound(SOUND_OPEN, "open2");
    table->AddSound(SOUND_CLOSE, "close1");

    // this variable will be set to "close1"
    name_t sound = table->GetSound(SOUND_CLOSE);

    // this will play back either "open1" or "open2"
    table->Play(SOUND_OPEN);















    ================================================ FILE: docs/documentation/extensions/kitchensink.html ================================================ Kitchensink | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Kitchensink


    This is where I put all of the random stuff that I feel like a lot of users could maybe not actually want to use.

    Putting this in an extension allows you to skip compiling this part of the framework.
















    ================================================ FILE: docs/documentation/extensions/menu.html ================================================ Menu | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Menu


    The menu system provides a menu dialog framework and implementations of a couple of useful menus.

    Debug Menu


    The debug menu provides a way to view the list of all loaded worldcells, all loaded entities, select entities by mouse picking, view worldcell settings and change them, view entity settings, send messages to entities, emit events, visualize all of the events and messages being sent through their queues.

    By default it is accessible by pressing the ~, aka `, aka the tilde key.

    Settings Menu


    The settings menu provides a way to change various engine settings, such as FOV, key bindings, screen resolution, fullscreen mode, GUI scale and others.

    By default it is accessible by pressing the Esc key and then selecting Settings in the escape menu.
















    ================================================ FILE: docs/documentation/extensions/scripting.html ================================================ Scripting | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Scripting


    This extension contains the bindings for various scripting languages, and by various I mean Lua. We only have Lua.
















    ================================================ FILE: docs/documentation/extensions.html ================================================ Extensions | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Extensions

    Extensions are parts of the framework are optional parts of the framework. Most extensions are various useful tools, game mechanics, integrations with other services.

    Currently available extensions are:

    • Camera
    • This extension contains implementations of first-person, third-person and other cameras for various viewpoints. They support effects like tilting, view bobbing and screen shakes.

    • Kitchensink
    • This extension contains random game mechanics and other useful tools that didn't fit in other extensions.

    • Menu
    • This extension contains a framework for creating menus, as well as implementation of a debugging menu, a settings menu and an escape/pause screen menu.

    • Scripting
    • This extension contains integrations with various scripting languages. Curently the only scripting language that is fully integrated is the Lua scripting language.
















    ================================================ FILE: docs/documentation/framework/async.html ================================================ Async | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Async


    The Async system lets you do stuff... asynchronously. On a separate worker thread. This meant that the main logic thread can be freed up from certain computations and in general makes the framework go vroom vroom.

    Currently the async system supports Resource loading. In the future it will get some more functionality, but it's only resources for now.

    To use it, you need to initialize the system. This will start up the worker threads. The system needs to be updated in the main loop and then shut down.

    Unfortunately, it seems like multithreading still doesn't work in webassembly builds, so you will have to do resource loading entirely from the main thread.

    Resource streaming


    Let's take the Model resource as an example. It is derived from the Resource class and implements its API.

    Most of the time while loading the Model is spent retrieving it from the disk and parsing it. All of the relevant logic is implemented in the LoadFromDisk() method. This method will be called from the worker thread.

    Due to a quirk in the OpenGL API, we need to perform all of the data uploads to the GPU from the main thread. The relevant logic for this is implemented in the LoadFromMemory() method.

    Example



    This is what happens when you call the SetModel() method on a RenderComponent and if the Model isn't loaded yet.

    What happens when you assign a Model to a RenderComponent?

    1. The RenderComponent will check if the Model is loaded. If it is not, it will pass the Model to the Async system, which will add it to the disk loading queue.
    2. The worker thread will pop the Model from the disk loading queue and will call its LoadFromDisk() method. The method will load the .stmdl or .dymdl file associated with the Model, parse it into binary format and build up an AABB tree. The worker will then add the resource to the memory loading queue.
    3. The main thread will pop the Model from the memory loading queue and will call its LoadFromMemory() method. The method will pass the binary model data to the Render API, which in turn will upload the model data to the GPU memory. The memory containing the binary data will then be free. Finally the Model will be added to the finishing queue.
    4. The main thread will pop the Model from the finishing queue. It will then check which EntityComponent requested the resource to be loaded. It will then notify our RenderComponent about the loaded resource.
    5. The RenderComponent will then add the loaded 3D model to the scene. It will then be eligible to be rendered to the screen.

    Programming in C++


    #include <framework/async.h>
    API documentation page.


    const size_t thread_count = 1;

    Async::Init(thread_count);

    // main loop
    while (true) {

        // the worker thread won't start on webassembly
        // builds, so we just do that part on the
        // main thread

    #ifdef __EMSCRIPTEN__
        Async::LoadResourcesFromDisk();
    #endif

        Async::LoadResourcesFromMemory();
        Async::FinishResources();
    }

    Async::Yeet();

    It is possible to request a resource to be loaded by calling the Async::RequestResource() function, but a better way would be by using the ResourceProxy smart pointer, which will not only automatically request a resource to be loaded, but will also automatically manage reference count.

    If you want to create a progress bar which displays the process of resource loading, you can use Async::GetWaitingResources() to get the number of resources being processed by the Async system.
















    ================================================ FILE: docs/documentation/framework/core.html ================================================ Core | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Core


    This is the main system of the framework. It keeps track of the main loop, provides ID number generation services and keeps track of the framework version.

    Key concepts


    Frame

    Each cycle of the main loop is called a frame. It is called that because during each loop you render a single frame of graphics.

    Tick

    There are 60 ticks in a second. If you have a 60hz monitor and you have turned on vsync or a frame limiter, then a tick will be the same as a frame.

    This concept allows you to create applications as if they were always run at 60 frames per second.

    Programming in C++


    #include <framework/core.h>
    API documentation page.

    Every application created with the framework needs to initialize and update the core system.

    Core::Init();

    // main loop
    while (true) {
        Core::Update();
    }

    That was very simple.

    id_t id = GenerateID();

    uint32_t ticks = GetTick();

    double time = GetTickTime();
    float delta_time GetDeltaTime();

    After the previous bit of code is executed:

    • The variable id will contain a new, unique ID number.
    • The variable ticks will contain the number of ticks which have elapsed since the initialization of the application.
    • The variable time will contain the time, in seconds, that has passed since the initialization of the application.
    • The variable delta_time will contain the time, in seconds, that has passed between the start of this and the start of the previous frame.















    ================================================ FILE: docs/documentation/framework/entity.html ================================================ Entity | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Entity


    Entities are one of the main concepts of the framework. An entity is a thing. Anything. A part of the level geometry, an interactable object, a pickup or an NPC.

    Entities are also the things that receive messages and the things that you place down in the level editor.

    Most of your entities will probably be placed in WorldCells, which are the basic level and streaming units of your virtual world.

    Re-usable parts of the entity logic are usually placed into EntityComponents and entities are then assembled out of them.

    Key concepts


    ID

    Each entity gets its own unique ID number. You can assign an ID number to an entity, or the framework can generate one for you. No two entities can have the same ID number, since then the framework will assume that one of the entitie is a copy and will yeet it.

    Name

    Entities can be given names, but unlike an ID, these are optional. This is also how you will refer to specific entities most of the time.

    Type

    Each entity has a type. It determines its behavior and what kinds of properties it has.

    Properties

    Each entity has properties. These can be numbers, strings, vectors or other kinds of types. An entity's properties can be edited in the level editor.

    They are also called parameters, fields and entity data. Mostly because I keep forgetting how this concept is called.

    Location/Rotation

    Each entity gets a rotation and a location. This transform is used to determine in which WorldCell the entity is located in and when to load and unload it

    Loading/Unloading

    When an entity is constructed, either through code or from a record in a WorldCell file on disk, it starts out unloaded and has no EntityComponents attached to it. It just sits there, doing nothing.

    When an entity is loaded, either when its WorldCell is loaded or on some other event, it will construct its EntityComponents and pass its properties to them.

    When unloaded again, it will pack up and yeet all of its EntityComponents. This saves on computational resources – it allows the framework to process only a small part of all of the entities at the same time.

    Programming in C++


    #include <framework/entity.h>
    API documentation page.

    If you want to create your own entity type, a good place to start would be by copying the Marker entity.

    The other way would be to create a subclass of the Entity class and then implement all of its virtual methods. If you want the Entity to be loadable from a level file, you also need to add an entity type registration static method. Additionally, you could add the type to your project's entity definition file, so that the level editor and other utilities can process your entity type.

    To interact with an entity, you first need to get a pointer to it. You can get the pointer by using the Find() static method, which can find an entity either by its ID number, or by its name.

    Entity* entity1 = Entity::Find("bingus");
    Entity* entity2 = Entity::Find(42069);

    if (!entity1) {
        printf("Entity bingus doesn't exist!");
    }

    It is also possible to query its transform and to change it.

    vec3 position = entity->GetLocation();
    quat rotation = entity->GetRotation();

    position += vec3(0.0f, 1.0f, 0.0f);

    entity->SetLocation(position);

    There are a lot of other methods for the Entity class. Check the API documentation for them.

    Scripting in Lua


    The Lua API is basically the same as the C++ API.

    local bingus = tram.entity.Find("bingus")

    if bingus == nil then
        print("Entity bingus doesn't exist!")
    end

    local position = bingus:GetLocation()
    local rotation = bingus:GetRotation()

    position = position + tram.math.vec3(0.0, 1.0, 0.0)

    bingus:SetLocation(position)















    ================================================ FILE: docs/documentation/framework/entitycomponent.html ================================================ EntityComponent | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    EntityComponent


    EntityComponents are re-usable parts for assembling Entities. Need to display a 3D model for an entity? Use a RenderComponent. Need to add entity to the physics simulation? Use a PhysicsComponent. Have an entity that simulates a frog and want to add frog behavior to other entities? Refactor the frog code into a FrogComponent.

    Most components are created in a way that you can use them without attaching them to an entity, so you can use a RenderComponent to render some UI elements, or a skybox or something like that, but in general they are used for constructing entities.

    Components can have dependencies on Resources. This can be automatically tracked.

    Unlike entities, which can be repeatedly loaded and unloaded, once a component is initialized, it can only be deleted. After that it will have to be reconstructed and reinitialized.

    Programming in C++


    #include <framework/entitycomponent.h>
    API documentation page.

    Components work something like this:

    1. The component class object is constructed.
    2. The component is fed parameters by calling methods on it.
      • If the parameter is a Resource and it is unloaded, then it gets added to the Async loader queue.
      • In such a case, the component will remember that it is waiting for a resource.
    3. The component is initialized by calling the Init() method.
    4. If the component is waiting on any resources, then it will just do nothing and will wait for them to be ready.
    5. The component is started by either calling its own Start() method, if it isn't waiting on any resources, or by the Async system, once the resources on which the component is waiting have been loaded.
    6. The component does its component stuff. Some parameters may be changed by getting their methods called.
    7. The component class gets destructed.

    None of the constructors have any parameters – this is mostly due to the fact that I feel like the initialization code for components with a lot of parameters, and therefore very long constructors looks incredibly awful.

    If you want to create your own component, you can copy the header and implementation files of the TemplateComponent.

    Component<TemplateComponent> template;

    // constructs a new TemplateComponent
    template.make();

    // initializes it
    template->Init();

    // destructs it
    template.clear();

    The Component smart pointer class ensures that it will be constructed into the correct Pool. This is required for some components to work properly, like the AnimationComponent, which will not get updated if it isn't constructed in the correct pool.
















    ================================================ FILE: docs/documentation/framework/event.html ================================================ Events | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Events


    Events are the main form of decoupled data interchange in the framework. People with too much time will recognize it as the «Observer» design pattern.

    The main emitter of events is the UI system, which emits an event for every keypress and every mousemove.

    There's also the tick and frame events, which are emitted by the Core system for each tick and frame respectively.


    Potato frog is emitting some events and potato cat is aware of it, since he has an Event Listener.

    Key concepts


    Event

    It is like a thing that has happened. Each event has a type, a subtype and it contains information about its emitter and has some optional data that can be attached to the event.

    Listener

    It allows the event system to keep track of all of the other systems, entities and components that are interested in an event.

    After a registrant has registered an event listener for a specific event type, the event system will begin dispatching events of said type either to a callback function or to an event handler method of the registrant.

    Event types


    In order to use an event, you need to know what that event is and what it does. What it means. What does it mean?

    These are the events which I have created, which means that I can tell you what they do. If you use someone else's events. you need to ask them what they do. If you have created the events yourself, you will need to ask yourself what you meant by them. This might be difficult, even the greatest philosophers have struggled to understand themselves.

    Keypress | KEYPRESS

    Emitted every frame that a key is being held down. The subtype field of the event contains a UI::KeyboardKey enumeration number, depending on which key was pressed.

    Keydown | KEYDOWN

    Same as keypress, except that the event is emitted only on the frame on which the key was pressed down for the first time.

    Keyup | KEYUP

    Same as keypress, except that the event is emitted only when the key is released.

    Keychar | KEYCHAR

    Used for text input. Emitted whenever a keyboard key used for text input is pressed. The subtype field contains a UTF-16 encoded codepoint of the text character.

    Cursorpos | CURSORPOS

    Emitted whenever the mouse cursor pointer position changes. No data.

    Frame | FRAME

    Emitted every frame. It's very useful when you want to execute some code every frame – simply register a listener with a callback function containing your code.

    Tick | TICK

    Very similar to the frame event, the main difference being that this event is independent of them frame rate – every second exactly 60 tick events will be emitted.

    Selected | SELECTED

    Emitted by entities which are selected. Data pointer points to a Value which contains a name, which represents the type of the entity. This event can be used for displaying information about the selected entity, i.e. actions which can be performed on the entity.

    Look at | LOOK-AT

    Emitted by entities which are looking at something. Data pointer points to a Value which contains a quaternion with the look direction of the entity.

    Last event | LAST_EVENT

    This is not actually an event.

    Programming in C++


    #include <framework/event.h>
    API documentation page.

    Let's emit our own event!

    const name_t m_type = "mongus";

    Event event;

    event.type = Event::SELECTED;
    event.subtype = 420;
    event.poster_id = Entity::Find("mongus")->GetID();

    event.data = Event::AllocateData<Value>(m_type);

    Event::Post(event);

    The Event::AllocateData() static method allocates a bit of memory for use with the event data pointer. This allocated memory gets automatically released when all of the emitted events have been dispatched.

    There are the Event::AddListener() and the Event::RemoveListener() static methods to add and remove event listeners respectively, but there is also a smart pointer type which will automatically remove the listener when deleted.

    EventListener keypress;

    // creates an event listener
    keypress.make(Event::KEYPRESS, this);

    // removes an event listener
    keypress.clear();

    If you want to, you can also create new event types.

    event_t frog_event = Event::Register("frog-event");

    Scripting in Lua


    Emitting an event is very similar to how it is done with the C++ API. The main difference is that we can't attach arbitrary data to the event, instead we are limited to floating point numbers, integers and names, which is the same limitation as with Signals.

    event = {}
    event.type = tram.event.GetType("my_fancy_event")
    event.subtype = 420
    event.poster = tram.entity.Find(mongus):GetID()
    event.data = "mongus"

    tram.event.Post(event)

    Registering events and adding event listeners is also similar.

    local frog_event = tram.event.Register("frog-event")

    tram.event.AddListener(frog_event, function(event)
        type_name = tram.event.GetName(event.type)
        subtype = event.subtype
        poster = tram.entity.Find(event.poster)
        data = event.data
        print("Event received:",
              type_name,
              subtype,
              poster:GetName(),
              data)
    end)















    ================================================ FILE: docs/documentation/framework/file.html ================================================ File | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    File


    This is a file abstraction that I made. I made it because the filestream of the C++ standard library, altough possesing a very je ne sais quoi interface, is way too slow.

    Currently it can only be used to load text files and parse them from disk.

    I will probably add some more stuff to it in the future, like accessing files over HTTP instead of just from disk, or maybe loading them from .zip files.

    Programming in C++


    #include <framework/file.h>
    API documentation page.

    This is how you can parse in some text files.

    File file("my-text-file.txt", MODE_READ);

    printf("num1: %f\n", file.read_float32());
    printf("num2: %i\n", file.read_int32());

    // read until end of file
    while (file.is_continue()) {
        printf("%s\n", file.read_name());
    }

    Check render/model.cpp and render/sprite.cpp for more examples of how you can use this.
















    ================================================ FILE: docs/documentation/framework/graph.html ================================================ Graph | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Graph

    Not fully implemented yet.
















    ================================================ FILE: docs/documentation/framework/gui.html ================================================ GUI | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    GUI


    The GUI system provides GUI widgets.

    Unlike inferior GUI systems, which use objects (Win32, etc.) or classes (Java Swing, etc.), this GUI system is immediate mode. Which means that instead of creating an object, you just call a function once per frame.

    Key concepts


    Widget

    GUI element, i.e. buttons, text boxes, checkmarks, radio buttons, etc.

    Frame

    Frames are used to position widgets. They are arranged in a stack. When you push a frame, all of the consequent widgets will be drawn inside that frame. After you are done with a frame, you need to pop it from the frame stack.

    Immediate mode

    This basically means that you call function instead of creating objects to manage GUI widgets. For example, the function for creating a button is GUI::Button(). Calling this function will render a button on the screen. This function returns the value true if it has been clicked on.

    Pushing frames


    Frames can be created using absolute coordinates, or pushed relative to the underlying frame. For example, pushing frame 100 pixels from FRAME_TOP will create a frame with the topmost 100 pixel rows from underlying frame. Switching it to FRAME_TOP_INV will skip the topmost 100 pixel rows and select everything below it.


    This is how we push the frames.

    Very simple, very easy, very nice.

    Fonts


    Fonts are basically just sprites that have been registered

    For each character that is rendered, its character code in the encoding is used as an index to select a frame from the spritesheet.

    The fonts can be used to draw text. They are also used for widgets themselves.

    If you want to use some pre-made widget and text fonts, then you can use the Menu extension. It contains some fonts that you can use.

    Widgets


    Glyph

    Draws a single glyph from the font spritesheet.

    Text

    Draws some text.

    Button

    Draws a clickable button. The button function returns true if it has been clicked.

    Radio button

    Allows selection between several exclusive choices. The choices are represented by an index.

    Checkbox

    Allows a boolean yes/no type of selection.

    Slider

    Allows selecting a floating point value by dragging a slider.

    Textbox

    Allows text input.

    Programming in C++


    #include <framework/gui.h>
    API documentation page.

    The GUI system needs the Render and the UI systems to be initialized before being initialized itself.

    GUI::Init();

    // main loop
    while (true) {
        // GUI widgets go here
        GUI::Update();
    }

    Pushing frames is easy, but you need to remember to pop them afterwards.


    GUI::PushFrameRelative(FRAME_LEFT, 150);
        // GUI widgets go in here
    GUI::PopFrame();

    GUI::PushFrameRelative(FRAME_LEFT_INV, 150);
        GUI::PushFrameRelative(FRAME_INSET, 10);
            // GUI widgets go in here
        GUI::PopFrame();
    GUI::PopFrame();

    Here's how to use the various widgets.


    enum {
        ICON_FROG,
        ICON_TOILET
    };

    // registering a new font
    Sprite* icon_sprite = Sprite::Find("font-icon"); font_t FONT_ICON = RegisterFont(icon_sprite);

    // drawing a glyph from a font
    GUI::Glyph(FONT_ICON, ICON_FROG);

    // drawing some text
    GUI::Text(FONT_BOLD, "Hello, world!", TEXT_LEFT);

    // buttons
    if (GUI::Button("Click here!")) {
        printf("Button clicked!\n");
    }

    enum {
        CHOICE_NONE,
        CHOICE_A,
        CHOICE_B
    };

    uint32_t selected = CHOICE_NONE;

    // radio buttons
    GUI::RadioButton(CHOICE_A, selected, "Choice A");
    GUI::RadioButton(CHOICE_B, selected, "Choice B");

    bool checked = false;

    // checkbox
    GUI::CheckBox(checked, "Check to select.");

    float value = 0.0f;

    // slider
    GUI::Slider(value);

    const size_t text_length = 100;
    static char text[text_length] = "hello!";

    // textbox
    GUI::TextBox(text, text_length);

    // new line
    GUI::NewLine(LINE_NORMAL);

    Scripting in Lua


    Not yet implemented.
















    ================================================ FILE: docs/documentation/framework/language.html ================================================ Language | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Language


    The language system allows for localization of text.

    UTF-16 support is planned, but currently the only supported text encoding is Latin 7/Windows 1257. It supports these languages:

    • Estonian
    • Latvian
    • Lithuanian
    • Finnish
    • English
    • German
    • Polish
    • Slovene
    • Norwegian
    • Swedish
    • Danish

    File format


    Curently the format has no header. It consists of lines, they start with the name of the string, a space and then the rest of the line is the string.

    Example.

    mongus-ask Hello! Where is Mongus?
    mongus-answer Very busy. Come back later!

    The language files are stored in the /data/ directory, the file extension is .lang.

    Programming in C++


    #include <framework/language.h>
    API documentation page.

    // loading a language file
    Language::Load("english");

    // accessing a string
    printf("%s\n", Language::Get("hello"));















    ================================================ FILE: docs/documentation/framework/loader.html ================================================ Loader | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Loader


    The loader is supposed to help with automatically loading and unloading WorldCells. Take a look at the Player entity to see how to use them.
















    ================================================ FILE: docs/documentation/framework/logging.html ================================================ Logging | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Logging


    The logging system provides logging.

    Currently all logs are just dumped to standard output. In the future I'll add in some more logging stuff, like saving logs to a file.

    It's possible to assign the system from which the logging statement originates, as well as the logging statements severity. Logs then can be filtered based on the system and severity.

    Severities


    Info | SEVERITY_INFO

    For very verbose debugging purposes. Useful to dump anything and everything. Filtered out by default.

    Warning | SEVERITY_WARNING

    For things that should be looked at, such as the use of deprecated functionality, missing files and such.

    Error | SEVERITY_ERROR

    For things that are ungood, but can be recovered from, such as errors with file formatting, incorrect usage of functionality and such.

    Doubleplus Ungood Error | SEVERITY_CRITICAL_ERROR

    For errors that can't be recovered from. Useful to log some final data before aborting the application.

    Programming in C++


    #include <framework/logging.h>
    API documentation page.

    // filter out everything coming from the Platform
    // system that has a severity which is lower than
    // error, i.e. infos and warnings.
    SetSystemLoggingSeverity(System::SYSTEM_PLATFORM,
                             SEVERITY_ERROR);

    float number = 420.0f;
    const char* string = "mongus";

    // will log: mongus has 420 bananas
    Log("{} has {} bananas.", number, string);

    // will log: hi!
    // but due to our filtering settings this will
    // be filtered out
    Log(System::SYSTEM_PLATFORM, SEVERITY_INFO, "hi!");















    ================================================ FILE: docs/documentation/framework/math.html ================================================ Math | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Math


    This part of the framework contains math stuff. Since we use the glm library, we don't really need to create any of our own math types, but I alisased the vector and matrix types into the tram namespace in order to increase the readability of the source code.

    There's also a couple of constants, which have to do with the coordinate system that we're using, i.e. DIRECTION_FORWARD, DIRECTION_SIDE and DIRECTION_UP.

    Other than that, this part of the framework contains a couple of random math functions which the glm library doesn't have. At least in C++ part of the framework.

    Since glm is a C++ only library, I re-implemented some of the vector types in Lua, so that they can be used for scripting.

    Scripting in Lua


    Creating a vector and operations on a vector

    vector = tram.math.vec3(420.0, -42.0, 4.20)

    vector = vector + tram.math.vec3(69.0, -69.0, 6.9)
    vector = vector + 69.0

    print("My vector:", vector)

    Creating a quaternion from euler angles and operations on it

    rotation = tram.math.quat(vector)

    rotation = rotation * rotation

    Rotating a vector by a quaternion

    vector = rotation * vector















    ================================================ FILE: docs/documentation/framework/message.html ================================================ Messages | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Messages


    Messages are the main way entities communicate amongst themselves.

    They allow for greater decoupling. Entities don't have to know about each other's capabilites or any other characteristics, they only need to know about the types of messages.

    To allow effective communication between enities, we only need to define what a certain message type means. For this purpose the framework includes many different and useful message types with predefined meanings.


    Potato cat is sending potato frog a Message.

    Message types


    None | NONE

    Dummy message type, doesn't mean anything.

    Ping | PING

    Generic message type. Can be used to probe entities. When pinged, certain entities will emit an event, or print text to console.

    Move pick up | MOVE_PICK_UP

    Was used to create crate stacking mechanics for immersive sims. Not used anymore, since I added better techniques for the coordination of crate stacking.

    Open | OPEN

    Used to tell doors and similar entities to open. More generally, could be used for entities with two distinct states to assume the non-default state.

    Close | CLOSE

    Used to tell doors and similar entities to close. More generally, could be used for entities with two distinct states to assume the default state.

    Lock | LOCK

    Used to tell doors and other entities with some kind of opening and closing mechanism to stop opening. More generically could be used to tell enitities to ignore certain inputs, such as the activation messages.

    Unlock | UNLOCK

    Similar to locking message, but in reverse.

    Toggle | TOGGLE

    Similar to open and close messages. Used to tell entities to toggle their state, that is, if closed, to open, or if open, to close.

    Kill | KILL

    Used to tell entities to yeet themselves.

    Trigger | TRIGGER

    Used to pass an arbitrary message to an entity. The message data field will then contain a pointer to a Value, usually with the type of name.

    For example, Quests from the kitchensink extension will create a quest entity, so that they can receive messages from Signals. Since quests have triggers, this message is used to trigger them.

    Start | START

    Similar to open message, but used for entities that have some kind of continuos action. For example, the Sound entity uses this message to begin playback of its associated sound.

    Stop | STOP

    This type is the counterpart to the start message. It tells entities to stop their action. For example, the Decoration entity uses this message to stop playing its animation, if it has one.

    Activate | ACTIVATE

    Sent every tick from an agentic entity. Generally meant to be used when a player presses the keyboard key associated with the Use keyboard action while facing an entity.

    Activate Once | ACTIVATE_ONCE

    Similar to Activate message, but meant to be sent only for the first tick of the activation.

    Select | SELECT

    Used to tell an entity that it is being selected. This could be when a player is facing in the direction of the entity, or when the player has placed the mouse cursor over said entity.

    In response, most entities will emit a Selected event.

    Set Progress | SET_PROGRESS

    Used to set the progress of the action that the entity is performing. The data pointer of the message should be set to a Value. Usually it will be a Float32 value in the range from 0.0f to 1.0f.

    For example, the Button entity will use it to set its opening/closing state. A value of 0.0 will close it completely, a value of 1.0 will open it completely and a value of 0.5 will set it to being half-open.

    Set Animation | SET_ANIMATION

    Used to set the animation of an entity. The data pointer will then be set to a Value with the type of name. The name will be the name of the animation to which this entity should switch.

    Last Mesasge | LAST_MESSAGE

    Not actually a message type.

    Programming in C++


    #include <framework/message.h>
    API documentation page.

    The API for message sending is nearly identical to that of the Event.

    Message msg;

    msg.type = Message::PING;
    msg.sender = this->GetID();
    msg.receiver = Entity::Find("mongus")->GetID();
    msg.data = Message::AllocateData<Value>(420);

    // this will ping mongus
    Message::Send(msg);

    // we can also delay the message, pinging
    // mongus 69 seconds in the future
    msg.data = nullptr;
    Message::Send(msg, 69.0f);

    The Message::AllocateData() static method will allocate memory for the message's data. This memory will get automatically released after all of the messages get dispatched.

    Unfortunately, due to certain limitations, this allocation works only for messages that get sent without a delay. This will be remedied in the future.

    Just like with events, we can register our own message types.

    message_t type = Message::Register("frog-message");

    Scripting in Lua


    Essentially the same as in C++.

    msg = {}

    msg.type = tram.message.PING
    msg.sender = 0
    msg.receiver = tram.entity.Find("mongus"):GetID()
    msg.data = 420

    tram.message.Send(msg, 69.0)















    ================================================ FILE: docs/documentation/framework/navmesh.html ================================================ Navmesh | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Navmesh

    Not fully implemented yet.
















    ================================================ FILE: docs/documentation/framework/path.html ================================================ Path | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Path

    Not fully implemented yet.
















    ================================================ FILE: docs/documentation/framework/resource.html ================================================ Resources | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Resources


    A resource is any kind of thing that you want to you want to be streamed in from the disk or any other location.

    Resources can be loaded directly, or they can be passed to the Async system to be streamed in.

    Some resource types included in the framework are Models, Materials and Sounds.

    Key concepts


    Name

    Each resource has a unique name. This is how resources are identified. Usually the name references the name of a file on disk, but does not always have to be so.

    The uniqueness only applies to resources of the same type. Different types of resources can have a resource with the same name.

    References

    This is how the framework keeps track of which resources are being used and which resources can be freed. Used resources are not freed.

    Whenever an EntityComponent or any other user starts using a resource, they should add a reference to the resource, in order to mark it as being used. After the usage of the resource ceases, the reference should be removed.

    If you want a resource to be always availabe, you can add a reference to it. This way it will never be freed and you won't have to wait for it to be streamed in.

    Status

    The status of the resource keeps track of whether the resource needs to be loaded or whether it is ready for usage.

    Statuses


    Unloaded | UNLOADED

    The resource has not been loaded from disk.

    Loaded | LOADED

    The resource has been loaded form disk, but needs further processing. For example, graphics resources use this status for when they have been parsed from the disk, but haven't been uploaded to the GPU memory, since this step has to happen on the main thread, not the resource streaming thread.

    Ready | READY

    The resource has been fully loaded and is ready for use.

    Load fail

    While not implemented as a status (it was at one point, but the API was not that neat to use), the load fail is flag that keeps track of whether the resource was successfully loaded.

    For example, the resource could be considered as having failed to load if the file associated with the resource was missing, or if it the format of the file was determined to be invalid.

    Programming in C++


    #include <framework/resource.h>
    API documentation page.

    If you want to use a resource, you can use the ResourceProxy class. It is a type of smart pointer, which will not only automatically keep track of references, but also automatically pass the resource to the Aync system for streaming, if the resource is not loaded already.

    ResourceProxy<Material> material;

    material.set(Material::Find("mongus"));

    // if the mongus material hasn't been loaded yet,
    // it will now have been added to the Async
    // resource streaming queue

    if (material->GetStatus() == Resource::READY) {
        printf("width: %f height: %f\n",            material->GetWidth(),            material->GetHeight());
    }

    To create a resource, you will need to create a subclass of the Resource class.

    class NewResource : public Resource {
    public:
        NewResource(name_t name) {
            Resource::Resource(name);
        }

        void LoadFromDisk();
        void LoadFromMemory();
        void Unload();
        
    private:
        int* data;
    };

    After that, you will need to implement the resource loading methods, as well as a resource cleanup method.

    void NewResource::LoadFromDisk() {
        this->data = data_from_disk;

        if (this->data == bad_data) {
            this->load_fail = true;
            this->data = dummy_data;
        }

        if (requires_further_processing) {
            this->status = LOADED;
        } else {
            this->status = READY;
        }
    }

    void NewResource::LoadFromMemory() {
        main_thread_processing(this->data);

        this->status = READY;
    }

    void NewResource::Unload() {
        yeet_data(this->data);
    }

    If the resource can't be located from the disk, you should generate some dummy data and check the load_fail flag. For example, if the Material resource can't load the texture image associated with that material, it will generate a checkerboard pattern texture image.
















    ================================================ FILE: docs/documentation/framework/script.html ================================================ Scripting | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Scripting


    The script system implements the scripting API. It allows you to call scripts from C++ without being concerned with which scripting language the script is actually implemented in.

    Currently the only scripting language bindings that have been implemented are for the Lua language.

    All scripts are located in the /scripts/ directory.

    Programming in C++


    #include <framework/script.h>
    API documentation page.

    First a script needs to be loaded. When a script is loaded from disk, it will be automatically executed.

    Script::LoadScript("frog");

    You can set global variables in the scripting context and retrieve global variables from it.

    Script::SetGlobal("frog_status", 420);

    value_t frogs = Script::GetGlobal("frog_count");

    You can also register in C++ function which can be called from the scripting language. For example, this function, named frog, will accept a single integer parameter, which it will print to console. It will then return the value true if the integer inputted was 420.

    Script::SetFunction("frog", {TYPE_INT},
                [](valuearray_t array) -> value_t {
        int32_t frog = array[0];
        printf("frog: %i", frog);

        return frog == 420;
    });

    You can also call script functions from C++.

    bool result = Script::CallFunction("frog", {420});















    ================================================ FILE: docs/documentation/framework/serialization.html ================================================ Serialization | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Serialization

    Not fully implemented yet.
















    ================================================ FILE: docs/documentation/framework/settings.html ================================================ Settings | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Settings


    The settings system can be used to save your application's settings, as well as automatically parse command line options.

    Programming in C++


    #include <framework/settings.h>
    API documentation page.

    Settings can be registered in two different ways. In the first, the settings system will store the setting for you. In the second, you provide a pointer to the setting and manage the storage yourself.

    // allowing settings to manage the setting
    Settings::Register(420, "frog-count");

    // managing our own setting
    uint32_t frog_count = 420;
    Settings::Register(&frog_count, "frog-count");

    Parsing settings from commandline is very simple.

    int main(const char** argv, int argc) {
        Settings::Parse(argv, argc);

        return 0;
    }

    Settings can also be saved to disk and loaded back up.

    Settings::Save("frog-settings");
    Settings::Load("frog-settings");















    ================================================ FILE: docs/documentation/framework/signal.html ================================================ Signals | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Signals


    Signals are Message presets that can be attached to entities.

    These can be configured in the level editor, or they can be attached through scripting.

    When the appropriate moment comes, the entity will fire off the signal, which in turn will send off the preset message.

    Signals are named so as to be confusing to Godot users. Similar frameworks call these the entity input/output system.

    Key concepts


    Signal type

    Each signal has a type. This type determines what kind of action cause the signal to fire.

    Any entity can fire off any signal type for any action, but to keep it consistent we have described some signal types.

    Signal firing

    When the appropriate moment comes, the entity fires off the signal. This causes the signal table to look up all message presets associated with the fired signal type. The signal table will then send off all of the relevant message presets.

    While signal message presets can have a value attached to them to be sent as the attached data, during firing the entity can choose to replace the data with something other than what the preset contains.

    Signal table

    Contains all of the signals that are defined for a certain entity. Can be edited in the level editor. On disk each entity's signals are stored in the Worldcell file.

    Signal types


    None | NONE

    This is not a signal.

    Spawn | SPAWN

    Fired when an entity is loaded.

    Kill | KILL

    Fired when an entity is killed.

    Activate | ACTIVATE

    Fired off when an entity is activated. What is considered an activation depends on the entity type.

    Use | USE

    Fired when the entity is activated, that is, receives a Activate Once message.

    Locked Use | LOCKED_USE

    Same as Use, but fired when entity activation fails due to the entity being locked.

    Open | OPEN

    Fired when the entity begins opening.

    Close | CLOSE

    Fired when the entity begins closing.

    End Open | END_OPEN

    Fired when the entity finishes opening.

    End Close | END_CLOSE

    Fired when the entity finishes closing.

    Trigger | TRIGGER

    Fired when the entity is triggered.

    Enter Trigger | ENTER_TRIGGER

    Fired when an entity enters a trigger. Its ID is attached as data in the message.

    Exit Trigger | EXIT_TRIGGER

    Fired when an entity exits a trigger. Its ID is attached as data in the message.

    Progress | PROGRESS

    Fired every tick that an entity is progressing. It replaces the message data with a floating point progress value.

    If the message type attached to this signal is set to Set Progress, then it is possible to synchronize two entities that support progress.

    Last Signal | LAST_SIGNAL

    Not actually a signal.
















    ================================================ FILE: docs/documentation/framework/stats.html ================================================ Statistics | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Statistics


    The statistics system collects data. There are two different types of data.

    The first type is time. Each System gets its own time counter. Systems can add time spent in themselves to the counter.

    The second type is the counter counter. It provides arbitrary counting services. For example, the Render system uses this service to count up an approximation of how much GPU memory it is using.

    Programming in C++


    #include <framework/system.h>
    API documentation page.

    For the timings, somewhere in your main loop you need to add a call to the collate function.

    // main loop
    while (true) {
        Stats::Collate();
    }

    After that, you can start counting stuff.

    system_t frog_system = System::Register("frog");

    Stats::Start(frog_system);

    pet_frogs();
    feed_frogs();
    bathe_frogs();

    Stats::Stop(frog_system);

    Stats::Add(RESOURCE_FROG, inital_frogs);
    Stats::Remove(RESOURCE_FROG, escaped_frogs);

    Finally, you can retrieve your counts.

    size_t frogs = Stats::GetStat(RESOURCE_FROG);
    float frog_time = Stats::GetStat(frog_system);















    ================================================ FILE: docs/documentation/framework/system.html ================================================ Systems | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Systems


    The system concept was created to help identify parts of code.

    This allows, for example, to check if a system has been initialized. This is useful for systems which have a dependency on another system – they can check if the system that they have a dependecy on has been initialized before initializing themselves.

    This concept also allows tracking statistics and filtering logging based on the system from which the logs originate.

    Programming in C++


    #include <framework/system.h>
    API documentation page.

    Some systems are already registered into the framework, but you can register your own systems too.

    system_t frog_system = System::Register("frog");

    // now we can initialize it
    System::SetInitialize(frog_system, true);
    assert(System::IsInitialized(frog_system));















    ================================================ FILE: docs/documentation/framework/transition.html ================================================ Transitions | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Transitions

    Transitions are connections between WorldCells. They consist of a volume, which is defined as a convex hull wrapped around a set of points.

    Check the WorldCell page for more details.
















    ================================================ FILE: docs/documentation/framework/type.html ================================================ Type | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Type


    There are a couple of types, which the framework supports for values, signals and scripting API.

    Main types


    All of these types are supported by signals, scripting API and level editor.

    Int

    Same as Int32.

    Float

    Same as Float32.

    Name

    Alias for UID.

    All types


    Undefined

    Not actually type. Used when a type is unknown.

    Bool

    Same as Int8.

    String

    Regular C flavored, null-terminated character array string.

    Int8, Int16, Int32, Int64

    Signed integers, which are 8-bit, 16-bit, 32-bit and 64-bit wide respectively.

    UInt

    Same as UInt32.

    UInt8, UInt16, UInt32, UInt64

    Unsigned integers, which are 8-bit, 16-bit, 32-bit and 64-bit wide respectively.

    Float32, Float64

    Floating point numbers, which are 32-bit and 64-bit wide respectively.

    Vec2, Vec3, Vec4

    Arrays consisting of 2, 3 and 4 elements of Float32 numbers respectively.

    Quat

    Same as Vec4, but with rotational semantics.
















    ================================================ FILE: docs/documentation/framework/ui.html ================================================ UI | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    UI


    The UI system deals with the creation of windows and taking in of the input.

    Once initialized, the system will create an operating system window and will start gathering and emitting keyboard and mouse events. It also creates the rendering context.

    Key concepts


    Window

    It's where the graphics are rendered to. Also can be clicked on.

    Keyboard key

    Represents either a key on a computer keyboard, or a button on a mouse. Yes.

    Can either be pressed on released.

    Keyboard axis

    Represents cursor position or scroll wheel scrolling.

    Unlike a keyboard key, an axis has a scalar state.

    Keyboard action

    Unlike a keyboard key, which represents a physical key or something similar, keyboard actions are completely abstract.

    Keyboard keys can be bound to keyboard actions. This means that pressing and releasing the keyboard key will also trigger the keyboard action.

    State

    The UI state determines what the system will do with keyboard and mouse inputs.

    States


    Default | STATE_DEFAULT

    Cursor is hidden. Inputs generate events normally.

    No Input | STATE_NO_INPUT

    Cursor is hidden, but inputs generate no events.

    Flying | STATE_FLYING

    Cursor is hidden, no inputs are generated. Instead, WASD keys can be used to move the Render view directly. Useful for debugging.

    Menu Open | STATE_MENU_OPEN

    Cursor is displayed, but no events are generated.

    Cursor | STATE_CURSOR

    Cursor is displayed. Inputs generate events normally.

    Programming in C++


    #include <framework/system.h>
    API documentation page.

    The basic initializtion and stuff goes something like this.

    UI::Init();

    // main loop
    while (true) {
        UI::Update();
    }

    UI::Uninit();

    As for the rest of it, there is too much stuff to cover all here. Check the API documentation.
















    ================================================ FILE: docs/documentation/framework/uid.html ================================================ UID | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    UID


    UID is also aliased as name_t and called a name. It is my greatest technological accomplishment.

    When a name is created, the string representation of it is saved into a very nice string table. The name itself only the index of the string in the string table.

    The system also ensures that each string gets store only once. This means that name instances with identical string representations also have the same inded. This makes the comparisons between names very fast and efficient.

    Also I have no idea what UID actually stands for, I forgot it a very long time ago.
















    ================================================ FILE: docs/documentation/framework/value.html ================================================ Value | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Value


    Values in the framework are basically just type-safe unions. They support all of the types.
















    ================================================ FILE: docs/documentation/framework/worldcell.html ================================================ WorldCells | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    WorldCells


    Worldcells are the basic streaming unit of the virtual world. Essentially they are a list of entities.

    The worldcells also have a volume. All of the entities, whose positions are inside the worldcell's volume are considered to inside the worldcell.

    An entity is added to a worldcell if its definition is located in the worldcell's disk file, or if it is created and its position is inside the worldcell's volume or it enters a transition volume leading from one worldcell to another.

    All worldcell data files are located in the /data/worldcells/ directory. The file extension is .cell.

    Key concepts


    Interior

    Worldcell volumes are not supposed to overlap. The only exception are interior and exterior worldcells. If an entity's position is both inside an exterior and an interior worldcell, preference will be given to the interior worldcell.

    Interior lighting

    If a worldcell has its lighting set to be interior, it means that for every entity in that cell the directional lighting will be disabled. This is more of a convention for entity implementation, than something that is forced on entities

    Transition

    A worldcell transition has a volume, defined by a convex hull wrapped around a set of points, and an originating and a destination worldcell. If an entity is in the originating worldcell and it enters the volume of the tranistion, it will be switched to being in the destination worldcell.

    Volume

    If a transition has its originating and its destination worldcells set to the same worldcell, then it is considered that the volume of the transition contributes to the volume of the worldcell.

    Programming in C++


    #include <framework/worldcell.h>
    API documentation page.

    Loading a worldcell is very simple.

    WorldCell* frog_house = WorldCell::Make("pond");

    frog_house->LoadFromDisk();
    frog_house->Load();

    We can also probe entitial contents of the worldcell.

    WorldCell* frog_house = WorldCell::Find("pond");

    auto entities = frog_house->GetEntities();

    for (auto entity : enitities) {
        printf("Entity: %s\n", entity->GetName());
    }















    ================================================ FILE: docs/documentation/framework.html ================================================ Framework | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Framework


    This is where the core of the framework lives.

    // TODO: write a brief overview of each section















    ================================================ FILE: docs/documentation/index.html ================================================ Learn | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Learn

    There is nothing to learn.
















    ================================================ FILE: docs/documentation/leveleditor.html ================================================ Level Editor | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Level Editor

    // TODO: implement
















    ================================================ FILE: docs/documentation/physics/collisionmodel.html ================================================ Collision Model | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Collision Model


    Collision models are essentially the Resource form of the CollisionShape. They consist of a single or several collision shapes.

    Collision models are stored in the /data/model/ directory. The file extension is .coll. They can be created using the collision model exporter Blender plugin.
















    ================================================ FILE: docs/documentation/physics/collisionshape.html ================================================ Collision Shape | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Collision Shape


    The collision shape determines the volume of the of a rigidbody or a trigger. It consists of of a geometric shape.

    Shapes



    These are the shapes that you can use.

    Sphere | SHAPE_SPHERE

    A sphere is... well, you probably know what a sphere is. The only parameter that it has is it's radius.

    Cylinder | SHAPE_CYLINDER

    A cylinder has a radius and a height.

    Capsule | SHAPE_CAPSULE

    A capsule is like a cylinder, but instead of having flat ends, those ends have spheres attached to them. It has a radius and a height.

    Cone | SHAPE_CONE

    A cone is like a cylinder, but one of the ends has been collapsed into a point. It has a radius and a height.

    Box | SHAPE_BOX

    A box is a box. It has a width, length and height. If all of these parameters are equal, you get a cube.

    Hull | SHAPE_HULL

    A hull is a convex hull that is generated from a point cloud. It consists of points, which have a position.

    Mesh | SHAPE_MESH

    A mesh consists of triangles. Each triangle has 3 vertices, each of which has a position. This is shape has the worst performance, avoid it if you can.

    Programming in C++


    #include <physics/collisionshape.h>
    API documentation page.

    This is how you make the shapes.

    const float radius = 0.5f;
    const float height = 1.5f;

    auto sphere = CollisionShape::Sphere(radius);

    auto cylinder = CollisionShape::Cylinder(radius,                                          height);

    auto capsule = CollisionShape::Capsule(radius,                                        height);

    auto cone = CollisionShape::Cone(radius, height);

    const vec3 dimensions = {42.0f, 6.9f, 48.9f};

    auto box = CollisionShape::Box(dimensions);

    const size_t cloud_size = 3;
    const vec3 cloud[cloud_size] = {
        {-1.0f, 1.0f, -1.0f},
        {1.0f, 4.2f, 0.0f},
        {-6.9f, 1.0f, -1.0f},
    };

    auto hull = CollisionShape::Hull(cloud, cloud_size);

    const vec3 point1 = {1.0f, 1.0f, 0.0f},
    const vec3 point2 = {-1.0f, 1.0f, 0.0f},
    const vec3 point3 = {1.0f, -1.0f, 0.0f},
    const vec3 point4 = {-1.0f, -1.0f, 0.0f},

    const size_t mesh_size = 2;
    CollisionTriangle triangles[mesh_size] = {
        {point1, point2, point3},
        {point4, point2, point3}
    };

    auto mesh = CollisionShape::Mesh(triangles,                                  mesh_size);
















    ================================================ FILE: docs/documentation/physics.html ================================================ Physics | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Physics


    The physics system provides rigidbody physics simulation services.

    Currently a single backed is implemented, which is the Bullet physics library backed, but more will be added in the future.

    If you want to add rigidbodies to your entities, consider using the PhysicsComponent. For triggers, the TriggerComponent is available.

    Key concepts


    Rigidbody

    An object in the physics simlation. Rigidbodies have some kind of a shape or volume. This is determined by their CollisionModel or CollisionShape.

    Trigger

    Triggers are special shapes or volumes that can detect if a rigidbody enters its volume.

    Collision Group

    Collision groups are groups that the rigidbody, trigger or other physics construct is a part of. The object can be a part of several groups. They are represented by bits in a bitmask.

    It is more efficient for an object to belong to only a single group, or very few groups.

    Collision Mask

    Collision masks are groups with which the rigidbody, trigger or other physics construct can collide with. The object can be set to collide with several groups. Allowed collision groups are represented by bits in a bitmask.

    To determine if an object should collide with another object, each objects group bitmask and the other object's mask bitmask are logically ANDed together. If the resulting value is not zero, the objects are allowed to collide.

    Raycast

    Useful for poking things, selecting objects. A raycast constructs a ray between two points and check whether it intersects any rigidbody between these points. If an intersection is found, it is returned.

    Shapecast

    Similar to raycast, but instead of a checking an intersection with an infinitely thin line, a shape is used.

    Collisions: how do they work?


    Like this.


    This is how the bitmask ANDing works.

    Programming in C++


    #include <physics/physics.h>
    API documentation page.

    Physics::Init();

    // main loop
    while (true) {
        Physics::Update();
    }

    Here's how we do raycasts. Let's do one from the render view.

    auto pos = Render::GetViewPositon();
    auto rot = Render::GetViewRotation();

    // convert rotation to normal vector
    vec3 dir = rot * DIRECTION_FORWARD;

    // set end point to ne 5 meters in
    // front of the view
    vec3 end = pos + dir * 5.0f;

    // collision mask -1 means all bits, aka
    // collide with all collision groups
    auto coll = Physics::Raycast(pos, end, -1);


    // skip collision if no entity attached
    if (!coll.collider || !coll.collider->GetParent())
    return;

    auto entity = coll.collider->GetParent();

    // send a SELECTED message to the collided
    Message msg;

    msg.sender = 0;
    msg.receiver = entity->GetID();
    msg.type = Message::SELECTED;
    msg.data = nullptr;

    Message::Send(msg);

    This is how interactable object highlighting is usually done for a first-person view. We check if there is an object withing 5 meters right in front of the view, and if there is an object, we send the it a Selected message.

    Shapecasts work the same way, except that you also need to pass in the shape, which will be used for the collision.
















    ================================================ FILE: docs/documentation/platform.html ================================================ Platform | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Platform

    This system contains the platform compatibility layer. Basically it provides a single API to perform various tasks, which are platform-specific.

    For example, the creation of a window and the capture of keyboard keypress events is specific to the operating system. Windows uses the Win32 API and Linux uses the X Window System API.

    To make porting easier, the framework does not use these APIs directly, instead using either the GLFW or the SDL libraries as a backend. It is also possible to create your own backend.

    Creating your own backend is useful if you want to embed the framework inside of another application. For example, the level editor is a wxWidgets application that embeds the rendering system of the framework.
















    ================================================ FILE: docs/documentation/plugin.html ================================================ Plugins | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Plugins

    // TODO: implement
















    ================================================ FILE: docs/documentation/render/aabb.html ================================================ AABB | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    AABB


    Whenever a 3D model is added to the scene by a RenderComponent, it is also added to the very large AABB tree which contains every model in the scene.

    This tree can be used to query the contents of the scene. This is useful for things like mouse picking of objects or decal projection.

    This system also contains the LightTree, which is an octree that contains all of the lights in the scene. It is used to determine which lights will be used to illuminate which objects, since it speeds up nearest point queries.
















    ================================================ FILE: docs/documentation/render/animation.html ================================================ Animations | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Animations


    Animations are a Resource that can be used to, essentially, generate pose matrices. Those are used to deform meshes. See AnimationComponent for examples of what you can do with animations.

    Animations consist of keyframes. Each keyframe has some data associated with it. This data is used to transform bones.

    Keyframes start from zero and increase at a rate of 24 frames per second. This is the same as the default animation frame rate in Blender.

    Animations can be created in the Blender program and then exported using the Animation Exporter Plugin.

    A brief overview of the Keyframe


    Frame

    Any positive number. It is used to determine when the keyframe will be active.

    Location

    Translation of a bone.

    Rotation

    Rotation of a bone.

    Scale

    Scale of a bone.

    That's it

    No shearing or any other kind of funny transformations.
















    ================================================ FILE: docs/documentation/render/material.html ================================================ Material | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Material


    Materials are used to describe the properties of geometry primitive surfaces.

    If a material is set to use a texture image, these images will be loaded from the /data/textures/ directory and have the extension .png.

    Materials can be defined through code, or they can be defined through a material list file. These files are located in the /data/ directory and have the extenstion .list.

    Properties


    Texture

    Optional texture image.

    Type

    Determines how the surface is rendered. For the OpenGL backend this determines which shader is used.

    Property

    Determines what the material is made of. Useful for determining which sound to use when collision happens with object, or which particle effect to spawn.

    Filter

    Determines how the texture of the material will be interpolated.

    Texture type

    Allows the material to not use its own texture, instead using a plain color, or allows it to use another material's texture.

    Color

    If a material has no texture, it will use appear as this color. Otherwise the texture of the material will be tinted with this color.

    Specular weight

    Floating point value between 0.0 and 1.0. Determines how visible the specular reflections of the material are. Setting this to 0.0 essentially disables specular reflections.

    Specular exponent

    Floating point value from 1.0 to higher. Determines how wide the specular reflection will be. Higher values means narrower relection.

    Specular transparency

    Floating point value between 0.0 and 1.0. Determines whether the material absorbs any of the specular reflection. Setting this to 0.0 will make the material absorb the specular reflection just like it does with diffuse and setting this to 1.0 will have the specular reflection be the same color as the light source.

    Material types


    Most of these material types are accepted by all backends. If using OpenGL backed, you can register new material types and set their shaders.

    Texture | MATERIAL_TEXTURE

    The material has a texture. It is fully opaque.

    Texture Alpha | MATERIAL_TEXTURE_ALPHA

    The material has a texture. It is partially opaque. The transparency channel of the texture is used for an alpha test.

    Lightmap | MATERIAL_LIGHTMAP

    The texture of this material is used as a lightmap.

    MSDF | MATERIAL_MSDF

    The texture represents a MSDF.

    Glyph | MATERIAL_GLYPH

    This is the material used for GUI elements.

    Water | MATERIAL_WATER

    This material will get fancy water effects applied to it, but this only works with the OpenGL backend.

    Flat Color | MATERIAL_FLAT_COLOR

    The material has no texture associated with it and instead it will use its color parameter.

    Material Property properties


    Metal | PROPERTY_METAL

    Heavy metal objects.

    Metal Thin | PROPERTY_METAL_THIN

    Light metal objects.

    Slime | PROPERTY_SLIME

    Exretions of a biological origin.

    Tile | PROPERTY_TILE

    Tiles, like those found in a bathroom.

    Grate | PROPERTY_GRATE

    Fences and other metallic objects with lots of holes in them.

    Wood | PROPERTY_WOOD

    Trees, planks and logs.

    Computer | PROPERTY_COMPUTER

    Acts like mixture of metal and glass.

    Glass | PROPERTY_GLASS

    Windows, jars and bottles.

    Snow | PROPERTY_SNOW

    Snow and other sound absorbent materials, carpets.

    Grass | PROPERTY_GRASS

    Like the green touchable stuff that grows outside.

    Concrete | PROPERTY_CONCRETE

    Concrete, rocks and stones.

    Flesh | PROPERTY_FLESH

    Sort of like a heavier version of slime. Things that are made out of meat.

    Filters


    Nearest | FILTER_NEAREST

    Textures won't use interpolation.

    Linear | FILTER_LINEAR

    Textures use linear interpolation.
















    ================================================ FILE: docs/documentation/render/model.html ================================================ Models | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Models


    Currently we have three types of 3D models.

    All model types are stored in the /data/models/ directory. Static models have the extension .stmdl, dynamic models have the .dymdl extension and modifcation models have the .mdmdl extension.

    Static models


    Static models not only have normal texture coordinates, but they also have lightmap coordinates. They can be lightmapped. That's pretty nice.

    Dynamic models


    Dynamic models also have texture coordinates, but no lightmap coordinates. Instead they have bone weights, which allow them to use pose matrices and be animated by animations and stuff.

    Modification models


    Unlike other model types, this model type has no vertex data of its own. Instead it references the vertex data of some other model. What is unique to it, is its material to material mapping. It can be used to swap out a material.

    For example, if you have a pink teapot model which uses a material named pink-pot and you would like a cyan teapot model, instead of re-exporting another dynamic model but with just the materials replaced, you could create a modification model with the material mapping of pink-pot => cyan-pot.
















    ================================================ FILE: docs/documentation/render/sprite.html ================================================ Sprite | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Sprite


    Sprites are like little images that live inside of other images. These images are the texture images of Materials. Sprites reference materials.

    If you are creating a flipbook animation, it is easier to animate all of the frames inside of a single image texture file. But how would the framework know where exactly are each of the frames located in the image? It would know it because you created a sprite, which contains the positions of each frame inside the larger texture image.

    What does is inside a frame



    This is how these different metrics look like.

    Offset X and Offset Y

    Offsets in pixels, from the top-left corner. This is the pixel coordinate position of the top-left corner of the sprite and where it starts.

    Width and Height

    Width and height of the frame, in pixels.

    Midpoint X and Midpoint Y

    Offsets of the midpoint of the frame, in pixels. It is relative to the frame offset. Usually they will be set to half of the width and half of the height, so that the midpoint is in the midpoint of the sprite.

    Border H and V

    Horizontal and vertical borders around the sprite, in pixels. Only used for text rendering.
















    ================================================ FILE: docs/documentation/render.html ================================================ Render | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Render


    Probably one of the most useful systems in the framework. Performs all of the graphics stuff.

    Key concepts


    View

    Virtual camera perspective. Can be set using a position vector and a rotation quaternion, or by directly feeding in a view and perspective matrices.

    Layer

    Objects can be assigned to a layer. Curently there are 7 layers. Objects in higher layers will be drawn on top of the objects in lower layers.

    Graphics Primitive

    A geometric shape that can be rasterized. The framework currently supports the rasterization of triangles and straight line segments.

    Draw List Entry

    A record in the draw list. The draw list is list of all of the objects, consisting of graphics primitives, that compose the rendered scene. To be eligble for being rendered to the screen, the object must be added to the draw list.

    Vertex

    A point consisting of some kind of a coordinate and possibly some other data. Used to construct graphics primitives. A triangle consists of 3 vertices, a line segment of 2. Can be arranged in a buffer in list form.

    Index

    Reference to a vertex. Can be arranged in a buffer in list form. Invented as a digital computer memory saving measure sometime in the late 20th century.

    Texture

    Raster image that can be applied to the surface of a graphics primitive during rendering.

    Material

    Set of surface properties, possibly including a reference to a texture. Determines how the surface of a graphics primitive will be rendered.

    Light

    If there was no light we could just clear the screen with a black color instead of rendering anything and you wouldn't even know.

    Lightmap

    Precomputed surface illumination for static objects. Allows the usage of some rather slow algorithms for lighting computations, i.e. ray tracing, path tracing, radiosity.

    Armature

    Consists of bones. Allows deformation of a 3D model via the transfors of the bones. Can be animated.

    Backends


    OpenGL

    Written in a subset of OpenGL 4.0 and WebGL, this is the main rendering backend of the framework.

    Direct3D

    This backend uses the Direct3D9 fixed function pipeline. Not tested, but should work with Direct3D7 level hardware. Curently only supports static model, dynamic model and line rendering.

    Software

    This backend does all of the rendering on the CPU. Curently only supports static model, dynamic model and line rendering.

    Lighting Types


    Dynamic light

    Can either be configured to act as a point light, or a spotlight.

    No real limit on the ammount of lights in the scene, but each object can be illuminated by only 4 lights at the same time.

    Directional light

    Light which is originating from a light source infinitely far away. Useful for modelling sunlight.

    The framework allows a single directional light to be used in the scene.

    Ambient light

    Adds some base lighting to every object in the scene. Has no direction.

    Lightmap

    Pre-computed lighting for a 3D model. Stored as a texture image. Only available to static models.

    Programming in C++


    #include <render/render.h>
    API documentation page.

    Initialization the same as with other systems.

    // UI system needs to be initialized first
    UI::Init();

    // now we initialize Render
    Render::Init();

    // main loop
    while (true) {
        Render::Render();
    }

    There's too many functions in the system to list, but here's some more useful ones.


    // the system defines some color constants
    color_t cyan = Render::COLOR_CYAN;
    color_t pink = Render::COLOR_PINK;

    // this draws a debug line. all of the debug
    // drawing functions need to be called once
    // per frame, since after rendering a frame
    // the debug line buffer is emptied
    const vec3 from = {0, 0, 0};
    const vec3 to = {1, 1, 1};

    Render::AddLine(from, to, cyan);

    // this draws a cross
    Render::AddLineMarker(from, pink);

    // sphere
    const float radius = 1.0f;
    Render::AddSphere(from, radius, pink);

    // this is how to set the directional light
    Render::SetSunDirection(DIRECTION_FORWARD);
    Render::SetSunColor(COLOR_CYAN * 1.0f);
    Render::SetAmbientColor(COLOR_CYAN * 0.1f);

    // setting the FOV, in degrees
    Render::SetViewFov(90.0f);

    // setting it to zero changes it to
    // orthographic projection.
    Render::SetViewFov(90.0f);















    ================================================ FILE: docs/documentation/tools/codegen.html ================================================ Codegen | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Codegen


    Codegen is a small Python script to help with syncing up C++ entity serialization code and entdef files.

    How to use


    Open command prompt in you project's directory and run the codegen.py

    C:\garden>codegen.py make StickyFroggy

    The program will prompt you with the filename of the new file to be created. Press y to accept.

    Tramway SDK Code generator v0.1.1
    Create file C:\garden\src\stickyfroggy.h? [y/n]

    The program will now have created the files /src/stickyfroggy.h and /src/stickyfroggy.cpp.

    Let's open up stickyfroggy.h and take a look inside:

    // Generated by Tramway SDK Code generator

    #include <framework/entity.h>
    #include <framework/serialization.h>

    #include <templates/macros.h>

    using namespace tram;

    class StickyFroggy : public Entity {
    public:
      StickyFroggy(const SharedEntityData&, const ValueArray&);
      
      TRAM_SDK_ENTITY_NAME("stickyfroggy")
      
      void UpdateParameters();
      void SetParameters();
      void Load();
      void Unload();
      void Serialize();
      void EventHandler(Event& evt);
      void MessageHandler(Message& msg);
      name_t GetType();
      static void Register();
    };

    Let's add some properties to the class!

    class StickyFroggy : public Entity {
    public:
      StickyFroggy(const SharedEntityData&, const ValueArray&);
      
      TRAM_SDK_ENTITY_NAME("stickyfroggy")
      
      void UpdateParameters();
      void SetParameters();
      void Load();
      void Unload();
      void Serialize();
      void EventHandler(Event& evt);
      void MessageHandler(Message& msg);
      name_t GetType();
      static void Register();
    private:   
      TRAM_SDK_KEY_VALUE("model", "frog-marker")
      
      TRAM_SDK_PROPERTY("viewmodel", FIELD_SERIALIZE)
      name_t viewmodel = "frog";
      
      TRAM_SDK_PROPERTY("stickiness", FIELD_SERIALIZE)
      float stickiness = 1.5f;
      
      TRAM_SDK_PROPERTY("roll", FIELD_SERIALIZE)
      bool egg;
      
      TRAM_SDK_VIRTUAL_PROPERTY(int32_t, "egg-count", FIELD_SERIALIZE, 11)
    };

    After editing entity properties, we need to create/regenerate code and data files

    C:\codegen.py refresh StickyFroggy

    This command creates or overwrites these files

    /src/stickyfroggy.inl
    /data/stickyfroggy.[number].entdef

    If you want, you can take a look at the generated code in stickyfroggy.inl file, but don't bother editing it — it will be overwritten every time you run the refresh command.

    Let's look at the generated .entdef file

    begin
      # this comes from TRAM_SDK_ENTITY_NAME() macro
      name stickyfroggy
      
      # this comes from TRAM_SDK_KEY_VALUE() macro
      model frog-marker
      
      # these come from TRAM_SDK_PROPERTY()
      # and TRAM_SDK_VIRTUAL_PROPERTY() macros
      field string viewmodel
      field float stickiness
      field bool roll
      field int egg-count
      
      # this is randomly generated index
      version 193035075
    end

    Supported types


    • name_t
    • bool
    • int
    • float
    • double
    • int8_t
    • int16_t
    • int32_t
    • uint8_t
    • uint16_t
    • uint32_t
    • vec2
    • vec3
    • vec4
    • quat















    ================================================ FILE: docs/documentation.html ================================================ Documentation | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Documentation

    This page contains links to the pages of the framework documentation. These pages are meant to be used as a general, high-level overview of the framework's features.

    If you're looking for low-level C++ API documentation, the reference generated by doxygen can be found here.

    It is also worth noting here, that all of the C++ code examples omit the main framwork namespace. This is equivalent to adding this line of code to the beginning of your source code files:

    using namespace tram;

    Runtime

    Level editor

    Map compilers

    Blender plugins

    CLI tools
















    ================================================ FILE: docs/enterprise.css ================================================ body { font-size: 12pt; font-family: Verdana, Arial, Helvetica, sans-serif; } .container { width: 1000px; border-radius: 15px; box-shadow: 5px 5px 0px rgba(25, 25, 25, 0.8); padding:10px; } .left-pane { width: 200px; /*padding: 10px;*/ padding-left: 5px; padding-top: 10px; } .middle-pane { /*padding: 10px;*/ padding-right: 5px; padding-top: 10px; } .right-pane { display: none; } /* hide the spinning toilet */ .animated { display: none; } .titlebar { position: relative; padding-bottom: 10px; } .titlebar .links { position: absolute; bottom: 10px; right: 0; padding-right: 5px; padding-bottom: 2px } .menubar a, .menubar a:link, .menubar a:visited, .menubar a:focus, .menubar a:active { color: white; } .menubar a:hover { color: white; text-decoration: none; } .menubar { font-family: Verdana, Arial, Helvetica, sans-serif; height: 25px; padding-bottom: 5px; border-radius: 15px; padding-left: 10px; box-shadow: 0px 3px 0px #2222aa; } .navbar { width: 100%; } .navbar .left { width: 50px; } .navbar .middle { text-align: center; } .navbar .right { width: 50px; text-align: right; } .resizable { width: 640px; } h1, h2, h3, h4, h5 { margin-top: 0; margin-bottom: 0; } p { margin-top: 4px; margin-bottom: 4px; } h1 { font-size: 20pt; } h2 { font-size: 16pt; } h3 { font-size: 14pt; } h4 { font-size: 12pt; } ul { margin-top: 0; padding-left: 20px; } .codefunc { color: blue; } .codeclass { color: blue; } .codekeyw { color: red; } .codecomm { color: green; } .codelit { color: orange; } .codespac { color: blue; } .codeexample { white-space: pre; } .infobox { /* margin: 0px 10px 0px 10px;*/ margin: 10px 0px 10px 0px; padding: 10px 15px 10px 15px; border: 2px groove gray; } ================================================ FILE: docs/features.html ================================================ Features | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Features

    • Photo-realistic graphics.
      • Textured 3D models.
      • Gouraud shading.
      • 24-bit color.
      • Night and day conditions.
      • Screen resolutions from 320x200 to 800x600.
      All of that together provides very realistic appearance.
    • Data oriented design.
      • Engine core data is laid out in memory in the most efficient way possible as to increase the data processing speed. The core library also provides templates so that you can have efficient data too.
    • Hyperrealistic physics simulation provided by the Bullet Physics library.
    • Open-world style level streaming, including assets.
    • Runs on virtually any computer from the last 15 years.
    • Very fast and environmentally-friendly C++20 code performance.
    • Windows XP and Linux support.

    Images


























    ================================================ FILE: docs/generate.bat ================================================ py page_generator.py pause ================================================ FILE: docs/googlef0d2a216ce53fc15.html ================================================ google-site-verification: googlef0d2a216ce53fc15.html ================================================ FILE: docs/index.html ================================================ Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Did you know...

    That the Tramway Drifting and Dungeon Exploration Simulator Software Development Kit is the bestest 3D graphics package?

    What is goings on?


    Version 0.1.1 is out. You can finally download an installer. Like a wizard installer. It will install the engine and all of the utilities. Very professional. 99% of other engines can't to that!

    The tools still are very glitchy and everything breaks all the time. But at least the engine is capable of shipping. Shipping real applications. You can actually do that now.


    Ray-tracing render backend can now do transparency, btw.

    What we'll do next:

    • Ship apps.
    • Ship some more apps.
    • Analyze deficiencies.
    • Fix bugs. Fix deficiencies. Fix everything.

    Design Patterns Used

    82%

    Click here to learn more.

    Tramway SDK now ships applications


    Tramway SDK has now been used on actual, shipping applications. You can't say that about 99% of other graphics engines, since they don't ship. Like don't ship. Ever. Never will ship either.

    We have compiled a list of the shipped projects:


    Why we use use sphere maps instead of cubemaps


    Big Engine wants you to think that cubemaps are superior to sphere maps and that sphere mapping is obsolete. Nothing could be further from the truth.

    They keep insisting that sphere maps supposedly suffer from «image distortion», «viewpoint dependency» and «computational inefficiency». This is demonstrably false.



    Where's the image distortion? It's a perfect reflection!

    Sphere maps might have been viewport dependent in the 1980s, but since at least 1998(!) there have existed techniques that can overcome this limitation by using a single if() statement.

    Consider the standard approach to sampling a cubemap:

    auto sample_cubemap = [=](vec3 nrm) { char* image = nullptr; float axis; vec2 uv; vec3 abs = glm::abs(nrm); bool x_positive = nrm.x > 0; bool y_positive = nrm.y > 0; bool z_positive = nrm.z > 0; if (z_positive &&abs.z >=abs.x && abs.z >= abs.y) { image = front; uv.x = nrm.x; uv.y = nrm.y; axis = abs.z; } else if (!x_positive && abs.x >= abs.y && abs.x >= abs.z) { image = left; uv.x = nrm.z; uv.y = nrm.y; axis = abs.x; } else if (x_positiv && abs.x >= abs.y && abs.x >= abs.z) { image = right; uv.x = -nrm.z; uv.y = nrm.y; axis = abs.x; } else if (!z_positive && abs.z >= abs.x && abs.z >= abs.y) { image = back; uv.x = -nrm.x; uv.y = nrm.y; axis = abs.z; } else if (y_positive && abs.y >= abs.x && abs.y >= abs.z) { image = top; uv.x = nrm.x; uv.y = -nrm.z; axis = abs.y; } else if (!y_positive && abs.y >= abs.x && abs.y >= abs.z) { image = bottom; uv.x = nrm.x; uv.y = nrm.z; axis = abs.y; } uv = 0.5f * (uv / axis + 1.0f); if (!image) { return std::tuple<char, char, char>{uv.y * 255.0f, 0, uv.x * 255.0f}; } return get_pixel(image, uv); };

    Not only is it whole 47(!) lines of code, it contains 6 if/else statements. Remember that shaders can't execute those and only those if/else statements which evaluate to a true value. Instead they will always execute every single branch and will throw away the results of the false branches.

    Now consider our implementation of sphere map sampling code:

    vec2 sphere_map_coords = vec2(normal.x * 0.25 + 0.25, normal.y * 0.5 + 0.5); if (normal.z > 0.0) sphere_map_coords.x += 0.5;

    Only 2(!) lines of code with a single if/else that the compiler can optimize away to a single conditional move operation, resulting in essentially no branching.

    Now consider the fact that cubemaps consist of the 6 square sides of a cube. A lot of GPUs support only textures with sizes that are a power of two. If you put these 6 sides of a cube into a single texture, you will waste 25% of the space in the texture.

    Sphere maps leave only 21% of space empty. If you use a slightly different projection (paraboloid), you can reduce this number to 0%.



    Cubemaps waste space.


    Sphere maps fit perfectly.

    Without a doubt, the push from Big Engine to use cubemaps is intentionally intended use up more RAM and GPU processing time to force users to purchase more expensive GPUs.

    We strongly encourage that you do not believe the lies and misinformation spread by Big Engine and instead do your own research.

    Very large open world project



    Rendering a lot of 3D models.

    Making 3D models and placing them in the world. Will do a first pass and then set up streaming.

    Currently very slow performance due to a lot of draw calls. But could be because of Intel HD 4000 being bad. Will need to optimize.
















    ================================================ FILE: docs/learn/3dmodeling.html ================================================ Adding 3D models | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Adding 3D models


    After becoming experts in the coloring of teapots, how about we replace the teapot model with something else?

    First of all, make sure that you have Blender either installed or downloaded. After that, install the tram_dynamic_obj_export.py plugin which can be found in the /devtools/exporters directory in the main Tramway SDK repository.

    If you have problems, or need a more detailed guide, take a look at the exporter plugin documentation page.

    Creating and exporting a monkey


    Step 1: Create the monkey

    Look at the top bar. Locate the Add button. Then perform the Add » Mesh » Monkey selection. A monkey should appear in your Blender window.


    This is where you find the monkey button.

    Step 2: Give the monkey a new material

    Next we need to give the monkey a material. Add a material in the selection on the right side of the screen.


    This is where the new material button is.

    Let's give the monkey the same material as the teapot. Rename the new material to teapot.


    You can click on the name of the material to edit it.

    Step 3: Export!

    First, make sure that the monkey object is still selected. Now look at the top bar. Locate the Add button. Then perform the File » Export » Tram Dynamic Exporter selection. A file dialog should appear.


    This is where you find the exporters.

    You will need to save the monkey to the /data/models/ directory, so that the framework can find it. You don't have to name it monkey.dymdl, just remember to keep the file extension and to not put any spaces in the file name.


    The big blue button. It does the export.

    Replacing the teapot with a monkey


    Now we just need to swap out the teapot for the monkey. Change this line of code:

    teapot:SetModel("teapot")
    teapot:SetModel("monkey")


    It appears that we are inside a monkey.

    It appears that the default Blender monkey is much larger than our teapot. Let's resize the monkey, so that we can better appreciate it:

    teapot:SetScale(tram.math.vec3(0.5, 0.5, 0.5))


    It is much easier to appreciate the monkey from the outside.

    How to texture a teapot


    Going back into Blender, create another model. Maybe it will be another monkey, maybe you will use Blender's teapot generation capabilities, or perhaps you will create your own.

    Now comes the difficult part. Open up Tuxpaint or some other image editing program and create a texture. It's best if you use an image size which is powers of two, i.e. 32x32, 128x128, 256x128, etc.

    Once it's done, save it in the /data/textures/ directory. I decided to name it mybestwork.png.


    I am very proud of how this turned out.

    Back in Blender, create the material the same way we did before. This time, make sure that you give it the same name as you gave that texture image. Once you do that, in the same material pane you should see a Base Color selection. Click on that and select Image Texture. Now click on Open and find that image.

    The last thing left to do is to finish up the UVs. Enter edit mode by pressing the Tab key. Select all of the model by pressing Ctrl+A. Click on the UV button in the top bar and then select Sphere Projection or some othertexture projection. Not use Tab to get back into object mode and perform the export as before.

    Change the init script to load the new 3D model.


    My favorite teapot.

    Exercise


    If you don't know how to already, learn to use Blender.

    Exercise


    Create a 3D model with several different textures. Load it into the teapot viewer.
















    ================================================ FILE: docs/learn/animations.html ================================================ Adding Animations | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Adding Animations

    First, make sure that you have installed the Blender animation exporter plugin. Next up, create a 3D model of something, create an armature for it and rig it.

    Note


    Tramway SDK only allows 4 bones to influence a single vertex. Take this into account when vertex weight painting. If the exporter sees that a single vertex has weights for more than 4 bones, it will pick only 4 of the vertex groups that have the greatest weight for export.

    For the animations, you will need to open the Blender's Action Editor. Each exported animation will be a single action.

    When creating an animation, make sure that each bone that will be animated has a keyframe at frame zero and another keyframe at the end of the animation, on whichever frame you decide to put it.

    Note


    Use only LocRotScale keyframes, otherwise the exporter will explode and your computer will catch on fire. This might be fixed sometime in the future.

    Note


    Tramway SDK only uses linear interpolation, so make sure to set it in your keyframes, so that you see the animation in Blender just like it will look like when rendered by the framework.

    Note


    Since animations are resources with names, do not use a name with any spaces for your action name.

    After the animation or animations are finished, select File » Export » Tram Animation Exporter option. In the file dialog, navigate to /data/animations/ directory and click the Export Tram Animation button.

    Each Blender action will get saved into its own animation file.

    If you want an example of a rigged 3D model and an animation, take a look at the /assets/toilet.blend/ file.

    Playing the animation


    First, set up the 3D model.

    toilet = tram.components.Render()
    toilet:SetModel("toilet")
    toilet:Init()

    Then, let's load the Animation which we created.

    animation = tram.render.animation.Find(
                        "toilet-lid-open-close")
    animation:Load()

    Next, let's set up the AnimationComponent, which will be playing our animation.

    armature = tram.components.Animation()
    armature:SetModel("toilet")
    armature:Init()

    After both the Render and the Animation components have been initialized, we can link them together.

    toilet:SetArmature(armature)

    Finally, we can play back the Animation on the AnimationComponent, which will be visible on the RenderComponent, to which we linked it to.

    armature:Play("toilet-lid-open-close")


    Animation being played on a 3D model.

    Exercise


    The example above shows only the most basic animation playback option. Try changing the animation playback parameters. Try pausing, continuing and stopping animations. Fade them in and fade them out.
















    ================================================ FILE: docs/learn/cake.html ================================================ Making a cake simulator | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Making a cake simulator

    // TODO: implement
















    ================================================ FILE: docs/learn/cameras.html ================================================ Platforms and stuff | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Platforms and stuff

    // TODO: implement
















    ================================================ FILE: docs/learn/desktop.ini ================================================ [ViewState] Mode= Vid= FolderType=Generic ================================================ FILE: docs/learn/getstarted.html ================================================ Getting started | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Getting started


    If you already know how to C++ and are very good at it, you should be able to compile the code that can be found in the Tramway SDK repository.

    This article will cover the usage of the framework for beginners who are either scared of C++ or just bad at it. I tried to create the LUA scripting API in a way that is very close to the underlying C++ API, so after you overcome your fear of C++ or get better at it, you should be able to switch to it rather easily.

    Before starting, evaluate yourself and make sure that you possess the following qualities:

    • Good computer skills;
    • Decent programming skills;
    • Basic maths;
    • Knowledge of game engine concepts.

    If you do not meet these requirements, consider visiting your local public library, signing up for computer literacy courses or finishing your secondary education (if applicable).

    Setting up your workspace


    Before beginning, it would be worthwhile to set up your virtual workspace. My personal preference is to dump everything into a directory located on my Desktop on Windows or in my home directory on Linux.

    Decide where you will put your workspace directory and create it. Name it something descriptive, like tramsdk, projects, my_games or IMPORTANT. Customize the icon. Add a shortcut to your start menu or a start menu equivalent.

    Next up, you will need to acquire the framework source code. Even if you use pre-built binaries, the source code repository contains many useful Python scripts.

    Download the repository, either as a .zip file from the Github web interface, or clone it through the git program. After that, download the template repository, just like you downloaded the main framework repository.

    Creating your first app.


    Copy the directory and name it something descriptive, like my-app. You will probably do this every time you create a new app using the framework. Navigate into this directory.

    If you're using Windows, then the template repository already contained binaries for you. On Linux, you should take a look at the contents of the maketool.ini file. Try running maketool.py found in the devtools directory of the main framework repository, while having this directory as the working directory. If you are using Linux, then you're probably very clever, you should be able to figure this out.

    The executable of the app is named template.exe, you might want to rename it. Double-click on it or run it through command line and a window with a teapot should appear. You can rotate the teapot by pressing the arrow keys on your keyboard.


    This is what you should be seeing.

    If a window does not appear, check if your monitor is plugged in and turned on. Many users make this simple mistake.
















    ================================================ FILE: docs/learn/materials.html ================================================ Adding Materials | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Adding Materials


    If you followed the last guide and made your own teapot, you might have noticed that the teapot is not shiny. Not shiny at all! Also the texture was pixelated. Very pixelated!

    The reason for this is very simple – by default all materials are matte and not at all shiny. However, we can override this behavior by adding a material definition ourselves, instead of letting the framework create a default one.

    Open up the /data/material.list file in a text editor. What you will notice is a table of material definitions. Somewhere near the end you should find the teapot material that we gave the monkey 3D model.

    What do all of the values do?


    Material name

    This is the name of the material. It is used to reference it, such as by 3D models. It is also used to lookup the texture image for the material.

    Type

    This tells the renderer how to render the material. For the OpenGL backend this also determines which shader will be used to render this material.

    Filter

    This tells the renderer whether to blur the textures when upscaling them. This is why they look pixelated &endash; by default blurring is disabled.

    Property

    This describes aural and other physical properties about the material. This is not directly used by the renderer. We can ignore this for now.

    Color

    This is the color of the material. You might have noticed that a lot of materials have the white color. This is because if you use a texture image and if you want it to look exactly it looks in your image editor, you need to set it to white, since the material color and the texture color is multiplied together. Changing this will tint the texture image, or just set the material's color if there is no texture.

    Specularity

    This determines how intense the specularity of the material will be. Can be set in the range from 0.0 to 1.0.

    Specularity

    This determines how narrow or wide the specular reflection will be. Needs to be set to at least 1.0 or higher.

    Specular Transparency

    This determines whether the specular reflection will be multiplied with the material's color, or added to it. Can be set in the range from 0.0 to 1.0.

    Source

    This determines the source of the material's texture image. If set to same, the material's name will be used to lookup an image from the /data/materials, directory. If set to none, the material will have no texture and instead will use its color for display. Finally, if this parameter is set to anything else, this will be interpreted as the name of another material and this material will use the other's texture image.

    This is useful if, for example, you want to create multiple materials with the same texture, but with different specular, color or other parameters. This way all of the materials will share the same texture image in GPU memory, thereby saving some space there.

    Fixing the teapot material


    An easy way to do this would be to duplicate the teapot material's line in the file and to replace the material's name with you material's name. Also don't forget to change the source from none to same. Perhaps also change the transparency from 0.0 to 1.0, to make the teapot look less metallic.


    My best work: now shiny again.

    Exercise


    Try changing your teapot's material's properties. See what changing them to different values does.

    Exercise


    Use the texture source option and the color parameter to create different colored variations of your material.
















    ================================================ FILE: docs/learn/physics.html ================================================ Physics | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Physics

    // TODO: implement
















    ================================================ FILE: docs/learn/pingpong.html ================================================ Making Ping Pong | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Making Ping Pong

    First of all, we will be using debug lines. Debug lines are drawn on layer 1 and up to this point we have been using layer 0, which is the default layer for RenderComponents.

    By default, when calling tram.render.SetViewPosition(), it will affect the view position in the layer 0, so for the debug lines to appear correctly, we will need to set the view in the layer 1 as well.

    local view_pos = tram.math.DIRECTION_FORWARD * -3.0

    tram.render.SetViewPosition(view_pos, 0)
    tram.render.SetViewPosition(view_pos, 1)

    Most ping pongy games are 2D, but Tramway SDK uses 3D graphics. How do we reconciliate this? The easiest way would be to just disregard the Z axis. Whenever we need to pass in a Vec3, we will set the third component to 0.0.

    Let's set up the ball and the paddles.

    ball = {
      position = tram.math.vec3(0.0, 0.0, 0.0),
      velocity = tram.math.vec3(0.02, 0.02, 0.0)
    }

    paddle_left = {
      position = tram.math.vec3(-2.0, 0.0, 0.0)
    }

    paddle_right = {
      position = tram.math.vec3(2.0, 0.0, 0.0)
    }

    We'll set up the playing field so that the left and right borders are on the -2.0 and 2.0 X coordinates respectively and top and bottom are on the -1.0 and 1.0 Y coordinates respectively.

    The paddles will be moving along the left and the right sides of the field. The ball will start in the middle. We also give it a starting velocity.

    When drawing lines using the debug line functions, we need to call these functions every frame. Up until now we have been using the Tick event handler to drive the logic. Tick events get emitted at regular intervals, but they might not be emitted for every frame. That's why we will be putting all of the rendering related code in the event handler for the Frame event.

    Let's draw the field first.

    local corner1 = tram.math.vec3(-2.0, 1.0, 0.0)
    local corner2 = tram.math.vec3(2.0, 1.0, 0.0)
    local corner3 = tram.math.vec3(2.0, -1.0, 0.0)
    local corner4 = tram.math.vec3(-2.0, -1.0, 0.0)

    local midpoint1 = tram.math.vec3(0.0, 1.0, 0.0)
    local midpoint2 = tram.math.vec3(0.0, -1.0, 0.0)

    local color = tram.render.COLOR_WHITE

    tram.render.AddLine(corner1, corner2, color)
    tram.render.AddLine(corner2, corner3, color)
    tram.render.AddLine(corner3, corner4, color)
    tram.render.AddLine(corner4, corner1, color)
    tram.render.AddLine(midpoint1, midpoint2, color)

    Here we just define the corners of the field and use the debug line drawing functions to draw them. Let's draw the paddles next.

    local left_top = paddle_left.position
      + tram.math.vec3(0.1, paddle_size, 0.0)
    local left_btm = paddle_left.position
      + tram.math.vec3(0.1, -paddle_size, 0.0)

    tram.render.AddLine(left_top, left_btm, tram.render.COLOR_GREEN)

    local right_top = paddle_right.position
      + tram.math.vec3(-0.1, paddle_size, 0.0)
    local right_btm = paddle_right.position
      + tram.math.vec3(-0.1, -paddle_size, 0.0)

    tram.render.AddLine(right_top, right_btm,
      tram.render.COLOR_GREEN)

    Here we just calculate the top and bottom coordinates of the paddles, then draw them. Also we push them into the field a bit, so that they don't get obscured by the lines that make up the sides of the field.

    You can set the paddle_size to whatever size you want. I set it to 0.2.

    Finally, we draw the ball.

    tram.render.AddLineMarker(ball.position,
      tram.render.COLOR_RED)


    Initial field setup.

    Let's add the ability to move the paddles. This we should put in the Tick event handler, since we want the paddles to move at a speed independently of the frame rate.

    if tram.ui.PollKeyboardKey(tram.ui.KEY_UP) then
      if paddle_right.position.y
          + paddle_size < 1.0 then
        paddle_right.position.y =
          paddle_right.position.y + 0.05
      end
    end

    if tram.ui.PollKeyboardKey(tram.ui.KEY_DOWN) then
      if paddle_right.position.y
          - paddle_size > -1.0 then
        paddle_right.position.y =
          paddle_right.position.y - 0.05
      end
    end

    if tram.ui.PollKeyboardKey(tram.ui.KEY_W) then
      if paddle_left.position.y
          + paddle_size < 1.0 then
        paddle_left.position.y =
          paddle_left.position.y + 0.05
      end
    end

    if tram.ui.PollKeyboardKey(tram.ui.KEY_S) then
      if paddle_left.position.y
          - paddle_size > -1.0 then
        paddle_left.position.y =
          paddle_left.position.y - 0.05
      end
    end

    I set it up so that the left paddle can be moved up and down by the W and S keys respectively, and the right paddle can be moved up and down by the Up and Down arrow keys respectively.


    The paddles can be moved now.

    Let's make the ball move as well.

    ball.position = ball.position + ball.velocity


    The ball flies out of the field.

    Adding collisions to the top and bottom sides of the field is very easy.

    if ball.position.y < -1.0
        or ball.position.y > 1.0 then
      ball.velocity.y = -ball.velocity.y
    end

    Adding collisons to the left and right sides is a little bit more complicated, since we also have to take into account collisions with the paddles.

    if ball.position.x < -2.0 then
      local paddle_dist = math.abs(ball.position.y
        - paddle_left.position.y)

      if paddle_dist < paddle_size then
        ball.velocity.x = -ball.velocity.x
      else
        ball.position.x = 0.0
        ball.position.y = 0.0

        player_right_score = player_right_score + 1

        print("Left lost!!")
        print("Score is",
              player_left_score,
              "|",
              player_right_score)
      end
    end

    if ball.position.x > 2.0 then
      local paddle_dist = math.abs(ball.position.y
        - paddle_right.position.y)

      if paddle_dist < paddle_size then
        ball.velocity.x = -ball.velocity.x
      else
        ball.position.x = 0.0
        ball.position.y = 0.0

        player_left_score = player_left_score + 1

        print("Right lost!!")
        print("Score is",
              player_left_score,
              "|",
              player_right_score)
      end
    end

    We also need to define the player score counters for this.

    player_left_score = 0
    player_right_score = 0

    At this point, the gameplay logic is finished. We just have to add the 3D models. For the ball model, I decided to use the teapot model. For the paddles I used the default Blender cube, with some bevels applied to the edges.


    How it looks like with the 3D models replacing the debug lines.

    One thing you might notice is that the 3D models are being drawn underneath the debug lines. We can fix this by setting them to a higher layer.

    paddle_model_left:SetLayer(1)
    paddle_model_right:SetLayer(1)


    In motion.

    If you want to look at the full code, it is available in the example repository.
















    ================================================ FILE: docs/learn/platforms.html ================================================ Platforms and stuff | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Platforms and stuff

    // TODO: implement
















    ================================================ FILE: docs/learn/render.html ================================================ Render | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Render

    // TODO: implement
















    ================================================ FILE: docs/learn/scripting.html ================================================ Basic scripting | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Basic scripting


    In order to follow this guide, you might need the following:

    • Basic computer programming skills
      • Previous experience in object-oriented programming will prove to be very useful
    • Basic understanding of Lua or other Pascal-derived languages
    • General understanding of how game engines and similar software works

    Reminder about Lua syntax


    Anyway, here's a small reminder of how Lua works.

    -- this is a comment

    -- creating a global variable
    number_first = 420

    -- creating a local variable
    local number_second = 69

    -- printing stuff to the console
    print(420 + 69)

    -- Lua only has if/else statements. no switches
    if 420 == 69 then
        -- ...
    elseif 420 + 69 == 489 then
        -- ...
    else
        -- ...
    end

    -- function
    function add_special_number(x)
        return x + 420
    end

    -- Lua has tables, which are similar to
    -- JavaScript objects. they function as
    -- dynamic dictionaries, arrays, as objects
    -- with methods, etc.

    -- array
    array = {}
    array[1] = 420
    array[2] = 69

    -- dynamic dictionary
    dict = {}
    dict["hello"] = "world"
    -- identical to previous statement
    dict.hello = "world"

    -- object
    object = {}
    object.number = 420
    object.add = function(self, x)
        return self.number + x
    end

    -- if using the colon symbol, you can
    -- call the method and the self parameter
    -- will be filled in automatically
    number = object:add(69)

    What does the init script do?


    First, let's go through the init.lua file and see what it does. It can be found in the /scripts/ directory in the project template.

    print("\n\nHello! [...]\n")
    -- ...

    This part just prints some text to the console.

    -- Retitling the main window.
    tram.ui.SetWindowTitle("Teapot Explorer v1.0")
    tram.ui.SetWindowSize(640, 480)

    This part sets the title of the window, which is opened automatically on program start. It also sets the size of the window.

    -- Setting up the global lighting.
    tram.render.SetSunColor(tram.math.vec3(0.0, 0.0, 0.0))
    tram.render.SetSunDirection(tram.math.DIRECTION_FORWARD)
    local ambient = tram.math.vec3(0.1, 0.1, 0.1)
    tram.render.SetAmbientColor(ambient)
    tram.render.SetScreenClearColor(tram.render.COLOR_BLACK)

    This section will set up the scene lighting. All of these functions accept a vec3 table. The tram.math.vec3(x, y, z) function constructs a vec3 table.

    -- Move the camera a bit away from the origin.
    local position = tram.math.DIRECTION_FORWARD * -1.2
    tram.render.SetViewPosition(position)

    By default, all new 3D models get created at the origin, which is the coordinates (0.0, 0.0, 0.0). The view also starts at this position, so we move it a bit back, so that it doesn't end up in the teapot.

    -- Setting up a light so that you can see something.
    scene_light = tram.components.Light()
    scene_light:SetColor(tram.render.COLOR_WHITE)
    scene_light:SetLocation(tram.math.vec3(5.0, 5.0, 5.0))
    scene_light:Init()

    Since the previous bit of code set the directional light's color to zero, it won't contribute to the scene's illumination, so here we create a light, so that you can actually see the teapot.

    -- Adding a teapot to the scene.
    teapot = tram.components.Render()
    teapot:SetModel("teapot")
    teapot:Init()

    Finally, we add the 3D model of the teapot to the scene.

    -- This vector here will contain teapot euler angle rotation in radians.
    local teapot_modifier = tram.math.vec3(0.0, 0.0, 0.0)

    In order to rotate the teapot, we need to set up its initial rotation.

    -- This function will be called every tick.
    tram.event.AddListener(tram.event.TICK, function()
      if tram.ui.PollKeyboardKey(tram.ui.KEY_LEFT)
       or tram.ui.PollKeyboardKey(tram.ui.KEY_A) then
        teapot_modifier = teapot_modifier
    	 - tram.math.vec3(0.01, 0.0, 0.0)
      end
      
      if tram.ui.PollKeyboardKey(tram.ui.KEY_RIGHT)
       or tram.ui.PollKeyboardKey(tram.ui.KEY_D) then
        teapot_modifier = teapot_modifier
    	 + tram.math.vec3(0.01, 0.0, 0.0)
      end
    	
      if tram.ui.PollKeyboardKey(tram.ui.KEY_UP)
       or tram.ui.PollKeyboardKey(tram.ui.KEY_W) then
        teapot_modifier = teapot_modifier
    	 - tram.math.vec3(0.01, 0.0, 0.0)
      end
    	
      if tram.ui.PollKeyboardKey(tram.ui.KEY_DOWN)
       or tram.ui.PollKeyboardKey(tram.ui.KEY_S) then
        teapot_modifier = teapot_modifier
    	 + tram.math.vec3(0.01, 0.0, 0.0)
      end
    	
      teapot:SetRotation(tram.math.quat(teapot_modifier))
    end)
    

    We need to execute the rotation logic during runtime. A good way to do it is to add an Event Listener and set it to listen to the Tick event, which is emitted at regular intervals.

    The code for the logic itself will check if the arrow keys are being pressed, and if they are, it will modify the rotation of the teapot. After all of the keys are checked and a new rotation is computed, it is assigned to the teapot's 3D model.

    Since all rotations use quaternions, we can pass the tram.math.quat() quaternion constructor a vec3, which will be interpreted as a vector containing euler angles, i.e. the rotations around the x, y and z axis.

    Teapot coloring.


    The default white teapot color is rather uninteresting. Let's change it to something more interesting.

    Add this line of code somewhere after the teapot variable is initialized:

    teapot:SetColor(tram.render.COLOR_PINK)

    All of the color definitions are just vec3s, so we can pass them in as the colors. The only thing to remember is that each color value needs to be in the range from 0.0 to 1.0.


    The teapot has been colored pink.

    Exercise


    Look up the hex or integer color values for your favorite color. Convert them into the range from 0.0 to 1.0 for each color channel and assign them to the teapot.

    At this point, you are probably very proud of your teapot coloring skills. Press the F12 key on your keyboard. This will save a screenshot of the teapot in your project directory. Print it out and mail it to your friends!

    Let's try doing something more interesting with the colors. Place these lines of code somewhere in the update function:

    local r = math.sin(tram.GetTickTime())
    local g = math.sin(tram.GetTickTime())
    local b = math.sin(tram.GetTickTime())

    local color = tram.math.vec3(r, g, b)

    -- the r, g, b values are in the range
    -- from -1.0 to 1.0 due to the sin()
    -- function, so we need to re-map them
    -- to the 0.0 to 1.0 range for colors

    color = color + 1.0
    color = color * 0.5

    teapot:SetColor(color)


    The teapot fades from white to black and then back to white.

    We can make this even more interesting. Let's add a different phase shift to each of the color channels.

    local r = math.sin(tram.GetTickTime() + 1.0)
    local g = math.sin(tram.GetTickTime() + 2.0)
    local b = math.sin(tram.GetTickTime() + 4.0)


    The teapot cycles through all of the colors.

    Exercise


    Now that you can dynamically change a vec3 for colors, how about dynamically changing the teapot's position and rotation?

    Exercise


    Maybe try changing the color of the scene's light.

    Exercise


    The code for controlling the teapot's rotation is already set up. Maybe add the option to not only be able to change the rotation of the teapot, but also its position?
















    ================================================ FILE: docs/learn/structure.html ================================================ Structure of a project | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Structure of a project

    Your project files are located in your project directory. It also contains several other directories. This is how these are structured and where everything is located.

    /assets/

    Currently there are no tools which use this particular directory, but there will be in the future.

    The assets directory is meant to shadow the structure of the data directory, with the main difference that the data files are stored in an editable format. For example, the assets directory could contain /assets/models/frogs/green.blend file and it would have its counterpart /data/models/frogs/green.dymdl which is prepared from the first file.

    /data/

    This is the main data directory. It contains the directories for various resources, as well as language files, editor settings and entity definition files (might be moved in the future) and the material definition files.

    /data/animations/

    This directory contains the all of the Animation resources.

    /data/audio/

    This directory contains the all of the Sound resources.

    /data/models/

    This directory contains the all of the 3D model resources.

    /data/navmesh/

    This directory contains the all of the Navmeshes.

    /data/paths/

    This directory contains the all of the Paths.

    /data/sprites/

    This directory contains the all of the Sprite resources.

    /data/textures/

    This directory contains the all of the textures for the Material resources.

    /data/sprites/

    This directory contains the all of the WorldCells.

    /scripts/

    This directory contains all of the scripts. When the Script system is initialized with a scripting language initialized, it will load the api file, which contains the language-specific script bindings.

    For Lua, this is the api.lua file. You probably should avoid editing it, unless you know what you are doing.

    There is also an init file. This is loaded by the template project after initializing all of the framework's systems. You can edit this file and put whatever you want in it.

    /shaders/

    This directory contains all of the shaders for the rendering backends that support shaders. You can edit them if you want.

    /src/

    Contains all of the C++ source code for the project.

    /

    The project root directory contains the executable file for the application, as well as various configuration files. This is also the working directory from which the various tools and utilities need to be launched from.
















    ================================================ FILE: docs/learn/walking.html ================================================ Walking around a world | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Walking around a world

    // TODO: implement
















    ================================================ FILE: docs/learn/whatis.html ================================================ What it is and what does it do? | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    What it is and what does it do?


    Tramway Drifting and Dungeon Exploration Simulator Software Development Kit consists of approximately 30 000 lines of code. These lines of code have been written, so that you don't have to.

    The main goal of this project is to enable the creation of real-time 3D graphics applications. These applications could be video games, virtual reality spaces, various visualizations, etc.

    Most of the code of this project is contained in the Tramway SDK runtime. The runtime is implemented as a C++ library, which can be embedded into existing applications, or used as a standalone application, using the Lua API for scripting.

    In addition to the runtime, the project also consists of a graphical level editor, 3D content authoring plugins for the Blender 3D modeling application, as well as various commandline utilities.

    In the future, the project will be enhanced by the addition of additional applications and utilities.
















    ================================================ FILE: docs/learn/world.html ================================================ Structure of a project | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Creating a world

    // TODO: implement
















    ================================================ FILE: docs/learn.html ================================================ Learn | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Learn

    Here's all of the «guide» style documentation. It's meant to showcase the framework in a less formal and structured way.

    If you have no idea what it is and how to use it, this is a good place to start.

    Basic stuff

    1. What it is and what does it do?
    2. Getting started
    3. Structure of a project
    4. Basic scripting
    5. Adding 3D models
    6. Adding Materials
    7. Adding Animations
    8. Making Ping Pong
    9. Physics
    10. Render
    11. Creating a world
    12. Walking around a world
    13. Cameras, how do they work?
    14. Platforms and stuff
    15. Making a cake simulator
















    ================================================ FILE: docs/no_gifs.css ================================================ .animated { display: none; } ================================================ FILE: docs/page_generator.py ================================================ import re pages = ["index", "features", "roadmap", "learn", "patterns", "why", "learn/whatis", "learn/getstarted", "learn/structure", "learn/scripting", "learn/3dmodeling", "learn/materials", "learn/animations", "learn/pingpong", "learn/physics", "learn/render", "learn/world", "learn/walking", "learn/cameras", "learn/platforms", "learn/cake", "documentation", "documentation/index", "documentation/audio", "documentation/components", "documentation/components/animation", "documentation/components/audio", "documentation/components/controller", "documentation/components/light", "documentation/components/particle", "documentation/components/physics", "documentation/components/player", "documentation/components/render", "documentation/components/sprite", "documentation/components/template", "documentation/components/trigger", "documentation/entities", "documentation/entities/crate", "documentation/entities/decoration", "documentation/entities/light", "documentation/entities/marker", "documentation/entities/player", "documentation/entities/sound", "documentation/entities/staticwobj", "documentation/entities/trigger", "documentation/extensions", "documentation/extensions/camera", "documentation/extensions/menu", "documentation/extensions/kitchensink", "documentation/extensions/kitchensink/animationtable", "documentation/extensions/kitchensink/soundtable", "documentation/extensions/scripting", "documentation/framework", "documentation/framework/async", "documentation/framework/core", "documentation/framework/entity", "documentation/framework/entitycomponent", "documentation/framework/event", "documentation/framework/file", "documentation/framework/graph", "documentation/framework/gui", "documentation/framework/language", "documentation/framework/loader", "documentation/framework/logging", "documentation/framework/math", "documentation/framework/message", "documentation/framework/navmesh", "documentation/framework/path", "documentation/framework/resource", "documentation/framework/script", "documentation/framework/serialization", "documentation/framework/settings", "documentation/framework/signal", "documentation/framework/stats", "documentation/framework/system", "documentation/framework/transition", "documentation/framework/type", "documentation/framework/ui", "documentation/framework/uid", "documentation/framework/worldcell", "documentation/framework/value", "documentation/physics", "documentation/physics/collisionmodel", "documentation/physics/collisionshape", "documentation/platform", "documentation/render", "documentation/render/aabb", "documentation/render/animation", "documentation/render/material", "documentation/render/model", "documentation/render/sprite", "documentation/tools/codegen", "documentation/plugin", "documentation/leveleditor", "documentation/entitydefinition", ] template = "template" template_text = open("src/" + template + ".html", "r").read() for page in pages: page_text = open("src/" + page + ".html", "r").read() page_level = page.count('/') page_level = "../" * page_level page_title = re.search("", page_text) if page_title: page_title = page_title.group(1) else: page_title = "UNTITLED" page_templated = template_text page_templated = page_templated.replace("", page_title).replace("", page_text) page_templated = page_templated.replace("", page_level) for link in re.findall("", page_templated): replace_match = "" replace_string = "" + link[1] + "
    " page_templated = page_templated.replace(replace_match, replace_string) file = open(page + ".html", "w") file.write(page_templated) file.close() print(page + " done") ================================================ FILE: docs/patterns.html ================================================ Design Patterns | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Design Patterns Used


    When all of the patterns get used, I will delete the project and rewrite it in Rust. With no OOP.

    Pattern Where is it used?
    Abstract factory Not used.
    Builder Not used.
    Factory method Used all over the place.
    Prototype Used in the level editor for objects. Some objects can be cloned.
    Singleton PoolProxy class is used to force a single Pool template instantiation per type.
    Adapter There's probably some adapters in there, but can't remember a specific example.
    Bridge Definitely somewhere in there.
    Composite Used for level editor objects.
    Decorator Used for scripting API.
    Facade Used for the file abstraction.
    Flyweight Dynamically created collisionshapes use the same underlying object if their types and dimensions are the same.
    Proxy Used by some resources.
    Chain of responsiblity Not used.
    Command Messages are essentially commands.
    Interpreter Used by the quest extension for nocode scripting.
    Iterator Used all over the place.
    Mediator Not used.
    Memento Used for undo/redo functionality in the level editor.
    Observer Event listeners are essentially observers.
    State Used for tools in the level editor.
    Strategy Used by the file abstraction.
    Template method Used by resources, entities and entity components for their life cycles and stuff.
    Visitor Probably used somewhere in there.















    ================================================ FILE: docs/roadmap.html ================================================ Roadmap | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Roadmap

    Tasks that have been completed and are a success are marked with strikethrough. Some tasks are only partially completed.

    Audio
    Add an option to attach audio effects to audio sources. The OpenAL backend supports this. Other possible, future backends might also support this.
    Add an option to automatically determine audio effects for audio sources. This could be implemented as reverb zones, which are manually placed in levels, or the parameters of the effects could be determined using raycasts, or with other means.
    Add an option to play back tracker files There are libraries which should be able to play back tracker files. One of them could be integrated into the audio system.
    Animation
    Add events to animations It should be possible to add a callback for a specific bone, and when a keyframe for that bone is reached, it would trigger the callback. This would allow syncing up code to animations.
    Language
    Add UTF-16 strings Currently it is possible to only use 256 different characters in text. By switching strings from char to wchar, we could use all of the characters.
    Graph
    Add Paths It would be neat if you could have entities follow a path that is laid down in the level editor.
    Add Navmeshes Navmeshes would allow better navigation by NPCs.
    Note: only navmesh editing and loading has been implemented, no navmesh navigation has been implemented yet.
    Serialization
    Add serialization Serialization was yeeted out, but it should be very easy to put it back in. This would allow saving the state of the application.
    Files
    Add virtual file system This would allow files to be read not only from disk, but also archives. Files could also be written to archives. Files could also be read using HTTP GET and written as POST requests.
    Rendering
    Add sphere maps This would allow reflective surfaces. Would also need to add some way to automatically capture.
    Light probes Implemented using spherical harmonics or something similar.
    Detail textures would be neat
    Bump/normal mapping Mor edetails good!
    Note: normal mapping implemented, but only for raytracing rendering backend.
    Planar reflections Using with stencils or something
    Transparency There already is, but it is not !! is not good! --> not blendered
    Decals Would allow projecting! images and that would be good.
    Note: currently basic implementation done, still needs optimizations.
    Applets
    Material Editor This would allow the creation of new materials interactively. It would also mean that you don't have to edit the material text files directly.
    Model/Animation Viewer This applet would allow the previewing 3D models, as well as playing back animations on them. This would be useful for previewing 3D models and animations. It could also be used as a 3D model picker/palette tool for other applications, or added as a default viewer program for .DYMDL and .STMDL files, so that they can be opened directly form the operating system's shell.
    Modification Model Editor Currently modification models can only be created using a text editor. It would be easier to create them in an applet that can immediately display the newly created 3D model.
    Language Editor Editing strings would be nicer if done in a GUI. It would also allow the comparison of strings in different languages and would allow detecting missing language strings easier.
    Soundtable Editor It might be useful to have an editor for soundtables, which also has a sound preview functionality.
    Animationtable Editor It would allow previewing of animation states in real time. Could be useful.
    Sprite Editor Would be better than using a text editor.















    ================================================ FILE: docs/src/documentation/audio.html ================================================

    Audio


    The audio system provides audio playback services.

    Currently it only supports playing back audio from audio files, and from .ogg format audio files in particular.

    In the future, the system will be enhanced to allow streaming audio, and possibly to allow for more formats to be used.

    If you want to easily play back sounds in your levels, check out the Sound entity. It also has a scripting API option, which is useful for playing back sound effects.

    If you want to incorporate audio playback into the entities you are constructing, you will find the Audio Component useful.

    Key concepts


    Sound

    A sound is a Resource. It contains audio data loaded from an .ogg audio file.

    Source

    A source will play back the audio contained in a Sound. It can be positioned in 3D space.

    Listener

    A listener is usually attached to the render view. It has a position and an orientation.

    It determines how the sources should sound like, relative to it, i.e. if a sound source is next to the listener, it will sound very loud, and if it is moved to be very far from the listener, it will be very quiet.

    Programming in C++


    // TODO: implement

    Scripting in Lua


    // TODO: implement

    Backends


    Just like Physics and Render, the Audio system provides an interface for swapping out the audio system backends. The possible options are:

    OpenAL

    This is the default Audio backend. It uses the OpenAL library to play back audio.

    Spatial

    An experimental audio backend. Uses path tracing adapted from the primary sample space metropolis light transport algorithm. Very fancy, but also very slow and broken. Might not even compile without some fixes.

    Template

    The template for implementing further backends. Implements only stubs of the internal API functions. Can be used if you don't want to use any audio.

    ================================================ FILE: docs/src/documentation/components/animation.html ================================================

    Animation Component


    This EntityComponent plays back animations. More precisely, it generates pose matrices for the deformation of 3D models. It basically lets you animate 3D models.

    With this component you get 8 tracks to play back animations on. You also get an additional track for procedural animations.

    Multiple animations get added together. This can be used to animate parts of characters seperately.

    The playback speed of animations can be changed. This is useful for movement animations.

    You can also set up weights for animations. For example, you could create a nodding animation for a character. Then you could play it back with a weight of 0.2 to get a slight nod, 0.5 to get a normal nod and 1.0 to get a very enthusiastic nod.

    There are also fade-ins and fade-outs, which gradually increase or decrease the animation weight. This could be used, for example, if you created a walking animation for a character, which you could fade out, to make the character appear as if it is gradually coming to a stop.

    There is some limited animation re-targeting – if the model for which you created the animations has an armature which is similar enough for the model which you want to animate, you can play back the same animations ande everything will work. The bone names do need to be exactly the same in both models.

    Programming in C++


    #include <components/animation.h>
    API documentation page.

    The only thing that you need to do before initializing this component? You need to feed it a model. This has to be a dynamic model, since static models have no bone data in them.

    Component<AnimationComponent> component;

    component.make();
    component->SetModel("mongus");
    component->Init();

    Then you can begin playing some animations. You do need to make sure that the animation that you want to play is already loaded, since I forgot to add the code for them to be automatically streamed in. Anyway:

    Animation::Find("mongus-run")->Load(); component->PlayAnimation("mongus-run", -1, 1.0f, 1.0f);

    If you look closely, you will notice that we set the number of repeats to -1. This means that it will repeat for a very long time. It will stop eventually, but it will take at least 2 years for an application running at 60 FPS.

    To actually view the animation that you are playing, you need to attach it to a RenderComponent.

    Component<RenderComponent> model;

    model.make();
    model->SetModel("mongus");
    model->Init();

    model->SetArmature(component);

    The possibilities of animation playback are limitless. Check the API documentation for more information.

    Scripting in Lua


    Still working on this.

    ================================================ FILE: docs/src/documentation/components/audio.html ================================================

    Audio Component


    This EntityComponent is a wrapper for audio sources.

    Pass in the sound which it needs to play, the position of the audio source and it will play it. Very easy. Very simple.

    Programming in C++


    #include <components/audio.h>
    API documentation page.

    Currently sounds won't get automatically streamed in via the Async system, so make sure that the sound is already loaded before passing it to the component:

    Sound::Find("my-sound")->Load();

    Remember to store the Component<> smart pointer in a class, static variable, or otherwise ensure that it doesn't immediately get destructed.

    Component<AudioComponent> audio;

    audio.make();
    audio->SetLocation({0.0f, 0.0f, 0.0f});
    audio->SetSound("my-sound");
    audio->SetRepeating(true);
    audio->Init();

    After initialization, you can begin playback of the sound, pause it or stop it completely.

    audio->Play();  // Begins the playback of the sound
    audio->Pause(); // Pauses the playback
    audio->Stop();  // Cancels the playback

    You can also check the status of the playback.

    // Since we stopped the playback, this will
    // evaluate to false
    if (audio->IsPlaying()) {
        printf("Audio source is playing.");
    } else {
        printf("Audio source has stopped.");
    }


    Scripting in Lua


    Not yet implemented.

    ================================================ FILE: docs/src/documentation/components/controller.html ================================================

    Controller Component


    This EntityComponent can be used for controlling players and NPCs and that sort of stuff.

    Programming in C++


    #include <components/controller.h>
    API documentation page.

    All you really need to do to get started is just the creation of the component. Also you need to feed in a pointer to the entity which will be controlled by this component. It will automatically update the position of it when it moves.

    Component<ControllerComponent> component;

    component.make();
    component->SetParent(this);
    component->Init();

    After that, you can begin sending commands to the component. Check the API documentation to see what kinds of commands there are. You can also look at the implementation of the PlayerComponent to see an example of the usage of the component.

    Scripting in Lua


    Not done yet.

    ================================================ FILE: docs/src/documentation/components/light.html ================================================

    Light Component


    This EntityComponent is a wrapper around a light.

    Programming in C++


    #include <components/light.h>
    API documentation page.

    It's very simple, just pick the position of the light and its color. If you want to increase the brightness of the light, multiply the

    Component<LightComponent> component;

    const float brightness = 2.0f;
    const vec3 color = {0.38f, 0.25f, 0.31f};

    component.make();
    component->SetLocation({0.0f, 0.0f, 0.0f});
    component->SetColor(brightness * color);
    component->Init();

    If you want to turn the light from a point light into a spotlight, you can set its direction and exponent. The direction is a direction normal vector. The exponent starts at 1.0 and increasing it narrows the spotlight's width.

    component->SetDirection(DIRECTION_FORWARD);
    component->SetExponent(16.0f);


    Scripting in Lua


    Still working on it...

    ================================================ FILE: docs/src/documentation/components/particle.html ================================================

    Particle Component


    This EntityComponent allows the creation of a particle system.

    The API is still not finallized. It's possible to manually spawn in individual particles, but this feature is still being worked on.

    If you have any suggestions, consider leaving a Github issue.

    Programming in C++


    #include <components/sprite.h>
    API documentation page.

    Scripting in Lua


    Still working on it...

    ================================================ FILE: docs/src/documentation/components/physics.html ================================================

    Physics Component


    This EntityComponent is a wrapper around a rigidbody.

    // TODO: finish

    Programming in C++


    #include <components/physics.h>
    API documentation page.

    // TODO: finish

    Scripting in Lua


    Still working on it... might be finished soon...

    ================================================ FILE: docs/src/documentation/components/player.html ================================================

    Player Component


    This EntityComponent can be used to translate UI inputs into inputs for the ControllerComponent

    // TODO: finish

    Programming in C++


    #include <components/player.h>
    API documentation page.

    // TODO: finish

    Scripting in Lua


    Working.... working....

    ================================================ FILE: docs/src/documentation/components/render.html ================================================

    Render Component


    This EntityComponent is a wrapper around a draw list entry. It provides an easy to use interface by which it is possible to add a 3D model to the scene and to manipulate it in various ways.

    This is the first component I created for the framework and the one I have been cooking for the longest. Hopefully it is also very good and very useful. If you do not find it very useful, leave a Github issue.

    // TODO: finish

    Programming in C++


    #include <components/template.h>
    API documentation page.

    // TODO: finish

    Scripting in Lua


    This one will probably the first that I work on. But still working on...

    ================================================ FILE: docs/src/documentation/components/sprite.html ================================================

    Sprite Component


    This EntityComponent displays a sprite.

    If the spritesheet contains multiple sprites, it's possible to play them as an animation. Very neat!

    Programming in C++


    #include <components/sprite.h>
    API documentation page.

    To get started, construct the component, feed it a sprite and set its location. It might take a few moments for the sprite to be streamed in.

    Component<SpriteComponent> component;

    component.make();
    component->SetSprite(Sprite::Find("poland"));
    comopennt->UpdateLocation({3.0f, 1.2f, -1.0f});
    component->Init();

    If you want to play the spritesheet as an animation.

    component->SetPlaySpeed(2);
    component->Play();


    Scripting in Lua


    Eventually it will be finished, but might take some time.

    ================================================ FILE: docs/src/documentation/components/template.html ================================================

    Template Component


    This EntityComponent is a template. You can copy it to quickly create new components.

    Programming in C++


    #include <components/template.h>
    API documentation page.

    You probably don't want to use this component directly. Just copy the files components/template.h and components/template.cpp, rename them to mycomponent.h and mycomponent.cpp respectively and inside of these new files replace each instance of TemplateComponent with MyComponent.

    Other frameworks have fancy commandline scripts to let you quickly create new components. We do not have any fancy scripts. You will need to create your components manually.

    Scripting in Lua


    For scripting there will be a scripting component. That you will be able to use. But it's not fully implemented yet.

    ================================================ FILE: docs/src/documentation/components/trigger.html ================================================

    Trigger Component


    This EntityComponent is a wrapper around a trigger.

    The trigger itself is triggered by rigidbodies moving into its volume. You can add a callback, which will be fired when that happens, or you can have it store the collision data, so that you can pick it up and to whatever you want to do with it.

    The volume of the trigger can be taken from a collision model, or a collision shape.

    // TODO: finish

    Programming in C++


    #include <components/template.h>
    API documentation page.

    // TODO: finish

    Scripting in Lua


    Yes, working. Very working.

    ================================================ FILE: docs/src/documentation/components.html ================================================

    Components


    The framework comes packaged with some pre-made EntityComponents. Some of these components are convenient wrappers around lower level systems, others have some logic of their own.

    These components are:

    • Animation
    • Allows playback of Animations for 3D models. Can be attached to a RenderComponent.

    • Audio
    • A wrapper around an audio source. Can be used to play back sounds.

    • Controller
    • Controller for characters, i.e. player, NPCs. Accepts movement commands, i.e. walk, turn, jump, etc.

    • Light
    • A wrapper around a light. Used to illuminate the 3D scene.

    • Particle
    • Enables the creation of particle effects, i.e. smoke, sparks, falling leaves, snow, etc.

    • Physics
    • A wrapper around a rigidbody in the physics simulation.

    • Player
    • Maps input from the UI system into commands for a CharacterController.

    • Render
    • A wrapper around a draw list entry. Used to display 3D models in the scene.

    • Sprite
    • Can be used to display a flat 2D image in a 3D scene.

    • Template
    • Blank component, the source of which can be copied to be used as a base to create new components.

    • Trigger
    • A wrapper around a trigger. Can fire off callbacks when a rigidbody enters its volume.

    ================================================ FILE: docs/src/documentation/entities/crate.html ================================================

    Crate


    This entity can be placed in a level. It doesn't do anything other than do normal rigidbody stuff.

    Fields


    Model | Name

    Name of the 3D model.

    Collision Model | Name

    Name of the collision model.

    Messages


    There are none.

    Signals


    There are none.

    ================================================ FILE: docs/src/documentation/entities/decoration.html ================================================

    Decoration


    Displays a 3D model and optionally plays back an animation on it.

    Fields


    Flags | Int32

    Bitmask, see flags section.

    Model | Name

    Name of both the 3D model and the collision model.

    Animation | Name

    Name of the animation that the model will play. If set to none, no animation will be played and the AnimationComponent won't even be created.

    Flags


    1 | FLAG_LOCKED

    The decoration is locked and prevented from activating.

    Messages


    Select | SELECT

    If the decoration isn't locked, it will emit a Selected event.

    Activate Once | ACTIVATE_ONCE

    If the decoration isn't locked, it will fire the Activate and the Use signals.

    Lock | LOCK

    Locks the decoration.

    Unlock | UNLOCK

    Unlocks the decoration.

    Toggle | TOGGLE

    If an animation is set and is being played, it will be stopped. If it is stopped, it will be restarted.

    Kill | KILL

    Yeets the entity.

    Start | START

    If an animation is set, it will be played back.

    Stop | STOP

    If an animation is being played back, it will be stopped.

    Set Animation | SET_ANIMATION

    Switches which animation the component will play back. The data pointer of the message needs to be set to a Value which contains the name of the animation to which the switch is happening.

    Signals


    Activate | ACTIVATE

    Fired when the entity is activated and isn't locked.

    Use | USE

    Fired when the entity is activated and isn't locked.

    ================================================ FILE: docs/src/documentation/entities/light.html ================================================

    Light


    Places a light into the scene.

    Fields


    Color | Vec3

    The color of the light.

    Distance | Float32

    Maximum distance, in meters, that the light is allowed to travel. Used for lightmapping optimiziations.

    Direction | Vec3

    The direction of the light, if used as a spotlight. If you want a point light, set this to a random unit vector like {0, 1, 0}.

    Exponent | Float32

    Spotlight exponent. Higher values means narrower spot. Set this value to 1.0 to get a point light.

    Messages


    There are none.

    Signals


    There are none.

    ================================================ FILE: docs/src/documentation/entities/marker.html ================================================

    Marker


    This entity doesm't do anything.

    Fields


    There are none.

    Messages


    There are none.

    Signals


    There are none.

    ================================================ FILE: docs/src/documentation/entities/player.html ================================================

    Player


    Adds a player. The entity will accept keyboard inputs and move about.

    Since this entity type doesn't get registered and has no fields, it can't be placed in the level editor. Instead, it should be created through code.

    Fields


    There are none.

    Messages


    There are none.

    Signals


    There are none.

    ================================================ FILE: docs/src/documentation/entities/sound.html ================================================

    Sound


    This entity can be placed in a level to play back sounds.

    It also has a constructor so that it can be created thorugh code. If created this way, the entity will yeet itself once it finishes playing back the sound. This way you can play a sound effect and then forget it.

    Fields


    Flags | Int32

    Bitmask, see flags section.

    Sound | Name

    Name of the sound that the entity will play back.

    Volume | Float32

    How loud the sound will be. From 0.0 to 1.0.

    Flags


    1 | SOUND_LOOPING

    The sound will loop after finishing.

    2 | SOUND_START_ON_LOAD

    The sound will begin playback as soon as the entity is loaded. Useful for ambient sort of environmental sounds

    Messages


    Toggle | TOGGLE

    If the sound is being played, it will be stopped. If it is stopped, it will start again.

    Kill | KILL

    This yeets the entity.

    Start | START

    Starts playing back the sound.

    Stop | STOP

    Stops playing back the sound.

    Signals


    There are none.

    ================================================ FILE: docs/src/documentation/entities/staticwobj.html ================================================

    Static World Object


    This entity is used for worldspawns. To make parts of the level out of.

    Fields


    Model | Name

    Name of both of the 3D model and the collision model.

    Lightmap | Name

    Name of the lightmap material.

    Messages


    There are none.

    Signals


    There are none.

    ================================================ FILE: docs/src/documentation/entities/trigger.html ================================================

    Trigger


    This entity can be used to detect collisions with other entities.

    Fields


    Flags | UInt32

    Bitmask, see flags section.

    Collision Mask | UInt32

    The collision mask of the trigger.

    Model | Name

    Name of the collision model that the trigger will use.

    Flags


    1 | TRIGGER_DISABLED

    This will disable the trigger from being triggered.

    Messages


    Lock | LOCK

    Disables the trigger.

    Unlock | UNLOCK

    Enables the trigger.

    Signals


    Activate | ACTIVATE

    Fired when an entity collides with the trigger volume.

    ================================================ FILE: docs/src/documentation/entities.html ================================================

    Entities

    The framework comes with some pre-made enitites. These are very nice, you should try using them. If you want, you can extend them by subclassing them and building a new entity on top of them.

    ================================================ FILE: docs/src/documentation/entitydefinition.html ================================================

    Entity Definition


    It's the .entdef file in the data directory.

    // TODO: document ================================================ FILE: docs/src/documentation/extensions/camera.html ================================================

    Camera


    All camera types basically do a bit of logic and then come up with a position and a rotation. Then they pass them over to the Render system to and use them to set the View and pass them to the Audio system to set the listener.

    Programming in C++


    Camera Interface

    #include <extensions/camera/camera.h>
    API documentation page.

    First Person Camera

    #include <extensions/camera/firstperson.h>
    API documentation page.

    Here's how to do a first person camera.

    // here will be our camera
    Ext::Camera::FirstPersonCamera* camera = nullptr;

    // this will be our player
    Entity* player = Entity::Find("player");

    // let's make a new camera
    camera = new Ext::Camera::FirstPersonCamera;

    // this attaches the camera to the player
    camera->SetFollowing(player);

    // this will allow rotation of the camera
    // by moving the mouse cursor
    camera->SetMouselook(true);

    // this will rotate the player with the
    // camera. useful if player has a visible
    // 3D model
    camera->SetRotateFollowing(true);

    // this will position the camera half a meter
    // above the player entity's middle point
    camera->SetFollowingOffset({0.0f, 0.5f, 0.0f});

    // this turns on the camera
    camera->SetActive();

    There are other camera types, but they are sort of unfinished.

    ================================================ FILE: docs/src/documentation/extensions/kitchensink/animationtable.html ================================================

    AnimationTable


    This is what is called a hierarchical animation blend space tree graph node automata. It basically lets you define how an AnimationComponent should switch between animations, and which animations it can and which ones it cannot play back at the same time.

    Key concepts


    State

    When in a given state, the component will play back an animation. When the state is switched, it will perform the configured transition, such as a fade-in or fade-out.

    State space

    The state space holds a They are organized hierarchically, and higher state spaces can override lower state spaces with their state.

    For example, a character could have a state space for torso and for legs, both of which could be parented to a full body state space. It could then play back animations on the torso and legs seperately, but sometimes it is easier to create an animation for the armature together, like when climbing a ladder, so then a state could be changed in the full body space and it would override the animations of torso and legs.

    Transition

    When a transition between two states occurs, the animations have to be switched. A transition determines how this occurs. It allows to configure fade-ins, fade-outs and their durations.

    Programming in C++


    I still haven't finalized the API and debugged everything, so it's not finished yet.

    ================================================ FILE: docs/src/documentation/extensions/kitchensink/soundtable.html ================================================

    SoundTable


    A sound table contains many-to-many mappings from a key to a name of a sound. This allows to associate sounds with a certain category.

    For example, Button entity has a sound table parameter. When it opens or close, it will look up the sounds mapped to the SOUND_OPEN and SOUND_CLOSE keys respectively. If it finds a sound that is mapped to a give key, it will play it back.

    Since there can be multiple sounds mapped to the same key, if there arises such a situation when a sound is being looked up and there are multiple sounds associated with the given key, a random sound that is mapped to said key will be returned.

    Programming in C++


    #include <extensions/kitchensink/soundtable.h>
    API documentation page.

    Very simple API. It was supposed to be very simple, so it is such.

    SoundTable* table = SoundTable::Find("table");

    table->AddSound(SOUND_OPEN, "open1");
    table->AddSound(SOUND_OPEN, "open2");
    table->AddSound(SOUND_CLOSE, "close1");

    // this variable will be set to "close1"
    name_t sound = table->GetSound(SOUND_CLOSE);

    // this will play back either "open1" or "open2"
    table->Play(SOUND_OPEN);
    ================================================ FILE: docs/src/documentation/extensions/kitchensink.html ================================================

    Kitchensink


    This is where I put all of the random stuff that I feel like a lot of users could maybe not actually want to use.

    Putting this in an extension allows you to skip compiling this part of the framework.

    ================================================ FILE: docs/src/documentation/extensions/menu.html ================================================

    Menu


    The menu system provides a menu dialog framework and implementations of a couple of useful menus.

    Debug Menu


    The debug menu provides a way to view the list of all loaded worldcells, all loaded entities, select entities by mouse picking, view worldcell settings and change them, view entity settings, send messages to entities, emit events, visualize all of the events and messages being sent through their queues.

    By default it is accessible by pressing the ~, aka `, aka the tilde key.

    Settings Menu


    The settings menu provides a way to change various engine settings, such as FOV, key bindings, screen resolution, fullscreen mode, GUI scale and others.

    By default it is accessible by pressing the Esc key and then selecting Settings in the escape menu.

    ================================================ FILE: docs/src/documentation/extensions/scripting.html ================================================

    Scripting


    This extension contains the bindings for various scripting languages, and by various I mean Lua. We only have Lua.

    ================================================ FILE: docs/src/documentation/extensions.html ================================================

    Extensions

    Extensions are parts of the framework are optional parts of the framework. Most extensions are various useful tools, game mechanics, integrations with other services.

    Currently available extensions are:

    • Camera
    • This extension contains implementations of first-person, third-person and other cameras for various viewpoints. They support effects like tilting, view bobbing and screen shakes.

    • Kitchensink
    • This extension contains random game mechanics and other useful tools that didn't fit in other extensions.

    • Menu
    • This extension contains a framework for creating menus, as well as implementation of a debugging menu, a settings menu and an escape/pause screen menu.

    • Scripting
    • This extension contains integrations with various scripting languages. Curently the only scripting language that is fully integrated is the Lua scripting language.

    ================================================ FILE: docs/src/documentation/framework/async.html ================================================

    Async


    The Async system lets you do stuff... asynchronously. On a separate worker thread. This meant that the main logic thread can be freed up from certain computations and in general makes the framework go vroom vroom.

    Currently the async system supports Resource loading. In the future it will get some more functionality, but it's only resources for now.

    To use it, you need to initialize the system. This will start up the worker threads. The system needs to be updated in the main loop and then shut down.

    Unfortunately, it seems like multithreading still doesn't work in webassembly builds, so you will have to do resource loading entirely from the main thread.

    Resource streaming


    Let's take the Model resource as an example. It is derived from the Resource class and implements its API.

    Most of the time while loading the Model is spent retrieving it from the disk and parsing it. All of the relevant logic is implemented in the LoadFromDisk() method. This method will be called from the worker thread.

    Due to a quirk in the OpenGL API, we need to perform all of the data uploads to the GPU from the main thread. The relevant logic for this is implemented in the LoadFromMemory() method.

    Example



    This is what happens when you call the SetModel() method on a RenderComponent and if the Model isn't loaded yet.

    What happens when you assign a Model to a RenderComponent?

    1. The RenderComponent will check if the Model is loaded. If it is not, it will pass the Model to the Async system, which will add it to the disk loading queue.
    2. The worker thread will pop the Model from the disk loading queue and will call its LoadFromDisk() method. The method will load the .stmdl or .dymdl file associated with the Model, parse it into binary format and build up an AABB tree. The worker will then add the resource to the memory loading queue.
    3. The main thread will pop the Model from the memory loading queue and will call its LoadFromMemory() method. The method will pass the binary model data to the Render API, which in turn will upload the model data to the GPU memory. The memory containing the binary data will then be free. Finally the Model will be added to the finishing queue.
    4. The main thread will pop the Model from the finishing queue. It will then check which EntityComponent requested the resource to be loaded. It will then notify our RenderComponent about the loaded resource.
    5. The RenderComponent will then add the loaded 3D model to the scene. It will then be eligible to be rendered to the screen.

    Programming in C++


    #include <framework/async.h>
    API documentation page.


    const size_t thread_count = 1;

    Async::Init(thread_count);

    // main loop
    while (true) {

        // the worker thread won't start on webassembly
        // builds, so we just do that part on the
        // main thread

    #ifdef __EMSCRIPTEN__
        Async::LoadResourcesFromDisk();
    #endif

        Async::LoadResourcesFromMemory();
        Async::FinishResources();
    }

    Async::Yeet();

    It is possible to request a resource to be loaded by calling the Async::RequestResource() function, but a better way would be by using the ResourceProxy smart pointer, which will not only automatically request a resource to be loaded, but will also automatically manage reference count.

    If you want to create a progress bar which displays the process of resource loading, you can use Async::GetWaitingResources() to get the number of resources being processed by the Async system.

    ================================================ FILE: docs/src/documentation/framework/core.html ================================================

    Core


    This is the main system of the framework. It keeps track of the main loop, provides ID number generation services and keeps track of the framework version.

    Key concepts


    Frame

    Each cycle of the main loop is called a frame. It is called that because during each loop you render a single frame of graphics.

    Tick

    There are 60 ticks in a second. If you have a 60hz monitor and you have turned on vsync or a frame limiter, then a tick will be the same as a frame.

    This concept allows you to create applications as if they were always run at 60 frames per second.

    Programming in C++


    #include <framework/core.h>
    API documentation page.

    Every application created with the framework needs to initialize and update the core system.

    Core::Init();

    // main loop
    while (true) {
        Core::Update();
    }

    That was very simple.

    id_t id = GenerateID();

    uint32_t ticks = GetTick();

    double time = GetTickTime();
    float delta_time GetDeltaTime();

    After the previous bit of code is executed:

    • The variable id will contain a new, unique ID number.
    • The variable ticks will contain the number of ticks which have elapsed since the initialization of the application.
    • The variable time will contain the time, in seconds, that has passed since the initialization of the application.
    • The variable delta_time will contain the time, in seconds, that has passed between the start of this and the start of the previous frame.
    ================================================ FILE: docs/src/documentation/framework/entity.html ================================================

    Entity


    Entities are one of the main concepts of the framework. An entity is a thing. Anything. A part of the level geometry, an interactable object, a pickup or an NPC.

    Entities are also the things that receive messages and the things that you place down in the level editor.

    Most of your entities will probably be placed in WorldCells, which are the basic level and streaming units of your virtual world.

    Re-usable parts of the entity logic are usually placed into EntityComponents and entities are then assembled out of them.

    Key concepts


    ID

    Each entity gets its own unique ID number. You can assign an ID number to an entity, or the framework can generate one for you. No two entities can have the same ID number, since then the framework will assume that one of the entitie is a copy and will yeet it.

    Name

    Entities can be given names, but unlike an ID, these are optional. This is also how you will refer to specific entities most of the time.

    Type

    Each entity has a type. It determines its behavior and what kinds of properties it has.

    Properties

    Each entity has properties. These can be numbers, strings, vectors or other kinds of types. An entity's properties can be edited in the level editor.

    They are also called parameters, fields and entity data. Mostly because I keep forgetting how this concept is called.

    Location/Rotation

    Each entity gets a rotation and a location. This transform is used to determine in which WorldCell the entity is located in and when to load and unload it

    Loading/Unloading

    When an entity is constructed, either through code or from a record in a WorldCell file on disk, it starts out unloaded and has no EntityComponents attached to it. It just sits there, doing nothing.

    When an entity is loaded, either when its WorldCell is loaded or on some other event, it will construct its EntityComponents and pass its properties to them.

    When unloaded again, it will pack up and yeet all of its EntityComponents. This saves on computational resources – it allows the framework to process only a small part of all of the entities at the same time.

    Programming in C++


    #include <framework/entity.h>
    API documentation page.

    If you want to create your own entity type, a good place to start would be by copying the Marker entity.

    The other way would be to create a subclass of the Entity class and then implement all of its virtual methods. If you want the Entity to be loadable from a level file, you also need to add an entity type registration static method. Additionally, you could add the type to your project's entity definition file, so that the level editor and other utilities can process your entity type.

    To interact with an entity, you first need to get a pointer to it. You can get the pointer by using the Find() static method, which can find an entity either by its ID number, or by its name.

    Entity* entity1 = Entity::Find("bingus");
    Entity* entity2 = Entity::Find(42069);

    if (!entity1) {
        printf("Entity bingus doesn't exist!");
    }

    It is also possible to query its transform and to change it.

    vec3 position = entity->GetLocation();
    quat rotation = entity->GetRotation();

    position += vec3(0.0f, 1.0f, 0.0f);

    entity->SetLocation(position);

    There are a lot of other methods for the Entity class. Check the API documentation for them.

    Scripting in Lua


    The Lua API is basically the same as the C++ API.

    local bingus = tram.entity.Find("bingus")

    if bingus == nil then
        print("Entity bingus doesn't exist!")
    end

    local position = bingus:GetLocation()
    local rotation = bingus:GetRotation()

    position = position + tram.math.vec3(0.0, 1.0, 0.0)

    bingus:SetLocation(position)
    ================================================ FILE: docs/src/documentation/framework/entitycomponent.html ================================================

    EntityComponent


    EntityComponents are re-usable parts for assembling Entities. Need to display a 3D model for an entity? Use a RenderComponent. Need to add entity to the physics simulation? Use a PhysicsComponent. Have an entity that simulates a frog and want to add frog behavior to other entities? Refactor the frog code into a FrogComponent.

    Most components are created in a way that you can use them without attaching them to an entity, so you can use a RenderComponent to render some UI elements, or a skybox or something like that, but in general they are used for constructing entities.

    Components can have dependencies on Resources. This can be automatically tracked.

    Unlike entities, which can be repeatedly loaded and unloaded, once a component is initialized, it can only be deleted. After that it will have to be reconstructed and reinitialized.

    Programming in C++


    #include <framework/entitycomponent.h>
    API documentation page.

    Components work something like this:

    1. The component class object is constructed.
    2. The component is fed parameters by calling methods on it.
      • If the parameter is a Resource and it is unloaded, then it gets added to the Async loader queue.
      • In such a case, the component will remember that it is waiting for a resource.
    3. The component is initialized by calling the Init() method.
    4. If the component is waiting on any resources, then it will just do nothing and will wait for them to be ready.
    5. The component is started by either calling its own Start() method, if it isn't waiting on any resources, or by the Async system, once the resources on which the component is waiting have been loaded.
    6. The component does its component stuff. Some parameters may be changed by getting their methods called.
    7. The component class gets destructed.

    None of the constructors have any parameters – this is mostly due to the fact that I feel like the initialization code for components with a lot of parameters, and therefore very long constructors looks incredibly awful.

    If you want to create your own component, you can copy the header and implementation files of the TemplateComponent.

    Component<TemplateComponent> template;

    // constructs a new TemplateComponent
    template.make();

    // initializes it
    template->Init();

    // destructs it
    template.clear();

    The Component smart pointer class ensures that it will be constructed into the correct Pool. This is required for some components to work properly, like the AnimationComponent, which will not get updated if it isn't constructed in the correct pool.

    ================================================ FILE: docs/src/documentation/framework/event.html ================================================

    Events


    Events are the main form of decoupled data interchange in the framework. People with too much time will recognize it as the «Observer» design pattern.

    The main emitter of events is the UI system, which emits an event for every keypress and every mousemove.

    There's also the tick and frame events, which are emitted by the Core system for each tick and frame respectively.


    Potato frog is emitting some events and potato cat is aware of it, since he has an Event Listener.

    Key concepts


    Event

    It is like a thing that has happened. Each event has a type, a subtype and it contains information about its emitter and has some optional data that can be attached to the event.

    Listener

    It allows the event system to keep track of all of the other systems, entities and components that are interested in an event.

    After a registrant has registered an event listener for a specific event type, the event system will begin dispatching events of said type either to a callback function or to an event handler method of the registrant.

    Event types


    In order to use an event, you need to know what that event is and what it does. What it means. What does it mean?

    These are the events which I have created, which means that I can tell you what they do. If you use someone else's events. you need to ask them what they do. If you have created the events yourself, you will need to ask yourself what you meant by them. This might be difficult, even the greatest philosophers have struggled to understand themselves.

    Keypress | KEYPRESS

    Emitted every frame that a key is being held down. The subtype field of the event contains a UI::KeyboardKey enumeration number, depending on which key was pressed.

    Keydown | KEYDOWN

    Same as keypress, except that the event is emitted only on the frame on which the key was pressed down for the first time.

    Keyup | KEYUP

    Same as keypress, except that the event is emitted only when the key is released.

    Keychar | KEYCHAR

    Used for text input. Emitted whenever a keyboard key used for text input is pressed. The subtype field contains a UTF-16 encoded codepoint of the text character.

    Cursorpos | CURSORPOS

    Emitted whenever the mouse cursor pointer position changes. No data.

    Frame | FRAME

    Emitted every frame. It's very useful when you want to execute some code every frame – simply register a listener with a callback function containing your code.

    Tick | TICK

    Very similar to the frame event, the main difference being that this event is independent of them frame rate – every second exactly 60 tick events will be emitted.

    Selected | SELECTED

    Emitted by entities which are selected. Data pointer points to a Value which contains a name, which represents the type of the entity. This event can be used for displaying information about the selected entity, i.e. actions which can be performed on the entity.

    Look at | LOOK-AT

    Emitted by entities which are looking at something. Data pointer points to a Value which contains a quaternion with the look direction of the entity.

    Last event | LAST_EVENT

    This is not actually an event.

    Programming in C++


    #include <framework/event.h>
    API documentation page.

    Let's emit our own event!

    const name_t m_type = "mongus";

    Event event;

    event.type = Event::SELECTED;
    event.subtype = 420;
    event.poster_id = Entity::Find("mongus")->GetID();

    event.data = Event::AllocateData<Value>(m_type);

    Event::Post(event);

    The Event::AllocateData() static method allocates a bit of memory for use with the event data pointer. This allocated memory gets automatically released when all of the emitted events have been dispatched.

    There are the Event::AddListener() and the Event::RemoveListener() static methods to add and remove event listeners respectively, but there is also a smart pointer type which will automatically remove the listener when deleted.

    EventListener keypress;

    // creates an event listener
    keypress.make(Event::KEYPRESS, this);

    // removes an event listener
    keypress.clear();

    If you want to, you can also create new event types.

    event_t frog_event = Event::Register("frog-event");

    Scripting in Lua


    Emitting an event is very similar to how it is done with the C++ API. The main difference is that we can't attach arbitrary data to the event, instead we are limited to floating point numbers, integers and names, which is the same limitation as with Signals.

    event = {}
    event.type = tram.event.GetType("my_fancy_event")
    event.subtype = 420
    event.poster = tram.entity.Find(mongus):GetID()
    event.data = "mongus"

    tram.event.Post(event)

    Registering events and adding event listeners is also similar.

    local frog_event = tram.event.Register("frog-event")

    tram.event.AddListener(frog_event, function(event)
        type_name = tram.event.GetName(event.type)
        subtype = event.subtype
        poster = tram.entity.Find(event.poster)
        data = event.data
        print("Event received:",
              type_name,
              subtype,
              poster:GetName(),
              data)
    end)
    ================================================ FILE: docs/src/documentation/framework/file.html ================================================

    File


    This is a file abstraction that I made. I made it because the filestream of the C++ standard library, altough possesing a very je ne sais quoi interface, is way too slow.

    Currently it can only be used to load text files and parse them from disk.

    I will probably add some more stuff to it in the future, like accessing files over HTTP instead of just from disk, or maybe loading them from .zip files.

    Programming in C++


    #include <framework/file.h>
    API documentation page.

    This is how you can parse in some text files.

    File file("my-text-file.txt", MODE_READ);

    printf("num1: %f\n", file.read_float32());
    printf("num2: %i\n", file.read_int32());

    // read until end of file
    while (file.is_continue()) {
        printf("%s\n", file.read_name());
    }

    Check render/model.cpp and render/sprite.cpp for more examples of how you can use this.

    ================================================ FILE: docs/src/documentation/framework/graph.html ================================================

    Graph

    Not fully implemented yet.

    ================================================ FILE: docs/src/documentation/framework/gui.html ================================================

    GUI


    The GUI system provides GUI widgets.

    Unlike inferior GUI systems, which use objects (Win32, etc.) or classes (Java Swing, etc.), this GUI system is immediate mode. Which means that instead of creating an object, you just call a function once per frame.

    Key concepts


    Widget

    GUI element, i.e. buttons, text boxes, checkmarks, radio buttons, etc.

    Frame

    Frames are used to position widgets. They are arranged in a stack. When you push a frame, all of the consequent widgets will be drawn inside that frame. After you are done with a frame, you need to pop it from the frame stack.

    Immediate mode

    This basically means that you call function instead of creating objects to manage GUI widgets. For example, the function for creating a button is GUI::Button(). Calling this function will render a button on the screen. This function returns the value true if it has been clicked on.

    Pushing frames


    Frames can be created using absolute coordinates, or pushed relative to the underlying frame. For example, pushing frame 100 pixels from FRAME_TOP will create a frame with the topmost 100 pixel rows from underlying frame. Switching it to FRAME_TOP_INV will skip the topmost 100 pixel rows and select everything below it.


    This is how we push the frames.

    Very simple, very easy, very nice.

    Fonts


    Fonts are basically just sprites that have been registered

    For each character that is rendered, its character code in the encoding is used as an index to select a frame from the spritesheet.

    The fonts can be used to draw text. They are also used for widgets themselves.

    If you want to use some pre-made widget and text fonts, then you can use the Menu extension. It contains some fonts that you can use.

    Widgets


    Glyph

    Draws a single glyph from the font spritesheet.

    Text

    Draws some text.

    Button

    Draws a clickable button. The button function returns true if it has been clicked.

    Radio button

    Allows selection between several exclusive choices. The choices are represented by an index.

    Checkbox

    Allows a boolean yes/no type of selection.

    Slider

    Allows selecting a floating point value by dragging a slider.

    Textbox

    Allows text input.

    Programming in C++


    #include <framework/gui.h>
    API documentation page.

    The GUI system needs the Render and the UI systems to be initialized before being initialized itself.

    GUI::Init();

    // main loop
    while (true) {
        // GUI widgets go here
        GUI::Update();
    }

    Pushing frames is easy, but you need to remember to pop them afterwards.


    GUI::PushFrameRelative(FRAME_LEFT, 150);
        // GUI widgets go in here
    GUI::PopFrame();

    GUI::PushFrameRelative(FRAME_LEFT_INV, 150);
        GUI::PushFrameRelative(FRAME_INSET, 10);
            // GUI widgets go in here
        GUI::PopFrame();
    GUI::PopFrame();

    Here's how to use the various widgets.


    enum {
        ICON_FROG,
        ICON_TOILET
    };

    // registering a new font
    Sprite* icon_sprite = Sprite::Find("font-icon"); font_t FONT_ICON = RegisterFont(icon_sprite);

    // drawing a glyph from a font
    GUI::Glyph(FONT_ICON, ICON_FROG);

    // drawing some text
    GUI::Text(FONT_BOLD, "Hello, world!", TEXT_LEFT);

    // buttons
    if (GUI::Button("Click here!")) {
        printf("Button clicked!\n");
    }

    enum {
        CHOICE_NONE,
        CHOICE_A,
        CHOICE_B
    };

    uint32_t selected = CHOICE_NONE;

    // radio buttons
    GUI::RadioButton(CHOICE_A, selected, "Choice A");
    GUI::RadioButton(CHOICE_B, selected, "Choice B");

    bool checked = false;

    // checkbox
    GUI::CheckBox(checked, "Check to select.");

    float value = 0.0f;

    // slider
    GUI::Slider(value);

    const size_t text_length = 100;
    static char text[text_length] = "hello!";

    // textbox
    GUI::TextBox(text, text_length);

    // new line
    GUI::NewLine(LINE_NORMAL);

    Scripting in Lua


    Not yet implemented.

    ================================================ FILE: docs/src/documentation/framework/language.html ================================================

    Language


    The language system allows for localization of text.

    UTF-16 support is planned, but currently the only supported text encoding is Latin 7/Windows 1257. It supports these languages:

    • Estonian
    • Latvian
    • Lithuanian
    • Finnish
    • English
    • German
    • Polish
    • Slovene
    • Norwegian
    • Swedish
    • Danish

    File format


    Curently the format has no header. It consists of lines, they start with the name of the string, a space and then the rest of the line is the string.

    Example.

    mongus-ask Hello! Where is Mongus?
    mongus-answer Very busy. Come back later!

    The language files are stored in the /data/ directory, the file extension is .lang.

    Programming in C++


    #include <framework/language.h>
    API documentation page.

    // loading a language file
    Language::Load("english");

    // accessing a string
    printf("%s\n", Language::Get("hello"));
    ================================================ FILE: docs/src/documentation/framework/loader.html ================================================

    Loader


    The loader is supposed to help with automatically loading and unloading WorldCells. Take a look at the Player entity to see how to use them.

    ================================================ FILE: docs/src/documentation/framework/logging.html ================================================

    Logging


    The logging system provides logging.

    Currently all logs are just dumped to standard output. In the future I'll add in some more logging stuff, like saving logs to a file.

    It's possible to assign the system from which the logging statement originates, as well as the logging statements severity. Logs then can be filtered based on the system and severity.

    Severities


    Info | SEVERITY_INFO

    For very verbose debugging purposes. Useful to dump anything and everything. Filtered out by default.

    Warning | SEVERITY_WARNING

    For things that should be looked at, such as the use of deprecated functionality, missing files and such.

    Error | SEVERITY_ERROR

    For things that are ungood, but can be recovered from, such as errors with file formatting, incorrect usage of functionality and such.

    Doubleplus Ungood Error | SEVERITY_CRITICAL_ERROR

    For errors that can't be recovered from. Useful to log some final data before aborting the application.

    Programming in C++


    #include <framework/logging.h>
    API documentation page.

    // filter out everything coming from the Platform
    // system that has a severity which is lower than
    // error, i.e. infos and warnings.
    SetSystemLoggingSeverity(System::SYSTEM_PLATFORM,
                             SEVERITY_ERROR);

    float number = 420.0f;
    const char* string = "mongus";

    // will log: mongus has 420 bananas
    Log("{} has {} bananas.", number, string);

    // will log: hi!
    // but due to our filtering settings this will
    // be filtered out
    Log(System::SYSTEM_PLATFORM, SEVERITY_INFO, "hi!");
    ================================================ FILE: docs/src/documentation/framework/math.html ================================================

    Math


    This part of the framework contains math stuff. Since we use the glm library, we don't really need to create any of our own math types, but I alisased the vector and matrix types into the tram namespace in order to increase the readability of the source code.

    There's also a couple of constants, which have to do with the coordinate system that we're using, i.e. DIRECTION_FORWARD, DIRECTION_SIDE and DIRECTION_UP.

    Other than that, this part of the framework contains a couple of random math functions which the glm library doesn't have. At least in C++ part of the framework.

    Since glm is a C++ only library, I re-implemented some of the vector types in Lua, so that they can be used for scripting.

    Scripting in Lua


    Creating a vector and operations on a vector

    vector = tram.math.vec3(420.0, -42.0, 4.20)

    vector = vector + tram.math.vec3(69.0, -69.0, 6.9)
    vector = vector + 69.0

    print("My vector:", vector)

    Creating a quaternion from euler angles and operations on it

    rotation = tram.math.quat(vector)

    rotation = rotation * rotation

    Rotating a vector by a quaternion

    vector = rotation * vector ================================================ FILE: docs/src/documentation/framework/message.html ================================================

    Messages


    Messages are the main way entities communicate amongst themselves.

    They allow for greater decoupling. Entities don't have to know about each other's capabilites or any other characteristics, they only need to know about the types of messages.

    To allow effective communication between enities, we only need to define what a certain message type means. For this purpose the framework includes many different and useful message types with predefined meanings.


    Potato cat is sending potato frog a Message.

    Message types


    None | NONE

    Dummy message type, doesn't mean anything.

    Ping | PING

    Generic message type. Can be used to probe entities. When pinged, certain entities will emit an event, or print text to console.

    Move pick up | MOVE_PICK_UP

    Was used to create crate stacking mechanics for immersive sims. Not used anymore, since I added better techniques for the coordination of crate stacking.

    Open | OPEN

    Used to tell doors and similar entities to open. More generally, could be used for entities with two distinct states to assume the non-default state.

    Close | CLOSE

    Used to tell doors and similar entities to close. More generally, could be used for entities with two distinct states to assume the default state.

    Lock | LOCK

    Used to tell doors and other entities with some kind of opening and closing mechanism to stop opening. More generically could be used to tell enitities to ignore certain inputs, such as the activation messages.

    Unlock | UNLOCK

    Similar to locking message, but in reverse.

    Toggle | TOGGLE

    Similar to open and close messages. Used to tell entities to toggle their state, that is, if closed, to open, or if open, to close.

    Kill | KILL

    Used to tell entities to yeet themselves.

    Trigger | TRIGGER

    Used to pass an arbitrary message to an entity. The message data field will then contain a pointer to a Value, usually with the type of name.

    For example, Quests from the kitchensink extension will create a quest entity, so that they can receive messages from Signals. Since quests have triggers, this message is used to trigger them.

    Start | START

    Similar to open message, but used for entities that have some kind of continuos action. For example, the Sound entity uses this message to begin playback of its associated sound.

    Stop | STOP

    This type is the counterpart to the start message. It tells entities to stop their action. For example, the Decoration entity uses this message to stop playing its animation, if it has one.

    Activate | ACTIVATE

    Sent every tick from an agentic entity. Generally meant to be used when a player presses the keyboard key associated with the Use keyboard action while facing an entity.

    Activate Once | ACTIVATE_ONCE

    Similar to Activate message, but meant to be sent only for the first tick of the activation.

    Select | SELECT

    Used to tell an entity that it is being selected. This could be when a player is facing in the direction of the entity, or when the player has placed the mouse cursor over said entity.

    In response, most entities will emit a Selected event.

    Set Progress | SET_PROGRESS

    Used to set the progress of the action that the entity is performing. The data pointer of the message should be set to a Value. Usually it will be a Float32 value in the range from 0.0f to 1.0f.

    For example, the Button entity will use it to set its opening/closing state. A value of 0.0 will close it completely, a value of 1.0 will open it completely and a value of 0.5 will set it to being half-open.

    Set Animation | SET_ANIMATION

    Used to set the animation of an entity. The data pointer will then be set to a Value with the type of name. The name will be the name of the animation to which this entity should switch.

    Last Mesasge | LAST_MESSAGE

    Not actually a message type.

    Programming in C++


    #include <framework/message.h>
    API documentation page.

    The API for message sending is nearly identical to that of the Event.

    Message msg;

    msg.type = Message::PING;
    msg.sender = this->GetID();
    msg.receiver = Entity::Find("mongus")->GetID();
    msg.data = Message::AllocateData<Value>(420);

    // this will ping mongus
    Message::Send(msg);

    // we can also delay the message, pinging
    // mongus 69 seconds in the future
    msg.data = nullptr;
    Message::Send(msg, 69.0f);

    The Message::AllocateData() static method will allocate memory for the message's data. This memory will get automatically released after all of the messages get dispatched.

    Unfortunately, due to certain limitations, this allocation works only for messages that get sent without a delay. This will be remedied in the future.

    Just like with events, we can register our own message types.

    message_t type = Message::Register("frog-message");

    Scripting in Lua


    Essentially the same as in C++.

    msg = {}

    msg.type = tram.message.PING
    msg.sender = 0
    msg.receiver = tram.entity.Find("mongus"):GetID()
    msg.data = 420

    tram.message.Send(msg, 69.0)
    ================================================ FILE: docs/src/documentation/framework/navmesh.html ================================================

    Navmesh

    Not fully implemented yet.

    ================================================ FILE: docs/src/documentation/framework/path.html ================================================

    Path

    Not fully implemented yet.

    ================================================ FILE: docs/src/documentation/framework/resource.html ================================================

    Resources


    A resource is any kind of thing that you want to you want to be streamed in from the disk or any other location.

    Resources can be loaded directly, or they can be passed to the Async system to be streamed in.

    Some resource types included in the framework are Models, Materials and Sounds.

    Key concepts


    Name

    Each resource has a unique name. This is how resources are identified. Usually the name references the name of a file on disk, but does not always have to be so.

    The uniqueness only applies to resources of the same type. Different types of resources can have a resource with the same name.

    References

    This is how the framework keeps track of which resources are being used and which resources can be freed. Used resources are not freed.

    Whenever an EntityComponent or any other user starts using a resource, they should add a reference to the resource, in order to mark it as being used. After the usage of the resource ceases, the reference should be removed.

    If you want a resource to be always availabe, you can add a reference to it. This way it will never be freed and you won't have to wait for it to be streamed in.

    Status

    The status of the resource keeps track of whether the resource needs to be loaded or whether it is ready for usage.

    Statuses


    Unloaded | UNLOADED

    The resource has not been loaded from disk.

    Loaded | LOADED

    The resource has been loaded form disk, but needs further processing. For example, graphics resources use this status for when they have been parsed from the disk, but haven't been uploaded to the GPU memory, since this step has to happen on the main thread, not the resource streaming thread.

    Ready | READY

    The resource has been fully loaded and is ready for use.

    Load fail

    While not implemented as a status (it was at one point, but the API was not that neat to use), the load fail is flag that keeps track of whether the resource was successfully loaded.

    For example, the resource could be considered as having failed to load if the file associated with the resource was missing, or if it the format of the file was determined to be invalid.

    Programming in C++


    #include <framework/resource.h>
    API documentation page.

    If you want to use a resource, you can use the ResourceProxy class. It is a type of smart pointer, which will not only automatically keep track of references, but also automatically pass the resource to the Aync system for streaming, if the resource is not loaded already.

    ResourceProxy<Material> material;

    material.set(Material::Find("mongus"));

    // if the mongus material hasn't been loaded yet,
    // it will now have been added to the Async
    // resource streaming queue

    if (material->GetStatus() == Resource::READY) {
        printf("width: %f height: %f\n",            material->GetWidth(),            material->GetHeight());
    }

    To create a resource, you will need to create a subclass of the Resource class.

    class NewResource : public Resource {
    public:
        NewResource(name_t name) {
            Resource::Resource(name);
        }

        void LoadFromDisk();
        void LoadFromMemory();
        void Unload();
        
    private:
        int* data;
    };

    After that, you will need to implement the resource loading methods, as well as a resource cleanup method.

    void NewResource::LoadFromDisk() {
        this->data = data_from_disk;

        if (this->data == bad_data) {
            this->load_fail = true;
            this->data = dummy_data;
        }

        if (requires_further_processing) {
            this->status = LOADED;
        } else {
            this->status = READY;
        }
    }

    void NewResource::LoadFromMemory() {
        main_thread_processing(this->data);

        this->status = READY;
    }

    void NewResource::Unload() {
        yeet_data(this->data);
    }

    If the resource can't be located from the disk, you should generate some dummy data and check the load_fail flag. For example, if the Material resource can't load the texture image associated with that material, it will generate a checkerboard pattern texture image.

    ================================================ FILE: docs/src/documentation/framework/script.html ================================================

    Scripting


    The script system implements the scripting API. It allows you to call scripts from C++ without being concerned with which scripting language the script is actually implemented in.

    Currently the only scripting language bindings that have been implemented are for the Lua language.

    All scripts are located in the /scripts/ directory.

    Programming in C++


    #include <framework/script.h>
    API documentation page.

    First a script needs to be loaded. When a script is loaded from disk, it will be automatically executed.

    Script::LoadScript("frog");

    You can set global variables in the scripting context and retrieve global variables from it.

    Script::SetGlobal("frog_status", 420);

    value_t frogs = Script::GetGlobal("frog_count");

    You can also register in C++ function which can be called from the scripting language. For example, this function, named frog, will accept a single integer parameter, which it will print to console. It will then return the value true if the integer inputted was 420.

    Script::SetFunction("frog", {TYPE_INT},
                [](valuearray_t array) -> value_t {
        int32_t frog = array[0];
        printf("frog: %i", frog);

        return frog == 420;
    });

    You can also call script functions from C++.

    bool result = Script::CallFunction("frog", {420}); ================================================ FILE: docs/src/documentation/framework/serialization.html ================================================

    Serialization

    Not fully implemented yet.

    ================================================ FILE: docs/src/documentation/framework/settings.html ================================================

    Settings


    The settings system can be used to save your application's settings, as well as automatically parse command line options.

    Programming in C++


    #include <framework/settings.h>
    API documentation page.

    Settings can be registered in two different ways. In the first, the settings system will store the setting for you. In the second, you provide a pointer to the setting and manage the storage yourself.

    // allowing settings to manage the setting
    Settings::Register(420, "frog-count");

    // managing our own setting
    uint32_t frog_count = 420;
    Settings::Register(&frog_count, "frog-count");

    Parsing settings from commandline is very simple.

    int main(const char** argv, int argc) {
        Settings::Parse(argv, argc);

        return 0;
    }

    Settings can also be saved to disk and loaded back up.

    Settings::Save("frog-settings");
    Settings::Load("frog-settings");
    ================================================ FILE: docs/src/documentation/framework/signal.html ================================================

    Signals


    Signals are Message presets that can be attached to entities.

    These can be configured in the level editor, or they can be attached through scripting.

    When the appropriate moment comes, the entity will fire off the signal, which in turn will send off the preset message.

    Signals are named so as to be confusing to Godot users. Similar frameworks call these the entity input/output system.

    Key concepts


    Signal type

    Each signal has a type. This type determines what kind of action cause the signal to fire.

    Any entity can fire off any signal type for any action, but to keep it consistent we have described some signal types.

    Signal firing

    When the appropriate moment comes, the entity fires off the signal. This causes the signal table to look up all message presets associated with the fired signal type. The signal table will then send off all of the relevant message presets.

    While signal message presets can have a value attached to them to be sent as the attached data, during firing the entity can choose to replace the data with something other than what the preset contains.

    Signal table

    Contains all of the signals that are defined for a certain entity. Can be edited in the level editor. On disk each entity's signals are stored in the Worldcell file.

    Signal types


    None | NONE

    This is not a signal.

    Spawn | SPAWN

    Fired when an entity is loaded.

    Kill | KILL

    Fired when an entity is killed.

    Activate | ACTIVATE

    Fired off when an entity is activated. What is considered an activation depends on the entity type.

    Use | USE

    Fired when the entity is activated, that is, receives a Activate Once message.

    Locked Use | LOCKED_USE

    Same as Use, but fired when entity activation fails due to the entity being locked.

    Open | OPEN

    Fired when the entity begins opening.

    Close | CLOSE

    Fired when the entity begins closing.

    End Open | END_OPEN

    Fired when the entity finishes opening.

    End Close | END_CLOSE

    Fired when the entity finishes closing.

    Trigger | TRIGGER

    Fired when the entity is triggered.

    Enter Trigger | ENTER_TRIGGER

    Fired when an entity enters a trigger. Its ID is attached as data in the message.

    Exit Trigger | EXIT_TRIGGER

    Fired when an entity exits a trigger. Its ID is attached as data in the message.

    Progress | PROGRESS

    Fired every tick that an entity is progressing. It replaces the message data with a floating point progress value.

    If the message type attached to this signal is set to Set Progress, then it is possible to synchronize two entities that support progress.

    Last Signal | LAST_SIGNAL

    Not actually a signal.

    ================================================ FILE: docs/src/documentation/framework/stats.html ================================================

    Statistics


    The statistics system collects data. There are two different types of data.

    The first type is time. Each System gets its own time counter. Systems can add time spent in themselves to the counter.

    The second type is the counter counter. It provides arbitrary counting services. For example, the Render system uses this service to count up an approximation of how much GPU memory it is using.

    Programming in C++


    #include <framework/system.h>
    API documentation page.

    For the timings, somewhere in your main loop you need to add a call to the collate function.

    // main loop
    while (true) {
        Stats::Collate();
    }

    After that, you can start counting stuff.

    system_t frog_system = System::Register("frog");

    Stats::Start(frog_system);

    pet_frogs();
    feed_frogs();
    bathe_frogs();

    Stats::Stop(frog_system);

    Stats::Add(RESOURCE_FROG, inital_frogs);
    Stats::Remove(RESOURCE_FROG, escaped_frogs);

    Finally, you can retrieve your counts.

    size_t frogs = Stats::GetStat(RESOURCE_FROG);
    float frog_time = Stats::GetStat(frog_system);
    ================================================ FILE: docs/src/documentation/framework/system.html ================================================

    Systems


    The system concept was created to help identify parts of code.

    This allows, for example, to check if a system has been initialized. This is useful for systems which have a dependency on another system – they can check if the system that they have a dependecy on has been initialized before initializing themselves.

    This concept also allows tracking statistics and filtering logging based on the system from which the logs originate.

    Programming in C++


    #include <framework/system.h>
    API documentation page.

    Some systems are already registered into the framework, but you can register your own systems too.

    system_t frog_system = System::Register("frog");

    // now we can initialize it
    System::SetInitialize(frog_system, true);
    assert(System::IsInitialized(frog_system));
    ================================================ FILE: docs/src/documentation/framework/transition.html ================================================

    Transitions

    Transitions are connections between WorldCells. They consist of a volume, which is defined as a convex hull wrapped around a set of points.

    Check the WorldCell page for more details.

    ================================================ FILE: docs/src/documentation/framework/type.html ================================================

    Type


    There are a couple of types, which the framework supports for values, signals and scripting API.

    Main types


    All of these types are supported by signals, scripting API and level editor.

    Int

    Same as Int32.

    Float

    Same as Float32.

    Name

    Alias for UID.

    All types


    Undefined

    Not actually type. Used when a type is unknown.

    Bool

    Same as Int8.

    String

    Regular C flavored, null-terminated character array string.

    Int8, Int16, Int32, Int64

    Signed integers, which are 8-bit, 16-bit, 32-bit and 64-bit wide respectively.

    UInt

    Same as UInt32.

    UInt8, UInt16, UInt32, UInt64

    Unsigned integers, which are 8-bit, 16-bit, 32-bit and 64-bit wide respectively.

    Float32, Float64

    Floating point numbers, which are 32-bit and 64-bit wide respectively.

    Vec2, Vec3, Vec4

    Arrays consisting of 2, 3 and 4 elements of Float32 numbers respectively.

    Quat

    Same as Vec4, but with rotational semantics.

    ================================================ FILE: docs/src/documentation/framework/ui.html ================================================

    UI


    The UI system deals with the creation of windows and taking in of the input.

    Once initialized, the system will create an operating system window and will start gathering and emitting keyboard and mouse events. It also creates the rendering context.

    Key concepts


    Window

    It's where the graphics are rendered to. Also can be clicked on.

    Keyboard key

    Represents either a key on a computer keyboard, or a button on a mouse. Yes.

    Can either be pressed on released.

    Keyboard axis

    Represents cursor position or scroll wheel scrolling.

    Unlike a keyboard key, an axis has a scalar state.

    Keyboard action

    Unlike a keyboard key, which represents a physical key or something similar, keyboard actions are completely abstract.

    Keyboard keys can be bound to keyboard actions. This means that pressing and releasing the keyboard key will also trigger the keyboard action.

    State

    The UI state determines what the system will do with keyboard and mouse inputs.

    States


    Default | STATE_DEFAULT

    Cursor is hidden. Inputs generate events normally.

    No Input | STATE_NO_INPUT

    Cursor is hidden, but inputs generate no events.

    Flying | STATE_FLYING

    Cursor is hidden, no inputs are generated. Instead, WASD keys can be used to move the Render view directly. Useful for debugging.

    Menu Open | STATE_MENU_OPEN

    Cursor is displayed, but no events are generated.

    Cursor | STATE_CURSOR

    Cursor is displayed. Inputs generate events normally.

    Programming in C++


    #include <framework/system.h>
    API documentation page.

    The basic initializtion and stuff goes something like this.

    UI::Init();

    // main loop
    while (true) {
        UI::Update();
    }

    UI::Uninit();

    As for the rest of it, there is too much stuff to cover all here. Check the API documentation.

    ================================================ FILE: docs/src/documentation/framework/uid.html ================================================

    UID


    UID is also aliased as name_t and called a name. It is my greatest technological accomplishment.

    When a name is created, the string representation of it is saved into a very nice string table. The name itself only the index of the string in the string table.

    The system also ensures that each string gets store only once. This means that name instances with identical string representations also have the same inded. This makes the comparisons between names very fast and efficient.

    Also I have no idea what UID actually stands for, I forgot it a very long time ago.

    ================================================ FILE: docs/src/documentation/framework/value.html ================================================

    Value


    Values in the framework are basically just type-safe unions. They support all of the types.

    ================================================ FILE: docs/src/documentation/framework/worldcell.html ================================================

    WorldCells


    Worldcells are the basic streaming unit of the virtual world. Essentially they are a list of entities.

    The worldcells also have a volume. All of the entities, whose positions are inside the worldcell's volume are considered to inside the worldcell.

    An entity is added to a worldcell if its definition is located in the worldcell's disk file, or if it is created and its position is inside the worldcell's volume or it enters a transition volume leading from one worldcell to another.

    All worldcell data files are located in the /data/worldcells/ directory. The file extension is .cell.

    Key concepts


    Interior

    Worldcell volumes are not supposed to overlap. The only exception are interior and exterior worldcells. If an entity's position is both inside an exterior and an interior worldcell, preference will be given to the interior worldcell.

    Interior lighting

    If a worldcell has its lighting set to be interior, it means that for every entity in that cell the directional lighting will be disabled. This is more of a convention for entity implementation, than something that is forced on entities

    Transition

    A worldcell transition has a volume, defined by a convex hull wrapped around a set of points, and an originating and a destination worldcell. If an entity is in the originating worldcell and it enters the volume of the tranistion, it will be switched to being in the destination worldcell.

    Volume

    If a transition has its originating and its destination worldcells set to the same worldcell, then it is considered that the volume of the transition contributes to the volume of the worldcell.

    Programming in C++


    #include <framework/worldcell.h>
    API documentation page.

    Loading a worldcell is very simple.

    WorldCell* frog_house = WorldCell::Make("pond");

    frog_house->LoadFromDisk();
    frog_house->Load();

    We can also probe entitial contents of the worldcell.

    WorldCell* frog_house = WorldCell::Find("pond");

    auto entities = frog_house->GetEntities();

    for (auto entity : enitities) {
        printf("Entity: %s\n", entity->GetName());
    }
    ================================================ FILE: docs/src/documentation/framework.html ================================================

    Framework


    This is where the core of the framework lives.

    // TODO: write a brief overview of each section ================================================ FILE: docs/src/documentation/index.html ================================================

    Learn

    There is nothing to learn.

    ================================================ FILE: docs/src/documentation/leveleditor.html ================================================

    Level Editor

    // TODO: implement

    ================================================ FILE: docs/src/documentation/physics/collisionmodel.html ================================================

    Collision Model


    Collision models are essentially the Resource form of the CollisionShape. They consist of a single or several collision shapes.

    Collision models are stored in the /data/model/ directory. The file extension is .coll. They can be created using the collision model exporter Blender plugin.

    ================================================ FILE: docs/src/documentation/physics/collisionshape.html ================================================

    Collision Shape


    The collision shape determines the volume of the of a rigidbody or a trigger. It consists of of a geometric shape.

    Shapes



    These are the shapes that you can use.

    Sphere | SHAPE_SPHERE

    A sphere is... well, you probably know what a sphere is. The only parameter that it has is it's radius.

    Cylinder | SHAPE_CYLINDER

    A cylinder has a radius and a height.

    Capsule | SHAPE_CAPSULE

    A capsule is like a cylinder, but instead of having flat ends, those ends have spheres attached to them. It has a radius and a height.

    Cone | SHAPE_CONE

    A cone is like a cylinder, but one of the ends has been collapsed into a point. It has a radius and a height.

    Box | SHAPE_BOX

    A box is a box. It has a width, length and height. If all of these parameters are equal, you get a cube.

    Hull | SHAPE_HULL

    A hull is a convex hull that is generated from a point cloud. It consists of points, which have a position.

    Mesh | SHAPE_MESH

    A mesh consists of triangles. Each triangle has 3 vertices, each of which has a position. This is shape has the worst performance, avoid it if you can.

    Programming in C++


    #include <physics/collisionshape.h>
    API documentation page.

    This is how you make the shapes.

    const float radius = 0.5f;
    const float height = 1.5f;

    auto sphere = CollisionShape::Sphere(radius);

    auto cylinder = CollisionShape::Cylinder(radius,                                          height);

    auto capsule = CollisionShape::Capsule(radius,                                        height);

    auto cone = CollisionShape::Cone(radius, height);

    const vec3 dimensions = {42.0f, 6.9f, 48.9f};

    auto box = CollisionShape::Box(dimensions);

    const size_t cloud_size = 3;
    const vec3 cloud[cloud_size] = {
        {-1.0f, 1.0f, -1.0f},
        {1.0f, 4.2f, 0.0f},
        {-6.9f, 1.0f, -1.0f},
    };

    auto hull = CollisionShape::Hull(cloud, cloud_size);

    const vec3 point1 = {1.0f, 1.0f, 0.0f},
    const vec3 point2 = {-1.0f, 1.0f, 0.0f},
    const vec3 point3 = {1.0f, -1.0f, 0.0f},
    const vec3 point4 = {-1.0f, -1.0f, 0.0f},

    const size_t mesh_size = 2;
    CollisionTriangle triangles[mesh_size] = {
        {point1, point2, point3},
        {point4, point2, point3}
    };

    auto mesh = CollisionShape::Mesh(triangles,                                  mesh_size);

    ================================================ FILE: docs/src/documentation/physics.html ================================================

    Physics


    The physics system provides rigidbody physics simulation services.

    Currently a single backed is implemented, which is the Bullet physics library backed, but more will be added in the future.

    If you want to add rigidbodies to your entities, consider using the PhysicsComponent. For triggers, the TriggerComponent is available.

    Key concepts


    Rigidbody

    An object in the physics simlation. Rigidbodies have some kind of a shape or volume. This is determined by their CollisionModel or CollisionShape.

    Trigger

    Triggers are special shapes or volumes that can detect if a rigidbody enters its volume.

    Collision Group

    Collision groups are groups that the rigidbody, trigger or other physics construct is a part of. The object can be a part of several groups. They are represented by bits in a bitmask.

    It is more efficient for an object to belong to only a single group, or very few groups.

    Collision Mask

    Collision masks are groups with which the rigidbody, trigger or other physics construct can collide with. The object can be set to collide with several groups. Allowed collision groups are represented by bits in a bitmask.

    To determine if an object should collide with another object, each objects group bitmask and the other object's mask bitmask are logically ANDed together. If the resulting value is not zero, the objects are allowed to collide.

    Raycast

    Useful for poking things, selecting objects. A raycast constructs a ray between two points and check whether it intersects any rigidbody between these points. If an intersection is found, it is returned.

    Shapecast

    Similar to raycast, but instead of a checking an intersection with an infinitely thin line, a shape is used.

    Collisions: how do they work?


    Like this.


    This is how the bitmask ANDing works.

    Programming in C++


    #include <physics/physics.h>
    API documentation page.

    Physics::Init();

    // main loop
    while (true) {
        Physics::Update();
    }

    Here's how we do raycasts. Let's do one from the render view.

    auto pos = Render::GetViewPositon();
    auto rot = Render::GetViewRotation();

    // convert rotation to normal vector
    vec3 dir = rot * DIRECTION_FORWARD;

    // set end point to ne 5 meters in
    // front of the view
    vec3 end = pos + dir * 5.0f;

    // collision mask -1 means all bits, aka
    // collide with all collision groups
    auto coll = Physics::Raycast(pos, end, -1);


    // skip collision if no entity attached
    if (!coll.collider || !coll.collider->GetParent())
    return;

    auto entity = coll.collider->GetParent();

    // send a SELECTED message to the collided
    Message msg;

    msg.sender = 0;
    msg.receiver = entity->GetID();
    msg.type = Message::SELECTED;
    msg.data = nullptr;

    Message::Send(msg);

    This is how interactable object highlighting is usually done for a first-person view. We check if there is an object withing 5 meters right in front of the view, and if there is an object, we send the it a Selected message.

    Shapecasts work the same way, except that you also need to pass in the shape, which will be used for the collision.

    ================================================ FILE: docs/src/documentation/platform.html ================================================

    Platform

    This system contains the platform compatibility layer. Basically it provides a single API to perform various tasks, which are platform-specific.

    For example, the creation of a window and the capture of keyboard keypress events is specific to the operating system. Windows uses the Win32 API and Linux uses the X Window System API.

    To make porting easier, the framework does not use these APIs directly, instead using either the GLFW or the SDL libraries as a backend. It is also possible to create your own backend.

    Creating your own backend is useful if you want to embed the framework inside of another application. For example, the level editor is a wxWidgets application that embeds the rendering system of the framework.

    ================================================ FILE: docs/src/documentation/plugin.html ================================================

    Plugins

    // TODO: implement

    ================================================ FILE: docs/src/documentation/render/aabb.html ================================================

    AABB


    Whenever a 3D model is added to the scene by a RenderComponent, it is also added to the very large AABB tree which contains every model in the scene.

    This tree can be used to query the contents of the scene. This is useful for things like mouse picking of objects or decal projection.

    This system also contains the LightTree, which is an octree that contains all of the lights in the scene. It is used to determine which lights will be used to illuminate which objects, since it speeds up nearest point queries.

    ================================================ FILE: docs/src/documentation/render/animation.html ================================================

    Animations


    Animations are a Resource that can be used to, essentially, generate pose matrices. Those are used to deform meshes. See AnimationComponent for examples of what you can do with animations.

    Animations consist of keyframes. Each keyframe has some data associated with it. This data is used to transform bones.

    Keyframes start from zero and increase at a rate of 24 frames per second. This is the same as the default animation frame rate in Blender.

    Animations can be created in the Blender program and then exported using the Animation Exporter Plugin.

    A brief overview of the Keyframe


    Frame

    Any positive number. It is used to determine when the keyframe will be active.

    Location

    Translation of a bone.

    Rotation

    Rotation of a bone.

    Scale

    Scale of a bone.

    That's it

    No shearing or any other kind of funny transformations.

    ================================================ FILE: docs/src/documentation/render/material.html ================================================

    Material


    Materials are used to describe the properties of geometry primitive surfaces.

    If a material is set to use a texture image, these images will be loaded from the /data/textures/ directory and have the extension .png.

    Materials can be defined through code, or they can be defined through a material list file. These files are located in the /data/ directory and have the extenstion .list.

    Properties


    Texture

    Optional texture image.

    Type

    Determines how the surface is rendered. For the OpenGL backend this determines which shader is used.

    Property

    Determines what the material is made of. Useful for determining which sound to use when collision happens with object, or which particle effect to spawn.

    Filter

    Determines how the texture of the material will be interpolated.

    Texture type

    Allows the material to not use its own texture, instead using a plain color, or allows it to use another material's texture.

    Color

    If a material has no texture, it will use appear as this color. Otherwise the texture of the material will be tinted with this color.

    Specular weight

    Floating point value between 0.0 and 1.0. Determines how visible the specular reflections of the material are. Setting this to 0.0 essentially disables specular reflections.

    Specular exponent

    Floating point value from 1.0 to higher. Determines how wide the specular reflection will be. Higher values means narrower relection.

    Specular transparency

    Floating point value between 0.0 and 1.0. Determines whether the material absorbs any of the specular reflection. Setting this to 0.0 will make the material absorb the specular reflection just like it does with diffuse and setting this to 1.0 will have the specular reflection be the same color as the light source.

    Material types


    Most of these material types are accepted by all backends. If using OpenGL backed, you can register new material types and set their shaders.

    Texture | MATERIAL_TEXTURE

    The material has a texture. It is fully opaque.

    Texture Alpha | MATERIAL_TEXTURE_ALPHA

    The material has a texture. It is partially opaque. The transparency channel of the texture is used for an alpha test.

    Lightmap | MATERIAL_LIGHTMAP

    The texture of this material is used as a lightmap.

    MSDF | MATERIAL_MSDF

    The texture represents a MSDF.

    Glyph | MATERIAL_GLYPH

    This is the material used for GUI elements.

    Water | MATERIAL_WATER

    This material will get fancy water effects applied to it, but this only works with the OpenGL backend.

    Flat Color | MATERIAL_FLAT_COLOR

    The material has no texture associated with it and instead it will use its color parameter.

    Material Property properties


    Metal | PROPERTY_METAL

    Heavy metal objects.

    Metal Thin | PROPERTY_METAL_THIN

    Light metal objects.

    Slime | PROPERTY_SLIME

    Exretions of a biological origin.

    Tile | PROPERTY_TILE

    Tiles, like those found in a bathroom.

    Grate | PROPERTY_GRATE

    Fences and other metallic objects with lots of holes in them.

    Wood | PROPERTY_WOOD

    Trees, planks and logs.

    Computer | PROPERTY_COMPUTER

    Acts like mixture of metal and glass.

    Glass | PROPERTY_GLASS

    Windows, jars and bottles.

    Snow | PROPERTY_SNOW

    Snow and other sound absorbent materials, carpets.

    Grass | PROPERTY_GRASS

    Like the green touchable stuff that grows outside.

    Concrete | PROPERTY_CONCRETE

    Concrete, rocks and stones.

    Flesh | PROPERTY_FLESH

    Sort of like a heavier version of slime. Things that are made out of meat.

    Filters


    Nearest | FILTER_NEAREST

    Textures won't use interpolation.

    Linear | FILTER_LINEAR

    Textures use linear interpolation.

    ================================================ FILE: docs/src/documentation/render/model.html ================================================

    Models


    Currently we have three types of 3D models.

    All model types are stored in the /data/models/ directory. Static models have the extension .stmdl, dynamic models have the .dymdl extension and modifcation models have the .mdmdl extension.

    Static models


    Static models not only have normal texture coordinates, but they also have lightmap coordinates. They can be lightmapped. That's pretty nice.

    Dynamic models


    Dynamic models also have texture coordinates, but no lightmap coordinates. Instead they have bone weights, which allow them to use pose matrices and be animated by animations and stuff.

    Modification models


    Unlike other model types, this model type has no vertex data of its own. Instead it references the vertex data of some other model. What is unique to it, is its material to material mapping. It can be used to swap out a material.

    For example, if you have a pink teapot model which uses a material named pink-pot and you would like a cyan teapot model, instead of re-exporting another dynamic model but with just the materials replaced, you could create a modification model with the material mapping of pink-pot => cyan-pot.

    ================================================ FILE: docs/src/documentation/render/sprite.html ================================================

    Sprite


    Sprites are like little images that live inside of other images. These images are the texture images of Materials. Sprites reference materials.

    If you are creating a flipbook animation, it is easier to animate all of the frames inside of a single image texture file. But how would the framework know where exactly are each of the frames located in the image? It would know it because you created a sprite, which contains the positions of each frame inside the larger texture image.

    What does is inside a frame



    This is how these different metrics look like.

    Offset X and Offset Y

    Offsets in pixels, from the top-left corner. This is the pixel coordinate position of the top-left corner of the sprite and where it starts.

    Width and Height

    Width and height of the frame, in pixels.

    Midpoint X and Midpoint Y

    Offsets of the midpoint of the frame, in pixels. It is relative to the frame offset. Usually they will be set to half of the width and half of the height, so that the midpoint is in the midpoint of the sprite.

    Border H and V

    Horizontal and vertical borders around the sprite, in pixels. Only used for text rendering.

    ================================================ FILE: docs/src/documentation/render.html ================================================

    Render


    Probably one of the most useful systems in the framework. Performs all of the graphics stuff.

    Key concepts


    View

    Virtual camera perspective. Can be set using a position vector and a rotation quaternion, or by directly feeding in a view and perspective matrices.

    Layer

    Objects can be assigned to a layer. Curently there are 7 layers. Objects in higher layers will be drawn on top of the objects in lower layers.

    Graphics Primitive

    A geometric shape that can be rasterized. The framework currently supports the rasterization of triangles and straight line segments.

    Draw List Entry

    A record in the draw list. The draw list is list of all of the objects, consisting of graphics primitives, that compose the rendered scene. To be eligble for being rendered to the screen, the object must be added to the draw list.

    Vertex

    A point consisting of some kind of a coordinate and possibly some other data. Used to construct graphics primitives. A triangle consists of 3 vertices, a line segment of 2. Can be arranged in a buffer in list form.

    Index

    Reference to a vertex. Can be arranged in a buffer in list form. Invented as a digital computer memory saving measure sometime in the late 20th century.

    Texture

    Raster image that can be applied to the surface of a graphics primitive during rendering.

    Material

    Set of surface properties, possibly including a reference to a texture. Determines how the surface of a graphics primitive will be rendered.

    Light

    If there was no light we could just clear the screen with a black color instead of rendering anything and you wouldn't even know.

    Lightmap

    Precomputed surface illumination for static objects. Allows the usage of some rather slow algorithms for lighting computations, i.e. ray tracing, path tracing, radiosity.

    Armature

    Consists of bones. Allows deformation of a 3D model via the transfors of the bones. Can be animated.

    Backends


    OpenGL

    Written in a subset of OpenGL 4.0 and WebGL, this is the main rendering backend of the framework.

    Direct3D

    This backend uses the Direct3D9 fixed function pipeline. Not tested, but should work with Direct3D7 level hardware. Curently only supports static model, dynamic model and line rendering.

    Software

    This backend does all of the rendering on the CPU. Curently only supports static model, dynamic model and line rendering.

    Lighting Types


    Dynamic light

    Can either be configured to act as a point light, or a spotlight.

    No real limit on the ammount of lights in the scene, but each object can be illuminated by only 4 lights at the same time.

    Directional light

    Light which is originating from a light source infinitely far away. Useful for modelling sunlight.

    The framework allows a single directional light to be used in the scene.

    Ambient light

    Adds some base lighting to every object in the scene. Has no direction.

    Lightmap

    Pre-computed lighting for a 3D model. Stored as a texture image. Only available to static models.

    Programming in C++


    #include <render/render.h>
    API documentation page.

    Initialization the same as with other systems.

    // UI system needs to be initialized first
    UI::Init();

    // now we initialize Render
    Render::Init();

    // main loop
    while (true) {
        Render::Render();
    }

    There's too many functions in the system to list, but here's some more useful ones.


    // the system defines some color constants
    color_t cyan = Render::COLOR_CYAN;
    color_t pink = Render::COLOR_PINK;

    // this draws a debug line. all of the debug
    // drawing functions need to be called once
    // per frame, since after rendering a frame
    // the debug line buffer is emptied
    const vec3 from = {0, 0, 0};
    const vec3 to = {1, 1, 1};

    Render::AddLine(from, to, cyan);

    // this draws a cross
    Render::AddLineMarker(from, pink);

    // sphere
    const float radius = 1.0f;
    Render::AddSphere(from, radius, pink);

    // this is how to set the directional light
    Render::SetSunDirection(DIRECTION_FORWARD);
    Render::SetSunColor(COLOR_CYAN * 1.0f);
    Render::SetAmbientColor(COLOR_CYAN * 0.1f);

    // setting the FOV, in degrees
    Render::SetViewFov(90.0f);

    // setting it to zero changes it to
    // orthographic projection.
    Render::SetViewFov(90.0f);
    ================================================ FILE: docs/src/documentation/source-layout.html ================================================

    Source Layout

    All of the source code for the library is located in the /src/ directory of the repository. There's also header files for the libraries in the /libraries/ directory.

    /libraries/

    ================================================ FILE: docs/src/documentation/tools/codegen.html ================================================

    Codegen


    Codegen is a small Python script to help with syncing up C++ entity serialization code and entdef files.

    How to use


    Open command prompt in you project's directory and run the codegen.py

    C:\garden>codegen.py make StickyFroggy

    The program will prompt you with the filename of the new file to be created. Press y to accept.

    Tramway SDK Code generator v0.1.1
    Create file C:\garden\src\stickyfroggy.h? [y/n]

    The program will now have created the files /src/stickyfroggy.h and /src/stickyfroggy.cpp.

    Let's open up stickyfroggy.h and take a look inside:

    // Generated by Tramway SDK Code generator

    #include <framework/entity.h>
    #include <framework/serialization.h>

    #include <templates/macros.h>

    using namespace tram;

    class StickyFroggy : public Entity {
    public:
      StickyFroggy(const SharedEntityData&, const ValueArray&);
      
      TRAM_SDK_ENTITY_NAME("stickyfroggy")
      
      void UpdateParameters();
      void SetParameters();
      void Load();
      void Unload();
      void Serialize();
      void EventHandler(Event& evt);
      void MessageHandler(Message& msg);
      name_t GetType();
      static void Register();
    };

    Let's add some properties to the class!

    class StickyFroggy : public Entity {
    public:
      StickyFroggy(const SharedEntityData&, const ValueArray&);
      
      TRAM_SDK_ENTITY_NAME("stickyfroggy")
      
      void UpdateParameters();
      void SetParameters();
      void Load();
      void Unload();
      void Serialize();
      void EventHandler(Event& evt);
      void MessageHandler(Message& msg);
      name_t GetType();
      static void Register();
    private:   
      TRAM_SDK_KEY_VALUE("model", "frog-marker")
      
      TRAM_SDK_PROPERTY("viewmodel", FIELD_SERIALIZE)
      name_t viewmodel = "frog";
      
      TRAM_SDK_PROPERTY("stickiness", FIELD_SERIALIZE)
      float stickiness = 1.5f;
      
      TRAM_SDK_PROPERTY("roll", FIELD_SERIALIZE)
      bool egg;
      
      TRAM_SDK_VIRTUAL_PROPERTY(int32_t, "egg-count", FIELD_SERIALIZE, 11)
    };

    After editing entity properties, we need to create/regenerate code and data files

    C:\codegen.py refresh StickyFroggy

    This command creates or overwrites these files

    /src/stickyfroggy.inl
    /data/stickyfroggy.[number].entdef

    If you want, you can take a look at the generated code in stickyfroggy.inl file, but don't bother editing it — it will be overwritten every time you run the refresh command.

    Let's look at the generated .entdef file

    begin
      # this comes from TRAM_SDK_ENTITY_NAME() macro
      name stickyfroggy
      
      # this comes from TRAM_SDK_KEY_VALUE() macro
      model frog-marker
      
      # these come from TRAM_SDK_PROPERTY()
      # and TRAM_SDK_VIRTUAL_PROPERTY() macros
      field string viewmodel
      field float stickiness
      field bool roll
      field int egg-count
      
      # this is randomly generated index
      version 193035075
    end

    Supported types


    • name_t
    • bool
    • int
    • float
    • double
    • int8_t
    • int16_t
    • int32_t
    • uint8_t
    • uint16_t
    • uint32_t
    • vec2
    • vec3
    • vec4
    • quat
    ================================================ FILE: docs/src/documentation.html ================================================

    Documentation

    This page contains links to the pages of the framework documentation. These pages are meant to be used as a general, high-level overview of the framework's features.

    If you're looking for low-level C++ API documentation, the reference generated by doxygen can be found here.

    It is also worth noting here, that all of the C++ code examples omit the main framwork namespace. This is equivalent to adding this line of code to the beginning of your source code files:

    using namespace tram;

    Runtime

    Level editor

    Map compilers

    Blender plugins

    CLI tools

    ================================================ FILE: docs/src/features.html ================================================

    Features

    • Photo-realistic graphics.
      • Textured 3D models.
      • Gouraud shading.
      • 24-bit color.
      • Night and day conditions.
      • Screen resolutions from 320x200 to 800x600.
      All of that together provides very realistic appearance.
    • Data oriented design.
      • Engine core data is laid out in memory in the most efficient way possible as to increase the data processing speed. The core library also provides templates so that you can have efficient data too.
    • Hyperrealistic physics simulation provided by the Bullet Physics library.
    • Open-world style level streaming, including assets.
    • Runs on virtually any computer from the last 15 years.
    • Very fast and environmentally-friendly C++20 code performance.
    • Windows XP and Linux support.

    Images











    ================================================ FILE: docs/src/index.html ================================================

    Did you know...

    That the Tramway Drifting and Dungeon Exploration Simulator Software Development Kit is the bestest 3D graphics package?

    What is goings on?


    Version 0.1.1 is out. You can finally download an installer. Like a wizard installer. It will install the engine and all of the utilities. Very professional. 99% of other engines can't to that!

    The tools still are very glitchy and everything breaks all the time. But at least the engine is capable of shipping. Shipping real applications. You can actually do that now.


    Ray-tracing render backend can now do transparency, btw.

    What we'll do next:

    • Ship apps.
    • Ship some more apps.
    • Analyze deficiencies.
    • Fix bugs. Fix deficiencies. Fix everything.

    Design Patterns Used

    82%

    Click here to learn more.

    Tramway SDK now ships applications


    Tramway SDK has now been used on actual, shipping applications. You can't say that about 99% of other graphics engines, since they don't ship. Like don't ship. Ever. Never will ship either.

    We have compiled a list of the shipped projects:


    Why we use use sphere maps instead of cubemaps


    Big Engine wants you to think that cubemaps are superior to sphere maps and that sphere mapping is obsolete. Nothing could be further from the truth.

    They keep insisting that sphere maps supposedly suffer from «image distortion», «viewpoint dependency» and «computational inefficiency». This is demonstrably false.



    Where's the image distortion? It's a perfect reflection!

    Sphere maps might have been viewport dependent in the 1980s, but since at least 1998(!) there have existed techniques that can overcome this limitation by using a single if() statement.

    Consider the standard approach to sampling a cubemap:

    auto sample_cubemap = [=](vec3 nrm) { char* image = nullptr; float axis; vec2 uv; vec3 abs = glm::abs(nrm); bool x_positive = nrm.x > 0; bool y_positive = nrm.y > 0; bool z_positive = nrm.z > 0; if (z_positive &&abs.z >=abs.x && abs.z >= abs.y) { image = front; uv.x = nrm.x; uv.y = nrm.y; axis = abs.z; } else if (!x_positive && abs.x >= abs.y && abs.x >= abs.z) { image = left; uv.x = nrm.z; uv.y = nrm.y; axis = abs.x; } else if (x_positiv && abs.x >= abs.y && abs.x >= abs.z) { image = right; uv.x = -nrm.z; uv.y = nrm.y; axis = abs.x; } else if (!z_positive && abs.z >= abs.x && abs.z >= abs.y) { image = back; uv.x = -nrm.x; uv.y = nrm.y; axis = abs.z; } else if (y_positive && abs.y >= abs.x && abs.y >= abs.z) { image = top; uv.x = nrm.x; uv.y = -nrm.z; axis = abs.y; } else if (!y_positive && abs.y >= abs.x && abs.y >= abs.z) { image = bottom; uv.x = nrm.x; uv.y = nrm.z; axis = abs.y; } uv = 0.5f * (uv / axis + 1.0f); if (!image) { return std::tuple<char, char, char>{uv.y * 255.0f, 0, uv.x * 255.0f}; } return get_pixel(image, uv); };

    Not only is it whole 47(!) lines of code, it contains 6 if/else statements. Remember that shaders can't execute those and only those if/else statements which evaluate to a true value. Instead they will always execute every single branch and will throw away the results of the false branches.

    Now consider our implementation of sphere map sampling code:

    vec2 sphere_map_coords = vec2(normal.x * 0.25 + 0.25, normal.y * 0.5 + 0.5); if (normal.z > 0.0) sphere_map_coords.x += 0.5;

    Only 2(!) lines of code with a single if/else that the compiler can optimize away to a single conditional move operation, resulting in essentially no branching.

    Now consider the fact that cubemaps consist of the 6 square sides of a cube. A lot of GPUs support only textures with sizes that are a power of two. If you put these 6 sides of a cube into a single texture, you will waste 25% of the space in the texture.

    Sphere maps leave only 21% of space empty. If you use a slightly different projection (paraboloid), you can reduce this number to 0%.



    Cubemaps waste space.


    Sphere maps fit perfectly.

    Without a doubt, the push from Big Engine to use cubemaps is intentionally intended use up more RAM and GPU processing time to force users to purchase more expensive GPUs.

    We strongly encourage that you do not believe the lies and misinformation spread by Big Engine and instead do your own research.

    Very large open world project



    Rendering a lot of 3D models.

    Making 3D models and placing them in the world. Will do a first pass and then set up streaming.

    Currently very slow performance due to a lot of draw calls. But could be because of Intel HD 4000 being bad. Will need to optimize.

    ================================================ FILE: docs/src/learn/3dmodeling.html ================================================

    Adding 3D models


    After becoming experts in the coloring of teapots, how about we replace the teapot model with something else?

    First of all, make sure that you have Blender either installed or downloaded. After that, install the tram_dynamic_obj_export.py plugin which can be found in the /devtools/exporters directory in the main Tramway SDK repository.

    If you have problems, or need a more detailed guide, take a look at the exporter plugin documentation page.

    Creating and exporting a monkey


    Step 1: Create the monkey

    Look at the top bar. Locate the Add button. Then perform the Add » Mesh » Monkey selection. A monkey should appear in your Blender window.


    This is where you find the monkey button.

    Step 2: Give the monkey a new material

    Next we need to give the monkey a material. Add a material in the selection on the right side of the screen.


    This is where the new material button is.

    Let's give the monkey the same material as the teapot. Rename the new material to teapot.


    You can click on the name of the material to edit it.

    Step 3: Export!

    First, make sure that the monkey object is still selected. Now look at the top bar. Locate the Add button. Then perform the File » Export » Tram Dynamic Exporter selection. A file dialog should appear.


    This is where you find the exporters.

    You will need to save the monkey to the /data/models/ directory, so that the framework can find it. You don't have to name it monkey.dymdl, just remember to keep the file extension and to not put any spaces in the file name.


    The big blue button. It does the export.

    Replacing the teapot with a monkey


    Now we just need to swap out the teapot for the monkey. Change this line of code:

    teapot:SetModel("teapot")
    teapot:SetModel("monkey")


    It appears that we are inside a monkey.

    It appears that the default Blender monkey is much larger than our teapot. Let's resize the monkey, so that we can better appreciate it:

    teapot:SetScale(tram.math.vec3(0.5, 0.5, 0.5))


    It is much easier to appreciate the monkey from the outside.

    How to texture a teapot


    Going back into Blender, create another model. Maybe it will be another monkey, maybe you will use Blender's teapot generation capabilities, or perhaps you will create your own.

    Now comes the difficult part. Open up Tuxpaint or some other image editing program and create a texture. It's best if you use an image size which is powers of two, i.e. 32x32, 128x128, 256x128, etc.

    Once it's done, save it in the /data/textures/ directory. I decided to name it mybestwork.png.


    I am very proud of how this turned out.

    Back in Blender, create the material the same way we did before. This time, make sure that you give it the same name as you gave that texture image. Once you do that, in the same material pane you should see a Base Color selection. Click on that and select Image Texture. Now click on Open and find that image.

    The last thing left to do is to finish up the UVs. Enter edit mode by pressing the Tab key. Select all of the model by pressing Ctrl+A. Click on the UV button in the top bar and then select Sphere Projection or some othertexture projection. Not use Tab to get back into object mode and perform the export as before.

    Change the init script to load the new 3D model.


    My favorite teapot.

    Exercise


    If you don't know how to already, learn to use Blender.

    Exercise


    Create a 3D model with several different textures. Load it into the teapot viewer.

    ================================================ FILE: docs/src/learn/animations.html ================================================

    Adding Animations

    First, make sure that you have installed the Blender animation exporter plugin. Next up, create a 3D model of something, create an armature for it and rig it.

    Note


    Tramway SDK only allows 4 bones to influence a single vertex. Take this into account when vertex weight painting. If the exporter sees that a single vertex has weights for more than 4 bones, it will pick only 4 of the vertex groups that have the greatest weight for export.

    For the animations, you will need to open the Blender's Action Editor. Each exported animation will be a single action.

    When creating an animation, make sure that each bone that will be animated has a keyframe at frame zero and another keyframe at the end of the animation, on whichever frame you decide to put it.

    Note


    Use only LocRotScale keyframes, otherwise the exporter will explode and your computer will catch on fire. This might be fixed sometime in the future.

    Note


    Tramway SDK only uses linear interpolation, so make sure to set it in your keyframes, so that you see the animation in Blender just like it will look like when rendered by the framework.

    Note


    Since animations are resources with names, do not use a name with any spaces for your action name.

    After the animation or animations are finished, select File » Export » Tram Animation Exporter option. In the file dialog, navigate to /data/animations/ directory and click the Export Tram Animation button.

    Each Blender action will get saved into its own animation file.

    If you want an example of a rigged 3D model and an animation, take a look at the /assets/toilet.blend/ file.

    Playing the animation


    First, set up the 3D model.

    toilet = tram.components.Render()
    toilet:SetModel("toilet")
    toilet:Init()

    Then, let's load the Animation which we created.

    animation = tram.render.animation.Find(
                        "toilet-lid-open-close")
    animation:Load()

    Next, let's set up the AnimationComponent, which will be playing our animation.

    armature = tram.components.Animation()
    armature:SetModel("toilet")
    armature:Init()

    After both the Render and the Animation components have been initialized, we can link them together.

    toilet:SetArmature(armature)

    Finally, we can play back the Animation on the AnimationComponent, which will be visible on the RenderComponent, to which we linked it to.

    armature:Play("toilet-lid-open-close")


    Animation being played on a 3D model.

    Exercise


    The example above shows only the most basic animation playback option. Try changing the animation playback parameters. Try pausing, continuing and stopping animations. Fade them in and fade them out.

    ================================================ FILE: docs/src/learn/cake.html ================================================

    Making a cake simulator

    // TODO: implement

    ================================================ FILE: docs/src/learn/cameras.html ================================================

    Platforms and stuff

    // TODO: implement

    ================================================ FILE: docs/src/learn/getstarted.html ================================================

    Getting started


    If you already know how to C++ and are very good at it, you should be able to compile the code that can be found in the Tramway SDK repository.

    This article will cover the usage of the framework for beginners who are either scared of C++ or just bad at it. I tried to create the LUA scripting API in a way that is very close to the underlying C++ API, so after you overcome your fear of C++ or get better at it, you should be able to switch to it rather easily.

    Before starting, evaluate yourself and make sure that you possess the following qualities:

    • Good computer skills;
    • Decent programming skills;
    • Basic maths;
    • Knowledge of game engine concepts.

    If you do not meet these requirements, consider visiting your local public library, signing up for computer literacy courses or finishing your secondary education (if applicable).

    Setting up your workspace


    Before beginning, it would be worthwhile to set up your virtual workspace. My personal preference is to dump everything into a directory located on my Desktop on Windows or in my home directory on Linux.

    Decide where you will put your workspace directory and create it. Name it something descriptive, like tramsdk, projects, my_games or IMPORTANT. Customize the icon. Add a shortcut to your start menu or a start menu equivalent.

    Next up, you will need to acquire the framework source code. Even if you use pre-built binaries, the source code repository contains many useful Python scripts.

    Download the repository, either as a .zip file from the Github web interface, or clone it through the git program. After that, download the template repository, just like you downloaded the main framework repository.

    Creating your first app.


    Copy the directory and name it something descriptive, like my-app. You will probably do this every time you create a new app using the framework. Navigate into this directory.

    If you're using Windows, then the template repository already contained binaries for you. On Linux, you should take a look at the contents of the maketool.ini file. Try running maketool.py found in the devtools directory of the main framework repository, while having this directory as the working directory. If you are using Linux, then you're probably very clever, you should be able to figure this out.

    The executable of the app is named template.exe, you might want to rename it. Double-click on it or run it through command line and a window with a teapot should appear. You can rotate the teapot by pressing the arrow keys on your keyboard.


    This is what you should be seeing.

    If a window does not appear, check if your monitor is plugged in and turned on. Many users make this simple mistake.

    ================================================ FILE: docs/src/learn/materials.html ================================================

    Adding Materials


    If you followed the last guide and made your own teapot, you might have noticed that the teapot is not shiny. Not shiny at all! Also the texture was pixelated. Very pixelated!

    The reason for this is very simple – by default all materials are matte and not at all shiny. However, we can override this behavior by adding a material definition ourselves, instead of letting the framework create a default one.

    Open up the /data/material.list file in a text editor. What you will notice is a table of material definitions. Somewhere near the end you should find the teapot material that we gave the monkey 3D model.

    What do all of the values do?


    Material name

    This is the name of the material. It is used to reference it, such as by 3D models. It is also used to lookup the texture image for the material.

    Type

    This tells the renderer how to render the material. For the OpenGL backend this also determines which shader will be used to render this material.

    Filter

    This tells the renderer whether to blur the textures when upscaling them. This is why they look pixelated &endash; by default blurring is disabled.

    Property

    This describes aural and other physical properties about the material. This is not directly used by the renderer. We can ignore this for now.

    Color

    This is the color of the material. You might have noticed that a lot of materials have the white color. This is because if you use a texture image and if you want it to look exactly it looks in your image editor, you need to set it to white, since the material color and the texture color is multiplied together. Changing this will tint the texture image, or just set the material's color if there is no texture.

    Specularity

    This determines how intense the specularity of the material will be. Can be set in the range from 0.0 to 1.0.

    Specularity

    This determines how narrow or wide the specular reflection will be. Needs to be set to at least 1.0 or higher.

    Specular Transparency

    This determines whether the specular reflection will be multiplied with the material's color, or added to it. Can be set in the range from 0.0 to 1.0.

    Source

    This determines the source of the material's texture image. If set to same, the material's name will be used to lookup an image from the /data/materials, directory. If set to none, the material will have no texture and instead will use its color for display. Finally, if this parameter is set to anything else, this will be interpreted as the name of another material and this material will use the other's texture image.

    This is useful if, for example, you want to create multiple materials with the same texture, but with different specular, color or other parameters. This way all of the materials will share the same texture image in GPU memory, thereby saving some space there.

    Fixing the teapot material


    An easy way to do this would be to duplicate the teapot material's line in the file and to replace the material's name with you material's name. Also don't forget to change the source from none to same. Perhaps also change the transparency from 0.0 to 1.0, to make the teapot look less metallic.


    My best work: now shiny again.

    Exercise


    Try changing your teapot's material's properties. See what changing them to different values does.

    Exercise


    Use the texture source option and the color parameter to create different colored variations of your material.

    ================================================ FILE: docs/src/learn/physics.html ================================================

    Physics

    // TODO: implement

    ================================================ FILE: docs/src/learn/pingpong.html ================================================

    Making Ping Pong

    First of all, we will be using debug lines. Debug lines are drawn on layer 1 and up to this point we have been using layer 0, which is the default layer for RenderComponents.

    By default, when calling tram.render.SetViewPosition(), it will affect the view position in the layer 0, so for the debug lines to appear correctly, we will need to set the view in the layer 1 as well.

    local view_pos = tram.math.DIRECTION_FORWARD * -3.0

    tram.render.SetViewPosition(view_pos, 0)
    tram.render.SetViewPosition(view_pos, 1)

    Most ping pongy games are 2D, but Tramway SDK uses 3D graphics. How do we reconciliate this? The easiest way would be to just disregard the Z axis. Whenever we need to pass in a Vec3, we will set the third component to 0.0.

    Let's set up the ball and the paddles.

    ball = {
      position = tram.math.vec3(0.0, 0.0, 0.0),
      velocity = tram.math.vec3(0.02, 0.02, 0.0)
    }

    paddle_left = {
      position = tram.math.vec3(-2.0, 0.0, 0.0)
    }

    paddle_right = {
      position = tram.math.vec3(2.0, 0.0, 0.0)
    }

    We'll set up the playing field so that the left and right borders are on the -2.0 and 2.0 X coordinates respectively and top and bottom are on the -1.0 and 1.0 Y coordinates respectively.

    The paddles will be moving along the left and the right sides of the field. The ball will start in the middle. We also give it a starting velocity.

    When drawing lines using the debug line functions, we need to call these functions every frame. Up until now we have been using the Tick event handler to drive the logic. Tick events get emitted at regular intervals, but they might not be emitted for every frame. That's why we will be putting all of the rendering related code in the event handler for the Frame event.

    Let's draw the field first.

    local corner1 = tram.math.vec3(-2.0, 1.0, 0.0)
    local corner2 = tram.math.vec3(2.0, 1.0, 0.0)
    local corner3 = tram.math.vec3(2.0, -1.0, 0.0)
    local corner4 = tram.math.vec3(-2.0, -1.0, 0.0)

    local midpoint1 = tram.math.vec3(0.0, 1.0, 0.0)
    local midpoint2 = tram.math.vec3(0.0, -1.0, 0.0)

    local color = tram.render.COLOR_WHITE

    tram.render.AddLine(corner1, corner2, color)
    tram.render.AddLine(corner2, corner3, color)
    tram.render.AddLine(corner3, corner4, color)
    tram.render.AddLine(corner4, corner1, color)
    tram.render.AddLine(midpoint1, midpoint2, color)

    Here we just define the corners of the field and use the debug line drawing functions to draw them. Let's draw the paddles next.

    local left_top = paddle_left.position
      + tram.math.vec3(0.1, paddle_size, 0.0)
    local left_btm = paddle_left.position
      + tram.math.vec3(0.1, -paddle_size, 0.0)

    tram.render.AddLine(left_top, left_btm, tram.render.COLOR_GREEN)

    local right_top = paddle_right.position
      + tram.math.vec3(-0.1, paddle_size, 0.0)
    local right_btm = paddle_right.position
      + tram.math.vec3(-0.1, -paddle_size, 0.0)

    tram.render.AddLine(right_top, right_btm,
      tram.render.COLOR_GREEN)

    Here we just calculate the top and bottom coordinates of the paddles, then draw them. Also we push them into the field a bit, so that they don't get obscured by the lines that make up the sides of the field.

    You can set the paddle_size to whatever size you want. I set it to 0.2.

    Finally, we draw the ball.

    tram.render.AddLineMarker(ball.position,
      tram.render.COLOR_RED)


    Initial field setup.

    Let's add the ability to move the paddles. This we should put in the Tick event handler, since we want the paddles to move at a speed independently of the frame rate.

    if tram.ui.PollKeyboardKey(tram.ui.KEY_UP) then
      if paddle_right.position.y
          + paddle_size < 1.0 then
        paddle_right.position.y =
          paddle_right.position.y + 0.05
      end
    end

    if tram.ui.PollKeyboardKey(tram.ui.KEY_DOWN) then
      if paddle_right.position.y
          - paddle_size > -1.0 then
        paddle_right.position.y =
          paddle_right.position.y - 0.05
      end
    end

    if tram.ui.PollKeyboardKey(tram.ui.KEY_W) then
      if paddle_left.position.y
          + paddle_size < 1.0 then
        paddle_left.position.y =
          paddle_left.position.y + 0.05
      end
    end

    if tram.ui.PollKeyboardKey(tram.ui.KEY_S) then
      if paddle_left.position.y
          - paddle_size > -1.0 then
        paddle_left.position.y =
          paddle_left.position.y - 0.05
      end
    end

    I set it up so that the left paddle can be moved up and down by the W and S keys respectively, and the right paddle can be moved up and down by the Up and Down arrow keys respectively.


    The paddles can be moved now.

    Let's make the ball move as well.

    ball.position = ball.position + ball.velocity


    The ball flies out of the field.

    Adding collisions to the top and bottom sides of the field is very easy.

    if ball.position.y < -1.0
        or ball.position.y > 1.0 then
      ball.velocity.y = -ball.velocity.y
    end

    Adding collisons to the left and right sides is a little bit more complicated, since we also have to take into account collisions with the paddles.

    if ball.position.x < -2.0 then
      local paddle_dist = math.abs(ball.position.y
        - paddle_left.position.y)

      if paddle_dist < paddle_size then
        ball.velocity.x = -ball.velocity.x
      else
        ball.position.x = 0.0
        ball.position.y = 0.0

        player_right_score = player_right_score + 1

        print("Left lost!!")
        print("Score is",
              player_left_score,
              "|",
              player_right_score)
      end
    end

    if ball.position.x > 2.0 then
      local paddle_dist = math.abs(ball.position.y
        - paddle_right.position.y)

      if paddle_dist < paddle_size then
        ball.velocity.x = -ball.velocity.x
      else
        ball.position.x = 0.0
        ball.position.y = 0.0

        player_left_score = player_left_score + 1

        print("Right lost!!")
        print("Score is",
              player_left_score,
              "|",
              player_right_score)
      end
    end

    We also need to define the player score counters for this.

    player_left_score = 0
    player_right_score = 0

    At this point, the gameplay logic is finished. We just have to add the 3D models. For the ball model, I decided to use the teapot model. For the paddles I used the default Blender cube, with some bevels applied to the edges.


    How it looks like with the 3D models replacing the debug lines.

    One thing you might notice is that the 3D models are being drawn underneath the debug lines. We can fix this by setting them to a higher layer.

    paddle_model_left:SetLayer(1)
    paddle_model_right:SetLayer(1)


    In motion.

    If you want to look at the full code, it is available in the example repository.

    ================================================ FILE: docs/src/learn/platforms.html ================================================

    Platforms and stuff

    // TODO: implement

    ================================================ FILE: docs/src/learn/render.html ================================================

    Render

    // TODO: implement

    ================================================ FILE: docs/src/learn/scripting.html ================================================

    Basic scripting


    In order to follow this guide, you might need the following:

    • Basic computer programming skills
      • Previous experience in object-oriented programming will prove to be very useful
    • Basic understanding of Lua or other Pascal-derived languages
    • General understanding of how game engines and similar software works

    Reminder about Lua syntax


    Anyway, here's a small reminder of how Lua works.

    -- this is a comment

    -- creating a global variable
    number_first = 420

    -- creating a local variable
    local number_second = 69

    -- printing stuff to the console
    print(420 + 69)

    -- Lua only has if/else statements. no switches
    if 420 == 69 then
        -- ...
    elseif 420 + 69 == 489 then
        -- ...
    else
        -- ...
    end

    -- function
    function add_special_number(x)
        return x + 420
    end

    -- Lua has tables, which are similar to
    -- JavaScript objects. they function as
    -- dynamic dictionaries, arrays, as objects
    -- with methods, etc.

    -- array
    array = {}
    array[1] = 420
    array[2] = 69

    -- dynamic dictionary
    dict = {}
    dict["hello"] = "world"
    -- identical to previous statement
    dict.hello = "world"

    -- object
    object = {}
    object.number = 420
    object.add = function(self, x)
        return self.number + x
    end

    -- if using the colon symbol, you can
    -- call the method and the self parameter
    -- will be filled in automatically
    number = object:add(69)

    What does the init script do?


    First, let's go through the init.lua file and see what it does. It can be found in the /scripts/ directory in the project template.

    print("\n\nHello! [...]\n")
    -- ...

    This part just prints some text to the console.

    -- Retitling the main window.
    tram.ui.SetWindowTitle("Teapot Explorer v1.0")
    tram.ui.SetWindowSize(640, 480)

    This part sets the title of the window, which is opened automatically on program start. It also sets the size of the window.

    -- Setting up the global lighting.
    tram.render.SetSunColor(tram.math.vec3(0.0, 0.0, 0.0))
    tram.render.SetSunDirection(tram.math.DIRECTION_FORWARD)
    local ambient = tram.math.vec3(0.1, 0.1, 0.1)
    tram.render.SetAmbientColor(ambient)
    tram.render.SetScreenClearColor(tram.render.COLOR_BLACK)

    This section will set up the scene lighting. All of these functions accept a vec3 table. The tram.math.vec3(x, y, z) function constructs a vec3 table.

    -- Move the camera a bit away from the origin.
    local position = tram.math.DIRECTION_FORWARD * -1.2
    tram.render.SetViewPosition(position)

    By default, all new 3D models get created at the origin, which is the coordinates (0.0, 0.0, 0.0). The view also starts at this position, so we move it a bit back, so that it doesn't end up in the teapot.

    -- Setting up a light so that you can see something.
    scene_light = tram.components.Light()
    scene_light:SetColor(tram.render.COLOR_WHITE)
    scene_light:SetLocation(tram.math.vec3(5.0, 5.0, 5.0))
    scene_light:Init()

    Since the previous bit of code set the directional light's color to zero, it won't contribute to the scene's illumination, so here we create a light, so that you can actually see the teapot.

    -- Adding a teapot to the scene.
    teapot = tram.components.Render()
    teapot:SetModel("teapot")
    teapot:Init()

    Finally, we add the 3D model of the teapot to the scene.

    -- This vector here will contain teapot euler angle rotation in radians.
    local teapot_modifier = tram.math.vec3(0.0, 0.0, 0.0)

    In order to rotate the teapot, we need to set up its initial rotation.

    -- This function will be called every tick.
    tram.event.AddListener(tram.event.TICK, function()
      if tram.ui.PollKeyboardKey(tram.ui.KEY_LEFT)
       or tram.ui.PollKeyboardKey(tram.ui.KEY_A) then
        teapot_modifier = teapot_modifier
    	 - tram.math.vec3(0.01, 0.0, 0.0)
      end
      
      if tram.ui.PollKeyboardKey(tram.ui.KEY_RIGHT)
       or tram.ui.PollKeyboardKey(tram.ui.KEY_D) then
        teapot_modifier = teapot_modifier
    	 + tram.math.vec3(0.01, 0.0, 0.0)
      end
    	
      if tram.ui.PollKeyboardKey(tram.ui.KEY_UP)
       or tram.ui.PollKeyboardKey(tram.ui.KEY_W) then
        teapot_modifier = teapot_modifier
    	 - tram.math.vec3(0.01, 0.0, 0.0)
      end
    	
      if tram.ui.PollKeyboardKey(tram.ui.KEY_DOWN)
       or tram.ui.PollKeyboardKey(tram.ui.KEY_S) then
        teapot_modifier = teapot_modifier
    	 + tram.math.vec3(0.01, 0.0, 0.0)
      end
    	
      teapot:SetRotation(tram.math.quat(teapot_modifier))
    end)
    

    We need to execute the rotation logic during runtime. A good way to do it is to add an Event Listener and set it to listen to the Tick event, which is emitted at regular intervals.

    The code for the logic itself will check if the arrow keys are being pressed, and if they are, it will modify the rotation of the teapot. After all of the keys are checked and a new rotation is computed, it is assigned to the teapot's 3D model.

    Since all rotations use quaternions, we can pass the tram.math.quat() quaternion constructor a vec3, which will be interpreted as a vector containing euler angles, i.e. the rotations around the x, y and z axis.

    Teapot coloring.


    The default white teapot color is rather uninteresting. Let's change it to something more interesting.

    Add this line of code somewhere after the teapot variable is initialized:

    teapot:SetColor(tram.render.COLOR_PINK)

    All of the color definitions are just vec3s, so we can pass them in as the colors. The only thing to remember is that each color value needs to be in the range from 0.0 to 1.0.


    The teapot has been colored pink.

    Exercise


    Look up the hex or integer color values for your favorite color. Convert them into the range from 0.0 to 1.0 for each color channel and assign them to the teapot.

    At this point, you are probably very proud of your teapot coloring skills. Press the F12 key on your keyboard. This will save a screenshot of the teapot in your project directory. Print it out and mail it to your friends!

    Let's try doing something more interesting with the colors. Place these lines of code somewhere in the update function:

    local r = math.sin(tram.GetTickTime())
    local g = math.sin(tram.GetTickTime())
    local b = math.sin(tram.GetTickTime())

    local color = tram.math.vec3(r, g, b)

    -- the r, g, b values are in the range
    -- from -1.0 to 1.0 due to the sin()
    -- function, so we need to re-map them
    -- to the 0.0 to 1.0 range for colors

    color = color + 1.0
    color = color * 0.5

    teapot:SetColor(color)


    The teapot fades from white to black and then back to white.

    We can make this even more interesting. Let's add a different phase shift to each of the color channels.

    local r = math.sin(tram.GetTickTime() + 1.0)
    local g = math.sin(tram.GetTickTime() + 2.0)
    local b = math.sin(tram.GetTickTime() + 4.0)


    The teapot cycles through all of the colors.

    Exercise


    Now that you can dynamically change a vec3 for colors, how about dynamically changing the teapot's position and rotation?

    Exercise


    Maybe try changing the color of the scene's light.

    Exercise


    The code for controlling the teapot's rotation is already set up. Maybe add the option to not only be able to change the rotation of the teapot, but also its position?

    ================================================ FILE: docs/src/learn/structure.html ================================================

    Structure of a project

    Your project files are located in your project directory. It also contains several other directories. This is how these are structured and where everything is located.

    /assets/

    Currently there are no tools which use this particular directory, but there will be in the future.

    The assets directory is meant to shadow the structure of the data directory, with the main difference that the data files are stored in an editable format. For example, the assets directory could contain /assets/models/frogs/green.blend file and it would have its counterpart /data/models/frogs/green.dymdl which is prepared from the first file.

    /data/

    This is the main data directory. It contains the directories for various resources, as well as language files, editor settings and entity definition files (might be moved in the future) and the material definition files.

    /data/animations/

    This directory contains the all of the Animation resources.

    /data/audio/

    This directory contains the all of the Sound resources.

    /data/models/

    This directory contains the all of the 3D model resources.

    /data/navmesh/

    This directory contains the all of the Navmeshes.

    /data/paths/

    This directory contains the all of the Paths.

    /data/sprites/

    This directory contains the all of the Sprite resources.

    /data/textures/

    This directory contains the all of the textures for the Material resources.

    /data/sprites/

    This directory contains the all of the WorldCells.

    /scripts/

    This directory contains all of the scripts. When the Script system is initialized with a scripting language initialized, it will load the api file, which contains the language-specific script bindings.

    For Lua, this is the api.lua file. You probably should avoid editing it, unless you know what you are doing.

    There is also an init file. This is loaded by the template project after initializing all of the framework's systems. You can edit this file and put whatever you want in it.

    /shaders/

    This directory contains all of the shaders for the rendering backends that support shaders. You can edit them if you want.

    /src/

    Contains all of the C++ source code for the project.

    /

    The project root directory contains the executable file for the application, as well as various configuration files. This is also the working directory from which the various tools and utilities need to be launched from.

    ================================================ FILE: docs/src/learn/walking.html ================================================

    Walking around a world

    // TODO: implement

    ================================================ FILE: docs/src/learn/whatis.html ================================================

    What it is and what does it do?


    Tramway Drifting and Dungeon Exploration Simulator Software Development Kit consists of approximately 30 000 lines of code. These lines of code have been written, so that you don't have to.

    The main goal of this project is to enable the creation of real-time 3D graphics applications. These applications could be video games, virtual reality spaces, various visualizations, etc.

    Most of the code of this project is contained in the Tramway SDK runtime. The runtime is implemented as a C++ library, which can be embedded into existing applications, or used as a standalone application, using the Lua API for scripting.

    In addition to the runtime, the project also consists of a graphical level editor, 3D content authoring plugins for the Blender 3D modeling application, as well as various commandline utilities.

    In the future, the project will be enhanced by the addition of additional applications and utilities.

    ================================================ FILE: docs/src/learn/world.html ================================================

    Creating a world

    // TODO: implement

    ================================================ FILE: docs/src/learn.html ================================================

    Learn

    Here's all of the «guide» style documentation. It's meant to showcase the framework in a less formal and structured way.

    If you have no idea what it is and how to use it, this is a good place to start.

    Basic stuff

    1. What it is and what does it do?
    2. Getting started
    3. Structure of a project
    4. Basic scripting
    5. Adding 3D models
    6. Adding Materials
    7. Adding Animations
    8. Making Ping Pong
    9. Physics
    10. Render
    11. Creating a world
    12. Walking around a world
    13. Cameras, how do they work?
    14. Platforms and stuff
    15. Making a cake simulator

    ================================================ FILE: docs/src/manual/audio/api.md ================================================ # API The low-level API of the audio system for the library. I tried to make it modular, so that it's possible to swap out the back-end calls for different platforms. It's really basic right now, but I will add audio effects and other stuff to it later. The library currently supports OpenAL as the back-end. There's also a spatial audio back-end, but it's only a prototype. ================================================ FILE: docs/src/manual/audio/audio.md ================================================ # Audio Right now the library's audio system doesn't have that many features, but it's possible to load up `.ogg` audio files and play them back. ## Initialization The Core and the UI systems need to be initialized first. Then `Audio::Init()` function will initialize the audio system. `Audio::Update()` needs to be called once a frame and `Audio::Uninit()` when exiting the application. ## Sounds Sounds are considered Resources and can be streamed in from disk. To play them, use an AudioComponent. ================================================ FILE: docs/src/manual/components/animation.md ================================================ # Animation The AnimationComponent component plays Animations. As in 3D animations for 3D models. It can also be used for making procedural animations. To actually see the animations, AnimationComponent needs to be linked with a RenderComponent. ## Usage ``` // create the component Component component; component.make(); // give it the model that it will play animations on component->SetModel("model-name"); // initialize it component->Init(); // play an animation component->PlayAnimation("animation-name", 1, 1.0f, 1.0f); ``` ## Notes Right now, before playing animations, they need to be loaded first. They are not automatically streamed in from disk. ``` Render::Animation::Find("animation-name")->LoadFromDisk(); ``` Idk, might change this later. ================================================ FILE: docs/src/manual/components/audio.md ================================================ # Audio The AudioComponent plays Sounds. ## Usage ``` // create the component Component component; component.make(); // give it the sound that it will play component->SetSound("sound-name"); // set the location of the component in the world componnt->SetLocation({0.0f, 0.0f, 0.0f}); // initialize it component->Init(); // play the sound component->Play(); ``` ================================================ FILE: docs/src/manual/components/components.md ================================================ # Components EntityComponents are reusable pieces of logic for entities, but most of them can also be used on their own. Some of them are wrappers around low-level APIs, others are completely new. ## How do they work Most components need to be created in their respective Pools, which can be done with the `Component` smart pointer (or by asking the Pool directly). Then they get fed some parameters and their `Init()` method is called. After they are no longer needed, they can be deleted. ``` // define a component smart-pointer Component component; // create a new component instance component.make(); // feed it some parameters component->SetFoo("123"); component->SetBar(321); // initialize it component->Init(); // when not needed anymore, the component can be deleted component.clear(); ``` ================================================ FILE: docs/src/manual/components/controller.md ================================================ # Controller The ControllerComponent controls the player or any other character. It's a bit unfinished. See PlayerComponent for how this component could be used. ================================================ FILE: docs/src/manual/components/light.md ================================================ # Light The LightComponent is a wrapper around Lights in the Rendering. ================================================ FILE: docs/src/manual/components/particle.md ================================================ # Particle The ParticleComponent emits particles. It's unfinished. ================================================ FILE: docs/src/manual/components/physics.md ================================================ # Physics The PhysicsComponent is a wrapper around a rigidbody in the Physics system. ================================================ FILE: docs/src/manual/components/player.md ================================================ # Player The PlayerComponent maps keyboard/mouse inputs to CharacterController inputs. It's unfinished. ================================================ FILE: docs/src/manual/components/sprite.md ================================================ # Sprite The SpriteComponent is unfinished. ================================================ FILE: docs/src/manual/components/trigger.md ================================================ # Trigger The TriggerComponent is used to trigger stuff from the Physics simulation. ================================================ FILE: docs/src/manual/config.md ================================================ # Config The library has a `config.h` file. It contains some configurations as to how the library should be compiled. Right now there isn't much stuff in it, but I'll add some stuff later. ================================================ FILE: docs/src/manual/main.md ================================================ # Main The library code contains a main.cpp that I use for testing, you can ignore it. ================================================ FILE: docs/src/manual/manual.md ================================================ # Manual Here's some stuff about how the stuff works and stuff. Stuff! It's unfinished. The layout of the manual is supposed to mirror the layout of the code, btw. ================================================ FILE: docs/src/patterns.html ================================================

    Design Patterns Used


    When all of the patterns get used, I will delete the project and rewrite it in Rust. With no OOP.

    Pattern Where is it used?
    Abstract factory Not used.
    Builder Not used.
    Factory method Used all over the place.
    Prototype Used in the level editor for objects. Some objects can be cloned.
    Singleton PoolProxy class is used to force a single Pool template instantiation per type.
    Adapter There's probably some adapters in there, but can't remember a specific example.
    Bridge Definitely somewhere in there.
    Composite Used for level editor objects.
    Decorator Used for scripting API.
    Facade Used for the file abstraction.
    Flyweight Dynamically created collisionshapes use the same underlying object if their types and dimensions are the same.
    Proxy Used by some resources.
    Chain of responsiblity Not used.
    Command Messages are essentially commands.
    Interpreter Used by the quest extension for nocode scripting.
    Iterator Used all over the place.
    Mediator Not used.
    Memento Used for undo/redo functionality in the level editor.
    Observer Event listeners are essentially observers.
    State Used for tools in the level editor.
    Strategy Used by the file abstraction.
    Template method Used by resources, entities and entity components for their life cycles and stuff.
    Visitor Probably used somewhere in there.
    ================================================ FILE: docs/src/roadmap.html ================================================

    Roadmap

    Tasks that have been completed and are a success are marked with strikethrough. Some tasks are only partially completed.

    Audio
    Add an option to attach audio effects to audio sources. The OpenAL backend supports this. Other possible, future backends might also support this.
    Add an option to automatically determine audio effects for audio sources. This could be implemented as reverb zones, which are manually placed in levels, or the parameters of the effects could be determined using raycasts, or with other means.
    Add an option to play back tracker files There are libraries which should be able to play back tracker files. One of them could be integrated into the audio system.
    Animation
    Add events to animations It should be possible to add a callback for a specific bone, and when a keyframe for that bone is reached, it would trigger the callback. This would allow syncing up code to animations.
    Language
    Add UTF-16 strings Currently it is possible to only use 256 different characters in text. By switching strings from char to wchar, we could use all of the characters.
    Graph
    Add Paths It would be neat if you could have entities follow a path that is laid down in the level editor.
    Add Navmeshes Navmeshes would allow better navigation by NPCs.
    Note: only navmesh editing and loading has been implemented, no navmesh navigation has been implemented yet.
    Serialization
    Add serialization Serialization was yeeted out, but it should be very easy to put it back in. This would allow saving the state of the application.
    Files
    Add virtual file system This would allow files to be read not only from disk, but also archives. Files could also be written to archives. Files could also be read using HTTP GET and written as POST requests.
    Rendering
    Add sphere maps This would allow reflective surfaces. Would also need to add some way to automatically capture.
    Light probes Implemented using spherical harmonics or something similar.
    Detail textures would be neat
    Bump/normal mapping Mor edetails good!
    Note: normal mapping implemented, but only for raytracing rendering backend.
    Planar reflections Using with stencils or something
    Transparency There already is, but it is not !! is not good! --> not blendered
    Decals Would allow projecting! images and that would be good.
    Note: currently basic implementation done, still needs optimizations.
    Applets
    Material Editor This would allow the creation of new materials interactively. It would also mean that you don't have to edit the material text files directly.
    Model/Animation Viewer This applet would allow the previewing 3D models, as well as playing back animations on them. This would be useful for previewing 3D models and animations. It could also be used as a 3D model picker/palette tool for other applications, or added as a default viewer program for .DYMDL and .STMDL files, so that they can be opened directly form the operating system's shell.
    Modification Model Editor Currently modification models can only be created using a text editor. It would be easier to create them in an applet that can immediately display the newly created 3D model.
    Language Editor Editing strings would be nicer if done in a GUI. It would also allow the comparison of strings in different languages and would allow detecting missing language strings easier.
    Soundtable Editor It might be useful to have an editor for soundtables, which also has a sound preview functionality.
    Animationtable Editor It would allow previewing of animation states in real time. Could be useful.
    Sprite Editor Would be better than using a text editor.
    ================================================ FILE: docs/src/template.html ================================================ <!-- PAGE_TITLE -->
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links















    ================================================ FILE: docs/src/why.html ================================================

    Why Tramway SDK


    Tramway SDK (heavy metal spelling – T̈ra̦m̊ẅa̦ÿ SD̈K) is a graphics package/framework/game engine that I have been working on for the past 3 years.

    In this article I attempt to turn you against mainstream engines and I will explain, in detail, why Tramway SDK is not as awful as them.

    Unreasonable system requirements due to Turbobloat


    Unity needs very powerful hardware and consumes enough power to burn down a rainforest. Godot is slightly better, but you still need relatively capable hardware.

    But what if all that you really want to make is just a lowpoly horror roguelite deckbuilder simulator? 15 year old hardware is more than capable of running a game like that, but not if you use a mainstream engine, due to Turbobloat.

    Tramway SDK can run on virtually any hardware from the last 15 years, since it is not Turbobloated. It doesn't even need a graphics card, since it can be switched to use software rasterization, making it perfect for displaying graphics on toasters and fridges.

    Some might say "just get a better computer". This is why getting a better computer is bad:

    1. Affordance

      A lot of people, especially from 3rd world countries are very poor and can't afford to buy hardware to run Turbobloat.

    2. e-Waste

      Producing computer chips is very bad on the environment. If modern software wasn't Turbobloated you would buy new hardware only when the previous hardware broke and wasn't repairable.

    3. Not putting up with Turbobloat

      Why spend money on another computer if you already have one that works perfectly fine? Just because of someone else's turbobloat? You could buy 1000 cans of Dr. Pepper instead.

    Nodes are bad


    A thing should be a thing. It should not be a bunch of things pretending to be a single thing. With nodes you have to pretend that a collection of things is a single thing.

    Also when creating things with nodes, you have to go back and forth between node GUI and code.

    In Tramway SDK you just subclass the Entity class and write the code. After that you make a level using the level editor. No going back and forth. No nodes, just entities.

    Monolithism


    All of the mainstream engines have a monolithic game editor. It doesn't matter how many features you use from it, you still have to wait 10 minutes for all of them to load in.

    Tramway SDK has editors, but all of them are optional. If you just want to use it as a framework, you can use only the C++ runtime. If you want to build levels, you can use only the level editor and no other GUI tool.

    Data files are stored as whitespace-seperated-values, so you could even edit all of the data files by hand, without using a single editor.

    Bad graphics


    Most Unity games look like very bad, even with fancy shaders, normal mapping and other techniques.

    Look at what Tramway SDK can do with just lightmapping and Gouraud shading:


    This could be rendered on a Direct3D 7 level graphics card with a fixed-function pipeline.

    Quake level editors


    Brush based level geometry is very good and you can prototype levels with it very quickly. Tramway SDK has a .map file converter, which converts brushes into triangle meshes.


    Level being created in the Trenchbroom map editor.


    Level being set up in the Tramway SDK level editor.


    Level with lightmaps being rendered in-engine.

    Wow! Look at this very fancy level. Not only can we create brush-based levels, we even have an input/output system like in Source to set up interactions between entities in levels.


    Very fancy interaction editor.

    In the future I will be implementing all of the Source logic entities, so that you can do visual scripting right in the level editor.

    Framework for RPGs


    I think that it is very interesting to see the different kinds of games that can be created in a tool like RPG Maker. There's also tons of mods, even total conversions based on Morrowind. You can do a lot of stuff by changing the data, even in the RPG mechanics have already preprogrammed.


    Editor for the RPG framework.

    Since the engine was designed to support level streaming from the very beginning, it should make the creation of open-world RPG-ish games very quick and very easy.


    Everyone always says that you "shouldn't create an open-world RPG", but that's just because they have never tried using the Trawmay SDK.

    TL; DR


    Tramway SDK is a game engine based on Quake/Source style entities, supports open-world streaming, comes with optional extensions, like the RPG framework that is sort like RPG Maker, but for 3D.

    This project is still in very early development. APIs are unstable, stuff breaks or just doesn't work, a lot of things still haven't been implemented, but it's getting better very quickly.

    Click here for the Github repo!
    ================================================ FILE: docs/why.html ================================================ Why Tramway SDK | Tramway Drifting and Dungeon Exploration Simulator Software Development Kit
    Latest release
    Tramway SDK 0.1.1
    Github
    Download
    Installer (win64)
    Portable .zip (win64)
    Starter Template
    Quick links
    Home
    Get Started

    Why Tramway SDK


    Tramway SDK (heavy metal spelling – T̈ra̦m̊ẅa̦ÿ SD̈K) is a graphics package/framework/game engine that I have been working on for the past 3 years.

    In this article I attempt to turn you against mainstream engines and I will explain, in detail, why Tramway SDK is not as awful as them.

    Unreasonable system requirements due to Turbobloat


    Unity needs very powerful hardware and consumes enough power to burn down a rainforest. Godot is slightly better, but you still need relatively capable hardware.

    But what if all that you really want to make is just a lowpoly horror roguelite deckbuilder simulator? 15 year old hardware is more than capable of running a game like that, but not if you use a mainstream engine, due to Turbobloat.

    Tramway SDK can run on virtually any hardware from the last 15 years, since it is not Turbobloated. It doesn't even need a graphics card, since it can be switched to use software rasterization, making it perfect for displaying graphics on toasters and fridges.

    Some might say "just get a better computer". This is why getting a better computer is bad:

    1. Affordance

      A lot of people, especially from 3rd world countries are very poor and can't afford to buy hardware to run Turbobloat.

    2. e-Waste

      Producing computer chips is very bad on the environment. If modern software wasn't Turbobloated you would buy new hardware only when the previous hardware broke and wasn't repairable.

    3. Not putting up with Turbobloat

      Why spend money on another computer if you already have one that works perfectly fine? Just because of someone else's turbobloat? You could buy 1000 cans of Dr. Pepper instead.

    Nodes are bad


    A thing should be a thing. It should not be a bunch of things pretending to be a single thing. With nodes you have to pretend that a collection of things is a single thing.

    Also when creating things with nodes, you have to go back and forth between node GUI and code.

    In Tramway SDK you just subclass the Entity class and write the code. After that you make a level using the level editor. No going back and forth. No nodes, just entities.

    Monolithism


    All of the mainstream engines have a monolithic game editor. It doesn't matter how many features you use from it, you still have to wait 10 minutes for all of them to load in.

    Tramway SDK has editors, but all of them are optional. If you just want to use it as a framework, you can use only the C++ runtime. If you want to build levels, you can use only the level editor and no other GUI tool.

    Data files are stored as whitespace-seperated-values, so you could even edit all of the data files by hand, without using a single editor.

    Bad graphics


    Most Unity games look like very bad, even with fancy shaders, normal mapping and other techniques.

    Look at what Tramway SDK can do with just lightmapping and Gouraud shading:


    This could be rendered on a Direct3D 7 level graphics card with a fixed-function pipeline.

    Quake level editors


    Brush based level geometry is very good and you can prototype levels with it very quickly. Tramway SDK has a .map file converter, which converts brushes into triangle meshes.


    Level being created in the Trenchbroom map editor.


    Level being set up in the Tramway SDK level editor.


    Level with lightmaps being rendered in-engine.

    Wow! Look at this very fancy level. Not only can we create brush-based levels, we even have an input/output system like in Source to set up interactions between entities in levels.


    Very fancy interaction editor.

    In the future I will be implementing all of the Source logic entities, so that you can do visual scripting right in the level editor.

    Framework for RPGs


    I think that it is very interesting to see the different kinds of games that can be created in a tool like RPG Maker. There's also tons of mods, even total conversions based on Morrowind. You can do a lot of stuff by changing the data, even in the RPG mechanics have already preprogrammed.


    Editor for the RPG framework.

    Since the engine was designed to support level streaming from the very beginning, it should make the creation of open-world RPG-ish games very quick and very easy.


    Everyone always says that you "shouldn't create an open-world RPG", but that's just because they have never tried using the Trawmay SDK.

    TL; DR


    Tramway SDK is a game engine based on Quake/Source style entities, supports open-world streaming, comes with optional extensions, like the RPG framework that is sort like RPG Maker, but for 3D.

    This project is still in very early development. APIs are unstable, stuff breaks or just doesn't work, a lot of things still haven't been implemented, but it's getting better very quickly.

    Click here for the Github repo!















    ================================================ FILE: libraries/README.md ================================================ # Libraries This directory contains all of the dependencies of the framework part of the SDK. The header files for the various libraries used in the framework are provided here, for convenience, as well as binaries for 64-bit windows, since compiling all of the libraries from source would take about an hour. Some of these libraries are not covered under the MIT license, so check before modifying them. ## Bullet physics 3.17 ## glm ## OpenAL-soft ## PortAudio 19.7.0 ## glad ## glfw ## MurmurHash2 ## stb_image ## stb_image_write ## stb_vorbis ## lua 5.4.6 ## SDL 2.30.4 ## xatlas Thanks to everyone for licensing their work under free licenses, so that I can appropriate it. ================================================ FILE: libraries/bullet/BulletCollision/BroadphaseCollision/btAxisSweep3.h ================================================ //Bullet Continuous Collision Detection and Physics Library //Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ // // btAxisSweep3.h // // Copyright (c) 2006 Simon Hobbs // // This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source distribution. #ifndef BT_AXIS_SWEEP_3_H #define BT_AXIS_SWEEP_3_H #include "LinearMath/btVector3.h" #include "btOverlappingPairCache.h" #include "btBroadphaseInterface.h" #include "btBroadphaseProxy.h" #include "btOverlappingPairCallback.h" #include "btDbvtBroadphase.h" #include "btAxisSweep3Internal.h" /// The btAxisSweep3 is an efficient implementation of the 3d axis sweep and prune broadphase. /// It uses arrays rather then lists for storage of the 3 axis. Also it operates using 16 bit integer coordinates instead of floats. /// For large worlds and many objects, use bt32BitAxisSweep3 or btDbvtBroadphase instead. bt32BitAxisSweep3 has higher precision and allows more then 16384 objects at the cost of more memory and bit of performance. class btAxisSweep3 : public btAxisSweep3Internal { public: btAxisSweep3(const btVector3& worldAabbMin, const btVector3& worldAabbMax, unsigned short int maxHandles = 16384, btOverlappingPairCache* pairCache = 0, bool disableRaycastAccelerator = false); }; /// The bt32BitAxisSweep3 allows higher precision quantization and more objects compared to the btAxisSweep3 sweep and prune. /// This comes at the cost of more memory per handle, and a bit slower performance. /// It uses arrays rather then lists for storage of the 3 axis. class bt32BitAxisSweep3 : public btAxisSweep3Internal { public: bt32BitAxisSweep3(const btVector3& worldAabbMin, const btVector3& worldAabbMax, unsigned int maxHandles = 1500000, btOverlappingPairCache* pairCache = 0, bool disableRaycastAccelerator = false); }; #endif ================================================ FILE: libraries/bullet/BulletCollision/BroadphaseCollision/btAxisSweep3Internal.h ================================================ //Bullet Continuous Collision Detection and Physics Library //Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ // // btAxisSweep3.h // // Copyright (c) 2006 Simon Hobbs // // This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source distribution. #ifndef BT_AXIS_SWEEP_3_INTERNAL_H #define BT_AXIS_SWEEP_3_INTERNAL_H #include "LinearMath/btVector3.h" #include "btOverlappingPairCache.h" #include "btBroadphaseInterface.h" #include "btBroadphaseProxy.h" #include "btOverlappingPairCallback.h" #include "btDbvtBroadphase.h" //#define DEBUG_BROADPHASE 1 #define USE_OVERLAP_TEST_ON_REMOVES 1 /// The internal templace class btAxisSweep3Internal implements the sweep and prune broadphase. /// It uses quantized integers to represent the begin and end points for each of the 3 axis. /// Dont use this class directly, use btAxisSweep3 or bt32BitAxisSweep3 instead. template class btAxisSweep3Internal : public btBroadphaseInterface { protected: BP_FP_INT_TYPE m_bpHandleMask; BP_FP_INT_TYPE m_handleSentinel; public: BT_DECLARE_ALIGNED_ALLOCATOR(); class Edge { public: BP_FP_INT_TYPE m_pos; // low bit is min/max BP_FP_INT_TYPE m_handle; BP_FP_INT_TYPE IsMax() const { return static_cast(m_pos & 1); } }; public: class Handle : public btBroadphaseProxy { public: BT_DECLARE_ALIGNED_ALLOCATOR(); // indexes into the edge arrays BP_FP_INT_TYPE m_minEdges[3], m_maxEdges[3]; // 6 * 2 = 12 // BP_FP_INT_TYPE m_uniqueId; btBroadphaseProxy* m_dbvtProxy; //for faster raycast //void* m_pOwner; this is now in btBroadphaseProxy.m_clientObject SIMD_FORCE_INLINE void SetNextFree(BP_FP_INT_TYPE next) { m_minEdges[0] = next; } SIMD_FORCE_INLINE BP_FP_INT_TYPE GetNextFree() const { return m_minEdges[0]; } }; // 24 bytes + 24 for Edge structures = 44 bytes total per entry protected: btVector3 m_worldAabbMin; // overall system bounds btVector3 m_worldAabbMax; // overall system bounds btVector3 m_quantize; // scaling factor for quantization BP_FP_INT_TYPE m_numHandles; // number of active handles BP_FP_INT_TYPE m_maxHandles; // max number of handles Handle* m_pHandles; // handles pool BP_FP_INT_TYPE m_firstFreeHandle; // free handles list Edge* m_pEdges[3]; // edge arrays for the 3 axes (each array has m_maxHandles * 2 + 2 sentinel entries) void* m_pEdgesRawPtr[3]; btOverlappingPairCache* m_pairCache; ///btOverlappingPairCallback is an additional optional user callback for adding/removing overlapping pairs, similar interface to btOverlappingPairCache. btOverlappingPairCallback* m_userPairCallback; bool m_ownsPairCache; int m_invalidPair; ///additional dynamic aabb structure, used to accelerate ray cast queries. ///can be disabled using a optional argument in the constructor btDbvtBroadphase* m_raycastAccelerator; btOverlappingPairCache* m_nullPairCache; // allocation/deallocation BP_FP_INT_TYPE allocHandle(); void freeHandle(BP_FP_INT_TYPE handle); bool testOverlap2D(const Handle* pHandleA, const Handle* pHandleB, int axis0, int axis1); #ifdef DEBUG_BROADPHASE void debugPrintAxis(int axis, bool checkCardinality = true); #endif //DEBUG_BROADPHASE //Overlap* AddOverlap(BP_FP_INT_TYPE handleA, BP_FP_INT_TYPE handleB); //void RemoveOverlap(BP_FP_INT_TYPE handleA, BP_FP_INT_TYPE handleB); void sortMinDown(int axis, BP_FP_INT_TYPE edge, btDispatcher* dispatcher, bool updateOverlaps); void sortMinUp(int axis, BP_FP_INT_TYPE edge, btDispatcher* dispatcher, bool updateOverlaps); void sortMaxDown(int axis, BP_FP_INT_TYPE edge, btDispatcher* dispatcher, bool updateOverlaps); void sortMaxUp(int axis, BP_FP_INT_TYPE edge, btDispatcher* dispatcher, bool updateOverlaps); public: btAxisSweep3Internal(const btVector3& worldAabbMin, const btVector3& worldAabbMax, BP_FP_INT_TYPE handleMask, BP_FP_INT_TYPE handleSentinel, BP_FP_INT_TYPE maxHandles = 16384, btOverlappingPairCache* pairCache = 0, bool disableRaycastAccelerator = false); virtual ~btAxisSweep3Internal(); BP_FP_INT_TYPE getNumHandles() const { return m_numHandles; } virtual void calculateOverlappingPairs(btDispatcher* dispatcher); BP_FP_INT_TYPE addHandle(const btVector3& aabbMin, const btVector3& aabbMax, void* pOwner, int collisionFilterGroup, int collisionFilterMask, btDispatcher* dispatcher); void removeHandle(BP_FP_INT_TYPE handle, btDispatcher* dispatcher); void updateHandle(BP_FP_INT_TYPE handle, const btVector3& aabbMin, const btVector3& aabbMax, btDispatcher* dispatcher); SIMD_FORCE_INLINE Handle* getHandle(BP_FP_INT_TYPE index) const { return m_pHandles + index; } virtual void resetPool(btDispatcher* dispatcher); void processAllOverlappingPairs(btOverlapCallback* callback); //Broadphase Interface virtual btBroadphaseProxy* createProxy(const btVector3& aabbMin, const btVector3& aabbMax, int shapeType, void* userPtr, int collisionFilterGroup, int collisionFilterMask, btDispatcher* dispatcher); virtual void destroyProxy(btBroadphaseProxy* proxy, btDispatcher* dispatcher); virtual void setAabb(btBroadphaseProxy* proxy, const btVector3& aabbMin, const btVector3& aabbMax, btDispatcher* dispatcher); virtual void getAabb(btBroadphaseProxy* proxy, btVector3& aabbMin, btVector3& aabbMax) const; virtual void rayTest(const btVector3& rayFrom, const btVector3& rayTo, btBroadphaseRayCallback& rayCallback, const btVector3& aabbMin = btVector3(0, 0, 0), const btVector3& aabbMax = btVector3(0, 0, 0)); virtual void aabbTest(const btVector3& aabbMin, const btVector3& aabbMax, btBroadphaseAabbCallback& callback); void quantize(BP_FP_INT_TYPE* out, const btVector3& point, int isMax) const; ///unQuantize should be conservative: aabbMin/aabbMax should be larger then 'getAabb' result void unQuantize(btBroadphaseProxy* proxy, btVector3& aabbMin, btVector3& aabbMax) const; bool testAabbOverlap(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1); btOverlappingPairCache* getOverlappingPairCache() { return m_pairCache; } const btOverlappingPairCache* getOverlappingPairCache() const { return m_pairCache; } void setOverlappingPairUserCallback(btOverlappingPairCallback* pairCallback) { m_userPairCallback = pairCallback; } const btOverlappingPairCallback* getOverlappingPairUserCallback() const { return m_userPairCallback; } ///getAabb returns the axis aligned bounding box in the 'global' coordinate frame ///will add some transform later virtual void getBroadphaseAabb(btVector3& aabbMin, btVector3& aabbMax) const { aabbMin = m_worldAabbMin; aabbMax = m_worldAabbMax; } virtual void printStats() { /* printf("btAxisSweep3.h\n"); printf("numHandles = %d, maxHandles = %d\n",m_numHandles,m_maxHandles); printf("aabbMin=%f,%f,%f,aabbMax=%f,%f,%f\n",m_worldAabbMin.getX(),m_worldAabbMin.getY(),m_worldAabbMin.getZ(), m_worldAabbMax.getX(),m_worldAabbMax.getY(),m_worldAabbMax.getZ()); */ } }; //////////////////////////////////////////////////////////////////// #ifdef DEBUG_BROADPHASE #include template void btAxisSweep3::debugPrintAxis(int axis, bool checkCardinality) { int numEdges = m_pHandles[0].m_maxEdges[axis]; printf("SAP Axis %d, numEdges=%d\n", axis, numEdges); int i; for (i = 0; i < numEdges + 1; i++) { Edge* pEdge = m_pEdges[axis] + i; Handle* pHandlePrev = getHandle(pEdge->m_handle); int handleIndex = pEdge->IsMax() ? pHandlePrev->m_maxEdges[axis] : pHandlePrev->m_minEdges[axis]; char beginOrEnd; beginOrEnd = pEdge->IsMax() ? 'E' : 'B'; printf(" [%c,h=%d,p=%x,i=%d]\n", beginOrEnd, pEdge->m_handle, pEdge->m_pos, handleIndex); } if (checkCardinality) btAssert(numEdges == m_numHandles * 2 + 1); } #endif //DEBUG_BROADPHASE template btBroadphaseProxy* btAxisSweep3Internal::createProxy(const btVector3& aabbMin, const btVector3& aabbMax, int shapeType, void* userPtr, int collisionFilterGroup, int collisionFilterMask, btDispatcher* dispatcher) { (void)shapeType; BP_FP_INT_TYPE handleId = addHandle(aabbMin, aabbMax, userPtr, collisionFilterGroup, collisionFilterMask, dispatcher); Handle* handle = getHandle(handleId); if (m_raycastAccelerator) { btBroadphaseProxy* rayProxy = m_raycastAccelerator->createProxy(aabbMin, aabbMax, shapeType, userPtr, collisionFilterGroup, collisionFilterMask, dispatcher); handle->m_dbvtProxy = rayProxy; } return handle; } template void btAxisSweep3Internal::destroyProxy(btBroadphaseProxy* proxy, btDispatcher* dispatcher) { Handle* handle = static_cast(proxy); if (m_raycastAccelerator) m_raycastAccelerator->destroyProxy(handle->m_dbvtProxy, dispatcher); removeHandle(static_cast(handle->m_uniqueId), dispatcher); } template void btAxisSweep3Internal::setAabb(btBroadphaseProxy* proxy, const btVector3& aabbMin, const btVector3& aabbMax, btDispatcher* dispatcher) { Handle* handle = static_cast(proxy); handle->m_aabbMin = aabbMin; handle->m_aabbMax = aabbMax; updateHandle(static_cast(handle->m_uniqueId), aabbMin, aabbMax, dispatcher); if (m_raycastAccelerator) m_raycastAccelerator->setAabb(handle->m_dbvtProxy, aabbMin, aabbMax, dispatcher); } template void btAxisSweep3Internal::rayTest(const btVector3& rayFrom, const btVector3& rayTo, btBroadphaseRayCallback& rayCallback, const btVector3& aabbMin, const btVector3& aabbMax) { if (m_raycastAccelerator) { m_raycastAccelerator->rayTest(rayFrom, rayTo, rayCallback, aabbMin, aabbMax); } else { //choose axis? BP_FP_INT_TYPE axis = 0; //for each proxy for (BP_FP_INT_TYPE i = 1; i < m_numHandles * 2 + 1; i++) { if (m_pEdges[axis][i].IsMax()) { rayCallback.process(getHandle(m_pEdges[axis][i].m_handle)); } } } } template void btAxisSweep3Internal::aabbTest(const btVector3& aabbMin, const btVector3& aabbMax, btBroadphaseAabbCallback& callback) { if (m_raycastAccelerator) { m_raycastAccelerator->aabbTest(aabbMin, aabbMax, callback); } else { //choose axis? BP_FP_INT_TYPE axis = 0; //for each proxy for (BP_FP_INT_TYPE i = 1; i < m_numHandles * 2 + 1; i++) { if (m_pEdges[axis][i].IsMax()) { Handle* handle = getHandle(m_pEdges[axis][i].m_handle); if (TestAabbAgainstAabb2(aabbMin, aabbMax, handle->m_aabbMin, handle->m_aabbMax)) { callback.process(handle); } } } } } template void btAxisSweep3Internal::getAabb(btBroadphaseProxy* proxy, btVector3& aabbMin, btVector3& aabbMax) const { Handle* pHandle = static_cast(proxy); aabbMin = pHandle->m_aabbMin; aabbMax = pHandle->m_aabbMax; } template void btAxisSweep3Internal::unQuantize(btBroadphaseProxy* proxy, btVector3& aabbMin, btVector3& aabbMax) const { Handle* pHandle = static_cast(proxy); unsigned short vecInMin[3]; unsigned short vecInMax[3]; vecInMin[0] = m_pEdges[0][pHandle->m_minEdges[0]].m_pos; vecInMax[0] = m_pEdges[0][pHandle->m_maxEdges[0]].m_pos + 1; vecInMin[1] = m_pEdges[1][pHandle->m_minEdges[1]].m_pos; vecInMax[1] = m_pEdges[1][pHandle->m_maxEdges[1]].m_pos + 1; vecInMin[2] = m_pEdges[2][pHandle->m_minEdges[2]].m_pos; vecInMax[2] = m_pEdges[2][pHandle->m_maxEdges[2]].m_pos + 1; aabbMin.setValue((btScalar)(vecInMin[0]) / (m_quantize.getX()), (btScalar)(vecInMin[1]) / (m_quantize.getY()), (btScalar)(vecInMin[2]) / (m_quantize.getZ())); aabbMin += m_worldAabbMin; aabbMax.setValue((btScalar)(vecInMax[0]) / (m_quantize.getX()), (btScalar)(vecInMax[1]) / (m_quantize.getY()), (btScalar)(vecInMax[2]) / (m_quantize.getZ())); aabbMax += m_worldAabbMin; } template btAxisSweep3Internal::btAxisSweep3Internal(const btVector3& worldAabbMin, const btVector3& worldAabbMax, BP_FP_INT_TYPE handleMask, BP_FP_INT_TYPE handleSentinel, BP_FP_INT_TYPE userMaxHandles, btOverlappingPairCache* pairCache, bool disableRaycastAccelerator) : m_bpHandleMask(handleMask), m_handleSentinel(handleSentinel), m_pairCache(pairCache), m_userPairCallback(0), m_ownsPairCache(false), m_invalidPair(0), m_raycastAccelerator(0) { BP_FP_INT_TYPE maxHandles = static_cast(userMaxHandles + 1); //need to add one sentinel handle if (!m_pairCache) { void* ptr = btAlignedAlloc(sizeof(btHashedOverlappingPairCache), 16); m_pairCache = new (ptr) btHashedOverlappingPairCache(); m_ownsPairCache = true; } if (!disableRaycastAccelerator) { m_nullPairCache = new (btAlignedAlloc(sizeof(btNullPairCache), 16)) btNullPairCache(); m_raycastAccelerator = new (btAlignedAlloc(sizeof(btDbvtBroadphase), 16)) btDbvtBroadphase(m_nullPairCache); //m_pairCache); m_raycastAccelerator->m_deferedcollide = true; //don't add/remove pairs } //btAssert(bounds.HasVolume()); // init bounds m_worldAabbMin = worldAabbMin; m_worldAabbMax = worldAabbMax; btVector3 aabbSize = m_worldAabbMax - m_worldAabbMin; BP_FP_INT_TYPE maxInt = m_handleSentinel; m_quantize = btVector3(btScalar(maxInt), btScalar(maxInt), btScalar(maxInt)) / aabbSize; // allocate handles buffer, using btAlignedAlloc, and put all handles on free list m_pHandles = new Handle[maxHandles]; m_maxHandles = maxHandles; m_numHandles = 0; // handle 0 is reserved as the null index, and is also used as the sentinel m_firstFreeHandle = 1; { for (BP_FP_INT_TYPE i = m_firstFreeHandle; i < maxHandles; i++) m_pHandles[i].SetNextFree(static_cast(i + 1)); m_pHandles[maxHandles - 1].SetNextFree(0); } { // allocate edge buffers for (int i = 0; i < 3; i++) { m_pEdgesRawPtr[i] = btAlignedAlloc(sizeof(Edge) * maxHandles * 2, 16); m_pEdges[i] = new (m_pEdgesRawPtr[i]) Edge[maxHandles * 2]; } } //removed overlap management // make boundary sentinels m_pHandles[0].m_clientObject = 0; for (int axis = 0; axis < 3; axis++) { m_pHandles[0].m_minEdges[axis] = 0; m_pHandles[0].m_maxEdges[axis] = 1; m_pEdges[axis][0].m_pos = 0; m_pEdges[axis][0].m_handle = 0; m_pEdges[axis][1].m_pos = m_handleSentinel; m_pEdges[axis][1].m_handle = 0; #ifdef DEBUG_BROADPHASE debugPrintAxis(axis); #endif //DEBUG_BROADPHASE } } template btAxisSweep3Internal::~btAxisSweep3Internal() { if (m_raycastAccelerator) { m_nullPairCache->~btOverlappingPairCache(); btAlignedFree(m_nullPairCache); m_raycastAccelerator->~btDbvtBroadphase(); btAlignedFree(m_raycastAccelerator); } for (int i = 2; i >= 0; i--) { btAlignedFree(m_pEdgesRawPtr[i]); } delete[] m_pHandles; if (m_ownsPairCache) { m_pairCache->~btOverlappingPairCache(); btAlignedFree(m_pairCache); } } template void btAxisSweep3Internal::quantize(BP_FP_INT_TYPE* out, const btVector3& point, int isMax) const { #ifdef OLD_CLAMPING_METHOD ///problem with this clamping method is that the floating point during quantization might still go outside the range [(0|isMax) .. (m_handleSentinel&m_bpHandleMask]|isMax] ///see http://code.google.com/p/bullet/issues/detail?id=87 btVector3 clampedPoint(point); clampedPoint.setMax(m_worldAabbMin); clampedPoint.setMin(m_worldAabbMax); btVector3 v = (clampedPoint - m_worldAabbMin) * m_quantize; out[0] = (BP_FP_INT_TYPE)(((BP_FP_INT_TYPE)v.getX() & m_bpHandleMask) | isMax); out[1] = (BP_FP_INT_TYPE)(((BP_FP_INT_TYPE)v.getY() & m_bpHandleMask) | isMax); out[2] = (BP_FP_INT_TYPE)(((BP_FP_INT_TYPE)v.getZ() & m_bpHandleMask) | isMax); #else btVector3 v = (point - m_worldAabbMin) * m_quantize; out[0] = (v[0] <= 0) ? (BP_FP_INT_TYPE)isMax : (v[0] >= m_handleSentinel) ? (BP_FP_INT_TYPE)((m_handleSentinel & m_bpHandleMask) | isMax) : (BP_FP_INT_TYPE)(((BP_FP_INT_TYPE)v[0] & m_bpHandleMask) | isMax); out[1] = (v[1] <= 0) ? (BP_FP_INT_TYPE)isMax : (v[1] >= m_handleSentinel) ? (BP_FP_INT_TYPE)((m_handleSentinel & m_bpHandleMask) | isMax) : (BP_FP_INT_TYPE)(((BP_FP_INT_TYPE)v[1] & m_bpHandleMask) | isMax); out[2] = (v[2] <= 0) ? (BP_FP_INT_TYPE)isMax : (v[2] >= m_handleSentinel) ? (BP_FP_INT_TYPE)((m_handleSentinel & m_bpHandleMask) | isMax) : (BP_FP_INT_TYPE)(((BP_FP_INT_TYPE)v[2] & m_bpHandleMask) | isMax); #endif //OLD_CLAMPING_METHOD } template BP_FP_INT_TYPE btAxisSweep3Internal::allocHandle() { btAssert(m_firstFreeHandle); BP_FP_INT_TYPE handle = m_firstFreeHandle; m_firstFreeHandle = getHandle(handle)->GetNextFree(); m_numHandles++; return handle; } template void btAxisSweep3Internal::freeHandle(BP_FP_INT_TYPE handle) { btAssert(handle > 0 && handle < m_maxHandles); getHandle(handle)->SetNextFree(m_firstFreeHandle); m_firstFreeHandle = handle; m_numHandles--; } template BP_FP_INT_TYPE btAxisSweep3Internal::addHandle(const btVector3& aabbMin, const btVector3& aabbMax, void* pOwner, int collisionFilterGroup, int collisionFilterMask, btDispatcher* dispatcher) { // quantize the bounds BP_FP_INT_TYPE min[3], max[3]; quantize(min, aabbMin, 0); quantize(max, aabbMax, 1); // allocate a handle BP_FP_INT_TYPE handle = allocHandle(); Handle* pHandle = getHandle(handle); pHandle->m_uniqueId = static_cast(handle); //pHandle->m_pOverlaps = 0; pHandle->m_clientObject = pOwner; pHandle->m_collisionFilterGroup = collisionFilterGroup; pHandle->m_collisionFilterMask = collisionFilterMask; // compute current limit of edge arrays BP_FP_INT_TYPE limit = static_cast(m_numHandles * 2); // insert new edges just inside the max boundary edge for (BP_FP_INT_TYPE axis = 0; axis < 3; axis++) { m_pHandles[0].m_maxEdges[axis] += 2; m_pEdges[axis][limit + 1] = m_pEdges[axis][limit - 1]; m_pEdges[axis][limit - 1].m_pos = min[axis]; m_pEdges[axis][limit - 1].m_handle = handle; m_pEdges[axis][limit].m_pos = max[axis]; m_pEdges[axis][limit].m_handle = handle; pHandle->m_minEdges[axis] = static_cast(limit - 1); pHandle->m_maxEdges[axis] = limit; } // now sort the new edges to their correct position sortMinDown(0, pHandle->m_minEdges[0], dispatcher, false); sortMaxDown(0, pHandle->m_maxEdges[0], dispatcher, false); sortMinDown(1, pHandle->m_minEdges[1], dispatcher, false); sortMaxDown(1, pHandle->m_maxEdges[1], dispatcher, false); sortMinDown(2, pHandle->m_minEdges[2], dispatcher, true); sortMaxDown(2, pHandle->m_maxEdges[2], dispatcher, true); return handle; } template void btAxisSweep3Internal::removeHandle(BP_FP_INT_TYPE handle, btDispatcher* dispatcher) { Handle* pHandle = getHandle(handle); //explicitly remove the pairs containing the proxy //we could do it also in the sortMinUp (passing true) ///@todo: compare performance if (!m_pairCache->hasDeferredRemoval()) { m_pairCache->removeOverlappingPairsContainingProxy(pHandle, dispatcher); } // compute current limit of edge arrays int limit = static_cast(m_numHandles * 2); int axis; for (axis = 0; axis < 3; axis++) { m_pHandles[0].m_maxEdges[axis] -= 2; } // remove the edges by sorting them up to the end of the list for (axis = 0; axis < 3; axis++) { Edge* pEdges = m_pEdges[axis]; BP_FP_INT_TYPE max = pHandle->m_maxEdges[axis]; pEdges[max].m_pos = m_handleSentinel; sortMaxUp(axis, max, dispatcher, false); BP_FP_INT_TYPE i = pHandle->m_minEdges[axis]; pEdges[i].m_pos = m_handleSentinel; sortMinUp(axis, i, dispatcher, false); pEdges[limit - 1].m_handle = 0; pEdges[limit - 1].m_pos = m_handleSentinel; #ifdef DEBUG_BROADPHASE debugPrintAxis(axis, false); #endif //DEBUG_BROADPHASE } // free the handle freeHandle(handle); } template void btAxisSweep3Internal::resetPool(btDispatcher* /*dispatcher*/) { if (m_numHandles == 0) { m_firstFreeHandle = 1; { for (BP_FP_INT_TYPE i = m_firstFreeHandle; i < m_maxHandles; i++) m_pHandles[i].SetNextFree(static_cast(i + 1)); m_pHandles[m_maxHandles - 1].SetNextFree(0); } } } //#include template void btAxisSweep3Internal::calculateOverlappingPairs(btDispatcher* dispatcher) { if (m_pairCache->hasDeferredRemoval()) { btBroadphasePairArray& overlappingPairArray = m_pairCache->getOverlappingPairArray(); //perform a sort, to find duplicates and to sort 'invalid' pairs to the end overlappingPairArray.quickSort(btBroadphasePairSortPredicate()); overlappingPairArray.resize(overlappingPairArray.size() - m_invalidPair); m_invalidPair = 0; int i; btBroadphasePair previousPair; previousPair.m_pProxy0 = 0; previousPair.m_pProxy1 = 0; previousPair.m_algorithm = 0; for (i = 0; i < overlappingPairArray.size(); i++) { btBroadphasePair& pair = overlappingPairArray[i]; bool isDuplicate = (pair == previousPair); previousPair = pair; bool needsRemoval = false; if (!isDuplicate) { ///important to use an AABB test that is consistent with the broadphase bool hasOverlap = testAabbOverlap(pair.m_pProxy0, pair.m_pProxy1); if (hasOverlap) { needsRemoval = false; //callback->processOverlap(pair); } else { needsRemoval = true; } } else { //remove duplicate needsRemoval = true; //should have no algorithm btAssert(!pair.m_algorithm); } if (needsRemoval) { m_pairCache->cleanOverlappingPair(pair, dispatcher); // m_overlappingPairArray.swap(i,m_overlappingPairArray.size()-1); // m_overlappingPairArray.pop_back(); pair.m_pProxy0 = 0; pair.m_pProxy1 = 0; m_invalidPair++; } } ///if you don't like to skip the invalid pairs in the array, execute following code: #define CLEAN_INVALID_PAIRS 1 #ifdef CLEAN_INVALID_PAIRS //perform a sort, to sort 'invalid' pairs to the end overlappingPairArray.quickSort(btBroadphasePairSortPredicate()); overlappingPairArray.resize(overlappingPairArray.size() - m_invalidPair); m_invalidPair = 0; #endif //CLEAN_INVALID_PAIRS //printf("overlappingPairArray.size()=%d\n",overlappingPairArray.size()); } } template bool btAxisSweep3Internal::testAabbOverlap(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1) { const Handle* pHandleA = static_cast(proxy0); const Handle* pHandleB = static_cast(proxy1); //optimization 1: check the array index (memory address), instead of the m_pos for (int axis = 0; axis < 3; axis++) { if (pHandleA->m_maxEdges[axis] < pHandleB->m_minEdges[axis] || pHandleB->m_maxEdges[axis] < pHandleA->m_minEdges[axis]) { return false; } } return true; } template bool btAxisSweep3Internal::testOverlap2D(const Handle* pHandleA, const Handle* pHandleB, int axis0, int axis1) { //optimization 1: check the array index (memory address), instead of the m_pos if (pHandleA->m_maxEdges[axis0] < pHandleB->m_minEdges[axis0] || pHandleB->m_maxEdges[axis0] < pHandleA->m_minEdges[axis0] || pHandleA->m_maxEdges[axis1] < pHandleB->m_minEdges[axis1] || pHandleB->m_maxEdges[axis1] < pHandleA->m_minEdges[axis1]) { return false; } return true; } template void btAxisSweep3Internal::updateHandle(BP_FP_INT_TYPE handle, const btVector3& aabbMin, const btVector3& aabbMax, btDispatcher* dispatcher) { // btAssert(bounds.IsFinite()); //btAssert(bounds.HasVolume()); Handle* pHandle = getHandle(handle); // quantize the new bounds BP_FP_INT_TYPE min[3], max[3]; quantize(min, aabbMin, 0); quantize(max, aabbMax, 1); // update changed edges for (int axis = 0; axis < 3; axis++) { BP_FP_INT_TYPE emin = pHandle->m_minEdges[axis]; BP_FP_INT_TYPE emax = pHandle->m_maxEdges[axis]; int dmin = (int)min[axis] - (int)m_pEdges[axis][emin].m_pos; int dmax = (int)max[axis] - (int)m_pEdges[axis][emax].m_pos; m_pEdges[axis][emin].m_pos = min[axis]; m_pEdges[axis][emax].m_pos = max[axis]; // expand (only adds overlaps) if (dmin < 0) sortMinDown(axis, emin, dispatcher, true); if (dmax > 0) sortMaxUp(axis, emax, dispatcher, true); // shrink (only removes overlaps) if (dmin > 0) sortMinUp(axis, emin, dispatcher, true); if (dmax < 0) sortMaxDown(axis, emax, dispatcher, true); #ifdef DEBUG_BROADPHASE debugPrintAxis(axis); #endif //DEBUG_BROADPHASE } } // sorting a min edge downwards can only ever *add* overlaps template void btAxisSweep3Internal::sortMinDown(int axis, BP_FP_INT_TYPE edge, btDispatcher* /* dispatcher */, bool updateOverlaps) { Edge* pEdge = m_pEdges[axis] + edge; Edge* pPrev = pEdge - 1; Handle* pHandleEdge = getHandle(pEdge->m_handle); while (pEdge->m_pos < pPrev->m_pos) { Handle* pHandlePrev = getHandle(pPrev->m_handle); if (pPrev->IsMax()) { // if previous edge is a maximum check the bounds and add an overlap if necessary const int axis1 = (1 << axis) & 3; const int axis2 = (1 << axis1) & 3; if (updateOverlaps && testOverlap2D(pHandleEdge, pHandlePrev, axis1, axis2)) { m_pairCache->addOverlappingPair(pHandleEdge, pHandlePrev); if (m_userPairCallback) m_userPairCallback->addOverlappingPair(pHandleEdge, pHandlePrev); //AddOverlap(pEdge->m_handle, pPrev->m_handle); } // update edge reference in other handle pHandlePrev->m_maxEdges[axis]++; } else pHandlePrev->m_minEdges[axis]++; pHandleEdge->m_minEdges[axis]--; // swap the edges Edge swap = *pEdge; *pEdge = *pPrev; *pPrev = swap; // decrement pEdge--; pPrev--; } #ifdef DEBUG_BROADPHASE debugPrintAxis(axis); #endif //DEBUG_BROADPHASE } // sorting a min edge upwards can only ever *remove* overlaps template void btAxisSweep3Internal::sortMinUp(int axis, BP_FP_INT_TYPE edge, btDispatcher* dispatcher, bool updateOverlaps) { Edge* pEdge = m_pEdges[axis] + edge; Edge* pNext = pEdge + 1; Handle* pHandleEdge = getHandle(pEdge->m_handle); while (pNext->m_handle && (pEdge->m_pos >= pNext->m_pos)) { Handle* pHandleNext = getHandle(pNext->m_handle); if (pNext->IsMax()) { Handle* handle0 = getHandle(pEdge->m_handle); Handle* handle1 = getHandle(pNext->m_handle); const int axis1 = (1 << axis) & 3; const int axis2 = (1 << axis1) & 3; // if next edge is maximum remove any overlap between the two handles if (updateOverlaps #ifdef USE_OVERLAP_TEST_ON_REMOVES && testOverlap2D(handle0, handle1, axis1, axis2) #endif //USE_OVERLAP_TEST_ON_REMOVES ) { m_pairCache->removeOverlappingPair(handle0, handle1, dispatcher); if (m_userPairCallback) m_userPairCallback->removeOverlappingPair(handle0, handle1, dispatcher); } // update edge reference in other handle pHandleNext->m_maxEdges[axis]--; } else pHandleNext->m_minEdges[axis]--; pHandleEdge->m_minEdges[axis]++; // swap the edges Edge swap = *pEdge; *pEdge = *pNext; *pNext = swap; // increment pEdge++; pNext++; } } // sorting a max edge downwards can only ever *remove* overlaps template void btAxisSweep3Internal::sortMaxDown(int axis, BP_FP_INT_TYPE edge, btDispatcher* dispatcher, bool updateOverlaps) { Edge* pEdge = m_pEdges[axis] + edge; Edge* pPrev = pEdge - 1; Handle* pHandleEdge = getHandle(pEdge->m_handle); while (pEdge->m_pos < pPrev->m_pos) { Handle* pHandlePrev = getHandle(pPrev->m_handle); if (!pPrev->IsMax()) { // if previous edge was a minimum remove any overlap between the two handles Handle* handle0 = getHandle(pEdge->m_handle); Handle* handle1 = getHandle(pPrev->m_handle); const int axis1 = (1 << axis) & 3; const int axis2 = (1 << axis1) & 3; if (updateOverlaps #ifdef USE_OVERLAP_TEST_ON_REMOVES && testOverlap2D(handle0, handle1, axis1, axis2) #endif //USE_OVERLAP_TEST_ON_REMOVES ) { //this is done during the overlappingpairarray iteration/narrowphase collision m_pairCache->removeOverlappingPair(handle0, handle1, dispatcher); if (m_userPairCallback) m_userPairCallback->removeOverlappingPair(handle0, handle1, dispatcher); } // update edge reference in other handle pHandlePrev->m_minEdges[axis]++; ; } else pHandlePrev->m_maxEdges[axis]++; pHandleEdge->m_maxEdges[axis]--; // swap the edges Edge swap = *pEdge; *pEdge = *pPrev; *pPrev = swap; // decrement pEdge--; pPrev--; } #ifdef DEBUG_BROADPHASE debugPrintAxis(axis); #endif //DEBUG_BROADPHASE } // sorting a max edge upwards can only ever *add* overlaps template void btAxisSweep3Internal::sortMaxUp(int axis, BP_FP_INT_TYPE edge, btDispatcher* /* dispatcher */, bool updateOverlaps) { Edge* pEdge = m_pEdges[axis] + edge; Edge* pNext = pEdge + 1; Handle* pHandleEdge = getHandle(pEdge->m_handle); while (pNext->m_handle && (pEdge->m_pos >= pNext->m_pos)) { Handle* pHandleNext = getHandle(pNext->m_handle); const int axis1 = (1 << axis) & 3; const int axis2 = (1 << axis1) & 3; if (!pNext->IsMax()) { // if next edge is a minimum check the bounds and add an overlap if necessary if (updateOverlaps && testOverlap2D(pHandleEdge, pHandleNext, axis1, axis2)) { Handle* handle0 = getHandle(pEdge->m_handle); Handle* handle1 = getHandle(pNext->m_handle); m_pairCache->addOverlappingPair(handle0, handle1); if (m_userPairCallback) m_userPairCallback->addOverlappingPair(handle0, handle1); } // update edge reference in other handle pHandleNext->m_minEdges[axis]--; } else pHandleNext->m_maxEdges[axis]--; pHandleEdge->m_maxEdges[axis]++; // swap the edges Edge swap = *pEdge; *pEdge = *pNext; *pNext = swap; // increment pEdge++; pNext++; } } #endif ================================================ FILE: libraries/bullet/BulletCollision/BroadphaseCollision/btBroadphaseInterface.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_BROADPHASE_INTERFACE_H #define BT_BROADPHASE_INTERFACE_H struct btDispatcherInfo; class btDispatcher; #include "btBroadphaseProxy.h" class btOverlappingPairCache; struct btBroadphaseAabbCallback { virtual ~btBroadphaseAabbCallback() {} virtual bool process(const btBroadphaseProxy* proxy) = 0; }; struct btBroadphaseRayCallback : public btBroadphaseAabbCallback { ///added some cached data to accelerate ray-AABB tests btVector3 m_rayDirectionInverse; unsigned int m_signs[3]; btScalar m_lambda_max; virtual ~btBroadphaseRayCallback() {} protected: btBroadphaseRayCallback() {} }; #include "LinearMath/btVector3.h" ///The btBroadphaseInterface class provides an interface to detect aabb-overlapping object pairs. ///Some implementations for this broadphase interface include btAxisSweep3, bt32BitAxisSweep3 and btDbvtBroadphase. ///The actual overlapping pair management, storage, adding and removing of pairs is dealt by the btOverlappingPairCache class. class btBroadphaseInterface { public: virtual ~btBroadphaseInterface() {} virtual btBroadphaseProxy* createProxy(const btVector3& aabbMin, const btVector3& aabbMax, int shapeType, void* userPtr, int collisionFilterGroup, int collisionFilterMask, btDispatcher* dispatcher) = 0; virtual void destroyProxy(btBroadphaseProxy* proxy, btDispatcher* dispatcher) = 0; virtual void setAabb(btBroadphaseProxy* proxy, const btVector3& aabbMin, const btVector3& aabbMax, btDispatcher* dispatcher) = 0; virtual void getAabb(btBroadphaseProxy* proxy, btVector3& aabbMin, btVector3& aabbMax) const = 0; virtual void rayTest(const btVector3& rayFrom, const btVector3& rayTo, btBroadphaseRayCallback& rayCallback, const btVector3& aabbMin = btVector3(0, 0, 0), const btVector3& aabbMax = btVector3(0, 0, 0)) = 0; virtual void aabbTest(const btVector3& aabbMin, const btVector3& aabbMax, btBroadphaseAabbCallback& callback) = 0; ///calculateOverlappingPairs is optional: incremental algorithms (sweep and prune) might do it during the set aabb virtual void calculateOverlappingPairs(btDispatcher* dispatcher) = 0; virtual btOverlappingPairCache* getOverlappingPairCache() = 0; virtual const btOverlappingPairCache* getOverlappingPairCache() const = 0; ///getAabb returns the axis aligned bounding box in the 'global' coordinate frame ///will add some transform later virtual void getBroadphaseAabb(btVector3& aabbMin, btVector3& aabbMax) const = 0; ///reset broadphase internal structures, to ensure determinism/reproducability virtual void resetPool(btDispatcher* dispatcher) { (void)dispatcher; }; virtual void printStats() = 0; }; #endif //BT_BROADPHASE_INTERFACE_H ================================================ FILE: libraries/bullet/BulletCollision/BroadphaseCollision/btBroadphaseProxy.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_BROADPHASE_PROXY_H #define BT_BROADPHASE_PROXY_H #include "LinearMath/btScalar.h" //for SIMD_FORCE_INLINE #include "LinearMath/btVector3.h" #include "LinearMath/btAlignedAllocator.h" /// btDispatcher uses these types /// IMPORTANT NOTE:The types are ordered polyhedral, implicit convex and concave /// to facilitate type checking /// CUSTOM_POLYHEDRAL_SHAPE_TYPE,CUSTOM_CONVEX_SHAPE_TYPE and CUSTOM_CONCAVE_SHAPE_TYPE can be used to extend Bullet without modifying source code enum BroadphaseNativeTypes { // polyhedral convex shapes BOX_SHAPE_PROXYTYPE, TRIANGLE_SHAPE_PROXYTYPE, TETRAHEDRAL_SHAPE_PROXYTYPE, CONVEX_TRIANGLEMESH_SHAPE_PROXYTYPE, CONVEX_HULL_SHAPE_PROXYTYPE, CONVEX_POINT_CLOUD_SHAPE_PROXYTYPE, CUSTOM_POLYHEDRAL_SHAPE_TYPE, //implicit convex shapes IMPLICIT_CONVEX_SHAPES_START_HERE, SPHERE_SHAPE_PROXYTYPE, MULTI_SPHERE_SHAPE_PROXYTYPE, CAPSULE_SHAPE_PROXYTYPE, CONE_SHAPE_PROXYTYPE, CONVEX_SHAPE_PROXYTYPE, CYLINDER_SHAPE_PROXYTYPE, UNIFORM_SCALING_SHAPE_PROXYTYPE, MINKOWSKI_SUM_SHAPE_PROXYTYPE, MINKOWSKI_DIFFERENCE_SHAPE_PROXYTYPE, BOX_2D_SHAPE_PROXYTYPE, CONVEX_2D_SHAPE_PROXYTYPE, CUSTOM_CONVEX_SHAPE_TYPE, //concave shapes CONCAVE_SHAPES_START_HERE, //keep all the convex shapetype below here, for the check IsConvexShape in broadphase proxy! TRIANGLE_MESH_SHAPE_PROXYTYPE, SCALED_TRIANGLE_MESH_SHAPE_PROXYTYPE, ///used for demo integration FAST/Swift collision library and Bullet FAST_CONCAVE_MESH_PROXYTYPE, //terrain TERRAIN_SHAPE_PROXYTYPE, ///Used for GIMPACT Trimesh integration GIMPACT_SHAPE_PROXYTYPE, ///Multimaterial mesh MULTIMATERIAL_TRIANGLE_MESH_PROXYTYPE, EMPTY_SHAPE_PROXYTYPE, STATIC_PLANE_PROXYTYPE, CUSTOM_CONCAVE_SHAPE_TYPE, SDF_SHAPE_PROXYTYPE = CUSTOM_CONCAVE_SHAPE_TYPE, CONCAVE_SHAPES_END_HERE, COMPOUND_SHAPE_PROXYTYPE, SOFTBODY_SHAPE_PROXYTYPE, HFFLUID_SHAPE_PROXYTYPE, HFFLUID_BUOYANT_CONVEX_SHAPE_PROXYTYPE, INVALID_SHAPE_PROXYTYPE, MAX_BROADPHASE_COLLISION_TYPES }; ///The btBroadphaseProxy is the main class that can be used with the Bullet broadphases. ///It stores collision shape type information, collision filter information and a client object, typically a btCollisionObject or btRigidBody. ATTRIBUTE_ALIGNED16(struct) btBroadphaseProxy { BT_DECLARE_ALIGNED_ALLOCATOR(); ///optional filtering to cull potential collisions enum CollisionFilterGroups { DefaultFilter = 1, StaticFilter = 2, KinematicFilter = 4, DebrisFilter = 8, SensorTrigger = 16, CharacterFilter = 32, AllFilter = -1 //all bits sets: DefaultFilter | StaticFilter | KinematicFilter | DebrisFilter | SensorTrigger }; //Usually the client btCollisionObject or Rigidbody class void* m_clientObject; int m_collisionFilterGroup; int m_collisionFilterMask; int m_uniqueId; //m_uniqueId is introduced for paircache. could get rid of this, by calculating the address offset etc. btVector3 m_aabbMin; btVector3 m_aabbMax; SIMD_FORCE_INLINE int getUid() const { return m_uniqueId; } //used for memory pools btBroadphaseProxy() : m_clientObject(0) { } btBroadphaseProxy(const btVector3& aabbMin, const btVector3& aabbMax, void* userPtr, int collisionFilterGroup, int collisionFilterMask) : m_clientObject(userPtr), m_collisionFilterGroup(collisionFilterGroup), m_collisionFilterMask(collisionFilterMask), m_aabbMin(aabbMin), m_aabbMax(aabbMax) { } static SIMD_FORCE_INLINE bool isPolyhedral(int proxyType) { return (proxyType < IMPLICIT_CONVEX_SHAPES_START_HERE); } static SIMD_FORCE_INLINE bool isConvex(int proxyType) { return (proxyType < CONCAVE_SHAPES_START_HERE); } static SIMD_FORCE_INLINE bool isNonMoving(int proxyType) { return (isConcave(proxyType) && !(proxyType == GIMPACT_SHAPE_PROXYTYPE)); } static SIMD_FORCE_INLINE bool isConcave(int proxyType) { return ((proxyType > CONCAVE_SHAPES_START_HERE) && (proxyType < CONCAVE_SHAPES_END_HERE)); } static SIMD_FORCE_INLINE bool isCompound(int proxyType) { return (proxyType == COMPOUND_SHAPE_PROXYTYPE); } static SIMD_FORCE_INLINE bool isSoftBody(int proxyType) { return (proxyType == SOFTBODY_SHAPE_PROXYTYPE); } static SIMD_FORCE_INLINE bool isInfinite(int proxyType) { return (proxyType == STATIC_PLANE_PROXYTYPE); } static SIMD_FORCE_INLINE bool isConvex2d(int proxyType) { return (proxyType == BOX_2D_SHAPE_PROXYTYPE) || (proxyType == CONVEX_2D_SHAPE_PROXYTYPE); } }; class btCollisionAlgorithm; struct btBroadphaseProxy; ///The btBroadphasePair class contains a pair of aabb-overlapping objects. ///A btDispatcher can search a btCollisionAlgorithm that performs exact/narrowphase collision detection on the actual collision shapes. ATTRIBUTE_ALIGNED16(struct) btBroadphasePair { btBroadphasePair() : m_pProxy0(0), m_pProxy1(0), m_algorithm(0), m_internalInfo1(0) { } BT_DECLARE_ALIGNED_ALLOCATOR(); btBroadphasePair(btBroadphaseProxy & proxy0, btBroadphaseProxy & proxy1) { //keep them sorted, so the std::set operations work if (proxy0.m_uniqueId < proxy1.m_uniqueId) { m_pProxy0 = &proxy0; m_pProxy1 = &proxy1; } else { m_pProxy0 = &proxy1; m_pProxy1 = &proxy0; } m_algorithm = 0; m_internalInfo1 = 0; } btBroadphaseProxy* m_pProxy0; btBroadphaseProxy* m_pProxy1; mutable btCollisionAlgorithm* m_algorithm; union { void* m_internalInfo1; int m_internalTmpValue; }; //don't use this data, it will be removed in future version. }; /* //comparison for set operation, see Solid DT_Encounter SIMD_FORCE_INLINE bool operator<(const btBroadphasePair& a, const btBroadphasePair& b) { return a.m_pProxy0 < b.m_pProxy0 || (a.m_pProxy0 == b.m_pProxy0 && a.m_pProxy1 < b.m_pProxy1); } */ class btBroadphasePairSortPredicate { public: bool operator()(const btBroadphasePair& a, const btBroadphasePair& b) const { const int uidA0 = a.m_pProxy0 ? a.m_pProxy0->m_uniqueId : -1; const int uidB0 = b.m_pProxy0 ? b.m_pProxy0->m_uniqueId : -1; const int uidA1 = a.m_pProxy1 ? a.m_pProxy1->m_uniqueId : -1; const int uidB1 = b.m_pProxy1 ? b.m_pProxy1->m_uniqueId : -1; return uidA0 > uidB0 || (a.m_pProxy0 == b.m_pProxy0 && uidA1 > uidB1) || (a.m_pProxy0 == b.m_pProxy0 && a.m_pProxy1 == b.m_pProxy1 && a.m_algorithm > b.m_algorithm); } }; SIMD_FORCE_INLINE bool operator==(const btBroadphasePair& a, const btBroadphasePair& b) { return (a.m_pProxy0 == b.m_pProxy0) && (a.m_pProxy1 == b.m_pProxy1); } #endif //BT_BROADPHASE_PROXY_H ================================================ FILE: libraries/bullet/BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_COLLISION_ALGORITHM_H #define BT_COLLISION_ALGORITHM_H #include "LinearMath/btScalar.h" #include "LinearMath/btAlignedObjectArray.h" struct btBroadphaseProxy; class btDispatcher; class btManifoldResult; class btCollisionObject; struct btCollisionObjectWrapper; struct btDispatcherInfo; class btPersistentManifold; typedef btAlignedObjectArray btManifoldArray; struct btCollisionAlgorithmConstructionInfo { btCollisionAlgorithmConstructionInfo() : m_dispatcher1(0), m_manifold(0) { } btCollisionAlgorithmConstructionInfo(btDispatcher* dispatcher, int temp) : m_dispatcher1(dispatcher) { (void)temp; } btDispatcher* m_dispatcher1; btPersistentManifold* m_manifold; // int getDispatcherId(); }; ///btCollisionAlgorithm is an collision interface that is compatible with the Broadphase and btDispatcher. ///It is persistent over frames class btCollisionAlgorithm { protected: btDispatcher* m_dispatcher; protected: // int getDispatcherId(); public: btCollisionAlgorithm(){}; btCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci); virtual ~btCollisionAlgorithm(){}; virtual void processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut) = 0; virtual btScalar calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut) = 0; virtual void getAllContactManifolds(btManifoldArray& manifoldArray) = 0; }; #endif //BT_COLLISION_ALGORITHM_H ================================================ FILE: libraries/bullet/BulletCollision/BroadphaseCollision/btDbvt.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2007 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ ///btDbvt implementation by Nathanael Presson #ifndef BT_DYNAMIC_BOUNDING_VOLUME_TREE_H #define BT_DYNAMIC_BOUNDING_VOLUME_TREE_H #include "LinearMath/btAlignedObjectArray.h" #include "LinearMath/btVector3.h" #include "LinearMath/btTransform.h" #include "LinearMath/btAabbUtil2.h" // // Compile time configuration // // Implementation profiles #define DBVT_IMPL_GENERIC 0 // Generic implementation #define DBVT_IMPL_SSE 1 // SSE // Template implementation of ICollide #ifdef _WIN32 #if (defined(_MSC_VER) && _MSC_VER >= 1400) #define DBVT_USE_TEMPLATE 1 #else #define DBVT_USE_TEMPLATE 0 #endif #else #define DBVT_USE_TEMPLATE 0 #endif // Use only intrinsics instead of inline asm #define DBVT_USE_INTRINSIC_SSE 1 // Using memmov for collideOCL #define DBVT_USE_MEMMOVE 1 // Enable benchmarking code #define DBVT_ENABLE_BENCHMARK 0 // Inlining #define DBVT_INLINE SIMD_FORCE_INLINE // Specific methods implementation //SSE gives errors on a MSVC 7.1 #if defined(BT_USE_SSE) //&& defined (_WIN32) #define DBVT_SELECT_IMPL DBVT_IMPL_SSE #define DBVT_MERGE_IMPL DBVT_IMPL_SSE #define DBVT_INT0_IMPL DBVT_IMPL_SSE #else #define DBVT_SELECT_IMPL DBVT_IMPL_GENERIC #define DBVT_MERGE_IMPL DBVT_IMPL_GENERIC #define DBVT_INT0_IMPL DBVT_IMPL_GENERIC #endif #if (DBVT_SELECT_IMPL == DBVT_IMPL_SSE) || \ (DBVT_MERGE_IMPL == DBVT_IMPL_SSE) || \ (DBVT_INT0_IMPL == DBVT_IMPL_SSE) #include #endif // // Auto config and checks // #if DBVT_USE_TEMPLATE #define DBVT_VIRTUAL #define DBVT_VIRTUAL_DTOR(a) #define DBVT_PREFIX template #define DBVT_IPOLICY T& policy #define DBVT_CHECKTYPE \ static const ICollide& typechecker = *(T*)1; \ (void)typechecker; #else #define DBVT_VIRTUAL_DTOR(a) \ virtual ~a() {} #define DBVT_VIRTUAL virtual #define DBVT_PREFIX #define DBVT_IPOLICY ICollide& policy #define DBVT_CHECKTYPE #endif #if DBVT_USE_MEMMOVE #if !defined(__CELLOS_LV2__) && !defined(__MWERKS__) #include #endif #include #endif #ifndef DBVT_USE_TEMPLATE #error "DBVT_USE_TEMPLATE undefined" #endif #ifndef DBVT_USE_MEMMOVE #error "DBVT_USE_MEMMOVE undefined" #endif #ifndef DBVT_ENABLE_BENCHMARK #error "DBVT_ENABLE_BENCHMARK undefined" #endif #ifndef DBVT_SELECT_IMPL #error "DBVT_SELECT_IMPL undefined" #endif #ifndef DBVT_MERGE_IMPL #error "DBVT_MERGE_IMPL undefined" #endif #ifndef DBVT_INT0_IMPL #error "DBVT_INT0_IMPL undefined" #endif // // Defaults volumes // /* btDbvtAabbMm */ struct btDbvtAabbMm { DBVT_INLINE btDbvtAabbMm(){} DBVT_INLINE btVector3 Center() const { return ((mi + mx) / 2); } DBVT_INLINE btVector3 Lengths() const { return (mx - mi); } DBVT_INLINE btVector3 Extents() const { return ((mx - mi) / 2); } DBVT_INLINE const btVector3& Mins() const { return (mi); } DBVT_INLINE const btVector3& Maxs() const { return (mx); } static inline btDbvtAabbMm FromCE(const btVector3& c, const btVector3& e); static inline btDbvtAabbMm FromCR(const btVector3& c, btScalar r); static inline btDbvtAabbMm FromMM(const btVector3& mi, const btVector3& mx); static inline btDbvtAabbMm FromPoints(const btVector3* pts, int n); static inline btDbvtAabbMm FromPoints(const btVector3** ppts, int n); DBVT_INLINE void Expand(const btVector3& e); DBVT_INLINE void SignedExpand(const btVector3& e); DBVT_INLINE bool Contain(const btDbvtAabbMm& a) const; DBVT_INLINE int Classify(const btVector3& n, btScalar o, int s) const; DBVT_INLINE btScalar ProjectMinimum(const btVector3& v, unsigned signs) const; DBVT_INLINE friend bool Intersect(const btDbvtAabbMm& a, const btDbvtAabbMm& b); DBVT_INLINE friend bool Intersect(const btDbvtAabbMm& a, const btVector3& b); DBVT_INLINE friend btScalar Proximity(const btDbvtAabbMm& a, const btDbvtAabbMm& b); DBVT_INLINE friend int Select(const btDbvtAabbMm& o, const btDbvtAabbMm& a, const btDbvtAabbMm& b); DBVT_INLINE friend void Merge(const btDbvtAabbMm& a, const btDbvtAabbMm& b, btDbvtAabbMm& r); DBVT_INLINE friend bool NotEqual(const btDbvtAabbMm& a, const btDbvtAabbMm& b); DBVT_INLINE btVector3& tMins() { return (mi); } DBVT_INLINE btVector3& tMaxs() { return (mx); } private: DBVT_INLINE void AddSpan(const btVector3& d, btScalar& smi, btScalar& smx) const; private: btVector3 mi, mx; }; // Types typedef btDbvtAabbMm btDbvtVolume; /* btDbvtNode */ struct btDbvtNode { btDbvtVolume volume; btDbvtNode* parent; DBVT_INLINE bool isleaf() const { return (childs[1] == 0); } DBVT_INLINE bool isinternal() const { return (!isleaf()); } union { btDbvtNode* childs[2]; void* data; int dataAsInt; }; }; /* btDbv(normal)tNode */ struct btDbvntNode { btDbvtVolume volume; btVector3 normal; btScalar angle; DBVT_INLINE bool isleaf() const { return (childs[1] == 0); } DBVT_INLINE bool isinternal() const { return (!isleaf()); } btDbvntNode* childs[2]; void* data; btDbvntNode(const btDbvtNode* n) : volume(n->volume) , normal(0,0,0) , angle(0) , data(n->data) { childs[0] = 0; childs[1] = 0; } ~btDbvntNode() { if (childs[0]) delete childs[0]; if (childs[1]) delete childs[1]; } }; typedef btAlignedObjectArray btNodeStack; ///The btDbvt class implements a fast dynamic bounding volume tree based on axis aligned bounding boxes (aabb tree). ///This btDbvt is used for soft body collision detection and for the btDbvtBroadphase. It has a fast insert, remove and update of nodes. ///Unlike the btQuantizedBvh, nodes can be dynamically moved around, which allows for change in topology of the underlying data structure. struct btDbvt { /* Stack element */ struct sStkNN { const btDbvtNode* a; const btDbvtNode* b; sStkNN() {} sStkNN(const btDbvtNode* na, const btDbvtNode* nb) : a(na), b(nb) {} }; struct sStkNP { const btDbvtNode* node; int mask; sStkNP(const btDbvtNode* n, unsigned m) : node(n), mask(m) {} }; struct sStkNPS { const btDbvtNode* node; int mask; btScalar value; sStkNPS() {} sStkNPS(const btDbvtNode* n, unsigned m, btScalar v) : node(n), mask(m), value(v) {} }; struct sStkCLN { const btDbvtNode* node; btDbvtNode* parent; sStkCLN(const btDbvtNode* n, btDbvtNode* p) : node(n), parent(p) {} }; struct sStknNN { const btDbvntNode* a; const btDbvntNode* b; sStknNN() {} sStknNN(const btDbvntNode* na, const btDbvntNode* nb) : a(na), b(nb) {} }; // Policies/Interfaces /* ICollide */ struct ICollide { DBVT_VIRTUAL_DTOR(ICollide) DBVT_VIRTUAL void Process(const btDbvtNode*, const btDbvtNode*) {} DBVT_VIRTUAL void Process(const btDbvtNode*) {} DBVT_VIRTUAL void Process(const btDbvtNode* n, btScalar) { Process(n); } DBVT_VIRTUAL void Process(const btDbvntNode*, const btDbvntNode*) {} DBVT_VIRTUAL bool Descent(const btDbvtNode*) { return (true); } DBVT_VIRTUAL bool AllLeaves(const btDbvtNode*) { return (true); } }; /* IWriter */ struct IWriter { virtual ~IWriter() {} virtual void Prepare(const btDbvtNode* root, int numnodes) = 0; virtual void WriteNode(const btDbvtNode*, int index, int parent, int child0, int child1) = 0; virtual void WriteLeaf(const btDbvtNode*, int index, int parent) = 0; }; /* IClone */ struct IClone { virtual ~IClone() {} virtual void CloneLeaf(btDbvtNode*) {} }; // Constants enum { SIMPLE_STACKSIZE = 64, DOUBLE_STACKSIZE = SIMPLE_STACKSIZE * 2 }; // Fields btDbvtNode* m_root; btDbvtNode* m_free; int m_lkhd; int m_leaves; unsigned m_opath; btAlignedObjectArray m_stkStack; // Methods btDbvt(); ~btDbvt(); void clear(); bool empty() const { return (0 == m_root); } void optimizeBottomUp(); void optimizeTopDown(int bu_treshold = 128); void optimizeIncremental(int passes); btDbvtNode* insert(const btDbvtVolume& box, void* data); void update(btDbvtNode* leaf, int lookahead = -1); void update(btDbvtNode* leaf, btDbvtVolume& volume); bool update(btDbvtNode* leaf, btDbvtVolume& volume, const btVector3& velocity, btScalar margin); bool update(btDbvtNode* leaf, btDbvtVolume& volume, const btVector3& velocity); bool update(btDbvtNode* leaf, btDbvtVolume& volume, btScalar margin); void remove(btDbvtNode* leaf); void write(IWriter* iwriter) const; void clone(btDbvt& dest, IClone* iclone = 0) const; static int maxdepth(const btDbvtNode* node); static int countLeaves(const btDbvtNode* node); static void extractLeaves(const btDbvtNode* node, btAlignedObjectArray& leaves); #if DBVT_ENABLE_BENCHMARK static void benchmark(); #else static void benchmark() { } #endif // DBVT_IPOLICY must support ICollide policy/interface DBVT_PREFIX static void enumNodes(const btDbvtNode* root, DBVT_IPOLICY); DBVT_PREFIX static void enumLeaves(const btDbvtNode* root, DBVT_IPOLICY); DBVT_PREFIX void collideTT(const btDbvtNode* root0, const btDbvtNode* root1, DBVT_IPOLICY); DBVT_PREFIX void selfCollideT(const btDbvntNode* root, DBVT_IPOLICY); DBVT_PREFIX void selfCollideTT(const btDbvtNode* root, DBVT_IPOLICY); DBVT_PREFIX void collideTTpersistentStack(const btDbvtNode* root0, const btDbvtNode* root1, DBVT_IPOLICY); #if 0 DBVT_PREFIX void collideTT( const btDbvtNode* root0, const btDbvtNode* root1, const btTransform& xform, DBVT_IPOLICY); DBVT_PREFIX void collideTT( const btDbvtNode* root0, const btTransform& xform0, const btDbvtNode* root1, const btTransform& xform1, DBVT_IPOLICY); #endif DBVT_PREFIX void collideTV(const btDbvtNode* root, const btDbvtVolume& volume, DBVT_IPOLICY) const; DBVT_PREFIX void collideTVNoStackAlloc(const btDbvtNode* root, const btDbvtVolume& volume, btNodeStack& stack, DBVT_IPOLICY) const; ///rayTest is a re-entrant ray test, and can be called in parallel as long as the btAlignedAlloc is thread-safe (uses locking etc) ///rayTest is slower than rayTestInternal, because it builds a local stack, using memory allocations, and it recomputes signs/rayDirectionInverses each time DBVT_PREFIX static void rayTest(const btDbvtNode* root, const btVector3& rayFrom, const btVector3& rayTo, DBVT_IPOLICY); ///rayTestInternal is faster than rayTest, because it uses a persistent stack (to reduce dynamic memory allocations to a minimum) and it uses precomputed signs/rayInverseDirections ///rayTestInternal is used by btDbvtBroadphase to accelerate world ray casts DBVT_PREFIX void rayTestInternal(const btDbvtNode* root, const btVector3& rayFrom, const btVector3& rayTo, const btVector3& rayDirectionInverse, unsigned int signs[3], btScalar lambda_max, const btVector3& aabbMin, const btVector3& aabbMax, btAlignedObjectArray& stack, DBVT_IPOLICY) const; DBVT_PREFIX static void collideKDOP(const btDbvtNode* root, const btVector3* normals, const btScalar* offsets, int count, DBVT_IPOLICY); DBVT_PREFIX static void collideOCL(const btDbvtNode* root, const btVector3* normals, const btScalar* offsets, const btVector3& sortaxis, int count, DBVT_IPOLICY, bool fullsort = true); DBVT_PREFIX static void collideTU(const btDbvtNode* root, DBVT_IPOLICY); // Helpers static DBVT_INLINE int nearest(const int* i, const btDbvt::sStkNPS* a, btScalar v, int l, int h) { int m = 0; while (l < h) { m = (l + h) >> 1; if (a[i[m]].value >= v) l = m + 1; else h = m; } return (h); } static DBVT_INLINE int allocate(btAlignedObjectArray& ifree, btAlignedObjectArray& stock, const sStkNPS& value) { int i; if (ifree.size() > 0) { i = ifree[ifree.size() - 1]; ifree.pop_back(); stock[i] = value; } else { i = stock.size(); stock.push_back(value); } return (i); } // private: btDbvt(const btDbvt&) {} }; // // Inline's // // inline btDbvtAabbMm btDbvtAabbMm::FromCE(const btVector3& c, const btVector3& e) { btDbvtAabbMm box; box.mi = c - e; box.mx = c + e; return (box); } // inline btDbvtAabbMm btDbvtAabbMm::FromCR(const btVector3& c, btScalar r) { return (FromCE(c, btVector3(r, r, r))); } // inline btDbvtAabbMm btDbvtAabbMm::FromMM(const btVector3& mi, const btVector3& mx) { btDbvtAabbMm box; box.mi = mi; box.mx = mx; return (box); } // inline btDbvtAabbMm btDbvtAabbMm::FromPoints(const btVector3* pts, int n) { btDbvtAabbMm box; box.mi = box.mx = pts[0]; for (int i = 1; i < n; ++i) { box.mi.setMin(pts[i]); box.mx.setMax(pts[i]); } return (box); } // inline btDbvtAabbMm btDbvtAabbMm::FromPoints(const btVector3** ppts, int n) { btDbvtAabbMm box; box.mi = box.mx = *ppts[0]; for (int i = 1; i < n; ++i) { box.mi.setMin(*ppts[i]); box.mx.setMax(*ppts[i]); } return (box); } // DBVT_INLINE void btDbvtAabbMm::Expand(const btVector3& e) { mi -= e; mx += e; } // DBVT_INLINE void btDbvtAabbMm::SignedExpand(const btVector3& e) { if (e.x() > 0) mx.setX(mx.x() + e[0]); else mi.setX(mi.x() + e[0]); if (e.y() > 0) mx.setY(mx.y() + e[1]); else mi.setY(mi.y() + e[1]); if (e.z() > 0) mx.setZ(mx.z() + e[2]); else mi.setZ(mi.z() + e[2]); } // DBVT_INLINE bool btDbvtAabbMm::Contain(const btDbvtAabbMm& a) const { return ((mi.x() <= a.mi.x()) && (mi.y() <= a.mi.y()) && (mi.z() <= a.mi.z()) && (mx.x() >= a.mx.x()) && (mx.y() >= a.mx.y()) && (mx.z() >= a.mx.z())); } // DBVT_INLINE int btDbvtAabbMm::Classify(const btVector3& n, btScalar o, int s) const { btVector3 pi, px; switch (s) { case (0 + 0 + 0): px = btVector3(mi.x(), mi.y(), mi.z()); pi = btVector3(mx.x(), mx.y(), mx.z()); break; case (1 + 0 + 0): px = btVector3(mx.x(), mi.y(), mi.z()); pi = btVector3(mi.x(), mx.y(), mx.z()); break; case (0 + 2 + 0): px = btVector3(mi.x(), mx.y(), mi.z()); pi = btVector3(mx.x(), mi.y(), mx.z()); break; case (1 + 2 + 0): px = btVector3(mx.x(), mx.y(), mi.z()); pi = btVector3(mi.x(), mi.y(), mx.z()); break; case (0 + 0 + 4): px = btVector3(mi.x(), mi.y(), mx.z()); pi = btVector3(mx.x(), mx.y(), mi.z()); break; case (1 + 0 + 4): px = btVector3(mx.x(), mi.y(), mx.z()); pi = btVector3(mi.x(), mx.y(), mi.z()); break; case (0 + 2 + 4): px = btVector3(mi.x(), mx.y(), mx.z()); pi = btVector3(mx.x(), mi.y(), mi.z()); break; case (1 + 2 + 4): px = btVector3(mx.x(), mx.y(), mx.z()); pi = btVector3(mi.x(), mi.y(), mi.z()); break; } if ((btDot(n, px) + o) < 0) return (-1); if ((btDot(n, pi) + o) >= 0) return (+1); return (0); } // DBVT_INLINE btScalar btDbvtAabbMm::ProjectMinimum(const btVector3& v, unsigned signs) const { const btVector3* b[] = {&mx, &mi}; const btVector3 p(b[(signs >> 0) & 1]->x(), b[(signs >> 1) & 1]->y(), b[(signs >> 2) & 1]->z()); return (btDot(p, v)); } // DBVT_INLINE void btDbvtAabbMm::AddSpan(const btVector3& d, btScalar& smi, btScalar& smx) const { for (int i = 0; i < 3; ++i) { if (d[i] < 0) { smi += mx[i] * d[i]; smx += mi[i] * d[i]; } else { smi += mi[i] * d[i]; smx += mx[i] * d[i]; } } } // DBVT_INLINE bool Intersect(const btDbvtAabbMm& a, const btDbvtAabbMm& b) { #if DBVT_INT0_IMPL == DBVT_IMPL_SSE const __m128 rt(_mm_or_ps(_mm_cmplt_ps(_mm_load_ps(b.mx), _mm_load_ps(a.mi)), _mm_cmplt_ps(_mm_load_ps(a.mx), _mm_load_ps(b.mi)))); #if defined(_WIN32) const __int32* pu((const __int32*)&rt); #else const int* pu((const int*)&rt); #endif return ((pu[0] | pu[1] | pu[2]) == 0); #else return ((a.mi.x() <= b.mx.x()) && (a.mx.x() >= b.mi.x()) && (a.mi.y() <= b.mx.y()) && (a.mx.y() >= b.mi.y()) && (a.mi.z() <= b.mx.z()) && (a.mx.z() >= b.mi.z())); #endif } // DBVT_INLINE bool Intersect(const btDbvtAabbMm& a, const btVector3& b) { return ((b.x() >= a.mi.x()) && (b.y() >= a.mi.y()) && (b.z() >= a.mi.z()) && (b.x() <= a.mx.x()) && (b.y() <= a.mx.y()) && (b.z() <= a.mx.z())); } ////////////////////////////////////// // DBVT_INLINE btScalar Proximity(const btDbvtAabbMm& a, const btDbvtAabbMm& b) { const btVector3 d = (a.mi + a.mx) - (b.mi + b.mx); return (btFabs(d.x()) + btFabs(d.y()) + btFabs(d.z())); } // DBVT_INLINE int Select(const btDbvtAabbMm& o, const btDbvtAabbMm& a, const btDbvtAabbMm& b) { #if DBVT_SELECT_IMPL == DBVT_IMPL_SSE #if defined(_WIN32) static ATTRIBUTE_ALIGNED16(const unsigned __int32) mask[] = {0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff}; #else static ATTRIBUTE_ALIGNED16(const unsigned int) mask[] = {0x7fffffff, 0x7fffffff, 0x7fffffff, 0x00000000 /*0x7fffffff*/}; #endif ///@todo: the intrinsic version is 11% slower #if DBVT_USE_INTRINSIC_SSE union btSSEUnion ///NOTE: if we use more intrinsics, move btSSEUnion into the LinearMath directory { __m128 ssereg; float floats[4]; int ints[4]; }; __m128 omi(_mm_load_ps(o.mi)); omi = _mm_add_ps(omi, _mm_load_ps(o.mx)); __m128 ami(_mm_load_ps(a.mi)); ami = _mm_add_ps(ami, _mm_load_ps(a.mx)); ami = _mm_sub_ps(ami, omi); ami = _mm_and_ps(ami, _mm_load_ps((const float*)mask)); __m128 bmi(_mm_load_ps(b.mi)); bmi = _mm_add_ps(bmi, _mm_load_ps(b.mx)); bmi = _mm_sub_ps(bmi, omi); bmi = _mm_and_ps(bmi, _mm_load_ps((const float*)mask)); __m128 t0(_mm_movehl_ps(ami, ami)); ami = _mm_add_ps(ami, t0); ami = _mm_add_ss(ami, _mm_shuffle_ps(ami, ami, 1)); __m128 t1(_mm_movehl_ps(bmi, bmi)); bmi = _mm_add_ps(bmi, t1); bmi = _mm_add_ss(bmi, _mm_shuffle_ps(bmi, bmi, 1)); btSSEUnion tmp; tmp.ssereg = _mm_cmple_ss(bmi, ami); return tmp.ints[0] & 1; #else ATTRIBUTE_ALIGNED16(__int32 r[1]); __asm { mov eax,o mov ecx,a mov edx,b movaps xmm0,[eax] movaps xmm5,mask addps xmm0,[eax+16] movaps xmm1,[ecx] movaps xmm2,[edx] addps xmm1,[ecx+16] addps xmm2,[edx+16] subps xmm1,xmm0 subps xmm2,xmm0 andps xmm1,xmm5 andps xmm2,xmm5 movhlps xmm3,xmm1 movhlps xmm4,xmm2 addps xmm1,xmm3 addps xmm2,xmm4 pshufd xmm3,xmm1,1 pshufd xmm4,xmm2,1 addss xmm1,xmm3 addss xmm2,xmm4 cmpless xmm2,xmm1 movss r,xmm2 } return (r[0] & 1); #endif #else return (Proximity(o, a) < Proximity(o, b) ? 0 : 1); #endif } // DBVT_INLINE void Merge(const btDbvtAabbMm& a, const btDbvtAabbMm& b, btDbvtAabbMm& r) { #if DBVT_MERGE_IMPL == DBVT_IMPL_SSE __m128 ami(_mm_load_ps(a.mi)); __m128 amx(_mm_load_ps(a.mx)); __m128 bmi(_mm_load_ps(b.mi)); __m128 bmx(_mm_load_ps(b.mx)); ami = _mm_min_ps(ami, bmi); amx = _mm_max_ps(amx, bmx); _mm_store_ps(r.mi, ami); _mm_store_ps(r.mx, amx); #else for (int i = 0; i < 3; ++i) { if (a.mi[i] < b.mi[i]) r.mi[i] = a.mi[i]; else r.mi[i] = b.mi[i]; if (a.mx[i] > b.mx[i]) r.mx[i] = a.mx[i]; else r.mx[i] = b.mx[i]; } #endif } // DBVT_INLINE bool NotEqual(const btDbvtAabbMm& a, const btDbvtAabbMm& b) { return ((a.mi.x() != b.mi.x()) || (a.mi.y() != b.mi.y()) || (a.mi.z() != b.mi.z()) || (a.mx.x() != b.mx.x()) || (a.mx.y() != b.mx.y()) || (a.mx.z() != b.mx.z())); } // // Inline's // // DBVT_PREFIX inline void btDbvt::enumNodes(const btDbvtNode* root, DBVT_IPOLICY) { DBVT_CHECKTYPE policy.Process(root); if (root->isinternal()) { enumNodes(root->childs[0], policy); enumNodes(root->childs[1], policy); } } // DBVT_PREFIX inline void btDbvt::enumLeaves(const btDbvtNode* root, DBVT_IPOLICY) { DBVT_CHECKTYPE if (root->isinternal()) { enumLeaves(root->childs[0], policy); enumLeaves(root->childs[1], policy); } else { policy.Process(root); } } // DBVT_PREFIX inline void btDbvt::collideTT(const btDbvtNode* root0, const btDbvtNode* root1, DBVT_IPOLICY) { DBVT_CHECKTYPE if (root0 && root1) { int depth = 1; int treshold = DOUBLE_STACKSIZE - 4; btAlignedObjectArray stkStack; stkStack.resize(DOUBLE_STACKSIZE); stkStack[0] = sStkNN(root0, root1); do { sStkNN p = stkStack[--depth]; if (depth > treshold) { stkStack.resize(stkStack.size() * 2); treshold = stkStack.size() - 4; } if (p.a == p.b) { if (p.a->isinternal()) { stkStack[depth++] = sStkNN(p.a->childs[0], p.a->childs[0]); stkStack[depth++] = sStkNN(p.a->childs[1], p.a->childs[1]); stkStack[depth++] = sStkNN(p.a->childs[0], p.a->childs[1]); } } else if (Intersect(p.a->volume, p.b->volume)) { if (p.a->isinternal()) { if (p.b->isinternal()) { stkStack[depth++] = sStkNN(p.a->childs[0], p.b->childs[0]); stkStack[depth++] = sStkNN(p.a->childs[1], p.b->childs[0]); stkStack[depth++] = sStkNN(p.a->childs[0], p.b->childs[1]); stkStack[depth++] = sStkNN(p.a->childs[1], p.b->childs[1]); } else { stkStack[depth++] = sStkNN(p.a->childs[0], p.b); stkStack[depth++] = sStkNN(p.a->childs[1], p.b); } } else { if (p.b->isinternal()) { stkStack[depth++] = sStkNN(p.a, p.b->childs[0]); stkStack[depth++] = sStkNN(p.a, p.b->childs[1]); } else { policy.Process(p.a, p.b); } } } } while (depth); } } // DBVT_PREFIX inline void btDbvt::selfCollideT(const btDbvntNode* root, DBVT_IPOLICY) { DBVT_CHECKTYPE if (root) { int depth = 1; int treshold = DOUBLE_STACKSIZE - 4; btAlignedObjectArray stkStack; stkStack.resize(DOUBLE_STACKSIZE); stkStack[0] = sStknNN(root, root); do { sStknNN p = stkStack[--depth]; if (depth > treshold) { stkStack.resize(stkStack.size() * 2); treshold = stkStack.size() - 4; } if (p.a == p.b) { if (p.a->isinternal() && p.a->angle > SIMD_PI) { stkStack[depth++] = sStknNN(p.a->childs[0], p.a->childs[0]); stkStack[depth++] = sStknNN(p.a->childs[1], p.a->childs[1]); stkStack[depth++] = sStknNN(p.a->childs[0], p.a->childs[1]); } } else if (Intersect(p.a->volume, p.b->volume)) { if (p.a->isinternal()) { if (p.b->isinternal()) { stkStack[depth++] = sStknNN(p.a->childs[0], p.b->childs[0]); stkStack[depth++] = sStknNN(p.a->childs[1], p.b->childs[0]); stkStack[depth++] = sStknNN(p.a->childs[0], p.b->childs[1]); stkStack[depth++] = sStknNN(p.a->childs[1], p.b->childs[1]); } else { stkStack[depth++] = sStknNN(p.a->childs[0], p.b); stkStack[depth++] = sStknNN(p.a->childs[1], p.b); } } else { if (p.b->isinternal()) { stkStack[depth++] = sStknNN(p.a, p.b->childs[0]); stkStack[depth++] = sStknNN(p.a, p.b->childs[1]); } else { policy.Process(p.a, p.b); } } } } while (depth); } } // DBVT_PREFIX inline void btDbvt::selfCollideTT(const btDbvtNode* root, DBVT_IPOLICY) { DBVT_CHECKTYPE if (root) { int depth = 1; int treshold = DOUBLE_STACKSIZE - 4; btAlignedObjectArray stkStack; stkStack.resize(DOUBLE_STACKSIZE); stkStack[0] = sStkNN(root, root); do { sStkNN p = stkStack[--depth]; if (depth > treshold) { stkStack.resize(stkStack.size() * 2); treshold = stkStack.size() - 4; } if (p.a == p.b) { if (p.a->isinternal()) { stkStack[depth++] = sStkNN(p.a->childs[0], p.a->childs[0]); stkStack[depth++] = sStkNN(p.a->childs[1], p.a->childs[1]); stkStack[depth++] = sStkNN(p.a->childs[0], p.a->childs[1]); } } else if (Intersect(p.a->volume, p.b->volume)) { if (p.a->isinternal()) { if (p.b->isinternal()) { stkStack[depth++] = sStkNN(p.a->childs[0], p.b->childs[0]); stkStack[depth++] = sStkNN(p.a->childs[1], p.b->childs[0]); stkStack[depth++] = sStkNN(p.a->childs[0], p.b->childs[1]); stkStack[depth++] = sStkNN(p.a->childs[1], p.b->childs[1]); } else { stkStack[depth++] = sStkNN(p.a->childs[0], p.b); stkStack[depth++] = sStkNN(p.a->childs[1], p.b); } } else { if (p.b->isinternal()) { stkStack[depth++] = sStkNN(p.a, p.b->childs[0]); stkStack[depth++] = sStkNN(p.a, p.b->childs[1]); } else { policy.Process(p.a, p.b); } } } } while (depth); } } DBVT_PREFIX inline void btDbvt::collideTTpersistentStack(const btDbvtNode* root0, const btDbvtNode* root1, DBVT_IPOLICY) { DBVT_CHECKTYPE if (root0 && root1) { int depth = 1; int treshold = DOUBLE_STACKSIZE - 4; m_stkStack.resize(DOUBLE_STACKSIZE); m_stkStack[0] = sStkNN(root0, root1); do { sStkNN p = m_stkStack[--depth]; if (depth > treshold) { m_stkStack.resize(m_stkStack.size() * 2); treshold = m_stkStack.size() - 4; } if (p.a == p.b) { if (p.a->isinternal()) { m_stkStack[depth++] = sStkNN(p.a->childs[0], p.a->childs[0]); m_stkStack[depth++] = sStkNN(p.a->childs[1], p.a->childs[1]); m_stkStack[depth++] = sStkNN(p.a->childs[0], p.a->childs[1]); } } else if (Intersect(p.a->volume, p.b->volume)) { if (p.a->isinternal()) { if (p.b->isinternal()) { m_stkStack[depth++] = sStkNN(p.a->childs[0], p.b->childs[0]); m_stkStack[depth++] = sStkNN(p.a->childs[1], p.b->childs[0]); m_stkStack[depth++] = sStkNN(p.a->childs[0], p.b->childs[1]); m_stkStack[depth++] = sStkNN(p.a->childs[1], p.b->childs[1]); } else { m_stkStack[depth++] = sStkNN(p.a->childs[0], p.b); m_stkStack[depth++] = sStkNN(p.a->childs[1], p.b); } } else { if (p.b->isinternal()) { m_stkStack[depth++] = sStkNN(p.a, p.b->childs[0]); m_stkStack[depth++] = sStkNN(p.a, p.b->childs[1]); } else { policy.Process(p.a, p.b); } } } } while (depth); } } #if 0 // DBVT_PREFIX inline void btDbvt::collideTT( const btDbvtNode* root0, const btDbvtNode* root1, const btTransform& xform, DBVT_IPOLICY) { DBVT_CHECKTYPE if(root0&&root1) { int depth=1; int treshold=DOUBLE_STACKSIZE-4; btAlignedObjectArray stkStack; stkStack.resize(DOUBLE_STACKSIZE); stkStack[0]=sStkNN(root0,root1); do { sStkNN p=stkStack[--depth]; if(Intersect(p.a->volume,p.b->volume,xform)) { if(depth>treshold) { stkStack.resize(stkStack.size()*2); treshold=stkStack.size()-4; } if(p.a->isinternal()) { if(p.b->isinternal()) { stkStack[depth++]=sStkNN(p.a->childs[0],p.b->childs[0]); stkStack[depth++]=sStkNN(p.a->childs[1],p.b->childs[0]); stkStack[depth++]=sStkNN(p.a->childs[0],p.b->childs[1]); stkStack[depth++]=sStkNN(p.a->childs[1],p.b->childs[1]); } else { stkStack[depth++]=sStkNN(p.a->childs[0],p.b); stkStack[depth++]=sStkNN(p.a->childs[1],p.b); } } else { if(p.b->isinternal()) { stkStack[depth++]=sStkNN(p.a,p.b->childs[0]); stkStack[depth++]=sStkNN(p.a,p.b->childs[1]); } else { policy.Process(p.a,p.b); } } } } while(depth); } } // DBVT_PREFIX inline void btDbvt::collideTT( const btDbvtNode* root0, const btTransform& xform0, const btDbvtNode* root1, const btTransform& xform1, DBVT_IPOLICY) { const btTransform xform=xform0.inverse()*xform1; collideTT(root0,root1,xform,policy); } #endif DBVT_PREFIX inline void btDbvt::collideTV(const btDbvtNode* root, const btDbvtVolume& vol, DBVT_IPOLICY) const { DBVT_CHECKTYPE if (root) { ATTRIBUTE_ALIGNED16(btDbvtVolume) volume(vol); btAlignedObjectArray stack; stack.resize(0); #ifndef BT_DISABLE_STACK_TEMP_MEMORY char tempmemory[SIMPLE_STACKSIZE * sizeof(const btDbvtNode*)]; stack.initializeFromBuffer(tempmemory, 0, SIMPLE_STACKSIZE); #else stack.reserve(SIMPLE_STACKSIZE); #endif //BT_DISABLE_STACK_TEMP_MEMORY stack.push_back(root); do { const btDbvtNode* n = stack[stack.size() - 1]; stack.pop_back(); if (Intersect(n->volume, volume)) { if (n->isinternal()) { stack.push_back(n->childs[0]); stack.push_back(n->childs[1]); } else { policy.Process(n); } } } while (stack.size() > 0); } } // DBVT_PREFIX inline void btDbvt::collideTVNoStackAlloc(const btDbvtNode* root, const btDbvtVolume& vol, btNodeStack& stack, DBVT_IPOLICY) const { DBVT_CHECKTYPE if (root) { ATTRIBUTE_ALIGNED16(btDbvtVolume) volume(vol); stack.resize(0); stack.reserve(SIMPLE_STACKSIZE); stack.push_back(root); do { const btDbvtNode* n = stack[stack.size() - 1]; stack.pop_back(); if (Intersect(n->volume, volume)) { if (n->isinternal()) { stack.push_back(n->childs[0]); stack.push_back(n->childs[1]); } else { policy.Process(n); } } } while (stack.size() > 0); } } DBVT_PREFIX inline void btDbvt::rayTestInternal(const btDbvtNode* root, const btVector3& rayFrom, const btVector3& rayTo, const btVector3& rayDirectionInverse, unsigned int signs[3], btScalar lambda_max, const btVector3& aabbMin, const btVector3& aabbMax, btAlignedObjectArray& stack, DBVT_IPOLICY) const { (void)rayTo; DBVT_CHECKTYPE if (root) { btVector3 resultNormal; int depth = 1; int treshold = DOUBLE_STACKSIZE - 2; stack.resize(DOUBLE_STACKSIZE); stack[0] = root; btVector3 bounds[2]; do { const btDbvtNode* node = stack[--depth]; bounds[0] = node->volume.Mins() - aabbMax; bounds[1] = node->volume.Maxs() - aabbMin; btScalar tmin = 1.f, lambda_min = 0.f; unsigned int result1 = false; result1 = btRayAabb2(rayFrom, rayDirectionInverse, signs, bounds, tmin, lambda_min, lambda_max); if (result1) { if (node->isinternal()) { if (depth > treshold) { stack.resize(stack.size() * 2); treshold = stack.size() - 2; } stack[depth++] = node->childs[0]; stack[depth++] = node->childs[1]; } else { policy.Process(node); } } } while (depth); } } // DBVT_PREFIX inline void btDbvt::rayTest(const btDbvtNode* root, const btVector3& rayFrom, const btVector3& rayTo, DBVT_IPOLICY) { DBVT_CHECKTYPE if (root) { btVector3 rayDir = (rayTo - rayFrom); rayDir.normalize(); ///what about division by zero? --> just set rayDirection[i] to INF/BT_LARGE_FLOAT btVector3 rayDirectionInverse; rayDirectionInverse[0] = rayDir[0] == btScalar(0.0) ? btScalar(BT_LARGE_FLOAT) : btScalar(1.0) / rayDir[0]; rayDirectionInverse[1] = rayDir[1] == btScalar(0.0) ? btScalar(BT_LARGE_FLOAT) : btScalar(1.0) / rayDir[1]; rayDirectionInverse[2] = rayDir[2] == btScalar(0.0) ? btScalar(BT_LARGE_FLOAT) : btScalar(1.0) / rayDir[2]; unsigned int signs[3] = {rayDirectionInverse[0] < 0.0, rayDirectionInverse[1] < 0.0, rayDirectionInverse[2] < 0.0}; btScalar lambda_max = rayDir.dot(rayTo - rayFrom); btVector3 resultNormal; btAlignedObjectArray stack; int depth = 1; int treshold = DOUBLE_STACKSIZE - 2; char tempmemory[DOUBLE_STACKSIZE * sizeof(const btDbvtNode*)]; #ifndef BT_DISABLE_STACK_TEMP_MEMORY stack.initializeFromBuffer(tempmemory, DOUBLE_STACKSIZE, DOUBLE_STACKSIZE); #else //BT_DISABLE_STACK_TEMP_MEMORY stack.resize(DOUBLE_STACKSIZE); #endif //BT_DISABLE_STACK_TEMP_MEMORY stack[0] = root; btVector3 bounds[2]; do { const btDbvtNode* node = stack[--depth]; bounds[0] = node->volume.Mins(); bounds[1] = node->volume.Maxs(); btScalar tmin = 1.f, lambda_min = 0.f; unsigned int result1 = btRayAabb2(rayFrom, rayDirectionInverse, signs, bounds, tmin, lambda_min, lambda_max); #ifdef COMPARE_BTRAY_AABB2 btScalar param = 1.f; bool result2 = btRayAabb(rayFrom, rayTo, node->volume.Mins(), node->volume.Maxs(), param, resultNormal); btAssert(result1 == result2); #endif //TEST_BTRAY_AABB2 if (result1) { if (node->isinternal()) { if (depth > treshold) { stack.resize(stack.size() * 2); treshold = stack.size() - 2; } stack[depth++] = node->childs[0]; stack[depth++] = node->childs[1]; } else { policy.Process(node); } } } while (depth); } } // DBVT_PREFIX inline void btDbvt::collideKDOP(const btDbvtNode* root, const btVector3* normals, const btScalar* offsets, int count, DBVT_IPOLICY) { DBVT_CHECKTYPE if (root) { const int inside = (1 << count) - 1; btAlignedObjectArray stack; int signs[sizeof(unsigned) * 8]; btAssert(count < int(sizeof(signs) / sizeof(signs[0]))); for (int i = 0; i < count; ++i) { signs[i] = ((normals[i].x() >= 0) ? 1 : 0) + ((normals[i].y() >= 0) ? 2 : 0) + ((normals[i].z() >= 0) ? 4 : 0); } stack.reserve(SIMPLE_STACKSIZE); stack.push_back(sStkNP(root, 0)); do { sStkNP se = stack[stack.size() - 1]; bool out = false; stack.pop_back(); for (int i = 0, j = 1; (!out) && (i < count); ++i, j <<= 1) { if (0 == (se.mask & j)) { const int side = se.node->volume.Classify(normals[i], offsets[i], signs[i]); switch (side) { case -1: out = true; break; case +1: se.mask |= j; break; } } } if (!out) { if ((se.mask != inside) && (se.node->isinternal())) { stack.push_back(sStkNP(se.node->childs[0], se.mask)); stack.push_back(sStkNP(se.node->childs[1], se.mask)); } else { if (policy.AllLeaves(se.node)) enumLeaves(se.node, policy); } } } while (stack.size()); } } // DBVT_PREFIX inline void btDbvt::collideOCL(const btDbvtNode* root, const btVector3* normals, const btScalar* offsets, const btVector3& sortaxis, int count, DBVT_IPOLICY, bool fsort) { DBVT_CHECKTYPE if (root) { const unsigned srtsgns = (sortaxis[0] >= 0 ? 1 : 0) + (sortaxis[1] >= 0 ? 2 : 0) + (sortaxis[2] >= 0 ? 4 : 0); const int inside = (1 << count) - 1; btAlignedObjectArray stock; btAlignedObjectArray ifree; btAlignedObjectArray stack; int signs[sizeof(unsigned) * 8]; btAssert(count < int(sizeof(signs) / sizeof(signs[0]))); for (int i = 0; i < count; ++i) { signs[i] = ((normals[i].x() >= 0) ? 1 : 0) + ((normals[i].y() >= 0) ? 2 : 0) + ((normals[i].z() >= 0) ? 4 : 0); } stock.reserve(SIMPLE_STACKSIZE); stack.reserve(SIMPLE_STACKSIZE); ifree.reserve(SIMPLE_STACKSIZE); stack.push_back(allocate(ifree, stock, sStkNPS(root, 0, root->volume.ProjectMinimum(sortaxis, srtsgns)))); do { const int id = stack[stack.size() - 1]; sStkNPS se = stock[id]; stack.pop_back(); ifree.push_back(id); if (se.mask != inside) { bool out = false; for (int i = 0, j = 1; (!out) && (i < count); ++i, j <<= 1) { if (0 == (se.mask & j)) { const int side = se.node->volume.Classify(normals[i], offsets[i], signs[i]); switch (side) { case -1: out = true; break; case +1: se.mask |= j; break; } } } if (out) continue; } if (policy.Descent(se.node)) { if (se.node->isinternal()) { const btDbvtNode* pns[] = {se.node->childs[0], se.node->childs[1]}; sStkNPS nes[] = {sStkNPS(pns[0], se.mask, pns[0]->volume.ProjectMinimum(sortaxis, srtsgns)), sStkNPS(pns[1], se.mask, pns[1]->volume.ProjectMinimum(sortaxis, srtsgns))}; const int q = nes[0].value < nes[1].value ? 1 : 0; int j = stack.size(); if (fsort && (j > 0)) { /* Insert 0 */ j = nearest(&stack[0], &stock[0], nes[q].value, 0, stack.size()); stack.push_back(0); //void * memmove ( void * destination, const void * source, size_t num ); #if DBVT_USE_MEMMOVE { int num_items_to_move = stack.size() - 1 - j; if (num_items_to_move > 0) memmove(&stack[j + 1], &stack[j], sizeof(int) * num_items_to_move); } #else for (int k = stack.size() - 1; k > j; --k) { stack[k] = stack[k - 1]; } #endif stack[j] = allocate(ifree, stock, nes[q]); /* Insert 1 */ j = nearest(&stack[0], &stock[0], nes[1 - q].value, j, stack.size()); stack.push_back(0); #if DBVT_USE_MEMMOVE { int num_items_to_move = stack.size() - 1 - j; if (num_items_to_move > 0) memmove(&stack[j + 1], &stack[j], sizeof(int) * num_items_to_move); } #else for (int k = stack.size() - 1; k > j; --k) { stack[k] = stack[k - 1]; } #endif stack[j] = allocate(ifree, stock, nes[1 - q]); } else { stack.push_back(allocate(ifree, stock, nes[q])); stack.push_back(allocate(ifree, stock, nes[1 - q])); } } else { policy.Process(se.node, se.value); } } } while (stack.size()); } } // DBVT_PREFIX inline void btDbvt::collideTU(const btDbvtNode* root, DBVT_IPOLICY) { DBVT_CHECKTYPE if (root) { btAlignedObjectArray stack; stack.reserve(SIMPLE_STACKSIZE); stack.push_back(root); do { const btDbvtNode* n = stack[stack.size() - 1]; stack.pop_back(); if (policy.Descent(n)) { if (n->isinternal()) { stack.push_back(n->childs[0]); stack.push_back(n->childs[1]); } else { policy.Process(n); } } } while (stack.size() > 0); } } // // PP Cleanup // #undef DBVT_USE_MEMMOVE #undef DBVT_USE_TEMPLATE #undef DBVT_VIRTUAL_DTOR #undef DBVT_VIRTUAL #undef DBVT_PREFIX #undef DBVT_IPOLICY #undef DBVT_CHECKTYPE #undef DBVT_IMPL_GENERIC #undef DBVT_IMPL_SSE #undef DBVT_USE_INTRINSIC_SSE #undef DBVT_SELECT_IMPL #undef DBVT_MERGE_IMPL #undef DBVT_INT0_IMPL #endif ================================================ FILE: libraries/bullet/BulletCollision/BroadphaseCollision/btDbvtBroadphase.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ ///btDbvtBroadphase implementation by Nathanael Presson #ifndef BT_DBVT_BROADPHASE_H #define BT_DBVT_BROADPHASE_H #include "BulletCollision/BroadphaseCollision/btDbvt.h" #include "BulletCollision/BroadphaseCollision/btOverlappingPairCache.h" // // Compile time config // #define DBVT_BP_PROFILE 0 //#define DBVT_BP_SORTPAIRS 1 #define DBVT_BP_PREVENTFALSEUPDATE 0 #define DBVT_BP_ACCURATESLEEPING 0 #define DBVT_BP_ENABLE_BENCHMARK 0 //#define DBVT_BP_MARGIN (btScalar)0.05 extern btScalar gDbvtMargin; #if DBVT_BP_PROFILE #define DBVT_BP_PROFILING_RATE 256 #include "LinearMath/btQuickprof.h" #endif // // btDbvtProxy // struct btDbvtProxy : btBroadphaseProxy { /* Fields */ //btDbvtAabbMm aabb; btDbvtNode* leaf; btDbvtProxy* links[2]; int stage; /* ctor */ btDbvtProxy(const btVector3& aabbMin, const btVector3& aabbMax, void* userPtr, int collisionFilterGroup, int collisionFilterMask) : btBroadphaseProxy(aabbMin, aabbMax, userPtr, collisionFilterGroup, collisionFilterMask) { links[0] = links[1] = 0; } }; typedef btAlignedObjectArray btDbvtProxyArray; ///The btDbvtBroadphase implements a broadphase using two dynamic AABB bounding volume hierarchies/trees (see btDbvt). ///One tree is used for static/non-moving objects, and another tree is used for dynamic objects. Objects can move from one tree to the other. ///This is a very fast broadphase, especially for very dynamic worlds where many objects are moving. Its insert/add and remove of objects is generally faster than the sweep and prune broadphases btAxisSweep3 and bt32BitAxisSweep3. struct btDbvtBroadphase : btBroadphaseInterface { /* Config */ enum { DYNAMIC_SET = 0, /* Dynamic set index */ FIXED_SET = 1, /* Fixed set index */ STAGECOUNT = 2 /* Number of stages */ }; /* Fields */ btDbvt m_sets[2]; // Dbvt sets btDbvtProxy* m_stageRoots[STAGECOUNT + 1]; // Stages list btOverlappingPairCache* m_paircache; // Pair cache btScalar m_prediction; // Velocity prediction int m_stageCurrent; // Current stage int m_fupdates; // % of fixed updates per frame int m_dupdates; // % of dynamic updates per frame int m_cupdates; // % of cleanup updates per frame int m_newpairs; // Number of pairs created int m_fixedleft; // Fixed optimization left unsigned m_updates_call; // Number of updates call unsigned m_updates_done; // Number of updates done btScalar m_updates_ratio; // m_updates_done/m_updates_call int m_pid; // Parse id int m_cid; // Cleanup index int m_gid; // Gen id bool m_releasepaircache; // Release pair cache on delete bool m_deferedcollide; // Defere dynamic/static collision to collide call bool m_needcleanup; // Need to run cleanup? btAlignedObjectArray > m_rayTestStacks; #if DBVT_BP_PROFILE btClock m_clock; struct { unsigned long m_total; unsigned long m_ddcollide; unsigned long m_fdcollide; unsigned long m_cleanup; unsigned long m_jobcount; } m_profiling; #endif /* Methods */ btDbvtBroadphase(btOverlappingPairCache* paircache = 0); ~btDbvtBroadphase(); void collide(btDispatcher* dispatcher); void optimize(); /* btBroadphaseInterface Implementation */ btBroadphaseProxy* createProxy(const btVector3& aabbMin, const btVector3& aabbMax, int shapeType, void* userPtr, int collisionFilterGroup, int collisionFilterMask, btDispatcher* dispatcher); virtual void destroyProxy(btBroadphaseProxy* proxy, btDispatcher* dispatcher); virtual void setAabb(btBroadphaseProxy* proxy, const btVector3& aabbMin, const btVector3& aabbMax, btDispatcher* dispatcher); virtual void rayTest(const btVector3& rayFrom, const btVector3& rayTo, btBroadphaseRayCallback& rayCallback, const btVector3& aabbMin = btVector3(0, 0, 0), const btVector3& aabbMax = btVector3(0, 0, 0)); virtual void aabbTest(const btVector3& aabbMin, const btVector3& aabbMax, btBroadphaseAabbCallback& callback); virtual void getAabb(btBroadphaseProxy* proxy, btVector3& aabbMin, btVector3& aabbMax) const; virtual void calculateOverlappingPairs(btDispatcher* dispatcher); virtual btOverlappingPairCache* getOverlappingPairCache(); virtual const btOverlappingPairCache* getOverlappingPairCache() const; virtual void getBroadphaseAabb(btVector3& aabbMin, btVector3& aabbMax) const; virtual void printStats(); ///reset broadphase internal structures, to ensure determinism/reproducability virtual void resetPool(btDispatcher* dispatcher); void performDeferredRemoval(btDispatcher* dispatcher); void setVelocityPrediction(btScalar prediction) { m_prediction = prediction; } btScalar getVelocityPrediction() const { return m_prediction; } ///this setAabbForceUpdate is similar to setAabb but always forces the aabb update. ///it is not part of the btBroadphaseInterface but specific to btDbvtBroadphase. ///it bypasses certain optimizations that prevent aabb updates (when the aabb shrinks), see ///http://code.google.com/p/bullet/issues/detail?id=223 void setAabbForceUpdate(btBroadphaseProxy* absproxy, const btVector3& aabbMin, const btVector3& aabbMax, btDispatcher* /*dispatcher*/); static void benchmark(btBroadphaseInterface*); }; #endif ================================================ FILE: libraries/bullet/BulletCollision/BroadphaseCollision/btDispatcher.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_DISPATCHER_H #define BT_DISPATCHER_H #include "LinearMath/btScalar.h" class btCollisionAlgorithm; struct btBroadphaseProxy; class btRigidBody; class btCollisionObject; class btOverlappingPairCache; struct btCollisionObjectWrapper; class btPersistentManifold; class btPoolAllocator; struct btDispatcherInfo { enum DispatchFunc { DISPATCH_DISCRETE = 1, DISPATCH_CONTINUOUS }; btDispatcherInfo() : m_timeStep(btScalar(0.)), m_stepCount(0), m_dispatchFunc(DISPATCH_DISCRETE), m_timeOfImpact(btScalar(1.)), m_useContinuous(true), m_debugDraw(0), m_enableSatConvex(false), m_enableSPU(true), m_useEpa(true), m_allowedCcdPenetration(btScalar(0.04)), m_useConvexConservativeDistanceUtil(false), m_convexConservativeDistanceThreshold(0.0f), m_deterministicOverlappingPairs(false) { } btScalar m_timeStep; int m_stepCount; int m_dispatchFunc; mutable btScalar m_timeOfImpact; bool m_useContinuous; class btIDebugDraw* m_debugDraw; bool m_enableSatConvex; bool m_enableSPU; bool m_useEpa; btScalar m_allowedCcdPenetration; bool m_useConvexConservativeDistanceUtil; btScalar m_convexConservativeDistanceThreshold; bool m_deterministicOverlappingPairs; }; enum ebtDispatcherQueryType { BT_CONTACT_POINT_ALGORITHMS = 1, BT_CLOSEST_POINT_ALGORITHMS = 2 }; ///The btDispatcher interface class can be used in combination with broadphase to dispatch calculations for overlapping pairs. ///For example for pairwise collision detection, calculating contact points stored in btPersistentManifold or user callbacks (game logic). class btDispatcher { public: virtual ~btDispatcher(); virtual btCollisionAlgorithm* findAlgorithm(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, btPersistentManifold* sharedManifold, ebtDispatcherQueryType queryType) = 0; virtual btPersistentManifold* getNewManifold(const btCollisionObject* b0, const btCollisionObject* b1) = 0; virtual void releaseManifold(btPersistentManifold* manifold) = 0; virtual void clearManifold(btPersistentManifold* manifold) = 0; virtual bool needsCollision(const btCollisionObject* body0, const btCollisionObject* body1) = 0; virtual bool needsResponse(const btCollisionObject* body0, const btCollisionObject* body1) = 0; virtual void dispatchAllCollisionPairs(btOverlappingPairCache* pairCache, const btDispatcherInfo& dispatchInfo, btDispatcher* dispatcher) = 0; virtual int getNumManifolds() const = 0; virtual btPersistentManifold* getManifoldByIndexInternal(int index) = 0; virtual btPersistentManifold** getInternalManifoldPointer() = 0; virtual btPoolAllocator* getInternalManifoldPool() = 0; virtual const btPoolAllocator* getInternalManifoldPool() const = 0; virtual void* allocateCollisionAlgorithm(int size) = 0; virtual void freeCollisionAlgorithm(void* ptr) = 0; }; #endif //BT_DISPATCHER_H ================================================ FILE: libraries/bullet/BulletCollision/BroadphaseCollision/btOverlappingPairCache.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_OVERLAPPING_PAIR_CACHE_H #define BT_OVERLAPPING_PAIR_CACHE_H #include "btBroadphaseInterface.h" #include "btBroadphaseProxy.h" #include "btOverlappingPairCallback.h" #include "LinearMath/btAlignedObjectArray.h" class btDispatcher; typedef btAlignedObjectArray btBroadphasePairArray; struct btOverlapCallback { virtual ~btOverlapCallback() { } //return true for deletion of the pair virtual bool processOverlap(btBroadphasePair& pair) = 0; }; struct btOverlapFilterCallback { virtual ~btOverlapFilterCallback() { } // return true when pairs need collision virtual bool needBroadphaseCollision(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1) const = 0; }; const int BT_NULL_PAIR = 0xffffffff; ///The btOverlappingPairCache provides an interface for overlapping pair management (add, remove, storage), used by the btBroadphaseInterface broadphases. ///The btHashedOverlappingPairCache and btSortedOverlappingPairCache classes are two implementations. class btOverlappingPairCache : public btOverlappingPairCallback { public: virtual ~btOverlappingPairCache() {} // this is needed so we can get to the derived class destructor virtual btBroadphasePair* getOverlappingPairArrayPtr() = 0; virtual const btBroadphasePair* getOverlappingPairArrayPtr() const = 0; virtual btBroadphasePairArray& getOverlappingPairArray() = 0; virtual void cleanOverlappingPair(btBroadphasePair& pair, btDispatcher* dispatcher) = 0; virtual int getNumOverlappingPairs() const = 0; virtual bool needsBroadphaseCollision(btBroadphaseProxy * proxy0, btBroadphaseProxy * proxy1) const = 0; virtual btOverlapFilterCallback* getOverlapFilterCallback() = 0; virtual void cleanProxyFromPairs(btBroadphaseProxy* proxy, btDispatcher* dispatcher) = 0; virtual void setOverlapFilterCallback(btOverlapFilterCallback* callback) = 0; virtual void processAllOverlappingPairs(btOverlapCallback*, btDispatcher* dispatcher) = 0; virtual void processAllOverlappingPairs(btOverlapCallback* callback, btDispatcher* dispatcher, const struct btDispatcherInfo& /*dispatchInfo*/) { processAllOverlappingPairs(callback, dispatcher); } virtual btBroadphasePair* findPair(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1) = 0; virtual bool hasDeferredRemoval() = 0; virtual void setInternalGhostPairCallback(btOverlappingPairCallback* ghostPairCallback) = 0; virtual void sortOverlappingPairs(btDispatcher* dispatcher) = 0; }; /// Hash-space based Pair Cache, thanks to Erin Catto, Box2D, http://www.box2d.org, and Pierre Terdiman, Codercorner, http://codercorner.com ATTRIBUTE_ALIGNED16(class) btHashedOverlappingPairCache : public btOverlappingPairCache { btBroadphasePairArray m_overlappingPairArray; btOverlapFilterCallback* m_overlapFilterCallback; protected: btAlignedObjectArray m_hashTable; btAlignedObjectArray m_next; btOverlappingPairCallback* m_ghostPairCallback; public: BT_DECLARE_ALIGNED_ALLOCATOR(); btHashedOverlappingPairCache(); virtual ~btHashedOverlappingPairCache(); void removeOverlappingPairsContainingProxy(btBroadphaseProxy * proxy, btDispatcher * dispatcher); virtual void* removeOverlappingPair(btBroadphaseProxy * proxy0, btBroadphaseProxy * proxy1, btDispatcher * dispatcher); SIMD_FORCE_INLINE bool needsBroadphaseCollision(btBroadphaseProxy * proxy0, btBroadphaseProxy * proxy1) const { if (m_overlapFilterCallback) return m_overlapFilterCallback->needBroadphaseCollision(proxy0, proxy1); bool collides = (proxy0->m_collisionFilterGroup & proxy1->m_collisionFilterMask) != 0; collides = collides && (proxy1->m_collisionFilterGroup & proxy0->m_collisionFilterMask); return collides; } // Add a pair and return the new pair. If the pair already exists, // no new pair is created and the old one is returned. virtual btBroadphasePair* addOverlappingPair(btBroadphaseProxy * proxy0, btBroadphaseProxy * proxy1) { if (!needsBroadphaseCollision(proxy0, proxy1)) return 0; return internalAddPair(proxy0, proxy1); } void cleanProxyFromPairs(btBroadphaseProxy * proxy, btDispatcher * dispatcher); virtual void processAllOverlappingPairs(btOverlapCallback*, btDispatcher * dispatcher); virtual void processAllOverlappingPairs(btOverlapCallback * callback, btDispatcher * dispatcher, const struct btDispatcherInfo& dispatchInfo); virtual btBroadphasePair* getOverlappingPairArrayPtr() { return &m_overlappingPairArray[0]; } const btBroadphasePair* getOverlappingPairArrayPtr() const { return &m_overlappingPairArray[0]; } btBroadphasePairArray& getOverlappingPairArray() { return m_overlappingPairArray; } const btBroadphasePairArray& getOverlappingPairArray() const { return m_overlappingPairArray; } void cleanOverlappingPair(btBroadphasePair & pair, btDispatcher * dispatcher); btBroadphasePair* findPair(btBroadphaseProxy * proxy0, btBroadphaseProxy * proxy1); int GetCount() const { return m_overlappingPairArray.size(); } // btBroadphasePair* GetPairs() { return m_pairs; } btOverlapFilterCallback* getOverlapFilterCallback() { return m_overlapFilterCallback; } void setOverlapFilterCallback(btOverlapFilterCallback * callback) { m_overlapFilterCallback = callback; } int getNumOverlappingPairs() const { return m_overlappingPairArray.size(); } private: btBroadphasePair* internalAddPair(btBroadphaseProxy * proxy0, btBroadphaseProxy * proxy1); void growTables(); SIMD_FORCE_INLINE bool equalsPair(const btBroadphasePair& pair, int proxyId1, int proxyId2) { return pair.m_pProxy0->getUid() == proxyId1 && pair.m_pProxy1->getUid() == proxyId2; } /* // Thomas Wang's hash, see: http://www.concentric.net/~Ttwang/tech/inthash.htm // This assumes proxyId1 and proxyId2 are 16-bit. SIMD_FORCE_INLINE int getHash(int proxyId1, int proxyId2) { int key = (proxyId2 << 16) | proxyId1; key = ~key + (key << 15); key = key ^ (key >> 12); key = key + (key << 2); key = key ^ (key >> 4); key = key * 2057; key = key ^ (key >> 16); return key; } */ SIMD_FORCE_INLINE unsigned int getHash(unsigned int proxyId1, unsigned int proxyId2) { unsigned int key = proxyId1 | (proxyId2 << 16); // Thomas Wang's hash key += ~(key << 15); key ^= (key >> 10); key += (key << 3); key ^= (key >> 6); key += ~(key << 11); key ^= (key >> 16); return key; } SIMD_FORCE_INLINE btBroadphasePair* internalFindPair(btBroadphaseProxy * proxy0, btBroadphaseProxy * proxy1, int hash) { int proxyId1 = proxy0->getUid(); int proxyId2 = proxy1->getUid(); #if 0 // wrong, 'equalsPair' use unsorted uids, copy-past devil striked again. Nat. if (proxyId1 > proxyId2) btSwap(proxyId1, proxyId2); #endif int index = m_hashTable[hash]; while (index != BT_NULL_PAIR && equalsPair(m_overlappingPairArray[index], proxyId1, proxyId2) == false) { index = m_next[index]; } if (index == BT_NULL_PAIR) { return NULL; } btAssert(index < m_overlappingPairArray.size()); return &m_overlappingPairArray[index]; } virtual bool hasDeferredRemoval() { return false; } virtual void setInternalGhostPairCallback(btOverlappingPairCallback * ghostPairCallback) { m_ghostPairCallback = ghostPairCallback; } virtual void sortOverlappingPairs(btDispatcher * dispatcher); }; ///btSortedOverlappingPairCache maintains the objects with overlapping AABB ///Typically managed by the Broadphase, Axis3Sweep or btSimpleBroadphase class btSortedOverlappingPairCache : public btOverlappingPairCache { protected: //avoid brute-force finding all the time btBroadphasePairArray m_overlappingPairArray; //during the dispatch, check that user doesn't destroy/create proxy bool m_blockedForChanges; ///by default, do the removal during the pair traversal bool m_hasDeferredRemoval; //if set, use the callback instead of the built in filter in needBroadphaseCollision btOverlapFilterCallback* m_overlapFilterCallback; btOverlappingPairCallback* m_ghostPairCallback; public: btSortedOverlappingPairCache(); virtual ~btSortedOverlappingPairCache(); virtual void processAllOverlappingPairs(btOverlapCallback*, btDispatcher* dispatcher); void* removeOverlappingPair(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1, btDispatcher* dispatcher); void cleanOverlappingPair(btBroadphasePair& pair, btDispatcher* dispatcher); btBroadphasePair* addOverlappingPair(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1); btBroadphasePair* findPair(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1); void cleanProxyFromPairs(btBroadphaseProxy* proxy, btDispatcher* dispatcher); void removeOverlappingPairsContainingProxy(btBroadphaseProxy* proxy, btDispatcher* dispatcher); inline bool needsBroadphaseCollision(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1) const { if (m_overlapFilterCallback) return m_overlapFilterCallback->needBroadphaseCollision(proxy0, proxy1); bool collides = (proxy0->m_collisionFilterGroup & proxy1->m_collisionFilterMask) != 0; collides = collides && (proxy1->m_collisionFilterGroup & proxy0->m_collisionFilterMask); return collides; } btBroadphasePairArray& getOverlappingPairArray() { return m_overlappingPairArray; } const btBroadphasePairArray& getOverlappingPairArray() const { return m_overlappingPairArray; } btBroadphasePair* getOverlappingPairArrayPtr() { return &m_overlappingPairArray[0]; } const btBroadphasePair* getOverlappingPairArrayPtr() const { return &m_overlappingPairArray[0]; } int getNumOverlappingPairs() const { return m_overlappingPairArray.size(); } btOverlapFilterCallback* getOverlapFilterCallback() { return m_overlapFilterCallback; } void setOverlapFilterCallback(btOverlapFilterCallback* callback) { m_overlapFilterCallback = callback; } virtual bool hasDeferredRemoval() { return m_hasDeferredRemoval; } virtual void setInternalGhostPairCallback(btOverlappingPairCallback* ghostPairCallback) { m_ghostPairCallback = ghostPairCallback; } virtual void sortOverlappingPairs(btDispatcher* dispatcher); }; ///btNullPairCache skips add/removal of overlapping pairs. Userful for benchmarking and unit testing. class btNullPairCache : public btOverlappingPairCache { btBroadphasePairArray m_overlappingPairArray; public: virtual btBroadphasePair* getOverlappingPairArrayPtr() { return &m_overlappingPairArray[0]; } const btBroadphasePair* getOverlappingPairArrayPtr() const { return &m_overlappingPairArray[0]; } btBroadphasePairArray& getOverlappingPairArray() { return m_overlappingPairArray; } virtual void cleanOverlappingPair(btBroadphasePair& /*pair*/, btDispatcher* /*dispatcher*/) { } virtual int getNumOverlappingPairs() const { return 0; } virtual void cleanProxyFromPairs(btBroadphaseProxy* /*proxy*/, btDispatcher* /*dispatcher*/) { } bool needsBroadphaseCollision(btBroadphaseProxy*, btBroadphaseProxy*) const { return true; } btOverlapFilterCallback* getOverlapFilterCallback() { return 0; } virtual void setOverlapFilterCallback(btOverlapFilterCallback* /*callback*/) { } virtual void processAllOverlappingPairs(btOverlapCallback*, btDispatcher* /*dispatcher*/) { } virtual btBroadphasePair* findPair(btBroadphaseProxy* /*proxy0*/, btBroadphaseProxy* /*proxy1*/) { return 0; } virtual bool hasDeferredRemoval() { return true; } virtual void setInternalGhostPairCallback(btOverlappingPairCallback* /* ghostPairCallback */) { } virtual btBroadphasePair* addOverlappingPair(btBroadphaseProxy* /*proxy0*/, btBroadphaseProxy* /*proxy1*/) { return 0; } virtual void* removeOverlappingPair(btBroadphaseProxy* /*proxy0*/, btBroadphaseProxy* /*proxy1*/, btDispatcher* /*dispatcher*/) { return 0; } virtual void removeOverlappingPairsContainingProxy(btBroadphaseProxy* /*proxy0*/, btDispatcher* /*dispatcher*/) { } virtual void sortOverlappingPairs(btDispatcher* dispatcher) { (void)dispatcher; } }; #endif //BT_OVERLAPPING_PAIR_CACHE_H ================================================ FILE: libraries/bullet/BulletCollision/BroadphaseCollision/btOverlappingPairCallback.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef OVERLAPPING_PAIR_CALLBACK_H #define OVERLAPPING_PAIR_CALLBACK_H class btDispatcher; struct btBroadphasePair; ///The btOverlappingPairCallback class is an additional optional broadphase user callback for adding/removing overlapping pairs, similar interface to btOverlappingPairCache. class btOverlappingPairCallback { protected: btOverlappingPairCallback() {} public: virtual ~btOverlappingPairCallback() { } virtual btBroadphasePair* addOverlappingPair(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1) = 0; virtual void* removeOverlappingPair(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1, btDispatcher* dispatcher) = 0; virtual void removeOverlappingPairsContainingProxy(btBroadphaseProxy* proxy0, btDispatcher* dispatcher) = 0; }; #endif //OVERLAPPING_PAIR_CALLBACK_H ================================================ FILE: libraries/bullet/BulletCollision/BroadphaseCollision/btQuantizedBvh.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_QUANTIZED_BVH_H #define BT_QUANTIZED_BVH_H class btSerializer; //#define DEBUG_CHECK_DEQUANTIZATION 1 #ifdef DEBUG_CHECK_DEQUANTIZATION #ifdef __SPU__ #define printf spu_printf #endif //__SPU__ #include #include #endif //DEBUG_CHECK_DEQUANTIZATION #include "LinearMath/btVector3.h" #include "LinearMath/btAlignedAllocator.h" #ifdef BT_USE_DOUBLE_PRECISION #define btQuantizedBvhData btQuantizedBvhDoubleData #define btOptimizedBvhNodeData btOptimizedBvhNodeDoubleData #define btQuantizedBvhDataName "btQuantizedBvhDoubleData" #else #define btQuantizedBvhData btQuantizedBvhFloatData #define btOptimizedBvhNodeData btOptimizedBvhNodeFloatData #define btQuantizedBvhDataName "btQuantizedBvhFloatData" #endif //http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/vclrf__m128.asp //Note: currently we have 16 bytes per quantized node #define MAX_SUBTREE_SIZE_IN_BYTES 2048 // 10 gives the potential for 1024 parts, with at most 2^21 (2097152) (minus one // actually) triangles each (since the sign bit is reserved #define MAX_NUM_PARTS_IN_BITS 10 ///btQuantizedBvhNode is a compressed aabb node, 16 bytes. ///Node can be used for leafnode or internal node. Leafnodes can point to 32-bit triangle index (non-negative range). ATTRIBUTE_ALIGNED16(struct) btQuantizedBvhNode { BT_DECLARE_ALIGNED_ALLOCATOR(); //12 bytes unsigned short int m_quantizedAabbMin[3]; unsigned short int m_quantizedAabbMax[3]; //4 bytes int m_escapeIndexOrTriangleIndex; bool isLeafNode() const { //skipindex is negative (internal node), triangleindex >=0 (leafnode) return (m_escapeIndexOrTriangleIndex >= 0); } int getEscapeIndex() const { btAssert(!isLeafNode()); return -m_escapeIndexOrTriangleIndex; } int getTriangleIndex() const { btAssert(isLeafNode()); unsigned int x = 0; unsigned int y = (~(x & 0)) << (31 - MAX_NUM_PARTS_IN_BITS); // Get only the lower bits where the triangle index is stored return (m_escapeIndexOrTriangleIndex & ~(y)); } int getPartId() const { btAssert(isLeafNode()); // Get only the highest bits where the part index is stored return (m_escapeIndexOrTriangleIndex >> (31 - MAX_NUM_PARTS_IN_BITS)); } }; /// btOptimizedBvhNode contains both internal and leaf node information. /// Total node size is 44 bytes / node. You can use the compressed version of 16 bytes. ATTRIBUTE_ALIGNED16(struct) btOptimizedBvhNode { BT_DECLARE_ALIGNED_ALLOCATOR(); //32 bytes btVector3 m_aabbMinOrg; btVector3 m_aabbMaxOrg; //4 int m_escapeIndex; //8 //for child nodes int m_subPart; int m_triangleIndex; //pad the size to 64 bytes char m_padding[20]; }; ///btBvhSubtreeInfo provides info to gather a subtree of limited size ATTRIBUTE_ALIGNED16(class) btBvhSubtreeInfo { public: BT_DECLARE_ALIGNED_ALLOCATOR(); //12 bytes unsigned short int m_quantizedAabbMin[3]; unsigned short int m_quantizedAabbMax[3]; //4 bytes, points to the root of the subtree int m_rootNodeIndex; //4 bytes int m_subtreeSize; int m_padding[3]; btBvhSubtreeInfo() { //memset(&m_padding[0], 0, sizeof(m_padding)); } void setAabbFromQuantizeNode(const btQuantizedBvhNode& quantizedNode) { m_quantizedAabbMin[0] = quantizedNode.m_quantizedAabbMin[0]; m_quantizedAabbMin[1] = quantizedNode.m_quantizedAabbMin[1]; m_quantizedAabbMin[2] = quantizedNode.m_quantizedAabbMin[2]; m_quantizedAabbMax[0] = quantizedNode.m_quantizedAabbMax[0]; m_quantizedAabbMax[1] = quantizedNode.m_quantizedAabbMax[1]; m_quantizedAabbMax[2] = quantizedNode.m_quantizedAabbMax[2]; } }; class btNodeOverlapCallback { public: virtual ~btNodeOverlapCallback(){}; virtual void processNode(int subPart, int triangleIndex) = 0; }; #include "LinearMath/btAlignedAllocator.h" #include "LinearMath/btAlignedObjectArray.h" ///for code readability: typedef btAlignedObjectArray NodeArray; typedef btAlignedObjectArray QuantizedNodeArray; typedef btAlignedObjectArray BvhSubtreeInfoArray; ///The btQuantizedBvh class stores an AABB tree that can be quickly traversed on CPU and Cell SPU. ///It is used by the btBvhTriangleMeshShape as midphase. ///It is recommended to use quantization for better performance and lower memory requirements. ATTRIBUTE_ALIGNED16(class) btQuantizedBvh { public: enum btTraversalMode { TRAVERSAL_STACKLESS = 0, TRAVERSAL_STACKLESS_CACHE_FRIENDLY, TRAVERSAL_RECURSIVE }; protected: btVector3 m_bvhAabbMin; btVector3 m_bvhAabbMax; btVector3 m_bvhQuantization; int m_bulletVersion; //for serialization versioning. It could also be used to detect endianess. int m_curNodeIndex; //quantization data bool m_useQuantization; NodeArray m_leafNodes; NodeArray m_contiguousNodes; QuantizedNodeArray m_quantizedLeafNodes; QuantizedNodeArray m_quantizedContiguousNodes; btTraversalMode m_traversalMode; BvhSubtreeInfoArray m_SubtreeHeaders; //This is only used for serialization so we don't have to add serialization directly to btAlignedObjectArray mutable int m_subtreeHeaderCount; ///two versions, one for quantized and normal nodes. This allows code-reuse while maintaining readability (no template/macro!) ///this might be refactored into a virtual, it is usually not calculated at run-time void setInternalNodeAabbMin(int nodeIndex, const btVector3& aabbMin) { if (m_useQuantization) { quantize(&m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[0], aabbMin, 0); } else { m_contiguousNodes[nodeIndex].m_aabbMinOrg = aabbMin; } } void setInternalNodeAabbMax(int nodeIndex, const btVector3& aabbMax) { if (m_useQuantization) { quantize(&m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[0], aabbMax, 1); } else { m_contiguousNodes[nodeIndex].m_aabbMaxOrg = aabbMax; } } btVector3 getAabbMin(int nodeIndex) const { if (m_useQuantization) { return unQuantize(&m_quantizedLeafNodes[nodeIndex].m_quantizedAabbMin[0]); } //non-quantized return m_leafNodes[nodeIndex].m_aabbMinOrg; } btVector3 getAabbMax(int nodeIndex) const { if (m_useQuantization) { return unQuantize(&m_quantizedLeafNodes[nodeIndex].m_quantizedAabbMax[0]); } //non-quantized return m_leafNodes[nodeIndex].m_aabbMaxOrg; } void setInternalNodeEscapeIndex(int nodeIndex, int escapeIndex) { if (m_useQuantization) { m_quantizedContiguousNodes[nodeIndex].m_escapeIndexOrTriangleIndex = -escapeIndex; } else { m_contiguousNodes[nodeIndex].m_escapeIndex = escapeIndex; } } void mergeInternalNodeAabb(int nodeIndex, const btVector3& newAabbMin, const btVector3& newAabbMax) { if (m_useQuantization) { unsigned short int quantizedAabbMin[3]; unsigned short int quantizedAabbMax[3]; quantize(quantizedAabbMin, newAabbMin, 0); quantize(quantizedAabbMax, newAabbMax, 1); for (int i = 0; i < 3; i++) { if (m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[i] > quantizedAabbMin[i]) m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[i] = quantizedAabbMin[i]; if (m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[i] < quantizedAabbMax[i]) m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[i] = quantizedAabbMax[i]; } } else { //non-quantized m_contiguousNodes[nodeIndex].m_aabbMinOrg.setMin(newAabbMin); m_contiguousNodes[nodeIndex].m_aabbMaxOrg.setMax(newAabbMax); } } void swapLeafNodes(int firstIndex, int secondIndex); void assignInternalNodeFromLeafNode(int internalNode, int leafNodeIndex); protected: void buildTree(int startIndex, int endIndex); int calcSplittingAxis(int startIndex, int endIndex); int sortAndCalcSplittingIndex(int startIndex, int endIndex, int splitAxis); void walkStacklessTree(btNodeOverlapCallback * nodeCallback, const btVector3& aabbMin, const btVector3& aabbMax) const; void walkStacklessQuantizedTreeAgainstRay(btNodeOverlapCallback * nodeCallback, const btVector3& raySource, const btVector3& rayTarget, const btVector3& aabbMin, const btVector3& aabbMax, int startNodeIndex, int endNodeIndex) const; void walkStacklessQuantizedTree(btNodeOverlapCallback * nodeCallback, unsigned short int* quantizedQueryAabbMin, unsigned short int* quantizedQueryAabbMax, int startNodeIndex, int endNodeIndex) const; void walkStacklessTreeAgainstRay(btNodeOverlapCallback * nodeCallback, const btVector3& raySource, const btVector3& rayTarget, const btVector3& aabbMin, const btVector3& aabbMax, int startNodeIndex, int endNodeIndex) const; ///tree traversal designed for small-memory processors like PS3 SPU void walkStacklessQuantizedTreeCacheFriendly(btNodeOverlapCallback * nodeCallback, unsigned short int* quantizedQueryAabbMin, unsigned short int* quantizedQueryAabbMax) const; ///use the 16-byte stackless 'skipindex' node tree to do a recursive traversal void walkRecursiveQuantizedTreeAgainstQueryAabb(const btQuantizedBvhNode* currentNode, btNodeOverlapCallback* nodeCallback, unsigned short int* quantizedQueryAabbMin, unsigned short int* quantizedQueryAabbMax) const; ///use the 16-byte stackless 'skipindex' node tree to do a recursive traversal void walkRecursiveQuantizedTreeAgainstQuantizedTree(const btQuantizedBvhNode* treeNodeA, const btQuantizedBvhNode* treeNodeB, btNodeOverlapCallback* nodeCallback) const; void updateSubtreeHeaders(int leftChildNodexIndex, int rightChildNodexIndex); public: BT_DECLARE_ALIGNED_ALLOCATOR(); btQuantizedBvh(); virtual ~btQuantizedBvh(); ///***************************************** expert/internal use only ************************* void setQuantizationValues(const btVector3& bvhAabbMin, const btVector3& bvhAabbMax, btScalar quantizationMargin = btScalar(1.0)); QuantizedNodeArray& getLeafNodeArray() { return m_quantizedLeafNodes; } ///buildInternal is expert use only: assumes that setQuantizationValues and LeafNodeArray are initialized void buildInternal(); ///***************************************** expert/internal use only ************************* void reportAabbOverlappingNodex(btNodeOverlapCallback * nodeCallback, const btVector3& aabbMin, const btVector3& aabbMax) const; void reportRayOverlappingNodex(btNodeOverlapCallback * nodeCallback, const btVector3& raySource, const btVector3& rayTarget) const; void reportBoxCastOverlappingNodex(btNodeOverlapCallback * nodeCallback, const btVector3& raySource, const btVector3& rayTarget, const btVector3& aabbMin, const btVector3& aabbMax) const; SIMD_FORCE_INLINE void quantize(unsigned short* out, const btVector3& point, int isMax) const { btAssert(m_useQuantization); btAssert(point.getX() <= m_bvhAabbMax.getX()); btAssert(point.getY() <= m_bvhAabbMax.getY()); btAssert(point.getZ() <= m_bvhAabbMax.getZ()); btAssert(point.getX() >= m_bvhAabbMin.getX()); btAssert(point.getY() >= m_bvhAabbMin.getY()); btAssert(point.getZ() >= m_bvhAabbMin.getZ()); btVector3 v = (point - m_bvhAabbMin) * m_bvhQuantization; ///Make sure rounding is done in a way that unQuantize(quantizeWithClamp(...)) is conservative ///end-points always set the first bit, so that they are sorted properly (so that neighbouring AABBs overlap properly) ///@todo: double-check this if (isMax) { out[0] = (unsigned short)(((unsigned short)(v.getX() + btScalar(1.)) | 1)); out[1] = (unsigned short)(((unsigned short)(v.getY() + btScalar(1.)) | 1)); out[2] = (unsigned short)(((unsigned short)(v.getZ() + btScalar(1.)) | 1)); } else { out[0] = (unsigned short)(((unsigned short)(v.getX()) & 0xfffe)); out[1] = (unsigned short)(((unsigned short)(v.getY()) & 0xfffe)); out[2] = (unsigned short)(((unsigned short)(v.getZ()) & 0xfffe)); } #ifdef DEBUG_CHECK_DEQUANTIZATION btVector3 newPoint = unQuantize(out); if (isMax) { if (newPoint.getX() < point.getX()) { printf("unconservative X, diffX = %f, oldX=%f,newX=%f\n", newPoint.getX() - point.getX(), newPoint.getX(), point.getX()); } if (newPoint.getY() < point.getY()) { printf("unconservative Y, diffY = %f, oldY=%f,newY=%f\n", newPoint.getY() - point.getY(), newPoint.getY(), point.getY()); } if (newPoint.getZ() < point.getZ()) { printf("unconservative Z, diffZ = %f, oldZ=%f,newZ=%f\n", newPoint.getZ() - point.getZ(), newPoint.getZ(), point.getZ()); } } else { if (newPoint.getX() > point.getX()) { printf("unconservative X, diffX = %f, oldX=%f,newX=%f\n", newPoint.getX() - point.getX(), newPoint.getX(), point.getX()); } if (newPoint.getY() > point.getY()) { printf("unconservative Y, diffY = %f, oldY=%f,newY=%f\n", newPoint.getY() - point.getY(), newPoint.getY(), point.getY()); } if (newPoint.getZ() > point.getZ()) { printf("unconservative Z, diffZ = %f, oldZ=%f,newZ=%f\n", newPoint.getZ() - point.getZ(), newPoint.getZ(), point.getZ()); } } #endif //DEBUG_CHECK_DEQUANTIZATION } SIMD_FORCE_INLINE void quantizeWithClamp(unsigned short* out, const btVector3& point2, int isMax) const { btAssert(m_useQuantization); btVector3 clampedPoint(point2); clampedPoint.setMax(m_bvhAabbMin); clampedPoint.setMin(m_bvhAabbMax); quantize(out, clampedPoint, isMax); } SIMD_FORCE_INLINE btVector3 unQuantize(const unsigned short* vecIn) const { btVector3 vecOut; vecOut.setValue( (btScalar)(vecIn[0]) / (m_bvhQuantization.getX()), (btScalar)(vecIn[1]) / (m_bvhQuantization.getY()), (btScalar)(vecIn[2]) / (m_bvhQuantization.getZ())); vecOut += m_bvhAabbMin; return vecOut; } ///setTraversalMode let's you choose between stackless, recursive or stackless cache friendly tree traversal. Note this is only implemented for quantized trees. void setTraversalMode(btTraversalMode traversalMode) { m_traversalMode = traversalMode; } SIMD_FORCE_INLINE QuantizedNodeArray& getQuantizedNodeArray() { return m_quantizedContiguousNodes; } SIMD_FORCE_INLINE BvhSubtreeInfoArray& getSubtreeInfoArray() { return m_SubtreeHeaders; } //////////////////////////////////////////////////////////////////// /////Calculate space needed to store BVH for serialization unsigned calculateSerializeBufferSize() const; /// Data buffer MUST be 16 byte aligned virtual bool serialize(void* o_alignedDataBuffer, unsigned i_dataBufferSize, bool i_swapEndian) const; ///deSerializeInPlace loads and initializes a BVH from a buffer in memory 'in place' static btQuantizedBvh* deSerializeInPlace(void* i_alignedDataBuffer, unsigned int i_dataBufferSize, bool i_swapEndian); static unsigned int getAlignmentSerializationPadding(); ////////////////////////////////////////////////////////////////////// virtual int calculateSerializeBufferSizeNew() const; ///fills the dataBuffer and returns the struct name (and 0 on failure) virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; virtual void deSerializeFloat(struct btQuantizedBvhFloatData & quantizedBvhFloatData); virtual void deSerializeDouble(struct btQuantizedBvhDoubleData & quantizedBvhDoubleData); //////////////////////////////////////////////////////////////////// SIMD_FORCE_INLINE bool isQuantized() { return m_useQuantization; } private: // Special "copy" constructor that allows for in-place deserialization // Prevents btVector3's default constructor from being called, but doesn't inialize much else // ownsMemory should most likely be false if deserializing, and if you are not, don't call this (it also changes the function signature, which we need) btQuantizedBvh(btQuantizedBvh & other, bool ownsMemory); }; // clang-format off // parser needs * with the name struct btBvhSubtreeInfoData { int m_rootNodeIndex; int m_subtreeSize; unsigned short m_quantizedAabbMin[3]; unsigned short m_quantizedAabbMax[3]; }; struct btOptimizedBvhNodeFloatData { btVector3FloatData m_aabbMinOrg; btVector3FloatData m_aabbMaxOrg; int m_escapeIndex; int m_subPart; int m_triangleIndex; char m_pad[4]; }; struct btOptimizedBvhNodeDoubleData { btVector3DoubleData m_aabbMinOrg; btVector3DoubleData m_aabbMaxOrg; int m_escapeIndex; int m_subPart; int m_triangleIndex; char m_pad[4]; }; struct btQuantizedBvhNodeData { unsigned short m_quantizedAabbMin[3]; unsigned short m_quantizedAabbMax[3]; int m_escapeIndexOrTriangleIndex; }; struct btQuantizedBvhFloatData { btVector3FloatData m_bvhAabbMin; btVector3FloatData m_bvhAabbMax; btVector3FloatData m_bvhQuantization; int m_curNodeIndex; int m_useQuantization; int m_numContiguousLeafNodes; int m_numQuantizedContiguousNodes; btOptimizedBvhNodeFloatData *m_contiguousNodesPtr; btQuantizedBvhNodeData *m_quantizedContiguousNodesPtr; btBvhSubtreeInfoData *m_subTreeInfoPtr; int m_traversalMode; int m_numSubtreeHeaders; }; struct btQuantizedBvhDoubleData { btVector3DoubleData m_bvhAabbMin; btVector3DoubleData m_bvhAabbMax; btVector3DoubleData m_bvhQuantization; int m_curNodeIndex; int m_useQuantization; int m_numContiguousLeafNodes; int m_numQuantizedContiguousNodes; btOptimizedBvhNodeDoubleData *m_contiguousNodesPtr; btQuantizedBvhNodeData *m_quantizedContiguousNodesPtr; int m_traversalMode; int m_numSubtreeHeaders; btBvhSubtreeInfoData *m_subTreeInfoPtr; }; // clang-format on SIMD_FORCE_INLINE int btQuantizedBvh::calculateSerializeBufferSizeNew() const { return sizeof(btQuantizedBvhData); } #endif //BT_QUANTIZED_BVH_H ================================================ FILE: libraries/bullet/BulletCollision/BroadphaseCollision/btSimpleBroadphase.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_SIMPLE_BROADPHASE_H #define BT_SIMPLE_BROADPHASE_H #include "btOverlappingPairCache.h" struct btSimpleBroadphaseProxy : public btBroadphaseProxy { int m_nextFree; // int m_handleId; btSimpleBroadphaseProxy(){}; btSimpleBroadphaseProxy(const btVector3& minpt, const btVector3& maxpt, int shapeType, void* userPtr, int collisionFilterGroup, int collisionFilterMask) : btBroadphaseProxy(minpt, maxpt, userPtr, collisionFilterGroup, collisionFilterMask) { (void)shapeType; } SIMD_FORCE_INLINE void SetNextFree(int next) { m_nextFree = next; } SIMD_FORCE_INLINE int GetNextFree() const { return m_nextFree; } }; ///The SimpleBroadphase is just a unit-test for btAxisSweep3, bt32BitAxisSweep3, or btDbvtBroadphase, so use those classes instead. ///It is a brute force aabb culling broadphase based on O(n^2) aabb checks class btSimpleBroadphase : public btBroadphaseInterface { protected: int m_numHandles; // number of active handles int m_maxHandles; // max number of handles int m_LastHandleIndex; btSimpleBroadphaseProxy* m_pHandles; // handles pool void* m_pHandlesRawPtr; int m_firstFreeHandle; // free handles list int allocHandle() { btAssert(m_numHandles < m_maxHandles); int freeHandle = m_firstFreeHandle; m_firstFreeHandle = m_pHandles[freeHandle].GetNextFree(); m_numHandles++; if (freeHandle > m_LastHandleIndex) { m_LastHandleIndex = freeHandle; } return freeHandle; } void freeHandle(btSimpleBroadphaseProxy* proxy) { int handle = int(proxy - m_pHandles); btAssert(handle >= 0 && handle < m_maxHandles); if (handle == m_LastHandleIndex) { m_LastHandleIndex--; } proxy->SetNextFree(m_firstFreeHandle); m_firstFreeHandle = handle; proxy->m_clientObject = 0; m_numHandles--; } btOverlappingPairCache* m_pairCache; bool m_ownsPairCache; int m_invalidPair; inline btSimpleBroadphaseProxy* getSimpleProxyFromProxy(btBroadphaseProxy* proxy) { btSimpleBroadphaseProxy* proxy0 = static_cast(proxy); return proxy0; } inline const btSimpleBroadphaseProxy* getSimpleProxyFromProxy(btBroadphaseProxy* proxy) const { const btSimpleBroadphaseProxy* proxy0 = static_cast(proxy); return proxy0; } ///reset broadphase internal structures, to ensure determinism/reproducability virtual void resetPool(btDispatcher* dispatcher); void validate(); protected: public: btSimpleBroadphase(int maxProxies = 16384, btOverlappingPairCache* overlappingPairCache = 0); virtual ~btSimpleBroadphase(); static bool aabbOverlap(btSimpleBroadphaseProxy* proxy0, btSimpleBroadphaseProxy* proxy1); virtual btBroadphaseProxy* createProxy(const btVector3& aabbMin, const btVector3& aabbMax, int shapeType, void* userPtr, int collisionFilterGroup, int collisionFilterMask, btDispatcher* dispatcher); virtual void calculateOverlappingPairs(btDispatcher* dispatcher); virtual void destroyProxy(btBroadphaseProxy* proxy, btDispatcher* dispatcher); virtual void setAabb(btBroadphaseProxy* proxy, const btVector3& aabbMin, const btVector3& aabbMax, btDispatcher* dispatcher); virtual void getAabb(btBroadphaseProxy* proxy, btVector3& aabbMin, btVector3& aabbMax) const; virtual void rayTest(const btVector3& rayFrom, const btVector3& rayTo, btBroadphaseRayCallback& rayCallback, const btVector3& aabbMin = btVector3(0, 0, 0), const btVector3& aabbMax = btVector3(0, 0, 0)); virtual void aabbTest(const btVector3& aabbMin, const btVector3& aabbMax, btBroadphaseAabbCallback& callback); btOverlappingPairCache* getOverlappingPairCache() { return m_pairCache; } const btOverlappingPairCache* getOverlappingPairCache() const { return m_pairCache; } bool testAabbOverlap(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1); ///getAabb returns the axis aligned bounding box in the 'global' coordinate frame ///will add some transform later virtual void getBroadphaseAabb(btVector3& aabbMin, btVector3& aabbMax) const { aabbMin.setValue(-BT_LARGE_FLOAT, -BT_LARGE_FLOAT, -BT_LARGE_FLOAT); aabbMax.setValue(BT_LARGE_FLOAT, BT_LARGE_FLOAT, BT_LARGE_FLOAT); } virtual void printStats() { // printf("btSimpleBroadphase.h\n"); // printf("numHandles = %d, maxHandles = %d\n",m_numHandles,m_maxHandles); } }; #endif //BT_SIMPLE_BROADPHASE_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionDispatch/SphereTriangleDetector.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_SPHERE_TRIANGLE_DETECTOR_H #define BT_SPHERE_TRIANGLE_DETECTOR_H #include "BulletCollision/NarrowPhaseCollision/btDiscreteCollisionDetectorInterface.h" class btSphereShape; class btTriangleShape; /// sphere-triangle to match the btDiscreteCollisionDetectorInterface struct SphereTriangleDetector : public btDiscreteCollisionDetectorInterface { virtual void getClosestPoints(const ClosestPointInput& input, Result& output, class btIDebugDraw* debugDraw, bool swapResults = false); SphereTriangleDetector(btSphereShape* sphere, btTriangleShape* triangle, btScalar contactBreakingThreshold); virtual ~SphereTriangleDetector(){}; bool collide(const btVector3& sphereCenter, btVector3& point, btVector3& resultNormal, btScalar& depth, btScalar& timeOfImpact, btScalar contactBreakingThreshold); private: bool pointInTriangle(const btVector3 vertices[], const btVector3& normal, btVector3* p); bool facecontains(const btVector3& p, const btVector3* vertices, btVector3& normal); btSphereShape* m_sphere; btTriangleShape* m_triangle; btScalar m_contactBreakingThreshold; }; #endif //BT_SPHERE_TRIANGLE_DETECTOR_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2008 Erwin Coumans http://bulletphysics.com This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef __BT_ACTIVATING_COLLISION_ALGORITHM_H #define __BT_ACTIVATING_COLLISION_ALGORITHM_H #include "BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h" ///This class is not enabled yet (work-in-progress) to more aggressively activate objects. class btActivatingCollisionAlgorithm : public btCollisionAlgorithm { // btCollisionObject* m_colObj0; // btCollisionObject* m_colObj1; protected: btActivatingCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci); btActivatingCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap); public: virtual ~btActivatingCollisionAlgorithm(); }; #endif //__BT_ACTIVATING_COLLISION_ALGORITHM_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_BOX_2D_BOX_2D__COLLISION_ALGORITHM_H #define BT_BOX_2D_BOX_2D__COLLISION_ALGORITHM_H #include "BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.h" #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" #include "BulletCollision/BroadphaseCollision/btDispatcher.h" #include "BulletCollision/CollisionDispatch/btCollisionCreateFunc.h" class btPersistentManifold; ///box-box collision detection class btBox2dBox2dCollisionAlgorithm : public btActivatingCollisionAlgorithm { bool m_ownManifold; btPersistentManifold* m_manifoldPtr; public: btBox2dBox2dCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci) : btActivatingCollisionAlgorithm(ci) {} virtual void processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut); virtual btScalar calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut); btBox2dBox2dCollisionAlgorithm(btPersistentManifold* mf, const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap); virtual ~btBox2dBox2dCollisionAlgorithm(); virtual void getAllContactManifolds(btManifoldArray& manifoldArray) { if (m_manifoldPtr && m_ownManifold) { manifoldArray.push_back(m_manifoldPtr); } } struct CreateFunc : public btCollisionAlgorithmCreateFunc { virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap) { int bbsize = sizeof(btBox2dBox2dCollisionAlgorithm); void* ptr = ci.m_dispatcher1->allocateCollisionAlgorithm(bbsize); return new (ptr) btBox2dBox2dCollisionAlgorithm(0, ci, body0Wrap, body1Wrap); } }; }; #endif //BT_BOX_2D_BOX_2D__COLLISION_ALGORITHM_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionDispatch/btBoxBoxCollisionAlgorithm.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_BOX_BOX__COLLISION_ALGORITHM_H #define BT_BOX_BOX__COLLISION_ALGORITHM_H #include "btActivatingCollisionAlgorithm.h" #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" #include "BulletCollision/BroadphaseCollision/btDispatcher.h" #include "BulletCollision/CollisionDispatch/btCollisionCreateFunc.h" class btPersistentManifold; ///box-box collision detection class btBoxBoxCollisionAlgorithm : public btActivatingCollisionAlgorithm { bool m_ownManifold; btPersistentManifold* m_manifoldPtr; public: btBoxBoxCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci) : btActivatingCollisionAlgorithm(ci) {} virtual void processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut); virtual btScalar calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut); btBoxBoxCollisionAlgorithm(btPersistentManifold* mf, const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap); virtual ~btBoxBoxCollisionAlgorithm(); virtual void getAllContactManifolds(btManifoldArray& manifoldArray) { if (m_manifoldPtr && m_ownManifold) { manifoldArray.push_back(m_manifoldPtr); } } struct CreateFunc : public btCollisionAlgorithmCreateFunc { virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap) { int bbsize = sizeof(btBoxBoxCollisionAlgorithm); void* ptr = ci.m_dispatcher1->allocateCollisionAlgorithm(bbsize); return new (ptr) btBoxBoxCollisionAlgorithm(0, ci, body0Wrap, body1Wrap); } }; }; #endif //BT_BOX_BOX__COLLISION_ALGORITHM_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionDispatch/btBoxBoxDetector.h ================================================ /* * Box-Box collision detection re-distributed under the ZLib license with permission from Russell L. Smith * Original version is from Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * All rights reserved. Email: russ@q12.org Web: www.q12.org Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_BOX_BOX_DETECTOR_H #define BT_BOX_BOX_DETECTOR_H class btBoxShape; #include "BulletCollision/NarrowPhaseCollision/btDiscreteCollisionDetectorInterface.h" /// btBoxBoxDetector wraps the ODE box-box collision detector /// re-distributed under the Zlib license with permission from Russell L. Smith struct btBoxBoxDetector : public btDiscreteCollisionDetectorInterface { const btBoxShape* m_box1; const btBoxShape* m_box2; public: btBoxBoxDetector(const btBoxShape* box1, const btBoxShape* box2); virtual ~btBoxBoxDetector(){}; virtual void getClosestPoints(const ClosestPointInput& input, Result& output, class btIDebugDraw* debugDraw, bool swapResults = false); }; #endif //BT_BOX_BOX_DETECTOR_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionDispatch/btCollisionConfiguration.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_COLLISION_CONFIGURATION #define BT_COLLISION_CONFIGURATION struct btCollisionAlgorithmCreateFunc; class btPoolAllocator; ///btCollisionConfiguration allows to configure Bullet collision detection ///stack allocator size, default collision algorithms and persistent manifold pool size ///@todo: describe the meaning class btCollisionConfiguration { public: virtual ~btCollisionConfiguration() { } ///memory pools virtual btPoolAllocator* getPersistentManifoldPool() = 0; virtual btPoolAllocator* getCollisionAlgorithmPool() = 0; virtual btCollisionAlgorithmCreateFunc* getCollisionAlgorithmCreateFunc(int proxyType0, int proxyType1) = 0; virtual btCollisionAlgorithmCreateFunc* getClosestPointsAlgorithmCreateFunc(int proxyType0, int proxyType1) = 0; }; #endif //BT_COLLISION_CONFIGURATION ================================================ FILE: libraries/bullet/BulletCollision/CollisionDispatch/btCollisionCreateFunc.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_COLLISION_CREATE_FUNC #define BT_COLLISION_CREATE_FUNC #include "LinearMath/btAlignedObjectArray.h" class btCollisionAlgorithm; class btCollisionObject; struct btCollisionObjectWrapper; struct btCollisionAlgorithmConstructionInfo; ///Used by the btCollisionDispatcher to register and create instances for btCollisionAlgorithm struct btCollisionAlgorithmCreateFunc { bool m_swapped; btCollisionAlgorithmCreateFunc() : m_swapped(false) { } virtual ~btCollisionAlgorithmCreateFunc(){}; virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo&, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap) { (void)body0Wrap; (void)body1Wrap; return 0; } }; #endif //BT_COLLISION_CREATE_FUNC ================================================ FILE: libraries/bullet/BulletCollision/CollisionDispatch/btCollisionDispatcher.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_COLLISION__DISPATCHER_H #define BT_COLLISION__DISPATCHER_H #include "BulletCollision/BroadphaseCollision/btDispatcher.h" #include "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h" #include "BulletCollision/CollisionDispatch/btManifoldResult.h" #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" #include "LinearMath/btAlignedObjectArray.h" class btIDebugDraw; class btOverlappingPairCache; class btPoolAllocator; class btCollisionConfiguration; #include "btCollisionCreateFunc.h" #define USE_DISPATCH_REGISTRY_ARRAY 1 class btCollisionDispatcher; ///user can override this nearcallback for collision filtering and more finegrained control over collision detection typedef void (*btNearCallback)(btBroadphasePair& collisionPair, btCollisionDispatcher& dispatcher, const btDispatcherInfo& dispatchInfo); ///btCollisionDispatcher supports algorithms that handle ConvexConvex and ConvexConcave collision pairs. ///Time of Impact, Closest Points and Penetration Depth. class btCollisionDispatcher : public btDispatcher { protected: int m_dispatcherFlags; btAlignedObjectArray m_manifoldsPtr; btNearCallback m_nearCallback; btPoolAllocator* m_collisionAlgorithmPoolAllocator; btPoolAllocator* m_persistentManifoldPoolAllocator; btCollisionAlgorithmCreateFunc* m_doubleDispatchContactPoints[MAX_BROADPHASE_COLLISION_TYPES][MAX_BROADPHASE_COLLISION_TYPES]; btCollisionAlgorithmCreateFunc* m_doubleDispatchClosestPoints[MAX_BROADPHASE_COLLISION_TYPES][MAX_BROADPHASE_COLLISION_TYPES]; btCollisionConfiguration* m_collisionConfiguration; public: enum DispatcherFlags { CD_STATIC_STATIC_REPORTED = 1, CD_USE_RELATIVE_CONTACT_BREAKING_THRESHOLD = 2, CD_DISABLE_CONTACTPOOL_DYNAMIC_ALLOCATION = 4 }; int getDispatcherFlags() const { return m_dispatcherFlags; } void setDispatcherFlags(int flags) { m_dispatcherFlags = flags; } ///registerCollisionCreateFunc allows registration of custom/alternative collision create functions void registerCollisionCreateFunc(int proxyType0, int proxyType1, btCollisionAlgorithmCreateFunc* createFunc); void registerClosestPointsCreateFunc(int proxyType0, int proxyType1, btCollisionAlgorithmCreateFunc* createFunc); int getNumManifolds() const { return int(m_manifoldsPtr.size()); } btPersistentManifold** getInternalManifoldPointer() { return m_manifoldsPtr.size() ? &m_manifoldsPtr[0] : 0; } btPersistentManifold* getManifoldByIndexInternal(int index) { btAssert(index>=0); btAssert(index=0); btAssert(index > m_batchManifoldsPtr; bool m_batchUpdating; int m_grainSize; }; #endif //BT_COLLISION_DISPATCHER_MT_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionDispatch/btCollisionObject.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_COLLISION_OBJECT_H #define BT_COLLISION_OBJECT_H #include "LinearMath/btTransform.h" //island management, m_activationState1 #define ACTIVE_TAG 1 #define ISLAND_SLEEPING 2 #define WANTS_DEACTIVATION 3 #define DISABLE_DEACTIVATION 4 #define DISABLE_SIMULATION 5 #define FIXED_BASE_MULTI_BODY 6 struct btBroadphaseProxy; class btCollisionShape; struct btCollisionShapeData; #include "LinearMath/btMotionState.h" #include "LinearMath/btAlignedAllocator.h" #include "LinearMath/btAlignedObjectArray.h" typedef btAlignedObjectArray btCollisionObjectArray; #ifdef BT_USE_DOUBLE_PRECISION #define btCollisionObjectData btCollisionObjectDoubleData #define btCollisionObjectDataName "btCollisionObjectDoubleData" #else #define btCollisionObjectData btCollisionObjectFloatData #define btCollisionObjectDataName "btCollisionObjectFloatData" #endif /// btCollisionObject can be used to manage collision detection objects. /// btCollisionObject maintains all information that is needed for a collision detection: Shape, Transform and AABB proxy. /// They can be added to the btCollisionWorld. ATTRIBUTE_ALIGNED16(class) btCollisionObject { protected: btTransform m_worldTransform; ///m_interpolationWorldTransform is used for CCD and interpolation ///it can be either previous or future (predicted) transform btTransform m_interpolationWorldTransform; //those two are experimental: just added for bullet time effect, so you can still apply impulses (directly modifying velocities) //without destroying the continuous interpolated motion (which uses this interpolation velocities) btVector3 m_interpolationLinearVelocity; btVector3 m_interpolationAngularVelocity; btVector3 m_anisotropicFriction; int m_hasAnisotropicFriction; btScalar m_contactProcessingThreshold; btBroadphaseProxy* m_broadphaseHandle; btCollisionShape* m_collisionShape; ///m_extensionPointer is used by some internal low-level Bullet extensions. void* m_extensionPointer; ///m_rootCollisionShape is temporarily used to store the original collision shape ///The m_collisionShape might be temporarily replaced by a child collision shape during collision detection purposes ///If it is NULL, the m_collisionShape is not temporarily replaced. btCollisionShape* m_rootCollisionShape; int m_collisionFlags; int m_islandTag1; int m_companionId; int m_worldArrayIndex; // index of object in world's collisionObjects array mutable int m_activationState1; mutable btScalar m_deactivationTime; btScalar m_friction; btScalar m_restitution; btScalar m_rollingFriction; //torsional friction orthogonal to contact normal (useful to stop spheres rolling forever) btScalar m_spinningFriction; // torsional friction around the contact normal (useful for grasping) btScalar m_contactDamping; btScalar m_contactStiffness; ///m_internalType is reserved to distinguish Bullet's btCollisionObject, btRigidBody, btSoftBody, btGhostObject etc. ///do not assign your own m_internalType unless you write a new dynamics object class. int m_internalType; ///users can point to their objects, m_userPointer is not used by Bullet, see setUserPointer/getUserPointer void* m_userObjectPointer; int m_userIndex2; int m_userIndex; int m_userIndex3; ///time of impact calculation btScalar m_hitFraction; ///Swept sphere radius (0.0 by default), see btConvexConvexAlgorithm:: btScalar m_ccdSweptSphereRadius; /// Don't do continuous collision detection if the motion (in one step) is less then m_ccdMotionThreshold btScalar m_ccdMotionThreshold; /// If some object should have elaborate collision filtering by sub-classes int m_checkCollideWith; btAlignedObjectArray m_objectsWithoutCollisionCheck; ///internal update revision number. It will be increased when the object changes. This allows some subsystems to perform lazy evaluation. int m_updateRevision; btVector3 m_customDebugColorRGB; public: BT_DECLARE_ALIGNED_ALLOCATOR(); enum CollisionFlags { CF_DYNAMIC_OBJECT = 0, CF_STATIC_OBJECT = 1, CF_KINEMATIC_OBJECT = 2, CF_NO_CONTACT_RESPONSE = 4, CF_CUSTOM_MATERIAL_CALLBACK = 8, //this allows per-triangle material (friction/restitution) CF_CHARACTER_OBJECT = 16, CF_DISABLE_VISUALIZE_OBJECT = 32, //disable debug drawing CF_DISABLE_SPU_COLLISION_PROCESSING = 64, //disable parallel/SPU processing CF_HAS_CONTACT_STIFFNESS_DAMPING = 128, CF_HAS_CUSTOM_DEBUG_RENDERING_COLOR = 256, CF_HAS_FRICTION_ANCHOR = 512, CF_HAS_COLLISION_SOUND_TRIGGER = 1024 }; enum CollisionObjectTypes { CO_COLLISION_OBJECT = 1, CO_RIGID_BODY = 2, ///CO_GHOST_OBJECT keeps track of all objects overlapping its AABB and that pass its collision filter ///It is useful for collision sensors, explosion objects, character controller etc. CO_GHOST_OBJECT = 4, CO_SOFT_BODY = 8, CO_HF_FLUID = 16, CO_USER_TYPE = 32, CO_FEATHERSTONE_LINK = 64 }; enum AnisotropicFrictionFlags { CF_ANISOTROPIC_FRICTION_DISABLED = 0, CF_ANISOTROPIC_FRICTION = 1, CF_ANISOTROPIC_ROLLING_FRICTION = 2 }; SIMD_FORCE_INLINE bool mergesSimulationIslands() const { ///static objects, kinematic and object without contact response don't merge islands return ((m_collisionFlags & (CF_STATIC_OBJECT | CF_KINEMATIC_OBJECT | CF_NO_CONTACT_RESPONSE)) == 0); } const btVector3& getAnisotropicFriction() const { return m_anisotropicFriction; } void setAnisotropicFriction(const btVector3& anisotropicFriction, int frictionMode = CF_ANISOTROPIC_FRICTION) { m_anisotropicFriction = anisotropicFriction; bool isUnity = (anisotropicFriction[0] != 1.f) || (anisotropicFriction[1] != 1.f) || (anisotropicFriction[2] != 1.f); m_hasAnisotropicFriction = isUnity ? frictionMode : 0; } bool hasAnisotropicFriction(int frictionMode = CF_ANISOTROPIC_FRICTION) const { return (m_hasAnisotropicFriction & frictionMode) != 0; } ///the constraint solver can discard solving contacts, if the distance is above this threshold. 0 by default. ///Note that using contacts with positive distance can improve stability. It increases, however, the chance of colliding with degerate contacts, such as 'interior' triangle edges void setContactProcessingThreshold(btScalar contactProcessingThreshold) { m_contactProcessingThreshold = contactProcessingThreshold; } btScalar getContactProcessingThreshold() const { return m_contactProcessingThreshold; } SIMD_FORCE_INLINE bool isStaticObject() const { return (m_collisionFlags & CF_STATIC_OBJECT) != 0; } SIMD_FORCE_INLINE bool isKinematicObject() const { return (m_collisionFlags & CF_KINEMATIC_OBJECT) != 0; } SIMD_FORCE_INLINE bool isStaticOrKinematicObject() const { return (m_collisionFlags & (CF_KINEMATIC_OBJECT | CF_STATIC_OBJECT)) != 0; } SIMD_FORCE_INLINE bool hasContactResponse() const { return (m_collisionFlags & CF_NO_CONTACT_RESPONSE) == 0; } btCollisionObject(); virtual ~btCollisionObject(); virtual void setCollisionShape(btCollisionShape * collisionShape) { m_updateRevision++; m_collisionShape = collisionShape; m_rootCollisionShape = collisionShape; } SIMD_FORCE_INLINE const btCollisionShape* getCollisionShape() const { return m_collisionShape; } SIMD_FORCE_INLINE btCollisionShape* getCollisionShape() { return m_collisionShape; } void setIgnoreCollisionCheck(const btCollisionObject* co, bool ignoreCollisionCheck) { if (ignoreCollisionCheck) { //We don't check for duplicates. Is it ok to leave that up to the user of this API? //int index = m_objectsWithoutCollisionCheck.findLinearSearch(co); //if (index == m_objectsWithoutCollisionCheck.size()) //{ m_objectsWithoutCollisionCheck.push_back(co); //} } else { m_objectsWithoutCollisionCheck.remove(co); } m_checkCollideWith = m_objectsWithoutCollisionCheck.size() > 0; } int getNumObjectsWithoutCollision() const { return m_objectsWithoutCollisionCheck.size(); } const btCollisionObject* getObjectWithoutCollision(int index) { return m_objectsWithoutCollisionCheck[index]; } virtual bool checkCollideWithOverride(const btCollisionObject* co) const { int index = m_objectsWithoutCollisionCheck.findLinearSearch(co); if (index < m_objectsWithoutCollisionCheck.size()) { return false; } return true; } ///Avoid using this internal API call, the extension pointer is used by some Bullet extensions. ///If you need to store your own user pointer, use 'setUserPointer/getUserPointer' instead. void* internalGetExtensionPointer() const { return m_extensionPointer; } ///Avoid using this internal API call, the extension pointer is used by some Bullet extensions ///If you need to store your own user pointer, use 'setUserPointer/getUserPointer' instead. void internalSetExtensionPointer(void* pointer) { m_extensionPointer = pointer; } SIMD_FORCE_INLINE int getActivationState() const { return m_activationState1; } void setActivationState(int newState) const; void setDeactivationTime(btScalar time) { m_deactivationTime = time; } btScalar getDeactivationTime() const { return m_deactivationTime; } void forceActivationState(int newState) const; void activate(bool forceActivation = false) const; SIMD_FORCE_INLINE bool isActive() const { return ((getActivationState() != FIXED_BASE_MULTI_BODY) && (getActivationState() != ISLAND_SLEEPING) && (getActivationState() != DISABLE_SIMULATION)); } void setRestitution(btScalar rest) { m_updateRevision++; m_restitution = rest; } btScalar getRestitution() const { return m_restitution; } void setFriction(btScalar frict) { m_updateRevision++; m_friction = frict; } btScalar getFriction() const { return m_friction; } void setRollingFriction(btScalar frict) { m_updateRevision++; m_rollingFriction = frict; } btScalar getRollingFriction() const { return m_rollingFriction; } void setSpinningFriction(btScalar frict) { m_updateRevision++; m_spinningFriction = frict; } btScalar getSpinningFriction() const { return m_spinningFriction; } void setContactStiffnessAndDamping(btScalar stiffness, btScalar damping) { m_updateRevision++; m_contactStiffness = stiffness; m_contactDamping = damping; m_collisionFlags |= CF_HAS_CONTACT_STIFFNESS_DAMPING; //avoid divisions by zero... if (m_contactStiffness < SIMD_EPSILON) { m_contactStiffness = SIMD_EPSILON; } } btScalar getContactStiffness() const { return m_contactStiffness; } btScalar getContactDamping() const { return m_contactDamping; } ///reserved for Bullet internal usage int getInternalType() const { return m_internalType; } btTransform& getWorldTransform() { return m_worldTransform; } const btTransform& getWorldTransform() const { return m_worldTransform; } void setWorldTransform(const btTransform& worldTrans) { m_updateRevision++; m_worldTransform = worldTrans; } SIMD_FORCE_INLINE btBroadphaseProxy* getBroadphaseHandle() { return m_broadphaseHandle; } SIMD_FORCE_INLINE const btBroadphaseProxy* getBroadphaseHandle() const { return m_broadphaseHandle; } void setBroadphaseHandle(btBroadphaseProxy * handle) { m_broadphaseHandle = handle; } const btTransform& getInterpolationWorldTransform() const { return m_interpolationWorldTransform; } btTransform& getInterpolationWorldTransform() { return m_interpolationWorldTransform; } void setInterpolationWorldTransform(const btTransform& trans) { m_updateRevision++; m_interpolationWorldTransform = trans; } void setInterpolationLinearVelocity(const btVector3& linvel) { m_updateRevision++; m_interpolationLinearVelocity = linvel; } void setInterpolationAngularVelocity(const btVector3& angvel) { m_updateRevision++; m_interpolationAngularVelocity = angvel; } const btVector3& getInterpolationLinearVelocity() const { return m_interpolationLinearVelocity; } const btVector3& getInterpolationAngularVelocity() const { return m_interpolationAngularVelocity; } SIMD_FORCE_INLINE int getIslandTag() const { return m_islandTag1; } void setIslandTag(int tag) { m_islandTag1 = tag; } SIMD_FORCE_INLINE int getCompanionId() const { return m_companionId; } void setCompanionId(int id) { m_companionId = id; } SIMD_FORCE_INLINE int getWorldArrayIndex() const { return m_worldArrayIndex; } // only should be called by CollisionWorld void setWorldArrayIndex(int ix) { m_worldArrayIndex = ix; } SIMD_FORCE_INLINE btScalar getHitFraction() const { return m_hitFraction; } void setHitFraction(btScalar hitFraction) { m_hitFraction = hitFraction; } SIMD_FORCE_INLINE int getCollisionFlags() const { return m_collisionFlags; } void setCollisionFlags(int flags) { m_collisionFlags = flags; } ///Swept sphere radius (0.0 by default), see btConvexConvexAlgorithm:: btScalar getCcdSweptSphereRadius() const { return m_ccdSweptSphereRadius; } ///Swept sphere radius (0.0 by default), see btConvexConvexAlgorithm:: void setCcdSweptSphereRadius(btScalar radius) { m_ccdSweptSphereRadius = radius; } btScalar getCcdMotionThreshold() const { return m_ccdMotionThreshold; } btScalar getCcdSquareMotionThreshold() const { return m_ccdMotionThreshold * m_ccdMotionThreshold; } /// Don't do continuous collision detection if the motion (in one step) is less then m_ccdMotionThreshold void setCcdMotionThreshold(btScalar ccdMotionThreshold) { m_ccdMotionThreshold = ccdMotionThreshold; } ///users can point to their objects, userPointer is not used by Bullet void* getUserPointer() const { return m_userObjectPointer; } int getUserIndex() const { return m_userIndex; } int getUserIndex2() const { return m_userIndex2; } int getUserIndex3() const { return m_userIndex3; } ///users can point to their objects, userPointer is not used by Bullet void setUserPointer(void* userPointer) { m_userObjectPointer = userPointer; } ///users can point to their objects, userPointer is not used by Bullet void setUserIndex(int index) { m_userIndex = index; } void setUserIndex2(int index) { m_userIndex2 = index; } void setUserIndex3(int index) { m_userIndex3 = index; } int getUpdateRevisionInternal() const { return m_updateRevision; } void setCustomDebugColor(const btVector3& colorRGB) { m_customDebugColorRGB = colorRGB; m_collisionFlags |= CF_HAS_CUSTOM_DEBUG_RENDERING_COLOR; } void removeCustomDebugColor() { m_collisionFlags &= ~CF_HAS_CUSTOM_DEBUG_RENDERING_COLOR; } bool getCustomDebugColor(btVector3 & colorRGB) const { bool hasCustomColor = (0 != (m_collisionFlags & CF_HAS_CUSTOM_DEBUG_RENDERING_COLOR)); if (hasCustomColor) { colorRGB = m_customDebugColorRGB; } return hasCustomColor; } inline bool checkCollideWith(const btCollisionObject* co) const { if (m_checkCollideWith) return checkCollideWithOverride(co); return true; } virtual int calculateSerializeBufferSize() const; ///fills the dataBuffer and returns the struct name (and 0 on failure) virtual const char* serialize(void* dataBuffer, class btSerializer* serializer) const; virtual void serializeSingleObject(class btSerializer * serializer) const; }; // clang-format off ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 struct btCollisionObjectDoubleData { void *m_broadphaseHandle; void *m_collisionShape; btCollisionShapeData *m_rootCollisionShape; char *m_name; btTransformDoubleData m_worldTransform; btTransformDoubleData m_interpolationWorldTransform; btVector3DoubleData m_interpolationLinearVelocity; btVector3DoubleData m_interpolationAngularVelocity; btVector3DoubleData m_anisotropicFriction; double m_contactProcessingThreshold; double m_deactivationTime; double m_friction; double m_rollingFriction; double m_contactDamping; double m_contactStiffness; double m_restitution; double m_hitFraction; double m_ccdSweptSphereRadius; double m_ccdMotionThreshold; int m_hasAnisotropicFriction; int m_collisionFlags; int m_islandTag1; int m_companionId; int m_activationState1; int m_internalType; int m_checkCollideWith; int m_collisionFilterGroup; int m_collisionFilterMask; int m_uniqueId;//m_uniqueId is introduced for paircache. could get rid of this, by calculating the address offset etc. }; ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 struct btCollisionObjectFloatData { void *m_broadphaseHandle; void *m_collisionShape; btCollisionShapeData *m_rootCollisionShape; char *m_name; btTransformFloatData m_worldTransform; btTransformFloatData m_interpolationWorldTransform; btVector3FloatData m_interpolationLinearVelocity; btVector3FloatData m_interpolationAngularVelocity; btVector3FloatData m_anisotropicFriction; float m_contactProcessingThreshold; float m_deactivationTime; float m_friction; float m_rollingFriction; float m_contactDamping; float m_contactStiffness; float m_restitution; float m_hitFraction; float m_ccdSweptSphereRadius; float m_ccdMotionThreshold; int m_hasAnisotropicFriction; int m_collisionFlags; int m_islandTag1; int m_companionId; int m_activationState1; int m_internalType; int m_checkCollideWith; int m_collisionFilterGroup; int m_collisionFilterMask; int m_uniqueId; }; // clang-format on SIMD_FORCE_INLINE int btCollisionObject::calculateSerializeBufferSize() const { return sizeof(btCollisionObjectData); } #endif //BT_COLLISION_OBJECT_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h ================================================ #ifndef BT_COLLISION_OBJECT_WRAPPER_H #define BT_COLLISION_OBJECT_WRAPPER_H ///btCollisionObjectWrapperis an internal data structure. ///Most users can ignore this and use btCollisionObject and btCollisionShape instead class btCollisionShape; class btCollisionObject; class btTransform; #include "LinearMath/btScalar.h" // for SIMD_FORCE_INLINE definition #define BT_DECLARE_STACK_ONLY_OBJECT \ private: \ void* operator new(size_t size); \ void operator delete(void*); struct btCollisionObjectWrapper; struct btCollisionObjectWrapper { BT_DECLARE_STACK_ONLY_OBJECT private: btCollisionObjectWrapper(const btCollisionObjectWrapper&); // not implemented. Not allowed. btCollisionObjectWrapper* operator=(const btCollisionObjectWrapper&); public: const btCollisionObjectWrapper* m_parent; const btCollisionShape* m_shape; const btCollisionObject* m_collisionObject; const btTransform& m_worldTransform; const btTransform* m_preTransform; int m_partId; int m_index; btCollisionObjectWrapper(const btCollisionObjectWrapper* parent, const btCollisionShape* shape, const btCollisionObject* collisionObject, const btTransform& worldTransform, int partId, int index) : m_parent(parent), m_shape(shape), m_collisionObject(collisionObject), m_worldTransform(worldTransform), m_preTransform(NULL), m_partId(partId), m_index(index) { } btCollisionObjectWrapper(const btCollisionObjectWrapper* parent, const btCollisionShape* shape, const btCollisionObject* collisionObject, const btTransform& worldTransform, const btTransform& preTransform, int partId, int index) : m_parent(parent), m_shape(shape), m_collisionObject(collisionObject), m_worldTransform(worldTransform), m_preTransform(&preTransform), m_partId(partId), m_index(index) { } SIMD_FORCE_INLINE const btTransform& getWorldTransform() const { return m_worldTransform; } SIMD_FORCE_INLINE const btCollisionObject* getCollisionObject() const { return m_collisionObject; } SIMD_FORCE_INLINE const btCollisionShape* getCollisionShape() const { return m_shape; } }; #endif //BT_COLLISION_OBJECT_WRAPPER_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionDispatch/btCollisionWorld.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * @mainpage Bullet Documentation * * @section intro_sec Introduction * Bullet is a Collision Detection and Rigid Body Dynamics Library. The Library is Open Source and free for commercial use, under the ZLib license ( http://opensource.org/licenses/zlib-license.php ). * * The main documentation is Bullet_User_Manual.pdf, included in the source code distribution. * There is the Physics Forum for feedback and general Collision Detection and Physics discussions. * Please visit http://www.bulletphysics.org * * @section install_sec Installation * * @subsection step1 Step 1: Download * You can download the Bullet Physics Library from the github repository: https://github.com/bulletphysics/bullet3/releases * * @subsection step2 Step 2: Building * Bullet has multiple build systems, including premake, cmake and autotools. Premake and cmake support all platforms. * Premake is included in the Bullet/build folder for Windows, Mac OSX and Linux. * Under Windows you can click on Bullet/build/vs2010.bat to create Microsoft Visual Studio projects. * On Mac OSX and Linux you can open a terminal and generate Makefile, codeblocks or Xcode4 projects: * cd Bullet/build * ./premake4_osx gmake or ./premake4_linux gmake or ./premake4_linux64 gmake or (for Mac) ./premake4_osx xcode4 * cd Bullet/build/gmake * make * * An alternative to premake is cmake. You can download cmake from http://www.cmake.org * cmake can autogenerate projectfiles for Microsoft Visual Studio, Apple Xcode, KDevelop and Unix Makefiles. * The easiest is to run the CMake cmake-gui graphical user interface and choose the options and generate projectfiles. * You can also use cmake in the command-line. Here are some examples for various platforms: * cmake . -G "Visual Studio 9 2008" * cmake . -G Xcode * cmake . -G "Unix Makefiles" * Although cmake is recommended, you can also use autotools for UNIX: ./autogen.sh ./configure to create a Makefile and then run make. * * @subsection step3 Step 3: Testing demos * Try to run and experiment with BasicDemo executable as a starting point. * Bullet can be used in several ways, as Full Rigid Body simulation, as Collision Detector Library or Low Level / Snippets like the GJK Closest Point calculation. * The Dependencies can be seen in this documentation under Directories * * @subsection step4 Step 4: Integrating in your application, full Rigid Body and Soft Body simulation * Check out BasicDemo how to create a btDynamicsWorld, btRigidBody and btCollisionShape, Stepping the simulation and synchronizing your graphics object transform. * Check out SoftDemo how to use soft body dynamics, using btSoftRigidDynamicsWorld. * @subsection step5 Step 5 : Integrate the Collision Detection Library (without Dynamics and other Extras) * Bullet Collision Detection can also be used without the Dynamics/Extras. * Check out btCollisionWorld and btCollisionObject, and the CollisionInterfaceDemo. * @subsection step6 Step 6 : Use Snippets like the GJK Closest Point calculation. * Bullet has been designed in a modular way keeping dependencies to a minimum. The ConvexHullDistance demo demonstrates direct use of btGjkPairDetector. * * @section copyright Copyright * For up-to-data information and copyright and contributors list check out the Bullet_User_Manual.pdf * */ #ifndef BT_COLLISION_WORLD_H #define BT_COLLISION_WORLD_H class btCollisionShape; class btConvexShape; class btBroadphaseInterface; class btSerializer; #include "LinearMath/btVector3.h" #include "LinearMath/btTransform.h" #include "btCollisionObject.h" #include "btCollisionDispatcher.h" #include "BulletCollision/BroadphaseCollision/btOverlappingPairCache.h" #include "LinearMath/btAlignedObjectArray.h" ///CollisionWorld is interface and container for the collision detection class btCollisionWorld { protected: btAlignedObjectArray m_collisionObjects; btDispatcher* m_dispatcher1; btDispatcherInfo m_dispatchInfo; btBroadphaseInterface* m_broadphasePairCache; btIDebugDraw* m_debugDrawer; ///m_forceUpdateAllAabbs can be set to false as an optimization to only update active object AABBs ///it is true by default, because it is error-prone (setting the position of static objects wouldn't update their AABB) bool m_forceUpdateAllAabbs; void serializeCollisionObjects(btSerializer* serializer); void serializeContactManifolds(btSerializer* serializer); public: //this constructor doesn't own the dispatcher and paircache/broadphase btCollisionWorld(btDispatcher* dispatcher, btBroadphaseInterface* broadphasePairCache, btCollisionConfiguration* collisionConfiguration); virtual ~btCollisionWorld(); void setBroadphase(btBroadphaseInterface* pairCache) { m_broadphasePairCache = pairCache; } const btBroadphaseInterface* getBroadphase() const { return m_broadphasePairCache; } btBroadphaseInterface* getBroadphase() { return m_broadphasePairCache; } btOverlappingPairCache* getPairCache() { return m_broadphasePairCache->getOverlappingPairCache(); } btDispatcher* getDispatcher() { return m_dispatcher1; } const btDispatcher* getDispatcher() const { return m_dispatcher1; } void updateSingleAabb(btCollisionObject* colObj); virtual void updateAabbs(); ///the computeOverlappingPairs is usually already called by performDiscreteCollisionDetection (or stepSimulation) ///it can be useful to use if you perform ray tests without collision detection/simulation virtual void computeOverlappingPairs(); virtual void setDebugDrawer(btIDebugDraw* debugDrawer) { m_debugDrawer = debugDrawer; } virtual btIDebugDraw* getDebugDrawer() { return m_debugDrawer; } virtual void debugDrawWorld(); virtual void debugDrawObject(const btTransform& worldTransform, const btCollisionShape* shape, const btVector3& color); ///LocalShapeInfo gives extra information for complex shapes ///Currently, only btTriangleMeshShape is available, so it just contains triangleIndex and subpart struct LocalShapeInfo { int m_shapePart; int m_triangleIndex; //const btCollisionShape* m_shapeTemp; //const btTransform* m_shapeLocalTransform; }; struct LocalRayResult { LocalRayResult(const btCollisionObject* collisionObject, LocalShapeInfo* localShapeInfo, const btVector3& hitNormalLocal, btScalar hitFraction) : m_collisionObject(collisionObject), m_localShapeInfo(localShapeInfo), m_hitNormalLocal(hitNormalLocal), m_hitFraction(hitFraction) { } const btCollisionObject* m_collisionObject; LocalShapeInfo* m_localShapeInfo; btVector3 m_hitNormalLocal; btScalar m_hitFraction; }; ///RayResultCallback is used to report new raycast results struct RayResultCallback { btScalar m_closestHitFraction; const btCollisionObject* m_collisionObject; int m_collisionFilterGroup; int m_collisionFilterMask; //@BP Mod - Custom flags, currently used to enable backface culling on tri-meshes, see btRaycastCallback.h. Apply any of the EFlags defined there on m_flags here to invoke. unsigned int m_flags; virtual ~RayResultCallback() { } bool hasHit() const { return (m_collisionObject != 0); } RayResultCallback() : m_closestHitFraction(btScalar(1.)), m_collisionObject(0), m_collisionFilterGroup(btBroadphaseProxy::DefaultFilter), m_collisionFilterMask(btBroadphaseProxy::AllFilter), //@BP Mod m_flags(0) { } virtual bool needsCollision(btBroadphaseProxy* proxy0) const { bool collides = (proxy0->m_collisionFilterGroup & m_collisionFilterMask) != 0; collides = collides && (m_collisionFilterGroup & proxy0->m_collisionFilterMask); return collides; } virtual btScalar addSingleResult(LocalRayResult& rayResult, bool normalInWorldSpace) = 0; }; struct ClosestRayResultCallback : public RayResultCallback { ClosestRayResultCallback(const btVector3& rayFromWorld, const btVector3& rayToWorld) : m_rayFromWorld(rayFromWorld), m_rayToWorld(rayToWorld) { } btVector3 m_rayFromWorld; //used to calculate hitPointWorld from hitFraction btVector3 m_rayToWorld; btVector3 m_hitNormalWorld; btVector3 m_hitPointWorld; virtual btScalar addSingleResult(LocalRayResult& rayResult, bool normalInWorldSpace) { //caller already does the filter on the m_closestHitFraction btAssert(rayResult.m_hitFraction <= m_closestHitFraction); m_closestHitFraction = rayResult.m_hitFraction; m_collisionObject = rayResult.m_collisionObject; if (normalInWorldSpace) { m_hitNormalWorld = rayResult.m_hitNormalLocal; } else { ///need to transform normal into worldspace m_hitNormalWorld = m_collisionObject->getWorldTransform().getBasis() * rayResult.m_hitNormalLocal; } m_hitPointWorld.setInterpolate3(m_rayFromWorld, m_rayToWorld, rayResult.m_hitFraction); return rayResult.m_hitFraction; } }; struct AllHitsRayResultCallback : public RayResultCallback { AllHitsRayResultCallback(const btVector3& rayFromWorld, const btVector3& rayToWorld) : m_rayFromWorld(rayFromWorld), m_rayToWorld(rayToWorld) { } btAlignedObjectArray m_collisionObjects; btVector3 m_rayFromWorld; //used to calculate hitPointWorld from hitFraction btVector3 m_rayToWorld; btAlignedObjectArray m_hitNormalWorld; btAlignedObjectArray m_hitPointWorld; btAlignedObjectArray m_hitFractions; virtual btScalar addSingleResult(LocalRayResult& rayResult, bool normalInWorldSpace) { m_collisionObject = rayResult.m_collisionObject; m_collisionObjects.push_back(rayResult.m_collisionObject); btVector3 hitNormalWorld; if (normalInWorldSpace) { hitNormalWorld = rayResult.m_hitNormalLocal; } else { ///need to transform normal into worldspace hitNormalWorld = m_collisionObject->getWorldTransform().getBasis() * rayResult.m_hitNormalLocal; } m_hitNormalWorld.push_back(hitNormalWorld); btVector3 hitPointWorld; hitPointWorld.setInterpolate3(m_rayFromWorld, m_rayToWorld, rayResult.m_hitFraction); m_hitPointWorld.push_back(hitPointWorld); m_hitFractions.push_back(rayResult.m_hitFraction); return m_closestHitFraction; } }; struct LocalConvexResult { LocalConvexResult(const btCollisionObject* hitCollisionObject, LocalShapeInfo* localShapeInfo, const btVector3& hitNormalLocal, const btVector3& hitPointLocal, btScalar hitFraction) : m_hitCollisionObject(hitCollisionObject), m_localShapeInfo(localShapeInfo), m_hitNormalLocal(hitNormalLocal), m_hitPointLocal(hitPointLocal), m_hitFraction(hitFraction) { } const btCollisionObject* m_hitCollisionObject; LocalShapeInfo* m_localShapeInfo; btVector3 m_hitNormalLocal; btVector3 m_hitPointLocal; btScalar m_hitFraction; }; ///RayResultCallback is used to report new raycast results struct ConvexResultCallback { btScalar m_closestHitFraction; int m_collisionFilterGroup; int m_collisionFilterMask; ConvexResultCallback() : m_closestHitFraction(btScalar(1.)), m_collisionFilterGroup(btBroadphaseProxy::DefaultFilter), m_collisionFilterMask(btBroadphaseProxy::AllFilter) { } virtual ~ConvexResultCallback() { } bool hasHit() const { return (m_closestHitFraction < btScalar(1.)); } virtual bool needsCollision(btBroadphaseProxy* proxy0) const { bool collides = (proxy0->m_collisionFilterGroup & m_collisionFilterMask) != 0; collides = collides && (m_collisionFilterGroup & proxy0->m_collisionFilterMask); return collides; } virtual btScalar addSingleResult(LocalConvexResult& convexResult, bool normalInWorldSpace) = 0; }; struct ClosestConvexResultCallback : public ConvexResultCallback { ClosestConvexResultCallback(const btVector3& convexFromWorld, const btVector3& convexToWorld) : m_convexFromWorld(convexFromWorld), m_convexToWorld(convexToWorld), m_hitCollisionObject(0) { } btVector3 m_convexFromWorld; //used to calculate hitPointWorld from hitFraction btVector3 m_convexToWorld; btVector3 m_hitNormalWorld; btVector3 m_hitPointWorld; const btCollisionObject* m_hitCollisionObject; virtual btScalar addSingleResult(LocalConvexResult& convexResult, bool normalInWorldSpace) { //caller already does the filter on the m_closestHitFraction btAssert(convexResult.m_hitFraction <= m_closestHitFraction); m_closestHitFraction = convexResult.m_hitFraction; m_hitCollisionObject = convexResult.m_hitCollisionObject; if (normalInWorldSpace) { m_hitNormalWorld = convexResult.m_hitNormalLocal; } else { ///need to transform normal into worldspace m_hitNormalWorld = m_hitCollisionObject->getWorldTransform().getBasis() * convexResult.m_hitNormalLocal; } m_hitPointWorld = convexResult.m_hitPointLocal; return convexResult.m_hitFraction; } }; ///ContactResultCallback is used to report contact points struct ContactResultCallback { int m_collisionFilterGroup; int m_collisionFilterMask; btScalar m_closestDistanceThreshold; ContactResultCallback() : m_collisionFilterGroup(btBroadphaseProxy::DefaultFilter), m_collisionFilterMask(btBroadphaseProxy::AllFilter), m_closestDistanceThreshold(0) { } virtual ~ContactResultCallback() { } virtual bool needsCollision(btBroadphaseProxy* proxy0) const { bool collides = (proxy0->m_collisionFilterGroup & m_collisionFilterMask) != 0; collides = collides && (m_collisionFilterGroup & proxy0->m_collisionFilterMask); return collides; } virtual btScalar addSingleResult(btManifoldPoint& cp, const btCollisionObjectWrapper* colObj0Wrap, int partId0, int index0, const btCollisionObjectWrapper* colObj1Wrap, int partId1, int index1) = 0; }; int getNumCollisionObjects() const { return int(m_collisionObjects.size()); } /// rayTest performs a raycast on all objects in the btCollisionWorld, and calls the resultCallback /// This allows for several queries: first hit, all hits, any hit, dependent on the value returned by the callback. virtual void rayTest(const btVector3& rayFromWorld, const btVector3& rayToWorld, RayResultCallback& resultCallback) const; /// convexTest performs a swept convex cast on all objects in the btCollisionWorld, and calls the resultCallback /// This allows for several queries: first hit, all hits, any hit, dependent on the value return by the callback. void convexSweepTest(const btConvexShape* castShape, const btTransform& from, const btTransform& to, ConvexResultCallback& resultCallback, btScalar allowedCcdPenetration = btScalar(0.)) const; ///contactTest performs a discrete collision test between colObj against all objects in the btCollisionWorld, and calls the resultCallback. ///it reports one or more contact points for every overlapping object (including the one with deepest penetration) void contactTest(btCollisionObject* colObj, ContactResultCallback& resultCallback); ///contactTest performs a discrete collision test between two collision objects and calls the resultCallback if overlap if detected. ///it reports one or more contact points (including the one with deepest penetration) void contactPairTest(btCollisionObject* colObjA, btCollisionObject* colObjB, ContactResultCallback& resultCallback); /// rayTestSingle performs a raycast call and calls the resultCallback. It is used internally by rayTest. /// In a future implementation, we consider moving the ray test as a virtual method in btCollisionShape. /// This allows more customization. static void rayTestSingle(const btTransform& rayFromTrans, const btTransform& rayToTrans, btCollisionObject* collisionObject, const btCollisionShape* collisionShape, const btTransform& colObjWorldTransform, RayResultCallback& resultCallback); static void rayTestSingleInternal(const btTransform& rayFromTrans, const btTransform& rayToTrans, const btCollisionObjectWrapper* collisionObjectWrap, RayResultCallback& resultCallback); /// objectQuerySingle performs a collision detection query and calls the resultCallback. It is used internally by rayTest. static void objectQuerySingle(const btConvexShape* castShape, const btTransform& rayFromTrans, const btTransform& rayToTrans, btCollisionObject* collisionObject, const btCollisionShape* collisionShape, const btTransform& colObjWorldTransform, ConvexResultCallback& resultCallback, btScalar allowedPenetration); static void objectQuerySingleInternal(const btConvexShape* castShape, const btTransform& convexFromTrans, const btTransform& convexToTrans, const btCollisionObjectWrapper* colObjWrap, ConvexResultCallback& resultCallback, btScalar allowedPenetration); virtual void addCollisionObject(btCollisionObject* collisionObject, int collisionFilterGroup = btBroadphaseProxy::DefaultFilter, int collisionFilterMask = btBroadphaseProxy::AllFilter); virtual void refreshBroadphaseProxy(btCollisionObject* collisionObject); btCollisionObjectArray& getCollisionObjectArray() { return m_collisionObjects; } const btCollisionObjectArray& getCollisionObjectArray() const { return m_collisionObjects; } virtual void removeCollisionObject(btCollisionObject* collisionObject); virtual void performDiscreteCollisionDetection(); btDispatcherInfo& getDispatchInfo() { return m_dispatchInfo; } const btDispatcherInfo& getDispatchInfo() const { return m_dispatchInfo; } bool getForceUpdateAllAabbs() const { return m_forceUpdateAllAabbs; } void setForceUpdateAllAabbs(bool forceUpdateAllAabbs) { m_forceUpdateAllAabbs = forceUpdateAllAabbs; } ///Preliminary serialization test for Bullet 2.76. Loading those files requires a separate parser (Bullet/Demos/SerializeDemo) virtual void serialize(btSerializer* serializer); }; #endif //BT_COLLISION_WORLD_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionDispatch/btCollisionWorldImporter.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2014 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_COLLISION_WORLD_IMPORTER_H #define BT_COLLISION_WORLD_IMPORTER_H #include "LinearMath/btTransform.h" #include "LinearMath/btVector3.h" #include "LinearMath/btAlignedObjectArray.h" #include "LinearMath/btHashMap.h" class btCollisionShape; class btCollisionObject; struct btBulletSerializedArrays; struct ConstraintInput; class btCollisionWorld; struct btCollisionShapeData; class btTriangleIndexVertexArray; class btStridingMeshInterface; struct btStridingMeshInterfaceData; class btGImpactMeshShape; class btOptimizedBvh; struct btTriangleInfoMap; class btBvhTriangleMeshShape; class btPoint2PointConstraint; class btHingeConstraint; class btConeTwistConstraint; class btGeneric6DofConstraint; class btGeneric6DofSpringConstraint; class btSliderConstraint; class btGearConstraint; struct btContactSolverInfo; class btCollisionWorldImporter { protected: btCollisionWorld* m_collisionWorld; int m_verboseMode; btAlignedObjectArray m_allocatedCollisionShapes; btAlignedObjectArray m_allocatedRigidBodies; btAlignedObjectArray m_allocatedBvhs; btAlignedObjectArray m_allocatedTriangleInfoMaps; btAlignedObjectArray m_allocatedTriangleIndexArrays; btAlignedObjectArray m_allocatedbtStridingMeshInterfaceDatas; btAlignedObjectArray m_allocatedCollisionObjects; btAlignedObjectArray m_allocatedNames; btAlignedObjectArray m_indexArrays; btAlignedObjectArray m_shortIndexArrays; btAlignedObjectArray m_charIndexArrays; btAlignedObjectArray m_floatVertexArrays; btAlignedObjectArray m_doubleVertexArrays; btHashMap m_bvhMap; btHashMap m_timMap; btHashMap m_nameShapeMap; btHashMap m_nameColObjMap; btHashMap m_objectNameMap; btHashMap m_shapeMap; btHashMap m_bodyMap; //methods char* duplicateName(const char* name); btCollisionShape* convertCollisionShape(btCollisionShapeData* shapeData); public: btCollisionWorldImporter(btCollisionWorld* world); virtual ~btCollisionWorldImporter(); bool convertAllObjects(btBulletSerializedArrays* arrays); ///delete all memory collision shapes, rigid bodies, constraints etc. allocated during the load. ///make sure you don't use the dynamics world containing objects after you call this method virtual void deleteAllData(); void setVerboseMode(int verboseMode) { m_verboseMode = verboseMode; } int getVerboseMode() const { return m_verboseMode; } // query for data int getNumCollisionShapes() const; btCollisionShape* getCollisionShapeByIndex(int index); int getNumRigidBodies() const; btCollisionObject* getRigidBodyByIndex(int index) const; int getNumBvhs() const; btOptimizedBvh* getBvhByIndex(int index) const; int getNumTriangleInfoMaps() const; btTriangleInfoMap* getTriangleInfoMapByIndex(int index) const; // queris involving named objects btCollisionShape* getCollisionShapeByName(const char* name); btCollisionObject* getCollisionObjectByName(const char* name); const char* getNameForPointer(const void* ptr) const; ///those virtuals are called by load and can be overridden by the user //bodies virtual btCollisionObject* createCollisionObject(const btTransform& startTransform, btCollisionShape* shape, const char* bodyName); ///shapes virtual btCollisionShape* createPlaneShape(const btVector3& planeNormal, btScalar planeConstant); virtual btCollisionShape* createBoxShape(const btVector3& halfExtents); virtual btCollisionShape* createSphereShape(btScalar radius); virtual btCollisionShape* createCapsuleShapeX(btScalar radius, btScalar height); virtual btCollisionShape* createCapsuleShapeY(btScalar radius, btScalar height); virtual btCollisionShape* createCapsuleShapeZ(btScalar radius, btScalar height); virtual btCollisionShape* createCylinderShapeX(btScalar radius, btScalar height); virtual btCollisionShape* createCylinderShapeY(btScalar radius, btScalar height); virtual btCollisionShape* createCylinderShapeZ(btScalar radius, btScalar height); virtual btCollisionShape* createConeShapeX(btScalar radius, btScalar height); virtual btCollisionShape* createConeShapeY(btScalar radius, btScalar height); virtual btCollisionShape* createConeShapeZ(btScalar radius, btScalar height); virtual class btTriangleIndexVertexArray* createTriangleMeshContainer(); virtual btBvhTriangleMeshShape* createBvhTriangleMeshShape(btStridingMeshInterface* trimesh, btOptimizedBvh* bvh); virtual btCollisionShape* createConvexTriangleMeshShape(btStridingMeshInterface* trimesh); #ifdef SUPPORT_GIMPACT_SHAPE_IMPORT virtual btGImpactMeshShape* createGimpactShape(btStridingMeshInterface* trimesh); #endif //SUPPORT_GIMPACT_SHAPE_IMPORT virtual btStridingMeshInterfaceData* createStridingMeshInterfaceData(btStridingMeshInterfaceData* interfaceData); virtual class btConvexHullShape* createConvexHullShape(); virtual class btCompoundShape* createCompoundShape(); virtual class btScaledBvhTriangleMeshShape* createScaledTrangleMeshShape(btBvhTriangleMeshShape* meshShape, const btVector3& localScalingbtBvhTriangleMeshShape); virtual class btMultiSphereShape* createMultiSphereShape(const btVector3* positions, const btScalar* radi, int numSpheres); virtual btTriangleIndexVertexArray* createMeshInterface(btStridingMeshInterfaceData& meshData); ///acceleration and connectivity structures virtual btOptimizedBvh* createOptimizedBvh(); virtual btTriangleInfoMap* createTriangleInfoMap(); }; #endif //BT_WORLD_IMPORTER_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_COMPOUND_COLLISION_ALGORITHM_H #define BT_COMPOUND_COLLISION_ALGORITHM_H #include "btActivatingCollisionAlgorithm.h" #include "BulletCollision/BroadphaseCollision/btDispatcher.h" #include "BulletCollision/BroadphaseCollision/btBroadphaseInterface.h" #include "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h" class btDispatcher; #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" #include "btCollisionCreateFunc.h" #include "LinearMath/btAlignedObjectArray.h" #include "BulletCollision/BroadphaseCollision/btDbvt.h" class btDispatcher; class btCollisionObject; class btCollisionShape; typedef bool (*btShapePairCallback)(const btCollisionShape* pShape0, const btCollisionShape* pShape1); extern btShapePairCallback gCompoundChildShapePairCallback; /// btCompoundCollisionAlgorithm supports collision between CompoundCollisionShapes and other collision shapes class btCompoundCollisionAlgorithm : public btActivatingCollisionAlgorithm { btNodeStack stack2; btManifoldArray manifoldArray; protected: btAlignedObjectArray m_childCollisionAlgorithms; bool m_isSwapped; class btPersistentManifold* m_sharedManifold; bool m_ownsManifold; int m_compoundShapeRevision; //to keep track of changes, so that childAlgorithm array can be updated void removeChildAlgorithms(); void preallocateChildAlgorithms(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap); public: btCompoundCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, bool isSwapped); virtual ~btCompoundCollisionAlgorithm(); btCollisionAlgorithm* getChildAlgorithm(int n) const { return m_childCollisionAlgorithms[n]; } virtual void processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut); btScalar calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut); virtual void getAllContactManifolds(btManifoldArray& manifoldArray) { int i; for (i = 0; i < m_childCollisionAlgorithms.size(); i++) { if (m_childCollisionAlgorithms[i]) m_childCollisionAlgorithms[i]->getAllContactManifolds(manifoldArray); } } struct CreateFunc : public btCollisionAlgorithmCreateFunc { virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap) { void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btCompoundCollisionAlgorithm)); return new (mem) btCompoundCollisionAlgorithm(ci, body0Wrap, body1Wrap, false); } }; struct SwappedCreateFunc : public btCollisionAlgorithmCreateFunc { virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap) { void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btCompoundCollisionAlgorithm)); return new (mem) btCompoundCollisionAlgorithm(ci, body0Wrap, body1Wrap, true); } }; }; #endif //BT_COMPOUND_COLLISION_ALGORITHM_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionDispatch/btCompoundCompoundCollisionAlgorithm.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_COMPOUND_COMPOUND_COLLISION_ALGORITHM_H #define BT_COMPOUND_COMPOUND_COLLISION_ALGORITHM_H #include "btCompoundCollisionAlgorithm.h" #include "BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.h" #include "BulletCollision/BroadphaseCollision/btDispatcher.h" #include "BulletCollision/BroadphaseCollision/btBroadphaseInterface.h" #include "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h" class btDispatcher; #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" #include "BulletCollision/CollisionDispatch/btCollisionCreateFunc.h" #include "LinearMath/btAlignedObjectArray.h" #include "BulletCollision/CollisionDispatch/btHashedSimplePairCache.h" class btDispatcher; class btCollisionObject; class btCollisionShape; extern btShapePairCallback gCompoundCompoundChildShapePairCallback; /// btCompoundCompoundCollisionAlgorithm supports collision between two btCompoundCollisionShape shapes class btCompoundCompoundCollisionAlgorithm : public btCompoundCollisionAlgorithm { class btHashedSimplePairCache* m_childCollisionAlgorithmCache; btSimplePairArray m_removePairs; int m_compoundShapeRevision0; //to keep track of changes, so that childAlgorithm array can be updated int m_compoundShapeRevision1; void removeChildAlgorithms(); // void preallocateChildAlgorithms(const btCollisionObjectWrapper* body0Wrap,const btCollisionObjectWrapper* body1Wrap); public: btCompoundCompoundCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, bool isSwapped); virtual ~btCompoundCompoundCollisionAlgorithm(); virtual void processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut); btScalar calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut); virtual void getAllContactManifolds(btManifoldArray& manifoldArray); struct CreateFunc : public btCollisionAlgorithmCreateFunc { virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap) { void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btCompoundCompoundCollisionAlgorithm)); return new (mem) btCompoundCompoundCollisionAlgorithm(ci, body0Wrap, body1Wrap, false); } }; struct SwappedCreateFunc : public btCollisionAlgorithmCreateFunc { virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap) { void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btCompoundCompoundCollisionAlgorithm)); return new (mem) btCompoundCompoundCollisionAlgorithm(ci, body0Wrap, body1Wrap, true); } }; }; #endif //BT_COMPOUND_COMPOUND_COLLISION_ALGORITHM_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_CONVEX_2D_CONVEX_2D_ALGORITHM_H #define BT_CONVEX_2D_CONVEX_2D_ALGORITHM_H #include "BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.h" #include "BulletCollision/NarrowPhaseCollision/btGjkPairDetector.h" #include "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h" #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" #include "BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h" #include "BulletCollision/CollisionDispatch/btCollisionCreateFunc.h" #include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h" #include "LinearMath/btTransformUtil.h" //for btConvexSeparatingDistanceUtil class btConvexPenetrationDepthSolver; ///The convex2dConvex2dAlgorithm collision algorithm support 2d collision detection for btConvex2dShape ///Currently it requires the btMinkowskiPenetrationDepthSolver, it has support for 2d penetration depth computation class btConvex2dConvex2dAlgorithm : public btActivatingCollisionAlgorithm { btSimplexSolverInterface* m_simplexSolver; btConvexPenetrationDepthSolver* m_pdSolver; bool m_ownManifold; btPersistentManifold* m_manifoldPtr; bool m_lowLevelOfDetail; public: btConvex2dConvex2dAlgorithm(btPersistentManifold* mf, const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, btSimplexSolverInterface* simplexSolver, btConvexPenetrationDepthSolver* pdSolver, int numPerturbationIterations, int minimumPointsPerturbationThreshold); virtual ~btConvex2dConvex2dAlgorithm(); virtual void processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut); virtual btScalar calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut); virtual void getAllContactManifolds(btManifoldArray& manifoldArray) { ///should we use m_ownManifold to avoid adding duplicates? if (m_manifoldPtr && m_ownManifold) manifoldArray.push_back(m_manifoldPtr); } void setLowLevelOfDetail(bool useLowLevel); const btPersistentManifold* getManifold() { return m_manifoldPtr; } struct CreateFunc : public btCollisionAlgorithmCreateFunc { btConvexPenetrationDepthSolver* m_pdSolver; btSimplexSolverInterface* m_simplexSolver; int m_numPerturbationIterations; int m_minimumPointsPerturbationThreshold; CreateFunc(btSimplexSolverInterface* simplexSolver, btConvexPenetrationDepthSolver* pdSolver); virtual ~CreateFunc(); virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap) { void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btConvex2dConvex2dAlgorithm)); return new (mem) btConvex2dConvex2dAlgorithm(ci.m_manifold, ci, body0Wrap, body1Wrap, m_simplexSolver, m_pdSolver, m_numPerturbationIterations, m_minimumPointsPerturbationThreshold); } }; }; #endif //BT_CONVEX_2D_CONVEX_2D_ALGORITHM_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_CONVEX_CONCAVE_COLLISION_ALGORITHM_H #define BT_CONVEX_CONCAVE_COLLISION_ALGORITHM_H #include "btActivatingCollisionAlgorithm.h" #include "BulletCollision/BroadphaseCollision/btDispatcher.h" #include "BulletCollision/BroadphaseCollision/btBroadphaseInterface.h" #include "BulletCollision/CollisionShapes/btTriangleCallback.h" #include "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h" class btDispatcher; #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" #include "btCollisionCreateFunc.h" ///For each triangle in the concave mesh that overlaps with the AABB of a convex (m_convexProxy), processTriangle is called. ATTRIBUTE_ALIGNED16(class) btConvexTriangleCallback : public btTriangleCallback { btVector3 m_aabbMin; btVector3 m_aabbMax; const btCollisionObjectWrapper* m_convexBodyWrap; const btCollisionObjectWrapper* m_triBodyWrap; btManifoldResult* m_resultOut; btDispatcher* m_dispatcher; const btDispatcherInfo* m_dispatchInfoPtr; btScalar m_collisionMarginTriangle; public: BT_DECLARE_ALIGNED_ALLOCATOR(); int m_triangleCount; btPersistentManifold* m_manifoldPtr; btConvexTriangleCallback(btDispatcher * dispatcher, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, bool isSwapped); void setTimeStepAndCounters(btScalar collisionMarginTriangle, const btDispatcherInfo& dispatchInfo, const btCollisionObjectWrapper* convexBodyWrap, const btCollisionObjectWrapper* triBodyWrap, btManifoldResult* resultOut); void clearWrapperData() { m_convexBodyWrap = 0; m_triBodyWrap = 0; } virtual ~btConvexTriangleCallback(); virtual void processTriangle(btVector3 * triangle, int partId, int triangleIndex); void clearCache(); SIMD_FORCE_INLINE const btVector3& getAabbMin() const { return m_aabbMin; } SIMD_FORCE_INLINE const btVector3& getAabbMax() const { return m_aabbMax; } }; /// btConvexConcaveCollisionAlgorithm supports collision between convex shapes and (concave) trianges meshes. ATTRIBUTE_ALIGNED16(class) btConvexConcaveCollisionAlgorithm : public btActivatingCollisionAlgorithm { btConvexTriangleCallback m_btConvexTriangleCallback; bool m_isSwapped; public: BT_DECLARE_ALIGNED_ALLOCATOR(); btConvexConcaveCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, bool isSwapped); virtual ~btConvexConcaveCollisionAlgorithm(); virtual void processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut); btScalar calculateTimeOfImpact(btCollisionObject * body0, btCollisionObject * body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut); virtual void getAllContactManifolds(btManifoldArray & manifoldArray); void clearCache(); struct CreateFunc : public btCollisionAlgorithmCreateFunc { virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap) { void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btConvexConcaveCollisionAlgorithm)); return new (mem) btConvexConcaveCollisionAlgorithm(ci, body0Wrap, body1Wrap, false); } }; struct SwappedCreateFunc : public btCollisionAlgorithmCreateFunc { virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap) { void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btConvexConcaveCollisionAlgorithm)); return new (mem) btConvexConcaveCollisionAlgorithm(ci, body0Wrap, body1Wrap, true); } }; }; #endif //BT_CONVEX_CONCAVE_COLLISION_ALGORITHM_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_CONVEX_CONVEX_ALGORITHM_H #define BT_CONVEX_CONVEX_ALGORITHM_H #include "btActivatingCollisionAlgorithm.h" #include "BulletCollision/NarrowPhaseCollision/btGjkPairDetector.h" #include "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h" #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" #include "BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h" #include "btCollisionCreateFunc.h" #include "btCollisionDispatcher.h" #include "LinearMath/btTransformUtil.h" //for btConvexSeparatingDistanceUtil #include "BulletCollision/NarrowPhaseCollision/btPolyhedralContactClipping.h" class btConvexPenetrationDepthSolver; ///Enabling USE_SEPDISTANCE_UTIL2 requires 100% reliable distance computation. However, when using large size ratios GJK can be imprecise ///so the distance is not conservative. In that case, enabling this USE_SEPDISTANCE_UTIL2 would result in failing/missing collisions. ///Either improve GJK for large size ratios (testing a 100 units versus a 0.1 unit object) or only enable the util ///for certain pairs that have a small size ratio //#define USE_SEPDISTANCE_UTIL2 1 ///The convexConvexAlgorithm collision algorithm implements time of impact, convex closest points and penetration depth calculations between two convex objects. ///Multiple contact points are calculated by perturbing the orientation of the smallest object orthogonal to the separating normal. ///This idea was described by Gino van den Bergen in this forum topic http://www.bulletphysics.com/Bullet/phpBB3/viewtopic.php?f=4&t=288&p=888#p888 class btConvexConvexAlgorithm : public btActivatingCollisionAlgorithm { #ifdef USE_SEPDISTANCE_UTIL2 btConvexSeparatingDistanceUtil m_sepDistance; #endif btConvexPenetrationDepthSolver* m_pdSolver; btVertexArray worldVertsB1; btVertexArray worldVertsB2; bool m_ownManifold; btPersistentManifold* m_manifoldPtr; bool m_lowLevelOfDetail; int m_numPerturbationIterations; int m_minimumPointsPerturbationThreshold; ///cache separating vector to speedup collision detection public: btConvexConvexAlgorithm(btPersistentManifold* mf, const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, btConvexPenetrationDepthSolver* pdSolver, int numPerturbationIterations, int minimumPointsPerturbationThreshold); virtual ~btConvexConvexAlgorithm(); virtual void processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut); virtual btScalar calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut); virtual void getAllContactManifolds(btManifoldArray& manifoldArray) { ///should we use m_ownManifold to avoid adding duplicates? if (m_manifoldPtr && m_ownManifold) manifoldArray.push_back(m_manifoldPtr); } void setLowLevelOfDetail(bool useLowLevel); const btPersistentManifold* getManifold() { return m_manifoldPtr; } struct CreateFunc : public btCollisionAlgorithmCreateFunc { btConvexPenetrationDepthSolver* m_pdSolver; int m_numPerturbationIterations; int m_minimumPointsPerturbationThreshold; CreateFunc(btConvexPenetrationDepthSolver* pdSolver); virtual ~CreateFunc(); virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap) { void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btConvexConvexAlgorithm)); return new (mem) btConvexConvexAlgorithm(ci.m_manifold, ci, body0Wrap, body1Wrap, m_pdSolver, m_numPerturbationIterations, m_minimumPointsPerturbationThreshold); } }; }; #endif //BT_CONVEX_CONVEX_ALGORITHM_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionDispatch/btConvexPlaneCollisionAlgorithm.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_CONVEX_PLANE_COLLISION_ALGORITHM_H #define BT_CONVEX_PLANE_COLLISION_ALGORITHM_H #include "BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h" #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" #include "BulletCollision/CollisionDispatch/btCollisionCreateFunc.h" class btPersistentManifold; #include "btCollisionDispatcher.h" #include "LinearMath/btVector3.h" /// btSphereBoxCollisionAlgorithm provides sphere-box collision detection. /// Other features are frame-coherency (persistent data) and collision response. class btConvexPlaneCollisionAlgorithm : public btCollisionAlgorithm { bool m_ownManifold; btPersistentManifold* m_manifoldPtr; bool m_isSwapped; int m_numPerturbationIterations; int m_minimumPointsPerturbationThreshold; public: btConvexPlaneCollisionAlgorithm(btPersistentManifold* mf, const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, bool isSwapped, int numPerturbationIterations, int minimumPointsPerturbationThreshold); virtual ~btConvexPlaneCollisionAlgorithm(); virtual void processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut); void collideSingleContact(const btQuaternion& perturbeRot, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut); virtual btScalar calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut); virtual void getAllContactManifolds(btManifoldArray& manifoldArray) { if (m_manifoldPtr && m_ownManifold) { manifoldArray.push_back(m_manifoldPtr); } } struct CreateFunc : public btCollisionAlgorithmCreateFunc { int m_numPerturbationIterations; int m_minimumPointsPerturbationThreshold; CreateFunc() : m_numPerturbationIterations(1), m_minimumPointsPerturbationThreshold(0) { } virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap) { void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btConvexPlaneCollisionAlgorithm)); if (!m_swapped) { return new (mem) btConvexPlaneCollisionAlgorithm(0, ci, body0Wrap, body1Wrap, false, m_numPerturbationIterations, m_minimumPointsPerturbationThreshold); } else { return new (mem) btConvexPlaneCollisionAlgorithm(0, ci, body0Wrap, body1Wrap, true, m_numPerturbationIterations, m_minimumPointsPerturbationThreshold); } } }; }; #endif //BT_CONVEX_PLANE_COLLISION_ALGORITHM_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_DEFAULT_COLLISION_CONFIGURATION #define BT_DEFAULT_COLLISION_CONFIGURATION #include "btCollisionConfiguration.h" class btVoronoiSimplexSolver; class btConvexPenetrationDepthSolver; struct btDefaultCollisionConstructionInfo { btPoolAllocator* m_persistentManifoldPool; btPoolAllocator* m_collisionAlgorithmPool; int m_defaultMaxPersistentManifoldPoolSize; int m_defaultMaxCollisionAlgorithmPoolSize; int m_customCollisionAlgorithmMaxElementSize; int m_useEpaPenetrationAlgorithm; btDefaultCollisionConstructionInfo() : m_persistentManifoldPool(0), m_collisionAlgorithmPool(0), m_defaultMaxPersistentManifoldPoolSize(4096), m_defaultMaxCollisionAlgorithmPoolSize(4096), m_customCollisionAlgorithmMaxElementSize(0), m_useEpaPenetrationAlgorithm(true) { } }; ///btCollisionConfiguration allows to configure Bullet collision detection ///stack allocator, pool memory allocators ///@todo: describe the meaning class btDefaultCollisionConfiguration : public btCollisionConfiguration { protected: int m_persistentManifoldPoolSize; btPoolAllocator* m_persistentManifoldPool; bool m_ownsPersistentManifoldPool; btPoolAllocator* m_collisionAlgorithmPool; bool m_ownsCollisionAlgorithmPool; //default penetration depth solver btConvexPenetrationDepthSolver* m_pdSolver; //default CreationFunctions, filling the m_doubleDispatch table btCollisionAlgorithmCreateFunc* m_convexConvexCreateFunc; btCollisionAlgorithmCreateFunc* m_convexConcaveCreateFunc; btCollisionAlgorithmCreateFunc* m_swappedConvexConcaveCreateFunc; btCollisionAlgorithmCreateFunc* m_compoundCreateFunc; btCollisionAlgorithmCreateFunc* m_compoundCompoundCreateFunc; btCollisionAlgorithmCreateFunc* m_swappedCompoundCreateFunc; btCollisionAlgorithmCreateFunc* m_emptyCreateFunc; btCollisionAlgorithmCreateFunc* m_sphereSphereCF; btCollisionAlgorithmCreateFunc* m_sphereBoxCF; btCollisionAlgorithmCreateFunc* m_boxSphereCF; btCollisionAlgorithmCreateFunc* m_boxBoxCF; btCollisionAlgorithmCreateFunc* m_sphereTriangleCF; btCollisionAlgorithmCreateFunc* m_triangleSphereCF; btCollisionAlgorithmCreateFunc* m_planeConvexCF; btCollisionAlgorithmCreateFunc* m_convexPlaneCF; public: btDefaultCollisionConfiguration(const btDefaultCollisionConstructionInfo& constructionInfo = btDefaultCollisionConstructionInfo()); virtual ~btDefaultCollisionConfiguration(); ///memory pools virtual btPoolAllocator* getPersistentManifoldPool() { return m_persistentManifoldPool; } virtual btPoolAllocator* getCollisionAlgorithmPool() { return m_collisionAlgorithmPool; } virtual btCollisionAlgorithmCreateFunc* getCollisionAlgorithmCreateFunc(int proxyType0, int proxyType1); virtual btCollisionAlgorithmCreateFunc* getClosestPointsAlgorithmCreateFunc(int proxyType0, int proxyType1); ///Use this method to allow to generate multiple contact points between at once, between two objects using the generic convex-convex algorithm. ///By default, this feature is disabled for best performance. ///@param numPerturbationIterations controls the number of collision queries. Set it to zero to disable the feature. ///@param minimumPointsPerturbationThreshold is the minimum number of points in the contact cache, above which the feature is disabled ///3 is a good value for both params, if you want to enable the feature. This is because the default contact cache contains a maximum of 4 points, and one collision query at the unperturbed orientation is performed first. ///See Bullet/Demos/CollisionDemo for an example how this feature gathers multiple points. ///@todo we could add a per-object setting of those parameters, for level-of-detail collision detection. void setConvexConvexMultipointIterations(int numPerturbationIterations = 3, int minimumPointsPerturbationThreshold = 3); void setPlaneConvexMultipointIterations(int numPerturbationIterations = 3, int minimumPointsPerturbationThreshold = 3); }; #endif //BT_DEFAULT_COLLISION_CONFIGURATION ================================================ FILE: libraries/bullet/BulletCollision/CollisionDispatch/btEmptyCollisionAlgorithm.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_EMPTY_ALGORITH #define BT_EMPTY_ALGORITH #include "BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h" #include "btCollisionCreateFunc.h" #include "btCollisionDispatcher.h" #define ATTRIBUTE_ALIGNED(a) ///EmptyAlgorithm is a stub for unsupported collision pairs. ///The dispatcher can dispatch a persistent btEmptyAlgorithm to avoid a search every frame. class btEmptyAlgorithm : public btCollisionAlgorithm { public: btEmptyAlgorithm(const btCollisionAlgorithmConstructionInfo& ci); virtual void processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut); virtual btScalar calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut); virtual void getAllContactManifolds(btManifoldArray& manifoldArray) { } struct CreateFunc : public btCollisionAlgorithmCreateFunc { virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap) { (void)body0Wrap; (void)body1Wrap; void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btEmptyAlgorithm)); return new (mem) btEmptyAlgorithm(ci); } }; } ATTRIBUTE_ALIGNED(16); #endif //BT_EMPTY_ALGORITH ================================================ FILE: libraries/bullet/BulletCollision/CollisionDispatch/btGhostObject.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2008 Erwin Coumans http://bulletphysics.com This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_GHOST_OBJECT_H #define BT_GHOST_OBJECT_H #include "btCollisionObject.h" #include "BulletCollision/BroadphaseCollision/btOverlappingPairCallback.h" #include "LinearMath/btAlignedAllocator.h" #include "BulletCollision/BroadphaseCollision/btOverlappingPairCache.h" #include "btCollisionWorld.h" class btConvexShape; class btDispatcher; ///The btGhostObject can keep track of all objects that are overlapping ///By default, this overlap is based on the AABB ///This is useful for creating a character controller, collision sensors/triggers, explosions etc. ///We plan on adding rayTest and other queries for the btGhostObject ATTRIBUTE_ALIGNED16(class) btGhostObject : public btCollisionObject { protected: btAlignedObjectArray m_overlappingObjects; public: btGhostObject(); virtual ~btGhostObject(); void convexSweepTest(const class btConvexShape* castShape, const btTransform& convexFromWorld, const btTransform& convexToWorld, btCollisionWorld::ConvexResultCallback& resultCallback, btScalar allowedCcdPenetration = 0.f) const; void rayTest(const btVector3& rayFromWorld, const btVector3& rayToWorld, btCollisionWorld::RayResultCallback& resultCallback) const; ///this method is mainly for expert/internal use only. virtual void addOverlappingObjectInternal(btBroadphaseProxy * otherProxy, btBroadphaseProxy* thisProxy = 0); ///this method is mainly for expert/internal use only. virtual void removeOverlappingObjectInternal(btBroadphaseProxy * otherProxy, btDispatcher * dispatcher, btBroadphaseProxy* thisProxy = 0); int getNumOverlappingObjects() const { return m_overlappingObjects.size(); } btCollisionObject* getOverlappingObject(int index) { return m_overlappingObjects[index]; } const btCollisionObject* getOverlappingObject(int index) const { return m_overlappingObjects[index]; } btAlignedObjectArray& getOverlappingPairs() { return m_overlappingObjects; } const btAlignedObjectArray getOverlappingPairs() const { return m_overlappingObjects; } // // internal cast // static const btGhostObject* upcast(const btCollisionObject* colObj) { if (colObj->getInternalType() == CO_GHOST_OBJECT) return (const btGhostObject*)colObj; return 0; } static btGhostObject* upcast(btCollisionObject * colObj) { if (colObj->getInternalType() == CO_GHOST_OBJECT) return (btGhostObject*)colObj; return 0; } }; class btPairCachingGhostObject : public btGhostObject { btHashedOverlappingPairCache* m_hashPairCache; public: btPairCachingGhostObject(); virtual ~btPairCachingGhostObject(); ///this method is mainly for expert/internal use only. virtual void addOverlappingObjectInternal(btBroadphaseProxy* otherProxy, btBroadphaseProxy* thisProxy = 0); virtual void removeOverlappingObjectInternal(btBroadphaseProxy* otherProxy, btDispatcher* dispatcher, btBroadphaseProxy* thisProxy = 0); btHashedOverlappingPairCache* getOverlappingPairCache() { return m_hashPairCache; } }; ///The btGhostPairCallback interfaces and forwards adding and removal of overlapping pairs from the btBroadphaseInterface to btGhostObject. class btGhostPairCallback : public btOverlappingPairCallback { public: btGhostPairCallback() { } virtual ~btGhostPairCallback() { } virtual btBroadphasePair* addOverlappingPair(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1) { btCollisionObject* colObj0 = (btCollisionObject*)proxy0->m_clientObject; btCollisionObject* colObj1 = (btCollisionObject*)proxy1->m_clientObject; btGhostObject* ghost0 = btGhostObject::upcast(colObj0); btGhostObject* ghost1 = btGhostObject::upcast(colObj1); if (ghost0) ghost0->addOverlappingObjectInternal(proxy1, proxy0); if (ghost1) ghost1->addOverlappingObjectInternal(proxy0, proxy1); return 0; } virtual void* removeOverlappingPair(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1, btDispatcher* dispatcher) { btCollisionObject* colObj0 = (btCollisionObject*)proxy0->m_clientObject; btCollisionObject* colObj1 = (btCollisionObject*)proxy1->m_clientObject; btGhostObject* ghost0 = btGhostObject::upcast(colObj0); btGhostObject* ghost1 = btGhostObject::upcast(colObj1); if (ghost0) ghost0->removeOverlappingObjectInternal(proxy1, dispatcher, proxy0); if (ghost1) ghost1->removeOverlappingObjectInternal(proxy0, dispatcher, proxy1); return 0; } virtual void removeOverlappingPairsContainingProxy(btBroadphaseProxy* /*proxy0*/, btDispatcher* /*dispatcher*/) { btAssert(0); //need to keep track of all ghost objects and call them here //m_hashPairCache->removeOverlappingPairsContainingProxy(proxy0,dispatcher); } }; #endif ================================================ FILE: libraries/bullet/BulletCollision/CollisionDispatch/btHashedSimplePairCache.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_HASHED_SIMPLE_PAIR_CACHE_H #define BT_HASHED_SIMPLE_PAIR_CACHE_H #include "LinearMath/btAlignedObjectArray.h" const int BT_SIMPLE_NULL_PAIR = 0xffffffff; struct btSimplePair { btSimplePair(int indexA, int indexB) : m_indexA(indexA), m_indexB(indexB), m_userPointer(0) { } int m_indexA; int m_indexB; union { void* m_userPointer; int m_userValue; }; }; typedef btAlignedObjectArray btSimplePairArray; #ifdef BT_DEBUG_COLLISION_PAIRS extern int gOverlappingSimplePairs; extern int gRemoveSimplePairs; extern int gAddedSimplePairs; extern int gFindSimplePairs; #endif //BT_DEBUG_COLLISION_PAIRS class btHashedSimplePairCache { btSimplePairArray m_overlappingPairArray; protected: btAlignedObjectArray m_hashTable; btAlignedObjectArray m_next; public: btHashedSimplePairCache(); virtual ~btHashedSimplePairCache(); void removeAllPairs(); virtual void* removeOverlappingPair(int indexA, int indexB); // Add a pair and return the new pair. If the pair already exists, // no new pair is created and the old one is returned. virtual btSimplePair* addOverlappingPair(int indexA, int indexB) { #ifdef BT_DEBUG_COLLISION_PAIRS gAddedSimplePairs++; #endif return internalAddPair(indexA, indexB); } virtual btSimplePair* getOverlappingPairArrayPtr() { return &m_overlappingPairArray[0]; } const btSimplePair* getOverlappingPairArrayPtr() const { return &m_overlappingPairArray[0]; } btSimplePairArray& getOverlappingPairArray() { return m_overlappingPairArray; } const btSimplePairArray& getOverlappingPairArray() const { return m_overlappingPairArray; } btSimplePair* findPair(int indexA, int indexB); int GetCount() const { return m_overlappingPairArray.size(); } int getNumOverlappingPairs() const { return m_overlappingPairArray.size(); } private: btSimplePair* internalAddPair(int indexA, int indexB); void growTables(); SIMD_FORCE_INLINE bool equalsPair(const btSimplePair& pair, int indexA, int indexB) { return pair.m_indexA == indexA && pair.m_indexB == indexB; } SIMD_FORCE_INLINE unsigned int getHash(unsigned int indexA, unsigned int indexB) { unsigned int key = indexA | (indexB << 16); // Thomas Wang's hash key += ~(key << 15); key ^= (key >> 10); key += (key << 3); key ^= (key >> 6); key += ~(key << 11); key ^= (key >> 16); return key; } SIMD_FORCE_INLINE btSimplePair* internalFindPair(int proxyIdA, int proxyIdB, int hash) { int index = m_hashTable[hash]; while (index != BT_SIMPLE_NULL_PAIR && equalsPair(m_overlappingPairArray[index], proxyIdA, proxyIdB) == false) { index = m_next[index]; } if (index == BT_SIMPLE_NULL_PAIR) { return NULL; } btAssert(index < m_overlappingPairArray.size()); return &m_overlappingPairArray[index]; } }; #endif //BT_HASHED_SIMPLE_PAIR_CACHE_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionDispatch/btInternalEdgeUtility.h ================================================ #ifndef BT_INTERNAL_EDGE_UTILITY_H #define BT_INTERNAL_EDGE_UTILITY_H #include "LinearMath/btHashMap.h" #include "LinearMath/btVector3.h" #include "BulletCollision/CollisionShapes/btTriangleInfoMap.h" ///The btInternalEdgeUtility helps to avoid or reduce artifacts due to wrong collision normals caused by internal edges. ///See also http://code.google.com/p/bullet/issues/detail?id=27 class btBvhTriangleMeshShape; class btCollisionObject; struct btCollisionObjectWrapper; class btManifoldPoint; class btIDebugDraw; class btHeightfieldTerrainShape; enum btInternalEdgeAdjustFlags { BT_TRIANGLE_CONVEX_BACKFACE_MODE = 1, BT_TRIANGLE_CONCAVE_DOUBLE_SIDED = 2, //double sided options are experimental, single sided is recommended BT_TRIANGLE_CONVEX_DOUBLE_SIDED = 4 }; ///Call btGenerateInternalEdgeInfo to create triangle info, store in the shape 'userInfo' void btGenerateInternalEdgeInfo(btBvhTriangleMeshShape* trimeshShape, btTriangleInfoMap* triangleInfoMap); void btGenerateInternalEdgeInfo(btHeightfieldTerrainShape* trimeshShape, btTriangleInfoMap* triangleInfoMap); ///Call the btFixMeshNormal to adjust the collision normal, using the triangle info map (generated using btGenerateInternalEdgeInfo) ///If this info map is missing, or the triangle is not store in this map, nothing will be done void btAdjustInternalEdgeContacts(btManifoldPoint& cp, const btCollisionObjectWrapper* trimeshColObj0Wrap, const btCollisionObjectWrapper* otherColObj1Wrap, int partId0, int index0, int normalAdjustFlags = 0); ///Enable the BT_INTERNAL_EDGE_DEBUG_DRAW define and call btSetDebugDrawer, to get visual info to see if the internal edge utility works properly. ///If the utility doesn't work properly, you might have to adjust the threshold values in btTriangleInfoMap //#define BT_INTERNAL_EDGE_DEBUG_DRAW #ifdef BT_INTERNAL_EDGE_DEBUG_DRAW void btSetDebugDrawer(btIDebugDraw* debugDrawer); #endif //BT_INTERNAL_EDGE_DEBUG_DRAW #endif //BT_INTERNAL_EDGE_UTILITY_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionDispatch/btManifoldResult.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_MANIFOLD_RESULT_H #define BT_MANIFOLD_RESULT_H class btCollisionObject; struct btCollisionObjectWrapper; #include "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h" class btManifoldPoint; #include "BulletCollision/NarrowPhaseCollision/btDiscreteCollisionDetectorInterface.h" #include "LinearMath/btTransform.h" #include "BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h" #include "BulletCollision/CollisionDispatch/btCollisionObject.h" typedef bool (*ContactAddedCallback)(btManifoldPoint& cp, const btCollisionObjectWrapper* colObj0Wrap, int partId0, int index0, const btCollisionObjectWrapper* colObj1Wrap, int partId1, int index1); extern ContactAddedCallback gContactAddedCallback; //#define DEBUG_PART_INDEX 1 /// These callbacks are used to customize the algorith that combine restitution, friction, damping, Stiffness typedef btScalar (*CalculateCombinedCallback)(const btCollisionObject* body0, const btCollisionObject* body1); extern CalculateCombinedCallback gCalculateCombinedRestitutionCallback; extern CalculateCombinedCallback gCalculateCombinedFrictionCallback; extern CalculateCombinedCallback gCalculateCombinedRollingFrictionCallback; extern CalculateCombinedCallback gCalculateCombinedSpinningFrictionCallback; extern CalculateCombinedCallback gCalculateCombinedContactDampingCallback; extern CalculateCombinedCallback gCalculateCombinedContactStiffnessCallback; ///btManifoldResult is a helper class to manage contact results. class btManifoldResult : public btDiscreteCollisionDetectorInterface::Result { protected: btPersistentManifold* m_manifoldPtr; const btCollisionObjectWrapper* m_body0Wrap; const btCollisionObjectWrapper* m_body1Wrap; int m_partId0; int m_partId1; int m_index0; int m_index1; public: btManifoldResult() : #ifdef DEBUG_PART_INDEX m_partId0(-1), m_partId1(-1), m_index0(-1), m_index1(-1) #endif //DEBUG_PART_INDEX m_closestPointDistanceThreshold(0) { } btManifoldResult(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap); virtual ~btManifoldResult(){}; void setPersistentManifold(btPersistentManifold* manifoldPtr) { m_manifoldPtr = manifoldPtr; } const btPersistentManifold* getPersistentManifold() const { return m_manifoldPtr; } btPersistentManifold* getPersistentManifold() { return m_manifoldPtr; } virtual void setShapeIdentifiersA(int partId0, int index0) { m_partId0 = partId0; m_index0 = index0; } virtual void setShapeIdentifiersB(int partId1, int index1) { m_partId1 = partId1; m_index1 = index1; } virtual void addContactPoint(const btVector3& normalOnBInWorld, const btVector3& pointInWorld, btScalar depth); SIMD_FORCE_INLINE void refreshContactPoints() { btAssert(m_manifoldPtr); if (!m_manifoldPtr->getNumContacts()) return; bool isSwapped = m_manifoldPtr->getBody0() != m_body0Wrap->getCollisionObject(); if (isSwapped) { m_manifoldPtr->refreshContactPoints(m_body1Wrap->getCollisionObject()->getWorldTransform(), m_body0Wrap->getCollisionObject()->getWorldTransform()); } else { m_manifoldPtr->refreshContactPoints(m_body0Wrap->getCollisionObject()->getWorldTransform(), m_body1Wrap->getCollisionObject()->getWorldTransform()); } } const btCollisionObjectWrapper* getBody0Wrap() const { return m_body0Wrap; } const btCollisionObjectWrapper* getBody1Wrap() const { return m_body1Wrap; } void setBody0Wrap(const btCollisionObjectWrapper* obj0Wrap) { m_body0Wrap = obj0Wrap; } void setBody1Wrap(const btCollisionObjectWrapper* obj1Wrap) { m_body1Wrap = obj1Wrap; } const btCollisionObject* getBody0Internal() const { return m_body0Wrap->getCollisionObject(); } const btCollisionObject* getBody1Internal() const { return m_body1Wrap->getCollisionObject(); } btScalar m_closestPointDistanceThreshold; /// in the future we can let the user override the methods to combine restitution and friction static btScalar calculateCombinedRestitution(const btCollisionObject* body0, const btCollisionObject* body1); static btScalar calculateCombinedFriction(const btCollisionObject* body0, const btCollisionObject* body1); static btScalar calculateCombinedRollingFriction(const btCollisionObject* body0, const btCollisionObject* body1); static btScalar calculateCombinedSpinningFriction(const btCollisionObject* body0, const btCollisionObject* body1); static btScalar calculateCombinedContactDamping(const btCollisionObject* body0, const btCollisionObject* body1); static btScalar calculateCombinedContactStiffness(const btCollisionObject* body0, const btCollisionObject* body1); }; #endif //BT_MANIFOLD_RESULT_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionDispatch/btSimulationIslandManager.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_SIMULATION_ISLAND_MANAGER_H #define BT_SIMULATION_ISLAND_MANAGER_H #include "BulletCollision/CollisionDispatch/btUnionFind.h" #include "btCollisionCreateFunc.h" #include "LinearMath/btAlignedObjectArray.h" #include "btCollisionObject.h" class btCollisionObject; class btCollisionWorld; class btDispatcher; class btPersistentManifold; ///SimulationIslandManager creates and handles simulation islands, using btUnionFind class btSimulationIslandManager { btUnionFind m_unionFind; btAlignedObjectArray m_islandmanifold; btAlignedObjectArray m_islandBodies; bool m_splitIslands; public: btSimulationIslandManager(); virtual ~btSimulationIslandManager(); void initUnionFind(int n); btUnionFind& getUnionFind() { return m_unionFind; } virtual void updateActivationState(btCollisionWorld* colWorld, btDispatcher* dispatcher); virtual void storeIslandActivationState(btCollisionWorld* world); void findUnions(btDispatcher* dispatcher, btCollisionWorld* colWorld); struct IslandCallback { virtual ~IslandCallback(){}; virtual void processIsland(btCollisionObject** bodies, int numBodies, class btPersistentManifold** manifolds, int numManifolds, int islandId) = 0; }; void buildAndProcessIslands(btDispatcher* dispatcher, btCollisionWorld* collisionWorld, IslandCallback* callback); void buildIslands(btDispatcher* dispatcher, btCollisionWorld* colWorld); void processIslands(btDispatcher* dispatcher, btCollisionWorld* collisionWorld, IslandCallback* callback); bool getSplitIslands() { return m_splitIslands; } void setSplitIslands(bool doSplitIslands) { m_splitIslands = doSplitIslands; } }; #endif //BT_SIMULATION_ISLAND_MANAGER_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_SPHERE_BOX_COLLISION_ALGORITHM_H #define BT_SPHERE_BOX_COLLISION_ALGORITHM_H #include "btActivatingCollisionAlgorithm.h" #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" #include "BulletCollision/CollisionDispatch/btCollisionCreateFunc.h" class btPersistentManifold; #include "btCollisionDispatcher.h" #include "LinearMath/btVector3.h" /// btSphereBoxCollisionAlgorithm provides sphere-box collision detection. /// Other features are frame-coherency (persistent data) and collision response. class btSphereBoxCollisionAlgorithm : public btActivatingCollisionAlgorithm { bool m_ownManifold; btPersistentManifold* m_manifoldPtr; bool m_isSwapped; public: btSphereBoxCollisionAlgorithm(btPersistentManifold* mf, const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, bool isSwapped); virtual ~btSphereBoxCollisionAlgorithm(); virtual void processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut); virtual btScalar calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut); virtual void getAllContactManifolds(btManifoldArray& manifoldArray) { if (m_manifoldPtr && m_ownManifold) { manifoldArray.push_back(m_manifoldPtr); } } bool getSphereDistance(const btCollisionObjectWrapper* boxObjWrap, btVector3& v3PointOnBox, btVector3& normal, btScalar& penetrationDepth, const btVector3& v3SphereCenter, btScalar fRadius, btScalar maxContactDistance); btScalar getSpherePenetration(btVector3 const& boxHalfExtent, btVector3 const& sphereRelPos, btVector3& closestPoint, btVector3& normal); struct CreateFunc : public btCollisionAlgorithmCreateFunc { virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap) { void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btSphereBoxCollisionAlgorithm)); if (!m_swapped) { return new (mem) btSphereBoxCollisionAlgorithm(0, ci, body0Wrap, body1Wrap, false); } else { return new (mem) btSphereBoxCollisionAlgorithm(0, ci, body0Wrap, body1Wrap, true); } } }; }; #endif //BT_SPHERE_BOX_COLLISION_ALGORITHM_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_SPHERE_SPHERE_COLLISION_ALGORITHM_H #define BT_SPHERE_SPHERE_COLLISION_ALGORITHM_H #include "btActivatingCollisionAlgorithm.h" #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" #include "BulletCollision/CollisionDispatch/btCollisionCreateFunc.h" #include "btCollisionDispatcher.h" class btPersistentManifold; /// btSphereSphereCollisionAlgorithm provides sphere-sphere collision detection. /// Other features are frame-coherency (persistent data) and collision response. /// Also provides the most basic sample for custom/user btCollisionAlgorithm class btSphereSphereCollisionAlgorithm : public btActivatingCollisionAlgorithm { bool m_ownManifold; btPersistentManifold* m_manifoldPtr; public: btSphereSphereCollisionAlgorithm(btPersistentManifold* mf, const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* col0Wrap, const btCollisionObjectWrapper* col1Wrap); btSphereSphereCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci) : btActivatingCollisionAlgorithm(ci) {} virtual void processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut); virtual btScalar calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut); virtual void getAllContactManifolds(btManifoldArray& manifoldArray) { if (m_manifoldPtr && m_ownManifold) { manifoldArray.push_back(m_manifoldPtr); } } virtual ~btSphereSphereCollisionAlgorithm(); struct CreateFunc : public btCollisionAlgorithmCreateFunc { virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* col0Wrap, const btCollisionObjectWrapper* col1Wrap) { void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btSphereSphereCollisionAlgorithm)); return new (mem) btSphereSphereCollisionAlgorithm(0, ci, col0Wrap, col1Wrap); } }; }; #endif //BT_SPHERE_SPHERE_COLLISION_ALGORITHM_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionDispatch/btSphereTriangleCollisionAlgorithm.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_SPHERE_TRIANGLE_COLLISION_ALGORITHM_H #define BT_SPHERE_TRIANGLE_COLLISION_ALGORITHM_H #include "btActivatingCollisionAlgorithm.h" #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" #include "BulletCollision/CollisionDispatch/btCollisionCreateFunc.h" class btPersistentManifold; #include "btCollisionDispatcher.h" /// btSphereSphereCollisionAlgorithm provides sphere-sphere collision detection. /// Other features are frame-coherency (persistent data) and collision response. /// Also provides the most basic sample for custom/user btCollisionAlgorithm class btSphereTriangleCollisionAlgorithm : public btActivatingCollisionAlgorithm { bool m_ownManifold; btPersistentManifold* m_manifoldPtr; bool m_swapped; public: btSphereTriangleCollisionAlgorithm(btPersistentManifold* mf, const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, bool swapped); btSphereTriangleCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci) : btActivatingCollisionAlgorithm(ci) {} virtual void processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut); virtual btScalar calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut); virtual void getAllContactManifolds(btManifoldArray& manifoldArray) { if (m_manifoldPtr && m_ownManifold) { manifoldArray.push_back(m_manifoldPtr); } } virtual ~btSphereTriangleCollisionAlgorithm(); struct CreateFunc : public btCollisionAlgorithmCreateFunc { virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap) { void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btSphereTriangleCollisionAlgorithm)); return new (mem) btSphereTriangleCollisionAlgorithm(ci.m_manifold, ci, body0Wrap, body1Wrap, m_swapped); } }; }; #endif //BT_SPHERE_TRIANGLE_COLLISION_ALGORITHM_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionDispatch/btUnionFind.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_UNION_FIND_H #define BT_UNION_FIND_H #include "LinearMath/btAlignedObjectArray.h" #define USE_PATH_COMPRESSION 1 ///see for discussion of static island optimizations by Vroonsh here: http://code.google.com/p/bullet/issues/detail?id=406 #define STATIC_SIMULATION_ISLAND_OPTIMIZATION 1 struct btElement { int m_id; int m_sz; }; ///UnionFind calculates connected subsets // Implements weighted Quick Union with path compression // optimization: could use short ints instead of ints (halving memory, would limit the number of rigid bodies to 64k, sounds reasonable) class btUnionFind { private: btAlignedObjectArray m_elements; public: btUnionFind(); ~btUnionFind(); //this is a special operation, destroying the content of btUnionFind. //it sorts the elements, based on island id, in order to make it easy to iterate over islands void sortIslands(); void reset(int N); SIMD_FORCE_INLINE int getNumElements() const { return int(m_elements.size()); } SIMD_FORCE_INLINE bool isRoot(int x) const { return (x == m_elements[x].m_id); } btElement& getElement(int index) { return m_elements[index]; } const btElement& getElement(int index) const { return m_elements[index]; } void allocate(int N); void Free(); int find(int p, int q) { return (find(p) == find(q)); } void unite(int p, int q) { int i = find(p), j = find(q); if (i == j) return; #ifndef USE_PATH_COMPRESSION //weighted quick union, this keeps the 'trees' balanced, and keeps performance of unite O( log(n) ) if (m_elements[i].m_sz < m_elements[j].m_sz) { m_elements[i].m_id = j; m_elements[j].m_sz += m_elements[i].m_sz; } else { m_elements[j].m_id = i; m_elements[i].m_sz += m_elements[j].m_sz; } #else m_elements[i].m_id = j; m_elements[j].m_sz += m_elements[i].m_sz; #endif //USE_PATH_COMPRESSION } int find(int x) { //btAssert(x < m_N); //btAssert(x >= 0); while (x != m_elements[x].m_id) { //not really a reason not to use path compression, and it flattens the trees/improves find performance dramatically #ifdef USE_PATH_COMPRESSION const btElement* elementPtr = &m_elements[m_elements[x].m_id]; m_elements[x].m_id = elementPtr->m_id; x = elementPtr->m_id; #else // x = m_elements[x].m_id; #endif //btAssert(x < m_N); //btAssert(x >= 0); } return x; } }; #endif //BT_UNION_FIND_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btBox2dShape.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_OBB_BOX_2D_SHAPE_H #define BT_OBB_BOX_2D_SHAPE_H #include "BulletCollision/CollisionShapes/btPolyhedralConvexShape.h" #include "BulletCollision/CollisionShapes/btCollisionMargin.h" #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" #include "LinearMath/btVector3.h" #include "LinearMath/btMinMax.h" ///The btBox2dShape is a box primitive around the origin, its sides axis aligned with length specified by half extents, in local shape coordinates. When used as part of a btCollisionObject or btRigidBody it will be an oriented box in world space. ATTRIBUTE_ALIGNED16(class) btBox2dShape : public btPolyhedralConvexShape { //btVector3 m_boxHalfExtents1; //use m_implicitShapeDimensions instead btVector3 m_centroid; btVector3 m_vertices[4]; btVector3 m_normals[4]; public: BT_DECLARE_ALIGNED_ALLOCATOR(); btVector3 getHalfExtentsWithMargin() const { btVector3 halfExtents = getHalfExtentsWithoutMargin(); btVector3 margin(getMargin(), getMargin(), getMargin()); halfExtents += margin; return halfExtents; } const btVector3& getHalfExtentsWithoutMargin() const { return m_implicitShapeDimensions; //changed in Bullet 2.63: assume the scaling and margin are included } virtual btVector3 localGetSupportingVertex(const btVector3& vec) const { btVector3 halfExtents = getHalfExtentsWithoutMargin(); btVector3 margin(getMargin(), getMargin(), getMargin()); halfExtents += margin; return btVector3(btFsels(vec.x(), halfExtents.x(), -halfExtents.x()), btFsels(vec.y(), halfExtents.y(), -halfExtents.y()), btFsels(vec.z(), halfExtents.z(), -halfExtents.z())); } SIMD_FORCE_INLINE btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const { const btVector3& halfExtents = getHalfExtentsWithoutMargin(); return btVector3(btFsels(vec.x(), halfExtents.x(), -halfExtents.x()), btFsels(vec.y(), halfExtents.y(), -halfExtents.y()), btFsels(vec.z(), halfExtents.z(), -halfExtents.z())); } virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const { const btVector3& halfExtents = getHalfExtentsWithoutMargin(); for (int i = 0; i < numVectors; i++) { const btVector3& vec = vectors[i]; supportVerticesOut[i].setValue(btFsels(vec.x(), halfExtents.x(), -halfExtents.x()), btFsels(vec.y(), halfExtents.y(), -halfExtents.y()), btFsels(vec.z(), halfExtents.z(), -halfExtents.z())); } } ///a btBox2dShape is a flat 2D box in the X-Y plane (Z extents are zero) btBox2dShape(const btVector3& boxHalfExtents) : btPolyhedralConvexShape(), m_centroid(0, 0, 0) { m_vertices[0].setValue(-boxHalfExtents.getX(), -boxHalfExtents.getY(), 0); m_vertices[1].setValue(boxHalfExtents.getX(), -boxHalfExtents.getY(), 0); m_vertices[2].setValue(boxHalfExtents.getX(), boxHalfExtents.getY(), 0); m_vertices[3].setValue(-boxHalfExtents.getX(), boxHalfExtents.getY(), 0); m_normals[0].setValue(0, -1, 0); m_normals[1].setValue(1, 0, 0); m_normals[2].setValue(0, 1, 0); m_normals[3].setValue(-1, 0, 0); btScalar minDimension = boxHalfExtents.getX(); if (minDimension > boxHalfExtents.getY()) minDimension = boxHalfExtents.getY(); m_shapeType = BOX_2D_SHAPE_PROXYTYPE; btVector3 margin(getMargin(), getMargin(), getMargin()); m_implicitShapeDimensions = (boxHalfExtents * m_localScaling) - margin; setSafeMargin(minDimension); }; virtual void setMargin(btScalar collisionMargin) { //correct the m_implicitShapeDimensions for the margin btVector3 oldMargin(getMargin(), getMargin(), getMargin()); btVector3 implicitShapeDimensionsWithMargin = m_implicitShapeDimensions + oldMargin; btConvexInternalShape::setMargin(collisionMargin); btVector3 newMargin(getMargin(), getMargin(), getMargin()); m_implicitShapeDimensions = implicitShapeDimensionsWithMargin - newMargin; } virtual void setLocalScaling(const btVector3& scaling) { btVector3 oldMargin(getMargin(), getMargin(), getMargin()); btVector3 implicitShapeDimensionsWithMargin = m_implicitShapeDimensions + oldMargin; btVector3 unScaledImplicitShapeDimensionsWithMargin = implicitShapeDimensionsWithMargin / m_localScaling; btConvexInternalShape::setLocalScaling(scaling); m_implicitShapeDimensions = (unScaledImplicitShapeDimensionsWithMargin * m_localScaling) - oldMargin; } virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const; virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const; int getVertexCount() const { return 4; } virtual int getNumVertices() const { return 4; } const btVector3* getVertices() const { return &m_vertices[0]; } const btVector3* getNormals() const { return &m_normals[0]; } virtual void getPlane(btVector3 & planeNormal, btVector3 & planeSupport, int i) const { //this plane might not be aligned... btVector4 plane; getPlaneEquation(plane, i); planeNormal = btVector3(plane.getX(), plane.getY(), plane.getZ()); planeSupport = localGetSupportingVertex(-planeNormal); } const btVector3& getCentroid() const { return m_centroid; } virtual int getNumPlanes() const { return 6; } virtual int getNumEdges() const { return 12; } virtual void getVertex(int i, btVector3& vtx) const { btVector3 halfExtents = getHalfExtentsWithoutMargin(); vtx = btVector3( halfExtents.x() * (1 - (i & 1)) - halfExtents.x() * (i & 1), halfExtents.y() * (1 - ((i & 2) >> 1)) - halfExtents.y() * ((i & 2) >> 1), halfExtents.z() * (1 - ((i & 4) >> 2)) - halfExtents.z() * ((i & 4) >> 2)); } virtual void getPlaneEquation(btVector4 & plane, int i) const { btVector3 halfExtents = getHalfExtentsWithoutMargin(); switch (i) { case 0: plane.setValue(btScalar(1.), btScalar(0.), btScalar(0.), -halfExtents.x()); break; case 1: plane.setValue(btScalar(-1.), btScalar(0.), btScalar(0.), -halfExtents.x()); break; case 2: plane.setValue(btScalar(0.), btScalar(1.), btScalar(0.), -halfExtents.y()); break; case 3: plane.setValue(btScalar(0.), btScalar(-1.), btScalar(0.), -halfExtents.y()); break; case 4: plane.setValue(btScalar(0.), btScalar(0.), btScalar(1.), -halfExtents.z()); break; case 5: plane.setValue(btScalar(0.), btScalar(0.), btScalar(-1.), -halfExtents.z()); break; default: btAssert(0); } } virtual void getEdge(int i, btVector3& pa, btVector3& pb) const //virtual void getEdge(int i,Edge& edge) const { int edgeVert0 = 0; int edgeVert1 = 0; switch (i) { case 0: edgeVert0 = 0; edgeVert1 = 1; break; case 1: edgeVert0 = 0; edgeVert1 = 2; break; case 2: edgeVert0 = 1; edgeVert1 = 3; break; case 3: edgeVert0 = 2; edgeVert1 = 3; break; case 4: edgeVert0 = 0; edgeVert1 = 4; break; case 5: edgeVert0 = 1; edgeVert1 = 5; break; case 6: edgeVert0 = 2; edgeVert1 = 6; break; case 7: edgeVert0 = 3; edgeVert1 = 7; break; case 8: edgeVert0 = 4; edgeVert1 = 5; break; case 9: edgeVert0 = 4; edgeVert1 = 6; break; case 10: edgeVert0 = 5; edgeVert1 = 7; break; case 11: edgeVert0 = 6; edgeVert1 = 7; break; default: btAssert(0); } getVertex(edgeVert0, pa); getVertex(edgeVert1, pb); } virtual bool isInside(const btVector3& pt, btScalar tolerance) const { btVector3 halfExtents = getHalfExtentsWithoutMargin(); //btScalar minDist = 2*tolerance; bool result = (pt.x() <= (halfExtents.x() + tolerance)) && (pt.x() >= (-halfExtents.x() - tolerance)) && (pt.y() <= (halfExtents.y() + tolerance)) && (pt.y() >= (-halfExtents.y() - tolerance)) && (pt.z() <= (halfExtents.z() + tolerance)) && (pt.z() >= (-halfExtents.z() - tolerance)); return result; } //debugging virtual const char* getName() const { return "Box2d"; } virtual int getNumPreferredPenetrationDirections() const { return 6; } virtual void getPreferredPenetrationDirection(int index, btVector3& penetrationVector) const { switch (index) { case 0: penetrationVector.setValue(btScalar(1.), btScalar(0.), btScalar(0.)); break; case 1: penetrationVector.setValue(btScalar(-1.), btScalar(0.), btScalar(0.)); break; case 2: penetrationVector.setValue(btScalar(0.), btScalar(1.), btScalar(0.)); break; case 3: penetrationVector.setValue(btScalar(0.), btScalar(-1.), btScalar(0.)); break; case 4: penetrationVector.setValue(btScalar(0.), btScalar(0.), btScalar(1.)); break; case 5: penetrationVector.setValue(btScalar(0.), btScalar(0.), btScalar(-1.)); break; default: btAssert(0); } } }; #endif //BT_OBB_BOX_2D_SHAPE_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btBoxShape.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_OBB_BOX_MINKOWSKI_H #define BT_OBB_BOX_MINKOWSKI_H #include "btPolyhedralConvexShape.h" #include "btCollisionMargin.h" #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" #include "LinearMath/btVector3.h" #include "LinearMath/btMinMax.h" ///The btBoxShape is a box primitive around the origin, its sides axis aligned with length specified by half extents, in local shape coordinates. When used as part of a btCollisionObject or btRigidBody it will be an oriented box in world space. ATTRIBUTE_ALIGNED16(class) btBoxShape : public btPolyhedralConvexShape { //btVector3 m_boxHalfExtents1; //use m_implicitShapeDimensions instead public: BT_DECLARE_ALIGNED_ALLOCATOR(); btVector3 getHalfExtentsWithMargin() const { btVector3 halfExtents = getHalfExtentsWithoutMargin(); btVector3 margin(getMargin(), getMargin(), getMargin()); halfExtents += margin; return halfExtents; } const btVector3& getHalfExtentsWithoutMargin() const { return m_implicitShapeDimensions; //scaling is included, margin is not } virtual btVector3 localGetSupportingVertex(const btVector3& vec) const { btVector3 halfExtents = getHalfExtentsWithoutMargin(); btVector3 margin(getMargin(), getMargin(), getMargin()); halfExtents += margin; return btVector3(btFsels(vec.x(), halfExtents.x(), -halfExtents.x()), btFsels(vec.y(), halfExtents.y(), -halfExtents.y()), btFsels(vec.z(), halfExtents.z(), -halfExtents.z())); } SIMD_FORCE_INLINE btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const { const btVector3& halfExtents = getHalfExtentsWithoutMargin(); return btVector3(btFsels(vec.x(), halfExtents.x(), -halfExtents.x()), btFsels(vec.y(), halfExtents.y(), -halfExtents.y()), btFsels(vec.z(), halfExtents.z(), -halfExtents.z())); } virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const { const btVector3& halfExtents = getHalfExtentsWithoutMargin(); for (int i = 0; i < numVectors; i++) { const btVector3& vec = vectors[i]; supportVerticesOut[i].setValue(btFsels(vec.x(), halfExtents.x(), -halfExtents.x()), btFsels(vec.y(), halfExtents.y(), -halfExtents.y()), btFsels(vec.z(), halfExtents.z(), -halfExtents.z())); } } btBoxShape(const btVector3& boxHalfExtents); virtual void setMargin(btScalar collisionMargin) { //correct the m_implicitShapeDimensions for the margin btVector3 oldMargin(getMargin(), getMargin(), getMargin()); btVector3 implicitShapeDimensionsWithMargin = m_implicitShapeDimensions + oldMargin; btConvexInternalShape::setMargin(collisionMargin); btVector3 newMargin(getMargin(), getMargin(), getMargin()); m_implicitShapeDimensions = implicitShapeDimensionsWithMargin - newMargin; } virtual void setLocalScaling(const btVector3& scaling) { btVector3 oldMargin(getMargin(), getMargin(), getMargin()); btVector3 implicitShapeDimensionsWithMargin = m_implicitShapeDimensions + oldMargin; btVector3 unScaledImplicitShapeDimensionsWithMargin = implicitShapeDimensionsWithMargin / m_localScaling; btConvexInternalShape::setLocalScaling(scaling); m_implicitShapeDimensions = (unScaledImplicitShapeDimensionsWithMargin * m_localScaling) - oldMargin; } virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const; virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const; virtual void getPlane(btVector3 & planeNormal, btVector3 & planeSupport, int i) const { //this plane might not be aligned... btVector4 plane; getPlaneEquation(plane, i); planeNormal = btVector3(plane.getX(), plane.getY(), plane.getZ()); planeSupport = localGetSupportingVertex(-planeNormal); } virtual int getNumPlanes() const { return 6; } virtual int getNumVertices() const { return 8; } virtual int getNumEdges() const { return 12; } virtual void getVertex(int i, btVector3& vtx) const { btVector3 halfExtents = getHalfExtentsWithMargin(); vtx = btVector3( halfExtents.x() * (1 - (i & 1)) - halfExtents.x() * (i & 1), halfExtents.y() * (1 - ((i & 2) >> 1)) - halfExtents.y() * ((i & 2) >> 1), halfExtents.z() * (1 - ((i & 4) >> 2)) - halfExtents.z() * ((i & 4) >> 2)); } virtual void getPlaneEquation(btVector4 & plane, int i) const { btVector3 halfExtents = getHalfExtentsWithoutMargin(); switch (i) { case 0: plane.setValue(btScalar(1.), btScalar(0.), btScalar(0.), -halfExtents.x()); break; case 1: plane.setValue(btScalar(-1.), btScalar(0.), btScalar(0.), -halfExtents.x()); break; case 2: plane.setValue(btScalar(0.), btScalar(1.), btScalar(0.), -halfExtents.y()); break; case 3: plane.setValue(btScalar(0.), btScalar(-1.), btScalar(0.), -halfExtents.y()); break; case 4: plane.setValue(btScalar(0.), btScalar(0.), btScalar(1.), -halfExtents.z()); break; case 5: plane.setValue(btScalar(0.), btScalar(0.), btScalar(-1.), -halfExtents.z()); break; default: btAssert(0); } } virtual void getEdge(int i, btVector3& pa, btVector3& pb) const //virtual void getEdge(int i,Edge& edge) const { int edgeVert0 = 0; int edgeVert1 = 0; switch (i) { case 0: edgeVert0 = 0; edgeVert1 = 1; break; case 1: edgeVert0 = 0; edgeVert1 = 2; break; case 2: edgeVert0 = 1; edgeVert1 = 3; break; case 3: edgeVert0 = 2; edgeVert1 = 3; break; case 4: edgeVert0 = 0; edgeVert1 = 4; break; case 5: edgeVert0 = 1; edgeVert1 = 5; break; case 6: edgeVert0 = 2; edgeVert1 = 6; break; case 7: edgeVert0 = 3; edgeVert1 = 7; break; case 8: edgeVert0 = 4; edgeVert1 = 5; break; case 9: edgeVert0 = 4; edgeVert1 = 6; break; case 10: edgeVert0 = 5; edgeVert1 = 7; break; case 11: edgeVert0 = 6; edgeVert1 = 7; break; default: btAssert(0); } getVertex(edgeVert0, pa); getVertex(edgeVert1, pb); } virtual bool isInside(const btVector3& pt, btScalar tolerance) const { btVector3 halfExtents = getHalfExtentsWithoutMargin(); //btScalar minDist = 2*tolerance; bool result = (pt.x() <= (halfExtents.x() + tolerance)) && (pt.x() >= (-halfExtents.x() - tolerance)) && (pt.y() <= (halfExtents.y() + tolerance)) && (pt.y() >= (-halfExtents.y() - tolerance)) && (pt.z() <= (halfExtents.z() + tolerance)) && (pt.z() >= (-halfExtents.z() - tolerance)); return result; } //debugging virtual const char* getName() const { return "Box"; } virtual int getNumPreferredPenetrationDirections() const { return 6; } virtual void getPreferredPenetrationDirection(int index, btVector3& penetrationVector) const { switch (index) { case 0: penetrationVector.setValue(btScalar(1.), btScalar(0.), btScalar(0.)); break; case 1: penetrationVector.setValue(btScalar(-1.), btScalar(0.), btScalar(0.)); break; case 2: penetrationVector.setValue(btScalar(0.), btScalar(1.), btScalar(0.)); break; case 3: penetrationVector.setValue(btScalar(0.), btScalar(-1.), btScalar(0.)); break; case 4: penetrationVector.setValue(btScalar(0.), btScalar(0.), btScalar(1.)); break; case 5: penetrationVector.setValue(btScalar(0.), btScalar(0.), btScalar(-1.)); break; default: btAssert(0); } } }; #endif //BT_OBB_BOX_MINKOWSKI_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_BVH_TRIANGLE_MESH_SHAPE_H #define BT_BVH_TRIANGLE_MESH_SHAPE_H #include "btTriangleMeshShape.h" #include "btOptimizedBvh.h" #include "LinearMath/btAlignedAllocator.h" #include "btTriangleInfoMap.h" ///The btBvhTriangleMeshShape is a static-triangle mesh shape, it can only be used for fixed/non-moving objects. ///If you required moving concave triangle meshes, it is recommended to perform convex decomposition ///using HACD, see Bullet/Demos/ConvexDecompositionDemo. ///Alternatively, you can use btGimpactMeshShape for moving concave triangle meshes. ///btBvhTriangleMeshShape has several optimizations, such as bounding volume hierarchy and ///cache friendly traversal for PlayStation 3 Cell SPU. ///It is recommended to enable useQuantizedAabbCompression for better memory usage. ///It takes a triangle mesh as input, for example a btTriangleMesh or btTriangleIndexVertexArray. The btBvhTriangleMeshShape class allows for triangle mesh deformations by a refit or partialRefit method. ///Instead of building the bounding volume hierarchy acceleration structure, it is also possible to serialize (save) and deserialize (load) the structure from disk. ///See Demos\ConcaveDemo\ConcavePhysicsDemo.cpp for an example. ATTRIBUTE_ALIGNED16(class) btBvhTriangleMeshShape : public btTriangleMeshShape { btOptimizedBvh* m_bvh; btTriangleInfoMap* m_triangleInfoMap; bool m_useQuantizedAabbCompression; bool m_ownsBvh; #ifdef __clang__ bool m_pad[11] __attribute__((unused)); ////need padding due to alignment #else bool m_pad[11]; ////need padding due to alignment #endif public: BT_DECLARE_ALIGNED_ALLOCATOR(); btBvhTriangleMeshShape(btStridingMeshInterface * meshInterface, bool useQuantizedAabbCompression, bool buildBvh = true); ///optionally pass in a larger bvh aabb, used for quantization. This allows for deformations within this aabb btBvhTriangleMeshShape(btStridingMeshInterface * meshInterface, bool useQuantizedAabbCompression, const btVector3& bvhAabbMin, const btVector3& bvhAabbMax, bool buildBvh = true); virtual ~btBvhTriangleMeshShape(); bool getOwnsBvh() const { return m_ownsBvh; } void performRaycast(btTriangleCallback * callback, const btVector3& raySource, const btVector3& rayTarget); void performConvexcast(btTriangleCallback * callback, const btVector3& boxSource, const btVector3& boxTarget, const btVector3& boxMin, const btVector3& boxMax); virtual void processAllTriangles(btTriangleCallback * callback, const btVector3& aabbMin, const btVector3& aabbMax) const; void refitTree(const btVector3& aabbMin, const btVector3& aabbMax); ///for a fast incremental refit of parts of the tree. Note: the entire AABB of the tree will become more conservative, it never shrinks void partialRefitTree(const btVector3& aabbMin, const btVector3& aabbMax); //debugging virtual const char* getName() const { return "BVHTRIANGLEMESH"; } virtual void setLocalScaling(const btVector3& scaling); btOptimizedBvh* getOptimizedBvh() { return m_bvh; } void setOptimizedBvh(btOptimizedBvh * bvh, const btVector3& localScaling = btVector3(1, 1, 1)); void buildOptimizedBvh(); bool usesQuantizedAabbCompression() const { return m_useQuantizedAabbCompression; } void setTriangleInfoMap(btTriangleInfoMap * triangleInfoMap) { m_triangleInfoMap = triangleInfoMap; } const btTriangleInfoMap* getTriangleInfoMap() const { return m_triangleInfoMap; } btTriangleInfoMap* getTriangleInfoMap() { return m_triangleInfoMap; } virtual int calculateSerializeBufferSize() const; ///fills the dataBuffer and returns the struct name (and 0 on failure) virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; virtual void serializeSingleBvh(btSerializer * serializer) const; virtual void serializeSingleTriangleInfoMap(btSerializer * serializer) const; }; // clang-format off ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 struct btTriangleMeshShapeData { btCollisionShapeData m_collisionShapeData; btStridingMeshInterfaceData m_meshInterface; btQuantizedBvhFloatData *m_quantizedFloatBvh; btQuantizedBvhDoubleData *m_quantizedDoubleBvh; btTriangleInfoMapData *m_triangleInfoMap; float m_collisionMargin; char m_pad3[4]; }; // clang-format on SIMD_FORCE_INLINE int btBvhTriangleMeshShape::calculateSerializeBufferSize() const { return sizeof(btTriangleMeshShapeData); } #endif //BT_BVH_TRIANGLE_MESH_SHAPE_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btCapsuleShape.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_CAPSULE_SHAPE_H #define BT_CAPSULE_SHAPE_H #include "btConvexInternalShape.h" #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" // for the types ///The btCapsuleShape represents a capsule around the Y axis, there is also the btCapsuleShapeX aligned around the X axis and btCapsuleShapeZ around the Z axis. ///The total height is height+2*radius, so the height is just the height between the center of each 'sphere' of the capsule caps. ///The btCapsuleShape is a convex hull of two spheres. The btMultiSphereShape is a more general collision shape that takes the convex hull of multiple sphere, so it can also represent a capsule when just using two spheres. ATTRIBUTE_ALIGNED16(class) btCapsuleShape : public btConvexInternalShape { protected: int m_upAxis; protected: ///only used for btCapsuleShapeZ and btCapsuleShapeX subclasses. btCapsuleShape() : btConvexInternalShape() { m_shapeType = CAPSULE_SHAPE_PROXYTYPE; }; public: BT_DECLARE_ALIGNED_ALLOCATOR(); btCapsuleShape(btScalar radius, btScalar height); ///CollisionShape Interface virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const; /// btConvexShape Interface virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const; virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const; virtual void setMargin(btScalar collisionMargin) { //don't override the margin for capsules, their entire radius == margin (void)collisionMargin; } virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const { btVector3 halfExtents(getRadius(), getRadius(), getRadius()); halfExtents[m_upAxis] = getRadius() + getHalfHeight(); btMatrix3x3 abs_b = t.getBasis().absolute(); btVector3 center = t.getOrigin(); btVector3 extent = halfExtents.dot3(abs_b[0], abs_b[1], abs_b[2]); aabbMin = center - extent; aabbMax = center + extent; } virtual const char* getName() const { return "CapsuleShape"; } int getUpAxis() const { return m_upAxis; } btScalar getRadius() const { int radiusAxis = (m_upAxis + 2) % 3; return m_implicitShapeDimensions[radiusAxis]; } btScalar getHalfHeight() const { return m_implicitShapeDimensions[m_upAxis]; } virtual void setLocalScaling(const btVector3& scaling) { btVector3 unScaledImplicitShapeDimensions = m_implicitShapeDimensions / m_localScaling; btConvexInternalShape::setLocalScaling(scaling); m_implicitShapeDimensions = (unScaledImplicitShapeDimensions * scaling); //update m_collisionMargin, since entire radius==margin int radiusAxis = (m_upAxis + 2) % 3; m_collisionMargin = m_implicitShapeDimensions[radiusAxis]; } virtual btVector3 getAnisotropicRollingFrictionDirection() const { btVector3 aniDir(0, 0, 0); aniDir[getUpAxis()] = 1; return aniDir; } virtual int calculateSerializeBufferSize() const; ///fills the dataBuffer and returns the struct name (and 0 on failure) virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; SIMD_FORCE_INLINE void deSerializeFloat(struct btCapsuleShapeData * dataBuffer); }; ///btCapsuleShapeX represents a capsule around the Z axis ///the total height is height+2*radius, so the height is just the height between the center of each 'sphere' of the capsule caps. class btCapsuleShapeX : public btCapsuleShape { public: btCapsuleShapeX(btScalar radius, btScalar height); //debugging virtual const char* getName() const { return "CapsuleX"; } }; ///btCapsuleShapeZ represents a capsule around the Z axis ///the total height is height+2*radius, so the height is just the height between the center of each 'sphere' of the capsule caps. class btCapsuleShapeZ : public btCapsuleShape { public: btCapsuleShapeZ(btScalar radius, btScalar height); //debugging virtual const char* getName() const { return "CapsuleZ"; } }; ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 struct btCapsuleShapeData { btConvexInternalShapeData m_convexInternalShapeData; int m_upAxis; char m_padding[4]; }; SIMD_FORCE_INLINE int btCapsuleShape::calculateSerializeBufferSize() const { return sizeof(btCapsuleShapeData); } ///fills the dataBuffer and returns the struct name (and 0 on failure) SIMD_FORCE_INLINE const char* btCapsuleShape::serialize(void* dataBuffer, btSerializer* serializer) const { btCapsuleShapeData* shapeData = (btCapsuleShapeData*)dataBuffer; btConvexInternalShape::serialize(&shapeData->m_convexInternalShapeData, serializer); shapeData->m_upAxis = m_upAxis; // Fill padding with zeros to appease msan. shapeData->m_padding[0] = 0; shapeData->m_padding[1] = 0; shapeData->m_padding[2] = 0; shapeData->m_padding[3] = 0; return "btCapsuleShapeData"; } SIMD_FORCE_INLINE void btCapsuleShape::deSerializeFloat(btCapsuleShapeData* dataBuffer) { m_implicitShapeDimensions.deSerializeFloat(dataBuffer->m_convexInternalShapeData.m_implicitShapeDimensions); m_collisionMargin = dataBuffer->m_convexInternalShapeData.m_collisionMargin; m_localScaling.deSerializeFloat(dataBuffer->m_convexInternalShapeData.m_localScaling); //it is best to already pre-allocate the matching btCapsuleShape*(X/Z) version to match m_upAxis m_upAxis = dataBuffer->m_upAxis; } #endif //BT_CAPSULE_SHAPE_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btCollisionMargin.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_COLLISION_MARGIN_H #define BT_COLLISION_MARGIN_H ///The CONVEX_DISTANCE_MARGIN is a default collision margin for convex collision shapes derived from btConvexInternalShape. ///This collision margin is used by Gjk and some other algorithms ///Note that when creating small objects, you need to make sure to set a smaller collision margin, using the 'setMargin' API #define CONVEX_DISTANCE_MARGIN btScalar(0.04) // btScalar(0.1)//;//btScalar(0.01) #endif //BT_COLLISION_MARGIN_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btCollisionShape.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_COLLISION_SHAPE_H #define BT_COLLISION_SHAPE_H #include "LinearMath/btTransform.h" #include "LinearMath/btVector3.h" #include "LinearMath/btMatrix3x3.h" #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" //for the shape types class btSerializer; ///The btCollisionShape class provides an interface for collision shapes that can be shared among btCollisionObjects. ATTRIBUTE_ALIGNED16(class) btCollisionShape { protected: int m_shapeType; void* m_userPointer; int m_userIndex; int m_userIndex2; public: BT_DECLARE_ALIGNED_ALLOCATOR(); btCollisionShape() : m_shapeType(INVALID_SHAPE_PROXYTYPE), m_userPointer(0), m_userIndex(-1), m_userIndex2(-1) { } virtual ~btCollisionShape() { } ///getAabb returns the axis aligned bounding box in the coordinate frame of the given transform t. virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const = 0; virtual void getBoundingSphere(btVector3 & center, btScalar & radius) const; ///getAngularMotionDisc returns the maximum radius needed for Conservative Advancement to handle time-of-impact with rotations. virtual btScalar getAngularMotionDisc() const; virtual btScalar getContactBreakingThreshold(btScalar defaultContactThresholdFactor) const; ///calculateTemporalAabb calculates the enclosing aabb for the moving object over interval [0..timeStep) ///result is conservative void calculateTemporalAabb(const btTransform& curTrans, const btVector3& linvel, const btVector3& angvel, btScalar timeStep, btVector3& temporalAabbMin, btVector3& temporalAabbMax) const; SIMD_FORCE_INLINE bool isPolyhedral() const { return btBroadphaseProxy::isPolyhedral(getShapeType()); } SIMD_FORCE_INLINE bool isConvex2d() const { return btBroadphaseProxy::isConvex2d(getShapeType()); } SIMD_FORCE_INLINE bool isConvex() const { return btBroadphaseProxy::isConvex(getShapeType()); } SIMD_FORCE_INLINE bool isNonMoving() const { return btBroadphaseProxy::isNonMoving(getShapeType()); } SIMD_FORCE_INLINE bool isConcave() const { return btBroadphaseProxy::isConcave(getShapeType()); } SIMD_FORCE_INLINE bool isCompound() const { return btBroadphaseProxy::isCompound(getShapeType()); } SIMD_FORCE_INLINE bool isSoftBody() const { return btBroadphaseProxy::isSoftBody(getShapeType()); } ///isInfinite is used to catch simulation error (aabb check) SIMD_FORCE_INLINE bool isInfinite() const { return btBroadphaseProxy::isInfinite(getShapeType()); } #ifndef __SPU__ virtual void setLocalScaling(const btVector3& scaling) = 0; virtual const btVector3& getLocalScaling() const = 0; virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const = 0; //debugging support virtual const char* getName() const = 0; #endif //__SPU__ int getShapeType() const { return m_shapeType; } ///the getAnisotropicRollingFrictionDirection can be used in combination with setAnisotropicFriction ///See Bullet/Demos/RollingFrictionDemo for an example virtual btVector3 getAnisotropicRollingFrictionDirection() const { return btVector3(1, 1, 1); } virtual void setMargin(btScalar margin) = 0; virtual btScalar getMargin() const = 0; ///optional user data pointer void setUserPointer(void* userPtr) { m_userPointer = userPtr; } void* getUserPointer() const { return m_userPointer; } void setUserIndex(int index) { m_userIndex = index; } int getUserIndex() const { return m_userIndex; } void setUserIndex2(int index) { m_userIndex2 = index; } int getUserIndex2() const { return m_userIndex2; } virtual int calculateSerializeBufferSize() const; ///fills the dataBuffer and returns the struct name (and 0 on failure) virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; virtual void serializeSingleShape(btSerializer * serializer) const; }; // clang-format off // parser needs * with the name ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 struct btCollisionShapeData { char *m_name; int m_shapeType; char m_padding[4]; }; // clang-format on SIMD_FORCE_INLINE int btCollisionShape::calculateSerializeBufferSize() const { return sizeof(btCollisionShapeData); } #endif //BT_COLLISION_SHAPE_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btCompoundShape.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_COMPOUND_SHAPE_H #define BT_COMPOUND_SHAPE_H #include "btCollisionShape.h" #include "LinearMath/btVector3.h" #include "LinearMath/btTransform.h" #include "LinearMath/btMatrix3x3.h" #include "btCollisionMargin.h" #include "LinearMath/btAlignedObjectArray.h" //class btOptimizedBvh; struct btDbvt; ATTRIBUTE_ALIGNED16(struct) btCompoundShapeChild { BT_DECLARE_ALIGNED_ALLOCATOR(); btTransform m_transform; btCollisionShape* m_childShape; int m_childShapeType; btScalar m_childMargin; struct btDbvtNode* m_node; }; SIMD_FORCE_INLINE bool operator==(const btCompoundShapeChild& c1, const btCompoundShapeChild& c2) { return (c1.m_transform == c2.m_transform && c1.m_childShape == c2.m_childShape && c1.m_childShapeType == c2.m_childShapeType && c1.m_childMargin == c2.m_childMargin); } /// The btCompoundShape allows to store multiple other btCollisionShapes /// This allows for moving concave collision objects. This is more general then the static concave btBvhTriangleMeshShape. /// It has an (optional) dynamic aabb tree to accelerate early rejection tests. /// @todo: This aabb tree can also be use to speed up ray tests on btCompoundShape, see http://code.google.com/p/bullet/issues/detail?id=25 /// Currently, removal of child shapes is only supported when disabling the aabb tree (pass 'false' in the constructor of btCompoundShape) ATTRIBUTE_ALIGNED16(class) btCompoundShape : public btCollisionShape { protected: btAlignedObjectArray m_children; btVector3 m_localAabbMin; btVector3 m_localAabbMax; btDbvt* m_dynamicAabbTree; ///increment m_updateRevision when adding/removing/replacing child shapes, so that some caches can be updated int m_updateRevision; btScalar m_collisionMargin; btVector3 m_localScaling; public: BT_DECLARE_ALIGNED_ALLOCATOR(); explicit btCompoundShape(bool enableDynamicAabbTree = true, const int initialChildCapacity = 0); virtual ~btCompoundShape(); void addChildShape(const btTransform& localTransform, btCollisionShape* shape); /// Remove all children shapes that contain the specified shape virtual void removeChildShape(btCollisionShape * shape); void removeChildShapeByIndex(int childShapeindex); int getNumChildShapes() const { return int(m_children.size()); } btCollisionShape* getChildShape(int index) { return m_children[index].m_childShape; } const btCollisionShape* getChildShape(int index) const { return m_children[index].m_childShape; } btTransform& getChildTransform(int index) { return m_children[index].m_transform; } const btTransform& getChildTransform(int index) const { return m_children[index].m_transform; } ///set a new transform for a child, and update internal data structures (local aabb and dynamic tree) void updateChildTransform(int childIndex, const btTransform& newChildTransform, bool shouldRecalculateLocalAabb = true); btCompoundShapeChild* getChildList() { return &m_children[0]; } ///getAabb's default implementation is brute force, expected derived classes to implement a fast dedicated version virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const; /** Re-calculate the local Aabb. Is called at the end of removeChildShapes. Use this yourself if you modify the children or their transforms. */ virtual void recalculateLocalAabb(); virtual void setLocalScaling(const btVector3& scaling); virtual const btVector3& getLocalScaling() const { return m_localScaling; } virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const; virtual void setMargin(btScalar margin) { m_collisionMargin = margin; } virtual btScalar getMargin() const { return m_collisionMargin; } virtual const char* getName() const { return "Compound"; } const btDbvt* getDynamicAabbTree() const { return m_dynamicAabbTree; } btDbvt* getDynamicAabbTree() { return m_dynamicAabbTree; } void createAabbTreeFromChildren(); ///computes the exact moment of inertia and the transform from the coordinate system defined by the principal axes of the moment of inertia ///and the center of mass to the current coordinate system. "masses" points to an array of masses of the children. The resulting transform ///"principal" has to be applied inversely to all children transforms in order for the local coordinate system of the compound ///shape to be centered at the center of mass and to coincide with the principal axes. This also necessitates a correction of the world transform ///of the collision object by the principal transform. void calculatePrincipalAxisTransform(const btScalar* masses, btTransform& principal, btVector3& inertia) const; int getUpdateRevision() const { return m_updateRevision; } virtual int calculateSerializeBufferSize() const; ///fills the dataBuffer and returns the struct name (and 0 on failure) virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; }; // clang-format off ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 struct btCompoundShapeChildData { btTransformFloatData m_transform; btCollisionShapeData *m_childShape; int m_childShapeType; float m_childMargin; }; ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 struct btCompoundShapeData { btCollisionShapeData m_collisionShapeData; btCompoundShapeChildData *m_childShapePtr; int m_numChildShapes; float m_collisionMargin; }; // clang-format on SIMD_FORCE_INLINE int btCompoundShape::calculateSerializeBufferSize() const { return sizeof(btCompoundShapeData); } #endif //BT_COMPOUND_SHAPE_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btConcaveShape.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_CONCAVE_SHAPE_H #define BT_CONCAVE_SHAPE_H #include "btCollisionShape.h" #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" // for the types #include "btTriangleCallback.h" /// PHY_ScalarType enumerates possible scalar types. /// See the btStridingMeshInterface or btHeightfieldTerrainShape for its use typedef enum PHY_ScalarType { PHY_FLOAT, PHY_DOUBLE, PHY_INTEGER, PHY_SHORT, PHY_FIXEDPOINT88, PHY_UCHAR } PHY_ScalarType; ///The btConcaveShape class provides an interface for non-moving (static) concave shapes. ///It has been implemented by the btStaticPlaneShape, btBvhTriangleMeshShape and btHeightfieldTerrainShape. ATTRIBUTE_ALIGNED16(class) btConcaveShape : public btCollisionShape { protected: btScalar m_collisionMargin; public: BT_DECLARE_ALIGNED_ALLOCATOR(); btConcaveShape(); virtual ~btConcaveShape(); virtual void processAllTriangles(btTriangleCallback * callback, const btVector3& aabbMin, const btVector3& aabbMax) const = 0; virtual btScalar getMargin() const { return m_collisionMargin; } virtual void setMargin(btScalar collisionMargin) { m_collisionMargin = collisionMargin; } }; #endif //BT_CONCAVE_SHAPE_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btConeShape.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_CONE_MINKOWSKI_H #define BT_CONE_MINKOWSKI_H #include "btConvexInternalShape.h" #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" // for the types ///The btConeShape implements a cone shape primitive, centered around the origin and aligned with the Y axis. The btConeShapeX is aligned around the X axis and btConeShapeZ around the Z axis. ATTRIBUTE_ALIGNED16(class) btConeShape : public btConvexInternalShape { btScalar m_sinAngle; btScalar m_radius; btScalar m_height; int m_coneIndices[3]; btVector3 coneLocalSupport(const btVector3& v) const; public: BT_DECLARE_ALIGNED_ALLOCATOR(); btConeShape(btScalar radius, btScalar height); virtual btVector3 localGetSupportingVertex(const btVector3& vec) const; virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const; virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const; btScalar getRadius() const { return m_radius; } btScalar getHeight() const { return m_height; } void setRadius(const btScalar radius) { m_radius = radius; } void setHeight(const btScalar height) { m_height = height; } virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const { btTransform identity; identity.setIdentity(); btVector3 aabbMin, aabbMax; getAabb(identity, aabbMin, aabbMax); btVector3 halfExtents = (aabbMax - aabbMin) * btScalar(0.5); btScalar margin = getMargin(); btScalar lx = btScalar(2.) * (halfExtents.x() + margin); btScalar ly = btScalar(2.) * (halfExtents.y() + margin); btScalar lz = btScalar(2.) * (halfExtents.z() + margin); const btScalar x2 = lx * lx; const btScalar y2 = ly * ly; const btScalar z2 = lz * lz; const btScalar scaledmass = mass * btScalar(0.08333333); inertia = scaledmass * (btVector3(y2 + z2, x2 + z2, x2 + y2)); // inertia.x() = scaledmass * (y2+z2); // inertia.y() = scaledmass * (x2+z2); // inertia.z() = scaledmass * (x2+y2); } virtual const char* getName() const { return "Cone"; } ///choose upAxis index void setConeUpIndex(int upIndex); int getConeUpIndex() const { return m_coneIndices[1]; } virtual btVector3 getAnisotropicRollingFrictionDirection() const { return btVector3(0, 1, 0); } virtual void setLocalScaling(const btVector3& scaling); virtual int calculateSerializeBufferSize() const; ///fills the dataBuffer and returns the struct name (and 0 on failure) virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; }; ///btConeShape implements a Cone shape, around the X axis class btConeShapeX : public btConeShape { public: btConeShapeX(btScalar radius, btScalar height); virtual btVector3 getAnisotropicRollingFrictionDirection() const { return btVector3(1, 0, 0); } //debugging virtual const char* getName() const { return "ConeX"; } }; ///btConeShapeZ implements a Cone shape, around the Z axis class btConeShapeZ : public btConeShape { public: btConeShapeZ(btScalar radius, btScalar height); virtual btVector3 getAnisotropicRollingFrictionDirection() const { return btVector3(0, 0, 1); } //debugging virtual const char* getName() const { return "ConeZ"; } }; ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 struct btConeShapeData { btConvexInternalShapeData m_convexInternalShapeData; int m_upIndex; char m_padding[4]; }; SIMD_FORCE_INLINE int btConeShape::calculateSerializeBufferSize() const { return sizeof(btConeShapeData); } ///fills the dataBuffer and returns the struct name (and 0 on failure) SIMD_FORCE_INLINE const char* btConeShape::serialize(void* dataBuffer, btSerializer* serializer) const { btConeShapeData* shapeData = (btConeShapeData*)dataBuffer; btConvexInternalShape::serialize(&shapeData->m_convexInternalShapeData, serializer); shapeData->m_upIndex = m_coneIndices[1]; // Fill padding with zeros to appease msan. shapeData->m_padding[0] = 0; shapeData->m_padding[1] = 0; shapeData->m_padding[2] = 0; shapeData->m_padding[3] = 0; return "btConeShapeData"; } #endif //BT_CONE_MINKOWSKI_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btConvex2dShape.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_CONVEX_2D_SHAPE_H #define BT_CONVEX_2D_SHAPE_H #include "BulletCollision/CollisionShapes/btConvexShape.h" #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" // for the types ///The btConvex2dShape allows to use arbitrary convex shapes as 2d convex shapes, with the Z component assumed to be 0. ///For 2d boxes, the btBox2dShape is recommended. ATTRIBUTE_ALIGNED16(class) btConvex2dShape : public btConvexShape { btConvexShape* m_childConvexShape; public: BT_DECLARE_ALIGNED_ALLOCATOR(); btConvex2dShape(btConvexShape * convexChildShape); virtual ~btConvex2dShape(); virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const; virtual btVector3 localGetSupportingVertex(const btVector3& vec) const; virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const; virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const; btConvexShape* getChildShape() { return m_childConvexShape; } const btConvexShape* getChildShape() const { return m_childConvexShape; } virtual const char* getName() const { return "Convex2dShape"; } /////////////////////////// ///getAabb's default implementation is brute force, expected derived classes to implement a fast dedicated version void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const; virtual void getAabbSlow(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const; virtual void setLocalScaling(const btVector3& scaling); virtual const btVector3& getLocalScaling() const; virtual void setMargin(btScalar margin); virtual btScalar getMargin() const; virtual int getNumPreferredPenetrationDirections() const; virtual void getPreferredPenetrationDirection(int index, btVector3& penetrationVector) const; }; #endif //BT_CONVEX_2D_SHAPE_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btConvexHullShape.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_CONVEX_HULL_SHAPE_H #define BT_CONVEX_HULL_SHAPE_H #include "btPolyhedralConvexShape.h" #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" // for the types #include "LinearMath/btAlignedObjectArray.h" ///The btConvexHullShape implements an implicit convex hull of an array of vertices. ///Bullet provides a general and fast collision detector for convex shapes based on GJK and EPA using localGetSupportingVertex. ATTRIBUTE_ALIGNED16(class) btConvexHullShape : public btPolyhedralConvexAabbCachingShape { btAlignedObjectArray m_unscaledPoints; public: BT_DECLARE_ALIGNED_ALLOCATOR(); ///this constructor optionally takes in a pointer to points. Each point is assumed to be 3 consecutive btScalar (x,y,z), the striding defines the number of bytes between each point, in memory. ///It is easier to not pass any points in the constructor, and just add one point at a time, using addPoint. ///btConvexHullShape make an internal copy of the points. btConvexHullShape(const btScalar* points = 0, int numPoints = 0, int stride = sizeof(btVector3)); void addPoint(const btVector3& point, bool recalculateLocalAabb = true); btVector3* getUnscaledPoints() { return &m_unscaledPoints[0]; } const btVector3* getUnscaledPoints() const { return &m_unscaledPoints[0]; } ///getPoints is obsolete, please use getUnscaledPoints const btVector3* getPoints() const { return getUnscaledPoints(); } void optimizeConvexHull(); SIMD_FORCE_INLINE btVector3 getScaledPoint(int i) const { return m_unscaledPoints[i] * m_localScaling; } SIMD_FORCE_INLINE int getNumPoints() const { return m_unscaledPoints.size(); } virtual btVector3 localGetSupportingVertex(const btVector3& vec) const; virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const; virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const; virtual void project(const btTransform& trans, const btVector3& dir, btScalar& minProj, btScalar& maxProj, btVector3& witnesPtMin, btVector3& witnesPtMax) const; //debugging virtual const char* getName() const { return "Convex"; } virtual int getNumVertices() const; virtual int getNumEdges() const; virtual void getEdge(int i, btVector3& pa, btVector3& pb) const; virtual void getVertex(int i, btVector3& vtx) const; virtual int getNumPlanes() const; virtual void getPlane(btVector3 & planeNormal, btVector3 & planeSupport, int i) const; virtual bool isInside(const btVector3& pt, btScalar tolerance) const; ///in case we receive negative scaling virtual void setLocalScaling(const btVector3& scaling); virtual int calculateSerializeBufferSize() const; ///fills the dataBuffer and returns the struct name (and 0 on failure) virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; }; // clang-format off ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 struct btConvexHullShapeData { btConvexInternalShapeData m_convexInternalShapeData; btVector3FloatData *m_unscaledPointsFloatPtr; btVector3DoubleData *m_unscaledPointsDoublePtr; int m_numUnscaledPoints; char m_padding3[4]; }; // clang-format on SIMD_FORCE_INLINE int btConvexHullShape::calculateSerializeBufferSize() const { return sizeof(btConvexHullShapeData); } #endif //BT_CONVEX_HULL_SHAPE_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btConvexInternalShape.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_CONVEX_INTERNAL_SHAPE_H #define BT_CONVEX_INTERNAL_SHAPE_H #include "btConvexShape.h" #include "LinearMath/btAabbUtil2.h" ///The btConvexInternalShape is an internal base class, shared by most convex shape implementations. ///The btConvexInternalShape uses a default collision margin set to CONVEX_DISTANCE_MARGIN. ///This collision margin used by Gjk and some other algorithms, see also btCollisionMargin.h ///Note that when creating small shapes (derived from btConvexInternalShape), ///you need to make sure to set a smaller collision margin, using the 'setMargin' API ///There is a automatic mechanism 'setSafeMargin' used by btBoxShape and btCylinderShape ATTRIBUTE_ALIGNED16(class) btConvexInternalShape : public btConvexShape { protected: //local scaling. collisionMargin is not scaled ! btVector3 m_localScaling; btVector3 m_implicitShapeDimensions; btScalar m_collisionMargin; btScalar m_padding; btConvexInternalShape(); public: BT_DECLARE_ALIGNED_ALLOCATOR(); virtual ~btConvexInternalShape() { } virtual btVector3 localGetSupportingVertex(const btVector3& vec) const; const btVector3& getImplicitShapeDimensions() const { return m_implicitShapeDimensions; } ///warning: use setImplicitShapeDimensions with care ///changing a collision shape while the body is in the world is not recommended, ///it is best to remove the body from the world, then make the change, and re-add it ///alternatively flush the contact points, see documentation for 'cleanProxyFromPairs' void setImplicitShapeDimensions(const btVector3& dimensions) { m_implicitShapeDimensions = dimensions; } void setSafeMargin(btScalar minDimension, btScalar defaultMarginMultiplier = 0.1f) { btScalar safeMargin = defaultMarginMultiplier * minDimension; if (safeMargin < getMargin()) { setMargin(safeMargin); } } void setSafeMargin(const btVector3& halfExtents, btScalar defaultMarginMultiplier = 0.1f) { //see http://code.google.com/p/bullet/issues/detail?id=349 //this margin check could could be added to other collision shapes too, //or add some assert/warning somewhere btScalar minDimension = halfExtents[halfExtents.minAxis()]; setSafeMargin(minDimension, defaultMarginMultiplier); } ///getAabb's default implementation is brute force, expected derived classes to implement a fast dedicated version void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const { getAabbSlow(t, aabbMin, aabbMax); } virtual void getAabbSlow(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const; virtual void setLocalScaling(const btVector3& scaling); virtual const btVector3& getLocalScaling() const { return m_localScaling; } const btVector3& getLocalScalingNV() const { return m_localScaling; } virtual void setMargin(btScalar margin) { m_collisionMargin = margin; } virtual btScalar getMargin() const { return m_collisionMargin; } btScalar getMarginNV() const { return m_collisionMargin; } virtual int getNumPreferredPenetrationDirections() const { return 0; } virtual void getPreferredPenetrationDirection(int index, btVector3& penetrationVector) const { (void)penetrationVector; (void)index; btAssert(0); } virtual int calculateSerializeBufferSize() const; ///fills the dataBuffer and returns the struct name (and 0 on failure) virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; }; ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 struct btConvexInternalShapeData { btCollisionShapeData m_collisionShapeData; btVector3FloatData m_localScaling; btVector3FloatData m_implicitShapeDimensions; float m_collisionMargin; int m_padding; }; SIMD_FORCE_INLINE int btConvexInternalShape::calculateSerializeBufferSize() const { return sizeof(btConvexInternalShapeData); } ///fills the dataBuffer and returns the struct name (and 0 on failure) SIMD_FORCE_INLINE const char* btConvexInternalShape::serialize(void* dataBuffer, btSerializer* serializer) const { btConvexInternalShapeData* shapeData = (btConvexInternalShapeData*)dataBuffer; btCollisionShape::serialize(&shapeData->m_collisionShapeData, serializer); m_implicitShapeDimensions.serializeFloat(shapeData->m_implicitShapeDimensions); m_localScaling.serializeFloat(shapeData->m_localScaling); shapeData->m_collisionMargin = float(m_collisionMargin); // Fill padding with zeros to appease msan. shapeData->m_padding = 0; return "btConvexInternalShapeData"; } ///btConvexInternalAabbCachingShape adds local aabb caching for convex shapes, to avoid expensive bounding box calculations class btConvexInternalAabbCachingShape : public btConvexInternalShape { btVector3 m_localAabbMin; btVector3 m_localAabbMax; bool m_isLocalAabbValid; protected: btConvexInternalAabbCachingShape(); void setCachedLocalAabb(const btVector3& aabbMin, const btVector3& aabbMax) { m_isLocalAabbValid = true; m_localAabbMin = aabbMin; m_localAabbMax = aabbMax; } inline void getCachedLocalAabb(btVector3& aabbMin, btVector3& aabbMax) const { btAssert(m_isLocalAabbValid); aabbMin = m_localAabbMin; aabbMax = m_localAabbMax; } inline void getNonvirtualAabb(const btTransform& trans, btVector3& aabbMin, btVector3& aabbMax, btScalar margin) const { //lazy evaluation of local aabb btAssert(m_isLocalAabbValid); btTransformAabb(m_localAabbMin, m_localAabbMax, margin, trans, aabbMin, aabbMax); } public: virtual void setLocalScaling(const btVector3& scaling); virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const; void recalcLocalAabb(); }; #endif //BT_CONVEX_INTERNAL_SHAPE_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btConvexPointCloudShape.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_CONVEX_POINT_CLOUD_SHAPE_H #define BT_CONVEX_POINT_CLOUD_SHAPE_H #include "btPolyhedralConvexShape.h" #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" // for the types #include "LinearMath/btAlignedObjectArray.h" ///The btConvexPointCloudShape implements an implicit convex hull of an array of vertices. ATTRIBUTE_ALIGNED16(class) btConvexPointCloudShape : public btPolyhedralConvexAabbCachingShape { btVector3* m_unscaledPoints; int m_numPoints; public: BT_DECLARE_ALIGNED_ALLOCATOR(); btConvexPointCloudShape() { m_localScaling.setValue(1.f, 1.f, 1.f); m_shapeType = CONVEX_POINT_CLOUD_SHAPE_PROXYTYPE; m_unscaledPoints = 0; m_numPoints = 0; } btConvexPointCloudShape(btVector3 * points, int numPoints, const btVector3& localScaling, bool computeAabb = true) { m_localScaling = localScaling; m_shapeType = CONVEX_POINT_CLOUD_SHAPE_PROXYTYPE; m_unscaledPoints = points; m_numPoints = numPoints; if (computeAabb) recalcLocalAabb(); } void setPoints(btVector3 * points, int numPoints, bool computeAabb = true, const btVector3& localScaling = btVector3(1.f, 1.f, 1.f)) { m_unscaledPoints = points; m_numPoints = numPoints; m_localScaling = localScaling; if (computeAabb) recalcLocalAabb(); } SIMD_FORCE_INLINE btVector3* getUnscaledPoints() { return m_unscaledPoints; } SIMD_FORCE_INLINE const btVector3* getUnscaledPoints() const { return m_unscaledPoints; } SIMD_FORCE_INLINE int getNumPoints() const { return m_numPoints; } SIMD_FORCE_INLINE btVector3 getScaledPoint(int index) const { return m_unscaledPoints[index] * m_localScaling; } #ifndef __SPU__ virtual btVector3 localGetSupportingVertex(const btVector3& vec) const; virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const; virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const; #endif //debugging virtual const char* getName() const { return "ConvexPointCloud"; } virtual int getNumVertices() const; virtual int getNumEdges() const; virtual void getEdge(int i, btVector3& pa, btVector3& pb) const; virtual void getVertex(int i, btVector3& vtx) const; virtual int getNumPlanes() const; virtual void getPlane(btVector3 & planeNormal, btVector3 & planeSupport, int i) const; virtual bool isInside(const btVector3& pt, btScalar tolerance) const; ///in case we receive negative scaling virtual void setLocalScaling(const btVector3& scaling); }; #endif //BT_CONVEX_POINT_CLOUD_SHAPE_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btConvexPolyhedron.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2011 Advanced Micro Devices, Inc. http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ ///This file was written by Erwin Coumans #ifndef _BT_POLYHEDRAL_FEATURES_H #define _BT_POLYHEDRAL_FEATURES_H #include "LinearMath/btTransform.h" #include "LinearMath/btAlignedObjectArray.h" #define TEST_INTERNAL_OBJECTS 1 struct btFace { btAlignedObjectArray m_indices; // btAlignedObjectArray m_connectedFaces; btScalar m_plane[4]; }; ATTRIBUTE_ALIGNED16(class) btConvexPolyhedron { public: BT_DECLARE_ALIGNED_ALLOCATOR(); btConvexPolyhedron(); virtual ~btConvexPolyhedron(); btAlignedObjectArray m_vertices; btAlignedObjectArray m_faces; btAlignedObjectArray m_uniqueEdges; btVector3 m_localCenter; btVector3 m_extents; btScalar m_radius; btVector3 mC; btVector3 mE; void initialize(); void initialize2(); bool testContainment() const; void project(const btTransform& trans, const btVector3& dir, btScalar& minProj, btScalar& maxProj, btVector3& witnesPtMin, btVector3& witnesPtMax) const; }; #endif //_BT_POLYHEDRAL_FEATURES_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btConvexShape.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_CONVEX_SHAPE_INTERFACE1 #define BT_CONVEX_SHAPE_INTERFACE1 #include "btCollisionShape.h" #include "LinearMath/btVector3.h" #include "LinearMath/btTransform.h" #include "LinearMath/btMatrix3x3.h" #include "btCollisionMargin.h" #include "LinearMath/btAlignedAllocator.h" #define MAX_PREFERRED_PENETRATION_DIRECTIONS 10 /// The btConvexShape is an abstract shape interface, implemented by all convex shapes such as btBoxShape, btConvexHullShape etc. /// It describes general convex shapes using the localGetSupportingVertex interface, used by collision detectors such as btGjkPairDetector. ATTRIBUTE_ALIGNED16(class) btConvexShape : public btCollisionShape { public: BT_DECLARE_ALIGNED_ALLOCATOR(); btConvexShape(); virtual ~btConvexShape(); virtual btVector3 localGetSupportingVertex(const btVector3& vec) const = 0; //////// #ifndef __SPU__ virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const = 0; #endif //#ifndef __SPU__ btVector3 localGetSupportVertexWithoutMarginNonVirtual(const btVector3& vec) const; btVector3 localGetSupportVertexNonVirtual(const btVector3& vec) const; btScalar getMarginNonVirtual() const; void getAabbNonVirtual(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const; virtual void project(const btTransform& trans, const btVector3& dir, btScalar& minProj, btScalar& maxProj, btVector3& witnesPtMin, btVector3& witnesPtMax) const; //notice that the vectors should be unit length virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const = 0; ///getAabb's default implementation is brute force, expected derived classes to implement a fast dedicated version void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const = 0; virtual void getAabbSlow(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const = 0; virtual void setLocalScaling(const btVector3& scaling) = 0; virtual const btVector3& getLocalScaling() const = 0; virtual void setMargin(btScalar margin) = 0; virtual btScalar getMargin() const = 0; virtual int getNumPreferredPenetrationDirections() const = 0; virtual void getPreferredPenetrationDirection(int index, btVector3& penetrationVector) const = 0; }; #endif //BT_CONVEX_SHAPE_INTERFACE1 ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btConvexTriangleMeshShape.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_CONVEX_TRIANGLEMESH_SHAPE_H #define BT_CONVEX_TRIANGLEMESH_SHAPE_H #include "btPolyhedralConvexShape.h" #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" // for the types /// The btConvexTriangleMeshShape is a convex hull of a triangle mesh, but the performance is not as good as btConvexHullShape. /// A small benefit of this class is that it uses the btStridingMeshInterface, so you can avoid the duplication of the triangle mesh data. Nevertheless, most users should use the much better performing btConvexHullShape instead. ATTRIBUTE_ALIGNED16(class) btConvexTriangleMeshShape : public btPolyhedralConvexAabbCachingShape { class btStridingMeshInterface* m_stridingMesh; public: BT_DECLARE_ALIGNED_ALLOCATOR(); btConvexTriangleMeshShape(btStridingMeshInterface * meshInterface, bool calcAabb = true); class btStridingMeshInterface* getMeshInterface() { return m_stridingMesh; } const class btStridingMeshInterface* getMeshInterface() const { return m_stridingMesh; } virtual btVector3 localGetSupportingVertex(const btVector3& vec) const; virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const; virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const; //debugging virtual const char* getName() const { return "ConvexTrimesh"; } virtual int getNumVertices() const; virtual int getNumEdges() const; virtual void getEdge(int i, btVector3& pa, btVector3& pb) const; virtual void getVertex(int i, btVector3& vtx) const; virtual int getNumPlanes() const; virtual void getPlane(btVector3 & planeNormal, btVector3 & planeSupport, int i) const; virtual bool isInside(const btVector3& pt, btScalar tolerance) const; virtual void setLocalScaling(const btVector3& scaling); virtual const btVector3& getLocalScaling() const; ///computes the exact moment of inertia and the transform from the coordinate system defined by the principal axes of the moment of inertia ///and the center of mass to the current coordinate system. A mass of 1 is assumed, for other masses just multiply the computed "inertia" ///by the mass. The resulting transform "principal" has to be applied inversely to the mesh in order for the local coordinate system of the ///shape to be centered at the center of mass and to coincide with the principal axes. This also necessitates a correction of the world transform ///of the collision object by the principal transform. This method also computes the volume of the convex mesh. void calculatePrincipalAxisTransform(btTransform & principal, btVector3 & inertia, btScalar & volume) const; }; #endif //BT_CONVEX_TRIANGLEMESH_SHAPE_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btCylinderShape.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_CYLINDER_MINKOWSKI_H #define BT_CYLINDER_MINKOWSKI_H #include "btBoxShape.h" #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" // for the types #include "LinearMath/btVector3.h" /// The btCylinderShape class implements a cylinder shape primitive, centered around the origin. Its central axis aligned with the Y axis. btCylinderShapeX is aligned with the X axis and btCylinderShapeZ around the Z axis. ATTRIBUTE_ALIGNED16(class) btCylinderShape : public btConvexInternalShape { protected: int m_upAxis; public: BT_DECLARE_ALIGNED_ALLOCATOR(); btVector3 getHalfExtentsWithMargin() const { btVector3 halfExtents = getHalfExtentsWithoutMargin(); btVector3 margin(getMargin(), getMargin(), getMargin()); halfExtents += margin; return halfExtents; } const btVector3& getHalfExtentsWithoutMargin() const { return m_implicitShapeDimensions; //changed in Bullet 2.63: assume the scaling and margin are included } btCylinderShape(const btVector3& halfExtents); void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const; virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const; virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const; virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const; virtual void setMargin(btScalar collisionMargin) { //correct the m_implicitShapeDimensions for the margin btVector3 oldMargin(getMargin(), getMargin(), getMargin()); btVector3 implicitShapeDimensionsWithMargin = m_implicitShapeDimensions + oldMargin; btConvexInternalShape::setMargin(collisionMargin); btVector3 newMargin(getMargin(), getMargin(), getMargin()); m_implicitShapeDimensions = implicitShapeDimensionsWithMargin - newMargin; } virtual btVector3 localGetSupportingVertex(const btVector3& vec) const { btVector3 supVertex; supVertex = localGetSupportingVertexWithoutMargin(vec); if (getMargin() != btScalar(0.)) { btVector3 vecnorm = vec; if (vecnorm.length2() < (SIMD_EPSILON * SIMD_EPSILON)) { vecnorm.setValue(btScalar(-1.), btScalar(-1.), btScalar(-1.)); } vecnorm.normalize(); supVertex += getMargin() * vecnorm; } return supVertex; } //use box inertia // virtual void calculateLocalInertia(btScalar mass,btVector3& inertia) const; int getUpAxis() const { return m_upAxis; } virtual btVector3 getAnisotropicRollingFrictionDirection() const { btVector3 aniDir(0, 0, 0); aniDir[getUpAxis()] = 1; return aniDir; } virtual btScalar getRadius() const { return getHalfExtentsWithMargin().getX(); } virtual void setLocalScaling(const btVector3& scaling) { btVector3 oldMargin(getMargin(), getMargin(), getMargin()); btVector3 implicitShapeDimensionsWithMargin = m_implicitShapeDimensions + oldMargin; btVector3 unScaledImplicitShapeDimensionsWithMargin = implicitShapeDimensionsWithMargin / m_localScaling; btConvexInternalShape::setLocalScaling(scaling); m_implicitShapeDimensions = (unScaledImplicitShapeDimensionsWithMargin * m_localScaling) - oldMargin; } //debugging virtual const char* getName() const { return "CylinderY"; } virtual int calculateSerializeBufferSize() const; ///fills the dataBuffer and returns the struct name (and 0 on failure) virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; }; class btCylinderShapeX : public btCylinderShape { public: BT_DECLARE_ALIGNED_ALLOCATOR(); btCylinderShapeX(const btVector3& halfExtents); virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const; virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const; //debugging virtual const char* getName() const { return "CylinderX"; } virtual btScalar getRadius() const { return getHalfExtentsWithMargin().getY(); } }; class btCylinderShapeZ : public btCylinderShape { public: BT_DECLARE_ALIGNED_ALLOCATOR(); btCylinderShapeZ(const btVector3& halfExtents); virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const; virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const; //debugging virtual const char* getName() const { return "CylinderZ"; } virtual btScalar getRadius() const { return getHalfExtentsWithMargin().getX(); } }; ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 struct btCylinderShapeData { btConvexInternalShapeData m_convexInternalShapeData; int m_upAxis; char m_padding[4]; }; SIMD_FORCE_INLINE int btCylinderShape::calculateSerializeBufferSize() const { return sizeof(btCylinderShapeData); } ///fills the dataBuffer and returns the struct name (and 0 on failure) SIMD_FORCE_INLINE const char* btCylinderShape::serialize(void* dataBuffer, btSerializer* serializer) const { btCylinderShapeData* shapeData = (btCylinderShapeData*)dataBuffer; btConvexInternalShape::serialize(&shapeData->m_convexInternalShapeData, serializer); shapeData->m_upAxis = m_upAxis; // Fill padding with zeros to appease msan. shapeData->m_padding[0] = 0; shapeData->m_padding[1] = 0; shapeData->m_padding[2] = 0; shapeData->m_padding[3] = 0; return "btCylinderShapeData"; } #endif //BT_CYLINDER_MINKOWSKI_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btEmptyShape.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_EMPTY_SHAPE_H #define BT_EMPTY_SHAPE_H #include "btConcaveShape.h" #include "LinearMath/btVector3.h" #include "LinearMath/btTransform.h" #include "LinearMath/btMatrix3x3.h" #include "btCollisionMargin.h" /// The btEmptyShape is a collision shape without actual collision detection shape, so most users should ignore this class. /// It can be replaced by another shape during runtime, but the inertia tensor should be recomputed. ATTRIBUTE_ALIGNED16(class) btEmptyShape : public btConcaveShape { public: BT_DECLARE_ALIGNED_ALLOCATOR(); btEmptyShape(); virtual ~btEmptyShape(); ///getAabb's default implementation is brute force, expected derived classes to implement a fast dedicated version void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const; virtual void setLocalScaling(const btVector3& scaling) { m_localScaling = scaling; } virtual const btVector3& getLocalScaling() const { return m_localScaling; } virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const; virtual const char* getName() const { return "Empty"; } virtual void processAllTriangles(btTriangleCallback*, const btVector3&, const btVector3&) const { } protected: btVector3 m_localScaling; }; #endif //BT_EMPTY_SHAPE_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_HEIGHTFIELD_TERRAIN_SHAPE_H #define BT_HEIGHTFIELD_TERRAIN_SHAPE_H #include "btConcaveShape.h" #include "LinearMath/btAlignedObjectArray.h" ///btHeightfieldTerrainShape simulates a 2D heightfield terrain /** The caller is responsible for maintaining the heightfield array; this class does not make a copy. The heightfield can be dynamic so long as the min/max height values capture the extremes (heights must always be in that range). The local origin of the heightfield is assumed to be the exact center (as determined by width and length and height, with each axis multiplied by the localScaling). \b NOTE: be careful with coordinates. If you have a heightfield with a local min height of -100m, and a max height of +500m, you may be tempted to place it at the origin (0,0) and expect the heights in world coordinates to be -100 to +500 meters. Actually, the heights will be -300 to +300m, because bullet will re-center the heightfield based on its AABB (which is determined by the min/max heights). So keep in mind that once you create a btHeightfieldTerrainShape object, the heights will be adjusted relative to the center of the AABB. This is different to the behavior of many rendering engines, but is useful for physics engines. Most (but not all) rendering and heightfield libraries assume upAxis = 1 (that is, the y-axis is "up"). This class allows any of the 3 coordinates to be "up". Make sure your choice of axis is consistent with your rendering system. The heightfield heights are determined from the data type used for the heightfieldData array. - unsigned char: height at a point is the uchar value at the grid point, multipled by heightScale. uchar isn't recommended because of its inability to deal with negative values, and low resolution (8-bit). - short: height at a point is the short int value at that grid point, multipled by heightScale. - float or dobule: height at a point is the value at that grid point. Whatever the caller specifies as minHeight and maxHeight will be honored. The class will not inspect the heightfield to discover the actual minimum or maximum heights. These values are used to determine the heightfield's axis-aligned bounding box, multiplied by localScaling. For usage and testing see the TerrainDemo. */ ATTRIBUTE_ALIGNED16(class) btHeightfieldTerrainShape : public btConcaveShape { public: struct Range { Range() {} Range(btScalar min, btScalar max) : min(min), max(max) {} bool overlaps(const Range& other) const { return !(min > other.max || max < other.min); } btScalar min; btScalar max; }; protected: btVector3 m_localAabbMin; btVector3 m_localAabbMax; btVector3 m_localOrigin; ///terrain data int m_heightStickWidth; int m_heightStickLength; btScalar m_minHeight; btScalar m_maxHeight; btScalar m_width; btScalar m_length; btScalar m_heightScale; union { const unsigned char* m_heightfieldDataUnsignedChar; const short* m_heightfieldDataShort; const float* m_heightfieldDataFloat; const double* m_heightfieldDataDouble; const void* m_heightfieldDataUnknown; }; PHY_ScalarType m_heightDataType; bool m_flipQuadEdges; bool m_useDiamondSubdivision; bool m_useZigzagSubdivision; bool m_flipTriangleWinding; int m_upAxis; btVector3 m_localScaling; // Accelerator btAlignedObjectArray m_vboundsGrid; int m_vboundsGridWidth; int m_vboundsGridLength; int m_vboundsChunkSize; btScalar m_userValue3; struct btTriangleInfoMap* m_triangleInfoMap; virtual btScalar getRawHeightFieldValue(int x, int y) const; void quantizeWithClamp(int* out, const btVector3& point, int isMax) const; /// protected initialization /** Handles the work of constructors so that public constructors can be backwards-compatible without a lot of copy/paste. */ void initialize(int heightStickWidth, int heightStickLength, const void* heightfieldData, btScalar heightScale, btScalar minHeight, btScalar maxHeight, int upAxis, PHY_ScalarType heightDataType, bool flipQuadEdges); public: BT_DECLARE_ALIGNED_ALLOCATOR(); /// preferred constructors btHeightfieldTerrainShape( int heightStickWidth, int heightStickLength, const float* heightfieldData, btScalar minHeight, btScalar maxHeight, int upAxis, bool flipQuadEdges); btHeightfieldTerrainShape( int heightStickWidth, int heightStickLength, const double* heightfieldData, btScalar minHeight, btScalar maxHeight, int upAxis, bool flipQuadEdges); btHeightfieldTerrainShape( int heightStickWidth, int heightStickLength, const short* heightfieldData, btScalar heightScale, btScalar minHeight, btScalar maxHeight, int upAxis, bool flipQuadEdges); btHeightfieldTerrainShape( int heightStickWidth, int heightStickLength, const unsigned char* heightfieldData, btScalar heightScale, btScalar minHeight, btScalar maxHeight, int upAxis, bool flipQuadEdges); /// legacy constructor /** This constructor supports a range of heightfield data types, and allows for a non-zero minimum height value. heightScale is needed for any integer-based heightfield data types. This legacy constructor considers `PHY_FLOAT` to mean `btScalar`. With `BT_USE_DOUBLE_PRECISION`, it will expect `heightfieldData` to be double-precision. */ btHeightfieldTerrainShape(int heightStickWidth, int heightStickLength, const void* heightfieldData, btScalar heightScale, btScalar minHeight, btScalar maxHeight, int upAxis, PHY_ScalarType heightDataType, bool flipQuadEdges); /// legacy constructor /** The legacy constructor assumes the heightfield has a minimum height of zero. Only unsigned char or btScalar data are supported. For legacy compatibility reasons, heightScale is calculated as maxHeight / 65535 (and is only used when useFloatData = false). */ btHeightfieldTerrainShape(int heightStickWidth, int heightStickLength, const void* heightfieldData, btScalar maxHeight, int upAxis, bool useFloatData, bool flipQuadEdges); virtual ~btHeightfieldTerrainShape(); void setUseDiamondSubdivision(bool useDiamondSubdivision = true) { m_useDiamondSubdivision = useDiamondSubdivision; } ///could help compatibility with Ogre heightfields. See https://code.google.com/p/bullet/issues/detail?id=625 void setUseZigzagSubdivision(bool useZigzagSubdivision = true) { m_useZigzagSubdivision = useZigzagSubdivision; } void setFlipTriangleWinding(bool flipTriangleWinding) { m_flipTriangleWinding = flipTriangleWinding; } virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const; virtual void processAllTriangles(btTriangleCallback * callback, const btVector3& aabbMin, const btVector3& aabbMax) const; virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const; virtual void setLocalScaling(const btVector3& scaling); virtual const btVector3& getLocalScaling() const; void getVertex(int x, int y, btVector3& vertex) const; void performRaycast(btTriangleCallback * callback, const btVector3& raySource, const btVector3& rayTarget) const; void buildAccelerator(int chunkSize = 16); void clearAccelerator(); int getUpAxis() const { return m_upAxis; } //debugging virtual const char* getName() const { return "HEIGHTFIELD"; } void setUserValue3(btScalar value) { m_userValue3 = value; } btScalar getUserValue3() const { return m_userValue3; } const struct btTriangleInfoMap* getTriangleInfoMap() const { return m_triangleInfoMap; } struct btTriangleInfoMap* getTriangleInfoMap() { return m_triangleInfoMap; } void setTriangleInfoMap(btTriangleInfoMap* map) { m_triangleInfoMap = map; } const unsigned char* getHeightfieldRawData() const { return m_heightfieldDataUnsignedChar; } }; #endif //BT_HEIGHTFIELD_TERRAIN_SHAPE_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btMaterial.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /// This file was created by Alex Silverman #ifndef BT_MATERIAL_H #define BT_MATERIAL_H // Material class to be used by btMultimaterialTriangleMeshShape to store triangle properties class btMaterial { // public members so that materials can change due to world events public: btScalar m_friction; btScalar m_restitution; int pad[2]; btMaterial() {} btMaterial(btScalar fric, btScalar rest) { m_friction = fric; m_restitution = rest; } }; #endif // BT_MATERIAL_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btMiniSDF.h ================================================ #ifndef MINISDF_H #define MINISDF_H #include "LinearMath/btVector3.h" #include "LinearMath/btAabbUtil2.h" #include "LinearMath/btAlignedObjectArray.h" struct btMultiIndex { unsigned int ijk[3]; }; struct btAlignedBox3d { btVector3 m_min; btVector3 m_max; const btVector3& min() const { return m_min; } const btVector3& max() const { return m_max; } bool contains(const btVector3& x) const { return TestPointAgainstAabb2(m_min, m_max, x); } btAlignedBox3d(const btVector3& mn, const btVector3& mx) : m_min(mn), m_max(mx) { } btAlignedBox3d() { } }; struct btShapeMatrix { double m_vec[32]; inline double& operator[](int i) { return m_vec[i]; } inline const double& operator[](int i) const { return m_vec[i]; } }; struct btShapeGradients { btVector3 m_vec[32]; void topRowsDivide(int row, double denom) { for (int i = 0; i < row; i++) { m_vec[i] /= denom; } } void bottomRowsMul(int row, double val) { for (int i = 32 - row; i < 32; i++) { m_vec[i] *= val; } } inline btScalar& operator()(int i, int j) { return m_vec[i][j]; } }; struct btCell32 { unsigned int m_cells[32]; }; struct btMiniSDF { btAlignedBox3d m_domain; unsigned int m_resolution[3]; btVector3 m_cell_size; btVector3 m_inv_cell_size; std::size_t m_n_cells; std::size_t m_n_fields; bool m_isValid; btAlignedObjectArray > m_nodes; btAlignedObjectArray > m_cells; btAlignedObjectArray > m_cell_map; btMiniSDF() : m_isValid(false) { } bool load(const char* data, int size); bool isValid() const { return m_isValid; } unsigned int multiToSingleIndex(btMultiIndex const& ijk) const; btAlignedBox3d subdomain(btMultiIndex const& ijk) const; btMultiIndex singleToMultiIndex(unsigned int l) const; btAlignedBox3d subdomain(unsigned int l) const; btShapeMatrix shape_function_(btVector3 const& xi, btShapeGradients* gradient = 0) const; bool interpolate(unsigned int field_id, double& dist, btVector3 const& x, btVector3* gradient) const; }; #endif //MINISDF_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btMinkowskiSumShape.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_MINKOWSKI_SUM_SHAPE_H #define BT_MINKOWSKI_SUM_SHAPE_H #include "btConvexInternalShape.h" #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" // for the types /// The btMinkowskiSumShape is only for advanced users. This shape represents implicit based minkowski sum of two convex implicit shapes. ATTRIBUTE_ALIGNED16(class) btMinkowskiSumShape : public btConvexInternalShape { btTransform m_transA; btTransform m_transB; const btConvexShape* m_shapeA; const btConvexShape* m_shapeB; public: BT_DECLARE_ALIGNED_ALLOCATOR(); btMinkowskiSumShape(const btConvexShape* shapeA, const btConvexShape* shapeB); virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const; virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const; virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const; void setTransformA(const btTransform& transA) { m_transA = transA; } void setTransformB(const btTransform& transB) { m_transB = transB; } const btTransform& getTransformA() const { return m_transA; } const btTransform& GetTransformB() const { return m_transB; } virtual btScalar getMargin() const; const btConvexShape* getShapeA() const { return m_shapeA; } const btConvexShape* getShapeB() const { return m_shapeB; } virtual const char* getName() const { return "MinkowskiSum"; } }; #endif //BT_MINKOWSKI_SUM_SHAPE_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btMultiSphereShape.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_MULTI_SPHERE_MINKOWSKI_H #define BT_MULTI_SPHERE_MINKOWSKI_H #include "btConvexInternalShape.h" #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" // for the types #include "LinearMath/btAlignedObjectArray.h" #include "LinearMath/btAabbUtil2.h" ///The btMultiSphereShape represents the convex hull of a collection of spheres. You can create special capsules or other smooth volumes. ///It is possible to animate the spheres for deformation, but call 'recalcLocalAabb' after changing any sphere position/radius ATTRIBUTE_ALIGNED16(class) btMultiSphereShape : public btConvexInternalAabbCachingShape { btAlignedObjectArray m_localPositionArray; btAlignedObjectArray m_radiArray; public: BT_DECLARE_ALIGNED_ALLOCATOR(); btMultiSphereShape(const btVector3* positions, const btScalar* radi, int numSpheres); ///CollisionShape Interface virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const; /// btConvexShape Interface virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const; virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const; int getSphereCount() const { return m_localPositionArray.size(); } const btVector3& getSpherePosition(int index) const { return m_localPositionArray[index]; } btScalar getSphereRadius(int index) const { return m_radiArray[index]; } virtual const char* getName() const { return "MultiSphere"; } virtual int calculateSerializeBufferSize() const; ///fills the dataBuffer and returns the struct name (and 0 on failure) virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; }; struct btPositionAndRadius { btVector3FloatData m_pos; float m_radius; }; // clang-format off struct btMultiSphereShapeData { btConvexInternalShapeData m_convexInternalShapeData; btPositionAndRadius *m_localPositionArrayPtr; int m_localPositionArraySize; char m_padding[4]; }; // clang-format on SIMD_FORCE_INLINE int btMultiSphereShape::calculateSerializeBufferSize() const { return sizeof(btMultiSphereShapeData); } #endif //BT_MULTI_SPHERE_MINKOWSKI_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btMultimaterialTriangleMeshShape.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /// This file was created by Alex Silverman #ifndef BT_BVH_TRIANGLE_MATERIAL_MESH_SHAPE_H #define BT_BVH_TRIANGLE_MATERIAL_MESH_SHAPE_H #include "btBvhTriangleMeshShape.h" #include "btMaterial.h" ///The BvhTriangleMaterialMeshShape extends the btBvhTriangleMeshShape. Its main contribution is the interface into a material array, which allows per-triangle friction and restitution. ATTRIBUTE_ALIGNED16(class) btMultimaterialTriangleMeshShape : public btBvhTriangleMeshShape { btAlignedObjectArray m_materialList; public: BT_DECLARE_ALIGNED_ALLOCATOR(); btMultimaterialTriangleMeshShape(btStridingMeshInterface * meshInterface, bool useQuantizedAabbCompression, bool buildBvh = true) : btBvhTriangleMeshShape(meshInterface, useQuantizedAabbCompression, buildBvh) { m_shapeType = MULTIMATERIAL_TRIANGLE_MESH_PROXYTYPE; const unsigned char *vertexbase; int numverts; PHY_ScalarType type; int stride; const unsigned char *indexbase; int indexstride; int numfaces; PHY_ScalarType indicestype; //m_materialLookup = (int**)(btAlignedAlloc(sizeof(int*) * meshInterface->getNumSubParts(), 16)); for (int i = 0; i < meshInterface->getNumSubParts(); i++) { m_meshInterface->getLockedReadOnlyVertexIndexBase( &vertexbase, numverts, type, stride, &indexbase, indexstride, numfaces, indicestype, i); //m_materialLookup[i] = (int*)(btAlignedAlloc(sizeof(int) * numfaces, 16)); } } ///optionally pass in a larger bvh aabb, used for quantization. This allows for deformations within this aabb btMultimaterialTriangleMeshShape(btStridingMeshInterface * meshInterface, bool useQuantizedAabbCompression, const btVector3 &bvhAabbMin, const btVector3 &bvhAabbMax, bool buildBvh = true) : btBvhTriangleMeshShape(meshInterface, useQuantizedAabbCompression, bvhAabbMin, bvhAabbMax, buildBvh) { m_shapeType = MULTIMATERIAL_TRIANGLE_MESH_PROXYTYPE; const unsigned char *vertexbase; int numverts; PHY_ScalarType type; int stride; const unsigned char *indexbase; int indexstride; int numfaces; PHY_ScalarType indicestype; //m_materialLookup = (int**)(btAlignedAlloc(sizeof(int*) * meshInterface->getNumSubParts(), 16)); for (int i = 0; i < meshInterface->getNumSubParts(); i++) { m_meshInterface->getLockedReadOnlyVertexIndexBase( &vertexbase, numverts, type, stride, &indexbase, indexstride, numfaces, indicestype, i); //m_materialLookup[i] = (int*)(btAlignedAlloc(sizeof(int) * numfaces * 2, 16)); } } virtual ~btMultimaterialTriangleMeshShape() { /* for(int i = 0; i < m_meshInterface->getNumSubParts(); i++) { btAlignedFree(m_materialValues[i]); m_materialLookup[i] = NULL; } btAlignedFree(m_materialValues); m_materialLookup = NULL; */ } //debugging virtual const char *getName() const { return "MULTIMATERIALTRIANGLEMESH"; } ///Obtains the material for a specific triangle const btMaterial *getMaterialProperties(int partID, int triIndex); }; #endif //BT_BVH_TRIANGLE_MATERIAL_MESH_SHAPE_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btOptimizedBvh.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ ///Contains contributions from Disney Studio's #ifndef BT_OPTIMIZED_BVH_H #define BT_OPTIMIZED_BVH_H #include "BulletCollision/BroadphaseCollision/btQuantizedBvh.h" class btStridingMeshInterface; ///The btOptimizedBvh extends the btQuantizedBvh to create AABB tree for triangle meshes, through the btStridingMeshInterface. ATTRIBUTE_ALIGNED16(class) btOptimizedBvh : public btQuantizedBvh { public: BT_DECLARE_ALIGNED_ALLOCATOR(); protected: public: btOptimizedBvh(); virtual ~btOptimizedBvh(); void build(btStridingMeshInterface * triangles, bool useQuantizedAabbCompression, const btVector3& bvhAabbMin, const btVector3& bvhAabbMax); void refit(btStridingMeshInterface * triangles, const btVector3& aabbMin, const btVector3& aabbMax); void refitPartial(btStridingMeshInterface * triangles, const btVector3& aabbMin, const btVector3& aabbMax); void updateBvhNodes(btStridingMeshInterface * meshInterface, int firstNode, int endNode, int index); /// Data buffer MUST be 16 byte aligned virtual bool serializeInPlace(void* o_alignedDataBuffer, unsigned i_dataBufferSize, bool i_swapEndian) const { return btQuantizedBvh::serialize(o_alignedDataBuffer, i_dataBufferSize, i_swapEndian); } ///deSerializeInPlace loads and initializes a BVH from a buffer in memory 'in place' static btOptimizedBvh* deSerializeInPlace(void* i_alignedDataBuffer, unsigned int i_dataBufferSize, bool i_swapEndian); }; #endif //BT_OPTIMIZED_BVH_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btPolyhedralConvexShape.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_POLYHEDRAL_CONVEX_SHAPE_H #define BT_POLYHEDRAL_CONVEX_SHAPE_H #include "LinearMath/btMatrix3x3.h" #include "btConvexInternalShape.h" class btConvexPolyhedron; ///The btPolyhedralConvexShape is an internal interface class for polyhedral convex shapes. ATTRIBUTE_ALIGNED16(class) btPolyhedralConvexShape : public btConvexInternalShape { protected: btConvexPolyhedron* m_polyhedron; public: BT_DECLARE_ALIGNED_ALLOCATOR(); btPolyhedralConvexShape(); virtual ~btPolyhedralConvexShape(); ///optional method mainly used to generate multiple contact points by clipping polyhedral features (faces/edges) ///experimental/work-in-progress virtual bool initializePolyhedralFeatures(int shiftVerticesByMargin = 0); virtual void setPolyhedralFeatures(btConvexPolyhedron & polyhedron); const btConvexPolyhedron* getConvexPolyhedron() const { return m_polyhedron; } //brute force implementations virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const; virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const; virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const; virtual int getNumVertices() const = 0; virtual int getNumEdges() const = 0; virtual void getEdge(int i, btVector3& pa, btVector3& pb) const = 0; virtual void getVertex(int i, btVector3& vtx) const = 0; virtual int getNumPlanes() const = 0; virtual void getPlane(btVector3 & planeNormal, btVector3 & planeSupport, int i) const = 0; // virtual int getIndex(int i) const = 0 ; virtual bool isInside(const btVector3& pt, btScalar tolerance) const = 0; }; ///The btPolyhedralConvexAabbCachingShape adds aabb caching to the btPolyhedralConvexShape class btPolyhedralConvexAabbCachingShape : public btPolyhedralConvexShape { btVector3 m_localAabbMin; btVector3 m_localAabbMax; bool m_isLocalAabbValid; protected: void setCachedLocalAabb(const btVector3& aabbMin, const btVector3& aabbMax) { m_isLocalAabbValid = true; m_localAabbMin = aabbMin; m_localAabbMax = aabbMax; } inline void getCachedLocalAabb(btVector3& aabbMin, btVector3& aabbMax) const { btAssert(m_isLocalAabbValid); aabbMin = m_localAabbMin; aabbMax = m_localAabbMax; } protected: btPolyhedralConvexAabbCachingShape(); public: inline void getNonvirtualAabb(const btTransform& trans, btVector3& aabbMin, btVector3& aabbMax, btScalar margin) const { //lazy evaluation of local aabb btAssert(m_isLocalAabbValid); btTransformAabb(m_localAabbMin, m_localAabbMax, margin, trans, aabbMin, aabbMax); } virtual void setLocalScaling(const btVector3& scaling); virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const; void recalcLocalAabb(); }; #endif //BT_POLYHEDRAL_CONVEX_SHAPE_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_SCALED_BVH_TRIANGLE_MESH_SHAPE_H #define BT_SCALED_BVH_TRIANGLE_MESH_SHAPE_H #include "BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h" ///The btScaledBvhTriangleMeshShape allows to instance a scaled version of an existing btBvhTriangleMeshShape. ///Note that each btBvhTriangleMeshShape still can have its own local scaling, independent from this btScaledBvhTriangleMeshShape 'localScaling' ATTRIBUTE_ALIGNED16(class) btScaledBvhTriangleMeshShape : public btConcaveShape { btVector3 m_localScaling; btBvhTriangleMeshShape* m_bvhTriMeshShape; public: BT_DECLARE_ALIGNED_ALLOCATOR(); btScaledBvhTriangleMeshShape(btBvhTriangleMeshShape * childShape, const btVector3& localScaling); virtual ~btScaledBvhTriangleMeshShape(); virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const; virtual void setLocalScaling(const btVector3& scaling); virtual const btVector3& getLocalScaling() const; virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const; virtual void processAllTriangles(btTriangleCallback * callback, const btVector3& aabbMin, const btVector3& aabbMax) const; btBvhTriangleMeshShape* getChildShape() { return m_bvhTriMeshShape; } const btBvhTriangleMeshShape* getChildShape() const { return m_bvhTriMeshShape; } //debugging virtual const char* getName() const { return "SCALEDBVHTRIANGLEMESH"; } virtual int calculateSerializeBufferSize() const; ///fills the dataBuffer and returns the struct name (and 0 on failure) virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; }; ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 struct btScaledTriangleMeshShapeData { btTriangleMeshShapeData m_trimeshShapeData; btVector3FloatData m_localScaling; }; SIMD_FORCE_INLINE int btScaledBvhTriangleMeshShape::calculateSerializeBufferSize() const { return sizeof(btScaledTriangleMeshShapeData); } ///fills the dataBuffer and returns the struct name (and 0 on failure) SIMD_FORCE_INLINE const char* btScaledBvhTriangleMeshShape::serialize(void* dataBuffer, btSerializer* serializer) const { btScaledTriangleMeshShapeData* scaledMeshData = (btScaledTriangleMeshShapeData*)dataBuffer; m_bvhTriMeshShape->serialize(&scaledMeshData->m_trimeshShapeData, serializer); scaledMeshData->m_trimeshShapeData.m_collisionShapeData.m_shapeType = SCALED_TRIANGLE_MESH_SHAPE_PROXYTYPE; m_localScaling.serializeFloat(scaledMeshData->m_localScaling); return "btScaledTriangleMeshShapeData"; } #endif //BT_SCALED_BVH_TRIANGLE_MESH_SHAPE_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btSdfCollisionShape.h ================================================ #ifndef BT_SDF_COLLISION_SHAPE_H #define BT_SDF_COLLISION_SHAPE_H #include "btConcaveShape.h" class btSdfCollisionShape : public btConcaveShape { struct btSdfCollisionShapeInternalData* m_data; public: btSdfCollisionShape(); virtual ~btSdfCollisionShape(); bool initializeSDF(const char* sdfData, int sizeInBytes); virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const; virtual void setLocalScaling(const btVector3& scaling); virtual const btVector3& getLocalScaling() const; virtual void calculateLocalInertia(btScalar mass, btVector3& inertia) const; virtual const char* getName() const; virtual void setMargin(btScalar margin); virtual btScalar getMargin() const; virtual void processAllTriangles(btTriangleCallback* callback, const btVector3& aabbMin, const btVector3& aabbMax) const; bool queryPoint(const btVector3& ptInSDF, btScalar& distOut, btVector3& normal); }; #endif //BT_SDF_COLLISION_SHAPE_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btShapeHull.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ ///btShapeHull implemented by John McCutchan. #ifndef BT_SHAPE_HULL_H #define BT_SHAPE_HULL_H #include "LinearMath/btAlignedObjectArray.h" #include "BulletCollision/CollisionShapes/btConvexShape.h" ///The btShapeHull class takes a btConvexShape, builds a simplified convex hull using btConvexHull and provides triangle indices and vertices. ///It can be useful for to simplify a complex convex object and for visualization of a non-polyhedral convex object. ///It approximates the convex hull using the supporting vertex of 42 directions. ATTRIBUTE_ALIGNED16(class) btShapeHull { protected: btAlignedObjectArray m_vertices; btAlignedObjectArray m_indices; unsigned int m_numIndices; const btConvexShape* m_shape; static btVector3* getUnitSpherePoints(int highres = 0); public: BT_DECLARE_ALIGNED_ALLOCATOR(); btShapeHull(const btConvexShape* shape); ~btShapeHull(); bool buildHull(btScalar margin, int highres = 0); int numTriangles() const; int numVertices() const; int numIndices() const; const btVector3* getVertexPointer() const { return &m_vertices[0]; } const unsigned int* getIndexPointer() const { return &m_indices[0]; } }; #endif //BT_SHAPE_HULL_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btSphereShape.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_SPHERE_MINKOWSKI_H #define BT_SPHERE_MINKOWSKI_H #include "btConvexInternalShape.h" #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" // for the types ///The btSphereShape implements an implicit sphere, centered around a local origin with radius. ATTRIBUTE_ALIGNED16(class) btSphereShape : public btConvexInternalShape { public: BT_DECLARE_ALIGNED_ALLOCATOR(); btSphereShape(btScalar radius) : btConvexInternalShape() { m_shapeType = SPHERE_SHAPE_PROXYTYPE; m_localScaling.setValue(1.0, 1.0, 1.0); m_implicitShapeDimensions.setZero(); m_implicitShapeDimensions.setX(radius); m_collisionMargin = radius; m_padding = 0; } virtual btVector3 localGetSupportingVertex(const btVector3& vec) const; virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const; //notice that the vectors should be unit length virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const; virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const; virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const; btScalar getRadius() const { return m_implicitShapeDimensions.getX() * m_localScaling.getX(); } void setUnscaledRadius(btScalar radius) { m_implicitShapeDimensions.setX(radius); btConvexInternalShape::setMargin(radius); } //debugging virtual const char* getName() const { return "SPHERE"; } virtual void setMargin(btScalar margin) { btConvexInternalShape::setMargin(margin); } virtual btScalar getMargin() const { //to improve gjk behaviour, use radius+margin as the full margin, so never get into the penetration case //this means, non-uniform scaling is not supported anymore return getRadius(); } }; #endif //BT_SPHERE_MINKOWSKI_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btStaticPlaneShape.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_STATIC_PLANE_SHAPE_H #define BT_STATIC_PLANE_SHAPE_H #include "btConcaveShape.h" ///The btStaticPlaneShape simulates an infinite non-moving (static) collision plane. ATTRIBUTE_ALIGNED16(class) btStaticPlaneShape : public btConcaveShape { protected: btVector3 m_localAabbMin; btVector3 m_localAabbMax; btVector3 m_planeNormal; btScalar m_planeConstant; btVector3 m_localScaling; public: BT_DECLARE_ALIGNED_ALLOCATOR(); btStaticPlaneShape(const btVector3& planeNormal, btScalar planeConstant); virtual ~btStaticPlaneShape(); virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const; virtual void processAllTriangles(btTriangleCallback * callback, const btVector3& aabbMin, const btVector3& aabbMax) const; virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const; virtual void setLocalScaling(const btVector3& scaling); virtual const btVector3& getLocalScaling() const; const btVector3& getPlaneNormal() const { return m_planeNormal; } const btScalar& getPlaneConstant() const { return m_planeConstant; } //debugging virtual const char* getName() const { return "STATICPLANE"; } virtual int calculateSerializeBufferSize() const; ///fills the dataBuffer and returns the struct name (and 0 on failure) virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; }; ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 struct btStaticPlaneShapeData { btCollisionShapeData m_collisionShapeData; btVector3FloatData m_localScaling; btVector3FloatData m_planeNormal; float m_planeConstant; char m_pad[4]; }; SIMD_FORCE_INLINE int btStaticPlaneShape::calculateSerializeBufferSize() const { return sizeof(btStaticPlaneShapeData); } ///fills the dataBuffer and returns the struct name (and 0 on failure) SIMD_FORCE_INLINE const char* btStaticPlaneShape::serialize(void* dataBuffer, btSerializer* serializer) const { btStaticPlaneShapeData* planeData = (btStaticPlaneShapeData*)dataBuffer; btCollisionShape::serialize(&planeData->m_collisionShapeData, serializer); m_localScaling.serializeFloat(planeData->m_localScaling); m_planeNormal.serializeFloat(planeData->m_planeNormal); planeData->m_planeConstant = float(m_planeConstant); // Fill padding with zeros to appease msan. planeData->m_pad[0] = 0; planeData->m_pad[1] = 0; planeData->m_pad[2] = 0; planeData->m_pad[3] = 0; return "btStaticPlaneShapeData"; } #endif //BT_STATIC_PLANE_SHAPE_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btStridingMeshInterface.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_STRIDING_MESHINTERFACE_H #define BT_STRIDING_MESHINTERFACE_H #include "LinearMath/btVector3.h" #include "btTriangleCallback.h" #include "btConcaveShape.h" /// The btStridingMeshInterface is the interface class for high performance generic access to triangle meshes, used in combination with btBvhTriangleMeshShape and some other collision shapes. /// Using index striding of 3*sizeof(integer) it can use triangle arrays, using index striding of 1*sizeof(integer) it can handle triangle strips. /// It allows for sharing graphics and collision meshes. Also it provides locking/unlocking of graphics meshes that are in gpu memory. ATTRIBUTE_ALIGNED16(class) btStridingMeshInterface { protected: btVector3 m_scaling; public: BT_DECLARE_ALIGNED_ALLOCATOR(); btStridingMeshInterface() : m_scaling(btScalar(1.), btScalar(1.), btScalar(1.)) { } virtual ~btStridingMeshInterface(); virtual void InternalProcessAllTriangles(btInternalTriangleIndexCallback * callback, const btVector3& aabbMin, const btVector3& aabbMax) const; ///brute force method to calculate aabb void calculateAabbBruteForce(btVector3 & aabbMin, btVector3 & aabbMax); /// get read and write access to a subpart of a triangle mesh /// this subpart has a continuous array of vertices and indices /// in this way the mesh can be handled as chunks of memory with striding /// very similar to OpenGL vertexarray support /// make a call to unLockVertexBase when the read and write access is finished virtual void getLockedVertexIndexBase(unsigned char** vertexbase, int& numverts, PHY_ScalarType& type, int& stride, unsigned char** indexbase, int& indexstride, int& numfaces, PHY_ScalarType& indicestype, int subpart = 0) = 0; virtual void getLockedReadOnlyVertexIndexBase(const unsigned char** vertexbase, int& numverts, PHY_ScalarType& type, int& stride, const unsigned char** indexbase, int& indexstride, int& numfaces, PHY_ScalarType& indicestype, int subpart = 0) const = 0; /// unLockVertexBase finishes the access to a subpart of the triangle mesh /// make a call to unLockVertexBase when the read and write access (using getLockedVertexIndexBase) is finished virtual void unLockVertexBase(int subpart) = 0; virtual void unLockReadOnlyVertexBase(int subpart) const = 0; /// getNumSubParts returns the number of separate subparts /// each subpart has a continuous array of vertices and indices virtual int getNumSubParts() const = 0; virtual void preallocateVertices(int numverts) = 0; virtual void preallocateIndices(int numindices) = 0; virtual bool hasPremadeAabb() const { return false; } virtual void setPremadeAabb(const btVector3& aabbMin, const btVector3& aabbMax) const { (void)aabbMin; (void)aabbMax; } virtual void getPremadeAabb(btVector3 * aabbMin, btVector3 * aabbMax) const { (void)aabbMin; (void)aabbMax; } const btVector3& getScaling() const { return m_scaling; } void setScaling(const btVector3& scaling) { m_scaling = scaling; } virtual int calculateSerializeBufferSize() const; ///fills the dataBuffer and returns the struct name (and 0 on failure) virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; }; struct btIntIndexData { int m_value; }; struct btShortIntIndexData { short m_value; char m_pad[2]; }; struct btShortIntIndexTripletData { short m_values[3]; char m_pad[2]; }; struct btCharIndexTripletData { unsigned char m_values[3]; char m_pad; }; // clang-format off ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 struct btMeshPartData { btVector3FloatData *m_vertices3f; btVector3DoubleData *m_vertices3d; btIntIndexData *m_indices32; btShortIntIndexTripletData *m_3indices16; btCharIndexTripletData *m_3indices8; btShortIntIndexData *m_indices16;//backwards compatibility int m_numTriangles;//length of m_indices = m_numTriangles int m_numVertices; }; ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 struct btStridingMeshInterfaceData { btMeshPartData *m_meshPartsPtr; btVector3FloatData m_scaling; int m_numMeshParts; char m_padding[4]; }; // clang-format on SIMD_FORCE_INLINE int btStridingMeshInterface::calculateSerializeBufferSize() const { return sizeof(btStridingMeshInterfaceData); } #endif //BT_STRIDING_MESHINTERFACE_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btTetrahedronShape.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_SIMPLEX_1TO4_SHAPE #define BT_SIMPLEX_1TO4_SHAPE #include "btPolyhedralConvexShape.h" #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" ///The btBU_Simplex1to4 implements tetrahedron, triangle, line, vertex collision shapes. In most cases it is better to use btConvexHullShape instead. ATTRIBUTE_ALIGNED16(class) btBU_Simplex1to4 : public btPolyhedralConvexAabbCachingShape { protected: int m_numVertices; btVector3 m_vertices[4]; public: BT_DECLARE_ALIGNED_ALLOCATOR(); btBU_Simplex1to4(); btBU_Simplex1to4(const btVector3& pt0); btBU_Simplex1to4(const btVector3& pt0, const btVector3& pt1); btBU_Simplex1to4(const btVector3& pt0, const btVector3& pt1, const btVector3& pt2); btBU_Simplex1to4(const btVector3& pt0, const btVector3& pt1, const btVector3& pt2, const btVector3& pt3); void reset() { m_numVertices = 0; } virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const; void addVertex(const btVector3& pt); //PolyhedralConvexShape interface virtual int getNumVertices() const; virtual int getNumEdges() const; virtual void getEdge(int i, btVector3& pa, btVector3& pb) const; virtual void getVertex(int i, btVector3& vtx) const; virtual int getNumPlanes() const; virtual void getPlane(btVector3 & planeNormal, btVector3 & planeSupport, int i) const; virtual int getIndex(int i) const; virtual bool isInside(const btVector3& pt, btScalar tolerance) const; ///getName is for debugging virtual const char* getName() const { return "btBU_Simplex1to4"; } }; #endif //BT_SIMPLEX_1TO4_SHAPE ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btTriangleBuffer.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_TRIANGLE_BUFFER_H #define BT_TRIANGLE_BUFFER_H #include "btTriangleCallback.h" #include "LinearMath/btAlignedObjectArray.h" struct btTriangle { btVector3 m_vertex0; btVector3 m_vertex1; btVector3 m_vertex2; int m_partId; int m_triangleIndex; }; ///The btTriangleBuffer callback can be useful to collect and store overlapping triangles between AABB and concave objects that support 'processAllTriangles' ///Example usage of this class: /// btTriangleBuffer triBuf; /// concaveShape->processAllTriangles(&triBuf,aabbMin, aabbMax); /// for (int i=0;i m_triangleBuffer; public: virtual void processTriangle(btVector3* triangle, int partId, int triangleIndex); int getNumTriangles() const { return int(m_triangleBuffer.size()); } const btTriangle& getTriangle(int index) const { return m_triangleBuffer[index]; } void clearBuffer() { m_triangleBuffer.clear(); } }; #endif //BT_TRIANGLE_BUFFER_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btTriangleCallback.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_TRIANGLE_CALLBACK_H #define BT_TRIANGLE_CALLBACK_H #include "LinearMath/btVector3.h" ///The btTriangleCallback provides a callback for each overlapping triangle when calling processAllTriangles. ///This callback is called by processAllTriangles for all btConcaveShape derived class, such as btBvhTriangleMeshShape, btStaticPlaneShape and btHeightfieldTerrainShape. class btTriangleCallback { public: virtual ~btTriangleCallback(); virtual void processTriangle(btVector3* triangle, int partId, int triangleIndex) = 0; }; class btInternalTriangleIndexCallback { public: virtual ~btInternalTriangleIndexCallback(); virtual void internalProcessTriangleIndex(btVector3* triangle, int partId, int triangleIndex) = 0; }; #endif //BT_TRIANGLE_CALLBACK_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btTriangleIndexVertexArray.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_TRIANGLE_INDEX_VERTEX_ARRAY_H #define BT_TRIANGLE_INDEX_VERTEX_ARRAY_H #include "btStridingMeshInterface.h" #include "LinearMath/btAlignedObjectArray.h" #include "LinearMath/btScalar.h" ///The btIndexedMesh indexes a single vertex and index array. Multiple btIndexedMesh objects can be passed into a btTriangleIndexVertexArray using addIndexedMesh. ///Instead of the number of indices, we pass the number of triangles. ATTRIBUTE_ALIGNED16(struct) btIndexedMesh { BT_DECLARE_ALIGNED_ALLOCATOR(); int m_numTriangles; const unsigned char* m_triangleIndexBase; // Size in byte of the indices for one triangle (3*sizeof(index_type) if the indices are tightly packed) int m_triangleIndexStride; int m_numVertices; const unsigned char* m_vertexBase; // Size of a vertex, in bytes int m_vertexStride; // The index type is set when adding an indexed mesh to the // btTriangleIndexVertexArray, do not set it manually PHY_ScalarType m_indexType; // The vertex type has a default type similar to Bullet's precision mode (float or double) // but can be set manually if you for example run Bullet with double precision but have // mesh data in single precision.. PHY_ScalarType m_vertexType; btIndexedMesh() : m_indexType(PHY_INTEGER), #ifdef BT_USE_DOUBLE_PRECISION m_vertexType(PHY_DOUBLE) #else // BT_USE_DOUBLE_PRECISION m_vertexType(PHY_FLOAT) #endif // BT_USE_DOUBLE_PRECISION { } }; typedef btAlignedObjectArray IndexedMeshArray; ///The btTriangleIndexVertexArray allows to access multiple triangle meshes, by indexing into existing triangle/index arrays. ///Additional meshes can be added using addIndexedMesh ///No duplicate is made of the vertex/index data, it only indexes into external vertex/index arrays. ///So keep those arrays around during the lifetime of this btTriangleIndexVertexArray. ATTRIBUTE_ALIGNED16(class) btTriangleIndexVertexArray : public btStridingMeshInterface { protected: IndexedMeshArray m_indexedMeshes; int m_pad[2]; mutable int m_hasAabb; // using int instead of bool to maintain alignment mutable btVector3 m_aabbMin; mutable btVector3 m_aabbMax; public: BT_DECLARE_ALIGNED_ALLOCATOR(); btTriangleIndexVertexArray() : m_hasAabb(0) { } virtual ~btTriangleIndexVertexArray(); //just to be backwards compatible btTriangleIndexVertexArray(int numTriangles, int* triangleIndexBase, int triangleIndexStride, int numVertices, btScalar* vertexBase, int vertexStride); void addIndexedMesh(const btIndexedMesh& mesh, PHY_ScalarType indexType = PHY_INTEGER) { m_indexedMeshes.push_back(mesh); m_indexedMeshes[m_indexedMeshes.size() - 1].m_indexType = indexType; } virtual void getLockedVertexIndexBase(unsigned char** vertexbase, int& numverts, PHY_ScalarType& type, int& vertexStride, unsigned char** indexbase, int& indexstride, int& numfaces, PHY_ScalarType& indicestype, int subpart = 0); virtual void getLockedReadOnlyVertexIndexBase(const unsigned char** vertexbase, int& numverts, PHY_ScalarType& type, int& vertexStride, const unsigned char** indexbase, int& indexstride, int& numfaces, PHY_ScalarType& indicestype, int subpart = 0) const; /// unLockVertexBase finishes the access to a subpart of the triangle mesh /// make a call to unLockVertexBase when the read and write access (using getLockedVertexIndexBase) is finished virtual void unLockVertexBase(int subpart) { (void)subpart; } virtual void unLockReadOnlyVertexBase(int subpart) const { (void)subpart; } /// getNumSubParts returns the number of separate subparts /// each subpart has a continuous array of vertices and indices virtual int getNumSubParts() const { return (int)m_indexedMeshes.size(); } IndexedMeshArray& getIndexedMeshArray() { return m_indexedMeshes; } const IndexedMeshArray& getIndexedMeshArray() const { return m_indexedMeshes; } virtual void preallocateVertices(int numverts) { (void)numverts; } virtual void preallocateIndices(int numindices) { (void)numindices; } virtual bool hasPremadeAabb() const; virtual void setPremadeAabb(const btVector3& aabbMin, const btVector3& aabbMax) const; virtual void getPremadeAabb(btVector3 * aabbMin, btVector3 * aabbMax) const; }; #endif //BT_TRIANGLE_INDEX_VERTEX_ARRAY_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btTriangleIndexVertexMaterialArray.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ ///This file was created by Alex Silverman #ifndef BT_MULTIMATERIAL_TRIANGLE_INDEX_VERTEX_ARRAY_H #define BT_MULTIMATERIAL_TRIANGLE_INDEX_VERTEX_ARRAY_H #include "btTriangleIndexVertexArray.h" ATTRIBUTE_ALIGNED16(struct) btMaterialProperties { ///m_materialBase ==========> 2 btScalar values make up one material, friction then restitution int m_numMaterials; const unsigned char* m_materialBase; int m_materialStride; PHY_ScalarType m_materialType; ///m_numTriangles <=========== This exists in the btIndexedMesh object for the same subpart, but since we're /// padding the structure, it can be reproduced at no real cost ///m_triangleMaterials =====> 1 integer value makes up one entry /// eg: m_triangleMaterials[1] = 5; // This will set triangle 2 to use material 5 int m_numTriangles; const unsigned char* m_triangleMaterialsBase; int m_triangleMaterialStride; ///m_triangleType <========== Automatically set in addMaterialProperties PHY_ScalarType m_triangleType; }; typedef btAlignedObjectArray MaterialArray; ///Teh btTriangleIndexVertexMaterialArray is built on TriangleIndexVertexArray ///The addition of a material array allows for the utilization of the partID and ///triangleIndex that are returned in the ContactAddedCallback. As with ///TriangleIndexVertexArray, no duplicate is made of the material data, so it ///is the users responsibility to maintain the array during the lifetime of the ///TriangleIndexVertexMaterialArray. ATTRIBUTE_ALIGNED16(class) btTriangleIndexVertexMaterialArray : public btTriangleIndexVertexArray { protected: MaterialArray m_materials; public: BT_DECLARE_ALIGNED_ALLOCATOR(); btTriangleIndexVertexMaterialArray() { } btTriangleIndexVertexMaterialArray(int numTriangles, int* triangleIndexBase, int triangleIndexStride, int numVertices, btScalar* vertexBase, int vertexStride, int numMaterials, unsigned char* materialBase, int materialStride, int* triangleMaterialsBase, int materialIndexStride); virtual ~btTriangleIndexVertexMaterialArray() {} void addMaterialProperties(const btMaterialProperties& mat, PHY_ScalarType triangleType = PHY_INTEGER) { m_materials.push_back(mat); m_materials[m_materials.size() - 1].m_triangleType = triangleType; } virtual void getLockedMaterialBase(unsigned char** materialBase, int& numMaterials, PHY_ScalarType& materialType, int& materialStride, unsigned char** triangleMaterialBase, int& numTriangles, int& triangleMaterialStride, PHY_ScalarType& triangleType, int subpart = 0); virtual void getLockedReadOnlyMaterialBase(const unsigned char** materialBase, int& numMaterials, PHY_ScalarType& materialType, int& materialStride, const unsigned char** triangleMaterialBase, int& numTriangles, int& triangleMaterialStride, PHY_ScalarType& triangleType, int subpart = 0); }; #endif //BT_MULTIMATERIAL_TRIANGLE_INDEX_VERTEX_ARRAY_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btTriangleInfoMap.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2010 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef _BT_TRIANGLE_INFO_MAP_H #define _BT_TRIANGLE_INFO_MAP_H #include "LinearMath/btHashMap.h" #include "LinearMath/btSerializer.h" ///for btTriangleInfo m_flags #define TRI_INFO_V0V1_CONVEX 1 #define TRI_INFO_V1V2_CONVEX 2 #define TRI_INFO_V2V0_CONVEX 4 #define TRI_INFO_V0V1_SWAP_NORMALB 8 #define TRI_INFO_V1V2_SWAP_NORMALB 16 #define TRI_INFO_V2V0_SWAP_NORMALB 32 ///The btTriangleInfo structure stores information to adjust collision normals to avoid collisions against internal edges ///it can be generated using struct btTriangleInfo { btTriangleInfo() { m_edgeV0V1Angle = SIMD_2_PI; m_edgeV1V2Angle = SIMD_2_PI; m_edgeV2V0Angle = SIMD_2_PI; m_flags = 0; } int m_flags; btScalar m_edgeV0V1Angle; btScalar m_edgeV1V2Angle; btScalar m_edgeV2V0Angle; }; typedef btHashMap btInternalTriangleInfoMap; ///The btTriangleInfoMap stores edge angle information for some triangles. You can compute this information yourself or using btGenerateInternalEdgeInfo. struct btTriangleInfoMap : public btInternalTriangleInfoMap { btScalar m_convexEpsilon; ///used to determine if an edge or contact normal is convex, using the dot product btScalar m_planarEpsilon; ///used to determine if a triangle edge is planar with zero angle btScalar m_equalVertexThreshold; ///used to compute connectivity: if the distance between two vertices is smaller than m_equalVertexThreshold, they are considered to be 'shared' btScalar m_edgeDistanceThreshold; ///used to determine edge contacts: if the closest distance between a contact point and an edge is smaller than this distance threshold it is considered to "hit the edge" btScalar m_maxEdgeAngleThreshold; //ignore edges that connect triangles at an angle larger than this m_maxEdgeAngleThreshold btScalar m_zeroAreaThreshold; ///used to determine if a triangle is degenerate (length squared of cross product of 2 triangle edges < threshold) btTriangleInfoMap() { m_convexEpsilon = 0.00f; m_planarEpsilon = 0.0001f; m_equalVertexThreshold = btScalar(0.0001) * btScalar(0.0001); m_edgeDistanceThreshold = btScalar(0.1); m_zeroAreaThreshold = btScalar(0.0001) * btScalar(0.0001); m_maxEdgeAngleThreshold = SIMD_2_PI; } virtual ~btTriangleInfoMap() {} virtual int calculateSerializeBufferSize() const; ///fills the dataBuffer and returns the struct name (and 0 on failure) virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; void deSerialize(struct btTriangleInfoMapData& data); }; // clang-format off ///those fields have to be float and not btScalar for the serialization to work properly struct btTriangleInfoData { int m_flags; float m_edgeV0V1Angle; float m_edgeV1V2Angle; float m_edgeV2V0Angle; }; struct btTriangleInfoMapData { int *m_hashTablePtr; int *m_nextPtr; btTriangleInfoData *m_valueArrayPtr; int *m_keyArrayPtr; float m_convexEpsilon; float m_planarEpsilon; float m_equalVertexThreshold; float m_edgeDistanceThreshold; float m_zeroAreaThreshold; int m_nextSize; int m_hashTableSize; int m_numValues; int m_numKeys; char m_padding[4]; }; // clang-format on SIMD_FORCE_INLINE int btTriangleInfoMap::calculateSerializeBufferSize() const { return sizeof(btTriangleInfoMapData); } ///fills the dataBuffer and returns the struct name (and 0 on failure) SIMD_FORCE_INLINE const char* btTriangleInfoMap::serialize(void* dataBuffer, btSerializer* serializer) const { btTriangleInfoMapData* tmapData = (btTriangleInfoMapData*)dataBuffer; tmapData->m_convexEpsilon = (float)m_convexEpsilon; tmapData->m_planarEpsilon = (float)m_planarEpsilon; tmapData->m_equalVertexThreshold = (float)m_equalVertexThreshold; tmapData->m_edgeDistanceThreshold = (float)m_edgeDistanceThreshold; tmapData->m_zeroAreaThreshold = (float)m_zeroAreaThreshold; tmapData->m_hashTableSize = m_hashTable.size(); tmapData->m_hashTablePtr = tmapData->m_hashTableSize ? (int*)serializer->getUniquePointer((void*)&m_hashTable[0]) : 0; if (tmapData->m_hashTablePtr) { //serialize an int buffer int sz = sizeof(int); int numElem = tmapData->m_hashTableSize; btChunk* chunk = serializer->allocate(sz, numElem); int* memPtr = (int*)chunk->m_oldPtr; for (int i = 0; i < numElem; i++, memPtr++) { *memPtr = m_hashTable[i]; } serializer->finalizeChunk(chunk, "int", BT_ARRAY_CODE, (void*)&m_hashTable[0]); } tmapData->m_nextSize = m_next.size(); tmapData->m_nextPtr = tmapData->m_nextSize ? (int*)serializer->getUniquePointer((void*)&m_next[0]) : 0; if (tmapData->m_nextPtr) { int sz = sizeof(int); int numElem = tmapData->m_nextSize; btChunk* chunk = serializer->allocate(sz, numElem); int* memPtr = (int*)chunk->m_oldPtr; for (int i = 0; i < numElem; i++, memPtr++) { *memPtr = m_next[i]; } serializer->finalizeChunk(chunk, "int", BT_ARRAY_CODE, (void*)&m_next[0]); } tmapData->m_numValues = m_valueArray.size(); tmapData->m_valueArrayPtr = tmapData->m_numValues ? (btTriangleInfoData*)serializer->getUniquePointer((void*)&m_valueArray[0]) : 0; if (tmapData->m_valueArrayPtr) { int sz = sizeof(btTriangleInfoData); int numElem = tmapData->m_numValues; btChunk* chunk = serializer->allocate(sz, numElem); btTriangleInfoData* memPtr = (btTriangleInfoData*)chunk->m_oldPtr; for (int i = 0; i < numElem; i++, memPtr++) { memPtr->m_edgeV0V1Angle = (float)m_valueArray[i].m_edgeV0V1Angle; memPtr->m_edgeV1V2Angle = (float)m_valueArray[i].m_edgeV1V2Angle; memPtr->m_edgeV2V0Angle = (float)m_valueArray[i].m_edgeV2V0Angle; memPtr->m_flags = m_valueArray[i].m_flags; } serializer->finalizeChunk(chunk, "btTriangleInfoData", BT_ARRAY_CODE, (void*)&m_valueArray[0]); } tmapData->m_numKeys = m_keyArray.size(); tmapData->m_keyArrayPtr = tmapData->m_numKeys ? (int*)serializer->getUniquePointer((void*)&m_keyArray[0]) : 0; if (tmapData->m_keyArrayPtr) { int sz = sizeof(int); int numElem = tmapData->m_numValues; btChunk* chunk = serializer->allocate(sz, numElem); int* memPtr = (int*)chunk->m_oldPtr; for (int i = 0; i < numElem; i++, memPtr++) { *memPtr = m_keyArray[i].getUid1(); } serializer->finalizeChunk(chunk, "int", BT_ARRAY_CODE, (void*)&m_keyArray[0]); } // Fill padding with zeros to appease msan. tmapData->m_padding[0] = 0; tmapData->m_padding[1] = 0; tmapData->m_padding[2] = 0; tmapData->m_padding[3] = 0; return "btTriangleInfoMapData"; } ///fills the dataBuffer and returns the struct name (and 0 on failure) SIMD_FORCE_INLINE void btTriangleInfoMap::deSerialize(btTriangleInfoMapData& tmapData) { m_convexEpsilon = tmapData.m_convexEpsilon; m_planarEpsilon = tmapData.m_planarEpsilon; m_equalVertexThreshold = tmapData.m_equalVertexThreshold; m_edgeDistanceThreshold = tmapData.m_edgeDistanceThreshold; m_zeroAreaThreshold = tmapData.m_zeroAreaThreshold; m_hashTable.resize(tmapData.m_hashTableSize); int i = 0; for (i = 0; i < tmapData.m_hashTableSize; i++) { m_hashTable[i] = tmapData.m_hashTablePtr[i]; } m_next.resize(tmapData.m_nextSize); for (i = 0; i < tmapData.m_nextSize; i++) { m_next[i] = tmapData.m_nextPtr[i]; } m_valueArray.resize(tmapData.m_numValues); for (i = 0; i < tmapData.m_numValues; i++) { m_valueArray[i].m_edgeV0V1Angle = tmapData.m_valueArrayPtr[i].m_edgeV0V1Angle; m_valueArray[i].m_edgeV1V2Angle = tmapData.m_valueArrayPtr[i].m_edgeV1V2Angle; m_valueArray[i].m_edgeV2V0Angle = tmapData.m_valueArrayPtr[i].m_edgeV2V0Angle; m_valueArray[i].m_flags = tmapData.m_valueArrayPtr[i].m_flags; } m_keyArray.resize(tmapData.m_numKeys, btHashInt(0)); for (i = 0; i < tmapData.m_numKeys; i++) { m_keyArray[i].setUid1(tmapData.m_keyArrayPtr[i]); } } #endif //_BT_TRIANGLE_INFO_MAP_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btTriangleMesh.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_TRIANGLE_MESH_H #define BT_TRIANGLE_MESH_H #include "btTriangleIndexVertexArray.h" #include "LinearMath/btVector3.h" #include "LinearMath/btAlignedObjectArray.h" ///The btTriangleMesh class is a convenience class derived from btTriangleIndexVertexArray, that provides storage for a concave triangle mesh. It can be used as data for the btBvhTriangleMeshShape. ///It allows either 32bit or 16bit indices, and 4 (x-y-z-w) or 3 (x-y-z) component vertices. ///If you want to share triangle/index data between graphics mesh and collision mesh (btBvhTriangleMeshShape), you can directly use btTriangleIndexVertexArray or derive your own class from btStridingMeshInterface. ///Performance of btTriangleMesh and btTriangleIndexVertexArray used in a btBvhTriangleMeshShape is the same. class btTriangleMesh : public btTriangleIndexVertexArray { btAlignedObjectArray m_4componentVertices; btAlignedObjectArray m_3componentVertices; btAlignedObjectArray m_32bitIndices; btAlignedObjectArray m_16bitIndices; bool m_use32bitIndices; bool m_use4componentVertices; public: btScalar m_weldingThreshold; btTriangleMesh(bool use32bitIndices = true, bool use4componentVertices = true); bool getUse32bitIndices() const { return m_use32bitIndices; } bool getUse4componentVertices() const { return m_use4componentVertices; } ///By default addTriangle won't search for duplicate vertices, because the search is very slow for large triangle meshes. ///In general it is better to directly use btTriangleIndexVertexArray instead. void addTriangle(const btVector3& vertex0, const btVector3& vertex1, const btVector3& vertex2, bool removeDuplicateVertices = false); ///Add a triangle using its indices. Make sure the indices are pointing within the vertices array, so add the vertices first (and to be sure, avoid removal of duplicate vertices) void addTriangleIndices(int index1, int index2, int index3); int getNumTriangles() const; virtual void preallocateVertices(int numverts); virtual void preallocateIndices(int numindices); ///findOrAddVertex is an internal method, use addTriangle instead int findOrAddVertex(const btVector3& vertex, bool removeDuplicateVertices); ///addIndex is an internal method, use addTriangle instead void addIndex(int index); }; #endif //BT_TRIANGLE_MESH_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btTriangleMeshShape.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_TRIANGLE_MESH_SHAPE_H #define BT_TRIANGLE_MESH_SHAPE_H #include "btConcaveShape.h" #include "btStridingMeshInterface.h" ///The btTriangleMeshShape is an internal concave triangle mesh interface. Don't use this class directly, use btBvhTriangleMeshShape instead. ATTRIBUTE_ALIGNED16(class) btTriangleMeshShape : public btConcaveShape { protected: btVector3 m_localAabbMin; btVector3 m_localAabbMax; btStridingMeshInterface* m_meshInterface; ///btTriangleMeshShape constructor has been disabled/protected, so that users will not mistakenly use this class. ///Don't use btTriangleMeshShape but use btBvhTriangleMeshShape instead! btTriangleMeshShape(btStridingMeshInterface * meshInterface); public: BT_DECLARE_ALIGNED_ALLOCATOR(); virtual ~btTriangleMeshShape(); virtual btVector3 localGetSupportingVertex(const btVector3& vec) const; virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const { btAssert(0); return localGetSupportingVertex(vec); } void recalcLocalAabb(); virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const; virtual void processAllTriangles(btTriangleCallback * callback, const btVector3& aabbMin, const btVector3& aabbMax) const; virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const; virtual void setLocalScaling(const btVector3& scaling); virtual const btVector3& getLocalScaling() const; btStridingMeshInterface* getMeshInterface() { return m_meshInterface; } const btStridingMeshInterface* getMeshInterface() const { return m_meshInterface; } const btVector3& getLocalAabbMin() const { return m_localAabbMin; } const btVector3& getLocalAabbMax() const { return m_localAabbMax; } //debugging virtual const char* getName() const { return "TRIANGLEMESH"; } }; #endif //BT_TRIANGLE_MESH_SHAPE_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btTriangleShape.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_OBB_TRIANGLE_MINKOWSKI_H #define BT_OBB_TRIANGLE_MINKOWSKI_H #include "btConvexShape.h" #include "btBoxShape.h" ATTRIBUTE_ALIGNED16(class) btTriangleShape : public btPolyhedralConvexShape { public: BT_DECLARE_ALIGNED_ALLOCATOR(); btVector3 m_vertices1[3]; virtual int getNumVertices() const { return 3; } btVector3& getVertexPtr(int index) { return m_vertices1[index]; } const btVector3& getVertexPtr(int index) const { return m_vertices1[index]; } virtual void getVertex(int index, btVector3& vert) const { vert = m_vertices1[index]; } virtual int getNumEdges() const { return 3; } virtual void getEdge(int i, btVector3& pa, btVector3& pb) const { getVertex(i, pa); getVertex((i + 1) % 3, pb); } virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const { // btAssert(0); getAabbSlow(t, aabbMin, aabbMax); } btVector3 localGetSupportingVertexWithoutMargin(const btVector3& dir) const { btVector3 dots = dir.dot3(m_vertices1[0], m_vertices1[1], m_vertices1[2]); return m_vertices1[dots.maxAxis()]; } virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const { for (int i = 0; i < numVectors; i++) { const btVector3& dir = vectors[i]; btVector3 dots = dir.dot3(m_vertices1[0], m_vertices1[1], m_vertices1[2]); supportVerticesOut[i] = m_vertices1[dots.maxAxis()]; } } btTriangleShape() : btPolyhedralConvexShape() { m_shapeType = TRIANGLE_SHAPE_PROXYTYPE; } btTriangleShape(const btVector3& p0, const btVector3& p1, const btVector3& p2) : btPolyhedralConvexShape() { m_shapeType = TRIANGLE_SHAPE_PROXYTYPE; m_vertices1[0] = p0; m_vertices1[1] = p1; m_vertices1[2] = p2; } virtual void getPlane(btVector3 & planeNormal, btVector3 & planeSupport, int i) const { getPlaneEquation(i, planeNormal, planeSupport); } virtual int getNumPlanes() const { return 1; } void calcNormal(btVector3 & normal) const { normal = (m_vertices1[1] - m_vertices1[0]).cross(m_vertices1[2] - m_vertices1[0]); normal.normalize(); } virtual void getPlaneEquation(int i, btVector3& planeNormal, btVector3& planeSupport) const { (void)i; calcNormal(planeNormal); planeSupport = m_vertices1[0]; } virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const { (void)mass; btAssert(0); inertia.setValue(btScalar(0.), btScalar(0.), btScalar(0.)); } virtual bool isInside(const btVector3& pt, btScalar tolerance) const { btVector3 normal; calcNormal(normal); //distance to plane btScalar dist = pt.dot(normal); btScalar planeconst = m_vertices1[0].dot(normal); dist -= planeconst; if (dist >= -tolerance && dist <= tolerance) { //inside check on edge-planes int i; for (i = 0; i < 3; i++) { btVector3 pa, pb; getEdge(i, pa, pb); btVector3 edge = pb - pa; btVector3 edgeNormal = edge.cross(normal); edgeNormal.normalize(); btScalar dist = pt.dot(edgeNormal); btScalar edgeConst = pa.dot(edgeNormal); dist -= edgeConst; if (dist < -tolerance) return false; } return true; } return false; } //debugging virtual const char* getName() const { return "Triangle"; } virtual int getNumPreferredPenetrationDirections() const { return 2; } virtual void getPreferredPenetrationDirection(int index, btVector3& penetrationVector) const { calcNormal(penetrationVector); if (index) penetrationVector *= btScalar(-1.); } }; #endif //BT_OBB_TRIANGLE_MINKOWSKI_H ================================================ FILE: libraries/bullet/BulletCollision/CollisionShapes/btUniformScalingShape.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_UNIFORM_SCALING_SHAPE_H #define BT_UNIFORM_SCALING_SHAPE_H #include "btConvexShape.h" #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" // for the types ///The btUniformScalingShape allows to re-use uniform scaled instances of btConvexShape in a memory efficient way. ///Istead of using btUniformScalingShape, it is better to use the non-uniform setLocalScaling method on convex shapes that implement it. ATTRIBUTE_ALIGNED16(class) btUniformScalingShape : public btConvexShape { btConvexShape* m_childConvexShape; btScalar m_uniformScalingFactor; public: BT_DECLARE_ALIGNED_ALLOCATOR(); btUniformScalingShape(btConvexShape * convexChildShape, btScalar uniformScalingFactor); virtual ~btUniformScalingShape(); virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const; virtual btVector3 localGetSupportingVertex(const btVector3& vec) const; virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const; virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const; btScalar getUniformScalingFactor() const { return m_uniformScalingFactor; } btConvexShape* getChildShape() { return m_childConvexShape; } const btConvexShape* getChildShape() const { return m_childConvexShape; } virtual const char* getName() const { return "UniformScalingShape"; } /////////////////////////// ///getAabb's default implementation is brute force, expected derived classes to implement a fast dedicated version void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const; virtual void getAabbSlow(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const; virtual void setLocalScaling(const btVector3& scaling); virtual const btVector3& getLocalScaling() const; virtual void setMargin(btScalar margin); virtual btScalar getMargin() const; virtual int getNumPreferredPenetrationDirections() const; virtual void getPreferredPenetrationDirection(int index, btVector3& penetrationVector) const; }; #endif //BT_UNIFORM_SCALING_SHAPE_H ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/btBoxCollision.h ================================================ #ifndef BT_BOX_COLLISION_H_INCLUDED #define BT_BOX_COLLISION_H_INCLUDED /*! \file gim_box_collision.h \author Francisco Leon Najera */ /* This source file is part of GIMPACT Library. For the latest info, see http://gimpact.sourceforge.net/ Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371. email: projectileman@yahoo.com This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #include "LinearMath/btTransform.h" ///Swap numbers #define BT_SWAP_NUMBERS(a, b) \ { \ a = a + b; \ b = a - b; \ a = a - b; \ } #define BT_MAX(a, b) (a < b ? b : a) #define BT_MIN(a, b) (a > b ? b : a) #define BT_GREATER(x, y) btFabs(x) > (y) #define BT_MAX3(a, b, c) BT_MAX(a, BT_MAX(b, c)) #define BT_MIN3(a, b, c) BT_MIN(a, BT_MIN(b, c)) enum eBT_PLANE_INTERSECTION_TYPE { BT_CONST_BACK_PLANE = 0, BT_CONST_COLLIDE_PLANE, BT_CONST_FRONT_PLANE }; //SIMD_FORCE_INLINE bool test_cross_edge_box( // const btVector3 & edge, // const btVector3 & absolute_edge, // const btVector3 & pointa, // const btVector3 & pointb, const btVector3 & extend, // int dir_index0, // int dir_index1 // int component_index0, // int component_index1) //{ // // dir coords are -z and y // // const btScalar dir0 = -edge[dir_index0]; // const btScalar dir1 = edge[dir_index1]; // btScalar pmin = pointa[component_index0]*dir0 + pointa[component_index1]*dir1; // btScalar pmax = pointb[component_index0]*dir0 + pointb[component_index1]*dir1; // //find minmax // if(pmin>pmax) // { // BT_SWAP_NUMBERS(pmin,pmax); // } // //find extends // const btScalar rad = extend[component_index0] * absolute_edge[dir_index0] + // extend[component_index1] * absolute_edge[dir_index1]; // // if(pmin>rad || -rad>pmax) return false; // return true; //} // //SIMD_FORCE_INLINE bool test_cross_edge_box_X_axis( // const btVector3 & edge, // const btVector3 & absolute_edge, // const btVector3 & pointa, // const btVector3 & pointb, btVector3 & extend) //{ // // return test_cross_edge_box(edge,absolute_edge,pointa,pointb,extend,2,1,1,2); //} // // //SIMD_FORCE_INLINE bool test_cross_edge_box_Y_axis( // const btVector3 & edge, // const btVector3 & absolute_edge, // const btVector3 & pointa, // const btVector3 & pointb, btVector3 & extend) //{ // // return test_cross_edge_box(edge,absolute_edge,pointa,pointb,extend,0,2,2,0); //} // //SIMD_FORCE_INLINE bool test_cross_edge_box_Z_axis( // const btVector3 & edge, // const btVector3 & absolute_edge, // const btVector3 & pointa, // const btVector3 & pointb, btVector3 & extend) //{ // // return test_cross_edge_box(edge,absolute_edge,pointa,pointb,extend,1,0,0,1); //} #define TEST_CROSS_EDGE_BOX_MCR(edge, absolute_edge, pointa, pointb, _extend, i_dir_0, i_dir_1, i_comp_0, i_comp_1) \ { \ const btScalar dir0 = -edge[i_dir_0]; \ const btScalar dir1 = edge[i_dir_1]; \ btScalar pmin = pointa[i_comp_0] * dir0 + pointa[i_comp_1] * dir1; \ btScalar pmax = pointb[i_comp_0] * dir0 + pointb[i_comp_1] * dir1; \ if (pmin > pmax) \ { \ BT_SWAP_NUMBERS(pmin, pmax); \ } \ const btScalar abs_dir0 = absolute_edge[i_dir_0]; \ const btScalar abs_dir1 = absolute_edge[i_dir_1]; \ const btScalar rad = _extend[i_comp_0] * abs_dir0 + _extend[i_comp_1] * abs_dir1; \ if (pmin > rad || -rad > pmax) return false; \ } #define TEST_CROSS_EDGE_BOX_X_AXIS_MCR(edge, absolute_edge, pointa, pointb, _extend) \ { \ TEST_CROSS_EDGE_BOX_MCR(edge, absolute_edge, pointa, pointb, _extend, 2, 1, 1, 2); \ } #define TEST_CROSS_EDGE_BOX_Y_AXIS_MCR(edge, absolute_edge, pointa, pointb, _extend) \ { \ TEST_CROSS_EDGE_BOX_MCR(edge, absolute_edge, pointa, pointb, _extend, 0, 2, 2, 0); \ } #define TEST_CROSS_EDGE_BOX_Z_AXIS_MCR(edge, absolute_edge, pointa, pointb, _extend) \ { \ TEST_CROSS_EDGE_BOX_MCR(edge, absolute_edge, pointa, pointb, _extend, 1, 0, 0, 1); \ } //! Returns the dot product between a vec3f and the col of a matrix SIMD_FORCE_INLINE btScalar bt_mat3_dot_col( const btMatrix3x3 &mat, const btVector3 &vec3, int colindex) { return vec3[0] * mat[0][colindex] + vec3[1] * mat[1][colindex] + vec3[2] * mat[2][colindex]; } //! Class for transforming a model1 to the space of model0 ATTRIBUTE_ALIGNED16(class) BT_BOX_BOX_TRANSFORM_CACHE { public: btVector3 m_T1to0; //!< Transforms translation of model1 to model 0 btMatrix3x3 m_R1to0; //!< Transforms Rotation of model1 to model 0, equal to R0' * R1 btMatrix3x3 m_AR; //!< Absolute value of m_R1to0 SIMD_FORCE_INLINE void calc_absolute_matrix() { // static const btVector3 vepsi(1e-6f,1e-6f,1e-6f); // m_AR[0] = vepsi + m_R1to0[0].absolute(); // m_AR[1] = vepsi + m_R1to0[1].absolute(); // m_AR[2] = vepsi + m_R1to0[2].absolute(); int i, j; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { m_AR[i][j] = 1e-6f + btFabs(m_R1to0[i][j]); } } } BT_BOX_BOX_TRANSFORM_CACHE() { } //! Calc the transformation relative 1 to 0. Inverts matrics by transposing SIMD_FORCE_INLINE void calc_from_homogenic(const btTransform &trans0, const btTransform &trans1) { btTransform temp_trans = trans0.inverse(); temp_trans = temp_trans * trans1; m_T1to0 = temp_trans.getOrigin(); m_R1to0 = temp_trans.getBasis(); calc_absolute_matrix(); } //! Calcs the full invertion of the matrices. Useful for scaling matrices SIMD_FORCE_INLINE void calc_from_full_invert(const btTransform &trans0, const btTransform &trans1) { m_R1to0 = trans0.getBasis().inverse(); m_T1to0 = m_R1to0 * (-trans0.getOrigin()); m_T1to0 += m_R1to0 * trans1.getOrigin(); m_R1to0 *= trans1.getBasis(); calc_absolute_matrix(); } SIMD_FORCE_INLINE btVector3 transform(const btVector3 &point) const { return point.dot3(m_R1to0[0], m_R1to0[1], m_R1to0[2]) + m_T1to0; } }; #define BOX_PLANE_EPSILON 0.000001f //! Axis aligned box ATTRIBUTE_ALIGNED16(class) btAABB { public: btVector3 m_min; btVector3 m_max; btAABB() { } btAABB(const btVector3 &V1, const btVector3 &V2, const btVector3 &V3) { m_min[0] = BT_MIN3(V1[0], V2[0], V3[0]); m_min[1] = BT_MIN3(V1[1], V2[1], V3[1]); m_min[2] = BT_MIN3(V1[2], V2[2], V3[2]); m_max[0] = BT_MAX3(V1[0], V2[0], V3[0]); m_max[1] = BT_MAX3(V1[1], V2[1], V3[1]); m_max[2] = BT_MAX3(V1[2], V2[2], V3[2]); } btAABB(const btVector3 &V1, const btVector3 &V2, const btVector3 &V3, btScalar margin) { m_min[0] = BT_MIN3(V1[0], V2[0], V3[0]); m_min[1] = BT_MIN3(V1[1], V2[1], V3[1]); m_min[2] = BT_MIN3(V1[2], V2[2], V3[2]); m_max[0] = BT_MAX3(V1[0], V2[0], V3[0]); m_max[1] = BT_MAX3(V1[1], V2[1], V3[1]); m_max[2] = BT_MAX3(V1[2], V2[2], V3[2]); m_min[0] -= margin; m_min[1] -= margin; m_min[2] -= margin; m_max[0] += margin; m_max[1] += margin; m_max[2] += margin; } btAABB(const btAABB &other) : m_min(other.m_min), m_max(other.m_max) { } btAABB(const btAABB &other, btScalar margin) : m_min(other.m_min), m_max(other.m_max) { m_min[0] -= margin; m_min[1] -= margin; m_min[2] -= margin; m_max[0] += margin; m_max[1] += margin; m_max[2] += margin; } SIMD_FORCE_INLINE void invalidate() { m_min[0] = SIMD_INFINITY; m_min[1] = SIMD_INFINITY; m_min[2] = SIMD_INFINITY; m_max[0] = -SIMD_INFINITY; m_max[1] = -SIMD_INFINITY; m_max[2] = -SIMD_INFINITY; } SIMD_FORCE_INLINE void increment_margin(btScalar margin) { m_min[0] -= margin; m_min[1] -= margin; m_min[2] -= margin; m_max[0] += margin; m_max[1] += margin; m_max[2] += margin; } SIMD_FORCE_INLINE void copy_with_margin(const btAABB &other, btScalar margin) { m_min[0] = other.m_min[0] - margin; m_min[1] = other.m_min[1] - margin; m_min[2] = other.m_min[2] - margin; m_max[0] = other.m_max[0] + margin; m_max[1] = other.m_max[1] + margin; m_max[2] = other.m_max[2] + margin; } template SIMD_FORCE_INLINE void calc_from_triangle( const CLASS_POINT &V1, const CLASS_POINT &V2, const CLASS_POINT &V3) { m_min[0] = BT_MIN3(V1[0], V2[0], V3[0]); m_min[1] = BT_MIN3(V1[1], V2[1], V3[1]); m_min[2] = BT_MIN3(V1[2], V2[2], V3[2]); m_max[0] = BT_MAX3(V1[0], V2[0], V3[0]); m_max[1] = BT_MAX3(V1[1], V2[1], V3[1]); m_max[2] = BT_MAX3(V1[2], V2[2], V3[2]); } template SIMD_FORCE_INLINE void calc_from_triangle_margin( const CLASS_POINT &V1, const CLASS_POINT &V2, const CLASS_POINT &V3, btScalar margin) { m_min[0] = BT_MIN3(V1[0], V2[0], V3[0]); m_min[1] = BT_MIN3(V1[1], V2[1], V3[1]); m_min[2] = BT_MIN3(V1[2], V2[2], V3[2]); m_max[0] = BT_MAX3(V1[0], V2[0], V3[0]); m_max[1] = BT_MAX3(V1[1], V2[1], V3[1]); m_max[2] = BT_MAX3(V1[2], V2[2], V3[2]); m_min[0] -= margin; m_min[1] -= margin; m_min[2] -= margin; m_max[0] += margin; m_max[1] += margin; m_max[2] += margin; } //! Apply a transform to an AABB SIMD_FORCE_INLINE void appy_transform(const btTransform &trans) { btVector3 center = (m_max + m_min) * 0.5f; btVector3 extends = m_max - center; // Compute new center center = trans(center); btVector3 textends = extends.dot3(trans.getBasis().getRow(0).absolute(), trans.getBasis().getRow(1).absolute(), trans.getBasis().getRow(2).absolute()); m_min = center - textends; m_max = center + textends; } //! Apply a transform to an AABB SIMD_FORCE_INLINE void appy_transform_trans_cache(const BT_BOX_BOX_TRANSFORM_CACHE &trans) { btVector3 center = (m_max + m_min) * 0.5f; btVector3 extends = m_max - center; // Compute new center center = trans.transform(center); btVector3 textends = extends.dot3(trans.m_R1to0.getRow(0).absolute(), trans.m_R1to0.getRow(1).absolute(), trans.m_R1to0.getRow(2).absolute()); m_min = center - textends; m_max = center + textends; } //! Merges a Box SIMD_FORCE_INLINE void merge(const btAABB &box) { m_min[0] = BT_MIN(m_min[0], box.m_min[0]); m_min[1] = BT_MIN(m_min[1], box.m_min[1]); m_min[2] = BT_MIN(m_min[2], box.m_min[2]); m_max[0] = BT_MAX(m_max[0], box.m_max[0]); m_max[1] = BT_MAX(m_max[1], box.m_max[1]); m_max[2] = BT_MAX(m_max[2], box.m_max[2]); } //! Merges a point template SIMD_FORCE_INLINE void merge_point(const CLASS_POINT &point) { m_min[0] = BT_MIN(m_min[0], point[0]); m_min[1] = BT_MIN(m_min[1], point[1]); m_min[2] = BT_MIN(m_min[2], point[2]); m_max[0] = BT_MAX(m_max[0], point[0]); m_max[1] = BT_MAX(m_max[1], point[1]); m_max[2] = BT_MAX(m_max[2], point[2]); } //! Gets the extend and center SIMD_FORCE_INLINE void get_center_extend(btVector3 & center, btVector3 & extend) const { center = (m_max + m_min) * 0.5f; extend = m_max - center; } //! Finds the intersecting box between this box and the other. SIMD_FORCE_INLINE void find_intersection(const btAABB &other, btAABB &intersection) const { intersection.m_min[0] = BT_MAX(other.m_min[0], m_min[0]); intersection.m_min[1] = BT_MAX(other.m_min[1], m_min[1]); intersection.m_min[2] = BT_MAX(other.m_min[2], m_min[2]); intersection.m_max[0] = BT_MIN(other.m_max[0], m_max[0]); intersection.m_max[1] = BT_MIN(other.m_max[1], m_max[1]); intersection.m_max[2] = BT_MIN(other.m_max[2], m_max[2]); } SIMD_FORCE_INLINE bool has_collision(const btAABB &other) const { if (m_min[0] > other.m_max[0] || m_max[0] < other.m_min[0] || m_min[1] > other.m_max[1] || m_max[1] < other.m_min[1] || m_min[2] > other.m_max[2] || m_max[2] < other.m_min[2]) { return false; } return true; } /*! \brief Finds the Ray intersection parameter. \param aabb Aligned box \param vorigin A vec3f with the origin of the ray \param vdir A vec3f with the direction of the ray */ SIMD_FORCE_INLINE bool collide_ray(const btVector3 &vorigin, const btVector3 &vdir) const { btVector3 extents, center; this->get_center_extend(center, extents); ; btScalar Dx = vorigin[0] - center[0]; if (BT_GREATER(Dx, extents[0]) && Dx * vdir[0] >= 0.0f) return false; btScalar Dy = vorigin[1] - center[1]; if (BT_GREATER(Dy, extents[1]) && Dy * vdir[1] >= 0.0f) return false; btScalar Dz = vorigin[2] - center[2]; if (BT_GREATER(Dz, extents[2]) && Dz * vdir[2] >= 0.0f) return false; btScalar f = vdir[1] * Dz - vdir[2] * Dy; if (btFabs(f) > extents[1] * btFabs(vdir[2]) + extents[2] * btFabs(vdir[1])) return false; f = vdir[2] * Dx - vdir[0] * Dz; if (btFabs(f) > extents[0] * btFabs(vdir[2]) + extents[2] * btFabs(vdir[0])) return false; f = vdir[0] * Dy - vdir[1] * Dx; if (btFabs(f) > extents[0] * btFabs(vdir[1]) + extents[1] * btFabs(vdir[0])) return false; return true; } SIMD_FORCE_INLINE void projection_interval(const btVector3 &direction, btScalar &vmin, btScalar &vmax) const { btVector3 center = (m_max + m_min) * 0.5f; btVector3 extend = m_max - center; btScalar _fOrigin = direction.dot(center); btScalar _fMaximumExtent = extend.dot(direction.absolute()); vmin = _fOrigin - _fMaximumExtent; vmax = _fOrigin + _fMaximumExtent; } SIMD_FORCE_INLINE eBT_PLANE_INTERSECTION_TYPE plane_classify(const btVector4 &plane) const { btScalar _fmin, _fmax; this->projection_interval(plane, _fmin, _fmax); if (plane[3] > _fmax + BOX_PLANE_EPSILON) { return BT_CONST_BACK_PLANE; // 0 } if (plane[3] + BOX_PLANE_EPSILON >= _fmin) { return BT_CONST_COLLIDE_PLANE; //1 } return BT_CONST_FRONT_PLANE; //2 } SIMD_FORCE_INLINE bool overlapping_trans_conservative(const btAABB &box, btTransform &trans1_to_0) const { btAABB tbox = box; tbox.appy_transform(trans1_to_0); return has_collision(tbox); } SIMD_FORCE_INLINE bool overlapping_trans_conservative2(const btAABB &box, const BT_BOX_BOX_TRANSFORM_CACHE &trans1_to_0) const { btAABB tbox = box; tbox.appy_transform_trans_cache(trans1_to_0); return has_collision(tbox); } //! transcache is the transformation cache from box to this AABB SIMD_FORCE_INLINE bool overlapping_trans_cache( const btAABB &box, const BT_BOX_BOX_TRANSFORM_CACHE &transcache, bool fulltest) const { //Taken from OPCODE btVector3 ea, eb; //extends btVector3 ca, cb; //extends get_center_extend(ca, ea); box.get_center_extend(cb, eb); btVector3 T; btScalar t, t2; int i; // Class I : A's basis vectors for (i = 0; i < 3; i++) { T[i] = transcache.m_R1to0[i].dot(cb) + transcache.m_T1to0[i] - ca[i]; t = transcache.m_AR[i].dot(eb) + ea[i]; if (BT_GREATER(T[i], t)) return false; } // Class II : B's basis vectors for (i = 0; i < 3; i++) { t = bt_mat3_dot_col(transcache.m_R1to0, T, i); t2 = bt_mat3_dot_col(transcache.m_AR, ea, i) + eb[i]; if (BT_GREATER(t, t2)) return false; } // Class III : 9 cross products if (fulltest) { int j, m, n, o, p, q, r; for (i = 0; i < 3; i++) { m = (i + 1) % 3; n = (i + 2) % 3; o = i == 0 ? 1 : 0; p = i == 2 ? 1 : 2; for (j = 0; j < 3; j++) { q = j == 2 ? 1 : 2; r = j == 0 ? 1 : 0; t = T[n] * transcache.m_R1to0[m][j] - T[m] * transcache.m_R1to0[n][j]; t2 = ea[o] * transcache.m_AR[p][j] + ea[p] * transcache.m_AR[o][j] + eb[r] * transcache.m_AR[i][q] + eb[q] * transcache.m_AR[i][r]; if (BT_GREATER(t, t2)) return false; } } } return true; } //! Simple test for planes. SIMD_FORCE_INLINE bool collide_plane( const btVector4 &plane) const { eBT_PLANE_INTERSECTION_TYPE classify = plane_classify(plane); return (classify == BT_CONST_COLLIDE_PLANE); } //! test for a triangle, with edges SIMD_FORCE_INLINE bool collide_triangle_exact( const btVector3 &p1, const btVector3 &p2, const btVector3 &p3, const btVector4 &triangle_plane) const { if (!collide_plane(triangle_plane)) return false; btVector3 center, extends; this->get_center_extend(center, extends); const btVector3 v1(p1 - center); const btVector3 v2(p2 - center); const btVector3 v3(p3 - center); //First axis btVector3 diff(v2 - v1); btVector3 abs_diff = diff.absolute(); //Test With X axis TEST_CROSS_EDGE_BOX_X_AXIS_MCR(diff, abs_diff, v1, v3, extends); //Test With Y axis TEST_CROSS_EDGE_BOX_Y_AXIS_MCR(diff, abs_diff, v1, v3, extends); //Test With Z axis TEST_CROSS_EDGE_BOX_Z_AXIS_MCR(diff, abs_diff, v1, v3, extends); diff = v3 - v2; abs_diff = diff.absolute(); //Test With X axis TEST_CROSS_EDGE_BOX_X_AXIS_MCR(diff, abs_diff, v2, v1, extends); //Test With Y axis TEST_CROSS_EDGE_BOX_Y_AXIS_MCR(diff, abs_diff, v2, v1, extends); //Test With Z axis TEST_CROSS_EDGE_BOX_Z_AXIS_MCR(diff, abs_diff, v2, v1, extends); diff = v1 - v3; abs_diff = diff.absolute(); //Test With X axis TEST_CROSS_EDGE_BOX_X_AXIS_MCR(diff, abs_diff, v3, v2, extends); //Test With Y axis TEST_CROSS_EDGE_BOX_Y_AXIS_MCR(diff, abs_diff, v3, v2, extends); //Test With Z axis TEST_CROSS_EDGE_BOX_Z_AXIS_MCR(diff, abs_diff, v3, v2, extends); return true; } }; //! Compairison of transformation objects SIMD_FORCE_INLINE bool btCompareTransformsEqual(const btTransform &t1, const btTransform &t2) { if (!(t1.getOrigin() == t2.getOrigin())) return false; if (!(t1.getBasis().getRow(0) == t2.getBasis().getRow(0))) return false; if (!(t1.getBasis().getRow(1) == t2.getBasis().getRow(1))) return false; if (!(t1.getBasis().getRow(2) == t2.getBasis().getRow(2))) return false; return true; } #endif // GIM_BOX_COLLISION_H_INCLUDED ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/btClipPolygon.h ================================================ #ifndef BT_CLIP_POLYGON_H_INCLUDED #define BT_CLIP_POLYGON_H_INCLUDED /*! \file btClipPolygon.h \author Francisco Leon Najera */ /* This source file is part of GIMPACT Library. For the latest info, see http://gimpact.sourceforge.net/ Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371. email: projectileman@yahoo.com This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #include "LinearMath/btTransform.h" #include "LinearMath/btGeometryUtil.h" SIMD_FORCE_INLINE btScalar bt_distance_point_plane(const btVector4 &plane, const btVector3 &point) { return point.dot(plane) - plane[3]; } /*! Vector blending Takes two vectors a, b, blends them together*/ SIMD_FORCE_INLINE void bt_vec_blend(btVector3 &vr, const btVector3 &va, const btVector3 &vb, btScalar blend_factor) { vr = (1 - blend_factor) * va + blend_factor * vb; } //! This function calcs the distance from a 3D plane SIMD_FORCE_INLINE void bt_plane_clip_polygon_collect( const btVector3 &point0, const btVector3 &point1, btScalar dist0, btScalar dist1, btVector3 *clipped, int &clipped_count) { bool _prevclassif = (dist0 > SIMD_EPSILON); bool _classif = (dist1 > SIMD_EPSILON); if (_classif != _prevclassif) { btScalar blendfactor = -dist0 / (dist1 - dist0); bt_vec_blend(clipped[clipped_count], point0, point1, blendfactor); clipped_count++; } if (!_classif) { clipped[clipped_count] = point1; clipped_count++; } } //! Clips a polygon by a plane /*! *\return The count of the clipped counts */ SIMD_FORCE_INLINE int bt_plane_clip_polygon( const btVector4 &plane, const btVector3 *polygon_points, int polygon_point_count, btVector3 *clipped) { int clipped_count = 0; //clip first point btScalar firstdist = bt_distance_point_plane(plane, polygon_points[0]); ; if (!(firstdist > SIMD_EPSILON)) { clipped[clipped_count] = polygon_points[0]; clipped_count++; } btScalar olddist = firstdist; for (int i = 1; i < polygon_point_count; i++) { btScalar dist = bt_distance_point_plane(plane, polygon_points[i]); bt_plane_clip_polygon_collect( polygon_points[i - 1], polygon_points[i], olddist, dist, clipped, clipped_count); olddist = dist; } //RETURN TO FIRST point bt_plane_clip_polygon_collect( polygon_points[polygon_point_count - 1], polygon_points[0], olddist, firstdist, clipped, clipped_count); return clipped_count; } //! Clips a polygon by a plane /*! *\param clipped must be an array of 16 points. *\return The count of the clipped counts */ SIMD_FORCE_INLINE int bt_plane_clip_triangle( const btVector4 &plane, const btVector3 &point0, const btVector3 &point1, const btVector3 &point2, btVector3 *clipped // an allocated array of 16 points at least ) { int clipped_count = 0; //clip first point0 btScalar firstdist = bt_distance_point_plane(plane, point0); ; if (!(firstdist > SIMD_EPSILON)) { clipped[clipped_count] = point0; clipped_count++; } // point 1 btScalar olddist = firstdist; btScalar dist = bt_distance_point_plane(plane, point1); bt_plane_clip_polygon_collect( point0, point1, olddist, dist, clipped, clipped_count); olddist = dist; // point 2 dist = bt_distance_point_plane(plane, point2); bt_plane_clip_polygon_collect( point1, point2, olddist, dist, clipped, clipped_count); olddist = dist; //RETURN TO FIRST point0 bt_plane_clip_polygon_collect( point2, point0, olddist, firstdist, clipped, clipped_count); return clipped_count; } #endif // GIM_TRI_COLLISION_H_INCLUDED ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/btCompoundFromGimpact.h ================================================ #ifndef BT_COMPOUND_FROM_GIMPACT #define BT_COMPOUND_FROM_GIMPACT #include "BulletCollision/CollisionShapes/btCompoundShape.h" #include "btGImpactShape.h" #include "BulletCollision/NarrowPhaseCollision/btRaycastCallback.h" ATTRIBUTE_ALIGNED16(class) btCompoundFromGimpactShape : public btCompoundShape { public: BT_DECLARE_ALIGNED_ALLOCATOR(); virtual ~btCompoundFromGimpactShape() { /*delete all the btBU_Simplex1to4 ChildShapes*/ for (int i = 0; i < m_children.size(); i++) { delete m_children[i].m_childShape; } } }; struct MyCallback : public btTriangleRaycastCallback { int m_ignorePart; int m_ignoreTriangleIndex; MyCallback(const btVector3& from, const btVector3& to, int ignorePart, int ignoreTriangleIndex) : btTriangleRaycastCallback(from, to), m_ignorePart(ignorePart), m_ignoreTriangleIndex(ignoreTriangleIndex) { } virtual btScalar reportHit(const btVector3& hitNormalLocal, btScalar hitFraction, int partId, int triangleIndex) { if (partId != m_ignorePart || triangleIndex != m_ignoreTriangleIndex) { if (hitFraction < m_hitFraction) return hitFraction; } return m_hitFraction; } }; struct MyInternalTriangleIndexCallback : public btInternalTriangleIndexCallback { const btGImpactMeshShape* m_gimpactShape; btCompoundShape* m_colShape; btScalar m_depth; MyInternalTriangleIndexCallback(btCompoundShape* colShape, const btGImpactMeshShape* meshShape, btScalar depth) : m_colShape(colShape), m_gimpactShape(meshShape), m_depth(depth) { } virtual void internalProcessTriangleIndex(btVector3* triangle, int partId, int triangleIndex) { btVector3 scale = m_gimpactShape->getLocalScaling(); btVector3 v0 = triangle[0] * scale; btVector3 v1 = triangle[1] * scale; btVector3 v2 = triangle[2] * scale; btVector3 centroid = (v0 + v1 + v2) / 3; btVector3 normal = (v1 - v0).cross(v2 - v0); normal.normalize(); btVector3 rayFrom = centroid; btVector3 rayTo = centroid - normal * m_depth; MyCallback cb(rayFrom, rayTo, partId, triangleIndex); m_gimpactShape->processAllTrianglesRay(&cb, rayFrom, rayTo); if (cb.m_hitFraction < 1) { rayTo.setInterpolate3(cb.m_from, cb.m_to, cb.m_hitFraction); //rayTo = cb.m_from; //rayTo = rayTo.lerp(cb.m_to,cb.m_hitFraction); //gDebugDraw.drawLine(tr(centroid),tr(centroid+normal),btVector3(1,0,0)); } btBU_Simplex1to4* tet = new btBU_Simplex1to4(v0, v1, v2, rayTo); btTransform ident; ident.setIdentity(); m_colShape->addChildShape(ident, tet); } }; btCompoundShape* btCreateCompoundFromGimpactShape(const btGImpactMeshShape* gimpactMesh, btScalar depth) { btCompoundShape* colShape = new btCompoundFromGimpactShape(); btTransform tr; tr.setIdentity(); MyInternalTriangleIndexCallback cb(colShape, gimpactMesh, depth); btVector3 aabbMin, aabbMax; gimpactMesh->getAabb(tr, aabbMin, aabbMax); gimpactMesh->getMeshInterface()->InternalProcessAllTriangles(&cb, aabbMin, aabbMax); return colShape; } #endif //BT_COMPOUND_FROM_GIMPACT ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/btContactProcessing.h ================================================ #ifndef BT_CONTACT_H_INCLUDED #define BT_CONTACT_H_INCLUDED /*! \file gim_contact.h \author Francisco Leon Najera */ /* This source file is part of GIMPACT Library. For the latest info, see http://gimpact.sourceforge.net/ Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371. email: projectileman@yahoo.com This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #include "LinearMath/btTransform.h" #include "LinearMath/btAlignedObjectArray.h" #include "btTriangleShapeEx.h" #include "btContactProcessingStructs.h" class btContactArray : public btAlignedObjectArray { public: btContactArray() { reserve(64); } SIMD_FORCE_INLINE void push_contact( const btVector3 &point, const btVector3 &normal, btScalar depth, int feature1, int feature2) { push_back(GIM_CONTACT(point, normal, depth, feature1, feature2)); } SIMD_FORCE_INLINE void push_triangle_contacts( const GIM_TRIANGLE_CONTACT &tricontact, int feature1, int feature2) { for (int i = 0; i < tricontact.m_point_count; i++) { push_contact( tricontact.m_points[i], tricontact.m_separating_normal, tricontact.m_penetration_depth, feature1, feature2); } } void merge_contacts(const btContactArray &contacts, bool normal_contact_average = true); void merge_contacts_unique(const btContactArray &contacts); }; #endif // GIM_CONTACT_H_INCLUDED ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/btContactProcessingStructs.h ================================================ #ifndef BT_CONTACT_H_STRUCTS_INCLUDED #define BT_CONTACT_H_STRUCTS_INCLUDED /*! \file gim_contact.h \author Francisco Leon Najera */ /* This source file is part of GIMPACT Library. For the latest info, see http://gimpact.sourceforge.net/ Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371. email: projectileman@yahoo.com This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #include "LinearMath/btTransform.h" #include "LinearMath/btAlignedObjectArray.h" #include "btTriangleShapeEx.h" /** Configuration var for applying interpolation of contact normals */ #define NORMAL_CONTACT_AVERAGE 1 #define CONTACT_DIFF_EPSILON 0.00001f ///The GIM_CONTACT is an internal GIMPACT structure, similar to btManifoldPoint. ///@todo: remove and replace GIM_CONTACT by btManifoldPoint. class GIM_CONTACT { public: btVector3 m_point; btVector3 m_normal; btScalar m_depth; //Positive value indicates interpenetration btScalar m_distance; //Padding not for use int m_feature1; //Face number int m_feature2; //Face number public: GIM_CONTACT() { } GIM_CONTACT(const GIM_CONTACT &contact) : m_point(contact.m_point), m_normal(contact.m_normal), m_depth(contact.m_depth), m_feature1(contact.m_feature1), m_feature2(contact.m_feature2) { } GIM_CONTACT(const btVector3 &point, const btVector3 &normal, btScalar depth, int feature1, int feature2) : m_point(point), m_normal(normal), m_depth(depth), m_feature1(feature1), m_feature2(feature2) { } //! Calcs key for coord classification SIMD_FORCE_INLINE unsigned int calc_key_contact() const { int _coords[] = { (int)(m_point[0] * 1000.0f + 1.0f), (int)(m_point[1] * 1333.0f), (int)(m_point[2] * 2133.0f + 3.0f)}; unsigned int _hash = 0; unsigned int *_uitmp = (unsigned int *)(&_coords[0]); _hash = *_uitmp; _uitmp++; _hash += (*_uitmp) << 4; _uitmp++; _hash += (*_uitmp) << 8; return _hash; } SIMD_FORCE_INLINE void interpolate_normals(btVector3 *normals, int normal_count) { btVector3 vec_sum(m_normal); for (int i = 0; i < normal_count; i++) { vec_sum += normals[i]; } btScalar vec_sum_len = vec_sum.length2(); if (vec_sum_len < CONTACT_DIFF_EPSILON) return; //GIM_INV_SQRT(vec_sum_len,vec_sum_len); // 1/sqrt(vec_sum_len) m_normal = vec_sum / btSqrt(vec_sum_len); } }; #endif // BT_CONTACT_H_STRUCTS_INCLUDED ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/btGImpactBvh.h ================================================ #ifndef BT_GIMPACT_BVH_H_INCLUDED #define BT_GIMPACT_BVH_H_INCLUDED /*! \file gim_box_set.h \author Francisco Leon Najera */ /* This source file is part of GIMPACT Library. For the latest info, see http://gimpact.sourceforge.net/ Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371. email: projectileman@yahoo.com This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #include "LinearMath/btAlignedObjectArray.h" #include "btBoxCollision.h" #include "btTriangleShapeEx.h" #include "btGImpactBvhStructs.h" //! A pairset array class btPairSet : public btAlignedObjectArray { public: btPairSet() { reserve(32); } inline void push_pair(int index1, int index2) { push_back(GIM_PAIR(index1, index2)); } inline void push_pair_inv(int index1, int index2) { push_back(GIM_PAIR(index2, index1)); } }; class GIM_BVH_DATA_ARRAY : public btAlignedObjectArray { }; class GIM_BVH_TREE_NODE_ARRAY : public btAlignedObjectArray { }; //! Basic Box tree structure class btBvhTree { protected: int m_num_nodes; GIM_BVH_TREE_NODE_ARRAY m_node_array; protected: int _sort_and_calc_splitting_index( GIM_BVH_DATA_ARRAY& primitive_boxes, int startIndex, int endIndex, int splitAxis); int _calc_splitting_axis(GIM_BVH_DATA_ARRAY& primitive_boxes, int startIndex, int endIndex); void _build_sub_tree(GIM_BVH_DATA_ARRAY& primitive_boxes, int startIndex, int endIndex); public: btBvhTree() { m_num_nodes = 0; } //! prototype functions for box tree management //!@{ void build_tree(GIM_BVH_DATA_ARRAY& primitive_boxes); SIMD_FORCE_INLINE void clearNodes() { m_node_array.clear(); m_num_nodes = 0; } //! node count SIMD_FORCE_INLINE int getNodeCount() const { return m_num_nodes; } //! tells if the node is a leaf SIMD_FORCE_INLINE bool isLeafNode(int nodeindex) const { return m_node_array[nodeindex].isLeafNode(); } SIMD_FORCE_INLINE int getNodeData(int nodeindex) const { return m_node_array[nodeindex].getDataIndex(); } SIMD_FORCE_INLINE void getNodeBound(int nodeindex, btAABB& bound) const { bound = m_node_array[nodeindex].m_bound; } SIMD_FORCE_INLINE void setNodeBound(int nodeindex, const btAABB& bound) { m_node_array[nodeindex].m_bound = bound; } SIMD_FORCE_INLINE int getLeftNode(int nodeindex) const { return nodeindex + 1; } SIMD_FORCE_INLINE int getRightNode(int nodeindex) const { if (m_node_array[nodeindex + 1].isLeafNode()) return nodeindex + 2; return nodeindex + 1 + m_node_array[nodeindex + 1].getEscapeIndex(); } SIMD_FORCE_INLINE int getEscapeNodeIndex(int nodeindex) const { return m_node_array[nodeindex].getEscapeIndex(); } SIMD_FORCE_INLINE const GIM_BVH_TREE_NODE* get_node_pointer(int index = 0) const { return &m_node_array[index]; } //!@} }; //! Prototype Base class for primitive classification /*! This class is a wrapper for primitive collections. This tells relevant info for the Bounding Box set classes, which take care of space classification. This class can manage Compound shapes and trimeshes, and if it is managing trimesh then the Hierarchy Bounding Box classes will take advantage of primitive Vs Box overlapping tests for getting optimal results and less Per Box compairisons. */ class btPrimitiveManagerBase { public: virtual ~btPrimitiveManagerBase() {} //! determines if this manager consist on only triangles, which special case will be optimized virtual bool is_trimesh() const = 0; virtual int get_primitive_count() const = 0; virtual void get_primitive_box(int prim_index, btAABB& primbox) const = 0; //! retrieves only the points of the triangle, and the collision margin virtual void get_primitive_triangle(int prim_index, btPrimitiveTriangle& triangle) const = 0; }; //! Structure for containing Boxes /*! This class offers an structure for managing a box tree of primitives. Requires a Primitive prototype (like btPrimitiveManagerBase ) */ class btGImpactBvh { protected: btBvhTree m_box_tree; btPrimitiveManagerBase* m_primitive_manager; protected: //stackless refit void refit(); public: //! this constructor doesn't build the tree. you must call buildSet btGImpactBvh() { m_primitive_manager = NULL; } //! this constructor doesn't build the tree. you must call buildSet btGImpactBvh(btPrimitiveManagerBase* primitive_manager) { m_primitive_manager = primitive_manager; } SIMD_FORCE_INLINE btAABB getGlobalBox() const { btAABB totalbox; getNodeBound(0, totalbox); return totalbox; } SIMD_FORCE_INLINE void setPrimitiveManager(btPrimitiveManagerBase* primitive_manager) { m_primitive_manager = primitive_manager; } SIMD_FORCE_INLINE btPrimitiveManagerBase* getPrimitiveManager() const { return m_primitive_manager; } //! node manager prototype functions ///@{ //! this attemps to refit the box set. SIMD_FORCE_INLINE void update() { refit(); } //! this rebuild the entire set void buildSet(); //! returns the indices of the primitives in the m_primitive_manager bool boxQuery(const btAABB& box, btAlignedObjectArray& collided_results) const; //! returns the indices of the primitives in the m_primitive_manager SIMD_FORCE_INLINE bool boxQueryTrans(const btAABB& box, const btTransform& transform, btAlignedObjectArray& collided_results) const { btAABB transbox = box; transbox.appy_transform(transform); return boxQuery(transbox, collided_results); } //! returns the indices of the primitives in the m_primitive_manager bool rayQuery( const btVector3& ray_dir, const btVector3& ray_origin, btAlignedObjectArray& collided_results) const; //! tells if this set has hierarcht SIMD_FORCE_INLINE bool hasHierarchy() const { return true; } //! tells if this set is a trimesh SIMD_FORCE_INLINE bool isTrimesh() const { return m_primitive_manager->is_trimesh(); } //! node count SIMD_FORCE_INLINE int getNodeCount() const { return m_box_tree.getNodeCount(); } //! tells if the node is a leaf SIMD_FORCE_INLINE bool isLeafNode(int nodeindex) const { return m_box_tree.isLeafNode(nodeindex); } SIMD_FORCE_INLINE int getNodeData(int nodeindex) const { return m_box_tree.getNodeData(nodeindex); } SIMD_FORCE_INLINE void getNodeBound(int nodeindex, btAABB& bound) const { m_box_tree.getNodeBound(nodeindex, bound); } SIMD_FORCE_INLINE void setNodeBound(int nodeindex, const btAABB& bound) { m_box_tree.setNodeBound(nodeindex, bound); } SIMD_FORCE_INLINE int getLeftNode(int nodeindex) const { return m_box_tree.getLeftNode(nodeindex); } SIMD_FORCE_INLINE int getRightNode(int nodeindex) const { return m_box_tree.getRightNode(nodeindex); } SIMD_FORCE_INLINE int getEscapeNodeIndex(int nodeindex) const { return m_box_tree.getEscapeNodeIndex(nodeindex); } SIMD_FORCE_INLINE void getNodeTriangle(int nodeindex, btPrimitiveTriangle& triangle) const { m_primitive_manager->get_primitive_triangle(getNodeData(nodeindex), triangle); } SIMD_FORCE_INLINE const GIM_BVH_TREE_NODE* get_node_pointer(int index = 0) const { return m_box_tree.get_node_pointer(index); } #ifdef TRI_COLLISION_PROFILING static float getAverageTreeCollisionTime(); #endif //TRI_COLLISION_PROFILING static void find_collision(btGImpactBvh* boxset1, const btTransform& trans1, btGImpactBvh* boxset2, const btTransform& trans2, btPairSet& collision_pairs); }; #endif // BT_GIMPACT_BVH_H_INCLUDED ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/btGImpactBvhStructs.h ================================================ #ifndef GIM_BOX_SET_STRUCT_H_INCLUDED #define GIM_BOX_SET_STRUCT_H_INCLUDED /*! \file gim_box_set.h \author Francisco Leon Najera */ /* This source file is part of GIMPACT Library. For the latest info, see http://gimpact.sourceforge.net/ Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371. email: projectileman@yahoo.com This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #include "LinearMath/btAlignedObjectArray.h" #include "btBoxCollision.h" #include "btTriangleShapeEx.h" #include "gim_pair.h" //for GIM_PAIR ///GIM_BVH_DATA is an internal GIMPACT collision structure to contain axis aligned bounding box struct GIM_BVH_DATA { btAABB m_bound; int m_data; }; //! Node Structure for trees class GIM_BVH_TREE_NODE { public: btAABB m_bound; protected: int m_escapeIndexOrDataIndex; public: GIM_BVH_TREE_NODE() { m_escapeIndexOrDataIndex = 0; } SIMD_FORCE_INLINE bool isLeafNode() const { //skipindex is negative (internal node), triangleindex >=0 (leafnode) return (m_escapeIndexOrDataIndex >= 0); } SIMD_FORCE_INLINE int getEscapeIndex() const { //btAssert(m_escapeIndexOrDataIndex < 0); return -m_escapeIndexOrDataIndex; } SIMD_FORCE_INLINE void setEscapeIndex(int index) { m_escapeIndexOrDataIndex = -index; } SIMD_FORCE_INLINE int getDataIndex() const { //btAssert(m_escapeIndexOrDataIndex >= 0); return m_escapeIndexOrDataIndex; } SIMD_FORCE_INLINE void setDataIndex(int index) { m_escapeIndexOrDataIndex = index; } }; #endif // GIM_BOXPRUNING_H_INCLUDED ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.h ================================================ /*! \file btGImpactShape.h \author Francisco Leon Najera */ /* This source file is part of GIMPACT Library. For the latest info, see http://gimpact.sourceforge.net/ Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371. email: projectileman@yahoo.com This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_GIMPACT_BVH_CONCAVE_COLLISION_ALGORITHM_H #define BT_GIMPACT_BVH_CONCAVE_COLLISION_ALGORITHM_H #include "BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.h" #include "BulletCollision/BroadphaseCollision/btDispatcher.h" #include "BulletCollision/BroadphaseCollision/btBroadphaseInterface.h" #include "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h" class btDispatcher; #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" #include "BulletCollision/CollisionDispatch/btCollisionCreateFunc.h" #include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h" #include "LinearMath/btAlignedObjectArray.h" #include "btGImpactShape.h" #include "BulletCollision/CollisionShapes/btStaticPlaneShape.h" #include "BulletCollision/CollisionShapes/btCompoundShape.h" #include "BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.h" #include "LinearMath/btIDebugDraw.h" #include "BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h" //! Collision Algorithm for GImpact Shapes /*! For register this algorithm in Bullet, proceed as following: \code btCollisionDispatcher * dispatcher = static_cast(m_dynamicsWorld ->getDispatcher()); btGImpactCollisionAlgorithm::registerAlgorithm(dispatcher); \endcode */ class btGImpactCollisionAlgorithm : public btActivatingCollisionAlgorithm { protected: btCollisionAlgorithm* m_convex_algorithm; btPersistentManifold* m_manifoldPtr; btManifoldResult* m_resultOut; const btDispatcherInfo* m_dispatchInfo; int m_triface0; int m_part0; int m_triface1; int m_part1; //! Creates a new contact point SIMD_FORCE_INLINE btPersistentManifold* newContactManifold(const btCollisionObject* body0, const btCollisionObject* body1) { m_manifoldPtr = m_dispatcher->getNewManifold(body0, body1); return m_manifoldPtr; } SIMD_FORCE_INLINE void destroyConvexAlgorithm() { if (m_convex_algorithm) { m_convex_algorithm->~btCollisionAlgorithm(); m_dispatcher->freeCollisionAlgorithm(m_convex_algorithm); m_convex_algorithm = NULL; } } SIMD_FORCE_INLINE void destroyContactManifolds() { if (m_manifoldPtr == NULL) return; m_dispatcher->releaseManifold(m_manifoldPtr); m_manifoldPtr = NULL; } SIMD_FORCE_INLINE void clearCache() { destroyContactManifolds(); destroyConvexAlgorithm(); m_triface0 = -1; m_part0 = -1; m_triface1 = -1; m_part1 = -1; } SIMD_FORCE_INLINE btPersistentManifold* getLastManifold() { return m_manifoldPtr; } // Call before process collision SIMD_FORCE_INLINE void checkManifold(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap) { if (getLastManifold() == 0) { newContactManifold(body0Wrap->getCollisionObject(), body1Wrap->getCollisionObject()); } m_resultOut->setPersistentManifold(getLastManifold()); } // Call before process collision SIMD_FORCE_INLINE btCollisionAlgorithm* newAlgorithm(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap) { checkManifold(body0Wrap, body1Wrap); btCollisionAlgorithm* convex_algorithm = m_dispatcher->findAlgorithm( body0Wrap, body1Wrap, getLastManifold(), BT_CONTACT_POINT_ALGORITHMS); return convex_algorithm; } // Call before process collision SIMD_FORCE_INLINE void checkConvexAlgorithm(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap) { if (m_convex_algorithm) return; m_convex_algorithm = newAlgorithm(body0Wrap, body1Wrap); } void addContactPoint(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btVector3& point, const btVector3& normal, btScalar distance); //! Collision routines //!@{ void collide_gjk_triangles(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btGImpactMeshShapePart* shape0, const btGImpactMeshShapePart* shape1, const int* pairs, int pair_count); void collide_sat_triangles(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btGImpactMeshShapePart* shape0, const btGImpactMeshShapePart* shape1, const int* pairs, int pair_count); void shape_vs_shape_collision( const btCollisionObjectWrapper* body0, const btCollisionObjectWrapper* body1, const btCollisionShape* shape0, const btCollisionShape* shape1); void convex_vs_convex_collision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btCollisionShape* shape0, const btCollisionShape* shape1); void gimpact_vs_gimpact_find_pairs( const btTransform& trans0, const btTransform& trans1, const btGImpactShapeInterface* shape0, const btGImpactShapeInterface* shape1, btPairSet& pairset); void gimpact_vs_shape_find_pairs( const btTransform& trans0, const btTransform& trans1, const btGImpactShapeInterface* shape0, const btCollisionShape* shape1, btAlignedObjectArray& collided_primitives); void gimpacttrimeshpart_vs_plane_collision( const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btGImpactMeshShapePart* shape0, const btStaticPlaneShape* shape1, bool swapped); public: btGImpactCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap); virtual ~btGImpactCollisionAlgorithm(); virtual void processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut); btScalar calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut); virtual void getAllContactManifolds(btManifoldArray& manifoldArray) { if (m_manifoldPtr) manifoldArray.push_back(m_manifoldPtr); } btManifoldResult* internalGetResultOut() { return m_resultOut; } struct CreateFunc : public btCollisionAlgorithmCreateFunc { virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap) { void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btGImpactCollisionAlgorithm)); return new (mem) btGImpactCollisionAlgorithm(ci, body0Wrap, body1Wrap); } }; //! Use this function for register the algorithm externally static void registerAlgorithm(btCollisionDispatcher* dispatcher); #ifdef TRI_COLLISION_PROFILING //! Gets the average time in miliseconds of tree collisions static float getAverageTreeCollisionTime(); //! Gets the average time in miliseconds of triangle collisions static float getAverageTriangleCollisionTime(); #endif //TRI_COLLISION_PROFILING //! Collides two gimpact shapes /*! \pre shape0 and shape1 couldn't be btGImpactMeshShape objects */ void gimpact_vs_gimpact(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btGImpactShapeInterface* shape0, const btGImpactShapeInterface* shape1); void gimpact_vs_shape(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btGImpactShapeInterface* shape0, const btCollisionShape* shape1, bool swapped); void gimpact_vs_compoundshape(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btGImpactShapeInterface* shape0, const btCompoundShape* shape1, bool swapped); void gimpact_vs_concave( const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btGImpactShapeInterface* shape0, const btConcaveShape* shape1, bool swapped); /// Accessor/Mutator pairs for Part and triangleID void setFace0(int value) { m_triface0 = value; } int getFace0() { return m_triface0; } void setFace1(int value) { m_triface1 = value; } int getFace1() { return m_triface1; } void setPart0(int value) { m_part0 = value; } int getPart0() { return m_part0; } void setPart1(int value) { m_part1 = value; } int getPart1() { return m_part1; } }; //algorithm details //#define BULLET_TRIANGLE_COLLISION 1 #define GIMPACT_VS_PLANE_COLLISION 1 #endif //BT_GIMPACT_BVH_CONCAVE_COLLISION_ALGORITHM_H ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/btGImpactMassUtil.h ================================================ /*! \file btGImpactMassUtil.h \author Francisco Leon Najera */ /* This source file is part of GIMPACT Library. For the latest info, see http://gimpact.sourceforge.net/ Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371. email: projectileman@yahoo.com This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef GIMPACT_MASS_UTIL_H #define GIMPACT_MASS_UTIL_H #include "LinearMath/btTransform.h" SIMD_FORCE_INLINE btVector3 gim_inertia_add_transformed( const btVector3& source_inertia, const btVector3& added_inertia, const btTransform& transform) { btMatrix3x3 rotatedTensor = transform.getBasis().scaled(added_inertia) * transform.getBasis().transpose(); btScalar x2 = transform.getOrigin()[0]; x2 *= x2; btScalar y2 = transform.getOrigin()[1]; y2 *= y2; btScalar z2 = transform.getOrigin()[2]; z2 *= z2; btScalar ix = rotatedTensor[0][0] * (y2 + z2); btScalar iy = rotatedTensor[1][1] * (x2 + z2); btScalar iz = rotatedTensor[2][2] * (x2 + y2); return btVector3(source_inertia[0] + ix, source_inertia[1] + iy, source_inertia[2] + iz); } SIMD_FORCE_INLINE btVector3 gim_get_point_inertia(const btVector3& point, btScalar mass) { btScalar x2 = point[0] * point[0]; btScalar y2 = point[1] * point[1]; btScalar z2 = point[2] * point[2]; return btVector3(mass * (y2 + z2), mass * (x2 + z2), mass * (x2 + y2)); } #endif //GIMPACT_MESH_SHAPE_H ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/btGImpactQuantizedBvh.h ================================================ #ifndef GIM_QUANTIZED_SET_H_INCLUDED #define GIM_QUANTIZED_SET_H_INCLUDED /*! \file btGImpactQuantizedBvh.h \author Francisco Leon Najera */ /* This source file is part of GIMPACT Library. For the latest info, see http://gimpact.sourceforge.net/ Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371. email: projectileman@yahoo.com This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #include "btGImpactBvh.h" #include "btQuantization.h" #include "btGImpactQuantizedBvhStructs.h" class GIM_QUANTIZED_BVH_NODE_ARRAY : public btAlignedObjectArray { }; //! Basic Box tree structure class btQuantizedBvhTree { protected: int m_num_nodes; GIM_QUANTIZED_BVH_NODE_ARRAY m_node_array; btAABB m_global_bound; btVector3 m_bvhQuantization; protected: void calc_quantization(GIM_BVH_DATA_ARRAY& primitive_boxes, btScalar boundMargin = btScalar(1.0)); int _sort_and_calc_splitting_index( GIM_BVH_DATA_ARRAY& primitive_boxes, int startIndex, int endIndex, int splitAxis); int _calc_splitting_axis(GIM_BVH_DATA_ARRAY& primitive_boxes, int startIndex, int endIndex); void _build_sub_tree(GIM_BVH_DATA_ARRAY& primitive_boxes, int startIndex, int endIndex); public: btQuantizedBvhTree() { m_num_nodes = 0; } //! prototype functions for box tree management //!@{ void build_tree(GIM_BVH_DATA_ARRAY& primitive_boxes); SIMD_FORCE_INLINE void quantizePoint( unsigned short* quantizedpoint, const btVector3& point) const { bt_quantize_clamp(quantizedpoint, point, m_global_bound.m_min, m_global_bound.m_max, m_bvhQuantization); } SIMD_FORCE_INLINE bool testQuantizedBoxOverlapp( int node_index, unsigned short* quantizedMin, unsigned short* quantizedMax) const { return m_node_array[node_index].testQuantizedBoxOverlapp(quantizedMin, quantizedMax); } SIMD_FORCE_INLINE void clearNodes() { m_node_array.clear(); m_num_nodes = 0; } //! node count SIMD_FORCE_INLINE int getNodeCount() const { return m_num_nodes; } //! tells if the node is a leaf SIMD_FORCE_INLINE bool isLeafNode(int nodeindex) const { return m_node_array[nodeindex].isLeafNode(); } SIMD_FORCE_INLINE int getNodeData(int nodeindex) const { return m_node_array[nodeindex].getDataIndex(); } SIMD_FORCE_INLINE void getNodeBound(int nodeindex, btAABB& bound) const { bound.m_min = bt_unquantize( m_node_array[nodeindex].m_quantizedAabbMin, m_global_bound.m_min, m_bvhQuantization); bound.m_max = bt_unquantize( m_node_array[nodeindex].m_quantizedAabbMax, m_global_bound.m_min, m_bvhQuantization); } SIMD_FORCE_INLINE void setNodeBound(int nodeindex, const btAABB& bound) { bt_quantize_clamp(m_node_array[nodeindex].m_quantizedAabbMin, bound.m_min, m_global_bound.m_min, m_global_bound.m_max, m_bvhQuantization); bt_quantize_clamp(m_node_array[nodeindex].m_quantizedAabbMax, bound.m_max, m_global_bound.m_min, m_global_bound.m_max, m_bvhQuantization); } SIMD_FORCE_INLINE int getLeftNode(int nodeindex) const { return nodeindex + 1; } SIMD_FORCE_INLINE int getRightNode(int nodeindex) const { if (m_node_array[nodeindex + 1].isLeafNode()) return nodeindex + 2; return nodeindex + 1 + m_node_array[nodeindex + 1].getEscapeIndex(); } SIMD_FORCE_INLINE int getEscapeNodeIndex(int nodeindex) const { return m_node_array[nodeindex].getEscapeIndex(); } SIMD_FORCE_INLINE const BT_QUANTIZED_BVH_NODE* get_node_pointer(int index = 0) const { return &m_node_array[index]; } //!@} }; //! Structure for containing Boxes /*! This class offers an structure for managing a box tree of primitives. Requires a Primitive prototype (like btPrimitiveManagerBase ) */ class btGImpactQuantizedBvh { protected: btQuantizedBvhTree m_box_tree; btPrimitiveManagerBase* m_primitive_manager; protected: //stackless refit void refit(); public: //! this constructor doesn't build the tree. you must call buildSet btGImpactQuantizedBvh() { m_primitive_manager = NULL; } //! this constructor doesn't build the tree. you must call buildSet btGImpactQuantizedBvh(btPrimitiveManagerBase* primitive_manager) { m_primitive_manager = primitive_manager; } SIMD_FORCE_INLINE btAABB getGlobalBox() const { btAABB totalbox; getNodeBound(0, totalbox); return totalbox; } SIMD_FORCE_INLINE void setPrimitiveManager(btPrimitiveManagerBase* primitive_manager) { m_primitive_manager = primitive_manager; } SIMD_FORCE_INLINE btPrimitiveManagerBase* getPrimitiveManager() const { return m_primitive_manager; } //! node manager prototype functions ///@{ //! this attemps to refit the box set. SIMD_FORCE_INLINE void update() { refit(); } //! this rebuild the entire set void buildSet(); //! returns the indices of the primitives in the m_primitive_manager bool boxQuery(const btAABB& box, btAlignedObjectArray& collided_results) const; //! returns the indices of the primitives in the m_primitive_manager SIMD_FORCE_INLINE bool boxQueryTrans(const btAABB& box, const btTransform& transform, btAlignedObjectArray& collided_results) const { btAABB transbox = box; transbox.appy_transform(transform); return boxQuery(transbox, collided_results); } //! returns the indices of the primitives in the m_primitive_manager bool rayQuery( const btVector3& ray_dir, const btVector3& ray_origin, btAlignedObjectArray& collided_results) const; //! tells if this set has hierarcht SIMD_FORCE_INLINE bool hasHierarchy() const { return true; } //! tells if this set is a trimesh SIMD_FORCE_INLINE bool isTrimesh() const { return m_primitive_manager->is_trimesh(); } //! node count SIMD_FORCE_INLINE int getNodeCount() const { return m_box_tree.getNodeCount(); } //! tells if the node is a leaf SIMD_FORCE_INLINE bool isLeafNode(int nodeindex) const { return m_box_tree.isLeafNode(nodeindex); } SIMD_FORCE_INLINE int getNodeData(int nodeindex) const { return m_box_tree.getNodeData(nodeindex); } SIMD_FORCE_INLINE void getNodeBound(int nodeindex, btAABB& bound) const { m_box_tree.getNodeBound(nodeindex, bound); } SIMD_FORCE_INLINE void setNodeBound(int nodeindex, const btAABB& bound) { m_box_tree.setNodeBound(nodeindex, bound); } SIMD_FORCE_INLINE int getLeftNode(int nodeindex) const { return m_box_tree.getLeftNode(nodeindex); } SIMD_FORCE_INLINE int getRightNode(int nodeindex) const { return m_box_tree.getRightNode(nodeindex); } SIMD_FORCE_INLINE int getEscapeNodeIndex(int nodeindex) const { return m_box_tree.getEscapeNodeIndex(nodeindex); } SIMD_FORCE_INLINE void getNodeTriangle(int nodeindex, btPrimitiveTriangle& triangle) const { m_primitive_manager->get_primitive_triangle(getNodeData(nodeindex), triangle); } SIMD_FORCE_INLINE const BT_QUANTIZED_BVH_NODE* get_node_pointer(int index = 0) const { return m_box_tree.get_node_pointer(index); } #ifdef TRI_COLLISION_PROFILING static float getAverageTreeCollisionTime(); #endif //TRI_COLLISION_PROFILING static void find_collision(const btGImpactQuantizedBvh* boxset1, const btTransform& trans1, const btGImpactQuantizedBvh* boxset2, const btTransform& trans2, btPairSet& collision_pairs); }; #endif // GIM_BOXPRUNING_H_INCLUDED ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/btGImpactQuantizedBvhStructs.h ================================================ #ifndef GIM_QUANTIZED_SET_STRUCTS_H_INCLUDED #define GIM_QUANTIZED_SET_STRUCTS_H_INCLUDED /*! \file btGImpactQuantizedBvh.h \author Francisco Leon Najera */ /* This source file is part of GIMPACT Library. For the latest info, see http://gimpact.sourceforge.net/ Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371. email: projectileman@yahoo.com This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #include "btGImpactBvh.h" #include "btQuantization.h" ///btQuantizedBvhNode is a compressed aabb node, 16 bytes. ///Node can be used for leafnode or internal node. Leafnodes can point to 32-bit triangle index (non-negative range). ATTRIBUTE_ALIGNED16(struct) BT_QUANTIZED_BVH_NODE { //12 bytes unsigned short int m_quantizedAabbMin[3]; unsigned short int m_quantizedAabbMax[3]; //4 bytes int m_escapeIndexOrDataIndex; BT_QUANTIZED_BVH_NODE() { m_escapeIndexOrDataIndex = 0; } SIMD_FORCE_INLINE bool isLeafNode() const { //skipindex is negative (internal node), triangleindex >=0 (leafnode) return (m_escapeIndexOrDataIndex >= 0); } SIMD_FORCE_INLINE int getEscapeIndex() const { //btAssert(m_escapeIndexOrDataIndex < 0); return -m_escapeIndexOrDataIndex; } SIMD_FORCE_INLINE void setEscapeIndex(int index) { m_escapeIndexOrDataIndex = -index; } SIMD_FORCE_INLINE int getDataIndex() const { //btAssert(m_escapeIndexOrDataIndex >= 0); return m_escapeIndexOrDataIndex; } SIMD_FORCE_INLINE void setDataIndex(int index) { m_escapeIndexOrDataIndex = index; } SIMD_FORCE_INLINE bool testQuantizedBoxOverlapp( unsigned short* quantizedMin, unsigned short* quantizedMax) const { if (m_quantizedAabbMin[0] > quantizedMax[0] || m_quantizedAabbMax[0] < quantizedMin[0] || m_quantizedAabbMin[1] > quantizedMax[1] || m_quantizedAabbMax[1] < quantizedMin[1] || m_quantizedAabbMin[2] > quantizedMax[2] || m_quantizedAabbMax[2] < quantizedMin[2]) { return false; } return true; } }; #endif // GIM_QUANTIZED_SET_STRUCTS_H_INCLUDED ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/btGImpactShape.h ================================================ /*! \file btGImpactShape.h \author Francisco Len Njera */ /* This source file is part of GIMPACT Library. For the latest info, see http://gimpact.sourceforge.net/ Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371. email: projectileman@yahoo.com This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef GIMPACT_SHAPE_H #define GIMPACT_SHAPE_H #include "BulletCollision/CollisionShapes/btCollisionShape.h" #include "BulletCollision/CollisionShapes/btTriangleShape.h" #include "BulletCollision/CollisionShapes/btStridingMeshInterface.h" #include "BulletCollision/CollisionShapes/btCollisionMargin.h" #include "BulletCollision/CollisionDispatch/btCollisionWorld.h" #include "BulletCollision/CollisionShapes/btConcaveShape.h" #include "BulletCollision/CollisionShapes/btTetrahedronShape.h" #include "LinearMath/btVector3.h" #include "LinearMath/btTransform.h" #include "LinearMath/btMatrix3x3.h" #include "LinearMath/btAlignedObjectArray.h" #include "btGImpactQuantizedBvh.h" // box tree class //! declare Quantized trees, (you can change to float based trees) typedef btGImpactQuantizedBvh btGImpactBoxSet; enum eGIMPACT_SHAPE_TYPE { CONST_GIMPACT_COMPOUND_SHAPE = 0, CONST_GIMPACT_TRIMESH_SHAPE_PART, CONST_GIMPACT_TRIMESH_SHAPE }; //! Helper class for tetrahedrons class btTetrahedronShapeEx : public btBU_Simplex1to4 { public: btTetrahedronShapeEx() { m_numVertices = 4; } SIMD_FORCE_INLINE void setVertices( const btVector3& v0, const btVector3& v1, const btVector3& v2, const btVector3& v3) { m_vertices[0] = v0; m_vertices[1] = v1; m_vertices[2] = v2; m_vertices[3] = v3; recalcLocalAabb(); } }; //! Base class for gimpact shapes class btGImpactShapeInterface : public btConcaveShape { protected: btAABB m_localAABB; bool m_needs_update; btVector3 localScaling; btGImpactBoxSet m_box_set; // optionally boxset //! use this function for perfofm refit in bounding boxes //! use this function for perfofm refit in bounding boxes virtual void calcLocalAABB() { lockChildShapes(); if (m_box_set.getNodeCount() == 0) { m_box_set.buildSet(); } else { m_box_set.update(); } unlockChildShapes(); m_localAABB = m_box_set.getGlobalBox(); } public: btGImpactShapeInterface() { m_shapeType = GIMPACT_SHAPE_PROXYTYPE; m_localAABB.invalidate(); m_needs_update = true; localScaling.setValue(1.f, 1.f, 1.f); } //! performs refit operation /*! Updates the entire Box set of this shape. \pre postUpdate() must be called for attemps to calculating the box set, else this function will does nothing. \post if m_needs_update == true, then it calls calcLocalAABB(); */ SIMD_FORCE_INLINE void updateBound() { if (!m_needs_update) return; calcLocalAABB(); m_needs_update = false; } //! If the Bounding box is not updated, then this class attemps to calculate it. /*! \post Calls updateBound() for update the box set. */ void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const { btAABB transformedbox = m_localAABB; transformedbox.appy_transform(t); aabbMin = transformedbox.m_min; aabbMax = transformedbox.m_max; } //! Tells to this object that is needed to refit the box set virtual void postUpdate() { m_needs_update = true; } //! Obtains the local box, which is the global calculated box of the total of subshapes SIMD_FORCE_INLINE const btAABB& getLocalBox() { return m_localAABB; } virtual int getShapeType() const { return GIMPACT_SHAPE_PROXYTYPE; } /*! \post You must call updateBound() for update the box set. */ virtual void setLocalScaling(const btVector3& scaling) { localScaling = scaling; postUpdate(); } virtual const btVector3& getLocalScaling() const { return localScaling; } virtual void setMargin(btScalar margin) { m_collisionMargin = margin; int i = getNumChildShapes(); while (i--) { btCollisionShape* child = getChildShape(i); child->setMargin(margin); } m_needs_update = true; } //! Subshape member functions //!@{ //! Base method for determinig which kind of GIMPACT shape we get virtual eGIMPACT_SHAPE_TYPE getGImpactShapeType() const = 0; //! gets boxset SIMD_FORCE_INLINE const btGImpactBoxSet* getBoxSet() const { return &m_box_set; } //! Determines if this class has a hierarchy structure for sorting its primitives SIMD_FORCE_INLINE bool hasBoxSet() const { if (m_box_set.getNodeCount() == 0) return false; return true; } //! Obtains the primitive manager virtual const btPrimitiveManagerBase* getPrimitiveManager() const = 0; //! Gets the number of children virtual int getNumChildShapes() const = 0; //! if true, then its children must get transforms. virtual bool childrenHasTransform() const = 0; //! Determines if this shape has triangles virtual bool needsRetrieveTriangles() const = 0; //! Determines if this shape has tetrahedrons virtual bool needsRetrieveTetrahedrons() const = 0; virtual void getBulletTriangle(int prim_index, btTriangleShapeEx& triangle) const = 0; virtual void getBulletTetrahedron(int prim_index, btTetrahedronShapeEx& tetrahedron) const = 0; //! call when reading child shapes virtual void lockChildShapes() const { } virtual void unlockChildShapes() const { } //! if this trimesh SIMD_FORCE_INLINE void getPrimitiveTriangle(int index, btPrimitiveTriangle& triangle) const { getPrimitiveManager()->get_primitive_triangle(index, triangle); } //! Retrieves the bound from a child /*! */ virtual void getChildAabb(int child_index, const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const { btAABB child_aabb; getPrimitiveManager()->get_primitive_box(child_index, child_aabb); child_aabb.appy_transform(t); aabbMin = child_aabb.m_min; aabbMax = child_aabb.m_max; } //! Gets the children virtual btCollisionShape* getChildShape(int index) = 0; //! Gets the child virtual const btCollisionShape* getChildShape(int index) const = 0; //! Gets the children transform virtual btTransform getChildTransform(int index) const = 0; //! Sets the children transform /*! \post You must call updateBound() for update the box set. */ virtual void setChildTransform(int index, const btTransform& transform) = 0; //!@} //! virtual method for ray collision virtual void rayTest(const btVector3& rayFrom, const btVector3& rayTo, btCollisionWorld::RayResultCallback& resultCallback) const { (void)rayFrom; (void)rayTo; (void)resultCallback; } //! Function for retrieve triangles. /*! It gives the triangles in local space */ virtual void processAllTriangles(btTriangleCallback* callback, const btVector3& aabbMin, const btVector3& aabbMax) const { (void)callback; (void)aabbMin; (void)aabbMax; } //! Function for retrieve triangles. /*! It gives the triangles in local space */ virtual void processAllTrianglesRay(btTriangleCallback* /*callback*/, const btVector3& /*rayFrom*/, const btVector3& /*rayTo*/) const { } //!@} }; //! btGImpactCompoundShape allows to handle multiple btCollisionShape objects at once /*! This class only can manage Convex subshapes */ class btGImpactCompoundShape : public btGImpactShapeInterface { public: //! compound primitive manager class CompoundPrimitiveManager : public btPrimitiveManagerBase { public: virtual ~CompoundPrimitiveManager() {} btGImpactCompoundShape* m_compoundShape; CompoundPrimitiveManager(const CompoundPrimitiveManager& compound) : btPrimitiveManagerBase() { m_compoundShape = compound.m_compoundShape; } CompoundPrimitiveManager(btGImpactCompoundShape* compoundShape) { m_compoundShape = compoundShape; } CompoundPrimitiveManager() { m_compoundShape = NULL; } virtual bool is_trimesh() const { return false; } virtual int get_primitive_count() const { return (int)m_compoundShape->getNumChildShapes(); } virtual void get_primitive_box(int prim_index, btAABB& primbox) const { btTransform prim_trans; if (m_compoundShape->childrenHasTransform()) { prim_trans = m_compoundShape->getChildTransform(prim_index); } else { prim_trans.setIdentity(); } const btCollisionShape* shape = m_compoundShape->getChildShape(prim_index); shape->getAabb(prim_trans, primbox.m_min, primbox.m_max); } virtual void get_primitive_triangle(int prim_index, btPrimitiveTriangle& triangle) const { btAssert(0); (void)prim_index; (void)triangle; } }; protected: CompoundPrimitiveManager m_primitive_manager; btAlignedObjectArray m_childTransforms; btAlignedObjectArray m_childShapes; public: btGImpactCompoundShape(bool children_has_transform = true) { (void)children_has_transform; m_primitive_manager.m_compoundShape = this; m_box_set.setPrimitiveManager(&m_primitive_manager); } virtual ~btGImpactCompoundShape() { } //! if true, then its children must get transforms. virtual bool childrenHasTransform() const { if (m_childTransforms.size() == 0) return false; return true; } //! Obtains the primitive manager virtual const btPrimitiveManagerBase* getPrimitiveManager() const { return &m_primitive_manager; } //! Obtains the compopund primitive manager SIMD_FORCE_INLINE CompoundPrimitiveManager* getCompoundPrimitiveManager() { return &m_primitive_manager; } //! Gets the number of children virtual int getNumChildShapes() const { return m_childShapes.size(); } //! Use this method for adding children. Only Convex shapes are allowed. void addChildShape(const btTransform& localTransform, btCollisionShape* shape) { btAssert(shape->isConvex()); m_childTransforms.push_back(localTransform); m_childShapes.push_back(shape); } //! Use this method for adding children. Only Convex shapes are allowed. void addChildShape(btCollisionShape* shape) { btAssert(shape->isConvex()); m_childShapes.push_back(shape); } //! Gets the children virtual btCollisionShape* getChildShape(int index) { return m_childShapes[index]; } //! Gets the children virtual const btCollisionShape* getChildShape(int index) const { return m_childShapes[index]; } //! Retrieves the bound from a child /*! */ virtual void getChildAabb(int child_index, const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const { if (childrenHasTransform()) { m_childShapes[child_index]->getAabb(t * m_childTransforms[child_index], aabbMin, aabbMax); } else { m_childShapes[child_index]->getAabb(t, aabbMin, aabbMax); } } //! Gets the children transform virtual btTransform getChildTransform(int index) const { btAssert(m_childTransforms.size() == m_childShapes.size()); return m_childTransforms[index]; } //! Sets the children transform /*! \post You must call updateBound() for update the box set. */ virtual void setChildTransform(int index, const btTransform& transform) { btAssert(m_childTransforms.size() == m_childShapes.size()); m_childTransforms[index] = transform; postUpdate(); } //! Determines if this shape has triangles virtual bool needsRetrieveTriangles() const { return false; } //! Determines if this shape has tetrahedrons virtual bool needsRetrieveTetrahedrons() const { return false; } virtual void getBulletTriangle(int prim_index, btTriangleShapeEx& triangle) const { (void)prim_index; (void)triangle; btAssert(0); } virtual void getBulletTetrahedron(int prim_index, btTetrahedronShapeEx& tetrahedron) const { (void)prim_index; (void)tetrahedron; btAssert(0); } //! Calculates the exact inertia tensor for this shape virtual void calculateLocalInertia(btScalar mass, btVector3& inertia) const; virtual const char* getName() const { return "GImpactCompound"; } virtual eGIMPACT_SHAPE_TYPE getGImpactShapeType() const { return CONST_GIMPACT_COMPOUND_SHAPE; } }; //! This class manages a sub part of a mesh supplied by the btStridingMeshInterface interface. /*! - Simply create this shape by passing the btStridingMeshInterface to the constructor btGImpactMeshShapePart, then you must call updateBound() after creating the mesh - When making operations with this shape, you must call lock before accessing to the trimesh primitives, and then call unlock - You can handle deformable meshes with this shape, by calling postUpdate() every time when changing the mesh vertices. */ class btGImpactMeshShapePart : public btGImpactShapeInterface { public: //! Trimesh primitive manager /*! Manages the info from btStridingMeshInterface object and controls the Lock/Unlock mechanism */ class TrimeshPrimitiveManager : public btPrimitiveManagerBase { public: btScalar m_margin; btStridingMeshInterface* m_meshInterface; btVector3 m_scale; int m_part; int m_lock_count; const unsigned char* vertexbase; int numverts; PHY_ScalarType type; int stride; const unsigned char* indexbase; int indexstride; int numfaces; PHY_ScalarType indicestype; TrimeshPrimitiveManager() { m_meshInterface = NULL; m_part = 0; m_margin = 0.01f; m_scale = btVector3(1.f, 1.f, 1.f); m_lock_count = 0; vertexbase = 0; numverts = 0; stride = 0; indexbase = 0; indexstride = 0; numfaces = 0; } TrimeshPrimitiveManager(const TrimeshPrimitiveManager& manager) : btPrimitiveManagerBase() { m_meshInterface = manager.m_meshInterface; m_part = manager.m_part; m_margin = manager.m_margin; m_scale = manager.m_scale; m_lock_count = 0; vertexbase = 0; numverts = 0; stride = 0; indexbase = 0; indexstride = 0; numfaces = 0; } TrimeshPrimitiveManager( btStridingMeshInterface* meshInterface, int part) { m_meshInterface = meshInterface; m_part = part; m_scale = m_meshInterface->getScaling(); m_margin = 0.1f; m_lock_count = 0; vertexbase = 0; numverts = 0; stride = 0; indexbase = 0; indexstride = 0; numfaces = 0; } virtual ~TrimeshPrimitiveManager() {} void lock() { if (m_lock_count > 0) { m_lock_count++; return; } m_meshInterface->getLockedReadOnlyVertexIndexBase( &vertexbase, numverts, type, stride, &indexbase, indexstride, numfaces, indicestype, m_part); m_lock_count = 1; } void unlock() { if (m_lock_count == 0) return; if (m_lock_count > 1) { --m_lock_count; return; } m_meshInterface->unLockReadOnlyVertexBase(m_part); vertexbase = NULL; m_lock_count = 0; } virtual bool is_trimesh() const { return true; } virtual int get_primitive_count() const { return (int)numfaces; } SIMD_FORCE_INLINE int get_vertex_count() const { return (int)numverts; } SIMD_FORCE_INLINE void get_indices(int face_index, unsigned int& i0, unsigned int& i1, unsigned int& i2) const { if (indicestype == PHY_SHORT) { unsigned short* s_indices = (unsigned short*)(indexbase + face_index * indexstride); i0 = s_indices[0]; i1 = s_indices[1]; i2 = s_indices[2]; } else if (indicestype == PHY_INTEGER) { unsigned int* i_indices = (unsigned int*)(indexbase + face_index * indexstride); i0 = i_indices[0]; i1 = i_indices[1]; i2 = i_indices[2]; } else { btAssert(indicestype == PHY_UCHAR); unsigned char* i_indices = (unsigned char*)(indexbase + face_index * indexstride); i0 = i_indices[0]; i1 = i_indices[1]; i2 = i_indices[2]; } } SIMD_FORCE_INLINE void get_vertex(unsigned int vertex_index, btVector3& vertex) const { if (type == PHY_DOUBLE) { double* dvertices = (double*)(vertexbase + vertex_index * stride); vertex[0] = btScalar(dvertices[0] * m_scale[0]); vertex[1] = btScalar(dvertices[1] * m_scale[1]); vertex[2] = btScalar(dvertices[2] * m_scale[2]); } else { float* svertices = (float*)(vertexbase + vertex_index * stride); vertex[0] = svertices[0] * m_scale[0]; vertex[1] = svertices[1] * m_scale[1]; vertex[2] = svertices[2] * m_scale[2]; } } virtual void get_primitive_box(int prim_index, btAABB& primbox) const { btPrimitiveTriangle triangle; get_primitive_triangle(prim_index, triangle); primbox.calc_from_triangle_margin( triangle.m_vertices[0], triangle.m_vertices[1], triangle.m_vertices[2], triangle.m_margin); } virtual void get_primitive_triangle(int prim_index, btPrimitiveTriangle& triangle) const { unsigned int indices[3]; get_indices(prim_index, indices[0], indices[1], indices[2]); get_vertex(indices[0], triangle.m_vertices[0]); get_vertex(indices[1], triangle.m_vertices[1]); get_vertex(indices[2], triangle.m_vertices[2]); triangle.m_margin = m_margin; } SIMD_FORCE_INLINE void get_bullet_triangle(int prim_index, btTriangleShapeEx& triangle) const { unsigned int indices[3]; get_indices(prim_index, indices[0], indices[1], indices[2]); get_vertex(indices[0], triangle.m_vertices1[0]); get_vertex(indices[1], triangle.m_vertices1[1]); get_vertex(indices[2], triangle.m_vertices1[2]); triangle.setMargin(m_margin); } }; protected: TrimeshPrimitiveManager m_primitive_manager; public: btGImpactMeshShapePart() { m_box_set.setPrimitiveManager(&m_primitive_manager); } btGImpactMeshShapePart(btStridingMeshInterface* meshInterface, int part); virtual ~btGImpactMeshShapePart(); //! if true, then its children must get transforms. virtual bool childrenHasTransform() const { return false; } //! call when reading child shapes virtual void lockChildShapes() const; virtual void unlockChildShapes() const; //! Gets the number of children virtual int getNumChildShapes() const { return m_primitive_manager.get_primitive_count(); } //! Gets the children virtual btCollisionShape* getChildShape(int index) { (void)index; btAssert(0); return NULL; } //! Gets the child virtual const btCollisionShape* getChildShape(int index) const { (void)index; btAssert(0); return NULL; } //! Gets the children transform virtual btTransform getChildTransform(int index) const { (void)index; btAssert(0); return btTransform(); } //! Sets the children transform /*! \post You must call updateBound() for update the box set. */ virtual void setChildTransform(int index, const btTransform& transform) { (void)index; (void)transform; btAssert(0); } //! Obtains the primitive manager virtual const btPrimitiveManagerBase* getPrimitiveManager() const { return &m_primitive_manager; } SIMD_FORCE_INLINE TrimeshPrimitiveManager* getTrimeshPrimitiveManager() { return &m_primitive_manager; } virtual void calculateLocalInertia(btScalar mass, btVector3& inertia) const; virtual const char* getName() const { return "GImpactMeshShapePart"; } virtual eGIMPACT_SHAPE_TYPE getGImpactShapeType() const { return CONST_GIMPACT_TRIMESH_SHAPE_PART; } //! Determines if this shape has triangles virtual bool needsRetrieveTriangles() const { return true; } //! Determines if this shape has tetrahedrons virtual bool needsRetrieveTetrahedrons() const { return false; } virtual void getBulletTriangle(int prim_index, btTriangleShapeEx& triangle) const { m_primitive_manager.get_bullet_triangle(prim_index, triangle); } virtual void getBulletTetrahedron(int prim_index, btTetrahedronShapeEx& tetrahedron) const { (void)prim_index; (void)tetrahedron; btAssert(0); } SIMD_FORCE_INLINE int getVertexCount() const { return m_primitive_manager.get_vertex_count(); } SIMD_FORCE_INLINE void getVertex(int vertex_index, btVector3& vertex) const { m_primitive_manager.get_vertex(vertex_index, vertex); } SIMD_FORCE_INLINE void setMargin(btScalar margin) { m_primitive_manager.m_margin = margin; postUpdate(); } SIMD_FORCE_INLINE btScalar getMargin() const { return m_primitive_manager.m_margin; } virtual void setLocalScaling(const btVector3& scaling) { m_primitive_manager.m_scale = scaling; postUpdate(); } virtual const btVector3& getLocalScaling() const { return m_primitive_manager.m_scale; } SIMD_FORCE_INLINE int getPart() const { return (int)m_primitive_manager.m_part; } virtual void processAllTriangles(btTriangleCallback* callback, const btVector3& aabbMin, const btVector3& aabbMax) const; virtual void processAllTrianglesRay(btTriangleCallback* callback, const btVector3& rayFrom, const btVector3& rayTo) const; }; //! This class manages a mesh supplied by the btStridingMeshInterface interface. /*! Set of btGImpactMeshShapePart parts - Simply create this shape by passing the btStridingMeshInterface to the constructor btGImpactMeshShape, then you must call updateBound() after creating the mesh - You can handle deformable meshes with this shape, by calling postUpdate() every time when changing the mesh vertices. */ class btGImpactMeshShape : public btGImpactShapeInterface { btStridingMeshInterface* m_meshInterface; protected: btAlignedObjectArray m_mesh_parts; void buildMeshParts(btStridingMeshInterface* meshInterface) { for (int i = 0; i < meshInterface->getNumSubParts(); ++i) { btGImpactMeshShapePart* newpart = new btGImpactMeshShapePart(meshInterface, i); m_mesh_parts.push_back(newpart); } } //! use this function for perfofm refit in bounding boxes virtual void calcLocalAABB() { m_localAABB.invalidate(); int i = m_mesh_parts.size(); while (i--) { m_mesh_parts[i]->updateBound(); m_localAABB.merge(m_mesh_parts[i]->getLocalBox()); } } public: btGImpactMeshShape(btStridingMeshInterface* meshInterface) { m_meshInterface = meshInterface; buildMeshParts(meshInterface); } virtual ~btGImpactMeshShape() { int i = m_mesh_parts.size(); while (i--) { btGImpactMeshShapePart* part = m_mesh_parts[i]; delete part; } m_mesh_parts.clear(); } btStridingMeshInterface* getMeshInterface() { return m_meshInterface; } const btStridingMeshInterface* getMeshInterface() const { return m_meshInterface; } int getMeshPartCount() const { return m_mesh_parts.size(); } btGImpactMeshShapePart* getMeshPart(int index) { return m_mesh_parts[index]; } const btGImpactMeshShapePart* getMeshPart(int index) const { return m_mesh_parts[index]; } virtual void setLocalScaling(const btVector3& scaling) { localScaling = scaling; int i = m_mesh_parts.size(); while (i--) { btGImpactMeshShapePart* part = m_mesh_parts[i]; part->setLocalScaling(scaling); } m_needs_update = true; } virtual void setMargin(btScalar margin) { m_collisionMargin = margin; int i = m_mesh_parts.size(); while (i--) { btGImpactMeshShapePart* part = m_mesh_parts[i]; part->setMargin(margin); } m_needs_update = true; } //! Tells to this object that is needed to refit all the meshes virtual void postUpdate() { int i = m_mesh_parts.size(); while (i--) { btGImpactMeshShapePart* part = m_mesh_parts[i]; part->postUpdate(); } m_needs_update = true; } virtual void calculateLocalInertia(btScalar mass, btVector3& inertia) const; //! Obtains the primitive manager virtual const btPrimitiveManagerBase* getPrimitiveManager() const { btAssert(0); return NULL; } //! Gets the number of children virtual int getNumChildShapes() const { btAssert(0); return 0; } //! if true, then its children must get transforms. virtual bool childrenHasTransform() const { btAssert(0); return false; } //! Determines if this shape has triangles virtual bool needsRetrieveTriangles() const { btAssert(0); return false; } //! Determines if this shape has tetrahedrons virtual bool needsRetrieveTetrahedrons() const { btAssert(0); return false; } virtual void getBulletTriangle(int prim_index, btTriangleShapeEx& triangle) const { (void)prim_index; (void)triangle; btAssert(0); } virtual void getBulletTetrahedron(int prim_index, btTetrahedronShapeEx& tetrahedron) const { (void)prim_index; (void)tetrahedron; btAssert(0); } //! call when reading child shapes virtual void lockChildShapes() const { btAssert(0); } virtual void unlockChildShapes() const { btAssert(0); } //! Retrieves the bound from a child /*! */ virtual void getChildAabb(int child_index, const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const { (void)child_index; (void)t; (void)aabbMin; (void)aabbMax; btAssert(0); } //! Gets the children virtual btCollisionShape* getChildShape(int index) { (void)index; btAssert(0); return NULL; } //! Gets the child virtual const btCollisionShape* getChildShape(int index) const { (void)index; btAssert(0); return NULL; } //! Gets the children transform virtual btTransform getChildTransform(int index) const { (void)index; btAssert(0); return btTransform(); } //! Sets the children transform /*! \post You must call updateBound() for update the box set. */ virtual void setChildTransform(int index, const btTransform& transform) { (void)index; (void)transform; btAssert(0); } virtual eGIMPACT_SHAPE_TYPE getGImpactShapeType() const { return CONST_GIMPACT_TRIMESH_SHAPE; } virtual const char* getName() const { return "GImpactMesh"; } virtual void rayTest(const btVector3& rayFrom, const btVector3& rayTo, btCollisionWorld::RayResultCallback& resultCallback) const; //! Function for retrieve triangles. /*! It gives the triangles in local space */ virtual void processAllTriangles(btTriangleCallback* callback, const btVector3& aabbMin, const btVector3& aabbMax) const; virtual void processAllTrianglesRay(btTriangleCallback* callback, const btVector3& rayFrom, const btVector3& rayTo) const; virtual int calculateSerializeBufferSize() const; ///fills the dataBuffer and returns the struct name (and 0 on failure) virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; }; ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 struct btGImpactMeshShapeData { btCollisionShapeData m_collisionShapeData; btStridingMeshInterfaceData m_meshInterface; btVector3FloatData m_localScaling; float m_collisionMargin; int m_gimpactSubType; }; SIMD_FORCE_INLINE int btGImpactMeshShape::calculateSerializeBufferSize() const { return sizeof(btGImpactMeshShapeData); } #endif //GIMPACT_MESH_SHAPE_H ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/btGenericPoolAllocator.h ================================================ /*! \file btGenericPoolAllocator.h \author Francisco Leon Najera. email projectileman@yahoo.com General purpose allocator class */ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_GENERIC_POOL_ALLOCATOR_H #define BT_GENERIC_POOL_ALLOCATOR_H #include #include #include #include "LinearMath/btAlignedAllocator.h" #define BT_UINT_MAX UINT_MAX #define BT_DEFAULT_MAX_POOLS 16 //! Generic Pool class class btGenericMemoryPool { public: unsigned char *m_pool; //[m_element_size*m_max_element_count]; size_t *m_free_nodes; //[m_max_element_count];//! free nodes size_t *m_allocated_sizes; //[m_max_element_count];//! Number of elements allocated per node size_t m_allocated_count; size_t m_free_nodes_count; protected: size_t m_element_size; size_t m_max_element_count; size_t allocate_from_free_nodes(size_t num_elements); size_t allocate_from_pool(size_t num_elements); public: void init_pool(size_t element_size, size_t element_count); void end_pool(); btGenericMemoryPool(size_t element_size, size_t element_count) { init_pool(element_size, element_count); } ~btGenericMemoryPool() { end_pool(); } inline size_t get_pool_capacity() { return m_element_size * m_max_element_count; } inline size_t gem_element_size() { return m_element_size; } inline size_t get_max_element_count() { return m_max_element_count; } inline size_t get_allocated_count() { return m_allocated_count; } inline size_t get_free_positions_count() { return m_free_nodes_count; } inline void *get_element_data(size_t element_index) { return &m_pool[element_index * m_element_size]; } //! Allocates memory in pool /*! \param size_bytes size in bytes of the buffer */ void *allocate(size_t size_bytes); bool freeMemory(void *pointer); }; //! Generic Allocator with pools /*! General purpose Allocator which can create Memory Pools dynamiacally as needed. */ class btGenericPoolAllocator { protected: size_t m_pool_element_size; size_t m_pool_element_count; public: btGenericMemoryPool *m_pools[BT_DEFAULT_MAX_POOLS]; size_t m_pool_count; inline size_t get_pool_capacity() { return m_pool_element_size * m_pool_element_count; } protected: // creates a pool btGenericMemoryPool *push_new_pool(); void *failback_alloc(size_t size_bytes); bool failback_free(void *pointer); public: btGenericPoolAllocator(size_t pool_element_size, size_t pool_element_count) { m_pool_count = 0; m_pool_element_size = pool_element_size; m_pool_element_count = pool_element_count; } virtual ~btGenericPoolAllocator(); //! Allocates memory in pool /*! \param size_bytes size in bytes of the buffer */ void *allocate(size_t size_bytes); bool freeMemory(void *pointer); }; void *btPoolAlloc(size_t size); void *btPoolRealloc(void *ptr, size_t oldsize, size_t newsize); void btPoolFree(void *ptr); #endif ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/btGeometryOperations.h ================================================ #ifndef BT_BASIC_GEOMETRY_OPERATIONS_H_INCLUDED #define BT_BASIC_GEOMETRY_OPERATIONS_H_INCLUDED /*! \file btGeometryOperations.h *\author Francisco Leon Najera */ /* This source file is part of GIMPACT Library. For the latest info, see http://gimpact.sourceforge.net/ Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371. email: projectileman@yahoo.com This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #include "btBoxCollision.h" #define PLANEDIREPSILON 0.0000001f #define PARALELENORMALS 0.000001f #define BT_CLAMP(number, minval, maxval) (number < minval ? minval : (number > maxval ? maxval : number)) /// Calc a plane from a triangle edge an a normal. plane is a vec4f SIMD_FORCE_INLINE void bt_edge_plane(const btVector3 &e1, const btVector3 &e2, const btVector3 &normal, btVector4 &plane) { btVector3 planenormal = (e2 - e1).cross(normal); planenormal.normalize(); plane.setValue(planenormal[0], planenormal[1], planenormal[2], e2.dot(planenormal)); } //***************** SEGMENT and LINE FUNCTIONS **********************************/// /*! Finds the closest point(cp) to (v) on a segment (e1,e2) */ SIMD_FORCE_INLINE void bt_closest_point_on_segment( btVector3 &cp, const btVector3 &v, const btVector3 &e1, const btVector3 &e2) { btVector3 n = e2 - e1; cp = v - e1; btScalar _scalar = cp.dot(n) / n.dot(n); if (_scalar < 0.0f) { cp = e1; } else if (_scalar > 1.0f) { cp = e2; } else { cp = _scalar * n + e1; } } //! line plane collision /*! *\return -0 if the ray never intersects -1 if the ray collides in front -2 if the ray collides in back */ SIMD_FORCE_INLINE int bt_line_plane_collision( const btVector4 &plane, const btVector3 &vDir, const btVector3 &vPoint, btVector3 &pout, btScalar &tparam, btScalar tmin, btScalar tmax) { btScalar _dotdir = vDir.dot(plane); if (btFabs(_dotdir) < PLANEDIREPSILON) { tparam = tmax; return 0; } btScalar _dis = bt_distance_point_plane(plane, vPoint); char returnvalue = _dis < 0.0f ? 2 : 1; tparam = -_dis / _dotdir; if (tparam < tmin) { returnvalue = 0; tparam = tmin; } else if (tparam > tmax) { returnvalue = 0; tparam = tmax; } pout = tparam * vDir + vPoint; return returnvalue; } //! Find closest points on segments SIMD_FORCE_INLINE void bt_segment_collision( const btVector3 &vA1, const btVector3 &vA2, const btVector3 &vB1, const btVector3 &vB2, btVector3 &vPointA, btVector3 &vPointB) { btVector3 AD = vA2 - vA1; btVector3 BD = vB2 - vB1; btVector3 N = AD.cross(BD); btScalar tp = N.length2(); btVector4 _M; //plane if (tp < SIMD_EPSILON) //ARE PARALELE { //project B over A bool invert_b_order = false; _M[0] = vB1.dot(AD); _M[1] = vB2.dot(AD); if (_M[0] > _M[1]) { invert_b_order = true; BT_SWAP_NUMBERS(_M[0], _M[1]); } _M[2] = vA1.dot(AD); _M[3] = vA2.dot(AD); //mid points N[0] = (_M[0] + _M[1]) * 0.5f; N[1] = (_M[2] + _M[3]) * 0.5f; if (N[0] < N[1]) { if (_M[1] < _M[2]) { vPointB = invert_b_order ? vB1 : vB2; vPointA = vA1; } else if (_M[1] < _M[3]) { vPointB = invert_b_order ? vB1 : vB2; bt_closest_point_on_segment(vPointA, vPointB, vA1, vA2); } else { vPointA = vA2; bt_closest_point_on_segment(vPointB, vPointA, vB1, vB2); } } else { if (_M[3] < _M[0]) { vPointB = invert_b_order ? vB2 : vB1; vPointA = vA2; } else if (_M[3] < _M[1]) { vPointA = vA2; bt_closest_point_on_segment(vPointB, vPointA, vB1, vB2); } else { vPointB = invert_b_order ? vB1 : vB2; bt_closest_point_on_segment(vPointA, vPointB, vA1, vA2); } } return; } N = N.cross(BD); _M.setValue(N[0], N[1], N[2], vB1.dot(N)); // get point A as the plane collision point bt_line_plane_collision(_M, AD, vA1, vPointA, tp, btScalar(0), btScalar(1)); /*Closest point on segment*/ vPointB = vPointA - vB1; tp = vPointB.dot(BD); tp /= BD.dot(BD); tp = BT_CLAMP(tp, 0.0f, 1.0f); vPointB = tp * BD + vB1; } #endif // GIM_VECTOR_H_INCLUDED ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/btQuantization.h ================================================ #ifndef BT_GIMPACT_QUANTIZATION_H_INCLUDED #define BT_GIMPACT_QUANTIZATION_H_INCLUDED /*! \file btQuantization.h *\author Francisco Leon Najera */ /* This source file is part of GIMPACT Library. For the latest info, see http://gimpact.sourceforge.net/ Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371. email: projectileman@yahoo.com This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #include "LinearMath/btTransform.h" SIMD_FORCE_INLINE void bt_calc_quantization_parameters( btVector3& outMinBound, btVector3& outMaxBound, btVector3& bvhQuantization, const btVector3& srcMinBound, const btVector3& srcMaxBound, btScalar quantizationMargin) { //enlarge the AABB to avoid division by zero when initializing the quantization values btVector3 clampValue(quantizationMargin, quantizationMargin, quantizationMargin); outMinBound = srcMinBound - clampValue; outMaxBound = srcMaxBound + clampValue; btVector3 aabbSize = outMaxBound - outMinBound; bvhQuantization = btVector3(btScalar(65535.0), btScalar(65535.0), btScalar(65535.0)) / aabbSize; } SIMD_FORCE_INLINE void bt_quantize_clamp( unsigned short* out, const btVector3& point, const btVector3& min_bound, const btVector3& max_bound, const btVector3& bvhQuantization) { btVector3 clampedPoint(point); clampedPoint.setMax(min_bound); clampedPoint.setMin(max_bound); btVector3 v = (clampedPoint - min_bound) * bvhQuantization; out[0] = (unsigned short)(v.getX() + 0.5f); out[1] = (unsigned short)(v.getY() + 0.5f); out[2] = (unsigned short)(v.getZ() + 0.5f); } SIMD_FORCE_INLINE btVector3 bt_unquantize( const unsigned short* vecIn, const btVector3& offset, const btVector3& bvhQuantization) { btVector3 vecOut; vecOut.setValue( (btScalar)(vecIn[0]) / (bvhQuantization.getX()), (btScalar)(vecIn[1]) / (bvhQuantization.getY()), (btScalar)(vecIn[2]) / (bvhQuantization.getZ())); vecOut += offset; return vecOut; } #endif // BT_GIMPACT_QUANTIZATION_H_INCLUDED ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/btTriangleShapeEx.h ================================================ /*! \file btGImpactShape.h \author Francisco Leon Najera */ /* This source file is part of GIMPACT Library. For the latest info, see http://gimpact.sourceforge.net/ Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371. email: projectileman@yahoo.com This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef GIMPACT_TRIANGLE_SHAPE_EX_H #define GIMPACT_TRIANGLE_SHAPE_EX_H #include "BulletCollision/CollisionShapes/btCollisionShape.h" #include "BulletCollision/CollisionShapes/btTriangleShape.h" #include "btBoxCollision.h" #include "btClipPolygon.h" #include "btGeometryOperations.h" #define MAX_TRI_CLIPPING 16 //! Structure for collision struct GIM_TRIANGLE_CONTACT { btScalar m_penetration_depth; int m_point_count; btVector4 m_separating_normal; btVector3 m_points[MAX_TRI_CLIPPING]; SIMD_FORCE_INLINE void copy_from(const GIM_TRIANGLE_CONTACT& other) { m_penetration_depth = other.m_penetration_depth; m_separating_normal = other.m_separating_normal; m_point_count = other.m_point_count; int i = m_point_count; while (i--) { m_points[i] = other.m_points[i]; } } GIM_TRIANGLE_CONTACT() { } GIM_TRIANGLE_CONTACT(const GIM_TRIANGLE_CONTACT& other) { copy_from(other); } //! classify points that are closer void merge_points(const btVector4& plane, btScalar margin, const btVector3* points, int point_count); }; class btPrimitiveTriangle { public: btVector3 m_vertices[3]; btVector4 m_plane; btScalar m_margin; btScalar m_dummy; btPrimitiveTriangle() : m_margin(0.01f) { } SIMD_FORCE_INLINE void buildTriPlane() { btVector3 normal = (m_vertices[1] - m_vertices[0]).cross(m_vertices[2] - m_vertices[0]); normal.normalize(); m_plane.setValue(normal[0], normal[1], normal[2], m_vertices[0].dot(normal)); } //! Test if triangles could collide bool overlap_test_conservative(const btPrimitiveTriangle& other); //! Calcs the plane which is paralele to the edge and perpendicular to the triangle plane /*! \pre this triangle must have its plane calculated. */ SIMD_FORCE_INLINE void get_edge_plane(int edge_index, btVector4& plane) const { const btVector3& e0 = m_vertices[edge_index]; const btVector3& e1 = m_vertices[(edge_index + 1) % 3]; bt_edge_plane(e0, e1, m_plane, plane); } void applyTransform(const btTransform& t) { m_vertices[0] = t(m_vertices[0]); m_vertices[1] = t(m_vertices[1]); m_vertices[2] = t(m_vertices[2]); } //! Clips the triangle against this /*! \pre clipped_points must have MAX_TRI_CLIPPING size, and this triangle must have its plane calculated. \return the number of clipped points */ int clip_triangle(btPrimitiveTriangle& other, btVector3* clipped_points); //! Find collision using the clipping method /*! \pre this triangle and other must have their triangles calculated */ bool find_triangle_collision_clip_method(btPrimitiveTriangle& other, GIM_TRIANGLE_CONTACT& contacts); }; //! Helper class for colliding Bullet Triangle Shapes /*! This class implements a better getAabb method than the previous btTriangleShape class */ class btTriangleShapeEx : public btTriangleShape { public: btTriangleShapeEx() : btTriangleShape(btVector3(0, 0, 0), btVector3(0, 0, 0), btVector3(0, 0, 0)) { } btTriangleShapeEx(const btVector3& p0, const btVector3& p1, const btVector3& p2) : btTriangleShape(p0, p1, p2) { } btTriangleShapeEx(const btTriangleShapeEx& other) : btTriangleShape(other.m_vertices1[0], other.m_vertices1[1], other.m_vertices1[2]) { } virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const { btVector3 tv0 = t(m_vertices1[0]); btVector3 tv1 = t(m_vertices1[1]); btVector3 tv2 = t(m_vertices1[2]); btAABB trianglebox(tv0, tv1, tv2, m_collisionMargin); aabbMin = trianglebox.m_min; aabbMax = trianglebox.m_max; } void applyTransform(const btTransform& t) { m_vertices1[0] = t(m_vertices1[0]); m_vertices1[1] = t(m_vertices1[1]); m_vertices1[2] = t(m_vertices1[2]); } SIMD_FORCE_INLINE void buildTriPlane(btVector4& plane) const { btVector3 normal = (m_vertices1[1] - m_vertices1[0]).cross(m_vertices1[2] - m_vertices1[0]); normal.normalize(); plane.setValue(normal[0], normal[1], normal[2], m_vertices1[0].dot(normal)); } bool overlap_test_conservative(const btTriangleShapeEx& other); }; #endif //GIMPACT_TRIANGLE_MESH_SHAPE_H ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/gim_array.h ================================================ #ifndef GIM_ARRAY_H_INCLUDED #define GIM_ARRAY_H_INCLUDED /*! \file gim_array.h \author Francisco Leon Najera */ /* ----------------------------------------------------------------------------- This source file is part of GIMPACT Library. For the latest info, see http://gimpact.sourceforge.net/ Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371. email: projectileman@yahoo.com This library is free software; you can redistribute it and/or modify it under the terms of EITHER: (1) The GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The text of the GNU Lesser General Public License is included with this library in the file GIMPACT-LICENSE-LGPL.TXT. (2) The BSD-style license that is included with this library in the file GIMPACT-LICENSE-BSD.TXT. (3) The zlib/libpng license that is included with this library in the file GIMPACT-LICENSE-ZLIB.TXT. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details. ----------------------------------------------------------------------------- */ #include "gim_memory.h" #define GIM_ARRAY_GROW_INCREMENT 2 #define GIM_ARRAY_GROW_FACTOR 2 //! Very simple array container with fast access and simd memory template class gim_array { public: //! properties //!@{ T* m_data; GUINT m_size; GUINT m_allocated_size; //!@} //! protected operations //!@{ inline void destroyData() { m_allocated_size = 0; if (m_data == NULL) return; gim_free(m_data); m_data = NULL; } inline bool resizeData(GUINT newsize) { if (newsize == 0) { destroyData(); return true; } if (m_size > 0) { m_data = (T*)gim_realloc(m_data, m_size * sizeof(T), newsize * sizeof(T)); } else { m_data = (T*)gim_alloc(newsize * sizeof(T)); } m_allocated_size = newsize; return true; } inline bool growingCheck() { if (m_allocated_size <= m_size) { GUINT requestsize = m_size; m_size = m_allocated_size; if (resizeData((requestsize + GIM_ARRAY_GROW_INCREMENT) * GIM_ARRAY_GROW_FACTOR) == false) return false; } return true; } //!@} //! public operations //!@{ inline bool reserve(GUINT size) { if (m_allocated_size >= size) return false; return resizeData(size); } inline void clear_range(GUINT start_range) { while (m_size > start_range) { m_data[--m_size].~T(); } } inline void clear() { if (m_size == 0) return; clear_range(0); } inline void clear_memory() { clear(); destroyData(); } gim_array() { m_data = 0; m_size = 0; m_allocated_size = 0; } gim_array(GUINT reservesize) { m_data = 0; m_size = 0; m_allocated_size = 0; reserve(reservesize); } ~gim_array() { clear_memory(); } inline GUINT size() const { return m_size; } inline GUINT max_size() const { return m_allocated_size; } inline T& operator[](size_t i) { return m_data[i]; } inline const T& operator[](size_t i) const { return m_data[i]; } inline T* pointer() { return m_data; } inline const T* pointer() const { return m_data; } inline T* get_pointer_at(GUINT i) { return m_data + i; } inline const T* get_pointer_at(GUINT i) const { return m_data + i; } inline T& at(GUINT i) { return m_data[i]; } inline const T& at(GUINT i) const { return m_data[i]; } inline T& front() { return *m_data; } inline const T& front() const { return *m_data; } inline T& back() { return m_data[m_size - 1]; } inline const T& back() const { return m_data[m_size - 1]; } inline void swap(GUINT i, GUINT j) { gim_swap_elements(m_data, i, j); } inline void push_back(const T& obj) { this->growingCheck(); m_data[m_size] = obj; m_size++; } //!Simply increase the m_size, doesn't call the new element constructor inline void push_back_mem() { this->growingCheck(); m_size++; } inline void push_back_memcpy(const T& obj) { this->growingCheck(); gim_simd_memcpy(&m_data[m_size], &obj, sizeof(T)); m_size++; } inline void pop_back() { m_size--; m_data[m_size].~T(); } //!Simply decrease the m_size, doesn't call the deleted element destructor inline void pop_back_mem() { m_size--; } //! fast erase inline void erase(GUINT index) { if (index < m_size - 1) { swap(index, m_size - 1); } pop_back(); } inline void erase_sorted_mem(GUINT index) { m_size--; for (GUINT i = index; i < m_size; i++) { gim_simd_memcpy(m_data + i, m_data + i + 1, sizeof(T)); } } inline void erase_sorted(GUINT index) { m_data[index].~T(); erase_sorted_mem(index); } inline void insert_mem(GUINT index) { this->growingCheck(); for (GUINT i = m_size; i > index; i--) { gim_simd_memcpy(m_data + i, m_data + i - 1, sizeof(T)); } m_size++; } inline void insert(const T& obj, GUINT index) { insert_mem(index); m_data[index] = obj; } inline void resize(GUINT size, bool call_constructor = true, const T& fillData = T()) { if (size > m_size) { reserve(size); if (call_constructor) { while (m_size < size) { m_data[m_size] = fillData; m_size++; } } else { m_size = size; } } else if (size < m_size) { if (call_constructor) clear_range(size); m_size = size; } } inline void refit() { resizeData(m_size); } }; #endif // GIM_CONTAINERS_H_INCLUDED ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/gim_basic_geometry_operations.h ================================================ #ifndef GIM_BASIC_GEOMETRY_OPERATIONS_H_INCLUDED #define GIM_BASIC_GEOMETRY_OPERATIONS_H_INCLUDED /*! \file gim_basic_geometry_operations.h *\author Francisco Leon Najera type independant geometry routines */ /* ----------------------------------------------------------------------------- This source file is part of GIMPACT Library. For the latest info, see http://gimpact.sourceforge.net/ Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371. email: projectileman@yahoo.com This library is free software; you can redistribute it and/or modify it under the terms of EITHER: (1) The GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The text of the GNU Lesser General Public License is included with this library in the file GIMPACT-LICENSE-LGPL.TXT. (2) The BSD-style license that is included with this library in the file GIMPACT-LICENSE-BSD.TXT. (3) The zlib/libpng license that is included with this library in the file GIMPACT-LICENSE-ZLIB.TXT. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details. ----------------------------------------------------------------------------- */ #include "gim_linear_math.h" #ifndef PLANEDIREPSILON #define PLANEDIREPSILON 0.0000001f #endif #ifndef PARALELENORMALS #define PARALELENORMALS 0.000001f #endif #define TRIANGLE_NORMAL(v1, v2, v3, n) \ { \ vec3f _dif1, _dif2; \ VEC_DIFF(_dif1, v2, v1); \ VEC_DIFF(_dif2, v3, v1); \ VEC_CROSS(n, _dif1, _dif2); \ VEC_NORMALIZE(n); \ } #define TRIANGLE_NORMAL_FAST(v1, v2, v3, n) \ { \ vec3f _dif1, _dif2; \ VEC_DIFF(_dif1, v2, v1); \ VEC_DIFF(_dif2, v3, v1); \ VEC_CROSS(n, _dif1, _dif2); \ } /// plane is a vec4f #define TRIANGLE_PLANE(v1, v2, v3, plane) \ { \ TRIANGLE_NORMAL(v1, v2, v3, plane); \ plane[3] = VEC_DOT(v1, plane); \ } /// plane is a vec4f #define TRIANGLE_PLANE_FAST(v1, v2, v3, plane) \ { \ TRIANGLE_NORMAL_FAST(v1, v2, v3, plane); \ plane[3] = VEC_DOT(v1, plane); \ } /// Calc a plane from an edge an a normal. plane is a vec4f #define EDGE_PLANE(e1, e2, n, plane) \ { \ vec3f _dif; \ VEC_DIFF(_dif, e2, e1); \ VEC_CROSS(plane, _dif, n); \ VEC_NORMALIZE(plane); \ plane[3] = VEC_DOT(e1, plane); \ } #define DISTANCE_PLANE_POINT(plane, point) (VEC_DOT(plane, point) - plane[3]) #define PROJECT_POINT_PLANE(point, plane, projected) \ { \ GREAL _dis; \ _dis = DISTANCE_PLANE_POINT(plane, point); \ VEC_SCALE(projected, -_dis, plane); \ VEC_SUM(projected, projected, point); \ } //! Verifies if a point is in the plane hull template SIMD_FORCE_INLINE bool POINT_IN_HULL( const CLASS_POINT &point, const CLASS_PLANE *planes, GUINT plane_count) { GREAL _dis; for (GUINT _i = 0; _i < plane_count; ++_i) { _dis = DISTANCE_PLANE_POINT(planes[_i], point); if (_dis > 0.0f) return false; } return true; } template SIMD_FORCE_INLINE void PLANE_CLIP_SEGMENT( const CLASS_POINT &s1, const CLASS_POINT &s2, const CLASS_PLANE &plane, CLASS_POINT &clipped) { GREAL _dis1, _dis2; _dis1 = DISTANCE_PLANE_POINT(plane, s1); VEC_DIFF(clipped, s2, s1); _dis2 = VEC_DOT(clipped, plane); VEC_SCALE(clipped, -_dis1 / _dis2, clipped); VEC_SUM(clipped, clipped, s1); } enum ePLANE_INTERSECTION_TYPE { G_BACK_PLANE = 0, G_COLLIDE_PLANE, G_FRONT_PLANE }; enum eLINE_PLANE_INTERSECTION_TYPE { G_FRONT_PLANE_S1 = 0, G_FRONT_PLANE_S2, G_BACK_PLANE_S1, G_BACK_PLANE_S2, G_COLLIDE_PLANE_S1, G_COLLIDE_PLANE_S2 }; //! Confirms if the plane intersect the edge or nor /*! intersection type must have the following values
    • 0 : Segment in front of plane, s1 closest
    • 1 : Segment in front of plane, s2 closest
    • 2 : Segment in back of plane, s1 closest
    • 3 : Segment in back of plane, s2 closest
    • 4 : Segment collides plane, s1 in back
    • 5 : Segment collides plane, s2 in back
    */ template SIMD_FORCE_INLINE eLINE_PLANE_INTERSECTION_TYPE PLANE_CLIP_SEGMENT2( const CLASS_POINT &s1, const CLASS_POINT &s2, const CLASS_PLANE &plane, CLASS_POINT &clipped) { GREAL _dis1 = DISTANCE_PLANE_POINT(plane, s1); GREAL _dis2 = DISTANCE_PLANE_POINT(plane, s2); if (_dis1 > -G_EPSILON && _dis2 > -G_EPSILON) { if (_dis1 < _dis2) return G_FRONT_PLANE_S1; return G_FRONT_PLANE_S2; } else if (_dis1 < G_EPSILON && _dis2 < G_EPSILON) { if (_dis1 > _dis2) return G_BACK_PLANE_S1; return G_BACK_PLANE_S2; } VEC_DIFF(clipped, s2, s1); _dis2 = VEC_DOT(clipped, plane); VEC_SCALE(clipped, -_dis1 / _dis2, clipped); VEC_SUM(clipped, clipped, s1); if (_dis1 < _dis2) return G_COLLIDE_PLANE_S1; return G_COLLIDE_PLANE_S2; } //! Confirms if the plane intersect the edge or not /*! clipped1 and clipped2 are the vertices behind the plane. clipped1 is the closest intersection_type must have the following values
    • 0 : Segment in front of plane, s1 closest
    • 1 : Segment in front of plane, s2 closest
    • 2 : Segment in back of plane, s1 closest
    • 3 : Segment in back of plane, s2 closest
    • 4 : Segment collides plane, s1 in back
    • 5 : Segment collides plane, s2 in back
    */ template SIMD_FORCE_INLINE eLINE_PLANE_INTERSECTION_TYPE PLANE_CLIP_SEGMENT_CLOSEST( const CLASS_POINT &s1, const CLASS_POINT &s2, const CLASS_PLANE &plane, CLASS_POINT &clipped1, CLASS_POINT &clipped2) { eLINE_PLANE_INTERSECTION_TYPE intersection_type = PLANE_CLIP_SEGMENT2(s1, s2, plane, clipped1); switch (intersection_type) { case G_FRONT_PLANE_S1: VEC_COPY(clipped1, s1); VEC_COPY(clipped2, s2); break; case G_FRONT_PLANE_S2: VEC_COPY(clipped1, s2); VEC_COPY(clipped2, s1); break; case G_BACK_PLANE_S1: VEC_COPY(clipped1, s1); VEC_COPY(clipped2, s2); break; case G_BACK_PLANE_S2: VEC_COPY(clipped1, s2); VEC_COPY(clipped2, s1); break; case G_COLLIDE_PLANE_S1: VEC_COPY(clipped2, s1); break; case G_COLLIDE_PLANE_S2: VEC_COPY(clipped2, s2); break; } return intersection_type; } //! Finds the 2 smallest cartesian coordinates of a plane normal #define PLANE_MINOR_AXES(plane, i0, i1) VEC_MINOR_AXES(plane, i0, i1) //! Ray plane collision in one way /*! Intersects plane in one way only. The ray must face the plane (normals must be in opossite directions).
    It uses the PLANEDIREPSILON constant. */ template SIMD_FORCE_INLINE bool RAY_PLANE_COLLISION( const CLASS_PLANE &plane, const CLASS_POINT &vDir, const CLASS_POINT &vPoint, CLASS_POINT &pout, T &tparam) { GREAL _dis, _dotdir; _dotdir = VEC_DOT(plane, vDir); if (_dotdir < PLANEDIREPSILON) { return false; } _dis = DISTANCE_PLANE_POINT(plane, vPoint); tparam = -_dis / _dotdir; VEC_SCALE(pout, tparam, vDir); VEC_SUM(pout, vPoint, pout); return true; } //! line collision /*! *\return -0 if the ray never intersects -1 if the ray collides in front -2 if the ray collides in back */ template SIMD_FORCE_INLINE GUINT LINE_PLANE_COLLISION( const CLASS_PLANE &plane, const CLASS_POINT &vDir, const CLASS_POINT &vPoint, CLASS_POINT &pout, T &tparam, T tmin, T tmax) { GREAL _dis, _dotdir; _dotdir = VEC_DOT(plane, vDir); if (btFabs(_dotdir) < PLANEDIREPSILON) { tparam = tmax; return 0; } _dis = DISTANCE_PLANE_POINT(plane, vPoint); char returnvalue = _dis < 0.0f ? 2 : 1; tparam = -_dis / _dotdir; if (tparam < tmin) { returnvalue = 0; tparam = tmin; } else if (tparam > tmax) { returnvalue = 0; tparam = tmax; } VEC_SCALE(pout, tparam, vDir); VEC_SUM(pout, vPoint, pout); return returnvalue; } /*! \brief Returns the Ray on which 2 planes intersect if they do. Written by Rodrigo Hernandez on ODE convex collision \param p1 Plane 1 \param p2 Plane 2 \param p Contains the origin of the ray upon returning if planes intersect \param d Contains the direction of the ray upon returning if planes intersect \return true if the planes intersect, 0 if paralell. */ template SIMD_FORCE_INLINE bool INTERSECT_PLANES( const CLASS_PLANE &p1, const CLASS_PLANE &p2, CLASS_POINT &p, CLASS_POINT &d) { VEC_CROSS(d, p1, p2); GREAL denom = VEC_DOT(d, d); if (GIM_IS_ZERO(denom)) return false; vec3f _n; _n[0] = p1[3] * p2[0] - p2[3] * p1[0]; _n[1] = p1[3] * p2[1] - p2[3] * p1[1]; _n[2] = p1[3] * p2[2] - p2[3] * p1[2]; VEC_CROSS(p, _n, d); p[0] /= denom; p[1] /= denom; p[2] /= denom; return true; } //***************** SEGMENT and LINE FUNCTIONS **********************************/// /*! Finds the closest point(cp) to (v) on a segment (e1,e2) */ template SIMD_FORCE_INLINE void CLOSEST_POINT_ON_SEGMENT( CLASS_POINT &cp, const CLASS_POINT &v, const CLASS_POINT &e1, const CLASS_POINT &e2) { vec3f _n; VEC_DIFF(_n, e2, e1); VEC_DIFF(cp, v, e1); GREAL _scalar = VEC_DOT(cp, _n); _scalar /= VEC_DOT(_n, _n); if (_scalar < 0.0f) { VEC_COPY(cp, e1); } else if (_scalar > 1.0f) { VEC_COPY(cp, e2); } else { VEC_SCALE(cp, _scalar, _n); VEC_SUM(cp, cp, e1); } } /*! \brief Finds the line params where these lines intersect. \param dir1 Direction of line 1 \param point1 Point of line 1 \param dir2 Direction of line 2 \param point2 Point of line 2 \param t1 Result Parameter for line 1 \param t2 Result Parameter for line 2 \param dointersect 0 if the lines won't intersect, else 1 */ template SIMD_FORCE_INLINE bool LINE_INTERSECTION_PARAMS( const CLASS_POINT &dir1, CLASS_POINT &point1, const CLASS_POINT &dir2, CLASS_POINT &point2, T &t1, T &t2) { GREAL det; GREAL e1e1 = VEC_DOT(dir1, dir1); GREAL e1e2 = VEC_DOT(dir1, dir2); GREAL e2e2 = VEC_DOT(dir2, dir2); vec3f p1p2; VEC_DIFF(p1p2, point1, point2); GREAL p1p2e1 = VEC_DOT(p1p2, dir1); GREAL p1p2e2 = VEC_DOT(p1p2, dir2); det = e1e2 * e1e2 - e1e1 * e2e2; if (GIM_IS_ZERO(det)) return false; t1 = (e1e2 * p1p2e2 - e2e2 * p1p2e1) / det; t2 = (e1e1 * p1p2e2 - e1e2 * p1p2e1) / det; return true; } //! Find closest points on segments template SIMD_FORCE_INLINE void SEGMENT_COLLISION( const CLASS_POINT &vA1, const CLASS_POINT &vA2, const CLASS_POINT &vB1, const CLASS_POINT &vB2, CLASS_POINT &vPointA, CLASS_POINT &vPointB) { CLASS_POINT _AD, _BD, n; vec4f _M; //plane VEC_DIFF(_AD, vA2, vA1); VEC_DIFF(_BD, vB2, vB1); VEC_CROSS(n, _AD, _BD); GREAL _tp = VEC_DOT(n, n); if (_tp < G_EPSILON) //ARE PARALELE { //project B over A bool invert_b_order = false; _M[0] = VEC_DOT(vB1, _AD); _M[1] = VEC_DOT(vB2, _AD); if (_M[0] > _M[1]) { invert_b_order = true; GIM_SWAP_NUMBERS(_M[0], _M[1]); } _M[2] = VEC_DOT(vA1, _AD); _M[3] = VEC_DOT(vA2, _AD); //mid points n[0] = (_M[0] + _M[1]) * 0.5f; n[1] = (_M[2] + _M[3]) * 0.5f; if (n[0] < n[1]) { if (_M[1] < _M[2]) { vPointB = invert_b_order ? vB1 : vB2; vPointA = vA1; } else if (_M[1] < _M[3]) { vPointB = invert_b_order ? vB1 : vB2; CLOSEST_POINT_ON_SEGMENT(vPointA, vPointB, vA1, vA2); } else { vPointA = vA2; CLOSEST_POINT_ON_SEGMENT(vPointB, vPointA, vB1, vB2); } } else { if (_M[3] < _M[0]) { vPointB = invert_b_order ? vB2 : vB1; vPointA = vA2; } else if (_M[3] < _M[1]) { vPointA = vA2; CLOSEST_POINT_ON_SEGMENT(vPointB, vPointA, vB1, vB2); } else { vPointB = invert_b_order ? vB1 : vB2; CLOSEST_POINT_ON_SEGMENT(vPointA, vPointB, vA1, vA2); } } return; } VEC_CROSS(_M, n, _BD); _M[3] = VEC_DOT(_M, vB1); LINE_PLANE_COLLISION(_M, _AD, vA1, vPointA, _tp, btScalar(0), btScalar(1)); /*Closest point on segment*/ VEC_DIFF(vPointB, vPointA, vB1); _tp = VEC_DOT(vPointB, _BD); _tp /= VEC_DOT(_BD, _BD); _tp = GIM_CLAMP(_tp, 0.0f, 1.0f); VEC_SCALE(vPointB, _tp, _BD); VEC_SUM(vPointB, vPointB, vB1); } //! Line box intersection in one dimension /*! *\param pos Position of the ray *\param dir Projection of the Direction of the ray *\param bmin Minimum bound of the box *\param bmax Maximum bound of the box *\param tfirst the minimum projection. Assign to 0 at first. *\param tlast the maximum projection. Assign to INFINITY at first. *\return true if there is an intersection. */ template SIMD_FORCE_INLINE bool BOX_AXIS_INTERSECT(T pos, T dir, T bmin, T bmax, T &tfirst, T &tlast) { if (GIM_IS_ZERO(dir)) { return !(pos < bmin || pos > bmax); } GREAL a0 = (bmin - pos) / dir; GREAL a1 = (bmax - pos) / dir; if (a0 > a1) GIM_SWAP_NUMBERS(a0, a1); tfirst = GIM_MAX(a0, tfirst); tlast = GIM_MIN(a1, tlast); if (tlast < tfirst) return false; return true; } //! Sorts 3 componets template SIMD_FORCE_INLINE void SORT_3_INDICES( const T *values, GUINT *order_indices) { //get minimum order_indices[0] = values[0] < values[1] ? (values[0] < values[2] ? 0 : 2) : (values[1] < values[2] ? 1 : 2); //get second and third GUINT i0 = (order_indices[0] + 1) % 3; GUINT i1 = (i0 + 1) % 3; if (values[i0] < values[i1]) { order_indices[1] = i0; order_indices[2] = i1; } else { order_indices[1] = i1; order_indices[2] = i0; } } #endif // GIM_VECTOR_H_INCLUDED ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/gim_bitset.h ================================================ #ifndef GIM_BITSET_H_INCLUDED #define GIM_BITSET_H_INCLUDED /*! \file gim_bitset.h \author Francisco Leon Najera */ /* ----------------------------------------------------------------------------- This source file is part of GIMPACT Library. For the latest info, see http://gimpact.sourceforge.net/ Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371. email: projectileman@yahoo.com This library is free software; you can redistribute it and/or modify it under the terms of EITHER: (1) The GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The text of the GNU Lesser General Public License is included with this library in the file GIMPACT-LICENSE-LGPL.TXT. (2) The BSD-style license that is included with this library in the file GIMPACT-LICENSE-BSD.TXT. (3) The zlib/libpng license that is included with this library in the file GIMPACT-LICENSE-ZLIB.TXT. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details. ----------------------------------------------------------------------------- */ #include "gim_array.h" #define GUINT_BIT_COUNT 32 #define GUINT_EXPONENT 5 class gim_bitset { public: gim_array m_container; gim_bitset() { } gim_bitset(GUINT bits_count) { resize(bits_count); } ~gim_bitset() { } inline bool resize(GUINT newsize) { GUINT oldsize = m_container.size(); m_container.resize(newsize / GUINT_BIT_COUNT + 1, false); while (oldsize < m_container.size()) { m_container[oldsize] = 0; } return true; } inline GUINT size() { return m_container.size() * GUINT_BIT_COUNT; } inline void set_all() { for (GUINT i = 0; i < m_container.size(); ++i) { m_container[i] = 0xffffffff; } } inline void clear_all() { for (GUINT i = 0; i < m_container.size(); ++i) { m_container[i] = 0; } } inline void set(GUINT bit_index) { if (bit_index >= size()) { resize(bit_index); } m_container[bit_index >> GUINT_EXPONENT] |= (1 << (bit_index & (GUINT_BIT_COUNT - 1))); } ///Return 0 or 1 inline char get(GUINT bit_index) { if (bit_index >= size()) { return 0; } char value = m_container[bit_index >> GUINT_EXPONENT] & (1 << (bit_index & (GUINT_BIT_COUNT - 1))); return value; } inline void clear(GUINT bit_index) { m_container[bit_index >> GUINT_EXPONENT] &= ~(1 << (bit_index & (GUINT_BIT_COUNT - 1))); } }; #endif // GIM_CONTAINERS_H_INCLUDED ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/gim_box_collision.h ================================================ #ifndef GIM_BOX_COLLISION_H_INCLUDED #define GIM_BOX_COLLISION_H_INCLUDED /*! \file gim_box_collision.h \author Francisco Leon Najera */ /* ----------------------------------------------------------------------------- This source file is part of GIMPACT Library. For the latest info, see http://gimpact.sourceforge.net/ Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371. email: projectileman@yahoo.com This library is free software; you can redistribute it and/or modify it under the terms of EITHER: (1) The GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The text of the GNU Lesser General Public License is included with this library in the file GIMPACT-LICENSE-LGPL.TXT. (2) The BSD-style license that is included with this library in the file GIMPACT-LICENSE-BSD.TXT. (3) The zlib/libpng license that is included with this library in the file GIMPACT-LICENSE-ZLIB.TXT. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details. ----------------------------------------------------------------------------- */ #include "gim_basic_geometry_operations.h" #include "LinearMath/btTransform.h" //SIMD_FORCE_INLINE bool test_cross_edge_box( // const btVector3 & edge, // const btVector3 & absolute_edge, // const btVector3 & pointa, // const btVector3 & pointb, const btVector3 & extend, // int dir_index0, // int dir_index1 // int component_index0, // int component_index1) //{ // // dir coords are -z and y // // const btScalar dir0 = -edge[dir_index0]; // const btScalar dir1 = edge[dir_index1]; // btScalar pmin = pointa[component_index0]*dir0 + pointa[component_index1]*dir1; // btScalar pmax = pointb[component_index0]*dir0 + pointb[component_index1]*dir1; // //find minmax // if(pmin>pmax) // { // GIM_SWAP_NUMBERS(pmin,pmax); // } // //find extends // const btScalar rad = extend[component_index0] * absolute_edge[dir_index0] + // extend[component_index1] * absolute_edge[dir_index1]; // // if(pmin>rad || -rad>pmax) return false; // return true; //} // //SIMD_FORCE_INLINE bool test_cross_edge_box_X_axis( // const btVector3 & edge, // const btVector3 & absolute_edge, // const btVector3 & pointa, // const btVector3 & pointb, btVector3 & extend) //{ // // return test_cross_edge_box(edge,absolute_edge,pointa,pointb,extend,2,1,1,2); //} // // //SIMD_FORCE_INLINE bool test_cross_edge_box_Y_axis( // const btVector3 & edge, // const btVector3 & absolute_edge, // const btVector3 & pointa, // const btVector3 & pointb, btVector3 & extend) //{ // // return test_cross_edge_box(edge,absolute_edge,pointa,pointb,extend,0,2,2,0); //} // //SIMD_FORCE_INLINE bool test_cross_edge_box_Z_axis( // const btVector3 & edge, // const btVector3 & absolute_edge, // const btVector3 & pointa, // const btVector3 & pointb, btVector3 & extend) //{ // // return test_cross_edge_box(edge,absolute_edge,pointa,pointb,extend,1,0,0,1); //} #ifndef TEST_CROSS_EDGE_BOX_MCR #define TEST_CROSS_EDGE_BOX_MCR(edge, absolute_edge, pointa, pointb, _extend, i_dir_0, i_dir_1, i_comp_0, i_comp_1) \ { \ const btScalar dir0 = -edge[i_dir_0]; \ const btScalar dir1 = edge[i_dir_1]; \ btScalar pmin = pointa[i_comp_0] * dir0 + pointa[i_comp_1] * dir1; \ btScalar pmax = pointb[i_comp_0] * dir0 + pointb[i_comp_1] * dir1; \ if (pmin > pmax) \ { \ GIM_SWAP_NUMBERS(pmin, pmax); \ } \ const btScalar abs_dir0 = absolute_edge[i_dir_0]; \ const btScalar abs_dir1 = absolute_edge[i_dir_1]; \ const btScalar rad = _extend[i_comp_0] * abs_dir0 + _extend[i_comp_1] * abs_dir1; \ if (pmin > rad || -rad > pmax) return false; \ } #endif #define TEST_CROSS_EDGE_BOX_X_AXIS_MCR(edge, absolute_edge, pointa, pointb, _extend) \ { \ TEST_CROSS_EDGE_BOX_MCR(edge, absolute_edge, pointa, pointb, _extend, 2, 1, 1, 2); \ } #define TEST_CROSS_EDGE_BOX_Y_AXIS_MCR(edge, absolute_edge, pointa, pointb, _extend) \ { \ TEST_CROSS_EDGE_BOX_MCR(edge, absolute_edge, pointa, pointb, _extend, 0, 2, 2, 0); \ } #define TEST_CROSS_EDGE_BOX_Z_AXIS_MCR(edge, absolute_edge, pointa, pointb, _extend) \ { \ TEST_CROSS_EDGE_BOX_MCR(edge, absolute_edge, pointa, pointb, _extend, 1, 0, 0, 1); \ } //! Class for transforming a model1 to the space of model0 class GIM_BOX_BOX_TRANSFORM_CACHE { public: btVector3 m_T1to0; //!< Transforms translation of model1 to model 0 btMatrix3x3 m_R1to0; //!< Transforms Rotation of model1 to model 0, equal to R0' * R1 btMatrix3x3 m_AR; //!< Absolute value of m_R1to0 SIMD_FORCE_INLINE void calc_absolute_matrix() { static const btVector3 vepsi(1e-6f, 1e-6f, 1e-6f); m_AR[0] = vepsi + m_R1to0[0].absolute(); m_AR[1] = vepsi + m_R1to0[1].absolute(); m_AR[2] = vepsi + m_R1to0[2].absolute(); } GIM_BOX_BOX_TRANSFORM_CACHE() { } GIM_BOX_BOX_TRANSFORM_CACHE(mat4f trans1_to_0) { COPY_MATRIX_3X3(m_R1to0, trans1_to_0) MAT_GET_TRANSLATION(trans1_to_0, m_T1to0) calc_absolute_matrix(); } //! Calc the transformation relative 1 to 0. Inverts matrics by transposing SIMD_FORCE_INLINE void calc_from_homogenic(const btTransform &trans0, const btTransform &trans1) { m_R1to0 = trans0.getBasis().transpose(); m_T1to0 = m_R1to0 * (-trans0.getOrigin()); m_T1to0 += m_R1to0 * trans1.getOrigin(); m_R1to0 *= trans1.getBasis(); calc_absolute_matrix(); } //! Calcs the full invertion of the matrices. Useful for scaling matrices SIMD_FORCE_INLINE void calc_from_full_invert(const btTransform &trans0, const btTransform &trans1) { m_R1to0 = trans0.getBasis().inverse(); m_T1to0 = m_R1to0 * (-trans0.getOrigin()); m_T1to0 += m_R1to0 * trans1.getOrigin(); m_R1to0 *= trans1.getBasis(); calc_absolute_matrix(); } SIMD_FORCE_INLINE btVector3 transform(const btVector3 &point) { return point.dot3(m_R1to0[0], m_R1to0[1], m_R1to0[2]) + m_T1to0; } }; #ifndef BOX_PLANE_EPSILON #define BOX_PLANE_EPSILON 0.000001f #endif //! Axis aligned box class GIM_AABB { public: btVector3 m_min; btVector3 m_max; GIM_AABB() { } GIM_AABB(const btVector3 &V1, const btVector3 &V2, const btVector3 &V3) { m_min[0] = GIM_MIN3(V1[0], V2[0], V3[0]); m_min[1] = GIM_MIN3(V1[1], V2[1], V3[1]); m_min[2] = GIM_MIN3(V1[2], V2[2], V3[2]); m_max[0] = GIM_MAX3(V1[0], V2[0], V3[0]); m_max[1] = GIM_MAX3(V1[1], V2[1], V3[1]); m_max[2] = GIM_MAX3(V1[2], V2[2], V3[2]); } GIM_AABB(const btVector3 &V1, const btVector3 &V2, const btVector3 &V3, GREAL margin) { m_min[0] = GIM_MIN3(V1[0], V2[0], V3[0]); m_min[1] = GIM_MIN3(V1[1], V2[1], V3[1]); m_min[2] = GIM_MIN3(V1[2], V2[2], V3[2]); m_max[0] = GIM_MAX3(V1[0], V2[0], V3[0]); m_max[1] = GIM_MAX3(V1[1], V2[1], V3[1]); m_max[2] = GIM_MAX3(V1[2], V2[2], V3[2]); m_min[0] -= margin; m_min[1] -= margin; m_min[2] -= margin; m_max[0] += margin; m_max[1] += margin; m_max[2] += margin; } GIM_AABB(const GIM_AABB &other) : m_min(other.m_min), m_max(other.m_max) { } GIM_AABB(const GIM_AABB &other, btScalar margin) : m_min(other.m_min), m_max(other.m_max) { m_min[0] -= margin; m_min[1] -= margin; m_min[2] -= margin; m_max[0] += margin; m_max[1] += margin; m_max[2] += margin; } SIMD_FORCE_INLINE void invalidate() { m_min[0] = G_REAL_INFINITY; m_min[1] = G_REAL_INFINITY; m_min[2] = G_REAL_INFINITY; m_max[0] = -G_REAL_INFINITY; m_max[1] = -G_REAL_INFINITY; m_max[2] = -G_REAL_INFINITY; } SIMD_FORCE_INLINE void increment_margin(btScalar margin) { m_min[0] -= margin; m_min[1] -= margin; m_min[2] -= margin; m_max[0] += margin; m_max[1] += margin; m_max[2] += margin; } SIMD_FORCE_INLINE void copy_with_margin(const GIM_AABB &other, btScalar margin) { m_min[0] = other.m_min[0] - margin; m_min[1] = other.m_min[1] - margin; m_min[2] = other.m_min[2] - margin; m_max[0] = other.m_max[0] + margin; m_max[1] = other.m_max[1] + margin; m_max[2] = other.m_max[2] + margin; } template SIMD_FORCE_INLINE void calc_from_triangle( const CLASS_POINT &V1, const CLASS_POINT &V2, const CLASS_POINT &V3) { m_min[0] = GIM_MIN3(V1[0], V2[0], V3[0]); m_min[1] = GIM_MIN3(V1[1], V2[1], V3[1]); m_min[2] = GIM_MIN3(V1[2], V2[2], V3[2]); m_max[0] = GIM_MAX3(V1[0], V2[0], V3[0]); m_max[1] = GIM_MAX3(V1[1], V2[1], V3[1]); m_max[2] = GIM_MAX3(V1[2], V2[2], V3[2]); } template SIMD_FORCE_INLINE void calc_from_triangle_margin( const CLASS_POINT &V1, const CLASS_POINT &V2, const CLASS_POINT &V3, btScalar margin) { m_min[0] = GIM_MIN3(V1[0], V2[0], V3[0]); m_min[1] = GIM_MIN3(V1[1], V2[1], V3[1]); m_min[2] = GIM_MIN3(V1[2], V2[2], V3[2]); m_max[0] = GIM_MAX3(V1[0], V2[0], V3[0]); m_max[1] = GIM_MAX3(V1[1], V2[1], V3[1]); m_max[2] = GIM_MAX3(V1[2], V2[2], V3[2]); m_min[0] -= margin; m_min[1] -= margin; m_min[2] -= margin; m_max[0] += margin; m_max[1] += margin; m_max[2] += margin; } //! Apply a transform to an AABB SIMD_FORCE_INLINE void appy_transform(const btTransform &trans) { btVector3 center = (m_max + m_min) * 0.5f; btVector3 extends = m_max - center; // Compute new center center = trans(center); btVector3 textends = extends.dot3(trans.getBasis().getRow(0).absolute(), trans.getBasis().getRow(1).absolute(), trans.getBasis().getRow(2).absolute()); m_min = center - textends; m_max = center + textends; } //! Merges a Box SIMD_FORCE_INLINE void merge(const GIM_AABB &box) { m_min[0] = GIM_MIN(m_min[0], box.m_min[0]); m_min[1] = GIM_MIN(m_min[1], box.m_min[1]); m_min[2] = GIM_MIN(m_min[2], box.m_min[2]); m_max[0] = GIM_MAX(m_max[0], box.m_max[0]); m_max[1] = GIM_MAX(m_max[1], box.m_max[1]); m_max[2] = GIM_MAX(m_max[2], box.m_max[2]); } //! Merges a point template SIMD_FORCE_INLINE void merge_point(const CLASS_POINT &point) { m_min[0] = GIM_MIN(m_min[0], point[0]); m_min[1] = GIM_MIN(m_min[1], point[1]); m_min[2] = GIM_MIN(m_min[2], point[2]); m_max[0] = GIM_MAX(m_max[0], point[0]); m_max[1] = GIM_MAX(m_max[1], point[1]); m_max[2] = GIM_MAX(m_max[2], point[2]); } //! Gets the extend and center SIMD_FORCE_INLINE void get_center_extend(btVector3 ¢er, btVector3 &extend) const { center = (m_max + m_min) * 0.5f; extend = m_max - center; } //! Finds the intersecting box between this box and the other. SIMD_FORCE_INLINE void find_intersection(const GIM_AABB &other, GIM_AABB &intersection) const { intersection.m_min[0] = GIM_MAX(other.m_min[0], m_min[0]); intersection.m_min[1] = GIM_MAX(other.m_min[1], m_min[1]); intersection.m_min[2] = GIM_MAX(other.m_min[2], m_min[2]); intersection.m_max[0] = GIM_MIN(other.m_max[0], m_max[0]); intersection.m_max[1] = GIM_MIN(other.m_max[1], m_max[1]); intersection.m_max[2] = GIM_MIN(other.m_max[2], m_max[2]); } SIMD_FORCE_INLINE bool has_collision(const GIM_AABB &other) const { if (m_min[0] > other.m_max[0] || m_max[0] < other.m_min[0] || m_min[1] > other.m_max[1] || m_max[1] < other.m_min[1] || m_min[2] > other.m_max[2] || m_max[2] < other.m_min[2]) { return false; } return true; } /*! \brief Finds the Ray intersection parameter. \param aabb Aligned box \param vorigin A vec3f with the origin of the ray \param vdir A vec3f with the direction of the ray */ SIMD_FORCE_INLINE bool collide_ray(const btVector3 &vorigin, const btVector3 &vdir) { btVector3 extents, center; this->get_center_extend(center, extents); ; btScalar Dx = vorigin[0] - center[0]; if (GIM_GREATER(Dx, extents[0]) && Dx * vdir[0] >= 0.0f) return false; btScalar Dy = vorigin[1] - center[1]; if (GIM_GREATER(Dy, extents[1]) && Dy * vdir[1] >= 0.0f) return false; btScalar Dz = vorigin[2] - center[2]; if (GIM_GREATER(Dz, extents[2]) && Dz * vdir[2] >= 0.0f) return false; btScalar f = vdir[1] * Dz - vdir[2] * Dy; if (btFabs(f) > extents[1] * btFabs(vdir[2]) + extents[2] * btFabs(vdir[1])) return false; f = vdir[2] * Dx - vdir[0] * Dz; if (btFabs(f) > extents[0] * btFabs(vdir[2]) + extents[2] * btFabs(vdir[0])) return false; f = vdir[0] * Dy - vdir[1] * Dx; if (btFabs(f) > extents[0] * btFabs(vdir[1]) + extents[1] * btFabs(vdir[0])) return false; return true; } SIMD_FORCE_INLINE void projection_interval(const btVector3 &direction, btScalar &vmin, btScalar &vmax) const { btVector3 center = (m_max + m_min) * 0.5f; btVector3 extend = m_max - center; btScalar _fOrigin = direction.dot(center); btScalar _fMaximumExtent = extend.dot(direction.absolute()); vmin = _fOrigin - _fMaximumExtent; vmax = _fOrigin + _fMaximumExtent; } SIMD_FORCE_INLINE ePLANE_INTERSECTION_TYPE plane_classify(const btVector4 &plane) const { btScalar _fmin, _fmax; this->projection_interval(plane, _fmin, _fmax); if (plane[3] > _fmax + BOX_PLANE_EPSILON) { return G_BACK_PLANE; // 0 } if (plane[3] + BOX_PLANE_EPSILON >= _fmin) { return G_COLLIDE_PLANE; //1 } return G_FRONT_PLANE; //2 } SIMD_FORCE_INLINE bool overlapping_trans_conservative(const GIM_AABB &box, btTransform &trans1_to_0) { GIM_AABB tbox = box; tbox.appy_transform(trans1_to_0); return has_collision(tbox); } //! transcache is the transformation cache from box to this AABB SIMD_FORCE_INLINE bool overlapping_trans_cache( const GIM_AABB &box, const GIM_BOX_BOX_TRANSFORM_CACHE &transcache, bool fulltest) { //Taken from OPCODE btVector3 ea, eb; //extends btVector3 ca, cb; //extends get_center_extend(ca, ea); box.get_center_extend(cb, eb); btVector3 T; btScalar t, t2; int i; // Class I : A's basis vectors for (i = 0; i < 3; i++) { T[i] = transcache.m_R1to0[i].dot(cb) + transcache.m_T1to0[i] - ca[i]; t = transcache.m_AR[i].dot(eb) + ea[i]; if (GIM_GREATER(T[i], t)) return false; } // Class II : B's basis vectors for (i = 0; i < 3; i++) { t = MAT_DOT_COL(transcache.m_R1to0, T, i); t2 = MAT_DOT_COL(transcache.m_AR, ea, i) + eb[i]; if (GIM_GREATER(t, t2)) return false; } // Class III : 9 cross products if (fulltest) { int j, m, n, o, p, q, r; for (i = 0; i < 3; i++) { m = (i + 1) % 3; n = (i + 2) % 3; o = i == 0 ? 1 : 0; p = i == 2 ? 1 : 2; for (j = 0; j < 3; j++) { q = j == 2 ? 1 : 2; r = j == 0 ? 1 : 0; t = T[n] * transcache.m_R1to0[m][j] - T[m] * transcache.m_R1to0[n][j]; t2 = ea[o] * transcache.m_AR[p][j] + ea[p] * transcache.m_AR[o][j] + eb[r] * transcache.m_AR[i][q] + eb[q] * transcache.m_AR[i][r]; if (GIM_GREATER(t, t2)) return false; } } } return true; } //! Simple test for planes. SIMD_FORCE_INLINE bool collide_plane( const btVector4 &plane) { ePLANE_INTERSECTION_TYPE classify = plane_classify(plane); return (classify == G_COLLIDE_PLANE); } //! test for a triangle, with edges SIMD_FORCE_INLINE bool collide_triangle_exact( const btVector3 &p1, const btVector3 &p2, const btVector3 &p3, const btVector4 &triangle_plane) { if (!collide_plane(triangle_plane)) return false; btVector3 center, extends; this->get_center_extend(center, extends); const btVector3 v1(p1 - center); const btVector3 v2(p2 - center); const btVector3 v3(p3 - center); //First axis btVector3 diff(v2 - v1); btVector3 abs_diff = diff.absolute(); //Test With X axis TEST_CROSS_EDGE_BOX_X_AXIS_MCR(diff, abs_diff, v1, v3, extends); //Test With Y axis TEST_CROSS_EDGE_BOX_Y_AXIS_MCR(diff, abs_diff, v1, v3, extends); //Test With Z axis TEST_CROSS_EDGE_BOX_Z_AXIS_MCR(diff, abs_diff, v1, v3, extends); diff = v3 - v2; abs_diff = diff.absolute(); //Test With X axis TEST_CROSS_EDGE_BOX_X_AXIS_MCR(diff, abs_diff, v2, v1, extends); //Test With Y axis TEST_CROSS_EDGE_BOX_Y_AXIS_MCR(diff, abs_diff, v2, v1, extends); //Test With Z axis TEST_CROSS_EDGE_BOX_Z_AXIS_MCR(diff, abs_diff, v2, v1, extends); diff = v1 - v3; abs_diff = diff.absolute(); //Test With X axis TEST_CROSS_EDGE_BOX_X_AXIS_MCR(diff, abs_diff, v3, v2, extends); //Test With Y axis TEST_CROSS_EDGE_BOX_Y_AXIS_MCR(diff, abs_diff, v3, v2, extends); //Test With Z axis TEST_CROSS_EDGE_BOX_Z_AXIS_MCR(diff, abs_diff, v3, v2, extends); return true; } }; #ifndef BT_BOX_COLLISION_H_INCLUDED //! Compairison of transformation objects SIMD_FORCE_INLINE bool btCompareTransformsEqual(const btTransform &t1, const btTransform &t2) { if (!(t1.getOrigin() == t2.getOrigin())) return false; if (!(t1.getBasis().getRow(0) == t2.getBasis().getRow(0))) return false; if (!(t1.getBasis().getRow(1) == t2.getBasis().getRow(1))) return false; if (!(t1.getBasis().getRow(2) == t2.getBasis().getRow(2))) return false; return true; } #endif #endif // GIM_BOX_COLLISION_H_INCLUDED ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/gim_box_set.h ================================================ #ifndef GIM_BOX_SET_H_INCLUDED #define GIM_BOX_SET_H_INCLUDED /*! \file gim_box_set.h \author Francisco Leon Najera */ /* ----------------------------------------------------------------------------- This source file is part of GIMPACT Library. For the latest info, see http://gimpact.sourceforge.net/ Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371. email: projectileman@yahoo.com This library is free software; you can redistribute it and/or modify it under the terms of EITHER: (1) The GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The text of the GNU Lesser General Public License is included with this library in the file GIMPACT-LICENSE-LGPL.TXT. (2) The BSD-style license that is included with this library in the file GIMPACT-LICENSE-BSD.TXT. (3) The zlib/libpng license that is included with this library in the file GIMPACT-LICENSE-ZLIB.TXT. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details. ----------------------------------------------------------------------------- */ #include "gim_array.h" #include "gim_radixsort.h" #include "gim_box_collision.h" #include "gim_tri_collision.h" #include "gim_pair.h" //! A pairset array class gim_pair_set : public gim_array { public: gim_pair_set() : gim_array(32) { } inline void push_pair(GUINT index1, GUINT index2) { push_back(GIM_PAIR(index1, index2)); } inline void push_pair_inv(GUINT index1, GUINT index2) { push_back(GIM_PAIR(index2, index1)); } }; //! Prototype Base class for primitive classification /*! This class is a wrapper for primitive collections. This tells relevant info for the Bounding Box set classes, which take care of space classification. This class can manage Compound shapes and trimeshes, and if it is managing trimesh then the Hierarchy Bounding Box classes will take advantage of primitive Vs Box overlapping tests for getting optimal results and less Per Box compairisons. */ class GIM_PRIMITIVE_MANAGER_PROTOTYPE { public: virtual ~GIM_PRIMITIVE_MANAGER_PROTOTYPE() {} //! determines if this manager consist on only triangles, which special case will be optimized virtual bool is_trimesh() = 0; virtual GUINT get_primitive_count() = 0; virtual void get_primitive_box(GUINT prim_index, GIM_AABB& primbox) = 0; virtual void get_primitive_triangle(GUINT prim_index, GIM_TRIANGLE& triangle) = 0; }; struct GIM_AABB_DATA { GIM_AABB m_bound; GUINT m_data; }; //! Node Structure for trees struct GIM_BOX_TREE_NODE { GIM_AABB m_bound; GUINT m_left; //!< Left subtree GUINT m_right; //!< Right subtree GUINT m_escapeIndex; //!< Scape index for traversing GUINT m_data; //!< primitive index if apply GIM_BOX_TREE_NODE() { m_left = 0; m_right = 0; m_escapeIndex = 0; m_data = 0; } SIMD_FORCE_INLINE bool is_leaf_node() const { return (!m_left && !m_right); } }; //! Basic Box tree structure class GIM_BOX_TREE { protected: GUINT m_num_nodes; gim_array m_node_array; protected: GUINT _sort_and_calc_splitting_index( gim_array& primitive_boxes, GUINT startIndex, GUINT endIndex, GUINT splitAxis); GUINT _calc_splitting_axis(gim_array& primitive_boxes, GUINT startIndex, GUINT endIndex); void _build_sub_tree(gim_array& primitive_boxes, GUINT startIndex, GUINT endIndex); public: GIM_BOX_TREE() { m_num_nodes = 0; } //! prototype functions for box tree management //!@{ void build_tree(gim_array& primitive_boxes); SIMD_FORCE_INLINE void clearNodes() { m_node_array.clear(); m_num_nodes = 0; } //! node count SIMD_FORCE_INLINE GUINT getNodeCount() const { return m_num_nodes; } //! tells if the node is a leaf SIMD_FORCE_INLINE bool isLeafNode(GUINT nodeindex) const { return m_node_array[nodeindex].is_leaf_node(); } SIMD_FORCE_INLINE GUINT getNodeData(GUINT nodeindex) const { return m_node_array[nodeindex].m_data; } SIMD_FORCE_INLINE void getNodeBound(GUINT nodeindex, GIM_AABB& bound) const { bound = m_node_array[nodeindex].m_bound; } SIMD_FORCE_INLINE void setNodeBound(GUINT nodeindex, const GIM_AABB& bound) { m_node_array[nodeindex].m_bound = bound; } SIMD_FORCE_INLINE GUINT getLeftNodeIndex(GUINT nodeindex) const { return m_node_array[nodeindex].m_left; } SIMD_FORCE_INLINE GUINT getRightNodeIndex(GUINT nodeindex) const { return m_node_array[nodeindex].m_right; } SIMD_FORCE_INLINE GUINT getScapeNodeIndex(GUINT nodeindex) const { return m_node_array[nodeindex].m_escapeIndex; } //!@} }; //! Generic Box Tree Template /*! This class offers an structure for managing a box tree of primitives. Requires a Primitive prototype (like GIM_PRIMITIVE_MANAGER_PROTOTYPE ) and a Box tree structure ( like GIM_BOX_TREE). */ template class GIM_BOX_TREE_TEMPLATE_SET { protected: _GIM_PRIMITIVE_MANAGER_PROTOTYPE m_primitive_manager; _GIM_BOX_TREE_PROTOTYPE m_box_tree; protected: //stackless refit SIMD_FORCE_INLINE void refit() { GUINT nodecount = getNodeCount(); while (nodecount--) { if (isLeafNode(nodecount)) { GIM_AABB leafbox; m_primitive_manager.get_primitive_box(getNodeData(nodecount), leafbox); setNodeBound(nodecount, leafbox); } else { //get left bound GUINT childindex = getLeftNodeIndex(nodecount); GIM_AABB bound; getNodeBound(childindex, bound); //get right bound childindex = getRightNodeIndex(nodecount); GIM_AABB bound2; getNodeBound(childindex, bound2); bound.merge(bound2); setNodeBound(nodecount, bound); } } } public: GIM_BOX_TREE_TEMPLATE_SET() { } SIMD_FORCE_INLINE GIM_AABB getGlobalBox() const { GIM_AABB totalbox; getNodeBound(0, totalbox); return totalbox; } SIMD_FORCE_INLINE void setPrimitiveManager(const _GIM_PRIMITIVE_MANAGER_PROTOTYPE& primitive_manager) { m_primitive_manager = primitive_manager; } const _GIM_PRIMITIVE_MANAGER_PROTOTYPE& getPrimitiveManager() const { return m_primitive_manager; } _GIM_PRIMITIVE_MANAGER_PROTOTYPE& getPrimitiveManager() { return m_primitive_manager; } //! node manager prototype functions ///@{ //! this attemps to refit the box set. SIMD_FORCE_INLINE void update() { refit(); } //! this rebuild the entire set SIMD_FORCE_INLINE void buildSet() { //obtain primitive boxes gim_array primitive_boxes; primitive_boxes.resize(m_primitive_manager.get_primitive_count(), false); for (GUINT i = 0; i < primitive_boxes.size(); i++) { m_primitive_manager.get_primitive_box(i, primitive_boxes[i].m_bound); primitive_boxes[i].m_data = i; } m_box_tree.build_tree(primitive_boxes); } //! returns the indices of the primitives in the m_primitive_manager SIMD_FORCE_INLINE bool boxQuery(const GIM_AABB& box, gim_array& collided_results) const { GUINT curIndex = 0; GUINT numNodes = getNodeCount(); while (curIndex < numNodes) { GIM_AABB bound; getNodeBound(curIndex, bound); //catch bugs in tree data bool aabbOverlap = bound.has_collision(box); bool isleafnode = isLeafNode(curIndex); if (isleafnode && aabbOverlap) { collided_results.push_back(getNodeData(curIndex)); } if (aabbOverlap || isleafnode) { //next subnode curIndex++; } else { //skip node curIndex += getScapeNodeIndex(curIndex); } } if (collided_results.size() > 0) return true; return false; } //! returns the indices of the primitives in the m_primitive_manager SIMD_FORCE_INLINE bool boxQueryTrans(const GIM_AABB& box, const btTransform& transform, gim_array& collided_results) const { GIM_AABB transbox = box; transbox.appy_transform(transform); return boxQuery(transbox, collided_results); } //! returns the indices of the primitives in the m_primitive_manager SIMD_FORCE_INLINE bool rayQuery( const btVector3& ray_dir, const btVector3& ray_origin, gim_array& collided_results) const { GUINT curIndex = 0; GUINT numNodes = getNodeCount(); while (curIndex < numNodes) { GIM_AABB bound; getNodeBound(curIndex, bound); //catch bugs in tree data bool aabbOverlap = bound.collide_ray(ray_origin, ray_dir); bool isleafnode = isLeafNode(curIndex); if (isleafnode && aabbOverlap) { collided_results.push_back(getNodeData(curIndex)); } if (aabbOverlap || isleafnode) { //next subnode curIndex++; } else { //skip node curIndex += getScapeNodeIndex(curIndex); } } if (collided_results.size() > 0) return true; return false; } //! tells if this set has hierarcht SIMD_FORCE_INLINE bool hasHierarchy() const { return true; } //! tells if this set is a trimesh SIMD_FORCE_INLINE bool isTrimesh() const { return m_primitive_manager.is_trimesh(); } //! node count SIMD_FORCE_INLINE GUINT getNodeCount() const { return m_box_tree.getNodeCount(); } //! tells if the node is a leaf SIMD_FORCE_INLINE bool isLeafNode(GUINT nodeindex) const { return m_box_tree.isLeafNode(nodeindex); } SIMD_FORCE_INLINE GUINT getNodeData(GUINT nodeindex) const { return m_box_tree.getNodeData(nodeindex); } SIMD_FORCE_INLINE void getNodeBound(GUINT nodeindex, GIM_AABB& bound) const { m_box_tree.getNodeBound(nodeindex, bound); } SIMD_FORCE_INLINE void setNodeBound(GUINT nodeindex, const GIM_AABB& bound) { m_box_tree.setNodeBound(nodeindex, bound); } SIMD_FORCE_INLINE GUINT getLeftNodeIndex(GUINT nodeindex) const { return m_box_tree.getLeftNodeIndex(nodeindex); } SIMD_FORCE_INLINE GUINT getRightNodeIndex(GUINT nodeindex) const { return m_box_tree.getRightNodeIndex(nodeindex); } SIMD_FORCE_INLINE GUINT getScapeNodeIndex(GUINT nodeindex) const { return m_box_tree.getScapeNodeIndex(nodeindex); } SIMD_FORCE_INLINE void getNodeTriangle(GUINT nodeindex, GIM_TRIANGLE& triangle) const { m_primitive_manager.get_primitive_triangle(getNodeData(nodeindex), triangle); } }; //! Class for Box Tree Sets /*! this has the GIM_BOX_TREE implementation for bounding boxes. */ template class GIM_BOX_TREE_SET : public GIM_BOX_TREE_TEMPLATE_SET<_GIM_PRIMITIVE_MANAGER_PROTOTYPE, GIM_BOX_TREE> { public: }; /// GIM_BOX_SET collision methods template class GIM_TREE_TREE_COLLIDER { public: gim_pair_set* m_collision_pairs; BOX_SET_CLASS0* m_boxset0; BOX_SET_CLASS1* m_boxset1; GUINT current_node0; GUINT current_node1; bool node0_is_leaf; bool node1_is_leaf; bool t0_is_trimesh; bool t1_is_trimesh; bool node0_has_triangle; bool node1_has_triangle; GIM_AABB m_box0; GIM_AABB m_box1; GIM_BOX_BOX_TRANSFORM_CACHE trans_cache_1to0; btTransform trans_cache_0to1; GIM_TRIANGLE m_tri0; btVector4 m_tri0_plane; GIM_TRIANGLE m_tri1; btVector4 m_tri1_plane; public: GIM_TREE_TREE_COLLIDER() { current_node0 = G_UINT_INFINITY; current_node1 = G_UINT_INFINITY; } protected: SIMD_FORCE_INLINE void retrieve_node0_triangle(GUINT node0) { if (node0_has_triangle) return; m_boxset0->getNodeTriangle(node0, m_tri0); //transform triangle m_tri0.m_vertices[0] = trans_cache_0to1(m_tri0.m_vertices[0]); m_tri0.m_vertices[1] = trans_cache_0to1(m_tri0.m_vertices[1]); m_tri0.m_vertices[2] = trans_cache_0to1(m_tri0.m_vertices[2]); m_tri0.get_plane(m_tri0_plane); node0_has_triangle = true; } SIMD_FORCE_INLINE void retrieve_node1_triangle(GUINT node1) { if (node1_has_triangle) return; m_boxset1->getNodeTriangle(node1, m_tri1); //transform triangle m_tri1.m_vertices[0] = trans_cache_1to0.transform(m_tri1.m_vertices[0]); m_tri1.m_vertices[1] = trans_cache_1to0.transform(m_tri1.m_vertices[1]); m_tri1.m_vertices[2] = trans_cache_1to0.transform(m_tri1.m_vertices[2]); m_tri1.get_plane(m_tri1_plane); node1_has_triangle = true; } SIMD_FORCE_INLINE void retrieve_node0_info(GUINT node0) { if (node0 == current_node0) return; m_boxset0->getNodeBound(node0, m_box0); node0_is_leaf = m_boxset0->isLeafNode(node0); node0_has_triangle = false; current_node0 = node0; } SIMD_FORCE_INLINE void retrieve_node1_info(GUINT node1) { if (node1 == current_node1) return; m_boxset1->getNodeBound(node1, m_box1); node1_is_leaf = m_boxset1->isLeafNode(node1); node1_has_triangle = false; current_node1 = node1; } SIMD_FORCE_INLINE bool node_collision(GUINT node0, GUINT node1) { retrieve_node0_info(node0); retrieve_node1_info(node1); bool result = m_box0.overlapping_trans_cache(m_box1, trans_cache_1to0, true); if (!result) return false; if (t0_is_trimesh && node0_is_leaf) { //perform primitive vs box collision retrieve_node0_triangle(node0); //do triangle vs box collision m_box1.increment_margin(m_tri0.m_margin); result = m_box1.collide_triangle_exact( m_tri0.m_vertices[0], m_tri0.m_vertices[1], m_tri0.m_vertices[2], m_tri0_plane); m_box1.increment_margin(-m_tri0.m_margin); if (!result) return false; return true; } else if (t1_is_trimesh && node1_is_leaf) { //perform primitive vs box collision retrieve_node1_triangle(node1); //do triangle vs box collision m_box0.increment_margin(m_tri1.m_margin); result = m_box0.collide_triangle_exact( m_tri1.m_vertices[0], m_tri1.m_vertices[1], m_tri1.m_vertices[2], m_tri1_plane); m_box0.increment_margin(-m_tri1.m_margin); if (!result) return false; return true; } return true; } //stackless collision routine void find_collision_pairs() { gim_pair_set stack_collisions; stack_collisions.reserve(32); //add the first pair stack_collisions.push_pair(0, 0); while (stack_collisions.size()) { //retrieve the last pair and pop GUINT node0 = stack_collisions.back().m_index1; GUINT node1 = stack_collisions.back().m_index2; stack_collisions.pop_back(); if (node_collision(node0, node1)) // a collision is found { if (node0_is_leaf) { if (node1_is_leaf) { m_collision_pairs->push_pair(m_boxset0->getNodeData(node0), m_boxset1->getNodeData(node1)); } else { //collide left stack_collisions.push_pair(node0, m_boxset1->getLeftNodeIndex(node1)); //collide right stack_collisions.push_pair(node0, m_boxset1->getRightNodeIndex(node1)); } } else { if (node1_is_leaf) { //collide left stack_collisions.push_pair(m_boxset0->getLeftNodeIndex(node0), node1); //collide right stack_collisions.push_pair(m_boxset0->getRightNodeIndex(node0), node1); } else { GUINT left0 = m_boxset0->getLeftNodeIndex(node0); GUINT right0 = m_boxset0->getRightNodeIndex(node0); GUINT left1 = m_boxset1->getLeftNodeIndex(node1); GUINT right1 = m_boxset1->getRightNodeIndex(node1); //collide left stack_collisions.push_pair(left0, left1); //collide right stack_collisions.push_pair(left0, right1); //collide left stack_collisions.push_pair(right0, left1); //collide right stack_collisions.push_pair(right0, right1); } // else if node1 is not a leaf } // else if node0 is not a leaf } // if(node_collision(node0,node1)) } //while(stack_collisions.size()) } public: void find_collision(BOX_SET_CLASS0* boxset1, const btTransform& trans1, BOX_SET_CLASS1* boxset2, const btTransform& trans2, gim_pair_set& collision_pairs, bool complete_primitive_tests = true) { m_collision_pairs = &collision_pairs; m_boxset0 = boxset1; m_boxset1 = boxset2; trans_cache_1to0.calc_from_homogenic(trans1, trans2); trans_cache_0to1 = trans2.inverse(); trans_cache_0to1 *= trans1; if (complete_primitive_tests) { t0_is_trimesh = boxset1->getPrimitiveManager().is_trimesh(); t1_is_trimesh = boxset2->getPrimitiveManager().is_trimesh(); } else { t0_is_trimesh = false; t1_is_trimesh = false; } find_collision_pairs(); } }; #endif // GIM_BOXPRUNING_H_INCLUDED ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/gim_clip_polygon.h ================================================ #ifndef GIM_CLIP_POLYGON_H_INCLUDED #define GIM_CLIP_POLYGON_H_INCLUDED /*! \file gim_tri_collision.h \author Francisco Leon Najera */ /* ----------------------------------------------------------------------------- This source file is part of GIMPACT Library. For the latest info, see http://gimpact.sourceforge.net/ Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371. email: projectileman@yahoo.com This library is free software; you can redistribute it and/or modify it under the terms of EITHER: (1) The GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The text of the GNU Lesser General Public License is included with this library in the file GIMPACT-LICENSE-LGPL.TXT. (2) The BSD-style license that is included with this library in the file GIMPACT-LICENSE-BSD.TXT. (3) The zlib/libpng license that is included with this library in the file GIMPACT-LICENSE-ZLIB.TXT. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details. ----------------------------------------------------------------------------- */ //! This function calcs the distance from a 3D plane class DISTANCE_PLANE_3D_FUNC { public: template inline GREAL operator()(const CLASS_PLANE& plane, const CLASS_POINT& point) { return DISTANCE_PLANE_POINT(plane, point); } }; template SIMD_FORCE_INLINE void PLANE_CLIP_POLYGON_COLLECT( const CLASS_POINT& point0, const CLASS_POINT& point1, GREAL dist0, GREAL dist1, CLASS_POINT* clipped, GUINT& clipped_count) { GUINT _prevclassif = (dist0 > G_EPSILON); GUINT _classif = (dist1 > G_EPSILON); if (_classif != _prevclassif) { GREAL blendfactor = -dist0 / (dist1 - dist0); VEC_BLEND(clipped[clipped_count], point0, point1, blendfactor); clipped_count++; } if (!_classif) { VEC_COPY(clipped[clipped_count], point1); clipped_count++; } } //! Clips a polygon by a plane /*! *\return The count of the clipped counts */ template SIMD_FORCE_INLINE GUINT PLANE_CLIP_POLYGON_GENERIC( const CLASS_PLANE& plane, const CLASS_POINT* polygon_points, GUINT polygon_point_count, CLASS_POINT* clipped, DISTANCE_PLANE_FUNC distance_func) { GUINT clipped_count = 0; //clip first point GREAL firstdist = distance_func(plane, polygon_points[0]); ; if (!(firstdist > G_EPSILON)) { VEC_COPY(clipped[clipped_count], polygon_points[0]); clipped_count++; } GREAL olddist = firstdist; for (GUINT _i = 1; _i < polygon_point_count; _i++) { GREAL dist = distance_func(plane, polygon_points[_i]); PLANE_CLIP_POLYGON_COLLECT( polygon_points[_i - 1], polygon_points[_i], olddist, dist, clipped, clipped_count); olddist = dist; } //RETURN TO FIRST point PLANE_CLIP_POLYGON_COLLECT( polygon_points[polygon_point_count - 1], polygon_points[0], olddist, firstdist, clipped, clipped_count); return clipped_count; } //! Clips a polygon by a plane /*! *\return The count of the clipped counts */ template SIMD_FORCE_INLINE GUINT PLANE_CLIP_TRIANGLE_GENERIC( const CLASS_PLANE& plane, const CLASS_POINT& point0, const CLASS_POINT& point1, const CLASS_POINT& point2, CLASS_POINT* clipped, DISTANCE_PLANE_FUNC distance_func) { GUINT clipped_count = 0; //clip first point GREAL firstdist = distance_func(plane, point0); ; if (!(firstdist > G_EPSILON)) { VEC_COPY(clipped[clipped_count], point0); clipped_count++; } // point 1 GREAL olddist = firstdist; GREAL dist = distance_func(plane, point1); PLANE_CLIP_POLYGON_COLLECT( point0, point1, olddist, dist, clipped, clipped_count); olddist = dist; // point 2 dist = distance_func(plane, point2); PLANE_CLIP_POLYGON_COLLECT( point1, point2, olddist, dist, clipped, clipped_count); olddist = dist; //RETURN TO FIRST point PLANE_CLIP_POLYGON_COLLECT( point2, point0, olddist, firstdist, clipped, clipped_count); return clipped_count; } template SIMD_FORCE_INLINE GUINT PLANE_CLIP_POLYGON3D( const CLASS_PLANE& plane, const CLASS_POINT* polygon_points, GUINT polygon_point_count, CLASS_POINT* clipped) { return PLANE_CLIP_POLYGON_GENERIC(plane, polygon_points, polygon_point_count, clipped, DISTANCE_PLANE_3D_FUNC()); } template SIMD_FORCE_INLINE GUINT PLANE_CLIP_TRIANGLE3D( const CLASS_PLANE& plane, const CLASS_POINT& point0, const CLASS_POINT& point1, const CLASS_POINT& point2, CLASS_POINT* clipped) { return PLANE_CLIP_TRIANGLE_GENERIC(plane, point0, point1, point2, clipped, DISTANCE_PLANE_3D_FUNC()); } #endif // GIM_TRI_COLLISION_H_INCLUDED ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/gim_contact.h ================================================ #ifndef GIM_CONTACT_H_INCLUDED #define GIM_CONTACT_H_INCLUDED /*! \file gim_contact.h \author Francisco Leon Najera */ /* ----------------------------------------------------------------------------- This source file is part of GIMPACT Library. For the latest info, see http://gimpact.sourceforge.net/ Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371. email: projectileman@yahoo.com This library is free software; you can redistribute it and/or modify it under the terms of EITHER: (1) The GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The text of the GNU Lesser General Public License is included with this library in the file GIMPACT-LICENSE-LGPL.TXT. (2) The BSD-style license that is included with this library in the file GIMPACT-LICENSE-BSD.TXT. (3) The zlib/libpng license that is included with this library in the file GIMPACT-LICENSE-ZLIB.TXT. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details. ----------------------------------------------------------------------------- */ #include "gim_geometry.h" #include "gim_radixsort.h" #include "gim_array.h" /** Configuration var for applying interpolation of contact normals */ #ifndef NORMAL_CONTACT_AVERAGE #define NORMAL_CONTACT_AVERAGE 1 #endif #ifndef CONTACT_DIFF_EPSILON #define CONTACT_DIFF_EPSILON 0.00001f #endif #ifndef BT_CONTACT_H_STRUCTS_INCLUDED /// Structure for collision results ///Functions for managing and sorting contacts resulting from a collision query. ///Contact lists must be create by calling \ref GIM_CREATE_CONTACT_LIST ///After querys, contact lists must be destroy by calling \ref GIM_DYNARRAY_DESTROY ///Contacts can be merge for avoid duplicate results by calling \ref gim_merge_contacts class GIM_CONTACT { public: btVector3 m_point; btVector3 m_normal; GREAL m_depth; //Positive value indicates interpenetration GREAL m_distance; //Padding not for use GUINT m_feature1; //Face number GUINT m_feature2; //Face number public: GIM_CONTACT() { } GIM_CONTACT(const GIM_CONTACT &contact) : m_point(contact.m_point), m_normal(contact.m_normal), m_depth(contact.m_depth), m_feature1(contact.m_feature1), m_feature2(contact.m_feature2) { m_point = contact.m_point; m_normal = contact.m_normal; m_depth = contact.m_depth; m_feature1 = contact.m_feature1; m_feature2 = contact.m_feature2; } GIM_CONTACT(const btVector3 &point, const btVector3 &normal, GREAL depth, GUINT feature1, GUINT feature2) : m_point(point), m_normal(normal), m_depth(depth), m_feature1(feature1), m_feature2(feature2) { } //! Calcs key for coord classification SIMD_FORCE_INLINE GUINT calc_key_contact() const { GINT _coords[] = { (GINT)(m_point[0] * 1000.0f + 1.0f), (GINT)(m_point[1] * 1333.0f), (GINT)(m_point[2] * 2133.0f + 3.0f)}; GUINT _hash = 0; GUINT *_uitmp = (GUINT *)(&_coords[0]); _hash = *_uitmp; _uitmp++; _hash += (*_uitmp) << 4; _uitmp++; _hash += (*_uitmp) << 8; return _hash; } SIMD_FORCE_INLINE void interpolate_normals(btVector3 *normals, GUINT normal_count) { btVector3 vec_sum(m_normal); for (GUINT i = 0; i < normal_count; i++) { vec_sum += normals[i]; } GREAL vec_sum_len = vec_sum.length2(); if (vec_sum_len < CONTACT_DIFF_EPSILON) return; GIM_INV_SQRT(vec_sum_len, vec_sum_len); // 1/sqrt(vec_sum_len) m_normal = vec_sum * vec_sum_len; } }; #endif class gim_contact_array : public gim_array { public: gim_contact_array() : gim_array(64) { } SIMD_FORCE_INLINE void push_contact(const btVector3 &point, const btVector3 &normal, GREAL depth, GUINT feature1, GUINT feature2) { push_back_mem(); GIM_CONTACT &newele = back(); newele.m_point = point; newele.m_normal = normal; newele.m_depth = depth; newele.m_feature1 = feature1; newele.m_feature2 = feature2; } SIMD_FORCE_INLINE void push_triangle_contacts( const GIM_TRIANGLE_CONTACT_DATA &tricontact, GUINT feature1, GUINT feature2) { for (GUINT i = 0; i < tricontact.m_point_count; i++) { push_back_mem(); GIM_CONTACT &newele = back(); newele.m_point = tricontact.m_points[i]; newele.m_normal = tricontact.m_separating_normal; newele.m_depth = tricontact.m_penetration_depth; newele.m_feature1 = feature1; newele.m_feature2 = feature2; } } void merge_contacts(const gim_contact_array &contacts, bool normal_contact_average = true); void merge_contacts_unique(const gim_contact_array &contacts); }; #endif // GIM_CONTACT_H_INCLUDED ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/gim_geom_types.h ================================================ #ifndef GIM_GEOM_TYPES_H_INCLUDED #define GIM_GEOM_TYPES_H_INCLUDED /*! \file gim_geom_types.h \author Francisco Leon Najera */ /* ----------------------------------------------------------------------------- This source file is part of GIMPACT Library. For the latest info, see http://gimpact.sourceforge.net/ Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371. email: projectileman@yahoo.com This library is free software; you can redistribute it and/or modify it under the terms of EITHER: (1) The GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The text of the GNU Lesser General Public License is included with this library in the file GIMPACT-LICENSE-LGPL.TXT. (2) The BSD-style license that is included with this library in the file GIMPACT-LICENSE-BSD.TXT. (3) The zlib/libpng license that is included with this library in the file GIMPACT-LICENSE-ZLIB.TXT. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details. ----------------------------------------------------------------------------- */ #include "gim_math.h" //! Short Integer vector 2D typedef GSHORT vec2s[2]; //! Integer vector 3D typedef GSHORT vec3s[3]; //! Integer vector 4D typedef GSHORT vec4s[4]; //! Short Integer vector 2D typedef GUSHORT vec2us[2]; //! Integer vector 3D typedef GUSHORT vec3us[3]; //! Integer vector 4D typedef GUSHORT vec4us[4]; //! Integer vector 2D typedef GINT vec2i[2]; //! Integer vector 3D typedef GINT vec3i[3]; //! Integer vector 4D typedef GINT vec4i[4]; //! Unsigned Integer vector 2D typedef GUINT vec2ui[2]; //! Unsigned Integer vector 3D typedef GUINT vec3ui[3]; //! Unsigned Integer vector 4D typedef GUINT vec4ui[4]; //! Float vector 2D typedef GREAL vec2f[2]; //! Float vector 3D typedef GREAL vec3f[3]; //! Float vector 4D typedef GREAL vec4f[4]; //! Double vector 2D typedef GREAL2 vec2d[2]; //! Float vector 3D typedef GREAL2 vec3d[3]; //! Float vector 4D typedef GREAL2 vec4d[4]; //! Matrix 2D, row ordered typedef GREAL mat2f[2][2]; //! Matrix 3D, row ordered typedef GREAL mat3f[3][3]; //! Matrix 4D, row ordered typedef GREAL mat4f[4][4]; //! Quaternion typedef GREAL quatf[4]; //typedef struct _aabb3f aabb3f; #endif // GIM_GEOM_TYPES_H_INCLUDED ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/gim_geometry.h ================================================ #ifndef GIM_GEOMETRY_H_INCLUDED #define GIM_GEOMETRY_H_INCLUDED /*! \file gim_geometry.h \author Francisco Leon Najera */ /* ----------------------------------------------------------------------------- This source file is part of GIMPACT Library. For the latest info, see http://gimpact.sourceforge.net/ Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371. email: projectileman@yahoo.com This library is free software; you can redistribute it and/or modify it under the terms of EITHER: (1) The GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The text of the GNU Lesser General Public License is included with this library in the file GIMPACT-LICENSE-LGPL.TXT. (2) The BSD-style license that is included with this library in the file GIMPACT-LICENSE-BSD.TXT. (3) The zlib/libpng license that is included with this library in the file GIMPACT-LICENSE-ZLIB.TXT. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details. ----------------------------------------------------------------------------- */ ///Additional Headers for Collision #include "gim_basic_geometry_operations.h" #include "gim_clip_polygon.h" #include "gim_box_collision.h" #include "gim_tri_collision.h" #endif // GIM_VECTOR_H_INCLUDED ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/gim_hash_table.h ================================================ #ifndef GIM_HASH_TABLE_H_INCLUDED #define GIM_HASH_TABLE_H_INCLUDED /*! \file gim_trimesh_data.h \author Francisco Leon Najera */ /* ----------------------------------------------------------------------------- This source file is part of GIMPACT Library. For the latest info, see http://gimpact.sourceforge.net/ Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371. email: projectileman@yahoo.com This library is free software; you can redistribute it and/or modify it under the terms of EITHER: (1) The GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The text of the GNU Lesser General Public License is included with this library in the file GIMPACT-LICENSE-LGPL.TXT. (2) The BSD-style license that is included with this library in the file GIMPACT-LICENSE-BSD.TXT. (3) The zlib/libpng license that is included with this library in the file GIMPACT-LICENSE-ZLIB.TXT. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details. ----------------------------------------------------------------------------- */ #include "gim_radixsort.h" #define GIM_INVALID_HASH 0xffffffff //!< A very very high value #define GIM_DEFAULT_HASH_TABLE_SIZE 380 #define GIM_DEFAULT_HASH_TABLE_NODE_SIZE 4 #define GIM_HASH_TABLE_GROW_FACTOR 2 #define GIM_MIN_RADIX_SORT_SIZE 860 //!< calibrated on a PIII template struct GIM_HASH_TABLE_NODE { GUINT m_key; T m_data; GIM_HASH_TABLE_NODE() { } GIM_HASH_TABLE_NODE(const GIM_HASH_TABLE_NODE& value) { m_key = value.m_key; m_data = value.m_data; } GIM_HASH_TABLE_NODE(GUINT key, const T& data) { m_key = key; m_data = data; } bool operator<(const GIM_HASH_TABLE_NODE& other) const { ///inverse order, further objects are first if (m_key < other.m_key) return true; return false; } bool operator>(const GIM_HASH_TABLE_NODE& other) const { ///inverse order, further objects are first if (m_key > other.m_key) return true; return false; } bool operator==(const GIM_HASH_TABLE_NODE& other) const { ///inverse order, further objects are first if (m_key == other.m_key) return true; return false; } }; ///Macro for getting the key class GIM_HASH_NODE_GET_KEY { public: template inline GUINT operator()(const T& a) { return a.m_key; } }; ///Macro for comparing the key and the element class GIM_HASH_NODE_CMP_KEY_MACRO { public: template inline int operator()(const T& a, GUINT key) { return ((int)(a.m_key - key)); } }; ///Macro for comparing Hash nodes class GIM_HASH_NODE_CMP_MACRO { public: template inline int operator()(const T& a, const T& b) { return ((int)(a.m_key - b.m_key)); } }; //! Sorting for hash table /*! switch automatically between quicksort and radixsort */ template void gim_sort_hash_node_array(T* array, GUINT array_count) { if (array_count < GIM_MIN_RADIX_SORT_SIZE) { gim_heap_sort(array, array_count, GIM_HASH_NODE_CMP_MACRO()); } else { memcopy_elements_func cmpfunc; gim_radix_sort(array, array_count, GIM_HASH_NODE_GET_KEY(), cmpfunc); } } // Note: assumes long is at least 32 bits. #define GIM_NUM_PRIME 28 static const GUINT gim_prime_list[GIM_NUM_PRIME] = { 53ul, 97ul, 193ul, 389ul, 769ul, 1543ul, 3079ul, 6151ul, 12289ul, 24593ul, 49157ul, 98317ul, 196613ul, 393241ul, 786433ul, 1572869ul, 3145739ul, 6291469ul, 12582917ul, 25165843ul, 50331653ul, 100663319ul, 201326611ul, 402653189ul, 805306457ul, 1610612741ul, 3221225473ul, 4294967291ul}; inline GUINT gim_next_prime(GUINT number) { //Find nearest upper prime GUINT result_ind = 0; gim_binary_search(gim_prime_list, 0, (GIM_NUM_PRIME - 2), number, result_ind); // inv: result_ind < 28 return gim_prime_list[result_ind]; } //! A compact hash table implementation /*! A memory aligned compact hash table that coud be treated as an array. It could be a simple sorted array without the overhead of the hash key bucked, or could be a formely hash table with an array of keys. You can use switch_to_hashtable() and switch_to_sorted_array for saving space or increase speed.
    • if node_size = 0, then this container becomes a simple sorted array allocator. reserve_size is used for reserve memory in m_nodes. When the array size reaches the size equivalent to 'min_hash_table_size', then it becomes a hash table by calling check_for_switching_to_hashtable.
    • If node_size != 0, then this container becomes a hash table for ever
    */ template class gim_hash_table { protected: typedef GIM_HASH_TABLE_NODE _node_type; //!The nodes //array< _node_type, SuperAllocator<_node_type> > m_nodes; gim_array<_node_type> m_nodes; //SuperBufferedArray< _node_type > m_nodes; bool m_sorted; ///Hash table data management. The hash table has the indices to the corresponding m_nodes array GUINT* m_hash_table; //!< GUINT m_table_size; //!< GUINT m_node_size; //!< GUINT m_min_hash_table_size; //! Returns the cell index inline GUINT _find_cell(GUINT hashkey) { _node_type* nodesptr = m_nodes.pointer(); GUINT start_index = (hashkey % m_table_size) * m_node_size; GUINT end_index = start_index + m_node_size; while (start_index < end_index) { GUINT value = m_hash_table[start_index]; if (value != GIM_INVALID_HASH) { if (nodesptr[value].m_key == hashkey) return start_index; } start_index++; } return GIM_INVALID_HASH; } //! Find the avaliable cell for the hashkey, and return an existing cell if it has the same hash key inline GUINT _find_avaliable_cell(GUINT hashkey) { _node_type* nodesptr = m_nodes.pointer(); GUINT avaliable_index = GIM_INVALID_HASH; GUINT start_index = (hashkey % m_table_size) * m_node_size; GUINT end_index = start_index + m_node_size; while (start_index < end_index) { GUINT value = m_hash_table[start_index]; if (value == GIM_INVALID_HASH) { if (avaliable_index == GIM_INVALID_HASH) { avaliable_index = start_index; } } else if (nodesptr[value].m_key == hashkey) { return start_index; } start_index++; } return avaliable_index; } //! reserves the memory for the hash table. /*! \pre hash table must be empty \post reserves the memory for the hash table, an initializes all elements to GIM_INVALID_HASH. */ inline void _reserve_table_memory(GUINT newtablesize) { if (newtablesize == 0) return; if (m_node_size == 0) return; //Get a Prime size m_table_size = gim_next_prime(newtablesize); GUINT datasize = m_table_size * m_node_size; //Alloc the data buffer m_hash_table = (GUINT*)gim_alloc(datasize * sizeof(GUINT)); } inline void _invalidate_keys() { GUINT datasize = m_table_size * m_node_size; for (GUINT i = 0; i < datasize; i++) { m_hash_table[i] = GIM_INVALID_HASH; // invalidate keys } } //! Clear all memory for the hash table inline void _clear_table_memory() { if (m_hash_table == NULL) return; gim_free(m_hash_table); m_hash_table = NULL; m_table_size = 0; } //! Invalidates the keys (Assigning GIM_INVALID_HASH to all) Reorders the hash keys inline void _rehash() { _invalidate_keys(); _node_type* nodesptr = m_nodes.pointer(); for (GUINT i = 0; i < (GUINT)m_nodes.size(); i++) { GUINT nodekey = nodesptr[i].m_key; if (nodekey != GIM_INVALID_HASH) { //Search for the avaliable cell in buffer GUINT index = _find_avaliable_cell(nodekey); if (m_hash_table[index] != GIM_INVALID_HASH) { //The new index is alreade used... discard this new incomming object, repeated key btAssert(m_hash_table[index] == nodekey); nodesptr[i].m_key = GIM_INVALID_HASH; } else { //; //Assign the value for alloc m_hash_table[index] = i; } } } } //! Resize hash table indices inline void _resize_table(GUINT newsize) { //Clear memory _clear_table_memory(); //Alloc the data _reserve_table_memory(newsize); //Invalidate keys and rehash _rehash(); } //! Destroy hash table memory inline void _destroy() { if (m_hash_table == NULL) return; _clear_table_memory(); } //! Finds an avaliable hash table cell, and resizes the table if there isn't space inline GUINT _assign_hash_table_cell(GUINT hashkey) { GUINT cell_index = _find_avaliable_cell(hashkey); if (cell_index == GIM_INVALID_HASH) { //rehashing _resize_table(m_table_size + 1); GUINT cell_index = _find_avaliable_cell(hashkey); btAssert(cell_index != GIM_INVALID_HASH); } return cell_index; } //! erase by index in hash table inline bool _erase_by_index_hash_table(GUINT index) { if (index >= m_nodes.size()) return false; if (m_nodes[index].m_key != GIM_INVALID_HASH) { //Search for the avaliable cell in buffer GUINT cell_index = _find_cell(m_nodes[index].m_key); btAssert(cell_index != GIM_INVALID_HASH); btAssert(m_hash_table[cell_index] == index); m_hash_table[cell_index] = GIM_INVALID_HASH; } return this->_erase_unsorted(index); } //! erase by key in hash table inline bool _erase_hash_table(GUINT hashkey) { if (hashkey == GIM_INVALID_HASH) return false; //Search for the avaliable cell in buffer GUINT cell_index = _find_cell(hashkey); if (cell_index == GIM_INVALID_HASH) return false; GUINT index = m_hash_table[cell_index]; m_hash_table[cell_index] = GIM_INVALID_HASH; return this->_erase_unsorted(index); } //! insert an element in hash table /*! If the element exists, this won't insert the element \return the index in the array of the existing element,or GIM_INVALID_HASH if the element has been inserted If so, the element has been inserted at the last position of the array. */ inline GUINT _insert_hash_table(GUINT hashkey, const T& value) { if (hashkey == GIM_INVALID_HASH) { //Insert anyway _insert_unsorted(hashkey, value); return GIM_INVALID_HASH; } GUINT cell_index = _assign_hash_table_cell(hashkey); GUINT value_key = m_hash_table[cell_index]; if (value_key != GIM_INVALID_HASH) return value_key; // Not overrited m_hash_table[cell_index] = m_nodes.size(); _insert_unsorted(hashkey, value); return GIM_INVALID_HASH; } //! insert an element in hash table. /*! If the element exists, this replaces the element. \return the index in the array of the existing element,or GIM_INVALID_HASH if the element has been inserted If so, the element has been inserted at the last position of the array. */ inline GUINT _insert_hash_table_replace(GUINT hashkey, const T& value) { if (hashkey == GIM_INVALID_HASH) { //Insert anyway _insert_unsorted(hashkey, value); return GIM_INVALID_HASH; } GUINT cell_index = _assign_hash_table_cell(hashkey); GUINT value_key = m_hash_table[cell_index]; if (value_key != GIM_INVALID_HASH) { //replaces the existing m_nodes[value_key] = _node_type(hashkey, value); return value_key; // index of the replaced element } m_hash_table[cell_index] = m_nodes.size(); _insert_unsorted(hashkey, value); return GIM_INVALID_HASH; } ///Sorted array data management. The hash table has the indices to the corresponding m_nodes array inline bool _erase_sorted(GUINT index) { if (index >= (GUINT)m_nodes.size()) return false; m_nodes.erase_sorted(index); if (m_nodes.size() < 2) m_sorted = false; return true; } //! faster, but unsorted inline bool _erase_unsorted(GUINT index) { if (index >= m_nodes.size()) return false; GUINT lastindex = m_nodes.size() - 1; if (index < lastindex && m_hash_table != 0) { GUINT hashkey = m_nodes[lastindex].m_key; if (hashkey != GIM_INVALID_HASH) { //update the new position of the last element GUINT cell_index = _find_cell(hashkey); btAssert(cell_index != GIM_INVALID_HASH); //new position of the last element which will be swaped m_hash_table[cell_index] = index; } } m_nodes.erase(index); m_sorted = false; return true; } //! Insert in position ordered /*! Also checks if it is needed to transform this container to a hash table, by calling check_for_switching_to_hashtable */ inline void _insert_in_pos(GUINT hashkey, const T& value, GUINT pos) { m_nodes.insert(_node_type(hashkey, value), pos); this->check_for_switching_to_hashtable(); } //! Insert an element in an ordered array inline GUINT _insert_sorted(GUINT hashkey, const T& value) { if (hashkey == GIM_INVALID_HASH || size() == 0) { m_nodes.push_back(_node_type(hashkey, value)); return GIM_INVALID_HASH; } //Insert at last position //Sort element GUINT result_ind = 0; GUINT last_index = m_nodes.size() - 1; _node_type* ptr = m_nodes.pointer(); bool found = gim_binary_search_ex( ptr, 0, last_index, result_ind, hashkey, GIM_HASH_NODE_CMP_KEY_MACRO()); //Insert before found index if (found) { return result_ind; } else { _insert_in_pos(hashkey, value, result_ind); } return GIM_INVALID_HASH; } inline GUINT _insert_sorted_replace(GUINT hashkey, const T& value) { if (hashkey == GIM_INVALID_HASH || size() == 0) { m_nodes.push_back(_node_type(hashkey, value)); return GIM_INVALID_HASH; } //Insert at last position //Sort element GUINT result_ind; GUINT last_index = m_nodes.size() - 1; _node_type* ptr = m_nodes.pointer(); bool found = gim_binary_search_ex( ptr, 0, last_index, result_ind, hashkey, GIM_HASH_NODE_CMP_KEY_MACRO()); //Insert before found index if (found) { m_nodes[result_ind] = _node_type(hashkey, value); } else { _insert_in_pos(hashkey, value, result_ind); } return result_ind; } //! Fast insertion in m_nodes array inline GUINT _insert_unsorted(GUINT hashkey, const T& value) { m_nodes.push_back(_node_type(hashkey, value)); m_sorted = false; return GIM_INVALID_HASH; } public: /*!
  • if node_size = 0, then this container becomes a simple sorted array allocator. reserve_size is used for reserve memory in m_nodes. When the array size reaches the size equivalent to 'min_hash_table_size', then it becomes a hash table by calling check_for_switching_to_hashtable.
  • If node_size != 0, then this container becomes a hash table for ever */ gim_hash_table(GUINT reserve_size = GIM_DEFAULT_HASH_TABLE_SIZE, GUINT node_size = GIM_DEFAULT_HASH_TABLE_NODE_SIZE, GUINT min_hash_table_size = GIM_INVALID_HASH) { m_hash_table = NULL; m_table_size = 0; m_sorted = false; m_node_size = node_size; m_min_hash_table_size = min_hash_table_size; if (m_node_size != 0) { if (reserve_size != 0) { m_nodes.reserve(reserve_size); _reserve_table_memory(reserve_size); _invalidate_keys(); } else { m_nodes.reserve(GIM_DEFAULT_HASH_TABLE_SIZE); _reserve_table_memory(GIM_DEFAULT_HASH_TABLE_SIZE); _invalidate_keys(); } } else if (reserve_size != 0) { m_nodes.reserve(reserve_size); } } ~gim_hash_table() { _destroy(); } inline bool is_hash_table() { if (m_hash_table) return true; return false; } inline bool is_sorted() { if (size() < 2) return true; return m_sorted; } bool sort() { if (is_sorted()) return true; if (m_nodes.size() < 2) return false; _node_type* ptr = m_nodes.pointer(); GUINT siz = m_nodes.size(); gim_sort_hash_node_array(ptr, siz); m_sorted = true; if (m_hash_table) { _rehash(); } return true; } bool switch_to_hashtable() { if (m_hash_table) return false; if (m_node_size == 0) m_node_size = GIM_DEFAULT_HASH_TABLE_NODE_SIZE; if (m_nodes.size() < GIM_DEFAULT_HASH_TABLE_SIZE) { _resize_table(GIM_DEFAULT_HASH_TABLE_SIZE); } else { _resize_table(m_nodes.size() + 1); } return true; } bool switch_to_sorted_array() { if (m_hash_table == NULL) return true; _clear_table_memory(); return sort(); } //!If the container reaches the bool check_for_switching_to_hashtable() { if (this->m_hash_table) return true; if (!(m_nodes.size() < m_min_hash_table_size)) { if (m_node_size == 0) { m_node_size = GIM_DEFAULT_HASH_TABLE_NODE_SIZE; } _resize_table(m_nodes.size() + 1); return true; } return false; } inline void set_sorted(bool value) { m_sorted = value; } //! Retrieves the amount of keys. inline GUINT size() const { return m_nodes.size(); } //! Retrieves the hash key. inline GUINT get_key(GUINT index) const { return m_nodes[index].m_key; } //! Retrieves the value by index /*! */ inline T* get_value_by_index(GUINT index) { return &m_nodes[index].m_data; } inline const T& operator[](GUINT index) const { return m_nodes[index].m_data; } inline T& operator[](GUINT index) { return m_nodes[index].m_data; } //! Finds the index of the element with the key /*! \return the index in the array of the existing element,or GIM_INVALID_HASH if the element has been inserted If so, the element has been inserted at the last position of the array. */ inline GUINT find(GUINT hashkey) { if (m_hash_table) { GUINT cell_index = _find_cell(hashkey); if (cell_index == GIM_INVALID_HASH) return GIM_INVALID_HASH; return m_hash_table[cell_index]; } GUINT last_index = m_nodes.size(); if (last_index < 2) { if (last_index == 0) return GIM_INVALID_HASH; if (m_nodes[0].m_key == hashkey) return 0; return GIM_INVALID_HASH; } else if (m_sorted) { //Binary search GUINT result_ind = 0; last_index--; _node_type* ptr = m_nodes.pointer(); bool found = gim_binary_search_ex(ptr, 0, last_index, result_ind, hashkey, GIM_HASH_NODE_CMP_KEY_MACRO()); if (found) return result_ind; } return GIM_INVALID_HASH; } //! Retrieves the value associated with the index /*! \return the found element, or null */ inline T* get_value(GUINT hashkey) { GUINT index = find(hashkey); if (index == GIM_INVALID_HASH) return NULL; return &m_nodes[index].m_data; } /*! */ inline bool erase_by_index(GUINT index) { if (index > m_nodes.size()) return false; if (m_hash_table == NULL) { if (is_sorted()) { return this->_erase_sorted(index); } else { return this->_erase_unsorted(index); } } else { return this->_erase_by_index_hash_table(index); } return false; } inline bool erase_by_index_unsorted(GUINT index) { if (index > m_nodes.size()) return false; if (m_hash_table == NULL) { return this->_erase_unsorted(index); } else { return this->_erase_by_index_hash_table(index); } return false; } /*! */ inline bool erase_by_key(GUINT hashkey) { if (size() == 0) return false; if (m_hash_table) { return this->_erase_hash_table(hashkey); } //Binary search if (is_sorted() == false) return false; GUINT result_ind = find(hashkey); if (result_ind != GIM_INVALID_HASH) { return this->_erase_sorted(result_ind); } return false; } void clear() { m_nodes.clear(); if (m_hash_table == NULL) return; GUINT datasize = m_table_size * m_node_size; //Initialize the hashkeys. GUINT i; for (i = 0; i < datasize; i++) { m_hash_table[i] = GIM_INVALID_HASH; // invalidate keys } m_sorted = false; } //! Insert an element into the hash /*! \return If GIM_INVALID_HASH, the object has been inserted succesfully. Else it returns the position of the existing element. */ inline GUINT insert(GUINT hashkey, const T& element) { if (m_hash_table) { return this->_insert_hash_table(hashkey, element); } if (this->is_sorted()) { return this->_insert_sorted(hashkey, element); } return this->_insert_unsorted(hashkey, element); } //! Insert an element into the hash, and could overrite an existing object with the same hash. /*! \return If GIM_INVALID_HASH, the object has been inserted succesfully. Else it returns the position of the replaced element. */ inline GUINT insert_override(GUINT hashkey, const T& element) { if (m_hash_table) { return this->_insert_hash_table_replace(hashkey, element); } if (this->is_sorted()) { return this->_insert_sorted_replace(hashkey, element); } this->_insert_unsorted(hashkey, element); return m_nodes.size(); } //! Insert an element into the hash,But if this container is a sorted array, this inserts it unsorted /*! */ inline GUINT insert_unsorted(GUINT hashkey, const T& element) { if (m_hash_table) { return this->_insert_hash_table(hashkey, element); } return this->_insert_unsorted(hashkey, element); } }; #endif // GIM_CONTAINERS_H_INCLUDED ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/gim_linear_math.h ================================================ #ifndef GIM_LINEAR_H_INCLUDED #define GIM_LINEAR_H_INCLUDED /*! \file gim_linear_math.h *\author Francisco Leon Najera Type Independant Vector and matrix operations. */ /* ----------------------------------------------------------------------------- This source file is part of GIMPACT Library. For the latest info, see http://gimpact.sourceforge.net/ Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371. email: projectileman@yahoo.com This library is free software; you can redistribute it and/or modify it under the terms of EITHER: (1) The GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The text of the GNU Lesser General Public License is included with this library in the file GIMPACT-LICENSE-LGPL.TXT. (2) The BSD-style license that is included with this library in the file GIMPACT-LICENSE-BSD.TXT. (3) The zlib/libpng license that is included with this library in the file GIMPACT-LICENSE-ZLIB.TXT. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details. ----------------------------------------------------------------------------- */ #include "gim_math.h" #include "gim_geom_types.h" //! Zero out a 2D vector #define VEC_ZERO_2(a) \ { \ (a)[0] = (a)[1] = 0.0f; \ } //! Zero out a 3D vector #define VEC_ZERO(a) \ { \ (a)[0] = (a)[1] = (a)[2] = 0.0f; \ } /// Zero out a 4D vector #define VEC_ZERO_4(a) \ { \ (a)[0] = (a)[1] = (a)[2] = (a)[3] = 0.0f; \ } /// Vector copy #define VEC_COPY_2(b, a) \ { \ (b)[0] = (a)[0]; \ (b)[1] = (a)[1]; \ } /// Copy 3D vector #define VEC_COPY(b, a) \ { \ (b)[0] = (a)[0]; \ (b)[1] = (a)[1]; \ (b)[2] = (a)[2]; \ } /// Copy 4D vector #define VEC_COPY_4(b, a) \ { \ (b)[0] = (a)[0]; \ (b)[1] = (a)[1]; \ (b)[2] = (a)[2]; \ (b)[3] = (a)[3]; \ } /// VECTOR SWAP #define VEC_SWAP(b, a) \ { \ GIM_SWAP_NUMBERS((b)[0], (a)[0]); \ GIM_SWAP_NUMBERS((b)[1], (a)[1]); \ GIM_SWAP_NUMBERS((b)[2], (a)[2]); \ } /// Vector difference #define VEC_DIFF_2(v21, v2, v1) \ { \ (v21)[0] = (v2)[0] - (v1)[0]; \ (v21)[1] = (v2)[1] - (v1)[1]; \ } /// Vector difference #define VEC_DIFF(v21, v2, v1) \ { \ (v21)[0] = (v2)[0] - (v1)[0]; \ (v21)[1] = (v2)[1] - (v1)[1]; \ (v21)[2] = (v2)[2] - (v1)[2]; \ } /// Vector difference #define VEC_DIFF_4(v21, v2, v1) \ { \ (v21)[0] = (v2)[0] - (v1)[0]; \ (v21)[1] = (v2)[1] - (v1)[1]; \ (v21)[2] = (v2)[2] - (v1)[2]; \ (v21)[3] = (v2)[3] - (v1)[3]; \ } /// Vector sum #define VEC_SUM_2(v21, v2, v1) \ { \ (v21)[0] = (v2)[0] + (v1)[0]; \ (v21)[1] = (v2)[1] + (v1)[1]; \ } /// Vector sum #define VEC_SUM(v21, v2, v1) \ { \ (v21)[0] = (v2)[0] + (v1)[0]; \ (v21)[1] = (v2)[1] + (v1)[1]; \ (v21)[2] = (v2)[2] + (v1)[2]; \ } /// Vector sum #define VEC_SUM_4(v21, v2, v1) \ { \ (v21)[0] = (v2)[0] + (v1)[0]; \ (v21)[1] = (v2)[1] + (v1)[1]; \ (v21)[2] = (v2)[2] + (v1)[2]; \ (v21)[3] = (v2)[3] + (v1)[3]; \ } /// scalar times vector #define VEC_SCALE_2(c, a, b) \ { \ (c)[0] = (a) * (b)[0]; \ (c)[1] = (a) * (b)[1]; \ } /// scalar times vector #define VEC_SCALE(c, a, b) \ { \ (c)[0] = (a) * (b)[0]; \ (c)[1] = (a) * (b)[1]; \ (c)[2] = (a) * (b)[2]; \ } /// scalar times vector #define VEC_SCALE_4(c, a, b) \ { \ (c)[0] = (a) * (b)[0]; \ (c)[1] = (a) * (b)[1]; \ (c)[2] = (a) * (b)[2]; \ (c)[3] = (a) * (b)[3]; \ } /// accumulate scaled vector #define VEC_ACCUM_2(c, a, b) \ { \ (c)[0] += (a) * (b)[0]; \ (c)[1] += (a) * (b)[1]; \ } /// accumulate scaled vector #define VEC_ACCUM(c, a, b) \ { \ (c)[0] += (a) * (b)[0]; \ (c)[1] += (a) * (b)[1]; \ (c)[2] += (a) * (b)[2]; \ } /// accumulate scaled vector #define VEC_ACCUM_4(c, a, b) \ { \ (c)[0] += (a) * (b)[0]; \ (c)[1] += (a) * (b)[1]; \ (c)[2] += (a) * (b)[2]; \ (c)[3] += (a) * (b)[3]; \ } /// Vector dot product #define VEC_DOT_2(a, b) ((a)[0] * (b)[0] + (a)[1] * (b)[1]) /// Vector dot product #define VEC_DOT(a, b) ((a)[0] * (b)[0] + (a)[1] * (b)[1] + (a)[2] * (b)[2]) /// Vector dot product #define VEC_DOT_4(a, b) ((a)[0] * (b)[0] + (a)[1] * (b)[1] + (a)[2] * (b)[2] + (a)[3] * (b)[3]) /// vector impact parameter (squared) #define VEC_IMPACT_SQ(bsq, direction, position) \ { \ GREAL _llel_ = VEC_DOT(direction, position); \ bsq = VEC_DOT(position, position) - _llel_ * _llel_; \ } /// vector impact parameter #define VEC_IMPACT(bsq, direction, position) \ { \ VEC_IMPACT_SQ(bsq, direction, position); \ GIM_SQRT(bsq, bsq); \ } /// Vector length #define VEC_LENGTH_2(a, l) \ { \ GREAL _pp = VEC_DOT_2(a, a); \ GIM_SQRT(_pp, l); \ } /// Vector length #define VEC_LENGTH(a, l) \ { \ GREAL _pp = VEC_DOT(a, a); \ GIM_SQRT(_pp, l); \ } /// Vector length #define VEC_LENGTH_4(a, l) \ { \ GREAL _pp = VEC_DOT_4(a, a); \ GIM_SQRT(_pp, l); \ } /// Vector inv length #define VEC_INV_LENGTH_2(a, l) \ { \ GREAL _pp = VEC_DOT_2(a, a); \ GIM_INV_SQRT(_pp, l); \ } /// Vector inv length #define VEC_INV_LENGTH(a, l) \ { \ GREAL _pp = VEC_DOT(a, a); \ GIM_INV_SQRT(_pp, l); \ } /// Vector inv length #define VEC_INV_LENGTH_4(a, l) \ { \ GREAL _pp = VEC_DOT_4(a, a); \ GIM_INV_SQRT(_pp, l); \ } /// distance between two points #define VEC_DISTANCE(_len, _va, _vb) \ { \ vec3f _tmp_; \ VEC_DIFF(_tmp_, _vb, _va); \ VEC_LENGTH(_tmp_, _len); \ } /// Vector length #define VEC_CONJUGATE_LENGTH(a, l) \ { \ GREAL _pp = 1.0 - a[0] * a[0] - a[1] * a[1] - a[2] * a[2]; \ GIM_SQRT(_pp, l); \ } /// Vector length #define VEC_NORMALIZE(a) \ { \ GREAL len; \ VEC_INV_LENGTH(a, len); \ if (len < G_REAL_INFINITY) \ { \ a[0] *= len; \ a[1] *= len; \ a[2] *= len; \ } \ } /// Set Vector size #define VEC_RENORMALIZE(a, newlen) \ { \ GREAL len; \ VEC_INV_LENGTH(a, len); \ if (len < G_REAL_INFINITY) \ { \ len *= newlen; \ a[0] *= len; \ a[1] *= len; \ a[2] *= len; \ } \ } /// Vector cross #define VEC_CROSS(c, a, b) \ { \ c[0] = (a)[1] * (b)[2] - (a)[2] * (b)[1]; \ c[1] = (a)[2] * (b)[0] - (a)[0] * (b)[2]; \ c[2] = (a)[0] * (b)[1] - (a)[1] * (b)[0]; \ } /*! Vector perp -- assumes that n is of unit length * accepts vector v, subtracts out any component parallel to n */ #define VEC_PERPENDICULAR(vp, v, n) \ { \ GREAL dot = VEC_DOT(v, n); \ vp[0] = (v)[0] - dot * (n)[0]; \ vp[1] = (v)[1] - dot * (n)[1]; \ vp[2] = (v)[2] - dot * (n)[2]; \ } /*! Vector parallel -- assumes that n is of unit length */ #define VEC_PARALLEL(vp, v, n) \ { \ GREAL dot = VEC_DOT(v, n); \ vp[0] = (dot) * (n)[0]; \ vp[1] = (dot) * (n)[1]; \ vp[2] = (dot) * (n)[2]; \ } /*! Same as Vector parallel -- n can have any length * accepts vector v, subtracts out any component perpendicular to n */ #define VEC_PROJECT(vp, v, n) \ { \ GREAL scalar = VEC_DOT(v, n); \ scalar /= VEC_DOT(n, n); \ vp[0] = (scalar) * (n)[0]; \ vp[1] = (scalar) * (n)[1]; \ vp[2] = (scalar) * (n)[2]; \ } /*! accepts vector v*/ #define VEC_UNPROJECT(vp, v, n) \ { \ GREAL scalar = VEC_DOT(v, n); \ scalar = VEC_DOT(n, n) / scalar; \ vp[0] = (scalar) * (n)[0]; \ vp[1] = (scalar) * (n)[1]; \ vp[2] = (scalar) * (n)[2]; \ } /*! Vector reflection -- assumes n is of unit length Takes vector v, reflects it against reflector n, and returns vr */ #define VEC_REFLECT(vr, v, n) \ { \ GREAL dot = VEC_DOT(v, n); \ vr[0] = (v)[0] - 2.0 * (dot) * (n)[0]; \ vr[1] = (v)[1] - 2.0 * (dot) * (n)[1]; \ vr[2] = (v)[2] - 2.0 * (dot) * (n)[2]; \ } /*! Vector blending Takes two vectors a, b, blends them together with two scalars */ #define VEC_BLEND_AB(vr, sa, a, sb, b) \ { \ vr[0] = (sa) * (a)[0] + (sb) * (b)[0]; \ vr[1] = (sa) * (a)[1] + (sb) * (b)[1]; \ vr[2] = (sa) * (a)[2] + (sb) * (b)[2]; \ } /*! Vector blending Takes two vectors a, b, blends them together with s <=1 */ #define VEC_BLEND(vr, a, b, s) VEC_BLEND_AB(vr, (1 - s), a, s, b) #define VEC_SET3(a, b, op, c) \ a[0] = b[0] op c[0]; \ a[1] = b[1] op c[1]; \ a[2] = b[2] op c[2]; //! Finds the bigger cartesian coordinate from a vector #define VEC_MAYOR_COORD(vec, maxc) \ { \ GREAL A[] = {fabs(vec[0]), fabs(vec[1]), fabs(vec[2])}; \ maxc = A[0] > A[1] ? (A[0] > A[2] ? 0 : 2) : (A[1] > A[2] ? 1 : 2); \ } //! Finds the 2 smallest cartesian coordinates from a vector #define VEC_MINOR_AXES(vec, i0, i1) \ { \ VEC_MAYOR_COORD(vec, i0); \ i0 = (i0 + 1) % 3; \ i1 = (i0 + 1) % 3; \ } #define VEC_EQUAL(v1, v2) (v1[0] == v2[0] && v1[1] == v2[1] && v1[2] == v2[2]) #define VEC_NEAR_EQUAL(v1, v2) (GIM_NEAR_EQUAL(v1[0], v2[0]) && GIM_NEAR_EQUAL(v1[1], v2[1]) && GIM_NEAR_EQUAL(v1[2], v2[2])) /// Vector cross #define X_AXIS_CROSS_VEC(dst, src) \ { \ dst[0] = 0.0f; \ dst[1] = -src[2]; \ dst[2] = src[1]; \ } #define Y_AXIS_CROSS_VEC(dst, src) \ { \ dst[0] = src[2]; \ dst[1] = 0.0f; \ dst[2] = -src[0]; \ } #define Z_AXIS_CROSS_VEC(dst, src) \ { \ dst[0] = -src[1]; \ dst[1] = src[0]; \ dst[2] = 0.0f; \ } /// initialize matrix #define IDENTIFY_MATRIX_3X3(m) \ { \ m[0][0] = 1.0; \ m[0][1] = 0.0; \ m[0][2] = 0.0; \ \ m[1][0] = 0.0; \ m[1][1] = 1.0; \ m[1][2] = 0.0; \ \ m[2][0] = 0.0; \ m[2][1] = 0.0; \ m[2][2] = 1.0; \ } /*! initialize matrix */ #define IDENTIFY_MATRIX_4X4(m) \ { \ m[0][0] = 1.0; \ m[0][1] = 0.0; \ m[0][2] = 0.0; \ m[0][3] = 0.0; \ \ m[1][0] = 0.0; \ m[1][1] = 1.0; \ m[1][2] = 0.0; \ m[1][3] = 0.0; \ \ m[2][0] = 0.0; \ m[2][1] = 0.0; \ m[2][2] = 1.0; \ m[2][3] = 0.0; \ \ m[3][0] = 0.0; \ m[3][1] = 0.0; \ m[3][2] = 0.0; \ m[3][3] = 1.0; \ } /*! initialize matrix */ #define ZERO_MATRIX_4X4(m) \ { \ m[0][0] = 0.0; \ m[0][1] = 0.0; \ m[0][2] = 0.0; \ m[0][3] = 0.0; \ \ m[1][0] = 0.0; \ m[1][1] = 0.0; \ m[1][2] = 0.0; \ m[1][3] = 0.0; \ \ m[2][0] = 0.0; \ m[2][1] = 0.0; \ m[2][2] = 0.0; \ m[2][3] = 0.0; \ \ m[3][0] = 0.0; \ m[3][1] = 0.0; \ m[3][2] = 0.0; \ m[3][3] = 0.0; \ } /*! matrix rotation X */ #define ROTX_CS(m, cosine, sine) \ { \ /* rotation about the x-axis */ \ \ m[0][0] = 1.0; \ m[0][1] = 0.0; \ m[0][2] = 0.0; \ m[0][3] = 0.0; \ \ m[1][0] = 0.0; \ m[1][1] = (cosine); \ m[1][2] = (sine); \ m[1][3] = 0.0; \ \ m[2][0] = 0.0; \ m[2][1] = -(sine); \ m[2][2] = (cosine); \ m[2][3] = 0.0; \ \ m[3][0] = 0.0; \ m[3][1] = 0.0; \ m[3][2] = 0.0; \ m[3][3] = 1.0; \ } /*! matrix rotation Y */ #define ROTY_CS(m, cosine, sine) \ { \ /* rotation about the y-axis */ \ \ m[0][0] = (cosine); \ m[0][1] = 0.0; \ m[0][2] = -(sine); \ m[0][3] = 0.0; \ \ m[1][0] = 0.0; \ m[1][1] = 1.0; \ m[1][2] = 0.0; \ m[1][3] = 0.0; \ \ m[2][0] = (sine); \ m[2][1] = 0.0; \ m[2][2] = (cosine); \ m[2][3] = 0.0; \ \ m[3][0] = 0.0; \ m[3][1] = 0.0; \ m[3][2] = 0.0; \ m[3][3] = 1.0; \ } /*! matrix rotation Z */ #define ROTZ_CS(m, cosine, sine) \ { \ /* rotation about the z-axis */ \ \ m[0][0] = (cosine); \ m[0][1] = (sine); \ m[0][2] = 0.0; \ m[0][3] = 0.0; \ \ m[1][0] = -(sine); \ m[1][1] = (cosine); \ m[1][2] = 0.0; \ m[1][3] = 0.0; \ \ m[2][0] = 0.0; \ m[2][1] = 0.0; \ m[2][2] = 1.0; \ m[2][3] = 0.0; \ \ m[3][0] = 0.0; \ m[3][1] = 0.0; \ m[3][2] = 0.0; \ m[3][3] = 1.0; \ } /*! matrix copy */ #define COPY_MATRIX_2X2(b, a) \ { \ b[0][0] = a[0][0]; \ b[0][1] = a[0][1]; \ \ b[1][0] = a[1][0]; \ b[1][1] = a[1][1]; \ } /*! matrix copy */ #define COPY_MATRIX_2X3(b, a) \ { \ b[0][0] = a[0][0]; \ b[0][1] = a[0][1]; \ b[0][2] = a[0][2]; \ \ b[1][0] = a[1][0]; \ b[1][1] = a[1][1]; \ b[1][2] = a[1][2]; \ } /*! matrix copy */ #define COPY_MATRIX_3X3(b, a) \ { \ b[0][0] = a[0][0]; \ b[0][1] = a[0][1]; \ b[0][2] = a[0][2]; \ \ b[1][0] = a[1][0]; \ b[1][1] = a[1][1]; \ b[1][2] = a[1][2]; \ \ b[2][0] = a[2][0]; \ b[2][1] = a[2][1]; \ b[2][2] = a[2][2]; \ } /*! matrix copy */ #define COPY_MATRIX_4X4(b, a) \ { \ b[0][0] = a[0][0]; \ b[0][1] = a[0][1]; \ b[0][2] = a[0][2]; \ b[0][3] = a[0][3]; \ \ b[1][0] = a[1][0]; \ b[1][1] = a[1][1]; \ b[1][2] = a[1][2]; \ b[1][3] = a[1][3]; \ \ b[2][0] = a[2][0]; \ b[2][1] = a[2][1]; \ b[2][2] = a[2][2]; \ b[2][3] = a[2][3]; \ \ b[3][0] = a[3][0]; \ b[3][1] = a[3][1]; \ b[3][2] = a[3][2]; \ b[3][3] = a[3][3]; \ } /*! matrix transpose */ #define TRANSPOSE_MATRIX_2X2(b, a) \ { \ b[0][0] = a[0][0]; \ b[0][1] = a[1][0]; \ \ b[1][0] = a[0][1]; \ b[1][1] = a[1][1]; \ } /*! matrix transpose */ #define TRANSPOSE_MATRIX_3X3(b, a) \ { \ b[0][0] = a[0][0]; \ b[0][1] = a[1][0]; \ b[0][2] = a[2][0]; \ \ b[1][0] = a[0][1]; \ b[1][1] = a[1][1]; \ b[1][2] = a[2][1]; \ \ b[2][0] = a[0][2]; \ b[2][1] = a[1][2]; \ b[2][2] = a[2][2]; \ } /*! matrix transpose */ #define TRANSPOSE_MATRIX_4X4(b, a) \ { \ b[0][0] = a[0][0]; \ b[0][1] = a[1][0]; \ b[0][2] = a[2][0]; \ b[0][3] = a[3][0]; \ \ b[1][0] = a[0][1]; \ b[1][1] = a[1][1]; \ b[1][2] = a[2][1]; \ b[1][3] = a[3][1]; \ \ b[2][0] = a[0][2]; \ b[2][1] = a[1][2]; \ b[2][2] = a[2][2]; \ b[2][3] = a[3][2]; \ \ b[3][0] = a[0][3]; \ b[3][1] = a[1][3]; \ b[3][2] = a[2][3]; \ b[3][3] = a[3][3]; \ } /*! multiply matrix by scalar */ #define SCALE_MATRIX_2X2(b, s, a) \ { \ b[0][0] = (s)*a[0][0]; \ b[0][1] = (s)*a[0][1]; \ \ b[1][0] = (s)*a[1][0]; \ b[1][1] = (s)*a[1][1]; \ } /*! multiply matrix by scalar */ #define SCALE_MATRIX_3X3(b, s, a) \ { \ b[0][0] = (s)*a[0][0]; \ b[0][1] = (s)*a[0][1]; \ b[0][2] = (s)*a[0][2]; \ \ b[1][0] = (s)*a[1][0]; \ b[1][1] = (s)*a[1][1]; \ b[1][2] = (s)*a[1][2]; \ \ b[2][0] = (s)*a[2][0]; \ b[2][1] = (s)*a[2][1]; \ b[2][2] = (s)*a[2][2]; \ } /*! multiply matrix by scalar */ #define SCALE_MATRIX_4X4(b, s, a) \ { \ b[0][0] = (s)*a[0][0]; \ b[0][1] = (s)*a[0][1]; \ b[0][2] = (s)*a[0][2]; \ b[0][3] = (s)*a[0][3]; \ \ b[1][0] = (s)*a[1][0]; \ b[1][1] = (s)*a[1][1]; \ b[1][2] = (s)*a[1][2]; \ b[1][3] = (s)*a[1][3]; \ \ b[2][0] = (s)*a[2][0]; \ b[2][1] = (s)*a[2][1]; \ b[2][2] = (s)*a[2][2]; \ b[2][3] = (s)*a[2][3]; \ \ b[3][0] = s * a[3][0]; \ b[3][1] = s * a[3][1]; \ b[3][2] = s * a[3][2]; \ b[3][3] = s * a[3][3]; \ } /*! multiply matrix by scalar */ #define SCALE_VEC_MATRIX_2X2(b, svec, a) \ { \ b[0][0] = svec[0] * a[0][0]; \ b[1][0] = svec[0] * a[1][0]; \ \ b[0][1] = svec[1] * a[0][1]; \ b[1][1] = svec[1] * a[1][1]; \ } /*! multiply matrix by scalar. Each columns is scaled by each scalar vector component */ #define SCALE_VEC_MATRIX_3X3(b, svec, a) \ { \ b[0][0] = svec[0] * a[0][0]; \ b[1][0] = svec[0] * a[1][0]; \ b[2][0] = svec[0] * a[2][0]; \ \ b[0][1] = svec[1] * a[0][1]; \ b[1][1] = svec[1] * a[1][1]; \ b[2][1] = svec[1] * a[2][1]; \ \ b[0][2] = svec[2] * a[0][2]; \ b[1][2] = svec[2] * a[1][2]; \ b[2][2] = svec[2] * a[2][2]; \ } /*! multiply matrix by scalar */ #define SCALE_VEC_MATRIX_4X4(b, svec, a) \ { \ b[0][0] = svec[0] * a[0][0]; \ b[1][0] = svec[0] * a[1][0]; \ b[2][0] = svec[0] * a[2][0]; \ b[3][0] = svec[0] * a[3][0]; \ \ b[0][1] = svec[1] * a[0][1]; \ b[1][1] = svec[1] * a[1][1]; \ b[2][1] = svec[1] * a[2][1]; \ b[3][1] = svec[1] * a[3][1]; \ \ b[0][2] = svec[2] * a[0][2]; \ b[1][2] = svec[2] * a[1][2]; \ b[2][2] = svec[2] * a[2][2]; \ b[3][2] = svec[2] * a[3][2]; \ \ b[0][3] = svec[3] * a[0][3]; \ b[1][3] = svec[3] * a[1][3]; \ b[2][3] = svec[3] * a[2][3]; \ b[3][3] = svec[3] * a[3][3]; \ } /*! multiply matrix by scalar */ #define ACCUM_SCALE_MATRIX_2X2(b, s, a) \ { \ b[0][0] += (s)*a[0][0]; \ b[0][1] += (s)*a[0][1]; \ \ b[1][0] += (s)*a[1][0]; \ b[1][1] += (s)*a[1][1]; \ } /*! multiply matrix by scalar */ #define ACCUM_SCALE_MATRIX_3X3(b, s, a) \ { \ b[0][0] += (s)*a[0][0]; \ b[0][1] += (s)*a[0][1]; \ b[0][2] += (s)*a[0][2]; \ \ b[1][0] += (s)*a[1][0]; \ b[1][1] += (s)*a[1][1]; \ b[1][2] += (s)*a[1][2]; \ \ b[2][0] += (s)*a[2][0]; \ b[2][1] += (s)*a[2][1]; \ b[2][2] += (s)*a[2][2]; \ } /*! multiply matrix by scalar */ #define ACCUM_SCALE_MATRIX_4X4(b, s, a) \ { \ b[0][0] += (s)*a[0][0]; \ b[0][1] += (s)*a[0][1]; \ b[0][2] += (s)*a[0][2]; \ b[0][3] += (s)*a[0][3]; \ \ b[1][0] += (s)*a[1][0]; \ b[1][1] += (s)*a[1][1]; \ b[1][2] += (s)*a[1][2]; \ b[1][3] += (s)*a[1][3]; \ \ b[2][0] += (s)*a[2][0]; \ b[2][1] += (s)*a[2][1]; \ b[2][2] += (s)*a[2][2]; \ b[2][3] += (s)*a[2][3]; \ \ b[3][0] += (s)*a[3][0]; \ b[3][1] += (s)*a[3][1]; \ b[3][2] += (s)*a[3][2]; \ b[3][3] += (s)*a[3][3]; \ } /*! matrix product */ /*! c[x][y] = a[x][0]*b[0][y]+a[x][1]*b[1][y]+a[x][2]*b[2][y]+a[x][3]*b[3][y];*/ #define MATRIX_PRODUCT_2X2(c, a, b) \ { \ c[0][0] = a[0][0] * b[0][0] + a[0][1] * b[1][0]; \ c[0][1] = a[0][0] * b[0][1] + a[0][1] * b[1][1]; \ \ c[1][0] = a[1][0] * b[0][0] + a[1][1] * b[1][0]; \ c[1][1] = a[1][0] * b[0][1] + a[1][1] * b[1][1]; \ } /*! matrix product */ /*! c[x][y] = a[x][0]*b[0][y]+a[x][1]*b[1][y]+a[x][2]*b[2][y]+a[x][3]*b[3][y];*/ #define MATRIX_PRODUCT_3X3(c, a, b) \ { \ c[0][0] = a[0][0] * b[0][0] + a[0][1] * b[1][0] + a[0][2] * b[2][0]; \ c[0][1] = a[0][0] * b[0][1] + a[0][1] * b[1][1] + a[0][2] * b[2][1]; \ c[0][2] = a[0][0] * b[0][2] + a[0][1] * b[1][2] + a[0][2] * b[2][2]; \ \ c[1][0] = a[1][0] * b[0][0] + a[1][1] * b[1][0] + a[1][2] * b[2][0]; \ c[1][1] = a[1][0] * b[0][1] + a[1][1] * b[1][1] + a[1][2] * b[2][1]; \ c[1][2] = a[1][0] * b[0][2] + a[1][1] * b[1][2] + a[1][2] * b[2][2]; \ \ c[2][0] = a[2][0] * b[0][0] + a[2][1] * b[1][0] + a[2][2] * b[2][0]; \ c[2][1] = a[2][0] * b[0][1] + a[2][1] * b[1][1] + a[2][2] * b[2][1]; \ c[2][2] = a[2][0] * b[0][2] + a[2][1] * b[1][2] + a[2][2] * b[2][2]; \ } /*! matrix product */ /*! c[x][y] = a[x][0]*b[0][y]+a[x][1]*b[1][y]+a[x][2]*b[2][y]+a[x][3]*b[3][y];*/ #define MATRIX_PRODUCT_4X4(c, a, b) \ { \ c[0][0] = a[0][0] * b[0][0] + a[0][1] * b[1][0] + a[0][2] * b[2][0] + a[0][3] * b[3][0]; \ c[0][1] = a[0][0] * b[0][1] + a[0][1] * b[1][1] + a[0][2] * b[2][1] + a[0][3] * b[3][1]; \ c[0][2] = a[0][0] * b[0][2] + a[0][1] * b[1][2] + a[0][2] * b[2][2] + a[0][3] * b[3][2]; \ c[0][3] = a[0][0] * b[0][3] + a[0][1] * b[1][3] + a[0][2] * b[2][3] + a[0][3] * b[3][3]; \ \ c[1][0] = a[1][0] * b[0][0] + a[1][1] * b[1][0] + a[1][2] * b[2][0] + a[1][3] * b[3][0]; \ c[1][1] = a[1][0] * b[0][1] + a[1][1] * b[1][1] + a[1][2] * b[2][1] + a[1][3] * b[3][1]; \ c[1][2] = a[1][0] * b[0][2] + a[1][1] * b[1][2] + a[1][2] * b[2][2] + a[1][3] * b[3][2]; \ c[1][3] = a[1][0] * b[0][3] + a[1][1] * b[1][3] + a[1][2] * b[2][3] + a[1][3] * b[3][3]; \ \ c[2][0] = a[2][0] * b[0][0] + a[2][1] * b[1][0] + a[2][2] * b[2][0] + a[2][3] * b[3][0]; \ c[2][1] = a[2][0] * b[0][1] + a[2][1] * b[1][1] + a[2][2] * b[2][1] + a[2][3] * b[3][1]; \ c[2][2] = a[2][0] * b[0][2] + a[2][1] * b[1][2] + a[2][2] * b[2][2] + a[2][3] * b[3][2]; \ c[2][3] = a[2][0] * b[0][3] + a[2][1] * b[1][3] + a[2][2] * b[2][3] + a[2][3] * b[3][3]; \ \ c[3][0] = a[3][0] * b[0][0] + a[3][1] * b[1][0] + a[3][2] * b[2][0] + a[3][3] * b[3][0]; \ c[3][1] = a[3][0] * b[0][1] + a[3][1] * b[1][1] + a[3][2] * b[2][1] + a[3][3] * b[3][1]; \ c[3][2] = a[3][0] * b[0][2] + a[3][1] * b[1][2] + a[3][2] * b[2][2] + a[3][3] * b[3][2]; \ c[3][3] = a[3][0] * b[0][3] + a[3][1] * b[1][3] + a[3][2] * b[2][3] + a[3][3] * b[3][3]; \ } /*! matrix times vector */ #define MAT_DOT_VEC_2X2(p, m, v) \ { \ p[0] = m[0][0] * v[0] + m[0][1] * v[1]; \ p[1] = m[1][0] * v[0] + m[1][1] * v[1]; \ } /*! matrix times vector */ #define MAT_DOT_VEC_3X3(p, m, v) \ { \ p[0] = m[0][0] * v[0] + m[0][1] * v[1] + m[0][2] * v[2]; \ p[1] = m[1][0] * v[0] + m[1][1] * v[1] + m[1][2] * v[2]; \ p[2] = m[2][0] * v[0] + m[2][1] * v[1] + m[2][2] * v[2]; \ } /*! matrix times vector v is a vec4f */ #define MAT_DOT_VEC_4X4(p, m, v) \ { \ p[0] = m[0][0] * v[0] + m[0][1] * v[1] + m[0][2] * v[2] + m[0][3] * v[3]; \ p[1] = m[1][0] * v[0] + m[1][1] * v[1] + m[1][2] * v[2] + m[1][3] * v[3]; \ p[2] = m[2][0] * v[0] + m[2][1] * v[1] + m[2][2] * v[2] + m[2][3] * v[3]; \ p[3] = m[3][0] * v[0] + m[3][1] * v[1] + m[3][2] * v[2] + m[3][3] * v[3]; \ } /*! matrix times vector v is a vec3f and m is a mat4f
    Last column is added as the position */ #define MAT_DOT_VEC_3X4(p, m, v) \ { \ p[0] = m[0][0] * v[0] + m[0][1] * v[1] + m[0][2] * v[2] + m[0][3]; \ p[1] = m[1][0] * v[0] + m[1][1] * v[1] + m[1][2] * v[2] + m[1][3]; \ p[2] = m[2][0] * v[0] + m[2][1] * v[1] + m[2][2] * v[2] + m[2][3]; \ } /*! vector transpose times matrix */ /*! p[j] = v[0]*m[0][j] + v[1]*m[1][j] + v[2]*m[2][j]; */ #define VEC_DOT_MAT_3X3(p, v, m) \ { \ p[0] = v[0] * m[0][0] + v[1] * m[1][0] + v[2] * m[2][0]; \ p[1] = v[0] * m[0][1] + v[1] * m[1][1] + v[2] * m[2][1]; \ p[2] = v[0] * m[0][2] + v[1] * m[1][2] + v[2] * m[2][2]; \ } /*! affine matrix times vector */ /** The matrix is assumed to be an affine matrix, with last two * entries representing a translation */ #define MAT_DOT_VEC_2X3(p, m, v) \ { \ p[0] = m[0][0] * v[0] + m[0][1] * v[1] + m[0][2]; \ p[1] = m[1][0] * v[0] + m[1][1] * v[1] + m[1][2]; \ } //! Transform a plane #define MAT_TRANSFORM_PLANE_4X4(pout, m, plane) \ { \ pout[0] = m[0][0] * plane[0] + m[0][1] * plane[1] + m[0][2] * plane[2]; \ pout[1] = m[1][0] * plane[0] + m[1][1] * plane[1] + m[1][2] * plane[2]; \ pout[2] = m[2][0] * plane[0] + m[2][1] * plane[1] + m[2][2] * plane[2]; \ pout[3] = m[0][3] * pout[0] + m[1][3] * pout[1] + m[2][3] * pout[2] + plane[3]; \ } /** inverse transpose of matrix times vector * * This macro computes inverse transpose of matrix m, * and multiplies vector v into it, to yeild vector p * * DANGER !!! Do Not use this on normal vectors!!! * It will leave normals the wrong length !!! * See macro below for use on normals. */ #define INV_TRANSP_MAT_DOT_VEC_2X2(p, m, v) \ { \ GREAL det; \ \ det = m[0][0] * m[1][1] - m[0][1] * m[1][0]; \ p[0] = m[1][1] * v[0] - m[1][0] * v[1]; \ p[1] = -m[0][1] * v[0] + m[0][0] * v[1]; \ \ /* if matrix not singular, and not orthonormal, then renormalize */ \ if ((det != 1.0f) && (det != 0.0f)) \ { \ det = 1.0f / det; \ p[0] *= det; \ p[1] *= det; \ } \ } /** transform normal vector by inverse transpose of matrix * and then renormalize the vector * * This macro computes inverse transpose of matrix m, * and multiplies vector v into it, to yeild vector p * Vector p is then normalized. */ #define NORM_XFORM_2X2(p, m, v) \ { \ GREAL len; \ \ /* do nothing if off-diagonals are zero and diagonals are \ * equal */ \ if ((m[0][1] != 0.0) || (m[1][0] != 0.0) || (m[0][0] != m[1][1])) \ { \ p[0] = m[1][1] * v[0] - m[1][0] * v[1]; \ p[1] = -m[0][1] * v[0] + m[0][0] * v[1]; \ \ len = p[0] * p[0] + p[1] * p[1]; \ GIM_INV_SQRT(len, len); \ p[0] *= len; \ p[1] *= len; \ } \ else \ { \ VEC_COPY_2(p, v); \ } \ } /** outer product of vector times vector transpose * * The outer product of vector v and vector transpose t yeilds * dyadic matrix m. */ #define OUTER_PRODUCT_2X2(m, v, t) \ { \ m[0][0] = v[0] * t[0]; \ m[0][1] = v[0] * t[1]; \ \ m[1][0] = v[1] * t[0]; \ m[1][1] = v[1] * t[1]; \ } /** outer product of vector times vector transpose * * The outer product of vector v and vector transpose t yeilds * dyadic matrix m. */ #define OUTER_PRODUCT_3X3(m, v, t) \ { \ m[0][0] = v[0] * t[0]; \ m[0][1] = v[0] * t[1]; \ m[0][2] = v[0] * t[2]; \ \ m[1][0] = v[1] * t[0]; \ m[1][1] = v[1] * t[1]; \ m[1][2] = v[1] * t[2]; \ \ m[2][0] = v[2] * t[0]; \ m[2][1] = v[2] * t[1]; \ m[2][2] = v[2] * t[2]; \ } /** outer product of vector times vector transpose * * The outer product of vector v and vector transpose t yeilds * dyadic matrix m. */ #define OUTER_PRODUCT_4X4(m, v, t) \ { \ m[0][0] = v[0] * t[0]; \ m[0][1] = v[0] * t[1]; \ m[0][2] = v[0] * t[2]; \ m[0][3] = v[0] * t[3]; \ \ m[1][0] = v[1] * t[0]; \ m[1][1] = v[1] * t[1]; \ m[1][2] = v[1] * t[2]; \ m[1][3] = v[1] * t[3]; \ \ m[2][0] = v[2] * t[0]; \ m[2][1] = v[2] * t[1]; \ m[2][2] = v[2] * t[2]; \ m[2][3] = v[2] * t[3]; \ \ m[3][0] = v[3] * t[0]; \ m[3][1] = v[3] * t[1]; \ m[3][2] = v[3] * t[2]; \ m[3][3] = v[3] * t[3]; \ } /** outer product of vector times vector transpose * * The outer product of vector v and vector transpose t yeilds * dyadic matrix m. */ #define ACCUM_OUTER_PRODUCT_2X2(m, v, t) \ { \ m[0][0] += v[0] * t[0]; \ m[0][1] += v[0] * t[1]; \ \ m[1][0] += v[1] * t[0]; \ m[1][1] += v[1] * t[1]; \ } /** outer product of vector times vector transpose * * The outer product of vector v and vector transpose t yeilds * dyadic matrix m. */ #define ACCUM_OUTER_PRODUCT_3X3(m, v, t) \ { \ m[0][0] += v[0] * t[0]; \ m[0][1] += v[0] * t[1]; \ m[0][2] += v[0] * t[2]; \ \ m[1][0] += v[1] * t[0]; \ m[1][1] += v[1] * t[1]; \ m[1][2] += v[1] * t[2]; \ \ m[2][0] += v[2] * t[0]; \ m[2][1] += v[2] * t[1]; \ m[2][2] += v[2] * t[2]; \ } /** outer product of vector times vector transpose * * The outer product of vector v and vector transpose t yeilds * dyadic matrix m. */ #define ACCUM_OUTER_PRODUCT_4X4(m, v, t) \ { \ m[0][0] += v[0] * t[0]; \ m[0][1] += v[0] * t[1]; \ m[0][2] += v[0] * t[2]; \ m[0][3] += v[0] * t[3]; \ \ m[1][0] += v[1] * t[0]; \ m[1][1] += v[1] * t[1]; \ m[1][2] += v[1] * t[2]; \ m[1][3] += v[1] * t[3]; \ \ m[2][0] += v[2] * t[0]; \ m[2][1] += v[2] * t[1]; \ m[2][2] += v[2] * t[2]; \ m[2][3] += v[2] * t[3]; \ \ m[3][0] += v[3] * t[0]; \ m[3][1] += v[3] * t[1]; \ m[3][2] += v[3] * t[2]; \ m[3][3] += v[3] * t[3]; \ } /** determinant of matrix * * Computes determinant of matrix m, returning d */ #define DETERMINANT_2X2(d, m) \ { \ d = m[0][0] * m[1][1] - m[0][1] * m[1][0]; \ } /** determinant of matrix * * Computes determinant of matrix m, returning d */ #define DETERMINANT_3X3(d, m) \ { \ d = m[0][0] * (m[1][1] * m[2][2] - m[1][2] * m[2][1]); \ d -= m[0][1] * (m[1][0] * m[2][2] - m[1][2] * m[2][0]); \ d += m[0][2] * (m[1][0] * m[2][1] - m[1][1] * m[2][0]); \ } /** i,j,th cofactor of a 4x4 matrix * */ #define COFACTOR_4X4_IJ(fac, m, i, j) \ { \ GUINT __ii[4], __jj[4], __k; \ \ for (__k = 0; __k < i; __k++) __ii[__k] = __k; \ for (__k = i; __k < 3; __k++) __ii[__k] = __k + 1; \ for (__k = 0; __k < j; __k++) __jj[__k] = __k; \ for (__k = j; __k < 3; __k++) __jj[__k] = __k + 1; \ \ (fac) = m[__ii[0]][__jj[0]] * (m[__ii[1]][__jj[1]] * m[__ii[2]][__jj[2]] - m[__ii[1]][__jj[2]] * m[__ii[2]][__jj[1]]); \ (fac) -= m[__ii[0]][__jj[1]] * (m[__ii[1]][__jj[0]] * m[__ii[2]][__jj[2]] - m[__ii[1]][__jj[2]] * m[__ii[2]][__jj[0]]); \ (fac) += m[__ii[0]][__jj[2]] * (m[__ii[1]][__jj[0]] * m[__ii[2]][__jj[1]] - m[__ii[1]][__jj[1]] * m[__ii[2]][__jj[0]]); \ \ __k = i + j; \ if (__k != (__k / 2) * 2) \ { \ (fac) = -(fac); \ } \ } /** determinant of matrix * * Computes determinant of matrix m, returning d */ #define DETERMINANT_4X4(d, m) \ { \ GREAL cofac; \ COFACTOR_4X4_IJ(cofac, m, 0, 0); \ d = m[0][0] * cofac; \ COFACTOR_4X4_IJ(cofac, m, 0, 1); \ d += m[0][1] * cofac; \ COFACTOR_4X4_IJ(cofac, m, 0, 2); \ d += m[0][2] * cofac; \ COFACTOR_4X4_IJ(cofac, m, 0, 3); \ d += m[0][3] * cofac; \ } /** cofactor of matrix * * Computes cofactor of matrix m, returning a */ #define COFACTOR_2X2(a, m) \ { \ a[0][0] = (m)[1][1]; \ a[0][1] = -(m)[1][0]; \ a[1][0] = -(m)[0][1]; \ a[1][1] = (m)[0][0]; \ } /** cofactor of matrix * * Computes cofactor of matrix m, returning a */ #define COFACTOR_3X3(a, m) \ { \ a[0][0] = m[1][1] * m[2][2] - m[1][2] * m[2][1]; \ a[0][1] = -(m[1][0] * m[2][2] - m[2][0] * m[1][2]); \ a[0][2] = m[1][0] * m[2][1] - m[1][1] * m[2][0]; \ a[1][0] = -(m[0][1] * m[2][2] - m[0][2] * m[2][1]); \ a[1][1] = m[0][0] * m[2][2] - m[0][2] * m[2][0]; \ a[1][2] = -(m[0][0] * m[2][1] - m[0][1] * m[2][0]); \ a[2][0] = m[0][1] * m[1][2] - m[0][2] * m[1][1]; \ a[2][1] = -(m[0][0] * m[1][2] - m[0][2] * m[1][0]); \ a[2][2] = m[0][0]*m[1][1] - m[0][1]*m[1][0]); \ } /** cofactor of matrix * * Computes cofactor of matrix m, returning a */ #define COFACTOR_4X4(a, m) \ { \ int i, j; \ \ for (i = 0; i < 4; i++) \ { \ for (j = 0; j < 4; j++) \ { \ COFACTOR_4X4_IJ(a[i][j], m, i, j); \ } \ } \ } /** adjoint of matrix * * Computes adjoint of matrix m, returning a * (Note that adjoint is just the transpose of the cofactor matrix) */ #define ADJOINT_2X2(a, m) \ { \ a[0][0] = (m)[1][1]; \ a[1][0] = -(m)[1][0]; \ a[0][1] = -(m)[0][1]; \ a[1][1] = (m)[0][0]; \ } /** adjoint of matrix * * Computes adjoint of matrix m, returning a * (Note that adjoint is just the transpose of the cofactor matrix) */ #define ADJOINT_3X3(a, m) \ { \ a[0][0] = m[1][1] * m[2][2] - m[1][2] * m[2][1]; \ a[1][0] = -(m[1][0] * m[2][2] - m[2][0] * m[1][2]); \ a[2][0] = m[1][0] * m[2][1] - m[1][1] * m[2][0]; \ a[0][1] = -(m[0][1] * m[2][2] - m[0][2] * m[2][1]); \ a[1][1] = m[0][0] * m[2][2] - m[0][2] * m[2][0]; \ a[2][1] = -(m[0][0] * m[2][1] - m[0][1] * m[2][0]); \ a[0][2] = m[0][1] * m[1][2] - m[0][2] * m[1][1]; \ a[1][2] = -(m[0][0] * m[1][2] - m[0][2] * m[1][0]); \ a[2][2] = m[0][0]*m[1][1] - m[0][1]*m[1][0]); \ } /** adjoint of matrix * * Computes adjoint of matrix m, returning a * (Note that adjoint is just the transpose of the cofactor matrix) */ #define ADJOINT_4X4(a, m) \ { \ char _i_, _j_; \ \ for (_i_ = 0; _i_ < 4; _i_++) \ { \ for (_j_ = 0; _j_ < 4; _j_++) \ { \ COFACTOR_4X4_IJ(a[_j_][_i_], m, _i_, _j_); \ } \ } \ } /** compute adjoint of matrix and scale * * Computes adjoint of matrix m, scales it by s, returning a */ #define SCALE_ADJOINT_2X2(a, s, m) \ { \ a[0][0] = (s)*m[1][1]; \ a[1][0] = -(s)*m[1][0]; \ a[0][1] = -(s)*m[0][1]; \ a[1][1] = (s)*m[0][0]; \ } /** compute adjoint of matrix and scale * * Computes adjoint of matrix m, scales it by s, returning a */ #define SCALE_ADJOINT_3X3(a, s, m) \ { \ a[0][0] = (s) * (m[1][1] * m[2][2] - m[1][2] * m[2][1]); \ a[1][0] = (s) * (m[1][2] * m[2][0] - m[1][0] * m[2][2]); \ a[2][0] = (s) * (m[1][0] * m[2][1] - m[1][1] * m[2][0]); \ \ a[0][1] = (s) * (m[0][2] * m[2][1] - m[0][1] * m[2][2]); \ a[1][1] = (s) * (m[0][0] * m[2][2] - m[0][2] * m[2][0]); \ a[2][1] = (s) * (m[0][1] * m[2][0] - m[0][0] * m[2][1]); \ \ a[0][2] = (s) * (m[0][1] * m[1][2] - m[0][2] * m[1][1]); \ a[1][2] = (s) * (m[0][2] * m[1][0] - m[0][0] * m[1][2]); \ a[2][2] = (s) * (m[0][0] * m[1][1] - m[0][1] * m[1][0]); \ } /** compute adjoint of matrix and scale * * Computes adjoint of matrix m, scales it by s, returning a */ #define SCALE_ADJOINT_4X4(a, s, m) \ { \ char _i_, _j_; \ for (_i_ = 0; _i_ < 4; _i_++) \ { \ for (_j_ = 0; _j_ < 4; _j_++) \ { \ COFACTOR_4X4_IJ(a[_j_][_i_], m, _i_, _j_); \ a[_j_][_i_] *= s; \ } \ } \ } /** inverse of matrix * * Compute inverse of matrix a, returning determinant m and * inverse b */ #define INVERT_2X2(b, det, a) \ { \ GREAL _tmp_; \ DETERMINANT_2X2(det, a); \ _tmp_ = 1.0 / (det); \ SCALE_ADJOINT_2X2(b, _tmp_, a); \ } /** inverse of matrix * * Compute inverse of matrix a, returning determinant m and * inverse b */ #define INVERT_3X3(b, det, a) \ { \ GREAL _tmp_; \ DETERMINANT_3X3(det, a); \ _tmp_ = 1.0 / (det); \ SCALE_ADJOINT_3X3(b, _tmp_, a); \ } /** inverse of matrix * * Compute inverse of matrix a, returning determinant m and * inverse b */ #define INVERT_4X4(b, det, a) \ { \ GREAL _tmp_; \ DETERMINANT_4X4(det, a); \ _tmp_ = 1.0 / (det); \ SCALE_ADJOINT_4X4(b, _tmp_, a); \ } //! Get the triple(3) row of a transform matrix #define MAT_GET_ROW(mat, vec3, rowindex) \ { \ vec3[0] = mat[rowindex][0]; \ vec3[1] = mat[rowindex][1]; \ vec3[2] = mat[rowindex][2]; \ } //! Get the tuple(2) row of a transform matrix #define MAT_GET_ROW2(mat, vec2, rowindex) \ { \ vec2[0] = mat[rowindex][0]; \ vec2[1] = mat[rowindex][1]; \ } //! Get the quad (4) row of a transform matrix #define MAT_GET_ROW4(mat, vec4, rowindex) \ { \ vec4[0] = mat[rowindex][0]; \ vec4[1] = mat[rowindex][1]; \ vec4[2] = mat[rowindex][2]; \ vec4[3] = mat[rowindex][3]; \ } //! Get the triple(3) col of a transform matrix #define MAT_GET_COL(mat, vec3, colindex) \ { \ vec3[0] = mat[0][colindex]; \ vec3[1] = mat[1][colindex]; \ vec3[2] = mat[2][colindex]; \ } //! Get the tuple(2) col of a transform matrix #define MAT_GET_COL2(mat, vec2, colindex) \ { \ vec2[0] = mat[0][colindex]; \ vec2[1] = mat[1][colindex]; \ } //! Get the quad (4) col of a transform matrix #define MAT_GET_COL4(mat, vec4, colindex) \ { \ vec4[0] = mat[0][colindex]; \ vec4[1] = mat[1][colindex]; \ vec4[2] = mat[2][colindex]; \ vec4[3] = mat[3][colindex]; \ } //! Get the triple(3) col of a transform matrix #define MAT_GET_X(mat, vec3) \ { \ MAT_GET_COL(mat, vec3, 0); \ } //! Get the triple(3) col of a transform matrix #define MAT_GET_Y(mat, vec3) \ { \ MAT_GET_COL(mat, vec3, 1); \ } //! Get the triple(3) col of a transform matrix #define MAT_GET_Z(mat, vec3) \ { \ MAT_GET_COL(mat, vec3, 2); \ } //! Get the triple(3) col of a transform matrix #define MAT_SET_X(mat, vec3) \ { \ mat[0][0] = vec3[0]; \ mat[1][0] = vec3[1]; \ mat[2][0] = vec3[2]; \ } //! Get the triple(3) col of a transform matrix #define MAT_SET_Y(mat, vec3) \ { \ mat[0][1] = vec3[0]; \ mat[1][1] = vec3[1]; \ mat[2][1] = vec3[2]; \ } //! Get the triple(3) col of a transform matrix #define MAT_SET_Z(mat, vec3) \ { \ mat[0][2] = vec3[0]; \ mat[1][2] = vec3[1]; \ mat[2][2] = vec3[2]; \ } //! Get the triple(3) col of a transform matrix #define MAT_GET_TRANSLATION(mat, vec3) \ { \ vec3[0] = mat[0][3]; \ vec3[1] = mat[1][3]; \ vec3[2] = mat[2][3]; \ } //! Set the triple(3) col of a transform matrix #define MAT_SET_TRANSLATION(mat, vec3) \ { \ mat[0][3] = vec3[0]; \ mat[1][3] = vec3[1]; \ mat[2][3] = vec3[2]; \ } //! Returns the dot product between a vec3f and the row of a matrix #define MAT_DOT_ROW(mat, vec3, rowindex) (vec3[0] * mat[rowindex][0] + vec3[1] * mat[rowindex][1] + vec3[2] * mat[rowindex][2]) //! Returns the dot product between a vec2f and the row of a matrix #define MAT_DOT_ROW2(mat, vec2, rowindex) (vec2[0] * mat[rowindex][0] + vec2[1] * mat[rowindex][1]) //! Returns the dot product between a vec4f and the row of a matrix #define MAT_DOT_ROW4(mat, vec4, rowindex) (vec4[0] * mat[rowindex][0] + vec4[1] * mat[rowindex][1] + vec4[2] * mat[rowindex][2] + vec4[3] * mat[rowindex][3]) //! Returns the dot product between a vec3f and the col of a matrix #define MAT_DOT_COL(mat, vec3, colindex) (vec3[0] * mat[0][colindex] + vec3[1] * mat[1][colindex] + vec3[2] * mat[2][colindex]) //! Returns the dot product between a vec2f and the col of a matrix #define MAT_DOT_COL2(mat, vec2, colindex) (vec2[0] * mat[0][colindex] + vec2[1] * mat[1][colindex]) //! Returns the dot product between a vec4f and the col of a matrix #define MAT_DOT_COL4(mat, vec4, colindex) (vec4[0] * mat[0][colindex] + vec4[1] * mat[1][colindex] + vec4[2] * mat[2][colindex] + vec4[3] * mat[3][colindex]) /*!Transpose matrix times vector v is a vec3f and m is a mat4f
    */ #define INV_MAT_DOT_VEC_3X3(p, m, v) \ { \ p[0] = MAT_DOT_COL(m, v, 0); \ p[1] = MAT_DOT_COL(m, v, 1); \ p[2] = MAT_DOT_COL(m, v, 2); \ } #endif // GIM_VECTOR_H_INCLUDED ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/gim_math.h ================================================ #ifndef GIM_MATH_H_INCLUDED #define GIM_MATH_H_INCLUDED /*! \file gim_math.h \author Francisco Leon Najera */ /* ----------------------------------------------------------------------------- This source file is part of GIMPACT Library. For the latest info, see http://gimpact.sourceforge.net/ Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371. email: projectileman@yahoo.com This library is free software; you can redistribute it and/or modify it under the terms of EITHER: (1) The GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The text of the GNU Lesser General Public License is included with this library in the file GIMPACT-LICENSE-LGPL.TXT. (2) The BSD-style license that is included with this library in the file GIMPACT-LICENSE-BSD.TXT. (3) The zlib/libpng license that is included with this library in the file GIMPACT-LICENSE-ZLIB.TXT. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details. ----------------------------------------------------------------------------- */ #include "LinearMath/btScalar.h" #define GREAL btScalar #define GREAL2 double #define GINT int #define GUINT unsigned int #define GSHORT short #define GUSHORT unsigned short #define GINT64 long long #define GUINT64 unsigned long long #define G_PI 3.14159265358979f #define G_HALF_PI 1.5707963f //267948966 #define G_TWO_PI 6.28318530f //71795864 #define G_ROOT3 1.73205f #define G_ROOT2 1.41421f #define G_UINT_INFINITY 0xffffffff //!< A very very high value #define G_REAL_INFINITY FLT_MAX #define G_SIGN_BITMASK 0x80000000 #define G_EPSILON SIMD_EPSILON enum GIM_SCALAR_TYPES { G_STYPE_REAL = 0, G_STYPE_REAL2, G_STYPE_SHORT, G_STYPE_USHORT, G_STYPE_INT, G_STYPE_UINT, G_STYPE_INT64, G_STYPE_UINT64 }; #define G_DEGTORAD(X) ((X)*3.1415926f / 180.0f) #define G_RADTODEG(X) ((X)*180.0f / 3.1415926f) //! Integer representation of a floating-point value. #define GIM_IR(x) ((GUINT&)(x)) //! Signed integer representation of a floating-point value. #define GIM_SIR(x) ((GINT&)(x)) //! Absolute integer representation of a floating-point value #define GIM_AIR(x) (GIM_IR(x) & 0x7fffffff) //! Floating-point representation of an integer value. #define GIM_FR(x) ((GREAL&)(x)) #define GIM_MAX(a, b) (a < b ? b : a) #define GIM_MIN(a, b) (a > b ? b : a) #define GIM_MAX3(a, b, c) GIM_MAX(a, GIM_MAX(b, c)) #define GIM_MIN3(a, b, c) GIM_MIN(a, GIM_MIN(b, c)) #define GIM_IS_ZERO(value) (value < G_EPSILON && value > -G_EPSILON) #define GIM_IS_NEGATIVE(value) (value <= -G_EPSILON) #define GIM_IS_POSISITVE(value) (value >= G_EPSILON) #define GIM_NEAR_EQUAL(v1, v2) GIM_IS_ZERO((v1 - v2)) ///returns a clamped number #define GIM_CLAMP(number, minval, maxval) (number < minval ? minval : (number > maxval ? maxval : number)) #define GIM_GREATER(x, y) btFabs(x) > (y) ///Swap numbers #define GIM_SWAP_NUMBERS(a, b) \ { \ a = a + b; \ b = a - b; \ a = a - b; \ } #define GIM_INV_SQRT(va, isva) \ { \ if (va <= 0.0000001f) \ { \ isva = G_REAL_INFINITY; \ } \ else \ { \ GREAL _x = va * 0.5f; \ GUINT _y = 0x5f3759df - (GIM_IR(va) >> 1); \ isva = GIM_FR(_y); \ isva = isva * (1.5f - (_x * isva * isva)); \ } \ } #define GIM_SQRT(va, sva) \ { \ GIM_INV_SQRT(va, sva); \ sva = 1.0f / sva; \ } //! Computes 1.0f / sqrtf(x). Comes from Quake3. See http://www.magic-software.com/3DGEDInvSqrt.html inline GREAL gim_inv_sqrt(GREAL f) { GREAL r; GIM_INV_SQRT(f, r); return r; } inline GREAL gim_sqrt(GREAL f) { GREAL r; GIM_SQRT(f, r); return r; } #endif // GIM_MATH_H_INCLUDED ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/gim_memory.h ================================================ #ifndef GIM_MEMORY_H_INCLUDED #define GIM_MEMORY_H_INCLUDED /*! \file gim_memory.h \author Francisco Leon Najera */ /* ----------------------------------------------------------------------------- This source file is part of GIMPACT Library. For the latest info, see http://gimpact.sourceforge.net/ Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371. email: projectileman@yahoo.com This library is free software; you can redistribute it and/or modify it under the terms of EITHER: (1) The GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The text of the GNU Lesser General Public License is included with this library in the file GIMPACT-LICENSE-LGPL.TXT. (2) The BSD-style license that is included with this library in the file GIMPACT-LICENSE-BSD.TXT. (3) The zlib/libpng license that is included with this library in the file GIMPACT-LICENSE-ZLIB.TXT. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details. ----------------------------------------------------------------------------- */ #include "gim_math.h" #include #ifdef PREFETCH #include // for prefetch #define pfval 64 #define pfval2 128 //! Prefetch 64 #define pf(_x, _i) _mm_prefetch((void *)(_x + _i + pfval), 0) //! Prefetch 128 #define pf2(_x, _i) _mm_prefetch((void *)(_x + _i + pfval2), 0) #else //! Prefetch 64 #define pf(_x, _i) //! Prefetch 128 #define pf2(_x, _i) #endif ///Functions for manip packed arrays of numbers #define GIM_COPY_ARRAYS(dest_array, source_array, element_count) \ { \ for (GUINT _i_ = 0; _i_ < element_count; ++_i_) \ { \ dest_array[_i_] = source_array[_i_]; \ } \ } #define GIM_COPY_ARRAYS_1(dest_array, source_array, element_count, copy_macro) \ { \ for (GUINT _i_ = 0; _i_ < element_count; ++_i_) \ { \ copy_macro(dest_array[_i_], source_array[_i_]); \ } \ } #define GIM_ZERO_ARRAY(array, element_count) \ { \ for (GUINT _i_ = 0; _i_ < element_count; ++_i_) \ { \ array[_i_] = 0; \ } \ } #define GIM_CONSTANT_ARRAY(array, element_count, constant) \ { \ for (GUINT _i_ = 0; _i_ < element_count; ++_i_) \ { \ array[_i_] = constant; \ } \ } ///Function prototypes to allocate and free memory. typedef void *gim_alloc_function(size_t size); typedef void *gim_alloca_function(size_t size); //Allocs on the heap typedef void *gim_realloc_function(void *ptr, size_t oldsize, size_t newsize); typedef void gim_free_function(void *ptr); ///Memory Function Handlers ///set new memory management functions. if fn is 0, the default handlers are used. void gim_set_alloc_handler(gim_alloc_function *fn); void gim_set_alloca_handler(gim_alloca_function *fn); void gim_set_realloc_handler(gim_realloc_function *fn); void gim_set_free_handler(gim_free_function *fn); ///get current memory management functions. gim_alloc_function *gim_get_alloc_handler(void); gim_alloca_function *gim_get_alloca_handler(void); gim_realloc_function *gim_get_realloc_handler(void); gim_free_function *gim_get_free_handler(void); ///Standar Memory functions void *gim_alloc(size_t size); void *gim_alloca(size_t size); void *gim_realloc(void *ptr, size_t oldsize, size_t newsize); void gim_free(void *ptr); #if defined(_WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__) #define GIM_SIMD_MEMORY 1 #endif //! SIMD POINTER INTEGER #define SIMD_T GUINT64 //! SIMD INTEGER SIZE #define SIMD_T_SIZE sizeof(SIMD_T) inline void gim_simd_memcpy(void *dst, const void *src, size_t copysize) { #ifdef GIM_SIMD_MEMORY /* //'long long int' is incompatible with visual studio 6... //copy words SIMD_T * ui_src_ptr = (SIMD_T *)src; SIMD_T * ui_dst_ptr = (SIMD_T *)dst; while(copysize>=SIMD_T_SIZE) { *(ui_dst_ptr++) = *(ui_src_ptr++); copysize-=SIMD_T_SIZE; } if(copysize==0) return; */ char *c_src_ptr = (char *)src; char *c_dst_ptr = (char *)dst; while (copysize > 0) { *(c_dst_ptr++) = *(c_src_ptr++); copysize--; } return; #else memcpy(dst, src, copysize); #endif } template inline void gim_swap_elements(T *_array, size_t _i, size_t _j) { T _e_tmp_ = _array[_i]; _array[_i] = _array[_j]; _array[_j] = _e_tmp_; } template inline void gim_swap_elements_memcpy(T *_array, size_t _i, size_t _j) { char _e_tmp_[sizeof(T)]; gim_simd_memcpy(_e_tmp_, &_array[_i], sizeof(T)); gim_simd_memcpy(&_array[_i], &_array[_j], sizeof(T)); gim_simd_memcpy(&_array[_j], _e_tmp_, sizeof(T)); } template inline void gim_swap_elements_ptr(char *_array, size_t _i, size_t _j) { char _e_tmp_[SIZE]; _i *= SIZE; _j *= SIZE; gim_simd_memcpy(_e_tmp_, _array + _i, SIZE); gim_simd_memcpy(_array + _i, _array + _j, SIZE); gim_simd_memcpy(_array + _j, _e_tmp_, SIZE); } #endif // GIM_MEMORY_H_INCLUDED ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/gim_pair.h ================================================ #ifndef GIM_PAIR_H #define GIM_PAIR_H //! Overlapping pair struct GIM_PAIR { int m_index1; int m_index2; GIM_PAIR() { } GIM_PAIR(const GIM_PAIR& p) { m_index1 = p.m_index1; m_index2 = p.m_index2; } GIM_PAIR(int index1, int index2) { m_index1 = index1; m_index2 = index2; } }; #endif //GIM_PAIR_H ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/gim_radixsort.h ================================================ #ifndef GIM_RADIXSORT_H_INCLUDED #define GIM_RADIXSORT_H_INCLUDED /*! \file gim_radixsort.h \author Francisco Leon Najera. Based on the work of Michael Herf : "fast floating-point radix sort" Avaliable on http://www.stereopsis.com/radix.html */ /* ----------------------------------------------------------------------------- This source file is part of GIMPACT Library. For the latest info, see http://gimpact.sourceforge.net/ Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371. email: projectileman@yahoo.com This library is free software; you can redistribute it and/or modify it under the terms of EITHER: (1) The GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The text of the GNU Lesser General Public License is included with this library in the file GIMPACT-LICENSE-LGPL.TXT. (2) The BSD-style license that is included with this library in the file GIMPACT-LICENSE-BSD.TXT. (3) The zlib/libpng license that is included with this library in the file GIMPACT-LICENSE-ZLIB.TXT. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details. ----------------------------------------------------------------------------- */ #include "gim_memory.h" ///Macros for sorting. //! Prototype for comparators class less_comparator { public: template inline int operator()(const T& a, const Z& b) { return (a < b ? -1 : (a > b ? 1 : 0)); } }; //! Prototype for comparators class integer_comparator { public: template inline int operator()(const T& a, const T& b) { return (int)(a - b); } }; //!Prototype for getting the integer representation of an object class uint_key_func { public: template inline GUINT operator()(const T& a) { return (GUINT)a; } }; //!Prototype for copying elements class copy_elements_func { public: template inline void operator()(T& a, T& b) { a = b; } }; //!Prototype for copying elements class memcopy_elements_func { public: template inline void operator()(T& a, T& b) { gim_simd_memcpy(&a, &b, sizeof(T)); } }; //! @{ struct GIM_RSORT_TOKEN { GUINT m_key; GUINT m_value; GIM_RSORT_TOKEN() { } GIM_RSORT_TOKEN(const GIM_RSORT_TOKEN& rtoken) { m_key = rtoken.m_key; m_value = rtoken.m_value; } inline bool operator<(const GIM_RSORT_TOKEN& other) const { return (m_key < other.m_key); } inline bool operator>(const GIM_RSORT_TOKEN& other) const { return (m_key > other.m_key); } }; //! Prototype for comparators class GIM_RSORT_TOKEN_COMPARATOR { public: inline int operator()(const GIM_RSORT_TOKEN& a, const GIM_RSORT_TOKEN& b) { return (int)((a.m_key) - (b.m_key)); } }; #define kHist 2048 // ---- utils for accessing 11-bit quantities #define D11_0(x) (x & 0x7FF) #define D11_1(x) (x >> 11 & 0x7FF) #define D11_2(x) (x >> 22) ///Radix sort for unsigned integer keys inline void gim_radix_sort_rtokens( GIM_RSORT_TOKEN* array, GIM_RSORT_TOKEN* sorted, GUINT element_count) { GUINT i; GUINT b0[kHist * 3]; GUINT* b1 = b0 + kHist; GUINT* b2 = b1 + kHist; for (i = 0; i < kHist * 3; ++i) { b0[i] = 0; } GUINT fi; GUINT pos; for (i = 0; i < element_count; ++i) { fi = array[i].m_key; b0[D11_0(fi)]++; b1[D11_1(fi)]++; b2[D11_2(fi)]++; } { GUINT sum0 = 0, sum1 = 0, sum2 = 0; GUINT tsum; for (i = 0; i < kHist; ++i) { tsum = b0[i] + sum0; b0[i] = sum0 - 1; sum0 = tsum; tsum = b1[i] + sum1; b1[i] = sum1 - 1; sum1 = tsum; tsum = b2[i] + sum2; b2[i] = sum2 - 1; sum2 = tsum; } } for (i = 0; i < element_count; ++i) { fi = array[i].m_key; pos = D11_0(fi); pos = ++b0[pos]; sorted[pos].m_key = array[i].m_key; sorted[pos].m_value = array[i].m_value; } for (i = 0; i < element_count; ++i) { fi = sorted[i].m_key; pos = D11_1(fi); pos = ++b1[pos]; array[pos].m_key = sorted[i].m_key; array[pos].m_value = sorted[i].m_value; } for (i = 0; i < element_count; ++i) { fi = array[i].m_key; pos = D11_2(fi); pos = ++b2[pos]; sorted[pos].m_key = array[i].m_key; sorted[pos].m_value = array[i].m_value; } } /// Get the sorted tokens from an array. For generic use. Tokens are IRR_RSORT_TOKEN /*! *\param array Array of elements to sort *\param sorted_tokens Tokens of sorted elements *\param element_count element count *\param uintkey_macro Functor which retrieves the integer representation of an array element */ template void gim_radix_sort_array_tokens( T* array, GIM_RSORT_TOKEN* sorted_tokens, GUINT element_count, GETKEY_CLASS uintkey_macro) { GIM_RSORT_TOKEN* _unsorted = (GIM_RSORT_TOKEN*)gim_alloc(sizeof(GIM_RSORT_TOKEN) * element_count); for (GUINT _i = 0; _i < element_count; ++_i) { _unsorted[_i].m_key = uintkey_macro(array[_i]); _unsorted[_i].m_value = _i; } gim_radix_sort_rtokens(_unsorted, sorted_tokens, element_count); gim_free(_unsorted); gim_free(_unsorted); } /// Sorts array in place. For generic use /*! \param type Type of the array \param array \param element_count \param get_uintkey_macro Macro for extract the Integer value of the element. Similar to SIMPLE_GET_UINTKEY \param copy_elements_macro Macro for copy elements, similar to SIMPLE_COPY_ELEMENTS */ template void gim_radix_sort( T* array, GUINT element_count, GETKEY_CLASS get_uintkey_macro, COPY_CLASS copy_elements_macro) { GIM_RSORT_TOKEN* _sorted = (GIM_RSORT_TOKEN*)gim_alloc(sizeof(GIM_RSORT_TOKEN) * element_count); gim_radix_sort_array_tokens(array, _sorted, element_count, get_uintkey_macro); T* _original_array = (T*)gim_alloc(sizeof(T) * element_count); gim_simd_memcpy(_original_array, array, sizeof(T) * element_count); for (GUINT _i = 0; _i < element_count; ++_i) { copy_elements_macro(array[_i], _original_array[_sorted[_i].m_value]); } gim_free(_original_array); gim_free(_sorted); } //! Failsafe Iterative binary search, /*! If the element is not found, it returns the nearest upper element position, may be the further position after the last element. \param _array \param _start_i the beginning of the array \param _end_i the ending index of the array \param _search_key Value to find \param _comp_macro macro for comparing elements \param _found If true the value has found. Boolean \param _result_index the index of the found element, or if not found then it will get the index of the closest bigger value */ template bool gim_binary_search_ex( const T* _array, GUINT _start_i, GUINT _end_i, GUINT& _result_index, const KEYCLASS& _search_key, COMP_CLASS _comp_macro) { GUINT _k; int _comp_result; GUINT _i = _start_i; GUINT _j = _end_i + 1; while (_i < _j) { _k = (_j + _i - 1) / 2; _comp_result = _comp_macro(_array[_k], _search_key); if (_comp_result == 0) { _result_index = _k; return true; } else if (_comp_result < 0) { _i = _k + 1; } else { _j = _k; } } _result_index = _i; return false; } //! Failsafe Iterative binary search,Template version /*! If the element is not found, it returns the nearest upper element position, may be the further position after the last element. \param _array \param _start_i the beginning of the array \param _end_i the ending index of the array \param _search_key Value to find \param _result_index the index of the found element, or if not found then it will get the index of the closest bigger value \return true if found, else false */ template bool gim_binary_search( const T* _array, GUINT _start_i, GUINT _end_i, const T& _search_key, GUINT& _result_index) { GUINT _i = _start_i; GUINT _j = _end_i + 1; GUINT _k; while (_i < _j) { _k = (_j + _i - 1) / 2; if (_array[_k] == _search_key) { _result_index = _k; return true; } else if (_array[_k] < _search_key) { _i = _k + 1; } else { _j = _k; } } _result_index = _i; return false; } ///heap sort from http://www.csse.monash.edu.au/~lloyd/tildeAlgDS/Sort/Heap/ template void gim_down_heap(T* pArr, GUINT k, GUINT n, COMP_CLASS CompareFunc) { /* PRE: a[k+1..N] is a heap */ /* POST: a[k..N] is a heap */ T temp = pArr[k - 1]; /* k has child(s) */ while (k <= n / 2) { int child = 2 * k; if ((child < (int)n) && CompareFunc(pArr[child - 1], pArr[child]) < 0) { child++; } /* pick larger child */ if (CompareFunc(temp, pArr[child - 1]) < 0) { /* move child up */ pArr[k - 1] = pArr[child - 1]; k = child; } else { break; } } pArr[k - 1] = temp; } /*downHeap*/ template void gim_heap_sort(T* pArr, GUINT element_count, COMP_CLASS CompareFunc) { /* sort a[0..N-1], N.B. 0 to N-1 */ GUINT k; GUINT n = element_count; for (k = n / 2; k > 0; k--) { gim_down_heap(pArr, k, n, CompareFunc); } /* a[1..N] is now a heap */ while (n >= 2) { gim_swap_elements(pArr, 0, n - 1); /* largest of a[0..n-1] */ --n; /* restore a[1..i-1] heap */ gim_down_heap(pArr, 1, n, CompareFunc); } } #endif // GIM_RADIXSORT_H_INCLUDED ================================================ FILE: libraries/bullet/BulletCollision/Gimpact/gim_tri_collision.h ================================================ #ifndef GIM_TRI_COLLISION_H_INCLUDED #define GIM_TRI_COLLISION_H_INCLUDED /*! \file gim_tri_collision.h \author Francisco Leon Najera */ /* ----------------------------------------------------------------------------- This source file is part of GIMPACT Library. For the latest info, see http://gimpact.sourceforge.net/ Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371. email: projectileman@yahoo.com This library is free software; you can redistribute it and/or modify it under the terms of EITHER: (1) The GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The text of the GNU Lesser General Public License is included with this library in the file GIMPACT-LICENSE-LGPL.TXT. (2) The BSD-style license that is included with this library in the file GIMPACT-LICENSE-BSD.TXT. (3) The zlib/libpng license that is included with this library in the file GIMPACT-LICENSE-ZLIB.TXT. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details. ----------------------------------------------------------------------------- */ #include "gim_box_collision.h" #include "gim_clip_polygon.h" #ifndef MAX_TRI_CLIPPING #define MAX_TRI_CLIPPING 16 #endif //! Structure for collision struct GIM_TRIANGLE_CONTACT_DATA { GREAL m_penetration_depth; GUINT m_point_count; btVector4 m_separating_normal; btVector3 m_points[MAX_TRI_CLIPPING]; SIMD_FORCE_INLINE void copy_from(const GIM_TRIANGLE_CONTACT_DATA &other) { m_penetration_depth = other.m_penetration_depth; m_separating_normal = other.m_separating_normal; m_point_count = other.m_point_count; GUINT i = m_point_count; while (i--) { m_points[i] = other.m_points[i]; } } GIM_TRIANGLE_CONTACT_DATA() { } GIM_TRIANGLE_CONTACT_DATA(const GIM_TRIANGLE_CONTACT_DATA &other) { copy_from(other); } //! classify points that are closer template SIMD_FORCE_INLINE void mergepoints_generic(const CLASS_PLANE &plane, GREAL margin, const btVector3 *points, GUINT point_count, DISTANCE_FUNC distance_func) { m_point_count = 0; m_penetration_depth = -1000.0f; GUINT point_indices[MAX_TRI_CLIPPING]; GUINT _k; for (_k = 0; _k < point_count; _k++) { GREAL _dist = -distance_func(plane, points[_k]) + margin; if (_dist >= 0.0f) { if (_dist > m_penetration_depth) { m_penetration_depth = _dist; point_indices[0] = _k; m_point_count = 1; } else if ((_dist + G_EPSILON) >= m_penetration_depth) { point_indices[m_point_count] = _k; m_point_count++; } } } for (_k = 0; _k < m_point_count; _k++) { m_points[_k] = points[point_indices[_k]]; } } //! classify points that are closer SIMD_FORCE_INLINE void merge_points(const btVector4 &plane, GREAL margin, const btVector3 *points, GUINT point_count) { m_separating_normal = plane; mergepoints_generic(plane, margin, points, point_count, DISTANCE_PLANE_3D_FUNC()); } }; //! Class for colliding triangles class GIM_TRIANGLE { public: btScalar m_margin; btVector3 m_vertices[3]; GIM_TRIANGLE() : m_margin(0.1f) { } SIMD_FORCE_INLINE GIM_AABB get_box() const { return GIM_AABB(m_vertices[0], m_vertices[1], m_vertices[2], m_margin); } SIMD_FORCE_INLINE void get_normal(btVector3 &normal) const { TRIANGLE_NORMAL(m_vertices[0], m_vertices[1], m_vertices[2], normal); } SIMD_FORCE_INLINE void get_plane(btVector4 &plane) const { TRIANGLE_PLANE(m_vertices[0], m_vertices[1], m_vertices[2], plane); ; } SIMD_FORCE_INLINE void apply_transform(const btTransform &trans) { m_vertices[0] = trans(m_vertices[0]); m_vertices[1] = trans(m_vertices[1]); m_vertices[2] = trans(m_vertices[2]); } SIMD_FORCE_INLINE void get_edge_plane(GUINT edge_index, const btVector3 &triangle_normal, btVector4 &plane) const { const btVector3 &e0 = m_vertices[edge_index]; const btVector3 &e1 = m_vertices[(edge_index + 1) % 3]; EDGE_PLANE(e0, e1, triangle_normal, plane); } //! Gets the relative transformation of this triangle /*! The transformation is oriented to the triangle normal , and aligned to the 1st edge of this triangle. The position corresponds to vertice 0: - triangle normal corresponds to Z axis. - 1st normalized edge corresponds to X axis, */ SIMD_FORCE_INLINE void get_triangle_transform(btTransform &triangle_transform) const { btMatrix3x3 &matrix = triangle_transform.getBasis(); btVector3 zaxis; get_normal(zaxis); MAT_SET_Z(matrix, zaxis); btVector3 xaxis = m_vertices[1] - m_vertices[0]; VEC_NORMALIZE(xaxis); MAT_SET_X(matrix, xaxis); //y axis xaxis = zaxis.cross(xaxis); MAT_SET_Y(matrix, xaxis); triangle_transform.setOrigin(m_vertices[0]); } //! Test triangles by finding separating axis /*! \param other Triangle for collide \param contact_data Structure for holding contact points, normal and penetration depth; The normal is pointing toward this triangle from the other triangle */ bool collide_triangle_hard_test( const GIM_TRIANGLE &other, GIM_TRIANGLE_CONTACT_DATA &contact_data) const; //! Test boxes before doing hard test /*! \param other Triangle for collide \param contact_data Structure for holding contact points, normal and penetration depth; The normal is pointing toward this triangle from the other triangle \ */ SIMD_FORCE_INLINE bool collide_triangle( const GIM_TRIANGLE &other, GIM_TRIANGLE_CONTACT_DATA &contact_data) const { //test box collisioin GIM_AABB boxu(m_vertices[0], m_vertices[1], m_vertices[2], m_margin); GIM_AABB boxv(other.m_vertices[0], other.m_vertices[1], other.m_vertices[2], other.m_margin); if (!boxu.has_collision(boxv)) return false; //do hard test return collide_triangle_hard_test(other, contact_data); } /*! Solve the System for u,v parameters: u*axe1[i1] + v*axe2[i1] = vecproj[i1] u*axe1[i2] + v*axe2[i2] = vecproj[i2] sustitute: v = (vecproj[i2] - u*axe1[i2])/axe2[i2] then the first equation in terms of 'u': --> u*axe1[i1] + ((vecproj[i2] - u*axe1[i2])/axe2[i2])*axe2[i1] = vecproj[i1] --> u*axe1[i1] + vecproj[i2]*axe2[i1]/axe2[i2] - u*axe1[i2]*axe2[i1]/axe2[i2] = vecproj[i1] --> u*(axe1[i1] - axe1[i2]*axe2[i1]/axe2[i2]) = vecproj[i1] - vecproj[i2]*axe2[i1]/axe2[i2] --> u*((axe1[i1]*axe2[i2] - axe1[i2]*axe2[i1])/axe2[i2]) = (vecproj[i1]*axe2[i2] - vecproj[i2]*axe2[i1])/axe2[i2] --> u*(axe1[i1]*axe2[i2] - axe1[i2]*axe2[i1]) = vecproj[i1]*axe2[i2] - vecproj[i2]*axe2[i1] --> u = (vecproj[i1]*axe2[i2] - vecproj[i2]*axe2[i1]) /(axe1[i1]*axe2[i2] - axe1[i2]*axe2[i1]) if 0.0<= u+v <=1.0 then they are inside of triangle \return false if the point is outside of triangle.This function doesn't take the margin */ SIMD_FORCE_INLINE bool get_uv_parameters( const btVector3 &point, const btVector3 &tri_plane, GREAL &u, GREAL &v) const { btVector3 _axe1 = m_vertices[1] - m_vertices[0]; btVector3 _axe2 = m_vertices[2] - m_vertices[0]; btVector3 _vecproj = point - m_vertices[0]; GUINT _i1 = (tri_plane.closestAxis() + 1) % 3; GUINT _i2 = (_i1 + 1) % 3; if (btFabs(_axe2[_i2]) < G_EPSILON) { u = (_vecproj[_i2] * _axe2[_i1] - _vecproj[_i1] * _axe2[_i2]) / (_axe1[_i2] * _axe2[_i1] - _axe1[_i1] * _axe2[_i2]); v = (_vecproj[_i1] - u * _axe1[_i1]) / _axe2[_i1]; } else { u = (_vecproj[_i1] * _axe2[_i2] - _vecproj[_i2] * _axe2[_i1]) / (_axe1[_i1] * _axe2[_i2] - _axe1[_i2] * _axe2[_i1]); v = (_vecproj[_i2] - u * _axe1[_i2]) / _axe2[_i2]; } if (u < -G_EPSILON) { return false; } else if (v < -G_EPSILON) { return false; } else { btScalar sumuv; sumuv = u + v; if (sumuv < -G_EPSILON) { return false; } else if (sumuv - 1.0f > G_EPSILON) { return false; } } return true; } //! is point in triangle beam? /*! Test if point is in triangle, with m_margin tolerance */ SIMD_FORCE_INLINE bool is_point_inside(const btVector3 &point, const btVector3 &tri_normal) const { //Test with edge 0 btVector4 edge_plane; this->get_edge_plane(0, tri_normal, edge_plane); GREAL dist = DISTANCE_PLANE_POINT(edge_plane, point); if (dist - m_margin > 0.0f) return false; // outside plane this->get_edge_plane(1, tri_normal, edge_plane); dist = DISTANCE_PLANE_POINT(edge_plane, point); if (dist - m_margin > 0.0f) return false; // outside plane this->get_edge_plane(2, tri_normal, edge_plane); dist = DISTANCE_PLANE_POINT(edge_plane, point); if (dist - m_margin > 0.0f) return false; // outside plane return true; } //! Bidireccional ray collision SIMD_FORCE_INLINE bool ray_collision( const btVector3 &vPoint, const btVector3 &vDir, btVector3 &pout, btVector3 &triangle_normal, GREAL &tparam, GREAL tmax = G_REAL_INFINITY) { btVector4 faceplane; { btVector3 dif1 = m_vertices[1] - m_vertices[0]; btVector3 dif2 = m_vertices[2] - m_vertices[0]; VEC_CROSS(faceplane, dif1, dif2); faceplane[3] = m_vertices[0].dot(faceplane); } GUINT res = LINE_PLANE_COLLISION(faceplane, vDir, vPoint, pout, tparam, btScalar(0), tmax); if (res == 0) return false; if (!is_point_inside(pout, faceplane)) return false; if (res == 2) //invert normal { triangle_normal.setValue(-faceplane[0], -faceplane[1], -faceplane[2]); } else { triangle_normal.setValue(faceplane[0], faceplane[1], faceplane[2]); } VEC_NORMALIZE(triangle_normal); return true; } //! one direccion ray collision SIMD_FORCE_INLINE bool ray_collision_front_side( const btVector3 &vPoint, const btVector3 &vDir, btVector3 &pout, btVector3 &triangle_normal, GREAL &tparam, GREAL tmax = G_REAL_INFINITY) { btVector4 faceplane; { btVector3 dif1 = m_vertices[1] - m_vertices[0]; btVector3 dif2 = m_vertices[2] - m_vertices[0]; VEC_CROSS(faceplane, dif1, dif2); faceplane[3] = m_vertices[0].dot(faceplane); } GUINT res = LINE_PLANE_COLLISION(faceplane, vDir, vPoint, pout, tparam, btScalar(0), tmax); if (res != 1) return false; if (!is_point_inside(pout, faceplane)) return false; triangle_normal.setValue(faceplane[0], faceplane[1], faceplane[2]); VEC_NORMALIZE(triangle_normal); return true; } }; #endif // GIM_TRI_COLLISION_H_INCLUDED ================================================ FILE: libraries/bullet/BulletCollision/NarrowPhaseCollision/btComputeGjkEpaPenetration.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2014 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_GJK_EPA_PENETATION_CONVEX_COLLISION_H #define BT_GJK_EPA_PENETATION_CONVEX_COLLISION_H #include "LinearMath/btTransform.h" // Note that btVector3 might be double precision... #include "btGjkEpa3.h" #include "btGjkCollisionDescription.h" #include "BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h" template bool btGjkEpaCalcPenDepth(const btConvexTemplate& a, const btConvexTemplate& b, const btGjkCollisionDescription& colDesc, btVector3& v, btVector3& wWitnessOnA, btVector3& wWitnessOnB) { (void)v; // const btScalar radialmargin(btScalar(0.)); btVector3 guessVector(b.getWorldTransform().getOrigin() - a.getWorldTransform().getOrigin()); //?? why not use the GJK input? btGjkEpaSolver3::sResults results; if (btGjkEpaSolver3_Penetration(a, b, guessVector, results)) { // debugDraw->drawLine(results.witnesses[1],results.witnesses[1]+results.normal,btVector3(255,0,0)); //resultOut->addContactPoint(results.normal,results.witnesses[1],-results.depth); wWitnessOnA = results.witnesses[0]; wWitnessOnB = results.witnesses[1]; v = results.normal; return true; } else { if (btGjkEpaSolver3_Distance(a, b, guessVector, results)) { wWitnessOnA = results.witnesses[0]; wWitnessOnB = results.witnesses[1]; v = results.normal; return false; } } return false; } template int btComputeGjkEpaPenetration(const btConvexTemplate& a, const btConvexTemplate& b, const btGjkCollisionDescription& colDesc, btVoronoiSimplexSolver& simplexSolver, btGjkDistanceTemplate* distInfo) { bool m_catchDegeneracies = true; btScalar m_cachedSeparatingDistance = 0.f; btScalar distance = btScalar(0.); btVector3 normalInB(btScalar(0.), btScalar(0.), btScalar(0.)); btVector3 pointOnA, pointOnB; btTransform localTransA = a.getWorldTransform(); btTransform localTransB = b.getWorldTransform(); btScalar marginA = a.getMargin(); btScalar marginB = b.getMargin(); int m_curIter = 0; int gGjkMaxIter = colDesc.m_maxGjkIterations; //this is to catch invalid input, perhaps check for #NaN? btVector3 m_cachedSeparatingAxis = colDesc.m_firstDir; bool isValid = false; bool checkSimplex = false; bool checkPenetration = true; int m_degenerateSimplex = 0; int m_lastUsedMethod = -1; { btScalar squaredDistance = BT_LARGE_FLOAT; btScalar delta = btScalar(0.); btScalar margin = marginA + marginB; simplexSolver.reset(); for (;;) //while (true) { btVector3 separatingAxisInA = (-m_cachedSeparatingAxis) * localTransA.getBasis(); btVector3 separatingAxisInB = m_cachedSeparatingAxis * localTransB.getBasis(); btVector3 pInA = a.getLocalSupportWithoutMargin(separatingAxisInA); btVector3 qInB = b.getLocalSupportWithoutMargin(separatingAxisInB); btVector3 pWorld = localTransA(pInA); btVector3 qWorld = localTransB(qInB); btVector3 w = pWorld - qWorld; delta = m_cachedSeparatingAxis.dot(w); // potential exit, they don't overlap if ((delta > btScalar(0.0)) && (delta * delta > squaredDistance * colDesc.m_maximumDistanceSquared)) { m_degenerateSimplex = 10; checkSimplex = true; //checkPenetration = false; break; } //exit 0: the new point is already in the simplex, or we didn't come any closer if (simplexSolver.inSimplex(w)) { m_degenerateSimplex = 1; checkSimplex = true; break; } // are we getting any closer ? btScalar f0 = squaredDistance - delta; btScalar f1 = squaredDistance * colDesc.m_gjkRelError2; if (f0 <= f1) { if (f0 <= btScalar(0.)) { m_degenerateSimplex = 2; } else { m_degenerateSimplex = 11; } checkSimplex = true; break; } //add current vertex to simplex simplexSolver.addVertex(w, pWorld, qWorld); btVector3 newCachedSeparatingAxis; //calculate the closest point to the origin (update vector v) if (!simplexSolver.closest(newCachedSeparatingAxis)) { m_degenerateSimplex = 3; checkSimplex = true; break; } if (newCachedSeparatingAxis.length2() < colDesc.m_gjkRelError2) { m_cachedSeparatingAxis = newCachedSeparatingAxis; m_degenerateSimplex = 6; checkSimplex = true; break; } btScalar previousSquaredDistance = squaredDistance; squaredDistance = newCachedSeparatingAxis.length2(); #if 0 ///warning: this termination condition leads to some problems in 2d test case see Bullet/Demos/Box2dDemo if (squaredDistance>previousSquaredDistance) { m_degenerateSimplex = 7; squaredDistance = previousSquaredDistance; checkSimplex = false; break; } #endif // //redundant m_simplexSolver->compute_points(pointOnA, pointOnB); //are we getting any closer ? if (previousSquaredDistance - squaredDistance <= SIMD_EPSILON * previousSquaredDistance) { // m_simplexSolver->backup_closest(m_cachedSeparatingAxis); checkSimplex = true; m_degenerateSimplex = 12; break; } m_cachedSeparatingAxis = newCachedSeparatingAxis; //degeneracy, this is typically due to invalid/uninitialized worldtransforms for a btCollisionObject if (m_curIter++ > gGjkMaxIter) { #if defined(DEBUG) || defined(_DEBUG) printf("btGjkPairDetector maxIter exceeded:%i\n", m_curIter); printf("sepAxis=(%f,%f,%f), squaredDistance = %f\n", m_cachedSeparatingAxis.getX(), m_cachedSeparatingAxis.getY(), m_cachedSeparatingAxis.getZ(), squaredDistance); #endif break; } bool check = (!simplexSolver.fullSimplex()); //bool check = (!m_simplexSolver->fullSimplex() && squaredDistance > SIMD_EPSILON * m_simplexSolver->maxVertex()); if (!check) { //do we need this backup_closest here ? // m_simplexSolver->backup_closest(m_cachedSeparatingAxis); m_degenerateSimplex = 13; break; } } if (checkSimplex) { simplexSolver.compute_points(pointOnA, pointOnB); normalInB = m_cachedSeparatingAxis; btScalar lenSqr = m_cachedSeparatingAxis.length2(); //valid normal if (lenSqr < 0.0001) { m_degenerateSimplex = 5; } if (lenSqr > SIMD_EPSILON * SIMD_EPSILON) { btScalar rlen = btScalar(1.) / btSqrt(lenSqr); normalInB *= rlen; //normalize btScalar s = btSqrt(squaredDistance); btAssert(s > btScalar(0.0)); pointOnA -= m_cachedSeparatingAxis * (marginA / s); pointOnB += m_cachedSeparatingAxis * (marginB / s); distance = ((btScalar(1.) / rlen) - margin); isValid = true; m_lastUsedMethod = 1; } else { m_lastUsedMethod = 2; } } bool catchDegeneratePenetrationCase = (m_catchDegeneracies && m_degenerateSimplex && ((distance + margin) < 0.01)); //if (checkPenetration && !isValid) if (checkPenetration && (!isValid || catchDegeneratePenetrationCase)) { //penetration case //if there is no way to handle penetrations, bail out // Penetration depth case. btVector3 tmpPointOnA, tmpPointOnB; m_cachedSeparatingAxis.setZero(); bool isValid2 = btGjkEpaCalcPenDepth(a, b, colDesc, m_cachedSeparatingAxis, tmpPointOnA, tmpPointOnB); if (isValid2) { btVector3 tmpNormalInB = tmpPointOnB - tmpPointOnA; btScalar lenSqr = tmpNormalInB.length2(); if (lenSqr <= (SIMD_EPSILON * SIMD_EPSILON)) { tmpNormalInB = m_cachedSeparatingAxis; lenSqr = m_cachedSeparatingAxis.length2(); } if (lenSqr > (SIMD_EPSILON * SIMD_EPSILON)) { tmpNormalInB /= btSqrt(lenSqr); btScalar distance2 = -(tmpPointOnA - tmpPointOnB).length(); //only replace valid penetrations when the result is deeper (check) if (!isValid || (distance2 < distance)) { distance = distance2; pointOnA = tmpPointOnA; pointOnB = tmpPointOnB; normalInB = tmpNormalInB; isValid = true; m_lastUsedMethod = 3; } else { m_lastUsedMethod = 8; } } else { m_lastUsedMethod = 9; } } else { ///this is another degenerate case, where the initial GJK calculation reports a degenerate case ///EPA reports no penetration, and the second GJK (using the supporting vector without margin) ///reports a valid positive distance. Use the results of the second GJK instead of failing. ///thanks to Jacob.Langford for the reproduction case ///http://code.google.com/p/bullet/issues/detail?id=250 if (m_cachedSeparatingAxis.length2() > btScalar(0.)) { btScalar distance2 = (tmpPointOnA - tmpPointOnB).length() - margin; //only replace valid distances when the distance is less if (!isValid || (distance2 < distance)) { distance = distance2; pointOnA = tmpPointOnA; pointOnB = tmpPointOnB; pointOnA -= m_cachedSeparatingAxis * marginA; pointOnB += m_cachedSeparatingAxis * marginB; normalInB = m_cachedSeparatingAxis; normalInB.normalize(); isValid = true; m_lastUsedMethod = 6; } else { m_lastUsedMethod = 5; } } } } } if (isValid && ((distance < 0) || (distance * distance < colDesc.m_maximumDistanceSquared))) { m_cachedSeparatingAxis = normalInB; m_cachedSeparatingDistance = distance; distInfo->m_distance = distance; distInfo->m_normalBtoA = normalInB; distInfo->m_pointOnB = pointOnB; distInfo->m_pointOnA = pointOnB + normalInB * distance; return 0; } return -m_lastUsedMethod; } #endif //BT_GJK_EPA_PENETATION_CONVEX_COLLISION_H ================================================ FILE: libraries/bullet/BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_CONTINUOUS_COLLISION_CONVEX_CAST_H #define BT_CONTINUOUS_COLLISION_CONVEX_CAST_H #include "btConvexCast.h" #include "btSimplexSolverInterface.h" class btConvexPenetrationDepthSolver; class btConvexShape; class btStaticPlaneShape; /// btContinuousConvexCollision implements angular and linear time of impact for convex objects. /// Based on Brian Mirtich's Conservative Advancement idea (PhD thesis). /// Algorithm operates in worldspace, in order to keep in between motion globally consistent. /// It uses GJK at the moment. Future improvement would use minkowski sum / supporting vertex, merging innerloops class btContinuousConvexCollision : public btConvexCast { btSimplexSolverInterface* m_simplexSolver; btConvexPenetrationDepthSolver* m_penetrationDepthSolver; const btConvexShape* m_convexA; //second object is either a convex or a plane (code sharing) const btConvexShape* m_convexB1; const btStaticPlaneShape* m_planeShape; void computeClosestPoints(const btTransform& transA, const btTransform& transB, struct btPointCollector& pointCollector); public: btContinuousConvexCollision(const btConvexShape* shapeA, const btConvexShape* shapeB, btSimplexSolverInterface* simplexSolver, btConvexPenetrationDepthSolver* penetrationDepthSolver); btContinuousConvexCollision(const btConvexShape* shapeA, const btStaticPlaneShape* plane); virtual bool calcTimeOfImpact( const btTransform& fromA, const btTransform& toA, const btTransform& fromB, const btTransform& toB, CastResult& result); }; #endif //BT_CONTINUOUS_COLLISION_CONVEX_CAST_H ================================================ FILE: libraries/bullet/BulletCollision/NarrowPhaseCollision/btConvexCast.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_CONVEX_CAST_H #define BT_CONVEX_CAST_H #include "LinearMath/btTransform.h" #include "LinearMath/btVector3.h" #include "LinearMath/btScalar.h" class btMinkowskiSumShape; #include "LinearMath/btIDebugDraw.h" #ifdef BT_USE_DOUBLE_PRECISION #define MAX_CONVEX_CAST_ITERATIONS 64 #define MAX_CONVEX_CAST_EPSILON (SIMD_EPSILON * 10) #else #define MAX_CONVEX_CAST_ITERATIONS 32 #define MAX_CONVEX_CAST_EPSILON btScalar(0.0001) #endif ///Typically the conservative advancement reaches solution in a few iterations, clip it to 32 for degenerate cases. ///See discussion about this here http://continuousphysics.com/Bullet/phpBB2/viewtopic.php?t=565 //will need to digg deeper to make the algorithm more robust //since, a large epsilon can cause an early termination with false //positive results (ray intersections that shouldn't be there) /// btConvexCast is an interface for Casting class btConvexCast { public: virtual ~btConvexCast(); ///RayResult stores the closest result /// alternatively, add a callback method to decide about closest/all results struct CastResult { //virtual bool addRayResult(const btVector3& normal,btScalar fraction) = 0; virtual void DebugDraw(btScalar fraction) { (void)fraction; } virtual void drawCoordSystem(const btTransform& trans) { (void)trans; } virtual void reportFailure(int errNo, int numIterations) { (void)errNo; (void)numIterations; } CastResult() : m_fraction(btScalar(BT_LARGE_FLOAT)), m_debugDrawer(0), m_allowedPenetration(btScalar(0)), m_subSimplexCastMaxIterations(MAX_CONVEX_CAST_ITERATIONS), m_subSimplexCastEpsilon(MAX_CONVEX_CAST_EPSILON) { } virtual ~CastResult(){}; btTransform m_hitTransformA; btTransform m_hitTransformB; btVector3 m_normal; btVector3 m_hitPoint; btScalar m_fraction; //input and output btIDebugDraw* m_debugDrawer; btScalar m_allowedPenetration; int m_subSimplexCastMaxIterations; btScalar m_subSimplexCastEpsilon; }; /// cast a convex against another convex object virtual bool calcTimeOfImpact( const btTransform& fromA, const btTransform& toA, const btTransform& fromB, const btTransform& toB, CastResult& result) = 0; }; #endif //BT_CONVEX_CAST_H ================================================ FILE: libraries/bullet/BulletCollision/NarrowPhaseCollision/btConvexPenetrationDepthSolver.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_CONVEX_PENETRATION_DEPTH_H #define BT_CONVEX_PENETRATION_DEPTH_H class btVector3; #include "btSimplexSolverInterface.h" class btConvexShape; class btTransform; ///ConvexPenetrationDepthSolver provides an interface for penetration depth calculation. class btConvexPenetrationDepthSolver { public: virtual ~btConvexPenetrationDepthSolver(){}; virtual bool calcPenDepth(btSimplexSolverInterface& simplexSolver, const btConvexShape* convexA, const btConvexShape* convexB, const btTransform& transA, const btTransform& transB, btVector3& v, btVector3& pa, btVector3& pb, class btIDebugDraw* debugDraw) = 0; }; #endif //BT_CONVEX_PENETRATION_DEPTH_H ================================================ FILE: libraries/bullet/BulletCollision/NarrowPhaseCollision/btDiscreteCollisionDetectorInterface.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_DISCRETE_COLLISION_DETECTOR1_INTERFACE_H #define BT_DISCRETE_COLLISION_DETECTOR1_INTERFACE_H #include "LinearMath/btTransform.h" #include "LinearMath/btVector3.h" /// This interface is made to be used by an iterative approach to do TimeOfImpact calculations /// This interface allows to query for closest points and penetration depth between two (convex) objects /// the closest point is on the second object (B), and the normal points from the surface on B towards A. /// distance is between closest points on B and closest point on A. So you can calculate closest point on A /// by taking closestPointInA = closestPointInB + m_distance * m_normalOnSurfaceB struct btDiscreteCollisionDetectorInterface { struct Result { virtual ~Result() {} ///setShapeIdentifiersA/B provides experimental support for per-triangle material / custom material combiner virtual void setShapeIdentifiersA(int partId0, int index0) = 0; virtual void setShapeIdentifiersB(int partId1, int index1) = 0; virtual void addContactPoint(const btVector3& normalOnBInWorld, const btVector3& pointInWorld, btScalar depth) = 0; }; struct ClosestPointInput { ClosestPointInput() : m_maximumDistanceSquared(btScalar(BT_LARGE_FLOAT)) { } btTransform m_transformA; btTransform m_transformB; btScalar m_maximumDistanceSquared; }; virtual ~btDiscreteCollisionDetectorInterface(){}; // // give either closest points (distance > 0) or penetration (distance) // the normal always points from B towards A // virtual void getClosestPoints(const ClosestPointInput& input, Result& output, class btIDebugDraw* debugDraw, bool swapResults = false) = 0; }; struct btStorageResult : public btDiscreteCollisionDetectorInterface::Result { btVector3 m_normalOnSurfaceB; btVector3 m_closestPointInB; btScalar m_distance; //negative means penetration ! protected: btStorageResult() : m_distance(btScalar(BT_LARGE_FLOAT)) { } public: virtual ~btStorageResult(){}; virtual void addContactPoint(const btVector3& normalOnBInWorld, const btVector3& pointInWorld, btScalar depth) { if (depth < m_distance) { m_normalOnSurfaceB = normalOnBInWorld; m_closestPointInB = pointInWorld; m_distance = depth; } } }; #endif //BT_DISCRETE_COLLISION_DETECTOR1_INTERFACE_H ================================================ FILE: libraries/bullet/BulletCollision/NarrowPhaseCollision/btGjkCollisionDescription.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2014 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef GJK_COLLISION_DESCRIPTION_H #define GJK_COLLISION_DESCRIPTION_H #include "LinearMath/btVector3.h" struct btGjkCollisionDescription { btVector3 m_firstDir; int m_maxGjkIterations; btScalar m_maximumDistanceSquared; btScalar m_gjkRelError2; btGjkCollisionDescription() : m_firstDir(0, 1, 0), m_maxGjkIterations(1000), m_maximumDistanceSquared(1e30f), m_gjkRelError2(1.0e-6) { } virtual ~btGjkCollisionDescription() { } }; #endif //GJK_COLLISION_DESCRIPTION_H ================================================ FILE: libraries/bullet/BulletCollision/NarrowPhaseCollision/btGjkConvexCast.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_GJK_CONVEX_CAST_H #define BT_GJK_CONVEX_CAST_H #include "BulletCollision/CollisionShapes/btCollisionMargin.h" #include "LinearMath/btVector3.h" #include "btConvexCast.h" class btConvexShape; class btMinkowskiSumShape; #include "btSimplexSolverInterface.h" ///GjkConvexCast performs a raycast on a convex object using support mapping. class btGjkConvexCast : public btConvexCast { btSimplexSolverInterface* m_simplexSolver; const btConvexShape* m_convexA; const btConvexShape* m_convexB; public: btGjkConvexCast(const btConvexShape* convexA, const btConvexShape* convexB, btSimplexSolverInterface* simplexSolver); /// cast a convex against another convex object virtual bool calcTimeOfImpact( const btTransform& fromA, const btTransform& toA, const btTransform& fromB, const btTransform& toB, CastResult& result); }; #endif //BT_GJK_CONVEX_CAST_H ================================================ FILE: libraries/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpa2.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2008 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /* GJK-EPA collision solver by Nathanael Presson, 2008 */ #ifndef BT_GJK_EPA2_H #define BT_GJK_EPA2_H #include "BulletCollision/CollisionShapes/btConvexShape.h" ///btGjkEpaSolver contributed under zlib by Nathanael Presson struct btGjkEpaSolver2 { struct sResults { enum eStatus { Separated, /* Shapes doesnt penetrate */ Penetrating, /* Shapes are penetrating */ GJK_Failed, /* GJK phase fail, no big issue, shapes are probably just 'touching' */ EPA_Failed /* EPA phase fail, bigger problem, need to save parameters, and debug */ } status; btVector3 witnesses[2]; btVector3 normal; btScalar distance; }; static int StackSizeRequirement(); static bool Distance(const btConvexShape* shape0, const btTransform& wtrs0, const btConvexShape* shape1, const btTransform& wtrs1, const btVector3& guess, sResults& results); static bool Penetration(const btConvexShape* shape0, const btTransform& wtrs0, const btConvexShape* shape1, const btTransform& wtrs1, const btVector3& guess, sResults& results, bool usemargins = true); #ifndef __SPU__ static btScalar SignedDistance(const btVector3& position, btScalar margin, const btConvexShape* shape, const btTransform& wtrs, sResults& results); static bool SignedDistance(const btConvexShape* shape0, const btTransform& wtrs0, const btConvexShape* shape1, const btTransform& wtrs1, const btVector3& guess, sResults& results); #endif //__SPU__ }; #endif //BT_GJK_EPA2_H ================================================ FILE: libraries/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpa3.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2014 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /* Initial GJK-EPA collision solver by Nathanael Presson, 2008 Improvements and refactoring by Erwin Coumans, 2008-2014 */ #ifndef BT_GJK_EPA3_H #define BT_GJK_EPA3_H #include "LinearMath/btTransform.h" #include "btGjkCollisionDescription.h" struct btGjkEpaSolver3 { struct sResults { enum eStatus { Separated, /* Shapes doesnt penetrate */ Penetrating, /* Shapes are penetrating */ GJK_Failed, /* GJK phase fail, no big issue, shapes are probably just 'touching' */ EPA_Failed /* EPA phase fail, bigger problem, need to save parameters, and debug */ } status; btVector3 witnesses[2]; btVector3 normal; btScalar distance; }; }; #if defined(DEBUG) || defined(_DEBUG) #include //for debug printf #ifdef __SPU__ #include #define printf spu_printf #endif //__SPU__ #endif // Config /* GJK */ #define GJK_MAX_ITERATIONS 128 #define GJK_ACCURARY ((btScalar)0.0001) #define GJK_MIN_DISTANCE ((btScalar)0.0001) #define GJK_DUPLICATED_EPS ((btScalar)0.0001) #define GJK_SIMPLEX2_EPS ((btScalar)0.0) #define GJK_SIMPLEX3_EPS ((btScalar)0.0) #define GJK_SIMPLEX4_EPS ((btScalar)0.0) /* EPA */ #define EPA_MAX_VERTICES 64 #define EPA_MAX_FACES (EPA_MAX_VERTICES * 2) #define EPA_MAX_ITERATIONS 255 #define EPA_ACCURACY ((btScalar)0.0001) #define EPA_FALLBACK (10 * EPA_ACCURACY) #define EPA_PLANE_EPS ((btScalar)0.00001) #define EPA_INSIDE_EPS ((btScalar)0.01) // Shorthands typedef unsigned int U; typedef unsigned char U1; // MinkowskiDiff template struct MinkowskiDiff { const btConvexTemplate* m_convexAPtr; const btConvexTemplate* m_convexBPtr; btMatrix3x3 m_toshape1; btTransform m_toshape0; bool m_enableMargin; MinkowskiDiff(const btConvexTemplate& a, const btConvexTemplate& b) : m_convexAPtr(&a), m_convexBPtr(&b) { } void EnableMargin(bool enable) { m_enableMargin = enable; } inline btVector3 Support0(const btVector3& d) const { return m_convexAPtr->getLocalSupportWithMargin(d); } inline btVector3 Support1(const btVector3& d) const { return m_toshape0 * m_convexBPtr->getLocalSupportWithMargin(m_toshape1 * d); } inline btVector3 Support(const btVector3& d) const { return (Support0(d) - Support1(-d)); } btVector3 Support(const btVector3& d, U index) const { if (index) return (Support1(d)); else return (Support0(d)); } }; enum eGjkStatus { eGjkValid, eGjkInside, eGjkFailed }; // GJK template struct GJK { /* Types */ struct sSV { btVector3 d, w; }; struct sSimplex { sSV* c[4]; btScalar p[4]; U rank; }; /* Fields */ MinkowskiDiff m_shape; btVector3 m_ray; btScalar m_distance; sSimplex m_simplices[2]; sSV m_store[4]; sSV* m_free[4]; U m_nfree; U m_current; sSimplex* m_simplex; eGjkStatus m_status; /* Methods */ GJK(const btConvexTemplate& a, const btConvexTemplate& b) : m_shape(a, b) { Initialize(); } void Initialize() { m_ray = btVector3(0, 0, 0); m_nfree = 0; m_status = eGjkFailed; m_current = 0; m_distance = 0; } eGjkStatus Evaluate(const MinkowskiDiff& shapearg, const btVector3& guess) { U iterations = 0; btScalar sqdist = 0; btScalar alpha = 0; btVector3 lastw[4]; U clastw = 0; /* Initialize solver */ m_free[0] = &m_store[0]; m_free[1] = &m_store[1]; m_free[2] = &m_store[2]; m_free[3] = &m_store[3]; m_nfree = 4; m_current = 0; m_status = eGjkValid; m_shape = shapearg; m_distance = 0; /* Initialize simplex */ m_simplices[0].rank = 0; m_ray = guess; const btScalar sqrl = m_ray.length2(); appendvertice(m_simplices[0], sqrl > 0 ? -m_ray : btVector3(1, 0, 0)); m_simplices[0].p[0] = 1; m_ray = m_simplices[0].c[0]->w; sqdist = sqrl; lastw[0] = lastw[1] = lastw[2] = lastw[3] = m_ray; /* Loop */ do { const U next = 1 - m_current; sSimplex& cs = m_simplices[m_current]; sSimplex& ns = m_simplices[next]; /* Check zero */ const btScalar rl = m_ray.length(); if (rl < GJK_MIN_DISTANCE) { /* Touching or inside */ m_status = eGjkInside; break; } /* Append new vertice in -'v' direction */ appendvertice(cs, -m_ray); const btVector3& w = cs.c[cs.rank - 1]->w; bool found = false; for (U i = 0; i < 4; ++i) { if ((w - lastw[i]).length2() < GJK_DUPLICATED_EPS) { found = true; break; } } if (found) { /* Return old simplex */ removevertice(m_simplices[m_current]); break; } else { /* Update lastw */ lastw[clastw = (clastw + 1) & 3] = w; } /* Check for termination */ const btScalar omega = btDot(m_ray, w) / rl; alpha = btMax(omega, alpha); if (((rl - alpha) - (GJK_ACCURARY * rl)) <= 0) { /* Return old simplex */ removevertice(m_simplices[m_current]); break; } /* Reduce simplex */ btScalar weights[4]; U mask = 0; switch (cs.rank) { case 2: sqdist = projectorigin(cs.c[0]->w, cs.c[1]->w, weights, mask); break; case 3: sqdist = projectorigin(cs.c[0]->w, cs.c[1]->w, cs.c[2]->w, weights, mask); break; case 4: sqdist = projectorigin(cs.c[0]->w, cs.c[1]->w, cs.c[2]->w, cs.c[3]->w, weights, mask); break; } if (sqdist >= 0) { /* Valid */ ns.rank = 0; m_ray = btVector3(0, 0, 0); m_current = next; for (U i = 0, ni = cs.rank; i < ni; ++i) { if (mask & (1 << i)) { ns.c[ns.rank] = cs.c[i]; ns.p[ns.rank++] = weights[i]; m_ray += cs.c[i]->w * weights[i]; } else { m_free[m_nfree++] = cs.c[i]; } } if (mask == 15) m_status = eGjkInside; } else { /* Return old simplex */ removevertice(m_simplices[m_current]); break; } m_status = ((++iterations) < GJK_MAX_ITERATIONS) ? m_status : eGjkFailed; } while (m_status == eGjkValid); m_simplex = &m_simplices[m_current]; switch (m_status) { case eGjkValid: m_distance = m_ray.length(); break; case eGjkInside: m_distance = 0; break; default: { } } return (m_status); } bool EncloseOrigin() { switch (m_simplex->rank) { case 1: { for (U i = 0; i < 3; ++i) { btVector3 axis = btVector3(0, 0, 0); axis[i] = 1; appendvertice(*m_simplex, axis); if (EncloseOrigin()) return (true); removevertice(*m_simplex); appendvertice(*m_simplex, -axis); if (EncloseOrigin()) return (true); removevertice(*m_simplex); } } break; case 2: { const btVector3 d = m_simplex->c[1]->w - m_simplex->c[0]->w; for (U i = 0; i < 3; ++i) { btVector3 axis = btVector3(0, 0, 0); axis[i] = 1; const btVector3 p = btCross(d, axis); if (p.length2() > 0) { appendvertice(*m_simplex, p); if (EncloseOrigin()) return (true); removevertice(*m_simplex); appendvertice(*m_simplex, -p); if (EncloseOrigin()) return (true); removevertice(*m_simplex); } } } break; case 3: { const btVector3 n = btCross(m_simplex->c[1]->w - m_simplex->c[0]->w, m_simplex->c[2]->w - m_simplex->c[0]->w); if (n.length2() > 0) { appendvertice(*m_simplex, n); if (EncloseOrigin()) return (true); removevertice(*m_simplex); appendvertice(*m_simplex, -n); if (EncloseOrigin()) return (true); removevertice(*m_simplex); } } break; case 4: { if (btFabs(det(m_simplex->c[0]->w - m_simplex->c[3]->w, m_simplex->c[1]->w - m_simplex->c[3]->w, m_simplex->c[2]->w - m_simplex->c[3]->w)) > 0) return (true); } break; } return (false); } /* Internals */ void getsupport(const btVector3& d, sSV& sv) const { sv.d = d / d.length(); sv.w = m_shape.Support(sv.d); } void removevertice(sSimplex& simplex) { m_free[m_nfree++] = simplex.c[--simplex.rank]; } void appendvertice(sSimplex& simplex, const btVector3& v) { simplex.p[simplex.rank] = 0; simplex.c[simplex.rank] = m_free[--m_nfree]; getsupport(v, *simplex.c[simplex.rank++]); } static btScalar det(const btVector3& a, const btVector3& b, const btVector3& c) { return (a.y() * b.z() * c.x() + a.z() * b.x() * c.y() - a.x() * b.z() * c.y() - a.y() * b.x() * c.z() + a.x() * b.y() * c.z() - a.z() * b.y() * c.x()); } static btScalar projectorigin(const btVector3& a, const btVector3& b, btScalar* w, U& m) { const btVector3 d = b - a; const btScalar l = d.length2(); if (l > GJK_SIMPLEX2_EPS) { const btScalar t(l > 0 ? -btDot(a, d) / l : 0); if (t >= 1) { w[0] = 0; w[1] = 1; m = 2; return (b.length2()); } else if (t <= 0) { w[0] = 1; w[1] = 0; m = 1; return (a.length2()); } else { w[0] = 1 - (w[1] = t); m = 3; return ((a + d * t).length2()); } } return (-1); } static btScalar projectorigin(const btVector3& a, const btVector3& b, const btVector3& c, btScalar* w, U& m) { static const U imd3[] = {1, 2, 0}; const btVector3* vt[] = {&a, &b, &c}; const btVector3 dl[] = {a - b, b - c, c - a}; const btVector3 n = btCross(dl[0], dl[1]); const btScalar l = n.length2(); if (l > GJK_SIMPLEX3_EPS) { btScalar mindist = -1; btScalar subw[2] = {0.f, 0.f}; U subm(0); for (U i = 0; i < 3; ++i) { if (btDot(*vt[i], btCross(dl[i], n)) > 0) { const U j = imd3[i]; const btScalar subd(projectorigin(*vt[i], *vt[j], subw, subm)); if ((mindist < 0) || (subd < mindist)) { mindist = subd; m = static_cast(((subm & 1) ? 1 << i : 0) + ((subm & 2) ? 1 << j : 0)); w[i] = subw[0]; w[j] = subw[1]; w[imd3[j]] = 0; } } } if (mindist < 0) { const btScalar d = btDot(a, n); const btScalar s = btSqrt(l); const btVector3 p = n * (d / l); mindist = p.length2(); m = 7; w[0] = (btCross(dl[1], b - p)).length() / s; w[1] = (btCross(dl[2], c - p)).length() / s; w[2] = 1 - (w[0] + w[1]); } return (mindist); } return (-1); } static btScalar projectorigin(const btVector3& a, const btVector3& b, const btVector3& c, const btVector3& d, btScalar* w, U& m) { static const U imd3[] = {1, 2, 0}; const btVector3* vt[] = {&a, &b, &c, &d}; const btVector3 dl[] = {a - d, b - d, c - d}; const btScalar vl = det(dl[0], dl[1], dl[2]); const bool ng = (vl * btDot(a, btCross(b - c, a - b))) <= 0; if (ng && (btFabs(vl) > GJK_SIMPLEX4_EPS)) { btScalar mindist = -1; btScalar subw[3] = {0.f, 0.f, 0.f}; U subm(0); for (U i = 0; i < 3; ++i) { const U j = imd3[i]; const btScalar s = vl * btDot(d, btCross(dl[i], dl[j])); if (s > 0) { const btScalar subd = projectorigin(*vt[i], *vt[j], d, subw, subm); if ((mindist < 0) || (subd < mindist)) { mindist = subd; m = static_cast((subm & 1 ? 1 << i : 0) + (subm & 2 ? 1 << j : 0) + (subm & 4 ? 8 : 0)); w[i] = subw[0]; w[j] = subw[1]; w[imd3[j]] = 0; w[3] = subw[2]; } } } if (mindist < 0) { mindist = 0; m = 15; w[0] = det(c, b, d) / vl; w[1] = det(a, c, d) / vl; w[2] = det(b, a, d) / vl; w[3] = 1 - (w[0] + w[1] + w[2]); } return (mindist); } return (-1); } }; enum eEpaStatus { eEpaValid, eEpaTouching, eEpaDegenerated, eEpaNonConvex, eEpaInvalidHull, eEpaOutOfFaces, eEpaOutOfVertices, eEpaAccuraryReached, eEpaFallBack, eEpaFailed }; // EPA template struct EPA { /* Types */ struct sFace { btVector3 n; btScalar d; typename GJK::sSV* c[3]; sFace* f[3]; sFace* l[2]; U1 e[3]; U1 pass; }; struct sList { sFace* root; U count; sList() : root(0), count(0) {} }; struct sHorizon { sFace* cf; sFace* ff; U nf; sHorizon() : cf(0), ff(0), nf(0) {} }; /* Fields */ eEpaStatus m_status; typename GJK::sSimplex m_result; btVector3 m_normal; btScalar m_depth; typename GJK::sSV m_sv_store[EPA_MAX_VERTICES]; sFace m_fc_store[EPA_MAX_FACES]; U m_nextsv; sList m_hull; sList m_stock; /* Methods */ EPA() { Initialize(); } static inline void bind(sFace* fa, U ea, sFace* fb, U eb) { fa->e[ea] = (U1)eb; fa->f[ea] = fb; fb->e[eb] = (U1)ea; fb->f[eb] = fa; } static inline void append(sList& list, sFace* face) { face->l[0] = 0; face->l[1] = list.root; if (list.root) list.root->l[0] = face; list.root = face; ++list.count; } static inline void remove(sList& list, sFace* face) { if (face->l[1]) face->l[1]->l[0] = face->l[0]; if (face->l[0]) face->l[0]->l[1] = face->l[1]; if (face == list.root) list.root = face->l[1]; --list.count; } void Initialize() { m_status = eEpaFailed; m_normal = btVector3(0, 0, 0); m_depth = 0; m_nextsv = 0; for (U i = 0; i < EPA_MAX_FACES; ++i) { append(m_stock, &m_fc_store[EPA_MAX_FACES - i - 1]); } } eEpaStatus Evaluate(GJK& gjk, const btVector3& guess) { typename GJK::sSimplex& simplex = *gjk.m_simplex; if ((simplex.rank > 1) && gjk.EncloseOrigin()) { /* Clean up */ while (m_hull.root) { sFace* f = m_hull.root; remove(m_hull, f); append(m_stock, f); } m_status = eEpaValid; m_nextsv = 0; /* Orient simplex */ if (gjk.det(simplex.c[0]->w - simplex.c[3]->w, simplex.c[1]->w - simplex.c[3]->w, simplex.c[2]->w - simplex.c[3]->w) < 0) { btSwap(simplex.c[0], simplex.c[1]); btSwap(simplex.p[0], simplex.p[1]); } /* Build initial hull */ sFace* tetra[] = {newface(simplex.c[0], simplex.c[1], simplex.c[2], true), newface(simplex.c[1], simplex.c[0], simplex.c[3], true), newface(simplex.c[2], simplex.c[1], simplex.c[3], true), newface(simplex.c[0], simplex.c[2], simplex.c[3], true)}; if (m_hull.count == 4) { sFace* best = findbest(); sFace outer = *best; U pass = 0; U iterations = 0; bind(tetra[0], 0, tetra[1], 0); bind(tetra[0], 1, tetra[2], 0); bind(tetra[0], 2, tetra[3], 0); bind(tetra[1], 1, tetra[3], 2); bind(tetra[1], 2, tetra[2], 1); bind(tetra[2], 2, tetra[3], 1); m_status = eEpaValid; for (; iterations < EPA_MAX_ITERATIONS; ++iterations) { if (m_nextsv < EPA_MAX_VERTICES) { sHorizon horizon; typename GJK::sSV* w = &m_sv_store[m_nextsv++]; bool valid = true; best->pass = (U1)(++pass); gjk.getsupport(best->n, *w); const btScalar wdist = btDot(best->n, w->w) - best->d; if (wdist > EPA_ACCURACY) { for (U j = 0; (j < 3) && valid; ++j) { valid &= expand(pass, w, best->f[j], best->e[j], horizon); } if (valid && (horizon.nf >= 3)) { bind(horizon.cf, 1, horizon.ff, 2); remove(m_hull, best); append(m_stock, best); best = findbest(); outer = *best; } else { m_status = eEpaInvalidHull; break; } } else { m_status = eEpaAccuraryReached; break; } } else { m_status = eEpaOutOfVertices; break; } } const btVector3 projection = outer.n * outer.d; m_normal = outer.n; m_depth = outer.d; m_result.rank = 3; m_result.c[0] = outer.c[0]; m_result.c[1] = outer.c[1]; m_result.c[2] = outer.c[2]; m_result.p[0] = btCross(outer.c[1]->w - projection, outer.c[2]->w - projection) .length(); m_result.p[1] = btCross(outer.c[2]->w - projection, outer.c[0]->w - projection) .length(); m_result.p[2] = btCross(outer.c[0]->w - projection, outer.c[1]->w - projection) .length(); const btScalar sum = m_result.p[0] + m_result.p[1] + m_result.p[2]; m_result.p[0] /= sum; m_result.p[1] /= sum; m_result.p[2] /= sum; return (m_status); } } /* Fallback */ m_status = eEpaFallBack; m_normal = -guess; const btScalar nl = m_normal.length(); if (nl > 0) m_normal = m_normal / nl; else m_normal = btVector3(1, 0, 0); m_depth = 0; m_result.rank = 1; m_result.c[0] = simplex.c[0]; m_result.p[0] = 1; return (m_status); } bool getedgedist(sFace* face, typename GJK::sSV* a, typename GJK::sSV* b, btScalar& dist) { const btVector3 ba = b->w - a->w; const btVector3 n_ab = btCross(ba, face->n); // Outward facing edge normal direction, on triangle plane const btScalar a_dot_nab = btDot(a->w, n_ab); // Only care about the sign to determine inside/outside, so not normalization required if (a_dot_nab < 0) { // Outside of edge a->b const btScalar ba_l2 = ba.length2(); const btScalar a_dot_ba = btDot(a->w, ba); const btScalar b_dot_ba = btDot(b->w, ba); if (a_dot_ba > 0) { // Pick distance vertex a dist = a->w.length(); } else if (b_dot_ba < 0) { // Pick distance vertex b dist = b->w.length(); } else { // Pick distance to edge a->b const btScalar a_dot_b = btDot(a->w, b->w); dist = btSqrt(btMax((a->w.length2() * b->w.length2() - a_dot_b * a_dot_b) / ba_l2, (btScalar)0)); } return true; } return false; } sFace* newface(typename GJK::sSV* a, typename GJK::sSV* b, typename GJK::sSV* c, bool forced) { if (m_stock.root) { sFace* face = m_stock.root; remove(m_stock, face); append(m_hull, face); face->pass = 0; face->c[0] = a; face->c[1] = b; face->c[2] = c; face->n = btCross(b->w - a->w, c->w - a->w); const btScalar l = face->n.length(); const bool v = l > EPA_ACCURACY; if (v) { if (!(getedgedist(face, a, b, face->d) || getedgedist(face, b, c, face->d) || getedgedist(face, c, a, face->d))) { // Origin projects to the interior of the triangle // Use distance to triangle plane face->d = btDot(a->w, face->n) / l; } face->n /= l; if (forced || (face->d >= -EPA_PLANE_EPS)) { return face; } else m_status = eEpaNonConvex; } else m_status = eEpaDegenerated; remove(m_hull, face); append(m_stock, face); return 0; } m_status = m_stock.root ? eEpaOutOfVertices : eEpaOutOfFaces; return 0; } sFace* findbest() { sFace* minf = m_hull.root; btScalar mind = minf->d * minf->d; for (sFace* f = minf->l[1]; f; f = f->l[1]) { const btScalar sqd = f->d * f->d; if (sqd < mind) { minf = f; mind = sqd; } } return (minf); } bool expand(U pass, typename GJK::sSV* w, sFace* f, U e, sHorizon& horizon) { static const U i1m3[] = {1, 2, 0}; static const U i2m3[] = {2, 0, 1}; if (f->pass != pass) { const U e1 = i1m3[e]; if ((btDot(f->n, w->w) - f->d) < -EPA_PLANE_EPS) { sFace* nf = newface(f->c[e1], f->c[e], w, false); if (nf) { bind(nf, 0, f, e); if (horizon.cf) bind(horizon.cf, 1, nf, 2); else horizon.ff = nf; horizon.cf = nf; ++horizon.nf; return (true); } } else { const U e2 = i2m3[e]; f->pass = (U1)pass; if (expand(pass, w, f->f[e1], f->e[e1], horizon) && expand(pass, w, f->f[e2], f->e[e2], horizon)) { remove(m_hull, f); append(m_stock, f); return (true); } } } return (false); } }; template static void Initialize(const btConvexTemplate& a, const btConvexTemplate& b, btGjkEpaSolver3::sResults& results, MinkowskiDiff& shape) { /* Results */ results.witnesses[0] = results.witnesses[1] = btVector3(0, 0, 0); results.status = btGjkEpaSolver3::sResults::Separated; /* Shape */ shape.m_toshape1 = b.getWorldTransform().getBasis().transposeTimes(a.getWorldTransform().getBasis()); shape.m_toshape0 = a.getWorldTransform().inverseTimes(b.getWorldTransform()); } // // Api // // template bool btGjkEpaSolver3_Distance(const btConvexTemplate& a, const btConvexTemplate& b, const btVector3& guess, btGjkEpaSolver3::sResults& results) { MinkowskiDiff shape(a, b); Initialize(a, b, results, shape); GJK gjk(a, b); eGjkStatus gjk_status = gjk.Evaluate(shape, guess); if (gjk_status == eGjkValid) { btVector3 w0 = btVector3(0, 0, 0); btVector3 w1 = btVector3(0, 0, 0); for (U i = 0; i < gjk.m_simplex->rank; ++i) { const btScalar p = gjk.m_simplex->p[i]; w0 += shape.Support(gjk.m_simplex->c[i]->d, 0) * p; w1 += shape.Support(-gjk.m_simplex->c[i]->d, 1) * p; } results.witnesses[0] = a.getWorldTransform() * w0; results.witnesses[1] = a.getWorldTransform() * w1; results.normal = w0 - w1; results.distance = results.normal.length(); results.normal /= results.distance > GJK_MIN_DISTANCE ? results.distance : 1; return (true); } else { results.status = gjk_status == eGjkInside ? btGjkEpaSolver3::sResults::Penetrating : btGjkEpaSolver3::sResults::GJK_Failed; return (false); } } template bool btGjkEpaSolver3_Penetration(const btConvexTemplate& a, const btConvexTemplate& b, const btVector3& guess, btGjkEpaSolver3::sResults& results) { MinkowskiDiff shape(a, b); Initialize(a, b, results, shape); GJK gjk(a, b); eGjkStatus gjk_status = gjk.Evaluate(shape, -guess); switch (gjk_status) { case eGjkInside: { EPA epa; eEpaStatus epa_status = epa.Evaluate(gjk, -guess); if (epa_status != eEpaFailed) { btVector3 w0 = btVector3(0, 0, 0); for (U i = 0; i < epa.m_result.rank; ++i) { w0 += shape.Support(epa.m_result.c[i]->d, 0) * epa.m_result.p[i]; } results.status = btGjkEpaSolver3::sResults::Penetrating; results.witnesses[0] = a.getWorldTransform() * w0; results.witnesses[1] = a.getWorldTransform() * (w0 - epa.m_normal * epa.m_depth); results.normal = -epa.m_normal; results.distance = -epa.m_depth; return (true); } else results.status = btGjkEpaSolver3::sResults::EPA_Failed; } break; case eGjkFailed: results.status = btGjkEpaSolver3::sResults::GJK_Failed; break; default: { } } return (false); } #if 0 int btComputeGjkEpaPenetration2(const btCollisionDescription& colDesc, btDistanceInfo* distInfo) { btGjkEpaSolver3::sResults results; btVector3 guess = colDesc.m_firstDir; bool res = btGjkEpaSolver3::Penetration(colDesc.m_objA,colDesc.m_objB, colDesc.m_transformA,colDesc.m_transformB, colDesc.m_localSupportFuncA,colDesc.m_localSupportFuncB, guess, results); if (res) { if ((results.status==btGjkEpaSolver3::sResults::Penetrating) || results.status==GJK::eStatus::Inside) { //normal could be 'swapped' distInfo->m_distance = results.distance; distInfo->m_normalBtoA = results.normal; btVector3 tmpNormalInB = results.witnesses[1]-results.witnesses[0]; btScalar lenSqr = tmpNormalInB.length2(); if (lenSqr <= (SIMD_EPSILON*SIMD_EPSILON)) { tmpNormalInB = results.normal; lenSqr = results.normal.length2(); } if (lenSqr > (SIMD_EPSILON*SIMD_EPSILON)) { tmpNormalInB /= btSqrt(lenSqr); btScalar distance2 = -(results.witnesses[0]-results.witnesses[1]).length(); //only replace valid penetrations when the result is deeper (check) //if ((distance2 < results.distance)) { distInfo->m_distance = distance2; distInfo->m_pointOnA= results.witnesses[0]; distInfo->m_pointOnB= results.witnesses[1]; distInfo->m_normalBtoA= tmpNormalInB; return 0; } } } } return -1; } #endif template int btComputeGjkDistance(const btConvexTemplate& a, const btConvexTemplate& b, const btGjkCollisionDescription& colDesc, btDistanceInfoTemplate* distInfo) { btGjkEpaSolver3::sResults results; btVector3 guess = colDesc.m_firstDir; bool isSeparated = btGjkEpaSolver3_Distance(a, b, guess, results); if (isSeparated) { distInfo->m_distance = results.distance; distInfo->m_pointOnA = results.witnesses[0]; distInfo->m_pointOnB = results.witnesses[1]; distInfo->m_normalBtoA = results.normal; return 0; } return -1; } /* Symbols cleanup */ #undef GJK_MAX_ITERATIONS #undef GJK_ACCURARY #undef GJK_MIN_DISTANCE #undef GJK_DUPLICATED_EPS #undef GJK_SIMPLEX2_EPS #undef GJK_SIMPLEX3_EPS #undef GJK_SIMPLEX4_EPS #undef EPA_MAX_VERTICES #undef EPA_MAX_FACES #undef EPA_MAX_ITERATIONS #undef EPA_ACCURACY #undef EPA_FALLBACK #undef EPA_PLANE_EPS #undef EPA_INSIDE_EPS #endif //BT_GJK_EPA3_H ================================================ FILE: libraries/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ EPA Copyright (c) Ricardo Padrela 2006 This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_GJP_EPA_PENETRATION_DEPTH_H #define BT_GJP_EPA_PENETRATION_DEPTH_H #include "btConvexPenetrationDepthSolver.h" ///EpaPenetrationDepthSolver uses the Expanding Polytope Algorithm to ///calculate the penetration depth between two convex shapes. class btGjkEpaPenetrationDepthSolver : public btConvexPenetrationDepthSolver { public: btGjkEpaPenetrationDepthSolver() { } bool calcPenDepth(btSimplexSolverInterface& simplexSolver, const btConvexShape* pConvexA, const btConvexShape* pConvexB, const btTransform& transformA, const btTransform& transformB, btVector3& v, btVector3& wWitnessOnA, btVector3& wWitnessOnB, class btIDebugDraw* debugDraw); private: }; #endif // BT_GJP_EPA_PENETRATION_DEPTH_H ================================================ FILE: libraries/bullet/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_GJK_PAIR_DETECTOR_H #define BT_GJK_PAIR_DETECTOR_H #include "btDiscreteCollisionDetectorInterface.h" #include "BulletCollision/CollisionShapes/btCollisionMargin.h" class btConvexShape; #include "btSimplexSolverInterface.h" class btConvexPenetrationDepthSolver; /// btGjkPairDetector uses GJK to implement the btDiscreteCollisionDetectorInterface class btGjkPairDetector : public btDiscreteCollisionDetectorInterface { btVector3 m_cachedSeparatingAxis; btConvexPenetrationDepthSolver* m_penetrationDepthSolver; btSimplexSolverInterface* m_simplexSolver; const btConvexShape* m_minkowskiA; const btConvexShape* m_minkowskiB; int m_shapeTypeA; int m_shapeTypeB; btScalar m_marginA; btScalar m_marginB; bool m_ignoreMargin; btScalar m_cachedSeparatingDistance; public: //some debugging to fix degeneracy problems int m_lastUsedMethod; int m_curIter; int m_degenerateSimplex; int m_catchDegeneracies; int m_fixContactNormalDirection; btGjkPairDetector(const btConvexShape* objectA, const btConvexShape* objectB, btSimplexSolverInterface* simplexSolver, btConvexPenetrationDepthSolver* penetrationDepthSolver); btGjkPairDetector(const btConvexShape* objectA, const btConvexShape* objectB, int shapeTypeA, int shapeTypeB, btScalar marginA, btScalar marginB, btSimplexSolverInterface* simplexSolver, btConvexPenetrationDepthSolver* penetrationDepthSolver); virtual ~btGjkPairDetector(){}; virtual void getClosestPoints(const ClosestPointInput& input, Result& output, class btIDebugDraw* debugDraw, bool swapResults = false); void getClosestPointsNonVirtual(const ClosestPointInput& input, Result& output, class btIDebugDraw* debugDraw); void setMinkowskiA(const btConvexShape* minkA) { m_minkowskiA = minkA; } void setMinkowskiB(const btConvexShape* minkB) { m_minkowskiB = minkB; } void setCachedSeparatingAxis(const btVector3& separatingAxis) { m_cachedSeparatingAxis = separatingAxis; } const btVector3& getCachedSeparatingAxis() const { return m_cachedSeparatingAxis; } btScalar getCachedSeparatingDistance() const { return m_cachedSeparatingDistance; } void setPenetrationDepthSolver(btConvexPenetrationDepthSolver* penetrationDepthSolver) { m_penetrationDepthSolver = penetrationDepthSolver; } ///don't use setIgnoreMargin, it's for Bullet's internal use void setIgnoreMargin(bool ignoreMargin) { m_ignoreMargin = ignoreMargin; } }; #endif //BT_GJK_PAIR_DETECTOR_H ================================================ FILE: libraries/bullet/BulletCollision/NarrowPhaseCollision/btManifoldPoint.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_MANIFOLD_CONTACT_POINT_H #define BT_MANIFOLD_CONTACT_POINT_H #include "LinearMath/btVector3.h" #include "LinearMath/btTransformUtil.h" #ifdef PFX_USE_FREE_VECTORMATH #include "physics_effects/base_level/solver/pfx_constraint_row.h" typedef sce::PhysicsEffects::PfxConstraintRow btConstraintRow; #else // Don't change following order of parameters ATTRIBUTE_ALIGNED16(struct) btConstraintRow { btScalar m_normal[3]; btScalar m_rhs; btScalar m_jacDiagInv; btScalar m_lowerLimit; btScalar m_upperLimit; btScalar m_accumImpulse; }; typedef btConstraintRow PfxConstraintRow; #endif //PFX_USE_FREE_VECTORMATH enum btContactPointFlags { BT_CONTACT_FLAG_LATERAL_FRICTION_INITIALIZED = 1, BT_CONTACT_FLAG_HAS_CONTACT_CFM = 2, BT_CONTACT_FLAG_HAS_CONTACT_ERP = 4, BT_CONTACT_FLAG_CONTACT_STIFFNESS_DAMPING = 8, BT_CONTACT_FLAG_FRICTION_ANCHOR = 16, }; /// ManifoldContactPoint collects and maintains persistent contactpoints. /// used to improve stability and performance of rigidbody dynamics response. class btManifoldPoint { public: btManifoldPoint() : m_userPersistentData(0), m_contactPointFlags(0), m_appliedImpulse(0.f), m_prevRHS(0.f), m_appliedImpulseLateral1(0.f), m_appliedImpulseLateral2(0.f), m_contactMotion1(0.f), m_contactMotion2(0.f), m_contactCFM(0.f), m_contactERP(0.f), m_frictionCFM(0.f), m_lifeTime(0) { } btManifoldPoint(const btVector3& pointA, const btVector3& pointB, const btVector3& normal, btScalar distance) : m_localPointA(pointA), m_localPointB(pointB), m_normalWorldOnB(normal), m_distance1(distance), m_combinedFriction(btScalar(0.)), m_combinedRollingFriction(btScalar(0.)), m_combinedSpinningFriction(btScalar(0.)), m_combinedRestitution(btScalar(0.)), m_userPersistentData(0), m_contactPointFlags(0), m_appliedImpulse(0.f), m_prevRHS(0.f), m_appliedImpulseLateral1(0.f), m_appliedImpulseLateral2(0.f), m_contactMotion1(0.f), m_contactMotion2(0.f), m_contactCFM(0.f), m_contactERP(0.f), m_frictionCFM(0.f), m_lifeTime(0) { } btVector3 m_localPointA; btVector3 m_localPointB; btVector3 m_positionWorldOnB; ///m_positionWorldOnA is redundant information, see getPositionWorldOnA(), but for clarity btVector3 m_positionWorldOnA; btVector3 m_normalWorldOnB; btScalar m_distance1; btScalar m_combinedFriction; btScalar m_combinedRollingFriction; //torsional friction orthogonal to contact normal, useful to make spheres stop rolling forever btScalar m_combinedSpinningFriction; //torsional friction around contact normal, useful for grasping objects btScalar m_combinedRestitution; //BP mod, store contact triangles. int m_partId0; int m_partId1; int m_index0; int m_index1; mutable void* m_userPersistentData; //bool m_lateralFrictionInitialized; int m_contactPointFlags; btScalar m_appliedImpulse; btScalar m_prevRHS; btScalar m_appliedImpulseLateral1; btScalar m_appliedImpulseLateral2; btScalar m_contactMotion1; btScalar m_contactMotion2; union { btScalar m_contactCFM; btScalar m_combinedContactStiffness1; }; union { btScalar m_contactERP; btScalar m_combinedContactDamping1; }; btScalar m_frictionCFM; int m_lifeTime; //lifetime of the contactpoint in frames btVector3 m_lateralFrictionDir1; btVector3 m_lateralFrictionDir2; btScalar getDistance() const { return m_distance1; } int getLifeTime() const { return m_lifeTime; } const btVector3& getPositionWorldOnA() const { return m_positionWorldOnA; // return m_positionWorldOnB + m_normalWorldOnB * m_distance1; } const btVector3& getPositionWorldOnB() const { return m_positionWorldOnB; } void setDistance(btScalar dist) { m_distance1 = dist; } ///this returns the most recent applied impulse, to satisfy contact constraints by the constraint solver btScalar getAppliedImpulse() const { return m_appliedImpulse; } }; #endif //BT_MANIFOLD_CONTACT_POINT_H ================================================ FILE: libraries/bullet/BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_MINKOWSKI_PENETRATION_DEPTH_SOLVER_H #define BT_MINKOWSKI_PENETRATION_DEPTH_SOLVER_H #include "btConvexPenetrationDepthSolver.h" ///MinkowskiPenetrationDepthSolver implements bruteforce penetration depth estimation. ///Implementation is based on sampling the depth using support mapping, and using GJK step to get the witness points. class btMinkowskiPenetrationDepthSolver : public btConvexPenetrationDepthSolver { protected: static btVector3* getPenetrationDirections(); public: virtual bool calcPenDepth(btSimplexSolverInterface& simplexSolver, const btConvexShape* convexA, const btConvexShape* convexB, const btTransform& transA, const btTransform& transB, btVector3& v, btVector3& pa, btVector3& pb, class btIDebugDraw* debugDraw); }; #endif //BT_MINKOWSKI_PENETRATION_DEPTH_SOLVER_H ================================================ FILE: libraries/bullet/BulletCollision/NarrowPhaseCollision/btMprPenetration.h ================================================ /*** * --------------------------------- * Copyright (c)2012 Daniel Fiser * * This file was ported from mpr.c file, part of libccd. * The Minkoski Portal Refinement implementation was ported * to OpenCL by Erwin Coumans for the Bullet 3 Physics library. * The original MPR idea and implementation is by Gary Snethen * in XenoCollide, see http://github.com/erwincoumans/xenocollide * * Distributed under the OSI-approved BSD License (the "License"); * see . * This software is distributed WITHOUT ANY WARRANTY; without even the * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the License for more information. */ ///2014 Oct, Erwin Coumans, Use templates to avoid void* casts #ifndef BT_MPR_PENETRATION_H #define BT_MPR_PENETRATION_H #define BT_DEBUG_MPR1 #include "LinearMath/btTransform.h" #include "LinearMath/btAlignedObjectArray.h" //#define MPR_AVERAGE_CONTACT_POSITIONS struct btMprCollisionDescription { btVector3 m_firstDir; int m_maxGjkIterations; btScalar m_maximumDistanceSquared; btScalar m_gjkRelError2; btMprCollisionDescription() : m_firstDir(0, 1, 0), m_maxGjkIterations(1000), m_maximumDistanceSquared(1e30f), m_gjkRelError2(1.0e-6) { } virtual ~btMprCollisionDescription() { } }; struct btMprDistanceInfo { btVector3 m_pointOnA; btVector3 m_pointOnB; btVector3 m_normalBtoA; btScalar m_distance; }; #ifdef __cplusplus #define BT_MPR_SQRT sqrtf #else #define BT_MPR_SQRT sqrt #endif #define BT_MPR_FMIN(x, y) ((x) < (y) ? (x) : (y)) #define BT_MPR_FABS fabs #define BT_MPR_TOLERANCE 1E-6f #define BT_MPR_MAX_ITERATIONS 1000 struct _btMprSupport_t { btVector3 v; //!< Support point in minkowski sum btVector3 v1; //!< Support point in obj1 btVector3 v2; //!< Support point in obj2 }; typedef struct _btMprSupport_t btMprSupport_t; struct _btMprSimplex_t { btMprSupport_t ps[4]; int last; //!< index of last added point }; typedef struct _btMprSimplex_t btMprSimplex_t; inline btMprSupport_t *btMprSimplexPointW(btMprSimplex_t *s, int idx) { return &s->ps[idx]; } inline void btMprSimplexSetSize(btMprSimplex_t *s, int size) { s->last = size - 1; } #ifdef DEBUG_MPR inline void btPrintPortalVertex(_btMprSimplex_t *portal, int index) { printf("portal[%d].v = %f,%f,%f, v1=%f,%f,%f, v2=%f,%f,%f\n", index, portal->ps[index].v.x(), portal->ps[index].v.y(), portal->ps[index].v.z(), portal->ps[index].v1.x(), portal->ps[index].v1.y(), portal->ps[index].v1.z(), portal->ps[index].v2.x(), portal->ps[index].v2.y(), portal->ps[index].v2.z()); } #endif //DEBUG_MPR inline int btMprSimplexSize(const btMprSimplex_t *s) { return s->last + 1; } inline const btMprSupport_t *btMprSimplexPoint(const btMprSimplex_t *s, int idx) { // here is no check on boundaries return &s->ps[idx]; } inline void btMprSupportCopy(btMprSupport_t *d, const btMprSupport_t *s) { *d = *s; } inline void btMprSimplexSet(btMprSimplex_t *s, size_t pos, const btMprSupport_t *a) { btMprSupportCopy(s->ps + pos, a); } inline void btMprSimplexSwap(btMprSimplex_t *s, size_t pos1, size_t pos2) { btMprSupport_t supp; btMprSupportCopy(&supp, &s->ps[pos1]); btMprSupportCopy(&s->ps[pos1], &s->ps[pos2]); btMprSupportCopy(&s->ps[pos2], &supp); } inline int btMprIsZero(float val) { return BT_MPR_FABS(val) < FLT_EPSILON; } inline int btMprEq(float _a, float _b) { float ab; float a, b; ab = BT_MPR_FABS(_a - _b); if (BT_MPR_FABS(ab) < FLT_EPSILON) return 1; a = BT_MPR_FABS(_a); b = BT_MPR_FABS(_b); if (b > a) { return ab < FLT_EPSILON * b; } else { return ab < FLT_EPSILON * a; } } inline int btMprVec3Eq(const btVector3 *a, const btVector3 *b) { return btMprEq((*a).x(), (*b).x()) && btMprEq((*a).y(), (*b).y()) && btMprEq((*a).z(), (*b).z()); } template inline void btFindOrigin(const btConvexTemplate &a, const btConvexTemplate &b, const btMprCollisionDescription &colDesc, btMprSupport_t *center) { center->v1 = a.getObjectCenterInWorld(); center->v2 = b.getObjectCenterInWorld(); center->v = center->v1 - center->v2; } inline void btMprVec3Set(btVector3 *v, float x, float y, float z) { v->setValue(x, y, z); } inline void btMprVec3Add(btVector3 *v, const btVector3 *w) { *v += *w; } inline void btMprVec3Copy(btVector3 *v, const btVector3 *w) { *v = *w; } inline void btMprVec3Scale(btVector3 *d, float k) { *d *= k; } inline float btMprVec3Dot(const btVector3 *a, const btVector3 *b) { float dot; dot = btDot(*a, *b); return dot; } inline float btMprVec3Len2(const btVector3 *v) { return btMprVec3Dot(v, v); } inline void btMprVec3Normalize(btVector3 *d) { float k = 1.f / BT_MPR_SQRT(btMprVec3Len2(d)); btMprVec3Scale(d, k); } inline void btMprVec3Cross(btVector3 *d, const btVector3 *a, const btVector3 *b) { *d = btCross(*a, *b); } inline void btMprVec3Sub2(btVector3 *d, const btVector3 *v, const btVector3 *w) { *d = *v - *w; } inline void btPortalDir(const btMprSimplex_t *portal, btVector3 *dir) { btVector3 v2v1, v3v1; btMprVec3Sub2(&v2v1, &btMprSimplexPoint(portal, 2)->v, &btMprSimplexPoint(portal, 1)->v); btMprVec3Sub2(&v3v1, &btMprSimplexPoint(portal, 3)->v, &btMprSimplexPoint(portal, 1)->v); btMprVec3Cross(dir, &v2v1, &v3v1); btMprVec3Normalize(dir); } inline int portalEncapsulesOrigin(const btMprSimplex_t *portal, const btVector3 *dir) { float dot; dot = btMprVec3Dot(dir, &btMprSimplexPoint(portal, 1)->v); return btMprIsZero(dot) || dot > 0.f; } inline int portalReachTolerance(const btMprSimplex_t *portal, const btMprSupport_t *v4, const btVector3 *dir) { float dv1, dv2, dv3, dv4; float dot1, dot2, dot3; // find the smallest dot product of dir and {v1-v4, v2-v4, v3-v4} dv1 = btMprVec3Dot(&btMprSimplexPoint(portal, 1)->v, dir); dv2 = btMprVec3Dot(&btMprSimplexPoint(portal, 2)->v, dir); dv3 = btMprVec3Dot(&btMprSimplexPoint(portal, 3)->v, dir); dv4 = btMprVec3Dot(&v4->v, dir); dot1 = dv4 - dv1; dot2 = dv4 - dv2; dot3 = dv4 - dv3; dot1 = BT_MPR_FMIN(dot1, dot2); dot1 = BT_MPR_FMIN(dot1, dot3); return btMprEq(dot1, BT_MPR_TOLERANCE) || dot1 < BT_MPR_TOLERANCE; } inline int portalCanEncapsuleOrigin(const btMprSimplex_t *portal, const btMprSupport_t *v4, const btVector3 *dir) { float dot; dot = btMprVec3Dot(&v4->v, dir); return btMprIsZero(dot) || dot > 0.f; } inline void btExpandPortal(btMprSimplex_t *portal, const btMprSupport_t *v4) { float dot; btVector3 v4v0; btMprVec3Cross(&v4v0, &v4->v, &btMprSimplexPoint(portal, 0)->v); dot = btMprVec3Dot(&btMprSimplexPoint(portal, 1)->v, &v4v0); if (dot > 0.f) { dot = btMprVec3Dot(&btMprSimplexPoint(portal, 2)->v, &v4v0); if (dot > 0.f) { btMprSimplexSet(portal, 1, v4); } else { btMprSimplexSet(portal, 3, v4); } } else { dot = btMprVec3Dot(&btMprSimplexPoint(portal, 3)->v, &v4v0); if (dot > 0.f) { btMprSimplexSet(portal, 2, v4); } else { btMprSimplexSet(portal, 1, v4); } } } template inline void btMprSupport(const btConvexTemplate &a, const btConvexTemplate &b, const btMprCollisionDescription &colDesc, const btVector3 &dir, btMprSupport_t *supp) { btVector3 separatingAxisInA = dir * a.getWorldTransform().getBasis(); btVector3 separatingAxisInB = -dir * b.getWorldTransform().getBasis(); btVector3 pInA = a.getLocalSupportWithMargin(separatingAxisInA); btVector3 qInB = b.getLocalSupportWithMargin(separatingAxisInB); supp->v1 = a.getWorldTransform()(pInA); supp->v2 = b.getWorldTransform()(qInB); supp->v = supp->v1 - supp->v2; } template static int btDiscoverPortal(const btConvexTemplate &a, const btConvexTemplate &b, const btMprCollisionDescription &colDesc, btMprSimplex_t *portal) { btVector3 dir, va, vb; float dot; int cont; // vertex 0 is center of portal btFindOrigin(a, b, colDesc, btMprSimplexPointW(portal, 0)); // vertex 0 is center of portal btMprSimplexSetSize(portal, 1); btVector3 zero = btVector3(0, 0, 0); btVector3 *org = &zero; if (btMprVec3Eq(&btMprSimplexPoint(portal, 0)->v, org)) { // Portal's center lies on origin (0,0,0) => we know that objects // intersect but we would need to know penetration info. // So move center little bit... btMprVec3Set(&va, FLT_EPSILON * 10.f, 0.f, 0.f); btMprVec3Add(&btMprSimplexPointW(portal, 0)->v, &va); } // vertex 1 = support in direction of origin btMprVec3Copy(&dir, &btMprSimplexPoint(portal, 0)->v); btMprVec3Scale(&dir, -1.f); btMprVec3Normalize(&dir); btMprSupport(a, b, colDesc, dir, btMprSimplexPointW(portal, 1)); btMprSimplexSetSize(portal, 2); // test if origin isn't outside of v1 dot = btMprVec3Dot(&btMprSimplexPoint(portal, 1)->v, &dir); if (btMprIsZero(dot) || dot < 0.f) return -1; // vertex 2 btMprVec3Cross(&dir, &btMprSimplexPoint(portal, 0)->v, &btMprSimplexPoint(portal, 1)->v); if (btMprIsZero(btMprVec3Len2(&dir))) { if (btMprVec3Eq(&btMprSimplexPoint(portal, 1)->v, org)) { // origin lies on v1 return 1; } else { // origin lies on v0-v1 segment return 2; } } btMprVec3Normalize(&dir); btMprSupport(a, b, colDesc, dir, btMprSimplexPointW(portal, 2)); dot = btMprVec3Dot(&btMprSimplexPoint(portal, 2)->v, &dir); if (btMprIsZero(dot) || dot < 0.f) return -1; btMprSimplexSetSize(portal, 3); // vertex 3 direction btMprVec3Sub2(&va, &btMprSimplexPoint(portal, 1)->v, &btMprSimplexPoint(portal, 0)->v); btMprVec3Sub2(&vb, &btMprSimplexPoint(portal, 2)->v, &btMprSimplexPoint(portal, 0)->v); btMprVec3Cross(&dir, &va, &vb); btMprVec3Normalize(&dir); // it is better to form portal faces to be oriented "outside" origin dot = btMprVec3Dot(&dir, &btMprSimplexPoint(portal, 0)->v); if (dot > 0.f) { btMprSimplexSwap(portal, 1, 2); btMprVec3Scale(&dir, -1.f); } while (btMprSimplexSize(portal) < 4) { btMprSupport(a, b, colDesc, dir, btMprSimplexPointW(portal, 3)); dot = btMprVec3Dot(&btMprSimplexPoint(portal, 3)->v, &dir); if (btMprIsZero(dot) || dot < 0.f) return -1; cont = 0; // test if origin is outside (v1, v0, v3) - set v2 as v3 and // continue btMprVec3Cross(&va, &btMprSimplexPoint(portal, 1)->v, &btMprSimplexPoint(portal, 3)->v); dot = btMprVec3Dot(&va, &btMprSimplexPoint(portal, 0)->v); if (dot < 0.f && !btMprIsZero(dot)) { btMprSimplexSet(portal, 2, btMprSimplexPoint(portal, 3)); cont = 1; } if (!cont) { // test if origin is outside (v3, v0, v2) - set v1 as v3 and // continue btMprVec3Cross(&va, &btMprSimplexPoint(portal, 3)->v, &btMprSimplexPoint(portal, 2)->v); dot = btMprVec3Dot(&va, &btMprSimplexPoint(portal, 0)->v); if (dot < 0.f && !btMprIsZero(dot)) { btMprSimplexSet(portal, 1, btMprSimplexPoint(portal, 3)); cont = 1; } } if (cont) { btMprVec3Sub2(&va, &btMprSimplexPoint(portal, 1)->v, &btMprSimplexPoint(portal, 0)->v); btMprVec3Sub2(&vb, &btMprSimplexPoint(portal, 2)->v, &btMprSimplexPoint(portal, 0)->v); btMprVec3Cross(&dir, &va, &vb); btMprVec3Normalize(&dir); } else { btMprSimplexSetSize(portal, 4); } } return 0; } template static int btRefinePortal(const btConvexTemplate &a, const btConvexTemplate &b, const btMprCollisionDescription &colDesc, btMprSimplex_t *portal) { btVector3 dir; btMprSupport_t v4; for (int i = 0; i < BT_MPR_MAX_ITERATIONS; i++) //while (1) { // compute direction outside the portal (from v0 through v1,v2,v3 // face) btPortalDir(portal, &dir); // test if origin is inside the portal if (portalEncapsulesOrigin(portal, &dir)) return 0; // get next support point btMprSupport(a, b, colDesc, dir, &v4); // test if v4 can expand portal to contain origin and if portal // expanding doesn't reach given tolerance if (!portalCanEncapsuleOrigin(portal, &v4, &dir) || portalReachTolerance(portal, &v4, &dir)) { return -1; } // v1-v2-v3 triangle must be rearranged to face outside Minkowski // difference (direction from v0). btExpandPortal(portal, &v4); } return -1; } static void btFindPos(const btMprSimplex_t *portal, btVector3 *pos) { btVector3 zero = btVector3(0, 0, 0); btVector3 *origin = &zero; btVector3 dir; size_t i; float b[4], sum, inv; btVector3 vec, p1, p2; btPortalDir(portal, &dir); // use barycentric coordinates of tetrahedron to find origin btMprVec3Cross(&vec, &btMprSimplexPoint(portal, 1)->v, &btMprSimplexPoint(portal, 2)->v); b[0] = btMprVec3Dot(&vec, &btMprSimplexPoint(portal, 3)->v); btMprVec3Cross(&vec, &btMprSimplexPoint(portal, 3)->v, &btMprSimplexPoint(portal, 2)->v); b[1] = btMprVec3Dot(&vec, &btMprSimplexPoint(portal, 0)->v); btMprVec3Cross(&vec, &btMprSimplexPoint(portal, 0)->v, &btMprSimplexPoint(portal, 1)->v); b[2] = btMprVec3Dot(&vec, &btMprSimplexPoint(portal, 3)->v); btMprVec3Cross(&vec, &btMprSimplexPoint(portal, 2)->v, &btMprSimplexPoint(portal, 1)->v); b[3] = btMprVec3Dot(&vec, &btMprSimplexPoint(portal, 0)->v); sum = b[0] + b[1] + b[2] + b[3]; if (btMprIsZero(sum) || sum < 0.f) { b[0] = 0.f; btMprVec3Cross(&vec, &btMprSimplexPoint(portal, 2)->v, &btMprSimplexPoint(portal, 3)->v); b[1] = btMprVec3Dot(&vec, &dir); btMprVec3Cross(&vec, &btMprSimplexPoint(portal, 3)->v, &btMprSimplexPoint(portal, 1)->v); b[2] = btMprVec3Dot(&vec, &dir); btMprVec3Cross(&vec, &btMprSimplexPoint(portal, 1)->v, &btMprSimplexPoint(portal, 2)->v); b[3] = btMprVec3Dot(&vec, &dir); sum = b[1] + b[2] + b[3]; } inv = 1.f / sum; btMprVec3Copy(&p1, origin); btMprVec3Copy(&p2, origin); for (i = 0; i < 4; i++) { btMprVec3Copy(&vec, &btMprSimplexPoint(portal, i)->v1); btMprVec3Scale(&vec, b[i]); btMprVec3Add(&p1, &vec); btMprVec3Copy(&vec, &btMprSimplexPoint(portal, i)->v2); btMprVec3Scale(&vec, b[i]); btMprVec3Add(&p2, &vec); } btMprVec3Scale(&p1, inv); btMprVec3Scale(&p2, inv); #ifdef MPR_AVERAGE_CONTACT_POSITIONS btMprVec3Copy(pos, &p1); btMprVec3Add(pos, &p2); btMprVec3Scale(pos, 0.5); #else btMprVec3Copy(pos, &p2); #endif //MPR_AVERAGE_CONTACT_POSITIONS } inline float btMprVec3Dist2(const btVector3 *a, const btVector3 *b) { btVector3 ab; btMprVec3Sub2(&ab, a, b); return btMprVec3Len2(&ab); } inline float _btMprVec3PointSegmentDist2(const btVector3 *P, const btVector3 *x0, const btVector3 *b, btVector3 *witness) { // The computation comes from solving equation of segment: // S(t) = x0 + t.d // where - x0 is initial point of segment // - d is direction of segment from x0 (|d| > 0) // - t belongs to <0, 1> interval // // Than, distance from a segment to some point P can be expressed: // D(t) = |x0 + t.d - P|^2 // which is distance from any point on segment. Minimization // of this function brings distance from P to segment. // Minimization of D(t) leads to simple quadratic equation that's // solving is straightforward. // // Bonus of this method is witness point for free. float dist, t; btVector3 d, a; // direction of segment btMprVec3Sub2(&d, b, x0); // precompute vector from P to x0 btMprVec3Sub2(&a, x0, P); t = -1.f * btMprVec3Dot(&a, &d); t /= btMprVec3Len2(&d); if (t < 0.f || btMprIsZero(t)) { dist = btMprVec3Dist2(x0, P); if (witness) btMprVec3Copy(witness, x0); } else if (t > 1.f || btMprEq(t, 1.f)) { dist = btMprVec3Dist2(b, P); if (witness) btMprVec3Copy(witness, b); } else { if (witness) { btMprVec3Copy(witness, &d); btMprVec3Scale(witness, t); btMprVec3Add(witness, x0); dist = btMprVec3Dist2(witness, P); } else { // recycling variables btMprVec3Scale(&d, t); btMprVec3Add(&d, &a); dist = btMprVec3Len2(&d); } } return dist; } inline float btMprVec3PointTriDist2(const btVector3 *P, const btVector3 *x0, const btVector3 *B, const btVector3 *C, btVector3 *witness) { // Computation comes from analytic expression for triangle (x0, B, C) // T(s, t) = x0 + s.d1 + t.d2, where d1 = B - x0 and d2 = C - x0 and // Then equation for distance is: // D(s, t) = | T(s, t) - P |^2 // This leads to minimization of quadratic function of two variables. // The solution from is taken only if s is between 0 and 1, t is // between 0 and 1 and t + s < 1, otherwise distance from segment is // computed. btVector3 d1, d2, a; float u, v, w, p, q, r; float s, t, dist, dist2; btVector3 witness2; btMprVec3Sub2(&d1, B, x0); btMprVec3Sub2(&d2, C, x0); btMprVec3Sub2(&a, x0, P); u = btMprVec3Dot(&a, &a); v = btMprVec3Dot(&d1, &d1); w = btMprVec3Dot(&d2, &d2); p = btMprVec3Dot(&a, &d1); q = btMprVec3Dot(&a, &d2); r = btMprVec3Dot(&d1, &d2); btScalar div = (w * v - r * r); if (btMprIsZero(div)) { s = -1; } else { s = (q * r - w * p) / div; t = (-s * r - q) / w; } if ((btMprIsZero(s) || s > 0.f) && (btMprEq(s, 1.f) || s < 1.f) && (btMprIsZero(t) || t > 0.f) && (btMprEq(t, 1.f) || t < 1.f) && (btMprEq(t + s, 1.f) || t + s < 1.f)) { if (witness) { btMprVec3Scale(&d1, s); btMprVec3Scale(&d2, t); btMprVec3Copy(witness, x0); btMprVec3Add(witness, &d1); btMprVec3Add(witness, &d2); dist = btMprVec3Dist2(witness, P); } else { dist = s * s * v; dist += t * t * w; dist += 2.f * s * t * r; dist += 2.f * s * p; dist += 2.f * t * q; dist += u; } } else { dist = _btMprVec3PointSegmentDist2(P, x0, B, witness); dist2 = _btMprVec3PointSegmentDist2(P, x0, C, &witness2); if (dist2 < dist) { dist = dist2; if (witness) btMprVec3Copy(witness, &witness2); } dist2 = _btMprVec3PointSegmentDist2(P, B, C, &witness2); if (dist2 < dist) { dist = dist2; if (witness) btMprVec3Copy(witness, &witness2); } } return dist; } template static void btFindPenetr(const btConvexTemplate &a, const btConvexTemplate &b, const btMprCollisionDescription &colDesc, btMprSimplex_t *portal, float *depth, btVector3 *pdir, btVector3 *pos) { btVector3 dir; btMprSupport_t v4; unsigned long iterations; btVector3 zero = btVector3(0, 0, 0); btVector3 *origin = &zero; iterations = 1UL; for (int i = 0; i < BT_MPR_MAX_ITERATIONS; i++) //while (1) { // compute portal direction and obtain next support point btPortalDir(portal, &dir); btMprSupport(a, b, colDesc, dir, &v4); // reached tolerance -> find penetration info if (portalReachTolerance(portal, &v4, &dir) || iterations == BT_MPR_MAX_ITERATIONS) { *depth = btMprVec3PointTriDist2(origin, &btMprSimplexPoint(portal, 1)->v, &btMprSimplexPoint(portal, 2)->v, &btMprSimplexPoint(portal, 3)->v, pdir); *depth = BT_MPR_SQRT(*depth); if (btMprIsZero((*pdir).x()) && btMprIsZero((*pdir).y()) && btMprIsZero((*pdir).z())) { *pdir = dir; } btMprVec3Normalize(pdir); // barycentric coordinates: btFindPos(portal, pos); return; } btExpandPortal(portal, &v4); iterations++; } } static void btFindPenetrTouch(btMprSimplex_t *portal, float *depth, btVector3 *dir, btVector3 *pos) { // Touching contact on portal's v1 - so depth is zero and direction // is unimportant and pos can be guessed *depth = 0.f; btVector3 zero = btVector3(0, 0, 0); btVector3 *origin = &zero; btMprVec3Copy(dir, origin); #ifdef MPR_AVERAGE_CONTACT_POSITIONS btMprVec3Copy(pos, &btMprSimplexPoint(portal, 1)->v1); btMprVec3Add(pos, &btMprSimplexPoint(portal, 1)->v2); btMprVec3Scale(pos, 0.5); #else btMprVec3Copy(pos, &btMprSimplexPoint(portal, 1)->v2); #endif } static void btFindPenetrSegment(btMprSimplex_t *portal, float *depth, btVector3 *dir, btVector3 *pos) { // Origin lies on v0-v1 segment. // Depth is distance to v1, direction also and position must be // computed #ifdef MPR_AVERAGE_CONTACT_POSITIONS btMprVec3Copy(pos, &btMprSimplexPoint(portal, 1)->v1); btMprVec3Add(pos, &btMprSimplexPoint(portal, 1)->v2); btMprVec3Scale(pos, 0.5f); #else btMprVec3Copy(pos, &btMprSimplexPoint(portal, 1)->v2); #endif //MPR_AVERAGE_CONTACT_POSITIONS btMprVec3Copy(dir, &btMprSimplexPoint(portal, 1)->v); *depth = BT_MPR_SQRT(btMprVec3Len2(dir)); btMprVec3Normalize(dir); } template inline int btMprPenetration(const btConvexTemplate &a, const btConvexTemplate &b, const btMprCollisionDescription &colDesc, float *depthOut, btVector3 *dirOut, btVector3 *posOut) { btMprSimplex_t portal; // Phase 1: Portal discovery int result = btDiscoverPortal(a, b, colDesc, &portal); //sepAxis[pairIndex] = *pdir;//or -dir? switch (result) { case 0: { // Phase 2: Portal refinement result = btRefinePortal(a, b, colDesc, &portal); if (result < 0) return -1; // Phase 3. Penetration info btFindPenetr(a, b, colDesc, &portal, depthOut, dirOut, posOut); break; } case 1: { // Touching contact on portal's v1. btFindPenetrTouch(&portal, depthOut, dirOut, posOut); result = 0; break; } case 2: { btFindPenetrSegment(&portal, depthOut, dirOut, posOut); result = 0; break; } default: { //if (res < 0) //{ // Origin isn't inside portal - no collision. result = -1; //} } }; return result; }; template inline int btComputeMprPenetration(const btConvexTemplate &a, const btConvexTemplate &b, const btMprCollisionDescription &colDesc, btMprDistanceTemplate *distInfo) { btVector3 dir, pos; float depth; int res = btMprPenetration(a, b, colDesc, &depth, &dir, &pos); if (res == 0) { distInfo->m_distance = -depth; distInfo->m_pointOnB = pos; distInfo->m_normalBtoA = -dir; distInfo->m_pointOnA = pos - distInfo->m_distance * dir; return 0; } return -1; } #endif //BT_MPR_PENETRATION_H ================================================ FILE: libraries/bullet/BulletCollision/NarrowPhaseCollision/btPersistentManifold.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_PERSISTENT_MANIFOLD_H #define BT_PERSISTENT_MANIFOLD_H #include "LinearMath/btVector3.h" #include "LinearMath/btTransform.h" #include "btManifoldPoint.h" class btCollisionObject; #include "LinearMath/btAlignedAllocator.h" struct btCollisionResult; struct btCollisionObjectDoubleData; struct btCollisionObjectFloatData; ///maximum contact breaking and merging threshold extern btScalar gContactBreakingThreshold; #ifndef SWIG class btPersistentManifold; typedef bool (*ContactDestroyedCallback)(void* userPersistentData); typedef bool (*ContactProcessedCallback)(btManifoldPoint& cp, void* body0, void* body1); typedef void (*ContactStartedCallback)(btPersistentManifold* const& manifold); typedef void (*ContactEndedCallback)(btPersistentManifold* const& manifold); extern ContactDestroyedCallback gContactDestroyedCallback; extern ContactProcessedCallback gContactProcessedCallback; extern ContactStartedCallback gContactStartedCallback; extern ContactEndedCallback gContactEndedCallback; #endif //SWIG //the enum starts at 1024 to avoid type conflicts with btTypedConstraint enum btContactManifoldTypes { MIN_CONTACT_MANIFOLD_TYPE = 1024, BT_PERSISTENT_MANIFOLD_TYPE }; #define MANIFOLD_CACHE_SIZE 4 ///btPersistentManifold is a contact point cache, it stays persistent as long as objects are overlapping in the broadphase. ///Those contact points are created by the collision narrow phase. ///The cache can be empty, or hold 1,2,3 or 4 points. Some collision algorithms (GJK) might only add one point at a time. ///updates/refreshes old contact points, and throw them away if necessary (distance becomes too large) ///reduces the cache to 4 points, when more then 4 points are added, using following rules: ///the contact point with deepest penetration is always kept, and it tries to maximuze the area covered by the points ///note that some pairs of objects might have more then one contact manifold. //ATTRIBUTE_ALIGNED128( class) btPersistentManifold : public btTypedObject ATTRIBUTE_ALIGNED16(class) btPersistentManifold : public btTypedObject { btManifoldPoint m_pointCache[MANIFOLD_CACHE_SIZE]; /// this two body pointers can point to the physics rigidbody class. const btCollisionObject* m_body0; const btCollisionObject* m_body1; int m_cachedPoints; btScalar m_contactBreakingThreshold; btScalar m_contactProcessingThreshold; /// sort cached points so most isolated points come first int sortCachedPoints(const btManifoldPoint& pt); int findContactPoint(const btManifoldPoint* unUsed, int numUnused, const btManifoldPoint& pt); public: BT_DECLARE_ALIGNED_ALLOCATOR(); int m_companionIdA; int m_companionIdB; int m_index1a; btPersistentManifold(); btPersistentManifold(const btCollisionObject* body0, const btCollisionObject* body1, int, btScalar contactBreakingThreshold, btScalar contactProcessingThreshold) : btTypedObject(BT_PERSISTENT_MANIFOLD_TYPE), m_body0(body0), m_body1(body1), m_cachedPoints(0), m_contactBreakingThreshold(contactBreakingThreshold), m_contactProcessingThreshold(contactProcessingThreshold), m_companionIdA(0), m_companionIdB(0), m_index1a(0) { } SIMD_FORCE_INLINE const btCollisionObject* getBody0() const { return m_body0; } SIMD_FORCE_INLINE const btCollisionObject* getBody1() const { return m_body1; } void setBodies(const btCollisionObject* body0, const btCollisionObject* body1) { m_body0 = body0; m_body1 = body1; } void clearUserCache(btManifoldPoint & pt); #ifdef DEBUG_PERSISTENCY void DebugPersistency(); #endif // SIMD_FORCE_INLINE int getNumContacts() const { return m_cachedPoints; } /// the setNumContacts API is usually not used, except when you gather/fill all contacts manually void setNumContacts(int cachedPoints) { m_cachedPoints = cachedPoints; } SIMD_FORCE_INLINE const btManifoldPoint& getContactPoint(int index) const { btAssert(index < m_cachedPoints); return m_pointCache[index]; } SIMD_FORCE_INLINE btManifoldPoint& getContactPoint(int index) { btAssert(index < m_cachedPoints); return m_pointCache[index]; } ///@todo: get this margin from the current physics / collision environment btScalar getContactBreakingThreshold() const; btScalar getContactProcessingThreshold() const { return m_contactProcessingThreshold; } void setContactBreakingThreshold(btScalar contactBreakingThreshold) { m_contactBreakingThreshold = contactBreakingThreshold; } void setContactProcessingThreshold(btScalar contactProcessingThreshold) { m_contactProcessingThreshold = contactProcessingThreshold; } int getCacheEntry(const btManifoldPoint& newPoint) const; int addManifoldPoint(const btManifoldPoint& newPoint, bool isPredictive = false); void removeContactPoint(int index) { clearUserCache(m_pointCache[index]); int lastUsedIndex = getNumContacts() - 1; // m_pointCache[index] = m_pointCache[lastUsedIndex]; if (index != lastUsedIndex) { m_pointCache[index] = m_pointCache[lastUsedIndex]; //get rid of duplicated userPersistentData pointer m_pointCache[lastUsedIndex].m_userPersistentData = 0; m_pointCache[lastUsedIndex].m_appliedImpulse = 0.f; m_pointCache[lastUsedIndex].m_prevRHS = 0.f; m_pointCache[lastUsedIndex].m_contactPointFlags = 0; m_pointCache[lastUsedIndex].m_appliedImpulseLateral1 = 0.f; m_pointCache[lastUsedIndex].m_appliedImpulseLateral2 = 0.f; m_pointCache[lastUsedIndex].m_lifeTime = 0; } btAssert(m_pointCache[lastUsedIndex].m_userPersistentData == 0); m_cachedPoints--; if (gContactEndedCallback && m_cachedPoints == 0) { gContactEndedCallback(this); } } void replaceContactPoint(const btManifoldPoint& newPoint, int insertIndex) { btAssert(validContactDistance(newPoint)); #define MAINTAIN_PERSISTENCY 1 #ifdef MAINTAIN_PERSISTENCY int lifeTime = m_pointCache[insertIndex].getLifeTime(); btScalar appliedImpulse = m_pointCache[insertIndex].m_appliedImpulse; btScalar prevRHS = m_pointCache[insertIndex].m_prevRHS; btScalar appliedLateralImpulse1 = m_pointCache[insertIndex].m_appliedImpulseLateral1; btScalar appliedLateralImpulse2 = m_pointCache[insertIndex].m_appliedImpulseLateral2; bool replacePoint = true; ///we keep existing contact points for friction anchors ///if the friction force is within the Coulomb friction cone if (newPoint.m_contactPointFlags & BT_CONTACT_FLAG_FRICTION_ANCHOR) { // printf("appliedImpulse=%f\n", appliedImpulse); // printf("appliedLateralImpulse1=%f\n", appliedLateralImpulse1); // printf("appliedLateralImpulse2=%f\n", appliedLateralImpulse2); // printf("mu = %f\n", m_pointCache[insertIndex].m_combinedFriction); btScalar mu = m_pointCache[insertIndex].m_combinedFriction; btScalar eps = 0; //we could allow to enlarge or shrink the tolerance to check against the friction cone a bit, say 1e-7 btScalar a = appliedLateralImpulse1 * appliedLateralImpulse1 + appliedLateralImpulse2 * appliedLateralImpulse2; btScalar b = eps + mu * appliedImpulse; b = b * b; replacePoint = (a) > (b); } if (replacePoint) { btAssert(lifeTime >= 0); void* cache = m_pointCache[insertIndex].m_userPersistentData; m_pointCache[insertIndex] = newPoint; m_pointCache[insertIndex].m_userPersistentData = cache; m_pointCache[insertIndex].m_appliedImpulse = appliedImpulse; m_pointCache[insertIndex].m_prevRHS = prevRHS; m_pointCache[insertIndex].m_appliedImpulseLateral1 = appliedLateralImpulse1; m_pointCache[insertIndex].m_appliedImpulseLateral2 = appliedLateralImpulse2; } m_pointCache[insertIndex].m_lifeTime = lifeTime; #else clearUserCache(m_pointCache[insertIndex]); m_pointCache[insertIndex] = newPoint; #endif } bool validContactDistance(const btManifoldPoint& pt) const { return pt.m_distance1 <= getContactBreakingThreshold(); } /// calculated new worldspace coordinates and depth, and reject points that exceed the collision margin void refreshContactPoints(const btTransform& trA, const btTransform& trB); SIMD_FORCE_INLINE void clearManifold() { int i; for (i = 0; i < m_cachedPoints; i++) { clearUserCache(m_pointCache[i]); } if (gContactEndedCallback && m_cachedPoints) { gContactEndedCallback(this); } m_cachedPoints = 0; } int calculateSerializeBufferSize() const; const char* serialize(const class btPersistentManifold* manifold, void* dataBuffer, class btSerializer* serializer) const; void deSerialize(const struct btPersistentManifoldDoubleData* manifoldDataPtr); void deSerialize(const struct btPersistentManifoldFloatData* manifoldDataPtr); }; // clang-format off struct btPersistentManifoldDoubleData { btVector3DoubleData m_pointCacheLocalPointA[4]; btVector3DoubleData m_pointCacheLocalPointB[4]; btVector3DoubleData m_pointCachePositionWorldOnA[4]; btVector3DoubleData m_pointCachePositionWorldOnB[4]; btVector3DoubleData m_pointCacheNormalWorldOnB[4]; btVector3DoubleData m_pointCacheLateralFrictionDir1[4]; btVector3DoubleData m_pointCacheLateralFrictionDir2[4]; double m_pointCacheDistance[4]; double m_pointCacheAppliedImpulse[4]; double m_pointCachePrevRHS[4]; double m_pointCacheCombinedFriction[4]; double m_pointCacheCombinedRollingFriction[4]; double m_pointCacheCombinedSpinningFriction[4]; double m_pointCacheCombinedRestitution[4]; int m_pointCachePartId0[4]; int m_pointCachePartId1[4]; int m_pointCacheIndex0[4]; int m_pointCacheIndex1[4]; int m_pointCacheContactPointFlags[4]; double m_pointCacheAppliedImpulseLateral1[4]; double m_pointCacheAppliedImpulseLateral2[4]; double m_pointCacheContactMotion1[4]; double m_pointCacheContactMotion2[4]; double m_pointCacheContactCFM[4]; double m_pointCacheCombinedContactStiffness1[4]; double m_pointCacheContactERP[4]; double m_pointCacheCombinedContactDamping1[4]; double m_pointCacheFrictionCFM[4]; int m_pointCacheLifeTime[4]; int m_numCachedPoints; int m_companionIdA; int m_companionIdB; int m_index1a; int m_objectType; double m_contactBreakingThreshold; double m_contactProcessingThreshold; int m_padding; btCollisionObjectDoubleData *m_body0; btCollisionObjectDoubleData *m_body1; }; struct btPersistentManifoldFloatData { btVector3FloatData m_pointCacheLocalPointA[4]; btVector3FloatData m_pointCacheLocalPointB[4]; btVector3FloatData m_pointCachePositionWorldOnA[4]; btVector3FloatData m_pointCachePositionWorldOnB[4]; btVector3FloatData m_pointCacheNormalWorldOnB[4]; btVector3FloatData m_pointCacheLateralFrictionDir1[4]; btVector3FloatData m_pointCacheLateralFrictionDir2[4]; float m_pointCacheDistance[4]; float m_pointCacheAppliedImpulse[4]; float m_pointCachePrevRHS[4]; float m_pointCacheCombinedFriction[4]; float m_pointCacheCombinedRollingFriction[4]; float m_pointCacheCombinedSpinningFriction[4]; float m_pointCacheCombinedRestitution[4]; int m_pointCachePartId0[4]; int m_pointCachePartId1[4]; int m_pointCacheIndex0[4]; int m_pointCacheIndex1[4]; int m_pointCacheContactPointFlags[4]; float m_pointCacheAppliedImpulseLateral1[4]; float m_pointCacheAppliedImpulseLateral2[4]; float m_pointCacheContactMotion1[4]; float m_pointCacheContactMotion2[4]; float m_pointCacheContactCFM[4]; float m_pointCacheCombinedContactStiffness1[4]; float m_pointCacheContactERP[4]; float m_pointCacheCombinedContactDamping1[4]; float m_pointCacheFrictionCFM[4]; int m_pointCacheLifeTime[4]; int m_numCachedPoints; int m_companionIdA; int m_companionIdB; int m_index1a; int m_objectType; float m_contactBreakingThreshold; float m_contactProcessingThreshold; int m_padding; btCollisionObjectFloatData *m_body0; btCollisionObjectFloatData *m_body1; }; // clang-format on #ifdef BT_USE_DOUBLE_PRECISION #define btPersistentManifoldData btPersistentManifoldDoubleData #define btPersistentManifoldDataName "btPersistentManifoldDoubleData" #else #define btPersistentManifoldData btPersistentManifoldFloatData #define btPersistentManifoldDataName "btPersistentManifoldFloatData" #endif //BT_USE_DOUBLE_PRECISION #endif //BT_PERSISTENT_MANIFOLD_H ================================================ FILE: libraries/bullet/BulletCollision/NarrowPhaseCollision/btPointCollector.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_POINT_COLLECTOR_H #define BT_POINT_COLLECTOR_H #include "btDiscreteCollisionDetectorInterface.h" struct btPointCollector : public btDiscreteCollisionDetectorInterface::Result { btVector3 m_normalOnBInWorld; btVector3 m_pointInWorld; btScalar m_distance; //negative means penetration bool m_hasResult; btPointCollector() : m_distance(btScalar(BT_LARGE_FLOAT)), m_hasResult(false) { } virtual void setShapeIdentifiersA(int partId0, int index0) { (void)partId0; (void)index0; } virtual void setShapeIdentifiersB(int partId1, int index1) { (void)partId1; (void)index1; } virtual void addContactPoint(const btVector3& normalOnBInWorld, const btVector3& pointInWorld, btScalar depth) { if (depth < m_distance) { m_hasResult = true; m_normalOnBInWorld = normalOnBInWorld; m_pointInWorld = pointInWorld; //negative means penetration m_distance = depth; } } }; #endif //BT_POINT_COLLECTOR_H ================================================ FILE: libraries/bullet/BulletCollision/NarrowPhaseCollision/btPolyhedralContactClipping.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2011 Advanced Micro Devices, Inc. http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ ///This file was written by Erwin Coumans #ifndef BT_POLYHEDRAL_CONTACT_CLIPPING_H #define BT_POLYHEDRAL_CONTACT_CLIPPING_H #include "LinearMath/btAlignedObjectArray.h" #include "LinearMath/btTransform.h" #include "btDiscreteCollisionDetectorInterface.h" class btConvexPolyhedron; typedef btAlignedObjectArray btVertexArray; // Clips a face to the back of a plane struct btPolyhedralContactClipping { static void clipHullAgainstHull(const btVector3& separatingNormal1, const btConvexPolyhedron& hullA, const btConvexPolyhedron& hullB, const btTransform& transA, const btTransform& transB, const btScalar minDist, btScalar maxDist, btVertexArray& worldVertsB1, btVertexArray& worldVertsB2, btDiscreteCollisionDetectorInterface::Result& resultOut); static void clipFaceAgainstHull(const btVector3& separatingNormal, const btConvexPolyhedron& hullA, const btTransform& transA, btVertexArray& worldVertsB1, btVertexArray& worldVertsB2, const btScalar minDist, btScalar maxDist, btDiscreteCollisionDetectorInterface::Result& resultOut); static bool findSeparatingAxis(const btConvexPolyhedron& hullA, const btConvexPolyhedron& hullB, const btTransform& transA, const btTransform& transB, btVector3& sep, btDiscreteCollisionDetectorInterface::Result& resultOut); ///the clipFace method is used internally static void clipFace(const btVertexArray& pVtxIn, btVertexArray& ppVtxOut, const btVector3& planeNormalWS, btScalar planeEqWS); }; #endif // BT_POLYHEDRAL_CONTACT_CLIPPING_H ================================================ FILE: libraries/bullet/BulletCollision/NarrowPhaseCollision/btRaycastCallback.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_RAYCAST_TRI_CALLBACK_H #define BT_RAYCAST_TRI_CALLBACK_H #include "BulletCollision/CollisionShapes/btTriangleCallback.h" #include "LinearMath/btTransform.h" struct btBroadphaseProxy; class btConvexShape; class btTriangleRaycastCallback : public btTriangleCallback { public: //input btVector3 m_from; btVector3 m_to; //@BP Mod - allow backface filtering and unflipped normals enum EFlags { kF_None = 0, kF_FilterBackfaces = 1 << 0, kF_KeepUnflippedNormal = 1 << 1, // Prevents returned face normal getting flipped when a ray hits a back-facing triangle ///SubSimplexConvexCastRaytest is the default, even if kF_None is set. kF_UseSubSimplexConvexCastRaytest = 1 << 2, // Uses an approximate but faster ray versus convex intersection algorithm kF_UseGjkConvexCastRaytest = 1 << 3, kF_DisableHeightfieldAccelerator = 1 << 4, //don't use the heightfield raycast accelerator. See https://github.com/bulletphysics/bullet3/pull/2062 kF_Terminator = 0xFFFFFFFF }; unsigned int m_flags; btScalar m_hitFraction; btTriangleRaycastCallback(const btVector3& from, const btVector3& to, unsigned int flags = 0); virtual void processTriangle(btVector3* triangle, int partId, int triangleIndex); virtual btScalar reportHit(const btVector3& hitNormalLocal, btScalar hitFraction, int partId, int triangleIndex) = 0; }; class btTriangleConvexcastCallback : public btTriangleCallback { public: const btConvexShape* m_convexShape; btTransform m_convexShapeFrom; btTransform m_convexShapeTo; btTransform m_triangleToWorld; btScalar m_hitFraction; btScalar m_triangleCollisionMargin; btScalar m_allowedPenetration; btTriangleConvexcastCallback(const btConvexShape* convexShape, const btTransform& convexShapeFrom, const btTransform& convexShapeTo, const btTransform& triangleToWorld, const btScalar triangleCollisionMargin); virtual void processTriangle(btVector3* triangle, int partId, int triangleIndex); virtual btScalar reportHit(const btVector3& hitNormalLocal, const btVector3& hitPointLocal, btScalar hitFraction, int partId, int triangleIndex) = 0; }; #endif //BT_RAYCAST_TRI_CALLBACK_H ================================================ FILE: libraries/bullet/BulletCollision/NarrowPhaseCollision/btSimplexSolverInterface.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_SIMPLEX_SOLVER_INTERFACE_H #define BT_SIMPLEX_SOLVER_INTERFACE_H #include "LinearMath/btVector3.h" #define NO_VIRTUAL_INTERFACE 1 #ifdef NO_VIRTUAL_INTERFACE #include "btVoronoiSimplexSolver.h" #define btSimplexSolverInterface btVoronoiSimplexSolver #else /// btSimplexSolverInterface can incrementally calculate distance between origin and up to 4 vertices /// Used by GJK or Linear Casting. Can be implemented by the Johnson-algorithm or alternative approaches based on /// voronoi regions or barycentric coordinates class btSimplexSolverInterface { public: virtual ~btSimplexSolverInterface(){}; virtual void reset() = 0; virtual void addVertex(const btVector3& w, const btVector3& p, const btVector3& q) = 0; virtual bool closest(btVector3& v) = 0; virtual btScalar maxVertex() = 0; virtual bool fullSimplex() const = 0; virtual int getSimplex(btVector3* pBuf, btVector3* qBuf, btVector3* yBuf) const = 0; virtual bool inSimplex(const btVector3& w) = 0; virtual void backup_closest(btVector3& v) = 0; virtual bool emptySimplex() const = 0; virtual void compute_points(btVector3& p1, btVector3& p2) = 0; virtual int numVertices() const = 0; }; #endif #endif //BT_SIMPLEX_SOLVER_INTERFACE_H ================================================ FILE: libraries/bullet/BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_SUBSIMPLEX_CONVEX_CAST_H #define BT_SUBSIMPLEX_CONVEX_CAST_H #include "btConvexCast.h" #include "btSimplexSolverInterface.h" class btConvexShape; /// btSubsimplexConvexCast implements Gino van den Bergens' paper ///"Ray Casting against bteral Convex Objects with Application to Continuous Collision Detection" /// GJK based Ray Cast, optimized version /// Objects should not start in overlap, otherwise results are not defined. class btSubsimplexConvexCast : public btConvexCast { btSimplexSolverInterface* m_simplexSolver; const btConvexShape* m_convexA; const btConvexShape* m_convexB; public: btSubsimplexConvexCast(const btConvexShape* shapeA, const btConvexShape* shapeB, btSimplexSolverInterface* simplexSolver); //virtual ~btSubsimplexConvexCast(); ///SimsimplexConvexCast calculateTimeOfImpact calculates the time of impact+normal for the linear cast (sweep) between two moving objects. ///Precondition is that objects should not penetration/overlap at the start from the interval. Overlap can be tested using btGjkPairDetector. virtual bool calcTimeOfImpact( const btTransform& fromA, const btTransform& toA, const btTransform& fromB, const btTransform& toB, CastResult& result); }; #endif //BT_SUBSIMPLEX_CONVEX_CAST_H ================================================ FILE: libraries/bullet/BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_VORONOI_SIMPLEX_SOLVER_H #define BT_VORONOI_SIMPLEX_SOLVER_H #include "btSimplexSolverInterface.h" #define VORONOI_SIMPLEX_MAX_VERTS 5 ///disable next define, or use defaultCollisionConfiguration->getSimplexSolver()->setEqualVertexThreshold(0.f) to disable/configure #define BT_USE_EQUAL_VERTEX_THRESHOLD #ifdef BT_USE_DOUBLE_PRECISION #define VORONOI_DEFAULT_EQUAL_VERTEX_THRESHOLD 1e-12f #else #define VORONOI_DEFAULT_EQUAL_VERTEX_THRESHOLD 0.0001f #endif //BT_USE_DOUBLE_PRECISION struct btUsageBitfield { btUsageBitfield() { reset(); } void reset() { usedVertexA = false; usedVertexB = false; usedVertexC = false; usedVertexD = false; } unsigned short usedVertexA : 1; unsigned short usedVertexB : 1; unsigned short usedVertexC : 1; unsigned short usedVertexD : 1; unsigned short unused1 : 1; unsigned short unused2 : 1; unsigned short unused3 : 1; unsigned short unused4 : 1; }; struct btSubSimplexClosestResult { btVector3 m_closestPointOnSimplex; //MASK for m_usedVertices //stores the simplex vertex-usage, using the MASK, // if m_usedVertices & MASK then the related vertex is used btUsageBitfield m_usedVertices; btScalar m_barycentricCoords[4]; bool m_degenerate; void reset() { m_degenerate = false; setBarycentricCoordinates(); m_usedVertices.reset(); } bool isValid() { bool valid = (m_barycentricCoords[0] >= btScalar(0.)) && (m_barycentricCoords[1] >= btScalar(0.)) && (m_barycentricCoords[2] >= btScalar(0.)) && (m_barycentricCoords[3] >= btScalar(0.)); return valid; } void setBarycentricCoordinates(btScalar a = btScalar(0.), btScalar b = btScalar(0.), btScalar c = btScalar(0.), btScalar d = btScalar(0.)) { m_barycentricCoords[0] = a; m_barycentricCoords[1] = b; m_barycentricCoords[2] = c; m_barycentricCoords[3] = d; } }; /// btVoronoiSimplexSolver is an implementation of the closest point distance algorithm from a 1-4 points simplex to the origin. /// Can be used with GJK, as an alternative to Johnson distance algorithm. #ifdef NO_VIRTUAL_INTERFACE ATTRIBUTE_ALIGNED16(class) btVoronoiSimplexSolver #else ATTRIBUTE_ALIGNED16(class) btVoronoiSimplexSolver : public btSimplexSolverInterface #endif { public: BT_DECLARE_ALIGNED_ALLOCATOR(); int m_numVertices; btVector3 m_simplexVectorW[VORONOI_SIMPLEX_MAX_VERTS]; btVector3 m_simplexPointsP[VORONOI_SIMPLEX_MAX_VERTS]; btVector3 m_simplexPointsQ[VORONOI_SIMPLEX_MAX_VERTS]; btVector3 m_cachedP1; btVector3 m_cachedP2; btVector3 m_cachedV; btVector3 m_lastW; btScalar m_equalVertexThreshold; bool m_cachedValidClosest; btSubSimplexClosestResult m_cachedBC; bool m_needsUpdate; void removeVertex(int index); void reduceVertices(const btUsageBitfield& usedVerts); bool updateClosestVectorAndPoints(); bool closestPtPointTetrahedron(const btVector3& p, const btVector3& a, const btVector3& b, const btVector3& c, const btVector3& d, btSubSimplexClosestResult& finalResult); int pointOutsideOfPlane(const btVector3& p, const btVector3& a, const btVector3& b, const btVector3& c, const btVector3& d); bool closestPtPointTriangle(const btVector3& p, const btVector3& a, const btVector3& b, const btVector3& c, btSubSimplexClosestResult& result); public: btVoronoiSimplexSolver() : m_equalVertexThreshold(VORONOI_DEFAULT_EQUAL_VERTEX_THRESHOLD) { } void reset(); void addVertex(const btVector3& w, const btVector3& p, const btVector3& q); void setEqualVertexThreshold(btScalar threshold) { m_equalVertexThreshold = threshold; } btScalar getEqualVertexThreshold() const { return m_equalVertexThreshold; } bool closest(btVector3 & v); btScalar maxVertex(); bool fullSimplex() const { return (m_numVertices == 4); } int getSimplex(btVector3 * pBuf, btVector3 * qBuf, btVector3 * yBuf) const; bool inSimplex(const btVector3& w); void backup_closest(btVector3 & v); bool emptySimplex() const; void compute_points(btVector3 & p1, btVector3 & p2); int numVertices() const { return m_numVertices; } }; #endif //BT_VORONOI_SIMPLEX_SOLVER_H ================================================ FILE: libraries/bullet/BulletDynamics/ConstraintSolver/btBatchedConstraints.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_BATCHED_CONSTRAINTS_H #define BT_BATCHED_CONSTRAINTS_H #include "LinearMath/btThreads.h" #include "LinearMath/btAlignedObjectArray.h" #include "BulletDynamics/ConstraintSolver/btSolverBody.h" #include "BulletDynamics/ConstraintSolver/btSolverConstraint.h" class btIDebugDraw; struct btBatchedConstraints { enum BatchingMethod { BATCHING_METHOD_SPATIAL_GRID_2D, BATCHING_METHOD_SPATIAL_GRID_3D, BATCHING_METHOD_COUNT }; struct Range { int begin; int end; Range() : begin(0), end(0) {} Range(int _beg, int _end) : begin(_beg), end(_end) {} }; btAlignedObjectArray m_constraintIndices; btAlignedObjectArray m_batches; // each batch is a range of indices in the m_constraintIndices array btAlignedObjectArray m_phases; // each phase is range of indices in the m_batches array btAlignedObjectArray m_phaseGrainSize; // max grain size for each phase btAlignedObjectArray m_phaseOrder; // phases can be done in any order, so we can randomize the order here btIDebugDraw* m_debugDrawer; static bool s_debugDrawBatches; btBatchedConstraints() { m_debugDrawer = NULL; } void setup(btConstraintArray* constraints, const btAlignedObjectArray& bodies, BatchingMethod batchingMethod, int minBatchSize, int maxBatchSize, btAlignedObjectArray* scratchMemory); bool validate(btConstraintArray* constraints, const btAlignedObjectArray& bodies) const; }; #endif // BT_BATCHED_CONSTRAINTS_H ================================================ FILE: libraries/bullet/BulletDynamics/ConstraintSolver/btConeTwistConstraint.h ================================================ /* Bullet Continuous Collision Detection and Physics Library btConeTwistConstraint is Copyright (c) 2007 Starbreeze Studios This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. Written by: Marcus Hennix */ /* Overview: btConeTwistConstraint can be used to simulate ragdoll joints (upper arm, leg etc). It is a fixed translation, 3 degree-of-freedom (DOF) rotational "joint". It divides the 3 rotational DOFs into swing (movement within a cone) and twist. Swing is divided into swing1 and swing2 which can have different limits, giving an elliptical shape. (Note: the cone's base isn't flat, so this ellipse is "embedded" on the surface of a sphere.) In the contraint's frame of reference: twist is along the x-axis, and swing 1 and 2 are along the z and y axes respectively. */ #ifndef BT_CONETWISTCONSTRAINT_H #define BT_CONETWISTCONSTRAINT_H #include "LinearMath/btVector3.h" #include "btJacobianEntry.h" #include "btTypedConstraint.h" #ifdef BT_USE_DOUBLE_PRECISION #define btConeTwistConstraintData2 btConeTwistConstraintDoubleData #define btConeTwistConstraintDataName "btConeTwistConstraintDoubleData" #else #define btConeTwistConstraintData2 btConeTwistConstraintData #define btConeTwistConstraintDataName "btConeTwistConstraintData" #endif //BT_USE_DOUBLE_PRECISION class btRigidBody; enum btConeTwistFlags { BT_CONETWIST_FLAGS_LIN_CFM = 1, BT_CONETWIST_FLAGS_LIN_ERP = 2, BT_CONETWIST_FLAGS_ANG_CFM = 4 }; ///btConeTwistConstraint can be used to simulate ragdoll joints (upper arm, leg etc) ATTRIBUTE_ALIGNED16(class) btConeTwistConstraint : public btTypedConstraint { #ifdef IN_PARALLELL_SOLVER public: #endif btJacobianEntry m_jac[3]; //3 orthogonal linear constraints btTransform m_rbAFrame; btTransform m_rbBFrame; btScalar m_limitSoftness; btScalar m_biasFactor; btScalar m_relaxationFactor; btScalar m_damping; btScalar m_swingSpan1; btScalar m_swingSpan2; btScalar m_twistSpan; btScalar m_fixThresh; btVector3 m_swingAxis; btVector3 m_twistAxis; btScalar m_kSwing; btScalar m_kTwist; btScalar m_twistLimitSign; btScalar m_swingCorrection; btScalar m_twistCorrection; btScalar m_twistAngle; btScalar m_accSwingLimitImpulse; btScalar m_accTwistLimitImpulse; bool m_angularOnly; bool m_solveTwistLimit; bool m_solveSwingLimit; bool m_useSolveConstraintObsolete; // not yet used... btScalar m_swingLimitRatio; btScalar m_twistLimitRatio; btVector3 m_twistAxisA; // motor bool m_bMotorEnabled; bool m_bNormalizedMotorStrength; btQuaternion m_qTarget; btScalar m_maxMotorImpulse; btVector3 m_accMotorImpulse; // parameters int m_flags; btScalar m_linCFM; btScalar m_linERP; btScalar m_angCFM; protected: void init(); void computeConeLimitInfo(const btQuaternion& qCone, // in btScalar& swingAngle, btVector3& vSwingAxis, btScalar& swingLimit); // all outs void computeTwistLimitInfo(const btQuaternion& qTwist, // in btScalar& twistAngle, btVector3& vTwistAxis); // all outs void adjustSwingAxisToUseEllipseNormal(btVector3 & vSwingAxis) const; public: BT_DECLARE_ALIGNED_ALLOCATOR(); btConeTwistConstraint(btRigidBody & rbA, btRigidBody & rbB, const btTransform& rbAFrame, const btTransform& rbBFrame); btConeTwistConstraint(btRigidBody & rbA, const btTransform& rbAFrame); virtual void buildJacobian(); virtual void getInfo1(btConstraintInfo1 * info); void getInfo1NonVirtual(btConstraintInfo1 * info); virtual void getInfo2(btConstraintInfo2 * info); void getInfo2NonVirtual(btConstraintInfo2 * info, const btTransform& transA, const btTransform& transB, const btMatrix3x3& invInertiaWorldA, const btMatrix3x3& invInertiaWorldB); virtual void solveConstraintObsolete(btSolverBody & bodyA, btSolverBody & bodyB, btScalar timeStep); void updateRHS(btScalar timeStep); const btRigidBody& getRigidBodyA() const { return m_rbA; } const btRigidBody& getRigidBodyB() const { return m_rbB; } void setAngularOnly(bool angularOnly) { m_angularOnly = angularOnly; } bool getAngularOnly() const { return m_angularOnly; } void setLimit(int limitIndex, btScalar limitValue) { switch (limitIndex) { case 3: { m_twistSpan = limitValue; break; } case 4: { m_swingSpan2 = limitValue; break; } case 5: { m_swingSpan1 = limitValue; break; } default: { } }; } btScalar getLimit(int limitIndex) const { switch (limitIndex) { case 3: { return m_twistSpan; break; } case 4: { return m_swingSpan2; break; } case 5: { return m_swingSpan1; break; } default: { btAssert(0 && "Invalid limitIndex specified for btConeTwistConstraint"); return 0.0; } }; } // setLimit(), a few notes: // _softness: // 0->1, recommend ~0.8->1. // describes % of limits where movement is free. // beyond this softness %, the limit is gradually enforced until the "hard" (1.0) limit is reached. // _biasFactor: // 0->1?, recommend 0.3 +/-0.3 or so. // strength with which constraint resists zeroth order (angular, not angular velocity) limit violation. // __relaxationFactor: // 0->1, recommend to stay near 1. // the lower the value, the less the constraint will fight velocities which violate the angular limits. void setLimit(btScalar _swingSpan1, btScalar _swingSpan2, btScalar _twistSpan, btScalar _softness = 1.f, btScalar _biasFactor = 0.3f, btScalar _relaxationFactor = 1.0f) { m_swingSpan1 = _swingSpan1; m_swingSpan2 = _swingSpan2; m_twistSpan = _twistSpan; m_limitSoftness = _softness; m_biasFactor = _biasFactor; m_relaxationFactor = _relaxationFactor; } const btTransform& getAFrame() const { return m_rbAFrame; }; const btTransform& getBFrame() const { return m_rbBFrame; }; inline int getSolveTwistLimit() { return m_solveTwistLimit; } inline int getSolveSwingLimit() { return m_solveSwingLimit; } inline btScalar getTwistLimitSign() { return m_twistLimitSign; } void calcAngleInfo(); void calcAngleInfo2(const btTransform& transA, const btTransform& transB, const btMatrix3x3& invInertiaWorldA, const btMatrix3x3& invInertiaWorldB); inline btScalar getSwingSpan1() const { return m_swingSpan1; } inline btScalar getSwingSpan2() const { return m_swingSpan2; } inline btScalar getTwistSpan() const { return m_twistSpan; } inline btScalar getLimitSoftness() const { return m_limitSoftness; } inline btScalar getBiasFactor() const { return m_biasFactor; } inline btScalar getRelaxationFactor() const { return m_relaxationFactor; } inline btScalar getTwistAngle() const { return m_twistAngle; } bool isPastSwingLimit() { return m_solveSwingLimit; } btScalar getDamping() const { return m_damping; } void setDamping(btScalar damping) { m_damping = damping; } void enableMotor(bool b) { m_bMotorEnabled = b; } bool isMotorEnabled() const { return m_bMotorEnabled; } btScalar getMaxMotorImpulse() const { return m_maxMotorImpulse; } bool isMaxMotorImpulseNormalized() const { return m_bNormalizedMotorStrength; } void setMaxMotorImpulse(btScalar maxMotorImpulse) { m_maxMotorImpulse = maxMotorImpulse; m_bNormalizedMotorStrength = false; } void setMaxMotorImpulseNormalized(btScalar maxMotorImpulse) { m_maxMotorImpulse = maxMotorImpulse; m_bNormalizedMotorStrength = true; } btScalar getFixThresh() { return m_fixThresh; } void setFixThresh(btScalar fixThresh) { m_fixThresh = fixThresh; } // setMotorTarget: // q: the desired rotation of bodyA wrt bodyB. // note: if q violates the joint limits, the internal target is clamped to avoid conflicting impulses (very bad for stability) // note: don't forget to enableMotor() void setMotorTarget(const btQuaternion& q); const btQuaternion& getMotorTarget() const { return m_qTarget; } // same as above, but q is the desired rotation of frameA wrt frameB in constraint space void setMotorTargetInConstraintSpace(const btQuaternion& q); btVector3 GetPointForAngle(btScalar fAngleInRadians, btScalar fLength) const; ///override the default global value of a parameter (such as ERP or CFM), optionally provide the axis (0..5). ///If no axis is provided, it uses the default axis for this constraint. virtual void setParam(int num, btScalar value, int axis = -1); virtual void setFrames(const btTransform& frameA, const btTransform& frameB); const btTransform& getFrameOffsetA() const { return m_rbAFrame; } const btTransform& getFrameOffsetB() const { return m_rbBFrame; } ///return the local value of parameter virtual btScalar getParam(int num, int axis = -1) const; int getFlags() const { return m_flags; } virtual int calculateSerializeBufferSize() const; ///fills the dataBuffer and returns the struct name (and 0 on failure) virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; }; struct btConeTwistConstraintDoubleData { btTypedConstraintDoubleData m_typeConstraintData; btTransformDoubleData m_rbAFrame; btTransformDoubleData m_rbBFrame; //limits double m_swingSpan1; double m_swingSpan2; double m_twistSpan; double m_limitSoftness; double m_biasFactor; double m_relaxationFactor; double m_damping; }; #ifdef BT_BACKWARDS_COMPATIBLE_SERIALIZATION ///this structure is not used, except for loading pre-2.82 .bullet files struct btConeTwistConstraintData { btTypedConstraintData m_typeConstraintData; btTransformFloatData m_rbAFrame; btTransformFloatData m_rbBFrame; //limits float m_swingSpan1; float m_swingSpan2; float m_twistSpan; float m_limitSoftness; float m_biasFactor; float m_relaxationFactor; float m_damping; char m_pad[4]; }; #endif //BT_BACKWARDS_COMPATIBLE_SERIALIZATION // SIMD_FORCE_INLINE int btConeTwistConstraint::calculateSerializeBufferSize() const { return sizeof(btConeTwistConstraintData2); } ///fills the dataBuffer and returns the struct name (and 0 on failure) SIMD_FORCE_INLINE const char* btConeTwistConstraint::serialize(void* dataBuffer, btSerializer* serializer) const { btConeTwistConstraintData2* cone = (btConeTwistConstraintData2*)dataBuffer; btTypedConstraint::serialize(&cone->m_typeConstraintData, serializer); m_rbAFrame.serialize(cone->m_rbAFrame); m_rbBFrame.serialize(cone->m_rbBFrame); cone->m_swingSpan1 = m_swingSpan1; cone->m_swingSpan2 = m_swingSpan2; cone->m_twistSpan = m_twistSpan; cone->m_limitSoftness = m_limitSoftness; cone->m_biasFactor = m_biasFactor; cone->m_relaxationFactor = m_relaxationFactor; cone->m_damping = m_damping; return btConeTwistConstraintDataName; } #endif //BT_CONETWISTCONSTRAINT_H ================================================ FILE: libraries/bullet/BulletDynamics/ConstraintSolver/btConstraintSolver.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_CONSTRAINT_SOLVER_H #define BT_CONSTRAINT_SOLVER_H #include "LinearMath/btScalar.h" class btPersistentManifold; class btRigidBody; class btCollisionObject; class btTypedConstraint; struct btContactSolverInfo; struct btBroadphaseProxy; class btIDebugDraw; class btStackAlloc; class btDispatcher; /// btConstraintSolver provides solver interface enum btConstraintSolverType { BT_SEQUENTIAL_IMPULSE_SOLVER = 1, BT_MLCP_SOLVER = 2, BT_NNCG_SOLVER = 4, BT_MULTIBODY_SOLVER = 8, BT_BLOCK_SOLVER = 16, }; class btConstraintSolver { public: virtual ~btConstraintSolver() {} virtual void prepareSolve(int /* numBodies */, int /* numManifolds */) { ; } ///solve a group of constraints virtual btScalar solveGroup(btCollisionObject** bodies, int numBodies, btPersistentManifold** manifold, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& info, class btIDebugDraw* debugDrawer, btDispatcher* dispatcher) = 0; virtual void allSolved(const btContactSolverInfo& /* info */, class btIDebugDraw* /* debugDrawer */) { ; } ///clear internal cached data and reset random seed virtual void reset() = 0; virtual btConstraintSolverType getSolverType() const = 0; }; #endif //BT_CONSTRAINT_SOLVER_H ================================================ FILE: libraries/bullet/BulletDynamics/ConstraintSolver/btContactConstraint.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_CONTACT_CONSTRAINT_H #define BT_CONTACT_CONSTRAINT_H #include "LinearMath/btVector3.h" #include "btJacobianEntry.h" #include "btTypedConstraint.h" #include "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h" ///btContactConstraint can be automatically created to solve contact constraints using the unified btTypedConstraint interface ATTRIBUTE_ALIGNED16(class) btContactConstraint : public btTypedConstraint { protected: btPersistentManifold m_contactManifold; protected: btContactConstraint(btPersistentManifold * contactManifold, btRigidBody & rbA, btRigidBody & rbB); public: void setContactManifold(btPersistentManifold * contactManifold); btPersistentManifold* getContactManifold() { return &m_contactManifold; } const btPersistentManifold* getContactManifold() const { return &m_contactManifold; } virtual ~btContactConstraint(); virtual void getInfo1(btConstraintInfo1 * info); virtual void getInfo2(btConstraintInfo2 * info); ///obsolete methods virtual void buildJacobian(); }; ///very basic collision resolution without friction btScalar resolveSingleCollision(btRigidBody* body1, class btCollisionObject* colObj2, const btVector3& contactPositionWorld, const btVector3& contactNormalOnB, const struct btContactSolverInfo& solverInfo, btScalar distance); ///resolveSingleBilateral is an obsolete methods used for vehicle friction between two dynamic objects void resolveSingleBilateral(btRigidBody& body1, const btVector3& pos1, btRigidBody& body2, const btVector3& pos2, btScalar distance, const btVector3& normal, btScalar& impulse, btScalar timeStep); #endif //BT_CONTACT_CONSTRAINT_H ================================================ FILE: libraries/bullet/BulletDynamics/ConstraintSolver/btContactSolverInfo.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_CONTACT_SOLVER_INFO #define BT_CONTACT_SOLVER_INFO #include "LinearMath/btScalar.h" enum btSolverMode { SOLVER_RANDMIZE_ORDER = 1, SOLVER_FRICTION_SEPARATE = 2, SOLVER_USE_WARMSTARTING = 4, SOLVER_USE_2_FRICTION_DIRECTIONS = 16, SOLVER_ENABLE_FRICTION_DIRECTION_CACHING = 32, SOLVER_DISABLE_VELOCITY_DEPENDENT_FRICTION_DIRECTION = 64, SOLVER_CACHE_FRIENDLY = 128, SOLVER_SIMD = 256, SOLVER_INTERLEAVE_CONTACT_AND_FRICTION_CONSTRAINTS = 512, SOLVER_ALLOW_ZERO_LENGTH_FRICTION_DIRECTIONS = 1024, SOLVER_DISABLE_IMPLICIT_CONE_FRICTION = 2048, SOLVER_USE_ARTICULATED_WARMSTARTING = 4096, }; struct btContactSolverInfoData { btScalar m_tau; btScalar m_damping; //global non-contact constraint damping, can be locally overridden by constraints during 'getInfo2'. btScalar m_friction; btScalar m_timeStep; btScalar m_restitution; int m_numIterations; btScalar m_maxErrorReduction; btScalar m_sor; //successive over-relaxation term btScalar m_erp; //error reduction for non-contact constraints btScalar m_erp2; //error reduction for contact constraints btScalar m_deformable_erp; //error reduction for deformable constraints btScalar m_deformable_cfm; //constraint force mixing for deformable constraints btScalar m_deformable_maxErrorReduction; // maxErrorReduction for deformable contact btScalar m_globalCfm; //constraint force mixing for contacts and non-contacts btScalar m_frictionERP; //error reduction for friction constraints btScalar m_frictionCFM; //constraint force mixing for friction constraints int m_splitImpulse; btScalar m_splitImpulsePenetrationThreshold; btScalar m_splitImpulseTurnErp; btScalar m_linearSlop; btScalar m_warmstartingFactor; btScalar m_articulatedWarmstartingFactor; int m_solverMode; int m_restingContactRestitutionThreshold; int m_minimumSolverBatchSize; btScalar m_maxGyroscopicForce; btScalar m_singleAxisRollingFrictionThreshold; btScalar m_leastSquaresResidualThreshold; btScalar m_restitutionVelocityThreshold; bool m_jointFeedbackInWorldSpace; bool m_jointFeedbackInJointFrame; int m_reportSolverAnalytics; int m_numNonContactInnerIterations; }; struct btContactSolverInfo : public btContactSolverInfoData { inline btContactSolverInfo() { m_tau = btScalar(0.6); m_damping = btScalar(1.0); m_friction = btScalar(0.3); m_timeStep = btScalar(1.f / 60.f); m_restitution = btScalar(0.); m_maxErrorReduction = btScalar(20.); m_numIterations = 10; m_erp = btScalar(0.2); m_erp2 = btScalar(0.2); m_deformable_erp = btScalar(0.06); m_deformable_cfm = btScalar(0.01); m_deformable_maxErrorReduction = btScalar(0.1); m_globalCfm = btScalar(0.); m_frictionERP = btScalar(0.2); //positional friction 'anchors' are disabled by default m_frictionCFM = btScalar(0.); m_sor = btScalar(1.); m_splitImpulse = true; m_splitImpulsePenetrationThreshold = -.04f; m_splitImpulseTurnErp = 0.1f; m_linearSlop = btScalar(0.0); m_warmstartingFactor = btScalar(0.85); m_articulatedWarmstartingFactor = btScalar(0.85); //m_solverMode = SOLVER_USE_WARMSTARTING | SOLVER_SIMD | SOLVER_DISABLE_VELOCITY_DEPENDENT_FRICTION_DIRECTION|SOLVER_USE_2_FRICTION_DIRECTIONS|SOLVER_ENABLE_FRICTION_DIRECTION_CACHING;// | SOLVER_RANDMIZE_ORDER; m_solverMode = SOLVER_USE_WARMSTARTING | SOLVER_SIMD; // | SOLVER_RANDMIZE_ORDER; m_restingContactRestitutionThreshold = 2; //unused as of 2.81 m_minimumSolverBatchSize = 128; //try to combine islands until the amount of constraints reaches this limit m_maxGyroscopicForce = 100.f; ///it is only used for 'explicit' version of gyroscopic force m_singleAxisRollingFrictionThreshold = 1e30f; ///if the velocity is above this threshold, it will use a single constraint row (axis), otherwise 3 rows. m_leastSquaresResidualThreshold = 0.f; m_restitutionVelocityThreshold = 0.2f; //if the relative velocity is below this threshold, there is zero restitution m_jointFeedbackInWorldSpace = false; m_jointFeedbackInJointFrame = false; m_reportSolverAnalytics = 0; m_numNonContactInnerIterations = 1; // the number of inner iterations for solving motor constraint in a single iteration of the constraint solve } }; ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 struct btContactSolverInfoDoubleData { double m_tau; double m_damping; //global non-contact constraint damping, can be locally overridden by constraints during 'getInfo2'. double m_friction; double m_timeStep; double m_restitution; double m_maxErrorReduction; double m_sor; double m_erp; //used as Baumgarte factor double m_erp2; //used in Split Impulse double m_globalCfm; //constraint force mixing double m_splitImpulsePenetrationThreshold; double m_splitImpulseTurnErp; double m_linearSlop; double m_warmstartingFactor; double m_articulatedWarmstartingFactor; double m_maxGyroscopicForce; ///it is only used for 'explicit' version of gyroscopic force double m_singleAxisRollingFrictionThreshold; int m_numIterations; int m_solverMode; int m_restingContactRestitutionThreshold; int m_minimumSolverBatchSize; int m_splitImpulse; char m_padding[4]; }; ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 struct btContactSolverInfoFloatData { float m_tau; float m_damping; //global non-contact constraint damping, can be locally overridden by constraints during 'getInfo2'. float m_friction; float m_timeStep; float m_restitution; float m_maxErrorReduction; float m_sor; float m_erp; //used as Baumgarte factor float m_erp2; //used in Split Impulse float m_globalCfm; //constraint force mixing float m_splitImpulsePenetrationThreshold; float m_splitImpulseTurnErp; float m_linearSlop; float m_warmstartingFactor; float m_articulatedWarmstartingFactor; float m_maxGyroscopicForce; float m_singleAxisRollingFrictionThreshold; int m_numIterations; int m_solverMode; int m_restingContactRestitutionThreshold; int m_minimumSolverBatchSize; int m_splitImpulse; }; #endif //BT_CONTACT_SOLVER_INFO ================================================ FILE: libraries/bullet/BulletDynamics/ConstraintSolver/btFixedConstraint.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2013 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_FIXED_CONSTRAINT_H #define BT_FIXED_CONSTRAINT_H #include "btGeneric6DofSpring2Constraint.h" ATTRIBUTE_ALIGNED16(class) btFixedConstraint : public btGeneric6DofSpring2Constraint { public: btFixedConstraint(btRigidBody & rbA, btRigidBody & rbB, const btTransform& frameInA, const btTransform& frameInB); virtual ~btFixedConstraint(); }; #endif //BT_FIXED_CONSTRAINT_H ================================================ FILE: libraries/bullet/BulletDynamics/ConstraintSolver/btGearConstraint.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2012 Advanced Micro Devices, Inc. http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_GEAR_CONSTRAINT_H #define BT_GEAR_CONSTRAINT_H #include "BulletDynamics/ConstraintSolver/btTypedConstraint.h" #ifdef BT_USE_DOUBLE_PRECISION #define btGearConstraintData btGearConstraintDoubleData #define btGearConstraintDataName "btGearConstraintDoubleData" #else #define btGearConstraintData btGearConstraintFloatData #define btGearConstraintDataName "btGearConstraintFloatData" #endif //BT_USE_DOUBLE_PRECISION ///The btGeatConstraint will couple the angular velocity for two bodies around given local axis and ratio. ///See Bullet/Demos/ConstraintDemo for an example use. class btGearConstraint : public btTypedConstraint { protected: btVector3 m_axisInA; btVector3 m_axisInB; bool m_useFrameA; btScalar m_ratio; public: btGearConstraint(btRigidBody& rbA, btRigidBody& rbB, const btVector3& axisInA, const btVector3& axisInB, btScalar ratio = 1.f); virtual ~btGearConstraint(); ///internal method used by the constraint solver, don't use them directly virtual void getInfo1(btConstraintInfo1* info); ///internal method used by the constraint solver, don't use them directly virtual void getInfo2(btConstraintInfo2* info); void setAxisA(btVector3& axisA) { m_axisInA = axisA; } void setAxisB(btVector3& axisB) { m_axisInB = axisB; } void setRatio(btScalar ratio) { m_ratio = ratio; } const btVector3& getAxisA() const { return m_axisInA; } const btVector3& getAxisB() const { return m_axisInB; } btScalar getRatio() const { return m_ratio; } virtual void setParam(int num, btScalar value, int axis = -1) { (void)num; (void)value; (void)axis; btAssert(0); } ///return the local value of parameter virtual btScalar getParam(int num, int axis = -1) const { (void)num; (void)axis; btAssert(0); return 0.f; } virtual int calculateSerializeBufferSize() const; ///fills the dataBuffer and returns the struct name (and 0 on failure) virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; }; ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 struct btGearConstraintFloatData { btTypedConstraintFloatData m_typeConstraintData; btVector3FloatData m_axisInA; btVector3FloatData m_axisInB; float m_ratio; char m_padding[4]; }; struct btGearConstraintDoubleData { btTypedConstraintDoubleData m_typeConstraintData; btVector3DoubleData m_axisInA; btVector3DoubleData m_axisInB; double m_ratio; }; SIMD_FORCE_INLINE int btGearConstraint::calculateSerializeBufferSize() const { return sizeof(btGearConstraintData); } ///fills the dataBuffer and returns the struct name (and 0 on failure) SIMD_FORCE_INLINE const char* btGearConstraint::serialize(void* dataBuffer, btSerializer* serializer) const { btGearConstraintData* gear = (btGearConstraintData*)dataBuffer; btTypedConstraint::serialize(&gear->m_typeConstraintData, serializer); m_axisInA.serialize(gear->m_axisInA); m_axisInB.serialize(gear->m_axisInB); gear->m_ratio = m_ratio; // Fill padding with zeros to appease msan. #ifndef BT_USE_DOUBLE_PRECISION gear->m_padding[0] = 0; gear->m_padding[1] = 0; gear->m_padding[2] = 0; gear->m_padding[3] = 0; #endif return btGearConstraintDataName; } #endif //BT_GEAR_CONSTRAINT_H ================================================ FILE: libraries/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /// 2009 March: btGeneric6DofConstraint refactored by Roman Ponomarev /// Added support for generic constraint solver through getInfo1/getInfo2 methods /* 2007-09-09 btGeneric6DofConstraint Refactored by Francisco Le?n email: projectileman@yahoo.com http://gimpact.sf.net */ #ifndef BT_GENERIC_6DOF_CONSTRAINT_H #define BT_GENERIC_6DOF_CONSTRAINT_H #include "LinearMath/btVector3.h" #include "btJacobianEntry.h" #include "btTypedConstraint.h" class btRigidBody; #ifdef BT_USE_DOUBLE_PRECISION #define btGeneric6DofConstraintData2 btGeneric6DofConstraintDoubleData2 #define btGeneric6DofConstraintDataName "btGeneric6DofConstraintDoubleData2" #else #define btGeneric6DofConstraintData2 btGeneric6DofConstraintData #define btGeneric6DofConstraintDataName "btGeneric6DofConstraintData" #endif //BT_USE_DOUBLE_PRECISION //! Rotation Limit structure for generic joints class btRotationalLimitMotor { public: //! limit_parameters //!@{ btScalar m_loLimit; //!< joint limit btScalar m_hiLimit; //!< joint limit btScalar m_targetVelocity; //!< target motor velocity btScalar m_maxMotorForce; //!< max force on motor btScalar m_maxLimitForce; //!< max force on limit btScalar m_damping; //!< Damping. btScalar m_limitSoftness; //! Relaxation factor btScalar m_normalCFM; //!< Constraint force mixing factor btScalar m_stopERP; //!< Error tolerance factor when joint is at limit btScalar m_stopCFM; //!< Constraint force mixing factor when joint is at limit btScalar m_bounce; //!< restitution factor bool m_enableMotor; //!@} //! temp_variables //!@{ btScalar m_currentLimitError; //! How much is violated this limit btScalar m_currentPosition; //! current value of angle int m_currentLimit; //!< 0=free, 1=at lo limit, 2=at hi limit btScalar m_accumulatedImpulse; //!@} btRotationalLimitMotor() { m_accumulatedImpulse = 0.f; m_targetVelocity = 0; m_maxMotorForce = 6.0f; m_maxLimitForce = 300.0f; m_loLimit = 1.0f; m_hiLimit = -1.0f; m_normalCFM = 0.f; m_stopERP = 0.2f; m_stopCFM = 0.f; m_bounce = 0.0f; m_damping = 1.0f; m_limitSoftness = 0.5f; m_currentLimit = 0; m_currentLimitError = 0; m_enableMotor = false; } btRotationalLimitMotor(const btRotationalLimitMotor& limot) { m_targetVelocity = limot.m_targetVelocity; m_maxMotorForce = limot.m_maxMotorForce; m_limitSoftness = limot.m_limitSoftness; m_loLimit = limot.m_loLimit; m_hiLimit = limot.m_hiLimit; m_normalCFM = limot.m_normalCFM; m_stopERP = limot.m_stopERP; m_stopCFM = limot.m_stopCFM; m_bounce = limot.m_bounce; m_currentLimit = limot.m_currentLimit; m_currentLimitError = limot.m_currentLimitError; m_enableMotor = limot.m_enableMotor; } //! Is limited bool isLimited() const { if (m_loLimit > m_hiLimit) return false; return true; } //! Need apply correction bool needApplyTorques() const { if (m_currentLimit == 0 && m_enableMotor == false) return false; return true; } //! calculates error /*! calculates m_currentLimit and m_currentLimitError. */ int testLimitValue(btScalar test_value); //! apply the correction impulses for two bodies btScalar solveAngularLimits(btScalar timeStep, btVector3& axis, btScalar jacDiagABInv, btRigidBody* body0, btRigidBody* body1); }; class btTranslationalLimitMotor { public: btVector3 m_lowerLimit; //!< the constraint lower limits btVector3 m_upperLimit; //!< the constraint upper limits btVector3 m_accumulatedImpulse; //! Linear_Limit_parameters //!@{ btScalar m_limitSoftness; //!< Softness for linear limit btScalar m_damping; //!< Damping for linear limit btScalar m_restitution; //! Bounce parameter for linear limit btVector3 m_normalCFM; //!< Constraint force mixing factor btVector3 m_stopERP; //!< Error tolerance factor when joint is at limit btVector3 m_stopCFM; //!< Constraint force mixing factor when joint is at limit //!@} bool m_enableMotor[3]; btVector3 m_targetVelocity; //!< target motor velocity btVector3 m_maxMotorForce; //!< max force on motor btVector3 m_currentLimitError; //! How much is violated this limit btVector3 m_currentLinearDiff; //! Current relative offset of constraint frames int m_currentLimit[3]; //!< 0=free, 1=at lower limit, 2=at upper limit btTranslationalLimitMotor() { m_lowerLimit.setValue(0.f, 0.f, 0.f); m_upperLimit.setValue(0.f, 0.f, 0.f); m_accumulatedImpulse.setValue(0.f, 0.f, 0.f); m_normalCFM.setValue(0.f, 0.f, 0.f); m_stopERP.setValue(0.2f, 0.2f, 0.2f); m_stopCFM.setValue(0.f, 0.f, 0.f); m_limitSoftness = 0.7f; m_damping = btScalar(1.0f); m_restitution = btScalar(0.5f); for (int i = 0; i < 3; i++) { m_enableMotor[i] = false; m_targetVelocity[i] = btScalar(0.f); m_maxMotorForce[i] = btScalar(0.f); } } btTranslationalLimitMotor(const btTranslationalLimitMotor& other) { m_lowerLimit = other.m_lowerLimit; m_upperLimit = other.m_upperLimit; m_accumulatedImpulse = other.m_accumulatedImpulse; m_limitSoftness = other.m_limitSoftness; m_damping = other.m_damping; m_restitution = other.m_restitution; m_normalCFM = other.m_normalCFM; m_stopERP = other.m_stopERP; m_stopCFM = other.m_stopCFM; for (int i = 0; i < 3; i++) { m_enableMotor[i] = other.m_enableMotor[i]; m_targetVelocity[i] = other.m_targetVelocity[i]; m_maxMotorForce[i] = other.m_maxMotorForce[i]; } } //! Test limit /*! - free means upper < lower, - locked means upper == lower - limited means upper > lower - limitIndex: first 3 are linear, next 3 are angular */ inline bool isLimited(int limitIndex) const { return (m_upperLimit[limitIndex] >= m_lowerLimit[limitIndex]); } inline bool needApplyForce(int limitIndex) const { if (m_currentLimit[limitIndex] == 0 && m_enableMotor[limitIndex] == false) return false; return true; } int testLimitValue(int limitIndex, btScalar test_value); btScalar solveLinearAxis( btScalar timeStep, btScalar jacDiagABInv, btRigidBody& body1, const btVector3& pointInA, btRigidBody& body2, const btVector3& pointInB, int limit_index, const btVector3& axis_normal_on_a, const btVector3& anchorPos); }; enum bt6DofFlags { BT_6DOF_FLAGS_CFM_NORM = 1, BT_6DOF_FLAGS_CFM_STOP = 2, BT_6DOF_FLAGS_ERP_STOP = 4 }; #define BT_6DOF_FLAGS_AXIS_SHIFT 3 // bits per axis /// btGeneric6DofConstraint between two rigidbodies each with a pivotpoint that descibes the axis location in local space /*! btGeneric6DofConstraint can leave any of the 6 degree of freedom 'free' or 'locked'. currently this limit supports rotational motors
    • For Linear limits, use btGeneric6DofConstraint.setLinearUpperLimit, btGeneric6DofConstraint.setLinearLowerLimit. You can set the parameters with the btTranslationalLimitMotor structure accsesible through the btGeneric6DofConstraint.getTranslationalLimitMotor method. At this moment translational motors are not supported. May be in the future.
    • For Angular limits, use the btRotationalLimitMotor structure for configuring the limit. This is accessible through btGeneric6DofConstraint.getLimitMotor method, This brings support for limit parameters and motors.
    • Angulars limits have these possible ranges:
      AXIS MIN ANGLE MAX ANGLE
      X -PI PI
      Y -PI/2 PI/2
      Z -PI PI
    */ ATTRIBUTE_ALIGNED16(class) btGeneric6DofConstraint : public btTypedConstraint { protected: //! relative_frames //!@{ btTransform m_frameInA; //!< the constraint space w.r.t body A btTransform m_frameInB; //!< the constraint space w.r.t body B //!@} //! Jacobians //!@{ btJacobianEntry m_jacLinear[3]; //!< 3 orthogonal linear constraints btJacobianEntry m_jacAng[3]; //!< 3 orthogonal angular constraints //!@} //! Linear_Limit_parameters //!@{ btTranslationalLimitMotor m_linearLimits; //!@} //! hinge_parameters //!@{ btRotationalLimitMotor m_angularLimits[3]; //!@} protected: //! temporal variables //!@{ btScalar m_timeStep; btTransform m_calculatedTransformA; btTransform m_calculatedTransformB; btVector3 m_calculatedAxisAngleDiff; btVector3 m_calculatedAxis[3]; btVector3 m_calculatedLinearDiff; btScalar m_factA; btScalar m_factB; bool m_hasStaticBody; btVector3 m_AnchorPos; // point betwen pivots of bodies A and B to solve linear axes bool m_useLinearReferenceFrameA; bool m_useOffsetForConstraintFrame; int m_flags; //!@} btGeneric6DofConstraint& operator=(btGeneric6DofConstraint& other) { btAssert(0); (void)other; return *this; } int setAngularLimits(btConstraintInfo2 * info, int row_offset, const btTransform& transA, const btTransform& transB, const btVector3& linVelA, const btVector3& linVelB, const btVector3& angVelA, const btVector3& angVelB); int setLinearLimits(btConstraintInfo2 * info, int row, const btTransform& transA, const btTransform& transB, const btVector3& linVelA, const btVector3& linVelB, const btVector3& angVelA, const btVector3& angVelB); void buildLinearJacobian( btJacobianEntry & jacLinear, const btVector3& normalWorld, const btVector3& pivotAInW, const btVector3& pivotBInW); void buildAngularJacobian(btJacobianEntry & jacAngular, const btVector3& jointAxisW); // tests linear limits void calculateLinearInfo(); //! calcs the euler angles between the two bodies. void calculateAngleInfo(); public: BT_DECLARE_ALIGNED_ALLOCATOR(); ///for backwards compatibility during the transition to 'getInfo/getInfo2' bool m_useSolveConstraintObsolete; btGeneric6DofConstraint(btRigidBody & rbA, btRigidBody & rbB, const btTransform& frameInA, const btTransform& frameInB, bool useLinearReferenceFrameA); btGeneric6DofConstraint(btRigidBody & rbB, const btTransform& frameInB, bool useLinearReferenceFrameB); //! Calcs global transform of the offsets /*! Calcs the global transform for the joint offset for body A an B, and also calcs the agle differences between the bodies. \sa btGeneric6DofConstraint.getCalculatedTransformA , btGeneric6DofConstraint.getCalculatedTransformB, btGeneric6DofConstraint.calculateAngleInfo */ void calculateTransforms(const btTransform& transA, const btTransform& transB); void calculateTransforms(); //! Gets the global transform of the offset for body A /*! \sa btGeneric6DofConstraint.getFrameOffsetA, btGeneric6DofConstraint.getFrameOffsetB, btGeneric6DofConstraint.calculateAngleInfo. */ const btTransform& getCalculatedTransformA() const { return m_calculatedTransformA; } //! Gets the global transform of the offset for body B /*! \sa btGeneric6DofConstraint.getFrameOffsetA, btGeneric6DofConstraint.getFrameOffsetB, btGeneric6DofConstraint.calculateAngleInfo. */ const btTransform& getCalculatedTransformB() const { return m_calculatedTransformB; } const btTransform& getFrameOffsetA() const { return m_frameInA; } const btTransform& getFrameOffsetB() const { return m_frameInB; } btTransform& getFrameOffsetA() { return m_frameInA; } btTransform& getFrameOffsetB() { return m_frameInB; } //! performs Jacobian calculation, and also calculates angle differences and axis virtual void buildJacobian(); virtual void getInfo1(btConstraintInfo1 * info); void getInfo1NonVirtual(btConstraintInfo1 * info); virtual void getInfo2(btConstraintInfo2 * info); void getInfo2NonVirtual(btConstraintInfo2 * info, const btTransform& transA, const btTransform& transB, const btVector3& linVelA, const btVector3& linVelB, const btVector3& angVelA, const btVector3& angVelB); void updateRHS(btScalar timeStep); //! Get the rotation axis in global coordinates /*! \pre btGeneric6DofConstraint.buildJacobian must be called previously. */ btVector3 getAxis(int axis_index) const; //! Get the relative Euler angle /*! \pre btGeneric6DofConstraint::calculateTransforms() must be called previously. */ btScalar getAngle(int axis_index) const; //! Get the relative position of the constraint pivot /*! \pre btGeneric6DofConstraint::calculateTransforms() must be called previously. */ btScalar getRelativePivotPosition(int axis_index) const; void setFrames(const btTransform& frameA, const btTransform& frameB); //! Test angular limit. /*! Calculates angular correction and returns true if limit needs to be corrected. \pre btGeneric6DofConstraint::calculateTransforms() must be called previously. */ bool testAngularLimitMotor(int axis_index); void setLinearLowerLimit(const btVector3& linearLower) { m_linearLimits.m_lowerLimit = linearLower; } void getLinearLowerLimit(btVector3 & linearLower) const { linearLower = m_linearLimits.m_lowerLimit; } void setLinearUpperLimit(const btVector3& linearUpper) { m_linearLimits.m_upperLimit = linearUpper; } void getLinearUpperLimit(btVector3 & linearUpper) const { linearUpper = m_linearLimits.m_upperLimit; } void setAngularLowerLimit(const btVector3& angularLower) { for (int i = 0; i < 3; i++) m_angularLimits[i].m_loLimit = btNormalizeAngle(angularLower[i]); } void getAngularLowerLimit(btVector3 & angularLower) const { for (int i = 0; i < 3; i++) angularLower[i] = m_angularLimits[i].m_loLimit; } void setAngularUpperLimit(const btVector3& angularUpper) { for (int i = 0; i < 3; i++) m_angularLimits[i].m_hiLimit = btNormalizeAngle(angularUpper[i]); } void getAngularUpperLimit(btVector3 & angularUpper) const { for (int i = 0; i < 3; i++) angularUpper[i] = m_angularLimits[i].m_hiLimit; } //! Retrieves the angular limit informacion btRotationalLimitMotor* getRotationalLimitMotor(int index) { return &m_angularLimits[index]; } //! Retrieves the limit informacion btTranslationalLimitMotor* getTranslationalLimitMotor() { return &m_linearLimits; } //first 3 are linear, next 3 are angular void setLimit(int axis, btScalar lo, btScalar hi) { if (axis < 3) { m_linearLimits.m_lowerLimit[axis] = lo; m_linearLimits.m_upperLimit[axis] = hi; } else { lo = btNormalizeAngle(lo); hi = btNormalizeAngle(hi); m_angularLimits[axis - 3].m_loLimit = lo; m_angularLimits[axis - 3].m_hiLimit = hi; } } //! Test limit /*! - free means upper < lower, - locked means upper == lower - limited means upper > lower - limitIndex: first 3 are linear, next 3 are angular */ bool isLimited(int limitIndex) const { if (limitIndex < 3) { return m_linearLimits.isLimited(limitIndex); } return m_angularLimits[limitIndex - 3].isLimited(); } virtual void calcAnchorPos(void); // overridable int get_limit_motor_info2(btRotationalLimitMotor * limot, const btTransform& transA, const btTransform& transB, const btVector3& linVelA, const btVector3& linVelB, const btVector3& angVelA, const btVector3& angVelB, btConstraintInfo2* info, int row, btVector3& ax1, int rotational, int rotAllowed = false); // access for UseFrameOffset bool getUseFrameOffset() const { return m_useOffsetForConstraintFrame; } void setUseFrameOffset(bool frameOffsetOnOff) { m_useOffsetForConstraintFrame = frameOffsetOnOff; } bool getUseLinearReferenceFrameA() const { return m_useLinearReferenceFrameA; } void setUseLinearReferenceFrameA(bool linearReferenceFrameA) { m_useLinearReferenceFrameA = linearReferenceFrameA; } ///override the default global value of a parameter (such as ERP or CFM), optionally provide the axis (0..5). ///If no axis is provided, it uses the default axis for this constraint. virtual void setParam(int num, btScalar value, int axis = -1); ///return the local value of parameter virtual btScalar getParam(int num, int axis = -1) const; void setAxis(const btVector3& axis1, const btVector3& axis2); virtual int getFlags() const { return m_flags; } virtual int calculateSerializeBufferSize() const; ///fills the dataBuffer and returns the struct name (and 0 on failure) virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; }; struct btGeneric6DofConstraintData { btTypedConstraintData m_typeConstraintData; btTransformFloatData m_rbAFrame; // constraint axii. Assumes z is hinge axis. btTransformFloatData m_rbBFrame; btVector3FloatData m_linearUpperLimit; btVector3FloatData m_linearLowerLimit; btVector3FloatData m_angularUpperLimit; btVector3FloatData m_angularLowerLimit; int m_useLinearReferenceFrameA; int m_useOffsetForConstraintFrame; }; struct btGeneric6DofConstraintDoubleData2 { btTypedConstraintDoubleData m_typeConstraintData; btTransformDoubleData m_rbAFrame; // constraint axii. Assumes z is hinge axis. btTransformDoubleData m_rbBFrame; btVector3DoubleData m_linearUpperLimit; btVector3DoubleData m_linearLowerLimit; btVector3DoubleData m_angularUpperLimit; btVector3DoubleData m_angularLowerLimit; int m_useLinearReferenceFrameA; int m_useOffsetForConstraintFrame; }; SIMD_FORCE_INLINE int btGeneric6DofConstraint::calculateSerializeBufferSize() const { return sizeof(btGeneric6DofConstraintData2); } ///fills the dataBuffer and returns the struct name (and 0 on failure) SIMD_FORCE_INLINE const char* btGeneric6DofConstraint::serialize(void* dataBuffer, btSerializer* serializer) const { btGeneric6DofConstraintData2* dof = (btGeneric6DofConstraintData2*)dataBuffer; btTypedConstraint::serialize(&dof->m_typeConstraintData, serializer); m_frameInA.serialize(dof->m_rbAFrame); m_frameInB.serialize(dof->m_rbBFrame); int i; for (i = 0; i < 3; i++) { dof->m_angularLowerLimit.m_floats[i] = m_angularLimits[i].m_loLimit; dof->m_angularUpperLimit.m_floats[i] = m_angularLimits[i].m_hiLimit; dof->m_linearLowerLimit.m_floats[i] = m_linearLimits.m_lowerLimit[i]; dof->m_linearUpperLimit.m_floats[i] = m_linearLimits.m_upperLimit[i]; } dof->m_useLinearReferenceFrameA = m_useLinearReferenceFrameA ? 1 : 0; dof->m_useOffsetForConstraintFrame = m_useOffsetForConstraintFrame ? 1 : 0; return btGeneric6DofConstraintDataName; } #endif //BT_GENERIC_6DOF_CONSTRAINT_H ================================================ FILE: libraries/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofSpring2Constraint.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /* 2014 May: btGeneric6DofSpring2Constraint is created from the original (2.82.2712) btGeneric6DofConstraint by Gabor Puhr and Tamas Umenhoffer Pros: - Much more accurate and stable in a lot of situation. (Especially when a sleeping chain of RBs connected with 6dof2 is pulled) - Stable and accurate spring with minimal energy loss that works with all of the solvers. (latter is not true for the original 6dof spring) - Servo motor functionality - Much more accurate bouncing. 0 really means zero bouncing (not true for the original 6odf) and there is only a minimal energy loss when the value is 1 (because of the solvers' precision) - Rotation order for the Euler system can be set. (One axis' freedom is still limited to pi/2) Cons: - It is slower than the original 6dof. There is no exact ratio, but half speed is a good estimation. - At bouncing the correct velocity is calculated, but not the correct position. (it is because of the solver can correct position or velocity, but not both.) */ /// 2009 March: btGeneric6DofConstraint refactored by Roman Ponomarev /// Added support for generic constraint solver through getInfo1/getInfo2 methods /* 2007-09-09 btGeneric6DofConstraint Refactored by Francisco Le?n email: projectileman@yahoo.com http://gimpact.sf.net */ #ifndef BT_GENERIC_6DOF_CONSTRAINT2_H #define BT_GENERIC_6DOF_CONSTRAINT2_H #include "LinearMath/btVector3.h" #include "btJacobianEntry.h" #include "btTypedConstraint.h" class btRigidBody; #ifdef BT_USE_DOUBLE_PRECISION #define btGeneric6DofSpring2ConstraintData2 btGeneric6DofSpring2ConstraintDoubleData2 #define btGeneric6DofSpring2ConstraintDataName "btGeneric6DofSpring2ConstraintDoubleData2" #else #define btGeneric6DofSpring2ConstraintData2 btGeneric6DofSpring2ConstraintData #define btGeneric6DofSpring2ConstraintDataName "btGeneric6DofSpring2ConstraintData" #endif //BT_USE_DOUBLE_PRECISION enum RotateOrder { RO_XYZ = 0, RO_XZY, RO_YXZ, RO_YZX, RO_ZXY, RO_ZYX }; class btRotationalLimitMotor2 { public: // upper < lower means free // upper == lower means locked // upper > lower means limited btScalar m_loLimit; btScalar m_hiLimit; btScalar m_bounce; btScalar m_stopERP; btScalar m_stopCFM; btScalar m_motorERP; btScalar m_motorCFM; bool m_enableMotor; btScalar m_targetVelocity; btScalar m_maxMotorForce; bool m_servoMotor; btScalar m_servoTarget; bool m_enableSpring; btScalar m_springStiffness; bool m_springStiffnessLimited; btScalar m_springDamping; bool m_springDampingLimited; btScalar m_equilibriumPoint; btScalar m_currentLimitError; btScalar m_currentLimitErrorHi; btScalar m_currentPosition; int m_currentLimit; btRotationalLimitMotor2() { m_loLimit = 1.0f; m_hiLimit = -1.0f; m_bounce = 0.0f; m_stopERP = 0.2f; m_stopCFM = 0.f; m_motorERP = 0.9f; m_motorCFM = 0.f; m_enableMotor = false; m_targetVelocity = 0; m_maxMotorForce = 6.0f; m_servoMotor = false; m_servoTarget = 0; m_enableSpring = false; m_springStiffness = 0; m_springStiffnessLimited = false; m_springDamping = 0; m_springDampingLimited = false; m_equilibriumPoint = 0; m_currentLimitError = 0; m_currentLimitErrorHi = 0; m_currentPosition = 0; m_currentLimit = 0; } btRotationalLimitMotor2(const btRotationalLimitMotor2& limot) { m_loLimit = limot.m_loLimit; m_hiLimit = limot.m_hiLimit; m_bounce = limot.m_bounce; m_stopERP = limot.m_stopERP; m_stopCFM = limot.m_stopCFM; m_motorERP = limot.m_motorERP; m_motorCFM = limot.m_motorCFM; m_enableMotor = limot.m_enableMotor; m_targetVelocity = limot.m_targetVelocity; m_maxMotorForce = limot.m_maxMotorForce; m_servoMotor = limot.m_servoMotor; m_servoTarget = limot.m_servoTarget; m_enableSpring = limot.m_enableSpring; m_springStiffness = limot.m_springStiffness; m_springStiffnessLimited = limot.m_springStiffnessLimited; m_springDamping = limot.m_springDamping; m_springDampingLimited = limot.m_springDampingLimited; m_equilibriumPoint = limot.m_equilibriumPoint; m_currentLimitError = limot.m_currentLimitError; m_currentLimitErrorHi = limot.m_currentLimitErrorHi; m_currentPosition = limot.m_currentPosition; m_currentLimit = limot.m_currentLimit; } bool isLimited() { if (m_loLimit > m_hiLimit) return false; return true; } void testLimitValue(btScalar test_value); }; class btTranslationalLimitMotor2 { public: // upper < lower means free // upper == lower means locked // upper > lower means limited btVector3 m_lowerLimit; btVector3 m_upperLimit; btVector3 m_bounce; btVector3 m_stopERP; btVector3 m_stopCFM; btVector3 m_motorERP; btVector3 m_motorCFM; bool m_enableMotor[3]; bool m_servoMotor[3]; bool m_enableSpring[3]; btVector3 m_servoTarget; btVector3 m_springStiffness; bool m_springStiffnessLimited[3]; btVector3 m_springDamping; bool m_springDampingLimited[3]; btVector3 m_equilibriumPoint; btVector3 m_targetVelocity; btVector3 m_maxMotorForce; btVector3 m_currentLimitError; btVector3 m_currentLimitErrorHi; btVector3 m_currentLinearDiff; int m_currentLimit[3]; btTranslationalLimitMotor2() { m_lowerLimit.setValue(0.f, 0.f, 0.f); m_upperLimit.setValue(0.f, 0.f, 0.f); m_bounce.setValue(0.f, 0.f, 0.f); m_stopERP.setValue(0.2f, 0.2f, 0.2f); m_stopCFM.setValue(0.f, 0.f, 0.f); m_motorERP.setValue(0.9f, 0.9f, 0.9f); m_motorCFM.setValue(0.f, 0.f, 0.f); m_currentLimitError.setValue(0.f, 0.f, 0.f); m_currentLimitErrorHi.setValue(0.f, 0.f, 0.f); m_currentLinearDiff.setValue(0.f, 0.f, 0.f); for (int i = 0; i < 3; i++) { m_enableMotor[i] = false; m_servoMotor[i] = false; m_enableSpring[i] = false; m_servoTarget[i] = btScalar(0.f); m_springStiffness[i] = btScalar(0.f); m_springStiffnessLimited[i] = false; m_springDamping[i] = btScalar(0.f); m_springDampingLimited[i] = false; m_equilibriumPoint[i] = btScalar(0.f); m_targetVelocity[i] = btScalar(0.f); m_maxMotorForce[i] = btScalar(0.f); m_currentLimit[i] = 0; } } btTranslationalLimitMotor2(const btTranslationalLimitMotor2& other) { m_lowerLimit = other.m_lowerLimit; m_upperLimit = other.m_upperLimit; m_bounce = other.m_bounce; m_stopERP = other.m_stopERP; m_stopCFM = other.m_stopCFM; m_motorERP = other.m_motorERP; m_motorCFM = other.m_motorCFM; m_currentLimitError = other.m_currentLimitError; m_currentLimitErrorHi = other.m_currentLimitErrorHi; m_currentLinearDiff = other.m_currentLinearDiff; for (int i = 0; i < 3; i++) { m_enableMotor[i] = other.m_enableMotor[i]; m_servoMotor[i] = other.m_servoMotor[i]; m_enableSpring[i] = other.m_enableSpring[i]; m_servoTarget[i] = other.m_servoTarget[i]; m_springStiffness[i] = other.m_springStiffness[i]; m_springStiffnessLimited[i] = other.m_springStiffnessLimited[i]; m_springDamping[i] = other.m_springDamping[i]; m_springDampingLimited[i] = other.m_springDampingLimited[i]; m_equilibriumPoint[i] = other.m_equilibriumPoint[i]; m_targetVelocity[i] = other.m_targetVelocity[i]; m_maxMotorForce[i] = other.m_maxMotorForce[i]; m_currentLimit[i] = other.m_currentLimit[i]; } } inline bool isLimited(int limitIndex) { return (m_upperLimit[limitIndex] >= m_lowerLimit[limitIndex]); } void testLimitValue(int limitIndex, btScalar test_value); }; enum bt6DofFlags2 { BT_6DOF_FLAGS_CFM_STOP2 = 1, BT_6DOF_FLAGS_ERP_STOP2 = 2, BT_6DOF_FLAGS_CFM_MOTO2 = 4, BT_6DOF_FLAGS_ERP_MOTO2 = 8, BT_6DOF_FLAGS_USE_INFINITE_ERROR = (1<<16) }; #define BT_6DOF_FLAGS_AXIS_SHIFT2 4 // bits per axis ATTRIBUTE_ALIGNED16(class) btGeneric6DofSpring2Constraint : public btTypedConstraint { protected: btTransform m_frameInA; btTransform m_frameInB; btJacobianEntry m_jacLinear[3]; btJacobianEntry m_jacAng[3]; btTranslationalLimitMotor2 m_linearLimits; btRotationalLimitMotor2 m_angularLimits[3]; RotateOrder m_rotateOrder; protected: btTransform m_calculatedTransformA; btTransform m_calculatedTransformB; btVector3 m_calculatedAxisAngleDiff; btVector3 m_calculatedAxis[3]; btVector3 m_calculatedLinearDiff; btScalar m_factA; btScalar m_factB; bool m_hasStaticBody; int m_flags; btGeneric6DofSpring2Constraint& operator=(const btGeneric6DofSpring2Constraint&) { btAssert(0); return *this; } int setAngularLimits(btConstraintInfo2 * info, int row_offset, const btTransform& transA, const btTransform& transB, const btVector3& linVelA, const btVector3& linVelB, const btVector3& angVelA, const btVector3& angVelB); int setLinearLimits(btConstraintInfo2 * info, int row, const btTransform& transA, const btTransform& transB, const btVector3& linVelA, const btVector3& linVelB, const btVector3& angVelA, const btVector3& angVelB); void calculateLinearInfo(); void calculateAngleInfo(); void testAngularLimitMotor(int axis_index); void calculateJacobi(btRotationalLimitMotor2 * limot, const btTransform& transA, const btTransform& transB, btConstraintInfo2* info, int srow, btVector3& ax1, int rotational, int rotAllowed); int get_limit_motor_info2(btRotationalLimitMotor2 * limot, const btTransform& transA, const btTransform& transB, const btVector3& linVelA, const btVector3& linVelB, const btVector3& angVelA, const btVector3& angVelB, btConstraintInfo2* info, int row, btVector3& ax1, int rotational, int rotAllowed = false); public: BT_DECLARE_ALIGNED_ALLOCATOR(); btGeneric6DofSpring2Constraint(btRigidBody & rbA, btRigidBody & rbB, const btTransform& frameInA, const btTransform& frameInB, RotateOrder rotOrder = RO_XYZ); btGeneric6DofSpring2Constraint(btRigidBody & rbB, const btTransform& frameInB, RotateOrder rotOrder = RO_XYZ); virtual void buildJacobian() {} virtual void getInfo1(btConstraintInfo1 * info); virtual void getInfo2(btConstraintInfo2 * info); virtual int calculateSerializeBufferSize() const; virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; btRotationalLimitMotor2* getRotationalLimitMotor(int index) { return &m_angularLimits[index]; } btTranslationalLimitMotor2* getTranslationalLimitMotor() { return &m_linearLimits; } // Calculates the global transform for the joint offset for body A an B, and also calculates the angle differences between the bodies. void calculateTransforms(const btTransform& transA, const btTransform& transB); void calculateTransforms(); // Gets the global transform of the offset for body A const btTransform& getCalculatedTransformA() const { return m_calculatedTransformA; } // Gets the global transform of the offset for body B const btTransform& getCalculatedTransformB() const { return m_calculatedTransformB; } const btTransform& getFrameOffsetA() const { return m_frameInA; } const btTransform& getFrameOffsetB() const { return m_frameInB; } btTransform& getFrameOffsetA() { return m_frameInA; } btTransform& getFrameOffsetB() { return m_frameInB; } // Get the rotation axis in global coordinates ( btGeneric6DofSpring2Constraint::calculateTransforms() must be called previously ) btVector3 getAxis(int axis_index) const { return m_calculatedAxis[axis_index]; } // Get the relative Euler angle ( btGeneric6DofSpring2Constraint::calculateTransforms() must be called previously ) btScalar getAngle(int axis_index) const { return m_calculatedAxisAngleDiff[axis_index]; } // Get the relative position of the constraint pivot ( btGeneric6DofSpring2Constraint::calculateTransforms() must be called previously ) btScalar getRelativePivotPosition(int axis_index) const { return m_calculatedLinearDiff[axis_index]; } void setFrames(const btTransform& frameA, const btTransform& frameB); void setLinearLowerLimit(const btVector3& linearLower) { m_linearLimits.m_lowerLimit = linearLower; } void getLinearLowerLimit(btVector3 & linearLower) { linearLower = m_linearLimits.m_lowerLimit; } void setLinearUpperLimit(const btVector3& linearUpper) { m_linearLimits.m_upperLimit = linearUpper; } void getLinearUpperLimit(btVector3 & linearUpper) { linearUpper = m_linearLimits.m_upperLimit; } void setAngularLowerLimit(const btVector3& angularLower) { for (int i = 0; i < 3; i++) m_angularLimits[i].m_loLimit = btNormalizeAngle(angularLower[i]); } void setAngularLowerLimitReversed(const btVector3& angularLower) { for (int i = 0; i < 3; i++) m_angularLimits[i].m_hiLimit = btNormalizeAngle(-angularLower[i]); } void getAngularLowerLimit(btVector3 & angularLower) { for (int i = 0; i < 3; i++) angularLower[i] = m_angularLimits[i].m_loLimit; } void getAngularLowerLimitReversed(btVector3 & angularLower) { for (int i = 0; i < 3; i++) angularLower[i] = -m_angularLimits[i].m_hiLimit; } void setAngularUpperLimit(const btVector3& angularUpper) { for (int i = 0; i < 3; i++) m_angularLimits[i].m_hiLimit = btNormalizeAngle(angularUpper[i]); } void setAngularUpperLimitReversed(const btVector3& angularUpper) { for (int i = 0; i < 3; i++) m_angularLimits[i].m_loLimit = btNormalizeAngle(-angularUpper[i]); } void getAngularUpperLimit(btVector3 & angularUpper) { for (int i = 0; i < 3; i++) angularUpper[i] = m_angularLimits[i].m_hiLimit; } void getAngularUpperLimitReversed(btVector3 & angularUpper) { for (int i = 0; i < 3; i++) angularUpper[i] = -m_angularLimits[i].m_loLimit; } //first 3 are linear, next 3 are angular void setLimit(int axis, btScalar lo, btScalar hi) { if (axis < 3) { m_linearLimits.m_lowerLimit[axis] = lo; m_linearLimits.m_upperLimit[axis] = hi; } else { lo = btNormalizeAngle(lo); hi = btNormalizeAngle(hi); m_angularLimits[axis - 3].m_loLimit = lo; m_angularLimits[axis - 3].m_hiLimit = hi; } } void setLimitReversed(int axis, btScalar lo, btScalar hi) { if (axis < 3) { m_linearLimits.m_lowerLimit[axis] = lo; m_linearLimits.m_upperLimit[axis] = hi; } else { lo = btNormalizeAngle(lo); hi = btNormalizeAngle(hi); m_angularLimits[axis - 3].m_hiLimit = -lo; m_angularLimits[axis - 3].m_loLimit = -hi; } } bool isLimited(int limitIndex) { if (limitIndex < 3) { return m_linearLimits.isLimited(limitIndex); } return m_angularLimits[limitIndex - 3].isLimited(); } void setRotationOrder(RotateOrder order) { m_rotateOrder = order; } RotateOrder getRotationOrder() { return m_rotateOrder; } void setAxis(const btVector3& axis1, const btVector3& axis2); void setBounce(int index, btScalar bounce); void enableMotor(int index, bool onOff); void setServo(int index, bool onOff); // set the type of the motor (servo or not) (the motor has to be turned on for servo also) void setTargetVelocity(int index, btScalar velocity); void setServoTarget(int index, btScalar target); void setMaxMotorForce(int index, btScalar force); void enableSpring(int index, bool onOff); void setStiffness(int index, btScalar stiffness, bool limitIfNeeded = true); // if limitIfNeeded is true the system will automatically limit the stiffness in necessary situations where otherwise the spring would move unrealistically too widely void setDamping(int index, btScalar damping, bool limitIfNeeded = true); // if limitIfNeeded is true the system will automatically limit the damping in necessary situations where otherwise the spring would blow up void setEquilibriumPoint(); // set the current constraint position/orientation as an equilibrium point for all DOF void setEquilibriumPoint(int index); // set the current constraint position/orientation as an equilibrium point for given DOF void setEquilibriumPoint(int index, btScalar val); //override the default global value of a parameter (such as ERP or CFM), optionally provide the axis (0..5). //If no axis is provided, it uses the default axis for this constraint. virtual void setParam(int num, btScalar value, int axis = -1); virtual btScalar getParam(int num, int axis = -1) const; static btScalar btGetMatrixElem(const btMatrix3x3& mat, int index); static bool matrixToEulerXYZ(const btMatrix3x3& mat, btVector3& xyz); static bool matrixToEulerXZY(const btMatrix3x3& mat, btVector3& xyz); static bool matrixToEulerYXZ(const btMatrix3x3& mat, btVector3& xyz); static bool matrixToEulerYZX(const btMatrix3x3& mat, btVector3& xyz); static bool matrixToEulerZXY(const btMatrix3x3& mat, btVector3& xyz); static bool matrixToEulerZYX(const btMatrix3x3& mat, btVector3& xyz); }; struct btGeneric6DofSpring2ConstraintData { btTypedConstraintData m_typeConstraintData; btTransformFloatData m_rbAFrame; btTransformFloatData m_rbBFrame; btVector3FloatData m_linearUpperLimit; btVector3FloatData m_linearLowerLimit; btVector3FloatData m_linearBounce; btVector3FloatData m_linearStopERP; btVector3FloatData m_linearStopCFM; btVector3FloatData m_linearMotorERP; btVector3FloatData m_linearMotorCFM; btVector3FloatData m_linearTargetVelocity; btVector3FloatData m_linearMaxMotorForce; btVector3FloatData m_linearServoTarget; btVector3FloatData m_linearSpringStiffness; btVector3FloatData m_linearSpringDamping; btVector3FloatData m_linearEquilibriumPoint; char m_linearEnableMotor[4]; char m_linearServoMotor[4]; char m_linearEnableSpring[4]; char m_linearSpringStiffnessLimited[4]; char m_linearSpringDampingLimited[4]; char m_padding1[4]; btVector3FloatData m_angularUpperLimit; btVector3FloatData m_angularLowerLimit; btVector3FloatData m_angularBounce; btVector3FloatData m_angularStopERP; btVector3FloatData m_angularStopCFM; btVector3FloatData m_angularMotorERP; btVector3FloatData m_angularMotorCFM; btVector3FloatData m_angularTargetVelocity; btVector3FloatData m_angularMaxMotorForce; btVector3FloatData m_angularServoTarget; btVector3FloatData m_angularSpringStiffness; btVector3FloatData m_angularSpringDamping; btVector3FloatData m_angularEquilibriumPoint; char m_angularEnableMotor[4]; char m_angularServoMotor[4]; char m_angularEnableSpring[4]; char m_angularSpringStiffnessLimited[4]; char m_angularSpringDampingLimited[4]; int m_rotateOrder; }; struct btGeneric6DofSpring2ConstraintDoubleData2 { btTypedConstraintDoubleData m_typeConstraintData; btTransformDoubleData m_rbAFrame; btTransformDoubleData m_rbBFrame; btVector3DoubleData m_linearUpperLimit; btVector3DoubleData m_linearLowerLimit; btVector3DoubleData m_linearBounce; btVector3DoubleData m_linearStopERP; btVector3DoubleData m_linearStopCFM; btVector3DoubleData m_linearMotorERP; btVector3DoubleData m_linearMotorCFM; btVector3DoubleData m_linearTargetVelocity; btVector3DoubleData m_linearMaxMotorForce; btVector3DoubleData m_linearServoTarget; btVector3DoubleData m_linearSpringStiffness; btVector3DoubleData m_linearSpringDamping; btVector3DoubleData m_linearEquilibriumPoint; char m_linearEnableMotor[4]; char m_linearServoMotor[4]; char m_linearEnableSpring[4]; char m_linearSpringStiffnessLimited[4]; char m_linearSpringDampingLimited[4]; char m_padding1[4]; btVector3DoubleData m_angularUpperLimit; btVector3DoubleData m_angularLowerLimit; btVector3DoubleData m_angularBounce; btVector3DoubleData m_angularStopERP; btVector3DoubleData m_angularStopCFM; btVector3DoubleData m_angularMotorERP; btVector3DoubleData m_angularMotorCFM; btVector3DoubleData m_angularTargetVelocity; btVector3DoubleData m_angularMaxMotorForce; btVector3DoubleData m_angularServoTarget; btVector3DoubleData m_angularSpringStiffness; btVector3DoubleData m_angularSpringDamping; btVector3DoubleData m_angularEquilibriumPoint; char m_angularEnableMotor[4]; char m_angularServoMotor[4]; char m_angularEnableSpring[4]; char m_angularSpringStiffnessLimited[4]; char m_angularSpringDampingLimited[4]; int m_rotateOrder; }; SIMD_FORCE_INLINE int btGeneric6DofSpring2Constraint::calculateSerializeBufferSize() const { return sizeof(btGeneric6DofSpring2ConstraintData2); } SIMD_FORCE_INLINE const char* btGeneric6DofSpring2Constraint::serialize(void* dataBuffer, btSerializer* serializer) const { btGeneric6DofSpring2ConstraintData2* dof = (btGeneric6DofSpring2ConstraintData2*)dataBuffer; btTypedConstraint::serialize(&dof->m_typeConstraintData, serializer); m_frameInA.serialize(dof->m_rbAFrame); m_frameInB.serialize(dof->m_rbBFrame); int i; for (i = 0; i < 3; i++) { dof->m_angularLowerLimit.m_floats[i] = m_angularLimits[i].m_loLimit; dof->m_angularUpperLimit.m_floats[i] = m_angularLimits[i].m_hiLimit; dof->m_angularBounce.m_floats[i] = m_angularLimits[i].m_bounce; dof->m_angularStopERP.m_floats[i] = m_angularLimits[i].m_stopERP; dof->m_angularStopCFM.m_floats[i] = m_angularLimits[i].m_stopCFM; dof->m_angularMotorERP.m_floats[i] = m_angularLimits[i].m_motorERP; dof->m_angularMotorCFM.m_floats[i] = m_angularLimits[i].m_motorCFM; dof->m_angularTargetVelocity.m_floats[i] = m_angularLimits[i].m_targetVelocity; dof->m_angularMaxMotorForce.m_floats[i] = m_angularLimits[i].m_maxMotorForce; dof->m_angularServoTarget.m_floats[i] = m_angularLimits[i].m_servoTarget; dof->m_angularSpringStiffness.m_floats[i] = m_angularLimits[i].m_springStiffness; dof->m_angularSpringDamping.m_floats[i] = m_angularLimits[i].m_springDamping; dof->m_angularEquilibriumPoint.m_floats[i] = m_angularLimits[i].m_equilibriumPoint; } dof->m_angularLowerLimit.m_floats[3] = 0; dof->m_angularUpperLimit.m_floats[3] = 0; dof->m_angularBounce.m_floats[3] = 0; dof->m_angularStopERP.m_floats[3] = 0; dof->m_angularStopCFM.m_floats[3] = 0; dof->m_angularMotorERP.m_floats[3] = 0; dof->m_angularMotorCFM.m_floats[3] = 0; dof->m_angularTargetVelocity.m_floats[3] = 0; dof->m_angularMaxMotorForce.m_floats[3] = 0; dof->m_angularServoTarget.m_floats[3] = 0; dof->m_angularSpringStiffness.m_floats[3] = 0; dof->m_angularSpringDamping.m_floats[3] = 0; dof->m_angularEquilibriumPoint.m_floats[3] = 0; for (i = 0; i < 4; i++) { dof->m_angularEnableMotor[i] = i < 3 ? (m_angularLimits[i].m_enableMotor ? 1 : 0) : 0; dof->m_angularServoMotor[i] = i < 3 ? (m_angularLimits[i].m_servoMotor ? 1 : 0) : 0; dof->m_angularEnableSpring[i] = i < 3 ? (m_angularLimits[i].m_enableSpring ? 1 : 0) : 0; dof->m_angularSpringStiffnessLimited[i] = i < 3 ? (m_angularLimits[i].m_springStiffnessLimited ? 1 : 0) : 0; dof->m_angularSpringDampingLimited[i] = i < 3 ? (m_angularLimits[i].m_springDampingLimited ? 1 : 0) : 0; } m_linearLimits.m_lowerLimit.serialize(dof->m_linearLowerLimit); m_linearLimits.m_upperLimit.serialize(dof->m_linearUpperLimit); m_linearLimits.m_bounce.serialize(dof->m_linearBounce); m_linearLimits.m_stopERP.serialize(dof->m_linearStopERP); m_linearLimits.m_stopCFM.serialize(dof->m_linearStopCFM); m_linearLimits.m_motorERP.serialize(dof->m_linearMotorERP); m_linearLimits.m_motorCFM.serialize(dof->m_linearMotorCFM); m_linearLimits.m_targetVelocity.serialize(dof->m_linearTargetVelocity); m_linearLimits.m_maxMotorForce.serialize(dof->m_linearMaxMotorForce); m_linearLimits.m_servoTarget.serialize(dof->m_linearServoTarget); m_linearLimits.m_springStiffness.serialize(dof->m_linearSpringStiffness); m_linearLimits.m_springDamping.serialize(dof->m_linearSpringDamping); m_linearLimits.m_equilibriumPoint.serialize(dof->m_linearEquilibriumPoint); for (i = 0; i < 4; i++) { dof->m_linearEnableMotor[i] = i < 3 ? (m_linearLimits.m_enableMotor[i] ? 1 : 0) : 0; dof->m_linearServoMotor[i] = i < 3 ? (m_linearLimits.m_servoMotor[i] ? 1 : 0) : 0; dof->m_linearEnableSpring[i] = i < 3 ? (m_linearLimits.m_enableSpring[i] ? 1 : 0) : 0; dof->m_linearSpringStiffnessLimited[i] = i < 3 ? (m_linearLimits.m_springStiffnessLimited[i] ? 1 : 0) : 0; dof->m_linearSpringDampingLimited[i] = i < 3 ? (m_linearLimits.m_springDampingLimited[i] ? 1 : 0) : 0; } dof->m_rotateOrder = m_rotateOrder; dof->m_padding1[0] = 0; dof->m_padding1[1] = 0; dof->m_padding1[2] = 0; dof->m_padding1[3] = 0; return btGeneric6DofSpring2ConstraintDataName; } #endif //BT_GENERIC_6DOF_CONSTRAINT_H ================================================ FILE: libraries/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofSpringConstraint.h ================================================ /* Bullet Continuous Collision Detection and Physics Library, http://bulletphysics.org Copyright (C) 2006, 2007 Sony Computer Entertainment Inc. This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_GENERIC_6DOF_SPRING_CONSTRAINT_H #define BT_GENERIC_6DOF_SPRING_CONSTRAINT_H #include "LinearMath/btVector3.h" #include "btTypedConstraint.h" #include "btGeneric6DofConstraint.h" #ifdef BT_USE_DOUBLE_PRECISION #define btGeneric6DofSpringConstraintData2 btGeneric6DofSpringConstraintDoubleData2 #define btGeneric6DofSpringConstraintDataName "btGeneric6DofSpringConstraintDoubleData2" #else #define btGeneric6DofSpringConstraintData2 btGeneric6DofSpringConstraintData #define btGeneric6DofSpringConstraintDataName "btGeneric6DofSpringConstraintData" #endif //BT_USE_DOUBLE_PRECISION /// Generic 6 DOF constraint that allows to set spring motors to any translational and rotational DOF /// DOF index used in enableSpring() and setStiffness() means: /// 0 : translation X /// 1 : translation Y /// 2 : translation Z /// 3 : rotation X (3rd Euler rotational around new position of X axis, range [-PI+epsilon, PI-epsilon] ) /// 4 : rotation Y (2nd Euler rotational around new position of Y axis, range [-PI/2+epsilon, PI/2-epsilon] ) /// 5 : rotation Z (1st Euler rotational around Z axis, range [-PI+epsilon, PI-epsilon] ) ATTRIBUTE_ALIGNED16(class) btGeneric6DofSpringConstraint : public btGeneric6DofConstraint { protected: bool m_springEnabled[6]; btScalar m_equilibriumPoint[6]; btScalar m_springStiffness[6]; btScalar m_springDamping[6]; // between 0 and 1 (1 == no damping) void init(); void internalUpdateSprings(btConstraintInfo2 * info); public: BT_DECLARE_ALIGNED_ALLOCATOR(); btGeneric6DofSpringConstraint(btRigidBody & rbA, btRigidBody & rbB, const btTransform& frameInA, const btTransform& frameInB, bool useLinearReferenceFrameA); btGeneric6DofSpringConstraint(btRigidBody & rbB, const btTransform& frameInB, bool useLinearReferenceFrameB); void enableSpring(int index, bool onOff); void setStiffness(int index, btScalar stiffness); void setDamping(int index, btScalar damping); void setEquilibriumPoint(); // set the current constraint position/orientation as an equilibrium point for all DOF void setEquilibriumPoint(int index); // set the current constraint position/orientation as an equilibrium point for given DOF void setEquilibriumPoint(int index, btScalar val); bool isSpringEnabled(int index) const { return m_springEnabled[index]; } btScalar getStiffness(int index) const { return m_springStiffness[index]; } btScalar getDamping(int index) const { return m_springDamping[index]; } btScalar getEquilibriumPoint(int index) const { return m_equilibriumPoint[index]; } virtual void setAxis(const btVector3& axis1, const btVector3& axis2); virtual void getInfo2(btConstraintInfo2 * info); virtual int calculateSerializeBufferSize() const; ///fills the dataBuffer and returns the struct name (and 0 on failure) virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; }; struct btGeneric6DofSpringConstraintData { btGeneric6DofConstraintData m_6dofData; int m_springEnabled[6]; float m_equilibriumPoint[6]; float m_springStiffness[6]; float m_springDamping[6]; }; struct btGeneric6DofSpringConstraintDoubleData2 { btGeneric6DofConstraintDoubleData2 m_6dofData; int m_springEnabled[6]; double m_equilibriumPoint[6]; double m_springStiffness[6]; double m_springDamping[6]; }; SIMD_FORCE_INLINE int btGeneric6DofSpringConstraint::calculateSerializeBufferSize() const { return sizeof(btGeneric6DofSpringConstraintData2); } ///fills the dataBuffer and returns the struct name (and 0 on failure) SIMD_FORCE_INLINE const char* btGeneric6DofSpringConstraint::serialize(void* dataBuffer, btSerializer* serializer) const { btGeneric6DofSpringConstraintData2* dof = (btGeneric6DofSpringConstraintData2*)dataBuffer; btGeneric6DofConstraint::serialize(&dof->m_6dofData, serializer); int i; for (i = 0; i < 6; i++) { dof->m_equilibriumPoint[i] = m_equilibriumPoint[i]; dof->m_springDamping[i] = m_springDamping[i]; dof->m_springEnabled[i] = m_springEnabled[i] ? 1 : 0; dof->m_springStiffness[i] = m_springStiffness[i]; } return btGeneric6DofSpringConstraintDataName; } #endif // BT_GENERIC_6DOF_SPRING_CONSTRAINT_H ================================================ FILE: libraries/bullet/BulletDynamics/ConstraintSolver/btHinge2Constraint.h ================================================ /* Bullet Continuous Collision Detection and Physics Library, http://bulletphysics.org Copyright (C) 2006, 2007 Sony Computer Entertainment Inc. This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_HINGE2_CONSTRAINT_H #define BT_HINGE2_CONSTRAINT_H #include "LinearMath/btVector3.h" #include "btTypedConstraint.h" #include "btGeneric6DofSpring2Constraint.h" // Constraint similar to ODE Hinge2 Joint // has 3 degrees of frredom: // 2 rotational degrees of freedom, similar to Euler rotations around Z (axis 1) and X (axis 2) // 1 translational (along axis Z) with suspension spring ATTRIBUTE_ALIGNED16(class) btHinge2Constraint : public btGeneric6DofSpring2Constraint { protected: btVector3 m_anchor; btVector3 m_axis1; btVector3 m_axis2; public: BT_DECLARE_ALIGNED_ALLOCATOR(); // constructor // anchor, axis1 and axis2 are in world coordinate system // axis1 must be orthogonal to axis2 btHinge2Constraint(btRigidBody & rbA, btRigidBody & rbB, btVector3 & anchor, btVector3 & axis1, btVector3 & axis2); // access const btVector3& getAnchor() { return m_calculatedTransformA.getOrigin(); } const btVector3& getAnchor2() { return m_calculatedTransformB.getOrigin(); } const btVector3& getAxis1() { return m_axis1; } const btVector3& getAxis2() { return m_axis2; } btScalar getAngle1() { return getAngle(2); } btScalar getAngle2() { return getAngle(0); } // limits void setUpperLimit(btScalar ang1max) { setAngularUpperLimit(btVector3(-1.f, 0.f, ang1max)); } void setLowerLimit(btScalar ang1min) { setAngularLowerLimit(btVector3(1.f, 0.f, ang1min)); } }; #endif // BT_HINGE2_CONSTRAINT_H ================================================ FILE: libraries/bullet/BulletDynamics/ConstraintSolver/btHingeConstraint.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /* Hinge Constraint by Dirk Gregorius. Limits added by Marcus Hennix at Starbreeze Studios */ #ifndef BT_HINGECONSTRAINT_H #define BT_HINGECONSTRAINT_H #define _BT_USE_CENTER_LIMIT_ 1 #include "LinearMath/btVector3.h" #include "btJacobianEntry.h" #include "btTypedConstraint.h" class btRigidBody; #ifdef BT_USE_DOUBLE_PRECISION #define btHingeConstraintData btHingeConstraintDoubleData2 //rename to 2 for backwards compatibility, so we can still load the 'btHingeConstraintDoubleData' version #define btHingeConstraintDataName "btHingeConstraintDoubleData2" #else #define btHingeConstraintData btHingeConstraintFloatData #define btHingeConstraintDataName "btHingeConstraintFloatData" #endif //BT_USE_DOUBLE_PRECISION enum btHingeFlags { BT_HINGE_FLAGS_CFM_STOP = 1, BT_HINGE_FLAGS_ERP_STOP = 2, BT_HINGE_FLAGS_CFM_NORM = 4, BT_HINGE_FLAGS_ERP_NORM = 8 }; /// hinge constraint between two rigidbodies each with a pivotpoint that descibes the axis location in local space /// axis defines the orientation of the hinge axis ATTRIBUTE_ALIGNED16(class) btHingeConstraint : public btTypedConstraint { #ifdef IN_PARALLELL_SOLVER public: #endif btJacobianEntry m_jac[3]; //3 orthogonal linear constraints btJacobianEntry m_jacAng[3]; //2 orthogonal angular constraints+ 1 for limit/motor btTransform m_rbAFrame; // constraint axii. Assumes z is hinge axis. btTransform m_rbBFrame; btScalar m_motorTargetVelocity; btScalar m_maxMotorImpulse; #ifdef _BT_USE_CENTER_LIMIT_ btAngularLimit m_limit; #else btScalar m_lowerLimit; btScalar m_upperLimit; btScalar m_limitSign; btScalar m_correction; btScalar m_limitSoftness; btScalar m_biasFactor; btScalar m_relaxationFactor; bool m_solveLimit; #endif btScalar m_kHinge; btScalar m_accLimitImpulse; btScalar m_hingeAngle; btScalar m_referenceSign; bool m_angularOnly; bool m_enableAngularMotor; bool m_useSolveConstraintObsolete; bool m_useOffsetForConstraintFrame; bool m_useReferenceFrameA; btScalar m_accMotorImpulse; int m_flags; btScalar m_normalCFM; btScalar m_normalERP; btScalar m_stopCFM; btScalar m_stopERP; public: BT_DECLARE_ALIGNED_ALLOCATOR(); btHingeConstraint(btRigidBody & rbA, btRigidBody & rbB, const btVector3& pivotInA, const btVector3& pivotInB, const btVector3& axisInA, const btVector3& axisInB, bool useReferenceFrameA = false); btHingeConstraint(btRigidBody & rbA, const btVector3& pivotInA, const btVector3& axisInA, bool useReferenceFrameA = false); btHingeConstraint(btRigidBody & rbA, btRigidBody & rbB, const btTransform& rbAFrame, const btTransform& rbBFrame, bool useReferenceFrameA = false); btHingeConstraint(btRigidBody & rbA, const btTransform& rbAFrame, bool useReferenceFrameA = false); virtual void buildJacobian(); virtual void getInfo1(btConstraintInfo1 * info); void getInfo1NonVirtual(btConstraintInfo1 * info); virtual void getInfo2(btConstraintInfo2 * info); void getInfo2NonVirtual(btConstraintInfo2 * info, const btTransform& transA, const btTransform& transB, const btVector3& angVelA, const btVector3& angVelB); void getInfo2Internal(btConstraintInfo2 * info, const btTransform& transA, const btTransform& transB, const btVector3& angVelA, const btVector3& angVelB); void getInfo2InternalUsingFrameOffset(btConstraintInfo2 * info, const btTransform& transA, const btTransform& transB, const btVector3& angVelA, const btVector3& angVelB); void updateRHS(btScalar timeStep); const btRigidBody& getRigidBodyA() const { return m_rbA; } const btRigidBody& getRigidBodyB() const { return m_rbB; } btRigidBody& getRigidBodyA() { return m_rbA; } btRigidBody& getRigidBodyB() { return m_rbB; } btTransform& getFrameOffsetA() { return m_rbAFrame; } btTransform& getFrameOffsetB() { return m_rbBFrame; } void setFrames(const btTransform& frameA, const btTransform& frameB); void setAngularOnly(bool angularOnly) { m_angularOnly = angularOnly; } void enableAngularMotor(bool enableMotor, btScalar targetVelocity, btScalar maxMotorImpulse) { m_enableAngularMotor = enableMotor; m_motorTargetVelocity = targetVelocity; m_maxMotorImpulse = maxMotorImpulse; } // extra motor API, including ability to set a target rotation (as opposed to angular velocity) // note: setMotorTarget sets angular velocity under the hood, so you must call it every tick to // maintain a given angular target. void enableMotor(bool enableMotor) { m_enableAngularMotor = enableMotor; } void setMaxMotorImpulse(btScalar maxMotorImpulse) { m_maxMotorImpulse = maxMotorImpulse; } void setMotorTargetVelocity(btScalar motorTargetVelocity) { m_motorTargetVelocity = motorTargetVelocity; } void setMotorTarget(const btQuaternion& qAinB, btScalar dt); // qAinB is rotation of body A wrt body B. void setMotorTarget(btScalar targetAngle, btScalar dt); void setLimit(btScalar low, btScalar high, btScalar _softness = 0.9f, btScalar _biasFactor = 0.3f, btScalar _relaxationFactor = 1.0f) { #ifdef _BT_USE_CENTER_LIMIT_ m_limit.set(low, high, _softness, _biasFactor, _relaxationFactor); #else m_lowerLimit = btNormalizeAngle(low); m_upperLimit = btNormalizeAngle(high); m_limitSoftness = _softness; m_biasFactor = _biasFactor; m_relaxationFactor = _relaxationFactor; #endif } btScalar getLimitSoftness() const { #ifdef _BT_USE_CENTER_LIMIT_ return m_limit.getSoftness(); #else return m_limitSoftness; #endif } btScalar getLimitBiasFactor() const { #ifdef _BT_USE_CENTER_LIMIT_ return m_limit.getBiasFactor(); #else return m_biasFactor; #endif } btScalar getLimitRelaxationFactor() const { #ifdef _BT_USE_CENTER_LIMIT_ return m_limit.getRelaxationFactor(); #else return m_relaxationFactor; #endif } void setAxis(btVector3 & axisInA) { btVector3 rbAxisA1, rbAxisA2; btPlaneSpace1(axisInA, rbAxisA1, rbAxisA2); btVector3 pivotInA = m_rbAFrame.getOrigin(); // m_rbAFrame.getOrigin() = pivotInA; m_rbAFrame.getBasis().setValue(rbAxisA1.getX(), rbAxisA2.getX(), axisInA.getX(), rbAxisA1.getY(), rbAxisA2.getY(), axisInA.getY(), rbAxisA1.getZ(), rbAxisA2.getZ(), axisInA.getZ()); btVector3 axisInB = m_rbA.getCenterOfMassTransform().getBasis() * axisInA; btQuaternion rotationArc = shortestArcQuat(axisInA, axisInB); btVector3 rbAxisB1 = quatRotate(rotationArc, rbAxisA1); btVector3 rbAxisB2 = axisInB.cross(rbAxisB1); m_rbBFrame.getOrigin() = m_rbB.getCenterOfMassTransform().inverse()(m_rbA.getCenterOfMassTransform()(pivotInA)); m_rbBFrame.getBasis().setValue(rbAxisB1.getX(), rbAxisB2.getX(), axisInB.getX(), rbAxisB1.getY(), rbAxisB2.getY(), axisInB.getY(), rbAxisB1.getZ(), rbAxisB2.getZ(), axisInB.getZ()); m_rbBFrame.getBasis() = m_rbB.getCenterOfMassTransform().getBasis().inverse() * m_rbBFrame.getBasis(); } bool hasLimit() const { #ifdef _BT_USE_CENTER_LIMIT_ return m_limit.getHalfRange() > 0; #else return m_lowerLimit <= m_upperLimit; #endif } btScalar getLowerLimit() const { #ifdef _BT_USE_CENTER_LIMIT_ return m_limit.getLow(); #else return m_lowerLimit; #endif } btScalar getUpperLimit() const { #ifdef _BT_USE_CENTER_LIMIT_ return m_limit.getHigh(); #else return m_upperLimit; #endif } ///The getHingeAngle gives the hinge angle in range [-PI,PI] btScalar getHingeAngle(); btScalar getHingeAngle(const btTransform& transA, const btTransform& transB); void testLimit(const btTransform& transA, const btTransform& transB); const btTransform& getAFrame() const { return m_rbAFrame; }; const btTransform& getBFrame() const { return m_rbBFrame; }; btTransform& getAFrame() { return m_rbAFrame; }; btTransform& getBFrame() { return m_rbBFrame; }; inline int getSolveLimit() { #ifdef _BT_USE_CENTER_LIMIT_ return m_limit.isLimit(); #else return m_solveLimit; #endif } inline btScalar getLimitSign() { #ifdef _BT_USE_CENTER_LIMIT_ return m_limit.getSign(); #else return m_limitSign; #endif } inline bool getAngularOnly() { return m_angularOnly; } inline bool getEnableAngularMotor() { return m_enableAngularMotor; } inline btScalar getMotorTargetVelocity() { return m_motorTargetVelocity; } inline btScalar getMaxMotorImpulse() { return m_maxMotorImpulse; } // access for UseFrameOffset bool getUseFrameOffset() { return m_useOffsetForConstraintFrame; } void setUseFrameOffset(bool frameOffsetOnOff) { m_useOffsetForConstraintFrame = frameOffsetOnOff; } // access for UseReferenceFrameA bool getUseReferenceFrameA() const { return m_useReferenceFrameA; } void setUseReferenceFrameA(bool useReferenceFrameA) { m_useReferenceFrameA = useReferenceFrameA; } ///override the default global value of a parameter (such as ERP or CFM), optionally provide the axis (0..5). ///If no axis is provided, it uses the default axis for this constraint. virtual void setParam(int num, btScalar value, int axis = -1); ///return the local value of parameter virtual btScalar getParam(int num, int axis = -1) const; virtual int getFlags() const { return m_flags; } virtual int calculateSerializeBufferSize() const; ///fills the dataBuffer and returns the struct name (and 0 on failure) virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; }; //only for backward compatibility #ifdef BT_BACKWARDS_COMPATIBLE_SERIALIZATION ///this structure is not used, except for loading pre-2.82 .bullet files struct btHingeConstraintDoubleData { btTypedConstraintData m_typeConstraintData; btTransformDoubleData m_rbAFrame; // constraint axii. Assumes z is hinge axis. btTransformDoubleData m_rbBFrame; int m_useReferenceFrameA; int m_angularOnly; int m_enableAngularMotor; float m_motorTargetVelocity; float m_maxMotorImpulse; float m_lowerLimit; float m_upperLimit; float m_limitSoftness; float m_biasFactor; float m_relaxationFactor; }; #endif //BT_BACKWARDS_COMPATIBLE_SERIALIZATION ///The getAccumulatedHingeAngle returns the accumulated hinge angle, taking rotation across the -PI/PI boundary into account ATTRIBUTE_ALIGNED16(class) btHingeAccumulatedAngleConstraint : public btHingeConstraint { protected: btScalar m_accumulatedAngle; public: BT_DECLARE_ALIGNED_ALLOCATOR(); btHingeAccumulatedAngleConstraint(btRigidBody & rbA, btRigidBody & rbB, const btVector3& pivotInA, const btVector3& pivotInB, const btVector3& axisInA, const btVector3& axisInB, bool useReferenceFrameA = false) : btHingeConstraint(rbA, rbB, pivotInA, pivotInB, axisInA, axisInB, useReferenceFrameA) { m_accumulatedAngle = getHingeAngle(); } btHingeAccumulatedAngleConstraint(btRigidBody & rbA, const btVector3& pivotInA, const btVector3& axisInA, bool useReferenceFrameA = false) : btHingeConstraint(rbA, pivotInA, axisInA, useReferenceFrameA) { m_accumulatedAngle = getHingeAngle(); } btHingeAccumulatedAngleConstraint(btRigidBody & rbA, btRigidBody & rbB, const btTransform& rbAFrame, const btTransform& rbBFrame, bool useReferenceFrameA = false) : btHingeConstraint(rbA, rbB, rbAFrame, rbBFrame, useReferenceFrameA) { m_accumulatedAngle = getHingeAngle(); } btHingeAccumulatedAngleConstraint(btRigidBody & rbA, const btTransform& rbAFrame, bool useReferenceFrameA = false) : btHingeConstraint(rbA, rbAFrame, useReferenceFrameA) { m_accumulatedAngle = getHingeAngle(); } btScalar getAccumulatedHingeAngle(); void setAccumulatedHingeAngle(btScalar accAngle); virtual void getInfo1(btConstraintInfo1 * info); }; struct btHingeConstraintFloatData { btTypedConstraintData m_typeConstraintData; btTransformFloatData m_rbAFrame; // constraint axii. Assumes z is hinge axis. btTransformFloatData m_rbBFrame; int m_useReferenceFrameA; int m_angularOnly; int m_enableAngularMotor; float m_motorTargetVelocity; float m_maxMotorImpulse; float m_lowerLimit; float m_upperLimit; float m_limitSoftness; float m_biasFactor; float m_relaxationFactor; }; ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 struct btHingeConstraintDoubleData2 { btTypedConstraintDoubleData m_typeConstraintData; btTransformDoubleData m_rbAFrame; // constraint axii. Assumes z is hinge axis. btTransformDoubleData m_rbBFrame; int m_useReferenceFrameA; int m_angularOnly; int m_enableAngularMotor; double m_motorTargetVelocity; double m_maxMotorImpulse; double m_lowerLimit; double m_upperLimit; double m_limitSoftness; double m_biasFactor; double m_relaxationFactor; char m_padding1[4]; }; SIMD_FORCE_INLINE int btHingeConstraint::calculateSerializeBufferSize() const { return sizeof(btHingeConstraintData); } ///fills the dataBuffer and returns the struct name (and 0 on failure) SIMD_FORCE_INLINE const char* btHingeConstraint::serialize(void* dataBuffer, btSerializer* serializer) const { btHingeConstraintData* hingeData = (btHingeConstraintData*)dataBuffer; btTypedConstraint::serialize(&hingeData->m_typeConstraintData, serializer); m_rbAFrame.serialize(hingeData->m_rbAFrame); m_rbBFrame.serialize(hingeData->m_rbBFrame); hingeData->m_angularOnly = m_angularOnly; hingeData->m_enableAngularMotor = m_enableAngularMotor; hingeData->m_maxMotorImpulse = float(m_maxMotorImpulse); hingeData->m_motorTargetVelocity = float(m_motorTargetVelocity); hingeData->m_useReferenceFrameA = m_useReferenceFrameA; #ifdef _BT_USE_CENTER_LIMIT_ hingeData->m_lowerLimit = float(m_limit.getLow()); hingeData->m_upperLimit = float(m_limit.getHigh()); hingeData->m_limitSoftness = float(m_limit.getSoftness()); hingeData->m_biasFactor = float(m_limit.getBiasFactor()); hingeData->m_relaxationFactor = float(m_limit.getRelaxationFactor()); #else hingeData->m_lowerLimit = float(m_lowerLimit); hingeData->m_upperLimit = float(m_upperLimit); hingeData->m_limitSoftness = float(m_limitSoftness); hingeData->m_biasFactor = float(m_biasFactor); hingeData->m_relaxationFactor = float(m_relaxationFactor); #endif // Fill padding with zeros to appease msan. #ifdef BT_USE_DOUBLE_PRECISION hingeData->m_padding1[0] = 0; hingeData->m_padding1[1] = 0; hingeData->m_padding1[2] = 0; hingeData->m_padding1[3] = 0; #endif return btHingeConstraintDataName; } #endif //BT_HINGECONSTRAINT_H ================================================ FILE: libraries/bullet/BulletDynamics/ConstraintSolver/btJacobianEntry.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_JACOBIAN_ENTRY_H #define BT_JACOBIAN_ENTRY_H #include "LinearMath/btMatrix3x3.h" //notes: // Another memory optimization would be to store m_1MinvJt in the remaining 3 w components // which makes the btJacobianEntry memory layout 16 bytes // if you only are interested in angular part, just feed massInvA and massInvB zero /// Jacobian entry is an abstraction that allows to describe constraints /// it can be used in combination with a constraint solver /// Can be used to relate the effect of an impulse to the constraint error ATTRIBUTE_ALIGNED16(class) btJacobianEntry { public: btJacobianEntry(){}; //constraint between two different rigidbodies btJacobianEntry( const btMatrix3x3& world2A, const btMatrix3x3& world2B, const btVector3& rel_pos1, const btVector3& rel_pos2, const btVector3& jointAxis, const btVector3& inertiaInvA, const btScalar massInvA, const btVector3& inertiaInvB, const btScalar massInvB) : m_linearJointAxis(jointAxis) { m_aJ = world2A * (rel_pos1.cross(m_linearJointAxis)); m_bJ = world2B * (rel_pos2.cross(-m_linearJointAxis)); m_0MinvJt = inertiaInvA * m_aJ; m_1MinvJt = inertiaInvB * m_bJ; m_Adiag = massInvA + m_0MinvJt.dot(m_aJ) + massInvB + m_1MinvJt.dot(m_bJ); btAssert(m_Adiag > btScalar(0.0)); } //angular constraint between two different rigidbodies btJacobianEntry(const btVector3& jointAxis, const btMatrix3x3& world2A, const btMatrix3x3& world2B, const btVector3& inertiaInvA, const btVector3& inertiaInvB) : m_linearJointAxis(btVector3(btScalar(0.), btScalar(0.), btScalar(0.))) { m_aJ = world2A * jointAxis; m_bJ = world2B * -jointAxis; m_0MinvJt = inertiaInvA * m_aJ; m_1MinvJt = inertiaInvB * m_bJ; m_Adiag = m_0MinvJt.dot(m_aJ) + m_1MinvJt.dot(m_bJ); btAssert(m_Adiag > btScalar(0.0)); } //angular constraint between two different rigidbodies btJacobianEntry(const btVector3& axisInA, const btVector3& axisInB, const btVector3& inertiaInvA, const btVector3& inertiaInvB) : m_linearJointAxis(btVector3(btScalar(0.), btScalar(0.), btScalar(0.))), m_aJ(axisInA), m_bJ(-axisInB) { m_0MinvJt = inertiaInvA * m_aJ; m_1MinvJt = inertiaInvB * m_bJ; m_Adiag = m_0MinvJt.dot(m_aJ) + m_1MinvJt.dot(m_bJ); btAssert(m_Adiag > btScalar(0.0)); } //constraint on one rigidbody btJacobianEntry( const btMatrix3x3& world2A, const btVector3& rel_pos1, const btVector3& rel_pos2, const btVector3& jointAxis, const btVector3& inertiaInvA, const btScalar massInvA) : m_linearJointAxis(jointAxis) { m_aJ = world2A * (rel_pos1.cross(jointAxis)); m_bJ = world2A * (rel_pos2.cross(-jointAxis)); m_0MinvJt = inertiaInvA * m_aJ; m_1MinvJt = btVector3(btScalar(0.), btScalar(0.), btScalar(0.)); m_Adiag = massInvA + m_0MinvJt.dot(m_aJ); btAssert(m_Adiag > btScalar(0.0)); } btScalar getDiagonal() const { return m_Adiag; } // for two constraints on the same rigidbody (for example vehicle friction) btScalar getNonDiagonal(const btJacobianEntry& jacB, const btScalar massInvA) const { const btJacobianEntry& jacA = *this; btScalar lin = massInvA * jacA.m_linearJointAxis.dot(jacB.m_linearJointAxis); btScalar ang = jacA.m_0MinvJt.dot(jacB.m_aJ); return lin + ang; } // for two constraints on sharing two same rigidbodies (for example two contact points between two rigidbodies) btScalar getNonDiagonal(const btJacobianEntry& jacB, const btScalar massInvA, const btScalar massInvB) const { const btJacobianEntry& jacA = *this; btVector3 lin = jacA.m_linearJointAxis * jacB.m_linearJointAxis; btVector3 ang0 = jacA.m_0MinvJt * jacB.m_aJ; btVector3 ang1 = jacA.m_1MinvJt * jacB.m_bJ; btVector3 lin0 = massInvA * lin; btVector3 lin1 = massInvB * lin; btVector3 sum = ang0 + ang1 + lin0 + lin1; return sum[0] + sum[1] + sum[2]; } btScalar getRelativeVelocity(const btVector3& linvelA, const btVector3& angvelA, const btVector3& linvelB, const btVector3& angvelB) { btVector3 linrel = linvelA - linvelB; btVector3 angvela = angvelA * m_aJ; btVector3 angvelb = angvelB * m_bJ; linrel *= m_linearJointAxis; angvela += angvelb; angvela += linrel; btScalar rel_vel2 = angvela[0] + angvela[1] + angvela[2]; return rel_vel2 + SIMD_EPSILON; } //private: btVector3 m_linearJointAxis; btVector3 m_aJ; btVector3 m_bJ; btVector3 m_0MinvJt; btVector3 m_1MinvJt; //Optimization: can be stored in the w/last component of one of the vectors btScalar m_Adiag; }; #endif //BT_JACOBIAN_ENTRY_H ================================================ FILE: libraries/bullet/BulletDynamics/ConstraintSolver/btNNCGConstraintSolver.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_NNCG_CONSTRAINT_SOLVER_H #define BT_NNCG_CONSTRAINT_SOLVER_H #include "btSequentialImpulseConstraintSolver.h" ATTRIBUTE_ALIGNED16(class) btNNCGConstraintSolver : public btSequentialImpulseConstraintSolver { protected: btScalar m_deltafLengthSqrPrev; btAlignedObjectArray m_pNC; // p for None Contact constraints btAlignedObjectArray m_pC; // p for Contact constraints btAlignedObjectArray m_pCF; // p for ContactFriction constraints btAlignedObjectArray m_pCRF; // p for ContactRollingFriction constraints //These are recalculated in every iterations. We just keep these to prevent reallocation in each iteration. btAlignedObjectArray m_deltafNC; // deltaf for NoneContact constraints btAlignedObjectArray m_deltafC; // deltaf for Contact constraints btAlignedObjectArray m_deltafCF; // deltaf for ContactFriction constraints btAlignedObjectArray m_deltafCRF; // deltaf for ContactRollingFriction constraints protected: virtual btScalar solveGroupCacheFriendlyFinish(btCollisionObject * *bodies, int numBodies, const btContactSolverInfo& infoGlobal); virtual btScalar solveSingleIteration(int iteration, btCollisionObject** bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer); virtual btScalar solveGroupCacheFriendlySetup(btCollisionObject * *bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer); public: BT_DECLARE_ALIGNED_ALLOCATOR(); btNNCGConstraintSolver() : btSequentialImpulseConstraintSolver(), m_onlyForNoneContact(false) {} virtual btConstraintSolverType getSolverType() const { return BT_NNCG_SOLVER; } bool m_onlyForNoneContact; }; #endif //BT_NNCG_CONSTRAINT_SOLVER_H ================================================ FILE: libraries/bullet/BulletDynamics/ConstraintSolver/btPoint2PointConstraint.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_POINT2POINTCONSTRAINT_H #define BT_POINT2POINTCONSTRAINT_H #include "LinearMath/btVector3.h" #include "btJacobianEntry.h" #include "btTypedConstraint.h" class btRigidBody; #ifdef BT_USE_DOUBLE_PRECISION #define btPoint2PointConstraintData2 btPoint2PointConstraintDoubleData2 #define btPoint2PointConstraintDataName "btPoint2PointConstraintDoubleData2" #else #define btPoint2PointConstraintData2 btPoint2PointConstraintFloatData #define btPoint2PointConstraintDataName "btPoint2PointConstraintFloatData" #endif //BT_USE_DOUBLE_PRECISION struct btConstraintSetting { btConstraintSetting() : m_tau(btScalar(0.3)), m_damping(btScalar(1.)), m_impulseClamp(btScalar(0.)) { } btScalar m_tau; btScalar m_damping; btScalar m_impulseClamp; }; enum btPoint2PointFlags { BT_P2P_FLAGS_ERP = 1, BT_P2P_FLAGS_CFM = 2 }; /// point to point constraint between two rigidbodies each with a pivotpoint that descibes the 'ballsocket' location in local space ATTRIBUTE_ALIGNED16(class) btPoint2PointConstraint : public btTypedConstraint { #ifdef IN_PARALLELL_SOLVER public: #endif btJacobianEntry m_jac[3]; //3 orthogonal linear constraints btVector3 m_pivotInA; btVector3 m_pivotInB; int m_flags; btScalar m_erp; btScalar m_cfm; public: BT_DECLARE_ALIGNED_ALLOCATOR(); ///for backwards compatibility during the transition to 'getInfo/getInfo2' bool m_useSolveConstraintObsolete; btConstraintSetting m_setting; btPoint2PointConstraint(btRigidBody & rbA, btRigidBody & rbB, const btVector3& pivotInA, const btVector3& pivotInB); btPoint2PointConstraint(btRigidBody & rbA, const btVector3& pivotInA); virtual void buildJacobian(); virtual void getInfo1(btConstraintInfo1 * info); void getInfo1NonVirtual(btConstraintInfo1 * info); virtual void getInfo2(btConstraintInfo2 * info); void getInfo2NonVirtual(btConstraintInfo2 * info, const btTransform& body0_trans, const btTransform& body1_trans); void updateRHS(btScalar timeStep); void setPivotA(const btVector3& pivotA) { m_pivotInA = pivotA; } void setPivotB(const btVector3& pivotB) { m_pivotInB = pivotB; } const btVector3& getPivotInA() const { return m_pivotInA; } const btVector3& getPivotInB() const { return m_pivotInB; } ///override the default global value of a parameter (such as ERP or CFM), optionally provide the axis (0..5). ///If no axis is provided, it uses the default axis for this constraint. virtual void setParam(int num, btScalar value, int axis = -1); ///return the local value of parameter virtual btScalar getParam(int num, int axis = -1) const; virtual int getFlags() const { return m_flags; } virtual int calculateSerializeBufferSize() const; ///fills the dataBuffer and returns the struct name (and 0 on failure) virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; }; ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 struct btPoint2PointConstraintFloatData { btTypedConstraintData m_typeConstraintData; btVector3FloatData m_pivotInA; btVector3FloatData m_pivotInB; }; ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 struct btPoint2PointConstraintDoubleData2 { btTypedConstraintDoubleData m_typeConstraintData; btVector3DoubleData m_pivotInA; btVector3DoubleData m_pivotInB; }; #ifdef BT_BACKWARDS_COMPATIBLE_SERIALIZATION ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 ///this structure is not used, except for loading pre-2.82 .bullet files ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 struct btPoint2PointConstraintDoubleData { btTypedConstraintData m_typeConstraintData; btVector3DoubleData m_pivotInA; btVector3DoubleData m_pivotInB; }; #endif //BT_BACKWARDS_COMPATIBLE_SERIALIZATION SIMD_FORCE_INLINE int btPoint2PointConstraint::calculateSerializeBufferSize() const { return sizeof(btPoint2PointConstraintData2); } ///fills the dataBuffer and returns the struct name (and 0 on failure) SIMD_FORCE_INLINE const char* btPoint2PointConstraint::serialize(void* dataBuffer, btSerializer* serializer) const { btPoint2PointConstraintData2* p2pData = (btPoint2PointConstraintData2*)dataBuffer; btTypedConstraint::serialize(&p2pData->m_typeConstraintData, serializer); m_pivotInA.serialize(p2pData->m_pivotInA); m_pivotInB.serialize(p2pData->m_pivotInB); return btPoint2PointConstraintDataName; } #endif //BT_POINT2POINTCONSTRAINT_H ================================================ FILE: libraries/bullet/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_SEQUENTIAL_IMPULSE_CONSTRAINT_SOLVER_H #define BT_SEQUENTIAL_IMPULSE_CONSTRAINT_SOLVER_H class btIDebugDraw; class btPersistentManifold; class btDispatcher; class btCollisionObject; #include "BulletDynamics/ConstraintSolver/btTypedConstraint.h" #include "BulletDynamics/ConstraintSolver/btContactSolverInfo.h" #include "BulletDynamics/ConstraintSolver/btSolverBody.h" #include "BulletDynamics/ConstraintSolver/btSolverConstraint.h" #include "BulletCollision/NarrowPhaseCollision/btManifoldPoint.h" #include "BulletDynamics/ConstraintSolver/btConstraintSolver.h" typedef btScalar (*btSingleConstraintRowSolver)(btSolverBody&, btSolverBody&, const btSolverConstraint&); struct btSolverAnalyticsData { btSolverAnalyticsData() { m_numSolverCalls = 0; m_numIterationsUsed = -1; m_remainingLeastSquaresResidual = -1; m_islandId = -2; } int m_islandId; int m_numBodies; int m_numContactManifolds; int m_numSolverCalls; int m_numIterationsUsed; double m_remainingLeastSquaresResidual; }; ///The btSequentialImpulseConstraintSolver is a fast SIMD implementation of the Projected Gauss Seidel (iterative LCP) method. ATTRIBUTE_ALIGNED16(class) btSequentialImpulseConstraintSolver : public btConstraintSolver { protected: btAlignedObjectArray m_tmpSolverBodyPool; btConstraintArray m_tmpSolverContactConstraintPool; btConstraintArray m_tmpSolverNonContactConstraintPool; btConstraintArray m_tmpSolverContactFrictionConstraintPool; btConstraintArray m_tmpSolverContactRollingFrictionConstraintPool; btAlignedObjectArray m_orderTmpConstraintPool; btAlignedObjectArray m_orderNonContactConstraintPool; btAlignedObjectArray m_orderFrictionConstraintPool; btAlignedObjectArray m_tmpConstraintSizesPool; int m_maxOverrideNumSolverIterations; int m_fixedBodyId; // When running solvers on multiple threads, a race condition exists for Kinematic objects that // participate in more than one solver. // The getOrInitSolverBody() function writes the companionId of each body (storing the index of the solver body // for the current solver). For normal dynamic bodies it isn't an issue because they can only be in one island // (and therefore one thread) at a time. But kinematic bodies can be in multiple islands at once. // To avoid this race condition, this solver does not write the companionId, instead it stores the solver body // index in this solver-local table, indexed by the uniqueId of the body. btAlignedObjectArray m_kinematicBodyUniqueIdToSolverBodyTable; // only used for multithreading btSingleConstraintRowSolver m_resolveSingleConstraintRowGeneric; btSingleConstraintRowSolver m_resolveSingleConstraintRowLowerLimit; btSingleConstraintRowSolver m_resolveSplitPenetrationImpulse; int m_cachedSolverMode; // used to check if SOLVER_SIMD flag has been changed void setupSolverFunctions(bool useSimd); btScalar m_leastSquaresResidual; void setupFrictionConstraint(btSolverConstraint & solverConstraint, const btVector3& normalAxis, int solverBodyIdA, int solverBodyIdB, btManifoldPoint& cp, const btVector3& rel_pos1, const btVector3& rel_pos2, btCollisionObject* colObj0, btCollisionObject* colObj1, btScalar relaxation, const btContactSolverInfo& infoGlobal, btScalar desiredVelocity = 0., btScalar cfmSlip = 0.); void setupTorsionalFrictionConstraint(btSolverConstraint & solverConstraint, const btVector3& normalAxis, int solverBodyIdA, int solverBodyIdB, btManifoldPoint& cp, btScalar combinedTorsionalFriction, const btVector3& rel_pos1, const btVector3& rel_pos2, btCollisionObject* colObj0, btCollisionObject* colObj1, btScalar relaxation, btScalar desiredVelocity = 0., btScalar cfmSlip = 0.); btSolverConstraint& addFrictionConstraint(const btVector3& normalAxis, int solverBodyIdA, int solverBodyIdB, int frictionIndex, btManifoldPoint& cp, const btVector3& rel_pos1, const btVector3& rel_pos2, btCollisionObject* colObj0, btCollisionObject* colObj1, btScalar relaxation, const btContactSolverInfo& infoGlobal, btScalar desiredVelocity = 0., btScalar cfmSlip = 0.); btSolverConstraint& addTorsionalFrictionConstraint(const btVector3& normalAxis, int solverBodyIdA, int solverBodyIdB, int frictionIndex, btManifoldPoint& cp, btScalar torsionalFriction, const btVector3& rel_pos1, const btVector3& rel_pos2, btCollisionObject* colObj0, btCollisionObject* colObj1, btScalar relaxation, btScalar desiredVelocity = 0, btScalar cfmSlip = 0.f); void setupContactConstraint(btSolverConstraint & solverConstraint, int solverBodyIdA, int solverBodyIdB, btManifoldPoint& cp, const btContactSolverInfo& infoGlobal, btScalar& relaxation, const btVector3& rel_pos1, const btVector3& rel_pos2); static void applyAnisotropicFriction(btCollisionObject * colObj, btVector3 & frictionDirection, int frictionMode); void setFrictionConstraintImpulse(btSolverConstraint & solverConstraint, int solverBodyIdA, int solverBodyIdB, btManifoldPoint& cp, const btContactSolverInfo& infoGlobal); ///m_btSeed2 is used for re-arranging the constraint rows. improves convergence/quality of friction unsigned long m_btSeed2; btScalar restitutionCurve(btScalar rel_vel, btScalar restitution, btScalar velocityThreshold); virtual void convertContacts(btPersistentManifold * *manifoldPtr, int numManifolds, const btContactSolverInfo& infoGlobal); void convertContact(btPersistentManifold * manifold, const btContactSolverInfo& infoGlobal); virtual void convertJoints(btTypedConstraint * *constraints, int numConstraints, const btContactSolverInfo& infoGlobal); void convertJoint(btSolverConstraint * currentConstraintRow, btTypedConstraint * constraint, const btTypedConstraint::btConstraintInfo1& info1, int solverBodyIdA, int solverBodyIdB, const btContactSolverInfo& infoGlobal); virtual void convertBodies(btCollisionObject * *bodies, int numBodies, const btContactSolverInfo& infoGlobal); btScalar resolveSplitPenetrationSIMD(btSolverBody & bodyA, btSolverBody & bodyB, const btSolverConstraint& contactConstraint) { return m_resolveSplitPenetrationImpulse(bodyA, bodyB, contactConstraint); } btScalar resolveSplitPenetrationImpulseCacheFriendly(btSolverBody & bodyA, btSolverBody & bodyB, const btSolverConstraint& contactConstraint) { return m_resolveSplitPenetrationImpulse(bodyA, bodyB, contactConstraint); } //internal method int getOrInitSolverBody(btCollisionObject & body, btScalar timeStep); void initSolverBody(btSolverBody * solverBody, btCollisionObject * collisionObject, btScalar timeStep); btScalar resolveSingleConstraintRowGeneric(btSolverBody & bodyA, btSolverBody & bodyB, const btSolverConstraint& contactConstraint); btScalar resolveSingleConstraintRowGenericSIMD(btSolverBody & bodyA, btSolverBody & bodyB, const btSolverConstraint& contactConstraint); btScalar resolveSingleConstraintRowLowerLimit(btSolverBody & bodyA, btSolverBody & bodyB, const btSolverConstraint& contactConstraint); btScalar resolveSingleConstraintRowLowerLimitSIMD(btSolverBody & bodyA, btSolverBody & bodyB, const btSolverConstraint& contactConstraint); btScalar resolveSplitPenetrationImpulse(btSolverBody & bodyA, btSolverBody & bodyB, const btSolverConstraint& contactConstraint) { return m_resolveSplitPenetrationImpulse(bodyA, bodyB, contactConstraint); } protected: void writeBackContacts(int iBegin, int iEnd, const btContactSolverInfo& infoGlobal); void writeBackJoints(int iBegin, int iEnd, const btContactSolverInfo& infoGlobal); void writeBackBodies(int iBegin, int iEnd, const btContactSolverInfo& infoGlobal); virtual void solveGroupCacheFriendlySplitImpulseIterations(btCollisionObject * *bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer); virtual btScalar solveGroupCacheFriendlyFinish(btCollisionObject * *bodies, int numBodies, const btContactSolverInfo& infoGlobal); virtual btScalar solveSingleIteration(int iteration, btCollisionObject** bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer); virtual btScalar solveGroupCacheFriendlySetup(btCollisionObject * *bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer); virtual btScalar solveGroupCacheFriendlyIterations(btCollisionObject * *bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer); public: BT_DECLARE_ALIGNED_ALLOCATOR(); btSequentialImpulseConstraintSolver(); virtual ~btSequentialImpulseConstraintSolver(); virtual btScalar solveGroup(btCollisionObject * *bodies, int numBodies, btPersistentManifold** manifold, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& info, btIDebugDraw* debugDrawer, btDispatcher* dispatcher); ///clear internal cached data and reset random seed virtual void reset(); unsigned long btRand2(); int btRandInt2(int n); void setRandSeed(unsigned long seed) { m_btSeed2 = seed; } unsigned long getRandSeed() const { return m_btSeed2; } virtual btConstraintSolverType getSolverType() const { return BT_SEQUENTIAL_IMPULSE_SOLVER; } btSingleConstraintRowSolver getActiveConstraintRowSolverGeneric() { return m_resolveSingleConstraintRowGeneric; } void setConstraintRowSolverGeneric(btSingleConstraintRowSolver rowSolver) { m_resolveSingleConstraintRowGeneric = rowSolver; } btSingleConstraintRowSolver getActiveConstraintRowSolverLowerLimit() { return m_resolveSingleConstraintRowLowerLimit; } void setConstraintRowSolverLowerLimit(btSingleConstraintRowSolver rowSolver) { m_resolveSingleConstraintRowLowerLimit = rowSolver; } ///Various implementations of solving a single constraint row using a generic equality constraint, using scalar reference, SSE2 or SSE4 btSingleConstraintRowSolver getScalarConstraintRowSolverGeneric(); btSingleConstraintRowSolver getSSE2ConstraintRowSolverGeneric(); btSingleConstraintRowSolver getSSE4_1ConstraintRowSolverGeneric(); ///Various implementations of solving a single constraint row using an inequality (lower limit) constraint, using scalar reference, SSE2 or SSE4 btSingleConstraintRowSolver getScalarConstraintRowSolverLowerLimit(); btSingleConstraintRowSolver getSSE2ConstraintRowSolverLowerLimit(); btSingleConstraintRowSolver getSSE4_1ConstraintRowSolverLowerLimit(); btSolverAnalyticsData m_analyticsData; }; #endif //BT_SEQUENTIAL_IMPULSE_CONSTRAINT_SOLVER_H ================================================ FILE: libraries/bullet/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolverMt.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_SEQUENTIAL_IMPULSE_CONSTRAINT_SOLVER_MT_H #define BT_SEQUENTIAL_IMPULSE_CONSTRAINT_SOLVER_MT_H #include "btSequentialImpulseConstraintSolver.h" #include "btBatchedConstraints.h" #include "LinearMath/btThreads.h" /// /// btSequentialImpulseConstraintSolverMt /// /// A multithreaded variant of the sequential impulse constraint solver. The constraints to be solved are grouped into /// batches and phases where each batch of constraints within a given phase can be solved in parallel with the rest. /// Ideally we want as few phases as possible, and each phase should have many batches, and all of the batches should /// have about the same number of constraints. /// This method works best on a large island of many constraints. /// /// Supports all of the features of the normal sequential impulse solver such as: /// - split penetration impulse /// - rolling friction /// - interleaving constraints /// - warmstarting /// - 2 friction directions /// - randomized constraint ordering /// - early termination when leastSquaresResidualThreshold is satisfied /// /// When the SOLVER_INTERLEAVE_CONTACT_AND_FRICTION_CONSTRAINTS flag is enabled, unlike the normal SequentialImpulse solver, /// the rolling friction is interleaved as well. /// Interleaving the contact penetration constraints with friction reduces the number of parallel loops that need to be done, /// which reduces threading overhead so it can be a performance win, however, it does seem to produce a less stable simulation, /// at least on stacks of blocks. /// /// When the SOLVER_RANDMIZE_ORDER flag is enabled, the ordering of phases, and the ordering of constraints within each batch /// is randomized, however it does not swap constraints between batches. /// This is to avoid regenerating the batches for each solver iteration which would be quite costly in performance. /// /// Note that a non-zero leastSquaresResidualThreshold could possibly affect the determinism of the simulation /// if the task scheduler's parallelSum operation is non-deterministic. The parallelSum operation can be non-deterministic /// because floating point addition is not associative due to rounding errors. /// The task scheduler can and should ensure that the result of any parallelSum operation is deterministic. /// ATTRIBUTE_ALIGNED16(class) btSequentialImpulseConstraintSolverMt : public btSequentialImpulseConstraintSolver { public: virtual void solveGroupCacheFriendlySplitImpulseIterations(btCollisionObject * *bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer) BT_OVERRIDE; virtual btScalar solveSingleIteration(int iteration, btCollisionObject** bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer) BT_OVERRIDE; virtual btScalar solveGroupCacheFriendlySetup(btCollisionObject * *bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer) BT_OVERRIDE; virtual btScalar solveGroupCacheFriendlyFinish(btCollisionObject * *bodies, int numBodies, const btContactSolverInfo& infoGlobal) BT_OVERRIDE; // temp struct used to collect info from persistent manifolds into a cache-friendly struct using multiple threads struct btContactManifoldCachedInfo { static const int MAX_NUM_CONTACT_POINTS = 4; int numTouchingContacts; int solverBodyIds[2]; int contactIndex; int rollingFrictionIndex; bool contactHasRollingFriction[MAX_NUM_CONTACT_POINTS]; btManifoldPoint* contactPoints[MAX_NUM_CONTACT_POINTS]; }; // temp struct used for setting up joint constraints in parallel struct JointParams { int m_solverConstraint; int m_solverBodyA; int m_solverBodyB; }; void internalInitMultipleJoints(btTypedConstraint * *constraints, int iBegin, int iEnd); void internalConvertMultipleJoints(const btAlignedObjectArray& jointParamsArray, btTypedConstraint** constraints, int iBegin, int iEnd, const btContactSolverInfo& infoGlobal); // parameters to control batching static bool s_allowNestedParallelForLoops; // whether to allow nested parallel operations static int s_minimumContactManifoldsForBatching; // don't even try to batch if fewer manifolds than this static btBatchedConstraints::BatchingMethod s_contactBatchingMethod; static btBatchedConstraints::BatchingMethod s_jointBatchingMethod; static int s_minBatchSize; // desired number of constraints per batch static int s_maxBatchSize; protected: static const int CACHE_LINE_SIZE = 64; btBatchedConstraints m_batchedContactConstraints; btBatchedConstraints m_batchedJointConstraints; int m_numFrictionDirections; bool m_useBatching; bool m_useObsoleteJointConstraints; btAlignedObjectArray m_manifoldCachedInfoArray; btAlignedObjectArray m_rollingFrictionIndexTable; // lookup table mapping contact index to rolling friction index btSpinMutex m_bodySolverArrayMutex; char m_antiFalseSharingPadding[CACHE_LINE_SIZE]; // padding to keep mutexes in separate cachelines btSpinMutex m_kinematicBodyUniqueIdToSolverBodyTableMutex; btAlignedObjectArray m_scratchMemory; virtual void randomizeConstraintOrdering(int iteration, int numIterations); virtual btScalar resolveAllJointConstraints(int iteration); virtual btScalar resolveAllContactConstraints(); virtual btScalar resolveAllContactFrictionConstraints(); virtual btScalar resolveAllContactConstraintsInterleaved(); virtual btScalar resolveAllRollingFrictionConstraints(); virtual void setupBatchedContactConstraints(); virtual void setupBatchedJointConstraints(); virtual void convertJoints(btTypedConstraint * *constraints, int numConstraints, const btContactSolverInfo& infoGlobal) BT_OVERRIDE; virtual void convertContacts(btPersistentManifold * *manifoldPtr, int numManifolds, const btContactSolverInfo& infoGlobal) BT_OVERRIDE; virtual void convertBodies(btCollisionObject * *bodies, int numBodies, const btContactSolverInfo& infoGlobal) BT_OVERRIDE; int getOrInitSolverBodyThreadsafe(btCollisionObject & body, btScalar timeStep); void allocAllContactConstraints(btPersistentManifold * *manifoldPtr, int numManifolds, const btContactSolverInfo& infoGlobal); void setupAllContactConstraints(const btContactSolverInfo& infoGlobal); void randomizeBatchedConstraintOrdering(btBatchedConstraints * batchedConstraints); public: BT_DECLARE_ALIGNED_ALLOCATOR(); btSequentialImpulseConstraintSolverMt(); virtual ~btSequentialImpulseConstraintSolverMt(); btScalar resolveMultipleJointConstraints(const btAlignedObjectArray& consIndices, int batchBegin, int batchEnd, int iteration); btScalar resolveMultipleContactConstraints(const btAlignedObjectArray& consIndices, int batchBegin, int batchEnd); btScalar resolveMultipleContactSplitPenetrationImpulseConstraints(const btAlignedObjectArray& consIndices, int batchBegin, int batchEnd); btScalar resolveMultipleContactFrictionConstraints(const btAlignedObjectArray& consIndices, int batchBegin, int batchEnd); btScalar resolveMultipleContactRollingFrictionConstraints(const btAlignedObjectArray& consIndices, int batchBegin, int batchEnd); btScalar resolveMultipleContactConstraintsInterleaved(const btAlignedObjectArray& contactIndices, int batchBegin, int batchEnd); void internalCollectContactManifoldCachedInfo(btContactManifoldCachedInfo * cachedInfoArray, btPersistentManifold * *manifoldPtr, int numManifolds, const btContactSolverInfo& infoGlobal); void internalAllocContactConstraints(const btContactManifoldCachedInfo* cachedInfoArray, int numManifolds); void internalSetupContactConstraints(int iContactConstraint, const btContactSolverInfo& infoGlobal); void internalConvertBodies(btCollisionObject * *bodies, int iBegin, int iEnd, const btContactSolverInfo& infoGlobal); void internalWriteBackContacts(int iBegin, int iEnd, const btContactSolverInfo& infoGlobal); void internalWriteBackJoints(int iBegin, int iEnd, const btContactSolverInfo& infoGlobal); void internalWriteBackBodies(int iBegin, int iEnd, const btContactSolverInfo& infoGlobal); }; #endif //BT_SEQUENTIAL_IMPULSE_CONSTRAINT_SOLVER_MT_H ================================================ FILE: libraries/bullet/BulletDynamics/ConstraintSolver/btSliderConstraint.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /* Added by Roman Ponomarev (rponom@gmail.com) April 04, 2008 TODO: - add clamping od accumulated impulse to improve stability - add conversion for ODE constraint solver */ #ifndef BT_SLIDER_CONSTRAINT_H #define BT_SLIDER_CONSTRAINT_H #include "LinearMath/btScalar.h" //for BT_USE_DOUBLE_PRECISION #ifdef BT_USE_DOUBLE_PRECISION #define btSliderConstraintData2 btSliderConstraintDoubleData #define btSliderConstraintDataName "btSliderConstraintDoubleData" #else #define btSliderConstraintData2 btSliderConstraintData #define btSliderConstraintDataName "btSliderConstraintData" #endif //BT_USE_DOUBLE_PRECISION #include "LinearMath/btVector3.h" #include "btJacobianEntry.h" #include "btTypedConstraint.h" class btRigidBody; #define SLIDER_CONSTRAINT_DEF_SOFTNESS (btScalar(1.0)) #define SLIDER_CONSTRAINT_DEF_DAMPING (btScalar(1.0)) #define SLIDER_CONSTRAINT_DEF_RESTITUTION (btScalar(0.7)) #define SLIDER_CONSTRAINT_DEF_CFM (btScalar(0.f)) enum btSliderFlags { BT_SLIDER_FLAGS_CFM_DIRLIN = (1 << 0), BT_SLIDER_FLAGS_ERP_DIRLIN = (1 << 1), BT_SLIDER_FLAGS_CFM_DIRANG = (1 << 2), BT_SLIDER_FLAGS_ERP_DIRANG = (1 << 3), BT_SLIDER_FLAGS_CFM_ORTLIN = (1 << 4), BT_SLIDER_FLAGS_ERP_ORTLIN = (1 << 5), BT_SLIDER_FLAGS_CFM_ORTANG = (1 << 6), BT_SLIDER_FLAGS_ERP_ORTANG = (1 << 7), BT_SLIDER_FLAGS_CFM_LIMLIN = (1 << 8), BT_SLIDER_FLAGS_ERP_LIMLIN = (1 << 9), BT_SLIDER_FLAGS_CFM_LIMANG = (1 << 10), BT_SLIDER_FLAGS_ERP_LIMANG = (1 << 11) }; ATTRIBUTE_ALIGNED16(class) btSliderConstraint : public btTypedConstraint { protected: ///for backwards compatibility during the transition to 'getInfo/getInfo2' bool m_useSolveConstraintObsolete; bool m_useOffsetForConstraintFrame; btTransform m_frameInA; btTransform m_frameInB; // use frameA fo define limits, if true bool m_useLinearReferenceFrameA; // linear limits btScalar m_lowerLinLimit; btScalar m_upperLinLimit; // angular limits btScalar m_lowerAngLimit; btScalar m_upperAngLimit; // softness, restitution and damping for different cases // DirLin - moving inside linear limits // LimLin - hitting linear limit // DirAng - moving inside angular limits // LimAng - hitting angular limit // OrthoLin, OrthoAng - against constraint axis btScalar m_softnessDirLin; btScalar m_restitutionDirLin; btScalar m_dampingDirLin; btScalar m_cfmDirLin; btScalar m_softnessDirAng; btScalar m_restitutionDirAng; btScalar m_dampingDirAng; btScalar m_cfmDirAng; btScalar m_softnessLimLin; btScalar m_restitutionLimLin; btScalar m_dampingLimLin; btScalar m_cfmLimLin; btScalar m_softnessLimAng; btScalar m_restitutionLimAng; btScalar m_dampingLimAng; btScalar m_cfmLimAng; btScalar m_softnessOrthoLin; btScalar m_restitutionOrthoLin; btScalar m_dampingOrthoLin; btScalar m_cfmOrthoLin; btScalar m_softnessOrthoAng; btScalar m_restitutionOrthoAng; btScalar m_dampingOrthoAng; btScalar m_cfmOrthoAng; // for interlal use bool m_solveLinLim; bool m_solveAngLim; int m_flags; btJacobianEntry m_jacLin[3]; btScalar m_jacLinDiagABInv[3]; btJacobianEntry m_jacAng[3]; btScalar m_timeStep; btTransform m_calculatedTransformA; btTransform m_calculatedTransformB; btVector3 m_sliderAxis; btVector3 m_realPivotAInW; btVector3 m_realPivotBInW; btVector3 m_projPivotInW; btVector3 m_delta; btVector3 m_depth; btVector3 m_relPosA; btVector3 m_relPosB; btScalar m_linPos; btScalar m_angPos; btScalar m_angDepth; btScalar m_kAngle; bool m_poweredLinMotor; btScalar m_targetLinMotorVelocity; btScalar m_maxLinMotorForce; btScalar m_accumulatedLinMotorImpulse; bool m_poweredAngMotor; btScalar m_targetAngMotorVelocity; btScalar m_maxAngMotorForce; btScalar m_accumulatedAngMotorImpulse; //------------------------ void initParams(); public: BT_DECLARE_ALIGNED_ALLOCATOR(); // constructors btSliderConstraint(btRigidBody & rbA, btRigidBody & rbB, const btTransform& frameInA, const btTransform& frameInB, bool useLinearReferenceFrameA); btSliderConstraint(btRigidBody & rbB, const btTransform& frameInB, bool useLinearReferenceFrameA); // overrides virtual void getInfo1(btConstraintInfo1 * info); void getInfo1NonVirtual(btConstraintInfo1 * info); virtual void getInfo2(btConstraintInfo2 * info); void getInfo2NonVirtual(btConstraintInfo2 * info, const btTransform& transA, const btTransform& transB, const btVector3& linVelA, const btVector3& linVelB, btScalar rbAinvMass, btScalar rbBinvMass); // access const btRigidBody& getRigidBodyA() const { return m_rbA; } const btRigidBody& getRigidBodyB() const { return m_rbB; } const btTransform& getCalculatedTransformA() const { return m_calculatedTransformA; } const btTransform& getCalculatedTransformB() const { return m_calculatedTransformB; } const btTransform& getFrameOffsetA() const { return m_frameInA; } const btTransform& getFrameOffsetB() const { return m_frameInB; } btTransform& getFrameOffsetA() { return m_frameInA; } btTransform& getFrameOffsetB() { return m_frameInB; } btScalar getLowerLinLimit() { return m_lowerLinLimit; } void setLowerLinLimit(btScalar lowerLimit) { m_lowerLinLimit = lowerLimit; } btScalar getUpperLinLimit() { return m_upperLinLimit; } void setUpperLinLimit(btScalar upperLimit) { m_upperLinLimit = upperLimit; } btScalar getLowerAngLimit() { return m_lowerAngLimit; } void setLowerAngLimit(btScalar lowerLimit) { m_lowerAngLimit = btNormalizeAngle(lowerLimit); } btScalar getUpperAngLimit() { return m_upperAngLimit; } void setUpperAngLimit(btScalar upperLimit) { m_upperAngLimit = btNormalizeAngle(upperLimit); } bool getUseLinearReferenceFrameA() { return m_useLinearReferenceFrameA; } btScalar getSoftnessDirLin() { return m_softnessDirLin; } btScalar getRestitutionDirLin() { return m_restitutionDirLin; } btScalar getDampingDirLin() { return m_dampingDirLin; } btScalar getSoftnessDirAng() { return m_softnessDirAng; } btScalar getRestitutionDirAng() { return m_restitutionDirAng; } btScalar getDampingDirAng() { return m_dampingDirAng; } btScalar getSoftnessLimLin() { return m_softnessLimLin; } btScalar getRestitutionLimLin() { return m_restitutionLimLin; } btScalar getDampingLimLin() { return m_dampingLimLin; } btScalar getSoftnessLimAng() { return m_softnessLimAng; } btScalar getRestitutionLimAng() { return m_restitutionLimAng; } btScalar getDampingLimAng() { return m_dampingLimAng; } btScalar getSoftnessOrthoLin() { return m_softnessOrthoLin; } btScalar getRestitutionOrthoLin() { return m_restitutionOrthoLin; } btScalar getDampingOrthoLin() { return m_dampingOrthoLin; } btScalar getSoftnessOrthoAng() { return m_softnessOrthoAng; } btScalar getRestitutionOrthoAng() { return m_restitutionOrthoAng; } btScalar getDampingOrthoAng() { return m_dampingOrthoAng; } void setSoftnessDirLin(btScalar softnessDirLin) { m_softnessDirLin = softnessDirLin; } void setRestitutionDirLin(btScalar restitutionDirLin) { m_restitutionDirLin = restitutionDirLin; } void setDampingDirLin(btScalar dampingDirLin) { m_dampingDirLin = dampingDirLin; } void setSoftnessDirAng(btScalar softnessDirAng) { m_softnessDirAng = softnessDirAng; } void setRestitutionDirAng(btScalar restitutionDirAng) { m_restitutionDirAng = restitutionDirAng; } void setDampingDirAng(btScalar dampingDirAng) { m_dampingDirAng = dampingDirAng; } void setSoftnessLimLin(btScalar softnessLimLin) { m_softnessLimLin = softnessLimLin; } void setRestitutionLimLin(btScalar restitutionLimLin) { m_restitutionLimLin = restitutionLimLin; } void setDampingLimLin(btScalar dampingLimLin) { m_dampingLimLin = dampingLimLin; } void setSoftnessLimAng(btScalar softnessLimAng) { m_softnessLimAng = softnessLimAng; } void setRestitutionLimAng(btScalar restitutionLimAng) { m_restitutionLimAng = restitutionLimAng; } void setDampingLimAng(btScalar dampingLimAng) { m_dampingLimAng = dampingLimAng; } void setSoftnessOrthoLin(btScalar softnessOrthoLin) { m_softnessOrthoLin = softnessOrthoLin; } void setRestitutionOrthoLin(btScalar restitutionOrthoLin) { m_restitutionOrthoLin = restitutionOrthoLin; } void setDampingOrthoLin(btScalar dampingOrthoLin) { m_dampingOrthoLin = dampingOrthoLin; } void setSoftnessOrthoAng(btScalar softnessOrthoAng) { m_softnessOrthoAng = softnessOrthoAng; } void setRestitutionOrthoAng(btScalar restitutionOrthoAng) { m_restitutionOrthoAng = restitutionOrthoAng; } void setDampingOrthoAng(btScalar dampingOrthoAng) { m_dampingOrthoAng = dampingOrthoAng; } void setPoweredLinMotor(bool onOff) { m_poweredLinMotor = onOff; } bool getPoweredLinMotor() { return m_poweredLinMotor; } void setTargetLinMotorVelocity(btScalar targetLinMotorVelocity) { m_targetLinMotorVelocity = targetLinMotorVelocity; } btScalar getTargetLinMotorVelocity() { return m_targetLinMotorVelocity; } void setMaxLinMotorForce(btScalar maxLinMotorForce) { m_maxLinMotorForce = maxLinMotorForce; } btScalar getMaxLinMotorForce() { return m_maxLinMotorForce; } void setPoweredAngMotor(bool onOff) { m_poweredAngMotor = onOff; } bool getPoweredAngMotor() { return m_poweredAngMotor; } void setTargetAngMotorVelocity(btScalar targetAngMotorVelocity) { m_targetAngMotorVelocity = targetAngMotorVelocity; } btScalar getTargetAngMotorVelocity() { return m_targetAngMotorVelocity; } void setMaxAngMotorForce(btScalar maxAngMotorForce) { m_maxAngMotorForce = maxAngMotorForce; } btScalar getMaxAngMotorForce() { return m_maxAngMotorForce; } btScalar getLinearPos() const { return m_linPos; } btScalar getAngularPos() const { return m_angPos; } // access for ODE solver bool getSolveLinLimit() { return m_solveLinLim; } btScalar getLinDepth() { return m_depth[0]; } bool getSolveAngLimit() { return m_solveAngLim; } btScalar getAngDepth() { return m_angDepth; } // shared code used by ODE solver void calculateTransforms(const btTransform& transA, const btTransform& transB); void testLinLimits(); void testAngLimits(); // access for PE Solver btVector3 getAncorInA(); btVector3 getAncorInB(); // access for UseFrameOffset bool getUseFrameOffset() { return m_useOffsetForConstraintFrame; } void setUseFrameOffset(bool frameOffsetOnOff) { m_useOffsetForConstraintFrame = frameOffsetOnOff; } void setFrames(const btTransform& frameA, const btTransform& frameB) { m_frameInA = frameA; m_frameInB = frameB; calculateTransforms(m_rbA.getCenterOfMassTransform(), m_rbB.getCenterOfMassTransform()); buildJacobian(); } ///override the default global value of a parameter (such as ERP or CFM), optionally provide the axis (0..5). ///If no axis is provided, it uses the default axis for this constraint. virtual void setParam(int num, btScalar value, int axis = -1); ///return the local value of parameter virtual btScalar getParam(int num, int axis = -1) const; virtual int getFlags() const { return m_flags; } virtual int calculateSerializeBufferSize() const; ///fills the dataBuffer and returns the struct name (and 0 on failure) virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; }; ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 struct btSliderConstraintData { btTypedConstraintData m_typeConstraintData; btTransformFloatData m_rbAFrame; // constraint axii. Assumes z is hinge axis. btTransformFloatData m_rbBFrame; float m_linearUpperLimit; float m_linearLowerLimit; float m_angularUpperLimit; float m_angularLowerLimit; int m_useLinearReferenceFrameA; int m_useOffsetForConstraintFrame; }; struct btSliderConstraintDoubleData { btTypedConstraintDoubleData m_typeConstraintData; btTransformDoubleData m_rbAFrame; // constraint axii. Assumes z is hinge axis. btTransformDoubleData m_rbBFrame; double m_linearUpperLimit; double m_linearLowerLimit; double m_angularUpperLimit; double m_angularLowerLimit; int m_useLinearReferenceFrameA; int m_useOffsetForConstraintFrame; }; SIMD_FORCE_INLINE int btSliderConstraint::calculateSerializeBufferSize() const { return sizeof(btSliderConstraintData2); } ///fills the dataBuffer and returns the struct name (and 0 on failure) SIMD_FORCE_INLINE const char* btSliderConstraint::serialize(void* dataBuffer, btSerializer* serializer) const { btSliderConstraintData2* sliderData = (btSliderConstraintData2*)dataBuffer; btTypedConstraint::serialize(&sliderData->m_typeConstraintData, serializer); m_frameInA.serialize(sliderData->m_rbAFrame); m_frameInB.serialize(sliderData->m_rbBFrame); sliderData->m_linearUpperLimit = m_upperLinLimit; sliderData->m_linearLowerLimit = m_lowerLinLimit; sliderData->m_angularUpperLimit = m_upperAngLimit; sliderData->m_angularLowerLimit = m_lowerAngLimit; sliderData->m_useLinearReferenceFrameA = m_useLinearReferenceFrameA; sliderData->m_useOffsetForConstraintFrame = m_useOffsetForConstraintFrame; return btSliderConstraintDataName; } #endif //BT_SLIDER_CONSTRAINT_H ================================================ FILE: libraries/bullet/BulletDynamics/ConstraintSolver/btSolve2LinearConstraint.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_SOLVE_2LINEAR_CONSTRAINT_H #define BT_SOLVE_2LINEAR_CONSTRAINT_H #include "LinearMath/btMatrix3x3.h" #include "LinearMath/btVector3.h" class btRigidBody; /// constraint class used for lateral tyre friction. class btSolve2LinearConstraint { btScalar m_tau; btScalar m_damping; public: btSolve2LinearConstraint(btScalar tau, btScalar damping) { m_tau = tau; m_damping = damping; } // // solve unilateral constraint (equality, direct method) // void resolveUnilateralPairConstraint( btRigidBody* body0, btRigidBody* body1, const btMatrix3x3& world2A, const btMatrix3x3& world2B, const btVector3& invInertiaADiag, const btScalar invMassA, const btVector3& linvelA, const btVector3& angvelA, const btVector3& rel_posA1, const btVector3& invInertiaBDiag, const btScalar invMassB, const btVector3& linvelB, const btVector3& angvelB, const btVector3& rel_posA2, btScalar depthA, const btVector3& normalA, const btVector3& rel_posB1, const btVector3& rel_posB2, btScalar depthB, const btVector3& normalB, btScalar& imp0, btScalar& imp1); // // solving 2x2 lcp problem (inequality, direct solution ) // void resolveBilateralPairConstraint( btRigidBody* body0, btRigidBody* body1, const btMatrix3x3& world2A, const btMatrix3x3& world2B, const btVector3& invInertiaADiag, const btScalar invMassA, const btVector3& linvelA, const btVector3& angvelA, const btVector3& rel_posA1, const btVector3& invInertiaBDiag, const btScalar invMassB, const btVector3& linvelB, const btVector3& angvelB, const btVector3& rel_posA2, btScalar depthA, const btVector3& normalA, const btVector3& rel_posB1, const btVector3& rel_posB2, btScalar depthB, const btVector3& normalB, btScalar& imp0, btScalar& imp1); /* void resolveAngularConstraint( const btMatrix3x3& invInertiaAWS, const btScalar invMassA, const btVector3& linvelA,const btVector3& angvelA, const btVector3& rel_posA1, const btMatrix3x3& invInertiaBWS, const btScalar invMassB, const btVector3& linvelB,const btVector3& angvelB, const btVector3& rel_posA2, btScalar depthA, const btVector3& normalA, const btVector3& rel_posB1,const btVector3& rel_posB2, btScalar depthB, const btVector3& normalB, btScalar& imp0,btScalar& imp1); */ }; #endif //BT_SOLVE_2LINEAR_CONSTRAINT_H ================================================ FILE: libraries/bullet/BulletDynamics/ConstraintSolver/btSolverBody.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_SOLVER_BODY_H #define BT_SOLVER_BODY_H class btRigidBody; #include "LinearMath/btVector3.h" #include "LinearMath/btMatrix3x3.h" #include "LinearMath/btAlignedAllocator.h" #include "LinearMath/btTransformUtil.h" ///Until we get other contributions, only use SIMD on Windows, when using Visual Studio 2008 or later, and not double precision #ifdef BT_USE_SSE #define USE_SIMD 1 #endif // #ifdef USE_SIMD struct btSimdScalar { SIMD_FORCE_INLINE btSimdScalar() { } SIMD_FORCE_INLINE btSimdScalar(float fl) : m_vec128(_mm_set1_ps(fl)) { } SIMD_FORCE_INLINE btSimdScalar(__m128 v128) : m_vec128(v128) { } union { __m128 m_vec128; float m_floats[4]; int m_ints[4]; btScalar m_unusedPadding; }; SIMD_FORCE_INLINE __m128 get128() { return m_vec128; } SIMD_FORCE_INLINE const __m128 get128() const { return m_vec128; } SIMD_FORCE_INLINE void set128(__m128 v128) { m_vec128 = v128; } SIMD_FORCE_INLINE operator __m128() { return m_vec128; } SIMD_FORCE_INLINE operator const __m128() const { return m_vec128; } SIMD_FORCE_INLINE operator float() const { return m_floats[0]; } }; ///@brief Return the elementwise product of two btSimdScalar SIMD_FORCE_INLINE btSimdScalar operator*(const btSimdScalar& v1, const btSimdScalar& v2) { return btSimdScalar(_mm_mul_ps(v1.get128(), v2.get128())); } ///@brief Return the elementwise product of two btSimdScalar SIMD_FORCE_INLINE btSimdScalar operator+(const btSimdScalar& v1, const btSimdScalar& v2) { return btSimdScalar(_mm_add_ps(v1.get128(), v2.get128())); } #else #define btSimdScalar btScalar #endif ///The btSolverBody is an internal datastructure for the constraint solver. Only necessary data is packed to increase cache coherence/performance. ATTRIBUTE_ALIGNED16(struct) btSolverBody { BT_DECLARE_ALIGNED_ALLOCATOR(); btTransform m_worldTransform; btVector3 m_deltaLinearVelocity; btVector3 m_deltaAngularVelocity; btVector3 m_angularFactor; btVector3 m_linearFactor; btVector3 m_invMass; btVector3 m_pushVelocity; btVector3 m_turnVelocity; btVector3 m_linearVelocity; btVector3 m_angularVelocity; btVector3 m_externalForceImpulse; btVector3 m_externalTorqueImpulse; btRigidBody* m_originalBody; void setWorldTransform(const btTransform& worldTransform) { m_worldTransform = worldTransform; } const btTransform& getWorldTransform() const { return m_worldTransform; } SIMD_FORCE_INLINE void getVelocityInLocalPointNoDelta(const btVector3& rel_pos, btVector3& velocity) const { if (m_originalBody) velocity = m_linearVelocity + m_externalForceImpulse + (m_angularVelocity + m_externalTorqueImpulse).cross(rel_pos); else velocity.setValue(0, 0, 0); } SIMD_FORCE_INLINE void getVelocityInLocalPointObsolete(const btVector3& rel_pos, btVector3& velocity) const { if (m_originalBody) velocity = m_linearVelocity + m_deltaLinearVelocity + (m_angularVelocity + m_deltaAngularVelocity).cross(rel_pos); else velocity.setValue(0, 0, 0); } SIMD_FORCE_INLINE void getAngularVelocity(btVector3 & angVel) const { if (m_originalBody) angVel = m_angularVelocity + m_deltaAngularVelocity; else angVel.setValue(0, 0, 0); } //Optimization for the iterative solver: avoid calculating constant terms involving inertia, normal, relative position SIMD_FORCE_INLINE void applyImpulse(const btVector3& linearComponent, const btVector3& angularComponent, const btScalar impulseMagnitude) { if (m_originalBody) { m_deltaLinearVelocity += linearComponent * impulseMagnitude * m_linearFactor; m_deltaAngularVelocity += angularComponent * (impulseMagnitude * m_angularFactor); } } SIMD_FORCE_INLINE void internalApplyPushImpulse(const btVector3& linearComponent, const btVector3& angularComponent, btScalar impulseMagnitude) { if (m_originalBody) { m_pushVelocity += linearComponent * impulseMagnitude * m_linearFactor; m_turnVelocity += angularComponent * (impulseMagnitude * m_angularFactor); } } const btVector3& getDeltaLinearVelocity() const { return m_deltaLinearVelocity; } const btVector3& getDeltaAngularVelocity() const { return m_deltaAngularVelocity; } const btVector3& getPushVelocity() const { return m_pushVelocity; } const btVector3& getTurnVelocity() const { return m_turnVelocity; } //////////////////////////////////////////////// ///some internal methods, don't use them btVector3& internalGetDeltaLinearVelocity() { return m_deltaLinearVelocity; } btVector3& internalGetDeltaAngularVelocity() { return m_deltaAngularVelocity; } const btVector3& internalGetAngularFactor() const { return m_angularFactor; } const btVector3& internalGetInvMass() const { return m_invMass; } void internalSetInvMass(const btVector3& invMass) { m_invMass = invMass; } btVector3& internalGetPushVelocity() { return m_pushVelocity; } btVector3& internalGetTurnVelocity() { return m_turnVelocity; } SIMD_FORCE_INLINE void internalGetVelocityInLocalPointObsolete(const btVector3& rel_pos, btVector3& velocity) const { velocity = m_linearVelocity + m_deltaLinearVelocity + (m_angularVelocity + m_deltaAngularVelocity).cross(rel_pos); } SIMD_FORCE_INLINE void internalGetAngularVelocity(btVector3 & angVel) const { angVel = m_angularVelocity + m_deltaAngularVelocity; } //Optimization for the iterative solver: avoid calculating constant terms involving inertia, normal, relative position SIMD_FORCE_INLINE void internalApplyImpulse(const btVector3& linearComponent, const btVector3& angularComponent, const btScalar impulseMagnitude) { if (m_originalBody) { m_deltaLinearVelocity += linearComponent * impulseMagnitude * m_linearFactor; m_deltaAngularVelocity += angularComponent * (impulseMagnitude * m_angularFactor); } } void writebackVelocity() { if (m_originalBody) { m_linearVelocity += m_deltaLinearVelocity; m_angularVelocity += m_deltaAngularVelocity; //m_originalBody->setCompanionId(-1); } } void writebackVelocityAndTransform(btScalar timeStep, btScalar splitImpulseTurnErp) { (void)timeStep; if (m_originalBody) { m_linearVelocity += m_deltaLinearVelocity; m_angularVelocity += m_deltaAngularVelocity; //correct the position/orientation based on push/turn recovery btTransform newTransform; if (m_pushVelocity[0] != 0.f || m_pushVelocity[1] != 0 || m_pushVelocity[2] != 0 || m_turnVelocity[0] != 0.f || m_turnVelocity[1] != 0 || m_turnVelocity[2] != 0) { // btQuaternion orn = m_worldTransform.getRotation(); btTransformUtil::integrateTransform(m_worldTransform, m_pushVelocity, m_turnVelocity * splitImpulseTurnErp, timeStep, newTransform); m_worldTransform = newTransform; } //m_worldTransform.setRotation(orn); //m_originalBody->setCompanionId(-1); } } }; #endif //BT_SOLVER_BODY_H ================================================ FILE: libraries/bullet/BulletDynamics/ConstraintSolver/btSolverConstraint.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_SOLVER_CONSTRAINT_H #define BT_SOLVER_CONSTRAINT_H class btRigidBody; #include "LinearMath/btVector3.h" #include "LinearMath/btMatrix3x3.h" #include "btJacobianEntry.h" #include "LinearMath/btAlignedObjectArray.h" //#define NO_FRICTION_TANGENTIALS 1 #include "btSolverBody.h" ///1D constraint along a normal axis between bodyA and bodyB. It can be combined to solve contact and friction constraints. ATTRIBUTE_ALIGNED16(struct) btSolverConstraint { BT_DECLARE_ALIGNED_ALLOCATOR(); btVector3 m_relpos1CrossNormal; btVector3 m_contactNormal1; btVector3 m_relpos2CrossNormal; btVector3 m_contactNormal2; //usually m_contactNormal2 == -m_contactNormal1, but not always btVector3 m_angularComponentA; btVector3 m_angularComponentB; mutable btSimdScalar m_appliedPushImpulse; mutable btSimdScalar m_appliedImpulse; btScalar m_friction; btScalar m_jacDiagABInv; btScalar m_rhs; btScalar m_cfm; btScalar m_lowerLimit; btScalar m_upperLimit; btScalar m_rhsPenetration; union { void* m_originalContactPoint; btScalar m_unusedPadding4; int m_numRowsForNonContactConstraint; }; int m_overrideNumSolverIterations; int m_frictionIndex; int m_solverBodyIdA; int m_solverBodyIdB; enum btSolverConstraintType { BT_SOLVER_CONTACT_1D = 0, BT_SOLVER_FRICTION_1D }; }; typedef btAlignedObjectArray btConstraintArray; #endif //BT_SOLVER_CONSTRAINT_H ================================================ FILE: libraries/bullet/BulletDynamics/ConstraintSolver/btTypedConstraint.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2010 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_TYPED_CONSTRAINT_H #define BT_TYPED_CONSTRAINT_H #include "LinearMath/btScalar.h" #include "btSolverConstraint.h" #include "BulletDynamics/Dynamics/btRigidBody.h" #ifdef BT_USE_DOUBLE_PRECISION #define btTypedConstraintData2 btTypedConstraintDoubleData #define btTypedConstraintDataName "btTypedConstraintDoubleData" #else #define btTypedConstraintData2 btTypedConstraintFloatData #define btTypedConstraintDataName "btTypedConstraintFloatData" #endif //BT_USE_DOUBLE_PRECISION class btSerializer; //Don't change any of the existing enum values, so add enum types at the end for serialization compatibility enum btTypedConstraintType { POINT2POINT_CONSTRAINT_TYPE = 3, HINGE_CONSTRAINT_TYPE, CONETWIST_CONSTRAINT_TYPE, D6_CONSTRAINT_TYPE, SLIDER_CONSTRAINT_TYPE, CONTACT_CONSTRAINT_TYPE, D6_SPRING_CONSTRAINT_TYPE, GEAR_CONSTRAINT_TYPE, FIXED_CONSTRAINT_TYPE, D6_SPRING_2_CONSTRAINT_TYPE, MAX_CONSTRAINT_TYPE }; enum btConstraintParams { BT_CONSTRAINT_ERP = 1, BT_CONSTRAINT_STOP_ERP, BT_CONSTRAINT_CFM, BT_CONSTRAINT_STOP_CFM }; #if 1 #define btAssertConstrParams(_par) btAssert(_par) #else #define btAssertConstrParams(_par) #endif ATTRIBUTE_ALIGNED16(struct) btJointFeedback { BT_DECLARE_ALIGNED_ALLOCATOR(); btVector3 m_appliedForceBodyA; btVector3 m_appliedTorqueBodyA; btVector3 m_appliedForceBodyB; btVector3 m_appliedTorqueBodyB; }; ///TypedConstraint is the baseclass for Bullet constraints and vehicles ATTRIBUTE_ALIGNED16(class) btTypedConstraint : public btTypedObject { int m_userConstraintType; union { int m_userConstraintId; void* m_userConstraintPtr; }; btScalar m_breakingImpulseThreshold; bool m_isEnabled; bool m_needsFeedback; int m_overrideNumSolverIterations; btTypedConstraint& operator=(btTypedConstraint& other) { btAssert(0); (void)other; return *this; } protected: btRigidBody& m_rbA; btRigidBody& m_rbB; btScalar m_appliedImpulse; btScalar m_dbgDrawSize; btJointFeedback* m_jointFeedback; ///internal method used by the constraint solver, don't use them directly btScalar getMotorFactor(btScalar pos, btScalar lowLim, btScalar uppLim, btScalar vel, btScalar timeFact); public: BT_DECLARE_ALIGNED_ALLOCATOR(); virtual ~btTypedConstraint(){}; btTypedConstraint(btTypedConstraintType type, btRigidBody & rbA); btTypedConstraint(btTypedConstraintType type, btRigidBody & rbA, btRigidBody & rbB); struct btConstraintInfo1 { int m_numConstraintRows, nub; }; static btRigidBody& getFixedBody(); struct btConstraintInfo2 { // integrator parameters: frames per second (1/stepsize), default error // reduction parameter (0..1). btScalar fps, erp; // for the first and second body, pointers to two (linear and angular) // n*3 jacobian sub matrices, stored by rows. these matrices will have // been initialized to 0 on entry. if the second body is zero then the // J2xx pointers may be 0. btScalar *m_J1linearAxis, *m_J1angularAxis, *m_J2linearAxis, *m_J2angularAxis; // elements to jump from one row to the next in J's int rowskip; // right hand sides of the equation J*v = c + cfm * lambda. cfm is the // "constraint force mixing" vector. c is set to zero on entry, cfm is // set to a constant value (typically very small or zero) value on entry. btScalar *m_constraintError, *cfm; // lo and hi limits for variables (set to -/+ infinity on entry). btScalar *m_lowerLimit, *m_upperLimit; // number of solver iterations int m_numIterations; //damping of the velocity btScalar m_damping; }; int getOverrideNumSolverIterations() const { return m_overrideNumSolverIterations; } ///override the number of constraint solver iterations used to solve this constraint ///-1 will use the default number of iterations, as specified in SolverInfo.m_numIterations void setOverrideNumSolverIterations(int overideNumIterations) { m_overrideNumSolverIterations = overideNumIterations; } ///internal method used by the constraint solver, don't use them directly virtual void buildJacobian(){}; ///internal method used by the constraint solver, don't use them directly virtual void setupSolverConstraint(btConstraintArray & ca, int solverBodyA, int solverBodyB, btScalar timeStep) { (void)ca; (void)solverBodyA; (void)solverBodyB; (void)timeStep; } ///internal method used by the constraint solver, don't use them directly virtual void getInfo1(btConstraintInfo1 * info) = 0; ///internal method used by the constraint solver, don't use them directly virtual void getInfo2(btConstraintInfo2 * info) = 0; ///internal method used by the constraint solver, don't use them directly void internalSetAppliedImpulse(btScalar appliedImpulse) { m_appliedImpulse = appliedImpulse; } ///internal method used by the constraint solver, don't use them directly btScalar internalGetAppliedImpulse() { return m_appliedImpulse; } btScalar getBreakingImpulseThreshold() const { return m_breakingImpulseThreshold; } void setBreakingImpulseThreshold(btScalar threshold) { m_breakingImpulseThreshold = threshold; } bool isEnabled() const { return m_isEnabled; } void setEnabled(bool enabled) { m_isEnabled = enabled; } ///internal method used by the constraint solver, don't use them directly virtual void solveConstraintObsolete(btSolverBody& /*bodyA*/, btSolverBody& /*bodyB*/, btScalar /*timeStep*/){}; const btRigidBody& getRigidBodyA() const { return m_rbA; } const btRigidBody& getRigidBodyB() const { return m_rbB; } btRigidBody& getRigidBodyA() { return m_rbA; } btRigidBody& getRigidBodyB() { return m_rbB; } int getUserConstraintType() const { return m_userConstraintType; } void setUserConstraintType(int userConstraintType) { m_userConstraintType = userConstraintType; }; void setUserConstraintId(int uid) { m_userConstraintId = uid; } int getUserConstraintId() const { return m_userConstraintId; } void setUserConstraintPtr(void* ptr) { m_userConstraintPtr = ptr; } void* getUserConstraintPtr() { return m_userConstraintPtr; } void setJointFeedback(btJointFeedback * jointFeedback) { m_jointFeedback = jointFeedback; } const btJointFeedback* getJointFeedback() const { return m_jointFeedback; } btJointFeedback* getJointFeedback() { return m_jointFeedback; } int getUid() const { return m_userConstraintId; } bool needsFeedback() const { return m_needsFeedback; } ///enableFeedback will allow to read the applied linear and angular impulse ///use getAppliedImpulse, getAppliedLinearImpulse and getAppliedAngularImpulse to read feedback information void enableFeedback(bool needsFeedback) { m_needsFeedback = needsFeedback; } ///getAppliedImpulse is an estimated total applied impulse. ///This feedback could be used to determine breaking constraints or playing sounds. btScalar getAppliedImpulse() const { btAssert(m_needsFeedback); return m_appliedImpulse; } btTypedConstraintType getConstraintType() const { return btTypedConstraintType(m_objectType); } void setDbgDrawSize(btScalar dbgDrawSize) { m_dbgDrawSize = dbgDrawSize; } btScalar getDbgDrawSize() { return m_dbgDrawSize; } ///override the default global value of a parameter (such as ERP or CFM), optionally provide the axis (0..5). ///If no axis is provided, it uses the default axis for this constraint. virtual void setParam(int num, btScalar value, int axis = -1) = 0; ///return the local value of parameter virtual btScalar getParam(int num, int axis = -1) const = 0; virtual int calculateSerializeBufferSize() const; ///fills the dataBuffer and returns the struct name (and 0 on failure) virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; }; // returns angle in range [-SIMD_2_PI, SIMD_2_PI], closest to one of the limits // all arguments should be normalized angles (i.e. in range [-SIMD_PI, SIMD_PI]) SIMD_FORCE_INLINE btScalar btAdjustAngleToLimits(btScalar angleInRadians, btScalar angleLowerLimitInRadians, btScalar angleUpperLimitInRadians) { if (angleLowerLimitInRadians >= angleUpperLimitInRadians) { return angleInRadians; } else if (angleInRadians < angleLowerLimitInRadians) { btScalar diffLo = btFabs(btNormalizeAngle(angleLowerLimitInRadians - angleInRadians)); btScalar diffHi = btFabs(btNormalizeAngle(angleUpperLimitInRadians - angleInRadians)); return (diffLo < diffHi) ? angleInRadians : (angleInRadians + SIMD_2_PI); } else if (angleInRadians > angleUpperLimitInRadians) { btScalar diffHi = btFabs(btNormalizeAngle(angleInRadians - angleUpperLimitInRadians)); btScalar diffLo = btFabs(btNormalizeAngle(angleInRadians - angleLowerLimitInRadians)); return (diffLo < diffHi) ? (angleInRadians - SIMD_2_PI) : angleInRadians; } else { return angleInRadians; } } // clang-format off ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 struct btTypedConstraintFloatData { btRigidBodyFloatData *m_rbA; btRigidBodyFloatData *m_rbB; char *m_name; int m_objectType; int m_userConstraintType; int m_userConstraintId; int m_needsFeedback; float m_appliedImpulse; float m_dbgDrawSize; int m_disableCollisionsBetweenLinkedBodies; int m_overrideNumSolverIterations; float m_breakingImpulseThreshold; int m_isEnabled; }; ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 #define BT_BACKWARDS_COMPATIBLE_SERIALIZATION #ifdef BT_BACKWARDS_COMPATIBLE_SERIALIZATION ///this structure is not used, except for loading pre-2.82 .bullet files struct btTypedConstraintData { btRigidBodyData *m_rbA; btRigidBodyData *m_rbB; char *m_name; int m_objectType; int m_userConstraintType; int m_userConstraintId; int m_needsFeedback; float m_appliedImpulse; float m_dbgDrawSize; int m_disableCollisionsBetweenLinkedBodies; int m_overrideNumSolverIterations; float m_breakingImpulseThreshold; int m_isEnabled; }; #endif //BACKWARDS_COMPATIBLE struct btTypedConstraintDoubleData { btRigidBodyDoubleData *m_rbA; btRigidBodyDoubleData *m_rbB; char *m_name; int m_objectType; int m_userConstraintType; int m_userConstraintId; int m_needsFeedback; double m_appliedImpulse; double m_dbgDrawSize; int m_disableCollisionsBetweenLinkedBodies; int m_overrideNumSolverIterations; double m_breakingImpulseThreshold; int m_isEnabled; char padding[4]; }; // clang-format on SIMD_FORCE_INLINE int btTypedConstraint::calculateSerializeBufferSize() const { return sizeof(btTypedConstraintData2); } class btAngularLimit { private: btScalar m_center, m_halfRange, m_softness, m_biasFactor, m_relaxationFactor, m_correction, m_sign; bool m_solveLimit; public: /// Default constructor initializes limit as inactive, allowing free constraint movement btAngularLimit() : m_center(0.0f), m_halfRange(-1.0f), m_softness(0.9f), m_biasFactor(0.3f), m_relaxationFactor(1.0f), m_correction(0.0f), m_sign(0.0f), m_solveLimit(false) { } /// Sets all limit's parameters. /// When low > high limit becomes inactive. /// When high - low > 2PI limit is ineffective too becouse no angle can exceed the limit void set(btScalar low, btScalar high, btScalar _softness = 0.9f, btScalar _biasFactor = 0.3f, btScalar _relaxationFactor = 1.0f); /// Checks conastaint angle against limit. If limit is active and the angle violates the limit /// correction is calculated. void test(const btScalar angle); /// Returns limit's softness inline btScalar getSoftness() const { return m_softness; } /// Returns limit's bias factor inline btScalar getBiasFactor() const { return m_biasFactor; } /// Returns limit's relaxation factor inline btScalar getRelaxationFactor() const { return m_relaxationFactor; } /// Returns correction value evaluated when test() was invoked inline btScalar getCorrection() const { return m_correction; } /// Returns sign value evaluated when test() was invoked inline btScalar getSign() const { return m_sign; } /// Gives half of the distance between min and max limit angle inline btScalar getHalfRange() const { return m_halfRange; } /// Returns true when the last test() invocation recognized limit violation inline bool isLimit() const { return m_solveLimit; } /// Checks given angle against limit. If limit is active and angle doesn't fit it, the angle /// returned is modified so it equals to the limit closest to given angle. void fit(btScalar& angle) const; /// Returns correction value multiplied by sign value btScalar getError() const; btScalar getLow() const; btScalar getHigh() const; }; #endif //BT_TYPED_CONSTRAINT_H ================================================ FILE: libraries/bullet/BulletDynamics/ConstraintSolver/btUniversalConstraint.h ================================================ /* Bullet Continuous Collision Detection and Physics Library, http://bulletphysics.org Copyright (C) 2006, 2007 Sony Computer Entertainment Inc. This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_UNIVERSAL_CONSTRAINT_H #define BT_UNIVERSAL_CONSTRAINT_H #include "LinearMath/btVector3.h" #include "btTypedConstraint.h" #include "btGeneric6DofConstraint.h" /// Constraint similar to ODE Universal Joint /// has 2 rotatioonal degrees of freedom, similar to Euler rotations around Z (axis 1) /// and Y (axis 2) /// Description from ODE manual : /// "Given axis 1 on body 1, and axis 2 on body 2 that is perpendicular to axis 1, it keeps them perpendicular. /// In other words, rotation of the two bodies about the direction perpendicular to the two axes will be equal." ATTRIBUTE_ALIGNED16(class) btUniversalConstraint : public btGeneric6DofConstraint { protected: btVector3 m_anchor; btVector3 m_axis1; btVector3 m_axis2; public: BT_DECLARE_ALIGNED_ALLOCATOR(); // constructor // anchor, axis1 and axis2 are in world coordinate system // axis1 must be orthogonal to axis2 btUniversalConstraint(btRigidBody & rbA, btRigidBody & rbB, const btVector3& anchor, const btVector3& axis1, const btVector3& axis2); // access const btVector3& getAnchor() { return m_calculatedTransformA.getOrigin(); } const btVector3& getAnchor2() { return m_calculatedTransformB.getOrigin(); } const btVector3& getAxis1() { return m_axis1; } const btVector3& getAxis2() { return m_axis2; } btScalar getAngle1() { return getAngle(2); } btScalar getAngle2() { return getAngle(1); } // limits void setUpperLimit(btScalar ang1max, btScalar ang2max) { setAngularUpperLimit(btVector3(0.f, ang1max, ang2max)); } void setLowerLimit(btScalar ang1min, btScalar ang2min) { setAngularLowerLimit(btVector3(0.f, ang1min, ang2min)); } void setAxis(const btVector3& axis1, const btVector3& axis2); }; #endif // BT_UNIVERSAL_CONSTRAINT_H ================================================ FILE: libraries/bullet/BulletDynamics/Dynamics/btActionInterface.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef _BT_ACTION_INTERFACE_H #define _BT_ACTION_INTERFACE_H class btIDebugDraw; class btCollisionWorld; #include "LinearMath/btScalar.h" #include "btRigidBody.h" ///Basic interface to allow actions such as vehicles and characters to be updated inside a btDynamicsWorld class btActionInterface { protected: static btRigidBody& getFixedBody(); public: virtual ~btActionInterface() { } virtual void updateAction(btCollisionWorld* collisionWorld, btScalar deltaTimeStep) = 0; virtual void debugDraw(btIDebugDraw* debugDrawer) = 0; }; #endif //_BT_ACTION_INTERFACE_H ================================================ FILE: libraries/bullet/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_DISCRETE_DYNAMICS_WORLD_H #define BT_DISCRETE_DYNAMICS_WORLD_H #include "btDynamicsWorld.h" class btDispatcher; class btOverlappingPairCache; class btConstraintSolver; class btSimulationIslandManager; class btTypedConstraint; class btActionInterface; class btPersistentManifold; class btIDebugDraw; struct InplaceSolverIslandCallback; #include "LinearMath/btAlignedObjectArray.h" #include "LinearMath/btThreads.h" ///btDiscreteDynamicsWorld provides discrete rigid body simulation ///those classes replace the obsolete CcdPhysicsEnvironment/CcdPhysicsController ATTRIBUTE_ALIGNED16(class) btDiscreteDynamicsWorld : public btDynamicsWorld { protected: btAlignedObjectArray m_sortedConstraints; InplaceSolverIslandCallback* m_solverIslandCallback; btConstraintSolver* m_constraintSolver; btSimulationIslandManager* m_islandManager; btAlignedObjectArray m_constraints; btAlignedObjectArray m_nonStaticRigidBodies; btVector3 m_gravity; //for variable timesteps btScalar m_localTime; btScalar m_fixedTimeStep; //for variable timesteps bool m_ownsIslandManager; bool m_ownsConstraintSolver; bool m_synchronizeAllMotionStates; bool m_applySpeculativeContactRestitution; btAlignedObjectArray m_actions; int m_profileTimings; bool m_latencyMotionStateInterpolation; btAlignedObjectArray m_predictiveManifolds; btSpinMutex m_predictiveManifoldsMutex; // used to synchronize threads creating predictive contacts virtual void predictUnconstraintMotion(btScalar timeStep); void integrateTransformsInternal(btRigidBody * *bodies, int numBodies, btScalar timeStep); // can be called in parallel virtual void integrateTransforms(btScalar timeStep); virtual void calculateSimulationIslands(); virtual void updateActivationState(btScalar timeStep); void updateActions(btScalar timeStep); void startProfiling(btScalar timeStep); virtual void internalSingleStepSimulation(btScalar timeStep); void releasePredictiveContacts(); void createPredictiveContactsInternal(btRigidBody * *bodies, int numBodies, btScalar timeStep); // can be called in parallel virtual void createPredictiveContacts(btScalar timeStep); virtual void saveKinematicState(btScalar timeStep); void serializeRigidBodies(btSerializer * serializer); void serializeDynamicsWorldInfo(btSerializer * serializer); public: BT_DECLARE_ALIGNED_ALLOCATOR(); ///this btDiscreteDynamicsWorld constructor gets created objects from the user, and will not delete those btDiscreteDynamicsWorld(btDispatcher * dispatcher, btBroadphaseInterface * pairCache, btConstraintSolver * constraintSolver, btCollisionConfiguration * collisionConfiguration); virtual ~btDiscreteDynamicsWorld(); ///if maxSubSteps > 0, it will interpolate motion between fixedTimeStep's virtual int stepSimulation(btScalar timeStep, int maxSubSteps = 1, btScalar fixedTimeStep = btScalar(1.) / btScalar(60.)); virtual void solveConstraints(btContactSolverInfo & solverInfo); virtual void synchronizeMotionStates(); ///this can be useful to synchronize a single rigid body -> graphics object void synchronizeSingleMotionState(btRigidBody * body); virtual void addConstraint(btTypedConstraint * constraint, bool disableCollisionsBetweenLinkedBodies = false); virtual void removeConstraint(btTypedConstraint * constraint); virtual void addAction(btActionInterface*); virtual void removeAction(btActionInterface*); btSimulationIslandManager* getSimulationIslandManager() { return m_islandManager; } const btSimulationIslandManager* getSimulationIslandManager() const { return m_islandManager; } btCollisionWorld* getCollisionWorld() { return this; } virtual void setGravity(const btVector3& gravity); virtual btVector3 getGravity() const; virtual void addCollisionObject(btCollisionObject * collisionObject, int collisionFilterGroup = btBroadphaseProxy::StaticFilter, int collisionFilterMask = btBroadphaseProxy::AllFilter ^ btBroadphaseProxy::StaticFilter); virtual void addRigidBody(btRigidBody * body); virtual void addRigidBody(btRigidBody * body, int group, int mask); virtual void removeRigidBody(btRigidBody * body); ///removeCollisionObject will first check if it is a rigid body, if so call removeRigidBody otherwise call btCollisionWorld::removeCollisionObject virtual void removeCollisionObject(btCollisionObject * collisionObject); virtual void debugDrawConstraint(btTypedConstraint * constraint); virtual void debugDrawWorld(); virtual void setConstraintSolver(btConstraintSolver * solver); virtual btConstraintSolver* getConstraintSolver(); virtual int getNumConstraints() const; virtual btTypedConstraint* getConstraint(int index); virtual const btTypedConstraint* getConstraint(int index) const; virtual btDynamicsWorldType getWorldType() const { return BT_DISCRETE_DYNAMICS_WORLD; } ///the forces on each rigidbody is accumulating together with gravity. clear this after each timestep. virtual void clearForces(); ///apply gravity, call this once per timestep virtual void applyGravity(); virtual void setNumTasks(int numTasks) { (void)numTasks; } ///obsolete, use updateActions instead virtual void updateVehicles(btScalar timeStep) { updateActions(timeStep); } ///obsolete, use addAction instead virtual void addVehicle(btActionInterface * vehicle); ///obsolete, use removeAction instead virtual void removeVehicle(btActionInterface * vehicle); ///obsolete, use addAction instead virtual void addCharacter(btActionInterface * character); ///obsolete, use removeAction instead virtual void removeCharacter(btActionInterface * character); void setSynchronizeAllMotionStates(bool synchronizeAll) { m_synchronizeAllMotionStates = synchronizeAll; } bool getSynchronizeAllMotionStates() const { return m_synchronizeAllMotionStates; } void setApplySpeculativeContactRestitution(bool enable) { m_applySpeculativeContactRestitution = enable; } bool getApplySpeculativeContactRestitution() const { return m_applySpeculativeContactRestitution; } ///Preliminary serialization test for Bullet 2.76. Loading those files requires a separate parser (see Bullet/Demos/SerializeDemo) virtual void serialize(btSerializer * serializer); ///Interpolate motion state between previous and current transform, instead of current and next transform. ///This can relieve discontinuities in the rendering, due to penetrations void setLatencyMotionStateInterpolation(bool latencyInterpolation) { m_latencyMotionStateInterpolation = latencyInterpolation; } bool getLatencyMotionStateInterpolation() const { return m_latencyMotionStateInterpolation; } btAlignedObjectArray& getNonStaticRigidBodies() { return m_nonStaticRigidBodies; } const btAlignedObjectArray& getNonStaticRigidBodies() const { return m_nonStaticRigidBodies; } }; #endif //BT_DISCRETE_DYNAMICS_WORLD_H ================================================ FILE: libraries/bullet/BulletDynamics/Dynamics/btDiscreteDynamicsWorldMt.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_DISCRETE_DYNAMICS_WORLD_MT_H #define BT_DISCRETE_DYNAMICS_WORLD_MT_H #include "btDiscreteDynamicsWorld.h" #include "btSimulationIslandManagerMt.h" #include "BulletDynamics/ConstraintSolver/btConstraintSolver.h" /// /// btConstraintSolverPoolMt - masquerades as a constraint solver, but really it is a threadsafe pool of them. /// /// Each solver in the pool is protected by a mutex. When solveGroup is called from a thread, /// the pool looks for a solver that isn't being used by another thread, locks it, and dispatches the /// call to the solver. /// So long as there are at least as many solvers as there are hardware threads, it should never need to /// spin wait. /// class btConstraintSolverPoolMt : public btConstraintSolver { public: // create the solvers for me explicit btConstraintSolverPoolMt(int numSolvers); // pass in fully constructed solvers (destructor will delete them) btConstraintSolverPoolMt(btConstraintSolver** solvers, int numSolvers); virtual ~btConstraintSolverPoolMt(); ///solve a group of constraints virtual btScalar solveGroup(btCollisionObject** bodies, int numBodies, btPersistentManifold** manifolds, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& info, btIDebugDraw* debugDrawer, btDispatcher* dispatcher) BT_OVERRIDE; virtual void reset() BT_OVERRIDE; virtual btConstraintSolverType getSolverType() const BT_OVERRIDE { return m_solverType; } private: const static size_t kCacheLineSize = 128; struct ThreadSolver { btConstraintSolver* solver; btSpinMutex mutex; char _cachelinePadding[kCacheLineSize - sizeof(btSpinMutex) - sizeof(void*)]; // keep mutexes from sharing a cache line }; btAlignedObjectArray m_solvers; btConstraintSolverType m_solverType; ThreadSolver* getAndLockThreadSolver(); void init(btConstraintSolver** solvers, int numSolvers); }; /// /// btDiscreteDynamicsWorldMt -- a version of DiscreteDynamicsWorld with some minor changes to support /// solving simulation islands on multiple threads. /// /// Should function exactly like btDiscreteDynamicsWorld. /// Also 3 methods that iterate over all of the rigidbodies can run in parallel: /// - predictUnconstraintMotion /// - integrateTransforms /// - createPredictiveContacts /// ATTRIBUTE_ALIGNED16(class) btDiscreteDynamicsWorldMt : public btDiscreteDynamicsWorld { protected: btConstraintSolver* m_constraintSolverMt; virtual void solveConstraints(btContactSolverInfo & solverInfo) BT_OVERRIDE; virtual void predictUnconstraintMotion(btScalar timeStep) BT_OVERRIDE; struct UpdaterCreatePredictiveContacts : public btIParallelForBody { btScalar timeStep; btRigidBody** rigidBodies; btDiscreteDynamicsWorldMt* world; void forLoop(int iBegin, int iEnd) const BT_OVERRIDE { world->createPredictiveContactsInternal(&rigidBodies[iBegin], iEnd - iBegin, timeStep); } }; virtual void createPredictiveContacts(btScalar timeStep) BT_OVERRIDE; struct UpdaterIntegrateTransforms : public btIParallelForBody { btScalar timeStep; btRigidBody** rigidBodies; btDiscreteDynamicsWorldMt* world; void forLoop(int iBegin, int iEnd) const BT_OVERRIDE { world->integrateTransformsInternal(&rigidBodies[iBegin], iEnd - iBegin, timeStep); } }; virtual void integrateTransforms(btScalar timeStep) BT_OVERRIDE; public: BT_DECLARE_ALIGNED_ALLOCATOR(); btDiscreteDynamicsWorldMt(btDispatcher * dispatcher, btBroadphaseInterface * pairCache, btConstraintSolverPoolMt * solverPool, // Note this should be a solver-pool for multi-threading btConstraintSolver * constraintSolverMt, // single multi-threaded solver for large islands (or NULL) btCollisionConfiguration * collisionConfiguration); virtual ~btDiscreteDynamicsWorldMt(); virtual int stepSimulation(btScalar timeStep, int maxSubSteps, btScalar fixedTimeStep) BT_OVERRIDE; }; #endif //BT_DISCRETE_DYNAMICS_WORLD_H ================================================ FILE: libraries/bullet/BulletDynamics/Dynamics/btDynamicsWorld.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_DYNAMICS_WORLD_H #define BT_DYNAMICS_WORLD_H #include "BulletCollision/CollisionDispatch/btCollisionWorld.h" #include "BulletDynamics/ConstraintSolver/btContactSolverInfo.h" class btTypedConstraint; class btActionInterface; class btConstraintSolver; class btDynamicsWorld; /// Type for the callback for each tick typedef void (*btInternalTickCallback)(btDynamicsWorld* world, btScalar timeStep); enum btDynamicsWorldType { BT_SIMPLE_DYNAMICS_WORLD = 1, BT_DISCRETE_DYNAMICS_WORLD = 2, BT_CONTINUOUS_DYNAMICS_WORLD = 3, BT_SOFT_RIGID_DYNAMICS_WORLD = 4, BT_GPU_DYNAMICS_WORLD = 5, BT_SOFT_MULTIBODY_DYNAMICS_WORLD = 6, BT_DEFORMABLE_MULTIBODY_DYNAMICS_WORLD = 7 }; ///The btDynamicsWorld is the interface class for several dynamics implementation, basic, discrete, parallel, and continuous etc. class btDynamicsWorld : public btCollisionWorld { protected: btInternalTickCallback m_internalTickCallback; btInternalTickCallback m_internalPreTickCallback; void* m_worldUserInfo; btContactSolverInfo m_solverInfo; public: btDynamicsWorld(btDispatcher* dispatcher, btBroadphaseInterface* broadphase, btCollisionConfiguration* collisionConfiguration) : btCollisionWorld(dispatcher, broadphase, collisionConfiguration), m_internalTickCallback(0), m_internalPreTickCallback(0), m_worldUserInfo(0) { } virtual ~btDynamicsWorld() { } ///stepSimulation proceeds the simulation over 'timeStep', units in preferably in seconds. ///By default, Bullet will subdivide the timestep in constant substeps of each 'fixedTimeStep'. ///in order to keep the simulation real-time, the maximum number of substeps can be clamped to 'maxSubSteps'. ///You can disable subdividing the timestep/substepping by passing maxSubSteps=0 as second argument to stepSimulation, but in that case you have to keep the timeStep constant. virtual int stepSimulation(btScalar timeStep, int maxSubSteps = 1, btScalar fixedTimeStep = btScalar(1.) / btScalar(60.)) = 0; virtual void debugDrawWorld() = 0; virtual void addConstraint(btTypedConstraint* constraint, bool disableCollisionsBetweenLinkedBodies = false) { (void)constraint; (void)disableCollisionsBetweenLinkedBodies; } virtual void removeConstraint(btTypedConstraint* constraint) { (void)constraint; } virtual void addAction(btActionInterface* action) = 0; virtual void removeAction(btActionInterface* action) = 0; //once a rigidbody is added to the dynamics world, it will get this gravity assigned //existing rigidbodies in the world get gravity assigned too, during this method virtual void setGravity(const btVector3& gravity) = 0; virtual btVector3 getGravity() const = 0; virtual void synchronizeMotionStates() = 0; virtual void addRigidBody(btRigidBody* body) = 0; virtual void addRigidBody(btRigidBody* body, int group, int mask) = 0; virtual void removeRigidBody(btRigidBody* body) = 0; virtual void setConstraintSolver(btConstraintSolver* solver) = 0; virtual btConstraintSolver* getConstraintSolver() = 0; virtual int getNumConstraints() const { return 0; } virtual btTypedConstraint* getConstraint(int index) { (void)index; return 0; } virtual const btTypedConstraint* getConstraint(int index) const { (void)index; return 0; } virtual btDynamicsWorldType getWorldType() const = 0; virtual void clearForces() = 0; /// Set the callback for when an internal tick (simulation substep) happens, optional user info void setInternalTickCallback(btInternalTickCallback cb, void* worldUserInfo = 0, bool isPreTick = false) { if (isPreTick) { m_internalPreTickCallback = cb; } else { m_internalTickCallback = cb; } m_worldUserInfo = worldUserInfo; } void setWorldUserInfo(void* worldUserInfo) { m_worldUserInfo = worldUserInfo; } void* getWorldUserInfo() const { return m_worldUserInfo; } btContactSolverInfo& getSolverInfo() { return m_solverInfo; } const btContactSolverInfo& getSolverInfo() const { return m_solverInfo; } ///obsolete, use addAction instead. virtual void addVehicle(btActionInterface* vehicle) { (void)vehicle; } ///obsolete, use removeAction instead virtual void removeVehicle(btActionInterface* vehicle) { (void)vehicle; } ///obsolete, use addAction instead. virtual void addCharacter(btActionInterface* character) { (void)character; } ///obsolete, use removeAction instead virtual void removeCharacter(btActionInterface* character) { (void)character; } }; ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 struct btDynamicsWorldDoubleData { btContactSolverInfoDoubleData m_solverInfo; btVector3DoubleData m_gravity; }; ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 struct btDynamicsWorldFloatData { btContactSolverInfoFloatData m_solverInfo; btVector3FloatData m_gravity; }; #endif //BT_DYNAMICS_WORLD_H ================================================ FILE: libraries/bullet/BulletDynamics/Dynamics/btRigidBody.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_RIGIDBODY_H #define BT_RIGIDBODY_H #include "LinearMath/btAlignedObjectArray.h" #include "LinearMath/btTransform.h" #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" #include "BulletCollision/CollisionDispatch/btCollisionObject.h" class btCollisionShape; class btMotionState; class btTypedConstraint; extern btScalar gDeactivationTime; extern bool gDisableDeactivation; #ifdef BT_USE_DOUBLE_PRECISION #define btRigidBodyData btRigidBodyDoubleData #define btRigidBodyDataName "btRigidBodyDoubleData" #else #define btRigidBodyData btRigidBodyFloatData #define btRigidBodyDataName "btRigidBodyFloatData" #endif //BT_USE_DOUBLE_PRECISION enum btRigidBodyFlags { BT_DISABLE_WORLD_GRAVITY = 1, ///BT_ENABLE_GYROPSCOPIC_FORCE flags is enabled by default in Bullet 2.83 and onwards. ///and it BT_ENABLE_GYROPSCOPIC_FORCE becomes equivalent to BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_BODY ///See Demos/GyroscopicDemo and computeGyroscopicImpulseImplicit BT_ENABLE_GYROSCOPIC_FORCE_EXPLICIT = 2, BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_WORLD = 4, BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_BODY = 8, BT_ENABLE_GYROPSCOPIC_FORCE = BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_BODY, }; ///The btRigidBody is the main class for rigid body objects. It is derived from btCollisionObject, so it keeps a pointer to a btCollisionShape. ///It is recommended for performance and memory use to share btCollisionShape objects whenever possible. ///There are 3 types of rigid bodies: ///- A) Dynamic rigid bodies, with positive mass. Motion is controlled by rigid body dynamics. ///- B) Fixed objects with zero mass. They are not moving (basically collision objects) ///- C) Kinematic objects, which are objects without mass, but the user can move them. There is one-way interaction, and Bullet calculates a velocity based on the timestep and previous and current world transform. ///Bullet automatically deactivates dynamic rigid bodies, when the velocity is below a threshold for a given time. ///Deactivated (sleeping) rigid bodies don't take any processing time, except a minor broadphase collision detection impact (to allow active objects to activate/wake up sleeping objects) class btRigidBody : public btCollisionObject { btMatrix3x3 m_invInertiaTensorWorld; btVector3 m_linearVelocity; btVector3 m_angularVelocity; btScalar m_inverseMass; btVector3 m_linearFactor; btVector3 m_gravity; btVector3 m_gravity_acceleration; btVector3 m_invInertiaLocal; btVector3 m_totalForce; btVector3 m_totalTorque; btScalar m_linearDamping; btScalar m_angularDamping; bool m_additionalDamping; btScalar m_additionalDampingFactor; btScalar m_additionalLinearDampingThresholdSqr; btScalar m_additionalAngularDampingThresholdSqr; btScalar m_additionalAngularDampingFactor; btScalar m_linearSleepingThreshold; btScalar m_angularSleepingThreshold; //m_optionalMotionState allows to automatic synchronize the world transform for active objects btMotionState* m_optionalMotionState; //keep track of typed constraints referencing this rigid body, to disable collision between linked bodies btAlignedObjectArray m_constraintRefs; int m_rigidbodyFlags; int m_debugBodyId; protected: ATTRIBUTE_ALIGNED16(btVector3 m_deltaLinearVelocity); btVector3 m_deltaAngularVelocity; btVector3 m_angularFactor; btVector3 m_invMass; btVector3 m_pushVelocity; btVector3 m_turnVelocity; public: ///The btRigidBodyConstructionInfo structure provides information to create a rigid body. Setting mass to zero creates a fixed (non-dynamic) rigid body. ///For dynamic objects, you can use the collision shape to approximate the local inertia tensor, otherwise use the zero vector (default argument) ///You can use the motion state to synchronize the world transform between physics and graphics objects. ///And if the motion state is provided, the rigid body will initialize its initial world transform from the motion state, ///m_startWorldTransform is only used when you don't provide a motion state. struct btRigidBodyConstructionInfo { btScalar m_mass; ///When a motionState is provided, the rigid body will initialize its world transform from the motion state ///In this case, m_startWorldTransform is ignored. btMotionState* m_motionState; btTransform m_startWorldTransform; btCollisionShape* m_collisionShape; btVector3 m_localInertia; btScalar m_linearDamping; btScalar m_angularDamping; ///best simulation results when friction is non-zero btScalar m_friction; ///the m_rollingFriction prevents rounded shapes, such as spheres, cylinders and capsules from rolling forever. ///See Bullet/Demos/RollingFrictionDemo for usage btScalar m_rollingFriction; btScalar m_spinningFriction; //torsional friction around contact normal ///best simulation results using zero restitution. btScalar m_restitution; btScalar m_linearSleepingThreshold; btScalar m_angularSleepingThreshold; //Additional damping can help avoiding lowpass jitter motion, help stability for ragdolls etc. //Such damping is undesirable, so once the overall simulation quality of the rigid body dynamics system has improved, this should become obsolete bool m_additionalDamping; btScalar m_additionalDampingFactor; btScalar m_additionalLinearDampingThresholdSqr; btScalar m_additionalAngularDampingThresholdSqr; btScalar m_additionalAngularDampingFactor; btRigidBodyConstructionInfo(btScalar mass, btMotionState* motionState, btCollisionShape* collisionShape, const btVector3& localInertia = btVector3(0, 0, 0)) : m_mass(mass), m_motionState(motionState), m_collisionShape(collisionShape), m_localInertia(localInertia), m_linearDamping(btScalar(0.)), m_angularDamping(btScalar(0.)), m_friction(btScalar(0.5)), m_rollingFriction(btScalar(0)), m_spinningFriction(btScalar(0)), m_restitution(btScalar(0.)), m_linearSleepingThreshold(btScalar(0.8)), m_angularSleepingThreshold(btScalar(1.f)), m_additionalDamping(false), m_additionalDampingFactor(btScalar(0.005)), m_additionalLinearDampingThresholdSqr(btScalar(0.01)), m_additionalAngularDampingThresholdSqr(btScalar(0.01)), m_additionalAngularDampingFactor(btScalar(0.01)) { m_startWorldTransform.setIdentity(); } }; ///btRigidBody constructor using construction info btRigidBody(const btRigidBodyConstructionInfo& constructionInfo); ///btRigidBody constructor for backwards compatibility. ///To specify friction (etc) during rigid body construction, please use the other constructor (using btRigidBodyConstructionInfo) btRigidBody(btScalar mass, btMotionState* motionState, btCollisionShape* collisionShape, const btVector3& localInertia = btVector3(0, 0, 0)); virtual ~btRigidBody() { //No constraints should point to this rigidbody //Remove constraints from the dynamics world before you delete the related rigidbodies. btAssert(m_constraintRefs.size() == 0); } protected: ///setupRigidBody is only used internally by the constructor void setupRigidBody(const btRigidBodyConstructionInfo& constructionInfo); public: void proceedToTransform(const btTransform& newTrans); ///to keep collision detection and dynamics separate we don't store a rigidbody pointer ///but a rigidbody is derived from btCollisionObject, so we can safely perform an upcast static const btRigidBody* upcast(const btCollisionObject* colObj) { if (colObj->getInternalType() & btCollisionObject::CO_RIGID_BODY) return (const btRigidBody*)colObj; return 0; } static btRigidBody* upcast(btCollisionObject* colObj) { if (colObj->getInternalType() & btCollisionObject::CO_RIGID_BODY) return (btRigidBody*)colObj; return 0; } /// continuous collision detection needs prediction void predictIntegratedTransform(btScalar step, btTransform& predictedTransform); void saveKinematicState(btScalar step); void applyGravity(); void clearGravity(); void setGravity(const btVector3& acceleration); const btVector3& getGravity() const { return m_gravity_acceleration; } void setDamping(btScalar lin_damping, btScalar ang_damping); btScalar getLinearDamping() const { return m_linearDamping; } btScalar getAngularDamping() const { return m_angularDamping; } btScalar getLinearSleepingThreshold() const { return m_linearSleepingThreshold; } btScalar getAngularSleepingThreshold() const { return m_angularSleepingThreshold; } void applyDamping(btScalar timeStep); SIMD_FORCE_INLINE const btCollisionShape* getCollisionShape() const { return m_collisionShape; } SIMD_FORCE_INLINE btCollisionShape* getCollisionShape() { return m_collisionShape; } void setMassProps(btScalar mass, const btVector3& inertia); const btVector3& getLinearFactor() const { return m_linearFactor; } void setLinearFactor(const btVector3& linearFactor) { m_linearFactor = linearFactor; m_invMass = m_linearFactor * m_inverseMass; } btScalar getInvMass() const { return m_inverseMass; } btScalar getMass() const { return m_inverseMass == btScalar(0.) ? btScalar(0.) : btScalar(1.0) / m_inverseMass; } const btMatrix3x3& getInvInertiaTensorWorld() const { return m_invInertiaTensorWorld; } void integrateVelocities(btScalar step); void setCenterOfMassTransform(const btTransform& xform); void applyCentralForce(const btVector3& force) { m_totalForce += force * m_linearFactor; } const btVector3& getTotalForce() const { return m_totalForce; }; const btVector3& getTotalTorque() const { return m_totalTorque; }; const btVector3& getInvInertiaDiagLocal() const { return m_invInertiaLocal; }; void setInvInertiaDiagLocal(const btVector3& diagInvInertia) { m_invInertiaLocal = diagInvInertia; } void setSleepingThresholds(btScalar linear, btScalar angular) { m_linearSleepingThreshold = linear; m_angularSleepingThreshold = angular; } void applyTorque(const btVector3& torque) { m_totalTorque += torque * m_angularFactor; #if defined(BT_CLAMP_VELOCITY_TO) && BT_CLAMP_VELOCITY_TO > 0 clampVelocity(m_totalTorque); #endif } void applyForce(const btVector3& force, const btVector3& rel_pos) { applyCentralForce(force); applyTorque(rel_pos.cross(force * m_linearFactor)); } void applyCentralImpulse(const btVector3& impulse) { m_linearVelocity += impulse * m_linearFactor * m_inverseMass; #if defined(BT_CLAMP_VELOCITY_TO) && BT_CLAMP_VELOCITY_TO > 0 clampVelocity(m_linearVelocity); #endif } void applyTorqueImpulse(const btVector3& torque) { m_angularVelocity += m_invInertiaTensorWorld * torque * m_angularFactor; #if defined(BT_CLAMP_VELOCITY_TO) && BT_CLAMP_VELOCITY_TO > 0 clampVelocity(m_angularVelocity); #endif } void applyImpulse(const btVector3& impulse, const btVector3& rel_pos) { if (m_inverseMass != btScalar(0.)) { applyCentralImpulse(impulse); if (m_angularFactor) { applyTorqueImpulse(rel_pos.cross(impulse * m_linearFactor)); } } } void applyPushImpulse(const btVector3& impulse, const btVector3& rel_pos) { if (m_inverseMass != btScalar(0.)) { applyCentralPushImpulse(impulse); if (m_angularFactor) { applyTorqueTurnImpulse(rel_pos.cross(impulse * m_linearFactor)); } } } btVector3 getPushVelocity() const { return m_pushVelocity; } btVector3 getTurnVelocity() const { return m_turnVelocity; } void setPushVelocity(const btVector3& v) { m_pushVelocity = v; } #if defined(BT_CLAMP_VELOCITY_TO) && BT_CLAMP_VELOCITY_TO > 0 void clampVelocity(btVector3& v) const { v.setX( fmax(-BT_CLAMP_VELOCITY_TO, fmin(BT_CLAMP_VELOCITY_TO, v.getX())) ); v.setY( fmax(-BT_CLAMP_VELOCITY_TO, fmin(BT_CLAMP_VELOCITY_TO, v.getY())) ); v.setZ( fmax(-BT_CLAMP_VELOCITY_TO, fmin(BT_CLAMP_VELOCITY_TO, v.getZ())) ); } #endif void setTurnVelocity(const btVector3& v) { m_turnVelocity = v; #if defined(BT_CLAMP_VELOCITY_TO) && BT_CLAMP_VELOCITY_TO > 0 clampVelocity(m_turnVelocity); #endif } void applyCentralPushImpulse(const btVector3& impulse) { m_pushVelocity += impulse * m_linearFactor * m_inverseMass; #if defined(BT_CLAMP_VELOCITY_TO) && BT_CLAMP_VELOCITY_TO > 0 clampVelocity(m_pushVelocity); #endif } void applyTorqueTurnImpulse(const btVector3& torque) { m_turnVelocity += m_invInertiaTensorWorld * torque * m_angularFactor; #if defined(BT_CLAMP_VELOCITY_TO) && BT_CLAMP_VELOCITY_TO > 0 clampVelocity(m_turnVelocity); #endif } void clearForces() { m_totalForce.setValue(btScalar(0.0), btScalar(0.0), btScalar(0.0)); m_totalTorque.setValue(btScalar(0.0), btScalar(0.0), btScalar(0.0)); } void updateInertiaTensor(); const btVector3& getCenterOfMassPosition() const { return m_worldTransform.getOrigin(); } btQuaternion getOrientation() const; const btTransform& getCenterOfMassTransform() const { return m_worldTransform; } const btVector3& getLinearVelocity() const { return m_linearVelocity; } const btVector3& getAngularVelocity() const { return m_angularVelocity; } inline void setLinearVelocity(const btVector3& lin_vel) { m_updateRevision++; m_linearVelocity = lin_vel; #if defined(BT_CLAMP_VELOCITY_TO) && BT_CLAMP_VELOCITY_TO > 0 clampVelocity(m_linearVelocity); #endif } inline void setAngularVelocity(const btVector3& ang_vel) { m_updateRevision++; m_angularVelocity = ang_vel; #if defined(BT_CLAMP_VELOCITY_TO) && BT_CLAMP_VELOCITY_TO > 0 clampVelocity(m_angularVelocity); #endif } btVector3 getVelocityInLocalPoint(const btVector3& rel_pos) const { //we also calculate lin/ang velocity for kinematic objects return m_linearVelocity + m_angularVelocity.cross(rel_pos); //for kinematic objects, we could also use use: // return (m_worldTransform(rel_pos) - m_interpolationWorldTransform(rel_pos)) / m_kinematicTimeStep; } btVector3 getPushVelocityInLocalPoint(const btVector3& rel_pos) const { //we also calculate lin/ang velocity for kinematic objects return m_pushVelocity + m_turnVelocity.cross(rel_pos); } void translate(const btVector3& v) { m_worldTransform.getOrigin() += v; } void getAabb(btVector3& aabbMin, btVector3& aabbMax) const; SIMD_FORCE_INLINE btScalar computeImpulseDenominator(const btVector3& pos, const btVector3& normal) const { btVector3 r0 = pos - getCenterOfMassPosition(); btVector3 c0 = (r0).cross(normal); btVector3 vec = (c0 * getInvInertiaTensorWorld()).cross(r0); return m_inverseMass + normal.dot(vec); } SIMD_FORCE_INLINE btScalar computeAngularImpulseDenominator(const btVector3& axis) const { btVector3 vec = axis * getInvInertiaTensorWorld(); return axis.dot(vec); } SIMD_FORCE_INLINE void updateDeactivation(btScalar timeStep) { if ((getActivationState() == ISLAND_SLEEPING) || (getActivationState() == DISABLE_DEACTIVATION)) return; if ((getLinearVelocity().length2() < m_linearSleepingThreshold * m_linearSleepingThreshold) && (getAngularVelocity().length2() < m_angularSleepingThreshold * m_angularSleepingThreshold)) { m_deactivationTime += timeStep; } else { m_deactivationTime = btScalar(0.); setActivationState(0); } } SIMD_FORCE_INLINE bool wantsSleeping() { if (getActivationState() == DISABLE_DEACTIVATION) return false; //disable deactivation if (gDisableDeactivation || (gDeactivationTime == btScalar(0.))) return false; if ((getActivationState() == ISLAND_SLEEPING) || (getActivationState() == WANTS_DEACTIVATION)) return true; if (m_deactivationTime > gDeactivationTime) { return true; } return false; } const btBroadphaseProxy* getBroadphaseProxy() const { return m_broadphaseHandle; } btBroadphaseProxy* getBroadphaseProxy() { return m_broadphaseHandle; } void setNewBroadphaseProxy(btBroadphaseProxy* broadphaseProxy) { m_broadphaseHandle = broadphaseProxy; } //btMotionState allows to automatic synchronize the world transform for active objects btMotionState* getMotionState() { return m_optionalMotionState; } const btMotionState* getMotionState() const { return m_optionalMotionState; } void setMotionState(btMotionState* motionState) { m_optionalMotionState = motionState; if (m_optionalMotionState) motionState->getWorldTransform(m_worldTransform); } //for experimental overriding of friction/contact solver func int m_contactSolverType; int m_frictionSolverType; void setAngularFactor(const btVector3& angFac) { m_updateRevision++; m_angularFactor = angFac; } void setAngularFactor(btScalar angFac) { m_updateRevision++; m_angularFactor.setValue(angFac, angFac, angFac); } const btVector3& getAngularFactor() const { return m_angularFactor; } //is this rigidbody added to a btCollisionWorld/btDynamicsWorld/btBroadphase? bool isInWorld() const { return (getBroadphaseProxy() != 0); } void addConstraintRef(btTypedConstraint* c); void removeConstraintRef(btTypedConstraint* c); btTypedConstraint* getConstraintRef(int index) { return m_constraintRefs[index]; } int getNumConstraintRefs() const { return m_constraintRefs.size(); } void setFlags(int flags) { m_rigidbodyFlags = flags; } int getFlags() const { return m_rigidbodyFlags; } ///perform implicit force computation in world space btVector3 computeGyroscopicImpulseImplicit_World(btScalar dt) const; ///perform implicit force computation in body space (inertial frame) btVector3 computeGyroscopicImpulseImplicit_Body(btScalar step) const; ///explicit version is best avoided, it gains energy btVector3 computeGyroscopicForceExplicit(btScalar maxGyroscopicForce) const; btVector3 getLocalInertia() const; /////////////////////////////////////////////// virtual int calculateSerializeBufferSize() const; ///fills the dataBuffer and returns the struct name (and 0 on failure) virtual const char* serialize(void* dataBuffer, class btSerializer* serializer) const; virtual void serializeSingleObject(class btSerializer* serializer) const; }; //@todo add m_optionalMotionState and m_constraintRefs to btRigidBodyData ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 struct btRigidBodyFloatData { btCollisionObjectFloatData m_collisionObjectData; btMatrix3x3FloatData m_invInertiaTensorWorld; btVector3FloatData m_linearVelocity; btVector3FloatData m_angularVelocity; btVector3FloatData m_angularFactor; btVector3FloatData m_linearFactor; btVector3FloatData m_gravity; btVector3FloatData m_gravity_acceleration; btVector3FloatData m_invInertiaLocal; btVector3FloatData m_totalForce; btVector3FloatData m_totalTorque; float m_inverseMass; float m_linearDamping; float m_angularDamping; float m_additionalDampingFactor; float m_additionalLinearDampingThresholdSqr; float m_additionalAngularDampingThresholdSqr; float m_additionalAngularDampingFactor; float m_linearSleepingThreshold; float m_angularSleepingThreshold; int m_additionalDamping; }; ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 struct btRigidBodyDoubleData { btCollisionObjectDoubleData m_collisionObjectData; btMatrix3x3DoubleData m_invInertiaTensorWorld; btVector3DoubleData m_linearVelocity; btVector3DoubleData m_angularVelocity; btVector3DoubleData m_angularFactor; btVector3DoubleData m_linearFactor; btVector3DoubleData m_gravity; btVector3DoubleData m_gravity_acceleration; btVector3DoubleData m_invInertiaLocal; btVector3DoubleData m_totalForce; btVector3DoubleData m_totalTorque; double m_inverseMass; double m_linearDamping; double m_angularDamping; double m_additionalDampingFactor; double m_additionalLinearDampingThresholdSqr; double m_additionalAngularDampingThresholdSqr; double m_additionalAngularDampingFactor; double m_linearSleepingThreshold; double m_angularSleepingThreshold; int m_additionalDamping; char m_padding[4]; }; #endif //BT_RIGIDBODY_H ================================================ FILE: libraries/bullet/BulletDynamics/Dynamics/btSimpleDynamicsWorld.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_SIMPLE_DYNAMICS_WORLD_H #define BT_SIMPLE_DYNAMICS_WORLD_H #include "btDynamicsWorld.h" class btDispatcher; class btOverlappingPairCache; class btConstraintSolver; ///The btSimpleDynamicsWorld serves as unit-test and to verify more complicated and optimized dynamics worlds. ///Please use btDiscreteDynamicsWorld instead class btSimpleDynamicsWorld : public btDynamicsWorld { protected: btConstraintSolver* m_constraintSolver; bool m_ownsConstraintSolver; void predictUnconstraintMotion(btScalar timeStep); void integrateTransforms(btScalar timeStep); btVector3 m_gravity; public: ///this btSimpleDynamicsWorld constructor creates dispatcher, broadphase pairCache and constraintSolver btSimpleDynamicsWorld(btDispatcher* dispatcher, btBroadphaseInterface* pairCache, btConstraintSolver* constraintSolver, btCollisionConfiguration* collisionConfiguration); virtual ~btSimpleDynamicsWorld(); ///maxSubSteps/fixedTimeStep for interpolation is currently ignored for btSimpleDynamicsWorld, use btDiscreteDynamicsWorld instead virtual int stepSimulation(btScalar timeStep, int maxSubSteps = 1, btScalar fixedTimeStep = btScalar(1.) / btScalar(60.)); virtual void setGravity(const btVector3& gravity); virtual btVector3 getGravity() const; virtual void addRigidBody(btRigidBody* body); virtual void addRigidBody(btRigidBody* body, int group, int mask); virtual void removeRigidBody(btRigidBody* body); virtual void debugDrawWorld(); virtual void addAction(btActionInterface* action); virtual void removeAction(btActionInterface* action); ///removeCollisionObject will first check if it is a rigid body, if so call removeRigidBody otherwise call btCollisionWorld::removeCollisionObject virtual void removeCollisionObject(btCollisionObject* collisionObject); virtual void updateAabbs(); virtual void synchronizeMotionStates(); virtual void setConstraintSolver(btConstraintSolver* solver); virtual btConstraintSolver* getConstraintSolver(); virtual btDynamicsWorldType getWorldType() const { return BT_SIMPLE_DYNAMICS_WORLD; } virtual void clearForces(); }; #endif //BT_SIMPLE_DYNAMICS_WORLD_H ================================================ FILE: libraries/bullet/BulletDynamics/Dynamics/btSimulationIslandManagerMt.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_SIMULATION_ISLAND_MANAGER_MT_H #define BT_SIMULATION_ISLAND_MANAGER_MT_H #include "BulletCollision/CollisionDispatch/btSimulationIslandManager.h" class btTypedConstraint; class btConstraintSolver; struct btContactSolverInfo; class btIDebugDraw; /// /// SimulationIslandManagerMt -- Multithread capable version of SimulationIslandManager /// Splits the world up into islands which can be solved in parallel. /// In order to solve islands in parallel, an IslandDispatch function /// must be provided which will dispatch calls to multiple threads. /// The amount of parallelism that can be achieved depends on the number /// of islands. If only a single island exists, then no parallelism is /// possible. /// class btSimulationIslandManagerMt : public btSimulationIslandManager { public: struct Island { // a simulation island consisting of bodies, manifolds and constraints, // to be passed into a constraint solver. btAlignedObjectArray bodyArray; btAlignedObjectArray manifoldArray; btAlignedObjectArray constraintArray; int id; // island id bool isSleeping; void append(const Island& other); // add bodies, manifolds, constraints to my own }; struct SolverParams { btConstraintSolver* m_solverPool; btConstraintSolver* m_solverMt; btContactSolverInfo* m_solverInfo; btIDebugDraw* m_debugDrawer; btDispatcher* m_dispatcher; }; static void solveIsland(btConstraintSolver* solver, Island& island, const SolverParams& solverParams); typedef void (*IslandDispatchFunc)(btAlignedObjectArray* islands, const SolverParams& solverParams); static void serialIslandDispatch(btAlignedObjectArray* islandsPtr, const SolverParams& solverParams); static void parallelIslandDispatch(btAlignedObjectArray* islandsPtr, const SolverParams& solverParams); protected: btAlignedObjectArray m_allocatedIslands; // owner of all Islands btAlignedObjectArray m_activeIslands; // islands actively in use btAlignedObjectArray m_freeIslands; // islands ready to be reused btAlignedObjectArray m_lookupIslandFromId; // big lookup table to map islandId to Island pointer Island* m_batchIsland; int m_minimumSolverBatchSize; int m_batchIslandMinBodyCount; IslandDispatchFunc m_islandDispatch; Island* getIsland(int id); virtual Island* allocateIsland(int id, int numBodies); virtual void initIslandPools(); virtual void addBodiesToIslands(btCollisionWorld* collisionWorld); virtual void addManifoldsToIslands(btDispatcher* dispatcher); virtual void addConstraintsToIslands(btAlignedObjectArray& constraints); virtual void mergeIslands(); public: btSimulationIslandManagerMt(); virtual ~btSimulationIslandManagerMt(); virtual void buildAndProcessIslands(btDispatcher* dispatcher, btCollisionWorld* collisionWorld, btAlignedObjectArray& constraints, const SolverParams& solverParams); virtual void buildIslands(btDispatcher* dispatcher, btCollisionWorld* colWorld); int getMinimumSolverBatchSize() const { return m_minimumSolverBatchSize; } void setMinimumSolverBatchSize(int sz) { m_minimumSolverBatchSize = sz; } IslandDispatchFunc getIslandDispatchFunction() const { return m_islandDispatch; } // allow users to set their own dispatch function for multithreaded dispatch void setIslandDispatchFunction(IslandDispatchFunc func) { m_islandDispatch = func; } }; #endif //BT_SIMULATION_ISLAND_MANAGER_H ================================================ FILE: libraries/bullet/BulletDynamics/Vehicle/btRaycastVehicle.h ================================================ /* * Copyright (c) 2005 Erwin Coumans http://continuousphysics.com/Bullet/ * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appear in all copies. * Erwin Coumans makes no representations about the suitability * of this software for any purpose. * It is provided "as is" without express or implied warranty. */ #ifndef BT_RAYCASTVEHICLE_H #define BT_RAYCASTVEHICLE_H #include "BulletDynamics/Dynamics/btRigidBody.h" #include "BulletDynamics/ConstraintSolver/btTypedConstraint.h" #include "btVehicleRaycaster.h" class btDynamicsWorld; #include "LinearMath/btAlignedObjectArray.h" #include "btWheelInfo.h" #include "BulletDynamics/Dynamics/btActionInterface.h" //class btVehicleTuning; ///rayCast vehicle, very special constraint that turn a rigidbody into a vehicle. class btRaycastVehicle : public btActionInterface { btAlignedObjectArray m_forwardWS; btAlignedObjectArray m_axle; btAlignedObjectArray m_forwardImpulse; btAlignedObjectArray m_sideImpulse; ///backwards compatibility int m_userConstraintType; int m_userConstraintId; public: class btVehicleTuning { public: btVehicleTuning() : m_suspensionStiffness(btScalar(5.88)), m_suspensionCompression(btScalar(0.83)), m_suspensionDamping(btScalar(0.88)), m_maxSuspensionTravelCm(btScalar(500.)), m_frictionSlip(btScalar(10.5)), m_maxSuspensionForce(btScalar(6000.)) { } btScalar m_suspensionStiffness; btScalar m_suspensionCompression; btScalar m_suspensionDamping; btScalar m_maxSuspensionTravelCm; btScalar m_frictionSlip; btScalar m_maxSuspensionForce; }; private: btVehicleRaycaster* m_vehicleRaycaster; btScalar m_pitchControl; btScalar m_steeringValue; btScalar m_currentVehicleSpeedKmHour; btRigidBody* m_chassisBody; int m_indexRightAxis; int m_indexUpAxis; int m_indexForwardAxis; void defaultInit(const btVehicleTuning& tuning); public: //constructor to create a car from an existing rigidbody btRaycastVehicle(const btVehicleTuning& tuning, btRigidBody* chassis, btVehicleRaycaster* raycaster); virtual ~btRaycastVehicle(); ///btActionInterface interface virtual void updateAction(btCollisionWorld* collisionWorld, btScalar step) { (void)collisionWorld; updateVehicle(step); } ///btActionInterface interface void debugDraw(btIDebugDraw* debugDrawer); const btTransform& getChassisWorldTransform() const; btScalar rayCast(btWheelInfo& wheel); virtual void updateVehicle(btScalar step); void resetSuspension(); btScalar getSteeringValue(int wheel) const; void setSteeringValue(btScalar steering, int wheel); void applyEngineForce(btScalar force, int wheel); const btTransform& getWheelTransformWS(int wheelIndex) const; void updateWheelTransform(int wheelIndex, bool interpolatedTransform = true); // void setRaycastWheelInfo( int wheelIndex , bool isInContact, const btVector3& hitPoint, const btVector3& hitNormal,btScalar depth); btWheelInfo& addWheel(const btVector3& connectionPointCS0, const btVector3& wheelDirectionCS0, const btVector3& wheelAxleCS, btScalar suspensionRestLength, btScalar wheelRadius, const btVehicleTuning& tuning, bool isFrontWheel); inline int getNumWheels() const { return int(m_wheelInfo.size()); } btAlignedObjectArray m_wheelInfo; const btWheelInfo& getWheelInfo(int index) const; btWheelInfo& getWheelInfo(int index); void updateWheelTransformsWS(btWheelInfo& wheel, bool interpolatedTransform = true); void setBrake(btScalar brake, int wheelIndex); void setPitchControl(btScalar pitch) { m_pitchControl = pitch; } void updateSuspension(btScalar deltaTime); virtual void updateFriction(btScalar timeStep); inline btRigidBody* getRigidBody() { return m_chassisBody; } const btRigidBody* getRigidBody() const { return m_chassisBody; } inline int getRightAxis() const { return m_indexRightAxis; } inline int getUpAxis() const { return m_indexUpAxis; } inline int getForwardAxis() const { return m_indexForwardAxis; } ///Worldspace forward vector btVector3 getForwardVector() const { const btTransform& chassisTrans = getChassisWorldTransform(); btVector3 forwardW( chassisTrans.getBasis()[0][m_indexForwardAxis], chassisTrans.getBasis()[1][m_indexForwardAxis], chassisTrans.getBasis()[2][m_indexForwardAxis]); return forwardW; } ///Velocity of vehicle (positive if velocity vector has same direction as foward vector) btScalar getCurrentSpeedKmHour() const { return m_currentVehicleSpeedKmHour; } virtual void setCoordinateSystem(int rightIndex, int upIndex, int forwardIndex) { m_indexRightAxis = rightIndex; m_indexUpAxis = upIndex; m_indexForwardAxis = forwardIndex; } ///backwards compatibility int getUserConstraintType() const { return m_userConstraintType; } void setUserConstraintType(int userConstraintType) { m_userConstraintType = userConstraintType; }; void setUserConstraintId(int uid) { m_userConstraintId = uid; } int getUserConstraintId() const { return m_userConstraintId; } }; class btDefaultVehicleRaycaster : public btVehicleRaycaster { btDynamicsWorld* m_dynamicsWorld; public: btDefaultVehicleRaycaster(btDynamicsWorld* world) : m_dynamicsWorld(world) { } virtual void* castRay(const btVector3& from, const btVector3& to, btVehicleRaycasterResult& result); }; #endif //BT_RAYCASTVEHICLE_H ================================================ FILE: libraries/bullet/BulletDynamics/Vehicle/btVehicleRaycaster.h ================================================ /* * Copyright (c) 2005 Erwin Coumans http://bulletphysics.org * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appear in all copies. * Erwin Coumans makes no representations about the suitability * of this software for any purpose. * It is provided "as is" without express or implied warranty. */ #ifndef BT_VEHICLE_RAYCASTER_H #define BT_VEHICLE_RAYCASTER_H #include "LinearMath/btVector3.h" /// btVehicleRaycaster is provides interface for between vehicle simulation and raycasting struct btVehicleRaycaster { virtual ~btVehicleRaycaster() { } struct btVehicleRaycasterResult { btVehicleRaycasterResult() : m_distFraction(btScalar(-1.)){}; btVector3 m_hitPointInWorld; btVector3 m_hitNormalInWorld; btScalar m_distFraction; }; virtual void* castRay(const btVector3& from, const btVector3& to, btVehicleRaycasterResult& result) = 0; }; #endif //BT_VEHICLE_RAYCASTER_H ================================================ FILE: libraries/bullet/BulletDynamics/Vehicle/btWheelInfo.h ================================================ /* * Copyright (c) 2005 Erwin Coumans http://continuousphysics.com/Bullet/ * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appear in all copies. * Erwin Coumans makes no representations about the suitability * of this software for any purpose. * It is provided "as is" without express or implied warranty. */ #ifndef BT_WHEEL_INFO_H #define BT_WHEEL_INFO_H #include "LinearMath/btVector3.h" #include "LinearMath/btTransform.h" class btRigidBody; struct btWheelInfoConstructionInfo { btVector3 m_chassisConnectionCS; btVector3 m_wheelDirectionCS; btVector3 m_wheelAxleCS; btScalar m_suspensionRestLength; btScalar m_maxSuspensionTravelCm; btScalar m_wheelRadius; btScalar m_suspensionStiffness; btScalar m_wheelsDampingCompression; btScalar m_wheelsDampingRelaxation; btScalar m_frictionSlip; btScalar m_maxSuspensionForce; bool m_bIsFrontWheel; }; /// btWheelInfo contains information per wheel about friction and suspension. struct btWheelInfo { struct RaycastInfo { //set by raycaster btVector3 m_contactNormalWS; //contactnormal btVector3 m_contactPointWS; //raycast hitpoint btScalar m_suspensionLength; btVector3 m_hardPointWS; //raycast starting point btVector3 m_wheelDirectionWS; //direction in worldspace btVector3 m_wheelAxleWS; // axle in worldspace bool m_isInContact; void* m_groundObject; //could be general void* ptr }; RaycastInfo m_raycastInfo; btTransform m_worldTransform; btVector3 m_chassisConnectionPointCS; //const btVector3 m_wheelDirectionCS; //const btVector3 m_wheelAxleCS; // const or modified by steering btScalar m_suspensionRestLength1; //const btScalar m_maxSuspensionTravelCm; btScalar getSuspensionRestLength() const; btScalar m_wheelsRadius; //const btScalar m_suspensionStiffness; //const btScalar m_wheelsDampingCompression; //const btScalar m_wheelsDampingRelaxation; //const btScalar m_frictionSlip; btScalar m_steering; btScalar m_rotation; btScalar m_deltaRotation; btScalar m_rollInfluence; btScalar m_maxSuspensionForce; btScalar m_engineForce; btScalar m_brake; bool m_bIsFrontWheel; void* m_clientInfo; //can be used to store pointer to sync transforms... btWheelInfo() {} btWheelInfo(btWheelInfoConstructionInfo& ci) { m_suspensionRestLength1 = ci.m_suspensionRestLength; m_maxSuspensionTravelCm = ci.m_maxSuspensionTravelCm; m_wheelsRadius = ci.m_wheelRadius; m_suspensionStiffness = ci.m_suspensionStiffness; m_wheelsDampingCompression = ci.m_wheelsDampingCompression; m_wheelsDampingRelaxation = ci.m_wheelsDampingRelaxation; m_chassisConnectionPointCS = ci.m_chassisConnectionCS; m_wheelDirectionCS = ci.m_wheelDirectionCS; m_wheelAxleCS = ci.m_wheelAxleCS; m_frictionSlip = ci.m_frictionSlip; m_steering = btScalar(0.); m_engineForce = btScalar(0.); m_rotation = btScalar(0.); m_deltaRotation = btScalar(0.); m_brake = btScalar(0.); m_rollInfluence = btScalar(0.1); m_bIsFrontWheel = ci.m_bIsFrontWheel; m_maxSuspensionForce = ci.m_maxSuspensionForce; } void updateWheel(const btRigidBody& chassis, RaycastInfo& raycastInfo); btScalar m_clippedInvContactDotSuspension; btScalar m_suspensionRelativeVelocity; //calculated by suspension btScalar m_wheelsSuspensionForce; btScalar m_skidInfo; }; #endif //BT_WHEEL_INFO_H ================================================ FILE: libraries/bullet/LinearMath/TaskScheduler/btThreadSupportInterface.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2018 Erwin Coumans http://bulletphysics.com This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_THREAD_SUPPORT_INTERFACE_H #define BT_THREAD_SUPPORT_INTERFACE_H class btCriticalSection { public: btCriticalSection() {} virtual ~btCriticalSection() {} virtual void lock() = 0; virtual void unlock() = 0; }; class btThreadSupportInterface { public: virtual ~btThreadSupportInterface() {} virtual int getNumWorkerThreads() const = 0; // number of worker threads (total number of logical processors - 1) virtual int getCacheFriendlyNumThreads() const = 0; // the number of logical processors sharing a single L3 cache virtual int getLogicalToPhysicalCoreRatio() const = 0; // the number of logical processors per physical processor (usually 1 or 2) virtual void runTask(int threadIndex, void* userData) = 0; virtual void waitForAllTasks() = 0; virtual btCriticalSection* createCriticalSection() = 0; virtual void deleteCriticalSection(btCriticalSection* criticalSection) = 0; typedef void (*ThreadFunc)(void* userPtr); struct ConstructionInfo { ConstructionInfo(const char* uniqueName, ThreadFunc userThreadFunc, int threadStackSize = 65535) : m_uniqueName(uniqueName), m_userThreadFunc(userThreadFunc), m_threadStackSize(threadStackSize) { } const char* m_uniqueName; ThreadFunc m_userThreadFunc; int m_threadStackSize; }; static btThreadSupportInterface* create(const ConstructionInfo& info); }; #endif //BT_THREAD_SUPPORT_INTERFACE_H ================================================ FILE: libraries/bullet/LinearMath/btAabbUtil2.h ================================================ /* Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_AABB_UTIL2 #define BT_AABB_UTIL2 #include "btTransform.h" #include "btVector3.h" #include "btMinMax.h" SIMD_FORCE_INLINE void AabbExpand(btVector3& aabbMin, btVector3& aabbMax, const btVector3& expansionMin, const btVector3& expansionMax) { aabbMin = aabbMin + expansionMin; aabbMax = aabbMax + expansionMax; } /// conservative test for overlap between two aabbs SIMD_FORCE_INLINE bool TestPointAgainstAabb2(const btVector3& aabbMin1, const btVector3& aabbMax1, const btVector3& point) { bool overlap = true; overlap = (aabbMin1.getX() > point.getX() || aabbMax1.getX() < point.getX()) ? false : overlap; overlap = (aabbMin1.getZ() > point.getZ() || aabbMax1.getZ() < point.getZ()) ? false : overlap; overlap = (aabbMin1.getY() > point.getY() || aabbMax1.getY() < point.getY()) ? false : overlap; return overlap; } /// conservative test for overlap between two aabbs SIMD_FORCE_INLINE bool TestAabbAgainstAabb2(const btVector3& aabbMin1, const btVector3& aabbMax1, const btVector3& aabbMin2, const btVector3& aabbMax2) { bool overlap = true; overlap = (aabbMin1.getX() > aabbMax2.getX() || aabbMax1.getX() < aabbMin2.getX()) ? false : overlap; overlap = (aabbMin1.getZ() > aabbMax2.getZ() || aabbMax1.getZ() < aabbMin2.getZ()) ? false : overlap; overlap = (aabbMin1.getY() > aabbMax2.getY() || aabbMax1.getY() < aabbMin2.getY()) ? false : overlap; return overlap; } /// conservative test for overlap between triangle and aabb SIMD_FORCE_INLINE bool TestTriangleAgainstAabb2(const btVector3* vertices, const btVector3& aabbMin, const btVector3& aabbMax) { const btVector3& p1 = vertices[0]; const btVector3& p2 = vertices[1]; const btVector3& p3 = vertices[2]; if (btMin(btMin(p1[0], p2[0]), p3[0]) > aabbMax[0]) return false; if (btMax(btMax(p1[0], p2[0]), p3[0]) < aabbMin[0]) return false; if (btMin(btMin(p1[2], p2[2]), p3[2]) > aabbMax[2]) return false; if (btMax(btMax(p1[2], p2[2]), p3[2]) < aabbMin[2]) return false; if (btMin(btMin(p1[1], p2[1]), p3[1]) > aabbMax[1]) return false; if (btMax(btMax(p1[1], p2[1]), p3[1]) < aabbMin[1]) return false; return true; } SIMD_FORCE_INLINE int btOutcode(const btVector3& p, const btVector3& halfExtent) { return (p.getX() < -halfExtent.getX() ? 0x01 : 0x0) | (p.getX() > halfExtent.getX() ? 0x08 : 0x0) | (p.getY() < -halfExtent.getY() ? 0x02 : 0x0) | (p.getY() > halfExtent.getY() ? 0x10 : 0x0) | (p.getZ() < -halfExtent.getZ() ? 0x4 : 0x0) | (p.getZ() > halfExtent.getZ() ? 0x20 : 0x0); } SIMD_FORCE_INLINE bool btRayAabb2(const btVector3& rayFrom, const btVector3& rayInvDirection, const unsigned int raySign[3], const btVector3 bounds[2], btScalar& tmin, btScalar lambda_min, btScalar lambda_max) { btScalar tmax, tymin, tymax, tzmin, tzmax; tmin = (bounds[raySign[0]].getX() - rayFrom.getX()) * rayInvDirection.getX(); tmax = (bounds[1 - raySign[0]].getX() - rayFrom.getX()) * rayInvDirection.getX(); tymin = (bounds[raySign[1]].getY() - rayFrom.getY()) * rayInvDirection.getY(); tymax = (bounds[1 - raySign[1]].getY() - rayFrom.getY()) * rayInvDirection.getY(); if ((tmin > tymax) || (tymin > tmax)) return false; if (tymin > tmin) tmin = tymin; if (tymax < tmax) tmax = tymax; tzmin = (bounds[raySign[2]].getZ() - rayFrom.getZ()) * rayInvDirection.getZ(); tzmax = (bounds[1 - raySign[2]].getZ() - rayFrom.getZ()) * rayInvDirection.getZ(); if ((tmin > tzmax) || (tzmin > tmax)) return false; if (tzmin > tmin) tmin = tzmin; if (tzmax < tmax) tmax = tzmax; return ((tmin < lambda_max) && (tmax > lambda_min)); } SIMD_FORCE_INLINE bool btRayAabb(const btVector3& rayFrom, const btVector3& rayTo, const btVector3& aabbMin, const btVector3& aabbMax, btScalar& param, btVector3& normal) { btVector3 aabbHalfExtent = (aabbMax - aabbMin) * btScalar(0.5); btVector3 aabbCenter = (aabbMax + aabbMin) * btScalar(0.5); btVector3 source = rayFrom - aabbCenter; btVector3 target = rayTo - aabbCenter; int sourceOutcode = btOutcode(source, aabbHalfExtent); int targetOutcode = btOutcode(target, aabbHalfExtent); if ((sourceOutcode & targetOutcode) == 0x0) { btScalar lambda_enter = btScalar(0.0); btScalar lambda_exit = param; btVector3 r = target - source; int i; btScalar normSign = 1; btVector3 hitNormal(0, 0, 0); int bit = 1; for (int j = 0; j < 2; j++) { for (i = 0; i != 3; ++i) { if (sourceOutcode & bit) { btScalar lambda = (-source[i] - aabbHalfExtent[i] * normSign) / r[i]; if (lambda_enter <= lambda) { lambda_enter = lambda; hitNormal.setValue(0, 0, 0); hitNormal[i] = normSign; } } else if (targetOutcode & bit) { btScalar lambda = (-source[i] - aabbHalfExtent[i] * normSign) / r[i]; btSetMin(lambda_exit, lambda); } bit <<= 1; } normSign = btScalar(-1.); } if (lambda_enter <= lambda_exit) { param = lambda_enter; normal = hitNormal; return true; } } return false; } SIMD_FORCE_INLINE void btTransformAabb(const btVector3& halfExtents, btScalar margin, const btTransform& t, btVector3& aabbMinOut, btVector3& aabbMaxOut) { btVector3 halfExtentsWithMargin = halfExtents + btVector3(margin, margin, margin); btMatrix3x3 abs_b = t.getBasis().absolute(); btVector3 center = t.getOrigin(); btVector3 extent = halfExtentsWithMargin.dot3(abs_b[0], abs_b[1], abs_b[2]); aabbMinOut = center - extent; aabbMaxOut = center + extent; } SIMD_FORCE_INLINE void btTransformAabb(const btVector3& localAabbMin, const btVector3& localAabbMax, btScalar margin, const btTransform& trans, btVector3& aabbMinOut, btVector3& aabbMaxOut) { btAssert(localAabbMin.getX() <= localAabbMax.getX()); btAssert(localAabbMin.getY() <= localAabbMax.getY()); btAssert(localAabbMin.getZ() <= localAabbMax.getZ()); btVector3 localHalfExtents = btScalar(0.5) * (localAabbMax - localAabbMin); localHalfExtents += btVector3(margin, margin, margin); btVector3 localCenter = btScalar(0.5) * (localAabbMax + localAabbMin); btMatrix3x3 abs_b = trans.getBasis().absolute(); btVector3 center = trans(localCenter); btVector3 extent = localHalfExtents.dot3(abs_b[0], abs_b[1], abs_b[2]); aabbMinOut = center - extent; aabbMaxOut = center + extent; } #define USE_BANCHLESS 1 #ifdef USE_BANCHLESS //This block replaces the block below and uses no branches, and replaces the 8 bit return with a 32 bit return for improved performance (~3x on XBox 360) SIMD_FORCE_INLINE unsigned testQuantizedAabbAgainstQuantizedAabb(const unsigned short int* aabbMin1, const unsigned short int* aabbMax1, const unsigned short int* aabbMin2, const unsigned short int* aabbMax2) { return static_cast(btSelect((unsigned)((aabbMin1[0] <= aabbMax2[0]) & (aabbMax1[0] >= aabbMin2[0]) & (aabbMin1[2] <= aabbMax2[2]) & (aabbMax1[2] >= aabbMin2[2]) & (aabbMin1[1] <= aabbMax2[1]) & (aabbMax1[1] >= aabbMin2[1])), 1, 0)); } #else SIMD_FORCE_INLINE bool testQuantizedAabbAgainstQuantizedAabb(const unsigned short int* aabbMin1, const unsigned short int* aabbMax1, const unsigned short int* aabbMin2, const unsigned short int* aabbMax2) { bool overlap = true; overlap = (aabbMin1[0] > aabbMax2[0] || aabbMax1[0] < aabbMin2[0]) ? false : overlap; overlap = (aabbMin1[2] > aabbMax2[2] || aabbMax1[2] < aabbMin2[2]) ? false : overlap; overlap = (aabbMin1[1] > aabbMax2[1] || aabbMax1[1] < aabbMin2[1]) ? false : overlap; return overlap; } #endif //USE_BANCHLESS #endif //BT_AABB_UTIL2 ================================================ FILE: libraries/bullet/LinearMath/btAlignedAllocator.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_ALIGNED_ALLOCATOR #define BT_ALIGNED_ALLOCATOR ///we probably replace this with our own aligned memory allocator ///so we replace _aligned_malloc and _aligned_free with our own ///that is better portable and more predictable #include "btScalar.h" ///BT_DEBUG_MEMORY_ALLOCATIONS preprocessor can be set in build system ///for regression tests to detect memory leaks ///#define BT_DEBUG_MEMORY_ALLOCATIONS 1 #ifdef BT_DEBUG_MEMORY_ALLOCATIONS int btDumpMemoryLeaks(); #define btAlignedAlloc(a, b) \ btAlignedAllocInternal(a, b, __LINE__, __FILE__) #define btAlignedFree(ptr) \ btAlignedFreeInternal(ptr, __LINE__, __FILE__) void* btAlignedAllocInternal(size_t size, int alignment, int line, const char* filename); void btAlignedFreeInternal(void* ptr, int line, const char* filename); #else void* btAlignedAllocInternal(size_t size, int alignment); void btAlignedFreeInternal(void* ptr); #define btAlignedAlloc(size, alignment) btAlignedAllocInternal(size, alignment) #define btAlignedFree(ptr) btAlignedFreeInternal(ptr) #endif typedef int size_type; typedef void*(btAlignedAllocFunc)(size_t size, int alignment); typedef void(btAlignedFreeFunc)(void* memblock); typedef void*(btAllocFunc)(size_t size); typedef void(btFreeFunc)(void* memblock); ///The developer can let all Bullet memory allocations go through a custom memory allocator, using btAlignedAllocSetCustom void btAlignedAllocSetCustom(btAllocFunc* allocFunc, btFreeFunc* freeFunc); ///If the developer has already an custom aligned allocator, then btAlignedAllocSetCustomAligned can be used. The default aligned allocator pre-allocates extra memory using the non-aligned allocator, and instruments it. void btAlignedAllocSetCustomAligned(btAlignedAllocFunc* allocFunc, btAlignedFreeFunc* freeFunc); ///The btAlignedAllocator is a portable class for aligned memory allocations. ///Default implementations for unaligned and aligned allocations can be overridden by a custom allocator using btAlignedAllocSetCustom and btAlignedAllocSetCustomAligned. template class btAlignedAllocator { typedef btAlignedAllocator self_type; public: //just going down a list: btAlignedAllocator() {} /* btAlignedAllocator( const self_type & ) {} */ template btAlignedAllocator(const btAlignedAllocator&) { } typedef const T* const_pointer; typedef const T& const_reference; typedef T* pointer; typedef T& reference; typedef T value_type; pointer address(reference ref) const { return &ref; } const_pointer address(const_reference ref) const { return &ref; } pointer allocate(size_type n, const_pointer* hint = 0) { (void)hint; return reinterpret_cast(btAlignedAlloc(sizeof(value_type) * n, Alignment)); } void construct(pointer ptr, const value_type& value) { new (ptr) value_type(value); } void deallocate(pointer ptr) { btAlignedFree(reinterpret_cast(ptr)); } void destroy(pointer ptr) { ptr->~value_type(); } template struct rebind { typedef btAlignedAllocator other; }; template self_type& operator=(const btAlignedAllocator&) { return *this; } friend bool operator==(const self_type&, const self_type&) { return true; } }; #endif //BT_ALIGNED_ALLOCATOR ================================================ FILE: libraries/bullet/LinearMath/btAlignedObjectArray.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_OBJECT_ARRAY__ #define BT_OBJECT_ARRAY__ #include "btScalar.h" // has definitions like SIMD_FORCE_INLINE #include "btAlignedAllocator.h" ///If the platform doesn't support placement new, you can disable BT_USE_PLACEMENT_NEW ///then the btAlignedObjectArray doesn't support objects with virtual methods, and non-trivial constructors/destructors ///You can enable BT_USE_MEMCPY, then swapping elements in the array will use memcpy instead of operator= ///see discussion here: http://continuousphysics.com/Bullet/phpBB2/viewtopic.php?t=1231 and ///http://www.continuousphysics.com/Bullet/phpBB2/viewtopic.php?t=1240 #define BT_USE_PLACEMENT_NEW 1 //#define BT_USE_MEMCPY 1 //disable, because it is cumbersome to find out for each platform where memcpy is defined. It can be in or or otherwise... #define BT_ALLOW_ARRAY_COPY_OPERATOR // enabling this can accidently perform deep copies of data if you are not careful #ifdef BT_USE_MEMCPY #include #include #endif //BT_USE_MEMCPY #ifdef BT_USE_PLACEMENT_NEW #include //for placement new #endif //BT_USE_PLACEMENT_NEW ///The btAlignedObjectArray template class uses a subset of the stl::vector interface for its methods ///It is developed to replace stl::vector to avoid portability issues, including STL alignment issues to add SIMD/SSE data template //template class btAlignedObjectArray { btAlignedAllocator m_allocator; int m_size; int m_capacity; T* m_data; //PCK: added this line bool m_ownsMemory; #ifdef BT_ALLOW_ARRAY_COPY_OPERATOR public: SIMD_FORCE_INLINE btAlignedObjectArray& operator=(const btAlignedObjectArray& other) { copyFromArray(other); return *this; } #else //BT_ALLOW_ARRAY_COPY_OPERATOR private: SIMD_FORCE_INLINE btAlignedObjectArray& operator=(const btAlignedObjectArray& other); #endif //BT_ALLOW_ARRAY_COPY_OPERATOR protected: SIMD_FORCE_INLINE int allocSize(int size) { return (size ? size * 2 : 1); } SIMD_FORCE_INLINE void copy(int start, int end, T* dest) const { int i; for (i = start; i < end; ++i) #ifdef BT_USE_PLACEMENT_NEW new (&dest[i]) T(m_data[i]); #else dest[i] = m_data[i]; #endif //BT_USE_PLACEMENT_NEW } SIMD_FORCE_INLINE void init() { //PCK: added this line m_ownsMemory = true; m_data = 0; m_size = 0; m_capacity = 0; } SIMD_FORCE_INLINE void destroy(int first, int last) { int i; for (i = first; i < last; i++) { m_data[i].~T(); } } SIMD_FORCE_INLINE void* allocate(int size) { if (size) return m_allocator.allocate(size); return 0; } SIMD_FORCE_INLINE void deallocate() { if (m_data) { //PCK: enclosed the deallocation in this block if (m_ownsMemory) { m_allocator.deallocate(m_data); } m_data = 0; } } public: btAlignedObjectArray() { init(); } ~btAlignedObjectArray() { clear(); } ///Generally it is best to avoid using the copy constructor of an btAlignedObjectArray, and use a (const) reference to the array instead. btAlignedObjectArray(const btAlignedObjectArray& otherArray) { init(); int otherSize = otherArray.size(); resize(otherSize); otherArray.copy(0, otherSize, m_data); } /// return the number of elements in the array SIMD_FORCE_INLINE int size() const { return m_size; } SIMD_FORCE_INLINE const T& at(int n) const { btAssert(n >= 0); btAssert(n < size()); return m_data[n]; } SIMD_FORCE_INLINE T& at(int n) { btAssert(n >= 0); btAssert(n < size()); return m_data[n]; } SIMD_FORCE_INLINE const T& operator[](int n) const { btAssert(n >= 0); btAssert(n < size()); return m_data[n]; } SIMD_FORCE_INLINE T& operator[](int n) { btAssert(n >= 0); btAssert(n < size()); return m_data[n]; } ///clear the array, deallocated memory. Generally it is better to use array.resize(0), to reduce performance overhead of run-time memory (de)allocations. SIMD_FORCE_INLINE void clear() { destroy(0, size()); deallocate(); init(); } SIMD_FORCE_INLINE void pop_back() { btAssert(m_size > 0); m_size--; m_data[m_size].~T(); } ///resize changes the number of elements in the array. If the new size is larger, the new elements will be constructed using the optional second argument. ///when the new number of elements is smaller, the destructor will be called, but memory will not be freed, to reduce performance overhead of run-time memory (de)allocations. SIMD_FORCE_INLINE void resizeNoInitialize(int newsize) { if (newsize > size()) { reserve(newsize); } m_size = newsize; } SIMD_FORCE_INLINE void resize(int newsize, const T& fillData = T()) { const int curSize = size(); if (newsize < curSize) { for (int i = newsize; i < curSize; i++) { m_data[i].~T(); } } else { if (newsize > curSize) { reserve(newsize); } #ifdef BT_USE_PLACEMENT_NEW for (int i = curSize; i < newsize; i++) { new (&m_data[i]) T(fillData); } #endif //BT_USE_PLACEMENT_NEW } m_size = newsize; } SIMD_FORCE_INLINE T& expandNonInitializing() { const int sz = size(); if (sz == capacity()) { reserve(allocSize(size())); } m_size++; return m_data[sz]; } SIMD_FORCE_INLINE T& expand(const T& fillValue = T()) { const int sz = size(); if (sz == capacity()) { reserve(allocSize(size())); } m_size++; #ifdef BT_USE_PLACEMENT_NEW new (&m_data[sz]) T(fillValue); //use the in-place new (not really allocating heap memory) #endif return m_data[sz]; } SIMD_FORCE_INLINE void push_back(const T& _Val) { const int sz = size(); if (sz == capacity()) { reserve(allocSize(size())); } #ifdef BT_USE_PLACEMENT_NEW new (&m_data[m_size]) T(_Val); #else m_data[size()] = _Val; #endif //BT_USE_PLACEMENT_NEW m_size++; } /// return the pre-allocated (reserved) elements, this is at least as large as the total number of elements,see size() and reserve() SIMD_FORCE_INLINE int capacity() const { return m_capacity; } SIMD_FORCE_INLINE void reserve(int _Count) { // determine new minimum length of allocated storage if (capacity() < _Count) { // not enough room, reallocate T* s = (T*)allocate(_Count); copy(0, size(), s); destroy(0, size()); deallocate(); //PCK: added this line m_ownsMemory = true; m_data = s; m_capacity = _Count; } } class less { public: bool operator()(const T& a, const T& b) const { return (a < b); } }; template void quickSortInternal(const L& CompareFunc, int lo, int hi) { // lo is the lower index, hi is the upper index // of the region of array a that is to be sorted int i = lo, j = hi; T x = m_data[(lo + hi) / 2]; // partition do { while (CompareFunc(m_data[i], x)) i++; while (CompareFunc(x, m_data[j])) j--; if (i <= j) { swap(i, j); i++; j--; } } while (i <= j); // recursion if (lo < j) quickSortInternal(CompareFunc, lo, j); if (i < hi) quickSortInternal(CompareFunc, i, hi); } template void quickSort(const L& CompareFunc) { //don't sort 0 or 1 elements if (size() > 1) { quickSortInternal(CompareFunc, 0, size() - 1); } } ///heap sort from http://www.csse.monash.edu.au/~lloyd/tildeAlgDS/Sort/Heap/ template void downHeap(T* pArr, int k, int n, const L& CompareFunc) { /* PRE: a[k+1..N] is a heap */ /* POST: a[k..N] is a heap */ T temp = pArr[k - 1]; /* k has child(s) */ while (k <= n / 2) { int child = 2 * k; if ((child < n) && CompareFunc(pArr[child - 1], pArr[child])) { child++; } /* pick larger child */ if (CompareFunc(temp, pArr[child - 1])) { /* move child up */ pArr[k - 1] = pArr[child - 1]; k = child; } else { break; } } pArr[k - 1] = temp; } /*downHeap*/ void swap(int index0, int index1) { #ifdef BT_USE_MEMCPY char temp[sizeof(T)]; memcpy(temp, &m_data[index0], sizeof(T)); memcpy(&m_data[index0], &m_data[index1], sizeof(T)); memcpy(&m_data[index1], temp, sizeof(T)); #else T temp = m_data[index0]; m_data[index0] = m_data[index1]; m_data[index1] = temp; #endif //BT_USE_PLACEMENT_NEW } template void heapSort(const L& CompareFunc) { /* sort a[0..N-1], N.B. 0 to N-1 */ int k; int n = m_size; for (k = n / 2; k > 0; k--) { downHeap(m_data, k, n, CompareFunc); } /* a[1..N] is now a heap */ while (n >= 1) { swap(0, n - 1); /* largest of a[0..n-1] */ n = n - 1; /* restore a[1..i-1] heap */ downHeap(m_data, 1, n, CompareFunc); } } ///non-recursive binary search, assumes sorted array int findBinarySearch(const T& key) const { int first = 0; int last = size() - 1; //assume sorted array while (first <= last) { int mid = (first + last) / 2; // compute mid point. if (key > m_data[mid]) first = mid + 1; // repeat search in top half. else if (key < m_data[mid]) last = mid - 1; // repeat search in bottom half. else return mid; // found it. return position ///// } return size(); // failed to find key } int findLinearSearch(const T& key) const { int index = size(); int i; for (i = 0; i < size(); i++) { if (m_data[i] == key) { index = i; break; } } return index; } // If the key is not in the array, return -1 instead of 0, // since 0 also means the first element in the array. int findLinearSearch2(const T& key) const { int index = -1; int i; for (i = 0; i < size(); i++) { if (m_data[i] == key) { index = i; break; } } return index; } void removeAtIndex(int index) { if (index < size()) { swap(index, size() - 1); pop_back(); } } void remove(const T& key) { int findIndex = findLinearSearch(key); removeAtIndex(findIndex); } //PCK: whole function void initializeFromBuffer(void* buffer, int size, int capacity) { clear(); m_ownsMemory = false; m_data = (T*)buffer; m_size = size; m_capacity = capacity; } void copyFromArray(const btAlignedObjectArray& otherArray) { int otherSize = otherArray.size(); resize(otherSize); otherArray.copy(0, otherSize, m_data); } }; #endif //BT_OBJECT_ARRAY__ ================================================ FILE: libraries/bullet/LinearMath/btConvexHull.h ================================================ /* Stan Melax Convex Hull Computation Copyright (c) 2008 Stan Melax http://www.melax.com/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ ///includes modifications/improvements by John Ratcliff, see BringOutYourDead below. #ifndef BT_CD_HULL_H #define BT_CD_HULL_H #include "btVector3.h" #include "btAlignedObjectArray.h" typedef btAlignedObjectArray TUIntArray; class HullResult { public: HullResult(void) { mPolygons = true; mNumOutputVertices = 0; mNumFaces = 0; mNumIndices = 0; } bool mPolygons; // true if indices represents polygons, false indices are triangles unsigned int mNumOutputVertices; // number of vertices in the output hull btAlignedObjectArray m_OutputVertices; // array of vertices unsigned int mNumFaces; // the number of faces produced unsigned int mNumIndices; // the total number of indices btAlignedObjectArray m_Indices; // pointer to indices. // If triangles, then indices are array indexes into the vertex list. // If polygons, indices are in the form (number of points in face) (p1, p2, p3, ..) etc.. }; enum HullFlag { QF_TRIANGLES = (1 << 0), // report results as triangles, not polygons. QF_REVERSE_ORDER = (1 << 1), // reverse order of the triangle indices. QF_DEFAULT = QF_TRIANGLES }; class HullDesc { public: HullDesc(void) { mFlags = QF_DEFAULT; mVcount = 0; mVertices = 0; mVertexStride = sizeof(btVector3); mNormalEpsilon = 0.001f; mMaxVertices = 4096; // maximum number of points to be considered for a convex hull. mMaxFaces = 4096; }; HullDesc(HullFlag flag, unsigned int vcount, const btVector3* vertices, unsigned int stride = sizeof(btVector3)) { mFlags = flag; mVcount = vcount; mVertices = vertices; mVertexStride = stride; mNormalEpsilon = btScalar(0.001); mMaxVertices = 4096; } bool HasHullFlag(HullFlag flag) const { if (mFlags & flag) return true; return false; } void SetHullFlag(HullFlag flag) { mFlags |= flag; } void ClearHullFlag(HullFlag flag) { mFlags &= ~flag; } unsigned int mFlags; // flags to use when generating the convex hull. unsigned int mVcount; // number of vertices in the input point cloud const btVector3* mVertices; // the array of vertices. unsigned int mVertexStride; // the stride of each vertex, in bytes. btScalar mNormalEpsilon; // the epsilon for removing duplicates. This is a normalized value, if normalized bit is on. unsigned int mMaxVertices; // maximum number of vertices to be considered for the hull! unsigned int mMaxFaces; }; enum HullError { QE_OK, // success! QE_FAIL // failed. }; class btPlane { public: btVector3 normal; btScalar dist; // distance below origin - the D from plane equasion Ax+By+Cz+D=0 btPlane(const btVector3& n, btScalar d) : normal(n), dist(d) {} btPlane() : normal(), dist(0) {} }; class ConvexH { public: class HalfEdge { public: short ea; // the other half of the edge (index into edges list) unsigned char v; // the vertex at the start of this edge (index into vertices list) unsigned char p; // the facet on which this edge lies (index into facets list) HalfEdge() {} HalfEdge(short _ea, unsigned char _v, unsigned char _p) : ea(_ea), v(_v), p(_p) {} }; ConvexH() { } ~ConvexH() { } btAlignedObjectArray vertices; btAlignedObjectArray edges; btAlignedObjectArray facets; ConvexH(int vertices_size, int edges_size, int facets_size); }; class int4 { public: int x, y, z, w; int4(){}; int4(int _x, int _y, int _z, int _w) { x = _x; y = _y; z = _z; w = _w; } const int& operator[](int i) const { return (&x)[i]; } int& operator[](int i) { return (&x)[i]; } }; class PHullResult { public: PHullResult(void) { mVcount = 0; mIndexCount = 0; mFaceCount = 0; mVertices = 0; } unsigned int mVcount; unsigned int mIndexCount; unsigned int mFaceCount; btVector3* mVertices; TUIntArray m_Indices; }; ///The HullLibrary class can create a convex hull from a collection of vertices, using the ComputeHull method. ///The btShapeHull class uses this HullLibrary to create a approximate convex mesh given a general (non-polyhedral) convex shape. class HullLibrary { btAlignedObjectArray m_tris; public: btAlignedObjectArray m_vertexIndexMapping; HullError CreateConvexHull(const HullDesc& desc, // describes the input request HullResult& result); // contains the resulst HullError ReleaseResult(HullResult& result); // release memory allocated for this result, we are done with it. private: bool ComputeHull(unsigned int vcount, const btVector3* vertices, PHullResult& result, unsigned int vlimit); class btHullTriangle* allocateTriangle(int a, int b, int c); void deAllocateTriangle(btHullTriangle*); void b2bfix(btHullTriangle* s, btHullTriangle* t); void removeb2b(btHullTriangle* s, btHullTriangle* t); void checkit(btHullTriangle* t); btHullTriangle* extrudable(btScalar epsilon); int calchull(btVector3* verts, int verts_count, TUIntArray& tris_out, int& tris_count, int vlimit); int calchullgen(btVector3* verts, int verts_count, int vlimit); int4 FindSimplex(btVector3* verts, int verts_count, btAlignedObjectArray& allow); class ConvexH* ConvexHCrop(ConvexH& convex, const btPlane& slice); void extrude(class btHullTriangle* t0, int v); ConvexH* test_cube(); //BringOutYourDead (John Ratcliff): When you create a convex hull you hand it a large input set of vertices forming a 'point cloud'. //After the hull is generated it give you back a set of polygon faces which index the *original* point cloud. //The thing is, often times, there are many 'dead vertices' in the point cloud that are on longer referenced by the hull. //The routine 'BringOutYourDead' find only the referenced vertices, copies them to an new buffer, and re-indexes the hull so that it is a minimal representation. void BringOutYourDead(const btVector3* verts, unsigned int vcount, btVector3* overts, unsigned int& ocount, unsigned int* indices, unsigned indexcount); bool CleanupVertices(unsigned int svcount, const btVector3* svertices, unsigned int stride, unsigned int& vcount, // output number of vertices btVector3* vertices, // location to store the results. btScalar normalepsilon, btVector3& scale); }; #endif //BT_CD_HULL_H ================================================ FILE: libraries/bullet/LinearMath/btConvexHullComputer.h ================================================ /* Copyright (c) 2011 Ole Kniemeyer, MAXON, www.maxon.net This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_CONVEX_HULL_COMPUTER_H #define BT_CONVEX_HULL_COMPUTER_H #include "btVector3.h" #include "btAlignedObjectArray.h" /// Convex hull implementation based on Preparata and Hong /// See http://code.google.com/p/bullet/issues/detail?id=275 /// Ole Kniemeyer, MAXON Computer GmbH class btConvexHullComputer { private: btScalar compute(const void* coords, bool doubleCoords, int stride, int count, btScalar shrink, btScalar shrinkClamp); public: class Edge { private: int next; int reverse; int targetVertex; friend class btConvexHullComputer; public: int getSourceVertex() const { return (this + reverse)->targetVertex; } int getTargetVertex() const { return targetVertex; } const Edge* getNextEdgeOfVertex() const // clockwise list of all edges of a vertex { return this + next; } const Edge* getNextEdgeOfFace() const // counter-clockwise list of all edges of a face { return (this + reverse)->getNextEdgeOfVertex(); } const Edge* getReverseEdge() const { return this + reverse; } }; // Vertices of the output hull btAlignedObjectArray vertices; // The original vertex index in the input coords array btAlignedObjectArray original_vertex_index; // Edges of the output hull btAlignedObjectArray edges; // Faces of the convex hull. Each entry is an index into the "edges" array pointing to an edge of the face. Faces are planar n-gons btAlignedObjectArray faces; /* Compute convex hull of "count" vertices stored in "coords". "stride" is the difference in bytes between the addresses of consecutive vertices. If "shrink" is positive, the convex hull is shrunken by that amount (each face is moved by "shrink" length units towards the center along its normal). If "shrinkClamp" is positive, "shrink" is clamped to not exceed "shrinkClamp * innerRadius", where "innerRadius" is the minimum distance of a face to the center of the convex hull. The returned value is the amount by which the hull has been shrunken. If it is negative, the amount was so large that the resulting convex hull is empty. The output convex hull can be found in the member variables "vertices", "edges", "faces". */ btScalar compute(const float* coords, int stride, int count, btScalar shrink, btScalar shrinkClamp) { return compute(coords, false, stride, count, shrink, shrinkClamp); } // same as above, but double precision btScalar compute(const double* coords, int stride, int count, btScalar shrink, btScalar shrinkClamp) { return compute(coords, true, stride, count, shrink, shrinkClamp); } }; #endif //BT_CONVEX_HULL_COMPUTER_H ================================================ FILE: libraries/bullet/LinearMath/btCpuFeatureUtility.h ================================================ #ifndef BT_CPU_UTILITY_H #define BT_CPU_UTILITY_H #include "LinearMath/btScalar.h" #include //memset #ifdef USE_SIMD #include #ifdef BT_ALLOW_SSE4 #include #endif //BT_ALLOW_SSE4 #endif //USE_SIMD #if defined BT_USE_NEON #define ARM_NEON_GCC_COMPATIBILITY 1 #include #include #include //for sysctlbyname #endif //BT_USE_NEON ///Rudimentary btCpuFeatureUtility for CPU features: only report the features that Bullet actually uses (SSE4/FMA3, NEON_HPFP) ///We assume SSE2 in case BT_USE_SSE2 is defined in LinearMath/btScalar.h class btCpuFeatureUtility { public: enum btCpuFeature { CPU_FEATURE_FMA3 = 1, CPU_FEATURE_SSE4_1 = 2, CPU_FEATURE_NEON_HPFP = 4 }; static int getCpuFeatures() { static int capabilities = 0; static bool testedCapabilities = false; if (0 != testedCapabilities) { return capabilities; } #ifdef BT_USE_NEON { uint32_t hasFeature = 0; size_t featureSize = sizeof(hasFeature); int err = sysctlbyname("hw.optional.neon_hpfp", &hasFeature, &featureSize, NULL, 0); if (0 == err && hasFeature) capabilities |= CPU_FEATURE_NEON_HPFP; } #endif //BT_USE_NEON #ifdef BT_ALLOW_SSE4 { int cpuInfo[4]; memset(cpuInfo, 0, sizeof(cpuInfo)); unsigned long long sseExt = 0; __cpuid(cpuInfo, 1); bool osUsesXSAVE_XRSTORE = cpuInfo[2] & (1 << 27) || false; bool cpuAVXSuport = cpuInfo[2] & (1 << 28) || false; if (osUsesXSAVE_XRSTORE && cpuAVXSuport) { sseExt = _xgetbv(0); } const int OSXSAVEFlag = (1UL << 27); const int AVXFlag = ((1UL << 28) | OSXSAVEFlag); const int FMAFlag = ((1UL << 12) | AVXFlag | OSXSAVEFlag); if ((cpuInfo[2] & FMAFlag) == FMAFlag && (sseExt & 6) == 6) { capabilities |= btCpuFeatureUtility::CPU_FEATURE_FMA3; } const int SSE41Flag = (1 << 19); if (cpuInfo[2] & SSE41Flag) { capabilities |= btCpuFeatureUtility::CPU_FEATURE_SSE4_1; } } #endif //BT_ALLOW_SSE4 testedCapabilities = true; return capabilities; } }; #endif //BT_CPU_UTILITY_H ================================================ FILE: libraries/bullet/LinearMath/btDefaultMotionState.h ================================================ #ifndef BT_DEFAULT_MOTION_STATE_H #define BT_DEFAULT_MOTION_STATE_H #include "btMotionState.h" ///The btDefaultMotionState provides a common implementation to synchronize world transforms with offsets. ATTRIBUTE_ALIGNED16(struct) btDefaultMotionState : public btMotionState { btTransform m_graphicsWorldTrans; btTransform m_centerOfMassOffset; btTransform m_startWorldTrans; void* m_userPointer; BT_DECLARE_ALIGNED_ALLOCATOR(); btDefaultMotionState(const btTransform& startTrans = btTransform::getIdentity(), const btTransform& centerOfMassOffset = btTransform::getIdentity()) : m_graphicsWorldTrans(startTrans), m_centerOfMassOffset(centerOfMassOffset), m_startWorldTrans(startTrans), m_userPointer(0) { } ///synchronizes world transform from user to physics virtual void getWorldTransform(btTransform & centerOfMassWorldTrans) const { centerOfMassWorldTrans = m_graphicsWorldTrans * m_centerOfMassOffset.inverse(); } ///synchronizes world transform from physics to user ///Bullet only calls the update of worldtransform for active objects virtual void setWorldTransform(const btTransform& centerOfMassWorldTrans) { m_graphicsWorldTrans = centerOfMassWorldTrans * m_centerOfMassOffset; } }; #endif //BT_DEFAULT_MOTION_STATE_H ================================================ FILE: libraries/bullet/LinearMath/btGeometryUtil.h ================================================ /* Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_GEOMETRY_UTIL_H #define BT_GEOMETRY_UTIL_H #include "btVector3.h" #include "btAlignedObjectArray.h" ///The btGeometryUtil helper class provides a few methods to convert between plane equations and vertices. class btGeometryUtil { public: static void getPlaneEquationsFromVertices(btAlignedObjectArray& vertices, btAlignedObjectArray& planeEquationsOut); static void getVerticesFromPlaneEquations(const btAlignedObjectArray& planeEquations, btAlignedObjectArray& verticesOut); static bool isInside(const btAlignedObjectArray& vertices, const btVector3& planeNormal, btScalar margin); static bool isPointInsidePlanes(const btAlignedObjectArray& planeEquations, const btVector3& point, btScalar margin); static bool areVerticesBehindPlane(const btVector3& planeNormal, const btAlignedObjectArray& vertices, btScalar margin); }; #endif //BT_GEOMETRY_UTIL_H ================================================ FILE: libraries/bullet/LinearMath/btGrahamScan2dConvexHull.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2011 Advanced Micro Devices, Inc. http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef GRAHAM_SCAN_2D_CONVEX_HULL_H #define GRAHAM_SCAN_2D_CONVEX_HULL_H #include "btVector3.h" #include "btAlignedObjectArray.h" struct GrahamVector3 : public btVector3 { GrahamVector3(const btVector3& org, int orgIndex) : btVector3(org), m_orgIndex(orgIndex) { } btScalar m_angle; int m_orgIndex; }; struct btAngleCompareFunc { btVector3 m_anchor; btAngleCompareFunc(const btVector3& anchor) : m_anchor(anchor) { } bool operator()(const GrahamVector3& a, const GrahamVector3& b) const { if (a.m_angle != b.m_angle) return a.m_angle < b.m_angle; else { btScalar al = (a - m_anchor).length2(); btScalar bl = (b - m_anchor).length2(); if (al != bl) return al < bl; else { return a.m_orgIndex < b.m_orgIndex; } } } }; inline void GrahamScanConvexHull2D(btAlignedObjectArray& originalPoints, btAlignedObjectArray& hull, const btVector3& normalAxis) { btVector3 axis0, axis1; btPlaneSpace1(normalAxis, axis0, axis1); if (originalPoints.size() <= 1) { for (int i = 0; i < originalPoints.size(); i++) hull.push_back(originalPoints[0]); return; } //step1 : find anchor point with smallest projection on axis0 and move it to first location for (int i = 0; i < originalPoints.size(); i++) { // const btVector3& left = originalPoints[i]; // const btVector3& right = originalPoints[0]; btScalar projL = originalPoints[i].dot(axis0); btScalar projR = originalPoints[0].dot(axis0); if (projL < projR) { originalPoints.swap(0, i); } } //also precompute angles originalPoints[0].m_angle = -1e30f; for (int i = 1; i < originalPoints.size(); i++) { btVector3 ar = originalPoints[i] - originalPoints[0]; btScalar ar1 = axis1.dot(ar); btScalar ar0 = axis0.dot(ar); if (ar1 * ar1 + ar0 * ar0 < FLT_EPSILON) { originalPoints[i].m_angle = 0.0f; } else { originalPoints[i].m_angle = btAtan2Fast(ar1, ar0); } } //step 2: sort all points, based on 'angle' with this anchor btAngleCompareFunc comp(originalPoints[0]); originalPoints.quickSortInternal(comp, 1, originalPoints.size() - 1); int i; for (i = 0; i < 2; i++) hull.push_back(originalPoints[i]); //step 3: keep all 'convex' points and discard concave points (using back tracking) for (; i != originalPoints.size(); i++) { bool isConvex = false; while (!isConvex && hull.size() > 1) { btVector3& a = hull[hull.size() - 2]; btVector3& b = hull[hull.size() - 1]; isConvex = btCross(a - b, a - originalPoints[i]).dot(normalAxis) > 0; if (!isConvex) hull.pop_back(); else hull.push_back(originalPoints[i]); } if (hull.size() == 1) { hull.push_back(originalPoints[i]); } } } #endif //GRAHAM_SCAN_2D_CONVEX_HULL_H ================================================ FILE: libraries/bullet/LinearMath/btHashMap.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_HASH_MAP_H #define BT_HASH_MAP_H #include #include "btAlignedObjectArray.h" ///very basic hashable string implementation, compatible with btHashMap struct btHashString { std::string m_string1; unsigned int m_hash; SIMD_FORCE_INLINE unsigned int getHash() const { return m_hash; } btHashString() { m_string1 = ""; m_hash = 0; } btHashString(const char* name) : m_string1(name) { /* magic numbers from http://www.isthe.com/chongo/tech/comp/fnv/ */ static const unsigned int InitialFNV = 2166136261u; static const unsigned int FNVMultiple = 16777619u; /* Fowler / Noll / Vo (FNV) Hash */ unsigned int hash = InitialFNV; for (int i = 0; m_string1.c_str()[i]; i++) { hash = hash ^ (m_string1.c_str()[i]); /* xor the low 8 bits */ hash = hash * FNVMultiple; /* multiply by the magic number */ } m_hash = hash; } bool equals(const btHashString& other) const { return (m_string1 == other.m_string1); } }; const int BT_HASH_NULL = 0xffffffff; class btHashInt { int m_uid; public: btHashInt() { } btHashInt(int uid) : m_uid(uid) { } int getUid1() const { return m_uid; } void setUid1(int uid) { m_uid = uid; } bool equals(const btHashInt& other) const { return getUid1() == other.getUid1(); } //to our success SIMD_FORCE_INLINE unsigned int getHash() const { unsigned int key = m_uid; // Thomas Wang's hash key += ~(key << 15); key ^= (key >> 10); key += (key << 3); key ^= (key >> 6); key += ~(key << 11); key ^= (key >> 16); return key; } }; class btHashPtr { union { const void* m_pointer; unsigned int m_hashValues[2]; }; public: btHashPtr(const void* ptr) : m_pointer(ptr) { } const void* getPointer() const { return m_pointer; } bool equals(const btHashPtr& other) const { return getPointer() == other.getPointer(); } //to our success SIMD_FORCE_INLINE unsigned int getHash() const { const bool VOID_IS_8 = ((sizeof(void*) == 8)); unsigned int key = VOID_IS_8 ? m_hashValues[0] + m_hashValues[1] : m_hashValues[0]; // Thomas Wang's hash key += ~(key << 15); key ^= (key >> 10); key += (key << 3); key ^= (key >> 6); key += ~(key << 11); key ^= (key >> 16); return key; } }; template class btHashKeyPtr { int m_uid; public: btHashKeyPtr(int uid) : m_uid(uid) { } int getUid1() const { return m_uid; } bool equals(const btHashKeyPtr& other) const { return getUid1() == other.getUid1(); } //to our success SIMD_FORCE_INLINE unsigned int getHash() const { unsigned int key = m_uid; // Thomas Wang's hash key += ~(key << 15); key ^= (key >> 10); key += (key << 3); key ^= (key >> 6); key += ~(key << 11); key ^= (key >> 16); return key; } }; template class btHashKey { int m_uid; public: btHashKey(int uid) : m_uid(uid) { } int getUid1() const { return m_uid; } bool equals(const btHashKey& other) const { return getUid1() == other.getUid1(); } //to our success SIMD_FORCE_INLINE unsigned int getHash() const { unsigned int key = m_uid; // Thomas Wang's hash key += ~(key << 15); key ^= (key >> 10); key += (key << 3); key ^= (key >> 6); key += ~(key << 11); key ^= (key >> 16); return key; } }; ///The btHashMap template class implements a generic and lightweight hashmap. ///A basic sample of how to use btHashMap is located in Demos\BasicDemo\main.cpp template class btHashMap { protected: btAlignedObjectArray m_hashTable; btAlignedObjectArray m_next; btAlignedObjectArray m_valueArray; btAlignedObjectArray m_keyArray; void growTables(const Key& /*key*/) { int newCapacity = m_valueArray.capacity(); if (m_hashTable.size() < newCapacity) { //grow hashtable and next table int curHashtableSize = m_hashTable.size(); m_hashTable.resize(newCapacity); m_next.resize(newCapacity); int i; for (i = 0; i < newCapacity; ++i) { m_hashTable[i] = BT_HASH_NULL; } for (i = 0; i < newCapacity; ++i) { m_next[i] = BT_HASH_NULL; } for (i = 0; i < curHashtableSize; i++) { //const Value& value = m_valueArray[i]; //const Key& key = m_keyArray[i]; int hashValue = m_keyArray[i].getHash() & (m_valueArray.capacity() - 1); // New hash value with new mask m_next[i] = m_hashTable[hashValue]; m_hashTable[hashValue] = i; } } } public: void insert(const Key& key, const Value& value) { int hash = key.getHash() & (m_valueArray.capacity() - 1); //replace value if the key is already there int index = findIndex(key); if (index != BT_HASH_NULL) { m_valueArray[index] = value; return; } int count = m_valueArray.size(); int oldCapacity = m_valueArray.capacity(); m_valueArray.push_back(value); m_keyArray.push_back(key); int newCapacity = m_valueArray.capacity(); if (oldCapacity < newCapacity) { growTables(key); //hash with new capacity hash = key.getHash() & (m_valueArray.capacity() - 1); } m_next[count] = m_hashTable[hash]; m_hashTable[hash] = count; } void remove(const Key& key) { int hash = key.getHash() & (m_valueArray.capacity() - 1); int pairIndex = findIndex(key); if (pairIndex == BT_HASH_NULL) { return; } // Remove the pair from the hash table. int index = m_hashTable[hash]; btAssert(index != BT_HASH_NULL); int previous = BT_HASH_NULL; while (index != pairIndex) { previous = index; index = m_next[index]; } if (previous != BT_HASH_NULL) { btAssert(m_next[previous] == pairIndex); m_next[previous] = m_next[pairIndex]; } else { m_hashTable[hash] = m_next[pairIndex]; } // We now move the last pair into spot of the // pair being removed. We need to fix the hash // table indices to support the move. int lastPairIndex = m_valueArray.size() - 1; // If the removed pair is the last pair, we are done. if (lastPairIndex == pairIndex) { m_valueArray.pop_back(); m_keyArray.pop_back(); return; } // Remove the last pair from the hash table. int lastHash = m_keyArray[lastPairIndex].getHash() & (m_valueArray.capacity() - 1); index = m_hashTable[lastHash]; btAssert(index != BT_HASH_NULL); previous = BT_HASH_NULL; while (index != lastPairIndex) { previous = index; index = m_next[index]; } if (previous != BT_HASH_NULL) { btAssert(m_next[previous] == lastPairIndex); m_next[previous] = m_next[lastPairIndex]; } else { m_hashTable[lastHash] = m_next[lastPairIndex]; } // Copy the last pair into the remove pair's spot. m_valueArray[pairIndex] = m_valueArray[lastPairIndex]; m_keyArray[pairIndex] = m_keyArray[lastPairIndex]; // Insert the last pair into the hash table m_next[pairIndex] = m_hashTable[lastHash]; m_hashTable[lastHash] = pairIndex; m_valueArray.pop_back(); m_keyArray.pop_back(); } int size() const { return m_valueArray.size(); } const Value* getAtIndex(int index) const { btAssert(index < m_valueArray.size()); btAssert(index >= 0); if (index >= 0 && index < m_valueArray.size()) { return &m_valueArray[index]; } return 0; } Value* getAtIndex(int index) { btAssert(index < m_valueArray.size()); btAssert(index >= 0); if (index >= 0 && index < m_valueArray.size()) { return &m_valueArray[index]; } return 0; } Key getKeyAtIndex(int index) { btAssert(index < m_keyArray.size()); btAssert(index >= 0); return m_keyArray[index]; } const Key getKeyAtIndex(int index) const { btAssert(index < m_keyArray.size()); btAssert(index >= 0); return m_keyArray[index]; } Value* operator[](const Key& key) { return find(key); } const Value* operator[](const Key& key) const { return find(key); } const Value* find(const Key& key) const { int index = findIndex(key); if (index == BT_HASH_NULL) { return NULL; } return &m_valueArray[index]; } Value* find(const Key& key) { int index = findIndex(key); if (index == BT_HASH_NULL) { return NULL; } return &m_valueArray[index]; } int findIndex(const Key& key) const { unsigned int hash = key.getHash() & (m_valueArray.capacity() - 1); if (hash >= (unsigned int)m_hashTable.size()) { return BT_HASH_NULL; } int index = m_hashTable[hash]; while ((index != BT_HASH_NULL) && key.equals(m_keyArray[index]) == false) { index = m_next[index]; } return index; } void clear() { m_hashTable.clear(); m_next.clear(); m_valueArray.clear(); m_keyArray.clear(); } }; #endif //BT_HASH_MAP_H ================================================ FILE: libraries/bullet/LinearMath/btIDebugDraw.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_IDEBUG_DRAW__H #define BT_IDEBUG_DRAW__H #include "btVector3.h" #include "btTransform.h" ///The btIDebugDraw interface class allows hooking up a debug renderer to visually debug simulations. ///Typical use case: create a debug drawer object, and assign it to a btCollisionWorld or btDynamicsWorld using setDebugDrawer and call debugDrawWorld. ///A class that implements the btIDebugDraw interface will need to provide non-empty implementations of the the drawLine and getDebugMode methods at a minimum. ///For color arguments the X,Y,Z components refer to Red, Green and Blue each in the range [0..1] class btIDebugDraw { public: ATTRIBUTE_ALIGNED16(struct) DefaultColors { btVector3 m_activeObject; btVector3 m_deactivatedObject; btVector3 m_wantsDeactivationObject; btVector3 m_disabledDeactivationObject; btVector3 m_disabledSimulationObject; btVector3 m_aabb; btVector3 m_contactPoint; DefaultColors() : m_activeObject(1, 1, 1), m_deactivatedObject(0, 1, 0), m_wantsDeactivationObject(0, 1, 1), m_disabledDeactivationObject(1, 0, 0), m_disabledSimulationObject(1, 1, 0), m_aabb(1, 0, 0), m_contactPoint(1, 1, 0) { } }; enum DebugDrawModes { DBG_NoDebug = 0, DBG_DrawWireframe = 1, DBG_DrawAabb = 2, DBG_DrawFeaturesText = 4, DBG_DrawContactPoints = 8, DBG_NoDeactivation = 16, DBG_NoHelpText = 32, DBG_DrawText = 64, DBG_ProfileTimings = 128, DBG_EnableSatComparison = 256, DBG_DisableBulletLCP = 512, DBG_EnableCCD = 1024, DBG_DrawConstraints = (1 << 11), DBG_DrawConstraintLimits = (1 << 12), DBG_FastWireframe = (1 << 13), DBG_DrawNormals = (1 << 14), DBG_DrawFrames = (1 << 15), DBG_MAX_DEBUG_DRAW_MODE }; virtual ~btIDebugDraw(){}; virtual DefaultColors getDefaultColors() const { DefaultColors colors; return colors; } ///the default implementation for setDefaultColors has no effect. A derived class can implement it and store the colors. virtual void setDefaultColors(const DefaultColors& /*colors*/) {} virtual void drawLine(const btVector3& from, const btVector3& to, const btVector3& color) = 0; virtual void drawLine(const btVector3& from, const btVector3& to, const btVector3& fromColor, const btVector3& toColor) { (void)toColor; drawLine(from, to, fromColor); } virtual void drawSphere(btScalar radius, const btTransform& transform, const btVector3& color) { btVector3 center = transform.getOrigin(); btVector3 up = transform.getBasis().getColumn(1); btVector3 axis = transform.getBasis().getColumn(0); btScalar minTh = -SIMD_HALF_PI; btScalar maxTh = SIMD_HALF_PI; btScalar minPs = -SIMD_HALF_PI; btScalar maxPs = SIMD_HALF_PI; btScalar stepDegrees = 30.f; drawSpherePatch(center, up, axis, radius, minTh, maxTh, minPs, maxPs, color, stepDegrees, false); drawSpherePatch(center, up, -axis, radius, minTh, maxTh, minPs, maxPs, color, stepDegrees, false); } virtual void drawSphere(const btVector3& p, btScalar radius, const btVector3& color) { btTransform tr; tr.setIdentity(); tr.setOrigin(p); drawSphere(radius, tr, color); } virtual void drawTriangle(const btVector3& v0, const btVector3& v1, const btVector3& v2, const btVector3& /*n0*/, const btVector3& /*n1*/, const btVector3& /*n2*/, const btVector3& color, btScalar alpha) { drawTriangle(v0, v1, v2, color, alpha); } virtual void drawTriangle(const btVector3& v0, const btVector3& v1, const btVector3& v2, const btVector3& color, btScalar /*alpha*/) { drawLine(v0, v1, color); drawLine(v1, v2, color); drawLine(v2, v0, color); } virtual void drawContactPoint(const btVector3& PointOnB, const btVector3& normalOnB, btScalar distance, int lifeTime, const btVector3& color) = 0; virtual void reportErrorWarning(const char* warningString) = 0; virtual void draw3dText(const btVector3& location, const char* textString) = 0; virtual void setDebugMode(int debugMode) = 0; virtual int getDebugMode() const = 0; virtual void drawAabb(const btVector3& from, const btVector3& to, const btVector3& color) { btVector3 halfExtents = (to - from) * 0.5f; btVector3 center = (to + from) * 0.5f; int i, j; btVector3 edgecoord(1.f, 1.f, 1.f), pa, pb; for (i = 0; i < 4; i++) { for (j = 0; j < 3; j++) { pa = btVector3(edgecoord[0] * halfExtents[0], edgecoord[1] * halfExtents[1], edgecoord[2] * halfExtents[2]); pa += center; int othercoord = j % 3; edgecoord[othercoord] *= -1.f; pb = btVector3(edgecoord[0] * halfExtents[0], edgecoord[1] * halfExtents[1], edgecoord[2] * halfExtents[2]); pb += center; drawLine(pa, pb, color); } edgecoord = btVector3(-1.f, -1.f, -1.f); if (i < 3) edgecoord[i] *= -1.f; } } virtual void drawTransform(const btTransform& transform, btScalar orthoLen) { btVector3 start = transform.getOrigin(); drawLine(start, start + transform.getBasis() * btVector3(orthoLen, 0, 0), btVector3(btScalar(1.), btScalar(0.3), btScalar(0.3))); drawLine(start, start + transform.getBasis() * btVector3(0, orthoLen, 0), btVector3(btScalar(0.3), btScalar(1.), btScalar(0.3))); drawLine(start, start + transform.getBasis() * btVector3(0, 0, orthoLen), btVector3(btScalar(0.3), btScalar(0.3), btScalar(1.))); } virtual void drawArc(const btVector3& center, const btVector3& normal, const btVector3& axis, btScalar radiusA, btScalar radiusB, btScalar minAngle, btScalar maxAngle, const btVector3& color, bool drawSect, btScalar stepDegrees = btScalar(10.f)) { const btVector3& vx = axis; btVector3 vy = normal.cross(axis); btScalar step = stepDegrees * SIMD_RADS_PER_DEG; int nSteps = (int)btFabs((maxAngle - minAngle) / step); if (!nSteps) nSteps = 1; btVector3 prev = center + radiusA * vx * btCos(minAngle) + radiusB * vy * btSin(minAngle); if (drawSect) { drawLine(center, prev, color); } for (int i = 1; i <= nSteps; i++) { btScalar angle = minAngle + (maxAngle - minAngle) * btScalar(i) / btScalar(nSteps); btVector3 next = center + radiusA * vx * btCos(angle) + radiusB * vy * btSin(angle); drawLine(prev, next, color); prev = next; } if (drawSect) { drawLine(center, prev, color); } } virtual void drawSpherePatch(const btVector3& center, const btVector3& up, const btVector3& axis, btScalar radius, btScalar minTh, btScalar maxTh, btScalar minPs, btScalar maxPs, const btVector3& color, btScalar stepDegrees = btScalar(10.f), bool drawCenter = true) { btVector3 vA[74]; btVector3 vB[74]; btVector3 *pvA = vA, *pvB = vB, *pT; btVector3 npole = center + up * radius; btVector3 spole = center - up * radius; btVector3 arcStart; btScalar step = stepDegrees * SIMD_RADS_PER_DEG; const btVector3& kv = up; const btVector3& iv = axis; btVector3 jv = kv.cross(iv); bool drawN = false; bool drawS = false; if (minTh <= -SIMD_HALF_PI) { minTh = -SIMD_HALF_PI + step; drawN = true; } if (maxTh >= SIMD_HALF_PI) { maxTh = SIMD_HALF_PI - step; drawS = true; } if (minTh > maxTh) { minTh = -SIMD_HALF_PI + step; maxTh = SIMD_HALF_PI - step; drawN = drawS = true; } int n_hor = (int)((maxTh - minTh) / step) + 1; if (n_hor < 2) n_hor = 2; btScalar step_h = (maxTh - minTh) / btScalar(n_hor - 1); bool isClosed = false; if (minPs > maxPs) { minPs = -SIMD_PI + step; maxPs = SIMD_PI; isClosed = true; } else if ((maxPs - minPs) >= SIMD_PI * btScalar(2.f)) { isClosed = true; } else { isClosed = false; } int n_vert = (int)((maxPs - minPs) / step) + 1; if (n_vert < 2) n_vert = 2; btScalar step_v = (maxPs - minPs) / btScalar(n_vert - 1); for (int i = 0; i < n_hor; i++) { btScalar th = minTh + btScalar(i) * step_h; btScalar sth = radius * btSin(th); btScalar cth = radius * btCos(th); for (int j = 0; j < n_vert; j++) { btScalar psi = minPs + btScalar(j) * step_v; btScalar sps = btSin(psi); btScalar cps = btCos(psi); pvB[j] = center + cth * cps * iv + cth * sps * jv + sth * kv; if (i) { drawLine(pvA[j], pvB[j], color); } else if (drawS) { drawLine(spole, pvB[j], color); } if (j) { drawLine(pvB[j - 1], pvB[j], color); } else { arcStart = pvB[j]; } if ((i == (n_hor - 1)) && drawN) { drawLine(npole, pvB[j], color); } if (drawCenter) { if (isClosed) { if (j == (n_vert - 1)) { drawLine(arcStart, pvB[j], color); } } else { if (((!i) || (i == (n_hor - 1))) && ((!j) || (j == (n_vert - 1)))) { drawLine(center, pvB[j], color); } } } } pT = pvA; pvA = pvB; pvB = pT; } } virtual void drawBox(const btVector3& bbMin, const btVector3& bbMax, const btVector3& color) { drawLine(btVector3(bbMin[0], bbMin[1], bbMin[2]), btVector3(bbMax[0], bbMin[1], bbMin[2]), color); drawLine(btVector3(bbMax[0], bbMin[1], bbMin[2]), btVector3(bbMax[0], bbMax[1], bbMin[2]), color); drawLine(btVector3(bbMax[0], bbMax[1], bbMin[2]), btVector3(bbMin[0], bbMax[1], bbMin[2]), color); drawLine(btVector3(bbMin[0], bbMax[1], bbMin[2]), btVector3(bbMin[0], bbMin[1], bbMin[2]), color); drawLine(btVector3(bbMin[0], bbMin[1], bbMin[2]), btVector3(bbMin[0], bbMin[1], bbMax[2]), color); drawLine(btVector3(bbMax[0], bbMin[1], bbMin[2]), btVector3(bbMax[0], bbMin[1], bbMax[2]), color); drawLine(btVector3(bbMax[0], bbMax[1], bbMin[2]), btVector3(bbMax[0], bbMax[1], bbMax[2]), color); drawLine(btVector3(bbMin[0], bbMax[1], bbMin[2]), btVector3(bbMin[0], bbMax[1], bbMax[2]), color); drawLine(btVector3(bbMin[0], bbMin[1], bbMax[2]), btVector3(bbMax[0], bbMin[1], bbMax[2]), color); drawLine(btVector3(bbMax[0], bbMin[1], bbMax[2]), btVector3(bbMax[0], bbMax[1], bbMax[2]), color); drawLine(btVector3(bbMax[0], bbMax[1], bbMax[2]), btVector3(bbMin[0], bbMax[1], bbMax[2]), color); drawLine(btVector3(bbMin[0], bbMax[1], bbMax[2]), btVector3(bbMin[0], bbMin[1], bbMax[2]), color); } virtual void drawBox(const btVector3& bbMin, const btVector3& bbMax, const btTransform& trans, const btVector3& color) { drawLine(trans * btVector3(bbMin[0], bbMin[1], bbMin[2]), trans * btVector3(bbMax[0], bbMin[1], bbMin[2]), color); drawLine(trans * btVector3(bbMax[0], bbMin[1], bbMin[2]), trans * btVector3(bbMax[0], bbMax[1], bbMin[2]), color); drawLine(trans * btVector3(bbMax[0], bbMax[1], bbMin[2]), trans * btVector3(bbMin[0], bbMax[1], bbMin[2]), color); drawLine(trans * btVector3(bbMin[0], bbMax[1], bbMin[2]), trans * btVector3(bbMin[0], bbMin[1], bbMin[2]), color); drawLine(trans * btVector3(bbMin[0], bbMin[1], bbMin[2]), trans * btVector3(bbMin[0], bbMin[1], bbMax[2]), color); drawLine(trans * btVector3(bbMax[0], bbMin[1], bbMin[2]), trans * btVector3(bbMax[0], bbMin[1], bbMax[2]), color); drawLine(trans * btVector3(bbMax[0], bbMax[1], bbMin[2]), trans * btVector3(bbMax[0], bbMax[1], bbMax[2]), color); drawLine(trans * btVector3(bbMin[0], bbMax[1], bbMin[2]), trans * btVector3(bbMin[0], bbMax[1], bbMax[2]), color); drawLine(trans * btVector3(bbMin[0], bbMin[1], bbMax[2]), trans * btVector3(bbMax[0], bbMin[1], bbMax[2]), color); drawLine(trans * btVector3(bbMax[0], bbMin[1], bbMax[2]), trans * btVector3(bbMax[0], bbMax[1], bbMax[2]), color); drawLine(trans * btVector3(bbMax[0], bbMax[1], bbMax[2]), trans * btVector3(bbMin[0], bbMax[1], bbMax[2]), color); drawLine(trans * btVector3(bbMin[0], bbMax[1], bbMax[2]), trans * btVector3(bbMin[0], bbMin[1], bbMax[2]), color); } virtual void drawCapsule(btScalar radius, btScalar halfHeight, int upAxis, const btTransform& transform, const btVector3& color) { int stepDegrees = 30; btVector3 capStart(0.f, 0.f, 0.f); capStart[upAxis] = -halfHeight; btVector3 capEnd(0.f, 0.f, 0.f); capEnd[upAxis] = halfHeight; // Draw the ends { btTransform childTransform = transform; childTransform.getOrigin() = transform * capStart; { btVector3 center = childTransform.getOrigin(); btVector3 up = childTransform.getBasis().getColumn((upAxis + 1) % 3); btVector3 axis = -childTransform.getBasis().getColumn(upAxis); btScalar minTh = -SIMD_HALF_PI; btScalar maxTh = SIMD_HALF_PI; btScalar minPs = -SIMD_HALF_PI; btScalar maxPs = SIMD_HALF_PI; drawSpherePatch(center, up, axis, radius, minTh, maxTh, minPs, maxPs, color, btScalar(stepDegrees), false); } } { btTransform childTransform = transform; childTransform.getOrigin() = transform * capEnd; { btVector3 center = childTransform.getOrigin(); btVector3 up = childTransform.getBasis().getColumn((upAxis + 1) % 3); btVector3 axis = childTransform.getBasis().getColumn(upAxis); btScalar minTh = -SIMD_HALF_PI; btScalar maxTh = SIMD_HALF_PI; btScalar minPs = -SIMD_HALF_PI; btScalar maxPs = SIMD_HALF_PI; drawSpherePatch(center, up, axis, radius, minTh, maxTh, minPs, maxPs, color, btScalar(stepDegrees), false); } } // Draw some additional lines btVector3 start = transform.getOrigin(); for (int i = 0; i < 360; i += stepDegrees) { capEnd[(upAxis + 1) % 3] = capStart[(upAxis + 1) % 3] = btSin(btScalar(i) * SIMD_RADS_PER_DEG) * radius; capEnd[(upAxis + 2) % 3] = capStart[(upAxis + 2) % 3] = btCos(btScalar(i) * SIMD_RADS_PER_DEG) * radius; drawLine(start + transform.getBasis() * capStart, start + transform.getBasis() * capEnd, color); } } virtual void drawCylinder(btScalar radius, btScalar halfHeight, int upAxis, const btTransform& transform, const btVector3& color) { btVector3 start = transform.getOrigin(); btVector3 offsetHeight(0, 0, 0); offsetHeight[upAxis] = halfHeight; int stepDegrees = 30; btVector3 capStart(0.f, 0.f, 0.f); capStart[upAxis] = -halfHeight; btVector3 capEnd(0.f, 0.f, 0.f); capEnd[upAxis] = halfHeight; for (int i = 0; i < 360; i += stepDegrees) { capEnd[(upAxis + 1) % 3] = capStart[(upAxis + 1) % 3] = btSin(btScalar(i) * SIMD_RADS_PER_DEG) * radius; capEnd[(upAxis + 2) % 3] = capStart[(upAxis + 2) % 3] = btCos(btScalar(i) * SIMD_RADS_PER_DEG) * radius; drawLine(start + transform.getBasis() * capStart, start + transform.getBasis() * capEnd, color); } // Drawing top and bottom caps of the cylinder btVector3 yaxis(0, 0, 0); yaxis[upAxis] = btScalar(1.0); btVector3 xaxis(0, 0, 0); xaxis[(upAxis + 1) % 3] = btScalar(1.0); drawArc(start - transform.getBasis() * (offsetHeight), transform.getBasis() * yaxis, transform.getBasis() * xaxis, radius, radius, 0, SIMD_2_PI, color, false, btScalar(10.0)); drawArc(start + transform.getBasis() * (offsetHeight), transform.getBasis() * yaxis, transform.getBasis() * xaxis, radius, radius, 0, SIMD_2_PI, color, false, btScalar(10.0)); } virtual void drawCone(btScalar radius, btScalar height, int upAxis, const btTransform& transform, const btVector3& color) { int stepDegrees = 30; btVector3 start = transform.getOrigin(); btVector3 offsetHeight(0, 0, 0); btScalar halfHeight = height * btScalar(0.5); offsetHeight[upAxis] = halfHeight; btVector3 offsetRadius(0, 0, 0); offsetRadius[(upAxis + 1) % 3] = radius; btVector3 offset2Radius(0, 0, 0); offset2Radius[(upAxis + 2) % 3] = radius; btVector3 capEnd(0.f, 0.f, 0.f); capEnd[upAxis] = -halfHeight; for (int i = 0; i < 360; i += stepDegrees) { capEnd[(upAxis + 1) % 3] = btSin(btScalar(i) * SIMD_RADS_PER_DEG) * radius; capEnd[(upAxis + 2) % 3] = btCos(btScalar(i) * SIMD_RADS_PER_DEG) * radius; drawLine(start + transform.getBasis() * (offsetHeight), start + transform.getBasis() * capEnd, color); } drawLine(start + transform.getBasis() * (offsetHeight), start + transform.getBasis() * (-offsetHeight + offsetRadius), color); drawLine(start + transform.getBasis() * (offsetHeight), start + transform.getBasis() * (-offsetHeight - offsetRadius), color); drawLine(start + transform.getBasis() * (offsetHeight), start + transform.getBasis() * (-offsetHeight + offset2Radius), color); drawLine(start + transform.getBasis() * (offsetHeight), start + transform.getBasis() * (-offsetHeight - offset2Radius), color); // Drawing the base of the cone btVector3 yaxis(0, 0, 0); yaxis[upAxis] = btScalar(1.0); btVector3 xaxis(0, 0, 0); xaxis[(upAxis + 1) % 3] = btScalar(1.0); drawArc(start - transform.getBasis() * (offsetHeight), transform.getBasis() * yaxis, transform.getBasis() * xaxis, radius, radius, 0, SIMD_2_PI, color, false, 10.0); } virtual void drawPlane(const btVector3& planeNormal, btScalar planeConst, const btTransform& transform, const btVector3& color) { btVector3 planeOrigin = planeNormal * planeConst; btVector3 vec0, vec1; btPlaneSpace1(planeNormal, vec0, vec1); btScalar vecLen = 100.f; btVector3 pt0 = planeOrigin + vec0 * vecLen; btVector3 pt1 = planeOrigin - vec0 * vecLen; btVector3 pt2 = planeOrigin + vec1 * vecLen; btVector3 pt3 = planeOrigin - vec1 * vecLen; drawLine(transform * pt0, transform * pt1, color); drawLine(transform * pt2, transform * pt3, color); } virtual void clearLines() { } virtual void flushLines() { } }; #endif //BT_IDEBUG_DRAW__H ================================================ FILE: libraries/bullet/LinearMath/btImplicitQRSVD.h ================================================ /** Bullet Continuous Collision Detection and Physics Library Copyright (c) 2019 Google Inc. http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. Copyright (c) 2016 Theodore Gast, Chuyuan Fu, Chenfanfu Jiang, Joseph Teran Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. If the code is used in an article, the following paper shall be cited: @techreport{qrsvd:2016, title={Implicit-shifted Symmetric QR Singular Value Decomposition of 3x3 Matrices}, author={Gast, Theodore and Fu, Chuyuan and Jiang, Chenfanfu and Teran, Joseph}, year={2016}, institution={University of California Los Angeles} } THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. **/ #ifndef btImplicitQRSVD_h #define btImplicitQRSVD_h #include #include "btMatrix3x3.h" class btMatrix2x2 { public: btScalar m_00, m_01, m_10, m_11; btMatrix2x2(): m_00(0), m_10(0), m_01(0), m_11(0) { } btMatrix2x2(const btMatrix2x2& other): m_00(other.m_00),m_01(other.m_01),m_10(other.m_10),m_11(other.m_11) {} btScalar& operator()(int i, int j) { if (i == 0 && j == 0) return m_00; if (i == 1 && j == 0) return m_10; if (i == 0 && j == 1) return m_01; if (i == 1 && j == 1) return m_11; btAssert(false); return m_00; } const btScalar& operator()(int i, int j) const { if (i == 0 && j == 0) return m_00; if (i == 1 && j == 0) return m_10; if (i == 0 && j == 1) return m_01; if (i == 1 && j == 1) return m_11; btAssert(false); return m_00; } void setIdentity() { m_00 = 1; m_11 = 1; m_01 = 0; m_10 = 0; } }; static inline btScalar copySign(btScalar x, btScalar y) { if ((x < 0 && y > 0) || (x > 0 && y < 0)) return -x; return x; } /** Class for givens rotation. Row rotation G*A corresponds to something like c -s 0 ( s c 0 ) A 0 0 1 Column rotation A G' corresponds to something like c -s 0 A ( s c 0 ) 0 0 1 c and s are always computed so that ( c -s ) ( a ) = ( * ) s c b ( 0 ) Assume rowi SIMD_EPSILON) { btScalar sqrtd = btSqrt(d); if (sqrtd>SIMD_EPSILON) { btScalar t = btScalar(1.0)/sqrtd; c = a * t; s = -b * t; } } } /** This function computes c and s so that ( c -s ) ( a ) = ( 0 ) s c b ( * ) */ inline void computeUnconventional(const btScalar a, const btScalar b) { btScalar d = a * a + b * b; c = 0; s = 1; if (d > SIMD_EPSILON) { btScalar t = btScalar(1.0)/btSqrt(d); s = a * t; c = b * t; } } /** Fill the R with the entries of this rotation */ inline void fill(const btMatrix3x3& R) const { btMatrix3x3& A = const_cast(R); A.setIdentity(); A[rowi][rowi] = c; A[rowk][rowi] = -s; A[rowi][rowk] = s; A[rowk][rowk] = c; } inline void fill(const btMatrix2x2& R) const { btMatrix2x2& A = const_cast(R); A(rowi,rowi) = c; A(rowk,rowi) = -s; A(rowi,rowk) = s; A(rowk,rowk) = c; } /** This function does something like c -s 0 ( s c 0 ) A -> A 0 0 1 It only affects row i and row k of A. */ inline void rowRotation(btMatrix3x3& A) const { for (int j = 0; j < 3; j++) { btScalar tau1 = A[rowi][j]; btScalar tau2 = A[rowk][j]; A[rowi][j] = c * tau1 - s * tau2; A[rowk][j] = s * tau1 + c * tau2; } } inline void rowRotation(btMatrix2x2& A) const { for (int j = 0; j < 2; j++) { btScalar tau1 = A(rowi,j); btScalar tau2 = A(rowk,j); A(rowi,j) = c * tau1 - s * tau2; A(rowk,j) = s * tau1 + c * tau2; } } /** This function does something like c s 0 A ( -s c 0 ) -> A 0 0 1 It only affects column i and column k of A. */ inline void columnRotation(btMatrix3x3& A) const { for (int j = 0; j < 3; j++) { btScalar tau1 = A[j][rowi]; btScalar tau2 = A[j][rowk]; A[j][rowi] = c * tau1 - s * tau2; A[j][rowk] = s * tau1 + c * tau2; } } inline void columnRotation(btMatrix2x2& A) const { for (int j = 0; j < 2; j++) { btScalar tau1 = A(j,rowi); btScalar tau2 = A(j,rowk); A(j,rowi) = c * tau1 - s * tau2; A(j,rowk) = s * tau1 + c * tau2; } } /** Multiply givens must be for same row and column **/ inline void operator*=(const GivensRotation& A) { btScalar new_c = c * A.c - s * A.s; btScalar new_s = s * A.c + c * A.s; c = new_c; s = new_s; } /** Multiply givens must be for same row and column **/ inline GivensRotation operator*(const GivensRotation& A) const { GivensRotation r(*this); r *= A; return r; } }; /** \brief zero chasing the 3X3 matrix to bidiagonal form original form of H: x x 0 x x x 0 0 x after zero chase: x x 0 0 x x 0 0 x */ inline void zeroChase(btMatrix3x3& H, btMatrix3x3& U, btMatrix3x3& V) { /** Reduce H to of form x x + 0 x x 0 0 x */ GivensRotation r1(H[0][0], H[1][0], 0, 1); /** Reduce H to of form x x 0 0 x x 0 + x Can calculate r2 without multiplying by r1 since both entries are in first two rows thus no need to divide by sqrt(a^2+b^2) */ GivensRotation r2(1, 2); if (H[1][0] != 0) r2.compute(H[0][0] * H[0][1] + H[1][0] * H[1][1], H[0][0] * H[0][2] + H[1][0] * H[1][2]); else r2.compute(H[0][1], H[0][2]); r1.rowRotation(H); /* GivensRotation r2(H(0, 1), H(0, 2), 1, 2); */ r2.columnRotation(H); r2.columnRotation(V); /** Reduce H to of form x x 0 0 x x 0 0 x */ GivensRotation r3(H[1][1], H[2][1], 1, 2); r3.rowRotation(H); // Save this till end for better cache coherency // r1.rowRotation(u_transpose); // r3.rowRotation(u_transpose); r1.columnRotation(U); r3.columnRotation(U); } /** \brief make a 3X3 matrix to upper bidiagonal form original form of H: x x x x x x x x x after zero chase: x x 0 0 x x 0 0 x */ inline void makeUpperBidiag(btMatrix3x3& H, btMatrix3x3& U, btMatrix3x3& V) { U.setIdentity(); V.setIdentity(); /** Reduce H to of form x x x x x x 0 x x */ GivensRotation r(H[1][0], H[2][0], 1, 2); r.rowRotation(H); // r.rowRotation(u_transpose); r.columnRotation(U); // zeroChase(H, u_transpose, V); zeroChase(H, U, V); } /** \brief make a 3X3 matrix to lambda shape original form of H: x x x * x x x * x x x after : * x 0 0 * x x 0 * x 0 x */ inline void makeLambdaShape(btMatrix3x3& H, btMatrix3x3& U, btMatrix3x3& V) { U.setIdentity(); V.setIdentity(); /** Reduce H to of form * x x 0 * x x x * x x x */ GivensRotation r1(H[0][1], H[0][2], 1, 2); r1.columnRotation(H); r1.columnRotation(V); /** Reduce H to of form * x x 0 * x x 0 * x x x */ r1.computeUnconventional(H[1][2], H[2][2]); r1.rowRotation(H); r1.columnRotation(U); /** Reduce H to of form * x x 0 * x x 0 * x 0 x */ GivensRotation r2(H[2][0], H[2][1], 0, 1); r2.columnRotation(H); r2.columnRotation(V); /** Reduce H to of form * x 0 0 * x x 0 * x 0 x */ r2.computeUnconventional(H[0][1], H[1][1]); r2.rowRotation(H); r2.columnRotation(U); } /** \brief 2x2 polar decomposition. \param[in] A matrix. \param[out] R Robustly a rotation matrix. \param[out] S_Sym Symmetric. Whole matrix is stored Polar guarantees negative sign is on the small magnitude singular value. S is guaranteed to be the closest one to identity. R is guaranteed to be the closest rotation to A. */ inline void polarDecomposition(const btMatrix2x2& A, GivensRotation& R, const btMatrix2x2& S_Sym) { btScalar a = (A(0, 0) + A(1, 1)), b = (A(1, 0) - A(0, 1)); btScalar denominator = btSqrt(a*a+b*b); R.c = (btScalar)1; R.s = (btScalar)0; if (denominator > SIMD_EPSILON) { /* No need to use a tolerance here because x(0) and x(1) always have smaller magnitude then denominator, therefore overflow never happens. In Bullet, we use a tolerance anyway. */ R.c = a / denominator; R.s = -b / denominator; } btMatrix2x2& S = const_cast(S_Sym); S = A; R.rowRotation(S); } inline void polarDecomposition(const btMatrix2x2& A, const btMatrix2x2& R, const btMatrix2x2& S_Sym) { GivensRotation r(0, 1); polarDecomposition(A, r, S_Sym); r.fill(R); } /** \brief 2x2 SVD (singular value decomposition) A=USV' \param[in] A Input matrix. \param[out] U Robustly a rotation matrix in Givens form \param[out] Sigma matrix of singular values sorted with decreasing magnitude. The second one can be negative. \param[out] V Robustly a rotation matrix in Givens form */ inline void singularValueDecomposition( const btMatrix2x2& A, GivensRotation& U, const btMatrix2x2& Sigma, GivensRotation& V, const btScalar tol = 64 * std::numeric_limits::epsilon()) { btMatrix2x2& sigma = const_cast(Sigma); sigma.setIdentity(); btMatrix2x2 S_Sym; polarDecomposition(A, U, S_Sym); btScalar cosine, sine; btScalar x = S_Sym(0, 0); btScalar y = S_Sym(0, 1); btScalar z = S_Sym(1, 1); if (y == 0) { // S is already diagonal cosine = 1; sine = 0; sigma(0,0) = x; sigma(1,1) = z; } else { btScalar tau = 0.5 * (x - z); btScalar val = tau * tau + y * y; if (val > SIMD_EPSILON) { btScalar w = btSqrt(val); // w > y > 0 btScalar t; if (tau > 0) { // tau + w > w > y > 0 ==> division is safe t = y / (tau + w); } else { // tau - w < -w < -y < 0 ==> division is safe t = y / (tau - w); } cosine = btScalar(1) / btSqrt(t * t + btScalar(1)); sine = -t * cosine; /* V = [cosine -sine; sine cosine] Sigma = V'SV. Only compute the diagonals for efficiency. Also utilize symmetry of S and don't form V yet. */ btScalar c2 = cosine * cosine; btScalar csy = 2 * cosine * sine * y; btScalar s2 = sine * sine; sigma(0,0) = c2 * x - csy + s2 * z; sigma(1,1) = s2 * x + csy + c2 * z; } else { cosine = 1; sine = 0; sigma(0,0) = x; sigma(1,1) = z; } } // Sorting // Polar already guarantees negative sign is on the small magnitude singular value. if (sigma(0,0) < sigma(1,1)) { std::swap(sigma(0,0), sigma(1,1)); V.c = -sine; V.s = cosine; } else { V.c = cosine; V.s = sine; } U *= V; } /** \brief 2x2 SVD (singular value decomposition) A=USV' \param[in] A Input matrix. \param[out] U Robustly a rotation matrix. \param[out] Sigma Vector of singular values sorted with decreasing magnitude. The second one can be negative. \param[out] V Robustly a rotation matrix. */ inline void singularValueDecomposition( const btMatrix2x2& A, const btMatrix2x2& U, const btMatrix2x2& Sigma, const btMatrix2x2& V, const btScalar tol = 64 * std::numeric_limits::epsilon()) { GivensRotation gv(0, 1); GivensRotation gu(0, 1); singularValueDecomposition(A, gu, Sigma, gv); gu.fill(U); gv.fill(V); } /** \brief compute wilkinsonShift of the block a1 b1 b1 a2 based on the wilkinsonShift formula mu = c + d - sign (d) \ sqrt (d*d + b*b), where d = (a-c)/2 */ inline btScalar wilkinsonShift(const btScalar a1, const btScalar b1, const btScalar a2) { btScalar d = (btScalar)0.5 * (a1 - a2); btScalar bs = b1 * b1; btScalar val = d * d + bs; if (val>SIMD_EPSILON) { btScalar denom = btFabs(d) + btSqrt(val); btScalar mu = a2 - copySign(bs / (denom), d); // T mu = a2 - bs / ( d + sign_d*sqrt (d*d + bs)); return mu; } return a2; } /** \brief Helper function of 3X3 SVD for processing 2X2 SVD */ template inline void process(btMatrix3x3& B, btMatrix3x3& U, btVector3& sigma, btMatrix3x3& V) { int other = (t == 1) ? 0 : 2; GivensRotation u(0, 1); GivensRotation v(0, 1); sigma[other] = B[other][other]; btMatrix2x2 B_sub, sigma_sub; if (t == 0) { B_sub.m_00 = B[0][0]; B_sub.m_10 = B[1][0]; B_sub.m_01 = B[0][1]; B_sub.m_11 = B[1][1]; sigma_sub.m_00 = sigma[0]; sigma_sub.m_11 = sigma[1]; // singularValueDecomposition(B.template block<2, 2>(t, t), u, sigma.template block<2, 1>(t, 0), v); singularValueDecomposition(B_sub, u, sigma_sub, v); B[0][0] = B_sub.m_00; B[1][0] = B_sub.m_10; B[0][1] = B_sub.m_01; B[1][1] = B_sub.m_11; sigma[0] = sigma_sub.m_00; sigma[1] = sigma_sub.m_11; } else { B_sub.m_00 = B[1][1]; B_sub.m_10 = B[2][1]; B_sub.m_01 = B[1][2]; B_sub.m_11 = B[2][2]; sigma_sub.m_00 = sigma[1]; sigma_sub.m_11 = sigma[2]; // singularValueDecomposition(B.template block<2, 2>(t, t), u, sigma.template block<2, 1>(t, 0), v); singularValueDecomposition(B_sub, u, sigma_sub, v); B[1][1] = B_sub.m_00; B[2][1] = B_sub.m_10; B[1][2] = B_sub.m_01; B[2][2] = B_sub.m_11; sigma[1] = sigma_sub.m_00; sigma[2] = sigma_sub.m_11; } u.rowi += t; u.rowk += t; v.rowi += t; v.rowk += t; u.columnRotation(U); v.columnRotation(V); } /** \brief Helper function of 3X3 SVD for flipping signs due to flipping signs of sigma */ inline void flipSign(int i, btMatrix3x3& U, btVector3& sigma) { sigma[i] = -sigma[i]; U[0][i] = -U[0][i]; U[1][i] = -U[1][i]; U[2][i] = -U[2][i]; } inline void flipSign(int i, btMatrix3x3& U) { U[0][i] = -U[0][i]; U[1][i] = -U[1][i]; U[2][i] = -U[2][i]; } inline void swapCol(btMatrix3x3& A, int i, int j) { for (int d = 0; d < 3; ++d) std::swap(A[d][i], A[d][j]); } /** \brief Helper function of 3X3 SVD for sorting singular values */ inline void sort(btMatrix3x3& U, btVector3& sigma, btMatrix3x3& V, int t) { if (t == 0) { // Case: sigma(0) > |sigma(1)| >= |sigma(2)| if (btFabs(sigma[1]) >= btFabs(sigma[2])) { if (sigma[1] < 0) { flipSign(1, U, sigma); flipSign(2, U, sigma); } return; } //fix sign of sigma for both cases if (sigma[2] < 0) { flipSign(1, U, sigma); flipSign(2, U, sigma); } //swap sigma(1) and sigma(2) for both cases std::swap(sigma[1], sigma[2]); // swap the col 1 and col 2 for U,V swapCol(U,1,2); swapCol(V,1,2); // Case: |sigma(2)| >= sigma(0) > |simga(1)| if (sigma[1] > sigma[0]) { std::swap(sigma[0], sigma[1]); swapCol(U,0,1); swapCol(V,0,1); } // Case: sigma(0) >= |sigma(2)| > |simga(1)| else { flipSign(2, U); flipSign(2, V); } } else if (t == 1) { // Case: |sigma(0)| >= sigma(1) > |sigma(2)| if (btFabs(sigma[0]) >= sigma[1]) { if (sigma[0] < 0) { flipSign(0, U, sigma); flipSign(2, U, sigma); } return; } //swap sigma(0) and sigma(1) for both cases std::swap(sigma[0], sigma[1]); swapCol(U, 0, 1); swapCol(V, 0, 1); // Case: sigma(1) > |sigma(2)| >= |sigma(0)| if (btFabs(sigma[1]) < btFabs(sigma[2])) { std::swap(sigma[1], sigma[2]); swapCol(U, 1, 2); swapCol(V, 1, 2); } // Case: sigma(1) >= |sigma(0)| > |sigma(2)| else { flipSign(1, U); flipSign(1, V); } // fix sign for both cases if (sigma[1] < 0) { flipSign(1, U, sigma); flipSign(2, U, sigma); } } } /** \brief 3X3 SVD (singular value decomposition) A=USV' \param[in] A Input matrix. \param[out] U is a rotation matrix. \param[out] sigma Diagonal matrix, sorted with decreasing magnitude. The third one can be negative. \param[out] V is a rotation matrix. */ inline int singularValueDecomposition(const btMatrix3x3& A, btMatrix3x3& U, btVector3& sigma, btMatrix3x3& V, btScalar tol = 128*std::numeric_limits::epsilon()) { // using std::fabs; btMatrix3x3 B = A; U.setIdentity(); V.setIdentity(); makeUpperBidiag(B, U, V); int count = 0; btScalar mu = (btScalar)0; GivensRotation r(0, 1); btScalar alpha_1 = B[0][0]; btScalar beta_1 = B[0][1]; btScalar alpha_2 = B[1][1]; btScalar alpha_3 = B[2][2]; btScalar beta_2 = B[1][2]; btScalar gamma_1 = alpha_1 * beta_1; btScalar gamma_2 = alpha_2 * beta_2; btScalar val = alpha_1 * alpha_1 + alpha_2 * alpha_2 + alpha_3 * alpha_3 + beta_1 * beta_1 + beta_2 * beta_2; if (val > SIMD_EPSILON) { tol *= btMax((btScalar)0.5 * btSqrt(val), (btScalar)1); } /** Do implicit shift QR until A^T A is block diagonal */ int max_count = 100; while (btFabs(beta_2) > tol && btFabs(beta_1) > tol && btFabs(alpha_1) > tol && btFabs(alpha_2) > tol && btFabs(alpha_3) > tol && count < max_count) { mu = wilkinsonShift(alpha_2 * alpha_2 + beta_1 * beta_1, gamma_2, alpha_3 * alpha_3 + beta_2 * beta_2); r.compute(alpha_1 * alpha_1 - mu, gamma_1); r.columnRotation(B); r.columnRotation(V); zeroChase(B, U, V); alpha_1 = B[0][0]; beta_1 = B[0][1]; alpha_2 = B[1][1]; alpha_3 = B[2][2]; beta_2 = B[1][2]; gamma_1 = alpha_1 * beta_1; gamma_2 = alpha_2 * beta_2; count++; } /** Handle the cases of one of the alphas and betas being 0 Sorted by ease of handling and then frequency of occurrence If B is of form x x 0 0 x 0 0 0 x */ if (btFabs(beta_2) <= tol) { process<0>(B, U, sigma, V); sort(U, sigma, V,0); } /** If B is of form x 0 0 0 x x 0 0 x */ else if (btFabs(beta_1) <= tol) { process<1>(B, U, sigma, V); sort(U, sigma, V,1); } /** If B is of form x x 0 0 0 x 0 0 x */ else if (btFabs(alpha_2) <= tol) { /** Reduce B to x x 0 0 0 0 0 0 x */ GivensRotation r1(1, 2); r1.computeUnconventional(B[1][2], B[2][2]); r1.rowRotation(B); r1.columnRotation(U); process<0>(B, U, sigma, V); sort(U, sigma, V, 0); } /** If B is of form x x 0 0 x x 0 0 0 */ else if (btFabs(alpha_3) <= tol) { /** Reduce B to x x + 0 x 0 0 0 0 */ GivensRotation r1(1, 2); r1.compute(B[1][1], B[1][2]); r1.columnRotation(B); r1.columnRotation(V); /** Reduce B to x x 0 + x 0 0 0 0 */ GivensRotation r2(0, 2); r2.compute(B[0][0], B[0][2]); r2.columnRotation(B); r2.columnRotation(V); process<0>(B, U, sigma, V); sort(U, sigma, V, 0); } /** If B is of form 0 x 0 0 x x 0 0 x */ else if (btFabs(alpha_1) <= tol) { /** Reduce B to 0 0 + 0 x x 0 0 x */ GivensRotation r1(0, 1); r1.computeUnconventional(B[0][1], B[1][1]); r1.rowRotation(B); r1.columnRotation(U); /** Reduce B to 0 0 0 0 x x 0 + x */ GivensRotation r2(0, 2); r2.computeUnconventional(B[0][2], B[2][2]); r2.rowRotation(B); r2.columnRotation(U); process<1>(B, U, sigma, V); sort(U, sigma, V, 1); } return count; } #endif /* btImplicitQRSVD_h */ ================================================ FILE: libraries/bullet/LinearMath/btList.h ================================================ /* Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_GEN_LIST_H #define BT_GEN_LIST_H class btGEN_Link { public: btGEN_Link() : m_next(0), m_prev(0) {} btGEN_Link(btGEN_Link *next, btGEN_Link *prev) : m_next(next), m_prev(prev) {} btGEN_Link *getNext() const { return m_next; } btGEN_Link *getPrev() const { return m_prev; } bool isHead() const { return m_prev == 0; } bool isTail() const { return m_next == 0; } void insertBefore(btGEN_Link *link) { m_next = link; m_prev = link->m_prev; m_next->m_prev = this; m_prev->m_next = this; } void insertAfter(btGEN_Link *link) { m_next = link->m_next; m_prev = link; m_next->m_prev = this; m_prev->m_next = this; } void remove() { m_next->m_prev = m_prev; m_prev->m_next = m_next; } private: btGEN_Link *m_next; btGEN_Link *m_prev; }; class btGEN_List { public: btGEN_List() : m_head(&m_tail, 0), m_tail(0, &m_head) {} btGEN_Link *getHead() const { return m_head.getNext(); } btGEN_Link *getTail() const { return m_tail.getPrev(); } void addHead(btGEN_Link *link) { link->insertAfter(&m_head); } void addTail(btGEN_Link *link) { link->insertBefore(&m_tail); } private: btGEN_Link m_head; btGEN_Link m_tail; }; #endif //BT_GEN_LIST_H ================================================ FILE: libraries/bullet/LinearMath/btMatrix3x3.h ================================================ /* Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_MATRIX3x3_H #define BT_MATRIX3x3_H #include "btVector3.h" #include "btQuaternion.h" #include #ifdef BT_USE_SSE //const __m128 ATTRIBUTE_ALIGNED16(v2220) = {2.0f, 2.0f, 2.0f, 0.0f}; //const __m128 ATTRIBUTE_ALIGNED16(vMPPP) = {-0.0f, +0.0f, +0.0f, +0.0f}; #define vMPPP (_mm_set_ps(+0.0f, +0.0f, +0.0f, -0.0f)) #endif #if defined(BT_USE_SSE) #define v0000 (_mm_set_ps(0.0f, 0.0f, 0.0f, 0.0f)) #define v1000 (_mm_set_ps(0.0f, 0.0f, 0.0f, 1.0f)) #define v0100 (_mm_set_ps(0.0f, 0.0f, 1.0f, 0.0f)) #define v0010 (_mm_set_ps(0.0f, 1.0f, 0.0f, 0.0f)) #elif defined(BT_USE_NEON) const btSimdFloat4 ATTRIBUTE_ALIGNED16(v0000) = {0.0f, 0.0f, 0.0f, 0.0f}; const btSimdFloat4 ATTRIBUTE_ALIGNED16(v1000) = {1.0f, 0.0f, 0.0f, 0.0f}; const btSimdFloat4 ATTRIBUTE_ALIGNED16(v0100) = {0.0f, 1.0f, 0.0f, 0.0f}; const btSimdFloat4 ATTRIBUTE_ALIGNED16(v0010) = {0.0f, 0.0f, 1.0f, 0.0f}; #endif #ifdef BT_USE_DOUBLE_PRECISION #define btMatrix3x3Data btMatrix3x3DoubleData #else #define btMatrix3x3Data btMatrix3x3FloatData #endif //BT_USE_DOUBLE_PRECISION /**@brief The btMatrix3x3 class implements a 3x3 rotation matrix, to perform linear algebra in combination with btQuaternion, btTransform and btVector3. * Make sure to only include a pure orthogonal matrix without scaling. */ ATTRIBUTE_ALIGNED16(class) btMatrix3x3 { ///Data storage for the matrix, each vector is a row of the matrix btVector3 m_el[3]; public: /** @brief No initializaion constructor */ btMatrix3x3() {} // explicit btMatrix3x3(const btScalar *m) { setFromOpenGLSubMatrix(m); } /**@brief Constructor from Quaternion */ explicit btMatrix3x3(const btQuaternion& q) { setRotation(q); } /* template Matrix3x3(const btScalar& yaw, const btScalar& pitch, const btScalar& roll) { setEulerYPR(yaw, pitch, roll); } */ /** @brief Constructor with row major formatting */ btMatrix3x3(const btScalar& xx, const btScalar& xy, const btScalar& xz, const btScalar& yx, const btScalar& yy, const btScalar& yz, const btScalar& zx, const btScalar& zy, const btScalar& zz) { setValue(xx, xy, xz, yx, yy, yz, zx, zy, zz); } #if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) || defined(BT_USE_NEON) SIMD_FORCE_INLINE btMatrix3x3(const btSimdFloat4 v0, const btSimdFloat4 v1, const btSimdFloat4 v2) { m_el[0].mVec128 = v0; m_el[1].mVec128 = v1; m_el[2].mVec128 = v2; } SIMD_FORCE_INLINE btMatrix3x3(const btVector3& v0, const btVector3& v1, const btVector3& v2) { m_el[0] = v0; m_el[1] = v1; m_el[2] = v2; } // Copy constructor SIMD_FORCE_INLINE btMatrix3x3(const btMatrix3x3& rhs) { m_el[0].mVec128 = rhs.m_el[0].mVec128; m_el[1].mVec128 = rhs.m_el[1].mVec128; m_el[2].mVec128 = rhs.m_el[2].mVec128; } // Assignment Operator SIMD_FORCE_INLINE btMatrix3x3& operator=(const btMatrix3x3& m) { m_el[0].mVec128 = m.m_el[0].mVec128; m_el[1].mVec128 = m.m_el[1].mVec128; m_el[2].mVec128 = m.m_el[2].mVec128; return *this; } #else /** @brief Copy constructor */ SIMD_FORCE_INLINE btMatrix3x3(const btMatrix3x3& other) { m_el[0] = other.m_el[0]; m_el[1] = other.m_el[1]; m_el[2] = other.m_el[2]; } /** @brief Assignment Operator */ SIMD_FORCE_INLINE btMatrix3x3& operator=(const btMatrix3x3& other) { m_el[0] = other.m_el[0]; m_el[1] = other.m_el[1]; m_el[2] = other.m_el[2]; return *this; } SIMD_FORCE_INLINE btMatrix3x3(const btVector3& v0, const btVector3& v1, const btVector3& v2) { m_el[0] = v0; m_el[1] = v1; m_el[2] = v2; } #endif /** @brief Get a column of the matrix as a vector * @param i Column number 0 indexed */ SIMD_FORCE_INLINE btVector3 getColumn(int i) const { return btVector3(m_el[0][i], m_el[1][i], m_el[2][i]); } /** @brief Get a row of the matrix as a vector * @param i Row number 0 indexed */ SIMD_FORCE_INLINE const btVector3& getRow(int i) const { btFullAssert(0 <= i && i < 3); return m_el[i]; } /** @brief Get a mutable reference to a row of the matrix as a vector * @param i Row number 0 indexed */ SIMD_FORCE_INLINE btVector3& operator[](int i) { btFullAssert(0 <= i && i < 3); return m_el[i]; } /** @brief Get a const reference to a row of the matrix as a vector * @param i Row number 0 indexed */ SIMD_FORCE_INLINE const btVector3& operator[](int i) const { btFullAssert(0 <= i && i < 3); return m_el[i]; } /** @brief Multiply by the target matrix on the right * @param m Rotation matrix to be applied * Equivilant to this = this * m */ btMatrix3x3& operator*=(const btMatrix3x3& m); /** @brief Adds by the target matrix on the right * @param m matrix to be applied * Equivilant to this = this + m */ btMatrix3x3& operator+=(const btMatrix3x3& m); /** @brief Substractss by the target matrix on the right * @param m matrix to be applied * Equivilant to this = this - m */ btMatrix3x3& operator-=(const btMatrix3x3& m); /** @brief Set from the rotational part of a 4x4 OpenGL matrix * @param m A pointer to the beginning of the array of scalars*/ void setFromOpenGLSubMatrix(const btScalar* m) { m_el[0].setValue(m[0], m[4], m[8]); m_el[1].setValue(m[1], m[5], m[9]); m_el[2].setValue(m[2], m[6], m[10]); } /** @brief Set the values of the matrix explicitly (row major) * @param xx Top left * @param xy Top Middle * @param xz Top Right * @param yx Middle Left * @param yy Middle Middle * @param yz Middle Right * @param zx Bottom Left * @param zy Bottom Middle * @param zz Bottom Right*/ void setValue(const btScalar& xx, const btScalar& xy, const btScalar& xz, const btScalar& yx, const btScalar& yy, const btScalar& yz, const btScalar& zx, const btScalar& zy, const btScalar& zz) { m_el[0].setValue(xx, xy, xz); m_el[1].setValue(yx, yy, yz); m_el[2].setValue(zx, zy, zz); } /** @brief Set the matrix from a quaternion * @param q The Quaternion to match */ void setRotation(const btQuaternion& q) { btScalar d = q.length2(); btFullAssert(d != btScalar(0.0)); btScalar s = btScalar(2.0) / d; #if defined BT_USE_SIMD_VECTOR3 && defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) __m128 vs, Q = q.get128(); __m128i Qi = btCastfTo128i(Q); __m128 Y, Z; __m128 V1, V2, V3; __m128 V11, V21, V31; __m128 NQ = _mm_xor_ps(Q, btvMzeroMask); __m128i NQi = btCastfTo128i(NQ); V1 = btCastiTo128f(_mm_shuffle_epi32(Qi, BT_SHUFFLE(1, 0, 2, 3))); // Y X Z W V2 = _mm_shuffle_ps(NQ, Q, BT_SHUFFLE(0, 0, 1, 3)); // -X -X Y W V3 = btCastiTo128f(_mm_shuffle_epi32(Qi, BT_SHUFFLE(2, 1, 0, 3))); // Z Y X W V1 = _mm_xor_ps(V1, vMPPP); // change the sign of the first element V11 = btCastiTo128f(_mm_shuffle_epi32(Qi, BT_SHUFFLE(1, 1, 0, 3))); // Y Y X W V21 = _mm_unpackhi_ps(Q, Q); // Z Z W W V31 = _mm_shuffle_ps(Q, NQ, BT_SHUFFLE(0, 2, 0, 3)); // X Z -X -W V2 = V2 * V1; // V1 = V1 * V11; // V3 = V3 * V31; // V11 = _mm_shuffle_ps(NQ, Q, BT_SHUFFLE(2, 3, 1, 3)); // -Z -W Y W V11 = V11 * V21; // V21 = _mm_xor_ps(V21, vMPPP); // change the sign of the first element V31 = _mm_shuffle_ps(Q, NQ, BT_SHUFFLE(3, 3, 1, 3)); // W W -Y -W V31 = _mm_xor_ps(V31, vMPPP); // change the sign of the first element Y = btCastiTo128f(_mm_shuffle_epi32(NQi, BT_SHUFFLE(3, 2, 0, 3))); // -W -Z -X -W Z = btCastiTo128f(_mm_shuffle_epi32(Qi, BT_SHUFFLE(1, 0, 1, 3))); // Y X Y W vs = _mm_load_ss(&s); V21 = V21 * Y; V31 = V31 * Z; V1 = V1 + V11; V2 = V2 + V21; V3 = V3 + V31; vs = bt_splat3_ps(vs, 0); // s ready V1 = V1 * vs; V2 = V2 * vs; V3 = V3 * vs; V1 = V1 + v1000; V2 = V2 + v0100; V3 = V3 + v0010; m_el[0] = V1; m_el[1] = V2; m_el[2] = V3; #else btScalar xs = q.x() * s, ys = q.y() * s, zs = q.z() * s; btScalar wx = q.w() * xs, wy = q.w() * ys, wz = q.w() * zs; btScalar xx = q.x() * xs, xy = q.x() * ys, xz = q.x() * zs; btScalar yy = q.y() * ys, yz = q.y() * zs, zz = q.z() * zs; setValue( btScalar(1.0) - (yy + zz), xy - wz, xz + wy, xy + wz, btScalar(1.0) - (xx + zz), yz - wx, xz - wy, yz + wx, btScalar(1.0) - (xx + yy)); #endif } /** @brief Set the matrix from euler angles using YPR around YXZ respectively * @param yaw Yaw about Y axis * @param pitch Pitch about X axis * @param roll Roll about Z axis */ void setEulerYPR(const btScalar& yaw, const btScalar& pitch, const btScalar& roll) { setEulerZYX(roll, pitch, yaw); } /** @brief Set the matrix from euler angles YPR around ZYX axes * @param eulerX Roll about X axis * @param eulerY Pitch around Y axis * @param eulerZ Yaw about Z axis * * These angles are used to produce a rotation matrix. The euler * angles are applied in ZYX order. I.e a vector is first rotated * about X then Y and then Z **/ void setEulerZYX(btScalar eulerX, btScalar eulerY, btScalar eulerZ) { ///@todo proposed to reverse this since it's labeled zyx but takes arguments xyz and it will match all other parts of the code btScalar ci(btCos(eulerX)); btScalar cj(btCos(eulerY)); btScalar ch(btCos(eulerZ)); btScalar si(btSin(eulerX)); btScalar sj(btSin(eulerY)); btScalar sh(btSin(eulerZ)); btScalar cc = ci * ch; btScalar cs = ci * sh; btScalar sc = si * ch; btScalar ss = si * sh; setValue(cj * ch, sj * sc - cs, sj * cc + ss, cj * sh, sj * ss + cc, sj * cs - sc, -sj, cj * si, cj * ci); } /**@brief Set the matrix to the identity */ void setIdentity() { #if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) || defined(BT_USE_NEON) m_el[0] = v1000; m_el[1] = v0100; m_el[2] = v0010; #else setValue(btScalar(1.0), btScalar(0.0), btScalar(0.0), btScalar(0.0), btScalar(1.0), btScalar(0.0), btScalar(0.0), btScalar(0.0), btScalar(1.0)); #endif } /**@brief Set the matrix to the identity */ void setZero() { #if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) || defined(BT_USE_NEON) m_el[0] = v0000; m_el[1] = v0000; m_el[2] = v0000; #else setValue(btScalar(0.0), btScalar(0.0), btScalar(0.0), btScalar(0.0), btScalar(0.0), btScalar(0.0), btScalar(0.0), btScalar(0.0), btScalar(0.0)); #endif } static const btMatrix3x3& getIdentity() { #if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) || defined(BT_USE_NEON) static const btMatrix3x3 identityMatrix(v1000, v0100, v0010); #else static const btMatrix3x3 identityMatrix( btScalar(1.0), btScalar(0.0), btScalar(0.0), btScalar(0.0), btScalar(1.0), btScalar(0.0), btScalar(0.0), btScalar(0.0), btScalar(1.0)); #endif return identityMatrix; } /**@brief Fill the rotational part of an OpenGL matrix and clear the shear/perspective * @param m The array to be filled */ void getOpenGLSubMatrix(btScalar * m) const { #if defined BT_USE_SIMD_VECTOR3 && defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) __m128 v0 = m_el[0].mVec128; __m128 v1 = m_el[1].mVec128; __m128 v2 = m_el[2].mVec128; // x2 y2 z2 w2 __m128* vm = (__m128*)m; __m128 vT; v2 = _mm_and_ps(v2, btvFFF0fMask); // x2 y2 z2 0 vT = _mm_unpackhi_ps(v0, v1); // z0 z1 * * v0 = _mm_unpacklo_ps(v0, v1); // x0 x1 y0 y1 v1 = _mm_shuffle_ps(v0, v2, BT_SHUFFLE(2, 3, 1, 3)); // y0 y1 y2 0 v0 = _mm_shuffle_ps(v0, v2, BT_SHUFFLE(0, 1, 0, 3)); // x0 x1 x2 0 v2 = btCastdTo128f(_mm_move_sd(btCastfTo128d(v2), btCastfTo128d(vT))); // z0 z1 z2 0 vm[0] = v0; vm[1] = v1; vm[2] = v2; #elif defined(BT_USE_NEON) // note: zeros the w channel. We can preserve it at the cost of two more vtrn instructions. static const uint32x2_t zMask = (const uint32x2_t){static_cast(-1), 0}; float32x4_t* vm = (float32x4_t*)m; float32x4x2_t top = vtrnq_f32(m_el[0].mVec128, m_el[1].mVec128); // {x0 x1 z0 z1}, {y0 y1 w0 w1} float32x2x2_t bl = vtrn_f32(vget_low_f32(m_el[2].mVec128), vdup_n_f32(0.0f)); // {x2 0 }, {y2 0} float32x4_t v0 = vcombine_f32(vget_low_f32(top.val[0]), bl.val[0]); float32x4_t v1 = vcombine_f32(vget_low_f32(top.val[1]), bl.val[1]); float32x2_t q = (float32x2_t)vand_u32((uint32x2_t)vget_high_f32(m_el[2].mVec128), zMask); float32x4_t v2 = vcombine_f32(vget_high_f32(top.val[0]), q); // z0 z1 z2 0 vm[0] = v0; vm[1] = v1; vm[2] = v2; #else m[0] = btScalar(m_el[0].x()); m[1] = btScalar(m_el[1].x()); m[2] = btScalar(m_el[2].x()); m[3] = btScalar(0.0); m[4] = btScalar(m_el[0].y()); m[5] = btScalar(m_el[1].y()); m[6] = btScalar(m_el[2].y()); m[7] = btScalar(0.0); m[8] = btScalar(m_el[0].z()); m[9] = btScalar(m_el[1].z()); m[10] = btScalar(m_el[2].z()); m[11] = btScalar(0.0); #endif } /**@brief Get the matrix represented as a quaternion * @param q The quaternion which will be set */ void getRotation(btQuaternion & q) const { #if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) || defined(BT_USE_NEON) btScalar trace = m_el[0].x() + m_el[1].y() + m_el[2].z(); btScalar s, x; union { btSimdFloat4 vec; btScalar f[4]; } temp; if (trace > btScalar(0.0)) { x = trace + btScalar(1.0); temp.f[0] = m_el[2].y() - m_el[1].z(); temp.f[1] = m_el[0].z() - m_el[2].x(); temp.f[2] = m_el[1].x() - m_el[0].y(); temp.f[3] = x; //temp.f[3]= s * btScalar(0.5); } else { int i, j, k; if (m_el[0].x() < m_el[1].y()) { if (m_el[1].y() < m_el[2].z()) { i = 2; j = 0; k = 1; } else { i = 1; j = 2; k = 0; } } else { if (m_el[0].x() < m_el[2].z()) { i = 2; j = 0; k = 1; } else { i = 0; j = 1; k = 2; } } x = m_el[i][i] - m_el[j][j] - m_el[k][k] + btScalar(1.0); temp.f[3] = (m_el[k][j] - m_el[j][k]); temp.f[j] = (m_el[j][i] + m_el[i][j]); temp.f[k] = (m_el[k][i] + m_el[i][k]); temp.f[i] = x; //temp.f[i] = s * btScalar(0.5); } s = btSqrt(x); q.set128(temp.vec); s = btScalar(0.5) / s; q *= s; #else btScalar trace = m_el[0].x() + m_el[1].y() + m_el[2].z(); btScalar temp[4]; if (trace > btScalar(0.0)) { btScalar s = btSqrt(trace + btScalar(1.0)); temp[3] = (s * btScalar(0.5)); s = btScalar(0.5) / s; temp[0] = ((m_el[2].y() - m_el[1].z()) * s); temp[1] = ((m_el[0].z() - m_el[2].x()) * s); temp[2] = ((m_el[1].x() - m_el[0].y()) * s); } else { int i = m_el[0].x() < m_el[1].y() ? (m_el[1].y() < m_el[2].z() ? 2 : 1) : (m_el[0].x() < m_el[2].z() ? 2 : 0); int j = (i + 1) % 3; int k = (i + 2) % 3; btScalar s = btSqrt(m_el[i][i] - m_el[j][j] - m_el[k][k] + btScalar(1.0)); temp[i] = s * btScalar(0.5); s = btScalar(0.5) / s; temp[3] = (m_el[k][j] - m_el[j][k]) * s; temp[j] = (m_el[j][i] + m_el[i][j]) * s; temp[k] = (m_el[k][i] + m_el[i][k]) * s; } q.setValue(temp[0], temp[1], temp[2], temp[3]); #endif } /**@brief Get the matrix represented as euler angles around YXZ, roundtrip with setEulerYPR * @param yaw Yaw around Y axis * @param pitch Pitch around X axis * @param roll around Z axis */ void getEulerYPR(btScalar & yaw, btScalar & pitch, btScalar & roll) const { // first use the normal calculus yaw = btScalar(btAtan2(m_el[1].x(), m_el[0].x())); pitch = btScalar(btAsin(-m_el[2].x())); roll = btScalar(btAtan2(m_el[2].y(), m_el[2].z())); // on pitch = +/-HalfPI if (btFabs(pitch) == SIMD_HALF_PI) { if (yaw > 0) yaw -= SIMD_PI; else yaw += SIMD_PI; if (roll > 0) roll -= SIMD_PI; else roll += SIMD_PI; } }; /**@brief Get the matrix represented as euler angles around ZYX * @param yaw Yaw around Z axis * @param pitch Pitch around Y axis * @param roll around X axis * @param solution_number Which solution of two possible solutions ( 1 or 2) are possible values*/ void getEulerZYX(btScalar & yaw, btScalar & pitch, btScalar & roll, unsigned int solution_number = 1) const { struct Euler { btScalar yaw; btScalar pitch; btScalar roll; }; Euler euler_out; Euler euler_out2; //second solution //get the pointer to the raw data // Check that pitch is not at a singularity if (btFabs(m_el[2].x()) >= 1) { euler_out.yaw = 0; euler_out2.yaw = 0; // From difference of angles formula btScalar delta = btAtan2(m_el[0].x(), m_el[0].z()); if (m_el[2].x() > 0) //gimbal locked up { euler_out.pitch = SIMD_PI / btScalar(2.0); euler_out2.pitch = SIMD_PI / btScalar(2.0); euler_out.roll = euler_out.pitch + delta; euler_out2.roll = euler_out.pitch + delta; } else // gimbal locked down { euler_out.pitch = -SIMD_PI / btScalar(2.0); euler_out2.pitch = -SIMD_PI / btScalar(2.0); euler_out.roll = -euler_out.pitch + delta; euler_out2.roll = -euler_out.pitch + delta; } } else { euler_out.pitch = -btAsin(m_el[2].x()); euler_out2.pitch = SIMD_PI - euler_out.pitch; euler_out.roll = btAtan2(m_el[2].y() / btCos(euler_out.pitch), m_el[2].z() / btCos(euler_out.pitch)); euler_out2.roll = btAtan2(m_el[2].y() / btCos(euler_out2.pitch), m_el[2].z() / btCos(euler_out2.pitch)); euler_out.yaw = btAtan2(m_el[1].x() / btCos(euler_out.pitch), m_el[0].x() / btCos(euler_out.pitch)); euler_out2.yaw = btAtan2(m_el[1].x() / btCos(euler_out2.pitch), m_el[0].x() / btCos(euler_out2.pitch)); } if (solution_number == 1) { yaw = euler_out.yaw; pitch = euler_out.pitch; roll = euler_out.roll; } else { yaw = euler_out2.yaw; pitch = euler_out2.pitch; roll = euler_out2.roll; } } /**@brief Create a scaled copy of the matrix * @param s Scaling vector The elements of the vector will scale each column */ btMatrix3x3 scaled(const btVector3& s) const { #if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) || defined(BT_USE_NEON) return btMatrix3x3(m_el[0] * s, m_el[1] * s, m_el[2] * s); #else return btMatrix3x3( m_el[0].x() * s.x(), m_el[0].y() * s.y(), m_el[0].z() * s.z(), m_el[1].x() * s.x(), m_el[1].y() * s.y(), m_el[1].z() * s.z(), m_el[2].x() * s.x(), m_el[2].y() * s.y(), m_el[2].z() * s.z()); #endif } /**@brief Return the determinant of the matrix */ btScalar determinant() const; /**@brief Return the adjoint of the matrix */ btMatrix3x3 adjoint() const; /**@brief Return the matrix with all values non negative */ btMatrix3x3 absolute() const; /**@brief Return the transpose of the matrix */ btMatrix3x3 transpose() const; /**@brief Return the inverse of the matrix */ btMatrix3x3 inverse() const; /// Solve A * x = b, where b is a column vector. This is more efficient /// than computing the inverse in one-shot cases. ///Solve33 is from Box2d, thanks to Erin Catto, btVector3 solve33(const btVector3& b) const { btVector3 col1 = getColumn(0); btVector3 col2 = getColumn(1); btVector3 col3 = getColumn(2); btScalar det = btDot(col1, btCross(col2, col3)); if (btFabs(det) > SIMD_EPSILON) { det = 1.0f / det; } btVector3 x; x[0] = det * btDot(b, btCross(col2, col3)); x[1] = det * btDot(col1, btCross(b, col3)); x[2] = det * btDot(col1, btCross(col2, b)); return x; } btMatrix3x3 transposeTimes(const btMatrix3x3& m) const; btMatrix3x3 timesTranspose(const btMatrix3x3& m) const; SIMD_FORCE_INLINE btScalar tdotx(const btVector3& v) const { return m_el[0].x() * v.x() + m_el[1].x() * v.y() + m_el[2].x() * v.z(); } SIMD_FORCE_INLINE btScalar tdoty(const btVector3& v) const { return m_el[0].y() * v.x() + m_el[1].y() * v.y() + m_el[2].y() * v.z(); } SIMD_FORCE_INLINE btScalar tdotz(const btVector3& v) const { return m_el[0].z() * v.x() + m_el[1].z() * v.y() + m_el[2].z() * v.z(); } ///extractRotation is from "A robust method to extract the rotational part of deformations" ///See http://dl.acm.org/citation.cfm?doid=2994258.2994269 ///decomposes a matrix A in a orthogonal matrix R and a ///symmetric matrix S: ///A = R*S. ///note that R can include both rotation and scaling. SIMD_FORCE_INLINE void extractRotation(btQuaternion & q, btScalar tolerance = 1.0e-9, int maxIter = 100) { int iter = 0; btScalar w; const btMatrix3x3& A = *this; for (iter = 0; iter < maxIter; iter++) { btMatrix3x3 R(q); btVector3 omega = (R.getColumn(0).cross(A.getColumn(0)) + R.getColumn(1).cross(A.getColumn(1)) + R.getColumn(2).cross(A.getColumn(2))) * (btScalar(1.0) / btFabs(R.getColumn(0).dot(A.getColumn(0)) + R.getColumn(1).dot(A.getColumn(1)) + R.getColumn(2).dot(A.getColumn(2))) + tolerance); w = omega.norm(); if (w < tolerance) break; q = btQuaternion(btVector3((btScalar(1.0) / w) * omega), w) * q; q.normalize(); } } /**@brief diagonalizes this matrix by the Jacobi method. * @param rot stores the rotation from the coordinate system in which the matrix is diagonal to the original * coordinate system, i.e., old_this = rot * new_this * rot^T. * @param threshold See iteration * @param iteration The iteration stops when all off-diagonal elements are less than the threshold multiplied * by the sum of the absolute values of the diagonal, or when maxSteps have been executed. * * Note that this matrix is assumed to be symmetric. */ void diagonalize(btMatrix3x3 & rot, btScalar threshold, int maxSteps) { rot.setIdentity(); for (int step = maxSteps; step > 0; step--) { // find off-diagonal element [p][q] with largest magnitude int p = 0; int q = 1; int r = 2; btScalar max = btFabs(m_el[0][1]); btScalar v = btFabs(m_el[0][2]); if (v > max) { q = 2; r = 1; max = v; } v = btFabs(m_el[1][2]); if (v > max) { p = 1; q = 2; r = 0; max = v; } btScalar t = threshold * (btFabs(m_el[0][0]) + btFabs(m_el[1][1]) + btFabs(m_el[2][2])); if (max <= t) { if (max <= SIMD_EPSILON * t) { return; } step = 1; } // compute Jacobi rotation J which leads to a zero for element [p][q] btScalar mpq = m_el[p][q]; btScalar theta = (m_el[q][q] - m_el[p][p]) / (2 * mpq); btScalar theta2 = theta * theta; btScalar cos; btScalar sin; if (theta2 * theta2 < btScalar(10 / SIMD_EPSILON)) { t = (theta >= 0) ? 1 / (theta + btSqrt(1 + theta2)) : 1 / (theta - btSqrt(1 + theta2)); cos = 1 / btSqrt(1 + t * t); sin = cos * t; } else { // approximation for large theta-value, i.e., a nearly diagonal matrix t = 1 / (theta * (2 + btScalar(0.5) / theta2)); cos = 1 - btScalar(0.5) * t * t; sin = cos * t; } // apply rotation to matrix (this = J^T * this * J) m_el[p][q] = m_el[q][p] = 0; m_el[p][p] -= t * mpq; m_el[q][q] += t * mpq; btScalar mrp = m_el[r][p]; btScalar mrq = m_el[r][q]; m_el[r][p] = m_el[p][r] = cos * mrp - sin * mrq; m_el[r][q] = m_el[q][r] = cos * mrq + sin * mrp; // apply rotation to rot (rot = rot * J) for (int i = 0; i < 3; i++) { btVector3& row = rot[i]; mrp = row[p]; mrq = row[q]; row[p] = cos * mrp - sin * mrq; row[q] = cos * mrq + sin * mrp; } } } /**@brief Calculate the matrix cofactor * @param r1 The first row to use for calculating the cofactor * @param c1 The first column to use for calculating the cofactor * @param r1 The second row to use for calculating the cofactor * @param c1 The second column to use for calculating the cofactor * See http://en.wikipedia.org/wiki/Cofactor_(linear_algebra) for more details */ btScalar cofac(int r1, int c1, int r2, int c2) const { return m_el[r1][c1] * m_el[r2][c2] - m_el[r1][c2] * m_el[r2][c1]; } void serialize(struct btMatrix3x3Data & dataOut) const; void serializeFloat(struct btMatrix3x3FloatData & dataOut) const; void deSerialize(const struct btMatrix3x3Data& dataIn); void deSerializeFloat(const struct btMatrix3x3FloatData& dataIn); void deSerializeDouble(const struct btMatrix3x3DoubleData& dataIn); }; SIMD_FORCE_INLINE btMatrix3x3& btMatrix3x3::operator*=(const btMatrix3x3& m) { #if defined BT_USE_SIMD_VECTOR3 && defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) __m128 rv00, rv01, rv02; __m128 rv10, rv11, rv12; __m128 rv20, rv21, rv22; __m128 mv0, mv1, mv2; rv02 = m_el[0].mVec128; rv12 = m_el[1].mVec128; rv22 = m_el[2].mVec128; mv0 = _mm_and_ps(m[0].mVec128, btvFFF0fMask); mv1 = _mm_and_ps(m[1].mVec128, btvFFF0fMask); mv2 = _mm_and_ps(m[2].mVec128, btvFFF0fMask); // rv0 rv00 = bt_splat_ps(rv02, 0); rv01 = bt_splat_ps(rv02, 1); rv02 = bt_splat_ps(rv02, 2); rv00 = _mm_mul_ps(rv00, mv0); rv01 = _mm_mul_ps(rv01, mv1); rv02 = _mm_mul_ps(rv02, mv2); // rv1 rv10 = bt_splat_ps(rv12, 0); rv11 = bt_splat_ps(rv12, 1); rv12 = bt_splat_ps(rv12, 2); rv10 = _mm_mul_ps(rv10, mv0); rv11 = _mm_mul_ps(rv11, mv1); rv12 = _mm_mul_ps(rv12, mv2); // rv2 rv20 = bt_splat_ps(rv22, 0); rv21 = bt_splat_ps(rv22, 1); rv22 = bt_splat_ps(rv22, 2); rv20 = _mm_mul_ps(rv20, mv0); rv21 = _mm_mul_ps(rv21, mv1); rv22 = _mm_mul_ps(rv22, mv2); rv00 = _mm_add_ps(rv00, rv01); rv10 = _mm_add_ps(rv10, rv11); rv20 = _mm_add_ps(rv20, rv21); m_el[0].mVec128 = _mm_add_ps(rv00, rv02); m_el[1].mVec128 = _mm_add_ps(rv10, rv12); m_el[2].mVec128 = _mm_add_ps(rv20, rv22); #elif defined(BT_USE_NEON) float32x4_t rv0, rv1, rv2; float32x4_t v0, v1, v2; float32x4_t mv0, mv1, mv2; v0 = m_el[0].mVec128; v1 = m_el[1].mVec128; v2 = m_el[2].mVec128; mv0 = (float32x4_t)vandq_s32((int32x4_t)m[0].mVec128, btvFFF0Mask); mv1 = (float32x4_t)vandq_s32((int32x4_t)m[1].mVec128, btvFFF0Mask); mv2 = (float32x4_t)vandq_s32((int32x4_t)m[2].mVec128, btvFFF0Mask); rv0 = vmulq_lane_f32(mv0, vget_low_f32(v0), 0); rv1 = vmulq_lane_f32(mv0, vget_low_f32(v1), 0); rv2 = vmulq_lane_f32(mv0, vget_low_f32(v2), 0); rv0 = vmlaq_lane_f32(rv0, mv1, vget_low_f32(v0), 1); rv1 = vmlaq_lane_f32(rv1, mv1, vget_low_f32(v1), 1); rv2 = vmlaq_lane_f32(rv2, mv1, vget_low_f32(v2), 1); rv0 = vmlaq_lane_f32(rv0, mv2, vget_high_f32(v0), 0); rv1 = vmlaq_lane_f32(rv1, mv2, vget_high_f32(v1), 0); rv2 = vmlaq_lane_f32(rv2, mv2, vget_high_f32(v2), 0); m_el[0].mVec128 = rv0; m_el[1].mVec128 = rv1; m_el[2].mVec128 = rv2; #else setValue( m.tdotx(m_el[0]), m.tdoty(m_el[0]), m.tdotz(m_el[0]), m.tdotx(m_el[1]), m.tdoty(m_el[1]), m.tdotz(m_el[1]), m.tdotx(m_el[2]), m.tdoty(m_el[2]), m.tdotz(m_el[2])); #endif return *this; } SIMD_FORCE_INLINE btMatrix3x3& btMatrix3x3::operator+=(const btMatrix3x3& m) { #if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) || defined(BT_USE_NEON) m_el[0].mVec128 = m_el[0].mVec128 + m.m_el[0].mVec128; m_el[1].mVec128 = m_el[1].mVec128 + m.m_el[1].mVec128; m_el[2].mVec128 = m_el[2].mVec128 + m.m_el[2].mVec128; #else setValue( m_el[0][0] + m.m_el[0][0], m_el[0][1] + m.m_el[0][1], m_el[0][2] + m.m_el[0][2], m_el[1][0] + m.m_el[1][0], m_el[1][1] + m.m_el[1][1], m_el[1][2] + m.m_el[1][2], m_el[2][0] + m.m_el[2][0], m_el[2][1] + m.m_el[2][1], m_el[2][2] + m.m_el[2][2]); #endif return *this; } SIMD_FORCE_INLINE btMatrix3x3 operator*(const btMatrix3x3& m, const btScalar& k) { #if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) __m128 vk = bt_splat_ps(_mm_load_ss((float*)&k), 0x80); return btMatrix3x3( _mm_mul_ps(m[0].mVec128, vk), _mm_mul_ps(m[1].mVec128, vk), _mm_mul_ps(m[2].mVec128, vk)); #elif defined(BT_USE_NEON) return btMatrix3x3( vmulq_n_f32(m[0].mVec128, k), vmulq_n_f32(m[1].mVec128, k), vmulq_n_f32(m[2].mVec128, k)); #else return btMatrix3x3( m[0].x() * k, m[0].y() * k, m[0].z() * k, m[1].x() * k, m[1].y() * k, m[1].z() * k, m[2].x() * k, m[2].y() * k, m[2].z() * k); #endif } SIMD_FORCE_INLINE btMatrix3x3 operator+(const btMatrix3x3& m1, const btMatrix3x3& m2) { #if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) || defined(BT_USE_NEON) return btMatrix3x3( m1[0].mVec128 + m2[0].mVec128, m1[1].mVec128 + m2[1].mVec128, m1[2].mVec128 + m2[2].mVec128); #else return btMatrix3x3( m1[0][0] + m2[0][0], m1[0][1] + m2[0][1], m1[0][2] + m2[0][2], m1[1][0] + m2[1][0], m1[1][1] + m2[1][1], m1[1][2] + m2[1][2], m1[2][0] + m2[2][0], m1[2][1] + m2[2][1], m1[2][2] + m2[2][2]); #endif } SIMD_FORCE_INLINE btMatrix3x3 operator-(const btMatrix3x3& m1, const btMatrix3x3& m2) { #if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) || defined(BT_USE_NEON) return btMatrix3x3( m1[0].mVec128 - m2[0].mVec128, m1[1].mVec128 - m2[1].mVec128, m1[2].mVec128 - m2[2].mVec128); #else return btMatrix3x3( m1[0][0] - m2[0][0], m1[0][1] - m2[0][1], m1[0][2] - m2[0][2], m1[1][0] - m2[1][0], m1[1][1] - m2[1][1], m1[1][2] - m2[1][2], m1[2][0] - m2[2][0], m1[2][1] - m2[2][1], m1[2][2] - m2[2][2]); #endif } SIMD_FORCE_INLINE btMatrix3x3& btMatrix3x3::operator-=(const btMatrix3x3& m) { #if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) || defined(BT_USE_NEON) m_el[0].mVec128 = m_el[0].mVec128 - m.m_el[0].mVec128; m_el[1].mVec128 = m_el[1].mVec128 - m.m_el[1].mVec128; m_el[2].mVec128 = m_el[2].mVec128 - m.m_el[2].mVec128; #else setValue( m_el[0][0] - m.m_el[0][0], m_el[0][1] - m.m_el[0][1], m_el[0][2] - m.m_el[0][2], m_el[1][0] - m.m_el[1][0], m_el[1][1] - m.m_el[1][1], m_el[1][2] - m.m_el[1][2], m_el[2][0] - m.m_el[2][0], m_el[2][1] - m.m_el[2][1], m_el[2][2] - m.m_el[2][2]); #endif return *this; } SIMD_FORCE_INLINE btScalar btMatrix3x3::determinant() const { return btTriple((*this)[0], (*this)[1], (*this)[2]); } SIMD_FORCE_INLINE btMatrix3x3 btMatrix3x3::absolute() const { #if defined BT_USE_SIMD_VECTOR3 && (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) return btMatrix3x3( _mm_and_ps(m_el[0].mVec128, btvAbsfMask), _mm_and_ps(m_el[1].mVec128, btvAbsfMask), _mm_and_ps(m_el[2].mVec128, btvAbsfMask)); #elif defined(BT_USE_NEON) return btMatrix3x3( (float32x4_t)vandq_s32((int32x4_t)m_el[0].mVec128, btv3AbsMask), (float32x4_t)vandq_s32((int32x4_t)m_el[1].mVec128, btv3AbsMask), (float32x4_t)vandq_s32((int32x4_t)m_el[2].mVec128, btv3AbsMask)); #else return btMatrix3x3( btFabs(m_el[0].x()), btFabs(m_el[0].y()), btFabs(m_el[0].z()), btFabs(m_el[1].x()), btFabs(m_el[1].y()), btFabs(m_el[1].z()), btFabs(m_el[2].x()), btFabs(m_el[2].y()), btFabs(m_el[2].z())); #endif } SIMD_FORCE_INLINE btMatrix3x3 btMatrix3x3::transpose() const { #if defined BT_USE_SIMD_VECTOR3 && (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) __m128 v0 = m_el[0].mVec128; __m128 v1 = m_el[1].mVec128; __m128 v2 = m_el[2].mVec128; // x2 y2 z2 w2 __m128 vT; v2 = _mm_and_ps(v2, btvFFF0fMask); // x2 y2 z2 0 vT = _mm_unpackhi_ps(v0, v1); // z0 z1 * * v0 = _mm_unpacklo_ps(v0, v1); // x0 x1 y0 y1 v1 = _mm_shuffle_ps(v0, v2, BT_SHUFFLE(2, 3, 1, 3)); // y0 y1 y2 0 v0 = _mm_shuffle_ps(v0, v2, BT_SHUFFLE(0, 1, 0, 3)); // x0 x1 x2 0 v2 = btCastdTo128f(_mm_move_sd(btCastfTo128d(v2), btCastfTo128d(vT))); // z0 z1 z2 0 return btMatrix3x3(v0, v1, v2); #elif defined(BT_USE_NEON) // note: zeros the w channel. We can preserve it at the cost of two more vtrn instructions. static const uint32x2_t zMask = (const uint32x2_t){static_cast(-1), 0}; float32x4x2_t top = vtrnq_f32(m_el[0].mVec128, m_el[1].mVec128); // {x0 x1 z0 z1}, {y0 y1 w0 w1} float32x2x2_t bl = vtrn_f32(vget_low_f32(m_el[2].mVec128), vdup_n_f32(0.0f)); // {x2 0 }, {y2 0} float32x4_t v0 = vcombine_f32(vget_low_f32(top.val[0]), bl.val[0]); float32x4_t v1 = vcombine_f32(vget_low_f32(top.val[1]), bl.val[1]); float32x2_t q = (float32x2_t)vand_u32((uint32x2_t)vget_high_f32(m_el[2].mVec128), zMask); float32x4_t v2 = vcombine_f32(vget_high_f32(top.val[0]), q); // z0 z1 z2 0 return btMatrix3x3(v0, v1, v2); #else return btMatrix3x3(m_el[0].x(), m_el[1].x(), m_el[2].x(), m_el[0].y(), m_el[1].y(), m_el[2].y(), m_el[0].z(), m_el[1].z(), m_el[2].z()); #endif } SIMD_FORCE_INLINE btMatrix3x3 btMatrix3x3::adjoint() const { return btMatrix3x3(cofac(1, 1, 2, 2), cofac(0, 2, 2, 1), cofac(0, 1, 1, 2), cofac(1, 2, 2, 0), cofac(0, 0, 2, 2), cofac(0, 2, 1, 0), cofac(1, 0, 2, 1), cofac(0, 1, 2, 0), cofac(0, 0, 1, 1)); } SIMD_FORCE_INLINE btMatrix3x3 btMatrix3x3::inverse() const { btVector3 co(cofac(1, 1, 2, 2), cofac(1, 2, 2, 0), cofac(1, 0, 2, 1)); btScalar det = (*this)[0].dot(co); //btFullAssert(det != btScalar(0.0)); btAssert(det != btScalar(0.0)); btScalar s = btScalar(1.0) / det; return btMatrix3x3(co.x() * s, cofac(0, 2, 2, 1) * s, cofac(0, 1, 1, 2) * s, co.y() * s, cofac(0, 0, 2, 2) * s, cofac(0, 2, 1, 0) * s, co.z() * s, cofac(0, 1, 2, 0) * s, cofac(0, 0, 1, 1) * s); } SIMD_FORCE_INLINE btMatrix3x3 btMatrix3x3::transposeTimes(const btMatrix3x3& m) const { #if defined BT_USE_SIMD_VECTOR3 && (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) // zeros w // static const __m128i xyzMask = (const __m128i){ -1ULL, 0xffffffffULL }; __m128 row = m_el[0].mVec128; __m128 m0 = _mm_and_ps(m.getRow(0).mVec128, btvFFF0fMask); __m128 m1 = _mm_and_ps(m.getRow(1).mVec128, btvFFF0fMask); __m128 m2 = _mm_and_ps(m.getRow(2).mVec128, btvFFF0fMask); __m128 r0 = _mm_mul_ps(m0, _mm_shuffle_ps(row, row, 0)); __m128 r1 = _mm_mul_ps(m0, _mm_shuffle_ps(row, row, 0x55)); __m128 r2 = _mm_mul_ps(m0, _mm_shuffle_ps(row, row, 0xaa)); row = m_el[1].mVec128; r0 = _mm_add_ps(r0, _mm_mul_ps(m1, _mm_shuffle_ps(row, row, 0))); r1 = _mm_add_ps(r1, _mm_mul_ps(m1, _mm_shuffle_ps(row, row, 0x55))); r2 = _mm_add_ps(r2, _mm_mul_ps(m1, _mm_shuffle_ps(row, row, 0xaa))); row = m_el[2].mVec128; r0 = _mm_add_ps(r0, _mm_mul_ps(m2, _mm_shuffle_ps(row, row, 0))); r1 = _mm_add_ps(r1, _mm_mul_ps(m2, _mm_shuffle_ps(row, row, 0x55))); r2 = _mm_add_ps(r2, _mm_mul_ps(m2, _mm_shuffle_ps(row, row, 0xaa))); return btMatrix3x3(r0, r1, r2); #elif defined BT_USE_NEON // zeros w static const uint32x4_t xyzMask = (const uint32x4_t){static_cast(-1), static_cast(-1), static_cast(-1), 0}; float32x4_t m0 = (float32x4_t)vandq_u32((uint32x4_t)m.getRow(0).mVec128, xyzMask); float32x4_t m1 = (float32x4_t)vandq_u32((uint32x4_t)m.getRow(1).mVec128, xyzMask); float32x4_t m2 = (float32x4_t)vandq_u32((uint32x4_t)m.getRow(2).mVec128, xyzMask); float32x4_t row = m_el[0].mVec128; float32x4_t r0 = vmulq_lane_f32(m0, vget_low_f32(row), 0); float32x4_t r1 = vmulq_lane_f32(m0, vget_low_f32(row), 1); float32x4_t r2 = vmulq_lane_f32(m0, vget_high_f32(row), 0); row = m_el[1].mVec128; r0 = vmlaq_lane_f32(r0, m1, vget_low_f32(row), 0); r1 = vmlaq_lane_f32(r1, m1, vget_low_f32(row), 1); r2 = vmlaq_lane_f32(r2, m1, vget_high_f32(row), 0); row = m_el[2].mVec128; r0 = vmlaq_lane_f32(r0, m2, vget_low_f32(row), 0); r1 = vmlaq_lane_f32(r1, m2, vget_low_f32(row), 1); r2 = vmlaq_lane_f32(r2, m2, vget_high_f32(row), 0); return btMatrix3x3(r0, r1, r2); #else return btMatrix3x3( m_el[0].x() * m[0].x() + m_el[1].x() * m[1].x() + m_el[2].x() * m[2].x(), m_el[0].x() * m[0].y() + m_el[1].x() * m[1].y() + m_el[2].x() * m[2].y(), m_el[0].x() * m[0].z() + m_el[1].x() * m[1].z() + m_el[2].x() * m[2].z(), m_el[0].y() * m[0].x() + m_el[1].y() * m[1].x() + m_el[2].y() * m[2].x(), m_el[0].y() * m[0].y() + m_el[1].y() * m[1].y() + m_el[2].y() * m[2].y(), m_el[0].y() * m[0].z() + m_el[1].y() * m[1].z() + m_el[2].y() * m[2].z(), m_el[0].z() * m[0].x() + m_el[1].z() * m[1].x() + m_el[2].z() * m[2].x(), m_el[0].z() * m[0].y() + m_el[1].z() * m[1].y() + m_el[2].z() * m[2].y(), m_el[0].z() * m[0].z() + m_el[1].z() * m[1].z() + m_el[2].z() * m[2].z()); #endif } SIMD_FORCE_INLINE btMatrix3x3 btMatrix3x3::timesTranspose(const btMatrix3x3& m) const { #if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) __m128 a0 = m_el[0].mVec128; __m128 a1 = m_el[1].mVec128; __m128 a2 = m_el[2].mVec128; btMatrix3x3 mT = m.transpose(); // we rely on transpose() zeroing w channel so that we don't have to do it here __m128 mx = mT[0].mVec128; __m128 my = mT[1].mVec128; __m128 mz = mT[2].mVec128; __m128 r0 = _mm_mul_ps(mx, _mm_shuffle_ps(a0, a0, 0x00)); __m128 r1 = _mm_mul_ps(mx, _mm_shuffle_ps(a1, a1, 0x00)); __m128 r2 = _mm_mul_ps(mx, _mm_shuffle_ps(a2, a2, 0x00)); r0 = _mm_add_ps(r0, _mm_mul_ps(my, _mm_shuffle_ps(a0, a0, 0x55))); r1 = _mm_add_ps(r1, _mm_mul_ps(my, _mm_shuffle_ps(a1, a1, 0x55))); r2 = _mm_add_ps(r2, _mm_mul_ps(my, _mm_shuffle_ps(a2, a2, 0x55))); r0 = _mm_add_ps(r0, _mm_mul_ps(mz, _mm_shuffle_ps(a0, a0, 0xaa))); r1 = _mm_add_ps(r1, _mm_mul_ps(mz, _mm_shuffle_ps(a1, a1, 0xaa))); r2 = _mm_add_ps(r2, _mm_mul_ps(mz, _mm_shuffle_ps(a2, a2, 0xaa))); return btMatrix3x3(r0, r1, r2); #elif defined BT_USE_NEON float32x4_t a0 = m_el[0].mVec128; float32x4_t a1 = m_el[1].mVec128; float32x4_t a2 = m_el[2].mVec128; btMatrix3x3 mT = m.transpose(); // we rely on transpose() zeroing w channel so that we don't have to do it here float32x4_t mx = mT[0].mVec128; float32x4_t my = mT[1].mVec128; float32x4_t mz = mT[2].mVec128; float32x4_t r0 = vmulq_lane_f32(mx, vget_low_f32(a0), 0); float32x4_t r1 = vmulq_lane_f32(mx, vget_low_f32(a1), 0); float32x4_t r2 = vmulq_lane_f32(mx, vget_low_f32(a2), 0); r0 = vmlaq_lane_f32(r0, my, vget_low_f32(a0), 1); r1 = vmlaq_lane_f32(r1, my, vget_low_f32(a1), 1); r2 = vmlaq_lane_f32(r2, my, vget_low_f32(a2), 1); r0 = vmlaq_lane_f32(r0, mz, vget_high_f32(a0), 0); r1 = vmlaq_lane_f32(r1, mz, vget_high_f32(a1), 0); r2 = vmlaq_lane_f32(r2, mz, vget_high_f32(a2), 0); return btMatrix3x3(r0, r1, r2); #else return btMatrix3x3( m_el[0].dot(m[0]), m_el[0].dot(m[1]), m_el[0].dot(m[2]), m_el[1].dot(m[0]), m_el[1].dot(m[1]), m_el[1].dot(m[2]), m_el[2].dot(m[0]), m_el[2].dot(m[1]), m_el[2].dot(m[2])); #endif } SIMD_FORCE_INLINE btVector3 operator*(const btMatrix3x3& m, const btVector3& v) { #if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) || defined(BT_USE_NEON) return v.dot3(m[0], m[1], m[2]); #else return btVector3(m[0].dot(v), m[1].dot(v), m[2].dot(v)); #endif } SIMD_FORCE_INLINE btVector3 operator*(const btVector3& v, const btMatrix3x3& m) { #if defined BT_USE_SIMD_VECTOR3 && (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) const __m128 vv = v.mVec128; __m128 c0 = bt_splat_ps(vv, 0); __m128 c1 = bt_splat_ps(vv, 1); __m128 c2 = bt_splat_ps(vv, 2); c0 = _mm_mul_ps(c0, _mm_and_ps(m[0].mVec128, btvFFF0fMask)); c1 = _mm_mul_ps(c1, _mm_and_ps(m[1].mVec128, btvFFF0fMask)); c0 = _mm_add_ps(c0, c1); c2 = _mm_mul_ps(c2, _mm_and_ps(m[2].mVec128, btvFFF0fMask)); return btVector3(_mm_add_ps(c0, c2)); #elif defined(BT_USE_NEON) const float32x4_t vv = v.mVec128; const float32x2_t vlo = vget_low_f32(vv); const float32x2_t vhi = vget_high_f32(vv); float32x4_t c0, c1, c2; c0 = (float32x4_t)vandq_s32((int32x4_t)m[0].mVec128, btvFFF0Mask); c1 = (float32x4_t)vandq_s32((int32x4_t)m[1].mVec128, btvFFF0Mask); c2 = (float32x4_t)vandq_s32((int32x4_t)m[2].mVec128, btvFFF0Mask); c0 = vmulq_lane_f32(c0, vlo, 0); c1 = vmulq_lane_f32(c1, vlo, 1); c2 = vmulq_lane_f32(c2, vhi, 0); c0 = vaddq_f32(c0, c1); c0 = vaddq_f32(c0, c2); return btVector3(c0); #else return btVector3(m.tdotx(v), m.tdoty(v), m.tdotz(v)); #endif } SIMD_FORCE_INLINE btMatrix3x3 operator*(const btMatrix3x3& m1, const btMatrix3x3& m2) { #if defined BT_USE_SIMD_VECTOR3 && (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) __m128 m10 = m1[0].mVec128; __m128 m11 = m1[1].mVec128; __m128 m12 = m1[2].mVec128; __m128 m2v = _mm_and_ps(m2[0].mVec128, btvFFF0fMask); __m128 c0 = bt_splat_ps(m10, 0); __m128 c1 = bt_splat_ps(m11, 0); __m128 c2 = bt_splat_ps(m12, 0); c0 = _mm_mul_ps(c0, m2v); c1 = _mm_mul_ps(c1, m2v); c2 = _mm_mul_ps(c2, m2v); m2v = _mm_and_ps(m2[1].mVec128, btvFFF0fMask); __m128 c0_1 = bt_splat_ps(m10, 1); __m128 c1_1 = bt_splat_ps(m11, 1); __m128 c2_1 = bt_splat_ps(m12, 1); c0_1 = _mm_mul_ps(c0_1, m2v); c1_1 = _mm_mul_ps(c1_1, m2v); c2_1 = _mm_mul_ps(c2_1, m2v); m2v = _mm_and_ps(m2[2].mVec128, btvFFF0fMask); c0 = _mm_add_ps(c0, c0_1); c1 = _mm_add_ps(c1, c1_1); c2 = _mm_add_ps(c2, c2_1); m10 = bt_splat_ps(m10, 2); m11 = bt_splat_ps(m11, 2); m12 = bt_splat_ps(m12, 2); m10 = _mm_mul_ps(m10, m2v); m11 = _mm_mul_ps(m11, m2v); m12 = _mm_mul_ps(m12, m2v); c0 = _mm_add_ps(c0, m10); c1 = _mm_add_ps(c1, m11); c2 = _mm_add_ps(c2, m12); return btMatrix3x3(c0, c1, c2); #elif defined(BT_USE_NEON) float32x4_t rv0, rv1, rv2; float32x4_t v0, v1, v2; float32x4_t mv0, mv1, mv2; v0 = m1[0].mVec128; v1 = m1[1].mVec128; v2 = m1[2].mVec128; mv0 = (float32x4_t)vandq_s32((int32x4_t)m2[0].mVec128, btvFFF0Mask); mv1 = (float32x4_t)vandq_s32((int32x4_t)m2[1].mVec128, btvFFF0Mask); mv2 = (float32x4_t)vandq_s32((int32x4_t)m2[2].mVec128, btvFFF0Mask); rv0 = vmulq_lane_f32(mv0, vget_low_f32(v0), 0); rv1 = vmulq_lane_f32(mv0, vget_low_f32(v1), 0); rv2 = vmulq_lane_f32(mv0, vget_low_f32(v2), 0); rv0 = vmlaq_lane_f32(rv0, mv1, vget_low_f32(v0), 1); rv1 = vmlaq_lane_f32(rv1, mv1, vget_low_f32(v1), 1); rv2 = vmlaq_lane_f32(rv2, mv1, vget_low_f32(v2), 1); rv0 = vmlaq_lane_f32(rv0, mv2, vget_high_f32(v0), 0); rv1 = vmlaq_lane_f32(rv1, mv2, vget_high_f32(v1), 0); rv2 = vmlaq_lane_f32(rv2, mv2, vget_high_f32(v2), 0); return btMatrix3x3(rv0, rv1, rv2); #else return btMatrix3x3( m2.tdotx(m1[0]), m2.tdoty(m1[0]), m2.tdotz(m1[0]), m2.tdotx(m1[1]), m2.tdoty(m1[1]), m2.tdotz(m1[1]), m2.tdotx(m1[2]), m2.tdoty(m1[2]), m2.tdotz(m1[2])); #endif } /* SIMD_FORCE_INLINE btMatrix3x3 btMultTransposeLeft(const btMatrix3x3& m1, const btMatrix3x3& m2) { return btMatrix3x3( m1[0][0] * m2[0][0] + m1[1][0] * m2[1][0] + m1[2][0] * m2[2][0], m1[0][0] * m2[0][1] + m1[1][0] * m2[1][1] + m1[2][0] * m2[2][1], m1[0][0] * m2[0][2] + m1[1][0] * m2[1][2] + m1[2][0] * m2[2][2], m1[0][1] * m2[0][0] + m1[1][1] * m2[1][0] + m1[2][1] * m2[2][0], m1[0][1] * m2[0][1] + m1[1][1] * m2[1][1] + m1[2][1] * m2[2][1], m1[0][1] * m2[0][2] + m1[1][1] * m2[1][2] + m1[2][1] * m2[2][2], m1[0][2] * m2[0][0] + m1[1][2] * m2[1][0] + m1[2][2] * m2[2][0], m1[0][2] * m2[0][1] + m1[1][2] * m2[1][1] + m1[2][2] * m2[2][1], m1[0][2] * m2[0][2] + m1[1][2] * m2[1][2] + m1[2][2] * m2[2][2]); } */ /**@brief Equality operator between two matrices * It will test all elements are equal. */ SIMD_FORCE_INLINE bool operator==(const btMatrix3x3& m1, const btMatrix3x3& m2) { #if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) __m128 c0, c1, c2; c0 = _mm_cmpeq_ps(m1[0].mVec128, m2[0].mVec128); c1 = _mm_cmpeq_ps(m1[1].mVec128, m2[1].mVec128); c2 = _mm_cmpeq_ps(m1[2].mVec128, m2[2].mVec128); c0 = _mm_and_ps(c0, c1); c0 = _mm_and_ps(c0, c2); int m = _mm_movemask_ps((__m128)c0); return (0x7 == (m & 0x7)); #else return (m1[0][0] == m2[0][0] && m1[1][0] == m2[1][0] && m1[2][0] == m2[2][0] && m1[0][1] == m2[0][1] && m1[1][1] == m2[1][1] && m1[2][1] == m2[2][1] && m1[0][2] == m2[0][2] && m1[1][2] == m2[1][2] && m1[2][2] == m2[2][2]); #endif } ///for serialization struct btMatrix3x3FloatData { btVector3FloatData m_el[3]; }; ///for serialization struct btMatrix3x3DoubleData { btVector3DoubleData m_el[3]; }; SIMD_FORCE_INLINE void btMatrix3x3::serialize(struct btMatrix3x3Data& dataOut) const { for (int i = 0; i < 3; i++) m_el[i].serialize(dataOut.m_el[i]); } SIMD_FORCE_INLINE void btMatrix3x3::serializeFloat(struct btMatrix3x3FloatData& dataOut) const { for (int i = 0; i < 3; i++) m_el[i].serializeFloat(dataOut.m_el[i]); } SIMD_FORCE_INLINE void btMatrix3x3::deSerialize(const struct btMatrix3x3Data& dataIn) { for (int i = 0; i < 3; i++) m_el[i].deSerialize(dataIn.m_el[i]); } SIMD_FORCE_INLINE void btMatrix3x3::deSerializeFloat(const struct btMatrix3x3FloatData& dataIn) { for (int i = 0; i < 3; i++) m_el[i].deSerializeFloat(dataIn.m_el[i]); } SIMD_FORCE_INLINE void btMatrix3x3::deSerializeDouble(const struct btMatrix3x3DoubleData& dataIn) { for (int i = 0; i < 3; i++) m_el[i].deSerializeDouble(dataIn.m_el[i]); } #endif //BT_MATRIX3x3_H ================================================ FILE: libraries/bullet/LinearMath/btMatrixX.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ ///original version written by Erwin Coumans, October 2013 #ifndef BT_MATRIX_X_H #define BT_MATRIX_X_H #include "LinearMath/btQuickprof.h" #include "LinearMath/btAlignedObjectArray.h" #include //#define BT_DEBUG_OSTREAM #ifdef BT_DEBUG_OSTREAM #include #include // std::setw #endif //BT_DEBUG_OSTREAM class btIntSortPredicate { public: bool operator()(const int& a, const int& b) const { return a < b; } }; template struct btVectorX { btAlignedObjectArray m_storage; btVectorX() { } btVectorX(int numRows) { m_storage.resize(numRows); } void resize(int rows) { m_storage.resize(rows); } int cols() const { return 1; } int rows() const { return m_storage.size(); } int size() const { return rows(); } T nrm2() const { T norm = T(0); int nn = rows(); { if (nn == 1) { norm = btFabs((*this)[0]); } else { T scale = 0.0; T ssq = 1.0; /* The following loop is equivalent to this call to the LAPACK auxiliary routine: CALL SLASSQ( N, X, INCX, SCALE, SSQ ) */ for (int ix = 0; ix < nn; ix++) { if ((*this)[ix] != 0.0) { T absxi = btFabs((*this)[ix]); if (scale < absxi) { T temp; temp = scale / absxi; ssq = ssq * (temp * temp) + BT_ONE; scale = absxi; } else { T temp; temp = absxi / scale; ssq += temp * temp; } } } norm = scale * sqrt(ssq); } } return norm; } void setZero() { if (m_storage.size()) { // for (int i=0;i void setElem(btMatrixX& mat, int row, int col, T val) { mat.setElem(row,col,val); } */ template struct btMatrixX { int m_rows; int m_cols; int m_operations; int m_resizeOperations; int m_setElemOperations; btAlignedObjectArray m_storage; mutable btAlignedObjectArray > m_rowNonZeroElements1; T* getBufferPointerWritable() { return m_storage.size() ? &m_storage[0] : 0; } const T* getBufferPointer() const { return m_storage.size() ? &m_storage[0] : 0; } btMatrixX() : m_rows(0), m_cols(0), m_operations(0), m_resizeOperations(0), m_setElemOperations(0) { } btMatrixX(int rows, int cols) : m_rows(rows), m_cols(cols), m_operations(0), m_resizeOperations(0), m_setElemOperations(0) { resize(rows, cols); } void resize(int rows, int cols) { m_resizeOperations++; m_rows = rows; m_cols = cols; { BT_PROFILE("m_storage.resize"); m_storage.resize(rows * cols); } } int cols() const { return m_cols; } int rows() const { return m_rows; } ///we don't want this read/write operator(), because we cannot keep track of non-zero elements, use setElem instead /*T& operator() (int row,int col) { return m_storage[col*m_rows+row]; } */ void addElem(int row, int col, T val) { if (val) { if (m_storage[col + row * m_cols] == 0.f) { setElem(row, col, val); } else { m_storage[row * m_cols + col] += val; } } } void setElem(int row, int col, T val) { m_setElemOperations++; m_storage[row * m_cols + col] = val; } void mulElem(int row, int col, T val) { m_setElemOperations++; //mul doesn't change sparsity info m_storage[row * m_cols + col] *= val; } void copyLowerToUpperTriangle() { int count = 0; for (int row = 0; row < rows(); row++) { for (int col = 0; col < row; col++) { setElem(col, row, (*this)(row, col)); count++; } } //printf("copyLowerToUpperTriangle copied %d elements out of %dx%d=%d\n", count,rows(),cols(),cols()*rows()); } const T& operator()(int row, int col) const { return m_storage[col + row * m_cols]; } void setZero() { { BT_PROFILE("storage=0"); if (m_storage.size()) { btSetZero(&m_storage[0], m_storage.size()); } //memset(&m_storage[0],0,sizeof(T)*m_storage.size()); //for (int i=0;i 0 && numRowsOther > 0 && B && C); const btScalar* bb = B; for (int i = 0; i < numRows; i++) { const btScalar* cc = C; for (int j = 0; j < numRowsOther; j++) { btScalar sum; sum = bb[0] * cc[0]; sum += bb[1] * cc[1]; sum += bb[2] * cc[2]; sum += bb[4] * cc[4]; sum += bb[5] * cc[5]; sum += bb[6] * cc[6]; setElem(row + i, col + j, sum); cc += 8; } bb += 8; } } void setSubMatrix(int rowstart, int colstart, int rowend, int colend, const T value) { int numRows = rowend + 1 - rowstart; int numCols = colend + 1 - colstart; for (int row = 0; row < numRows; row++) { for (int col = 0; col < numCols; col++) { setElem(rowstart + row, colstart + col, value); } } } void setSubMatrix(int rowstart, int colstart, int rowend, int colend, const btMatrixX& block) { btAssert(rowend + 1 - rowstart == block.rows()); btAssert(colend + 1 - colstart == block.cols()); for (int row = 0; row < block.rows(); row++) { for (int col = 0; col < block.cols(); col++) { setElem(rowstart + row, colstart + col, block(row, col)); } } } void setSubMatrix(int rowstart, int colstart, int rowend, int colend, const btVectorX& block) { btAssert(rowend + 1 - rowstart == block.rows()); btAssert(colend + 1 - colstart == block.cols()); for (int row = 0; row < block.rows(); row++) { for (int col = 0; col < block.cols(); col++) { setElem(rowstart + row, colstart + col, block[row]); } } } btMatrixX negative() { btMatrixX neg(rows(), cols()); for (int i = 0; i < rows(); i++) for (int j = 0; j < cols(); j++) { T v = (*this)(i, j); neg.setElem(i, j, -v); } return neg; } }; typedef btMatrixX btMatrixXf; typedef btVectorX btVectorXf; typedef btMatrixX btMatrixXd; typedef btVectorX btVectorXd; #ifdef BT_DEBUG_OSTREAM template std::ostream& operator<<(std::ostream& os, const btMatrixX& mat) { os << " ["; //printf("%s ---------------------\n",msg); for (int i = 0; i < mat.rows(); i++) { for (int j = 0; j < mat.cols(); j++) { os << std::setw(12) << mat(i, j); } if (i != mat.rows() - 1) os << std::endl << " "; } os << " ]"; //printf("\n---------------------\n"); return os; } template std::ostream& operator<<(std::ostream& os, const btVectorX& mat) { os << " ["; //printf("%s ---------------------\n",msg); for (int i = 0; i < mat.rows(); i++) { os << std::setw(12) << mat[i]; if (i != mat.rows() - 1) os << std::endl << " "; } os << " ]"; //printf("\n---------------------\n"); return os; } #endif //BT_DEBUG_OSTREAM inline void setElem(btMatrixXd& mat, int row, int col, double val) { mat.setElem(row, col, val); } inline void setElem(btMatrixXf& mat, int row, int col, float val) { mat.setElem(row, col, val); } #ifdef BT_USE_DOUBLE_PRECISION #define btVectorXu btVectorXd #define btMatrixXu btMatrixXd #else #define btVectorXu btVectorXf #define btMatrixXu btMatrixXf #endif //BT_USE_DOUBLE_PRECISION #endif //BT_MATRIX_H_H ================================================ FILE: libraries/bullet/LinearMath/btMinMax.h ================================================ /* Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_GEN_MINMAX_H #define BT_GEN_MINMAX_H #include "btScalar.h" template SIMD_FORCE_INLINE const T& btMin(const T& a, const T& b) { return a < b ? a : b; } template SIMD_FORCE_INLINE const T& btMax(const T& a, const T& b) { return a > b ? a : b; } template SIMD_FORCE_INLINE const T& btClamped(const T& a, const T& lb, const T& ub) { return a < lb ? lb : (ub < a ? ub : a); } template SIMD_FORCE_INLINE void btSetMin(T& a, const T& b) { if (b < a) { a = b; } } template SIMD_FORCE_INLINE void btSetMax(T& a, const T& b) { if (a < b) { a = b; } } template SIMD_FORCE_INLINE void btClamp(T& a, const T& lb, const T& ub) { if (a < lb) { a = lb; } else if (ub < a) { a = ub; } } #endif //BT_GEN_MINMAX_H ================================================ FILE: libraries/bullet/LinearMath/btModifiedGramSchmidt.h ================================================ // // btModifiedGramSchmidt.h // LinearMath // // Created by Xuchen Han on 4/4/20. // #ifndef btModifiedGramSchmidt_h #define btModifiedGramSchmidt_h #include "btReducedVector.h" #include "btAlignedObjectArray.h" #include #include template class btModifiedGramSchmidt { public: btAlignedObjectArray m_in; btAlignedObjectArray m_out; btModifiedGramSchmidt(const btAlignedObjectArray& vecs): m_in(vecs) { m_out.resize(0); } void solve() { m_out.resize(m_in.size()); for (int i = 0; i < m_in.size(); ++i) { // printf("========= starting %d ==========\n", i); TV v(m_in[i]); // v.print(); for (int j = 0; j < i; ++j) { v = v - v.proj(m_out[j]); // v.print(); } v.normalize(); m_out[i] = v; // v.print(); } } void test() { std::cout << SIMD_EPSILON << std::endl; printf("=======inputs=========\n"); for (int i = 0; i < m_out.size(); ++i) { m_in[i].print(); } printf("=======output=========\n"); for (int i = 0; i < m_out.size(); ++i) { m_out[i].print(); } btScalar eps = SIMD_EPSILON; for (int i = 0; i < m_out.size(); ++i) { for (int j = 0; j < m_out.size(); ++j) { if (i == j) { if (std::abs(1.0-m_out[i].dot(m_out[j])) > eps)// && std::abs(m_out[i].dot(m_out[j])) > eps) { printf("vec[%d] is not unit, norm squared = %f\n", i,m_out[i].dot(m_out[j])); } } else { if (std::abs(m_out[i].dot(m_out[j])) > eps) { printf("vec[%d] and vec[%d] is not orthogonal, dot product = %f\n", i, j, m_out[i].dot(m_out[j])); } } } } } }; template class btModifiedGramSchmidt; #endif /* btModifiedGramSchmidt_h */ ================================================ FILE: libraries/bullet/LinearMath/btMotionState.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_MOTIONSTATE_H #define BT_MOTIONSTATE_H #include "btTransform.h" ///The btMotionState interface class allows the dynamics world to synchronize and interpolate the updated world transforms with graphics ///For optimizations, potentially only moving objects get synchronized (using setWorldPosition/setWorldOrientation) class btMotionState { public: virtual ~btMotionState() { } virtual void getWorldTransform(btTransform& worldTrans) const = 0; //Bullet only calls the update of worldtransform for active objects virtual void setWorldTransform(const btTransform& worldTrans) = 0; }; #endif //BT_MOTIONSTATE_H ================================================ FILE: libraries/bullet/LinearMath/btPolarDecomposition.h ================================================ #ifndef POLARDECOMPOSITION_H #define POLARDECOMPOSITION_H #include "btMatrix3x3.h" /** * This class is used to compute the polar decomposition of a matrix. In * general, the polar decomposition factorizes a matrix, A, into two parts: a * unitary matrix (U) and a positive, semi-definite Hermitian matrix (H). * However, in this particular implementation the original matrix, A, is * required to be a square 3x3 matrix with real elements. This means that U will * be an orthogonal matrix and H with be a positive-definite, symmetric matrix. */ class btPolarDecomposition { public: /** * Creates an instance with optional parameters. * * @param tolerance - the tolerance used to determine convergence of the * algorithm * @param maxIterations - the maximum number of iterations used to achieve * convergence */ btPolarDecomposition(btScalar tolerance = btScalar(0.0001), unsigned int maxIterations = 16); /** * Decomposes a matrix into orthogonal and symmetric, positive-definite * parts. If the number of iterations returned by this function is equal to * the maximum number of iterations, the algorithm has failed to converge. * * @param a - the original matrix * @param u - the resulting orthogonal matrix * @param h - the resulting symmetric matrix * * @return the number of iterations performed by the algorithm. */ unsigned int decompose(const btMatrix3x3& a, btMatrix3x3& u, btMatrix3x3& h) const; /** * Returns the maximum number of iterations that this algorithm will perform * to achieve convergence. * * @return maximum number of iterations */ unsigned int maxIterations() const; private: btScalar m_tolerance; unsigned int m_maxIterations; }; /** * This functions decomposes the matrix 'a' into two parts: an orthogonal matrix * 'u' and a symmetric, positive-definite matrix 'h'. If the number of * iterations returned by this function is equal to * btPolarDecomposition::DEFAULT_MAX_ITERATIONS, the algorithm has failed to * converge. * * @param a - the original matrix * @param u - the resulting orthogonal matrix * @param h - the resulting symmetric matrix * * @return the number of iterations performed by the algorithm. */ unsigned int polarDecompose(const btMatrix3x3& a, btMatrix3x3& u, btMatrix3x3& h); #endif // POLARDECOMPOSITION_H ================================================ FILE: libraries/bullet/LinearMath/btPoolAllocator.h ================================================ /* Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef _BT_POOL_ALLOCATOR_H #define _BT_POOL_ALLOCATOR_H #include "btScalar.h" #include "btAlignedAllocator.h" #include "btThreads.h" ///The btPoolAllocator class allows to efficiently allocate a large pool of objects, instead of dynamically allocating them separately. class btPoolAllocator { int m_elemSize; int m_maxElements; int m_freeCount; void* m_firstFree; unsigned char* m_pool; btSpinMutex m_mutex; // only used if BT_THREADSAFE public: btPoolAllocator(int elemSize, int maxElements) : m_elemSize(elemSize), m_maxElements(maxElements) { m_pool = (unsigned char*)btAlignedAlloc(static_cast(m_elemSize * m_maxElements), 16); unsigned char* p = m_pool; m_firstFree = p; m_freeCount = m_maxElements; int count = m_maxElements; while (--count) { *(void**)p = (p + m_elemSize); p += m_elemSize; } *(void**)p = 0; } ~btPoolAllocator() { btAlignedFree(m_pool); } int getFreeCount() const { return m_freeCount; } int getUsedCount() const { return m_maxElements - m_freeCount; } int getMaxCount() const { return m_maxElements; } void* allocate(int size) { // release mode fix (void)size; btMutexLock(&m_mutex); btAssert(!size || size <= m_elemSize); //btAssert(m_freeCount>0); // should return null if all full void* result = m_firstFree; if (NULL != m_firstFree) { m_firstFree = *(void**)m_firstFree; --m_freeCount; } btMutexUnlock(&m_mutex); return result; } bool validPtr(void* ptr) { if (ptr) { if (((unsigned char*)ptr >= m_pool && (unsigned char*)ptr < m_pool + m_maxElements * m_elemSize)) { return true; } } return false; } void freeMemory(void* ptr) { if (ptr) { btAssert((unsigned char*)ptr >= m_pool && (unsigned char*)ptr < m_pool + m_maxElements * m_elemSize); btMutexLock(&m_mutex); *(void**)ptr = m_firstFree; m_firstFree = ptr; ++m_freeCount; btMutexUnlock(&m_mutex); } } int getElementSize() const { return m_elemSize; } unsigned char* getPoolAddress() { return m_pool; } const unsigned char* getPoolAddress() const { return m_pool; } }; #endif //_BT_POOL_ALLOCATOR_H ================================================ FILE: libraries/bullet/LinearMath/btQuadWord.h ================================================ /* Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_SIMD_QUADWORD_H #define BT_SIMD_QUADWORD_H #include "btScalar.h" #include "btMinMax.h" #if defined(__CELLOS_LV2) && defined(__SPU__) #include #endif /**@brief The btQuadWord class is base class for btVector3 and btQuaternion. * Some issues under PS3 Linux with IBM 2.1 SDK, gcc compiler prevent from using aligned quadword. */ #ifndef USE_LIBSPE2 ATTRIBUTE_ALIGNED16(class) btQuadWord #else class btQuadWord #endif { protected: #if defined(__SPU__) && defined(__CELLOS_LV2__) union { vec_float4 mVec128; btScalar m_floats[4]; }; public: vec_float4 get128() const { return mVec128; } protected: #else //__CELLOS_LV2__ __SPU__ #if defined(BT_USE_SSE) || defined(BT_USE_NEON) union { btSimdFloat4 mVec128; btScalar m_floats[4]; }; public: SIMD_FORCE_INLINE btSimdFloat4 get128() const { return mVec128; } SIMD_FORCE_INLINE void set128(btSimdFloat4 v128) { mVec128 = v128; } #else btScalar m_floats[4]; #endif // BT_USE_SSE #endif //__CELLOS_LV2__ __SPU__ public: #if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) || defined(BT_USE_NEON) // Set Vector SIMD_FORCE_INLINE btQuadWord(const btSimdFloat4 vec) { mVec128 = vec; } // Copy constructor SIMD_FORCE_INLINE btQuadWord(const btQuadWord& rhs) { mVec128 = rhs.mVec128; } // Assignment Operator SIMD_FORCE_INLINE btQuadWord& operator=(const btQuadWord& v) { mVec128 = v.mVec128; return *this; } #endif /**@brief Return the x value */ SIMD_FORCE_INLINE const btScalar& getX() const { return m_floats[0]; } /**@brief Return the y value */ SIMD_FORCE_INLINE const btScalar& getY() const { return m_floats[1]; } /**@brief Return the z value */ SIMD_FORCE_INLINE const btScalar& getZ() const { return m_floats[2]; } /**@brief Set the x value */ SIMD_FORCE_INLINE void setX(btScalar _x) { m_floats[0] = _x; }; /**@brief Set the y value */ SIMD_FORCE_INLINE void setY(btScalar _y) { m_floats[1] = _y; }; /**@brief Set the z value */ SIMD_FORCE_INLINE void setZ(btScalar _z) { m_floats[2] = _z; }; /**@brief Set the w value */ SIMD_FORCE_INLINE void setW(btScalar _w) { m_floats[3] = _w; }; /**@brief Return the x value */ SIMD_FORCE_INLINE const btScalar& x() const { return m_floats[0]; } /**@brief Return the y value */ SIMD_FORCE_INLINE const btScalar& y() const { return m_floats[1]; } /**@brief Return the z value */ SIMD_FORCE_INLINE const btScalar& z() const { return m_floats[2]; } /**@brief Return the w value */ SIMD_FORCE_INLINE const btScalar& w() const { return m_floats[3]; } //SIMD_FORCE_INLINE btScalar& operator[](int i) { return (&m_floats[0])[i]; } //SIMD_FORCE_INLINE const btScalar& operator[](int i) const { return (&m_floats[0])[i]; } ///operator btScalar*() replaces operator[], using implicit conversion. We added operator != and operator == to avoid pointer comparisons. SIMD_FORCE_INLINE operator btScalar*() { return &m_floats[0]; } SIMD_FORCE_INLINE operator const btScalar*() const { return &m_floats[0]; } SIMD_FORCE_INLINE bool operator==(const btQuadWord& other) const { #ifdef BT_USE_SSE return (0xf == _mm_movemask_ps((__m128)_mm_cmpeq_ps(mVec128, other.mVec128))); #else return ((m_floats[3] == other.m_floats[3]) && (m_floats[2] == other.m_floats[2]) && (m_floats[1] == other.m_floats[1]) && (m_floats[0] == other.m_floats[0])); #endif } SIMD_FORCE_INLINE bool operator!=(const btQuadWord& other) const { return !(*this == other); } /**@brief Set x,y,z and zero w * @param x Value of x * @param y Value of y * @param z Value of z */ SIMD_FORCE_INLINE void setValue(const btScalar& _x, const btScalar& _y, const btScalar& _z) { m_floats[0] = _x; m_floats[1] = _y; m_floats[2] = _z; m_floats[3] = 0.f; } /* void getValue(btScalar *m) const { m[0] = m_floats[0]; m[1] = m_floats[1]; m[2] = m_floats[2]; } */ /**@brief Set the values * @param x Value of x * @param y Value of y * @param z Value of z * @param w Value of w */ SIMD_FORCE_INLINE void setValue(const btScalar& _x, const btScalar& _y, const btScalar& _z, const btScalar& _w) { m_floats[0] = _x; m_floats[1] = _y; m_floats[2] = _z; m_floats[3] = _w; } /**@brief No initialization constructor */ SIMD_FORCE_INLINE btQuadWord() // :m_floats[0](btScalar(0.)),m_floats[1](btScalar(0.)),m_floats[2](btScalar(0.)),m_floats[3](btScalar(0.)) { } /**@brief Three argument constructor (zeros w) * @param x Value of x * @param y Value of y * @param z Value of z */ SIMD_FORCE_INLINE btQuadWord(const btScalar& _x, const btScalar& _y, const btScalar& _z) { m_floats[0] = _x, m_floats[1] = _y, m_floats[2] = _z, m_floats[3] = 0.0f; } /**@brief Initializing constructor * @param x Value of x * @param y Value of y * @param z Value of z * @param w Value of w */ SIMD_FORCE_INLINE btQuadWord(const btScalar& _x, const btScalar& _y, const btScalar& _z, const btScalar& _w) { m_floats[0] = _x, m_floats[1] = _y, m_floats[2] = _z, m_floats[3] = _w; } /**@brief Set each element to the max of the current values and the values of another btQuadWord * @param other The other btQuadWord to compare with */ SIMD_FORCE_INLINE void setMax(const btQuadWord& other) { #ifdef BT_USE_SSE mVec128 = _mm_max_ps(mVec128, other.mVec128); #elif defined(BT_USE_NEON) mVec128 = vmaxq_f32(mVec128, other.mVec128); #else btSetMax(m_floats[0], other.m_floats[0]); btSetMax(m_floats[1], other.m_floats[1]); btSetMax(m_floats[2], other.m_floats[2]); btSetMax(m_floats[3], other.m_floats[3]); #endif } /**@brief Set each element to the min of the current values and the values of another btQuadWord * @param other The other btQuadWord to compare with */ SIMD_FORCE_INLINE void setMin(const btQuadWord& other) { #ifdef BT_USE_SSE mVec128 = _mm_min_ps(mVec128, other.mVec128); #elif defined(BT_USE_NEON) mVec128 = vminq_f32(mVec128, other.mVec128); #else btSetMin(m_floats[0], other.m_floats[0]); btSetMin(m_floats[1], other.m_floats[1]); btSetMin(m_floats[2], other.m_floats[2]); btSetMin(m_floats[3], other.m_floats[3]); #endif } }; #endif //BT_SIMD_QUADWORD_H ================================================ FILE: libraries/bullet/LinearMath/btQuaternion.h ================================================ /* Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_SIMD__QUATERNION_H_ #define BT_SIMD__QUATERNION_H_ #include "btVector3.h" #include "btQuadWord.h" #ifdef BT_USE_DOUBLE_PRECISION #define btQuaternionData btQuaternionDoubleData #define btQuaternionDataName "btQuaternionDoubleData" #else #define btQuaternionData btQuaternionFloatData #define btQuaternionDataName "btQuaternionFloatData" #endif //BT_USE_DOUBLE_PRECISION #ifdef BT_USE_SSE //const __m128 ATTRIBUTE_ALIGNED16(vOnes) = {1.0f, 1.0f, 1.0f, 1.0f}; #define vOnes (_mm_set_ps(1.0f, 1.0f, 1.0f, 1.0f)) #endif #if defined(BT_USE_SSE) #define vQInv (_mm_set_ps(+0.0f, -0.0f, -0.0f, -0.0f)) #define vPPPM (_mm_set_ps(-0.0f, +0.0f, +0.0f, +0.0f)) #elif defined(BT_USE_NEON) const btSimdFloat4 ATTRIBUTE_ALIGNED16(vQInv) = {-0.0f, -0.0f, -0.0f, +0.0f}; const btSimdFloat4 ATTRIBUTE_ALIGNED16(vPPPM) = {+0.0f, +0.0f, +0.0f, -0.0f}; #endif /**@brief The btQuaternion implements quaternion to perform linear algebra rotations in combination with btMatrix3x3, btVector3 and btTransform. */ class btQuaternion : public btQuadWord { public: /**@brief No initialization constructor */ btQuaternion() {} #if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) || defined(BT_USE_NEON) // Set Vector SIMD_FORCE_INLINE btQuaternion(const btSimdFloat4 vec) { mVec128 = vec; } // Copy constructor SIMD_FORCE_INLINE btQuaternion(const btQuaternion& rhs) { mVec128 = rhs.mVec128; } // Assignment Operator SIMD_FORCE_INLINE btQuaternion& operator=(const btQuaternion& v) { mVec128 = v.mVec128; return *this; } #endif // template // explicit Quaternion(const btScalar *v) : Tuple4(v) {} /**@brief Constructor from scalars */ btQuaternion(const btScalar& _x, const btScalar& _y, const btScalar& _z, const btScalar& _w) : btQuadWord(_x, _y, _z, _w) { } /**@brief Axis angle Constructor * @param axis The axis which the rotation is around * @param angle The magnitude of the rotation around the angle (Radians) */ btQuaternion(const btVector3& _axis, const btScalar& _angle) { setRotation(_axis, _angle); } /**@brief Constructor from Euler angles * @param yaw Angle around Y unless BT_EULER_DEFAULT_ZYX defined then Z * @param pitch Angle around X unless BT_EULER_DEFAULT_ZYX defined then Y * @param roll Angle around Z unless BT_EULER_DEFAULT_ZYX defined then X */ btQuaternion(const btScalar& yaw, const btScalar& pitch, const btScalar& roll) { #ifndef BT_EULER_DEFAULT_ZYX setEuler(yaw, pitch, roll); #else setEulerZYX(yaw, pitch, roll); #endif } /**@brief Set the rotation using axis angle notation * @param axis The axis around which to rotate * @param angle The magnitude of the rotation in Radians */ void setRotation(const btVector3& axis, const btScalar& _angle) { btScalar d = axis.length(); btAssert(d != btScalar(0.0)); btScalar s = btSin(_angle * btScalar(0.5)) / d; setValue(axis.x() * s, axis.y() * s, axis.z() * s, btCos(_angle * btScalar(0.5))); } /**@brief Set the quaternion using Euler angles * @param yaw Angle around Y * @param pitch Angle around X * @param roll Angle around Z */ void setEuler(const btScalar& yaw, const btScalar& pitch, const btScalar& roll) { btScalar halfYaw = btScalar(yaw) * btScalar(0.5); btScalar halfPitch = btScalar(pitch) * btScalar(0.5); btScalar halfRoll = btScalar(roll) * btScalar(0.5); btScalar cosYaw = btCos(halfYaw); btScalar sinYaw = btSin(halfYaw); btScalar cosPitch = btCos(halfPitch); btScalar sinPitch = btSin(halfPitch); btScalar cosRoll = btCos(halfRoll); btScalar sinRoll = btSin(halfRoll); setValue(cosRoll * sinPitch * cosYaw + sinRoll * cosPitch * sinYaw, cosRoll * cosPitch * sinYaw - sinRoll * sinPitch * cosYaw, sinRoll * cosPitch * cosYaw - cosRoll * sinPitch * sinYaw, cosRoll * cosPitch * cosYaw + sinRoll * sinPitch * sinYaw); } /**@brief Set the quaternion using euler angles * @param yaw Angle around Z * @param pitch Angle around Y * @param roll Angle around X */ void setEulerZYX(const btScalar& yawZ, const btScalar& pitchY, const btScalar& rollX) { btScalar halfYaw = btScalar(yawZ) * btScalar(0.5); btScalar halfPitch = btScalar(pitchY) * btScalar(0.5); btScalar halfRoll = btScalar(rollX) * btScalar(0.5); btScalar cosYaw = btCos(halfYaw); btScalar sinYaw = btSin(halfYaw); btScalar cosPitch = btCos(halfPitch); btScalar sinPitch = btSin(halfPitch); btScalar cosRoll = btCos(halfRoll); btScalar sinRoll = btSin(halfRoll); setValue(sinRoll * cosPitch * cosYaw - cosRoll * sinPitch * sinYaw, //x cosRoll * sinPitch * cosYaw + sinRoll * cosPitch * sinYaw, //y cosRoll * cosPitch * sinYaw - sinRoll * sinPitch * cosYaw, //z cosRoll * cosPitch * cosYaw + sinRoll * sinPitch * sinYaw); //formerly yzx } /**@brief Get the euler angles from this quaternion * @param yaw Angle around Z * @param pitch Angle around Y * @param roll Angle around X */ void getEulerZYX(btScalar& yawZ, btScalar& pitchY, btScalar& rollX) const { btScalar squ; btScalar sqx; btScalar sqy; btScalar sqz; btScalar sarg; sqx = m_floats[0] * m_floats[0]; sqy = m_floats[1] * m_floats[1]; sqz = m_floats[2] * m_floats[2]; squ = m_floats[3] * m_floats[3]; sarg = btScalar(-2.) * (m_floats[0] * m_floats[2] - m_floats[3] * m_floats[1]); // If the pitch angle is PI/2 or -PI/2, we can only compute // the sum roll + yaw. However, any combination that gives // the right sum will produce the correct orientation, so we // set rollX = 0 and compute yawZ. if (sarg <= -btScalar(0.99999)) { pitchY = btScalar(-0.5) * SIMD_PI; rollX = 0; yawZ = btScalar(2) * btAtan2(m_floats[0], -m_floats[1]); } else if (sarg >= btScalar(0.99999)) { pitchY = btScalar(0.5) * SIMD_PI; rollX = 0; yawZ = btScalar(2) * btAtan2(-m_floats[0], m_floats[1]); } else { pitchY = btAsin(sarg); rollX = btAtan2(2 * (m_floats[1] * m_floats[2] + m_floats[3] * m_floats[0]), squ - sqx - sqy + sqz); yawZ = btAtan2(2 * (m_floats[0] * m_floats[1] + m_floats[3] * m_floats[2]), squ + sqx - sqy - sqz); } } /**@brief Add two quaternions * @param q The quaternion to add to this one */ SIMD_FORCE_INLINE btQuaternion& operator+=(const btQuaternion& q) { #if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) mVec128 = _mm_add_ps(mVec128, q.mVec128); #elif defined(BT_USE_NEON) mVec128 = vaddq_f32(mVec128, q.mVec128); #else m_floats[0] += q.x(); m_floats[1] += q.y(); m_floats[2] += q.z(); m_floats[3] += q.m_floats[3]; #endif return *this; } /**@brief Subtract out a quaternion * @param q The quaternion to subtract from this one */ btQuaternion& operator-=(const btQuaternion& q) { #if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) mVec128 = _mm_sub_ps(mVec128, q.mVec128); #elif defined(BT_USE_NEON) mVec128 = vsubq_f32(mVec128, q.mVec128); #else m_floats[0] -= q.x(); m_floats[1] -= q.y(); m_floats[2] -= q.z(); m_floats[3] -= q.m_floats[3]; #endif return *this; } /**@brief Scale this quaternion * @param s The scalar to scale by */ btQuaternion& operator*=(const btScalar& s) { #if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) __m128 vs = _mm_load_ss(&s); // (S 0 0 0) vs = bt_pshufd_ps(vs, 0); // (S S S S) mVec128 = _mm_mul_ps(mVec128, vs); #elif defined(BT_USE_NEON) mVec128 = vmulq_n_f32(mVec128, s); #else m_floats[0] *= s; m_floats[1] *= s; m_floats[2] *= s; m_floats[3] *= s; #endif return *this; } /**@brief Multiply this quaternion by q on the right * @param q The other quaternion * Equivilant to this = this * q */ btQuaternion& operator*=(const btQuaternion& q) { #if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) __m128 vQ2 = q.get128(); __m128 A1 = bt_pshufd_ps(mVec128, BT_SHUFFLE(0, 1, 2, 0)); __m128 B1 = bt_pshufd_ps(vQ2, BT_SHUFFLE(3, 3, 3, 0)); A1 = A1 * B1; __m128 A2 = bt_pshufd_ps(mVec128, BT_SHUFFLE(1, 2, 0, 1)); __m128 B2 = bt_pshufd_ps(vQ2, BT_SHUFFLE(2, 0, 1, 1)); A2 = A2 * B2; B1 = bt_pshufd_ps(mVec128, BT_SHUFFLE(2, 0, 1, 2)); B2 = bt_pshufd_ps(vQ2, BT_SHUFFLE(1, 2, 0, 2)); B1 = B1 * B2; // A3 *= B3 mVec128 = bt_splat_ps(mVec128, 3); // A0 mVec128 = mVec128 * vQ2; // A0 * B0 A1 = A1 + A2; // AB12 mVec128 = mVec128 - B1; // AB03 = AB0 - AB3 A1 = _mm_xor_ps(A1, vPPPM); // change sign of the last element mVec128 = mVec128 + A1; // AB03 + AB12 #elif defined(BT_USE_NEON) float32x4_t vQ1 = mVec128; float32x4_t vQ2 = q.get128(); float32x4_t A0, A1, B1, A2, B2, A3, B3; float32x2_t vQ1zx, vQ2wx, vQ1yz, vQ2zx, vQ2yz, vQ2xz; { float32x2x2_t tmp; tmp = vtrn_f32(vget_high_f32(vQ1), vget_low_f32(vQ1)); // {z x}, {w y} vQ1zx = tmp.val[0]; tmp = vtrn_f32(vget_high_f32(vQ2), vget_low_f32(vQ2)); // {z x}, {w y} vQ2zx = tmp.val[0]; } vQ2wx = vext_f32(vget_high_f32(vQ2), vget_low_f32(vQ2), 1); vQ1yz = vext_f32(vget_low_f32(vQ1), vget_high_f32(vQ1), 1); vQ2yz = vext_f32(vget_low_f32(vQ2), vget_high_f32(vQ2), 1); vQ2xz = vext_f32(vQ2zx, vQ2zx, 1); A1 = vcombine_f32(vget_low_f32(vQ1), vQ1zx); // X Y z x B1 = vcombine_f32(vdup_lane_f32(vget_high_f32(vQ2), 1), vQ2wx); // W W W X A2 = vcombine_f32(vQ1yz, vget_low_f32(vQ1)); B2 = vcombine_f32(vQ2zx, vdup_lane_f32(vget_low_f32(vQ2), 1)); A3 = vcombine_f32(vQ1zx, vQ1yz); // Z X Y Z B3 = vcombine_f32(vQ2yz, vQ2xz); // Y Z x z A1 = vmulq_f32(A1, B1); A2 = vmulq_f32(A2, B2); A3 = vmulq_f32(A3, B3); // A3 *= B3 A0 = vmulq_lane_f32(vQ2, vget_high_f32(vQ1), 1); // A0 * B0 A1 = vaddq_f32(A1, A2); // AB12 = AB1 + AB2 A0 = vsubq_f32(A0, A3); // AB03 = AB0 - AB3 // change the sign of the last element A1 = (btSimdFloat4)veorq_s32((int32x4_t)A1, (int32x4_t)vPPPM); A0 = vaddq_f32(A0, A1); // AB03 + AB12 mVec128 = A0; #else setValue( m_floats[3] * q.x() + m_floats[0] * q.m_floats[3] + m_floats[1] * q.z() - m_floats[2] * q.y(), m_floats[3] * q.y() + m_floats[1] * q.m_floats[3] + m_floats[2] * q.x() - m_floats[0] * q.z(), m_floats[3] * q.z() + m_floats[2] * q.m_floats[3] + m_floats[0] * q.y() - m_floats[1] * q.x(), m_floats[3] * q.m_floats[3] - m_floats[0] * q.x() - m_floats[1] * q.y() - m_floats[2] * q.z()); #endif return *this; } /**@brief Return the dot product between this quaternion and another * @param q The other quaternion */ btScalar dot(const btQuaternion& q) const { #if defined BT_USE_SIMD_VECTOR3 && defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) __m128 vd; vd = _mm_mul_ps(mVec128, q.mVec128); __m128 t = _mm_movehl_ps(vd, vd); vd = _mm_add_ps(vd, t); t = _mm_shuffle_ps(vd, vd, 0x55); vd = _mm_add_ss(vd, t); return _mm_cvtss_f32(vd); #elif defined(BT_USE_NEON) float32x4_t vd = vmulq_f32(mVec128, q.mVec128); float32x2_t x = vpadd_f32(vget_low_f32(vd), vget_high_f32(vd)); x = vpadd_f32(x, x); return vget_lane_f32(x, 0); #else return m_floats[0] * q.x() + m_floats[1] * q.y() + m_floats[2] * q.z() + m_floats[3] * q.m_floats[3]; #endif } /**@brief Return the length squared of the quaternion */ btScalar length2() const { return dot(*this); } /**@brief Return the length of the quaternion */ btScalar length() const { return btSqrt(length2()); } btQuaternion& safeNormalize() { btScalar l2 = length2(); if (l2 > SIMD_EPSILON) { normalize(); } return *this; } /**@brief Normalize the quaternion * Such that x^2 + y^2 + z^2 +w^2 = 1 */ btQuaternion& normalize() { #if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) __m128 vd; vd = _mm_mul_ps(mVec128, mVec128); __m128 t = _mm_movehl_ps(vd, vd); vd = _mm_add_ps(vd, t); t = _mm_shuffle_ps(vd, vd, 0x55); vd = _mm_add_ss(vd, t); vd = _mm_sqrt_ss(vd); vd = _mm_div_ss(vOnes, vd); vd = bt_pshufd_ps(vd, 0); // splat mVec128 = _mm_mul_ps(mVec128, vd); return *this; #else return *this /= length(); #endif } /**@brief Return a scaled version of this quaternion * @param s The scale factor */ SIMD_FORCE_INLINE btQuaternion operator*(const btScalar& s) const { #if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) __m128 vs = _mm_load_ss(&s); // (S 0 0 0) vs = bt_pshufd_ps(vs, 0x00); // (S S S S) return btQuaternion(_mm_mul_ps(mVec128, vs)); #elif defined(BT_USE_NEON) return btQuaternion(vmulq_n_f32(mVec128, s)); #else return btQuaternion(x() * s, y() * s, z() * s, m_floats[3] * s); #endif } /**@brief Return an inversely scaled versionof this quaternion * @param s The inverse scale factor */ btQuaternion operator/(const btScalar& s) const { btAssert(s != btScalar(0.0)); return *this * (btScalar(1.0) / s); } /**@brief Inversely scale this quaternion * @param s The scale factor */ btQuaternion& operator/=(const btScalar& s) { btAssert(s != btScalar(0.0)); return *this *= btScalar(1.0) / s; } /**@brief Return a normalized version of this quaternion */ btQuaternion normalized() const { return *this / length(); } /**@brief Return the ***half*** angle between this quaternion and the other * @param q The other quaternion */ btScalar angle(const btQuaternion& q) const { btScalar s = btSqrt(length2() * q.length2()); btAssert(s != btScalar(0.0)); return btAcos(dot(q) / s); } /**@brief Return the angle between this quaternion and the other along the shortest path * @param q The other quaternion */ btScalar angleShortestPath(const btQuaternion& q) const { btScalar s = btSqrt(length2() * q.length2()); btAssert(s != btScalar(0.0)); if (dot(q) < 0) // Take care of long angle case see http://en.wikipedia.org/wiki/Slerp return btAcos(dot(-q) / s) * btScalar(2.0); else return btAcos(dot(q) / s) * btScalar(2.0); } /**@brief Return the angle [0, 2Pi] of rotation represented by this quaternion */ btScalar getAngle() const { btScalar s = btScalar(2.) * btAcos(m_floats[3]); return s; } /**@brief Return the angle [0, Pi] of rotation represented by this quaternion along the shortest path */ btScalar getAngleShortestPath() const { btScalar s; if (m_floats[3] >= 0) s = btScalar(2.) * btAcos(m_floats[3]); else s = btScalar(2.) * btAcos(-m_floats[3]); return s; } /**@brief Return the axis of the rotation represented by this quaternion */ btVector3 getAxis() const { btScalar s_squared = 1.f - m_floats[3] * m_floats[3]; if (s_squared < btScalar(10.) * SIMD_EPSILON) //Check for divide by zero return btVector3(1.0, 0.0, 0.0); // Arbitrary btScalar s = 1.f / btSqrt(s_squared); return btVector3(m_floats[0] * s, m_floats[1] * s, m_floats[2] * s); } /**@brief Return the inverse of this quaternion */ btQuaternion inverse() const { #if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) return btQuaternion(_mm_xor_ps(mVec128, vQInv)); #elif defined(BT_USE_NEON) return btQuaternion((btSimdFloat4)veorq_s32((int32x4_t)mVec128, (int32x4_t)vQInv)); #else return btQuaternion(-m_floats[0], -m_floats[1], -m_floats[2], m_floats[3]); #endif } /**@brief Return the sum of this quaternion and the other * @param q2 The other quaternion */ SIMD_FORCE_INLINE btQuaternion operator+(const btQuaternion& q2) const { #if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) return btQuaternion(_mm_add_ps(mVec128, q2.mVec128)); #elif defined(BT_USE_NEON) return btQuaternion(vaddq_f32(mVec128, q2.mVec128)); #else const btQuaternion& q1 = *this; return btQuaternion(q1.x() + q2.x(), q1.y() + q2.y(), q1.z() + q2.z(), q1.m_floats[3] + q2.m_floats[3]); #endif } /**@brief Return the difference between this quaternion and the other * @param q2 The other quaternion */ SIMD_FORCE_INLINE btQuaternion operator-(const btQuaternion& q2) const { #if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) return btQuaternion(_mm_sub_ps(mVec128, q2.mVec128)); #elif defined(BT_USE_NEON) return btQuaternion(vsubq_f32(mVec128, q2.mVec128)); #else const btQuaternion& q1 = *this; return btQuaternion(q1.x() - q2.x(), q1.y() - q2.y(), q1.z() - q2.z(), q1.m_floats[3] - q2.m_floats[3]); #endif } /**@brief Return the negative of this quaternion * This simply negates each element */ SIMD_FORCE_INLINE btQuaternion operator-() const { #if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) return btQuaternion(_mm_xor_ps(mVec128, btvMzeroMask)); #elif defined(BT_USE_NEON) return btQuaternion((btSimdFloat4)veorq_s32((int32x4_t)mVec128, (int32x4_t)btvMzeroMask)); #else const btQuaternion& q2 = *this; return btQuaternion(-q2.x(), -q2.y(), -q2.z(), -q2.m_floats[3]); #endif } /**@todo document this and it's use */ SIMD_FORCE_INLINE btQuaternion farthest(const btQuaternion& qd) const { btQuaternion diff, sum; diff = *this - qd; sum = *this + qd; if (diff.dot(diff) > sum.dot(sum)) return qd; return (-qd); } /**@todo document this and it's use */ SIMD_FORCE_INLINE btQuaternion nearest(const btQuaternion& qd) const { btQuaternion diff, sum; diff = *this - qd; sum = *this + qd; if (diff.dot(diff) < sum.dot(sum)) return qd; return (-qd); } /**@brief Return the quaternion which is the result of Spherical Linear Interpolation between this and the other quaternion * @param q The other quaternion to interpolate with * @param t The ratio between this and q to interpolate. If t = 0 the result is this, if t=1 the result is q. * Slerp interpolates assuming constant velocity. */ btQuaternion slerp(const btQuaternion& q, const btScalar& t) const { const btScalar magnitude = btSqrt(length2() * q.length2()); btAssert(magnitude > btScalar(0)); const btScalar product = dot(q) / magnitude; const btScalar absproduct = btFabs(product); if (absproduct < btScalar(1.0 - SIMD_EPSILON)) { // Take care of long angle case see http://en.wikipedia.org/wiki/Slerp const btScalar theta = btAcos(absproduct); const btScalar d = btSin(theta); btAssert(d > btScalar(0)); const btScalar sign = (product < 0) ? btScalar(-1) : btScalar(1); const btScalar s0 = btSin((btScalar(1.0) - t) * theta) / d; const btScalar s1 = btSin(sign * t * theta) / d; return btQuaternion( (m_floats[0] * s0 + q.x() * s1), (m_floats[1] * s0 + q.y() * s1), (m_floats[2] * s0 + q.z() * s1), (m_floats[3] * s0 + q.w() * s1)); } else { return *this; } } static const btQuaternion& getIdentity() { static const btQuaternion identityQuat(btScalar(0.), btScalar(0.), btScalar(0.), btScalar(1.)); return identityQuat; } SIMD_FORCE_INLINE const btScalar& getW() const { return m_floats[3]; } SIMD_FORCE_INLINE void serialize(struct btQuaternionData& dataOut) const; SIMD_FORCE_INLINE void deSerialize(const struct btQuaternionFloatData& dataIn); SIMD_FORCE_INLINE void deSerialize(const struct btQuaternionDoubleData& dataIn); SIMD_FORCE_INLINE void serializeFloat(struct btQuaternionFloatData& dataOut) const; SIMD_FORCE_INLINE void deSerializeFloat(const struct btQuaternionFloatData& dataIn); SIMD_FORCE_INLINE void serializeDouble(struct btQuaternionDoubleData& dataOut) const; SIMD_FORCE_INLINE void deSerializeDouble(const struct btQuaternionDoubleData& dataIn); }; /**@brief Return the product of two quaternions */ SIMD_FORCE_INLINE btQuaternion operator*(const btQuaternion& q1, const btQuaternion& q2) { #if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) __m128 vQ1 = q1.get128(); __m128 vQ2 = q2.get128(); __m128 A0, A1, B1, A2, B2; A1 = bt_pshufd_ps(vQ1, BT_SHUFFLE(0, 1, 2, 0)); // X Y z x // vtrn B1 = bt_pshufd_ps(vQ2, BT_SHUFFLE(3, 3, 3, 0)); // W W W X // vdup vext A1 = A1 * B1; A2 = bt_pshufd_ps(vQ1, BT_SHUFFLE(1, 2, 0, 1)); // Y Z X Y // vext B2 = bt_pshufd_ps(vQ2, BT_SHUFFLE(2, 0, 1, 1)); // z x Y Y // vtrn vdup A2 = A2 * B2; B1 = bt_pshufd_ps(vQ1, BT_SHUFFLE(2, 0, 1, 2)); // z x Y Z // vtrn vext B2 = bt_pshufd_ps(vQ2, BT_SHUFFLE(1, 2, 0, 2)); // Y Z x z // vext vtrn B1 = B1 * B2; // A3 *= B3 A0 = bt_splat_ps(vQ1, 3); // A0 A0 = A0 * vQ2; // A0 * B0 A1 = A1 + A2; // AB12 A0 = A0 - B1; // AB03 = AB0 - AB3 A1 = _mm_xor_ps(A1, vPPPM); // change sign of the last element A0 = A0 + A1; // AB03 + AB12 return btQuaternion(A0); #elif defined(BT_USE_NEON) float32x4_t vQ1 = q1.get128(); float32x4_t vQ2 = q2.get128(); float32x4_t A0, A1, B1, A2, B2, A3, B3; float32x2_t vQ1zx, vQ2wx, vQ1yz, vQ2zx, vQ2yz, vQ2xz; { float32x2x2_t tmp; tmp = vtrn_f32(vget_high_f32(vQ1), vget_low_f32(vQ1)); // {z x}, {w y} vQ1zx = tmp.val[0]; tmp = vtrn_f32(vget_high_f32(vQ2), vget_low_f32(vQ2)); // {z x}, {w y} vQ2zx = tmp.val[0]; } vQ2wx = vext_f32(vget_high_f32(vQ2), vget_low_f32(vQ2), 1); vQ1yz = vext_f32(vget_low_f32(vQ1), vget_high_f32(vQ1), 1); vQ2yz = vext_f32(vget_low_f32(vQ2), vget_high_f32(vQ2), 1); vQ2xz = vext_f32(vQ2zx, vQ2zx, 1); A1 = vcombine_f32(vget_low_f32(vQ1), vQ1zx); // X Y z x B1 = vcombine_f32(vdup_lane_f32(vget_high_f32(vQ2), 1), vQ2wx); // W W W X A2 = vcombine_f32(vQ1yz, vget_low_f32(vQ1)); B2 = vcombine_f32(vQ2zx, vdup_lane_f32(vget_low_f32(vQ2), 1)); A3 = vcombine_f32(vQ1zx, vQ1yz); // Z X Y Z B3 = vcombine_f32(vQ2yz, vQ2xz); // Y Z x z A1 = vmulq_f32(A1, B1); A2 = vmulq_f32(A2, B2); A3 = vmulq_f32(A3, B3); // A3 *= B3 A0 = vmulq_lane_f32(vQ2, vget_high_f32(vQ1), 1); // A0 * B0 A1 = vaddq_f32(A1, A2); // AB12 = AB1 + AB2 A0 = vsubq_f32(A0, A3); // AB03 = AB0 - AB3 // change the sign of the last element A1 = (btSimdFloat4)veorq_s32((int32x4_t)A1, (int32x4_t)vPPPM); A0 = vaddq_f32(A0, A1); // AB03 + AB12 return btQuaternion(A0); #else return btQuaternion( q1.w() * q2.x() + q1.x() * q2.w() + q1.y() * q2.z() - q1.z() * q2.y(), q1.w() * q2.y() + q1.y() * q2.w() + q1.z() * q2.x() - q1.x() * q2.z(), q1.w() * q2.z() + q1.z() * q2.w() + q1.x() * q2.y() - q1.y() * q2.x(), q1.w() * q2.w() - q1.x() * q2.x() - q1.y() * q2.y() - q1.z() * q2.z()); #endif } SIMD_FORCE_INLINE btQuaternion operator*(const btQuaternion& q, const btVector3& w) { #if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) __m128 vQ1 = q.get128(); __m128 vQ2 = w.get128(); __m128 A1, B1, A2, B2, A3, B3; A1 = bt_pshufd_ps(vQ1, BT_SHUFFLE(3, 3, 3, 0)); B1 = bt_pshufd_ps(vQ2, BT_SHUFFLE(0, 1, 2, 0)); A1 = A1 * B1; A2 = bt_pshufd_ps(vQ1, BT_SHUFFLE(1, 2, 0, 1)); B2 = bt_pshufd_ps(vQ2, BT_SHUFFLE(2, 0, 1, 1)); A2 = A2 * B2; A3 = bt_pshufd_ps(vQ1, BT_SHUFFLE(2, 0, 1, 2)); B3 = bt_pshufd_ps(vQ2, BT_SHUFFLE(1, 2, 0, 2)); A3 = A3 * B3; // A3 *= B3 A1 = A1 + A2; // AB12 A1 = _mm_xor_ps(A1, vPPPM); // change sign of the last element A1 = A1 - A3; // AB123 = AB12 - AB3 return btQuaternion(A1); #elif defined(BT_USE_NEON) float32x4_t vQ1 = q.get128(); float32x4_t vQ2 = w.get128(); float32x4_t A1, B1, A2, B2, A3, B3; float32x2_t vQ1wx, vQ2zx, vQ1yz, vQ2yz, vQ1zx, vQ2xz; vQ1wx = vext_f32(vget_high_f32(vQ1), vget_low_f32(vQ1), 1); { float32x2x2_t tmp; tmp = vtrn_f32(vget_high_f32(vQ2), vget_low_f32(vQ2)); // {z x}, {w y} vQ2zx = tmp.val[0]; tmp = vtrn_f32(vget_high_f32(vQ1), vget_low_f32(vQ1)); // {z x}, {w y} vQ1zx = tmp.val[0]; } vQ1yz = vext_f32(vget_low_f32(vQ1), vget_high_f32(vQ1), 1); vQ2yz = vext_f32(vget_low_f32(vQ2), vget_high_f32(vQ2), 1); vQ2xz = vext_f32(vQ2zx, vQ2zx, 1); A1 = vcombine_f32(vdup_lane_f32(vget_high_f32(vQ1), 1), vQ1wx); // W W W X B1 = vcombine_f32(vget_low_f32(vQ2), vQ2zx); // X Y z x A2 = vcombine_f32(vQ1yz, vget_low_f32(vQ1)); B2 = vcombine_f32(vQ2zx, vdup_lane_f32(vget_low_f32(vQ2), 1)); A3 = vcombine_f32(vQ1zx, vQ1yz); // Z X Y Z B3 = vcombine_f32(vQ2yz, vQ2xz); // Y Z x z A1 = vmulq_f32(A1, B1); A2 = vmulq_f32(A2, B2); A3 = vmulq_f32(A3, B3); // A3 *= B3 A1 = vaddq_f32(A1, A2); // AB12 = AB1 + AB2 // change the sign of the last element A1 = (btSimdFloat4)veorq_s32((int32x4_t)A1, (int32x4_t)vPPPM); A1 = vsubq_f32(A1, A3); // AB123 = AB12 - AB3 return btQuaternion(A1); #else return btQuaternion( q.w() * w.x() + q.y() * w.z() - q.z() * w.y(), q.w() * w.y() + q.z() * w.x() - q.x() * w.z(), q.w() * w.z() + q.x() * w.y() - q.y() * w.x(), -q.x() * w.x() - q.y() * w.y() - q.z() * w.z()); #endif } SIMD_FORCE_INLINE btQuaternion operator*(const btVector3& w, const btQuaternion& q) { #if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) __m128 vQ1 = w.get128(); __m128 vQ2 = q.get128(); __m128 A1, B1, A2, B2, A3, B3; A1 = bt_pshufd_ps(vQ1, BT_SHUFFLE(0, 1, 2, 0)); // X Y z x B1 = bt_pshufd_ps(vQ2, BT_SHUFFLE(3, 3, 3, 0)); // W W W X A1 = A1 * B1; A2 = bt_pshufd_ps(vQ1, BT_SHUFFLE(1, 2, 0, 1)); B2 = bt_pshufd_ps(vQ2, BT_SHUFFLE(2, 0, 1, 1)); A2 = A2 * B2; A3 = bt_pshufd_ps(vQ1, BT_SHUFFLE(2, 0, 1, 2)); B3 = bt_pshufd_ps(vQ2, BT_SHUFFLE(1, 2, 0, 2)); A3 = A3 * B3; // A3 *= B3 A1 = A1 + A2; // AB12 A1 = _mm_xor_ps(A1, vPPPM); // change sign of the last element A1 = A1 - A3; // AB123 = AB12 - AB3 return btQuaternion(A1); #elif defined(BT_USE_NEON) float32x4_t vQ1 = w.get128(); float32x4_t vQ2 = q.get128(); float32x4_t A1, B1, A2, B2, A3, B3; float32x2_t vQ1zx, vQ2wx, vQ1yz, vQ2zx, vQ2yz, vQ2xz; { float32x2x2_t tmp; tmp = vtrn_f32(vget_high_f32(vQ1), vget_low_f32(vQ1)); // {z x}, {w y} vQ1zx = tmp.val[0]; tmp = vtrn_f32(vget_high_f32(vQ2), vget_low_f32(vQ2)); // {z x}, {w y} vQ2zx = tmp.val[0]; } vQ2wx = vext_f32(vget_high_f32(vQ2), vget_low_f32(vQ2), 1); vQ1yz = vext_f32(vget_low_f32(vQ1), vget_high_f32(vQ1), 1); vQ2yz = vext_f32(vget_low_f32(vQ2), vget_high_f32(vQ2), 1); vQ2xz = vext_f32(vQ2zx, vQ2zx, 1); A1 = vcombine_f32(vget_low_f32(vQ1), vQ1zx); // X Y z x B1 = vcombine_f32(vdup_lane_f32(vget_high_f32(vQ2), 1), vQ2wx); // W W W X A2 = vcombine_f32(vQ1yz, vget_low_f32(vQ1)); B2 = vcombine_f32(vQ2zx, vdup_lane_f32(vget_low_f32(vQ2), 1)); A3 = vcombine_f32(vQ1zx, vQ1yz); // Z X Y Z B3 = vcombine_f32(vQ2yz, vQ2xz); // Y Z x z A1 = vmulq_f32(A1, B1); A2 = vmulq_f32(A2, B2); A3 = vmulq_f32(A3, B3); // A3 *= B3 A1 = vaddq_f32(A1, A2); // AB12 = AB1 + AB2 // change the sign of the last element A1 = (btSimdFloat4)veorq_s32((int32x4_t)A1, (int32x4_t)vPPPM); A1 = vsubq_f32(A1, A3); // AB123 = AB12 - AB3 return btQuaternion(A1); #else return btQuaternion( +w.x() * q.w() + w.y() * q.z() - w.z() * q.y(), +w.y() * q.w() + w.z() * q.x() - w.x() * q.z(), +w.z() * q.w() + w.x() * q.y() - w.y() * q.x(), -w.x() * q.x() - w.y() * q.y() - w.z() * q.z()); #endif } /**@brief Calculate the dot product between two quaternions */ SIMD_FORCE_INLINE btScalar dot(const btQuaternion& q1, const btQuaternion& q2) { return q1.dot(q2); } /**@brief Return the length of a quaternion */ SIMD_FORCE_INLINE btScalar length(const btQuaternion& q) { return q.length(); } /**@brief Return the angle between two quaternions*/ SIMD_FORCE_INLINE btScalar btAngle(const btQuaternion& q1, const btQuaternion& q2) { return q1.angle(q2); } /**@brief Return the inverse of a quaternion*/ SIMD_FORCE_INLINE btQuaternion inverse(const btQuaternion& q) { return q.inverse(); } /**@brief Return the result of spherical linear interpolation betwen two quaternions * @param q1 The first quaternion * @param q2 The second quaternion * @param t The ration between q1 and q2. t = 0 return q1, t=1 returns q2 * Slerp assumes constant velocity between positions. */ SIMD_FORCE_INLINE btQuaternion slerp(const btQuaternion& q1, const btQuaternion& q2, const btScalar& t) { return q1.slerp(q2, t); } SIMD_FORCE_INLINE btVector3 quatRotate(const btQuaternion& rotation, const btVector3& v) { btQuaternion q = rotation * v; q *= rotation.inverse(); #if defined BT_USE_SIMD_VECTOR3 && defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) return btVector3(_mm_and_ps(q.get128(), btvFFF0fMask)); #elif defined(BT_USE_NEON) return btVector3((float32x4_t)vandq_s32((int32x4_t)q.get128(), btvFFF0Mask)); #else return btVector3(q.getX(), q.getY(), q.getZ()); #endif } SIMD_FORCE_INLINE btQuaternion shortestArcQuat(const btVector3& v0, const btVector3& v1) // Game Programming Gems 2.10. make sure v0,v1 are normalized { btVector3 c = v0.cross(v1); btScalar d = v0.dot(v1); if (d < -1.0 + SIMD_EPSILON) { btVector3 n, unused; btPlaneSpace1(v0, n, unused); return btQuaternion(n.x(), n.y(), n.z(), 0.0f); // just pick any vector that is orthogonal to v0 } btScalar s = btSqrt((1.0f + d) * 2.0f); btScalar rs = 1.0f / s; return btQuaternion(c.getX() * rs, c.getY() * rs, c.getZ() * rs, s * 0.5f); } SIMD_FORCE_INLINE btQuaternion shortestArcQuatNormalize2(btVector3& v0, btVector3& v1) { v0.normalize(); v1.normalize(); return shortestArcQuat(v0, v1); } struct btQuaternionFloatData { float m_floats[4]; }; struct btQuaternionDoubleData { double m_floats[4]; }; SIMD_FORCE_INLINE void btQuaternion::serializeFloat(struct btQuaternionFloatData& dataOut) const { ///could also do a memcpy, check if it is worth it for (int i = 0; i < 4; i++) dataOut.m_floats[i] = float(m_floats[i]); } SIMD_FORCE_INLINE void btQuaternion::deSerializeFloat(const struct btQuaternionFloatData& dataIn) { for (int i = 0; i < 4; i++) m_floats[i] = btScalar(dataIn.m_floats[i]); } SIMD_FORCE_INLINE void btQuaternion::serializeDouble(struct btQuaternionDoubleData& dataOut) const { ///could also do a memcpy, check if it is worth it for (int i = 0; i < 4; i++) dataOut.m_floats[i] = double(m_floats[i]); } SIMD_FORCE_INLINE void btQuaternion::deSerializeDouble(const struct btQuaternionDoubleData& dataIn) { for (int i = 0; i < 4; i++) m_floats[i] = btScalar(dataIn.m_floats[i]); } SIMD_FORCE_INLINE void btQuaternion::serialize(struct btQuaternionData& dataOut) const { ///could also do a memcpy, check if it is worth it for (int i = 0; i < 4; i++) dataOut.m_floats[i] = m_floats[i]; } SIMD_FORCE_INLINE void btQuaternion::deSerialize(const struct btQuaternionFloatData& dataIn) { for (int i = 0; i < 4; i++) m_floats[i] = (btScalar)dataIn.m_floats[i]; } SIMD_FORCE_INLINE void btQuaternion::deSerialize(const struct btQuaternionDoubleData& dataIn) { for (int i = 0; i < 4; i++) m_floats[i] = (btScalar)dataIn.m_floats[i]; } #endif //BT_SIMD__QUATERNION_H_ ================================================ FILE: libraries/bullet/LinearMath/btQuickprof.h ================================================ /*************************************************************************************************** ** ** Real-Time Hierarchical Profiling for Game Programming Gems 3 ** ** by Greg Hjelstrom & Byon Garrabrant ** ***************************************************************************************************/ // Credits: The Clock class was inspired by the Timer classes in // Ogre (www.ogre3d.org). #ifndef BT_QUICK_PROF_H #define BT_QUICK_PROF_H #include "btScalar.h" #define USE_BT_CLOCK 1 #ifdef USE_BT_CLOCK ///The btClock is a portable basic clock that measures accurate time in seconds, use for profiling. class btClock { public: btClock(); btClock(const btClock& other); btClock& operator=(const btClock& other); ~btClock(); /// Resets the initial reference time. void reset(); /// Returns the time in ms since the last call to reset or since /// the btClock was created. unsigned long long int getTimeMilliseconds(); /// Returns the time in us since the last call to reset or since /// the Clock was created. unsigned long long int getTimeMicroseconds(); unsigned long long int getTimeNanoseconds(); /// Returns the time in s since the last call to reset or since /// the Clock was created. btScalar getTimeSeconds(); private: struct btClockData* m_data; }; #endif //USE_BT_CLOCK typedef void(btEnterProfileZoneFunc)(const char* msg); typedef void(btLeaveProfileZoneFunc)(); btEnterProfileZoneFunc* btGetCurrentEnterProfileZoneFunc(); btLeaveProfileZoneFunc* btGetCurrentLeaveProfileZoneFunc(); void btSetCustomEnterProfileZoneFunc(btEnterProfileZoneFunc* enterFunc); void btSetCustomLeaveProfileZoneFunc(btLeaveProfileZoneFunc* leaveFunc); #ifndef BT_ENABLE_PROFILE #define BT_NO_PROFILE 1 #endif //BT_NO_PROFILE const unsigned int BT_QUICKPROF_MAX_THREAD_COUNT = 64; //btQuickprofGetCurrentThreadIndex will return -1 if thread index cannot be determined, //otherwise returns thread index in range [0..maxThreads] unsigned int btQuickprofGetCurrentThreadIndex2(); #ifndef BT_NO_PROFILE #include //@todo remove this, backwards compatibility #include "btAlignedAllocator.h" #include ///A node in the Profile Hierarchy Tree class CProfileNode { public: CProfileNode(const char* name, CProfileNode* parent); ~CProfileNode(void); CProfileNode* Get_Sub_Node(const char* name); CProfileNode* Get_Parent(void) { return Parent; } CProfileNode* Get_Sibling(void) { return Sibling; } CProfileNode* Get_Child(void) { return Child; } void CleanupMemory(); void Reset(void); void Call(void); bool Return(void); const char* Get_Name(void) { return Name; } int Get_Total_Calls(void) { return TotalCalls; } float Get_Total_Time(void) { return TotalTime; } void* GetUserPointer() const { return m_userPtr; } void SetUserPointer(void* ptr) { m_userPtr = ptr; } protected: const char* Name; int TotalCalls; float TotalTime; unsigned long int StartTime; int RecursionCounter; CProfileNode* Parent; CProfileNode* Child; CProfileNode* Sibling; void* m_userPtr; }; ///An iterator to navigate through the tree class CProfileIterator { public: // Access all the children of the current parent void First(void); void Next(void); bool Is_Done(void); bool Is_Root(void) { return (CurrentParent->Get_Parent() == 0); } void Enter_Child(int index); // Make the given child the new parent void Enter_Largest_Child(void); // Make the largest child the new parent void Enter_Parent(void); // Make the current parent's parent the new parent // Access the current child const char* Get_Current_Name(void) { return CurrentChild->Get_Name(); } int Get_Current_Total_Calls(void) { return CurrentChild->Get_Total_Calls(); } float Get_Current_Total_Time(void) { return CurrentChild->Get_Total_Time(); } void* Get_Current_UserPointer(void) { return CurrentChild->GetUserPointer(); } void Set_Current_UserPointer(void* ptr) { CurrentChild->SetUserPointer(ptr); } // Access the current parent const char* Get_Current_Parent_Name(void) { return CurrentParent->Get_Name(); } int Get_Current_Parent_Total_Calls(void) { return CurrentParent->Get_Total_Calls(); } float Get_Current_Parent_Total_Time(void) { return CurrentParent->Get_Total_Time(); } protected: CProfileNode* CurrentParent; CProfileNode* CurrentChild; CProfileIterator(CProfileNode* start); friend class CProfileManager; }; ///The Manager for the Profile system class CProfileManager { public: static void Start_Profile(const char* name); static void Stop_Profile(void); static void CleanupMemory(void); // { // Root.CleanupMemory(); // } static void Reset(void); static void Increment_Frame_Counter(void); static int Get_Frame_Count_Since_Reset(void) { return FrameCounter; } static float Get_Time_Since_Reset(void); static CProfileIterator* Get_Iterator(void); // { // // return new CProfileIterator( &Root ); // } static void Release_Iterator(CProfileIterator* iterator) { delete (iterator); } static void dumpRecursive(CProfileIterator* profileIterator, int spacing); static void dumpAll(); private: static int FrameCounter; static unsigned long int ResetTime; }; #endif //#ifndef BT_NO_PROFILE ///ProfileSampleClass is a simple way to profile a function's scope ///Use the BT_PROFILE macro at the start of scope to time class CProfileSample { public: CProfileSample(const char* name); ~CProfileSample(void); }; #define BT_PROFILE(name) CProfileSample __profile(name) #endif //BT_QUICK_PROF_H ================================================ FILE: libraries/bullet/LinearMath/btRandom.h ================================================ /* Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_GEN_RANDOM_H #define BT_GEN_RANDOM_H #ifdef MT19937 #include #include #define GEN_RAND_MAX UINT_MAX SIMD_FORCE_INLINE void GEN_srand(unsigned int seed) { init_genrand(seed); } SIMD_FORCE_INLINE unsigned int GEN_rand() { return genrand_int32(); } #else #include #define GEN_RAND_MAX RAND_MAX SIMD_FORCE_INLINE void GEN_srand(unsigned int seed) { srand(seed); } SIMD_FORCE_INLINE unsigned int GEN_rand() { return rand(); } #endif #endif //BT_GEN_RANDOM_H ================================================ FILE: libraries/bullet/LinearMath/btReducedVector.h ================================================ // // btReducedVectors.h // BulletLinearMath // // Created by Xuchen Han on 4/4/20. // #ifndef btReducedVectors_h #define btReducedVectors_h #include "btVector3.h" #include "btMatrix3x3.h" #include "btAlignedObjectArray.h" #include #include #include struct TwoInts { int a,b; }; inline bool operator<(const TwoInts& A, const TwoInts& B) { return A.b < B.b; } // A helper vector type used for CG projections class btReducedVector { public: btAlignedObjectArray m_indices; btAlignedObjectArray m_vecs; int m_sz; // all m_indices value < m_sz public: btReducedVector():m_sz(0) { m_indices.resize(0); m_vecs.resize(0); m_indices.clear(); m_vecs.clear(); } btReducedVector(int sz): m_sz(sz) { m_indices.resize(0); m_vecs.resize(0); m_indices.clear(); m_vecs.clear(); } btReducedVector(int sz, const btAlignedObjectArray& indices, const btAlignedObjectArray& vecs): m_sz(sz), m_indices(indices), m_vecs(vecs) { } void simplify() { btAlignedObjectArray old_indices(m_indices); btAlignedObjectArray old_vecs(m_vecs); m_indices.resize(0); m_vecs.resize(0); m_indices.clear(); m_vecs.clear(); for (int i = 0; i < old_indices.size(); ++i) { if (old_vecs[i].length2() > SIMD_EPSILON) { m_indices.push_back(old_indices[i]); m_vecs.push_back(old_vecs[i]); } } } btReducedVector operator+(const btReducedVector& other) { btReducedVector ret(m_sz); int i=0, j=0; while (i < m_indices.size() && j < other.m_indices.size()) { if (m_indices[i] < other.m_indices[j]) { ret.m_indices.push_back(m_indices[i]); ret.m_vecs.push_back(m_vecs[i]); ++i; } else if (m_indices[i] > other.m_indices[j]) { ret.m_indices.push_back(other.m_indices[j]); ret.m_vecs.push_back(other.m_vecs[j]); ++j; } else { ret.m_indices.push_back(other.m_indices[j]); ret.m_vecs.push_back(m_vecs[i] + other.m_vecs[j]); ++i; ++j; } } while (i < m_indices.size()) { ret.m_indices.push_back(m_indices[i]); ret.m_vecs.push_back(m_vecs[i]); ++i; } while (j < other.m_indices.size()) { ret.m_indices.push_back(other.m_indices[j]); ret.m_vecs.push_back(other.m_vecs[j]); ++j; } ret.simplify(); return ret; } btReducedVector operator-() { btReducedVector ret(m_sz); for (int i = 0; i < m_indices.size(); ++i) { ret.m_indices.push_back(m_indices[i]); ret.m_vecs.push_back(-m_vecs[i]); } ret.simplify(); return ret; } btReducedVector operator-(const btReducedVector& other) { btReducedVector ret(m_sz); int i=0, j=0; while (i < m_indices.size() && j < other.m_indices.size()) { if (m_indices[i] < other.m_indices[j]) { ret.m_indices.push_back(m_indices[i]); ret.m_vecs.push_back(m_vecs[i]); ++i; } else if (m_indices[i] > other.m_indices[j]) { ret.m_indices.push_back(other.m_indices[j]); ret.m_vecs.push_back(-other.m_vecs[j]); ++j; } else { ret.m_indices.push_back(other.m_indices[j]); ret.m_vecs.push_back(m_vecs[i] - other.m_vecs[j]); ++i; ++j; } } while (i < m_indices.size()) { ret.m_indices.push_back(m_indices[i]); ret.m_vecs.push_back(m_vecs[i]); ++i; } while (j < other.m_indices.size()) { ret.m_indices.push_back(other.m_indices[j]); ret.m_vecs.push_back(-other.m_vecs[j]); ++j; } ret.simplify(); return ret; } bool operator==(const btReducedVector& other) const { if (m_sz != other.m_sz) return false; if (m_indices.size() != other.m_indices.size()) return false; for (int i = 0; i < m_indices.size(); ++i) { if (m_indices[i] != other.m_indices[i] || m_vecs[i] != other.m_vecs[i]) { return false; } } return true; } bool operator!=(const btReducedVector& other) const { return !(*this == other); } btReducedVector& operator=(const btReducedVector& other) { if (this == &other) { return *this; } m_sz = other.m_sz; m_indices.copyFromArray(other.m_indices); m_vecs.copyFromArray(other.m_vecs); return *this; } btScalar dot(const btReducedVector& other) const { btScalar ret = 0; int j = 0; for (int i = 0; i < m_indices.size(); ++i) { while (j < other.m_indices.size() && other.m_indices[j] < m_indices[i]) { ++j; } if (j < other.m_indices.size() && other.m_indices[j] == m_indices[i]) { ret += m_vecs[i].dot(other.m_vecs[j]); // ++j; } } return ret; } btScalar dot(const btAlignedObjectArray& other) const { btScalar ret = 0; for (int i = 0; i < m_indices.size(); ++i) { ret += m_vecs[i].dot(other[m_indices[i]]); } return ret; } btScalar length2() const { return this->dot(*this); } void normalize(); // returns the projection of this onto other btReducedVector proj(const btReducedVector& other) const; bool testAdd() const; bool testMinus() const; bool testDot() const; bool testMultiply() const; void test() const; void print() const { for (int i = 0; i < m_indices.size(); ++i) { printf("%d: (%f, %f, %f)/", m_indices[i], m_vecs[i][0],m_vecs[i][1],m_vecs[i][2]); } printf("\n"); } void sort() { std::vector tuples; for (int i = 0; i < m_indices.size(); ++i) { TwoInts ti; ti.a = i; ti.b = m_indices[i]; tuples.push_back(ti); } std::sort(tuples.begin(), tuples.end()); btAlignedObjectArray new_indices; btAlignedObjectArray new_vecs; for (size_t i = 0; i < tuples.size(); ++i) { new_indices.push_back(tuples[i].b); new_vecs.push_back(m_vecs[tuples[i].a]); } m_indices = new_indices; m_vecs = new_vecs; } }; SIMD_FORCE_INLINE btReducedVector operator*(const btReducedVector& v, btScalar s) { btReducedVector ret(v.m_sz); for (int i = 0; i < v.m_indices.size(); ++i) { ret.m_indices.push_back(v.m_indices[i]); ret.m_vecs.push_back(s*v.m_vecs[i]); } ret.simplify(); return ret; } SIMD_FORCE_INLINE btReducedVector operator*(btScalar s, const btReducedVector& v) { return v*s; } SIMD_FORCE_INLINE btReducedVector operator/(const btReducedVector& v, btScalar s) { return v * (1.0/s); } SIMD_FORCE_INLINE btReducedVector& operator/=(btReducedVector& v, btScalar s) { v = v/s; return v; } SIMD_FORCE_INLINE btReducedVector& operator+=(btReducedVector& v1, const btReducedVector& v2) { v1 = v1+v2; return v1; } SIMD_FORCE_INLINE btReducedVector& operator-=(btReducedVector& v1, const btReducedVector& v2) { v1 = v1-v2; return v1; } #endif /* btReducedVectors_h */ ================================================ FILE: libraries/bullet/LinearMath/btScalar.h ================================================ /* Copyright (c) 2003-2009 Erwin Coumans http://bullet.googlecode.com This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_SCALAR_H #define BT_SCALAR_H #ifdef BT_MANAGED_CODE //Aligned data types not supported in managed code #pragma unmanaged #endif #include #include //size_t for MSVC 6.0 #include /* SVN $Revision$ on $Date$ from http://bullet.googlecode.com*/ #define BT_BULLET_VERSION 317 inline int btGetVersion() { return BT_BULLET_VERSION; } inline int btIsDoublePrecision() { #ifdef BT_USE_DOUBLE_PRECISION return true; #else return false; #endif } // The following macro "BT_NOT_EMPTY_FILE" can be put into a file // in order suppress the MS Visual C++ Linker warning 4221 // // warning LNK4221: no public symbols found; archive member will be inaccessible // // This warning occurs on PC and XBOX when a file compiles out completely // has no externally visible symbols which may be dependant on configuration // #defines and options. // // see more https://stackoverflow.com/questions/1822887/what-is-the-best-way-to-eliminate-ms-visual-c-linker-warning-warning-lnk422 #if defined(_MSC_VER) #define BT_NOT_EMPTY_FILE_CAT_II(p, res) res #define BT_NOT_EMPTY_FILE_CAT_I(a, b) BT_NOT_EMPTY_FILE_CAT_II(~, a##b) #define BT_NOT_EMPTY_FILE_CAT(a, b) BT_NOT_EMPTY_FILE_CAT_I(a, b) #define BT_NOT_EMPTY_FILE \ namespace \ { \ char BT_NOT_EMPTY_FILE_CAT(NoEmptyFileDummy, __COUNTER__); \ } #else #define BT_NOT_EMPTY_FILE #endif // clang and most formatting tools don't support indentation of preprocessor guards, so turn it off // clang-format off #if defined(DEBUG) || defined (_DEBUG) #define BT_DEBUG #endif #ifdef _WIN32 #if defined(__GNUC__) // it should handle both MINGW and CYGWIN #define SIMD_FORCE_INLINE __inline__ __attribute__((always_inline)) #define ATTRIBUTE_ALIGNED16(a) a __attribute__((aligned(16))) #define ATTRIBUTE_ALIGNED64(a) a __attribute__((aligned(64))) #define ATTRIBUTE_ALIGNED128(a) a __attribute__((aligned(128))) #elif ( defined(_MSC_VER) && _MSC_VER < 1300 ) #define SIMD_FORCE_INLINE inline #define ATTRIBUTE_ALIGNED16(a) a #define ATTRIBUTE_ALIGNED64(a) a #define ATTRIBUTE_ALIGNED128(a) a #elif defined(_M_ARM) #define SIMD_FORCE_INLINE __forceinline #define ATTRIBUTE_ALIGNED16(a) __declspec() a #define ATTRIBUTE_ALIGNED64(a) __declspec() a #define ATTRIBUTE_ALIGNED128(a) __declspec () a #else//__MINGW32__ //#define BT_HAS_ALIGNED_ALLOCATOR #pragma warning(disable : 4324) // disable padding warning // #pragma warning(disable:4530) // Disable the exception disable but used in MSCV Stl warning. #pragma warning(disable:4996) //Turn off warnings about deprecated C routines // #pragma warning(disable:4786) // Disable the "debug name too long" warning #define SIMD_FORCE_INLINE __forceinline #define ATTRIBUTE_ALIGNED16(a) __declspec(align(16)) a #define ATTRIBUTE_ALIGNED64(a) __declspec(align(64)) a #define ATTRIBUTE_ALIGNED128(a) __declspec (align(128)) a #ifdef _XBOX #define BT_USE_VMX128 #include #define BT_HAVE_NATIVE_FSEL #define btFsel(a,b,c) __fsel((a),(b),(c)) #else #if defined (_M_ARM) //Do not turn SSE on for ARM (may want to turn on BT_USE_NEON however) #elif (defined (_WIN32) && (_MSC_VER) && _MSC_VER >= 1400) && (!defined (BT_USE_DOUBLE_PRECISION)) #ifdef __clang__ #define __BT_DISABLE_SSE__ #endif #ifndef __BT_DISABLE_SSE__ #if _MSC_VER>1400 #define BT_USE_SIMD_VECTOR3 #endif #define BT_USE_SSE #endif//__BT_DISABLE_SSE__ #ifdef BT_USE_SSE #if (_MSC_FULL_VER >= 170050727)//Visual Studio 2012 can compile SSE4/FMA3 (but SSE4/FMA3 is not enabled by default) #define BT_ALLOW_SSE4 #endif //(_MSC_FULL_VER >= 160040219) //BT_USE_SSE_IN_API is disabled under Windows by default, because //it makes it harder to integrate Bullet into your application under Windows //(structured embedding Bullet structs/classes need to be 16-byte aligned) //with relatively little performance gain //If you are not embedded Bullet data in your classes, or make sure that you align those classes on 16-byte boundaries //you can manually enable this line or set it in the build system for a bit of performance gain (a few percent, dependent on usage) //#define BT_USE_SSE_IN_API #endif //BT_USE_SSE #include #endif #endif//_XBOX #endif //__MINGW32__ #ifdef BT_DEBUG #ifdef _MSC_VER #include #define btAssert(x) { if(!(x)){printf("Assert " __FILE__ ":%u (%s)\n", __LINE__, #x);__debugbreak(); }} #else//_MSC_VER #include #define btAssert assert #endif//_MSC_VER #else #define btAssert(x) #endif //btFullAssert is optional, slows down a lot #define btFullAssert(x) #define btLikely(_c) _c #define btUnlikely(_c) _c #else//_WIN32 #if defined (__CELLOS_LV2__) #define SIMD_FORCE_INLINE inline __attribute__((always_inline)) #define ATTRIBUTE_ALIGNED16(a) a __attribute__ ((aligned (16))) #define ATTRIBUTE_ALIGNED64(a) a __attribute__ ((aligned (64))) #define ATTRIBUTE_ALIGNED128(a) a __attribute__ ((aligned (128))) #ifndef assert #include #endif #ifdef BT_DEBUG #ifdef __SPU__ #include #define printf spu_printf #define btAssert(x) {if(!(x)){printf("Assert " __FILE__ ":%u ("#x")\n", __LINE__);spu_hcmpeq(0,0);}} #else #define btAssert assert #endif #else//BT_DEBUG #define btAssert(x) #endif//BT_DEBUG //btFullAssert is optional, slows down a lot #define btFullAssert(x) #define btLikely(_c) _c #define btUnlikely(_c) _c #else//defined (__CELLOS_LV2__) #ifdef USE_LIBSPE2 #define SIMD_FORCE_INLINE __inline #define ATTRIBUTE_ALIGNED16(a) a __attribute__ ((aligned (16))) #define ATTRIBUTE_ALIGNED64(a) a __attribute__ ((aligned (64))) #define ATTRIBUTE_ALIGNED128(a) a __attribute__ ((aligned (128))) #ifndef assert #include #endif #ifdef BT_DEBUG #define btAssert assert #else #define btAssert(x) #endif //btFullAssert is optional, slows down a lot #define btFullAssert(x) #define btLikely(_c) __builtin_expect((_c), 1) #define btUnlikely(_c) __builtin_expect((_c), 0) #else//USE_LIBSPE2 //non-windows systems #if (defined (__APPLE__) && (!defined (BT_USE_DOUBLE_PRECISION))) #if defined (__i386__) || defined (__x86_64__) #define BT_USE_SIMD_VECTOR3 #define BT_USE_SSE //BT_USE_SSE_IN_API is enabled on Mac OSX by default, because memory is automatically aligned on 16-byte boundaries //if apps run into issues, we will disable the next line #define BT_USE_SSE_IN_API #ifdef BT_USE_SSE // include appropriate SSE level #if defined (__SSE4_1__) #include #elif defined (__SSSE3__) #include #elif defined (__SSE3__) #include #else #include #endif #endif //BT_USE_SSE #elif defined( __ARM_NEON__ ) #ifdef __clang__ #define BT_USE_NEON 1 #define BT_USE_SIMD_VECTOR3 #if defined BT_USE_NEON && defined (__clang__) #include #endif//BT_USE_NEON #endif //__clang__ #endif//__arm__ #define SIMD_FORCE_INLINE inline __attribute__ ((always_inline)) ///@todo: check out alignment methods for other platforms/compilers #define ATTRIBUTE_ALIGNED16(a) a __attribute__ ((aligned (16))) #define ATTRIBUTE_ALIGNED64(a) a __attribute__ ((aligned (64))) #define ATTRIBUTE_ALIGNED128(a) a __attribute__ ((aligned (128))) #ifndef assert #include #endif #if defined(DEBUG) || defined (_DEBUG) #if defined (__i386__) || defined (__x86_64__) #include #define btAssert(x)\ {\ if(!(x))\ {\ printf("Assert %s in line %d, file %s\n",#x, __LINE__, __FILE__);\ asm volatile ("int3");\ }\ } #else//defined (__i386__) || defined (__x86_64__) #define btAssert assert #endif//defined (__i386__) || defined (__x86_64__) #else//defined(DEBUG) || defined (_DEBUG) #define btAssert(x) #endif//defined(DEBUG) || defined (_DEBUG) //btFullAssert is optional, slows down a lot #define btFullAssert(x) #define btLikely(_c) _c #define btUnlikely(_c) _c #else//__APPLE__ #define SIMD_FORCE_INLINE inline ///@todo: check out alignment methods for other platforms/compilers ///#define ATTRIBUTE_ALIGNED16(a) a __attribute__ ((aligned (16))) ///#define ATTRIBUTE_ALIGNED64(a) a __attribute__ ((aligned (64))) ///#define ATTRIBUTE_ALIGNED128(a) a __attribute__ ((aligned (128))) #define ATTRIBUTE_ALIGNED16(a) a #define ATTRIBUTE_ALIGNED64(a) a #define ATTRIBUTE_ALIGNED128(a) a #ifndef assert #include #endif #if defined(DEBUG) || defined (_DEBUG) #define btAssert assert #else #define btAssert(x) #endif //btFullAssert is optional, slows down a lot #define btFullAssert(x) #define btLikely(_c) _c #define btUnlikely(_c) _c #endif //__APPLE__ #endif // LIBSPE2 #endif //__CELLOS_LV2__ #endif//_WIN32 ///The btScalar type abstracts floating point numbers, to easily switch between double and single floating point precision. #if defined(BT_USE_DOUBLE_PRECISION) typedef double btScalar; //this number could be bigger in double precision #define BT_LARGE_FLOAT 1e30 #else typedef float btScalar; //keep BT_LARGE_FLOAT*BT_LARGE_FLOAT < FLT_MAX #define BT_LARGE_FLOAT 1e18f #endif #ifdef BT_USE_SSE typedef __m128 btSimdFloat4; #endif //BT_USE_SSE #if defined(BT_USE_SSE) //#if defined BT_USE_SSE_IN_API && defined (BT_USE_SSE) #ifdef _WIN32 #ifndef BT_NAN static int btNanMask = 0x7F800001; #define BT_NAN (*(float *)&btNanMask) #endif #ifndef BT_INFINITY static int btInfinityMask = 0x7F800000; #define BT_INFINITY (*(float *)&btInfinityMask) inline int btGetInfinityMask() //suppress stupid compiler warning { return btInfinityMask; } #endif //use this, in case there are clashes (such as xnamath.h) #ifndef BT_NO_SIMD_OPERATOR_OVERLOADS inline __m128 operator+(const __m128 A, const __m128 B) { return _mm_add_ps(A, B); } inline __m128 operator-(const __m128 A, const __m128 B) { return _mm_sub_ps(A, B); } inline __m128 operator*(const __m128 A, const __m128 B) { return _mm_mul_ps(A, B); } #endif //BT_NO_SIMD_OPERATOR_OVERLOADS #define btCastfTo128i(a) (_mm_castps_si128(a)) #define btCastfTo128d(a) (_mm_castps_pd(a)) #define btCastiTo128f(a) (_mm_castsi128_ps(a)) #define btCastdTo128f(a) (_mm_castpd_ps(a)) #define btCastdTo128i(a) (_mm_castpd_si128(a)) #define btAssign128(r0, r1, r2, r3) _mm_setr_ps(r0, r1, r2, r3) #else //_WIN32 #define btCastfTo128i(a) ((__m128i)(a)) #define btCastfTo128d(a) ((__m128d)(a)) #define btCastiTo128f(a) ((__m128)(a)) #define btCastdTo128f(a) ((__m128)(a)) #define btCastdTo128i(a) ((__m128i)(a)) #define btAssign128(r0, r1, r2, r3) \ (__m128) { r0, r1, r2, r3 } #define BT_INFINITY INFINITY #define BT_NAN NAN #endif //_WIN32 #else//BT_USE_SSE #ifdef BT_USE_NEON #include typedef float32x4_t btSimdFloat4; #define BT_INFINITY INFINITY #define BT_NAN NAN #define btAssign128(r0, r1, r2, r3) \ (float32x4_t) { r0, r1, r2, r3 } #else //BT_USE_NEON #ifndef BT_INFINITY struct btInfMaskConverter { union { float mask; int intmask; }; btInfMaskConverter(int _mask = 0x7F800000) : intmask(_mask) { } }; static btInfMaskConverter btInfinityMask = 0x7F800000; #define BT_INFINITY (btInfinityMask.mask) inline int btGetInfinityMask() //suppress stupid compiler warning { return btInfinityMask.intmask; } #endif #endif //BT_USE_NEON #endif //BT_USE_SSE #ifdef BT_USE_NEON #include typedef float32x4_t btSimdFloat4; #define BT_INFINITY INFINITY #define BT_NAN NAN #define btAssign128(r0, r1, r2, r3) \ (float32x4_t) { r0, r1, r2, r3 } #endif//BT_USE_NEON #define BT_DECLARE_ALIGNED_ALLOCATOR() \ SIMD_FORCE_INLINE void *operator new(size_t sizeInBytes) { return btAlignedAlloc(sizeInBytes, 16); } \ SIMD_FORCE_INLINE void operator delete(void *ptr) { btAlignedFree(ptr); } \ SIMD_FORCE_INLINE void *operator new(size_t, void *ptr) { return ptr; } \ SIMD_FORCE_INLINE void operator delete(void *, void *) {} \ SIMD_FORCE_INLINE void *operator new[](size_t sizeInBytes) { return btAlignedAlloc(sizeInBytes, 16); } \ SIMD_FORCE_INLINE void operator delete[](void *ptr) { btAlignedFree(ptr); } \ SIMD_FORCE_INLINE void *operator new[](size_t, void *ptr) { return ptr; } \ SIMD_FORCE_INLINE void operator delete[](void *, void *) {} #if defined(BT_USE_DOUBLE_PRECISION) || defined(BT_FORCE_DOUBLE_FUNCTIONS) SIMD_FORCE_INLINE btScalar btSqrt(btScalar x) { return sqrt(x); } SIMD_FORCE_INLINE btScalar btFabs(btScalar x) { return fabs(x); } SIMD_FORCE_INLINE btScalar btCos(btScalar x) { return cos(x); } SIMD_FORCE_INLINE btScalar btSin(btScalar x) { return sin(x); } SIMD_FORCE_INLINE btScalar btTan(btScalar x) { return tan(x); } SIMD_FORCE_INLINE btScalar btAcos(btScalar x) { if (x < btScalar(-1)) x = btScalar(-1); if (x > btScalar(1)) x = btScalar(1); return acos(x); } SIMD_FORCE_INLINE btScalar btAsin(btScalar x) { if (x < btScalar(-1)) x = btScalar(-1); if (x > btScalar(1)) x = btScalar(1); return asin(x); } SIMD_FORCE_INLINE btScalar btAtan(btScalar x) { return atan(x); } SIMD_FORCE_INLINE btScalar btAtan2(btScalar x, btScalar y) { return atan2(x, y); } SIMD_FORCE_INLINE btScalar btExp(btScalar x) { return exp(x); } SIMD_FORCE_INLINE btScalar btLog(btScalar x) { return log(x); } SIMD_FORCE_INLINE btScalar btPow(btScalar x, btScalar y) { return pow(x, y); } SIMD_FORCE_INLINE btScalar btFmod(btScalar x, btScalar y) { return fmod(x, y); } #else//BT_USE_DOUBLE_PRECISION SIMD_FORCE_INLINE btScalar btSqrt(btScalar y) { #ifdef USE_APPROXIMATION #ifdef __LP64__ float xhalf = 0.5f * y; int i = *(int *)&y; i = 0x5f375a86 - (i >> 1); y = *(float *)&i; y = y * (1.5f - xhalf * y * y); y = y * (1.5f - xhalf * y * y); y = y * (1.5f - xhalf * y * y); y = 1 / y; return y; #else double x, z, tempf; unsigned long *tfptr = ((unsigned long *)&tempf) + 1; tempf = y; *tfptr = (0xbfcdd90a - *tfptr) >> 1; /* estimate of 1/sqrt(y) */ x = tempf; z = y * btScalar(0.5); x = (btScalar(1.5) * x) - (x * x) * (x * z); /* iteration formula */ x = (btScalar(1.5) * x) - (x * x) * (x * z); x = (btScalar(1.5) * x) - (x * x) * (x * z); x = (btScalar(1.5) * x) - (x * x) * (x * z); x = (btScalar(1.5) * x) - (x * x) * (x * z); return x * y; #endif #else return sqrtf(y); #endif } SIMD_FORCE_INLINE btScalar btFabs(btScalar x) { return fabsf(x); } SIMD_FORCE_INLINE btScalar btCos(btScalar x) { return cosf(x); } SIMD_FORCE_INLINE btScalar btSin(btScalar x) { return sinf(x); } SIMD_FORCE_INLINE btScalar btTan(btScalar x) { return tanf(x); } SIMD_FORCE_INLINE btScalar btAcos(btScalar x) { if (x < btScalar(-1)) x = btScalar(-1); if (x > btScalar(1)) x = btScalar(1); return acosf(x); } SIMD_FORCE_INLINE btScalar btAsin(btScalar x) { if (x < btScalar(-1)) x = btScalar(-1); if (x > btScalar(1)) x = btScalar(1); return asinf(x); } SIMD_FORCE_INLINE btScalar btAtan(btScalar x) { return atanf(x); } SIMD_FORCE_INLINE btScalar btAtan2(btScalar x, btScalar y) { return atan2f(x, y); } SIMD_FORCE_INLINE btScalar btExp(btScalar x) { return expf(x); } SIMD_FORCE_INLINE btScalar btLog(btScalar x) { return logf(x); } SIMD_FORCE_INLINE btScalar btPow(btScalar x, btScalar y) { return powf(x, y); } SIMD_FORCE_INLINE btScalar btFmod(btScalar x, btScalar y) { return fmodf(x, y); } #endif//BT_USE_DOUBLE_PRECISION #define SIMD_PI btScalar(3.1415926535897932384626433832795029) #define SIMD_2_PI (btScalar(2.0) * SIMD_PI) #define SIMD_HALF_PI (SIMD_PI * btScalar(0.5)) #define SIMD_RADS_PER_DEG (SIMD_2_PI / btScalar(360.0)) #define SIMD_DEGS_PER_RAD (btScalar(360.0) / SIMD_2_PI) #define SIMDSQRT12 btScalar(0.7071067811865475244008443621048490) #define btRecipSqrt(x) ((btScalar)(btScalar(1.0) / btSqrt(btScalar(x)))) /* reciprocal square root */ #define btRecip(x) (btScalar(1.0) / btScalar(x)) #ifdef BT_USE_DOUBLE_PRECISION #define SIMD_EPSILON DBL_EPSILON #define SIMD_INFINITY DBL_MAX #define BT_ONE 1.0 #define BT_ZERO 0.0 #define BT_TWO 2.0 #define BT_HALF 0.5 #else #define SIMD_EPSILON FLT_EPSILON #define SIMD_INFINITY FLT_MAX #define BT_ONE 1.0f #define BT_ZERO 0.0f #define BT_TWO 2.0f #define BT_HALF 0.5f #endif // clang-format on SIMD_FORCE_INLINE btScalar btAtan2Fast(btScalar y, btScalar x) { btScalar coeff_1 = SIMD_PI / 4.0f; btScalar coeff_2 = 3.0f * coeff_1; btScalar abs_y = btFabs(y); btScalar angle; if (x >= 0.0f) { btScalar r = (x - abs_y) / (x + abs_y); angle = coeff_1 - coeff_1 * r; } else { btScalar r = (x + abs_y) / (abs_y - x); angle = coeff_2 - coeff_1 * r; } return (y < 0.0f) ? -angle : angle; } SIMD_FORCE_INLINE bool btFuzzyZero(btScalar x) { return btFabs(x) < SIMD_EPSILON; } SIMD_FORCE_INLINE bool btEqual(btScalar a, btScalar eps) { return (((a) <= eps) && !((a) < -eps)); } SIMD_FORCE_INLINE bool btGreaterEqual(btScalar a, btScalar eps) { return (!((a) <= eps)); } SIMD_FORCE_INLINE int btIsNegative(btScalar x) { return x < btScalar(0.0) ? 1 : 0; } SIMD_FORCE_INLINE btScalar btRadians(btScalar x) { return x * SIMD_RADS_PER_DEG; } SIMD_FORCE_INLINE btScalar btDegrees(btScalar x) { return x * SIMD_DEGS_PER_RAD; } #define BT_DECLARE_HANDLE(name) \ typedef struct name##__ \ { \ int unused; \ } * name #ifndef btFsel SIMD_FORCE_INLINE btScalar btFsel(btScalar a, btScalar b, btScalar c) { return a >= 0 ? b : c; } #endif #define btFsels(a, b, c) (btScalar) btFsel(a, b, c) SIMD_FORCE_INLINE bool btMachineIsLittleEndian() { long int i = 1; const char *p = (const char *)&i; if (p[0] == 1) // Lowest address contains the least significant byte return true; else return false; } ///btSelect avoids branches, which makes performance much better for consoles like Playstation 3 and XBox 360 ///Thanks Phil Knight. See also http://www.cellperformance.com/articles/2006/04/more_techniques_for_eliminatin_1.html SIMD_FORCE_INLINE unsigned btSelect(unsigned condition, unsigned valueIfConditionNonZero, unsigned valueIfConditionZero) { // Set testNz to 0xFFFFFFFF if condition is nonzero, 0x00000000 if condition is zero // Rely on positive value or'ed with its negative having sign bit on // and zero value or'ed with its negative (which is still zero) having sign bit off // Use arithmetic shift right, shifting the sign bit through all 32 bits unsigned testNz = (unsigned)(((int)condition | -(int)condition) >> 31); unsigned testEqz = ~testNz; return ((valueIfConditionNonZero & testNz) | (valueIfConditionZero & testEqz)); } SIMD_FORCE_INLINE int btSelect(unsigned condition, int valueIfConditionNonZero, int valueIfConditionZero) { unsigned testNz = (unsigned)(((int)condition | -(int)condition) >> 31); unsigned testEqz = ~testNz; return static_cast((valueIfConditionNonZero & testNz) | (valueIfConditionZero & testEqz)); } SIMD_FORCE_INLINE float btSelect(unsigned condition, float valueIfConditionNonZero, float valueIfConditionZero) { #ifdef BT_HAVE_NATIVE_FSEL return (float)btFsel((btScalar)condition - btScalar(1.0f), valueIfConditionNonZero, valueIfConditionZero); #else return (condition != 0) ? valueIfConditionNonZero : valueIfConditionZero; #endif } template SIMD_FORCE_INLINE void btSwap(T &a, T &b) { T tmp = a; a = b; b = tmp; } //PCK: endian swapping functions SIMD_FORCE_INLINE unsigned btSwapEndian(unsigned val) { return (((val & 0xff000000) >> 24) | ((val & 0x00ff0000) >> 8) | ((val & 0x0000ff00) << 8) | ((val & 0x000000ff) << 24)); } SIMD_FORCE_INLINE unsigned short btSwapEndian(unsigned short val) { return static_cast(((val & 0xff00) >> 8) | ((val & 0x00ff) << 8)); } SIMD_FORCE_INLINE unsigned btSwapEndian(int val) { return btSwapEndian((unsigned)val); } SIMD_FORCE_INLINE unsigned short btSwapEndian(short val) { return btSwapEndian((unsigned short)val); } ///btSwapFloat uses using char pointers to swap the endianness ////btSwapFloat/btSwapDouble will NOT return a float, because the machine might 'correct' invalid floating point values ///Not all values of sign/exponent/mantissa are valid floating point numbers according to IEEE 754. ///When a floating point unit is faced with an invalid value, it may actually change the value, or worse, throw an exception. ///In most systems, running user mode code, you wouldn't get an exception, but instead the hardware/os/runtime will 'fix' the number for you. ///so instead of returning a float/double, we return integer/long long integer SIMD_FORCE_INLINE unsigned int btSwapEndianFloat(float d) { unsigned int a = 0; unsigned char *dst = (unsigned char *)&a; unsigned char *src = (unsigned char *)&d; dst[0] = src[3]; dst[1] = src[2]; dst[2] = src[1]; dst[3] = src[0]; return a; } // unswap using char pointers SIMD_FORCE_INLINE float btUnswapEndianFloat(unsigned int a) { float d = 0.0f; unsigned char *src = (unsigned char *)&a; unsigned char *dst = (unsigned char *)&d; dst[0] = src[3]; dst[1] = src[2]; dst[2] = src[1]; dst[3] = src[0]; return d; } // swap using char pointers SIMD_FORCE_INLINE void btSwapEndianDouble(double d, unsigned char *dst) { unsigned char *src = (unsigned char *)&d; dst[0] = src[7]; dst[1] = src[6]; dst[2] = src[5]; dst[3] = src[4]; dst[4] = src[3]; dst[5] = src[2]; dst[6] = src[1]; dst[7] = src[0]; } // unswap using char pointers SIMD_FORCE_INLINE double btUnswapEndianDouble(const unsigned char *src) { double d = 0.0; unsigned char *dst = (unsigned char *)&d; dst[0] = src[7]; dst[1] = src[6]; dst[2] = src[5]; dst[3] = src[4]; dst[4] = src[3]; dst[5] = src[2]; dst[6] = src[1]; dst[7] = src[0]; return d; } template SIMD_FORCE_INLINE void btSetZero(T *a, int n) { T *acurr = a; size_t ncurr = n; while (ncurr > 0) { *(acurr++) = 0; --ncurr; } } SIMD_FORCE_INLINE btScalar btLargeDot(const btScalar *a, const btScalar *b, int n) { btScalar p0, q0, m0, p1, q1, m1, sum; sum = 0; n -= 2; while (n >= 0) { p0 = a[0]; q0 = b[0]; m0 = p0 * q0; p1 = a[1]; q1 = b[1]; m1 = p1 * q1; sum += m0; sum += m1; a += 2; b += 2; n -= 2; } n += 2; while (n > 0) { sum += (*a) * (*b); a++; b++; n--; } return sum; } // returns normalized value in range [-SIMD_PI, SIMD_PI] SIMD_FORCE_INLINE btScalar btNormalizeAngle(btScalar angleInRadians) { angleInRadians = btFmod(angleInRadians, SIMD_2_PI); if (angleInRadians < -SIMD_PI) { return angleInRadians + SIMD_2_PI; } else if (angleInRadians > SIMD_PI) { return angleInRadians - SIMD_2_PI; } else { return angleInRadians; } } ///rudimentary class to provide type info struct btTypedObject { btTypedObject(int objectType) : m_objectType(objectType) { } int m_objectType; inline int getObjectType() const { return m_objectType; } }; ///align a pointer to the provided alignment, upwards template T *btAlignPointer(T *unalignedPtr, size_t alignment) { struct btConvertPointerSizeT { union { T *ptr; size_t integer; }; }; btConvertPointerSizeT converter; const size_t bit_mask = ~(alignment - 1); converter.ptr = unalignedPtr; converter.integer += alignment - 1; converter.integer &= bit_mask; return converter.ptr; } #endif //BT_SCALAR_H ================================================ FILE: libraries/bullet/LinearMath/btSerializer.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_SERIALIZER_H #define BT_SERIALIZER_H #include "btScalar.h" // has definitions like SIMD_FORCE_INLINE #include "btHashMap.h" #if !defined(__CELLOS_LV2__) && !defined(__MWERKS__) #include #endif #include extern char sBulletDNAstr[]; extern int sBulletDNAlen; extern char sBulletDNAstr64[]; extern int sBulletDNAlen64; SIMD_FORCE_INLINE int btStrLen(const char* str) { if (!str) return (0); int len = 0; while (*str != 0) { str++; len++; } return len; } class btChunk { public: int m_chunkCode; int m_length; void* m_oldPtr; int m_dna_nr; int m_number; }; enum btSerializationFlags { BT_SERIALIZE_NO_BVH = 1, BT_SERIALIZE_NO_TRIANGLEINFOMAP = 2, BT_SERIALIZE_NO_DUPLICATE_ASSERT = 4, BT_SERIALIZE_CONTACT_MANIFOLDS = 8, }; class btSerializer { public: virtual ~btSerializer() {} virtual const unsigned char* getBufferPointer() const = 0; virtual int getCurrentBufferSize() const = 0; virtual btChunk* allocate(size_t size, int numElements) = 0; virtual void finalizeChunk(btChunk* chunk, const char* structType, int chunkCode, void* oldPtr) = 0; virtual void* findPointer(void* oldPtr) = 0; virtual void* getUniquePointer(void* oldPtr) = 0; virtual void startSerialization() = 0; virtual void finishSerialization() = 0; virtual const char* findNameForPointer(const void* ptr) const = 0; virtual void registerNameForPointer(const void* ptr, const char* name) = 0; virtual void serializeName(const char* ptr) = 0; virtual int getSerializationFlags() const = 0; virtual void setSerializationFlags(int flags) = 0; virtual int getNumChunks() const = 0; virtual const btChunk* getChunk(int chunkIndex) const = 0; }; #define BT_HEADER_LENGTH 12 #if defined(__sgi) || defined(__sparc) || defined(__sparc__) || defined(__PPC__) || defined(__ppc__) || defined(__BIG_ENDIAN__) #define BT_MAKE_ID(a, b, c, d) ((int)(a) << 24 | (int)(b) << 16 | (c) << 8 | (d)) #else #define BT_MAKE_ID(a, b, c, d) ((int)(d) << 24 | (int)(c) << 16 | (b) << 8 | (a)) #endif #define BT_MULTIBODY_CODE BT_MAKE_ID('M', 'B', 'D', 'Y') #define BT_MB_LINKCOLLIDER_CODE BT_MAKE_ID('M', 'B', 'L', 'C') #define BT_SOFTBODY_CODE BT_MAKE_ID('S', 'B', 'D', 'Y') #define BT_COLLISIONOBJECT_CODE BT_MAKE_ID('C', 'O', 'B', 'J') #define BT_RIGIDBODY_CODE BT_MAKE_ID('R', 'B', 'D', 'Y') #define BT_CONSTRAINT_CODE BT_MAKE_ID('C', 'O', 'N', 'S') #define BT_BOXSHAPE_CODE BT_MAKE_ID('B', 'O', 'X', 'S') #define BT_QUANTIZED_BVH_CODE BT_MAKE_ID('Q', 'B', 'V', 'H') #define BT_TRIANLGE_INFO_MAP BT_MAKE_ID('T', 'M', 'A', 'P') #define BT_SHAPE_CODE BT_MAKE_ID('S', 'H', 'A', 'P') #define BT_ARRAY_CODE BT_MAKE_ID('A', 'R', 'A', 'Y') #define BT_SBMATERIAL_CODE BT_MAKE_ID('S', 'B', 'M', 'T') #define BT_SBNODE_CODE BT_MAKE_ID('S', 'B', 'N', 'D') #define BT_DYNAMICSWORLD_CODE BT_MAKE_ID('D', 'W', 'L', 'D') #define BT_CONTACTMANIFOLD_CODE BT_MAKE_ID('C', 'O', 'N', 'T') #define BT_DNA_CODE BT_MAKE_ID('D', 'N', 'A', '1') struct btPointerUid { union { void* m_ptr; int m_uniqueIds[2]; }; }; struct btBulletSerializedArrays { btBulletSerializedArrays() { } btAlignedObjectArray m_bvhsDouble; btAlignedObjectArray m_bvhsFloat; btAlignedObjectArray m_colShapeData; btAlignedObjectArray m_dynamicWorldInfoDataDouble; btAlignedObjectArray m_dynamicWorldInfoDataFloat; btAlignedObjectArray m_rigidBodyDataDouble; btAlignedObjectArray m_rigidBodyDataFloat; btAlignedObjectArray m_collisionObjectDataDouble; btAlignedObjectArray m_collisionObjectDataFloat; btAlignedObjectArray m_constraintDataFloat; btAlignedObjectArray m_constraintDataDouble; btAlignedObjectArray m_constraintData; //for backwards compatibility btAlignedObjectArray m_softBodyFloatData; btAlignedObjectArray m_softBodyDoubleData; }; ///The btDefaultSerializer is the main Bullet serialization class. ///The constructor takes an optional argument for backwards compatibility, it is recommended to leave this empty/zero. class btDefaultSerializer : public btSerializer { protected: btAlignedObjectArray mTypes; btAlignedObjectArray mStructs; btAlignedObjectArray mTlens; btHashMap mStructReverse; btHashMap mTypeLookup; btHashMap m_chunkP; btHashMap m_nameMap; btHashMap m_uniquePointers; int m_uniqueIdGenerator; int m_totalSize; unsigned char* m_buffer; bool m_ownsBuffer; int m_currentSize; void* m_dna; int m_dnaLength; int m_serializationFlags; btAlignedObjectArray m_chunkPtrs; protected: virtual void* findPointer(void* oldPtr) { void** ptr = m_chunkP.find(oldPtr); if (ptr && *ptr) return *ptr; return 0; } virtual void writeDNA() { btChunk* dnaChunk = allocate(m_dnaLength, 1); memcpy(dnaChunk->m_oldPtr, m_dna, m_dnaLength); finalizeChunk(dnaChunk, "DNA1", BT_DNA_CODE, m_dna); } int getReverseType(const char* type) const { btHashString key(type); const int* valuePtr = mTypeLookup.find(key); if (valuePtr) return *valuePtr; return -1; } void initDNA(const char* bdnaOrg, int dnalen) { ///was already initialized if (m_dna) return; int littleEndian = 1; littleEndian = ((char*)&littleEndian)[0]; m_dna = btAlignedAlloc(dnalen, 16); memcpy(m_dna, bdnaOrg, dnalen); m_dnaLength = dnalen; int* intPtr = 0; short* shtPtr = 0; char* cp = 0; int dataLen = 0; intPtr = (int*)m_dna; /* SDNA (4 bytes) (magic number) NAME (4 bytes) (4 bytes) amount of names (int) */ if (strncmp((const char*)m_dna, "SDNA", 4) == 0) { // skip ++ NAME intPtr++; intPtr++; } // Parse names if (!littleEndian) *intPtr = btSwapEndian(*intPtr); dataLen = *intPtr; intPtr++; cp = (char*)intPtr; int i; for (i = 0; i < dataLen; i++) { while (*cp) cp++; cp++; } cp = btAlignPointer(cp, 4); /* TYPE (4 bytes) amount of types (int) */ intPtr = (int*)cp; btAssert(strncmp(cp, "TYPE", 4) == 0); intPtr++; if (!littleEndian) *intPtr = btSwapEndian(*intPtr); dataLen = *intPtr; intPtr++; cp = (char*)intPtr; for (i = 0; i < dataLen; i++) { mTypes.push_back(cp); while (*cp) cp++; cp++; } cp = btAlignPointer(cp, 4); /* TLEN (4 bytes) (short) the lengths of types */ // Parse type lens intPtr = (int*)cp; btAssert(strncmp(cp, "TLEN", 4) == 0); intPtr++; dataLen = (int)mTypes.size(); shtPtr = (short*)intPtr; for (i = 0; i < dataLen; i++, shtPtr++) { if (!littleEndian) shtPtr[0] = btSwapEndian(shtPtr[0]); mTlens.push_back(shtPtr[0]); } if (dataLen & 1) shtPtr++; /* STRC (4 bytes) amount of structs (int) */ intPtr = (int*)shtPtr; cp = (char*)intPtr; btAssert(strncmp(cp, "STRC", 4) == 0); intPtr++; if (!littleEndian) *intPtr = btSwapEndian(*intPtr); dataLen = *intPtr; intPtr++; shtPtr = (short*)intPtr; for (i = 0; i < dataLen; i++) { mStructs.push_back(shtPtr); if (!littleEndian) { shtPtr[0] = btSwapEndian(shtPtr[0]); shtPtr[1] = btSwapEndian(shtPtr[1]); int len = shtPtr[1]; shtPtr += 2; for (int a = 0; a < len; a++, shtPtr += 2) { shtPtr[0] = btSwapEndian(shtPtr[0]); shtPtr[1] = btSwapEndian(shtPtr[1]); } } else { shtPtr += (2 * shtPtr[1]) + 2; } } // build reverse lookups for (i = 0; i < (int)mStructs.size(); i++) { short* strc = mStructs.at(i); mStructReverse.insert(strc[0], i); mTypeLookup.insert(btHashString(mTypes[strc[0]]), i); } } public: btHashMap m_skipPointers; btDefaultSerializer(int totalSize = 0, unsigned char* buffer = 0) : m_uniqueIdGenerator(0), m_totalSize(totalSize), m_currentSize(0), m_dna(0), m_dnaLength(0), m_serializationFlags(0) { if (buffer == 0) { m_buffer = m_totalSize ? (unsigned char*)btAlignedAlloc(totalSize, 16) : 0; m_ownsBuffer = true; } else { m_buffer = buffer; m_ownsBuffer = false; } const bool VOID_IS_8 = ((sizeof(void*) == 8)); #ifdef BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES if (VOID_IS_8) { #if _WIN64 initDNA((const char*)sBulletDNAstr64, sBulletDNAlen64); #else btAssert(0); #endif } else { #ifndef _WIN64 initDNA((const char*)sBulletDNAstr, sBulletDNAlen); #else btAssert(0); #endif } #else //BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES if (VOID_IS_8) { initDNA((const char*)sBulletDNAstr64, sBulletDNAlen64); } else { initDNA((const char*)sBulletDNAstr, sBulletDNAlen); } #endif //BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES } virtual ~btDefaultSerializer() { if (m_buffer && m_ownsBuffer) btAlignedFree(m_buffer); if (m_dna) btAlignedFree(m_dna); } static int getMemoryDnaSizeInBytes() { const bool VOID_IS_8 = ((sizeof(void*) == 8)); if (VOID_IS_8) { return sBulletDNAlen64; } return sBulletDNAlen; } static const char* getMemoryDna() { const bool VOID_IS_8 = ((sizeof(void*) == 8)); if (VOID_IS_8) { return (const char*)sBulletDNAstr64; } return (const char*)sBulletDNAstr; } void insertHeader() { writeHeader(m_buffer); m_currentSize += BT_HEADER_LENGTH; } void writeHeader(unsigned char* buffer) const { #ifdef BT_USE_DOUBLE_PRECISION memcpy(buffer, "BULLETd", 7); #else memcpy(buffer, "BULLETf", 7); #endif //BT_USE_DOUBLE_PRECISION int littleEndian = 1; littleEndian = ((char*)&littleEndian)[0]; if (sizeof(void*) == 8) { buffer[7] = '-'; } else { buffer[7] = '_'; } if (littleEndian) { buffer[8] = 'v'; } else { buffer[8] = 'V'; } buffer[9] = '3'; buffer[10] = '1'; buffer[11] = '7'; } virtual void startSerialization() { m_uniqueIdGenerator = 1; if (m_totalSize) { unsigned char* buffer = internalAlloc(BT_HEADER_LENGTH); writeHeader(buffer); } } virtual void finishSerialization() { writeDNA(); //if we didn't pre-allocate a buffer, we need to create a contiguous buffer now int mysize = 0; if (!m_totalSize) { if (m_buffer) btAlignedFree(m_buffer); m_currentSize += BT_HEADER_LENGTH; m_buffer = (unsigned char*)btAlignedAlloc(m_currentSize, 16); unsigned char* currentPtr = m_buffer; writeHeader(m_buffer); currentPtr += BT_HEADER_LENGTH; mysize += BT_HEADER_LENGTH; for (int i = 0; i < m_chunkPtrs.size(); i++) { int curLength = sizeof(btChunk) + m_chunkPtrs[i]->m_length; memcpy(currentPtr, m_chunkPtrs[i], curLength); btAlignedFree(m_chunkPtrs[i]); currentPtr += curLength; mysize += curLength; } } mTypes.clear(); mStructs.clear(); mTlens.clear(); mStructReverse.clear(); mTypeLookup.clear(); m_skipPointers.clear(); m_chunkP.clear(); m_nameMap.clear(); m_uniquePointers.clear(); m_chunkPtrs.clear(); } virtual void* getUniquePointer(void* oldPtr) { btAssert(m_uniqueIdGenerator >= 0); if (!oldPtr) return 0; btPointerUid* uptr = (btPointerUid*)m_uniquePointers.find(oldPtr); if (uptr) { return uptr->m_ptr; } void** ptr2 = m_skipPointers[oldPtr]; if (ptr2) { return 0; } m_uniqueIdGenerator++; btPointerUid uid; uid.m_uniqueIds[0] = m_uniqueIdGenerator; uid.m_uniqueIds[1] = m_uniqueIdGenerator; m_uniquePointers.insert(oldPtr, uid); return uid.m_ptr; } virtual const unsigned char* getBufferPointer() const { return m_buffer; } virtual int getCurrentBufferSize() const { return m_currentSize; } virtual void finalizeChunk(btChunk* chunk, const char* structType, int chunkCode, void* oldPtr) { if (!(m_serializationFlags & BT_SERIALIZE_NO_DUPLICATE_ASSERT)) { btAssert(!findPointer(oldPtr)); } chunk->m_dna_nr = getReverseType(structType); chunk->m_chunkCode = chunkCode; void* uniquePtr = getUniquePointer(oldPtr); m_chunkP.insert(oldPtr, uniquePtr); //chunk->m_oldPtr); chunk->m_oldPtr = uniquePtr; //oldPtr; } virtual unsigned char* internalAlloc(size_t size) { unsigned char* ptr = 0; if (m_totalSize) { ptr = m_buffer + m_currentSize; m_currentSize += int(size); btAssert(m_currentSize < m_totalSize); } else { ptr = (unsigned char*)btAlignedAlloc(size, 16); m_currentSize += int(size); } return ptr; } virtual btChunk* allocate(size_t size, int numElements) { unsigned char* ptr = internalAlloc(int(size) * numElements + sizeof(btChunk)); unsigned char* data = ptr + sizeof(btChunk); btChunk* chunk = (btChunk*)ptr; chunk->m_chunkCode = 0; chunk->m_oldPtr = data; chunk->m_length = int(size) * numElements; chunk->m_number = numElements; m_chunkPtrs.push_back(chunk); return chunk; } virtual const char* findNameForPointer(const void* ptr) const { const char* const* namePtr = m_nameMap.find(ptr); if (namePtr && *namePtr) return *namePtr; return 0; } virtual void registerNameForPointer(const void* ptr, const char* name) { m_nameMap.insert(ptr, name); } virtual void serializeName(const char* name) { if (name) { //don't serialize name twice if (findPointer((void*)name)) return; int len = btStrLen(name); if (len) { int newLen = len + 1; int padding = ((newLen + 3) & ~3) - newLen; newLen += padding; //serialize name string now btChunk* chunk = allocate(sizeof(char), newLen); char* destinationName = (char*)chunk->m_oldPtr; for (int i = 0; i < len; i++) { destinationName[i] = name[i]; } destinationName[len] = 0; finalizeChunk(chunk, "char", BT_ARRAY_CODE, (void*)name); } } } virtual int getSerializationFlags() const { return m_serializationFlags; } virtual void setSerializationFlags(int flags) { m_serializationFlags = flags; } int getNumChunks() const { return m_chunkPtrs.size(); } const btChunk* getChunk(int chunkIndex) const { return m_chunkPtrs[chunkIndex]; } }; ///In general it is best to use btDefaultSerializer, ///in particular when writing the data to disk or sending it over the network. ///The btInMemorySerializer is experimental and only suitable in a few cases. ///The btInMemorySerializer takes a shortcut and can be useful to create a deep-copy ///of objects. There will be a demo on how to use the btInMemorySerializer. #ifdef ENABLE_INMEMORY_SERIALIZER struct btInMemorySerializer : public btDefaultSerializer { btHashMap m_uid2ChunkPtr; btHashMap m_orgPtr2UniqueDataPtr; btHashMap m_names2Ptr; btBulletSerializedArrays m_arrays; btInMemorySerializer(int totalSize = 0, unsigned char* buffer = 0) : btDefaultSerializer(totalSize, buffer) { } virtual void startSerialization() { m_uid2ChunkPtr.clear(); //todo: m_arrays.clear(); btDefaultSerializer::startSerialization(); } btChunk* findChunkFromUniquePointer(void* uniquePointer) { btChunk** chkPtr = m_uid2ChunkPtr[uniquePointer]; if (chkPtr) { return *chkPtr; } return 0; } virtual void registerNameForPointer(const void* ptr, const char* name) { btDefaultSerializer::registerNameForPointer(ptr, name); m_names2Ptr.insert(name, ptr); } virtual void finishSerialization() { } virtual void* getUniquePointer(void* oldPtr) { if (oldPtr == 0) return 0; // void* uniquePtr = getUniquePointer(oldPtr); btChunk* chunk = findChunkFromUniquePointer(oldPtr); if (chunk) { return chunk->m_oldPtr; } else { const char* n = (const char*)oldPtr; const void** ptr = m_names2Ptr[n]; if (ptr) { return oldPtr; } else { void** ptr2 = m_skipPointers[oldPtr]; if (ptr2) { return 0; } else { //If this assert hit, serialization happened in the wrong order // 'getUniquePointer' btAssert(0); } } return 0; } return oldPtr; } virtual void finalizeChunk(btChunk* chunk, const char* structType, int chunkCode, void* oldPtr) { if (!(m_serializationFlags & BT_SERIALIZE_NO_DUPLICATE_ASSERT)) { btAssert(!findPointer(oldPtr)); } chunk->m_dna_nr = getReverseType(structType); chunk->m_chunkCode = chunkCode; //void* uniquePtr = getUniquePointer(oldPtr); m_chunkP.insert(oldPtr, oldPtr); //chunk->m_oldPtr); // chunk->m_oldPtr = uniquePtr;//oldPtr; void* uid = findPointer(oldPtr); m_uid2ChunkPtr.insert(uid, chunk); switch (chunk->m_chunkCode) { case BT_SOFTBODY_CODE: { #ifdef BT_USE_DOUBLE_PRECISION m_arrays.m_softBodyDoubleData.push_back((btSoftBodyDoubleData*)chunk->m_oldPtr); #else m_arrays.m_softBodyFloatData.push_back((btSoftBodyFloatData*)chunk->m_oldPtr); #endif break; } case BT_COLLISIONOBJECT_CODE: { #ifdef BT_USE_DOUBLE_PRECISION m_arrays.m_collisionObjectDataDouble.push_back((btCollisionObjectDoubleData*)chunk->m_oldPtr); #else //BT_USE_DOUBLE_PRECISION m_arrays.m_collisionObjectDataFloat.push_back((btCollisionObjectFloatData*)chunk->m_oldPtr); #endif //BT_USE_DOUBLE_PRECISION break; } case BT_RIGIDBODY_CODE: { #ifdef BT_USE_DOUBLE_PRECISION m_arrays.m_rigidBodyDataDouble.push_back((btRigidBodyDoubleData*)chunk->m_oldPtr); #else m_arrays.m_rigidBodyDataFloat.push_back((btRigidBodyFloatData*)chunk->m_oldPtr); #endif //BT_USE_DOUBLE_PRECISION break; }; case BT_CONSTRAINT_CODE: { #ifdef BT_USE_DOUBLE_PRECISION m_arrays.m_constraintDataDouble.push_back((btTypedConstraintDoubleData*)chunk->m_oldPtr); #else m_arrays.m_constraintDataFloat.push_back((btTypedConstraintFloatData*)chunk->m_oldPtr); #endif break; } case BT_QUANTIZED_BVH_CODE: { #ifdef BT_USE_DOUBLE_PRECISION m_arrays.m_bvhsDouble.push_back((btQuantizedBvhDoubleData*)chunk->m_oldPtr); #else m_arrays.m_bvhsFloat.push_back((btQuantizedBvhFloatData*)chunk->m_oldPtr); #endif break; } case BT_SHAPE_CODE: { btCollisionShapeData* shapeData = (btCollisionShapeData*)chunk->m_oldPtr; m_arrays.m_colShapeData.push_back(shapeData); break; } case BT_TRIANLGE_INFO_MAP: case BT_ARRAY_CODE: case BT_SBMATERIAL_CODE: case BT_SBNODE_CODE: case BT_DYNAMICSWORLD_CODE: case BT_DNA_CODE: { break; } default: { } }; } int getNumChunks() const { return m_uid2ChunkPtr.size(); } const btChunk* getChunk(int chunkIndex) const { return *m_uid2ChunkPtr.getAtIndex(chunkIndex); } }; #endif //ENABLE_INMEMORY_SERIALIZER #endif //BT_SERIALIZER_H ================================================ FILE: libraries/bullet/LinearMath/btSpatialAlgebra.h ================================================ /* Copyright (c) 2003-2015 Erwin Coumans, Jakub Stepien This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ ///These spatial algebra classes are used for btMultiBody, ///see BulletDynamics/Featherstone #ifndef BT_SPATIAL_ALGEBRA_H #define BT_SPATIAL_ALGEBRA_H #include "btMatrix3x3.h" struct btSpatialForceVector { btVector3 m_topVec, m_bottomVec; // btSpatialForceVector() { setZero(); } btSpatialForceVector(const btVector3 &angular, const btVector3 &linear) : m_topVec(linear), m_bottomVec(angular) {} btSpatialForceVector(const btScalar &ax, const btScalar &ay, const btScalar &az, const btScalar &lx, const btScalar &ly, const btScalar &lz) { setValue(ax, ay, az, lx, ly, lz); } // void setVector(const btVector3 &angular, const btVector3 &linear) { m_topVec = linear; m_bottomVec = angular; } void setValue(const btScalar &ax, const btScalar &ay, const btScalar &az, const btScalar &lx, const btScalar &ly, const btScalar &lz) { m_bottomVec.setValue(ax, ay, az); m_topVec.setValue(lx, ly, lz); } // void addVector(const btVector3 &angular, const btVector3 &linear) { m_topVec += linear; m_bottomVec += angular; } void addValue(const btScalar &ax, const btScalar &ay, const btScalar &az, const btScalar &lx, const btScalar &ly, const btScalar &lz) { m_bottomVec[0] += ax; m_bottomVec[1] += ay; m_bottomVec[2] += az; m_topVec[0] += lx; m_topVec[1] += ly; m_topVec[2] += lz; } // const btVector3 &getLinear() const { return m_topVec; } const btVector3 &getAngular() const { return m_bottomVec; } // void setLinear(const btVector3 &linear) { m_topVec = linear; } void setAngular(const btVector3 &angular) { m_bottomVec = angular; } // void addAngular(const btVector3 &angular) { m_bottomVec += angular; } void addLinear(const btVector3 &linear) { m_topVec += linear; } // void setZero() { m_topVec.setZero(); m_bottomVec.setZero(); } // btSpatialForceVector &operator+=(const btSpatialForceVector &vec) { m_topVec += vec.m_topVec; m_bottomVec += vec.m_bottomVec; return *this; } btSpatialForceVector &operator-=(const btSpatialForceVector &vec) { m_topVec -= vec.m_topVec; m_bottomVec -= vec.m_bottomVec; return *this; } btSpatialForceVector operator-(const btSpatialForceVector &vec) const { return btSpatialForceVector(m_bottomVec - vec.m_bottomVec, m_topVec - vec.m_topVec); } btSpatialForceVector operator+(const btSpatialForceVector &vec) const { return btSpatialForceVector(m_bottomVec + vec.m_bottomVec, m_topVec + vec.m_topVec); } btSpatialForceVector operator-() const { return btSpatialForceVector(-m_bottomVec, -m_topVec); } btSpatialForceVector operator*(const btScalar &s) const { return btSpatialForceVector(s * m_bottomVec, s * m_topVec); } //btSpatialForceVector & operator = (const btSpatialForceVector &vec) { m_topVec = vec.m_topVec; m_bottomVec = vec.m_bottomVec; return *this; } }; struct btSpatialMotionVector { btVector3 m_topVec, m_bottomVec; // btSpatialMotionVector() { setZero(); } btSpatialMotionVector(const btVector3 &angular, const btVector3 &linear) : m_topVec(angular), m_bottomVec(linear) {} // void setVector(const btVector3 &angular, const btVector3 &linear) { m_topVec = angular; m_bottomVec = linear; } void setValue(const btScalar &ax, const btScalar &ay, const btScalar &az, const btScalar &lx, const btScalar &ly, const btScalar &lz) { m_topVec.setValue(ax, ay, az); m_bottomVec.setValue(lx, ly, lz); } // void addVector(const btVector3 &angular, const btVector3 &linear) { m_topVec += linear; m_bottomVec += angular; } void addValue(const btScalar &ax, const btScalar &ay, const btScalar &az, const btScalar &lx, const btScalar &ly, const btScalar &lz) { m_topVec[0] += ax; m_topVec[1] += ay; m_topVec[2] += az; m_bottomVec[0] += lx; m_bottomVec[1] += ly; m_bottomVec[2] += lz; } // const btVector3 &getAngular() const { return m_topVec; } const btVector3 &getLinear() const { return m_bottomVec; } // void setAngular(const btVector3 &angular) { m_topVec = angular; } void setLinear(const btVector3 &linear) { m_bottomVec = linear; } // void addAngular(const btVector3 &angular) { m_topVec += angular; } void addLinear(const btVector3 &linear) { m_bottomVec += linear; } // void setZero() { m_topVec.setZero(); m_bottomVec.setZero(); } // btScalar dot(const btSpatialForceVector &b) const { return m_bottomVec.dot(b.m_topVec) + m_topVec.dot(b.m_bottomVec); } // template void cross(const SpatialVectorType &b, SpatialVectorType &out) const { out.m_topVec = m_topVec.cross(b.m_topVec); out.m_bottomVec = m_bottomVec.cross(b.m_topVec) + m_topVec.cross(b.m_bottomVec); } template SpatialVectorType cross(const SpatialVectorType &b) const { SpatialVectorType out; out.m_topVec = m_topVec.cross(b.m_topVec); out.m_bottomVec = m_bottomVec.cross(b.m_topVec) + m_topVec.cross(b.m_bottomVec); return out; } // btSpatialMotionVector &operator+=(const btSpatialMotionVector &vec) { m_topVec += vec.m_topVec; m_bottomVec += vec.m_bottomVec; return *this; } btSpatialMotionVector &operator-=(const btSpatialMotionVector &vec) { m_topVec -= vec.m_topVec; m_bottomVec -= vec.m_bottomVec; return *this; } btSpatialMotionVector &operator*=(const btScalar &s) { m_topVec *= s; m_bottomVec *= s; return *this; } btSpatialMotionVector operator-(const btSpatialMotionVector &vec) const { return btSpatialMotionVector(m_topVec - vec.m_topVec, m_bottomVec - vec.m_bottomVec); } btSpatialMotionVector operator+(const btSpatialMotionVector &vec) const { return btSpatialMotionVector(m_topVec + vec.m_topVec, m_bottomVec + vec.m_bottomVec); } btSpatialMotionVector operator-() const { return btSpatialMotionVector(-m_topVec, -m_bottomVec); } btSpatialMotionVector operator*(const btScalar &s) const { return btSpatialMotionVector(s * m_topVec, s * m_bottomVec); } }; struct btSymmetricSpatialDyad { btMatrix3x3 m_topLeftMat, m_topRightMat, m_bottomLeftMat; // btSymmetricSpatialDyad() { setIdentity(); } btSymmetricSpatialDyad(const btMatrix3x3 &topLeftMat, const btMatrix3x3 &topRightMat, const btMatrix3x3 &bottomLeftMat) { setMatrix(topLeftMat, topRightMat, bottomLeftMat); } // void setMatrix(const btMatrix3x3 &topLeftMat, const btMatrix3x3 &topRightMat, const btMatrix3x3 &bottomLeftMat) { m_topLeftMat = topLeftMat; m_topRightMat = topRightMat; m_bottomLeftMat = bottomLeftMat; } // void addMatrix(const btMatrix3x3 &topLeftMat, const btMatrix3x3 &topRightMat, const btMatrix3x3 &bottomLeftMat) { m_topLeftMat += topLeftMat; m_topRightMat += topRightMat; m_bottomLeftMat += bottomLeftMat; } // void setIdentity() { m_topLeftMat.setIdentity(); m_topRightMat.setIdentity(); m_bottomLeftMat.setIdentity(); } // btSymmetricSpatialDyad &operator-=(const btSymmetricSpatialDyad &mat) { m_topLeftMat -= mat.m_topLeftMat; m_topRightMat -= mat.m_topRightMat; m_bottomLeftMat -= mat.m_bottomLeftMat; return *this; } // btSpatialForceVector operator*(const btSpatialMotionVector &vec) { return btSpatialForceVector(m_bottomLeftMat * vec.m_topVec + m_topLeftMat.transpose() * vec.m_bottomVec, m_topLeftMat * vec.m_topVec + m_topRightMat * vec.m_bottomVec); } }; struct btSpatialTransformationMatrix { btMatrix3x3 m_rotMat; //btMatrix3x3 m_trnCrossMat; btVector3 m_trnVec; // enum eOutputOperation { None = 0, Add = 1, Subtract = 2 }; // template void transform(const SpatialVectorType &inVec, SpatialVectorType &outVec, eOutputOperation outOp = None) { if (outOp == None) { outVec.m_topVec = m_rotMat * inVec.m_topVec; outVec.m_bottomVec = -m_trnVec.cross(outVec.m_topVec) + m_rotMat * inVec.m_bottomVec; } else if (outOp == Add) { outVec.m_topVec += m_rotMat * inVec.m_topVec; outVec.m_bottomVec += -m_trnVec.cross(outVec.m_topVec) + m_rotMat * inVec.m_bottomVec; } else if (outOp == Subtract) { outVec.m_topVec -= m_rotMat * inVec.m_topVec; outVec.m_bottomVec -= -m_trnVec.cross(outVec.m_topVec) + m_rotMat * inVec.m_bottomVec; } } template void transformRotationOnly(const SpatialVectorType &inVec, SpatialVectorType &outVec, eOutputOperation outOp = None) { if (outOp == None) { outVec.m_topVec = m_rotMat * inVec.m_topVec; outVec.m_bottomVec = m_rotMat * inVec.m_bottomVec; } else if (outOp == Add) { outVec.m_topVec += m_rotMat * inVec.m_topVec; outVec.m_bottomVec += m_rotMat * inVec.m_bottomVec; } else if (outOp == Subtract) { outVec.m_topVec -= m_rotMat * inVec.m_topVec; outVec.m_bottomVec -= m_rotMat * inVec.m_bottomVec; } } template void transformInverse(const SpatialVectorType &inVec, SpatialVectorType &outVec, eOutputOperation outOp = None) { if (outOp == None) { outVec.m_topVec = m_rotMat.transpose() * inVec.m_topVec; outVec.m_bottomVec = m_rotMat.transpose() * (inVec.m_bottomVec + m_trnVec.cross(inVec.m_topVec)); } else if (outOp == Add) { outVec.m_topVec += m_rotMat.transpose() * inVec.m_topVec; outVec.m_bottomVec += m_rotMat.transpose() * (inVec.m_bottomVec + m_trnVec.cross(inVec.m_topVec)); } else if (outOp == Subtract) { outVec.m_topVec -= m_rotMat.transpose() * inVec.m_topVec; outVec.m_bottomVec -= m_rotMat.transpose() * (inVec.m_bottomVec + m_trnVec.cross(inVec.m_topVec)); } } template void transformInverseRotationOnly(const SpatialVectorType &inVec, SpatialVectorType &outVec, eOutputOperation outOp = None) { if (outOp == None) { outVec.m_topVec = m_rotMat.transpose() * inVec.m_topVec; outVec.m_bottomVec = m_rotMat.transpose() * inVec.m_bottomVec; } else if (outOp == Add) { outVec.m_topVec += m_rotMat.transpose() * inVec.m_topVec; outVec.m_bottomVec += m_rotMat.transpose() * inVec.m_bottomVec; } else if (outOp == Subtract) { outVec.m_topVec -= m_rotMat.transpose() * inVec.m_topVec; outVec.m_bottomVec -= m_rotMat.transpose() * inVec.m_bottomVec; } } void transformInverse(const btSymmetricSpatialDyad &inMat, btSymmetricSpatialDyad &outMat, eOutputOperation outOp = None) { const btMatrix3x3 r_cross(0, -m_trnVec[2], m_trnVec[1], m_trnVec[2], 0, -m_trnVec[0], -m_trnVec[1], m_trnVec[0], 0); if (outOp == None) { outMat.m_topLeftMat = m_rotMat.transpose() * (inMat.m_topLeftMat - inMat.m_topRightMat * r_cross) * m_rotMat; outMat.m_topRightMat = m_rotMat.transpose() * inMat.m_topRightMat * m_rotMat; outMat.m_bottomLeftMat = m_rotMat.transpose() * (r_cross * (inMat.m_topLeftMat - inMat.m_topRightMat * r_cross) + inMat.m_bottomLeftMat - inMat.m_topLeftMat.transpose() * r_cross) * m_rotMat; } else if (outOp == Add) { outMat.m_topLeftMat += m_rotMat.transpose() * (inMat.m_topLeftMat - inMat.m_topRightMat * r_cross) * m_rotMat; outMat.m_topRightMat += m_rotMat.transpose() * inMat.m_topRightMat * m_rotMat; outMat.m_bottomLeftMat += m_rotMat.transpose() * (r_cross * (inMat.m_topLeftMat - inMat.m_topRightMat * r_cross) + inMat.m_bottomLeftMat - inMat.m_topLeftMat.transpose() * r_cross) * m_rotMat; } else if (outOp == Subtract) { outMat.m_topLeftMat -= m_rotMat.transpose() * (inMat.m_topLeftMat - inMat.m_topRightMat * r_cross) * m_rotMat; outMat.m_topRightMat -= m_rotMat.transpose() * inMat.m_topRightMat * m_rotMat; outMat.m_bottomLeftMat -= m_rotMat.transpose() * (r_cross * (inMat.m_topLeftMat - inMat.m_topRightMat * r_cross) + inMat.m_bottomLeftMat - inMat.m_topLeftMat.transpose() * r_cross) * m_rotMat; } } template SpatialVectorType operator*(const SpatialVectorType &vec) { SpatialVectorType out; transform(vec, out); return out; } }; template void symmetricSpatialOuterProduct(const SpatialVectorType &a, const SpatialVectorType &b, btSymmetricSpatialDyad &out) { //output op maybe? out.m_topLeftMat = outerProduct(a.m_topVec, b.m_bottomVec); out.m_topRightMat = outerProduct(a.m_topVec, b.m_topVec); out.m_topLeftMat = outerProduct(a.m_bottomVec, b.m_bottomVec); //maybe simple a*spatTranspose(a) would be nicer? } template btSymmetricSpatialDyad symmetricSpatialOuterProduct(const SpatialVectorType &a, const SpatialVectorType &b) { btSymmetricSpatialDyad out; out.m_topLeftMat = outerProduct(a.m_topVec, b.m_bottomVec); out.m_topRightMat = outerProduct(a.m_topVec, b.m_topVec); out.m_bottomLeftMat = outerProduct(a.m_bottomVec, b.m_bottomVec); return out; //maybe simple a*spatTranspose(a) would be nicer? } #endif //BT_SPATIAL_ALGEBRA_H ================================================ FILE: libraries/bullet/LinearMath/btStackAlloc.h ================================================ /* Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /* StackAlloc extracted from GJK-EPA collision solver by Nathanael Presson Nov.2006 */ #ifndef BT_STACK_ALLOC #define BT_STACK_ALLOC #include "btScalar.h" //for btAssert #include "btAlignedAllocator.h" ///The btBlock class is an internal structure for the btStackAlloc memory allocator. struct btBlock { btBlock* previous; unsigned char* address; }; ///The StackAlloc class provides some fast stack-based memory allocator (LIFO last-in first-out) class btStackAlloc { public: btStackAlloc(unsigned int size) { ctor(); create(size); } ~btStackAlloc() { destroy(); } inline void create(unsigned int size) { destroy(); data = (unsigned char*)btAlignedAlloc(size, 16); totalsize = size; } inline void destroy() { btAssert(usedsize == 0); //Raise(L"StackAlloc is still in use"); if (usedsize == 0) { if (!ischild && data) btAlignedFree(data); data = 0; usedsize = 0; } } int getAvailableMemory() const { return static_cast(totalsize - usedsize); } unsigned char* allocate(unsigned int size) { const unsigned int nus(usedsize + size); if (nus < totalsize) { usedsize = nus; return (data + (usedsize - size)); } btAssert(0); //&& (L"Not enough memory")); return (0); } SIMD_FORCE_INLINE btBlock* beginBlock() { btBlock* pb = (btBlock*)allocate(sizeof(btBlock)); pb->previous = current; pb->address = data + usedsize; current = pb; return (pb); } SIMD_FORCE_INLINE void endBlock(btBlock* block) { btAssert(block == current); //Raise(L"Unmatched blocks"); if (block == current) { current = block->previous; usedsize = (unsigned int)((block->address - data) - sizeof(btBlock)); } } private: void ctor() { data = 0; totalsize = 0; usedsize = 0; current = 0; ischild = false; } unsigned char* data; unsigned int totalsize; unsigned int usedsize; btBlock* current; bool ischild; }; #endif //BT_STACK_ALLOC ================================================ FILE: libraries/bullet/LinearMath/btThreads.h ================================================ /* Copyright (c) 2003-2014 Erwin Coumans http://bullet.googlecode.com This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_THREADS_H #define BT_THREADS_H #include "btScalar.h" // has definitions like SIMD_FORCE_INLINE #if defined(_MSC_VER) && _MSC_VER >= 1600 // give us a compile error if any signatures of overriden methods is changed #define BT_OVERRIDE override #endif #ifndef BT_OVERRIDE #define BT_OVERRIDE #endif // Don't set this to larger than 64, without modifying btThreadSupportPosix // and btThreadSupportWin32. They use UINT64 bit-masks. const unsigned int BT_MAX_THREAD_COUNT = 64; // only if BT_THREADSAFE is 1 // for internal use only bool btIsMainThread(); bool btThreadsAreRunning(); unsigned int btGetCurrentThreadIndex(); void btResetThreadIndexCounter(); // notify that all worker threads have been destroyed /// /// btSpinMutex -- lightweight spin-mutex implemented with atomic ops, never puts /// a thread to sleep because it is designed to be used with a task scheduler /// which has one thread per core and the threads don't sleep until they /// run out of tasks. Not good for general purpose use. /// class btSpinMutex { int mLock; public: btSpinMutex() { mLock = 0; } void lock(); void unlock(); bool tryLock(); }; // // NOTE: btMutex* is for internal Bullet use only // // If BT_THREADSAFE is undefined or 0, should optimize away to nothing. // This is good because for the single-threaded build of Bullet, any calls // to these functions will be optimized out. // // However, for users of the multi-threaded build of Bullet this is kind // of bad because if you call any of these functions from external code // (where BT_THREADSAFE is undefined) you will get unexpected race conditions. // SIMD_FORCE_INLINE void btMutexLock(btSpinMutex* mutex) { #if BT_THREADSAFE mutex->lock(); #else (void)mutex; #endif // #if BT_THREADSAFE } SIMD_FORCE_INLINE void btMutexUnlock(btSpinMutex* mutex) { #if BT_THREADSAFE mutex->unlock(); #else (void)mutex; #endif // #if BT_THREADSAFE } SIMD_FORCE_INLINE bool btMutexTryLock(btSpinMutex* mutex) { #if BT_THREADSAFE return mutex->tryLock(); #else (void)mutex; return true; #endif // #if BT_THREADSAFE } // // btIParallelForBody -- subclass this to express work that can be done in parallel // class btIParallelForBody { public: virtual ~btIParallelForBody() {} virtual void forLoop(int iBegin, int iEnd) const = 0; }; // // btIParallelSumBody -- subclass this to express work that can be done in parallel // and produces a sum over all loop elements // class btIParallelSumBody { public: virtual ~btIParallelSumBody() {} virtual btScalar sumLoop(int iBegin, int iEnd) const = 0; }; // // btITaskScheduler -- subclass this to implement a task scheduler that can dispatch work to // worker threads // class btITaskScheduler { public: btITaskScheduler(const char* name); virtual ~btITaskScheduler() {} const char* getName() const { return m_name; } virtual int getMaxNumThreads() const = 0; virtual int getNumThreads() const = 0; virtual void setNumThreads(int numThreads) = 0; virtual void parallelFor(int iBegin, int iEnd, int grainSize, const btIParallelForBody& body) = 0; virtual btScalar parallelSum(int iBegin, int iEnd, int grainSize, const btIParallelSumBody& body) = 0; virtual void sleepWorkerThreadsHint() {} // hint the task scheduler that we may not be using these threads for a little while // internal use only virtual void activate(); virtual void deactivate(); protected: const char* m_name; unsigned int m_savedThreadCounter; bool m_isActive; }; // set the task scheduler to use for all calls to btParallelFor() // NOTE: you must set this prior to using any of the multi-threaded "Mt" classes void btSetTaskScheduler(btITaskScheduler* ts); // get the current task scheduler btITaskScheduler* btGetTaskScheduler(); // get non-threaded task scheduler (always available) btITaskScheduler* btGetSequentialTaskScheduler(); // create a default task scheduler (Win32 or pthreads based) btITaskScheduler* btCreateDefaultTaskScheduler(); // get OpenMP task scheduler (if available, otherwise returns null) btITaskScheduler* btGetOpenMPTaskScheduler(); // get Intel TBB task scheduler (if available, otherwise returns null) btITaskScheduler* btGetTBBTaskScheduler(); // get PPL task scheduler (if available, otherwise returns null) btITaskScheduler* btGetPPLTaskScheduler(); // btParallelFor -- call this to dispatch work like a for-loop // (iterations may be done out of order, so no dependencies are allowed) void btParallelFor(int iBegin, int iEnd, int grainSize, const btIParallelForBody& body); // btParallelSum -- call this to dispatch work like a for-loop, returns the sum of all iterations // (iterations may be done out of order, so no dependencies are allowed) btScalar btParallelSum(int iBegin, int iEnd, int grainSize, const btIParallelSumBody& body); #endif ================================================ FILE: libraries/bullet/LinearMath/btTransform.h ================================================ /* Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_TRANSFORM_H #define BT_TRANSFORM_H #include "btMatrix3x3.h" #ifdef BT_USE_DOUBLE_PRECISION #define btTransformData btTransformDoubleData #else #define btTransformData btTransformFloatData #endif /**@brief The btTransform class supports rigid transforms with only translation and rotation and no scaling/shear. *It can be used in combination with btVector3, btQuaternion and btMatrix3x3 linear algebra classes. */ ATTRIBUTE_ALIGNED16(class) btTransform { ///Storage for the rotation btMatrix3x3 m_basis; ///Storage for the translation btVector3 m_origin; public: /**@brief No initialization constructor */ btTransform() {} /**@brief Constructor from btQuaternion (optional btVector3 ) * @param q Rotation from quaternion * @param c Translation from Vector (default 0,0,0) */ explicit SIMD_FORCE_INLINE btTransform(const btQuaternion& q, const btVector3& c = btVector3(btScalar(0), btScalar(0), btScalar(0))) : m_basis(q), m_origin(c) { } /**@brief Constructor from btMatrix3x3 (optional btVector3) * @param b Rotation from Matrix * @param c Translation from Vector default (0,0,0)*/ explicit SIMD_FORCE_INLINE btTransform(const btMatrix3x3& b, const btVector3& c = btVector3(btScalar(0), btScalar(0), btScalar(0))) : m_basis(b), m_origin(c) { } /**@brief Copy constructor */ SIMD_FORCE_INLINE btTransform(const btTransform& other) : m_basis(other.m_basis), m_origin(other.m_origin) { } /**@brief Assignment Operator */ SIMD_FORCE_INLINE btTransform& operator=(const btTransform& other) { m_basis = other.m_basis; m_origin = other.m_origin; return *this; } /**@brief Set the current transform as the value of the product of two transforms * @param t1 Transform 1 * @param t2 Transform 2 * This = Transform1 * Transform2 */ SIMD_FORCE_INLINE void mult(const btTransform& t1, const btTransform& t2) { m_basis = t1.m_basis * t2.m_basis; m_origin = t1(t2.m_origin); } /* void multInverseLeft(const btTransform& t1, const btTransform& t2) { btVector3 v = t2.m_origin - t1.m_origin; m_basis = btMultTransposeLeft(t1.m_basis, t2.m_basis); m_origin = v * t1.m_basis; } */ /**@brief Return the transform of the vector */ SIMD_FORCE_INLINE btVector3 operator()(const btVector3& x) const { return x.dot3(m_basis[0], m_basis[1], m_basis[2]) + m_origin; } /**@brief Return the transform of the vector */ SIMD_FORCE_INLINE btVector3 operator*(const btVector3& x) const { return (*this)(x); } /**@brief Return the transform of the btQuaternion */ SIMD_FORCE_INLINE btQuaternion operator*(const btQuaternion& q) const { return getRotation() * q; } /**@brief Return the basis matrix for the rotation */ SIMD_FORCE_INLINE btMatrix3x3& getBasis() { return m_basis; } /**@brief Return the basis matrix for the rotation */ SIMD_FORCE_INLINE const btMatrix3x3& getBasis() const { return m_basis; } /**@brief Return the origin vector translation */ SIMD_FORCE_INLINE btVector3& getOrigin() { return m_origin; } /**@brief Return the origin vector translation */ SIMD_FORCE_INLINE const btVector3& getOrigin() const { return m_origin; } /**@brief Return a quaternion representing the rotation */ btQuaternion getRotation() const { btQuaternion q; m_basis.getRotation(q); return q; } /**@brief Set from an array * @param m A pointer to a 16 element array (12 rotation(row major padded on the right by 1), and 3 translation */ void setFromOpenGLMatrix(const btScalar* m) { m_basis.setFromOpenGLSubMatrix(m); m_origin.setValue(m[12], m[13], m[14]); } /**@brief Fill an array representation * @param m A pointer to a 16 element array (12 rotation(row major padded on the right by 1), and 3 translation */ void getOpenGLMatrix(btScalar * m) const { m_basis.getOpenGLSubMatrix(m); m[12] = m_origin.x(); m[13] = m_origin.y(); m[14] = m_origin.z(); m[15] = btScalar(1.0); } /**@brief Set the translational element * @param origin The vector to set the translation to */ SIMD_FORCE_INLINE void setOrigin(const btVector3& origin) { m_origin = origin; } SIMD_FORCE_INLINE btVector3 invXform(const btVector3& inVec) const; /**@brief Set the rotational element by btMatrix3x3 */ SIMD_FORCE_INLINE void setBasis(const btMatrix3x3& basis) { m_basis = basis; } /**@brief Set the rotational element by btQuaternion */ SIMD_FORCE_INLINE void setRotation(const btQuaternion& q) { m_basis.setRotation(q); } /**@brief Set this transformation to the identity */ void setIdentity() { m_basis.setIdentity(); m_origin.setValue(btScalar(0.0), btScalar(0.0), btScalar(0.0)); } /**@brief Multiply this Transform by another(this = this * another) * @param t The other transform */ btTransform& operator*=(const btTransform& t) { m_origin += m_basis * t.m_origin; m_basis *= t.m_basis; return *this; } /**@brief Return the inverse of this transform */ btTransform inverse() const { btMatrix3x3 inv = m_basis.transpose(); return btTransform(inv, inv * -m_origin); } /**@brief Return the inverse of this transform times the other transform * @param t The other transform * return this.inverse() * the other */ btTransform inverseTimes(const btTransform& t) const; /**@brief Return the product of this transform and the other */ btTransform operator*(const btTransform& t) const; /**@brief Return an identity transform */ static const btTransform& getIdentity() { static const btTransform identityTransform(btMatrix3x3::getIdentity()); return identityTransform; } void serialize(struct btTransformData & dataOut) const; void serializeFloat(struct btTransformFloatData & dataOut) const; void deSerialize(const struct btTransformData& dataIn); void deSerializeDouble(const struct btTransformDoubleData& dataIn); void deSerializeFloat(const struct btTransformFloatData& dataIn); }; SIMD_FORCE_INLINE btVector3 btTransform::invXform(const btVector3& inVec) const { btVector3 v = inVec - m_origin; return (m_basis.transpose() * v); } SIMD_FORCE_INLINE btTransform btTransform::inverseTimes(const btTransform& t) const { btVector3 v = t.getOrigin() - m_origin; return btTransform(m_basis.transposeTimes(t.m_basis), v * m_basis); } SIMD_FORCE_INLINE btTransform btTransform::operator*(const btTransform& t) const { return btTransform(m_basis * t.m_basis, (*this)(t.m_origin)); } /**@brief Test if two transforms have all elements equal */ SIMD_FORCE_INLINE bool operator==(const btTransform& t1, const btTransform& t2) { return (t1.getBasis() == t2.getBasis() && t1.getOrigin() == t2.getOrigin()); } ///for serialization struct btTransformFloatData { btMatrix3x3FloatData m_basis; btVector3FloatData m_origin; }; struct btTransformDoubleData { btMatrix3x3DoubleData m_basis; btVector3DoubleData m_origin; }; SIMD_FORCE_INLINE void btTransform::serialize(btTransformData& dataOut) const { m_basis.serialize(dataOut.m_basis); m_origin.serialize(dataOut.m_origin); } SIMD_FORCE_INLINE void btTransform::serializeFloat(btTransformFloatData& dataOut) const { m_basis.serializeFloat(dataOut.m_basis); m_origin.serializeFloat(dataOut.m_origin); } SIMD_FORCE_INLINE void btTransform::deSerialize(const btTransformData& dataIn) { m_basis.deSerialize(dataIn.m_basis); m_origin.deSerialize(dataIn.m_origin); } SIMD_FORCE_INLINE void btTransform::deSerializeFloat(const btTransformFloatData& dataIn) { m_basis.deSerializeFloat(dataIn.m_basis); m_origin.deSerializeFloat(dataIn.m_origin); } SIMD_FORCE_INLINE void btTransform::deSerializeDouble(const btTransformDoubleData& dataIn) { m_basis.deSerializeDouble(dataIn.m_basis); m_origin.deSerializeDouble(dataIn.m_origin); } #endif //BT_TRANSFORM_H ================================================ FILE: libraries/bullet/LinearMath/btTransformUtil.h ================================================ /* Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_TRANSFORM_UTIL_H #define BT_TRANSFORM_UTIL_H #include "btTransform.h" #define ANGULAR_MOTION_THRESHOLD btScalar(0.5) * SIMD_HALF_PI SIMD_FORCE_INLINE btVector3 btAabbSupport(const btVector3& halfExtents, const btVector3& supportDir) { return btVector3(supportDir.x() < btScalar(0.0) ? -halfExtents.x() : halfExtents.x(), supportDir.y() < btScalar(0.0) ? -halfExtents.y() : halfExtents.y(), supportDir.z() < btScalar(0.0) ? -halfExtents.z() : halfExtents.z()); } /// Utils related to temporal transforms class btTransformUtil { public: static void integrateTransform(const btTransform& curTrans, const btVector3& linvel, const btVector3& angvel, btScalar timeStep, btTransform& predictedTransform) { predictedTransform.setOrigin(curTrans.getOrigin() + linvel * timeStep); // #define QUATERNION_DERIVATIVE #ifdef QUATERNION_DERIVATIVE btQuaternion predictedOrn = curTrans.getRotation(); predictedOrn += (angvel * predictedOrn) * (timeStep * btScalar(0.5)); predictedOrn.safeNormalize(); #else //Exponential map //google for "Practical Parameterization of Rotations Using the Exponential Map", F. Sebastian Grassia btVector3 axis; btScalar fAngle2 = angvel.length2(); btScalar fAngle = 0; if (fAngle2 > SIMD_EPSILON) { fAngle = btSqrt(fAngle2); } //limit the angular motion if (fAngle * timeStep > ANGULAR_MOTION_THRESHOLD) { fAngle = ANGULAR_MOTION_THRESHOLD / timeStep; } if (fAngle < btScalar(0.001)) { // use Taylor's expansions of sync function axis = angvel * (btScalar(0.5) * timeStep - (timeStep * timeStep * timeStep) * (btScalar(0.020833333333)) * fAngle * fAngle); } else { // sync(fAngle) = sin(c*fAngle)/t axis = angvel * (btSin(btScalar(0.5) * fAngle * timeStep) / fAngle); } btQuaternion dorn(axis.x(), axis.y(), axis.z(), btCos(fAngle * timeStep * btScalar(0.5))); btQuaternion orn0 = curTrans.getRotation(); btQuaternion predictedOrn = dorn * orn0; predictedOrn.safeNormalize(); #endif if (predictedOrn.length2() > SIMD_EPSILON) { predictedTransform.setRotation(predictedOrn); } else { predictedTransform.setBasis(curTrans.getBasis()); } } static void calculateVelocityQuaternion(const btVector3& pos0, const btVector3& pos1, const btQuaternion& orn0, const btQuaternion& orn1, btScalar timeStep, btVector3& linVel, btVector3& angVel) { linVel = (pos1 - pos0) / timeStep; btVector3 axis; btScalar angle; if (orn0 != orn1) { calculateDiffAxisAngleQuaternion(orn0, orn1, axis, angle); angVel = axis * angle / timeStep; } else { angVel.setValue(0, 0, 0); } } static void calculateDiffAxisAngleQuaternion(const btQuaternion& orn0, const btQuaternion& orn1a, btVector3& axis, btScalar& angle) { btQuaternion orn1 = orn0.nearest(orn1a); btQuaternion dorn = orn1 * orn0.inverse(); angle = dorn.getAngle(); axis = btVector3(dorn.x(), dorn.y(), dorn.z()); axis[3] = btScalar(0.); //check for axis length btScalar len = axis.length2(); if (len < SIMD_EPSILON * SIMD_EPSILON) axis = btVector3(btScalar(1.), btScalar(0.), btScalar(0.)); else axis /= btSqrt(len); } static void calculateVelocity(const btTransform& transform0, const btTransform& transform1, btScalar timeStep, btVector3& linVel, btVector3& angVel) { linVel = (transform1.getOrigin() - transform0.getOrigin()) / timeStep; btVector3 axis; btScalar angle; calculateDiffAxisAngle(transform0, transform1, axis, angle); angVel = axis * angle / timeStep; } static void calculateDiffAxisAngle(const btTransform& transform0, const btTransform& transform1, btVector3& axis, btScalar& angle) { btMatrix3x3 dmat = transform1.getBasis() * transform0.getBasis().inverse(); btQuaternion dorn; dmat.getRotation(dorn); ///floating point inaccuracy can lead to w component > 1..., which breaks dorn.normalize(); angle = dorn.getAngle(); axis = btVector3(dorn.x(), dorn.y(), dorn.z()); axis[3] = btScalar(0.); //check for axis length btScalar len = axis.length2(); if (len < SIMD_EPSILON * SIMD_EPSILON) axis = btVector3(btScalar(1.), btScalar(0.), btScalar(0.)); else axis /= btSqrt(len); } }; ///The btConvexSeparatingDistanceUtil can help speed up convex collision detection ///by conservatively updating a cached separating distance/vector instead of re-calculating the closest distance class btConvexSeparatingDistanceUtil { btQuaternion m_ornA; btQuaternion m_ornB; btVector3 m_posA; btVector3 m_posB; btVector3 m_separatingNormal; btScalar m_boundingRadiusA; btScalar m_boundingRadiusB; btScalar m_separatingDistance; public: btConvexSeparatingDistanceUtil(btScalar boundingRadiusA, btScalar boundingRadiusB) : m_boundingRadiusA(boundingRadiusA), m_boundingRadiusB(boundingRadiusB), m_separatingDistance(0.f) { } btScalar getConservativeSeparatingDistance() { return m_separatingDistance; } void updateSeparatingDistance(const btTransform& transA, const btTransform& transB) { const btVector3& toPosA = transA.getOrigin(); const btVector3& toPosB = transB.getOrigin(); btQuaternion toOrnA = transA.getRotation(); btQuaternion toOrnB = transB.getRotation(); if (m_separatingDistance > 0.f) { btVector3 linVelA, angVelA, linVelB, angVelB; btTransformUtil::calculateVelocityQuaternion(m_posA, toPosA, m_ornA, toOrnA, btScalar(1.), linVelA, angVelA); btTransformUtil::calculateVelocityQuaternion(m_posB, toPosB, m_ornB, toOrnB, btScalar(1.), linVelB, angVelB); btScalar maxAngularProjectedVelocity = angVelA.length() * m_boundingRadiusA + angVelB.length() * m_boundingRadiusB; btVector3 relLinVel = (linVelB - linVelA); btScalar relLinVelocLength = relLinVel.dot(m_separatingNormal); if (relLinVelocLength < 0.f) { relLinVelocLength = 0.f; } btScalar projectedMotion = maxAngularProjectedVelocity + relLinVelocLength; m_separatingDistance -= projectedMotion; } m_posA = toPosA; m_posB = toPosB; m_ornA = toOrnA; m_ornB = toOrnB; } void initSeparatingDistance(const btVector3& separatingVector, btScalar separatingDistance, const btTransform& transA, const btTransform& transB) { m_separatingDistance = separatingDistance; if (m_separatingDistance > 0.f) { m_separatingNormal = separatingVector; const btVector3& toPosA = transA.getOrigin(); const btVector3& toPosB = transB.getOrigin(); btQuaternion toOrnA = transA.getRotation(); btQuaternion toOrnB = transB.getRotation(); m_posA = toPosA; m_posB = toPosB; m_ornA = toOrnA; m_ornB = toOrnB; } } }; #endif //BT_TRANSFORM_UTIL_H ================================================ FILE: libraries/bullet/LinearMath/btVector3.h ================================================ /* Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BT_VECTOR3_H #define BT_VECTOR3_H //#include #include "btScalar.h" #include "btMinMax.h" #include "btAlignedAllocator.h" #ifdef BT_USE_DOUBLE_PRECISION #define btVector3Data btVector3DoubleData #define btVector3DataName "btVector3DoubleData" #else #define btVector3Data btVector3FloatData #define btVector3DataName "btVector3FloatData" #endif //BT_USE_DOUBLE_PRECISION #if defined BT_USE_SSE //typedef uint32_t __m128i __attribute__ ((vector_size(16))); #ifdef _MSC_VER #pragma warning(disable : 4556) // value of intrinsic immediate argument '4294967239' is out of range '0 - 255' #endif #define BT_SHUFFLE(x, y, z, w) (((w) << 6 | (z) << 4 | (y) << 2 | (x)) & 0xff) //#define bt_pshufd_ps( _a, _mask ) (__m128) _mm_shuffle_epi32((__m128i)(_a), (_mask) ) #define bt_pshufd_ps(_a, _mask) _mm_shuffle_ps((_a), (_a), (_mask)) #define bt_splat3_ps(_a, _i) bt_pshufd_ps((_a), BT_SHUFFLE(_i, _i, _i, 3)) #define bt_splat_ps(_a, _i) bt_pshufd_ps((_a), BT_SHUFFLE(_i, _i, _i, _i)) #define btv3AbsiMask (_mm_set_epi32(0x00000000, 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF)) #define btvAbsMask (_mm_set_epi32(0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF)) #define btvFFF0Mask (_mm_set_epi32(0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF)) #define btv3AbsfMask btCastiTo128f(btv3AbsiMask) #define btvFFF0fMask btCastiTo128f(btvFFF0Mask) #define btvxyzMaskf btvFFF0fMask #define btvAbsfMask btCastiTo128f(btvAbsMask) //there is an issue with XCode 3.2 (LCx errors) #define btvMzeroMask (_mm_set_ps(-0.0f, -0.0f, -0.0f, -0.0f)) #define v1110 (_mm_set_ps(0.0f, 1.0f, 1.0f, 1.0f)) #define vHalf (_mm_set_ps(0.5f, 0.5f, 0.5f, 0.5f)) #define v1_5 (_mm_set_ps(1.5f, 1.5f, 1.5f, 1.5f)) //const __m128 ATTRIBUTE_ALIGNED16(btvMzeroMask) = {-0.0f, -0.0f, -0.0f, -0.0f}; //const __m128 ATTRIBUTE_ALIGNED16(v1110) = {1.0f, 1.0f, 1.0f, 0.0f}; //const __m128 ATTRIBUTE_ALIGNED16(vHalf) = {0.5f, 0.5f, 0.5f, 0.5f}; //const __m128 ATTRIBUTE_ALIGNED16(v1_5) = {1.5f, 1.5f, 1.5f, 1.5f}; #endif #ifdef BT_USE_NEON const float32x4_t ATTRIBUTE_ALIGNED16(btvMzeroMask) = (float32x4_t){-0.0f, -0.0f, -0.0f, -0.0f}; const int32x4_t ATTRIBUTE_ALIGNED16(btvFFF0Mask) = (int32x4_t){static_cast(0xFFFFFFFF), static_cast(0xFFFFFFFF), static_cast(0xFFFFFFFF), 0x0}; const int32x4_t ATTRIBUTE_ALIGNED16(btvAbsMask) = (int32x4_t){0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF}; const int32x4_t ATTRIBUTE_ALIGNED16(btv3AbsMask) = (int32x4_t){0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF, 0x0}; #endif /**@brief btVector3 can be used to represent 3D points and vectors. * It has an un-used w component to suit 16-byte alignment when btVector3 is stored in containers. This extra component can be used by derived classes (Quaternion?) or by user * Ideally, this class should be replaced by a platform optimized SIMD version that keeps the data in registers */ ATTRIBUTE_ALIGNED16(class) btVector3 { public: BT_DECLARE_ALIGNED_ALLOCATOR(); #if defined(__SPU__) && defined(__CELLOS_LV2__) btScalar m_floats[4]; public: SIMD_FORCE_INLINE const vec_float4& get128() const { return *((const vec_float4*)&m_floats[0]); } public: #else //__CELLOS_LV2__ __SPU__ #if defined(BT_USE_SSE) || defined(BT_USE_NEON) // _WIN32 || ARM union { btSimdFloat4 mVec128; btScalar m_floats[4]; }; SIMD_FORCE_INLINE btSimdFloat4 get128() const { return mVec128; } SIMD_FORCE_INLINE void set128(btSimdFloat4 v128) { mVec128 = v128; } #else btScalar m_floats[4]; #endif #endif //__CELLOS_LV2__ __SPU__ public: /**@brief No initialization constructor */ SIMD_FORCE_INLINE btVector3() { } /**@brief Constructor from scalars * @param x X value * @param y Y value * @param z Z value */ SIMD_FORCE_INLINE btVector3(const btScalar& _x, const btScalar& _y, const btScalar& _z) { m_floats[0] = _x; m_floats[1] = _y; m_floats[2] = _z; m_floats[3] = btScalar(0.f); } #if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) || defined(BT_USE_NEON) // Set Vector SIMD_FORCE_INLINE btVector3(btSimdFloat4 v) { mVec128 = v; } // Copy constructor SIMD_FORCE_INLINE btVector3(const btVector3& rhs) { mVec128 = rhs.mVec128; } // Assignment Operator SIMD_FORCE_INLINE btVector3& operator=(const btVector3& v) { mVec128 = v.mVec128; return *this; } #endif // #if defined (BT_USE_SSE_IN_API) || defined (BT_USE_NEON) /**@brief Add a vector to this one * @param The vector to add to this one */ SIMD_FORCE_INLINE btVector3& operator+=(const btVector3& v) { #if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) mVec128 = _mm_add_ps(mVec128, v.mVec128); #elif defined(BT_USE_NEON) mVec128 = vaddq_f32(mVec128, v.mVec128); #else m_floats[0] += v.m_floats[0]; m_floats[1] += v.m_floats[1]; m_floats[2] += v.m_floats[2]; #endif return *this; } /**@brief Subtract a vector from this one * @param The vector to subtract */ SIMD_FORCE_INLINE btVector3& operator-=(const btVector3& v) { #if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) mVec128 = _mm_sub_ps(mVec128, v.mVec128); #elif defined(BT_USE_NEON) mVec128 = vsubq_f32(mVec128, v.mVec128); #else m_floats[0] -= v.m_floats[0]; m_floats[1] -= v.m_floats[1]; m_floats[2] -= v.m_floats[2]; #endif return *this; } /**@brief Scale the vector * @param s Scale factor */ SIMD_FORCE_INLINE btVector3& operator*=(const btScalar& s) { #if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) __m128 vs = _mm_load_ss(&s); // (S 0 0 0) vs = bt_pshufd_ps(vs, 0x80); // (S S S 0.0) mVec128 = _mm_mul_ps(mVec128, vs); #elif defined(BT_USE_NEON) mVec128 = vmulq_n_f32(mVec128, s); #else m_floats[0] *= s; m_floats[1] *= s; m_floats[2] *= s; #endif return *this; } /**@brief Inversely scale the vector * @param s Scale factor to divide by */ SIMD_FORCE_INLINE btVector3& operator/=(const btScalar& s) { btFullAssert(s != btScalar(0.0)); #if 0 //defined(BT_USE_SSE_IN_API) // this code is not faster ! __m128 vs = _mm_load_ss(&s); vs = _mm_div_ss(v1110, vs); vs = bt_pshufd_ps(vs, 0x00); // (S S S S) mVec128 = _mm_mul_ps(mVec128, vs); return *this; #else return *this *= btScalar(1.0) / s; #endif } /**@brief Return the dot product * @param v The other vector in the dot product */ SIMD_FORCE_INLINE btScalar dot(const btVector3& v) const { #if defined BT_USE_SIMD_VECTOR3 && defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) __m128 vd = _mm_mul_ps(mVec128, v.mVec128); __m128 z = _mm_movehl_ps(vd, vd); __m128 y = _mm_shuffle_ps(vd, vd, 0x55); vd = _mm_add_ss(vd, y); vd = _mm_add_ss(vd, z); return _mm_cvtss_f32(vd); #elif defined(BT_USE_NEON) float32x4_t vd = vmulq_f32(mVec128, v.mVec128); float32x2_t x = vpadd_f32(vget_low_f32(vd), vget_low_f32(vd)); x = vadd_f32(x, vget_high_f32(vd)); return vget_lane_f32(x, 0); #else return m_floats[0] * v.m_floats[0] + m_floats[1] * v.m_floats[1] + m_floats[2] * v.m_floats[2]; #endif } /**@brief Return the length of the vector squared */ SIMD_FORCE_INLINE btScalar length2() const { return dot(*this); } /**@brief Return the length of the vector */ SIMD_FORCE_INLINE btScalar length() const { return btSqrt(length2()); } /**@brief Return the norm (length) of the vector */ SIMD_FORCE_INLINE btScalar norm() const { return length(); } /**@brief Return the norm (length) of the vector */ SIMD_FORCE_INLINE btScalar safeNorm() const { btScalar d = length2(); //workaround for some clang/gcc issue of sqrtf(tiny number) = -INF if (d > SIMD_EPSILON) return btSqrt(d); return btScalar(0); } /**@brief Return the distance squared between the ends of this and another vector * This is symantically treating the vector like a point */ SIMD_FORCE_INLINE btScalar distance2(const btVector3& v) const; /**@brief Return the distance between the ends of this and another vector * This is symantically treating the vector like a point */ SIMD_FORCE_INLINE btScalar distance(const btVector3& v) const; SIMD_FORCE_INLINE btVector3& safeNormalize() { btScalar l2 = length2(); //triNormal.normalize(); if (l2 >= SIMD_EPSILON * SIMD_EPSILON) { (*this) /= btSqrt(l2); } else { setValue(1, 0, 0); } return *this; } /**@brief Normalize this vector * x^2 + y^2 + z^2 = 1 */ SIMD_FORCE_INLINE btVector3& normalize() { btAssert(!fuzzyZero()); #if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) // dot product first __m128 vd = _mm_mul_ps(mVec128, mVec128); __m128 z = _mm_movehl_ps(vd, vd); __m128 y = _mm_shuffle_ps(vd, vd, 0x55); vd = _mm_add_ss(vd, y); vd = _mm_add_ss(vd, z); #if 0 vd = _mm_sqrt_ss(vd); vd = _mm_div_ss(v1110, vd); vd = bt_splat_ps(vd, 0x80); mVec128 = _mm_mul_ps(mVec128, vd); #else // NR step 1/sqrt(x) - vd is x, y is output y = _mm_rsqrt_ss(vd); // estimate // one step NR z = v1_5; vd = _mm_mul_ss(vd, vHalf); // vd * 0.5 //x2 = vd; vd = _mm_mul_ss(vd, y); // vd * 0.5 * y0 vd = _mm_mul_ss(vd, y); // vd * 0.5 * y0 * y0 z = _mm_sub_ss(z, vd); // 1.5 - vd * 0.5 * y0 * y0 y = _mm_mul_ss(y, z); // y0 * (1.5 - vd * 0.5 * y0 * y0) y = bt_splat_ps(y, 0x80); mVec128 = _mm_mul_ps(mVec128, y); #endif return *this; #else return *this /= length(); #endif } /**@brief Return a normalized version of this vector */ SIMD_FORCE_INLINE btVector3 normalized() const; /**@brief Return a rotated version of this vector * @param wAxis The axis to rotate about * @param angle The angle to rotate by */ SIMD_FORCE_INLINE btVector3 rotate(const btVector3& wAxis, const btScalar angle) const; /**@brief Return the angle between this and another vector * @param v The other vector */ SIMD_FORCE_INLINE btScalar angle(const btVector3& v) const { btScalar s = btSqrt(length2() * v.length2()); btFullAssert(s != btScalar(0.0)); return btAcos(dot(v) / s); } /**@brief Return a vector with the absolute values of each element */ SIMD_FORCE_INLINE btVector3 absolute() const { #if defined BT_USE_SIMD_VECTOR3 && defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) return btVector3(_mm_and_ps(mVec128, btv3AbsfMask)); #elif defined(BT_USE_NEON) return btVector3(vabsq_f32(mVec128)); #else return btVector3( btFabs(m_floats[0]), btFabs(m_floats[1]), btFabs(m_floats[2])); #endif } /**@brief Return the cross product between this and another vector * @param v The other vector */ SIMD_FORCE_INLINE btVector3 cross(const btVector3& v) const { #if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) __m128 T, V; T = bt_pshufd_ps(mVec128, BT_SHUFFLE(1, 2, 0, 3)); // (Y Z X 0) V = bt_pshufd_ps(v.mVec128, BT_SHUFFLE(1, 2, 0, 3)); // (Y Z X 0) V = _mm_mul_ps(V, mVec128); T = _mm_mul_ps(T, v.mVec128); V = _mm_sub_ps(V, T); V = bt_pshufd_ps(V, BT_SHUFFLE(1, 2, 0, 3)); return btVector3(V); #elif defined(BT_USE_NEON) float32x4_t T, V; // form (Y, Z, X, _) of mVec128 and v.mVec128 float32x2_t Tlow = vget_low_f32(mVec128); float32x2_t Vlow = vget_low_f32(v.mVec128); T = vcombine_f32(vext_f32(Tlow, vget_high_f32(mVec128), 1), Tlow); V = vcombine_f32(vext_f32(Vlow, vget_high_f32(v.mVec128), 1), Vlow); V = vmulq_f32(V, mVec128); T = vmulq_f32(T, v.mVec128); V = vsubq_f32(V, T); Vlow = vget_low_f32(V); // form (Y, Z, X, _); V = vcombine_f32(vext_f32(Vlow, vget_high_f32(V), 1), Vlow); V = (float32x4_t)vandq_s32((int32x4_t)V, btvFFF0Mask); return btVector3(V); #else return btVector3( m_floats[1] * v.m_floats[2] - m_floats[2] * v.m_floats[1], m_floats[2] * v.m_floats[0] - m_floats[0] * v.m_floats[2], m_floats[0] * v.m_floats[1] - m_floats[1] * v.m_floats[0]); #endif } SIMD_FORCE_INLINE btScalar triple(const btVector3& v1, const btVector3& v2) const { #if defined BT_USE_SIMD_VECTOR3 && defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) // cross: __m128 T = _mm_shuffle_ps(v1.mVec128, v1.mVec128, BT_SHUFFLE(1, 2, 0, 3)); // (Y Z X 0) __m128 V = _mm_shuffle_ps(v2.mVec128, v2.mVec128, BT_SHUFFLE(1, 2, 0, 3)); // (Y Z X 0) V = _mm_mul_ps(V, v1.mVec128); T = _mm_mul_ps(T, v2.mVec128); V = _mm_sub_ps(V, T); V = _mm_shuffle_ps(V, V, BT_SHUFFLE(1, 2, 0, 3)); // dot: V = _mm_mul_ps(V, mVec128); __m128 z = _mm_movehl_ps(V, V); __m128 y = _mm_shuffle_ps(V, V, 0x55); V = _mm_add_ss(V, y); V = _mm_add_ss(V, z); return _mm_cvtss_f32(V); #elif defined(BT_USE_NEON) // cross: float32x4_t T, V; // form (Y, Z, X, _) of mVec128 and v.mVec128 float32x2_t Tlow = vget_low_f32(v1.mVec128); float32x2_t Vlow = vget_low_f32(v2.mVec128); T = vcombine_f32(vext_f32(Tlow, vget_high_f32(v1.mVec128), 1), Tlow); V = vcombine_f32(vext_f32(Vlow, vget_high_f32(v2.mVec128), 1), Vlow); V = vmulq_f32(V, v1.mVec128); T = vmulq_f32(T, v2.mVec128); V = vsubq_f32(V, T); Vlow = vget_low_f32(V); // form (Y, Z, X, _); V = vcombine_f32(vext_f32(Vlow, vget_high_f32(V), 1), Vlow); // dot: V = vmulq_f32(mVec128, V); float32x2_t x = vpadd_f32(vget_low_f32(V), vget_low_f32(V)); x = vadd_f32(x, vget_high_f32(V)); return vget_lane_f32(x, 0); #else return m_floats[0] * (v1.m_floats[1] * v2.m_floats[2] - v1.m_floats[2] * v2.m_floats[1]) + m_floats[1] * (v1.m_floats[2] * v2.m_floats[0] - v1.m_floats[0] * v2.m_floats[2]) + m_floats[2] * (v1.m_floats[0] * v2.m_floats[1] - v1.m_floats[1] * v2.m_floats[0]); #endif } /**@brief Return the axis with the smallest value * Note return values are 0,1,2 for x, y, or z */ SIMD_FORCE_INLINE int minAxis() const { return m_floats[0] < m_floats[1] ? (m_floats[0] < m_floats[2] ? 0 : 2) : (m_floats[1] < m_floats[2] ? 1 : 2); } /**@brief Return the axis with the largest value * Note return values are 0,1,2 for x, y, or z */ SIMD_FORCE_INLINE int maxAxis() const { return m_floats[0] < m_floats[1] ? (m_floats[1] < m_floats[2] ? 2 : 1) : (m_floats[0] < m_floats[2] ? 2 : 0); } SIMD_FORCE_INLINE int furthestAxis() const { return absolute().minAxis(); } SIMD_FORCE_INLINE int closestAxis() const { return absolute().maxAxis(); } SIMD_FORCE_INLINE void setInterpolate3(const btVector3& v0, const btVector3& v1, btScalar rt) { #if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) __m128 vrt = _mm_load_ss(&rt); // (rt 0 0 0) btScalar s = btScalar(1.0) - rt; __m128 vs = _mm_load_ss(&s); // (S 0 0 0) vs = bt_pshufd_ps(vs, 0x80); // (S S S 0.0) __m128 r0 = _mm_mul_ps(v0.mVec128, vs); vrt = bt_pshufd_ps(vrt, 0x80); // (rt rt rt 0.0) __m128 r1 = _mm_mul_ps(v1.mVec128, vrt); __m128 tmp3 = _mm_add_ps(r0, r1); mVec128 = tmp3; #elif defined(BT_USE_NEON) float32x4_t vl = vsubq_f32(v1.mVec128, v0.mVec128); vl = vmulq_n_f32(vl, rt); mVec128 = vaddq_f32(vl, v0.mVec128); #else btScalar s = btScalar(1.0) - rt; m_floats[0] = s * v0.m_floats[0] + rt * v1.m_floats[0]; m_floats[1] = s * v0.m_floats[1] + rt * v1.m_floats[1]; m_floats[2] = s * v0.m_floats[2] + rt * v1.m_floats[2]; //don't do the unused w component // m_co[3] = s * v0[3] + rt * v1[3]; #endif } /**@brief Return the linear interpolation between this and another vector * @param v The other vector * @param t The ration of this to v (t = 0 => return this, t=1 => return other) */ SIMD_FORCE_INLINE btVector3 lerp(const btVector3& v, const btScalar& t) const { #if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) __m128 vt = _mm_load_ss(&t); // (t 0 0 0) vt = bt_pshufd_ps(vt, 0x80); // (rt rt rt 0.0) __m128 vl = _mm_sub_ps(v.mVec128, mVec128); vl = _mm_mul_ps(vl, vt); vl = _mm_add_ps(vl, mVec128); return btVector3(vl); #elif defined(BT_USE_NEON) float32x4_t vl = vsubq_f32(v.mVec128, mVec128); vl = vmulq_n_f32(vl, t); vl = vaddq_f32(vl, mVec128); return btVector3(vl); #else return btVector3(m_floats[0] + (v.m_floats[0] - m_floats[0]) * t, m_floats[1] + (v.m_floats[1] - m_floats[1]) * t, m_floats[2] + (v.m_floats[2] - m_floats[2]) * t); #endif } /**@brief Elementwise multiply this vector by the other * @param v The other vector */ SIMD_FORCE_INLINE btVector3& operator*=(const btVector3& v) { #if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) mVec128 = _mm_mul_ps(mVec128, v.mVec128); #elif defined(BT_USE_NEON) mVec128 = vmulq_f32(mVec128, v.mVec128); #else m_floats[0] *= v.m_floats[0]; m_floats[1] *= v.m_floats[1]; m_floats[2] *= v.m_floats[2]; #endif return *this; } /**@brief Return the x value */ SIMD_FORCE_INLINE const btScalar& getX() const { return m_floats[0]; } /**@brief Return the y value */ SIMD_FORCE_INLINE const btScalar& getY() const { return m_floats[1]; } /**@brief Return the z value */ SIMD_FORCE_INLINE const btScalar& getZ() const { return m_floats[2]; } /**@brief Set the x value */ SIMD_FORCE_INLINE void setX(btScalar _x) { m_floats[0] = _x; }; /**@brief Set the y value */ SIMD_FORCE_INLINE void setY(btScalar _y) { m_floats[1] = _y; }; /**@brief Set the z value */ SIMD_FORCE_INLINE void setZ(btScalar _z) { m_floats[2] = _z; }; /**@brief Set the w value */ SIMD_FORCE_INLINE void setW(btScalar _w) { m_floats[3] = _w; }; /**@brief Return the x value */ SIMD_FORCE_INLINE const btScalar& x() const { return m_floats[0]; } /**@brief Return the y value */ SIMD_FORCE_INLINE const btScalar& y() const { return m_floats[1]; } /**@brief Return the z value */ SIMD_FORCE_INLINE const btScalar& z() const { return m_floats[2]; } /**@brief Return the w value */ SIMD_FORCE_INLINE const btScalar& w() const { return m_floats[3]; } //SIMD_FORCE_INLINE btScalar& operator[](int i) { return (&m_floats[0])[i]; } //SIMD_FORCE_INLINE const btScalar& operator[](int i) const { return (&m_floats[0])[i]; } ///operator btScalar*() replaces operator[], using implicit conversion. We added operator != and operator == to avoid pointer comparisons. SIMD_FORCE_INLINE operator btScalar*() { return &m_floats[0]; } SIMD_FORCE_INLINE operator const btScalar*() const { return &m_floats[0]; } SIMD_FORCE_INLINE bool operator==(const btVector3& other) const { #if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) return (0xf == _mm_movemask_ps((__m128)_mm_cmpeq_ps(mVec128, other.mVec128))); #else return ((m_floats[3] == other.m_floats[3]) && (m_floats[2] == other.m_floats[2]) && (m_floats[1] == other.m_floats[1]) && (m_floats[0] == other.m_floats[0])); #endif } SIMD_FORCE_INLINE bool operator!=(const btVector3& other) const { return !(*this == other); } /**@brief Set each element to the max of the current values and the values of another btVector3 * @param other The other btVector3 to compare with */ SIMD_FORCE_INLINE void setMax(const btVector3& other) { #if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) mVec128 = _mm_max_ps(mVec128, other.mVec128); #elif defined(BT_USE_NEON) mVec128 = vmaxq_f32(mVec128, other.mVec128); #else btSetMax(m_floats[0], other.m_floats[0]); btSetMax(m_floats[1], other.m_floats[1]); btSetMax(m_floats[2], other.m_floats[2]); btSetMax(m_floats[3], other.w()); #endif } /**@brief Set each element to the min of the current values and the values of another btVector3 * @param other The other btVector3 to compare with */ SIMD_FORCE_INLINE void setMin(const btVector3& other) { #if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) mVec128 = _mm_min_ps(mVec128, other.mVec128); #elif defined(BT_USE_NEON) mVec128 = vminq_f32(mVec128, other.mVec128); #else btSetMin(m_floats[0], other.m_floats[0]); btSetMin(m_floats[1], other.m_floats[1]); btSetMin(m_floats[2], other.m_floats[2]); btSetMin(m_floats[3], other.w()); #endif } SIMD_FORCE_INLINE void setValue(const btScalar& _x, const btScalar& _y, const btScalar& _z) { m_floats[0] = _x; m_floats[1] = _y; m_floats[2] = _z; m_floats[3] = btScalar(0.f); } void getSkewSymmetricMatrix(btVector3 * v0, btVector3 * v1, btVector3 * v2) const { #if defined BT_USE_SIMD_VECTOR3 && defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) __m128 V = _mm_and_ps(mVec128, btvFFF0fMask); __m128 V0 = _mm_xor_ps(btvMzeroMask, V); __m128 V2 = _mm_movelh_ps(V0, V); __m128 V1 = _mm_shuffle_ps(V, V0, 0xCE); V0 = _mm_shuffle_ps(V0, V, 0xDB); V2 = _mm_shuffle_ps(V2, V, 0xF9); v0->mVec128 = V0; v1->mVec128 = V1; v2->mVec128 = V2; #else v0->setValue(0., -z(), y()); v1->setValue(z(), 0., -x()); v2->setValue(-y(), x(), 0.); #endif } void setZero() { #if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) mVec128 = (__m128)_mm_xor_ps(mVec128, mVec128); #elif defined(BT_USE_NEON) int32x4_t vi = vdupq_n_s32(0); mVec128 = vreinterpretq_f32_s32(vi); #else setValue(btScalar(0.), btScalar(0.), btScalar(0.)); #endif } SIMD_FORCE_INLINE bool isZero() const { return m_floats[0] == btScalar(0) && m_floats[1] == btScalar(0) && m_floats[2] == btScalar(0); } SIMD_FORCE_INLINE bool fuzzyZero() const { return length2() < SIMD_EPSILON * SIMD_EPSILON; } SIMD_FORCE_INLINE void serialize(struct btVector3Data & dataOut) const; SIMD_FORCE_INLINE void deSerialize(const struct btVector3DoubleData& dataIn); SIMD_FORCE_INLINE void deSerialize(const struct btVector3FloatData& dataIn); SIMD_FORCE_INLINE void serializeFloat(struct btVector3FloatData & dataOut) const; SIMD_FORCE_INLINE void deSerializeFloat(const struct btVector3FloatData& dataIn); SIMD_FORCE_INLINE void serializeDouble(struct btVector3DoubleData & dataOut) const; SIMD_FORCE_INLINE void deSerializeDouble(const struct btVector3DoubleData& dataIn); /**@brief returns index of maximum dot product between this and vectors in array[] * @param array The other vectors * @param array_count The number of other vectors * @param dotOut The maximum dot product */ SIMD_FORCE_INLINE long maxDot(const btVector3* array, long array_count, btScalar& dotOut) const; /**@brief returns index of minimum dot product between this and vectors in array[] * @param array The other vectors * @param array_count The number of other vectors * @param dotOut The minimum dot product */ SIMD_FORCE_INLINE long minDot(const btVector3* array, long array_count, btScalar& dotOut) const; /* create a vector as btVector3( this->dot( btVector3 v0 ), this->dot( btVector3 v1), this->dot( btVector3 v2 )) */ SIMD_FORCE_INLINE btVector3 dot3(const btVector3& v0, const btVector3& v1, const btVector3& v2) const { #if defined BT_USE_SIMD_VECTOR3 && defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) __m128 a0 = _mm_mul_ps(v0.mVec128, this->mVec128); __m128 a1 = _mm_mul_ps(v1.mVec128, this->mVec128); __m128 a2 = _mm_mul_ps(v2.mVec128, this->mVec128); __m128 b0 = _mm_unpacklo_ps(a0, a1); __m128 b1 = _mm_unpackhi_ps(a0, a1); __m128 b2 = _mm_unpacklo_ps(a2, _mm_setzero_ps()); __m128 r = _mm_movelh_ps(b0, b2); r = _mm_add_ps(r, _mm_movehl_ps(b2, b0)); a2 = _mm_and_ps(a2, btvxyzMaskf); r = _mm_add_ps(r, btCastdTo128f(_mm_move_sd(btCastfTo128d(a2), btCastfTo128d(b1)))); return btVector3(r); #elif defined(BT_USE_NEON) static const uint32x4_t xyzMask = (const uint32x4_t){static_cast(-1), static_cast(-1), static_cast(-1), 0}; float32x4_t a0 = vmulq_f32(v0.mVec128, this->mVec128); float32x4_t a1 = vmulq_f32(v1.mVec128, this->mVec128); float32x4_t a2 = vmulq_f32(v2.mVec128, this->mVec128); float32x2x2_t zLo = vtrn_f32(vget_high_f32(a0), vget_high_f32(a1)); a2 = (float32x4_t)vandq_u32((uint32x4_t)a2, xyzMask); float32x2_t b0 = vadd_f32(vpadd_f32(vget_low_f32(a0), vget_low_f32(a1)), zLo.val[0]); float32x2_t b1 = vpadd_f32(vpadd_f32(vget_low_f32(a2), vget_high_f32(a2)), vdup_n_f32(0.0f)); return btVector3(vcombine_f32(b0, b1)); #else return btVector3(dot(v0), dot(v1), dot(v2)); #endif } }; /**@brief Return the sum of two vectors (Point symantics)*/ SIMD_FORCE_INLINE btVector3 operator+(const btVector3& v1, const btVector3& v2) { #if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) return btVector3(_mm_add_ps(v1.mVec128, v2.mVec128)); #elif defined(BT_USE_NEON) return btVector3(vaddq_f32(v1.mVec128, v2.mVec128)); #else return btVector3( v1.m_floats[0] + v2.m_floats[0], v1.m_floats[1] + v2.m_floats[1], v1.m_floats[2] + v2.m_floats[2]); #endif } /**@brief Return the elementwise product of two vectors */ SIMD_FORCE_INLINE btVector3 operator*(const btVector3& v1, const btVector3& v2) { #if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) return btVector3(_mm_mul_ps(v1.mVec128, v2.mVec128)); #elif defined(BT_USE_NEON) return btVector3(vmulq_f32(v1.mVec128, v2.mVec128)); #else return btVector3( v1.m_floats[0] * v2.m_floats[0], v1.m_floats[1] * v2.m_floats[1], v1.m_floats[2] * v2.m_floats[2]); #endif } /**@brief Return the difference between two vectors */ SIMD_FORCE_INLINE btVector3 operator-(const btVector3& v1, const btVector3& v2) { #if defined BT_USE_SIMD_VECTOR3 && (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) // without _mm_and_ps this code causes slowdown in Concave moving __m128 r = _mm_sub_ps(v1.mVec128, v2.mVec128); return btVector3(_mm_and_ps(r, btvFFF0fMask)); #elif defined(BT_USE_NEON) float32x4_t r = vsubq_f32(v1.mVec128, v2.mVec128); return btVector3((float32x4_t)vandq_s32((int32x4_t)r, btvFFF0Mask)); #else return btVector3( v1.m_floats[0] - v2.m_floats[0], v1.m_floats[1] - v2.m_floats[1], v1.m_floats[2] - v2.m_floats[2]); #endif } /**@brief Return the negative of the vector */ SIMD_FORCE_INLINE btVector3 operator-(const btVector3& v) { #if defined BT_USE_SIMD_VECTOR3 && (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) __m128 r = _mm_xor_ps(v.mVec128, btvMzeroMask); return btVector3(_mm_and_ps(r, btvFFF0fMask)); #elif defined(BT_USE_NEON) return btVector3((btSimdFloat4)veorq_s32((int32x4_t)v.mVec128, (int32x4_t)btvMzeroMask)); #else return btVector3(-v.m_floats[0], -v.m_floats[1], -v.m_floats[2]); #endif } /**@brief Return the vector scaled by s */ SIMD_FORCE_INLINE btVector3 operator*(const btVector3& v, const btScalar& s) { #if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) __m128 vs = _mm_load_ss(&s); // (S 0 0 0) vs = bt_pshufd_ps(vs, 0x80); // (S S S 0.0) return btVector3(_mm_mul_ps(v.mVec128, vs)); #elif defined(BT_USE_NEON) float32x4_t r = vmulq_n_f32(v.mVec128, s); return btVector3((float32x4_t)vandq_s32((int32x4_t)r, btvFFF0Mask)); #else return btVector3(v.m_floats[0] * s, v.m_floats[1] * s, v.m_floats[2] * s); #endif } /**@brief Return the vector scaled by s */ SIMD_FORCE_INLINE btVector3 operator*(const btScalar& s, const btVector3& v) { return v * s; } /**@brief Return the vector inversely scaled by s */ SIMD_FORCE_INLINE btVector3 operator/(const btVector3& v, const btScalar& s) { btFullAssert(s != btScalar(0.0)); #if 0 //defined(BT_USE_SSE_IN_API) // this code is not faster ! __m128 vs = _mm_load_ss(&s); vs = _mm_div_ss(v1110, vs); vs = bt_pshufd_ps(vs, 0x00); // (S S S S) return btVector3(_mm_mul_ps(v.mVec128, vs)); #else return v * (btScalar(1.0) / s); #endif } /**@brief Return the vector inversely scaled by s */ SIMD_FORCE_INLINE btVector3 operator/(const btVector3& v1, const btVector3& v2) { #if defined BT_USE_SIMD_VECTOR3 && (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) __m128 vec = _mm_div_ps(v1.mVec128, v2.mVec128); vec = _mm_and_ps(vec, btvFFF0fMask); return btVector3(vec); #elif defined(BT_USE_NEON) float32x4_t x, y, v, m; x = v1.mVec128; y = v2.mVec128; v = vrecpeq_f32(y); // v ~ 1/y m = vrecpsq_f32(y, v); // m = (2-v*y) v = vmulq_f32(v, m); // vv = v*m ~~ 1/y m = vrecpsq_f32(y, v); // mm = (2-vv*y) v = vmulq_f32(v, x); // x*vv v = vmulq_f32(v, m); // (x*vv)*(2-vv*y) = x*(vv(2-vv*y)) ~~~ x/y return btVector3(v); #else return btVector3( v1.m_floats[0] / v2.m_floats[0], v1.m_floats[1] / v2.m_floats[1], v1.m_floats[2] / v2.m_floats[2]); #endif } /**@brief Return the dot product between two vectors */ SIMD_FORCE_INLINE btScalar btDot(const btVector3& v1, const btVector3& v2) { return v1.dot(v2); } /**@brief Return the distance squared between two vectors */ SIMD_FORCE_INLINE btScalar btDistance2(const btVector3& v1, const btVector3& v2) { return v1.distance2(v2); } /**@brief Return the distance between two vectors */ SIMD_FORCE_INLINE btScalar btDistance(const btVector3& v1, const btVector3& v2) { return v1.distance(v2); } /**@brief Return the angle between two vectors */ SIMD_FORCE_INLINE btScalar btAngle(const btVector3& v1, const btVector3& v2) { return v1.angle(v2); } /**@brief Return the cross product of two vectors */ SIMD_FORCE_INLINE btVector3 btCross(const btVector3& v1, const btVector3& v2) { return v1.cross(v2); } SIMD_FORCE_INLINE btScalar btTriple(const btVector3& v1, const btVector3& v2, const btVector3& v3) { return v1.triple(v2, v3); } /**@brief Return the linear interpolation between two vectors * @param v1 One vector * @param v2 The other vector * @param t The ration of this to v (t = 0 => return v1, t=1 => return v2) */ SIMD_FORCE_INLINE btVector3 lerp(const btVector3& v1, const btVector3& v2, const btScalar& t) { return v1.lerp(v2, t); } SIMD_FORCE_INLINE btScalar btVector3::distance2(const btVector3& v) const { return (v - *this).length2(); } SIMD_FORCE_INLINE btScalar btVector3::distance(const btVector3& v) const { return (v - *this).length(); } SIMD_FORCE_INLINE btVector3 btVector3::normalized() const { btVector3 nrm = *this; return nrm.normalize(); } SIMD_FORCE_INLINE btVector3 btVector3::rotate(const btVector3& wAxis, const btScalar _angle) const { // wAxis must be a unit lenght vector #if defined BT_USE_SIMD_VECTOR3 && defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) __m128 O = _mm_mul_ps(wAxis.mVec128, mVec128); btScalar ssin = btSin(_angle); __m128 C = wAxis.cross(mVec128).mVec128; O = _mm_and_ps(O, btvFFF0fMask); btScalar scos = btCos(_angle); __m128 vsin = _mm_load_ss(&ssin); // (S 0 0 0) __m128 vcos = _mm_load_ss(&scos); // (S 0 0 0) __m128 Y = bt_pshufd_ps(O, 0xC9); // (Y Z X 0) __m128 Z = bt_pshufd_ps(O, 0xD2); // (Z X Y 0) O = _mm_add_ps(O, Y); vsin = bt_pshufd_ps(vsin, 0x80); // (S S S 0) O = _mm_add_ps(O, Z); vcos = bt_pshufd_ps(vcos, 0x80); // (S S S 0) vsin = vsin * C; O = O * wAxis.mVec128; __m128 X = mVec128 - O; O = O + vsin; vcos = vcos * X; O = O + vcos; return btVector3(O); #else btVector3 o = wAxis * wAxis.dot(*this); btVector3 _x = *this - o; btVector3 _y; _y = wAxis.cross(*this); return (o + _x * btCos(_angle) + _y * btSin(_angle)); #endif } SIMD_FORCE_INLINE long btVector3::maxDot(const btVector3* array, long array_count, btScalar& dotOut) const { #if (defined BT_USE_SSE && defined BT_USE_SIMD_VECTOR3 && defined BT_USE_SSE_IN_API) || defined(BT_USE_NEON) #if defined _WIN32 || defined(BT_USE_SSE) const long scalar_cutoff = 10; long _maxdot_large(const float* array, const float* vec, unsigned long array_count, float* dotOut); #elif defined BT_USE_NEON const long scalar_cutoff = 4; extern long (*_maxdot_large)(const float* array, const float* vec, unsigned long array_count, float* dotOut); #endif if (array_count < scalar_cutoff) #endif { btScalar maxDot1 = -SIMD_INFINITY; int i = 0; int ptIndex = -1; for (i = 0; i < array_count; i++) { btScalar dot = array[i].dot(*this); if (dot > maxDot1) { maxDot1 = dot; ptIndex = i; } } dotOut = maxDot1; return ptIndex; } #if (defined BT_USE_SSE && defined BT_USE_SIMD_VECTOR3 && defined BT_USE_SSE_IN_API) || defined(BT_USE_NEON) return _maxdot_large((float*)array, (float*)&m_floats[0], array_count, &dotOut); #endif } SIMD_FORCE_INLINE long btVector3::minDot(const btVector3* array, long array_count, btScalar& dotOut) const { #if (defined BT_USE_SSE && defined BT_USE_SIMD_VECTOR3 && defined BT_USE_SSE_IN_API) || defined(BT_USE_NEON) #if defined BT_USE_SSE const long scalar_cutoff = 10; long _mindot_large(const float* array, const float* vec, unsigned long array_count, float* dotOut); #elif defined BT_USE_NEON const long scalar_cutoff = 4; extern long (*_mindot_large)(const float* array, const float* vec, unsigned long array_count, float* dotOut); #else #error unhandled arch! #endif if (array_count < scalar_cutoff) #endif { btScalar minDot = SIMD_INFINITY; int i = 0; int ptIndex = -1; for (i = 0; i < array_count; i++) { btScalar dot = array[i].dot(*this); if (dot < minDot) { minDot = dot; ptIndex = i; } } dotOut = minDot; return ptIndex; } #if (defined BT_USE_SSE && defined BT_USE_SIMD_VECTOR3 && defined BT_USE_SSE_IN_API) || defined(BT_USE_NEON) return _mindot_large((float*)array, (float*)&m_floats[0], array_count, &dotOut); #endif //BT_USE_SIMD_VECTOR3 } class btVector4 : public btVector3 { public: SIMD_FORCE_INLINE btVector4() {} SIMD_FORCE_INLINE btVector4(const btScalar& _x, const btScalar& _y, const btScalar& _z, const btScalar& _w) : btVector3(_x, _y, _z) { m_floats[3] = _w; } #if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) || defined(BT_USE_NEON) SIMD_FORCE_INLINE btVector4(const btSimdFloat4 vec) { mVec128 = vec; } SIMD_FORCE_INLINE btVector4(const btVector3& rhs) { mVec128 = rhs.mVec128; } SIMD_FORCE_INLINE btVector4& operator=(const btVector4& v) { mVec128 = v.mVec128; return *this; } #endif // #if defined (BT_USE_SSE_IN_API) || defined (BT_USE_NEON) SIMD_FORCE_INLINE btVector4 absolute4() const { #if defined BT_USE_SIMD_VECTOR3 && defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE) return btVector4(_mm_and_ps(mVec128, btvAbsfMask)); #elif defined(BT_USE_NEON) return btVector4(vabsq_f32(mVec128)); #else return btVector4( btFabs(m_floats[0]), btFabs(m_floats[1]), btFabs(m_floats[2]), btFabs(m_floats[3])); #endif } btScalar getW() const { return m_floats[3]; } SIMD_FORCE_INLINE int maxAxis4() const { int maxIndex = -1; btScalar maxVal = btScalar(-BT_LARGE_FLOAT); if (m_floats[0] > maxVal) { maxIndex = 0; maxVal = m_floats[0]; } if (m_floats[1] > maxVal) { maxIndex = 1; maxVal = m_floats[1]; } if (m_floats[2] > maxVal) { maxIndex = 2; maxVal = m_floats[2]; } if (m_floats[3] > maxVal) { maxIndex = 3; } return maxIndex; } SIMD_FORCE_INLINE int minAxis4() const { int minIndex = -1; btScalar minVal = btScalar(BT_LARGE_FLOAT); if (m_floats[0] < minVal) { minIndex = 0; minVal = m_floats[0]; } if (m_floats[1] < minVal) { minIndex = 1; minVal = m_floats[1]; } if (m_floats[2] < minVal) { minIndex = 2; minVal = m_floats[2]; } if (m_floats[3] < minVal) { minIndex = 3; } return minIndex; } SIMD_FORCE_INLINE int closestAxis4() const { return absolute4().maxAxis4(); } /**@brief Set x,y,z and zero w * @param x Value of x * @param y Value of y * @param z Value of z */ /* void getValue(btScalar *m) const { m[0] = m_floats[0]; m[1] = m_floats[1]; m[2] =m_floats[2]; } */ /**@brief Set the values * @param x Value of x * @param y Value of y * @param z Value of z * @param w Value of w */ SIMD_FORCE_INLINE void setValue(const btScalar& _x, const btScalar& _y, const btScalar& _z, const btScalar& _w) { m_floats[0] = _x; m_floats[1] = _y; m_floats[2] = _z; m_floats[3] = _w; } }; ///btSwapVector3Endian swaps vector endianness, useful for network and cross-platform serialization SIMD_FORCE_INLINE void btSwapScalarEndian(const btScalar& sourceVal, btScalar& destVal) { #ifdef BT_USE_DOUBLE_PRECISION unsigned char* dest = (unsigned char*)&destVal; const unsigned char* src = (const unsigned char*)&sourceVal; dest[0] = src[7]; dest[1] = src[6]; dest[2] = src[5]; dest[3] = src[4]; dest[4] = src[3]; dest[5] = src[2]; dest[6] = src[1]; dest[7] = src[0]; #else unsigned char* dest = (unsigned char*)&destVal; const unsigned char* src = (const unsigned char*)&sourceVal; dest[0] = src[3]; dest[1] = src[2]; dest[2] = src[1]; dest[3] = src[0]; #endif //BT_USE_DOUBLE_PRECISION } ///btSwapVector3Endian swaps vector endianness, useful for network and cross-platform serialization SIMD_FORCE_INLINE void btSwapVector3Endian(const btVector3& sourceVec, btVector3& destVec) { for (int i = 0; i < 4; i++) { btSwapScalarEndian(sourceVec[i], destVec[i]); } } ///btUnSwapVector3Endian swaps vector endianness, useful for network and cross-platform serialization SIMD_FORCE_INLINE void btUnSwapVector3Endian(btVector3& vector) { btVector3 swappedVec; for (int i = 0; i < 4; i++) { btSwapScalarEndian(vector[i], swappedVec[i]); } vector = swappedVec; } template SIMD_FORCE_INLINE void btPlaneSpace1(const T& n, T& p, T& q) { if (btFabs(n[2]) > SIMDSQRT12) { // choose p in y-z plane btScalar a = n[1] * n[1] + n[2] * n[2]; btScalar k = btRecipSqrt(a); p[0] = 0; p[1] = -n[2] * k; p[2] = n[1] * k; // set q = n x p q[0] = a * k; q[1] = -n[0] * p[2]; q[2] = n[0] * p[1]; } else { // choose p in x-y plane btScalar a = n[0] * n[0] + n[1] * n[1]; btScalar k = btRecipSqrt(a); p[0] = -n[1] * k; p[1] = n[0] * k; p[2] = 0; // set q = n x p q[0] = -n[2] * p[1]; q[1] = n[2] * p[0]; q[2] = a * k; } } struct btVector3FloatData { float m_floats[4]; }; struct btVector3DoubleData { double m_floats[4]; }; SIMD_FORCE_INLINE void btVector3::serializeFloat(struct btVector3FloatData& dataOut) const { ///could also do a memcpy, check if it is worth it for (int i = 0; i < 4; i++) dataOut.m_floats[i] = float(m_floats[i]); } SIMD_FORCE_INLINE void btVector3::deSerializeFloat(const struct btVector3FloatData& dataIn) { for (int i = 0; i < 4; i++) m_floats[i] = btScalar(dataIn.m_floats[i]); } SIMD_FORCE_INLINE void btVector3::serializeDouble(struct btVector3DoubleData& dataOut) const { ///could also do a memcpy, check if it is worth it for (int i = 0; i < 4; i++) dataOut.m_floats[i] = double(m_floats[i]); } SIMD_FORCE_INLINE void btVector3::deSerializeDouble(const struct btVector3DoubleData& dataIn) { for (int i = 0; i < 4; i++) m_floats[i] = btScalar(dataIn.m_floats[i]); } SIMD_FORCE_INLINE void btVector3::serialize(struct btVector3Data& dataOut) const { ///could also do a memcpy, check if it is worth it for (int i = 0; i < 4; i++) dataOut.m_floats[i] = m_floats[i]; } SIMD_FORCE_INLINE void btVector3::deSerialize(const struct btVector3FloatData& dataIn) { for (int i = 0; i < 4; i++) m_floats[i] = (btScalar)dataIn.m_floats[i]; } SIMD_FORCE_INLINE void btVector3::deSerialize(const struct btVector3DoubleData& dataIn) { for (int i = 0; i < 4; i++) m_floats[i] = (btScalar)dataIn.m_floats[i]; } #endif //BT_VECTOR3_H ================================================ FILE: libraries/bullet/btBulletCollisionCommon.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BULLET_COLLISION_COMMON_H #define BULLET_COLLISION_COMMON_H ///Common headerfile includes for Bullet Collision Detection ///Bullet's btCollisionWorld and btCollisionObject definitions #include "BulletCollision/CollisionDispatch/btCollisionWorld.h" #include "BulletCollision/CollisionDispatch/btCollisionObject.h" ///Collision Shapes #include "BulletCollision/CollisionShapes/btBoxShape.h" #include "BulletCollision/CollisionShapes/btSphereShape.h" #include "BulletCollision/CollisionShapes/btCapsuleShape.h" #include "BulletCollision/CollisionShapes/btCylinderShape.h" #include "BulletCollision/CollisionShapes/btConeShape.h" #include "BulletCollision/CollisionShapes/btStaticPlaneShape.h" #include "BulletCollision/CollisionShapes/btConvexHullShape.h" #include "BulletCollision/CollisionShapes/btTriangleMesh.h" #include "BulletCollision/CollisionShapes/btConvexTriangleMeshShape.h" #include "BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h" #include "BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.h" #include "BulletCollision/CollisionShapes/btTriangleMeshShape.h" #include "BulletCollision/CollisionShapes/btTriangleIndexVertexArray.h" #include "BulletCollision/CollisionShapes/btCompoundShape.h" #include "BulletCollision/CollisionShapes/btTetrahedronShape.h" #include "BulletCollision/CollisionShapes/btEmptyShape.h" #include "BulletCollision/CollisionShapes/btMultiSphereShape.h" #include "BulletCollision/CollisionShapes/btUniformScalingShape.h" ///Narrowphase Collision Detector #include "BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.h" //#include "BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.h" #include "BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.h" ///Dispatching and generation of collision pairs (broadphase) #include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h" #include "BulletCollision/BroadphaseCollision/btSimpleBroadphase.h" #include "BulletCollision/BroadphaseCollision/btAxisSweep3.h" #include "BulletCollision/BroadphaseCollision/btDbvtBroadphase.h" ///Math library & Utils #include "LinearMath/btQuaternion.h" #include "LinearMath/btTransform.h" #include "LinearMath/btDefaultMotionState.h" #include "LinearMath/btQuickprof.h" #include "LinearMath/btIDebugDraw.h" #include "LinearMath/btSerializer.h" #endif //BULLET_COLLISION_COMMON_H ================================================ FILE: libraries/bullet/btBulletDynamicsCommon.h ================================================ /* Bullet Continuous Collision Detection and Physics Library Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef BULLET_DYNAMICS_COMMON_H #define BULLET_DYNAMICS_COMMON_H ///Common headerfile includes for Bullet Dynamics, including Collision Detection #include "btBulletCollisionCommon.h" #include "BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h" #include "BulletDynamics/Dynamics/btSimpleDynamicsWorld.h" #include "BulletDynamics/Dynamics/btRigidBody.h" #include "BulletDynamics/ConstraintSolver/btPoint2PointConstraint.h" #include "BulletDynamics/ConstraintSolver/btHingeConstraint.h" #include "BulletDynamics/ConstraintSolver/btConeTwistConstraint.h" #include "BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.h" #include "BulletDynamics/ConstraintSolver/btSliderConstraint.h" #include "BulletDynamics/ConstraintSolver/btGeneric6DofSpringConstraint.h" #include "BulletDynamics/ConstraintSolver/btUniversalConstraint.h" #include "BulletDynamics/ConstraintSolver/btHinge2Constraint.h" #include "BulletDynamics/ConstraintSolver/btGearConstraint.h" #include "BulletDynamics/ConstraintSolver/btFixedConstraint.h" #include "BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h" ///Vehicle simulation, with wheel contact simulated by raycasts #include "BulletDynamics/Vehicle/btRaycastVehicle.h" #endif //BULLET_DYNAMICS_COMMON_H ================================================ FILE: libraries/curl/curl.h ================================================ #ifndef CURLINC_CURL_H #define CURLINC_CURL_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2021, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ /* * If you have libcurl problems, all docs and details are found here: * https://curl.se/libcurl/ * * curl-library mailing list subscription and unsubscription web interface: * https://cool.haxx.se/mailman/listinfo/curl-library/ */ #ifdef CURL_NO_OLDIES #define CURL_STRICTER #endif #include "curlver.h" /* libcurl version defines */ #include "system.h" /* determine things run-time */ /* * Define CURL_WIN32 when build target is Win32 API */ #if (defined(_WIN32) || defined(__WIN32__) || defined(WIN32)) && \ !defined(__SYMBIAN32__) #define CURL_WIN32 #endif #include #include #if defined(__FreeBSD__) && (__FreeBSD__ >= 2) /* Needed for __FreeBSD_version symbol definition */ #include #endif /* The include stuff here below is mainly for time_t! */ #include #include #if defined(CURL_WIN32) && !defined(_WIN32_WCE) && !defined(__CYGWIN__) #if !(defined(_WINSOCKAPI_) || defined(_WINSOCK_H) || \ defined(__LWIP_OPT_H__) || defined(LWIP_HDR_OPT_H)) /* The check above prevents the winsock2 inclusion if winsock.h already was included, since they can't co-exist without problems */ #include #include #endif #endif /* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish libc5-based Linux systems. Only include it on systems that are known to require it! */ #if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \ defined(__minix) || defined(__SYMBIAN32__) || defined(__INTEGRITY) || \ defined(ANDROID) || defined(__ANDROID__) || defined(__OpenBSD__) || \ defined(__CYGWIN__) || defined(AMIGA) || \ (defined(__FreeBSD_version) && (__FreeBSD_version < 800000)) #include #endif #if !defined(CURL_WIN32) && !defined(_WIN32_WCE) #include #endif #if !defined(CURL_WIN32) && !defined(__WATCOMC__) && !defined(__VXWORKS__) #include #endif #ifdef __BEOS__ #include #endif /* Compatibility for non-Clang compilers */ #ifndef __has_declspec_attribute # define __has_declspec_attribute(x) 0 #endif #ifdef __cplusplus extern "C" { #endif #if defined(BUILDING_LIBCURL) || defined(CURL_STRICTER) typedef struct Curl_easy CURL; typedef struct Curl_share CURLSH; #else typedef void CURL; typedef void CURLSH; #endif /* * libcurl external API function linkage decorations. */ #ifdef CURL_STATICLIB # define CURL_EXTERN #elif defined(CURL_WIN32) || defined(__SYMBIAN32__) || \ (__has_declspec_attribute(dllexport) && \ __has_declspec_attribute(dllimport)) # if defined(BUILDING_LIBCURL) # define CURL_EXTERN __declspec(dllexport) # else # define CURL_EXTERN __declspec(dllimport) # endif #elif defined(BUILDING_LIBCURL) && defined(CURL_HIDDEN_SYMBOLS) # define CURL_EXTERN CURL_EXTERN_SYMBOL #else # define CURL_EXTERN #endif #ifndef curl_socket_typedef /* socket typedef */ #if defined(CURL_WIN32) && !defined(__LWIP_OPT_H__) && !defined(LWIP_HDR_OPT_H) typedef SOCKET curl_socket_t; #define CURL_SOCKET_BAD INVALID_SOCKET #else typedef int curl_socket_t; #define CURL_SOCKET_BAD -1 #endif #define curl_socket_typedef #endif /* curl_socket_typedef */ /* enum for the different supported SSL backends */ typedef enum { CURLSSLBACKEND_NONE = 0, CURLSSLBACKEND_OPENSSL = 1, CURLSSLBACKEND_GNUTLS = 2, CURLSSLBACKEND_NSS = 3, CURLSSLBACKEND_OBSOLETE4 = 4, /* Was QSOSSL. */ CURLSSLBACKEND_GSKIT = 5, CURLSSLBACKEND_POLARSSL = 6, CURLSSLBACKEND_WOLFSSL = 7, CURLSSLBACKEND_SCHANNEL = 8, CURLSSLBACKEND_SECURETRANSPORT = 9, CURLSSLBACKEND_AXTLS = 10, /* never used since 7.63.0 */ CURLSSLBACKEND_MBEDTLS = 11, CURLSSLBACKEND_MESALINK = 12, CURLSSLBACKEND_BEARSSL = 13, CURLSSLBACKEND_RUSTLS = 14 } curl_sslbackend; /* aliases for library clones and renames */ #define CURLSSLBACKEND_LIBRESSL CURLSSLBACKEND_OPENSSL #define CURLSSLBACKEND_BORINGSSL CURLSSLBACKEND_OPENSSL /* deprecated names: */ #define CURLSSLBACKEND_CYASSL CURLSSLBACKEND_WOLFSSL #define CURLSSLBACKEND_DARWINSSL CURLSSLBACKEND_SECURETRANSPORT struct curl_httppost { struct curl_httppost *next; /* next entry in the list */ char *name; /* pointer to allocated name */ long namelength; /* length of name length */ char *contents; /* pointer to allocated data contents */ long contentslength; /* length of contents field, see also CURL_HTTPPOST_LARGE */ char *buffer; /* pointer to allocated buffer contents */ long bufferlength; /* length of buffer field */ char *contenttype; /* Content-Type */ struct curl_slist *contentheader; /* list of extra headers for this form */ struct curl_httppost *more; /* if one field name has more than one file, this link should link to following files */ long flags; /* as defined below */ /* specified content is a file name */ #define CURL_HTTPPOST_FILENAME (1<<0) /* specified content is a file name */ #define CURL_HTTPPOST_READFILE (1<<1) /* name is only stored pointer do not free in formfree */ #define CURL_HTTPPOST_PTRNAME (1<<2) /* contents is only stored pointer do not free in formfree */ #define CURL_HTTPPOST_PTRCONTENTS (1<<3) /* upload file from buffer */ #define CURL_HTTPPOST_BUFFER (1<<4) /* upload file from pointer contents */ #define CURL_HTTPPOST_PTRBUFFER (1<<5) /* upload file contents by using the regular read callback to get the data and pass the given pointer as custom pointer */ #define CURL_HTTPPOST_CALLBACK (1<<6) /* use size in 'contentlen', added in 7.46.0 */ #define CURL_HTTPPOST_LARGE (1<<7) char *showfilename; /* The file name to show. If not set, the actual file name will be used (if this is a file part) */ void *userp; /* custom pointer used for HTTPPOST_CALLBACK posts */ curl_off_t contentlen; /* alternative length of contents field. Used if CURL_HTTPPOST_LARGE is set. Added in 7.46.0 */ }; /* This is a return code for the progress callback that, when returned, will signal libcurl to continue executing the default progress function */ #define CURL_PROGRESSFUNC_CONTINUE 0x10000001 /* This is the CURLOPT_PROGRESSFUNCTION callback prototype. It is now considered deprecated but was the only choice up until 7.31.0 */ typedef int (*curl_progress_callback)(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow); /* This is the CURLOPT_XFERINFOFUNCTION callback prototype. It was introduced in 7.32.0, avoids the use of floating point numbers and provides more detailed information. */ typedef int (*curl_xferinfo_callback)(void *clientp, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow); #ifndef CURL_MAX_READ_SIZE /* The maximum receive buffer size configurable via CURLOPT_BUFFERSIZE. */ #define CURL_MAX_READ_SIZE 524288 #endif #ifndef CURL_MAX_WRITE_SIZE /* Tests have proven that 20K is a very bad buffer size for uploads on Windows, while 16K for some odd reason performed a lot better. We do the ifndef check to allow this value to easier be changed at build time for those who feel adventurous. The practical minimum is about 400 bytes since libcurl uses a buffer of this size as a scratch area (unrelated to network send operations). */ #define CURL_MAX_WRITE_SIZE 16384 #endif #ifndef CURL_MAX_HTTP_HEADER /* The only reason to have a max limit for this is to avoid the risk of a bad server feeding libcurl with a never-ending header that will cause reallocs infinitely */ #define CURL_MAX_HTTP_HEADER (100*1024) #endif /* This is a magic return code for the write callback that, when returned, will signal libcurl to pause receiving on the current transfer. */ #define CURL_WRITEFUNC_PAUSE 0x10000001 typedef size_t (*curl_write_callback)(char *buffer, size_t size, size_t nitems, void *outstream); /* This callback will be called when a new resolver request is made */ typedef int (*curl_resolver_start_callback)(void *resolver_state, void *reserved, void *userdata); /* enumeration of file types */ typedef enum { CURLFILETYPE_FILE = 0, CURLFILETYPE_DIRECTORY, CURLFILETYPE_SYMLINK, CURLFILETYPE_DEVICE_BLOCK, CURLFILETYPE_DEVICE_CHAR, CURLFILETYPE_NAMEDPIPE, CURLFILETYPE_SOCKET, CURLFILETYPE_DOOR, /* is possible only on Sun Solaris now */ CURLFILETYPE_UNKNOWN /* should never occur */ } curlfiletype; #define CURLFINFOFLAG_KNOWN_FILENAME (1<<0) #define CURLFINFOFLAG_KNOWN_FILETYPE (1<<1) #define CURLFINFOFLAG_KNOWN_TIME (1<<2) #define CURLFINFOFLAG_KNOWN_PERM (1<<3) #define CURLFINFOFLAG_KNOWN_UID (1<<4) #define CURLFINFOFLAG_KNOWN_GID (1<<5) #define CURLFINFOFLAG_KNOWN_SIZE (1<<6) #define CURLFINFOFLAG_KNOWN_HLINKCOUNT (1<<7) /* Information about a single file, used when doing FTP wildcard matching */ struct curl_fileinfo { char *filename; curlfiletype filetype; time_t time; /* always zero! */ unsigned int perm; int uid; int gid; curl_off_t size; long int hardlinks; struct { /* If some of these fields is not NULL, it is a pointer to b_data. */ char *time; char *perm; char *user; char *group; char *target; /* pointer to the target filename of a symlink */ } strings; unsigned int flags; /* used internally */ char *b_data; size_t b_size; size_t b_used; }; /* return codes for CURLOPT_CHUNK_BGN_FUNCTION */ #define CURL_CHUNK_BGN_FUNC_OK 0 #define CURL_CHUNK_BGN_FUNC_FAIL 1 /* tell the lib to end the task */ #define CURL_CHUNK_BGN_FUNC_SKIP 2 /* skip this chunk over */ /* if splitting of data transfer is enabled, this callback is called before download of an individual chunk started. Note that parameter "remains" works only for FTP wildcard downloading (for now), otherwise is not used */ typedef long (*curl_chunk_bgn_callback)(const void *transfer_info, void *ptr, int remains); /* return codes for CURLOPT_CHUNK_END_FUNCTION */ #define CURL_CHUNK_END_FUNC_OK 0 #define CURL_CHUNK_END_FUNC_FAIL 1 /* tell the lib to end the task */ /* If splitting of data transfer is enabled this callback is called after download of an individual chunk finished. Note! After this callback was set then it have to be called FOR ALL chunks. Even if downloading of this chunk was skipped in CHUNK_BGN_FUNC. This is the reason why we don't need "transfer_info" parameter in this callback and we are not interested in "remains" parameter too. */ typedef long (*curl_chunk_end_callback)(void *ptr); /* return codes for FNMATCHFUNCTION */ #define CURL_FNMATCHFUNC_MATCH 0 /* string corresponds to the pattern */ #define CURL_FNMATCHFUNC_NOMATCH 1 /* pattern doesn't match the string */ #define CURL_FNMATCHFUNC_FAIL 2 /* an error occurred */ /* callback type for wildcard downloading pattern matching. If the string matches the pattern, return CURL_FNMATCHFUNC_MATCH value, etc. */ typedef int (*curl_fnmatch_callback)(void *ptr, const char *pattern, const char *string); /* These are the return codes for the seek callbacks */ #define CURL_SEEKFUNC_OK 0 #define CURL_SEEKFUNC_FAIL 1 /* fail the entire transfer */ #define CURL_SEEKFUNC_CANTSEEK 2 /* tell libcurl seeking can't be done, so libcurl might try other means instead */ typedef int (*curl_seek_callback)(void *instream, curl_off_t offset, int origin); /* 'whence' */ /* This is a return code for the read callback that, when returned, will signal libcurl to immediately abort the current transfer. */ #define CURL_READFUNC_ABORT 0x10000000 /* This is a return code for the read callback that, when returned, will signal libcurl to pause sending data on the current transfer. */ #define CURL_READFUNC_PAUSE 0x10000001 /* Return code for when the trailing headers' callback has terminated without any errors*/ #define CURL_TRAILERFUNC_OK 0 /* Return code for when was an error in the trailing header's list and we want to abort the request */ #define CURL_TRAILERFUNC_ABORT 1 typedef size_t (*curl_read_callback)(char *buffer, size_t size, size_t nitems, void *instream); typedef int (*curl_trailer_callback)(struct curl_slist **list, void *userdata); typedef enum { CURLSOCKTYPE_IPCXN, /* socket created for a specific IP connection */ CURLSOCKTYPE_ACCEPT, /* socket created by accept() call */ CURLSOCKTYPE_LAST /* never use */ } curlsocktype; /* The return code from the sockopt_callback can signal information back to libcurl: */ #define CURL_SOCKOPT_OK 0 #define CURL_SOCKOPT_ERROR 1 /* causes libcurl to abort and return CURLE_ABORTED_BY_CALLBACK */ #define CURL_SOCKOPT_ALREADY_CONNECTED 2 typedef int (*curl_sockopt_callback)(void *clientp, curl_socket_t curlfd, curlsocktype purpose); struct curl_sockaddr { int family; int socktype; int protocol; unsigned int addrlen; /* addrlen was a socklen_t type before 7.18.0 but it turned really ugly and painful on the systems that lack this type */ struct sockaddr addr; }; typedef curl_socket_t (*curl_opensocket_callback)(void *clientp, curlsocktype purpose, struct curl_sockaddr *address); typedef int (*curl_closesocket_callback)(void *clientp, curl_socket_t item); typedef enum { CURLIOE_OK, /* I/O operation successful */ CURLIOE_UNKNOWNCMD, /* command was unknown to callback */ CURLIOE_FAILRESTART, /* failed to restart the read */ CURLIOE_LAST /* never use */ } curlioerr; typedef enum { CURLIOCMD_NOP, /* no operation */ CURLIOCMD_RESTARTREAD, /* restart the read stream from start */ CURLIOCMD_LAST /* never use */ } curliocmd; typedef curlioerr (*curl_ioctl_callback)(CURL *handle, int cmd, void *clientp); #ifndef CURL_DID_MEMORY_FUNC_TYPEDEFS /* * The following typedef's are signatures of malloc, free, realloc, strdup and * calloc respectively. Function pointers of these types can be passed to the * curl_global_init_mem() function to set user defined memory management * callback routines. */ typedef void *(*curl_malloc_callback)(size_t size); typedef void (*curl_free_callback)(void *ptr); typedef void *(*curl_realloc_callback)(void *ptr, size_t size); typedef char *(*curl_strdup_callback)(const char *str); typedef void *(*curl_calloc_callback)(size_t nmemb, size_t size); #define CURL_DID_MEMORY_FUNC_TYPEDEFS #endif /* the kind of data that is passed to information_callback*/ typedef enum { CURLINFO_TEXT = 0, CURLINFO_HEADER_IN, /* 1 */ CURLINFO_HEADER_OUT, /* 2 */ CURLINFO_DATA_IN, /* 3 */ CURLINFO_DATA_OUT, /* 4 */ CURLINFO_SSL_DATA_IN, /* 5 */ CURLINFO_SSL_DATA_OUT, /* 6 */ CURLINFO_END } curl_infotype; typedef int (*curl_debug_callback) (CURL *handle, /* the handle/transfer this concerns */ curl_infotype type, /* what kind of data */ char *data, /* points to the data */ size_t size, /* size of the data pointed to */ void *userptr); /* whatever the user please */ /* All possible error codes from all sorts of curl functions. Future versions may return other values, stay prepared. Always add new return codes last. Never *EVER* remove any. The return codes must remain the same! */ typedef enum { CURLE_OK = 0, CURLE_UNSUPPORTED_PROTOCOL, /* 1 */ CURLE_FAILED_INIT, /* 2 */ CURLE_URL_MALFORMAT, /* 3 */ CURLE_NOT_BUILT_IN, /* 4 - [was obsoleted in August 2007 for 7.17.0, reused in April 2011 for 7.21.5] */ CURLE_COULDNT_RESOLVE_PROXY, /* 5 */ CURLE_COULDNT_RESOLVE_HOST, /* 6 */ CURLE_COULDNT_CONNECT, /* 7 */ CURLE_WEIRD_SERVER_REPLY, /* 8 */ CURLE_REMOTE_ACCESS_DENIED, /* 9 a service was denied by the server due to lack of access - when login fails this is not returned. */ CURLE_FTP_ACCEPT_FAILED, /* 10 - [was obsoleted in April 2006 for 7.15.4, reused in Dec 2011 for 7.24.0]*/ CURLE_FTP_WEIRD_PASS_REPLY, /* 11 */ CURLE_FTP_ACCEPT_TIMEOUT, /* 12 - timeout occurred accepting server [was obsoleted in August 2007 for 7.17.0, reused in Dec 2011 for 7.24.0]*/ CURLE_FTP_WEIRD_PASV_REPLY, /* 13 */ CURLE_FTP_WEIRD_227_FORMAT, /* 14 */ CURLE_FTP_CANT_GET_HOST, /* 15 */ CURLE_HTTP2, /* 16 - A problem in the http2 framing layer. [was obsoleted in August 2007 for 7.17.0, reused in July 2014 for 7.38.0] */ CURLE_FTP_COULDNT_SET_TYPE, /* 17 */ CURLE_PARTIAL_FILE, /* 18 */ CURLE_FTP_COULDNT_RETR_FILE, /* 19 */ CURLE_OBSOLETE20, /* 20 - NOT USED */ CURLE_QUOTE_ERROR, /* 21 - quote command failure */ CURLE_HTTP_RETURNED_ERROR, /* 22 */ CURLE_WRITE_ERROR, /* 23 */ CURLE_OBSOLETE24, /* 24 - NOT USED */ CURLE_UPLOAD_FAILED, /* 25 - failed upload "command" */ CURLE_READ_ERROR, /* 26 - couldn't open/read from file */ CURLE_OUT_OF_MEMORY, /* 27 */ /* Note: CURLE_OUT_OF_MEMORY may sometimes indicate a conversion error instead of a memory allocation error if CURL_DOES_CONVERSIONS is defined */ CURLE_OPERATION_TIMEDOUT, /* 28 - the timeout time was reached */ CURLE_OBSOLETE29, /* 29 - NOT USED */ CURLE_FTP_PORT_FAILED, /* 30 - FTP PORT operation failed */ CURLE_FTP_COULDNT_USE_REST, /* 31 - the REST command failed */ CURLE_OBSOLETE32, /* 32 - NOT USED */ CURLE_RANGE_ERROR, /* 33 - RANGE "command" didn't work */ CURLE_HTTP_POST_ERROR, /* 34 */ CURLE_SSL_CONNECT_ERROR, /* 35 - wrong when connecting with SSL */ CURLE_BAD_DOWNLOAD_RESUME, /* 36 - couldn't resume download */ CURLE_FILE_COULDNT_READ_FILE, /* 37 */ CURLE_LDAP_CANNOT_BIND, /* 38 */ CURLE_LDAP_SEARCH_FAILED, /* 39 */ CURLE_OBSOLETE40, /* 40 - NOT USED */ CURLE_FUNCTION_NOT_FOUND, /* 41 - NOT USED starting with 7.53.0 */ CURLE_ABORTED_BY_CALLBACK, /* 42 */ CURLE_BAD_FUNCTION_ARGUMENT, /* 43 */ CURLE_OBSOLETE44, /* 44 - NOT USED */ CURLE_INTERFACE_FAILED, /* 45 - CURLOPT_INTERFACE failed */ CURLE_OBSOLETE46, /* 46 - NOT USED */ CURLE_TOO_MANY_REDIRECTS, /* 47 - catch endless re-direct loops */ CURLE_UNKNOWN_OPTION, /* 48 - User specified an unknown option */ CURLE_TELNET_OPTION_SYNTAX, /* 49 - Malformed telnet option */ CURLE_OBSOLETE50, /* 50 - NOT USED */ CURLE_OBSOLETE51, /* 51 - NOT USED */ CURLE_GOT_NOTHING, /* 52 - when this is a specific error */ CURLE_SSL_ENGINE_NOTFOUND, /* 53 - SSL crypto engine not found */ CURLE_SSL_ENGINE_SETFAILED, /* 54 - can not set SSL crypto engine as default */ CURLE_SEND_ERROR, /* 55 - failed sending network data */ CURLE_RECV_ERROR, /* 56 - failure in receiving network data */ CURLE_OBSOLETE57, /* 57 - NOT IN USE */ CURLE_SSL_CERTPROBLEM, /* 58 - problem with the local certificate */ CURLE_SSL_CIPHER, /* 59 - couldn't use specified cipher */ CURLE_PEER_FAILED_VERIFICATION, /* 60 - peer's certificate or fingerprint wasn't verified fine */ CURLE_BAD_CONTENT_ENCODING, /* 61 - Unrecognized/bad encoding */ CURLE_LDAP_INVALID_URL, /* 62 - Invalid LDAP URL */ CURLE_FILESIZE_EXCEEDED, /* 63 - Maximum file size exceeded */ CURLE_USE_SSL_FAILED, /* 64 - Requested FTP SSL level failed */ CURLE_SEND_FAIL_REWIND, /* 65 - Sending the data requires a rewind that failed */ CURLE_SSL_ENGINE_INITFAILED, /* 66 - failed to initialise ENGINE */ CURLE_LOGIN_DENIED, /* 67 - user, password or similar was not accepted and we failed to login */ CURLE_TFTP_NOTFOUND, /* 68 - file not found on server */ CURLE_TFTP_PERM, /* 69 - permission problem on server */ CURLE_REMOTE_DISK_FULL, /* 70 - out of disk space on server */ CURLE_TFTP_ILLEGAL, /* 71 - Illegal TFTP operation */ CURLE_TFTP_UNKNOWNID, /* 72 - Unknown transfer ID */ CURLE_REMOTE_FILE_EXISTS, /* 73 - File already exists */ CURLE_TFTP_NOSUCHUSER, /* 74 - No such user */ CURLE_CONV_FAILED, /* 75 - conversion failed */ CURLE_CONV_REQD, /* 76 - caller must register conversion callbacks using curl_easy_setopt options CURLOPT_CONV_FROM_NETWORK_FUNCTION, CURLOPT_CONV_TO_NETWORK_FUNCTION, and CURLOPT_CONV_FROM_UTF8_FUNCTION */ CURLE_SSL_CACERT_BADFILE, /* 77 - could not load CACERT file, missing or wrong format */ CURLE_REMOTE_FILE_NOT_FOUND, /* 78 - remote file not found */ CURLE_SSH, /* 79 - error from the SSH layer, somewhat generic so the error message will be of interest when this has happened */ CURLE_SSL_SHUTDOWN_FAILED, /* 80 - Failed to shut down the SSL connection */ CURLE_AGAIN, /* 81 - socket is not ready for send/recv, wait till it's ready and try again (Added in 7.18.2) */ CURLE_SSL_CRL_BADFILE, /* 82 - could not load CRL file, missing or wrong format (Added in 7.19.0) */ CURLE_SSL_ISSUER_ERROR, /* 83 - Issuer check failed. (Added in 7.19.0) */ CURLE_FTP_PRET_FAILED, /* 84 - a PRET command failed */ CURLE_RTSP_CSEQ_ERROR, /* 85 - mismatch of RTSP CSeq numbers */ CURLE_RTSP_SESSION_ERROR, /* 86 - mismatch of RTSP Session Ids */ CURLE_FTP_BAD_FILE_LIST, /* 87 - unable to parse FTP file list */ CURLE_CHUNK_FAILED, /* 88 - chunk callback reported error */ CURLE_NO_CONNECTION_AVAILABLE, /* 89 - No connection available, the session will be queued */ CURLE_SSL_PINNEDPUBKEYNOTMATCH, /* 90 - specified pinned public key did not match */ CURLE_SSL_INVALIDCERTSTATUS, /* 91 - invalid certificate status */ CURLE_HTTP2_STREAM, /* 92 - stream error in HTTP/2 framing layer */ CURLE_RECURSIVE_API_CALL, /* 93 - an api function was called from inside a callback */ CURLE_AUTH_ERROR, /* 94 - an authentication function returned an error */ CURLE_HTTP3, /* 95 - An HTTP/3 layer problem */ CURLE_QUIC_CONNECT_ERROR, /* 96 - QUIC connection error */ CURLE_PROXY, /* 97 - proxy handshake error */ CURLE_SSL_CLIENTCERT, /* 98 - client-side certificate required */ CURL_LAST /* never use! */ } CURLcode; #ifndef CURL_NO_OLDIES /* define this to test if your app builds with all the obsolete stuff removed! */ /* Previously obsolete error code re-used in 7.38.0 */ #define CURLE_OBSOLETE16 CURLE_HTTP2 /* Previously obsolete error codes re-used in 7.24.0 */ #define CURLE_OBSOLETE10 CURLE_FTP_ACCEPT_FAILED #define CURLE_OBSOLETE12 CURLE_FTP_ACCEPT_TIMEOUT /* compatibility with older names */ #define CURLOPT_ENCODING CURLOPT_ACCEPT_ENCODING #define CURLE_FTP_WEIRD_SERVER_REPLY CURLE_WEIRD_SERVER_REPLY /* The following were added in 7.62.0 */ #define CURLE_SSL_CACERT CURLE_PEER_FAILED_VERIFICATION /* The following were added in 7.21.5, April 2011 */ #define CURLE_UNKNOWN_TELNET_OPTION CURLE_UNKNOWN_OPTION /* The following were added in 7.17.1 */ /* These are scheduled to disappear by 2009 */ #define CURLE_SSL_PEER_CERTIFICATE CURLE_PEER_FAILED_VERIFICATION /* The following were added in 7.17.0 */ /* These are scheduled to disappear by 2009 */ #define CURLE_OBSOLETE CURLE_OBSOLETE50 /* no one should be using this! */ #define CURLE_BAD_PASSWORD_ENTERED CURLE_OBSOLETE46 #define CURLE_BAD_CALLING_ORDER CURLE_OBSOLETE44 #define CURLE_FTP_USER_PASSWORD_INCORRECT CURLE_OBSOLETE10 #define CURLE_FTP_CANT_RECONNECT CURLE_OBSOLETE16 #define CURLE_FTP_COULDNT_GET_SIZE CURLE_OBSOLETE32 #define CURLE_FTP_COULDNT_SET_ASCII CURLE_OBSOLETE29 #define CURLE_FTP_WEIRD_USER_REPLY CURLE_OBSOLETE12 #define CURLE_FTP_WRITE_ERROR CURLE_OBSOLETE20 #define CURLE_LIBRARY_NOT_FOUND CURLE_OBSOLETE40 #define CURLE_MALFORMAT_USER CURLE_OBSOLETE24 #define CURLE_SHARE_IN_USE CURLE_OBSOLETE57 #define CURLE_URL_MALFORMAT_USER CURLE_NOT_BUILT_IN #define CURLE_FTP_ACCESS_DENIED CURLE_REMOTE_ACCESS_DENIED #define CURLE_FTP_COULDNT_SET_BINARY CURLE_FTP_COULDNT_SET_TYPE #define CURLE_FTP_QUOTE_ERROR CURLE_QUOTE_ERROR #define CURLE_TFTP_DISKFULL CURLE_REMOTE_DISK_FULL #define CURLE_TFTP_EXISTS CURLE_REMOTE_FILE_EXISTS #define CURLE_HTTP_RANGE_ERROR CURLE_RANGE_ERROR #define CURLE_FTP_SSL_FAILED CURLE_USE_SSL_FAILED /* The following were added earlier */ #define CURLE_OPERATION_TIMEOUTED CURLE_OPERATION_TIMEDOUT #define CURLE_HTTP_NOT_FOUND CURLE_HTTP_RETURNED_ERROR #define CURLE_HTTP_PORT_FAILED CURLE_INTERFACE_FAILED #define CURLE_FTP_COULDNT_STOR_FILE CURLE_UPLOAD_FAILED #define CURLE_FTP_PARTIAL_FILE CURLE_PARTIAL_FILE #define CURLE_FTP_BAD_DOWNLOAD_RESUME CURLE_BAD_DOWNLOAD_RESUME /* This was the error code 50 in 7.7.3 and a few earlier versions, this is no longer used by libcurl but is instead #defined here only to not make programs break */ #define CURLE_ALREADY_COMPLETE 99999 /* Provide defines for really old option names */ #define CURLOPT_FILE CURLOPT_WRITEDATA /* name changed in 7.9.7 */ #define CURLOPT_INFILE CURLOPT_READDATA /* name changed in 7.9.7 */ #define CURLOPT_WRITEHEADER CURLOPT_HEADERDATA /* Since long deprecated options with no code in the lib that does anything with them. */ #define CURLOPT_WRITEINFO CURLOPT_OBSOLETE40 #define CURLOPT_CLOSEPOLICY CURLOPT_OBSOLETE72 #endif /*!CURL_NO_OLDIES*/ /* * Proxy error codes. Returned in CURLINFO_PROXY_ERROR if CURLE_PROXY was * return for the transfers. */ typedef enum { CURLPX_OK, CURLPX_BAD_ADDRESS_TYPE, CURLPX_BAD_VERSION, CURLPX_CLOSED, CURLPX_GSSAPI, CURLPX_GSSAPI_PERMSG, CURLPX_GSSAPI_PROTECTION, CURLPX_IDENTD, CURLPX_IDENTD_DIFFER, CURLPX_LONG_HOSTNAME, CURLPX_LONG_PASSWD, CURLPX_LONG_USER, CURLPX_NO_AUTH, CURLPX_RECV_ADDRESS, CURLPX_RECV_AUTH, CURLPX_RECV_CONNECT, CURLPX_RECV_REQACK, CURLPX_REPLY_ADDRESS_TYPE_NOT_SUPPORTED, CURLPX_REPLY_COMMAND_NOT_SUPPORTED, CURLPX_REPLY_CONNECTION_REFUSED, CURLPX_REPLY_GENERAL_SERVER_FAILURE, CURLPX_REPLY_HOST_UNREACHABLE, CURLPX_REPLY_NETWORK_UNREACHABLE, CURLPX_REPLY_NOT_ALLOWED, CURLPX_REPLY_TTL_EXPIRED, CURLPX_REPLY_UNASSIGNED, CURLPX_REQUEST_FAILED, CURLPX_RESOLVE_HOST, CURLPX_SEND_AUTH, CURLPX_SEND_CONNECT, CURLPX_SEND_REQUEST, CURLPX_UNKNOWN_FAIL, CURLPX_UNKNOWN_MODE, CURLPX_USER_REJECTED, CURLPX_LAST /* never use */ } CURLproxycode; /* This prototype applies to all conversion callbacks */ typedef CURLcode (*curl_conv_callback)(char *buffer, size_t length); typedef CURLcode (*curl_ssl_ctx_callback)(CURL *curl, /* easy handle */ void *ssl_ctx, /* actually an OpenSSL or WolfSSL SSL_CTX, or an mbedTLS mbedtls_ssl_config */ void *userptr); typedef enum { CURLPROXY_HTTP = 0, /* added in 7.10, new in 7.19.4 default is to use CONNECT HTTP/1.1 */ CURLPROXY_HTTP_1_0 = 1, /* added in 7.19.4, force to use CONNECT HTTP/1.0 */ CURLPROXY_HTTPS = 2, /* added in 7.52.0 */ CURLPROXY_SOCKS4 = 4, /* support added in 7.15.2, enum existed already in 7.10 */ CURLPROXY_SOCKS5 = 5, /* added in 7.10 */ CURLPROXY_SOCKS4A = 6, /* added in 7.18.0 */ CURLPROXY_SOCKS5_HOSTNAME = 7 /* Use the SOCKS5 protocol but pass along the host name rather than the IP address. added in 7.18.0 */ } curl_proxytype; /* this enum was added in 7.10 */ /* * Bitmasks for CURLOPT_HTTPAUTH and CURLOPT_PROXYAUTH options: * * CURLAUTH_NONE - No HTTP authentication * CURLAUTH_BASIC - HTTP Basic authentication (default) * CURLAUTH_DIGEST - HTTP Digest authentication * CURLAUTH_NEGOTIATE - HTTP Negotiate (SPNEGO) authentication * CURLAUTH_GSSNEGOTIATE - Alias for CURLAUTH_NEGOTIATE (deprecated) * CURLAUTH_NTLM - HTTP NTLM authentication * CURLAUTH_DIGEST_IE - HTTP Digest authentication with IE flavour * CURLAUTH_NTLM_WB - HTTP NTLM authentication delegated to winbind helper * CURLAUTH_BEARER - HTTP Bearer token authentication * CURLAUTH_ONLY - Use together with a single other type to force no * authentication or just that single type * CURLAUTH_ANY - All fine types set * CURLAUTH_ANYSAFE - All fine types except Basic */ #define CURLAUTH_NONE ((unsigned long)0) #define CURLAUTH_BASIC (((unsigned long)1)<<0) #define CURLAUTH_DIGEST (((unsigned long)1)<<1) #define CURLAUTH_NEGOTIATE (((unsigned long)1)<<2) /* Deprecated since the advent of CURLAUTH_NEGOTIATE */ #define CURLAUTH_GSSNEGOTIATE CURLAUTH_NEGOTIATE /* Used for CURLOPT_SOCKS5_AUTH to stay terminologically correct */ #define CURLAUTH_GSSAPI CURLAUTH_NEGOTIATE #define CURLAUTH_NTLM (((unsigned long)1)<<3) #define CURLAUTH_DIGEST_IE (((unsigned long)1)<<4) #define CURLAUTH_NTLM_WB (((unsigned long)1)<<5) #define CURLAUTH_BEARER (((unsigned long)1)<<6) #define CURLAUTH_AWS_SIGV4 (((unsigned long)1)<<7) #define CURLAUTH_ONLY (((unsigned long)1)<<31) #define CURLAUTH_ANY (~CURLAUTH_DIGEST_IE) #define CURLAUTH_ANYSAFE (~(CURLAUTH_BASIC|CURLAUTH_DIGEST_IE)) #define CURLSSH_AUTH_ANY ~0 /* all types supported by the server */ #define CURLSSH_AUTH_NONE 0 /* none allowed, silly but complete */ #define CURLSSH_AUTH_PUBLICKEY (1<<0) /* public/private key files */ #define CURLSSH_AUTH_PASSWORD (1<<1) /* password */ #define CURLSSH_AUTH_HOST (1<<2) /* host key files */ #define CURLSSH_AUTH_KEYBOARD (1<<3) /* keyboard interactive */ #define CURLSSH_AUTH_AGENT (1<<4) /* agent (ssh-agent, pageant...) */ #define CURLSSH_AUTH_GSSAPI (1<<5) /* gssapi (kerberos, ...) */ #define CURLSSH_AUTH_DEFAULT CURLSSH_AUTH_ANY #define CURLGSSAPI_DELEGATION_NONE 0 /* no delegation (default) */ #define CURLGSSAPI_DELEGATION_POLICY_FLAG (1<<0) /* if permitted by policy */ #define CURLGSSAPI_DELEGATION_FLAG (1<<1) /* delegate always */ #define CURL_ERROR_SIZE 256 enum curl_khtype { CURLKHTYPE_UNKNOWN, CURLKHTYPE_RSA1, CURLKHTYPE_RSA, CURLKHTYPE_DSS, CURLKHTYPE_ECDSA, CURLKHTYPE_ED25519 }; struct curl_khkey { const char *key; /* points to a null-terminated string encoded with base64 if len is zero, otherwise to the "raw" data */ size_t len; enum curl_khtype keytype; }; /* this is the set of return values expected from the curl_sshkeycallback callback */ enum curl_khstat { CURLKHSTAT_FINE_ADD_TO_FILE, CURLKHSTAT_FINE, CURLKHSTAT_REJECT, /* reject the connection, return an error */ CURLKHSTAT_DEFER, /* do not accept it, but we can't answer right now so this causes a CURLE_DEFER error but otherwise the connection will be left intact etc */ CURLKHSTAT_FINE_REPLACE, /* accept and replace the wrong key*/ CURLKHSTAT_LAST /* not for use, only a marker for last-in-list */ }; /* this is the set of status codes pass in to the callback */ enum curl_khmatch { CURLKHMATCH_OK, /* match */ CURLKHMATCH_MISMATCH, /* host found, key mismatch! */ CURLKHMATCH_MISSING, /* no matching host/key found */ CURLKHMATCH_LAST /* not for use, only a marker for last-in-list */ }; typedef int (*curl_sshkeycallback) (CURL *easy, /* easy handle */ const struct curl_khkey *knownkey, /* known */ const struct curl_khkey *foundkey, /* found */ enum curl_khmatch, /* libcurl's view on the keys */ void *clientp); /* custom pointer passed from app */ /* parameter for the CURLOPT_USE_SSL option */ typedef enum { CURLUSESSL_NONE, /* do not attempt to use SSL */ CURLUSESSL_TRY, /* try using SSL, proceed anyway otherwise */ CURLUSESSL_CONTROL, /* SSL for the control connection or fail */ CURLUSESSL_ALL, /* SSL for all communication or fail */ CURLUSESSL_LAST /* not an option, never use */ } curl_usessl; /* Definition of bits for the CURLOPT_SSL_OPTIONS argument: */ /* - ALLOW_BEAST tells libcurl to allow the BEAST SSL vulnerability in the name of improving interoperability with older servers. Some SSL libraries have introduced work-arounds for this flaw but those work-arounds sometimes make the SSL communication fail. To regain functionality with those broken servers, a user can this way allow the vulnerability back. */ #define CURLSSLOPT_ALLOW_BEAST (1<<0) /* - NO_REVOKE tells libcurl to disable certificate revocation checks for those SSL backends where such behavior is present. */ #define CURLSSLOPT_NO_REVOKE (1<<1) /* - NO_PARTIALCHAIN tells libcurl to *NOT* accept a partial certificate chain if possible. The OpenSSL backend has this ability. */ #define CURLSSLOPT_NO_PARTIALCHAIN (1<<2) /* - REVOKE_BEST_EFFORT tells libcurl to ignore certificate revocation offline checks and ignore missing revocation list for those SSL backends where such behavior is present. */ #define CURLSSLOPT_REVOKE_BEST_EFFORT (1<<3) /* - CURLSSLOPT_NATIVE_CA tells libcurl to use standard certificate store of operating system. Currently implemented under MS-Windows. */ #define CURLSSLOPT_NATIVE_CA (1<<4) /* - CURLSSLOPT_AUTO_CLIENT_CERT tells libcurl to automatically locate and use a client certificate for authentication. (Schannel) */ #define CURLSSLOPT_AUTO_CLIENT_CERT (1<<5) /* The default connection attempt delay in milliseconds for happy eyeballs. CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3 and happy-eyeballs-timeout-ms.d document this value, keep them in sync. */ #define CURL_HET_DEFAULT 200L /* The default connection upkeep interval in milliseconds. */ #define CURL_UPKEEP_INTERVAL_DEFAULT 60000L #ifndef CURL_NO_OLDIES /* define this to test if your app builds with all the obsolete stuff removed! */ /* Backwards compatibility with older names */ /* These are scheduled to disappear by 2009 */ #define CURLFTPSSL_NONE CURLUSESSL_NONE #define CURLFTPSSL_TRY CURLUSESSL_TRY #define CURLFTPSSL_CONTROL CURLUSESSL_CONTROL #define CURLFTPSSL_ALL CURLUSESSL_ALL #define CURLFTPSSL_LAST CURLUSESSL_LAST #define curl_ftpssl curl_usessl #endif /*!CURL_NO_OLDIES*/ /* parameter for the CURLOPT_FTP_SSL_CCC option */ typedef enum { CURLFTPSSL_CCC_NONE, /* do not send CCC */ CURLFTPSSL_CCC_PASSIVE, /* Let the server initiate the shutdown */ CURLFTPSSL_CCC_ACTIVE, /* Initiate the shutdown */ CURLFTPSSL_CCC_LAST /* not an option, never use */ } curl_ftpccc; /* parameter for the CURLOPT_FTPSSLAUTH option */ typedef enum { CURLFTPAUTH_DEFAULT, /* let libcurl decide */ CURLFTPAUTH_SSL, /* use "AUTH SSL" */ CURLFTPAUTH_TLS, /* use "AUTH TLS" */ CURLFTPAUTH_LAST /* not an option, never use */ } curl_ftpauth; /* parameter for the CURLOPT_FTP_CREATE_MISSING_DIRS option */ typedef enum { CURLFTP_CREATE_DIR_NONE, /* do NOT create missing dirs! */ CURLFTP_CREATE_DIR, /* (FTP/SFTP) if CWD fails, try MKD and then CWD again if MKD succeeded, for SFTP this does similar magic */ CURLFTP_CREATE_DIR_RETRY, /* (FTP only) if CWD fails, try MKD and then CWD again even if MKD failed! */ CURLFTP_CREATE_DIR_LAST /* not an option, never use */ } curl_ftpcreatedir; /* parameter for the CURLOPT_FTP_FILEMETHOD option */ typedef enum { CURLFTPMETHOD_DEFAULT, /* let libcurl pick */ CURLFTPMETHOD_MULTICWD, /* single CWD operation for each path part */ CURLFTPMETHOD_NOCWD, /* no CWD at all */ CURLFTPMETHOD_SINGLECWD, /* one CWD to full dir, then work on file */ CURLFTPMETHOD_LAST /* not an option, never use */ } curl_ftpmethod; /* bitmask defines for CURLOPT_HEADEROPT */ #define CURLHEADER_UNIFIED 0 #define CURLHEADER_SEPARATE (1<<0) /* CURLALTSVC_* are bits for the CURLOPT_ALTSVC_CTRL option */ #define CURLALTSVC_READONLYFILE (1<<2) #define CURLALTSVC_H1 (1<<3) #define CURLALTSVC_H2 (1<<4) #define CURLALTSVC_H3 (1<<5) struct curl_hstsentry { char *name; size_t namelen; unsigned int includeSubDomains:1; char expire[18]; /* YYYYMMDD HH:MM:SS [null-terminated] */ }; struct curl_index { size_t index; /* the provided entry's "index" or count */ size_t total; /* total number of entries to save */ }; typedef enum { CURLSTS_OK, CURLSTS_DONE, CURLSTS_FAIL } CURLSTScode; typedef CURLSTScode (*curl_hstsread_callback)(CURL *easy, struct curl_hstsentry *e, void *userp); typedef CURLSTScode (*curl_hstswrite_callback)(CURL *easy, struct curl_hstsentry *e, struct curl_index *i, void *userp); /* CURLHSTS_* are bits for the CURLOPT_HSTS option */ #define CURLHSTS_ENABLE (long)(1<<0) #define CURLHSTS_READONLYFILE (long)(1<<1) /* CURLPROTO_ defines are for the CURLOPT_*PROTOCOLS options */ #define CURLPROTO_HTTP (1<<0) #define CURLPROTO_HTTPS (1<<1) #define CURLPROTO_FTP (1<<2) #define CURLPROTO_FTPS (1<<3) #define CURLPROTO_SCP (1<<4) #define CURLPROTO_SFTP (1<<5) #define CURLPROTO_TELNET (1<<6) #define CURLPROTO_LDAP (1<<7) #define CURLPROTO_LDAPS (1<<8) #define CURLPROTO_DICT (1<<9) #define CURLPROTO_FILE (1<<10) #define CURLPROTO_TFTP (1<<11) #define CURLPROTO_IMAP (1<<12) #define CURLPROTO_IMAPS (1<<13) #define CURLPROTO_POP3 (1<<14) #define CURLPROTO_POP3S (1<<15) #define CURLPROTO_SMTP (1<<16) #define CURLPROTO_SMTPS (1<<17) #define CURLPROTO_RTSP (1<<18) #define CURLPROTO_RTMP (1<<19) #define CURLPROTO_RTMPT (1<<20) #define CURLPROTO_RTMPE (1<<21) #define CURLPROTO_RTMPTE (1<<22) #define CURLPROTO_RTMPS (1<<23) #define CURLPROTO_RTMPTS (1<<24) #define CURLPROTO_GOPHER (1<<25) #define CURLPROTO_SMB (1<<26) #define CURLPROTO_SMBS (1<<27) #define CURLPROTO_MQTT (1<<28) #define CURLPROTO_GOPHERS (1<<29) #define CURLPROTO_ALL (~0) /* enable everything */ /* long may be 32 or 64 bits, but we should never depend on anything else but 32 */ #define CURLOPTTYPE_LONG 0 #define CURLOPTTYPE_OBJECTPOINT 10000 #define CURLOPTTYPE_FUNCTIONPOINT 20000 #define CURLOPTTYPE_OFF_T 30000 #define CURLOPTTYPE_BLOB 40000 /* *STRINGPOINT is an alias for OBJECTPOINT to allow tools to extract the string options from the header file */ #define CURLOPT(na,t,nu) na = t + nu /* CURLOPT aliases that make no run-time difference */ /* 'char *' argument to a string with a trailing zero */ #define CURLOPTTYPE_STRINGPOINT CURLOPTTYPE_OBJECTPOINT /* 'struct curl_slist *' argument */ #define CURLOPTTYPE_SLISTPOINT CURLOPTTYPE_OBJECTPOINT /* 'void *' argument passed untouched to callback */ #define CURLOPTTYPE_CBPOINT CURLOPTTYPE_OBJECTPOINT /* 'long' argument with a set of values/bitmask */ #define CURLOPTTYPE_VALUES CURLOPTTYPE_LONG /* * All CURLOPT_* values. */ typedef enum { /* This is the FILE * or void * the regular output should be written to. */ CURLOPT(CURLOPT_WRITEDATA, CURLOPTTYPE_CBPOINT, 1), /* The full URL to get/put */ CURLOPT(CURLOPT_URL, CURLOPTTYPE_STRINGPOINT, 2), /* Port number to connect to, if other than default. */ CURLOPT(CURLOPT_PORT, CURLOPTTYPE_LONG, 3), /* Name of proxy to use. */ CURLOPT(CURLOPT_PROXY, CURLOPTTYPE_STRINGPOINT, 4), /* "user:password;options" to use when fetching. */ CURLOPT(CURLOPT_USERPWD, CURLOPTTYPE_STRINGPOINT, 5), /* "user:password" to use with proxy. */ CURLOPT(CURLOPT_PROXYUSERPWD, CURLOPTTYPE_STRINGPOINT, 6), /* Range to get, specified as an ASCII string. */ CURLOPT(CURLOPT_RANGE, CURLOPTTYPE_STRINGPOINT, 7), /* not used */ /* Specified file stream to upload from (use as input): */ CURLOPT(CURLOPT_READDATA, CURLOPTTYPE_CBPOINT, 9), /* Buffer to receive error messages in, must be at least CURL_ERROR_SIZE * bytes big. */ CURLOPT(CURLOPT_ERRORBUFFER, CURLOPTTYPE_OBJECTPOINT, 10), /* Function that will be called to store the output (instead of fwrite). The * parameters will use fwrite() syntax, make sure to follow them. */ CURLOPT(CURLOPT_WRITEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 11), /* Function that will be called to read the input (instead of fread). The * parameters will use fread() syntax, make sure to follow them. */ CURLOPT(CURLOPT_READFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 12), /* Time-out the read operation after this amount of seconds */ CURLOPT(CURLOPT_TIMEOUT, CURLOPTTYPE_LONG, 13), /* If the CURLOPT_INFILE is used, this can be used to inform libcurl about * how large the file being sent really is. That allows better error * checking and better verifies that the upload was successful. -1 means * unknown size. * * For large file support, there is also a _LARGE version of the key * which takes an off_t type, allowing platforms with larger off_t * sizes to handle larger files. See below for INFILESIZE_LARGE. */ CURLOPT(CURLOPT_INFILESIZE, CURLOPTTYPE_LONG, 14), /* POST static input fields. */ CURLOPT(CURLOPT_POSTFIELDS, CURLOPTTYPE_OBJECTPOINT, 15), /* Set the referrer page (needed by some CGIs) */ CURLOPT(CURLOPT_REFERER, CURLOPTTYPE_STRINGPOINT, 16), /* Set the FTP PORT string (interface name, named or numerical IP address) Use i.e '-' to use default address. */ CURLOPT(CURLOPT_FTPPORT, CURLOPTTYPE_STRINGPOINT, 17), /* Set the User-Agent string (examined by some CGIs) */ CURLOPT(CURLOPT_USERAGENT, CURLOPTTYPE_STRINGPOINT, 18), /* If the download receives less than "low speed limit" bytes/second * during "low speed time" seconds, the operations is aborted. * You could i.e if you have a pretty high speed connection, abort if * it is less than 2000 bytes/sec during 20 seconds. */ /* Set the "low speed limit" */ CURLOPT(CURLOPT_LOW_SPEED_LIMIT, CURLOPTTYPE_LONG, 19), /* Set the "low speed time" */ CURLOPT(CURLOPT_LOW_SPEED_TIME, CURLOPTTYPE_LONG, 20), /* Set the continuation offset. * * Note there is also a _LARGE version of this key which uses * off_t types, allowing for large file offsets on platforms which * use larger-than-32-bit off_t's. Look below for RESUME_FROM_LARGE. */ CURLOPT(CURLOPT_RESUME_FROM, CURLOPTTYPE_LONG, 21), /* Set cookie in request: */ CURLOPT(CURLOPT_COOKIE, CURLOPTTYPE_STRINGPOINT, 22), /* This points to a linked list of headers, struct curl_slist kind. This list is also used for RTSP (in spite of its name) */ CURLOPT(CURLOPT_HTTPHEADER, CURLOPTTYPE_SLISTPOINT, 23), /* This points to a linked list of post entries, struct curl_httppost */ CURLOPT(CURLOPT_HTTPPOST, CURLOPTTYPE_OBJECTPOINT, 24), /* name of the file keeping your private SSL-certificate */ CURLOPT(CURLOPT_SSLCERT, CURLOPTTYPE_STRINGPOINT, 25), /* password for the SSL or SSH private key */ CURLOPT(CURLOPT_KEYPASSWD, CURLOPTTYPE_STRINGPOINT, 26), /* send TYPE parameter? */ CURLOPT(CURLOPT_CRLF, CURLOPTTYPE_LONG, 27), /* send linked-list of QUOTE commands */ CURLOPT(CURLOPT_QUOTE, CURLOPTTYPE_SLISTPOINT, 28), /* send FILE * or void * to store headers to, if you use a callback it is simply passed to the callback unmodified */ CURLOPT(CURLOPT_HEADERDATA, CURLOPTTYPE_CBPOINT, 29), /* point to a file to read the initial cookies from, also enables "cookie awareness" */ CURLOPT(CURLOPT_COOKIEFILE, CURLOPTTYPE_STRINGPOINT, 31), /* What version to specifically try to use. See CURL_SSLVERSION defines below. */ CURLOPT(CURLOPT_SSLVERSION, CURLOPTTYPE_VALUES, 32), /* What kind of HTTP time condition to use, see defines */ CURLOPT(CURLOPT_TIMECONDITION, CURLOPTTYPE_VALUES, 33), /* Time to use with the above condition. Specified in number of seconds since 1 Jan 1970 */ CURLOPT(CURLOPT_TIMEVALUE, CURLOPTTYPE_LONG, 34), /* 35 = OBSOLETE */ /* Custom request, for customizing the get command like HTTP: DELETE, TRACE and others FTP: to use a different list command */ CURLOPT(CURLOPT_CUSTOMREQUEST, CURLOPTTYPE_STRINGPOINT, 36), /* FILE handle to use instead of stderr */ CURLOPT(CURLOPT_STDERR, CURLOPTTYPE_OBJECTPOINT, 37), /* 38 is not used */ /* send linked-list of post-transfer QUOTE commands */ CURLOPT(CURLOPT_POSTQUOTE, CURLOPTTYPE_SLISTPOINT, 39), /* OBSOLETE, do not use! */ CURLOPT(CURLOPT_OBSOLETE40, CURLOPTTYPE_OBJECTPOINT, 40), /* talk a lot */ CURLOPT(CURLOPT_VERBOSE, CURLOPTTYPE_LONG, 41), /* throw the header out too */ CURLOPT(CURLOPT_HEADER, CURLOPTTYPE_LONG, 42), /* shut off the progress meter */ CURLOPT(CURLOPT_NOPROGRESS, CURLOPTTYPE_LONG, 43), /* use HEAD to get http document */ CURLOPT(CURLOPT_NOBODY, CURLOPTTYPE_LONG, 44), /* no output on http error codes >= 400 */ CURLOPT(CURLOPT_FAILONERROR, CURLOPTTYPE_LONG, 45), /* this is an upload */ CURLOPT(CURLOPT_UPLOAD, CURLOPTTYPE_LONG, 46), /* HTTP POST method */ CURLOPT(CURLOPT_POST, CURLOPTTYPE_LONG, 47), /* bare names when listing directories */ CURLOPT(CURLOPT_DIRLISTONLY, CURLOPTTYPE_LONG, 48), /* Append instead of overwrite on upload! */ CURLOPT(CURLOPT_APPEND, CURLOPTTYPE_LONG, 50), /* Specify whether to read the user+password from the .netrc or the URL. * This must be one of the CURL_NETRC_* enums below. */ CURLOPT(CURLOPT_NETRC, CURLOPTTYPE_VALUES, 51), /* use Location: Luke! */ CURLOPT(CURLOPT_FOLLOWLOCATION, CURLOPTTYPE_LONG, 52), /* transfer data in text/ASCII format */ CURLOPT(CURLOPT_TRANSFERTEXT, CURLOPTTYPE_LONG, 53), /* HTTP PUT */ CURLOPT(CURLOPT_PUT, CURLOPTTYPE_LONG, 54), /* 55 = OBSOLETE */ /* DEPRECATED * Function that will be called instead of the internal progress display * function. This function should be defined as the curl_progress_callback * prototype defines. */ CURLOPT(CURLOPT_PROGRESSFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 56), /* Data passed to the CURLOPT_PROGRESSFUNCTION and CURLOPT_XFERINFOFUNCTION callbacks */ CURLOPT(CURLOPT_XFERINFODATA, CURLOPTTYPE_CBPOINT, 57), #define CURLOPT_PROGRESSDATA CURLOPT_XFERINFODATA /* We want the referrer field set automatically when following locations */ CURLOPT(CURLOPT_AUTOREFERER, CURLOPTTYPE_LONG, 58), /* Port of the proxy, can be set in the proxy string as well with: "[host]:[port]" */ CURLOPT(CURLOPT_PROXYPORT, CURLOPTTYPE_LONG, 59), /* size of the POST input data, if strlen() is not good to use */ CURLOPT(CURLOPT_POSTFIELDSIZE, CURLOPTTYPE_LONG, 60), /* tunnel non-http operations through a HTTP proxy */ CURLOPT(CURLOPT_HTTPPROXYTUNNEL, CURLOPTTYPE_LONG, 61), /* Set the interface string to use as outgoing network interface */ CURLOPT(CURLOPT_INTERFACE, CURLOPTTYPE_STRINGPOINT, 62), /* Set the krb4/5 security level, this also enables krb4/5 awareness. This * is a string, 'clear', 'safe', 'confidential' or 'private'. If the string * is set but doesn't match one of these, 'private' will be used. */ CURLOPT(CURLOPT_KRBLEVEL, CURLOPTTYPE_STRINGPOINT, 63), /* Set if we should verify the peer in ssl handshake, set 1 to verify. */ CURLOPT(CURLOPT_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 64), /* The CApath or CAfile used to validate the peer certificate this option is used only if SSL_VERIFYPEER is true */ CURLOPT(CURLOPT_CAINFO, CURLOPTTYPE_STRINGPOINT, 65), /* 66 = OBSOLETE */ /* 67 = OBSOLETE */ /* Maximum number of http redirects to follow */ CURLOPT(CURLOPT_MAXREDIRS, CURLOPTTYPE_LONG, 68), /* Pass a long set to 1 to get the date of the requested document (if possible)! Pass a zero to shut it off. */ CURLOPT(CURLOPT_FILETIME, CURLOPTTYPE_LONG, 69), /* This points to a linked list of telnet options */ CURLOPT(CURLOPT_TELNETOPTIONS, CURLOPTTYPE_SLISTPOINT, 70), /* Max amount of cached alive connections */ CURLOPT(CURLOPT_MAXCONNECTS, CURLOPTTYPE_LONG, 71), /* OBSOLETE, do not use! */ CURLOPT(CURLOPT_OBSOLETE72, CURLOPTTYPE_LONG, 72), /* 73 = OBSOLETE */ /* Set to explicitly use a new connection for the upcoming transfer. Do not use this unless you're absolutely sure of this, as it makes the operation slower and is less friendly for the network. */ CURLOPT(CURLOPT_FRESH_CONNECT, CURLOPTTYPE_LONG, 74), /* Set to explicitly forbid the upcoming transfer's connection to be re-used when done. Do not use this unless you're absolutely sure of this, as it makes the operation slower and is less friendly for the network. */ CURLOPT(CURLOPT_FORBID_REUSE, CURLOPTTYPE_LONG, 75), /* Set to a file name that contains random data for libcurl to use to seed the random engine when doing SSL connects. */ CURLOPT(CURLOPT_RANDOM_FILE, CURLOPTTYPE_STRINGPOINT, 76), /* Set to the Entropy Gathering Daemon socket pathname */ CURLOPT(CURLOPT_EGDSOCKET, CURLOPTTYPE_STRINGPOINT, 77), /* Time-out connect operations after this amount of seconds, if connects are OK within this time, then fine... This only aborts the connect phase. */ CURLOPT(CURLOPT_CONNECTTIMEOUT, CURLOPTTYPE_LONG, 78), /* Function that will be called to store headers (instead of fwrite). The * parameters will use fwrite() syntax, make sure to follow them. */ CURLOPT(CURLOPT_HEADERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 79), /* Set this to force the HTTP request to get back to GET. Only really usable if POST, PUT or a custom request have been used first. */ CURLOPT(CURLOPT_HTTPGET, CURLOPTTYPE_LONG, 80), /* Set if we should verify the Common name from the peer certificate in ssl * handshake, set 1 to check existence, 2 to ensure that it matches the * provided hostname. */ CURLOPT(CURLOPT_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 81), /* Specify which file name to write all known cookies in after completed operation. Set file name to "-" (dash) to make it go to stdout. */ CURLOPT(CURLOPT_COOKIEJAR, CURLOPTTYPE_STRINGPOINT, 82), /* Specify which SSL ciphers to use */ CURLOPT(CURLOPT_SSL_CIPHER_LIST, CURLOPTTYPE_STRINGPOINT, 83), /* Specify which HTTP version to use! This must be set to one of the CURL_HTTP_VERSION* enums set below. */ CURLOPT(CURLOPT_HTTP_VERSION, CURLOPTTYPE_VALUES, 84), /* Specifically switch on or off the FTP engine's use of the EPSV command. By default, that one will always be attempted before the more traditional PASV command. */ CURLOPT(CURLOPT_FTP_USE_EPSV, CURLOPTTYPE_LONG, 85), /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") */ CURLOPT(CURLOPT_SSLCERTTYPE, CURLOPTTYPE_STRINGPOINT, 86), /* name of the file keeping your private SSL-key */ CURLOPT(CURLOPT_SSLKEY, CURLOPTTYPE_STRINGPOINT, 87), /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") */ CURLOPT(CURLOPT_SSLKEYTYPE, CURLOPTTYPE_STRINGPOINT, 88), /* crypto engine for the SSL-sub system */ CURLOPT(CURLOPT_SSLENGINE, CURLOPTTYPE_STRINGPOINT, 89), /* set the crypto engine for the SSL-sub system as default the param has no meaning... */ CURLOPT(CURLOPT_SSLENGINE_DEFAULT, CURLOPTTYPE_LONG, 90), /* Non-zero value means to use the global dns cache */ /* DEPRECATED, do not use! */ CURLOPT(CURLOPT_DNS_USE_GLOBAL_CACHE, CURLOPTTYPE_LONG, 91), /* DNS cache timeout */ CURLOPT(CURLOPT_DNS_CACHE_TIMEOUT, CURLOPTTYPE_LONG, 92), /* send linked-list of pre-transfer QUOTE commands */ CURLOPT(CURLOPT_PREQUOTE, CURLOPTTYPE_SLISTPOINT, 93), /* set the debug function */ CURLOPT(CURLOPT_DEBUGFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 94), /* set the data for the debug function */ CURLOPT(CURLOPT_DEBUGDATA, CURLOPTTYPE_CBPOINT, 95), /* mark this as start of a cookie session */ CURLOPT(CURLOPT_COOKIESESSION, CURLOPTTYPE_LONG, 96), /* The CApath directory used to validate the peer certificate this option is used only if SSL_VERIFYPEER is true */ CURLOPT(CURLOPT_CAPATH, CURLOPTTYPE_STRINGPOINT, 97), /* Instruct libcurl to use a smaller receive buffer */ CURLOPT(CURLOPT_BUFFERSIZE, CURLOPTTYPE_LONG, 98), /* Instruct libcurl to not use any signal/alarm handlers, even when using timeouts. This option is useful for multi-threaded applications. See libcurl-the-guide for more background information. */ CURLOPT(CURLOPT_NOSIGNAL, CURLOPTTYPE_LONG, 99), /* Provide a CURLShare for mutexing non-ts data */ CURLOPT(CURLOPT_SHARE, CURLOPTTYPE_OBJECTPOINT, 100), /* indicates type of proxy. accepted values are CURLPROXY_HTTP (default), CURLPROXY_HTTPS, CURLPROXY_SOCKS4, CURLPROXY_SOCKS4A and CURLPROXY_SOCKS5. */ CURLOPT(CURLOPT_PROXYTYPE, CURLOPTTYPE_VALUES, 101), /* Set the Accept-Encoding string. Use this to tell a server you would like the response to be compressed. Before 7.21.6, this was known as CURLOPT_ENCODING */ CURLOPT(CURLOPT_ACCEPT_ENCODING, CURLOPTTYPE_STRINGPOINT, 102), /* Set pointer to private data */ CURLOPT(CURLOPT_PRIVATE, CURLOPTTYPE_OBJECTPOINT, 103), /* Set aliases for HTTP 200 in the HTTP Response header */ CURLOPT(CURLOPT_HTTP200ALIASES, CURLOPTTYPE_SLISTPOINT, 104), /* Continue to send authentication (user+password) when following locations, even when hostname changed. This can potentially send off the name and password to whatever host the server decides. */ CURLOPT(CURLOPT_UNRESTRICTED_AUTH, CURLOPTTYPE_LONG, 105), /* Specifically switch on or off the FTP engine's use of the EPRT command ( it also disables the LPRT attempt). By default, those ones will always be attempted before the good old traditional PORT command. */ CURLOPT(CURLOPT_FTP_USE_EPRT, CURLOPTTYPE_LONG, 106), /* Set this to a bitmask value to enable the particular authentications methods you like. Use this in combination with CURLOPT_USERPWD. Note that setting multiple bits may cause extra network round-trips. */ CURLOPT(CURLOPT_HTTPAUTH, CURLOPTTYPE_VALUES, 107), /* Set the ssl context callback function, currently only for OpenSSL or WolfSSL ssl_ctx, or mbedTLS mbedtls_ssl_config in the second argument. The function must match the curl_ssl_ctx_callback prototype. */ CURLOPT(CURLOPT_SSL_CTX_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 108), /* Set the userdata for the ssl context callback function's third argument */ CURLOPT(CURLOPT_SSL_CTX_DATA, CURLOPTTYPE_CBPOINT, 109), /* FTP Option that causes missing dirs to be created on the remote server. In 7.19.4 we introduced the convenience enums for this option using the CURLFTP_CREATE_DIR prefix. */ CURLOPT(CURLOPT_FTP_CREATE_MISSING_DIRS, CURLOPTTYPE_LONG, 110), /* Set this to a bitmask value to enable the particular authentications methods you like. Use this in combination with CURLOPT_PROXYUSERPWD. Note that setting multiple bits may cause extra network round-trips. */ CURLOPT(CURLOPT_PROXYAUTH, CURLOPTTYPE_VALUES, 111), /* FTP option that changes the timeout, in seconds, associated with getting a response. This is different from transfer timeout time and essentially places a demand on the FTP server to acknowledge commands in a timely manner. */ CURLOPT(CURLOPT_FTP_RESPONSE_TIMEOUT, CURLOPTTYPE_LONG, 112), #define CURLOPT_SERVER_RESPONSE_TIMEOUT CURLOPT_FTP_RESPONSE_TIMEOUT /* Set this option to one of the CURL_IPRESOLVE_* defines (see below) to tell libcurl to use those IP versions only. This only has effect on systems with support for more than one, i.e IPv4 _and_ IPv6. */ CURLOPT(CURLOPT_IPRESOLVE, CURLOPTTYPE_VALUES, 113), /* Set this option to limit the size of a file that will be downloaded from an HTTP or FTP server. Note there is also _LARGE version which adds large file support for platforms which have larger off_t sizes. See MAXFILESIZE_LARGE below. */ CURLOPT(CURLOPT_MAXFILESIZE, CURLOPTTYPE_LONG, 114), /* See the comment for INFILESIZE above, but in short, specifies * the size of the file being uploaded. -1 means unknown. */ CURLOPT(CURLOPT_INFILESIZE_LARGE, CURLOPTTYPE_OFF_T, 115), /* Sets the continuation offset. There is also a CURLOPTTYPE_LONG version * of this; look above for RESUME_FROM. */ CURLOPT(CURLOPT_RESUME_FROM_LARGE, CURLOPTTYPE_OFF_T, 116), /* Sets the maximum size of data that will be downloaded from * an HTTP or FTP server. See MAXFILESIZE above for the LONG version. */ CURLOPT(CURLOPT_MAXFILESIZE_LARGE, CURLOPTTYPE_OFF_T, 117), /* Set this option to the file name of your .netrc file you want libcurl to parse (using the CURLOPT_NETRC option). If not set, libcurl will do a poor attempt to find the user's home directory and check for a .netrc file in there. */ CURLOPT(CURLOPT_NETRC_FILE, CURLOPTTYPE_STRINGPOINT, 118), /* Enable SSL/TLS for FTP, pick one of: CURLUSESSL_TRY - try using SSL, proceed anyway otherwise CURLUSESSL_CONTROL - SSL for the control connection or fail CURLUSESSL_ALL - SSL for all communication or fail */ CURLOPT(CURLOPT_USE_SSL, CURLOPTTYPE_VALUES, 119), /* The _LARGE version of the standard POSTFIELDSIZE option */ CURLOPT(CURLOPT_POSTFIELDSIZE_LARGE, CURLOPTTYPE_OFF_T, 120), /* Enable/disable the TCP Nagle algorithm */ CURLOPT(CURLOPT_TCP_NODELAY, CURLOPTTYPE_LONG, 121), /* 122 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ /* 123 OBSOLETE. Gone in 7.16.0 */ /* 124 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ /* 125 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ /* 126 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ /* 127 OBSOLETE. Gone in 7.16.0 */ /* 128 OBSOLETE. Gone in 7.16.0 */ /* When FTP over SSL/TLS is selected (with CURLOPT_USE_SSL), this option can be used to change libcurl's default action which is to first try "AUTH SSL" and then "AUTH TLS" in this order, and proceed when a OK response has been received. Available parameters are: CURLFTPAUTH_DEFAULT - let libcurl decide CURLFTPAUTH_SSL - try "AUTH SSL" first, then TLS CURLFTPAUTH_TLS - try "AUTH TLS" first, then SSL */ CURLOPT(CURLOPT_FTPSSLAUTH, CURLOPTTYPE_VALUES, 129), CURLOPT(CURLOPT_IOCTLFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 130), CURLOPT(CURLOPT_IOCTLDATA, CURLOPTTYPE_CBPOINT, 131), /* 132 OBSOLETE. Gone in 7.16.0 */ /* 133 OBSOLETE. Gone in 7.16.0 */ /* null-terminated string for pass on to the FTP server when asked for "account" info */ CURLOPT(CURLOPT_FTP_ACCOUNT, CURLOPTTYPE_STRINGPOINT, 134), /* feed cookie into cookie engine */ CURLOPT(CURLOPT_COOKIELIST, CURLOPTTYPE_STRINGPOINT, 135), /* ignore Content-Length */ CURLOPT(CURLOPT_IGNORE_CONTENT_LENGTH, CURLOPTTYPE_LONG, 136), /* Set to non-zero to skip the IP address received in a 227 PASV FTP server response. Typically used for FTP-SSL purposes but is not restricted to that. libcurl will then instead use the same IP address it used for the control connection. */ CURLOPT(CURLOPT_FTP_SKIP_PASV_IP, CURLOPTTYPE_LONG, 137), /* Select "file method" to use when doing FTP, see the curl_ftpmethod above. */ CURLOPT(CURLOPT_FTP_FILEMETHOD, CURLOPTTYPE_VALUES, 138), /* Local port number to bind the socket to */ CURLOPT(CURLOPT_LOCALPORT, CURLOPTTYPE_LONG, 139), /* Number of ports to try, including the first one set with LOCALPORT. Thus, setting it to 1 will make no additional attempts but the first. */ CURLOPT(CURLOPT_LOCALPORTRANGE, CURLOPTTYPE_LONG, 140), /* no transfer, set up connection and let application use the socket by extracting it with CURLINFO_LASTSOCKET */ CURLOPT(CURLOPT_CONNECT_ONLY, CURLOPTTYPE_LONG, 141), /* Function that will be called to convert from the network encoding (instead of using the iconv calls in libcurl) */ CURLOPT(CURLOPT_CONV_FROM_NETWORK_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 142), /* Function that will be called to convert to the network encoding (instead of using the iconv calls in libcurl) */ CURLOPT(CURLOPT_CONV_TO_NETWORK_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 143), /* Function that will be called to convert from UTF8 (instead of using the iconv calls in libcurl) Note that this is used only for SSL certificate processing */ CURLOPT(CURLOPT_CONV_FROM_UTF8_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 144), /* if the connection proceeds too quickly then need to slow it down */ /* limit-rate: maximum number of bytes per second to send or receive */ CURLOPT(CURLOPT_MAX_SEND_SPEED_LARGE, CURLOPTTYPE_OFF_T, 145), CURLOPT(CURLOPT_MAX_RECV_SPEED_LARGE, CURLOPTTYPE_OFF_T, 146), /* Pointer to command string to send if USER/PASS fails. */ CURLOPT(CURLOPT_FTP_ALTERNATIVE_TO_USER, CURLOPTTYPE_STRINGPOINT, 147), /* callback function for setting socket options */ CURLOPT(CURLOPT_SOCKOPTFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 148), CURLOPT(CURLOPT_SOCKOPTDATA, CURLOPTTYPE_CBPOINT, 149), /* set to 0 to disable session ID re-use for this transfer, default is enabled (== 1) */ CURLOPT(CURLOPT_SSL_SESSIONID_CACHE, CURLOPTTYPE_LONG, 150), /* allowed SSH authentication methods */ CURLOPT(CURLOPT_SSH_AUTH_TYPES, CURLOPTTYPE_VALUES, 151), /* Used by scp/sftp to do public/private key authentication */ CURLOPT(CURLOPT_SSH_PUBLIC_KEYFILE, CURLOPTTYPE_STRINGPOINT, 152), CURLOPT(CURLOPT_SSH_PRIVATE_KEYFILE, CURLOPTTYPE_STRINGPOINT, 153), /* Send CCC (Clear Command Channel) after authentication */ CURLOPT(CURLOPT_FTP_SSL_CCC, CURLOPTTYPE_LONG, 154), /* Same as TIMEOUT and CONNECTTIMEOUT, but with ms resolution */ CURLOPT(CURLOPT_TIMEOUT_MS, CURLOPTTYPE_LONG, 155), CURLOPT(CURLOPT_CONNECTTIMEOUT_MS, CURLOPTTYPE_LONG, 156), /* set to zero to disable the libcurl's decoding and thus pass the raw body data to the application even when it is encoded/compressed */ CURLOPT(CURLOPT_HTTP_TRANSFER_DECODING, CURLOPTTYPE_LONG, 157), CURLOPT(CURLOPT_HTTP_CONTENT_DECODING, CURLOPTTYPE_LONG, 158), /* Permission used when creating new files and directories on the remote server for protocols that support it, SFTP/SCP/FILE */ CURLOPT(CURLOPT_NEW_FILE_PERMS, CURLOPTTYPE_LONG, 159), CURLOPT(CURLOPT_NEW_DIRECTORY_PERMS, CURLOPTTYPE_LONG, 160), /* Set the behavior of POST when redirecting. Values must be set to one of CURL_REDIR* defines below. This used to be called CURLOPT_POST301 */ CURLOPT(CURLOPT_POSTREDIR, CURLOPTTYPE_VALUES, 161), /* used by scp/sftp to verify the host's public key */ CURLOPT(CURLOPT_SSH_HOST_PUBLIC_KEY_MD5, CURLOPTTYPE_STRINGPOINT, 162), /* Callback function for opening socket (instead of socket(2)). Optionally, callback is able change the address or refuse to connect returning CURL_SOCKET_BAD. The callback should have type curl_opensocket_callback */ CURLOPT(CURLOPT_OPENSOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 163), CURLOPT(CURLOPT_OPENSOCKETDATA, CURLOPTTYPE_CBPOINT, 164), /* POST volatile input fields. */ CURLOPT(CURLOPT_COPYPOSTFIELDS, CURLOPTTYPE_OBJECTPOINT, 165), /* set transfer mode (;type=) when doing FTP via an HTTP proxy */ CURLOPT(CURLOPT_PROXY_TRANSFER_MODE, CURLOPTTYPE_LONG, 166), /* Callback function for seeking in the input stream */ CURLOPT(CURLOPT_SEEKFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 167), CURLOPT(CURLOPT_SEEKDATA, CURLOPTTYPE_CBPOINT, 168), /* CRL file */ CURLOPT(CURLOPT_CRLFILE, CURLOPTTYPE_STRINGPOINT, 169), /* Issuer certificate */ CURLOPT(CURLOPT_ISSUERCERT, CURLOPTTYPE_STRINGPOINT, 170), /* (IPv6) Address scope */ CURLOPT(CURLOPT_ADDRESS_SCOPE, CURLOPTTYPE_LONG, 171), /* Collect certificate chain info and allow it to get retrievable with CURLINFO_CERTINFO after the transfer is complete. */ CURLOPT(CURLOPT_CERTINFO, CURLOPTTYPE_LONG, 172), /* "name" and "pwd" to use when fetching. */ CURLOPT(CURLOPT_USERNAME, CURLOPTTYPE_STRINGPOINT, 173), CURLOPT(CURLOPT_PASSWORD, CURLOPTTYPE_STRINGPOINT, 174), /* "name" and "pwd" to use with Proxy when fetching. */ CURLOPT(CURLOPT_PROXYUSERNAME, CURLOPTTYPE_STRINGPOINT, 175), CURLOPT(CURLOPT_PROXYPASSWORD, CURLOPTTYPE_STRINGPOINT, 176), /* Comma separated list of hostnames defining no-proxy zones. These should match both hostnames directly, and hostnames within a domain. For example, local.com will match local.com and www.local.com, but NOT notlocal.com or www.notlocal.com. For compatibility with other implementations of this, .local.com will be considered to be the same as local.com. A single * is the only valid wildcard, and effectively disables the use of proxy. */ CURLOPT(CURLOPT_NOPROXY, CURLOPTTYPE_STRINGPOINT, 177), /* block size for TFTP transfers */ CURLOPT(CURLOPT_TFTP_BLKSIZE, CURLOPTTYPE_LONG, 178), /* Socks Service */ /* DEPRECATED, do not use! */ CURLOPT(CURLOPT_SOCKS5_GSSAPI_SERVICE, CURLOPTTYPE_STRINGPOINT, 179), /* Socks Service */ CURLOPT(CURLOPT_SOCKS5_GSSAPI_NEC, CURLOPTTYPE_LONG, 180), /* set the bitmask for the protocols that are allowed to be used for the transfer, which thus helps the app which takes URLs from users or other external inputs and want to restrict what protocol(s) to deal with. Defaults to CURLPROTO_ALL. */ CURLOPT(CURLOPT_PROTOCOLS, CURLOPTTYPE_LONG, 181), /* set the bitmask for the protocols that libcurl is allowed to follow to, as a subset of the CURLOPT_PROTOCOLS ones. That means the protocol needs to be set in both bitmasks to be allowed to get redirected to. */ CURLOPT(CURLOPT_REDIR_PROTOCOLS, CURLOPTTYPE_LONG, 182), /* set the SSH knownhost file name to use */ CURLOPT(CURLOPT_SSH_KNOWNHOSTS, CURLOPTTYPE_STRINGPOINT, 183), /* set the SSH host key callback, must point to a curl_sshkeycallback function */ CURLOPT(CURLOPT_SSH_KEYFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 184), /* set the SSH host key callback custom pointer */ CURLOPT(CURLOPT_SSH_KEYDATA, CURLOPTTYPE_CBPOINT, 185), /* set the SMTP mail originator */ CURLOPT(CURLOPT_MAIL_FROM, CURLOPTTYPE_STRINGPOINT, 186), /* set the list of SMTP mail receiver(s) */ CURLOPT(CURLOPT_MAIL_RCPT, CURLOPTTYPE_SLISTPOINT, 187), /* FTP: send PRET before PASV */ CURLOPT(CURLOPT_FTP_USE_PRET, CURLOPTTYPE_LONG, 188), /* RTSP request method (OPTIONS, SETUP, PLAY, etc...) */ CURLOPT(CURLOPT_RTSP_REQUEST, CURLOPTTYPE_VALUES, 189), /* The RTSP session identifier */ CURLOPT(CURLOPT_RTSP_SESSION_ID, CURLOPTTYPE_STRINGPOINT, 190), /* The RTSP stream URI */ CURLOPT(CURLOPT_RTSP_STREAM_URI, CURLOPTTYPE_STRINGPOINT, 191), /* The Transport: header to use in RTSP requests */ CURLOPT(CURLOPT_RTSP_TRANSPORT, CURLOPTTYPE_STRINGPOINT, 192), /* Manually initialize the client RTSP CSeq for this handle */ CURLOPT(CURLOPT_RTSP_CLIENT_CSEQ, CURLOPTTYPE_LONG, 193), /* Manually initialize the server RTSP CSeq for this handle */ CURLOPT(CURLOPT_RTSP_SERVER_CSEQ, CURLOPTTYPE_LONG, 194), /* The stream to pass to INTERLEAVEFUNCTION. */ CURLOPT(CURLOPT_INTERLEAVEDATA, CURLOPTTYPE_CBPOINT, 195), /* Let the application define a custom write method for RTP data */ CURLOPT(CURLOPT_INTERLEAVEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 196), /* Turn on wildcard matching */ CURLOPT(CURLOPT_WILDCARDMATCH, CURLOPTTYPE_LONG, 197), /* Directory matching callback called before downloading of an individual file (chunk) started */ CURLOPT(CURLOPT_CHUNK_BGN_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 198), /* Directory matching callback called after the file (chunk) was downloaded, or skipped */ CURLOPT(CURLOPT_CHUNK_END_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 199), /* Change match (fnmatch-like) callback for wildcard matching */ CURLOPT(CURLOPT_FNMATCH_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 200), /* Let the application define custom chunk data pointer */ CURLOPT(CURLOPT_CHUNK_DATA, CURLOPTTYPE_CBPOINT, 201), /* FNMATCH_FUNCTION user pointer */ CURLOPT(CURLOPT_FNMATCH_DATA, CURLOPTTYPE_CBPOINT, 202), /* send linked-list of name:port:address sets */ CURLOPT(CURLOPT_RESOLVE, CURLOPTTYPE_SLISTPOINT, 203), /* Set a username for authenticated TLS */ CURLOPT(CURLOPT_TLSAUTH_USERNAME, CURLOPTTYPE_STRINGPOINT, 204), /* Set a password for authenticated TLS */ CURLOPT(CURLOPT_TLSAUTH_PASSWORD, CURLOPTTYPE_STRINGPOINT, 205), /* Set authentication type for authenticated TLS */ CURLOPT(CURLOPT_TLSAUTH_TYPE, CURLOPTTYPE_STRINGPOINT, 206), /* Set to 1 to enable the "TE:" header in HTTP requests to ask for compressed transfer-encoded responses. Set to 0 to disable the use of TE: in outgoing requests. The current default is 0, but it might change in a future libcurl release. libcurl will ask for the compressed methods it knows of, and if that isn't any, it will not ask for transfer-encoding at all even if this option is set to 1. */ CURLOPT(CURLOPT_TRANSFER_ENCODING, CURLOPTTYPE_LONG, 207), /* Callback function for closing socket (instead of close(2)). The callback should have type curl_closesocket_callback */ CURLOPT(CURLOPT_CLOSESOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 208), CURLOPT(CURLOPT_CLOSESOCKETDATA, CURLOPTTYPE_CBPOINT, 209), /* allow GSSAPI credential delegation */ CURLOPT(CURLOPT_GSSAPI_DELEGATION, CURLOPTTYPE_VALUES, 210), /* Set the name servers to use for DNS resolution */ CURLOPT(CURLOPT_DNS_SERVERS, CURLOPTTYPE_STRINGPOINT, 211), /* Time-out accept operations (currently for FTP only) after this amount of milliseconds. */ CURLOPT(CURLOPT_ACCEPTTIMEOUT_MS, CURLOPTTYPE_LONG, 212), /* Set TCP keepalive */ CURLOPT(CURLOPT_TCP_KEEPALIVE, CURLOPTTYPE_LONG, 213), /* non-universal keepalive knobs (Linux, AIX, HP-UX, more) */ CURLOPT(CURLOPT_TCP_KEEPIDLE, CURLOPTTYPE_LONG, 214), CURLOPT(CURLOPT_TCP_KEEPINTVL, CURLOPTTYPE_LONG, 215), /* Enable/disable specific SSL features with a bitmask, see CURLSSLOPT_* */ CURLOPT(CURLOPT_SSL_OPTIONS, CURLOPTTYPE_VALUES, 216), /* Set the SMTP auth originator */ CURLOPT(CURLOPT_MAIL_AUTH, CURLOPTTYPE_STRINGPOINT, 217), /* Enable/disable SASL initial response */ CURLOPT(CURLOPT_SASL_IR, CURLOPTTYPE_LONG, 218), /* Function that will be called instead of the internal progress display * function. This function should be defined as the curl_xferinfo_callback * prototype defines. (Deprecates CURLOPT_PROGRESSFUNCTION) */ CURLOPT(CURLOPT_XFERINFOFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 219), /* The XOAUTH2 bearer token */ CURLOPT(CURLOPT_XOAUTH2_BEARER, CURLOPTTYPE_STRINGPOINT, 220), /* Set the interface string to use as outgoing network * interface for DNS requests. * Only supported by the c-ares DNS backend */ CURLOPT(CURLOPT_DNS_INTERFACE, CURLOPTTYPE_STRINGPOINT, 221), /* Set the local IPv4 address to use for outgoing DNS requests. * Only supported by the c-ares DNS backend */ CURLOPT(CURLOPT_DNS_LOCAL_IP4, CURLOPTTYPE_STRINGPOINT, 222), /* Set the local IPv6 address to use for outgoing DNS requests. * Only supported by the c-ares DNS backend */ CURLOPT(CURLOPT_DNS_LOCAL_IP6, CURLOPTTYPE_STRINGPOINT, 223), /* Set authentication options directly */ CURLOPT(CURLOPT_LOGIN_OPTIONS, CURLOPTTYPE_STRINGPOINT, 224), /* Enable/disable TLS NPN extension (http2 over ssl might fail without) */ CURLOPT(CURLOPT_SSL_ENABLE_NPN, CURLOPTTYPE_LONG, 225), /* Enable/disable TLS ALPN extension (http2 over ssl might fail without) */ CURLOPT(CURLOPT_SSL_ENABLE_ALPN, CURLOPTTYPE_LONG, 226), /* Time to wait for a response to a HTTP request containing an * Expect: 100-continue header before sending the data anyway. */ CURLOPT(CURLOPT_EXPECT_100_TIMEOUT_MS, CURLOPTTYPE_LONG, 227), /* This points to a linked list of headers used for proxy requests only, struct curl_slist kind */ CURLOPT(CURLOPT_PROXYHEADER, CURLOPTTYPE_SLISTPOINT, 228), /* Pass in a bitmask of "header options" */ CURLOPT(CURLOPT_HEADEROPT, CURLOPTTYPE_VALUES, 229), /* The public key in DER form used to validate the peer public key this option is used only if SSL_VERIFYPEER is true */ CURLOPT(CURLOPT_PINNEDPUBLICKEY, CURLOPTTYPE_STRINGPOINT, 230), /* Path to Unix domain socket */ CURLOPT(CURLOPT_UNIX_SOCKET_PATH, CURLOPTTYPE_STRINGPOINT, 231), /* Set if we should verify the certificate status. */ CURLOPT(CURLOPT_SSL_VERIFYSTATUS, CURLOPTTYPE_LONG, 232), /* Set if we should enable TLS false start. */ CURLOPT(CURLOPT_SSL_FALSESTART, CURLOPTTYPE_LONG, 233), /* Do not squash dot-dot sequences */ CURLOPT(CURLOPT_PATH_AS_IS, CURLOPTTYPE_LONG, 234), /* Proxy Service Name */ CURLOPT(CURLOPT_PROXY_SERVICE_NAME, CURLOPTTYPE_STRINGPOINT, 235), /* Service Name */ CURLOPT(CURLOPT_SERVICE_NAME, CURLOPTTYPE_STRINGPOINT, 236), /* Wait/don't wait for pipe/mutex to clarify */ CURLOPT(CURLOPT_PIPEWAIT, CURLOPTTYPE_LONG, 237), /* Set the protocol used when curl is given a URL without a protocol */ CURLOPT(CURLOPT_DEFAULT_PROTOCOL, CURLOPTTYPE_STRINGPOINT, 238), /* Set stream weight, 1 - 256 (default is 16) */ CURLOPT(CURLOPT_STREAM_WEIGHT, CURLOPTTYPE_LONG, 239), /* Set stream dependency on another CURL handle */ CURLOPT(CURLOPT_STREAM_DEPENDS, CURLOPTTYPE_OBJECTPOINT, 240), /* Set E-xclusive stream dependency on another CURL handle */ CURLOPT(CURLOPT_STREAM_DEPENDS_E, CURLOPTTYPE_OBJECTPOINT, 241), /* Do not send any tftp option requests to the server */ CURLOPT(CURLOPT_TFTP_NO_OPTIONS, CURLOPTTYPE_LONG, 242), /* Linked-list of host:port:connect-to-host:connect-to-port, overrides the URL's host:port (only for the network layer) */ CURLOPT(CURLOPT_CONNECT_TO, CURLOPTTYPE_SLISTPOINT, 243), /* Set TCP Fast Open */ CURLOPT(CURLOPT_TCP_FASTOPEN, CURLOPTTYPE_LONG, 244), /* Continue to send data if the server responds early with an * HTTP status code >= 300 */ CURLOPT(CURLOPT_KEEP_SENDING_ON_ERROR, CURLOPTTYPE_LONG, 245), /* The CApath or CAfile used to validate the proxy certificate this option is used only if PROXY_SSL_VERIFYPEER is true */ CURLOPT(CURLOPT_PROXY_CAINFO, CURLOPTTYPE_STRINGPOINT, 246), /* The CApath directory used to validate the proxy certificate this option is used only if PROXY_SSL_VERIFYPEER is true */ CURLOPT(CURLOPT_PROXY_CAPATH, CURLOPTTYPE_STRINGPOINT, 247), /* Set if we should verify the proxy in ssl handshake, set 1 to verify. */ CURLOPT(CURLOPT_PROXY_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 248), /* Set if we should verify the Common name from the proxy certificate in ssl * handshake, set 1 to check existence, 2 to ensure that it matches * the provided hostname. */ CURLOPT(CURLOPT_PROXY_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 249), /* What version to specifically try to use for proxy. See CURL_SSLVERSION defines below. */ CURLOPT(CURLOPT_PROXY_SSLVERSION, CURLOPTTYPE_VALUES, 250), /* Set a username for authenticated TLS for proxy */ CURLOPT(CURLOPT_PROXY_TLSAUTH_USERNAME, CURLOPTTYPE_STRINGPOINT, 251), /* Set a password for authenticated TLS for proxy */ CURLOPT(CURLOPT_PROXY_TLSAUTH_PASSWORD, CURLOPTTYPE_STRINGPOINT, 252), /* Set authentication type for authenticated TLS for proxy */ CURLOPT(CURLOPT_PROXY_TLSAUTH_TYPE, CURLOPTTYPE_STRINGPOINT, 253), /* name of the file keeping your private SSL-certificate for proxy */ CURLOPT(CURLOPT_PROXY_SSLCERT, CURLOPTTYPE_STRINGPOINT, 254), /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") for proxy */ CURLOPT(CURLOPT_PROXY_SSLCERTTYPE, CURLOPTTYPE_STRINGPOINT, 255), /* name of the file keeping your private SSL-key for proxy */ CURLOPT(CURLOPT_PROXY_SSLKEY, CURLOPTTYPE_STRINGPOINT, 256), /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") for proxy */ CURLOPT(CURLOPT_PROXY_SSLKEYTYPE, CURLOPTTYPE_STRINGPOINT, 257), /* password for the SSL private key for proxy */ CURLOPT(CURLOPT_PROXY_KEYPASSWD, CURLOPTTYPE_STRINGPOINT, 258), /* Specify which SSL ciphers to use for proxy */ CURLOPT(CURLOPT_PROXY_SSL_CIPHER_LIST, CURLOPTTYPE_STRINGPOINT, 259), /* CRL file for proxy */ CURLOPT(CURLOPT_PROXY_CRLFILE, CURLOPTTYPE_STRINGPOINT, 260), /* Enable/disable specific SSL features with a bitmask for proxy, see CURLSSLOPT_* */ CURLOPT(CURLOPT_PROXY_SSL_OPTIONS, CURLOPTTYPE_LONG, 261), /* Name of pre proxy to use. */ CURLOPT(CURLOPT_PRE_PROXY, CURLOPTTYPE_STRINGPOINT, 262), /* The public key in DER form used to validate the proxy public key this option is used only if PROXY_SSL_VERIFYPEER is true */ CURLOPT(CURLOPT_PROXY_PINNEDPUBLICKEY, CURLOPTTYPE_STRINGPOINT, 263), /* Path to an abstract Unix domain socket */ CURLOPT(CURLOPT_ABSTRACT_UNIX_SOCKET, CURLOPTTYPE_STRINGPOINT, 264), /* Suppress proxy CONNECT response headers from user callbacks */ CURLOPT(CURLOPT_SUPPRESS_CONNECT_HEADERS, CURLOPTTYPE_LONG, 265), /* The request target, instead of extracted from the URL */ CURLOPT(CURLOPT_REQUEST_TARGET, CURLOPTTYPE_STRINGPOINT, 266), /* bitmask of allowed auth methods for connections to SOCKS5 proxies */ CURLOPT(CURLOPT_SOCKS5_AUTH, CURLOPTTYPE_LONG, 267), /* Enable/disable SSH compression */ CURLOPT(CURLOPT_SSH_COMPRESSION, CURLOPTTYPE_LONG, 268), /* Post MIME data. */ CURLOPT(CURLOPT_MIMEPOST, CURLOPTTYPE_OBJECTPOINT, 269), /* Time to use with the CURLOPT_TIMECONDITION. Specified in number of seconds since 1 Jan 1970. */ CURLOPT(CURLOPT_TIMEVALUE_LARGE, CURLOPTTYPE_OFF_T, 270), /* Head start in milliseconds to give happy eyeballs. */ CURLOPT(CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS, CURLOPTTYPE_LONG, 271), /* Function that will be called before a resolver request is made */ CURLOPT(CURLOPT_RESOLVER_START_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 272), /* User data to pass to the resolver start callback. */ CURLOPT(CURLOPT_RESOLVER_START_DATA, CURLOPTTYPE_CBPOINT, 273), /* send HAProxy PROXY protocol header? */ CURLOPT(CURLOPT_HAPROXYPROTOCOL, CURLOPTTYPE_LONG, 274), /* shuffle addresses before use when DNS returns multiple */ CURLOPT(CURLOPT_DNS_SHUFFLE_ADDRESSES, CURLOPTTYPE_LONG, 275), /* Specify which TLS 1.3 ciphers suites to use */ CURLOPT(CURLOPT_TLS13_CIPHERS, CURLOPTTYPE_STRINGPOINT, 276), CURLOPT(CURLOPT_PROXY_TLS13_CIPHERS, CURLOPTTYPE_STRINGPOINT, 277), /* Disallow specifying username/login in URL. */ CURLOPT(CURLOPT_DISALLOW_USERNAME_IN_URL, CURLOPTTYPE_LONG, 278), /* DNS-over-HTTPS URL */ CURLOPT(CURLOPT_DOH_URL, CURLOPTTYPE_STRINGPOINT, 279), /* Preferred buffer size to use for uploads */ CURLOPT(CURLOPT_UPLOAD_BUFFERSIZE, CURLOPTTYPE_LONG, 280), /* Time in ms between connection upkeep calls for long-lived connections. */ CURLOPT(CURLOPT_UPKEEP_INTERVAL_MS, CURLOPTTYPE_LONG, 281), /* Specify URL using CURL URL API. */ CURLOPT(CURLOPT_CURLU, CURLOPTTYPE_OBJECTPOINT, 282), /* add trailing data just after no more data is available */ CURLOPT(CURLOPT_TRAILERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 283), /* pointer to be passed to HTTP_TRAILER_FUNCTION */ CURLOPT(CURLOPT_TRAILERDATA, CURLOPTTYPE_CBPOINT, 284), /* set this to 1L to allow HTTP/0.9 responses or 0L to disallow */ CURLOPT(CURLOPT_HTTP09_ALLOWED, CURLOPTTYPE_LONG, 285), /* alt-svc control bitmask */ CURLOPT(CURLOPT_ALTSVC_CTRL, CURLOPTTYPE_LONG, 286), /* alt-svc cache file name to possibly read from/write to */ CURLOPT(CURLOPT_ALTSVC, CURLOPTTYPE_STRINGPOINT, 287), /* maximum age of a connection to consider it for reuse (in seconds) */ CURLOPT(CURLOPT_MAXAGE_CONN, CURLOPTTYPE_LONG, 288), /* SASL authorisation identity */ CURLOPT(CURLOPT_SASL_AUTHZID, CURLOPTTYPE_STRINGPOINT, 289), /* allow RCPT TO command to fail for some recipients */ CURLOPT(CURLOPT_MAIL_RCPT_ALLLOWFAILS, CURLOPTTYPE_LONG, 290), /* the private SSL-certificate as a "blob" */ CURLOPT(CURLOPT_SSLCERT_BLOB, CURLOPTTYPE_BLOB, 291), CURLOPT(CURLOPT_SSLKEY_BLOB, CURLOPTTYPE_BLOB, 292), CURLOPT(CURLOPT_PROXY_SSLCERT_BLOB, CURLOPTTYPE_BLOB, 293), CURLOPT(CURLOPT_PROXY_SSLKEY_BLOB, CURLOPTTYPE_BLOB, 294), CURLOPT(CURLOPT_ISSUERCERT_BLOB, CURLOPTTYPE_BLOB, 295), /* Issuer certificate for proxy */ CURLOPT(CURLOPT_PROXY_ISSUERCERT, CURLOPTTYPE_STRINGPOINT, 296), CURLOPT(CURLOPT_PROXY_ISSUERCERT_BLOB, CURLOPTTYPE_BLOB, 297), /* the EC curves requested by the TLS client (RFC 8422, 5.1); * OpenSSL support via 'set_groups'/'set_curves': * https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set1_groups.html */ CURLOPT(CURLOPT_SSL_EC_CURVES, CURLOPTTYPE_STRINGPOINT, 298), /* HSTS bitmask */ CURLOPT(CURLOPT_HSTS_CTRL, CURLOPTTYPE_LONG, 299), /* HSTS file name */ CURLOPT(CURLOPT_HSTS, CURLOPTTYPE_STRINGPOINT, 300), /* HSTS read callback */ CURLOPT(CURLOPT_HSTSREADFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 301), CURLOPT(CURLOPT_HSTSREADDATA, CURLOPTTYPE_CBPOINT, 302), /* HSTS write callback */ CURLOPT(CURLOPT_HSTSWRITEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 303), CURLOPT(CURLOPT_HSTSWRITEDATA, CURLOPTTYPE_CBPOINT, 304), /* Parameters for V4 signature */ CURLOPT(CURLOPT_AWS_SIGV4, CURLOPTTYPE_STRINGPOINT, 305), /* Same as CURLOPT_SSL_VERIFYPEER but for DOH (DNS-over-HTTPS) servers. */ CURLOPT(CURLOPT_DOH_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 306), /* Same as CURLOPT_SSL_VERIFYHOST but for DOH (DNS-over-HTTPS) servers. */ CURLOPT(CURLOPT_DOH_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 307), /* Same as CURLOPT_SSL_VERIFYSTATUS but for DOH (DNS-over-HTTPS) servers. */ CURLOPT(CURLOPT_DOH_SSL_VERIFYSTATUS, CURLOPTTYPE_LONG, 308), /* The CA certificates as "blob" used to validate the peer certificate this option is used only if SSL_VERIFYPEER is true */ CURLOPT(CURLOPT_CAINFO_BLOB, CURLOPTTYPE_BLOB, 309), /* The CA certificates as "blob" used to validate the proxy certificate this option is used only if PROXY_SSL_VERIFYPEER is true */ CURLOPT(CURLOPT_PROXY_CAINFO_BLOB, CURLOPTTYPE_BLOB, 310), CURLOPT_LASTENTRY /* the last unused */ } CURLoption; #ifndef CURL_NO_OLDIES /* define this to test if your app builds with all the obsolete stuff removed! */ /* Backwards compatibility with older names */ /* These are scheduled to disappear by 2011 */ /* This was added in version 7.19.1 */ #define CURLOPT_POST301 CURLOPT_POSTREDIR /* These are scheduled to disappear by 2009 */ /* The following were added in 7.17.0 */ #define CURLOPT_SSLKEYPASSWD CURLOPT_KEYPASSWD #define CURLOPT_FTPAPPEND CURLOPT_APPEND #define CURLOPT_FTPLISTONLY CURLOPT_DIRLISTONLY #define CURLOPT_FTP_SSL CURLOPT_USE_SSL /* The following were added earlier */ #define CURLOPT_SSLCERTPASSWD CURLOPT_KEYPASSWD #define CURLOPT_KRB4LEVEL CURLOPT_KRBLEVEL #else /* This is set if CURL_NO_OLDIES is defined at compile-time */ #undef CURLOPT_DNS_USE_GLOBAL_CACHE /* soon obsolete */ #endif /* Below here follows defines for the CURLOPT_IPRESOLVE option. If a host name resolves addresses using more than one IP protocol version, this option might be handy to force libcurl to use a specific IP version. */ #define CURL_IPRESOLVE_WHATEVER 0 /* default, uses addresses to all IP versions that your system allows */ #define CURL_IPRESOLVE_V4 1 /* uses only IPv4 addresses/connections */ #define CURL_IPRESOLVE_V6 2 /* uses only IPv6 addresses/connections */ /* three convenient "aliases" that follow the name scheme better */ #define CURLOPT_RTSPHEADER CURLOPT_HTTPHEADER /* These enums are for use with the CURLOPT_HTTP_VERSION option. */ enum { CURL_HTTP_VERSION_NONE, /* setting this means we don't care, and that we'd like the library to choose the best possible for us! */ CURL_HTTP_VERSION_1_0, /* please use HTTP 1.0 in the request */ CURL_HTTP_VERSION_1_1, /* please use HTTP 1.1 in the request */ CURL_HTTP_VERSION_2_0, /* please use HTTP 2 in the request */ CURL_HTTP_VERSION_2TLS, /* use version 2 for HTTPS, version 1.1 for HTTP */ CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE, /* please use HTTP 2 without HTTP/1.1 Upgrade */ CURL_HTTP_VERSION_3 = 30, /* Makes use of explicit HTTP/3 without fallback. Use CURLOPT_ALTSVC to enable HTTP/3 upgrade */ CURL_HTTP_VERSION_LAST /* *ILLEGAL* http version */ }; /* Convenience definition simple because the name of the version is HTTP/2 and not 2.0. The 2_0 version of the enum name was set while the version was still planned to be 2.0 and we stick to it for compatibility. */ #define CURL_HTTP_VERSION_2 CURL_HTTP_VERSION_2_0 /* * Public API enums for RTSP requests */ enum { CURL_RTSPREQ_NONE, /* first in list */ CURL_RTSPREQ_OPTIONS, CURL_RTSPREQ_DESCRIBE, CURL_RTSPREQ_ANNOUNCE, CURL_RTSPREQ_SETUP, CURL_RTSPREQ_PLAY, CURL_RTSPREQ_PAUSE, CURL_RTSPREQ_TEARDOWN, CURL_RTSPREQ_GET_PARAMETER, CURL_RTSPREQ_SET_PARAMETER, CURL_RTSPREQ_RECORD, CURL_RTSPREQ_RECEIVE, CURL_RTSPREQ_LAST /* last in list */ }; /* These enums are for use with the CURLOPT_NETRC option. */ enum CURL_NETRC_OPTION { CURL_NETRC_IGNORED, /* The .netrc will never be read. * This is the default. */ CURL_NETRC_OPTIONAL, /* A user:password in the URL will be preferred * to one in the .netrc. */ CURL_NETRC_REQUIRED, /* A user:password in the URL will be ignored. * Unless one is set programmatically, the .netrc * will be queried. */ CURL_NETRC_LAST }; enum { CURL_SSLVERSION_DEFAULT, CURL_SSLVERSION_TLSv1, /* TLS 1.x */ CURL_SSLVERSION_SSLv2, CURL_SSLVERSION_SSLv3, CURL_SSLVERSION_TLSv1_0, CURL_SSLVERSION_TLSv1_1, CURL_SSLVERSION_TLSv1_2, CURL_SSLVERSION_TLSv1_3, CURL_SSLVERSION_LAST /* never use, keep last */ }; enum { CURL_SSLVERSION_MAX_NONE = 0, CURL_SSLVERSION_MAX_DEFAULT = (CURL_SSLVERSION_TLSv1 << 16), CURL_SSLVERSION_MAX_TLSv1_0 = (CURL_SSLVERSION_TLSv1_0 << 16), CURL_SSLVERSION_MAX_TLSv1_1 = (CURL_SSLVERSION_TLSv1_1 << 16), CURL_SSLVERSION_MAX_TLSv1_2 = (CURL_SSLVERSION_TLSv1_2 << 16), CURL_SSLVERSION_MAX_TLSv1_3 = (CURL_SSLVERSION_TLSv1_3 << 16), /* never use, keep last */ CURL_SSLVERSION_MAX_LAST = (CURL_SSLVERSION_LAST << 16) }; enum CURL_TLSAUTH { CURL_TLSAUTH_NONE, CURL_TLSAUTH_SRP, CURL_TLSAUTH_LAST /* never use, keep last */ }; /* symbols to use with CURLOPT_POSTREDIR. CURL_REDIR_POST_301, CURL_REDIR_POST_302 and CURL_REDIR_POST_303 can be bitwise ORed so that CURL_REDIR_POST_301 | CURL_REDIR_POST_302 | CURL_REDIR_POST_303 == CURL_REDIR_POST_ALL */ #define CURL_REDIR_GET_ALL 0 #define CURL_REDIR_POST_301 1 #define CURL_REDIR_POST_302 2 #define CURL_REDIR_POST_303 4 #define CURL_REDIR_POST_ALL \ (CURL_REDIR_POST_301|CURL_REDIR_POST_302|CURL_REDIR_POST_303) typedef enum { CURL_TIMECOND_NONE, CURL_TIMECOND_IFMODSINCE, CURL_TIMECOND_IFUNMODSINCE, CURL_TIMECOND_LASTMOD, CURL_TIMECOND_LAST } curl_TimeCond; /* Special size_t value signaling a null-terminated string. */ #define CURL_ZERO_TERMINATED ((size_t) -1) /* curl_strequal() and curl_strnequal() are subject for removal in a future release */ CURL_EXTERN int curl_strequal(const char *s1, const char *s2); CURL_EXTERN int curl_strnequal(const char *s1, const char *s2, size_t n); /* Mime/form handling support. */ typedef struct curl_mime curl_mime; /* Mime context. */ typedef struct curl_mimepart curl_mimepart; /* Mime part context. */ /* * NAME curl_mime_init() * * DESCRIPTION * * Create a mime context and return its handle. The easy parameter is the * target handle. */ CURL_EXTERN curl_mime *curl_mime_init(CURL *easy); /* * NAME curl_mime_free() * * DESCRIPTION * * release a mime handle and its substructures. */ CURL_EXTERN void curl_mime_free(curl_mime *mime); /* * NAME curl_mime_addpart() * * DESCRIPTION * * Append a new empty part to the given mime context and return a handle to * the created part. */ CURL_EXTERN curl_mimepart *curl_mime_addpart(curl_mime *mime); /* * NAME curl_mime_name() * * DESCRIPTION * * Set mime/form part name. */ CURL_EXTERN CURLcode curl_mime_name(curl_mimepart *part, const char *name); /* * NAME curl_mime_filename() * * DESCRIPTION * * Set mime part remote file name. */ CURL_EXTERN CURLcode curl_mime_filename(curl_mimepart *part, const char *filename); /* * NAME curl_mime_type() * * DESCRIPTION * * Set mime part type. */ CURL_EXTERN CURLcode curl_mime_type(curl_mimepart *part, const char *mimetype); /* * NAME curl_mime_encoder() * * DESCRIPTION * * Set mime data transfer encoder. */ CURL_EXTERN CURLcode curl_mime_encoder(curl_mimepart *part, const char *encoding); /* * NAME curl_mime_data() * * DESCRIPTION * * Set mime part data source from memory data, */ CURL_EXTERN CURLcode curl_mime_data(curl_mimepart *part, const char *data, size_t datasize); /* * NAME curl_mime_filedata() * * DESCRIPTION * * Set mime part data source from named file. */ CURL_EXTERN CURLcode curl_mime_filedata(curl_mimepart *part, const char *filename); /* * NAME curl_mime_data_cb() * * DESCRIPTION * * Set mime part data source from callback function. */ CURL_EXTERN CURLcode curl_mime_data_cb(curl_mimepart *part, curl_off_t datasize, curl_read_callback readfunc, curl_seek_callback seekfunc, curl_free_callback freefunc, void *arg); /* * NAME curl_mime_subparts() * * DESCRIPTION * * Set mime part data source from subparts. */ CURL_EXTERN CURLcode curl_mime_subparts(curl_mimepart *part, curl_mime *subparts); /* * NAME curl_mime_headers() * * DESCRIPTION * * Set mime part headers. */ CURL_EXTERN CURLcode curl_mime_headers(curl_mimepart *part, struct curl_slist *headers, int take_ownership); typedef enum { CURLFORM_NOTHING, /********* the first one is unused ************/ CURLFORM_COPYNAME, CURLFORM_PTRNAME, CURLFORM_NAMELENGTH, CURLFORM_COPYCONTENTS, CURLFORM_PTRCONTENTS, CURLFORM_CONTENTSLENGTH, CURLFORM_FILECONTENT, CURLFORM_ARRAY, CURLFORM_OBSOLETE, CURLFORM_FILE, CURLFORM_BUFFER, CURLFORM_BUFFERPTR, CURLFORM_BUFFERLENGTH, CURLFORM_CONTENTTYPE, CURLFORM_CONTENTHEADER, CURLFORM_FILENAME, CURLFORM_END, CURLFORM_OBSOLETE2, CURLFORM_STREAM, CURLFORM_CONTENTLEN, /* added in 7.46.0, provide a curl_off_t length */ CURLFORM_LASTENTRY /* the last unused */ } CURLformoption; /* structure to be used as parameter for CURLFORM_ARRAY */ struct curl_forms { CURLformoption option; const char *value; }; /* use this for multipart formpost building */ /* Returns code for curl_formadd() * * Returns: * CURL_FORMADD_OK on success * CURL_FORMADD_MEMORY if the FormInfo allocation fails * CURL_FORMADD_OPTION_TWICE if one option is given twice for one Form * CURL_FORMADD_NULL if a null pointer was given for a char * CURL_FORMADD_MEMORY if the allocation of a FormInfo struct failed * CURL_FORMADD_UNKNOWN_OPTION if an unknown option was used * CURL_FORMADD_INCOMPLETE if the some FormInfo is not complete (or error) * CURL_FORMADD_MEMORY if a curl_httppost struct cannot be allocated * CURL_FORMADD_MEMORY if some allocation for string copying failed. * CURL_FORMADD_ILLEGAL_ARRAY if an illegal option is used in an array * ***************************************************************************/ typedef enum { CURL_FORMADD_OK, /* first, no error */ CURL_FORMADD_MEMORY, CURL_FORMADD_OPTION_TWICE, CURL_FORMADD_NULL, CURL_FORMADD_UNKNOWN_OPTION, CURL_FORMADD_INCOMPLETE, CURL_FORMADD_ILLEGAL_ARRAY, CURL_FORMADD_DISABLED, /* libcurl was built with this disabled */ CURL_FORMADD_LAST /* last */ } CURLFORMcode; /* * NAME curl_formadd() * * DESCRIPTION * * Pretty advanced function for building multi-part formposts. Each invoke * adds one part that together construct a full post. Then use * CURLOPT_HTTPPOST to send it off to libcurl. */ CURL_EXTERN CURLFORMcode curl_formadd(struct curl_httppost **httppost, struct curl_httppost **last_post, ...); /* * callback function for curl_formget() * The void *arg pointer will be the one passed as second argument to * curl_formget(). * The character buffer passed to it must not be freed. * Should return the buffer length passed to it as the argument "len" on * success. */ typedef size_t (*curl_formget_callback)(void *arg, const char *buf, size_t len); /* * NAME curl_formget() * * DESCRIPTION * * Serialize a curl_httppost struct built with curl_formadd(). * Accepts a void pointer as second argument which will be passed to * the curl_formget_callback function. * Returns 0 on success. */ CURL_EXTERN int curl_formget(struct curl_httppost *form, void *arg, curl_formget_callback append); /* * NAME curl_formfree() * * DESCRIPTION * * Free a multipart formpost previously built with curl_formadd(). */ CURL_EXTERN void curl_formfree(struct curl_httppost *form); /* * NAME curl_getenv() * * DESCRIPTION * * Returns a malloc()'ed string that MUST be curl_free()ed after usage is * complete. DEPRECATED - see lib/README.curlx */ CURL_EXTERN char *curl_getenv(const char *variable); /* * NAME curl_version() * * DESCRIPTION * * Returns a static ascii string of the libcurl version. */ CURL_EXTERN char *curl_version(void); /* * NAME curl_easy_escape() * * DESCRIPTION * * Escapes URL strings (converts all letters consider illegal in URLs to their * %XX versions). This function returns a new allocated string or NULL if an * error occurred. */ CURL_EXTERN char *curl_easy_escape(CURL *handle, const char *string, int length); /* the previous version: */ CURL_EXTERN char *curl_escape(const char *string, int length); /* * NAME curl_easy_unescape() * * DESCRIPTION * * Unescapes URL encoding in strings (converts all %XX codes to their 8bit * versions). This function returns a new allocated string or NULL if an error * occurred. * Conversion Note: On non-ASCII platforms the ASCII %XX codes are * converted into the host encoding. */ CURL_EXTERN char *curl_easy_unescape(CURL *handle, const char *string, int length, int *outlength); /* the previous version */ CURL_EXTERN char *curl_unescape(const char *string, int length); /* * NAME curl_free() * * DESCRIPTION * * Provided for de-allocation in the same translation unit that did the * allocation. Added in libcurl 7.10 */ CURL_EXTERN void curl_free(void *p); /* * NAME curl_global_init() * * DESCRIPTION * * curl_global_init() should be invoked exactly once for each application that * uses libcurl and before any call of other libcurl functions. * * This function is not thread-safe! */ CURL_EXTERN CURLcode curl_global_init(long flags); /* * NAME curl_global_init_mem() * * DESCRIPTION * * curl_global_init() or curl_global_init_mem() should be invoked exactly once * for each application that uses libcurl. This function can be used to * initialize libcurl and set user defined memory management callback * functions. Users can implement memory management routines to check for * memory leaks, check for mis-use of the curl library etc. User registered * callback routines will be invoked by this library instead of the system * memory management routines like malloc, free etc. */ CURL_EXTERN CURLcode curl_global_init_mem(long flags, curl_malloc_callback m, curl_free_callback f, curl_realloc_callback r, curl_strdup_callback s, curl_calloc_callback c); /* * NAME curl_global_cleanup() * * DESCRIPTION * * curl_global_cleanup() should be invoked exactly once for each application * that uses libcurl */ CURL_EXTERN void curl_global_cleanup(void); /* linked-list structure for the CURLOPT_QUOTE option (and other) */ struct curl_slist { char *data; struct curl_slist *next; }; /* * NAME curl_global_sslset() * * DESCRIPTION * * When built with multiple SSL backends, curl_global_sslset() allows to * choose one. This function can only be called once, and it must be called * *before* curl_global_init(). * * The backend can be identified by the id (e.g. CURLSSLBACKEND_OPENSSL). The * backend can also be specified via the name parameter (passing -1 as id). * If both id and name are specified, the name will be ignored. If neither id * nor name are specified, the function will fail with * CURLSSLSET_UNKNOWN_BACKEND and set the "avail" pointer to the * NULL-terminated list of available backends. * * Upon success, the function returns CURLSSLSET_OK. * * If the specified SSL backend is not available, the function returns * CURLSSLSET_UNKNOWN_BACKEND and sets the "avail" pointer to a NULL-terminated * list of available SSL backends. * * The SSL backend can be set only once. If it has already been set, a * subsequent attempt to change it will result in a CURLSSLSET_TOO_LATE. */ struct curl_ssl_backend { curl_sslbackend id; const char *name; }; typedef struct curl_ssl_backend curl_ssl_backend; typedef enum { CURLSSLSET_OK = 0, CURLSSLSET_UNKNOWN_BACKEND, CURLSSLSET_TOO_LATE, CURLSSLSET_NO_BACKENDS /* libcurl was built without any SSL support */ } CURLsslset; CURL_EXTERN CURLsslset curl_global_sslset(curl_sslbackend id, const char *name, const curl_ssl_backend ***avail); /* * NAME curl_slist_append() * * DESCRIPTION * * Appends a string to a linked list. If no list exists, it will be created * first. Returns the new list, after appending. */ CURL_EXTERN struct curl_slist *curl_slist_append(struct curl_slist *, const char *); /* * NAME curl_slist_free_all() * * DESCRIPTION * * free a previously built curl_slist. */ CURL_EXTERN void curl_slist_free_all(struct curl_slist *); /* * NAME curl_getdate() * * DESCRIPTION * * Returns the time, in seconds since 1 Jan 1970 of the time string given in * the first argument. The time argument in the second parameter is unused * and should be set to NULL. */ CURL_EXTERN time_t curl_getdate(const char *p, const time_t *unused); /* info about the certificate chain, only for OpenSSL, GnuTLS, Schannel, NSS and GSKit builds. Asked for with CURLOPT_CERTINFO / CURLINFO_CERTINFO */ struct curl_certinfo { int num_of_certs; /* number of certificates with information */ struct curl_slist **certinfo; /* for each index in this array, there's a linked list with textual information in the format "name: value" */ }; /* Information about the SSL library used and the respective internal SSL handle, which can be used to obtain further information regarding the connection. Asked for with CURLINFO_TLS_SSL_PTR or CURLINFO_TLS_SESSION. */ struct curl_tlssessioninfo { curl_sslbackend backend; void *internals; }; #define CURLINFO_STRING 0x100000 #define CURLINFO_LONG 0x200000 #define CURLINFO_DOUBLE 0x300000 #define CURLINFO_SLIST 0x400000 #define CURLINFO_PTR 0x400000 /* same as SLIST */ #define CURLINFO_SOCKET 0x500000 #define CURLINFO_OFF_T 0x600000 #define CURLINFO_MASK 0x0fffff #define CURLINFO_TYPEMASK 0xf00000 typedef enum { CURLINFO_NONE, /* first, never use this */ CURLINFO_EFFECTIVE_URL = CURLINFO_STRING + 1, CURLINFO_RESPONSE_CODE = CURLINFO_LONG + 2, CURLINFO_TOTAL_TIME = CURLINFO_DOUBLE + 3, CURLINFO_NAMELOOKUP_TIME = CURLINFO_DOUBLE + 4, CURLINFO_CONNECT_TIME = CURLINFO_DOUBLE + 5, CURLINFO_PRETRANSFER_TIME = CURLINFO_DOUBLE + 6, CURLINFO_SIZE_UPLOAD = CURLINFO_DOUBLE + 7, CURLINFO_SIZE_UPLOAD_T = CURLINFO_OFF_T + 7, CURLINFO_SIZE_DOWNLOAD = CURLINFO_DOUBLE + 8, CURLINFO_SIZE_DOWNLOAD_T = CURLINFO_OFF_T + 8, CURLINFO_SPEED_DOWNLOAD = CURLINFO_DOUBLE + 9, CURLINFO_SPEED_DOWNLOAD_T = CURLINFO_OFF_T + 9, CURLINFO_SPEED_UPLOAD = CURLINFO_DOUBLE + 10, CURLINFO_SPEED_UPLOAD_T = CURLINFO_OFF_T + 10, CURLINFO_HEADER_SIZE = CURLINFO_LONG + 11, CURLINFO_REQUEST_SIZE = CURLINFO_LONG + 12, CURLINFO_SSL_VERIFYRESULT = CURLINFO_LONG + 13, CURLINFO_FILETIME = CURLINFO_LONG + 14, CURLINFO_FILETIME_T = CURLINFO_OFF_T + 14, CURLINFO_CONTENT_LENGTH_DOWNLOAD = CURLINFO_DOUBLE + 15, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T = CURLINFO_OFF_T + 15, CURLINFO_CONTENT_LENGTH_UPLOAD = CURLINFO_DOUBLE + 16, CURLINFO_CONTENT_LENGTH_UPLOAD_T = CURLINFO_OFF_T + 16, CURLINFO_STARTTRANSFER_TIME = CURLINFO_DOUBLE + 17, CURLINFO_CONTENT_TYPE = CURLINFO_STRING + 18, CURLINFO_REDIRECT_TIME = CURLINFO_DOUBLE + 19, CURLINFO_REDIRECT_COUNT = CURLINFO_LONG + 20, CURLINFO_PRIVATE = CURLINFO_STRING + 21, CURLINFO_HTTP_CONNECTCODE = CURLINFO_LONG + 22, CURLINFO_HTTPAUTH_AVAIL = CURLINFO_LONG + 23, CURLINFO_PROXYAUTH_AVAIL = CURLINFO_LONG + 24, CURLINFO_OS_ERRNO = CURLINFO_LONG + 25, CURLINFO_NUM_CONNECTS = CURLINFO_LONG + 26, CURLINFO_SSL_ENGINES = CURLINFO_SLIST + 27, CURLINFO_COOKIELIST = CURLINFO_SLIST + 28, CURLINFO_LASTSOCKET = CURLINFO_LONG + 29, CURLINFO_FTP_ENTRY_PATH = CURLINFO_STRING + 30, CURLINFO_REDIRECT_URL = CURLINFO_STRING + 31, CURLINFO_PRIMARY_IP = CURLINFO_STRING + 32, CURLINFO_APPCONNECT_TIME = CURLINFO_DOUBLE + 33, CURLINFO_CERTINFO = CURLINFO_PTR + 34, CURLINFO_CONDITION_UNMET = CURLINFO_LONG + 35, CURLINFO_RTSP_SESSION_ID = CURLINFO_STRING + 36, CURLINFO_RTSP_CLIENT_CSEQ = CURLINFO_LONG + 37, CURLINFO_RTSP_SERVER_CSEQ = CURLINFO_LONG + 38, CURLINFO_RTSP_CSEQ_RECV = CURLINFO_LONG + 39, CURLINFO_PRIMARY_PORT = CURLINFO_LONG + 40, CURLINFO_LOCAL_IP = CURLINFO_STRING + 41, CURLINFO_LOCAL_PORT = CURLINFO_LONG + 42, CURLINFO_TLS_SESSION = CURLINFO_PTR + 43, CURLINFO_ACTIVESOCKET = CURLINFO_SOCKET + 44, CURLINFO_TLS_SSL_PTR = CURLINFO_PTR + 45, CURLINFO_HTTP_VERSION = CURLINFO_LONG + 46, CURLINFO_PROXY_SSL_VERIFYRESULT = CURLINFO_LONG + 47, CURLINFO_PROTOCOL = CURLINFO_LONG + 48, CURLINFO_SCHEME = CURLINFO_STRING + 49, CURLINFO_TOTAL_TIME_T = CURLINFO_OFF_T + 50, CURLINFO_NAMELOOKUP_TIME_T = CURLINFO_OFF_T + 51, CURLINFO_CONNECT_TIME_T = CURLINFO_OFF_T + 52, CURLINFO_PRETRANSFER_TIME_T = CURLINFO_OFF_T + 53, CURLINFO_STARTTRANSFER_TIME_T = CURLINFO_OFF_T + 54, CURLINFO_REDIRECT_TIME_T = CURLINFO_OFF_T + 55, CURLINFO_APPCONNECT_TIME_T = CURLINFO_OFF_T + 56, CURLINFO_RETRY_AFTER = CURLINFO_OFF_T + 57, CURLINFO_EFFECTIVE_METHOD = CURLINFO_STRING + 58, CURLINFO_PROXY_ERROR = CURLINFO_LONG + 59, CURLINFO_REFERER = CURLINFO_STRING + 60, CURLINFO_LASTONE = 60 } CURLINFO; /* CURLINFO_RESPONSE_CODE is the new name for the option previously known as CURLINFO_HTTP_CODE */ #define CURLINFO_HTTP_CODE CURLINFO_RESPONSE_CODE typedef enum { CURLCLOSEPOLICY_NONE, /* first, never use this */ CURLCLOSEPOLICY_OLDEST, CURLCLOSEPOLICY_LEAST_RECENTLY_USED, CURLCLOSEPOLICY_LEAST_TRAFFIC, CURLCLOSEPOLICY_SLOWEST, CURLCLOSEPOLICY_CALLBACK, CURLCLOSEPOLICY_LAST /* last, never use this */ } curl_closepolicy; #define CURL_GLOBAL_SSL (1<<0) /* no purpose since since 7.57.0 */ #define CURL_GLOBAL_WIN32 (1<<1) #define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32) #define CURL_GLOBAL_NOTHING 0 #define CURL_GLOBAL_DEFAULT CURL_GLOBAL_ALL #define CURL_GLOBAL_ACK_EINTR (1<<2) /***************************************************************************** * Setup defines, protos etc for the sharing stuff. */ /* Different data locks for a single share */ typedef enum { CURL_LOCK_DATA_NONE = 0, /* CURL_LOCK_DATA_SHARE is used internally to say that * the locking is just made to change the internal state of the share * itself. */ CURL_LOCK_DATA_SHARE, CURL_LOCK_DATA_COOKIE, CURL_LOCK_DATA_DNS, CURL_LOCK_DATA_SSL_SESSION, CURL_LOCK_DATA_CONNECT, CURL_LOCK_DATA_PSL, CURL_LOCK_DATA_LAST } curl_lock_data; /* Different lock access types */ typedef enum { CURL_LOCK_ACCESS_NONE = 0, /* unspecified action */ CURL_LOCK_ACCESS_SHARED = 1, /* for read perhaps */ CURL_LOCK_ACCESS_SINGLE = 2, /* for write perhaps */ CURL_LOCK_ACCESS_LAST /* never use */ } curl_lock_access; typedef void (*curl_lock_function)(CURL *handle, curl_lock_data data, curl_lock_access locktype, void *userptr); typedef void (*curl_unlock_function)(CURL *handle, curl_lock_data data, void *userptr); typedef enum { CURLSHE_OK, /* all is fine */ CURLSHE_BAD_OPTION, /* 1 */ CURLSHE_IN_USE, /* 2 */ CURLSHE_INVALID, /* 3 */ CURLSHE_NOMEM, /* 4 out of memory */ CURLSHE_NOT_BUILT_IN, /* 5 feature not present in lib */ CURLSHE_LAST /* never use */ } CURLSHcode; typedef enum { CURLSHOPT_NONE, /* don't use */ CURLSHOPT_SHARE, /* specify a data type to share */ CURLSHOPT_UNSHARE, /* specify which data type to stop sharing */ CURLSHOPT_LOCKFUNC, /* pass in a 'curl_lock_function' pointer */ CURLSHOPT_UNLOCKFUNC, /* pass in a 'curl_unlock_function' pointer */ CURLSHOPT_USERDATA, /* pass in a user data pointer used in the lock/unlock callback functions */ CURLSHOPT_LAST /* never use */ } CURLSHoption; CURL_EXTERN CURLSH *curl_share_init(void); CURL_EXTERN CURLSHcode curl_share_setopt(CURLSH *, CURLSHoption option, ...); CURL_EXTERN CURLSHcode curl_share_cleanup(CURLSH *); /**************************************************************************** * Structures for querying information about the curl library at runtime. */ typedef enum { CURLVERSION_FIRST, CURLVERSION_SECOND, CURLVERSION_THIRD, CURLVERSION_FOURTH, CURLVERSION_FIFTH, CURLVERSION_SIXTH, CURLVERSION_SEVENTH, CURLVERSION_EIGHTH, CURLVERSION_NINTH, CURLVERSION_TENTH, CURLVERSION_LAST /* never actually use this */ } CURLversion; /* The 'CURLVERSION_NOW' is the symbolic name meant to be used by basically all programs ever that want to get version information. It is meant to be a built-in version number for what kind of struct the caller expects. If the struct ever changes, we redefine the NOW to another enum from above. */ #define CURLVERSION_NOW CURLVERSION_TENTH struct curl_version_info_data { CURLversion age; /* age of the returned struct */ const char *version; /* LIBCURL_VERSION */ unsigned int version_num; /* LIBCURL_VERSION_NUM */ const char *host; /* OS/host/cpu/machine when configured */ int features; /* bitmask, see defines below */ const char *ssl_version; /* human readable string */ long ssl_version_num; /* not used anymore, always 0 */ const char *libz_version; /* human readable string */ /* protocols is terminated by an entry with a NULL protoname */ const char * const *protocols; /* The fields below this were added in CURLVERSION_SECOND */ const char *ares; int ares_num; /* This field was added in CURLVERSION_THIRD */ const char *libidn; /* These field were added in CURLVERSION_FOURTH */ /* Same as '_libiconv_version' if built with HAVE_ICONV */ int iconv_ver_num; const char *libssh_version; /* human readable string */ /* These fields were added in CURLVERSION_FIFTH */ unsigned int brotli_ver_num; /* Numeric Brotli version (MAJOR << 24) | (MINOR << 12) | PATCH */ const char *brotli_version; /* human readable string. */ /* These fields were added in CURLVERSION_SIXTH */ unsigned int nghttp2_ver_num; /* Numeric nghttp2 version (MAJOR << 16) | (MINOR << 8) | PATCH */ const char *nghttp2_version; /* human readable string. */ const char *quic_version; /* human readable quic (+ HTTP/3) library + version or NULL */ /* These fields were added in CURLVERSION_SEVENTH */ const char *cainfo; /* the built-in default CURLOPT_CAINFO, might be NULL */ const char *capath; /* the built-in default CURLOPT_CAPATH, might be NULL */ /* These fields were added in CURLVERSION_EIGHTH */ unsigned int zstd_ver_num; /* Numeric Zstd version (MAJOR << 24) | (MINOR << 12) | PATCH */ const char *zstd_version; /* human readable string. */ /* These fields were added in CURLVERSION_NINTH */ const char *hyper_version; /* human readable string. */ /* These fields were added in CURLVERSION_TENTH */ const char *gsasl_version; /* human readable string. */ }; typedef struct curl_version_info_data curl_version_info_data; #define CURL_VERSION_IPV6 (1<<0) /* IPv6-enabled */ #define CURL_VERSION_KERBEROS4 (1<<1) /* Kerberos V4 auth is supported (deprecated) */ #define CURL_VERSION_SSL (1<<2) /* SSL options are present */ #define CURL_VERSION_LIBZ (1<<3) /* libz features are present */ #define CURL_VERSION_NTLM (1<<4) /* NTLM auth is supported */ #define CURL_VERSION_GSSNEGOTIATE (1<<5) /* Negotiate auth is supported (deprecated) */ #define CURL_VERSION_DEBUG (1<<6) /* Built with debug capabilities */ #define CURL_VERSION_ASYNCHDNS (1<<7) /* Asynchronous DNS resolves */ #define CURL_VERSION_SPNEGO (1<<8) /* SPNEGO auth is supported */ #define CURL_VERSION_LARGEFILE (1<<9) /* Supports files larger than 2GB */ #define CURL_VERSION_IDN (1<<10) /* Internationized Domain Names are supported */ #define CURL_VERSION_SSPI (1<<11) /* Built against Windows SSPI */ #define CURL_VERSION_CONV (1<<12) /* Character conversions supported */ #define CURL_VERSION_CURLDEBUG (1<<13) /* Debug memory tracking supported */ #define CURL_VERSION_TLSAUTH_SRP (1<<14) /* TLS-SRP auth is supported */ #define CURL_VERSION_NTLM_WB (1<<15) /* NTLM delegation to winbind helper is supported */ #define CURL_VERSION_HTTP2 (1<<16) /* HTTP2 support built-in */ #define CURL_VERSION_GSSAPI (1<<17) /* Built against a GSS-API library */ #define CURL_VERSION_KERBEROS5 (1<<18) /* Kerberos V5 auth is supported */ #define CURL_VERSION_UNIX_SOCKETS (1<<19) /* Unix domain sockets support */ #define CURL_VERSION_PSL (1<<20) /* Mozilla's Public Suffix List, used for cookie domain verification */ #define CURL_VERSION_HTTPS_PROXY (1<<21) /* HTTPS-proxy support built-in */ #define CURL_VERSION_MULTI_SSL (1<<22) /* Multiple SSL backends available */ #define CURL_VERSION_BROTLI (1<<23) /* Brotli features are present. */ #define CURL_VERSION_ALTSVC (1<<24) /* Alt-Svc handling built-in */ #define CURL_VERSION_HTTP3 (1<<25) /* HTTP3 support built-in */ #define CURL_VERSION_ZSTD (1<<26) /* zstd features are present */ #define CURL_VERSION_UNICODE (1<<27) /* Unicode support on Windows */ #define CURL_VERSION_HSTS (1<<28) /* HSTS is supported */ #define CURL_VERSION_GSASL (1<<29) /* libgsasl is supported */ /* * NAME curl_version_info() * * DESCRIPTION * * This function returns a pointer to a static copy of the version info * struct. See above. */ CURL_EXTERN curl_version_info_data *curl_version_info(CURLversion); /* * NAME curl_easy_strerror() * * DESCRIPTION * * The curl_easy_strerror function may be used to turn a CURLcode value * into the equivalent human readable error string. This is useful * for printing meaningful error messages. */ CURL_EXTERN const char *curl_easy_strerror(CURLcode); /* * NAME curl_share_strerror() * * DESCRIPTION * * The curl_share_strerror function may be used to turn a CURLSHcode value * into the equivalent human readable error string. This is useful * for printing meaningful error messages. */ CURL_EXTERN const char *curl_share_strerror(CURLSHcode); /* * NAME curl_easy_pause() * * DESCRIPTION * * The curl_easy_pause function pauses or unpauses transfers. Select the new * state by setting the bitmask, use the convenience defines below. * */ CURL_EXTERN CURLcode curl_easy_pause(CURL *handle, int bitmask); #define CURLPAUSE_RECV (1<<0) #define CURLPAUSE_RECV_CONT (0) #define CURLPAUSE_SEND (1<<2) #define CURLPAUSE_SEND_CONT (0) #define CURLPAUSE_ALL (CURLPAUSE_RECV|CURLPAUSE_SEND) #define CURLPAUSE_CONT (CURLPAUSE_RECV_CONT|CURLPAUSE_SEND_CONT) #ifdef __cplusplus } #endif /* unfortunately, the easy.h and multi.h include files need options and info stuff before they can be included! */ #include "easy.h" /* nothing in curl is fun without the easy stuff */ #include "multi.h" #include "urlapi.h" #include "options.h" /* the typechecker doesn't work in C++ (yet) */ #if defined(__GNUC__) && defined(__GNUC_MINOR__) && \ ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) && \ !defined(__cplusplus) && !defined(CURL_DISABLE_TYPECHECK) #include "typecheck-gcc.h" #else #if defined(__STDC__) && (__STDC__ >= 1) /* This preprocessor magic that replaces a call with the exact same call is only done to make sure application authors pass exactly three arguments to these functions. */ #define curl_easy_setopt(handle,opt,param) curl_easy_setopt(handle,opt,param) #define curl_easy_getinfo(handle,info,arg) curl_easy_getinfo(handle,info,arg) #define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param) #define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param) #endif /* __STDC__ >= 1 */ #endif /* gcc >= 4.3 && !__cplusplus */ #endif /* CURLINC_CURL_H */ ================================================ FILE: libraries/curl/curlver.h ================================================ #ifndef CURLINC_CURLVER_H #define CURLINC_CURLVER_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2021, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ /* This header file contains nothing but libcurl version info, generated by a script at release-time. This was made its own header file in 7.11.2 */ /* This is the global package copyright */ #define LIBCURL_COPYRIGHT "1996 - 2021 Daniel Stenberg, ." /* This is the version number of the libcurl package from which this header file origins: */ #define LIBCURL_VERSION "7.77.0-DEV" /* The numeric version number is also available "in parts" by using these defines: */ #define LIBCURL_VERSION_MAJOR 7 #define LIBCURL_VERSION_MINOR 77 #define LIBCURL_VERSION_PATCH 0 /* This is the numeric version of the libcurl version number, meant for easier parsing and comparisons by programs. The LIBCURL_VERSION_NUM define will always follow this syntax: 0xXXYYZZ Where XX, YY and ZZ are the main version, release and patch numbers in hexadecimal (using 8 bits each). All three numbers are always represented using two digits. 1.2 would appear as "0x010200" while version 9.11.7 appears as "0x090b07". This 6-digit (24 bits) hexadecimal number does not show pre-release number, and it is always a greater number in a more recent release. It makes comparisons with greater than and less than work. Note: This define is the full hex number and _does not_ use the CURL_VERSION_BITS() macro since curl's own configure script greps for it and needs it to contain the full number. */ #define LIBCURL_VERSION_NUM 0x074d00 /* * This is the date and time when the full source package was created. The * timestamp is not stored in git, as the timestamp is properly set in the * tarballs by the maketgz script. * * The format of the date follows this template: * * "2007-11-23" */ #define LIBCURL_TIMESTAMP "[unreleased]" #define CURL_VERSION_BITS(x,y,z) ((x)<<16|(y)<<8|(z)) #define CURL_AT_LEAST_VERSION(x,y,z) \ (LIBCURL_VERSION_NUM >= CURL_VERSION_BITS(x, y, z)) #endif /* CURLINC_CURLVER_H */ ================================================ FILE: libraries/curl/easy.h ================================================ #ifndef CURLINC_EASY_H #define CURLINC_EASY_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2020, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ #ifdef __cplusplus extern "C" { #endif /* Flag bits in the curl_blob struct: */ #define CURL_BLOB_COPY 1 /* tell libcurl to copy the data */ #define CURL_BLOB_NOCOPY 0 /* tell libcurl to NOT copy the data */ struct curl_blob { void *data; size_t len; unsigned int flags; /* bit 0 is defined, the rest are reserved and should be left zeroes */ }; CURL_EXTERN CURL *curl_easy_init(void); CURL_EXTERN CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...); CURL_EXTERN CURLcode curl_easy_perform(CURL *curl); CURL_EXTERN void curl_easy_cleanup(CURL *curl); /* * NAME curl_easy_getinfo() * * DESCRIPTION * * Request internal information from the curl session with this function. The * third argument MUST be a pointer to a long, a pointer to a char * or a * pointer to a double (as the documentation describes elsewhere). The data * pointed to will be filled in accordingly and can be relied upon only if the * function returns CURLE_OK. This function is intended to get used *AFTER* a * performed transfer, all results from this function are undefined until the * transfer is completed. */ CURL_EXTERN CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ...); /* * NAME curl_easy_duphandle() * * DESCRIPTION * * Creates a new curl session handle with the same options set for the handle * passed in. Duplicating a handle could only be a matter of cloning data and * options, internal state info and things like persistent connections cannot * be transferred. It is useful in multithreaded applications when you can run * curl_easy_duphandle() for each new thread to avoid a series of identical * curl_easy_setopt() invokes in every thread. */ CURL_EXTERN CURL *curl_easy_duphandle(CURL *curl); /* * NAME curl_easy_reset() * * DESCRIPTION * * Re-initializes a CURL handle to the default values. This puts back the * handle to the same state as it was in when it was just created. * * It does keep: live connections, the Session ID cache, the DNS cache and the * cookies. */ CURL_EXTERN void curl_easy_reset(CURL *curl); /* * NAME curl_easy_recv() * * DESCRIPTION * * Receives data from the connected socket. Use after successful * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. */ CURL_EXTERN CURLcode curl_easy_recv(CURL *curl, void *buffer, size_t buflen, size_t *n); /* * NAME curl_easy_send() * * DESCRIPTION * * Sends data over the connected socket. Use after successful * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. */ CURL_EXTERN CURLcode curl_easy_send(CURL *curl, const void *buffer, size_t buflen, size_t *n); /* * NAME curl_easy_upkeep() * * DESCRIPTION * * Performs connection upkeep for the given session handle. */ CURL_EXTERN CURLcode curl_easy_upkeep(CURL *curl); #ifdef __cplusplus } #endif #endif ================================================ FILE: libraries/curl/mprintf.h ================================================ #ifndef CURLINC_MPRINTF_H #define CURLINC_MPRINTF_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2020, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ #include #include /* needed for FILE */ #include "curl.h" /* for CURL_EXTERN */ #ifdef __cplusplus extern "C" { #endif CURL_EXTERN int curl_mprintf(const char *format, ...); CURL_EXTERN int curl_mfprintf(FILE *fd, const char *format, ...); CURL_EXTERN int curl_msprintf(char *buffer, const char *format, ...); CURL_EXTERN int curl_msnprintf(char *buffer, size_t maxlength, const char *format, ...); CURL_EXTERN int curl_mvprintf(const char *format, va_list args); CURL_EXTERN int curl_mvfprintf(FILE *fd, const char *format, va_list args); CURL_EXTERN int curl_mvsprintf(char *buffer, const char *format, va_list args); CURL_EXTERN int curl_mvsnprintf(char *buffer, size_t maxlength, const char *format, va_list args); CURL_EXTERN char *curl_maprintf(const char *format, ...); CURL_EXTERN char *curl_mvaprintf(const char *format, va_list args); #ifdef __cplusplus } #endif #endif /* CURLINC_MPRINTF_H */ ================================================ FILE: libraries/curl/multi.h ================================================ #ifndef CURLINC_MULTI_H #define CURLINC_MULTI_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2020, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ /* This is an "external" header file. Don't give away any internals here! GOALS o Enable a "pull" interface. The application that uses libcurl decides where and when to ask libcurl to get/send data. o Enable multiple simultaneous transfers in the same thread without making it complicated for the application. o Enable the application to select() on its own file descriptors and curl's file descriptors simultaneous easily. */ /* * This header file should not really need to include "curl.h" since curl.h * itself includes this file and we expect user applications to do #include * without the need for especially including multi.h. * * For some reason we added this include here at one point, and rather than to * break existing (wrongly written) libcurl applications, we leave it as-is * but with this warning attached. */ #include "curl.h" #ifdef __cplusplus extern "C" { #endif #if defined(BUILDING_LIBCURL) || defined(CURL_STRICTER) typedef struct Curl_multi CURLM; #else typedef void CURLM; #endif typedef enum { CURLM_CALL_MULTI_PERFORM = -1, /* please call curl_multi_perform() or curl_multi_socket*() soon */ CURLM_OK, CURLM_BAD_HANDLE, /* the passed-in handle is not a valid CURLM handle */ CURLM_BAD_EASY_HANDLE, /* an easy handle was not good/valid */ CURLM_OUT_OF_MEMORY, /* if you ever get this, you're in deep sh*t */ CURLM_INTERNAL_ERROR, /* this is a libcurl bug */ CURLM_BAD_SOCKET, /* the passed in socket argument did not match */ CURLM_UNKNOWN_OPTION, /* curl_multi_setopt() with unsupported option */ CURLM_ADDED_ALREADY, /* an easy handle already added to a multi handle was attempted to get added - again */ CURLM_RECURSIVE_API_CALL, /* an api function was called from inside a callback */ CURLM_WAKEUP_FAILURE, /* wakeup is unavailable or failed */ CURLM_BAD_FUNCTION_ARGUMENT, /* function called with a bad parameter */ CURLM_LAST } CURLMcode; /* just to make code nicer when using curl_multi_socket() you can now check for CURLM_CALL_MULTI_SOCKET too in the same style it works for curl_multi_perform() and CURLM_CALL_MULTI_PERFORM */ #define CURLM_CALL_MULTI_SOCKET CURLM_CALL_MULTI_PERFORM /* bitmask bits for CURLMOPT_PIPELINING */ #define CURLPIPE_NOTHING 0L #define CURLPIPE_HTTP1 1L #define CURLPIPE_MULTIPLEX 2L typedef enum { CURLMSG_NONE, /* first, not used */ CURLMSG_DONE, /* This easy handle has completed. 'result' contains the CURLcode of the transfer */ CURLMSG_LAST /* last, not used */ } CURLMSG; struct CURLMsg { CURLMSG msg; /* what this message means */ CURL *easy_handle; /* the handle it concerns */ union { void *whatever; /* message-specific data */ CURLcode result; /* return code for transfer */ } data; }; typedef struct CURLMsg CURLMsg; /* Based on poll(2) structure and values. * We don't use pollfd and POLL* constants explicitly * to cover platforms without poll(). */ #define CURL_WAIT_POLLIN 0x0001 #define CURL_WAIT_POLLPRI 0x0002 #define CURL_WAIT_POLLOUT 0x0004 struct curl_waitfd { curl_socket_t fd; short events; short revents; /* not supported yet */ }; /* * Name: curl_multi_init() * * Desc: inititalize multi-style curl usage * * Returns: a new CURLM handle to use in all 'curl_multi' functions. */ CURL_EXTERN CURLM *curl_multi_init(void); /* * Name: curl_multi_add_handle() * * Desc: add a standard curl handle to the multi stack * * Returns: CURLMcode type, general multi error code. */ CURL_EXTERN CURLMcode curl_multi_add_handle(CURLM *multi_handle, CURL *curl_handle); /* * Name: curl_multi_remove_handle() * * Desc: removes a curl handle from the multi stack again * * Returns: CURLMcode type, general multi error code. */ CURL_EXTERN CURLMcode curl_multi_remove_handle(CURLM *multi_handle, CURL *curl_handle); /* * Name: curl_multi_fdset() * * Desc: Ask curl for its fd_set sets. The app can use these to select() or * poll() on. We want curl_multi_perform() called as soon as one of * them are ready. * * Returns: CURLMcode type, general multi error code. */ CURL_EXTERN CURLMcode curl_multi_fdset(CURLM *multi_handle, fd_set *read_fd_set, fd_set *write_fd_set, fd_set *exc_fd_set, int *max_fd); /* * Name: curl_multi_wait() * * Desc: Poll on all fds within a CURLM set as well as any * additional fds passed to the function. * * Returns: CURLMcode type, general multi error code. */ CURL_EXTERN CURLMcode curl_multi_wait(CURLM *multi_handle, struct curl_waitfd extra_fds[], unsigned int extra_nfds, int timeout_ms, int *ret); /* * Name: curl_multi_poll() * * Desc: Poll on all fds within a CURLM set as well as any * additional fds passed to the function. * * Returns: CURLMcode type, general multi error code. */ CURL_EXTERN CURLMcode curl_multi_poll(CURLM *multi_handle, struct curl_waitfd extra_fds[], unsigned int extra_nfds, int timeout_ms, int *ret); /* * Name: curl_multi_wakeup() * * Desc: wakes up a sleeping curl_multi_poll call. * * Returns: CURLMcode type, general multi error code. */ CURL_EXTERN CURLMcode curl_multi_wakeup(CURLM *multi_handle); /* * Name: curl_multi_perform() * * Desc: When the app thinks there's data available for curl it calls this * function to read/write whatever there is right now. This returns * as soon as the reads and writes are done. This function does not * require that there actually is data available for reading or that * data can be written, it can be called just in case. It returns * the number of handles that still transfer data in the second * argument's integer-pointer. * * Returns: CURLMcode type, general multi error code. *NOTE* that this only * returns errors etc regarding the whole multi stack. There might * still have occurred problems on individual transfers even when * this returns OK. */ CURL_EXTERN CURLMcode curl_multi_perform(CURLM *multi_handle, int *running_handles); /* * Name: curl_multi_cleanup() * * Desc: Cleans up and removes a whole multi stack. It does not free or * touch any individual easy handles in any way. We need to define * in what state those handles will be if this function is called * in the middle of a transfer. * * Returns: CURLMcode type, general multi error code. */ CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle); /* * Name: curl_multi_info_read() * * Desc: Ask the multi handle if there's any messages/informationals from * the individual transfers. Messages include informationals such as * error code from the transfer or just the fact that a transfer is * completed. More details on these should be written down as well. * * Repeated calls to this function will return a new struct each * time, until a special "end of msgs" struct is returned as a signal * that there is no more to get at this point. * * The data the returned pointer points to will not survive calling * curl_multi_cleanup(). * * The 'CURLMsg' struct is meant to be very simple and only contain * very basic information. If more involved information is wanted, * we will provide the particular "transfer handle" in that struct * and that should/could/would be used in subsequent * curl_easy_getinfo() calls (or similar). The point being that we * must never expose complex structs to applications, as then we'll * undoubtably get backwards compatibility problems in the future. * * Returns: A pointer to a filled-in struct, or NULL if it failed or ran out * of structs. It also writes the number of messages left in the * queue (after this read) in the integer the second argument points * to. */ CURL_EXTERN CURLMsg *curl_multi_info_read(CURLM *multi_handle, int *msgs_in_queue); /* * Name: curl_multi_strerror() * * Desc: The curl_multi_strerror function may be used to turn a CURLMcode * value into the equivalent human readable error string. This is * useful for printing meaningful error messages. * * Returns: A pointer to a null-terminated error message. */ CURL_EXTERN const char *curl_multi_strerror(CURLMcode); /* * Name: curl_multi_socket() and * curl_multi_socket_all() * * Desc: An alternative version of curl_multi_perform() that allows the * application to pass in one of the file descriptors that have been * detected to have "action" on them and let libcurl perform. * See man page for details. */ #define CURL_POLL_NONE 0 #define CURL_POLL_IN 1 #define CURL_POLL_OUT 2 #define CURL_POLL_INOUT 3 #define CURL_POLL_REMOVE 4 #define CURL_SOCKET_TIMEOUT CURL_SOCKET_BAD #define CURL_CSELECT_IN 0x01 #define CURL_CSELECT_OUT 0x02 #define CURL_CSELECT_ERR 0x04 typedef int (*curl_socket_callback)(CURL *easy, /* easy handle */ curl_socket_t s, /* socket */ int what, /* see above */ void *userp, /* private callback pointer */ void *socketp); /* private socket pointer */ /* * Name: curl_multi_timer_callback * * Desc: Called by libcurl whenever the library detects a change in the * maximum number of milliseconds the app is allowed to wait before * curl_multi_socket() or curl_multi_perform() must be called * (to allow libcurl's timed events to take place). * * Returns: The callback should return zero. */ typedef int (*curl_multi_timer_callback)(CURLM *multi, /* multi handle */ long timeout_ms, /* see above */ void *userp); /* private callback pointer */ CURL_EXTERN CURLMcode curl_multi_socket(CURLM *multi_handle, curl_socket_t s, int *running_handles); CURL_EXTERN CURLMcode curl_multi_socket_action(CURLM *multi_handle, curl_socket_t s, int ev_bitmask, int *running_handles); CURL_EXTERN CURLMcode curl_multi_socket_all(CURLM *multi_handle, int *running_handles); #ifndef CURL_ALLOW_OLD_MULTI_SOCKET /* This macro below was added in 7.16.3 to push users who recompile to use the new curl_multi_socket_action() instead of the old curl_multi_socket() */ #define curl_multi_socket(x,y,z) curl_multi_socket_action(x,y,0,z) #endif /* * Name: curl_multi_timeout() * * Desc: Returns the maximum number of milliseconds the app is allowed to * wait before curl_multi_socket() or curl_multi_perform() must be * called (to allow libcurl's timed events to take place). * * Returns: CURLM error code. */ CURL_EXTERN CURLMcode curl_multi_timeout(CURLM *multi_handle, long *milliseconds); typedef enum { /* This is the socket callback function pointer */ CURLOPT(CURLMOPT_SOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 1), /* This is the argument passed to the socket callback */ CURLOPT(CURLMOPT_SOCKETDATA, CURLOPTTYPE_OBJECTPOINT, 2), /* set to 1 to enable pipelining for this multi handle */ CURLOPT(CURLMOPT_PIPELINING, CURLOPTTYPE_LONG, 3), /* This is the timer callback function pointer */ CURLOPT(CURLMOPT_TIMERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 4), /* This is the argument passed to the timer callback */ CURLOPT(CURLMOPT_TIMERDATA, CURLOPTTYPE_OBJECTPOINT, 5), /* maximum number of entries in the connection cache */ CURLOPT(CURLMOPT_MAXCONNECTS, CURLOPTTYPE_LONG, 6), /* maximum number of (pipelining) connections to one host */ CURLOPT(CURLMOPT_MAX_HOST_CONNECTIONS, CURLOPTTYPE_LONG, 7), /* maximum number of requests in a pipeline */ CURLOPT(CURLMOPT_MAX_PIPELINE_LENGTH, CURLOPTTYPE_LONG, 8), /* a connection with a content-length longer than this will not be considered for pipelining */ CURLOPT(CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE, CURLOPTTYPE_OFF_T, 9), /* a connection with a chunk length longer than this will not be considered for pipelining */ CURLOPT(CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE, CURLOPTTYPE_OFF_T, 10), /* a list of site names(+port) that are blocked from pipelining */ CURLOPT(CURLMOPT_PIPELINING_SITE_BL, CURLOPTTYPE_OBJECTPOINT, 11), /* a list of server types that are blocked from pipelining */ CURLOPT(CURLMOPT_PIPELINING_SERVER_BL, CURLOPTTYPE_OBJECTPOINT, 12), /* maximum number of open connections in total */ CURLOPT(CURLMOPT_MAX_TOTAL_CONNECTIONS, CURLOPTTYPE_LONG, 13), /* This is the server push callback function pointer */ CURLOPT(CURLMOPT_PUSHFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 14), /* This is the argument passed to the server push callback */ CURLOPT(CURLMOPT_PUSHDATA, CURLOPTTYPE_OBJECTPOINT, 15), /* maximum number of concurrent streams to support on a connection */ CURLOPT(CURLMOPT_MAX_CONCURRENT_STREAMS, CURLOPTTYPE_LONG, 16), CURLMOPT_LASTENTRY /* the last unused */ } CURLMoption; /* * Name: curl_multi_setopt() * * Desc: Sets options for the multi handle. * * Returns: CURLM error code. */ CURL_EXTERN CURLMcode curl_multi_setopt(CURLM *multi_handle, CURLMoption option, ...); /* * Name: curl_multi_assign() * * Desc: This function sets an association in the multi handle between the * given socket and a private pointer of the application. This is * (only) useful for curl_multi_socket uses. * * Returns: CURLM error code. */ CURL_EXTERN CURLMcode curl_multi_assign(CURLM *multi_handle, curl_socket_t sockfd, void *sockp); /* * Name: curl_push_callback * * Desc: This callback gets called when a new stream is being pushed by the * server. It approves or denies the new stream. It can also decide * to completely fail the connection. * * Returns: CURL_PUSH_OK, CURL_PUSH_DENY or CURL_PUSH_ERROROUT */ #define CURL_PUSH_OK 0 #define CURL_PUSH_DENY 1 #define CURL_PUSH_ERROROUT 2 /* added in 7.72.0 */ struct curl_pushheaders; /* forward declaration only */ CURL_EXTERN char *curl_pushheader_bynum(struct curl_pushheaders *h, size_t num); CURL_EXTERN char *curl_pushheader_byname(struct curl_pushheaders *h, const char *name); typedef int (*curl_push_callback)(CURL *parent, CURL *easy, size_t num_headers, struct curl_pushheaders *headers, void *userp); #ifdef __cplusplus } /* end of extern "C" */ #endif #endif ================================================ FILE: libraries/curl/options.h ================================================ #ifndef CURLINC_OPTIONS_H #define CURLINC_OPTIONS_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 2018 - 2020, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ #ifdef __cplusplus extern "C" { #endif typedef enum { CURLOT_LONG, /* long (a range of values) */ CURLOT_VALUES, /* (a defined set or bitmask) */ CURLOT_OFF_T, /* curl_off_t (a range of values) */ CURLOT_OBJECT, /* pointer (void *) */ CURLOT_STRING, /* (char * to zero terminated buffer) */ CURLOT_SLIST, /* (struct curl_slist *) */ CURLOT_CBPTR, /* (void * passed as-is to a callback) */ CURLOT_BLOB, /* blob (struct curl_blob *) */ CURLOT_FUNCTION /* function pointer */ } curl_easytype; /* Flag bits */ /* "alias" means it is provided for old programs to remain functional, we prefer another name */ #define CURLOT_FLAG_ALIAS (1<<0) /* The CURLOPTTYPE_* id ranges can still be used to figure out what type/size to use for curl_easy_setopt() for the given id */ struct curl_easyoption { const char *name; CURLoption id; curl_easytype type; unsigned int flags; }; CURL_EXTERN const struct curl_easyoption * curl_easy_option_by_name(const char *name); CURL_EXTERN const struct curl_easyoption * curl_easy_option_by_id (CURLoption id); CURL_EXTERN const struct curl_easyoption * curl_easy_option_next(const struct curl_easyoption *prev); #ifdef __cplusplus } /* end of extern "C" */ #endif #endif /* CURLINC_OPTIONS_H */ ================================================ FILE: libraries/curl/stdcheaders.h ================================================ #ifndef CURLINC_STDCHEADERS_H #define CURLINC_STDCHEADERS_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2020, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ #include size_t fread(void *, size_t, size_t, FILE *); size_t fwrite(const void *, size_t, size_t, FILE *); int strcasecmp(const char *, const char *); int strncasecmp(const char *, const char *, size_t); #endif /* CURLINC_STDCHEADERS_H */ ================================================ FILE: libraries/curl/system.h ================================================ #ifndef CURLINC_SYSTEM_H #define CURLINC_SYSTEM_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2020, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ /* * Try to keep one section per platform, compiler and architecture, otherwise, * if an existing section is reused for a different one and later on the * original is adjusted, probably the piggybacking one can be adversely * changed. * * In order to differentiate between platforms/compilers/architectures use * only compiler built in predefined preprocessor symbols. * * curl_off_t * ---------- * * For any given platform/compiler curl_off_t must be typedef'ed to a 64-bit * wide signed integral data type. The width of this data type must remain * constant and independent of any possible large file support settings. * * As an exception to the above, curl_off_t shall be typedef'ed to a 32-bit * wide signed integral data type if there is no 64-bit type. * * As a general rule, curl_off_t shall not be mapped to off_t. This rule shall * only be violated if off_t is the only 64-bit data type available and the * size of off_t is independent of large file support settings. Keep your * build on the safe side avoiding an off_t gating. If you have a 64-bit * off_t then take for sure that another 64-bit data type exists, dig deeper * and you will find it. * */ #if defined(__DJGPP__) || defined(__GO32__) # if defined(__DJGPP__) && (__DJGPP__ > 1) # define CURL_TYPEOF_CURL_OFF_T long long # define CURL_FORMAT_CURL_OFF_T "lld" # define CURL_FORMAT_CURL_OFF_TU "llu" # define CURL_SUFFIX_CURL_OFF_T LL # define CURL_SUFFIX_CURL_OFF_TU ULL # else # define CURL_TYPEOF_CURL_OFF_T long # define CURL_FORMAT_CURL_OFF_T "ld" # define CURL_FORMAT_CURL_OFF_TU "lu" # define CURL_SUFFIX_CURL_OFF_T L # define CURL_SUFFIX_CURL_OFF_TU UL # endif # define CURL_TYPEOF_CURL_SOCKLEN_T int #elif defined(__SALFORDC__) # define CURL_TYPEOF_CURL_OFF_T long # define CURL_FORMAT_CURL_OFF_T "ld" # define CURL_FORMAT_CURL_OFF_TU "lu" # define CURL_SUFFIX_CURL_OFF_T L # define CURL_SUFFIX_CURL_OFF_TU UL # define CURL_TYPEOF_CURL_SOCKLEN_T int #elif defined(__BORLANDC__) # if (__BORLANDC__ < 0x520) # define CURL_TYPEOF_CURL_OFF_T long # define CURL_FORMAT_CURL_OFF_T "ld" # define CURL_FORMAT_CURL_OFF_TU "lu" # define CURL_SUFFIX_CURL_OFF_T L # define CURL_SUFFIX_CURL_OFF_TU UL # else # define CURL_TYPEOF_CURL_OFF_T __int64 # define CURL_FORMAT_CURL_OFF_T "I64d" # define CURL_FORMAT_CURL_OFF_TU "I64u" # define CURL_SUFFIX_CURL_OFF_T i64 # define CURL_SUFFIX_CURL_OFF_TU ui64 # endif # define CURL_TYPEOF_CURL_SOCKLEN_T int #elif defined(__TURBOC__) # define CURL_TYPEOF_CURL_OFF_T long # define CURL_FORMAT_CURL_OFF_T "ld" # define CURL_FORMAT_CURL_OFF_TU "lu" # define CURL_SUFFIX_CURL_OFF_T L # define CURL_SUFFIX_CURL_OFF_TU UL # define CURL_TYPEOF_CURL_SOCKLEN_T int #elif defined(__WATCOMC__) # if defined(__386__) # define CURL_TYPEOF_CURL_OFF_T __int64 # define CURL_FORMAT_CURL_OFF_T "I64d" # define CURL_FORMAT_CURL_OFF_TU "I64u" # define CURL_SUFFIX_CURL_OFF_T i64 # define CURL_SUFFIX_CURL_OFF_TU ui64 # else # define CURL_TYPEOF_CURL_OFF_T long # define CURL_FORMAT_CURL_OFF_T "ld" # define CURL_FORMAT_CURL_OFF_TU "lu" # define CURL_SUFFIX_CURL_OFF_T L # define CURL_SUFFIX_CURL_OFF_TU UL # endif # define CURL_TYPEOF_CURL_SOCKLEN_T int #elif defined(__POCC__) # if (__POCC__ < 280) # define CURL_TYPEOF_CURL_OFF_T long # define CURL_FORMAT_CURL_OFF_T "ld" # define CURL_FORMAT_CURL_OFF_TU "lu" # define CURL_SUFFIX_CURL_OFF_T L # define CURL_SUFFIX_CURL_OFF_TU UL # elif defined(_MSC_VER) # define CURL_TYPEOF_CURL_OFF_T __int64 # define CURL_FORMAT_CURL_OFF_T "I64d" # define CURL_FORMAT_CURL_OFF_TU "I64u" # define CURL_SUFFIX_CURL_OFF_T i64 # define CURL_SUFFIX_CURL_OFF_TU ui64 # else # define CURL_TYPEOF_CURL_OFF_T long long # define CURL_FORMAT_CURL_OFF_T "lld" # define CURL_FORMAT_CURL_OFF_TU "llu" # define CURL_SUFFIX_CURL_OFF_T LL # define CURL_SUFFIX_CURL_OFF_TU ULL # endif # define CURL_TYPEOF_CURL_SOCKLEN_T int #elif defined(__LCC__) # if defined(__e2k__) /* MCST eLbrus C Compiler */ # define CURL_TYPEOF_CURL_OFF_T long # define CURL_FORMAT_CURL_OFF_T "ld" # define CURL_FORMAT_CURL_OFF_TU "lu" # define CURL_SUFFIX_CURL_OFF_T L # define CURL_SUFFIX_CURL_OFF_TU UL # define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t # define CURL_PULL_SYS_TYPES_H 1 # define CURL_PULL_SYS_SOCKET_H 1 # else /* Local (or Little) C Compiler */ # define CURL_TYPEOF_CURL_OFF_T long # define CURL_FORMAT_CURL_OFF_T "ld" # define CURL_FORMAT_CURL_OFF_TU "lu" # define CURL_SUFFIX_CURL_OFF_T L # define CURL_SUFFIX_CURL_OFF_TU UL # define CURL_TYPEOF_CURL_SOCKLEN_T int # endif #elif defined(__SYMBIAN32__) # if defined(__EABI__) /* Treat all ARM compilers equally */ # define CURL_TYPEOF_CURL_OFF_T long long # define CURL_FORMAT_CURL_OFF_T "lld" # define CURL_FORMAT_CURL_OFF_TU "llu" # define CURL_SUFFIX_CURL_OFF_T LL # define CURL_SUFFIX_CURL_OFF_TU ULL # elif defined(__CW32__) # pragma longlong on # define CURL_TYPEOF_CURL_OFF_T long long # define CURL_FORMAT_CURL_OFF_T "lld" # define CURL_FORMAT_CURL_OFF_TU "llu" # define CURL_SUFFIX_CURL_OFF_T LL # define CURL_SUFFIX_CURL_OFF_TU ULL # elif defined(__VC32__) # define CURL_TYPEOF_CURL_OFF_T __int64 # define CURL_FORMAT_CURL_OFF_T "lld" # define CURL_FORMAT_CURL_OFF_TU "llu" # define CURL_SUFFIX_CURL_OFF_T LL # define CURL_SUFFIX_CURL_OFF_TU ULL # endif # define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int #elif defined(__MWERKS__) # define CURL_TYPEOF_CURL_OFF_T long long # define CURL_FORMAT_CURL_OFF_T "lld" # define CURL_FORMAT_CURL_OFF_TU "llu" # define CURL_SUFFIX_CURL_OFF_T LL # define CURL_SUFFIX_CURL_OFF_TU ULL # define CURL_TYPEOF_CURL_SOCKLEN_T int #elif defined(_WIN32_WCE) # define CURL_TYPEOF_CURL_OFF_T __int64 # define CURL_FORMAT_CURL_OFF_T "I64d" # define CURL_FORMAT_CURL_OFF_TU "I64u" # define CURL_SUFFIX_CURL_OFF_T i64 # define CURL_SUFFIX_CURL_OFF_TU ui64 # define CURL_TYPEOF_CURL_SOCKLEN_T int #elif defined(__MINGW32__) # define CURL_TYPEOF_CURL_OFF_T long long # define CURL_FORMAT_CURL_OFF_T "I64d" # define CURL_FORMAT_CURL_OFF_TU "I64u" # define CURL_SUFFIX_CURL_OFF_T LL # define CURL_SUFFIX_CURL_OFF_TU ULL # define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t # define CURL_PULL_SYS_TYPES_H 1 # define CURL_PULL_WS2TCPIP_H 1 #elif defined(__VMS) # if defined(__VAX) # define CURL_TYPEOF_CURL_OFF_T long # define CURL_FORMAT_CURL_OFF_T "ld" # define CURL_FORMAT_CURL_OFF_TU "lu" # define CURL_SUFFIX_CURL_OFF_T L # define CURL_SUFFIX_CURL_OFF_TU UL # else # define CURL_TYPEOF_CURL_OFF_T long long # define CURL_FORMAT_CURL_OFF_T "lld" # define CURL_FORMAT_CURL_OFF_TU "llu" # define CURL_SUFFIX_CURL_OFF_T LL # define CURL_SUFFIX_CURL_OFF_TU ULL # endif # define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int #elif defined(__OS400__) # if defined(__ILEC400__) # define CURL_TYPEOF_CURL_OFF_T long long # define CURL_FORMAT_CURL_OFF_T "lld" # define CURL_FORMAT_CURL_OFF_TU "llu" # define CURL_SUFFIX_CURL_OFF_T LL # define CURL_SUFFIX_CURL_OFF_TU ULL # define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t # define CURL_PULL_SYS_TYPES_H 1 # define CURL_PULL_SYS_SOCKET_H 1 # endif #elif defined(__MVS__) # if defined(__IBMC__) || defined(__IBMCPP__) # if defined(_ILP32) # elif defined(_LP64) # endif # if defined(_LONG_LONG) # define CURL_TYPEOF_CURL_OFF_T long long # define CURL_FORMAT_CURL_OFF_T "lld" # define CURL_FORMAT_CURL_OFF_TU "llu" # define CURL_SUFFIX_CURL_OFF_T LL # define CURL_SUFFIX_CURL_OFF_TU ULL # elif defined(_LP64) # define CURL_TYPEOF_CURL_OFF_T long # define CURL_FORMAT_CURL_OFF_T "ld" # define CURL_FORMAT_CURL_OFF_TU "lu" # define CURL_SUFFIX_CURL_OFF_T L # define CURL_SUFFIX_CURL_OFF_TU UL # else # define CURL_TYPEOF_CURL_OFF_T long # define CURL_FORMAT_CURL_OFF_T "ld" # define CURL_FORMAT_CURL_OFF_TU "lu" # define CURL_SUFFIX_CURL_OFF_T L # define CURL_SUFFIX_CURL_OFF_TU UL # endif # define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t # define CURL_PULL_SYS_TYPES_H 1 # define CURL_PULL_SYS_SOCKET_H 1 # endif #elif defined(__370__) # if defined(__IBMC__) || defined(__IBMCPP__) # if defined(_ILP32) # elif defined(_LP64) # endif # if defined(_LONG_LONG) # define CURL_TYPEOF_CURL_OFF_T long long # define CURL_FORMAT_CURL_OFF_T "lld" # define CURL_FORMAT_CURL_OFF_TU "llu" # define CURL_SUFFIX_CURL_OFF_T LL # define CURL_SUFFIX_CURL_OFF_TU ULL # elif defined(_LP64) # define CURL_TYPEOF_CURL_OFF_T long # define CURL_FORMAT_CURL_OFF_T "ld" # define CURL_FORMAT_CURL_OFF_TU "lu" # define CURL_SUFFIX_CURL_OFF_T L # define CURL_SUFFIX_CURL_OFF_TU UL # else # define CURL_TYPEOF_CURL_OFF_T long # define CURL_FORMAT_CURL_OFF_T "ld" # define CURL_FORMAT_CURL_OFF_TU "lu" # define CURL_SUFFIX_CURL_OFF_T L # define CURL_SUFFIX_CURL_OFF_TU UL # endif # define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t # define CURL_PULL_SYS_TYPES_H 1 # define CURL_PULL_SYS_SOCKET_H 1 # endif #elif defined(TPF) # define CURL_TYPEOF_CURL_OFF_T long # define CURL_FORMAT_CURL_OFF_T "ld" # define CURL_FORMAT_CURL_OFF_TU "lu" # define CURL_SUFFIX_CURL_OFF_T L # define CURL_SUFFIX_CURL_OFF_TU UL # define CURL_TYPEOF_CURL_SOCKLEN_T int #elif defined(__TINYC__) /* also known as tcc */ # define CURL_TYPEOF_CURL_OFF_T long long # define CURL_FORMAT_CURL_OFF_T "lld" # define CURL_FORMAT_CURL_OFF_TU "llu" # define CURL_SUFFIX_CURL_OFF_T LL # define CURL_SUFFIX_CURL_OFF_TU ULL # define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t # define CURL_PULL_SYS_TYPES_H 1 # define CURL_PULL_SYS_SOCKET_H 1 #elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) /* Oracle Solaris Studio */ # if !defined(__LP64) && (defined(__ILP32) || \ defined(__i386) || \ defined(__sparcv8) || \ defined(__sparcv8plus)) # define CURL_TYPEOF_CURL_OFF_T long long # define CURL_FORMAT_CURL_OFF_T "lld" # define CURL_FORMAT_CURL_OFF_TU "llu" # define CURL_SUFFIX_CURL_OFF_T LL # define CURL_SUFFIX_CURL_OFF_TU ULL # elif defined(__LP64) || \ defined(__amd64) || defined(__sparcv9) # define CURL_TYPEOF_CURL_OFF_T long # define CURL_FORMAT_CURL_OFF_T "ld" # define CURL_FORMAT_CURL_OFF_TU "lu" # define CURL_SUFFIX_CURL_OFF_T L # define CURL_SUFFIX_CURL_OFF_TU UL # endif # define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t # define CURL_PULL_SYS_TYPES_H 1 # define CURL_PULL_SYS_SOCKET_H 1 #elif defined(__xlc__) /* IBM xlc compiler */ # if !defined(_LP64) # define CURL_TYPEOF_CURL_OFF_T long long # define CURL_FORMAT_CURL_OFF_T "lld" # define CURL_FORMAT_CURL_OFF_TU "llu" # define CURL_SUFFIX_CURL_OFF_T LL # define CURL_SUFFIX_CURL_OFF_TU ULL # else # define CURL_TYPEOF_CURL_OFF_T long # define CURL_FORMAT_CURL_OFF_T "ld" # define CURL_FORMAT_CURL_OFF_TU "lu" # define CURL_SUFFIX_CURL_OFF_T L # define CURL_SUFFIX_CURL_OFF_TU UL # endif # define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t # define CURL_PULL_SYS_TYPES_H 1 # define CURL_PULL_SYS_SOCKET_H 1 /* ===================================== */ /* KEEP MSVC THE PENULTIMATE ENTRY */ /* ===================================== */ #elif defined(_MSC_VER) # if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64) # define CURL_TYPEOF_CURL_OFF_T __int64 # define CURL_FORMAT_CURL_OFF_T "I64d" # define CURL_FORMAT_CURL_OFF_TU "I64u" # define CURL_SUFFIX_CURL_OFF_T i64 # define CURL_SUFFIX_CURL_OFF_TU ui64 # else # define CURL_TYPEOF_CURL_OFF_T long # define CURL_FORMAT_CURL_OFF_T "ld" # define CURL_FORMAT_CURL_OFF_TU "lu" # define CURL_SUFFIX_CURL_OFF_T L # define CURL_SUFFIX_CURL_OFF_TU UL # endif # define CURL_TYPEOF_CURL_SOCKLEN_T int /* ===================================== */ /* KEEP GENERIC GCC THE LAST ENTRY */ /* ===================================== */ #elif defined(__GNUC__) && !defined(_SCO_DS) # if !defined(__LP64__) && \ (defined(__ILP32__) || defined(__i386__) || defined(__hppa__) || \ defined(__ppc__) || defined(__powerpc__) || defined(__arm__) || \ defined(__sparc__) || defined(__mips__) || defined(__sh__) || \ defined(__XTENSA__) || \ (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 4) || \ (defined(__LONG_MAX__) && __LONG_MAX__ == 2147483647L)) # define CURL_TYPEOF_CURL_OFF_T long long # define CURL_FORMAT_CURL_OFF_T "lld" # define CURL_FORMAT_CURL_OFF_TU "llu" # define CURL_SUFFIX_CURL_OFF_T LL # define CURL_SUFFIX_CURL_OFF_TU ULL # elif defined(__LP64__) || \ defined(__x86_64__) || defined(__ppc64__) || defined(__sparc64__) || \ defined(__e2k__) || \ (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 8) || \ (defined(__LONG_MAX__) && __LONG_MAX__ == 9223372036854775807L) # define CURL_TYPEOF_CURL_OFF_T long # define CURL_FORMAT_CURL_OFF_T "ld" # define CURL_FORMAT_CURL_OFF_TU "lu" # define CURL_SUFFIX_CURL_OFF_T L # define CURL_SUFFIX_CURL_OFF_TU UL # endif # define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t # define CURL_PULL_SYS_TYPES_H 1 # define CURL_PULL_SYS_SOCKET_H 1 #else /* generic "safe guess" on old 32 bit style */ # define CURL_TYPEOF_CURL_OFF_T long # define CURL_FORMAT_CURL_OFF_T "ld" # define CURL_FORMAT_CURL_OFF_TU "lu" # define CURL_SUFFIX_CURL_OFF_T L # define CURL_SUFFIX_CURL_OFF_TU UL # define CURL_TYPEOF_CURL_SOCKLEN_T int #endif #ifdef _AIX /* AIX needs */ #define CURL_PULL_SYS_POLL_H #endif /* CURL_PULL_WS2TCPIP_H is defined above when inclusion of header file */ /* ws2tcpip.h is required here to properly make type definitions below. */ #ifdef CURL_PULL_WS2TCPIP_H # include # include # include #endif /* CURL_PULL_SYS_TYPES_H is defined above when inclusion of header file */ /* sys/types.h is required here to properly make type definitions below. */ #ifdef CURL_PULL_SYS_TYPES_H # include #endif /* CURL_PULL_SYS_SOCKET_H is defined above when inclusion of header file */ /* sys/socket.h is required here to properly make type definitions below. */ #ifdef CURL_PULL_SYS_SOCKET_H # include #endif /* CURL_PULL_SYS_POLL_H is defined above when inclusion of header file */ /* sys/poll.h is required here to properly make type definitions below. */ #ifdef CURL_PULL_SYS_POLL_H # include #endif /* Data type definition of curl_socklen_t. */ #ifdef CURL_TYPEOF_CURL_SOCKLEN_T typedef CURL_TYPEOF_CURL_SOCKLEN_T curl_socklen_t; #endif /* Data type definition of curl_off_t. */ #ifdef CURL_TYPEOF_CURL_OFF_T typedef CURL_TYPEOF_CURL_OFF_T curl_off_t; #endif /* * CURL_ISOCPP and CURL_OFF_T_C definitions are done here in order to allow * these to be visible and exported by the external libcurl interface API, * while also making them visible to the library internals, simply including * curl_setup.h, without actually needing to include curl.h internally. * If some day this section would grow big enough, all this should be moved * to its own header file. */ /* * Figure out if we can use the ## preprocessor operator, which is supported * by ISO/ANSI C and C++. Some compilers support it without setting __STDC__ * or __cplusplus so we need to carefully check for them too. */ #if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \ defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \ defined(__POCC__) || defined(__SALFORDC__) || defined(__HIGHC__) || \ defined(__ILEC400__) /* This compiler is believed to have an ISO compatible preprocessor */ #define CURL_ISOCPP #else /* This compiler is believed NOT to have an ISO compatible preprocessor */ #undef CURL_ISOCPP #endif /* * Macros for minimum-width signed and unsigned curl_off_t integer constants. */ #if defined(__BORLANDC__) && (__BORLANDC__ == 0x0551) # define CURLINC_OFF_T_C_HLPR2(x) x # define CURLINC_OFF_T_C_HLPR1(x) CURLINC_OFF_T_C_HLPR2(x) # define CURL_OFF_T_C(Val) CURLINC_OFF_T_C_HLPR1(Val) ## \ CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_T) # define CURL_OFF_TU_C(Val) CURLINC_OFF_T_C_HLPR1(Val) ## \ CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_TU) #else # ifdef CURL_ISOCPP # define CURLINC_OFF_T_C_HLPR2(Val,Suffix) Val ## Suffix # else # define CURLINC_OFF_T_C_HLPR2(Val,Suffix) Val/**/Suffix # endif # define CURLINC_OFF_T_C_HLPR1(Val,Suffix) CURLINC_OFF_T_C_HLPR2(Val,Suffix) # define CURL_OFF_T_C(Val) CURLINC_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_T) # define CURL_OFF_TU_C(Val) CURLINC_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_TU) #endif #endif /* CURLINC_SYSTEM_H */ ================================================ FILE: libraries/curl/typecheck-gcc.h ================================================ #ifndef CURLINC_TYPECHECK_GCC_H #define CURLINC_TYPECHECK_GCC_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2021, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ /* wraps curl_easy_setopt() with typechecking */ /* To add a new kind of warning, add an * if(curlcheck_sometype_option(_curl_opt)) * if(!curlcheck_sometype(value)) * _curl_easy_setopt_err_sometype(); * block and define curlcheck_sometype_option, curlcheck_sometype and * _curl_easy_setopt_err_sometype below * * NOTE: We use two nested 'if' statements here instead of the && operator, in * order to work around gcc bug #32061. It affects only gcc 4.3.x/4.4.x * when compiling with -Wlogical-op. * * To add an option that uses the same type as an existing option, you'll just * need to extend the appropriate _curl_*_option macro */ #define curl_easy_setopt(handle, option, value) \ __extension__({ \ __typeof__(option) _curl_opt = option; \ if(__builtin_constant_p(_curl_opt)) { \ if(curlcheck_long_option(_curl_opt)) \ if(!curlcheck_long(value)) \ _curl_easy_setopt_err_long(); \ if(curlcheck_off_t_option(_curl_opt)) \ if(!curlcheck_off_t(value)) \ _curl_easy_setopt_err_curl_off_t(); \ if(curlcheck_string_option(_curl_opt)) \ if(!curlcheck_string(value)) \ _curl_easy_setopt_err_string(); \ if(curlcheck_write_cb_option(_curl_opt)) \ if(!curlcheck_write_cb(value)) \ _curl_easy_setopt_err_write_callback(); \ if((_curl_opt) == CURLOPT_RESOLVER_START_FUNCTION) \ if(!curlcheck_resolver_start_callback(value)) \ _curl_easy_setopt_err_resolver_start_callback(); \ if((_curl_opt) == CURLOPT_READFUNCTION) \ if(!curlcheck_read_cb(value)) \ _curl_easy_setopt_err_read_cb(); \ if((_curl_opt) == CURLOPT_IOCTLFUNCTION) \ if(!curlcheck_ioctl_cb(value)) \ _curl_easy_setopt_err_ioctl_cb(); \ if((_curl_opt) == CURLOPT_SOCKOPTFUNCTION) \ if(!curlcheck_sockopt_cb(value)) \ _curl_easy_setopt_err_sockopt_cb(); \ if((_curl_opt) == CURLOPT_OPENSOCKETFUNCTION) \ if(!curlcheck_opensocket_cb(value)) \ _curl_easy_setopt_err_opensocket_cb(); \ if((_curl_opt) == CURLOPT_PROGRESSFUNCTION) \ if(!curlcheck_progress_cb(value)) \ _curl_easy_setopt_err_progress_cb(); \ if((_curl_opt) == CURLOPT_DEBUGFUNCTION) \ if(!curlcheck_debug_cb(value)) \ _curl_easy_setopt_err_debug_cb(); \ if((_curl_opt) == CURLOPT_SSL_CTX_FUNCTION) \ if(!curlcheck_ssl_ctx_cb(value)) \ _curl_easy_setopt_err_ssl_ctx_cb(); \ if(curlcheck_conv_cb_option(_curl_opt)) \ if(!curlcheck_conv_cb(value)) \ _curl_easy_setopt_err_conv_cb(); \ if((_curl_opt) == CURLOPT_SEEKFUNCTION) \ if(!curlcheck_seek_cb(value)) \ _curl_easy_setopt_err_seek_cb(); \ if(curlcheck_cb_data_option(_curl_opt)) \ if(!curlcheck_cb_data(value)) \ _curl_easy_setopt_err_cb_data(); \ if((_curl_opt) == CURLOPT_ERRORBUFFER) \ if(!curlcheck_error_buffer(value)) \ _curl_easy_setopt_err_error_buffer(); \ if((_curl_opt) == CURLOPT_STDERR) \ if(!curlcheck_FILE(value)) \ _curl_easy_setopt_err_FILE(); \ if(curlcheck_postfields_option(_curl_opt)) \ if(!curlcheck_postfields(value)) \ _curl_easy_setopt_err_postfields(); \ if((_curl_opt) == CURLOPT_HTTPPOST) \ if(!curlcheck_arr((value), struct curl_httppost)) \ _curl_easy_setopt_err_curl_httpost(); \ if((_curl_opt) == CURLOPT_MIMEPOST) \ if(!curlcheck_ptr((value), curl_mime)) \ _curl_easy_setopt_err_curl_mimepost(); \ if(curlcheck_slist_option(_curl_opt)) \ if(!curlcheck_arr((value), struct curl_slist)) \ _curl_easy_setopt_err_curl_slist(); \ if((_curl_opt) == CURLOPT_SHARE) \ if(!curlcheck_ptr((value), CURLSH)) \ _curl_easy_setopt_err_CURLSH(); \ } \ curl_easy_setopt(handle, _curl_opt, value); \ }) /* wraps curl_easy_getinfo() with typechecking */ #define curl_easy_getinfo(handle, info, arg) \ __extension__({ \ __typeof__(info) _curl_info = info; \ if(__builtin_constant_p(_curl_info)) { \ if(curlcheck_string_info(_curl_info)) \ if(!curlcheck_arr((arg), char *)) \ _curl_easy_getinfo_err_string(); \ if(curlcheck_long_info(_curl_info)) \ if(!curlcheck_arr((arg), long)) \ _curl_easy_getinfo_err_long(); \ if(curlcheck_double_info(_curl_info)) \ if(!curlcheck_arr((arg), double)) \ _curl_easy_getinfo_err_double(); \ if(curlcheck_slist_info(_curl_info)) \ if(!curlcheck_arr((arg), struct curl_slist *)) \ _curl_easy_getinfo_err_curl_slist(); \ if(curlcheck_tlssessioninfo_info(_curl_info)) \ if(!curlcheck_arr((arg), struct curl_tlssessioninfo *)) \ _curl_easy_getinfo_err_curl_tlssesssioninfo(); \ if(curlcheck_certinfo_info(_curl_info)) \ if(!curlcheck_arr((arg), struct curl_certinfo *)) \ _curl_easy_getinfo_err_curl_certinfo(); \ if(curlcheck_socket_info(_curl_info)) \ if(!curlcheck_arr((arg), curl_socket_t)) \ _curl_easy_getinfo_err_curl_socket(); \ if(curlcheck_off_t_info(_curl_info)) \ if(!curlcheck_arr((arg), curl_off_t)) \ _curl_easy_getinfo_err_curl_off_t(); \ } \ curl_easy_getinfo(handle, _curl_info, arg); \ }) /* * For now, just make sure that the functions are called with three arguments */ #define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param) #define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param) /* the actual warnings, triggered by calling the _curl_easy_setopt_err* * functions */ /* To define a new warning, use _CURL_WARNING(identifier, "message") */ #define CURLWARNING(id, message) \ static void __attribute__((__warning__(message))) \ __attribute__((__unused__)) __attribute__((__noinline__)) \ id(void) { __asm__(""); } CURLWARNING(_curl_easy_setopt_err_long, "curl_easy_setopt expects a long argument for this option") CURLWARNING(_curl_easy_setopt_err_curl_off_t, "curl_easy_setopt expects a curl_off_t argument for this option") CURLWARNING(_curl_easy_setopt_err_string, "curl_easy_setopt expects a " "string ('char *' or char[]) argument for this option" ) CURLWARNING(_curl_easy_setopt_err_write_callback, "curl_easy_setopt expects a curl_write_callback argument for this option") CURLWARNING(_curl_easy_setopt_err_resolver_start_callback, "curl_easy_setopt expects a " "curl_resolver_start_callback argument for this option" ) CURLWARNING(_curl_easy_setopt_err_read_cb, "curl_easy_setopt expects a curl_read_callback argument for this option") CURLWARNING(_curl_easy_setopt_err_ioctl_cb, "curl_easy_setopt expects a curl_ioctl_callback argument for this option") CURLWARNING(_curl_easy_setopt_err_sockopt_cb, "curl_easy_setopt expects a curl_sockopt_callback argument for this option") CURLWARNING(_curl_easy_setopt_err_opensocket_cb, "curl_easy_setopt expects a " "curl_opensocket_callback argument for this option" ) CURLWARNING(_curl_easy_setopt_err_progress_cb, "curl_easy_setopt expects a curl_progress_callback argument for this option") CURLWARNING(_curl_easy_setopt_err_debug_cb, "curl_easy_setopt expects a curl_debug_callback argument for this option") CURLWARNING(_curl_easy_setopt_err_ssl_ctx_cb, "curl_easy_setopt expects a curl_ssl_ctx_callback argument for this option") CURLWARNING(_curl_easy_setopt_err_conv_cb, "curl_easy_setopt expects a curl_conv_callback argument for this option") CURLWARNING(_curl_easy_setopt_err_seek_cb, "curl_easy_setopt expects a curl_seek_callback argument for this option") CURLWARNING(_curl_easy_setopt_err_cb_data, "curl_easy_setopt expects a " "private data pointer as argument for this option") CURLWARNING(_curl_easy_setopt_err_error_buffer, "curl_easy_setopt expects a " "char buffer of CURL_ERROR_SIZE as argument for this option") CURLWARNING(_curl_easy_setopt_err_FILE, "curl_easy_setopt expects a 'FILE *' argument for this option") CURLWARNING(_curl_easy_setopt_err_postfields, "curl_easy_setopt expects a 'void *' or 'char *' argument for this option") CURLWARNING(_curl_easy_setopt_err_curl_httpost, "curl_easy_setopt expects a 'struct curl_httppost *' " "argument for this option") CURLWARNING(_curl_easy_setopt_err_curl_mimepost, "curl_easy_setopt expects a 'curl_mime *' " "argument for this option") CURLWARNING(_curl_easy_setopt_err_curl_slist, "curl_easy_setopt expects a 'struct curl_slist *' argument for this option") CURLWARNING(_curl_easy_setopt_err_CURLSH, "curl_easy_setopt expects a CURLSH* argument for this option") CURLWARNING(_curl_easy_getinfo_err_string, "curl_easy_getinfo expects a pointer to 'char *' for this info") CURLWARNING(_curl_easy_getinfo_err_long, "curl_easy_getinfo expects a pointer to long for this info") CURLWARNING(_curl_easy_getinfo_err_double, "curl_easy_getinfo expects a pointer to double for this info") CURLWARNING(_curl_easy_getinfo_err_curl_slist, "curl_easy_getinfo expects a pointer to 'struct curl_slist *' for this info") CURLWARNING(_curl_easy_getinfo_err_curl_tlssesssioninfo, "curl_easy_getinfo expects a pointer to " "'struct curl_tlssessioninfo *' for this info") CURLWARNING(_curl_easy_getinfo_err_curl_certinfo, "curl_easy_getinfo expects a pointer to " "'struct curl_certinfo *' for this info") CURLWARNING(_curl_easy_getinfo_err_curl_socket, "curl_easy_getinfo expects a pointer to curl_socket_t for this info") CURLWARNING(_curl_easy_getinfo_err_curl_off_t, "curl_easy_getinfo expects a pointer to curl_off_t for this info") /* groups of curl_easy_setops options that take the same type of argument */ /* To add a new option to one of the groups, just add * (option) == CURLOPT_SOMETHING * to the or-expression. If the option takes a long or curl_off_t, you don't * have to do anything */ /* evaluates to true if option takes a long argument */ #define curlcheck_long_option(option) \ (0 < (option) && (option) < CURLOPTTYPE_OBJECTPOINT) #define curlcheck_off_t_option(option) \ (((option) > CURLOPTTYPE_OFF_T) && ((option) < CURLOPTTYPE_BLOB)) /* evaluates to true if option takes a char* argument */ #define curlcheck_string_option(option) \ ((option) == CURLOPT_ABSTRACT_UNIX_SOCKET || \ (option) == CURLOPT_ACCEPT_ENCODING || \ (option) == CURLOPT_ALTSVC || \ (option) == CURLOPT_CAINFO || \ (option) == CURLOPT_CAPATH || \ (option) == CURLOPT_COOKIE || \ (option) == CURLOPT_COOKIEFILE || \ (option) == CURLOPT_COOKIEJAR || \ (option) == CURLOPT_COOKIELIST || \ (option) == CURLOPT_CRLFILE || \ (option) == CURLOPT_CUSTOMREQUEST || \ (option) == CURLOPT_DEFAULT_PROTOCOL || \ (option) == CURLOPT_DNS_INTERFACE || \ (option) == CURLOPT_DNS_LOCAL_IP4 || \ (option) == CURLOPT_DNS_LOCAL_IP6 || \ (option) == CURLOPT_DNS_SERVERS || \ (option) == CURLOPT_DOH_URL || \ (option) == CURLOPT_EGDSOCKET || \ (option) == CURLOPT_FTPPORT || \ (option) == CURLOPT_FTP_ACCOUNT || \ (option) == CURLOPT_FTP_ALTERNATIVE_TO_USER || \ (option) == CURLOPT_HSTS || \ (option) == CURLOPT_INTERFACE || \ (option) == CURLOPT_ISSUERCERT || \ (option) == CURLOPT_KEYPASSWD || \ (option) == CURLOPT_KRBLEVEL || \ (option) == CURLOPT_LOGIN_OPTIONS || \ (option) == CURLOPT_MAIL_AUTH || \ (option) == CURLOPT_MAIL_FROM || \ (option) == CURLOPT_NETRC_FILE || \ (option) == CURLOPT_NOPROXY || \ (option) == CURLOPT_PASSWORD || \ (option) == CURLOPT_PINNEDPUBLICKEY || \ (option) == CURLOPT_PRE_PROXY || \ (option) == CURLOPT_PROXY || \ (option) == CURLOPT_PROXYPASSWORD || \ (option) == CURLOPT_PROXYUSERNAME || \ (option) == CURLOPT_PROXYUSERPWD || \ (option) == CURLOPT_PROXY_CAINFO || \ (option) == CURLOPT_PROXY_CAPATH || \ (option) == CURLOPT_PROXY_CRLFILE || \ (option) == CURLOPT_PROXY_ISSUERCERT || \ (option) == CURLOPT_PROXY_KEYPASSWD || \ (option) == CURLOPT_PROXY_PINNEDPUBLICKEY || \ (option) == CURLOPT_PROXY_SERVICE_NAME || \ (option) == CURLOPT_PROXY_SSLCERT || \ (option) == CURLOPT_PROXY_SSLCERTTYPE || \ (option) == CURLOPT_PROXY_SSLKEY || \ (option) == CURLOPT_PROXY_SSLKEYTYPE || \ (option) == CURLOPT_PROXY_SSL_CIPHER_LIST || \ (option) == CURLOPT_PROXY_TLS13_CIPHERS || \ (option) == CURLOPT_PROXY_TLSAUTH_PASSWORD || \ (option) == CURLOPT_PROXY_TLSAUTH_TYPE || \ (option) == CURLOPT_PROXY_TLSAUTH_USERNAME || \ (option) == CURLOPT_RANDOM_FILE || \ (option) == CURLOPT_RANGE || \ (option) == CURLOPT_REFERER || \ (option) == CURLOPT_REQUEST_TARGET || \ (option) == CURLOPT_RTSP_SESSION_ID || \ (option) == CURLOPT_RTSP_STREAM_URI || \ (option) == CURLOPT_RTSP_TRANSPORT || \ (option) == CURLOPT_SASL_AUTHZID || \ (option) == CURLOPT_SERVICE_NAME || \ (option) == CURLOPT_SOCKS5_GSSAPI_SERVICE || \ (option) == CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 || \ (option) == CURLOPT_SSH_KNOWNHOSTS || \ (option) == CURLOPT_SSH_PRIVATE_KEYFILE || \ (option) == CURLOPT_SSH_PUBLIC_KEYFILE || \ (option) == CURLOPT_SSLCERT || \ (option) == CURLOPT_SSLCERTTYPE || \ (option) == CURLOPT_SSLENGINE || \ (option) == CURLOPT_SSLKEY || \ (option) == CURLOPT_SSLKEYTYPE || \ (option) == CURLOPT_SSL_CIPHER_LIST || \ (option) == CURLOPT_TLS13_CIPHERS || \ (option) == CURLOPT_TLSAUTH_PASSWORD || \ (option) == CURLOPT_TLSAUTH_TYPE || \ (option) == CURLOPT_TLSAUTH_USERNAME || \ (option) == CURLOPT_UNIX_SOCKET_PATH || \ (option) == CURLOPT_URL || \ (option) == CURLOPT_USERAGENT || \ (option) == CURLOPT_USERNAME || \ (option) == CURLOPT_AWS_SIGV4 || \ (option) == CURLOPT_USERPWD || \ (option) == CURLOPT_XOAUTH2_BEARER || \ (option) == CURLOPT_SSL_EC_CURVES || \ 0) /* evaluates to true if option takes a curl_write_callback argument */ #define curlcheck_write_cb_option(option) \ ((option) == CURLOPT_HEADERFUNCTION || \ (option) == CURLOPT_WRITEFUNCTION) /* evaluates to true if option takes a curl_conv_callback argument */ #define curlcheck_conv_cb_option(option) \ ((option) == CURLOPT_CONV_TO_NETWORK_FUNCTION || \ (option) == CURLOPT_CONV_FROM_NETWORK_FUNCTION || \ (option) == CURLOPT_CONV_FROM_UTF8_FUNCTION) /* evaluates to true if option takes a data argument to pass to a callback */ #define curlcheck_cb_data_option(option) \ ((option) == CURLOPT_CHUNK_DATA || \ (option) == CURLOPT_CLOSESOCKETDATA || \ (option) == CURLOPT_DEBUGDATA || \ (option) == CURLOPT_FNMATCH_DATA || \ (option) == CURLOPT_HEADERDATA || \ (option) == CURLOPT_HSTSREADDATA || \ (option) == CURLOPT_HSTSWRITEDATA || \ (option) == CURLOPT_INTERLEAVEDATA || \ (option) == CURLOPT_IOCTLDATA || \ (option) == CURLOPT_OPENSOCKETDATA || \ (option) == CURLOPT_PROGRESSDATA || \ (option) == CURLOPT_READDATA || \ (option) == CURLOPT_SEEKDATA || \ (option) == CURLOPT_SOCKOPTDATA || \ (option) == CURLOPT_SSH_KEYDATA || \ (option) == CURLOPT_SSL_CTX_DATA || \ (option) == CURLOPT_WRITEDATA || \ (option) == CURLOPT_RESOLVER_START_DATA || \ (option) == CURLOPT_TRAILERDATA || \ 0) /* evaluates to true if option takes a POST data argument (void* or char*) */ #define curlcheck_postfields_option(option) \ ((option) == CURLOPT_POSTFIELDS || \ (option) == CURLOPT_COPYPOSTFIELDS || \ 0) /* evaluates to true if option takes a struct curl_slist * argument */ #define curlcheck_slist_option(option) \ ((option) == CURLOPT_HTTP200ALIASES || \ (option) == CURLOPT_HTTPHEADER || \ (option) == CURLOPT_MAIL_RCPT || \ (option) == CURLOPT_POSTQUOTE || \ (option) == CURLOPT_PREQUOTE || \ (option) == CURLOPT_PROXYHEADER || \ (option) == CURLOPT_QUOTE || \ (option) == CURLOPT_RESOLVE || \ (option) == CURLOPT_TELNETOPTIONS || \ (option) == CURLOPT_CONNECT_TO || \ 0) /* groups of curl_easy_getinfo infos that take the same type of argument */ /* evaluates to true if info expects a pointer to char * argument */ #define curlcheck_string_info(info) \ (CURLINFO_STRING < (info) && (info) < CURLINFO_LONG && \ (info) != CURLINFO_PRIVATE) /* evaluates to true if info expects a pointer to long argument */ #define curlcheck_long_info(info) \ (CURLINFO_LONG < (info) && (info) < CURLINFO_DOUBLE) /* evaluates to true if info expects a pointer to double argument */ #define curlcheck_double_info(info) \ (CURLINFO_DOUBLE < (info) && (info) < CURLINFO_SLIST) /* true if info expects a pointer to struct curl_slist * argument */ #define curlcheck_slist_info(info) \ (((info) == CURLINFO_SSL_ENGINES) || ((info) == CURLINFO_COOKIELIST)) /* true if info expects a pointer to struct curl_tlssessioninfo * argument */ #define curlcheck_tlssessioninfo_info(info) \ (((info) == CURLINFO_TLS_SSL_PTR) || ((info) == CURLINFO_TLS_SESSION)) /* true if info expects a pointer to struct curl_certinfo * argument */ #define curlcheck_certinfo_info(info) ((info) == CURLINFO_CERTINFO) /* true if info expects a pointer to struct curl_socket_t argument */ #define curlcheck_socket_info(info) \ (CURLINFO_SOCKET < (info) && (info) < CURLINFO_OFF_T) /* true if info expects a pointer to curl_off_t argument */ #define curlcheck_off_t_info(info) \ (CURLINFO_OFF_T < (info)) /* typecheck helpers -- check whether given expression has requested type*/ /* For pointers, you can use the curlcheck_ptr/curlcheck_arr macros, * otherwise define a new macro. Search for __builtin_types_compatible_p * in the GCC manual. * NOTE: these macros MUST NOT EVALUATE their arguments! The argument is * the actual expression passed to the curl_easy_setopt macro. This * means that you can only apply the sizeof and __typeof__ operators, no * == or whatsoever. */ /* XXX: should evaluate to true if expr is a pointer */ #define curlcheck_any_ptr(expr) \ (sizeof(expr) == sizeof(void *)) /* evaluates to true if expr is NULL */ /* XXX: must not evaluate expr, so this check is not accurate */ #define curlcheck_NULL(expr) \ (__builtin_types_compatible_p(__typeof__(expr), __typeof__(NULL))) /* evaluates to true if expr is type*, const type* or NULL */ #define curlcheck_ptr(expr, type) \ (curlcheck_NULL(expr) || \ __builtin_types_compatible_p(__typeof__(expr), type *) || \ __builtin_types_compatible_p(__typeof__(expr), const type *)) /* evaluates to true if expr is one of type[], type*, NULL or const type* */ #define curlcheck_arr(expr, type) \ (curlcheck_ptr((expr), type) || \ __builtin_types_compatible_p(__typeof__(expr), type [])) /* evaluates to true if expr is a string */ #define curlcheck_string(expr) \ (curlcheck_arr((expr), char) || \ curlcheck_arr((expr), signed char) || \ curlcheck_arr((expr), unsigned char)) /* evaluates to true if expr is a long (no matter the signedness) * XXX: for now, int is also accepted (and therefore short and char, which * are promoted to int when passed to a variadic function) */ #define curlcheck_long(expr) \ (__builtin_types_compatible_p(__typeof__(expr), long) || \ __builtin_types_compatible_p(__typeof__(expr), signed long) || \ __builtin_types_compatible_p(__typeof__(expr), unsigned long) || \ __builtin_types_compatible_p(__typeof__(expr), int) || \ __builtin_types_compatible_p(__typeof__(expr), signed int) || \ __builtin_types_compatible_p(__typeof__(expr), unsigned int) || \ __builtin_types_compatible_p(__typeof__(expr), short) || \ __builtin_types_compatible_p(__typeof__(expr), signed short) || \ __builtin_types_compatible_p(__typeof__(expr), unsigned short) || \ __builtin_types_compatible_p(__typeof__(expr), char) || \ __builtin_types_compatible_p(__typeof__(expr), signed char) || \ __builtin_types_compatible_p(__typeof__(expr), unsigned char)) /* evaluates to true if expr is of type curl_off_t */ #define curlcheck_off_t(expr) \ (__builtin_types_compatible_p(__typeof__(expr), curl_off_t)) /* evaluates to true if expr is abuffer suitable for CURLOPT_ERRORBUFFER */ /* XXX: also check size of an char[] array? */ #define curlcheck_error_buffer(expr) \ (curlcheck_NULL(expr) || \ __builtin_types_compatible_p(__typeof__(expr), char *) || \ __builtin_types_compatible_p(__typeof__(expr), char[])) /* evaluates to true if expr is of type (const) void* or (const) FILE* */ #if 0 #define curlcheck_cb_data(expr) \ (curlcheck_ptr((expr), void) || \ curlcheck_ptr((expr), FILE)) #else /* be less strict */ #define curlcheck_cb_data(expr) \ curlcheck_any_ptr(expr) #endif /* evaluates to true if expr is of type FILE* */ #define curlcheck_FILE(expr) \ (curlcheck_NULL(expr) || \ (__builtin_types_compatible_p(__typeof__(expr), FILE *))) /* evaluates to true if expr can be passed as POST data (void* or char*) */ #define curlcheck_postfields(expr) \ (curlcheck_ptr((expr), void) || \ curlcheck_arr((expr), char) || \ curlcheck_arr((expr), unsigned char)) /* helper: __builtin_types_compatible_p distinguishes between functions and * function pointers, hide it */ #define curlcheck_cb_compatible(func, type) \ (__builtin_types_compatible_p(__typeof__(func), type) || \ __builtin_types_compatible_p(__typeof__(func) *, type)) /* evaluates to true if expr is of type curl_resolver_start_callback */ #define curlcheck_resolver_start_callback(expr) \ (curlcheck_NULL(expr) || \ curlcheck_cb_compatible((expr), curl_resolver_start_callback)) /* evaluates to true if expr is of type curl_read_callback or "similar" */ #define curlcheck_read_cb(expr) \ (curlcheck_NULL(expr) || \ curlcheck_cb_compatible((expr), __typeof__(fread) *) || \ curlcheck_cb_compatible((expr), curl_read_callback) || \ curlcheck_cb_compatible((expr), _curl_read_callback1) || \ curlcheck_cb_compatible((expr), _curl_read_callback2) || \ curlcheck_cb_compatible((expr), _curl_read_callback3) || \ curlcheck_cb_compatible((expr), _curl_read_callback4) || \ curlcheck_cb_compatible((expr), _curl_read_callback5) || \ curlcheck_cb_compatible((expr), _curl_read_callback6)) typedef size_t (*_curl_read_callback1)(char *, size_t, size_t, void *); typedef size_t (*_curl_read_callback2)(char *, size_t, size_t, const void *); typedef size_t (*_curl_read_callback3)(char *, size_t, size_t, FILE *); typedef size_t (*_curl_read_callback4)(void *, size_t, size_t, void *); typedef size_t (*_curl_read_callback5)(void *, size_t, size_t, const void *); typedef size_t (*_curl_read_callback6)(void *, size_t, size_t, FILE *); /* evaluates to true if expr is of type curl_write_callback or "similar" */ #define curlcheck_write_cb(expr) \ (curlcheck_read_cb(expr) || \ curlcheck_cb_compatible((expr), __typeof__(fwrite) *) || \ curlcheck_cb_compatible((expr), curl_write_callback) || \ curlcheck_cb_compatible((expr), _curl_write_callback1) || \ curlcheck_cb_compatible((expr), _curl_write_callback2) || \ curlcheck_cb_compatible((expr), _curl_write_callback3) || \ curlcheck_cb_compatible((expr), _curl_write_callback4) || \ curlcheck_cb_compatible((expr), _curl_write_callback5) || \ curlcheck_cb_compatible((expr), _curl_write_callback6)) typedef size_t (*_curl_write_callback1)(const char *, size_t, size_t, void *); typedef size_t (*_curl_write_callback2)(const char *, size_t, size_t, const void *); typedef size_t (*_curl_write_callback3)(const char *, size_t, size_t, FILE *); typedef size_t (*_curl_write_callback4)(const void *, size_t, size_t, void *); typedef size_t (*_curl_write_callback5)(const void *, size_t, size_t, const void *); typedef size_t (*_curl_write_callback6)(const void *, size_t, size_t, FILE *); /* evaluates to true if expr is of type curl_ioctl_callback or "similar" */ #define curlcheck_ioctl_cb(expr) \ (curlcheck_NULL(expr) || \ curlcheck_cb_compatible((expr), curl_ioctl_callback) || \ curlcheck_cb_compatible((expr), _curl_ioctl_callback1) || \ curlcheck_cb_compatible((expr), _curl_ioctl_callback2) || \ curlcheck_cb_compatible((expr), _curl_ioctl_callback3) || \ curlcheck_cb_compatible((expr), _curl_ioctl_callback4)) typedef curlioerr (*_curl_ioctl_callback1)(CURL *, int, void *); typedef curlioerr (*_curl_ioctl_callback2)(CURL *, int, const void *); typedef curlioerr (*_curl_ioctl_callback3)(CURL *, curliocmd, void *); typedef curlioerr (*_curl_ioctl_callback4)(CURL *, curliocmd, const void *); /* evaluates to true if expr is of type curl_sockopt_callback or "similar" */ #define curlcheck_sockopt_cb(expr) \ (curlcheck_NULL(expr) || \ curlcheck_cb_compatible((expr), curl_sockopt_callback) || \ curlcheck_cb_compatible((expr), _curl_sockopt_callback1) || \ curlcheck_cb_compatible((expr), _curl_sockopt_callback2)) typedef int (*_curl_sockopt_callback1)(void *, curl_socket_t, curlsocktype); typedef int (*_curl_sockopt_callback2)(const void *, curl_socket_t, curlsocktype); /* evaluates to true if expr is of type curl_opensocket_callback or "similar" */ #define curlcheck_opensocket_cb(expr) \ (curlcheck_NULL(expr) || \ curlcheck_cb_compatible((expr), curl_opensocket_callback) || \ curlcheck_cb_compatible((expr), _curl_opensocket_callback1) || \ curlcheck_cb_compatible((expr), _curl_opensocket_callback2) || \ curlcheck_cb_compatible((expr), _curl_opensocket_callback3) || \ curlcheck_cb_compatible((expr), _curl_opensocket_callback4)) typedef curl_socket_t (*_curl_opensocket_callback1) (void *, curlsocktype, struct curl_sockaddr *); typedef curl_socket_t (*_curl_opensocket_callback2) (void *, curlsocktype, const struct curl_sockaddr *); typedef curl_socket_t (*_curl_opensocket_callback3) (const void *, curlsocktype, struct curl_sockaddr *); typedef curl_socket_t (*_curl_opensocket_callback4) (const void *, curlsocktype, const struct curl_sockaddr *); /* evaluates to true if expr is of type curl_progress_callback or "similar" */ #define curlcheck_progress_cb(expr) \ (curlcheck_NULL(expr) || \ curlcheck_cb_compatible((expr), curl_progress_callback) || \ curlcheck_cb_compatible((expr), _curl_progress_callback1) || \ curlcheck_cb_compatible((expr), _curl_progress_callback2)) typedef int (*_curl_progress_callback1)(void *, double, double, double, double); typedef int (*_curl_progress_callback2)(const void *, double, double, double, double); /* evaluates to true if expr is of type curl_debug_callback or "similar" */ #define curlcheck_debug_cb(expr) \ (curlcheck_NULL(expr) || \ curlcheck_cb_compatible((expr), curl_debug_callback) || \ curlcheck_cb_compatible((expr), _curl_debug_callback1) || \ curlcheck_cb_compatible((expr), _curl_debug_callback2) || \ curlcheck_cb_compatible((expr), _curl_debug_callback3) || \ curlcheck_cb_compatible((expr), _curl_debug_callback4) || \ curlcheck_cb_compatible((expr), _curl_debug_callback5) || \ curlcheck_cb_compatible((expr), _curl_debug_callback6) || \ curlcheck_cb_compatible((expr), _curl_debug_callback7) || \ curlcheck_cb_compatible((expr), _curl_debug_callback8)) typedef int (*_curl_debug_callback1) (CURL *, curl_infotype, char *, size_t, void *); typedef int (*_curl_debug_callback2) (CURL *, curl_infotype, char *, size_t, const void *); typedef int (*_curl_debug_callback3) (CURL *, curl_infotype, const char *, size_t, void *); typedef int (*_curl_debug_callback4) (CURL *, curl_infotype, const char *, size_t, const void *); typedef int (*_curl_debug_callback5) (CURL *, curl_infotype, unsigned char *, size_t, void *); typedef int (*_curl_debug_callback6) (CURL *, curl_infotype, unsigned char *, size_t, const void *); typedef int (*_curl_debug_callback7) (CURL *, curl_infotype, const unsigned char *, size_t, void *); typedef int (*_curl_debug_callback8) (CURL *, curl_infotype, const unsigned char *, size_t, const void *); /* evaluates to true if expr is of type curl_ssl_ctx_callback or "similar" */ /* this is getting even messier... */ #define curlcheck_ssl_ctx_cb(expr) \ (curlcheck_NULL(expr) || \ curlcheck_cb_compatible((expr), curl_ssl_ctx_callback) || \ curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback1) || \ curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback2) || \ curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback3) || \ curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback4) || \ curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback5) || \ curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback6) || \ curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback7) || \ curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback8)) typedef CURLcode (*_curl_ssl_ctx_callback1)(CURL *, void *, void *); typedef CURLcode (*_curl_ssl_ctx_callback2)(CURL *, void *, const void *); typedef CURLcode (*_curl_ssl_ctx_callback3)(CURL *, const void *, void *); typedef CURLcode (*_curl_ssl_ctx_callback4)(CURL *, const void *, const void *); #ifdef HEADER_SSL_H /* hack: if we included OpenSSL's ssl.h, we know about SSL_CTX * this will of course break if we're included before OpenSSL headers... */ typedef CURLcode (*_curl_ssl_ctx_callback5)(CURL *, SSL_CTX *, void *); typedef CURLcode (*_curl_ssl_ctx_callback6)(CURL *, SSL_CTX *, const void *); typedef CURLcode (*_curl_ssl_ctx_callback7)(CURL *, const SSL_CTX *, void *); typedef CURLcode (*_curl_ssl_ctx_callback8)(CURL *, const SSL_CTX *, const void *); #else typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback5; typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback6; typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback7; typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback8; #endif /* evaluates to true if expr is of type curl_conv_callback or "similar" */ #define curlcheck_conv_cb(expr) \ (curlcheck_NULL(expr) || \ curlcheck_cb_compatible((expr), curl_conv_callback) || \ curlcheck_cb_compatible((expr), _curl_conv_callback1) || \ curlcheck_cb_compatible((expr), _curl_conv_callback2) || \ curlcheck_cb_compatible((expr), _curl_conv_callback3) || \ curlcheck_cb_compatible((expr), _curl_conv_callback4)) typedef CURLcode (*_curl_conv_callback1)(char *, size_t length); typedef CURLcode (*_curl_conv_callback2)(const char *, size_t length); typedef CURLcode (*_curl_conv_callback3)(void *, size_t length); typedef CURLcode (*_curl_conv_callback4)(const void *, size_t length); /* evaluates to true if expr is of type curl_seek_callback or "similar" */ #define curlcheck_seek_cb(expr) \ (curlcheck_NULL(expr) || \ curlcheck_cb_compatible((expr), curl_seek_callback) || \ curlcheck_cb_compatible((expr), _curl_seek_callback1) || \ curlcheck_cb_compatible((expr), _curl_seek_callback2)) typedef CURLcode (*_curl_seek_callback1)(void *, curl_off_t, int); typedef CURLcode (*_curl_seek_callback2)(const void *, curl_off_t, int); #endif /* CURLINC_TYPECHECK_GCC_H */ ================================================ FILE: libraries/curl/urlapi.h ================================================ #ifndef CURLINC_URLAPI_H #define CURLINC_URLAPI_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 2018 - 2020, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ #include "curl.h" #ifdef __cplusplus extern "C" { #endif /* the error codes for the URL API */ typedef enum { CURLUE_OK, CURLUE_BAD_HANDLE, /* 1 */ CURLUE_BAD_PARTPOINTER, /* 2 */ CURLUE_MALFORMED_INPUT, /* 3 */ CURLUE_BAD_PORT_NUMBER, /* 4 */ CURLUE_UNSUPPORTED_SCHEME, /* 5 */ CURLUE_URLDECODE, /* 6 */ CURLUE_OUT_OF_MEMORY, /* 7 */ CURLUE_USER_NOT_ALLOWED, /* 8 */ CURLUE_UNKNOWN_PART, /* 9 */ CURLUE_NO_SCHEME, /* 10 */ CURLUE_NO_USER, /* 11 */ CURLUE_NO_PASSWORD, /* 12 */ CURLUE_NO_OPTIONS, /* 13 */ CURLUE_NO_HOST, /* 14 */ CURLUE_NO_PORT, /* 15 */ CURLUE_NO_QUERY, /* 16 */ CURLUE_NO_FRAGMENT /* 17 */ } CURLUcode; typedef enum { CURLUPART_URL, CURLUPART_SCHEME, CURLUPART_USER, CURLUPART_PASSWORD, CURLUPART_OPTIONS, CURLUPART_HOST, CURLUPART_PORT, CURLUPART_PATH, CURLUPART_QUERY, CURLUPART_FRAGMENT, CURLUPART_ZONEID /* added in 7.65.0 */ } CURLUPart; #define CURLU_DEFAULT_PORT (1<<0) /* return default port number */ #define CURLU_NO_DEFAULT_PORT (1<<1) /* act as if no port number was set, if the port number matches the default for the scheme */ #define CURLU_DEFAULT_SCHEME (1<<2) /* return default scheme if missing */ #define CURLU_NON_SUPPORT_SCHEME (1<<3) /* allow non-supported scheme */ #define CURLU_PATH_AS_IS (1<<4) /* leave dot sequences */ #define CURLU_DISALLOW_USER (1<<5) /* no user+password allowed */ #define CURLU_URLDECODE (1<<6) /* URL decode on get */ #define CURLU_URLENCODE (1<<7) /* URL encode on set */ #define CURLU_APPENDQUERY (1<<8) /* append a form style part */ #define CURLU_GUESS_SCHEME (1<<9) /* legacy curl-style guessing */ #define CURLU_NO_AUTHORITY (1<<10) /* Allow empty authority when the scheme is unknown. */ typedef struct Curl_URL CURLU; /* * curl_url() creates a new CURLU handle and returns a pointer to it. * Must be freed with curl_url_cleanup(). */ CURL_EXTERN CURLU *curl_url(void); /* * curl_url_cleanup() frees the CURLU handle and related resources used for * the URL parsing. It will not free strings previously returned with the URL * API. */ CURL_EXTERN void curl_url_cleanup(CURLU *handle); /* * curl_url_dup() duplicates a CURLU handle and returns a new copy. The new * handle must also be freed with curl_url_cleanup(). */ CURL_EXTERN CURLU *curl_url_dup(CURLU *in); /* * curl_url_get() extracts a specific part of the URL from a CURLU * handle. Returns error code. The returned pointer MUST be freed with * curl_free() afterwards. */ CURL_EXTERN CURLUcode curl_url_get(CURLU *handle, CURLUPart what, char **part, unsigned int flags); /* * curl_url_set() sets a specific part of the URL in a CURLU handle. Returns * error code. The passed in string will be copied. Passing a NULL instead of * a part string, clears that part. */ CURL_EXTERN CURLUcode curl_url_set(CURLU *handle, CURLUPart what, const char *part, unsigned int flags); #ifdef __cplusplus } /* end of extern "C" */ #endif #endif /* CURLINC_URLAPI_H */ ================================================ FILE: libraries/glad/glad.c ================================================ /* OpenGL loader generated by glad 0.1.36 on Mon Mar 27 19:33:18 2023. Language/Generator: C/C++ Specification: gl APIs: gl=4.0 Profile: core Extensions: GL_ARB_debug_output Loader: True Local files: False Omit khrplatform: False Reproducible: False Commandline: --profile="core" --api="gl=4.0" --generator="c" --spec="gl" --extensions="GL_ARB_debug_output" Online: https://glad.dav1d.de/#profile=core&language=c&specification=gl&loader=on&api=gl%3D4.0&extensions=GL_ARB_debug_output */ #include #include #include #include static void* get_proc(const char *namez); #if defined(_WIN32) || defined(__CYGWIN__) #ifndef _WINDOWS_ #undef APIENTRY #endif #include static HMODULE libGL; typedef void* (APIENTRYP PFNWGLGETPROCADDRESSPROC_PRIVATE)(const char*); static PFNWGLGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr; #ifdef _MSC_VER #ifdef __has_include #if __has_include() #define HAVE_WINAPIFAMILY 1 #endif #elif _MSC_VER >= 1700 && !_USING_V110_SDK71_ #define HAVE_WINAPIFAMILY 1 #endif #endif #ifdef HAVE_WINAPIFAMILY #include #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) #define IS_UWP 1 #endif #endif static int open_gl(void) { #ifndef IS_UWP libGL = LoadLibraryW(L"opengl32.dll"); if(libGL != NULL) { void (* tmp)(void); tmp = (void(*)(void)) GetProcAddress(libGL, "wglGetProcAddress"); gladGetProcAddressPtr = (PFNWGLGETPROCADDRESSPROC_PRIVATE) tmp; return gladGetProcAddressPtr != NULL; } #endif return 0; } static void close_gl(void) { if(libGL != NULL) { FreeLibrary((HMODULE) libGL); libGL = NULL; } } #else #include static void* libGL; #if !defined(__APPLE__) && !defined(__HAIKU__) typedef void* (APIENTRYP PFNGLXGETPROCADDRESSPROC_PRIVATE)(const char*); static PFNGLXGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr; #endif static int open_gl(void) { #ifdef __APPLE__ static const char *NAMES[] = { "../Frameworks/OpenGL.framework/OpenGL", "/Library/Frameworks/OpenGL.framework/OpenGL", "/System/Library/Frameworks/OpenGL.framework/OpenGL", "/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL" }; #else static const char *NAMES[] = {"libGL.so.1", "libGL.so"}; #endif unsigned int index = 0; for(index = 0; index < (sizeof(NAMES) / sizeof(NAMES[0])); index++) { libGL = dlopen(NAMES[index], RTLD_NOW | RTLD_GLOBAL); if(libGL != NULL) { #if defined(__APPLE__) || defined(__HAIKU__) return 1; #else gladGetProcAddressPtr = (PFNGLXGETPROCADDRESSPROC_PRIVATE)dlsym(libGL, "glXGetProcAddressARB"); return gladGetProcAddressPtr != NULL; #endif } } return 0; } static void close_gl(void) { if(libGL != NULL) { dlclose(libGL); libGL = NULL; } } #endif static void* get_proc(const char *namez) { void* result = NULL; if(libGL == NULL) return NULL; #if !defined(__APPLE__) && !defined(__HAIKU__) if(gladGetProcAddressPtr != NULL) { result = gladGetProcAddressPtr(namez); } #endif if(result == NULL) { #if defined(_WIN32) || defined(__CYGWIN__) result = (void*)GetProcAddress((HMODULE) libGL, namez); #else result = dlsym(libGL, namez); #endif } return result; } int gladLoadGL(void) { int status = 0; if(open_gl()) { status = gladLoadGLLoader(&get_proc); close_gl(); } return status; } struct gladGLversionStruct GLVersion = { 0, 0 }; #if defined(GL_ES_VERSION_3_0) || defined(GL_VERSION_3_0) #define _GLAD_IS_SOME_NEW_VERSION 1 #endif static int max_loaded_major; static int max_loaded_minor; static const char *exts = NULL; static int num_exts_i = 0; static char **exts_i = NULL; static int get_exts(void) { #ifdef _GLAD_IS_SOME_NEW_VERSION if(max_loaded_major < 3) { #endif exts = (const char *)glGetString(GL_EXTENSIONS); #ifdef _GLAD_IS_SOME_NEW_VERSION } else { unsigned int index; num_exts_i = 0; glGetIntegerv(GL_NUM_EXTENSIONS, &num_exts_i); if (num_exts_i > 0) { exts_i = (char **)malloc((size_t)num_exts_i * (sizeof *exts_i)); } if (exts_i == NULL) { return 0; } for(index = 0; index < (unsigned)num_exts_i; index++) { const char *gl_str_tmp = (const char*)glGetStringi(GL_EXTENSIONS, index); size_t len = strlen(gl_str_tmp); char *local_str = (char*)malloc((len+1) * sizeof(char)); if(local_str != NULL) { memcpy(local_str, gl_str_tmp, (len+1) * sizeof(char)); } exts_i[index] = local_str; } } #endif return 1; } static void free_exts(void) { if (exts_i != NULL) { int index; for(index = 0; index < num_exts_i; index++) { free((char *)exts_i[index]); } free((void *)exts_i); exts_i = NULL; } } static int has_ext(const char *ext) { #ifdef _GLAD_IS_SOME_NEW_VERSION if(max_loaded_major < 3) { #endif const char *extensions; const char *loc; const char *terminator; extensions = exts; if(extensions == NULL || ext == NULL) { return 0; } while(1) { loc = strstr(extensions, ext); if(loc == NULL) { return 0; } terminator = loc + strlen(ext); if((loc == extensions || *(loc - 1) == ' ') && (*terminator == ' ' || *terminator == '\0')) { return 1; } extensions = terminator; } #ifdef _GLAD_IS_SOME_NEW_VERSION } else { int index; if(exts_i == NULL) return 0; for(index = 0; index < num_exts_i; index++) { const char *e = exts_i[index]; if(exts_i[index] != NULL && strcmp(e, ext) == 0) { return 1; } } } #endif return 0; } int GLAD_GL_VERSION_1_0 = 0; int GLAD_GL_VERSION_1_1 = 0; int GLAD_GL_VERSION_1_2 = 0; int GLAD_GL_VERSION_1_3 = 0; int GLAD_GL_VERSION_1_4 = 0; int GLAD_GL_VERSION_1_5 = 0; int GLAD_GL_VERSION_2_0 = 0; int GLAD_GL_VERSION_2_1 = 0; int GLAD_GL_VERSION_3_0 = 0; int GLAD_GL_VERSION_3_1 = 0; int GLAD_GL_VERSION_3_2 = 0; int GLAD_GL_VERSION_3_3 = 0; int GLAD_GL_VERSION_4_0 = 0; PFNGLACTIVETEXTUREPROC glad_glActiveTexture = NULL; PFNGLATTACHSHADERPROC glad_glAttachShader = NULL; PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender = NULL; PFNGLBEGINQUERYPROC glad_glBeginQuery = NULL; PFNGLBEGINQUERYINDEXEDPROC glad_glBeginQueryIndexed = NULL; PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback = NULL; PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation = NULL; PFNGLBINDBUFFERPROC glad_glBindBuffer = NULL; PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase = NULL; PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange = NULL; PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation = NULL; PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed = NULL; PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer = NULL; PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer = NULL; PFNGLBINDSAMPLERPROC glad_glBindSampler = NULL; PFNGLBINDTEXTUREPROC glad_glBindTexture = NULL; PFNGLBINDTRANSFORMFEEDBACKPROC glad_glBindTransformFeedback = NULL; PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray = NULL; PFNGLBLENDCOLORPROC glad_glBlendColor = NULL; PFNGLBLENDEQUATIONPROC glad_glBlendEquation = NULL; PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate = NULL; PFNGLBLENDEQUATIONSEPARATEIPROC glad_glBlendEquationSeparatei = NULL; PFNGLBLENDEQUATIONIPROC glad_glBlendEquationi = NULL; PFNGLBLENDFUNCPROC glad_glBlendFunc = NULL; PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate = NULL; PFNGLBLENDFUNCSEPARATEIPROC glad_glBlendFuncSeparatei = NULL; PFNGLBLENDFUNCIPROC glad_glBlendFunci = NULL; PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer = NULL; PFNGLBUFFERDATAPROC glad_glBufferData = NULL; PFNGLBUFFERSUBDATAPROC glad_glBufferSubData = NULL; PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus = NULL; PFNGLCLAMPCOLORPROC glad_glClampColor = NULL; PFNGLCLEARPROC glad_glClear = NULL; PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi = NULL; PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv = NULL; PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv = NULL; PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv = NULL; PFNGLCLEARCOLORPROC glad_glClearColor = NULL; PFNGLCLEARDEPTHPROC glad_glClearDepth = NULL; PFNGLCLEARSTENCILPROC glad_glClearStencil = NULL; PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync = NULL; PFNGLCOLORMASKPROC glad_glColorMask = NULL; PFNGLCOLORMASKIPROC glad_glColorMaski = NULL; PFNGLCOLORP3UIPROC glad_glColorP3ui = NULL; PFNGLCOLORP3UIVPROC glad_glColorP3uiv = NULL; PFNGLCOLORP4UIPROC glad_glColorP4ui = NULL; PFNGLCOLORP4UIVPROC glad_glColorP4uiv = NULL; PFNGLCOMPILESHADERPROC glad_glCompileShader = NULL; PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D = NULL; PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D = NULL; PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D = NULL; PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D = NULL; PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D = NULL; PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D = NULL; PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData = NULL; PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D = NULL; PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D = NULL; PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D = NULL; PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D = NULL; PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D = NULL; PFNGLCREATEPROGRAMPROC glad_glCreateProgram = NULL; PFNGLCREATESHADERPROC glad_glCreateShader = NULL; PFNGLCULLFACEPROC glad_glCullFace = NULL; PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers = NULL; PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers = NULL; PFNGLDELETEPROGRAMPROC glad_glDeleteProgram = NULL; PFNGLDELETEQUERIESPROC glad_glDeleteQueries = NULL; PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers = NULL; PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers = NULL; PFNGLDELETESHADERPROC glad_glDeleteShader = NULL; PFNGLDELETESYNCPROC glad_glDeleteSync = NULL; PFNGLDELETETEXTURESPROC glad_glDeleteTextures = NULL; PFNGLDELETETRANSFORMFEEDBACKSPROC glad_glDeleteTransformFeedbacks = NULL; PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays = NULL; PFNGLDEPTHFUNCPROC glad_glDepthFunc = NULL; PFNGLDEPTHMASKPROC glad_glDepthMask = NULL; PFNGLDEPTHRANGEPROC glad_glDepthRange = NULL; PFNGLDETACHSHADERPROC glad_glDetachShader = NULL; PFNGLDISABLEPROC glad_glDisable = NULL; PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray = NULL; PFNGLDISABLEIPROC glad_glDisablei = NULL; PFNGLDRAWARRAYSPROC glad_glDrawArrays = NULL; PFNGLDRAWARRAYSINDIRECTPROC glad_glDrawArraysIndirect = NULL; PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced = NULL; PFNGLDRAWBUFFERPROC glad_glDrawBuffer = NULL; PFNGLDRAWBUFFERSPROC glad_glDrawBuffers = NULL; PFNGLDRAWELEMENTSPROC glad_glDrawElements = NULL; PFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex = NULL; PFNGLDRAWELEMENTSINDIRECTPROC glad_glDrawElementsIndirect = NULL; PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced = NULL; PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex = NULL; PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements = NULL; PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex = NULL; PFNGLDRAWTRANSFORMFEEDBACKPROC glad_glDrawTransformFeedback = NULL; PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC glad_glDrawTransformFeedbackStream = NULL; PFNGLENABLEPROC glad_glEnable = NULL; PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray = NULL; PFNGLENABLEIPROC glad_glEnablei = NULL; PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender = NULL; PFNGLENDQUERYPROC glad_glEndQuery = NULL; PFNGLENDQUERYINDEXEDPROC glad_glEndQueryIndexed = NULL; PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback = NULL; PFNGLFENCESYNCPROC glad_glFenceSync = NULL; PFNGLFINISHPROC glad_glFinish = NULL; PFNGLFLUSHPROC glad_glFlush = NULL; PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange = NULL; PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer = NULL; PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture = NULL; PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D = NULL; PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D = NULL; PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D = NULL; PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer = NULL; PFNGLFRONTFACEPROC glad_glFrontFace = NULL; PFNGLGENBUFFERSPROC glad_glGenBuffers = NULL; PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers = NULL; PFNGLGENQUERIESPROC glad_glGenQueries = NULL; PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers = NULL; PFNGLGENSAMPLERSPROC glad_glGenSamplers = NULL; PFNGLGENTEXTURESPROC glad_glGenTextures = NULL; PFNGLGENTRANSFORMFEEDBACKSPROC glad_glGenTransformFeedbacks = NULL; PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays = NULL; PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap = NULL; PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib = NULL; PFNGLGETACTIVESUBROUTINENAMEPROC glad_glGetActiveSubroutineName = NULL; PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC glad_glGetActiveSubroutineUniformName = NULL; PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC glad_glGetActiveSubroutineUniformiv = NULL; PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform = NULL; PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName = NULL; PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv = NULL; PFNGLGETACTIVEUNIFORMNAMEPROC glad_glGetActiveUniformName = NULL; PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv = NULL; PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders = NULL; PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation = NULL; PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v = NULL; PFNGLGETBOOLEANVPROC glad_glGetBooleanv = NULL; PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v = NULL; PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv = NULL; PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv = NULL; PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData = NULL; PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage = NULL; PFNGLGETDOUBLEVPROC glad_glGetDoublev = NULL; PFNGLGETERRORPROC glad_glGetError = NULL; PFNGLGETFLOATVPROC glad_glGetFloatv = NULL; PFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex = NULL; PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation = NULL; PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv = NULL; PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v = NULL; PFNGLGETINTEGER64VPROC glad_glGetInteger64v = NULL; PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v = NULL; PFNGLGETINTEGERVPROC glad_glGetIntegerv = NULL; PFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv = NULL; PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog = NULL; PFNGLGETPROGRAMSTAGEIVPROC glad_glGetProgramStageiv = NULL; PFNGLGETPROGRAMIVPROC glad_glGetProgramiv = NULL; PFNGLGETQUERYINDEXEDIVPROC glad_glGetQueryIndexediv = NULL; PFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v = NULL; PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv = NULL; PFNGLGETQUERYOBJECTUI64VPROC glad_glGetQueryObjectui64v = NULL; PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv = NULL; PFNGLGETQUERYIVPROC glad_glGetQueryiv = NULL; PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv = NULL; PFNGLGETSAMPLERPARAMETERIIVPROC glad_glGetSamplerParameterIiv = NULL; PFNGLGETSAMPLERPARAMETERIUIVPROC glad_glGetSamplerParameterIuiv = NULL; PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv = NULL; PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv = NULL; PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog = NULL; PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource = NULL; PFNGLGETSHADERIVPROC glad_glGetShaderiv = NULL; PFNGLGETSTRINGPROC glad_glGetString = NULL; PFNGLGETSTRINGIPROC glad_glGetStringi = NULL; PFNGLGETSUBROUTINEINDEXPROC glad_glGetSubroutineIndex = NULL; PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC glad_glGetSubroutineUniformLocation = NULL; PFNGLGETSYNCIVPROC glad_glGetSynciv = NULL; PFNGLGETTEXIMAGEPROC glad_glGetTexImage = NULL; PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv = NULL; PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv = NULL; PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv = NULL; PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv = NULL; PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv = NULL; PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv = NULL; PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying = NULL; PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex = NULL; PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices = NULL; PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation = NULL; PFNGLGETUNIFORMSUBROUTINEUIVPROC glad_glGetUniformSubroutineuiv = NULL; PFNGLGETUNIFORMDVPROC glad_glGetUniformdv = NULL; PFNGLGETUNIFORMFVPROC glad_glGetUniformfv = NULL; PFNGLGETUNIFORMIVPROC glad_glGetUniformiv = NULL; PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv = NULL; PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv = NULL; PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv = NULL; PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv = NULL; PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv = NULL; PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv = NULL; PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv = NULL; PFNGLHINTPROC glad_glHint = NULL; PFNGLISBUFFERPROC glad_glIsBuffer = NULL; PFNGLISENABLEDPROC glad_glIsEnabled = NULL; PFNGLISENABLEDIPROC glad_glIsEnabledi = NULL; PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer = NULL; PFNGLISPROGRAMPROC glad_glIsProgram = NULL; PFNGLISQUERYPROC glad_glIsQuery = NULL; PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer = NULL; PFNGLISSAMPLERPROC glad_glIsSampler = NULL; PFNGLISSHADERPROC glad_glIsShader = NULL; PFNGLISSYNCPROC glad_glIsSync = NULL; PFNGLISTEXTUREPROC glad_glIsTexture = NULL; PFNGLISTRANSFORMFEEDBACKPROC glad_glIsTransformFeedback = NULL; PFNGLISVERTEXARRAYPROC glad_glIsVertexArray = NULL; PFNGLLINEWIDTHPROC glad_glLineWidth = NULL; PFNGLLINKPROGRAMPROC glad_glLinkProgram = NULL; PFNGLLOGICOPPROC glad_glLogicOp = NULL; PFNGLMAPBUFFERPROC glad_glMapBuffer = NULL; PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange = NULL; PFNGLMINSAMPLESHADINGPROC glad_glMinSampleShading = NULL; PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays = NULL; PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements = NULL; PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex = NULL; PFNGLMULTITEXCOORDP1UIPROC glad_glMultiTexCoordP1ui = NULL; PFNGLMULTITEXCOORDP1UIVPROC glad_glMultiTexCoordP1uiv = NULL; PFNGLMULTITEXCOORDP2UIPROC glad_glMultiTexCoordP2ui = NULL; PFNGLMULTITEXCOORDP2UIVPROC glad_glMultiTexCoordP2uiv = NULL; PFNGLMULTITEXCOORDP3UIPROC glad_glMultiTexCoordP3ui = NULL; PFNGLMULTITEXCOORDP3UIVPROC glad_glMultiTexCoordP3uiv = NULL; PFNGLMULTITEXCOORDP4UIPROC glad_glMultiTexCoordP4ui = NULL; PFNGLMULTITEXCOORDP4UIVPROC glad_glMultiTexCoordP4uiv = NULL; PFNGLNORMALP3UIPROC glad_glNormalP3ui = NULL; PFNGLNORMALP3UIVPROC glad_glNormalP3uiv = NULL; PFNGLPATCHPARAMETERFVPROC glad_glPatchParameterfv = NULL; PFNGLPATCHPARAMETERIPROC glad_glPatchParameteri = NULL; PFNGLPAUSETRANSFORMFEEDBACKPROC glad_glPauseTransformFeedback = NULL; PFNGLPIXELSTOREFPROC glad_glPixelStoref = NULL; PFNGLPIXELSTOREIPROC glad_glPixelStorei = NULL; PFNGLPOINTPARAMETERFPROC glad_glPointParameterf = NULL; PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv = NULL; PFNGLPOINTPARAMETERIPROC glad_glPointParameteri = NULL; PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv = NULL; PFNGLPOINTSIZEPROC glad_glPointSize = NULL; PFNGLPOLYGONMODEPROC glad_glPolygonMode = NULL; PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset = NULL; PFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex = NULL; PFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex = NULL; PFNGLQUERYCOUNTERPROC glad_glQueryCounter = NULL; PFNGLREADBUFFERPROC glad_glReadBuffer = NULL; PFNGLREADPIXELSPROC glad_glReadPixels = NULL; PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage = NULL; PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample = NULL; PFNGLRESUMETRANSFORMFEEDBACKPROC glad_glResumeTransformFeedback = NULL; PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage = NULL; PFNGLSAMPLEMASKIPROC glad_glSampleMaski = NULL; PFNGLSAMPLERPARAMETERIIVPROC glad_glSamplerParameterIiv = NULL; PFNGLSAMPLERPARAMETERIUIVPROC glad_glSamplerParameterIuiv = NULL; PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf = NULL; PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv = NULL; PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri = NULL; PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv = NULL; PFNGLSCISSORPROC glad_glScissor = NULL; PFNGLSECONDARYCOLORP3UIPROC glad_glSecondaryColorP3ui = NULL; PFNGLSECONDARYCOLORP3UIVPROC glad_glSecondaryColorP3uiv = NULL; PFNGLSHADERSOURCEPROC glad_glShaderSource = NULL; PFNGLSTENCILFUNCPROC glad_glStencilFunc = NULL; PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate = NULL; PFNGLSTENCILMASKPROC glad_glStencilMask = NULL; PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate = NULL; PFNGLSTENCILOPPROC glad_glStencilOp = NULL; PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate = NULL; PFNGLTEXBUFFERPROC glad_glTexBuffer = NULL; PFNGLTEXCOORDP1UIPROC glad_glTexCoordP1ui = NULL; PFNGLTEXCOORDP1UIVPROC glad_glTexCoordP1uiv = NULL; PFNGLTEXCOORDP2UIPROC glad_glTexCoordP2ui = NULL; PFNGLTEXCOORDP2UIVPROC glad_glTexCoordP2uiv = NULL; PFNGLTEXCOORDP3UIPROC glad_glTexCoordP3ui = NULL; PFNGLTEXCOORDP3UIVPROC glad_glTexCoordP3uiv = NULL; PFNGLTEXCOORDP4UIPROC glad_glTexCoordP4ui = NULL; PFNGLTEXCOORDP4UIVPROC glad_glTexCoordP4uiv = NULL; PFNGLTEXIMAGE1DPROC glad_glTexImage1D = NULL; PFNGLTEXIMAGE2DPROC glad_glTexImage2D = NULL; PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_glTexImage2DMultisample = NULL; PFNGLTEXIMAGE3DPROC glad_glTexImage3D = NULL; PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_glTexImage3DMultisample = NULL; PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv = NULL; PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv = NULL; PFNGLTEXPARAMETERFPROC glad_glTexParameterf = NULL; PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv = NULL; PFNGLTEXPARAMETERIPROC glad_glTexParameteri = NULL; PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv = NULL; PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D = NULL; PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D = NULL; PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D = NULL; PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings = NULL; PFNGLUNIFORM1DPROC glad_glUniform1d = NULL; PFNGLUNIFORM1DVPROC glad_glUniform1dv = NULL; PFNGLUNIFORM1FPROC glad_glUniform1f = NULL; PFNGLUNIFORM1FVPROC glad_glUniform1fv = NULL; PFNGLUNIFORM1IPROC glad_glUniform1i = NULL; PFNGLUNIFORM1IVPROC glad_glUniform1iv = NULL; PFNGLUNIFORM1UIPROC glad_glUniform1ui = NULL; PFNGLUNIFORM1UIVPROC glad_glUniform1uiv = NULL; PFNGLUNIFORM2DPROC glad_glUniform2d = NULL; PFNGLUNIFORM2DVPROC glad_glUniform2dv = NULL; PFNGLUNIFORM2FPROC glad_glUniform2f = NULL; PFNGLUNIFORM2FVPROC glad_glUniform2fv = NULL; PFNGLUNIFORM2IPROC glad_glUniform2i = NULL; PFNGLUNIFORM2IVPROC glad_glUniform2iv = NULL; PFNGLUNIFORM2UIPROC glad_glUniform2ui = NULL; PFNGLUNIFORM2UIVPROC glad_glUniform2uiv = NULL; PFNGLUNIFORM3DPROC glad_glUniform3d = NULL; PFNGLUNIFORM3DVPROC glad_glUniform3dv = NULL; PFNGLUNIFORM3FPROC glad_glUniform3f = NULL; PFNGLUNIFORM3FVPROC glad_glUniform3fv = NULL; PFNGLUNIFORM3IPROC glad_glUniform3i = NULL; PFNGLUNIFORM3IVPROC glad_glUniform3iv = NULL; PFNGLUNIFORM3UIPROC glad_glUniform3ui = NULL; PFNGLUNIFORM3UIVPROC glad_glUniform3uiv = NULL; PFNGLUNIFORM4DPROC glad_glUniform4d = NULL; PFNGLUNIFORM4DVPROC glad_glUniform4dv = NULL; PFNGLUNIFORM4FPROC glad_glUniform4f = NULL; PFNGLUNIFORM4FVPROC glad_glUniform4fv = NULL; PFNGLUNIFORM4IPROC glad_glUniform4i = NULL; PFNGLUNIFORM4IVPROC glad_glUniform4iv = NULL; PFNGLUNIFORM4UIPROC glad_glUniform4ui = NULL; PFNGLUNIFORM4UIVPROC glad_glUniform4uiv = NULL; PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding = NULL; PFNGLUNIFORMMATRIX2DVPROC glad_glUniformMatrix2dv = NULL; PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv = NULL; PFNGLUNIFORMMATRIX2X3DVPROC glad_glUniformMatrix2x3dv = NULL; PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv = NULL; PFNGLUNIFORMMATRIX2X4DVPROC glad_glUniformMatrix2x4dv = NULL; PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv = NULL; PFNGLUNIFORMMATRIX3DVPROC glad_glUniformMatrix3dv = NULL; PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv = NULL; PFNGLUNIFORMMATRIX3X2DVPROC glad_glUniformMatrix3x2dv = NULL; PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv = NULL; PFNGLUNIFORMMATRIX3X4DVPROC glad_glUniformMatrix3x4dv = NULL; PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv = NULL; PFNGLUNIFORMMATRIX4DVPROC glad_glUniformMatrix4dv = NULL; PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv = NULL; PFNGLUNIFORMMATRIX4X2DVPROC glad_glUniformMatrix4x2dv = NULL; PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv = NULL; PFNGLUNIFORMMATRIX4X3DVPROC glad_glUniformMatrix4x3dv = NULL; PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv = NULL; PFNGLUNIFORMSUBROUTINESUIVPROC glad_glUniformSubroutinesuiv = NULL; PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer = NULL; PFNGLUSEPROGRAMPROC glad_glUseProgram = NULL; PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram = NULL; PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d = NULL; PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv = NULL; PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f = NULL; PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv = NULL; PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s = NULL; PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv = NULL; PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d = NULL; PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv = NULL; PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f = NULL; PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv = NULL; PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s = NULL; PFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv = NULL; PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d = NULL; PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv = NULL; PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f = NULL; PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv = NULL; PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s = NULL; PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv = NULL; PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv = NULL; PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv = NULL; PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv = NULL; PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub = NULL; PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv = NULL; PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv = NULL; PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv = NULL; PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv = NULL; PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d = NULL; PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv = NULL; PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f = NULL; PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv = NULL; PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv = NULL; PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s = NULL; PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv = NULL; PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv = NULL; PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv = NULL; PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv = NULL; PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor = NULL; PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i = NULL; PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv = NULL; PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui = NULL; PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv = NULL; PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i = NULL; PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv = NULL; PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui = NULL; PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv = NULL; PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i = NULL; PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv = NULL; PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui = NULL; PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv = NULL; PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv = NULL; PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i = NULL; PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv = NULL; PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv = NULL; PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv = NULL; PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui = NULL; PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv = NULL; PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv = NULL; PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer = NULL; PFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui = NULL; PFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv = NULL; PFNGLVERTEXATTRIBP2UIPROC glad_glVertexAttribP2ui = NULL; PFNGLVERTEXATTRIBP2UIVPROC glad_glVertexAttribP2uiv = NULL; PFNGLVERTEXATTRIBP3UIPROC glad_glVertexAttribP3ui = NULL; PFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv = NULL; PFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui = NULL; PFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv = NULL; PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer = NULL; PFNGLVERTEXP2UIPROC glad_glVertexP2ui = NULL; PFNGLVERTEXP2UIVPROC glad_glVertexP2uiv = NULL; PFNGLVERTEXP3UIPROC glad_glVertexP3ui = NULL; PFNGLVERTEXP3UIVPROC glad_glVertexP3uiv = NULL; PFNGLVERTEXP4UIPROC glad_glVertexP4ui = NULL; PFNGLVERTEXP4UIVPROC glad_glVertexP4uiv = NULL; PFNGLVIEWPORTPROC glad_glViewport = NULL; PFNGLWAITSYNCPROC glad_glWaitSync = NULL; int GLAD_GL_ARB_debug_output = 0; PFNGLDEBUGMESSAGECONTROLARBPROC glad_glDebugMessageControlARB = NULL; PFNGLDEBUGMESSAGEINSERTARBPROC glad_glDebugMessageInsertARB = NULL; PFNGLDEBUGMESSAGECALLBACKARBPROC glad_glDebugMessageCallbackARB = NULL; PFNGLGETDEBUGMESSAGELOGARBPROC glad_glGetDebugMessageLogARB = NULL; static void load_GL_VERSION_1_0(GLADloadproc load) { if(!GLAD_GL_VERSION_1_0) return; glad_glCullFace = (PFNGLCULLFACEPROC)load("glCullFace"); glad_glFrontFace = (PFNGLFRONTFACEPROC)load("glFrontFace"); glad_glHint = (PFNGLHINTPROC)load("glHint"); glad_glLineWidth = (PFNGLLINEWIDTHPROC)load("glLineWidth"); glad_glPointSize = (PFNGLPOINTSIZEPROC)load("glPointSize"); glad_glPolygonMode = (PFNGLPOLYGONMODEPROC)load("glPolygonMode"); glad_glScissor = (PFNGLSCISSORPROC)load("glScissor"); glad_glTexParameterf = (PFNGLTEXPARAMETERFPROC)load("glTexParameterf"); glad_glTexParameterfv = (PFNGLTEXPARAMETERFVPROC)load("glTexParameterfv"); glad_glTexParameteri = (PFNGLTEXPARAMETERIPROC)load("glTexParameteri"); glad_glTexParameteriv = (PFNGLTEXPARAMETERIVPROC)load("glTexParameteriv"); glad_glTexImage1D = (PFNGLTEXIMAGE1DPROC)load("glTexImage1D"); glad_glTexImage2D = (PFNGLTEXIMAGE2DPROC)load("glTexImage2D"); glad_glDrawBuffer = (PFNGLDRAWBUFFERPROC)load("glDrawBuffer"); glad_glClear = (PFNGLCLEARPROC)load("glClear"); glad_glClearColor = (PFNGLCLEARCOLORPROC)load("glClearColor"); glad_glClearStencil = (PFNGLCLEARSTENCILPROC)load("glClearStencil"); glad_glClearDepth = (PFNGLCLEARDEPTHPROC)load("glClearDepth"); glad_glStencilMask = (PFNGLSTENCILMASKPROC)load("glStencilMask"); glad_glColorMask = (PFNGLCOLORMASKPROC)load("glColorMask"); glad_glDepthMask = (PFNGLDEPTHMASKPROC)load("glDepthMask"); glad_glDisable = (PFNGLDISABLEPROC)load("glDisable"); glad_glEnable = (PFNGLENABLEPROC)load("glEnable"); glad_glFinish = (PFNGLFINISHPROC)load("glFinish"); glad_glFlush = (PFNGLFLUSHPROC)load("glFlush"); glad_glBlendFunc = (PFNGLBLENDFUNCPROC)load("glBlendFunc"); glad_glLogicOp = (PFNGLLOGICOPPROC)load("glLogicOp"); glad_glStencilFunc = (PFNGLSTENCILFUNCPROC)load("glStencilFunc"); glad_glStencilOp = (PFNGLSTENCILOPPROC)load("glStencilOp"); glad_glDepthFunc = (PFNGLDEPTHFUNCPROC)load("glDepthFunc"); glad_glPixelStoref = (PFNGLPIXELSTOREFPROC)load("glPixelStoref"); glad_glPixelStorei = (PFNGLPIXELSTOREIPROC)load("glPixelStorei"); glad_glReadBuffer = (PFNGLREADBUFFERPROC)load("glReadBuffer"); glad_glReadPixels = (PFNGLREADPIXELSPROC)load("glReadPixels"); glad_glGetBooleanv = (PFNGLGETBOOLEANVPROC)load("glGetBooleanv"); glad_glGetDoublev = (PFNGLGETDOUBLEVPROC)load("glGetDoublev"); glad_glGetError = (PFNGLGETERRORPROC)load("glGetError"); glad_glGetFloatv = (PFNGLGETFLOATVPROC)load("glGetFloatv"); glad_glGetIntegerv = (PFNGLGETINTEGERVPROC)load("glGetIntegerv"); glad_glGetString = (PFNGLGETSTRINGPROC)load("glGetString"); glad_glGetTexImage = (PFNGLGETTEXIMAGEPROC)load("glGetTexImage"); glad_glGetTexParameterfv = (PFNGLGETTEXPARAMETERFVPROC)load("glGetTexParameterfv"); glad_glGetTexParameteriv = (PFNGLGETTEXPARAMETERIVPROC)load("glGetTexParameteriv"); glad_glGetTexLevelParameterfv = (PFNGLGETTEXLEVELPARAMETERFVPROC)load("glGetTexLevelParameterfv"); glad_glGetTexLevelParameteriv = (PFNGLGETTEXLEVELPARAMETERIVPROC)load("glGetTexLevelParameteriv"); glad_glIsEnabled = (PFNGLISENABLEDPROC)load("glIsEnabled"); glad_glDepthRange = (PFNGLDEPTHRANGEPROC)load("glDepthRange"); glad_glViewport = (PFNGLVIEWPORTPROC)load("glViewport"); } static void load_GL_VERSION_1_1(GLADloadproc load) { if(!GLAD_GL_VERSION_1_1) return; glad_glDrawArrays = (PFNGLDRAWARRAYSPROC)load("glDrawArrays"); glad_glDrawElements = (PFNGLDRAWELEMENTSPROC)load("glDrawElements"); glad_glPolygonOffset = (PFNGLPOLYGONOFFSETPROC)load("glPolygonOffset"); glad_glCopyTexImage1D = (PFNGLCOPYTEXIMAGE1DPROC)load("glCopyTexImage1D"); glad_glCopyTexImage2D = (PFNGLCOPYTEXIMAGE2DPROC)load("glCopyTexImage2D"); glad_glCopyTexSubImage1D = (PFNGLCOPYTEXSUBIMAGE1DPROC)load("glCopyTexSubImage1D"); glad_glCopyTexSubImage2D = (PFNGLCOPYTEXSUBIMAGE2DPROC)load("glCopyTexSubImage2D"); glad_glTexSubImage1D = (PFNGLTEXSUBIMAGE1DPROC)load("glTexSubImage1D"); glad_glTexSubImage2D = (PFNGLTEXSUBIMAGE2DPROC)load("glTexSubImage2D"); glad_glBindTexture = (PFNGLBINDTEXTUREPROC)load("glBindTexture"); glad_glDeleteTextures = (PFNGLDELETETEXTURESPROC)load("glDeleteTextures"); glad_glGenTextures = (PFNGLGENTEXTURESPROC)load("glGenTextures"); glad_glIsTexture = (PFNGLISTEXTUREPROC)load("glIsTexture"); } static void load_GL_VERSION_1_2(GLADloadproc load) { if(!GLAD_GL_VERSION_1_2) return; glad_glDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC)load("glDrawRangeElements"); glad_glTexImage3D = (PFNGLTEXIMAGE3DPROC)load("glTexImage3D"); glad_glTexSubImage3D = (PFNGLTEXSUBIMAGE3DPROC)load("glTexSubImage3D"); glad_glCopyTexSubImage3D = (PFNGLCOPYTEXSUBIMAGE3DPROC)load("glCopyTexSubImage3D"); } static void load_GL_VERSION_1_3(GLADloadproc load) { if(!GLAD_GL_VERSION_1_3) return; glad_glActiveTexture = (PFNGLACTIVETEXTUREPROC)load("glActiveTexture"); glad_glSampleCoverage = (PFNGLSAMPLECOVERAGEPROC)load("glSampleCoverage"); glad_glCompressedTexImage3D = (PFNGLCOMPRESSEDTEXIMAGE3DPROC)load("glCompressedTexImage3D"); glad_glCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)load("glCompressedTexImage2D"); glad_glCompressedTexImage1D = (PFNGLCOMPRESSEDTEXIMAGE1DPROC)load("glCompressedTexImage1D"); glad_glCompressedTexSubImage3D = (PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)load("glCompressedTexSubImage3D"); glad_glCompressedTexSubImage2D = (PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)load("glCompressedTexSubImage2D"); glad_glCompressedTexSubImage1D = (PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)load("glCompressedTexSubImage1D"); glad_glGetCompressedTexImage = (PFNGLGETCOMPRESSEDTEXIMAGEPROC)load("glGetCompressedTexImage"); } static void load_GL_VERSION_1_4(GLADloadproc load) { if(!GLAD_GL_VERSION_1_4) return; glad_glBlendFuncSeparate = (PFNGLBLENDFUNCSEPARATEPROC)load("glBlendFuncSeparate"); glad_glMultiDrawArrays = (PFNGLMULTIDRAWARRAYSPROC)load("glMultiDrawArrays"); glad_glMultiDrawElements = (PFNGLMULTIDRAWELEMENTSPROC)load("glMultiDrawElements"); glad_glPointParameterf = (PFNGLPOINTPARAMETERFPROC)load("glPointParameterf"); glad_glPointParameterfv = (PFNGLPOINTPARAMETERFVPROC)load("glPointParameterfv"); glad_glPointParameteri = (PFNGLPOINTPARAMETERIPROC)load("glPointParameteri"); glad_glPointParameteriv = (PFNGLPOINTPARAMETERIVPROC)load("glPointParameteriv"); glad_glBlendColor = (PFNGLBLENDCOLORPROC)load("glBlendColor"); glad_glBlendEquation = (PFNGLBLENDEQUATIONPROC)load("glBlendEquation"); } static void load_GL_VERSION_1_5(GLADloadproc load) { if(!GLAD_GL_VERSION_1_5) return; glad_glGenQueries = (PFNGLGENQUERIESPROC)load("glGenQueries"); glad_glDeleteQueries = (PFNGLDELETEQUERIESPROC)load("glDeleteQueries"); glad_glIsQuery = (PFNGLISQUERYPROC)load("glIsQuery"); glad_glBeginQuery = (PFNGLBEGINQUERYPROC)load("glBeginQuery"); glad_glEndQuery = (PFNGLENDQUERYPROC)load("glEndQuery"); glad_glGetQueryiv = (PFNGLGETQUERYIVPROC)load("glGetQueryiv"); glad_glGetQueryObjectiv = (PFNGLGETQUERYOBJECTIVPROC)load("glGetQueryObjectiv"); glad_glGetQueryObjectuiv = (PFNGLGETQUERYOBJECTUIVPROC)load("glGetQueryObjectuiv"); glad_glBindBuffer = (PFNGLBINDBUFFERPROC)load("glBindBuffer"); glad_glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)load("glDeleteBuffers"); glad_glGenBuffers = (PFNGLGENBUFFERSPROC)load("glGenBuffers"); glad_glIsBuffer = (PFNGLISBUFFERPROC)load("glIsBuffer"); glad_glBufferData = (PFNGLBUFFERDATAPROC)load("glBufferData"); glad_glBufferSubData = (PFNGLBUFFERSUBDATAPROC)load("glBufferSubData"); glad_glGetBufferSubData = (PFNGLGETBUFFERSUBDATAPROC)load("glGetBufferSubData"); glad_glMapBuffer = (PFNGLMAPBUFFERPROC)load("glMapBuffer"); glad_glUnmapBuffer = (PFNGLUNMAPBUFFERPROC)load("glUnmapBuffer"); glad_glGetBufferParameteriv = (PFNGLGETBUFFERPARAMETERIVPROC)load("glGetBufferParameteriv"); glad_glGetBufferPointerv = (PFNGLGETBUFFERPOINTERVPROC)load("glGetBufferPointerv"); } static void load_GL_VERSION_2_0(GLADloadproc load) { if(!GLAD_GL_VERSION_2_0) return; glad_glBlendEquationSeparate = (PFNGLBLENDEQUATIONSEPARATEPROC)load("glBlendEquationSeparate"); glad_glDrawBuffers = (PFNGLDRAWBUFFERSPROC)load("glDrawBuffers"); glad_glStencilOpSeparate = (PFNGLSTENCILOPSEPARATEPROC)load("glStencilOpSeparate"); glad_glStencilFuncSeparate = (PFNGLSTENCILFUNCSEPARATEPROC)load("glStencilFuncSeparate"); glad_glStencilMaskSeparate = (PFNGLSTENCILMASKSEPARATEPROC)load("glStencilMaskSeparate"); glad_glAttachShader = (PFNGLATTACHSHADERPROC)load("glAttachShader"); glad_glBindAttribLocation = (PFNGLBINDATTRIBLOCATIONPROC)load("glBindAttribLocation"); glad_glCompileShader = (PFNGLCOMPILESHADERPROC)load("glCompileShader"); glad_glCreateProgram = (PFNGLCREATEPROGRAMPROC)load("glCreateProgram"); glad_glCreateShader = (PFNGLCREATESHADERPROC)load("glCreateShader"); glad_glDeleteProgram = (PFNGLDELETEPROGRAMPROC)load("glDeleteProgram"); glad_glDeleteShader = (PFNGLDELETESHADERPROC)load("glDeleteShader"); glad_glDetachShader = (PFNGLDETACHSHADERPROC)load("glDetachShader"); glad_glDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC)load("glDisableVertexAttribArray"); glad_glEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC)load("glEnableVertexAttribArray"); glad_glGetActiveAttrib = (PFNGLGETACTIVEATTRIBPROC)load("glGetActiveAttrib"); glad_glGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC)load("glGetActiveUniform"); glad_glGetAttachedShaders = (PFNGLGETATTACHEDSHADERSPROC)load("glGetAttachedShaders"); glad_glGetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC)load("glGetAttribLocation"); glad_glGetProgramiv = (PFNGLGETPROGRAMIVPROC)load("glGetProgramiv"); glad_glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC)load("glGetProgramInfoLog"); glad_glGetShaderiv = (PFNGLGETSHADERIVPROC)load("glGetShaderiv"); glad_glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)load("glGetShaderInfoLog"); glad_glGetShaderSource = (PFNGLGETSHADERSOURCEPROC)load("glGetShaderSource"); glad_glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC)load("glGetUniformLocation"); glad_glGetUniformfv = (PFNGLGETUNIFORMFVPROC)load("glGetUniformfv"); glad_glGetUniformiv = (PFNGLGETUNIFORMIVPROC)load("glGetUniformiv"); glad_glGetVertexAttribdv = (PFNGLGETVERTEXATTRIBDVPROC)load("glGetVertexAttribdv"); glad_glGetVertexAttribfv = (PFNGLGETVERTEXATTRIBFVPROC)load("glGetVertexAttribfv"); glad_glGetVertexAttribiv = (PFNGLGETVERTEXATTRIBIVPROC)load("glGetVertexAttribiv"); glad_glGetVertexAttribPointerv = (PFNGLGETVERTEXATTRIBPOINTERVPROC)load("glGetVertexAttribPointerv"); glad_glIsProgram = (PFNGLISPROGRAMPROC)load("glIsProgram"); glad_glIsShader = (PFNGLISSHADERPROC)load("glIsShader"); glad_glLinkProgram = (PFNGLLINKPROGRAMPROC)load("glLinkProgram"); glad_glShaderSource = (PFNGLSHADERSOURCEPROC)load("glShaderSource"); glad_glUseProgram = (PFNGLUSEPROGRAMPROC)load("glUseProgram"); glad_glUniform1f = (PFNGLUNIFORM1FPROC)load("glUniform1f"); glad_glUniform2f = (PFNGLUNIFORM2FPROC)load("glUniform2f"); glad_glUniform3f = (PFNGLUNIFORM3FPROC)load("glUniform3f"); glad_glUniform4f = (PFNGLUNIFORM4FPROC)load("glUniform4f"); glad_glUniform1i = (PFNGLUNIFORM1IPROC)load("glUniform1i"); glad_glUniform2i = (PFNGLUNIFORM2IPROC)load("glUniform2i"); glad_glUniform3i = (PFNGLUNIFORM3IPROC)load("glUniform3i"); glad_glUniform4i = (PFNGLUNIFORM4IPROC)load("glUniform4i"); glad_glUniform1fv = (PFNGLUNIFORM1FVPROC)load("glUniform1fv"); glad_glUniform2fv = (PFNGLUNIFORM2FVPROC)load("glUniform2fv"); glad_glUniform3fv = (PFNGLUNIFORM3FVPROC)load("glUniform3fv"); glad_glUniform4fv = (PFNGLUNIFORM4FVPROC)load("glUniform4fv"); glad_glUniform1iv = (PFNGLUNIFORM1IVPROC)load("glUniform1iv"); glad_glUniform2iv = (PFNGLUNIFORM2IVPROC)load("glUniform2iv"); glad_glUniform3iv = (PFNGLUNIFORM3IVPROC)load("glUniform3iv"); glad_glUniform4iv = (PFNGLUNIFORM4IVPROC)load("glUniform4iv"); glad_glUniformMatrix2fv = (PFNGLUNIFORMMATRIX2FVPROC)load("glUniformMatrix2fv"); glad_glUniformMatrix3fv = (PFNGLUNIFORMMATRIX3FVPROC)load("glUniformMatrix3fv"); glad_glUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC)load("glUniformMatrix4fv"); glad_glValidateProgram = (PFNGLVALIDATEPROGRAMPROC)load("glValidateProgram"); glad_glVertexAttrib1d = (PFNGLVERTEXATTRIB1DPROC)load("glVertexAttrib1d"); glad_glVertexAttrib1dv = (PFNGLVERTEXATTRIB1DVPROC)load("glVertexAttrib1dv"); glad_glVertexAttrib1f = (PFNGLVERTEXATTRIB1FPROC)load("glVertexAttrib1f"); glad_glVertexAttrib1fv = (PFNGLVERTEXATTRIB1FVPROC)load("glVertexAttrib1fv"); glad_glVertexAttrib1s = (PFNGLVERTEXATTRIB1SPROC)load("glVertexAttrib1s"); glad_glVertexAttrib1sv = (PFNGLVERTEXATTRIB1SVPROC)load("glVertexAttrib1sv"); glad_glVertexAttrib2d = (PFNGLVERTEXATTRIB2DPROC)load("glVertexAttrib2d"); glad_glVertexAttrib2dv = (PFNGLVERTEXATTRIB2DVPROC)load("glVertexAttrib2dv"); glad_glVertexAttrib2f = (PFNGLVERTEXATTRIB2FPROC)load("glVertexAttrib2f"); glad_glVertexAttrib2fv = (PFNGLVERTEXATTRIB2FVPROC)load("glVertexAttrib2fv"); glad_glVertexAttrib2s = (PFNGLVERTEXATTRIB2SPROC)load("glVertexAttrib2s"); glad_glVertexAttrib2sv = (PFNGLVERTEXATTRIB2SVPROC)load("glVertexAttrib2sv"); glad_glVertexAttrib3d = (PFNGLVERTEXATTRIB3DPROC)load("glVertexAttrib3d"); glad_glVertexAttrib3dv = (PFNGLVERTEXATTRIB3DVPROC)load("glVertexAttrib3dv"); glad_glVertexAttrib3f = (PFNGLVERTEXATTRIB3FPROC)load("glVertexAttrib3f"); glad_glVertexAttrib3fv = (PFNGLVERTEXATTRIB3FVPROC)load("glVertexAttrib3fv"); glad_glVertexAttrib3s = (PFNGLVERTEXATTRIB3SPROC)load("glVertexAttrib3s"); glad_glVertexAttrib3sv = (PFNGLVERTEXATTRIB3SVPROC)load("glVertexAttrib3sv"); glad_glVertexAttrib4Nbv = (PFNGLVERTEXATTRIB4NBVPROC)load("glVertexAttrib4Nbv"); glad_glVertexAttrib4Niv = (PFNGLVERTEXATTRIB4NIVPROC)load("glVertexAttrib4Niv"); glad_glVertexAttrib4Nsv = (PFNGLVERTEXATTRIB4NSVPROC)load("glVertexAttrib4Nsv"); glad_glVertexAttrib4Nub = (PFNGLVERTEXATTRIB4NUBPROC)load("glVertexAttrib4Nub"); glad_glVertexAttrib4Nubv = (PFNGLVERTEXATTRIB4NUBVPROC)load("glVertexAttrib4Nubv"); glad_glVertexAttrib4Nuiv = (PFNGLVERTEXATTRIB4NUIVPROC)load("glVertexAttrib4Nuiv"); glad_glVertexAttrib4Nusv = (PFNGLVERTEXATTRIB4NUSVPROC)load("glVertexAttrib4Nusv"); glad_glVertexAttrib4bv = (PFNGLVERTEXATTRIB4BVPROC)load("glVertexAttrib4bv"); glad_glVertexAttrib4d = (PFNGLVERTEXATTRIB4DPROC)load("glVertexAttrib4d"); glad_glVertexAttrib4dv = (PFNGLVERTEXATTRIB4DVPROC)load("glVertexAttrib4dv"); glad_glVertexAttrib4f = (PFNGLVERTEXATTRIB4FPROC)load("glVertexAttrib4f"); glad_glVertexAttrib4fv = (PFNGLVERTEXATTRIB4FVPROC)load("glVertexAttrib4fv"); glad_glVertexAttrib4iv = (PFNGLVERTEXATTRIB4IVPROC)load("glVertexAttrib4iv"); glad_glVertexAttrib4s = (PFNGLVERTEXATTRIB4SPROC)load("glVertexAttrib4s"); glad_glVertexAttrib4sv = (PFNGLVERTEXATTRIB4SVPROC)load("glVertexAttrib4sv"); glad_glVertexAttrib4ubv = (PFNGLVERTEXATTRIB4UBVPROC)load("glVertexAttrib4ubv"); glad_glVertexAttrib4uiv = (PFNGLVERTEXATTRIB4UIVPROC)load("glVertexAttrib4uiv"); glad_glVertexAttrib4usv = (PFNGLVERTEXATTRIB4USVPROC)load("glVertexAttrib4usv"); glad_glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC)load("glVertexAttribPointer"); } static void load_GL_VERSION_2_1(GLADloadproc load) { if(!GLAD_GL_VERSION_2_1) return; glad_glUniformMatrix2x3fv = (PFNGLUNIFORMMATRIX2X3FVPROC)load("glUniformMatrix2x3fv"); glad_glUniformMatrix3x2fv = (PFNGLUNIFORMMATRIX3X2FVPROC)load("glUniformMatrix3x2fv"); glad_glUniformMatrix2x4fv = (PFNGLUNIFORMMATRIX2X4FVPROC)load("glUniformMatrix2x4fv"); glad_glUniformMatrix4x2fv = (PFNGLUNIFORMMATRIX4X2FVPROC)load("glUniformMatrix4x2fv"); glad_glUniformMatrix3x4fv = (PFNGLUNIFORMMATRIX3X4FVPROC)load("glUniformMatrix3x4fv"); glad_glUniformMatrix4x3fv = (PFNGLUNIFORMMATRIX4X3FVPROC)load("glUniformMatrix4x3fv"); } static void load_GL_VERSION_3_0(GLADloadproc load) { if(!GLAD_GL_VERSION_3_0) return; glad_glColorMaski = (PFNGLCOLORMASKIPROC)load("glColorMaski"); glad_glGetBooleani_v = (PFNGLGETBOOLEANI_VPROC)load("glGetBooleani_v"); glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load("glGetIntegeri_v"); glad_glEnablei = (PFNGLENABLEIPROC)load("glEnablei"); glad_glDisablei = (PFNGLDISABLEIPROC)load("glDisablei"); glad_glIsEnabledi = (PFNGLISENABLEDIPROC)load("glIsEnabledi"); glad_glBeginTransformFeedback = (PFNGLBEGINTRANSFORMFEEDBACKPROC)load("glBeginTransformFeedback"); glad_glEndTransformFeedback = (PFNGLENDTRANSFORMFEEDBACKPROC)load("glEndTransformFeedback"); glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load("glBindBufferRange"); glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load("glBindBufferBase"); glad_glTransformFeedbackVaryings = (PFNGLTRANSFORMFEEDBACKVARYINGSPROC)load("glTransformFeedbackVaryings"); glad_glGetTransformFeedbackVarying = (PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)load("glGetTransformFeedbackVarying"); glad_glClampColor = (PFNGLCLAMPCOLORPROC)load("glClampColor"); glad_glBeginConditionalRender = (PFNGLBEGINCONDITIONALRENDERPROC)load("glBeginConditionalRender"); glad_glEndConditionalRender = (PFNGLENDCONDITIONALRENDERPROC)load("glEndConditionalRender"); glad_glVertexAttribIPointer = (PFNGLVERTEXATTRIBIPOINTERPROC)load("glVertexAttribIPointer"); glad_glGetVertexAttribIiv = (PFNGLGETVERTEXATTRIBIIVPROC)load("glGetVertexAttribIiv"); glad_glGetVertexAttribIuiv = (PFNGLGETVERTEXATTRIBIUIVPROC)load("glGetVertexAttribIuiv"); glad_glVertexAttribI1i = (PFNGLVERTEXATTRIBI1IPROC)load("glVertexAttribI1i"); glad_glVertexAttribI2i = (PFNGLVERTEXATTRIBI2IPROC)load("glVertexAttribI2i"); glad_glVertexAttribI3i = (PFNGLVERTEXATTRIBI3IPROC)load("glVertexAttribI3i"); glad_glVertexAttribI4i = (PFNGLVERTEXATTRIBI4IPROC)load("glVertexAttribI4i"); glad_glVertexAttribI1ui = (PFNGLVERTEXATTRIBI1UIPROC)load("glVertexAttribI1ui"); glad_glVertexAttribI2ui = (PFNGLVERTEXATTRIBI2UIPROC)load("glVertexAttribI2ui"); glad_glVertexAttribI3ui = (PFNGLVERTEXATTRIBI3UIPROC)load("glVertexAttribI3ui"); glad_glVertexAttribI4ui = (PFNGLVERTEXATTRIBI4UIPROC)load("glVertexAttribI4ui"); glad_glVertexAttribI1iv = (PFNGLVERTEXATTRIBI1IVPROC)load("glVertexAttribI1iv"); glad_glVertexAttribI2iv = (PFNGLVERTEXATTRIBI2IVPROC)load("glVertexAttribI2iv"); glad_glVertexAttribI3iv = (PFNGLVERTEXATTRIBI3IVPROC)load("glVertexAttribI3iv"); glad_glVertexAttribI4iv = (PFNGLVERTEXATTRIBI4IVPROC)load("glVertexAttribI4iv"); glad_glVertexAttribI1uiv = (PFNGLVERTEXATTRIBI1UIVPROC)load("glVertexAttribI1uiv"); glad_glVertexAttribI2uiv = (PFNGLVERTEXATTRIBI2UIVPROC)load("glVertexAttribI2uiv"); glad_glVertexAttribI3uiv = (PFNGLVERTEXATTRIBI3UIVPROC)load("glVertexAttribI3uiv"); glad_glVertexAttribI4uiv = (PFNGLVERTEXATTRIBI4UIVPROC)load("glVertexAttribI4uiv"); glad_glVertexAttribI4bv = (PFNGLVERTEXATTRIBI4BVPROC)load("glVertexAttribI4bv"); glad_glVertexAttribI4sv = (PFNGLVERTEXATTRIBI4SVPROC)load("glVertexAttribI4sv"); glad_glVertexAttribI4ubv = (PFNGLVERTEXATTRIBI4UBVPROC)load("glVertexAttribI4ubv"); glad_glVertexAttribI4usv = (PFNGLVERTEXATTRIBI4USVPROC)load("glVertexAttribI4usv"); glad_glGetUniformuiv = (PFNGLGETUNIFORMUIVPROC)load("glGetUniformuiv"); glad_glBindFragDataLocation = (PFNGLBINDFRAGDATALOCATIONPROC)load("glBindFragDataLocation"); glad_glGetFragDataLocation = (PFNGLGETFRAGDATALOCATIONPROC)load("glGetFragDataLocation"); glad_glUniform1ui = (PFNGLUNIFORM1UIPROC)load("glUniform1ui"); glad_glUniform2ui = (PFNGLUNIFORM2UIPROC)load("glUniform2ui"); glad_glUniform3ui = (PFNGLUNIFORM3UIPROC)load("glUniform3ui"); glad_glUniform4ui = (PFNGLUNIFORM4UIPROC)load("glUniform4ui"); glad_glUniform1uiv = (PFNGLUNIFORM1UIVPROC)load("glUniform1uiv"); glad_glUniform2uiv = (PFNGLUNIFORM2UIVPROC)load("glUniform2uiv"); glad_glUniform3uiv = (PFNGLUNIFORM3UIVPROC)load("glUniform3uiv"); glad_glUniform4uiv = (PFNGLUNIFORM4UIVPROC)load("glUniform4uiv"); glad_glTexParameterIiv = (PFNGLTEXPARAMETERIIVPROC)load("glTexParameterIiv"); glad_glTexParameterIuiv = (PFNGLTEXPARAMETERIUIVPROC)load("glTexParameterIuiv"); glad_glGetTexParameterIiv = (PFNGLGETTEXPARAMETERIIVPROC)load("glGetTexParameterIiv"); glad_glGetTexParameterIuiv = (PFNGLGETTEXPARAMETERIUIVPROC)load("glGetTexParameterIuiv"); glad_glClearBufferiv = (PFNGLCLEARBUFFERIVPROC)load("glClearBufferiv"); glad_glClearBufferuiv = (PFNGLCLEARBUFFERUIVPROC)load("glClearBufferuiv"); glad_glClearBufferfv = (PFNGLCLEARBUFFERFVPROC)load("glClearBufferfv"); glad_glClearBufferfi = (PFNGLCLEARBUFFERFIPROC)load("glClearBufferfi"); glad_glGetStringi = (PFNGLGETSTRINGIPROC)load("glGetStringi"); glad_glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC)load("glIsRenderbuffer"); glad_glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)load("glBindRenderbuffer"); glad_glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)load("glDeleteRenderbuffers"); glad_glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)load("glGenRenderbuffers"); glad_glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)load("glRenderbufferStorage"); glad_glGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVPROC)load("glGetRenderbufferParameteriv"); glad_glIsFramebuffer = (PFNGLISFRAMEBUFFERPROC)load("glIsFramebuffer"); glad_glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)load("glBindFramebuffer"); glad_glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)load("glDeleteFramebuffers"); glad_glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)load("glGenFramebuffers"); glad_glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)load("glCheckFramebufferStatus"); glad_glFramebufferTexture1D = (PFNGLFRAMEBUFFERTEXTURE1DPROC)load("glFramebufferTexture1D"); glad_glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)load("glFramebufferTexture2D"); glad_glFramebufferTexture3D = (PFNGLFRAMEBUFFERTEXTURE3DPROC)load("glFramebufferTexture3D"); glad_glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC)load("glFramebufferRenderbuffer"); glad_glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)load("glGetFramebufferAttachmentParameteriv"); glad_glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC)load("glGenerateMipmap"); glad_glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)load("glBlitFramebuffer"); glad_glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)load("glRenderbufferStorageMultisample"); glad_glFramebufferTextureLayer = (PFNGLFRAMEBUFFERTEXTURELAYERPROC)load("glFramebufferTextureLayer"); glad_glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC)load("glMapBufferRange"); glad_glFlushMappedBufferRange = (PFNGLFLUSHMAPPEDBUFFERRANGEPROC)load("glFlushMappedBufferRange"); glad_glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC)load("glBindVertexArray"); glad_glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC)load("glDeleteVertexArrays"); glad_glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC)load("glGenVertexArrays"); glad_glIsVertexArray = (PFNGLISVERTEXARRAYPROC)load("glIsVertexArray"); } static void load_GL_VERSION_3_1(GLADloadproc load) { if(!GLAD_GL_VERSION_3_1) return; glad_glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDPROC)load("glDrawArraysInstanced"); glad_glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDPROC)load("glDrawElementsInstanced"); glad_glTexBuffer = (PFNGLTEXBUFFERPROC)load("glTexBuffer"); glad_glPrimitiveRestartIndex = (PFNGLPRIMITIVERESTARTINDEXPROC)load("glPrimitiveRestartIndex"); glad_glCopyBufferSubData = (PFNGLCOPYBUFFERSUBDATAPROC)load("glCopyBufferSubData"); glad_glGetUniformIndices = (PFNGLGETUNIFORMINDICESPROC)load("glGetUniformIndices"); glad_glGetActiveUniformsiv = (PFNGLGETACTIVEUNIFORMSIVPROC)load("glGetActiveUniformsiv"); glad_glGetActiveUniformName = (PFNGLGETACTIVEUNIFORMNAMEPROC)load("glGetActiveUniformName"); glad_glGetUniformBlockIndex = (PFNGLGETUNIFORMBLOCKINDEXPROC)load("glGetUniformBlockIndex"); glad_glGetActiveUniformBlockiv = (PFNGLGETACTIVEUNIFORMBLOCKIVPROC)load("glGetActiveUniformBlockiv"); glad_glGetActiveUniformBlockName = (PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)load("glGetActiveUniformBlockName"); glad_glUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDINGPROC)load("glUniformBlockBinding"); glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load("glBindBufferRange"); glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load("glBindBufferBase"); glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load("glGetIntegeri_v"); } static void load_GL_VERSION_3_2(GLADloadproc load) { if(!GLAD_GL_VERSION_3_2) return; glad_glDrawElementsBaseVertex = (PFNGLDRAWELEMENTSBASEVERTEXPROC)load("glDrawElementsBaseVertex"); glad_glDrawRangeElementsBaseVertex = (PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)load("glDrawRangeElementsBaseVertex"); glad_glDrawElementsInstancedBaseVertex = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)load("glDrawElementsInstancedBaseVertex"); glad_glMultiDrawElementsBaseVertex = (PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)load("glMultiDrawElementsBaseVertex"); glad_glProvokingVertex = (PFNGLPROVOKINGVERTEXPROC)load("glProvokingVertex"); glad_glFenceSync = (PFNGLFENCESYNCPROC)load("glFenceSync"); glad_glIsSync = (PFNGLISSYNCPROC)load("glIsSync"); glad_glDeleteSync = (PFNGLDELETESYNCPROC)load("glDeleteSync"); glad_glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC)load("glClientWaitSync"); glad_glWaitSync = (PFNGLWAITSYNCPROC)load("glWaitSync"); glad_glGetInteger64v = (PFNGLGETINTEGER64VPROC)load("glGetInteger64v"); glad_glGetSynciv = (PFNGLGETSYNCIVPROC)load("glGetSynciv"); glad_glGetInteger64i_v = (PFNGLGETINTEGER64I_VPROC)load("glGetInteger64i_v"); glad_glGetBufferParameteri64v = (PFNGLGETBUFFERPARAMETERI64VPROC)load("glGetBufferParameteri64v"); glad_glFramebufferTexture = (PFNGLFRAMEBUFFERTEXTUREPROC)load("glFramebufferTexture"); glad_glTexImage2DMultisample = (PFNGLTEXIMAGE2DMULTISAMPLEPROC)load("glTexImage2DMultisample"); glad_glTexImage3DMultisample = (PFNGLTEXIMAGE3DMULTISAMPLEPROC)load("glTexImage3DMultisample"); glad_glGetMultisamplefv = (PFNGLGETMULTISAMPLEFVPROC)load("glGetMultisamplefv"); glad_glSampleMaski = (PFNGLSAMPLEMASKIPROC)load("glSampleMaski"); } static void load_GL_VERSION_3_3(GLADloadproc load) { if(!GLAD_GL_VERSION_3_3) return; glad_glBindFragDataLocationIndexed = (PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)load("glBindFragDataLocationIndexed"); glad_glGetFragDataIndex = (PFNGLGETFRAGDATAINDEXPROC)load("glGetFragDataIndex"); glad_glGenSamplers = (PFNGLGENSAMPLERSPROC)load("glGenSamplers"); glad_glDeleteSamplers = (PFNGLDELETESAMPLERSPROC)load("glDeleteSamplers"); glad_glIsSampler = (PFNGLISSAMPLERPROC)load("glIsSampler"); glad_glBindSampler = (PFNGLBINDSAMPLERPROC)load("glBindSampler"); glad_glSamplerParameteri = (PFNGLSAMPLERPARAMETERIPROC)load("glSamplerParameteri"); glad_glSamplerParameteriv = (PFNGLSAMPLERPARAMETERIVPROC)load("glSamplerParameteriv"); glad_glSamplerParameterf = (PFNGLSAMPLERPARAMETERFPROC)load("glSamplerParameterf"); glad_glSamplerParameterfv = (PFNGLSAMPLERPARAMETERFVPROC)load("glSamplerParameterfv"); glad_glSamplerParameterIiv = (PFNGLSAMPLERPARAMETERIIVPROC)load("glSamplerParameterIiv"); glad_glSamplerParameterIuiv = (PFNGLSAMPLERPARAMETERIUIVPROC)load("glSamplerParameterIuiv"); glad_glGetSamplerParameteriv = (PFNGLGETSAMPLERPARAMETERIVPROC)load("glGetSamplerParameteriv"); glad_glGetSamplerParameterIiv = (PFNGLGETSAMPLERPARAMETERIIVPROC)load("glGetSamplerParameterIiv"); glad_glGetSamplerParameterfv = (PFNGLGETSAMPLERPARAMETERFVPROC)load("glGetSamplerParameterfv"); glad_glGetSamplerParameterIuiv = (PFNGLGETSAMPLERPARAMETERIUIVPROC)load("glGetSamplerParameterIuiv"); glad_glQueryCounter = (PFNGLQUERYCOUNTERPROC)load("glQueryCounter"); glad_glGetQueryObjecti64v = (PFNGLGETQUERYOBJECTI64VPROC)load("glGetQueryObjecti64v"); glad_glGetQueryObjectui64v = (PFNGLGETQUERYOBJECTUI64VPROC)load("glGetQueryObjectui64v"); glad_glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISORPROC)load("glVertexAttribDivisor"); glad_glVertexAttribP1ui = (PFNGLVERTEXATTRIBP1UIPROC)load("glVertexAttribP1ui"); glad_glVertexAttribP1uiv = (PFNGLVERTEXATTRIBP1UIVPROC)load("glVertexAttribP1uiv"); glad_glVertexAttribP2ui = (PFNGLVERTEXATTRIBP2UIPROC)load("glVertexAttribP2ui"); glad_glVertexAttribP2uiv = (PFNGLVERTEXATTRIBP2UIVPROC)load("glVertexAttribP2uiv"); glad_glVertexAttribP3ui = (PFNGLVERTEXATTRIBP3UIPROC)load("glVertexAttribP3ui"); glad_glVertexAttribP3uiv = (PFNGLVERTEXATTRIBP3UIVPROC)load("glVertexAttribP3uiv"); glad_glVertexAttribP4ui = (PFNGLVERTEXATTRIBP4UIPROC)load("glVertexAttribP4ui"); glad_glVertexAttribP4uiv = (PFNGLVERTEXATTRIBP4UIVPROC)load("glVertexAttribP4uiv"); glad_glVertexP2ui = (PFNGLVERTEXP2UIPROC)load("glVertexP2ui"); glad_glVertexP2uiv = (PFNGLVERTEXP2UIVPROC)load("glVertexP2uiv"); glad_glVertexP3ui = (PFNGLVERTEXP3UIPROC)load("glVertexP3ui"); glad_glVertexP3uiv = (PFNGLVERTEXP3UIVPROC)load("glVertexP3uiv"); glad_glVertexP4ui = (PFNGLVERTEXP4UIPROC)load("glVertexP4ui"); glad_glVertexP4uiv = (PFNGLVERTEXP4UIVPROC)load("glVertexP4uiv"); glad_glTexCoordP1ui = (PFNGLTEXCOORDP1UIPROC)load("glTexCoordP1ui"); glad_glTexCoordP1uiv = (PFNGLTEXCOORDP1UIVPROC)load("glTexCoordP1uiv"); glad_glTexCoordP2ui = (PFNGLTEXCOORDP2UIPROC)load("glTexCoordP2ui"); glad_glTexCoordP2uiv = (PFNGLTEXCOORDP2UIVPROC)load("glTexCoordP2uiv"); glad_glTexCoordP3ui = (PFNGLTEXCOORDP3UIPROC)load("glTexCoordP3ui"); glad_glTexCoordP3uiv = (PFNGLTEXCOORDP3UIVPROC)load("glTexCoordP3uiv"); glad_glTexCoordP4ui = (PFNGLTEXCOORDP4UIPROC)load("glTexCoordP4ui"); glad_glTexCoordP4uiv = (PFNGLTEXCOORDP4UIVPROC)load("glTexCoordP4uiv"); glad_glMultiTexCoordP1ui = (PFNGLMULTITEXCOORDP1UIPROC)load("glMultiTexCoordP1ui"); glad_glMultiTexCoordP1uiv = (PFNGLMULTITEXCOORDP1UIVPROC)load("glMultiTexCoordP1uiv"); glad_glMultiTexCoordP2ui = (PFNGLMULTITEXCOORDP2UIPROC)load("glMultiTexCoordP2ui"); glad_glMultiTexCoordP2uiv = (PFNGLMULTITEXCOORDP2UIVPROC)load("glMultiTexCoordP2uiv"); glad_glMultiTexCoordP3ui = (PFNGLMULTITEXCOORDP3UIPROC)load("glMultiTexCoordP3ui"); glad_glMultiTexCoordP3uiv = (PFNGLMULTITEXCOORDP3UIVPROC)load("glMultiTexCoordP3uiv"); glad_glMultiTexCoordP4ui = (PFNGLMULTITEXCOORDP4UIPROC)load("glMultiTexCoordP4ui"); glad_glMultiTexCoordP4uiv = (PFNGLMULTITEXCOORDP4UIVPROC)load("glMultiTexCoordP4uiv"); glad_glNormalP3ui = (PFNGLNORMALP3UIPROC)load("glNormalP3ui"); glad_glNormalP3uiv = (PFNGLNORMALP3UIVPROC)load("glNormalP3uiv"); glad_glColorP3ui = (PFNGLCOLORP3UIPROC)load("glColorP3ui"); glad_glColorP3uiv = (PFNGLCOLORP3UIVPROC)load("glColorP3uiv"); glad_glColorP4ui = (PFNGLCOLORP4UIPROC)load("glColorP4ui"); glad_glColorP4uiv = (PFNGLCOLORP4UIVPROC)load("glColorP4uiv"); glad_glSecondaryColorP3ui = (PFNGLSECONDARYCOLORP3UIPROC)load("glSecondaryColorP3ui"); glad_glSecondaryColorP3uiv = (PFNGLSECONDARYCOLORP3UIVPROC)load("glSecondaryColorP3uiv"); } static void load_GL_VERSION_4_0(GLADloadproc load) { if(!GLAD_GL_VERSION_4_0) return; glad_glMinSampleShading = (PFNGLMINSAMPLESHADINGPROC)load("glMinSampleShading"); glad_glBlendEquationi = (PFNGLBLENDEQUATIONIPROC)load("glBlendEquationi"); glad_glBlendEquationSeparatei = (PFNGLBLENDEQUATIONSEPARATEIPROC)load("glBlendEquationSeparatei"); glad_glBlendFunci = (PFNGLBLENDFUNCIPROC)load("glBlendFunci"); glad_glBlendFuncSeparatei = (PFNGLBLENDFUNCSEPARATEIPROC)load("glBlendFuncSeparatei"); glad_glDrawArraysIndirect = (PFNGLDRAWARRAYSINDIRECTPROC)load("glDrawArraysIndirect"); glad_glDrawElementsIndirect = (PFNGLDRAWELEMENTSINDIRECTPROC)load("glDrawElementsIndirect"); glad_glUniform1d = (PFNGLUNIFORM1DPROC)load("glUniform1d"); glad_glUniform2d = (PFNGLUNIFORM2DPROC)load("glUniform2d"); glad_glUniform3d = (PFNGLUNIFORM3DPROC)load("glUniform3d"); glad_glUniform4d = (PFNGLUNIFORM4DPROC)load("glUniform4d"); glad_glUniform1dv = (PFNGLUNIFORM1DVPROC)load("glUniform1dv"); glad_glUniform2dv = (PFNGLUNIFORM2DVPROC)load("glUniform2dv"); glad_glUniform3dv = (PFNGLUNIFORM3DVPROC)load("glUniform3dv"); glad_glUniform4dv = (PFNGLUNIFORM4DVPROC)load("glUniform4dv"); glad_glUniformMatrix2dv = (PFNGLUNIFORMMATRIX2DVPROC)load("glUniformMatrix2dv"); glad_glUniformMatrix3dv = (PFNGLUNIFORMMATRIX3DVPROC)load("glUniformMatrix3dv"); glad_glUniformMatrix4dv = (PFNGLUNIFORMMATRIX4DVPROC)load("glUniformMatrix4dv"); glad_glUniformMatrix2x3dv = (PFNGLUNIFORMMATRIX2X3DVPROC)load("glUniformMatrix2x3dv"); glad_glUniformMatrix2x4dv = (PFNGLUNIFORMMATRIX2X4DVPROC)load("glUniformMatrix2x4dv"); glad_glUniformMatrix3x2dv = (PFNGLUNIFORMMATRIX3X2DVPROC)load("glUniformMatrix3x2dv"); glad_glUniformMatrix3x4dv = (PFNGLUNIFORMMATRIX3X4DVPROC)load("glUniformMatrix3x4dv"); glad_glUniformMatrix4x2dv = (PFNGLUNIFORMMATRIX4X2DVPROC)load("glUniformMatrix4x2dv"); glad_glUniformMatrix4x3dv = (PFNGLUNIFORMMATRIX4X3DVPROC)load("glUniformMatrix4x3dv"); glad_glGetUniformdv = (PFNGLGETUNIFORMDVPROC)load("glGetUniformdv"); glad_glGetSubroutineUniformLocation = (PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC)load("glGetSubroutineUniformLocation"); glad_glGetSubroutineIndex = (PFNGLGETSUBROUTINEINDEXPROC)load("glGetSubroutineIndex"); glad_glGetActiveSubroutineUniformiv = (PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC)load("glGetActiveSubroutineUniformiv"); glad_glGetActiveSubroutineUniformName = (PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC)load("glGetActiveSubroutineUniformName"); glad_glGetActiveSubroutineName = (PFNGLGETACTIVESUBROUTINENAMEPROC)load("glGetActiveSubroutineName"); glad_glUniformSubroutinesuiv = (PFNGLUNIFORMSUBROUTINESUIVPROC)load("glUniformSubroutinesuiv"); glad_glGetUniformSubroutineuiv = (PFNGLGETUNIFORMSUBROUTINEUIVPROC)load("glGetUniformSubroutineuiv"); glad_glGetProgramStageiv = (PFNGLGETPROGRAMSTAGEIVPROC)load("glGetProgramStageiv"); glad_glPatchParameteri = (PFNGLPATCHPARAMETERIPROC)load("glPatchParameteri"); glad_glPatchParameterfv = (PFNGLPATCHPARAMETERFVPROC)load("glPatchParameterfv"); glad_glBindTransformFeedback = (PFNGLBINDTRANSFORMFEEDBACKPROC)load("glBindTransformFeedback"); glad_glDeleteTransformFeedbacks = (PFNGLDELETETRANSFORMFEEDBACKSPROC)load("glDeleteTransformFeedbacks"); glad_glGenTransformFeedbacks = (PFNGLGENTRANSFORMFEEDBACKSPROC)load("glGenTransformFeedbacks"); glad_glIsTransformFeedback = (PFNGLISTRANSFORMFEEDBACKPROC)load("glIsTransformFeedback"); glad_glPauseTransformFeedback = (PFNGLPAUSETRANSFORMFEEDBACKPROC)load("glPauseTransformFeedback"); glad_glResumeTransformFeedback = (PFNGLRESUMETRANSFORMFEEDBACKPROC)load("glResumeTransformFeedback"); glad_glDrawTransformFeedback = (PFNGLDRAWTRANSFORMFEEDBACKPROC)load("glDrawTransformFeedback"); glad_glDrawTransformFeedbackStream = (PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC)load("glDrawTransformFeedbackStream"); glad_glBeginQueryIndexed = (PFNGLBEGINQUERYINDEXEDPROC)load("glBeginQueryIndexed"); glad_glEndQueryIndexed = (PFNGLENDQUERYINDEXEDPROC)load("glEndQueryIndexed"); glad_glGetQueryIndexediv = (PFNGLGETQUERYINDEXEDIVPROC)load("glGetQueryIndexediv"); } static void load_GL_ARB_debug_output(GLADloadproc load) { if(!GLAD_GL_ARB_debug_output) return; glad_glDebugMessageControlARB = (PFNGLDEBUGMESSAGECONTROLARBPROC)load("glDebugMessageControlARB"); glad_glDebugMessageInsertARB = (PFNGLDEBUGMESSAGEINSERTARBPROC)load("glDebugMessageInsertARB"); glad_glDebugMessageCallbackARB = (PFNGLDEBUGMESSAGECALLBACKARBPROC)load("glDebugMessageCallbackARB"); glad_glGetDebugMessageLogARB = (PFNGLGETDEBUGMESSAGELOGARBPROC)load("glGetDebugMessageLogARB"); } static int find_extensionsGL(void) { if (!get_exts()) return 0; GLAD_GL_ARB_debug_output = has_ext("GL_ARB_debug_output"); free_exts(); return 1; } static void find_coreGL(void) { /* Thank you @elmindreda * https://github.com/elmindreda/greg/blob/master/templates/greg.c.in#L176 * https://github.com/glfw/glfw/blob/master/src/context.c#L36 */ int i, major, minor; const char* version; const char* prefixes[] = { "OpenGL ES-CM ", "OpenGL ES-CL ", "OpenGL ES ", NULL }; version = (const char*) glGetString(GL_VERSION); if (!version) return; for (i = 0; prefixes[i]; i++) { const size_t length = strlen(prefixes[i]); if (strncmp(version, prefixes[i], length) == 0) { version += length; break; } } /* PR #18 */ #ifdef _MSC_VER sscanf_s(version, "%d.%d", &major, &minor); #else sscanf(version, "%d.%d", &major, &minor); #endif GLVersion.major = major; GLVersion.minor = minor; max_loaded_major = major; max_loaded_minor = minor; GLAD_GL_VERSION_1_0 = (major == 1 && minor >= 0) || major > 1; GLAD_GL_VERSION_1_1 = (major == 1 && minor >= 1) || major > 1; GLAD_GL_VERSION_1_2 = (major == 1 && minor >= 2) || major > 1; GLAD_GL_VERSION_1_3 = (major == 1 && minor >= 3) || major > 1; GLAD_GL_VERSION_1_4 = (major == 1 && minor >= 4) || major > 1; GLAD_GL_VERSION_1_5 = (major == 1 && minor >= 5) || major > 1; GLAD_GL_VERSION_2_0 = (major == 2 && minor >= 0) || major > 2; GLAD_GL_VERSION_2_1 = (major == 2 && minor >= 1) || major > 2; GLAD_GL_VERSION_3_0 = (major == 3 && minor >= 0) || major > 3; GLAD_GL_VERSION_3_1 = (major == 3 && minor >= 1) || major > 3; GLAD_GL_VERSION_3_2 = (major == 3 && minor >= 2) || major > 3; GLAD_GL_VERSION_3_3 = (major == 3 && minor >= 3) || major > 3; GLAD_GL_VERSION_4_0 = (major == 4 && minor >= 0) || major > 4; if (GLVersion.major > 4 || (GLVersion.major >= 4 && GLVersion.minor >= 0)) { max_loaded_major = 4; max_loaded_minor = 0; } } int gladLoadGLLoader(GLADloadproc load) { GLVersion.major = 0; GLVersion.minor = 0; glGetString = (PFNGLGETSTRINGPROC)load("glGetString"); if(glGetString == NULL) return 0; if(glGetString(GL_VERSION) == NULL) return 0; find_coreGL(); load_GL_VERSION_1_0(load); load_GL_VERSION_1_1(load); load_GL_VERSION_1_2(load); load_GL_VERSION_1_3(load); load_GL_VERSION_1_4(load); load_GL_VERSION_1_5(load); load_GL_VERSION_2_0(load); load_GL_VERSION_2_1(load); load_GL_VERSION_3_0(load); load_GL_VERSION_3_1(load); load_GL_VERSION_3_2(load); load_GL_VERSION_3_3(load); load_GL_VERSION_4_0(load); if (!find_extensionsGL()) return 0; load_GL_ARB_debug_output(load); return GLVersion.major != 0 || GLVersion.minor != 0; } ================================================ FILE: libraries/glad/glad.h ================================================ /* OpenGL loader generated by glad 0.1.36 on Mon Mar 27 19:33:18 2023. Language/Generator: C/C++ Specification: gl APIs: gl=4.0 Profile: core Extensions: GL_ARB_debug_output Loader: True Local files: False Omit khrplatform: False Reproducible: False Commandline: --profile="core" --api="gl=4.0" --generator="c" --spec="gl" --extensions="GL_ARB_debug_output" Online: https://glad.dav1d.de/#profile=core&language=c&specification=gl&loader=on&api=gl%3D4.0&extensions=GL_ARB_debug_output */ #ifndef __glad_h_ #define __glad_h_ #ifdef __gl_h_ #error OpenGL header already included, remove this include, glad already provides it #endif #define __gl_h_ #if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) #define APIENTRY __stdcall #endif #ifndef APIENTRY #define APIENTRY #endif #ifndef APIENTRYP #define APIENTRYP APIENTRY * #endif #ifndef GLAPIENTRY #define GLAPIENTRY APIENTRY #endif #ifdef __cplusplus extern "C" { #endif struct gladGLversionStruct { int major; int minor; }; typedef void* (* GLADloadproc)(const char *name); #ifndef GLAPI # if defined(GLAD_GLAPI_EXPORT) # if defined(_WIN32) || defined(__CYGWIN__) # if defined(GLAD_GLAPI_EXPORT_BUILD) # if defined(__GNUC__) # define GLAPI __attribute__ ((dllexport)) extern # else # define GLAPI __declspec(dllexport) extern # endif # else # if defined(__GNUC__) # define GLAPI __attribute__ ((dllimport)) extern # else # define GLAPI __declspec(dllimport) extern # endif # endif # elif defined(__GNUC__) && defined(GLAD_GLAPI_EXPORT_BUILD) # define GLAPI __attribute__ ((visibility ("default"))) extern # else # define GLAPI extern # endif # else # define GLAPI extern # endif #endif GLAPI struct gladGLversionStruct GLVersion; GLAPI int gladLoadGL(void); GLAPI int gladLoadGLLoader(GLADloadproc); #include typedef unsigned int GLenum; typedef unsigned char GLboolean; typedef unsigned int GLbitfield; typedef void GLvoid; typedef khronos_int8_t GLbyte; typedef khronos_uint8_t GLubyte; typedef khronos_int16_t GLshort; typedef khronos_uint16_t GLushort; typedef int GLint; typedef unsigned int GLuint; typedef khronos_int32_t GLclampx; typedef int GLsizei; typedef khronos_float_t GLfloat; typedef khronos_float_t GLclampf; typedef double GLdouble; typedef double GLclampd; typedef void *GLeglClientBufferEXT; typedef void *GLeglImageOES; typedef char GLchar; typedef char GLcharARB; #ifdef __APPLE__ typedef void *GLhandleARB; #else typedef unsigned int GLhandleARB; #endif typedef khronos_uint16_t GLhalf; typedef khronos_uint16_t GLhalfARB; typedef khronos_int32_t GLfixed; typedef khronos_intptr_t GLintptr; typedef khronos_intptr_t GLintptrARB; typedef khronos_ssize_t GLsizeiptr; typedef khronos_ssize_t GLsizeiptrARB; typedef khronos_int64_t GLint64; typedef khronos_int64_t GLint64EXT; typedef khronos_uint64_t GLuint64; typedef khronos_uint64_t GLuint64EXT; typedef struct __GLsync *GLsync; struct _cl_context; struct _cl_event; typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); typedef unsigned short GLhalfNV; typedef GLintptr GLvdpauSurfaceNV; typedef void (APIENTRY *GLVULKANPROCNV)(void); #define GL_DEPTH_BUFFER_BIT 0x00000100 #define GL_STENCIL_BUFFER_BIT 0x00000400 #define GL_COLOR_BUFFER_BIT 0x00004000 #define GL_FALSE 0 #define GL_TRUE 1 #define GL_POINTS 0x0000 #define GL_LINES 0x0001 #define GL_LINE_LOOP 0x0002 #define GL_LINE_STRIP 0x0003 #define GL_TRIANGLES 0x0004 #define GL_TRIANGLE_STRIP 0x0005 #define GL_TRIANGLE_FAN 0x0006 #define GL_NEVER 0x0200 #define GL_LESS 0x0201 #define GL_EQUAL 0x0202 #define GL_LEQUAL 0x0203 #define GL_GREATER 0x0204 #define GL_NOTEQUAL 0x0205 #define GL_GEQUAL 0x0206 #define GL_ALWAYS 0x0207 #define GL_ZERO 0 #define GL_ONE 1 #define GL_SRC_COLOR 0x0300 #define GL_ONE_MINUS_SRC_COLOR 0x0301 #define GL_SRC_ALPHA 0x0302 #define GL_ONE_MINUS_SRC_ALPHA 0x0303 #define GL_DST_ALPHA 0x0304 #define GL_ONE_MINUS_DST_ALPHA 0x0305 #define GL_DST_COLOR 0x0306 #define GL_ONE_MINUS_DST_COLOR 0x0307 #define GL_SRC_ALPHA_SATURATE 0x0308 #define GL_NONE 0 #define GL_FRONT_LEFT 0x0400 #define GL_FRONT_RIGHT 0x0401 #define GL_BACK_LEFT 0x0402 #define GL_BACK_RIGHT 0x0403 #define GL_FRONT 0x0404 #define GL_BACK 0x0405 #define GL_LEFT 0x0406 #define GL_RIGHT 0x0407 #define GL_FRONT_AND_BACK 0x0408 #define GL_NO_ERROR 0 #define GL_INVALID_ENUM 0x0500 #define GL_INVALID_VALUE 0x0501 #define GL_INVALID_OPERATION 0x0502 #define GL_OUT_OF_MEMORY 0x0505 #define GL_CW 0x0900 #define GL_CCW 0x0901 #define GL_POINT_SIZE 0x0B11 #define GL_POINT_SIZE_RANGE 0x0B12 #define GL_POINT_SIZE_GRANULARITY 0x0B13 #define GL_LINE_SMOOTH 0x0B20 #define GL_LINE_WIDTH 0x0B21 #define GL_LINE_WIDTH_RANGE 0x0B22 #define GL_LINE_WIDTH_GRANULARITY 0x0B23 #define GL_POLYGON_MODE 0x0B40 #define GL_POLYGON_SMOOTH 0x0B41 #define GL_CULL_FACE 0x0B44 #define GL_CULL_FACE_MODE 0x0B45 #define GL_FRONT_FACE 0x0B46 #define GL_DEPTH_RANGE 0x0B70 #define GL_DEPTH_TEST 0x0B71 #define GL_DEPTH_WRITEMASK 0x0B72 #define GL_DEPTH_CLEAR_VALUE 0x0B73 #define GL_DEPTH_FUNC 0x0B74 #define GL_STENCIL_TEST 0x0B90 #define GL_STENCIL_CLEAR_VALUE 0x0B91 #define GL_STENCIL_FUNC 0x0B92 #define GL_STENCIL_VALUE_MASK 0x0B93 #define GL_STENCIL_FAIL 0x0B94 #define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 #define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 #define GL_STENCIL_REF 0x0B97 #define GL_STENCIL_WRITEMASK 0x0B98 #define GL_VIEWPORT 0x0BA2 #define GL_DITHER 0x0BD0 #define GL_BLEND_DST 0x0BE0 #define GL_BLEND_SRC 0x0BE1 #define GL_BLEND 0x0BE2 #define GL_LOGIC_OP_MODE 0x0BF0 #define GL_DRAW_BUFFER 0x0C01 #define GL_READ_BUFFER 0x0C02 #define GL_SCISSOR_BOX 0x0C10 #define GL_SCISSOR_TEST 0x0C11 #define GL_COLOR_CLEAR_VALUE 0x0C22 #define GL_COLOR_WRITEMASK 0x0C23 #define GL_DOUBLEBUFFER 0x0C32 #define GL_STEREO 0x0C33 #define GL_LINE_SMOOTH_HINT 0x0C52 #define GL_POLYGON_SMOOTH_HINT 0x0C53 #define GL_UNPACK_SWAP_BYTES 0x0CF0 #define GL_UNPACK_LSB_FIRST 0x0CF1 #define GL_UNPACK_ROW_LENGTH 0x0CF2 #define GL_UNPACK_SKIP_ROWS 0x0CF3 #define GL_UNPACK_SKIP_PIXELS 0x0CF4 #define GL_UNPACK_ALIGNMENT 0x0CF5 #define GL_PACK_SWAP_BYTES 0x0D00 #define GL_PACK_LSB_FIRST 0x0D01 #define GL_PACK_ROW_LENGTH 0x0D02 #define GL_PACK_SKIP_ROWS 0x0D03 #define GL_PACK_SKIP_PIXELS 0x0D04 #define GL_PACK_ALIGNMENT 0x0D05 #define GL_MAX_TEXTURE_SIZE 0x0D33 #define GL_MAX_VIEWPORT_DIMS 0x0D3A #define GL_SUBPIXEL_BITS 0x0D50 #define GL_TEXTURE_1D 0x0DE0 #define GL_TEXTURE_2D 0x0DE1 #define GL_TEXTURE_WIDTH 0x1000 #define GL_TEXTURE_HEIGHT 0x1001 #define GL_TEXTURE_BORDER_COLOR 0x1004 #define GL_DONT_CARE 0x1100 #define GL_FASTEST 0x1101 #define GL_NICEST 0x1102 #define GL_BYTE 0x1400 #define GL_UNSIGNED_BYTE 0x1401 #define GL_SHORT 0x1402 #define GL_UNSIGNED_SHORT 0x1403 #define GL_INT 0x1404 #define GL_UNSIGNED_INT 0x1405 #define GL_FLOAT 0x1406 #define GL_CLEAR 0x1500 #define GL_AND 0x1501 #define GL_AND_REVERSE 0x1502 #define GL_COPY 0x1503 #define GL_AND_INVERTED 0x1504 #define GL_NOOP 0x1505 #define GL_XOR 0x1506 #define GL_OR 0x1507 #define GL_NOR 0x1508 #define GL_EQUIV 0x1509 #define GL_INVERT 0x150A #define GL_OR_REVERSE 0x150B #define GL_COPY_INVERTED 0x150C #define GL_OR_INVERTED 0x150D #define GL_NAND 0x150E #define GL_SET 0x150F #define GL_TEXTURE 0x1702 #define GL_COLOR 0x1800 #define GL_DEPTH 0x1801 #define GL_STENCIL 0x1802 #define GL_STENCIL_INDEX 0x1901 #define GL_DEPTH_COMPONENT 0x1902 #define GL_RED 0x1903 #define GL_GREEN 0x1904 #define GL_BLUE 0x1905 #define GL_ALPHA 0x1906 #define GL_RGB 0x1907 #define GL_RGBA 0x1908 #define GL_POINT 0x1B00 #define GL_LINE 0x1B01 #define GL_FILL 0x1B02 #define GL_KEEP 0x1E00 #define GL_REPLACE 0x1E01 #define GL_INCR 0x1E02 #define GL_DECR 0x1E03 #define GL_VENDOR 0x1F00 #define GL_RENDERER 0x1F01 #define GL_VERSION 0x1F02 #define GL_EXTENSIONS 0x1F03 #define GL_NEAREST 0x2600 #define GL_LINEAR 0x2601 #define GL_NEAREST_MIPMAP_NEAREST 0x2700 #define GL_LINEAR_MIPMAP_NEAREST 0x2701 #define GL_NEAREST_MIPMAP_LINEAR 0x2702 #define GL_LINEAR_MIPMAP_LINEAR 0x2703 #define GL_TEXTURE_MAG_FILTER 0x2800 #define GL_TEXTURE_MIN_FILTER 0x2801 #define GL_TEXTURE_WRAP_S 0x2802 #define GL_TEXTURE_WRAP_T 0x2803 #define GL_REPEAT 0x2901 #define GL_COLOR_LOGIC_OP 0x0BF2 #define GL_POLYGON_OFFSET_UNITS 0x2A00 #define GL_POLYGON_OFFSET_POINT 0x2A01 #define GL_POLYGON_OFFSET_LINE 0x2A02 #define GL_POLYGON_OFFSET_FILL 0x8037 #define GL_POLYGON_OFFSET_FACTOR 0x8038 #define GL_TEXTURE_BINDING_1D 0x8068 #define GL_TEXTURE_BINDING_2D 0x8069 #define GL_TEXTURE_INTERNAL_FORMAT 0x1003 #define GL_TEXTURE_RED_SIZE 0x805C #define GL_TEXTURE_GREEN_SIZE 0x805D #define GL_TEXTURE_BLUE_SIZE 0x805E #define GL_TEXTURE_ALPHA_SIZE 0x805F #define GL_DOUBLE 0x140A #define GL_PROXY_TEXTURE_1D 0x8063 #define GL_PROXY_TEXTURE_2D 0x8064 #define GL_R3_G3_B2 0x2A10 #define GL_RGB4 0x804F #define GL_RGB5 0x8050 #define GL_RGB8 0x8051 #define GL_RGB10 0x8052 #define GL_RGB12 0x8053 #define GL_RGB16 0x8054 #define GL_RGBA2 0x8055 #define GL_RGBA4 0x8056 #define GL_RGB5_A1 0x8057 #define GL_RGBA8 0x8058 #define GL_RGB10_A2 0x8059 #define GL_RGBA12 0x805A #define GL_RGBA16 0x805B #define GL_UNSIGNED_BYTE_3_3_2 0x8032 #define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 #define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 #define GL_UNSIGNED_INT_8_8_8_8 0x8035 #define GL_UNSIGNED_INT_10_10_10_2 0x8036 #define GL_TEXTURE_BINDING_3D 0x806A #define GL_PACK_SKIP_IMAGES 0x806B #define GL_PACK_IMAGE_HEIGHT 0x806C #define GL_UNPACK_SKIP_IMAGES 0x806D #define GL_UNPACK_IMAGE_HEIGHT 0x806E #define GL_TEXTURE_3D 0x806F #define GL_PROXY_TEXTURE_3D 0x8070 #define GL_TEXTURE_DEPTH 0x8071 #define GL_TEXTURE_WRAP_R 0x8072 #define GL_MAX_3D_TEXTURE_SIZE 0x8073 #define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 #define GL_UNSIGNED_SHORT_5_6_5 0x8363 #define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 #define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 #define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 #define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 #define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 #define GL_BGR 0x80E0 #define GL_BGRA 0x80E1 #define GL_MAX_ELEMENTS_VERTICES 0x80E8 #define GL_MAX_ELEMENTS_INDICES 0x80E9 #define GL_CLAMP_TO_EDGE 0x812F #define GL_TEXTURE_MIN_LOD 0x813A #define GL_TEXTURE_MAX_LOD 0x813B #define GL_TEXTURE_BASE_LEVEL 0x813C #define GL_TEXTURE_MAX_LEVEL 0x813D #define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 #define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 #define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 #define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 #define GL_ALIASED_LINE_WIDTH_RANGE 0x846E #define GL_TEXTURE0 0x84C0 #define GL_TEXTURE1 0x84C1 #define GL_TEXTURE2 0x84C2 #define GL_TEXTURE3 0x84C3 #define GL_TEXTURE4 0x84C4 #define GL_TEXTURE5 0x84C5 #define GL_TEXTURE6 0x84C6 #define GL_TEXTURE7 0x84C7 #define GL_TEXTURE8 0x84C8 #define GL_TEXTURE9 0x84C9 #define GL_TEXTURE10 0x84CA #define GL_TEXTURE11 0x84CB #define GL_TEXTURE12 0x84CC #define GL_TEXTURE13 0x84CD #define GL_TEXTURE14 0x84CE #define GL_TEXTURE15 0x84CF #define GL_TEXTURE16 0x84D0 #define GL_TEXTURE17 0x84D1 #define GL_TEXTURE18 0x84D2 #define GL_TEXTURE19 0x84D3 #define GL_TEXTURE20 0x84D4 #define GL_TEXTURE21 0x84D5 #define GL_TEXTURE22 0x84D6 #define GL_TEXTURE23 0x84D7 #define GL_TEXTURE24 0x84D8 #define GL_TEXTURE25 0x84D9 #define GL_TEXTURE26 0x84DA #define GL_TEXTURE27 0x84DB #define GL_TEXTURE28 0x84DC #define GL_TEXTURE29 0x84DD #define GL_TEXTURE30 0x84DE #define GL_TEXTURE31 0x84DF #define GL_ACTIVE_TEXTURE 0x84E0 #define GL_MULTISAMPLE 0x809D #define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E #define GL_SAMPLE_ALPHA_TO_ONE 0x809F #define GL_SAMPLE_COVERAGE 0x80A0 #define GL_SAMPLE_BUFFERS 0x80A8 #define GL_SAMPLES 0x80A9 #define GL_SAMPLE_COVERAGE_VALUE 0x80AA #define GL_SAMPLE_COVERAGE_INVERT 0x80AB #define GL_TEXTURE_CUBE_MAP 0x8513 #define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A #define GL_PROXY_TEXTURE_CUBE_MAP 0x851B #define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C #define GL_COMPRESSED_RGB 0x84ED #define GL_COMPRESSED_RGBA 0x84EE #define GL_TEXTURE_COMPRESSION_HINT 0x84EF #define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 #define GL_TEXTURE_COMPRESSED 0x86A1 #define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 #define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 #define GL_CLAMP_TO_BORDER 0x812D #define GL_BLEND_DST_RGB 0x80C8 #define GL_BLEND_SRC_RGB 0x80C9 #define GL_BLEND_DST_ALPHA 0x80CA #define GL_BLEND_SRC_ALPHA 0x80CB #define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 #define GL_DEPTH_COMPONENT16 0x81A5 #define GL_DEPTH_COMPONENT24 0x81A6 #define GL_DEPTH_COMPONENT32 0x81A7 #define GL_MIRRORED_REPEAT 0x8370 #define GL_MAX_TEXTURE_LOD_BIAS 0x84FD #define GL_TEXTURE_LOD_BIAS 0x8501 #define GL_INCR_WRAP 0x8507 #define GL_DECR_WRAP 0x8508 #define GL_TEXTURE_DEPTH_SIZE 0x884A #define GL_TEXTURE_COMPARE_MODE 0x884C #define GL_TEXTURE_COMPARE_FUNC 0x884D #define GL_BLEND_COLOR 0x8005 #define GL_BLEND_EQUATION 0x8009 #define GL_CONSTANT_COLOR 0x8001 #define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 #define GL_CONSTANT_ALPHA 0x8003 #define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 #define GL_FUNC_ADD 0x8006 #define GL_FUNC_REVERSE_SUBTRACT 0x800B #define GL_FUNC_SUBTRACT 0x800A #define GL_MIN 0x8007 #define GL_MAX 0x8008 #define GL_BUFFER_SIZE 0x8764 #define GL_BUFFER_USAGE 0x8765 #define GL_QUERY_COUNTER_BITS 0x8864 #define GL_CURRENT_QUERY 0x8865 #define GL_QUERY_RESULT 0x8866 #define GL_QUERY_RESULT_AVAILABLE 0x8867 #define GL_ARRAY_BUFFER 0x8892 #define GL_ELEMENT_ARRAY_BUFFER 0x8893 #define GL_ARRAY_BUFFER_BINDING 0x8894 #define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 #define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F #define GL_READ_ONLY 0x88B8 #define GL_WRITE_ONLY 0x88B9 #define GL_READ_WRITE 0x88BA #define GL_BUFFER_ACCESS 0x88BB #define GL_BUFFER_MAPPED 0x88BC #define GL_BUFFER_MAP_POINTER 0x88BD #define GL_STREAM_DRAW 0x88E0 #define GL_STREAM_READ 0x88E1 #define GL_STREAM_COPY 0x88E2 #define GL_STATIC_DRAW 0x88E4 #define GL_STATIC_READ 0x88E5 #define GL_STATIC_COPY 0x88E6 #define GL_DYNAMIC_DRAW 0x88E8 #define GL_DYNAMIC_READ 0x88E9 #define GL_DYNAMIC_COPY 0x88EA #define GL_SAMPLES_PASSED 0x8914 #define GL_SRC1_ALPHA 0x8589 #define GL_BLEND_EQUATION_RGB 0x8009 #define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 #define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 #define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 #define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 #define GL_CURRENT_VERTEX_ATTRIB 0x8626 #define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 #define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 #define GL_STENCIL_BACK_FUNC 0x8800 #define GL_STENCIL_BACK_FAIL 0x8801 #define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 #define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 #define GL_MAX_DRAW_BUFFERS 0x8824 #define GL_DRAW_BUFFER0 0x8825 #define GL_DRAW_BUFFER1 0x8826 #define GL_DRAW_BUFFER2 0x8827 #define GL_DRAW_BUFFER3 0x8828 #define GL_DRAW_BUFFER4 0x8829 #define GL_DRAW_BUFFER5 0x882A #define GL_DRAW_BUFFER6 0x882B #define GL_DRAW_BUFFER7 0x882C #define GL_DRAW_BUFFER8 0x882D #define GL_DRAW_BUFFER9 0x882E #define GL_DRAW_BUFFER10 0x882F #define GL_DRAW_BUFFER11 0x8830 #define GL_DRAW_BUFFER12 0x8831 #define GL_DRAW_BUFFER13 0x8832 #define GL_DRAW_BUFFER14 0x8833 #define GL_DRAW_BUFFER15 0x8834 #define GL_BLEND_EQUATION_ALPHA 0x883D #define GL_MAX_VERTEX_ATTRIBS 0x8869 #define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A #define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 #define GL_FRAGMENT_SHADER 0x8B30 #define GL_VERTEX_SHADER 0x8B31 #define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 #define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A #define GL_MAX_VARYING_FLOATS 0x8B4B #define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C #define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D #define GL_SHADER_TYPE 0x8B4F #define GL_FLOAT_VEC2 0x8B50 #define GL_FLOAT_VEC3 0x8B51 #define GL_FLOAT_VEC4 0x8B52 #define GL_INT_VEC2 0x8B53 #define GL_INT_VEC3 0x8B54 #define GL_INT_VEC4 0x8B55 #define GL_BOOL 0x8B56 #define GL_BOOL_VEC2 0x8B57 #define GL_BOOL_VEC3 0x8B58 #define GL_BOOL_VEC4 0x8B59 #define GL_FLOAT_MAT2 0x8B5A #define GL_FLOAT_MAT3 0x8B5B #define GL_FLOAT_MAT4 0x8B5C #define GL_SAMPLER_1D 0x8B5D #define GL_SAMPLER_2D 0x8B5E #define GL_SAMPLER_3D 0x8B5F #define GL_SAMPLER_CUBE 0x8B60 #define GL_SAMPLER_1D_SHADOW 0x8B61 #define GL_SAMPLER_2D_SHADOW 0x8B62 #define GL_DELETE_STATUS 0x8B80 #define GL_COMPILE_STATUS 0x8B81 #define GL_LINK_STATUS 0x8B82 #define GL_VALIDATE_STATUS 0x8B83 #define GL_INFO_LOG_LENGTH 0x8B84 #define GL_ATTACHED_SHADERS 0x8B85 #define GL_ACTIVE_UNIFORMS 0x8B86 #define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 #define GL_SHADER_SOURCE_LENGTH 0x8B88 #define GL_ACTIVE_ATTRIBUTES 0x8B89 #define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A #define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B #define GL_SHADING_LANGUAGE_VERSION 0x8B8C #define GL_CURRENT_PROGRAM 0x8B8D #define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 #define GL_LOWER_LEFT 0x8CA1 #define GL_UPPER_LEFT 0x8CA2 #define GL_STENCIL_BACK_REF 0x8CA3 #define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 #define GL_STENCIL_BACK_WRITEMASK 0x8CA5 #define GL_PIXEL_PACK_BUFFER 0x88EB #define GL_PIXEL_UNPACK_BUFFER 0x88EC #define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED #define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF #define GL_FLOAT_MAT2x3 0x8B65 #define GL_FLOAT_MAT2x4 0x8B66 #define GL_FLOAT_MAT3x2 0x8B67 #define GL_FLOAT_MAT3x4 0x8B68 #define GL_FLOAT_MAT4x2 0x8B69 #define GL_FLOAT_MAT4x3 0x8B6A #define GL_SRGB 0x8C40 #define GL_SRGB8 0x8C41 #define GL_SRGB_ALPHA 0x8C42 #define GL_SRGB8_ALPHA8 0x8C43 #define GL_COMPRESSED_SRGB 0x8C48 #define GL_COMPRESSED_SRGB_ALPHA 0x8C49 #define GL_COMPARE_REF_TO_TEXTURE 0x884E #define GL_CLIP_DISTANCE0 0x3000 #define GL_CLIP_DISTANCE1 0x3001 #define GL_CLIP_DISTANCE2 0x3002 #define GL_CLIP_DISTANCE3 0x3003 #define GL_CLIP_DISTANCE4 0x3004 #define GL_CLIP_DISTANCE5 0x3005 #define GL_CLIP_DISTANCE6 0x3006 #define GL_CLIP_DISTANCE7 0x3007 #define GL_MAX_CLIP_DISTANCES 0x0D32 #define GL_MAJOR_VERSION 0x821B #define GL_MINOR_VERSION 0x821C #define GL_NUM_EXTENSIONS 0x821D #define GL_CONTEXT_FLAGS 0x821E #define GL_COMPRESSED_RED 0x8225 #define GL_COMPRESSED_RG 0x8226 #define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001 #define GL_RGBA32F 0x8814 #define GL_RGB32F 0x8815 #define GL_RGBA16F 0x881A #define GL_RGB16F 0x881B #define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD #define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF #define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 #define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 #define GL_CLAMP_READ_COLOR 0x891C #define GL_FIXED_ONLY 0x891D #define GL_MAX_VARYING_COMPONENTS 0x8B4B #define GL_TEXTURE_1D_ARRAY 0x8C18 #define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 #define GL_TEXTURE_2D_ARRAY 0x8C1A #define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B #define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C #define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D #define GL_R11F_G11F_B10F 0x8C3A #define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B #define GL_RGB9_E5 0x8C3D #define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E #define GL_TEXTURE_SHARED_SIZE 0x8C3F #define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 #define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 #define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 #define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 #define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 #define GL_PRIMITIVES_GENERATED 0x8C87 #define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 #define GL_RASTERIZER_DISCARD 0x8C89 #define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B #define GL_INTERLEAVED_ATTRIBS 0x8C8C #define GL_SEPARATE_ATTRIBS 0x8C8D #define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E #define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F #define GL_RGBA32UI 0x8D70 #define GL_RGB32UI 0x8D71 #define GL_RGBA16UI 0x8D76 #define GL_RGB16UI 0x8D77 #define GL_RGBA8UI 0x8D7C #define GL_RGB8UI 0x8D7D #define GL_RGBA32I 0x8D82 #define GL_RGB32I 0x8D83 #define GL_RGBA16I 0x8D88 #define GL_RGB16I 0x8D89 #define GL_RGBA8I 0x8D8E #define GL_RGB8I 0x8D8F #define GL_RED_INTEGER 0x8D94 #define GL_GREEN_INTEGER 0x8D95 #define GL_BLUE_INTEGER 0x8D96 #define GL_RGB_INTEGER 0x8D98 #define GL_RGBA_INTEGER 0x8D99 #define GL_BGR_INTEGER 0x8D9A #define GL_BGRA_INTEGER 0x8D9B #define GL_SAMPLER_1D_ARRAY 0x8DC0 #define GL_SAMPLER_2D_ARRAY 0x8DC1 #define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 #define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 #define GL_SAMPLER_CUBE_SHADOW 0x8DC5 #define GL_UNSIGNED_INT_VEC2 0x8DC6 #define GL_UNSIGNED_INT_VEC3 0x8DC7 #define GL_UNSIGNED_INT_VEC4 0x8DC8 #define GL_INT_SAMPLER_1D 0x8DC9 #define GL_INT_SAMPLER_2D 0x8DCA #define GL_INT_SAMPLER_3D 0x8DCB #define GL_INT_SAMPLER_CUBE 0x8DCC #define GL_INT_SAMPLER_1D_ARRAY 0x8DCE #define GL_INT_SAMPLER_2D_ARRAY 0x8DCF #define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 #define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 #define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 #define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 #define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 #define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 #define GL_QUERY_WAIT 0x8E13 #define GL_QUERY_NO_WAIT 0x8E14 #define GL_QUERY_BY_REGION_WAIT 0x8E15 #define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 #define GL_BUFFER_ACCESS_FLAGS 0x911F #define GL_BUFFER_MAP_LENGTH 0x9120 #define GL_BUFFER_MAP_OFFSET 0x9121 #define GL_DEPTH_COMPONENT32F 0x8CAC #define GL_DEPTH32F_STENCIL8 0x8CAD #define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD #define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 #define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 #define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 #define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 #define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 #define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 #define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 #define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 #define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 #define GL_FRAMEBUFFER_DEFAULT 0x8218 #define GL_FRAMEBUFFER_UNDEFINED 0x8219 #define GL_DEPTH_STENCIL_ATTACHMENT 0x821A #define GL_MAX_RENDERBUFFER_SIZE 0x84E8 #define GL_DEPTH_STENCIL 0x84F9 #define GL_UNSIGNED_INT_24_8 0x84FA #define GL_DEPTH24_STENCIL8 0x88F0 #define GL_TEXTURE_STENCIL_SIZE 0x88F1 #define GL_TEXTURE_RED_TYPE 0x8C10 #define GL_TEXTURE_GREEN_TYPE 0x8C11 #define GL_TEXTURE_BLUE_TYPE 0x8C12 #define GL_TEXTURE_ALPHA_TYPE 0x8C13 #define GL_TEXTURE_DEPTH_TYPE 0x8C16 #define GL_UNSIGNED_NORMALIZED 0x8C17 #define GL_FRAMEBUFFER_BINDING 0x8CA6 #define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 #define GL_RENDERBUFFER_BINDING 0x8CA7 #define GL_READ_FRAMEBUFFER 0x8CA8 #define GL_DRAW_FRAMEBUFFER 0x8CA9 #define GL_READ_FRAMEBUFFER_BINDING 0x8CAA #define GL_RENDERBUFFER_SAMPLES 0x8CAB #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 #define GL_FRAMEBUFFER_COMPLETE 0x8CD5 #define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 #define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 #define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB #define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC #define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD #define GL_MAX_COLOR_ATTACHMENTS 0x8CDF #define GL_COLOR_ATTACHMENT0 0x8CE0 #define GL_COLOR_ATTACHMENT1 0x8CE1 #define GL_COLOR_ATTACHMENT2 0x8CE2 #define GL_COLOR_ATTACHMENT3 0x8CE3 #define GL_COLOR_ATTACHMENT4 0x8CE4 #define GL_COLOR_ATTACHMENT5 0x8CE5 #define GL_COLOR_ATTACHMENT6 0x8CE6 #define GL_COLOR_ATTACHMENT7 0x8CE7 #define GL_COLOR_ATTACHMENT8 0x8CE8 #define GL_COLOR_ATTACHMENT9 0x8CE9 #define GL_COLOR_ATTACHMENT10 0x8CEA #define GL_COLOR_ATTACHMENT11 0x8CEB #define GL_COLOR_ATTACHMENT12 0x8CEC #define GL_COLOR_ATTACHMENT13 0x8CED #define GL_COLOR_ATTACHMENT14 0x8CEE #define GL_COLOR_ATTACHMENT15 0x8CEF #define GL_COLOR_ATTACHMENT16 0x8CF0 #define GL_COLOR_ATTACHMENT17 0x8CF1 #define GL_COLOR_ATTACHMENT18 0x8CF2 #define GL_COLOR_ATTACHMENT19 0x8CF3 #define GL_COLOR_ATTACHMENT20 0x8CF4 #define GL_COLOR_ATTACHMENT21 0x8CF5 #define GL_COLOR_ATTACHMENT22 0x8CF6 #define GL_COLOR_ATTACHMENT23 0x8CF7 #define GL_COLOR_ATTACHMENT24 0x8CF8 #define GL_COLOR_ATTACHMENT25 0x8CF9 #define GL_COLOR_ATTACHMENT26 0x8CFA #define GL_COLOR_ATTACHMENT27 0x8CFB #define GL_COLOR_ATTACHMENT28 0x8CFC #define GL_COLOR_ATTACHMENT29 0x8CFD #define GL_COLOR_ATTACHMENT30 0x8CFE #define GL_COLOR_ATTACHMENT31 0x8CFF #define GL_DEPTH_ATTACHMENT 0x8D00 #define GL_STENCIL_ATTACHMENT 0x8D20 #define GL_FRAMEBUFFER 0x8D40 #define GL_RENDERBUFFER 0x8D41 #define GL_RENDERBUFFER_WIDTH 0x8D42 #define GL_RENDERBUFFER_HEIGHT 0x8D43 #define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 #define GL_STENCIL_INDEX1 0x8D46 #define GL_STENCIL_INDEX4 0x8D47 #define GL_STENCIL_INDEX8 0x8D48 #define GL_STENCIL_INDEX16 0x8D49 #define GL_RENDERBUFFER_RED_SIZE 0x8D50 #define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 #define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 #define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 #define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 #define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 #define GL_MAX_SAMPLES 0x8D57 #define GL_FRAMEBUFFER_SRGB 0x8DB9 #define GL_HALF_FLOAT 0x140B #define GL_MAP_READ_BIT 0x0001 #define GL_MAP_WRITE_BIT 0x0002 #define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 #define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 #define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 #define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 #define GL_COMPRESSED_RED_RGTC1 0x8DBB #define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC #define GL_COMPRESSED_RG_RGTC2 0x8DBD #define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE #define GL_RG 0x8227 #define GL_RG_INTEGER 0x8228 #define GL_R8 0x8229 #define GL_R16 0x822A #define GL_RG8 0x822B #define GL_RG16 0x822C #define GL_R16F 0x822D #define GL_R32F 0x822E #define GL_RG16F 0x822F #define GL_RG32F 0x8230 #define GL_R8I 0x8231 #define GL_R8UI 0x8232 #define GL_R16I 0x8233 #define GL_R16UI 0x8234 #define GL_R32I 0x8235 #define GL_R32UI 0x8236 #define GL_RG8I 0x8237 #define GL_RG8UI 0x8238 #define GL_RG16I 0x8239 #define GL_RG16UI 0x823A #define GL_RG32I 0x823B #define GL_RG32UI 0x823C #define GL_VERTEX_ARRAY_BINDING 0x85B5 #define GL_SAMPLER_2D_RECT 0x8B63 #define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 #define GL_SAMPLER_BUFFER 0x8DC2 #define GL_INT_SAMPLER_2D_RECT 0x8DCD #define GL_INT_SAMPLER_BUFFER 0x8DD0 #define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 #define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 #define GL_TEXTURE_BUFFER 0x8C2A #define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B #define GL_TEXTURE_BINDING_BUFFER 0x8C2C #define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D #define GL_TEXTURE_RECTANGLE 0x84F5 #define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 #define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 #define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 #define GL_R8_SNORM 0x8F94 #define GL_RG8_SNORM 0x8F95 #define GL_RGB8_SNORM 0x8F96 #define GL_RGBA8_SNORM 0x8F97 #define GL_R16_SNORM 0x8F98 #define GL_RG16_SNORM 0x8F99 #define GL_RGB16_SNORM 0x8F9A #define GL_RGBA16_SNORM 0x8F9B #define GL_SIGNED_NORMALIZED 0x8F9C #define GL_PRIMITIVE_RESTART 0x8F9D #define GL_PRIMITIVE_RESTART_INDEX 0x8F9E #define GL_COPY_READ_BUFFER 0x8F36 #define GL_COPY_WRITE_BUFFER 0x8F37 #define GL_UNIFORM_BUFFER 0x8A11 #define GL_UNIFORM_BUFFER_BINDING 0x8A28 #define GL_UNIFORM_BUFFER_START 0x8A29 #define GL_UNIFORM_BUFFER_SIZE 0x8A2A #define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B #define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C #define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D #define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E #define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F #define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 #define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 #define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 #define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 #define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 #define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 #define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 #define GL_UNIFORM_TYPE 0x8A37 #define GL_UNIFORM_SIZE 0x8A38 #define GL_UNIFORM_NAME_LENGTH 0x8A39 #define GL_UNIFORM_BLOCK_INDEX 0x8A3A #define GL_UNIFORM_OFFSET 0x8A3B #define GL_UNIFORM_ARRAY_STRIDE 0x8A3C #define GL_UNIFORM_MATRIX_STRIDE 0x8A3D #define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E #define GL_UNIFORM_BLOCK_BINDING 0x8A3F #define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 #define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 #define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 #define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 #define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 #define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 #define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 #define GL_INVALID_INDEX 0xFFFFFFFF #define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 #define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 #define GL_LINES_ADJACENCY 0x000A #define GL_LINE_STRIP_ADJACENCY 0x000B #define GL_TRIANGLES_ADJACENCY 0x000C #define GL_TRIANGLE_STRIP_ADJACENCY 0x000D #define GL_PROGRAM_POINT_SIZE 0x8642 #define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 #define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 #define GL_GEOMETRY_SHADER 0x8DD9 #define GL_GEOMETRY_VERTICES_OUT 0x8916 #define GL_GEOMETRY_INPUT_TYPE 0x8917 #define GL_GEOMETRY_OUTPUT_TYPE 0x8918 #define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF #define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 #define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 #define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 #define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 #define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 #define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 #define GL_CONTEXT_PROFILE_MASK 0x9126 #define GL_DEPTH_CLAMP 0x864F #define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C #define GL_FIRST_VERTEX_CONVENTION 0x8E4D #define GL_LAST_VERTEX_CONVENTION 0x8E4E #define GL_PROVOKING_VERTEX 0x8E4F #define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F #define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 #define GL_OBJECT_TYPE 0x9112 #define GL_SYNC_CONDITION 0x9113 #define GL_SYNC_STATUS 0x9114 #define GL_SYNC_FLAGS 0x9115 #define GL_SYNC_FENCE 0x9116 #define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 #define GL_UNSIGNALED 0x9118 #define GL_SIGNALED 0x9119 #define GL_ALREADY_SIGNALED 0x911A #define GL_TIMEOUT_EXPIRED 0x911B #define GL_CONDITION_SATISFIED 0x911C #define GL_WAIT_FAILED 0x911D #define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFF #define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 #define GL_SAMPLE_POSITION 0x8E50 #define GL_SAMPLE_MASK 0x8E51 #define GL_SAMPLE_MASK_VALUE 0x8E52 #define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 #define GL_TEXTURE_2D_MULTISAMPLE 0x9100 #define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 #define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 #define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 #define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 #define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 #define GL_TEXTURE_SAMPLES 0x9106 #define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 #define GL_SAMPLER_2D_MULTISAMPLE 0x9108 #define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 #define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A #define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B #define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C #define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D #define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E #define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F #define GL_MAX_INTEGER_SAMPLES 0x9110 #define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE #define GL_SRC1_COLOR 0x88F9 #define GL_ONE_MINUS_SRC1_COLOR 0x88FA #define GL_ONE_MINUS_SRC1_ALPHA 0x88FB #define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC #define GL_ANY_SAMPLES_PASSED 0x8C2F #define GL_SAMPLER_BINDING 0x8919 #define GL_RGB10_A2UI 0x906F #define GL_TEXTURE_SWIZZLE_R 0x8E42 #define GL_TEXTURE_SWIZZLE_G 0x8E43 #define GL_TEXTURE_SWIZZLE_B 0x8E44 #define GL_TEXTURE_SWIZZLE_A 0x8E45 #define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 #define GL_TIME_ELAPSED 0x88BF #define GL_TIMESTAMP 0x8E28 #define GL_INT_2_10_10_10_REV 0x8D9F #define GL_SAMPLE_SHADING 0x8C36 #define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 #define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E #define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F #define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 #define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A #define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B #define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C #define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D #define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E #define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F #define GL_DRAW_INDIRECT_BUFFER 0x8F3F #define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 #define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F #define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A #define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B #define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C #define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D #define GL_MAX_VERTEX_STREAMS 0x8E71 #define GL_DOUBLE_VEC2 0x8FFC #define GL_DOUBLE_VEC3 0x8FFD #define GL_DOUBLE_VEC4 0x8FFE #define GL_DOUBLE_MAT2 0x8F46 #define GL_DOUBLE_MAT3 0x8F47 #define GL_DOUBLE_MAT4 0x8F48 #define GL_DOUBLE_MAT2x3 0x8F49 #define GL_DOUBLE_MAT2x4 0x8F4A #define GL_DOUBLE_MAT3x2 0x8F4B #define GL_DOUBLE_MAT3x4 0x8F4C #define GL_DOUBLE_MAT4x2 0x8F4D #define GL_DOUBLE_MAT4x3 0x8F4E #define GL_ACTIVE_SUBROUTINES 0x8DE5 #define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 #define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 #define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 #define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 #define GL_MAX_SUBROUTINES 0x8DE7 #define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 #define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A #define GL_COMPATIBLE_SUBROUTINES 0x8E4B #define GL_PATCHES 0x000E #define GL_PATCH_VERTICES 0x8E72 #define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73 #define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74 #define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75 #define GL_TESS_GEN_MODE 0x8E76 #define GL_TESS_GEN_SPACING 0x8E77 #define GL_TESS_GEN_VERTEX_ORDER 0x8E78 #define GL_TESS_GEN_POINT_MODE 0x8E79 #define GL_ISOLINES 0x8E7A #define GL_QUADS 0x0007 #define GL_FRACTIONAL_ODD 0x8E7B #define GL_FRACTIONAL_EVEN 0x8E7C #define GL_MAX_PATCH_VERTICES 0x8E7D #define GL_MAX_TESS_GEN_LEVEL 0x8E7E #define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F #define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80 #define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81 #define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82 #define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83 #define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84 #define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85 #define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86 #define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 #define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A #define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C #define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D #define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E #define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F #define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 #define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 #define GL_TESS_EVALUATION_SHADER 0x8E87 #define GL_TESS_CONTROL_SHADER 0x8E88 #define GL_TRANSFORM_FEEDBACK 0x8E22 #define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23 #define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24 #define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 #define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 #ifndef GL_VERSION_1_0 #define GL_VERSION_1_0 1 GLAPI int GLAD_GL_VERSION_1_0; typedef void (APIENTRYP PFNGLCULLFACEPROC)(GLenum mode); GLAPI PFNGLCULLFACEPROC glad_glCullFace; #define glCullFace glad_glCullFace typedef void (APIENTRYP PFNGLFRONTFACEPROC)(GLenum mode); GLAPI PFNGLFRONTFACEPROC glad_glFrontFace; #define glFrontFace glad_glFrontFace typedef void (APIENTRYP PFNGLHINTPROC)(GLenum target, GLenum mode); GLAPI PFNGLHINTPROC glad_glHint; #define glHint glad_glHint typedef void (APIENTRYP PFNGLLINEWIDTHPROC)(GLfloat width); GLAPI PFNGLLINEWIDTHPROC glad_glLineWidth; #define glLineWidth glad_glLineWidth typedef void (APIENTRYP PFNGLPOINTSIZEPROC)(GLfloat size); GLAPI PFNGLPOINTSIZEPROC glad_glPointSize; #define glPointSize glad_glPointSize typedef void (APIENTRYP PFNGLPOLYGONMODEPROC)(GLenum face, GLenum mode); GLAPI PFNGLPOLYGONMODEPROC glad_glPolygonMode; #define glPolygonMode glad_glPolygonMode typedef void (APIENTRYP PFNGLSCISSORPROC)(GLint x, GLint y, GLsizei width, GLsizei height); GLAPI PFNGLSCISSORPROC glad_glScissor; #define glScissor glad_glScissor typedef void (APIENTRYP PFNGLTEXPARAMETERFPROC)(GLenum target, GLenum pname, GLfloat param); GLAPI PFNGLTEXPARAMETERFPROC glad_glTexParameterf; #define glTexParameterf glad_glTexParameterf typedef void (APIENTRYP PFNGLTEXPARAMETERFVPROC)(GLenum target, GLenum pname, const GLfloat *params); GLAPI PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv; #define glTexParameterfv glad_glTexParameterfv typedef void (APIENTRYP PFNGLTEXPARAMETERIPROC)(GLenum target, GLenum pname, GLint param); GLAPI PFNGLTEXPARAMETERIPROC glad_glTexParameteri; #define glTexParameteri glad_glTexParameteri typedef void (APIENTRYP PFNGLTEXPARAMETERIVPROC)(GLenum target, GLenum pname, const GLint *params); GLAPI PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv; #define glTexParameteriv glad_glTexParameteriv typedef void (APIENTRYP PFNGLTEXIMAGE1DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI PFNGLTEXIMAGE1DPROC glad_glTexImage1D; #define glTexImage1D glad_glTexImage1D typedef void (APIENTRYP PFNGLTEXIMAGE2DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI PFNGLTEXIMAGE2DPROC glad_glTexImage2D; #define glTexImage2D glad_glTexImage2D typedef void (APIENTRYP PFNGLDRAWBUFFERPROC)(GLenum buf); GLAPI PFNGLDRAWBUFFERPROC glad_glDrawBuffer; #define glDrawBuffer glad_glDrawBuffer typedef void (APIENTRYP PFNGLCLEARPROC)(GLbitfield mask); GLAPI PFNGLCLEARPROC glad_glClear; #define glClear glad_glClear typedef void (APIENTRYP PFNGLCLEARCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); GLAPI PFNGLCLEARCOLORPROC glad_glClearColor; #define glClearColor glad_glClearColor typedef void (APIENTRYP PFNGLCLEARSTENCILPROC)(GLint s); GLAPI PFNGLCLEARSTENCILPROC glad_glClearStencil; #define glClearStencil glad_glClearStencil typedef void (APIENTRYP PFNGLCLEARDEPTHPROC)(GLdouble depth); GLAPI PFNGLCLEARDEPTHPROC glad_glClearDepth; #define glClearDepth glad_glClearDepth typedef void (APIENTRYP PFNGLSTENCILMASKPROC)(GLuint mask); GLAPI PFNGLSTENCILMASKPROC glad_glStencilMask; #define glStencilMask glad_glStencilMask typedef void (APIENTRYP PFNGLCOLORMASKPROC)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); GLAPI PFNGLCOLORMASKPROC glad_glColorMask; #define glColorMask glad_glColorMask typedef void (APIENTRYP PFNGLDEPTHMASKPROC)(GLboolean flag); GLAPI PFNGLDEPTHMASKPROC glad_glDepthMask; #define glDepthMask glad_glDepthMask typedef void (APIENTRYP PFNGLDISABLEPROC)(GLenum cap); GLAPI PFNGLDISABLEPROC glad_glDisable; #define glDisable glad_glDisable typedef void (APIENTRYP PFNGLENABLEPROC)(GLenum cap); GLAPI PFNGLENABLEPROC glad_glEnable; #define glEnable glad_glEnable typedef void (APIENTRYP PFNGLFINISHPROC)(void); GLAPI PFNGLFINISHPROC glad_glFinish; #define glFinish glad_glFinish typedef void (APIENTRYP PFNGLFLUSHPROC)(void); GLAPI PFNGLFLUSHPROC glad_glFlush; #define glFlush glad_glFlush typedef void (APIENTRYP PFNGLBLENDFUNCPROC)(GLenum sfactor, GLenum dfactor); GLAPI PFNGLBLENDFUNCPROC glad_glBlendFunc; #define glBlendFunc glad_glBlendFunc typedef void (APIENTRYP PFNGLLOGICOPPROC)(GLenum opcode); GLAPI PFNGLLOGICOPPROC glad_glLogicOp; #define glLogicOp glad_glLogicOp typedef void (APIENTRYP PFNGLSTENCILFUNCPROC)(GLenum func, GLint ref, GLuint mask); GLAPI PFNGLSTENCILFUNCPROC glad_glStencilFunc; #define glStencilFunc glad_glStencilFunc typedef void (APIENTRYP PFNGLSTENCILOPPROC)(GLenum fail, GLenum zfail, GLenum zpass); GLAPI PFNGLSTENCILOPPROC glad_glStencilOp; #define glStencilOp glad_glStencilOp typedef void (APIENTRYP PFNGLDEPTHFUNCPROC)(GLenum func); GLAPI PFNGLDEPTHFUNCPROC glad_glDepthFunc; #define glDepthFunc glad_glDepthFunc typedef void (APIENTRYP PFNGLPIXELSTOREFPROC)(GLenum pname, GLfloat param); GLAPI PFNGLPIXELSTOREFPROC glad_glPixelStoref; #define glPixelStoref glad_glPixelStoref typedef void (APIENTRYP PFNGLPIXELSTOREIPROC)(GLenum pname, GLint param); GLAPI PFNGLPIXELSTOREIPROC glad_glPixelStorei; #define glPixelStorei glad_glPixelStorei typedef void (APIENTRYP PFNGLREADBUFFERPROC)(GLenum src); GLAPI PFNGLREADBUFFERPROC glad_glReadBuffer; #define glReadBuffer glad_glReadBuffer typedef void (APIENTRYP PFNGLREADPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels); GLAPI PFNGLREADPIXELSPROC glad_glReadPixels; #define glReadPixels glad_glReadPixels typedef void (APIENTRYP PFNGLGETBOOLEANVPROC)(GLenum pname, GLboolean *data); GLAPI PFNGLGETBOOLEANVPROC glad_glGetBooleanv; #define glGetBooleanv glad_glGetBooleanv typedef void (APIENTRYP PFNGLGETDOUBLEVPROC)(GLenum pname, GLdouble *data); GLAPI PFNGLGETDOUBLEVPROC glad_glGetDoublev; #define glGetDoublev glad_glGetDoublev typedef GLenum (APIENTRYP PFNGLGETERRORPROC)(void); GLAPI PFNGLGETERRORPROC glad_glGetError; #define glGetError glad_glGetError typedef void (APIENTRYP PFNGLGETFLOATVPROC)(GLenum pname, GLfloat *data); GLAPI PFNGLGETFLOATVPROC glad_glGetFloatv; #define glGetFloatv glad_glGetFloatv typedef void (APIENTRYP PFNGLGETINTEGERVPROC)(GLenum pname, GLint *data); GLAPI PFNGLGETINTEGERVPROC glad_glGetIntegerv; #define glGetIntegerv glad_glGetIntegerv typedef const GLubyte * (APIENTRYP PFNGLGETSTRINGPROC)(GLenum name); GLAPI PFNGLGETSTRINGPROC glad_glGetString; #define glGetString glad_glGetString typedef void (APIENTRYP PFNGLGETTEXIMAGEPROC)(GLenum target, GLint level, GLenum format, GLenum type, void *pixels); GLAPI PFNGLGETTEXIMAGEPROC glad_glGetTexImage; #define glGetTexImage glad_glGetTexImage typedef void (APIENTRYP PFNGLGETTEXPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat *params); GLAPI PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv; #define glGetTexParameterfv glad_glGetTexParameterfv typedef void (APIENTRYP PFNGLGETTEXPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params); GLAPI PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv; #define glGetTexParameteriv glad_glGetTexParameteriv typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERFVPROC)(GLenum target, GLint level, GLenum pname, GLfloat *params); GLAPI PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv; #define glGetTexLevelParameterfv glad_glGetTexLevelParameterfv typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERIVPROC)(GLenum target, GLint level, GLenum pname, GLint *params); GLAPI PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv; #define glGetTexLevelParameteriv glad_glGetTexLevelParameteriv typedef GLboolean (APIENTRYP PFNGLISENABLEDPROC)(GLenum cap); GLAPI PFNGLISENABLEDPROC glad_glIsEnabled; #define glIsEnabled glad_glIsEnabled typedef void (APIENTRYP PFNGLDEPTHRANGEPROC)(GLdouble n, GLdouble f); GLAPI PFNGLDEPTHRANGEPROC glad_glDepthRange; #define glDepthRange glad_glDepthRange typedef void (APIENTRYP PFNGLVIEWPORTPROC)(GLint x, GLint y, GLsizei width, GLsizei height); GLAPI PFNGLVIEWPORTPROC glad_glViewport; #define glViewport glad_glViewport #endif #ifndef GL_VERSION_1_1 #define GL_VERSION_1_1 1 GLAPI int GLAD_GL_VERSION_1_1; typedef void (APIENTRYP PFNGLDRAWARRAYSPROC)(GLenum mode, GLint first, GLsizei count); GLAPI PFNGLDRAWARRAYSPROC glad_glDrawArrays; #define glDrawArrays glad_glDrawArrays typedef void (APIENTRYP PFNGLDRAWELEMENTSPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices); GLAPI PFNGLDRAWELEMENTSPROC glad_glDrawElements; #define glDrawElements glad_glDrawElements typedef void (APIENTRYP PFNGLPOLYGONOFFSETPROC)(GLfloat factor, GLfloat units); GLAPI PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset; #define glPolygonOffset glad_glPolygonOffset typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); GLAPI PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D; #define glCopyTexImage1D glad_glCopyTexImage1D typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); GLAPI PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D; #define glCopyTexImage2D glad_glCopyTexImage2D typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); GLAPI PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D; #define glCopyTexSubImage1D glad_glCopyTexSubImage1D typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D; #define glCopyTexSubImage2D glad_glCopyTexSubImage2D typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); GLAPI PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D; #define glTexSubImage1D glad_glTexSubImage1D typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); GLAPI PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D; #define glTexSubImage2D glad_glTexSubImage2D typedef void (APIENTRYP PFNGLBINDTEXTUREPROC)(GLenum target, GLuint texture); GLAPI PFNGLBINDTEXTUREPROC glad_glBindTexture; #define glBindTexture glad_glBindTexture typedef void (APIENTRYP PFNGLDELETETEXTURESPROC)(GLsizei n, const GLuint *textures); GLAPI PFNGLDELETETEXTURESPROC glad_glDeleteTextures; #define glDeleteTextures glad_glDeleteTextures typedef void (APIENTRYP PFNGLGENTEXTURESPROC)(GLsizei n, GLuint *textures); GLAPI PFNGLGENTEXTURESPROC glad_glGenTextures; #define glGenTextures glad_glGenTextures typedef GLboolean (APIENTRYP PFNGLISTEXTUREPROC)(GLuint texture); GLAPI PFNGLISTEXTUREPROC glad_glIsTexture; #define glIsTexture glad_glIsTexture #endif #ifndef GL_VERSION_1_2 #define GL_VERSION_1_2 1 GLAPI int GLAD_GL_VERSION_1_2; typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); GLAPI PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements; #define glDrawRangeElements glad_glDrawRangeElements typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI PFNGLTEXIMAGE3DPROC glad_glTexImage3D; #define glTexImage3D glad_glTexImage3D typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); GLAPI PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D; #define glTexSubImage3D glad_glTexSubImage3D typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D; #define glCopyTexSubImage3D glad_glCopyTexSubImage3D #endif #ifndef GL_VERSION_1_3 #define GL_VERSION_1_3 1 GLAPI int GLAD_GL_VERSION_1_3; typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC)(GLenum texture); GLAPI PFNGLACTIVETEXTUREPROC glad_glActiveTexture; #define glActiveTexture glad_glActiveTexture typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC)(GLfloat value, GLboolean invert); GLAPI PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage; #define glSampleCoverage glad_glSampleCoverage typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); GLAPI PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D; #define glCompressedTexImage3D glad_glCompressedTexImage3D typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); GLAPI PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D; #define glCompressedTexImage2D glad_glCompressedTexImage2D typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); GLAPI PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D; #define glCompressedTexImage1D glad_glCompressedTexImage1D typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D; #define glCompressedTexSubImage3D glad_glCompressedTexSubImage3D typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D; #define glCompressedTexSubImage2D glad_glCompressedTexSubImage2D typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D; #define glCompressedTexSubImage1D glad_glCompressedTexSubImage1D typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC)(GLenum target, GLint level, void *img); GLAPI PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage; #define glGetCompressedTexImage glad_glGetCompressedTexImage #endif #ifndef GL_VERSION_1_4 #define GL_VERSION_1_4 1 GLAPI int GLAD_GL_VERSION_1_4; typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); GLAPI PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate; #define glBlendFuncSeparate glad_glBlendFuncSeparate typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC)(GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); GLAPI PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays; #define glMultiDrawArrays glad_glMultiDrawArrays typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC)(GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); GLAPI PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements; #define glMultiDrawElements glad_glMultiDrawElements typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC)(GLenum pname, GLfloat param); GLAPI PFNGLPOINTPARAMETERFPROC glad_glPointParameterf; #define glPointParameterf glad_glPointParameterf typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC)(GLenum pname, const GLfloat *params); GLAPI PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv; #define glPointParameterfv glad_glPointParameterfv typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC)(GLenum pname, GLint param); GLAPI PFNGLPOINTPARAMETERIPROC glad_glPointParameteri; #define glPointParameteri glad_glPointParameteri typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC)(GLenum pname, const GLint *params); GLAPI PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv; #define glPointParameteriv glad_glPointParameteriv typedef void (APIENTRYP PFNGLBLENDCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); GLAPI PFNGLBLENDCOLORPROC glad_glBlendColor; #define glBlendColor glad_glBlendColor typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC)(GLenum mode); GLAPI PFNGLBLENDEQUATIONPROC glad_glBlendEquation; #define glBlendEquation glad_glBlendEquation #endif #ifndef GL_VERSION_1_5 #define GL_VERSION_1_5 1 GLAPI int GLAD_GL_VERSION_1_5; typedef void (APIENTRYP PFNGLGENQUERIESPROC)(GLsizei n, GLuint *ids); GLAPI PFNGLGENQUERIESPROC glad_glGenQueries; #define glGenQueries glad_glGenQueries typedef void (APIENTRYP PFNGLDELETEQUERIESPROC)(GLsizei n, const GLuint *ids); GLAPI PFNGLDELETEQUERIESPROC glad_glDeleteQueries; #define glDeleteQueries glad_glDeleteQueries typedef GLboolean (APIENTRYP PFNGLISQUERYPROC)(GLuint id); GLAPI PFNGLISQUERYPROC glad_glIsQuery; #define glIsQuery glad_glIsQuery typedef void (APIENTRYP PFNGLBEGINQUERYPROC)(GLenum target, GLuint id); GLAPI PFNGLBEGINQUERYPROC glad_glBeginQuery; #define glBeginQuery glad_glBeginQuery typedef void (APIENTRYP PFNGLENDQUERYPROC)(GLenum target); GLAPI PFNGLENDQUERYPROC glad_glEndQuery; #define glEndQuery glad_glEndQuery typedef void (APIENTRYP PFNGLGETQUERYIVPROC)(GLenum target, GLenum pname, GLint *params); GLAPI PFNGLGETQUERYIVPROC glad_glGetQueryiv; #define glGetQueryiv glad_glGetQueryiv typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC)(GLuint id, GLenum pname, GLint *params); GLAPI PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv; #define glGetQueryObjectiv glad_glGetQueryObjectiv typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC)(GLuint id, GLenum pname, GLuint *params); GLAPI PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv; #define glGetQueryObjectuiv glad_glGetQueryObjectuiv typedef void (APIENTRYP PFNGLBINDBUFFERPROC)(GLenum target, GLuint buffer); GLAPI PFNGLBINDBUFFERPROC glad_glBindBuffer; #define glBindBuffer glad_glBindBuffer typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC)(GLsizei n, const GLuint *buffers); GLAPI PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers; #define glDeleteBuffers glad_glDeleteBuffers typedef void (APIENTRYP PFNGLGENBUFFERSPROC)(GLsizei n, GLuint *buffers); GLAPI PFNGLGENBUFFERSPROC glad_glGenBuffers; #define glGenBuffers glad_glGenBuffers typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC)(GLuint buffer); GLAPI PFNGLISBUFFERPROC glad_glIsBuffer; #define glIsBuffer glad_glIsBuffer typedef void (APIENTRYP PFNGLBUFFERDATAPROC)(GLenum target, GLsizeiptr size, const void *data, GLenum usage); GLAPI PFNGLBUFFERDATAPROC glad_glBufferData; #define glBufferData glad_glBufferData typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, const void *data); GLAPI PFNGLBUFFERSUBDATAPROC glad_glBufferSubData; #define glBufferSubData glad_glBufferSubData typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, void *data); GLAPI PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData; #define glGetBufferSubData glad_glGetBufferSubData typedef void * (APIENTRYP PFNGLMAPBUFFERPROC)(GLenum target, GLenum access); GLAPI PFNGLMAPBUFFERPROC glad_glMapBuffer; #define glMapBuffer glad_glMapBuffer typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC)(GLenum target); GLAPI PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer; #define glUnmapBuffer glad_glUnmapBuffer typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params); GLAPI PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv; #define glGetBufferParameteriv glad_glGetBufferParameteriv typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC)(GLenum target, GLenum pname, void **params); GLAPI PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv; #define glGetBufferPointerv glad_glGetBufferPointerv #endif #ifndef GL_VERSION_2_0 #define GL_VERSION_2_0 1 GLAPI int GLAD_GL_VERSION_2_0; typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC)(GLenum modeRGB, GLenum modeAlpha); GLAPI PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate; #define glBlendEquationSeparate glad_glBlendEquationSeparate typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC)(GLsizei n, const GLenum *bufs); GLAPI PFNGLDRAWBUFFERSPROC glad_glDrawBuffers; #define glDrawBuffers glad_glDrawBuffers typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); GLAPI PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate; #define glStencilOpSeparate glad_glStencilOpSeparate typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC)(GLenum face, GLenum func, GLint ref, GLuint mask); GLAPI PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate; #define glStencilFuncSeparate glad_glStencilFuncSeparate typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC)(GLenum face, GLuint mask); GLAPI PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate; #define glStencilMaskSeparate glad_glStencilMaskSeparate typedef void (APIENTRYP PFNGLATTACHSHADERPROC)(GLuint program, GLuint shader); GLAPI PFNGLATTACHSHADERPROC glad_glAttachShader; #define glAttachShader glad_glAttachShader typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC)(GLuint program, GLuint index, const GLchar *name); GLAPI PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation; #define glBindAttribLocation glad_glBindAttribLocation typedef void (APIENTRYP PFNGLCOMPILESHADERPROC)(GLuint shader); GLAPI PFNGLCOMPILESHADERPROC glad_glCompileShader; #define glCompileShader glad_glCompileShader typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC)(void); GLAPI PFNGLCREATEPROGRAMPROC glad_glCreateProgram; #define glCreateProgram glad_glCreateProgram typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC)(GLenum type); GLAPI PFNGLCREATESHADERPROC glad_glCreateShader; #define glCreateShader glad_glCreateShader typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC)(GLuint program); GLAPI PFNGLDELETEPROGRAMPROC glad_glDeleteProgram; #define glDeleteProgram glad_glDeleteProgram typedef void (APIENTRYP PFNGLDELETESHADERPROC)(GLuint shader); GLAPI PFNGLDELETESHADERPROC glad_glDeleteShader; #define glDeleteShader glad_glDeleteShader typedef void (APIENTRYP PFNGLDETACHSHADERPROC)(GLuint program, GLuint shader); GLAPI PFNGLDETACHSHADERPROC glad_glDetachShader; #define glDetachShader glad_glDetachShader typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC)(GLuint index); GLAPI PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray; #define glDisableVertexAttribArray glad_glDisableVertexAttribArray typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC)(GLuint index); GLAPI PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray; #define glEnableVertexAttribArray glad_glEnableVertexAttribArray typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); GLAPI PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib; #define glGetActiveAttrib glad_glGetActiveAttrib typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); GLAPI PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform; #define glGetActiveUniform glad_glGetActiveUniform typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC)(GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); GLAPI PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders; #define glGetAttachedShaders glad_glGetAttachedShaders typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC)(GLuint program, const GLchar *name); GLAPI PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation; #define glGetAttribLocation glad_glGetAttribLocation typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC)(GLuint program, GLenum pname, GLint *params); GLAPI PFNGLGETPROGRAMIVPROC glad_glGetProgramiv; #define glGetProgramiv glad_glGetProgramiv typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC)(GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); GLAPI PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog; #define glGetProgramInfoLog glad_glGetProgramInfoLog typedef void (APIENTRYP PFNGLGETSHADERIVPROC)(GLuint shader, GLenum pname, GLint *params); GLAPI PFNGLGETSHADERIVPROC glad_glGetShaderiv; #define glGetShaderiv glad_glGetShaderiv typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); GLAPI PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog; #define glGetShaderInfoLog glad_glGetShaderInfoLog typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); GLAPI PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource; #define glGetShaderSource glad_glGetShaderSource typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC)(GLuint program, const GLchar *name); GLAPI PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation; #define glGetUniformLocation glad_glGetUniformLocation typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC)(GLuint program, GLint location, GLfloat *params); GLAPI PFNGLGETUNIFORMFVPROC glad_glGetUniformfv; #define glGetUniformfv glad_glGetUniformfv typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC)(GLuint program, GLint location, GLint *params); GLAPI PFNGLGETUNIFORMIVPROC glad_glGetUniformiv; #define glGetUniformiv glad_glGetUniformiv typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC)(GLuint index, GLenum pname, GLdouble *params); GLAPI PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv; #define glGetVertexAttribdv glad_glGetVertexAttribdv typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC)(GLuint index, GLenum pname, GLfloat *params); GLAPI PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv; #define glGetVertexAttribfv glad_glGetVertexAttribfv typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC)(GLuint index, GLenum pname, GLint *params); GLAPI PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv; #define glGetVertexAttribiv glad_glGetVertexAttribiv typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC)(GLuint index, GLenum pname, void **pointer); GLAPI PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv; #define glGetVertexAttribPointerv glad_glGetVertexAttribPointerv typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC)(GLuint program); GLAPI PFNGLISPROGRAMPROC glad_glIsProgram; #define glIsProgram glad_glIsProgram typedef GLboolean (APIENTRYP PFNGLISSHADERPROC)(GLuint shader); GLAPI PFNGLISSHADERPROC glad_glIsShader; #define glIsShader glad_glIsShader typedef void (APIENTRYP PFNGLLINKPROGRAMPROC)(GLuint program); GLAPI PFNGLLINKPROGRAMPROC glad_glLinkProgram; #define glLinkProgram glad_glLinkProgram typedef void (APIENTRYP PFNGLSHADERSOURCEPROC)(GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); GLAPI PFNGLSHADERSOURCEPROC glad_glShaderSource; #define glShaderSource glad_glShaderSource typedef void (APIENTRYP PFNGLUSEPROGRAMPROC)(GLuint program); GLAPI PFNGLUSEPROGRAMPROC glad_glUseProgram; #define glUseProgram glad_glUseProgram typedef void (APIENTRYP PFNGLUNIFORM1FPROC)(GLint location, GLfloat v0); GLAPI PFNGLUNIFORM1FPROC glad_glUniform1f; #define glUniform1f glad_glUniform1f typedef void (APIENTRYP PFNGLUNIFORM2FPROC)(GLint location, GLfloat v0, GLfloat v1); GLAPI PFNGLUNIFORM2FPROC glad_glUniform2f; #define glUniform2f glad_glUniform2f typedef void (APIENTRYP PFNGLUNIFORM3FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); GLAPI PFNGLUNIFORM3FPROC glad_glUniform3f; #define glUniform3f glad_glUniform3f typedef void (APIENTRYP PFNGLUNIFORM4FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); GLAPI PFNGLUNIFORM4FPROC glad_glUniform4f; #define glUniform4f glad_glUniform4f typedef void (APIENTRYP PFNGLUNIFORM1IPROC)(GLint location, GLint v0); GLAPI PFNGLUNIFORM1IPROC glad_glUniform1i; #define glUniform1i glad_glUniform1i typedef void (APIENTRYP PFNGLUNIFORM2IPROC)(GLint location, GLint v0, GLint v1); GLAPI PFNGLUNIFORM2IPROC glad_glUniform2i; #define glUniform2i glad_glUniform2i typedef void (APIENTRYP PFNGLUNIFORM3IPROC)(GLint location, GLint v0, GLint v1, GLint v2); GLAPI PFNGLUNIFORM3IPROC glad_glUniform3i; #define glUniform3i glad_glUniform3i typedef void (APIENTRYP PFNGLUNIFORM4IPROC)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); GLAPI PFNGLUNIFORM4IPROC glad_glUniform4i; #define glUniform4i glad_glUniform4i typedef void (APIENTRYP PFNGLUNIFORM1FVPROC)(GLint location, GLsizei count, const GLfloat *value); GLAPI PFNGLUNIFORM1FVPROC glad_glUniform1fv; #define glUniform1fv glad_glUniform1fv typedef void (APIENTRYP PFNGLUNIFORM2FVPROC)(GLint location, GLsizei count, const GLfloat *value); GLAPI PFNGLUNIFORM2FVPROC glad_glUniform2fv; #define glUniform2fv glad_glUniform2fv typedef void (APIENTRYP PFNGLUNIFORM3FVPROC)(GLint location, GLsizei count, const GLfloat *value); GLAPI PFNGLUNIFORM3FVPROC glad_glUniform3fv; #define glUniform3fv glad_glUniform3fv typedef void (APIENTRYP PFNGLUNIFORM4FVPROC)(GLint location, GLsizei count, const GLfloat *value); GLAPI PFNGLUNIFORM4FVPROC glad_glUniform4fv; #define glUniform4fv glad_glUniform4fv typedef void (APIENTRYP PFNGLUNIFORM1IVPROC)(GLint location, GLsizei count, const GLint *value); GLAPI PFNGLUNIFORM1IVPROC glad_glUniform1iv; #define glUniform1iv glad_glUniform1iv typedef void (APIENTRYP PFNGLUNIFORM2IVPROC)(GLint location, GLsizei count, const GLint *value); GLAPI PFNGLUNIFORM2IVPROC glad_glUniform2iv; #define glUniform2iv glad_glUniform2iv typedef void (APIENTRYP PFNGLUNIFORM3IVPROC)(GLint location, GLsizei count, const GLint *value); GLAPI PFNGLUNIFORM3IVPROC glad_glUniform3iv; #define glUniform3iv glad_glUniform3iv typedef void (APIENTRYP PFNGLUNIFORM4IVPROC)(GLint location, GLsizei count, const GLint *value); GLAPI PFNGLUNIFORM4IVPROC glad_glUniform4iv; #define glUniform4iv glad_glUniform4iv typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv; #define glUniformMatrix2fv glad_glUniformMatrix2fv typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv; #define glUniformMatrix3fv glad_glUniformMatrix3fv typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv; #define glUniformMatrix4fv glad_glUniformMatrix4fv typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC)(GLuint program); GLAPI PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram; #define glValidateProgram glad_glValidateProgram typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC)(GLuint index, GLdouble x); GLAPI PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d; #define glVertexAttrib1d glad_glVertexAttrib1d typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC)(GLuint index, const GLdouble *v); GLAPI PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv; #define glVertexAttrib1dv glad_glVertexAttrib1dv typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC)(GLuint index, GLfloat x); GLAPI PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f; #define glVertexAttrib1f glad_glVertexAttrib1f typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC)(GLuint index, const GLfloat *v); GLAPI PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv; #define glVertexAttrib1fv glad_glVertexAttrib1fv typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC)(GLuint index, GLshort x); GLAPI PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s; #define glVertexAttrib1s glad_glVertexAttrib1s typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC)(GLuint index, const GLshort *v); GLAPI PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv; #define glVertexAttrib1sv glad_glVertexAttrib1sv typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC)(GLuint index, GLdouble x, GLdouble y); GLAPI PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d; #define glVertexAttrib2d glad_glVertexAttrib2d typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC)(GLuint index, const GLdouble *v); GLAPI PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv; #define glVertexAttrib2dv glad_glVertexAttrib2dv typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC)(GLuint index, GLfloat x, GLfloat y); GLAPI PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f; #define glVertexAttrib2f glad_glVertexAttrib2f typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC)(GLuint index, const GLfloat *v); GLAPI PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv; #define glVertexAttrib2fv glad_glVertexAttrib2fv typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC)(GLuint index, GLshort x, GLshort y); GLAPI PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s; #define glVertexAttrib2s glad_glVertexAttrib2s typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC)(GLuint index, const GLshort *v); GLAPI PFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv; #define glVertexAttrib2sv glad_glVertexAttrib2sv typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); GLAPI PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d; #define glVertexAttrib3d glad_glVertexAttrib3d typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC)(GLuint index, const GLdouble *v); GLAPI PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv; #define glVertexAttrib3dv glad_glVertexAttrib3dv typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z); GLAPI PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f; #define glVertexAttrib3f glad_glVertexAttrib3f typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC)(GLuint index, const GLfloat *v); GLAPI PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv; #define glVertexAttrib3fv glad_glVertexAttrib3fv typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC)(GLuint index, GLshort x, GLshort y, GLshort z); GLAPI PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s; #define glVertexAttrib3s glad_glVertexAttrib3s typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC)(GLuint index, const GLshort *v); GLAPI PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv; #define glVertexAttrib3sv glad_glVertexAttrib3sv typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC)(GLuint index, const GLbyte *v); GLAPI PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv; #define glVertexAttrib4Nbv glad_glVertexAttrib4Nbv typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC)(GLuint index, const GLint *v); GLAPI PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv; #define glVertexAttrib4Niv glad_glVertexAttrib4Niv typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC)(GLuint index, const GLshort *v); GLAPI PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv; #define glVertexAttrib4Nsv glad_glVertexAttrib4Nsv typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); GLAPI PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub; #define glVertexAttrib4Nub glad_glVertexAttrib4Nub typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC)(GLuint index, const GLubyte *v); GLAPI PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv; #define glVertexAttrib4Nubv glad_glVertexAttrib4Nubv typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC)(GLuint index, const GLuint *v); GLAPI PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv; #define glVertexAttrib4Nuiv glad_glVertexAttrib4Nuiv typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC)(GLuint index, const GLushort *v); GLAPI PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv; #define glVertexAttrib4Nusv glad_glVertexAttrib4Nusv typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC)(GLuint index, const GLbyte *v); GLAPI PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv; #define glVertexAttrib4bv glad_glVertexAttrib4bv typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d; #define glVertexAttrib4d glad_glVertexAttrib4d typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC)(GLuint index, const GLdouble *v); GLAPI PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv; #define glVertexAttrib4dv glad_glVertexAttrib4dv typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f; #define glVertexAttrib4f glad_glVertexAttrib4f typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC)(GLuint index, const GLfloat *v); GLAPI PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv; #define glVertexAttrib4fv glad_glVertexAttrib4fv typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC)(GLuint index, const GLint *v); GLAPI PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv; #define glVertexAttrib4iv glad_glVertexAttrib4iv typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); GLAPI PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s; #define glVertexAttrib4s glad_glVertexAttrib4s typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC)(GLuint index, const GLshort *v); GLAPI PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv; #define glVertexAttrib4sv glad_glVertexAttrib4sv typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC)(GLuint index, const GLubyte *v); GLAPI PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv; #define glVertexAttrib4ubv glad_glVertexAttrib4ubv typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC)(GLuint index, const GLuint *v); GLAPI PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv; #define glVertexAttrib4uiv glad_glVertexAttrib4uiv typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC)(GLuint index, const GLushort *v); GLAPI PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv; #define glVertexAttrib4usv glad_glVertexAttrib4usv typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); GLAPI PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer; #define glVertexAttribPointer glad_glVertexAttribPointer #endif #ifndef GL_VERSION_2_1 #define GL_VERSION_2_1 1 GLAPI int GLAD_GL_VERSION_2_1; typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv; #define glUniformMatrix2x3fv glad_glUniformMatrix2x3fv typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv; #define glUniformMatrix3x2fv glad_glUniformMatrix3x2fv typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv; #define glUniformMatrix2x4fv glad_glUniformMatrix2x4fv typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv; #define glUniformMatrix4x2fv glad_glUniformMatrix4x2fv typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv; #define glUniformMatrix3x4fv glad_glUniformMatrix3x4fv typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv; #define glUniformMatrix4x3fv glad_glUniformMatrix4x3fv #endif #ifndef GL_VERSION_3_0 #define GL_VERSION_3_0 1 GLAPI int GLAD_GL_VERSION_3_0; typedef void (APIENTRYP PFNGLCOLORMASKIPROC)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); GLAPI PFNGLCOLORMASKIPROC glad_glColorMaski; #define glColorMaski glad_glColorMaski typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC)(GLenum target, GLuint index, GLboolean *data); GLAPI PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v; #define glGetBooleani_v glad_glGetBooleani_v typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC)(GLenum target, GLuint index, GLint *data); GLAPI PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v; #define glGetIntegeri_v glad_glGetIntegeri_v typedef void (APIENTRYP PFNGLENABLEIPROC)(GLenum target, GLuint index); GLAPI PFNGLENABLEIPROC glad_glEnablei; #define glEnablei glad_glEnablei typedef void (APIENTRYP PFNGLDISABLEIPROC)(GLenum target, GLuint index); GLAPI PFNGLDISABLEIPROC glad_glDisablei; #define glDisablei glad_glDisablei typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC)(GLenum target, GLuint index); GLAPI PFNGLISENABLEDIPROC glad_glIsEnabledi; #define glIsEnabledi glad_glIsEnabledi typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC)(GLenum primitiveMode); GLAPI PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback; #define glBeginTransformFeedback glad_glBeginTransformFeedback typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC)(void); GLAPI PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback; #define glEndTransformFeedback glad_glEndTransformFeedback typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); GLAPI PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange; #define glBindBufferRange glad_glBindBufferRange typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC)(GLenum target, GLuint index, GLuint buffer); GLAPI PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase; #define glBindBufferBase glad_glBindBufferBase typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC)(GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); GLAPI PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings; #define glTransformFeedbackVaryings glad_glTransformFeedbackVaryings typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); GLAPI PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying; #define glGetTransformFeedbackVarying glad_glGetTransformFeedbackVarying typedef void (APIENTRYP PFNGLCLAMPCOLORPROC)(GLenum target, GLenum clamp); GLAPI PFNGLCLAMPCOLORPROC glad_glClampColor; #define glClampColor glad_glClampColor typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC)(GLuint id, GLenum mode); GLAPI PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender; #define glBeginConditionalRender glad_glBeginConditionalRender typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC)(void); GLAPI PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender; #define glEndConditionalRender glad_glEndConditionalRender typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); GLAPI PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer; #define glVertexAttribIPointer glad_glVertexAttribIPointer typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC)(GLuint index, GLenum pname, GLint *params); GLAPI PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv; #define glGetVertexAttribIiv glad_glGetVertexAttribIiv typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC)(GLuint index, GLenum pname, GLuint *params); GLAPI PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv; #define glGetVertexAttribIuiv glad_glGetVertexAttribIuiv typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC)(GLuint index, GLint x); GLAPI PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i; #define glVertexAttribI1i glad_glVertexAttribI1i typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC)(GLuint index, GLint x, GLint y); GLAPI PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i; #define glVertexAttribI2i glad_glVertexAttribI2i typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC)(GLuint index, GLint x, GLint y, GLint z); GLAPI PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i; #define glVertexAttribI3i glad_glVertexAttribI3i typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC)(GLuint index, GLint x, GLint y, GLint z, GLint w); GLAPI PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i; #define glVertexAttribI4i glad_glVertexAttribI4i typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC)(GLuint index, GLuint x); GLAPI PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui; #define glVertexAttribI1ui glad_glVertexAttribI1ui typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC)(GLuint index, GLuint x, GLuint y); GLAPI PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui; #define glVertexAttribI2ui glad_glVertexAttribI2ui typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z); GLAPI PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui; #define glVertexAttribI3ui glad_glVertexAttribI3ui typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); GLAPI PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui; #define glVertexAttribI4ui glad_glVertexAttribI4ui typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC)(GLuint index, const GLint *v); GLAPI PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv; #define glVertexAttribI1iv glad_glVertexAttribI1iv typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC)(GLuint index, const GLint *v); GLAPI PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv; #define glVertexAttribI2iv glad_glVertexAttribI2iv typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC)(GLuint index, const GLint *v); GLAPI PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv; #define glVertexAttribI3iv glad_glVertexAttribI3iv typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC)(GLuint index, const GLint *v); GLAPI PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv; #define glVertexAttribI4iv glad_glVertexAttribI4iv typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC)(GLuint index, const GLuint *v); GLAPI PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv; #define glVertexAttribI1uiv glad_glVertexAttribI1uiv typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC)(GLuint index, const GLuint *v); GLAPI PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv; #define glVertexAttribI2uiv glad_glVertexAttribI2uiv typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC)(GLuint index, const GLuint *v); GLAPI PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv; #define glVertexAttribI3uiv glad_glVertexAttribI3uiv typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC)(GLuint index, const GLuint *v); GLAPI PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv; #define glVertexAttribI4uiv glad_glVertexAttribI4uiv typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC)(GLuint index, const GLbyte *v); GLAPI PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv; #define glVertexAttribI4bv glad_glVertexAttribI4bv typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC)(GLuint index, const GLshort *v); GLAPI PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv; #define glVertexAttribI4sv glad_glVertexAttribI4sv typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC)(GLuint index, const GLubyte *v); GLAPI PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv; #define glVertexAttribI4ubv glad_glVertexAttribI4ubv typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC)(GLuint index, const GLushort *v); GLAPI PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv; #define glVertexAttribI4usv glad_glVertexAttribI4usv typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC)(GLuint program, GLint location, GLuint *params); GLAPI PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv; #define glGetUniformuiv glad_glGetUniformuiv typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC)(GLuint program, GLuint color, const GLchar *name); GLAPI PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation; #define glBindFragDataLocation glad_glBindFragDataLocation typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC)(GLuint program, const GLchar *name); GLAPI PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation; #define glGetFragDataLocation glad_glGetFragDataLocation typedef void (APIENTRYP PFNGLUNIFORM1UIPROC)(GLint location, GLuint v0); GLAPI PFNGLUNIFORM1UIPROC glad_glUniform1ui; #define glUniform1ui glad_glUniform1ui typedef void (APIENTRYP PFNGLUNIFORM2UIPROC)(GLint location, GLuint v0, GLuint v1); GLAPI PFNGLUNIFORM2UIPROC glad_glUniform2ui; #define glUniform2ui glad_glUniform2ui typedef void (APIENTRYP PFNGLUNIFORM3UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2); GLAPI PFNGLUNIFORM3UIPROC glad_glUniform3ui; #define glUniform3ui glad_glUniform3ui typedef void (APIENTRYP PFNGLUNIFORM4UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); GLAPI PFNGLUNIFORM4UIPROC glad_glUniform4ui; #define glUniform4ui glad_glUniform4ui typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC)(GLint location, GLsizei count, const GLuint *value); GLAPI PFNGLUNIFORM1UIVPROC glad_glUniform1uiv; #define glUniform1uiv glad_glUniform1uiv typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC)(GLint location, GLsizei count, const GLuint *value); GLAPI PFNGLUNIFORM2UIVPROC glad_glUniform2uiv; #define glUniform2uiv glad_glUniform2uiv typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC)(GLint location, GLsizei count, const GLuint *value); GLAPI PFNGLUNIFORM3UIVPROC glad_glUniform3uiv; #define glUniform3uiv glad_glUniform3uiv typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC)(GLint location, GLsizei count, const GLuint *value); GLAPI PFNGLUNIFORM4UIVPROC glad_glUniform4uiv; #define glUniform4uiv glad_glUniform4uiv typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, const GLint *params); GLAPI PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv; #define glTexParameterIiv glad_glTexParameterIiv typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, const GLuint *params); GLAPI PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv; #define glTexParameterIuiv glad_glTexParameterIuiv typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, GLint *params); GLAPI PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv; #define glGetTexParameterIiv glad_glGetTexParameterIiv typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, GLuint *params); GLAPI PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv; #define glGetTexParameterIuiv glad_glGetTexParameterIuiv typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC)(GLenum buffer, GLint drawbuffer, const GLint *value); GLAPI PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv; #define glClearBufferiv glad_glClearBufferiv typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC)(GLenum buffer, GLint drawbuffer, const GLuint *value); GLAPI PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv; #define glClearBufferuiv glad_glClearBufferuiv typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC)(GLenum buffer, GLint drawbuffer, const GLfloat *value); GLAPI PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv; #define glClearBufferfv glad_glClearBufferfv typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC)(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); GLAPI PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi; #define glClearBufferfi glad_glClearBufferfi typedef const GLubyte * (APIENTRYP PFNGLGETSTRINGIPROC)(GLenum name, GLuint index); GLAPI PFNGLGETSTRINGIPROC glad_glGetStringi; #define glGetStringi glad_glGetStringi typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC)(GLuint renderbuffer); GLAPI PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer; #define glIsRenderbuffer glad_glIsRenderbuffer typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC)(GLenum target, GLuint renderbuffer); GLAPI PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer; #define glBindRenderbuffer glad_glBindRenderbuffer typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC)(GLsizei n, const GLuint *renderbuffers); GLAPI PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers; #define glDeleteRenderbuffers glad_glDeleteRenderbuffers typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC)(GLsizei n, GLuint *renderbuffers); GLAPI PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers; #define glGenRenderbuffers glad_glGenRenderbuffers typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); GLAPI PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage; #define glRenderbufferStorage glad_glRenderbufferStorage typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params); GLAPI PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv; #define glGetRenderbufferParameteriv glad_glGetRenderbufferParameteriv typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC)(GLuint framebuffer); GLAPI PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer; #define glIsFramebuffer glad_glIsFramebuffer typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC)(GLenum target, GLuint framebuffer); GLAPI PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer; #define glBindFramebuffer glad_glBindFramebuffer typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC)(GLsizei n, const GLuint *framebuffers); GLAPI PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers; #define glDeleteFramebuffers glad_glDeleteFramebuffers typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC)(GLsizei n, GLuint *framebuffers); GLAPI PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers; #define glGenFramebuffers glad_glGenFramebuffers typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC)(GLenum target); GLAPI PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus; #define glCheckFramebufferStatus glad_glCheckFramebufferStatus typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLAPI PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D; #define glFramebufferTexture1D glad_glFramebufferTexture1D typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLAPI PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D; #define glFramebufferTexture2D glad_glFramebufferTexture2D typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); GLAPI PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D; #define glFramebufferTexture3D glad_glFramebufferTexture3D typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); GLAPI PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer; #define glFramebufferRenderbuffer glad_glFramebufferRenderbuffer typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(GLenum target, GLenum attachment, GLenum pname, GLint *params); GLAPI PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv; #define glGetFramebufferAttachmentParameteriv glad_glGetFramebufferAttachmentParameteriv typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC)(GLenum target); GLAPI PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap; #define glGenerateMipmap glad_glGenerateMipmap typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); GLAPI PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer; #define glBlitFramebuffer glad_glBlitFramebuffer typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); GLAPI PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample; #define glRenderbufferStorageMultisample glad_glRenderbufferStorageMultisample typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); GLAPI PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer; #define glFramebufferTextureLayer glad_glFramebufferTextureLayer typedef void * (APIENTRYP PFNGLMAPBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); GLAPI PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange; #define glMapBufferRange glad_glMapBufferRange typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length); GLAPI PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange; #define glFlushMappedBufferRange glad_glFlushMappedBufferRange typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC)(GLuint array); GLAPI PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray; #define glBindVertexArray glad_glBindVertexArray typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC)(GLsizei n, const GLuint *arrays); GLAPI PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays; #define glDeleteVertexArrays glad_glDeleteVertexArrays typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC)(GLsizei n, GLuint *arrays); GLAPI PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays; #define glGenVertexArrays glad_glGenVertexArrays typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC)(GLuint array); GLAPI PFNGLISVERTEXARRAYPROC glad_glIsVertexArray; #define glIsVertexArray glad_glIsVertexArray #endif #ifndef GL_VERSION_3_1 #define GL_VERSION_3_1 1 GLAPI int GLAD_GL_VERSION_3_1; typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount); GLAPI PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced; #define glDrawArraysInstanced glad_glDrawArraysInstanced typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); GLAPI PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced; #define glDrawElementsInstanced glad_glDrawElementsInstanced typedef void (APIENTRYP PFNGLTEXBUFFERPROC)(GLenum target, GLenum internalformat, GLuint buffer); GLAPI PFNGLTEXBUFFERPROC glad_glTexBuffer; #define glTexBuffer glad_glTexBuffer typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC)(GLuint index); GLAPI PFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex; #define glPrimitiveRestartIndex glad_glPrimitiveRestartIndex typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); GLAPI PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData; #define glCopyBufferSubData glad_glCopyBufferSubData typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC)(GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); GLAPI PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices; #define glGetUniformIndices glad_glGetUniformIndices typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC)(GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); GLAPI PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv; #define glGetActiveUniformsiv glad_glGetActiveUniformsiv typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC)(GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); GLAPI PFNGLGETACTIVEUNIFORMNAMEPROC glad_glGetActiveUniformName; #define glGetActiveUniformName glad_glGetActiveUniformName typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC)(GLuint program, const GLchar *uniformBlockName); GLAPI PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex; #define glGetUniformBlockIndex glad_glGetUniformBlockIndex typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC)(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); GLAPI PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv; #define glGetActiveUniformBlockiv glad_glGetActiveUniformBlockiv typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); GLAPI PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName; #define glGetActiveUniformBlockName glad_glGetActiveUniformBlockName typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC)(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); GLAPI PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding; #define glUniformBlockBinding glad_glUniformBlockBinding #endif #ifndef GL_VERSION_3_2 #define GL_VERSION_3_2 1 GLAPI int GLAD_GL_VERSION_3_2; typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); GLAPI PFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex; #define glDrawElementsBaseVertex glad_glDrawElementsBaseVertex typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); GLAPI PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex; #define glDrawRangeElementsBaseVertex glad_glDrawRangeElementsBaseVertex typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); GLAPI PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex; #define glDrawElementsInstancedBaseVertex glad_glDrawElementsInstancedBaseVertex typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); GLAPI PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex; #define glMultiDrawElementsBaseVertex glad_glMultiDrawElementsBaseVertex typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC)(GLenum mode); GLAPI PFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex; #define glProvokingVertex glad_glProvokingVertex typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC)(GLenum condition, GLbitfield flags); GLAPI PFNGLFENCESYNCPROC glad_glFenceSync; #define glFenceSync glad_glFenceSync typedef GLboolean (APIENTRYP PFNGLISSYNCPROC)(GLsync sync); GLAPI PFNGLISSYNCPROC glad_glIsSync; #define glIsSync glad_glIsSync typedef void (APIENTRYP PFNGLDELETESYNCPROC)(GLsync sync); GLAPI PFNGLDELETESYNCPROC glad_glDeleteSync; #define glDeleteSync glad_glDeleteSync typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); GLAPI PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync; #define glClientWaitSync glad_glClientWaitSync typedef void (APIENTRYP PFNGLWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); GLAPI PFNGLWAITSYNCPROC glad_glWaitSync; #define glWaitSync glad_glWaitSync typedef void (APIENTRYP PFNGLGETINTEGER64VPROC)(GLenum pname, GLint64 *data); GLAPI PFNGLGETINTEGER64VPROC glad_glGetInteger64v; #define glGetInteger64v glad_glGetInteger64v typedef void (APIENTRYP PFNGLGETSYNCIVPROC)(GLsync sync, GLenum pname, GLsizei count, GLsizei *length, GLint *values); GLAPI PFNGLGETSYNCIVPROC glad_glGetSynciv; #define glGetSynciv glad_glGetSynciv typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC)(GLenum target, GLuint index, GLint64 *data); GLAPI PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v; #define glGetInteger64i_v glad_glGetInteger64i_v typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC)(GLenum target, GLenum pname, GLint64 *params); GLAPI PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v; #define glGetBufferParameteri64v glad_glGetBufferParameteri64v typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level); GLAPI PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture; #define glFramebufferTexture glad_glFramebufferTexture typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); GLAPI PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_glTexImage2DMultisample; #define glTexImage2DMultisample glad_glTexImage2DMultisample typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); GLAPI PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_glTexImage3DMultisample; #define glTexImage3DMultisample glad_glTexImage3DMultisample typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC)(GLenum pname, GLuint index, GLfloat *val); GLAPI PFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv; #define glGetMultisamplefv glad_glGetMultisamplefv typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC)(GLuint maskNumber, GLbitfield mask); GLAPI PFNGLSAMPLEMASKIPROC glad_glSampleMaski; #define glSampleMaski glad_glSampleMaski #endif #ifndef GL_VERSION_3_3 #define GL_VERSION_3_3 1 GLAPI int GLAD_GL_VERSION_3_3; typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)(GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); GLAPI PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed; #define glBindFragDataLocationIndexed glad_glBindFragDataLocationIndexed typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC)(GLuint program, const GLchar *name); GLAPI PFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex; #define glGetFragDataIndex glad_glGetFragDataIndex typedef void (APIENTRYP PFNGLGENSAMPLERSPROC)(GLsizei count, GLuint *samplers); GLAPI PFNGLGENSAMPLERSPROC glad_glGenSamplers; #define glGenSamplers glad_glGenSamplers typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC)(GLsizei count, const GLuint *samplers); GLAPI PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers; #define glDeleteSamplers glad_glDeleteSamplers typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC)(GLuint sampler); GLAPI PFNGLISSAMPLERPROC glad_glIsSampler; #define glIsSampler glad_glIsSampler typedef void (APIENTRYP PFNGLBINDSAMPLERPROC)(GLuint unit, GLuint sampler); GLAPI PFNGLBINDSAMPLERPROC glad_glBindSampler; #define glBindSampler glad_glBindSampler typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC)(GLuint sampler, GLenum pname, GLint param); GLAPI PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri; #define glSamplerParameteri glad_glSamplerParameteri typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, const GLint *param); GLAPI PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv; #define glSamplerParameteriv glad_glSamplerParameteriv typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC)(GLuint sampler, GLenum pname, GLfloat param); GLAPI PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf; #define glSamplerParameterf glad_glSamplerParameterf typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, const GLfloat *param); GLAPI PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv; #define glSamplerParameterfv glad_glSamplerParameterfv typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, const GLint *param); GLAPI PFNGLSAMPLERPARAMETERIIVPROC glad_glSamplerParameterIiv; #define glSamplerParameterIiv glad_glSamplerParameterIiv typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, const GLuint *param); GLAPI PFNGLSAMPLERPARAMETERIUIVPROC glad_glSamplerParameterIuiv; #define glSamplerParameterIuiv glad_glSamplerParameterIuiv typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, GLint *params); GLAPI PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv; #define glGetSamplerParameteriv glad_glGetSamplerParameteriv typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, GLint *params); GLAPI PFNGLGETSAMPLERPARAMETERIIVPROC glad_glGetSamplerParameterIiv; #define glGetSamplerParameterIiv glad_glGetSamplerParameterIiv typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, GLfloat *params); GLAPI PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv; #define glGetSamplerParameterfv glad_glGetSamplerParameterfv typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, GLuint *params); GLAPI PFNGLGETSAMPLERPARAMETERIUIVPROC glad_glGetSamplerParameterIuiv; #define glGetSamplerParameterIuiv glad_glGetSamplerParameterIuiv typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC)(GLuint id, GLenum target); GLAPI PFNGLQUERYCOUNTERPROC glad_glQueryCounter; #define glQueryCounter glad_glQueryCounter typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC)(GLuint id, GLenum pname, GLint64 *params); GLAPI PFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v; #define glGetQueryObjecti64v glad_glGetQueryObjecti64v typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC)(GLuint id, GLenum pname, GLuint64 *params); GLAPI PFNGLGETQUERYOBJECTUI64VPROC glad_glGetQueryObjectui64v; #define glGetQueryObjectui64v glad_glGetQueryObjectui64v typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC)(GLuint index, GLuint divisor); GLAPI PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor; #define glVertexAttribDivisor glad_glVertexAttribDivisor typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); GLAPI PFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui; #define glVertexAttribP1ui glad_glVertexAttribP1ui typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value); GLAPI PFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv; #define glVertexAttribP1uiv glad_glVertexAttribP1uiv typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); GLAPI PFNGLVERTEXATTRIBP2UIPROC glad_glVertexAttribP2ui; #define glVertexAttribP2ui glad_glVertexAttribP2ui typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value); GLAPI PFNGLVERTEXATTRIBP2UIVPROC glad_glVertexAttribP2uiv; #define glVertexAttribP2uiv glad_glVertexAttribP2uiv typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); GLAPI PFNGLVERTEXATTRIBP3UIPROC glad_glVertexAttribP3ui; #define glVertexAttribP3ui glad_glVertexAttribP3ui typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value); GLAPI PFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv; #define glVertexAttribP3uiv glad_glVertexAttribP3uiv typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); GLAPI PFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui; #define glVertexAttribP4ui glad_glVertexAttribP4ui typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value); GLAPI PFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv; #define glVertexAttribP4uiv glad_glVertexAttribP4uiv typedef void (APIENTRYP PFNGLVERTEXP2UIPROC)(GLenum type, GLuint value); GLAPI PFNGLVERTEXP2UIPROC glad_glVertexP2ui; #define glVertexP2ui glad_glVertexP2ui typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC)(GLenum type, const GLuint *value); GLAPI PFNGLVERTEXP2UIVPROC glad_glVertexP2uiv; #define glVertexP2uiv glad_glVertexP2uiv typedef void (APIENTRYP PFNGLVERTEXP3UIPROC)(GLenum type, GLuint value); GLAPI PFNGLVERTEXP3UIPROC glad_glVertexP3ui; #define glVertexP3ui glad_glVertexP3ui typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC)(GLenum type, const GLuint *value); GLAPI PFNGLVERTEXP3UIVPROC glad_glVertexP3uiv; #define glVertexP3uiv glad_glVertexP3uiv typedef void (APIENTRYP PFNGLVERTEXP4UIPROC)(GLenum type, GLuint value); GLAPI PFNGLVERTEXP4UIPROC glad_glVertexP4ui; #define glVertexP4ui glad_glVertexP4ui typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC)(GLenum type, const GLuint *value); GLAPI PFNGLVERTEXP4UIVPROC glad_glVertexP4uiv; #define glVertexP4uiv glad_glVertexP4uiv typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC)(GLenum type, GLuint coords); GLAPI PFNGLTEXCOORDP1UIPROC glad_glTexCoordP1ui; #define glTexCoordP1ui glad_glTexCoordP1ui typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC)(GLenum type, const GLuint *coords); GLAPI PFNGLTEXCOORDP1UIVPROC glad_glTexCoordP1uiv; #define glTexCoordP1uiv glad_glTexCoordP1uiv typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC)(GLenum type, GLuint coords); GLAPI PFNGLTEXCOORDP2UIPROC glad_glTexCoordP2ui; #define glTexCoordP2ui glad_glTexCoordP2ui typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC)(GLenum type, const GLuint *coords); GLAPI PFNGLTEXCOORDP2UIVPROC glad_glTexCoordP2uiv; #define glTexCoordP2uiv glad_glTexCoordP2uiv typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC)(GLenum type, GLuint coords); GLAPI PFNGLTEXCOORDP3UIPROC glad_glTexCoordP3ui; #define glTexCoordP3ui glad_glTexCoordP3ui typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC)(GLenum type, const GLuint *coords); GLAPI PFNGLTEXCOORDP3UIVPROC glad_glTexCoordP3uiv; #define glTexCoordP3uiv glad_glTexCoordP3uiv typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC)(GLenum type, GLuint coords); GLAPI PFNGLTEXCOORDP4UIPROC glad_glTexCoordP4ui; #define glTexCoordP4ui glad_glTexCoordP4ui typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC)(GLenum type, const GLuint *coords); GLAPI PFNGLTEXCOORDP4UIVPROC glad_glTexCoordP4uiv; #define glTexCoordP4uiv glad_glTexCoordP4uiv typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC)(GLenum texture, GLenum type, GLuint coords); GLAPI PFNGLMULTITEXCOORDP1UIPROC glad_glMultiTexCoordP1ui; #define glMultiTexCoordP1ui glad_glMultiTexCoordP1ui typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC)(GLenum texture, GLenum type, const GLuint *coords); GLAPI PFNGLMULTITEXCOORDP1UIVPROC glad_glMultiTexCoordP1uiv; #define glMultiTexCoordP1uiv glad_glMultiTexCoordP1uiv typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC)(GLenum texture, GLenum type, GLuint coords); GLAPI PFNGLMULTITEXCOORDP2UIPROC glad_glMultiTexCoordP2ui; #define glMultiTexCoordP2ui glad_glMultiTexCoordP2ui typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC)(GLenum texture, GLenum type, const GLuint *coords); GLAPI PFNGLMULTITEXCOORDP2UIVPROC glad_glMultiTexCoordP2uiv; #define glMultiTexCoordP2uiv glad_glMultiTexCoordP2uiv typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC)(GLenum texture, GLenum type, GLuint coords); GLAPI PFNGLMULTITEXCOORDP3UIPROC glad_glMultiTexCoordP3ui; #define glMultiTexCoordP3ui glad_glMultiTexCoordP3ui typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC)(GLenum texture, GLenum type, const GLuint *coords); GLAPI PFNGLMULTITEXCOORDP3UIVPROC glad_glMultiTexCoordP3uiv; #define glMultiTexCoordP3uiv glad_glMultiTexCoordP3uiv typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC)(GLenum texture, GLenum type, GLuint coords); GLAPI PFNGLMULTITEXCOORDP4UIPROC glad_glMultiTexCoordP4ui; #define glMultiTexCoordP4ui glad_glMultiTexCoordP4ui typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC)(GLenum texture, GLenum type, const GLuint *coords); GLAPI PFNGLMULTITEXCOORDP4UIVPROC glad_glMultiTexCoordP4uiv; #define glMultiTexCoordP4uiv glad_glMultiTexCoordP4uiv typedef void (APIENTRYP PFNGLNORMALP3UIPROC)(GLenum type, GLuint coords); GLAPI PFNGLNORMALP3UIPROC glad_glNormalP3ui; #define glNormalP3ui glad_glNormalP3ui typedef void (APIENTRYP PFNGLNORMALP3UIVPROC)(GLenum type, const GLuint *coords); GLAPI PFNGLNORMALP3UIVPROC glad_glNormalP3uiv; #define glNormalP3uiv glad_glNormalP3uiv typedef void (APIENTRYP PFNGLCOLORP3UIPROC)(GLenum type, GLuint color); GLAPI PFNGLCOLORP3UIPROC glad_glColorP3ui; #define glColorP3ui glad_glColorP3ui typedef void (APIENTRYP PFNGLCOLORP3UIVPROC)(GLenum type, const GLuint *color); GLAPI PFNGLCOLORP3UIVPROC glad_glColorP3uiv; #define glColorP3uiv glad_glColorP3uiv typedef void (APIENTRYP PFNGLCOLORP4UIPROC)(GLenum type, GLuint color); GLAPI PFNGLCOLORP4UIPROC glad_glColorP4ui; #define glColorP4ui glad_glColorP4ui typedef void (APIENTRYP PFNGLCOLORP4UIVPROC)(GLenum type, const GLuint *color); GLAPI PFNGLCOLORP4UIVPROC glad_glColorP4uiv; #define glColorP4uiv glad_glColorP4uiv typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC)(GLenum type, GLuint color); GLAPI PFNGLSECONDARYCOLORP3UIPROC glad_glSecondaryColorP3ui; #define glSecondaryColorP3ui glad_glSecondaryColorP3ui typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC)(GLenum type, const GLuint *color); GLAPI PFNGLSECONDARYCOLORP3UIVPROC glad_glSecondaryColorP3uiv; #define glSecondaryColorP3uiv glad_glSecondaryColorP3uiv #endif #ifndef GL_VERSION_4_0 #define GL_VERSION_4_0 1 GLAPI int GLAD_GL_VERSION_4_0; typedef void (APIENTRYP PFNGLMINSAMPLESHADINGPROC)(GLfloat value); GLAPI PFNGLMINSAMPLESHADINGPROC glad_glMinSampleShading; #define glMinSampleShading glad_glMinSampleShading typedef void (APIENTRYP PFNGLBLENDEQUATIONIPROC)(GLuint buf, GLenum mode); GLAPI PFNGLBLENDEQUATIONIPROC glad_glBlendEquationi; #define glBlendEquationi glad_glBlendEquationi typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); GLAPI PFNGLBLENDEQUATIONSEPARATEIPROC glad_glBlendEquationSeparatei; #define glBlendEquationSeparatei glad_glBlendEquationSeparatei typedef void (APIENTRYP PFNGLBLENDFUNCIPROC)(GLuint buf, GLenum src, GLenum dst); GLAPI PFNGLBLENDFUNCIPROC glad_glBlendFunci; #define glBlendFunci glad_glBlendFunci typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); GLAPI PFNGLBLENDFUNCSEPARATEIPROC glad_glBlendFuncSeparatei; #define glBlendFuncSeparatei glad_glBlendFuncSeparatei typedef void (APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC)(GLenum mode, const void *indirect); GLAPI PFNGLDRAWARRAYSINDIRECTPROC glad_glDrawArraysIndirect; #define glDrawArraysIndirect glad_glDrawArraysIndirect typedef void (APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC)(GLenum mode, GLenum type, const void *indirect); GLAPI PFNGLDRAWELEMENTSINDIRECTPROC glad_glDrawElementsIndirect; #define glDrawElementsIndirect glad_glDrawElementsIndirect typedef void (APIENTRYP PFNGLUNIFORM1DPROC)(GLint location, GLdouble x); GLAPI PFNGLUNIFORM1DPROC glad_glUniform1d; #define glUniform1d glad_glUniform1d typedef void (APIENTRYP PFNGLUNIFORM2DPROC)(GLint location, GLdouble x, GLdouble y); GLAPI PFNGLUNIFORM2DPROC glad_glUniform2d; #define glUniform2d glad_glUniform2d typedef void (APIENTRYP PFNGLUNIFORM3DPROC)(GLint location, GLdouble x, GLdouble y, GLdouble z); GLAPI PFNGLUNIFORM3DPROC glad_glUniform3d; #define glUniform3d glad_glUniform3d typedef void (APIENTRYP PFNGLUNIFORM4DPROC)(GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI PFNGLUNIFORM4DPROC glad_glUniform4d; #define glUniform4d glad_glUniform4d typedef void (APIENTRYP PFNGLUNIFORM1DVPROC)(GLint location, GLsizei count, const GLdouble *value); GLAPI PFNGLUNIFORM1DVPROC glad_glUniform1dv; #define glUniform1dv glad_glUniform1dv typedef void (APIENTRYP PFNGLUNIFORM2DVPROC)(GLint location, GLsizei count, const GLdouble *value); GLAPI PFNGLUNIFORM2DVPROC glad_glUniform2dv; #define glUniform2dv glad_glUniform2dv typedef void (APIENTRYP PFNGLUNIFORM3DVPROC)(GLint location, GLsizei count, const GLdouble *value); GLAPI PFNGLUNIFORM3DVPROC glad_glUniform3dv; #define glUniform3dv glad_glUniform3dv typedef void (APIENTRYP PFNGLUNIFORM4DVPROC)(GLint location, GLsizei count, const GLdouble *value); GLAPI PFNGLUNIFORM4DVPROC glad_glUniform4dv; #define glUniform4dv glad_glUniform4dv typedef void (APIENTRYP PFNGLUNIFORMMATRIX2DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI PFNGLUNIFORMMATRIX2DVPROC glad_glUniformMatrix2dv; #define glUniformMatrix2dv glad_glUniformMatrix2dv typedef void (APIENTRYP PFNGLUNIFORMMATRIX3DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI PFNGLUNIFORMMATRIX3DVPROC glad_glUniformMatrix3dv; #define glUniformMatrix3dv glad_glUniformMatrix3dv typedef void (APIENTRYP PFNGLUNIFORMMATRIX4DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI PFNGLUNIFORMMATRIX4DVPROC glad_glUniformMatrix4dv; #define glUniformMatrix4dv glad_glUniformMatrix4dv typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI PFNGLUNIFORMMATRIX2X3DVPROC glad_glUniformMatrix2x3dv; #define glUniformMatrix2x3dv glad_glUniformMatrix2x3dv typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI PFNGLUNIFORMMATRIX2X4DVPROC glad_glUniformMatrix2x4dv; #define glUniformMatrix2x4dv glad_glUniformMatrix2x4dv typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI PFNGLUNIFORMMATRIX3X2DVPROC glad_glUniformMatrix3x2dv; #define glUniformMatrix3x2dv glad_glUniformMatrix3x2dv typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI PFNGLUNIFORMMATRIX3X4DVPROC glad_glUniformMatrix3x4dv; #define glUniformMatrix3x4dv glad_glUniformMatrix3x4dv typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI PFNGLUNIFORMMATRIX4X2DVPROC glad_glUniformMatrix4x2dv; #define glUniformMatrix4x2dv glad_glUniformMatrix4x2dv typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI PFNGLUNIFORMMATRIX4X3DVPROC glad_glUniformMatrix4x3dv; #define glUniformMatrix4x3dv glad_glUniformMatrix4x3dv typedef void (APIENTRYP PFNGLGETUNIFORMDVPROC)(GLuint program, GLint location, GLdouble *params); GLAPI PFNGLGETUNIFORMDVPROC glad_glGetUniformdv; #define glGetUniformdv glad_glGetUniformdv typedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC)(GLuint program, GLenum shadertype, const GLchar *name); GLAPI PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC glad_glGetSubroutineUniformLocation; #define glGetSubroutineUniformLocation glad_glGetSubroutineUniformLocation typedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC)(GLuint program, GLenum shadertype, const GLchar *name); GLAPI PFNGLGETSUBROUTINEINDEXPROC glad_glGetSubroutineIndex; #define glGetSubroutineIndex glad_glGetSubroutineIndex typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC)(GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); GLAPI PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC glad_glGetActiveSubroutineUniformiv; #define glGetActiveSubroutineUniformiv glad_glGetActiveSubroutineUniformiv typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC)(GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); GLAPI PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC glad_glGetActiveSubroutineUniformName; #define glGetActiveSubroutineUniformName glad_glGetActiveSubroutineUniformName typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINENAMEPROC)(GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); GLAPI PFNGLGETACTIVESUBROUTINENAMEPROC glad_glGetActiveSubroutineName; #define glGetActiveSubroutineName glad_glGetActiveSubroutineName typedef void (APIENTRYP PFNGLUNIFORMSUBROUTINESUIVPROC)(GLenum shadertype, GLsizei count, const GLuint *indices); GLAPI PFNGLUNIFORMSUBROUTINESUIVPROC glad_glUniformSubroutinesuiv; #define glUniformSubroutinesuiv glad_glUniformSubroutinesuiv typedef void (APIENTRYP PFNGLGETUNIFORMSUBROUTINEUIVPROC)(GLenum shadertype, GLint location, GLuint *params); GLAPI PFNGLGETUNIFORMSUBROUTINEUIVPROC glad_glGetUniformSubroutineuiv; #define glGetUniformSubroutineuiv glad_glGetUniformSubroutineuiv typedef void (APIENTRYP PFNGLGETPROGRAMSTAGEIVPROC)(GLuint program, GLenum shadertype, GLenum pname, GLint *values); GLAPI PFNGLGETPROGRAMSTAGEIVPROC glad_glGetProgramStageiv; #define glGetProgramStageiv glad_glGetProgramStageiv typedef void (APIENTRYP PFNGLPATCHPARAMETERIPROC)(GLenum pname, GLint value); GLAPI PFNGLPATCHPARAMETERIPROC glad_glPatchParameteri; #define glPatchParameteri glad_glPatchParameteri typedef void (APIENTRYP PFNGLPATCHPARAMETERFVPROC)(GLenum pname, const GLfloat *values); GLAPI PFNGLPATCHPARAMETERFVPROC glad_glPatchParameterfv; #define glPatchParameterfv glad_glPatchParameterfv typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC)(GLenum target, GLuint id); GLAPI PFNGLBINDTRANSFORMFEEDBACKPROC glad_glBindTransformFeedback; #define glBindTransformFeedback glad_glBindTransformFeedback typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC)(GLsizei n, const GLuint *ids); GLAPI PFNGLDELETETRANSFORMFEEDBACKSPROC glad_glDeleteTransformFeedbacks; #define glDeleteTransformFeedbacks glad_glDeleteTransformFeedbacks typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC)(GLsizei n, GLuint *ids); GLAPI PFNGLGENTRANSFORMFEEDBACKSPROC glad_glGenTransformFeedbacks; #define glGenTransformFeedbacks glad_glGenTransformFeedbacks typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC)(GLuint id); GLAPI PFNGLISTRANSFORMFEEDBACKPROC glad_glIsTransformFeedback; #define glIsTransformFeedback glad_glIsTransformFeedback typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC)(void); GLAPI PFNGLPAUSETRANSFORMFEEDBACKPROC glad_glPauseTransformFeedback; #define glPauseTransformFeedback glad_glPauseTransformFeedback typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC)(void); GLAPI PFNGLRESUMETRANSFORMFEEDBACKPROC glad_glResumeTransformFeedback; #define glResumeTransformFeedback glad_glResumeTransformFeedback typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKPROC)(GLenum mode, GLuint id); GLAPI PFNGLDRAWTRANSFORMFEEDBACKPROC glad_glDrawTransformFeedback; #define glDrawTransformFeedback glad_glDrawTransformFeedback typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC)(GLenum mode, GLuint id, GLuint stream); GLAPI PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC glad_glDrawTransformFeedbackStream; #define glDrawTransformFeedbackStream glad_glDrawTransformFeedbackStream typedef void (APIENTRYP PFNGLBEGINQUERYINDEXEDPROC)(GLenum target, GLuint index, GLuint id); GLAPI PFNGLBEGINQUERYINDEXEDPROC glad_glBeginQueryIndexed; #define glBeginQueryIndexed glad_glBeginQueryIndexed typedef void (APIENTRYP PFNGLENDQUERYINDEXEDPROC)(GLenum target, GLuint index); GLAPI PFNGLENDQUERYINDEXEDPROC glad_glEndQueryIndexed; #define glEndQueryIndexed glad_glEndQueryIndexed typedef void (APIENTRYP PFNGLGETQUERYINDEXEDIVPROC)(GLenum target, GLuint index, GLenum pname, GLint *params); GLAPI PFNGLGETQUERYINDEXEDIVPROC glad_glGetQueryIndexediv; #define glGetQueryIndexediv glad_glGetQueryIndexediv #endif #define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242 #define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243 #define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244 #define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245 #define GL_DEBUG_SOURCE_API_ARB 0x8246 #define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247 #define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248 #define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249 #define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A #define GL_DEBUG_SOURCE_OTHER_ARB 0x824B #define GL_DEBUG_TYPE_ERROR_ARB 0x824C #define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D #define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E #define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F #define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 #define GL_DEBUG_TYPE_OTHER_ARB 0x8251 #define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143 #define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144 #define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145 #define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146 #define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147 #define GL_DEBUG_SEVERITY_LOW_ARB 0x9148 #ifndef GL_ARB_debug_output #define GL_ARB_debug_output 1 GLAPI int GLAD_GL_ARB_debug_output; typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLARBPROC)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); GLAPI PFNGLDEBUGMESSAGECONTROLARBPROC glad_glDebugMessageControlARB; #define glDebugMessageControlARB glad_glDebugMessageControlARB typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTARBPROC)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); GLAPI PFNGLDEBUGMESSAGEINSERTARBPROC glad_glDebugMessageInsertARB; #define glDebugMessageInsertARB glad_glDebugMessageInsertARB typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKARBPROC)(GLDEBUGPROCARB callback, const void *userParam); GLAPI PFNGLDEBUGMESSAGECALLBACKARBPROC glad_glDebugMessageCallbackARB; #define glDebugMessageCallbackARB glad_glDebugMessageCallbackARB typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGARBPROC)(GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); GLAPI PFNGLGETDEBUGMESSAGELOGARBPROC glad_glGetDebugMessageLogARB; #define glGetDebugMessageLogARB glad_glGetDebugMessageLogARB #endif #ifdef __cplusplus } #endif #endif ================================================ FILE: libraries/glad/glad_gles3.c ================================================ /* OpenGL ES loader generated by glad 0.1.36 on Mon Aug 22 22:02:21 2022. Language/Generator: C/C++ Specification: gl APIs: gles2=3.0 Profile: core Extensions: Loader: True Local files: False Omit khrplatform: False Reproducible: False Commandline: --profile="core" --api="gles2=3.0" --generator="c" --spec="gl" --extensions="" Online: https://glad.dav1d.de/#profile=core&language=c&specification=gl&loader=on&api=gles2%3D3.0 */ #include #include #include #include struct gladGLversionStruct GLVersion = { 0, 0 }; #if defined(GL_ES_VERSION_3_0) || defined(GL_VERSION_3_0) #define _GLAD_IS_SOME_NEW_VERSION 1 #endif static int max_loaded_major; static int max_loaded_minor; static const char *exts = NULL; static int num_exts_i = 0; static char **exts_i = NULL; static int get_exts(void) { #ifdef _GLAD_IS_SOME_NEW_VERSION if(max_loaded_major < 3) { #endif exts = (const char *)glGetString(GL_EXTENSIONS); #ifdef _GLAD_IS_SOME_NEW_VERSION } else { unsigned int index; num_exts_i = 0; glGetIntegerv(GL_NUM_EXTENSIONS, &num_exts_i); if (num_exts_i > 0) { exts_i = (char **)malloc((size_t)num_exts_i * (sizeof *exts_i)); } if (exts_i == NULL) { return 0; } for(index = 0; index < (unsigned)num_exts_i; index++) { const char *gl_str_tmp = (const char*)glGetStringi(GL_EXTENSIONS, index); size_t len = strlen(gl_str_tmp); char *local_str = (char*)malloc((len+1) * sizeof(char)); if(local_str != NULL) { memcpy(local_str, gl_str_tmp, (len+1) * sizeof(char)); } exts_i[index] = local_str; } } #endif return 1; } static void free_exts(void) { if (exts_i != NULL) { int index; for(index = 0; index < num_exts_i; index++) { free((char *)exts_i[index]); } free((void *)exts_i); exts_i = NULL; } } static int has_ext(const char *ext) { #ifdef _GLAD_IS_SOME_NEW_VERSION if(max_loaded_major < 3) { #endif const char *extensions; const char *loc; const char *terminator; extensions = exts; if(extensions == NULL || ext == NULL) { return 0; } while(1) { loc = strstr(extensions, ext); if(loc == NULL) { return 0; } terminator = loc + strlen(ext); if((loc == extensions || *(loc - 1) == ' ') && (*terminator == ' ' || *terminator == '\0')) { return 1; } extensions = terminator; } #ifdef _GLAD_IS_SOME_NEW_VERSION } else { int index; if(exts_i == NULL) return 0; for(index = 0; index < num_exts_i; index++) { const char *e = exts_i[index]; if(exts_i[index] != NULL && strcmp(e, ext) == 0) { return 1; } } } #endif return 0; } int GLAD_GL_ES_VERSION_2_0 = 0; int GLAD_GL_ES_VERSION_3_0 = 0; PFNGLACTIVETEXTUREPROC glad_glActiveTexture = NULL; PFNGLATTACHSHADERPROC glad_glAttachShader = NULL; PFNGLBEGINQUERYPROC glad_glBeginQuery = NULL; PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback = NULL; PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation = NULL; PFNGLBINDBUFFERPROC glad_glBindBuffer = NULL; PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase = NULL; PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange = NULL; PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer = NULL; PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer = NULL; PFNGLBINDSAMPLERPROC glad_glBindSampler = NULL; PFNGLBINDTEXTUREPROC glad_glBindTexture = NULL; PFNGLBINDTRANSFORMFEEDBACKPROC glad_glBindTransformFeedback = NULL; PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray = NULL; PFNGLBLENDCOLORPROC glad_glBlendColor = NULL; PFNGLBLENDEQUATIONPROC glad_glBlendEquation = NULL; PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate = NULL; PFNGLBLENDFUNCPROC glad_glBlendFunc = NULL; PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate = NULL; PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer = NULL; PFNGLBUFFERDATAPROC glad_glBufferData = NULL; PFNGLBUFFERSUBDATAPROC glad_glBufferSubData = NULL; PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus = NULL; PFNGLCLEARPROC glad_glClear = NULL; PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi = NULL; PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv = NULL; PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv = NULL; PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv = NULL; PFNGLCLEARCOLORPROC glad_glClearColor = NULL; PFNGLCLEARDEPTHFPROC glad_glClearDepthf = NULL; PFNGLCLEARSTENCILPROC glad_glClearStencil = NULL; PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync = NULL; PFNGLCOLORMASKPROC glad_glColorMask = NULL; PFNGLCOMPILESHADERPROC glad_glCompileShader = NULL; PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D = NULL; PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D = NULL; PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D = NULL; PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D = NULL; PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData = NULL; PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D = NULL; PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D = NULL; PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D = NULL; PFNGLCREATEPROGRAMPROC glad_glCreateProgram = NULL; PFNGLCREATESHADERPROC glad_glCreateShader = NULL; PFNGLCULLFACEPROC glad_glCullFace = NULL; PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers = NULL; PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers = NULL; PFNGLDELETEPROGRAMPROC glad_glDeleteProgram = NULL; PFNGLDELETEQUERIESPROC glad_glDeleteQueries = NULL; PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers = NULL; PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers = NULL; PFNGLDELETESHADERPROC glad_glDeleteShader = NULL; PFNGLDELETESYNCPROC glad_glDeleteSync = NULL; PFNGLDELETETEXTURESPROC glad_glDeleteTextures = NULL; PFNGLDELETETRANSFORMFEEDBACKSPROC glad_glDeleteTransformFeedbacks = NULL; PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays = NULL; PFNGLDEPTHFUNCPROC glad_glDepthFunc = NULL; PFNGLDEPTHMASKPROC glad_glDepthMask = NULL; PFNGLDEPTHRANGEFPROC glad_glDepthRangef = NULL; PFNGLDETACHSHADERPROC glad_glDetachShader = NULL; PFNGLDISABLEPROC glad_glDisable = NULL; PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray = NULL; PFNGLDRAWARRAYSPROC glad_glDrawArrays = NULL; PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced = NULL; PFNGLDRAWBUFFERSPROC glad_glDrawBuffers = NULL; PFNGLDRAWELEMENTSPROC glad_glDrawElements = NULL; PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced = NULL; PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements = NULL; PFNGLENABLEPROC glad_glEnable = NULL; PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray = NULL; PFNGLENDQUERYPROC glad_glEndQuery = NULL; PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback = NULL; PFNGLFENCESYNCPROC glad_glFenceSync = NULL; PFNGLFINISHPROC glad_glFinish = NULL; PFNGLFLUSHPROC glad_glFlush = NULL; PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange = NULL; PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer = NULL; PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D = NULL; PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer = NULL; PFNGLFRONTFACEPROC glad_glFrontFace = NULL; PFNGLGENBUFFERSPROC glad_glGenBuffers = NULL; PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers = NULL; PFNGLGENQUERIESPROC glad_glGenQueries = NULL; PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers = NULL; PFNGLGENSAMPLERSPROC glad_glGenSamplers = NULL; PFNGLGENTEXTURESPROC glad_glGenTextures = NULL; PFNGLGENTRANSFORMFEEDBACKSPROC glad_glGenTransformFeedbacks = NULL; PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays = NULL; PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap = NULL; PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib = NULL; PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform = NULL; PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName = NULL; PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv = NULL; PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv = NULL; PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders = NULL; PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation = NULL; PFNGLGETBOOLEANVPROC glad_glGetBooleanv = NULL; PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v = NULL; PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv = NULL; PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv = NULL; PFNGLGETERRORPROC glad_glGetError = NULL; PFNGLGETFLOATVPROC glad_glGetFloatv = NULL; PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation = NULL; PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv = NULL; PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v = NULL; PFNGLGETINTEGER64VPROC glad_glGetInteger64v = NULL; PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v = NULL; PFNGLGETINTEGERVPROC glad_glGetIntegerv = NULL; PFNGLGETINTERNALFORMATIVPROC glad_glGetInternalformativ = NULL; PFNGLGETPROGRAMBINARYPROC glad_glGetProgramBinary = NULL; PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog = NULL; PFNGLGETPROGRAMIVPROC glad_glGetProgramiv = NULL; PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv = NULL; PFNGLGETQUERYIVPROC glad_glGetQueryiv = NULL; PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv = NULL; PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv = NULL; PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv = NULL; PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog = NULL; PFNGLGETSHADERPRECISIONFORMATPROC glad_glGetShaderPrecisionFormat = NULL; PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource = NULL; PFNGLGETSHADERIVPROC glad_glGetShaderiv = NULL; PFNGLGETSTRINGPROC glad_glGetString = NULL; PFNGLGETSTRINGIPROC glad_glGetStringi = NULL; PFNGLGETSYNCIVPROC glad_glGetSynciv = NULL; PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv = NULL; PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv = NULL; PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying = NULL; PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex = NULL; PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices = NULL; PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation = NULL; PFNGLGETUNIFORMFVPROC glad_glGetUniformfv = NULL; PFNGLGETUNIFORMIVPROC glad_glGetUniformiv = NULL; PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv = NULL; PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv = NULL; PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv = NULL; PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv = NULL; PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv = NULL; PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv = NULL; PFNGLHINTPROC glad_glHint = NULL; PFNGLINVALIDATEFRAMEBUFFERPROC glad_glInvalidateFramebuffer = NULL; PFNGLINVALIDATESUBFRAMEBUFFERPROC glad_glInvalidateSubFramebuffer = NULL; PFNGLISBUFFERPROC glad_glIsBuffer = NULL; PFNGLISENABLEDPROC glad_glIsEnabled = NULL; PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer = NULL; PFNGLISPROGRAMPROC glad_glIsProgram = NULL; PFNGLISQUERYPROC glad_glIsQuery = NULL; PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer = NULL; PFNGLISSAMPLERPROC glad_glIsSampler = NULL; PFNGLISSHADERPROC glad_glIsShader = NULL; PFNGLISSYNCPROC glad_glIsSync = NULL; PFNGLISTEXTUREPROC glad_glIsTexture = NULL; PFNGLISTRANSFORMFEEDBACKPROC glad_glIsTransformFeedback = NULL; PFNGLISVERTEXARRAYPROC glad_glIsVertexArray = NULL; PFNGLLINEWIDTHPROC glad_glLineWidth = NULL; PFNGLLINKPROGRAMPROC glad_glLinkProgram = NULL; PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange = NULL; PFNGLPAUSETRANSFORMFEEDBACKPROC glad_glPauseTransformFeedback = NULL; PFNGLPIXELSTOREIPROC glad_glPixelStorei = NULL; PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset = NULL; PFNGLPROGRAMBINARYPROC glad_glProgramBinary = NULL; PFNGLPROGRAMPARAMETERIPROC glad_glProgramParameteri = NULL; PFNGLREADBUFFERPROC glad_glReadBuffer = NULL; PFNGLREADPIXELSPROC glad_glReadPixels = NULL; PFNGLRELEASESHADERCOMPILERPROC glad_glReleaseShaderCompiler = NULL; PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage = NULL; PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample = NULL; PFNGLRESUMETRANSFORMFEEDBACKPROC glad_glResumeTransformFeedback = NULL; PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage = NULL; PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf = NULL; PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv = NULL; PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri = NULL; PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv = NULL; PFNGLSCISSORPROC glad_glScissor = NULL; PFNGLSHADERBINARYPROC glad_glShaderBinary = NULL; PFNGLSHADERSOURCEPROC glad_glShaderSource = NULL; PFNGLSTENCILFUNCPROC glad_glStencilFunc = NULL; PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate = NULL; PFNGLSTENCILMASKPROC glad_glStencilMask = NULL; PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate = NULL; PFNGLSTENCILOPPROC glad_glStencilOp = NULL; PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate = NULL; PFNGLTEXIMAGE2DPROC glad_glTexImage2D = NULL; PFNGLTEXIMAGE3DPROC glad_glTexImage3D = NULL; PFNGLTEXPARAMETERFPROC glad_glTexParameterf = NULL; PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv = NULL; PFNGLTEXPARAMETERIPROC glad_glTexParameteri = NULL; PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv = NULL; PFNGLTEXSTORAGE2DPROC glad_glTexStorage2D = NULL; PFNGLTEXSTORAGE3DPROC glad_glTexStorage3D = NULL; PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D = NULL; PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D = NULL; PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings = NULL; PFNGLUNIFORM1FPROC glad_glUniform1f = NULL; PFNGLUNIFORM1FVPROC glad_glUniform1fv = NULL; PFNGLUNIFORM1IPROC glad_glUniform1i = NULL; PFNGLUNIFORM1IVPROC glad_glUniform1iv = NULL; PFNGLUNIFORM1UIPROC glad_glUniform1ui = NULL; PFNGLUNIFORM1UIVPROC glad_glUniform1uiv = NULL; PFNGLUNIFORM2FPROC glad_glUniform2f = NULL; PFNGLUNIFORM2FVPROC glad_glUniform2fv = NULL; PFNGLUNIFORM2IPROC glad_glUniform2i = NULL; PFNGLUNIFORM2IVPROC glad_glUniform2iv = NULL; PFNGLUNIFORM2UIPROC glad_glUniform2ui = NULL; PFNGLUNIFORM2UIVPROC glad_glUniform2uiv = NULL; PFNGLUNIFORM3FPROC glad_glUniform3f = NULL; PFNGLUNIFORM3FVPROC glad_glUniform3fv = NULL; PFNGLUNIFORM3IPROC glad_glUniform3i = NULL; PFNGLUNIFORM3IVPROC glad_glUniform3iv = NULL; PFNGLUNIFORM3UIPROC glad_glUniform3ui = NULL; PFNGLUNIFORM3UIVPROC glad_glUniform3uiv = NULL; PFNGLUNIFORM4FPROC glad_glUniform4f = NULL; PFNGLUNIFORM4FVPROC glad_glUniform4fv = NULL; PFNGLUNIFORM4IPROC glad_glUniform4i = NULL; PFNGLUNIFORM4IVPROC glad_glUniform4iv = NULL; PFNGLUNIFORM4UIPROC glad_glUniform4ui = NULL; PFNGLUNIFORM4UIVPROC glad_glUniform4uiv = NULL; PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding = NULL; PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv = NULL; PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv = NULL; PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv = NULL; PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv = NULL; PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv = NULL; PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv = NULL; PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv = NULL; PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv = NULL; PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv = NULL; PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer = NULL; PFNGLUSEPROGRAMPROC glad_glUseProgram = NULL; PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram = NULL; PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f = NULL; PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv = NULL; PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f = NULL; PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv = NULL; PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f = NULL; PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv = NULL; PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f = NULL; PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv = NULL; PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor = NULL; PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i = NULL; PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv = NULL; PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui = NULL; PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv = NULL; PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer = NULL; PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer = NULL; PFNGLVIEWPORTPROC glad_glViewport = NULL; PFNGLWAITSYNCPROC glad_glWaitSync = NULL; static void load_GL_ES_VERSION_2_0(GLADloadproc load) { if(!GLAD_GL_ES_VERSION_2_0) return; glad_glActiveTexture = (PFNGLACTIVETEXTUREPROC)load("glActiveTexture"); glad_glAttachShader = (PFNGLATTACHSHADERPROC)load("glAttachShader"); glad_glBindAttribLocation = (PFNGLBINDATTRIBLOCATIONPROC)load("glBindAttribLocation"); glad_glBindBuffer = (PFNGLBINDBUFFERPROC)load("glBindBuffer"); glad_glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)load("glBindFramebuffer"); glad_glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)load("glBindRenderbuffer"); glad_glBindTexture = (PFNGLBINDTEXTUREPROC)load("glBindTexture"); glad_glBlendColor = (PFNGLBLENDCOLORPROC)load("glBlendColor"); glad_glBlendEquation = (PFNGLBLENDEQUATIONPROC)load("glBlendEquation"); glad_glBlendEquationSeparate = (PFNGLBLENDEQUATIONSEPARATEPROC)load("glBlendEquationSeparate"); glad_glBlendFunc = (PFNGLBLENDFUNCPROC)load("glBlendFunc"); glad_glBlendFuncSeparate = (PFNGLBLENDFUNCSEPARATEPROC)load("glBlendFuncSeparate"); glad_glBufferData = (PFNGLBUFFERDATAPROC)load("glBufferData"); glad_glBufferSubData = (PFNGLBUFFERSUBDATAPROC)load("glBufferSubData"); glad_glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)load("glCheckFramebufferStatus"); glad_glClear = (PFNGLCLEARPROC)load("glClear"); glad_glClearColor = (PFNGLCLEARCOLORPROC)load("glClearColor"); glad_glClearDepthf = (PFNGLCLEARDEPTHFPROC)load("glClearDepthf"); glad_glClearStencil = (PFNGLCLEARSTENCILPROC)load("glClearStencil"); glad_glColorMask = (PFNGLCOLORMASKPROC)load("glColorMask"); glad_glCompileShader = (PFNGLCOMPILESHADERPROC)load("glCompileShader"); glad_glCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)load("glCompressedTexImage2D"); glad_glCompressedTexSubImage2D = (PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)load("glCompressedTexSubImage2D"); glad_glCopyTexImage2D = (PFNGLCOPYTEXIMAGE2DPROC)load("glCopyTexImage2D"); glad_glCopyTexSubImage2D = (PFNGLCOPYTEXSUBIMAGE2DPROC)load("glCopyTexSubImage2D"); glad_glCreateProgram = (PFNGLCREATEPROGRAMPROC)load("glCreateProgram"); glad_glCreateShader = (PFNGLCREATESHADERPROC)load("glCreateShader"); glad_glCullFace = (PFNGLCULLFACEPROC)load("glCullFace"); glad_glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)load("glDeleteBuffers"); glad_glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)load("glDeleteFramebuffers"); glad_glDeleteProgram = (PFNGLDELETEPROGRAMPROC)load("glDeleteProgram"); glad_glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)load("glDeleteRenderbuffers"); glad_glDeleteShader = (PFNGLDELETESHADERPROC)load("glDeleteShader"); glad_glDeleteTextures = (PFNGLDELETETEXTURESPROC)load("glDeleteTextures"); glad_glDepthFunc = (PFNGLDEPTHFUNCPROC)load("glDepthFunc"); glad_glDepthMask = (PFNGLDEPTHMASKPROC)load("glDepthMask"); glad_glDepthRangef = (PFNGLDEPTHRANGEFPROC)load("glDepthRangef"); glad_glDetachShader = (PFNGLDETACHSHADERPROC)load("glDetachShader"); glad_glDisable = (PFNGLDISABLEPROC)load("glDisable"); glad_glDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC)load("glDisableVertexAttribArray"); glad_glDrawArrays = (PFNGLDRAWARRAYSPROC)load("glDrawArrays"); glad_glDrawElements = (PFNGLDRAWELEMENTSPROC)load("glDrawElements"); glad_glEnable = (PFNGLENABLEPROC)load("glEnable"); glad_glEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC)load("glEnableVertexAttribArray"); glad_glFinish = (PFNGLFINISHPROC)load("glFinish"); glad_glFlush = (PFNGLFLUSHPROC)load("glFlush"); glad_glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC)load("glFramebufferRenderbuffer"); glad_glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)load("glFramebufferTexture2D"); glad_glFrontFace = (PFNGLFRONTFACEPROC)load("glFrontFace"); glad_glGenBuffers = (PFNGLGENBUFFERSPROC)load("glGenBuffers"); glad_glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC)load("glGenerateMipmap"); glad_glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)load("glGenFramebuffers"); glad_glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)load("glGenRenderbuffers"); glad_glGenTextures = (PFNGLGENTEXTURESPROC)load("glGenTextures"); glad_glGetActiveAttrib = (PFNGLGETACTIVEATTRIBPROC)load("glGetActiveAttrib"); glad_glGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC)load("glGetActiveUniform"); glad_glGetAttachedShaders = (PFNGLGETATTACHEDSHADERSPROC)load("glGetAttachedShaders"); glad_glGetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC)load("glGetAttribLocation"); glad_glGetBooleanv = (PFNGLGETBOOLEANVPROC)load("glGetBooleanv"); glad_glGetBufferParameteriv = (PFNGLGETBUFFERPARAMETERIVPROC)load("glGetBufferParameteriv"); glad_glGetError = (PFNGLGETERRORPROC)load("glGetError"); glad_glGetFloatv = (PFNGLGETFLOATVPROC)load("glGetFloatv"); glad_glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)load("glGetFramebufferAttachmentParameteriv"); glad_glGetIntegerv = (PFNGLGETINTEGERVPROC)load("glGetIntegerv"); glad_glGetProgramiv = (PFNGLGETPROGRAMIVPROC)load("glGetProgramiv"); glad_glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC)load("glGetProgramInfoLog"); glad_glGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVPROC)load("glGetRenderbufferParameteriv"); glad_glGetShaderiv = (PFNGLGETSHADERIVPROC)load("glGetShaderiv"); glad_glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)load("glGetShaderInfoLog"); glad_glGetShaderPrecisionFormat = (PFNGLGETSHADERPRECISIONFORMATPROC)load("glGetShaderPrecisionFormat"); glad_glGetShaderSource = (PFNGLGETSHADERSOURCEPROC)load("glGetShaderSource"); glad_glGetString = (PFNGLGETSTRINGPROC)load("glGetString"); glad_glGetTexParameterfv = (PFNGLGETTEXPARAMETERFVPROC)load("glGetTexParameterfv"); glad_glGetTexParameteriv = (PFNGLGETTEXPARAMETERIVPROC)load("glGetTexParameteriv"); glad_glGetUniformfv = (PFNGLGETUNIFORMFVPROC)load("glGetUniformfv"); glad_glGetUniformiv = (PFNGLGETUNIFORMIVPROC)load("glGetUniformiv"); glad_glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC)load("glGetUniformLocation"); glad_glGetVertexAttribfv = (PFNGLGETVERTEXATTRIBFVPROC)load("glGetVertexAttribfv"); glad_glGetVertexAttribiv = (PFNGLGETVERTEXATTRIBIVPROC)load("glGetVertexAttribiv"); glad_glGetVertexAttribPointerv = (PFNGLGETVERTEXATTRIBPOINTERVPROC)load("glGetVertexAttribPointerv"); glad_glHint = (PFNGLHINTPROC)load("glHint"); glad_glIsBuffer = (PFNGLISBUFFERPROC)load("glIsBuffer"); glad_glIsEnabled = (PFNGLISENABLEDPROC)load("glIsEnabled"); glad_glIsFramebuffer = (PFNGLISFRAMEBUFFERPROC)load("glIsFramebuffer"); glad_glIsProgram = (PFNGLISPROGRAMPROC)load("glIsProgram"); glad_glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC)load("glIsRenderbuffer"); glad_glIsShader = (PFNGLISSHADERPROC)load("glIsShader"); glad_glIsTexture = (PFNGLISTEXTUREPROC)load("glIsTexture"); glad_glLineWidth = (PFNGLLINEWIDTHPROC)load("glLineWidth"); glad_glLinkProgram = (PFNGLLINKPROGRAMPROC)load("glLinkProgram"); glad_glPixelStorei = (PFNGLPIXELSTOREIPROC)load("glPixelStorei"); glad_glPolygonOffset = (PFNGLPOLYGONOFFSETPROC)load("glPolygonOffset"); glad_glReadPixels = (PFNGLREADPIXELSPROC)load("glReadPixels"); glad_glReleaseShaderCompiler = (PFNGLRELEASESHADERCOMPILERPROC)load("glReleaseShaderCompiler"); glad_glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)load("glRenderbufferStorage"); glad_glSampleCoverage = (PFNGLSAMPLECOVERAGEPROC)load("glSampleCoverage"); glad_glScissor = (PFNGLSCISSORPROC)load("glScissor"); glad_glShaderBinary = (PFNGLSHADERBINARYPROC)load("glShaderBinary"); glad_glShaderSource = (PFNGLSHADERSOURCEPROC)load("glShaderSource"); glad_glStencilFunc = (PFNGLSTENCILFUNCPROC)load("glStencilFunc"); glad_glStencilFuncSeparate = (PFNGLSTENCILFUNCSEPARATEPROC)load("glStencilFuncSeparate"); glad_glStencilMask = (PFNGLSTENCILMASKPROC)load("glStencilMask"); glad_glStencilMaskSeparate = (PFNGLSTENCILMASKSEPARATEPROC)load("glStencilMaskSeparate"); glad_glStencilOp = (PFNGLSTENCILOPPROC)load("glStencilOp"); glad_glStencilOpSeparate = (PFNGLSTENCILOPSEPARATEPROC)load("glStencilOpSeparate"); glad_glTexImage2D = (PFNGLTEXIMAGE2DPROC)load("glTexImage2D"); glad_glTexParameterf = (PFNGLTEXPARAMETERFPROC)load("glTexParameterf"); glad_glTexParameterfv = (PFNGLTEXPARAMETERFVPROC)load("glTexParameterfv"); glad_glTexParameteri = (PFNGLTEXPARAMETERIPROC)load("glTexParameteri"); glad_glTexParameteriv = (PFNGLTEXPARAMETERIVPROC)load("glTexParameteriv"); glad_glTexSubImage2D = (PFNGLTEXSUBIMAGE2DPROC)load("glTexSubImage2D"); glad_glUniform1f = (PFNGLUNIFORM1FPROC)load("glUniform1f"); glad_glUniform1fv = (PFNGLUNIFORM1FVPROC)load("glUniform1fv"); glad_glUniform1i = (PFNGLUNIFORM1IPROC)load("glUniform1i"); glad_glUniform1iv = (PFNGLUNIFORM1IVPROC)load("glUniform1iv"); glad_glUniform2f = (PFNGLUNIFORM2FPROC)load("glUniform2f"); glad_glUniform2fv = (PFNGLUNIFORM2FVPROC)load("glUniform2fv"); glad_glUniform2i = (PFNGLUNIFORM2IPROC)load("glUniform2i"); glad_glUniform2iv = (PFNGLUNIFORM2IVPROC)load("glUniform2iv"); glad_glUniform3f = (PFNGLUNIFORM3FPROC)load("glUniform3f"); glad_glUniform3fv = (PFNGLUNIFORM3FVPROC)load("glUniform3fv"); glad_glUniform3i = (PFNGLUNIFORM3IPROC)load("glUniform3i"); glad_glUniform3iv = (PFNGLUNIFORM3IVPROC)load("glUniform3iv"); glad_glUniform4f = (PFNGLUNIFORM4FPROC)load("glUniform4f"); glad_glUniform4fv = (PFNGLUNIFORM4FVPROC)load("glUniform4fv"); glad_glUniform4i = (PFNGLUNIFORM4IPROC)load("glUniform4i"); glad_glUniform4iv = (PFNGLUNIFORM4IVPROC)load("glUniform4iv"); glad_glUniformMatrix2fv = (PFNGLUNIFORMMATRIX2FVPROC)load("glUniformMatrix2fv"); glad_glUniformMatrix3fv = (PFNGLUNIFORMMATRIX3FVPROC)load("glUniformMatrix3fv"); glad_glUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC)load("glUniformMatrix4fv"); glad_glUseProgram = (PFNGLUSEPROGRAMPROC)load("glUseProgram"); glad_glValidateProgram = (PFNGLVALIDATEPROGRAMPROC)load("glValidateProgram"); glad_glVertexAttrib1f = (PFNGLVERTEXATTRIB1FPROC)load("glVertexAttrib1f"); glad_glVertexAttrib1fv = (PFNGLVERTEXATTRIB1FVPROC)load("glVertexAttrib1fv"); glad_glVertexAttrib2f = (PFNGLVERTEXATTRIB2FPROC)load("glVertexAttrib2f"); glad_glVertexAttrib2fv = (PFNGLVERTEXATTRIB2FVPROC)load("glVertexAttrib2fv"); glad_glVertexAttrib3f = (PFNGLVERTEXATTRIB3FPROC)load("glVertexAttrib3f"); glad_glVertexAttrib3fv = (PFNGLVERTEXATTRIB3FVPROC)load("glVertexAttrib3fv"); glad_glVertexAttrib4f = (PFNGLVERTEXATTRIB4FPROC)load("glVertexAttrib4f"); glad_glVertexAttrib4fv = (PFNGLVERTEXATTRIB4FVPROC)load("glVertexAttrib4fv"); glad_glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC)load("glVertexAttribPointer"); glad_glViewport = (PFNGLVIEWPORTPROC)load("glViewport"); } static void load_GL_ES_VERSION_3_0(GLADloadproc load) { if(!GLAD_GL_ES_VERSION_3_0) return; glad_glReadBuffer = (PFNGLREADBUFFERPROC)load("glReadBuffer"); glad_glDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC)load("glDrawRangeElements"); glad_glTexImage3D = (PFNGLTEXIMAGE3DPROC)load("glTexImage3D"); glad_glTexSubImage3D = (PFNGLTEXSUBIMAGE3DPROC)load("glTexSubImage3D"); glad_glCopyTexSubImage3D = (PFNGLCOPYTEXSUBIMAGE3DPROC)load("glCopyTexSubImage3D"); glad_glCompressedTexImage3D = (PFNGLCOMPRESSEDTEXIMAGE3DPROC)load("glCompressedTexImage3D"); glad_glCompressedTexSubImage3D = (PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)load("glCompressedTexSubImage3D"); glad_glGenQueries = (PFNGLGENQUERIESPROC)load("glGenQueries"); glad_glDeleteQueries = (PFNGLDELETEQUERIESPROC)load("glDeleteQueries"); glad_glIsQuery = (PFNGLISQUERYPROC)load("glIsQuery"); glad_glBeginQuery = (PFNGLBEGINQUERYPROC)load("glBeginQuery"); glad_glEndQuery = (PFNGLENDQUERYPROC)load("glEndQuery"); glad_glGetQueryiv = (PFNGLGETQUERYIVPROC)load("glGetQueryiv"); glad_glGetQueryObjectuiv = (PFNGLGETQUERYOBJECTUIVPROC)load("glGetQueryObjectuiv"); glad_glUnmapBuffer = (PFNGLUNMAPBUFFERPROC)load("glUnmapBuffer"); glad_glGetBufferPointerv = (PFNGLGETBUFFERPOINTERVPROC)load("glGetBufferPointerv"); glad_glDrawBuffers = (PFNGLDRAWBUFFERSPROC)load("glDrawBuffers"); glad_glUniformMatrix2x3fv = (PFNGLUNIFORMMATRIX2X3FVPROC)load("glUniformMatrix2x3fv"); glad_glUniformMatrix3x2fv = (PFNGLUNIFORMMATRIX3X2FVPROC)load("glUniformMatrix3x2fv"); glad_glUniformMatrix2x4fv = (PFNGLUNIFORMMATRIX2X4FVPROC)load("glUniformMatrix2x4fv"); glad_glUniformMatrix4x2fv = (PFNGLUNIFORMMATRIX4X2FVPROC)load("glUniformMatrix4x2fv"); glad_glUniformMatrix3x4fv = (PFNGLUNIFORMMATRIX3X4FVPROC)load("glUniformMatrix3x4fv"); glad_glUniformMatrix4x3fv = (PFNGLUNIFORMMATRIX4X3FVPROC)load("glUniformMatrix4x3fv"); glad_glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)load("glBlitFramebuffer"); glad_glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)load("glRenderbufferStorageMultisample"); glad_glFramebufferTextureLayer = (PFNGLFRAMEBUFFERTEXTURELAYERPROC)load("glFramebufferTextureLayer"); glad_glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC)load("glMapBufferRange"); glad_glFlushMappedBufferRange = (PFNGLFLUSHMAPPEDBUFFERRANGEPROC)load("glFlushMappedBufferRange"); glad_glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC)load("glBindVertexArray"); glad_glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC)load("glDeleteVertexArrays"); glad_glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC)load("glGenVertexArrays"); glad_glIsVertexArray = (PFNGLISVERTEXARRAYPROC)load("glIsVertexArray"); glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load("glGetIntegeri_v"); glad_glBeginTransformFeedback = (PFNGLBEGINTRANSFORMFEEDBACKPROC)load("glBeginTransformFeedback"); glad_glEndTransformFeedback = (PFNGLENDTRANSFORMFEEDBACKPROC)load("glEndTransformFeedback"); glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load("glBindBufferRange"); glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load("glBindBufferBase"); glad_glTransformFeedbackVaryings = (PFNGLTRANSFORMFEEDBACKVARYINGSPROC)load("glTransformFeedbackVaryings"); glad_glGetTransformFeedbackVarying = (PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)load("glGetTransformFeedbackVarying"); glad_glVertexAttribIPointer = (PFNGLVERTEXATTRIBIPOINTERPROC)load("glVertexAttribIPointer"); glad_glGetVertexAttribIiv = (PFNGLGETVERTEXATTRIBIIVPROC)load("glGetVertexAttribIiv"); glad_glGetVertexAttribIuiv = (PFNGLGETVERTEXATTRIBIUIVPROC)load("glGetVertexAttribIuiv"); glad_glVertexAttribI4i = (PFNGLVERTEXATTRIBI4IPROC)load("glVertexAttribI4i"); glad_glVertexAttribI4ui = (PFNGLVERTEXATTRIBI4UIPROC)load("glVertexAttribI4ui"); glad_glVertexAttribI4iv = (PFNGLVERTEXATTRIBI4IVPROC)load("glVertexAttribI4iv"); glad_glVertexAttribI4uiv = (PFNGLVERTEXATTRIBI4UIVPROC)load("glVertexAttribI4uiv"); glad_glGetUniformuiv = (PFNGLGETUNIFORMUIVPROC)load("glGetUniformuiv"); glad_glGetFragDataLocation = (PFNGLGETFRAGDATALOCATIONPROC)load("glGetFragDataLocation"); glad_glUniform1ui = (PFNGLUNIFORM1UIPROC)load("glUniform1ui"); glad_glUniform2ui = (PFNGLUNIFORM2UIPROC)load("glUniform2ui"); glad_glUniform3ui = (PFNGLUNIFORM3UIPROC)load("glUniform3ui"); glad_glUniform4ui = (PFNGLUNIFORM4UIPROC)load("glUniform4ui"); glad_glUniform1uiv = (PFNGLUNIFORM1UIVPROC)load("glUniform1uiv"); glad_glUniform2uiv = (PFNGLUNIFORM2UIVPROC)load("glUniform2uiv"); glad_glUniform3uiv = (PFNGLUNIFORM3UIVPROC)load("glUniform3uiv"); glad_glUniform4uiv = (PFNGLUNIFORM4UIVPROC)load("glUniform4uiv"); glad_glClearBufferiv = (PFNGLCLEARBUFFERIVPROC)load("glClearBufferiv"); glad_glClearBufferuiv = (PFNGLCLEARBUFFERUIVPROC)load("glClearBufferuiv"); glad_glClearBufferfv = (PFNGLCLEARBUFFERFVPROC)load("glClearBufferfv"); glad_glClearBufferfi = (PFNGLCLEARBUFFERFIPROC)load("glClearBufferfi"); glad_glGetStringi = (PFNGLGETSTRINGIPROC)load("glGetStringi"); glad_glCopyBufferSubData = (PFNGLCOPYBUFFERSUBDATAPROC)load("glCopyBufferSubData"); glad_glGetUniformIndices = (PFNGLGETUNIFORMINDICESPROC)load("glGetUniformIndices"); glad_glGetActiveUniformsiv = (PFNGLGETACTIVEUNIFORMSIVPROC)load("glGetActiveUniformsiv"); glad_glGetUniformBlockIndex = (PFNGLGETUNIFORMBLOCKINDEXPROC)load("glGetUniformBlockIndex"); glad_glGetActiveUniformBlockiv = (PFNGLGETACTIVEUNIFORMBLOCKIVPROC)load("glGetActiveUniformBlockiv"); glad_glGetActiveUniformBlockName = (PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)load("glGetActiveUniformBlockName"); glad_glUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDINGPROC)load("glUniformBlockBinding"); glad_glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDPROC)load("glDrawArraysInstanced"); glad_glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDPROC)load("glDrawElementsInstanced"); glad_glFenceSync = (PFNGLFENCESYNCPROC)load("glFenceSync"); glad_glIsSync = (PFNGLISSYNCPROC)load("glIsSync"); glad_glDeleteSync = (PFNGLDELETESYNCPROC)load("glDeleteSync"); glad_glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC)load("glClientWaitSync"); glad_glWaitSync = (PFNGLWAITSYNCPROC)load("glWaitSync"); glad_glGetInteger64v = (PFNGLGETINTEGER64VPROC)load("glGetInteger64v"); glad_glGetSynciv = (PFNGLGETSYNCIVPROC)load("glGetSynciv"); glad_glGetInteger64i_v = (PFNGLGETINTEGER64I_VPROC)load("glGetInteger64i_v"); glad_glGetBufferParameteri64v = (PFNGLGETBUFFERPARAMETERI64VPROC)load("glGetBufferParameteri64v"); glad_glGenSamplers = (PFNGLGENSAMPLERSPROC)load("glGenSamplers"); glad_glDeleteSamplers = (PFNGLDELETESAMPLERSPROC)load("glDeleteSamplers"); glad_glIsSampler = (PFNGLISSAMPLERPROC)load("glIsSampler"); glad_glBindSampler = (PFNGLBINDSAMPLERPROC)load("glBindSampler"); glad_glSamplerParameteri = (PFNGLSAMPLERPARAMETERIPROC)load("glSamplerParameteri"); glad_glSamplerParameteriv = (PFNGLSAMPLERPARAMETERIVPROC)load("glSamplerParameteriv"); glad_glSamplerParameterf = (PFNGLSAMPLERPARAMETERFPROC)load("glSamplerParameterf"); glad_glSamplerParameterfv = (PFNGLSAMPLERPARAMETERFVPROC)load("glSamplerParameterfv"); glad_glGetSamplerParameteriv = (PFNGLGETSAMPLERPARAMETERIVPROC)load("glGetSamplerParameteriv"); glad_glGetSamplerParameterfv = (PFNGLGETSAMPLERPARAMETERFVPROC)load("glGetSamplerParameterfv"); glad_glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISORPROC)load("glVertexAttribDivisor"); glad_glBindTransformFeedback = (PFNGLBINDTRANSFORMFEEDBACKPROC)load("glBindTransformFeedback"); glad_glDeleteTransformFeedbacks = (PFNGLDELETETRANSFORMFEEDBACKSPROC)load("glDeleteTransformFeedbacks"); glad_glGenTransformFeedbacks = (PFNGLGENTRANSFORMFEEDBACKSPROC)load("glGenTransformFeedbacks"); glad_glIsTransformFeedback = (PFNGLISTRANSFORMFEEDBACKPROC)load("glIsTransformFeedback"); glad_glPauseTransformFeedback = (PFNGLPAUSETRANSFORMFEEDBACKPROC)load("glPauseTransformFeedback"); glad_glResumeTransformFeedback = (PFNGLRESUMETRANSFORMFEEDBACKPROC)load("glResumeTransformFeedback"); glad_glGetProgramBinary = (PFNGLGETPROGRAMBINARYPROC)load("glGetProgramBinary"); glad_glProgramBinary = (PFNGLPROGRAMBINARYPROC)load("glProgramBinary"); glad_glProgramParameteri = (PFNGLPROGRAMPARAMETERIPROC)load("glProgramParameteri"); glad_glInvalidateFramebuffer = (PFNGLINVALIDATEFRAMEBUFFERPROC)load("glInvalidateFramebuffer"); glad_glInvalidateSubFramebuffer = (PFNGLINVALIDATESUBFRAMEBUFFERPROC)load("glInvalidateSubFramebuffer"); glad_glTexStorage2D = (PFNGLTEXSTORAGE2DPROC)load("glTexStorage2D"); glad_glTexStorage3D = (PFNGLTEXSTORAGE3DPROC)load("glTexStorage3D"); glad_glGetInternalformativ = (PFNGLGETINTERNALFORMATIVPROC)load("glGetInternalformativ"); } static int find_extensionsGLES2(void) { if (!get_exts()) return 0; (void)&has_ext; free_exts(); return 1; } static void find_coreGLES2(void) { /* Thank you @elmindreda * https://github.com/elmindreda/greg/blob/master/templates/greg.c.in#L176 * https://github.com/glfw/glfw/blob/master/src/context.c#L36 */ int i, major, minor; const char* version; const char* prefixes[] = { "OpenGL ES-CM ", "OpenGL ES-CL ", "OpenGL ES ", NULL }; version = (const char*) glGetString(GL_VERSION); if (!version) return; for (i = 0; prefixes[i]; i++) { const size_t length = strlen(prefixes[i]); if (strncmp(version, prefixes[i], length) == 0) { version += length; break; } } /* PR #18 */ #ifdef _MSC_VER sscanf_s(version, "%d.%d", &major, &minor); #else sscanf(version, "%d.%d", &major, &minor); #endif GLVersion.major = major; GLVersion.minor = minor; max_loaded_major = major; max_loaded_minor = minor; GLAD_GL_ES_VERSION_2_0 = (major == 2 && minor >= 0) || major > 2; GLAD_GL_ES_VERSION_3_0 = (major == 3 && minor >= 0) || major > 3; if (GLVersion.major > 3 || (GLVersion.major >= 3 && GLVersion.minor >= 0)) { max_loaded_major = 3; max_loaded_minor = 0; } } int gladLoadGLES2Loader(GLADloadproc load) { GLVersion.major = 0; GLVersion.minor = 0; glGetString = (PFNGLGETSTRINGPROC)load("glGetString"); if(glGetString == NULL) return 0; if(glGetString(GL_VERSION) == NULL) return 0; find_coreGLES2(); load_GL_ES_VERSION_2_0(load); load_GL_ES_VERSION_3_0(load); if (!find_extensionsGLES2()) return 0; return GLVersion.major != 0 || GLVersion.minor != 0; } ================================================ FILE: libraries/glad/glad_gles3.h ================================================ /* OpenGL ES loader generated by glad 0.1.36 on Mon Aug 22 22:02:21 2022. Language/Generator: C/C++ Specification: gl APIs: gles2=3.0 Profile: core Extensions: Loader: True Local files: False Omit khrplatform: False Reproducible: False Commandline: --profile="core" --api="gles2=3.0" --generator="c" --spec="gl" --extensions="" Online: https://glad.dav1d.de/#profile=core&language=c&specification=gl&loader=on&api=gles2%3D3.0 */ #ifndef __glad_h_ #define __glad_h_ #ifdef __gl2_h_ #error OpenGL ES 2 header already included, remove this include, glad already provides it #endif #define __gl2_h_ #ifdef __gl3_h_ #error OpenGL ES 3 header already included, remove this include, glad already provides it #endif #define __gl3_h_ #if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) #define APIENTRY __stdcall #endif #ifndef APIENTRY #define APIENTRY #endif #ifndef APIENTRYP #define APIENTRYP APIENTRY * #endif #ifndef GLAPIENTRY #define GLAPIENTRY APIENTRY #endif #ifdef __cplusplus extern "C" { #endif struct gladGLversionStruct { int major; int minor; }; typedef void* (* GLADloadproc)(const char *name); #ifndef GLAPI # if defined(GLAD_GLAPI_EXPORT) # if defined(_WIN32) || defined(__CYGWIN__) # if defined(GLAD_GLAPI_EXPORT_BUILD) # if defined(__GNUC__) # define GLAPI __attribute__ ((dllexport)) extern # else # define GLAPI __declspec(dllexport) extern # endif # else # if defined(__GNUC__) # define GLAPI __attribute__ ((dllimport)) extern # else # define GLAPI __declspec(dllimport) extern # endif # endif # elif defined(__GNUC__) && defined(GLAD_GLAPI_EXPORT_BUILD) # define GLAPI __attribute__ ((visibility ("default"))) extern # else # define GLAPI extern # endif # else # define GLAPI extern # endif #endif GLAPI struct gladGLversionStruct GLVersion; GLAPI int gladLoadGLES2Loader(GLADloadproc); #include typedef unsigned int GLenum; typedef unsigned char GLboolean; typedef unsigned int GLbitfield; typedef void GLvoid; typedef khronos_int8_t GLbyte; typedef khronos_uint8_t GLubyte; typedef khronos_int16_t GLshort; typedef khronos_uint16_t GLushort; typedef int GLint; typedef unsigned int GLuint; typedef khronos_int32_t GLclampx; typedef int GLsizei; typedef khronos_float_t GLfloat; typedef khronos_float_t GLclampf; typedef double GLdouble; typedef double GLclampd; typedef void *GLeglClientBufferEXT; typedef void *GLeglImageOES; typedef char GLchar; typedef char GLcharARB; #ifdef __APPLE__ typedef void *GLhandleARB; #else typedef unsigned int GLhandleARB; #endif typedef khronos_uint16_t GLhalf; typedef khronos_uint16_t GLhalfARB; typedef khronos_int32_t GLfixed; typedef khronos_intptr_t GLintptr; typedef khronos_intptr_t GLintptrARB; typedef khronos_ssize_t GLsizeiptr; typedef khronos_ssize_t GLsizeiptrARB; typedef khronos_int64_t GLint64; typedef khronos_int64_t GLint64EXT; typedef khronos_uint64_t GLuint64; typedef khronos_uint64_t GLuint64EXT; typedef struct __GLsync *GLsync; struct _cl_context; struct _cl_event; typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); typedef unsigned short GLhalfNV; typedef GLintptr GLvdpauSurfaceNV; typedef void (APIENTRY *GLVULKANPROCNV)(void); #define GL_DEPTH_BUFFER_BIT 0x00000100 #define GL_STENCIL_BUFFER_BIT 0x00000400 #define GL_COLOR_BUFFER_BIT 0x00004000 #define GL_FALSE 0 #define GL_TRUE 1 #define GL_POINTS 0x0000 #define GL_LINES 0x0001 #define GL_LINE_LOOP 0x0002 #define GL_LINE_STRIP 0x0003 #define GL_TRIANGLES 0x0004 #define GL_TRIANGLE_STRIP 0x0005 #define GL_TRIANGLE_FAN 0x0006 #define GL_ZERO 0 #define GL_ONE 1 #define GL_SRC_COLOR 0x0300 #define GL_ONE_MINUS_SRC_COLOR 0x0301 #define GL_SRC_ALPHA 0x0302 #define GL_ONE_MINUS_SRC_ALPHA 0x0303 #define GL_DST_ALPHA 0x0304 #define GL_ONE_MINUS_DST_ALPHA 0x0305 #define GL_DST_COLOR 0x0306 #define GL_ONE_MINUS_DST_COLOR 0x0307 #define GL_SRC_ALPHA_SATURATE 0x0308 #define GL_FUNC_ADD 0x8006 #define GL_BLEND_EQUATION 0x8009 #define GL_BLEND_EQUATION_RGB 0x8009 #define GL_BLEND_EQUATION_ALPHA 0x883D #define GL_FUNC_SUBTRACT 0x800A #define GL_FUNC_REVERSE_SUBTRACT 0x800B #define GL_BLEND_DST_RGB 0x80C8 #define GL_BLEND_SRC_RGB 0x80C9 #define GL_BLEND_DST_ALPHA 0x80CA #define GL_BLEND_SRC_ALPHA 0x80CB #define GL_CONSTANT_COLOR 0x8001 #define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 #define GL_CONSTANT_ALPHA 0x8003 #define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 #define GL_BLEND_COLOR 0x8005 #define GL_ARRAY_BUFFER 0x8892 #define GL_ELEMENT_ARRAY_BUFFER 0x8893 #define GL_ARRAY_BUFFER_BINDING 0x8894 #define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 #define GL_STREAM_DRAW 0x88E0 #define GL_STATIC_DRAW 0x88E4 #define GL_DYNAMIC_DRAW 0x88E8 #define GL_BUFFER_SIZE 0x8764 #define GL_BUFFER_USAGE 0x8765 #define GL_CURRENT_VERTEX_ATTRIB 0x8626 #define GL_FRONT 0x0404 #define GL_BACK 0x0405 #define GL_FRONT_AND_BACK 0x0408 #define GL_TEXTURE_2D 0x0DE1 #define GL_CULL_FACE 0x0B44 #define GL_BLEND 0x0BE2 #define GL_DITHER 0x0BD0 #define GL_STENCIL_TEST 0x0B90 #define GL_DEPTH_TEST 0x0B71 #define GL_SCISSOR_TEST 0x0C11 #define GL_POLYGON_OFFSET_FILL 0x8037 #define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E #define GL_SAMPLE_COVERAGE 0x80A0 #define GL_NO_ERROR 0 #define GL_INVALID_ENUM 0x0500 #define GL_INVALID_VALUE 0x0501 #define GL_INVALID_OPERATION 0x0502 #define GL_OUT_OF_MEMORY 0x0505 #define GL_CW 0x0900 #define GL_CCW 0x0901 #define GL_LINE_WIDTH 0x0B21 #define GL_ALIASED_POINT_SIZE_RANGE 0x846D #define GL_ALIASED_LINE_WIDTH_RANGE 0x846E #define GL_CULL_FACE_MODE 0x0B45 #define GL_FRONT_FACE 0x0B46 #define GL_DEPTH_RANGE 0x0B70 #define GL_DEPTH_WRITEMASK 0x0B72 #define GL_DEPTH_CLEAR_VALUE 0x0B73 #define GL_DEPTH_FUNC 0x0B74 #define GL_STENCIL_CLEAR_VALUE 0x0B91 #define GL_STENCIL_FUNC 0x0B92 #define GL_STENCIL_FAIL 0x0B94 #define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 #define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 #define GL_STENCIL_REF 0x0B97 #define GL_STENCIL_VALUE_MASK 0x0B93 #define GL_STENCIL_WRITEMASK 0x0B98 #define GL_STENCIL_BACK_FUNC 0x8800 #define GL_STENCIL_BACK_FAIL 0x8801 #define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 #define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 #define GL_STENCIL_BACK_REF 0x8CA3 #define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 #define GL_STENCIL_BACK_WRITEMASK 0x8CA5 #define GL_VIEWPORT 0x0BA2 #define GL_SCISSOR_BOX 0x0C10 #define GL_COLOR_CLEAR_VALUE 0x0C22 #define GL_COLOR_WRITEMASK 0x0C23 #define GL_UNPACK_ALIGNMENT 0x0CF5 #define GL_PACK_ALIGNMENT 0x0D05 #define GL_MAX_TEXTURE_SIZE 0x0D33 #define GL_MAX_VIEWPORT_DIMS 0x0D3A #define GL_SUBPIXEL_BITS 0x0D50 #define GL_RED_BITS 0x0D52 #define GL_GREEN_BITS 0x0D53 #define GL_BLUE_BITS 0x0D54 #define GL_ALPHA_BITS 0x0D55 #define GL_DEPTH_BITS 0x0D56 #define GL_STENCIL_BITS 0x0D57 #define GL_POLYGON_OFFSET_UNITS 0x2A00 #define GL_POLYGON_OFFSET_FACTOR 0x8038 #define GL_TEXTURE_BINDING_2D 0x8069 #define GL_SAMPLE_BUFFERS 0x80A8 #define GL_SAMPLES 0x80A9 #define GL_SAMPLE_COVERAGE_VALUE 0x80AA #define GL_SAMPLE_COVERAGE_INVERT 0x80AB #define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 #define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 #define GL_DONT_CARE 0x1100 #define GL_FASTEST 0x1101 #define GL_NICEST 0x1102 #define GL_GENERATE_MIPMAP_HINT 0x8192 #define GL_BYTE 0x1400 #define GL_UNSIGNED_BYTE 0x1401 #define GL_SHORT 0x1402 #define GL_UNSIGNED_SHORT 0x1403 #define GL_INT 0x1404 #define GL_UNSIGNED_INT 0x1405 #define GL_FLOAT 0x1406 #define GL_FIXED 0x140C #define GL_DEPTH_COMPONENT 0x1902 #define GL_ALPHA 0x1906 #define GL_RGB 0x1907 #define GL_RGBA 0x1908 #define GL_LUMINANCE 0x1909 #define GL_LUMINANCE_ALPHA 0x190A #define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 #define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 #define GL_UNSIGNED_SHORT_5_6_5 0x8363 #define GL_FRAGMENT_SHADER 0x8B30 #define GL_VERTEX_SHADER 0x8B31 #define GL_MAX_VERTEX_ATTRIBS 0x8869 #define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB #define GL_MAX_VARYING_VECTORS 0x8DFC #define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D #define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C #define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 #define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD #define GL_SHADER_TYPE 0x8B4F #define GL_DELETE_STATUS 0x8B80 #define GL_LINK_STATUS 0x8B82 #define GL_VALIDATE_STATUS 0x8B83 #define GL_ATTACHED_SHADERS 0x8B85 #define GL_ACTIVE_UNIFORMS 0x8B86 #define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 #define GL_ACTIVE_ATTRIBUTES 0x8B89 #define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A #define GL_SHADING_LANGUAGE_VERSION 0x8B8C #define GL_CURRENT_PROGRAM 0x8B8D #define GL_NEVER 0x0200 #define GL_LESS 0x0201 #define GL_EQUAL 0x0202 #define GL_LEQUAL 0x0203 #define GL_GREATER 0x0204 #define GL_NOTEQUAL 0x0205 #define GL_GEQUAL 0x0206 #define GL_ALWAYS 0x0207 #define GL_KEEP 0x1E00 #define GL_REPLACE 0x1E01 #define GL_INCR 0x1E02 #define GL_DECR 0x1E03 #define GL_INVERT 0x150A #define GL_INCR_WRAP 0x8507 #define GL_DECR_WRAP 0x8508 #define GL_VENDOR 0x1F00 #define GL_RENDERER 0x1F01 #define GL_VERSION 0x1F02 #define GL_EXTENSIONS 0x1F03 #define GL_NEAREST 0x2600 #define GL_LINEAR 0x2601 #define GL_NEAREST_MIPMAP_NEAREST 0x2700 #define GL_LINEAR_MIPMAP_NEAREST 0x2701 #define GL_NEAREST_MIPMAP_LINEAR 0x2702 #define GL_LINEAR_MIPMAP_LINEAR 0x2703 #define GL_TEXTURE_MAG_FILTER 0x2800 #define GL_TEXTURE_MIN_FILTER 0x2801 #define GL_TEXTURE_WRAP_S 0x2802 #define GL_TEXTURE_WRAP_T 0x2803 #define GL_TEXTURE 0x1702 #define GL_TEXTURE_CUBE_MAP 0x8513 #define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A #define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C #define GL_TEXTURE0 0x84C0 #define GL_TEXTURE1 0x84C1 #define GL_TEXTURE2 0x84C2 #define GL_TEXTURE3 0x84C3 #define GL_TEXTURE4 0x84C4 #define GL_TEXTURE5 0x84C5 #define GL_TEXTURE6 0x84C6 #define GL_TEXTURE7 0x84C7 #define GL_TEXTURE8 0x84C8 #define GL_TEXTURE9 0x84C9 #define GL_TEXTURE10 0x84CA #define GL_TEXTURE11 0x84CB #define GL_TEXTURE12 0x84CC #define GL_TEXTURE13 0x84CD #define GL_TEXTURE14 0x84CE #define GL_TEXTURE15 0x84CF #define GL_TEXTURE16 0x84D0 #define GL_TEXTURE17 0x84D1 #define GL_TEXTURE18 0x84D2 #define GL_TEXTURE19 0x84D3 #define GL_TEXTURE20 0x84D4 #define GL_TEXTURE21 0x84D5 #define GL_TEXTURE22 0x84D6 #define GL_TEXTURE23 0x84D7 #define GL_TEXTURE24 0x84D8 #define GL_TEXTURE25 0x84D9 #define GL_TEXTURE26 0x84DA #define GL_TEXTURE27 0x84DB #define GL_TEXTURE28 0x84DC #define GL_TEXTURE29 0x84DD #define GL_TEXTURE30 0x84DE #define GL_TEXTURE31 0x84DF #define GL_ACTIVE_TEXTURE 0x84E0 #define GL_REPEAT 0x2901 #define GL_CLAMP_TO_EDGE 0x812F #define GL_MIRRORED_REPEAT 0x8370 #define GL_FLOAT_VEC2 0x8B50 #define GL_FLOAT_VEC3 0x8B51 #define GL_FLOAT_VEC4 0x8B52 #define GL_INT_VEC2 0x8B53 #define GL_INT_VEC3 0x8B54 #define GL_INT_VEC4 0x8B55 #define GL_BOOL 0x8B56 #define GL_BOOL_VEC2 0x8B57 #define GL_BOOL_VEC3 0x8B58 #define GL_BOOL_VEC4 0x8B59 #define GL_FLOAT_MAT2 0x8B5A #define GL_FLOAT_MAT3 0x8B5B #define GL_FLOAT_MAT4 0x8B5C #define GL_SAMPLER_2D 0x8B5E #define GL_SAMPLER_CUBE 0x8B60 #define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 #define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 #define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 #define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 #define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A #define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 #define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F #define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A #define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B #define GL_COMPILE_STATUS 0x8B81 #define GL_INFO_LOG_LENGTH 0x8B84 #define GL_SHADER_SOURCE_LENGTH 0x8B88 #define GL_SHADER_COMPILER 0x8DFA #define GL_SHADER_BINARY_FORMATS 0x8DF8 #define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 #define GL_LOW_FLOAT 0x8DF0 #define GL_MEDIUM_FLOAT 0x8DF1 #define GL_HIGH_FLOAT 0x8DF2 #define GL_LOW_INT 0x8DF3 #define GL_MEDIUM_INT 0x8DF4 #define GL_HIGH_INT 0x8DF5 #define GL_FRAMEBUFFER 0x8D40 #define GL_RENDERBUFFER 0x8D41 #define GL_RGBA4 0x8056 #define GL_RGB5_A1 0x8057 #define GL_RGB565 0x8D62 #define GL_DEPTH_COMPONENT16 0x81A5 #define GL_STENCIL_INDEX8 0x8D48 #define GL_RENDERBUFFER_WIDTH 0x8D42 #define GL_RENDERBUFFER_HEIGHT 0x8D43 #define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 #define GL_RENDERBUFFER_RED_SIZE 0x8D50 #define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 #define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 #define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 #define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 #define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 #define GL_COLOR_ATTACHMENT0 0x8CE0 #define GL_DEPTH_ATTACHMENT 0x8D00 #define GL_STENCIL_ATTACHMENT 0x8D20 #define GL_NONE 0 #define GL_FRAMEBUFFER_COMPLETE 0x8CD5 #define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 #define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 #define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 0x8CD9 #define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD #define GL_FRAMEBUFFER_BINDING 0x8CA6 #define GL_RENDERBUFFER_BINDING 0x8CA7 #define GL_MAX_RENDERBUFFER_SIZE 0x84E8 #define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 #define GL_READ_BUFFER 0x0C02 #define GL_UNPACK_ROW_LENGTH 0x0CF2 #define GL_UNPACK_SKIP_ROWS 0x0CF3 #define GL_UNPACK_SKIP_PIXELS 0x0CF4 #define GL_PACK_ROW_LENGTH 0x0D02 #define GL_PACK_SKIP_ROWS 0x0D03 #define GL_PACK_SKIP_PIXELS 0x0D04 #define GL_COLOR 0x1800 #define GL_DEPTH 0x1801 #define GL_STENCIL 0x1802 #define GL_RED 0x1903 #define GL_RGB8 0x8051 #define GL_RGBA8 0x8058 #define GL_RGB10_A2 0x8059 #define GL_TEXTURE_BINDING_3D 0x806A #define GL_UNPACK_SKIP_IMAGES 0x806D #define GL_UNPACK_IMAGE_HEIGHT 0x806E #define GL_TEXTURE_3D 0x806F #define GL_TEXTURE_WRAP_R 0x8072 #define GL_MAX_3D_TEXTURE_SIZE 0x8073 #define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 #define GL_MAX_ELEMENTS_VERTICES 0x80E8 #define GL_MAX_ELEMENTS_INDICES 0x80E9 #define GL_TEXTURE_MIN_LOD 0x813A #define GL_TEXTURE_MAX_LOD 0x813B #define GL_TEXTURE_BASE_LEVEL 0x813C #define GL_TEXTURE_MAX_LEVEL 0x813D #define GL_MIN 0x8007 #define GL_MAX 0x8008 #define GL_DEPTH_COMPONENT24 0x81A6 #define GL_MAX_TEXTURE_LOD_BIAS 0x84FD #define GL_TEXTURE_COMPARE_MODE 0x884C #define GL_TEXTURE_COMPARE_FUNC 0x884D #define GL_CURRENT_QUERY 0x8865 #define GL_QUERY_RESULT 0x8866 #define GL_QUERY_RESULT_AVAILABLE 0x8867 #define GL_BUFFER_MAPPED 0x88BC #define GL_BUFFER_MAP_POINTER 0x88BD #define GL_STREAM_READ 0x88E1 #define GL_STREAM_COPY 0x88E2 #define GL_STATIC_READ 0x88E5 #define GL_STATIC_COPY 0x88E6 #define GL_DYNAMIC_READ 0x88E9 #define GL_DYNAMIC_COPY 0x88EA #define GL_MAX_DRAW_BUFFERS 0x8824 #define GL_DRAW_BUFFER0 0x8825 #define GL_DRAW_BUFFER1 0x8826 #define GL_DRAW_BUFFER2 0x8827 #define GL_DRAW_BUFFER3 0x8828 #define GL_DRAW_BUFFER4 0x8829 #define GL_DRAW_BUFFER5 0x882A #define GL_DRAW_BUFFER6 0x882B #define GL_DRAW_BUFFER7 0x882C #define GL_DRAW_BUFFER8 0x882D #define GL_DRAW_BUFFER9 0x882E #define GL_DRAW_BUFFER10 0x882F #define GL_DRAW_BUFFER11 0x8830 #define GL_DRAW_BUFFER12 0x8831 #define GL_DRAW_BUFFER13 0x8832 #define GL_DRAW_BUFFER14 0x8833 #define GL_DRAW_BUFFER15 0x8834 #define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 #define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A #define GL_SAMPLER_3D 0x8B5F #define GL_SAMPLER_2D_SHADOW 0x8B62 #define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B #define GL_PIXEL_PACK_BUFFER 0x88EB #define GL_PIXEL_UNPACK_BUFFER 0x88EC #define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED #define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF #define GL_FLOAT_MAT2x3 0x8B65 #define GL_FLOAT_MAT2x4 0x8B66 #define GL_FLOAT_MAT3x2 0x8B67 #define GL_FLOAT_MAT3x4 0x8B68 #define GL_FLOAT_MAT4x2 0x8B69 #define GL_FLOAT_MAT4x3 0x8B6A #define GL_SRGB 0x8C40 #define GL_SRGB8 0x8C41 #define GL_SRGB8_ALPHA8 0x8C43 #define GL_COMPARE_REF_TO_TEXTURE 0x884E #define GL_MAJOR_VERSION 0x821B #define GL_MINOR_VERSION 0x821C #define GL_NUM_EXTENSIONS 0x821D #define GL_RGBA32F 0x8814 #define GL_RGB32F 0x8815 #define GL_RGBA16F 0x881A #define GL_RGB16F 0x881B #define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD #define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF #define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 #define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 #define GL_MAX_VARYING_COMPONENTS 0x8B4B #define GL_TEXTURE_2D_ARRAY 0x8C1A #define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D #define GL_R11F_G11F_B10F 0x8C3A #define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B #define GL_RGB9_E5 0x8C3D #define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E #define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 #define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 #define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 #define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 #define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 #define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 #define GL_RASTERIZER_DISCARD 0x8C89 #define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B #define GL_INTERLEAVED_ATTRIBS 0x8C8C #define GL_SEPARATE_ATTRIBS 0x8C8D #define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E #define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F #define GL_RGBA32UI 0x8D70 #define GL_RGB32UI 0x8D71 #define GL_RGBA16UI 0x8D76 #define GL_RGB16UI 0x8D77 #define GL_RGBA8UI 0x8D7C #define GL_RGB8UI 0x8D7D #define GL_RGBA32I 0x8D82 #define GL_RGB32I 0x8D83 #define GL_RGBA16I 0x8D88 #define GL_RGB16I 0x8D89 #define GL_RGBA8I 0x8D8E #define GL_RGB8I 0x8D8F #define GL_RED_INTEGER 0x8D94 #define GL_RGB_INTEGER 0x8D98 #define GL_RGBA_INTEGER 0x8D99 #define GL_SAMPLER_2D_ARRAY 0x8DC1 #define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 #define GL_SAMPLER_CUBE_SHADOW 0x8DC5 #define GL_UNSIGNED_INT_VEC2 0x8DC6 #define GL_UNSIGNED_INT_VEC3 0x8DC7 #define GL_UNSIGNED_INT_VEC4 0x8DC8 #define GL_INT_SAMPLER_2D 0x8DCA #define GL_INT_SAMPLER_3D 0x8DCB #define GL_INT_SAMPLER_CUBE 0x8DCC #define GL_INT_SAMPLER_2D_ARRAY 0x8DCF #define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 #define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 #define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 #define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 #define GL_BUFFER_ACCESS_FLAGS 0x911F #define GL_BUFFER_MAP_LENGTH 0x9120 #define GL_BUFFER_MAP_OFFSET 0x9121 #define GL_DEPTH_COMPONENT32F 0x8CAC #define GL_DEPTH32F_STENCIL8 0x8CAD #define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD #define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 #define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 #define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 #define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 #define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 #define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 #define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 #define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 #define GL_FRAMEBUFFER_DEFAULT 0x8218 #define GL_FRAMEBUFFER_UNDEFINED 0x8219 #define GL_DEPTH_STENCIL_ATTACHMENT 0x821A #define GL_DEPTH_STENCIL 0x84F9 #define GL_UNSIGNED_INT_24_8 0x84FA #define GL_DEPTH24_STENCIL8 0x88F0 #define GL_UNSIGNED_NORMALIZED 0x8C17 #define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 #define GL_READ_FRAMEBUFFER 0x8CA8 #define GL_DRAW_FRAMEBUFFER 0x8CA9 #define GL_READ_FRAMEBUFFER_BINDING 0x8CAA #define GL_RENDERBUFFER_SAMPLES 0x8CAB #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 #define GL_MAX_COLOR_ATTACHMENTS 0x8CDF #define GL_COLOR_ATTACHMENT1 0x8CE1 #define GL_COLOR_ATTACHMENT2 0x8CE2 #define GL_COLOR_ATTACHMENT3 0x8CE3 #define GL_COLOR_ATTACHMENT4 0x8CE4 #define GL_COLOR_ATTACHMENT5 0x8CE5 #define GL_COLOR_ATTACHMENT6 0x8CE6 #define GL_COLOR_ATTACHMENT7 0x8CE7 #define GL_COLOR_ATTACHMENT8 0x8CE8 #define GL_COLOR_ATTACHMENT9 0x8CE9 #define GL_COLOR_ATTACHMENT10 0x8CEA #define GL_COLOR_ATTACHMENT11 0x8CEB #define GL_COLOR_ATTACHMENT12 0x8CEC #define GL_COLOR_ATTACHMENT13 0x8CED #define GL_COLOR_ATTACHMENT14 0x8CEE #define GL_COLOR_ATTACHMENT15 0x8CEF #define GL_COLOR_ATTACHMENT16 0x8CF0 #define GL_COLOR_ATTACHMENT17 0x8CF1 #define GL_COLOR_ATTACHMENT18 0x8CF2 #define GL_COLOR_ATTACHMENT19 0x8CF3 #define GL_COLOR_ATTACHMENT20 0x8CF4 #define GL_COLOR_ATTACHMENT21 0x8CF5 #define GL_COLOR_ATTACHMENT22 0x8CF6 #define GL_COLOR_ATTACHMENT23 0x8CF7 #define GL_COLOR_ATTACHMENT24 0x8CF8 #define GL_COLOR_ATTACHMENT25 0x8CF9 #define GL_COLOR_ATTACHMENT26 0x8CFA #define GL_COLOR_ATTACHMENT27 0x8CFB #define GL_COLOR_ATTACHMENT28 0x8CFC #define GL_COLOR_ATTACHMENT29 0x8CFD #define GL_COLOR_ATTACHMENT30 0x8CFE #define GL_COLOR_ATTACHMENT31 0x8CFF #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 #define GL_MAX_SAMPLES 0x8D57 #define GL_HALF_FLOAT 0x140B #define GL_MAP_READ_BIT 0x0001 #define GL_MAP_WRITE_BIT 0x0002 #define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 #define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 #define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 #define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 #define GL_RG 0x8227 #define GL_RG_INTEGER 0x8228 #define GL_R8 0x8229 #define GL_RG8 0x822B #define GL_R16F 0x822D #define GL_R32F 0x822E #define GL_RG16F 0x822F #define GL_RG32F 0x8230 #define GL_R8I 0x8231 #define GL_R8UI 0x8232 #define GL_R16I 0x8233 #define GL_R16UI 0x8234 #define GL_R32I 0x8235 #define GL_R32UI 0x8236 #define GL_RG8I 0x8237 #define GL_RG8UI 0x8238 #define GL_RG16I 0x8239 #define GL_RG16UI 0x823A #define GL_RG32I 0x823B #define GL_RG32UI 0x823C #define GL_VERTEX_ARRAY_BINDING 0x85B5 #define GL_R8_SNORM 0x8F94 #define GL_RG8_SNORM 0x8F95 #define GL_RGB8_SNORM 0x8F96 #define GL_RGBA8_SNORM 0x8F97 #define GL_SIGNED_NORMALIZED 0x8F9C #define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 #define GL_COPY_READ_BUFFER 0x8F36 #define GL_COPY_WRITE_BUFFER 0x8F37 #define GL_COPY_READ_BUFFER_BINDING 0x8F36 #define GL_COPY_WRITE_BUFFER_BINDING 0x8F37 #define GL_UNIFORM_BUFFER 0x8A11 #define GL_UNIFORM_BUFFER_BINDING 0x8A28 #define GL_UNIFORM_BUFFER_START 0x8A29 #define GL_UNIFORM_BUFFER_SIZE 0x8A2A #define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B #define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D #define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E #define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F #define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 #define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 #define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 #define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 #define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 #define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 #define GL_UNIFORM_TYPE 0x8A37 #define GL_UNIFORM_SIZE 0x8A38 #define GL_UNIFORM_NAME_LENGTH 0x8A39 #define GL_UNIFORM_BLOCK_INDEX 0x8A3A #define GL_UNIFORM_OFFSET 0x8A3B #define GL_UNIFORM_ARRAY_STRIDE 0x8A3C #define GL_UNIFORM_MATRIX_STRIDE 0x8A3D #define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E #define GL_UNIFORM_BLOCK_BINDING 0x8A3F #define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 #define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 #define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 #define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 #define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 #define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 #define GL_INVALID_INDEX 0xFFFFFFFF #define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 #define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 #define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 #define GL_OBJECT_TYPE 0x9112 #define GL_SYNC_CONDITION 0x9113 #define GL_SYNC_STATUS 0x9114 #define GL_SYNC_FLAGS 0x9115 #define GL_SYNC_FENCE 0x9116 #define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 #define GL_UNSIGNALED 0x9118 #define GL_SIGNALED 0x9119 #define GL_ALREADY_SIGNALED 0x911A #define GL_TIMEOUT_EXPIRED 0x911B #define GL_CONDITION_SATISFIED 0x911C #define GL_WAIT_FAILED 0x911D #define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 #define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFF #define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE #define GL_ANY_SAMPLES_PASSED 0x8C2F #define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A #define GL_SAMPLER_BINDING 0x8919 #define GL_RGB10_A2UI 0x906F #define GL_TEXTURE_SWIZZLE_R 0x8E42 #define GL_TEXTURE_SWIZZLE_G 0x8E43 #define GL_TEXTURE_SWIZZLE_B 0x8E44 #define GL_TEXTURE_SWIZZLE_A 0x8E45 #define GL_GREEN 0x1904 #define GL_BLUE 0x1905 #define GL_INT_2_10_10_10_REV 0x8D9F #define GL_TRANSFORM_FEEDBACK 0x8E22 #define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23 #define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24 #define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 #define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 #define GL_PROGRAM_BINARY_LENGTH 0x8741 #define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE #define GL_PROGRAM_BINARY_FORMATS 0x87FF #define GL_COMPRESSED_R11_EAC 0x9270 #define GL_COMPRESSED_SIGNED_R11_EAC 0x9271 #define GL_COMPRESSED_RG11_EAC 0x9272 #define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273 #define GL_COMPRESSED_RGB8_ETC2 0x9274 #define GL_COMPRESSED_SRGB8_ETC2 0x9275 #define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276 #define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277 #define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278 #define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279 #define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F #define GL_MAX_ELEMENT_INDEX 0x8D6B #define GL_NUM_SAMPLE_COUNTS 0x9380 #define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF #ifndef GL_ES_VERSION_2_0 #define GL_ES_VERSION_2_0 1 GLAPI int GLAD_GL_ES_VERSION_2_0; typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC)(GLenum texture); GLAPI PFNGLACTIVETEXTUREPROC glad_glActiveTexture; #define glActiveTexture glad_glActiveTexture typedef void (APIENTRYP PFNGLATTACHSHADERPROC)(GLuint program, GLuint shader); GLAPI PFNGLATTACHSHADERPROC glad_glAttachShader; #define glAttachShader glad_glAttachShader typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC)(GLuint program, GLuint index, const GLchar *name); GLAPI PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation; #define glBindAttribLocation glad_glBindAttribLocation typedef void (APIENTRYP PFNGLBINDBUFFERPROC)(GLenum target, GLuint buffer); GLAPI PFNGLBINDBUFFERPROC glad_glBindBuffer; #define glBindBuffer glad_glBindBuffer typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC)(GLenum target, GLuint framebuffer); GLAPI PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer; #define glBindFramebuffer glad_glBindFramebuffer typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC)(GLenum target, GLuint renderbuffer); GLAPI PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer; #define glBindRenderbuffer glad_glBindRenderbuffer typedef void (APIENTRYP PFNGLBINDTEXTUREPROC)(GLenum target, GLuint texture); GLAPI PFNGLBINDTEXTUREPROC glad_glBindTexture; #define glBindTexture glad_glBindTexture typedef void (APIENTRYP PFNGLBLENDCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); GLAPI PFNGLBLENDCOLORPROC glad_glBlendColor; #define glBlendColor glad_glBlendColor typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC)(GLenum mode); GLAPI PFNGLBLENDEQUATIONPROC glad_glBlendEquation; #define glBlendEquation glad_glBlendEquation typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC)(GLenum modeRGB, GLenum modeAlpha); GLAPI PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate; #define glBlendEquationSeparate glad_glBlendEquationSeparate typedef void (APIENTRYP PFNGLBLENDFUNCPROC)(GLenum sfactor, GLenum dfactor); GLAPI PFNGLBLENDFUNCPROC glad_glBlendFunc; #define glBlendFunc glad_glBlendFunc typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); GLAPI PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate; #define glBlendFuncSeparate glad_glBlendFuncSeparate typedef void (APIENTRYP PFNGLBUFFERDATAPROC)(GLenum target, GLsizeiptr size, const void *data, GLenum usage); GLAPI PFNGLBUFFERDATAPROC glad_glBufferData; #define glBufferData glad_glBufferData typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, const void *data); GLAPI PFNGLBUFFERSUBDATAPROC glad_glBufferSubData; #define glBufferSubData glad_glBufferSubData typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC)(GLenum target); GLAPI PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus; #define glCheckFramebufferStatus glad_glCheckFramebufferStatus typedef void (APIENTRYP PFNGLCLEARPROC)(GLbitfield mask); GLAPI PFNGLCLEARPROC glad_glClear; #define glClear glad_glClear typedef void (APIENTRYP PFNGLCLEARCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); GLAPI PFNGLCLEARCOLORPROC glad_glClearColor; #define glClearColor glad_glClearColor typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC)(GLfloat d); GLAPI PFNGLCLEARDEPTHFPROC glad_glClearDepthf; #define glClearDepthf glad_glClearDepthf typedef void (APIENTRYP PFNGLCLEARSTENCILPROC)(GLint s); GLAPI PFNGLCLEARSTENCILPROC glad_glClearStencil; #define glClearStencil glad_glClearStencil typedef void (APIENTRYP PFNGLCOLORMASKPROC)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); GLAPI PFNGLCOLORMASKPROC glad_glColorMask; #define glColorMask glad_glColorMask typedef void (APIENTRYP PFNGLCOMPILESHADERPROC)(GLuint shader); GLAPI PFNGLCOMPILESHADERPROC glad_glCompileShader; #define glCompileShader glad_glCompileShader typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); GLAPI PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D; #define glCompressedTexImage2D glad_glCompressedTexImage2D typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D; #define glCompressedTexSubImage2D glad_glCompressedTexSubImage2D typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); GLAPI PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D; #define glCopyTexImage2D glad_glCopyTexImage2D typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D; #define glCopyTexSubImage2D glad_glCopyTexSubImage2D typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC)(void); GLAPI PFNGLCREATEPROGRAMPROC glad_glCreateProgram; #define glCreateProgram glad_glCreateProgram typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC)(GLenum type); GLAPI PFNGLCREATESHADERPROC glad_glCreateShader; #define glCreateShader glad_glCreateShader typedef void (APIENTRYP PFNGLCULLFACEPROC)(GLenum mode); GLAPI PFNGLCULLFACEPROC glad_glCullFace; #define glCullFace glad_glCullFace typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC)(GLsizei n, const GLuint *buffers); GLAPI PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers; #define glDeleteBuffers glad_glDeleteBuffers typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC)(GLsizei n, const GLuint *framebuffers); GLAPI PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers; #define glDeleteFramebuffers glad_glDeleteFramebuffers typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC)(GLuint program); GLAPI PFNGLDELETEPROGRAMPROC glad_glDeleteProgram; #define glDeleteProgram glad_glDeleteProgram typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC)(GLsizei n, const GLuint *renderbuffers); GLAPI PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers; #define glDeleteRenderbuffers glad_glDeleteRenderbuffers typedef void (APIENTRYP PFNGLDELETESHADERPROC)(GLuint shader); GLAPI PFNGLDELETESHADERPROC glad_glDeleteShader; #define glDeleteShader glad_glDeleteShader typedef void (APIENTRYP PFNGLDELETETEXTURESPROC)(GLsizei n, const GLuint *textures); GLAPI PFNGLDELETETEXTURESPROC glad_glDeleteTextures; #define glDeleteTextures glad_glDeleteTextures typedef void (APIENTRYP PFNGLDEPTHFUNCPROC)(GLenum func); GLAPI PFNGLDEPTHFUNCPROC glad_glDepthFunc; #define glDepthFunc glad_glDepthFunc typedef void (APIENTRYP PFNGLDEPTHMASKPROC)(GLboolean flag); GLAPI PFNGLDEPTHMASKPROC glad_glDepthMask; #define glDepthMask glad_glDepthMask typedef void (APIENTRYP PFNGLDEPTHRANGEFPROC)(GLfloat n, GLfloat f); GLAPI PFNGLDEPTHRANGEFPROC glad_glDepthRangef; #define glDepthRangef glad_glDepthRangef typedef void (APIENTRYP PFNGLDETACHSHADERPROC)(GLuint program, GLuint shader); GLAPI PFNGLDETACHSHADERPROC glad_glDetachShader; #define glDetachShader glad_glDetachShader typedef void (APIENTRYP PFNGLDISABLEPROC)(GLenum cap); GLAPI PFNGLDISABLEPROC glad_glDisable; #define glDisable glad_glDisable typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC)(GLuint index); GLAPI PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray; #define glDisableVertexAttribArray glad_glDisableVertexAttribArray typedef void (APIENTRYP PFNGLDRAWARRAYSPROC)(GLenum mode, GLint first, GLsizei count); GLAPI PFNGLDRAWARRAYSPROC glad_glDrawArrays; #define glDrawArrays glad_glDrawArrays typedef void (APIENTRYP PFNGLDRAWELEMENTSPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices); GLAPI PFNGLDRAWELEMENTSPROC glad_glDrawElements; #define glDrawElements glad_glDrawElements typedef void (APIENTRYP PFNGLENABLEPROC)(GLenum cap); GLAPI PFNGLENABLEPROC glad_glEnable; #define glEnable glad_glEnable typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC)(GLuint index); GLAPI PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray; #define glEnableVertexAttribArray glad_glEnableVertexAttribArray typedef void (APIENTRYP PFNGLFINISHPROC)(void); GLAPI PFNGLFINISHPROC glad_glFinish; #define glFinish glad_glFinish typedef void (APIENTRYP PFNGLFLUSHPROC)(void); GLAPI PFNGLFLUSHPROC glad_glFlush; #define glFlush glad_glFlush typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); GLAPI PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer; #define glFramebufferRenderbuffer glad_glFramebufferRenderbuffer typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLAPI PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D; #define glFramebufferTexture2D glad_glFramebufferTexture2D typedef void (APIENTRYP PFNGLFRONTFACEPROC)(GLenum mode); GLAPI PFNGLFRONTFACEPROC glad_glFrontFace; #define glFrontFace glad_glFrontFace typedef void (APIENTRYP PFNGLGENBUFFERSPROC)(GLsizei n, GLuint *buffers); GLAPI PFNGLGENBUFFERSPROC glad_glGenBuffers; #define glGenBuffers glad_glGenBuffers typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC)(GLenum target); GLAPI PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap; #define glGenerateMipmap glad_glGenerateMipmap typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC)(GLsizei n, GLuint *framebuffers); GLAPI PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers; #define glGenFramebuffers glad_glGenFramebuffers typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC)(GLsizei n, GLuint *renderbuffers); GLAPI PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers; #define glGenRenderbuffers glad_glGenRenderbuffers typedef void (APIENTRYP PFNGLGENTEXTURESPROC)(GLsizei n, GLuint *textures); GLAPI PFNGLGENTEXTURESPROC glad_glGenTextures; #define glGenTextures glad_glGenTextures typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); GLAPI PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib; #define glGetActiveAttrib glad_glGetActiveAttrib typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); GLAPI PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform; #define glGetActiveUniform glad_glGetActiveUniform typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC)(GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); GLAPI PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders; #define glGetAttachedShaders glad_glGetAttachedShaders typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC)(GLuint program, const GLchar *name); GLAPI PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation; #define glGetAttribLocation glad_glGetAttribLocation typedef void (APIENTRYP PFNGLGETBOOLEANVPROC)(GLenum pname, GLboolean *data); GLAPI PFNGLGETBOOLEANVPROC glad_glGetBooleanv; #define glGetBooleanv glad_glGetBooleanv typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params); GLAPI PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv; #define glGetBufferParameteriv glad_glGetBufferParameteriv typedef GLenum (APIENTRYP PFNGLGETERRORPROC)(void); GLAPI PFNGLGETERRORPROC glad_glGetError; #define glGetError glad_glGetError typedef void (APIENTRYP PFNGLGETFLOATVPROC)(GLenum pname, GLfloat *data); GLAPI PFNGLGETFLOATVPROC glad_glGetFloatv; #define glGetFloatv glad_glGetFloatv typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(GLenum target, GLenum attachment, GLenum pname, GLint *params); GLAPI PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv; #define glGetFramebufferAttachmentParameteriv glad_glGetFramebufferAttachmentParameteriv typedef void (APIENTRYP PFNGLGETINTEGERVPROC)(GLenum pname, GLint *data); GLAPI PFNGLGETINTEGERVPROC glad_glGetIntegerv; #define glGetIntegerv glad_glGetIntegerv typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC)(GLuint program, GLenum pname, GLint *params); GLAPI PFNGLGETPROGRAMIVPROC glad_glGetProgramiv; #define glGetProgramiv glad_glGetProgramiv typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC)(GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); GLAPI PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog; #define glGetProgramInfoLog glad_glGetProgramInfoLog typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params); GLAPI PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv; #define glGetRenderbufferParameteriv glad_glGetRenderbufferParameteriv typedef void (APIENTRYP PFNGLGETSHADERIVPROC)(GLuint shader, GLenum pname, GLint *params); GLAPI PFNGLGETSHADERIVPROC glad_glGetShaderiv; #define glGetShaderiv glad_glGetShaderiv typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); GLAPI PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog; #define glGetShaderInfoLog glad_glGetShaderInfoLog typedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC)(GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); GLAPI PFNGLGETSHADERPRECISIONFORMATPROC glad_glGetShaderPrecisionFormat; #define glGetShaderPrecisionFormat glad_glGetShaderPrecisionFormat typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); GLAPI PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource; #define glGetShaderSource glad_glGetShaderSource typedef const GLubyte * (APIENTRYP PFNGLGETSTRINGPROC)(GLenum name); GLAPI PFNGLGETSTRINGPROC glad_glGetString; #define glGetString glad_glGetString typedef void (APIENTRYP PFNGLGETTEXPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat *params); GLAPI PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv; #define glGetTexParameterfv glad_glGetTexParameterfv typedef void (APIENTRYP PFNGLGETTEXPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params); GLAPI PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv; #define glGetTexParameteriv glad_glGetTexParameteriv typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC)(GLuint program, GLint location, GLfloat *params); GLAPI PFNGLGETUNIFORMFVPROC glad_glGetUniformfv; #define glGetUniformfv glad_glGetUniformfv typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC)(GLuint program, GLint location, GLint *params); GLAPI PFNGLGETUNIFORMIVPROC glad_glGetUniformiv; #define glGetUniformiv glad_glGetUniformiv typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC)(GLuint program, const GLchar *name); GLAPI PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation; #define glGetUniformLocation glad_glGetUniformLocation typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC)(GLuint index, GLenum pname, GLfloat *params); GLAPI PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv; #define glGetVertexAttribfv glad_glGetVertexAttribfv typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC)(GLuint index, GLenum pname, GLint *params); GLAPI PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv; #define glGetVertexAttribiv glad_glGetVertexAttribiv typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC)(GLuint index, GLenum pname, void **pointer); GLAPI PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv; #define glGetVertexAttribPointerv glad_glGetVertexAttribPointerv typedef void (APIENTRYP PFNGLHINTPROC)(GLenum target, GLenum mode); GLAPI PFNGLHINTPROC glad_glHint; #define glHint glad_glHint typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC)(GLuint buffer); GLAPI PFNGLISBUFFERPROC glad_glIsBuffer; #define glIsBuffer glad_glIsBuffer typedef GLboolean (APIENTRYP PFNGLISENABLEDPROC)(GLenum cap); GLAPI PFNGLISENABLEDPROC glad_glIsEnabled; #define glIsEnabled glad_glIsEnabled typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC)(GLuint framebuffer); GLAPI PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer; #define glIsFramebuffer glad_glIsFramebuffer typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC)(GLuint program); GLAPI PFNGLISPROGRAMPROC glad_glIsProgram; #define glIsProgram glad_glIsProgram typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC)(GLuint renderbuffer); GLAPI PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer; #define glIsRenderbuffer glad_glIsRenderbuffer typedef GLboolean (APIENTRYP PFNGLISSHADERPROC)(GLuint shader); GLAPI PFNGLISSHADERPROC glad_glIsShader; #define glIsShader glad_glIsShader typedef GLboolean (APIENTRYP PFNGLISTEXTUREPROC)(GLuint texture); GLAPI PFNGLISTEXTUREPROC glad_glIsTexture; #define glIsTexture glad_glIsTexture typedef void (APIENTRYP PFNGLLINEWIDTHPROC)(GLfloat width); GLAPI PFNGLLINEWIDTHPROC glad_glLineWidth; #define glLineWidth glad_glLineWidth typedef void (APIENTRYP PFNGLLINKPROGRAMPROC)(GLuint program); GLAPI PFNGLLINKPROGRAMPROC glad_glLinkProgram; #define glLinkProgram glad_glLinkProgram typedef void (APIENTRYP PFNGLPIXELSTOREIPROC)(GLenum pname, GLint param); GLAPI PFNGLPIXELSTOREIPROC glad_glPixelStorei; #define glPixelStorei glad_glPixelStorei typedef void (APIENTRYP PFNGLPOLYGONOFFSETPROC)(GLfloat factor, GLfloat units); GLAPI PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset; #define glPolygonOffset glad_glPolygonOffset typedef void (APIENTRYP PFNGLREADPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels); GLAPI PFNGLREADPIXELSPROC glad_glReadPixels; #define glReadPixels glad_glReadPixels typedef void (APIENTRYP PFNGLRELEASESHADERCOMPILERPROC)(void); GLAPI PFNGLRELEASESHADERCOMPILERPROC glad_glReleaseShaderCompiler; #define glReleaseShaderCompiler glad_glReleaseShaderCompiler typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); GLAPI PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage; #define glRenderbufferStorage glad_glRenderbufferStorage typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC)(GLfloat value, GLboolean invert); GLAPI PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage; #define glSampleCoverage glad_glSampleCoverage typedef void (APIENTRYP PFNGLSCISSORPROC)(GLint x, GLint y, GLsizei width, GLsizei height); GLAPI PFNGLSCISSORPROC glad_glScissor; #define glScissor glad_glScissor typedef void (APIENTRYP PFNGLSHADERBINARYPROC)(GLsizei count, const GLuint *shaders, GLenum binaryFormat, const void *binary, GLsizei length); GLAPI PFNGLSHADERBINARYPROC glad_glShaderBinary; #define glShaderBinary glad_glShaderBinary typedef void (APIENTRYP PFNGLSHADERSOURCEPROC)(GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); GLAPI PFNGLSHADERSOURCEPROC glad_glShaderSource; #define glShaderSource glad_glShaderSource typedef void (APIENTRYP PFNGLSTENCILFUNCPROC)(GLenum func, GLint ref, GLuint mask); GLAPI PFNGLSTENCILFUNCPROC glad_glStencilFunc; #define glStencilFunc glad_glStencilFunc typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC)(GLenum face, GLenum func, GLint ref, GLuint mask); GLAPI PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate; #define glStencilFuncSeparate glad_glStencilFuncSeparate typedef void (APIENTRYP PFNGLSTENCILMASKPROC)(GLuint mask); GLAPI PFNGLSTENCILMASKPROC glad_glStencilMask; #define glStencilMask glad_glStencilMask typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC)(GLenum face, GLuint mask); GLAPI PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate; #define glStencilMaskSeparate glad_glStencilMaskSeparate typedef void (APIENTRYP PFNGLSTENCILOPPROC)(GLenum fail, GLenum zfail, GLenum zpass); GLAPI PFNGLSTENCILOPPROC glad_glStencilOp; #define glStencilOp glad_glStencilOp typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); GLAPI PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate; #define glStencilOpSeparate glad_glStencilOpSeparate typedef void (APIENTRYP PFNGLTEXIMAGE2DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI PFNGLTEXIMAGE2DPROC glad_glTexImage2D; #define glTexImage2D glad_glTexImage2D typedef void (APIENTRYP PFNGLTEXPARAMETERFPROC)(GLenum target, GLenum pname, GLfloat param); GLAPI PFNGLTEXPARAMETERFPROC glad_glTexParameterf; #define glTexParameterf glad_glTexParameterf typedef void (APIENTRYP PFNGLTEXPARAMETERFVPROC)(GLenum target, GLenum pname, const GLfloat *params); GLAPI PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv; #define glTexParameterfv glad_glTexParameterfv typedef void (APIENTRYP PFNGLTEXPARAMETERIPROC)(GLenum target, GLenum pname, GLint param); GLAPI PFNGLTEXPARAMETERIPROC glad_glTexParameteri; #define glTexParameteri glad_glTexParameteri typedef void (APIENTRYP PFNGLTEXPARAMETERIVPROC)(GLenum target, GLenum pname, const GLint *params); GLAPI PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv; #define glTexParameteriv glad_glTexParameteriv typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); GLAPI PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D; #define glTexSubImage2D glad_glTexSubImage2D typedef void (APIENTRYP PFNGLUNIFORM1FPROC)(GLint location, GLfloat v0); GLAPI PFNGLUNIFORM1FPROC glad_glUniform1f; #define glUniform1f glad_glUniform1f typedef void (APIENTRYP PFNGLUNIFORM1FVPROC)(GLint location, GLsizei count, const GLfloat *value); GLAPI PFNGLUNIFORM1FVPROC glad_glUniform1fv; #define glUniform1fv glad_glUniform1fv typedef void (APIENTRYP PFNGLUNIFORM1IPROC)(GLint location, GLint v0); GLAPI PFNGLUNIFORM1IPROC glad_glUniform1i; #define glUniform1i glad_glUniform1i typedef void (APIENTRYP PFNGLUNIFORM1IVPROC)(GLint location, GLsizei count, const GLint *value); GLAPI PFNGLUNIFORM1IVPROC glad_glUniform1iv; #define glUniform1iv glad_glUniform1iv typedef void (APIENTRYP PFNGLUNIFORM2FPROC)(GLint location, GLfloat v0, GLfloat v1); GLAPI PFNGLUNIFORM2FPROC glad_glUniform2f; #define glUniform2f glad_glUniform2f typedef void (APIENTRYP PFNGLUNIFORM2FVPROC)(GLint location, GLsizei count, const GLfloat *value); GLAPI PFNGLUNIFORM2FVPROC glad_glUniform2fv; #define glUniform2fv glad_glUniform2fv typedef void (APIENTRYP PFNGLUNIFORM2IPROC)(GLint location, GLint v0, GLint v1); GLAPI PFNGLUNIFORM2IPROC glad_glUniform2i; #define glUniform2i glad_glUniform2i typedef void (APIENTRYP PFNGLUNIFORM2IVPROC)(GLint location, GLsizei count, const GLint *value); GLAPI PFNGLUNIFORM2IVPROC glad_glUniform2iv; #define glUniform2iv glad_glUniform2iv typedef void (APIENTRYP PFNGLUNIFORM3FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); GLAPI PFNGLUNIFORM3FPROC glad_glUniform3f; #define glUniform3f glad_glUniform3f typedef void (APIENTRYP PFNGLUNIFORM3FVPROC)(GLint location, GLsizei count, const GLfloat *value); GLAPI PFNGLUNIFORM3FVPROC glad_glUniform3fv; #define glUniform3fv glad_glUniform3fv typedef void (APIENTRYP PFNGLUNIFORM3IPROC)(GLint location, GLint v0, GLint v1, GLint v2); GLAPI PFNGLUNIFORM3IPROC glad_glUniform3i; #define glUniform3i glad_glUniform3i typedef void (APIENTRYP PFNGLUNIFORM3IVPROC)(GLint location, GLsizei count, const GLint *value); GLAPI PFNGLUNIFORM3IVPROC glad_glUniform3iv; #define glUniform3iv glad_glUniform3iv typedef void (APIENTRYP PFNGLUNIFORM4FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); GLAPI PFNGLUNIFORM4FPROC glad_glUniform4f; #define glUniform4f glad_glUniform4f typedef void (APIENTRYP PFNGLUNIFORM4FVPROC)(GLint location, GLsizei count, const GLfloat *value); GLAPI PFNGLUNIFORM4FVPROC glad_glUniform4fv; #define glUniform4fv glad_glUniform4fv typedef void (APIENTRYP PFNGLUNIFORM4IPROC)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); GLAPI PFNGLUNIFORM4IPROC glad_glUniform4i; #define glUniform4i glad_glUniform4i typedef void (APIENTRYP PFNGLUNIFORM4IVPROC)(GLint location, GLsizei count, const GLint *value); GLAPI PFNGLUNIFORM4IVPROC glad_glUniform4iv; #define glUniform4iv glad_glUniform4iv typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv; #define glUniformMatrix2fv glad_glUniformMatrix2fv typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv; #define glUniformMatrix3fv glad_glUniformMatrix3fv typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv; #define glUniformMatrix4fv glad_glUniformMatrix4fv typedef void (APIENTRYP PFNGLUSEPROGRAMPROC)(GLuint program); GLAPI PFNGLUSEPROGRAMPROC glad_glUseProgram; #define glUseProgram glad_glUseProgram typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC)(GLuint program); GLAPI PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram; #define glValidateProgram glad_glValidateProgram typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC)(GLuint index, GLfloat x); GLAPI PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f; #define glVertexAttrib1f glad_glVertexAttrib1f typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC)(GLuint index, const GLfloat *v); GLAPI PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv; #define glVertexAttrib1fv glad_glVertexAttrib1fv typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC)(GLuint index, GLfloat x, GLfloat y); GLAPI PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f; #define glVertexAttrib2f glad_glVertexAttrib2f typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC)(GLuint index, const GLfloat *v); GLAPI PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv; #define glVertexAttrib2fv glad_glVertexAttrib2fv typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z); GLAPI PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f; #define glVertexAttrib3f glad_glVertexAttrib3f typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC)(GLuint index, const GLfloat *v); GLAPI PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv; #define glVertexAttrib3fv glad_glVertexAttrib3fv typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f; #define glVertexAttrib4f glad_glVertexAttrib4f typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC)(GLuint index, const GLfloat *v); GLAPI PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv; #define glVertexAttrib4fv glad_glVertexAttrib4fv typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); GLAPI PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer; #define glVertexAttribPointer glad_glVertexAttribPointer typedef void (APIENTRYP PFNGLVIEWPORTPROC)(GLint x, GLint y, GLsizei width, GLsizei height); GLAPI PFNGLVIEWPORTPROC glad_glViewport; #define glViewport glad_glViewport #endif #ifndef GL_ES_VERSION_3_0 #define GL_ES_VERSION_3_0 1 GLAPI int GLAD_GL_ES_VERSION_3_0; typedef void (APIENTRYP PFNGLREADBUFFERPROC)(GLenum src); GLAPI PFNGLREADBUFFERPROC glad_glReadBuffer; #define glReadBuffer glad_glReadBuffer typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); GLAPI PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements; #define glDrawRangeElements glad_glDrawRangeElements typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI PFNGLTEXIMAGE3DPROC glad_glTexImage3D; #define glTexImage3D glad_glTexImage3D typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); GLAPI PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D; #define glTexSubImage3D glad_glTexSubImage3D typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D; #define glCopyTexSubImage3D glad_glCopyTexSubImage3D typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); GLAPI PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D; #define glCompressedTexImage3D glad_glCompressedTexImage3D typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D; #define glCompressedTexSubImage3D glad_glCompressedTexSubImage3D typedef void (APIENTRYP PFNGLGENQUERIESPROC)(GLsizei n, GLuint *ids); GLAPI PFNGLGENQUERIESPROC glad_glGenQueries; #define glGenQueries glad_glGenQueries typedef void (APIENTRYP PFNGLDELETEQUERIESPROC)(GLsizei n, const GLuint *ids); GLAPI PFNGLDELETEQUERIESPROC glad_glDeleteQueries; #define glDeleteQueries glad_glDeleteQueries typedef GLboolean (APIENTRYP PFNGLISQUERYPROC)(GLuint id); GLAPI PFNGLISQUERYPROC glad_glIsQuery; #define glIsQuery glad_glIsQuery typedef void (APIENTRYP PFNGLBEGINQUERYPROC)(GLenum target, GLuint id); GLAPI PFNGLBEGINQUERYPROC glad_glBeginQuery; #define glBeginQuery glad_glBeginQuery typedef void (APIENTRYP PFNGLENDQUERYPROC)(GLenum target); GLAPI PFNGLENDQUERYPROC glad_glEndQuery; #define glEndQuery glad_glEndQuery typedef void (APIENTRYP PFNGLGETQUERYIVPROC)(GLenum target, GLenum pname, GLint *params); GLAPI PFNGLGETQUERYIVPROC glad_glGetQueryiv; #define glGetQueryiv glad_glGetQueryiv typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC)(GLuint id, GLenum pname, GLuint *params); GLAPI PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv; #define glGetQueryObjectuiv glad_glGetQueryObjectuiv typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC)(GLenum target); GLAPI PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer; #define glUnmapBuffer glad_glUnmapBuffer typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC)(GLenum target, GLenum pname, void **params); GLAPI PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv; #define glGetBufferPointerv glad_glGetBufferPointerv typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC)(GLsizei n, const GLenum *bufs); GLAPI PFNGLDRAWBUFFERSPROC glad_glDrawBuffers; #define glDrawBuffers glad_glDrawBuffers typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv; #define glUniformMatrix2x3fv glad_glUniformMatrix2x3fv typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv; #define glUniformMatrix3x2fv glad_glUniformMatrix3x2fv typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv; #define glUniformMatrix2x4fv glad_glUniformMatrix2x4fv typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv; #define glUniformMatrix4x2fv glad_glUniformMatrix4x2fv typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv; #define glUniformMatrix3x4fv glad_glUniformMatrix3x4fv typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv; #define glUniformMatrix4x3fv glad_glUniformMatrix4x3fv typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); GLAPI PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer; #define glBlitFramebuffer glad_glBlitFramebuffer typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); GLAPI PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample; #define glRenderbufferStorageMultisample glad_glRenderbufferStorageMultisample typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); GLAPI PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer; #define glFramebufferTextureLayer glad_glFramebufferTextureLayer typedef void * (APIENTRYP PFNGLMAPBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); GLAPI PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange; #define glMapBufferRange glad_glMapBufferRange typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length); GLAPI PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange; #define glFlushMappedBufferRange glad_glFlushMappedBufferRange typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC)(GLuint array); GLAPI PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray; #define glBindVertexArray glad_glBindVertexArray typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC)(GLsizei n, const GLuint *arrays); GLAPI PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays; #define glDeleteVertexArrays glad_glDeleteVertexArrays typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC)(GLsizei n, GLuint *arrays); GLAPI PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays; #define glGenVertexArrays glad_glGenVertexArrays typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC)(GLuint array); GLAPI PFNGLISVERTEXARRAYPROC glad_glIsVertexArray; #define glIsVertexArray glad_glIsVertexArray typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC)(GLenum target, GLuint index, GLint *data); GLAPI PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v; #define glGetIntegeri_v glad_glGetIntegeri_v typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC)(GLenum primitiveMode); GLAPI PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback; #define glBeginTransformFeedback glad_glBeginTransformFeedback typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC)(void); GLAPI PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback; #define glEndTransformFeedback glad_glEndTransformFeedback typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); GLAPI PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange; #define glBindBufferRange glad_glBindBufferRange typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC)(GLenum target, GLuint index, GLuint buffer); GLAPI PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase; #define glBindBufferBase glad_glBindBufferBase typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC)(GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); GLAPI PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings; #define glTransformFeedbackVaryings glad_glTransformFeedbackVaryings typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); GLAPI PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying; #define glGetTransformFeedbackVarying glad_glGetTransformFeedbackVarying typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); GLAPI PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer; #define glVertexAttribIPointer glad_glVertexAttribIPointer typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC)(GLuint index, GLenum pname, GLint *params); GLAPI PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv; #define glGetVertexAttribIiv glad_glGetVertexAttribIiv typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC)(GLuint index, GLenum pname, GLuint *params); GLAPI PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv; #define glGetVertexAttribIuiv glad_glGetVertexAttribIuiv typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC)(GLuint index, GLint x, GLint y, GLint z, GLint w); GLAPI PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i; #define glVertexAttribI4i glad_glVertexAttribI4i typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); GLAPI PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui; #define glVertexAttribI4ui glad_glVertexAttribI4ui typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC)(GLuint index, const GLint *v); GLAPI PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv; #define glVertexAttribI4iv glad_glVertexAttribI4iv typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC)(GLuint index, const GLuint *v); GLAPI PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv; #define glVertexAttribI4uiv glad_glVertexAttribI4uiv typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC)(GLuint program, GLint location, GLuint *params); GLAPI PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv; #define glGetUniformuiv glad_glGetUniformuiv typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC)(GLuint program, const GLchar *name); GLAPI PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation; #define glGetFragDataLocation glad_glGetFragDataLocation typedef void (APIENTRYP PFNGLUNIFORM1UIPROC)(GLint location, GLuint v0); GLAPI PFNGLUNIFORM1UIPROC glad_glUniform1ui; #define glUniform1ui glad_glUniform1ui typedef void (APIENTRYP PFNGLUNIFORM2UIPROC)(GLint location, GLuint v0, GLuint v1); GLAPI PFNGLUNIFORM2UIPROC glad_glUniform2ui; #define glUniform2ui glad_glUniform2ui typedef void (APIENTRYP PFNGLUNIFORM3UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2); GLAPI PFNGLUNIFORM3UIPROC glad_glUniform3ui; #define glUniform3ui glad_glUniform3ui typedef void (APIENTRYP PFNGLUNIFORM4UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); GLAPI PFNGLUNIFORM4UIPROC glad_glUniform4ui; #define glUniform4ui glad_glUniform4ui typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC)(GLint location, GLsizei count, const GLuint *value); GLAPI PFNGLUNIFORM1UIVPROC glad_glUniform1uiv; #define glUniform1uiv glad_glUniform1uiv typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC)(GLint location, GLsizei count, const GLuint *value); GLAPI PFNGLUNIFORM2UIVPROC glad_glUniform2uiv; #define glUniform2uiv glad_glUniform2uiv typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC)(GLint location, GLsizei count, const GLuint *value); GLAPI PFNGLUNIFORM3UIVPROC glad_glUniform3uiv; #define glUniform3uiv glad_glUniform3uiv typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC)(GLint location, GLsizei count, const GLuint *value); GLAPI PFNGLUNIFORM4UIVPROC glad_glUniform4uiv; #define glUniform4uiv glad_glUniform4uiv typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC)(GLenum buffer, GLint drawbuffer, const GLint *value); GLAPI PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv; #define glClearBufferiv glad_glClearBufferiv typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC)(GLenum buffer, GLint drawbuffer, const GLuint *value); GLAPI PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv; #define glClearBufferuiv glad_glClearBufferuiv typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC)(GLenum buffer, GLint drawbuffer, const GLfloat *value); GLAPI PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv; #define glClearBufferfv glad_glClearBufferfv typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC)(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); GLAPI PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi; #define glClearBufferfi glad_glClearBufferfi typedef const GLubyte * (APIENTRYP PFNGLGETSTRINGIPROC)(GLenum name, GLuint index); GLAPI PFNGLGETSTRINGIPROC glad_glGetStringi; #define glGetStringi glad_glGetStringi typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); GLAPI PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData; #define glCopyBufferSubData glad_glCopyBufferSubData typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC)(GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); GLAPI PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices; #define glGetUniformIndices glad_glGetUniformIndices typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC)(GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); GLAPI PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv; #define glGetActiveUniformsiv glad_glGetActiveUniformsiv typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC)(GLuint program, const GLchar *uniformBlockName); GLAPI PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex; #define glGetUniformBlockIndex glad_glGetUniformBlockIndex typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC)(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); GLAPI PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv; #define glGetActiveUniformBlockiv glad_glGetActiveUniformBlockiv typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); GLAPI PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName; #define glGetActiveUniformBlockName glad_glGetActiveUniformBlockName typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC)(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); GLAPI PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding; #define glUniformBlockBinding glad_glUniformBlockBinding typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount); GLAPI PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced; #define glDrawArraysInstanced glad_glDrawArraysInstanced typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); GLAPI PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced; #define glDrawElementsInstanced glad_glDrawElementsInstanced typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC)(GLenum condition, GLbitfield flags); GLAPI PFNGLFENCESYNCPROC glad_glFenceSync; #define glFenceSync glad_glFenceSync typedef GLboolean (APIENTRYP PFNGLISSYNCPROC)(GLsync sync); GLAPI PFNGLISSYNCPROC glad_glIsSync; #define glIsSync glad_glIsSync typedef void (APIENTRYP PFNGLDELETESYNCPROC)(GLsync sync); GLAPI PFNGLDELETESYNCPROC glad_glDeleteSync; #define glDeleteSync glad_glDeleteSync typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); GLAPI PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync; #define glClientWaitSync glad_glClientWaitSync typedef void (APIENTRYP PFNGLWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); GLAPI PFNGLWAITSYNCPROC glad_glWaitSync; #define glWaitSync glad_glWaitSync typedef void (APIENTRYP PFNGLGETINTEGER64VPROC)(GLenum pname, GLint64 *data); GLAPI PFNGLGETINTEGER64VPROC glad_glGetInteger64v; #define glGetInteger64v glad_glGetInteger64v typedef void (APIENTRYP PFNGLGETSYNCIVPROC)(GLsync sync, GLenum pname, GLsizei count, GLsizei *length, GLint *values); GLAPI PFNGLGETSYNCIVPROC glad_glGetSynciv; #define glGetSynciv glad_glGetSynciv typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC)(GLenum target, GLuint index, GLint64 *data); GLAPI PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v; #define glGetInteger64i_v glad_glGetInteger64i_v typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC)(GLenum target, GLenum pname, GLint64 *params); GLAPI PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v; #define glGetBufferParameteri64v glad_glGetBufferParameteri64v typedef void (APIENTRYP PFNGLGENSAMPLERSPROC)(GLsizei count, GLuint *samplers); GLAPI PFNGLGENSAMPLERSPROC glad_glGenSamplers; #define glGenSamplers glad_glGenSamplers typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC)(GLsizei count, const GLuint *samplers); GLAPI PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers; #define glDeleteSamplers glad_glDeleteSamplers typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC)(GLuint sampler); GLAPI PFNGLISSAMPLERPROC glad_glIsSampler; #define glIsSampler glad_glIsSampler typedef void (APIENTRYP PFNGLBINDSAMPLERPROC)(GLuint unit, GLuint sampler); GLAPI PFNGLBINDSAMPLERPROC glad_glBindSampler; #define glBindSampler glad_glBindSampler typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC)(GLuint sampler, GLenum pname, GLint param); GLAPI PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri; #define glSamplerParameteri glad_glSamplerParameteri typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, const GLint *param); GLAPI PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv; #define glSamplerParameteriv glad_glSamplerParameteriv typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC)(GLuint sampler, GLenum pname, GLfloat param); GLAPI PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf; #define glSamplerParameterf glad_glSamplerParameterf typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, const GLfloat *param); GLAPI PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv; #define glSamplerParameterfv glad_glSamplerParameterfv typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, GLint *params); GLAPI PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv; #define glGetSamplerParameteriv glad_glGetSamplerParameteriv typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, GLfloat *params); GLAPI PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv; #define glGetSamplerParameterfv glad_glGetSamplerParameterfv typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC)(GLuint index, GLuint divisor); GLAPI PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor; #define glVertexAttribDivisor glad_glVertexAttribDivisor typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC)(GLenum target, GLuint id); GLAPI PFNGLBINDTRANSFORMFEEDBACKPROC glad_glBindTransformFeedback; #define glBindTransformFeedback glad_glBindTransformFeedback typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC)(GLsizei n, const GLuint *ids); GLAPI PFNGLDELETETRANSFORMFEEDBACKSPROC glad_glDeleteTransformFeedbacks; #define glDeleteTransformFeedbacks glad_glDeleteTransformFeedbacks typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC)(GLsizei n, GLuint *ids); GLAPI PFNGLGENTRANSFORMFEEDBACKSPROC glad_glGenTransformFeedbacks; #define glGenTransformFeedbacks glad_glGenTransformFeedbacks typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC)(GLuint id); GLAPI PFNGLISTRANSFORMFEEDBACKPROC glad_glIsTransformFeedback; #define glIsTransformFeedback glad_glIsTransformFeedback typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC)(void); GLAPI PFNGLPAUSETRANSFORMFEEDBACKPROC glad_glPauseTransformFeedback; #define glPauseTransformFeedback glad_glPauseTransformFeedback typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC)(void); GLAPI PFNGLRESUMETRANSFORMFEEDBACKPROC glad_glResumeTransformFeedback; #define glResumeTransformFeedback glad_glResumeTransformFeedback typedef void (APIENTRYP PFNGLGETPROGRAMBINARYPROC)(GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); GLAPI PFNGLGETPROGRAMBINARYPROC glad_glGetProgramBinary; #define glGetProgramBinary glad_glGetProgramBinary typedef void (APIENTRYP PFNGLPROGRAMBINARYPROC)(GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); GLAPI PFNGLPROGRAMBINARYPROC glad_glProgramBinary; #define glProgramBinary glad_glProgramBinary typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIPROC)(GLuint program, GLenum pname, GLint value); GLAPI PFNGLPROGRAMPARAMETERIPROC glad_glProgramParameteri; #define glProgramParameteri glad_glProgramParameteri typedef void (APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC)(GLenum target, GLsizei numAttachments, const GLenum *attachments); GLAPI PFNGLINVALIDATEFRAMEBUFFERPROC glad_glInvalidateFramebuffer; #define glInvalidateFramebuffer glad_glInvalidateFramebuffer typedef void (APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC)(GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI PFNGLINVALIDATESUBFRAMEBUFFERPROC glad_glInvalidateSubFramebuffer; #define glInvalidateSubFramebuffer glad_glInvalidateSubFramebuffer typedef void (APIENTRYP PFNGLTEXSTORAGE2DPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); GLAPI PFNGLTEXSTORAGE2DPROC glad_glTexStorage2D; #define glTexStorage2D glad_glTexStorage2D typedef void (APIENTRYP PFNGLTEXSTORAGE3DPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); GLAPI PFNGLTEXSTORAGE3DPROC glad_glTexStorage3D; #define glTexStorage3D glad_glTexStorage3D typedef void (APIENTRYP PFNGLGETINTERNALFORMATIVPROC)(GLenum target, GLenum internalformat, GLenum pname, GLsizei count, GLint *params); GLAPI PFNGLGETINTERNALFORMATIVPROC glad_glGetInternalformativ; #define glGetInternalformativ glad_glGetInternalformativ #endif #ifdef __cplusplus } #endif #endif ================================================ FILE: libraries/glad/glad_old.c ================================================ /* OpenGL loader generated by glad 0.1.34 on Tue Jul 6 15:41:26 2021. Language/Generator: C/C++ Specification: gl APIs: gl=3.3 Profile: compatibility Extensions: Loader: True Local files: False Omit khrplatform: False Reproducible: False Commandline: --profile="compatibility" --api="gl=3.3" --generator="c" --spec="gl" --extensions="" Online: https://glad.dav1d.de/#profile=compatibility&language=c&specification=gl&loader=on&api=gl%3D3.3 */ #include #include #include #include static void* get_proc(const char *namez); #if defined(_WIN32) || defined(__CYGWIN__) #ifndef _WINDOWS_ #undef APIENTRY #endif #include static HMODULE libGL; typedef void* (APIENTRYP PFNWGLGETPROCADDRESSPROC_PRIVATE)(const char*); static PFNWGLGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr; #ifdef _MSC_VER #ifdef __has_include #if __has_include() #define HAVE_WINAPIFAMILY 1 #endif #elif _MSC_VER >= 1700 && !_USING_V110_SDK71_ #define HAVE_WINAPIFAMILY 1 #endif #endif #ifdef HAVE_WINAPIFAMILY #include #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) #define IS_UWP 1 #endif #endif static int open_gl(void) { #ifndef IS_UWP libGL = LoadLibraryW(L"opengl32.dll"); if(libGL != NULL) { void (* tmp)(void); tmp = (void(*)(void)) GetProcAddress(libGL, "wglGetProcAddress"); gladGetProcAddressPtr = (PFNWGLGETPROCADDRESSPROC_PRIVATE) tmp; return gladGetProcAddressPtr != NULL; } #endif return 0; } static void close_gl(void) { if(libGL != NULL) { FreeLibrary((HMODULE) libGL); libGL = NULL; } } #else #include static void* libGL; #if !defined(__APPLE__) && !defined(__HAIKU__) typedef void* (APIENTRYP PFNGLXGETPROCADDRESSPROC_PRIVATE)(const char*); static PFNGLXGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr; #endif static int open_gl(void) { #ifdef __APPLE__ static const char *NAMES[] = { "../Frameworks/OpenGL.framework/OpenGL", "/Library/Frameworks/OpenGL.framework/OpenGL", "/System/Library/Frameworks/OpenGL.framework/OpenGL", "/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL" }; #else static const char *NAMES[] = {"libGL.so.1", "libGL.so"}; #endif unsigned int index = 0; for(index = 0; index < (sizeof(NAMES) / sizeof(NAMES[0])); index++) { libGL = dlopen(NAMES[index], RTLD_NOW | RTLD_GLOBAL); if(libGL != NULL) { #if defined(__APPLE__) || defined(__HAIKU__) return 1; #else gladGetProcAddressPtr = (PFNGLXGETPROCADDRESSPROC_PRIVATE)dlsym(libGL, "glXGetProcAddressARB"); return gladGetProcAddressPtr != NULL; #endif } } return 0; } static void close_gl(void) { if(libGL != NULL) { dlclose(libGL); libGL = NULL; } } #endif static void* get_proc(const char *namez) { void* result = NULL; if(libGL == NULL) return NULL; #if !defined(__APPLE__) && !defined(__HAIKU__) if(gladGetProcAddressPtr != NULL) { result = gladGetProcAddressPtr(namez); } #endif if(result == NULL) { #if defined(_WIN32) || defined(__CYGWIN__) result = (void*)GetProcAddress((HMODULE) libGL, namez); #else result = dlsym(libGL, namez); #endif } return result; } int gladLoadGL(void) { int status = 0; if(open_gl()) { status = gladLoadGLLoader(&get_proc); close_gl(); } return status; } struct gladGLversionStruct GLVersion = { 0, 0 }; #if defined(GL_ES_VERSION_3_0) || defined(GL_VERSION_3_0) #define _GLAD_IS_SOME_NEW_VERSION 1 #endif static int max_loaded_major; static int max_loaded_minor; static const char *exts = NULL; static int num_exts_i = 0; static char **exts_i = NULL; static int get_exts(void) { #ifdef _GLAD_IS_SOME_NEW_VERSION if(max_loaded_major < 3) { #endif exts = (const char *)glGetString(GL_EXTENSIONS); #ifdef _GLAD_IS_SOME_NEW_VERSION } else { unsigned int index; num_exts_i = 0; glGetIntegerv(GL_NUM_EXTENSIONS, &num_exts_i); if (num_exts_i > 0) { exts_i = (char **)malloc((size_t)num_exts_i * (sizeof *exts_i)); } if (exts_i == NULL) { return 0; } for(index = 0; index < (unsigned)num_exts_i; index++) { const char *gl_str_tmp = (const char*)glGetStringi(GL_EXTENSIONS, index); size_t len = strlen(gl_str_tmp); char *local_str = (char*)malloc((len+1) * sizeof(char)); if(local_str != NULL) { memcpy(local_str, gl_str_tmp, (len+1) * sizeof(char)); } exts_i[index] = local_str; } } #endif return 1; } static void free_exts(void) { if (exts_i != NULL) { int index; for(index = 0; index < num_exts_i; index++) { free((char *)exts_i[index]); } free((void *)exts_i); exts_i = NULL; } } static int has_ext(const char *ext) { #ifdef _GLAD_IS_SOME_NEW_VERSION if(max_loaded_major < 3) { #endif const char *extensions; const char *loc; const char *terminator; extensions = exts; if(extensions == NULL || ext == NULL) { return 0; } while(1) { loc = strstr(extensions, ext); if(loc == NULL) { return 0; } terminator = loc + strlen(ext); if((loc == extensions || *(loc - 1) == ' ') && (*terminator == ' ' || *terminator == '\0')) { return 1; } extensions = terminator; } #ifdef _GLAD_IS_SOME_NEW_VERSION } else { int index; if(exts_i == NULL) return 0; for(index = 0; index < num_exts_i; index++) { const char *e = exts_i[index]; if(exts_i[index] != NULL && strcmp(e, ext) == 0) { return 1; } } } #endif return 0; } int GLAD_GL_VERSION_1_0 = 0; int GLAD_GL_VERSION_1_1 = 0; int GLAD_GL_VERSION_1_2 = 0; int GLAD_GL_VERSION_1_3 = 0; int GLAD_GL_VERSION_1_4 = 0; int GLAD_GL_VERSION_1_5 = 0; int GLAD_GL_VERSION_2_0 = 0; int GLAD_GL_VERSION_2_1 = 0; int GLAD_GL_VERSION_3_0 = 0; int GLAD_GL_VERSION_3_1 = 0; int GLAD_GL_VERSION_3_2 = 0; int GLAD_GL_VERSION_3_3 = 0; PFNGLACCUMPROC glad_glAccum = NULL; PFNGLACTIVETEXTUREPROC glad_glActiveTexture = NULL; PFNGLALPHAFUNCPROC glad_glAlphaFunc = NULL; PFNGLARETEXTURESRESIDENTPROC glad_glAreTexturesResident = NULL; PFNGLARRAYELEMENTPROC glad_glArrayElement = NULL; PFNGLATTACHSHADERPROC glad_glAttachShader = NULL; PFNGLBEGINPROC glad_glBegin = NULL; PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender = NULL; PFNGLBEGINQUERYPROC glad_glBeginQuery = NULL; PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback = NULL; PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation = NULL; PFNGLBINDBUFFERPROC glad_glBindBuffer = NULL; PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase = NULL; PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange = NULL; PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation = NULL; PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed = NULL; PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer = NULL; PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer = NULL; PFNGLBINDSAMPLERPROC glad_glBindSampler = NULL; PFNGLBINDTEXTUREPROC glad_glBindTexture = NULL; PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray = NULL; PFNGLBITMAPPROC glad_glBitmap = NULL; PFNGLBLENDCOLORPROC glad_glBlendColor = NULL; PFNGLBLENDEQUATIONPROC glad_glBlendEquation = NULL; PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate = NULL; PFNGLBLENDFUNCPROC glad_glBlendFunc = NULL; PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate = NULL; PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer = NULL; PFNGLBUFFERDATAPROC glad_glBufferData = NULL; PFNGLBUFFERSUBDATAPROC glad_glBufferSubData = NULL; PFNGLCALLLISTPROC glad_glCallList = NULL; PFNGLCALLLISTSPROC glad_glCallLists = NULL; PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus = NULL; PFNGLCLAMPCOLORPROC glad_glClampColor = NULL; PFNGLCLEARPROC glad_glClear = NULL; PFNGLCLEARACCUMPROC glad_glClearAccum = NULL; PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi = NULL; PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv = NULL; PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv = NULL; PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv = NULL; PFNGLCLEARCOLORPROC glad_glClearColor = NULL; PFNGLCLEARDEPTHPROC glad_glClearDepth = NULL; PFNGLCLEARINDEXPROC glad_glClearIndex = NULL; PFNGLCLEARSTENCILPROC glad_glClearStencil = NULL; PFNGLCLIENTACTIVETEXTUREPROC glad_glClientActiveTexture = NULL; PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync = NULL; PFNGLCLIPPLANEPROC glad_glClipPlane = NULL; PFNGLCOLOR3BPROC glad_glColor3b = NULL; PFNGLCOLOR3BVPROC glad_glColor3bv = NULL; PFNGLCOLOR3DPROC glad_glColor3d = NULL; PFNGLCOLOR3DVPROC glad_glColor3dv = NULL; PFNGLCOLOR3FPROC glad_glColor3f = NULL; PFNGLCOLOR3FVPROC glad_glColor3fv = NULL; PFNGLCOLOR3IPROC glad_glColor3i = NULL; PFNGLCOLOR3IVPROC glad_glColor3iv = NULL; PFNGLCOLOR3SPROC glad_glColor3s = NULL; PFNGLCOLOR3SVPROC glad_glColor3sv = NULL; PFNGLCOLOR3UBPROC glad_glColor3ub = NULL; PFNGLCOLOR3UBVPROC glad_glColor3ubv = NULL; PFNGLCOLOR3UIPROC glad_glColor3ui = NULL; PFNGLCOLOR3UIVPROC glad_glColor3uiv = NULL; PFNGLCOLOR3USPROC glad_glColor3us = NULL; PFNGLCOLOR3USVPROC glad_glColor3usv = NULL; PFNGLCOLOR4BPROC glad_glColor4b = NULL; PFNGLCOLOR4BVPROC glad_glColor4bv = NULL; PFNGLCOLOR4DPROC glad_glColor4d = NULL; PFNGLCOLOR4DVPROC glad_glColor4dv = NULL; PFNGLCOLOR4FPROC glad_glColor4f = NULL; PFNGLCOLOR4FVPROC glad_glColor4fv = NULL; PFNGLCOLOR4IPROC glad_glColor4i = NULL; PFNGLCOLOR4IVPROC glad_glColor4iv = NULL; PFNGLCOLOR4SPROC glad_glColor4s = NULL; PFNGLCOLOR4SVPROC glad_glColor4sv = NULL; PFNGLCOLOR4UBPROC glad_glColor4ub = NULL; PFNGLCOLOR4UBVPROC glad_glColor4ubv = NULL; PFNGLCOLOR4UIPROC glad_glColor4ui = NULL; PFNGLCOLOR4UIVPROC glad_glColor4uiv = NULL; PFNGLCOLOR4USPROC glad_glColor4us = NULL; PFNGLCOLOR4USVPROC glad_glColor4usv = NULL; PFNGLCOLORMASKPROC glad_glColorMask = NULL; PFNGLCOLORMASKIPROC glad_glColorMaski = NULL; PFNGLCOLORMATERIALPROC glad_glColorMaterial = NULL; PFNGLCOLORP3UIPROC glad_glColorP3ui = NULL; PFNGLCOLORP3UIVPROC glad_glColorP3uiv = NULL; PFNGLCOLORP4UIPROC glad_glColorP4ui = NULL; PFNGLCOLORP4UIVPROC glad_glColorP4uiv = NULL; PFNGLCOLORPOINTERPROC glad_glColorPointer = NULL; PFNGLCOMPILESHADERPROC glad_glCompileShader = NULL; PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D = NULL; PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D = NULL; PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D = NULL; PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D = NULL; PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D = NULL; PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D = NULL; PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData = NULL; PFNGLCOPYPIXELSPROC glad_glCopyPixels = NULL; PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D = NULL; PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D = NULL; PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D = NULL; PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D = NULL; PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D = NULL; PFNGLCREATEPROGRAMPROC glad_glCreateProgram = NULL; PFNGLCREATESHADERPROC glad_glCreateShader = NULL; PFNGLCULLFACEPROC glad_glCullFace = NULL; PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers = NULL; PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers = NULL; PFNGLDELETELISTSPROC glad_glDeleteLists = NULL; PFNGLDELETEPROGRAMPROC glad_glDeleteProgram = NULL; PFNGLDELETEQUERIESPROC glad_glDeleteQueries = NULL; PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers = NULL; PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers = NULL; PFNGLDELETESHADERPROC glad_glDeleteShader = NULL; PFNGLDELETESYNCPROC glad_glDeleteSync = NULL; PFNGLDELETETEXTURESPROC glad_glDeleteTextures = NULL; PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays = NULL; PFNGLDEPTHFUNCPROC glad_glDepthFunc = NULL; PFNGLDEPTHMASKPROC glad_glDepthMask = NULL; PFNGLDEPTHRANGEPROC glad_glDepthRange = NULL; PFNGLDETACHSHADERPROC glad_glDetachShader = NULL; PFNGLDISABLEPROC glad_glDisable = NULL; PFNGLDISABLECLIENTSTATEPROC glad_glDisableClientState = NULL; PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray = NULL; PFNGLDISABLEIPROC glad_glDisablei = NULL; PFNGLDRAWARRAYSPROC glad_glDrawArrays = NULL; PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced = NULL; PFNGLDRAWBUFFERPROC glad_glDrawBuffer = NULL; PFNGLDRAWBUFFERSPROC glad_glDrawBuffers = NULL; PFNGLDRAWELEMENTSPROC glad_glDrawElements = NULL; PFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex = NULL; PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced = NULL; PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex = NULL; PFNGLDRAWPIXELSPROC glad_glDrawPixels = NULL; PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements = NULL; PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex = NULL; PFNGLEDGEFLAGPROC glad_glEdgeFlag = NULL; PFNGLEDGEFLAGPOINTERPROC glad_glEdgeFlagPointer = NULL; PFNGLEDGEFLAGVPROC glad_glEdgeFlagv = NULL; PFNGLENABLEPROC glad_glEnable = NULL; PFNGLENABLECLIENTSTATEPROC glad_glEnableClientState = NULL; PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray = NULL; PFNGLENABLEIPROC glad_glEnablei = NULL; PFNGLENDPROC glad_glEnd = NULL; PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender = NULL; PFNGLENDLISTPROC glad_glEndList = NULL; PFNGLENDQUERYPROC glad_glEndQuery = NULL; PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback = NULL; PFNGLEVALCOORD1DPROC glad_glEvalCoord1d = NULL; PFNGLEVALCOORD1DVPROC glad_glEvalCoord1dv = NULL; PFNGLEVALCOORD1FPROC glad_glEvalCoord1f = NULL; PFNGLEVALCOORD1FVPROC glad_glEvalCoord1fv = NULL; PFNGLEVALCOORD2DPROC glad_glEvalCoord2d = NULL; PFNGLEVALCOORD2DVPROC glad_glEvalCoord2dv = NULL; PFNGLEVALCOORD2FPROC glad_glEvalCoord2f = NULL; PFNGLEVALCOORD2FVPROC glad_glEvalCoord2fv = NULL; PFNGLEVALMESH1PROC glad_glEvalMesh1 = NULL; PFNGLEVALMESH2PROC glad_glEvalMesh2 = NULL; PFNGLEVALPOINT1PROC glad_glEvalPoint1 = NULL; PFNGLEVALPOINT2PROC glad_glEvalPoint2 = NULL; PFNGLFEEDBACKBUFFERPROC glad_glFeedbackBuffer = NULL; PFNGLFENCESYNCPROC glad_glFenceSync = NULL; PFNGLFINISHPROC glad_glFinish = NULL; PFNGLFLUSHPROC glad_glFlush = NULL; PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange = NULL; PFNGLFOGCOORDPOINTERPROC glad_glFogCoordPointer = NULL; PFNGLFOGCOORDDPROC glad_glFogCoordd = NULL; PFNGLFOGCOORDDVPROC glad_glFogCoorddv = NULL; PFNGLFOGCOORDFPROC glad_glFogCoordf = NULL; PFNGLFOGCOORDFVPROC glad_glFogCoordfv = NULL; PFNGLFOGFPROC glad_glFogf = NULL; PFNGLFOGFVPROC glad_glFogfv = NULL; PFNGLFOGIPROC glad_glFogi = NULL; PFNGLFOGIVPROC glad_glFogiv = NULL; PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer = NULL; PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture = NULL; PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D = NULL; PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D = NULL; PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D = NULL; PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer = NULL; PFNGLFRONTFACEPROC glad_glFrontFace = NULL; PFNGLFRUSTUMPROC glad_glFrustum = NULL; PFNGLGENBUFFERSPROC glad_glGenBuffers = NULL; PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers = NULL; PFNGLGENLISTSPROC glad_glGenLists = NULL; PFNGLGENQUERIESPROC glad_glGenQueries = NULL; PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers = NULL; PFNGLGENSAMPLERSPROC glad_glGenSamplers = NULL; PFNGLGENTEXTURESPROC glad_glGenTextures = NULL; PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays = NULL; PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap = NULL; PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib = NULL; PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform = NULL; PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName = NULL; PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv = NULL; PFNGLGETACTIVEUNIFORMNAMEPROC glad_glGetActiveUniformName = NULL; PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv = NULL; PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders = NULL; PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation = NULL; PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v = NULL; PFNGLGETBOOLEANVPROC glad_glGetBooleanv = NULL; PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v = NULL; PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv = NULL; PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv = NULL; PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData = NULL; PFNGLGETCLIPPLANEPROC glad_glGetClipPlane = NULL; PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage = NULL; PFNGLGETDOUBLEVPROC glad_glGetDoublev = NULL; PFNGLGETERRORPROC glad_glGetError = NULL; PFNGLGETFLOATVPROC glad_glGetFloatv = NULL; PFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex = NULL; PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation = NULL; PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv = NULL; PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v = NULL; PFNGLGETINTEGER64VPROC glad_glGetInteger64v = NULL; PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v = NULL; PFNGLGETINTEGERVPROC glad_glGetIntegerv = NULL; PFNGLGETLIGHTFVPROC glad_glGetLightfv = NULL; PFNGLGETLIGHTIVPROC glad_glGetLightiv = NULL; PFNGLGETMAPDVPROC glad_glGetMapdv = NULL; PFNGLGETMAPFVPROC glad_glGetMapfv = NULL; PFNGLGETMAPIVPROC glad_glGetMapiv = NULL; PFNGLGETMATERIALFVPROC glad_glGetMaterialfv = NULL; PFNGLGETMATERIALIVPROC glad_glGetMaterialiv = NULL; PFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv = NULL; PFNGLGETPIXELMAPFVPROC glad_glGetPixelMapfv = NULL; PFNGLGETPIXELMAPUIVPROC glad_glGetPixelMapuiv = NULL; PFNGLGETPIXELMAPUSVPROC glad_glGetPixelMapusv = NULL; PFNGLGETPOINTERVPROC glad_glGetPointerv = NULL; PFNGLGETPOLYGONSTIPPLEPROC glad_glGetPolygonStipple = NULL; PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog = NULL; PFNGLGETPROGRAMIVPROC glad_glGetProgramiv = NULL; PFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v = NULL; PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv = NULL; PFNGLGETQUERYOBJECTUI64VPROC glad_glGetQueryObjectui64v = NULL; PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv = NULL; PFNGLGETQUERYIVPROC glad_glGetQueryiv = NULL; PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv = NULL; PFNGLGETSAMPLERPARAMETERIIVPROC glad_glGetSamplerParameterIiv = NULL; PFNGLGETSAMPLERPARAMETERIUIVPROC glad_glGetSamplerParameterIuiv = NULL; PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv = NULL; PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv = NULL; PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog = NULL; PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource = NULL; PFNGLGETSHADERIVPROC glad_glGetShaderiv = NULL; PFNGLGETSTRINGPROC glad_glGetString = NULL; PFNGLGETSTRINGIPROC glad_glGetStringi = NULL; PFNGLGETSYNCIVPROC glad_glGetSynciv = NULL; PFNGLGETTEXENVFVPROC glad_glGetTexEnvfv = NULL; PFNGLGETTEXENVIVPROC glad_glGetTexEnviv = NULL; PFNGLGETTEXGENDVPROC glad_glGetTexGendv = NULL; PFNGLGETTEXGENFVPROC glad_glGetTexGenfv = NULL; PFNGLGETTEXGENIVPROC glad_glGetTexGeniv = NULL; PFNGLGETTEXIMAGEPROC glad_glGetTexImage = NULL; PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv = NULL; PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv = NULL; PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv = NULL; PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv = NULL; PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv = NULL; PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv = NULL; PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying = NULL; PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex = NULL; PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices = NULL; PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation = NULL; PFNGLGETUNIFORMFVPROC glad_glGetUniformfv = NULL; PFNGLGETUNIFORMIVPROC glad_glGetUniformiv = NULL; PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv = NULL; PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv = NULL; PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv = NULL; PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv = NULL; PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv = NULL; PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv = NULL; PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv = NULL; PFNGLHINTPROC glad_glHint = NULL; PFNGLINDEXMASKPROC glad_glIndexMask = NULL; PFNGLINDEXPOINTERPROC glad_glIndexPointer = NULL; PFNGLINDEXDPROC glad_glIndexd = NULL; PFNGLINDEXDVPROC glad_glIndexdv = NULL; PFNGLINDEXFPROC glad_glIndexf = NULL; PFNGLINDEXFVPROC glad_glIndexfv = NULL; PFNGLINDEXIPROC glad_glIndexi = NULL; PFNGLINDEXIVPROC glad_glIndexiv = NULL; PFNGLINDEXSPROC glad_glIndexs = NULL; PFNGLINDEXSVPROC glad_glIndexsv = NULL; PFNGLINDEXUBPROC glad_glIndexub = NULL; PFNGLINDEXUBVPROC glad_glIndexubv = NULL; PFNGLINITNAMESPROC glad_glInitNames = NULL; PFNGLINTERLEAVEDARRAYSPROC glad_glInterleavedArrays = NULL; PFNGLISBUFFERPROC glad_glIsBuffer = NULL; PFNGLISENABLEDPROC glad_glIsEnabled = NULL; PFNGLISENABLEDIPROC glad_glIsEnabledi = NULL; PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer = NULL; PFNGLISLISTPROC glad_glIsList = NULL; PFNGLISPROGRAMPROC glad_glIsProgram = NULL; PFNGLISQUERYPROC glad_glIsQuery = NULL; PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer = NULL; PFNGLISSAMPLERPROC glad_glIsSampler = NULL; PFNGLISSHADERPROC glad_glIsShader = NULL; PFNGLISSYNCPROC glad_glIsSync = NULL; PFNGLISTEXTUREPROC glad_glIsTexture = NULL; PFNGLISVERTEXARRAYPROC glad_glIsVertexArray = NULL; PFNGLLIGHTMODELFPROC glad_glLightModelf = NULL; PFNGLLIGHTMODELFVPROC glad_glLightModelfv = NULL; PFNGLLIGHTMODELIPROC glad_glLightModeli = NULL; PFNGLLIGHTMODELIVPROC glad_glLightModeliv = NULL; PFNGLLIGHTFPROC glad_glLightf = NULL; PFNGLLIGHTFVPROC glad_glLightfv = NULL; PFNGLLIGHTIPROC glad_glLighti = NULL; PFNGLLIGHTIVPROC glad_glLightiv = NULL; PFNGLLINESTIPPLEPROC glad_glLineStipple = NULL; PFNGLLINEWIDTHPROC glad_glLineWidth = NULL; PFNGLLINKPROGRAMPROC glad_glLinkProgram = NULL; PFNGLLISTBASEPROC glad_glListBase = NULL; PFNGLLOADIDENTITYPROC glad_glLoadIdentity = NULL; PFNGLLOADMATRIXDPROC glad_glLoadMatrixd = NULL; PFNGLLOADMATRIXFPROC glad_glLoadMatrixf = NULL; PFNGLLOADNAMEPROC glad_glLoadName = NULL; PFNGLLOADTRANSPOSEMATRIXDPROC glad_glLoadTransposeMatrixd = NULL; PFNGLLOADTRANSPOSEMATRIXFPROC glad_glLoadTransposeMatrixf = NULL; PFNGLLOGICOPPROC glad_glLogicOp = NULL; PFNGLMAP1DPROC glad_glMap1d = NULL; PFNGLMAP1FPROC glad_glMap1f = NULL; PFNGLMAP2DPROC glad_glMap2d = NULL; PFNGLMAP2FPROC glad_glMap2f = NULL; PFNGLMAPBUFFERPROC glad_glMapBuffer = NULL; PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange = NULL; PFNGLMAPGRID1DPROC glad_glMapGrid1d = NULL; PFNGLMAPGRID1FPROC glad_glMapGrid1f = NULL; PFNGLMAPGRID2DPROC glad_glMapGrid2d = NULL; PFNGLMAPGRID2FPROC glad_glMapGrid2f = NULL; PFNGLMATERIALFPROC glad_glMaterialf = NULL; PFNGLMATERIALFVPROC glad_glMaterialfv = NULL; PFNGLMATERIALIPROC glad_glMateriali = NULL; PFNGLMATERIALIVPROC glad_glMaterialiv = NULL; PFNGLMATRIXMODEPROC glad_glMatrixMode = NULL; PFNGLMULTMATRIXDPROC glad_glMultMatrixd = NULL; PFNGLMULTMATRIXFPROC glad_glMultMatrixf = NULL; PFNGLMULTTRANSPOSEMATRIXDPROC glad_glMultTransposeMatrixd = NULL; PFNGLMULTTRANSPOSEMATRIXFPROC glad_glMultTransposeMatrixf = NULL; PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays = NULL; PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements = NULL; PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex = NULL; PFNGLMULTITEXCOORD1DPROC glad_glMultiTexCoord1d = NULL; PFNGLMULTITEXCOORD1DVPROC glad_glMultiTexCoord1dv = NULL; PFNGLMULTITEXCOORD1FPROC glad_glMultiTexCoord1f = NULL; PFNGLMULTITEXCOORD1FVPROC glad_glMultiTexCoord1fv = NULL; PFNGLMULTITEXCOORD1IPROC glad_glMultiTexCoord1i = NULL; PFNGLMULTITEXCOORD1IVPROC glad_glMultiTexCoord1iv = NULL; PFNGLMULTITEXCOORD1SPROC glad_glMultiTexCoord1s = NULL; PFNGLMULTITEXCOORD1SVPROC glad_glMultiTexCoord1sv = NULL; PFNGLMULTITEXCOORD2DPROC glad_glMultiTexCoord2d = NULL; PFNGLMULTITEXCOORD2DVPROC glad_glMultiTexCoord2dv = NULL; PFNGLMULTITEXCOORD2FPROC glad_glMultiTexCoord2f = NULL; PFNGLMULTITEXCOORD2FVPROC glad_glMultiTexCoord2fv = NULL; PFNGLMULTITEXCOORD2IPROC glad_glMultiTexCoord2i = NULL; PFNGLMULTITEXCOORD2IVPROC glad_glMultiTexCoord2iv = NULL; PFNGLMULTITEXCOORD2SPROC glad_glMultiTexCoord2s = NULL; PFNGLMULTITEXCOORD2SVPROC glad_glMultiTexCoord2sv = NULL; PFNGLMULTITEXCOORD3DPROC glad_glMultiTexCoord3d = NULL; PFNGLMULTITEXCOORD3DVPROC glad_glMultiTexCoord3dv = NULL; PFNGLMULTITEXCOORD3FPROC glad_glMultiTexCoord3f = NULL; PFNGLMULTITEXCOORD3FVPROC glad_glMultiTexCoord3fv = NULL; PFNGLMULTITEXCOORD3IPROC glad_glMultiTexCoord3i = NULL; PFNGLMULTITEXCOORD3IVPROC glad_glMultiTexCoord3iv = NULL; PFNGLMULTITEXCOORD3SPROC glad_glMultiTexCoord3s = NULL; PFNGLMULTITEXCOORD3SVPROC glad_glMultiTexCoord3sv = NULL; PFNGLMULTITEXCOORD4DPROC glad_glMultiTexCoord4d = NULL; PFNGLMULTITEXCOORD4DVPROC glad_glMultiTexCoord4dv = NULL; PFNGLMULTITEXCOORD4FPROC glad_glMultiTexCoord4f = NULL; PFNGLMULTITEXCOORD4FVPROC glad_glMultiTexCoord4fv = NULL; PFNGLMULTITEXCOORD4IPROC glad_glMultiTexCoord4i = NULL; PFNGLMULTITEXCOORD4IVPROC glad_glMultiTexCoord4iv = NULL; PFNGLMULTITEXCOORD4SPROC glad_glMultiTexCoord4s = NULL; PFNGLMULTITEXCOORD4SVPROC glad_glMultiTexCoord4sv = NULL; PFNGLMULTITEXCOORDP1UIPROC glad_glMultiTexCoordP1ui = NULL; PFNGLMULTITEXCOORDP1UIVPROC glad_glMultiTexCoordP1uiv = NULL; PFNGLMULTITEXCOORDP2UIPROC glad_glMultiTexCoordP2ui = NULL; PFNGLMULTITEXCOORDP2UIVPROC glad_glMultiTexCoordP2uiv = NULL; PFNGLMULTITEXCOORDP3UIPROC glad_glMultiTexCoordP3ui = NULL; PFNGLMULTITEXCOORDP3UIVPROC glad_glMultiTexCoordP3uiv = NULL; PFNGLMULTITEXCOORDP4UIPROC glad_glMultiTexCoordP4ui = NULL; PFNGLMULTITEXCOORDP4UIVPROC glad_glMultiTexCoordP4uiv = NULL; PFNGLNEWLISTPROC glad_glNewList = NULL; PFNGLNORMAL3BPROC glad_glNormal3b = NULL; PFNGLNORMAL3BVPROC glad_glNormal3bv = NULL; PFNGLNORMAL3DPROC glad_glNormal3d = NULL; PFNGLNORMAL3DVPROC glad_glNormal3dv = NULL; PFNGLNORMAL3FPROC glad_glNormal3f = NULL; PFNGLNORMAL3FVPROC glad_glNormal3fv = NULL; PFNGLNORMAL3IPROC glad_glNormal3i = NULL; PFNGLNORMAL3IVPROC glad_glNormal3iv = NULL; PFNGLNORMAL3SPROC glad_glNormal3s = NULL; PFNGLNORMAL3SVPROC glad_glNormal3sv = NULL; PFNGLNORMALP3UIPROC glad_glNormalP3ui = NULL; PFNGLNORMALP3UIVPROC glad_glNormalP3uiv = NULL; PFNGLNORMALPOINTERPROC glad_glNormalPointer = NULL; PFNGLORTHOPROC glad_glOrtho = NULL; PFNGLPASSTHROUGHPROC glad_glPassThrough = NULL; PFNGLPIXELMAPFVPROC glad_glPixelMapfv = NULL; PFNGLPIXELMAPUIVPROC glad_glPixelMapuiv = NULL; PFNGLPIXELMAPUSVPROC glad_glPixelMapusv = NULL; PFNGLPIXELSTOREFPROC glad_glPixelStoref = NULL; PFNGLPIXELSTOREIPROC glad_glPixelStorei = NULL; PFNGLPIXELTRANSFERFPROC glad_glPixelTransferf = NULL; PFNGLPIXELTRANSFERIPROC glad_glPixelTransferi = NULL; PFNGLPIXELZOOMPROC glad_glPixelZoom = NULL; PFNGLPOINTPARAMETERFPROC glad_glPointParameterf = NULL; PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv = NULL; PFNGLPOINTPARAMETERIPROC glad_glPointParameteri = NULL; PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv = NULL; PFNGLPOINTSIZEPROC glad_glPointSize = NULL; PFNGLPOLYGONMODEPROC glad_glPolygonMode = NULL; PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset = NULL; PFNGLPOLYGONSTIPPLEPROC glad_glPolygonStipple = NULL; PFNGLPOPATTRIBPROC glad_glPopAttrib = NULL; PFNGLPOPCLIENTATTRIBPROC glad_glPopClientAttrib = NULL; PFNGLPOPMATRIXPROC glad_glPopMatrix = NULL; PFNGLPOPNAMEPROC glad_glPopName = NULL; PFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex = NULL; PFNGLPRIORITIZETEXTURESPROC glad_glPrioritizeTextures = NULL; PFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex = NULL; PFNGLPUSHATTRIBPROC glad_glPushAttrib = NULL; PFNGLPUSHCLIENTATTRIBPROC glad_glPushClientAttrib = NULL; PFNGLPUSHMATRIXPROC glad_glPushMatrix = NULL; PFNGLPUSHNAMEPROC glad_glPushName = NULL; PFNGLQUERYCOUNTERPROC glad_glQueryCounter = NULL; PFNGLRASTERPOS2DPROC glad_glRasterPos2d = NULL; PFNGLRASTERPOS2DVPROC glad_glRasterPos2dv = NULL; PFNGLRASTERPOS2FPROC glad_glRasterPos2f = NULL; PFNGLRASTERPOS2FVPROC glad_glRasterPos2fv = NULL; PFNGLRASTERPOS2IPROC glad_glRasterPos2i = NULL; PFNGLRASTERPOS2IVPROC glad_glRasterPos2iv = NULL; PFNGLRASTERPOS2SPROC glad_glRasterPos2s = NULL; PFNGLRASTERPOS2SVPROC glad_glRasterPos2sv = NULL; PFNGLRASTERPOS3DPROC glad_glRasterPos3d = NULL; PFNGLRASTERPOS3DVPROC glad_glRasterPos3dv = NULL; PFNGLRASTERPOS3FPROC glad_glRasterPos3f = NULL; PFNGLRASTERPOS3FVPROC glad_glRasterPos3fv = NULL; PFNGLRASTERPOS3IPROC glad_glRasterPos3i = NULL; PFNGLRASTERPOS3IVPROC glad_glRasterPos3iv = NULL; PFNGLRASTERPOS3SPROC glad_glRasterPos3s = NULL; PFNGLRASTERPOS3SVPROC glad_glRasterPos3sv = NULL; PFNGLRASTERPOS4DPROC glad_glRasterPos4d = NULL; PFNGLRASTERPOS4DVPROC glad_glRasterPos4dv = NULL; PFNGLRASTERPOS4FPROC glad_glRasterPos4f = NULL; PFNGLRASTERPOS4FVPROC glad_glRasterPos4fv = NULL; PFNGLRASTERPOS4IPROC glad_glRasterPos4i = NULL; PFNGLRASTERPOS4IVPROC glad_glRasterPos4iv = NULL; PFNGLRASTERPOS4SPROC glad_glRasterPos4s = NULL; PFNGLRASTERPOS4SVPROC glad_glRasterPos4sv = NULL; PFNGLREADBUFFERPROC glad_glReadBuffer = NULL; PFNGLREADPIXELSPROC glad_glReadPixels = NULL; PFNGLRECTDPROC glad_glRectd = NULL; PFNGLRECTDVPROC glad_glRectdv = NULL; PFNGLRECTFPROC glad_glRectf = NULL; PFNGLRECTFVPROC glad_glRectfv = NULL; PFNGLRECTIPROC glad_glRecti = NULL; PFNGLRECTIVPROC glad_glRectiv = NULL; PFNGLRECTSPROC glad_glRects = NULL; PFNGLRECTSVPROC glad_glRectsv = NULL; PFNGLRENDERMODEPROC glad_glRenderMode = NULL; PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage = NULL; PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample = NULL; PFNGLROTATEDPROC glad_glRotated = NULL; PFNGLROTATEFPROC glad_glRotatef = NULL; PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage = NULL; PFNGLSAMPLEMASKIPROC glad_glSampleMaski = NULL; PFNGLSAMPLERPARAMETERIIVPROC glad_glSamplerParameterIiv = NULL; PFNGLSAMPLERPARAMETERIUIVPROC glad_glSamplerParameterIuiv = NULL; PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf = NULL; PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv = NULL; PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri = NULL; PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv = NULL; PFNGLSCALEDPROC glad_glScaled = NULL; PFNGLSCALEFPROC glad_glScalef = NULL; PFNGLSCISSORPROC glad_glScissor = NULL; PFNGLSECONDARYCOLOR3BPROC glad_glSecondaryColor3b = NULL; PFNGLSECONDARYCOLOR3BVPROC glad_glSecondaryColor3bv = NULL; PFNGLSECONDARYCOLOR3DPROC glad_glSecondaryColor3d = NULL; PFNGLSECONDARYCOLOR3DVPROC glad_glSecondaryColor3dv = NULL; PFNGLSECONDARYCOLOR3FPROC glad_glSecondaryColor3f = NULL; PFNGLSECONDARYCOLOR3FVPROC glad_glSecondaryColor3fv = NULL; PFNGLSECONDARYCOLOR3IPROC glad_glSecondaryColor3i = NULL; PFNGLSECONDARYCOLOR3IVPROC glad_glSecondaryColor3iv = NULL; PFNGLSECONDARYCOLOR3SPROC glad_glSecondaryColor3s = NULL; PFNGLSECONDARYCOLOR3SVPROC glad_glSecondaryColor3sv = NULL; PFNGLSECONDARYCOLOR3UBPROC glad_glSecondaryColor3ub = NULL; PFNGLSECONDARYCOLOR3UBVPROC glad_glSecondaryColor3ubv = NULL; PFNGLSECONDARYCOLOR3UIPROC glad_glSecondaryColor3ui = NULL; PFNGLSECONDARYCOLOR3UIVPROC glad_glSecondaryColor3uiv = NULL; PFNGLSECONDARYCOLOR3USPROC glad_glSecondaryColor3us = NULL; PFNGLSECONDARYCOLOR3USVPROC glad_glSecondaryColor3usv = NULL; PFNGLSECONDARYCOLORP3UIPROC glad_glSecondaryColorP3ui = NULL; PFNGLSECONDARYCOLORP3UIVPROC glad_glSecondaryColorP3uiv = NULL; PFNGLSECONDARYCOLORPOINTERPROC glad_glSecondaryColorPointer = NULL; PFNGLSELECTBUFFERPROC glad_glSelectBuffer = NULL; PFNGLSHADEMODELPROC glad_glShadeModel = NULL; PFNGLSHADERSOURCEPROC glad_glShaderSource = NULL; PFNGLSTENCILFUNCPROC glad_glStencilFunc = NULL; PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate = NULL; PFNGLSTENCILMASKPROC glad_glStencilMask = NULL; PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate = NULL; PFNGLSTENCILOPPROC glad_glStencilOp = NULL; PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate = NULL; PFNGLTEXBUFFERPROC glad_glTexBuffer = NULL; PFNGLTEXCOORD1DPROC glad_glTexCoord1d = NULL; PFNGLTEXCOORD1DVPROC glad_glTexCoord1dv = NULL; PFNGLTEXCOORD1FPROC glad_glTexCoord1f = NULL; PFNGLTEXCOORD1FVPROC glad_glTexCoord1fv = NULL; PFNGLTEXCOORD1IPROC glad_glTexCoord1i = NULL; PFNGLTEXCOORD1IVPROC glad_glTexCoord1iv = NULL; PFNGLTEXCOORD1SPROC glad_glTexCoord1s = NULL; PFNGLTEXCOORD1SVPROC glad_glTexCoord1sv = NULL; PFNGLTEXCOORD2DPROC glad_glTexCoord2d = NULL; PFNGLTEXCOORD2DVPROC glad_glTexCoord2dv = NULL; PFNGLTEXCOORD2FPROC glad_glTexCoord2f = NULL; PFNGLTEXCOORD2FVPROC glad_glTexCoord2fv = NULL; PFNGLTEXCOORD2IPROC glad_glTexCoord2i = NULL; PFNGLTEXCOORD2IVPROC glad_glTexCoord2iv = NULL; PFNGLTEXCOORD2SPROC glad_glTexCoord2s = NULL; PFNGLTEXCOORD2SVPROC glad_glTexCoord2sv = NULL; PFNGLTEXCOORD3DPROC glad_glTexCoord3d = NULL; PFNGLTEXCOORD3DVPROC glad_glTexCoord3dv = NULL; PFNGLTEXCOORD3FPROC glad_glTexCoord3f = NULL; PFNGLTEXCOORD3FVPROC glad_glTexCoord3fv = NULL; PFNGLTEXCOORD3IPROC glad_glTexCoord3i = NULL; PFNGLTEXCOORD3IVPROC glad_glTexCoord3iv = NULL; PFNGLTEXCOORD3SPROC glad_glTexCoord3s = NULL; PFNGLTEXCOORD3SVPROC glad_glTexCoord3sv = NULL; PFNGLTEXCOORD4DPROC glad_glTexCoord4d = NULL; PFNGLTEXCOORD4DVPROC glad_glTexCoord4dv = NULL; PFNGLTEXCOORD4FPROC glad_glTexCoord4f = NULL; PFNGLTEXCOORD4FVPROC glad_glTexCoord4fv = NULL; PFNGLTEXCOORD4IPROC glad_glTexCoord4i = NULL; PFNGLTEXCOORD4IVPROC glad_glTexCoord4iv = NULL; PFNGLTEXCOORD4SPROC glad_glTexCoord4s = NULL; PFNGLTEXCOORD4SVPROC glad_glTexCoord4sv = NULL; PFNGLTEXCOORDP1UIPROC glad_glTexCoordP1ui = NULL; PFNGLTEXCOORDP1UIVPROC glad_glTexCoordP1uiv = NULL; PFNGLTEXCOORDP2UIPROC glad_glTexCoordP2ui = NULL; PFNGLTEXCOORDP2UIVPROC glad_glTexCoordP2uiv = NULL; PFNGLTEXCOORDP3UIPROC glad_glTexCoordP3ui = NULL; PFNGLTEXCOORDP3UIVPROC glad_glTexCoordP3uiv = NULL; PFNGLTEXCOORDP4UIPROC glad_glTexCoordP4ui = NULL; PFNGLTEXCOORDP4UIVPROC glad_glTexCoordP4uiv = NULL; PFNGLTEXCOORDPOINTERPROC glad_glTexCoordPointer = NULL; PFNGLTEXENVFPROC glad_glTexEnvf = NULL; PFNGLTEXENVFVPROC glad_glTexEnvfv = NULL; PFNGLTEXENVIPROC glad_glTexEnvi = NULL; PFNGLTEXENVIVPROC glad_glTexEnviv = NULL; PFNGLTEXGENDPROC glad_glTexGend = NULL; PFNGLTEXGENDVPROC glad_glTexGendv = NULL; PFNGLTEXGENFPROC glad_glTexGenf = NULL; PFNGLTEXGENFVPROC glad_glTexGenfv = NULL; PFNGLTEXGENIPROC glad_glTexGeni = NULL; PFNGLTEXGENIVPROC glad_glTexGeniv = NULL; PFNGLTEXIMAGE1DPROC glad_glTexImage1D = NULL; PFNGLTEXIMAGE2DPROC glad_glTexImage2D = NULL; PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_glTexImage2DMultisample = NULL; PFNGLTEXIMAGE3DPROC glad_glTexImage3D = NULL; PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_glTexImage3DMultisample = NULL; PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv = NULL; PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv = NULL; PFNGLTEXPARAMETERFPROC glad_glTexParameterf = NULL; PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv = NULL; PFNGLTEXPARAMETERIPROC glad_glTexParameteri = NULL; PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv = NULL; PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D = NULL; PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D = NULL; PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D = NULL; PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings = NULL; PFNGLTRANSLATEDPROC glad_glTranslated = NULL; PFNGLTRANSLATEFPROC glad_glTranslatef = NULL; PFNGLUNIFORM1FPROC glad_glUniform1f = NULL; PFNGLUNIFORM1FVPROC glad_glUniform1fv = NULL; PFNGLUNIFORM1IPROC glad_glUniform1i = NULL; PFNGLUNIFORM1IVPROC glad_glUniform1iv = NULL; PFNGLUNIFORM1UIPROC glad_glUniform1ui = NULL; PFNGLUNIFORM1UIVPROC glad_glUniform1uiv = NULL; PFNGLUNIFORM2FPROC glad_glUniform2f = NULL; PFNGLUNIFORM2FVPROC glad_glUniform2fv = NULL; PFNGLUNIFORM2IPROC glad_glUniform2i = NULL; PFNGLUNIFORM2IVPROC glad_glUniform2iv = NULL; PFNGLUNIFORM2UIPROC glad_glUniform2ui = NULL; PFNGLUNIFORM2UIVPROC glad_glUniform2uiv = NULL; PFNGLUNIFORM3FPROC glad_glUniform3f = NULL; PFNGLUNIFORM3FVPROC glad_glUniform3fv = NULL; PFNGLUNIFORM3IPROC glad_glUniform3i = NULL; PFNGLUNIFORM3IVPROC glad_glUniform3iv = NULL; PFNGLUNIFORM3UIPROC glad_glUniform3ui = NULL; PFNGLUNIFORM3UIVPROC glad_glUniform3uiv = NULL; PFNGLUNIFORM4FPROC glad_glUniform4f = NULL; PFNGLUNIFORM4FVPROC glad_glUniform4fv = NULL; PFNGLUNIFORM4IPROC glad_glUniform4i = NULL; PFNGLUNIFORM4IVPROC glad_glUniform4iv = NULL; PFNGLUNIFORM4UIPROC glad_glUniform4ui = NULL; PFNGLUNIFORM4UIVPROC glad_glUniform4uiv = NULL; PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding = NULL; PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv = NULL; PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv = NULL; PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv = NULL; PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv = NULL; PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv = NULL; PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv = NULL; PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv = NULL; PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv = NULL; PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv = NULL; PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer = NULL; PFNGLUSEPROGRAMPROC glad_glUseProgram = NULL; PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram = NULL; PFNGLVERTEX2DPROC glad_glVertex2d = NULL; PFNGLVERTEX2DVPROC glad_glVertex2dv = NULL; PFNGLVERTEX2FPROC glad_glVertex2f = NULL; PFNGLVERTEX2FVPROC glad_glVertex2fv = NULL; PFNGLVERTEX2IPROC glad_glVertex2i = NULL; PFNGLVERTEX2IVPROC glad_glVertex2iv = NULL; PFNGLVERTEX2SPROC glad_glVertex2s = NULL; PFNGLVERTEX2SVPROC glad_glVertex2sv = NULL; PFNGLVERTEX3DPROC glad_glVertex3d = NULL; PFNGLVERTEX3DVPROC glad_glVertex3dv = NULL; PFNGLVERTEX3FPROC glad_glVertex3f = NULL; PFNGLVERTEX3FVPROC glad_glVertex3fv = NULL; PFNGLVERTEX3IPROC glad_glVertex3i = NULL; PFNGLVERTEX3IVPROC glad_glVertex3iv = NULL; PFNGLVERTEX3SPROC glad_glVertex3s = NULL; PFNGLVERTEX3SVPROC glad_glVertex3sv = NULL; PFNGLVERTEX4DPROC glad_glVertex4d = NULL; PFNGLVERTEX4DVPROC glad_glVertex4dv = NULL; PFNGLVERTEX4FPROC glad_glVertex4f = NULL; PFNGLVERTEX4FVPROC glad_glVertex4fv = NULL; PFNGLVERTEX4IPROC glad_glVertex4i = NULL; PFNGLVERTEX4IVPROC glad_glVertex4iv = NULL; PFNGLVERTEX4SPROC glad_glVertex4s = NULL; PFNGLVERTEX4SVPROC glad_glVertex4sv = NULL; PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d = NULL; PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv = NULL; PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f = NULL; PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv = NULL; PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s = NULL; PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv = NULL; PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d = NULL; PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv = NULL; PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f = NULL; PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv = NULL; PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s = NULL; PFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv = NULL; PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d = NULL; PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv = NULL; PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f = NULL; PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv = NULL; PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s = NULL; PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv = NULL; PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv = NULL; PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv = NULL; PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv = NULL; PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub = NULL; PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv = NULL; PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv = NULL; PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv = NULL; PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv = NULL; PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d = NULL; PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv = NULL; PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f = NULL; PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv = NULL; PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv = NULL; PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s = NULL; PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv = NULL; PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv = NULL; PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv = NULL; PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv = NULL; PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor = NULL; PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i = NULL; PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv = NULL; PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui = NULL; PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv = NULL; PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i = NULL; PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv = NULL; PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui = NULL; PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv = NULL; PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i = NULL; PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv = NULL; PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui = NULL; PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv = NULL; PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv = NULL; PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i = NULL; PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv = NULL; PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv = NULL; PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv = NULL; PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui = NULL; PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv = NULL; PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv = NULL; PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer = NULL; PFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui = NULL; PFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv = NULL; PFNGLVERTEXATTRIBP2UIPROC glad_glVertexAttribP2ui = NULL; PFNGLVERTEXATTRIBP2UIVPROC glad_glVertexAttribP2uiv = NULL; PFNGLVERTEXATTRIBP3UIPROC glad_glVertexAttribP3ui = NULL; PFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv = NULL; PFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui = NULL; PFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv = NULL; PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer = NULL; PFNGLVERTEXP2UIPROC glad_glVertexP2ui = NULL; PFNGLVERTEXP2UIVPROC glad_glVertexP2uiv = NULL; PFNGLVERTEXP3UIPROC glad_glVertexP3ui = NULL; PFNGLVERTEXP3UIVPROC glad_glVertexP3uiv = NULL; PFNGLVERTEXP4UIPROC glad_glVertexP4ui = NULL; PFNGLVERTEXP4UIVPROC glad_glVertexP4uiv = NULL; PFNGLVERTEXPOINTERPROC glad_glVertexPointer = NULL; PFNGLVIEWPORTPROC glad_glViewport = NULL; PFNGLWAITSYNCPROC glad_glWaitSync = NULL; PFNGLWINDOWPOS2DPROC glad_glWindowPos2d = NULL; PFNGLWINDOWPOS2DVPROC glad_glWindowPos2dv = NULL; PFNGLWINDOWPOS2FPROC glad_glWindowPos2f = NULL; PFNGLWINDOWPOS2FVPROC glad_glWindowPos2fv = NULL; PFNGLWINDOWPOS2IPROC glad_glWindowPos2i = NULL; PFNGLWINDOWPOS2IVPROC glad_glWindowPos2iv = NULL; PFNGLWINDOWPOS2SPROC glad_glWindowPos2s = NULL; PFNGLWINDOWPOS2SVPROC glad_glWindowPos2sv = NULL; PFNGLWINDOWPOS3DPROC glad_glWindowPos3d = NULL; PFNGLWINDOWPOS3DVPROC glad_glWindowPos3dv = NULL; PFNGLWINDOWPOS3FPROC glad_glWindowPos3f = NULL; PFNGLWINDOWPOS3FVPROC glad_glWindowPos3fv = NULL; PFNGLWINDOWPOS3IPROC glad_glWindowPos3i = NULL; PFNGLWINDOWPOS3IVPROC glad_glWindowPos3iv = NULL; PFNGLWINDOWPOS3SPROC glad_glWindowPos3s = NULL; PFNGLWINDOWPOS3SVPROC glad_glWindowPos3sv = NULL; static void load_GL_VERSION_1_0(GLADloadproc load) { if(!GLAD_GL_VERSION_1_0) return; glad_glCullFace = (PFNGLCULLFACEPROC)load("glCullFace"); glad_glFrontFace = (PFNGLFRONTFACEPROC)load("glFrontFace"); glad_glHint = (PFNGLHINTPROC)load("glHint"); glad_glLineWidth = (PFNGLLINEWIDTHPROC)load("glLineWidth"); glad_glPointSize = (PFNGLPOINTSIZEPROC)load("glPointSize"); glad_glPolygonMode = (PFNGLPOLYGONMODEPROC)load("glPolygonMode"); glad_glScissor = (PFNGLSCISSORPROC)load("glScissor"); glad_glTexParameterf = (PFNGLTEXPARAMETERFPROC)load("glTexParameterf"); glad_glTexParameterfv = (PFNGLTEXPARAMETERFVPROC)load("glTexParameterfv"); glad_glTexParameteri = (PFNGLTEXPARAMETERIPROC)load("glTexParameteri"); glad_glTexParameteriv = (PFNGLTEXPARAMETERIVPROC)load("glTexParameteriv"); glad_glTexImage1D = (PFNGLTEXIMAGE1DPROC)load("glTexImage1D"); glad_glTexImage2D = (PFNGLTEXIMAGE2DPROC)load("glTexImage2D"); glad_glDrawBuffer = (PFNGLDRAWBUFFERPROC)load("glDrawBuffer"); glad_glClear = (PFNGLCLEARPROC)load("glClear"); glad_glClearColor = (PFNGLCLEARCOLORPROC)load("glClearColor"); glad_glClearStencil = (PFNGLCLEARSTENCILPROC)load("glClearStencil"); glad_glClearDepth = (PFNGLCLEARDEPTHPROC)load("glClearDepth"); glad_glStencilMask = (PFNGLSTENCILMASKPROC)load("glStencilMask"); glad_glColorMask = (PFNGLCOLORMASKPROC)load("glColorMask"); glad_glDepthMask = (PFNGLDEPTHMASKPROC)load("glDepthMask"); glad_glDisable = (PFNGLDISABLEPROC)load("glDisable"); glad_glEnable = (PFNGLENABLEPROC)load("glEnable"); glad_glFinish = (PFNGLFINISHPROC)load("glFinish"); glad_glFlush = (PFNGLFLUSHPROC)load("glFlush"); glad_glBlendFunc = (PFNGLBLENDFUNCPROC)load("glBlendFunc"); glad_glLogicOp = (PFNGLLOGICOPPROC)load("glLogicOp"); glad_glStencilFunc = (PFNGLSTENCILFUNCPROC)load("glStencilFunc"); glad_glStencilOp = (PFNGLSTENCILOPPROC)load("glStencilOp"); glad_glDepthFunc = (PFNGLDEPTHFUNCPROC)load("glDepthFunc"); glad_glPixelStoref = (PFNGLPIXELSTOREFPROC)load("glPixelStoref"); glad_glPixelStorei = (PFNGLPIXELSTOREIPROC)load("glPixelStorei"); glad_glReadBuffer = (PFNGLREADBUFFERPROC)load("glReadBuffer"); glad_glReadPixels = (PFNGLREADPIXELSPROC)load("glReadPixels"); glad_glGetBooleanv = (PFNGLGETBOOLEANVPROC)load("glGetBooleanv"); glad_glGetDoublev = (PFNGLGETDOUBLEVPROC)load("glGetDoublev"); glad_glGetError = (PFNGLGETERRORPROC)load("glGetError"); glad_glGetFloatv = (PFNGLGETFLOATVPROC)load("glGetFloatv"); glad_glGetIntegerv = (PFNGLGETINTEGERVPROC)load("glGetIntegerv"); glad_glGetString = (PFNGLGETSTRINGPROC)load("glGetString"); glad_glGetTexImage = (PFNGLGETTEXIMAGEPROC)load("glGetTexImage"); glad_glGetTexParameterfv = (PFNGLGETTEXPARAMETERFVPROC)load("glGetTexParameterfv"); glad_glGetTexParameteriv = (PFNGLGETTEXPARAMETERIVPROC)load("glGetTexParameteriv"); glad_glGetTexLevelParameterfv = (PFNGLGETTEXLEVELPARAMETERFVPROC)load("glGetTexLevelParameterfv"); glad_glGetTexLevelParameteriv = (PFNGLGETTEXLEVELPARAMETERIVPROC)load("glGetTexLevelParameteriv"); glad_glIsEnabled = (PFNGLISENABLEDPROC)load("glIsEnabled"); glad_glDepthRange = (PFNGLDEPTHRANGEPROC)load("glDepthRange"); glad_glViewport = (PFNGLVIEWPORTPROC)load("glViewport"); glad_glNewList = (PFNGLNEWLISTPROC)load("glNewList"); glad_glEndList = (PFNGLENDLISTPROC)load("glEndList"); glad_glCallList = (PFNGLCALLLISTPROC)load("glCallList"); glad_glCallLists = (PFNGLCALLLISTSPROC)load("glCallLists"); glad_glDeleteLists = (PFNGLDELETELISTSPROC)load("glDeleteLists"); glad_glGenLists = (PFNGLGENLISTSPROC)load("glGenLists"); glad_glListBase = (PFNGLLISTBASEPROC)load("glListBase"); glad_glBegin = (PFNGLBEGINPROC)load("glBegin"); glad_glBitmap = (PFNGLBITMAPPROC)load("glBitmap"); glad_glColor3b = (PFNGLCOLOR3BPROC)load("glColor3b"); glad_glColor3bv = (PFNGLCOLOR3BVPROC)load("glColor3bv"); glad_glColor3d = (PFNGLCOLOR3DPROC)load("glColor3d"); glad_glColor3dv = (PFNGLCOLOR3DVPROC)load("glColor3dv"); glad_glColor3f = (PFNGLCOLOR3FPROC)load("glColor3f"); glad_glColor3fv = (PFNGLCOLOR3FVPROC)load("glColor3fv"); glad_glColor3i = (PFNGLCOLOR3IPROC)load("glColor3i"); glad_glColor3iv = (PFNGLCOLOR3IVPROC)load("glColor3iv"); glad_glColor3s = (PFNGLCOLOR3SPROC)load("glColor3s"); glad_glColor3sv = (PFNGLCOLOR3SVPROC)load("glColor3sv"); glad_glColor3ub = (PFNGLCOLOR3UBPROC)load("glColor3ub"); glad_glColor3ubv = (PFNGLCOLOR3UBVPROC)load("glColor3ubv"); glad_glColor3ui = (PFNGLCOLOR3UIPROC)load("glColor3ui"); glad_glColor3uiv = (PFNGLCOLOR3UIVPROC)load("glColor3uiv"); glad_glColor3us = (PFNGLCOLOR3USPROC)load("glColor3us"); glad_glColor3usv = (PFNGLCOLOR3USVPROC)load("glColor3usv"); glad_glColor4b = (PFNGLCOLOR4BPROC)load("glColor4b"); glad_glColor4bv = (PFNGLCOLOR4BVPROC)load("glColor4bv"); glad_glColor4d = (PFNGLCOLOR4DPROC)load("glColor4d"); glad_glColor4dv = (PFNGLCOLOR4DVPROC)load("glColor4dv"); glad_glColor4f = (PFNGLCOLOR4FPROC)load("glColor4f"); glad_glColor4fv = (PFNGLCOLOR4FVPROC)load("glColor4fv"); glad_glColor4i = (PFNGLCOLOR4IPROC)load("glColor4i"); glad_glColor4iv = (PFNGLCOLOR4IVPROC)load("glColor4iv"); glad_glColor4s = (PFNGLCOLOR4SPROC)load("glColor4s"); glad_glColor4sv = (PFNGLCOLOR4SVPROC)load("glColor4sv"); glad_glColor4ub = (PFNGLCOLOR4UBPROC)load("glColor4ub"); glad_glColor4ubv = (PFNGLCOLOR4UBVPROC)load("glColor4ubv"); glad_glColor4ui = (PFNGLCOLOR4UIPROC)load("glColor4ui"); glad_glColor4uiv = (PFNGLCOLOR4UIVPROC)load("glColor4uiv"); glad_glColor4us = (PFNGLCOLOR4USPROC)load("glColor4us"); glad_glColor4usv = (PFNGLCOLOR4USVPROC)load("glColor4usv"); glad_glEdgeFlag = (PFNGLEDGEFLAGPROC)load("glEdgeFlag"); glad_glEdgeFlagv = (PFNGLEDGEFLAGVPROC)load("glEdgeFlagv"); glad_glEnd = (PFNGLENDPROC)load("glEnd"); glad_glIndexd = (PFNGLINDEXDPROC)load("glIndexd"); glad_glIndexdv = (PFNGLINDEXDVPROC)load("glIndexdv"); glad_glIndexf = (PFNGLINDEXFPROC)load("glIndexf"); glad_glIndexfv = (PFNGLINDEXFVPROC)load("glIndexfv"); glad_glIndexi = (PFNGLINDEXIPROC)load("glIndexi"); glad_glIndexiv = (PFNGLINDEXIVPROC)load("glIndexiv"); glad_glIndexs = (PFNGLINDEXSPROC)load("glIndexs"); glad_glIndexsv = (PFNGLINDEXSVPROC)load("glIndexsv"); glad_glNormal3b = (PFNGLNORMAL3BPROC)load("glNormal3b"); glad_glNormal3bv = (PFNGLNORMAL3BVPROC)load("glNormal3bv"); glad_glNormal3d = (PFNGLNORMAL3DPROC)load("glNormal3d"); glad_glNormal3dv = (PFNGLNORMAL3DVPROC)load("glNormal3dv"); glad_glNormal3f = (PFNGLNORMAL3FPROC)load("glNormal3f"); glad_glNormal3fv = (PFNGLNORMAL3FVPROC)load("glNormal3fv"); glad_glNormal3i = (PFNGLNORMAL3IPROC)load("glNormal3i"); glad_glNormal3iv = (PFNGLNORMAL3IVPROC)load("glNormal3iv"); glad_glNormal3s = (PFNGLNORMAL3SPROC)load("glNormal3s"); glad_glNormal3sv = (PFNGLNORMAL3SVPROC)load("glNormal3sv"); glad_glRasterPos2d = (PFNGLRASTERPOS2DPROC)load("glRasterPos2d"); glad_glRasterPos2dv = (PFNGLRASTERPOS2DVPROC)load("glRasterPos2dv"); glad_glRasterPos2f = (PFNGLRASTERPOS2FPROC)load("glRasterPos2f"); glad_glRasterPos2fv = (PFNGLRASTERPOS2FVPROC)load("glRasterPos2fv"); glad_glRasterPos2i = (PFNGLRASTERPOS2IPROC)load("glRasterPos2i"); glad_glRasterPos2iv = (PFNGLRASTERPOS2IVPROC)load("glRasterPos2iv"); glad_glRasterPos2s = (PFNGLRASTERPOS2SPROC)load("glRasterPos2s"); glad_glRasterPos2sv = (PFNGLRASTERPOS2SVPROC)load("glRasterPos2sv"); glad_glRasterPos3d = (PFNGLRASTERPOS3DPROC)load("glRasterPos3d"); glad_glRasterPos3dv = (PFNGLRASTERPOS3DVPROC)load("glRasterPos3dv"); glad_glRasterPos3f = (PFNGLRASTERPOS3FPROC)load("glRasterPos3f"); glad_glRasterPos3fv = (PFNGLRASTERPOS3FVPROC)load("glRasterPos3fv"); glad_glRasterPos3i = (PFNGLRASTERPOS3IPROC)load("glRasterPos3i"); glad_glRasterPos3iv = (PFNGLRASTERPOS3IVPROC)load("glRasterPos3iv"); glad_glRasterPos3s = (PFNGLRASTERPOS3SPROC)load("glRasterPos3s"); glad_glRasterPos3sv = (PFNGLRASTERPOS3SVPROC)load("glRasterPos3sv"); glad_glRasterPos4d = (PFNGLRASTERPOS4DPROC)load("glRasterPos4d"); glad_glRasterPos4dv = (PFNGLRASTERPOS4DVPROC)load("glRasterPos4dv"); glad_glRasterPos4f = (PFNGLRASTERPOS4FPROC)load("glRasterPos4f"); glad_glRasterPos4fv = (PFNGLRASTERPOS4FVPROC)load("glRasterPos4fv"); glad_glRasterPos4i = (PFNGLRASTERPOS4IPROC)load("glRasterPos4i"); glad_glRasterPos4iv = (PFNGLRASTERPOS4IVPROC)load("glRasterPos4iv"); glad_glRasterPos4s = (PFNGLRASTERPOS4SPROC)load("glRasterPos4s"); glad_glRasterPos4sv = (PFNGLRASTERPOS4SVPROC)load("glRasterPos4sv"); glad_glRectd = (PFNGLRECTDPROC)load("glRectd"); glad_glRectdv = (PFNGLRECTDVPROC)load("glRectdv"); glad_glRectf = (PFNGLRECTFPROC)load("glRectf"); glad_glRectfv = (PFNGLRECTFVPROC)load("glRectfv"); glad_glRecti = (PFNGLRECTIPROC)load("glRecti"); glad_glRectiv = (PFNGLRECTIVPROC)load("glRectiv"); glad_glRects = (PFNGLRECTSPROC)load("glRects"); glad_glRectsv = (PFNGLRECTSVPROC)load("glRectsv"); glad_glTexCoord1d = (PFNGLTEXCOORD1DPROC)load("glTexCoord1d"); glad_glTexCoord1dv = (PFNGLTEXCOORD1DVPROC)load("glTexCoord1dv"); glad_glTexCoord1f = (PFNGLTEXCOORD1FPROC)load("glTexCoord1f"); glad_glTexCoord1fv = (PFNGLTEXCOORD1FVPROC)load("glTexCoord1fv"); glad_glTexCoord1i = (PFNGLTEXCOORD1IPROC)load("glTexCoord1i"); glad_glTexCoord1iv = (PFNGLTEXCOORD1IVPROC)load("glTexCoord1iv"); glad_glTexCoord1s = (PFNGLTEXCOORD1SPROC)load("glTexCoord1s"); glad_glTexCoord1sv = (PFNGLTEXCOORD1SVPROC)load("glTexCoord1sv"); glad_glTexCoord2d = (PFNGLTEXCOORD2DPROC)load("glTexCoord2d"); glad_glTexCoord2dv = (PFNGLTEXCOORD2DVPROC)load("glTexCoord2dv"); glad_glTexCoord2f = (PFNGLTEXCOORD2FPROC)load("glTexCoord2f"); glad_glTexCoord2fv = (PFNGLTEXCOORD2FVPROC)load("glTexCoord2fv"); glad_glTexCoord2i = (PFNGLTEXCOORD2IPROC)load("glTexCoord2i"); glad_glTexCoord2iv = (PFNGLTEXCOORD2IVPROC)load("glTexCoord2iv"); glad_glTexCoord2s = (PFNGLTEXCOORD2SPROC)load("glTexCoord2s"); glad_glTexCoord2sv = (PFNGLTEXCOORD2SVPROC)load("glTexCoord2sv"); glad_glTexCoord3d = (PFNGLTEXCOORD3DPROC)load("glTexCoord3d"); glad_glTexCoord3dv = (PFNGLTEXCOORD3DVPROC)load("glTexCoord3dv"); glad_glTexCoord3f = (PFNGLTEXCOORD3FPROC)load("glTexCoord3f"); glad_glTexCoord3fv = (PFNGLTEXCOORD3FVPROC)load("glTexCoord3fv"); glad_glTexCoord3i = (PFNGLTEXCOORD3IPROC)load("glTexCoord3i"); glad_glTexCoord3iv = (PFNGLTEXCOORD3IVPROC)load("glTexCoord3iv"); glad_glTexCoord3s = (PFNGLTEXCOORD3SPROC)load("glTexCoord3s"); glad_glTexCoord3sv = (PFNGLTEXCOORD3SVPROC)load("glTexCoord3sv"); glad_glTexCoord4d = (PFNGLTEXCOORD4DPROC)load("glTexCoord4d"); glad_glTexCoord4dv = (PFNGLTEXCOORD4DVPROC)load("glTexCoord4dv"); glad_glTexCoord4f = (PFNGLTEXCOORD4FPROC)load("glTexCoord4f"); glad_glTexCoord4fv = (PFNGLTEXCOORD4FVPROC)load("glTexCoord4fv"); glad_glTexCoord4i = (PFNGLTEXCOORD4IPROC)load("glTexCoord4i"); glad_glTexCoord4iv = (PFNGLTEXCOORD4IVPROC)load("glTexCoord4iv"); glad_glTexCoord4s = (PFNGLTEXCOORD4SPROC)load("glTexCoord4s"); glad_glTexCoord4sv = (PFNGLTEXCOORD4SVPROC)load("glTexCoord4sv"); glad_glVertex2d = (PFNGLVERTEX2DPROC)load("glVertex2d"); glad_glVertex2dv = (PFNGLVERTEX2DVPROC)load("glVertex2dv"); glad_glVertex2f = (PFNGLVERTEX2FPROC)load("glVertex2f"); glad_glVertex2fv = (PFNGLVERTEX2FVPROC)load("glVertex2fv"); glad_glVertex2i = (PFNGLVERTEX2IPROC)load("glVertex2i"); glad_glVertex2iv = (PFNGLVERTEX2IVPROC)load("glVertex2iv"); glad_glVertex2s = (PFNGLVERTEX2SPROC)load("glVertex2s"); glad_glVertex2sv = (PFNGLVERTEX2SVPROC)load("glVertex2sv"); glad_glVertex3d = (PFNGLVERTEX3DPROC)load("glVertex3d"); glad_glVertex3dv = (PFNGLVERTEX3DVPROC)load("glVertex3dv"); glad_glVertex3f = (PFNGLVERTEX3FPROC)load("glVertex3f"); glad_glVertex3fv = (PFNGLVERTEX3FVPROC)load("glVertex3fv"); glad_glVertex3i = (PFNGLVERTEX3IPROC)load("glVertex3i"); glad_glVertex3iv = (PFNGLVERTEX3IVPROC)load("glVertex3iv"); glad_glVertex3s = (PFNGLVERTEX3SPROC)load("glVertex3s"); glad_glVertex3sv = (PFNGLVERTEX3SVPROC)load("glVertex3sv"); glad_glVertex4d = (PFNGLVERTEX4DPROC)load("glVertex4d"); glad_glVertex4dv = (PFNGLVERTEX4DVPROC)load("glVertex4dv"); glad_glVertex4f = (PFNGLVERTEX4FPROC)load("glVertex4f"); glad_glVertex4fv = (PFNGLVERTEX4FVPROC)load("glVertex4fv"); glad_glVertex4i = (PFNGLVERTEX4IPROC)load("glVertex4i"); glad_glVertex4iv = (PFNGLVERTEX4IVPROC)load("glVertex4iv"); glad_glVertex4s = (PFNGLVERTEX4SPROC)load("glVertex4s"); glad_glVertex4sv = (PFNGLVERTEX4SVPROC)load("glVertex4sv"); glad_glClipPlane = (PFNGLCLIPPLANEPROC)load("glClipPlane"); glad_glColorMaterial = (PFNGLCOLORMATERIALPROC)load("glColorMaterial"); glad_glFogf = (PFNGLFOGFPROC)load("glFogf"); glad_glFogfv = (PFNGLFOGFVPROC)load("glFogfv"); glad_glFogi = (PFNGLFOGIPROC)load("glFogi"); glad_glFogiv = (PFNGLFOGIVPROC)load("glFogiv"); glad_glLightf = (PFNGLLIGHTFPROC)load("glLightf"); glad_glLightfv = (PFNGLLIGHTFVPROC)load("glLightfv"); glad_glLighti = (PFNGLLIGHTIPROC)load("glLighti"); glad_glLightiv = (PFNGLLIGHTIVPROC)load("glLightiv"); glad_glLightModelf = (PFNGLLIGHTMODELFPROC)load("glLightModelf"); glad_glLightModelfv = (PFNGLLIGHTMODELFVPROC)load("glLightModelfv"); glad_glLightModeli = (PFNGLLIGHTMODELIPROC)load("glLightModeli"); glad_glLightModeliv = (PFNGLLIGHTMODELIVPROC)load("glLightModeliv"); glad_glLineStipple = (PFNGLLINESTIPPLEPROC)load("glLineStipple"); glad_glMaterialf = (PFNGLMATERIALFPROC)load("glMaterialf"); glad_glMaterialfv = (PFNGLMATERIALFVPROC)load("glMaterialfv"); glad_glMateriali = (PFNGLMATERIALIPROC)load("glMateriali"); glad_glMaterialiv = (PFNGLMATERIALIVPROC)load("glMaterialiv"); glad_glPolygonStipple = (PFNGLPOLYGONSTIPPLEPROC)load("glPolygonStipple"); glad_glShadeModel = (PFNGLSHADEMODELPROC)load("glShadeModel"); glad_glTexEnvf = (PFNGLTEXENVFPROC)load("glTexEnvf"); glad_glTexEnvfv = (PFNGLTEXENVFVPROC)load("glTexEnvfv"); glad_glTexEnvi = (PFNGLTEXENVIPROC)load("glTexEnvi"); glad_glTexEnviv = (PFNGLTEXENVIVPROC)load("glTexEnviv"); glad_glTexGend = (PFNGLTEXGENDPROC)load("glTexGend"); glad_glTexGendv = (PFNGLTEXGENDVPROC)load("glTexGendv"); glad_glTexGenf = (PFNGLTEXGENFPROC)load("glTexGenf"); glad_glTexGenfv = (PFNGLTEXGENFVPROC)load("glTexGenfv"); glad_glTexGeni = (PFNGLTEXGENIPROC)load("glTexGeni"); glad_glTexGeniv = (PFNGLTEXGENIVPROC)load("glTexGeniv"); glad_glFeedbackBuffer = (PFNGLFEEDBACKBUFFERPROC)load("glFeedbackBuffer"); glad_glSelectBuffer = (PFNGLSELECTBUFFERPROC)load("glSelectBuffer"); glad_glRenderMode = (PFNGLRENDERMODEPROC)load("glRenderMode"); glad_glInitNames = (PFNGLINITNAMESPROC)load("glInitNames"); glad_glLoadName = (PFNGLLOADNAMEPROC)load("glLoadName"); glad_glPassThrough = (PFNGLPASSTHROUGHPROC)load("glPassThrough"); glad_glPopName = (PFNGLPOPNAMEPROC)load("glPopName"); glad_glPushName = (PFNGLPUSHNAMEPROC)load("glPushName"); glad_glClearAccum = (PFNGLCLEARACCUMPROC)load("glClearAccum"); glad_glClearIndex = (PFNGLCLEARINDEXPROC)load("glClearIndex"); glad_glIndexMask = (PFNGLINDEXMASKPROC)load("glIndexMask"); glad_glAccum = (PFNGLACCUMPROC)load("glAccum"); glad_glPopAttrib = (PFNGLPOPATTRIBPROC)load("glPopAttrib"); glad_glPushAttrib = (PFNGLPUSHATTRIBPROC)load("glPushAttrib"); glad_glMap1d = (PFNGLMAP1DPROC)load("glMap1d"); glad_glMap1f = (PFNGLMAP1FPROC)load("glMap1f"); glad_glMap2d = (PFNGLMAP2DPROC)load("glMap2d"); glad_glMap2f = (PFNGLMAP2FPROC)load("glMap2f"); glad_glMapGrid1d = (PFNGLMAPGRID1DPROC)load("glMapGrid1d"); glad_glMapGrid1f = (PFNGLMAPGRID1FPROC)load("glMapGrid1f"); glad_glMapGrid2d = (PFNGLMAPGRID2DPROC)load("glMapGrid2d"); glad_glMapGrid2f = (PFNGLMAPGRID2FPROC)load("glMapGrid2f"); glad_glEvalCoord1d = (PFNGLEVALCOORD1DPROC)load("glEvalCoord1d"); glad_glEvalCoord1dv = (PFNGLEVALCOORD1DVPROC)load("glEvalCoord1dv"); glad_glEvalCoord1f = (PFNGLEVALCOORD1FPROC)load("glEvalCoord1f"); glad_glEvalCoord1fv = (PFNGLEVALCOORD1FVPROC)load("glEvalCoord1fv"); glad_glEvalCoord2d = (PFNGLEVALCOORD2DPROC)load("glEvalCoord2d"); glad_glEvalCoord2dv = (PFNGLEVALCOORD2DVPROC)load("glEvalCoord2dv"); glad_glEvalCoord2f = (PFNGLEVALCOORD2FPROC)load("glEvalCoord2f"); glad_glEvalCoord2fv = (PFNGLEVALCOORD2FVPROC)load("glEvalCoord2fv"); glad_glEvalMesh1 = (PFNGLEVALMESH1PROC)load("glEvalMesh1"); glad_glEvalPoint1 = (PFNGLEVALPOINT1PROC)load("glEvalPoint1"); glad_glEvalMesh2 = (PFNGLEVALMESH2PROC)load("glEvalMesh2"); glad_glEvalPoint2 = (PFNGLEVALPOINT2PROC)load("glEvalPoint2"); glad_glAlphaFunc = (PFNGLALPHAFUNCPROC)load("glAlphaFunc"); glad_glPixelZoom = (PFNGLPIXELZOOMPROC)load("glPixelZoom"); glad_glPixelTransferf = (PFNGLPIXELTRANSFERFPROC)load("glPixelTransferf"); glad_glPixelTransferi = (PFNGLPIXELTRANSFERIPROC)load("glPixelTransferi"); glad_glPixelMapfv = (PFNGLPIXELMAPFVPROC)load("glPixelMapfv"); glad_glPixelMapuiv = (PFNGLPIXELMAPUIVPROC)load("glPixelMapuiv"); glad_glPixelMapusv = (PFNGLPIXELMAPUSVPROC)load("glPixelMapusv"); glad_glCopyPixels = (PFNGLCOPYPIXELSPROC)load("glCopyPixels"); glad_glDrawPixels = (PFNGLDRAWPIXELSPROC)load("glDrawPixels"); glad_glGetClipPlane = (PFNGLGETCLIPPLANEPROC)load("glGetClipPlane"); glad_glGetLightfv = (PFNGLGETLIGHTFVPROC)load("glGetLightfv"); glad_glGetLightiv = (PFNGLGETLIGHTIVPROC)load("glGetLightiv"); glad_glGetMapdv = (PFNGLGETMAPDVPROC)load("glGetMapdv"); glad_glGetMapfv = (PFNGLGETMAPFVPROC)load("glGetMapfv"); glad_glGetMapiv = (PFNGLGETMAPIVPROC)load("glGetMapiv"); glad_glGetMaterialfv = (PFNGLGETMATERIALFVPROC)load("glGetMaterialfv"); glad_glGetMaterialiv = (PFNGLGETMATERIALIVPROC)load("glGetMaterialiv"); glad_glGetPixelMapfv = (PFNGLGETPIXELMAPFVPROC)load("glGetPixelMapfv"); glad_glGetPixelMapuiv = (PFNGLGETPIXELMAPUIVPROC)load("glGetPixelMapuiv"); glad_glGetPixelMapusv = (PFNGLGETPIXELMAPUSVPROC)load("glGetPixelMapusv"); glad_glGetPolygonStipple = (PFNGLGETPOLYGONSTIPPLEPROC)load("glGetPolygonStipple"); glad_glGetTexEnvfv = (PFNGLGETTEXENVFVPROC)load("glGetTexEnvfv"); glad_glGetTexEnviv = (PFNGLGETTEXENVIVPROC)load("glGetTexEnviv"); glad_glGetTexGendv = (PFNGLGETTEXGENDVPROC)load("glGetTexGendv"); glad_glGetTexGenfv = (PFNGLGETTEXGENFVPROC)load("glGetTexGenfv"); glad_glGetTexGeniv = (PFNGLGETTEXGENIVPROC)load("glGetTexGeniv"); glad_glIsList = (PFNGLISLISTPROC)load("glIsList"); glad_glFrustum = (PFNGLFRUSTUMPROC)load("glFrustum"); glad_glLoadIdentity = (PFNGLLOADIDENTITYPROC)load("glLoadIdentity"); glad_glLoadMatrixf = (PFNGLLOADMATRIXFPROC)load("glLoadMatrixf"); glad_glLoadMatrixd = (PFNGLLOADMATRIXDPROC)load("glLoadMatrixd"); glad_glMatrixMode = (PFNGLMATRIXMODEPROC)load("glMatrixMode"); glad_glMultMatrixf = (PFNGLMULTMATRIXFPROC)load("glMultMatrixf"); glad_glMultMatrixd = (PFNGLMULTMATRIXDPROC)load("glMultMatrixd"); glad_glOrtho = (PFNGLORTHOPROC)load("glOrtho"); glad_glPopMatrix = (PFNGLPOPMATRIXPROC)load("glPopMatrix"); glad_glPushMatrix = (PFNGLPUSHMATRIXPROC)load("glPushMatrix"); glad_glRotated = (PFNGLROTATEDPROC)load("glRotated"); glad_glRotatef = (PFNGLROTATEFPROC)load("glRotatef"); glad_glScaled = (PFNGLSCALEDPROC)load("glScaled"); glad_glScalef = (PFNGLSCALEFPROC)load("glScalef"); glad_glTranslated = (PFNGLTRANSLATEDPROC)load("glTranslated"); glad_glTranslatef = (PFNGLTRANSLATEFPROC)load("glTranslatef"); } static void load_GL_VERSION_1_1(GLADloadproc load) { if(!GLAD_GL_VERSION_1_1) return; glad_glDrawArrays = (PFNGLDRAWARRAYSPROC)load("glDrawArrays"); glad_glDrawElements = (PFNGLDRAWELEMENTSPROC)load("glDrawElements"); glad_glGetPointerv = (PFNGLGETPOINTERVPROC)load("glGetPointerv"); glad_glPolygonOffset = (PFNGLPOLYGONOFFSETPROC)load("glPolygonOffset"); glad_glCopyTexImage1D = (PFNGLCOPYTEXIMAGE1DPROC)load("glCopyTexImage1D"); glad_glCopyTexImage2D = (PFNGLCOPYTEXIMAGE2DPROC)load("glCopyTexImage2D"); glad_glCopyTexSubImage1D = (PFNGLCOPYTEXSUBIMAGE1DPROC)load("glCopyTexSubImage1D"); glad_glCopyTexSubImage2D = (PFNGLCOPYTEXSUBIMAGE2DPROC)load("glCopyTexSubImage2D"); glad_glTexSubImage1D = (PFNGLTEXSUBIMAGE1DPROC)load("glTexSubImage1D"); glad_glTexSubImage2D = (PFNGLTEXSUBIMAGE2DPROC)load("glTexSubImage2D"); glad_glBindTexture = (PFNGLBINDTEXTUREPROC)load("glBindTexture"); glad_glDeleteTextures = (PFNGLDELETETEXTURESPROC)load("glDeleteTextures"); glad_glGenTextures = (PFNGLGENTEXTURESPROC)load("glGenTextures"); glad_glIsTexture = (PFNGLISTEXTUREPROC)load("glIsTexture"); glad_glArrayElement = (PFNGLARRAYELEMENTPROC)load("glArrayElement"); glad_glColorPointer = (PFNGLCOLORPOINTERPROC)load("glColorPointer"); glad_glDisableClientState = (PFNGLDISABLECLIENTSTATEPROC)load("glDisableClientState"); glad_glEdgeFlagPointer = (PFNGLEDGEFLAGPOINTERPROC)load("glEdgeFlagPointer"); glad_glEnableClientState = (PFNGLENABLECLIENTSTATEPROC)load("glEnableClientState"); glad_glIndexPointer = (PFNGLINDEXPOINTERPROC)load("glIndexPointer"); glad_glInterleavedArrays = (PFNGLINTERLEAVEDARRAYSPROC)load("glInterleavedArrays"); glad_glNormalPointer = (PFNGLNORMALPOINTERPROC)load("glNormalPointer"); glad_glTexCoordPointer = (PFNGLTEXCOORDPOINTERPROC)load("glTexCoordPointer"); glad_glVertexPointer = (PFNGLVERTEXPOINTERPROC)load("glVertexPointer"); glad_glAreTexturesResident = (PFNGLARETEXTURESRESIDENTPROC)load("glAreTexturesResident"); glad_glPrioritizeTextures = (PFNGLPRIORITIZETEXTURESPROC)load("glPrioritizeTextures"); glad_glIndexub = (PFNGLINDEXUBPROC)load("glIndexub"); glad_glIndexubv = (PFNGLINDEXUBVPROC)load("glIndexubv"); glad_glPopClientAttrib = (PFNGLPOPCLIENTATTRIBPROC)load("glPopClientAttrib"); glad_glPushClientAttrib = (PFNGLPUSHCLIENTATTRIBPROC)load("glPushClientAttrib"); } static void load_GL_VERSION_1_2(GLADloadproc load) { if(!GLAD_GL_VERSION_1_2) return; glad_glDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC)load("glDrawRangeElements"); glad_glTexImage3D = (PFNGLTEXIMAGE3DPROC)load("glTexImage3D"); glad_glTexSubImage3D = (PFNGLTEXSUBIMAGE3DPROC)load("glTexSubImage3D"); glad_glCopyTexSubImage3D = (PFNGLCOPYTEXSUBIMAGE3DPROC)load("glCopyTexSubImage3D"); } static void load_GL_VERSION_1_3(GLADloadproc load) { if(!GLAD_GL_VERSION_1_3) return; glad_glActiveTexture = (PFNGLACTIVETEXTUREPROC)load("glActiveTexture"); glad_glSampleCoverage = (PFNGLSAMPLECOVERAGEPROC)load("glSampleCoverage"); glad_glCompressedTexImage3D = (PFNGLCOMPRESSEDTEXIMAGE3DPROC)load("glCompressedTexImage3D"); glad_glCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)load("glCompressedTexImage2D"); glad_glCompressedTexImage1D = (PFNGLCOMPRESSEDTEXIMAGE1DPROC)load("glCompressedTexImage1D"); glad_glCompressedTexSubImage3D = (PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)load("glCompressedTexSubImage3D"); glad_glCompressedTexSubImage2D = (PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)load("glCompressedTexSubImage2D"); glad_glCompressedTexSubImage1D = (PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)load("glCompressedTexSubImage1D"); glad_glGetCompressedTexImage = (PFNGLGETCOMPRESSEDTEXIMAGEPROC)load("glGetCompressedTexImage"); glad_glClientActiveTexture = (PFNGLCLIENTACTIVETEXTUREPROC)load("glClientActiveTexture"); glad_glMultiTexCoord1d = (PFNGLMULTITEXCOORD1DPROC)load("glMultiTexCoord1d"); glad_glMultiTexCoord1dv = (PFNGLMULTITEXCOORD1DVPROC)load("glMultiTexCoord1dv"); glad_glMultiTexCoord1f = (PFNGLMULTITEXCOORD1FPROC)load("glMultiTexCoord1f"); glad_glMultiTexCoord1fv = (PFNGLMULTITEXCOORD1FVPROC)load("glMultiTexCoord1fv"); glad_glMultiTexCoord1i = (PFNGLMULTITEXCOORD1IPROC)load("glMultiTexCoord1i"); glad_glMultiTexCoord1iv = (PFNGLMULTITEXCOORD1IVPROC)load("glMultiTexCoord1iv"); glad_glMultiTexCoord1s = (PFNGLMULTITEXCOORD1SPROC)load("glMultiTexCoord1s"); glad_glMultiTexCoord1sv = (PFNGLMULTITEXCOORD1SVPROC)load("glMultiTexCoord1sv"); glad_glMultiTexCoord2d = (PFNGLMULTITEXCOORD2DPROC)load("glMultiTexCoord2d"); glad_glMultiTexCoord2dv = (PFNGLMULTITEXCOORD2DVPROC)load("glMultiTexCoord2dv"); glad_glMultiTexCoord2f = (PFNGLMULTITEXCOORD2FPROC)load("glMultiTexCoord2f"); glad_glMultiTexCoord2fv = (PFNGLMULTITEXCOORD2FVPROC)load("glMultiTexCoord2fv"); glad_glMultiTexCoord2i = (PFNGLMULTITEXCOORD2IPROC)load("glMultiTexCoord2i"); glad_glMultiTexCoord2iv = (PFNGLMULTITEXCOORD2IVPROC)load("glMultiTexCoord2iv"); glad_glMultiTexCoord2s = (PFNGLMULTITEXCOORD2SPROC)load("glMultiTexCoord2s"); glad_glMultiTexCoord2sv = (PFNGLMULTITEXCOORD2SVPROC)load("glMultiTexCoord2sv"); glad_glMultiTexCoord3d = (PFNGLMULTITEXCOORD3DPROC)load("glMultiTexCoord3d"); glad_glMultiTexCoord3dv = (PFNGLMULTITEXCOORD3DVPROC)load("glMultiTexCoord3dv"); glad_glMultiTexCoord3f = (PFNGLMULTITEXCOORD3FPROC)load("glMultiTexCoord3f"); glad_glMultiTexCoord3fv = (PFNGLMULTITEXCOORD3FVPROC)load("glMultiTexCoord3fv"); glad_glMultiTexCoord3i = (PFNGLMULTITEXCOORD3IPROC)load("glMultiTexCoord3i"); glad_glMultiTexCoord3iv = (PFNGLMULTITEXCOORD3IVPROC)load("glMultiTexCoord3iv"); glad_glMultiTexCoord3s = (PFNGLMULTITEXCOORD3SPROC)load("glMultiTexCoord3s"); glad_glMultiTexCoord3sv = (PFNGLMULTITEXCOORD3SVPROC)load("glMultiTexCoord3sv"); glad_glMultiTexCoord4d = (PFNGLMULTITEXCOORD4DPROC)load("glMultiTexCoord4d"); glad_glMultiTexCoord4dv = (PFNGLMULTITEXCOORD4DVPROC)load("glMultiTexCoord4dv"); glad_glMultiTexCoord4f = (PFNGLMULTITEXCOORD4FPROC)load("glMultiTexCoord4f"); glad_glMultiTexCoord4fv = (PFNGLMULTITEXCOORD4FVPROC)load("glMultiTexCoord4fv"); glad_glMultiTexCoord4i = (PFNGLMULTITEXCOORD4IPROC)load("glMultiTexCoord4i"); glad_glMultiTexCoord4iv = (PFNGLMULTITEXCOORD4IVPROC)load("glMultiTexCoord4iv"); glad_glMultiTexCoord4s = (PFNGLMULTITEXCOORD4SPROC)load("glMultiTexCoord4s"); glad_glMultiTexCoord4sv = (PFNGLMULTITEXCOORD4SVPROC)load("glMultiTexCoord4sv"); glad_glLoadTransposeMatrixf = (PFNGLLOADTRANSPOSEMATRIXFPROC)load("glLoadTransposeMatrixf"); glad_glLoadTransposeMatrixd = (PFNGLLOADTRANSPOSEMATRIXDPROC)load("glLoadTransposeMatrixd"); glad_glMultTransposeMatrixf = (PFNGLMULTTRANSPOSEMATRIXFPROC)load("glMultTransposeMatrixf"); glad_glMultTransposeMatrixd = (PFNGLMULTTRANSPOSEMATRIXDPROC)load("glMultTransposeMatrixd"); } static void load_GL_VERSION_1_4(GLADloadproc load) { if(!GLAD_GL_VERSION_1_4) return; glad_glBlendFuncSeparate = (PFNGLBLENDFUNCSEPARATEPROC)load("glBlendFuncSeparate"); glad_glMultiDrawArrays = (PFNGLMULTIDRAWARRAYSPROC)load("glMultiDrawArrays"); glad_glMultiDrawElements = (PFNGLMULTIDRAWELEMENTSPROC)load("glMultiDrawElements"); glad_glPointParameterf = (PFNGLPOINTPARAMETERFPROC)load("glPointParameterf"); glad_glPointParameterfv = (PFNGLPOINTPARAMETERFVPROC)load("glPointParameterfv"); glad_glPointParameteri = (PFNGLPOINTPARAMETERIPROC)load("glPointParameteri"); glad_glPointParameteriv = (PFNGLPOINTPARAMETERIVPROC)load("glPointParameteriv"); glad_glFogCoordf = (PFNGLFOGCOORDFPROC)load("glFogCoordf"); glad_glFogCoordfv = (PFNGLFOGCOORDFVPROC)load("glFogCoordfv"); glad_glFogCoordd = (PFNGLFOGCOORDDPROC)load("glFogCoordd"); glad_glFogCoorddv = (PFNGLFOGCOORDDVPROC)load("glFogCoorddv"); glad_glFogCoordPointer = (PFNGLFOGCOORDPOINTERPROC)load("glFogCoordPointer"); glad_glSecondaryColor3b = (PFNGLSECONDARYCOLOR3BPROC)load("glSecondaryColor3b"); glad_glSecondaryColor3bv = (PFNGLSECONDARYCOLOR3BVPROC)load("glSecondaryColor3bv"); glad_glSecondaryColor3d = (PFNGLSECONDARYCOLOR3DPROC)load("glSecondaryColor3d"); glad_glSecondaryColor3dv = (PFNGLSECONDARYCOLOR3DVPROC)load("glSecondaryColor3dv"); glad_glSecondaryColor3f = (PFNGLSECONDARYCOLOR3FPROC)load("glSecondaryColor3f"); glad_glSecondaryColor3fv = (PFNGLSECONDARYCOLOR3FVPROC)load("glSecondaryColor3fv"); glad_glSecondaryColor3i = (PFNGLSECONDARYCOLOR3IPROC)load("glSecondaryColor3i"); glad_glSecondaryColor3iv = (PFNGLSECONDARYCOLOR3IVPROC)load("glSecondaryColor3iv"); glad_glSecondaryColor3s = (PFNGLSECONDARYCOLOR3SPROC)load("glSecondaryColor3s"); glad_glSecondaryColor3sv = (PFNGLSECONDARYCOLOR3SVPROC)load("glSecondaryColor3sv"); glad_glSecondaryColor3ub = (PFNGLSECONDARYCOLOR3UBPROC)load("glSecondaryColor3ub"); glad_glSecondaryColor3ubv = (PFNGLSECONDARYCOLOR3UBVPROC)load("glSecondaryColor3ubv"); glad_glSecondaryColor3ui = (PFNGLSECONDARYCOLOR3UIPROC)load("glSecondaryColor3ui"); glad_glSecondaryColor3uiv = (PFNGLSECONDARYCOLOR3UIVPROC)load("glSecondaryColor3uiv"); glad_glSecondaryColor3us = (PFNGLSECONDARYCOLOR3USPROC)load("glSecondaryColor3us"); glad_glSecondaryColor3usv = (PFNGLSECONDARYCOLOR3USVPROC)load("glSecondaryColor3usv"); glad_glSecondaryColorPointer = (PFNGLSECONDARYCOLORPOINTERPROC)load("glSecondaryColorPointer"); glad_glWindowPos2d = (PFNGLWINDOWPOS2DPROC)load("glWindowPos2d"); glad_glWindowPos2dv = (PFNGLWINDOWPOS2DVPROC)load("glWindowPos2dv"); glad_glWindowPos2f = (PFNGLWINDOWPOS2FPROC)load("glWindowPos2f"); glad_glWindowPos2fv = (PFNGLWINDOWPOS2FVPROC)load("glWindowPos2fv"); glad_glWindowPos2i = (PFNGLWINDOWPOS2IPROC)load("glWindowPos2i"); glad_glWindowPos2iv = (PFNGLWINDOWPOS2IVPROC)load("glWindowPos2iv"); glad_glWindowPos2s = (PFNGLWINDOWPOS2SPROC)load("glWindowPos2s"); glad_glWindowPos2sv = (PFNGLWINDOWPOS2SVPROC)load("glWindowPos2sv"); glad_glWindowPos3d = (PFNGLWINDOWPOS3DPROC)load("glWindowPos3d"); glad_glWindowPos3dv = (PFNGLWINDOWPOS3DVPROC)load("glWindowPos3dv"); glad_glWindowPos3f = (PFNGLWINDOWPOS3FPROC)load("glWindowPos3f"); glad_glWindowPos3fv = (PFNGLWINDOWPOS3FVPROC)load("glWindowPos3fv"); glad_glWindowPos3i = (PFNGLWINDOWPOS3IPROC)load("glWindowPos3i"); glad_glWindowPos3iv = (PFNGLWINDOWPOS3IVPROC)load("glWindowPos3iv"); glad_glWindowPos3s = (PFNGLWINDOWPOS3SPROC)load("glWindowPos3s"); glad_glWindowPos3sv = (PFNGLWINDOWPOS3SVPROC)load("glWindowPos3sv"); glad_glBlendColor = (PFNGLBLENDCOLORPROC)load("glBlendColor"); glad_glBlendEquation = (PFNGLBLENDEQUATIONPROC)load("glBlendEquation"); } static void load_GL_VERSION_1_5(GLADloadproc load) { if(!GLAD_GL_VERSION_1_5) return; glad_glGenQueries = (PFNGLGENQUERIESPROC)load("glGenQueries"); glad_glDeleteQueries = (PFNGLDELETEQUERIESPROC)load("glDeleteQueries"); glad_glIsQuery = (PFNGLISQUERYPROC)load("glIsQuery"); glad_glBeginQuery = (PFNGLBEGINQUERYPROC)load("glBeginQuery"); glad_glEndQuery = (PFNGLENDQUERYPROC)load("glEndQuery"); glad_glGetQueryiv = (PFNGLGETQUERYIVPROC)load("glGetQueryiv"); glad_glGetQueryObjectiv = (PFNGLGETQUERYOBJECTIVPROC)load("glGetQueryObjectiv"); glad_glGetQueryObjectuiv = (PFNGLGETQUERYOBJECTUIVPROC)load("glGetQueryObjectuiv"); glad_glBindBuffer = (PFNGLBINDBUFFERPROC)load("glBindBuffer"); glad_glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)load("glDeleteBuffers"); glad_glGenBuffers = (PFNGLGENBUFFERSPROC)load("glGenBuffers"); glad_glIsBuffer = (PFNGLISBUFFERPROC)load("glIsBuffer"); glad_glBufferData = (PFNGLBUFFERDATAPROC)load("glBufferData"); glad_glBufferSubData = (PFNGLBUFFERSUBDATAPROC)load("glBufferSubData"); glad_glGetBufferSubData = (PFNGLGETBUFFERSUBDATAPROC)load("glGetBufferSubData"); glad_glMapBuffer = (PFNGLMAPBUFFERPROC)load("glMapBuffer"); glad_glUnmapBuffer = (PFNGLUNMAPBUFFERPROC)load("glUnmapBuffer"); glad_glGetBufferParameteriv = (PFNGLGETBUFFERPARAMETERIVPROC)load("glGetBufferParameteriv"); glad_glGetBufferPointerv = (PFNGLGETBUFFERPOINTERVPROC)load("glGetBufferPointerv"); } static void load_GL_VERSION_2_0(GLADloadproc load) { if(!GLAD_GL_VERSION_2_0) return; glad_glBlendEquationSeparate = (PFNGLBLENDEQUATIONSEPARATEPROC)load("glBlendEquationSeparate"); glad_glDrawBuffers = (PFNGLDRAWBUFFERSPROC)load("glDrawBuffers"); glad_glStencilOpSeparate = (PFNGLSTENCILOPSEPARATEPROC)load("glStencilOpSeparate"); glad_glStencilFuncSeparate = (PFNGLSTENCILFUNCSEPARATEPROC)load("glStencilFuncSeparate"); glad_glStencilMaskSeparate = (PFNGLSTENCILMASKSEPARATEPROC)load("glStencilMaskSeparate"); glad_glAttachShader = (PFNGLATTACHSHADERPROC)load("glAttachShader"); glad_glBindAttribLocation = (PFNGLBINDATTRIBLOCATIONPROC)load("glBindAttribLocation"); glad_glCompileShader = (PFNGLCOMPILESHADERPROC)load("glCompileShader"); glad_glCreateProgram = (PFNGLCREATEPROGRAMPROC)load("glCreateProgram"); glad_glCreateShader = (PFNGLCREATESHADERPROC)load("glCreateShader"); glad_glDeleteProgram = (PFNGLDELETEPROGRAMPROC)load("glDeleteProgram"); glad_glDeleteShader = (PFNGLDELETESHADERPROC)load("glDeleteShader"); glad_glDetachShader = (PFNGLDETACHSHADERPROC)load("glDetachShader"); glad_glDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC)load("glDisableVertexAttribArray"); glad_glEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC)load("glEnableVertexAttribArray"); glad_glGetActiveAttrib = (PFNGLGETACTIVEATTRIBPROC)load("glGetActiveAttrib"); glad_glGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC)load("glGetActiveUniform"); glad_glGetAttachedShaders = (PFNGLGETATTACHEDSHADERSPROC)load("glGetAttachedShaders"); glad_glGetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC)load("glGetAttribLocation"); glad_glGetProgramiv = (PFNGLGETPROGRAMIVPROC)load("glGetProgramiv"); glad_glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC)load("glGetProgramInfoLog"); glad_glGetShaderiv = (PFNGLGETSHADERIVPROC)load("glGetShaderiv"); glad_glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)load("glGetShaderInfoLog"); glad_glGetShaderSource = (PFNGLGETSHADERSOURCEPROC)load("glGetShaderSource"); glad_glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC)load("glGetUniformLocation"); glad_glGetUniformfv = (PFNGLGETUNIFORMFVPROC)load("glGetUniformfv"); glad_glGetUniformiv = (PFNGLGETUNIFORMIVPROC)load("glGetUniformiv"); glad_glGetVertexAttribdv = (PFNGLGETVERTEXATTRIBDVPROC)load("glGetVertexAttribdv"); glad_glGetVertexAttribfv = (PFNGLGETVERTEXATTRIBFVPROC)load("glGetVertexAttribfv"); glad_glGetVertexAttribiv = (PFNGLGETVERTEXATTRIBIVPROC)load("glGetVertexAttribiv"); glad_glGetVertexAttribPointerv = (PFNGLGETVERTEXATTRIBPOINTERVPROC)load("glGetVertexAttribPointerv"); glad_glIsProgram = (PFNGLISPROGRAMPROC)load("glIsProgram"); glad_glIsShader = (PFNGLISSHADERPROC)load("glIsShader"); glad_glLinkProgram = (PFNGLLINKPROGRAMPROC)load("glLinkProgram"); glad_glShaderSource = (PFNGLSHADERSOURCEPROC)load("glShaderSource"); glad_glUseProgram = (PFNGLUSEPROGRAMPROC)load("glUseProgram"); glad_glUniform1f = (PFNGLUNIFORM1FPROC)load("glUniform1f"); glad_glUniform2f = (PFNGLUNIFORM2FPROC)load("glUniform2f"); glad_glUniform3f = (PFNGLUNIFORM3FPROC)load("glUniform3f"); glad_glUniform4f = (PFNGLUNIFORM4FPROC)load("glUniform4f"); glad_glUniform1i = (PFNGLUNIFORM1IPROC)load("glUniform1i"); glad_glUniform2i = (PFNGLUNIFORM2IPROC)load("glUniform2i"); glad_glUniform3i = (PFNGLUNIFORM3IPROC)load("glUniform3i"); glad_glUniform4i = (PFNGLUNIFORM4IPROC)load("glUniform4i"); glad_glUniform1fv = (PFNGLUNIFORM1FVPROC)load("glUniform1fv"); glad_glUniform2fv = (PFNGLUNIFORM2FVPROC)load("glUniform2fv"); glad_glUniform3fv = (PFNGLUNIFORM3FVPROC)load("glUniform3fv"); glad_glUniform4fv = (PFNGLUNIFORM4FVPROC)load("glUniform4fv"); glad_glUniform1iv = (PFNGLUNIFORM1IVPROC)load("glUniform1iv"); glad_glUniform2iv = (PFNGLUNIFORM2IVPROC)load("glUniform2iv"); glad_glUniform3iv = (PFNGLUNIFORM3IVPROC)load("glUniform3iv"); glad_glUniform4iv = (PFNGLUNIFORM4IVPROC)load("glUniform4iv"); glad_glUniformMatrix2fv = (PFNGLUNIFORMMATRIX2FVPROC)load("glUniformMatrix2fv"); glad_glUniformMatrix3fv = (PFNGLUNIFORMMATRIX3FVPROC)load("glUniformMatrix3fv"); glad_glUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC)load("glUniformMatrix4fv"); glad_glValidateProgram = (PFNGLVALIDATEPROGRAMPROC)load("glValidateProgram"); glad_glVertexAttrib1d = (PFNGLVERTEXATTRIB1DPROC)load("glVertexAttrib1d"); glad_glVertexAttrib1dv = (PFNGLVERTEXATTRIB1DVPROC)load("glVertexAttrib1dv"); glad_glVertexAttrib1f = (PFNGLVERTEXATTRIB1FPROC)load("glVertexAttrib1f"); glad_glVertexAttrib1fv = (PFNGLVERTEXATTRIB1FVPROC)load("glVertexAttrib1fv"); glad_glVertexAttrib1s = (PFNGLVERTEXATTRIB1SPROC)load("glVertexAttrib1s"); glad_glVertexAttrib1sv = (PFNGLVERTEXATTRIB1SVPROC)load("glVertexAttrib1sv"); glad_glVertexAttrib2d = (PFNGLVERTEXATTRIB2DPROC)load("glVertexAttrib2d"); glad_glVertexAttrib2dv = (PFNGLVERTEXATTRIB2DVPROC)load("glVertexAttrib2dv"); glad_glVertexAttrib2f = (PFNGLVERTEXATTRIB2FPROC)load("glVertexAttrib2f"); glad_glVertexAttrib2fv = (PFNGLVERTEXATTRIB2FVPROC)load("glVertexAttrib2fv"); glad_glVertexAttrib2s = (PFNGLVERTEXATTRIB2SPROC)load("glVertexAttrib2s"); glad_glVertexAttrib2sv = (PFNGLVERTEXATTRIB2SVPROC)load("glVertexAttrib2sv"); glad_glVertexAttrib3d = (PFNGLVERTEXATTRIB3DPROC)load("glVertexAttrib3d"); glad_glVertexAttrib3dv = (PFNGLVERTEXATTRIB3DVPROC)load("glVertexAttrib3dv"); glad_glVertexAttrib3f = (PFNGLVERTEXATTRIB3FPROC)load("glVertexAttrib3f"); glad_glVertexAttrib3fv = (PFNGLVERTEXATTRIB3FVPROC)load("glVertexAttrib3fv"); glad_glVertexAttrib3s = (PFNGLVERTEXATTRIB3SPROC)load("glVertexAttrib3s"); glad_glVertexAttrib3sv = (PFNGLVERTEXATTRIB3SVPROC)load("glVertexAttrib3sv"); glad_glVertexAttrib4Nbv = (PFNGLVERTEXATTRIB4NBVPROC)load("glVertexAttrib4Nbv"); glad_glVertexAttrib4Niv = (PFNGLVERTEXATTRIB4NIVPROC)load("glVertexAttrib4Niv"); glad_glVertexAttrib4Nsv = (PFNGLVERTEXATTRIB4NSVPROC)load("glVertexAttrib4Nsv"); glad_glVertexAttrib4Nub = (PFNGLVERTEXATTRIB4NUBPROC)load("glVertexAttrib4Nub"); glad_glVertexAttrib4Nubv = (PFNGLVERTEXATTRIB4NUBVPROC)load("glVertexAttrib4Nubv"); glad_glVertexAttrib4Nuiv = (PFNGLVERTEXATTRIB4NUIVPROC)load("glVertexAttrib4Nuiv"); glad_glVertexAttrib4Nusv = (PFNGLVERTEXATTRIB4NUSVPROC)load("glVertexAttrib4Nusv"); glad_glVertexAttrib4bv = (PFNGLVERTEXATTRIB4BVPROC)load("glVertexAttrib4bv"); glad_glVertexAttrib4d = (PFNGLVERTEXATTRIB4DPROC)load("glVertexAttrib4d"); glad_glVertexAttrib4dv = (PFNGLVERTEXATTRIB4DVPROC)load("glVertexAttrib4dv"); glad_glVertexAttrib4f = (PFNGLVERTEXATTRIB4FPROC)load("glVertexAttrib4f"); glad_glVertexAttrib4fv = (PFNGLVERTEXATTRIB4FVPROC)load("glVertexAttrib4fv"); glad_glVertexAttrib4iv = (PFNGLVERTEXATTRIB4IVPROC)load("glVertexAttrib4iv"); glad_glVertexAttrib4s = (PFNGLVERTEXATTRIB4SPROC)load("glVertexAttrib4s"); glad_glVertexAttrib4sv = (PFNGLVERTEXATTRIB4SVPROC)load("glVertexAttrib4sv"); glad_glVertexAttrib4ubv = (PFNGLVERTEXATTRIB4UBVPROC)load("glVertexAttrib4ubv"); glad_glVertexAttrib4uiv = (PFNGLVERTEXATTRIB4UIVPROC)load("glVertexAttrib4uiv"); glad_glVertexAttrib4usv = (PFNGLVERTEXATTRIB4USVPROC)load("glVertexAttrib4usv"); glad_glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC)load("glVertexAttribPointer"); } static void load_GL_VERSION_2_1(GLADloadproc load) { if(!GLAD_GL_VERSION_2_1) return; glad_glUniformMatrix2x3fv = (PFNGLUNIFORMMATRIX2X3FVPROC)load("glUniformMatrix2x3fv"); glad_glUniformMatrix3x2fv = (PFNGLUNIFORMMATRIX3X2FVPROC)load("glUniformMatrix3x2fv"); glad_glUniformMatrix2x4fv = (PFNGLUNIFORMMATRIX2X4FVPROC)load("glUniformMatrix2x4fv"); glad_glUniformMatrix4x2fv = (PFNGLUNIFORMMATRIX4X2FVPROC)load("glUniformMatrix4x2fv"); glad_glUniformMatrix3x4fv = (PFNGLUNIFORMMATRIX3X4FVPROC)load("glUniformMatrix3x4fv"); glad_glUniformMatrix4x3fv = (PFNGLUNIFORMMATRIX4X3FVPROC)load("glUniformMatrix4x3fv"); } static void load_GL_VERSION_3_0(GLADloadproc load) { if(!GLAD_GL_VERSION_3_0) return; glad_glColorMaski = (PFNGLCOLORMASKIPROC)load("glColorMaski"); glad_glGetBooleani_v = (PFNGLGETBOOLEANI_VPROC)load("glGetBooleani_v"); glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load("glGetIntegeri_v"); glad_glEnablei = (PFNGLENABLEIPROC)load("glEnablei"); glad_glDisablei = (PFNGLDISABLEIPROC)load("glDisablei"); glad_glIsEnabledi = (PFNGLISENABLEDIPROC)load("glIsEnabledi"); glad_glBeginTransformFeedback = (PFNGLBEGINTRANSFORMFEEDBACKPROC)load("glBeginTransformFeedback"); glad_glEndTransformFeedback = (PFNGLENDTRANSFORMFEEDBACKPROC)load("glEndTransformFeedback"); glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load("glBindBufferRange"); glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load("glBindBufferBase"); glad_glTransformFeedbackVaryings = (PFNGLTRANSFORMFEEDBACKVARYINGSPROC)load("glTransformFeedbackVaryings"); glad_glGetTransformFeedbackVarying = (PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)load("glGetTransformFeedbackVarying"); glad_glClampColor = (PFNGLCLAMPCOLORPROC)load("glClampColor"); glad_glBeginConditionalRender = (PFNGLBEGINCONDITIONALRENDERPROC)load("glBeginConditionalRender"); glad_glEndConditionalRender = (PFNGLENDCONDITIONALRENDERPROC)load("glEndConditionalRender"); glad_glVertexAttribIPointer = (PFNGLVERTEXATTRIBIPOINTERPROC)load("glVertexAttribIPointer"); glad_glGetVertexAttribIiv = (PFNGLGETVERTEXATTRIBIIVPROC)load("glGetVertexAttribIiv"); glad_glGetVertexAttribIuiv = (PFNGLGETVERTEXATTRIBIUIVPROC)load("glGetVertexAttribIuiv"); glad_glVertexAttribI1i = (PFNGLVERTEXATTRIBI1IPROC)load("glVertexAttribI1i"); glad_glVertexAttribI2i = (PFNGLVERTEXATTRIBI2IPROC)load("glVertexAttribI2i"); glad_glVertexAttribI3i = (PFNGLVERTEXATTRIBI3IPROC)load("glVertexAttribI3i"); glad_glVertexAttribI4i = (PFNGLVERTEXATTRIBI4IPROC)load("glVertexAttribI4i"); glad_glVertexAttribI1ui = (PFNGLVERTEXATTRIBI1UIPROC)load("glVertexAttribI1ui"); glad_glVertexAttribI2ui = (PFNGLVERTEXATTRIBI2UIPROC)load("glVertexAttribI2ui"); glad_glVertexAttribI3ui = (PFNGLVERTEXATTRIBI3UIPROC)load("glVertexAttribI3ui"); glad_glVertexAttribI4ui = (PFNGLVERTEXATTRIBI4UIPROC)load("glVertexAttribI4ui"); glad_glVertexAttribI1iv = (PFNGLVERTEXATTRIBI1IVPROC)load("glVertexAttribI1iv"); glad_glVertexAttribI2iv = (PFNGLVERTEXATTRIBI2IVPROC)load("glVertexAttribI2iv"); glad_glVertexAttribI3iv = (PFNGLVERTEXATTRIBI3IVPROC)load("glVertexAttribI3iv"); glad_glVertexAttribI4iv = (PFNGLVERTEXATTRIBI4IVPROC)load("glVertexAttribI4iv"); glad_glVertexAttribI1uiv = (PFNGLVERTEXATTRIBI1UIVPROC)load("glVertexAttribI1uiv"); glad_glVertexAttribI2uiv = (PFNGLVERTEXATTRIBI2UIVPROC)load("glVertexAttribI2uiv"); glad_glVertexAttribI3uiv = (PFNGLVERTEXATTRIBI3UIVPROC)load("glVertexAttribI3uiv"); glad_glVertexAttribI4uiv = (PFNGLVERTEXATTRIBI4UIVPROC)load("glVertexAttribI4uiv"); glad_glVertexAttribI4bv = (PFNGLVERTEXATTRIBI4BVPROC)load("glVertexAttribI4bv"); glad_glVertexAttribI4sv = (PFNGLVERTEXATTRIBI4SVPROC)load("glVertexAttribI4sv"); glad_glVertexAttribI4ubv = (PFNGLVERTEXATTRIBI4UBVPROC)load("glVertexAttribI4ubv"); glad_glVertexAttribI4usv = (PFNGLVERTEXATTRIBI4USVPROC)load("glVertexAttribI4usv"); glad_glGetUniformuiv = (PFNGLGETUNIFORMUIVPROC)load("glGetUniformuiv"); glad_glBindFragDataLocation = (PFNGLBINDFRAGDATALOCATIONPROC)load("glBindFragDataLocation"); glad_glGetFragDataLocation = (PFNGLGETFRAGDATALOCATIONPROC)load("glGetFragDataLocation"); glad_glUniform1ui = (PFNGLUNIFORM1UIPROC)load("glUniform1ui"); glad_glUniform2ui = (PFNGLUNIFORM2UIPROC)load("glUniform2ui"); glad_glUniform3ui = (PFNGLUNIFORM3UIPROC)load("glUniform3ui"); glad_glUniform4ui = (PFNGLUNIFORM4UIPROC)load("glUniform4ui"); glad_glUniform1uiv = (PFNGLUNIFORM1UIVPROC)load("glUniform1uiv"); glad_glUniform2uiv = (PFNGLUNIFORM2UIVPROC)load("glUniform2uiv"); glad_glUniform3uiv = (PFNGLUNIFORM3UIVPROC)load("glUniform3uiv"); glad_glUniform4uiv = (PFNGLUNIFORM4UIVPROC)load("glUniform4uiv"); glad_glTexParameterIiv = (PFNGLTEXPARAMETERIIVPROC)load("glTexParameterIiv"); glad_glTexParameterIuiv = (PFNGLTEXPARAMETERIUIVPROC)load("glTexParameterIuiv"); glad_glGetTexParameterIiv = (PFNGLGETTEXPARAMETERIIVPROC)load("glGetTexParameterIiv"); glad_glGetTexParameterIuiv = (PFNGLGETTEXPARAMETERIUIVPROC)load("glGetTexParameterIuiv"); glad_glClearBufferiv = (PFNGLCLEARBUFFERIVPROC)load("glClearBufferiv"); glad_glClearBufferuiv = (PFNGLCLEARBUFFERUIVPROC)load("glClearBufferuiv"); glad_glClearBufferfv = (PFNGLCLEARBUFFERFVPROC)load("glClearBufferfv"); glad_glClearBufferfi = (PFNGLCLEARBUFFERFIPROC)load("glClearBufferfi"); glad_glGetStringi = (PFNGLGETSTRINGIPROC)load("glGetStringi"); glad_glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC)load("glIsRenderbuffer"); glad_glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)load("glBindRenderbuffer"); glad_glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)load("glDeleteRenderbuffers"); glad_glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)load("glGenRenderbuffers"); glad_glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)load("glRenderbufferStorage"); glad_glGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVPROC)load("glGetRenderbufferParameteriv"); glad_glIsFramebuffer = (PFNGLISFRAMEBUFFERPROC)load("glIsFramebuffer"); glad_glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)load("glBindFramebuffer"); glad_glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)load("glDeleteFramebuffers"); glad_glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)load("glGenFramebuffers"); glad_glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)load("glCheckFramebufferStatus"); glad_glFramebufferTexture1D = (PFNGLFRAMEBUFFERTEXTURE1DPROC)load("glFramebufferTexture1D"); glad_glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)load("glFramebufferTexture2D"); glad_glFramebufferTexture3D = (PFNGLFRAMEBUFFERTEXTURE3DPROC)load("glFramebufferTexture3D"); glad_glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC)load("glFramebufferRenderbuffer"); glad_glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)load("glGetFramebufferAttachmentParameteriv"); glad_glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC)load("glGenerateMipmap"); glad_glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)load("glBlitFramebuffer"); glad_glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)load("glRenderbufferStorageMultisample"); glad_glFramebufferTextureLayer = (PFNGLFRAMEBUFFERTEXTURELAYERPROC)load("glFramebufferTextureLayer"); glad_glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC)load("glMapBufferRange"); glad_glFlushMappedBufferRange = (PFNGLFLUSHMAPPEDBUFFERRANGEPROC)load("glFlushMappedBufferRange"); glad_glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC)load("glBindVertexArray"); glad_glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC)load("glDeleteVertexArrays"); glad_glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC)load("glGenVertexArrays"); glad_glIsVertexArray = (PFNGLISVERTEXARRAYPROC)load("glIsVertexArray"); } static void load_GL_VERSION_3_1(GLADloadproc load) { if(!GLAD_GL_VERSION_3_1) return; glad_glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDPROC)load("glDrawArraysInstanced"); glad_glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDPROC)load("glDrawElementsInstanced"); glad_glTexBuffer = (PFNGLTEXBUFFERPROC)load("glTexBuffer"); glad_glPrimitiveRestartIndex = (PFNGLPRIMITIVERESTARTINDEXPROC)load("glPrimitiveRestartIndex"); glad_glCopyBufferSubData = (PFNGLCOPYBUFFERSUBDATAPROC)load("glCopyBufferSubData"); glad_glGetUniformIndices = (PFNGLGETUNIFORMINDICESPROC)load("glGetUniformIndices"); glad_glGetActiveUniformsiv = (PFNGLGETACTIVEUNIFORMSIVPROC)load("glGetActiveUniformsiv"); glad_glGetActiveUniformName = (PFNGLGETACTIVEUNIFORMNAMEPROC)load("glGetActiveUniformName"); glad_glGetUniformBlockIndex = (PFNGLGETUNIFORMBLOCKINDEXPROC)load("glGetUniformBlockIndex"); glad_glGetActiveUniformBlockiv = (PFNGLGETACTIVEUNIFORMBLOCKIVPROC)load("glGetActiveUniformBlockiv"); glad_glGetActiveUniformBlockName = (PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)load("glGetActiveUniformBlockName"); glad_glUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDINGPROC)load("glUniformBlockBinding"); glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load("glBindBufferRange"); glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load("glBindBufferBase"); glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load("glGetIntegeri_v"); } static void load_GL_VERSION_3_2(GLADloadproc load) { if(!GLAD_GL_VERSION_3_2) return; glad_glDrawElementsBaseVertex = (PFNGLDRAWELEMENTSBASEVERTEXPROC)load("glDrawElementsBaseVertex"); glad_glDrawRangeElementsBaseVertex = (PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)load("glDrawRangeElementsBaseVertex"); glad_glDrawElementsInstancedBaseVertex = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)load("glDrawElementsInstancedBaseVertex"); glad_glMultiDrawElementsBaseVertex = (PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)load("glMultiDrawElementsBaseVertex"); glad_glProvokingVertex = (PFNGLPROVOKINGVERTEXPROC)load("glProvokingVertex"); glad_glFenceSync = (PFNGLFENCESYNCPROC)load("glFenceSync"); glad_glIsSync = (PFNGLISSYNCPROC)load("glIsSync"); glad_glDeleteSync = (PFNGLDELETESYNCPROC)load("glDeleteSync"); glad_glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC)load("glClientWaitSync"); glad_glWaitSync = (PFNGLWAITSYNCPROC)load("glWaitSync"); glad_glGetInteger64v = (PFNGLGETINTEGER64VPROC)load("glGetInteger64v"); glad_glGetSynciv = (PFNGLGETSYNCIVPROC)load("glGetSynciv"); glad_glGetInteger64i_v = (PFNGLGETINTEGER64I_VPROC)load("glGetInteger64i_v"); glad_glGetBufferParameteri64v = (PFNGLGETBUFFERPARAMETERI64VPROC)load("glGetBufferParameteri64v"); glad_glFramebufferTexture = (PFNGLFRAMEBUFFERTEXTUREPROC)load("glFramebufferTexture"); glad_glTexImage2DMultisample = (PFNGLTEXIMAGE2DMULTISAMPLEPROC)load("glTexImage2DMultisample"); glad_glTexImage3DMultisample = (PFNGLTEXIMAGE3DMULTISAMPLEPROC)load("glTexImage3DMultisample"); glad_glGetMultisamplefv = (PFNGLGETMULTISAMPLEFVPROC)load("glGetMultisamplefv"); glad_glSampleMaski = (PFNGLSAMPLEMASKIPROC)load("glSampleMaski"); } static void load_GL_VERSION_3_3(GLADloadproc load) { if(!GLAD_GL_VERSION_3_3) return; glad_glBindFragDataLocationIndexed = (PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)load("glBindFragDataLocationIndexed"); glad_glGetFragDataIndex = (PFNGLGETFRAGDATAINDEXPROC)load("glGetFragDataIndex"); glad_glGenSamplers = (PFNGLGENSAMPLERSPROC)load("glGenSamplers"); glad_glDeleteSamplers = (PFNGLDELETESAMPLERSPROC)load("glDeleteSamplers"); glad_glIsSampler = (PFNGLISSAMPLERPROC)load("glIsSampler"); glad_glBindSampler = (PFNGLBINDSAMPLERPROC)load("glBindSampler"); glad_glSamplerParameteri = (PFNGLSAMPLERPARAMETERIPROC)load("glSamplerParameteri"); glad_glSamplerParameteriv = (PFNGLSAMPLERPARAMETERIVPROC)load("glSamplerParameteriv"); glad_glSamplerParameterf = (PFNGLSAMPLERPARAMETERFPROC)load("glSamplerParameterf"); glad_glSamplerParameterfv = (PFNGLSAMPLERPARAMETERFVPROC)load("glSamplerParameterfv"); glad_glSamplerParameterIiv = (PFNGLSAMPLERPARAMETERIIVPROC)load("glSamplerParameterIiv"); glad_glSamplerParameterIuiv = (PFNGLSAMPLERPARAMETERIUIVPROC)load("glSamplerParameterIuiv"); glad_glGetSamplerParameteriv = (PFNGLGETSAMPLERPARAMETERIVPROC)load("glGetSamplerParameteriv"); glad_glGetSamplerParameterIiv = (PFNGLGETSAMPLERPARAMETERIIVPROC)load("glGetSamplerParameterIiv"); glad_glGetSamplerParameterfv = (PFNGLGETSAMPLERPARAMETERFVPROC)load("glGetSamplerParameterfv"); glad_glGetSamplerParameterIuiv = (PFNGLGETSAMPLERPARAMETERIUIVPROC)load("glGetSamplerParameterIuiv"); glad_glQueryCounter = (PFNGLQUERYCOUNTERPROC)load("glQueryCounter"); glad_glGetQueryObjecti64v = (PFNGLGETQUERYOBJECTI64VPROC)load("glGetQueryObjecti64v"); glad_glGetQueryObjectui64v = (PFNGLGETQUERYOBJECTUI64VPROC)load("glGetQueryObjectui64v"); glad_glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISORPROC)load("glVertexAttribDivisor"); glad_glVertexAttribP1ui = (PFNGLVERTEXATTRIBP1UIPROC)load("glVertexAttribP1ui"); glad_glVertexAttribP1uiv = (PFNGLVERTEXATTRIBP1UIVPROC)load("glVertexAttribP1uiv"); glad_glVertexAttribP2ui = (PFNGLVERTEXATTRIBP2UIPROC)load("glVertexAttribP2ui"); glad_glVertexAttribP2uiv = (PFNGLVERTEXATTRIBP2UIVPROC)load("glVertexAttribP2uiv"); glad_glVertexAttribP3ui = (PFNGLVERTEXATTRIBP3UIPROC)load("glVertexAttribP3ui"); glad_glVertexAttribP3uiv = (PFNGLVERTEXATTRIBP3UIVPROC)load("glVertexAttribP3uiv"); glad_glVertexAttribP4ui = (PFNGLVERTEXATTRIBP4UIPROC)load("glVertexAttribP4ui"); glad_glVertexAttribP4uiv = (PFNGLVERTEXATTRIBP4UIVPROC)load("glVertexAttribP4uiv"); glad_glVertexP2ui = (PFNGLVERTEXP2UIPROC)load("glVertexP2ui"); glad_glVertexP2uiv = (PFNGLVERTEXP2UIVPROC)load("glVertexP2uiv"); glad_glVertexP3ui = (PFNGLVERTEXP3UIPROC)load("glVertexP3ui"); glad_glVertexP3uiv = (PFNGLVERTEXP3UIVPROC)load("glVertexP3uiv"); glad_glVertexP4ui = (PFNGLVERTEXP4UIPROC)load("glVertexP4ui"); glad_glVertexP4uiv = (PFNGLVERTEXP4UIVPROC)load("glVertexP4uiv"); glad_glTexCoordP1ui = (PFNGLTEXCOORDP1UIPROC)load("glTexCoordP1ui"); glad_glTexCoordP1uiv = (PFNGLTEXCOORDP1UIVPROC)load("glTexCoordP1uiv"); glad_glTexCoordP2ui = (PFNGLTEXCOORDP2UIPROC)load("glTexCoordP2ui"); glad_glTexCoordP2uiv = (PFNGLTEXCOORDP2UIVPROC)load("glTexCoordP2uiv"); glad_glTexCoordP3ui = (PFNGLTEXCOORDP3UIPROC)load("glTexCoordP3ui"); glad_glTexCoordP3uiv = (PFNGLTEXCOORDP3UIVPROC)load("glTexCoordP3uiv"); glad_glTexCoordP4ui = (PFNGLTEXCOORDP4UIPROC)load("glTexCoordP4ui"); glad_glTexCoordP4uiv = (PFNGLTEXCOORDP4UIVPROC)load("glTexCoordP4uiv"); glad_glMultiTexCoordP1ui = (PFNGLMULTITEXCOORDP1UIPROC)load("glMultiTexCoordP1ui"); glad_glMultiTexCoordP1uiv = (PFNGLMULTITEXCOORDP1UIVPROC)load("glMultiTexCoordP1uiv"); glad_glMultiTexCoordP2ui = (PFNGLMULTITEXCOORDP2UIPROC)load("glMultiTexCoordP2ui"); glad_glMultiTexCoordP2uiv = (PFNGLMULTITEXCOORDP2UIVPROC)load("glMultiTexCoordP2uiv"); glad_glMultiTexCoordP3ui = (PFNGLMULTITEXCOORDP3UIPROC)load("glMultiTexCoordP3ui"); glad_glMultiTexCoordP3uiv = (PFNGLMULTITEXCOORDP3UIVPROC)load("glMultiTexCoordP3uiv"); glad_glMultiTexCoordP4ui = (PFNGLMULTITEXCOORDP4UIPROC)load("glMultiTexCoordP4ui"); glad_glMultiTexCoordP4uiv = (PFNGLMULTITEXCOORDP4UIVPROC)load("glMultiTexCoordP4uiv"); glad_glNormalP3ui = (PFNGLNORMALP3UIPROC)load("glNormalP3ui"); glad_glNormalP3uiv = (PFNGLNORMALP3UIVPROC)load("glNormalP3uiv"); glad_glColorP3ui = (PFNGLCOLORP3UIPROC)load("glColorP3ui"); glad_glColorP3uiv = (PFNGLCOLORP3UIVPROC)load("glColorP3uiv"); glad_glColorP4ui = (PFNGLCOLORP4UIPROC)load("glColorP4ui"); glad_glColorP4uiv = (PFNGLCOLORP4UIVPROC)load("glColorP4uiv"); glad_glSecondaryColorP3ui = (PFNGLSECONDARYCOLORP3UIPROC)load("glSecondaryColorP3ui"); glad_glSecondaryColorP3uiv = (PFNGLSECONDARYCOLORP3UIVPROC)load("glSecondaryColorP3uiv"); } static int find_extensionsGL(void) { if (!get_exts()) return 0; (void)&has_ext; free_exts(); return 1; } static void find_coreGL(void) { /* Thank you @elmindreda * https://github.com/elmindreda/greg/blob/master/templates/greg.c.in#L176 * https://github.com/glfw/glfw/blob/master/src/context.c#L36 */ int i, major, minor; const char* version; const char* prefixes[] = { "OpenGL ES-CM ", "OpenGL ES-CL ", "OpenGL ES ", NULL }; version = (const char*) glGetString(GL_VERSION); if (!version) return; for (i = 0; prefixes[i]; i++) { const size_t length = strlen(prefixes[i]); if (strncmp(version, prefixes[i], length) == 0) { version += length; break; } } /* PR #18 */ #ifdef _MSC_VER sscanf_s(version, "%d.%d", &major, &minor); #else sscanf(version, "%d.%d", &major, &minor); #endif GLVersion.major = major; GLVersion.minor = minor; max_loaded_major = major; max_loaded_minor = minor; GLAD_GL_VERSION_1_0 = (major == 1 && minor >= 0) || major > 1; GLAD_GL_VERSION_1_1 = (major == 1 && minor >= 1) || major > 1; GLAD_GL_VERSION_1_2 = (major == 1 && minor >= 2) || major > 1; GLAD_GL_VERSION_1_3 = (major == 1 && minor >= 3) || major > 1; GLAD_GL_VERSION_1_4 = (major == 1 && minor >= 4) || major > 1; GLAD_GL_VERSION_1_5 = (major == 1 && minor >= 5) || major > 1; GLAD_GL_VERSION_2_0 = (major == 2 && minor >= 0) || major > 2; GLAD_GL_VERSION_2_1 = (major == 2 && minor >= 1) || major > 2; GLAD_GL_VERSION_3_0 = (major == 3 && minor >= 0) || major > 3; GLAD_GL_VERSION_3_1 = (major == 3 && minor >= 1) || major > 3; GLAD_GL_VERSION_3_2 = (major == 3 && minor >= 2) || major > 3; GLAD_GL_VERSION_3_3 = (major == 3 && minor >= 3) || major > 3; if (GLVersion.major > 3 || (GLVersion.major >= 3 && GLVersion.minor >= 3)) { max_loaded_major = 3; max_loaded_minor = 3; } } int gladLoadGLLoader(GLADloadproc load) { GLVersion.major = 0; GLVersion.minor = 0; glGetString = (PFNGLGETSTRINGPROC)load("glGetString"); if(glGetString == NULL) return 0; if(glGetString(GL_VERSION) == NULL) return 0; find_coreGL(); load_GL_VERSION_1_0(load); load_GL_VERSION_1_1(load); load_GL_VERSION_1_2(load); load_GL_VERSION_1_3(load); load_GL_VERSION_1_4(load); load_GL_VERSION_1_5(load); load_GL_VERSION_2_0(load); load_GL_VERSION_2_1(load); load_GL_VERSION_3_0(load); load_GL_VERSION_3_1(load); load_GL_VERSION_3_2(load); load_GL_VERSION_3_3(load); if (!find_extensionsGL()) return 0; return GLVersion.major != 0 || GLVersion.minor != 0; } ================================================ FILE: libraries/glad/glad_old.h ================================================ /* OpenGL loader generated by glad 0.1.34 on Tue Jul 6 15:41:26 2021. Language/Generator: C/C++ Specification: gl APIs: gl=3.3 Profile: compatibility Extensions: Loader: True Local files: False Omit khrplatform: False Reproducible: False Commandline: --profile="compatibility" --api="gl=3.3" --generator="c" --spec="gl" --extensions="" Online: https://glad.dav1d.de/#profile=compatibility&language=c&specification=gl&loader=on&api=gl%3D3.3 */ #ifndef __glad_h_ #define __glad_h_ #ifdef __gl_h_ #error OpenGL header already included, remove this include, glad already provides it #endif #define __gl_h_ #if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) #define APIENTRY __stdcall #endif #ifndef APIENTRY #define APIENTRY #endif #ifndef APIENTRYP #define APIENTRYP APIENTRY * #endif #ifndef GLAPIENTRY #define GLAPIENTRY APIENTRY #endif #ifdef __cplusplus extern "C" { #endif struct gladGLversionStruct { int major; int minor; }; typedef void* (* GLADloadproc)(const char *name); #ifndef GLAPI # if defined(GLAD_GLAPI_EXPORT) # if defined(_WIN32) || defined(__CYGWIN__) # if defined(GLAD_GLAPI_EXPORT_BUILD) # if defined(__GNUC__) # define GLAPI __attribute__ ((dllexport)) extern # else # define GLAPI __declspec(dllexport) extern # endif # else # if defined(__GNUC__) # define GLAPI __attribute__ ((dllimport)) extern # else # define GLAPI __declspec(dllimport) extern # endif # endif # elif defined(__GNUC__) && defined(GLAD_GLAPI_EXPORT_BUILD) # define GLAPI __attribute__ ((visibility ("default"))) extern # else # define GLAPI extern # endif # else # define GLAPI extern # endif #endif GLAPI struct gladGLversionStruct GLVersion; GLAPI int gladLoadGL(void); GLAPI int gladLoadGLLoader(GLADloadproc); #include typedef unsigned int GLenum; typedef unsigned char GLboolean; typedef unsigned int GLbitfield; typedef void GLvoid; typedef khronos_int8_t GLbyte; typedef khronos_uint8_t GLubyte; typedef khronos_int16_t GLshort; typedef khronos_uint16_t GLushort; typedef int GLint; typedef unsigned int GLuint; typedef khronos_int32_t GLclampx; typedef int GLsizei; typedef khronos_float_t GLfloat; typedef khronos_float_t GLclampf; typedef double GLdouble; typedef double GLclampd; typedef void *GLeglClientBufferEXT; typedef void *GLeglImageOES; typedef char GLchar; typedef char GLcharARB; #ifdef __APPLE__ typedef void *GLhandleARB; #else typedef unsigned int GLhandleARB; #endif typedef khronos_uint16_t GLhalf; typedef khronos_uint16_t GLhalfARB; typedef khronos_int32_t GLfixed; typedef khronos_intptr_t GLintptr; typedef khronos_intptr_t GLintptrARB; typedef khronos_ssize_t GLsizeiptr; typedef khronos_ssize_t GLsizeiptrARB; typedef khronos_int64_t GLint64; typedef khronos_int64_t GLint64EXT; typedef khronos_uint64_t GLuint64; typedef khronos_uint64_t GLuint64EXT; typedef struct __GLsync *GLsync; struct _cl_context; struct _cl_event; typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); typedef unsigned short GLhalfNV; typedef GLintptr GLvdpauSurfaceNV; typedef void (APIENTRY *GLVULKANPROCNV)(void); #define GL_DEPTH_BUFFER_BIT 0x00000100 #define GL_STENCIL_BUFFER_BIT 0x00000400 #define GL_COLOR_BUFFER_BIT 0x00004000 #define GL_FALSE 0 #define GL_TRUE 1 #define GL_POINTS 0x0000 #define GL_LINES 0x0001 #define GL_LINE_LOOP 0x0002 #define GL_LINE_STRIP 0x0003 #define GL_TRIANGLES 0x0004 #define GL_TRIANGLE_STRIP 0x0005 #define GL_TRIANGLE_FAN 0x0006 #define GL_QUADS 0x0007 #define GL_NEVER 0x0200 #define GL_LESS 0x0201 #define GL_EQUAL 0x0202 #define GL_LEQUAL 0x0203 #define GL_GREATER 0x0204 #define GL_NOTEQUAL 0x0205 #define GL_GEQUAL 0x0206 #define GL_ALWAYS 0x0207 #define GL_ZERO 0 #define GL_ONE 1 #define GL_SRC_COLOR 0x0300 #define GL_ONE_MINUS_SRC_COLOR 0x0301 #define GL_SRC_ALPHA 0x0302 #define GL_ONE_MINUS_SRC_ALPHA 0x0303 #define GL_DST_ALPHA 0x0304 #define GL_ONE_MINUS_DST_ALPHA 0x0305 #define GL_DST_COLOR 0x0306 #define GL_ONE_MINUS_DST_COLOR 0x0307 #define GL_SRC_ALPHA_SATURATE 0x0308 #define GL_NONE 0 #define GL_FRONT_LEFT 0x0400 #define GL_FRONT_RIGHT 0x0401 #define GL_BACK_LEFT 0x0402 #define GL_BACK_RIGHT 0x0403 #define GL_FRONT 0x0404 #define GL_BACK 0x0405 #define GL_LEFT 0x0406 #define GL_RIGHT 0x0407 #define GL_FRONT_AND_BACK 0x0408 #define GL_NO_ERROR 0 #define GL_INVALID_ENUM 0x0500 #define GL_INVALID_VALUE 0x0501 #define GL_INVALID_OPERATION 0x0502 #define GL_OUT_OF_MEMORY 0x0505 #define GL_CW 0x0900 #define GL_CCW 0x0901 #define GL_POINT_SIZE 0x0B11 #define GL_POINT_SIZE_RANGE 0x0B12 #define GL_POINT_SIZE_GRANULARITY 0x0B13 #define GL_LINE_SMOOTH 0x0B20 #define GL_LINE_WIDTH 0x0B21 #define GL_LINE_WIDTH_RANGE 0x0B22 #define GL_LINE_WIDTH_GRANULARITY 0x0B23 #define GL_POLYGON_MODE 0x0B40 #define GL_POLYGON_SMOOTH 0x0B41 #define GL_CULL_FACE 0x0B44 #define GL_CULL_FACE_MODE 0x0B45 #define GL_FRONT_FACE 0x0B46 #define GL_DEPTH_RANGE 0x0B70 #define GL_DEPTH_TEST 0x0B71 #define GL_DEPTH_WRITEMASK 0x0B72 #define GL_DEPTH_CLEAR_VALUE 0x0B73 #define GL_DEPTH_FUNC 0x0B74 #define GL_STENCIL_TEST 0x0B90 #define GL_STENCIL_CLEAR_VALUE 0x0B91 #define GL_STENCIL_FUNC 0x0B92 #define GL_STENCIL_VALUE_MASK 0x0B93 #define GL_STENCIL_FAIL 0x0B94 #define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 #define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 #define GL_STENCIL_REF 0x0B97 #define GL_STENCIL_WRITEMASK 0x0B98 #define GL_VIEWPORT 0x0BA2 #define GL_DITHER 0x0BD0 #define GL_BLEND_DST 0x0BE0 #define GL_BLEND_SRC 0x0BE1 #define GL_BLEND 0x0BE2 #define GL_LOGIC_OP_MODE 0x0BF0 #define GL_DRAW_BUFFER 0x0C01 #define GL_READ_BUFFER 0x0C02 #define GL_SCISSOR_BOX 0x0C10 #define GL_SCISSOR_TEST 0x0C11 #define GL_COLOR_CLEAR_VALUE 0x0C22 #define GL_COLOR_WRITEMASK 0x0C23 #define GL_DOUBLEBUFFER 0x0C32 #define GL_STEREO 0x0C33 #define GL_LINE_SMOOTH_HINT 0x0C52 #define GL_POLYGON_SMOOTH_HINT 0x0C53 #define GL_UNPACK_SWAP_BYTES 0x0CF0 #define GL_UNPACK_LSB_FIRST 0x0CF1 #define GL_UNPACK_ROW_LENGTH 0x0CF2 #define GL_UNPACK_SKIP_ROWS 0x0CF3 #define GL_UNPACK_SKIP_PIXELS 0x0CF4 #define GL_UNPACK_ALIGNMENT 0x0CF5 #define GL_PACK_SWAP_BYTES 0x0D00 #define GL_PACK_LSB_FIRST 0x0D01 #define GL_PACK_ROW_LENGTH 0x0D02 #define GL_PACK_SKIP_ROWS 0x0D03 #define GL_PACK_SKIP_PIXELS 0x0D04 #define GL_PACK_ALIGNMENT 0x0D05 #define GL_MAX_TEXTURE_SIZE 0x0D33 #define GL_MAX_VIEWPORT_DIMS 0x0D3A #define GL_SUBPIXEL_BITS 0x0D50 #define GL_TEXTURE_1D 0x0DE0 #define GL_TEXTURE_2D 0x0DE1 #define GL_TEXTURE_WIDTH 0x1000 #define GL_TEXTURE_HEIGHT 0x1001 #define GL_TEXTURE_BORDER_COLOR 0x1004 #define GL_DONT_CARE 0x1100 #define GL_FASTEST 0x1101 #define GL_NICEST 0x1102 #define GL_BYTE 0x1400 #define GL_UNSIGNED_BYTE 0x1401 #define GL_SHORT 0x1402 #define GL_UNSIGNED_SHORT 0x1403 #define GL_INT 0x1404 #define GL_UNSIGNED_INT 0x1405 #define GL_FLOAT 0x1406 #define GL_STACK_OVERFLOW 0x0503 #define GL_STACK_UNDERFLOW 0x0504 #define GL_CLEAR 0x1500 #define GL_AND 0x1501 #define GL_AND_REVERSE 0x1502 #define GL_COPY 0x1503 #define GL_AND_INVERTED 0x1504 #define GL_NOOP 0x1505 #define GL_XOR 0x1506 #define GL_OR 0x1507 #define GL_NOR 0x1508 #define GL_EQUIV 0x1509 #define GL_INVERT 0x150A #define GL_OR_REVERSE 0x150B #define GL_COPY_INVERTED 0x150C #define GL_OR_INVERTED 0x150D #define GL_NAND 0x150E #define GL_SET 0x150F #define GL_TEXTURE 0x1702 #define GL_COLOR 0x1800 #define GL_DEPTH 0x1801 #define GL_STENCIL 0x1802 #define GL_STENCIL_INDEX 0x1901 #define GL_DEPTH_COMPONENT 0x1902 #define GL_RED 0x1903 #define GL_GREEN 0x1904 #define GL_BLUE 0x1905 #define GL_ALPHA 0x1906 #define GL_RGB 0x1907 #define GL_RGBA 0x1908 #define GL_POINT 0x1B00 #define GL_LINE 0x1B01 #define GL_FILL 0x1B02 #define GL_KEEP 0x1E00 #define GL_REPLACE 0x1E01 #define GL_INCR 0x1E02 #define GL_DECR 0x1E03 #define GL_VENDOR 0x1F00 #define GL_RENDERER 0x1F01 #define GL_VERSION 0x1F02 #define GL_EXTENSIONS 0x1F03 #define GL_NEAREST 0x2600 #define GL_LINEAR 0x2601 #define GL_NEAREST_MIPMAP_NEAREST 0x2700 #define GL_LINEAR_MIPMAP_NEAREST 0x2701 #define GL_NEAREST_MIPMAP_LINEAR 0x2702 #define GL_LINEAR_MIPMAP_LINEAR 0x2703 #define GL_TEXTURE_MAG_FILTER 0x2800 #define GL_TEXTURE_MIN_FILTER 0x2801 #define GL_TEXTURE_WRAP_S 0x2802 #define GL_TEXTURE_WRAP_T 0x2803 #define GL_REPEAT 0x2901 #define GL_CURRENT_BIT 0x00000001 #define GL_POINT_BIT 0x00000002 #define GL_LINE_BIT 0x00000004 #define GL_POLYGON_BIT 0x00000008 #define GL_POLYGON_STIPPLE_BIT 0x00000010 #define GL_PIXEL_MODE_BIT 0x00000020 #define GL_LIGHTING_BIT 0x00000040 #define GL_FOG_BIT 0x00000080 #define GL_ACCUM_BUFFER_BIT 0x00000200 #define GL_VIEWPORT_BIT 0x00000800 #define GL_TRANSFORM_BIT 0x00001000 #define GL_ENABLE_BIT 0x00002000 #define GL_HINT_BIT 0x00008000 #define GL_EVAL_BIT 0x00010000 #define GL_LIST_BIT 0x00020000 #define GL_TEXTURE_BIT 0x00040000 #define GL_SCISSOR_BIT 0x00080000 #define GL_ALL_ATTRIB_BITS 0xFFFFFFFF #define GL_QUAD_STRIP 0x0008 #define GL_POLYGON 0x0009 #define GL_ACCUM 0x0100 #define GL_LOAD 0x0101 #define GL_RETURN 0x0102 #define GL_MULT 0x0103 #define GL_ADD 0x0104 #define GL_AUX0 0x0409 #define GL_AUX1 0x040A #define GL_AUX2 0x040B #define GL_AUX3 0x040C #define GL_2D 0x0600 #define GL_3D 0x0601 #define GL_3D_COLOR 0x0602 #define GL_3D_COLOR_TEXTURE 0x0603 #define GL_4D_COLOR_TEXTURE 0x0604 #define GL_PASS_THROUGH_TOKEN 0x0700 #define GL_POINT_TOKEN 0x0701 #define GL_LINE_TOKEN 0x0702 #define GL_POLYGON_TOKEN 0x0703 #define GL_BITMAP_TOKEN 0x0704 #define GL_DRAW_PIXEL_TOKEN 0x0705 #define GL_COPY_PIXEL_TOKEN 0x0706 #define GL_LINE_RESET_TOKEN 0x0707 #define GL_EXP 0x0800 #define GL_EXP2 0x0801 #define GL_COEFF 0x0A00 #define GL_ORDER 0x0A01 #define GL_DOMAIN 0x0A02 #define GL_PIXEL_MAP_I_TO_I 0x0C70 #define GL_PIXEL_MAP_S_TO_S 0x0C71 #define GL_PIXEL_MAP_I_TO_R 0x0C72 #define GL_PIXEL_MAP_I_TO_G 0x0C73 #define GL_PIXEL_MAP_I_TO_B 0x0C74 #define GL_PIXEL_MAP_I_TO_A 0x0C75 #define GL_PIXEL_MAP_R_TO_R 0x0C76 #define GL_PIXEL_MAP_G_TO_G 0x0C77 #define GL_PIXEL_MAP_B_TO_B 0x0C78 #define GL_PIXEL_MAP_A_TO_A 0x0C79 #define GL_CURRENT_COLOR 0x0B00 #define GL_CURRENT_INDEX 0x0B01 #define GL_CURRENT_NORMAL 0x0B02 #define GL_CURRENT_TEXTURE_COORDS 0x0B03 #define GL_CURRENT_RASTER_COLOR 0x0B04 #define GL_CURRENT_RASTER_INDEX 0x0B05 #define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 #define GL_CURRENT_RASTER_POSITION 0x0B07 #define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 #define GL_CURRENT_RASTER_DISTANCE 0x0B09 #define GL_POINT_SMOOTH 0x0B10 #define GL_LINE_STIPPLE 0x0B24 #define GL_LINE_STIPPLE_PATTERN 0x0B25 #define GL_LINE_STIPPLE_REPEAT 0x0B26 #define GL_LIST_MODE 0x0B30 #define GL_MAX_LIST_NESTING 0x0B31 #define GL_LIST_BASE 0x0B32 #define GL_LIST_INDEX 0x0B33 #define GL_POLYGON_STIPPLE 0x0B42 #define GL_EDGE_FLAG 0x0B43 #define GL_LIGHTING 0x0B50 #define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 #define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 #define GL_LIGHT_MODEL_AMBIENT 0x0B53 #define GL_SHADE_MODEL 0x0B54 #define GL_COLOR_MATERIAL_FACE 0x0B55 #define GL_COLOR_MATERIAL_PARAMETER 0x0B56 #define GL_COLOR_MATERIAL 0x0B57 #define GL_FOG 0x0B60 #define GL_FOG_INDEX 0x0B61 #define GL_FOG_DENSITY 0x0B62 #define GL_FOG_START 0x0B63 #define GL_FOG_END 0x0B64 #define GL_FOG_MODE 0x0B65 #define GL_FOG_COLOR 0x0B66 #define GL_ACCUM_CLEAR_VALUE 0x0B80 #define GL_MATRIX_MODE 0x0BA0 #define GL_NORMALIZE 0x0BA1 #define GL_MODELVIEW_STACK_DEPTH 0x0BA3 #define GL_PROJECTION_STACK_DEPTH 0x0BA4 #define GL_TEXTURE_STACK_DEPTH 0x0BA5 #define GL_MODELVIEW_MATRIX 0x0BA6 #define GL_PROJECTION_MATRIX 0x0BA7 #define GL_TEXTURE_MATRIX 0x0BA8 #define GL_ATTRIB_STACK_DEPTH 0x0BB0 #define GL_ALPHA_TEST 0x0BC0 #define GL_ALPHA_TEST_FUNC 0x0BC1 #define GL_ALPHA_TEST_REF 0x0BC2 #define GL_LOGIC_OP 0x0BF1 #define GL_AUX_BUFFERS 0x0C00 #define GL_INDEX_CLEAR_VALUE 0x0C20 #define GL_INDEX_WRITEMASK 0x0C21 #define GL_INDEX_MODE 0x0C30 #define GL_RGBA_MODE 0x0C31 #define GL_RENDER_MODE 0x0C40 #define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 #define GL_POINT_SMOOTH_HINT 0x0C51 #define GL_FOG_HINT 0x0C54 #define GL_TEXTURE_GEN_S 0x0C60 #define GL_TEXTURE_GEN_T 0x0C61 #define GL_TEXTURE_GEN_R 0x0C62 #define GL_TEXTURE_GEN_Q 0x0C63 #define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0 #define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1 #define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2 #define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3 #define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4 #define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5 #define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6 #define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7 #define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8 #define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9 #define GL_MAP_COLOR 0x0D10 #define GL_MAP_STENCIL 0x0D11 #define GL_INDEX_SHIFT 0x0D12 #define GL_INDEX_OFFSET 0x0D13 #define GL_RED_SCALE 0x0D14 #define GL_RED_BIAS 0x0D15 #define GL_ZOOM_X 0x0D16 #define GL_ZOOM_Y 0x0D17 #define GL_GREEN_SCALE 0x0D18 #define GL_GREEN_BIAS 0x0D19 #define GL_BLUE_SCALE 0x0D1A #define GL_BLUE_BIAS 0x0D1B #define GL_ALPHA_SCALE 0x0D1C #define GL_ALPHA_BIAS 0x0D1D #define GL_DEPTH_SCALE 0x0D1E #define GL_DEPTH_BIAS 0x0D1F #define GL_MAX_EVAL_ORDER 0x0D30 #define GL_MAX_LIGHTS 0x0D31 #define GL_MAX_CLIP_PLANES 0x0D32 #define GL_MAX_PIXEL_MAP_TABLE 0x0D34 #define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35 #define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 #define GL_MAX_NAME_STACK_DEPTH 0x0D37 #define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 #define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 #define GL_INDEX_BITS 0x0D51 #define GL_RED_BITS 0x0D52 #define GL_GREEN_BITS 0x0D53 #define GL_BLUE_BITS 0x0D54 #define GL_ALPHA_BITS 0x0D55 #define GL_DEPTH_BITS 0x0D56 #define GL_STENCIL_BITS 0x0D57 #define GL_ACCUM_RED_BITS 0x0D58 #define GL_ACCUM_GREEN_BITS 0x0D59 #define GL_ACCUM_BLUE_BITS 0x0D5A #define GL_ACCUM_ALPHA_BITS 0x0D5B #define GL_NAME_STACK_DEPTH 0x0D70 #define GL_AUTO_NORMAL 0x0D80 #define GL_MAP1_COLOR_4 0x0D90 #define GL_MAP1_INDEX 0x0D91 #define GL_MAP1_NORMAL 0x0D92 #define GL_MAP1_TEXTURE_COORD_1 0x0D93 #define GL_MAP1_TEXTURE_COORD_2 0x0D94 #define GL_MAP1_TEXTURE_COORD_3 0x0D95 #define GL_MAP1_TEXTURE_COORD_4 0x0D96 #define GL_MAP1_VERTEX_3 0x0D97 #define GL_MAP1_VERTEX_4 0x0D98 #define GL_MAP2_COLOR_4 0x0DB0 #define GL_MAP2_INDEX 0x0DB1 #define GL_MAP2_NORMAL 0x0DB2 #define GL_MAP2_TEXTURE_COORD_1 0x0DB3 #define GL_MAP2_TEXTURE_COORD_2 0x0DB4 #define GL_MAP2_TEXTURE_COORD_3 0x0DB5 #define GL_MAP2_TEXTURE_COORD_4 0x0DB6 #define GL_MAP2_VERTEX_3 0x0DB7 #define GL_MAP2_VERTEX_4 0x0DB8 #define GL_MAP1_GRID_DOMAIN 0x0DD0 #define GL_MAP1_GRID_SEGMENTS 0x0DD1 #define GL_MAP2_GRID_DOMAIN 0x0DD2 #define GL_MAP2_GRID_SEGMENTS 0x0DD3 #define GL_TEXTURE_COMPONENTS 0x1003 #define GL_TEXTURE_BORDER 0x1005 #define GL_AMBIENT 0x1200 #define GL_DIFFUSE 0x1201 #define GL_SPECULAR 0x1202 #define GL_POSITION 0x1203 #define GL_SPOT_DIRECTION 0x1204 #define GL_SPOT_EXPONENT 0x1205 #define GL_SPOT_CUTOFF 0x1206 #define GL_CONSTANT_ATTENUATION 0x1207 #define GL_LINEAR_ATTENUATION 0x1208 #define GL_QUADRATIC_ATTENUATION 0x1209 #define GL_COMPILE 0x1300 #define GL_COMPILE_AND_EXECUTE 0x1301 #define GL_2_BYTES 0x1407 #define GL_3_BYTES 0x1408 #define GL_4_BYTES 0x1409 #define GL_EMISSION 0x1600 #define GL_SHININESS 0x1601 #define GL_AMBIENT_AND_DIFFUSE 0x1602 #define GL_COLOR_INDEXES 0x1603 #define GL_MODELVIEW 0x1700 #define GL_PROJECTION 0x1701 #define GL_COLOR_INDEX 0x1900 #define GL_LUMINANCE 0x1909 #define GL_LUMINANCE_ALPHA 0x190A #define GL_BITMAP 0x1A00 #define GL_RENDER 0x1C00 #define GL_FEEDBACK 0x1C01 #define GL_SELECT 0x1C02 #define GL_FLAT 0x1D00 #define GL_SMOOTH 0x1D01 #define GL_S 0x2000 #define GL_T 0x2001 #define GL_R 0x2002 #define GL_Q 0x2003 #define GL_MODULATE 0x2100 #define GL_DECAL 0x2101 #define GL_TEXTURE_ENV_MODE 0x2200 #define GL_TEXTURE_ENV_COLOR 0x2201 #define GL_TEXTURE_ENV 0x2300 #define GL_EYE_LINEAR 0x2400 #define GL_OBJECT_LINEAR 0x2401 #define GL_SPHERE_MAP 0x2402 #define GL_TEXTURE_GEN_MODE 0x2500 #define GL_OBJECT_PLANE 0x2501 #define GL_EYE_PLANE 0x2502 #define GL_CLAMP 0x2900 #define GL_CLIP_PLANE0 0x3000 #define GL_CLIP_PLANE1 0x3001 #define GL_CLIP_PLANE2 0x3002 #define GL_CLIP_PLANE3 0x3003 #define GL_CLIP_PLANE4 0x3004 #define GL_CLIP_PLANE5 0x3005 #define GL_LIGHT0 0x4000 #define GL_LIGHT1 0x4001 #define GL_LIGHT2 0x4002 #define GL_LIGHT3 0x4003 #define GL_LIGHT4 0x4004 #define GL_LIGHT5 0x4005 #define GL_LIGHT6 0x4006 #define GL_LIGHT7 0x4007 #define GL_COLOR_LOGIC_OP 0x0BF2 #define GL_POLYGON_OFFSET_UNITS 0x2A00 #define GL_POLYGON_OFFSET_POINT 0x2A01 #define GL_POLYGON_OFFSET_LINE 0x2A02 #define GL_POLYGON_OFFSET_FILL 0x8037 #define GL_POLYGON_OFFSET_FACTOR 0x8038 #define GL_TEXTURE_BINDING_1D 0x8068 #define GL_TEXTURE_BINDING_2D 0x8069 #define GL_TEXTURE_INTERNAL_FORMAT 0x1003 #define GL_TEXTURE_RED_SIZE 0x805C #define GL_TEXTURE_GREEN_SIZE 0x805D #define GL_TEXTURE_BLUE_SIZE 0x805E #define GL_TEXTURE_ALPHA_SIZE 0x805F #define GL_DOUBLE 0x140A #define GL_PROXY_TEXTURE_1D 0x8063 #define GL_PROXY_TEXTURE_2D 0x8064 #define GL_R3_G3_B2 0x2A10 #define GL_RGB4 0x804F #define GL_RGB5 0x8050 #define GL_RGB8 0x8051 #define GL_RGB10 0x8052 #define GL_RGB12 0x8053 #define GL_RGB16 0x8054 #define GL_RGBA2 0x8055 #define GL_RGBA4 0x8056 #define GL_RGB5_A1 0x8057 #define GL_RGBA8 0x8058 #define GL_RGB10_A2 0x8059 #define GL_RGBA12 0x805A #define GL_RGBA16 0x805B #define GL_CLIENT_PIXEL_STORE_BIT 0x00000001 #define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002 #define GL_CLIENT_ALL_ATTRIB_BITS 0xFFFFFFFF #define GL_VERTEX_ARRAY_POINTER 0x808E #define GL_NORMAL_ARRAY_POINTER 0x808F #define GL_COLOR_ARRAY_POINTER 0x8090 #define GL_INDEX_ARRAY_POINTER 0x8091 #define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092 #define GL_EDGE_FLAG_ARRAY_POINTER 0x8093 #define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 #define GL_SELECTION_BUFFER_POINTER 0x0DF3 #define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 #define GL_INDEX_LOGIC_OP 0x0BF1 #define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B #define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 #define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 #define GL_SELECTION_BUFFER_SIZE 0x0DF4 #define GL_VERTEX_ARRAY 0x8074 #define GL_NORMAL_ARRAY 0x8075 #define GL_COLOR_ARRAY 0x8076 #define GL_INDEX_ARRAY 0x8077 #define GL_TEXTURE_COORD_ARRAY 0x8078 #define GL_EDGE_FLAG_ARRAY 0x8079 #define GL_VERTEX_ARRAY_SIZE 0x807A #define GL_VERTEX_ARRAY_TYPE 0x807B #define GL_VERTEX_ARRAY_STRIDE 0x807C #define GL_NORMAL_ARRAY_TYPE 0x807E #define GL_NORMAL_ARRAY_STRIDE 0x807F #define GL_COLOR_ARRAY_SIZE 0x8081 #define GL_COLOR_ARRAY_TYPE 0x8082 #define GL_COLOR_ARRAY_STRIDE 0x8083 #define GL_INDEX_ARRAY_TYPE 0x8085 #define GL_INDEX_ARRAY_STRIDE 0x8086 #define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088 #define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089 #define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A #define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C #define GL_TEXTURE_LUMINANCE_SIZE 0x8060 #define GL_TEXTURE_INTENSITY_SIZE 0x8061 #define GL_TEXTURE_PRIORITY 0x8066 #define GL_TEXTURE_RESIDENT 0x8067 #define GL_ALPHA4 0x803B #define GL_ALPHA8 0x803C #define GL_ALPHA12 0x803D #define GL_ALPHA16 0x803E #define GL_LUMINANCE4 0x803F #define GL_LUMINANCE8 0x8040 #define GL_LUMINANCE12 0x8041 #define GL_LUMINANCE16 0x8042 #define GL_LUMINANCE4_ALPHA4 0x8043 #define GL_LUMINANCE6_ALPHA2 0x8044 #define GL_LUMINANCE8_ALPHA8 0x8045 #define GL_LUMINANCE12_ALPHA4 0x8046 #define GL_LUMINANCE12_ALPHA12 0x8047 #define GL_LUMINANCE16_ALPHA16 0x8048 #define GL_INTENSITY 0x8049 #define GL_INTENSITY4 0x804A #define GL_INTENSITY8 0x804B #define GL_INTENSITY12 0x804C #define GL_INTENSITY16 0x804D #define GL_V2F 0x2A20 #define GL_V3F 0x2A21 #define GL_C4UB_V2F 0x2A22 #define GL_C4UB_V3F 0x2A23 #define GL_C3F_V3F 0x2A24 #define GL_N3F_V3F 0x2A25 #define GL_C4F_N3F_V3F 0x2A26 #define GL_T2F_V3F 0x2A27 #define GL_T4F_V4F 0x2A28 #define GL_T2F_C4UB_V3F 0x2A29 #define GL_T2F_C3F_V3F 0x2A2A #define GL_T2F_N3F_V3F 0x2A2B #define GL_T2F_C4F_N3F_V3F 0x2A2C #define GL_T4F_C4F_N3F_V4F 0x2A2D #define GL_UNSIGNED_BYTE_3_3_2 0x8032 #define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 #define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 #define GL_UNSIGNED_INT_8_8_8_8 0x8035 #define GL_UNSIGNED_INT_10_10_10_2 0x8036 #define GL_TEXTURE_BINDING_3D 0x806A #define GL_PACK_SKIP_IMAGES 0x806B #define GL_PACK_IMAGE_HEIGHT 0x806C #define GL_UNPACK_SKIP_IMAGES 0x806D #define GL_UNPACK_IMAGE_HEIGHT 0x806E #define GL_TEXTURE_3D 0x806F #define GL_PROXY_TEXTURE_3D 0x8070 #define GL_TEXTURE_DEPTH 0x8071 #define GL_TEXTURE_WRAP_R 0x8072 #define GL_MAX_3D_TEXTURE_SIZE 0x8073 #define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 #define GL_UNSIGNED_SHORT_5_6_5 0x8363 #define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 #define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 #define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 #define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 #define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 #define GL_BGR 0x80E0 #define GL_BGRA 0x80E1 #define GL_MAX_ELEMENTS_VERTICES 0x80E8 #define GL_MAX_ELEMENTS_INDICES 0x80E9 #define GL_CLAMP_TO_EDGE 0x812F #define GL_TEXTURE_MIN_LOD 0x813A #define GL_TEXTURE_MAX_LOD 0x813B #define GL_TEXTURE_BASE_LEVEL 0x813C #define GL_TEXTURE_MAX_LEVEL 0x813D #define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 #define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 #define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 #define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 #define GL_ALIASED_LINE_WIDTH_RANGE 0x846E #define GL_RESCALE_NORMAL 0x803A #define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 #define GL_SINGLE_COLOR 0x81F9 #define GL_SEPARATE_SPECULAR_COLOR 0x81FA #define GL_ALIASED_POINT_SIZE_RANGE 0x846D #define GL_TEXTURE0 0x84C0 #define GL_TEXTURE1 0x84C1 #define GL_TEXTURE2 0x84C2 #define GL_TEXTURE3 0x84C3 #define GL_TEXTURE4 0x84C4 #define GL_TEXTURE5 0x84C5 #define GL_TEXTURE6 0x84C6 #define GL_TEXTURE7 0x84C7 #define GL_TEXTURE8 0x84C8 #define GL_TEXTURE9 0x84C9 #define GL_TEXTURE10 0x84CA #define GL_TEXTURE11 0x84CB #define GL_TEXTURE12 0x84CC #define GL_TEXTURE13 0x84CD #define GL_TEXTURE14 0x84CE #define GL_TEXTURE15 0x84CF #define GL_TEXTURE16 0x84D0 #define GL_TEXTURE17 0x84D1 #define GL_TEXTURE18 0x84D2 #define GL_TEXTURE19 0x84D3 #define GL_TEXTURE20 0x84D4 #define GL_TEXTURE21 0x84D5 #define GL_TEXTURE22 0x84D6 #define GL_TEXTURE23 0x84D7 #define GL_TEXTURE24 0x84D8 #define GL_TEXTURE25 0x84D9 #define GL_TEXTURE26 0x84DA #define GL_TEXTURE27 0x84DB #define GL_TEXTURE28 0x84DC #define GL_TEXTURE29 0x84DD #define GL_TEXTURE30 0x84DE #define GL_TEXTURE31 0x84DF #define GL_ACTIVE_TEXTURE 0x84E0 #define GL_MULTISAMPLE 0x809D #define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E #define GL_SAMPLE_ALPHA_TO_ONE 0x809F #define GL_SAMPLE_COVERAGE 0x80A0 #define GL_SAMPLE_BUFFERS 0x80A8 #define GL_SAMPLES 0x80A9 #define GL_SAMPLE_COVERAGE_VALUE 0x80AA #define GL_SAMPLE_COVERAGE_INVERT 0x80AB #define GL_TEXTURE_CUBE_MAP 0x8513 #define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A #define GL_PROXY_TEXTURE_CUBE_MAP 0x851B #define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C #define GL_COMPRESSED_RGB 0x84ED #define GL_COMPRESSED_RGBA 0x84EE #define GL_TEXTURE_COMPRESSION_HINT 0x84EF #define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 #define GL_TEXTURE_COMPRESSED 0x86A1 #define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 #define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 #define GL_CLAMP_TO_BORDER 0x812D #define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 #define GL_MAX_TEXTURE_UNITS 0x84E2 #define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 #define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 #define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 #define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 #define GL_MULTISAMPLE_BIT 0x20000000 #define GL_NORMAL_MAP 0x8511 #define GL_REFLECTION_MAP 0x8512 #define GL_COMPRESSED_ALPHA 0x84E9 #define GL_COMPRESSED_LUMINANCE 0x84EA #define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB #define GL_COMPRESSED_INTENSITY 0x84EC #define GL_COMBINE 0x8570 #define GL_COMBINE_RGB 0x8571 #define GL_COMBINE_ALPHA 0x8572 #define GL_SOURCE0_RGB 0x8580 #define GL_SOURCE1_RGB 0x8581 #define GL_SOURCE2_RGB 0x8582 #define GL_SOURCE0_ALPHA 0x8588 #define GL_SOURCE1_ALPHA 0x8589 #define GL_SOURCE2_ALPHA 0x858A #define GL_OPERAND0_RGB 0x8590 #define GL_OPERAND1_RGB 0x8591 #define GL_OPERAND2_RGB 0x8592 #define GL_OPERAND0_ALPHA 0x8598 #define GL_OPERAND1_ALPHA 0x8599 #define GL_OPERAND2_ALPHA 0x859A #define GL_RGB_SCALE 0x8573 #define GL_ADD_SIGNED 0x8574 #define GL_INTERPOLATE 0x8575 #define GL_SUBTRACT 0x84E7 #define GL_CONSTANT 0x8576 #define GL_PRIMARY_COLOR 0x8577 #define GL_PREVIOUS 0x8578 #define GL_DOT3_RGB 0x86AE #define GL_DOT3_RGBA 0x86AF #define GL_BLEND_DST_RGB 0x80C8 #define GL_BLEND_SRC_RGB 0x80C9 #define GL_BLEND_DST_ALPHA 0x80CA #define GL_BLEND_SRC_ALPHA 0x80CB #define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 #define GL_DEPTH_COMPONENT16 0x81A5 #define GL_DEPTH_COMPONENT24 0x81A6 #define GL_DEPTH_COMPONENT32 0x81A7 #define GL_MIRRORED_REPEAT 0x8370 #define GL_MAX_TEXTURE_LOD_BIAS 0x84FD #define GL_TEXTURE_LOD_BIAS 0x8501 #define GL_INCR_WRAP 0x8507 #define GL_DECR_WRAP 0x8508 #define GL_TEXTURE_DEPTH_SIZE 0x884A #define GL_TEXTURE_COMPARE_MODE 0x884C #define GL_TEXTURE_COMPARE_FUNC 0x884D #define GL_POINT_SIZE_MIN 0x8126 #define GL_POINT_SIZE_MAX 0x8127 #define GL_POINT_DISTANCE_ATTENUATION 0x8129 #define GL_GENERATE_MIPMAP 0x8191 #define GL_GENERATE_MIPMAP_HINT 0x8192 #define GL_FOG_COORDINATE_SOURCE 0x8450 #define GL_FOG_COORDINATE 0x8451 #define GL_FRAGMENT_DEPTH 0x8452 #define GL_CURRENT_FOG_COORDINATE 0x8453 #define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 #define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 #define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 #define GL_FOG_COORDINATE_ARRAY 0x8457 #define GL_COLOR_SUM 0x8458 #define GL_CURRENT_SECONDARY_COLOR 0x8459 #define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A #define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B #define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C #define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D #define GL_SECONDARY_COLOR_ARRAY 0x845E #define GL_TEXTURE_FILTER_CONTROL 0x8500 #define GL_DEPTH_TEXTURE_MODE 0x884B #define GL_COMPARE_R_TO_TEXTURE 0x884E #define GL_BLEND_COLOR 0x8005 #define GL_BLEND_EQUATION 0x8009 #define GL_CONSTANT_COLOR 0x8001 #define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 #define GL_CONSTANT_ALPHA 0x8003 #define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 #define GL_FUNC_ADD 0x8006 #define GL_FUNC_REVERSE_SUBTRACT 0x800B #define GL_FUNC_SUBTRACT 0x800A #define GL_MIN 0x8007 #define GL_MAX 0x8008 #define GL_BUFFER_SIZE 0x8764 #define GL_BUFFER_USAGE 0x8765 #define GL_QUERY_COUNTER_BITS 0x8864 #define GL_CURRENT_QUERY 0x8865 #define GL_QUERY_RESULT 0x8866 #define GL_QUERY_RESULT_AVAILABLE 0x8867 #define GL_ARRAY_BUFFER 0x8892 #define GL_ELEMENT_ARRAY_BUFFER 0x8893 #define GL_ARRAY_BUFFER_BINDING 0x8894 #define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 #define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F #define GL_READ_ONLY 0x88B8 #define GL_WRITE_ONLY 0x88B9 #define GL_READ_WRITE 0x88BA #define GL_BUFFER_ACCESS 0x88BB #define GL_BUFFER_MAPPED 0x88BC #define GL_BUFFER_MAP_POINTER 0x88BD #define GL_STREAM_DRAW 0x88E0 #define GL_STREAM_READ 0x88E1 #define GL_STREAM_COPY 0x88E2 #define GL_STATIC_DRAW 0x88E4 #define GL_STATIC_READ 0x88E5 #define GL_STATIC_COPY 0x88E6 #define GL_DYNAMIC_DRAW 0x88E8 #define GL_DYNAMIC_READ 0x88E9 #define GL_DYNAMIC_COPY 0x88EA #define GL_SAMPLES_PASSED 0x8914 #define GL_SRC1_ALPHA 0x8589 #define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 #define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 #define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 #define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 #define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A #define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B #define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C #define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D #define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E #define GL_FOG_COORD_SRC 0x8450 #define GL_FOG_COORD 0x8451 #define GL_CURRENT_FOG_COORD 0x8453 #define GL_FOG_COORD_ARRAY_TYPE 0x8454 #define GL_FOG_COORD_ARRAY_STRIDE 0x8455 #define GL_FOG_COORD_ARRAY_POINTER 0x8456 #define GL_FOG_COORD_ARRAY 0x8457 #define GL_FOG_COORD_ARRAY_BUFFER_BINDING 0x889D #define GL_SRC0_RGB 0x8580 #define GL_SRC1_RGB 0x8581 #define GL_SRC2_RGB 0x8582 #define GL_SRC0_ALPHA 0x8588 #define GL_SRC2_ALPHA 0x858A #define GL_BLEND_EQUATION_RGB 0x8009 #define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 #define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 #define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 #define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 #define GL_CURRENT_VERTEX_ATTRIB 0x8626 #define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 #define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 #define GL_STENCIL_BACK_FUNC 0x8800 #define GL_STENCIL_BACK_FAIL 0x8801 #define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 #define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 #define GL_MAX_DRAW_BUFFERS 0x8824 #define GL_DRAW_BUFFER0 0x8825 #define GL_DRAW_BUFFER1 0x8826 #define GL_DRAW_BUFFER2 0x8827 #define GL_DRAW_BUFFER3 0x8828 #define GL_DRAW_BUFFER4 0x8829 #define GL_DRAW_BUFFER5 0x882A #define GL_DRAW_BUFFER6 0x882B #define GL_DRAW_BUFFER7 0x882C #define GL_DRAW_BUFFER8 0x882D #define GL_DRAW_BUFFER9 0x882E #define GL_DRAW_BUFFER10 0x882F #define GL_DRAW_BUFFER11 0x8830 #define GL_DRAW_BUFFER12 0x8831 #define GL_DRAW_BUFFER13 0x8832 #define GL_DRAW_BUFFER14 0x8833 #define GL_DRAW_BUFFER15 0x8834 #define GL_BLEND_EQUATION_ALPHA 0x883D #define GL_MAX_VERTEX_ATTRIBS 0x8869 #define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A #define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 #define GL_FRAGMENT_SHADER 0x8B30 #define GL_VERTEX_SHADER 0x8B31 #define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 #define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A #define GL_MAX_VARYING_FLOATS 0x8B4B #define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C #define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D #define GL_SHADER_TYPE 0x8B4F #define GL_FLOAT_VEC2 0x8B50 #define GL_FLOAT_VEC3 0x8B51 #define GL_FLOAT_VEC4 0x8B52 #define GL_INT_VEC2 0x8B53 #define GL_INT_VEC3 0x8B54 #define GL_INT_VEC4 0x8B55 #define GL_BOOL 0x8B56 #define GL_BOOL_VEC2 0x8B57 #define GL_BOOL_VEC3 0x8B58 #define GL_BOOL_VEC4 0x8B59 #define GL_FLOAT_MAT2 0x8B5A #define GL_FLOAT_MAT3 0x8B5B #define GL_FLOAT_MAT4 0x8B5C #define GL_SAMPLER_1D 0x8B5D #define GL_SAMPLER_2D 0x8B5E #define GL_SAMPLER_3D 0x8B5F #define GL_SAMPLER_CUBE 0x8B60 #define GL_SAMPLER_1D_SHADOW 0x8B61 #define GL_SAMPLER_2D_SHADOW 0x8B62 #define GL_DELETE_STATUS 0x8B80 #define GL_COMPILE_STATUS 0x8B81 #define GL_LINK_STATUS 0x8B82 #define GL_VALIDATE_STATUS 0x8B83 #define GL_INFO_LOG_LENGTH 0x8B84 #define GL_ATTACHED_SHADERS 0x8B85 #define GL_ACTIVE_UNIFORMS 0x8B86 #define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 #define GL_SHADER_SOURCE_LENGTH 0x8B88 #define GL_ACTIVE_ATTRIBUTES 0x8B89 #define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A #define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B #define GL_SHADING_LANGUAGE_VERSION 0x8B8C #define GL_CURRENT_PROGRAM 0x8B8D #define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 #define GL_LOWER_LEFT 0x8CA1 #define GL_UPPER_LEFT 0x8CA2 #define GL_STENCIL_BACK_REF 0x8CA3 #define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 #define GL_STENCIL_BACK_WRITEMASK 0x8CA5 #define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 #define GL_POINT_SPRITE 0x8861 #define GL_COORD_REPLACE 0x8862 #define GL_MAX_TEXTURE_COORDS 0x8871 #define GL_PIXEL_PACK_BUFFER 0x88EB #define GL_PIXEL_UNPACK_BUFFER 0x88EC #define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED #define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF #define GL_FLOAT_MAT2x3 0x8B65 #define GL_FLOAT_MAT2x4 0x8B66 #define GL_FLOAT_MAT3x2 0x8B67 #define GL_FLOAT_MAT3x4 0x8B68 #define GL_FLOAT_MAT4x2 0x8B69 #define GL_FLOAT_MAT4x3 0x8B6A #define GL_SRGB 0x8C40 #define GL_SRGB8 0x8C41 #define GL_SRGB_ALPHA 0x8C42 #define GL_SRGB8_ALPHA8 0x8C43 #define GL_COMPRESSED_SRGB 0x8C48 #define GL_COMPRESSED_SRGB_ALPHA 0x8C49 #define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F #define GL_SLUMINANCE_ALPHA 0x8C44 #define GL_SLUMINANCE8_ALPHA8 0x8C45 #define GL_SLUMINANCE 0x8C46 #define GL_SLUMINANCE8 0x8C47 #define GL_COMPRESSED_SLUMINANCE 0x8C4A #define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B #define GL_COMPARE_REF_TO_TEXTURE 0x884E #define GL_CLIP_DISTANCE0 0x3000 #define GL_CLIP_DISTANCE1 0x3001 #define GL_CLIP_DISTANCE2 0x3002 #define GL_CLIP_DISTANCE3 0x3003 #define GL_CLIP_DISTANCE4 0x3004 #define GL_CLIP_DISTANCE5 0x3005 #define GL_CLIP_DISTANCE6 0x3006 #define GL_CLIP_DISTANCE7 0x3007 #define GL_MAX_CLIP_DISTANCES 0x0D32 #define GL_MAJOR_VERSION 0x821B #define GL_MINOR_VERSION 0x821C #define GL_NUM_EXTENSIONS 0x821D #define GL_CONTEXT_FLAGS 0x821E #define GL_COMPRESSED_RED 0x8225 #define GL_COMPRESSED_RG 0x8226 #define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001 #define GL_RGBA32F 0x8814 #define GL_RGB32F 0x8815 #define GL_RGBA16F 0x881A #define GL_RGB16F 0x881B #define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD #define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF #define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 #define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 #define GL_CLAMP_READ_COLOR 0x891C #define GL_FIXED_ONLY 0x891D #define GL_MAX_VARYING_COMPONENTS 0x8B4B #define GL_TEXTURE_1D_ARRAY 0x8C18 #define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 #define GL_TEXTURE_2D_ARRAY 0x8C1A #define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B #define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C #define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D #define GL_R11F_G11F_B10F 0x8C3A #define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B #define GL_RGB9_E5 0x8C3D #define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E #define GL_TEXTURE_SHARED_SIZE 0x8C3F #define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 #define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 #define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 #define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 #define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 #define GL_PRIMITIVES_GENERATED 0x8C87 #define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 #define GL_RASTERIZER_DISCARD 0x8C89 #define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B #define GL_INTERLEAVED_ATTRIBS 0x8C8C #define GL_SEPARATE_ATTRIBS 0x8C8D #define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E #define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F #define GL_RGBA32UI 0x8D70 #define GL_RGB32UI 0x8D71 #define GL_RGBA16UI 0x8D76 #define GL_RGB16UI 0x8D77 #define GL_RGBA8UI 0x8D7C #define GL_RGB8UI 0x8D7D #define GL_RGBA32I 0x8D82 #define GL_RGB32I 0x8D83 #define GL_RGBA16I 0x8D88 #define GL_RGB16I 0x8D89 #define GL_RGBA8I 0x8D8E #define GL_RGB8I 0x8D8F #define GL_RED_INTEGER 0x8D94 #define GL_GREEN_INTEGER 0x8D95 #define GL_BLUE_INTEGER 0x8D96 #define GL_RGB_INTEGER 0x8D98 #define GL_RGBA_INTEGER 0x8D99 #define GL_BGR_INTEGER 0x8D9A #define GL_BGRA_INTEGER 0x8D9B #define GL_SAMPLER_1D_ARRAY 0x8DC0 #define GL_SAMPLER_2D_ARRAY 0x8DC1 #define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 #define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 #define GL_SAMPLER_CUBE_SHADOW 0x8DC5 #define GL_UNSIGNED_INT_VEC2 0x8DC6 #define GL_UNSIGNED_INT_VEC3 0x8DC7 #define GL_UNSIGNED_INT_VEC4 0x8DC8 #define GL_INT_SAMPLER_1D 0x8DC9 #define GL_INT_SAMPLER_2D 0x8DCA #define GL_INT_SAMPLER_3D 0x8DCB #define GL_INT_SAMPLER_CUBE 0x8DCC #define GL_INT_SAMPLER_1D_ARRAY 0x8DCE #define GL_INT_SAMPLER_2D_ARRAY 0x8DCF #define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 #define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 #define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 #define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 #define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 #define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 #define GL_QUERY_WAIT 0x8E13 #define GL_QUERY_NO_WAIT 0x8E14 #define GL_QUERY_BY_REGION_WAIT 0x8E15 #define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 #define GL_BUFFER_ACCESS_FLAGS 0x911F #define GL_BUFFER_MAP_LENGTH 0x9120 #define GL_BUFFER_MAP_OFFSET 0x9121 #define GL_DEPTH_COMPONENT32F 0x8CAC #define GL_DEPTH32F_STENCIL8 0x8CAD #define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD #define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 #define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 #define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 #define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 #define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 #define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 #define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 #define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 #define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 #define GL_FRAMEBUFFER_DEFAULT 0x8218 #define GL_FRAMEBUFFER_UNDEFINED 0x8219 #define GL_DEPTH_STENCIL_ATTACHMENT 0x821A #define GL_MAX_RENDERBUFFER_SIZE 0x84E8 #define GL_DEPTH_STENCIL 0x84F9 #define GL_UNSIGNED_INT_24_8 0x84FA #define GL_DEPTH24_STENCIL8 0x88F0 #define GL_TEXTURE_STENCIL_SIZE 0x88F1 #define GL_TEXTURE_RED_TYPE 0x8C10 #define GL_TEXTURE_GREEN_TYPE 0x8C11 #define GL_TEXTURE_BLUE_TYPE 0x8C12 #define GL_TEXTURE_ALPHA_TYPE 0x8C13 #define GL_TEXTURE_DEPTH_TYPE 0x8C16 #define GL_UNSIGNED_NORMALIZED 0x8C17 #define GL_FRAMEBUFFER_BINDING 0x8CA6 #define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 #define GL_RENDERBUFFER_BINDING 0x8CA7 #define GL_READ_FRAMEBUFFER 0x8CA8 #define GL_DRAW_FRAMEBUFFER 0x8CA9 #define GL_READ_FRAMEBUFFER_BINDING 0x8CAA #define GL_RENDERBUFFER_SAMPLES 0x8CAB #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 #define GL_FRAMEBUFFER_COMPLETE 0x8CD5 #define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 #define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 #define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB #define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC #define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD #define GL_MAX_COLOR_ATTACHMENTS 0x8CDF #define GL_COLOR_ATTACHMENT0 0x8CE0 #define GL_COLOR_ATTACHMENT1 0x8CE1 #define GL_COLOR_ATTACHMENT2 0x8CE2 #define GL_COLOR_ATTACHMENT3 0x8CE3 #define GL_COLOR_ATTACHMENT4 0x8CE4 #define GL_COLOR_ATTACHMENT5 0x8CE5 #define GL_COLOR_ATTACHMENT6 0x8CE6 #define GL_COLOR_ATTACHMENT7 0x8CE7 #define GL_COLOR_ATTACHMENT8 0x8CE8 #define GL_COLOR_ATTACHMENT9 0x8CE9 #define GL_COLOR_ATTACHMENT10 0x8CEA #define GL_COLOR_ATTACHMENT11 0x8CEB #define GL_COLOR_ATTACHMENT12 0x8CEC #define GL_COLOR_ATTACHMENT13 0x8CED #define GL_COLOR_ATTACHMENT14 0x8CEE #define GL_COLOR_ATTACHMENT15 0x8CEF #define GL_COLOR_ATTACHMENT16 0x8CF0 #define GL_COLOR_ATTACHMENT17 0x8CF1 #define GL_COLOR_ATTACHMENT18 0x8CF2 #define GL_COLOR_ATTACHMENT19 0x8CF3 #define GL_COLOR_ATTACHMENT20 0x8CF4 #define GL_COLOR_ATTACHMENT21 0x8CF5 #define GL_COLOR_ATTACHMENT22 0x8CF6 #define GL_COLOR_ATTACHMENT23 0x8CF7 #define GL_COLOR_ATTACHMENT24 0x8CF8 #define GL_COLOR_ATTACHMENT25 0x8CF9 #define GL_COLOR_ATTACHMENT26 0x8CFA #define GL_COLOR_ATTACHMENT27 0x8CFB #define GL_COLOR_ATTACHMENT28 0x8CFC #define GL_COLOR_ATTACHMENT29 0x8CFD #define GL_COLOR_ATTACHMENT30 0x8CFE #define GL_COLOR_ATTACHMENT31 0x8CFF #define GL_DEPTH_ATTACHMENT 0x8D00 #define GL_STENCIL_ATTACHMENT 0x8D20 #define GL_FRAMEBUFFER 0x8D40 #define GL_RENDERBUFFER 0x8D41 #define GL_RENDERBUFFER_WIDTH 0x8D42 #define GL_RENDERBUFFER_HEIGHT 0x8D43 #define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 #define GL_STENCIL_INDEX1 0x8D46 #define GL_STENCIL_INDEX4 0x8D47 #define GL_STENCIL_INDEX8 0x8D48 #define GL_STENCIL_INDEX16 0x8D49 #define GL_RENDERBUFFER_RED_SIZE 0x8D50 #define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 #define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 #define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 #define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 #define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 #define GL_MAX_SAMPLES 0x8D57 #define GL_INDEX 0x8222 #define GL_TEXTURE_LUMINANCE_TYPE 0x8C14 #define GL_TEXTURE_INTENSITY_TYPE 0x8C15 #define GL_FRAMEBUFFER_SRGB 0x8DB9 #define GL_HALF_FLOAT 0x140B #define GL_MAP_READ_BIT 0x0001 #define GL_MAP_WRITE_BIT 0x0002 #define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 #define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 #define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 #define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 #define GL_COMPRESSED_RED_RGTC1 0x8DBB #define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC #define GL_COMPRESSED_RG_RGTC2 0x8DBD #define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE #define GL_RG 0x8227 #define GL_RG_INTEGER 0x8228 #define GL_R8 0x8229 #define GL_R16 0x822A #define GL_RG8 0x822B #define GL_RG16 0x822C #define GL_R16F 0x822D #define GL_R32F 0x822E #define GL_RG16F 0x822F #define GL_RG32F 0x8230 #define GL_R8I 0x8231 #define GL_R8UI 0x8232 #define GL_R16I 0x8233 #define GL_R16UI 0x8234 #define GL_R32I 0x8235 #define GL_R32UI 0x8236 #define GL_RG8I 0x8237 #define GL_RG8UI 0x8238 #define GL_RG16I 0x8239 #define GL_RG16UI 0x823A #define GL_RG32I 0x823B #define GL_RG32UI 0x823C #define GL_VERTEX_ARRAY_BINDING 0x85B5 #define GL_CLAMP_VERTEX_COLOR 0x891A #define GL_CLAMP_FRAGMENT_COLOR 0x891B #define GL_ALPHA_INTEGER 0x8D97 #define GL_SAMPLER_2D_RECT 0x8B63 #define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 #define GL_SAMPLER_BUFFER 0x8DC2 #define GL_INT_SAMPLER_2D_RECT 0x8DCD #define GL_INT_SAMPLER_BUFFER 0x8DD0 #define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 #define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 #define GL_TEXTURE_BUFFER 0x8C2A #define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B #define GL_TEXTURE_BINDING_BUFFER 0x8C2C #define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D #define GL_TEXTURE_RECTANGLE 0x84F5 #define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 #define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 #define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 #define GL_R8_SNORM 0x8F94 #define GL_RG8_SNORM 0x8F95 #define GL_RGB8_SNORM 0x8F96 #define GL_RGBA8_SNORM 0x8F97 #define GL_R16_SNORM 0x8F98 #define GL_RG16_SNORM 0x8F99 #define GL_RGB16_SNORM 0x8F9A #define GL_RGBA16_SNORM 0x8F9B #define GL_SIGNED_NORMALIZED 0x8F9C #define GL_PRIMITIVE_RESTART 0x8F9D #define GL_PRIMITIVE_RESTART_INDEX 0x8F9E #define GL_COPY_READ_BUFFER 0x8F36 #define GL_COPY_WRITE_BUFFER 0x8F37 #define GL_UNIFORM_BUFFER 0x8A11 #define GL_UNIFORM_BUFFER_BINDING 0x8A28 #define GL_UNIFORM_BUFFER_START 0x8A29 #define GL_UNIFORM_BUFFER_SIZE 0x8A2A #define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B #define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C #define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D #define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E #define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F #define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 #define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 #define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 #define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 #define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 #define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 #define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 #define GL_UNIFORM_TYPE 0x8A37 #define GL_UNIFORM_SIZE 0x8A38 #define GL_UNIFORM_NAME_LENGTH 0x8A39 #define GL_UNIFORM_BLOCK_INDEX 0x8A3A #define GL_UNIFORM_OFFSET 0x8A3B #define GL_UNIFORM_ARRAY_STRIDE 0x8A3C #define GL_UNIFORM_MATRIX_STRIDE 0x8A3D #define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E #define GL_UNIFORM_BLOCK_BINDING 0x8A3F #define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 #define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 #define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 #define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 #define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 #define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 #define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 #define GL_INVALID_INDEX 0xFFFFFFFF #define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 #define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 #define GL_LINES_ADJACENCY 0x000A #define GL_LINE_STRIP_ADJACENCY 0x000B #define GL_TRIANGLES_ADJACENCY 0x000C #define GL_TRIANGLE_STRIP_ADJACENCY 0x000D #define GL_PROGRAM_POINT_SIZE 0x8642 #define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 #define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 #define GL_GEOMETRY_SHADER 0x8DD9 #define GL_GEOMETRY_VERTICES_OUT 0x8916 #define GL_GEOMETRY_INPUT_TYPE 0x8917 #define GL_GEOMETRY_OUTPUT_TYPE 0x8918 #define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF #define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 #define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 #define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 #define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 #define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 #define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 #define GL_CONTEXT_PROFILE_MASK 0x9126 #define GL_DEPTH_CLAMP 0x864F #define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C #define GL_FIRST_VERTEX_CONVENTION 0x8E4D #define GL_LAST_VERTEX_CONVENTION 0x8E4E #define GL_PROVOKING_VERTEX 0x8E4F #define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F #define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 #define GL_OBJECT_TYPE 0x9112 #define GL_SYNC_CONDITION 0x9113 #define GL_SYNC_STATUS 0x9114 #define GL_SYNC_FLAGS 0x9115 #define GL_SYNC_FENCE 0x9116 #define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 #define GL_UNSIGNALED 0x9118 #define GL_SIGNALED 0x9119 #define GL_ALREADY_SIGNALED 0x911A #define GL_TIMEOUT_EXPIRED 0x911B #define GL_CONDITION_SATISFIED 0x911C #define GL_WAIT_FAILED 0x911D #define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFF #define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 #define GL_SAMPLE_POSITION 0x8E50 #define GL_SAMPLE_MASK 0x8E51 #define GL_SAMPLE_MASK_VALUE 0x8E52 #define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 #define GL_TEXTURE_2D_MULTISAMPLE 0x9100 #define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 #define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 #define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 #define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 #define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 #define GL_TEXTURE_SAMPLES 0x9106 #define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 #define GL_SAMPLER_2D_MULTISAMPLE 0x9108 #define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 #define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A #define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B #define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C #define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D #define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E #define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F #define GL_MAX_INTEGER_SAMPLES 0x9110 #define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE #define GL_SRC1_COLOR 0x88F9 #define GL_ONE_MINUS_SRC1_COLOR 0x88FA #define GL_ONE_MINUS_SRC1_ALPHA 0x88FB #define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC #define GL_ANY_SAMPLES_PASSED 0x8C2F #define GL_SAMPLER_BINDING 0x8919 #define GL_RGB10_A2UI 0x906F #define GL_TEXTURE_SWIZZLE_R 0x8E42 #define GL_TEXTURE_SWIZZLE_G 0x8E43 #define GL_TEXTURE_SWIZZLE_B 0x8E44 #define GL_TEXTURE_SWIZZLE_A 0x8E45 #define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 #define GL_TIME_ELAPSED 0x88BF #define GL_TIMESTAMP 0x8E28 #define GL_INT_2_10_10_10_REV 0x8D9F #ifndef GL_VERSION_1_0 #define GL_VERSION_1_0 1 GLAPI int GLAD_GL_VERSION_1_0; typedef void (APIENTRYP PFNGLCULLFACEPROC)(GLenum mode); GLAPI PFNGLCULLFACEPROC glad_glCullFace; #define glCullFace glad_glCullFace typedef void (APIENTRYP PFNGLFRONTFACEPROC)(GLenum mode); GLAPI PFNGLFRONTFACEPROC glad_glFrontFace; #define glFrontFace glad_glFrontFace typedef void (APIENTRYP PFNGLHINTPROC)(GLenum target, GLenum mode); GLAPI PFNGLHINTPROC glad_glHint; #define glHint glad_glHint typedef void (APIENTRYP PFNGLLINEWIDTHPROC)(GLfloat width); GLAPI PFNGLLINEWIDTHPROC glad_glLineWidth; #define glLineWidth glad_glLineWidth typedef void (APIENTRYP PFNGLPOINTSIZEPROC)(GLfloat size); GLAPI PFNGLPOINTSIZEPROC glad_glPointSize; #define glPointSize glad_glPointSize typedef void (APIENTRYP PFNGLPOLYGONMODEPROC)(GLenum face, GLenum mode); GLAPI PFNGLPOLYGONMODEPROC glad_glPolygonMode; #define glPolygonMode glad_glPolygonMode typedef void (APIENTRYP PFNGLSCISSORPROC)(GLint x, GLint y, GLsizei width, GLsizei height); GLAPI PFNGLSCISSORPROC glad_glScissor; #define glScissor glad_glScissor typedef void (APIENTRYP PFNGLTEXPARAMETERFPROC)(GLenum target, GLenum pname, GLfloat param); GLAPI PFNGLTEXPARAMETERFPROC glad_glTexParameterf; #define glTexParameterf glad_glTexParameterf typedef void (APIENTRYP PFNGLTEXPARAMETERFVPROC)(GLenum target, GLenum pname, const GLfloat *params); GLAPI PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv; #define glTexParameterfv glad_glTexParameterfv typedef void (APIENTRYP PFNGLTEXPARAMETERIPROC)(GLenum target, GLenum pname, GLint param); GLAPI PFNGLTEXPARAMETERIPROC glad_glTexParameteri; #define glTexParameteri glad_glTexParameteri typedef void (APIENTRYP PFNGLTEXPARAMETERIVPROC)(GLenum target, GLenum pname, const GLint *params); GLAPI PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv; #define glTexParameteriv glad_glTexParameteriv typedef void (APIENTRYP PFNGLTEXIMAGE1DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI PFNGLTEXIMAGE1DPROC glad_glTexImage1D; #define glTexImage1D glad_glTexImage1D typedef void (APIENTRYP PFNGLTEXIMAGE2DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI PFNGLTEXIMAGE2DPROC glad_glTexImage2D; #define glTexImage2D glad_glTexImage2D typedef void (APIENTRYP PFNGLDRAWBUFFERPROC)(GLenum buf); GLAPI PFNGLDRAWBUFFERPROC glad_glDrawBuffer; #define glDrawBuffer glad_glDrawBuffer typedef void (APIENTRYP PFNGLCLEARPROC)(GLbitfield mask); GLAPI PFNGLCLEARPROC glad_glClear; #define glClear glad_glClear typedef void (APIENTRYP PFNGLCLEARCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); GLAPI PFNGLCLEARCOLORPROC glad_glClearColor; #define glClearColor glad_glClearColor typedef void (APIENTRYP PFNGLCLEARSTENCILPROC)(GLint s); GLAPI PFNGLCLEARSTENCILPROC glad_glClearStencil; #define glClearStencil glad_glClearStencil typedef void (APIENTRYP PFNGLCLEARDEPTHPROC)(GLdouble depth); GLAPI PFNGLCLEARDEPTHPROC glad_glClearDepth; #define glClearDepth glad_glClearDepth typedef void (APIENTRYP PFNGLSTENCILMASKPROC)(GLuint mask); GLAPI PFNGLSTENCILMASKPROC glad_glStencilMask; #define glStencilMask glad_glStencilMask typedef void (APIENTRYP PFNGLCOLORMASKPROC)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); GLAPI PFNGLCOLORMASKPROC glad_glColorMask; #define glColorMask glad_glColorMask typedef void (APIENTRYP PFNGLDEPTHMASKPROC)(GLboolean flag); GLAPI PFNGLDEPTHMASKPROC glad_glDepthMask; #define glDepthMask glad_glDepthMask typedef void (APIENTRYP PFNGLDISABLEPROC)(GLenum cap); GLAPI PFNGLDISABLEPROC glad_glDisable; #define glDisable glad_glDisable typedef void (APIENTRYP PFNGLENABLEPROC)(GLenum cap); GLAPI PFNGLENABLEPROC glad_glEnable; #define glEnable glad_glEnable typedef void (APIENTRYP PFNGLFINISHPROC)(void); GLAPI PFNGLFINISHPROC glad_glFinish; #define glFinish glad_glFinish typedef void (APIENTRYP PFNGLFLUSHPROC)(void); GLAPI PFNGLFLUSHPROC glad_glFlush; #define glFlush glad_glFlush typedef void (APIENTRYP PFNGLBLENDFUNCPROC)(GLenum sfactor, GLenum dfactor); GLAPI PFNGLBLENDFUNCPROC glad_glBlendFunc; #define glBlendFunc glad_glBlendFunc typedef void (APIENTRYP PFNGLLOGICOPPROC)(GLenum opcode); GLAPI PFNGLLOGICOPPROC glad_glLogicOp; #define glLogicOp glad_glLogicOp typedef void (APIENTRYP PFNGLSTENCILFUNCPROC)(GLenum func, GLint ref, GLuint mask); GLAPI PFNGLSTENCILFUNCPROC glad_glStencilFunc; #define glStencilFunc glad_glStencilFunc typedef void (APIENTRYP PFNGLSTENCILOPPROC)(GLenum fail, GLenum zfail, GLenum zpass); GLAPI PFNGLSTENCILOPPROC glad_glStencilOp; #define glStencilOp glad_glStencilOp typedef void (APIENTRYP PFNGLDEPTHFUNCPROC)(GLenum func); GLAPI PFNGLDEPTHFUNCPROC glad_glDepthFunc; #define glDepthFunc glad_glDepthFunc typedef void (APIENTRYP PFNGLPIXELSTOREFPROC)(GLenum pname, GLfloat param); GLAPI PFNGLPIXELSTOREFPROC glad_glPixelStoref; #define glPixelStoref glad_glPixelStoref typedef void (APIENTRYP PFNGLPIXELSTOREIPROC)(GLenum pname, GLint param); GLAPI PFNGLPIXELSTOREIPROC glad_glPixelStorei; #define glPixelStorei glad_glPixelStorei typedef void (APIENTRYP PFNGLREADBUFFERPROC)(GLenum src); GLAPI PFNGLREADBUFFERPROC glad_glReadBuffer; #define glReadBuffer glad_glReadBuffer typedef void (APIENTRYP PFNGLREADPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels); GLAPI PFNGLREADPIXELSPROC glad_glReadPixels; #define glReadPixels glad_glReadPixels typedef void (APIENTRYP PFNGLGETBOOLEANVPROC)(GLenum pname, GLboolean *data); GLAPI PFNGLGETBOOLEANVPROC glad_glGetBooleanv; #define glGetBooleanv glad_glGetBooleanv typedef void (APIENTRYP PFNGLGETDOUBLEVPROC)(GLenum pname, GLdouble *data); GLAPI PFNGLGETDOUBLEVPROC glad_glGetDoublev; #define glGetDoublev glad_glGetDoublev typedef GLenum (APIENTRYP PFNGLGETERRORPROC)(void); GLAPI PFNGLGETERRORPROC glad_glGetError; #define glGetError glad_glGetError typedef void (APIENTRYP PFNGLGETFLOATVPROC)(GLenum pname, GLfloat *data); GLAPI PFNGLGETFLOATVPROC glad_glGetFloatv; #define glGetFloatv glad_glGetFloatv typedef void (APIENTRYP PFNGLGETINTEGERVPROC)(GLenum pname, GLint *data); GLAPI PFNGLGETINTEGERVPROC glad_glGetIntegerv; #define glGetIntegerv glad_glGetIntegerv typedef const GLubyte * (APIENTRYP PFNGLGETSTRINGPROC)(GLenum name); GLAPI PFNGLGETSTRINGPROC glad_glGetString; #define glGetString glad_glGetString typedef void (APIENTRYP PFNGLGETTEXIMAGEPROC)(GLenum target, GLint level, GLenum format, GLenum type, void *pixels); GLAPI PFNGLGETTEXIMAGEPROC glad_glGetTexImage; #define glGetTexImage glad_glGetTexImage typedef void (APIENTRYP PFNGLGETTEXPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat *params); GLAPI PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv; #define glGetTexParameterfv glad_glGetTexParameterfv typedef void (APIENTRYP PFNGLGETTEXPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params); GLAPI PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv; #define glGetTexParameteriv glad_glGetTexParameteriv typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERFVPROC)(GLenum target, GLint level, GLenum pname, GLfloat *params); GLAPI PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv; #define glGetTexLevelParameterfv glad_glGetTexLevelParameterfv typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERIVPROC)(GLenum target, GLint level, GLenum pname, GLint *params); GLAPI PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv; #define glGetTexLevelParameteriv glad_glGetTexLevelParameteriv typedef GLboolean (APIENTRYP PFNGLISENABLEDPROC)(GLenum cap); GLAPI PFNGLISENABLEDPROC glad_glIsEnabled; #define glIsEnabled glad_glIsEnabled typedef void (APIENTRYP PFNGLDEPTHRANGEPROC)(GLdouble n, GLdouble f); GLAPI PFNGLDEPTHRANGEPROC glad_glDepthRange; #define glDepthRange glad_glDepthRange typedef void (APIENTRYP PFNGLVIEWPORTPROC)(GLint x, GLint y, GLsizei width, GLsizei height); GLAPI PFNGLVIEWPORTPROC glad_glViewport; #define glViewport glad_glViewport typedef void (APIENTRYP PFNGLNEWLISTPROC)(GLuint list, GLenum mode); GLAPI PFNGLNEWLISTPROC glad_glNewList; #define glNewList glad_glNewList typedef void (APIENTRYP PFNGLENDLISTPROC)(void); GLAPI PFNGLENDLISTPROC glad_glEndList; #define glEndList glad_glEndList typedef void (APIENTRYP PFNGLCALLLISTPROC)(GLuint list); GLAPI PFNGLCALLLISTPROC glad_glCallList; #define glCallList glad_glCallList typedef void (APIENTRYP PFNGLCALLLISTSPROC)(GLsizei n, GLenum type, const void *lists); GLAPI PFNGLCALLLISTSPROC glad_glCallLists; #define glCallLists glad_glCallLists typedef void (APIENTRYP PFNGLDELETELISTSPROC)(GLuint list, GLsizei range); GLAPI PFNGLDELETELISTSPROC glad_glDeleteLists; #define glDeleteLists glad_glDeleteLists typedef GLuint (APIENTRYP PFNGLGENLISTSPROC)(GLsizei range); GLAPI PFNGLGENLISTSPROC glad_glGenLists; #define glGenLists glad_glGenLists typedef void (APIENTRYP PFNGLLISTBASEPROC)(GLuint base); GLAPI PFNGLLISTBASEPROC glad_glListBase; #define glListBase glad_glListBase typedef void (APIENTRYP PFNGLBEGINPROC)(GLenum mode); GLAPI PFNGLBEGINPROC glad_glBegin; #define glBegin glad_glBegin typedef void (APIENTRYP PFNGLBITMAPPROC)(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap); GLAPI PFNGLBITMAPPROC glad_glBitmap; #define glBitmap glad_glBitmap typedef void (APIENTRYP PFNGLCOLOR3BPROC)(GLbyte red, GLbyte green, GLbyte blue); GLAPI PFNGLCOLOR3BPROC glad_glColor3b; #define glColor3b glad_glColor3b typedef void (APIENTRYP PFNGLCOLOR3BVPROC)(const GLbyte *v); GLAPI PFNGLCOLOR3BVPROC glad_glColor3bv; #define glColor3bv glad_glColor3bv typedef void (APIENTRYP PFNGLCOLOR3DPROC)(GLdouble red, GLdouble green, GLdouble blue); GLAPI PFNGLCOLOR3DPROC glad_glColor3d; #define glColor3d glad_glColor3d typedef void (APIENTRYP PFNGLCOLOR3DVPROC)(const GLdouble *v); GLAPI PFNGLCOLOR3DVPROC glad_glColor3dv; #define glColor3dv glad_glColor3dv typedef void (APIENTRYP PFNGLCOLOR3FPROC)(GLfloat red, GLfloat green, GLfloat blue); GLAPI PFNGLCOLOR3FPROC glad_glColor3f; #define glColor3f glad_glColor3f typedef void (APIENTRYP PFNGLCOLOR3FVPROC)(const GLfloat *v); GLAPI PFNGLCOLOR3FVPROC glad_glColor3fv; #define glColor3fv glad_glColor3fv typedef void (APIENTRYP PFNGLCOLOR3IPROC)(GLint red, GLint green, GLint blue); GLAPI PFNGLCOLOR3IPROC glad_glColor3i; #define glColor3i glad_glColor3i typedef void (APIENTRYP PFNGLCOLOR3IVPROC)(const GLint *v); GLAPI PFNGLCOLOR3IVPROC glad_glColor3iv; #define glColor3iv glad_glColor3iv typedef void (APIENTRYP PFNGLCOLOR3SPROC)(GLshort red, GLshort green, GLshort blue); GLAPI PFNGLCOLOR3SPROC glad_glColor3s; #define glColor3s glad_glColor3s typedef void (APIENTRYP PFNGLCOLOR3SVPROC)(const GLshort *v); GLAPI PFNGLCOLOR3SVPROC glad_glColor3sv; #define glColor3sv glad_glColor3sv typedef void (APIENTRYP PFNGLCOLOR3UBPROC)(GLubyte red, GLubyte green, GLubyte blue); GLAPI PFNGLCOLOR3UBPROC glad_glColor3ub; #define glColor3ub glad_glColor3ub typedef void (APIENTRYP PFNGLCOLOR3UBVPROC)(const GLubyte *v); GLAPI PFNGLCOLOR3UBVPROC glad_glColor3ubv; #define glColor3ubv glad_glColor3ubv typedef void (APIENTRYP PFNGLCOLOR3UIPROC)(GLuint red, GLuint green, GLuint blue); GLAPI PFNGLCOLOR3UIPROC glad_glColor3ui; #define glColor3ui glad_glColor3ui typedef void (APIENTRYP PFNGLCOLOR3UIVPROC)(const GLuint *v); GLAPI PFNGLCOLOR3UIVPROC glad_glColor3uiv; #define glColor3uiv glad_glColor3uiv typedef void (APIENTRYP PFNGLCOLOR3USPROC)(GLushort red, GLushort green, GLushort blue); GLAPI PFNGLCOLOR3USPROC glad_glColor3us; #define glColor3us glad_glColor3us typedef void (APIENTRYP PFNGLCOLOR3USVPROC)(const GLushort *v); GLAPI PFNGLCOLOR3USVPROC glad_glColor3usv; #define glColor3usv glad_glColor3usv typedef void (APIENTRYP PFNGLCOLOR4BPROC)(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); GLAPI PFNGLCOLOR4BPROC glad_glColor4b; #define glColor4b glad_glColor4b typedef void (APIENTRYP PFNGLCOLOR4BVPROC)(const GLbyte *v); GLAPI PFNGLCOLOR4BVPROC glad_glColor4bv; #define glColor4bv glad_glColor4bv typedef void (APIENTRYP PFNGLCOLOR4DPROC)(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); GLAPI PFNGLCOLOR4DPROC glad_glColor4d; #define glColor4d glad_glColor4d typedef void (APIENTRYP PFNGLCOLOR4DVPROC)(const GLdouble *v); GLAPI PFNGLCOLOR4DVPROC glad_glColor4dv; #define glColor4dv glad_glColor4dv typedef void (APIENTRYP PFNGLCOLOR4FPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); GLAPI PFNGLCOLOR4FPROC glad_glColor4f; #define glColor4f glad_glColor4f typedef void (APIENTRYP PFNGLCOLOR4FVPROC)(const GLfloat *v); GLAPI PFNGLCOLOR4FVPROC glad_glColor4fv; #define glColor4fv glad_glColor4fv typedef void (APIENTRYP PFNGLCOLOR4IPROC)(GLint red, GLint green, GLint blue, GLint alpha); GLAPI PFNGLCOLOR4IPROC glad_glColor4i; #define glColor4i glad_glColor4i typedef void (APIENTRYP PFNGLCOLOR4IVPROC)(const GLint *v); GLAPI PFNGLCOLOR4IVPROC glad_glColor4iv; #define glColor4iv glad_glColor4iv typedef void (APIENTRYP PFNGLCOLOR4SPROC)(GLshort red, GLshort green, GLshort blue, GLshort alpha); GLAPI PFNGLCOLOR4SPROC glad_glColor4s; #define glColor4s glad_glColor4s typedef void (APIENTRYP PFNGLCOLOR4SVPROC)(const GLshort *v); GLAPI PFNGLCOLOR4SVPROC glad_glColor4sv; #define glColor4sv glad_glColor4sv typedef void (APIENTRYP PFNGLCOLOR4UBPROC)(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); GLAPI PFNGLCOLOR4UBPROC glad_glColor4ub; #define glColor4ub glad_glColor4ub typedef void (APIENTRYP PFNGLCOLOR4UBVPROC)(const GLubyte *v); GLAPI PFNGLCOLOR4UBVPROC glad_glColor4ubv; #define glColor4ubv glad_glColor4ubv typedef void (APIENTRYP PFNGLCOLOR4UIPROC)(GLuint red, GLuint green, GLuint blue, GLuint alpha); GLAPI PFNGLCOLOR4UIPROC glad_glColor4ui; #define glColor4ui glad_glColor4ui typedef void (APIENTRYP PFNGLCOLOR4UIVPROC)(const GLuint *v); GLAPI PFNGLCOLOR4UIVPROC glad_glColor4uiv; #define glColor4uiv glad_glColor4uiv typedef void (APIENTRYP PFNGLCOLOR4USPROC)(GLushort red, GLushort green, GLushort blue, GLushort alpha); GLAPI PFNGLCOLOR4USPROC glad_glColor4us; #define glColor4us glad_glColor4us typedef void (APIENTRYP PFNGLCOLOR4USVPROC)(const GLushort *v); GLAPI PFNGLCOLOR4USVPROC glad_glColor4usv; #define glColor4usv glad_glColor4usv typedef void (APIENTRYP PFNGLEDGEFLAGPROC)(GLboolean flag); GLAPI PFNGLEDGEFLAGPROC glad_glEdgeFlag; #define glEdgeFlag glad_glEdgeFlag typedef void (APIENTRYP PFNGLEDGEFLAGVPROC)(const GLboolean *flag); GLAPI PFNGLEDGEFLAGVPROC glad_glEdgeFlagv; #define glEdgeFlagv glad_glEdgeFlagv typedef void (APIENTRYP PFNGLENDPROC)(void); GLAPI PFNGLENDPROC glad_glEnd; #define glEnd glad_glEnd typedef void (APIENTRYP PFNGLINDEXDPROC)(GLdouble c); GLAPI PFNGLINDEXDPROC glad_glIndexd; #define glIndexd glad_glIndexd typedef void (APIENTRYP PFNGLINDEXDVPROC)(const GLdouble *c); GLAPI PFNGLINDEXDVPROC glad_glIndexdv; #define glIndexdv glad_glIndexdv typedef void (APIENTRYP PFNGLINDEXFPROC)(GLfloat c); GLAPI PFNGLINDEXFPROC glad_glIndexf; #define glIndexf glad_glIndexf typedef void (APIENTRYP PFNGLINDEXFVPROC)(const GLfloat *c); GLAPI PFNGLINDEXFVPROC glad_glIndexfv; #define glIndexfv glad_glIndexfv typedef void (APIENTRYP PFNGLINDEXIPROC)(GLint c); GLAPI PFNGLINDEXIPROC glad_glIndexi; #define glIndexi glad_glIndexi typedef void (APIENTRYP PFNGLINDEXIVPROC)(const GLint *c); GLAPI PFNGLINDEXIVPROC glad_glIndexiv; #define glIndexiv glad_glIndexiv typedef void (APIENTRYP PFNGLINDEXSPROC)(GLshort c); GLAPI PFNGLINDEXSPROC glad_glIndexs; #define glIndexs glad_glIndexs typedef void (APIENTRYP PFNGLINDEXSVPROC)(const GLshort *c); GLAPI PFNGLINDEXSVPROC glad_glIndexsv; #define glIndexsv glad_glIndexsv typedef void (APIENTRYP PFNGLNORMAL3BPROC)(GLbyte nx, GLbyte ny, GLbyte nz); GLAPI PFNGLNORMAL3BPROC glad_glNormal3b; #define glNormal3b glad_glNormal3b typedef void (APIENTRYP PFNGLNORMAL3BVPROC)(const GLbyte *v); GLAPI PFNGLNORMAL3BVPROC glad_glNormal3bv; #define glNormal3bv glad_glNormal3bv typedef void (APIENTRYP PFNGLNORMAL3DPROC)(GLdouble nx, GLdouble ny, GLdouble nz); GLAPI PFNGLNORMAL3DPROC glad_glNormal3d; #define glNormal3d glad_glNormal3d typedef void (APIENTRYP PFNGLNORMAL3DVPROC)(const GLdouble *v); GLAPI PFNGLNORMAL3DVPROC glad_glNormal3dv; #define glNormal3dv glad_glNormal3dv typedef void (APIENTRYP PFNGLNORMAL3FPROC)(GLfloat nx, GLfloat ny, GLfloat nz); GLAPI PFNGLNORMAL3FPROC glad_glNormal3f; #define glNormal3f glad_glNormal3f typedef void (APIENTRYP PFNGLNORMAL3FVPROC)(const GLfloat *v); GLAPI PFNGLNORMAL3FVPROC glad_glNormal3fv; #define glNormal3fv glad_glNormal3fv typedef void (APIENTRYP PFNGLNORMAL3IPROC)(GLint nx, GLint ny, GLint nz); GLAPI PFNGLNORMAL3IPROC glad_glNormal3i; #define glNormal3i glad_glNormal3i typedef void (APIENTRYP PFNGLNORMAL3IVPROC)(const GLint *v); GLAPI PFNGLNORMAL3IVPROC glad_glNormal3iv; #define glNormal3iv glad_glNormal3iv typedef void (APIENTRYP PFNGLNORMAL3SPROC)(GLshort nx, GLshort ny, GLshort nz); GLAPI PFNGLNORMAL3SPROC glad_glNormal3s; #define glNormal3s glad_glNormal3s typedef void (APIENTRYP PFNGLNORMAL3SVPROC)(const GLshort *v); GLAPI PFNGLNORMAL3SVPROC glad_glNormal3sv; #define glNormal3sv glad_glNormal3sv typedef void (APIENTRYP PFNGLRASTERPOS2DPROC)(GLdouble x, GLdouble y); GLAPI PFNGLRASTERPOS2DPROC glad_glRasterPos2d; #define glRasterPos2d glad_glRasterPos2d typedef void (APIENTRYP PFNGLRASTERPOS2DVPROC)(const GLdouble *v); GLAPI PFNGLRASTERPOS2DVPROC glad_glRasterPos2dv; #define glRasterPos2dv glad_glRasterPos2dv typedef void (APIENTRYP PFNGLRASTERPOS2FPROC)(GLfloat x, GLfloat y); GLAPI PFNGLRASTERPOS2FPROC glad_glRasterPos2f; #define glRasterPos2f glad_glRasterPos2f typedef void (APIENTRYP PFNGLRASTERPOS2FVPROC)(const GLfloat *v); GLAPI PFNGLRASTERPOS2FVPROC glad_glRasterPos2fv; #define glRasterPos2fv glad_glRasterPos2fv typedef void (APIENTRYP PFNGLRASTERPOS2IPROC)(GLint x, GLint y); GLAPI PFNGLRASTERPOS2IPROC glad_glRasterPos2i; #define glRasterPos2i glad_glRasterPos2i typedef void (APIENTRYP PFNGLRASTERPOS2IVPROC)(const GLint *v); GLAPI PFNGLRASTERPOS2IVPROC glad_glRasterPos2iv; #define glRasterPos2iv glad_glRasterPos2iv typedef void (APIENTRYP PFNGLRASTERPOS2SPROC)(GLshort x, GLshort y); GLAPI PFNGLRASTERPOS2SPROC glad_glRasterPos2s; #define glRasterPos2s glad_glRasterPos2s typedef void (APIENTRYP PFNGLRASTERPOS2SVPROC)(const GLshort *v); GLAPI PFNGLRASTERPOS2SVPROC glad_glRasterPos2sv; #define glRasterPos2sv glad_glRasterPos2sv typedef void (APIENTRYP PFNGLRASTERPOS3DPROC)(GLdouble x, GLdouble y, GLdouble z); GLAPI PFNGLRASTERPOS3DPROC glad_glRasterPos3d; #define glRasterPos3d glad_glRasterPos3d typedef void (APIENTRYP PFNGLRASTERPOS3DVPROC)(const GLdouble *v); GLAPI PFNGLRASTERPOS3DVPROC glad_glRasterPos3dv; #define glRasterPos3dv glad_glRasterPos3dv typedef void (APIENTRYP PFNGLRASTERPOS3FPROC)(GLfloat x, GLfloat y, GLfloat z); GLAPI PFNGLRASTERPOS3FPROC glad_glRasterPos3f; #define glRasterPos3f glad_glRasterPos3f typedef void (APIENTRYP PFNGLRASTERPOS3FVPROC)(const GLfloat *v); GLAPI PFNGLRASTERPOS3FVPROC glad_glRasterPos3fv; #define glRasterPos3fv glad_glRasterPos3fv typedef void (APIENTRYP PFNGLRASTERPOS3IPROC)(GLint x, GLint y, GLint z); GLAPI PFNGLRASTERPOS3IPROC glad_glRasterPos3i; #define glRasterPos3i glad_glRasterPos3i typedef void (APIENTRYP PFNGLRASTERPOS3IVPROC)(const GLint *v); GLAPI PFNGLRASTERPOS3IVPROC glad_glRasterPos3iv; #define glRasterPos3iv glad_glRasterPos3iv typedef void (APIENTRYP PFNGLRASTERPOS3SPROC)(GLshort x, GLshort y, GLshort z); GLAPI PFNGLRASTERPOS3SPROC glad_glRasterPos3s; #define glRasterPos3s glad_glRasterPos3s typedef void (APIENTRYP PFNGLRASTERPOS3SVPROC)(const GLshort *v); GLAPI PFNGLRASTERPOS3SVPROC glad_glRasterPos3sv; #define glRasterPos3sv glad_glRasterPos3sv typedef void (APIENTRYP PFNGLRASTERPOS4DPROC)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI PFNGLRASTERPOS4DPROC glad_glRasterPos4d; #define glRasterPos4d glad_glRasterPos4d typedef void (APIENTRYP PFNGLRASTERPOS4DVPROC)(const GLdouble *v); GLAPI PFNGLRASTERPOS4DVPROC glad_glRasterPos4dv; #define glRasterPos4dv glad_glRasterPos4dv typedef void (APIENTRYP PFNGLRASTERPOS4FPROC)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI PFNGLRASTERPOS4FPROC glad_glRasterPos4f; #define glRasterPos4f glad_glRasterPos4f typedef void (APIENTRYP PFNGLRASTERPOS4FVPROC)(const GLfloat *v); GLAPI PFNGLRASTERPOS4FVPROC glad_glRasterPos4fv; #define glRasterPos4fv glad_glRasterPos4fv typedef void (APIENTRYP PFNGLRASTERPOS4IPROC)(GLint x, GLint y, GLint z, GLint w); GLAPI PFNGLRASTERPOS4IPROC glad_glRasterPos4i; #define glRasterPos4i glad_glRasterPos4i typedef void (APIENTRYP PFNGLRASTERPOS4IVPROC)(const GLint *v); GLAPI PFNGLRASTERPOS4IVPROC glad_glRasterPos4iv; #define glRasterPos4iv glad_glRasterPos4iv typedef void (APIENTRYP PFNGLRASTERPOS4SPROC)(GLshort x, GLshort y, GLshort z, GLshort w); GLAPI PFNGLRASTERPOS4SPROC glad_glRasterPos4s; #define glRasterPos4s glad_glRasterPos4s typedef void (APIENTRYP PFNGLRASTERPOS4SVPROC)(const GLshort *v); GLAPI PFNGLRASTERPOS4SVPROC glad_glRasterPos4sv; #define glRasterPos4sv glad_glRasterPos4sv typedef void (APIENTRYP PFNGLRECTDPROC)(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); GLAPI PFNGLRECTDPROC glad_glRectd; #define glRectd glad_glRectd typedef void (APIENTRYP PFNGLRECTDVPROC)(const GLdouble *v1, const GLdouble *v2); GLAPI PFNGLRECTDVPROC glad_glRectdv; #define glRectdv glad_glRectdv typedef void (APIENTRYP PFNGLRECTFPROC)(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); GLAPI PFNGLRECTFPROC glad_glRectf; #define glRectf glad_glRectf typedef void (APIENTRYP PFNGLRECTFVPROC)(const GLfloat *v1, const GLfloat *v2); GLAPI PFNGLRECTFVPROC glad_glRectfv; #define glRectfv glad_glRectfv typedef void (APIENTRYP PFNGLRECTIPROC)(GLint x1, GLint y1, GLint x2, GLint y2); GLAPI PFNGLRECTIPROC glad_glRecti; #define glRecti glad_glRecti typedef void (APIENTRYP PFNGLRECTIVPROC)(const GLint *v1, const GLint *v2); GLAPI PFNGLRECTIVPROC glad_glRectiv; #define glRectiv glad_glRectiv typedef void (APIENTRYP PFNGLRECTSPROC)(GLshort x1, GLshort y1, GLshort x2, GLshort y2); GLAPI PFNGLRECTSPROC glad_glRects; #define glRects glad_glRects typedef void (APIENTRYP PFNGLRECTSVPROC)(const GLshort *v1, const GLshort *v2); GLAPI PFNGLRECTSVPROC glad_glRectsv; #define glRectsv glad_glRectsv typedef void (APIENTRYP PFNGLTEXCOORD1DPROC)(GLdouble s); GLAPI PFNGLTEXCOORD1DPROC glad_glTexCoord1d; #define glTexCoord1d glad_glTexCoord1d typedef void (APIENTRYP PFNGLTEXCOORD1DVPROC)(const GLdouble *v); GLAPI PFNGLTEXCOORD1DVPROC glad_glTexCoord1dv; #define glTexCoord1dv glad_glTexCoord1dv typedef void (APIENTRYP PFNGLTEXCOORD1FPROC)(GLfloat s); GLAPI PFNGLTEXCOORD1FPROC glad_glTexCoord1f; #define glTexCoord1f glad_glTexCoord1f typedef void (APIENTRYP PFNGLTEXCOORD1FVPROC)(const GLfloat *v); GLAPI PFNGLTEXCOORD1FVPROC glad_glTexCoord1fv; #define glTexCoord1fv glad_glTexCoord1fv typedef void (APIENTRYP PFNGLTEXCOORD1IPROC)(GLint s); GLAPI PFNGLTEXCOORD1IPROC glad_glTexCoord1i; #define glTexCoord1i glad_glTexCoord1i typedef void (APIENTRYP PFNGLTEXCOORD1IVPROC)(const GLint *v); GLAPI PFNGLTEXCOORD1IVPROC glad_glTexCoord1iv; #define glTexCoord1iv glad_glTexCoord1iv typedef void (APIENTRYP PFNGLTEXCOORD1SPROC)(GLshort s); GLAPI PFNGLTEXCOORD1SPROC glad_glTexCoord1s; #define glTexCoord1s glad_glTexCoord1s typedef void (APIENTRYP PFNGLTEXCOORD1SVPROC)(const GLshort *v); GLAPI PFNGLTEXCOORD1SVPROC glad_glTexCoord1sv; #define glTexCoord1sv glad_glTexCoord1sv typedef void (APIENTRYP PFNGLTEXCOORD2DPROC)(GLdouble s, GLdouble t); GLAPI PFNGLTEXCOORD2DPROC glad_glTexCoord2d; #define glTexCoord2d glad_glTexCoord2d typedef void (APIENTRYP PFNGLTEXCOORD2DVPROC)(const GLdouble *v); GLAPI PFNGLTEXCOORD2DVPROC glad_glTexCoord2dv; #define glTexCoord2dv glad_glTexCoord2dv typedef void (APIENTRYP PFNGLTEXCOORD2FPROC)(GLfloat s, GLfloat t); GLAPI PFNGLTEXCOORD2FPROC glad_glTexCoord2f; #define glTexCoord2f glad_glTexCoord2f typedef void (APIENTRYP PFNGLTEXCOORD2FVPROC)(const GLfloat *v); GLAPI PFNGLTEXCOORD2FVPROC glad_glTexCoord2fv; #define glTexCoord2fv glad_glTexCoord2fv typedef void (APIENTRYP PFNGLTEXCOORD2IPROC)(GLint s, GLint t); GLAPI PFNGLTEXCOORD2IPROC glad_glTexCoord2i; #define glTexCoord2i glad_glTexCoord2i typedef void (APIENTRYP PFNGLTEXCOORD2IVPROC)(const GLint *v); GLAPI PFNGLTEXCOORD2IVPROC glad_glTexCoord2iv; #define glTexCoord2iv glad_glTexCoord2iv typedef void (APIENTRYP PFNGLTEXCOORD2SPROC)(GLshort s, GLshort t); GLAPI PFNGLTEXCOORD2SPROC glad_glTexCoord2s; #define glTexCoord2s glad_glTexCoord2s typedef void (APIENTRYP PFNGLTEXCOORD2SVPROC)(const GLshort *v); GLAPI PFNGLTEXCOORD2SVPROC glad_glTexCoord2sv; #define glTexCoord2sv glad_glTexCoord2sv typedef void (APIENTRYP PFNGLTEXCOORD3DPROC)(GLdouble s, GLdouble t, GLdouble r); GLAPI PFNGLTEXCOORD3DPROC glad_glTexCoord3d; #define glTexCoord3d glad_glTexCoord3d typedef void (APIENTRYP PFNGLTEXCOORD3DVPROC)(const GLdouble *v); GLAPI PFNGLTEXCOORD3DVPROC glad_glTexCoord3dv; #define glTexCoord3dv glad_glTexCoord3dv typedef void (APIENTRYP PFNGLTEXCOORD3FPROC)(GLfloat s, GLfloat t, GLfloat r); GLAPI PFNGLTEXCOORD3FPROC glad_glTexCoord3f; #define glTexCoord3f glad_glTexCoord3f typedef void (APIENTRYP PFNGLTEXCOORD3FVPROC)(const GLfloat *v); GLAPI PFNGLTEXCOORD3FVPROC glad_glTexCoord3fv; #define glTexCoord3fv glad_glTexCoord3fv typedef void (APIENTRYP PFNGLTEXCOORD3IPROC)(GLint s, GLint t, GLint r); GLAPI PFNGLTEXCOORD3IPROC glad_glTexCoord3i; #define glTexCoord3i glad_glTexCoord3i typedef void (APIENTRYP PFNGLTEXCOORD3IVPROC)(const GLint *v); GLAPI PFNGLTEXCOORD3IVPROC glad_glTexCoord3iv; #define glTexCoord3iv glad_glTexCoord3iv typedef void (APIENTRYP PFNGLTEXCOORD3SPROC)(GLshort s, GLshort t, GLshort r); GLAPI PFNGLTEXCOORD3SPROC glad_glTexCoord3s; #define glTexCoord3s glad_glTexCoord3s typedef void (APIENTRYP PFNGLTEXCOORD3SVPROC)(const GLshort *v); GLAPI PFNGLTEXCOORD3SVPROC glad_glTexCoord3sv; #define glTexCoord3sv glad_glTexCoord3sv typedef void (APIENTRYP PFNGLTEXCOORD4DPROC)(GLdouble s, GLdouble t, GLdouble r, GLdouble q); GLAPI PFNGLTEXCOORD4DPROC glad_glTexCoord4d; #define glTexCoord4d glad_glTexCoord4d typedef void (APIENTRYP PFNGLTEXCOORD4DVPROC)(const GLdouble *v); GLAPI PFNGLTEXCOORD4DVPROC glad_glTexCoord4dv; #define glTexCoord4dv glad_glTexCoord4dv typedef void (APIENTRYP PFNGLTEXCOORD4FPROC)(GLfloat s, GLfloat t, GLfloat r, GLfloat q); GLAPI PFNGLTEXCOORD4FPROC glad_glTexCoord4f; #define glTexCoord4f glad_glTexCoord4f typedef void (APIENTRYP PFNGLTEXCOORD4FVPROC)(const GLfloat *v); GLAPI PFNGLTEXCOORD4FVPROC glad_glTexCoord4fv; #define glTexCoord4fv glad_glTexCoord4fv typedef void (APIENTRYP PFNGLTEXCOORD4IPROC)(GLint s, GLint t, GLint r, GLint q); GLAPI PFNGLTEXCOORD4IPROC glad_glTexCoord4i; #define glTexCoord4i glad_glTexCoord4i typedef void (APIENTRYP PFNGLTEXCOORD4IVPROC)(const GLint *v); GLAPI PFNGLTEXCOORD4IVPROC glad_glTexCoord4iv; #define glTexCoord4iv glad_glTexCoord4iv typedef void (APIENTRYP PFNGLTEXCOORD4SPROC)(GLshort s, GLshort t, GLshort r, GLshort q); GLAPI PFNGLTEXCOORD4SPROC glad_glTexCoord4s; #define glTexCoord4s glad_glTexCoord4s typedef void (APIENTRYP PFNGLTEXCOORD4SVPROC)(const GLshort *v); GLAPI PFNGLTEXCOORD4SVPROC glad_glTexCoord4sv; #define glTexCoord4sv glad_glTexCoord4sv typedef void (APIENTRYP PFNGLVERTEX2DPROC)(GLdouble x, GLdouble y); GLAPI PFNGLVERTEX2DPROC glad_glVertex2d; #define glVertex2d glad_glVertex2d typedef void (APIENTRYP PFNGLVERTEX2DVPROC)(const GLdouble *v); GLAPI PFNGLVERTEX2DVPROC glad_glVertex2dv; #define glVertex2dv glad_glVertex2dv typedef void (APIENTRYP PFNGLVERTEX2FPROC)(GLfloat x, GLfloat y); GLAPI PFNGLVERTEX2FPROC glad_glVertex2f; #define glVertex2f glad_glVertex2f typedef void (APIENTRYP PFNGLVERTEX2FVPROC)(const GLfloat *v); GLAPI PFNGLVERTEX2FVPROC glad_glVertex2fv; #define glVertex2fv glad_glVertex2fv typedef void (APIENTRYP PFNGLVERTEX2IPROC)(GLint x, GLint y); GLAPI PFNGLVERTEX2IPROC glad_glVertex2i; #define glVertex2i glad_glVertex2i typedef void (APIENTRYP PFNGLVERTEX2IVPROC)(const GLint *v); GLAPI PFNGLVERTEX2IVPROC glad_glVertex2iv; #define glVertex2iv glad_glVertex2iv typedef void (APIENTRYP PFNGLVERTEX2SPROC)(GLshort x, GLshort y); GLAPI PFNGLVERTEX2SPROC glad_glVertex2s; #define glVertex2s glad_glVertex2s typedef void (APIENTRYP PFNGLVERTEX2SVPROC)(const GLshort *v); GLAPI PFNGLVERTEX2SVPROC glad_glVertex2sv; #define glVertex2sv glad_glVertex2sv typedef void (APIENTRYP PFNGLVERTEX3DPROC)(GLdouble x, GLdouble y, GLdouble z); GLAPI PFNGLVERTEX3DPROC glad_glVertex3d; #define glVertex3d glad_glVertex3d typedef void (APIENTRYP PFNGLVERTEX3DVPROC)(const GLdouble *v); GLAPI PFNGLVERTEX3DVPROC glad_glVertex3dv; #define glVertex3dv glad_glVertex3dv typedef void (APIENTRYP PFNGLVERTEX3FPROC)(GLfloat x, GLfloat y, GLfloat z); GLAPI PFNGLVERTEX3FPROC glad_glVertex3f; #define glVertex3f glad_glVertex3f typedef void (APIENTRYP PFNGLVERTEX3FVPROC)(const GLfloat *v); GLAPI PFNGLVERTEX3FVPROC glad_glVertex3fv; #define glVertex3fv glad_glVertex3fv typedef void (APIENTRYP PFNGLVERTEX3IPROC)(GLint x, GLint y, GLint z); GLAPI PFNGLVERTEX3IPROC glad_glVertex3i; #define glVertex3i glad_glVertex3i typedef void (APIENTRYP PFNGLVERTEX3IVPROC)(const GLint *v); GLAPI PFNGLVERTEX3IVPROC glad_glVertex3iv; #define glVertex3iv glad_glVertex3iv typedef void (APIENTRYP PFNGLVERTEX3SPROC)(GLshort x, GLshort y, GLshort z); GLAPI PFNGLVERTEX3SPROC glad_glVertex3s; #define glVertex3s glad_glVertex3s typedef void (APIENTRYP PFNGLVERTEX3SVPROC)(const GLshort *v); GLAPI PFNGLVERTEX3SVPROC glad_glVertex3sv; #define glVertex3sv glad_glVertex3sv typedef void (APIENTRYP PFNGLVERTEX4DPROC)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI PFNGLVERTEX4DPROC glad_glVertex4d; #define glVertex4d glad_glVertex4d typedef void (APIENTRYP PFNGLVERTEX4DVPROC)(const GLdouble *v); GLAPI PFNGLVERTEX4DVPROC glad_glVertex4dv; #define glVertex4dv glad_glVertex4dv typedef void (APIENTRYP PFNGLVERTEX4FPROC)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI PFNGLVERTEX4FPROC glad_glVertex4f; #define glVertex4f glad_glVertex4f typedef void (APIENTRYP PFNGLVERTEX4FVPROC)(const GLfloat *v); GLAPI PFNGLVERTEX4FVPROC glad_glVertex4fv; #define glVertex4fv glad_glVertex4fv typedef void (APIENTRYP PFNGLVERTEX4IPROC)(GLint x, GLint y, GLint z, GLint w); GLAPI PFNGLVERTEX4IPROC glad_glVertex4i; #define glVertex4i glad_glVertex4i typedef void (APIENTRYP PFNGLVERTEX4IVPROC)(const GLint *v); GLAPI PFNGLVERTEX4IVPROC glad_glVertex4iv; #define glVertex4iv glad_glVertex4iv typedef void (APIENTRYP PFNGLVERTEX4SPROC)(GLshort x, GLshort y, GLshort z, GLshort w); GLAPI PFNGLVERTEX4SPROC glad_glVertex4s; #define glVertex4s glad_glVertex4s typedef void (APIENTRYP PFNGLVERTEX4SVPROC)(const GLshort *v); GLAPI PFNGLVERTEX4SVPROC glad_glVertex4sv; #define glVertex4sv glad_glVertex4sv typedef void (APIENTRYP PFNGLCLIPPLANEPROC)(GLenum plane, const GLdouble *equation); GLAPI PFNGLCLIPPLANEPROC glad_glClipPlane; #define glClipPlane glad_glClipPlane typedef void (APIENTRYP PFNGLCOLORMATERIALPROC)(GLenum face, GLenum mode); GLAPI PFNGLCOLORMATERIALPROC glad_glColorMaterial; #define glColorMaterial glad_glColorMaterial typedef void (APIENTRYP PFNGLFOGFPROC)(GLenum pname, GLfloat param); GLAPI PFNGLFOGFPROC glad_glFogf; #define glFogf glad_glFogf typedef void (APIENTRYP PFNGLFOGFVPROC)(GLenum pname, const GLfloat *params); GLAPI PFNGLFOGFVPROC glad_glFogfv; #define glFogfv glad_glFogfv typedef void (APIENTRYP PFNGLFOGIPROC)(GLenum pname, GLint param); GLAPI PFNGLFOGIPROC glad_glFogi; #define glFogi glad_glFogi typedef void (APIENTRYP PFNGLFOGIVPROC)(GLenum pname, const GLint *params); GLAPI PFNGLFOGIVPROC glad_glFogiv; #define glFogiv glad_glFogiv typedef void (APIENTRYP PFNGLLIGHTFPROC)(GLenum light, GLenum pname, GLfloat param); GLAPI PFNGLLIGHTFPROC glad_glLightf; #define glLightf glad_glLightf typedef void (APIENTRYP PFNGLLIGHTFVPROC)(GLenum light, GLenum pname, const GLfloat *params); GLAPI PFNGLLIGHTFVPROC glad_glLightfv; #define glLightfv glad_glLightfv typedef void (APIENTRYP PFNGLLIGHTIPROC)(GLenum light, GLenum pname, GLint param); GLAPI PFNGLLIGHTIPROC glad_glLighti; #define glLighti glad_glLighti typedef void (APIENTRYP PFNGLLIGHTIVPROC)(GLenum light, GLenum pname, const GLint *params); GLAPI PFNGLLIGHTIVPROC glad_glLightiv; #define glLightiv glad_glLightiv typedef void (APIENTRYP PFNGLLIGHTMODELFPROC)(GLenum pname, GLfloat param); GLAPI PFNGLLIGHTMODELFPROC glad_glLightModelf; #define glLightModelf glad_glLightModelf typedef void (APIENTRYP PFNGLLIGHTMODELFVPROC)(GLenum pname, const GLfloat *params); GLAPI PFNGLLIGHTMODELFVPROC glad_glLightModelfv; #define glLightModelfv glad_glLightModelfv typedef void (APIENTRYP PFNGLLIGHTMODELIPROC)(GLenum pname, GLint param); GLAPI PFNGLLIGHTMODELIPROC glad_glLightModeli; #define glLightModeli glad_glLightModeli typedef void (APIENTRYP PFNGLLIGHTMODELIVPROC)(GLenum pname, const GLint *params); GLAPI PFNGLLIGHTMODELIVPROC glad_glLightModeliv; #define glLightModeliv glad_glLightModeliv typedef void (APIENTRYP PFNGLLINESTIPPLEPROC)(GLint factor, GLushort pattern); GLAPI PFNGLLINESTIPPLEPROC glad_glLineStipple; #define glLineStipple glad_glLineStipple typedef void (APIENTRYP PFNGLMATERIALFPROC)(GLenum face, GLenum pname, GLfloat param); GLAPI PFNGLMATERIALFPROC glad_glMaterialf; #define glMaterialf glad_glMaterialf typedef void (APIENTRYP PFNGLMATERIALFVPROC)(GLenum face, GLenum pname, const GLfloat *params); GLAPI PFNGLMATERIALFVPROC glad_glMaterialfv; #define glMaterialfv glad_glMaterialfv typedef void (APIENTRYP PFNGLMATERIALIPROC)(GLenum face, GLenum pname, GLint param); GLAPI PFNGLMATERIALIPROC glad_glMateriali; #define glMateriali glad_glMateriali typedef void (APIENTRYP PFNGLMATERIALIVPROC)(GLenum face, GLenum pname, const GLint *params); GLAPI PFNGLMATERIALIVPROC glad_glMaterialiv; #define glMaterialiv glad_glMaterialiv typedef void (APIENTRYP PFNGLPOLYGONSTIPPLEPROC)(const GLubyte *mask); GLAPI PFNGLPOLYGONSTIPPLEPROC glad_glPolygonStipple; #define glPolygonStipple glad_glPolygonStipple typedef void (APIENTRYP PFNGLSHADEMODELPROC)(GLenum mode); GLAPI PFNGLSHADEMODELPROC glad_glShadeModel; #define glShadeModel glad_glShadeModel typedef void (APIENTRYP PFNGLTEXENVFPROC)(GLenum target, GLenum pname, GLfloat param); GLAPI PFNGLTEXENVFPROC glad_glTexEnvf; #define glTexEnvf glad_glTexEnvf typedef void (APIENTRYP PFNGLTEXENVFVPROC)(GLenum target, GLenum pname, const GLfloat *params); GLAPI PFNGLTEXENVFVPROC glad_glTexEnvfv; #define glTexEnvfv glad_glTexEnvfv typedef void (APIENTRYP PFNGLTEXENVIPROC)(GLenum target, GLenum pname, GLint param); GLAPI PFNGLTEXENVIPROC glad_glTexEnvi; #define glTexEnvi glad_glTexEnvi typedef void (APIENTRYP PFNGLTEXENVIVPROC)(GLenum target, GLenum pname, const GLint *params); GLAPI PFNGLTEXENVIVPROC glad_glTexEnviv; #define glTexEnviv glad_glTexEnviv typedef void (APIENTRYP PFNGLTEXGENDPROC)(GLenum coord, GLenum pname, GLdouble param); GLAPI PFNGLTEXGENDPROC glad_glTexGend; #define glTexGend glad_glTexGend typedef void (APIENTRYP PFNGLTEXGENDVPROC)(GLenum coord, GLenum pname, const GLdouble *params); GLAPI PFNGLTEXGENDVPROC glad_glTexGendv; #define glTexGendv glad_glTexGendv typedef void (APIENTRYP PFNGLTEXGENFPROC)(GLenum coord, GLenum pname, GLfloat param); GLAPI PFNGLTEXGENFPROC glad_glTexGenf; #define glTexGenf glad_glTexGenf typedef void (APIENTRYP PFNGLTEXGENFVPROC)(GLenum coord, GLenum pname, const GLfloat *params); GLAPI PFNGLTEXGENFVPROC glad_glTexGenfv; #define glTexGenfv glad_glTexGenfv typedef void (APIENTRYP PFNGLTEXGENIPROC)(GLenum coord, GLenum pname, GLint param); GLAPI PFNGLTEXGENIPROC glad_glTexGeni; #define glTexGeni glad_glTexGeni typedef void (APIENTRYP PFNGLTEXGENIVPROC)(GLenum coord, GLenum pname, const GLint *params); GLAPI PFNGLTEXGENIVPROC glad_glTexGeniv; #define glTexGeniv glad_glTexGeniv typedef void (APIENTRYP PFNGLFEEDBACKBUFFERPROC)(GLsizei size, GLenum type, GLfloat *buffer); GLAPI PFNGLFEEDBACKBUFFERPROC glad_glFeedbackBuffer; #define glFeedbackBuffer glad_glFeedbackBuffer typedef void (APIENTRYP PFNGLSELECTBUFFERPROC)(GLsizei size, GLuint *buffer); GLAPI PFNGLSELECTBUFFERPROC glad_glSelectBuffer; #define glSelectBuffer glad_glSelectBuffer typedef GLint (APIENTRYP PFNGLRENDERMODEPROC)(GLenum mode); GLAPI PFNGLRENDERMODEPROC glad_glRenderMode; #define glRenderMode glad_glRenderMode typedef void (APIENTRYP PFNGLINITNAMESPROC)(void); GLAPI PFNGLINITNAMESPROC glad_glInitNames; #define glInitNames glad_glInitNames typedef void (APIENTRYP PFNGLLOADNAMEPROC)(GLuint name); GLAPI PFNGLLOADNAMEPROC glad_glLoadName; #define glLoadName glad_glLoadName typedef void (APIENTRYP PFNGLPASSTHROUGHPROC)(GLfloat token); GLAPI PFNGLPASSTHROUGHPROC glad_glPassThrough; #define glPassThrough glad_glPassThrough typedef void (APIENTRYP PFNGLPOPNAMEPROC)(void); GLAPI PFNGLPOPNAMEPROC glad_glPopName; #define glPopName glad_glPopName typedef void (APIENTRYP PFNGLPUSHNAMEPROC)(GLuint name); GLAPI PFNGLPUSHNAMEPROC glad_glPushName; #define glPushName glad_glPushName typedef void (APIENTRYP PFNGLCLEARACCUMPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); GLAPI PFNGLCLEARACCUMPROC glad_glClearAccum; #define glClearAccum glad_glClearAccum typedef void (APIENTRYP PFNGLCLEARINDEXPROC)(GLfloat c); GLAPI PFNGLCLEARINDEXPROC glad_glClearIndex; #define glClearIndex glad_glClearIndex typedef void (APIENTRYP PFNGLINDEXMASKPROC)(GLuint mask); GLAPI PFNGLINDEXMASKPROC glad_glIndexMask; #define glIndexMask glad_glIndexMask typedef void (APIENTRYP PFNGLACCUMPROC)(GLenum op, GLfloat value); GLAPI PFNGLACCUMPROC glad_glAccum; #define glAccum glad_glAccum typedef void (APIENTRYP PFNGLPOPATTRIBPROC)(void); GLAPI PFNGLPOPATTRIBPROC glad_glPopAttrib; #define glPopAttrib glad_glPopAttrib typedef void (APIENTRYP PFNGLPUSHATTRIBPROC)(GLbitfield mask); GLAPI PFNGLPUSHATTRIBPROC glad_glPushAttrib; #define glPushAttrib glad_glPushAttrib typedef void (APIENTRYP PFNGLMAP1DPROC)(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); GLAPI PFNGLMAP1DPROC glad_glMap1d; #define glMap1d glad_glMap1d typedef void (APIENTRYP PFNGLMAP1FPROC)(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); GLAPI PFNGLMAP1FPROC glad_glMap1f; #define glMap1f glad_glMap1f typedef void (APIENTRYP PFNGLMAP2DPROC)(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); GLAPI PFNGLMAP2DPROC glad_glMap2d; #define glMap2d glad_glMap2d typedef void (APIENTRYP PFNGLMAP2FPROC)(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); GLAPI PFNGLMAP2FPROC glad_glMap2f; #define glMap2f glad_glMap2f typedef void (APIENTRYP PFNGLMAPGRID1DPROC)(GLint un, GLdouble u1, GLdouble u2); GLAPI PFNGLMAPGRID1DPROC glad_glMapGrid1d; #define glMapGrid1d glad_glMapGrid1d typedef void (APIENTRYP PFNGLMAPGRID1FPROC)(GLint un, GLfloat u1, GLfloat u2); GLAPI PFNGLMAPGRID1FPROC glad_glMapGrid1f; #define glMapGrid1f glad_glMapGrid1f typedef void (APIENTRYP PFNGLMAPGRID2DPROC)(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); GLAPI PFNGLMAPGRID2DPROC glad_glMapGrid2d; #define glMapGrid2d glad_glMapGrid2d typedef void (APIENTRYP PFNGLMAPGRID2FPROC)(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); GLAPI PFNGLMAPGRID2FPROC glad_glMapGrid2f; #define glMapGrid2f glad_glMapGrid2f typedef void (APIENTRYP PFNGLEVALCOORD1DPROC)(GLdouble u); GLAPI PFNGLEVALCOORD1DPROC glad_glEvalCoord1d; #define glEvalCoord1d glad_glEvalCoord1d typedef void (APIENTRYP PFNGLEVALCOORD1DVPROC)(const GLdouble *u); GLAPI PFNGLEVALCOORD1DVPROC glad_glEvalCoord1dv; #define glEvalCoord1dv glad_glEvalCoord1dv typedef void (APIENTRYP PFNGLEVALCOORD1FPROC)(GLfloat u); GLAPI PFNGLEVALCOORD1FPROC glad_glEvalCoord1f; #define glEvalCoord1f glad_glEvalCoord1f typedef void (APIENTRYP PFNGLEVALCOORD1FVPROC)(const GLfloat *u); GLAPI PFNGLEVALCOORD1FVPROC glad_glEvalCoord1fv; #define glEvalCoord1fv glad_glEvalCoord1fv typedef void (APIENTRYP PFNGLEVALCOORD2DPROC)(GLdouble u, GLdouble v); GLAPI PFNGLEVALCOORD2DPROC glad_glEvalCoord2d; #define glEvalCoord2d glad_glEvalCoord2d typedef void (APIENTRYP PFNGLEVALCOORD2DVPROC)(const GLdouble *u); GLAPI PFNGLEVALCOORD2DVPROC glad_glEvalCoord2dv; #define glEvalCoord2dv glad_glEvalCoord2dv typedef void (APIENTRYP PFNGLEVALCOORD2FPROC)(GLfloat u, GLfloat v); GLAPI PFNGLEVALCOORD2FPROC glad_glEvalCoord2f; #define glEvalCoord2f glad_glEvalCoord2f typedef void (APIENTRYP PFNGLEVALCOORD2FVPROC)(const GLfloat *u); GLAPI PFNGLEVALCOORD2FVPROC glad_glEvalCoord2fv; #define glEvalCoord2fv glad_glEvalCoord2fv typedef void (APIENTRYP PFNGLEVALMESH1PROC)(GLenum mode, GLint i1, GLint i2); GLAPI PFNGLEVALMESH1PROC glad_glEvalMesh1; #define glEvalMesh1 glad_glEvalMesh1 typedef void (APIENTRYP PFNGLEVALPOINT1PROC)(GLint i); GLAPI PFNGLEVALPOINT1PROC glad_glEvalPoint1; #define glEvalPoint1 glad_glEvalPoint1 typedef void (APIENTRYP PFNGLEVALMESH2PROC)(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); GLAPI PFNGLEVALMESH2PROC glad_glEvalMesh2; #define glEvalMesh2 glad_glEvalMesh2 typedef void (APIENTRYP PFNGLEVALPOINT2PROC)(GLint i, GLint j); GLAPI PFNGLEVALPOINT2PROC glad_glEvalPoint2; #define glEvalPoint2 glad_glEvalPoint2 typedef void (APIENTRYP PFNGLALPHAFUNCPROC)(GLenum func, GLfloat ref); GLAPI PFNGLALPHAFUNCPROC glad_glAlphaFunc; #define glAlphaFunc glad_glAlphaFunc typedef void (APIENTRYP PFNGLPIXELZOOMPROC)(GLfloat xfactor, GLfloat yfactor); GLAPI PFNGLPIXELZOOMPROC glad_glPixelZoom; #define glPixelZoom glad_glPixelZoom typedef void (APIENTRYP PFNGLPIXELTRANSFERFPROC)(GLenum pname, GLfloat param); GLAPI PFNGLPIXELTRANSFERFPROC glad_glPixelTransferf; #define glPixelTransferf glad_glPixelTransferf typedef void (APIENTRYP PFNGLPIXELTRANSFERIPROC)(GLenum pname, GLint param); GLAPI PFNGLPIXELTRANSFERIPROC glad_glPixelTransferi; #define glPixelTransferi glad_glPixelTransferi typedef void (APIENTRYP PFNGLPIXELMAPFVPROC)(GLenum map, GLsizei mapsize, const GLfloat *values); GLAPI PFNGLPIXELMAPFVPROC glad_glPixelMapfv; #define glPixelMapfv glad_glPixelMapfv typedef void (APIENTRYP PFNGLPIXELMAPUIVPROC)(GLenum map, GLsizei mapsize, const GLuint *values); GLAPI PFNGLPIXELMAPUIVPROC glad_glPixelMapuiv; #define glPixelMapuiv glad_glPixelMapuiv typedef void (APIENTRYP PFNGLPIXELMAPUSVPROC)(GLenum map, GLsizei mapsize, const GLushort *values); GLAPI PFNGLPIXELMAPUSVPROC glad_glPixelMapusv; #define glPixelMapusv glad_glPixelMapusv typedef void (APIENTRYP PFNGLCOPYPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type); GLAPI PFNGLCOPYPIXELSPROC glad_glCopyPixels; #define glCopyPixels glad_glCopyPixels typedef void (APIENTRYP PFNGLDRAWPIXELSPROC)(GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); GLAPI PFNGLDRAWPIXELSPROC glad_glDrawPixels; #define glDrawPixels glad_glDrawPixels typedef void (APIENTRYP PFNGLGETCLIPPLANEPROC)(GLenum plane, GLdouble *equation); GLAPI PFNGLGETCLIPPLANEPROC glad_glGetClipPlane; #define glGetClipPlane glad_glGetClipPlane typedef void (APIENTRYP PFNGLGETLIGHTFVPROC)(GLenum light, GLenum pname, GLfloat *params); GLAPI PFNGLGETLIGHTFVPROC glad_glGetLightfv; #define glGetLightfv glad_glGetLightfv typedef void (APIENTRYP PFNGLGETLIGHTIVPROC)(GLenum light, GLenum pname, GLint *params); GLAPI PFNGLGETLIGHTIVPROC glad_glGetLightiv; #define glGetLightiv glad_glGetLightiv typedef void (APIENTRYP PFNGLGETMAPDVPROC)(GLenum target, GLenum query, GLdouble *v); GLAPI PFNGLGETMAPDVPROC glad_glGetMapdv; #define glGetMapdv glad_glGetMapdv typedef void (APIENTRYP PFNGLGETMAPFVPROC)(GLenum target, GLenum query, GLfloat *v); GLAPI PFNGLGETMAPFVPROC glad_glGetMapfv; #define glGetMapfv glad_glGetMapfv typedef void (APIENTRYP PFNGLGETMAPIVPROC)(GLenum target, GLenum query, GLint *v); GLAPI PFNGLGETMAPIVPROC glad_glGetMapiv; #define glGetMapiv glad_glGetMapiv typedef void (APIENTRYP PFNGLGETMATERIALFVPROC)(GLenum face, GLenum pname, GLfloat *params); GLAPI PFNGLGETMATERIALFVPROC glad_glGetMaterialfv; #define glGetMaterialfv glad_glGetMaterialfv typedef void (APIENTRYP PFNGLGETMATERIALIVPROC)(GLenum face, GLenum pname, GLint *params); GLAPI PFNGLGETMATERIALIVPROC glad_glGetMaterialiv; #define glGetMaterialiv glad_glGetMaterialiv typedef void (APIENTRYP PFNGLGETPIXELMAPFVPROC)(GLenum map, GLfloat *values); GLAPI PFNGLGETPIXELMAPFVPROC glad_glGetPixelMapfv; #define glGetPixelMapfv glad_glGetPixelMapfv typedef void (APIENTRYP PFNGLGETPIXELMAPUIVPROC)(GLenum map, GLuint *values); GLAPI PFNGLGETPIXELMAPUIVPROC glad_glGetPixelMapuiv; #define glGetPixelMapuiv glad_glGetPixelMapuiv typedef void (APIENTRYP PFNGLGETPIXELMAPUSVPROC)(GLenum map, GLushort *values); GLAPI PFNGLGETPIXELMAPUSVPROC glad_glGetPixelMapusv; #define glGetPixelMapusv glad_glGetPixelMapusv typedef void (APIENTRYP PFNGLGETPOLYGONSTIPPLEPROC)(GLubyte *mask); GLAPI PFNGLGETPOLYGONSTIPPLEPROC glad_glGetPolygonStipple; #define glGetPolygonStipple glad_glGetPolygonStipple typedef void (APIENTRYP PFNGLGETTEXENVFVPROC)(GLenum target, GLenum pname, GLfloat *params); GLAPI PFNGLGETTEXENVFVPROC glad_glGetTexEnvfv; #define glGetTexEnvfv glad_glGetTexEnvfv typedef void (APIENTRYP PFNGLGETTEXENVIVPROC)(GLenum target, GLenum pname, GLint *params); GLAPI PFNGLGETTEXENVIVPROC glad_glGetTexEnviv; #define glGetTexEnviv glad_glGetTexEnviv typedef void (APIENTRYP PFNGLGETTEXGENDVPROC)(GLenum coord, GLenum pname, GLdouble *params); GLAPI PFNGLGETTEXGENDVPROC glad_glGetTexGendv; #define glGetTexGendv glad_glGetTexGendv typedef void (APIENTRYP PFNGLGETTEXGENFVPROC)(GLenum coord, GLenum pname, GLfloat *params); GLAPI PFNGLGETTEXGENFVPROC glad_glGetTexGenfv; #define glGetTexGenfv glad_glGetTexGenfv typedef void (APIENTRYP PFNGLGETTEXGENIVPROC)(GLenum coord, GLenum pname, GLint *params); GLAPI PFNGLGETTEXGENIVPROC glad_glGetTexGeniv; #define glGetTexGeniv glad_glGetTexGeniv typedef GLboolean (APIENTRYP PFNGLISLISTPROC)(GLuint list); GLAPI PFNGLISLISTPROC glad_glIsList; #define glIsList glad_glIsList typedef void (APIENTRYP PFNGLFRUSTUMPROC)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); GLAPI PFNGLFRUSTUMPROC glad_glFrustum; #define glFrustum glad_glFrustum typedef void (APIENTRYP PFNGLLOADIDENTITYPROC)(void); GLAPI PFNGLLOADIDENTITYPROC glad_glLoadIdentity; #define glLoadIdentity glad_glLoadIdentity typedef void (APIENTRYP PFNGLLOADMATRIXFPROC)(const GLfloat *m); GLAPI PFNGLLOADMATRIXFPROC glad_glLoadMatrixf; #define glLoadMatrixf glad_glLoadMatrixf typedef void (APIENTRYP PFNGLLOADMATRIXDPROC)(const GLdouble *m); GLAPI PFNGLLOADMATRIXDPROC glad_glLoadMatrixd; #define glLoadMatrixd glad_glLoadMatrixd typedef void (APIENTRYP PFNGLMATRIXMODEPROC)(GLenum mode); GLAPI PFNGLMATRIXMODEPROC glad_glMatrixMode; #define glMatrixMode glad_glMatrixMode typedef void (APIENTRYP PFNGLMULTMATRIXFPROC)(const GLfloat *m); GLAPI PFNGLMULTMATRIXFPROC glad_glMultMatrixf; #define glMultMatrixf glad_glMultMatrixf typedef void (APIENTRYP PFNGLMULTMATRIXDPROC)(const GLdouble *m); GLAPI PFNGLMULTMATRIXDPROC glad_glMultMatrixd; #define glMultMatrixd glad_glMultMatrixd typedef void (APIENTRYP PFNGLORTHOPROC)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); GLAPI PFNGLORTHOPROC glad_glOrtho; #define glOrtho glad_glOrtho typedef void (APIENTRYP PFNGLPOPMATRIXPROC)(void); GLAPI PFNGLPOPMATRIXPROC glad_glPopMatrix; #define glPopMatrix glad_glPopMatrix typedef void (APIENTRYP PFNGLPUSHMATRIXPROC)(void); GLAPI PFNGLPUSHMATRIXPROC glad_glPushMatrix; #define glPushMatrix glad_glPushMatrix typedef void (APIENTRYP PFNGLROTATEDPROC)(GLdouble angle, GLdouble x, GLdouble y, GLdouble z); GLAPI PFNGLROTATEDPROC glad_glRotated; #define glRotated glad_glRotated typedef void (APIENTRYP PFNGLROTATEFPROC)(GLfloat angle, GLfloat x, GLfloat y, GLfloat z); GLAPI PFNGLROTATEFPROC glad_glRotatef; #define glRotatef glad_glRotatef typedef void (APIENTRYP PFNGLSCALEDPROC)(GLdouble x, GLdouble y, GLdouble z); GLAPI PFNGLSCALEDPROC glad_glScaled; #define glScaled glad_glScaled typedef void (APIENTRYP PFNGLSCALEFPROC)(GLfloat x, GLfloat y, GLfloat z); GLAPI PFNGLSCALEFPROC glad_glScalef; #define glScalef glad_glScalef typedef void (APIENTRYP PFNGLTRANSLATEDPROC)(GLdouble x, GLdouble y, GLdouble z); GLAPI PFNGLTRANSLATEDPROC glad_glTranslated; #define glTranslated glad_glTranslated typedef void (APIENTRYP PFNGLTRANSLATEFPROC)(GLfloat x, GLfloat y, GLfloat z); GLAPI PFNGLTRANSLATEFPROC glad_glTranslatef; #define glTranslatef glad_glTranslatef #endif #ifndef GL_VERSION_1_1 #define GL_VERSION_1_1 1 GLAPI int GLAD_GL_VERSION_1_1; typedef void (APIENTRYP PFNGLDRAWARRAYSPROC)(GLenum mode, GLint first, GLsizei count); GLAPI PFNGLDRAWARRAYSPROC glad_glDrawArrays; #define glDrawArrays glad_glDrawArrays typedef void (APIENTRYP PFNGLDRAWELEMENTSPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices); GLAPI PFNGLDRAWELEMENTSPROC glad_glDrawElements; #define glDrawElements glad_glDrawElements typedef void (APIENTRYP PFNGLGETPOINTERVPROC)(GLenum pname, void **params); GLAPI PFNGLGETPOINTERVPROC glad_glGetPointerv; #define glGetPointerv glad_glGetPointerv typedef void (APIENTRYP PFNGLPOLYGONOFFSETPROC)(GLfloat factor, GLfloat units); GLAPI PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset; #define glPolygonOffset glad_glPolygonOffset typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); GLAPI PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D; #define glCopyTexImage1D glad_glCopyTexImage1D typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); GLAPI PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D; #define glCopyTexImage2D glad_glCopyTexImage2D typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); GLAPI PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D; #define glCopyTexSubImage1D glad_glCopyTexSubImage1D typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D; #define glCopyTexSubImage2D glad_glCopyTexSubImage2D typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); GLAPI PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D; #define glTexSubImage1D glad_glTexSubImage1D typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); GLAPI PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D; #define glTexSubImage2D glad_glTexSubImage2D typedef void (APIENTRYP PFNGLBINDTEXTUREPROC)(GLenum target, GLuint texture); GLAPI PFNGLBINDTEXTUREPROC glad_glBindTexture; #define glBindTexture glad_glBindTexture typedef void (APIENTRYP PFNGLDELETETEXTURESPROC)(GLsizei n, const GLuint *textures); GLAPI PFNGLDELETETEXTURESPROC glad_glDeleteTextures; #define glDeleteTextures glad_glDeleteTextures typedef void (APIENTRYP PFNGLGENTEXTURESPROC)(GLsizei n, GLuint *textures); GLAPI PFNGLGENTEXTURESPROC glad_glGenTextures; #define glGenTextures glad_glGenTextures typedef GLboolean (APIENTRYP PFNGLISTEXTUREPROC)(GLuint texture); GLAPI PFNGLISTEXTUREPROC glad_glIsTexture; #define glIsTexture glad_glIsTexture typedef void (APIENTRYP PFNGLARRAYELEMENTPROC)(GLint i); GLAPI PFNGLARRAYELEMENTPROC glad_glArrayElement; #define glArrayElement glad_glArrayElement typedef void (APIENTRYP PFNGLCOLORPOINTERPROC)(GLint size, GLenum type, GLsizei stride, const void *pointer); GLAPI PFNGLCOLORPOINTERPROC glad_glColorPointer; #define glColorPointer glad_glColorPointer typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEPROC)(GLenum array); GLAPI PFNGLDISABLECLIENTSTATEPROC glad_glDisableClientState; #define glDisableClientState glad_glDisableClientState typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERPROC)(GLsizei stride, const void *pointer); GLAPI PFNGLEDGEFLAGPOINTERPROC glad_glEdgeFlagPointer; #define glEdgeFlagPointer glad_glEdgeFlagPointer typedef void (APIENTRYP PFNGLENABLECLIENTSTATEPROC)(GLenum array); GLAPI PFNGLENABLECLIENTSTATEPROC glad_glEnableClientState; #define glEnableClientState glad_glEnableClientState typedef void (APIENTRYP PFNGLINDEXPOINTERPROC)(GLenum type, GLsizei stride, const void *pointer); GLAPI PFNGLINDEXPOINTERPROC glad_glIndexPointer; #define glIndexPointer glad_glIndexPointer typedef void (APIENTRYP PFNGLINTERLEAVEDARRAYSPROC)(GLenum format, GLsizei stride, const void *pointer); GLAPI PFNGLINTERLEAVEDARRAYSPROC glad_glInterleavedArrays; #define glInterleavedArrays glad_glInterleavedArrays typedef void (APIENTRYP PFNGLNORMALPOINTERPROC)(GLenum type, GLsizei stride, const void *pointer); GLAPI PFNGLNORMALPOINTERPROC glad_glNormalPointer; #define glNormalPointer glad_glNormalPointer typedef void (APIENTRYP PFNGLTEXCOORDPOINTERPROC)(GLint size, GLenum type, GLsizei stride, const void *pointer); GLAPI PFNGLTEXCOORDPOINTERPROC glad_glTexCoordPointer; #define glTexCoordPointer glad_glTexCoordPointer typedef void (APIENTRYP PFNGLVERTEXPOINTERPROC)(GLint size, GLenum type, GLsizei stride, const void *pointer); GLAPI PFNGLVERTEXPOINTERPROC glad_glVertexPointer; #define glVertexPointer glad_glVertexPointer typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTPROC)(GLsizei n, const GLuint *textures, GLboolean *residences); GLAPI PFNGLARETEXTURESRESIDENTPROC glad_glAreTexturesResident; #define glAreTexturesResident glad_glAreTexturesResident typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESPROC)(GLsizei n, const GLuint *textures, const GLfloat *priorities); GLAPI PFNGLPRIORITIZETEXTURESPROC glad_glPrioritizeTextures; #define glPrioritizeTextures glad_glPrioritizeTextures typedef void (APIENTRYP PFNGLINDEXUBPROC)(GLubyte c); GLAPI PFNGLINDEXUBPROC glad_glIndexub; #define glIndexub glad_glIndexub typedef void (APIENTRYP PFNGLINDEXUBVPROC)(const GLubyte *c); GLAPI PFNGLINDEXUBVPROC glad_glIndexubv; #define glIndexubv glad_glIndexubv typedef void (APIENTRYP PFNGLPOPCLIENTATTRIBPROC)(void); GLAPI PFNGLPOPCLIENTATTRIBPROC glad_glPopClientAttrib; #define glPopClientAttrib glad_glPopClientAttrib typedef void (APIENTRYP PFNGLPUSHCLIENTATTRIBPROC)(GLbitfield mask); GLAPI PFNGLPUSHCLIENTATTRIBPROC glad_glPushClientAttrib; #define glPushClientAttrib glad_glPushClientAttrib #endif #ifndef GL_VERSION_1_2 #define GL_VERSION_1_2 1 GLAPI int GLAD_GL_VERSION_1_2; typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); GLAPI PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements; #define glDrawRangeElements glad_glDrawRangeElements typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI PFNGLTEXIMAGE3DPROC glad_glTexImage3D; #define glTexImage3D glad_glTexImage3D typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); GLAPI PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D; #define glTexSubImage3D glad_glTexSubImage3D typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D; #define glCopyTexSubImage3D glad_glCopyTexSubImage3D #endif #ifndef GL_VERSION_1_3 #define GL_VERSION_1_3 1 GLAPI int GLAD_GL_VERSION_1_3; typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC)(GLenum texture); GLAPI PFNGLACTIVETEXTUREPROC glad_glActiveTexture; #define glActiveTexture glad_glActiveTexture typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC)(GLfloat value, GLboolean invert); GLAPI PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage; #define glSampleCoverage glad_glSampleCoverage typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); GLAPI PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D; #define glCompressedTexImage3D glad_glCompressedTexImage3D typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); GLAPI PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D; #define glCompressedTexImage2D glad_glCompressedTexImage2D typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); GLAPI PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D; #define glCompressedTexImage1D glad_glCompressedTexImage1D typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D; #define glCompressedTexSubImage3D glad_glCompressedTexSubImage3D typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D; #define glCompressedTexSubImage2D glad_glCompressedTexSubImage2D typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D; #define glCompressedTexSubImage1D glad_glCompressedTexSubImage1D typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC)(GLenum target, GLint level, void *img); GLAPI PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage; #define glGetCompressedTexImage glad_glGetCompressedTexImage typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC)(GLenum texture); GLAPI PFNGLCLIENTACTIVETEXTUREPROC glad_glClientActiveTexture; #define glClientActiveTexture glad_glClientActiveTexture typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC)(GLenum target, GLdouble s); GLAPI PFNGLMULTITEXCOORD1DPROC glad_glMultiTexCoord1d; #define glMultiTexCoord1d glad_glMultiTexCoord1d typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC)(GLenum target, const GLdouble *v); GLAPI PFNGLMULTITEXCOORD1DVPROC glad_glMultiTexCoord1dv; #define glMultiTexCoord1dv glad_glMultiTexCoord1dv typedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC)(GLenum target, GLfloat s); GLAPI PFNGLMULTITEXCOORD1FPROC glad_glMultiTexCoord1f; #define glMultiTexCoord1f glad_glMultiTexCoord1f typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC)(GLenum target, const GLfloat *v); GLAPI PFNGLMULTITEXCOORD1FVPROC glad_glMultiTexCoord1fv; #define glMultiTexCoord1fv glad_glMultiTexCoord1fv typedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC)(GLenum target, GLint s); GLAPI PFNGLMULTITEXCOORD1IPROC glad_glMultiTexCoord1i; #define glMultiTexCoord1i glad_glMultiTexCoord1i typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC)(GLenum target, const GLint *v); GLAPI PFNGLMULTITEXCOORD1IVPROC glad_glMultiTexCoord1iv; #define glMultiTexCoord1iv glad_glMultiTexCoord1iv typedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC)(GLenum target, GLshort s); GLAPI PFNGLMULTITEXCOORD1SPROC glad_glMultiTexCoord1s; #define glMultiTexCoord1s glad_glMultiTexCoord1s typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC)(GLenum target, const GLshort *v); GLAPI PFNGLMULTITEXCOORD1SVPROC glad_glMultiTexCoord1sv; #define glMultiTexCoord1sv glad_glMultiTexCoord1sv typedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC)(GLenum target, GLdouble s, GLdouble t); GLAPI PFNGLMULTITEXCOORD2DPROC glad_glMultiTexCoord2d; #define glMultiTexCoord2d glad_glMultiTexCoord2d typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC)(GLenum target, const GLdouble *v); GLAPI PFNGLMULTITEXCOORD2DVPROC glad_glMultiTexCoord2dv; #define glMultiTexCoord2dv glad_glMultiTexCoord2dv typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC)(GLenum target, GLfloat s, GLfloat t); GLAPI PFNGLMULTITEXCOORD2FPROC glad_glMultiTexCoord2f; #define glMultiTexCoord2f glad_glMultiTexCoord2f typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC)(GLenum target, const GLfloat *v); GLAPI PFNGLMULTITEXCOORD2FVPROC glad_glMultiTexCoord2fv; #define glMultiTexCoord2fv glad_glMultiTexCoord2fv typedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC)(GLenum target, GLint s, GLint t); GLAPI PFNGLMULTITEXCOORD2IPROC glad_glMultiTexCoord2i; #define glMultiTexCoord2i glad_glMultiTexCoord2i typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC)(GLenum target, const GLint *v); GLAPI PFNGLMULTITEXCOORD2IVPROC glad_glMultiTexCoord2iv; #define glMultiTexCoord2iv glad_glMultiTexCoord2iv typedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC)(GLenum target, GLshort s, GLshort t); GLAPI PFNGLMULTITEXCOORD2SPROC glad_glMultiTexCoord2s; #define glMultiTexCoord2s glad_glMultiTexCoord2s typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC)(GLenum target, const GLshort *v); GLAPI PFNGLMULTITEXCOORD2SVPROC glad_glMultiTexCoord2sv; #define glMultiTexCoord2sv glad_glMultiTexCoord2sv typedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC)(GLenum target, GLdouble s, GLdouble t, GLdouble r); GLAPI PFNGLMULTITEXCOORD3DPROC glad_glMultiTexCoord3d; #define glMultiTexCoord3d glad_glMultiTexCoord3d typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC)(GLenum target, const GLdouble *v); GLAPI PFNGLMULTITEXCOORD3DVPROC glad_glMultiTexCoord3dv; #define glMultiTexCoord3dv glad_glMultiTexCoord3dv typedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC)(GLenum target, GLfloat s, GLfloat t, GLfloat r); GLAPI PFNGLMULTITEXCOORD3FPROC glad_glMultiTexCoord3f; #define glMultiTexCoord3f glad_glMultiTexCoord3f typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC)(GLenum target, const GLfloat *v); GLAPI PFNGLMULTITEXCOORD3FVPROC glad_glMultiTexCoord3fv; #define glMultiTexCoord3fv glad_glMultiTexCoord3fv typedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC)(GLenum target, GLint s, GLint t, GLint r); GLAPI PFNGLMULTITEXCOORD3IPROC glad_glMultiTexCoord3i; #define glMultiTexCoord3i glad_glMultiTexCoord3i typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC)(GLenum target, const GLint *v); GLAPI PFNGLMULTITEXCOORD3IVPROC glad_glMultiTexCoord3iv; #define glMultiTexCoord3iv glad_glMultiTexCoord3iv typedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC)(GLenum target, GLshort s, GLshort t, GLshort r); GLAPI PFNGLMULTITEXCOORD3SPROC glad_glMultiTexCoord3s; #define glMultiTexCoord3s glad_glMultiTexCoord3s typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC)(GLenum target, const GLshort *v); GLAPI PFNGLMULTITEXCOORD3SVPROC glad_glMultiTexCoord3sv; #define glMultiTexCoord3sv glad_glMultiTexCoord3sv typedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC)(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); GLAPI PFNGLMULTITEXCOORD4DPROC glad_glMultiTexCoord4d; #define glMultiTexCoord4d glad_glMultiTexCoord4d typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC)(GLenum target, const GLdouble *v); GLAPI PFNGLMULTITEXCOORD4DVPROC glad_glMultiTexCoord4dv; #define glMultiTexCoord4dv glad_glMultiTexCoord4dv typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); GLAPI PFNGLMULTITEXCOORD4FPROC glad_glMultiTexCoord4f; #define glMultiTexCoord4f glad_glMultiTexCoord4f typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC)(GLenum target, const GLfloat *v); GLAPI PFNGLMULTITEXCOORD4FVPROC glad_glMultiTexCoord4fv; #define glMultiTexCoord4fv glad_glMultiTexCoord4fv typedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC)(GLenum target, GLint s, GLint t, GLint r, GLint q); GLAPI PFNGLMULTITEXCOORD4IPROC glad_glMultiTexCoord4i; #define glMultiTexCoord4i glad_glMultiTexCoord4i typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC)(GLenum target, const GLint *v); GLAPI PFNGLMULTITEXCOORD4IVPROC glad_glMultiTexCoord4iv; #define glMultiTexCoord4iv glad_glMultiTexCoord4iv typedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC)(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); GLAPI PFNGLMULTITEXCOORD4SPROC glad_glMultiTexCoord4s; #define glMultiTexCoord4s glad_glMultiTexCoord4s typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC)(GLenum target, const GLshort *v); GLAPI PFNGLMULTITEXCOORD4SVPROC glad_glMultiTexCoord4sv; #define glMultiTexCoord4sv glad_glMultiTexCoord4sv typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC)(const GLfloat *m); GLAPI PFNGLLOADTRANSPOSEMATRIXFPROC glad_glLoadTransposeMatrixf; #define glLoadTransposeMatrixf glad_glLoadTransposeMatrixf typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC)(const GLdouble *m); GLAPI PFNGLLOADTRANSPOSEMATRIXDPROC glad_glLoadTransposeMatrixd; #define glLoadTransposeMatrixd glad_glLoadTransposeMatrixd typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC)(const GLfloat *m); GLAPI PFNGLMULTTRANSPOSEMATRIXFPROC glad_glMultTransposeMatrixf; #define glMultTransposeMatrixf glad_glMultTransposeMatrixf typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC)(const GLdouble *m); GLAPI PFNGLMULTTRANSPOSEMATRIXDPROC glad_glMultTransposeMatrixd; #define glMultTransposeMatrixd glad_glMultTransposeMatrixd #endif #ifndef GL_VERSION_1_4 #define GL_VERSION_1_4 1 GLAPI int GLAD_GL_VERSION_1_4; typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); GLAPI PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate; #define glBlendFuncSeparate glad_glBlendFuncSeparate typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC)(GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); GLAPI PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays; #define glMultiDrawArrays glad_glMultiDrawArrays typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC)(GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); GLAPI PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements; #define glMultiDrawElements glad_glMultiDrawElements typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC)(GLenum pname, GLfloat param); GLAPI PFNGLPOINTPARAMETERFPROC glad_glPointParameterf; #define glPointParameterf glad_glPointParameterf typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC)(GLenum pname, const GLfloat *params); GLAPI PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv; #define glPointParameterfv glad_glPointParameterfv typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC)(GLenum pname, GLint param); GLAPI PFNGLPOINTPARAMETERIPROC glad_glPointParameteri; #define glPointParameteri glad_glPointParameteri typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC)(GLenum pname, const GLint *params); GLAPI PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv; #define glPointParameteriv glad_glPointParameteriv typedef void (APIENTRYP PFNGLFOGCOORDFPROC)(GLfloat coord); GLAPI PFNGLFOGCOORDFPROC glad_glFogCoordf; #define glFogCoordf glad_glFogCoordf typedef void (APIENTRYP PFNGLFOGCOORDFVPROC)(const GLfloat *coord); GLAPI PFNGLFOGCOORDFVPROC glad_glFogCoordfv; #define glFogCoordfv glad_glFogCoordfv typedef void (APIENTRYP PFNGLFOGCOORDDPROC)(GLdouble coord); GLAPI PFNGLFOGCOORDDPROC glad_glFogCoordd; #define glFogCoordd glad_glFogCoordd typedef void (APIENTRYP PFNGLFOGCOORDDVPROC)(const GLdouble *coord); GLAPI PFNGLFOGCOORDDVPROC glad_glFogCoorddv; #define glFogCoorddv glad_glFogCoorddv typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC)(GLenum type, GLsizei stride, const void *pointer); GLAPI PFNGLFOGCOORDPOINTERPROC glad_glFogCoordPointer; #define glFogCoordPointer glad_glFogCoordPointer typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC)(GLbyte red, GLbyte green, GLbyte blue); GLAPI PFNGLSECONDARYCOLOR3BPROC glad_glSecondaryColor3b; #define glSecondaryColor3b glad_glSecondaryColor3b typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC)(const GLbyte *v); GLAPI PFNGLSECONDARYCOLOR3BVPROC glad_glSecondaryColor3bv; #define glSecondaryColor3bv glad_glSecondaryColor3bv typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC)(GLdouble red, GLdouble green, GLdouble blue); GLAPI PFNGLSECONDARYCOLOR3DPROC glad_glSecondaryColor3d; #define glSecondaryColor3d glad_glSecondaryColor3d typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC)(const GLdouble *v); GLAPI PFNGLSECONDARYCOLOR3DVPROC glad_glSecondaryColor3dv; #define glSecondaryColor3dv glad_glSecondaryColor3dv typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC)(GLfloat red, GLfloat green, GLfloat blue); GLAPI PFNGLSECONDARYCOLOR3FPROC glad_glSecondaryColor3f; #define glSecondaryColor3f glad_glSecondaryColor3f typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC)(const GLfloat *v); GLAPI PFNGLSECONDARYCOLOR3FVPROC glad_glSecondaryColor3fv; #define glSecondaryColor3fv glad_glSecondaryColor3fv typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC)(GLint red, GLint green, GLint blue); GLAPI PFNGLSECONDARYCOLOR3IPROC glad_glSecondaryColor3i; #define glSecondaryColor3i glad_glSecondaryColor3i typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC)(const GLint *v); GLAPI PFNGLSECONDARYCOLOR3IVPROC glad_glSecondaryColor3iv; #define glSecondaryColor3iv glad_glSecondaryColor3iv typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC)(GLshort red, GLshort green, GLshort blue); GLAPI PFNGLSECONDARYCOLOR3SPROC glad_glSecondaryColor3s; #define glSecondaryColor3s glad_glSecondaryColor3s typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC)(const GLshort *v); GLAPI PFNGLSECONDARYCOLOR3SVPROC glad_glSecondaryColor3sv; #define glSecondaryColor3sv glad_glSecondaryColor3sv typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC)(GLubyte red, GLubyte green, GLubyte blue); GLAPI PFNGLSECONDARYCOLOR3UBPROC glad_glSecondaryColor3ub; #define glSecondaryColor3ub glad_glSecondaryColor3ub typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC)(const GLubyte *v); GLAPI PFNGLSECONDARYCOLOR3UBVPROC glad_glSecondaryColor3ubv; #define glSecondaryColor3ubv glad_glSecondaryColor3ubv typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC)(GLuint red, GLuint green, GLuint blue); GLAPI PFNGLSECONDARYCOLOR3UIPROC glad_glSecondaryColor3ui; #define glSecondaryColor3ui glad_glSecondaryColor3ui typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC)(const GLuint *v); GLAPI PFNGLSECONDARYCOLOR3UIVPROC glad_glSecondaryColor3uiv; #define glSecondaryColor3uiv glad_glSecondaryColor3uiv typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC)(GLushort red, GLushort green, GLushort blue); GLAPI PFNGLSECONDARYCOLOR3USPROC glad_glSecondaryColor3us; #define glSecondaryColor3us glad_glSecondaryColor3us typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC)(const GLushort *v); GLAPI PFNGLSECONDARYCOLOR3USVPROC glad_glSecondaryColor3usv; #define glSecondaryColor3usv glad_glSecondaryColor3usv typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC)(GLint size, GLenum type, GLsizei stride, const void *pointer); GLAPI PFNGLSECONDARYCOLORPOINTERPROC glad_glSecondaryColorPointer; #define glSecondaryColorPointer glad_glSecondaryColorPointer typedef void (APIENTRYP PFNGLWINDOWPOS2DPROC)(GLdouble x, GLdouble y); GLAPI PFNGLWINDOWPOS2DPROC glad_glWindowPos2d; #define glWindowPos2d glad_glWindowPos2d typedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC)(const GLdouble *v); GLAPI PFNGLWINDOWPOS2DVPROC glad_glWindowPos2dv; #define glWindowPos2dv glad_glWindowPos2dv typedef void (APIENTRYP PFNGLWINDOWPOS2FPROC)(GLfloat x, GLfloat y); GLAPI PFNGLWINDOWPOS2FPROC glad_glWindowPos2f; #define glWindowPos2f glad_glWindowPos2f typedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC)(const GLfloat *v); GLAPI PFNGLWINDOWPOS2FVPROC glad_glWindowPos2fv; #define glWindowPos2fv glad_glWindowPos2fv typedef void (APIENTRYP PFNGLWINDOWPOS2IPROC)(GLint x, GLint y); GLAPI PFNGLWINDOWPOS2IPROC glad_glWindowPos2i; #define glWindowPos2i glad_glWindowPos2i typedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC)(const GLint *v); GLAPI PFNGLWINDOWPOS2IVPROC glad_glWindowPos2iv; #define glWindowPos2iv glad_glWindowPos2iv typedef void (APIENTRYP PFNGLWINDOWPOS2SPROC)(GLshort x, GLshort y); GLAPI PFNGLWINDOWPOS2SPROC glad_glWindowPos2s; #define glWindowPos2s glad_glWindowPos2s typedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC)(const GLshort *v); GLAPI PFNGLWINDOWPOS2SVPROC glad_glWindowPos2sv; #define glWindowPos2sv glad_glWindowPos2sv typedef void (APIENTRYP PFNGLWINDOWPOS3DPROC)(GLdouble x, GLdouble y, GLdouble z); GLAPI PFNGLWINDOWPOS3DPROC glad_glWindowPos3d; #define glWindowPos3d glad_glWindowPos3d typedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC)(const GLdouble *v); GLAPI PFNGLWINDOWPOS3DVPROC glad_glWindowPos3dv; #define glWindowPos3dv glad_glWindowPos3dv typedef void (APIENTRYP PFNGLWINDOWPOS3FPROC)(GLfloat x, GLfloat y, GLfloat z); GLAPI PFNGLWINDOWPOS3FPROC glad_glWindowPos3f; #define glWindowPos3f glad_glWindowPos3f typedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC)(const GLfloat *v); GLAPI PFNGLWINDOWPOS3FVPROC glad_glWindowPos3fv; #define glWindowPos3fv glad_glWindowPos3fv typedef void (APIENTRYP PFNGLWINDOWPOS3IPROC)(GLint x, GLint y, GLint z); GLAPI PFNGLWINDOWPOS3IPROC glad_glWindowPos3i; #define glWindowPos3i glad_glWindowPos3i typedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC)(const GLint *v); GLAPI PFNGLWINDOWPOS3IVPROC glad_glWindowPos3iv; #define glWindowPos3iv glad_glWindowPos3iv typedef void (APIENTRYP PFNGLWINDOWPOS3SPROC)(GLshort x, GLshort y, GLshort z); GLAPI PFNGLWINDOWPOS3SPROC glad_glWindowPos3s; #define glWindowPos3s glad_glWindowPos3s typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC)(const GLshort *v); GLAPI PFNGLWINDOWPOS3SVPROC glad_glWindowPos3sv; #define glWindowPos3sv glad_glWindowPos3sv typedef void (APIENTRYP PFNGLBLENDCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); GLAPI PFNGLBLENDCOLORPROC glad_glBlendColor; #define glBlendColor glad_glBlendColor typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC)(GLenum mode); GLAPI PFNGLBLENDEQUATIONPROC glad_glBlendEquation; #define glBlendEquation glad_glBlendEquation #endif #ifndef GL_VERSION_1_5 #define GL_VERSION_1_5 1 GLAPI int GLAD_GL_VERSION_1_5; typedef void (APIENTRYP PFNGLGENQUERIESPROC)(GLsizei n, GLuint *ids); GLAPI PFNGLGENQUERIESPROC glad_glGenQueries; #define glGenQueries glad_glGenQueries typedef void (APIENTRYP PFNGLDELETEQUERIESPROC)(GLsizei n, const GLuint *ids); GLAPI PFNGLDELETEQUERIESPROC glad_glDeleteQueries; #define glDeleteQueries glad_glDeleteQueries typedef GLboolean (APIENTRYP PFNGLISQUERYPROC)(GLuint id); GLAPI PFNGLISQUERYPROC glad_glIsQuery; #define glIsQuery glad_glIsQuery typedef void (APIENTRYP PFNGLBEGINQUERYPROC)(GLenum target, GLuint id); GLAPI PFNGLBEGINQUERYPROC glad_glBeginQuery; #define glBeginQuery glad_glBeginQuery typedef void (APIENTRYP PFNGLENDQUERYPROC)(GLenum target); GLAPI PFNGLENDQUERYPROC glad_glEndQuery; #define glEndQuery glad_glEndQuery typedef void (APIENTRYP PFNGLGETQUERYIVPROC)(GLenum target, GLenum pname, GLint *params); GLAPI PFNGLGETQUERYIVPROC glad_glGetQueryiv; #define glGetQueryiv glad_glGetQueryiv typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC)(GLuint id, GLenum pname, GLint *params); GLAPI PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv; #define glGetQueryObjectiv glad_glGetQueryObjectiv typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC)(GLuint id, GLenum pname, GLuint *params); GLAPI PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv; #define glGetQueryObjectuiv glad_glGetQueryObjectuiv typedef void (APIENTRYP PFNGLBINDBUFFERPROC)(GLenum target, GLuint buffer); GLAPI PFNGLBINDBUFFERPROC glad_glBindBuffer; #define glBindBuffer glad_glBindBuffer typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC)(GLsizei n, const GLuint *buffers); GLAPI PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers; #define glDeleteBuffers glad_glDeleteBuffers typedef void (APIENTRYP PFNGLGENBUFFERSPROC)(GLsizei n, GLuint *buffers); GLAPI PFNGLGENBUFFERSPROC glad_glGenBuffers; #define glGenBuffers glad_glGenBuffers typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC)(GLuint buffer); GLAPI PFNGLISBUFFERPROC glad_glIsBuffer; #define glIsBuffer glad_glIsBuffer typedef void (APIENTRYP PFNGLBUFFERDATAPROC)(GLenum target, GLsizeiptr size, const void *data, GLenum usage); GLAPI PFNGLBUFFERDATAPROC glad_glBufferData; #define glBufferData glad_glBufferData typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, const void *data); GLAPI PFNGLBUFFERSUBDATAPROC glad_glBufferSubData; #define glBufferSubData glad_glBufferSubData typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, void *data); GLAPI PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData; #define glGetBufferSubData glad_glGetBufferSubData typedef void * (APIENTRYP PFNGLMAPBUFFERPROC)(GLenum target, GLenum access); GLAPI PFNGLMAPBUFFERPROC glad_glMapBuffer; #define glMapBuffer glad_glMapBuffer typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC)(GLenum target); GLAPI PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer; #define glUnmapBuffer glad_glUnmapBuffer typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params); GLAPI PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv; #define glGetBufferParameteriv glad_glGetBufferParameteriv typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC)(GLenum target, GLenum pname, void **params); GLAPI PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv; #define glGetBufferPointerv glad_glGetBufferPointerv #endif #ifndef GL_VERSION_2_0 #define GL_VERSION_2_0 1 GLAPI int GLAD_GL_VERSION_2_0; typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC)(GLenum modeRGB, GLenum modeAlpha); GLAPI PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate; #define glBlendEquationSeparate glad_glBlendEquationSeparate typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC)(GLsizei n, const GLenum *bufs); GLAPI PFNGLDRAWBUFFERSPROC glad_glDrawBuffers; #define glDrawBuffers glad_glDrawBuffers typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); GLAPI PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate; #define glStencilOpSeparate glad_glStencilOpSeparate typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC)(GLenum face, GLenum func, GLint ref, GLuint mask); GLAPI PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate; #define glStencilFuncSeparate glad_glStencilFuncSeparate typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC)(GLenum face, GLuint mask); GLAPI PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate; #define glStencilMaskSeparate glad_glStencilMaskSeparate typedef void (APIENTRYP PFNGLATTACHSHADERPROC)(GLuint program, GLuint shader); GLAPI PFNGLATTACHSHADERPROC glad_glAttachShader; #define glAttachShader glad_glAttachShader typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC)(GLuint program, GLuint index, const GLchar *name); GLAPI PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation; #define glBindAttribLocation glad_glBindAttribLocation typedef void (APIENTRYP PFNGLCOMPILESHADERPROC)(GLuint shader); GLAPI PFNGLCOMPILESHADERPROC glad_glCompileShader; #define glCompileShader glad_glCompileShader typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC)(void); GLAPI PFNGLCREATEPROGRAMPROC glad_glCreateProgram; #define glCreateProgram glad_glCreateProgram typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC)(GLenum type); GLAPI PFNGLCREATESHADERPROC glad_glCreateShader; #define glCreateShader glad_glCreateShader typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC)(GLuint program); GLAPI PFNGLDELETEPROGRAMPROC glad_glDeleteProgram; #define glDeleteProgram glad_glDeleteProgram typedef void (APIENTRYP PFNGLDELETESHADERPROC)(GLuint shader); GLAPI PFNGLDELETESHADERPROC glad_glDeleteShader; #define glDeleteShader glad_glDeleteShader typedef void (APIENTRYP PFNGLDETACHSHADERPROC)(GLuint program, GLuint shader); GLAPI PFNGLDETACHSHADERPROC glad_glDetachShader; #define glDetachShader glad_glDetachShader typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC)(GLuint index); GLAPI PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray; #define glDisableVertexAttribArray glad_glDisableVertexAttribArray typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC)(GLuint index); GLAPI PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray; #define glEnableVertexAttribArray glad_glEnableVertexAttribArray typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); GLAPI PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib; #define glGetActiveAttrib glad_glGetActiveAttrib typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); GLAPI PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform; #define glGetActiveUniform glad_glGetActiveUniform typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC)(GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); GLAPI PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders; #define glGetAttachedShaders glad_glGetAttachedShaders typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC)(GLuint program, const GLchar *name); GLAPI PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation; #define glGetAttribLocation glad_glGetAttribLocation typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC)(GLuint program, GLenum pname, GLint *params); GLAPI PFNGLGETPROGRAMIVPROC glad_glGetProgramiv; #define glGetProgramiv glad_glGetProgramiv typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC)(GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); GLAPI PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog; #define glGetProgramInfoLog glad_glGetProgramInfoLog typedef void (APIENTRYP PFNGLGETSHADERIVPROC)(GLuint shader, GLenum pname, GLint *params); GLAPI PFNGLGETSHADERIVPROC glad_glGetShaderiv; #define glGetShaderiv glad_glGetShaderiv typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); GLAPI PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog; #define glGetShaderInfoLog glad_glGetShaderInfoLog typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); GLAPI PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource; #define glGetShaderSource glad_glGetShaderSource typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC)(GLuint program, const GLchar *name); GLAPI PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation; #define glGetUniformLocation glad_glGetUniformLocation typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC)(GLuint program, GLint location, GLfloat *params); GLAPI PFNGLGETUNIFORMFVPROC glad_glGetUniformfv; #define glGetUniformfv glad_glGetUniformfv typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC)(GLuint program, GLint location, GLint *params); GLAPI PFNGLGETUNIFORMIVPROC glad_glGetUniformiv; #define glGetUniformiv glad_glGetUniformiv typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC)(GLuint index, GLenum pname, GLdouble *params); GLAPI PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv; #define glGetVertexAttribdv glad_glGetVertexAttribdv typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC)(GLuint index, GLenum pname, GLfloat *params); GLAPI PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv; #define glGetVertexAttribfv glad_glGetVertexAttribfv typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC)(GLuint index, GLenum pname, GLint *params); GLAPI PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv; #define glGetVertexAttribiv glad_glGetVertexAttribiv typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC)(GLuint index, GLenum pname, void **pointer); GLAPI PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv; #define glGetVertexAttribPointerv glad_glGetVertexAttribPointerv typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC)(GLuint program); GLAPI PFNGLISPROGRAMPROC glad_glIsProgram; #define glIsProgram glad_glIsProgram typedef GLboolean (APIENTRYP PFNGLISSHADERPROC)(GLuint shader); GLAPI PFNGLISSHADERPROC glad_glIsShader; #define glIsShader glad_glIsShader typedef void (APIENTRYP PFNGLLINKPROGRAMPROC)(GLuint program); GLAPI PFNGLLINKPROGRAMPROC glad_glLinkProgram; #define glLinkProgram glad_glLinkProgram typedef void (APIENTRYP PFNGLSHADERSOURCEPROC)(GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); GLAPI PFNGLSHADERSOURCEPROC glad_glShaderSource; #define glShaderSource glad_glShaderSource typedef void (APIENTRYP PFNGLUSEPROGRAMPROC)(GLuint program); GLAPI PFNGLUSEPROGRAMPROC glad_glUseProgram; #define glUseProgram glad_glUseProgram typedef void (APIENTRYP PFNGLUNIFORM1FPROC)(GLint location, GLfloat v0); GLAPI PFNGLUNIFORM1FPROC glad_glUniform1f; #define glUniform1f glad_glUniform1f typedef void (APIENTRYP PFNGLUNIFORM2FPROC)(GLint location, GLfloat v0, GLfloat v1); GLAPI PFNGLUNIFORM2FPROC glad_glUniform2f; #define glUniform2f glad_glUniform2f typedef void (APIENTRYP PFNGLUNIFORM3FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); GLAPI PFNGLUNIFORM3FPROC glad_glUniform3f; #define glUniform3f glad_glUniform3f typedef void (APIENTRYP PFNGLUNIFORM4FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); GLAPI PFNGLUNIFORM4FPROC glad_glUniform4f; #define glUniform4f glad_glUniform4f typedef void (APIENTRYP PFNGLUNIFORM1IPROC)(GLint location, GLint v0); GLAPI PFNGLUNIFORM1IPROC glad_glUniform1i; #define glUniform1i glad_glUniform1i typedef void (APIENTRYP PFNGLUNIFORM2IPROC)(GLint location, GLint v0, GLint v1); GLAPI PFNGLUNIFORM2IPROC glad_glUniform2i; #define glUniform2i glad_glUniform2i typedef void (APIENTRYP PFNGLUNIFORM3IPROC)(GLint location, GLint v0, GLint v1, GLint v2); GLAPI PFNGLUNIFORM3IPROC glad_glUniform3i; #define glUniform3i glad_glUniform3i typedef void (APIENTRYP PFNGLUNIFORM4IPROC)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); GLAPI PFNGLUNIFORM4IPROC glad_glUniform4i; #define glUniform4i glad_glUniform4i typedef void (APIENTRYP PFNGLUNIFORM1FVPROC)(GLint location, GLsizei count, const GLfloat *value); GLAPI PFNGLUNIFORM1FVPROC glad_glUniform1fv; #define glUniform1fv glad_glUniform1fv typedef void (APIENTRYP PFNGLUNIFORM2FVPROC)(GLint location, GLsizei count, const GLfloat *value); GLAPI PFNGLUNIFORM2FVPROC glad_glUniform2fv; #define glUniform2fv glad_glUniform2fv typedef void (APIENTRYP PFNGLUNIFORM3FVPROC)(GLint location, GLsizei count, const GLfloat *value); GLAPI PFNGLUNIFORM3FVPROC glad_glUniform3fv; #define glUniform3fv glad_glUniform3fv typedef void (APIENTRYP PFNGLUNIFORM4FVPROC)(GLint location, GLsizei count, const GLfloat *value); GLAPI PFNGLUNIFORM4FVPROC glad_glUniform4fv; #define glUniform4fv glad_glUniform4fv typedef void (APIENTRYP PFNGLUNIFORM1IVPROC)(GLint location, GLsizei count, const GLint *value); GLAPI PFNGLUNIFORM1IVPROC glad_glUniform1iv; #define glUniform1iv glad_glUniform1iv typedef void (APIENTRYP PFNGLUNIFORM2IVPROC)(GLint location, GLsizei count, const GLint *value); GLAPI PFNGLUNIFORM2IVPROC glad_glUniform2iv; #define glUniform2iv glad_glUniform2iv typedef void (APIENTRYP PFNGLUNIFORM3IVPROC)(GLint location, GLsizei count, const GLint *value); GLAPI PFNGLUNIFORM3IVPROC glad_glUniform3iv; #define glUniform3iv glad_glUniform3iv typedef void (APIENTRYP PFNGLUNIFORM4IVPROC)(GLint location, GLsizei count, const GLint *value); GLAPI PFNGLUNIFORM4IVPROC glad_glUniform4iv; #define glUniform4iv glad_glUniform4iv typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv; #define glUniformMatrix2fv glad_glUniformMatrix2fv typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv; #define glUniformMatrix3fv glad_glUniformMatrix3fv typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv; #define glUniformMatrix4fv glad_glUniformMatrix4fv typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC)(GLuint program); GLAPI PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram; #define glValidateProgram glad_glValidateProgram typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC)(GLuint index, GLdouble x); GLAPI PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d; #define glVertexAttrib1d glad_glVertexAttrib1d typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC)(GLuint index, const GLdouble *v); GLAPI PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv; #define glVertexAttrib1dv glad_glVertexAttrib1dv typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC)(GLuint index, GLfloat x); GLAPI PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f; #define glVertexAttrib1f glad_glVertexAttrib1f typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC)(GLuint index, const GLfloat *v); GLAPI PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv; #define glVertexAttrib1fv glad_glVertexAttrib1fv typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC)(GLuint index, GLshort x); GLAPI PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s; #define glVertexAttrib1s glad_glVertexAttrib1s typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC)(GLuint index, const GLshort *v); GLAPI PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv; #define glVertexAttrib1sv glad_glVertexAttrib1sv typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC)(GLuint index, GLdouble x, GLdouble y); GLAPI PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d; #define glVertexAttrib2d glad_glVertexAttrib2d typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC)(GLuint index, const GLdouble *v); GLAPI PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv; #define glVertexAttrib2dv glad_glVertexAttrib2dv typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC)(GLuint index, GLfloat x, GLfloat y); GLAPI PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f; #define glVertexAttrib2f glad_glVertexAttrib2f typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC)(GLuint index, const GLfloat *v); GLAPI PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv; #define glVertexAttrib2fv glad_glVertexAttrib2fv typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC)(GLuint index, GLshort x, GLshort y); GLAPI PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s; #define glVertexAttrib2s glad_glVertexAttrib2s typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC)(GLuint index, const GLshort *v); GLAPI PFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv; #define glVertexAttrib2sv glad_glVertexAttrib2sv typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); GLAPI PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d; #define glVertexAttrib3d glad_glVertexAttrib3d typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC)(GLuint index, const GLdouble *v); GLAPI PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv; #define glVertexAttrib3dv glad_glVertexAttrib3dv typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z); GLAPI PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f; #define glVertexAttrib3f glad_glVertexAttrib3f typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC)(GLuint index, const GLfloat *v); GLAPI PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv; #define glVertexAttrib3fv glad_glVertexAttrib3fv typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC)(GLuint index, GLshort x, GLshort y, GLshort z); GLAPI PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s; #define glVertexAttrib3s glad_glVertexAttrib3s typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC)(GLuint index, const GLshort *v); GLAPI PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv; #define glVertexAttrib3sv glad_glVertexAttrib3sv typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC)(GLuint index, const GLbyte *v); GLAPI PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv; #define glVertexAttrib4Nbv glad_glVertexAttrib4Nbv typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC)(GLuint index, const GLint *v); GLAPI PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv; #define glVertexAttrib4Niv glad_glVertexAttrib4Niv typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC)(GLuint index, const GLshort *v); GLAPI PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv; #define glVertexAttrib4Nsv glad_glVertexAttrib4Nsv typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); GLAPI PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub; #define glVertexAttrib4Nub glad_glVertexAttrib4Nub typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC)(GLuint index, const GLubyte *v); GLAPI PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv; #define glVertexAttrib4Nubv glad_glVertexAttrib4Nubv typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC)(GLuint index, const GLuint *v); GLAPI PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv; #define glVertexAttrib4Nuiv glad_glVertexAttrib4Nuiv typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC)(GLuint index, const GLushort *v); GLAPI PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv; #define glVertexAttrib4Nusv glad_glVertexAttrib4Nusv typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC)(GLuint index, const GLbyte *v); GLAPI PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv; #define glVertexAttrib4bv glad_glVertexAttrib4bv typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d; #define glVertexAttrib4d glad_glVertexAttrib4d typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC)(GLuint index, const GLdouble *v); GLAPI PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv; #define glVertexAttrib4dv glad_glVertexAttrib4dv typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f; #define glVertexAttrib4f glad_glVertexAttrib4f typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC)(GLuint index, const GLfloat *v); GLAPI PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv; #define glVertexAttrib4fv glad_glVertexAttrib4fv typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC)(GLuint index, const GLint *v); GLAPI PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv; #define glVertexAttrib4iv glad_glVertexAttrib4iv typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); GLAPI PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s; #define glVertexAttrib4s glad_glVertexAttrib4s typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC)(GLuint index, const GLshort *v); GLAPI PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv; #define glVertexAttrib4sv glad_glVertexAttrib4sv typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC)(GLuint index, const GLubyte *v); GLAPI PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv; #define glVertexAttrib4ubv glad_glVertexAttrib4ubv typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC)(GLuint index, const GLuint *v); GLAPI PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv; #define glVertexAttrib4uiv glad_glVertexAttrib4uiv typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC)(GLuint index, const GLushort *v); GLAPI PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv; #define glVertexAttrib4usv glad_glVertexAttrib4usv typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); GLAPI PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer; #define glVertexAttribPointer glad_glVertexAttribPointer #endif #ifndef GL_VERSION_2_1 #define GL_VERSION_2_1 1 GLAPI int GLAD_GL_VERSION_2_1; typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv; #define glUniformMatrix2x3fv glad_glUniformMatrix2x3fv typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv; #define glUniformMatrix3x2fv glad_glUniformMatrix3x2fv typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv; #define glUniformMatrix2x4fv glad_glUniformMatrix2x4fv typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv; #define glUniformMatrix4x2fv glad_glUniformMatrix4x2fv typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv; #define glUniformMatrix3x4fv glad_glUniformMatrix3x4fv typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv; #define glUniformMatrix4x3fv glad_glUniformMatrix4x3fv #endif #ifndef GL_VERSION_3_0 #define GL_VERSION_3_0 1 GLAPI int GLAD_GL_VERSION_3_0; typedef void (APIENTRYP PFNGLCOLORMASKIPROC)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); GLAPI PFNGLCOLORMASKIPROC glad_glColorMaski; #define glColorMaski glad_glColorMaski typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC)(GLenum target, GLuint index, GLboolean *data); GLAPI PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v; #define glGetBooleani_v glad_glGetBooleani_v typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC)(GLenum target, GLuint index, GLint *data); GLAPI PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v; #define glGetIntegeri_v glad_glGetIntegeri_v typedef void (APIENTRYP PFNGLENABLEIPROC)(GLenum target, GLuint index); GLAPI PFNGLENABLEIPROC glad_glEnablei; #define glEnablei glad_glEnablei typedef void (APIENTRYP PFNGLDISABLEIPROC)(GLenum target, GLuint index); GLAPI PFNGLDISABLEIPROC glad_glDisablei; #define glDisablei glad_glDisablei typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC)(GLenum target, GLuint index); GLAPI PFNGLISENABLEDIPROC glad_glIsEnabledi; #define glIsEnabledi glad_glIsEnabledi typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC)(GLenum primitiveMode); GLAPI PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback; #define glBeginTransformFeedback glad_glBeginTransformFeedback typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC)(void); GLAPI PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback; #define glEndTransformFeedback glad_glEndTransformFeedback typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); GLAPI PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange; #define glBindBufferRange glad_glBindBufferRange typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC)(GLenum target, GLuint index, GLuint buffer); GLAPI PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase; #define glBindBufferBase glad_glBindBufferBase typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC)(GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); GLAPI PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings; #define glTransformFeedbackVaryings glad_glTransformFeedbackVaryings typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); GLAPI PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying; #define glGetTransformFeedbackVarying glad_glGetTransformFeedbackVarying typedef void (APIENTRYP PFNGLCLAMPCOLORPROC)(GLenum target, GLenum clamp); GLAPI PFNGLCLAMPCOLORPROC glad_glClampColor; #define glClampColor glad_glClampColor typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC)(GLuint id, GLenum mode); GLAPI PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender; #define glBeginConditionalRender glad_glBeginConditionalRender typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC)(void); GLAPI PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender; #define glEndConditionalRender glad_glEndConditionalRender typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); GLAPI PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer; #define glVertexAttribIPointer glad_glVertexAttribIPointer typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC)(GLuint index, GLenum pname, GLint *params); GLAPI PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv; #define glGetVertexAttribIiv glad_glGetVertexAttribIiv typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC)(GLuint index, GLenum pname, GLuint *params); GLAPI PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv; #define glGetVertexAttribIuiv glad_glGetVertexAttribIuiv typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC)(GLuint index, GLint x); GLAPI PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i; #define glVertexAttribI1i glad_glVertexAttribI1i typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC)(GLuint index, GLint x, GLint y); GLAPI PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i; #define glVertexAttribI2i glad_glVertexAttribI2i typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC)(GLuint index, GLint x, GLint y, GLint z); GLAPI PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i; #define glVertexAttribI3i glad_glVertexAttribI3i typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC)(GLuint index, GLint x, GLint y, GLint z, GLint w); GLAPI PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i; #define glVertexAttribI4i glad_glVertexAttribI4i typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC)(GLuint index, GLuint x); GLAPI PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui; #define glVertexAttribI1ui glad_glVertexAttribI1ui typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC)(GLuint index, GLuint x, GLuint y); GLAPI PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui; #define glVertexAttribI2ui glad_glVertexAttribI2ui typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z); GLAPI PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui; #define glVertexAttribI3ui glad_glVertexAttribI3ui typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); GLAPI PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui; #define glVertexAttribI4ui glad_glVertexAttribI4ui typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC)(GLuint index, const GLint *v); GLAPI PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv; #define glVertexAttribI1iv glad_glVertexAttribI1iv typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC)(GLuint index, const GLint *v); GLAPI PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv; #define glVertexAttribI2iv glad_glVertexAttribI2iv typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC)(GLuint index, const GLint *v); GLAPI PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv; #define glVertexAttribI3iv glad_glVertexAttribI3iv typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC)(GLuint index, const GLint *v); GLAPI PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv; #define glVertexAttribI4iv glad_glVertexAttribI4iv typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC)(GLuint index, const GLuint *v); GLAPI PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv; #define glVertexAttribI1uiv glad_glVertexAttribI1uiv typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC)(GLuint index, const GLuint *v); GLAPI PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv; #define glVertexAttribI2uiv glad_glVertexAttribI2uiv typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC)(GLuint index, const GLuint *v); GLAPI PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv; #define glVertexAttribI3uiv glad_glVertexAttribI3uiv typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC)(GLuint index, const GLuint *v); GLAPI PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv; #define glVertexAttribI4uiv glad_glVertexAttribI4uiv typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC)(GLuint index, const GLbyte *v); GLAPI PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv; #define glVertexAttribI4bv glad_glVertexAttribI4bv typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC)(GLuint index, const GLshort *v); GLAPI PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv; #define glVertexAttribI4sv glad_glVertexAttribI4sv typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC)(GLuint index, const GLubyte *v); GLAPI PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv; #define glVertexAttribI4ubv glad_glVertexAttribI4ubv typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC)(GLuint index, const GLushort *v); GLAPI PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv; #define glVertexAttribI4usv glad_glVertexAttribI4usv typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC)(GLuint program, GLint location, GLuint *params); GLAPI PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv; #define glGetUniformuiv glad_glGetUniformuiv typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC)(GLuint program, GLuint color, const GLchar *name); GLAPI PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation; #define glBindFragDataLocation glad_glBindFragDataLocation typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC)(GLuint program, const GLchar *name); GLAPI PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation; #define glGetFragDataLocation glad_glGetFragDataLocation typedef void (APIENTRYP PFNGLUNIFORM1UIPROC)(GLint location, GLuint v0); GLAPI PFNGLUNIFORM1UIPROC glad_glUniform1ui; #define glUniform1ui glad_glUniform1ui typedef void (APIENTRYP PFNGLUNIFORM2UIPROC)(GLint location, GLuint v0, GLuint v1); GLAPI PFNGLUNIFORM2UIPROC glad_glUniform2ui; #define glUniform2ui glad_glUniform2ui typedef void (APIENTRYP PFNGLUNIFORM3UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2); GLAPI PFNGLUNIFORM3UIPROC glad_glUniform3ui; #define glUniform3ui glad_glUniform3ui typedef void (APIENTRYP PFNGLUNIFORM4UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); GLAPI PFNGLUNIFORM4UIPROC glad_glUniform4ui; #define glUniform4ui glad_glUniform4ui typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC)(GLint location, GLsizei count, const GLuint *value); GLAPI PFNGLUNIFORM1UIVPROC glad_glUniform1uiv; #define glUniform1uiv glad_glUniform1uiv typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC)(GLint location, GLsizei count, const GLuint *value); GLAPI PFNGLUNIFORM2UIVPROC glad_glUniform2uiv; #define glUniform2uiv glad_glUniform2uiv typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC)(GLint location, GLsizei count, const GLuint *value); GLAPI PFNGLUNIFORM3UIVPROC glad_glUniform3uiv; #define glUniform3uiv glad_glUniform3uiv typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC)(GLint location, GLsizei count, const GLuint *value); GLAPI PFNGLUNIFORM4UIVPROC glad_glUniform4uiv; #define glUniform4uiv glad_glUniform4uiv typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, const GLint *params); GLAPI PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv; #define glTexParameterIiv glad_glTexParameterIiv typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, const GLuint *params); GLAPI PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv; #define glTexParameterIuiv glad_glTexParameterIuiv typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, GLint *params); GLAPI PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv; #define glGetTexParameterIiv glad_glGetTexParameterIiv typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, GLuint *params); GLAPI PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv; #define glGetTexParameterIuiv glad_glGetTexParameterIuiv typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC)(GLenum buffer, GLint drawbuffer, const GLint *value); GLAPI PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv; #define glClearBufferiv glad_glClearBufferiv typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC)(GLenum buffer, GLint drawbuffer, const GLuint *value); GLAPI PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv; #define glClearBufferuiv glad_glClearBufferuiv typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC)(GLenum buffer, GLint drawbuffer, const GLfloat *value); GLAPI PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv; #define glClearBufferfv glad_glClearBufferfv typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC)(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); GLAPI PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi; #define glClearBufferfi glad_glClearBufferfi typedef const GLubyte * (APIENTRYP PFNGLGETSTRINGIPROC)(GLenum name, GLuint index); GLAPI PFNGLGETSTRINGIPROC glad_glGetStringi; #define glGetStringi glad_glGetStringi typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC)(GLuint renderbuffer); GLAPI PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer; #define glIsRenderbuffer glad_glIsRenderbuffer typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC)(GLenum target, GLuint renderbuffer); GLAPI PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer; #define glBindRenderbuffer glad_glBindRenderbuffer typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC)(GLsizei n, const GLuint *renderbuffers); GLAPI PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers; #define glDeleteRenderbuffers glad_glDeleteRenderbuffers typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC)(GLsizei n, GLuint *renderbuffers); GLAPI PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers; #define glGenRenderbuffers glad_glGenRenderbuffers typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); GLAPI PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage; #define glRenderbufferStorage glad_glRenderbufferStorage typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params); GLAPI PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv; #define glGetRenderbufferParameteriv glad_glGetRenderbufferParameteriv typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC)(GLuint framebuffer); GLAPI PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer; #define glIsFramebuffer glad_glIsFramebuffer typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC)(GLenum target, GLuint framebuffer); GLAPI PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer; #define glBindFramebuffer glad_glBindFramebuffer typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC)(GLsizei n, const GLuint *framebuffers); GLAPI PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers; #define glDeleteFramebuffers glad_glDeleteFramebuffers typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC)(GLsizei n, GLuint *framebuffers); GLAPI PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers; #define glGenFramebuffers glad_glGenFramebuffers typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC)(GLenum target); GLAPI PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus; #define glCheckFramebufferStatus glad_glCheckFramebufferStatus typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLAPI PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D; #define glFramebufferTexture1D glad_glFramebufferTexture1D typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLAPI PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D; #define glFramebufferTexture2D glad_glFramebufferTexture2D typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); GLAPI PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D; #define glFramebufferTexture3D glad_glFramebufferTexture3D typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); GLAPI PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer; #define glFramebufferRenderbuffer glad_glFramebufferRenderbuffer typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(GLenum target, GLenum attachment, GLenum pname, GLint *params); GLAPI PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv; #define glGetFramebufferAttachmentParameteriv glad_glGetFramebufferAttachmentParameteriv typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC)(GLenum target); GLAPI PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap; #define glGenerateMipmap glad_glGenerateMipmap typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); GLAPI PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer; #define glBlitFramebuffer glad_glBlitFramebuffer typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); GLAPI PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample; #define glRenderbufferStorageMultisample glad_glRenderbufferStorageMultisample typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); GLAPI PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer; #define glFramebufferTextureLayer glad_glFramebufferTextureLayer typedef void * (APIENTRYP PFNGLMAPBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); GLAPI PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange; #define glMapBufferRange glad_glMapBufferRange typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length); GLAPI PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange; #define glFlushMappedBufferRange glad_glFlushMappedBufferRange typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC)(GLuint array); GLAPI PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray; #define glBindVertexArray glad_glBindVertexArray typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC)(GLsizei n, const GLuint *arrays); GLAPI PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays; #define glDeleteVertexArrays glad_glDeleteVertexArrays typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC)(GLsizei n, GLuint *arrays); GLAPI PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays; #define glGenVertexArrays glad_glGenVertexArrays typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC)(GLuint array); GLAPI PFNGLISVERTEXARRAYPROC glad_glIsVertexArray; #define glIsVertexArray glad_glIsVertexArray #endif #ifndef GL_VERSION_3_1 #define GL_VERSION_3_1 1 GLAPI int GLAD_GL_VERSION_3_1; typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount); GLAPI PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced; #define glDrawArraysInstanced glad_glDrawArraysInstanced typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); GLAPI PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced; #define glDrawElementsInstanced glad_glDrawElementsInstanced typedef void (APIENTRYP PFNGLTEXBUFFERPROC)(GLenum target, GLenum internalformat, GLuint buffer); GLAPI PFNGLTEXBUFFERPROC glad_glTexBuffer; #define glTexBuffer glad_glTexBuffer typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC)(GLuint index); GLAPI PFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex; #define glPrimitiveRestartIndex glad_glPrimitiveRestartIndex typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); GLAPI PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData; #define glCopyBufferSubData glad_glCopyBufferSubData typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC)(GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); GLAPI PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices; #define glGetUniformIndices glad_glGetUniformIndices typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC)(GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); GLAPI PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv; #define glGetActiveUniformsiv glad_glGetActiveUniformsiv typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC)(GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); GLAPI PFNGLGETACTIVEUNIFORMNAMEPROC glad_glGetActiveUniformName; #define glGetActiveUniformName glad_glGetActiveUniformName typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC)(GLuint program, const GLchar *uniformBlockName); GLAPI PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex; #define glGetUniformBlockIndex glad_glGetUniformBlockIndex typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC)(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); GLAPI PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv; #define glGetActiveUniformBlockiv glad_glGetActiveUniformBlockiv typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); GLAPI PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName; #define glGetActiveUniformBlockName glad_glGetActiveUniformBlockName typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC)(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); GLAPI PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding; #define glUniformBlockBinding glad_glUniformBlockBinding #endif #ifndef GL_VERSION_3_2 #define GL_VERSION_3_2 1 GLAPI int GLAD_GL_VERSION_3_2; typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); GLAPI PFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex; #define glDrawElementsBaseVertex glad_glDrawElementsBaseVertex typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); GLAPI PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex; #define glDrawRangeElementsBaseVertex glad_glDrawRangeElementsBaseVertex typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); GLAPI PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex; #define glDrawElementsInstancedBaseVertex glad_glDrawElementsInstancedBaseVertex typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); GLAPI PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex; #define glMultiDrawElementsBaseVertex glad_glMultiDrawElementsBaseVertex typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC)(GLenum mode); GLAPI PFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex; #define glProvokingVertex glad_glProvokingVertex typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC)(GLenum condition, GLbitfield flags); GLAPI PFNGLFENCESYNCPROC glad_glFenceSync; #define glFenceSync glad_glFenceSync typedef GLboolean (APIENTRYP PFNGLISSYNCPROC)(GLsync sync); GLAPI PFNGLISSYNCPROC glad_glIsSync; #define glIsSync glad_glIsSync typedef void (APIENTRYP PFNGLDELETESYNCPROC)(GLsync sync); GLAPI PFNGLDELETESYNCPROC glad_glDeleteSync; #define glDeleteSync glad_glDeleteSync typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); GLAPI PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync; #define glClientWaitSync glad_glClientWaitSync typedef void (APIENTRYP PFNGLWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); GLAPI PFNGLWAITSYNCPROC glad_glWaitSync; #define glWaitSync glad_glWaitSync typedef void (APIENTRYP PFNGLGETINTEGER64VPROC)(GLenum pname, GLint64 *data); GLAPI PFNGLGETINTEGER64VPROC glad_glGetInteger64v; #define glGetInteger64v glad_glGetInteger64v typedef void (APIENTRYP PFNGLGETSYNCIVPROC)(GLsync sync, GLenum pname, GLsizei count, GLsizei *length, GLint *values); GLAPI PFNGLGETSYNCIVPROC glad_glGetSynciv; #define glGetSynciv glad_glGetSynciv typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC)(GLenum target, GLuint index, GLint64 *data); GLAPI PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v; #define glGetInteger64i_v glad_glGetInteger64i_v typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC)(GLenum target, GLenum pname, GLint64 *params); GLAPI PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v; #define glGetBufferParameteri64v glad_glGetBufferParameteri64v typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level); GLAPI PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture; #define glFramebufferTexture glad_glFramebufferTexture typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); GLAPI PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_glTexImage2DMultisample; #define glTexImage2DMultisample glad_glTexImage2DMultisample typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); GLAPI PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_glTexImage3DMultisample; #define glTexImage3DMultisample glad_glTexImage3DMultisample typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC)(GLenum pname, GLuint index, GLfloat *val); GLAPI PFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv; #define glGetMultisamplefv glad_glGetMultisamplefv typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC)(GLuint maskNumber, GLbitfield mask); GLAPI PFNGLSAMPLEMASKIPROC glad_glSampleMaski; #define glSampleMaski glad_glSampleMaski #endif #ifndef GL_VERSION_3_3 #define GL_VERSION_3_3 1 GLAPI int GLAD_GL_VERSION_3_3; typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)(GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); GLAPI PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed; #define glBindFragDataLocationIndexed glad_glBindFragDataLocationIndexed typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC)(GLuint program, const GLchar *name); GLAPI PFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex; #define glGetFragDataIndex glad_glGetFragDataIndex typedef void (APIENTRYP PFNGLGENSAMPLERSPROC)(GLsizei count, GLuint *samplers); GLAPI PFNGLGENSAMPLERSPROC glad_glGenSamplers; #define glGenSamplers glad_glGenSamplers typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC)(GLsizei count, const GLuint *samplers); GLAPI PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers; #define glDeleteSamplers glad_glDeleteSamplers typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC)(GLuint sampler); GLAPI PFNGLISSAMPLERPROC glad_glIsSampler; #define glIsSampler glad_glIsSampler typedef void (APIENTRYP PFNGLBINDSAMPLERPROC)(GLuint unit, GLuint sampler); GLAPI PFNGLBINDSAMPLERPROC glad_glBindSampler; #define glBindSampler glad_glBindSampler typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC)(GLuint sampler, GLenum pname, GLint param); GLAPI PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri; #define glSamplerParameteri glad_glSamplerParameteri typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, const GLint *param); GLAPI PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv; #define glSamplerParameteriv glad_glSamplerParameteriv typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC)(GLuint sampler, GLenum pname, GLfloat param); GLAPI PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf; #define glSamplerParameterf glad_glSamplerParameterf typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, const GLfloat *param); GLAPI PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv; #define glSamplerParameterfv glad_glSamplerParameterfv typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, const GLint *param); GLAPI PFNGLSAMPLERPARAMETERIIVPROC glad_glSamplerParameterIiv; #define glSamplerParameterIiv glad_glSamplerParameterIiv typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, const GLuint *param); GLAPI PFNGLSAMPLERPARAMETERIUIVPROC glad_glSamplerParameterIuiv; #define glSamplerParameterIuiv glad_glSamplerParameterIuiv typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, GLint *params); GLAPI PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv; #define glGetSamplerParameteriv glad_glGetSamplerParameteriv typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, GLint *params); GLAPI PFNGLGETSAMPLERPARAMETERIIVPROC glad_glGetSamplerParameterIiv; #define glGetSamplerParameterIiv glad_glGetSamplerParameterIiv typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, GLfloat *params); GLAPI PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv; #define glGetSamplerParameterfv glad_glGetSamplerParameterfv typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, GLuint *params); GLAPI PFNGLGETSAMPLERPARAMETERIUIVPROC glad_glGetSamplerParameterIuiv; #define glGetSamplerParameterIuiv glad_glGetSamplerParameterIuiv typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC)(GLuint id, GLenum target); GLAPI PFNGLQUERYCOUNTERPROC glad_glQueryCounter; #define glQueryCounter glad_glQueryCounter typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC)(GLuint id, GLenum pname, GLint64 *params); GLAPI PFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v; #define glGetQueryObjecti64v glad_glGetQueryObjecti64v typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC)(GLuint id, GLenum pname, GLuint64 *params); GLAPI PFNGLGETQUERYOBJECTUI64VPROC glad_glGetQueryObjectui64v; #define glGetQueryObjectui64v glad_glGetQueryObjectui64v typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC)(GLuint index, GLuint divisor); GLAPI PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor; #define glVertexAttribDivisor glad_glVertexAttribDivisor typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); GLAPI PFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui; #define glVertexAttribP1ui glad_glVertexAttribP1ui typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value); GLAPI PFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv; #define glVertexAttribP1uiv glad_glVertexAttribP1uiv typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); GLAPI PFNGLVERTEXATTRIBP2UIPROC glad_glVertexAttribP2ui; #define glVertexAttribP2ui glad_glVertexAttribP2ui typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value); GLAPI PFNGLVERTEXATTRIBP2UIVPROC glad_glVertexAttribP2uiv; #define glVertexAttribP2uiv glad_glVertexAttribP2uiv typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); GLAPI PFNGLVERTEXATTRIBP3UIPROC glad_glVertexAttribP3ui; #define glVertexAttribP3ui glad_glVertexAttribP3ui typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value); GLAPI PFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv; #define glVertexAttribP3uiv glad_glVertexAttribP3uiv typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); GLAPI PFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui; #define glVertexAttribP4ui glad_glVertexAttribP4ui typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value); GLAPI PFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv; #define glVertexAttribP4uiv glad_glVertexAttribP4uiv typedef void (APIENTRYP PFNGLVERTEXP2UIPROC)(GLenum type, GLuint value); GLAPI PFNGLVERTEXP2UIPROC glad_glVertexP2ui; #define glVertexP2ui glad_glVertexP2ui typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC)(GLenum type, const GLuint *value); GLAPI PFNGLVERTEXP2UIVPROC glad_glVertexP2uiv; #define glVertexP2uiv glad_glVertexP2uiv typedef void (APIENTRYP PFNGLVERTEXP3UIPROC)(GLenum type, GLuint value); GLAPI PFNGLVERTEXP3UIPROC glad_glVertexP3ui; #define glVertexP3ui glad_glVertexP3ui typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC)(GLenum type, const GLuint *value); GLAPI PFNGLVERTEXP3UIVPROC glad_glVertexP3uiv; #define glVertexP3uiv glad_glVertexP3uiv typedef void (APIENTRYP PFNGLVERTEXP4UIPROC)(GLenum type, GLuint value); GLAPI PFNGLVERTEXP4UIPROC glad_glVertexP4ui; #define glVertexP4ui glad_glVertexP4ui typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC)(GLenum type, const GLuint *value); GLAPI PFNGLVERTEXP4UIVPROC glad_glVertexP4uiv; #define glVertexP4uiv glad_glVertexP4uiv typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC)(GLenum type, GLuint coords); GLAPI PFNGLTEXCOORDP1UIPROC glad_glTexCoordP1ui; #define glTexCoordP1ui glad_glTexCoordP1ui typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC)(GLenum type, const GLuint *coords); GLAPI PFNGLTEXCOORDP1UIVPROC glad_glTexCoordP1uiv; #define glTexCoordP1uiv glad_glTexCoordP1uiv typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC)(GLenum type, GLuint coords); GLAPI PFNGLTEXCOORDP2UIPROC glad_glTexCoordP2ui; #define glTexCoordP2ui glad_glTexCoordP2ui typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC)(GLenum type, const GLuint *coords); GLAPI PFNGLTEXCOORDP2UIVPROC glad_glTexCoordP2uiv; #define glTexCoordP2uiv glad_glTexCoordP2uiv typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC)(GLenum type, GLuint coords); GLAPI PFNGLTEXCOORDP3UIPROC glad_glTexCoordP3ui; #define glTexCoordP3ui glad_glTexCoordP3ui typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC)(GLenum type, const GLuint *coords); GLAPI PFNGLTEXCOORDP3UIVPROC glad_glTexCoordP3uiv; #define glTexCoordP3uiv glad_glTexCoordP3uiv typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC)(GLenum type, GLuint coords); GLAPI PFNGLTEXCOORDP4UIPROC glad_glTexCoordP4ui; #define glTexCoordP4ui glad_glTexCoordP4ui typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC)(GLenum type, const GLuint *coords); GLAPI PFNGLTEXCOORDP4UIVPROC glad_glTexCoordP4uiv; #define glTexCoordP4uiv glad_glTexCoordP4uiv typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC)(GLenum texture, GLenum type, GLuint coords); GLAPI PFNGLMULTITEXCOORDP1UIPROC glad_glMultiTexCoordP1ui; #define glMultiTexCoordP1ui glad_glMultiTexCoordP1ui typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC)(GLenum texture, GLenum type, const GLuint *coords); GLAPI PFNGLMULTITEXCOORDP1UIVPROC glad_glMultiTexCoordP1uiv; #define glMultiTexCoordP1uiv glad_glMultiTexCoordP1uiv typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC)(GLenum texture, GLenum type, GLuint coords); GLAPI PFNGLMULTITEXCOORDP2UIPROC glad_glMultiTexCoordP2ui; #define glMultiTexCoordP2ui glad_glMultiTexCoordP2ui typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC)(GLenum texture, GLenum type, const GLuint *coords); GLAPI PFNGLMULTITEXCOORDP2UIVPROC glad_glMultiTexCoordP2uiv; #define glMultiTexCoordP2uiv glad_glMultiTexCoordP2uiv typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC)(GLenum texture, GLenum type, GLuint coords); GLAPI PFNGLMULTITEXCOORDP3UIPROC glad_glMultiTexCoordP3ui; #define glMultiTexCoordP3ui glad_glMultiTexCoordP3ui typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC)(GLenum texture, GLenum type, const GLuint *coords); GLAPI PFNGLMULTITEXCOORDP3UIVPROC glad_glMultiTexCoordP3uiv; #define glMultiTexCoordP3uiv glad_glMultiTexCoordP3uiv typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC)(GLenum texture, GLenum type, GLuint coords); GLAPI PFNGLMULTITEXCOORDP4UIPROC glad_glMultiTexCoordP4ui; #define glMultiTexCoordP4ui glad_glMultiTexCoordP4ui typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC)(GLenum texture, GLenum type, const GLuint *coords); GLAPI PFNGLMULTITEXCOORDP4UIVPROC glad_glMultiTexCoordP4uiv; #define glMultiTexCoordP4uiv glad_glMultiTexCoordP4uiv typedef void (APIENTRYP PFNGLNORMALP3UIPROC)(GLenum type, GLuint coords); GLAPI PFNGLNORMALP3UIPROC glad_glNormalP3ui; #define glNormalP3ui glad_glNormalP3ui typedef void (APIENTRYP PFNGLNORMALP3UIVPROC)(GLenum type, const GLuint *coords); GLAPI PFNGLNORMALP3UIVPROC glad_glNormalP3uiv; #define glNormalP3uiv glad_glNormalP3uiv typedef void (APIENTRYP PFNGLCOLORP3UIPROC)(GLenum type, GLuint color); GLAPI PFNGLCOLORP3UIPROC glad_glColorP3ui; #define glColorP3ui glad_glColorP3ui typedef void (APIENTRYP PFNGLCOLORP3UIVPROC)(GLenum type, const GLuint *color); GLAPI PFNGLCOLORP3UIVPROC glad_glColorP3uiv; #define glColorP3uiv glad_glColorP3uiv typedef void (APIENTRYP PFNGLCOLORP4UIPROC)(GLenum type, GLuint color); GLAPI PFNGLCOLORP4UIPROC glad_glColorP4ui; #define glColorP4ui glad_glColorP4ui typedef void (APIENTRYP PFNGLCOLORP4UIVPROC)(GLenum type, const GLuint *color); GLAPI PFNGLCOLORP4UIVPROC glad_glColorP4uiv; #define glColorP4uiv glad_glColorP4uiv typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC)(GLenum type, GLuint color); GLAPI PFNGLSECONDARYCOLORP3UIPROC glad_glSecondaryColorP3ui; #define glSecondaryColorP3ui glad_glSecondaryColorP3ui typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC)(GLenum type, const GLuint *color); GLAPI PFNGLSECONDARYCOLORP3UIVPROC glad_glSecondaryColorP3uiv; #define glSecondaryColorP3uiv glad_glSecondaryColorP3uiv #endif #ifdef __cplusplus } #endif #endif ================================================ FILE: libraries/glad/khrplatform.h ================================================ #ifndef __khrplatform_h_ #define __khrplatform_h_ /* ** Copyright (c) 2008-2018 The Khronos Group Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and/or associated documentation files (the ** "Materials"), to deal in the Materials without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Materials, and to ** permit persons to whom the Materials are furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be included ** in all copies or substantial portions of the Materials. ** ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. */ /* Khronos platform-specific types and definitions. * * The master copy of khrplatform.h is maintained in the Khronos EGL * Registry repository at https://github.com/KhronosGroup/EGL-Registry * The last semantic modification to khrplatform.h was at commit ID: * 67a3e0864c2d75ea5287b9f3d2eb74a745936692 * * Adopters may modify this file to suit their platform. Adopters are * encouraged to submit platform specific modifications to the Khronos * group so that they can be included in future versions of this file. * Please submit changes by filing pull requests or issues on * the EGL Registry repository linked above. * * * See the Implementer's Guidelines for information about where this file * should be located on your system and for more details of its use: * http://www.khronos.org/registry/implementers_guide.pdf * * This file should be included as * #include * by Khronos client API header files that use its types and defines. * * The types in khrplatform.h should only be used to define API-specific types. * * Types defined in khrplatform.h: * khronos_int8_t signed 8 bit * khronos_uint8_t unsigned 8 bit * khronos_int16_t signed 16 bit * khronos_uint16_t unsigned 16 bit * khronos_int32_t signed 32 bit * khronos_uint32_t unsigned 32 bit * khronos_int64_t signed 64 bit * khronos_uint64_t unsigned 64 bit * khronos_intptr_t signed same number of bits as a pointer * khronos_uintptr_t unsigned same number of bits as a pointer * khronos_ssize_t signed size * khronos_usize_t unsigned size * khronos_float_t signed 32 bit floating point * khronos_time_ns_t unsigned 64 bit time in nanoseconds * khronos_utime_nanoseconds_t unsigned time interval or absolute time in * nanoseconds * khronos_stime_nanoseconds_t signed time interval in nanoseconds * khronos_boolean_enum_t enumerated boolean type. This should * only be used as a base type when a client API's boolean type is * an enum. Client APIs which use an integer or other type for * booleans cannot use this as the base type for their boolean. * * Tokens defined in khrplatform.h: * * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. * * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. * * Calling convention macros defined in this file: * KHRONOS_APICALL * KHRONOS_APIENTRY * KHRONOS_APIATTRIBUTES * * These may be used in function prototypes as: * * KHRONOS_APICALL void KHRONOS_APIENTRY funcname( * int arg1, * int arg2) KHRONOS_APIATTRIBUTES; */ #if defined(__SCITECH_SNAP__) && !defined(KHRONOS_STATIC) # define KHRONOS_STATIC 1 #endif /*------------------------------------------------------------------------- * Definition of KHRONOS_APICALL *------------------------------------------------------------------------- * This precedes the return type of the function in the function prototype. */ #if defined(KHRONOS_STATIC) /* If the preprocessor constant KHRONOS_STATIC is defined, make the * header compatible with static linking. */ # define KHRONOS_APICALL #elif defined(_WIN32) # define KHRONOS_APICALL __declspec(dllimport) #elif defined (__SYMBIAN32__) # define KHRONOS_APICALL IMPORT_C #elif defined(__ANDROID__) # define KHRONOS_APICALL __attribute__((visibility("default"))) #else # define KHRONOS_APICALL #endif /*------------------------------------------------------------------------- * Definition of KHRONOS_APIENTRY *------------------------------------------------------------------------- * This follows the return type of the function and precedes the function * name in the function prototype. */ #if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__) /* Win32 but not WinCE */ # define KHRONOS_APIENTRY __stdcall #else # define KHRONOS_APIENTRY #endif /*------------------------------------------------------------------------- * Definition of KHRONOS_APIATTRIBUTES *------------------------------------------------------------------------- * This follows the closing parenthesis of the function prototype arguments. */ #if defined (__ARMCC_2__) #define KHRONOS_APIATTRIBUTES __softfp #else #define KHRONOS_APIATTRIBUTES #endif /*------------------------------------------------------------------------- * basic type definitions *-----------------------------------------------------------------------*/ #if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) /* * Using */ #include typedef int32_t khronos_int32_t; typedef uint32_t khronos_uint32_t; typedef int64_t khronos_int64_t; typedef uint64_t khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 /* * To support platform where unsigned long cannot be used interchangeably with * inptr_t (e.g. CHERI-extended ISAs), we can use the stdint.h intptr_t. * Ideally, we could just use (u)intptr_t everywhere, but this could result in * ABI breakage if khronos_uintptr_t is changed from unsigned long to * unsigned long long or similar (this results in different C++ name mangling). * To avoid changes for existing platforms, we restrict usage of intptr_t to * platforms where the size of a pointer is larger than the size of long. */ #if defined(__SIZEOF_LONG__) && defined(__SIZEOF_POINTER__) #if __SIZEOF_POINTER__ > __SIZEOF_LONG__ #define KHRONOS_USE_INTPTR_T #endif #endif #elif defined(__VMS ) || defined(__sgi) /* * Using */ #include typedef int32_t khronos_int32_t; typedef uint32_t khronos_uint32_t; typedef int64_t khronos_int64_t; typedef uint64_t khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #elif defined(_WIN32) && !defined(__SCITECH_SNAP__) /* * Win32 */ typedef __int32 khronos_int32_t; typedef unsigned __int32 khronos_uint32_t; typedef __int64 khronos_int64_t; typedef unsigned __int64 khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #elif defined(__sun__) || defined(__digital__) /* * Sun or Digital */ typedef int khronos_int32_t; typedef unsigned int khronos_uint32_t; #if defined(__arch64__) || defined(_LP64) typedef long int khronos_int64_t; typedef unsigned long int khronos_uint64_t; #else typedef long long int khronos_int64_t; typedef unsigned long long int khronos_uint64_t; #endif /* __arch64__ */ #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #elif 0 /* * Hypothetical platform with no float or int64 support */ typedef int khronos_int32_t; typedef unsigned int khronos_uint32_t; #define KHRONOS_SUPPORT_INT64 0 #define KHRONOS_SUPPORT_FLOAT 0 #else /* * Generic fallback */ #include typedef int32_t khronos_int32_t; typedef uint32_t khronos_uint32_t; typedef int64_t khronos_int64_t; typedef uint64_t khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #endif /* * Types that are (so far) the same on all platforms */ typedef signed char khronos_int8_t; typedef unsigned char khronos_uint8_t; typedef signed short int khronos_int16_t; typedef unsigned short int khronos_uint16_t; /* * Types that differ between LLP64 and LP64 architectures - in LLP64, * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears * to be the only LLP64 architecture in current use. */ #ifdef KHRONOS_USE_INTPTR_T typedef intptr_t khronos_intptr_t; typedef uintptr_t khronos_uintptr_t; #elif defined(_WIN64) typedef signed long long int khronos_intptr_t; typedef unsigned long long int khronos_uintptr_t; #else typedef signed long int khronos_intptr_t; typedef unsigned long int khronos_uintptr_t; #endif #if defined(_WIN64) typedef signed long long int khronos_ssize_t; typedef unsigned long long int khronos_usize_t; #else typedef signed long int khronos_ssize_t; typedef unsigned long int khronos_usize_t; #endif #if KHRONOS_SUPPORT_FLOAT /* * Float type */ typedef float khronos_float_t; #endif #if KHRONOS_SUPPORT_INT64 /* Time types * * These types can be used to represent a time interval in nanoseconds or * an absolute Unadjusted System Time. Unadjusted System Time is the number * of nanoseconds since some arbitrary system event (e.g. since the last * time the system booted). The Unadjusted System Time is an unsigned * 64 bit value that wraps back to 0 every 584 years. Time intervals * may be either signed or unsigned. */ typedef khronos_uint64_t khronos_utime_nanoseconds_t; typedef khronos_int64_t khronos_stime_nanoseconds_t; #endif /* * Dummy value used to pad enum types to 32 bits. */ #ifndef KHRONOS_MAX_ENUM #define KHRONOS_MAX_ENUM 0x7FFFFFFF #endif /* * Enumerated boolean type * * Values other than zero should be considered to be true. Therefore * comparisons should not be made against KHRONOS_TRUE. */ typedef enum { KHRONOS_FALSE = 0, KHRONOS_TRUE = 1, KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM } khronos_boolean_enum_t; #endif /* __khrplatform_h_ */ ================================================ FILE: libraries/glad/khrplatform_gles3.h ================================================ #ifndef __khrplatform_h_ #define __khrplatform_h_ /* ** Copyright (c) 2008-2018 The Khronos Group Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and/or associated documentation files (the ** "Materials"), to deal in the Materials without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Materials, and to ** permit persons to whom the Materials are furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be included ** in all copies or substantial portions of the Materials. ** ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. */ /* Khronos platform-specific types and definitions. * * The master copy of khrplatform.h is maintained in the Khronos EGL * Registry repository at https://github.com/KhronosGroup/EGL-Registry * The last semantic modification to khrplatform.h was at commit ID: * 67a3e0864c2d75ea5287b9f3d2eb74a745936692 * * Adopters may modify this file to suit their platform. Adopters are * encouraged to submit platform specific modifications to the Khronos * group so that they can be included in future versions of this file. * Please submit changes by filing pull requests or issues on * the EGL Registry repository linked above. * * * See the Implementer's Guidelines for information about where this file * should be located on your system and for more details of its use: * http://www.khronos.org/registry/implementers_guide.pdf * * This file should be included as * #include * by Khronos client API header files that use its types and defines. * * The types in khrplatform.h should only be used to define API-specific types. * * Types defined in khrplatform.h: * khronos_int8_t signed 8 bit * khronos_uint8_t unsigned 8 bit * khronos_int16_t signed 16 bit * khronos_uint16_t unsigned 16 bit * khronos_int32_t signed 32 bit * khronos_uint32_t unsigned 32 bit * khronos_int64_t signed 64 bit * khronos_uint64_t unsigned 64 bit * khronos_intptr_t signed same number of bits as a pointer * khronos_uintptr_t unsigned same number of bits as a pointer * khronos_ssize_t signed size * khronos_usize_t unsigned size * khronos_float_t signed 32 bit floating point * khronos_time_ns_t unsigned 64 bit time in nanoseconds * khronos_utime_nanoseconds_t unsigned time interval or absolute time in * nanoseconds * khronos_stime_nanoseconds_t signed time interval in nanoseconds * khronos_boolean_enum_t enumerated boolean type. This should * only be used as a base type when a client API's boolean type is * an enum. Client APIs which use an integer or other type for * booleans cannot use this as the base type for their boolean. * * Tokens defined in khrplatform.h: * * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. * * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. * * Calling convention macros defined in this file: * KHRONOS_APICALL * KHRONOS_APIENTRY * KHRONOS_APIATTRIBUTES * * These may be used in function prototypes as: * * KHRONOS_APICALL void KHRONOS_APIENTRY funcname( * int arg1, * int arg2) KHRONOS_APIATTRIBUTES; */ #if defined(__SCITECH_SNAP__) && !defined(KHRONOS_STATIC) # define KHRONOS_STATIC 1 #endif /*------------------------------------------------------------------------- * Definition of KHRONOS_APICALL *------------------------------------------------------------------------- * This precedes the return type of the function in the function prototype. */ #if defined(KHRONOS_STATIC) /* If the preprocessor constant KHRONOS_STATIC is defined, make the * header compatible with static linking. */ # define KHRONOS_APICALL #elif defined(_WIN32) # define KHRONOS_APICALL __declspec(dllimport) #elif defined (__SYMBIAN32__) # define KHRONOS_APICALL IMPORT_C #elif defined(__ANDROID__) # define KHRONOS_APICALL __attribute__((visibility("default"))) #else # define KHRONOS_APICALL #endif /*------------------------------------------------------------------------- * Definition of KHRONOS_APIENTRY *------------------------------------------------------------------------- * This follows the return type of the function and precedes the function * name in the function prototype. */ #if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__) /* Win32 but not WinCE */ # define KHRONOS_APIENTRY __stdcall #else # define KHRONOS_APIENTRY #endif /*------------------------------------------------------------------------- * Definition of KHRONOS_APIATTRIBUTES *------------------------------------------------------------------------- * This follows the closing parenthesis of the function prototype arguments. */ #if defined (__ARMCC_2__) #define KHRONOS_APIATTRIBUTES __softfp #else #define KHRONOS_APIATTRIBUTES #endif /*------------------------------------------------------------------------- * basic type definitions *-----------------------------------------------------------------------*/ #if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) /* * Using */ #include typedef int32_t khronos_int32_t; typedef uint32_t khronos_uint32_t; typedef int64_t khronos_int64_t; typedef uint64_t khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 /* * To support platform where unsigned long cannot be used interchangeably with * inptr_t (e.g. CHERI-extended ISAs), we can use the stdint.h intptr_t. * Ideally, we could just use (u)intptr_t everywhere, but this could result in * ABI breakage if khronos_uintptr_t is changed from unsigned long to * unsigned long long or similar (this results in different C++ name mangling). * To avoid changes for existing platforms, we restrict usage of intptr_t to * platforms where the size of a pointer is larger than the size of long. */ #if defined(__SIZEOF_LONG__) && defined(__SIZEOF_POINTER__) #if __SIZEOF_POINTER__ > __SIZEOF_LONG__ #define KHRONOS_USE_INTPTR_T #endif #endif #elif defined(__VMS ) || defined(__sgi) /* * Using */ #include typedef int32_t khronos_int32_t; typedef uint32_t khronos_uint32_t; typedef int64_t khronos_int64_t; typedef uint64_t khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #elif defined(_WIN32) && !defined(__SCITECH_SNAP__) /* * Win32 */ typedef __int32 khronos_int32_t; typedef unsigned __int32 khronos_uint32_t; typedef __int64 khronos_int64_t; typedef unsigned __int64 khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #elif defined(__sun__) || defined(__digital__) /* * Sun or Digital */ typedef int khronos_int32_t; typedef unsigned int khronos_uint32_t; #if defined(__arch64__) || defined(_LP64) typedef long int khronos_int64_t; typedef unsigned long int khronos_uint64_t; #else typedef long long int khronos_int64_t; typedef unsigned long long int khronos_uint64_t; #endif /* __arch64__ */ #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #elif 0 /* * Hypothetical platform with no float or int64 support */ typedef int khronos_int32_t; typedef unsigned int khronos_uint32_t; #define KHRONOS_SUPPORT_INT64 0 #define KHRONOS_SUPPORT_FLOAT 0 #else /* * Generic fallback */ #include typedef int32_t khronos_int32_t; typedef uint32_t khronos_uint32_t; typedef int64_t khronos_int64_t; typedef uint64_t khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #endif /* * Types that are (so far) the same on all platforms */ typedef signed char khronos_int8_t; typedef unsigned char khronos_uint8_t; typedef signed short int khronos_int16_t; typedef unsigned short int khronos_uint16_t; /* * Types that differ between LLP64 and LP64 architectures - in LLP64, * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears * to be the only LLP64 architecture in current use. */ #ifdef KHRONOS_USE_INTPTR_T typedef intptr_t khronos_intptr_t; typedef uintptr_t khronos_uintptr_t; #elif defined(_WIN64) typedef signed long long int khronos_intptr_t; typedef unsigned long long int khronos_uintptr_t; #else typedef signed long int khronos_intptr_t; typedef unsigned long int khronos_uintptr_t; #endif #if defined(_WIN64) typedef signed long long int khronos_ssize_t; typedef unsigned long long int khronos_usize_t; #else typedef signed long int khronos_ssize_t; typedef unsigned long int khronos_usize_t; #endif #if KHRONOS_SUPPORT_FLOAT /* * Float type */ typedef float khronos_float_t; #endif #if KHRONOS_SUPPORT_INT64 /* Time types * * These types can be used to represent a time interval in nanoseconds or * an absolute Unadjusted System Time. Unadjusted System Time is the number * of nanoseconds since some arbitrary system event (e.g. since the last * time the system booted). The Unadjusted System Time is an unsigned * 64 bit value that wraps back to 0 every 584 years. Time intervals * may be either signed or unsigned. */ typedef khronos_uint64_t khronos_utime_nanoseconds_t; typedef khronos_int64_t khronos_stime_nanoseconds_t; #endif /* * Dummy value used to pad enum types to 32 bits. */ #ifndef KHRONOS_MAX_ENUM #define KHRONOS_MAX_ENUM 0x7FFFFFFF #endif /* * Enumerated boolean type * * Values other than zero should be considered to be true. Therefore * comparisons should not be made against KHRONOS_TRUE. */ typedef enum { KHRONOS_FALSE = 0, KHRONOS_TRUE = 1, KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM } khronos_boolean_enum_t; #endif /* __khrplatform_h_ */ ================================================ FILE: libraries/glfw/glfw3.h ================================================ /************************************************************************* * GLFW 3.3 - www.glfw.org * A library for OpenGL, window and input *------------------------------------------------------------------------ * Copyright (c) 2002-2006 Marcus Geelnard * Copyright (c) 2006-2019 Camilla Löwy * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would * be appreciated but is not required. * * 2. Altered source versions must be plainly marked as such, and must not * be misrepresented as being the original software. * * 3. This notice may not be removed or altered from any source * distribution. * *************************************************************************/ #ifndef _glfw3_h_ #define _glfw3_h_ #ifdef __cplusplus extern "C" { #endif /************************************************************************* * Doxygen documentation *************************************************************************/ /*! @file glfw3.h * @brief The header of the GLFW 3 API. * * This is the header file of the GLFW 3 API. It defines all its types and * declares all its functions. * * For more information about how to use this file, see @ref build_include. */ /*! @defgroup context Context reference * @brief Functions and types related to OpenGL and OpenGL ES contexts. * * This is the reference documentation for OpenGL and OpenGL ES context related * functions. For more task-oriented information, see the @ref context_guide. */ /*! @defgroup vulkan Vulkan support reference * @brief Functions and types related to Vulkan. * * This is the reference documentation for Vulkan related functions and types. * For more task-oriented information, see the @ref vulkan_guide. */ /*! @defgroup init Initialization, version and error reference * @brief Functions and types related to initialization and error handling. * * This is the reference documentation for initialization and termination of * the library, version management and error handling. For more task-oriented * information, see the @ref intro_guide. */ /*! @defgroup input Input reference * @brief Functions and types related to input handling. * * This is the reference documentation for input related functions and types. * For more task-oriented information, see the @ref input_guide. */ /*! @defgroup monitor Monitor reference * @brief Functions and types related to monitors. * * This is the reference documentation for monitor related functions and types. * For more task-oriented information, see the @ref monitor_guide. */ /*! @defgroup window Window reference * @brief Functions and types related to windows. * * This is the reference documentation for window related functions and types, * including creation, deletion and event polling. For more task-oriented * information, see the @ref window_guide. */ /************************************************************************* * Compiler- and platform-specific preprocessor work *************************************************************************/ /* If we are we on Windows, we want a single define for it. */ #if !defined(_WIN32) && (defined(__WIN32__) || defined(WIN32) || defined(__MINGW32__)) #define _WIN32 #endif /* _WIN32 */ /* Include because most Windows GLU headers need wchar_t and * the macOS OpenGL header blocks the definition of ptrdiff_t by glext.h. * Include it unconditionally to avoid surprising side-effects. */ #include /* Include because it is needed by Vulkan and related functions. * Include it unconditionally to avoid surprising side-effects. */ #include #if defined(GLFW_INCLUDE_VULKAN) #include #endif /* Vulkan header */ /* The Vulkan header may have indirectly included windows.h (because of * VK_USE_PLATFORM_WIN32_KHR) so we offer our replacement symbols after it. */ /* It is customary to use APIENTRY for OpenGL function pointer declarations on * all platforms. Additionally, the Windows OpenGL header needs APIENTRY. */ #if !defined(APIENTRY) #if defined(_WIN32) #define APIENTRY __stdcall #else #define APIENTRY #endif #define GLFW_APIENTRY_DEFINED #endif /* APIENTRY */ /* Some Windows OpenGL headers need this. */ #if !defined(WINGDIAPI) && defined(_WIN32) #define WINGDIAPI __declspec(dllimport) #define GLFW_WINGDIAPI_DEFINED #endif /* WINGDIAPI */ /* Some Windows GLU headers need this. */ #if !defined(CALLBACK) && defined(_WIN32) #define CALLBACK __stdcall #define GLFW_CALLBACK_DEFINED #endif /* CALLBACK */ /* Include the chosen OpenGL or OpenGL ES headers. */ #if defined(GLFW_INCLUDE_ES1) #include #if defined(GLFW_INCLUDE_GLEXT) #include #endif #elif defined(GLFW_INCLUDE_ES2) #include #if defined(GLFW_INCLUDE_GLEXT) #include #endif #elif defined(GLFW_INCLUDE_ES3) #include #if defined(GLFW_INCLUDE_GLEXT) #include #endif #elif defined(GLFW_INCLUDE_ES31) #include #if defined(GLFW_INCLUDE_GLEXT) #include #endif #elif defined(GLFW_INCLUDE_ES32) #include #if defined(GLFW_INCLUDE_GLEXT) #include #endif #elif defined(GLFW_INCLUDE_GLCOREARB) #if defined(__APPLE__) #include #if defined(GLFW_INCLUDE_GLEXT) #include #endif /*GLFW_INCLUDE_GLEXT*/ #else /*__APPLE__*/ #include #endif /*__APPLE__*/ #elif defined(GLFW_INCLUDE_GLU) #if defined(__APPLE__) #if defined(GLFW_INCLUDE_GLU) #include #endif #else /*__APPLE__*/ #if defined(GLFW_INCLUDE_GLU) #include #endif #endif /*__APPLE__*/ #elif !defined(GLFW_INCLUDE_NONE) && \ !defined(__gl_h_) && \ !defined(__gles1_gl_h_) && \ !defined(__gles2_gl2_h_) && \ !defined(__gles2_gl3_h_) && \ !defined(__gles2_gl31_h_) && \ !defined(__gles2_gl32_h_) && \ !defined(__gl_glcorearb_h_) && \ !defined(__gl2_h_) /*legacy*/ && \ !defined(__gl3_h_) /*legacy*/ && \ !defined(__gl31_h_) /*legacy*/ && \ !defined(__gl32_h_) /*legacy*/ && \ !defined(__glcorearb_h_) /*legacy*/ && \ !defined(__GL_H__) /*non-standard*/ && \ !defined(__gltypes_h_) /*non-standard*/ && \ !defined(__glee_h_) /*non-standard*/ #if defined(__APPLE__) #if !defined(GLFW_INCLUDE_GLEXT) #define GL_GLEXT_LEGACY #endif #include #else /*__APPLE__*/ #include #if defined(GLFW_INCLUDE_GLEXT) #include #endif #endif /*__APPLE__*/ #endif /* OpenGL and OpenGL ES headers */ #if defined(GLFW_DLL) && defined(_GLFW_BUILD_DLL) /* GLFW_DLL must be defined by applications that are linking against the DLL * version of the GLFW library. _GLFW_BUILD_DLL is defined by the GLFW * configuration header when compiling the DLL version of the library. */ #error "You must not have both GLFW_DLL and _GLFW_BUILD_DLL defined" #endif /* GLFWAPI is used to declare public API functions for export * from the DLL / shared library / dynamic library. */ #if defined(_WIN32) && defined(_GLFW_BUILD_DLL) /* We are building GLFW as a Win32 DLL */ #define GLFWAPI __declspec(dllexport) #elif defined(_WIN32) && defined(GLFW_DLL) /* We are calling GLFW as a Win32 DLL */ #define GLFWAPI __declspec(dllimport) #elif defined(__GNUC__) && defined(_GLFW_BUILD_DLL) /* We are building GLFW as a shared / dynamic library */ #define GLFWAPI __attribute__((visibility("default"))) #else /* We are building or calling GLFW as a static library */ #define GLFWAPI #endif /************************************************************************* * GLFW API tokens *************************************************************************/ /*! @name GLFW version macros * @{ */ /*! @brief The major version number of the GLFW library. * * This is incremented when the API is changed in non-compatible ways. * @ingroup init */ #define GLFW_VERSION_MAJOR 3 /*! @brief The minor version number of the GLFW library. * * This is incremented when features are added to the API but it remains * backward-compatible. * @ingroup init */ #define GLFW_VERSION_MINOR 3 /*! @brief The revision number of the GLFW library. * * This is incremented when a bug fix release is made that does not contain any * API changes. * @ingroup init */ #define GLFW_VERSION_REVISION 4 /*! @} */ /*! @brief One. * * This is only semantic sugar for the number 1. You can instead use `1` or * `true` or `_True` or `GL_TRUE` or `VK_TRUE` or anything else that is equal * to one. * * @ingroup init */ #define GLFW_TRUE 1 /*! @brief Zero. * * This is only semantic sugar for the number 0. You can instead use `0` or * `false` or `_False` or `GL_FALSE` or `VK_FALSE` or anything else that is * equal to zero. * * @ingroup init */ #define GLFW_FALSE 0 /*! @name Key and button actions * @{ */ /*! @brief The key or mouse button was released. * * The key or mouse button was released. * * @ingroup input */ #define GLFW_RELEASE 0 /*! @brief The key or mouse button was pressed. * * The key or mouse button was pressed. * * @ingroup input */ #define GLFW_PRESS 1 /*! @brief The key was held down until it repeated. * * The key was held down until it repeated. * * @ingroup input */ #define GLFW_REPEAT 2 /*! @} */ /*! @defgroup hat_state Joystick hat states * @brief Joystick hat states. * * See [joystick hat input](@ref joystick_hat) for how these are used. * * @ingroup input * @{ */ #define GLFW_HAT_CENTERED 0 #define GLFW_HAT_UP 1 #define GLFW_HAT_RIGHT 2 #define GLFW_HAT_DOWN 4 #define GLFW_HAT_LEFT 8 #define GLFW_HAT_RIGHT_UP (GLFW_HAT_RIGHT | GLFW_HAT_UP) #define GLFW_HAT_RIGHT_DOWN (GLFW_HAT_RIGHT | GLFW_HAT_DOWN) #define GLFW_HAT_LEFT_UP (GLFW_HAT_LEFT | GLFW_HAT_UP) #define GLFW_HAT_LEFT_DOWN (GLFW_HAT_LEFT | GLFW_HAT_DOWN) /*! @} */ /*! @defgroup keys Keyboard keys * @brief Keyboard key IDs. * * See [key input](@ref input_key) for how these are used. * * These key codes are inspired by the _USB HID Usage Tables v1.12_ (p. 53-60), * but re-arranged to map to 7-bit ASCII for printable keys (function keys are * put in the 256+ range). * * The naming of the key codes follow these rules: * - The US keyboard layout is used * - Names of printable alpha-numeric characters are used (e.g. "A", "R", * "3", etc.) * - For non-alphanumeric characters, Unicode:ish names are used (e.g. * "COMMA", "LEFT_SQUARE_BRACKET", etc.). Note that some names do not * correspond to the Unicode standard (usually for brevity) * - Keys that lack a clear US mapping are named "WORLD_x" * - For non-printable keys, custom names are used (e.g. "F4", * "BACKSPACE", etc.) * * @ingroup input * @{ */ /* The unknown key */ #define GLFW_KEY_UNKNOWN -1 /* Printable keys */ #define GLFW_KEY_SPACE 32 #define GLFW_KEY_APOSTROPHE 39 /* ' */ #define GLFW_KEY_COMMA 44 /* , */ #define GLFW_KEY_MINUS 45 /* - */ #define GLFW_KEY_PERIOD 46 /* . */ #define GLFW_KEY_SLASH 47 /* / */ #define GLFW_KEY_0 48 #define GLFW_KEY_1 49 #define GLFW_KEY_2 50 #define GLFW_KEY_3 51 #define GLFW_KEY_4 52 #define GLFW_KEY_5 53 #define GLFW_KEY_6 54 #define GLFW_KEY_7 55 #define GLFW_KEY_8 56 #define GLFW_KEY_9 57 #define GLFW_KEY_SEMICOLON 59 /* ; */ #define GLFW_KEY_EQUAL 61 /* = */ #define GLFW_KEY_A 65 #define GLFW_KEY_B 66 #define GLFW_KEY_C 67 #define GLFW_KEY_D 68 #define GLFW_KEY_E 69 #define GLFW_KEY_F 70 #define GLFW_KEY_G 71 #define GLFW_KEY_H 72 #define GLFW_KEY_I 73 #define GLFW_KEY_J 74 #define GLFW_KEY_K 75 #define GLFW_KEY_L 76 #define GLFW_KEY_M 77 #define GLFW_KEY_N 78 #define GLFW_KEY_O 79 #define GLFW_KEY_P 80 #define GLFW_KEY_Q 81 #define GLFW_KEY_R 82 #define GLFW_KEY_S 83 #define GLFW_KEY_T 84 #define GLFW_KEY_U 85 #define GLFW_KEY_V 86 #define GLFW_KEY_W 87 #define GLFW_KEY_X 88 #define GLFW_KEY_Y 89 #define GLFW_KEY_Z 90 #define GLFW_KEY_LEFT_BRACKET 91 /* [ */ #define GLFW_KEY_BACKSLASH 92 /* \ */ #define GLFW_KEY_RIGHT_BRACKET 93 /* ] */ #define GLFW_KEY_GRAVE_ACCENT 96 /* ` */ #define GLFW_KEY_WORLD_1 161 /* non-US #1 */ #define GLFW_KEY_WORLD_2 162 /* non-US #2 */ /* Function keys */ #define GLFW_KEY_ESCAPE 256 #define GLFW_KEY_ENTER 257 #define GLFW_KEY_TAB 258 #define GLFW_KEY_BACKSPACE 259 #define GLFW_KEY_INSERT 260 #define GLFW_KEY_DELETE 261 #define GLFW_KEY_RIGHT 262 #define GLFW_KEY_LEFT 263 #define GLFW_KEY_DOWN 264 #define GLFW_KEY_UP 265 #define GLFW_KEY_PAGE_UP 266 #define GLFW_KEY_PAGE_DOWN 267 #define GLFW_KEY_HOME 268 #define GLFW_KEY_END 269 #define GLFW_KEY_CAPS_LOCK 280 #define GLFW_KEY_SCROLL_LOCK 281 #define GLFW_KEY_NUM_LOCK 282 #define GLFW_KEY_PRINT_SCREEN 283 #define GLFW_KEY_PAUSE 284 #define GLFW_KEY_F1 290 #define GLFW_KEY_F2 291 #define GLFW_KEY_F3 292 #define GLFW_KEY_F4 293 #define GLFW_KEY_F5 294 #define GLFW_KEY_F6 295 #define GLFW_KEY_F7 296 #define GLFW_KEY_F8 297 #define GLFW_KEY_F9 298 #define GLFW_KEY_F10 299 #define GLFW_KEY_F11 300 #define GLFW_KEY_F12 301 #define GLFW_KEY_F13 302 #define GLFW_KEY_F14 303 #define GLFW_KEY_F15 304 #define GLFW_KEY_F16 305 #define GLFW_KEY_F17 306 #define GLFW_KEY_F18 307 #define GLFW_KEY_F19 308 #define GLFW_KEY_F20 309 #define GLFW_KEY_F21 310 #define GLFW_KEY_F22 311 #define GLFW_KEY_F23 312 #define GLFW_KEY_F24 313 #define GLFW_KEY_F25 314 #define GLFW_KEY_KP_0 320 #define GLFW_KEY_KP_1 321 #define GLFW_KEY_KP_2 322 #define GLFW_KEY_KP_3 323 #define GLFW_KEY_KP_4 324 #define GLFW_KEY_KP_5 325 #define GLFW_KEY_KP_6 326 #define GLFW_KEY_KP_7 327 #define GLFW_KEY_KP_8 328 #define GLFW_KEY_KP_9 329 #define GLFW_KEY_KP_DECIMAL 330 #define GLFW_KEY_KP_DIVIDE 331 #define GLFW_KEY_KP_MULTIPLY 332 #define GLFW_KEY_KP_SUBTRACT 333 #define GLFW_KEY_KP_ADD 334 #define GLFW_KEY_KP_ENTER 335 #define GLFW_KEY_KP_EQUAL 336 #define GLFW_KEY_LEFT_SHIFT 340 #define GLFW_KEY_LEFT_CONTROL 341 #define GLFW_KEY_LEFT_ALT 342 #define GLFW_KEY_LEFT_SUPER 343 #define GLFW_KEY_RIGHT_SHIFT 344 #define GLFW_KEY_RIGHT_CONTROL 345 #define GLFW_KEY_RIGHT_ALT 346 #define GLFW_KEY_RIGHT_SUPER 347 #define GLFW_KEY_MENU 348 #define GLFW_KEY_LAST GLFW_KEY_MENU /*! @} */ /*! @defgroup mods Modifier key flags * @brief Modifier key flags. * * See [key input](@ref input_key) for how these are used. * * @ingroup input * @{ */ /*! @brief If this bit is set one or more Shift keys were held down. * * If this bit is set one or more Shift keys were held down. */ #define GLFW_MOD_SHIFT 0x0001 /*! @brief If this bit is set one or more Control keys were held down. * * If this bit is set one or more Control keys were held down. */ #define GLFW_MOD_CONTROL 0x0002 /*! @brief If this bit is set one or more Alt keys were held down. * * If this bit is set one or more Alt keys were held down. */ #define GLFW_MOD_ALT 0x0004 /*! @brief If this bit is set one or more Super keys were held down. * * If this bit is set one or more Super keys were held down. */ #define GLFW_MOD_SUPER 0x0008 /*! @brief If this bit is set the Caps Lock key is enabled. * * If this bit is set the Caps Lock key is enabled and the @ref * GLFW_LOCK_KEY_MODS input mode is set. */ #define GLFW_MOD_CAPS_LOCK 0x0010 /*! @brief If this bit is set the Num Lock key is enabled. * * If this bit is set the Num Lock key is enabled and the @ref * GLFW_LOCK_KEY_MODS input mode is set. */ #define GLFW_MOD_NUM_LOCK 0x0020 /*! @} */ /*! @defgroup buttons Mouse buttons * @brief Mouse button IDs. * * See [mouse button input](@ref input_mouse_button) for how these are used. * * @ingroup input * @{ */ #define GLFW_MOUSE_BUTTON_1 0 #define GLFW_MOUSE_BUTTON_2 1 #define GLFW_MOUSE_BUTTON_3 2 #define GLFW_MOUSE_BUTTON_4 3 #define GLFW_MOUSE_BUTTON_5 4 #define GLFW_MOUSE_BUTTON_6 5 #define GLFW_MOUSE_BUTTON_7 6 #define GLFW_MOUSE_BUTTON_8 7 #define GLFW_MOUSE_BUTTON_LAST GLFW_MOUSE_BUTTON_8 #define GLFW_MOUSE_BUTTON_LEFT GLFW_MOUSE_BUTTON_1 #define GLFW_MOUSE_BUTTON_RIGHT GLFW_MOUSE_BUTTON_2 #define GLFW_MOUSE_BUTTON_MIDDLE GLFW_MOUSE_BUTTON_3 /*! @} */ /*! @defgroup joysticks Joysticks * @brief Joystick IDs. * * See [joystick input](@ref joystick) for how these are used. * * @ingroup input * @{ */ #define GLFW_JOYSTICK_1 0 #define GLFW_JOYSTICK_2 1 #define GLFW_JOYSTICK_3 2 #define GLFW_JOYSTICK_4 3 #define GLFW_JOYSTICK_5 4 #define GLFW_JOYSTICK_6 5 #define GLFW_JOYSTICK_7 6 #define GLFW_JOYSTICK_8 7 #define GLFW_JOYSTICK_9 8 #define GLFW_JOYSTICK_10 9 #define GLFW_JOYSTICK_11 10 #define GLFW_JOYSTICK_12 11 #define GLFW_JOYSTICK_13 12 #define GLFW_JOYSTICK_14 13 #define GLFW_JOYSTICK_15 14 #define GLFW_JOYSTICK_16 15 #define GLFW_JOYSTICK_LAST GLFW_JOYSTICK_16 /*! @} */ /*! @defgroup gamepad_buttons Gamepad buttons * @brief Gamepad buttons. * * See @ref gamepad for how these are used. * * @ingroup input * @{ */ #define GLFW_GAMEPAD_BUTTON_A 0 #define GLFW_GAMEPAD_BUTTON_B 1 #define GLFW_GAMEPAD_BUTTON_X 2 #define GLFW_GAMEPAD_BUTTON_Y 3 #define GLFW_GAMEPAD_BUTTON_LEFT_BUMPER 4 #define GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER 5 #define GLFW_GAMEPAD_BUTTON_BACK 6 #define GLFW_GAMEPAD_BUTTON_START 7 #define GLFW_GAMEPAD_BUTTON_GUIDE 8 #define GLFW_GAMEPAD_BUTTON_LEFT_THUMB 9 #define GLFW_GAMEPAD_BUTTON_RIGHT_THUMB 10 #define GLFW_GAMEPAD_BUTTON_DPAD_UP 11 #define GLFW_GAMEPAD_BUTTON_DPAD_RIGHT 12 #define GLFW_GAMEPAD_BUTTON_DPAD_DOWN 13 #define GLFW_GAMEPAD_BUTTON_DPAD_LEFT 14 #define GLFW_GAMEPAD_BUTTON_LAST GLFW_GAMEPAD_BUTTON_DPAD_LEFT #define GLFW_GAMEPAD_BUTTON_CROSS GLFW_GAMEPAD_BUTTON_A #define GLFW_GAMEPAD_BUTTON_CIRCLE GLFW_GAMEPAD_BUTTON_B #define GLFW_GAMEPAD_BUTTON_SQUARE GLFW_GAMEPAD_BUTTON_X #define GLFW_GAMEPAD_BUTTON_TRIANGLE GLFW_GAMEPAD_BUTTON_Y /*! @} */ /*! @defgroup gamepad_axes Gamepad axes * @brief Gamepad axes. * * See @ref gamepad for how these are used. * * @ingroup input * @{ */ #define GLFW_GAMEPAD_AXIS_LEFT_X 0 #define GLFW_GAMEPAD_AXIS_LEFT_Y 1 #define GLFW_GAMEPAD_AXIS_RIGHT_X 2 #define GLFW_GAMEPAD_AXIS_RIGHT_Y 3 #define GLFW_GAMEPAD_AXIS_LEFT_TRIGGER 4 #define GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER 5 #define GLFW_GAMEPAD_AXIS_LAST GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER /*! @} */ /*! @defgroup errors Error codes * @brief Error codes. * * See [error handling](@ref error_handling) for how these are used. * * @ingroup init * @{ */ /*! @brief No error has occurred. * * No error has occurred. * * @analysis Yay. */ #define GLFW_NO_ERROR 0 /*! @brief GLFW has not been initialized. * * This occurs if a GLFW function was called that must not be called unless the * library is [initialized](@ref intro_init). * * @analysis Application programmer error. Initialize GLFW before calling any * function that requires initialization. */ #define GLFW_NOT_INITIALIZED 0x00010001 /*! @brief No context is current for this thread. * * This occurs if a GLFW function was called that needs and operates on the * current OpenGL or OpenGL ES context but no context is current on the calling * thread. One such function is @ref glfwSwapInterval. * * @analysis Application programmer error. Ensure a context is current before * calling functions that require a current context. */ #define GLFW_NO_CURRENT_CONTEXT 0x00010002 /*! @brief One of the arguments to the function was an invalid enum value. * * One of the arguments to the function was an invalid enum value, for example * requesting @ref GLFW_RED_BITS with @ref glfwGetWindowAttrib. * * @analysis Application programmer error. Fix the offending call. */ #define GLFW_INVALID_ENUM 0x00010003 /*! @brief One of the arguments to the function was an invalid value. * * One of the arguments to the function was an invalid value, for example * requesting a non-existent OpenGL or OpenGL ES version like 2.7. * * Requesting a valid but unavailable OpenGL or OpenGL ES version will instead * result in a @ref GLFW_VERSION_UNAVAILABLE error. * * @analysis Application programmer error. Fix the offending call. */ #define GLFW_INVALID_VALUE 0x00010004 /*! @brief A memory allocation failed. * * A memory allocation failed. * * @analysis A bug in GLFW or the underlying operating system. Report the bug * to our [issue tracker](https://github.com/glfw/glfw/issues). */ #define GLFW_OUT_OF_MEMORY 0x00010005 /*! @brief GLFW could not find support for the requested API on the system. * * GLFW could not find support for the requested API on the system. * * @analysis The installed graphics driver does not support the requested * API, or does not support it via the chosen context creation backend. * Below are a few examples. * * @par * Some pre-installed Windows graphics drivers do not support OpenGL. AMD only * supports OpenGL ES via EGL, while Nvidia and Intel only support it via * a WGL or GLX extension. macOS does not provide OpenGL ES at all. The Mesa * EGL, OpenGL and OpenGL ES libraries do not interface with the Nvidia binary * driver. Older graphics drivers do not support Vulkan. */ #define GLFW_API_UNAVAILABLE 0x00010006 /*! @brief The requested OpenGL or OpenGL ES version is not available. * * The requested OpenGL or OpenGL ES version (including any requested context * or framebuffer hints) is not available on this machine. * * @analysis The machine does not support your requirements. If your * application is sufficiently flexible, downgrade your requirements and try * again. Otherwise, inform the user that their machine does not match your * requirements. * * @par * Future invalid OpenGL and OpenGL ES versions, for example OpenGL 4.8 if 5.0 * comes out before the 4.x series gets that far, also fail with this error and * not @ref GLFW_INVALID_VALUE, because GLFW cannot know what future versions * will exist. */ #define GLFW_VERSION_UNAVAILABLE 0x00010007 /*! @brief A platform-specific error occurred that does not match any of the * more specific categories. * * A platform-specific error occurred that does not match any of the more * specific categories. * * @analysis A bug or configuration error in GLFW, the underlying operating * system or its drivers, or a lack of required resources. Report the issue to * our [issue tracker](https://github.com/glfw/glfw/issues). */ #define GLFW_PLATFORM_ERROR 0x00010008 /*! @brief The requested format is not supported or available. * * If emitted during window creation, the requested pixel format is not * supported. * * If emitted when querying the clipboard, the contents of the clipboard could * not be converted to the requested format. * * @analysis If emitted during window creation, one or more * [hard constraints](@ref window_hints_hard) did not match any of the * available pixel formats. If your application is sufficiently flexible, * downgrade your requirements and try again. Otherwise, inform the user that * their machine does not match your requirements. * * @par * If emitted when querying the clipboard, ignore the error or report it to * the user, as appropriate. */ #define GLFW_FORMAT_UNAVAILABLE 0x00010009 /*! @brief The specified window does not have an OpenGL or OpenGL ES context. * * A window that does not have an OpenGL or OpenGL ES context was passed to * a function that requires it to have one. * * @analysis Application programmer error. Fix the offending call. */ #define GLFW_NO_WINDOW_CONTEXT 0x0001000A /*! @} */ /*! @addtogroup window * @{ */ /*! @brief Input focus window hint and attribute * * Input focus [window hint](@ref GLFW_FOCUSED_hint) or * [window attribute](@ref GLFW_FOCUSED_attrib). */ #define GLFW_FOCUSED 0x00020001 /*! @brief Window iconification window attribute * * Window iconification [window attribute](@ref GLFW_ICONIFIED_attrib). */ #define GLFW_ICONIFIED 0x00020002 /*! @brief Window resize-ability window hint and attribute * * Window resize-ability [window hint](@ref GLFW_RESIZABLE_hint) and * [window attribute](@ref GLFW_RESIZABLE_attrib). */ #define GLFW_RESIZABLE 0x00020003 /*! @brief Window visibility window hint and attribute * * Window visibility [window hint](@ref GLFW_VISIBLE_hint) and * [window attribute](@ref GLFW_VISIBLE_attrib). */ #define GLFW_VISIBLE 0x00020004 /*! @brief Window decoration window hint and attribute * * Window decoration [window hint](@ref GLFW_DECORATED_hint) and * [window attribute](@ref GLFW_DECORATED_attrib). */ #define GLFW_DECORATED 0x00020005 /*! @brief Window auto-iconification window hint and attribute * * Window auto-iconification [window hint](@ref GLFW_AUTO_ICONIFY_hint) and * [window attribute](@ref GLFW_AUTO_ICONIFY_attrib). */ #define GLFW_AUTO_ICONIFY 0x00020006 /*! @brief Window decoration window hint and attribute * * Window decoration [window hint](@ref GLFW_FLOATING_hint) and * [window attribute](@ref GLFW_FLOATING_attrib). */ #define GLFW_FLOATING 0x00020007 /*! @brief Window maximization window hint and attribute * * Window maximization [window hint](@ref GLFW_MAXIMIZED_hint) and * [window attribute](@ref GLFW_MAXIMIZED_attrib). */ #define GLFW_MAXIMIZED 0x00020008 /*! @brief Cursor centering window hint * * Cursor centering [window hint](@ref GLFW_CENTER_CURSOR_hint). */ #define GLFW_CENTER_CURSOR 0x00020009 /*! @brief Window framebuffer transparency hint and attribute * * Window framebuffer transparency * [window hint](@ref GLFW_TRANSPARENT_FRAMEBUFFER_hint) and * [window attribute](@ref GLFW_TRANSPARENT_FRAMEBUFFER_attrib). */ #define GLFW_TRANSPARENT_FRAMEBUFFER 0x0002000A /*! @brief Mouse cursor hover window attribute. * * Mouse cursor hover [window attribute](@ref GLFW_HOVERED_attrib). */ #define GLFW_HOVERED 0x0002000B /*! @brief Input focus on calling show window hint and attribute * * Input focus [window hint](@ref GLFW_FOCUS_ON_SHOW_hint) or * [window attribute](@ref GLFW_FOCUS_ON_SHOW_attrib). */ #define GLFW_FOCUS_ON_SHOW 0x0002000C /*! @brief Framebuffer bit depth hint. * * Framebuffer bit depth [hint](@ref GLFW_RED_BITS). */ #define GLFW_RED_BITS 0x00021001 /*! @brief Framebuffer bit depth hint. * * Framebuffer bit depth [hint](@ref GLFW_GREEN_BITS). */ #define GLFW_GREEN_BITS 0x00021002 /*! @brief Framebuffer bit depth hint. * * Framebuffer bit depth [hint](@ref GLFW_BLUE_BITS). */ #define GLFW_BLUE_BITS 0x00021003 /*! @brief Framebuffer bit depth hint. * * Framebuffer bit depth [hint](@ref GLFW_ALPHA_BITS). */ #define GLFW_ALPHA_BITS 0x00021004 /*! @brief Framebuffer bit depth hint. * * Framebuffer bit depth [hint](@ref GLFW_DEPTH_BITS). */ #define GLFW_DEPTH_BITS 0x00021005 /*! @brief Framebuffer bit depth hint. * * Framebuffer bit depth [hint](@ref GLFW_STENCIL_BITS). */ #define GLFW_STENCIL_BITS 0x00021006 /*! @brief Framebuffer bit depth hint. * * Framebuffer bit depth [hint](@ref GLFW_ACCUM_RED_BITS). */ #define GLFW_ACCUM_RED_BITS 0x00021007 /*! @brief Framebuffer bit depth hint. * * Framebuffer bit depth [hint](@ref GLFW_ACCUM_GREEN_BITS). */ #define GLFW_ACCUM_GREEN_BITS 0x00021008 /*! @brief Framebuffer bit depth hint. * * Framebuffer bit depth [hint](@ref GLFW_ACCUM_BLUE_BITS). */ #define GLFW_ACCUM_BLUE_BITS 0x00021009 /*! @brief Framebuffer bit depth hint. * * Framebuffer bit depth [hint](@ref GLFW_ACCUM_ALPHA_BITS). */ #define GLFW_ACCUM_ALPHA_BITS 0x0002100A /*! @brief Framebuffer auxiliary buffer hint. * * Framebuffer auxiliary buffer [hint](@ref GLFW_AUX_BUFFERS). */ #define GLFW_AUX_BUFFERS 0x0002100B /*! @brief OpenGL stereoscopic rendering hint. * * OpenGL stereoscopic rendering [hint](@ref GLFW_STEREO). */ #define GLFW_STEREO 0x0002100C /*! @brief Framebuffer MSAA samples hint. * * Framebuffer MSAA samples [hint](@ref GLFW_SAMPLES). */ #define GLFW_SAMPLES 0x0002100D /*! @brief Framebuffer sRGB hint. * * Framebuffer sRGB [hint](@ref GLFW_SRGB_CAPABLE). */ #define GLFW_SRGB_CAPABLE 0x0002100E /*! @brief Monitor refresh rate hint. * * Monitor refresh rate [hint](@ref GLFW_REFRESH_RATE). */ #define GLFW_REFRESH_RATE 0x0002100F /*! @brief Framebuffer double buffering hint. * * Framebuffer double buffering [hint](@ref GLFW_DOUBLEBUFFER). */ #define GLFW_DOUBLEBUFFER 0x00021010 /*! @brief Context client API hint and attribute. * * Context client API [hint](@ref GLFW_CLIENT_API_hint) and * [attribute](@ref GLFW_CLIENT_API_attrib). */ #define GLFW_CLIENT_API 0x00022001 /*! @brief Context client API major version hint and attribute. * * Context client API major version [hint](@ref GLFW_CONTEXT_VERSION_MAJOR_hint) * and [attribute](@ref GLFW_CONTEXT_VERSION_MAJOR_attrib). */ #define GLFW_CONTEXT_VERSION_MAJOR 0x00022002 /*! @brief Context client API minor version hint and attribute. * * Context client API minor version [hint](@ref GLFW_CONTEXT_VERSION_MINOR_hint) * and [attribute](@ref GLFW_CONTEXT_VERSION_MINOR_attrib). */ #define GLFW_CONTEXT_VERSION_MINOR 0x00022003 /*! @brief Context client API revision number hint and attribute. * * Context client API revision number * [attribute](@ref GLFW_CONTEXT_REVISION_attrib). */ #define GLFW_CONTEXT_REVISION 0x00022004 /*! @brief Context robustness hint and attribute. * * Context client API revision number [hint](@ref GLFW_CONTEXT_ROBUSTNESS_hint) * and [attribute](@ref GLFW_CONTEXT_ROBUSTNESS_attrib). */ #define GLFW_CONTEXT_ROBUSTNESS 0x00022005 /*! @brief OpenGL forward-compatibility hint and attribute. * * OpenGL forward-compatibility [hint](@ref GLFW_OPENGL_FORWARD_COMPAT_hint) * and [attribute](@ref GLFW_OPENGL_FORWARD_COMPAT_attrib). */ #define GLFW_OPENGL_FORWARD_COMPAT 0x00022006 /*! @brief Debug mode context hint and attribute. * * Debug mode context [hint](@ref GLFW_OPENGL_DEBUG_CONTEXT_hint) and * [attribute](@ref GLFW_OPENGL_DEBUG_CONTEXT_attrib). */ #define GLFW_OPENGL_DEBUG_CONTEXT 0x00022007 /*! @brief OpenGL profile hint and attribute. * * OpenGL profile [hint](@ref GLFW_OPENGL_PROFILE_hint) and * [attribute](@ref GLFW_OPENGL_PROFILE_attrib). */ #define GLFW_OPENGL_PROFILE 0x00022008 /*! @brief Context flush-on-release hint and attribute. * * Context flush-on-release [hint](@ref GLFW_CONTEXT_RELEASE_BEHAVIOR_hint) and * [attribute](@ref GLFW_CONTEXT_RELEASE_BEHAVIOR_attrib). */ #define GLFW_CONTEXT_RELEASE_BEHAVIOR 0x00022009 /*! @brief Context error suppression hint and attribute. * * Context error suppression [hint](@ref GLFW_CONTEXT_NO_ERROR_hint) and * [attribute](@ref GLFW_CONTEXT_NO_ERROR_attrib). */ #define GLFW_CONTEXT_NO_ERROR 0x0002200A /*! @brief Context creation API hint and attribute. * * Context creation API [hint](@ref GLFW_CONTEXT_CREATION_API_hint) and * [attribute](@ref GLFW_CONTEXT_CREATION_API_attrib). */ #define GLFW_CONTEXT_CREATION_API 0x0002200B /*! @brief Window content area scaling window * [window hint](@ref GLFW_SCALE_TO_MONITOR). */ #define GLFW_SCALE_TO_MONITOR 0x0002200C /*! @brief macOS specific * [window hint](@ref GLFW_COCOA_RETINA_FRAMEBUFFER_hint). */ #define GLFW_COCOA_RETINA_FRAMEBUFFER 0x00023001 /*! @brief macOS specific * [window hint](@ref GLFW_COCOA_FRAME_NAME_hint). */ #define GLFW_COCOA_FRAME_NAME 0x00023002 /*! @brief macOS specific * [window hint](@ref GLFW_COCOA_GRAPHICS_SWITCHING_hint). */ #define GLFW_COCOA_GRAPHICS_SWITCHING 0x00023003 /*! @brief X11 specific * [window hint](@ref GLFW_X11_CLASS_NAME_hint). */ #define GLFW_X11_CLASS_NAME 0x00024001 /*! @brief X11 specific * [window hint](@ref GLFW_X11_CLASS_NAME_hint). */ #define GLFW_X11_INSTANCE_NAME 0x00024002 /*! @} */ #define GLFW_NO_API 0 #define GLFW_OPENGL_API 0x00030001 #define GLFW_OPENGL_ES_API 0x00030002 #define GLFW_NO_ROBUSTNESS 0 #define GLFW_NO_RESET_NOTIFICATION 0x00031001 #define GLFW_LOSE_CONTEXT_ON_RESET 0x00031002 #define GLFW_OPENGL_ANY_PROFILE 0 #define GLFW_OPENGL_CORE_PROFILE 0x00032001 #define GLFW_OPENGL_COMPAT_PROFILE 0x00032002 #define GLFW_CURSOR 0x00033001 #define GLFW_STICKY_KEYS 0x00033002 #define GLFW_STICKY_MOUSE_BUTTONS 0x00033003 #define GLFW_LOCK_KEY_MODS 0x00033004 #define GLFW_RAW_MOUSE_MOTION 0x00033005 #define GLFW_CURSOR_NORMAL 0x00034001 #define GLFW_CURSOR_HIDDEN 0x00034002 #define GLFW_CURSOR_DISABLED 0x00034003 #define GLFW_ANY_RELEASE_BEHAVIOR 0 #define GLFW_RELEASE_BEHAVIOR_FLUSH 0x00035001 #define GLFW_RELEASE_BEHAVIOR_NONE 0x00035002 #define GLFW_NATIVE_CONTEXT_API 0x00036001 #define GLFW_EGL_CONTEXT_API 0x00036002 #define GLFW_OSMESA_CONTEXT_API 0x00036003 /*! @defgroup shapes Standard cursor shapes * @brief Standard system cursor shapes. * * See [standard cursor creation](@ref cursor_standard) for how these are used. * * @ingroup input * @{ */ /*! @brief The regular arrow cursor shape. * * The regular arrow cursor. */ #define GLFW_ARROW_CURSOR 0x00036001 /*! @brief The text input I-beam cursor shape. * * The text input I-beam cursor shape. */ #define GLFW_IBEAM_CURSOR 0x00036002 /*! @brief The crosshair shape. * * The crosshair shape. */ #define GLFW_CROSSHAIR_CURSOR 0x00036003 /*! @brief The hand shape. * * The hand shape. */ #define GLFW_HAND_CURSOR 0x00036004 /*! @brief The horizontal resize arrow shape. * * The horizontal resize arrow shape. */ #define GLFW_HRESIZE_CURSOR 0x00036005 /*! @brief The vertical resize arrow shape. * * The vertical resize arrow shape. */ #define GLFW_VRESIZE_CURSOR 0x00036006 /*! @} */ #define GLFW_CONNECTED 0x00040001 #define GLFW_DISCONNECTED 0x00040002 /*! @addtogroup init * @{ */ /*! @brief Joystick hat buttons init hint. * * Joystick hat buttons [init hint](@ref GLFW_JOYSTICK_HAT_BUTTONS). */ #define GLFW_JOYSTICK_HAT_BUTTONS 0x00050001 /*! @brief macOS specific init hint. * * macOS specific [init hint](@ref GLFW_COCOA_CHDIR_RESOURCES_hint). */ #define GLFW_COCOA_CHDIR_RESOURCES 0x00051001 /*! @brief macOS specific init hint. * * macOS specific [init hint](@ref GLFW_COCOA_MENUBAR_hint). */ #define GLFW_COCOA_MENUBAR 0x00051002 /*! @} */ #define GLFW_DONT_CARE -1 /************************************************************************* * GLFW API types *************************************************************************/ /*! @brief Client API function pointer type. * * Generic function pointer used for returning client API function pointers * without forcing a cast from a regular pointer. * * @sa @ref context_glext * @sa @ref glfwGetProcAddress * * @since Added in version 3.0. * * @ingroup context */ typedef void (*GLFWglproc)(void); /*! @brief Vulkan API function pointer type. * * Generic function pointer used for returning Vulkan API function pointers * without forcing a cast from a regular pointer. * * @sa @ref vulkan_proc * @sa @ref glfwGetInstanceProcAddress * * @since Added in version 3.2. * * @ingroup vulkan */ typedef void (*GLFWvkproc)(void); /*! @brief Opaque monitor object. * * Opaque monitor object. * * @see @ref monitor_object * * @since Added in version 3.0. * * @ingroup monitor */ typedef struct GLFWmonitor GLFWmonitor; /*! @brief Opaque window object. * * Opaque window object. * * @see @ref window_object * * @since Added in version 3.0. * * @ingroup window */ typedef struct GLFWwindow GLFWwindow; /*! @brief Opaque cursor object. * * Opaque cursor object. * * @see @ref cursor_object * * @since Added in version 3.1. * * @ingroup input */ typedef struct GLFWcursor GLFWcursor; /*! @brief The function pointer type for error callbacks. * * This is the function pointer type for error callbacks. An error callback * function has the following signature: * @code * void callback_name(int error_code, const char* description) * @endcode * * @param[in] error_code An [error code](@ref errors). Future releases may add * more error codes. * @param[in] description A UTF-8 encoded string describing the error. * * @pointer_lifetime The error description string is valid until the callback * function returns. * * @sa @ref error_handling * @sa @ref glfwSetErrorCallback * * @since Added in version 3.0. * * @ingroup init */ typedef void (* GLFWerrorfun)(int,const char*); /*! @brief The function pointer type for window position callbacks. * * This is the function pointer type for window position callbacks. A window * position callback function has the following signature: * @code * void callback_name(GLFWwindow* window, int xpos, int ypos) * @endcode * * @param[in] window The window that was moved. * @param[in] xpos The new x-coordinate, in screen coordinates, of the * upper-left corner of the content area of the window. * @param[in] ypos The new y-coordinate, in screen coordinates, of the * upper-left corner of the content area of the window. * * @sa @ref window_pos * @sa @ref glfwSetWindowPosCallback * * @since Added in version 3.0. * * @ingroup window */ typedef void (* GLFWwindowposfun)(GLFWwindow*,int,int); /*! @brief The function pointer type for window size callbacks. * * This is the function pointer type for window size callbacks. A window size * callback function has the following signature: * @code * void callback_name(GLFWwindow* window, int width, int height) * @endcode * * @param[in] window The window that was resized. * @param[in] width The new width, in screen coordinates, of the window. * @param[in] height The new height, in screen coordinates, of the window. * * @sa @ref window_size * @sa @ref glfwSetWindowSizeCallback * * @since Added in version 1.0. * @glfw3 Added window handle parameter. * * @ingroup window */ typedef void (* GLFWwindowsizefun)(GLFWwindow*,int,int); /*! @brief The function pointer type for window close callbacks. * * This is the function pointer type for window close callbacks. A window * close callback function has the following signature: * @code * void function_name(GLFWwindow* window) * @endcode * * @param[in] window The window that the user attempted to close. * * @sa @ref window_close * @sa @ref glfwSetWindowCloseCallback * * @since Added in version 2.5. * @glfw3 Added window handle parameter. * * @ingroup window */ typedef void (* GLFWwindowclosefun)(GLFWwindow*); /*! @brief The function pointer type for window content refresh callbacks. * * This is the function pointer type for window content refresh callbacks. * A window content refresh callback function has the following signature: * @code * void function_name(GLFWwindow* window); * @endcode * * @param[in] window The window whose content needs to be refreshed. * * @sa @ref window_refresh * @sa @ref glfwSetWindowRefreshCallback * * @since Added in version 2.5. * @glfw3 Added window handle parameter. * * @ingroup window */ typedef void (* GLFWwindowrefreshfun)(GLFWwindow*); /*! @brief The function pointer type for window focus callbacks. * * This is the function pointer type for window focus callbacks. A window * focus callback function has the following signature: * @code * void function_name(GLFWwindow* window, int focused) * @endcode * * @param[in] window The window that gained or lost input focus. * @param[in] focused `GLFW_TRUE` if the window was given input focus, or * `GLFW_FALSE` if it lost it. * * @sa @ref window_focus * @sa @ref glfwSetWindowFocusCallback * * @since Added in version 3.0. * * @ingroup window */ typedef void (* GLFWwindowfocusfun)(GLFWwindow*,int); /*! @brief The function pointer type for window iconify callbacks. * * This is the function pointer type for window iconify callbacks. A window * iconify callback function has the following signature: * @code * void function_name(GLFWwindow* window, int iconified) * @endcode * * @param[in] window The window that was iconified or restored. * @param[in] iconified `GLFW_TRUE` if the window was iconified, or * `GLFW_FALSE` if it was restored. * * @sa @ref window_iconify * @sa @ref glfwSetWindowIconifyCallback * * @since Added in version 3.0. * * @ingroup window */ typedef void (* GLFWwindowiconifyfun)(GLFWwindow*,int); /*! @brief The function pointer type for window maximize callbacks. * * This is the function pointer type for window maximize callbacks. A window * maximize callback function has the following signature: * @code * void function_name(GLFWwindow* window, int maximized) * @endcode * * @param[in] window The window that was maximized or restored. * @param[in] maximized `GLFW_TRUE` if the window was maximized, or * `GLFW_FALSE` if it was restored. * * @sa @ref window_maximize * @sa glfwSetWindowMaximizeCallback * * @since Added in version 3.3. * * @ingroup window */ typedef void (* GLFWwindowmaximizefun)(GLFWwindow*,int); /*! @brief The function pointer type for framebuffer size callbacks. * * This is the function pointer type for framebuffer size callbacks. * A framebuffer size callback function has the following signature: * @code * void function_name(GLFWwindow* window, int width, int height) * @endcode * * @param[in] window The window whose framebuffer was resized. * @param[in] width The new width, in pixels, of the framebuffer. * @param[in] height The new height, in pixels, of the framebuffer. * * @sa @ref window_fbsize * @sa @ref glfwSetFramebufferSizeCallback * * @since Added in version 3.0. * * @ingroup window */ typedef void (* GLFWframebuffersizefun)(GLFWwindow*,int,int); /*! @brief The function pointer type for window content scale callbacks. * * This is the function pointer type for window content scale callbacks. * A window content scale callback function has the following signature: * @code * void function_name(GLFWwindow* window, float xscale, float yscale) * @endcode * * @param[in] window The window whose content scale changed. * @param[in] xscale The new x-axis content scale of the window. * @param[in] yscale The new y-axis content scale of the window. * * @sa @ref window_scale * @sa @ref glfwSetWindowContentScaleCallback * * @since Added in version 3.3. * * @ingroup window */ typedef void (* GLFWwindowcontentscalefun)(GLFWwindow*,float,float); /*! @brief The function pointer type for mouse button callbacks. * * This is the function pointer type for mouse button callback functions. * A mouse button callback function has the following signature: * @code * void function_name(GLFWwindow* window, int button, int action, int mods) * @endcode * * @param[in] window The window that received the event. * @param[in] button The [mouse button](@ref buttons) that was pressed or * released. * @param[in] action One of `GLFW_PRESS` or `GLFW_RELEASE`. Future releases * may add more actions. * @param[in] mods Bit field describing which [modifier keys](@ref mods) were * held down. * * @sa @ref input_mouse_button * @sa @ref glfwSetMouseButtonCallback * * @since Added in version 1.0. * @glfw3 Added window handle and modifier mask parameters. * * @ingroup input */ typedef void (* GLFWmousebuttonfun)(GLFWwindow*,int,int,int); /*! @brief The function pointer type for cursor position callbacks. * * This is the function pointer type for cursor position callbacks. A cursor * position callback function has the following signature: * @code * void function_name(GLFWwindow* window, double xpos, double ypos); * @endcode * * @param[in] window The window that received the event. * @param[in] xpos The new cursor x-coordinate, relative to the left edge of * the content area. * @param[in] ypos The new cursor y-coordinate, relative to the top edge of the * content area. * * @sa @ref cursor_pos * @sa @ref glfwSetCursorPosCallback * * @since Added in version 3.0. Replaces `GLFWmouseposfun`. * * @ingroup input */ typedef void (* GLFWcursorposfun)(GLFWwindow*,double,double); /*! @brief The function pointer type for cursor enter/leave callbacks. * * This is the function pointer type for cursor enter/leave callbacks. * A cursor enter/leave callback function has the following signature: * @code * void function_name(GLFWwindow* window, int entered) * @endcode * * @param[in] window The window that received the event. * @param[in] entered `GLFW_TRUE` if the cursor entered the window's content * area, or `GLFW_FALSE` if it left it. * * @sa @ref cursor_enter * @sa @ref glfwSetCursorEnterCallback * * @since Added in version 3.0. * * @ingroup input */ typedef void (* GLFWcursorenterfun)(GLFWwindow*,int); /*! @brief The function pointer type for scroll callbacks. * * This is the function pointer type for scroll callbacks. A scroll callback * function has the following signature: * @code * void function_name(GLFWwindow* window, double xoffset, double yoffset) * @endcode * * @param[in] window The window that received the event. * @param[in] xoffset The scroll offset along the x-axis. * @param[in] yoffset The scroll offset along the y-axis. * * @sa @ref scrolling * @sa @ref glfwSetScrollCallback * * @since Added in version 3.0. Replaces `GLFWmousewheelfun`. * * @ingroup input */ typedef void (* GLFWscrollfun)(GLFWwindow*,double,double); /*! @brief The function pointer type for keyboard key callbacks. * * This is the function pointer type for keyboard key callbacks. A keyboard * key callback function has the following signature: * @code * void function_name(GLFWwindow* window, int key, int scancode, int action, int mods) * @endcode * * @param[in] window The window that received the event. * @param[in] key The [keyboard key](@ref keys) that was pressed or released. * @param[in] scancode The system-specific scancode of the key. * @param[in] action `GLFW_PRESS`, `GLFW_RELEASE` or `GLFW_REPEAT`. Future * releases may add more actions. * @param[in] mods Bit field describing which [modifier keys](@ref mods) were * held down. * * @sa @ref input_key * @sa @ref glfwSetKeyCallback * * @since Added in version 1.0. * @glfw3 Added window handle, scancode and modifier mask parameters. * * @ingroup input */ typedef void (* GLFWkeyfun)(GLFWwindow*,int,int,int,int); /*! @brief The function pointer type for Unicode character callbacks. * * This is the function pointer type for Unicode character callbacks. * A Unicode character callback function has the following signature: * @code * void function_name(GLFWwindow* window, unsigned int codepoint) * @endcode * * @param[in] window The window that received the event. * @param[in] codepoint The Unicode code point of the character. * * @sa @ref input_char * @sa @ref glfwSetCharCallback * * @since Added in version 2.4. * @glfw3 Added window handle parameter. * * @ingroup input */ typedef void (* GLFWcharfun)(GLFWwindow*,unsigned int); /*! @brief The function pointer type for Unicode character with modifiers * callbacks. * * This is the function pointer type for Unicode character with modifiers * callbacks. It is called for each input character, regardless of what * modifier keys are held down. A Unicode character with modifiers callback * function has the following signature: * @code * void function_name(GLFWwindow* window, unsigned int codepoint, int mods) * @endcode * * @param[in] window The window that received the event. * @param[in] codepoint The Unicode code point of the character. * @param[in] mods Bit field describing which [modifier keys](@ref mods) were * held down. * * @sa @ref input_char * @sa @ref glfwSetCharModsCallback * * @deprecated Scheduled for removal in version 4.0. * * @since Added in version 3.1. * * @ingroup input */ typedef void (* GLFWcharmodsfun)(GLFWwindow*,unsigned int,int); /*! @brief The function pointer type for path drop callbacks. * * This is the function pointer type for path drop callbacks. A path drop * callback function has the following signature: * @code * void function_name(GLFWwindow* window, int path_count, const char* paths[]) * @endcode * * @param[in] window The window that received the event. * @param[in] path_count The number of dropped paths. * @param[in] paths The UTF-8 encoded file and/or directory path names. * * @pointer_lifetime The path array and its strings are valid until the * callback function returns. * * @sa @ref path_drop * @sa @ref glfwSetDropCallback * * @since Added in version 3.1. * * @ingroup input */ typedef void (* GLFWdropfun)(GLFWwindow*,int,const char*[]); /*! @brief The function pointer type for monitor configuration callbacks. * * This is the function pointer type for monitor configuration callbacks. * A monitor callback function has the following signature: * @code * void function_name(GLFWmonitor* monitor, int event) * @endcode * * @param[in] monitor The monitor that was connected or disconnected. * @param[in] event One of `GLFW_CONNECTED` or `GLFW_DISCONNECTED`. Future * releases may add more events. * * @sa @ref monitor_event * @sa @ref glfwSetMonitorCallback * * @since Added in version 3.0. * * @ingroup monitor */ typedef void (* GLFWmonitorfun)(GLFWmonitor*,int); /*! @brief The function pointer type for joystick configuration callbacks. * * This is the function pointer type for joystick configuration callbacks. * A joystick configuration callback function has the following signature: * @code * void function_name(int jid, int event) * @endcode * * @param[in] jid The joystick that was connected or disconnected. * @param[in] event One of `GLFW_CONNECTED` or `GLFW_DISCONNECTED`. Future * releases may add more events. * * @sa @ref joystick_event * @sa @ref glfwSetJoystickCallback * * @since Added in version 3.2. * * @ingroup input */ typedef void (* GLFWjoystickfun)(int,int); /*! @brief Video mode type. * * This describes a single video mode. * * @sa @ref monitor_modes * @sa @ref glfwGetVideoMode * @sa @ref glfwGetVideoModes * * @since Added in version 1.0. * @glfw3 Added refresh rate member. * * @ingroup monitor */ typedef struct GLFWvidmode { /*! The width, in screen coordinates, of the video mode. */ int width; /*! The height, in screen coordinates, of the video mode. */ int height; /*! The bit depth of the red channel of the video mode. */ int redBits; /*! The bit depth of the green channel of the video mode. */ int greenBits; /*! The bit depth of the blue channel of the video mode. */ int blueBits; /*! The refresh rate, in Hz, of the video mode. */ int refreshRate; } GLFWvidmode; /*! @brief Gamma ramp. * * This describes the gamma ramp for a monitor. * * @sa @ref monitor_gamma * @sa @ref glfwGetGammaRamp * @sa @ref glfwSetGammaRamp * * @since Added in version 3.0. * * @ingroup monitor */ typedef struct GLFWgammaramp { /*! An array of value describing the response of the red channel. */ unsigned short* red; /*! An array of value describing the response of the green channel. */ unsigned short* green; /*! An array of value describing the response of the blue channel. */ unsigned short* blue; /*! The number of elements in each array. */ unsigned int size; } GLFWgammaramp; /*! @brief Image data. * * This describes a single 2D image. See the documentation for each related * function what the expected pixel format is. * * @sa @ref cursor_custom * @sa @ref window_icon * * @since Added in version 2.1. * @glfw3 Removed format and bytes-per-pixel members. * * @ingroup window */ typedef struct GLFWimage { /*! The width, in pixels, of this image. */ int width; /*! The height, in pixels, of this image. */ int height; /*! The pixel data of this image, arranged left-to-right, top-to-bottom. */ unsigned char* pixels; } GLFWimage; /*! @brief Gamepad input state * * This describes the input state of a gamepad. * * @sa @ref gamepad * @sa @ref glfwGetGamepadState * * @since Added in version 3.3. * * @ingroup input */ typedef struct GLFWgamepadstate { /*! The states of each [gamepad button](@ref gamepad_buttons), `GLFW_PRESS` * or `GLFW_RELEASE`. */ unsigned char buttons[15]; /*! The states of each [gamepad axis](@ref gamepad_axes), in the range -1.0 * to 1.0 inclusive. */ float axes[6]; } GLFWgamepadstate; /************************************************************************* * GLFW API functions *************************************************************************/ /*! @brief Initializes the GLFW library. * * This function initializes the GLFW library. Before most GLFW functions can * be used, GLFW must be initialized, and before an application terminates GLFW * should be terminated in order to free any resources allocated during or * after initialization. * * If this function fails, it calls @ref glfwTerminate before returning. If it * succeeds, you should call @ref glfwTerminate before the application exits. * * Additional calls to this function after successful initialization but before * termination will return `GLFW_TRUE` immediately. * * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_PLATFORM_ERROR. * * @remark @macos This function will change the current directory of the * application to the `Contents/Resources` subdirectory of the application's * bundle, if present. This can be disabled with the @ref * GLFW_COCOA_CHDIR_RESOURCES init hint. * * @remark @x11 This function will set the `LC_CTYPE` category of the * application locale according to the current environment if that category is * still "C". This is because the "C" locale breaks Unicode text input. * * @thread_safety This function must only be called from the main thread. * * @sa @ref intro_init * @sa @ref glfwTerminate * * @since Added in version 1.0. * * @ingroup init */ GLFWAPI int glfwInit(void); /*! @brief Terminates the GLFW library. * * This function destroys all remaining windows and cursors, restores any * modified gamma ramps and frees any other allocated resources. Once this * function is called, you must again call @ref glfwInit successfully before * you will be able to use most GLFW functions. * * If GLFW has been successfully initialized, this function should be called * before the application exits. If initialization fails, there is no need to * call this function, as it is called by @ref glfwInit before it returns * failure. * * This function has no effect if GLFW is not initialized. * * @errors Possible errors include @ref GLFW_PLATFORM_ERROR. * * @remark This function may be called before @ref glfwInit. * * @warning The contexts of any remaining windows must not be current on any * other thread when this function is called. * * @reentrancy This function must not be called from a callback. * * @thread_safety This function must only be called from the main thread. * * @sa @ref intro_init * @sa @ref glfwInit * * @since Added in version 1.0. * * @ingroup init */ GLFWAPI void glfwTerminate(void); /*! @brief Sets the specified init hint to the desired value. * * This function sets hints for the next initialization of GLFW. * * The values you set hints to are never reset by GLFW, but they only take * effect during initialization. Once GLFW has been initialized, any values * you set will be ignored until the library is terminated and initialized * again. * * Some hints are platform specific. These may be set on any platform but they * will only affect their specific platform. Other platforms will ignore them. * Setting these hints requires no platform specific headers or functions. * * @param[in] hint The [init hint](@ref init_hints) to set. * @param[in] value The new value of the init hint. * * @errors Possible errors include @ref GLFW_INVALID_ENUM and @ref * GLFW_INVALID_VALUE. * * @remarks This function may be called before @ref glfwInit. * * @thread_safety This function must only be called from the main thread. * * @sa init_hints * @sa glfwInit * * @since Added in version 3.3. * * @ingroup init */ GLFWAPI void glfwInitHint(int hint, int value); /*! @brief Retrieves the version of the GLFW library. * * This function retrieves the major, minor and revision numbers of the GLFW * library. It is intended for when you are using GLFW as a shared library and * want to ensure that you are using the minimum required version. * * Any or all of the version arguments may be `NULL`. * * @param[out] major Where to store the major version number, or `NULL`. * @param[out] minor Where to store the minor version number, or `NULL`. * @param[out] rev Where to store the revision number, or `NULL`. * * @errors None. * * @remark This function may be called before @ref glfwInit. * * @thread_safety This function may be called from any thread. * * @sa @ref intro_version * @sa @ref glfwGetVersionString * * @since Added in version 1.0. * * @ingroup init */ GLFWAPI void glfwGetVersion(int* major, int* minor, int* rev); /*! @brief Returns a string describing the compile-time configuration. * * This function returns the compile-time generated * [version string](@ref intro_version_string) of the GLFW library binary. It * describes the version, platform, compiler and any platform-specific * compile-time options. It should not be confused with the OpenGL or OpenGL * ES version string, queried with `glGetString`. * * __Do not use the version string__ to parse the GLFW library version. The * @ref glfwGetVersion function provides the version of the running library * binary in numerical format. * * @return The ASCII encoded GLFW version string. * * @errors None. * * @remark This function may be called before @ref glfwInit. * * @pointer_lifetime The returned string is static and compile-time generated. * * @thread_safety This function may be called from any thread. * * @sa @ref intro_version * @sa @ref glfwGetVersion * * @since Added in version 3.0. * * @ingroup init */ GLFWAPI const char* glfwGetVersionString(void); /*! @brief Returns and clears the last error for the calling thread. * * This function returns and clears the [error code](@ref errors) of the last * error that occurred on the calling thread, and optionally a UTF-8 encoded * human-readable description of it. If no error has occurred since the last * call, it returns @ref GLFW_NO_ERROR (zero) and the description pointer is * set to `NULL`. * * @param[in] description Where to store the error description pointer, or `NULL`. * @return The last error code for the calling thread, or @ref GLFW_NO_ERROR * (zero). * * @errors None. * * @pointer_lifetime The returned string is allocated and freed by GLFW. You * should not free it yourself. It is guaranteed to be valid only until the * next error occurs or the library is terminated. * * @remark This function may be called before @ref glfwInit. * * @thread_safety This function may be called from any thread. * * @sa @ref error_handling * @sa @ref glfwSetErrorCallback * * @since Added in version 3.3. * * @ingroup init */ GLFWAPI int glfwGetError(const char** description); /*! @brief Sets the error callback. * * This function sets the error callback, which is called with an error code * and a human-readable description each time a GLFW error occurs. * * The error code is set before the callback is called. Calling @ref * glfwGetError from the error callback will return the same value as the error * code argument. * * The error callback is called on the thread where the error occurred. If you * are using GLFW from multiple threads, your error callback needs to be * written accordingly. * * Because the description string may have been generated specifically for that * error, it is not guaranteed to be valid after the callback has returned. If * you wish to use it after the callback returns, you need to make a copy. * * Once set, the error callback remains set even after the library has been * terminated. * * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set. * * @callback_signature * @code * void callback_name(int error_code, const char* description) * @endcode * For more information about the callback parameters, see the * [callback pointer type](@ref GLFWerrorfun). * * @errors None. * * @remark This function may be called before @ref glfwInit. * * @thread_safety This function must only be called from the main thread. * * @sa @ref error_handling * @sa @ref glfwGetError * * @since Added in version 3.0. * * @ingroup init */ GLFWAPI GLFWerrorfun glfwSetErrorCallback(GLFWerrorfun callback); /*! @brief Returns the currently connected monitors. * * This function returns an array of handles for all currently connected * monitors. The primary monitor is always first in the returned array. If no * monitors were found, this function returns `NULL`. * * @param[out] count Where to store the number of monitors in the returned * array. This is set to zero if an error occurred. * @return An array of monitor handles, or `NULL` if no monitors were found or * if an [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @pointer_lifetime The returned array is allocated and freed by GLFW. You * should not free it yourself. It is guaranteed to be valid only until the * monitor configuration changes or the library is terminated. * * @thread_safety This function must only be called from the main thread. * * @sa @ref monitor_monitors * @sa @ref monitor_event * @sa @ref glfwGetPrimaryMonitor * * @since Added in version 3.0. * * @ingroup monitor */ GLFWAPI GLFWmonitor** glfwGetMonitors(int* count); /*! @brief Returns the primary monitor. * * This function returns the primary monitor. This is usually the monitor * where elements like the task bar or global menu bar are located. * * @return The primary monitor, or `NULL` if no monitors were found or if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @remark The primary monitor is always first in the array returned by @ref * glfwGetMonitors. * * @sa @ref monitor_monitors * @sa @ref glfwGetMonitors * * @since Added in version 3.0. * * @ingroup monitor */ GLFWAPI GLFWmonitor* glfwGetPrimaryMonitor(void); /*! @brief Returns the position of the monitor's viewport on the virtual screen. * * This function returns the position, in screen coordinates, of the upper-left * corner of the specified monitor. * * Any or all of the position arguments may be `NULL`. If an error occurs, all * non-`NULL` position arguments will be set to zero. * * @param[in] monitor The monitor to query. * @param[out] xpos Where to store the monitor x-coordinate, or `NULL`. * @param[out] ypos Where to store the monitor y-coordinate, or `NULL`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref monitor_properties * * @since Added in version 3.0. * * @ingroup monitor */ GLFWAPI void glfwGetMonitorPos(GLFWmonitor* monitor, int* xpos, int* ypos); /*! @brief Retrieves the work area of the monitor. * * This function returns the position, in screen coordinates, of the upper-left * corner of the work area of the specified monitor along with the work area * size in screen coordinates. The work area is defined as the area of the * monitor not occluded by the operating system task bar where present. If no * task bar exists then the work area is the monitor resolution in screen * coordinates. * * Any or all of the position and size arguments may be `NULL`. If an error * occurs, all non-`NULL` position and size arguments will be set to zero. * * @param[in] monitor The monitor to query. * @param[out] xpos Where to store the monitor x-coordinate, or `NULL`. * @param[out] ypos Where to store the monitor y-coordinate, or `NULL`. * @param[out] width Where to store the monitor width, or `NULL`. * @param[out] height Where to store the monitor height, or `NULL`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref monitor_workarea * * @since Added in version 3.3. * * @ingroup monitor */ GLFWAPI void glfwGetMonitorWorkarea(GLFWmonitor* monitor, int* xpos, int* ypos, int* width, int* height); /*! @brief Returns the physical size of the monitor. * * This function returns the size, in millimetres, of the display area of the * specified monitor. * * Some systems do not provide accurate monitor size information, either * because the monitor * [EDID](https://en.wikipedia.org/wiki/Extended_display_identification_data) * data is incorrect or because the driver does not report it accurately. * * Any or all of the size arguments may be `NULL`. If an error occurs, all * non-`NULL` size arguments will be set to zero. * * @param[in] monitor The monitor to query. * @param[out] widthMM Where to store the width, in millimetres, of the * monitor's display area, or `NULL`. * @param[out] heightMM Where to store the height, in millimetres, of the * monitor's display area, or `NULL`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @remark @win32 calculates the returned physical size from the * current resolution and system DPI instead of querying the monitor EDID data. * * @thread_safety This function must only be called from the main thread. * * @sa @ref monitor_properties * * @since Added in version 3.0. * * @ingroup monitor */ GLFWAPI void glfwGetMonitorPhysicalSize(GLFWmonitor* monitor, int* widthMM, int* heightMM); /*! @brief Retrieves the content scale for the specified monitor. * * This function retrieves the content scale for the specified monitor. The * content scale is the ratio between the current DPI and the platform's * default DPI. This is especially important for text and any UI elements. If * the pixel dimensions of your UI scaled by this look appropriate on your * machine then it should appear at a reasonable size on other machines * regardless of their DPI and scaling settings. This relies on the system DPI * and scaling settings being somewhat correct. * * The content scale may depend on both the monitor resolution and pixel * density and on user settings. It may be very different from the raw DPI * calculated from the physical size and current resolution. * * @param[in] monitor The monitor to query. * @param[out] xscale Where to store the x-axis content scale, or `NULL`. * @param[out] yscale Where to store the y-axis content scale, or `NULL`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref monitor_scale * @sa @ref glfwGetWindowContentScale * * @since Added in version 3.3. * * @ingroup monitor */ GLFWAPI void glfwGetMonitorContentScale(GLFWmonitor* monitor, float* xscale, float* yscale); /*! @brief Returns the name of the specified monitor. * * This function returns a human-readable name, encoded as UTF-8, of the * specified monitor. The name typically reflects the make and model of the * monitor and is not guaranteed to be unique among the connected monitors. * * @param[in] monitor The monitor to query. * @return The UTF-8 encoded name of the monitor, or `NULL` if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @pointer_lifetime The returned string is allocated and freed by GLFW. You * should not free it yourself. It is valid until the specified monitor is * disconnected or the library is terminated. * * @thread_safety This function must only be called from the main thread. * * @sa @ref monitor_properties * * @since Added in version 3.0. * * @ingroup monitor */ GLFWAPI const char* glfwGetMonitorName(GLFWmonitor* monitor); /*! @brief Sets the user pointer of the specified monitor. * * This function sets the user-defined pointer of the specified monitor. The * current value is retained until the monitor is disconnected. The initial * value is `NULL`. * * This function may be called from the monitor callback, even for a monitor * that is being disconnected. * * @param[in] monitor The monitor whose pointer to set. * @param[in] pointer The new value. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @sa @ref monitor_userptr * @sa @ref glfwGetMonitorUserPointer * * @since Added in version 3.3. * * @ingroup monitor */ GLFWAPI void glfwSetMonitorUserPointer(GLFWmonitor* monitor, void* pointer); /*! @brief Returns the user pointer of the specified monitor. * * This function returns the current value of the user-defined pointer of the * specified monitor. The initial value is `NULL`. * * This function may be called from the monitor callback, even for a monitor * that is being disconnected. * * @param[in] monitor The monitor whose pointer to return. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @sa @ref monitor_userptr * @sa @ref glfwSetMonitorUserPointer * * @since Added in version 3.3. * * @ingroup monitor */ GLFWAPI void* glfwGetMonitorUserPointer(GLFWmonitor* monitor); /*! @brief Sets the monitor configuration callback. * * This function sets the monitor configuration callback, or removes the * currently set callback. This is called when a monitor is connected to or * disconnected from the system. * * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWmonitor* monitor, int event) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWmonitorfun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref monitor_event * * @since Added in version 3.0. * * @ingroup monitor */ GLFWAPI GLFWmonitorfun glfwSetMonitorCallback(GLFWmonitorfun callback); /*! @brief Returns the available video modes for the specified monitor. * * This function returns an array of all video modes supported by the specified * monitor. The returned array is sorted in ascending order, first by color * bit depth (the sum of all channel depths) and then by resolution area (the * product of width and height). * * @param[in] monitor The monitor to query. * @param[out] count Where to store the number of video modes in the returned * array. This is set to zero if an error occurred. * @return An array of video modes, or `NULL` if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @pointer_lifetime The returned array is allocated and freed by GLFW. You * should not free it yourself. It is valid until the specified monitor is * disconnected, this function is called again for that monitor or the library * is terminated. * * @thread_safety This function must only be called from the main thread. * * @sa @ref monitor_modes * @sa @ref glfwGetVideoMode * * @since Added in version 1.0. * @glfw3 Changed to return an array of modes for a specific monitor. * * @ingroup monitor */ GLFWAPI const GLFWvidmode* glfwGetVideoModes(GLFWmonitor* monitor, int* count); /*! @brief Returns the current mode of the specified monitor. * * This function returns the current video mode of the specified monitor. If * you have created a full screen window for that monitor, the return value * will depend on whether that window is iconified. * * @param[in] monitor The monitor to query. * @return The current mode of the monitor, or `NULL` if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @pointer_lifetime The returned array is allocated and freed by GLFW. You * should not free it yourself. It is valid until the specified monitor is * disconnected or the library is terminated. * * @thread_safety This function must only be called from the main thread. * * @sa @ref monitor_modes * @sa @ref glfwGetVideoModes * * @since Added in version 3.0. Replaces `glfwGetDesktopMode`. * * @ingroup monitor */ GLFWAPI const GLFWvidmode* glfwGetVideoMode(GLFWmonitor* monitor); /*! @brief Generates a gamma ramp and sets it for the specified monitor. * * This function generates an appropriately sized gamma ramp from the specified * exponent and then calls @ref glfwSetGammaRamp with it. The value must be * a finite number greater than zero. * * The software controlled gamma ramp is applied _in addition_ to the hardware * gamma correction, which today is usually an approximation of sRGB gamma. * This means that setting a perfectly linear ramp, or gamma 1.0, will produce * the default (usually sRGB-like) behavior. * * For gamma correct rendering with OpenGL or OpenGL ES, see the @ref * GLFW_SRGB_CAPABLE hint. * * @param[in] monitor The monitor whose gamma ramp to set. * @param[in] gamma The desired exponent. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR. * * @remark @wayland Gamma handling is a privileged protocol, this function * will thus never be implemented and emits @ref GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref monitor_gamma * * @since Added in version 3.0. * * @ingroup monitor */ GLFWAPI void glfwSetGamma(GLFWmonitor* monitor, float gamma); /*! @brief Returns the current gamma ramp for the specified monitor. * * This function returns the current gamma ramp of the specified monitor. * * @param[in] monitor The monitor to query. * @return The current gamma ramp, or `NULL` if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @remark @wayland Gamma handling is a privileged protocol, this function * will thus never be implemented and emits @ref GLFW_PLATFORM_ERROR while * returning `NULL`. * * @pointer_lifetime The returned structure and its arrays are allocated and * freed by GLFW. You should not free them yourself. They are valid until the * specified monitor is disconnected, this function is called again for that * monitor or the library is terminated. * * @thread_safety This function must only be called from the main thread. * * @sa @ref monitor_gamma * * @since Added in version 3.0. * * @ingroup monitor */ GLFWAPI const GLFWgammaramp* glfwGetGammaRamp(GLFWmonitor* monitor); /*! @brief Sets the current gamma ramp for the specified monitor. * * This function sets the current gamma ramp for the specified monitor. The * original gamma ramp for that monitor is saved by GLFW the first time this * function is called and is restored by @ref glfwTerminate. * * The software controlled gamma ramp is applied _in addition_ to the hardware * gamma correction, which today is usually an approximation of sRGB gamma. * This means that setting a perfectly linear ramp, or gamma 1.0, will produce * the default (usually sRGB-like) behavior. * * For gamma correct rendering with OpenGL or OpenGL ES, see the @ref * GLFW_SRGB_CAPABLE hint. * * @param[in] monitor The monitor whose gamma ramp to set. * @param[in] ramp The gamma ramp to use. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @remark The size of the specified gamma ramp should match the size of the * current ramp for that monitor. * * @remark @win32 The gamma ramp size must be 256. * * @remark @wayland Gamma handling is a privileged protocol, this function * will thus never be implemented and emits @ref GLFW_PLATFORM_ERROR. * * @pointer_lifetime The specified gamma ramp is copied before this function * returns. * * @thread_safety This function must only be called from the main thread. * * @sa @ref monitor_gamma * * @since Added in version 3.0. * * @ingroup monitor */ GLFWAPI void glfwSetGammaRamp(GLFWmonitor* monitor, const GLFWgammaramp* ramp); /*! @brief Resets all window hints to their default values. * * This function resets all window hints to their * [default values](@ref window_hints_values). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_hints * @sa @ref glfwWindowHint * @sa @ref glfwWindowHintString * * @since Added in version 3.0. * * @ingroup window */ GLFWAPI void glfwDefaultWindowHints(void); /*! @brief Sets the specified window hint to the desired value. * * This function sets hints for the next call to @ref glfwCreateWindow. The * hints, once set, retain their values until changed by a call to this * function or @ref glfwDefaultWindowHints, or until the library is terminated. * * Only integer value hints can be set with this function. String value hints * are set with @ref glfwWindowHintString. * * This function does not check whether the specified hint values are valid. * If you set hints to invalid values this will instead be reported by the next * call to @ref glfwCreateWindow. * * Some hints are platform specific. These may be set on any platform but they * will only affect their specific platform. Other platforms will ignore them. * Setting these hints requires no platform specific headers or functions. * * @param[in] hint The [window hint](@ref window_hints) to set. * @param[in] value The new value of the window hint. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_INVALID_ENUM. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_hints * @sa @ref glfwWindowHintString * @sa @ref glfwDefaultWindowHints * * @since Added in version 3.0. Replaces `glfwOpenWindowHint`. * * @ingroup window */ GLFWAPI void glfwWindowHint(int hint, int value); /*! @brief Sets the specified window hint to the desired value. * * This function sets hints for the next call to @ref glfwCreateWindow. The * hints, once set, retain their values until changed by a call to this * function or @ref glfwDefaultWindowHints, or until the library is terminated. * * Only string type hints can be set with this function. Integer value hints * are set with @ref glfwWindowHint. * * This function does not check whether the specified hint values are valid. * If you set hints to invalid values this will instead be reported by the next * call to @ref glfwCreateWindow. * * Some hints are platform specific. These may be set on any platform but they * will only affect their specific platform. Other platforms will ignore them. * Setting these hints requires no platform specific headers or functions. * * @param[in] hint The [window hint](@ref window_hints) to set. * @param[in] value The new value of the window hint. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_INVALID_ENUM. * * @pointer_lifetime The specified string is copied before this function * returns. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_hints * @sa @ref glfwWindowHint * @sa @ref glfwDefaultWindowHints * * @since Added in version 3.3. * * @ingroup window */ GLFWAPI void glfwWindowHintString(int hint, const char* value); /*! @brief Creates a window and its associated context. * * This function creates a window and its associated OpenGL or OpenGL ES * context. Most of the options controlling how the window and its context * should be created are specified with [window hints](@ref window_hints). * * Successful creation does not change which context is current. Before you * can use the newly created context, you need to * [make it current](@ref context_current). For information about the `share` * parameter, see @ref context_sharing. * * The created window, framebuffer and context may differ from what you * requested, as not all parameters and hints are * [hard constraints](@ref window_hints_hard). This includes the size of the * window, especially for full screen windows. To query the actual attributes * of the created window, framebuffer and context, see @ref * glfwGetWindowAttrib, @ref glfwGetWindowSize and @ref glfwGetFramebufferSize. * * To create a full screen window, you need to specify the monitor the window * will cover. If no monitor is specified, the window will be windowed mode. * Unless you have a way for the user to choose a specific monitor, it is * recommended that you pick the primary monitor. For more information on how * to query connected monitors, see @ref monitor_monitors. * * For full screen windows, the specified size becomes the resolution of the * window's _desired video mode_. As long as a full screen window is not * iconified, the supported video mode most closely matching the desired video * mode is set for the specified monitor. For more information about full * screen windows, including the creation of so called _windowed full screen_ * or _borderless full screen_ windows, see @ref window_windowed_full_screen. * * Once you have created the window, you can switch it between windowed and * full screen mode with @ref glfwSetWindowMonitor. This will not affect its * OpenGL or OpenGL ES context. * * By default, newly created windows use the placement recommended by the * window system. To create the window at a specific position, make it * initially invisible using the [GLFW_VISIBLE](@ref GLFW_VISIBLE_hint) window * hint, set its [position](@ref window_pos) and then [show](@ref window_hide) * it. * * As long as at least one full screen window is not iconified, the screensaver * is prohibited from starting. * * Window systems put limits on window sizes. Very large or very small window * dimensions may be overridden by the window system on creation. Check the * actual [size](@ref window_size) after creation. * * The [swap interval](@ref buffer_swap) is not set during window creation and * the initial value may vary depending on driver settings and defaults. * * @param[in] width The desired width, in screen coordinates, of the window. * This must be greater than zero. * @param[in] height The desired height, in screen coordinates, of the window. * This must be greater than zero. * @param[in] title The initial, UTF-8 encoded window title. * @param[in] monitor The monitor to use for full screen mode, or `NULL` for * windowed mode. * @param[in] share The window whose context to share resources with, or `NULL` * to not share resources. * @return The handle of the created window, or `NULL` if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_ENUM, @ref GLFW_INVALID_VALUE, @ref GLFW_API_UNAVAILABLE, @ref * GLFW_VERSION_UNAVAILABLE, @ref GLFW_FORMAT_UNAVAILABLE and @ref * GLFW_PLATFORM_ERROR. * * @remark @win32 Window creation will fail if the Microsoft GDI software * OpenGL implementation is the only one available. * * @remark @win32 If the executable has an icon resource named `GLFW_ICON,` it * will be set as the initial icon for the window. If no such icon is present, * the `IDI_APPLICATION` icon will be used instead. To set a different icon, * see @ref glfwSetWindowIcon. * * @remark @win32 The context to share resources with must not be current on * any other thread. * * @remark @macos The OS only supports forward-compatible core profile contexts * for OpenGL versions 3.2 and later. Before creating an OpenGL context of * version 3.2 or later you must set the * [GLFW_OPENGL_FORWARD_COMPAT](@ref GLFW_OPENGL_FORWARD_COMPAT_hint) and * [GLFW_OPENGL_PROFILE](@ref GLFW_OPENGL_PROFILE_hint) hints accordingly. * OpenGL 3.0 and 3.1 contexts are not supported at all on macOS. * * @remark @macos The GLFW window has no icon, as it is not a document * window, but the dock icon will be the same as the application bundle's icon. * For more information on bundles, see the * [Bundle Programming Guide](https://developer.apple.com/library/mac/documentation/CoreFoundation/Conceptual/CFBundles/) * in the Mac Developer Library. * * @remark @macos The first time a window is created the menu bar is created. * If GLFW finds a `MainMenu.nib` it is loaded and assumed to contain a menu * bar. Otherwise a minimal menu bar is created manually with common commands * like Hide, Quit and About. The About entry opens a minimal about dialog * with information from the application's bundle. Menu bar creation can be * disabled entirely with the @ref GLFW_COCOA_MENUBAR init hint. * * @remark @macos On OS X 10.10 and later the window frame will not be rendered * at full resolution on Retina displays unless the * [GLFW_COCOA_RETINA_FRAMEBUFFER](@ref GLFW_COCOA_RETINA_FRAMEBUFFER_hint) * hint is `GLFW_TRUE` and the `NSHighResolutionCapable` key is enabled in the * application bundle's `Info.plist`. For more information, see * [High Resolution Guidelines for OS X](https://developer.apple.com/library/mac/documentation/GraphicsAnimation/Conceptual/HighResolutionOSX/Explained/Explained.html) * in the Mac Developer Library. The GLFW test and example programs use * a custom `Info.plist` template for this, which can be found as * `CMake/MacOSXBundleInfo.plist.in` in the source tree. * * @remark @macos When activating frame autosaving with * [GLFW_COCOA_FRAME_NAME](@ref GLFW_COCOA_FRAME_NAME_hint), the specified * window size and position may be overridden by previously saved values. * * @remark @x11 Some window managers will not respect the placement of * initially hidden windows. * * @remark @x11 Due to the asynchronous nature of X11, it may take a moment for * a window to reach its requested state. This means you may not be able to * query the final size, position or other attributes directly after window * creation. * * @remark @x11 The class part of the `WM_CLASS` window property will by * default be set to the window title passed to this function. The instance * part will use the contents of the `RESOURCE_NAME` environment variable, if * present and not empty, or fall back to the window title. Set the * [GLFW_X11_CLASS_NAME](@ref GLFW_X11_CLASS_NAME_hint) and * [GLFW_X11_INSTANCE_NAME](@ref GLFW_X11_INSTANCE_NAME_hint) window hints to * override this. * * @remark @wayland Compositors should implement the xdg-decoration protocol * for GLFW to decorate the window properly. If this protocol isn't * supported, or if the compositor prefers client-side decorations, a very * simple fallback frame will be drawn using the wp_viewporter protocol. A * compositor can still emit close, maximize or fullscreen events, using for * instance a keybind mechanism. If neither of these protocols is supported, * the window won't be decorated. * * @remark @wayland A full screen window will not attempt to change the mode, * no matter what the requested size or refresh rate. * * @remark @wayland Screensaver inhibition requires the idle-inhibit protocol * to be implemented in the user's compositor. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_creation * @sa @ref glfwDestroyWindow * * @since Added in version 3.0. Replaces `glfwOpenWindow`. * * @ingroup window */ GLFWAPI GLFWwindow* glfwCreateWindow(int width, int height, const char* title, GLFWmonitor* monitor, GLFWwindow* share); /*! @brief Destroys the specified window and its context. * * This function destroys the specified window and its context. On calling * this function, no further callbacks will be called for that window. * * If the context of the specified window is current on the main thread, it is * detached before being destroyed. * * @param[in] window The window to destroy. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @note The context of the specified window must not be current on any other * thread when this function is called. * * @reentrancy This function must not be called from a callback. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_creation * @sa @ref glfwCreateWindow * * @since Added in version 3.0. Replaces `glfwCloseWindow`. * * @ingroup window */ GLFWAPI void glfwDestroyWindow(GLFWwindow* window); /*! @brief Checks the close flag of the specified window. * * This function returns the value of the close flag of the specified window. * * @param[in] window The window to query. * @return The value of the close flag. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @sa @ref window_close * * @since Added in version 3.0. * * @ingroup window */ GLFWAPI int glfwWindowShouldClose(GLFWwindow* window); /*! @brief Sets the close flag of the specified window. * * This function sets the value of the close flag of the specified window. * This can be used to override the user's attempt to close the window, or * to signal that it should be closed. * * @param[in] window The window whose flag to change. * @param[in] value The new value. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @sa @ref window_close * * @since Added in version 3.0. * * @ingroup window */ GLFWAPI void glfwSetWindowShouldClose(GLFWwindow* window, int value); /*! @brief Sets the title of the specified window. * * This function sets the window title, encoded as UTF-8, of the specified * window. * * @param[in] window The window whose title to change. * @param[in] title The UTF-8 encoded window title. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @remark @macos The window title will not be updated until the next time you * process events. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_title * * @since Added in version 1.0. * @glfw3 Added window handle parameter. * * @ingroup window */ GLFWAPI void glfwSetWindowTitle(GLFWwindow* window, const char* title); /*! @brief Sets the icon for the specified window. * * This function sets the icon of the specified window. If passed an array of * candidate images, those of or closest to the sizes desired by the system are * selected. If no images are specified, the window reverts to its default * icon. * * The pixels are 32-bit, little-endian, non-premultiplied RGBA, i.e. eight * bits per channel with the red channel first. They are arranged canonically * as packed sequential rows, starting from the top-left corner. * * The desired image sizes varies depending on platform and system settings. * The selected images will be rescaled as needed. Good sizes include 16x16, * 32x32 and 48x48. * * @param[in] window The window whose icon to set. * @param[in] count The number of images in the specified array, or zero to * revert to the default window icon. * @param[in] images The images to create the icon from. This is ignored if * count is zero. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @pointer_lifetime The specified image data is copied before this function * returns. * * @remark @macos The GLFW window has no icon, as it is not a document * window, so this function does nothing. The dock icon will be the same as * the application bundle's icon. For more information on bundles, see the * [Bundle Programming Guide](https://developer.apple.com/library/mac/documentation/CoreFoundation/Conceptual/CFBundles/) * in the Mac Developer Library. * * @remark @wayland There is no existing protocol to change an icon, the * window will thus inherit the one defined in the application's desktop file. * This function always emits @ref GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_icon * * @since Added in version 3.2. * * @ingroup window */ GLFWAPI void glfwSetWindowIcon(GLFWwindow* window, int count, const GLFWimage* images); /*! @brief Retrieves the position of the content area of the specified window. * * This function retrieves the position, in screen coordinates, of the * upper-left corner of the content area of the specified window. * * Any or all of the position arguments may be `NULL`. If an error occurs, all * non-`NULL` position arguments will be set to zero. * * @param[in] window The window to query. * @param[out] xpos Where to store the x-coordinate of the upper-left corner of * the content area, or `NULL`. * @param[out] ypos Where to store the y-coordinate of the upper-left corner of * the content area, or `NULL`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @remark @wayland There is no way for an application to retrieve the global * position of its windows, this function will always emit @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_pos * @sa @ref glfwSetWindowPos * * @since Added in version 3.0. * * @ingroup window */ GLFWAPI void glfwGetWindowPos(GLFWwindow* window, int* xpos, int* ypos); /*! @brief Sets the position of the content area of the specified window. * * This function sets the position, in screen coordinates, of the upper-left * corner of the content area of the specified windowed mode window. If the * window is a full screen window, this function does nothing. * * __Do not use this function__ to move an already visible window unless you * have very good reasons for doing so, as it will confuse and annoy the user. * * The window manager may put limits on what positions are allowed. GLFW * cannot and should not override these limits. * * @param[in] window The window to query. * @param[in] xpos The x-coordinate of the upper-left corner of the content area. * @param[in] ypos The y-coordinate of the upper-left corner of the content area. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @remark @wayland There is no way for an application to set the global * position of its windows, this function will always emit @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_pos * @sa @ref glfwGetWindowPos * * @since Added in version 1.0. * @glfw3 Added window handle parameter. * * @ingroup window */ GLFWAPI void glfwSetWindowPos(GLFWwindow* window, int xpos, int ypos); /*! @brief Retrieves the size of the content area of the specified window. * * This function retrieves the size, in screen coordinates, of the content area * of the specified window. If you wish to retrieve the size of the * framebuffer of the window in pixels, see @ref glfwGetFramebufferSize. * * Any or all of the size arguments may be `NULL`. If an error occurs, all * non-`NULL` size arguments will be set to zero. * * @param[in] window The window whose size to retrieve. * @param[out] width Where to store the width, in screen coordinates, of the * content area, or `NULL`. * @param[out] height Where to store the height, in screen coordinates, of the * content area, or `NULL`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_size * @sa @ref glfwSetWindowSize * * @since Added in version 1.0. * @glfw3 Added window handle parameter. * * @ingroup window */ GLFWAPI void glfwGetWindowSize(GLFWwindow* window, int* width, int* height); /*! @brief Sets the size limits of the specified window. * * This function sets the size limits of the content area of the specified * window. If the window is full screen, the size limits only take effect * once it is made windowed. If the window is not resizable, this function * does nothing. * * The size limits are applied immediately to a windowed mode window and may * cause it to be resized. * * The maximum dimensions must be greater than or equal to the minimum * dimensions and all must be greater than or equal to zero. * * @param[in] window The window to set limits for. * @param[in] minwidth The minimum width, in screen coordinates, of the content * area, or `GLFW_DONT_CARE`. * @param[in] minheight The minimum height, in screen coordinates, of the * content area, or `GLFW_DONT_CARE`. * @param[in] maxwidth The maximum width, in screen coordinates, of the content * area, or `GLFW_DONT_CARE`. * @param[in] maxheight The maximum height, in screen coordinates, of the * content area, or `GLFW_DONT_CARE`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR. * * @remark If you set size limits and an aspect ratio that conflict, the * results are undefined. * * @remark @wayland The size limits will not be applied until the window is * actually resized, either by the user or by the compositor. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_sizelimits * @sa @ref glfwSetWindowAspectRatio * * @since Added in version 3.2. * * @ingroup window */ GLFWAPI void glfwSetWindowSizeLimits(GLFWwindow* window, int minwidth, int minheight, int maxwidth, int maxheight); /*! @brief Sets the aspect ratio of the specified window. * * This function sets the required aspect ratio of the content area of the * specified window. If the window is full screen, the aspect ratio only takes * effect once it is made windowed. If the window is not resizable, this * function does nothing. * * The aspect ratio is specified as a numerator and a denominator and both * values must be greater than zero. For example, the common 16:9 aspect ratio * is specified as 16 and 9, respectively. * * If the numerator and denominator is set to `GLFW_DONT_CARE` then the aspect * ratio limit is disabled. * * The aspect ratio is applied immediately to a windowed mode window and may * cause it to be resized. * * @param[in] window The window to set limits for. * @param[in] numer The numerator of the desired aspect ratio, or * `GLFW_DONT_CARE`. * @param[in] denom The denominator of the desired aspect ratio, or * `GLFW_DONT_CARE`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR. * * @remark If you set size limits and an aspect ratio that conflict, the * results are undefined. * * @remark @wayland The aspect ratio will not be applied until the window is * actually resized, either by the user or by the compositor. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_sizelimits * @sa @ref glfwSetWindowSizeLimits * * @since Added in version 3.2. * * @ingroup window */ GLFWAPI void glfwSetWindowAspectRatio(GLFWwindow* window, int numer, int denom); /*! @brief Sets the size of the content area of the specified window. * * This function sets the size, in screen coordinates, of the content area of * the specified window. * * For full screen windows, this function updates the resolution of its desired * video mode and switches to the video mode closest to it, without affecting * the window's context. As the context is unaffected, the bit depths of the * framebuffer remain unchanged. * * If you wish to update the refresh rate of the desired video mode in addition * to its resolution, see @ref glfwSetWindowMonitor. * * The window manager may put limits on what sizes are allowed. GLFW cannot * and should not override these limits. * * @param[in] window The window to resize. * @param[in] width The desired width, in screen coordinates, of the window * content area. * @param[in] height The desired height, in screen coordinates, of the window * content area. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @remark @wayland A full screen window will not attempt to change the mode, * no matter what the requested size. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_size * @sa @ref glfwGetWindowSize * @sa @ref glfwSetWindowMonitor * * @since Added in version 1.0. * @glfw3 Added window handle parameter. * * @ingroup window */ GLFWAPI void glfwSetWindowSize(GLFWwindow* window, int width, int height); /*! @brief Retrieves the size of the framebuffer of the specified window. * * This function retrieves the size, in pixels, of the framebuffer of the * specified window. If you wish to retrieve the size of the window in screen * coordinates, see @ref glfwGetWindowSize. * * Any or all of the size arguments may be `NULL`. If an error occurs, all * non-`NULL` size arguments will be set to zero. * * @param[in] window The window whose framebuffer to query. * @param[out] width Where to store the width, in pixels, of the framebuffer, * or `NULL`. * @param[out] height Where to store the height, in pixels, of the framebuffer, * or `NULL`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_fbsize * @sa @ref glfwSetFramebufferSizeCallback * * @since Added in version 3.0. * * @ingroup window */ GLFWAPI void glfwGetFramebufferSize(GLFWwindow* window, int* width, int* height); /*! @brief Retrieves the size of the frame of the window. * * This function retrieves the size, in screen coordinates, of each edge of the * frame of the specified window. This size includes the title bar, if the * window has one. The size of the frame may vary depending on the * [window-related hints](@ref window_hints_wnd) used to create it. * * Because this function retrieves the size of each window frame edge and not * the offset along a particular coordinate axis, the retrieved values will * always be zero or positive. * * Any or all of the size arguments may be `NULL`. If an error occurs, all * non-`NULL` size arguments will be set to zero. * * @param[in] window The window whose frame size to query. * @param[out] left Where to store the size, in screen coordinates, of the left * edge of the window frame, or `NULL`. * @param[out] top Where to store the size, in screen coordinates, of the top * edge of the window frame, or `NULL`. * @param[out] right Where to store the size, in screen coordinates, of the * right edge of the window frame, or `NULL`. * @param[out] bottom Where to store the size, in screen coordinates, of the * bottom edge of the window frame, or `NULL`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_size * * @since Added in version 3.1. * * @ingroup window */ GLFWAPI void glfwGetWindowFrameSize(GLFWwindow* window, int* left, int* top, int* right, int* bottom); /*! @brief Retrieves the content scale for the specified window. * * This function retrieves the content scale for the specified window. The * content scale is the ratio between the current DPI and the platform's * default DPI. This is especially important for text and any UI elements. If * the pixel dimensions of your UI scaled by this look appropriate on your * machine then it should appear at a reasonable size on other machines * regardless of their DPI and scaling settings. This relies on the system DPI * and scaling settings being somewhat correct. * * On systems where each monitors can have its own content scale, the window * content scale will depend on which monitor the system considers the window * to be on. * * @param[in] window The window to query. * @param[out] xscale Where to store the x-axis content scale, or `NULL`. * @param[out] yscale Where to store the y-axis content scale, or `NULL`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_scale * @sa @ref glfwSetWindowContentScaleCallback * @sa @ref glfwGetMonitorContentScale * * @since Added in version 3.3. * * @ingroup window */ GLFWAPI void glfwGetWindowContentScale(GLFWwindow* window, float* xscale, float* yscale); /*! @brief Returns the opacity of the whole window. * * This function returns the opacity of the window, including any decorations. * * The opacity (or alpha) value is a positive finite number between zero and * one, where zero is fully transparent and one is fully opaque. If the system * does not support whole window transparency, this function always returns one. * * The initial opacity value for newly created windows is one. * * @param[in] window The window to query. * @return The opacity value of the specified window. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_transparency * @sa @ref glfwSetWindowOpacity * * @since Added in version 3.3. * * @ingroup window */ GLFWAPI float glfwGetWindowOpacity(GLFWwindow* window); /*! @brief Sets the opacity of the whole window. * * This function sets the opacity of the window, including any decorations. * * The opacity (or alpha) value is a positive finite number between zero and * one, where zero is fully transparent and one is fully opaque. * * The initial opacity value for newly created windows is one. * * A window created with framebuffer transparency may not use whole window * transparency. The results of doing this are undefined. * * @param[in] window The window to set the opacity for. * @param[in] opacity The desired opacity of the specified window. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_transparency * @sa @ref glfwGetWindowOpacity * * @since Added in version 3.3. * * @ingroup window */ GLFWAPI void glfwSetWindowOpacity(GLFWwindow* window, float opacity); /*! @brief Iconifies the specified window. * * This function iconifies (minimizes) the specified window if it was * previously restored. If the window is already iconified, this function does * nothing. * * If the specified window is a full screen window, the original monitor * resolution is restored until the window is restored. * * @param[in] window The window to iconify. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @remark @wayland There is no concept of iconification in wl_shell, this * function will emit @ref GLFW_PLATFORM_ERROR when using this deprecated * protocol. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_iconify * @sa @ref glfwRestoreWindow * @sa @ref glfwMaximizeWindow * * @since Added in version 2.1. * @glfw3 Added window handle parameter. * * @ingroup window */ GLFWAPI void glfwIconifyWindow(GLFWwindow* window); /*! @brief Restores the specified window. * * This function restores the specified window if it was previously iconified * (minimized) or maximized. If the window is already restored, this function * does nothing. * * If the specified window is a full screen window, the resolution chosen for * the window is restored on the selected monitor. * * @param[in] window The window to restore. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_iconify * @sa @ref glfwIconifyWindow * @sa @ref glfwMaximizeWindow * * @since Added in version 2.1. * @glfw3 Added window handle parameter. * * @ingroup window */ GLFWAPI void glfwRestoreWindow(GLFWwindow* window); /*! @brief Maximizes the specified window. * * This function maximizes the specified window if it was previously not * maximized. If the window is already maximized, this function does nothing. * * If the specified window is a full screen window, this function does nothing. * * @param[in] window The window to maximize. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @par Thread Safety * This function may only be called from the main thread. * * @sa @ref window_iconify * @sa @ref glfwIconifyWindow * @sa @ref glfwRestoreWindow * * @since Added in GLFW 3.2. * * @ingroup window */ GLFWAPI void glfwMaximizeWindow(GLFWwindow* window); /*! @brief Makes the specified window visible. * * This function makes the specified window visible if it was previously * hidden. If the window is already visible or is in full screen mode, this * function does nothing. * * By default, windowed mode windows are focused when shown * Set the [GLFW_FOCUS_ON_SHOW](@ref GLFW_FOCUS_ON_SHOW_hint) window hint * to change this behavior for all newly created windows, or change the * behavior for an existing window with @ref glfwSetWindowAttrib. * * @param[in] window The window to make visible. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_hide * @sa @ref glfwHideWindow * * @since Added in version 3.0. * * @ingroup window */ GLFWAPI void glfwShowWindow(GLFWwindow* window); /*! @brief Hides the specified window. * * This function hides the specified window if it was previously visible. If * the window is already hidden or is in full screen mode, this function does * nothing. * * @param[in] window The window to hide. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_hide * @sa @ref glfwShowWindow * * @since Added in version 3.0. * * @ingroup window */ GLFWAPI void glfwHideWindow(GLFWwindow* window); /*! @brief Brings the specified window to front and sets input focus. * * This function brings the specified window to front and sets input focus. * The window should already be visible and not iconified. * * By default, both windowed and full screen mode windows are focused when * initially created. Set the [GLFW_FOCUSED](@ref GLFW_FOCUSED_hint) to * disable this behavior. * * Also by default, windowed mode windows are focused when shown * with @ref glfwShowWindow. Set the * [GLFW_FOCUS_ON_SHOW](@ref GLFW_FOCUS_ON_SHOW_hint) to disable this behavior. * * __Do not use this function__ to steal focus from other applications unless * you are certain that is what the user wants. Focus stealing can be * extremely disruptive. * * For a less disruptive way of getting the user's attention, see * [attention requests](@ref window_attention). * * @param[in] window The window to give input focus. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @remark @wayland It is not possible for an application to bring its windows * to front, this function will always emit @ref GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_focus * @sa @ref window_attention * * @since Added in version 3.2. * * @ingroup window */ GLFWAPI void glfwFocusWindow(GLFWwindow* window); /*! @brief Requests user attention to the specified window. * * This function requests user attention to the specified window. On * platforms where this is not supported, attention is requested to the * application as a whole. * * Once the user has given attention, usually by focusing the window or * application, the system will end the request automatically. * * @param[in] window The window to request attention to. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @remark @macos Attention is requested to the application as a whole, not the * specific window. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_attention * * @since Added in version 3.3. * * @ingroup window */ GLFWAPI void glfwRequestWindowAttention(GLFWwindow* window); /*! @brief Returns the monitor that the window uses for full screen mode. * * This function returns the handle of the monitor that the specified window is * in full screen on. * * @param[in] window The window to query. * @return The monitor, or `NULL` if the window is in windowed mode or an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_monitor * @sa @ref glfwSetWindowMonitor * * @since Added in version 3.0. * * @ingroup window */ GLFWAPI GLFWmonitor* glfwGetWindowMonitor(GLFWwindow* window); /*! @brief Sets the mode, monitor, video mode and placement of a window. * * This function sets the monitor that the window uses for full screen mode or, * if the monitor is `NULL`, makes it windowed mode. * * When setting a monitor, this function updates the width, height and refresh * rate of the desired video mode and switches to the video mode closest to it. * The window position is ignored when setting a monitor. * * When the monitor is `NULL`, the position, width and height are used to * place the window content area. The refresh rate is ignored when no monitor * is specified. * * If you only wish to update the resolution of a full screen window or the * size of a windowed mode window, see @ref glfwSetWindowSize. * * When a window transitions from full screen to windowed mode, this function * restores any previous window settings such as whether it is decorated, * floating, resizable, has size or aspect ratio limits, etc. * * @param[in] window The window whose monitor, size or video mode to set. * @param[in] monitor The desired monitor, or `NULL` to set windowed mode. * @param[in] xpos The desired x-coordinate of the upper-left corner of the * content area. * @param[in] ypos The desired y-coordinate of the upper-left corner of the * content area. * @param[in] width The desired with, in screen coordinates, of the content * area or video mode. * @param[in] height The desired height, in screen coordinates, of the content * area or video mode. * @param[in] refreshRate The desired refresh rate, in Hz, of the video mode, * or `GLFW_DONT_CARE`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @remark The OpenGL or OpenGL ES context will not be destroyed or otherwise * affected by any resizing or mode switching, although you may need to update * your viewport if the framebuffer size has changed. * * @remark @wayland The desired window position is ignored, as there is no way * for an application to set this property. * * @remark @wayland Setting the window to full screen will not attempt to * change the mode, no matter what the requested size or refresh rate. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_monitor * @sa @ref window_full_screen * @sa @ref glfwGetWindowMonitor * @sa @ref glfwSetWindowSize * * @since Added in version 3.2. * * @ingroup window */ GLFWAPI void glfwSetWindowMonitor(GLFWwindow* window, GLFWmonitor* monitor, int xpos, int ypos, int width, int height, int refreshRate); /*! @brief Returns an attribute of the specified window. * * This function returns the value of an attribute of the specified window or * its OpenGL or OpenGL ES context. * * @param[in] window The window to query. * @param[in] attrib The [window attribute](@ref window_attribs) whose value to * return. * @return The value of the attribute, or zero if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. * * @remark Framebuffer related hints are not window attributes. See @ref * window_attribs_fb for more information. * * @remark Zero is a valid value for many window and context related * attributes so you cannot use a return value of zero as an indication of * errors. However, this function should not fail as long as it is passed * valid arguments and the library has been [initialized](@ref intro_init). * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_attribs * @sa @ref glfwSetWindowAttrib * * @since Added in version 3.0. Replaces `glfwGetWindowParam` and * `glfwGetGLVersion`. * * @ingroup window */ GLFWAPI int glfwGetWindowAttrib(GLFWwindow* window, int attrib); /*! @brief Sets an attribute of the specified window. * * This function sets the value of an attribute of the specified window. * * The supported attributes are [GLFW_DECORATED](@ref GLFW_DECORATED_attrib), * [GLFW_RESIZABLE](@ref GLFW_RESIZABLE_attrib), * [GLFW_FLOATING](@ref GLFW_FLOATING_attrib), * [GLFW_AUTO_ICONIFY](@ref GLFW_AUTO_ICONIFY_attrib) and * [GLFW_FOCUS_ON_SHOW](@ref GLFW_FOCUS_ON_SHOW_attrib). * * Some of these attributes are ignored for full screen windows. The new * value will take effect if the window is later made windowed. * * Some of these attributes are ignored for windowed mode windows. The new * value will take effect if the window is later made full screen. * * @param[in] window The window to set the attribute for. * @param[in] attrib A supported window attribute. * @param[in] value `GLFW_TRUE` or `GLFW_FALSE`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_ENUM, @ref GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR. * * @remark Calling @ref glfwGetWindowAttrib will always return the latest * value, even if that value is ignored by the current mode of the window. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_attribs * @sa @ref glfwGetWindowAttrib * * @since Added in version 3.3. * * @ingroup window */ GLFWAPI void glfwSetWindowAttrib(GLFWwindow* window, int attrib, int value); /*! @brief Sets the user pointer of the specified window. * * This function sets the user-defined pointer of the specified window. The * current value is retained until the window is destroyed. The initial value * is `NULL`. * * @param[in] window The window whose pointer to set. * @param[in] pointer The new value. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @sa @ref window_userptr * @sa @ref glfwGetWindowUserPointer * * @since Added in version 3.0. * * @ingroup window */ GLFWAPI void glfwSetWindowUserPointer(GLFWwindow* window, void* pointer); /*! @brief Returns the user pointer of the specified window. * * This function returns the current value of the user-defined pointer of the * specified window. The initial value is `NULL`. * * @param[in] window The window whose pointer to return. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @sa @ref window_userptr * @sa @ref glfwSetWindowUserPointer * * @since Added in version 3.0. * * @ingroup window */ GLFWAPI void* glfwGetWindowUserPointer(GLFWwindow* window); /*! @brief Sets the position callback for the specified window. * * This function sets the position callback of the specified window, which is * called when the window is moved. The callback is provided with the * position, in screen coordinates, of the upper-left corner of the content * area of the window. * * @param[in] window The window whose callback to set. * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window, int xpos, int ypos) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWwindowposfun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @remark @wayland This callback will never be called, as there is no way for * an application to know its global position. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_pos * * @since Added in version 3.0. * * @ingroup window */ GLFWAPI GLFWwindowposfun glfwSetWindowPosCallback(GLFWwindow* window, GLFWwindowposfun callback); /*! @brief Sets the size callback for the specified window. * * This function sets the size callback of the specified window, which is * called when the window is resized. The callback is provided with the size, * in screen coordinates, of the content area of the window. * * @param[in] window The window whose callback to set. * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window, int width, int height) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWwindowsizefun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_size * * @since Added in version 1.0. * @glfw3 Added window handle parameter and return value. * * @ingroup window */ GLFWAPI GLFWwindowsizefun glfwSetWindowSizeCallback(GLFWwindow* window, GLFWwindowsizefun callback); /*! @brief Sets the close callback for the specified window. * * This function sets the close callback of the specified window, which is * called when the user attempts to close the window, for example by clicking * the close widget in the title bar. * * The close flag is set before this callback is called, but you can modify it * at any time with @ref glfwSetWindowShouldClose. * * The close callback is not triggered by @ref glfwDestroyWindow. * * @param[in] window The window whose callback to set. * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWwindowclosefun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @remark @macos Selecting Quit from the application menu will trigger the * close callback for all windows. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_close * * @since Added in version 2.5. * @glfw3 Added window handle parameter and return value. * * @ingroup window */ GLFWAPI GLFWwindowclosefun glfwSetWindowCloseCallback(GLFWwindow* window, GLFWwindowclosefun callback); /*! @brief Sets the refresh callback for the specified window. * * This function sets the refresh callback of the specified window, which is * called when the content area of the window needs to be redrawn, for example * if the window has been exposed after having been covered by another window. * * On compositing window systems such as Aero, Compiz, Aqua or Wayland, where * the window contents are saved off-screen, this callback may be called only * very infrequently or never at all. * * @param[in] window The window whose callback to set. * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window); * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWwindowrefreshfun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_refresh * * @since Added in version 2.5. * @glfw3 Added window handle parameter and return value. * * @ingroup window */ GLFWAPI GLFWwindowrefreshfun glfwSetWindowRefreshCallback(GLFWwindow* window, GLFWwindowrefreshfun callback); /*! @brief Sets the focus callback for the specified window. * * This function sets the focus callback of the specified window, which is * called when the window gains or loses input focus. * * After the focus callback is called for a window that lost input focus, * synthetic key and mouse button release events will be generated for all such * that had been pressed. For more information, see @ref glfwSetKeyCallback * and @ref glfwSetMouseButtonCallback. * * @param[in] window The window whose callback to set. * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window, int focused) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWwindowfocusfun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_focus * * @since Added in version 3.0. * * @ingroup window */ GLFWAPI GLFWwindowfocusfun glfwSetWindowFocusCallback(GLFWwindow* window, GLFWwindowfocusfun callback); /*! @brief Sets the iconify callback for the specified window. * * This function sets the iconification callback of the specified window, which * is called when the window is iconified or restored. * * @param[in] window The window whose callback to set. * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window, int iconified) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWwindowiconifyfun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @remark @wayland The wl_shell protocol has no concept of iconification, * this callback will never be called when using this deprecated protocol. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_iconify * * @since Added in version 3.0. * * @ingroup window */ GLFWAPI GLFWwindowiconifyfun glfwSetWindowIconifyCallback(GLFWwindow* window, GLFWwindowiconifyfun callback); /*! @brief Sets the maximize callback for the specified window. * * This function sets the maximization callback of the specified window, which * is called when the window is maximized or restored. * * @param[in] window The window whose callback to set. * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window, int maximized) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWwindowmaximizefun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_maximize * * @since Added in version 3.3. * * @ingroup window */ GLFWAPI GLFWwindowmaximizefun glfwSetWindowMaximizeCallback(GLFWwindow* window, GLFWwindowmaximizefun callback); /*! @brief Sets the framebuffer resize callback for the specified window. * * This function sets the framebuffer resize callback of the specified window, * which is called when the framebuffer of the specified window is resized. * * @param[in] window The window whose callback to set. * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window, int width, int height) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWframebuffersizefun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_fbsize * * @since Added in version 3.0. * * @ingroup window */ GLFWAPI GLFWframebuffersizefun glfwSetFramebufferSizeCallback(GLFWwindow* window, GLFWframebuffersizefun callback); /*! @brief Sets the window content scale callback for the specified window. * * This function sets the window content scale callback of the specified window, * which is called when the content scale of the specified window changes. * * @param[in] window The window whose callback to set. * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window, float xscale, float yscale) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWwindowcontentscalefun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_scale * @sa @ref glfwGetWindowContentScale * * @since Added in version 3.3. * * @ingroup window */ GLFWAPI GLFWwindowcontentscalefun glfwSetWindowContentScaleCallback(GLFWwindow* window, GLFWwindowcontentscalefun callback); /*! @brief Processes all pending events. * * This function processes only those events that are already in the event * queue and then returns immediately. Processing events will cause the window * and input callbacks associated with those events to be called. * * On some platforms, a window move, resize or menu operation will cause event * processing to block. This is due to how event processing is designed on * those platforms. You can use the * [window refresh callback](@ref window_refresh) to redraw the contents of * your window when necessary during such operations. * * Do not assume that callbacks you set will _only_ be called in response to * event processing functions like this one. While it is necessary to poll for * events, window systems that require GLFW to register callbacks of its own * can pass events to GLFW in response to many window system function calls. * GLFW will pass those events on to the application callbacks before * returning. * * Event processing is not required for joystick input to work. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @reentrancy This function must not be called from a callback. * * @thread_safety This function must only be called from the main thread. * * @sa @ref events * @sa @ref glfwWaitEvents * @sa @ref glfwWaitEventsTimeout * * @since Added in version 1.0. * * @ingroup window */ GLFWAPI void glfwPollEvents(void); /*! @brief Waits until events are queued and processes them. * * This function puts the calling thread to sleep until at least one event is * available in the event queue. Once one or more events are available, * it behaves exactly like @ref glfwPollEvents, i.e. the events in the queue * are processed and the function then returns immediately. Processing events * will cause the window and input callbacks associated with those events to be * called. * * Since not all events are associated with callbacks, this function may return * without a callback having been called even if you are monitoring all * callbacks. * * On some platforms, a window move, resize or menu operation will cause event * processing to block. This is due to how event processing is designed on * those platforms. You can use the * [window refresh callback](@ref window_refresh) to redraw the contents of * your window when necessary during such operations. * * Do not assume that callbacks you set will _only_ be called in response to * event processing functions like this one. While it is necessary to poll for * events, window systems that require GLFW to register callbacks of its own * can pass events to GLFW in response to many window system function calls. * GLFW will pass those events on to the application callbacks before * returning. * * Event processing is not required for joystick input to work. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @reentrancy This function must not be called from a callback. * * @thread_safety This function must only be called from the main thread. * * @sa @ref events * @sa @ref glfwPollEvents * @sa @ref glfwWaitEventsTimeout * * @since Added in version 2.5. * * @ingroup window */ GLFWAPI void glfwWaitEvents(void); /*! @brief Waits with timeout until events are queued and processes them. * * This function puts the calling thread to sleep until at least one event is * available in the event queue, or until the specified timeout is reached. If * one or more events are available, it behaves exactly like @ref * glfwPollEvents, i.e. the events in the queue are processed and the function * then returns immediately. Processing events will cause the window and input * callbacks associated with those events to be called. * * The timeout value must be a positive finite number. * * Since not all events are associated with callbacks, this function may return * without a callback having been called even if you are monitoring all * callbacks. * * On some platforms, a window move, resize or menu operation will cause event * processing to block. This is due to how event processing is designed on * those platforms. You can use the * [window refresh callback](@ref window_refresh) to redraw the contents of * your window when necessary during such operations. * * Do not assume that callbacks you set will _only_ be called in response to * event processing functions like this one. While it is necessary to poll for * events, window systems that require GLFW to register callbacks of its own * can pass events to GLFW in response to many window system function calls. * GLFW will pass those events on to the application callbacks before * returning. * * Event processing is not required for joystick input to work. * * @param[in] timeout The maximum amount of time, in seconds, to wait. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR. * * @reentrancy This function must not be called from a callback. * * @thread_safety This function must only be called from the main thread. * * @sa @ref events * @sa @ref glfwPollEvents * @sa @ref glfwWaitEvents * * @since Added in version 3.2. * * @ingroup window */ GLFWAPI void glfwWaitEventsTimeout(double timeout); /*! @brief Posts an empty event to the event queue. * * This function posts an empty event from the current thread to the event * queue, causing @ref glfwWaitEvents or @ref glfwWaitEventsTimeout to return. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function may be called from any thread. * * @sa @ref events * @sa @ref glfwWaitEvents * @sa @ref glfwWaitEventsTimeout * * @since Added in version 3.1. * * @ingroup window */ GLFWAPI void glfwPostEmptyEvent(void); /*! @brief Returns the value of an input option for the specified window. * * This function returns the value of an input option for the specified window. * The mode must be one of @ref GLFW_CURSOR, @ref GLFW_STICKY_KEYS, * @ref GLFW_STICKY_MOUSE_BUTTONS, @ref GLFW_LOCK_KEY_MODS or * @ref GLFW_RAW_MOUSE_MOTION. * * @param[in] window The window to query. * @param[in] mode One of `GLFW_CURSOR`, `GLFW_STICKY_KEYS`, * `GLFW_STICKY_MOUSE_BUTTONS`, `GLFW_LOCK_KEY_MODS` or * `GLFW_RAW_MOUSE_MOTION`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_INVALID_ENUM. * * @thread_safety This function must only be called from the main thread. * * @sa @ref glfwSetInputMode * * @since Added in version 3.0. * * @ingroup input */ GLFWAPI int glfwGetInputMode(GLFWwindow* window, int mode); /*! @brief Sets an input option for the specified window. * * This function sets an input mode option for the specified window. The mode * must be one of @ref GLFW_CURSOR, @ref GLFW_STICKY_KEYS, * @ref GLFW_STICKY_MOUSE_BUTTONS, @ref GLFW_LOCK_KEY_MODS or * @ref GLFW_RAW_MOUSE_MOTION. * * If the mode is `GLFW_CURSOR`, the value must be one of the following cursor * modes: * - `GLFW_CURSOR_NORMAL` makes the cursor visible and behaving normally. * - `GLFW_CURSOR_HIDDEN` makes the cursor invisible when it is over the * content area of the window but does not restrict the cursor from leaving. * - `GLFW_CURSOR_DISABLED` hides and grabs the cursor, providing virtual * and unlimited cursor movement. This is useful for implementing for * example 3D camera controls. * * If the mode is `GLFW_STICKY_KEYS`, the value must be either `GLFW_TRUE` to * enable sticky keys, or `GLFW_FALSE` to disable it. If sticky keys are * enabled, a key press will ensure that @ref glfwGetKey returns `GLFW_PRESS` * the next time it is called even if the key had been released before the * call. This is useful when you are only interested in whether keys have been * pressed but not when or in which order. * * If the mode is `GLFW_STICKY_MOUSE_BUTTONS`, the value must be either * `GLFW_TRUE` to enable sticky mouse buttons, or `GLFW_FALSE` to disable it. * If sticky mouse buttons are enabled, a mouse button press will ensure that * @ref glfwGetMouseButton returns `GLFW_PRESS` the next time it is called even * if the mouse button had been released before the call. This is useful when * you are only interested in whether mouse buttons have been pressed but not * when or in which order. * * If the mode is `GLFW_LOCK_KEY_MODS`, the value must be either `GLFW_TRUE` to * enable lock key modifier bits, or `GLFW_FALSE` to disable them. If enabled, * callbacks that receive modifier bits will also have the @ref * GLFW_MOD_CAPS_LOCK bit set when the event was generated with Caps Lock on, * and the @ref GLFW_MOD_NUM_LOCK bit when Num Lock was on. * * If the mode is `GLFW_RAW_MOUSE_MOTION`, the value must be either `GLFW_TRUE` * to enable raw (unscaled and unaccelerated) mouse motion when the cursor is * disabled, or `GLFW_FALSE` to disable it. If raw motion is not supported, * attempting to set this will emit @ref GLFW_PLATFORM_ERROR. Call @ref * glfwRawMouseMotionSupported to check for support. * * @param[in] window The window whose input mode to set. * @param[in] mode One of `GLFW_CURSOR`, `GLFW_STICKY_KEYS`, * `GLFW_STICKY_MOUSE_BUTTONS`, `GLFW_LOCK_KEY_MODS` or * `GLFW_RAW_MOUSE_MOTION`. * @param[in] value The new value of the specified input mode. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref glfwGetInputMode * * @since Added in version 3.0. Replaces `glfwEnable` and `glfwDisable`. * * @ingroup input */ GLFWAPI void glfwSetInputMode(GLFWwindow* window, int mode, int value); /*! @brief Returns whether raw mouse motion is supported. * * This function returns whether raw mouse motion is supported on the current * system. This status does not change after GLFW has been initialized so you * only need to check this once. If you attempt to enable raw motion on * a system that does not support it, @ref GLFW_PLATFORM_ERROR will be emitted. * * Raw mouse motion is closer to the actual motion of the mouse across * a surface. It is not affected by the scaling and acceleration applied to * the motion of the desktop cursor. That processing is suitable for a cursor * while raw motion is better for controlling for example a 3D camera. Because * of this, raw mouse motion is only provided when the cursor is disabled. * * @return `GLFW_TRUE` if raw mouse motion is supported on the current machine, * or `GLFW_FALSE` otherwise. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref raw_mouse_motion * @sa @ref glfwSetInputMode * * @since Added in version 3.3. * * @ingroup input */ GLFWAPI int glfwRawMouseMotionSupported(void); /*! @brief Returns the layout-specific name of the specified printable key. * * This function returns the name of the specified printable key, encoded as * UTF-8. This is typically the character that key would produce without any * modifier keys, intended for displaying key bindings to the user. For dead * keys, it is typically the diacritic it would add to a character. * * __Do not use this function__ for [text input](@ref input_char). You will * break text input for many languages even if it happens to work for yours. * * If the key is `GLFW_KEY_UNKNOWN`, the scancode is used to identify the key, * otherwise the scancode is ignored. If you specify a non-printable key, or * `GLFW_KEY_UNKNOWN` and a scancode that maps to a non-printable key, this * function returns `NULL` but does not emit an error. * * This behavior allows you to always pass in the arguments in the * [key callback](@ref input_key) without modification. * * The printable keys are: * - `GLFW_KEY_APOSTROPHE` * - `GLFW_KEY_COMMA` * - `GLFW_KEY_MINUS` * - `GLFW_KEY_PERIOD` * - `GLFW_KEY_SLASH` * - `GLFW_KEY_SEMICOLON` * - `GLFW_KEY_EQUAL` * - `GLFW_KEY_LEFT_BRACKET` * - `GLFW_KEY_RIGHT_BRACKET` * - `GLFW_KEY_BACKSLASH` * - `GLFW_KEY_WORLD_1` * - `GLFW_KEY_WORLD_2` * - `GLFW_KEY_0` to `GLFW_KEY_9` * - `GLFW_KEY_A` to `GLFW_KEY_Z` * - `GLFW_KEY_KP_0` to `GLFW_KEY_KP_9` * - `GLFW_KEY_KP_DECIMAL` * - `GLFW_KEY_KP_DIVIDE` * - `GLFW_KEY_KP_MULTIPLY` * - `GLFW_KEY_KP_SUBTRACT` * - `GLFW_KEY_KP_ADD` * - `GLFW_KEY_KP_EQUAL` * * Names for printable keys depend on keyboard layout, while names for * non-printable keys are the same across layouts but depend on the application * language and should be localized along with other user interface text. * * @param[in] key The key to query, or `GLFW_KEY_UNKNOWN`. * @param[in] scancode The scancode of the key to query. * @return The UTF-8 encoded, layout-specific name of the key, or `NULL`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @remark The contents of the returned string may change when a keyboard * layout change event is received. * * @pointer_lifetime The returned string is allocated and freed by GLFW. You * should not free it yourself. It is valid until the library is terminated. * * @thread_safety This function must only be called from the main thread. * * @sa @ref input_key_name * * @since Added in version 3.2. * * @ingroup input */ GLFWAPI const char* glfwGetKeyName(int key, int scancode); /*! @brief Returns the platform-specific scancode of the specified key. * * This function returns the platform-specific scancode of the specified key. * * If the key is `GLFW_KEY_UNKNOWN` or does not exist on the keyboard this * method will return `-1`. * * @param[in] key Any [named key](@ref keys). * @return The platform-specific scancode for the key, or `-1` if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. * * @thread_safety This function may be called from any thread. * * @sa @ref input_key * * @since Added in version 3.3. * * @ingroup input */ GLFWAPI int glfwGetKeyScancode(int key); /*! @brief Returns the last reported state of a keyboard key for the specified * window. * * This function returns the last state reported for the specified key to the * specified window. The returned state is one of `GLFW_PRESS` or * `GLFW_RELEASE`. The higher-level action `GLFW_REPEAT` is only reported to * the key callback. * * If the @ref GLFW_STICKY_KEYS input mode is enabled, this function returns * `GLFW_PRESS` the first time you call it for a key that was pressed, even if * that key has already been released. * * The key functions deal with physical keys, with [key tokens](@ref keys) * named after their use on the standard US keyboard layout. If you want to * input text, use the Unicode character callback instead. * * The [modifier key bit masks](@ref mods) are not key tokens and cannot be * used with this function. * * __Do not use this function__ to implement [text input](@ref input_char). * * @param[in] window The desired window. * @param[in] key The desired [keyboard key](@ref keys). `GLFW_KEY_UNKNOWN` is * not a valid key for this function. * @return One of `GLFW_PRESS` or `GLFW_RELEASE`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_INVALID_ENUM. * * @thread_safety This function must only be called from the main thread. * * @sa @ref input_key * * @since Added in version 1.0. * @glfw3 Added window handle parameter. * * @ingroup input */ GLFWAPI int glfwGetKey(GLFWwindow* window, int key); /*! @brief Returns the last reported state of a mouse button for the specified * window. * * This function returns the last state reported for the specified mouse button * to the specified window. The returned state is one of `GLFW_PRESS` or * `GLFW_RELEASE`. * * If the @ref GLFW_STICKY_MOUSE_BUTTONS input mode is enabled, this function * returns `GLFW_PRESS` the first time you call it for a mouse button that was * pressed, even if that mouse button has already been released. * * @param[in] window The desired window. * @param[in] button The desired [mouse button](@ref buttons). * @return One of `GLFW_PRESS` or `GLFW_RELEASE`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_INVALID_ENUM. * * @thread_safety This function must only be called from the main thread. * * @sa @ref input_mouse_button * * @since Added in version 1.0. * @glfw3 Added window handle parameter. * * @ingroup input */ GLFWAPI int glfwGetMouseButton(GLFWwindow* window, int button); /*! @brief Retrieves the position of the cursor relative to the content area of * the window. * * This function returns the position of the cursor, in screen coordinates, * relative to the upper-left corner of the content area of the specified * window. * * If the cursor is disabled (with `GLFW_CURSOR_DISABLED`) then the cursor * position is unbounded and limited only by the minimum and maximum values of * a `double`. * * The coordinate can be converted to their integer equivalents with the * `floor` function. Casting directly to an integer type works for positive * coordinates, but fails for negative ones. * * Any or all of the position arguments may be `NULL`. If an error occurs, all * non-`NULL` position arguments will be set to zero. * * @param[in] window The desired window. * @param[out] xpos Where to store the cursor x-coordinate, relative to the * left edge of the content area, or `NULL`. * @param[out] ypos Where to store the cursor y-coordinate, relative to the to * top edge of the content area, or `NULL`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref cursor_pos * @sa @ref glfwSetCursorPos * * @since Added in version 3.0. Replaces `glfwGetMousePos`. * * @ingroup input */ GLFWAPI void glfwGetCursorPos(GLFWwindow* window, double* xpos, double* ypos); /*! @brief Sets the position of the cursor, relative to the content area of the * window. * * This function sets the position, in screen coordinates, of the cursor * relative to the upper-left corner of the content area of the specified * window. The window must have input focus. If the window does not have * input focus when this function is called, it fails silently. * * __Do not use this function__ to implement things like camera controls. GLFW * already provides the `GLFW_CURSOR_DISABLED` cursor mode that hides the * cursor, transparently re-centers it and provides unconstrained cursor * motion. See @ref glfwSetInputMode for more information. * * If the cursor mode is `GLFW_CURSOR_DISABLED` then the cursor position is * unconstrained and limited only by the minimum and maximum values of * a `double`. * * @param[in] window The desired window. * @param[in] xpos The desired x-coordinate, relative to the left edge of the * content area. * @param[in] ypos The desired y-coordinate, relative to the top edge of the * content area. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @remark @wayland This function will only work when the cursor mode is * `GLFW_CURSOR_DISABLED`, otherwise it will do nothing. * * @thread_safety This function must only be called from the main thread. * * @sa @ref cursor_pos * @sa @ref glfwGetCursorPos * * @since Added in version 3.0. Replaces `glfwSetMousePos`. * * @ingroup input */ GLFWAPI void glfwSetCursorPos(GLFWwindow* window, double xpos, double ypos); /*! @brief Creates a custom cursor. * * Creates a new custom cursor image that can be set for a window with @ref * glfwSetCursor. The cursor can be destroyed with @ref glfwDestroyCursor. * Any remaining cursors are destroyed by @ref glfwTerminate. * * The pixels are 32-bit, little-endian, non-premultiplied RGBA, i.e. eight * bits per channel with the red channel first. They are arranged canonically * as packed sequential rows, starting from the top-left corner. * * The cursor hotspot is specified in pixels, relative to the upper-left corner * of the cursor image. Like all other coordinate systems in GLFW, the X-axis * points to the right and the Y-axis points down. * * @param[in] image The desired cursor image. * @param[in] xhot The desired x-coordinate, in pixels, of the cursor hotspot. * @param[in] yhot The desired y-coordinate, in pixels, of the cursor hotspot. * @return The handle of the created cursor, or `NULL` if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @pointer_lifetime The specified image data is copied before this function * returns. * * @thread_safety This function must only be called from the main thread. * * @sa @ref cursor_object * @sa @ref glfwDestroyCursor * @sa @ref glfwCreateStandardCursor * * @since Added in version 3.1. * * @ingroup input */ GLFWAPI GLFWcursor* glfwCreateCursor(const GLFWimage* image, int xhot, int yhot); /*! @brief Creates a cursor with a standard shape. * * Returns a cursor with a [standard shape](@ref shapes), that can be set for * a window with @ref glfwSetCursor. * * @param[in] shape One of the [standard shapes](@ref shapes). * @return A new cursor ready to use or `NULL` if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref cursor_object * @sa @ref glfwCreateCursor * * @since Added in version 3.1. * * @ingroup input */ GLFWAPI GLFWcursor* glfwCreateStandardCursor(int shape); /*! @brief Destroys a cursor. * * This function destroys a cursor previously created with @ref * glfwCreateCursor. Any remaining cursors will be destroyed by @ref * glfwTerminate. * * If the specified cursor is current for any window, that window will be * reverted to the default cursor. This does not affect the cursor mode. * * @param[in] cursor The cursor object to destroy. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @reentrancy This function must not be called from a callback. * * @thread_safety This function must only be called from the main thread. * * @sa @ref cursor_object * @sa @ref glfwCreateCursor * * @since Added in version 3.1. * * @ingroup input */ GLFWAPI void glfwDestroyCursor(GLFWcursor* cursor); /*! @brief Sets the cursor for the window. * * This function sets the cursor image to be used when the cursor is over the * content area of the specified window. The set cursor will only be visible * when the [cursor mode](@ref cursor_mode) of the window is * `GLFW_CURSOR_NORMAL`. * * On some platforms, the set cursor may not be visible unless the window also * has input focus. * * @param[in] window The window to set the cursor for. * @param[in] cursor The cursor to set, or `NULL` to switch back to the default * arrow cursor. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref cursor_object * * @since Added in version 3.1. * * @ingroup input */ GLFWAPI void glfwSetCursor(GLFWwindow* window, GLFWcursor* cursor); /*! @brief Sets the key callback. * * This function sets the key callback of the specified window, which is called * when a key is pressed, repeated or released. * * The key functions deal with physical keys, with layout independent * [key tokens](@ref keys) named after their values in the standard US keyboard * layout. If you want to input text, use the * [character callback](@ref glfwSetCharCallback) instead. * * When a window loses input focus, it will generate synthetic key release * events for all pressed keys. You can tell these events from user-generated * events by the fact that the synthetic ones are generated after the focus * loss event has been processed, i.e. after the * [window focus callback](@ref glfwSetWindowFocusCallback) has been called. * * The scancode of a key is specific to that platform or sometimes even to that * machine. Scancodes are intended to allow users to bind keys that don't have * a GLFW key token. Such keys have `key` set to `GLFW_KEY_UNKNOWN`, their * state is not saved and so it cannot be queried with @ref glfwGetKey. * * Sometimes GLFW needs to generate synthetic key events, in which case the * scancode may be zero. * * @param[in] window The window whose callback to set. * @param[in] callback The new key callback, or `NULL` to remove the currently * set callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window, int key, int scancode, int action, int mods) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWkeyfun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref input_key * * @since Added in version 1.0. * @glfw3 Added window handle parameter and return value. * * @ingroup input */ GLFWAPI GLFWkeyfun glfwSetKeyCallback(GLFWwindow* window, GLFWkeyfun callback); /*! @brief Sets the Unicode character callback. * * This function sets the character callback of the specified window, which is * called when a Unicode character is input. * * The character callback is intended for Unicode text input. As it deals with * characters, it is keyboard layout dependent, whereas the * [key callback](@ref glfwSetKeyCallback) is not. Characters do not map 1:1 * to physical keys, as a key may produce zero, one or more characters. If you * want to know whether a specific physical key was pressed or released, see * the key callback instead. * * The character callback behaves as system text input normally does and will * not be called if modifier keys are held down that would prevent normal text * input on that platform, for example a Super (Command) key on macOS or Alt key * on Windows. * * @param[in] window The window whose callback to set. * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window, unsigned int codepoint) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWcharfun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref input_char * * @since Added in version 2.4. * @glfw3 Added window handle parameter and return value. * * @ingroup input */ GLFWAPI GLFWcharfun glfwSetCharCallback(GLFWwindow* window, GLFWcharfun callback); /*! @brief Sets the Unicode character with modifiers callback. * * This function sets the character with modifiers callback of the specified * window, which is called when a Unicode character is input regardless of what * modifier keys are used. * * The character with modifiers callback is intended for implementing custom * Unicode character input. For regular Unicode text input, see the * [character callback](@ref glfwSetCharCallback). Like the character * callback, the character with modifiers callback deals with characters and is * keyboard layout dependent. Characters do not map 1:1 to physical keys, as * a key may produce zero, one or more characters. If you want to know whether * a specific physical key was pressed or released, see the * [key callback](@ref glfwSetKeyCallback) instead. * * @param[in] window The window whose callback to set. * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or an * [error](@ref error_handling) occurred. * * @callback_signature * @code * void function_name(GLFWwindow* window, unsigned int codepoint, int mods) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWcharmodsfun). * * @deprecated Scheduled for removal in version 4.0. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref input_char * * @since Added in version 3.1. * * @ingroup input */ GLFWAPI GLFWcharmodsfun glfwSetCharModsCallback(GLFWwindow* window, GLFWcharmodsfun callback); /*! @brief Sets the mouse button callback. * * This function sets the mouse button callback of the specified window, which * is called when a mouse button is pressed or released. * * When a window loses input focus, it will generate synthetic mouse button * release events for all pressed mouse buttons. You can tell these events * from user-generated events by the fact that the synthetic ones are generated * after the focus loss event has been processed, i.e. after the * [window focus callback](@ref glfwSetWindowFocusCallback) has been called. * * @param[in] window The window whose callback to set. * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window, int button, int action, int mods) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWmousebuttonfun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref input_mouse_button * * @since Added in version 1.0. * @glfw3 Added window handle parameter and return value. * * @ingroup input */ GLFWAPI GLFWmousebuttonfun glfwSetMouseButtonCallback(GLFWwindow* window, GLFWmousebuttonfun callback); /*! @brief Sets the cursor position callback. * * This function sets the cursor position callback of the specified window, * which is called when the cursor is moved. The callback is provided with the * position, in screen coordinates, relative to the upper-left corner of the * content area of the window. * * @param[in] window The window whose callback to set. * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window, double xpos, double ypos); * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWcursorposfun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref cursor_pos * * @since Added in version 3.0. Replaces `glfwSetMousePosCallback`. * * @ingroup input */ GLFWAPI GLFWcursorposfun glfwSetCursorPosCallback(GLFWwindow* window, GLFWcursorposfun callback); /*! @brief Sets the cursor enter/leave callback. * * This function sets the cursor boundary crossing callback of the specified * window, which is called when the cursor enters or leaves the content area of * the window. * * @param[in] window The window whose callback to set. * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window, int entered) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWcursorenterfun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref cursor_enter * * @since Added in version 3.0. * * @ingroup input */ GLFWAPI GLFWcursorenterfun glfwSetCursorEnterCallback(GLFWwindow* window, GLFWcursorenterfun callback); /*! @brief Sets the scroll callback. * * This function sets the scroll callback of the specified window, which is * called when a scrolling device is used, such as a mouse wheel or scrolling * area of a touchpad. * * The scroll callback receives all scrolling input, like that from a mouse * wheel or a touchpad scrolling area. * * @param[in] window The window whose callback to set. * @param[in] callback The new scroll callback, or `NULL` to remove the * currently set callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window, double xoffset, double yoffset) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWscrollfun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref scrolling * * @since Added in version 3.0. Replaces `glfwSetMouseWheelCallback`. * * @ingroup input */ GLFWAPI GLFWscrollfun glfwSetScrollCallback(GLFWwindow* window, GLFWscrollfun callback); /*! @brief Sets the path drop callback. * * This function sets the path drop callback of the specified window, which is * called when one or more dragged paths are dropped on the window. * * Because the path array and its strings may have been generated specifically * for that event, they are not guaranteed to be valid after the callback has * returned. If you wish to use them after the callback returns, you need to * make a deep copy. * * @param[in] window The window whose callback to set. * @param[in] callback The new file drop callback, or `NULL` to remove the * currently set callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window, int path_count, const char* paths[]) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWdropfun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @remark @wayland File drop is currently unimplemented. * * @thread_safety This function must only be called from the main thread. * * @sa @ref path_drop * * @since Added in version 3.1. * * @ingroup input */ GLFWAPI GLFWdropfun glfwSetDropCallback(GLFWwindow* window, GLFWdropfun callback); /*! @brief Returns whether the specified joystick is present. * * This function returns whether the specified joystick is present. * * There is no need to call this function before other functions that accept * a joystick ID, as they all check for presence before performing any other * work. * * @param[in] jid The [joystick](@ref joysticks) to query. * @return `GLFW_TRUE` if the joystick is present, or `GLFW_FALSE` otherwise. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref joystick * * @since Added in version 3.0. Replaces `glfwGetJoystickParam`. * * @ingroup input */ GLFWAPI int glfwJoystickPresent(int jid); /*! @brief Returns the values of all axes of the specified joystick. * * This function returns the values of all axes of the specified joystick. * Each element in the array is a value between -1.0 and 1.0. * * If the specified joystick is not present this function will return `NULL` * but will not generate an error. This can be used instead of first calling * @ref glfwJoystickPresent. * * @param[in] jid The [joystick](@ref joysticks) to query. * @param[out] count Where to store the number of axis values in the returned * array. This is set to zero if the joystick is not present or an error * occurred. * @return An array of axis values, or `NULL` if the joystick is not present or * an [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. * * @pointer_lifetime The returned array is allocated and freed by GLFW. You * should not free it yourself. It is valid until the specified joystick is * disconnected or the library is terminated. * * @thread_safety This function must only be called from the main thread. * * @sa @ref joystick_axis * * @since Added in version 3.0. Replaces `glfwGetJoystickPos`. * * @ingroup input */ GLFWAPI const float* glfwGetJoystickAxes(int jid, int* count); /*! @brief Returns the state of all buttons of the specified joystick. * * This function returns the state of all buttons of the specified joystick. * Each element in the array is either `GLFW_PRESS` or `GLFW_RELEASE`. * * For backward compatibility with earlier versions that did not have @ref * glfwGetJoystickHats, the button array also includes all hats, each * represented as four buttons. The hats are in the same order as returned by * __glfwGetJoystickHats__ and are in the order _up_, _right_, _down_ and * _left_. To disable these extra buttons, set the @ref * GLFW_JOYSTICK_HAT_BUTTONS init hint before initialization. * * If the specified joystick is not present this function will return `NULL` * but will not generate an error. This can be used instead of first calling * @ref glfwJoystickPresent. * * @param[in] jid The [joystick](@ref joysticks) to query. * @param[out] count Where to store the number of button states in the returned * array. This is set to zero if the joystick is not present or an error * occurred. * @return An array of button states, or `NULL` if the joystick is not present * or an [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. * * @pointer_lifetime The returned array is allocated and freed by GLFW. You * should not free it yourself. It is valid until the specified joystick is * disconnected or the library is terminated. * * @thread_safety This function must only be called from the main thread. * * @sa @ref joystick_button * * @since Added in version 2.2. * @glfw3 Changed to return a dynamic array. * * @ingroup input */ GLFWAPI const unsigned char* glfwGetJoystickButtons(int jid, int* count); /*! @brief Returns the state of all hats of the specified joystick. * * This function returns the state of all hats of the specified joystick. * Each element in the array is one of the following values: * * Name | Value * ---- | ----- * `GLFW_HAT_CENTERED` | 0 * `GLFW_HAT_UP` | 1 * `GLFW_HAT_RIGHT` | 2 * `GLFW_HAT_DOWN` | 4 * `GLFW_HAT_LEFT` | 8 * `GLFW_HAT_RIGHT_UP` | `GLFW_HAT_RIGHT` \| `GLFW_HAT_UP` * `GLFW_HAT_RIGHT_DOWN` | `GLFW_HAT_RIGHT` \| `GLFW_HAT_DOWN` * `GLFW_HAT_LEFT_UP` | `GLFW_HAT_LEFT` \| `GLFW_HAT_UP` * `GLFW_HAT_LEFT_DOWN` | `GLFW_HAT_LEFT` \| `GLFW_HAT_DOWN` * * The diagonal directions are bitwise combinations of the primary (up, right, * down and left) directions and you can test for these individually by ANDing * it with the corresponding direction. * * @code * if (hats[2] & GLFW_HAT_RIGHT) * { * // State of hat 2 could be right-up, right or right-down * } * @endcode * * If the specified joystick is not present this function will return `NULL` * but will not generate an error. This can be used instead of first calling * @ref glfwJoystickPresent. * * @param[in] jid The [joystick](@ref joysticks) to query. * @param[out] count Where to store the number of hat states in the returned * array. This is set to zero if the joystick is not present or an error * occurred. * @return An array of hat states, or `NULL` if the joystick is not present * or an [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. * * @pointer_lifetime The returned array is allocated and freed by GLFW. You * should not free it yourself. It is valid until the specified joystick is * disconnected, this function is called again for that joystick or the library * is terminated. * * @thread_safety This function must only be called from the main thread. * * @sa @ref joystick_hat * * @since Added in version 3.3. * * @ingroup input */ GLFWAPI const unsigned char* glfwGetJoystickHats(int jid, int* count); /*! @brief Returns the name of the specified joystick. * * This function returns the name, encoded as UTF-8, of the specified joystick. * The returned string is allocated and freed by GLFW. You should not free it * yourself. * * If the specified joystick is not present this function will return `NULL` * but will not generate an error. This can be used instead of first calling * @ref glfwJoystickPresent. * * @param[in] jid The [joystick](@ref joysticks) to query. * @return The UTF-8 encoded name of the joystick, or `NULL` if the joystick * is not present or an [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. * * @pointer_lifetime The returned string is allocated and freed by GLFW. You * should not free it yourself. It is valid until the specified joystick is * disconnected or the library is terminated. * * @thread_safety This function must only be called from the main thread. * * @sa @ref joystick_name * * @since Added in version 3.0. * * @ingroup input */ GLFWAPI const char* glfwGetJoystickName(int jid); /*! @brief Returns the SDL compatible GUID of the specified joystick. * * This function returns the SDL compatible GUID, as a UTF-8 encoded * hexadecimal string, of the specified joystick. The returned string is * allocated and freed by GLFW. You should not free it yourself. * * The GUID is what connects a joystick to a gamepad mapping. A connected * joystick will always have a GUID even if there is no gamepad mapping * assigned to it. * * If the specified joystick is not present this function will return `NULL` * but will not generate an error. This can be used instead of first calling * @ref glfwJoystickPresent. * * The GUID uses the format introduced in SDL 2.0.5. This GUID tries to * uniquely identify the make and model of a joystick but does not identify * a specific unit, e.g. all wired Xbox 360 controllers will have the same * GUID on that platform. The GUID for a unit may vary between platforms * depending on what hardware information the platform specific APIs provide. * * @param[in] jid The [joystick](@ref joysticks) to query. * @return The UTF-8 encoded GUID of the joystick, or `NULL` if the joystick * is not present or an [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. * * @pointer_lifetime The returned string is allocated and freed by GLFW. You * should not free it yourself. It is valid until the specified joystick is * disconnected or the library is terminated. * * @thread_safety This function must only be called from the main thread. * * @sa @ref gamepad * * @since Added in version 3.3. * * @ingroup input */ GLFWAPI const char* glfwGetJoystickGUID(int jid); /*! @brief Sets the user pointer of the specified joystick. * * This function sets the user-defined pointer of the specified joystick. The * current value is retained until the joystick is disconnected. The initial * value is `NULL`. * * This function may be called from the joystick callback, even for a joystick * that is being disconnected. * * @param[in] jid The joystick whose pointer to set. * @param[in] pointer The new value. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @sa @ref joystick_userptr * @sa @ref glfwGetJoystickUserPointer * * @since Added in version 3.3. * * @ingroup input */ GLFWAPI void glfwSetJoystickUserPointer(int jid, void* pointer); /*! @brief Returns the user pointer of the specified joystick. * * This function returns the current value of the user-defined pointer of the * specified joystick. The initial value is `NULL`. * * This function may be called from the joystick callback, even for a joystick * that is being disconnected. * * @param[in] jid The joystick whose pointer to return. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @sa @ref joystick_userptr * @sa @ref glfwSetJoystickUserPointer * * @since Added in version 3.3. * * @ingroup input */ GLFWAPI void* glfwGetJoystickUserPointer(int jid); /*! @brief Returns whether the specified joystick has a gamepad mapping. * * This function returns whether the specified joystick is both present and has * a gamepad mapping. * * If the specified joystick is present but does not have a gamepad mapping * this function will return `GLFW_FALSE` but will not generate an error. Call * @ref glfwJoystickPresent to check if a joystick is present regardless of * whether it has a mapping. * * @param[in] jid The [joystick](@ref joysticks) to query. * @return `GLFW_TRUE` if a joystick is both present and has a gamepad mapping, * or `GLFW_FALSE` otherwise. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_INVALID_ENUM. * * @thread_safety This function must only be called from the main thread. * * @sa @ref gamepad * @sa @ref glfwGetGamepadState * * @since Added in version 3.3. * * @ingroup input */ GLFWAPI int glfwJoystickIsGamepad(int jid); /*! @brief Sets the joystick configuration callback. * * This function sets the joystick configuration callback, or removes the * currently set callback. This is called when a joystick is connected to or * disconnected from the system. * * For joystick connection and disconnection events to be delivered on all * platforms, you need to call one of the [event processing](@ref events) * functions. Joystick disconnection may also be detected and the callback * called by joystick functions. The function will then return whatever it * returns if the joystick is not present. * * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(int jid, int event) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWjoystickfun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref joystick_event * * @since Added in version 3.2. * * @ingroup input */ GLFWAPI GLFWjoystickfun glfwSetJoystickCallback(GLFWjoystickfun callback); /*! @brief Adds the specified SDL_GameControllerDB gamepad mappings. * * This function parses the specified ASCII encoded string and updates the * internal list with any gamepad mappings it finds. This string may * contain either a single gamepad mapping or many mappings separated by * newlines. The parser supports the full format of the `gamecontrollerdb.txt` * source file including empty lines and comments. * * See @ref gamepad_mapping for a description of the format. * * If there is already a gamepad mapping for a given GUID in the internal list, * it will be replaced by the one passed to this function. If the library is * terminated and re-initialized the internal list will revert to the built-in * default. * * @param[in] string The string containing the gamepad mappings. * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_INVALID_VALUE. * * @thread_safety This function must only be called from the main thread. * * @sa @ref gamepad * @sa @ref glfwJoystickIsGamepad * @sa @ref glfwGetGamepadName * * @since Added in version 3.3. * * @ingroup input */ GLFWAPI int glfwUpdateGamepadMappings(const char* string); /*! @brief Returns the human-readable gamepad name for the specified joystick. * * This function returns the human-readable name of the gamepad from the * gamepad mapping assigned to the specified joystick. * * If the specified joystick is not present or does not have a gamepad mapping * this function will return `NULL` but will not generate an error. Call * @ref glfwJoystickPresent to check whether it is present regardless of * whether it has a mapping. * * @param[in] jid The [joystick](@ref joysticks) to query. * @return The UTF-8 encoded name of the gamepad, or `NULL` if the * joystick is not present, does not have a mapping or an * [error](@ref error_handling) occurred. * * @pointer_lifetime The returned string is allocated and freed by GLFW. You * should not free it yourself. It is valid until the specified joystick is * disconnected, the gamepad mappings are updated or the library is terminated. * * @thread_safety This function must only be called from the main thread. * * @sa @ref gamepad * @sa @ref glfwJoystickIsGamepad * * @since Added in version 3.3. * * @ingroup input */ GLFWAPI const char* glfwGetGamepadName(int jid); /*! @brief Retrieves the state of the specified joystick remapped as a gamepad. * * This function retrieves the state of the specified joystick remapped to * an Xbox-like gamepad. * * If the specified joystick is not present or does not have a gamepad mapping * this function will return `GLFW_FALSE` but will not generate an error. Call * @ref glfwJoystickPresent to check whether it is present regardless of * whether it has a mapping. * * The Guide button may not be available for input as it is often hooked by the * system or the Steam client. * * Not all devices have all the buttons or axes provided by @ref * GLFWgamepadstate. Unavailable buttons and axes will always report * `GLFW_RELEASE` and 0.0 respectively. * * @param[in] jid The [joystick](@ref joysticks) to query. * @param[out] state The gamepad input state of the joystick. * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if no joystick is * connected, it has no gamepad mapping or an [error](@ref error_handling) * occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_INVALID_ENUM. * * @thread_safety This function must only be called from the main thread. * * @sa @ref gamepad * @sa @ref glfwUpdateGamepadMappings * @sa @ref glfwJoystickIsGamepad * * @since Added in version 3.3. * * @ingroup input */ GLFWAPI int glfwGetGamepadState(int jid, GLFWgamepadstate* state); /*! @brief Sets the clipboard to the specified string. * * This function sets the system clipboard to the specified, UTF-8 encoded * string. * * @param[in] window Deprecated. Any valid window or `NULL`. * @param[in] string A UTF-8 encoded string. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @pointer_lifetime The specified string is copied before this function * returns. * * @thread_safety This function must only be called from the main thread. * * @sa @ref clipboard * @sa @ref glfwGetClipboardString * * @since Added in version 3.0. * * @ingroup input */ GLFWAPI void glfwSetClipboardString(GLFWwindow* window, const char* string); /*! @brief Returns the contents of the clipboard as a string. * * This function returns the contents of the system clipboard, if it contains * or is convertible to a UTF-8 encoded string. If the clipboard is empty or * if its contents cannot be converted, `NULL` is returned and a @ref * GLFW_FORMAT_UNAVAILABLE error is generated. * * @param[in] window Deprecated. Any valid window or `NULL`. * @return The contents of the clipboard as a UTF-8 encoded string, or `NULL` * if an [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @pointer_lifetime The returned string is allocated and freed by GLFW. You * should not free it yourself. It is valid until the next call to @ref * glfwGetClipboardString or @ref glfwSetClipboardString, or until the library * is terminated. * * @thread_safety This function must only be called from the main thread. * * @sa @ref clipboard * @sa @ref glfwSetClipboardString * * @since Added in version 3.0. * * @ingroup input */ GLFWAPI const char* glfwGetClipboardString(GLFWwindow* window); /*! @brief Returns the GLFW time. * * This function returns the current GLFW time, in seconds. Unless the time * has been set using @ref glfwSetTime it measures time elapsed since GLFW was * initialized. * * This function and @ref glfwSetTime are helper functions on top of @ref * glfwGetTimerFrequency and @ref glfwGetTimerValue. * * The resolution of the timer is system dependent, but is usually on the order * of a few micro- or nanoseconds. It uses the highest-resolution monotonic * time source on each supported platform. * * @return The current time, in seconds, or zero if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function may be called from any thread. Reading and * writing of the internal base time is not atomic, so it needs to be * externally synchronized with calls to @ref glfwSetTime. * * @sa @ref time * * @since Added in version 1.0. * * @ingroup input */ GLFWAPI double glfwGetTime(void); /*! @brief Sets the GLFW time. * * This function sets the current GLFW time, in seconds. The value must be * a positive finite number less than or equal to 18446744073.0, which is * approximately 584.5 years. * * This function and @ref glfwGetTime are helper functions on top of @ref * glfwGetTimerFrequency and @ref glfwGetTimerValue. * * @param[in] time The new value, in seconds. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_INVALID_VALUE. * * @remark The upper limit of GLFW time is calculated as * floor((264 - 1) / 109) and is due to implementations * storing nanoseconds in 64 bits. The limit may be increased in the future. * * @thread_safety This function may be called from any thread. Reading and * writing of the internal base time is not atomic, so it needs to be * externally synchronized with calls to @ref glfwGetTime. * * @sa @ref time * * @since Added in version 2.2. * * @ingroup input */ GLFWAPI void glfwSetTime(double time); /*! @brief Returns the current value of the raw timer. * * This function returns the current value of the raw timer, measured in * 1 / frequency seconds. To get the frequency, call @ref * glfwGetTimerFrequency. * * @return The value of the timer, or zero if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function may be called from any thread. * * @sa @ref time * @sa @ref glfwGetTimerFrequency * * @since Added in version 3.2. * * @ingroup input */ GLFWAPI uint64_t glfwGetTimerValue(void); /*! @brief Returns the frequency, in Hz, of the raw timer. * * This function returns the frequency, in Hz, of the raw timer. * * @return The frequency of the timer, in Hz, or zero if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function may be called from any thread. * * @sa @ref time * @sa @ref glfwGetTimerValue * * @since Added in version 3.2. * * @ingroup input */ GLFWAPI uint64_t glfwGetTimerFrequency(void); /*! @brief Makes the context of the specified window current for the calling * thread. * * This function makes the OpenGL or OpenGL ES context of the specified window * current on the calling thread. A context must only be made current on * a single thread at a time and each thread can have only a single current * context at a time. * * When moving a context between threads, you must make it non-current on the * old thread before making it current on the new one. * * By default, making a context non-current implicitly forces a pipeline flush. * On machines that support `GL_KHR_context_flush_control`, you can control * whether a context performs this flush by setting the * [GLFW_CONTEXT_RELEASE_BEHAVIOR](@ref GLFW_CONTEXT_RELEASE_BEHAVIOR_hint) * hint. * * The specified window must have an OpenGL or OpenGL ES context. Specifying * a window without a context will generate a @ref GLFW_NO_WINDOW_CONTEXT * error. * * @param[in] window The window whose context to make current, or `NULL` to * detach the current context. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_NO_WINDOW_CONTEXT and @ref GLFW_PLATFORM_ERROR. * * @thread_safety This function may be called from any thread. * * @sa @ref context_current * @sa @ref glfwGetCurrentContext * * @since Added in version 3.0. * * @ingroup context */ GLFWAPI void glfwMakeContextCurrent(GLFWwindow* window); /*! @brief Returns the window whose context is current on the calling thread. * * This function returns the window whose OpenGL or OpenGL ES context is * current on the calling thread. * * @return The window whose context is current, or `NULL` if no window's * context is current. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function may be called from any thread. * * @sa @ref context_current * @sa @ref glfwMakeContextCurrent * * @since Added in version 3.0. * * @ingroup context */ GLFWAPI GLFWwindow* glfwGetCurrentContext(void); /*! @brief Swaps the front and back buffers of the specified window. * * This function swaps the front and back buffers of the specified window when * rendering with OpenGL or OpenGL ES. If the swap interval is greater than * zero, the GPU driver waits the specified number of screen updates before * swapping the buffers. * * The specified window must have an OpenGL or OpenGL ES context. Specifying * a window without a context will generate a @ref GLFW_NO_WINDOW_CONTEXT * error. * * This function does not apply to Vulkan. If you are rendering with Vulkan, * see `vkQueuePresentKHR` instead. * * @param[in] window The window whose buffers to swap. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_NO_WINDOW_CONTEXT and @ref GLFW_PLATFORM_ERROR. * * @remark __EGL:__ The context of the specified window must be current on the * calling thread. * * @thread_safety This function may be called from any thread. * * @sa @ref buffer_swap * @sa @ref glfwSwapInterval * * @since Added in version 1.0. * @glfw3 Added window handle parameter. * * @ingroup window */ GLFWAPI void glfwSwapBuffers(GLFWwindow* window); /*! @brief Sets the swap interval for the current context. * * This function sets the swap interval for the current OpenGL or OpenGL ES * context, i.e. the number of screen updates to wait from the time @ref * glfwSwapBuffers was called before swapping the buffers and returning. This * is sometimes called _vertical synchronization_, _vertical retrace * synchronization_ or just _vsync_. * * A context that supports either of the `WGL_EXT_swap_control_tear` and * `GLX_EXT_swap_control_tear` extensions also accepts _negative_ swap * intervals, which allows the driver to swap immediately even if a frame * arrives a little bit late. You can check for these extensions with @ref * glfwExtensionSupported. * * A context must be current on the calling thread. Calling this function * without a current context will cause a @ref GLFW_NO_CURRENT_CONTEXT error. * * This function does not apply to Vulkan. If you are rendering with Vulkan, * see the present mode of your swapchain instead. * * @param[in] interval The minimum number of screen updates to wait for * until the buffers are swapped by @ref glfwSwapBuffers. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_NO_CURRENT_CONTEXT and @ref GLFW_PLATFORM_ERROR. * * @remark This function is not called during context creation, leaving the * swap interval set to whatever is the default on that platform. This is done * because some swap interval extensions used by GLFW do not allow the swap * interval to be reset to zero once it has been set to a non-zero value. * * @remark Some GPU drivers do not honor the requested swap interval, either * because of a user setting that overrides the application's request or due to * bugs in the driver. * * @thread_safety This function may be called from any thread. * * @sa @ref buffer_swap * @sa @ref glfwSwapBuffers * * @since Added in version 1.0. * * @ingroup context */ GLFWAPI void glfwSwapInterval(int interval); /*! @brief Returns whether the specified extension is available. * * This function returns whether the specified * [API extension](@ref context_glext) is supported by the current OpenGL or * OpenGL ES context. It searches both for client API extension and context * creation API extensions. * * A context must be current on the calling thread. Calling this function * without a current context will cause a @ref GLFW_NO_CURRENT_CONTEXT error. * * As this functions retrieves and searches one or more extension strings each * call, it is recommended that you cache its results if it is going to be used * frequently. The extension strings will not change during the lifetime of * a context, so there is no danger in doing this. * * This function does not apply to Vulkan. If you are using Vulkan, see @ref * glfwGetRequiredInstanceExtensions, `vkEnumerateInstanceExtensionProperties` * and `vkEnumerateDeviceExtensionProperties` instead. * * @param[in] extension The ASCII encoded name of the extension. * @return `GLFW_TRUE` if the extension is available, or `GLFW_FALSE` * otherwise. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_NO_CURRENT_CONTEXT, @ref GLFW_INVALID_VALUE and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function may be called from any thread. * * @sa @ref context_glext * @sa @ref glfwGetProcAddress * * @since Added in version 1.0. * * @ingroup context */ GLFWAPI int glfwExtensionSupported(const char* extension); /*! @brief Returns the address of the specified function for the current * context. * * This function returns the address of the specified OpenGL or OpenGL ES * [core or extension function](@ref context_glext), if it is supported * by the current context. * * A context must be current on the calling thread. Calling this function * without a current context will cause a @ref GLFW_NO_CURRENT_CONTEXT error. * * This function does not apply to Vulkan. If you are rendering with Vulkan, * see @ref glfwGetInstanceProcAddress, `vkGetInstanceProcAddr` and * `vkGetDeviceProcAddr` instead. * * @param[in] procname The ASCII encoded name of the function. * @return The address of the function, or `NULL` if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_NO_CURRENT_CONTEXT and @ref GLFW_PLATFORM_ERROR. * * @remark The address of a given function is not guaranteed to be the same * between contexts. * * @remark This function may return a non-`NULL` address despite the * associated version or extension not being available. Always check the * context version or extension string first. * * @pointer_lifetime The returned function pointer is valid until the context * is destroyed or the library is terminated. * * @thread_safety This function may be called from any thread. * * @sa @ref context_glext * @sa @ref glfwExtensionSupported * * @since Added in version 1.0. * * @ingroup context */ GLFWAPI GLFWglproc glfwGetProcAddress(const char* procname); /*! @brief Returns whether the Vulkan loader and an ICD have been found. * * This function returns whether the Vulkan loader and any minimally functional * ICD have been found. * * The availability of a Vulkan loader and even an ICD does not by itself * guarantee that surface creation or even instance creation is possible. * For example, on Fermi systems Nvidia will install an ICD that provides no * actual Vulkan support. Call @ref glfwGetRequiredInstanceExtensions to check * whether the extensions necessary for Vulkan surface creation are available * and @ref glfwGetPhysicalDevicePresentationSupport to check whether a queue * family of a physical device supports image presentation. * * @return `GLFW_TRUE` if Vulkan is minimally available, or `GLFW_FALSE` * otherwise. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function may be called from any thread. * * @sa @ref vulkan_support * * @since Added in version 3.2. * * @ingroup vulkan */ GLFWAPI int glfwVulkanSupported(void); /*! @brief Returns the Vulkan instance extensions required by GLFW. * * This function returns an array of names of Vulkan instance extensions required * by GLFW for creating Vulkan surfaces for GLFW windows. If successful, the * list will always contain `VK_KHR_surface`, so if you don't require any * additional extensions you can pass this list directly to the * `VkInstanceCreateInfo` struct. * * If Vulkan is not available on the machine, this function returns `NULL` and * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref glfwVulkanSupported * to check whether Vulkan is at least minimally available. * * If Vulkan is available but no set of extensions allowing window surface * creation was found, this function returns `NULL`. You may still use Vulkan * for off-screen rendering and compute work. * * @param[out] count Where to store the number of extensions in the returned * array. This is set to zero if an error occurred. * @return An array of ASCII encoded extension names, or `NULL` if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_API_UNAVAILABLE. * * @remark Additional extensions may be required by future versions of GLFW. * You should check if any extensions you wish to enable are already in the * returned array, as it is an error to specify an extension more than once in * the `VkInstanceCreateInfo` struct. * * @remark @macos This function currently supports either the * `VK_MVK_macos_surface` extension from MoltenVK or `VK_EXT_metal_surface` * extension. * * @pointer_lifetime The returned array is allocated and freed by GLFW. You * should not free it yourself. It is guaranteed to be valid only until the * library is terminated. * * @thread_safety This function may be called from any thread. * * @sa @ref vulkan_ext * @sa @ref glfwCreateWindowSurface * * @since Added in version 3.2. * * @ingroup vulkan */ GLFWAPI const char** glfwGetRequiredInstanceExtensions(uint32_t* count); #if defined(VK_VERSION_1_0) /*! @brief Returns the address of the specified Vulkan instance function. * * This function returns the address of the specified Vulkan core or extension * function for the specified instance. If instance is set to `NULL` it can * return any function exported from the Vulkan loader, including at least the * following functions: * * - `vkEnumerateInstanceExtensionProperties` * - `vkEnumerateInstanceLayerProperties` * - `vkCreateInstance` * - `vkGetInstanceProcAddr` * * If Vulkan is not available on the machine, this function returns `NULL` and * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref glfwVulkanSupported * to check whether Vulkan is at least minimally available. * * This function is equivalent to calling `vkGetInstanceProcAddr` with * a platform-specific query of the Vulkan loader as a fallback. * * @param[in] instance The Vulkan instance to query, or `NULL` to retrieve * functions related to instance creation. * @param[in] procname The ASCII encoded name of the function. * @return The address of the function, or `NULL` if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_API_UNAVAILABLE. * * @pointer_lifetime The returned function pointer is valid until the library * is terminated. * * @thread_safety This function may be called from any thread. * * @sa @ref vulkan_proc * * @since Added in version 3.2. * * @ingroup vulkan */ GLFWAPI GLFWvkproc glfwGetInstanceProcAddress(VkInstance instance, const char* procname); /*! @brief Returns whether the specified queue family can present images. * * This function returns whether the specified queue family of the specified * physical device supports presentation to the platform GLFW was built for. * * If Vulkan or the required window surface creation instance extensions are * not available on the machine, or if the specified instance was not created * with the required extensions, this function returns `GLFW_FALSE` and * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref glfwVulkanSupported * to check whether Vulkan is at least minimally available and @ref * glfwGetRequiredInstanceExtensions to check what instance extensions are * required. * * @param[in] instance The instance that the physical device belongs to. * @param[in] device The physical device that the queue family belongs to. * @param[in] queuefamily The index of the queue family to query. * @return `GLFW_TRUE` if the queue family supports presentation, or * `GLFW_FALSE` otherwise. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_API_UNAVAILABLE and @ref GLFW_PLATFORM_ERROR. * * @remark @macos This function currently always returns `GLFW_TRUE`, as the * `VK_MVK_macos_surface` extension does not provide * a `vkGetPhysicalDevice*PresentationSupport` type function. * * @thread_safety This function may be called from any thread. For * synchronization details of Vulkan objects, see the Vulkan specification. * * @sa @ref vulkan_present * * @since Added in version 3.2. * * @ingroup vulkan */ GLFWAPI int glfwGetPhysicalDevicePresentationSupport(VkInstance instance, VkPhysicalDevice device, uint32_t queuefamily); /*! @brief Creates a Vulkan surface for the specified window. * * This function creates a Vulkan surface for the specified window. * * If the Vulkan loader or at least one minimally functional ICD were not found, * this function returns `VK_ERROR_INITIALIZATION_FAILED` and generates a @ref * GLFW_API_UNAVAILABLE error. Call @ref glfwVulkanSupported to check whether * Vulkan is at least minimally available. * * If the required window surface creation instance extensions are not * available or if the specified instance was not created with these extensions * enabled, this function returns `VK_ERROR_EXTENSION_NOT_PRESENT` and * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref * glfwGetRequiredInstanceExtensions to check what instance extensions are * required. * * The window surface cannot be shared with another API so the window must * have been created with the [client api hint](@ref GLFW_CLIENT_API_attrib) * set to `GLFW_NO_API` otherwise it generates a @ref GLFW_INVALID_VALUE error * and returns `VK_ERROR_NATIVE_WINDOW_IN_USE_KHR`. * * The window surface must be destroyed before the specified Vulkan instance. * It is the responsibility of the caller to destroy the window surface. GLFW * does not destroy it for you. Call `vkDestroySurfaceKHR` to destroy the * surface. * * @param[in] instance The Vulkan instance to create the surface in. * @param[in] window The window to create the surface for. * @param[in] allocator The allocator to use, or `NULL` to use the default * allocator. * @param[out] surface Where to store the handle of the surface. This is set * to `VK_NULL_HANDLE` if an error occurred. * @return `VK_SUCCESS` if successful, or a Vulkan error code if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_API_UNAVAILABLE, @ref GLFW_PLATFORM_ERROR and @ref GLFW_INVALID_VALUE * * @remark If an error occurs before the creation call is made, GLFW returns * the Vulkan error code most appropriate for the error. Appropriate use of * @ref glfwVulkanSupported and @ref glfwGetRequiredInstanceExtensions should * eliminate almost all occurrences of these errors. * * @remark @macos This function currently only supports the * `VK_MVK_macos_surface` extension from MoltenVK. * * @remark @macos This function creates and sets a `CAMetalLayer` instance for * the window content view, which is required for MoltenVK to function. * * @thread_safety This function may be called from any thread. For * synchronization details of Vulkan objects, see the Vulkan specification. * * @sa @ref vulkan_surface * @sa @ref glfwGetRequiredInstanceExtensions * * @since Added in version 3.2. * * @ingroup vulkan */ GLFWAPI VkResult glfwCreateWindowSurface(VkInstance instance, GLFWwindow* window, const VkAllocationCallbacks* allocator, VkSurfaceKHR* surface); #endif /*VK_VERSION_1_0*/ /************************************************************************* * Global definition cleanup *************************************************************************/ /* ------------------- BEGIN SYSTEM/COMPILER SPECIFIC -------------------- */ #ifdef GLFW_WINGDIAPI_DEFINED #undef WINGDIAPI #undef GLFW_WINGDIAPI_DEFINED #endif #ifdef GLFW_CALLBACK_DEFINED #undef CALLBACK #undef GLFW_CALLBACK_DEFINED #endif /* Some OpenGL related headers need GLAPIENTRY, but it is unconditionally * defined by some gl.h variants (OpenBSD) so define it after if needed. */ #ifndef GLAPIENTRY #define GLAPIENTRY APIENTRY #endif /* -------------------- END SYSTEM/COMPILER SPECIFIC --------------------- */ #ifdef __cplusplus } #endif #endif /* _glfw3_h_ */ ================================================ FILE: libraries/glfw/glfw3native.h ================================================ /************************************************************************* * GLFW 3.3 - www.glfw.org * A library for OpenGL, window and input *------------------------------------------------------------------------ * Copyright (c) 2002-2006 Marcus Geelnard * Copyright (c) 2006-2018 Camilla Löwy * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would * be appreciated but is not required. * * 2. Altered source versions must be plainly marked as such, and must not * be misrepresented as being the original software. * * 3. This notice may not be removed or altered from any source * distribution. * *************************************************************************/ #ifndef _glfw3_native_h_ #define _glfw3_native_h_ #ifdef __cplusplus extern "C" { #endif /************************************************************************* * Doxygen documentation *************************************************************************/ /*! @file glfw3native.h * @brief The header of the native access functions. * * This is the header file of the native access functions. See @ref native for * more information. */ /*! @defgroup native Native access * @brief Functions related to accessing native handles. * * **By using the native access functions you assert that you know what you're * doing and how to fix problems caused by using them. If you don't, you * shouldn't be using them.** * * Before the inclusion of @ref glfw3native.h, you may define zero or more * window system API macro and zero or more context creation API macros. * * The chosen backends must match those the library was compiled for. Failure * to do this will cause a link-time error. * * The available window API macros are: * * `GLFW_EXPOSE_NATIVE_WIN32` * * `GLFW_EXPOSE_NATIVE_COCOA` * * `GLFW_EXPOSE_NATIVE_X11` * * `GLFW_EXPOSE_NATIVE_WAYLAND` * * The available context API macros are: * * `GLFW_EXPOSE_NATIVE_WGL` * * `GLFW_EXPOSE_NATIVE_NSGL` * * `GLFW_EXPOSE_NATIVE_GLX` * * `GLFW_EXPOSE_NATIVE_EGL` * * `GLFW_EXPOSE_NATIVE_OSMESA` * * These macros select which of the native access functions that are declared * and which platform-specific headers to include. It is then up your (by * definition platform-specific) code to handle which of these should be * defined. */ /************************************************************************* * System headers and types *************************************************************************/ #if defined(GLFW_EXPOSE_NATIVE_WIN32) || defined(GLFW_EXPOSE_NATIVE_WGL) // This is a workaround for the fact that glfw3.h needs to export APIENTRY (for // example to allow applications to correctly declare a GL_ARB_debug_output // callback) but windows.h assumes no one will define APIENTRY before it does #if defined(GLFW_APIENTRY_DEFINED) #undef APIENTRY #undef GLFW_APIENTRY_DEFINED #endif #include #elif defined(GLFW_EXPOSE_NATIVE_COCOA) || defined(GLFW_EXPOSE_NATIVE_NSGL) #if defined(__OBJC__) #import #else #include typedef void* id; #endif #elif defined(GLFW_EXPOSE_NATIVE_X11) || defined(GLFW_EXPOSE_NATIVE_GLX) #include #include #elif defined(GLFW_EXPOSE_NATIVE_WAYLAND) #include #endif #if defined(GLFW_EXPOSE_NATIVE_WGL) /* WGL is declared by windows.h */ #endif #if defined(GLFW_EXPOSE_NATIVE_NSGL) /* NSGL is declared by Cocoa.h */ #endif #if defined(GLFW_EXPOSE_NATIVE_GLX) #include #endif #if defined(GLFW_EXPOSE_NATIVE_EGL) #include #endif #if defined(GLFW_EXPOSE_NATIVE_OSMESA) #include #endif /************************************************************************* * Functions *************************************************************************/ #if defined(GLFW_EXPOSE_NATIVE_WIN32) /*! @brief Returns the adapter device name of the specified monitor. * * @return The UTF-8 encoded adapter device name (for example `\\.\DISPLAY1`) * of the specified monitor, or `NULL` if an [error](@ref error_handling) * occurred. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @since Added in version 3.1. * * @ingroup native */ GLFWAPI const char* glfwGetWin32Adapter(GLFWmonitor* monitor); /*! @brief Returns the display device name of the specified monitor. * * @return The UTF-8 encoded display device name (for example * `\\.\DISPLAY1\Monitor0`) of the specified monitor, or `NULL` if an * [error](@ref error_handling) occurred. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @since Added in version 3.1. * * @ingroup native */ GLFWAPI const char* glfwGetWin32Monitor(GLFWmonitor* monitor); /*! @brief Returns the `HWND` of the specified window. * * @return The `HWND` of the specified window, or `NULL` if an * [error](@ref error_handling) occurred. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @since Added in version 3.0. * * @ingroup native */ GLFWAPI HWND glfwGetWin32Window(GLFWwindow* window); #endif #if defined(GLFW_EXPOSE_NATIVE_WGL) /*! @brief Returns the `HGLRC` of the specified window. * * @return The `HGLRC` of the specified window, or `NULL` if an * [error](@ref error_handling) occurred. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @since Added in version 3.0. * * @ingroup native */ GLFWAPI HGLRC glfwGetWGLContext(GLFWwindow* window); #endif #if defined(GLFW_EXPOSE_NATIVE_COCOA) /*! @brief Returns the `CGDirectDisplayID` of the specified monitor. * * @return The `CGDirectDisplayID` of the specified monitor, or * `kCGNullDirectDisplay` if an [error](@ref error_handling) occurred. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @since Added in version 3.1. * * @ingroup native */ GLFWAPI CGDirectDisplayID glfwGetCocoaMonitor(GLFWmonitor* monitor); /*! @brief Returns the `NSWindow` of the specified window. * * @return The `NSWindow` of the specified window, or `nil` if an * [error](@ref error_handling) occurred. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @since Added in version 3.0. * * @ingroup native */ GLFWAPI id glfwGetCocoaWindow(GLFWwindow* window); #endif #if defined(GLFW_EXPOSE_NATIVE_NSGL) /*! @brief Returns the `NSOpenGLContext` of the specified window. * * @return The `NSOpenGLContext` of the specified window, or `nil` if an * [error](@ref error_handling) occurred. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @since Added in version 3.0. * * @ingroup native */ GLFWAPI id glfwGetNSGLContext(GLFWwindow* window); #endif #if defined(GLFW_EXPOSE_NATIVE_X11) /*! @brief Returns the `Display` used by GLFW. * * @return The `Display` used by GLFW, or `NULL` if an * [error](@ref error_handling) occurred. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @since Added in version 3.0. * * @ingroup native */ GLFWAPI Display* glfwGetX11Display(void); /*! @brief Returns the `RRCrtc` of the specified monitor. * * @return The `RRCrtc` of the specified monitor, or `None` if an * [error](@ref error_handling) occurred. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @since Added in version 3.1. * * @ingroup native */ GLFWAPI RRCrtc glfwGetX11Adapter(GLFWmonitor* monitor); /*! @brief Returns the `RROutput` of the specified monitor. * * @return The `RROutput` of the specified monitor, or `None` if an * [error](@ref error_handling) occurred. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @since Added in version 3.1. * * @ingroup native */ GLFWAPI RROutput glfwGetX11Monitor(GLFWmonitor* monitor); /*! @brief Returns the `Window` of the specified window. * * @return The `Window` of the specified window, or `None` if an * [error](@ref error_handling) occurred. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @since Added in version 3.0. * * @ingroup native */ GLFWAPI Window glfwGetX11Window(GLFWwindow* window); /*! @brief Sets the current primary selection to the specified string. * * @param[in] string A UTF-8 encoded string. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @pointer_lifetime The specified string is copied before this function * returns. * * @thread_safety This function must only be called from the main thread. * * @sa @ref clipboard * @sa glfwGetX11SelectionString * @sa glfwSetClipboardString * * @since Added in version 3.3. * * @ingroup native */ GLFWAPI void glfwSetX11SelectionString(const char* string); /*! @brief Returns the contents of the current primary selection as a string. * * If the selection is empty or if its contents cannot be converted, `NULL` * is returned and a @ref GLFW_FORMAT_UNAVAILABLE error is generated. * * @return The contents of the selection as a UTF-8 encoded string, or `NULL` * if an [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @pointer_lifetime The returned string is allocated and freed by GLFW. You * should not free it yourself. It is valid until the next call to @ref * glfwGetX11SelectionString or @ref glfwSetX11SelectionString, or until the * library is terminated. * * @thread_safety This function must only be called from the main thread. * * @sa @ref clipboard * @sa glfwSetX11SelectionString * @sa glfwGetClipboardString * * @since Added in version 3.3. * * @ingroup native */ GLFWAPI const char* glfwGetX11SelectionString(void); #endif #if defined(GLFW_EXPOSE_NATIVE_GLX) /*! @brief Returns the `GLXContext` of the specified window. * * @return The `GLXContext` of the specified window, or `NULL` if an * [error](@ref error_handling) occurred. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @since Added in version 3.0. * * @ingroup native */ GLFWAPI GLXContext glfwGetGLXContext(GLFWwindow* window); /*! @brief Returns the `GLXWindow` of the specified window. * * @return The `GLXWindow` of the specified window, or `None` if an * [error](@ref error_handling) occurred. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @since Added in version 3.2. * * @ingroup native */ GLFWAPI GLXWindow glfwGetGLXWindow(GLFWwindow* window); #endif #if defined(GLFW_EXPOSE_NATIVE_WAYLAND) /*! @brief Returns the `struct wl_display*` used by GLFW. * * @return The `struct wl_display*` used by GLFW, or `NULL` if an * [error](@ref error_handling) occurred. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @since Added in version 3.2. * * @ingroup native */ GLFWAPI struct wl_display* glfwGetWaylandDisplay(void); /*! @brief Returns the `struct wl_output*` of the specified monitor. * * @return The `struct wl_output*` of the specified monitor, or `NULL` if an * [error](@ref error_handling) occurred. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @since Added in version 3.2. * * @ingroup native */ GLFWAPI struct wl_output* glfwGetWaylandMonitor(GLFWmonitor* monitor); /*! @brief Returns the main `struct wl_surface*` of the specified window. * * @return The main `struct wl_surface*` of the specified window, or `NULL` if * an [error](@ref error_handling) occurred. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @since Added in version 3.2. * * @ingroup native */ GLFWAPI struct wl_surface* glfwGetWaylandWindow(GLFWwindow* window); #endif #if defined(GLFW_EXPOSE_NATIVE_EGL) /*! @brief Returns the `EGLDisplay` used by GLFW. * * @return The `EGLDisplay` used by GLFW, or `EGL_NO_DISPLAY` if an * [error](@ref error_handling) occurred. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @since Added in version 3.0. * * @ingroup native */ GLFWAPI EGLDisplay glfwGetEGLDisplay(void); /*! @brief Returns the `EGLContext` of the specified window. * * @return The `EGLContext` of the specified window, or `EGL_NO_CONTEXT` if an * [error](@ref error_handling) occurred. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @since Added in version 3.0. * * @ingroup native */ GLFWAPI EGLContext glfwGetEGLContext(GLFWwindow* window); /*! @brief Returns the `EGLSurface` of the specified window. * * @return The `EGLSurface` of the specified window, or `EGL_NO_SURFACE` if an * [error](@ref error_handling) occurred. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @since Added in version 3.0. * * @ingroup native */ GLFWAPI EGLSurface glfwGetEGLSurface(GLFWwindow* window); #endif #if defined(GLFW_EXPOSE_NATIVE_OSMESA) /*! @brief Retrieves the color buffer associated with the specified window. * * @param[in] window The window whose color buffer to retrieve. * @param[out] width Where to store the width of the color buffer, or `NULL`. * @param[out] height Where to store the height of the color buffer, or `NULL`. * @param[out] format Where to store the OSMesa pixel format of the color * buffer, or `NULL`. * @param[out] buffer Where to store the address of the color buffer, or * `NULL`. * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an * [error](@ref error_handling) occurred. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @since Added in version 3.3. * * @ingroup native */ GLFWAPI int glfwGetOSMesaColorBuffer(GLFWwindow* window, int* width, int* height, int* format, void** buffer); /*! @brief Retrieves the depth buffer associated with the specified window. * * @param[in] window The window whose depth buffer to retrieve. * @param[out] width Where to store the width of the depth buffer, or `NULL`. * @param[out] height Where to store the height of the depth buffer, or `NULL`. * @param[out] bytesPerValue Where to store the number of bytes per depth * buffer element, or `NULL`. * @param[out] buffer Where to store the address of the depth buffer, or * `NULL`. * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an * [error](@ref error_handling) occurred. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @since Added in version 3.3. * * @ingroup native */ GLFWAPI int glfwGetOSMesaDepthBuffer(GLFWwindow* window, int* width, int* height, int* bytesPerValue, void** buffer); /*! @brief Returns the `OSMesaContext` of the specified window. * * @return The `OSMesaContext` of the specified window, or `NULL` if an * [error](@ref error_handling) occurred. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @since Added in version 3.3. * * @ingroup native */ GLFWAPI OSMesaContext glfwGetOSMesaContext(GLFWwindow* window); #endif #ifdef __cplusplus } #endif #endif /* _glfw3_native_h_ */ ================================================ FILE: libraries/glm/LICENSE ================================================ ================================================================================ OpenGL Mathematics (GLM) -------------------------------------------------------------------------------- GLM is licensed under The Happy Bunny License or MIT License ================================================================================ The Happy Bunny License (Modified MIT License) -------------------------------------------------------------------------------- Copyright (c) 2005 - G-Truc Creation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. Restrictions: By making use of the Software for military purposes, you choose to make a Bunny unhappy. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================================================ The MIT License -------------------------------------------------------------------------------- Copyright (c) 2005 - G-Truc Creation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: libraries/glm/common.hpp ================================================ /// @ref core /// @file glm/common.hpp /// /// @see GLSL 4.20.8 specification, section 8.3 Common Functions /// /// @defgroup core_func_common Common functions /// @ingroup core /// /// Provides GLSL common functions /// /// These all operate component-wise. The description is per component. /// /// Include to use these core features. #pragma once #include "detail/qualifier.hpp" #include "detail/_fixes.hpp" namespace glm { /// @addtogroup core_func_common /// @{ /// Returns x if x >= 0; otherwise, it returns -x. /// /// @tparam genType floating-point or signed integer; scalar or vector types. /// /// @see GLSL abs man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL GLM_CONSTEXPR genType abs(genType x); /// Returns x if x >= 0; otherwise, it returns -x. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point or signed integer scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL abs man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL GLM_CONSTEXPR vec abs(vec const& x); /// Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL sign man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL vec sign(vec const& x); /// Returns a value equal to the nearest integer that is less then or equal to x. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL floor man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL vec floor(vec const& x); /// Returns a value equal to the nearest integer to x /// whose absolute value is not larger than the absolute value of x. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL trunc man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL vec trunc(vec const& x); /// Returns a value equal to the nearest integer to x. /// The fraction 0.5 will round in a direction chosen by the /// implementation, presumably the direction that is fastest. /// This includes the possibility that round(x) returns the /// same value as roundEven(x) for all values of x. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL round man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL vec round(vec const& x); /// Returns a value equal to the nearest integer to x. /// A fractional part of 0.5 will round toward the nearest even /// integer. (Both 3.5 and 4.5 for x will return 4.0.) /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL roundEven man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions /// @see New round to even technique template GLM_FUNC_DECL vec roundEven(vec const& x); /// Returns a value equal to the nearest integer /// that is greater than or equal to x. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL ceil man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL vec ceil(vec const& x); /// Return x - floor(x). /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL fract man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL genType fract(genType x); /// Return x - floor(x). /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL fract man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL vec fract(vec const& x); template GLM_FUNC_DECL genType mod(genType x, genType y); template GLM_FUNC_DECL vec mod(vec const& x, T y); /// Modulus. Returns x - y * floor(x / y) /// for each component in x using the floating point value y. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types, include glm/gtc/integer for integer scalar types support /// @tparam Q Value from qualifier enum /// /// @see GLSL mod man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL vec mod(vec const& x, vec const& y); /// Returns the fractional part of x and sets i to the integer /// part (as a whole number floating point value). Both the /// return value and the output parameter will have the same /// sign as x. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL modf man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL genType modf(genType x, genType& i); /// Returns y if y < x; otherwise, it returns x. /// /// @tparam genType Floating-point or integer; scalar or vector types. /// /// @see GLSL min man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL GLM_CONSTEXPR genType min(genType x, genType y); /// Returns y if y < x; otherwise, it returns x. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point or integer scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL min man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL GLM_CONSTEXPR vec min(vec const& x, T y); /// Returns y if y < x; otherwise, it returns x. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point or integer scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL min man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL GLM_CONSTEXPR vec min(vec const& x, vec const& y); /// Returns y if x < y; otherwise, it returns x. /// /// @tparam genType Floating-point or integer; scalar or vector types. /// /// @see GLSL max man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL GLM_CONSTEXPR genType max(genType x, genType y); /// Returns y if x < y; otherwise, it returns x. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point or integer scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL max man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL GLM_CONSTEXPR vec max(vec const& x, T y); /// Returns y if x < y; otherwise, it returns x. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point or integer scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL max man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL GLM_CONSTEXPR vec max(vec const& x, vec const& y); /// Returns min(max(x, minVal), maxVal) for each component in x /// using the floating-point values minVal and maxVal. /// /// @tparam genType Floating-point or integer; scalar or vector types. /// /// @see GLSL clamp man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL GLM_CONSTEXPR genType clamp(genType x, genType minVal, genType maxVal); /// Returns min(max(x, minVal), maxVal) for each component in x /// using the floating-point values minVal and maxVal. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point or integer scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL clamp man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL GLM_CONSTEXPR vec clamp(vec const& x, T minVal, T maxVal); /// Returns min(max(x, minVal), maxVal) for each component in x /// using the floating-point values minVal and maxVal. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point or integer scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL clamp man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL GLM_CONSTEXPR vec clamp(vec const& x, vec const& minVal, vec const& maxVal); /// If genTypeU is a floating scalar or vector: /// Returns x * (1.0 - a) + y * a, i.e., the linear blend of /// x and y using the floating-point value a. /// The value for a is not restricted to the range [0, 1]. /// /// If genTypeU is a boolean scalar or vector: /// Selects which vector each returned component comes /// from. For a component of 'a' that is false, the /// corresponding component of 'x' is returned. For a /// component of 'a' that is true, the corresponding /// component of 'y' is returned. Components of 'x' and 'y' that /// are not selected are allowed to be invalid floating point /// values and will have no effect on the results. Thus, this /// provides different functionality than /// genType mix(genType x, genType y, genType(a)) /// where a is a Boolean vector. /// /// @see GLSL mix man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions /// /// @param[in] x Value to interpolate. /// @param[in] y Value to interpolate. /// @param[in] a Interpolant. /// /// @tparam genTypeT Floating point scalar or vector. /// @tparam genTypeU Floating point or boolean scalar or vector. It can't be a vector if it is the length of genTypeT. /// /// @code /// #include /// ... /// float a; /// bool b; /// glm::dvec3 e; /// glm::dvec3 f; /// glm::vec4 g; /// glm::vec4 h; /// ... /// glm::vec4 r = glm::mix(g, h, a); // Interpolate with a floating-point scalar two vectors. /// glm::vec4 s = glm::mix(g, h, b); // Returns g or h; /// glm::dvec3 t = glm::mix(e, f, a); // Types of the third parameter is not required to match with the first and the second. /// glm::vec4 u = glm::mix(g, h, r); // Interpolations can be perform per component with a vector for the last parameter. /// @endcode template GLM_FUNC_DECL genTypeT mix(genTypeT x, genTypeT y, genTypeU a); template GLM_FUNC_DECL vec mix(vec const& x, vec const& y, vec const& a); template GLM_FUNC_DECL vec mix(vec const& x, vec const& y, U a); /// Returns 0.0 if x < edge, otherwise it returns 1.0 for each component of a genType. /// /// @see GLSL step man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL genType step(genType edge, genType x); /// Returns 0.0 if x < edge, otherwise it returns 1.0. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL step man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL vec step(T edge, vec const& x); /// Returns 0.0 if x < edge, otherwise it returns 1.0. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL step man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL vec step(vec const& edge, vec const& x); /// Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and /// performs smooth Hermite interpolation between 0 and 1 /// when edge0 < x < edge1. This is useful in cases where /// you would want a threshold function with a smooth /// transition. This is equivalent to: /// genType t; /// t = clamp ((x - edge0) / (edge1 - edge0), 0, 1); /// return t * t * (3 - 2 * t); /// Results are undefined if edge0 >= edge1. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL smoothstep man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL genType smoothstep(genType edge0, genType edge1, genType x); template GLM_FUNC_DECL vec smoothstep(T edge0, T edge1, vec const& x); template GLM_FUNC_DECL vec smoothstep(vec const& edge0, vec const& edge1, vec const& x); /// Returns true if x holds a NaN (not a number) /// representation in the underlying implementation's set of /// floating point representations. Returns false otherwise, /// including for implementations with no NaN /// representations. /// /// /!\ When using compiler fast math, this function may fail. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL isnan man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL vec isnan(vec const& x); /// Returns true if x holds a positive infinity or negative /// infinity representation in the underlying implementation's /// set of floating point representations. Returns false /// otherwise, including for implementations with no infinity /// representations. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL isinf man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL vec isinf(vec const& x); /// Returns a signed integer value representing /// the encoding of a floating-point value. The floating-point /// value's bit-level representation is preserved. /// /// @see GLSL floatBitsToInt man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions GLM_FUNC_DECL int floatBitsToInt(float const& v); /// Returns a signed integer value representing /// the encoding of a floating-point value. The floatingpoint /// value's bit-level representation is preserved. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam Q Value from qualifier enum /// /// @see GLSL floatBitsToInt man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL vec floatBitsToInt(vec const& v); /// Returns a unsigned integer value representing /// the encoding of a floating-point value. The floatingpoint /// value's bit-level representation is preserved. /// /// @see GLSL floatBitsToUint man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions GLM_FUNC_DECL uint floatBitsToUint(float const& v); /// Returns a unsigned integer value representing /// the encoding of a floating-point value. The floatingpoint /// value's bit-level representation is preserved. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam Q Value from qualifier enum /// /// @see GLSL floatBitsToUint man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL vec floatBitsToUint(vec const& v); /// Returns a floating-point value corresponding to a signed /// integer encoding of a floating-point value. /// If an inf or NaN is passed in, it will not signal, and the /// resulting floating point value is unspecified. Otherwise, /// the bit-level representation is preserved. /// /// @see GLSL intBitsToFloat man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions GLM_FUNC_DECL float intBitsToFloat(int const& v); /// Returns a floating-point value corresponding to a signed /// integer encoding of a floating-point value. /// If an inf or NaN is passed in, it will not signal, and the /// resulting floating point value is unspecified. Otherwise, /// the bit-level representation is preserved. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam Q Value from qualifier enum /// /// @see GLSL intBitsToFloat man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL vec intBitsToFloat(vec const& v); /// Returns a floating-point value corresponding to a /// unsigned integer encoding of a floating-point value. /// If an inf or NaN is passed in, it will not signal, and the /// resulting floating point value is unspecified. Otherwise, /// the bit-level representation is preserved. /// /// @see GLSL uintBitsToFloat man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions GLM_FUNC_DECL float uintBitsToFloat(uint const& v); /// Returns a floating-point value corresponding to a /// unsigned integer encoding of a floating-point value. /// If an inf or NaN is passed in, it will not signal, and the /// resulting floating point value is unspecified. Otherwise, /// the bit-level representation is preserved. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam Q Value from qualifier enum /// /// @see GLSL uintBitsToFloat man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL vec uintBitsToFloat(vec const& v); /// Computes and returns a * b + c. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL fma man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL genType fma(genType const& a, genType const& b, genType const& c); /// Splits x into a floating-point significand in the range /// [0.5, 1.0) and an integral exponent of two, such that: /// x = significand * exp(2, exponent) /// /// The significand is returned by the function and the /// exponent is returned in the parameter exp. For a /// floating-point value of zero, the significant and exponent /// are both zero. For a floating-point value that is an /// infinity or is not a number, the results are undefined. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL frexp man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL genType frexp(genType x, int& exp); template GLM_FUNC_DECL vec frexp(vec const& v, vec& exp); /// Builds a floating-point number from x and the /// corresponding integral exponent of two in exp, returning: /// significand * exp(2, exponent) /// /// If this product is too large to be represented in the /// floating-point type, the result is undefined. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL ldexp man page; /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL genType ldexp(genType const& x, int const& exp); template GLM_FUNC_DECL vec ldexp(vec const& v, vec const& exp); /// @} }//namespace glm #include "detail/func_common.inl" ================================================ FILE: libraries/glm/detail/_features.hpp ================================================ #pragma once // #define GLM_CXX98_EXCEPTIONS // #define GLM_CXX98_RTTI // #define GLM_CXX11_RVALUE_REFERENCES // Rvalue references - GCC 4.3 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html // GLM_CXX11_TRAILING_RETURN // Rvalue references for *this - GCC not supported // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm // GLM_CXX11_NONSTATIC_MEMBER_INIT // Initialization of class objects by rvalues - GCC any // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html // GLM_CXX11_NONSTATIC_MEMBER_INIT // Non-static data member initializers - GCC 4.7 // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm // #define GLM_CXX11_VARIADIC_TEMPLATE // Variadic templates - GCC 4.3 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf // // Extending variadic template template parameters - GCC 4.4 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf // #define GLM_CXX11_GENERALIZED_INITIALIZERS // Initializer lists - GCC 4.4 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm // #define GLM_CXX11_STATIC_ASSERT // Static assertions - GCC 4.3 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html // #define GLM_CXX11_AUTO_TYPE // auto-typed variables - GCC 4.4 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf // #define GLM_CXX11_AUTO_TYPE // Multi-declarator auto - GCC 4.4 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1737.pdf // #define GLM_CXX11_AUTO_TYPE // Removal of auto as a storage-class specifier - GCC 4.4 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2546.htm // #define GLM_CXX11_AUTO_TYPE // New function declarator syntax - GCC 4.4 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm // #define GLM_CXX11_LAMBDAS // New wording for C++0x lambdas - GCC 4.5 // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2927.pdf // #define GLM_CXX11_DECLTYPE // Declared type of an expression - GCC 4.3 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf // // Right angle brackets - GCC 4.3 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html // // Default template arguments for function templates DR226 GCC 4.3 // http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226 // // Solving the SFINAE problem for expressions DR339 GCC 4.4 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html // #define GLM_CXX11_ALIAS_TEMPLATE // Template aliases N2258 GCC 4.7 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf // // Extern templates N1987 Yes // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm // #define GLM_CXX11_NULLPTR // Null pointer constant N2431 GCC 4.6 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf // #define GLM_CXX11_STRONG_ENUMS // Strongly-typed enums N2347 GCC 4.4 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf // // Forward declarations for enums N2764 GCC 4.6 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf // // Generalized attributes N2761 GCC 4.8 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf // // Generalized constant expressions N2235 GCC 4.6 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf // // Alignment support N2341 GCC 4.8 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf // #define GLM_CXX11_DELEGATING_CONSTRUCTORS // Delegating constructors N1986 GCC 4.7 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf // // Inheriting constructors N2540 GCC 4.8 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm // #define GLM_CXX11_EXPLICIT_CONVERSIONS // Explicit conversion operators N2437 GCC 4.5 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf // // New character types N2249 GCC 4.4 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html // // Unicode string literals N2442 GCC 4.5 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm // // Raw string literals N2442 GCC 4.5 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm // // Universal character name literals N2170 GCC 4.5 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html // #define GLM_CXX11_USER_LITERALS // User-defined literals N2765 GCC 4.7 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf // // Standard Layout Types N2342 GCC 4.5 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.htm // #define GLM_CXX11_DEFAULTED_FUNCTIONS // #define GLM_CXX11_DELETED_FUNCTIONS // Defaulted and deleted functions N2346 GCC 4.4 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm // // Extended friend declarations N1791 GCC 4.7 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf // // Extending sizeof N2253 GCC 4.4 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html // #define GLM_CXX11_INLINE_NAMESPACES // Inline namespaces N2535 GCC 4.4 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm // #define GLM_CXX11_UNRESTRICTED_UNIONS // Unrestricted unions N2544 GCC 4.6 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf // #define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS // Local and unnamed types as template arguments N2657 GCC 4.5 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm // #define GLM_CXX11_RANGE_FOR // Range-based for N2930 GCC 4.6 // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html // #define GLM_CXX11_OVERRIDE_CONTROL // Explicit virtual overrides N2928 N3206 N3272 GCC 4.7 // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm // // Minimal support for garbage collection and reachability-based leak detection N2670 No // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm // #define GLM_CXX11_NOEXCEPT // Allowing move constructors to throw [noexcept] N3050 GCC 4.6 (core language only) // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html // // Defining move special member functions N3053 GCC 4.6 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html // // Sequence points N2239 Yes // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html // // Atomic operations N2427 GCC 4.4 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html // // Strong Compare and Exchange N2748 GCC 4.5 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html // // Bidirectional Fences N2752 GCC 4.8 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2752.htm // // Memory model N2429 GCC 4.8 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm // // Data-dependency ordering: atomics and memory model N2664 GCC 4.4 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2664.htm // // Propagating exceptions N2179 GCC 4.4 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html // // Abandoning a process and at_quick_exit N2440 GCC 4.8 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2440.htm // // Allow atomics use in signal handlers N2547 Yes // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2547.htm // // Thread-local storage N2659 GCC 4.8 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm // // Dynamic initialization and destruction with concurrency N2660 GCC 4.3 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm // // __func__ predefined identifier N2340 GCC 4.3 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.htm // // C99 preprocessor N1653 GCC 4.3 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm // // long long N1811 GCC 4.3 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf // // Extended integral types N1988 Yes // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1988.pdf #if(GLM_COMPILER & GLM_COMPILER_GCC) # define GLM_CXX11_STATIC_ASSERT #elif(GLM_COMPILER & GLM_COMPILER_CLANG) # if(__has_feature(cxx_exceptions)) # define GLM_CXX98_EXCEPTIONS # endif # if(__has_feature(cxx_rtti)) # define GLM_CXX98_RTTI # endif # if(__has_feature(cxx_access_control_sfinae)) # define GLM_CXX11_ACCESS_CONTROL_SFINAE # endif # if(__has_feature(cxx_alias_templates)) # define GLM_CXX11_ALIAS_TEMPLATE # endif # if(__has_feature(cxx_alignas)) # define GLM_CXX11_ALIGNAS # endif # if(__has_feature(cxx_attributes)) # define GLM_CXX11_ATTRIBUTES # endif # if(__has_feature(cxx_constexpr)) # define GLM_CXX11_CONSTEXPR # endif # if(__has_feature(cxx_decltype)) # define GLM_CXX11_DECLTYPE # endif # if(__has_feature(cxx_default_function_template_args)) # define GLM_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS # endif # if(__has_feature(cxx_defaulted_functions)) # define GLM_CXX11_DEFAULTED_FUNCTIONS # endif # if(__has_feature(cxx_delegating_constructors)) # define GLM_CXX11_DELEGATING_CONSTRUCTORS # endif # if(__has_feature(cxx_deleted_functions)) # define GLM_CXX11_DELETED_FUNCTIONS # endif # if(__has_feature(cxx_explicit_conversions)) # define GLM_CXX11_EXPLICIT_CONVERSIONS # endif # if(__has_feature(cxx_generalized_initializers)) # define GLM_CXX11_GENERALIZED_INITIALIZERS # endif # if(__has_feature(cxx_implicit_moves)) # define GLM_CXX11_IMPLICIT_MOVES # endif # if(__has_feature(cxx_inheriting_constructors)) # define GLM_CXX11_INHERITING_CONSTRUCTORS # endif # if(__has_feature(cxx_inline_namespaces)) # define GLM_CXX11_INLINE_NAMESPACES # endif # if(__has_feature(cxx_lambdas)) # define GLM_CXX11_LAMBDAS # endif # if(__has_feature(cxx_local_type_template_args)) # define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS # endif # if(__has_feature(cxx_noexcept)) # define GLM_CXX11_NOEXCEPT # endif # if(__has_feature(cxx_nonstatic_member_init)) # define GLM_CXX11_NONSTATIC_MEMBER_INIT # endif # if(__has_feature(cxx_nullptr)) # define GLM_CXX11_NULLPTR # endif # if(__has_feature(cxx_override_control)) # define GLM_CXX11_OVERRIDE_CONTROL # endif # if(__has_feature(cxx_reference_qualified_functions)) # define GLM_CXX11_REFERENCE_QUALIFIED_FUNCTIONS # endif # if(__has_feature(cxx_range_for)) # define GLM_CXX11_RANGE_FOR # endif # if(__has_feature(cxx_raw_string_literals)) # define GLM_CXX11_RAW_STRING_LITERALS # endif # if(__has_feature(cxx_rvalue_references)) # define GLM_CXX11_RVALUE_REFERENCES # endif # if(__has_feature(cxx_static_assert)) # define GLM_CXX11_STATIC_ASSERT # endif # if(__has_feature(cxx_auto_type)) # define GLM_CXX11_AUTO_TYPE # endif # if(__has_feature(cxx_strong_enums)) # define GLM_CXX11_STRONG_ENUMS # endif # if(__has_feature(cxx_trailing_return)) # define GLM_CXX11_TRAILING_RETURN # endif # if(__has_feature(cxx_unicode_literals)) # define GLM_CXX11_UNICODE_LITERALS # endif # if(__has_feature(cxx_unrestricted_unions)) # define GLM_CXX11_UNRESTRICTED_UNIONS # endif # if(__has_feature(cxx_user_literals)) # define GLM_CXX11_USER_LITERALS # endif # if(__has_feature(cxx_variadic_templates)) # define GLM_CXX11_VARIADIC_TEMPLATES # endif #endif//(GLM_COMPILER & GLM_COMPILER_CLANG) ================================================ FILE: libraries/glm/detail/_fixes.hpp ================================================ #include //! Workaround for compatibility with other libraries #ifdef max #undef max #endif //! Workaround for compatibility with other libraries #ifdef min #undef min #endif //! Workaround for Android #ifdef isnan #undef isnan #endif //! Workaround for Android #ifdef isinf #undef isinf #endif //! Workaround for Chrone Native Client #ifdef log2 #undef log2 #endif ================================================ FILE: libraries/glm/detail/_noise.hpp ================================================ #pragma once #include "../common.hpp" namespace glm{ namespace detail { template GLM_FUNC_QUALIFIER T mod289(T const& x) { return x - floor(x * (static_cast(1.0) / static_cast(289.0))) * static_cast(289.0); } template GLM_FUNC_QUALIFIER T permute(T const& x) { return mod289(((x * static_cast(34)) + static_cast(1)) * x); } template GLM_FUNC_QUALIFIER vec<2, T, Q> permute(vec<2, T, Q> const& x) { return mod289(((x * static_cast(34)) + static_cast(1)) * x); } template GLM_FUNC_QUALIFIER vec<3, T, Q> permute(vec<3, T, Q> const& x) { return mod289(((x * static_cast(34)) + static_cast(1)) * x); } template GLM_FUNC_QUALIFIER vec<4, T, Q> permute(vec<4, T, Q> const& x) { return mod289(((x * static_cast(34)) + static_cast(1)) * x); } template GLM_FUNC_QUALIFIER T taylorInvSqrt(T const& r) { return static_cast(1.79284291400159) - static_cast(0.85373472095314) * r; } template GLM_FUNC_QUALIFIER vec<2, T, Q> taylorInvSqrt(vec<2, T, Q> const& r) { return static_cast(1.79284291400159) - static_cast(0.85373472095314) * r; } template GLM_FUNC_QUALIFIER vec<3, T, Q> taylorInvSqrt(vec<3, T, Q> const& r) { return static_cast(1.79284291400159) - static_cast(0.85373472095314) * r; } template GLM_FUNC_QUALIFIER vec<4, T, Q> taylorInvSqrt(vec<4, T, Q> const& r) { return static_cast(1.79284291400159) - static_cast(0.85373472095314) * r; } template GLM_FUNC_QUALIFIER vec<2, T, Q> fade(vec<2, T, Q> const& t) { return (t * t * t) * (t * (t * static_cast(6) - static_cast(15)) + static_cast(10)); } template GLM_FUNC_QUALIFIER vec<3, T, Q> fade(vec<3, T, Q> const& t) { return (t * t * t) * (t * (t * static_cast(6) - static_cast(15)) + static_cast(10)); } template GLM_FUNC_QUALIFIER vec<4, T, Q> fade(vec<4, T, Q> const& t) { return (t * t * t) * (t * (t * static_cast(6) - static_cast(15)) + static_cast(10)); } }//namespace detail }//namespace glm ================================================ FILE: libraries/glm/detail/_swizzle.hpp ================================================ #pragma once namespace glm{ namespace detail { // Internal class for implementing swizzle operators template struct _swizzle_base0 { protected: GLM_FUNC_QUALIFIER T& elem(size_t i){ return (reinterpret_cast(_buffer))[i]; } GLM_FUNC_QUALIFIER T const& elem(size_t i) const{ return (reinterpret_cast(_buffer))[i]; } // Use an opaque buffer to *ensure* the compiler doesn't call a constructor. // The size 1 buffer is assumed to aligned to the actual members so that the // elem() char _buffer[1]; }; template struct _swizzle_base1 : public _swizzle_base0 { }; template struct _swizzle_base1<2, T, Q, E0,E1,-1,-2, Aligned> : public _swizzle_base0 { GLM_FUNC_QUALIFIER vec<2, T, Q> operator ()() const { return vec<2, T, Q>(this->elem(E0), this->elem(E1)); } }; template struct _swizzle_base1<3, T, Q, E0,E1,E2,-1, Aligned> : public _swizzle_base0 { GLM_FUNC_QUALIFIER vec<3, T, Q> operator ()() const { return vec<3, T, Q>(this->elem(E0), this->elem(E1), this->elem(E2)); } }; template struct _swizzle_base1<4, T, Q, E0,E1,E2,E3, Aligned> : public _swizzle_base0 { GLM_FUNC_QUALIFIER vec<4, T, Q> operator ()() const { return vec<4, T, Q>(this->elem(E0), this->elem(E1), this->elem(E2), this->elem(E3)); } }; // Internal class for implementing swizzle operators /* Template parameters: T = type of scalar values (e.g. float, double) N = number of components in the vector (e.g. 3) E0...3 = what index the n-th element of this swizzle refers to in the unswizzled vec DUPLICATE_ELEMENTS = 1 if there is a repeated element, 0 otherwise (used to specialize swizzles containing duplicate elements so that they cannot be used as r-values). */ template struct _swizzle_base2 : public _swizzle_base1::value> { struct op_equal { GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e = t; } }; struct op_minus { GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e -= t; } }; struct op_plus { GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e += t; } }; struct op_mul { GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e *= t; } }; struct op_div { GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e /= t; } }; public: GLM_FUNC_QUALIFIER _swizzle_base2& operator= (const T& t) { for (int i = 0; i < N; ++i) (*this)[i] = t; return *this; } GLM_FUNC_QUALIFIER _swizzle_base2& operator= (vec const& that) { _apply_op(that, op_equal()); return *this; } GLM_FUNC_QUALIFIER void operator -= (vec const& that) { _apply_op(that, op_minus()); } GLM_FUNC_QUALIFIER void operator += (vec const& that) { _apply_op(that, op_plus()); } GLM_FUNC_QUALIFIER void operator *= (vec const& that) { _apply_op(that, op_mul()); } GLM_FUNC_QUALIFIER void operator /= (vec const& that) { _apply_op(that, op_div()); } GLM_FUNC_QUALIFIER T& operator[](size_t i) { const int offset_dst[4] = { E0, E1, E2, E3 }; return this->elem(offset_dst[i]); } GLM_FUNC_QUALIFIER T operator[](size_t i) const { const int offset_dst[4] = { E0, E1, E2, E3 }; return this->elem(offset_dst[i]); } protected: template GLM_FUNC_QUALIFIER void _apply_op(vec const& that, const U& op) { // Make a copy of the data in this == &that. // The copier should optimize out the copy in cases where the function is // properly inlined and the copy is not necessary. T t[N]; for (int i = 0; i < N; ++i) t[i] = that[i]; for (int i = 0; i < N; ++i) op( (*this)[i], t[i] ); } }; // Specialization for swizzles containing duplicate elements. These cannot be modified. template struct _swizzle_base2 : public _swizzle_base1::value> { struct Stub {}; GLM_FUNC_QUALIFIER _swizzle_base2& operator= (Stub const&) { return *this; } GLM_FUNC_QUALIFIER T operator[] (size_t i) const { const int offset_dst[4] = { E0, E1, E2, E3 }; return this->elem(offset_dst[i]); } }; template struct _swizzle : public _swizzle_base2 { typedef _swizzle_base2 base_type; using base_type::operator=; GLM_FUNC_QUALIFIER operator vec () const { return (*this)(); } }; // // To prevent the C++ syntax from getting entirely overwhelming, define some alias macros // #define GLM_SWIZZLE_TEMPLATE1 template #define GLM_SWIZZLE_TEMPLATE2 template #define GLM_SWIZZLE_TYPE1 _swizzle #define GLM_SWIZZLE_TYPE2 _swizzle // // Wrapper for a binary operator (e.g. u.yy + v.zy) // #define GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \ GLM_SWIZZLE_TEMPLATE2 \ GLM_FUNC_QUALIFIER vec operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b) \ { \ return a() OPERAND b(); \ } \ GLM_SWIZZLE_TEMPLATE1 \ GLM_FUNC_QUALIFIER vec operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const vec& b) \ { \ return a() OPERAND b; \ } \ GLM_SWIZZLE_TEMPLATE1 \ GLM_FUNC_QUALIFIER vec operator OPERAND ( const vec& a, const GLM_SWIZZLE_TYPE1& b) \ { \ return a OPERAND b(); \ } // // Wrapper for a operand between a swizzle and a binary (e.g. 1.0f - u.xyz) // #define GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \ GLM_SWIZZLE_TEMPLATE1 \ GLM_FUNC_QUALIFIER vec operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const T& b) \ { \ return a() OPERAND b; \ } \ GLM_SWIZZLE_TEMPLATE1 \ GLM_FUNC_QUALIFIER vec operator OPERAND ( const T& a, const GLM_SWIZZLE_TYPE1& b) \ { \ return a OPERAND b(); \ } // // Macro for wrapping a function taking one argument (e.g. abs()) // #define GLM_SWIZZLE_FUNCTION_1_ARGS(RETURN_TYPE,FUNCTION) \ GLM_SWIZZLE_TEMPLATE1 \ GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a) \ { \ return FUNCTION(a()); \ } // // Macro for wrapping a function taking two vector arguments (e.g. dot()). // #define GLM_SWIZZLE_FUNCTION_2_ARGS(RETURN_TYPE,FUNCTION) \ GLM_SWIZZLE_TEMPLATE2 \ GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b) \ { \ return FUNCTION(a(), b()); \ } \ GLM_SWIZZLE_TEMPLATE1 \ GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE1& b) \ { \ return FUNCTION(a(), b()); \ } \ GLM_SWIZZLE_TEMPLATE1 \ GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const typename V& b) \ { \ return FUNCTION(a(), b); \ } \ GLM_SWIZZLE_TEMPLATE1 \ GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const V& a, const GLM_SWIZZLE_TYPE1& b) \ { \ return FUNCTION(a, b()); \ } // // Macro for wrapping a function take 2 vec arguments followed by a scalar (e.g. mix()). // #define GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(RETURN_TYPE,FUNCTION) \ GLM_SWIZZLE_TEMPLATE2 \ GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b, const T& c) \ { \ return FUNCTION(a(), b(), c); \ } \ GLM_SWIZZLE_TEMPLATE1 \ GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE1& b, const T& c) \ { \ return FUNCTION(a(), b(), c); \ } \ GLM_SWIZZLE_TEMPLATE1 \ GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const typename S0::vec_type& b, const T& c)\ { \ return FUNCTION(a(), b, c); \ } \ GLM_SWIZZLE_TEMPLATE1 \ GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const typename V& a, const GLM_SWIZZLE_TYPE1& b, const T& c) \ { \ return FUNCTION(a, b(), c); \ } }//namespace detail }//namespace glm namespace glm { namespace detail { GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(-) GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(*) GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(+) GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(-) GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(*) GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(/) } // // Swizzles are distinct types from the unswizzled type. The below macros will // provide template specializations for the swizzle types for the given functions // so that the compiler does not have any ambiguity to choosing how to handle // the function. // // The alternative is to use the operator()() when calling the function in order // to explicitly convert the swizzled type to the unswizzled type. // //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, abs); //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acos); //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acosh); //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, all); //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, any); //GLM_SWIZZLE_FUNCTION_2_ARGS(value_type, dot); //GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, cross); //GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, step); //GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(vec_type, mix); } #define GLM_SWIZZLE2_2_MEMBERS(T, Q, E0,E1) \ struct { detail::_swizzle<2, T, Q, 0,0,-1,-2> E0 ## E0; }; \ struct { detail::_swizzle<2, T, Q, 0,1,-1,-2> E0 ## E1; }; \ struct { detail::_swizzle<2, T, Q, 1,0,-1,-2> E1 ## E0; }; \ struct { detail::_swizzle<2, T, Q, 1,1,-1,-2> E1 ## E1; }; #define GLM_SWIZZLE2_3_MEMBERS(T, Q, E0,E1) \ struct { detail::_swizzle<3,T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \ struct { detail::_swizzle<3,T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \ struct { detail::_swizzle<3,T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \ struct { detail::_swizzle<3,T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \ struct { detail::_swizzle<3,T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \ struct { detail::_swizzle<3,T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \ struct { detail::_swizzle<3,T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \ struct { detail::_swizzle<3,T, Q, 1,1,1,-1> E1 ## E1 ## E1; }; #define GLM_SWIZZLE2_4_MEMBERS(T, Q, E0,E1) \ struct { detail::_swizzle<4,T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; #define GLM_SWIZZLE3_2_MEMBERS(T, Q, E0,E1,E2) \ struct { detail::_swizzle<2,T, Q, 0,0,-1,-2> E0 ## E0; }; \ struct { detail::_swizzle<2,T, Q, 0,1,-1,-2> E0 ## E1; }; \ struct { detail::_swizzle<2,T, Q, 0,2,-1,-2> E0 ## E2; }; \ struct { detail::_swizzle<2,T, Q, 1,0,-1,-2> E1 ## E0; }; \ struct { detail::_swizzle<2,T, Q, 1,1,-1,-2> E1 ## E1; }; \ struct { detail::_swizzle<2,T, Q, 1,2,-1,-2> E1 ## E2; }; \ struct { detail::_swizzle<2,T, Q, 2,0,-1,-2> E2 ## E0; }; \ struct { detail::_swizzle<2,T, Q, 2,1,-1,-2> E2 ## E1; }; \ struct { detail::_swizzle<2,T, Q, 2,2,-1,-2> E2 ## E2; }; #define GLM_SWIZZLE3_3_MEMBERS(T, Q ,E0,E1,E2) \ struct { detail::_swizzle<3, T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \ struct { detail::_swizzle<3, T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \ struct { detail::_swizzle<3, T, Q, 0,0,2,-1> E0 ## E0 ## E2; }; \ struct { detail::_swizzle<3, T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \ struct { detail::_swizzle<3, T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \ struct { detail::_swizzle<3, T, Q, 0,1,2,-1> E0 ## E1 ## E2; }; \ struct { detail::_swizzle<3, T, Q, 0,2,0,-1> E0 ## E2 ## E0; }; \ struct { detail::_swizzle<3, T, Q, 0,2,1,-1> E0 ## E2 ## E1; }; \ struct { detail::_swizzle<3, T, Q, 0,2,2,-1> E0 ## E2 ## E2; }; \ struct { detail::_swizzle<3, T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \ struct { detail::_swizzle<3, T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \ struct { detail::_swizzle<3, T, Q, 1,0,2,-1> E1 ## E0 ## E2; }; \ struct { detail::_swizzle<3, T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \ struct { detail::_swizzle<3, T, Q, 1,1,1,-1> E1 ## E1 ## E1; }; \ struct { detail::_swizzle<3, T, Q, 1,1,2,-1> E1 ## E1 ## E2; }; \ struct { detail::_swizzle<3, T, Q, 1,2,0,-1> E1 ## E2 ## E0; }; \ struct { detail::_swizzle<3, T, Q, 1,2,1,-1> E1 ## E2 ## E1; }; \ struct { detail::_swizzle<3, T, Q, 1,2,2,-1> E1 ## E2 ## E2; }; \ struct { detail::_swizzle<3, T, Q, 2,0,0,-1> E2 ## E0 ## E0; }; \ struct { detail::_swizzle<3, T, Q, 2,0,1,-1> E2 ## E0 ## E1; }; \ struct { detail::_swizzle<3, T, Q, 2,0,2,-1> E2 ## E0 ## E2; }; \ struct { detail::_swizzle<3, T, Q, 2,1,0,-1> E2 ## E1 ## E0; }; \ struct { detail::_swizzle<3, T, Q, 2,1,1,-1> E2 ## E1 ## E1; }; \ struct { detail::_swizzle<3, T, Q, 2,1,2,-1> E2 ## E1 ## E2; }; \ struct { detail::_swizzle<3, T, Q, 2,2,0,-1> E2 ## E2 ## E0; }; \ struct { detail::_swizzle<3, T, Q, 2,2,1,-1> E2 ## E2 ## E1; }; \ struct { detail::_swizzle<3, T, Q, 2,2,2,-1> E2 ## E2 ## E2; }; #define GLM_SWIZZLE3_4_MEMBERS(T, Q, E0,E1,E2) \ struct { detail::_swizzle<4,T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \ struct { detail::_swizzle<4,T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \ struct { detail::_swizzle<4,T, Q, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \ struct { detail::_swizzle<4,T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \ struct { detail::_swizzle<4,T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \ struct { detail::_swizzle<4,T, Q, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \ struct { detail::_swizzle<4,T, Q, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \ struct { detail::_swizzle<4,T, Q, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \ struct { detail::_swizzle<4,T, Q, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \ struct { detail::_swizzle<4,T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \ struct { detail::_swizzle<4,T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \ struct { detail::_swizzle<4,T, Q, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \ struct { detail::_swizzle<4,T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \ struct { detail::_swizzle<4,T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \ struct { detail::_swizzle<4,T, Q, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \ struct { detail::_swizzle<4,T, Q, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \ struct { detail::_swizzle<4,T, Q, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \ struct { detail::_swizzle<4,T, Q, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \ struct { detail::_swizzle<4,T, Q, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \ struct { detail::_swizzle<4,T, Q, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \ struct { detail::_swizzle<4,T, Q, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \ struct { detail::_swizzle<4,T, Q, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \ struct { detail::_swizzle<4,T, Q, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \ struct { detail::_swizzle<4,T, Q, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \ struct { detail::_swizzle<4,T, Q, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \ struct { detail::_swizzle<4,T, Q, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \ struct { detail::_swizzle<4,T, Q, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \ struct { detail::_swizzle<4,T, Q, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \ struct { detail::_swizzle<4,T, Q, 2,2,2,2> E2 ## E2 ## E2 ## E2; }; #define GLM_SWIZZLE4_2_MEMBERS(T, Q, E0,E1,E2,E3) \ struct { detail::_swizzle<2,T, Q, 0,0,-1,-2> E0 ## E0; }; \ struct { detail::_swizzle<2,T, Q, 0,1,-1,-2> E0 ## E1; }; \ struct { detail::_swizzle<2,T, Q, 0,2,-1,-2> E0 ## E2; }; \ struct { detail::_swizzle<2,T, Q, 0,3,-1,-2> E0 ## E3; }; \ struct { detail::_swizzle<2,T, Q, 1,0,-1,-2> E1 ## E0; }; \ struct { detail::_swizzle<2,T, Q, 1,1,-1,-2> E1 ## E1; }; \ struct { detail::_swizzle<2,T, Q, 1,2,-1,-2> E1 ## E2; }; \ struct { detail::_swizzle<2,T, Q, 1,3,-1,-2> E1 ## E3; }; \ struct { detail::_swizzle<2,T, Q, 2,0,-1,-2> E2 ## E0; }; \ struct { detail::_swizzle<2,T, Q, 2,1,-1,-2> E2 ## E1; }; \ struct { detail::_swizzle<2,T, Q, 2,2,-1,-2> E2 ## E2; }; \ struct { detail::_swizzle<2,T, Q, 2,3,-1,-2> E2 ## E3; }; \ struct { detail::_swizzle<2,T, Q, 3,0,-1,-2> E3 ## E0; }; \ struct { detail::_swizzle<2,T, Q, 3,1,-1,-2> E3 ## E1; }; \ struct { detail::_swizzle<2,T, Q, 3,2,-1,-2> E3 ## E2; }; \ struct { detail::_swizzle<2,T, Q, 3,3,-1,-2> E3 ## E3; }; #define GLM_SWIZZLE4_3_MEMBERS(T, Q, E0,E1,E2,E3) \ struct { detail::_swizzle<3, T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \ struct { detail::_swizzle<3, T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \ struct { detail::_swizzle<3, T, Q, 0,0,2,-1> E0 ## E0 ## E2; }; \ struct { detail::_swizzle<3, T, Q, 0,0,3,-1> E0 ## E0 ## E3; }; \ struct { detail::_swizzle<3, T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \ struct { detail::_swizzle<3, T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \ struct { detail::_swizzle<3, T, Q, 0,1,2,-1> E0 ## E1 ## E2; }; \ struct { detail::_swizzle<3, T, Q, 0,1,3,-1> E0 ## E1 ## E3; }; \ struct { detail::_swizzle<3, T, Q, 0,2,0,-1> E0 ## E2 ## E0; }; \ struct { detail::_swizzle<3, T, Q, 0,2,1,-1> E0 ## E2 ## E1; }; \ struct { detail::_swizzle<3, T, Q, 0,2,2,-1> E0 ## E2 ## E2; }; \ struct { detail::_swizzle<3, T, Q, 0,2,3,-1> E0 ## E2 ## E3; }; \ struct { detail::_swizzle<3, T, Q, 0,3,0,-1> E0 ## E3 ## E0; }; \ struct { detail::_swizzle<3, T, Q, 0,3,1,-1> E0 ## E3 ## E1; }; \ struct { detail::_swizzle<3, T, Q, 0,3,2,-1> E0 ## E3 ## E2; }; \ struct { detail::_swizzle<3, T, Q, 0,3,3,-1> E0 ## E3 ## E3; }; \ struct { detail::_swizzle<3, T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \ struct { detail::_swizzle<3, T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \ struct { detail::_swizzle<3, T, Q, 1,0,2,-1> E1 ## E0 ## E2; }; \ struct { detail::_swizzle<3, T, Q, 1,0,3,-1> E1 ## E0 ## E3; }; \ struct { detail::_swizzle<3, T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \ struct { detail::_swizzle<3, T, Q, 1,1,1,-1> E1 ## E1 ## E1; }; \ struct { detail::_swizzle<3, T, Q, 1,1,2,-1> E1 ## E1 ## E2; }; \ struct { detail::_swizzle<3, T, Q, 1,1,3,-1> E1 ## E1 ## E3; }; \ struct { detail::_swizzle<3, T, Q, 1,2,0,-1> E1 ## E2 ## E0; }; \ struct { detail::_swizzle<3, T, Q, 1,2,1,-1> E1 ## E2 ## E1; }; \ struct { detail::_swizzle<3, T, Q, 1,2,2,-1> E1 ## E2 ## E2; }; \ struct { detail::_swizzle<3, T, Q, 1,2,3,-1> E1 ## E2 ## E3; }; \ struct { detail::_swizzle<3, T, Q, 1,3,0,-1> E1 ## E3 ## E0; }; \ struct { detail::_swizzle<3, T, Q, 1,3,1,-1> E1 ## E3 ## E1; }; \ struct { detail::_swizzle<3, T, Q, 1,3,2,-1> E1 ## E3 ## E2; }; \ struct { detail::_swizzle<3, T, Q, 1,3,3,-1> E1 ## E3 ## E3; }; \ struct { detail::_swizzle<3, T, Q, 2,0,0,-1> E2 ## E0 ## E0; }; \ struct { detail::_swizzle<3, T, Q, 2,0,1,-1> E2 ## E0 ## E1; }; \ struct { detail::_swizzle<3, T, Q, 2,0,2,-1> E2 ## E0 ## E2; }; \ struct { detail::_swizzle<3, T, Q, 2,0,3,-1> E2 ## E0 ## E3; }; \ struct { detail::_swizzle<3, T, Q, 2,1,0,-1> E2 ## E1 ## E0; }; \ struct { detail::_swizzle<3, T, Q, 2,1,1,-1> E2 ## E1 ## E1; }; \ struct { detail::_swizzle<3, T, Q, 2,1,2,-1> E2 ## E1 ## E2; }; \ struct { detail::_swizzle<3, T, Q, 2,1,3,-1> E2 ## E1 ## E3; }; \ struct { detail::_swizzle<3, T, Q, 2,2,0,-1> E2 ## E2 ## E0; }; \ struct { detail::_swizzle<3, T, Q, 2,2,1,-1> E2 ## E2 ## E1; }; \ struct { detail::_swizzle<3, T, Q, 2,2,2,-1> E2 ## E2 ## E2; }; \ struct { detail::_swizzle<3, T, Q, 2,2,3,-1> E2 ## E2 ## E3; }; \ struct { detail::_swizzle<3, T, Q, 2,3,0,-1> E2 ## E3 ## E0; }; \ struct { detail::_swizzle<3, T, Q, 2,3,1,-1> E2 ## E3 ## E1; }; \ struct { detail::_swizzle<3, T, Q, 2,3,2,-1> E2 ## E3 ## E2; }; \ struct { detail::_swizzle<3, T, Q, 2,3,3,-1> E2 ## E3 ## E3; }; \ struct { detail::_swizzle<3, T, Q, 3,0,0,-1> E3 ## E0 ## E0; }; \ struct { detail::_swizzle<3, T, Q, 3,0,1,-1> E3 ## E0 ## E1; }; \ struct { detail::_swizzle<3, T, Q, 3,0,2,-1> E3 ## E0 ## E2; }; \ struct { detail::_swizzle<3, T, Q, 3,0,3,-1> E3 ## E0 ## E3; }; \ struct { detail::_swizzle<3, T, Q, 3,1,0,-1> E3 ## E1 ## E0; }; \ struct { detail::_swizzle<3, T, Q, 3,1,1,-1> E3 ## E1 ## E1; }; \ struct { detail::_swizzle<3, T, Q, 3,1,2,-1> E3 ## E1 ## E2; }; \ struct { detail::_swizzle<3, T, Q, 3,1,3,-1> E3 ## E1 ## E3; }; \ struct { detail::_swizzle<3, T, Q, 3,2,0,-1> E3 ## E2 ## E0; }; \ struct { detail::_swizzle<3, T, Q, 3,2,1,-1> E3 ## E2 ## E1; }; \ struct { detail::_swizzle<3, T, Q, 3,2,2,-1> E3 ## E2 ## E2; }; \ struct { detail::_swizzle<3, T, Q, 3,2,3,-1> E3 ## E2 ## E3; }; \ struct { detail::_swizzle<3, T, Q, 3,3,0,-1> E3 ## E3 ## E0; }; \ struct { detail::_swizzle<3, T, Q, 3,3,1,-1> E3 ## E3 ## E1; }; \ struct { detail::_swizzle<3, T, Q, 3,3,2,-1> E3 ## E3 ## E2; }; \ struct { detail::_swizzle<3, T, Q, 3,3,3,-1> E3 ## E3 ## E3; }; #define GLM_SWIZZLE4_4_MEMBERS(T, Q, E0,E1,E2,E3) \ struct { detail::_swizzle<4, T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 0,0,0,3> E0 ## E0 ## E0 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 0,0,1,3> E0 ## E0 ## E1 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 0,0,2,3> E0 ## E0 ## E2 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 0,0,3,0> E0 ## E0 ## E3 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 0,0,3,1> E0 ## E0 ## E3 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 0,0,3,2> E0 ## E0 ## E3 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 0,0,3,3> E0 ## E0 ## E3 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 0,1,0,3> E0 ## E1 ## E0 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 0,1,1,3> E0 ## E1 ## E1 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 0,1,2,3> E0 ## E1 ## E2 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 0,1,3,0> E0 ## E1 ## E3 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 0,1,3,1> E0 ## E1 ## E3 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 0,1,3,2> E0 ## E1 ## E3 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 0,1,3,3> E0 ## E1 ## E3 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 0,2,0,3> E0 ## E2 ## E0 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 0,2,1,3> E0 ## E2 ## E1 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 0,2,2,3> E0 ## E2 ## E2 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 0,2,3,0> E0 ## E2 ## E3 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 0,2,3,1> E0 ## E2 ## E3 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 0,2,3,2> E0 ## E2 ## E3 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 0,2,3,3> E0 ## E2 ## E3 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 0,3,0,0> E0 ## E3 ## E0 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 0,3,0,1> E0 ## E3 ## E0 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 0,3,0,2> E0 ## E3 ## E0 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 0,3,0,3> E0 ## E3 ## E0 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 0,3,1,0> E0 ## E3 ## E1 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 0,3,1,1> E0 ## E3 ## E1 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 0,3,1,2> E0 ## E3 ## E1 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 0,3,1,3> E0 ## E3 ## E1 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 0,3,2,0> E0 ## E3 ## E2 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 0,3,2,1> E0 ## E3 ## E2 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 0,3,2,2> E0 ## E3 ## E2 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 0,3,2,3> E0 ## E3 ## E2 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 0,3,3,0> E0 ## E3 ## E3 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 0,3,3,1> E0 ## E3 ## E3 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 0,3,3,2> E0 ## E3 ## E3 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 0,3,3,3> E0 ## E3 ## E3 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 1,0,0,3> E1 ## E0 ## E0 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 1,0,1,3> E1 ## E0 ## E1 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 1,0,2,3> E1 ## E0 ## E2 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 1,0,3,0> E1 ## E0 ## E3 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 1,0,3,1> E1 ## E0 ## E3 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 1,0,3,2> E1 ## E0 ## E3 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 1,0,3,3> E1 ## E0 ## E3 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 1,1,0,3> E1 ## E1 ## E0 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 1,1,1,3> E1 ## E1 ## E1 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 1,1,2,3> E1 ## E1 ## E2 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 1,1,3,0> E1 ## E1 ## E3 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 1,1,3,1> E1 ## E1 ## E3 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 1,1,3,2> E1 ## E1 ## E3 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 1,1,3,3> E1 ## E1 ## E3 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 1,2,0,3> E1 ## E2 ## E0 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 1,2,1,3> E1 ## E2 ## E1 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 1,2,2,3> E1 ## E2 ## E2 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 1,2,3,0> E1 ## E2 ## E3 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 1,2,3,1> E1 ## E2 ## E3 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 1,2,3,2> E1 ## E2 ## E3 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 1,2,3,3> E1 ## E2 ## E3 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 1,3,0,0> E1 ## E3 ## E0 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 1,3,0,1> E1 ## E3 ## E0 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 1,3,0,2> E1 ## E3 ## E0 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 1,3,0,3> E1 ## E3 ## E0 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 1,3,1,0> E1 ## E3 ## E1 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 1,3,1,1> E1 ## E3 ## E1 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 1,3,1,2> E1 ## E3 ## E1 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 1,3,1,3> E1 ## E3 ## E1 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 1,3,2,0> E1 ## E3 ## E2 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 1,3,2,1> E1 ## E3 ## E2 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 1,3,2,2> E1 ## E3 ## E2 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 1,3,2,3> E1 ## E3 ## E2 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 1,3,3,0> E1 ## E3 ## E3 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 1,3,3,1> E1 ## E3 ## E3 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 1,3,3,2> E1 ## E3 ## E3 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 1,3,3,3> E1 ## E3 ## E3 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 2,0,0,3> E2 ## E0 ## E0 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 2,0,1,3> E2 ## E0 ## E1 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 2,0,2,3> E2 ## E0 ## E2 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 2,0,3,0> E2 ## E0 ## E3 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 2,0,3,1> E2 ## E0 ## E3 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 2,0,3,2> E2 ## E0 ## E3 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 2,0,3,3> E2 ## E0 ## E3 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 2,1,0,3> E2 ## E1 ## E0 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 2,1,1,3> E2 ## E1 ## E1 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 2,1,2,3> E2 ## E1 ## E2 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 2,1,3,0> E2 ## E1 ## E3 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 2,1,3,1> E2 ## E1 ## E3 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 2,1,3,2> E2 ## E1 ## E3 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 2,1,3,3> E2 ## E1 ## E3 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 2,2,0,3> E2 ## E2 ## E0 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 2,2,1,3> E2 ## E2 ## E1 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 2,2,2,2> E2 ## E2 ## E2 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 2,2,2,3> E2 ## E2 ## E2 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 2,2,3,0> E2 ## E2 ## E3 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 2,2,3,1> E2 ## E2 ## E3 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 2,2,3,2> E2 ## E2 ## E3 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 2,2,3,3> E2 ## E2 ## E3 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 2,3,0,0> E2 ## E3 ## E0 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 2,3,0,1> E2 ## E3 ## E0 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 2,3,0,2> E2 ## E3 ## E0 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 2,3,0,3> E2 ## E3 ## E0 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 2,3,1,0> E2 ## E3 ## E1 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 2,3,1,1> E2 ## E3 ## E1 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 2,3,1,2> E2 ## E3 ## E1 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 2,3,1,3> E2 ## E3 ## E1 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 2,3,2,0> E2 ## E3 ## E2 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 2,3,2,1> E2 ## E3 ## E2 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 2,3,2,2> E2 ## E3 ## E2 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 2,3,2,3> E2 ## E3 ## E2 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 2,3,3,0> E2 ## E3 ## E3 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 2,3,3,1> E2 ## E3 ## E3 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 2,3,3,2> E2 ## E3 ## E3 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 2,3,3,3> E2 ## E3 ## E3 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 3,0,0,0> E3 ## E0 ## E0 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 3,0,0,1> E3 ## E0 ## E0 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 3,0,0,2> E3 ## E0 ## E0 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 3,0,0,3> E3 ## E0 ## E0 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 3,0,1,0> E3 ## E0 ## E1 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 3,0,1,1> E3 ## E0 ## E1 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 3,0,1,2> E3 ## E0 ## E1 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 3,0,1,3> E3 ## E0 ## E1 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 3,0,2,0> E3 ## E0 ## E2 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 3,0,2,1> E3 ## E0 ## E2 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 3,0,2,2> E3 ## E0 ## E2 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 3,0,2,3> E3 ## E0 ## E2 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 3,0,3,0> E3 ## E0 ## E3 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 3,0,3,1> E3 ## E0 ## E3 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 3,0,3,2> E3 ## E0 ## E3 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 3,0,3,3> E3 ## E0 ## E3 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 3,1,0,0> E3 ## E1 ## E0 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 3,1,0,1> E3 ## E1 ## E0 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 3,1,0,2> E3 ## E1 ## E0 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 3,1,0,3> E3 ## E1 ## E0 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 3,1,1,0> E3 ## E1 ## E1 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 3,1,1,1> E3 ## E1 ## E1 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 3,1,1,2> E3 ## E1 ## E1 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 3,1,1,3> E3 ## E1 ## E1 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 3,1,2,0> E3 ## E1 ## E2 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 3,1,2,1> E3 ## E1 ## E2 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 3,1,2,2> E3 ## E1 ## E2 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 3,1,2,3> E3 ## E1 ## E2 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 3,1,3,0> E3 ## E1 ## E3 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 3,1,3,1> E3 ## E1 ## E3 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 3,1,3,2> E3 ## E1 ## E3 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 3,1,3,3> E3 ## E1 ## E3 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 3,2,0,0> E3 ## E2 ## E0 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 3,2,0,1> E3 ## E2 ## E0 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 3,2,0,2> E3 ## E2 ## E0 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 3,2,0,3> E3 ## E2 ## E0 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 3,2,1,0> E3 ## E2 ## E1 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 3,2,1,1> E3 ## E2 ## E1 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 3,2,1,2> E3 ## E2 ## E1 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 3,2,1,3> E3 ## E2 ## E1 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 3,2,2,0> E3 ## E2 ## E2 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 3,2,2,1> E3 ## E2 ## E2 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 3,2,2,2> E3 ## E2 ## E2 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 3,2,2,3> E3 ## E2 ## E2 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 3,2,3,0> E3 ## E2 ## E3 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 3,2,3,1> E3 ## E2 ## E3 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 3,2,3,2> E3 ## E2 ## E3 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 3,2,3,3> E3 ## E2 ## E3 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 3,3,0,0> E3 ## E3 ## E0 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 3,3,0,1> E3 ## E3 ## E0 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 3,3,0,2> E3 ## E3 ## E0 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 3,3,0,3> E3 ## E3 ## E0 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 3,3,1,0> E3 ## E3 ## E1 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 3,3,1,1> E3 ## E3 ## E1 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 3,3,1,2> E3 ## E3 ## E1 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 3,3,1,3> E3 ## E3 ## E1 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 3,3,2,0> E3 ## E3 ## E2 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 3,3,2,1> E3 ## E3 ## E2 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 3,3,2,2> E3 ## E3 ## E2 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 3,3,2,3> E3 ## E3 ## E2 ## E3; }; \ struct { detail::_swizzle<4, T, Q, 3,3,3,0> E3 ## E3 ## E3 ## E0; }; \ struct { detail::_swizzle<4, T, Q, 3,3,3,1> E3 ## E3 ## E3 ## E1; }; \ struct { detail::_swizzle<4, T, Q, 3,3,3,2> E3 ## E3 ## E3 ## E2; }; \ struct { detail::_swizzle<4, T, Q, 3,3,3,3> E3 ## E3 ## E3 ## E3; }; ================================================ FILE: libraries/glm/detail/_swizzle_func.hpp ================================================ #pragma once #define GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, CONST, A, B) \ vec<2, T, Q> A ## B() CONST \ { \ return vec<2, T, Q>(this->A, this->B); \ } #define GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, CONST, A, B, C) \ vec<3, T, Q> A ## B ## C() CONST \ { \ return vec<3, T, Q>(this->A, this->B, this->C); \ } #define GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, CONST, A, B, C, D) \ vec<4, T, Q> A ## B ## C ## D() CONST \ { \ return vec<4, T, Q>(this->A, this->B, this->C, this->D); \ } #define GLM_SWIZZLE_GEN_VEC2_ENTRY_DEF(T, P, L, CONST, A, B) \ template \ vec vec::A ## B() CONST \ { \ return vec<2, T, Q>(this->A, this->B); \ } #define GLM_SWIZZLE_GEN_VEC3_ENTRY_DEF(T, P, L, CONST, A, B, C) \ template \ vec<3, T, Q> vec::A ## B ## C() CONST \ { \ return vec<3, T, Q>(this->A, this->B, this->C); \ } #define GLM_SWIZZLE_GEN_VEC4_ENTRY_DEF(T, P, L, CONST, A, B, C, D) \ template \ vec<4, T, Q> vec::A ## B ## C ## D() CONST \ { \ return vec<4, T, Q>(this->A, this->B, this->C, this->D); \ } #define GLM_MUTABLE #define GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, A, B) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, 2, GLM_MUTABLE, A, B) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, 2, GLM_MUTABLE, B, A) #define GLM_SWIZZLE_GEN_REF_FROM_VEC2(T, P) \ GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, x, y) \ GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, r, g) \ GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, s, t) #define GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, B) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, C) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, A) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, C) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, A) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, B) #define GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, A, B, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, A, C, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, B, A, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, B, C, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, C, A, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, C, B, A) #define GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, A, B, C) \ GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(T, P, A, B, C) #define GLM_SWIZZLE_GEN_REF_FROM_VEC3(T, P) \ GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, x, y, z) \ GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, r, g, b) \ GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, s, t, p) #define GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, B) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, C) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, D) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, A) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, C) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, D) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, A) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, B) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, D) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, A) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, B) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, C) #define GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, B, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, B, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, C, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, C, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, D, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, D, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, A, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, A, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, C, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, C, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, D, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, D, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, A, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, A, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, B, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, B, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, D, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, D, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, A, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, A, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, B, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, B, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, C, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, C, B) #define GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, C, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, C, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, D, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, D, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, B, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, B, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, C, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, C, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, D, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, D, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, A, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, A, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, B, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, B, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, D, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, D, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, A, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, A, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, C, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, C, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, A, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, A, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, B, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, B, C, A) #define GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, A, B, C, D) \ GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) #define GLM_SWIZZLE_GEN_REF_FROM_VEC4(T, P) \ GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, x, y, z, w) \ GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, r, g, b, a) \ GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, s, t, p, q) #define GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(T, P, A, B) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) #define GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(T, P, A, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) #define GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(T, P, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) #define GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, A, B) \ GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(T, P, A, B) \ GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(T, P, A, B) \ GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(T, P, A, B) #define GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, P) \ GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, x, y) \ GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, r, g) \ GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, s, t) #define GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, C) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, C) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, A) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, B) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, C) #define GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, C) #define GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, C) #define GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, A, B, C) \ GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(T, P, A, B, C) #define GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, P) \ GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, x, y, z) \ GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, r, g, b) \ GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, s, t, p) #define GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, C) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, D) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, C) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, D) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, A) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, B) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, C) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, D) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, A) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, B) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, C) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, D) #define GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, D) #define GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, D) #define GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, A, B, C, D) \ GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) #define GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, P) \ GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, x, y, z, w) \ GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, r, g, b, a) \ GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, s, t, p, q) ================================================ FILE: libraries/glm/detail/_vectorize.hpp ================================================ #pragma once namespace glm{ namespace detail { template class vec, length_t L, typename R, typename T, qualifier Q> struct functor1{}; template class vec, typename R, typename T, qualifier Q> struct functor1 { GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<1, R, Q> call(R (*Func) (T x), vec<1, T, Q> const& v) { return vec<1, R, Q>(Func(v.x)); } }; template class vec, typename R, typename T, qualifier Q> struct functor1 { GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<2, R, Q> call(R (*Func) (T x), vec<2, T, Q> const& v) { return vec<2, R, Q>(Func(v.x), Func(v.y)); } }; template class vec, typename R, typename T, qualifier Q> struct functor1 { GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<3, R, Q> call(R (*Func) (T x), vec<3, T, Q> const& v) { return vec<3, R, Q>(Func(v.x), Func(v.y), Func(v.z)); } }; template class vec, typename R, typename T, qualifier Q> struct functor1 { GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, R, Q> call(R (*Func) (T x), vec<4, T, Q> const& v) { return vec<4, R, Q>(Func(v.x), Func(v.y), Func(v.z), Func(v.w)); } }; template class vec, length_t L, typename T, qualifier Q> struct functor2{}; template class vec, typename T, qualifier Q> struct functor2 { GLM_FUNC_QUALIFIER static vec<1, T, Q> call(T (*Func) (T x, T y), vec<1, T, Q> const& a, vec<1, T, Q> const& b) { return vec<1, T, Q>(Func(a.x, b.x)); } }; template class vec, typename T, qualifier Q> struct functor2 { GLM_FUNC_QUALIFIER static vec<2, T, Q> call(T (*Func) (T x, T y), vec<2, T, Q> const& a, vec<2, T, Q> const& b) { return vec<2, T, Q>(Func(a.x, b.x), Func(a.y, b.y)); } }; template class vec, typename T, qualifier Q> struct functor2 { GLM_FUNC_QUALIFIER static vec<3, T, Q> call(T (*Func) (T x, T y), vec<3, T, Q> const& a, vec<3, T, Q> const& b) { return vec<3, T, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z)); } }; template class vec, typename T, qualifier Q> struct functor2 { GLM_FUNC_QUALIFIER static vec<4, T, Q> call(T (*Func) (T x, T y), vec<4, T, Q> const& a, vec<4, T, Q> const& b) { return vec<4, T, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w)); } }; template class vec, length_t L, typename T, qualifier Q> struct functor2_vec_sca{}; template class vec, typename T, qualifier Q> struct functor2_vec_sca { GLM_FUNC_QUALIFIER static vec<1, T, Q> call(T (*Func) (T x, T y), vec<1, T, Q> const& a, T b) { return vec<1, T, Q>(Func(a.x, b)); } }; template class vec, typename T, qualifier Q> struct functor2_vec_sca { GLM_FUNC_QUALIFIER static vec<2, T, Q> call(T (*Func) (T x, T y), vec<2, T, Q> const& a, T b) { return vec<2, T, Q>(Func(a.x, b), Func(a.y, b)); } }; template class vec, typename T, qualifier Q> struct functor2_vec_sca { GLM_FUNC_QUALIFIER static vec<3, T, Q> call(T (*Func) (T x, T y), vec<3, T, Q> const& a, T b) { return vec<3, T, Q>(Func(a.x, b), Func(a.y, b), Func(a.z, b)); } }; template class vec, typename T, qualifier Q> struct functor2_vec_sca { GLM_FUNC_QUALIFIER static vec<4, T, Q> call(T (*Func) (T x, T y), vec<4, T, Q> const& a, T b) { return vec<4, T, Q>(Func(a.x, b), Func(a.y, b), Func(a.z, b), Func(a.w, b)); } }; template struct functor2_vec_int {}; template struct functor2_vec_int<1, T, Q> { GLM_FUNC_QUALIFIER static vec<1, int, Q> call(int (*Func) (T x, int y), vec<1, T, Q> const& a, vec<1, int, Q> const& b) { return vec<1, int, Q>(Func(a.x, b.x)); } }; template struct functor2_vec_int<2, T, Q> { GLM_FUNC_QUALIFIER static vec<2, int, Q> call(int (*Func) (T x, int y), vec<2, T, Q> const& a, vec<2, int, Q> const& b) { return vec<2, int, Q>(Func(a.x, b.x), Func(a.y, b.y)); } }; template struct functor2_vec_int<3, T, Q> { GLM_FUNC_QUALIFIER static vec<3, int, Q> call(int (*Func) (T x, int y), vec<3, T, Q> const& a, vec<3, int, Q> const& b) { return vec<3, int, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z)); } }; template struct functor2_vec_int<4, T, Q> { GLM_FUNC_QUALIFIER static vec<4, int, Q> call(int (*Func) (T x, int y), vec<4, T, Q> const& a, vec<4, int, Q> const& b) { return vec<4, int, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w)); } }; }//namespace detail }//namespace glm ================================================ FILE: libraries/glm/detail/compute_common.hpp ================================================ #pragma once #include "setup.hpp" #include namespace glm{ namespace detail { template struct compute_abs {}; template struct compute_abs { GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genFIType call(genFIType x) { GLM_STATIC_ASSERT( std::numeric_limits::is_iec559 || std::numeric_limits::is_signed, "'abs' only accept floating-point and integer scalar or vector inputs"); return x >= genFIType(0) ? x : -x; // TODO, perf comp with: *(((int *) &x) + 1) &= 0x7fffffff; } }; #if GLM_COMPILER & GLM_COMPILER_CUDA template<> struct compute_abs { GLM_FUNC_QUALIFIER GLM_CONSTEXPR static float call(float x) { return fabsf(x); } }; #endif template struct compute_abs { GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genFIType call(genFIType x) { GLM_STATIC_ASSERT( (!std::numeric_limits::is_signed && std::numeric_limits::is_integer), "'abs' only accept floating-point and integer scalar or vector inputs"); return x; } }; }//namespace detail }//namespace glm ================================================ FILE: libraries/glm/detail/compute_vector_relational.hpp ================================================ #pragma once //#include "compute_common.hpp" #include "setup.hpp" #include namespace glm{ namespace detail { template struct compute_equal { GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(T a, T b) { return a == b; } }; /* template struct compute_equal { GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(T a, T b) { return detail::compute_abs::is_signed>::call(b - a) <= static_cast(0); //return std::memcmp(&a, &b, sizeof(T)) == 0; } }; */ }//namespace detail }//namespace glm ================================================ FILE: libraries/glm/detail/func_common.inl ================================================ /// @ref core /// @file glm/detail/func_common.inl #include "../vector_relational.hpp" #include "compute_common.hpp" #include "type_vec1.hpp" #include "type_vec2.hpp" #include "type_vec3.hpp" #include "type_vec4.hpp" #include "_vectorize.hpp" #include namespace glm { // min template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType min(genType x, genType y) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'min' only accept floating-point or integer inputs"); return (y < x) ? y : x; } // max template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType max(genType x, genType y) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'max' only accept floating-point or integer inputs"); return (x < y) ? y : x; } // abs template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR int abs(int x) { int const y = x >> (sizeof(int) * 8 - 1); return (x ^ y) - y; } // round # if GLM_HAS_CXX11_STL using ::std::round; # else template GLM_FUNC_QUALIFIER genType round(genType x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'round' only accept floating-point inputs"); return x < static_cast(0) ? static_cast(int(x - static_cast(0.5))) : static_cast(int(x + static_cast(0.5))); } # endif // trunc # if GLM_HAS_CXX11_STL using ::std::trunc; # else template GLM_FUNC_QUALIFIER genType trunc(genType x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'trunc' only accept floating-point inputs"); return x < static_cast(0) ? -std::floor(-x) : std::floor(x); } # endif }//namespace glm namespace glm{ namespace detail { template struct compute_abs_vector { GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec call(vec const& x) { return detail::functor1::call(abs, x); } }; template struct compute_mix_vector { GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& y, vec const& a) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'mix' only accept floating-point inputs for the interpolator a"); return vec(vec(x) * (static_cast(1) - a) + vec(y) * a); } }; template struct compute_mix_vector { GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& y, vec const& a) { vec Result; for(length_t i = 0; i < x.length(); ++i) Result[i] = a[i] ? y[i] : x[i]; return Result; } }; template struct compute_mix_scalar { GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& y, U const& a) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'mix' only accept floating-point inputs for the interpolator a"); return vec(vec(x) * (static_cast(1) - a) + vec(y) * a); } }; template struct compute_mix_scalar { GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& y, bool const& a) { return a ? y : x; } }; template struct compute_mix { GLM_FUNC_QUALIFIER static T call(T const& x, T const& y, U const& a) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'mix' only accept floating-point inputs for the interpolator a"); return static_cast(static_cast(x) * (static_cast(1) - a) + static_cast(y) * a); } }; template struct compute_mix { GLM_FUNC_QUALIFIER static T call(T const& x, T const& y, bool const& a) { return a ? y : x; } }; template struct compute_sign { GLM_FUNC_QUALIFIER static vec call(vec const& x) { return vec(glm::lessThan(vec(0), x)) - vec(glm::lessThan(x, vec(0))); } }; # if GLM_ARCH == GLM_ARCH_X86 template struct compute_sign { GLM_FUNC_QUALIFIER static vec call(vec const& x) { T const Shift(static_cast(sizeof(T) * 8 - 1)); vec const y(vec::type, Q>(-x) >> typename detail::make_unsigned::type(Shift)); return (x >> Shift) | y; } }; # endif template struct compute_floor { GLM_FUNC_QUALIFIER static vec call(vec const& x) { return detail::functor1::call(std::floor, x); } }; template struct compute_ceil { GLM_FUNC_QUALIFIER static vec call(vec const& x) { return detail::functor1::call(std::ceil, x); } }; template struct compute_fract { GLM_FUNC_QUALIFIER static vec call(vec const& x) { return x - floor(x); } }; template struct compute_trunc { GLM_FUNC_QUALIFIER static vec call(vec const& x) { return detail::functor1::call(trunc, x); } }; template struct compute_round { GLM_FUNC_QUALIFIER static vec call(vec const& x) { return detail::functor1::call(round, x); } }; template struct compute_mod { GLM_FUNC_QUALIFIER static vec call(vec const& a, vec const& b) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'mod' only accept floating-point inputs. Include for integer inputs."); return a - b * floor(a / b); } }; template struct compute_min_vector { GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& y) { return detail::functor2::call(min, x, y); } }; template struct compute_max_vector { GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& y) { return detail::functor2::call(max, x, y); } }; template struct compute_clamp_vector { GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& minVal, vec const& maxVal) { return min(max(x, minVal), maxVal); } }; template struct compute_step_vector { GLM_FUNC_QUALIFIER static vec call(vec const& edge, vec const& x) { return mix(vec(1), vec(0), glm::lessThan(x, edge)); } }; template struct compute_smoothstep_vector { GLM_FUNC_QUALIFIER static vec call(vec const& edge0, vec const& edge1, vec const& x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'smoothstep' only accept floating-point inputs"); vec const tmp(clamp((x - edge0) / (edge1 - edge0), static_cast(0), static_cast(1))); return tmp * tmp * (static_cast(3) - static_cast(2) * tmp); } }; }//namespace detail template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genFIType abs(genFIType x) { return detail::compute_abs::is_signed>::call(x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec abs(vec const& x) { return detail::compute_abs_vector::value>::call(x); } // sign // fast and works for any type template GLM_FUNC_QUALIFIER genFIType sign(genFIType x) { GLM_STATIC_ASSERT( std::numeric_limits::is_iec559 || (std::numeric_limits::is_signed && std::numeric_limits::is_integer), "'sign' only accept signed inputs"); return detail::compute_sign<1, genFIType, defaultp, std::numeric_limits::is_iec559, detail::is_aligned::value>::call(vec<1, genFIType>(x)).x; } template GLM_FUNC_QUALIFIER vec sign(vec const& x) { GLM_STATIC_ASSERT( std::numeric_limits::is_iec559 || (std::numeric_limits::is_signed && std::numeric_limits::is_integer), "'sign' only accept signed inputs"); return detail::compute_sign::is_iec559, detail::is_aligned::value>::call(x); } // floor using ::std::floor; template GLM_FUNC_QUALIFIER vec floor(vec const& x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'floor' only accept floating-point inputs."); return detail::compute_floor::value>::call(x); } template GLM_FUNC_QUALIFIER vec trunc(vec const& x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'trunc' only accept floating-point inputs"); return detail::compute_trunc::value>::call(x); } template GLM_FUNC_QUALIFIER vec round(vec const& x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'round' only accept floating-point inputs"); return detail::compute_round::value>::call(x); } /* // roundEven template GLM_FUNC_QUALIFIER genType roundEven(genType const& x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'roundEven' only accept floating-point inputs"); return genType(int(x + genType(int(x) % 2))); } */ // roundEven template GLM_FUNC_QUALIFIER genType roundEven(genType x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'roundEven' only accept floating-point inputs"); int Integer = static_cast(x); genType IntegerPart = static_cast(Integer); genType FractionalPart = fract(x); if(FractionalPart > static_cast(0.5) || FractionalPart < static_cast(0.5)) { return round(x); } else if((Integer % 2) == 0) { return IntegerPart; } else if(x <= static_cast(0)) // Work around... { return IntegerPart - static_cast(1); } else { return IntegerPart + static_cast(1); } //else // Bug on MinGW 4.5.2 //{ // return mix(IntegerPart + genType(-1), IntegerPart + genType(1), x <= genType(0)); //} } template GLM_FUNC_QUALIFIER vec roundEven(vec const& x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'roundEven' only accept floating-point inputs"); return detail::functor1::call(roundEven, x); } // ceil using ::std::ceil; template GLM_FUNC_QUALIFIER vec ceil(vec const& x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'ceil' only accept floating-point inputs"); return detail::compute_ceil::value>::call(x); } // fract template GLM_FUNC_QUALIFIER genType fract(genType x) { return fract(vec<1, genType>(x)).x; } template GLM_FUNC_QUALIFIER vec fract(vec const& x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fract' only accept floating-point inputs"); return detail::compute_fract::value>::call(x); } // mod template GLM_FUNC_QUALIFIER genType mod(genType x, genType y) { # if GLM_COMPILER & GLM_COMPILER_CUDA // Another Cuda compiler bug https://github.com/g-truc/glm/issues/530 vec<1, genType, defaultp> Result(mod(vec<1, genType, defaultp>(x), y)); return Result.x; # else return mod(vec<1, genType, defaultp>(x), y).x; # endif } template GLM_FUNC_QUALIFIER vec mod(vec const& x, T y) { return detail::compute_mod::value>::call(x, vec(y)); } template GLM_FUNC_QUALIFIER vec mod(vec const& x, vec const& y) { return detail::compute_mod::value>::call(x, y); } // modf template GLM_FUNC_QUALIFIER genType modf(genType x, genType & i) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'modf' only accept floating-point inputs"); return std::modf(x, &i); } template GLM_FUNC_QUALIFIER vec<1, T, Q> modf(vec<1, T, Q> const& x, vec<1, T, Q> & i) { return vec<1, T, Q>( modf(x.x, i.x)); } template GLM_FUNC_QUALIFIER vec<2, T, Q> modf(vec<2, T, Q> const& x, vec<2, T, Q> & i) { return vec<2, T, Q>( modf(x.x, i.x), modf(x.y, i.y)); } template GLM_FUNC_QUALIFIER vec<3, T, Q> modf(vec<3, T, Q> const& x, vec<3, T, Q> & i) { return vec<3, T, Q>( modf(x.x, i.x), modf(x.y, i.y), modf(x.z, i.z)); } template GLM_FUNC_QUALIFIER vec<4, T, Q> modf(vec<4, T, Q> const& x, vec<4, T, Q> & i) { return vec<4, T, Q>( modf(x.x, i.x), modf(x.y, i.y), modf(x.z, i.z), modf(x.w, i.w)); } //// Only valid if (INT_MIN <= x-y <= INT_MAX) //// min(x,y) //r = y + ((x - y) & ((x - y) >> (sizeof(int) * //CHAR_BIT - 1))); //// max(x,y) //r = x - ((x - y) & ((x - y) >> (sizeof(int) * //CHAR_BIT - 1))); // min template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec min(vec const& a, T b) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'min' only accept floating-point or integer inputs"); return detail::compute_min_vector::value>::call(a, vec(b)); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec min(vec const& a, vec const& b) { return detail::compute_min_vector::value>::call(a, b); } // max template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec max(vec const& a, T b) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'max' only accept floating-point or integer inputs"); return detail::compute_max_vector::value>::call(a, vec(b)); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec max(vec const& a, vec const& b) { return detail::compute_max_vector::value>::call(a, b); } // clamp template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType clamp(genType x, genType minVal, genType maxVal) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'clamp' only accept floating-point or integer inputs"); return min(max(x, minVal), maxVal); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec clamp(vec const& x, T minVal, T maxVal) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'clamp' only accept floating-point or integer inputs"); return detail::compute_clamp_vector::value>::call(x, vec(minVal), vec(maxVal)); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec clamp(vec const& x, vec const& minVal, vec const& maxVal) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'clamp' only accept floating-point or integer inputs"); return detail::compute_clamp_vector::value>::call(x, minVal, maxVal); } template GLM_FUNC_QUALIFIER genTypeT mix(genTypeT x, genTypeT y, genTypeU a) { return detail::compute_mix::call(x, y, a); } template GLM_FUNC_QUALIFIER vec mix(vec const& x, vec const& y, U a) { return detail::compute_mix_scalar::value>::call(x, y, a); } template GLM_FUNC_QUALIFIER vec mix(vec const& x, vec const& y, vec const& a) { return detail::compute_mix_vector::value>::call(x, y, a); } // step template GLM_FUNC_QUALIFIER genType step(genType edge, genType x) { return mix(static_cast(1), static_cast(0), x < edge); } template GLM_FUNC_QUALIFIER vec step(T edge, vec const& x) { return detail::compute_step_vector::value>::call(vec(edge), x); } template GLM_FUNC_QUALIFIER vec step(vec const& edge, vec const& x) { return detail::compute_step_vector::value>::call(edge, x); } // smoothstep template GLM_FUNC_QUALIFIER genType smoothstep(genType edge0, genType edge1, genType x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'smoothstep' only accept floating-point inputs"); genType const tmp(clamp((x - edge0) / (edge1 - edge0), genType(0), genType(1))); return tmp * tmp * (genType(3) - genType(2) * tmp); } template GLM_FUNC_QUALIFIER vec smoothstep(T edge0, T edge1, vec const& x) { return detail::compute_smoothstep_vector::value>::call(vec(edge0), vec(edge1), x); } template GLM_FUNC_QUALIFIER vec smoothstep(vec const& edge0, vec const& edge1, vec const& x) { return detail::compute_smoothstep_vector::value>::call(edge0, edge1, x); } # if GLM_HAS_CXX11_STL using std::isnan; # else template GLM_FUNC_QUALIFIER bool isnan(genType x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isnan' only accept floating-point inputs"); # if GLM_HAS_CXX11_STL return std::isnan(x); # elif GLM_COMPILER & GLM_COMPILER_VC return _isnan(x) != 0; # elif GLM_COMPILER & GLM_COMPILER_INTEL # if GLM_PLATFORM & GLM_PLATFORM_WINDOWS return _isnan(x) != 0; # else return ::isnan(x) != 0; # endif # elif (GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)) && (GLM_PLATFORM & GLM_PLATFORM_ANDROID) && __cplusplus < 201103L return _isnan(x) != 0; # elif GLM_COMPILER & GLM_COMPILER_CUDA return ::isnan(x) != 0; # else return std::isnan(x); # endif } # endif template GLM_FUNC_QUALIFIER vec isnan(vec const& v) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isnan' only accept floating-point inputs"); vec Result; for (length_t l = 0; l < v.length(); ++l) Result[l] = glm::isnan(v[l]); return Result; } # if GLM_HAS_CXX11_STL using std::isinf; # else template GLM_FUNC_QUALIFIER bool isinf(genType x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isinf' only accept floating-point inputs"); # if GLM_HAS_CXX11_STL return std::isinf(x); # elif GLM_COMPILER & (GLM_COMPILER_INTEL | GLM_COMPILER_VC) # if(GLM_PLATFORM & GLM_PLATFORM_WINDOWS) return _fpclass(x) == _FPCLASS_NINF || _fpclass(x) == _FPCLASS_PINF; # else return ::isinf(x); # endif # elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG) # if(GLM_PLATFORM & GLM_PLATFORM_ANDROID && __cplusplus < 201103L) return _isinf(x) != 0; # else return std::isinf(x); # endif # elif GLM_COMPILER & GLM_COMPILER_CUDA // http://developer.download.nvidia.com/compute/cuda/4_2/rel/toolkit/docs/online/group__CUDA__MATH__DOUBLE_g13431dd2b40b51f9139cbb7f50c18fab.html#g13431dd2b40b51f9139cbb7f50c18fab return ::isinf(double(x)) != 0; # else return std::isinf(x); # endif } # endif template GLM_FUNC_QUALIFIER vec isinf(vec const& v) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isinf' only accept floating-point inputs"); vec Result; for (length_t l = 0; l < v.length(); ++l) Result[l] = glm::isinf(v[l]); return Result; } GLM_FUNC_QUALIFIER int floatBitsToInt(float const& v) { union { float in; int out; } u; u.in = v; return u.out; } template GLM_FUNC_QUALIFIER vec floatBitsToInt(vec const& v) { return reinterpret_cast&>(const_cast&>(v)); } GLM_FUNC_QUALIFIER uint floatBitsToUint(float const& v) { union { float in; uint out; } u; u.in = v; return u.out; } template GLM_FUNC_QUALIFIER vec floatBitsToUint(vec const& v) { return reinterpret_cast&>(const_cast&>(v)); } GLM_FUNC_QUALIFIER float intBitsToFloat(int const& v) { union { int in; float out; } u; u.in = v; return u.out; } template GLM_FUNC_QUALIFIER vec intBitsToFloat(vec const& v) { return reinterpret_cast&>(const_cast&>(v)); } GLM_FUNC_QUALIFIER float uintBitsToFloat(uint const& v) { union { uint in; float out; } u; u.in = v; return u.out; } template GLM_FUNC_QUALIFIER vec uintBitsToFloat(vec const& v) { return reinterpret_cast&>(const_cast&>(v)); } # if GLM_HAS_CXX11_STL using std::fma; # else template GLM_FUNC_QUALIFIER genType fma(genType const& a, genType const& b, genType const& c) { return a * b + c; } # endif template GLM_FUNC_QUALIFIER genType frexp(genType x, int& exp) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'frexp' only accept floating-point inputs"); return std::frexp(x, &exp); } template GLM_FUNC_QUALIFIER vec frexp(vec const& v, vec& exp) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'frexp' only accept floating-point inputs"); vec Result; for (length_t l = 0; l < v.length(); ++l) Result[l] = std::frexp(v[l], &exp[l]); return Result; } template GLM_FUNC_QUALIFIER genType ldexp(genType const& x, int const& exp) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'ldexp' only accept floating-point inputs"); return std::ldexp(x, exp); } template GLM_FUNC_QUALIFIER vec ldexp(vec const& v, vec const& exp) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'ldexp' only accept floating-point inputs"); vec Result; for (length_t l = 0; l < v.length(); ++l) Result[l] = std::ldexp(v[l], exp[l]); return Result; } }//namespace glm #if GLM_CONFIG_SIMD == GLM_ENABLE # include "func_common_simd.inl" #endif ================================================ FILE: libraries/glm/detail/func_common_simd.inl ================================================ /// @ref core /// @file glm/detail/func_common_simd.inl #if GLM_ARCH & GLM_ARCH_SSE2_BIT #include "../simd/common.h" #include namespace glm{ namespace detail { template struct compute_abs_vector<4, float, Q, true> { GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) { vec<4, float, Q> result; result.data = glm_vec4_abs(v.data); return result; } }; template struct compute_abs_vector<4, int, Q, true> { GLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& v) { vec<4, int, Q> result; result.data = glm_ivec4_abs(v.data); return result; } }; template struct compute_floor<4, float, Q, true> { GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) { vec<4, float, Q> result; result.data = glm_vec4_floor(v.data); return result; } }; template struct compute_ceil<4, float, Q, true> { GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) { vec<4, float, Q> result; result.data = glm_vec4_ceil(v.data); return result; } }; template struct compute_fract<4, float, Q, true> { GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) { vec<4, float, Q> result; result.data = glm_vec4_fract(v.data); return result; } }; template struct compute_round<4, float, Q, true> { GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) { vec<4, float, Q> result; result.data = glm_vec4_round(v.data); return result; } }; template struct compute_mod<4, float, Q, true> { GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& x, vec<4, float, Q> const& y) { vec<4, float, Q> result; result.data = glm_vec4_mod(x.data, y.data); return result; } }; template struct compute_min_vector<4, float, Q, true> { GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) { vec<4, float, Q> result; result.data = _mm_min_ps(v1.data, v2.data); return result; } }; template struct compute_min_vector<4, int, Q, true> { GLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) { vec<4, int, Q> result; result.data = _mm_min_epi32(v1.data, v2.data); return result; } }; template struct compute_min_vector<4, uint, Q, true> { GLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& v1, vec<4, uint, Q> const& v2) { vec<4, uint, Q> result; result.data = _mm_min_epu32(v1.data, v2.data); return result; } }; template struct compute_max_vector<4, float, Q, true> { GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) { vec<4, float, Q> result; result.data = _mm_max_ps(v1.data, v2.data); return result; } }; template struct compute_max_vector<4, int, Q, true> { GLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) { vec<4, int, Q> result; result.data = _mm_max_epi32(v1.data, v2.data); return result; } }; template struct compute_max_vector<4, uint, Q, true> { GLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& v1, vec<4, uint, Q> const& v2) { vec<4, uint, Q> result; result.data = _mm_max_epu32(v1.data, v2.data); return result; } }; template struct compute_clamp_vector<4, float, Q, true> { GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& x, vec<4, float, Q> const& minVal, vec<4, float, Q> const& maxVal) { vec<4, float, Q> result; result.data = _mm_min_ps(_mm_max_ps(x.data, minVal.data), maxVal.data); return result; } }; template struct compute_clamp_vector<4, int, Q, true> { GLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& x, vec<4, int, Q> const& minVal, vec<4, int, Q> const& maxVal) { vec<4, int, Q> result; result.data = _mm_min_epi32(_mm_max_epi32(x.data, minVal.data), maxVal.data); return result; } }; template struct compute_clamp_vector<4, uint, Q, true> { GLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& x, vec<4, uint, Q> const& minVal, vec<4, uint, Q> const& maxVal) { vec<4, uint, Q> result; result.data = _mm_min_epu32(_mm_max_epu32(x.data, minVal.data), maxVal.data); return result; } }; template struct compute_mix_vector<4, float, bool, Q, true> { GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& x, vec<4, float, Q> const& y, vec<4, bool, Q> const& a) { __m128i const Load = _mm_set_epi32(-static_cast(a.w), -static_cast(a.z), -static_cast(a.y), -static_cast(a.x)); __m128 const Mask = _mm_castsi128_ps(Load); vec<4, float, Q> Result; # if 0 && GLM_ARCH & GLM_ARCH_AVX Result.data = _mm_blendv_ps(x.data, y.data, Mask); # else Result.data = _mm_or_ps(_mm_and_ps(Mask, y.data), _mm_andnot_ps(Mask, x.data)); # endif return Result; } }; /* FIXME template struct compute_step_vector { GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& edge, vec<4, float, Q> const& x) { vec<4, float, Q> Result; result.data = glm_vec4_step(edge.data, x.data); return result; } }; */ template struct compute_smoothstep_vector<4, float, Q, true> { GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& edge0, vec<4, float, Q> const& edge1, vec<4, float, Q> const& x) { vec<4, float, Q> Result; Result.data = glm_vec4_smoothstep(edge0.data, edge1.data, x.data); return Result; } }; }//namespace detail }//namespace glm #endif//GLM_ARCH & GLM_ARCH_SSE2_BIT ================================================ FILE: libraries/glm/detail/func_exponential.inl ================================================ /// @ref core /// @file glm/detail/func_exponential.inl #include "../vector_relational.hpp" #include "_vectorize.hpp" #include #include #include namespace glm{ namespace detail { # if GLM_HAS_CXX11_STL using std::log2; # else template genType log2(genType Value) { return std::log(Value) * static_cast(1.4426950408889634073599246810019); } # endif template struct compute_log2 { GLM_FUNC_QUALIFIER static vec call(vec const& v) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'log2' only accept floating-point inputs. Include for integer inputs."); return detail::functor1::call(log2, v); } }; template struct compute_sqrt { GLM_FUNC_QUALIFIER static vec call(vec const& x) { return detail::functor1::call(std::sqrt, x); } }; template struct compute_inversesqrt { GLM_FUNC_QUALIFIER static vec call(vec const& x) { return static_cast(1) / sqrt(x); } }; template struct compute_inversesqrt { GLM_FUNC_QUALIFIER static vec call(vec const& x) { vec tmp(x); vec xhalf(tmp * 0.5f); vec* p = reinterpret_cast*>(const_cast*>(&x)); vec i = vec(0x5f375a86) - (*p >> vec(1)); vec* ptmp = reinterpret_cast*>(&i); tmp = *ptmp; tmp = tmp * (1.5f - xhalf * tmp * tmp); return tmp; } }; }//namespace detail // pow using std::pow; template GLM_FUNC_QUALIFIER vec pow(vec const& base, vec const& exponent) { return detail::functor2::call(pow, base, exponent); } // exp using std::exp; template GLM_FUNC_QUALIFIER vec exp(vec const& x) { return detail::functor1::call(exp, x); } // log using std::log; template GLM_FUNC_QUALIFIER vec log(vec const& x) { return detail::functor1::call(log, x); } # if GLM_HAS_CXX11_STL using std::exp2; # else //exp2, ln2 = 0.69314718055994530941723212145818f template GLM_FUNC_QUALIFIER genType exp2(genType x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'exp2' only accept floating-point inputs"); return std::exp(static_cast(0.69314718055994530941723212145818) * x); } # endif template GLM_FUNC_QUALIFIER vec exp2(vec const& x) { return detail::functor1::call(exp2, x); } // log2, ln2 = 0.69314718055994530941723212145818f template GLM_FUNC_QUALIFIER genType log2(genType x) { return log2(vec<1, genType>(x)).x; } template GLM_FUNC_QUALIFIER vec log2(vec const& x) { return detail::compute_log2::is_iec559, detail::is_aligned::value>::call(x); } // sqrt using std::sqrt; template GLM_FUNC_QUALIFIER vec sqrt(vec const& x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'sqrt' only accept floating-point inputs"); return detail::compute_sqrt::value>::call(x); } // inversesqrt template GLM_FUNC_QUALIFIER genType inversesqrt(genType x) { return static_cast(1) / sqrt(x); } template GLM_FUNC_QUALIFIER vec inversesqrt(vec const& x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'inversesqrt' only accept floating-point inputs"); return detail::compute_inversesqrt::value>::call(x); } }//namespace glm #if GLM_CONFIG_SIMD == GLM_ENABLE # include "func_exponential_simd.inl" #endif ================================================ FILE: libraries/glm/detail/func_exponential_simd.inl ================================================ /// @ref core /// @file glm/detail/func_exponential_simd.inl #include "../simd/exponential.h" #if GLM_ARCH & GLM_ARCH_SSE2_BIT namespace glm{ namespace detail { template struct compute_sqrt<4, float, Q, true> { GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) { vec<4, float, Q> Result; Result.data = _mm_sqrt_ps(v.data); return Result; } }; # if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE template<> struct compute_sqrt<4, float, aligned_lowp, true> { GLM_FUNC_QUALIFIER static vec<4, float, aligned_lowp> call(vec<4, float, aligned_lowp> const& v) { vec<4, float, aligned_lowp> Result; Result.data = glm_vec4_sqrt_lowp(v.data); return Result; } }; # endif }//namespace detail }//namespace glm #endif//GLM_ARCH & GLM_ARCH_SSE2_BIT ================================================ FILE: libraries/glm/detail/func_geometric.inl ================================================ #include "../exponential.hpp" #include "../common.hpp" namespace glm{ namespace detail { template struct compute_length { GLM_FUNC_QUALIFIER static T call(vec const& v) { return sqrt(dot(v, v)); } }; template struct compute_distance { GLM_FUNC_QUALIFIER static T call(vec const& p0, vec const& p1) { return length(p1 - p0); } }; template struct compute_dot{}; template struct compute_dot, T, Aligned> { GLM_FUNC_QUALIFIER static T call(vec<1, T, Q> const& a, vec<1, T, Q> const& b) { return a.x * b.x; } }; template struct compute_dot, T, Aligned> { GLM_FUNC_QUALIFIER static T call(vec<2, T, Q> const& a, vec<2, T, Q> const& b) { vec<2, T, Q> tmp(a * b); return tmp.x + tmp.y; } }; template struct compute_dot, T, Aligned> { GLM_FUNC_QUALIFIER static T call(vec<3, T, Q> const& a, vec<3, T, Q> const& b) { vec<3, T, Q> tmp(a * b); return tmp.x + tmp.y + tmp.z; } }; template struct compute_dot, T, Aligned> { GLM_FUNC_QUALIFIER static T call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { vec<4, T, Q> tmp(a * b); return (tmp.x + tmp.y) + (tmp.z + tmp.w); } }; template struct compute_cross { GLM_FUNC_QUALIFIER static vec<3, T, Q> call(vec<3, T, Q> const& x, vec<3, T, Q> const& y) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'cross' accepts only floating-point inputs"); return vec<3, T, Q>( x.y * y.z - y.y * x.z, x.z * y.x - y.z * x.x, x.x * y.y - y.x * x.y); } }; template struct compute_normalize { GLM_FUNC_QUALIFIER static vec call(vec const& v) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'normalize' accepts only floating-point inputs"); return v * inversesqrt(dot(v, v)); } }; template struct compute_faceforward { GLM_FUNC_QUALIFIER static vec call(vec const& N, vec const& I, vec const& Nref) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'normalize' accepts only floating-point inputs"); return dot(Nref, I) < static_cast(0) ? N : -N; } }; template struct compute_reflect { GLM_FUNC_QUALIFIER static vec call(vec const& I, vec const& N) { return I - N * dot(N, I) * static_cast(2); } }; template struct compute_refract { GLM_FUNC_QUALIFIER static vec call(vec const& I, vec const& N, T eta) { T const dotValue(dot(N, I)); T const k(static_cast(1) - eta * eta * (static_cast(1) - dotValue * dotValue)); vec const Result = (k >= static_cast(0)) ? (eta * I - (eta * dotValue + std::sqrt(k)) * N) : vec(0); return Result; } }; }//namespace detail // length template GLM_FUNC_QUALIFIER genType length(genType x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'length' accepts only floating-point inputs"); return abs(x); } template GLM_FUNC_QUALIFIER T length(vec const& v) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'length' accepts only floating-point inputs"); return detail::compute_length::value>::call(v); } // distance template GLM_FUNC_QUALIFIER genType distance(genType const& p0, genType const& p1) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'distance' accepts only floating-point inputs"); return length(p1 - p0); } template GLM_FUNC_QUALIFIER T distance(vec const& p0, vec const& p1) { return detail::compute_distance::value>::call(p0, p1); } // dot template GLM_FUNC_QUALIFIER T dot(T x, T y) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'dot' accepts only floating-point inputs"); return x * y; } template GLM_FUNC_QUALIFIER T dot(vec const& x, vec const& y) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'dot' accepts only floating-point inputs"); return detail::compute_dot, T, detail::is_aligned::value>::call(x, y); } // cross template GLM_FUNC_QUALIFIER vec<3, T, Q> cross(vec<3, T, Q> const& x, vec<3, T, Q> const& y) { return detail::compute_cross::value>::call(x, y); } /* // normalize template GLM_FUNC_QUALIFIER genType normalize(genType const& x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'normalize' accepts only floating-point inputs"); return x < genType(0) ? genType(-1) : genType(1); } */ template GLM_FUNC_QUALIFIER vec normalize(vec const& x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'normalize' accepts only floating-point inputs"); return detail::compute_normalize::value>::call(x); } // faceforward template GLM_FUNC_QUALIFIER genType faceforward(genType const& N, genType const& I, genType const& Nref) { return dot(Nref, I) < static_cast(0) ? N : -N; } template GLM_FUNC_QUALIFIER vec faceforward(vec const& N, vec const& I, vec const& Nref) { return detail::compute_faceforward::value>::call(N, I, Nref); } // reflect template GLM_FUNC_QUALIFIER genType reflect(genType const& I, genType const& N) { return I - N * dot(N, I) * genType(2); } template GLM_FUNC_QUALIFIER vec reflect(vec const& I, vec const& N) { return detail::compute_reflect::value>::call(I, N); } // refract template GLM_FUNC_QUALIFIER genType refract(genType const& I, genType const& N, genType eta) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'refract' accepts only floating-point inputs"); genType const dotValue(dot(N, I)); genType const k(static_cast(1) - eta * eta * (static_cast(1) - dotValue * dotValue)); return (eta * I - (eta * dotValue + sqrt(k)) * N) * static_cast(k >= static_cast(0)); } template GLM_FUNC_QUALIFIER vec refract(vec const& I, vec const& N, T eta) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'refract' accepts only floating-point inputs"); return detail::compute_refract::value>::call(I, N, eta); } }//namespace glm #if GLM_CONFIG_SIMD == GLM_ENABLE # include "func_geometric_simd.inl" #endif ================================================ FILE: libraries/glm/detail/func_geometric_simd.inl ================================================ /// @ref core /// @file glm/detail/func_geometric_simd.inl #include "../simd/geometric.h" #if GLM_ARCH & GLM_ARCH_SSE2_BIT namespace glm{ namespace detail { template struct compute_length<4, float, Q, true> { GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& v) { return _mm_cvtss_f32(glm_vec4_length(v.data)); } }; template struct compute_distance<4, float, Q, true> { GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& p0, vec<4, float, Q> const& p1) { return _mm_cvtss_f32(glm_vec4_distance(p0.data, p1.data)); } }; template struct compute_dot, float, true> { GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& x, vec<4, float, Q> const& y) { return _mm_cvtss_f32(glm_vec1_dot(x.data, y.data)); } }; template struct compute_cross { GLM_FUNC_QUALIFIER static vec<3, float, Q> call(vec<3, float, Q> const& a, vec<3, float, Q> const& b) { __m128 const set0 = _mm_set_ps(0.0f, a.z, a.y, a.x); __m128 const set1 = _mm_set_ps(0.0f, b.z, b.y, b.x); __m128 const xpd0 = glm_vec4_cross(set0, set1); vec<4, float, Q> Result; Result.data = xpd0; return vec<3, float, Q>(Result); } }; template struct compute_normalize<4, float, Q, true> { GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) { vec<4, float, Q> Result; Result.data = glm_vec4_normalize(v.data); return Result; } }; template struct compute_faceforward<4, float, Q, true> { GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& N, vec<4, float, Q> const& I, vec<4, float, Q> const& Nref) { vec<4, float, Q> Result; Result.data = glm_vec4_faceforward(N.data, I.data, Nref.data); return Result; } }; template struct compute_reflect<4, float, Q, true> { GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& I, vec<4, float, Q> const& N) { vec<4, float, Q> Result; Result.data = glm_vec4_reflect(I.data, N.data); return Result; } }; template struct compute_refract<4, float, Q, true> { GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& I, vec<4, float, Q> const& N, float eta) { vec<4, float, Q> Result; Result.data = glm_vec4_refract(I.data, N.data, _mm_set1_ps(eta)); return Result; } }; }//namespace detail }//namespace glm #elif GLM_ARCH & GLM_ARCH_NEON_BIT namespace glm{ namespace detail { template struct compute_length<4, float, Q, true> { GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& v) { return compute_dot, float, true>::call(v, v); } }; template struct compute_distance<4, float, Q, true> { GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& p0, vec<4, float, Q> const& p1) { return compute_length<4, float, Q, true>::call(p1 - p0); } }; template struct compute_dot, float, true> { GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& x, vec<4, float, Q> const& y) { #if GLM_ARCH & GLM_ARCH_ARMV8_BIT float32x4_t v = vmulq_f32(x.data, y.data); v = vpaddq_f32(v, v); v = vpaddq_f32(v, v); return vgetq_lane_f32(v, 0); #else // Armv7a with Neon float32x4_t p = vmulq_f32(x.data, y.data); float32x2_t v = vpadd_f32(vget_low_f32(p), vget_high_f32(p)); v = vpadd_f32(v, v); return vget_lane_f32(v, 0); #endif } }; template struct compute_normalize<4, float, Q, true> { GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) { float32x4_t p = vmulq_f32(v.data, v.data); #if GLM_ARCH & GLM_ARCH_ARMV8_BIT p = vpaddq_f32(p, p); p = vpaddq_f32(p, p); #else float32x2_t t = vpadd_f32(vget_low_f32(p), vget_high_f32(p)); t = vpadd_f32(t, t); p = vcombine_f32(t, t); #endif float32x4_t vd = vrsqrteq_f32(p); vec<4, float, Q> Result; Result.data = vmulq_f32(v.data, vd); return Result; } }; }//namespace detail }//namespace glm #endif//GLM_ARCH & GLM_ARCH_SSE2_BIT ================================================ FILE: libraries/glm/detail/func_integer.inl ================================================ /// @ref core #include "_vectorize.hpp" #if(GLM_ARCH & GLM_ARCH_X86 && GLM_COMPILER & GLM_COMPILER_VC) # include # pragma intrinsic(_BitScanReverse) #endif//(GLM_ARCH & GLM_ARCH_X86 && GLM_COMPILER & GLM_COMPILER_VC) #include #if !GLM_HAS_EXTENDED_INTEGER_TYPE # if GLM_COMPILER & GLM_COMPILER_GCC # pragma GCC diagnostic ignored "-Wlong-long" # endif # if (GLM_COMPILER & GLM_COMPILER_CLANG) # pragma clang diagnostic ignored "-Wc++11-long-long" # endif #endif namespace glm{ namespace detail { template GLM_FUNC_QUALIFIER T mask(T Bits) { return Bits >= static_cast(sizeof(T) * 8) ? ~static_cast(0) : (static_cast(1) << Bits) - static_cast(1); } template struct compute_bitfieldReverseStep { GLM_FUNC_QUALIFIER static vec call(vec const& v, T, T) { return v; } }; template struct compute_bitfieldReverseStep { GLM_FUNC_QUALIFIER static vec call(vec const& v, T Mask, T Shift) { return (v & Mask) << Shift | (v & (~Mask)) >> Shift; } }; template struct compute_bitfieldBitCountStep { GLM_FUNC_QUALIFIER static vec call(vec const& v, T, T) { return v; } }; template struct compute_bitfieldBitCountStep { GLM_FUNC_QUALIFIER static vec call(vec const& v, T Mask, T Shift) { return (v & Mask) + ((v >> Shift) & Mask); } }; template struct compute_findLSB { GLM_FUNC_QUALIFIER static int call(genIUType Value) { if(Value == 0) return -1; return glm::bitCount(~Value & (Value - static_cast(1))); } }; # if GLM_HAS_BITSCAN_WINDOWS template struct compute_findLSB { GLM_FUNC_QUALIFIER static int call(genIUType Value) { unsigned long Result(0); unsigned char IsNotNull = _BitScanForward(&Result, *reinterpret_cast(&Value)); return IsNotNull ? int(Result) : -1; } }; # if !((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_MODEL == GLM_MODEL_32)) template struct compute_findLSB { GLM_FUNC_QUALIFIER static int call(genIUType Value) { unsigned long Result(0); unsigned char IsNotNull = _BitScanForward64(&Result, *reinterpret_cast(&Value)); return IsNotNull ? int(Result) : -1; } }; # endif # endif//GLM_HAS_BITSCAN_WINDOWS template struct compute_findMSB_step_vec { GLM_FUNC_QUALIFIER static vec call(vec const& x, T Shift) { return x | (x >> Shift); } }; template struct compute_findMSB_step_vec { GLM_FUNC_QUALIFIER static vec call(vec const& x, T) { return x; } }; template struct compute_findMSB_vec { GLM_FUNC_QUALIFIER static vec call(vec const& v) { vec x(v); x = compute_findMSB_step_vec= 8>::call(x, static_cast( 1)); x = compute_findMSB_step_vec= 8>::call(x, static_cast( 2)); x = compute_findMSB_step_vec= 8>::call(x, static_cast( 4)); x = compute_findMSB_step_vec= 16>::call(x, static_cast( 8)); x = compute_findMSB_step_vec= 32>::call(x, static_cast(16)); x = compute_findMSB_step_vec= 64>::call(x, static_cast(32)); return vec(sizeof(T) * 8 - 1) - glm::bitCount(~x); } }; # if GLM_HAS_BITSCAN_WINDOWS template GLM_FUNC_QUALIFIER int compute_findMSB_32(genIUType Value) { unsigned long Result(0); unsigned char IsNotNull = _BitScanReverse(&Result, *reinterpret_cast(&Value)); return IsNotNull ? int(Result) : -1; } template struct compute_findMSB_vec { GLM_FUNC_QUALIFIER static vec call(vec const& x) { return detail::functor1::call(compute_findMSB_32, x); } }; # if !((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_MODEL == GLM_MODEL_32)) template GLM_FUNC_QUALIFIER int compute_findMSB_64(genIUType Value) { unsigned long Result(0); unsigned char IsNotNull = _BitScanReverse64(&Result, *reinterpret_cast(&Value)); return IsNotNull ? int(Result) : -1; } template struct compute_findMSB_vec { GLM_FUNC_QUALIFIER static vec call(vec const& x) { return detail::functor1::call(compute_findMSB_64, x); } }; # endif # endif//GLM_HAS_BITSCAN_WINDOWS }//namespace detail // uaddCarry GLM_FUNC_QUALIFIER uint uaddCarry(uint const& x, uint const& y, uint & Carry) { detail::uint64 const Value64(static_cast(x) + static_cast(y)); detail::uint64 const Max32((static_cast(1) << static_cast(32)) - static_cast(1)); Carry = Value64 > Max32 ? 1u : 0u; return static_cast(Value64 % (Max32 + static_cast(1))); } template GLM_FUNC_QUALIFIER vec uaddCarry(vec const& x, vec const& y, vec& Carry) { vec Value64(vec(x) + vec(y)); vec Max32((static_cast(1) << static_cast(32)) - static_cast(1)); Carry = mix(vec(0), vec(1), greaterThan(Value64, Max32)); return vec(Value64 % (Max32 + static_cast(1))); } // usubBorrow GLM_FUNC_QUALIFIER uint usubBorrow(uint const& x, uint const& y, uint & Borrow) { Borrow = x >= y ? static_cast(0) : static_cast(1); if(y >= x) return y - x; else return static_cast((static_cast(1) << static_cast(32)) + (static_cast(y) - static_cast(x))); } template GLM_FUNC_QUALIFIER vec usubBorrow(vec const& x, vec const& y, vec& Borrow) { Borrow = mix(vec(1), vec(0), greaterThanEqual(x, y)); vec const YgeX(y - x); vec const XgeY(vec((static_cast(1) << static_cast(32)) + (vec(y) - vec(x)))); return mix(XgeY, YgeX, greaterThanEqual(y, x)); } // umulExtended GLM_FUNC_QUALIFIER void umulExtended(uint const& x, uint const& y, uint & msb, uint & lsb) { detail::uint64 Value64 = static_cast(x) * static_cast(y); msb = static_cast(Value64 >> static_cast(32)); lsb = static_cast(Value64); } template GLM_FUNC_QUALIFIER void umulExtended(vec const& x, vec const& y, vec& msb, vec& lsb) { vec Value64(vec(x) * vec(y)); msb = vec(Value64 >> static_cast(32)); lsb = vec(Value64); } // imulExtended GLM_FUNC_QUALIFIER void imulExtended(int x, int y, int& msb, int& lsb) { detail::int64 Value64 = static_cast(x) * static_cast(y); msb = static_cast(Value64 >> static_cast(32)); lsb = static_cast(Value64); } template GLM_FUNC_QUALIFIER void imulExtended(vec const& x, vec const& y, vec& msb, vec& lsb) { vec Value64(vec(x) * vec(y)); lsb = vec(Value64 & static_cast(0xFFFFFFFF)); msb = vec((Value64 >> static_cast(32)) & static_cast(0xFFFFFFFF)); } // bitfieldExtract template GLM_FUNC_QUALIFIER genIUType bitfieldExtract(genIUType Value, int Offset, int Bits) { return bitfieldExtract(vec<1, genIUType>(Value), Offset, Bits).x; } template GLM_FUNC_QUALIFIER vec bitfieldExtract(vec const& Value, int Offset, int Bits) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldExtract' only accept integer inputs"); return (Value >> static_cast(Offset)) & static_cast(detail::mask(Bits)); } // bitfieldInsert template GLM_FUNC_QUALIFIER genIUType bitfieldInsert(genIUType const& Base, genIUType const& Insert, int Offset, int Bits) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldInsert' only accept integer values"); return bitfieldInsert(vec<1, genIUType>(Base), vec<1, genIUType>(Insert), Offset, Bits).x; } template GLM_FUNC_QUALIFIER vec bitfieldInsert(vec const& Base, vec const& Insert, int Offset, int Bits) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldInsert' only accept integer values"); T const Mask = static_cast(detail::mask(Bits) << Offset); return (Base & ~Mask) | ((Insert << static_cast(Offset)) & Mask); } // bitfieldReverse template GLM_FUNC_QUALIFIER genIUType bitfieldReverse(genIUType x) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldReverse' only accept integer values"); return bitfieldReverse(glm::vec<1, genIUType, glm::defaultp>(x)).x; } template GLM_FUNC_QUALIFIER vec bitfieldReverse(vec const& v) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldReverse' only accept integer values"); vec x(v); x = detail::compute_bitfieldReverseStep::value, sizeof(T) * 8>= 2>::call(x, static_cast(0x5555555555555555ull), static_cast( 1)); x = detail::compute_bitfieldReverseStep::value, sizeof(T) * 8>= 4>::call(x, static_cast(0x3333333333333333ull), static_cast( 2)); x = detail::compute_bitfieldReverseStep::value, sizeof(T) * 8>= 8>::call(x, static_cast(0x0F0F0F0F0F0F0F0Full), static_cast( 4)); x = detail::compute_bitfieldReverseStep::value, sizeof(T) * 8>= 16>::call(x, static_cast(0x00FF00FF00FF00FFull), static_cast( 8)); x = detail::compute_bitfieldReverseStep::value, sizeof(T) * 8>= 32>::call(x, static_cast(0x0000FFFF0000FFFFull), static_cast(16)); x = detail::compute_bitfieldReverseStep::value, sizeof(T) * 8>= 64>::call(x, static_cast(0x00000000FFFFFFFFull), static_cast(32)); return x; } // bitCount template GLM_FUNC_QUALIFIER int bitCount(genIUType x) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitCount' only accept integer values"); return bitCount(glm::vec<1, genIUType, glm::defaultp>(x)).x; } template GLM_FUNC_QUALIFIER vec bitCount(vec const& v) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitCount' only accept integer values"); # if GLM_COMPILER & GLM_COMPILER_VC # pragma warning(push) # pragma warning(disable : 4310) //cast truncates constant value # endif vec::type, Q> x(*reinterpret_cast::type, Q> const *>(&v)); x = detail::compute_bitfieldBitCountStep::type, Q, detail::is_aligned::value, sizeof(T) * 8>= 2>::call(x, typename detail::make_unsigned::type(0x5555555555555555ull), typename detail::make_unsigned::type( 1)); x = detail::compute_bitfieldBitCountStep::type, Q, detail::is_aligned::value, sizeof(T) * 8>= 4>::call(x, typename detail::make_unsigned::type(0x3333333333333333ull), typename detail::make_unsigned::type( 2)); x = detail::compute_bitfieldBitCountStep::type, Q, detail::is_aligned::value, sizeof(T) * 8>= 8>::call(x, typename detail::make_unsigned::type(0x0F0F0F0F0F0F0F0Full), typename detail::make_unsigned::type( 4)); x = detail::compute_bitfieldBitCountStep::type, Q, detail::is_aligned::value, sizeof(T) * 8>= 16>::call(x, typename detail::make_unsigned::type(0x00FF00FF00FF00FFull), typename detail::make_unsigned::type( 8)); x = detail::compute_bitfieldBitCountStep::type, Q, detail::is_aligned::value, sizeof(T) * 8>= 32>::call(x, typename detail::make_unsigned::type(0x0000FFFF0000FFFFull), typename detail::make_unsigned::type(16)); x = detail::compute_bitfieldBitCountStep::type, Q, detail::is_aligned::value, sizeof(T) * 8>= 64>::call(x, typename detail::make_unsigned::type(0x00000000FFFFFFFFull), typename detail::make_unsigned::type(32)); return vec(x); # if GLM_COMPILER & GLM_COMPILER_VC # pragma warning(pop) # endif } // findLSB template GLM_FUNC_QUALIFIER int findLSB(genIUType Value) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findLSB' only accept integer values"); return detail::compute_findLSB::call(Value); } template GLM_FUNC_QUALIFIER vec findLSB(vec const& x) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findLSB' only accept integer values"); return detail::functor1::call(findLSB, x); } // findMSB template GLM_FUNC_QUALIFIER int findMSB(genIUType v) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findMSB' only accept integer values"); return findMSB(vec<1, genIUType>(v)).x; } template GLM_FUNC_QUALIFIER vec findMSB(vec const& v) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findMSB' only accept integer values"); return detail::compute_findMSB_vec::call(v); } }//namespace glm #if GLM_CONFIG_SIMD == GLM_ENABLE # include "func_integer_simd.inl" #endif ================================================ FILE: libraries/glm/detail/func_integer_simd.inl ================================================ #include "../simd/integer.h" #if GLM_ARCH & GLM_ARCH_SSE2_BIT namespace glm{ namespace detail { template struct compute_bitfieldReverseStep<4, uint, Q, true, true> { GLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& v, uint Mask, uint Shift) { __m128i const set0 = v.data; __m128i const set1 = _mm_set1_epi32(static_cast(Mask)); __m128i const and1 = _mm_and_si128(set0, set1); __m128i const sft1 = _mm_slli_epi32(and1, Shift); __m128i const set2 = _mm_andnot_si128(set0, _mm_set1_epi32(-1)); __m128i const and2 = _mm_and_si128(set0, set2); __m128i const sft2 = _mm_srai_epi32(and2, Shift); __m128i const or0 = _mm_or_si128(sft1, sft2); return or0; } }; template struct compute_bitfieldBitCountStep<4, uint, Q, true, true> { GLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& v, uint Mask, uint Shift) { __m128i const set0 = v.data; __m128i const set1 = _mm_set1_epi32(static_cast(Mask)); __m128i const and0 = _mm_and_si128(set0, set1); __m128i const sft0 = _mm_slli_epi32(set0, Shift); __m128i const and1 = _mm_and_si128(sft0, set1); __m128i const add0 = _mm_add_epi32(and0, and1); return add0; } }; }//namespace detail # if GLM_ARCH & GLM_ARCH_AVX_BIT template<> GLM_FUNC_QUALIFIER int bitCount(uint x) { return _mm_popcnt_u32(x); } # if(GLM_MODEL == GLM_MODEL_64) template<> GLM_FUNC_QUALIFIER int bitCount(detail::uint64 x) { return static_cast(_mm_popcnt_u64(x)); } # endif//GLM_MODEL # endif//GLM_ARCH }//namespace glm #endif//GLM_ARCH & GLM_ARCH_SSE2_BIT ================================================ FILE: libraries/glm/detail/func_matrix.inl ================================================ #include "../geometric.hpp" #include namespace glm{ namespace detail { template struct compute_matrixCompMult { GLM_FUNC_QUALIFIER static mat call(mat const& x, mat const& y) { mat Result; for(length_t i = 0; i < Result.length(); ++i) Result[i] = x[i] * y[i]; return Result; } }; template struct compute_transpose{}; template struct compute_transpose<2, 2, T, Q, Aligned> { GLM_FUNC_QUALIFIER static mat<2, 2, T, Q> call(mat<2, 2, T, Q> const& m) { mat<2, 2, T, Q> Result; Result[0][0] = m[0][0]; Result[0][1] = m[1][0]; Result[1][0] = m[0][1]; Result[1][1] = m[1][1]; return Result; } }; template struct compute_transpose<2, 3, T, Q, Aligned> { GLM_FUNC_QUALIFIER static mat<3, 2, T, Q> call(mat<2, 3, T, Q> const& m) { mat<3,2, T, Q> Result; Result[0][0] = m[0][0]; Result[0][1] = m[1][0]; Result[1][0] = m[0][1]; Result[1][1] = m[1][1]; Result[2][0] = m[0][2]; Result[2][1] = m[1][2]; return Result; } }; template struct compute_transpose<2, 4, T, Q, Aligned> { GLM_FUNC_QUALIFIER static mat<4, 2, T, Q> call(mat<2, 4, T, Q> const& m) { mat<4, 2, T, Q> Result; Result[0][0] = m[0][0]; Result[0][1] = m[1][0]; Result[1][0] = m[0][1]; Result[1][1] = m[1][1]; Result[2][0] = m[0][2]; Result[2][1] = m[1][2]; Result[3][0] = m[0][3]; Result[3][1] = m[1][3]; return Result; } }; template struct compute_transpose<3, 2, T, Q, Aligned> { GLM_FUNC_QUALIFIER static mat<2, 3, T, Q> call(mat<3, 2, T, Q> const& m) { mat<2, 3, T, Q> Result; Result[0][0] = m[0][0]; Result[0][1] = m[1][0]; Result[0][2] = m[2][0]; Result[1][0] = m[0][1]; Result[1][1] = m[1][1]; Result[1][2] = m[2][1]; return Result; } }; template struct compute_transpose<3, 3, T, Q, Aligned> { GLM_FUNC_QUALIFIER static mat<3, 3, T, Q> call(mat<3, 3, T, Q> const& m) { mat<3, 3, T, Q> Result; Result[0][0] = m[0][0]; Result[0][1] = m[1][0]; Result[0][2] = m[2][0]; Result[1][0] = m[0][1]; Result[1][1] = m[1][1]; Result[1][2] = m[2][1]; Result[2][0] = m[0][2]; Result[2][1] = m[1][2]; Result[2][2] = m[2][2]; return Result; } }; template struct compute_transpose<3, 4, T, Q, Aligned> { GLM_FUNC_QUALIFIER static mat<4, 3, T, Q> call(mat<3, 4, T, Q> const& m) { mat<4, 3, T, Q> Result; Result[0][0] = m[0][0]; Result[0][1] = m[1][0]; Result[0][2] = m[2][0]; Result[1][0] = m[0][1]; Result[1][1] = m[1][1]; Result[1][2] = m[2][1]; Result[2][0] = m[0][2]; Result[2][1] = m[1][2]; Result[2][2] = m[2][2]; Result[3][0] = m[0][3]; Result[3][1] = m[1][3]; Result[3][2] = m[2][3]; return Result; } }; template struct compute_transpose<4, 2, T, Q, Aligned> { GLM_FUNC_QUALIFIER static mat<2, 4, T, Q> call(mat<4, 2, T, Q> const& m) { mat<2, 4, T, Q> Result; Result[0][0] = m[0][0]; Result[0][1] = m[1][0]; Result[0][2] = m[2][0]; Result[0][3] = m[3][0]; Result[1][0] = m[0][1]; Result[1][1] = m[1][1]; Result[1][2] = m[2][1]; Result[1][3] = m[3][1]; return Result; } }; template struct compute_transpose<4, 3, T, Q, Aligned> { GLM_FUNC_QUALIFIER static mat<3, 4, T, Q> call(mat<4, 3, T, Q> const& m) { mat<3, 4, T, Q> Result; Result[0][0] = m[0][0]; Result[0][1] = m[1][0]; Result[0][2] = m[2][0]; Result[0][3] = m[3][0]; Result[1][0] = m[0][1]; Result[1][1] = m[1][1]; Result[1][2] = m[2][1]; Result[1][3] = m[3][1]; Result[2][0] = m[0][2]; Result[2][1] = m[1][2]; Result[2][2] = m[2][2]; Result[2][3] = m[3][2]; return Result; } }; template struct compute_transpose<4, 4, T, Q, Aligned> { GLM_FUNC_QUALIFIER static mat<4, 4, T, Q> call(mat<4, 4, T, Q> const& m) { mat<4, 4, T, Q> Result; Result[0][0] = m[0][0]; Result[0][1] = m[1][0]; Result[0][2] = m[2][0]; Result[0][3] = m[3][0]; Result[1][0] = m[0][1]; Result[1][1] = m[1][1]; Result[1][2] = m[2][1]; Result[1][3] = m[3][1]; Result[2][0] = m[0][2]; Result[2][1] = m[1][2]; Result[2][2] = m[2][2]; Result[2][3] = m[3][2]; Result[3][0] = m[0][3]; Result[3][1] = m[1][3]; Result[3][2] = m[2][3]; Result[3][3] = m[3][3]; return Result; } }; template struct compute_determinant{}; template struct compute_determinant<2, 2, T, Q, Aligned> { GLM_FUNC_QUALIFIER static T call(mat<2, 2, T, Q> const& m) { return m[0][0] * m[1][1] - m[1][0] * m[0][1]; } }; template struct compute_determinant<3, 3, T, Q, Aligned> { GLM_FUNC_QUALIFIER static T call(mat<3, 3, T, Q> const& m) { return + m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2]) - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2]) + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]); } }; template struct compute_determinant<4, 4, T, Q, Aligned> { GLM_FUNC_QUALIFIER static T call(mat<4, 4, T, Q> const& m) { T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; vec<4, T, Q> DetCof( + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02), - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04), + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05), - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05)); return m[0][0] * DetCof[0] + m[0][1] * DetCof[1] + m[0][2] * DetCof[2] + m[0][3] * DetCof[3]; } }; template struct compute_inverse{}; template struct compute_inverse<2, 2, T, Q, Aligned> { GLM_FUNC_QUALIFIER static mat<2, 2, T, Q> call(mat<2, 2, T, Q> const& m) { T OneOverDeterminant = static_cast(1) / ( + m[0][0] * m[1][1] - m[1][0] * m[0][1]); mat<2, 2, T, Q> Inverse( + m[1][1] * OneOverDeterminant, - m[0][1] * OneOverDeterminant, - m[1][0] * OneOverDeterminant, + m[0][0] * OneOverDeterminant); return Inverse; } }; template struct compute_inverse<3, 3, T, Q, Aligned> { GLM_FUNC_QUALIFIER static mat<3, 3, T, Q> call(mat<3, 3, T, Q> const& m) { T OneOverDeterminant = static_cast(1) / ( + m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2]) - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2]) + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2])); mat<3, 3, T, Q> Inverse; Inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]) * OneOverDeterminant; Inverse[1][0] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]) * OneOverDeterminant; Inverse[2][0] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]) * OneOverDeterminant; Inverse[0][1] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]) * OneOverDeterminant; Inverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]) * OneOverDeterminant; Inverse[2][1] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]) * OneOverDeterminant; Inverse[0][2] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]) * OneOverDeterminant; Inverse[1][2] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]) * OneOverDeterminant; Inverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]) * OneOverDeterminant; return Inverse; } }; template struct compute_inverse<4, 4, T, Q, Aligned> { GLM_FUNC_QUALIFIER static mat<4, 4, T, Q> call(mat<4, 4, T, Q> const& m) { T Coef00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; T Coef02 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; T Coef03 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; T Coef04 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; T Coef06 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; T Coef07 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; T Coef08 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; T Coef10 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; T Coef11 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; T Coef12 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; T Coef14 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; T Coef15 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; T Coef16 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; T Coef18 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; T Coef19 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; T Coef20 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; T Coef22 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; T Coef23 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; vec<4, T, Q> Fac0(Coef00, Coef00, Coef02, Coef03); vec<4, T, Q> Fac1(Coef04, Coef04, Coef06, Coef07); vec<4, T, Q> Fac2(Coef08, Coef08, Coef10, Coef11); vec<4, T, Q> Fac3(Coef12, Coef12, Coef14, Coef15); vec<4, T, Q> Fac4(Coef16, Coef16, Coef18, Coef19); vec<4, T, Q> Fac5(Coef20, Coef20, Coef22, Coef23); vec<4, T, Q> Vec0(m[1][0], m[0][0], m[0][0], m[0][0]); vec<4, T, Q> Vec1(m[1][1], m[0][1], m[0][1], m[0][1]); vec<4, T, Q> Vec2(m[1][2], m[0][2], m[0][2], m[0][2]); vec<4, T, Q> Vec3(m[1][3], m[0][3], m[0][3], m[0][3]); vec<4, T, Q> Inv0(Vec1 * Fac0 - Vec2 * Fac1 + Vec3 * Fac2); vec<4, T, Q> Inv1(Vec0 * Fac0 - Vec2 * Fac3 + Vec3 * Fac4); vec<4, T, Q> Inv2(Vec0 * Fac1 - Vec1 * Fac3 + Vec3 * Fac5); vec<4, T, Q> Inv3(Vec0 * Fac2 - Vec1 * Fac4 + Vec2 * Fac5); vec<4, T, Q> SignA(+1, -1, +1, -1); vec<4, T, Q> SignB(-1, +1, -1, +1); mat<4, 4, T, Q> Inverse(Inv0 * SignA, Inv1 * SignB, Inv2 * SignA, Inv3 * SignB); vec<4, T, Q> Row0(Inverse[0][0], Inverse[1][0], Inverse[2][0], Inverse[3][0]); vec<4, T, Q> Dot0(m[0] * Row0); T Dot1 = (Dot0.x + Dot0.y) + (Dot0.z + Dot0.w); T OneOverDeterminant = static_cast(1) / Dot1; return Inverse * OneOverDeterminant; } }; }//namespace detail template GLM_FUNC_QUALIFIER mat matrixCompMult(mat const& x, mat const& y) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'matrixCompMult' only accept floating-point inputs"); return detail::compute_matrixCompMult::value>::call(x, y); } template GLM_FUNC_QUALIFIER typename detail::outerProduct_trait::type outerProduct(vec const& c, vec const& r) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'outerProduct' only accept floating-point inputs"); typename detail::outerProduct_trait::type m; for(length_t i = 0; i < m.length(); ++i) m[i] = c * r[i]; return m; } template GLM_FUNC_QUALIFIER typename mat::transpose_type transpose(mat const& m) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'transpose' only accept floating-point inputs"); return detail::compute_transpose::value>::call(m); } template GLM_FUNC_QUALIFIER T determinant(mat const& m) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'determinant' only accept floating-point inputs"); return detail::compute_determinant::value>::call(m); } template GLM_FUNC_QUALIFIER mat inverse(mat const& m) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'inverse' only accept floating-point inputs"); return detail::compute_inverse::value>::call(m); } }//namespace glm #if GLM_CONFIG_SIMD == GLM_ENABLE # include "func_matrix_simd.inl" #endif ================================================ FILE: libraries/glm/detail/func_matrix_simd.inl ================================================ #if GLM_ARCH & GLM_ARCH_SSE2_BIT #include "type_mat4x4.hpp" #include "../geometric.hpp" #include "../simd/matrix.h" #include namespace glm{ namespace detail { # if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE template struct compute_matrixCompMult<4, 4, float, Q, true> { GLM_STATIC_ASSERT(detail::is_aligned::value, "Specialization requires aligned"); GLM_FUNC_QUALIFIER static mat<4, 4, float, Q> call(mat<4, 4, float, Q> const& x, mat<4, 4, float, Q> const& y) { mat<4, 4, float, Q> Result; glm_mat4_matrixCompMult( *static_cast(&x[0].data), *static_cast(&y[0].data), *static_cast(&Result[0].data)); return Result; } }; # endif template struct compute_transpose<4, 4, float, Q, true> { GLM_FUNC_QUALIFIER static mat<4, 4, float, Q> call(mat<4, 4, float, Q> const& m) { mat<4, 4, float, Q> Result; glm_mat4_transpose(&m[0].data, &Result[0].data); return Result; } }; template struct compute_determinant<4, 4, float, Q, true> { GLM_FUNC_QUALIFIER static float call(mat<4, 4, float, Q> const& m) { return _mm_cvtss_f32(glm_mat4_determinant(&m[0].data)); } }; template struct compute_inverse<4, 4, float, Q, true> { GLM_FUNC_QUALIFIER static mat<4, 4, float, Q> call(mat<4, 4, float, Q> const& m) { mat<4, 4, float, Q> Result; glm_mat4_inverse(&m[0].data, &Result[0].data); return Result; } }; }//namespace detail # if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE template<> GLM_FUNC_QUALIFIER mat<4, 4, float, aligned_lowp> outerProduct<4, 4, float, aligned_lowp>(vec<4, float, aligned_lowp> const& c, vec<4, float, aligned_lowp> const& r) { __m128 NativeResult[4]; glm_mat4_outerProduct(c.data, r.data, NativeResult); mat<4, 4, float, aligned_lowp> Result; std::memcpy(&Result[0], &NativeResult[0], sizeof(Result)); return Result; } template<> GLM_FUNC_QUALIFIER mat<4, 4, float, aligned_mediump> outerProduct<4, 4, float, aligned_mediump>(vec<4, float, aligned_mediump> const& c, vec<4, float, aligned_mediump> const& r) { __m128 NativeResult[4]; glm_mat4_outerProduct(c.data, r.data, NativeResult); mat<4, 4, float, aligned_mediump> Result; std::memcpy(&Result[0], &NativeResult[0], sizeof(Result)); return Result; } template<> GLM_FUNC_QUALIFIER mat<4, 4, float, aligned_highp> outerProduct<4, 4, float, aligned_highp>(vec<4, float, aligned_highp> const& c, vec<4, float, aligned_highp> const& r) { __m128 NativeResult[4]; glm_mat4_outerProduct(c.data, r.data, NativeResult); mat<4, 4, float, aligned_highp> Result; std::memcpy(&Result[0], &NativeResult[0], sizeof(Result)); return Result; } # endif }//namespace glm #elif GLM_ARCH & GLM_ARCH_NEON_BIT namespace glm { #if GLM_LANG & GLM_LANG_CXX11_FLAG template GLM_FUNC_QUALIFIER typename std::enable_if::value, mat<4, 4, float, Q>>::type operator*(mat<4, 4, float, Q> const & m1, mat<4, 4, float, Q> const & m2) { auto MulRow = [&](int l) { float32x4_t const SrcA = m2[l].data; float32x4_t r = neon::mul_lane(m1[0].data, SrcA, 0); r = neon::madd_lane(r, m1[1].data, SrcA, 1); r = neon::madd_lane(r, m1[2].data, SrcA, 2); r = neon::madd_lane(r, m1[3].data, SrcA, 3); return r; }; mat<4, 4, float, aligned_highp> Result; Result[0].data = MulRow(0); Result[1].data = MulRow(1); Result[2].data = MulRow(2); Result[3].data = MulRow(3); return Result; } #endif // CXX11 template struct detail::compute_inverse<4, 4, float, Q, true> { GLM_FUNC_QUALIFIER static mat<4, 4, float, Q> call(mat<4, 4, float, Q> const& m) { float32x4_t const& m0 = m[0].data; float32x4_t const& m1 = m[1].data; float32x4_t const& m2 = m[2].data; float32x4_t const& m3 = m[3].data; // m[2][2] * m[3][3] - m[3][2] * m[2][3]; // m[2][2] * m[3][3] - m[3][2] * m[2][3]; // m[1][2] * m[3][3] - m[3][2] * m[1][3]; // m[1][2] * m[2][3] - m[2][2] * m[1][3]; float32x4_t Fac0; { float32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 2), neon::dup_lane(m1, 2)); float32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 3), 3, m2, 3); float32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 2), 3, m2, 2); float32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 3), neon::dup_lane(m1, 3)); Fac0 = w0 * w1 - w2 * w3; } // m[2][1] * m[3][3] - m[3][1] * m[2][3]; // m[2][1] * m[3][3] - m[3][1] * m[2][3]; // m[1][1] * m[3][3] - m[3][1] * m[1][3]; // m[1][1] * m[2][3] - m[2][1] * m[1][3]; float32x4_t Fac1; { float32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 1), neon::dup_lane(m1, 1)); float32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 3), 3, m2, 3); float32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 1), 3, m2, 1); float32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 3), neon::dup_lane(m1, 3)); Fac1 = w0 * w1 - w2 * w3; } // m[2][1] * m[3][2] - m[3][1] * m[2][2]; // m[2][1] * m[3][2] - m[3][1] * m[2][2]; // m[1][1] * m[3][2] - m[3][1] * m[1][2]; // m[1][1] * m[2][2] - m[2][1] * m[1][2]; float32x4_t Fac2; { float32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 1), neon::dup_lane(m1, 1)); float32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 2), 3, m2, 2); float32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 1), 3, m2, 1); float32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 2), neon::dup_lane(m1, 2)); Fac2 = w0 * w1 - w2 * w3; } // m[2][0] * m[3][3] - m[3][0] * m[2][3]; // m[2][0] * m[3][3] - m[3][0] * m[2][3]; // m[1][0] * m[3][3] - m[3][0] * m[1][3]; // m[1][0] * m[2][3] - m[2][0] * m[1][3]; float32x4_t Fac3; { float32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 0), neon::dup_lane(m1, 0)); float32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 3), 3, m2, 3); float32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 0), 3, m2, 0); float32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 3), neon::dup_lane(m1, 3)); Fac3 = w0 * w1 - w2 * w3; } // m[2][0] * m[3][2] - m[3][0] * m[2][2]; // m[2][0] * m[3][2] - m[3][0] * m[2][2]; // m[1][0] * m[3][2] - m[3][0] * m[1][2]; // m[1][0] * m[2][2] - m[2][0] * m[1][2]; float32x4_t Fac4; { float32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 0), neon::dup_lane(m1, 0)); float32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 2), 3, m2, 2); float32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 0), 3, m2, 0); float32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 2), neon::dup_lane(m1, 2)); Fac4 = w0 * w1 - w2 * w3; } // m[2][0] * m[3][1] - m[3][0] * m[2][1]; // m[2][0] * m[3][1] - m[3][0] * m[2][1]; // m[1][0] * m[3][1] - m[3][0] * m[1][1]; // m[1][0] * m[2][1] - m[2][0] * m[1][1]; float32x4_t Fac5; { float32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 0), neon::dup_lane(m1, 0)); float32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 1), 3, m2, 1); float32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 0), 3, m2, 0); float32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 1), neon::dup_lane(m1, 1)); Fac5 = w0 * w1 - w2 * w3; } float32x4_t Vec0 = neon::copy_lane(neon::dupq_lane(m0, 0), 0, m1, 0); // (m[1][0], m[0][0], m[0][0], m[0][0]); float32x4_t Vec1 = neon::copy_lane(neon::dupq_lane(m0, 1), 0, m1, 1); // (m[1][1], m[0][1], m[0][1], m[0][1]); float32x4_t Vec2 = neon::copy_lane(neon::dupq_lane(m0, 2), 0, m1, 2); // (m[1][2], m[0][2], m[0][2], m[0][2]); float32x4_t Vec3 = neon::copy_lane(neon::dupq_lane(m0, 3), 0, m1, 3); // (m[1][3], m[0][3], m[0][3], m[0][3]); float32x4_t Inv0 = Vec1 * Fac0 - Vec2 * Fac1 + Vec3 * Fac2; float32x4_t Inv1 = Vec0 * Fac0 - Vec2 * Fac3 + Vec3 * Fac4; float32x4_t Inv2 = Vec0 * Fac1 - Vec1 * Fac3 + Vec3 * Fac5; float32x4_t Inv3 = Vec0 * Fac2 - Vec1 * Fac4 + Vec2 * Fac5; float32x4_t r0 = float32x4_t{-1, +1, -1, +1} * Inv0; float32x4_t r1 = float32x4_t{+1, -1, +1, -1} * Inv1; float32x4_t r2 = float32x4_t{-1, +1, -1, +1} * Inv2; float32x4_t r3 = float32x4_t{+1, -1, +1, -1} * Inv3; float32x4_t det = neon::mul_lane(r0, m0, 0); det = neon::madd_lane(det, r1, m0, 1); det = neon::madd_lane(det, r2, m0, 2); det = neon::madd_lane(det, r3, m0, 3); float32x4_t rdet = vdupq_n_f32(1 / vgetq_lane_f32(det, 0)); mat<4, 4, float, Q> r; r[0].data = vmulq_f32(r0, rdet); r[1].data = vmulq_f32(r1, rdet); r[2].data = vmulq_f32(r2, rdet); r[3].data = vmulq_f32(r3, rdet); return r; } }; }//namespace glm #endif ================================================ FILE: libraries/glm/detail/func_packing.inl ================================================ /// @ref core /// @file glm/detail/func_packing.inl #include "../common.hpp" #include "type_half.hpp" namespace glm { GLM_FUNC_QUALIFIER uint packUnorm2x16(vec2 const& v) { union { unsigned short in[2]; uint out; } u; vec<2, unsigned short, defaultp> result(round(clamp(v, 0.0f, 1.0f) * 65535.0f)); u.in[0] = result[0]; u.in[1] = result[1]; return u.out; } GLM_FUNC_QUALIFIER vec2 unpackUnorm2x16(uint p) { union { uint in; unsigned short out[2]; } u; u.in = p; return vec2(u.out[0], u.out[1]) * 1.5259021896696421759365224689097e-5f; } GLM_FUNC_QUALIFIER uint packSnorm2x16(vec2 const& v) { union { signed short in[2]; uint out; } u; vec<2, short, defaultp> result(round(clamp(v, -1.0f, 1.0f) * 32767.0f)); u.in[0] = result[0]; u.in[1] = result[1]; return u.out; } GLM_FUNC_QUALIFIER vec2 unpackSnorm2x16(uint p) { union { uint in; signed short out[2]; } u; u.in = p; return clamp(vec2(u.out[0], u.out[1]) * 3.0518509475997192297128208258309e-5f, -1.0f, 1.0f); } GLM_FUNC_QUALIFIER uint packUnorm4x8(vec4 const& v) { union { unsigned char in[4]; uint out; } u; vec<4, unsigned char, defaultp> result(round(clamp(v, 0.0f, 1.0f) * 255.0f)); u.in[0] = result[0]; u.in[1] = result[1]; u.in[2] = result[2]; u.in[3] = result[3]; return u.out; } GLM_FUNC_QUALIFIER vec4 unpackUnorm4x8(uint p) { union { uint in; unsigned char out[4]; } u; u.in = p; return vec4(u.out[0], u.out[1], u.out[2], u.out[3]) * 0.0039215686274509803921568627451f; } GLM_FUNC_QUALIFIER uint packSnorm4x8(vec4 const& v) { union { signed char in[4]; uint out; } u; vec<4, signed char, defaultp> result(round(clamp(v, -1.0f, 1.0f) * 127.0f)); u.in[0] = result[0]; u.in[1] = result[1]; u.in[2] = result[2]; u.in[3] = result[3]; return u.out; } GLM_FUNC_QUALIFIER glm::vec4 unpackSnorm4x8(uint p) { union { uint in; signed char out[4]; } u; u.in = p; return clamp(vec4(u.out[0], u.out[1], u.out[2], u.out[3]) * 0.0078740157480315f, -1.0f, 1.0f); } GLM_FUNC_QUALIFIER double packDouble2x32(uvec2 const& v) { union { uint in[2]; double out; } u; u.in[0] = v[0]; u.in[1] = v[1]; return u.out; } GLM_FUNC_QUALIFIER uvec2 unpackDouble2x32(double v) { union { double in; uint out[2]; } u; u.in = v; return uvec2(u.out[0], u.out[1]); } GLM_FUNC_QUALIFIER uint packHalf2x16(vec2 const& v) { union { signed short in[2]; uint out; } u; u.in[0] = detail::toFloat16(v.x); u.in[1] = detail::toFloat16(v.y); return u.out; } GLM_FUNC_QUALIFIER vec2 unpackHalf2x16(uint v) { union { uint in; signed short out[2]; } u; u.in = v; return vec2( detail::toFloat32(u.out[0]), detail::toFloat32(u.out[1])); } }//namespace glm #if GLM_CONFIG_SIMD == GLM_ENABLE # include "func_packing_simd.inl" #endif ================================================ FILE: libraries/glm/detail/func_packing_simd.inl ================================================ namespace glm{ namespace detail { }//namespace detail }//namespace glm ================================================ FILE: libraries/glm/detail/func_trigonometric.inl ================================================ #include "_vectorize.hpp" #include #include namespace glm { // radians template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType radians(genType degrees) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'radians' only accept floating-point input"); return degrees * static_cast(0.01745329251994329576923690768489); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec radians(vec const& v) { return detail::functor1::call(radians, v); } // degrees template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType degrees(genType radians) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'degrees' only accept floating-point input"); return radians * static_cast(57.295779513082320876798154814105); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec degrees(vec const& v) { return detail::functor1::call(degrees, v); } // sin using ::std::sin; template GLM_FUNC_QUALIFIER vec sin(vec const& v) { return detail::functor1::call(sin, v); } // cos using std::cos; template GLM_FUNC_QUALIFIER vec cos(vec const& v) { return detail::functor1::call(cos, v); } // tan using std::tan; template GLM_FUNC_QUALIFIER vec tan(vec const& v) { return detail::functor1::call(tan, v); } // asin using std::asin; template GLM_FUNC_QUALIFIER vec asin(vec const& v) { return detail::functor1::call(asin, v); } // acos using std::acos; template GLM_FUNC_QUALIFIER vec acos(vec const& v) { return detail::functor1::call(acos, v); } // atan template GLM_FUNC_QUALIFIER genType atan(genType y, genType x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'atan' only accept floating-point input"); return ::std::atan2(y, x); } template GLM_FUNC_QUALIFIER vec atan(vec const& a, vec const& b) { return detail::functor2::call(::std::atan2, a, b); } using std::atan; template GLM_FUNC_QUALIFIER vec atan(vec const& v) { return detail::functor1::call(atan, v); } // sinh using std::sinh; template GLM_FUNC_QUALIFIER vec sinh(vec const& v) { return detail::functor1::call(sinh, v); } // cosh using std::cosh; template GLM_FUNC_QUALIFIER vec cosh(vec const& v) { return detail::functor1::call(cosh, v); } // tanh using std::tanh; template GLM_FUNC_QUALIFIER vec tanh(vec const& v) { return detail::functor1::call(tanh, v); } // asinh # if GLM_HAS_CXX11_STL using std::asinh; # else template GLM_FUNC_QUALIFIER genType asinh(genType x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'asinh' only accept floating-point input"); return (x < static_cast(0) ? static_cast(-1) : (x > static_cast(0) ? static_cast(1) : static_cast(0))) * log(std::abs(x) + sqrt(static_cast(1) + x * x)); } # endif template GLM_FUNC_QUALIFIER vec asinh(vec const& v) { return detail::functor1::call(asinh, v); } // acosh # if GLM_HAS_CXX11_STL using std::acosh; # else template GLM_FUNC_QUALIFIER genType acosh(genType x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acosh' only accept floating-point input"); if(x < static_cast(1)) return static_cast(0); return log(x + sqrt(x * x - static_cast(1))); } # endif template GLM_FUNC_QUALIFIER vec acosh(vec const& v) { return detail::functor1::call(acosh, v); } // atanh # if GLM_HAS_CXX11_STL using std::atanh; # else template GLM_FUNC_QUALIFIER genType atanh(genType x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'atanh' only accept floating-point input"); if(std::abs(x) >= static_cast(1)) return 0; return static_cast(0.5) * log((static_cast(1) + x) / (static_cast(1) - x)); } # endif template GLM_FUNC_QUALIFIER vec atanh(vec const& v) { return detail::functor1::call(atanh, v); } }//namespace glm #if GLM_CONFIG_SIMD == GLM_ENABLE # include "func_trigonometric_simd.inl" #endif ================================================ FILE: libraries/glm/detail/func_trigonometric_simd.inl ================================================ ================================================ FILE: libraries/glm/detail/func_vector_relational.inl ================================================ namespace glm { template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec lessThan(vec const& x, vec const& y) { vec Result(true); for(length_t i = 0; i < L; ++i) Result[i] = x[i] < y[i]; return Result; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec lessThanEqual(vec const& x, vec const& y) { vec Result(true); for(length_t i = 0; i < L; ++i) Result[i] = x[i] <= y[i]; return Result; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec greaterThan(vec const& x, vec const& y) { vec Result(true); for(length_t i = 0; i < L; ++i) Result[i] = x[i] > y[i]; return Result; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec greaterThanEqual(vec const& x, vec const& y) { vec Result(true); for(length_t i = 0; i < L; ++i) Result[i] = x[i] >= y[i]; return Result; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(vec const& x, vec const& y) { vec Result(true); for(length_t i = 0; i < L; ++i) Result[i] = x[i] == y[i]; return Result; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y) { vec Result(true); for(length_t i = 0; i < L; ++i) Result[i] = x[i] != y[i]; return Result; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool any(vec const& v) { bool Result = false; for(length_t i = 0; i < L; ++i) Result = Result || v[i]; return Result; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool all(vec const& v) { bool Result = true; for(length_t i = 0; i < L; ++i) Result = Result && v[i]; return Result; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec not_(vec const& v) { vec Result(true); for(length_t i = 0; i < L; ++i) Result[i] = !v[i]; return Result; } }//namespace glm #if GLM_CONFIG_SIMD == GLM_ENABLE # include "func_vector_relational_simd.inl" #endif ================================================ FILE: libraries/glm/detail/func_vector_relational_simd.inl ================================================ namespace glm{ namespace detail { }//namespace detail }//namespace glm ================================================ FILE: libraries/glm/detail/glm.cpp ================================================ /// @ref core /// @file glm/glm.cpp #ifndef GLM_ENABLE_EXPERIMENTAL #define GLM_ENABLE_EXPERIMENTAL #endif #include #include #include #include #include #include namespace glm { // tvec1 type explicit instantiation template struct vec<1, uint8, lowp>; template struct vec<1, uint16, lowp>; template struct vec<1, uint32, lowp>; template struct vec<1, uint64, lowp>; template struct vec<1, int8, lowp>; template struct vec<1, int16, lowp>; template struct vec<1, int32, lowp>; template struct vec<1, int64, lowp>; template struct vec<1, float32, lowp>; template struct vec<1, float64, lowp>; template struct vec<1, uint8, mediump>; template struct vec<1, uint16, mediump>; template struct vec<1, uint32, mediump>; template struct vec<1, uint64, mediump>; template struct vec<1, int8, mediump>; template struct vec<1, int16, mediump>; template struct vec<1, int32, mediump>; template struct vec<1, int64, mediump>; template struct vec<1, float32, mediump>; template struct vec<1, float64, mediump>; template struct vec<1, uint8, highp>; template struct vec<1, uint16, highp>; template struct vec<1, uint32, highp>; template struct vec<1, uint64, highp>; template struct vec<1, int8, highp>; template struct vec<1, int16, highp>; template struct vec<1, int32, highp>; template struct vec<1, int64, highp>; template struct vec<1, float32, highp>; template struct vec<1, float64, highp>; // tvec2 type explicit instantiation template struct vec<2, uint8, lowp>; template struct vec<2, uint16, lowp>; template struct vec<2, uint32, lowp>; template struct vec<2, uint64, lowp>; template struct vec<2, int8, lowp>; template struct vec<2, int16, lowp>; template struct vec<2, int32, lowp>; template struct vec<2, int64, lowp>; template struct vec<2, float32, lowp>; template struct vec<2, float64, lowp>; template struct vec<2, uint8, mediump>; template struct vec<2, uint16, mediump>; template struct vec<2, uint32, mediump>; template struct vec<2, uint64, mediump>; template struct vec<2, int8, mediump>; template struct vec<2, int16, mediump>; template struct vec<2, int32, mediump>; template struct vec<2, int64, mediump>; template struct vec<2, float32, mediump>; template struct vec<2, float64, mediump>; template struct vec<2, uint8, highp>; template struct vec<2, uint16, highp>; template struct vec<2, uint32, highp>; template struct vec<2, uint64, highp>; template struct vec<2, int8, highp>; template struct vec<2, int16, highp>; template struct vec<2, int32, highp>; template struct vec<2, int64, highp>; template struct vec<2, float32, highp>; template struct vec<2, float64, highp>; // tvec3 type explicit instantiation template struct vec<3, uint8, lowp>; template struct vec<3, uint16, lowp>; template struct vec<3, uint32, lowp>; template struct vec<3, uint64, lowp>; template struct vec<3, int8, lowp>; template struct vec<3, int16, lowp>; template struct vec<3, int32, lowp>; template struct vec<3, int64, lowp>; template struct vec<3, float32, lowp>; template struct vec<3, float64, lowp>; template struct vec<3, uint8, mediump>; template struct vec<3, uint16, mediump>; template struct vec<3, uint32, mediump>; template struct vec<3, uint64, mediump>; template struct vec<3, int8, mediump>; template struct vec<3, int16, mediump>; template struct vec<3, int32, mediump>; template struct vec<3, int64, mediump>; template struct vec<3, float32, mediump>; template struct vec<3, float64, mediump>; template struct vec<3, uint8, highp>; template struct vec<3, uint16, highp>; template struct vec<3, uint32, highp>; template struct vec<3, uint64, highp>; template struct vec<3, int8, highp>; template struct vec<3, int16, highp>; template struct vec<3, int32, highp>; template struct vec<3, int64, highp>; template struct vec<3, float32, highp>; template struct vec<3, float64, highp>; // tvec4 type explicit instantiation template struct vec<4, uint8, lowp>; template struct vec<4, uint16, lowp>; template struct vec<4, uint32, lowp>; template struct vec<4, uint64, lowp>; template struct vec<4, int8, lowp>; template struct vec<4, int16, lowp>; template struct vec<4, int32, lowp>; template struct vec<4, int64, lowp>; template struct vec<4, float32, lowp>; template struct vec<4, float64, lowp>; template struct vec<4, uint8, mediump>; template struct vec<4, uint16, mediump>; template struct vec<4, uint32, mediump>; template struct vec<4, uint64, mediump>; template struct vec<4, int8, mediump>; template struct vec<4, int16, mediump>; template struct vec<4, int32, mediump>; template struct vec<4, int64, mediump>; template struct vec<4, float32, mediump>; template struct vec<4, float64, mediump>; template struct vec<4, uint8, highp>; template struct vec<4, uint16, highp>; template struct vec<4, uint32, highp>; template struct vec<4, uint64, highp>; template struct vec<4, int8, highp>; template struct vec<4, int16, highp>; template struct vec<4, int32, highp>; template struct vec<4, int64, highp>; template struct vec<4, float32, highp>; template struct vec<4, float64, highp>; // tmat2x2 type explicit instantiation template struct mat<2, 2, float32, lowp>; template struct mat<2, 2, float64, lowp>; template struct mat<2, 2, float32, mediump>; template struct mat<2, 2, float64, mediump>; template struct mat<2, 2, float32, highp>; template struct mat<2, 2, float64, highp>; // tmat2x3 type explicit instantiation template struct mat<2, 3, float32, lowp>; template struct mat<2, 3, float64, lowp>; template struct mat<2, 3, float32, mediump>; template struct mat<2, 3, float64, mediump>; template struct mat<2, 3, float32, highp>; template struct mat<2, 3, float64, highp>; // tmat2x4 type explicit instantiation template struct mat<2, 4, float32, lowp>; template struct mat<2, 4, float64, lowp>; template struct mat<2, 4, float32, mediump>; template struct mat<2, 4, float64, mediump>; template struct mat<2, 4, float32, highp>; template struct mat<2, 4, float64, highp>; // tmat3x2 type explicit instantiation template struct mat<3, 2, float32, lowp>; template struct mat<3, 2, float64, lowp>; template struct mat<3, 2, float32, mediump>; template struct mat<3, 2, float64, mediump>; template struct mat<3, 2, float32, highp>; template struct mat<3, 2, float64, highp>; // tmat3x3 type explicit instantiation template struct mat<3, 3, float32, lowp>; template struct mat<3, 3, float64, lowp>; template struct mat<3, 3, float32, mediump>; template struct mat<3, 3, float64, mediump>; template struct mat<3, 3, float32, highp>; template struct mat<3, 3, float64, highp>; // tmat3x4 type explicit instantiation template struct mat<3, 4, float32, lowp>; template struct mat<3, 4, float64, lowp>; template struct mat<3, 4, float32, mediump>; template struct mat<3, 4, float64, mediump>; template struct mat<3, 4, float32, highp>; template struct mat<3, 4, float64, highp>; // tmat4x2 type explicit instantiation template struct mat<4, 2, float32, lowp>; template struct mat<4, 2, float64, lowp>; template struct mat<4, 2, float32, mediump>; template struct mat<4, 2, float64, mediump>; template struct mat<4, 2, float32, highp>; template struct mat<4, 2, float64, highp>; // tmat4x3 type explicit instantiation template struct mat<4, 3, float32, lowp>; template struct mat<4, 3, float64, lowp>; template struct mat<4, 3, float32, mediump>; template struct mat<4, 3, float64, mediump>; template struct mat<4, 3, float32, highp>; template struct mat<4, 3, float64, highp>; // tmat4x4 type explicit instantiation template struct mat<4, 4, float32, lowp>; template struct mat<4, 4, float64, lowp>; template struct mat<4, 4, float32, mediump>; template struct mat<4, 4, float64, mediump>; template struct mat<4, 4, float32, highp>; template struct mat<4, 4, float64, highp>; // tquat type explicit instantiation template struct qua; template struct qua; template struct qua; template struct qua; template struct qua; template struct qua; //tdualquat type explicit instantiation template struct tdualquat; template struct tdualquat; template struct tdualquat; template struct tdualquat; template struct tdualquat; template struct tdualquat; }//namespace glm ================================================ FILE: libraries/glm/detail/qualifier.hpp ================================================ #pragma once #include "setup.hpp" namespace glm { /// Qualify GLM types in term of alignment (packed, aligned) and precision in term of ULPs (lowp, mediump, highp) enum qualifier { packed_highp, ///< Typed data is tightly packed in memory and operations are executed with high precision in term of ULPs packed_mediump, ///< Typed data is tightly packed in memory and operations are executed with medium precision in term of ULPs for higher performance packed_lowp, ///< Typed data is tightly packed in memory and operations are executed with low precision in term of ULPs to maximize performance # if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE aligned_highp, ///< Typed data is aligned in memory allowing SIMD optimizations and operations are executed with high precision in term of ULPs aligned_mediump, ///< Typed data is aligned in memory allowing SIMD optimizations and operations are executed with high precision in term of ULPs for higher performance aligned_lowp, // ///< Typed data is aligned in memory allowing SIMD optimizations and operations are executed with high precision in term of ULPs to maximize performance aligned = aligned_highp, ///< By default aligned qualifier is also high precision # endif highp = packed_highp, ///< By default highp qualifier is also packed mediump = packed_mediump, ///< By default mediump qualifier is also packed lowp = packed_lowp, ///< By default lowp qualifier is also packed packed = packed_highp, ///< By default packed qualifier is also high precision # if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE && defined(GLM_FORCE_DEFAULT_ALIGNED_GENTYPES) defaultp = aligned_highp # else defaultp = highp # endif }; typedef qualifier precision; template struct vec; template struct mat; template struct qua; # if GLM_HAS_TEMPLATE_ALIASES template using tvec1 = vec<1, T, Q>; template using tvec2 = vec<2, T, Q>; template using tvec3 = vec<3, T, Q>; template using tvec4 = vec<4, T, Q>; template using tmat2x2 = mat<2, 2, T, Q>; template using tmat2x3 = mat<2, 3, T, Q>; template using tmat2x4 = mat<2, 4, T, Q>; template using tmat3x2 = mat<3, 2, T, Q>; template using tmat3x3 = mat<3, 3, T, Q>; template using tmat3x4 = mat<3, 4, T, Q>; template using tmat4x2 = mat<4, 2, T, Q>; template using tmat4x3 = mat<4, 3, T, Q>; template using tmat4x4 = mat<4, 4, T, Q>; template using tquat = qua; # endif namespace detail { template struct is_aligned { static const bool value = false; }; # if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE template<> struct is_aligned { static const bool value = true; }; template<> struct is_aligned { static const bool value = true; }; template<> struct is_aligned { static const bool value = true; }; # endif template struct storage { typedef struct type { T data[L]; } type; }; # if GLM_HAS_ALIGNOF template struct storage { typedef struct alignas(L * sizeof(T)) type { T data[L]; } type; }; template struct storage<3, T, true> { typedef struct alignas(4 * sizeof(T)) type { T data[4]; } type; }; # endif # if GLM_ARCH & GLM_ARCH_SSE2_BIT template<> struct storage<4, float, true> { typedef glm_f32vec4 type; }; template<> struct storage<4, int, true> { typedef glm_i32vec4 type; }; template<> struct storage<4, unsigned int, true> { typedef glm_u32vec4 type; }; template<> struct storage<2, double, true> { typedef glm_f64vec2 type; }; template<> struct storage<2, detail::int64, true> { typedef glm_i64vec2 type; }; template<> struct storage<2, detail::uint64, true> { typedef glm_u64vec2 type; }; # endif # if (GLM_ARCH & GLM_ARCH_AVX_BIT) template<> struct storage<4, double, true> { typedef glm_f64vec4 type; }; # endif # if (GLM_ARCH & GLM_ARCH_AVX2_BIT) template<> struct storage<4, detail::int64, true> { typedef glm_i64vec4 type; }; template<> struct storage<4, detail::uint64, true> { typedef glm_u64vec4 type; }; # endif # if GLM_ARCH & GLM_ARCH_NEON_BIT template<> struct storage<4, float, true> { typedef glm_f32vec4 type; }; template<> struct storage<4, int, true> { typedef glm_i32vec4 type; }; template<> struct storage<4, unsigned int, true> { typedef glm_u32vec4 type; }; # endif enum genTypeEnum { GENTYPE_VEC, GENTYPE_MAT, GENTYPE_QUAT }; template struct genTypeTrait {}; template struct genTypeTrait > { static const genTypeEnum GENTYPE = GENTYPE_MAT; }; template struct init_gentype { }; template struct init_gentype { GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genType identity() { return genType(1, 0, 0, 0); } }; template struct init_gentype { GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genType identity() { return genType(1); } }; }//namespace detail }//namespace glm ================================================ FILE: libraries/glm/detail/setup.hpp ================================================ #ifndef GLM_SETUP_INCLUDED #include #include #define GLM_VERSION_MAJOR 0 #define GLM_VERSION_MINOR 9 #define GLM_VERSION_PATCH 9 #define GLM_VERSION_REVISION 7 #define GLM_VERSION 997 #define GLM_VERSION_MESSAGE "GLM: version 0.9.9.7" #define GLM_SETUP_INCLUDED GLM_VERSION /////////////////////////////////////////////////////////////////////////////////// // Active states #define GLM_DISABLE 0 #define GLM_ENABLE 1 /////////////////////////////////////////////////////////////////////////////////// // Messages #if defined(GLM_FORCE_MESSAGES) # define GLM_MESSAGES GLM_ENABLE #else # define GLM_MESSAGES GLM_DISABLE #endif /////////////////////////////////////////////////////////////////////////////////// // Detect the platform #include "../simd/platform.h" /////////////////////////////////////////////////////////////////////////////////// // Build model #if defined(_M_ARM64) || defined(__LP64__) || defined(_M_X64) || defined(__ppc64__) || defined(__x86_64__) # define GLM_MODEL GLM_MODEL_64 #elif defined(__i386__) || defined(__ppc__) || defined(__ILP32__) || defined(_M_ARM) # define GLM_MODEL GLM_MODEL_32 #else # define GLM_MODEL GLM_MODEL_32 #endif// #if !defined(GLM_MODEL) && GLM_COMPILER != 0 # error "GLM_MODEL undefined, your compiler may not be supported by GLM. Add #define GLM_MODEL 0 to ignore this message." #endif//GLM_MODEL /////////////////////////////////////////////////////////////////////////////////// // C++ Version // User defines: GLM_FORCE_CXX98, GLM_FORCE_CXX03, GLM_FORCE_CXX11, GLM_FORCE_CXX14, GLM_FORCE_CXX17, GLM_FORCE_CXX2A #define GLM_LANG_CXX98_FLAG (1 << 1) #define GLM_LANG_CXX03_FLAG (1 << 2) #define GLM_LANG_CXX0X_FLAG (1 << 3) #define GLM_LANG_CXX11_FLAG (1 << 4) #define GLM_LANG_CXX14_FLAG (1 << 5) #define GLM_LANG_CXX17_FLAG (1 << 6) #define GLM_LANG_CXX2A_FLAG (1 << 7) #define GLM_LANG_CXXMS_FLAG (1 << 8) #define GLM_LANG_CXXGNU_FLAG (1 << 9) #define GLM_LANG_CXX98 GLM_LANG_CXX98_FLAG #define GLM_LANG_CXX03 (GLM_LANG_CXX98 | GLM_LANG_CXX03_FLAG) #define GLM_LANG_CXX0X (GLM_LANG_CXX03 | GLM_LANG_CXX0X_FLAG) #define GLM_LANG_CXX11 (GLM_LANG_CXX0X | GLM_LANG_CXX11_FLAG) #define GLM_LANG_CXX14 (GLM_LANG_CXX11 | GLM_LANG_CXX14_FLAG) #define GLM_LANG_CXX17 (GLM_LANG_CXX14 | GLM_LANG_CXX17_FLAG) #define GLM_LANG_CXX2A (GLM_LANG_CXX17 | GLM_LANG_CXX2A_FLAG) #define GLM_LANG_CXXMS GLM_LANG_CXXMS_FLAG #define GLM_LANG_CXXGNU GLM_LANG_CXXGNU_FLAG #if (defined(_MSC_EXTENSIONS)) # define GLM_LANG_EXT GLM_LANG_CXXMS_FLAG #elif ((GLM_COMPILER & (GLM_COMPILER_CLANG | GLM_COMPILER_GCC)) && (GLM_ARCH & GLM_ARCH_SIMD_BIT)) # define GLM_LANG_EXT GLM_LANG_CXXMS_FLAG #else # define GLM_LANG_EXT 0 #endif #if (defined(GLM_FORCE_CXX_UNKNOWN)) # define GLM_LANG 0 #elif defined(GLM_FORCE_CXX2A) # define GLM_LANG (GLM_LANG_CXX2A | GLM_LANG_EXT) # define GLM_LANG_STL11_FORCED #elif defined(GLM_FORCE_CXX17) # define GLM_LANG (GLM_LANG_CXX17 | GLM_LANG_EXT) # define GLM_LANG_STL11_FORCED #elif defined(GLM_FORCE_CXX14) # define GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_EXT) # define GLM_LANG_STL11_FORCED #elif defined(GLM_FORCE_CXX11) # define GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_EXT) # define GLM_LANG_STL11_FORCED #elif defined(GLM_FORCE_CXX03) # define GLM_LANG (GLM_LANG_CXX03 | GLM_LANG_EXT) #elif defined(GLM_FORCE_CXX98) # define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_EXT) #else # if GLM_COMPILER & GLM_COMPILER_VC && defined(_MSVC_LANG) # if GLM_COMPILER >= GLM_COMPILER_VC15_7 # define GLM_LANG_PLATFORM _MSVC_LANG # elif GLM_COMPILER >= GLM_COMPILER_VC15 # if _MSVC_LANG > 201402L # define GLM_LANG_PLATFORM 201402L # else # define GLM_LANG_PLATFORM _MSVC_LANG # endif # else # define GLM_LANG_PLATFORM 0 # endif # else # define GLM_LANG_PLATFORM 0 # endif # if __cplusplus > 201703L || GLM_LANG_PLATFORM > 201703L # define GLM_LANG (GLM_LANG_CXX2A | GLM_LANG_EXT) # elif __cplusplus == 201703L || GLM_LANG_PLATFORM == 201703L # define GLM_LANG (GLM_LANG_CXX17 | GLM_LANG_EXT) # elif __cplusplus == 201402L || __cplusplus == 201500L || GLM_LANG_PLATFORM == 201402L # define GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_EXT) # elif __cplusplus == 201103L || GLM_LANG_PLATFORM == 201103L # define GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_EXT) # elif defined(__INTEL_CXX11_MODE__) || defined(_MSC_VER) || defined(__GXX_EXPERIMENTAL_CXX0X__) # define GLM_LANG (GLM_LANG_CXX0X | GLM_LANG_EXT) # elif __cplusplus == 199711L # define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_EXT) # else # define GLM_LANG (0 | GLM_LANG_EXT) # endif #endif /////////////////////////////////////////////////////////////////////////////////// // Has of C++ features // http://clang.llvm.org/cxx_status.html // http://gcc.gnu.org/projects/cxx0x.html // http://msdn.microsoft.com/en-us/library/vstudio/hh567368(v=vs.120).aspx // Android has multiple STLs but C++11 STL detection doesn't always work #284 #564 #if GLM_PLATFORM == GLM_PLATFORM_ANDROID && !defined(GLM_LANG_STL11_FORCED) # define GLM_HAS_CXX11_STL 0 #elif GLM_COMPILER & GLM_COMPILER_CLANG # if (defined(_LIBCPP_VERSION) || (GLM_LANG & GLM_LANG_CXX11_FLAG) || defined(GLM_LANG_STL11_FORCED)) # define GLM_HAS_CXX11_STL 1 # else # define GLM_HAS_CXX11_STL 0 # endif #elif GLM_LANG & GLM_LANG_CXX11_FLAG # define GLM_HAS_CXX11_STL 1 #else # define GLM_HAS_CXX11_STL ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC48)) || \ ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ ((GLM_PLATFORM != GLM_PLATFORM_WINDOWS) && (GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL15)))) #endif // N1720 #if GLM_COMPILER & GLM_COMPILER_CLANG # define GLM_HAS_STATIC_ASSERT __has_feature(cxx_static_assert) #elif GLM_LANG & GLM_LANG_CXX11_FLAG # define GLM_HAS_STATIC_ASSERT 1 #else # define GLM_HAS_STATIC_ASSERT ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ ((GLM_COMPILER & GLM_COMPILER_CUDA)) || \ ((GLM_COMPILER & GLM_COMPILER_VC)))) #endif // N1988 #if GLM_LANG & GLM_LANG_CXX11_FLAG # define GLM_HAS_EXTENDED_INTEGER_TYPE 1 #else # define GLM_HAS_EXTENDED_INTEGER_TYPE (\ ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_VC)) || \ ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CUDA)) || \ ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CLANG))) #endif // N2672 Initializer lists http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm #if GLM_COMPILER & GLM_COMPILER_CLANG # define GLM_HAS_INITIALIZER_LISTS __has_feature(cxx_generalized_initializers) #elif GLM_LANG & GLM_LANG_CXX11_FLAG # define GLM_HAS_INITIALIZER_LISTS 1 #else # define GLM_HAS_INITIALIZER_LISTS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15)) || \ ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL14)) || \ ((GLM_COMPILER & GLM_COMPILER_CUDA)))) #endif // N2544 Unrestricted unions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf #if GLM_COMPILER & GLM_COMPILER_CLANG # define GLM_HAS_UNRESTRICTED_UNIONS __has_feature(cxx_unrestricted_unions) #elif GLM_LANG & GLM_LANG_CXX11_FLAG # define GLM_HAS_UNRESTRICTED_UNIONS 1 #else # define GLM_HAS_UNRESTRICTED_UNIONS (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ (GLM_COMPILER & GLM_COMPILER_VC) || \ ((GLM_COMPILER & GLM_COMPILER_CUDA))) #endif // N2346 #if GLM_COMPILER & GLM_COMPILER_CLANG # define GLM_HAS_DEFAULTED_FUNCTIONS __has_feature(cxx_defaulted_functions) #elif GLM_LANG & GLM_LANG_CXX11_FLAG # define GLM_HAS_DEFAULTED_FUNCTIONS 1 #else # define GLM_HAS_DEFAULTED_FUNCTIONS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \ (GLM_COMPILER & GLM_COMPILER_CUDA))) #endif // N2118 #if GLM_COMPILER & GLM_COMPILER_CLANG # define GLM_HAS_RVALUE_REFERENCES __has_feature(cxx_rvalue_references) #elif GLM_LANG & GLM_LANG_CXX11_FLAG # define GLM_HAS_RVALUE_REFERENCES 1 #else # define GLM_HAS_RVALUE_REFERENCES ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ ((GLM_COMPILER & GLM_COMPILER_VC)) || \ ((GLM_COMPILER & GLM_COMPILER_CUDA)))) #endif // N2437 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf #if GLM_COMPILER & GLM_COMPILER_CLANG # define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS __has_feature(cxx_explicit_conversions) #elif GLM_LANG & GLM_LANG_CXX11_FLAG # define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS 1 #else # define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL14)) || \ ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ ((GLM_COMPILER & GLM_COMPILER_CUDA)))) #endif // N2258 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf #if GLM_COMPILER & GLM_COMPILER_CLANG # define GLM_HAS_TEMPLATE_ALIASES __has_feature(cxx_alias_templates) #elif GLM_LANG & GLM_LANG_CXX11_FLAG # define GLM_HAS_TEMPLATE_ALIASES 1 #else # define GLM_HAS_TEMPLATE_ALIASES ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \ ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ ((GLM_COMPILER & GLM_COMPILER_CUDA)))) #endif // N2930 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2930.html #if GLM_COMPILER & GLM_COMPILER_CLANG # define GLM_HAS_RANGE_FOR __has_feature(cxx_range_for) #elif GLM_LANG & GLM_LANG_CXX11_FLAG # define GLM_HAS_RANGE_FOR 1 #else # define GLM_HAS_RANGE_FOR ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \ ((GLM_COMPILER & GLM_COMPILER_VC)) || \ ((GLM_COMPILER & GLM_COMPILER_CUDA)))) #endif // N2341 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf #if GLM_COMPILER & GLM_COMPILER_CLANG # define GLM_HAS_ALIGNOF __has_feature(cxx_alignas) #elif GLM_LANG & GLM_LANG_CXX11_FLAG # define GLM_HAS_ALIGNOF 1 #else # define GLM_HAS_ALIGNOF ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL15)) || \ ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC14)) || \ ((GLM_COMPILER & GLM_COMPILER_CUDA)))) #endif // N2235 Generalized Constant Expressions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf // N3652 Extended Constant Expressions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3652.html #if (GLM_ARCH & GLM_ARCH_SIMD_BIT) // Compiler SIMD intrinsics don't support constexpr... # define GLM_HAS_CONSTEXPR 0 #elif (GLM_COMPILER & GLM_COMPILER_CLANG) # define GLM_HAS_CONSTEXPR __has_feature(cxx_relaxed_constexpr) #elif (GLM_LANG & GLM_LANG_CXX14_FLAG) # define GLM_HAS_CONSTEXPR 1 #else # define GLM_HAS_CONSTEXPR ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && GLM_HAS_INITIALIZER_LISTS && (\ ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL17)) || \ ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15)))) #endif #if GLM_HAS_CONSTEXPR # define GLM_CONSTEXPR constexpr #else # define GLM_CONSTEXPR #endif // #if GLM_HAS_CONSTEXPR # if (GLM_COMPILER & GLM_COMPILER_CLANG) # if __has_feature(cxx_if_constexpr) # define GLM_HAS_IF_CONSTEXPR 1 # else # define GLM_HAS_IF_CONSTEXPR 0 # endif # elif (GLM_LANG & GLM_LANG_CXX17_FLAG) # define GLM_HAS_IF_CONSTEXPR 1 # else # define GLM_HAS_IF_CONSTEXPR 0 # endif #else # define GLM_HAS_IF_CONSTEXPR 0 #endif #if GLM_HAS_IF_CONSTEXPR # define GLM_IF_CONSTEXPR if constexpr #else # define GLM_IF_CONSTEXPR if #endif // #if GLM_LANG & GLM_LANG_CXX11_FLAG # define GLM_HAS_ASSIGNABLE 1 #else # define GLM_HAS_ASSIGNABLE ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15)) || \ ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC49)))) #endif // #define GLM_HAS_TRIVIAL_QUERIES 0 // #if GLM_LANG & GLM_LANG_CXX11_FLAG # define GLM_HAS_MAKE_SIGNED 1 #else # define GLM_HAS_MAKE_SIGNED ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ ((GLM_COMPILER & GLM_COMPILER_CUDA)))) #endif // #if defined(GLM_FORCE_INTRINSICS) # define GLM_HAS_BITSCAN_WINDOWS ((GLM_PLATFORM & GLM_PLATFORM_WINDOWS) && (\ ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \ ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC14) && (GLM_ARCH & GLM_ARCH_X86_BIT)))) #else # define GLM_HAS_BITSCAN_WINDOWS 0 #endif /////////////////////////////////////////////////////////////////////////////////// // OpenMP #ifdef _OPENMP # if GLM_COMPILER & GLM_COMPILER_GCC # if GLM_COMPILER >= GLM_COMPILER_GCC61 # define GLM_HAS_OPENMP 45 # elif GLM_COMPILER >= GLM_COMPILER_GCC49 # define GLM_HAS_OPENMP 40 # elif GLM_COMPILER >= GLM_COMPILER_GCC47 # define GLM_HAS_OPENMP 31 # else # define GLM_HAS_OPENMP 0 # endif # elif GLM_COMPILER & GLM_COMPILER_CLANG # if GLM_COMPILER >= GLM_COMPILER_CLANG38 # define GLM_HAS_OPENMP 31 # else # define GLM_HAS_OPENMP 0 # endif # elif GLM_COMPILER & GLM_COMPILER_VC # define GLM_HAS_OPENMP 20 # elif GLM_COMPILER & GLM_COMPILER_INTEL # if GLM_COMPILER >= GLM_COMPILER_INTEL16 # define GLM_HAS_OPENMP 40 # else # define GLM_HAS_OPENMP 0 # endif # else # define GLM_HAS_OPENMP 0 # endif #else # define GLM_HAS_OPENMP 0 #endif /////////////////////////////////////////////////////////////////////////////////// // nullptr #if GLM_LANG & GLM_LANG_CXX0X_FLAG # define GLM_CONFIG_NULLPTR GLM_ENABLE #else # define GLM_CONFIG_NULLPTR GLM_DISABLE #endif #if GLM_CONFIG_NULLPTR == GLM_ENABLE # define GLM_NULLPTR nullptr #else # define GLM_NULLPTR 0 #endif /////////////////////////////////////////////////////////////////////////////////// // Static assert #if GLM_HAS_STATIC_ASSERT # define GLM_STATIC_ASSERT(x, message) static_assert(x, message) #elif GLM_COMPILER & GLM_COMPILER_VC # define GLM_STATIC_ASSERT(x, message) typedef char __CASSERT__##__LINE__[(x) ? 1 : -1] #else # define GLM_STATIC_ASSERT(x, message) assert(x) #endif//GLM_LANG /////////////////////////////////////////////////////////////////////////////////// // Qualifiers #if GLM_COMPILER & GLM_COMPILER_CUDA # define GLM_CUDA_FUNC_DEF __device__ __host__ # define GLM_CUDA_FUNC_DECL __device__ __host__ #else # define GLM_CUDA_FUNC_DEF # define GLM_CUDA_FUNC_DECL #endif #if defined(GLM_FORCE_INLINE) # if GLM_COMPILER & GLM_COMPILER_VC # define GLM_INLINE __forceinline # define GLM_NEVER_INLINE __declspec((noinline)) # elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG) # define GLM_INLINE inline __attribute__((__always_inline__)) # define GLM_NEVER_INLINE __attribute__((__noinline__)) # elif GLM_COMPILER & GLM_COMPILER_CUDA # define GLM_INLINE __forceinline__ # define GLM_NEVER_INLINE __noinline__ # else # define GLM_INLINE inline # define GLM_NEVER_INLINE # endif//GLM_COMPILER #else # define GLM_INLINE inline # define GLM_NEVER_INLINE #endif//defined(GLM_FORCE_INLINE) #define GLM_FUNC_DECL GLM_CUDA_FUNC_DECL #define GLM_FUNC_QUALIFIER GLM_CUDA_FUNC_DEF GLM_INLINE /////////////////////////////////////////////////////////////////////////////////// // Swizzle operators // User defines: GLM_FORCE_SWIZZLE #define GLM_SWIZZLE_DISABLED 0 #define GLM_SWIZZLE_OPERATOR 1 #define GLM_SWIZZLE_FUNCTION 2 #if defined(GLM_FORCE_XYZW_ONLY) # undef GLM_FORCE_SWIZZLE #endif #if defined(GLM_SWIZZLE) # pragma message("GLM: GLM_SWIZZLE is deprecated, use GLM_FORCE_SWIZZLE instead.") # define GLM_FORCE_SWIZZLE #endif #if defined(GLM_FORCE_SWIZZLE) && (GLM_LANG & GLM_LANG_CXXMS_FLAG) # define GLM_CONFIG_SWIZZLE GLM_SWIZZLE_OPERATOR #elif defined(GLM_FORCE_SWIZZLE) # define GLM_CONFIG_SWIZZLE GLM_SWIZZLE_FUNCTION #else # define GLM_CONFIG_SWIZZLE GLM_SWIZZLE_DISABLED #endif /////////////////////////////////////////////////////////////////////////////////// // Allows using not basic types as genType // #define GLM_FORCE_UNRESTRICTED_GENTYPE #ifdef GLM_FORCE_UNRESTRICTED_GENTYPE # define GLM_CONFIG_UNRESTRICTED_GENTYPE GLM_ENABLE #else # define GLM_CONFIG_UNRESTRICTED_GENTYPE GLM_DISABLE #endif /////////////////////////////////////////////////////////////////////////////////// // Clip control, define GLM_FORCE_DEPTH_ZERO_TO_ONE before including GLM // to use a clip space between 0 to 1. // Coordinate system, define GLM_FORCE_LEFT_HANDED before including GLM // to use left handed coordinate system by default. #define GLM_CLIP_CONTROL_ZO_BIT (1 << 0) // ZERO_TO_ONE #define GLM_CLIP_CONTROL_NO_BIT (1 << 1) // NEGATIVE_ONE_TO_ONE #define GLM_CLIP_CONTROL_LH_BIT (1 << 2) // LEFT_HANDED, For DirectX, Metal, Vulkan #define GLM_CLIP_CONTROL_RH_BIT (1 << 3) // RIGHT_HANDED, For OpenGL, default in GLM #define GLM_CLIP_CONTROL_LH_ZO (GLM_CLIP_CONTROL_LH_BIT | GLM_CLIP_CONTROL_ZO_BIT) #define GLM_CLIP_CONTROL_LH_NO (GLM_CLIP_CONTROL_LH_BIT | GLM_CLIP_CONTROL_NO_BIT) #define GLM_CLIP_CONTROL_RH_ZO (GLM_CLIP_CONTROL_RH_BIT | GLM_CLIP_CONTROL_ZO_BIT) #define GLM_CLIP_CONTROL_RH_NO (GLM_CLIP_CONTROL_RH_BIT | GLM_CLIP_CONTROL_NO_BIT) #ifdef GLM_FORCE_DEPTH_ZERO_TO_ONE # ifdef GLM_FORCE_LEFT_HANDED # define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_LH_ZO # else # define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_RH_ZO # endif #else # ifdef GLM_FORCE_LEFT_HANDED # define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_LH_NO # else # define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_RH_NO # endif #endif /////////////////////////////////////////////////////////////////////////////////// // Qualifiers #if (GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)) # define GLM_DEPRECATED __declspec(deprecated) # define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef __declspec(align(alignment)) type name #elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG | GLM_COMPILER_INTEL) # define GLM_DEPRECATED __attribute__((__deprecated__)) # define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __attribute__((aligned(alignment))) #elif GLM_COMPILER & GLM_COMPILER_CUDA # define GLM_DEPRECATED # define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __align__(x) #else # define GLM_DEPRECATED # define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name #endif /////////////////////////////////////////////////////////////////////////////////// #ifdef GLM_FORCE_EXPLICIT_CTOR # define GLM_EXPLICIT explicit #else # define GLM_EXPLICIT #endif /////////////////////////////////////////////////////////////////////////////////// // SYCL #if GLM_COMPILER==GLM_COMPILER_SYCL #include #include namespace glm { namespace std { // Import SYCL's functions into the namespace glm::std to force their usages. // It's important to use the math built-in function (sin, exp, ...) // of SYCL instead the std ones. using namespace cl::sycl; /////////////////////////////////////////////////////////////////////////////// // Import some "harmless" std's stuffs used by glm into // the new glm::std namespace. template using numeric_limits = ::std::numeric_limits; using ::std::size_t; using ::std::uint8_t; using ::std::uint16_t; using ::std::uint32_t; using ::std::uint64_t; using ::std::int8_t; using ::std::int16_t; using ::std::int32_t; using ::std::int64_t; using ::std::make_unsigned; /////////////////////////////////////////////////////////////////////////////// } //namespace std } //namespace glm #endif /////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////// // Length type: all length functions returns a length_t type. // When GLM_FORCE_SIZE_T_LENGTH is defined, length_t is a typedef of size_t otherwise // length_t is a typedef of int like GLSL defines it. #define GLM_LENGTH_INT 1 #define GLM_LENGTH_SIZE_T 2 #ifdef GLM_FORCE_SIZE_T_LENGTH # define GLM_CONFIG_LENGTH_TYPE GLM_LENGTH_SIZE_T #else # define GLM_CONFIG_LENGTH_TYPE GLM_LENGTH_INT #endif namespace glm { using std::size_t; # if GLM_CONFIG_LENGTH_TYPE == GLM_LENGTH_SIZE_T typedef size_t length_t; # else typedef int length_t; # endif }//namespace glm /////////////////////////////////////////////////////////////////////////////////// // constexpr #if GLM_HAS_CONSTEXPR # define GLM_CONFIG_CONSTEXP GLM_ENABLE namespace glm { template constexpr std::size_t countof(T const (&)[N]) { return N; } }//namespace glm # define GLM_COUNTOF(arr) glm::countof(arr) #elif defined(_MSC_VER) # define GLM_CONFIG_CONSTEXP GLM_DISABLE # define GLM_COUNTOF(arr) _countof(arr) #else # define GLM_CONFIG_CONSTEXP GLM_DISABLE # define GLM_COUNTOF(arr) sizeof(arr) / sizeof(arr[0]) #endif /////////////////////////////////////////////////////////////////////////////////// // uint namespace glm{ namespace detail { template struct is_int { enum test {value = 0}; }; template<> struct is_int { enum test {value = ~0}; }; template<> struct is_int { enum test {value = ~0}; }; }//namespace detail typedef unsigned int uint; }//namespace glm /////////////////////////////////////////////////////////////////////////////////// // 64-bit int #if GLM_HAS_EXTENDED_INTEGER_TYPE # include #endif namespace glm{ namespace detail { # if GLM_HAS_EXTENDED_INTEGER_TYPE typedef std::uint64_t uint64; typedef std::int64_t int64; # elif (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) // C99 detected, 64 bit types available typedef uint64_t uint64; typedef int64_t int64; # elif GLM_COMPILER & GLM_COMPILER_VC typedef unsigned __int64 uint64; typedef signed __int64 int64; # elif GLM_COMPILER & GLM_COMPILER_GCC # pragma GCC diagnostic ignored "-Wlong-long" __extension__ typedef unsigned long long uint64; __extension__ typedef signed long long int64; # elif (GLM_COMPILER & GLM_COMPILER_CLANG) # pragma clang diagnostic ignored "-Wc++11-long-long" typedef unsigned long long uint64; typedef signed long long int64; # else//unknown compiler typedef unsigned long long uint64; typedef signed long long int64; # endif }//namespace detail }//namespace glm /////////////////////////////////////////////////////////////////////////////////// // make_unsigned #if GLM_HAS_MAKE_SIGNED # include namespace glm{ namespace detail { using std::make_unsigned; }//namespace detail }//namespace glm #else namespace glm{ namespace detail { template struct make_unsigned {}; template<> struct make_unsigned { typedef unsigned char type; }; template<> struct make_unsigned { typedef unsigned char type; }; template<> struct make_unsigned { typedef unsigned short type; }; template<> struct make_unsigned { typedef unsigned int type; }; template<> struct make_unsigned { typedef unsigned long type; }; template<> struct make_unsigned { typedef uint64 type; }; template<> struct make_unsigned { typedef unsigned char type; }; template<> struct make_unsigned { typedef unsigned short type; }; template<> struct make_unsigned { typedef unsigned int type; }; template<> struct make_unsigned { typedef unsigned long type; }; template<> struct make_unsigned { typedef uint64 type; }; }//namespace detail }//namespace glm #endif /////////////////////////////////////////////////////////////////////////////////// // Only use x, y, z, w as vector type components #ifdef GLM_FORCE_XYZW_ONLY # define GLM_CONFIG_XYZW_ONLY GLM_ENABLE #else # define GLM_CONFIG_XYZW_ONLY GLM_DISABLE #endif /////////////////////////////////////////////////////////////////////////////////// // Configure the use of defaulted initialized types #define GLM_CTOR_INIT_DISABLE 0 #define GLM_CTOR_INITIALIZER_LIST 1 #define GLM_CTOR_INITIALISATION 2 #if defined(GLM_FORCE_CTOR_INIT) && GLM_HAS_INITIALIZER_LISTS # define GLM_CONFIG_CTOR_INIT GLM_CTOR_INITIALIZER_LIST #elif defined(GLM_FORCE_CTOR_INIT) && !GLM_HAS_INITIALIZER_LISTS # define GLM_CONFIG_CTOR_INIT GLM_CTOR_INITIALISATION #else # define GLM_CONFIG_CTOR_INIT GLM_CTOR_INIT_DISABLE #endif /////////////////////////////////////////////////////////////////////////////////// // Use SIMD instruction sets #if GLM_HAS_ALIGNOF && (GLM_LANG & GLM_LANG_CXXMS_FLAG) && (GLM_ARCH & GLM_ARCH_SIMD_BIT) # define GLM_CONFIG_SIMD GLM_ENABLE #else # define GLM_CONFIG_SIMD GLM_DISABLE #endif /////////////////////////////////////////////////////////////////////////////////// // Configure the use of defaulted function #if GLM_HAS_DEFAULTED_FUNCTIONS && GLM_CONFIG_CTOR_INIT == GLM_CTOR_INIT_DISABLE # define GLM_CONFIG_DEFAULTED_FUNCTIONS GLM_ENABLE # define GLM_DEFAULT = default #else # define GLM_CONFIG_DEFAULTED_FUNCTIONS GLM_DISABLE # define GLM_DEFAULT #endif /////////////////////////////////////////////////////////////////////////////////// // Configure the use of aligned gentypes #ifdef GLM_FORCE_ALIGNED // Legacy define # define GLM_FORCE_DEFAULT_ALIGNED_GENTYPES #endif #ifdef GLM_FORCE_DEFAULT_ALIGNED_GENTYPES # define GLM_FORCE_ALIGNED_GENTYPES #endif #if GLM_HAS_ALIGNOF && (GLM_LANG & GLM_LANG_CXXMS_FLAG) && (defined(GLM_FORCE_ALIGNED_GENTYPES) || (GLM_CONFIG_SIMD == GLM_ENABLE)) # define GLM_CONFIG_ALIGNED_GENTYPES GLM_ENABLE #else # define GLM_CONFIG_ALIGNED_GENTYPES GLM_DISABLE #endif /////////////////////////////////////////////////////////////////////////////////// // Configure the use of anonymous structure as implementation detail #if ((GLM_CONFIG_SIMD == GLM_ENABLE) || (GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR) || (GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE)) # define GLM_CONFIG_ANONYMOUS_STRUCT GLM_ENABLE #else # define GLM_CONFIG_ANONYMOUS_STRUCT GLM_DISABLE #endif /////////////////////////////////////////////////////////////////////////////////// // Silent warnings #ifdef GLM_FORCE_SILENT_WARNINGS # define GLM_SILENT_WARNINGS GLM_ENABLE #else # define GLM_SILENT_WARNINGS GLM_DISABLE #endif /////////////////////////////////////////////////////////////////////////////////// // Precision #define GLM_HIGHP 1 #define GLM_MEDIUMP 2 #define GLM_LOWP 3 #if defined(GLM_FORCE_PRECISION_HIGHP_BOOL) || defined(GLM_PRECISION_HIGHP_BOOL) # define GLM_CONFIG_PRECISION_BOOL GLM_HIGHP #elif defined(GLM_FORCE_PRECISION_MEDIUMP_BOOL) || defined(GLM_PRECISION_MEDIUMP_BOOL) # define GLM_CONFIG_PRECISION_BOOL GLM_MEDIUMP #elif defined(GLM_FORCE_PRECISION_LOWP_BOOL) || defined(GLM_PRECISION_LOWP_BOOL) # define GLM_CONFIG_PRECISION_BOOL GLM_LOWP #else # define GLM_CONFIG_PRECISION_BOOL GLM_HIGHP #endif #if defined(GLM_FORCE_PRECISION_HIGHP_INT) || defined(GLM_PRECISION_HIGHP_INT) # define GLM_CONFIG_PRECISION_INT GLM_HIGHP #elif defined(GLM_FORCE_PRECISION_MEDIUMP_INT) || defined(GLM_PRECISION_MEDIUMP_INT) # define GLM_CONFIG_PRECISION_INT GLM_MEDIUMP #elif defined(GLM_FORCE_PRECISION_LOWP_INT) || defined(GLM_PRECISION_LOWP_INT) # define GLM_CONFIG_PRECISION_INT GLM_LOWP #else # define GLM_CONFIG_PRECISION_INT GLM_HIGHP #endif #if defined(GLM_FORCE_PRECISION_HIGHP_UINT) || defined(GLM_PRECISION_HIGHP_UINT) # define GLM_CONFIG_PRECISION_UINT GLM_HIGHP #elif defined(GLM_FORCE_PRECISION_MEDIUMP_UINT) || defined(GLM_PRECISION_MEDIUMP_UINT) # define GLM_CONFIG_PRECISION_UINT GLM_MEDIUMP #elif defined(GLM_FORCE_PRECISION_LOWP_UINT) || defined(GLM_PRECISION_LOWP_UINT) # define GLM_CONFIG_PRECISION_UINT GLM_LOWP #else # define GLM_CONFIG_PRECISION_UINT GLM_HIGHP #endif #if defined(GLM_FORCE_PRECISION_HIGHP_FLOAT) || defined(GLM_PRECISION_HIGHP_FLOAT) # define GLM_CONFIG_PRECISION_FLOAT GLM_HIGHP #elif defined(GLM_FORCE_PRECISION_MEDIUMP_FLOAT) || defined(GLM_PRECISION_MEDIUMP_FLOAT) # define GLM_CONFIG_PRECISION_FLOAT GLM_MEDIUMP #elif defined(GLM_FORCE_PRECISION_LOWP_FLOAT) || defined(GLM_PRECISION_LOWP_FLOAT) # define GLM_CONFIG_PRECISION_FLOAT GLM_LOWP #else # define GLM_CONFIG_PRECISION_FLOAT GLM_HIGHP #endif #if defined(GLM_FORCE_PRECISION_HIGHP_DOUBLE) || defined(GLM_PRECISION_HIGHP_DOUBLE) # define GLM_CONFIG_PRECISION_DOUBLE GLM_HIGHP #elif defined(GLM_FORCE_PRECISION_MEDIUMP_DOUBLE) || defined(GLM_PRECISION_MEDIUMP_DOUBLE) # define GLM_CONFIG_PRECISION_DOUBLE GLM_MEDIUMP #elif defined(GLM_FORCE_PRECISION_LOWP_DOUBLE) || defined(GLM_PRECISION_LOWP_DOUBLE) # define GLM_CONFIG_PRECISION_DOUBLE GLM_LOWP #else # define GLM_CONFIG_PRECISION_DOUBLE GLM_HIGHP #endif /////////////////////////////////////////////////////////////////////////////////// // Check inclusions of different versions of GLM #elif ((GLM_SETUP_INCLUDED != GLM_VERSION) && !defined(GLM_FORCE_IGNORE_VERSION)) # error "GLM error: A different version of GLM is already included. Define GLM_FORCE_IGNORE_VERSION before including GLM headers to ignore this error." #elif GLM_SETUP_INCLUDED == GLM_VERSION /////////////////////////////////////////////////////////////////////////////////// // Messages #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_MESSAGE_DISPLAYED) # define GLM_MESSAGE_DISPLAYED # define GLM_STR_HELPER(x) #x # define GLM_STR(x) GLM_STR_HELPER(x) // Report GLM version # pragma message (GLM_STR(GLM_VERSION_MESSAGE)) // Report C++ language # if (GLM_LANG & GLM_LANG_CXX2A_FLAG) && (GLM_LANG & GLM_LANG_EXT) # pragma message("GLM: C++ 2A with extensions") # elif (GLM_LANG & GLM_LANG_CXX2A_FLAG) # pragma message("GLM: C++ 2A") # elif (GLM_LANG & GLM_LANG_CXX17_FLAG) && (GLM_LANG & GLM_LANG_EXT) # pragma message("GLM: C++ 17 with extensions") # elif (GLM_LANG & GLM_LANG_CXX17_FLAG) # pragma message("GLM: C++ 17") # elif (GLM_LANG & GLM_LANG_CXX14_FLAG) && (GLM_LANG & GLM_LANG_EXT) # pragma message("GLM: C++ 14 with extensions") # elif (GLM_LANG & GLM_LANG_CXX14_FLAG) # pragma message("GLM: C++ 14") # elif (GLM_LANG & GLM_LANG_CXX11_FLAG) && (GLM_LANG & GLM_LANG_EXT) # pragma message("GLM: C++ 11 with extensions") # elif (GLM_LANG & GLM_LANG_CXX11_FLAG) # pragma message("GLM: C++ 11") # elif (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_LANG & GLM_LANG_EXT) # pragma message("GLM: C++ 0x with extensions") # elif (GLM_LANG & GLM_LANG_CXX0X_FLAG) # pragma message("GLM: C++ 0x") # elif (GLM_LANG & GLM_LANG_CXX03_FLAG) && (GLM_LANG & GLM_LANG_EXT) # pragma message("GLM: C++ 03 with extensions") # elif (GLM_LANG & GLM_LANG_CXX03_FLAG) # pragma message("GLM: C++ 03") # elif (GLM_LANG & GLM_LANG_CXX98_FLAG) && (GLM_LANG & GLM_LANG_EXT) # pragma message("GLM: C++ 98 with extensions") # elif (GLM_LANG & GLM_LANG_CXX98_FLAG) # pragma message("GLM: C++ 98") # else # pragma message("GLM: C++ language undetected") # endif//GLM_LANG // Report compiler detection # if GLM_COMPILER & GLM_COMPILER_CUDA # pragma message("GLM: CUDA compiler detected") # elif GLM_COMPILER & GLM_COMPILER_VC # pragma message("GLM: Visual C++ compiler detected") # elif GLM_COMPILER & GLM_COMPILER_CLANG # pragma message("GLM: Clang compiler detected") # elif GLM_COMPILER & GLM_COMPILER_INTEL # pragma message("GLM: Intel Compiler detected") # elif GLM_COMPILER & GLM_COMPILER_GCC # pragma message("GLM: GCC compiler detected") # else # pragma message("GLM: Compiler not detected") # endif // Report build target # if (GLM_ARCH & GLM_ARCH_AVX2_BIT) && (GLM_MODEL == GLM_MODEL_64) # pragma message("GLM: x86 64 bits with AVX2 instruction set build target") # elif (GLM_ARCH & GLM_ARCH_AVX2_BIT) && (GLM_MODEL == GLM_MODEL_32) # pragma message("GLM: x86 32 bits with AVX2 instruction set build target") # elif (GLM_ARCH & GLM_ARCH_AVX_BIT) && (GLM_MODEL == GLM_MODEL_64) # pragma message("GLM: x86 64 bits with AVX instruction set build target") # elif (GLM_ARCH & GLM_ARCH_AVX_BIT) && (GLM_MODEL == GLM_MODEL_32) # pragma message("GLM: x86 32 bits with AVX instruction set build target") # elif (GLM_ARCH & GLM_ARCH_SSE42_BIT) && (GLM_MODEL == GLM_MODEL_64) # pragma message("GLM: x86 64 bits with SSE4.2 instruction set build target") # elif (GLM_ARCH & GLM_ARCH_SSE42_BIT) && (GLM_MODEL == GLM_MODEL_32) # pragma message("GLM: x86 32 bits with SSE4.2 instruction set build target") # elif (GLM_ARCH & GLM_ARCH_SSE41_BIT) && (GLM_MODEL == GLM_MODEL_64) # pragma message("GLM: x86 64 bits with SSE4.1 instruction set build target") # elif (GLM_ARCH & GLM_ARCH_SSE41_BIT) && (GLM_MODEL == GLM_MODEL_32) # pragma message("GLM: x86 32 bits with SSE4.1 instruction set build target") # elif (GLM_ARCH & GLM_ARCH_SSSE3_BIT) && (GLM_MODEL == GLM_MODEL_64) # pragma message("GLM: x86 64 bits with SSSE3 instruction set build target") # elif (GLM_ARCH & GLM_ARCH_SSSE3_BIT) && (GLM_MODEL == GLM_MODEL_32) # pragma message("GLM: x86 32 bits with SSSE3 instruction set build target") # elif (GLM_ARCH & GLM_ARCH_SSE3_BIT) && (GLM_MODEL == GLM_MODEL_64) # pragma message("GLM: x86 64 bits with SSE3 instruction set build target") # elif (GLM_ARCH & GLM_ARCH_SSE3_BIT) && (GLM_MODEL == GLM_MODEL_32) # pragma message("GLM: x86 32 bits with SSE3 instruction set build target") # elif (GLM_ARCH & GLM_ARCH_SSE2_BIT) && (GLM_MODEL == GLM_MODEL_64) # pragma message("GLM: x86 64 bits with SSE2 instruction set build target") # elif (GLM_ARCH & GLM_ARCH_SSE2_BIT) && (GLM_MODEL == GLM_MODEL_32) # pragma message("GLM: x86 32 bits with SSE2 instruction set build target") # elif (GLM_ARCH & GLM_ARCH_X86_BIT) && (GLM_MODEL == GLM_MODEL_64) # pragma message("GLM: x86 64 bits build target") # elif (GLM_ARCH & GLM_ARCH_X86_BIT) && (GLM_MODEL == GLM_MODEL_32) # pragma message("GLM: x86 32 bits build target") # elif (GLM_ARCH & GLM_ARCH_NEON_BIT) && (GLM_MODEL == GLM_MODEL_64) # pragma message("GLM: ARM 64 bits with Neon instruction set build target") # elif (GLM_ARCH & GLM_ARCH_NEON_BIT) && (GLM_MODEL == GLM_MODEL_32) # pragma message("GLM: ARM 32 bits with Neon instruction set build target") # elif (GLM_ARCH & GLM_ARCH_ARM_BIT) && (GLM_MODEL == GLM_MODEL_64) # pragma message("GLM: ARM 64 bits build target") # elif (GLM_ARCH & GLM_ARCH_ARM_BIT) && (GLM_MODEL == GLM_MODEL_32) # pragma message("GLM: ARM 32 bits build target") # elif (GLM_ARCH & GLM_ARCH_MIPS_BIT) && (GLM_MODEL == GLM_MODEL_64) # pragma message("GLM: MIPS 64 bits build target") # elif (GLM_ARCH & GLM_ARCH_MIPS_BIT) && (GLM_MODEL == GLM_MODEL_32) # pragma message("GLM: MIPS 32 bits build target") # elif (GLM_ARCH & GLM_ARCH_PPC_BIT) && (GLM_MODEL == GLM_MODEL_64) # pragma message("GLM: PowerPC 64 bits build target") # elif (GLM_ARCH & GLM_ARCH_PPC_BIT) && (GLM_MODEL == GLM_MODEL_32) # pragma message("GLM: PowerPC 32 bits build target") # else # pragma message("GLM: Unknown build target") # endif//GLM_ARCH // Report platform name # if(GLM_PLATFORM & GLM_PLATFORM_QNXNTO) # pragma message("GLM: QNX platform detected") //# elif(GLM_PLATFORM & GLM_PLATFORM_IOS) //# pragma message("GLM: iOS platform detected") # elif(GLM_PLATFORM & GLM_PLATFORM_APPLE) # pragma message("GLM: Apple platform detected") # elif(GLM_PLATFORM & GLM_PLATFORM_WINCE) # pragma message("GLM: WinCE platform detected") # elif(GLM_PLATFORM & GLM_PLATFORM_WINDOWS) # pragma message("GLM: Windows platform detected") # elif(GLM_PLATFORM & GLM_PLATFORM_CHROME_NACL) # pragma message("GLM: Native Client detected") # elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) # pragma message("GLM: Android platform detected") # elif(GLM_PLATFORM & GLM_PLATFORM_LINUX) # pragma message("GLM: Linux platform detected") # elif(GLM_PLATFORM & GLM_PLATFORM_UNIX) # pragma message("GLM: UNIX platform detected") # elif(GLM_PLATFORM & GLM_PLATFORM_UNKNOWN) # pragma message("GLM: platform unknown") # else # pragma message("GLM: platform not detected") # endif // Report whether only xyzw component are used # if defined GLM_FORCE_XYZW_ONLY # pragma message("GLM: GLM_FORCE_XYZW_ONLY is defined. Only x, y, z and w component are available in vector type. This define disables swizzle operators and SIMD instruction sets.") # endif // Report swizzle operator support # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR # pragma message("GLM: GLM_FORCE_SWIZZLE is defined, swizzling operators enabled.") # elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION # pragma message("GLM: GLM_FORCE_SWIZZLE is defined, swizzling functions enabled. Enable compiler C++ language extensions to enable swizzle operators.") # else # pragma message("GLM: GLM_FORCE_SWIZZLE is undefined. swizzling functions or operators are disabled.") # endif // Report .length() type # if GLM_CONFIG_LENGTH_TYPE == GLM_LENGTH_SIZE_T # pragma message("GLM: GLM_FORCE_SIZE_T_LENGTH is defined. .length() returns a glm::length_t, a typedef of std::size_t.") # else # pragma message("GLM: GLM_FORCE_SIZE_T_LENGTH is undefined. .length() returns a glm::length_t, a typedef of int following GLSL.") # endif # if GLM_CONFIG_UNRESTRICTED_GENTYPE == GLM_ENABLE # pragma message("GLM: GLM_FORCE_UNRESTRICTED_GENTYPE is defined. Removes GLSL restrictions on valid function genTypes.") # else # pragma message("GLM: GLM_FORCE_UNRESTRICTED_GENTYPE is undefined. Follows strictly GLSL on valid function genTypes.") # endif # if GLM_SILENT_WARNINGS == GLM_ENABLE # pragma message("GLM: GLM_FORCE_SILENT_WARNINGS is defined. Ignores C++ warnings from using C++ language extensions.") # else # pragma message("GLM: GLM_FORCE_SILENT_WARNINGS is undefined. Shows C++ warnings from using C++ language extensions.") # endif # ifdef GLM_FORCE_SINGLE_ONLY # pragma message("GLM: GLM_FORCE_SINGLE_ONLY is defined. Using only single precision floating-point types.") # endif # if defined(GLM_FORCE_ALIGNED_GENTYPES) && (GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE) # undef GLM_FORCE_ALIGNED_GENTYPES # pragma message("GLM: GLM_FORCE_ALIGNED_GENTYPES is defined, allowing aligned types. This prevents the use of C++ constexpr.") # elif defined(GLM_FORCE_ALIGNED_GENTYPES) && (GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE) # undef GLM_FORCE_ALIGNED_GENTYPES # pragma message("GLM: GLM_FORCE_ALIGNED_GENTYPES is defined but is disabled. It requires C++11 and language extensions.") # endif # if defined(GLM_FORCE_DEFAULT_ALIGNED_GENTYPES) # if GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE # undef GLM_FORCE_DEFAULT_ALIGNED_GENTYPES # pragma message("GLM: GLM_FORCE_DEFAULT_ALIGNED_GENTYPES is defined but is disabled. It requires C++11 and language extensions.") # elif GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE # pragma message("GLM: GLM_FORCE_DEFAULT_ALIGNED_GENTYPES is defined. All gentypes (e.g. vec3) will be aligned and padded by default.") # endif # endif # if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT # pragma message("GLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is defined. Using zero to one depth clip space.") # else # pragma message("GLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is undefined. Using negative one to one depth clip space.") # endif # if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT # pragma message("GLM: GLM_FORCE_LEFT_HANDED is defined. Using left handed coordinate system.") # else # pragma message("GLM: GLM_FORCE_LEFT_HANDED is undefined. Using right handed coordinate system.") # endif #endif//GLM_MESSAGES #endif//GLM_SETUP_INCLUDED ================================================ FILE: libraries/glm/detail/type_float.hpp ================================================ #pragma once #include "setup.hpp" #if GLM_COMPILER == GLM_COMPILER_VC12 # pragma warning(push) # pragma warning(disable: 4512) // assignment operator could not be generated #endif namespace glm{ namespace detail { template union float_t {}; // https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/ template <> union float_t { typedef int int_type; typedef float float_type; GLM_CONSTEXPR float_t(float_type Num = 0.0f) : f(Num) {} GLM_CONSTEXPR float_t& operator=(float_t const& x) { f = x.f; return *this; } // Portable extraction of components. GLM_CONSTEXPR bool negative() const { return i < 0; } GLM_CONSTEXPR int_type mantissa() const { return i & ((1 << 23) - 1); } GLM_CONSTEXPR int_type exponent() const { return (i >> 23) & ((1 << 8) - 1); } int_type i; float_type f; }; template <> union float_t { typedef detail::int64 int_type; typedef double float_type; GLM_CONSTEXPR float_t(float_type Num = static_cast(0)) : f(Num) {} GLM_CONSTEXPR float_t& operator=(float_t const& x) { f = x.f; return *this; } // Portable extraction of components. GLM_CONSTEXPR bool negative() const { return i < 0; } GLM_CONSTEXPR int_type mantissa() const { return i & ((int_type(1) << 52) - 1); } GLM_CONSTEXPR int_type exponent() const { return (i >> 52) & ((int_type(1) << 11) - 1); } int_type i; float_type f; }; }//namespace detail }//namespace glm #if GLM_COMPILER == GLM_COMPILER_VC12 # pragma warning(pop) #endif ================================================ FILE: libraries/glm/detail/type_half.hpp ================================================ #pragma once #include "setup.hpp" namespace glm{ namespace detail { typedef short hdata; GLM_FUNC_DECL float toFloat32(hdata value); GLM_FUNC_DECL hdata toFloat16(float const& value); }//namespace detail }//namespace glm #include "type_half.inl" ================================================ FILE: libraries/glm/detail/type_half.inl ================================================ namespace glm{ namespace detail { GLM_FUNC_QUALIFIER float overflow() { volatile float f = 1e10; for(int i = 0; i < 10; ++i) f = f * f; // this will overflow before the for loop terminates return f; } union uif32 { GLM_FUNC_QUALIFIER uif32() : i(0) {} GLM_FUNC_QUALIFIER uif32(float f_) : f(f_) {} GLM_FUNC_QUALIFIER uif32(unsigned int i_) : i(i_) {} float f; unsigned int i; }; GLM_FUNC_QUALIFIER float toFloat32(hdata value) { int s = (value >> 15) & 0x00000001; int e = (value >> 10) & 0x0000001f; int m = value & 0x000003ff; if(e == 0) { if(m == 0) { // // Plus or minus zero // detail::uif32 result; result.i = static_cast(s << 31); return result.f; } else { // // Denormalized number -- renormalize it // while(!(m & 0x00000400)) { m <<= 1; e -= 1; } e += 1; m &= ~0x00000400; } } else if(e == 31) { if(m == 0) { // // Positive or negative infinity // uif32 result; result.i = static_cast((s << 31) | 0x7f800000); return result.f; } else { // // Nan -- preserve sign and significand bits // uif32 result; result.i = static_cast((s << 31) | 0x7f800000 | (m << 13)); return result.f; } } // // Normalized number // e = e + (127 - 15); m = m << 13; // // Assemble s, e and m. // uif32 Result; Result.i = static_cast((s << 31) | (e << 23) | m); return Result.f; } GLM_FUNC_QUALIFIER hdata toFloat16(float const& f) { uif32 Entry; Entry.f = f; int i = static_cast(Entry.i); // // Our floating point number, f, is represented by the bit // pattern in integer i. Disassemble that bit pattern into // the sign, s, the exponent, e, and the significand, m. // Shift s into the position where it will go in the // resulting half number. // Adjust e, accounting for the different exponent bias // of float and half (127 versus 15). // int s = (i >> 16) & 0x00008000; int e = ((i >> 23) & 0x000000ff) - (127 - 15); int m = i & 0x007fffff; // // Now reassemble s, e and m into a half: // if(e <= 0) { if(e < -10) { // // E is less than -10. The absolute value of f is // less than half_MIN (f may be a small normalized // float, a denormalized float or a zero). // // We convert f to a half zero. // return hdata(s); } // // E is between -10 and 0. F is a normalized float, // whose magnitude is less than __half_NRM_MIN. // // We convert f to a denormalized half. // m = (m | 0x00800000) >> (1 - e); // // Round to nearest, round "0.5" up. // // Rounding may cause the significand to overflow and make // our number normalized. Because of the way a half's bits // are laid out, we don't have to treat this case separately; // the code below will handle it correctly. // if(m & 0x00001000) m += 0x00002000; // // Assemble the half from s, e (zero) and m. // return hdata(s | (m >> 13)); } else if(e == 0xff - (127 - 15)) { if(m == 0) { // // F is an infinity; convert f to a half // infinity with the same sign as f. // return hdata(s | 0x7c00); } else { // // F is a NAN; we produce a half NAN that preserves // the sign bit and the 10 leftmost bits of the // significand of f, with one exception: If the 10 // leftmost bits are all zero, the NAN would turn // into an infinity, so we have to set at least one // bit in the significand. // m >>= 13; return hdata(s | 0x7c00 | m | (m == 0)); } } else { // // E is greater than zero. F is a normalized float. // We try to convert f to a normalized half. // // // Round to nearest, round "0.5" up // if(m & 0x00001000) { m += 0x00002000; if(m & 0x00800000) { m = 0; // overflow in significand, e += 1; // adjust exponent } } // // Handle exponent overflow // if (e > 30) { overflow(); // Cause a hardware floating point overflow; return hdata(s | 0x7c00); // if this returns, the half becomes an } // infinity with the same sign as f. // // Assemble the half from s, e and m. // return hdata(s | (e << 10) | (m >> 13)); } } }//namespace detail }//namespace glm ================================================ FILE: libraries/glm/detail/type_mat2x2.hpp ================================================ /// @ref core /// @file glm/detail/type_mat2x2.hpp #pragma once #include "type_vec2.hpp" #include #include namespace glm { template struct mat<2, 2, T, Q> { typedef vec<2, T, Q> col_type; typedef vec<2, T, Q> row_type; typedef mat<2, 2, T, Q> type; typedef mat<2, 2, T, Q> transpose_type; typedef T value_type; private: col_type value[2]; public: // -- Accesses -- typedef length_t length_type; GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 2; } GLM_FUNC_DECL col_type & operator[](length_type i); GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; // -- Constructors -- GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; template GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<2, 2, T, P> const& m); GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); GLM_FUNC_DECL GLM_CONSTEXPR mat( T const& x1, T const& y1, T const& x2, T const& y2); GLM_FUNC_DECL GLM_CONSTEXPR mat( col_type const& v1, col_type const& v2); // -- Conversions -- template GLM_FUNC_DECL GLM_CONSTEXPR mat( U const& x1, V const& y1, M const& x2, N const& y2); template GLM_FUNC_DECL GLM_CONSTEXPR mat( vec<2, U, Q> const& v1, vec<2, V, Q> const& v2); // -- Matrix conversions -- template GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, U, P> const& m); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); // -- Unary arithmetic operators -- template GLM_FUNC_DECL mat<2, 2, T, Q> & operator=(mat<2, 2, U, Q> const& m); template GLM_FUNC_DECL mat<2, 2, T, Q> & operator+=(U s); template GLM_FUNC_DECL mat<2, 2, T, Q> & operator+=(mat<2, 2, U, Q> const& m); template GLM_FUNC_DECL mat<2, 2, T, Q> & operator-=(U s); template GLM_FUNC_DECL mat<2, 2, T, Q> & operator-=(mat<2, 2, U, Q> const& m); template GLM_FUNC_DECL mat<2, 2, T, Q> & operator*=(U s); template GLM_FUNC_DECL mat<2, 2, T, Q> & operator*=(mat<2, 2, U, Q> const& m); template GLM_FUNC_DECL mat<2, 2, T, Q> & operator/=(U s); template GLM_FUNC_DECL mat<2, 2, T, Q> & operator/=(mat<2, 2, U, Q> const& m); // -- Increment and decrement operators -- GLM_FUNC_DECL mat<2, 2, T, Q> & operator++ (); GLM_FUNC_DECL mat<2, 2, T, Q> & operator-- (); GLM_FUNC_DECL mat<2, 2, T, Q> operator++(int); GLM_FUNC_DECL mat<2, 2, T, Q> operator--(int); }; // -- Unary operators -- template GLM_FUNC_DECL mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m); template GLM_FUNC_DECL mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m); // -- Binary operators -- template GLM_FUNC_DECL mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m, T scalar); template GLM_FUNC_DECL mat<2, 2, T, Q> operator+(T scalar, mat<2, 2, T, Q> const& m); template GLM_FUNC_DECL mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); template GLM_FUNC_DECL mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m, T scalar); template GLM_FUNC_DECL mat<2, 2, T, Q> operator-(T scalar, mat<2, 2, T, Q> const& m); template GLM_FUNC_DECL mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); template GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m, T scalar); template GLM_FUNC_DECL mat<2, 2, T, Q> operator*(T scalar, mat<2, 2, T, Q> const& m); template GLM_FUNC_DECL typename mat<2, 2, T, Q>::col_type operator*(mat<2, 2, T, Q> const& m, typename mat<2, 2, T, Q>::row_type const& v); template GLM_FUNC_DECL typename mat<2, 2, T, Q>::row_type operator*(typename mat<2, 2, T, Q>::col_type const& v, mat<2, 2, T, Q> const& m); template GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); template GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); template GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); template GLM_FUNC_DECL mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m, T scalar); template GLM_FUNC_DECL mat<2, 2, T, Q> operator/(T scalar, mat<2, 2, T, Q> const& m); template GLM_FUNC_DECL typename mat<2, 2, T, Q>::col_type operator/(mat<2, 2, T, Q> const& m, typename mat<2, 2, T, Q>::row_type const& v); template GLM_FUNC_DECL typename mat<2, 2, T, Q>::row_type operator/(typename mat<2, 2, T, Q>::col_type const& v, mat<2, 2, T, Q> const& m); template GLM_FUNC_DECL mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); // -- Boolean operators -- template GLM_FUNC_DECL bool operator==(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); template GLM_FUNC_DECL bool operator!=(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); } //namespace glm #ifndef GLM_EXTERNAL_TEMPLATE #include "type_mat2x2.inl" #endif ================================================ FILE: libraries/glm/detail/type_mat2x2.inl ================================================ #include "../matrix.hpp" namespace glm { // -- Constructors -- # if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat() # if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST : value{col_type(1, 0), col_type(0, 1)} # endif { # if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION this->value[0] = col_type(1, 0); this->value[1] = col_type(0, 1); # endif } # endif template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 2, T, P> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{m[0], m[1]} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = m[0]; this->value[1] = m[1]; # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(T scalar) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(scalar, 0), col_type(0, scalar)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(scalar, 0); this->value[1] = col_type(0, scalar); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat ( T const& x0, T const& y0, T const& x1, T const& y1 ) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(x0, y0), col_type(x1, y1)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(x0, y0); this->value[1] = col_type(x1, y1); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(col_type const& v0, col_type const& v1) # if GLM_HAS_INITIALIZER_LISTS : value{v0, v1} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = v0; this->value[1] = v1; # endif } // -- Conversion constructors -- template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat ( X1 const& x1, Y1 const& y1, X2 const& x2, Y2 const& y2 ) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(static_cast(x1), value_type(y1)), col_type(static_cast(x2), value_type(y2)) } # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(static_cast(x1), value_type(y1)); this->value[1] = col_type(static_cast(x2), value_type(y2)); # endif } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(vec<2, V1, Q> const& v1, vec<2, V2, Q> const& v2) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(v1), col_type(v2)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(v1); this->value[1] = col_type(v2); # endif } // -- mat2x2 matrix conversions -- template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 2, U, P> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<3, 3, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<4, 4, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 3, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<3, 2, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 4, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<4, 2, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<3, 4, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<4, 3, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); # endif } // -- Accesses -- template GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::col_type& mat<2, 2, T, Q>::operator[](typename mat<2, 2, T, Q>::length_type i) { assert(i < this->length()); return this->value[i]; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<2, 2, T, Q>::col_type const& mat<2, 2, T, Q>::operator[](typename mat<2, 2, T, Q>::length_type i) const { assert(i < this->length()); return this->value[i]; } // -- Unary updatable operators -- template template GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator=(mat<2, 2, U, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; return *this; } template template GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator+=(U scalar) { this->value[0] += scalar; this->value[1] += scalar; return *this; } template template GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator+=(mat<2, 2, U, Q> const& m) { this->value[0] += m[0]; this->value[1] += m[1]; return *this; } template template GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator-=(U scalar) { this->value[0] -= scalar; this->value[1] -= scalar; return *this; } template template GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator-=(mat<2, 2, U, Q> const& m) { this->value[0] -= m[0]; this->value[1] -= m[1]; return *this; } template template GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator*=(U scalar) { this->value[0] *= scalar; this->value[1] *= scalar; return *this; } template template GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator*=(mat<2, 2, U, Q> const& m) { return (*this = *this * m); } template template GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator/=(U scalar) { this->value[0] /= scalar; this->value[1] /= scalar; return *this; } template template GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator/=(mat<2, 2, U, Q> const& m) { return *this *= inverse(m); } // -- Increment and decrement operators -- template GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator++() { ++this->value[0]; ++this->value[1]; return *this; } template GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator--() { --this->value[0]; --this->value[1]; return *this; } template GLM_FUNC_QUALIFIER mat<2, 2, T, Q> mat<2, 2, T, Q>::operator++(int) { mat<2, 2, T, Q> Result(*this); ++*this; return Result; } template GLM_FUNC_QUALIFIER mat<2, 2, T, Q> mat<2, 2, T, Q>::operator--(int) { mat<2, 2, T, Q> Result(*this); --*this; return Result; } // -- Unary arithmetic operators -- template GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m) { return m; } template GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m) { return mat<2, 2, T, Q>( -m[0], -m[1]); } // -- Binary arithmetic operators -- template GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m, T scalar) { return mat<2, 2, T, Q>( m[0] + scalar, m[1] + scalar); } template GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(T scalar, mat<2, 2, T, Q> const& m) { return mat<2, 2, T, Q>( m[0] + scalar, m[1] + scalar); } template GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) { return mat<2, 2, T, Q>( m1[0] + m2[0], m1[1] + m2[1]); } template GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m, T scalar) { return mat<2, 2, T, Q>( m[0] - scalar, m[1] - scalar); } template GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(T scalar, mat<2, 2, T, Q> const& m) { return mat<2, 2, T, Q>( scalar - m[0], scalar - m[1]); } template GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) { return mat<2, 2, T, Q>( m1[0] - m2[0], m1[1] - m2[1]); } template GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m, T scalar) { return mat<2, 2, T, Q>( m[0] * scalar, m[1] * scalar); } template GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(T scalar, mat<2, 2, T, Q> const& m) { return mat<2, 2, T, Q>( m[0] * scalar, m[1] * scalar); } template GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::col_type operator* ( mat<2, 2, T, Q> const& m, typename mat<2, 2, T, Q>::row_type const& v ) { return vec<2, T, Q>( m[0][0] * v.x + m[1][0] * v.y, m[0][1] * v.x + m[1][1] * v.y); } template GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::row_type operator* ( typename mat<2, 2, T, Q>::col_type const& v, mat<2, 2, T, Q> const& m ) { return vec<2, T, Q>( v.x * m[0][0] + v.y * m[0][1], v.x * m[1][0] + v.y * m[1][1]); } template GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) { return mat<2, 2, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1]); } template GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) { return mat<3, 2, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1], m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1], m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1]); } template GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) { return mat<4, 2, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1], m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1], m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1], m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1], m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1]); } template GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m, T scalar) { return mat<2, 2, T, Q>( m[0] / scalar, m[1] / scalar); } template GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator/(T scalar, mat<2, 2, T, Q> const& m) { return mat<2, 2, T, Q>( scalar / m[0], scalar / m[1]); } template GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::col_type operator/(mat<2, 2, T, Q> const& m, typename mat<2, 2, T, Q>::row_type const& v) { return inverse(m) * v; } template GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::row_type operator/(typename mat<2, 2, T, Q>::col_type const& v, mat<2, 2, T, Q> const& m) { return v * inverse(m); } template GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) { mat<2, 2, T, Q> m1_copy(m1); return m1_copy /= m2; } // -- Boolean operators -- template GLM_FUNC_QUALIFIER bool operator==(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) { return (m1[0] == m2[0]) && (m1[1] == m2[1]); } template GLM_FUNC_QUALIFIER bool operator!=(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) { return (m1[0] != m2[0]) || (m1[1] != m2[1]); } } //namespace glm ================================================ FILE: libraries/glm/detail/type_mat2x3.hpp ================================================ /// @ref core /// @file glm/detail/type_mat2x3.hpp #pragma once #include "type_vec2.hpp" #include "type_vec3.hpp" #include #include namespace glm { template struct mat<2, 3, T, Q> { typedef vec<3, T, Q> col_type; typedef vec<2, T, Q> row_type; typedef mat<2, 3, T, Q> type; typedef mat<3, 2, T, Q> transpose_type; typedef T value_type; private: col_type value[2]; public: // -- Accesses -- typedef length_t length_type; GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 2; } GLM_FUNC_DECL col_type & operator[](length_type i); GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; // -- Constructors -- GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; template GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<2, 3, T, P> const& m); GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); GLM_FUNC_DECL GLM_CONSTEXPR mat( T x0, T y0, T z0, T x1, T y1, T z1); GLM_FUNC_DECL GLM_CONSTEXPR mat( col_type const& v0, col_type const& v1); // -- Conversions -- template GLM_FUNC_DECL GLM_CONSTEXPR mat( X1 x1, Y1 y1, Z1 z1, X2 x2, Y2 y2, Z2 z2); template GLM_FUNC_DECL GLM_CONSTEXPR mat( vec<3, U, Q> const& v1, vec<3, V, Q> const& v2); // -- Matrix conversions -- template GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, U, P> const& m); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); // -- Unary arithmetic operators -- template GLM_FUNC_DECL mat<2, 3, T, Q> & operator=(mat<2, 3, U, Q> const& m); template GLM_FUNC_DECL mat<2, 3, T, Q> & operator+=(U s); template GLM_FUNC_DECL mat<2, 3, T, Q> & operator+=(mat<2, 3, U, Q> const& m); template GLM_FUNC_DECL mat<2, 3, T, Q> & operator-=(U s); template GLM_FUNC_DECL mat<2, 3, T, Q> & operator-=(mat<2, 3, U, Q> const& m); template GLM_FUNC_DECL mat<2, 3, T, Q> & operator*=(U s); template GLM_FUNC_DECL mat<2, 3, T, Q> & operator/=(U s); // -- Increment and decrement operators -- GLM_FUNC_DECL mat<2, 3, T, Q> & operator++ (); GLM_FUNC_DECL mat<2, 3, T, Q> & operator-- (); GLM_FUNC_DECL mat<2, 3, T, Q> operator++(int); GLM_FUNC_DECL mat<2, 3, T, Q> operator--(int); }; // -- Unary operators -- template GLM_FUNC_DECL mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m); template GLM_FUNC_DECL mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m); // -- Binary operators -- template GLM_FUNC_DECL mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m, T scalar); template GLM_FUNC_DECL mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); template GLM_FUNC_DECL mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m, T scalar); template GLM_FUNC_DECL mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); template GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m, T scalar); template GLM_FUNC_DECL mat<2, 3, T, Q> operator*(T scalar, mat<2, 3, T, Q> const& m); template GLM_FUNC_DECL typename mat<2, 3, T, Q>::col_type operator*(mat<2, 3, T, Q> const& m, typename mat<2, 3, T, Q>::row_type const& v); template GLM_FUNC_DECL typename mat<2, 3, T, Q>::row_type operator*(typename mat<2, 3, T, Q>::col_type const& v, mat<2, 3, T, Q> const& m); template GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<2, 2, T, Q> const& m2); template GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<3, 2, T, Q> const& m2); template GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<4, 2, T, Q> const& m2); template GLM_FUNC_DECL mat<2, 3, T, Q> operator/(mat<2, 3, T, Q> const& m, T scalar); template GLM_FUNC_DECL mat<2, 3, T, Q> operator/(T scalar, mat<2, 3, T, Q> const& m); // -- Boolean operators -- template GLM_FUNC_DECL bool operator==(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); template GLM_FUNC_DECL bool operator!=(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); }//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE #include "type_mat2x3.inl" #endif ================================================ FILE: libraries/glm/detail/type_mat2x3.inl ================================================ namespace glm { // -- Constructors -- # if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat() # if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST : value{col_type(1, 0, 0), col_type(0, 1, 0)} # endif { # if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION this->value[0] = col_type(1, 0, 0); this->value[1] = col_type(0, 1, 0); # endif } # endif template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 3, T, P> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{m.value[0], m.value[1]} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = m.value[0]; this->value[1] = m.value[1]; # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(T scalar) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(scalar, 0, 0), col_type(0, scalar, 0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(scalar, 0, 0); this->value[1] = col_type(0, scalar, 0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat ( T x0, T y0, T z0, T x1, T y1, T z1 ) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(x0, y0, z0), col_type(x1, y1, z1)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(x0, y0, z0); this->value[1] = col_type(x1, y1, z1); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(col_type const& v0, col_type const& v1) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(v0), col_type(v1)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(v0); this->value[1] = col_type(v1); # endif } // -- Conversion constructors -- template template< typename X1, typename Y1, typename Z1, typename X2, typename Y2, typename Z2> GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat ( X1 x1, Y1 y1, Z1 z1, X2 x2, Y2 y2, Z2 z2 ) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(x1, y1, z1), col_type(x2, y2, z2)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(x1, y1, z1); this->value[1] = col_type(x2, y2, z2); # endif } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(vec<3, V1, Q> const& v1, vec<3, V2, Q> const& v2) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(v1), col_type(v2)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(v1); this->value[1] = col_type(v2); # endif } // -- Matrix conversions -- template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 3, U, P> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 2, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0], 0), col_type(m[1], 0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<3, 3, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<4, 4, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 4, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<3, 2, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0], 0), col_type(m[1], 0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<3, 4, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<4, 2, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0], 0), col_type(m[1], 0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<4, 3, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); # endif } // -- Accesses -- template GLM_FUNC_QUALIFIER typename mat<2, 3, T, Q>::col_type & mat<2, 3, T, Q>::operator[](typename mat<2, 3, T, Q>::length_type i) { assert(i < this->length()); return this->value[i]; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<2, 3, T, Q>::col_type const& mat<2, 3, T, Q>::operator[](typename mat<2, 3, T, Q>::length_type i) const { assert(i < this->length()); return this->value[i]; } // -- Unary updatable operators -- template template GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator=(mat<2, 3, U, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; return *this; } template template GLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator+=(U s) { this->value[0] += s; this->value[1] += s; return *this; } template template GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator+=(mat<2, 3, U, Q> const& m) { this->value[0] += m[0]; this->value[1] += m[1]; return *this; } template template GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator-=(U s) { this->value[0] -= s; this->value[1] -= s; return *this; } template template GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator-=(mat<2, 3, U, Q> const& m) { this->value[0] -= m[0]; this->value[1] -= m[1]; return *this; } template template GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator*=(U s) { this->value[0] *= s; this->value[1] *= s; return *this; } template template GLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator/=(U s) { this->value[0] /= s; this->value[1] /= s; return *this; } // -- Increment and decrement operators -- template GLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator++() { ++this->value[0]; ++this->value[1]; return *this; } template GLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator--() { --this->value[0]; --this->value[1]; return *this; } template GLM_FUNC_QUALIFIER mat<2, 3, T, Q> mat<2, 3, T, Q>::operator++(int) { mat<2, 3, T, Q> Result(*this); ++*this; return Result; } template GLM_FUNC_QUALIFIER mat<2, 3, T, Q> mat<2, 3, T, Q>::operator--(int) { mat<2, 3, T, Q> Result(*this); --*this; return Result; } // -- Unary arithmetic operators -- template GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m) { return m; } template GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m) { return mat<2, 3, T, Q>( -m[0], -m[1]); } // -- Binary arithmetic operators -- template GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m, T scalar) { return mat<2, 3, T, Q>( m[0] + scalar, m[1] + scalar); } template GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) { return mat<2, 3, T, Q>( m1[0] + m2[0], m1[1] + m2[1]); } template GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m, T scalar) { return mat<2, 3, T, Q>( m[0] - scalar, m[1] - scalar); } template GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) { return mat<2, 3, T, Q>( m1[0] - m2[0], m1[1] - m2[1]); } template GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m, T scalar) { return mat<2, 3, T, Q>( m[0] * scalar, m[1] * scalar); } template GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(T scalar, mat<2, 3, T, Q> const& m) { return mat<2, 3, T, Q>( m[0] * scalar, m[1] * scalar); } template GLM_FUNC_QUALIFIER typename mat<2, 3, T, Q>::col_type operator* ( mat<2, 3, T, Q> const& m, typename mat<2, 3, T, Q>::row_type const& v) { return typename mat<2, 3, T, Q>::col_type( m[0][0] * v.x + m[1][0] * v.y, m[0][1] * v.x + m[1][1] * v.y, m[0][2] * v.x + m[1][2] * v.y); } template GLM_FUNC_QUALIFIER typename mat<2, 3, T, Q>::row_type operator* ( typename mat<2, 3, T, Q>::col_type const& v, mat<2, 3, T, Q> const& m) { return typename mat<2, 3, T, Q>::row_type( v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2], v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2]); } template GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<2, 2, T, Q> const& m2) { return mat<2, 3, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1], m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1], m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1]); } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<3, 2, T, Q> const& m2) { T SrcA00 = m1[0][0]; T SrcA01 = m1[0][1]; T SrcA02 = m1[0][2]; T SrcA10 = m1[1][0]; T SrcA11 = m1[1][1]; T SrcA12 = m1[1][2]; T SrcB00 = m2[0][0]; T SrcB01 = m2[0][1]; T SrcB10 = m2[1][0]; T SrcB11 = m2[1][1]; T SrcB20 = m2[2][0]; T SrcB21 = m2[2][1]; mat<3, 3, T, Q> Result; Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01; Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01; Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01; Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11; Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11; Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11; Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21; Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21; Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21; return Result; } template GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<4, 2, T, Q> const& m2) { return mat<4, 3, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1], m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1], m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1], m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1], m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1], m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1], m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1], m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1], m1[0][2] * m2[3][0] + m1[1][2] * m2[3][1]); } template GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator/(mat<2, 3, T, Q> const& m, T scalar) { return mat<2, 3, T, Q>( m[0] / scalar, m[1] / scalar); } template GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator/(T scalar, mat<2, 3, T, Q> const& m) { return mat<2, 3, T, Q>( scalar / m[0], scalar / m[1]); } // -- Boolean operators -- template GLM_FUNC_QUALIFIER bool operator==(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) { return (m1[0] == m2[0]) && (m1[1] == m2[1]); } template GLM_FUNC_QUALIFIER bool operator!=(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) { return (m1[0] != m2[0]) || (m1[1] != m2[1]); } } //namespace glm ================================================ FILE: libraries/glm/detail/type_mat2x4.hpp ================================================ /// @ref core /// @file glm/detail/type_mat2x4.hpp #pragma once #include "type_vec2.hpp" #include "type_vec4.hpp" #include #include namespace glm { template struct mat<2, 4, T, Q> { typedef vec<4, T, Q> col_type; typedef vec<2, T, Q> row_type; typedef mat<2, 4, T, Q> type; typedef mat<4, 2, T, Q> transpose_type; typedef T value_type; private: col_type value[2]; public: // -- Accesses -- typedef length_t length_type; GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 2; } GLM_FUNC_DECL col_type & operator[](length_type i); GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; // -- Constructors -- GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; template GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<2, 4, T, P> const& m); GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); GLM_FUNC_DECL GLM_CONSTEXPR mat( T x0, T y0, T z0, T w0, T x1, T y1, T z1, T w1); GLM_FUNC_DECL GLM_CONSTEXPR mat( col_type const& v0, col_type const& v1); // -- Conversions -- template< typename X1, typename Y1, typename Z1, typename W1, typename X2, typename Y2, typename Z2, typename W2> GLM_FUNC_DECL GLM_CONSTEXPR mat( X1 x1, Y1 y1, Z1 z1, W1 w1, X2 x2, Y2 y2, Z2 z2, W2 w2); template GLM_FUNC_DECL GLM_CONSTEXPR mat( vec<4, U, Q> const& v1, vec<4, V, Q> const& v2); // -- Matrix conversions -- template GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, U, P> const& m); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); // -- Unary arithmetic operators -- template GLM_FUNC_DECL mat<2, 4, T, Q> & operator=(mat<2, 4, U, Q> const& m); template GLM_FUNC_DECL mat<2, 4, T, Q> & operator+=(U s); template GLM_FUNC_DECL mat<2, 4, T, Q> & operator+=(mat<2, 4, U, Q> const& m); template GLM_FUNC_DECL mat<2, 4, T, Q> & operator-=(U s); template GLM_FUNC_DECL mat<2, 4, T, Q> & operator-=(mat<2, 4, U, Q> const& m); template GLM_FUNC_DECL mat<2, 4, T, Q> & operator*=(U s); template GLM_FUNC_DECL mat<2, 4, T, Q> & operator/=(U s); // -- Increment and decrement operators -- GLM_FUNC_DECL mat<2, 4, T, Q> & operator++ (); GLM_FUNC_DECL mat<2, 4, T, Q> & operator-- (); GLM_FUNC_DECL mat<2, 4, T, Q> operator++(int); GLM_FUNC_DECL mat<2, 4, T, Q> operator--(int); }; // -- Unary operators -- template GLM_FUNC_DECL mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m); template GLM_FUNC_DECL mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m); // -- Binary operators -- template GLM_FUNC_DECL mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m, T scalar); template GLM_FUNC_DECL mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); template GLM_FUNC_DECL mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m, T scalar); template GLM_FUNC_DECL mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); template GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m, T scalar); template GLM_FUNC_DECL mat<2, 4, T, Q> operator*(T scalar, mat<2, 4, T, Q> const& m); template GLM_FUNC_DECL typename mat<2, 4, T, Q>::col_type operator*(mat<2, 4, T, Q> const& m, typename mat<2, 4, T, Q>::row_type const& v); template GLM_FUNC_DECL typename mat<2, 4, T, Q>::row_type operator*(typename mat<2, 4, T, Q>::col_type const& v, mat<2, 4, T, Q> const& m); template GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<4, 2, T, Q> const& m2); template GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<2, 2, T, Q> const& m2); template GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<3, 2, T, Q> const& m2); template GLM_FUNC_DECL mat<2, 4, T, Q> operator/(mat<2, 4, T, Q> const& m, T scalar); template GLM_FUNC_DECL mat<2, 4, T, Q> operator/(T scalar, mat<2, 4, T, Q> const& m); // -- Boolean operators -- template GLM_FUNC_DECL bool operator==(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); template GLM_FUNC_DECL bool operator!=(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); }//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE #include "type_mat2x4.inl" #endif ================================================ FILE: libraries/glm/detail/type_mat2x4.inl ================================================ namespace glm { // -- Constructors -- # if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat() # if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST : value{col_type(1, 0, 0, 0), col_type(0, 1, 0, 0)} # endif { # if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION this->value[0] = col_type(1, 0, 0, 0); this->value[1] = col_type(0, 1, 0, 0); # endif } # endif template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 4, T, P> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{m[0], m[1]} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = m[0]; this->value[1] = m[1]; # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(T s) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(s, 0, 0, 0), col_type(0, s, 0, 0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(s, 0, 0, 0); this->value[1] = col_type(0, s, 0, 0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat ( T x0, T y0, T z0, T w0, T x1, T y1, T z1, T w1 ) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(x0, y0, z0, w0), col_type(x1, y1, z1, w1)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(x0, y0, z0, w0); this->value[1] = col_type(x1, y1, z1, w1); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(col_type const& v0, col_type const& v1) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(v0), col_type(v1)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = v0; this->value[1] = v1; # endif } // -- Conversion constructors -- template template< typename X1, typename Y1, typename Z1, typename W1, typename X2, typename Y2, typename Z2, typename W2> GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat ( X1 x1, Y1 y1, Z1 z1, W1 w1, X2 x2, Y2 y2, Z2 z2, W2 w2 ) # if GLM_HAS_INITIALIZER_LISTS : value{ col_type(x1, y1, z1, w1), col_type(x2, y2, z2, w2)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(x1, y1, z1, w1); this->value[1] = col_type(x2, y2, z2, w2); # endif } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(vec<4, V1, Q> const& v1, vec<4, V2, Q> const& v2) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(v1), col_type(v2)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(v1); this->value[1] = col_type(v2); # endif } // -- Matrix conversions -- template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 4, U, P> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 2, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0], 0, 0); this->value[1] = col_type(m[1], 0, 0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<3, 3, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0], 0), col_type(m[1], 0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<4, 4, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 3, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0], 0), col_type(m[1], 0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<3, 2, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0], 0, 0); this->value[1] = col_type(m[1], 0, 0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<3, 4, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<4, 2, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0], 0, 0); this->value[1] = col_type(m[1], 0, 0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<4, 3, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0], 0), col_type(m[1], 0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); # endif } // -- Accesses -- template GLM_FUNC_QUALIFIER typename mat<2, 4, T, Q>::col_type & mat<2, 4, T, Q>::operator[](typename mat<2, 4, T, Q>::length_type i) { assert(i < this->length()); return this->value[i]; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<2, 4, T, Q>::col_type const& mat<2, 4, T, Q>::operator[](typename mat<2, 4, T, Q>::length_type i) const { assert(i < this->length()); return this->value[i]; } // -- Unary updatable operators -- template template GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator=(mat<2, 4, U, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; return *this; } template template GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator+=(U s) { this->value[0] += s; this->value[1] += s; return *this; } template template GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator+=(mat<2, 4, U, Q> const& m) { this->value[0] += m[0]; this->value[1] += m[1]; return *this; } template template GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator-=(U s) { this->value[0] -= s; this->value[1] -= s; return *this; } template template GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator-=(mat<2, 4, U, Q> const& m) { this->value[0] -= m[0]; this->value[1] -= m[1]; return *this; } template template GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator*=(U s) { this->value[0] *= s; this->value[1] *= s; return *this; } template template GLM_FUNC_QUALIFIER mat<2, 4, T, Q> & mat<2, 4, T, Q>::operator/=(U s) { this->value[0] /= s; this->value[1] /= s; return *this; } // -- Increment and decrement operators -- template GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator++() { ++this->value[0]; ++this->value[1]; return *this; } template GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator--() { --this->value[0]; --this->value[1]; return *this; } template GLM_FUNC_QUALIFIER mat<2, 4, T, Q> mat<2, 4, T, Q>::operator++(int) { mat<2, 4, T, Q> Result(*this); ++*this; return Result; } template GLM_FUNC_QUALIFIER mat<2, 4, T, Q> mat<2, 4, T, Q>::operator--(int) { mat<2, 4, T, Q> Result(*this); --*this; return Result; } // -- Unary arithmetic operators -- template GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m) { return m; } template GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m) { return mat<2, 4, T, Q>( -m[0], -m[1]); } // -- Binary arithmetic operators -- template GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m, T scalar) { return mat<2, 4, T, Q>( m[0] + scalar, m[1] + scalar); } template GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) { return mat<2, 4, T, Q>( m1[0] + m2[0], m1[1] + m2[1]); } template GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m, T scalar) { return mat<2, 4, T, Q>( m[0] - scalar, m[1] - scalar); } template GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) { return mat<2, 4, T, Q>( m1[0] - m2[0], m1[1] - m2[1]); } template GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m, T scalar) { return mat<2, 4, T, Q>( m[0] * scalar, m[1] * scalar); } template GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(T scalar, mat<2, 4, T, Q> const& m) { return mat<2, 4, T, Q>( m[0] * scalar, m[1] * scalar); } template GLM_FUNC_QUALIFIER typename mat<2, 4, T, Q>::col_type operator*(mat<2, 4, T, Q> const& m, typename mat<2, 4, T, Q>::row_type const& v) { return typename mat<2, 4, T, Q>::col_type( m[0][0] * v.x + m[1][0] * v.y, m[0][1] * v.x + m[1][1] * v.y, m[0][2] * v.x + m[1][2] * v.y, m[0][3] * v.x + m[1][3] * v.y); } template GLM_FUNC_QUALIFIER typename mat<2, 4, T, Q>::row_type operator*(typename mat<2, 4, T, Q>::col_type const& v, mat<2, 4, T, Q> const& m) { return typename mat<2, 4, T, Q>::row_type( v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2] + v.w * m[0][3], v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2] + v.w * m[1][3]); } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<4, 2, T, Q> const& m2) { T SrcA00 = m1[0][0]; T SrcA01 = m1[0][1]; T SrcA02 = m1[0][2]; T SrcA03 = m1[0][3]; T SrcA10 = m1[1][0]; T SrcA11 = m1[1][1]; T SrcA12 = m1[1][2]; T SrcA13 = m1[1][3]; T SrcB00 = m2[0][0]; T SrcB01 = m2[0][1]; T SrcB10 = m2[1][0]; T SrcB11 = m2[1][1]; T SrcB20 = m2[2][0]; T SrcB21 = m2[2][1]; T SrcB30 = m2[3][0]; T SrcB31 = m2[3][1]; mat<4, 4, T, Q> Result; Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01; Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01; Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01; Result[0][3] = SrcA03 * SrcB00 + SrcA13 * SrcB01; Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11; Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11; Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11; Result[1][3] = SrcA03 * SrcB10 + SrcA13 * SrcB11; Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21; Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21; Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21; Result[2][3] = SrcA03 * SrcB20 + SrcA13 * SrcB21; Result[3][0] = SrcA00 * SrcB30 + SrcA10 * SrcB31; Result[3][1] = SrcA01 * SrcB30 + SrcA11 * SrcB31; Result[3][2] = SrcA02 * SrcB30 + SrcA12 * SrcB31; Result[3][3] = SrcA03 * SrcB30 + SrcA13 * SrcB31; return Result; } template GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<2, 2, T, Q> const& m2) { return mat<2, 4, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1], m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1], m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1], m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1], m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1]); } template GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<3, 2, T, Q> const& m2) { return mat<3, 4, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1], m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1], m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1], m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1], m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1], m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1], m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1], m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1], m1[0][3] * m2[2][0] + m1[1][3] * m2[2][1]); } template GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator/(mat<2, 4, T, Q> const& m, T scalar) { return mat<2, 4, T, Q>( m[0] / scalar, m[1] / scalar); } template GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator/(T scalar, mat<2, 4, T, Q> const& m) { return mat<2, 4, T, Q>( scalar / m[0], scalar / m[1]); } // -- Boolean operators -- template GLM_FUNC_QUALIFIER bool operator==(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) { return (m1[0] == m2[0]) && (m1[1] == m2[1]); } template GLM_FUNC_QUALIFIER bool operator!=(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) { return (m1[0] != m2[0]) || (m1[1] != m2[1]); } } //namespace glm ================================================ FILE: libraries/glm/detail/type_mat3x2.hpp ================================================ /// @ref core /// @file glm/detail/type_mat3x2.hpp #pragma once #include "type_vec2.hpp" #include "type_vec3.hpp" #include #include namespace glm { template struct mat<3, 2, T, Q> { typedef vec<2, T, Q> col_type; typedef vec<3, T, Q> row_type; typedef mat<3, 2, T, Q> type; typedef mat<2, 3, T, Q> transpose_type; typedef T value_type; private: col_type value[3]; public: // -- Accesses -- typedef length_t length_type; GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 3; } GLM_FUNC_DECL col_type & operator[](length_type i); GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; // -- Constructors -- GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; template GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<3, 2, T, P> const& m); GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); GLM_FUNC_DECL GLM_CONSTEXPR mat( T x0, T y0, T x1, T y1, T x2, T y2); GLM_FUNC_DECL GLM_CONSTEXPR mat( col_type const& v0, col_type const& v1, col_type const& v2); // -- Conversions -- template< typename X1, typename Y1, typename X2, typename Y2, typename X3, typename Y3> GLM_FUNC_DECL GLM_CONSTEXPR mat( X1 x1, Y1 y1, X2 x2, Y2 y2, X3 x3, Y3 y3); template GLM_FUNC_DECL GLM_CONSTEXPR mat( vec<2, V1, Q> const& v1, vec<2, V2, Q> const& v2, vec<2, V3, Q> const& v3); // -- Matrix conversions -- template GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, U, P> const& m); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); // -- Unary arithmetic operators -- template GLM_FUNC_DECL mat<3, 2, T, Q> & operator=(mat<3, 2, U, Q> const& m); template GLM_FUNC_DECL mat<3, 2, T, Q> & operator+=(U s); template GLM_FUNC_DECL mat<3, 2, T, Q> & operator+=(mat<3, 2, U, Q> const& m); template GLM_FUNC_DECL mat<3, 2, T, Q> & operator-=(U s); template GLM_FUNC_DECL mat<3, 2, T, Q> & operator-=(mat<3, 2, U, Q> const& m); template GLM_FUNC_DECL mat<3, 2, T, Q> & operator*=(U s); template GLM_FUNC_DECL mat<3, 2, T, Q> & operator/=(U s); // -- Increment and decrement operators -- GLM_FUNC_DECL mat<3, 2, T, Q> & operator++ (); GLM_FUNC_DECL mat<3, 2, T, Q> & operator-- (); GLM_FUNC_DECL mat<3, 2, T, Q> operator++(int); GLM_FUNC_DECL mat<3, 2, T, Q> operator--(int); }; // -- Unary operators -- template GLM_FUNC_DECL mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m); template GLM_FUNC_DECL mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m); // -- Binary operators -- template GLM_FUNC_DECL mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m, T scalar); template GLM_FUNC_DECL mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); template GLM_FUNC_DECL mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m, T scalar); template GLM_FUNC_DECL mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); template GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m, T scalar); template GLM_FUNC_DECL mat<3, 2, T, Q> operator*(T scalar, mat<3, 2, T, Q> const& m); template GLM_FUNC_DECL typename mat<3, 2, T, Q>::col_type operator*(mat<3, 2, T, Q> const& m, typename mat<3, 2, T, Q>::row_type const& v); template GLM_FUNC_DECL typename mat<3, 2, T, Q>::row_type operator*(typename mat<3, 2, T, Q>::col_type const& v, mat<3, 2, T, Q> const& m); template GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<2, 3, T, Q> const& m2); template GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<3, 3, T, Q> const& m2); template GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<4, 3, T, Q> const& m2); template GLM_FUNC_DECL mat<3, 2, T, Q> operator/(mat<3, 2, T, Q> const& m, T scalar); template GLM_FUNC_DECL mat<3, 2, T, Q> operator/(T scalar, mat<3, 2, T, Q> const& m); // -- Boolean operators -- template GLM_FUNC_DECL bool operator==(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); template GLM_FUNC_DECL bool operator!=(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); }//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE #include "type_mat3x2.inl" #endif ================================================ FILE: libraries/glm/detail/type_mat3x2.inl ================================================ namespace glm { // -- Constructors -- # if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat() # if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST : value{col_type(1, 0), col_type(0, 1), col_type(0, 0)} # endif { # if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION this->value[0] = col_type(1, 0); this->value[1] = col_type(0, 1); this->value[2] = col_type(0, 0); # endif } # endif template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 2, T, P> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = m[0]; this->value[1] = m[1]; this->value[2] = m[2]; # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(T s) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(s, 0), col_type(0, s), col_type(0, 0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(s, 0); this->value[1] = col_type(0, s); this->value[2] = col_type(0, 0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat ( T x0, T y0, T x1, T y1, T x2, T y2 ) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(x0, y0); this->value[1] = col_type(x1, y1); this->value[2] = col_type(x2, y2); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(v0), col_type(v1), col_type(v2)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = v0; this->value[1] = v1; this->value[2] = v2; # endif } // -- Conversion constructors -- template template< typename X0, typename Y0, typename X1, typename Y1, typename X2, typename Y2> GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat ( X0 x0, Y0 y0, X1 x1, Y1 y1, X2 x2, Y2 y2 ) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(x0, y0); this->value[1] = col_type(x1, y1); this->value[2] = col_type(x2, y2); # endif } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(vec<2, V0, Q> const& v0, vec<2, V1, Q> const& v1, vec<2, V2, Q> const& v2) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(v0), col_type(v1), col_type(v2)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(v0); this->value[1] = col_type(v1); this->value[2] = col_type(v2); # endif } // -- Matrix conversions -- template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 2, U, P> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<2, 2, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = m[0]; this->value[1] = m[1]; this->value[2] = col_type(0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 3, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<4, 4, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<2, 3, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<2, 4, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 4, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<4, 2, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = m[0]; this->value[1] = m[1]; this->value[2] = m[2]; # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<4, 3, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); # endif } // -- Accesses -- template GLM_FUNC_QUALIFIER typename mat<3, 2, T, Q>::col_type & mat<3, 2, T, Q>::operator[](typename mat<3, 2, T, Q>::length_type i) { assert(i < this->length()); return this->value[i]; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<3, 2, T, Q>::col_type const& mat<3, 2, T, Q>::operator[](typename mat<3, 2, T, Q>::length_type i) const { assert(i < this->length()); return this->value[i]; } // -- Unary updatable operators -- template template GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator=(mat<3, 2, U, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; this->value[2] = m[2]; return *this; } template template GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator+=(U s) { this->value[0] += s; this->value[1] += s; this->value[2] += s; return *this; } template template GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator+=(mat<3, 2, U, Q> const& m) { this->value[0] += m[0]; this->value[1] += m[1]; this->value[2] += m[2]; return *this; } template template GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator-=(U s) { this->value[0] -= s; this->value[1] -= s; this->value[2] -= s; return *this; } template template GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator-=(mat<3, 2, U, Q> const& m) { this->value[0] -= m[0]; this->value[1] -= m[1]; this->value[2] -= m[2]; return *this; } template template GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator*=(U s) { this->value[0] *= s; this->value[1] *= s; this->value[2] *= s; return *this; } template template GLM_FUNC_QUALIFIER mat<3, 2, T, Q> & mat<3, 2, T, Q>::operator/=(U s) { this->value[0] /= s; this->value[1] /= s; this->value[2] /= s; return *this; } // -- Increment and decrement operators -- template GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator++() { ++this->value[0]; ++this->value[1]; ++this->value[2]; return *this; } template GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator--() { --this->value[0]; --this->value[1]; --this->value[2]; return *this; } template GLM_FUNC_QUALIFIER mat<3, 2, T, Q> mat<3, 2, T, Q>::operator++(int) { mat<3, 2, T, Q> Result(*this); ++*this; return Result; } template GLM_FUNC_QUALIFIER mat<3, 2, T, Q> mat<3, 2, T, Q>::operator--(int) { mat<3, 2, T, Q> Result(*this); --*this; return Result; } // -- Unary arithmetic operators -- template GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m) { return m; } template GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m) { return mat<3, 2, T, Q>( -m[0], -m[1], -m[2]); } // -- Binary arithmetic operators -- template GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m, T scalar) { return mat<3, 2, T, Q>( m[0] + scalar, m[1] + scalar, m[2] + scalar); } template GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) { return mat<3, 2, T, Q>( m1[0] + m2[0], m1[1] + m2[1], m1[2] + m2[2]); } template GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m, T scalar) { return mat<3, 2, T, Q>( m[0] - scalar, m[1] - scalar, m[2] - scalar); } template GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) { return mat<3, 2, T, Q>( m1[0] - m2[0], m1[1] - m2[1], m1[2] - m2[2]); } template GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m, T scalar) { return mat<3, 2, T, Q>( m[0] * scalar, m[1] * scalar, m[2] * scalar); } template GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(T scalar, mat<3, 2, T, Q> const& m) { return mat<3, 2, T, Q>( m[0] * scalar, m[1] * scalar, m[2] * scalar); } template GLM_FUNC_QUALIFIER typename mat<3, 2, T, Q>::col_type operator*(mat<3, 2, T, Q> const& m, typename mat<3, 2, T, Q>::row_type const& v) { return typename mat<3, 2, T, Q>::col_type( m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z, m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z); } template GLM_FUNC_QUALIFIER typename mat<3, 2, T, Q>::row_type operator*(typename mat<3, 2, T, Q>::col_type const& v, mat<3, 2, T, Q> const& m) { return typename mat<3, 2, T, Q>::row_type( v.x * m[0][0] + v.y * m[0][1], v.x * m[1][0] + v.y * m[1][1], v.x * m[2][0] + v.y * m[2][1]); } template GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<2, 3, T, Q> const& m2) { const T SrcA00 = m1[0][0]; const T SrcA01 = m1[0][1]; const T SrcA10 = m1[1][0]; const T SrcA11 = m1[1][1]; const T SrcA20 = m1[2][0]; const T SrcA21 = m1[2][1]; const T SrcB00 = m2[0][0]; const T SrcB01 = m2[0][1]; const T SrcB02 = m2[0][2]; const T SrcB10 = m2[1][0]; const T SrcB11 = m2[1][1]; const T SrcB12 = m2[1][2]; mat<2, 2, T, Q> Result; Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02; Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02; Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12; Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12; return Result; } template GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<3, 3, T, Q> const& m2) { return mat<3, 2, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2], m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2]); } template GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<4, 3, T, Q> const& m2) { return mat<4, 2, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2], m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2], m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2], m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2]); } template GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator/(mat<3, 2, T, Q> const& m, T scalar) { return mat<3, 2, T, Q>( m[0] / scalar, m[1] / scalar, m[2] / scalar); } template GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator/(T scalar, mat<3, 2, T, Q> const& m) { return mat<3, 2, T, Q>( scalar / m[0], scalar / m[1], scalar / m[2]); } // -- Boolean operators -- template GLM_FUNC_QUALIFIER bool operator==(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) { return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]); } template GLM_FUNC_QUALIFIER bool operator!=(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) { return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]); } } //namespace glm ================================================ FILE: libraries/glm/detail/type_mat3x3.hpp ================================================ /// @ref core /// @file glm/detail/type_mat3x3.hpp #pragma once #include "type_vec3.hpp" #include #include namespace glm { template struct mat<3, 3, T, Q> { typedef vec<3, T, Q> col_type; typedef vec<3, T, Q> row_type; typedef mat<3, 3, T, Q> type; typedef mat<3, 3, T, Q> transpose_type; typedef T value_type; private: col_type value[3]; public: // -- Accesses -- typedef length_t length_type; GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 3; } GLM_FUNC_DECL col_type & operator[](length_type i); GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; // -- Constructors -- GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; template GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<3, 3, T, P> const& m); GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); GLM_FUNC_DECL GLM_CONSTEXPR mat( T x0, T y0, T z0, T x1, T y1, T z1, T x2, T y2, T z2); GLM_FUNC_DECL GLM_CONSTEXPR mat( col_type const& v0, col_type const& v1, col_type const& v2); // -- Conversions -- template< typename X1, typename Y1, typename Z1, typename X2, typename Y2, typename Z2, typename X3, typename Y3, typename Z3> GLM_FUNC_DECL GLM_CONSTEXPR mat( X1 x1, Y1 y1, Z1 z1, X2 x2, Y2 y2, Z2 z2, X3 x3, Y3 y3, Z3 z3); template GLM_FUNC_DECL GLM_CONSTEXPR mat( vec<3, V1, Q> const& v1, vec<3, V2, Q> const& v2, vec<3, V3, Q> const& v3); // -- Matrix conversions -- template GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, U, P> const& m); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); // -- Unary arithmetic operators -- template GLM_FUNC_DECL mat<3, 3, T, Q> & operator=(mat<3, 3, U, Q> const& m); template GLM_FUNC_DECL mat<3, 3, T, Q> & operator+=(U s); template GLM_FUNC_DECL mat<3, 3, T, Q> & operator+=(mat<3, 3, U, Q> const& m); template GLM_FUNC_DECL mat<3, 3, T, Q> & operator-=(U s); template GLM_FUNC_DECL mat<3, 3, T, Q> & operator-=(mat<3, 3, U, Q> const& m); template GLM_FUNC_DECL mat<3, 3, T, Q> & operator*=(U s); template GLM_FUNC_DECL mat<3, 3, T, Q> & operator*=(mat<3, 3, U, Q> const& m); template GLM_FUNC_DECL mat<3, 3, T, Q> & operator/=(U s); template GLM_FUNC_DECL mat<3, 3, T, Q> & operator/=(mat<3, 3, U, Q> const& m); // -- Increment and decrement operators -- GLM_FUNC_DECL mat<3, 3, T, Q> & operator++(); GLM_FUNC_DECL mat<3, 3, T, Q> & operator--(); GLM_FUNC_DECL mat<3, 3, T, Q> operator++(int); GLM_FUNC_DECL mat<3, 3, T, Q> operator--(int); }; // -- Unary operators -- template GLM_FUNC_DECL mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m); template GLM_FUNC_DECL mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m); // -- Binary operators -- template GLM_FUNC_DECL mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m, T scalar); template GLM_FUNC_DECL mat<3, 3, T, Q> operator+(T scalar, mat<3, 3, T, Q> const& m); template GLM_FUNC_DECL mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); template GLM_FUNC_DECL mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m, T scalar); template GLM_FUNC_DECL mat<3, 3, T, Q> operator-(T scalar, mat<3, 3, T, Q> const& m); template GLM_FUNC_DECL mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); template GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m, T scalar); template GLM_FUNC_DECL mat<3, 3, T, Q> operator*(T scalar, mat<3, 3, T, Q> const& m); template GLM_FUNC_DECL typename mat<3, 3, T, Q>::col_type operator*(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v); template GLM_FUNC_DECL typename mat<3, 3, T, Q>::row_type operator*(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m); template GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); template GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); template GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); template GLM_FUNC_DECL mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m, T scalar); template GLM_FUNC_DECL mat<3, 3, T, Q> operator/(T scalar, mat<3, 3, T, Q> const& m); template GLM_FUNC_DECL typename mat<3, 3, T, Q>::col_type operator/(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v); template GLM_FUNC_DECL typename mat<3, 3, T, Q>::row_type operator/(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m); template GLM_FUNC_DECL mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); // -- Boolean operators -- template GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); template GLM_FUNC_DECL bool operator!=(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); }//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE #include "type_mat3x3.inl" #endif ================================================ FILE: libraries/glm/detail/type_mat3x3.inl ================================================ #include "../matrix.hpp" namespace glm { // -- Constructors -- # if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat() # if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST : value{col_type(1, 0, 0), col_type(0, 1, 0), col_type(0, 0, 1)} # endif { # if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION this->value[0] = col_type(1, 0, 0); this->value[1] = col_type(0, 1, 0); this->value[2] = col_type(0, 0, 1); # endif } # endif template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 3, T, P> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(T s) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(s, 0, 0), col_type(0, s, 0), col_type(0, 0, s)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(s, 0, 0); this->value[1] = col_type(0, s, 0); this->value[2] = col_type(0, 0, s); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat ( T x0, T y0, T z0, T x1, T y1, T z1, T x2, T y2, T z2 ) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(x0, y0, z0), col_type(x1, y1, z1), col_type(x2, y2, z2)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(x0, y0, z0); this->value[1] = col_type(x1, y1, z1); this->value[2] = col_type(x2, y2, z2); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(v0), col_type(v1), col_type(v2)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(v0); this->value[1] = col_type(v1); this->value[2] = col_type(v2); # endif } // -- Conversion constructors -- template template< typename X1, typename Y1, typename Z1, typename X2, typename Y2, typename Z2, typename X3, typename Y3, typename Z3> GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat ( X1 x1, Y1 y1, Z1 z1, X2 x2, Y2 y2, Z2 z2, X3 x3, Y3 y3, Z3 z3 ) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(x1, y1, z1), col_type(x2, y2, z2), col_type(x3, y3, z3)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(x1, y1, z1); this->value[1] = col_type(x2, y2, z2); this->value[2] = col_type(x3, y3, z3); # endif } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(vec<3, V1, Q> const& v1, vec<3, V2, Q> const& v2, vec<3, V3, Q> const& v3) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(v1), col_type(v2), col_type(v3)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(v1); this->value[1] = col_type(v2); this->value[2] = col_type(v3); # endif } // -- Matrix conversions -- template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 3, U, P> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<2, 2, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); this->value[2] = col_type(0, 0, 1); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<4, 4, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<2, 3, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(0, 0, 1); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 2, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); this->value[2] = col_type(m[2], 1); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<2, 4, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(0, 0, 1); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<4, 2, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); this->value[2] = col_type(m[2], 1); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 4, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<4, 3, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); # endif } // -- Accesses -- template GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::col_type & mat<3, 3, T, Q>::operator[](typename mat<3, 3, T, Q>::length_type i) { assert(i < this->length()); return this->value[i]; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<3, 3, T, Q>::col_type const& mat<3, 3, T, Q>::operator[](typename mat<3, 3, T, Q>::length_type i) const { assert(i < this->length()); return this->value[i]; } // -- Unary updatable operators -- template template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator=(mat<3, 3, U, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; this->value[2] = m[2]; return *this; } template template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator+=(U s) { this->value[0] += s; this->value[1] += s; this->value[2] += s; return *this; } template template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator+=(mat<3, 3, U, Q> const& m) { this->value[0] += m[0]; this->value[1] += m[1]; this->value[2] += m[2]; return *this; } template template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator-=(U s) { this->value[0] -= s; this->value[1] -= s; this->value[2] -= s; return *this; } template template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator-=(mat<3, 3, U, Q> const& m) { this->value[0] -= m[0]; this->value[1] -= m[1]; this->value[2] -= m[2]; return *this; } template template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator*=(U s) { this->value[0] *= s; this->value[1] *= s; this->value[2] *= s; return *this; } template template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator*=(mat<3, 3, U, Q> const& m) { return (*this = *this * m); } template template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator/=(U s) { this->value[0] /= s; this->value[1] /= s; this->value[2] /= s; return *this; } template template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator/=(mat<3, 3, U, Q> const& m) { return *this *= inverse(m); } // -- Increment and decrement operators -- template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator++() { ++this->value[0]; ++this->value[1]; ++this->value[2]; return *this; } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator--() { --this->value[0]; --this->value[1]; --this->value[2]; return *this; } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> mat<3, 3, T, Q>::operator++(int) { mat<3, 3, T, Q> Result(*this); ++*this; return Result; } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> mat<3, 3, T, Q>::operator--(int) { mat<3, 3, T, Q> Result(*this); --*this; return Result; } // -- Unary arithmetic operators -- template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m) { return m; } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m) { return mat<3, 3, T, Q>( -m[0], -m[1], -m[2]); } // -- Binary arithmetic operators -- template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m, T scalar) { return mat<3, 3, T, Q>( m[0] + scalar, m[1] + scalar, m[2] + scalar); } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(T scalar, mat<3, 3, T, Q> const& m) { return mat<3, 3, T, Q>( m[0] + scalar, m[1] + scalar, m[2] + scalar); } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) { return mat<3, 3, T, Q>( m1[0] + m2[0], m1[1] + m2[1], m1[2] + m2[2]); } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m, T scalar) { return mat<3, 3, T, Q>( m[0] - scalar, m[1] - scalar, m[2] - scalar); } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(T scalar, mat<3, 3, T, Q> const& m) { return mat<3, 3, T, Q>( scalar - m[0], scalar - m[1], scalar - m[2]); } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) { return mat<3, 3, T, Q>( m1[0] - m2[0], m1[1] - m2[1], m1[2] - m2[2]); } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m, T scalar) { return mat<3, 3, T, Q>( m[0] * scalar, m[1] * scalar, m[2] * scalar); } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(T scalar, mat<3, 3, T, Q> const& m) { return mat<3, 3, T, Q>( m[0] * scalar, m[1] * scalar, m[2] * scalar); } template GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::col_type operator*(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v) { return typename mat<3, 3, T, Q>::col_type( m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z, m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z, m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z); } template GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::row_type operator*(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m) { return typename mat<3, 3, T, Q>::row_type( m[0][0] * v.x + m[0][1] * v.y + m[0][2] * v.z, m[1][0] * v.x + m[1][1] * v.y + m[1][2] * v.z, m[2][0] * v.x + m[2][1] * v.y + m[2][2] * v.z); } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) { T const SrcA00 = m1[0][0]; T const SrcA01 = m1[0][1]; T const SrcA02 = m1[0][2]; T const SrcA10 = m1[1][0]; T const SrcA11 = m1[1][1]; T const SrcA12 = m1[1][2]; T const SrcA20 = m1[2][0]; T const SrcA21 = m1[2][1]; T const SrcA22 = m1[2][2]; T const SrcB00 = m2[0][0]; T const SrcB01 = m2[0][1]; T const SrcB02 = m2[0][2]; T const SrcB10 = m2[1][0]; T const SrcB11 = m2[1][1]; T const SrcB12 = m2[1][2]; T const SrcB20 = m2[2][0]; T const SrcB21 = m2[2][1]; T const SrcB22 = m2[2][2]; mat<3, 3, T, Q> Result; Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02; Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02; Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02; Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12; Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12; Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11 + SrcA22 * SrcB12; Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21 + SrcA20 * SrcB22; Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21 + SrcA21 * SrcB22; Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21 + SrcA22 * SrcB22; return Result; } template GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) { return mat<2, 3, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2], m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2]); } template GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) { return mat<4, 3, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2], m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2], m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2], m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2], m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2], m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2], m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2], m1[0][2] * m2[3][0] + m1[1][2] * m2[3][1] + m1[2][2] * m2[3][2]); } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m, T scalar) { return mat<3, 3, T, Q>( m[0] / scalar, m[1] / scalar, m[2] / scalar); } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator/(T scalar, mat<3, 3, T, Q> const& m) { return mat<3, 3, T, Q>( scalar / m[0], scalar / m[1], scalar / m[2]); } template GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::col_type operator/(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v) { return inverse(m) * v; } template GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::row_type operator/(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m) { return v * inverse(m); } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) { mat<3, 3, T, Q> m1_copy(m1); return m1_copy /= m2; } // -- Boolean operators -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) { return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]); } template GLM_FUNC_QUALIFIER bool operator!=(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) { return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]); } } //namespace glm ================================================ FILE: libraries/glm/detail/type_mat3x4.hpp ================================================ /// @ref core /// @file glm/detail/type_mat3x4.hpp #pragma once #include "type_vec3.hpp" #include "type_vec4.hpp" #include #include namespace glm { template struct mat<3, 4, T, Q> { typedef vec<4, T, Q> col_type; typedef vec<3, T, Q> row_type; typedef mat<3, 4, T, Q> type; typedef mat<4, 3, T, Q> transpose_type; typedef T value_type; private: col_type value[3]; public: // -- Accesses -- typedef length_t length_type; GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 3; } GLM_FUNC_DECL col_type & operator[](length_type i); GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; // -- Constructors -- GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; template GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<3, 4, T, P> const& m); GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); GLM_FUNC_DECL GLM_CONSTEXPR mat( T x0, T y0, T z0, T w0, T x1, T y1, T z1, T w1, T x2, T y2, T z2, T w2); GLM_FUNC_DECL GLM_CONSTEXPR mat( col_type const& v0, col_type const& v1, col_type const& v2); // -- Conversions -- template< typename X1, typename Y1, typename Z1, typename W1, typename X2, typename Y2, typename Z2, typename W2, typename X3, typename Y3, typename Z3, typename W3> GLM_FUNC_DECL GLM_CONSTEXPR mat( X1 x1, Y1 y1, Z1 z1, W1 w1, X2 x2, Y2 y2, Z2 z2, W2 w2, X3 x3, Y3 y3, Z3 z3, W3 w3); template GLM_FUNC_DECL GLM_CONSTEXPR mat( vec<4, V1, Q> const& v1, vec<4, V2, Q> const& v2, vec<4, V3, Q> const& v3); // -- Matrix conversions -- template GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, U, P> const& m); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); // -- Unary arithmetic operators -- template GLM_FUNC_DECL mat<3, 4, T, Q> & operator=(mat<3, 4, U, Q> const& m); template GLM_FUNC_DECL mat<3, 4, T, Q> & operator+=(U s); template GLM_FUNC_DECL mat<3, 4, T, Q> & operator+=(mat<3, 4, U, Q> const& m); template GLM_FUNC_DECL mat<3, 4, T, Q> & operator-=(U s); template GLM_FUNC_DECL mat<3, 4, T, Q> & operator-=(mat<3, 4, U, Q> const& m); template GLM_FUNC_DECL mat<3, 4, T, Q> & operator*=(U s); template GLM_FUNC_DECL mat<3, 4, T, Q> & operator/=(U s); // -- Increment and decrement operators -- GLM_FUNC_DECL mat<3, 4, T, Q> & operator++(); GLM_FUNC_DECL mat<3, 4, T, Q> & operator--(); GLM_FUNC_DECL mat<3, 4, T, Q> operator++(int); GLM_FUNC_DECL mat<3, 4, T, Q> operator--(int); }; // -- Unary operators -- template GLM_FUNC_DECL mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m); template GLM_FUNC_DECL mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m); // -- Binary operators -- template GLM_FUNC_DECL mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m, T scalar); template GLM_FUNC_DECL mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); template GLM_FUNC_DECL mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m, T scalar); template GLM_FUNC_DECL mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); template GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m, T scalar); template GLM_FUNC_DECL mat<3, 4, T, Q> operator*(T scalar, mat<3, 4, T, Q> const& m); template GLM_FUNC_DECL typename mat<3, 4, T, Q>::col_type operator*(mat<3, 4, T, Q> const& m, typename mat<3, 4, T, Q>::row_type const& v); template GLM_FUNC_DECL typename mat<3, 4, T, Q>::row_type operator*(typename mat<3, 4, T, Q>::col_type const& v, mat<3, 4, T, Q> const& m); template GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<4, 3, T, Q> const& m2); template GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<2, 3, T, Q> const& m2); template GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<3, 3, T, Q> const& m2); template GLM_FUNC_DECL mat<3, 4, T, Q> operator/(mat<3, 4, T, Q> const& m, T scalar); template GLM_FUNC_DECL mat<3, 4, T, Q> operator/(T scalar, mat<3, 4, T, Q> const& m); // -- Boolean operators -- template GLM_FUNC_DECL bool operator==(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); template GLM_FUNC_DECL bool operator!=(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); }//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE #include "type_mat3x4.inl" #endif ================================================ FILE: libraries/glm/detail/type_mat3x4.inl ================================================ namespace glm { // -- Constructors -- # if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat() # if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST : value{col_type(1, 0, 0, 0), col_type(0, 1, 0, 0), col_type(0, 0, 1, 0)} # endif { # if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION this->value[0] = col_type(1, 0, 0, 0); this->value[1] = col_type(0, 1, 0, 0); this->value[2] = col_type(0, 0, 1, 0); # endif } # endif template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 4, T, P> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = m[0]; this->value[1] = m[1]; this->value[2] = m[2]; # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(T s) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(s, 0, 0, 0), col_type(0, s, 0, 0), col_type(0, 0, s, 0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(s, 0, 0, 0); this->value[1] = col_type(0, s, 0, 0); this->value[2] = col_type(0, 0, s, 0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat ( T x0, T y0, T z0, T w0, T x1, T y1, T z1, T w1, T x2, T y2, T z2, T w2 ) # if GLM_HAS_INITIALIZER_LISTS : value{ col_type(x0, y0, z0, w0), col_type(x1, y1, z1, w1), col_type(x2, y2, z2, w2)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(x0, y0, z0, w0); this->value[1] = col_type(x1, y1, z1, w1); this->value[2] = col_type(x2, y2, z2, w2); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(v0), col_type(v1), col_type(v2)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = v0; this->value[1] = v1; this->value[2] = v2; # endif } // -- Conversion constructors -- template template< typename X0, typename Y0, typename Z0, typename W0, typename X1, typename Y1, typename Z1, typename W1, typename X2, typename Y2, typename Z2, typename W2> GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat ( X0 x0, Y0 y0, Z0 z0, W0 w0, X1 x1, Y1 y1, Z1 z1, W1 w1, X2 x2, Y2 y2, Z2 z2, W2 w2 ) # if GLM_HAS_INITIALIZER_LISTS : value{ col_type(x0, y0, z0, w0), col_type(x1, y1, z1, w1), col_type(x2, y2, z2, w2)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(x0, y0, z0, w0); this->value[1] = col_type(x1, y1, z1, w1); this->value[2] = col_type(x2, y2, z2, w2); # endif } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(vec<4, V1, Q> const& v0, vec<4, V2, Q> const& v1, vec<4, V3, Q> const& v2) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(v0), col_type(v1), col_type(v2)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(v0); this->value[1] = col_type(v1); this->value[2] = col_type(v2); # endif } // -- Matrix conversions -- template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 4, U, P> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<2, 2, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(0, 0, 1, 0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0], 0, 0); this->value[1] = col_type(m[1], 0, 0); this->value[2] = col_type(0, 0, 1, 0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 3, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); this->value[2] = col_type(m[2], 0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<4, 4, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<2, 3, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1, 0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); this->value[2] = col_type(0, 0, 1, 0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 2, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(m[2], 1, 0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0], 0, 0); this->value[1] = col_type(m[1], 0, 0); this->value[2] = col_type(m[2], 1, 0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<2, 4, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1, 0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(0, 0, 1, 0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<4, 2, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(m[2], 1, 0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0], 0, 0); this->value[1] = col_type(m[1], 0, 0); this->value[2] = col_type(m[2], 1, 0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<4, 3, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); this->value[2] = col_type(m[2], 0); # endif } // -- Accesses -- template GLM_FUNC_QUALIFIER typename mat<3, 4, T, Q>::col_type & mat<3, 4, T, Q>::operator[](typename mat<3, 4, T, Q>::length_type i) { assert(i < this->length()); return this->value[i]; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<3, 4, T, Q>::col_type const& mat<3, 4, T, Q>::operator[](typename mat<3, 4, T, Q>::length_type i) const { assert(i < this->length()); return this->value[i]; } // -- Unary updatable operators -- template template GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator=(mat<3, 4, U, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; this->value[2] = m[2]; return *this; } template template GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator+=(U s) { this->value[0] += s; this->value[1] += s; this->value[2] += s; return *this; } template template GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator+=(mat<3, 4, U, Q> const& m) { this->value[0] += m[0]; this->value[1] += m[1]; this->value[2] += m[2]; return *this; } template template GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator-=(U s) { this->value[0] -= s; this->value[1] -= s; this->value[2] -= s; return *this; } template template GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator-=(mat<3, 4, U, Q> const& m) { this->value[0] -= m[0]; this->value[1] -= m[1]; this->value[2] -= m[2]; return *this; } template template GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator*=(U s) { this->value[0] *= s; this->value[1] *= s; this->value[2] *= s; return *this; } template template GLM_FUNC_QUALIFIER mat<3, 4, T, Q> & mat<3, 4, T, Q>::operator/=(U s) { this->value[0] /= s; this->value[1] /= s; this->value[2] /= s; return *this; } // -- Increment and decrement operators -- template GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator++() { ++this->value[0]; ++this->value[1]; ++this->value[2]; return *this; } template GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator--() { --this->value[0]; --this->value[1]; --this->value[2]; return *this; } template GLM_FUNC_QUALIFIER mat<3, 4, T, Q> mat<3, 4, T, Q>::operator++(int) { mat<3, 4, T, Q> Result(*this); ++*this; return Result; } template GLM_FUNC_QUALIFIER mat<3, 4, T, Q> mat<3, 4, T, Q>::operator--(int) { mat<3, 4, T, Q> Result(*this); --*this; return Result; } // -- Unary arithmetic operators -- template GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m) { return m; } template GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m) { return mat<3, 4, T, Q>( -m[0], -m[1], -m[2]); } // -- Binary arithmetic operators -- template GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m, T scalar) { return mat<3, 4, T, Q>( m[0] + scalar, m[1] + scalar, m[2] + scalar); } template GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) { return mat<3, 4, T, Q>( m1[0] + m2[0], m1[1] + m2[1], m1[2] + m2[2]); } template GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m, T scalar) { return mat<3, 4, T, Q>( m[0] - scalar, m[1] - scalar, m[2] - scalar); } template GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) { return mat<3, 4, T, Q>( m1[0] - m2[0], m1[1] - m2[1], m1[2] - m2[2]); } template GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m, T scalar) { return mat<3, 4, T, Q>( m[0] * scalar, m[1] * scalar, m[2] * scalar); } template GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(T scalar, mat<3, 4, T, Q> const& m) { return mat<3, 4, T, Q>( m[0] * scalar, m[1] * scalar, m[2] * scalar); } template GLM_FUNC_QUALIFIER typename mat<3, 4, T, Q>::col_type operator* ( mat<3, 4, T, Q> const& m, typename mat<3, 4, T, Q>::row_type const& v ) { return typename mat<3, 4, T, Q>::col_type( m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z, m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z, m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z, m[0][3] * v.x + m[1][3] * v.y + m[2][3] * v.z); } template GLM_FUNC_QUALIFIER typename mat<3, 4, T, Q>::row_type operator* ( typename mat<3, 4, T, Q>::col_type const& v, mat<3, 4, T, Q> const& m ) { return typename mat<3, 4, T, Q>::row_type( v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2] + v.w * m[0][3], v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2] + v.w * m[1][3], v.x * m[2][0] + v.y * m[2][1] + v.z * m[2][2] + v.w * m[2][3]); } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<4, 3, T, Q> const& m2) { const T SrcA00 = m1[0][0]; const T SrcA01 = m1[0][1]; const T SrcA02 = m1[0][2]; const T SrcA03 = m1[0][3]; const T SrcA10 = m1[1][0]; const T SrcA11 = m1[1][1]; const T SrcA12 = m1[1][2]; const T SrcA13 = m1[1][3]; const T SrcA20 = m1[2][0]; const T SrcA21 = m1[2][1]; const T SrcA22 = m1[2][2]; const T SrcA23 = m1[2][3]; const T SrcB00 = m2[0][0]; const T SrcB01 = m2[0][1]; const T SrcB02 = m2[0][2]; const T SrcB10 = m2[1][0]; const T SrcB11 = m2[1][1]; const T SrcB12 = m2[1][2]; const T SrcB20 = m2[2][0]; const T SrcB21 = m2[2][1]; const T SrcB22 = m2[2][2]; const T SrcB30 = m2[3][0]; const T SrcB31 = m2[3][1]; const T SrcB32 = m2[3][2]; mat<4, 4, T, Q> Result; Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02; Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02; Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02; Result[0][3] = SrcA03 * SrcB00 + SrcA13 * SrcB01 + SrcA23 * SrcB02; Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12; Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12; Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11 + SrcA22 * SrcB12; Result[1][3] = SrcA03 * SrcB10 + SrcA13 * SrcB11 + SrcA23 * SrcB12; Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21 + SrcA20 * SrcB22; Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21 + SrcA21 * SrcB22; Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21 + SrcA22 * SrcB22; Result[2][3] = SrcA03 * SrcB20 + SrcA13 * SrcB21 + SrcA23 * SrcB22; Result[3][0] = SrcA00 * SrcB30 + SrcA10 * SrcB31 + SrcA20 * SrcB32; Result[3][1] = SrcA01 * SrcB30 + SrcA11 * SrcB31 + SrcA21 * SrcB32; Result[3][2] = SrcA02 * SrcB30 + SrcA12 * SrcB31 + SrcA22 * SrcB32; Result[3][3] = SrcA03 * SrcB30 + SrcA13 * SrcB31 + SrcA23 * SrcB32; return Result; } template GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<2, 3, T, Q> const& m2) { return mat<2, 4, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2], m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2], m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2], m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2]); } template GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<3, 3, T, Q> const& m2) { return mat<3, 4, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2], m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2], m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2], m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2], m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2], m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2], m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2], m1[0][3] * m2[2][0] + m1[1][3] * m2[2][1] + m1[2][3] * m2[2][2]); } template GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator/(mat<3, 4, T, Q> const& m, T scalar) { return mat<3, 4, T, Q>( m[0] / scalar, m[1] / scalar, m[2] / scalar); } template GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator/(T scalar, mat<3, 4, T, Q> const& m) { return mat<3, 4, T, Q>( scalar / m[0], scalar / m[1], scalar / m[2]); } // -- Boolean operators -- template GLM_FUNC_QUALIFIER bool operator==(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) { return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]); } template GLM_FUNC_QUALIFIER bool operator!=(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) { return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]); } } //namespace glm ================================================ FILE: libraries/glm/detail/type_mat4x2.hpp ================================================ /// @ref core /// @file glm/detail/type_mat4x2.hpp #pragma once #include "type_vec2.hpp" #include "type_vec4.hpp" #include #include namespace glm { template struct mat<4, 2, T, Q> { typedef vec<2, T, Q> col_type; typedef vec<4, T, Q> row_type; typedef mat<4, 2, T, Q> type; typedef mat<2, 4, T, Q> transpose_type; typedef T value_type; private: col_type value[4]; public: // -- Accesses -- typedef length_t length_type; GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 4; } GLM_FUNC_DECL col_type & operator[](length_type i); GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; // -- Constructors -- GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; template GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<4, 2, T, P> const& m); GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); GLM_FUNC_DECL GLM_CONSTEXPR mat( T x0, T y0, T x1, T y1, T x2, T y2, T x3, T y3); GLM_FUNC_DECL GLM_CONSTEXPR mat( col_type const& v0, col_type const& v1, col_type const& v2, col_type const& v3); // -- Conversions -- template< typename X0, typename Y0, typename X1, typename Y1, typename X2, typename Y2, typename X3, typename Y3> GLM_FUNC_DECL GLM_CONSTEXPR mat( X0 x0, Y0 y0, X1 x1, Y1 y1, X2 x2, Y2 y2, X3 x3, Y3 y3); template GLM_FUNC_DECL GLM_CONSTEXPR mat( vec<2, V1, Q> const& v1, vec<2, V2, Q> const& v2, vec<2, V3, Q> const& v3, vec<2, V4, Q> const& v4); // -- Matrix conversions -- template GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, U, P> const& m); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); // -- Unary arithmetic operators -- template GLM_FUNC_DECL mat<4, 2, T, Q> & operator=(mat<4, 2, U, Q> const& m); template GLM_FUNC_DECL mat<4, 2, T, Q> & operator+=(U s); template GLM_FUNC_DECL mat<4, 2, T, Q> & operator+=(mat<4, 2, U, Q> const& m); template GLM_FUNC_DECL mat<4, 2, T, Q> & operator-=(U s); template GLM_FUNC_DECL mat<4, 2, T, Q> & operator-=(mat<4, 2, U, Q> const& m); template GLM_FUNC_DECL mat<4, 2, T, Q> & operator*=(U s); template GLM_FUNC_DECL mat<4, 2, T, Q> & operator/=(U s); // -- Increment and decrement operators -- GLM_FUNC_DECL mat<4, 2, T, Q> & operator++ (); GLM_FUNC_DECL mat<4, 2, T, Q> & operator-- (); GLM_FUNC_DECL mat<4, 2, T, Q> operator++(int); GLM_FUNC_DECL mat<4, 2, T, Q> operator--(int); }; // -- Unary operators -- template GLM_FUNC_DECL mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m); template GLM_FUNC_DECL mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m); // -- Binary operators -- template GLM_FUNC_DECL mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m, T scalar); template GLM_FUNC_DECL mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); template GLM_FUNC_DECL mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m, T scalar); template GLM_FUNC_DECL mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); template GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m, T scalar); template GLM_FUNC_DECL mat<4, 2, T, Q> operator*(T scalar, mat<4, 2, T, Q> const& m); template GLM_FUNC_DECL typename mat<4, 2, T, Q>::col_type operator*(mat<4, 2, T, Q> const& m, typename mat<4, 2, T, Q>::row_type const& v); template GLM_FUNC_DECL typename mat<4, 2, T, Q>::row_type operator*(typename mat<4, 2, T, Q>::col_type const& v, mat<4, 2, T, Q> const& m); template GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<2, 4, T, Q> const& m2); template GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<3, 4, T, Q> const& m2); template GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<4, 4, T, Q> const& m2); template GLM_FUNC_DECL mat<4, 2, T, Q> operator/(mat<4, 2, T, Q> const& m, T scalar); template GLM_FUNC_DECL mat<4, 2, T, Q> operator/(T scalar, mat<4, 2, T, Q> const& m); // -- Boolean operators -- template GLM_FUNC_DECL bool operator==(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); template GLM_FUNC_DECL bool operator!=(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); }//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE #include "type_mat4x2.inl" #endif ================================================ FILE: libraries/glm/detail/type_mat4x2.inl ================================================ namespace glm { // -- Constructors -- # if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat() # if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST : value{col_type(1, 0), col_type(0, 1), col_type(0, 0), col_type(0, 0)} # endif { # if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION this->value[0] = col_type(1, 0); this->value[1] = col_type(0, 1); this->value[2] = col_type(0, 0); this->value[3] = col_type(0, 0); # endif } # endif template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 2, T, P> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = m[0]; this->value[1] = m[1]; this->value[2] = m[2]; this->value[3] = m[3]; # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(T s) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(s, 0), col_type(0, s), col_type(0, 0), col_type(0, 0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(s, 0); this->value[1] = col_type(0, s); this->value[2] = col_type(0, 0); this->value[3] = col_type(0, 0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat ( T x0, T y0, T x1, T y1, T x2, T y2, T x3, T y3 ) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2), col_type(x3, y3)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(x0, y0); this->value[1] = col_type(x1, y1); this->value[2] = col_type(x2, y2); this->value[3] = col_type(x3, y3); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2, col_type const& v3) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = v0; this->value[1] = v1; this->value[2] = v2; this->value[3] = v3; # endif } // -- Conversion constructors -- template template< typename X0, typename Y0, typename X1, typename Y1, typename X2, typename Y2, typename X3, typename Y3> GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat ( X0 x0, Y0 y0, X1 x1, Y1 y1, X2 x2, Y2 y2, X3 x3, Y3 y3 ) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2), col_type(x3, y3)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(x0, y0); this->value[1] = col_type(x1, y1); this->value[2] = col_type(x2, y2); this->value[3] = col_type(x3, y3); # endif } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(vec<2, V0, Q> const& v0, vec<2, V1, Q> const& v1, vec<2, V2, Q> const& v2, vec<2, V3, Q> const& v3) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(v0); this->value[1] = col_type(v1); this->value[2] = col_type(v2); this->value[3] = col_type(v3); # endif } // -- Conversion -- template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 2, U, P> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); this->value[3] = col_type(m[3]); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<2, 2, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(0), col_type(0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(0); this->value[3] = col_type(0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<3, 3, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); this->value[3] = col_type(0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 4, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); this->value[3] = col_type(m[3]); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<2, 3, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(0), col_type(0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(0); this->value[3] = col_type(0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<3, 2, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); this->value[3] = col_type(0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<2, 4, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(0), col_type(0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(0); this->value[3] = col_type(0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 3, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); this->value[3] = col_type(m[3]); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<3, 4, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); this->value[3] = col_type(0); # endif } // -- Accesses -- template GLM_FUNC_QUALIFIER typename mat<4, 2, T, Q>::col_type & mat<4, 2, T, Q>::operator[](typename mat<4, 2, T, Q>::length_type i) { assert(i < this->length()); return this->value[i]; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<4, 2, T, Q>::col_type const& mat<4, 2, T, Q>::operator[](typename mat<4, 2, T, Q>::length_type i) const { assert(i < this->length()); return this->value[i]; } // -- Unary updatable operators -- template template GLM_FUNC_QUALIFIER mat<4, 2, T, Q>& mat<4, 2, T, Q>::operator=(mat<4, 2, U, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; this->value[2] = m[2]; this->value[3] = m[3]; return *this; } template template GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator+=(U s) { this->value[0] += s; this->value[1] += s; this->value[2] += s; this->value[3] += s; return *this; } template template GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator+=(mat<4, 2, U, Q> const& m) { this->value[0] += m[0]; this->value[1] += m[1]; this->value[2] += m[2]; this->value[3] += m[3]; return *this; } template template GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator-=(U s) { this->value[0] -= s; this->value[1] -= s; this->value[2] -= s; this->value[3] -= s; return *this; } template template GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator-=(mat<4, 2, U, Q> const& m) { this->value[0] -= m[0]; this->value[1] -= m[1]; this->value[2] -= m[2]; this->value[3] -= m[3]; return *this; } template template GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator*=(U s) { this->value[0] *= s; this->value[1] *= s; this->value[2] *= s; this->value[3] *= s; return *this; } template template GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator/=(U s) { this->value[0] /= s; this->value[1] /= s; this->value[2] /= s; this->value[3] /= s; return *this; } // -- Increment and decrement operators -- template GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator++() { ++this->value[0]; ++this->value[1]; ++this->value[2]; ++this->value[3]; return *this; } template GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator--() { --this->value[0]; --this->value[1]; --this->value[2]; --this->value[3]; return *this; } template GLM_FUNC_QUALIFIER mat<4, 2, T, Q> mat<4, 2, T, Q>::operator++(int) { mat<4, 2, T, Q> Result(*this); ++*this; return Result; } template GLM_FUNC_QUALIFIER mat<4, 2, T, Q> mat<4, 2, T, Q>::operator--(int) { mat<4, 2, T, Q> Result(*this); --*this; return Result; } // -- Unary arithmetic operators -- template GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m) { return m; } template GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m) { return mat<4, 2, T, Q>( -m[0], -m[1], -m[2], -m[3]); } // -- Binary arithmetic operators -- template GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m, T scalar) { return mat<4, 2, T, Q>( m[0] + scalar, m[1] + scalar, m[2] + scalar, m[3] + scalar); } template GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) { return mat<4, 2, T, Q>( m1[0] + m2[0], m1[1] + m2[1], m1[2] + m2[2], m1[3] + m2[3]); } template GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m, T scalar) { return mat<4, 2, T, Q>( m[0] - scalar, m[1] - scalar, m[2] - scalar, m[3] - scalar); } template GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) { return mat<4, 2, T, Q>( m1[0] - m2[0], m1[1] - m2[1], m1[2] - m2[2], m1[3] - m2[3]); } template GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m, T scalar) { return mat<4, 2, T, Q>( m[0] * scalar, m[1] * scalar, m[2] * scalar, m[3] * scalar); } template GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(T scalar, mat<4, 2, T, Q> const& m) { return mat<4, 2, T, Q>( m[0] * scalar, m[1] * scalar, m[2] * scalar, m[3] * scalar); } template GLM_FUNC_QUALIFIER typename mat<4, 2, T, Q>::col_type operator*(mat<4, 2, T, Q> const& m, typename mat<4, 2, T, Q>::row_type const& v) { return typename mat<4, 2, T, Q>::col_type( m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w, m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w); } template GLM_FUNC_QUALIFIER typename mat<4, 2, T, Q>::row_type operator*(typename mat<4, 2, T, Q>::col_type const& v, mat<4, 2, T, Q> const& m) { return typename mat<4, 2, T, Q>::row_type( v.x * m[0][0] + v.y * m[0][1], v.x * m[1][0] + v.y * m[1][1], v.x * m[2][0] + v.y * m[2][1], v.x * m[3][0] + v.y * m[3][1]); } template GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<2, 4, T, Q> const& m2) { T const SrcA00 = m1[0][0]; T const SrcA01 = m1[0][1]; T const SrcA10 = m1[1][0]; T const SrcA11 = m1[1][1]; T const SrcA20 = m1[2][0]; T const SrcA21 = m1[2][1]; T const SrcA30 = m1[3][0]; T const SrcA31 = m1[3][1]; T const SrcB00 = m2[0][0]; T const SrcB01 = m2[0][1]; T const SrcB02 = m2[0][2]; T const SrcB03 = m2[0][3]; T const SrcB10 = m2[1][0]; T const SrcB11 = m2[1][1]; T const SrcB12 = m2[1][2]; T const SrcB13 = m2[1][3]; mat<2, 2, T, Q> Result; Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02 + SrcA30 * SrcB03; Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02 + SrcA31 * SrcB03; Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12 + SrcA30 * SrcB13; Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12 + SrcA31 * SrcB13; return Result; } template GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<3, 4, T, Q> const& m2) { return mat<3, 2, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3], m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3]); } template GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<4, 4, T, Q> const& m2) { return mat<4, 2, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3], m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3], m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2] + m1[3][0] * m2[3][3], m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2] + m1[3][1] * m2[3][3]); } template GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator/(mat<4, 2, T, Q> const& m, T scalar) { return mat<4, 2, T, Q>( m[0] / scalar, m[1] / scalar, m[2] / scalar, m[3] / scalar); } template GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator/(T scalar, mat<4, 2, T, Q> const& m) { return mat<4, 2, T, Q>( scalar / m[0], scalar / m[1], scalar / m[2], scalar / m[3]); } // -- Boolean operators -- template GLM_FUNC_QUALIFIER bool operator==(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) { return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]); } template GLM_FUNC_QUALIFIER bool operator!=(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) { return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]); } } //namespace glm ================================================ FILE: libraries/glm/detail/type_mat4x3.hpp ================================================ /// @ref core /// @file glm/detail/type_mat4x3.hpp #pragma once #include "type_vec3.hpp" #include "type_vec4.hpp" #include #include namespace glm { template struct mat<4, 3, T, Q> { typedef vec<3, T, Q> col_type; typedef vec<4, T, Q> row_type; typedef mat<4, 3, T, Q> type; typedef mat<3, 4, T, Q> transpose_type; typedef T value_type; private: col_type value[4]; public: // -- Accesses -- typedef length_t length_type; GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 4; } GLM_FUNC_DECL col_type & operator[](length_type i); GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; // -- Constructors -- GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; template GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<4, 3, T, P> const& m); GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T const& x); GLM_FUNC_DECL GLM_CONSTEXPR mat( T const& x0, T const& y0, T const& z0, T const& x1, T const& y1, T const& z1, T const& x2, T const& y2, T const& z2, T const& x3, T const& y3, T const& z3); GLM_FUNC_DECL GLM_CONSTEXPR mat( col_type const& v0, col_type const& v1, col_type const& v2, col_type const& v3); // -- Conversions -- template< typename X1, typename Y1, typename Z1, typename X2, typename Y2, typename Z2, typename X3, typename Y3, typename Z3, typename X4, typename Y4, typename Z4> GLM_FUNC_DECL GLM_CONSTEXPR mat( X1 const& x1, Y1 const& y1, Z1 const& z1, X2 const& x2, Y2 const& y2, Z2 const& z2, X3 const& x3, Y3 const& y3, Z3 const& z3, X4 const& x4, Y4 const& y4, Z4 const& z4); template GLM_FUNC_DECL GLM_CONSTEXPR mat( vec<3, V1, Q> const& v1, vec<3, V2, Q> const& v2, vec<3, V3, Q> const& v3, vec<3, V4, Q> const& v4); // -- Matrix conversions -- template GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, U, P> const& m); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); // -- Unary arithmetic operators -- template GLM_FUNC_DECL mat<4, 3, T, Q> & operator=(mat<4, 3, U, Q> const& m); template GLM_FUNC_DECL mat<4, 3, T, Q> & operator+=(U s); template GLM_FUNC_DECL mat<4, 3, T, Q> & operator+=(mat<4, 3, U, Q> const& m); template GLM_FUNC_DECL mat<4, 3, T, Q> & operator-=(U s); template GLM_FUNC_DECL mat<4, 3, T, Q> & operator-=(mat<4, 3, U, Q> const& m); template GLM_FUNC_DECL mat<4, 3, T, Q> & operator*=(U s); template GLM_FUNC_DECL mat<4, 3, T, Q> & operator/=(U s); // -- Increment and decrement operators -- GLM_FUNC_DECL mat<4, 3, T, Q>& operator++(); GLM_FUNC_DECL mat<4, 3, T, Q>& operator--(); GLM_FUNC_DECL mat<4, 3, T, Q> operator++(int); GLM_FUNC_DECL mat<4, 3, T, Q> operator--(int); }; // -- Unary operators -- template GLM_FUNC_DECL mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m); template GLM_FUNC_DECL mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m); // -- Binary operators -- template GLM_FUNC_DECL mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m, T const& s); template GLM_FUNC_DECL mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); template GLM_FUNC_DECL mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m, T const& s); template GLM_FUNC_DECL mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); template GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m, T const& s); template GLM_FUNC_DECL mat<4, 3, T, Q> operator*(T const& s, mat<4, 3, T, Q> const& m); template GLM_FUNC_DECL typename mat<4, 3, T, Q>::col_type operator*(mat<4, 3, T, Q> const& m, typename mat<4, 3, T, Q>::row_type const& v); template GLM_FUNC_DECL typename mat<4, 3, T, Q>::row_type operator*(typename mat<4, 3, T, Q>::col_type const& v, mat<4, 3, T, Q> const& m); template GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<2, 4, T, Q> const& m2); template GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<3, 4, T, Q> const& m2); template GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<4, 4, T, Q> const& m2); template GLM_FUNC_DECL mat<4, 3, T, Q> operator/(mat<4, 3, T, Q> const& m, T const& s); template GLM_FUNC_DECL mat<4, 3, T, Q> operator/(T const& s, mat<4, 3, T, Q> const& m); // -- Boolean operators -- template GLM_FUNC_DECL bool operator==(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); template GLM_FUNC_DECL bool operator!=(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); }//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE #include "type_mat4x3.inl" #endif //GLM_EXTERNAL_TEMPLATE ================================================ FILE: libraries/glm/detail/type_mat4x3.inl ================================================ namespace glm { // -- Constructors -- # if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat() # if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST : value{col_type(1, 0, 0), col_type(0, 1, 0), col_type(0, 0, 1), col_type(0, 0, 0)} # endif { # if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION this->value[0] = col_type(1, 0, 0); this->value[1] = col_type(0, 1, 0); this->value[2] = col_type(0, 0, 1); this->value[3] = col_type(0, 0, 0); # endif } # endif template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 3, T, P> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = m[0]; this->value[1] = m[1]; this->value[2] = m[2]; this->value[3] = m[3]; # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(T const& s) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(s, 0, 0), col_type(0, s, 0), col_type(0, 0, s), col_type(0, 0, 0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(s, 0, 0); this->value[1] = col_type(0, s, 0); this->value[2] = col_type(0, 0, s); this->value[3] = col_type(0, 0, 0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat ( T const& x0, T const& y0, T const& z0, T const& x1, T const& y1, T const& z1, T const& x2, T const& y2, T const& z2, T const& x3, T const& y3, T const& z3 ) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(x0, y0, z0), col_type(x1, y1, z1), col_type(x2, y2, z2), col_type(x3, y3, z3)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(x0, y0, z0); this->value[1] = col_type(x1, y1, z1); this->value[2] = col_type(x2, y2, z2); this->value[3] = col_type(x3, y3, z3); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2, col_type const& v3) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = v0; this->value[1] = v1; this->value[2] = v2; this->value[3] = v3; # endif } // -- Conversion constructors -- template template< typename X0, typename Y0, typename Z0, typename X1, typename Y1, typename Z1, typename X2, typename Y2, typename Z2, typename X3, typename Y3, typename Z3> GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat ( X0 const& x0, Y0 const& y0, Z0 const& z0, X1 const& x1, Y1 const& y1, Z1 const& z1, X2 const& x2, Y2 const& y2, Z2 const& z2, X3 const& x3, Y3 const& y3, Z3 const& z3 ) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(x0, y0, z0), col_type(x1, y1, z1), col_type(x2, y2, z2), col_type(x3, y3, z3)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(x0, y0, z0); this->value[1] = col_type(x1, y1, z1); this->value[2] = col_type(x2, y2, z2); this->value[3] = col_type(x3, y3, z3); # endif } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(vec<3, V1, Q> const& v1, vec<3, V2, Q> const& v2, vec<3, V3, Q> const& v3, vec<3, V4, Q> const& v4) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(v1), col_type(v2), col_type(v3), col_type(v4)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(v1); this->value[1] = col_type(v2); this->value[2] = col_type(v3); this->value[3] = col_type(v4); # endif } // -- Matrix conversions -- template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 3, U, P> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); this->value[3] = col_type(m[3]); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<2, 2, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1), col_type(0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); this->value[2] = col_type(0, 0, 1); this->value[3] = col_type(0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<3, 3, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); this->value[3] = col_type(0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 4, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); this->value[3] = col_type(m[3]); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<2, 3, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1), col_type(0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(0, 0, 1); this->value[3] = col_type(0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<3, 2, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1), col_type(0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); this->value[2] = col_type(m[2], 1); this->value[3] = col_type(0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<2, 4, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1), col_type(0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(0, 0, 1); this->value[3] = col_type(0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 2, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1), col_type(m[3], 0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); this->value[2] = col_type(m[2], 1); this->value[3] = col_type(m[3], 0); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<3, 4, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); this->value[3] = col_type(0); # endif } // -- Accesses -- template GLM_FUNC_QUALIFIER typename mat<4, 3, T, Q>::col_type & mat<4, 3, T, Q>::operator[](typename mat<4, 3, T, Q>::length_type i) { assert(i < this->length()); return this->value[i]; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<4, 3, T, Q>::col_type const& mat<4, 3, T, Q>::operator[](typename mat<4, 3, T, Q>::length_type i) const { assert(i < this->length()); return this->value[i]; } // -- Unary updatable operators -- template template GLM_FUNC_QUALIFIER mat<4, 3, T, Q>& mat<4, 3, T, Q>::operator=(mat<4, 3, U, Q> const& m) { this->value[0] = m[0]; this->value[1] = m[1]; this->value[2] = m[2]; this->value[3] = m[3]; return *this; } template template GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator+=(U s) { this->value[0] += s; this->value[1] += s; this->value[2] += s; this->value[3] += s; return *this; } template template GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator+=(mat<4, 3, U, Q> const& m) { this->value[0] += m[0]; this->value[1] += m[1]; this->value[2] += m[2]; this->value[3] += m[3]; return *this; } template template GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator-=(U s) { this->value[0] -= s; this->value[1] -= s; this->value[2] -= s; this->value[3] -= s; return *this; } template template GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator-=(mat<4, 3, U, Q> const& m) { this->value[0] -= m[0]; this->value[1] -= m[1]; this->value[2] -= m[2]; this->value[3] -= m[3]; return *this; } template template GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator*=(U s) { this->value[0] *= s; this->value[1] *= s; this->value[2] *= s; this->value[3] *= s; return *this; } template template GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator/=(U s) { this->value[0] /= s; this->value[1] /= s; this->value[2] /= s; this->value[3] /= s; return *this; } // -- Increment and decrement operators -- template GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator++() { ++this->value[0]; ++this->value[1]; ++this->value[2]; ++this->value[3]; return *this; } template GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator--() { --this->value[0]; --this->value[1]; --this->value[2]; --this->value[3]; return *this; } template GLM_FUNC_QUALIFIER mat<4, 3, T, Q> mat<4, 3, T, Q>::operator++(int) { mat<4, 3, T, Q> Result(*this); ++*this; return Result; } template GLM_FUNC_QUALIFIER mat<4, 3, T, Q> mat<4, 3, T, Q>::operator--(int) { mat<4, 3, T, Q> Result(*this); --*this; return Result; } // -- Unary arithmetic operators -- template GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m) { return m; } template GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m) { return mat<4, 3, T, Q>( -m[0], -m[1], -m[2], -m[3]); } // -- Binary arithmetic operators -- template GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m, T const& s) { return mat<4, 3, T, Q>( m[0] + s, m[1] + s, m[2] + s, m[3] + s); } template GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) { return mat<4, 3, T, Q>( m1[0] + m2[0], m1[1] + m2[1], m1[2] + m2[2], m1[3] + m2[3]); } template GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m, T const& s) { return mat<4, 3, T, Q>( m[0] - s, m[1] - s, m[2] - s, m[3] - s); } template GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) { return mat<4, 3, T, Q>( m1[0] - m2[0], m1[1] - m2[1], m1[2] - m2[2], m1[3] - m2[3]); } template GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m, T const& s) { return mat<4, 3, T, Q>( m[0] * s, m[1] * s, m[2] * s, m[3] * s); } template GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(T const& s, mat<4, 3, T, Q> const& m) { return mat<4, 3, T, Q>( m[0] * s, m[1] * s, m[2] * s, m[3] * s); } template GLM_FUNC_QUALIFIER typename mat<4, 3, T, Q>::col_type operator* ( mat<4, 3, T, Q> const& m, typename mat<4, 3, T, Q>::row_type const& v) { return typename mat<4, 3, T, Q>::col_type( m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w, m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w, m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z + m[3][2] * v.w); } template GLM_FUNC_QUALIFIER typename mat<4, 3, T, Q>::row_type operator* ( typename mat<4, 3, T, Q>::col_type const& v, mat<4, 3, T, Q> const& m) { return typename mat<4, 3, T, Q>::row_type( v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2], v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2], v.x * m[2][0] + v.y * m[2][1] + v.z * m[2][2], v.x * m[3][0] + v.y * m[3][1] + v.z * m[3][2]); } template GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<2, 4, T, Q> const& m2) { return mat<2, 3, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3], m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3]); } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<3, 4, T, Q> const& m2) { T const SrcA00 = m1[0][0]; T const SrcA01 = m1[0][1]; T const SrcA02 = m1[0][2]; T const SrcA10 = m1[1][0]; T const SrcA11 = m1[1][1]; T const SrcA12 = m1[1][2]; T const SrcA20 = m1[2][0]; T const SrcA21 = m1[2][1]; T const SrcA22 = m1[2][2]; T const SrcA30 = m1[3][0]; T const SrcA31 = m1[3][1]; T const SrcA32 = m1[3][2]; T const SrcB00 = m2[0][0]; T const SrcB01 = m2[0][1]; T const SrcB02 = m2[0][2]; T const SrcB03 = m2[0][3]; T const SrcB10 = m2[1][0]; T const SrcB11 = m2[1][1]; T const SrcB12 = m2[1][2]; T const SrcB13 = m2[1][3]; T const SrcB20 = m2[2][0]; T const SrcB21 = m2[2][1]; T const SrcB22 = m2[2][2]; T const SrcB23 = m2[2][3]; mat<3, 3, T, Q> Result; Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02 + SrcA30 * SrcB03; Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02 + SrcA31 * SrcB03; Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02 + SrcA32 * SrcB03; Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12 + SrcA30 * SrcB13; Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12 + SrcA31 * SrcB13; Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11 + SrcA22 * SrcB12 + SrcA32 * SrcB13; Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21 + SrcA20 * SrcB22 + SrcA30 * SrcB23; Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21 + SrcA21 * SrcB22 + SrcA31 * SrcB23; Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21 + SrcA22 * SrcB22 + SrcA32 * SrcB23; return Result; } template GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<4, 4, T, Q> const& m2) { return mat<4, 3, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3], m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3], m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3], m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3], m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2] + m1[3][2] * m2[2][3], m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2] + m1[3][0] * m2[3][3], m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2] + m1[3][1] * m2[3][3], m1[0][2] * m2[3][0] + m1[1][2] * m2[3][1] + m1[2][2] * m2[3][2] + m1[3][2] * m2[3][3]); } template GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator/(mat<4, 3, T, Q> const& m, T const& s) { return mat<4, 3, T, Q>( m[0] / s, m[1] / s, m[2] / s, m[3] / s); } template GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator/(T const& s, mat<4, 3, T, Q> const& m) { return mat<4, 3, T, Q>( s / m[0], s / m[1], s / m[2], s / m[3]); } // -- Boolean operators -- template GLM_FUNC_QUALIFIER bool operator==(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) { return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]); } template GLM_FUNC_QUALIFIER bool operator!=(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) { return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]); } } //namespace glm ================================================ FILE: libraries/glm/detail/type_mat4x4.hpp ================================================ /// @ref core /// @file glm/detail/type_mat4x4.hpp #pragma once #include "type_vec4.hpp" #include #include namespace glm { template struct mat<4, 4, T, Q> { typedef vec<4, T, Q> col_type; typedef vec<4, T, Q> row_type; typedef mat<4, 4, T, Q> type; typedef mat<4, 4, T, Q> transpose_type; typedef T value_type; private: col_type value[4]; public: // -- Accesses -- typedef length_t length_type; GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 4;} GLM_FUNC_DECL col_type & operator[](length_type i); GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; // -- Constructors -- GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; template GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<4, 4, T, P> const& m); GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T const& x); GLM_FUNC_DECL GLM_CONSTEXPR mat( T const& x0, T const& y0, T const& z0, T const& w0, T const& x1, T const& y1, T const& z1, T const& w1, T const& x2, T const& y2, T const& z2, T const& w2, T const& x3, T const& y3, T const& z3, T const& w3); GLM_FUNC_DECL GLM_CONSTEXPR mat( col_type const& v0, col_type const& v1, col_type const& v2, col_type const& v3); // -- Conversions -- template< typename X1, typename Y1, typename Z1, typename W1, typename X2, typename Y2, typename Z2, typename W2, typename X3, typename Y3, typename Z3, typename W3, typename X4, typename Y4, typename Z4, typename W4> GLM_FUNC_DECL GLM_CONSTEXPR mat( X1 const& x1, Y1 const& y1, Z1 const& z1, W1 const& w1, X2 const& x2, Y2 const& y2, Z2 const& z2, W2 const& w2, X3 const& x3, Y3 const& y3, Z3 const& z3, W3 const& w3, X4 const& x4, Y4 const& y4, Z4 const& z4, W4 const& w4); template GLM_FUNC_DECL GLM_CONSTEXPR mat( vec<4, V1, Q> const& v1, vec<4, V2, Q> const& v2, vec<4, V3, Q> const& v3, vec<4, V4, Q> const& v4); // -- Matrix conversions -- template GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, U, P> const& m); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); // -- Unary arithmetic operators -- template GLM_FUNC_DECL mat<4, 4, T, Q> & operator=(mat<4, 4, U, Q> const& m); template GLM_FUNC_DECL mat<4, 4, T, Q> & operator+=(U s); template GLM_FUNC_DECL mat<4, 4, T, Q> & operator+=(mat<4, 4, U, Q> const& m); template GLM_FUNC_DECL mat<4, 4, T, Q> & operator-=(U s); template GLM_FUNC_DECL mat<4, 4, T, Q> & operator-=(mat<4, 4, U, Q> const& m); template GLM_FUNC_DECL mat<4, 4, T, Q> & operator*=(U s); template GLM_FUNC_DECL mat<4, 4, T, Q> & operator*=(mat<4, 4, U, Q> const& m); template GLM_FUNC_DECL mat<4, 4, T, Q> & operator/=(U s); template GLM_FUNC_DECL mat<4, 4, T, Q> & operator/=(mat<4, 4, U, Q> const& m); // -- Increment and decrement operators -- GLM_FUNC_DECL mat<4, 4, T, Q> & operator++(); GLM_FUNC_DECL mat<4, 4, T, Q> & operator--(); GLM_FUNC_DECL mat<4, 4, T, Q> operator++(int); GLM_FUNC_DECL mat<4, 4, T, Q> operator--(int); }; // -- Unary operators -- template GLM_FUNC_DECL mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m); template GLM_FUNC_DECL mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m); // -- Binary operators -- template GLM_FUNC_DECL mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m, T const& s); template GLM_FUNC_DECL mat<4, 4, T, Q> operator+(T const& s, mat<4, 4, T, Q> const& m); template GLM_FUNC_DECL mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); template GLM_FUNC_DECL mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m, T const& s); template GLM_FUNC_DECL mat<4, 4, T, Q> operator-(T const& s, mat<4, 4, T, Q> const& m); template GLM_FUNC_DECL mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); template GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m, T const& s); template GLM_FUNC_DECL mat<4, 4, T, Q> operator*(T const& s, mat<4, 4, T, Q> const& m); template GLM_FUNC_DECL typename mat<4, 4, T, Q>::col_type operator*(mat<4, 4, T, Q> const& m, typename mat<4, 4, T, Q>::row_type const& v); template GLM_FUNC_DECL typename mat<4, 4, T, Q>::row_type operator*(typename mat<4, 4, T, Q>::col_type const& v, mat<4, 4, T, Q> const& m); template GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); template GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); template GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); template GLM_FUNC_DECL mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m, T const& s); template GLM_FUNC_DECL mat<4, 4, T, Q> operator/(T const& s, mat<4, 4, T, Q> const& m); template GLM_FUNC_DECL typename mat<4, 4, T, Q>::col_type operator/(mat<4, 4, T, Q> const& m, typename mat<4, 4, T, Q>::row_type const& v); template GLM_FUNC_DECL typename mat<4, 4, T, Q>::row_type operator/(typename mat<4, 4, T, Q>::col_type const& v, mat<4, 4, T, Q> const& m); template GLM_FUNC_DECL mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); // -- Boolean operators -- template GLM_FUNC_DECL bool operator==(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); template GLM_FUNC_DECL bool operator!=(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); }//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE #include "type_mat4x4.inl" #endif//GLM_EXTERNAL_TEMPLATE ================================================ FILE: libraries/glm/detail/type_mat4x4.inl ================================================ #include "../matrix.hpp" namespace glm { // -- Constructors -- # if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat() # if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST : value{col_type(1, 0, 0, 0), col_type(0, 1, 0, 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)} # endif { # if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION this->value[0] = col_type(1, 0, 0, 0); this->value[1] = col_type(0, 1, 0, 0); this->value[2] = col_type(0, 0, 1, 0); this->value[3] = col_type(0, 0, 0, 1); # endif } # endif template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 4, T, P> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = m[0]; this->value[1] = m[1]; this->value[2] = m[2]; this->value[3] = m[3]; # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(T const& s) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(s, 0, 0, 0), col_type(0, s, 0, 0), col_type(0, 0, s, 0), col_type(0, 0, 0, s)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(s, 0, 0, 0); this->value[1] = col_type(0, s, 0, 0); this->value[2] = col_type(0, 0, s, 0); this->value[3] = col_type(0, 0, 0, s); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat ( T const& x0, T const& y0, T const& z0, T const& w0, T const& x1, T const& y1, T const& z1, T const& w1, T const& x2, T const& y2, T const& z2, T const& w2, T const& x3, T const& y3, T const& z3, T const& w3 ) # if GLM_HAS_INITIALIZER_LISTS : value{ col_type(x0, y0, z0, w0), col_type(x1, y1, z1, w1), col_type(x2, y2, z2, w2), col_type(x3, y3, z3, w3)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(x0, y0, z0, w0); this->value[1] = col_type(x1, y1, z1, w1); this->value[2] = col_type(x2, y2, z2, w2); this->value[3] = col_type(x3, y3, z3, w3); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2, col_type const& v3) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = v0; this->value[1] = v1; this->value[2] = v2; this->value[3] = v3; # endif } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 4, U, P> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0]); this->value[1] = col_type(m[1]); this->value[2] = col_type(m[2]); this->value[3] = col_type(m[3]); # endif } // -- Conversions -- template template< typename X1, typename Y1, typename Z1, typename W1, typename X2, typename Y2, typename Z2, typename W2, typename X3, typename Y3, typename Z3, typename W3, typename X4, typename Y4, typename Z4, typename W4> GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat ( X1 const& x1, Y1 const& y1, Z1 const& z1, W1 const& w1, X2 const& x2, Y2 const& y2, Z2 const& z2, W2 const& w2, X3 const& x3, Y3 const& y3, Z3 const& z3, W3 const& w3, X4 const& x4, Y4 const& y4, Z4 const& z4, W4 const& w4 ) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(x1, y1, z1, w1), col_type(x2, y2, z2, w2), col_type(x3, y3, z3, w3), col_type(x4, y4, z4, w4)} # endif { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 1st parameter type invalid."); GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 2nd parameter type invalid."); GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 3rd parameter type invalid."); GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 4th parameter type invalid."); GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 5th parameter type invalid."); GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 6th parameter type invalid."); GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 7th parameter type invalid."); GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 8th parameter type invalid."); GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 9th parameter type invalid."); GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 10th parameter type invalid."); GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 11th parameter type invalid."); GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 12th parameter type invalid."); GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 13th parameter type invalid."); GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 14th parameter type invalid."); GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 15th parameter type invalid."); GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 16th parameter type invalid."); # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(x1, y1, z1, w1); this->value[1] = col_type(x2, y2, z2, w2); this->value[2] = col_type(x3, y3, z3, w3); this->value[3] = col_type(x4, y4, z4, w4); # endif } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(vec<4, V1, Q> const& v1, vec<4, V2, Q> const& v2, vec<4, V3, Q> const& v3, vec<4, V4, Q> const& v4) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(v1), col_type(v2), col_type(v3), col_type(v4)} # endif { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 1st parameter type invalid."); GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 2nd parameter type invalid."); GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 3rd parameter type invalid."); GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 4th parameter type invalid."); # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(v1); this->value[1] = col_type(v2); this->value[2] = col_type(v3); this->value[3] = col_type(v4); # endif } // -- Matrix conversions -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<2, 2, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0], 0, 0); this->value[1] = col_type(m[1], 0, 0); this->value[2] = col_type(0, 0, 1, 0); this->value[3] = col_type(0, 0, 0, 1); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<3, 3, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0), col_type(0, 0, 0, 1)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); this->value[2] = col_type(m[2], 0); this->value[3] = col_type(0, 0, 0, 1); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<2, 3, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); this->value[2] = col_type(0, 0, 1, 0); this->value[3] = col_type(0, 0, 0, 1); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<3, 2, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(m[2], 1, 0), col_type(0, 0, 0, 1)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0], 0, 0); this->value[1] = col_type(m[1], 0, 0); this->value[2] = col_type(m[2], 1, 0); this->value[3] = col_type(0, 0, 0, 1); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<2, 4, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = m[0]; this->value[1] = m[1]; this->value[2] = col_type(0, 0, 1, 0); this->value[3] = col_type(0, 0, 0, 1); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 2, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0], 0, 0); this->value[1] = col_type(m[1], 0, 0); this->value[2] = col_type(0, 0, 1, 0); this->value[3] = col_type(0, 0, 0, 1); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<3, 4, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0, 0, 0, 1)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = m[0]; this->value[1] = m[1]; this->value[2] = m[2]; this->value[3] = col_type(0, 0, 0, 1); # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 3, T, Q> const& m) # if GLM_HAS_INITIALIZER_LISTS : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0), col_type(m[3], 1)} # endif { # if !GLM_HAS_INITIALIZER_LISTS this->value[0] = col_type(m[0], 0); this->value[1] = col_type(m[1], 0); this->value[2] = col_type(m[2], 0); this->value[3] = col_type(m[3], 1); # endif } // -- Accesses -- template GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::col_type & mat<4, 4, T, Q>::operator[](typename mat<4, 4, T, Q>::length_type i) { assert(i < this->length()); return this->value[i]; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<4, 4, T, Q>::col_type const& mat<4, 4, T, Q>::operator[](typename mat<4, 4, T, Q>::length_type i) const { assert(i < this->length()); return this->value[i]; } // -- Unary arithmetic operators -- template template GLM_FUNC_QUALIFIER mat<4, 4, T, Q>& mat<4, 4, T, Q>::operator=(mat<4, 4, U, Q> const& m) { //memcpy could be faster //memcpy(&this->value, &m.value, 16 * sizeof(valType)); this->value[0] = m[0]; this->value[1] = m[1]; this->value[2] = m[2]; this->value[3] = m[3]; return *this; } template template GLM_FUNC_QUALIFIER mat<4, 4, T, Q>& mat<4, 4, T, Q>::operator+=(U s) { this->value[0] += s; this->value[1] += s; this->value[2] += s; this->value[3] += s; return *this; } template template GLM_FUNC_QUALIFIER mat<4, 4, T, Q>& mat<4, 4, T, Q>::operator+=(mat<4, 4, U, Q> const& m) { this->value[0] += m[0]; this->value[1] += m[1]; this->value[2] += m[2]; this->value[3] += m[3]; return *this; } template template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator-=(U s) { this->value[0] -= s; this->value[1] -= s; this->value[2] -= s; this->value[3] -= s; return *this; } template template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator-=(mat<4, 4, U, Q> const& m) { this->value[0] -= m[0]; this->value[1] -= m[1]; this->value[2] -= m[2]; this->value[3] -= m[3]; return *this; } template template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator*=(U s) { this->value[0] *= s; this->value[1] *= s; this->value[2] *= s; this->value[3] *= s; return *this; } template template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator*=(mat<4, 4, U, Q> const& m) { return (*this = *this * m); } template template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator/=(U s) { this->value[0] /= s; this->value[1] /= s; this->value[2] /= s; this->value[3] /= s; return *this; } template template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator/=(mat<4, 4, U, Q> const& m) { return *this *= inverse(m); } // -- Increment and decrement operators -- template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator++() { ++this->value[0]; ++this->value[1]; ++this->value[2]; ++this->value[3]; return *this; } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator--() { --this->value[0]; --this->value[1]; --this->value[2]; --this->value[3]; return *this; } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> mat<4, 4, T, Q>::operator++(int) { mat<4, 4, T, Q> Result(*this); ++*this; return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> mat<4, 4, T, Q>::operator--(int) { mat<4, 4, T, Q> Result(*this); --*this; return Result; } // -- Unary constant operators -- template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m) { return m; } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m) { return mat<4, 4, T, Q>( -m[0], -m[1], -m[2], -m[3]); } // -- Binary arithmetic operators -- template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m, T const& s) { return mat<4, 4, T, Q>( m[0] + s, m[1] + s, m[2] + s, m[3] + s); } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(T const& s, mat<4, 4, T, Q> const& m) { return mat<4, 4, T, Q>( m[0] + s, m[1] + s, m[2] + s, m[3] + s); } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) { return mat<4, 4, T, Q>( m1[0] + m2[0], m1[1] + m2[1], m1[2] + m2[2], m1[3] + m2[3]); } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m, T const& s) { return mat<4, 4, T, Q>( m[0] - s, m[1] - s, m[2] - s, m[3] - s); } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(T const& s, mat<4, 4, T, Q> const& m) { return mat<4, 4, T, Q>( s - m[0], s - m[1], s - m[2], s - m[3]); } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) { return mat<4, 4, T, Q>( m1[0] - m2[0], m1[1] - m2[1], m1[2] - m2[2], m1[3] - m2[3]); } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m, T const & s) { return mat<4, 4, T, Q>( m[0] * s, m[1] * s, m[2] * s, m[3] * s); } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(T const& s, mat<4, 4, T, Q> const& m) { return mat<4, 4, T, Q>( m[0] * s, m[1] * s, m[2] * s, m[3] * s); } template GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::col_type operator* ( mat<4, 4, T, Q> const& m, typename mat<4, 4, T, Q>::row_type const& v ) { /* __m128 v0 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(0, 0, 0, 0)); __m128 v1 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(1, 1, 1, 1)); __m128 v2 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(2, 2, 2, 2)); __m128 v3 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(3, 3, 3, 3)); __m128 m0 = _mm_mul_ps(m[0].data, v0); __m128 m1 = _mm_mul_ps(m[1].data, v1); __m128 a0 = _mm_add_ps(m0, m1); __m128 m2 = _mm_mul_ps(m[2].data, v2); __m128 m3 = _mm_mul_ps(m[3].data, v3); __m128 a1 = _mm_add_ps(m2, m3); __m128 a2 = _mm_add_ps(a0, a1); return typename mat<4, 4, T, Q>::col_type(a2); */ typename mat<4, 4, T, Q>::col_type const Mov0(v[0]); typename mat<4, 4, T, Q>::col_type const Mov1(v[1]); typename mat<4, 4, T, Q>::col_type const Mul0 = m[0] * Mov0; typename mat<4, 4, T, Q>::col_type const Mul1 = m[1] * Mov1; typename mat<4, 4, T, Q>::col_type const Add0 = Mul0 + Mul1; typename mat<4, 4, T, Q>::col_type const Mov2(v[2]); typename mat<4, 4, T, Q>::col_type const Mov3(v[3]); typename mat<4, 4, T, Q>::col_type const Mul2 = m[2] * Mov2; typename mat<4, 4, T, Q>::col_type const Mul3 = m[3] * Mov3; typename mat<4, 4, T, Q>::col_type const Add1 = Mul2 + Mul3; typename mat<4, 4, T, Q>::col_type const Add2 = Add0 + Add1; return Add2; /* return typename mat<4, 4, T, Q>::col_type( m[0][0] * v[0] + m[1][0] * v[1] + m[2][0] * v[2] + m[3][0] * v[3], m[0][1] * v[0] + m[1][1] * v[1] + m[2][1] * v[2] + m[3][1] * v[3], m[0][2] * v[0] + m[1][2] * v[1] + m[2][2] * v[2] + m[3][2] * v[3], m[0][3] * v[0] + m[1][3] * v[1] + m[2][3] * v[2] + m[3][3] * v[3]); */ } template GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::row_type operator* ( typename mat<4, 4, T, Q>::col_type const& v, mat<4, 4, T, Q> const& m ) { return typename mat<4, 4, T, Q>::row_type( m[0][0] * v[0] + m[0][1] * v[1] + m[0][2] * v[2] + m[0][3] * v[3], m[1][0] * v[0] + m[1][1] * v[1] + m[1][2] * v[2] + m[1][3] * v[3], m[2][0] * v[0] + m[2][1] * v[1] + m[2][2] * v[2] + m[2][3] * v[3], m[3][0] * v[0] + m[3][1] * v[1] + m[3][2] * v[2] + m[3][3] * v[3]); } template GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) { return mat<2, 4, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3], m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2] + m1[3][3] * m2[0][3], m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3], m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2] + m1[3][3] * m2[1][3]); } template GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) { return mat<3, 4, T, Q>( m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3], m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2] + m1[3][3] * m2[0][3], m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3], m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2] + m1[3][3] * m2[1][3], m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3], m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3], m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2] + m1[3][2] * m2[2][3], m1[0][3] * m2[2][0] + m1[1][3] * m2[2][1] + m1[2][3] * m2[2][2] + m1[3][3] * m2[2][3]); } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) { typename mat<4, 4, T, Q>::col_type const SrcA0 = m1[0]; typename mat<4, 4, T, Q>::col_type const SrcA1 = m1[1]; typename mat<4, 4, T, Q>::col_type const SrcA2 = m1[2]; typename mat<4, 4, T, Q>::col_type const SrcA3 = m1[3]; typename mat<4, 4, T, Q>::col_type const SrcB0 = m2[0]; typename mat<4, 4, T, Q>::col_type const SrcB1 = m2[1]; typename mat<4, 4, T, Q>::col_type const SrcB2 = m2[2]; typename mat<4, 4, T, Q>::col_type const SrcB3 = m2[3]; mat<4, 4, T, Q> Result; Result[0] = SrcA0 * SrcB0[0] + SrcA1 * SrcB0[1] + SrcA2 * SrcB0[2] + SrcA3 * SrcB0[3]; Result[1] = SrcA0 * SrcB1[0] + SrcA1 * SrcB1[1] + SrcA2 * SrcB1[2] + SrcA3 * SrcB1[3]; Result[2] = SrcA0 * SrcB2[0] + SrcA1 * SrcB2[1] + SrcA2 * SrcB2[2] + SrcA3 * SrcB2[3]; Result[3] = SrcA0 * SrcB3[0] + SrcA1 * SrcB3[1] + SrcA2 * SrcB3[2] + SrcA3 * SrcB3[3]; return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m, T const& s) { return mat<4, 4, T, Q>( m[0] / s, m[1] / s, m[2] / s, m[3] / s); } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator/(T const& s, mat<4, 4, T, Q> const& m) { return mat<4, 4, T, Q>( s / m[0], s / m[1], s / m[2], s / m[3]); } template GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::col_type operator/(mat<4, 4, T, Q> const& m, typename mat<4, 4, T, Q>::row_type const& v) { return inverse(m) * v; } template GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::row_type operator/(typename mat<4, 4, T, Q>::col_type const& v, mat<4, 4, T, Q> const& m) { return v * inverse(m); } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) { mat<4, 4, T, Q> m1_copy(m1); return m1_copy /= m2; } // -- Boolean operators -- template GLM_FUNC_QUALIFIER bool operator==(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) { return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]); } template GLM_FUNC_QUALIFIER bool operator!=(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) { return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]); } }//namespace glm #if GLM_CONFIG_SIMD == GLM_ENABLE # include "type_mat4x4_simd.inl" #endif ================================================ FILE: libraries/glm/detail/type_mat4x4_simd.inl ================================================ /// @ref core namespace glm { }//namespace glm ================================================ FILE: libraries/glm/detail/type_quat.hpp ================================================ /// @ref core /// @file glm/detail/type_quat.hpp #pragma once // Dependency: #include "../detail/type_mat3x3.hpp" #include "../detail/type_mat4x4.hpp" #include "../detail/type_vec3.hpp" #include "../detail/type_vec4.hpp" #include "../ext/vector_relational.hpp" #include "../ext/quaternion_relational.hpp" #include "../gtc/constants.hpp" #include "../gtc/matrix_transform.hpp" namespace glm { template struct qua { // -- Implementation detail -- typedef qua type; typedef T value_type; // -- Data -- # if GLM_SILENT_WARNINGS == GLM_ENABLE # if GLM_COMPILER & GLM_COMPILER_GCC # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wpedantic" # elif GLM_COMPILER & GLM_COMPILER_CLANG # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wgnu-anonymous-struct" # pragma clang diagnostic ignored "-Wnested-anon-types" # elif GLM_COMPILER & GLM_COMPILER_VC # pragma warning(push) # pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union # endif # endif # if GLM_LANG & GLM_LANG_CXXMS_FLAG union { # ifdef GLM_FORCE_QUAT_DATA_WXYZ struct { T w, x, y, z; }; # else struct { T x, y, z, w; }; # endif typename detail::storage<4, T, detail::is_aligned::value>::type data; }; # else # ifdef GLM_FORCE_QUAT_DATA_WXYZ T w, x, y, z; # else T x, y, z, w; # endif # endif # if GLM_SILENT_WARNINGS == GLM_ENABLE # if GLM_COMPILER & GLM_COMPILER_CLANG # pragma clang diagnostic pop # elif GLM_COMPILER & GLM_COMPILER_GCC # pragma GCC diagnostic pop # elif GLM_COMPILER & GLM_COMPILER_VC # pragma warning(pop) # endif # endif // -- Component accesses -- typedef length_t length_type; /// Return the count of components of a quaternion GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 4;} GLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i); GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const; // -- Implicit basic constructors -- GLM_FUNC_DECL GLM_CONSTEXPR qua() GLM_DEFAULT; GLM_FUNC_DECL GLM_CONSTEXPR qua(qua const& q) GLM_DEFAULT; template GLM_FUNC_DECL GLM_CONSTEXPR qua(qua const& q); // -- Explicit basic constructors -- GLM_FUNC_DECL GLM_CONSTEXPR qua(T s, vec<3, T, Q> const& v); GLM_FUNC_DECL GLM_CONSTEXPR qua(T w, T x, T y, T z); // -- Conversion constructors -- template GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT qua(qua const& q); /// Explicit conversion operators # if GLM_HAS_EXPLICIT_CONVERSION_OPERATORS GLM_FUNC_DECL explicit operator mat<3, 3, T, Q>() const; GLM_FUNC_DECL explicit operator mat<4, 4, T, Q>() const; # endif /// Create a quaternion from two normalized axis /// /// @param u A first normalized axis /// @param v A second normalized axis /// @see gtc_quaternion /// @see http://lolengine.net/blog/2013/09/18/beautiful-maths-quaternion-from-vectors GLM_FUNC_DECL qua(vec<3, T, Q> const& u, vec<3, T, Q> const& v); /// Build a quaternion from euler angles (pitch, yaw, roll), in radians. GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT qua(vec<3, T, Q> const& eulerAngles); GLM_FUNC_DECL GLM_EXPLICIT qua(mat<3, 3, T, Q> const& q); GLM_FUNC_DECL GLM_EXPLICIT qua(mat<4, 4, T, Q> const& q); // -- Unary arithmetic operators -- GLM_FUNC_DECL GLM_CONSTEXPR qua& operator=(qua const& q) GLM_DEFAULT; template GLM_FUNC_DECL GLM_CONSTEXPR qua& operator=(qua const& q); template GLM_FUNC_DECL GLM_CONSTEXPR qua& operator+=(qua const& q); template GLM_FUNC_DECL GLM_CONSTEXPR qua& operator-=(qua const& q); template GLM_FUNC_DECL GLM_CONSTEXPR qua& operator*=(qua const& q); template GLM_FUNC_DECL GLM_CONSTEXPR qua& operator*=(U s); template GLM_FUNC_DECL GLM_CONSTEXPR qua& operator/=(U s); }; // -- Unary bit operators -- template GLM_FUNC_DECL GLM_CONSTEXPR qua operator+(qua const& q); template GLM_FUNC_DECL GLM_CONSTEXPR qua operator-(qua const& q); // -- Binary operators -- template GLM_FUNC_DECL GLM_CONSTEXPR qua operator+(qua const& q, qua const& p); template GLM_FUNC_DECL GLM_CONSTEXPR qua operator-(qua const& q, qua const& p); template GLM_FUNC_DECL GLM_CONSTEXPR qua operator*(qua const& q, qua const& p); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(qua const& q, vec<3, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, qua const& q); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(qua const& q, vec<4, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, qua const& q); template GLM_FUNC_DECL GLM_CONSTEXPR qua operator*(qua const& q, T const& s); template GLM_FUNC_DECL GLM_CONSTEXPR qua operator*(T const& s, qua const& q); template GLM_FUNC_DECL GLM_CONSTEXPR qua operator/(qua const& q, T const& s); // -- Boolean operators -- template GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(qua const& q1, qua const& q2); template GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(qua const& q1, qua const& q2); } //namespace glm #ifndef GLM_EXTERNAL_TEMPLATE #include "type_quat.inl" #endif//GLM_EXTERNAL_TEMPLATE ================================================ FILE: libraries/glm/detail/type_quat.inl ================================================ #include "../trigonometric.hpp" #include "../exponential.hpp" #include "../ext/quaternion_geometric.hpp" #include namespace glm{ namespace detail { template struct genTypeTrait > { static const genTypeEnum GENTYPE = GENTYPE_QUAT; }; template struct compute_dot, T, Aligned> { GLM_FUNC_QUALIFIER GLM_CONSTEXPR static T call(qua const& a, qua const& b) { vec<4, T, Q> tmp(a.w * b.w, a.x * b.x, a.y * b.y, a.z * b.z); return (tmp.x + tmp.y) + (tmp.z + tmp.w); } }; template struct compute_quat_add { GLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua call(qua const& q, qua const& p) { return qua(q.w + p.w, q.x + p.x, q.y + p.y, q.z + p.z); } }; template struct compute_quat_sub { GLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua call(qua const& q, qua const& p) { return qua(q.w - p.w, q.x - p.x, q.y - p.y, q.z - p.z); } }; template struct compute_quat_mul_scalar { GLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua call(qua const& q, T s) { return qua(q.w * s, q.x * s, q.y * s, q.z * s); } }; template struct compute_quat_div_scalar { GLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua call(qua const& q, T s) { return qua(q.w / s, q.x / s, q.y / s, q.z / s); } }; template struct compute_quat_mul_vec4 { GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(qua const& q, vec<4, T, Q> const& v) { return vec<4, T, Q>(q * vec<3, T, Q>(v), v.w); } }; }//namespace detail // -- Component accesses -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR T & qua::operator[](typename qua::length_type i) { assert(i >= 0 && i < this->length()); # ifdef GLM_FORCE_QUAT_DATA_WXYZ return (&w)[i]; # else return (&x)[i]; # endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& qua::operator[](typename qua::length_type i) const { assert(i >= 0 && i < this->length()); # ifdef GLM_FORCE_QUAT_DATA_WXYZ return (&w)[i]; # else return (&x)[i]; # endif } // -- Implicit basic constructors -- # if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE template GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua() # if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE # ifdef GLM_FORCE_QUAT_DATA_WXYZ : w(1), x(0), y(0), z(0) # else : x(0), y(0), z(0), w(1) # endif # endif {} template GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua(qua const& q) # ifdef GLM_FORCE_QUAT_DATA_WXYZ : w(q.w), x(q.x), y(q.y), z(q.z) # else : x(q.x), y(q.y), z(q.z), w(q.w) # endif {} # endif template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua(qua const& q) # ifdef GLM_FORCE_QUAT_DATA_WXYZ : w(q.w), x(q.x), y(q.y), z(q.z) # else : x(q.x), y(q.y), z(q.z), w(q.w) # endif {} // -- Explicit basic constructors -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua(T s, vec<3, T, Q> const& v) # ifdef GLM_FORCE_QUAT_DATA_WXYZ : w(s), x(v.x), y(v.y), z(v.z) # else : x(v.x), y(v.y), z(v.z), w(s) # endif {} template GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua(T _w, T _x, T _y, T _z) # ifdef GLM_FORCE_QUAT_DATA_WXYZ : w(_w), x(_x), y(_y), z(_z) # else : x(_x), y(_y), z(_z), w(_w) # endif {} // -- Conversion constructors -- template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua(qua const& q) # ifdef GLM_FORCE_QUAT_DATA_WXYZ : w(static_cast(q.w)), x(static_cast(q.x)), y(static_cast(q.y)), z(static_cast(q.z)) # else : x(static_cast(q.x)), y(static_cast(q.y)), z(static_cast(q.z)), w(static_cast(q.w)) # endif {} //template //GLM_FUNC_QUALIFIER qua::qua //( // valType const& pitch, // valType const& yaw, // valType const& roll //) //{ // vec<3, valType> eulerAngle(pitch * valType(0.5), yaw * valType(0.5), roll * valType(0.5)); // vec<3, valType> c = glm::cos(eulerAngle * valType(0.5)); // vec<3, valType> s = glm::sin(eulerAngle * valType(0.5)); // // this->w = c.x * c.y * c.z + s.x * s.y * s.z; // this->x = s.x * c.y * c.z - c.x * s.y * s.z; // this->y = c.x * s.y * c.z + s.x * c.y * s.z; // this->z = c.x * c.y * s.z - s.x * s.y * c.z; //} template GLM_FUNC_QUALIFIER qua::qua(vec<3, T, Q> const& u, vec<3, T, Q> const& v) { T norm_u_norm_v = sqrt(dot(u, u) * dot(v, v)); T real_part = norm_u_norm_v + dot(u, v); vec<3, T, Q> t; if(real_part < static_cast(1.e-6f) * norm_u_norm_v) { // If u and v are exactly opposite, rotate 180 degrees // around an arbitrary orthogonal axis. Axis normalisation // can happen later, when we normalise the quaternion. real_part = static_cast(0); t = abs(u.x) > abs(u.z) ? vec<3, T, Q>(-u.y, u.x, static_cast(0)) : vec<3, T, Q>(static_cast(0), -u.z, u.y); } else { // Otherwise, build quaternion the standard way. t = cross(u, v); } *this = normalize(qua(real_part, t.x, t.y, t.z)); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua(vec<3, T, Q> const& eulerAngle) { vec<3, T, Q> c = glm::cos(eulerAngle * T(0.5)); vec<3, T, Q> s = glm::sin(eulerAngle * T(0.5)); this->w = c.x * c.y * c.z + s.x * s.y * s.z; this->x = s.x * c.y * c.z - c.x * s.y * s.z; this->y = c.x * s.y * c.z + s.x * c.y * s.z; this->z = c.x * c.y * s.z - s.x * s.y * c.z; } template GLM_FUNC_QUALIFIER qua::qua(mat<3, 3, T, Q> const& m) { *this = quat_cast(m); } template GLM_FUNC_QUALIFIER qua::qua(mat<4, 4, T, Q> const& m) { *this = quat_cast(m); } # if GLM_HAS_EXPLICIT_CONVERSION_OPERATORS template GLM_FUNC_QUALIFIER qua::operator mat<3, 3, T, Q>() const { return mat3_cast(*this); } template GLM_FUNC_QUALIFIER qua::operator mat<4, 4, T, Q>() const { return mat4_cast(*this); } # endif//GLM_HAS_EXPLICIT_CONVERSION_OPERATORS // -- Unary arithmetic operators -- # if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE template GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator=(qua const& q) { this->w = q.w; this->x = q.x; this->y = q.y; this->z = q.z; return *this; } # endif template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator=(qua const& q) { this->w = static_cast(q.w); this->x = static_cast(q.x); this->y = static_cast(q.y); this->z = static_cast(q.z); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator+=(qua const& q) { return (*this = detail::compute_quat_add::value>::call(*this, qua(q))); } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator-=(qua const& q) { return (*this = detail::compute_quat_sub::value>::call(*this, qua(q))); } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator*=(qua const& r) { qua const p(*this); qua const q(r); this->w = p.w * q.w - p.x * q.x - p.y * q.y - p.z * q.z; this->x = p.w * q.x + p.x * q.w + p.y * q.z - p.z * q.y; this->y = p.w * q.y + p.y * q.w + p.z * q.x - p.x * q.z; this->z = p.w * q.z + p.z * q.w + p.x * q.y - p.y * q.x; return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator*=(U s) { return (*this = detail::compute_quat_mul_scalar::value>::call(*this, static_cast(s))); } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator/=(U s) { return (*this = detail::compute_quat_div_scalar::value>::call(*this, static_cast(s))); } // -- Unary bit operators -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator+(qua const& q) { return q; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator-(qua const& q) { return qua(-q.w, -q.x, -q.y, -q.z); } // -- Binary operators -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator+(qua const& q, qua const& p) { return qua(q) += p; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator-(qua const& q, qua const& p) { return qua(q) -= p; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator*(qua const& q, qua const& p) { return qua(q) *= p; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(qua const& q, vec<3, T, Q> const& v) { vec<3, T, Q> const QuatVector(q.x, q.y, q.z); vec<3, T, Q> const uv(glm::cross(QuatVector, v)); vec<3, T, Q> const uuv(glm::cross(QuatVector, uv)); return v + ((uv * q.w) + uuv) * static_cast(2); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, qua const& q) { return glm::inverse(q) * v; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(qua const& q, vec<4, T, Q> const& v) { return detail::compute_quat_mul_vec4::value>::call(q, v); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, qua const& q) { return glm::inverse(q) * v; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator*(qua const& q, T const& s) { return qua( q.w * s, q.x * s, q.y * s, q.z * s); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator*(T const& s, qua const& q) { return q * s; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator/(qua const& q, T const& s) { return qua( q.w / s, q.x / s, q.y / s, q.z / s); } // -- Boolean operators -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(qua const& q1, qua const& q2) { return q1.x == q2.x && q1.y == q2.y && q1.z == q2.z && q1.w == q2.w; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(qua const& q1, qua const& q2) { return q1.x != q2.x || q1.y != q2.y || q1.z != q2.z || q1.w != q2.w; } }//namespace glm #if GLM_CONFIG_SIMD == GLM_ENABLE # include "type_quat_simd.inl" #endif ================================================ FILE: libraries/glm/detail/type_quat_simd.inl ================================================ /// @ref core #if GLM_ARCH & GLM_ARCH_SSE2_BIT namespace glm{ namespace detail { /* template struct compute_quat_mul { static qua call(qua const& q1, qua const& q2) { // SSE2 STATS: 11 shuffle, 8 mul, 8 add // SSE4 STATS: 3 shuffle, 4 mul, 4 dpps __m128 const mul0 = _mm_mul_ps(q1.Data, _mm_shuffle_ps(q2.Data, q2.Data, _MM_SHUFFLE(0, 1, 2, 3))); __m128 const mul1 = _mm_mul_ps(q1.Data, _mm_shuffle_ps(q2.Data, q2.Data, _MM_SHUFFLE(1, 0, 3, 2))); __m128 const mul2 = _mm_mul_ps(q1.Data, _mm_shuffle_ps(q2.Data, q2.Data, _MM_SHUFFLE(2, 3, 0, 1))); __m128 const mul3 = _mm_mul_ps(q1.Data, q2.Data); # if GLM_ARCH & GLM_ARCH_SSE41_BIT __m128 const add0 = _mm_dp_ps(mul0, _mm_set_ps(1.0f, -1.0f, 1.0f, 1.0f), 0xff); __m128 const add1 = _mm_dp_ps(mul1, _mm_set_ps(1.0f, 1.0f, 1.0f, -1.0f), 0xff); __m128 const add2 = _mm_dp_ps(mul2, _mm_set_ps(1.0f, 1.0f, -1.0f, 1.0f), 0xff); __m128 const add3 = _mm_dp_ps(mul3, _mm_set_ps(1.0f, -1.0f, -1.0f, -1.0f), 0xff); # else __m128 const mul4 = _mm_mul_ps(mul0, _mm_set_ps(1.0f, -1.0f, 1.0f, 1.0f)); __m128 const add0 = _mm_add_ps(mul0, _mm_movehl_ps(mul4, mul4)); __m128 const add4 = _mm_add_ss(add0, _mm_shuffle_ps(add0, add0, 1)); __m128 const mul5 = _mm_mul_ps(mul1, _mm_set_ps(1.0f, 1.0f, 1.0f, -1.0f)); __m128 const add1 = _mm_add_ps(mul1, _mm_movehl_ps(mul5, mul5)); __m128 const add5 = _mm_add_ss(add1, _mm_shuffle_ps(add1, add1, 1)); __m128 const mul6 = _mm_mul_ps(mul2, _mm_set_ps(1.0f, 1.0f, -1.0f, 1.0f)); __m128 const add2 = _mm_add_ps(mul6, _mm_movehl_ps(mul6, mul6)); __m128 const add6 = _mm_add_ss(add2, _mm_shuffle_ps(add2, add2, 1)); __m128 const mul7 = _mm_mul_ps(mul3, _mm_set_ps(1.0f, -1.0f, -1.0f, -1.0f)); __m128 const add3 = _mm_add_ps(mul3, _mm_movehl_ps(mul7, mul7)); __m128 const add7 = _mm_add_ss(add3, _mm_shuffle_ps(add3, add3, 1)); #endif // This SIMD code is a politically correct way of doing this, but in every test I've tried it has been slower than // the final code below. I'll keep this here for reference - maybe somebody else can do something better... // //__m128 xxyy = _mm_shuffle_ps(add4, add5, _MM_SHUFFLE(0, 0, 0, 0)); //__m128 zzww = _mm_shuffle_ps(add6, add7, _MM_SHUFFLE(0, 0, 0, 0)); // //return _mm_shuffle_ps(xxyy, zzww, _MM_SHUFFLE(2, 0, 2, 0)); qua Result; _mm_store_ss(&Result.x, add4); _mm_store_ss(&Result.y, add5); _mm_store_ss(&Result.z, add6); _mm_store_ss(&Result.w, add7); return Result; } }; */ template struct compute_quat_add { static qua call(qua const& q, qua const& p) { qua Result; Result.data = _mm_add_ps(q.data, p.data); return Result; } }; # if GLM_ARCH & GLM_ARCH_AVX_BIT template struct compute_quat_add { static qua call(qua const& a, qua const& b) { qua Result; Result.data = _mm256_add_pd(a.data, b.data); return Result; } }; # endif template struct compute_quat_sub { static qua call(qua const& q, qua const& p) { vec<4, float, Q> Result; Result.data = _mm_sub_ps(q.data, p.data); return Result; } }; # if GLM_ARCH & GLM_ARCH_AVX_BIT template struct compute_quat_sub { static qua call(qua const& a, qua const& b) { qua Result; Result.data = _mm256_sub_pd(a.data, b.data); return Result; } }; # endif template struct compute_quat_mul_scalar { static qua call(qua const& q, float s) { vec<4, float, Q> Result; Result.data = _mm_mul_ps(q.data, _mm_set_ps1(s)); return Result; } }; # if GLM_ARCH & GLM_ARCH_AVX_BIT template struct compute_quat_mul_scalar { static qua call(qua const& q, double s) { qua Result; Result.data = _mm256_mul_pd(q.data, _mm_set_ps1(s)); return Result; } }; # endif template struct compute_quat_div_scalar { static qua call(qua const& q, float s) { vec<4, float, Q> Result; Result.data = _mm_div_ps(q.data, _mm_set_ps1(s)); return Result; } }; # if GLM_ARCH & GLM_ARCH_AVX_BIT template struct compute_quat_div_scalar { static qua call(qua const& q, double s) { qua Result; Result.data = _mm256_div_pd(q.data, _mm_set_ps1(s)); return Result; } }; # endif template struct compute_quat_mul_vec4 { static vec<4, float, Q> call(qua const& q, vec<4, float, Q> const& v) { __m128 const q_wwww = _mm_shuffle_ps(q.data, q.data, _MM_SHUFFLE(3, 3, 3, 3)); __m128 const q_swp0 = _mm_shuffle_ps(q.data, q.data, _MM_SHUFFLE(3, 0, 2, 1)); __m128 const q_swp1 = _mm_shuffle_ps(q.data, q.data, _MM_SHUFFLE(3, 1, 0, 2)); __m128 const v_swp0 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(3, 0, 2, 1)); __m128 const v_swp1 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(3, 1, 0, 2)); __m128 uv = _mm_sub_ps(_mm_mul_ps(q_swp0, v_swp1), _mm_mul_ps(q_swp1, v_swp0)); __m128 uv_swp0 = _mm_shuffle_ps(uv, uv, _MM_SHUFFLE(3, 0, 2, 1)); __m128 uv_swp1 = _mm_shuffle_ps(uv, uv, _MM_SHUFFLE(3, 1, 0, 2)); __m128 uuv = _mm_sub_ps(_mm_mul_ps(q_swp0, uv_swp1), _mm_mul_ps(q_swp1, uv_swp0)); __m128 const two = _mm_set1_ps(2.0f); uv = _mm_mul_ps(uv, _mm_mul_ps(q_wwww, two)); uuv = _mm_mul_ps(uuv, two); vec<4, float, Q> Result; Result.data = _mm_add_ps(v.Data, _mm_add_ps(uv, uuv)); return Result; } }; }//namespace detail }//namespace glm #endif//GLM_ARCH & GLM_ARCH_SSE2_BIT ================================================ FILE: libraries/glm/detail/type_vec1.hpp ================================================ /// @ref core /// @file glm/detail/type_vec1.hpp #pragma once #include "qualifier.hpp" #if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR # include "_swizzle.hpp" #elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION # include "_swizzle_func.hpp" #endif #include namespace glm { template struct vec<1, T, Q> { // -- Implementation detail -- typedef T value_type; typedef vec<1, T, Q> type; typedef vec<1, bool, Q> bool_type; // -- Data -- # if GLM_SILENT_WARNINGS == GLM_ENABLE # if GLM_COMPILER & GLM_COMPILER_GCC # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wpedantic" # elif GLM_COMPILER & GLM_COMPILER_CLANG # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wgnu-anonymous-struct" # pragma clang diagnostic ignored "-Wnested-anon-types" # elif GLM_COMPILER & GLM_COMPILER_VC # pragma warning(push) # pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union # endif # endif # if GLM_CONFIG_XYZW_ONLY T x; # elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE union { T x; T r; T s; typename detail::storage<1, T, detail::is_aligned::value>::type data; /* # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR _GLM_SWIZZLE1_2_MEMBERS(T, Q, x) _GLM_SWIZZLE1_2_MEMBERS(T, Q, r) _GLM_SWIZZLE1_2_MEMBERS(T, Q, s) _GLM_SWIZZLE1_3_MEMBERS(T, Q, x) _GLM_SWIZZLE1_3_MEMBERS(T, Q, r) _GLM_SWIZZLE1_3_MEMBERS(T, Q, s) _GLM_SWIZZLE1_4_MEMBERS(T, Q, x) _GLM_SWIZZLE1_4_MEMBERS(T, Q, r) _GLM_SWIZZLE1_4_MEMBERS(T, Q, s) # endif */ }; # else union {T x, r, s;}; /* # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION GLM_SWIZZLE_GEN_VEC_FROM_VEC1(T, Q) # endif */ # endif # if GLM_SILENT_WARNINGS == GLM_ENABLE # if GLM_COMPILER & GLM_COMPILER_CLANG # pragma clang diagnostic pop # elif GLM_COMPILER & GLM_COMPILER_GCC # pragma GCC diagnostic pop # elif GLM_COMPILER & GLM_COMPILER_VC # pragma warning(pop) # endif # endif // -- Component accesses -- /// Return the count of components of the vector typedef length_t length_type; GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 1;} GLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i); GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const; // -- Implicit basic constructors -- GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT; GLM_FUNC_DECL GLM_CONSTEXPR vec(vec const& v) GLM_DEFAULT; template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, T, P> const& v); // -- Explicit basic constructors -- GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar); // -- Conversion vector constructors -- /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<2, U, P> const& v); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<3, U, P> const& v); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<1, U, P> const& v); // -- Swizzle constructors -- /* # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR template GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<1, T, Q, E0, -1,-2,-3> const& that) { *this = that(); } # endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR */ // -- Unary arithmetic operators -- GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator=(vec const& v) GLM_DEFAULT; template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator+=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator+=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator-=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator-=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator*=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator*=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator/=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator/=(vec<1, U, Q> const& v); // -- Increment and decrement operators -- GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator++(); GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator--(); GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator++(int); GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator--(int); // -- Unary bit operators -- template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator%=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator%=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator&=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator&=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator|=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator|=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator^=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator^=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator<<=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator<<=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator>>=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator>>=(vec<1, U, Q> const& v); }; // -- Unary operators -- template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v); // -- Binary operators -- template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(T scalar, vec<1, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(T scalar, vec<1, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator*(T scalar, vec<1, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator/(T scalar, vec<1, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator%(T scalar, vec<1, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator&(T scalar, vec<1, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator|(T scalar, vec<1, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator^(T scalar, vec<1, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator<<(T scalar, vec<1, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator>>(T scalar, vec<1, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator~(vec<1, T, Q> const& v); // -- Boolean operators -- template GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, bool, Q> operator&&(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<1, bool, Q> operator||(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2); }//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE #include "type_vec1.inl" #endif//GLM_EXTERNAL_TEMPLATE ================================================ FILE: libraries/glm/detail/type_vec1.inl ================================================ /// @ref core #include "./compute_vector_relational.hpp" namespace glm { // -- Implicit basic constructors -- # if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec() # if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE : x(0) # endif {} template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<1, T, Q> const& v) : x(v.x) {} # endif template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<1, T, P> const& v) : x(v.x) {} // -- Explicit basic constructors -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(T scalar) : x(scalar) {} // -- Conversion vector constructors -- template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<1, U, P> const& v) : x(static_cast(v.x)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<2, U, P> const& v) : x(static_cast(v.x)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<3, U, P> const& v) : x(static_cast(v.x)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<4, U, P> const& v) : x(static_cast(v.x)) {} // -- Component accesses -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR T & vec<1, T, Q>::operator[](typename vec<1, T, Q>::length_type) { return x; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<1, T, Q>::operator[](typename vec<1, T, Q>::length_type) const { return x; } // -- Unary arithmetic operators -- # if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator=(vec<1, T, Q> const& v) { this->x = v.x; return *this; } # endif template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator=(vec<1, U, Q> const& v) { this->x = static_cast(v.x); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator+=(U scalar) { this->x += static_cast(scalar); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator+=(vec<1, U, Q> const& v) { this->x += static_cast(v.x); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator-=(U scalar) { this->x -= static_cast(scalar); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator-=(vec<1, U, Q> const& v) { this->x -= static_cast(v.x); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator*=(U scalar) { this->x *= static_cast(scalar); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator*=(vec<1, U, Q> const& v) { this->x *= static_cast(v.x); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator/=(U scalar) { this->x /= static_cast(scalar); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator/=(vec<1, U, Q> const& v) { this->x /= static_cast(v.x); return *this; } // -- Increment and decrement operators -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator++() { ++this->x; return *this; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator--() { --this->x; return *this; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> vec<1, T, Q>::operator++(int) { vec<1, T, Q> Result(*this); ++*this; return Result; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> vec<1, T, Q>::operator--(int) { vec<1, T, Q> Result(*this); --*this; return Result; } // -- Unary bit operators -- template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator%=(U scalar) { this->x %= static_cast(scalar); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator%=(vec<1, U, Q> const& v) { this->x %= static_cast(v.x); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator&=(U scalar) { this->x &= static_cast(scalar); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator&=(vec<1, U, Q> const& v) { this->x &= static_cast(v.x); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator|=(U scalar) { this->x |= static_cast(scalar); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator|=(vec<1, U, Q> const& v) { this->x |= U(v.x); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator^=(U scalar) { this->x ^= static_cast(scalar); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator^=(vec<1, U, Q> const& v) { this->x ^= static_cast(v.x); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator<<=(U scalar) { this->x <<= static_cast(scalar); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator<<=(vec<1, U, Q> const& v) { this->x <<= static_cast(v.x); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator>>=(U scalar) { this->x >>= static_cast(scalar); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator>>=(vec<1, U, Q> const& v) { this->x >>= static_cast(v.x); return *this; } // -- Unary constant operators -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v) { return v; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v) { return vec<1, T, Q>( -v.x); } // -- Binary arithmetic operators -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v, T scalar) { return vec<1, T, Q>( v.x + scalar); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(T scalar, vec<1, T, Q> const& v) { return vec<1, T, Q>( scalar + v.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) { return vec<1, T, Q>( v1.x + v2.x); } //operator- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v, T scalar) { return vec<1, T, Q>( v.x - scalar); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(T scalar, vec<1, T, Q> const& v) { return vec<1, T, Q>( scalar - v.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) { return vec<1, T, Q>( v1.x - v2.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v, T scalar) { return vec<1, T, Q>( v.x * scalar); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(T scalar, vec<1, T, Q> const& v) { return vec<1, T, Q>( scalar * v.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) { return vec<1, T, Q>( v1.x * v2.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v, T scalar) { return vec<1, T, Q>( v.x / scalar); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator/(T scalar, vec<1, T, Q> const& v) { return vec<1, T, Q>( scalar / v.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) { return vec<1, T, Q>( v1.x / v2.x); } // -- Binary bit operators -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v, T scalar) { return vec<1, T, Q>( v.x % scalar); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator%(T scalar, vec<1, T, Q> const& v) { return vec<1, T, Q>( scalar % v.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) { return vec<1, T, Q>( v1.x % v2.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v, T scalar) { return vec<1, T, Q>( v.x & scalar); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(T scalar, vec<1, T, Q> const& v) { return vec<1, T, Q>( scalar & v.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) { return vec<1, T, Q>( v1.x & v2.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v, T scalar) { return vec<1, T, Q>( v.x | scalar); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(T scalar, vec<1, T, Q> const& v) { return vec<1, T, Q>( scalar | v.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) { return vec<1, T, Q>( v1.x | v2.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v, T scalar) { return vec<1, T, Q>( v.x ^ scalar); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(T scalar, vec<1, T, Q> const& v) { return vec<1, T, Q>( scalar ^ v.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) { return vec<1, T, Q>( v1.x ^ v2.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v, T scalar) { return vec<1, T, Q>( static_cast(v.x << scalar)); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator<<(T scalar, vec<1, T, Q> const& v) { return vec<1, T, Q>( scalar << v.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) { return vec<1, T, Q>( v1.x << v2.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v, T scalar) { return vec<1, T, Q>( v.x >> scalar); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator>>(T scalar, vec<1, T, Q> const& v) { return vec<1, T, Q>( scalar >> v.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) { return vec<1, T, Q>( v1.x >> v2.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator~(vec<1, T, Q> const& v) { return vec<1, T, Q>( ~v.x); } // -- Boolean operators -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) { return detail::compute_equal::is_iec559>::call(v1.x, v2.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) { return !(v1 == v2); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, bool, Q> operator&&(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2) { return vec<1, bool, Q>(v1.x && v2.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, bool, Q> operator||(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2) { return vec<1, bool, Q>(v1.x || v2.x); } }//namespace glm ================================================ FILE: libraries/glm/detail/type_vec2.hpp ================================================ /// @ref core /// @file glm/detail/type_vec2.hpp #pragma once #include "qualifier.hpp" #if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR # include "_swizzle.hpp" #elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION # include "_swizzle_func.hpp" #endif #include namespace glm { template struct vec<2, T, Q> { // -- Implementation detail -- typedef T value_type; typedef vec<2, T, Q> type; typedef vec<2, bool, Q> bool_type; // -- Data -- # if GLM_SILENT_WARNINGS == GLM_ENABLE # if GLM_COMPILER & GLM_COMPILER_GCC # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wpedantic" # elif GLM_COMPILER & GLM_COMPILER_CLANG # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wgnu-anonymous-struct" # pragma clang diagnostic ignored "-Wnested-anon-types" # elif GLM_COMPILER & GLM_COMPILER_VC # pragma warning(push) # pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union # endif # endif # if GLM_CONFIG_XYZW_ONLY T x, y; # elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE union { struct{ T x, y; }; struct{ T r, g; }; struct{ T s, t; }; typename detail::storage<2, T, detail::is_aligned::value>::type data; # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR GLM_SWIZZLE2_2_MEMBERS(T, Q, x, y) GLM_SWIZZLE2_2_MEMBERS(T, Q, r, g) GLM_SWIZZLE2_2_MEMBERS(T, Q, s, t) GLM_SWIZZLE2_3_MEMBERS(T, Q, x, y) GLM_SWIZZLE2_3_MEMBERS(T, Q, r, g) GLM_SWIZZLE2_3_MEMBERS(T, Q, s, t) GLM_SWIZZLE2_4_MEMBERS(T, Q, x, y) GLM_SWIZZLE2_4_MEMBERS(T, Q, r, g) GLM_SWIZZLE2_4_MEMBERS(T, Q, s, t) # endif }; # else union {T x, r, s;}; union {T y, g, t;}; # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, Q) # endif//GLM_CONFIG_SWIZZLE # endif # if GLM_SILENT_WARNINGS == GLM_ENABLE # if GLM_COMPILER & GLM_COMPILER_CLANG # pragma clang diagnostic pop # elif GLM_COMPILER & GLM_COMPILER_GCC # pragma GCC diagnostic pop # elif GLM_COMPILER & GLM_COMPILER_VC # pragma warning(pop) # endif # endif // -- Component accesses -- /// Return the count of components of the vector typedef length_t length_type; GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 2;} GLM_FUNC_DECL GLM_CONSTEXPR T& operator[](length_type i); GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const; // -- Implicit basic constructors -- GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT; GLM_FUNC_DECL GLM_CONSTEXPR vec(vec const& v) GLM_DEFAULT; template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, T, P> const& v); // -- Explicit basic constructors -- GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar); GLM_FUNC_DECL GLM_CONSTEXPR vec(T x, T y); // -- Conversion constructors -- template GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec<1, U, P> const& v); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR vec(A x, B y); template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, Q> const& x, B y); template GLM_FUNC_DECL GLM_CONSTEXPR vec(A x, vec<1, B, Q> const& y); template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, Q> const& x, vec<1, B, Q> const& y); // -- Conversion vector constructors -- /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<3, U, P> const& v); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<2, U, P> const& v); // -- Swizzle constructors -- # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR template GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1,-1,-2> const& that) { *this = that(); } # endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR // -- Unary arithmetic operators -- GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator=(vec const& v) GLM_DEFAULT; template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator=(vec<2, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(vec<2, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(vec<2, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(vec<2, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(vec<2, U, Q> const& v); // -- Increment and decrement operators -- GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator++(); GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator--(); GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator++(int); GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator--(int); // -- Unary bit operators -- template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(vec<2, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(vec<2, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(vec<2, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(vec<2, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(vec<2, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(vec<2, U, Q> const& v); }; // -- Unary operators -- template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v); // -- Binary operators -- template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(T scalar, vec<2, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(T scalar, vec<2, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(T scalar, vec<2, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(T scalar, vec<2, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(T scalar, vec<2, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(T scalar, vec<2, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(T scalar, vec<2, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(T scalar, vec<2, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(T scalar, vec<2, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(T scalar, vec<2, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator~(vec<2, T, Q> const& v); // -- Boolean operators -- template GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, bool, Q> operator&&(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<2, bool, Q> operator||(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2); }//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE #include "type_vec2.inl" #endif//GLM_EXTERNAL_TEMPLATE ================================================ FILE: libraries/glm/detail/type_vec2.inl ================================================ /// @ref core #include "./compute_vector_relational.hpp" namespace glm { // -- Implicit basic constructors -- # if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec() # if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE : x(0), y(0) # endif {} template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<2, T, Q> const& v) : x(v.x), y(v.y) {} # endif template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<2, T, P> const& v) : x(v.x), y(v.y) {} // -- Explicit basic constructors -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(T scalar) : x(scalar), y(scalar) {} template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(T _x, T _y) : x(_x), y(_y) {} // -- Conversion scalar constructors -- template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<1, U, P> const& v) : x(static_cast(v.x)) , y(static_cast(v.x)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(A _x, B _y) : x(static_cast(_x)) , y(static_cast(_y)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<1, A, Q> const& _x, B _y) : x(static_cast(_x.x)) , y(static_cast(_y)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(A _x, vec<1, B, Q> const& _y) : x(static_cast(_x)) , y(static_cast(_y.x)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<1, A, Q> const& _x, vec<1, B, Q> const& _y) : x(static_cast(_x.x)) , y(static_cast(_y.x)) {} // -- Conversion vector constructors -- template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<2, U, P> const& v) : x(static_cast(v.x)) , y(static_cast(v.y)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<3, U, P> const& v) : x(static_cast(v.x)) , y(static_cast(v.y)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<4, U, P> const& v) : x(static_cast(v.x)) , y(static_cast(v.y)) {} // -- Component accesses -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR T & vec<2, T, Q>::operator[](typename vec<2, T, Q>::length_type i) { assert(i >= 0 && i < this->length()); switch(i) { default: case 0: return x; case 1: return y; } } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<2, T, Q>::operator[](typename vec<2, T, Q>::length_type i) const { assert(i >= 0 && i < this->length()); switch(i) { default: case 0: return x; case 1: return y; } } // -- Unary arithmetic operators -- # if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator=(vec<2, T, Q> const& v) { this->x = v.x; this->y = v.y; return *this; } # endif template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator=(vec<2, U, Q> const& v) { this->x = static_cast(v.x); this->y = static_cast(v.y); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator+=(U scalar) { this->x += static_cast(scalar); this->y += static_cast(scalar); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator+=(vec<1, U, Q> const& v) { this->x += static_cast(v.x); this->y += static_cast(v.x); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator+=(vec<2, U, Q> const& v) { this->x += static_cast(v.x); this->y += static_cast(v.y); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator-=(U scalar) { this->x -= static_cast(scalar); this->y -= static_cast(scalar); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator-=(vec<1, U, Q> const& v) { this->x -= static_cast(v.x); this->y -= static_cast(v.x); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator-=(vec<2, U, Q> const& v) { this->x -= static_cast(v.x); this->y -= static_cast(v.y); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator*=(U scalar) { this->x *= static_cast(scalar); this->y *= static_cast(scalar); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator*=(vec<1, U, Q> const& v) { this->x *= static_cast(v.x); this->y *= static_cast(v.x); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator*=(vec<2, U, Q> const& v) { this->x *= static_cast(v.x); this->y *= static_cast(v.y); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator/=(U scalar) { this->x /= static_cast(scalar); this->y /= static_cast(scalar); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator/=(vec<1, U, Q> const& v) { this->x /= static_cast(v.x); this->y /= static_cast(v.x); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator/=(vec<2, U, Q> const& v) { this->x /= static_cast(v.x); this->y /= static_cast(v.y); return *this; } // -- Increment and decrement operators -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator++() { ++this->x; ++this->y; return *this; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator--() { --this->x; --this->y; return *this; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> vec<2, T, Q>::operator++(int) { vec<2, T, Q> Result(*this); ++*this; return Result; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> vec<2, T, Q>::operator--(int) { vec<2, T, Q> Result(*this); --*this; return Result; } // -- Unary bit operators -- template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator%=(U scalar) { this->x %= static_cast(scalar); this->y %= static_cast(scalar); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator%=(vec<1, U, Q> const& v) { this->x %= static_cast(v.x); this->y %= static_cast(v.x); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator%=(vec<2, U, Q> const& v) { this->x %= static_cast(v.x); this->y %= static_cast(v.y); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator&=(U scalar) { this->x &= static_cast(scalar); this->y &= static_cast(scalar); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator&=(vec<1, U, Q> const& v) { this->x &= static_cast(v.x); this->y &= static_cast(v.x); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator&=(vec<2, U, Q> const& v) { this->x &= static_cast(v.x); this->y &= static_cast(v.y); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator|=(U scalar) { this->x |= static_cast(scalar); this->y |= static_cast(scalar); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator|=(vec<1, U, Q> const& v) { this->x |= static_cast(v.x); this->y |= static_cast(v.x); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator|=(vec<2, U, Q> const& v) { this->x |= static_cast(v.x); this->y |= static_cast(v.y); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator^=(U scalar) { this->x ^= static_cast(scalar); this->y ^= static_cast(scalar); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator^=(vec<1, U, Q> const& v) { this->x ^= static_cast(v.x); this->y ^= static_cast(v.x); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator^=(vec<2, U, Q> const& v) { this->x ^= static_cast(v.x); this->y ^= static_cast(v.y); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator<<=(U scalar) { this->x <<= static_cast(scalar); this->y <<= static_cast(scalar); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator<<=(vec<1, U, Q> const& v) { this->x <<= static_cast(v.x); this->y <<= static_cast(v.x); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator<<=(vec<2, U, Q> const& v) { this->x <<= static_cast(v.x); this->y <<= static_cast(v.y); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator>>=(U scalar) { this->x >>= static_cast(scalar); this->y >>= static_cast(scalar); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator>>=(vec<1, U, Q> const& v) { this->x >>= static_cast(v.x); this->y >>= static_cast(v.x); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator>>=(vec<2, U, Q> const& v) { this->x >>= static_cast(v.x); this->y >>= static_cast(v.y); return *this; } // -- Unary arithmetic operators -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v) { return v; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v) { return vec<2, T, Q>( -v.x, -v.y); } // -- Binary arithmetic operators -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v, T scalar) { return vec<2, T, Q>( v.x + scalar, v.y + scalar); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) { return vec<2, T, Q>( v1.x + v2.x, v1.y + v2.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(T scalar, vec<2, T, Q> const& v) { return vec<2, T, Q>( scalar + v.x, scalar + v.y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) { return vec<2, T, Q>( v1.x + v2.x, v1.x + v2.y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) { return vec<2, T, Q>( v1.x + v2.x, v1.y + v2.y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v, T scalar) { return vec<2, T, Q>( v.x - scalar, v.y - scalar); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) { return vec<2, T, Q>( v1.x - v2.x, v1.y - v2.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(T scalar, vec<2, T, Q> const& v) { return vec<2, T, Q>( scalar - v.x, scalar - v.y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) { return vec<2, T, Q>( v1.x - v2.x, v1.x - v2.y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) { return vec<2, T, Q>( v1.x - v2.x, v1.y - v2.y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v, T scalar) { return vec<2, T, Q>( v.x * scalar, v.y * scalar); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) { return vec<2, T, Q>( v1.x * v2.x, v1.y * v2.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(T scalar, vec<2, T, Q> const& v) { return vec<2, T, Q>( scalar * v.x, scalar * v.y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) { return vec<2, T, Q>( v1.x * v2.x, v1.x * v2.y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) { return vec<2, T, Q>( v1.x * v2.x, v1.y * v2.y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v, T scalar) { return vec<2, T, Q>( v.x / scalar, v.y / scalar); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) { return vec<2, T, Q>( v1.x / v2.x, v1.y / v2.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(T scalar, vec<2, T, Q> const& v) { return vec<2, T, Q>( scalar / v.x, scalar / v.y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) { return vec<2, T, Q>( v1.x / v2.x, v1.x / v2.y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) { return vec<2, T, Q>( v1.x / v2.x, v1.y / v2.y); } // -- Binary bit operators -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v, T scalar) { return vec<2, T, Q>( v.x % scalar, v.y % scalar); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) { return vec<2, T, Q>( v1.x % v2.x, v1.y % v2.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(T scalar, vec<2, T, Q> const& v) { return vec<2, T, Q>( scalar % v.x, scalar % v.y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) { return vec<2, T, Q>( v1.x % v2.x, v1.x % v2.y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) { return vec<2, T, Q>( v1.x % v2.x, v1.y % v2.y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v, T scalar) { return vec<2, T, Q>( v.x & scalar, v.y & scalar); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) { return vec<2, T, Q>( v1.x & v2.x, v1.y & v2.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(T scalar, vec<2, T, Q> const& v) { return vec<2, T, Q>( scalar & v.x, scalar & v.y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) { return vec<2, T, Q>( v1.x & v2.x, v1.x & v2.y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) { return vec<2, T, Q>( v1.x & v2.x, v1.y & v2.y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v, T scalar) { return vec<2, T, Q>( v.x | scalar, v.y | scalar); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) { return vec<2, T, Q>( v1.x | v2.x, v1.y | v2.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(T scalar, vec<2, T, Q> const& v) { return vec<2, T, Q>( scalar | v.x, scalar | v.y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) { return vec<2, T, Q>( v1.x | v2.x, v1.x | v2.y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) { return vec<2, T, Q>( v1.x | v2.x, v1.y | v2.y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v, T scalar) { return vec<2, T, Q>( v.x ^ scalar, v.y ^ scalar); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) { return vec<2, T, Q>( v1.x ^ v2.x, v1.y ^ v2.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(T scalar, vec<2, T, Q> const& v) { return vec<2, T, Q>( scalar ^ v.x, scalar ^ v.y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) { return vec<2, T, Q>( v1.x ^ v2.x, v1.x ^ v2.y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) { return vec<2, T, Q>( v1.x ^ v2.x, v1.y ^ v2.y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v, T scalar) { return vec<2, T, Q>( v.x << scalar, v.y << scalar); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) { return vec<2, T, Q>( v1.x << v2.x, v1.y << v2.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(T scalar, vec<2, T, Q> const& v) { return vec<2, T, Q>( scalar << v.x, scalar << v.y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) { return vec<2, T, Q>( v1.x << v2.x, v1.x << v2.y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) { return vec<2, T, Q>( v1.x << v2.x, v1.y << v2.y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v, T scalar) { return vec<2, T, Q>( v.x >> scalar, v.y >> scalar); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) { return vec<2, T, Q>( v1.x >> v2.x, v1.y >> v2.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(T scalar, vec<2, T, Q> const& v) { return vec<2, T, Q>( scalar >> v.x, scalar >> v.y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) { return vec<2, T, Q>( v1.x >> v2.x, v1.x >> v2.y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) { return vec<2, T, Q>( v1.x >> v2.x, v1.y >> v2.y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator~(vec<2, T, Q> const& v) { return vec<2, T, Q>( ~v.x, ~v.y); } // -- Boolean operators -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) { return detail::compute_equal::is_iec559>::call(v1.x, v2.x) && detail::compute_equal::is_iec559>::call(v1.y, v2.y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) { return !(v1 == v2); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, bool, Q> operator&&(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2) { return vec<2, bool, Q>(v1.x && v2.x, v1.y && v2.y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, bool, Q> operator||(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2) { return vec<2, bool, Q>(v1.x || v2.x, v1.y || v2.y); } }//namespace glm ================================================ FILE: libraries/glm/detail/type_vec3.hpp ================================================ /// @ref core /// @file glm/detail/type_vec3.hpp #pragma once #include "qualifier.hpp" #if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR # include "_swizzle.hpp" #elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION # include "_swizzle_func.hpp" #endif #include namespace glm { template struct vec<3, T, Q> { // -- Implementation detail -- typedef T value_type; typedef vec<3, T, Q> type; typedef vec<3, bool, Q> bool_type; // -- Data -- # if GLM_SILENT_WARNINGS == GLM_ENABLE # if GLM_COMPILER & GLM_COMPILER_GCC # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wpedantic" # elif GLM_COMPILER & GLM_COMPILER_CLANG # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wgnu-anonymous-struct" # pragma clang diagnostic ignored "-Wnested-anon-types" # elif GLM_COMPILER & GLM_COMPILER_VC # pragma warning(push) # pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union # if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE # pragma warning(disable: 4324) // structure was padded due to alignment specifier # endif # endif # endif # if GLM_CONFIG_XYZW_ONLY T x, y, z; # elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE union { struct{ T x, y, z; }; struct{ T r, g, b; }; struct{ T s, t, p; }; typename detail::storage<3, T, detail::is_aligned::value>::type data; # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR GLM_SWIZZLE3_2_MEMBERS(T, Q, x, y, z) GLM_SWIZZLE3_2_MEMBERS(T, Q, r, g, b) GLM_SWIZZLE3_2_MEMBERS(T, Q, s, t, p) GLM_SWIZZLE3_3_MEMBERS(T, Q, x, y, z) GLM_SWIZZLE3_3_MEMBERS(T, Q, r, g, b) GLM_SWIZZLE3_3_MEMBERS(T, Q, s, t, p) GLM_SWIZZLE3_4_MEMBERS(T, Q, x, y, z) GLM_SWIZZLE3_4_MEMBERS(T, Q, r, g, b) GLM_SWIZZLE3_4_MEMBERS(T, Q, s, t, p) # endif }; # else union { T x, r, s; }; union { T y, g, t; }; union { T z, b, p; }; # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, Q) # endif//GLM_CONFIG_SWIZZLE # endif//GLM_LANG # if GLM_SILENT_WARNINGS == GLM_ENABLE # if GLM_COMPILER & GLM_COMPILER_CLANG # pragma clang diagnostic pop # elif GLM_COMPILER & GLM_COMPILER_GCC # pragma GCC diagnostic pop # elif GLM_COMPILER & GLM_COMPILER_VC # pragma warning(pop) # endif # endif // -- Component accesses -- /// Return the count of components of the vector typedef length_t length_type; GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 3;} GLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i); GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const; // -- Implicit basic constructors -- GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT; GLM_FUNC_DECL GLM_CONSTEXPR vec(vec const& v) GLM_DEFAULT; template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<3, T, P> const& v); // -- Explicit basic constructors -- GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar); GLM_FUNC_DECL GLM_CONSTEXPR vec(T a, T b, T c); // -- Conversion scalar constructors -- template GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec<1, U, P> const& v); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR vec(X x, Y y, Z z); template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, Z _z); template GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, Z _z); template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z); template GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec<1, Z, Q> const& _z); template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z); template GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z); template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z); // -- Conversion vector constructors -- /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, B _z); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<2, B, P> const& _yz); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<3, U, P> const& v); // -- Swizzle constructors -- # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR template GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<3, T, Q, E0, E1, E2, -1> const& that) { *this = that(); } template GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, T const& scalar) { *this = vec(v(), scalar); } template GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& scalar, detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v) { *this = vec(scalar, v()); } # endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR // -- Unary arithmetic operators -- GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q>& operator=(vec<3, T, Q> const& v) GLM_DEFAULT; template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator=(vec<3, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator+=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator+=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator+=(vec<3, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator-=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator-=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator-=(vec<3, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator*=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator*=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator*=(vec<3, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator/=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator/=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator/=(vec<3, U, Q> const& v); // -- Increment and decrement operators -- GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator++(); GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator--(); GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator++(int); GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator--(int); // -- Unary bit operators -- template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator%=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator%=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator%=(vec<3, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator&=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator&=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator&=(vec<3, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator|=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator|=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator|=(vec<3, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator^=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator^=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator^=(vec<3, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator<<=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator<<=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator<<=(vec<3, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator>>=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator>>=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator>>=(vec<3, U, Q> const& v); }; // -- Unary operators -- template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v); // -- Binary operators -- template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(T scalar, vec<3, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(T scalar, vec<3, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(T scalar, vec<3, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(T scalar, vec<3, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(T scalar, vec<3, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(T scalar, vec<3, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(T scalar, vec<3, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(T scalar, vec<3, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(T scalar, vec<3, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(T scalar, vec<3, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator~(vec<3, T, Q> const& v); // -- Boolean operators -- template GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, bool, Q> operator&&(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<3, bool, Q> operator||(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2); }//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE #include "type_vec3.inl" #endif//GLM_EXTERNAL_TEMPLATE ================================================ FILE: libraries/glm/detail/type_vec3.inl ================================================ /// @ref core #include "compute_vector_relational.hpp" namespace glm { // -- Implicit basic constructors -- # if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec() # if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE : x(0), y(0), z(0) # endif {} template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<3, T, Q> const& v) : x(v.x), y(v.y), z(v.z) {} # endif template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<3, T, P> const& v) : x(v.x), y(v.y), z(v.z) {} // -- Explicit basic constructors -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(T scalar) : x(scalar), y(scalar), z(scalar) {} template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(T _x, T _y, T _z) : x(_x), y(_y), z(_z) {} // -- Conversion scalar constructors -- template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, U, P> const& v) : x(static_cast(v.x)) , y(static_cast(v.x)) , z(static_cast(v.x)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, Y _y, Z _z) : x(static_cast(_x)) , y(static_cast(_y)) , z(static_cast(_z)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, Z _z) : x(static_cast(_x.x)) , y(static_cast(_y)) , z(static_cast(_z)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, Z _z) : x(static_cast(_x)) , y(static_cast(_y.x)) , z(static_cast(_z)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z) : x(static_cast(_x.x)) , y(static_cast(_y.x)) , z(static_cast(_z)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, Y _y, vec<1, Z, Q> const& _z) : x(static_cast(_x)) , y(static_cast(_y)) , z(static_cast(_z.x)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z) : x(static_cast(_x.x)) , y(static_cast(_y)) , z(static_cast(_z.x)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z) : x(static_cast(_x)) , y(static_cast(_y.x)) , z(static_cast(_z.x)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z) : x(static_cast(_x.x)) , y(static_cast(_y.x)) , z(static_cast(_z.x)) {} // -- Conversion vector constructors -- template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<2, A, P> const& _xy, B _z) : x(static_cast(_xy.x)) , y(static_cast(_xy.y)) , z(static_cast(_z)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z) : x(static_cast(_xy.x)) , y(static_cast(_xy.y)) , z(static_cast(_z.x)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(A _x, vec<2, B, P> const& _yz) : x(static_cast(_x)) , y(static_cast(_yz.x)) , z(static_cast(_yz.y)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz) : x(static_cast(_x.x)) , y(static_cast(_yz.x)) , z(static_cast(_yz.y)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<3, U, P> const& v) : x(static_cast(v.x)) , y(static_cast(v.y)) , z(static_cast(v.z)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<4, U, P> const& v) : x(static_cast(v.x)) , y(static_cast(v.y)) , z(static_cast(v.z)) {} // -- Component accesses -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR T & vec<3, T, Q>::operator[](typename vec<3, T, Q>::length_type i) { assert(i >= 0 && i < this->length()); switch(i) { default: case 0: return x; case 1: return y; case 2: return z; } } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<3, T, Q>::operator[](typename vec<3, T, Q>::length_type i) const { assert(i >= 0 && i < this->length()); switch(i) { default: case 0: return x; case 1: return y; case 2: return z; } } // -- Unary arithmetic operators -- # if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>& vec<3, T, Q>::operator=(vec<3, T, Q> const& v) { this->x = v.x; this->y = v.y; this->z = v.z; return *this; } # endif template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>& vec<3, T, Q>::operator=(vec<3, U, Q> const& v) { this->x = static_cast(v.x); this->y = static_cast(v.y); this->z = static_cast(v.z); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator+=(U scalar) { this->x += static_cast(scalar); this->y += static_cast(scalar); this->z += static_cast(scalar); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator+=(vec<1, U, Q> const& v) { this->x += static_cast(v.x); this->y += static_cast(v.x); this->z += static_cast(v.x); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator+=(vec<3, U, Q> const& v) { this->x += static_cast(v.x); this->y += static_cast(v.y); this->z += static_cast(v.z); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator-=(U scalar) { this->x -= static_cast(scalar); this->y -= static_cast(scalar); this->z -= static_cast(scalar); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator-=(vec<1, U, Q> const& v) { this->x -= static_cast(v.x); this->y -= static_cast(v.x); this->z -= static_cast(v.x); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator-=(vec<3, U, Q> const& v) { this->x -= static_cast(v.x); this->y -= static_cast(v.y); this->z -= static_cast(v.z); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator*=(U scalar) { this->x *= static_cast(scalar); this->y *= static_cast(scalar); this->z *= static_cast(scalar); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator*=(vec<1, U, Q> const& v) { this->x *= static_cast(v.x); this->y *= static_cast(v.x); this->z *= static_cast(v.x); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator*=(vec<3, U, Q> const& v) { this->x *= static_cast(v.x); this->y *= static_cast(v.y); this->z *= static_cast(v.z); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator/=(U v) { this->x /= static_cast(v); this->y /= static_cast(v); this->z /= static_cast(v); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator/=(vec<1, U, Q> const& v) { this->x /= static_cast(v.x); this->y /= static_cast(v.x); this->z /= static_cast(v.x); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator/=(vec<3, U, Q> const& v) { this->x /= static_cast(v.x); this->y /= static_cast(v.y); this->z /= static_cast(v.z); return *this; } // -- Increment and decrement operators -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator++() { ++this->x; ++this->y; ++this->z; return *this; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator--() { --this->x; --this->y; --this->z; return *this; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> vec<3, T, Q>::operator++(int) { vec<3, T, Q> Result(*this); ++*this; return Result; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> vec<3, T, Q>::operator--(int) { vec<3, T, Q> Result(*this); --*this; return Result; } // -- Unary bit operators -- template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator%=(U scalar) { this->x %= scalar; this->y %= scalar; this->z %= scalar; return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator%=(vec<1, U, Q> const& v) { this->x %= v.x; this->y %= v.x; this->z %= v.x; return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator%=(vec<3, U, Q> const& v) { this->x %= v.x; this->y %= v.y; this->z %= v.z; return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator&=(U scalar) { this->x &= scalar; this->y &= scalar; this->z &= scalar; return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator&=(vec<1, U, Q> const& v) { this->x &= v.x; this->y &= v.x; this->z &= v.x; return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator&=(vec<3, U, Q> const& v) { this->x &= v.x; this->y &= v.y; this->z &= v.z; return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator|=(U scalar) { this->x |= scalar; this->y |= scalar; this->z |= scalar; return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator|=(vec<1, U, Q> const& v) { this->x |= v.x; this->y |= v.x; this->z |= v.x; return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator|=(vec<3, U, Q> const& v) { this->x |= v.x; this->y |= v.y; this->z |= v.z; return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator^=(U scalar) { this->x ^= scalar; this->y ^= scalar; this->z ^= scalar; return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator^=(vec<1, U, Q> const& v) { this->x ^= v.x; this->y ^= v.x; this->z ^= v.x; return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator^=(vec<3, U, Q> const& v) { this->x ^= v.x; this->y ^= v.y; this->z ^= v.z; return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator<<=(U scalar) { this->x <<= scalar; this->y <<= scalar; this->z <<= scalar; return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator<<=(vec<1, U, Q> const& v) { this->x <<= static_cast(v.x); this->y <<= static_cast(v.x); this->z <<= static_cast(v.x); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator<<=(vec<3, U, Q> const& v) { this->x <<= static_cast(v.x); this->y <<= static_cast(v.y); this->z <<= static_cast(v.z); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator>>=(U scalar) { this->x >>= static_cast(scalar); this->y >>= static_cast(scalar); this->z >>= static_cast(scalar); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator>>=(vec<1, U, Q> const& v) { this->x >>= static_cast(v.x); this->y >>= static_cast(v.x); this->z >>= static_cast(v.x); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator>>=(vec<3, U, Q> const& v) { this->x >>= static_cast(v.x); this->y >>= static_cast(v.y); this->z >>= static_cast(v.z); return *this; } // -- Unary arithmetic operators -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v) { return v; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v) { return vec<3, T, Q>( -v.x, -v.y, -v.z); } // -- Binary arithmetic operators -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, T scalar) { return vec<3, T, Q>( v.x + scalar, v.y + scalar, v.z + scalar); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) { return vec<3, T, Q>( v.x + scalar.x, v.y + scalar.x, v.z + scalar.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(T scalar, vec<3, T, Q> const& v) { return vec<3, T, Q>( scalar + v.x, scalar + v.y, scalar + v.z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) { return vec<3, T, Q>( scalar.x + v.x, scalar.x + v.y, scalar.x + v.z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) { return vec<3, T, Q>( v1.x + v2.x, v1.y + v2.y, v1.z + v2.z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v, T scalar) { return vec<3, T, Q>( v.x - scalar, v.y - scalar, v.z - scalar); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) { return vec<3, T, Q>( v.x - scalar.x, v.y - scalar.x, v.z - scalar.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(T scalar, vec<3, T, Q> const& v) { return vec<3, T, Q>( scalar - v.x, scalar - v.y, scalar - v.z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) { return vec<3, T, Q>( scalar.x - v.x, scalar.x - v.y, scalar.x - v.z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) { return vec<3, T, Q>( v1.x - v2.x, v1.y - v2.y, v1.z - v2.z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, T scalar) { return vec<3, T, Q>( v.x * scalar, v.y * scalar, v.z * scalar); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) { return vec<3, T, Q>( v.x * scalar.x, v.y * scalar.x, v.z * scalar.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(T scalar, vec<3, T, Q> const& v) { return vec<3, T, Q>( scalar * v.x, scalar * v.y, scalar * v.z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) { return vec<3, T, Q>( scalar.x * v.x, scalar.x * v.y, scalar.x * v.z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) { return vec<3, T, Q>( v1.x * v2.x, v1.y * v2.y, v1.z * v2.z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v, T scalar) { return vec<3, T, Q>( v.x / scalar, v.y / scalar, v.z / scalar); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) { return vec<3, T, Q>( v.x / scalar.x, v.y / scalar.x, v.z / scalar.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(T scalar, vec<3, T, Q> const& v) { return vec<3, T, Q>( scalar / v.x, scalar / v.y, scalar / v.z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) { return vec<3, T, Q>( scalar.x / v.x, scalar.x / v.y, scalar.x / v.z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) { return vec<3, T, Q>( v1.x / v2.x, v1.y / v2.y, v1.z / v2.z); } // -- Binary bit operators -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v, T scalar) { return vec<3, T, Q>( v.x % scalar, v.y % scalar, v.z % scalar); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) { return vec<3, T, Q>( v.x % scalar.x, v.y % scalar.x, v.z % scalar.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(T scalar, vec<3, T, Q> const& v) { return vec<3, T, Q>( scalar % v.x, scalar % v.y, scalar % v.z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) { return vec<3, T, Q>( scalar.x % v.x, scalar.x % v.y, scalar.x % v.z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) { return vec<3, T, Q>( v1.x % v2.x, v1.y % v2.y, v1.z % v2.z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v, T scalar) { return vec<3, T, Q>( v.x & scalar, v.y & scalar, v.z & scalar); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) { return vec<3, T, Q>( v.x & scalar.x, v.y & scalar.x, v.z & scalar.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(T scalar, vec<3, T, Q> const& v) { return vec<3, T, Q>( scalar & v.x, scalar & v.y, scalar & v.z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) { return vec<3, T, Q>( scalar.x & v.x, scalar.x & v.y, scalar.x & v.z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) { return vec<3, T, Q>( v1.x & v2.x, v1.y & v2.y, v1.z & v2.z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v, T scalar) { return vec<3, T, Q>( v.x | scalar, v.y | scalar, v.z | scalar); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) { return vec<3, T, Q>( v.x | scalar.x, v.y | scalar.x, v.z | scalar.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(T scalar, vec<3, T, Q> const& v) { return vec<3, T, Q>( scalar | v.x, scalar | v.y, scalar | v.z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) { return vec<3, T, Q>( scalar.x | v.x, scalar.x | v.y, scalar.x | v.z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) { return vec<3, T, Q>( v1.x | v2.x, v1.y | v2.y, v1.z | v2.z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v, T scalar) { return vec<3, T, Q>( v.x ^ scalar, v.y ^ scalar, v.z ^ scalar); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) { return vec<3, T, Q>( v.x ^ scalar.x, v.y ^ scalar.x, v.z ^ scalar.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(T scalar, vec<3, T, Q> const& v) { return vec<3, T, Q>( scalar ^ v.x, scalar ^ v.y, scalar ^ v.z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) { return vec<3, T, Q>( scalar.x ^ v.x, scalar.x ^ v.y, scalar.x ^ v.z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) { return vec<3, T, Q>( v1.x ^ v2.x, v1.y ^ v2.y, v1.z ^ v2.z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v, T scalar) { return vec<3, T, Q>( v.x << scalar, v.y << scalar, v.z << scalar); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) { return vec<3, T, Q>( v.x << scalar.x, v.y << scalar.x, v.z << scalar.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(T scalar, vec<3, T, Q> const& v) { return vec<3, T, Q>( scalar << v.x, scalar << v.y, scalar << v.z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) { return vec<3, T, Q>( scalar.x << v.x, scalar.x << v.y, scalar.x << v.z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) { return vec<3, T, Q>( v1.x << v2.x, v1.y << v2.y, v1.z << v2.z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v, T scalar) { return vec<3, T, Q>( v.x >> scalar, v.y >> scalar, v.z >> scalar); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) { return vec<3, T, Q>( v.x >> scalar.x, v.y >> scalar.x, v.z >> scalar.x); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(T scalar, vec<3, T, Q> const& v) { return vec<3, T, Q>( scalar >> v.x, scalar >> v.y, scalar >> v.z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) { return vec<3, T, Q>( scalar.x >> v.x, scalar.x >> v.y, scalar.x >> v.z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) { return vec<3, T, Q>( v1.x >> v2.x, v1.y >> v2.y, v1.z >> v2.z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator~(vec<3, T, Q> const& v) { return vec<3, T, Q>( ~v.x, ~v.y, ~v.z); } // -- Boolean operators -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) { return detail::compute_equal::is_iec559>::call(v1.x, v2.x) && detail::compute_equal::is_iec559>::call(v1.y, v2.y) && detail::compute_equal::is_iec559>::call(v1.z, v2.z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) { return !(v1 == v2); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, bool, Q> operator&&(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2) { return vec<3, bool, Q>(v1.x && v2.x, v1.y && v2.y, v1.z && v2.z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, bool, Q> operator||(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2) { return vec<3, bool, Q>(v1.x || v2.x, v1.y || v2.y, v1.z || v2.z); } }//namespace glm ================================================ FILE: libraries/glm/detail/type_vec4.hpp ================================================ /// @ref core /// @file glm/detail/type_vec4.hpp #pragma once #include "qualifier.hpp" #if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR # include "_swizzle.hpp" #elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION # include "_swizzle_func.hpp" #endif #include namespace glm { template struct vec<4, T, Q> { // -- Implementation detail -- typedef T value_type; typedef vec<4, T, Q> type; typedef vec<4, bool, Q> bool_type; // -- Data -- # if GLM_SILENT_WARNINGS == GLM_ENABLE # if GLM_COMPILER & GLM_COMPILER_GCC # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wpedantic" # elif GLM_COMPILER & GLM_COMPILER_CLANG # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wgnu-anonymous-struct" # pragma clang diagnostic ignored "-Wnested-anon-types" # elif GLM_COMPILER & GLM_COMPILER_VC # pragma warning(push) # pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union # endif # endif # if GLM_CONFIG_XYZW_ONLY T x, y, z, w; # elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE union { struct { T x, y, z, w; }; struct { T r, g, b, a; }; struct { T s, t, p, q; }; typename detail::storage<4, T, detail::is_aligned::value>::type data; # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR GLM_SWIZZLE4_2_MEMBERS(T, Q, x, y, z, w) GLM_SWIZZLE4_2_MEMBERS(T, Q, r, g, b, a) GLM_SWIZZLE4_2_MEMBERS(T, Q, s, t, p, q) GLM_SWIZZLE4_3_MEMBERS(T, Q, x, y, z, w) GLM_SWIZZLE4_3_MEMBERS(T, Q, r, g, b, a) GLM_SWIZZLE4_3_MEMBERS(T, Q, s, t, p, q) GLM_SWIZZLE4_4_MEMBERS(T, Q, x, y, z, w) GLM_SWIZZLE4_4_MEMBERS(T, Q, r, g, b, a) GLM_SWIZZLE4_4_MEMBERS(T, Q, s, t, p, q) # endif }; # else union { T x, r, s; }; union { T y, g, t; }; union { T z, b, p; }; union { T w, a, q; }; # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, Q) # endif # endif # if GLM_SILENT_WARNINGS == GLM_ENABLE # if GLM_COMPILER & GLM_COMPILER_CLANG # pragma clang diagnostic pop # elif GLM_COMPILER & GLM_COMPILER_GCC # pragma GCC diagnostic pop # elif GLM_COMPILER & GLM_COMPILER_VC # pragma warning(pop) # endif # endif // -- Component accesses -- typedef length_t length_type; /// Return the count of components of the vector GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 4;} GLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i); GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const; // -- Implicit basic constructors -- GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT; GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<4, T, Q> const& v) GLM_DEFAULT; template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<4, T, P> const& v); // -- Explicit basic constructors -- GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar); GLM_FUNC_DECL GLM_CONSTEXPR vec(T x, T y, T z, T w); // -- Conversion scalar constructors -- template GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec<1, U, P> const& v); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, Z _z, W _w); template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, Z _z, W _w); template GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, Z _z, W _w); template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, W _w); template GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec<1, Z, Q> const& _z, W _w); template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, W _w); template GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w); template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w); template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, Z _z, vec<1, W, Q> const& _w); template GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w); template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w); template GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w); template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w); template GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w); template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _Y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w); // -- Conversion vector constructors -- /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, B _z, C _w); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, C _w); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, B _z, vec<1, C, P> const& _w); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, vec<1, C, P> const& _w); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<2, B, P> const& _yz, C _w); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, C _w); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, B _y, vec<2, C, P> const& _zw); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, B _y, vec<2, C, P> const& _zw); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<3, A, P> const& _xyz, B _w); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<3, A, P> const& _xyz, vec<1, B, P> const& _w); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<3, B, P> const& _yzw); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<3, B, P> const& _yzw); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<2, B, P> const& _zw); /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v); // -- Swizzle constructors -- # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR template GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<4, T, Q, E0, E1, E2, E3> const& that) { *this = that(); } template GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, detail::_swizzle<2, T, Q, F0, F1, -1, -2> const& u) { *this = vec<4, T, Q>(v(), u()); } template GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& x, T const& y, detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v) { *this = vec<4, T, Q>(x, y, v()); } template GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& x, detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, T const& w) { *this = vec<4, T, Q>(x, v(), w); } template GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, T const& z, T const& w) { *this = vec<4, T, Q>(v(), z, w); } template GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<3, T, Q, E0, E1, E2, -1> const& v, T const& w) { *this = vec<4, T, Q>(v(), w); } template GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& x, detail::_swizzle<3, T, Q, E0, E1, E2, -1> const& v) { *this = vec<4, T, Q>(x, v()); } # endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR // -- Unary arithmetic operators -- GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator=(vec<4, T, Q> const& v) GLM_DEFAULT; template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator=(vec<4, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator+=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator+=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator+=(vec<4, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator-=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator-=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator-=(vec<4, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator*=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator*=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator*=(vec<4, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator/=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator/=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator/=(vec<4, U, Q> const& v); // -- Increment and decrement operators -- GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator++(); GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator--(); GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator++(int); GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator--(int); // -- Unary bit operators -- template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator%=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator%=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator%=(vec<4, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator&=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator&=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator&=(vec<4, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator|=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator|=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator|=(vec<4, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator^=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator^=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator^=(vec<4, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator<<=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator<<=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator<<=(vec<4, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator>>=(U scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator>>=(vec<1, U, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator>>=(vec<4, U, Q> const& v); }; // -- Unary operators -- template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v); // -- Binary operators -- template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v, T const & scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(T scalar, vec<4, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v, T const & scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(T scalar, vec<4, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, T const & scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(T scalar, vec<4, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v, T const & scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(T scalar, vec<4, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(T scalar, vec<4, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(T scalar, vec<4, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(T scalar, vec<4, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(T scalar, vec<4, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(T scalar, vec<4, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v, T scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(T scalar, vec<4, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator~(vec<4, T, Q> const& v); // -- Boolean operators -- template GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, bool, Q> operator&&(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2); template GLM_FUNC_DECL GLM_CONSTEXPR vec<4, bool, Q> operator||(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2); }//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE #include "type_vec4.inl" #endif//GLM_EXTERNAL_TEMPLATE ================================================ FILE: libraries/glm/detail/type_vec4.inl ================================================ /// @ref core #include "compute_vector_relational.hpp" namespace glm{ namespace detail { template struct compute_vec4_add { GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { return vec<4, T, Q>(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w); } }; template struct compute_vec4_sub { GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { return vec<4, T, Q>(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w); } }; template struct compute_vec4_mul { GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { return vec<4, T, Q>(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w); } }; template struct compute_vec4_div { GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { return vec<4, T, Q>(a.x / b.x, a.y / b.y, a.z / b.z, a.w / b.w); } }; template struct compute_vec4_mod { GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { return vec<4, T, Q>(a.x % b.x, a.y % b.y, a.z % b.z, a.w % b.w); } }; template struct compute_vec4_and { GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { return vec<4, T, Q>(a.x & b.x, a.y & b.y, a.z & b.z, a.w & b.w); } }; template struct compute_vec4_or { GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { return vec<4, T, Q>(a.x | b.x, a.y | b.y, a.z | b.z, a.w | b.w); } }; template struct compute_vec4_xor { GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { return vec<4, T, Q>(a.x ^ b.x, a.y ^ b.y, a.z ^ b.z, a.w ^ b.w); } }; template struct compute_vec4_shift_left { GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { return vec<4, T, Q>(a.x << b.x, a.y << b.y, a.z << b.z, a.w << b.w); } }; template struct compute_vec4_shift_right { GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { return vec<4, T, Q>(a.x >> b.x, a.y >> b.y, a.z >> b.z, a.w >> b.w); } }; template struct compute_vec4_equal { GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) { return detail::compute_equal::is_iec559>::call(v1.x, v2.x) && detail::compute_equal::is_iec559>::call(v1.y, v2.y) && detail::compute_equal::is_iec559>::call(v1.z, v2.z) && detail::compute_equal::is_iec559>::call(v1.w, v2.w); } }; template struct compute_vec4_nequal { GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) { return !compute_vec4_equal::value, sizeof(T) * 8, detail::is_aligned::value>::call(v1, v2); } }; template struct compute_vec4_bitwise_not { GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& v) { return vec<4, T, Q>(~v.x, ~v.y, ~v.z, ~v.w); } }; }//namespace detail // -- Implicit basic constructors -- # if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec() # if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE : x(0), y(0), z(0), w(0) # endif {} template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<4, T, Q> const& v) : x(v.x), y(v.y), z(v.z), w(v.w) {} # endif template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<4, T, P> const& v) : x(v.x), y(v.y), z(v.z), w(v.w) {} // -- Explicit basic constructors -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(T scalar) : x(scalar), y(scalar), z(scalar), w(scalar) {} template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(T _x, T _y, T _z, T _w) : x(_x), y(_y), z(_z), w(_w) {} // -- Conversion scalar constructors -- template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, U, P> const& v) : x(static_cast(v.x)) , y(static_cast(v.x)) , z(static_cast(v.x)) , w(static_cast(v.x)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, Y _y, Z _z, W _w) : x(static_cast(_x)) , y(static_cast(_y)) , z(static_cast(_z)) , w(static_cast(_w)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, Z _z, W _w) : x(static_cast(_x.x)) , y(static_cast(_y)) , z(static_cast(_z)) , w(static_cast(_w)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, Z _z, W _w) : x(static_cast(_x)) , y(static_cast(_y.x)) , z(static_cast(_z)) , w(static_cast(_w)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, W _w) : x(static_cast(_x.x)) , y(static_cast(_y.x)) , z(static_cast(_z)) , w(static_cast(_w)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, Y _y, vec<1, Z, Q> const& _z, W _w) : x(static_cast(_x)) , y(static_cast(_y)) , z(static_cast(_z.x)) , w(static_cast(_w)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, W _w) : x(static_cast(_x.x)) , y(static_cast(_y)) , z(static_cast(_z.x)) , w(static_cast(_w)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w) : x(static_cast(_x)) , y(static_cast(_y.x)) , z(static_cast(_z.x)) , w(static_cast(_w)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w) : x(static_cast(_x.x)) , y(static_cast(_y.x)) , z(static_cast(_z.x)) , w(static_cast(_w)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, Z _z, vec<1, W, Q> const& _w) : x(static_cast(_x.x)) , y(static_cast(_y)) , z(static_cast(_z)) , w(static_cast(_w.x)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w) : x(static_cast(_x)) , y(static_cast(_y.x)) , z(static_cast(_z)) , w(static_cast(_w.x)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w) : x(static_cast(_x.x)) , y(static_cast(_y.x)) , z(static_cast(_z)) , w(static_cast(_w.x)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w) : x(static_cast(_x)) , y(static_cast(_y)) , z(static_cast(_z.x)) , w(static_cast(_w.x)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w) : x(static_cast(_x.x)) , y(static_cast(_y)) , z(static_cast(_z.x)) , w(static_cast(_w.x)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w) : x(static_cast(_x)) , y(static_cast(_y.x)) , z(static_cast(_z.x)) , w(static_cast(_w.x)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w) : x(static_cast(_x.x)) , y(static_cast(_y.x)) , z(static_cast(_z.x)) , w(static_cast(_w.x)) {} // -- Conversion vector constructors -- template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, B _z, C _w) : x(static_cast(_xy.x)) , y(static_cast(_xy.y)) , z(static_cast(_z)) , w(static_cast(_w)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, C _w) : x(static_cast(_xy.x)) , y(static_cast(_xy.y)) , z(static_cast(_z.x)) , w(static_cast(_w)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, B _z, vec<1, C, P> const& _w) : x(static_cast(_xy.x)) , y(static_cast(_xy.y)) , z(static_cast(_z)) , w(static_cast(_w.x)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, vec<1, C, P> const& _w) : x(static_cast(_xy.x)) , y(static_cast(_xy.y)) , z(static_cast(_z.x)) , w(static_cast(_w.x)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<2, B, P> const& _yz, C _w) : x(static_cast(_x)) , y(static_cast(_yz.x)) , z(static_cast(_yz.y)) , w(static_cast(_w)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, C _w) : x(static_cast(_x.x)) , y(static_cast(_yz.x)) , z(static_cast(_yz.y)) , w(static_cast(_w)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w) : x(static_cast(_x)) , y(static_cast(_yz.x)) , z(static_cast(_yz.y)) , w(static_cast(_w.x)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w) : x(static_cast(_x.x)) , y(static_cast(_yz.x)) , z(static_cast(_yz.y)) , w(static_cast(_w.x)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, B _y, vec<2, C, P> const& _zw) : x(static_cast(_x)) , y(static_cast(_y)) , z(static_cast(_zw.x)) , w(static_cast(_zw.y)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, B _y, vec<2, C, P> const& _zw) : x(static_cast(_x.x)) , y(static_cast(_y)) , z(static_cast(_zw.x)) , w(static_cast(_zw.y)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw) : x(static_cast(_x)) , y(static_cast(_y.x)) , z(static_cast(_zw.x)) , w(static_cast(_zw.y)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw) : x(static_cast(_x.x)) , y(static_cast(_y.x)) , z(static_cast(_zw.x)) , w(static_cast(_zw.y)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<3, A, P> const& _xyz, B _w) : x(static_cast(_xyz.x)) , y(static_cast(_xyz.y)) , z(static_cast(_xyz.z)) , w(static_cast(_w)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<3, A, P> const& _xyz, vec<1, B, P> const& _w) : x(static_cast(_xyz.x)) , y(static_cast(_xyz.y)) , z(static_cast(_xyz.z)) , w(static_cast(_w.x)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<3, B, P> const& _yzw) : x(static_cast(_x)) , y(static_cast(_yzw.x)) , z(static_cast(_yzw.y)) , w(static_cast(_yzw.z)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<3, B, P> const& _yzw) : x(static_cast(_x.x)) , y(static_cast(_yzw.x)) , z(static_cast(_yzw.y)) , w(static_cast(_yzw.z)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, vec<2, B, P> const& _zw) : x(static_cast(_xy.x)) , y(static_cast(_xy.y)) , z(static_cast(_zw.x)) , w(static_cast(_zw.y)) {} template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<4, U, P> const& v) : x(static_cast(v.x)) , y(static_cast(v.y)) , z(static_cast(v.z)) , w(static_cast(v.w)) {} // -- Component accesses -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR T& vec<4, T, Q>::operator[](typename vec<4, T, Q>::length_type i) { assert(i >= 0 && i < this->length()); switch(i) { default: case 0: return x; case 1: return y; case 2: return z; case 3: return w; } } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<4, T, Q>::operator[](typename vec<4, T, Q>::length_type i) const { assert(i >= 0 && i < this->length()); switch(i) { default: case 0: return x; case 1: return y; case 2: return z; case 3: return w; } } // -- Unary arithmetic operators -- # if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>& vec<4, T, Q>::operator=(vec<4, T, Q> const& v) { this->x = v.x; this->y = v.y; this->z = v.z; this->w = v.w; return *this; } # endif template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>& vec<4, T, Q>::operator=(vec<4, U, Q> const& v) { this->x = static_cast(v.x); this->y = static_cast(v.y); this->z = static_cast(v.z); this->w = static_cast(v.w); return *this; } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator+=(U scalar) { return (*this = detail::compute_vec4_add::value>::call(*this, vec<4, T, Q>(scalar))); } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator+=(vec<1, U, Q> const& v) { return (*this = detail::compute_vec4_add::value>::call(*this, vec<4, T, Q>(v.x))); } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator+=(vec<4, U, Q> const& v) { return (*this = detail::compute_vec4_add::value>::call(*this, vec<4, T, Q>(v))); } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator-=(U scalar) { return (*this = detail::compute_vec4_sub::value>::call(*this, vec<4, T, Q>(scalar))); } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator-=(vec<1, U, Q> const& v) { return (*this = detail::compute_vec4_sub::value>::call(*this, vec<4, T, Q>(v.x))); } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator-=(vec<4, U, Q> const& v) { return (*this = detail::compute_vec4_sub::value>::call(*this, vec<4, T, Q>(v))); } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator*=(U scalar) { return (*this = detail::compute_vec4_mul::value>::call(*this, vec<4, T, Q>(scalar))); } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator*=(vec<1, U, Q> const& v) { return (*this = detail::compute_vec4_mul::value>::call(*this, vec<4, T, Q>(v.x))); } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator*=(vec<4, U, Q> const& v) { return (*this = detail::compute_vec4_mul::value>::call(*this, vec<4, T, Q>(v))); } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator/=(U scalar) { return (*this = detail::compute_vec4_div::value>::call(*this, vec<4, T, Q>(scalar))); } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator/=(vec<1, U, Q> const& v) { return (*this = detail::compute_vec4_div::value>::call(*this, vec<4, T, Q>(v.x))); } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator/=(vec<4, U, Q> const& v) { return (*this = detail::compute_vec4_div::value>::call(*this, vec<4, T, Q>(v))); } // -- Increment and decrement operators -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator++() { ++this->x; ++this->y; ++this->z; ++this->w; return *this; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator--() { --this->x; --this->y; --this->z; --this->w; return *this; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> vec<4, T, Q>::operator++(int) { vec<4, T, Q> Result(*this); ++*this; return Result; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> vec<4, T, Q>::operator--(int) { vec<4, T, Q> Result(*this); --*this; return Result; } // -- Unary bit operators -- template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator%=(U scalar) { return (*this = detail::compute_vec4_mod::value>::call(*this, vec<4, T, Q>(scalar))); } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator%=(vec<1, U, Q> const& v) { return (*this = detail::compute_vec4_mod::value>::call(*this, vec<4, T, Q>(v))); } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator%=(vec<4, U, Q> const& v) { return (*this = detail::compute_vec4_mod::value>::call(*this, vec<4, T, Q>(v))); } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator&=(U scalar) { return (*this = detail::compute_vec4_and::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(scalar))); } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator&=(vec<1, U, Q> const& v) { return (*this = detail::compute_vec4_and::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator&=(vec<4, U, Q> const& v) { return (*this = detail::compute_vec4_and::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator|=(U scalar) { return (*this = detail::compute_vec4_or::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(scalar))); } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator|=(vec<1, U, Q> const& v) { return (*this = detail::compute_vec4_or::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator|=(vec<4, U, Q> const& v) { return (*this = detail::compute_vec4_or::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator^=(U scalar) { return (*this = detail::compute_vec4_xor::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(scalar))); } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator^=(vec<1, U, Q> const& v) { return (*this = detail::compute_vec4_xor::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator^=(vec<4, U, Q> const& v) { return (*this = detail::compute_vec4_xor::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator<<=(U scalar) { return (*this = detail::compute_vec4_shift_left::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(scalar))); } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator<<=(vec<1, U, Q> const& v) { return (*this = detail::compute_vec4_shift_left::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator<<=(vec<4, U, Q> const& v) { return (*this = detail::compute_vec4_shift_left::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator>>=(U scalar) { return (*this = detail::compute_vec4_shift_right::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(scalar))); } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator>>=(vec<1, U, Q> const& v) { return (*this = detail::compute_vec4_shift_right::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); } template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator>>=(vec<4, U, Q> const& v) { return (*this = detail::compute_vec4_shift_right::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); } // -- Unary constant operators -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v) { return v; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v) { return vec<4, T, Q>(0) -= v; } // -- Binary arithmetic operators -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v, T const & scalar) { return vec<4, T, Q>(v) += scalar; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) { return vec<4, T, Q>(v1) += v2; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(T scalar, vec<4, T, Q> const& v) { return vec<4, T, Q>(v) += scalar; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) { return vec<4, T, Q>(v2) += v1; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) { return vec<4, T, Q>(v1) += v2; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v, T const & scalar) { return vec<4, T, Q>(v) -= scalar; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) { return vec<4, T, Q>(v1) -= v2; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(T scalar, vec<4, T, Q> const& v) { return vec<4, T, Q>(scalar) -= v; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) { return vec<4, T, Q>(v1.x) -= v2; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) { return vec<4, T, Q>(v1) -= v2; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, T const & scalar) { return vec<4, T, Q>(v) *= scalar; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) { return vec<4, T, Q>(v1) *= v2; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(T scalar, vec<4, T, Q> const& v) { return vec<4, T, Q>(v) *= scalar; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) { return vec<4, T, Q>(v2) *= v1; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) { return vec<4, T, Q>(v1) *= v2; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v, T const & scalar) { return vec<4, T, Q>(v) /= scalar; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) { return vec<4, T, Q>(v1) /= v2; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(T scalar, vec<4, T, Q> const& v) { return vec<4, T, Q>(scalar) /= v; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) { return vec<4, T, Q>(v1.x) /= v2; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) { return vec<4, T, Q>(v1) /= v2; } // -- Binary bit operators -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v, T scalar) { return vec<4, T, Q>(v) %= scalar; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) { return vec<4, T, Q>(v1) %= v2.x; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(T scalar, vec<4, T, Q> const& v) { return vec<4, T, Q>(scalar) %= v; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v) { return vec<4, T, Q>(scalar.x) %= v; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) { return vec<4, T, Q>(v1) %= v2; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, T scalar) { return vec<4, T, Q>(v) &= scalar; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar) { return vec<4, T, Q>(v) &= scalar; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(T scalar, vec<4, T, Q> const& v) { return vec<4, T, Q>(scalar) &= v; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) { return vec<4, T, Q>(v1.x) &= v2; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) { return vec<4, T, Q>(v1) &= v2; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v, T scalar) { return vec<4, T, Q>(v) |= scalar; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) { return vec<4, T, Q>(v1) |= v2.x; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(T scalar, vec<4, T, Q> const& v) { return vec<4, T, Q>(scalar) |= v; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) { return vec<4, T, Q>(v1.x) |= v2; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) { return vec<4, T, Q>(v1) |= v2; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v, T scalar) { return vec<4, T, Q>(v) ^= scalar; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) { return vec<4, T, Q>(v1) ^= v2.x; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(T scalar, vec<4, T, Q> const& v) { return vec<4, T, Q>(scalar) ^= v; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) { return vec<4, T, Q>(v1.x) ^= v2; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) { return vec<4, T, Q>(v1) ^= v2; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v, T scalar) { return vec<4, T, Q>(v) <<= scalar; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) { return vec<4, T, Q>(v1) <<= v2.x; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(T scalar, vec<4, T, Q> const& v) { return vec<4, T, Q>(scalar) <<= v; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) { return vec<4, T, Q>(v1.x) <<= v2; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) { return vec<4, T, Q>(v1) <<= v2; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v, T scalar) { return vec<4, T, Q>(v) >>= scalar; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) { return vec<4, T, Q>(v1) >>= v2.x; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(T scalar, vec<4, T, Q> const& v) { return vec<4, T, Q>(scalar) >>= v; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) { return vec<4, T, Q>(v1.x) >>= v2; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) { return vec<4, T, Q>(v1) >>= v2; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator~(vec<4, T, Q> const& v) { return detail::compute_vec4_bitwise_not::value, sizeof(T) * 8, detail::is_aligned::value>::call(v); } // -- Boolean operators -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) { return detail::compute_vec4_equal::value, sizeof(T) * 8, detail::is_aligned::value>::call(v1, v2); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) { return detail::compute_vec4_nequal::value, sizeof(T) * 8, detail::is_aligned::value>::call(v1, v2); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, bool, Q> operator&&(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2) { return vec<4, bool, Q>(v1.x && v2.x, v1.y && v2.y, v1.z && v2.z, v1.w && v2.w); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, bool, Q> operator||(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2) { return vec<4, bool, Q>(v1.x || v2.x, v1.y || v2.y, v1.z || v2.z, v1.w || v2.w); } }//namespace glm #if GLM_CONFIG_SIMD == GLM_ENABLE # include "type_vec4_simd.inl" #endif ================================================ FILE: libraries/glm/detail/type_vec4_simd.inl ================================================ #if GLM_ARCH & GLM_ARCH_SSE2_BIT namespace glm{ namespace detail { # if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR template struct _swizzle_base1<4, float, Q, E0,E1,E2,E3, true> : public _swizzle_base0 { GLM_FUNC_QUALIFIER vec<4, float, Q> operator ()() const { __m128 data = *reinterpret_cast<__m128 const*>(&this->_buffer); vec<4, float, Q> Result; # if GLM_ARCH & GLM_ARCH_AVX_BIT Result.data = _mm_permute_ps(data, _MM_SHUFFLE(E3, E2, E1, E0)); # else Result.data = _mm_shuffle_ps(data, data, _MM_SHUFFLE(E3, E2, E1, E0)); # endif return Result; } }; template struct _swizzle_base1<4, int, Q, E0,E1,E2,E3, true> : public _swizzle_base0 { GLM_FUNC_QUALIFIER vec<4, int, Q> operator ()() const { __m128i data = *reinterpret_cast<__m128i const*>(&this->_buffer); vec<4, int, Q> Result; Result.data = _mm_shuffle_epi32(data, _MM_SHUFFLE(E3, E2, E1, E0)); return Result; } }; template struct _swizzle_base1<4, uint, Q, E0,E1,E2,E3, true> : public _swizzle_base0 { GLM_FUNC_QUALIFIER vec<4, uint, Q> operator ()() const { __m128i data = *reinterpret_cast<__m128i const*>(&this->_buffer); vec<4, uint, Q> Result; Result.data = _mm_shuffle_epi32(data, _MM_SHUFFLE(E3, E2, E1, E0)); return Result; } }; # endif// GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR template struct compute_vec4_add { static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) { vec<4, float, Q> Result; Result.data = _mm_add_ps(a.data, b.data); return Result; } }; # if GLM_ARCH & GLM_ARCH_AVX_BIT template struct compute_vec4_add { static vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b) { vec<4, double, Q> Result; Result.data = _mm256_add_pd(a.data, b.data); return Result; } }; # endif template struct compute_vec4_sub { static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) { vec<4, float, Q> Result; Result.data = _mm_sub_ps(a.data, b.data); return Result; } }; # if GLM_ARCH & GLM_ARCH_AVX_BIT template struct compute_vec4_sub { static vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b) { vec<4, double, Q> Result; Result.data = _mm256_sub_pd(a.data, b.data); return Result; } }; # endif template struct compute_vec4_mul { static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) { vec<4, float, Q> Result; Result.data = _mm_mul_ps(a.data, b.data); return Result; } }; # if GLM_ARCH & GLM_ARCH_AVX_BIT template struct compute_vec4_mul { static vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b) { vec<4, double, Q> Result; Result.data = _mm256_mul_pd(a.data, b.data); return Result; } }; # endif template struct compute_vec4_div { static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) { vec<4, float, Q> Result; Result.data = _mm_div_ps(a.data, b.data); return Result; } }; # if GLM_ARCH & GLM_ARCH_AVX_BIT template struct compute_vec4_div { static vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b) { vec<4, double, Q> Result; Result.data = _mm256_div_pd(a.data, b.data); return Result; } }; # endif template<> struct compute_vec4_div { static vec<4, float, aligned_lowp> call(vec<4, float, aligned_lowp> const& a, vec<4, float, aligned_lowp> const& b) { vec<4, float, aligned_lowp> Result; Result.data = _mm_mul_ps(a.data, _mm_rcp_ps(b.data)); return Result; } }; template struct compute_vec4_and { static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { vec<4, T, Q> Result; Result.data = _mm_and_si128(a.data, b.data); return Result; } }; # if GLM_ARCH & GLM_ARCH_AVX2_BIT template struct compute_vec4_and { static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { vec<4, T, Q> Result; Result.data = _mm256_and_si256(a.data, b.data); return Result; } }; # endif template struct compute_vec4_or { static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { vec<4, T, Q> Result; Result.data = _mm_or_si128(a.data, b.data); return Result; } }; # if GLM_ARCH & GLM_ARCH_AVX2_BIT template struct compute_vec4_or { static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { vec<4, T, Q> Result; Result.data = _mm256_or_si256(a.data, b.data); return Result; } }; # endif template struct compute_vec4_xor { static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { vec<4, T, Q> Result; Result.data = _mm_xor_si128(a.data, b.data); return Result; } }; # if GLM_ARCH & GLM_ARCH_AVX2_BIT template struct compute_vec4_xor { static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { vec<4, T, Q> Result; Result.data = _mm256_xor_si256(a.data, b.data); return Result; } }; # endif template struct compute_vec4_shift_left { static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { vec<4, T, Q> Result; Result.data = _mm_sll_epi32(a.data, b.data); return Result; } }; # if GLM_ARCH & GLM_ARCH_AVX2_BIT template struct compute_vec4_shift_left { static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { vec<4, T, Q> Result; Result.data = _mm256_sll_epi64(a.data, b.data); return Result; } }; # endif template struct compute_vec4_shift_right { static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { vec<4, T, Q> Result; Result.data = _mm_srl_epi32(a.data, b.data); return Result; } }; # if GLM_ARCH & GLM_ARCH_AVX2_BIT template struct compute_vec4_shift_right { static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) { vec<4, T, Q> Result; Result.data = _mm256_srl_epi64(a.data, b.data); return Result; } }; # endif template struct compute_vec4_bitwise_not { static vec<4, T, Q> call(vec<4, T, Q> const& v) { vec<4, T, Q> Result; Result.data = _mm_xor_si128(v.data, _mm_set1_epi32(-1)); return Result; } }; # if GLM_ARCH & GLM_ARCH_AVX2_BIT template struct compute_vec4_bitwise_not { static vec<4, T, Q> call(vec<4, T, Q> const& v) { vec<4, T, Q> Result; Result.data = _mm256_xor_si256(v.data, _mm_set1_epi32(-1)); return Result; } }; # endif template struct compute_vec4_equal { static bool call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) { return _mm_movemask_ps(_mm_cmpeq_ps(v1.data, v2.data)) != 0; } }; # if GLM_ARCH & GLM_ARCH_SSE41_BIT template struct compute_vec4_equal { static bool call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) { //return _mm_movemask_epi8(_mm_cmpeq_epi32(v1.data, v2.data)) != 0; __m128i neq = _mm_xor_si128(v1.data, v2.data); return _mm_test_all_zeros(neq, neq) == 0; } }; # endif template struct compute_vec4_nequal { static bool call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) { return _mm_movemask_ps(_mm_cmpneq_ps(v1.data, v2.data)) != 0; } }; # if GLM_ARCH & GLM_ARCH_SSE41_BIT template struct compute_vec4_nequal { static bool call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) { //return _mm_movemask_epi8(_mm_cmpneq_epi32(v1.data, v2.data)) != 0; __m128i neq = _mm_xor_si128(v1.data, v2.data); return _mm_test_all_zeros(neq, neq) != 0; } }; # endif }//namespace detail template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(float _s) : data(_mm_set1_ps(_s)) {} template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(float _s) : data(_mm_set1_ps(_s)) {} template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(float _s) : data(_mm_set1_ps(_s)) {} # if GLM_ARCH & GLM_ARCH_AVX_BIT template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, double, aligned_lowp>::vec(double _s) : data(_mm256_set1_pd(_s)) {} template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, double, aligned_mediump>::vec(double _s) : data(_mm256_set1_pd(_s)) {} template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, double, aligned_highp>::vec(double _s) : data(_mm256_set1_pd(_s)) {} # endif template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_lowp>::vec(int _s) : data(_mm_set1_epi32(_s)) {} template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_mediump>::vec(int _s) : data(_mm_set1_epi32(_s)) {} template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_highp>::vec(int _s) : data(_mm_set1_epi32(_s)) {} # if GLM_ARCH & GLM_ARCH_AVX2_BIT template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, detail::int64, aligned_lowp>::vec(detail::int64 _s) : data(_mm256_set1_epi64x(_s)) {} template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, detail::int64, aligned_mediump>::vec(detail::int64 _s) : data(_mm256_set1_epi64x(_s)) {} template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, detail::int64, aligned_highp>::vec(detail::int64 _s) : data(_mm256_set1_epi64x(_s)) {} # endif template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(float _x, float _y, float _z, float _w) : data(_mm_set_ps(_w, _z, _y, _x)) {} template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(float _x, float _y, float _z, float _w) : data(_mm_set_ps(_w, _z, _y, _x)) {} template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(float _x, float _y, float _z, float _w) : data(_mm_set_ps(_w, _z, _y, _x)) {} template<> template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_lowp>::vec(int _x, int _y, int _z, int _w) : data(_mm_set_epi32(_w, _z, _y, _x)) {} template<> template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_mediump>::vec(int _x, int _y, int _z, int _w) : data(_mm_set_epi32(_w, _z, _y, _x)) {} template<> template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_highp>::vec(int _x, int _y, int _z, int _w) : data(_mm_set_epi32(_w, _z, _y, _x)) {} template<> template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(int _x, int _y, int _z, int _w) : data(_mm_cvtepi32_ps(_mm_set_epi32(_w, _z, _y, _x))) {} template<> template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(int _x, int _y, int _z, int _w) : data(_mm_cvtepi32_ps(_mm_set_epi32(_w, _z, _y, _x))) {} template<> template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(int _x, int _y, int _z, int _w) : data(_mm_cvtepi32_ps(_mm_set_epi32(_w, _z, _y, _x))) {} }//namespace glm #endif//GLM_ARCH & GLM_ARCH_SSE2_BIT #if GLM_ARCH & GLM_ARCH_NEON_BIT namespace glm { namespace detail { template struct compute_vec4_add { static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) { vec<4, float, Q> Result; Result.data = vaddq_f32(a.data, b.data); return Result; } }; template struct compute_vec4_add { static vec<4, uint, Q> call(vec<4, uint, Q> const& a, vec<4, uint, Q> const& b) { vec<4, uint, Q> Result; Result.data = vaddq_u32(a.data, b.data); return Result; } }; template struct compute_vec4_add { static vec<4, int, Q> call(vec<4, int, Q> const& a, vec<4, int, Q> const& b) { vec<4, uint, Q> Result; Result.data = vaddq_s32(a.data, b.data); return Result; } }; template struct compute_vec4_sub { static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) { vec<4, float, Q> Result; Result.data = vsubq_f32(a.data, b.data); return Result; } }; template struct compute_vec4_sub { static vec<4, uint, Q> call(vec<4, uint, Q> const& a, vec<4, uint, Q> const& b) { vec<4, uint, Q> Result; Result.data = vsubq_u32(a.data, b.data); return Result; } }; template struct compute_vec4_sub { static vec<4, int, Q> call(vec<4, int, Q> const& a, vec<4, int, Q> const& b) { vec<4, int, Q> Result; Result.data = vsubq_s32(a.data, b.data); return Result; } }; template struct compute_vec4_mul { static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) { vec<4, float, Q> Result; Result.data = vmulq_f32(a.data, b.data); return Result; } }; template struct compute_vec4_mul { static vec<4, uint, Q> call(vec<4, uint, Q> const& a, vec<4, uint, Q> const& b) { vec<4, uint, Q> Result; Result.data = vmulq_u32(a.data, b.data); return Result; } }; template struct compute_vec4_mul { static vec<4, int, Q> call(vec<4, int, Q> const& a, vec<4, int, Q> const& b) { vec<4, int, Q> Result; Result.data = vmulq_s32(a.data, b.data); return Result; } }; template struct compute_vec4_div { static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) { vec<4, float, Q> Result; Result.data = vdivq_f32(a.data, b.data); return Result; } }; template struct compute_vec4_equal { static bool call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) { uint32x4_t cmp = vceqq_f32(v1.data, v2.data); #if GLM_ARCH & GLM_ARCH_ARMV8_BIT cmp = vpminq_u32(cmp, cmp); cmp = vpminq_u32(cmp, cmp); uint32_t r = cmp[0]; #else uint32x2_t cmpx2 = vpmin_u32(vget_low_f32(cmp), vget_high_f32(cmp)); cmpx2 = vpmin_u32(cmpx2, cmpx2); uint32_t r = cmpx2[0]; #endif return r == ~0u; } }; template struct compute_vec4_equal { static bool call(vec<4, uint, Q> const& v1, vec<4, uint, Q> const& v2) { uint32x4_t cmp = vceqq_u32(v1.data, v2.data); #if GLM_ARCH & GLM_ARCH_ARMV8_BIT cmp = vpminq_u32(cmp, cmp); cmp = vpminq_u32(cmp, cmp); uint32_t r = cmp[0]; #else uint32x2_t cmpx2 = vpmin_u32(vget_low_f32(cmp), vget_high_f32(cmp)); cmpx2 = vpmin_u32(cmpx2, cmpx2); uint32_t r = cmpx2[0]; #endif return r == ~0u; } }; template struct compute_vec4_equal { static bool call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) { uint32x4_t cmp = vceqq_s32(v1.data, v2.data); #if GLM_ARCH & GLM_ARCH_ARMV8_BIT cmp = vpminq_u32(cmp, cmp); cmp = vpminq_u32(cmp, cmp); uint32_t r = cmp[0]; #else uint32x2_t cmpx2 = vpmin_u32(vget_low_f32(cmp), vget_high_f32(cmp)); cmpx2 = vpmin_u32(cmpx2, cmpx2); uint32_t r = cmpx2[0]; #endif return r == ~0u; } }; template struct compute_vec4_nequal { static bool call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) { return !compute_vec4_equal::call(v1, v2); } }; template struct compute_vec4_nequal { static bool call(vec<4, uint, Q> const& v1, vec<4, uint, Q> const& v2) { return !compute_vec4_equal::call(v1, v2); } }; template struct compute_vec4_nequal { static bool call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) { return !compute_vec4_equal::call(v1, v2); } }; }//namespace detail #if !GLM_CONFIG_XYZW_ONLY template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(float _s) : data(vdupq_n_f32(_s)) {} template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(float _s) : data(vdupq_n_f32(_s)) {} template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(float _s) : data(vdupq_n_f32(_s)) {} template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_lowp>::vec(int _s) : data(vdupq_n_s32(_s)) {} template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_mediump>::vec(int _s) : data(vdupq_n_s32(_s)) {} template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_highp>::vec(int _s) : data(vdupq_n_s32(_s)) {} template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, uint, aligned_lowp>::vec(uint _s) : data(vdupq_n_u32(_s)) {} template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, uint, aligned_mediump>::vec(uint _s) : data(vdupq_n_u32(_s)) {} template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, uint, aligned_highp>::vec(uint _s) : data(vdupq_n_u32(_s)) {} template<> template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(const vec<4, float, aligned_highp>& rhs) : data(rhs.data) {} template<> template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(const vec<4, int, aligned_highp>& rhs) : data(vcvtq_f32_s32(rhs.data)) {} template<> template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(const vec<4, uint, aligned_highp>& rhs) : data(vcvtq_f32_u32(rhs.data)) {} template<> template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(int _x, int _y, int _z, int _w) : data(vcvtq_f32_s32(vec<4, int, aligned_lowp>(_x, _y, _z, _w).data)) {} template<> template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(int _x, int _y, int _z, int _w) : data(vcvtq_f32_s32(vec<4, int, aligned_mediump>(_x, _y, _z, _w).data)) {} template<> template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(int _x, int _y, int _z, int _w) : data(vcvtq_f32_s32(vec<4, int, aligned_highp>(_x, _y, _z, _w).data)) {} template<> template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(uint _x, uint _y, uint _z, uint _w) : data(vcvtq_f32_u32(vec<4, uint, aligned_lowp>(_x, _y, _z, _w).data)) {} template<> template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(uint _x, uint _y, uint _z, uint _w) : data(vcvtq_f32_u32(vec<4, uint, aligned_mediump>(_x, _y, _z, _w).data)) {} template<> template<> GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(uint _x, uint _y, uint _z, uint _w) : data(vcvtq_f32_u32(vec<4, uint, aligned_highp>(_x, _y, _z, _w).data)) {} #endif }//namespace glm #endif ================================================ FILE: libraries/glm/exponential.hpp ================================================ /// @ref core /// @file glm/exponential.hpp /// /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions /// /// @defgroup core_func_exponential Exponential functions /// @ingroup core /// /// Provides GLSL exponential functions /// /// These all operate component-wise. The description is per component. /// /// Include to use these core features. #pragma once #include "detail/type_vec1.hpp" #include "detail/type_vec2.hpp" #include "detail/type_vec3.hpp" #include "detail/type_vec4.hpp" #include namespace glm { /// @addtogroup core_func_exponential /// @{ /// Returns 'base' raised to the power 'exponent'. /// /// @param base Floating point value. pow function is defined for input values of 'base' defined in the range (inf-, inf+) in the limit of the type qualifier. /// @param exponent Floating point value representing the 'exponent'. /// /// @see GLSL pow man page /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions template GLM_FUNC_DECL vec pow(vec const& base, vec const& exponent); /// Returns the natural exponentiation of x, i.e., e^x. /// /// @param v exp function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type qualifier. /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// @tparam T Floating-point scalar types. /// /// @see GLSL exp man page /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions template GLM_FUNC_DECL vec exp(vec const& v); /// Returns the natural logarithm of v, i.e., /// returns the value y which satisfies the equation x = e^y. /// Results are undefined if v <= 0. /// /// @param v log function is defined for input values of v defined in the range (0, inf+) in the limit of the type qualifier. /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// @tparam T Floating-point scalar types. /// /// @see GLSL log man page /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions template GLM_FUNC_DECL vec log(vec const& v); /// Returns 2 raised to the v power. /// /// @param v exp2 function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type qualifier. /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// @tparam T Floating-point scalar types. /// /// @see GLSL exp2 man page /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions template GLM_FUNC_DECL vec exp2(vec const& v); /// Returns the base 2 log of x, i.e., returns the value y, /// which satisfies the equation x = 2 ^ y. /// /// @param v log2 function is defined for input values of v defined in the range (0, inf+) in the limit of the type qualifier. /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// @tparam T Floating-point scalar types. /// /// @see GLSL log2 man page /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions template GLM_FUNC_DECL vec log2(vec const& v); /// Returns the positive square root of v. /// /// @param v sqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type qualifier. /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// @tparam T Floating-point scalar types. /// /// @see GLSL sqrt man page /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions template GLM_FUNC_DECL vec sqrt(vec const& v); /// Returns the reciprocal of the positive square root of v. /// /// @param v inversesqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type qualifier. /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// @tparam T Floating-point scalar types. /// /// @see GLSL inversesqrt man page /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions template GLM_FUNC_DECL vec inversesqrt(vec const& v); /// @} }//namespace glm #include "detail/func_exponential.inl" ================================================ FILE: libraries/glm/ext/matrix_clip_space.hpp ================================================ /// @ref ext_matrix_clip_space /// @file glm/ext/matrix_clip_space.hpp /// /// @defgroup ext_matrix_clip_space GLM_EXT_matrix_clip_space /// @ingroup ext /// /// Defines functions that generate clip space transformation matrices. /// /// The matrices generated by this extension use standard OpenGL fixed-function /// conventions. For example, the lookAt function generates a transform from world /// space into the specific eye space that the projective matrix functions /// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility /// specifications defines the particular layout of this eye space. /// /// Include to use the features of this extension. /// /// @see ext_matrix_transform /// @see ext_matrix_projection #pragma once // Dependencies #include "../ext/scalar_constants.hpp" #include "../geometric.hpp" #include "../trigonometric.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_matrix_clip_space extension included") #endif namespace glm { /// @addtogroup ext_matrix_clip_space /// @{ /// Creates a matrix for projecting two-dimensional coordinates onto the screen. /// /// @tparam T A floating-point scalar type /// /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top, T const& zNear, T const& zFar) /// @see gluOrtho2D man page template GLM_FUNC_DECL mat<4, 4, T, defaultp> ortho( T left, T right, T bottom, T top); /// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) /// /// @tparam T A floating-point scalar type /// /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) template GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoLH_ZO( T left, T right, T bottom, T top, T zNear, T zFar); /// Creates a matrix for an orthographic parallel viewing volume using right-handed coordinates. /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) /// /// @tparam T A floating-point scalar type /// /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) template GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoLH_NO( T left, T right, T bottom, T top, T zNear, T zFar); /// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) /// /// @tparam T A floating-point scalar type /// /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) template GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoRH_ZO( T left, T right, T bottom, T top, T zNear, T zFar); /// Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates. /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) /// /// @tparam T A floating-point scalar type /// /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) template GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoRH_NO( T left, T right, T bottom, T top, T zNear, T zFar); /// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) /// /// @tparam T A floating-point scalar type /// /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) template GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoZO( T left, T right, T bottom, T top, T zNear, T zFar); /// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) /// /// @tparam T A floating-point scalar type /// /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) template GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoNO( T left, T right, T bottom, T top, T zNear, T zFar); /// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) /// /// @tparam T A floating-point scalar type /// /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) template GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoLH( T left, T right, T bottom, T top, T zNear, T zFar); /// Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates. /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) /// /// @tparam T A floating-point scalar type /// /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) template GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoRH( T left, T right, T bottom, T top, T zNear, T zFar); /// Creates a matrix for an orthographic parallel viewing volume, using the default handedness and default near and far clip planes definition. /// To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE. /// /// @tparam T A floating-point scalar type /// /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) /// @see glOrtho man page template GLM_FUNC_DECL mat<4, 4, T, defaultp> ortho( T left, T right, T bottom, T top, T zNear, T zFar); /// Creates a left handed frustum matrix. /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) /// /// @tparam T A floating-point scalar type template GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumLH_ZO( T left, T right, T bottom, T top, T near, T far); /// Creates a left handed frustum matrix. /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) /// /// @tparam T A floating-point scalar type template GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumLH_NO( T left, T right, T bottom, T top, T near, T far); /// Creates a right handed frustum matrix. /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) /// /// @tparam T A floating-point scalar type template GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumRH_ZO( T left, T right, T bottom, T top, T near, T far); /// Creates a right handed frustum matrix. /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) /// /// @tparam T A floating-point scalar type template GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumRH_NO( T left, T right, T bottom, T top, T near, T far); /// Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) /// /// @tparam T A floating-point scalar type template GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumZO( T left, T right, T bottom, T top, T near, T far); /// Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) /// /// @tparam T A floating-point scalar type template GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumNO( T left, T right, T bottom, T top, T near, T far); /// Creates a left handed frustum matrix. /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) /// /// @tparam T A floating-point scalar type template GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumLH( T left, T right, T bottom, T top, T near, T far); /// Creates a right handed frustum matrix. /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) /// /// @tparam T A floating-point scalar type template GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumRH( T left, T right, T bottom, T top, T near, T far); /// Creates a frustum matrix with default handedness, using the default handedness and default near and far clip planes definition. /// To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE. /// /// @tparam T A floating-point scalar type /// @see glFrustum man page template GLM_FUNC_DECL mat<4, 4, T, defaultp> frustum( T left, T right, T bottom, T top, T near, T far); /// Creates a matrix for a right handed, symetric perspective-view frustum. /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) /// /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). /// /// @tparam T A floating-point scalar type template GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveRH_ZO( T fovy, T aspect, T near, T far); /// Creates a matrix for a right handed, symetric perspective-view frustum. /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) /// /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). /// /// @tparam T A floating-point scalar type template GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveRH_NO( T fovy, T aspect, T near, T far); /// Creates a matrix for a left handed, symetric perspective-view frustum. /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) /// /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). /// /// @tparam T A floating-point scalar type template GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveLH_ZO( T fovy, T aspect, T near, T far); /// Creates a matrix for a left handed, symetric perspective-view frustum. /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) /// /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). /// /// @tparam T A floating-point scalar type template GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveLH_NO( T fovy, T aspect, T near, T far); /// Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) /// /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). /// /// @tparam T A floating-point scalar type template GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveZO( T fovy, T aspect, T near, T far); /// Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) /// /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). /// /// @tparam T A floating-point scalar type template GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveNO( T fovy, T aspect, T near, T far); /// Creates a matrix for a right handed, symetric perspective-view frustum. /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) /// /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). /// /// @tparam T A floating-point scalar type template GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveRH( T fovy, T aspect, T near, T far); /// Creates a matrix for a left handed, symetric perspective-view frustum. /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) /// /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). /// /// @tparam T A floating-point scalar type template GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveLH( T fovy, T aspect, T near, T far); /// Creates a matrix for a symetric perspective-view frustum based on the default handedness and default near and far clip planes definition. /// To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE. /// /// @param fovy Specifies the field of view angle in the y direction. Expressed in radians. /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). /// /// @tparam T A floating-point scalar type /// @see gluPerspective man page template GLM_FUNC_DECL mat<4, 4, T, defaultp> perspective( T fovy, T aspect, T near, T far); /// Builds a perspective projection matrix based on a field of view using right-handed coordinates. /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) /// /// @param fov Expressed in radians. /// @param width Width of the viewport /// @param height Height of the viewport /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). /// /// @tparam T A floating-point scalar type template GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovRH_ZO( T fov, T width, T height, T near, T far); /// Builds a perspective projection matrix based on a field of view using right-handed coordinates. /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) /// /// @param fov Expressed in radians. /// @param width Width of the viewport /// @param height Height of the viewport /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). /// /// @tparam T A floating-point scalar type template GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovRH_NO( T fov, T width, T height, T near, T far); /// Builds a perspective projection matrix based on a field of view using left-handed coordinates. /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) /// /// @param fov Expressed in radians. /// @param width Width of the viewport /// @param height Height of the viewport /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). /// /// @tparam T A floating-point scalar type template GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovLH_ZO( T fov, T width, T height, T near, T far); /// Builds a perspective projection matrix based on a field of view using left-handed coordinates. /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) /// /// @param fov Expressed in radians. /// @param width Width of the viewport /// @param height Height of the viewport /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). /// /// @tparam T A floating-point scalar type template GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovLH_NO( T fov, T width, T height, T near, T far); /// Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) /// /// @param fov Expressed in radians. /// @param width Width of the viewport /// @param height Height of the viewport /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). /// /// @tparam T A floating-point scalar type template GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovZO( T fov, T width, T height, T near, T far); /// Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) /// /// @param fov Expressed in radians. /// @param width Width of the viewport /// @param height Height of the viewport /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). /// /// @tparam T A floating-point scalar type template GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovNO( T fov, T width, T height, T near, T far); /// Builds a right handed perspective projection matrix based on a field of view. /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) /// /// @param fov Expressed in radians. /// @param width Width of the viewport /// @param height Height of the viewport /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). /// /// @tparam T A floating-point scalar type template GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovRH( T fov, T width, T height, T near, T far); /// Builds a left handed perspective projection matrix based on a field of view. /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) /// /// @param fov Expressed in radians. /// @param width Width of the viewport /// @param height Height of the viewport /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). /// /// @tparam T A floating-point scalar type template GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovLH( T fov, T width, T height, T near, T far); /// Builds a perspective projection matrix based on a field of view and the default handedness and default near and far clip planes definition. /// To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE. /// /// @param fov Expressed in radians. /// @param width Width of the viewport /// @param height Height of the viewport /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). /// /// @tparam T A floating-point scalar type template GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFov( T fov, T width, T height, T near, T far); /// Creates a matrix for a left handed, symmetric perspective-view frustum with far plane at infinite. /// /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). /// /// @tparam T A floating-point scalar type template GLM_FUNC_DECL mat<4, 4, T, defaultp> infinitePerspectiveLH( T fovy, T aspect, T near); /// Creates a matrix for a right handed, symmetric perspective-view frustum with far plane at infinite. /// /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). /// /// @tparam T A floating-point scalar type template GLM_FUNC_DECL mat<4, 4, T, defaultp> infinitePerspectiveRH( T fovy, T aspect, T near); /// Creates a matrix for a symmetric perspective-view frustum with far plane at infinite with default handedness. /// /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). /// /// @tparam T A floating-point scalar type template GLM_FUNC_DECL mat<4, 4, T, defaultp> infinitePerspective( T fovy, T aspect, T near); /// Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping. /// /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). /// /// @tparam T A floating-point scalar type template GLM_FUNC_DECL mat<4, 4, T, defaultp> tweakedInfinitePerspective( T fovy, T aspect, T near); /// Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping. /// /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). /// @param ep Epsilon /// /// @tparam T A floating-point scalar type template GLM_FUNC_DECL mat<4, 4, T, defaultp> tweakedInfinitePerspective( T fovy, T aspect, T near, T ep); /// @} }//namespace glm #include "matrix_clip_space.inl" ================================================ FILE: libraries/glm/ext/matrix_clip_space.inl ================================================ namespace glm { template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> ortho(T left, T right, T bottom, T top) { mat<4, 4, T, defaultp> Result(static_cast(1)); Result[0][0] = static_cast(2) / (right - left); Result[1][1] = static_cast(2) / (top - bottom); Result[2][2] = - static_cast(1); Result[3][0] = - (right + left) / (right - left); Result[3][1] = - (top + bottom) / (top - bottom); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoLH_ZO(T left, T right, T bottom, T top, T zNear, T zFar) { mat<4, 4, T, defaultp> Result(1); Result[0][0] = static_cast(2) / (right - left); Result[1][1] = static_cast(2) / (top - bottom); Result[2][2] = static_cast(1) / (zFar - zNear); Result[3][0] = - (right + left) / (right - left); Result[3][1] = - (top + bottom) / (top - bottom); Result[3][2] = - zNear / (zFar - zNear); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoLH_NO(T left, T right, T bottom, T top, T zNear, T zFar) { mat<4, 4, T, defaultp> Result(1); Result[0][0] = static_cast(2) / (right - left); Result[1][1] = static_cast(2) / (top - bottom); Result[2][2] = static_cast(2) / (zFar - zNear); Result[3][0] = - (right + left) / (right - left); Result[3][1] = - (top + bottom) / (top - bottom); Result[3][2] = - (zFar + zNear) / (zFar - zNear); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoRH_ZO(T left, T right, T bottom, T top, T zNear, T zFar) { mat<4, 4, T, defaultp> Result(1); Result[0][0] = static_cast(2) / (right - left); Result[1][1] = static_cast(2) / (top - bottom); Result[2][2] = - static_cast(1) / (zFar - zNear); Result[3][0] = - (right + left) / (right - left); Result[3][1] = - (top + bottom) / (top - bottom); Result[3][2] = - zNear / (zFar - zNear); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoRH_NO(T left, T right, T bottom, T top, T zNear, T zFar) { mat<4, 4, T, defaultp> Result(1); Result[0][0] = static_cast(2) / (right - left); Result[1][1] = static_cast(2) / (top - bottom); Result[2][2] = - static_cast(2) / (zFar - zNear); Result[3][0] = - (right + left) / (right - left); Result[3][1] = - (top + bottom) / (top - bottom); Result[3][2] = - (zFar + zNear) / (zFar - zNear); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoZO(T left, T right, T bottom, T top, T zNear, T zFar) { # if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT return orthoLH_ZO(left, right, bottom, top, zNear, zFar); # else return orthoRH_ZO(left, right, bottom, top, zNear, zFar); # endif } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoNO(T left, T right, T bottom, T top, T zNear, T zFar) { # if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT return orthoLH_NO(left, right, bottom, top, zNear, zFar); # else return orthoRH_NO(left, right, bottom, top, zNear, zFar); # endif } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoLH(T left, T right, T bottom, T top, T zNear, T zFar) { # if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT return orthoLH_ZO(left, right, bottom, top, zNear, zFar); # else return orthoLH_NO(left, right, bottom, top, zNear, zFar); # endif } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoRH(T left, T right, T bottom, T top, T zNear, T zFar) { # if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT return orthoRH_ZO(left, right, bottom, top, zNear, zFar); # else return orthoRH_NO(left, right, bottom, top, zNear, zFar); # endif } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> ortho(T left, T right, T bottom, T top, T zNear, T zFar) { # if GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO return orthoLH_ZO(left, right, bottom, top, zNear, zFar); # elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO return orthoLH_NO(left, right, bottom, top, zNear, zFar); # elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO return orthoRH_ZO(left, right, bottom, top, zNear, zFar); # elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO return orthoRH_NO(left, right, bottom, top, zNear, zFar); # endif } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumLH_ZO(T left, T right, T bottom, T top, T nearVal, T farVal) { mat<4, 4, T, defaultp> Result(0); Result[0][0] = (static_cast(2) * nearVal) / (right - left); Result[1][1] = (static_cast(2) * nearVal) / (top - bottom); Result[2][0] = (right + left) / (right - left); Result[2][1] = (top + bottom) / (top - bottom); Result[2][2] = farVal / (farVal - nearVal); Result[2][3] = static_cast(1); Result[3][2] = -(farVal * nearVal) / (farVal - nearVal); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumLH_NO(T left, T right, T bottom, T top, T nearVal, T farVal) { mat<4, 4, T, defaultp> Result(0); Result[0][0] = (static_cast(2) * nearVal) / (right - left); Result[1][1] = (static_cast(2) * nearVal) / (top - bottom); Result[2][0] = (right + left) / (right - left); Result[2][1] = (top + bottom) / (top - bottom); Result[2][2] = (farVal + nearVal) / (farVal - nearVal); Result[2][3] = static_cast(1); Result[3][2] = - (static_cast(2) * farVal * nearVal) / (farVal - nearVal); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumRH_ZO(T left, T right, T bottom, T top, T nearVal, T farVal) { mat<4, 4, T, defaultp> Result(0); Result[0][0] = (static_cast(2) * nearVal) / (right - left); Result[1][1] = (static_cast(2) * nearVal) / (top - bottom); Result[2][0] = (right + left) / (right - left); Result[2][1] = (top + bottom) / (top - bottom); Result[2][2] = farVal / (nearVal - farVal); Result[2][3] = static_cast(-1); Result[3][2] = -(farVal * nearVal) / (farVal - nearVal); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumRH_NO(T left, T right, T bottom, T top, T nearVal, T farVal) { mat<4, 4, T, defaultp> Result(0); Result[0][0] = (static_cast(2) * nearVal) / (right - left); Result[1][1] = (static_cast(2) * nearVal) / (top - bottom); Result[2][0] = (right + left) / (right - left); Result[2][1] = (top + bottom) / (top - bottom); Result[2][2] = - (farVal + nearVal) / (farVal - nearVal); Result[2][3] = static_cast(-1); Result[3][2] = - (static_cast(2) * farVal * nearVal) / (farVal - nearVal); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumZO(T left, T right, T bottom, T top, T nearVal, T farVal) { # if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT return frustumLH_ZO(left, right, bottom, top, nearVal, farVal); # else return frustumRH_ZO(left, right, bottom, top, nearVal, farVal); # endif } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumNO(T left, T right, T bottom, T top, T nearVal, T farVal) { # if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT return frustumLH_NO(left, right, bottom, top, nearVal, farVal); # else return frustumRH_NO(left, right, bottom, top, nearVal, farVal); # endif } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumLH(T left, T right, T bottom, T top, T nearVal, T farVal) { # if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT return frustumLH_ZO(left, right, bottom, top, nearVal, farVal); # else return frustumLH_NO(left, right, bottom, top, nearVal, farVal); # endif } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumRH(T left, T right, T bottom, T top, T nearVal, T farVal) { # if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT return frustumRH_ZO(left, right, bottom, top, nearVal, farVal); # else return frustumRH_NO(left, right, bottom, top, nearVal, farVal); # endif } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustum(T left, T right, T bottom, T top, T nearVal, T farVal) { # if GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO return frustumLH_ZO(left, right, bottom, top, nearVal, farVal); # elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO return frustumLH_NO(left, right, bottom, top, nearVal, farVal); # elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO return frustumRH_ZO(left, right, bottom, top, nearVal, farVal); # elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO return frustumRH_NO(left, right, bottom, top, nearVal, farVal); # endif } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveRH_ZO(T fovy, T aspect, T zNear, T zFar) { assert(abs(aspect - std::numeric_limits::epsilon()) > static_cast(0)); T const tanHalfFovy = tan(fovy / static_cast(2)); mat<4, 4, T, defaultp> Result(static_cast(0)); Result[0][0] = static_cast(1) / (aspect * tanHalfFovy); Result[1][1] = static_cast(1) / (tanHalfFovy); Result[2][2] = zFar / (zNear - zFar); Result[2][3] = - static_cast(1); Result[3][2] = -(zFar * zNear) / (zFar - zNear); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveRH_NO(T fovy, T aspect, T zNear, T zFar) { assert(abs(aspect - std::numeric_limits::epsilon()) > static_cast(0)); T const tanHalfFovy = tan(fovy / static_cast(2)); mat<4, 4, T, defaultp> Result(static_cast(0)); Result[0][0] = static_cast(1) / (aspect * tanHalfFovy); Result[1][1] = static_cast(1) / (tanHalfFovy); Result[2][2] = - (zFar + zNear) / (zFar - zNear); Result[2][3] = - static_cast(1); Result[3][2] = - (static_cast(2) * zFar * zNear) / (zFar - zNear); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveLH_ZO(T fovy, T aspect, T zNear, T zFar) { assert(abs(aspect - std::numeric_limits::epsilon()) > static_cast(0)); T const tanHalfFovy = tan(fovy / static_cast(2)); mat<4, 4, T, defaultp> Result(static_cast(0)); Result[0][0] = static_cast(1) / (aspect * tanHalfFovy); Result[1][1] = static_cast(1) / (tanHalfFovy); Result[2][2] = zFar / (zFar - zNear); Result[2][3] = static_cast(1); Result[3][2] = -(zFar * zNear) / (zFar - zNear); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveLH_NO(T fovy, T aspect, T zNear, T zFar) { assert(abs(aspect - std::numeric_limits::epsilon()) > static_cast(0)); T const tanHalfFovy = tan(fovy / static_cast(2)); mat<4, 4, T, defaultp> Result(static_cast(0)); Result[0][0] = static_cast(1) / (aspect * tanHalfFovy); Result[1][1] = static_cast(1) / (tanHalfFovy); Result[2][2] = (zFar + zNear) / (zFar - zNear); Result[2][3] = static_cast(1); Result[3][2] = - (static_cast(2) * zFar * zNear) / (zFar - zNear); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveZO(T fovy, T aspect, T zNear, T zFar) { # if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT return perspectiveLH_ZO(fovy, aspect, zNear, zFar); # else return perspectiveRH_ZO(fovy, aspect, zNear, zFar); # endif } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveNO(T fovy, T aspect, T zNear, T zFar) { # if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT return perspectiveLH_NO(fovy, aspect, zNear, zFar); # else return perspectiveRH_NO(fovy, aspect, zNear, zFar); # endif } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveLH(T fovy, T aspect, T zNear, T zFar) { # if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT return perspectiveLH_ZO(fovy, aspect, zNear, zFar); # else return perspectiveLH_NO(fovy, aspect, zNear, zFar); # endif } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveRH(T fovy, T aspect, T zNear, T zFar) { # if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT return perspectiveRH_ZO(fovy, aspect, zNear, zFar); # else return perspectiveRH_NO(fovy, aspect, zNear, zFar); # endif } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspective(T fovy, T aspect, T zNear, T zFar) { # if GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO return perspectiveLH_ZO(fovy, aspect, zNear, zFar); # elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO return perspectiveLH_NO(fovy, aspect, zNear, zFar); # elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO return perspectiveRH_ZO(fovy, aspect, zNear, zFar); # elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO return perspectiveRH_NO(fovy, aspect, zNear, zFar); # endif } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovRH_ZO(T fov, T width, T height, T zNear, T zFar) { assert(width > static_cast(0)); assert(height > static_cast(0)); assert(fov > static_cast(0)); T const rad = fov; T const h = glm::cos(static_cast(0.5) * rad) / glm::sin(static_cast(0.5) * rad); T const w = h * height / width; ///todo max(width , Height) / min(width , Height)? mat<4, 4, T, defaultp> Result(static_cast(0)); Result[0][0] = w; Result[1][1] = h; Result[2][2] = zFar / (zNear - zFar); Result[2][3] = - static_cast(1); Result[3][2] = -(zFar * zNear) / (zFar - zNear); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovRH_NO(T fov, T width, T height, T zNear, T zFar) { assert(width > static_cast(0)); assert(height > static_cast(0)); assert(fov > static_cast(0)); T const rad = fov; T const h = glm::cos(static_cast(0.5) * rad) / glm::sin(static_cast(0.5) * rad); T const w = h * height / width; ///todo max(width , Height) / min(width , Height)? mat<4, 4, T, defaultp> Result(static_cast(0)); Result[0][0] = w; Result[1][1] = h; Result[2][2] = - (zFar + zNear) / (zFar - zNear); Result[2][3] = - static_cast(1); Result[3][2] = - (static_cast(2) * zFar * zNear) / (zFar - zNear); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovLH_ZO(T fov, T width, T height, T zNear, T zFar) { assert(width > static_cast(0)); assert(height > static_cast(0)); assert(fov > static_cast(0)); T const rad = fov; T const h = glm::cos(static_cast(0.5) * rad) / glm::sin(static_cast(0.5) * rad); T const w = h * height / width; ///todo max(width , Height) / min(width , Height)? mat<4, 4, T, defaultp> Result(static_cast(0)); Result[0][0] = w; Result[1][1] = h; Result[2][2] = zFar / (zFar - zNear); Result[2][3] = static_cast(1); Result[3][2] = -(zFar * zNear) / (zFar - zNear); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovLH_NO(T fov, T width, T height, T zNear, T zFar) { assert(width > static_cast(0)); assert(height > static_cast(0)); assert(fov > static_cast(0)); T const rad = fov; T const h = glm::cos(static_cast(0.5) * rad) / glm::sin(static_cast(0.5) * rad); T const w = h * height / width; ///todo max(width , Height) / min(width , Height)? mat<4, 4, T, defaultp> Result(static_cast(0)); Result[0][0] = w; Result[1][1] = h; Result[2][2] = (zFar + zNear) / (zFar - zNear); Result[2][3] = static_cast(1); Result[3][2] = - (static_cast(2) * zFar * zNear) / (zFar - zNear); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovZO(T fov, T width, T height, T zNear, T zFar) { # if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT return perspectiveFovLH_ZO(fov, width, height, zNear, zFar); # else return perspectiveFovRH_ZO(fov, width, height, zNear, zFar); # endif } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovNO(T fov, T width, T height, T zNear, T zFar) { # if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT return perspectiveFovLH_NO(fov, width, height, zNear, zFar); # else return perspectiveFovRH_NO(fov, width, height, zNear, zFar); # endif } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovLH(T fov, T width, T height, T zNear, T zFar) { # if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT return perspectiveFovLH_ZO(fov, width, height, zNear, zFar); # else return perspectiveFovLH_NO(fov, width, height, zNear, zFar); # endif } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovRH(T fov, T width, T height, T zNear, T zFar) { # if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT return perspectiveFovRH_ZO(fov, width, height, zNear, zFar); # else return perspectiveFovRH_NO(fov, width, height, zNear, zFar); # endif } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFov(T fov, T width, T height, T zNear, T zFar) { # if GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO return perspectiveFovLH_ZO(fov, width, height, zNear, zFar); # elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO return perspectiveFovLH_NO(fov, width, height, zNear, zFar); # elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO return perspectiveFovRH_ZO(fov, width, height, zNear, zFar); # elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO return perspectiveFovRH_NO(fov, width, height, zNear, zFar); # endif } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> infinitePerspectiveRH(T fovy, T aspect, T zNear) { T const range = tan(fovy / static_cast(2)) * zNear; T const left = -range * aspect; T const right = range * aspect; T const bottom = -range; T const top = range; mat<4, 4, T, defaultp> Result(static_cast(0)); Result[0][0] = (static_cast(2) * zNear) / (right - left); Result[1][1] = (static_cast(2) * zNear) / (top - bottom); Result[2][2] = - static_cast(1); Result[2][3] = - static_cast(1); Result[3][2] = - static_cast(2) * zNear; return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> infinitePerspectiveLH(T fovy, T aspect, T zNear) { T const range = tan(fovy / static_cast(2)) * zNear; T const left = -range * aspect; T const right = range * aspect; T const bottom = -range; T const top = range; mat<4, 4, T, defaultp> Result(T(0)); Result[0][0] = (static_cast(2) * zNear) / (right - left); Result[1][1] = (static_cast(2) * zNear) / (top - bottom); Result[2][2] = static_cast(1); Result[2][3] = static_cast(1); Result[3][2] = - static_cast(2) * zNear; return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> infinitePerspective(T fovy, T aspect, T zNear) { # if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT return infinitePerspectiveLH(fovy, aspect, zNear); # else return infinitePerspectiveRH(fovy, aspect, zNear); # endif } // Infinite projection matrix: http://www.terathon.com/gdc07_lengyel.pdf template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> tweakedInfinitePerspective(T fovy, T aspect, T zNear, T ep) { T const range = tan(fovy / static_cast(2)) * zNear; T const left = -range * aspect; T const right = range * aspect; T const bottom = -range; T const top = range; mat<4, 4, T, defaultp> Result(static_cast(0)); Result[0][0] = (static_cast(2) * zNear) / (right - left); Result[1][1] = (static_cast(2) * zNear) / (top - bottom); Result[2][2] = ep - static_cast(1); Result[2][3] = static_cast(-1); Result[3][2] = (ep - static_cast(2)) * zNear; return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> tweakedInfinitePerspective(T fovy, T aspect, T zNear) { return tweakedInfinitePerspective(fovy, aspect, zNear, epsilon()); } }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_common.hpp ================================================ /// @ref ext_matrix_common /// @file glm/ext/matrix_common.hpp /// /// @defgroup ext_matrix_common GLM_EXT_matrix_common /// @ingroup ext /// /// Defines functions for common matrix operations. /// /// Include to use the features of this extension. /// /// @see ext_matrix_common #pragma once #include "../detail/qualifier.hpp" #include "../detail/_fixes.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_matrix_transform extension included") #endif namespace glm { /// @addtogroup ext_matrix_common /// @{ template GLM_FUNC_DECL mat mix(mat const& x, mat const& y, mat const& a); template GLM_FUNC_DECL mat mix(mat const& x, mat const& y, U a); /// @} }//namespace glm #include "matrix_common.inl" ================================================ FILE: libraries/glm/ext/matrix_common.inl ================================================ #include "../matrix.hpp" namespace glm { template GLM_FUNC_QUALIFIER mat mix(mat const& x, mat const& y, U a) { return mat(x) * (static_cast(1) - a) + mat(y) * a; } template GLM_FUNC_QUALIFIER mat mix(mat const& x, mat const& y, mat const& a) { return matrixCompMult(mat(x), static_cast(1) - a) + matrixCompMult(mat(y), a); } }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_double2x2.hpp ================================================ /// @ref core /// @file glm/ext/matrix_double2x2.hpp #pragma once #include "../detail/type_mat2x2.hpp" namespace glm { /// @addtogroup core_matrix /// @{ /// 2 columns of 2 components matrix of double-precision floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices typedef mat<2, 2, double, defaultp> dmat2x2; /// 2 columns of 2 components matrix of double-precision floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices typedef mat<2, 2, double, defaultp> dmat2; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_double2x2_precision.hpp ================================================ /// @ref core /// @file glm/ext/matrix_double2x2_precision.hpp #pragma once #include "../detail/type_mat2x2.hpp" namespace glm { /// @addtogroup core_matrix_precision /// @{ /// 2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<2, 2, double, lowp> lowp_dmat2; /// 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<2, 2, double, mediump> mediump_dmat2; /// 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<2, 2, double, highp> highp_dmat2; /// 2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<2, 2, double, lowp> lowp_dmat2x2; /// 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<2, 2, double, mediump> mediump_dmat2x2; /// 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<2, 2, double, highp> highp_dmat2x2; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_double2x3.hpp ================================================ /// @ref core /// @file glm/ext/matrix_double2x3.hpp #pragma once #include "../detail/type_mat2x3.hpp" namespace glm { /// @addtogroup core_matrix /// @{ /// 2 columns of 3 components matrix of double-precision floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices typedef mat<2, 3, double, defaultp> dmat2x3; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_double2x3_precision.hpp ================================================ /// @ref core /// @file glm/ext/matrix_double2x3_precision.hpp #pragma once #include "../detail/type_mat2x3.hpp" namespace glm { /// @addtogroup core_matrix_precision /// @{ /// 2 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<2, 3, double, lowp> lowp_dmat2x3; /// 2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<2, 3, double, mediump> mediump_dmat2x3; /// 2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<2, 3, double, highp> highp_dmat2x3; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_double2x4.hpp ================================================ /// @ref core /// @file glm/ext/matrix_double2x4.hpp #pragma once #include "../detail/type_mat2x4.hpp" namespace glm { /// @addtogroup core_matrix /// @{ /// 2 columns of 4 components matrix of double-precision floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices typedef mat<2, 4, double, defaultp> dmat2x4; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_double2x4_precision.hpp ================================================ /// @ref core /// @file glm/ext/matrix_double2x4_precision.hpp #pragma once #include "../detail/type_mat2x4.hpp" namespace glm { /// @addtogroup core_matrix_precision /// @{ /// 2 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<2, 4, double, lowp> lowp_dmat2x4; /// 2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<2, 4, double, mediump> mediump_dmat2x4; /// 2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<2, 4, double, highp> highp_dmat2x4; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_double3x2.hpp ================================================ /// @ref core /// @file glm/ext/matrix_double3x2.hpp #pragma once #include "../detail/type_mat3x2.hpp" namespace glm { /// @addtogroup core_matrix /// @{ /// 3 columns of 2 components matrix of double-precision floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices typedef mat<3, 2, double, defaultp> dmat3x2; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_double3x2_precision.hpp ================================================ /// @ref core /// @file glm/ext/matrix_double3x2_precision.hpp #pragma once #include "../detail/type_mat3x2.hpp" namespace glm { /// @addtogroup core_matrix_precision /// @{ /// 3 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<3, 2, double, lowp> lowp_dmat3x2; /// 3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<3, 2, double, mediump> mediump_dmat3x2; /// 3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<3, 2, double, highp> highp_dmat3x2; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_double3x3.hpp ================================================ /// @ref core /// @file glm/ext/matrix_double3x3.hpp #pragma once #include "../detail/type_mat3x3.hpp" namespace glm { /// @addtogroup core_matrix /// @{ /// 3 columns of 3 components matrix of double-precision floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices typedef mat<3, 3, double, defaultp> dmat3x3; /// 3 columns of 3 components matrix of double-precision floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices typedef mat<3, 3, double, defaultp> dmat3; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_double3x3_precision.hpp ================================================ /// @ref core /// @file glm/ext/matrix_double3x3_precision.hpp #pragma once #include "../detail/type_mat3x3.hpp" namespace glm { /// @addtogroup core_matrix_precision /// @{ /// 3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<3, 3, double, lowp> lowp_dmat3; /// 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<3, 3, double, mediump> mediump_dmat3; /// 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<3, 3, double, highp> highp_dmat3; /// 3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<3, 3, double, lowp> lowp_dmat3x3; /// 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<3, 3, double, mediump> mediump_dmat3x3; /// 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<3, 3, double, highp> highp_dmat3x3; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_double3x4.hpp ================================================ /// @ref core /// @file glm/ext/matrix_double3x4.hpp #pragma once #include "../detail/type_mat3x4.hpp" namespace glm { /// @addtogroup core_matrix /// @{ /// 3 columns of 4 components matrix of double-precision floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices typedef mat<3, 4, double, defaultp> dmat3x4; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_double3x4_precision.hpp ================================================ /// @ref core /// @file glm/ext/matrix_double3x4_precision.hpp #pragma once #include "../detail/type_mat3x4.hpp" namespace glm { /// @addtogroup core_matrix_precision /// @{ /// 3 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<3, 4, double, lowp> lowp_dmat3x4; /// 3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<3, 4, double, mediump> mediump_dmat3x4; /// 3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<3, 4, double, highp> highp_dmat3x4; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_double4x2.hpp ================================================ /// @ref core /// @file glm/ext/matrix_double4x2.hpp #pragma once #include "../detail/type_mat4x2.hpp" namespace glm { /// @addtogroup core_matrix /// @{ /// 4 columns of 2 components matrix of double-precision floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices typedef mat<4, 2, double, defaultp> dmat4x2; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_double4x2_precision.hpp ================================================ /// @ref core /// @file glm/ext/matrix_double4x2_precision.hpp #pragma once #include "../detail/type_mat4x2.hpp" namespace glm { /// @addtogroup core_matrix_precision /// @{ /// 4 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<4, 2, double, lowp> lowp_dmat4x2; /// 4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<4, 2, double, mediump> mediump_dmat4x2; /// 4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<4, 2, double, highp> highp_dmat4x2; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_double4x3.hpp ================================================ /// @ref core /// @file glm/ext/matrix_double4x3.hpp #pragma once #include "../detail/type_mat4x3.hpp" namespace glm { /// @addtogroup core_matrix /// @{ /// 4 columns of 3 components matrix of double-precision floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices typedef mat<4, 3, double, defaultp> dmat4x3; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_double4x3_precision.hpp ================================================ /// @ref core /// @file glm/ext/matrix_double4x3_precision.hpp #pragma once #include "../detail/type_mat4x3.hpp" namespace glm { /// @addtogroup core_matrix_precision /// @{ /// 4 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<4, 3, double, lowp> lowp_dmat4x3; /// 4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<4, 3, double, mediump> mediump_dmat4x3; /// 4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<4, 3, double, highp> highp_dmat4x3; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_double4x4.hpp ================================================ /// @ref core /// @file glm/ext/matrix_double4x4.hpp #pragma once #include "../detail/type_mat4x4.hpp" namespace glm { /// @addtogroup core_matrix /// @{ /// 4 columns of 4 components matrix of double-precision floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices typedef mat<4, 4, double, defaultp> dmat4x4; /// 4 columns of 4 components matrix of double-precision floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices typedef mat<4, 4, double, defaultp> dmat4; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_double4x4_precision.hpp ================================================ /// @ref core /// @file glm/ext/matrix_double4x4_precision.hpp #pragma once #include "../detail/type_mat4x4.hpp" namespace glm { /// @addtogroup core_matrix_precision /// @{ /// 4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<4, 4, double, lowp> lowp_dmat4; /// 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<4, 4, double, mediump> mediump_dmat4; /// 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<4, 4, double, highp> highp_dmat4; /// 4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<4, 4, double, lowp> lowp_dmat4x4; /// 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<4, 4, double, mediump> mediump_dmat4x4; /// 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<4, 4, double, highp> highp_dmat4x4; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_float2x2.hpp ================================================ /// @ref core /// @file glm/ext/matrix_float2x2.hpp #pragma once #include "../detail/type_mat2x2.hpp" namespace glm { /// @addtogroup core_matrix /// @{ /// 2 columns of 2 components matrix of single-precision floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices typedef mat<2, 2, float, defaultp> mat2x2; /// 2 columns of 2 components matrix of single-precision floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices typedef mat<2, 2, float, defaultp> mat2; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_float2x2_precision.hpp ================================================ /// @ref core /// @file glm/ext/matrix_float2x2_precision.hpp #pragma once #include "../detail/type_mat2x2.hpp" namespace glm { /// @addtogroup core_matrix_precision /// @{ /// 2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<2, 2, float, lowp> lowp_mat2; /// 2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<2, 2, float, mediump> mediump_mat2; /// 2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<2, 2, float, highp> highp_mat2; /// 2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<2, 2, float, lowp> lowp_mat2x2; /// 2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<2, 2, float, mediump> mediump_mat2x2; /// 2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<2, 2, float, highp> highp_mat2x2; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_float2x3.hpp ================================================ /// @ref core /// @file glm/ext/matrix_float2x3.hpp #pragma once #include "../detail/type_mat2x3.hpp" namespace glm { /// @addtogroup core_matrix /// @{ /// 2 columns of 3 components matrix of single-precision floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices typedef mat<2, 3, float, defaultp> mat2x3; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_float2x3_precision.hpp ================================================ /// @ref core /// @file glm/ext/matrix_float2x3_precision.hpp #pragma once #include "../detail/type_mat2x3.hpp" namespace glm { /// @addtogroup core_matrix_precision /// @{ /// 2 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<2, 3, float, lowp> lowp_mat2x3; /// 2 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<2, 3, float, mediump> mediump_mat2x3; /// 2 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<2, 3, float, highp> highp_mat2x3; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_float2x4.hpp ================================================ /// @ref core /// @file glm/ext/matrix_float2x4.hpp #pragma once #include "../detail/type_mat2x4.hpp" namespace glm { /// @addtogroup core_matrix /// @{ /// 2 columns of 4 components matrix of single-precision floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices typedef mat<2, 4, float, defaultp> mat2x4; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_float2x4_precision.hpp ================================================ /// @ref core /// @file glm/ext/matrix_float2x4_precision.hpp #pragma once #include "../detail/type_mat2x4.hpp" namespace glm { /// @addtogroup core_matrix_precision /// @{ /// 2 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<2, 4, float, lowp> lowp_mat2x4; /// 2 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<2, 4, float, mediump> mediump_mat2x4; /// 2 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<2, 4, float, highp> highp_mat2x4; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_float3x2.hpp ================================================ /// @ref core /// @file glm/ext/matrix_float3x2.hpp #pragma once #include "../detail/type_mat3x2.hpp" namespace glm { /// @addtogroup core /// @{ /// 3 columns of 2 components matrix of single-precision floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices typedef mat<3, 2, float, defaultp> mat3x2; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_float3x2_precision.hpp ================================================ /// @ref core /// @file glm/ext/matrix_float3x2_precision.hpp #pragma once #include "../detail/type_mat3x2.hpp" namespace glm { /// @addtogroup core_matrix_precision /// @{ /// 3 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<3, 2, float, lowp> lowp_mat3x2; /// 3 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<3, 2, float, mediump> mediump_mat3x2; /// 3 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<3, 2, float, highp> highp_mat3x2; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_float3x3.hpp ================================================ /// @ref core /// @file glm/ext/matrix_float3x3.hpp #pragma once #include "../detail/type_mat3x3.hpp" namespace glm { /// @addtogroup core_matrix /// @{ /// 3 columns of 3 components matrix of single-precision floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices typedef mat<3, 3, float, defaultp> mat3x3; /// 3 columns of 3 components matrix of single-precision floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices typedef mat<3, 3, float, defaultp> mat3; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_float3x3_precision.hpp ================================================ /// @ref core /// @file glm/ext/matrix_float3x3_precision.hpp #pragma once #include "../detail/type_mat3x3.hpp" namespace glm { /// @addtogroup core_matrix_precision /// @{ /// 3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<3, 3, float, lowp> lowp_mat3; /// 3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<3, 3, float, mediump> mediump_mat3; /// 3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<3, 3, float, highp> highp_mat3; /// 3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<3, 3, float, lowp> lowp_mat3x3; /// 3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<3, 3, float, mediump> mediump_mat3x3; /// 3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<3, 3, float, highp> highp_mat3x3; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_float3x4.hpp ================================================ /// @ref core /// @file glm/ext/matrix_float3x4.hpp #pragma once #include "../detail/type_mat3x4.hpp" namespace glm { /// @addtogroup core_matrix /// @{ /// 3 columns of 4 components matrix of single-precision floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices typedef mat<3, 4, float, defaultp> mat3x4; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_float3x4_precision.hpp ================================================ /// @ref core /// @file glm/ext/matrix_float3x4_precision.hpp #pragma once #include "../detail/type_mat3x4.hpp" namespace glm { /// @addtogroup core_matrix_precision /// @{ /// 3 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<3, 4, float, lowp> lowp_mat3x4; /// 3 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<3, 4, float, mediump> mediump_mat3x4; /// 3 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<3, 4, float, highp> highp_mat3x4; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_float4x2.hpp ================================================ /// @ref core /// @file glm/ext/matrix_float4x2.hpp #pragma once #include "../detail/type_mat4x2.hpp" namespace glm { /// @addtogroup core_matrix /// @{ /// 4 columns of 2 components matrix of single-precision floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices typedef mat<4, 2, float, defaultp> mat4x2; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_float4x2_precision.hpp ================================================ /// @ref core /// @file glm/ext/matrix_float2x2_precision.hpp #pragma once #include "../detail/type_mat2x2.hpp" namespace glm { /// @addtogroup core_matrix_precision /// @{ /// 4 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<4, 2, float, lowp> lowp_mat4x2; /// 4 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<4, 2, float, mediump> mediump_mat4x2; /// 4 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<4, 2, float, highp> highp_mat4x2; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_float4x3.hpp ================================================ /// @ref core /// @file glm/ext/matrix_float4x3.hpp #pragma once #include "../detail/type_mat4x3.hpp" namespace glm { /// @addtogroup core_matrix /// @{ /// 4 columns of 3 components matrix of single-precision floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices typedef mat<4, 3, float, defaultp> mat4x3; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_float4x3_precision.hpp ================================================ /// @ref core /// @file glm/ext/matrix_float4x3_precision.hpp #pragma once #include "../detail/type_mat4x3.hpp" namespace glm { /// @addtogroup core_matrix_precision /// @{ /// 4 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<4, 3, float, lowp> lowp_mat4x3; /// 4 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<4, 3, float, mediump> mediump_mat4x3; /// 4 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<4, 3, float, highp> highp_mat4x3; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_float4x4.hpp ================================================ /// @ref core /// @file glm/ext/matrix_float4x4.hpp #pragma once #include "../detail/type_mat4x4.hpp" namespace glm { /// @ingroup core_matrix /// @{ /// 4 columns of 4 components matrix of single-precision floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices typedef mat<4, 4, float, defaultp> mat4x4; /// 4 columns of 4 components matrix of single-precision floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices typedef mat<4, 4, float, defaultp> mat4; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_float4x4_precision.hpp ================================================ /// @ref core /// @file glm/ext/matrix_float4x4_precision.hpp #pragma once #include "../detail/type_mat4x4.hpp" namespace glm { /// @addtogroup core_matrix_precision /// @{ /// 4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<4, 4, float, lowp> lowp_mat4; /// 4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<4, 4, float, mediump> mediump_mat4; /// 4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<4, 4, float, highp> highp_mat4; /// 4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<4, 4, float, lowp> lowp_mat4x4; /// 4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<4, 4, float, mediump> mediump_mat4x4; /// 4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. /// /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef mat<4, 4, float, highp> highp_mat4x4; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_projection.hpp ================================================ /// @ref ext_matrix_projection /// @file glm/ext/matrix_projection.hpp /// /// @defgroup ext_matrix_projection GLM_EXT_matrix_projection /// @ingroup ext /// /// Functions that generate common projection transformation matrices. /// /// The matrices generated by this extension use standard OpenGL fixed-function /// conventions. For example, the lookAt function generates a transform from world /// space into the specific eye space that the projective matrix functions /// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility /// specifications defines the particular layout of this eye space. /// /// Include to use the features of this extension. /// /// @see ext_matrix_transform /// @see ext_matrix_clip_space #pragma once // Dependencies #include "../gtc/constants.hpp" #include "../geometric.hpp" #include "../trigonometric.hpp" #include "../matrix.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_matrix_projection extension included") #endif namespace glm { /// @addtogroup ext_matrix_projection /// @{ /// Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates. /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) /// /// @param obj Specify the object coordinates. /// @param model Specifies the current modelview matrix /// @param proj Specifies the current projection matrix /// @param viewport Specifies the current viewport /// @return Return the computed window coordinates. /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. /// @tparam U Currently supported: Floating-point types and integer types. /// /// @see gluProject man page template GLM_FUNC_DECL vec<3, T, Q> projectZO( vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); /// Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates. /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) /// /// @param obj Specify the object coordinates. /// @param model Specifies the current modelview matrix /// @param proj Specifies the current projection matrix /// @param viewport Specifies the current viewport /// @return Return the computed window coordinates. /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. /// @tparam U Currently supported: Floating-point types and integer types. /// /// @see gluProject man page template GLM_FUNC_DECL vec<3, T, Q> projectNO( vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); /// Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates using default near and far clip planes definition. /// To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE. /// /// @param obj Specify the object coordinates. /// @param model Specifies the current modelview matrix /// @param proj Specifies the current projection matrix /// @param viewport Specifies the current viewport /// @return Return the computed window coordinates. /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. /// @tparam U Currently supported: Floating-point types and integer types. /// /// @see gluProject man page template GLM_FUNC_DECL vec<3, T, Q> project( vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); /// Map the specified window coordinates (win.x, win.y, win.z) into object coordinates. /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) /// /// @param win Specify the window coordinates to be mapped. /// @param model Specifies the modelview matrix /// @param proj Specifies the projection matrix /// @param viewport Specifies the viewport /// @return Returns the computed object coordinates. /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. /// @tparam U Currently supported: Floating-point types and integer types. /// /// @see gluUnProject man page template GLM_FUNC_DECL vec<3, T, Q> unProjectZO( vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); /// Map the specified window coordinates (win.x, win.y, win.z) into object coordinates. /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) /// /// @param win Specify the window coordinates to be mapped. /// @param model Specifies the modelview matrix /// @param proj Specifies the projection matrix /// @param viewport Specifies the viewport /// @return Returns the computed object coordinates. /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. /// @tparam U Currently supported: Floating-point types and integer types. /// /// @see gluUnProject man page template GLM_FUNC_DECL vec<3, T, Q> unProjectNO( vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); /// Map the specified window coordinates (win.x, win.y, win.z) into object coordinates using default near and far clip planes definition. /// To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE. /// /// @param win Specify the window coordinates to be mapped. /// @param model Specifies the modelview matrix /// @param proj Specifies the projection matrix /// @param viewport Specifies the viewport /// @return Returns the computed object coordinates. /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. /// @tparam U Currently supported: Floating-point types and integer types. /// /// @see gluUnProject man page template GLM_FUNC_DECL vec<3, T, Q> unProject( vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); /// Define a picking region /// /// @param center Specify the center of a picking region in window coordinates. /// @param delta Specify the width and height, respectively, of the picking region in window coordinates. /// @param viewport Rendering viewport /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. /// @tparam U Currently supported: Floating-point types and integer types. /// /// @see gluPickMatrix man page template GLM_FUNC_DECL mat<4, 4, T, Q> pickMatrix( vec<2, T, Q> const& center, vec<2, T, Q> const& delta, vec<4, U, Q> const& viewport); /// @} }//namespace glm #include "matrix_projection.inl" ================================================ FILE: libraries/glm/ext/matrix_projection.inl ================================================ namespace glm { template GLM_FUNC_QUALIFIER vec<3, T, Q> projectZO(vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) { vec<4, T, Q> tmp = vec<4, T, Q>(obj, static_cast(1)); tmp = model * tmp; tmp = proj * tmp; tmp /= tmp.w; tmp.x = tmp.x * static_cast(0.5) + static_cast(0.5); tmp.y = tmp.y * static_cast(0.5) + static_cast(0.5); tmp[0] = tmp[0] * T(viewport[2]) + T(viewport[0]); tmp[1] = tmp[1] * T(viewport[3]) + T(viewport[1]); return vec<3, T, Q>(tmp); } template GLM_FUNC_QUALIFIER vec<3, T, Q> projectNO(vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) { vec<4, T, Q> tmp = vec<4, T, Q>(obj, static_cast(1)); tmp = model * tmp; tmp = proj * tmp; tmp /= tmp.w; tmp = tmp * static_cast(0.5) + static_cast(0.5); tmp[0] = tmp[0] * T(viewport[2]) + T(viewport[0]); tmp[1] = tmp[1] * T(viewport[3]) + T(viewport[1]); return vec<3, T, Q>(tmp); } template GLM_FUNC_QUALIFIER vec<3, T, Q> project(vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) { if(GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT) return projectZO(obj, model, proj, viewport); else return projectNO(obj, model, proj, viewport); } template GLM_FUNC_QUALIFIER vec<3, T, Q> unProjectZO(vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) { mat<4, 4, T, Q> Inverse = inverse(proj * model); vec<4, T, Q> tmp = vec<4, T, Q>(win, T(1)); tmp.x = (tmp.x - T(viewport[0])) / T(viewport[2]); tmp.y = (tmp.y - T(viewport[1])) / T(viewport[3]); tmp.x = tmp.x * static_cast(2) - static_cast(1); tmp.y = tmp.y * static_cast(2) - static_cast(1); vec<4, T, Q> obj = Inverse * tmp; obj /= obj.w; return vec<3, T, Q>(obj); } template GLM_FUNC_QUALIFIER vec<3, T, Q> unProjectNO(vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) { mat<4, 4, T, Q> Inverse = inverse(proj * model); vec<4, T, Q> tmp = vec<4, T, Q>(win, T(1)); tmp.x = (tmp.x - T(viewport[0])) / T(viewport[2]); tmp.y = (tmp.y - T(viewport[1])) / T(viewport[3]); tmp = tmp * static_cast(2) - static_cast(1); vec<4, T, Q> obj = Inverse * tmp; obj /= obj.w; return vec<3, T, Q>(obj); } template GLM_FUNC_QUALIFIER vec<3, T, Q> unProject(vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) { if(GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT) return unProjectZO(win, model, proj, viewport); else return unProjectNO(win, model, proj, viewport); } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> pickMatrix(vec<2, T, Q> const& center, vec<2, T, Q> const& delta, vec<4, U, Q> const& viewport) { assert(delta.x > static_cast(0) && delta.y > static_cast(0)); mat<4, 4, T, Q> Result(static_cast(1)); if(!(delta.x > static_cast(0) && delta.y > static_cast(0))) return Result; // Error vec<3, T, Q> Temp( (static_cast(viewport[2]) - static_cast(2) * (center.x - static_cast(viewport[0]))) / delta.x, (static_cast(viewport[3]) - static_cast(2) * (center.y - static_cast(viewport[1]))) / delta.y, static_cast(0)); // Translate and scale the picked region to the entire window Result = translate(Result, Temp); return scale(Result, vec<3, T, Q>(static_cast(viewport[2]) / delta.x, static_cast(viewport[3]) / delta.y, static_cast(1))); } }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_relational.hpp ================================================ /// @ref ext_matrix_relational /// @file glm/ext/matrix_relational.hpp /// /// @defgroup ext_matrix_relational GLM_EXT_matrix_relational /// @ingroup ext /// /// Exposes comparison functions for matrix types that take a user defined epsilon values. /// /// Include to use the features of this extension. /// /// @see ext_vector_relational /// @see ext_scalar_relational /// @see ext_quaternion_relational #pragma once // Dependencies #include "../detail/qualifier.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_matrix_relational extension included") #endif namespace glm { /// @addtogroup ext_matrix_relational /// @{ /// Perform a component-wise equal-to comparison of two matrices. /// Return a boolean vector which components value is True if this expression is satisfied per column of the matrices. /// /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix /// @tparam T Floating-point or integer scalar types /// @tparam Q Value from qualifier enum template GLM_FUNC_DECL GLM_CONSTEXPR vec equal(mat const& x, mat const& y); /// Perform a component-wise not-equal-to comparison of two matrices. /// Return a boolean vector which components value is True if this expression is satisfied per column of the matrices. /// /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix /// @tparam T Floating-point or integer scalar types /// @tparam Q Value from qualifier enum template GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y); /// Returns the component-wise comparison of |x - y| < epsilon. /// True if this expression is satisfied. /// /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix /// @tparam T Floating-point or integer scalar types /// @tparam Q Value from qualifier enum template GLM_FUNC_DECL GLM_CONSTEXPR vec equal(mat const& x, mat const& y, T epsilon); /// Returns the component-wise comparison of |x - y| < epsilon. /// True if this expression is satisfied. /// /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix /// @tparam T Floating-point or integer scalar types /// @tparam Q Value from qualifier enum template GLM_FUNC_DECL GLM_CONSTEXPR vec equal(mat const& x, mat const& y, vec const& epsilon); /// Returns the component-wise comparison of |x - y| < epsilon. /// True if this expression is not satisfied. /// /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix /// @tparam T Floating-point or integer scalar types /// @tparam Q Value from qualifier enum template GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y, T epsilon); /// Returns the component-wise comparison of |x - y| >= epsilon. /// True if this expression is not satisfied. /// /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix /// @tparam T Floating-point or integer scalar types /// @tparam Q Value from qualifier enum template GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y, vec const& epsilon); /// Returns the component-wise comparison between two vectors in term of ULPs. /// True if this expression is satisfied. /// /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix /// @tparam T Floating-point /// @tparam Q Value from qualifier enum template GLM_FUNC_DECL GLM_CONSTEXPR vec equal(mat const& x, mat const& y, int ULPs); /// Returns the component-wise comparison between two vectors in term of ULPs. /// True if this expression is satisfied. /// /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix /// @tparam T Floating-point /// @tparam Q Value from qualifier enum template GLM_FUNC_DECL GLM_CONSTEXPR vec equal(mat const& x, mat const& y, vec const& ULPs); /// Returns the component-wise comparison between two vectors in term of ULPs. /// True if this expression is not satisfied. /// /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix /// @tparam T Floating-point /// @tparam Q Value from qualifier enum template GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y, int ULPs); /// Returns the component-wise comparison between two vectors in term of ULPs. /// True if this expression is not satisfied. /// /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix /// @tparam T Floating-point /// @tparam Q Value from qualifier enum template GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y, vec const& ULPs); /// @} }//namespace glm #include "matrix_relational.inl" ================================================ FILE: libraries/glm/ext/matrix_relational.inl ================================================ /// @ref ext_vector_relational /// @file glm/ext/vector_relational.inl // Dependency: #include "../ext/vector_relational.hpp" #include "../common.hpp" namespace glm { template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(mat const& a, mat const& b) { return equal(a, b, static_cast(0)); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(mat const& a, mat const& b, T Epsilon) { return equal(a, b, vec(Epsilon)); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(mat const& a, mat const& b, vec const& Epsilon) { vec Result(true); for(length_t i = 0; i < C; ++i) Result[i] = all(equal(a[i], b[i], Epsilon[i])); return Result; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y) { return notEqual(x, y, static_cast(0)); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y, T Epsilon) { return notEqual(x, y, vec(Epsilon)); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(mat const& a, mat const& b, vec const& Epsilon) { vec Result(true); for(length_t i = 0; i < C; ++i) Result[i] = any(notEqual(a[i], b[i], Epsilon[i])); return Result; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(mat const& a, mat const& b, int MaxULPs) { return equal(a, b, vec(MaxULPs)); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(mat const& a, mat const& b, vec const& MaxULPs) { vec Result(true); for(length_t i = 0; i < C; ++i) Result[i] = all(equal(a[i], b[i], MaxULPs[i])); return Result; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y, int MaxULPs) { return notEqual(x, y, vec(MaxULPs)); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(mat const& a, mat const& b, vec const& MaxULPs) { vec Result(true); for(length_t i = 0; i < C; ++i) Result[i] = any(notEqual(a[i], b[i], MaxULPs[i])); return Result; } }//namespace glm ================================================ FILE: libraries/glm/ext/matrix_transform.hpp ================================================ /// @ref ext_matrix_transform /// @file glm/ext/matrix_transform.hpp /// /// @defgroup ext_matrix_transform GLM_EXT_matrix_transform /// @ingroup ext /// /// Defines functions that generate common transformation matrices. /// /// The matrices generated by this extension use standard OpenGL fixed-function /// conventions. For example, the lookAt function generates a transform from world /// space into the specific eye space that the projective matrix functions /// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility /// specifications defines the particular layout of this eye space. /// /// Include to use the features of this extension. /// /// @see ext_matrix_projection /// @see ext_matrix_clip_space #pragma once // Dependencies #include "../gtc/constants.hpp" #include "../geometric.hpp" #include "../trigonometric.hpp" #include "../matrix.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_matrix_transform extension included") #endif namespace glm { /// @addtogroup ext_matrix_transform /// @{ /// Builds an identity matrix. template GLM_FUNC_DECL GLM_CONSTEXPR genType identity(); /// Builds a translation 4 * 4 matrix created from a vector of 3 components. /// /// @param m Input matrix multiplied by this translation matrix. /// @param v Coordinates of a translation vector. /// /// @tparam T A floating-point scalar type /// @tparam Q A value from qualifier enum /// /// @code /// #include /// #include /// ... /// glm::mat4 m = glm::translate(glm::mat4(1.0f), glm::vec3(1.0f)); /// // m[0][0] == 1.0f, m[0][1] == 0.0f, m[0][2] == 0.0f, m[0][3] == 0.0f /// // m[1][0] == 0.0f, m[1][1] == 1.0f, m[1][2] == 0.0f, m[1][3] == 0.0f /// // m[2][0] == 0.0f, m[2][1] == 0.0f, m[2][2] == 1.0f, m[2][3] == 0.0f /// // m[3][0] == 1.0f, m[3][1] == 1.0f, m[3][2] == 1.0f, m[3][3] == 1.0f /// @endcode /// /// @see - translate(mat<4, 4, T, Q> const& m, T x, T y, T z) /// @see - translate(vec<3, T, Q> const& v) /// @see glTranslate man page template GLM_FUNC_DECL mat<4, 4, T, Q> translate( mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v); /// Builds a rotation 4 * 4 matrix created from an axis vector and an angle. /// /// @param m Input matrix multiplied by this rotation matrix. /// @param angle Rotation angle expressed in radians. /// @param axis Rotation axis, recommended to be normalized. /// /// @tparam T A floating-point scalar type /// @tparam Q A value from qualifier enum /// /// @see - rotate(mat<4, 4, T, Q> const& m, T angle, T x, T y, T z) /// @see - rotate(T angle, vec<3, T, Q> const& v) /// @see glRotate man page template GLM_FUNC_DECL mat<4, 4, T, Q> rotate( mat<4, 4, T, Q> const& m, T angle, vec<3, T, Q> const& axis); /// Builds a scale 4 * 4 matrix created from 3 scalars. /// /// @param m Input matrix multiplied by this scale matrix. /// @param v Ratio of scaling for each axis. /// /// @tparam T A floating-point scalar type /// @tparam Q A value from qualifier enum /// /// @see - scale(mat<4, 4, T, Q> const& m, T x, T y, T z) /// @see - scale(vec<3, T, Q> const& v) /// @see glScale man page template GLM_FUNC_DECL mat<4, 4, T, Q> scale( mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v); /// Build a right handed look at view matrix. /// /// @param eye Position of the camera /// @param center Position where the camera is looking at /// @param up Normalized up vector, how the camera is oriented. Typically (0, 0, 1) /// /// @tparam T A floating-point scalar type /// @tparam Q A value from qualifier enum /// /// @see - frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) template GLM_FUNC_DECL mat<4, 4, T, Q> lookAtRH( vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up); /// Build a left handed look at view matrix. /// /// @param eye Position of the camera /// @param center Position where the camera is looking at /// @param up Normalized up vector, how the camera is oriented. Typically (0, 0, 1) /// /// @tparam T A floating-point scalar type /// @tparam Q A value from qualifier enum /// /// @see - frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) template GLM_FUNC_DECL mat<4, 4, T, Q> lookAtLH( vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up); /// Build a look at view matrix based on the default handedness. /// /// @param eye Position of the camera /// @param center Position where the camera is looking at /// @param up Normalized up vector, how the camera is oriented. Typically (0, 0, 1) /// /// @tparam T A floating-point scalar type /// @tparam Q A value from qualifier enum /// /// @see - frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) /// @see gluLookAt man page template GLM_FUNC_DECL mat<4, 4, T, Q> lookAt( vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up); /// @} }//namespace glm #include "matrix_transform.inl" ================================================ FILE: libraries/glm/ext/matrix_transform.inl ================================================ namespace glm { template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType identity() { return detail::init_gentype::GENTYPE>::identity(); } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> translate(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v) { mat<4, 4, T, Q> Result(m); Result[3] = m[0] * v[0] + m[1] * v[1] + m[2] * v[2] + m[3]; return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotate(mat<4, 4, T, Q> const& m, T angle, vec<3, T, Q> const& v) { T const a = angle; T const c = cos(a); T const s = sin(a); vec<3, T, Q> axis(normalize(v)); vec<3, T, Q> temp((T(1) - c) * axis); mat<4, 4, T, Q> Rotate; Rotate[0][0] = c + temp[0] * axis[0]; Rotate[0][1] = temp[0] * axis[1] + s * axis[2]; Rotate[0][2] = temp[0] * axis[2] - s * axis[1]; Rotate[1][0] = temp[1] * axis[0] - s * axis[2]; Rotate[1][1] = c + temp[1] * axis[1]; Rotate[1][2] = temp[1] * axis[2] + s * axis[0]; Rotate[2][0] = temp[2] * axis[0] + s * axis[1]; Rotate[2][1] = temp[2] * axis[1] - s * axis[0]; Rotate[2][2] = c + temp[2] * axis[2]; mat<4, 4, T, Q> Result; Result[0] = m[0] * Rotate[0][0] + m[1] * Rotate[0][1] + m[2] * Rotate[0][2]; Result[1] = m[0] * Rotate[1][0] + m[1] * Rotate[1][1] + m[2] * Rotate[1][2]; Result[2] = m[0] * Rotate[2][0] + m[1] * Rotate[2][1] + m[2] * Rotate[2][2]; Result[3] = m[3]; return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotate_slow(mat<4, 4, T, Q> const& m, T angle, vec<3, T, Q> const& v) { T const a = angle; T const c = cos(a); T const s = sin(a); mat<4, 4, T, Q> Result; vec<3, T, Q> axis = normalize(v); Result[0][0] = c + (static_cast(1) - c) * axis.x * axis.x; Result[0][1] = (static_cast(1) - c) * axis.x * axis.y + s * axis.z; Result[0][2] = (static_cast(1) - c) * axis.x * axis.z - s * axis.y; Result[0][3] = static_cast(0); Result[1][0] = (static_cast(1) - c) * axis.y * axis.x - s * axis.z; Result[1][1] = c + (static_cast(1) - c) * axis.y * axis.y; Result[1][2] = (static_cast(1) - c) * axis.y * axis.z + s * axis.x; Result[1][3] = static_cast(0); Result[2][0] = (static_cast(1) - c) * axis.z * axis.x + s * axis.y; Result[2][1] = (static_cast(1) - c) * axis.z * axis.y - s * axis.x; Result[2][2] = c + (static_cast(1) - c) * axis.z * axis.z; Result[2][3] = static_cast(0); Result[3] = vec<4, T, Q>(0, 0, 0, 1); return m * Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scale(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v) { mat<4, 4, T, Q> Result; Result[0] = m[0] * v[0]; Result[1] = m[1] * v[1]; Result[2] = m[2] * v[2]; Result[3] = m[3]; return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scale_slow(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v) { mat<4, 4, T, Q> Result(T(1)); Result[0][0] = v.x; Result[1][1] = v.y; Result[2][2] = v.z; return m * Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> lookAtRH(vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up) { vec<3, T, Q> const f(normalize(center - eye)); vec<3, T, Q> const s(normalize(cross(f, up))); vec<3, T, Q> const u(cross(s, f)); mat<4, 4, T, Q> Result(1); Result[0][0] = s.x; Result[1][0] = s.y; Result[2][0] = s.z; Result[0][1] = u.x; Result[1][1] = u.y; Result[2][1] = u.z; Result[0][2] =-f.x; Result[1][2] =-f.y; Result[2][2] =-f.z; Result[3][0] =-dot(s, eye); Result[3][1] =-dot(u, eye); Result[3][2] = dot(f, eye); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> lookAtLH(vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up) { vec<3, T, Q> const f(normalize(center - eye)); vec<3, T, Q> const s(normalize(cross(up, f))); vec<3, T, Q> const u(cross(f, s)); mat<4, 4, T, Q> Result(1); Result[0][0] = s.x; Result[1][0] = s.y; Result[2][0] = s.z; Result[0][1] = u.x; Result[1][1] = u.y; Result[2][1] = u.z; Result[0][2] = f.x; Result[1][2] = f.y; Result[2][2] = f.z; Result[3][0] = -dot(s, eye); Result[3][1] = -dot(u, eye); Result[3][2] = -dot(f, eye); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> lookAt(vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up) { GLM_IF_CONSTEXPR(GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT) return lookAtLH(eye, center, up); else return lookAtRH(eye, center, up); } }//namespace glm ================================================ FILE: libraries/glm/ext/quaternion_common.hpp ================================================ /// @ref ext_quaternion_common /// @file glm/ext/quaternion_common.hpp /// /// @defgroup ext_quaternion_common GLM_EXT_quaternion_common /// @ingroup ext /// /// Provides common functions for quaternion types /// /// Include to use the features of this extension. /// /// @see ext_scalar_common /// @see ext_vector_common /// @see ext_quaternion_float /// @see ext_quaternion_double /// @see ext_quaternion_exponential /// @see ext_quaternion_geometric /// @see ext_quaternion_relational /// @see ext_quaternion_trigonometric /// @see ext_quaternion_transform #pragma once // Dependency: #include "../ext/scalar_constants.hpp" #include "../ext/quaternion_geometric.hpp" #include "../common.hpp" #include "../trigonometric.hpp" #include "../exponential.hpp" #include #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_quaternion_common extension included") #endif namespace glm { /// @addtogroup ext_quaternion_common /// @{ /// Spherical linear interpolation of two quaternions. /// The interpolation is oriented and the rotation is performed at constant speed. /// For short path spherical linear interpolation, use the slerp function. /// /// @param x A quaternion /// @param y A quaternion /// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1]. /// /// @tparam T A floating-point scalar type /// @tparam Q A value from qualifier enum /// /// @see - slerp(qua const& x, qua const& y, T const& a) template GLM_FUNC_DECL qua mix(qua const& x, qua const& y, T a); /// Linear interpolation of two quaternions. /// The interpolation is oriented. /// /// @param x A quaternion /// @param y A quaternion /// @param a Interpolation factor. The interpolation is defined in the range [0, 1]. /// /// @tparam T A floating-point scalar type /// @tparam Q A value from qualifier enum template GLM_FUNC_DECL qua lerp(qua const& x, qua const& y, T a); /// Spherical linear interpolation of two quaternions. /// The interpolation always take the short path and the rotation is performed at constant speed. /// /// @param x A quaternion /// @param y A quaternion /// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1]. /// /// @tparam T A floating-point scalar type /// @tparam Q A value from qualifier enum template GLM_FUNC_DECL qua slerp(qua const& x, qua const& y, T a); /// Returns the q conjugate. /// /// @tparam T A floating-point scalar type /// @tparam Q A value from qualifier enum template GLM_FUNC_DECL qua conjugate(qua const& q); /// Returns the q inverse. /// /// @tparam T A floating-point scalar type /// @tparam Q A value from qualifier enum template GLM_FUNC_DECL qua inverse(qua const& q); /// Returns true if x holds a NaN (not a number) /// representation in the underlying implementation's set of /// floating point representations. Returns false otherwise, /// including for implementations with no NaN /// representations. /// /// /!\ When using compiler fast math, this function may fail. /// /// @tparam T A floating-point scalar type /// @tparam Q A value from qualifier enum template GLM_FUNC_DECL vec<4, bool, Q> isnan(qua const& x); /// Returns true if x holds a positive infinity or negative /// infinity representation in the underlying implementation's /// set of floating point representations. Returns false /// otherwise, including for implementations with no infinity /// representations. /// /// @tparam T A floating-point scalar type /// @tparam Q A value from qualifier enum template GLM_FUNC_DECL vec<4, bool, Q> isinf(qua const& x); /// @} } //namespace glm #include "quaternion_common.inl" ================================================ FILE: libraries/glm/ext/quaternion_common.inl ================================================ namespace glm { template GLM_FUNC_QUALIFIER qua mix(qua const& x, qua const& y, T a) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'mix' only accept floating-point inputs"); T const cosTheta = dot(x, y); // Perform a linear interpolation when cosTheta is close to 1 to avoid side effect of sin(angle) becoming a zero denominator if(cosTheta > static_cast(1) - epsilon()) { // Linear interpolation return qua( mix(x.w, y.w, a), mix(x.x, y.x, a), mix(x.y, y.y, a), mix(x.z, y.z, a)); } else { // Essential Mathematics, page 467 T angle = acos(cosTheta); return (sin((static_cast(1) - a) * angle) * x + sin(a * angle) * y) / sin(angle); } } template GLM_FUNC_QUALIFIER qua lerp(qua const& x, qua const& y, T a) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'lerp' only accept floating-point inputs"); // Lerp is only defined in [0, 1] assert(a >= static_cast(0)); assert(a <= static_cast(1)); return x * (static_cast(1) - a) + (y * a); } template GLM_FUNC_QUALIFIER qua slerp(qua const& x, qua const& y, T a) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'slerp' only accept floating-point inputs"); qua z = y; T cosTheta = dot(x, y); // If cosTheta < 0, the interpolation will take the long way around the sphere. // To fix this, one quat must be negated. if(cosTheta < static_cast(0)) { z = -y; cosTheta = -cosTheta; } // Perform a linear interpolation when cosTheta is close to 1 to avoid side effect of sin(angle) becoming a zero denominator if(cosTheta > static_cast(1) - epsilon()) { // Linear interpolation return qua( mix(x.w, z.w, a), mix(x.x, z.x, a), mix(x.y, z.y, a), mix(x.z, z.z, a)); } else { // Essential Mathematics, page 467 T angle = acos(cosTheta); return (sin((static_cast(1) - a) * angle) * x + sin(a * angle) * z) / sin(angle); } } template GLM_FUNC_QUALIFIER qua conjugate(qua const& q) { return qua(q.w, -q.x, -q.y, -q.z); } template GLM_FUNC_QUALIFIER qua inverse(qua const& q) { return conjugate(q) / dot(q, q); } template GLM_FUNC_QUALIFIER vec<4, bool, Q> isnan(qua const& q) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isnan' only accept floating-point inputs"); return vec<4, bool, Q>(isnan(q.x), isnan(q.y), isnan(q.z), isnan(q.w)); } template GLM_FUNC_QUALIFIER vec<4, bool, Q> isinf(qua const& q) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isinf' only accept floating-point inputs"); return vec<4, bool, Q>(isinf(q.x), isinf(q.y), isinf(q.z), isinf(q.w)); } }//namespace glm #if GLM_CONFIG_SIMD == GLM_ENABLE # include "quaternion_common_simd.inl" #endif ================================================ FILE: libraries/glm/ext/quaternion_common_simd.inl ================================================ #if GLM_ARCH & GLM_ARCH_SSE2_BIT namespace glm{ namespace detail { template struct compute_dot, float, true> { static GLM_FUNC_QUALIFIER float call(qua const& x, qua const& y) { return _mm_cvtss_f32(glm_vec1_dot(x.data, y.data)); } }; }//namespace detail }//namespace glm #endif//GLM_ARCH & GLM_ARCH_SSE2_BIT ================================================ FILE: libraries/glm/ext/quaternion_double.hpp ================================================ /// @ref ext_quaternion_double /// @file glm/ext/quaternion_double.hpp /// /// @defgroup ext_quaternion_double GLM_EXT_quaternion_double /// @ingroup ext /// /// Exposes double-precision floating point quaternion type. /// /// Include to use the features of this extension. /// /// @see ext_quaternion_float /// @see ext_quaternion_double_precision /// @see ext_quaternion_common /// @see ext_quaternion_exponential /// @see ext_quaternion_geometric /// @see ext_quaternion_relational /// @see ext_quaternion_transform /// @see ext_quaternion_trigonometric #pragma once // Dependency: #include "../detail/type_quat.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_quaternion_double extension included") #endif namespace glm { /// @addtogroup ext_quaternion_double /// @{ /// Quaternion of double-precision floating-point numbers. typedef qua dquat; /// @} } //namespace glm ================================================ FILE: libraries/glm/ext/quaternion_double_precision.hpp ================================================ /// @ref ext_quaternion_double_precision /// @file glm/ext/quaternion_double_precision.hpp /// /// @defgroup ext_quaternion_double_precision GLM_EXT_quaternion_double_precision /// @ingroup ext /// /// Exposes double-precision floating point quaternion type with various precision in term of ULPs. /// /// Include to use the features of this extension. #pragma once // Dependency: #include "../detail/type_quat.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_quaternion_double_precision extension included") #endif namespace glm { /// @addtogroup ext_quaternion_double_precision /// @{ /// Quaternion of double-precision floating-point numbers using high precision arithmetic in term of ULPs. /// /// @see ext_quaternion_double_precision typedef qua lowp_dquat; /// Quaternion of medium double-qualifier floating-point numbers using high precision arithmetic in term of ULPs. /// /// @see ext_quaternion_double_precision typedef qua mediump_dquat; /// Quaternion of high double-qualifier floating-point numbers using high precision arithmetic in term of ULPs. /// /// @see ext_quaternion_double_precision typedef qua highp_dquat; /// @} } //namespace glm ================================================ FILE: libraries/glm/ext/quaternion_exponential.hpp ================================================ /// @ref ext_quaternion_exponential /// @file glm/ext/quaternion_exponential.hpp /// /// @defgroup ext_quaternion_exponential GLM_EXT_quaternion_exponential /// @ingroup ext /// /// Provides exponential functions for quaternion types /// /// Include to use the features of this extension. /// /// @see core_exponential /// @see ext_quaternion_float /// @see ext_quaternion_double #pragma once // Dependency: #include "../common.hpp" #include "../trigonometric.hpp" #include "../geometric.hpp" #include "../ext/scalar_constants.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_quaternion_exponential extension included") #endif namespace glm { /// @addtogroup ext_quaternion_transform /// @{ /// Returns a exponential of a quaternion. /// /// @tparam T A floating-point scalar type /// @tparam Q A value from qualifier enum template GLM_FUNC_DECL qua exp(qua const& q); /// Returns a logarithm of a quaternion /// /// @tparam T A floating-point scalar type /// @tparam Q A value from qualifier enum template GLM_FUNC_DECL qua log(qua const& q); /// Returns a quaternion raised to a power. /// /// @tparam T A floating-point scalar type /// @tparam Q A value from qualifier enum template GLM_FUNC_DECL qua pow(qua const& q, T y); /// Returns the square root of a quaternion /// /// @tparam T A floating-point scalar type /// @tparam Q A value from qualifier enum template GLM_FUNC_DECL qua sqrt(qua const& q); /// @} } //namespace glm #include "quaternion_exponential.inl" ================================================ FILE: libraries/glm/ext/quaternion_exponential.inl ================================================ #include "scalar_constants.hpp" namespace glm { template GLM_FUNC_QUALIFIER qua exp(qua const& q) { vec<3, T, Q> u(q.x, q.y, q.z); T const Angle = glm::length(u); if (Angle < epsilon()) return qua(); vec<3, T, Q> const v(u / Angle); return qua(cos(Angle), sin(Angle) * v); } template GLM_FUNC_QUALIFIER qua log(qua const& q) { vec<3, T, Q> u(q.x, q.y, q.z); T Vec3Len = length(u); if (Vec3Len < epsilon()) { if(q.w > static_cast(0)) return qua(log(q.w), static_cast(0), static_cast(0), static_cast(0)); else if(q.w < static_cast(0)) return qua(log(-q.w), pi(), static_cast(0), static_cast(0)); else return qua(std::numeric_limits::infinity(), std::numeric_limits::infinity(), std::numeric_limits::infinity(), std::numeric_limits::infinity()); } else { T t = atan(Vec3Len, T(q.w)) / Vec3Len; T QuatLen2 = Vec3Len * Vec3Len + q.w * q.w; return qua(static_cast(0.5) * log(QuatLen2), t * q.x, t * q.y, t * q.z); } } template GLM_FUNC_QUALIFIER qua pow(qua const& x, T y) { //Raising to the power of 0 should yield 1 //Needed to prevent a division by 0 error later on if(y > -epsilon() && y < epsilon()) return qua(1,0,0,0); //To deal with non-unit quaternions T magnitude = sqrt(x.x * x.x + x.y * x.y + x.z * x.z + x.w *x.w); T Angle; if(abs(x.w / magnitude) > cos_one_over_two()) { //Scalar component is close to 1; using it to recover angle would lose precision //Instead, we use the non-scalar components since sin() is accurate around 0 //Prevent a division by 0 error later on T VectorMagnitude = x.x * x.x + x.y * x.y + x.z * x.z; if (glm::abs(VectorMagnitude - static_cast(0)) < glm::epsilon()) { //Equivalent to raising a real number to a power return qua(pow(x.w, y), 0, 0, 0); } Angle = asin(sqrt(VectorMagnitude) / magnitude); } else { //Scalar component is small, shouldn't cause loss of precision Angle = acos(x.w / magnitude); } T NewAngle = Angle * y; T Div = sin(NewAngle) / sin(Angle); T Mag = pow(magnitude, y - static_cast(1)); return qua(cos(NewAngle) * magnitude * Mag, x.x * Div * Mag, x.y * Div * Mag, x.z * Div * Mag); } template GLM_FUNC_QUALIFIER qua sqrt(qua const& x) { return pow(x, static_cast(0.5)); } }//namespace glm ================================================ FILE: libraries/glm/ext/quaternion_float.hpp ================================================ /// @ref ext_quaternion_float /// @file glm/ext/quaternion_float.hpp /// /// @defgroup ext_quaternion_float GLM_EXT_quaternion_float /// @ingroup ext /// /// Exposes single-precision floating point quaternion type. /// /// Include to use the features of this extension. /// /// @see ext_quaternion_double /// @see ext_quaternion_float_precision /// @see ext_quaternion_common /// @see ext_quaternion_exponential /// @see ext_quaternion_geometric /// @see ext_quaternion_relational /// @see ext_quaternion_transform /// @see ext_quaternion_trigonometric #pragma once // Dependency: #include "../detail/type_quat.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_quaternion_float extension included") #endif namespace glm { /// @addtogroup ext_quaternion_float /// @{ /// Quaternion of single-precision floating-point numbers. typedef qua quat; /// @} } //namespace glm ================================================ FILE: libraries/glm/ext/quaternion_float_precision.hpp ================================================ /// @ref ext_quaternion_float_precision /// @file glm/ext/quaternion_float_precision.hpp /// /// @defgroup ext_quaternion_float_precision GLM_EXT_quaternion_float_precision /// @ingroup ext /// /// Exposes single-precision floating point quaternion type with various precision in term of ULPs. /// /// Include to use the features of this extension. #pragma once // Dependency: #include "../detail/type_quat.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_quaternion_float_precision extension included") #endif namespace glm { /// @addtogroup ext_quaternion_float_precision /// @{ /// Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef qua lowp_quat; /// Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef qua mediump_quat; /// Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef qua highp_quat; /// @} } //namespace glm ================================================ FILE: libraries/glm/ext/quaternion_geometric.hpp ================================================ /// @ref ext_quaternion_geometric /// @file glm/ext/quaternion_geometric.hpp /// /// @defgroup ext_quaternion_geometric GLM_EXT_quaternion_geometric /// @ingroup ext /// /// Provides geometric functions for quaternion types /// /// Include to use the features of this extension. /// /// @see core_geometric /// @see ext_quaternion_float /// @see ext_quaternion_double #pragma once // Dependency: #include "../geometric.hpp" #include "../exponential.hpp" #include "../ext/vector_relational.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_quaternion_geometric extension included") #endif namespace glm { /// @addtogroup ext_quaternion_geometric /// @{ /// Returns the norm of a quaternions /// /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see ext_quaternion_geometric template GLM_FUNC_DECL T length(qua const& q); /// Returns the normalized quaternion. /// /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see ext_quaternion_geometric template GLM_FUNC_DECL qua normalize(qua const& q); /// Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ... /// /// @tparam T Floating-point scalar types. /// @tparam Q Value from qualifier enum /// /// @see ext_quaternion_geometric template GLM_FUNC_DECL T dot(qua const& x, qua const& y); /// Compute a cross product. /// /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see ext_quaternion_geometric template GLM_FUNC_QUALIFIER qua cross(qua const& q1, qua const& q2); /// @} } //namespace glm #include "quaternion_geometric.inl" ================================================ FILE: libraries/glm/ext/quaternion_geometric.inl ================================================ namespace glm { template GLM_FUNC_QUALIFIER T dot(qua const& x, qua const& y) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'dot' accepts only floating-point inputs"); return detail::compute_dot, T, detail::is_aligned::value>::call(x, y); } template GLM_FUNC_QUALIFIER T length(qua const& q) { return glm::sqrt(dot(q, q)); } template GLM_FUNC_QUALIFIER qua normalize(qua const& q) { T len = length(q); if(len <= static_cast(0)) // Problem return qua(static_cast(1), static_cast(0), static_cast(0), static_cast(0)); T oneOverLen = static_cast(1) / len; return qua(q.w * oneOverLen, q.x * oneOverLen, q.y * oneOverLen, q.z * oneOverLen); } template GLM_FUNC_QUALIFIER qua cross(qua const& q1, qua const& q2) { return qua( q1.w * q2.w - q1.x * q2.x - q1.y * q2.y - q1.z * q2.z, q1.w * q2.x + q1.x * q2.w + q1.y * q2.z - q1.z * q2.y, q1.w * q2.y + q1.y * q2.w + q1.z * q2.x - q1.x * q2.z, q1.w * q2.z + q1.z * q2.w + q1.x * q2.y - q1.y * q2.x); } }//namespace glm ================================================ FILE: libraries/glm/ext/quaternion_relational.hpp ================================================ /// @ref ext_quaternion_relational /// @file glm/ext/quaternion_relational.hpp /// /// @defgroup ext_quaternion_relational GLM_EXT_quaternion_relational /// @ingroup ext /// /// Exposes comparison functions for quaternion types that take a user defined epsilon values. /// /// Include to use the features of this extension. /// /// @see core_vector_relational /// @see ext_vector_relational /// @see ext_matrix_relational /// @see ext_quaternion_float /// @see ext_quaternion_double #pragma once // Dependency: #include "../vector_relational.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_quaternion_relational extension included") #endif namespace glm { /// @addtogroup ext_quaternion_relational /// @{ /// Returns the component-wise comparison of result x == y. /// /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum template GLM_FUNC_DECL vec<4, bool, Q> equal(qua const& x, qua const& y); /// Returns the component-wise comparison of |x - y| < epsilon. /// /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum template GLM_FUNC_DECL vec<4, bool, Q> equal(qua const& x, qua const& y, T epsilon); /// Returns the component-wise comparison of result x != y. /// /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum template GLM_FUNC_DECL vec<4, bool, Q> notEqual(qua const& x, qua const& y); /// Returns the component-wise comparison of |x - y| >= epsilon. /// /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum template GLM_FUNC_DECL vec<4, bool, Q> notEqual(qua const& x, qua const& y, T epsilon); /// @} } //namespace glm #include "quaternion_relational.inl" ================================================ FILE: libraries/glm/ext/quaternion_relational.inl ================================================ namespace glm { template GLM_FUNC_QUALIFIER vec<4, bool, Q> equal(qua const& x, qua const& y) { vec<4, bool, Q> Result; for(length_t i = 0; i < x.length(); ++i) Result[i] = x[i] == y[i]; return Result; } template GLM_FUNC_QUALIFIER vec<4, bool, Q> equal(qua const& x, qua const& y, T epsilon) { vec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w); return lessThan(abs(v), vec<4, T, Q>(epsilon)); } template GLM_FUNC_QUALIFIER vec<4, bool, Q> notEqual(qua const& x, qua const& y) { vec<4, bool, Q> Result; for(length_t i = 0; i < x.length(); ++i) Result[i] = x[i] != y[i]; return Result; } template GLM_FUNC_QUALIFIER vec<4, bool, Q> notEqual(qua const& x, qua const& y, T epsilon) { vec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w); return greaterThanEqual(abs(v), vec<4, T, Q>(epsilon)); } }//namespace glm ================================================ FILE: libraries/glm/ext/quaternion_transform.hpp ================================================ /// @ref ext_quaternion_transform /// @file glm/ext/quaternion_transform.hpp /// /// @defgroup ext_quaternion_transform GLM_EXT_quaternion_transform /// @ingroup ext /// /// Provides transformation functions for quaternion types /// /// Include to use the features of this extension. /// /// @see ext_quaternion_float /// @see ext_quaternion_double /// @see ext_quaternion_exponential /// @see ext_quaternion_geometric /// @see ext_quaternion_relational /// @see ext_quaternion_trigonometric #pragma once // Dependency: #include "../common.hpp" #include "../trigonometric.hpp" #include "../geometric.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_quaternion_transform extension included") #endif namespace glm { /// @addtogroup ext_quaternion_transform /// @{ /// Rotates a quaternion from a vector of 3 components axis and an angle. /// /// @param q Source orientation /// @param angle Angle expressed in radians. /// @param axis Axis of the rotation /// /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum template GLM_FUNC_DECL qua rotate(qua const& q, T const& angle, vec<3, T, Q> const& axis); /// @} } //namespace glm #include "quaternion_transform.inl" ================================================ FILE: libraries/glm/ext/quaternion_transform.inl ================================================ namespace glm { template GLM_FUNC_QUALIFIER qua rotate(qua const& q, T const& angle, vec<3, T, Q> const& v) { vec<3, T, Q> Tmp = v; // Axis of rotation must be normalised T len = glm::length(Tmp); if(abs(len - static_cast(1)) > static_cast(0.001)) { T oneOverLen = static_cast(1) / len; Tmp.x *= oneOverLen; Tmp.y *= oneOverLen; Tmp.z *= oneOverLen; } T const AngleRad(angle); T const Sin = sin(AngleRad * static_cast(0.5)); return q * qua(cos(AngleRad * static_cast(0.5)), Tmp.x * Sin, Tmp.y * Sin, Tmp.z * Sin); } }//namespace glm ================================================ FILE: libraries/glm/ext/quaternion_trigonometric.hpp ================================================ /// @ref ext_quaternion_trigonometric /// @file glm/ext/quaternion_trigonometric.hpp /// /// @defgroup ext_quaternion_trigonometric GLM_EXT_quaternion_trigonometric /// @ingroup ext /// /// Provides trigonometric functions for quaternion types /// /// Include to use the features of this extension. /// /// @see ext_quaternion_float /// @see ext_quaternion_double /// @see ext_quaternion_exponential /// @see ext_quaternion_geometric /// @see ext_quaternion_relational /// @see ext_quaternion_transform #pragma once // Dependency: #include "../trigonometric.hpp" #include "../exponential.hpp" #include "scalar_constants.hpp" #include "vector_relational.hpp" #include #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_quaternion_trigonometric extension included") #endif namespace glm { /// @addtogroup ext_quaternion_trigonometric /// @{ /// Returns the quaternion rotation angle. /// /// @tparam T A floating-point scalar type /// @tparam Q A value from qualifier enum template GLM_FUNC_DECL T angle(qua const& x); /// Returns the q rotation axis. /// /// @tparam T A floating-point scalar type /// @tparam Q A value from qualifier enum template GLM_FUNC_DECL vec<3, T, Q> axis(qua const& x); /// Build a quaternion from an angle and a normalized axis. /// /// @param angle Angle expressed in radians. /// @param axis Axis of the quaternion, must be normalized. /// /// @tparam T A floating-point scalar type /// @tparam Q A value from qualifier enum template GLM_FUNC_DECL qua angleAxis(T const& angle, vec<3, T, Q> const& axis); /// @} } //namespace glm #include "quaternion_trigonometric.inl" ================================================ FILE: libraries/glm/ext/quaternion_trigonometric.inl ================================================ #include "scalar_constants.hpp" namespace glm { template GLM_FUNC_QUALIFIER T angle(qua const& x) { if (abs(x.w) > cos_one_over_two()) { return asin(sqrt(x.x * x.x + x.y * x.y + x.z * x.z)) * static_cast(2); } return acos(x.w) * static_cast(2); } template GLM_FUNC_QUALIFIER vec<3, T, Q> axis(qua const& x) { T const tmp1 = static_cast(1) - x.w * x.w; if(tmp1 <= static_cast(0)) return vec<3, T, Q>(0, 0, 1); T const tmp2 = static_cast(1) / sqrt(tmp1); return vec<3, T, Q>(x.x * tmp2, x.y * tmp2, x.z * tmp2); } template GLM_FUNC_QUALIFIER qua angleAxis(T const& angle, vec<3, T, Q> const& v) { T const a(angle); T const s = glm::sin(a * static_cast(0.5)); return qua(glm::cos(a * static_cast(0.5)), v * s); } }//namespace glm ================================================ FILE: libraries/glm/ext/scalar_common.hpp ================================================ /// @ref ext_scalar_common /// @file glm/ext/scalar_common.hpp /// /// @defgroup ext_scalar_common GLM_EXT_scalar_common /// @ingroup ext /// /// Exposes min and max functions for 3 to 4 scalar parameters. /// /// Include to use the features of this extension. /// /// @see core_func_common /// @see ext_vector_common #pragma once // Dependency: #include "../common.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_scalar_common extension included") #endif namespace glm { /// @addtogroup ext_scalar_common /// @{ /// Returns the minimum component-wise values of 3 inputs /// /// @tparam T A floating-point scalar type. template GLM_FUNC_DECL T min(T a, T b, T c); /// Returns the minimum component-wise values of 4 inputs /// /// @tparam T A floating-point scalar type. template GLM_FUNC_DECL T min(T a, T b, T c, T d); /// Returns the maximum component-wise values of 3 inputs /// /// @tparam T A floating-point scalar type. template GLM_FUNC_DECL T max(T a, T b, T c); /// Returns the maximum component-wise values of 4 inputs /// /// @tparam T A floating-point scalar type. template GLM_FUNC_DECL T max(T a, T b, T c, T d); /// Returns the minimum component-wise values of 2 inputs. If one of the two arguments is NaN, the value of the other argument is returned. /// /// @tparam T A floating-point scalar type. /// /// @see std::fmin documentation template GLM_FUNC_DECL T fmin(T a, T b); /// Returns the minimum component-wise values of 3 inputs. If one of the two arguments is NaN, the value of the other argument is returned. /// /// @tparam T A floating-point scalar type. /// /// @see std::fmin documentation template GLM_FUNC_DECL T fmin(T a, T b, T c); /// Returns the minimum component-wise values of 4 inputs. If one of the two arguments is NaN, the value of the other argument is returned. /// /// @tparam T A floating-point scalar type. /// /// @see std::fmin documentation template GLM_FUNC_DECL T fmin(T a, T b, T c, T d); /// Returns the maximum component-wise values of 2 inputs. If one of the two arguments is NaN, the value of the other argument is returned. /// /// @tparam T A floating-point scalar type. /// /// @see std::fmax documentation template GLM_FUNC_DECL T fmax(T a, T b); /// Returns the maximum component-wise values of 3 inputs. If one of the two arguments is NaN, the value of the other argument is returned. /// /// @tparam T A floating-point scalar type. /// /// @see std::fmax documentation template GLM_FUNC_DECL T fmax(T a, T b, T C); /// Returns the maximum component-wise values of 4 inputs. If one of the two arguments is NaN, the value of the other argument is returned. /// /// @tparam T A floating-point scalar type. /// /// @see std::fmax documentation template GLM_FUNC_DECL T fmax(T a, T b, T C, T D); /// @} }//namespace glm #include "scalar_common.inl" ================================================ FILE: libraries/glm/ext/scalar_common.inl ================================================ namespace glm { template GLM_FUNC_QUALIFIER T min(T a, T b, T c) { return glm::min(glm::min(a, b), c); } template GLM_FUNC_QUALIFIER T min(T a, T b, T c, T d) { return glm::min(glm::min(a, b), glm::min(c, d)); } template GLM_FUNC_QUALIFIER T max(T a, T b, T c) { return glm::max(glm::max(a, b), c); } template GLM_FUNC_QUALIFIER T max(T a, T b, T c, T d) { return glm::max(glm::max(a, b), glm::max(c, d)); } # if GLM_HAS_CXX11_STL using std::fmin; # else template GLM_FUNC_QUALIFIER T fmin(T a, T b) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point input"); if (isnan(a)) return b; return min(a, b); } # endif template GLM_FUNC_QUALIFIER T fmin(T a, T b, T c) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point input"); if (isnan(a)) return fmin(b, c); if (isnan(b)) return fmin(a, c); if (isnan(c)) return min(a, b); return min(a, b, c); } template GLM_FUNC_QUALIFIER T fmin(T a, T b, T c, T d) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point input"); if (isnan(a)) return fmin(b, c, d); if (isnan(b)) return min(a, fmin(c, d)); if (isnan(c)) return fmin(min(a, b), d); if (isnan(d)) return min(a, b, c); return min(a, b, c, d); } # if GLM_HAS_CXX11_STL using std::fmax; # else template GLM_FUNC_QUALIFIER T fmax(T a, T b) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point input"); if (isnan(a)) return b; return max(a, b); } # endif template GLM_FUNC_QUALIFIER T fmax(T a, T b, T c) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point input"); if (isnan(a)) return fmax(b, c); if (isnan(b)) return fmax(a, c); if (isnan(c)) return max(a, b); return max(a, b, c); } template GLM_FUNC_QUALIFIER T fmax(T a, T b, T c, T d) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point input"); if (isnan(a)) return fmax(b, c, d); if (isnan(b)) return max(a, fmax(c, d)); if (isnan(c)) return fmax(max(a, b), d); if (isnan(d)) return max(a, b, c); return max(a, b, c, d); } }//namespace glm ================================================ FILE: libraries/glm/ext/scalar_constants.hpp ================================================ /// @ref ext_scalar_constants /// @file glm/ext/scalar_constants.hpp /// /// @defgroup ext_scalar_constants GLM_EXT_scalar_constants /// @ingroup ext /// /// Provides a list of constants and precomputed useful values. /// /// Include to use the features of this extension. #pragma once // Dependencies #include "../detail/setup.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_scalar_constants extension included") #endif namespace glm { /// @addtogroup ext_scalar_constants /// @{ /// Return the epsilon constant for floating point types. template GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon(); /// Return the pi constant for floating point types. template GLM_FUNC_DECL GLM_CONSTEXPR genType pi(); /// Return the value of cos(1 / 2) for floating point types. template GLM_FUNC_DECL GLM_CONSTEXPR genType cos_one_over_two(); /// @} } //namespace glm #include "scalar_constants.inl" ================================================ FILE: libraries/glm/ext/scalar_constants.inl ================================================ #include namespace glm { template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType epsilon() { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'epsilon' only accepts floating-point inputs"); return std::numeric_limits::epsilon(); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType pi() { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'pi' only accepts floating-point inputs"); return static_cast(3.14159265358979323846264338327950288); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType cos_one_over_two() { return genType(0.877582561890372716130286068203503191); } } //namespace glm ================================================ FILE: libraries/glm/ext/scalar_int_sized.hpp ================================================ /// @ref ext_scalar_int_sized /// @file glm/ext/scalar_int_sized.hpp /// /// @defgroup ext_scalar_int_sized GLM_EXT_scalar_int_sized /// @ingroup ext /// /// Exposes sized signed integer scalar types. /// /// Include to use the features of this extension. /// /// @see ext_scalar_uint_sized #pragma once #include "../detail/setup.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_scalar_int_sized extension included") #endif namespace glm{ namespace detail { # if GLM_HAS_EXTENDED_INTEGER_TYPE typedef std::int8_t int8; typedef std::int16_t int16; typedef std::int32_t int32; # else typedef signed char int8; typedef signed short int16; typedef signed int int32; #endif// template<> struct is_int { enum test {value = ~0}; }; template<> struct is_int { enum test {value = ~0}; }; template<> struct is_int { enum test {value = ~0}; }; }//namespace detail /// @addtogroup ext_scalar_int_sized /// @{ /// 8 bit signed integer type. typedef detail::int8 int8; /// 16 bit signed integer type. typedef detail::int16 int16; /// 32 bit signed integer type. typedef detail::int32 int32; /// 64 bit signed integer type. typedef detail::int64 int64; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/scalar_integer.hpp ================================================ /// @ref ext_scalar_integer /// @file glm/ext/scalar_integer.hpp /// /// @see core (dependence) /// /// @defgroup ext_scalar_integer GLM_EXT_scalar_integer /// @ingroup ext /// /// Include to use the features of this extension. #pragma once // Dependencies #include "../detail/setup.hpp" #include "../detail/qualifier.hpp" #include "../detail/_vectorize.hpp" #include "../detail/type_float.hpp" #include "../vector_relational.hpp" #include "../common.hpp" #include #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_scalar_integer extension included") #endif namespace glm { /// @addtogroup ext_scalar_integer /// @{ /// Return true if the value is a power of two number. /// /// @see ext_scalar_integer template GLM_FUNC_DECL bool isPowerOfTwo(genIUType v); /// Return the power of two number which value is just higher the input value, /// round up to a power of two. /// /// @see ext_scalar_integer template GLM_FUNC_DECL genIUType nextPowerOfTwo(genIUType v); /// Return the power of two number which value is just lower the input value, /// round down to a power of two. /// /// @see ext_scalar_integer template GLM_FUNC_DECL genIUType prevPowerOfTwo(genIUType v); /// Return true if the 'Value' is a multiple of 'Multiple'. /// /// @see ext_scalar_integer template GLM_FUNC_DECL bool isMultiple(genIUType v, genIUType Multiple); /// Higher multiple number of Source. /// /// @tparam genIUType Integer scalar or vector types. /// /// @param v Source value to which is applied the function /// @param Multiple Must be a null or positive value /// /// @see ext_scalar_integer template GLM_FUNC_DECL genIUType nextMultiple(genIUType v, genIUType Multiple); /// Lower multiple number of Source. /// /// @tparam genIUType Integer scalar or vector types. /// /// @param v Source value to which is applied the function /// @param Multiple Must be a null or positive value /// /// @see ext_scalar_integer template GLM_FUNC_DECL genIUType prevMultiple(genIUType v, genIUType Multiple); /// Returns the bit number of the Nth significant bit set to /// 1 in the binary representation of value. /// If value bitcount is less than the Nth significant bit, -1 will be returned. /// /// @tparam genIUType Signed or unsigned integer scalar types. /// /// @see ext_scalar_integer template GLM_FUNC_DECL int findNSB(genIUType x, int significantBitCount); /// @} } //namespace glm #include "scalar_integer.inl" ================================================ FILE: libraries/glm/ext/scalar_integer.inl ================================================ #include "../integer.hpp" namespace glm{ namespace detail { template struct compute_ceilShift { GLM_FUNC_QUALIFIER static vec call(vec const& v, T) { return v; } }; template struct compute_ceilShift { GLM_FUNC_QUALIFIER static vec call(vec const& v, T Shift) { return v | (v >> Shift); } }; template struct compute_ceilPowerOfTwo { GLM_FUNC_QUALIFIER static vec call(vec const& x) { GLM_STATIC_ASSERT(!std::numeric_limits::is_iec559, "'ceilPowerOfTwo' only accept integer scalar or vector inputs"); vec const Sign(sign(x)); vec v(abs(x)); v = v - static_cast(1); v = v | (v >> static_cast(1)); v = v | (v >> static_cast(2)); v = v | (v >> static_cast(4)); v = compute_ceilShift= 2>::call(v, 8); v = compute_ceilShift= 4>::call(v, 16); v = compute_ceilShift= 8>::call(v, 32); return (v + static_cast(1)) * Sign; } }; template struct compute_ceilPowerOfTwo { GLM_FUNC_QUALIFIER static vec call(vec const& x) { GLM_STATIC_ASSERT(!std::numeric_limits::is_iec559, "'ceilPowerOfTwo' only accept integer scalar or vector inputs"); vec v(x); v = v - static_cast(1); v = v | (v >> static_cast(1)); v = v | (v >> static_cast(2)); v = v | (v >> static_cast(4)); v = compute_ceilShift= 2>::call(v, 8); v = compute_ceilShift= 4>::call(v, 16); v = compute_ceilShift= 8>::call(v, 32); return v + static_cast(1); } }; template struct compute_ceilMultiple{}; template<> struct compute_ceilMultiple { template GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) { if(Source > genType(0)) return Source + (Multiple - std::fmod(Source, Multiple)); else return Source + std::fmod(-Source, Multiple); } }; template<> struct compute_ceilMultiple { template GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) { genType Tmp = Source - genType(1); return Tmp + (Multiple - (Tmp % Multiple)); } }; template<> struct compute_ceilMultiple { template GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) { assert(Multiple > genType(0)); if(Source > genType(0)) { genType Tmp = Source - genType(1); return Tmp + (Multiple - (Tmp % Multiple)); } else return Source + (-Source % Multiple); } }; template struct compute_floorMultiple{}; template<> struct compute_floorMultiple { template GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) { if(Source >= genType(0)) return Source - std::fmod(Source, Multiple); else return Source - std::fmod(Source, Multiple) - Multiple; } }; template<> struct compute_floorMultiple { template GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) { if(Source >= genType(0)) return Source - Source % Multiple; else { genType Tmp = Source + genType(1); return Tmp - Tmp % Multiple - Multiple; } } }; template<> struct compute_floorMultiple { template GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) { if(Source >= genType(0)) return Source - Source % Multiple; else { genType Tmp = Source + genType(1); return Tmp - Tmp % Multiple - Multiple; } } }; }//namespace detail template GLM_FUNC_QUALIFIER bool isPowerOfTwo(genIUType Value) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'isPowerOfTwo' only accept integer inputs"); genIUType const Result = glm::abs(Value); return !(Result & (Result - 1)); } template GLM_FUNC_QUALIFIER genIUType nextPowerOfTwo(genIUType value) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'nextPowerOfTwo' only accept integer inputs"); return detail::compute_ceilPowerOfTwo<1, genIUType, defaultp, std::numeric_limits::is_signed>::call(vec<1, genIUType, defaultp>(value)).x; } template GLM_FUNC_QUALIFIER genIUType prevPowerOfTwo(genIUType value) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'prevPowerOfTwo' only accept integer inputs"); return isPowerOfTwo(value) ? value : static_cast(static_cast(1) << static_cast(findMSB(value))); } template GLM_FUNC_QUALIFIER bool isMultiple(genIUType Value, genIUType Multiple) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'isMultiple' only accept integer inputs"); return isMultiple(vec<1, genIUType>(Value), vec<1, genIUType>(Multiple)).x; } template GLM_FUNC_QUALIFIER genIUType nextMultiple(genIUType Source, genIUType Multiple) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'nextMultiple' only accept integer inputs"); return detail::compute_ceilMultiple::is_iec559, std::numeric_limits::is_signed>::call(Source, Multiple); } template GLM_FUNC_QUALIFIER genIUType prevMultiple(genIUType Source, genIUType Multiple) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'prevMultiple' only accept integer inputs"); return detail::compute_floorMultiple::is_iec559, std::numeric_limits::is_signed>::call(Source, Multiple); } template GLM_FUNC_QUALIFIER int findNSB(genIUType x, int significantBitCount) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findNSB' only accept integer inputs"); if(bitCount(x) < significantBitCount) return -1; genIUType const One = static_cast(1); int bitPos = 0; genIUType key = x; int nBitCount = significantBitCount; int Step = sizeof(x) * 8 / 2; while (key > One) { genIUType Mask = static_cast((One << Step) - One); genIUType currentKey = key & Mask; int currentBitCount = bitCount(currentKey); if (nBitCount > currentBitCount) { nBitCount -= currentBitCount; bitPos += Step; key >>= static_cast(Step); } else { key = key & Mask; } Step >>= 1; } return static_cast(bitPos); } }//namespace glm ================================================ FILE: libraries/glm/ext/scalar_relational.hpp ================================================ /// @ref ext_scalar_relational /// @file glm/ext/scalar_relational.hpp /// /// @defgroup ext_scalar_relational GLM_EXT_scalar_relational /// @ingroup ext /// /// Exposes comparison functions for scalar types that take a user defined epsilon values. /// /// Include to use the features of this extension. /// /// @see core_vector_relational /// @see ext_vector_relational /// @see ext_matrix_relational #pragma once // Dependencies #include "../detail/qualifier.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_scalar_relational extension included") #endif namespace glm { /// Returns the component-wise comparison of |x - y| < epsilon. /// True if this expression is satisfied. /// /// @tparam genType Floating-point or integer scalar types template GLM_FUNC_DECL GLM_CONSTEXPR bool equal(genType const& x, genType const& y, genType const& epsilon); /// Returns the component-wise comparison of |x - y| >= epsilon. /// True if this expression is not satisfied. /// /// @tparam genType Floating-point or integer scalar types template GLM_FUNC_DECL GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, genType const& epsilon); /// Returns the component-wise comparison between two scalars in term of ULPs. /// True if this expression is satisfied. /// /// @param x First operand. /// @param y Second operand. /// @param ULPs Maximum difference in ULPs between the two operators to consider them equal. /// /// @tparam genType Floating-point or integer scalar types template GLM_FUNC_DECL GLM_CONSTEXPR bool equal(genType const& x, genType const& y, int ULPs); /// Returns the component-wise comparison between two scalars in term of ULPs. /// True if this expression is not satisfied. /// /// @param x First operand. /// @param y Second operand. /// @param ULPs Maximum difference in ULPs between the two operators to consider them not equal. /// /// @tparam genType Floating-point or integer scalar types template GLM_FUNC_DECL GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, int ULPs); /// @} }//namespace glm #include "scalar_relational.inl" ================================================ FILE: libraries/glm/ext/scalar_relational.inl ================================================ #include "../common.hpp" #include "../ext/scalar_int_sized.hpp" #include "../ext/scalar_uint_sized.hpp" #include "../detail/type_float.hpp" namespace glm { template GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool equal(genType const& x, genType const& y, genType const& epsilon) { return abs(x - y) <= epsilon; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, genType const& epsilon) { return abs(x - y) > epsilon; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool equal(genType const& x, genType const& y, int MaxULPs) { detail::float_t const a(x); detail::float_t const b(y); // Different signs means they do not match. if(a.negative() != b.negative()) return false; // Find the difference in ULPs. typename detail::float_t::int_type const DiffULPs = abs(a.i - b.i); return DiffULPs <= MaxULPs; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, int ULPs) { return !equal(x, y, ULPs); } }//namespace glm ================================================ FILE: libraries/glm/ext/scalar_uint_sized.hpp ================================================ /// @ref ext_scalar_uint_sized /// @file glm/ext/scalar_uint_sized.hpp /// /// @defgroup ext_scalar_uint_sized GLM_EXT_scalar_uint_sized /// @ingroup ext /// /// Exposes sized unsigned integer scalar types. /// /// Include to use the features of this extension. /// /// @see ext_scalar_int_sized #pragma once #include "../detail/setup.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_scalar_uint_sized extension included") #endif namespace glm{ namespace detail { # if GLM_HAS_EXTENDED_INTEGER_TYPE typedef std::uint8_t uint8; typedef std::uint16_t uint16; typedef std::uint32_t uint32; # else typedef unsigned char uint8; typedef unsigned short uint16; typedef unsigned int uint32; #endif template<> struct is_int { enum test {value = ~0}; }; template<> struct is_int { enum test {value = ~0}; }; template<> struct is_int { enum test {value = ~0}; }; }//namespace detail /// @addtogroup ext_scalar_uint_sized /// @{ /// 8 bit unsigned integer type. typedef detail::uint8 uint8; /// 16 bit unsigned integer type. typedef detail::uint16 uint16; /// 32 bit unsigned integer type. typedef detail::uint32 uint32; /// 64 bit unsigned integer type. typedef detail::uint64 uint64; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/scalar_ulp.hpp ================================================ /// @ref ext_scalar_ulp /// @file glm/ext/scalar_ulp.hpp /// /// @defgroup ext_scalar_ulp GLM_EXT_scalar_ulp /// @ingroup ext /// /// Allow the measurement of the accuracy of a function against a reference /// implementation. This extension works on floating-point data and provide results /// in ULP. /// /// Include to use the features of this extension. /// /// @see ext_vector_ulp /// @see ext_scalar_relational #pragma once // Dependencies #include "../ext/scalar_int_sized.hpp" #include "../common.hpp" #include "../detail/qualifier.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_scalar_ulp extension included") #endif namespace glm { /// Return the next ULP value(s) after the input value(s). /// /// @tparam genType A floating-point scalar type. /// /// @see ext_scalar_ulp template GLM_FUNC_DECL genType nextFloat(genType x); /// Return the previous ULP value(s) before the input value(s). /// /// @tparam genType A floating-point scalar type. /// /// @see ext_scalar_ulp template GLM_FUNC_DECL genType prevFloat(genType x); /// Return the value(s) ULP distance after the input value(s). /// /// @tparam genType A floating-point scalar type. /// /// @see ext_scalar_ulp template GLM_FUNC_DECL genType nextFloat(genType x, int ULPs); /// Return the value(s) ULP distance before the input value(s). /// /// @tparam genType A floating-point scalar type. /// /// @see ext_scalar_ulp template GLM_FUNC_DECL genType prevFloat(genType x, int ULPs); /// Return the distance in the number of ULP between 2 single-precision floating-point scalars. /// /// @see ext_scalar_ulp GLM_FUNC_DECL int floatDistance(float x, float y); /// Return the distance in the number of ULP between 2 double-precision floating-point scalars. /// /// @see ext_scalar_ulp GLM_FUNC_DECL int64 floatDistance(double x, double y); /// @} }//namespace glm #include "scalar_ulp.inl" ================================================ FILE: libraries/glm/ext/scalar_ulp.inl ================================================ /// Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. /// /// Developed at SunPro, a Sun Microsystems, Inc. business. /// Permission to use, copy, modify, and distribute this /// software is freely granted, provided that this notice /// is preserved. #include "../detail/type_float.hpp" #include "../ext/scalar_constants.hpp" #include #include #if(GLM_COMPILER & GLM_COMPILER_VC) # pragma warning(push) # pragma warning(disable : 4127) #endif typedef union { float value; /* FIXME: Assumes 32 bit int. */ unsigned int word; } ieee_float_shape_type; typedef union { double value; struct { int lsw; int msw; } parts; } ieee_double_shape_type; #define GLM_EXTRACT_WORDS(ix0,ix1,d) \ do { \ ieee_double_shape_type ew_u; \ ew_u.value = (d); \ (ix0) = ew_u.parts.msw; \ (ix1) = ew_u.parts.lsw; \ } while (0) #define GLM_GET_FLOAT_WORD(i,d) \ do { \ ieee_float_shape_type gf_u; \ gf_u.value = (d); \ (i) = gf_u.word; \ } while (0) #define GLM_SET_FLOAT_WORD(d,i) \ do { \ ieee_float_shape_type sf_u; \ sf_u.word = (i); \ (d) = sf_u.value; \ } while (0) #define GLM_INSERT_WORDS(d,ix0,ix1) \ do { \ ieee_double_shape_type iw_u; \ iw_u.parts.msw = (ix0); \ iw_u.parts.lsw = (ix1); \ (d) = iw_u.value; \ } while (0) namespace glm{ namespace detail { GLM_FUNC_QUALIFIER float nextafterf(float x, float y) { volatile float t; int hx, hy, ix, iy; GLM_GET_FLOAT_WORD(hx, x); GLM_GET_FLOAT_WORD(hy, y); ix = hx & 0x7fffffff; // |x| iy = hy & 0x7fffffff; // |y| if((ix > 0x7f800000) || // x is nan (iy > 0x7f800000)) // y is nan return x + y; if(abs(y - x) <= epsilon()) return y; // x=y, return y if(ix == 0) { // x == 0 GLM_SET_FLOAT_WORD(x, (hy & 0x80000000) | 1);// return +-minsubnormal t = x * x; if(abs(t - x) <= epsilon()) return t; else return x; // raise underflow flag } if(hx >= 0) { // x > 0 if(hx > hy) // x > y, x -= ulp hx -= 1; else // x < y, x += ulp hx += 1; } else { // x < 0 if(hy >= 0 || hx > hy) // x < y, x -= ulp hx -= 1; else // x > y, x += ulp hx += 1; } hy = hx & 0x7f800000; if(hy >= 0x7f800000) return x + x; // overflow if(hy < 0x00800000) // underflow { t = x * x; if(abs(t - x) > epsilon()) { // raise underflow flag GLM_SET_FLOAT_WORD(y, hx); return y; } } GLM_SET_FLOAT_WORD(x, hx); return x; } GLM_FUNC_QUALIFIER double nextafter(double x, double y) { volatile double t; int hx, hy, ix, iy; unsigned int lx, ly; GLM_EXTRACT_WORDS(hx, lx, x); GLM_EXTRACT_WORDS(hy, ly, y); ix = hx & 0x7fffffff; // |x| iy = hy & 0x7fffffff; // |y| if(((ix >= 0x7ff00000) && ((ix - 0x7ff00000) | lx) != 0) || // x is nan ((iy >= 0x7ff00000) && ((iy - 0x7ff00000) | ly) != 0)) // y is nan return x + y; if(abs(y - x) <= epsilon()) return y; // x=y, return y if((ix | lx) == 0) { // x == 0 GLM_INSERT_WORDS(x, hy & 0x80000000, 1); // return +-minsubnormal t = x * x; if(abs(t - x) <= epsilon()) return t; else return x; // raise underflow flag } if(hx >= 0) { // x > 0 if(hx > hy || ((hx == hy) && (lx > ly))) { // x > y, x -= ulp if(lx == 0) hx -= 1; lx -= 1; } else { // x < y, x += ulp lx += 1; if(lx == 0) hx += 1; } } else { // x < 0 if(hy >= 0 || hx > hy || ((hx == hy) && (lx > ly))){// x < y, x -= ulp if(lx == 0) hx -= 1; lx -= 1; } else { // x > y, x += ulp lx += 1; if(lx == 0) hx += 1; } } hy = hx & 0x7ff00000; if(hy >= 0x7ff00000) return x + x; // overflow if(hy < 0x00100000) { // underflow t = x * x; if(abs(t - x) > epsilon()) { // raise underflow flag GLM_INSERT_WORDS(y, hx, lx); return y; } } GLM_INSERT_WORDS(x, hx, lx); return x; } }//namespace detail }//namespace glm #if(GLM_COMPILER & GLM_COMPILER_VC) # pragma warning(pop) #endif namespace glm { template<> GLM_FUNC_QUALIFIER float nextFloat(float x) { # if GLM_HAS_CXX11_STL return std::nextafter(x, std::numeric_limits::max()); # elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) return detail::nextafterf(x, FLT_MAX); # elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) return __builtin_nextafterf(x, FLT_MAX); # else return nextafterf(x, FLT_MAX); # endif } template<> GLM_FUNC_QUALIFIER double nextFloat(double x) { # if GLM_HAS_CXX11_STL return std::nextafter(x, std::numeric_limits::max()); # elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) return detail::nextafter(x, std::numeric_limits::max()); # elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) return __builtin_nextafter(x, DBL_MAX); # else return nextafter(x, DBL_MAX); # endif } template GLM_FUNC_QUALIFIER T nextFloat(T x, int ULPs) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'next_float' only accept floating-point input"); assert(ULPs >= 0); T temp = x; for(int i = 0; i < ULPs; ++i) temp = nextFloat(temp); return temp; } GLM_FUNC_QUALIFIER float prevFloat(float x) { # if GLM_HAS_CXX11_STL return std::nextafter(x, std::numeric_limits::min()); # elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) return detail::nextafterf(x, FLT_MIN); # elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) return __builtin_nextafterf(x, FLT_MIN); # else return nextafterf(x, FLT_MIN); # endif } GLM_FUNC_QUALIFIER double prevFloat(double x) { # if GLM_HAS_CXX11_STL return std::nextafter(x, std::numeric_limits::min()); # elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) return _nextafter(x, DBL_MIN); # elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) return __builtin_nextafter(x, DBL_MIN); # else return nextafter(x, DBL_MIN); # endif } template GLM_FUNC_QUALIFIER T prevFloat(T x, int ULPs) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'prev_float' only accept floating-point input"); assert(ULPs >= 0); T temp = x; for(int i = 0; i < ULPs; ++i) temp = prevFloat(temp); return temp; } GLM_FUNC_QUALIFIER int floatDistance(float x, float y) { detail::float_t const a(x); detail::float_t const b(y); return abs(a.i - b.i); } GLM_FUNC_QUALIFIER int64 floatDistance(double x, double y) { detail::float_t const a(x); detail::float_t const b(y); return abs(a.i - b.i); } }//namespace glm ================================================ FILE: libraries/glm/ext/vector_bool1.hpp ================================================ /// @ref ext_vector_bool1 /// @file glm/ext/vector_bool1.hpp /// /// @defgroup ext_vector_bool1 GLM_EXT_vector_bool1 /// @ingroup ext /// /// Exposes bvec1 vector type. /// /// Include to use the features of this extension. /// /// @see ext_vector_bool1_precision extension. #pragma once #include "../detail/type_vec1.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_vector_bool1 extension included") #endif namespace glm { /// @addtogroup ext_vector_bool1 /// @{ /// 1 components vector of boolean. typedef vec<1, bool, defaultp> bvec1; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_bool1_precision.hpp ================================================ /// @ref ext_vector_bool1_precision /// @file glm/ext/vector_bool1_precision.hpp /// /// @defgroup ext_vector_bool1_precision GLM_EXT_vector_bool1_precision /// @ingroup ext /// /// Exposes highp_bvec1, mediump_bvec1 and lowp_bvec1 types. /// /// Include to use the features of this extension. #pragma once #include "../detail/type_vec1.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_vector_bool1_precision extension included") #endif namespace glm { /// @addtogroup ext_vector_bool1_precision /// @{ /// 1 component vector of bool values. typedef vec<1, bool, highp> highp_bvec1; /// 1 component vector of bool values. typedef vec<1, bool, mediump> mediump_bvec1; /// 1 component vector of bool values. typedef vec<1, bool, lowp> lowp_bvec1; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_bool2.hpp ================================================ /// @ref core /// @file glm/ext/vector_bool2.hpp #pragma once #include "../detail/type_vec2.hpp" namespace glm { /// @addtogroup core_vector /// @{ /// 2 components vector of boolean. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors typedef vec<2, bool, defaultp> bvec2; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_bool2_precision.hpp ================================================ /// @ref core /// @file glm/ext/vector_bool2_precision.hpp #pragma once #include "../detail/type_vec2.hpp" namespace glm { /// @addtogroup core_vector_precision /// @{ /// 2 components vector of high qualifier bool numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<2, bool, highp> highp_bvec2; /// 2 components vector of medium qualifier bool numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<2, bool, mediump> mediump_bvec2; /// 2 components vector of low qualifier bool numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<2, bool, lowp> lowp_bvec2; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_bool3.hpp ================================================ /// @ref core /// @file glm/ext/vector_bool3.hpp #pragma once #include "../detail/type_vec3.hpp" namespace glm { /// @addtogroup core_vector /// @{ /// 3 components vector of boolean. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors typedef vec<3, bool, defaultp> bvec3; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_bool3_precision.hpp ================================================ /// @ref core /// @file glm/ext/vector_bool3_precision.hpp #pragma once #include "../detail/type_vec3.hpp" namespace glm { /// @addtogroup core_vector_precision /// @{ /// 3 components vector of high qualifier bool numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<3, bool, highp> highp_bvec3; /// 3 components vector of medium qualifier bool numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<3, bool, mediump> mediump_bvec3; /// 3 components vector of low qualifier bool numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<3, bool, lowp> lowp_bvec3; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_bool4.hpp ================================================ /// @ref core /// @file glm/ext/vector_bool4.hpp #pragma once #include "../detail/type_vec4.hpp" namespace glm { /// @addtogroup core_vector /// @{ /// 4 components vector of boolean. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors typedef vec<4, bool, defaultp> bvec4; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_bool4_precision.hpp ================================================ /// @ref core /// @file glm/ext/vector_bool4_precision.hpp #pragma once #include "../detail/type_vec4.hpp" namespace glm { /// @addtogroup core_vector_precision /// @{ /// 4 components vector of high qualifier bool numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<4, bool, highp> highp_bvec4; /// 4 components vector of medium qualifier bool numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<4, bool, mediump> mediump_bvec4; /// 4 components vector of low qualifier bool numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<4, bool, lowp> lowp_bvec4; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_common.hpp ================================================ /// @ref ext_vector_common /// @file glm/ext/vector_common.hpp /// /// @defgroup ext_vector_common GLM_EXT_vector_common /// @ingroup ext /// /// Exposes min and max functions for 3 to 4 vector parameters. /// /// Include to use the features of this extension. /// /// @see core_common /// @see ext_scalar_common #pragma once // Dependency: #include "../ext/scalar_common.hpp" #include "../common.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_vector_common extension included") #endif namespace glm { /// @addtogroup ext_vector_common /// @{ /// Return the minimum component-wise values of 3 inputs /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point or integer scalar types /// @tparam Q Value from qualifier enum template GLM_FUNC_DECL GLM_CONSTEXPR vec min(vec const& a, vec const& b, vec const& c); /// Return the minimum component-wise values of 4 inputs /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point or integer scalar types /// @tparam Q Value from qualifier enum template GLM_FUNC_DECL GLM_CONSTEXPR vec min(vec const& a, vec const& b, vec const& c, vec const& d); /// Return the maximum component-wise values of 3 inputs /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point or integer scalar types /// @tparam Q Value from qualifier enum template GLM_FUNC_DECL GLM_CONSTEXPR vec max(vec const& x, vec const& y, vec const& z); /// Return the maximum component-wise values of 4 inputs /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point or integer scalar types /// @tparam Q Value from qualifier enum template GLM_FUNC_DECL GLM_CONSTEXPR vec max( vec const& x, vec const& y, vec const& z, vec const& w); /// Returns y if y < x; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see std::fmin documentation template GLM_FUNC_DECL vec fmin(vec const& x, T y); /// Returns y if y < x; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see std::fmin documentation template GLM_FUNC_DECL vec fmin(vec const& x, vec const& y); /// Returns y if y < x; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see std::fmin documentation template GLM_FUNC_DECL vec fmin(vec const& a, vec const& b, vec const& c); /// Returns y if y < x; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see std::fmin documentation template GLM_FUNC_DECL vec fmin(vec const& a, vec const& b, vec const& c, vec const& d); /// Returns y if x < y; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see std::fmax documentation template GLM_FUNC_DECL vec fmax(vec const& a, T b); /// Returns y if x < y; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see std::fmax documentation template GLM_FUNC_DECL vec fmax(vec const& a, vec const& b); /// Returns y if x < y; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see std::fmax documentation template GLM_FUNC_DECL vec fmax(vec const& a, vec const& b, vec const& c); /// Returns y if x < y; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see std::fmax documentation template GLM_FUNC_DECL vec fmax(vec const& a, vec const& b, vec const& c, vec const& d); /// @} }//namespace glm #include "vector_common.inl" ================================================ FILE: libraries/glm/ext/vector_common.inl ================================================ #include "../detail/_vectorize.hpp" namespace glm { template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec min(vec const& x, vec const& y, vec const& z) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'min' only accept floating-point or integer inputs"); return glm::min(glm::min(x, y), z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec min(vec const& x, vec const& y, vec const& z, vec const& w) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'min' only accept floating-point or integer inputs"); return glm::min(glm::min(x, y), glm::min(z, w)); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec max(vec const& x, vec const& y, vec const& z) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'max' only accept floating-point or integer inputs"); return glm::max(glm::max(x, y), z); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec max(vec const& x, vec const& y, vec const& z, vec const& w) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'max' only accept floating-point or integer inputs"); return glm::max(glm::max(x, y), glm::max(z, w)); } template GLM_FUNC_QUALIFIER vec fmin(vec const& a, T b) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point inputs"); return detail::functor2::call(fmin, a, vec(b)); } template GLM_FUNC_QUALIFIER vec fmin(vec const& a, vec const& b) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point inputs"); return detail::functor2::call(fmin, a, b); } template GLM_FUNC_QUALIFIER vec fmin(vec const& a, vec const& b, vec const& c) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point inputs"); return fmin(fmin(a, b), c); } template GLM_FUNC_QUALIFIER vec fmin(vec const& a, vec const& b, vec const& c, vec const& d) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point inputs"); return fmin(fmin(a, b), fmin(c, d)); } template GLM_FUNC_QUALIFIER vec fmax(vec const& a, T b) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point inputs"); return detail::functor2::call(fmax, a, vec(b)); } template GLM_FUNC_QUALIFIER vec fmax(vec const& a, vec const& b) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point inputs"); return detail::functor2::call(fmax, a, b); } template GLM_FUNC_QUALIFIER vec fmax(vec const& a, vec const& b, vec const& c) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point inputs"); return fmax(fmax(a, b), c); } template GLM_FUNC_QUALIFIER vec fmax(vec const& a, vec const& b, vec const& c, vec const& d) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point inputs"); return fmax(fmax(a, b), fmax(c, d)); } }//namespace glm ================================================ FILE: libraries/glm/ext/vector_double1.hpp ================================================ /// @ref ext_vector_double1 /// @file glm/ext/vector_double1.hpp /// /// @defgroup ext_vector_double1 GLM_EXT_vector_double1 /// @ingroup ext /// /// Exposes double-precision floating point vector type with one component. /// /// Include to use the features of this extension. /// /// @see ext_vector_double1_precision extension. /// @see ext_vector_float1 extension. #pragma once #include "../detail/type_vec1.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_vector_double1 extension included") #endif namespace glm { /// @addtogroup ext_vector_double1 /// @{ /// 1 components vector of double-precision floating-point numbers. typedef vec<1, double, defaultp> dvec1; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_double1_precision.hpp ================================================ /// @ref ext_vector_double1_precision /// @file glm/ext/vector_double1_precision.hpp /// /// @defgroup ext_vector_double1_precision GLM_EXT_vector_double1_precision /// @ingroup ext /// /// Exposes highp_dvec1, mediump_dvec1 and lowp_dvec1 types. /// /// Include to use the features of this extension. /// /// @see ext_vector_double1 #pragma once #include "../detail/type_vec1.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_vector_double1_precision extension included") #endif namespace glm { /// @addtogroup ext_vector_double1_precision /// @{ /// 1 component vector of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef vec<1, double, highp> highp_dvec1; /// 1 component vector of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef vec<1, double, mediump> mediump_dvec1; /// 1 component vector of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef vec<1, double, lowp> lowp_dvec1; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_double2.hpp ================================================ /// @ref core /// @file glm/ext/vector_double2.hpp #pragma once #include "../detail/type_vec2.hpp" namespace glm { /// @addtogroup core_vector /// @{ /// 2 components vector of double-precision floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors typedef vec<2, double, defaultp> dvec2; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_double2_precision.hpp ================================================ /// @ref core /// @file glm/ext/vector_double2_precision.hpp #pragma once #include "../detail/type_vec2.hpp" namespace glm { /// @addtogroup core_vector_precision /// @{ /// 2 components vector of high double-qualifier floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<2, double, highp> highp_dvec2; /// 2 components vector of medium double-qualifier floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<2, double, mediump> mediump_dvec2; /// 2 components vector of low double-qualifier floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<2, double, lowp> lowp_dvec2; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_double3.hpp ================================================ /// @ref core /// @file glm/ext/vector_double3.hpp #pragma once #include "../detail/type_vec3.hpp" namespace glm { /// @addtogroup core_vector /// @{ /// 3 components vector of double-precision floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors typedef vec<3, double, defaultp> dvec3; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_double3_precision.hpp ================================================ /// @ref core /// @file glm/ext/vector_double3_precision.hpp #pragma once #include "../detail/type_vec3.hpp" namespace glm { /// @addtogroup core_vector_precision /// @{ /// 3 components vector of high double-qualifier floating-point numbers. /// There is no guarantee on the actual qualifier. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<3, double, highp> highp_dvec3; /// 3 components vector of medium double-qualifier floating-point numbers. /// There is no guarantee on the actual qualifier. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<3, double, mediump> mediump_dvec3; /// 3 components vector of low double-qualifier floating-point numbers. /// There is no guarantee on the actual qualifier. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<3, double, lowp> lowp_dvec3; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_double4.hpp ================================================ /// @ref core /// @file glm/ext/vector_double4.hpp #pragma once #include "../detail/type_vec4.hpp" namespace glm { /// @addtogroup core_vector /// @{ /// 4 components vector of double-precision floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors typedef vec<4, double, defaultp> dvec4; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_double4_precision.hpp ================================================ /// @ref core /// @file glm/ext/vector_double4_precision.hpp #pragma once #include "../detail/setup.hpp" #include "../detail/type_vec4.hpp" namespace glm { /// @addtogroup core_vector_precision /// @{ /// 4 components vector of high double-qualifier floating-point numbers. /// There is no guarantee on the actual qualifier. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<4, double, highp> highp_dvec4; /// 4 components vector of medium double-qualifier floating-point numbers. /// There is no guarantee on the actual qualifier. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<4, double, mediump> mediump_dvec4; /// 4 components vector of low double-qualifier floating-point numbers. /// There is no guarantee on the actual qualifier. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<4, double, lowp> lowp_dvec4; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_float1.hpp ================================================ /// @ref ext_vector_float1 /// @file glm/ext/vector_float1.hpp /// /// @defgroup ext_vector_float1 GLM_EXT_vector_float1 /// @ingroup ext /// /// Exposes single-precision floating point vector type with one component. /// /// Include to use the features of this extension. /// /// @see ext_vector_float1_precision extension. /// @see ext_vector_double1 extension. #pragma once #include "../detail/type_vec1.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_vector_float1 extension included") #endif namespace glm { /// @addtogroup ext_vector_float1 /// @{ /// 1 components vector of single-precision floating-point numbers. typedef vec<1, float, defaultp> vec1; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_float1_precision.hpp ================================================ /// @ref ext_vector_float1_precision /// @file glm/ext/vector_float1_precision.hpp /// /// @defgroup ext_vector_float1_precision GLM_EXT_vector_float1_precision /// @ingroup ext /// /// Exposes highp_vec1, mediump_vec1 and lowp_vec1 types. /// /// Include to use the features of this extension. /// /// @see ext_vector_float1 extension. #pragma once #include "../detail/type_vec1.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_vector_float1_precision extension included") #endif namespace glm { /// @addtogroup ext_vector_float1_precision /// @{ /// 1 component vector of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef vec<1, float, highp> highp_vec1; /// 1 component vector of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef vec<1, float, mediump> mediump_vec1; /// 1 component vector of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef vec<1, float, lowp> lowp_vec1; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_float2.hpp ================================================ /// @ref core /// @file glm/ext/vector_float2.hpp #pragma once #include "../detail/type_vec2.hpp" namespace glm { /// @addtogroup core_vector /// @{ /// 2 components vector of single-precision floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors typedef vec<2, float, defaultp> vec2; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_float2_precision.hpp ================================================ /// @ref core /// @file glm/ext/vector_float2_precision.hpp #pragma once #include "../detail/type_vec2.hpp" namespace glm { /// @addtogroup core_vector_precision /// @{ /// 2 components vector of high single-qualifier floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<2, float, highp> highp_vec2; /// 2 components vector of medium single-qualifier floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<2, float, mediump> mediump_vec2; /// 2 components vector of low single-qualifier floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<2, float, lowp> lowp_vec2; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_float3.hpp ================================================ /// @ref core /// @file glm/ext/vector_float3.hpp #pragma once #include "../detail/type_vec3.hpp" namespace glm { /// @addtogroup core_vector /// @{ /// 3 components vector of single-precision floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors typedef vec<3, float, defaultp> vec3; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_float3_precision.hpp ================================================ /// @ref core /// @file glm/ext/vector_float3_precision.hpp #pragma once #include "../detail/type_vec3.hpp" namespace glm { /// @addtogroup core_vector_precision /// @{ /// 3 components vector of high single-qualifier floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<3, float, highp> highp_vec3; /// 3 components vector of medium single-qualifier floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<3, float, mediump> mediump_vec3; /// 3 components vector of low single-qualifier floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<3, float, lowp> lowp_vec3; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_float4.hpp ================================================ /// @ref core /// @file glm/ext/vector_float4.hpp #pragma once #include "../detail/type_vec4.hpp" namespace glm { /// @addtogroup core_vector /// @{ /// 4 components vector of single-precision floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors typedef vec<4, float, defaultp> vec4; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_float4_precision.hpp ================================================ /// @ref core /// @file glm/ext/vector_float4_precision.hpp #pragma once #include "../detail/type_vec4.hpp" namespace glm { /// @addtogroup core_vector_precision /// @{ /// 4 components vector of high single-qualifier floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<4, float, highp> highp_vec4; /// 4 components vector of medium single-qualifier floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<4, float, mediump> mediump_vec4; /// 4 components vector of low single-qualifier floating-point numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<4, float, lowp> lowp_vec4; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_int1.hpp ================================================ /// @ref ext_vector_int1 /// @file glm/ext/vector_int1.hpp /// /// @defgroup ext_vector_int1 GLM_EXT_vector_int1 /// @ingroup ext /// /// Exposes ivec1 vector type. /// /// Include to use the features of this extension. /// /// @see ext_vector_uint1 extension. /// @see ext_vector_int1_precision extension. #pragma once #include "../detail/type_vec1.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_vector_int1 extension included") #endif namespace glm { /// @addtogroup ext_vector_int1 /// @{ /// 1 component vector of signed integer numbers. typedef vec<1, int, defaultp> ivec1; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_int1_precision.hpp ================================================ /// @ref ext_vector_int1_precision /// @file glm/ext/vector_int1_precision.hpp /// /// @defgroup ext_vector_int1_precision GLM_EXT_vector_int1_precision /// @ingroup ext /// /// Exposes highp_ivec1, mediump_ivec1 and lowp_ivec1 types. /// /// Include to use the features of this extension. #pragma once #include "../detail/type_vec1.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_vector_int1_precision extension included") #endif namespace glm { /// @addtogroup ext_vector_int1_precision /// @{ /// 1 component vector of signed integer values. typedef vec<1, int, highp> highp_ivec1; /// 1 component vector of signed integer values. typedef vec<1, int, mediump> mediump_ivec1; /// 1 component vector of signed integer values. typedef vec<1, int, lowp> lowp_ivec1; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_int2.hpp ================================================ /// @ref core /// @file glm/ext/vector_int2.hpp #pragma once #include "../detail/type_vec2.hpp" namespace glm { /// @addtogroup core_vector /// @{ /// 2 components vector of signed integer numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors typedef vec<2, int, defaultp> ivec2; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_int2_precision.hpp ================================================ /// @ref core /// @file glm/ext/vector_int2_precision.hpp #pragma once #include "../detail/type_vec2.hpp" namespace glm { /// @addtogroup core_vector_precision /// @{ /// 2 components vector of high qualifier signed integer numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<2, int, highp> highp_ivec2; /// 2 components vector of medium qualifier signed integer numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<2, int, mediump> mediump_ivec2; /// 2 components vector of low qualifier signed integer numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<2, int, lowp> lowp_ivec2; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_int3.hpp ================================================ /// @ref core /// @file glm/ext/vector_int3.hpp #pragma once #include "../detail/type_vec3.hpp" namespace glm { /// @addtogroup core_vector /// @{ /// 3 components vector of signed integer numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors typedef vec<3, int, defaultp> ivec3; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_int3_precision.hpp ================================================ /// @ref core /// @file glm/ext/vector_int3_precision.hpp #pragma once #include "../detail/type_vec3.hpp" namespace glm { /// @addtogroup core_vector_precision /// @{ /// 3 components vector of high qualifier signed integer numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<3, int, highp> highp_ivec3; /// 3 components vector of medium qualifier signed integer numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<3, int, mediump> mediump_ivec3; /// 3 components vector of low qualifier signed integer numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<3, int, lowp> lowp_ivec3; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_int4.hpp ================================================ /// @ref core /// @file glm/ext/vector_int4.hpp #pragma once #include "../detail/type_vec4.hpp" namespace glm { /// @addtogroup core_vector /// @{ /// 4 components vector of signed integer numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors typedef vec<4, int, defaultp> ivec4; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_int4_precision.hpp ================================================ /// @ref core /// @file glm/ext/vector_int4_precision.hpp #pragma once #include "../detail/type_vec4.hpp" namespace glm { /// @addtogroup core_vector_precision /// @{ /// 4 components vector of high qualifier signed integer numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<4, int, highp> highp_ivec4; /// 4 components vector of medium qualifier signed integer numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<4, int, mediump> mediump_ivec4; /// 4 components vector of low qualifier signed integer numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<4, int, lowp> lowp_ivec4; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_integer.hpp ================================================ /// @ref ext_vector_integer /// @file glm/ext/vector_integer.hpp /// /// @see core (dependence) /// @see ext_vector_integer (dependence) /// /// @defgroup ext_vector_integer GLM_EXT_vector_integer /// @ingroup ext /// /// Include to use the features of this extension. #pragma once // Dependencies #include "../detail/setup.hpp" #include "../detail/qualifier.hpp" #include "../detail/_vectorize.hpp" #include "../vector_relational.hpp" #include "../common.hpp" #include #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_vector_integer extension included") #endif namespace glm { /// @addtogroup ext_vector_integer /// @{ /// Return true if the value is a power of two number. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Signed or unsigned integer scalar types. /// @tparam Q Value from qualifier enum /// /// @see ext_vector_integer template GLM_FUNC_DECL vec isPowerOfTwo(vec const& v); /// Return the power of two number which value is just higher the input value, /// round up to a power of two. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Signed or unsigned integer scalar types. /// @tparam Q Value from qualifier enum /// /// @see ext_vector_integer template GLM_FUNC_DECL vec nextPowerOfTwo(vec const& v); /// Return the power of two number which value is just lower the input value, /// round down to a power of two. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Signed or unsigned integer scalar types. /// @tparam Q Value from qualifier enum /// /// @see ext_vector_integer template GLM_FUNC_DECL vec prevPowerOfTwo(vec const& v); /// Return true if the 'Value' is a multiple of 'Multiple'. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Signed or unsigned integer scalar types. /// @tparam Q Value from qualifier enum /// /// @see ext_vector_integer template GLM_FUNC_DECL vec isMultiple(vec const& v, T Multiple); /// Return true if the 'Value' is a multiple of 'Multiple'. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Signed or unsigned integer scalar types. /// @tparam Q Value from qualifier enum /// /// @see ext_vector_integer template GLM_FUNC_DECL vec isMultiple(vec const& v, vec const& Multiple); /// Higher multiple number of Source. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Signed or unsigned integer scalar types. /// @tparam Q Value from qualifier enum /// /// @param v Source values to which is applied the function /// @param Multiple Must be a null or positive value /// /// @see ext_vector_integer template GLM_FUNC_DECL vec nextMultiple(vec const& v, T Multiple); /// Higher multiple number of Source. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Signed or unsigned integer scalar types. /// @tparam Q Value from qualifier enum /// /// @param v Source values to which is applied the function /// @param Multiple Must be a null or positive value /// /// @see ext_vector_integer template GLM_FUNC_DECL vec nextMultiple(vec const& v, vec const& Multiple); /// Lower multiple number of Source. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Signed or unsigned integer scalar types. /// @tparam Q Value from qualifier enum /// /// @param v Source values to which is applied the function /// @param Multiple Must be a null or positive value /// /// @see ext_vector_integer template GLM_FUNC_DECL vec prevMultiple(vec const& v, T Multiple); /// Lower multiple number of Source. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Signed or unsigned integer scalar types. /// @tparam Q Value from qualifier enum /// /// @param v Source values to which is applied the function /// @param Multiple Must be a null or positive value /// /// @see ext_vector_integer template GLM_FUNC_DECL vec prevMultiple(vec const& v, vec const& Multiple); /// Returns the bit number of the Nth significant bit set to /// 1 in the binary representation of value. /// If value bitcount is less than the Nth significant bit, -1 will be returned. /// /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// @tparam T Signed or unsigned integer scalar types. /// /// @see ext_vector_integer template GLM_FUNC_DECL vec findNSB(vec const& Source, vec SignificantBitCount); /// @} } //namespace glm #include "vector_integer.inl" ================================================ FILE: libraries/glm/ext/vector_integer.inl ================================================ #include "scalar_integer.hpp" namespace glm { template GLM_FUNC_QUALIFIER vec isPowerOfTwo(vec const& Value) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'isPowerOfTwo' only accept integer inputs"); vec const Result(abs(Value)); return equal(Result & (Result - vec(1)), vec(0)); } template GLM_FUNC_QUALIFIER vec nextPowerOfTwo(vec const& v) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'nextPowerOfTwo' only accept integer inputs"); return detail::compute_ceilPowerOfTwo::is_signed>::call(v); } template GLM_FUNC_QUALIFIER vec prevPowerOfTwo(vec const& v) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'prevPowerOfTwo' only accept integer inputs"); return detail::functor1::call(prevPowerOfTwo, v); } template GLM_FUNC_QUALIFIER vec isMultiple(vec const& Value, T Multiple) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'isMultiple' only accept integer inputs"); return (Value % Multiple) == vec(0); } template GLM_FUNC_QUALIFIER vec isMultiple(vec const& Value, vec const& Multiple) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'isMultiple' only accept integer inputs"); return (Value % Multiple) == vec(0); } template GLM_FUNC_QUALIFIER vec nextMultiple(vec const& Source, T Multiple) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'nextMultiple' only accept integer inputs"); return detail::functor2::call(nextMultiple, Source, vec(Multiple)); } template GLM_FUNC_QUALIFIER vec nextMultiple(vec const& Source, vec const& Multiple) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'nextMultiple' only accept integer inputs"); return detail::functor2::call(nextMultiple, Source, Multiple); } template GLM_FUNC_QUALIFIER vec prevMultiple(vec const& Source, T Multiple) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'prevMultiple' only accept integer inputs"); return detail::functor2::call(prevMultiple, Source, vec(Multiple)); } template GLM_FUNC_QUALIFIER vec prevMultiple(vec const& Source, vec const& Multiple) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'prevMultiple' only accept integer inputs"); return detail::functor2::call(prevMultiple, Source, Multiple); } template GLM_FUNC_QUALIFIER vec findNSB(vec const& Source, vec SignificantBitCount) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findNSB' only accept integer inputs"); return detail::functor2_vec_int::call(findNSB, Source, SignificantBitCount); } }//namespace glm ================================================ FILE: libraries/glm/ext/vector_relational.hpp ================================================ /// @ref ext_vector_relational /// @file glm/ext/vector_relational.hpp /// /// @see core (dependence) /// @see ext_scalar_integer (dependence) /// /// @defgroup ext_vector_relational GLM_EXT_vector_relational /// @ingroup ext /// /// Exposes comparison functions for vector types that take a user defined epsilon values. /// /// Include to use the features of this extension. /// /// @see core_vector_relational /// @see ext_scalar_relational /// @see ext_matrix_relational #pragma once // Dependencies #include "../detail/qualifier.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_vector_relational extension included") #endif namespace glm { /// @addtogroup ext_vector_relational /// @{ /// Returns the component-wise comparison of |x - y| < epsilon. /// True if this expression is satisfied. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point or integer scalar types /// @tparam Q Value from qualifier enum template GLM_FUNC_DECL GLM_CONSTEXPR vec equal(vec const& x, vec const& y, T epsilon); /// Returns the component-wise comparison of |x - y| < epsilon. /// True if this expression is satisfied. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point or integer scalar types /// @tparam Q Value from qualifier enum template GLM_FUNC_DECL GLM_CONSTEXPR vec equal(vec const& x, vec const& y, vec const& epsilon); /// Returns the component-wise comparison of |x - y| >= epsilon. /// True if this expression is not satisfied. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point or integer scalar types /// @tparam Q Value from qualifier enum template GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, T epsilon); /// Returns the component-wise comparison of |x - y| >= epsilon. /// True if this expression is not satisfied. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point or integer scalar types /// @tparam Q Value from qualifier enum template GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, vec const& epsilon); /// Returns the component-wise comparison between two vectors in term of ULPs. /// True if this expression is satisfied. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point /// @tparam Q Value from qualifier enum template GLM_FUNC_DECL GLM_CONSTEXPR vec equal(vec const& x, vec const& y, int ULPs); /// Returns the component-wise comparison between two vectors in term of ULPs. /// True if this expression is satisfied. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point /// @tparam Q Value from qualifier enum template GLM_FUNC_DECL GLM_CONSTEXPR vec equal(vec const& x, vec const& y, vec const& ULPs); /// Returns the component-wise comparison between two vectors in term of ULPs. /// True if this expression is not satisfied. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point /// @tparam Q Value from qualifier enum template GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, int ULPs); /// Returns the component-wise comparison between two vectors in term of ULPs. /// True if this expression is not satisfied. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point /// @tparam Q Value from qualifier enum template GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, vec const& ULPs); /// @} }//namespace glm #include "vector_relational.inl" ================================================ FILE: libraries/glm/ext/vector_relational.inl ================================================ #include "../vector_relational.hpp" #include "../common.hpp" #include "../detail/qualifier.hpp" #include "../detail/type_float.hpp" namespace glm { template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(vec const& x, vec const& y, T Epsilon) { return equal(x, y, vec(Epsilon)); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(vec const& x, vec const& y, vec const& Epsilon) { return lessThanEqual(abs(x - y), Epsilon); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, T Epsilon) { return notEqual(x, y, vec(Epsilon)); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, vec const& Epsilon) { return greaterThan(abs(x - y), Epsilon); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(vec const& x, vec const& y, int MaxULPs) { return equal(x, y, vec(MaxULPs)); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(vec const& x, vec const& y, vec const& MaxULPs) { vec Result(false); for(length_t i = 0; i < L; ++i) { detail::float_t const a(x[i]); detail::float_t const b(y[i]); // Different signs means they do not match. if(a.negative() != b.negative()) { // Check for equality to make sure +0==-0 Result[i] = a.mantissa() == b.mantissa() && a.exponent() == b.exponent(); } else { // Find the difference in ULPs. typename detail::float_t::int_type const DiffULPs = abs(a.i - b.i); Result[i] = DiffULPs <= MaxULPs[i]; } } return Result; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, int MaxULPs) { return notEqual(x, y, vec(MaxULPs)); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, vec const& MaxULPs) { return not_(equal(x, y, MaxULPs)); } }//namespace glm ================================================ FILE: libraries/glm/ext/vector_uint1.hpp ================================================ /// @ref ext_vector_uint1 /// @file glm/ext/vector_uint1.hpp /// /// @defgroup ext_vector_uint1 GLM_EXT_vector_uint1 /// @ingroup ext /// /// Exposes uvec1 vector type. /// /// Include to use the features of this extension. /// /// @see ext_vector_int1 extension. /// @see ext_vector_uint1_precision extension. #pragma once #include "../detail/type_vec1.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_vector_uint1 extension included") #endif namespace glm { /// @addtogroup ext_vector_uint1 /// @{ /// 1 component vector of unsigned integer numbers. typedef vec<1, unsigned int, defaultp> uvec1; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_uint1_precision.hpp ================================================ /// @ref ext_vector_uint1_precision /// @file glm/ext/vector_uint1_precision.hpp /// /// @defgroup ext_vector_uint1_precision GLM_EXT_vector_uint1_precision /// @ingroup ext /// /// Exposes highp_uvec1, mediump_uvec1 and lowp_uvec1 types. /// /// Include to use the features of this extension. #pragma once #include "../detail/type_vec1.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_vector_uint1_precision extension included") #endif namespace glm { /// @addtogroup ext_vector_uint1_precision /// @{ /// 1 component vector of unsigned integer values. /// /// @see ext_vector_uint1_precision typedef vec<1, unsigned int, highp> highp_uvec1; /// 1 component vector of unsigned integer values. /// /// @see ext_vector_uint1_precision typedef vec<1, unsigned int, mediump> mediump_uvec1; /// 1 component vector of unsigned integer values. /// /// @see ext_vector_uint1_precision typedef vec<1, unsigned int, lowp> lowp_uvec1; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_uint2.hpp ================================================ /// @ref core /// @file glm/ext/vector_uint2.hpp #pragma once #include "../detail/type_vec2.hpp" namespace glm { /// @addtogroup core_vector /// @{ /// 2 components vector of unsigned integer numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors typedef vec<2, unsigned int, defaultp> uvec2; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_uint2_precision.hpp ================================================ /// @ref core /// @file glm/ext/vector_uint2_precision.hpp #pragma once #include "../detail/type_vec2.hpp" namespace glm { /// @addtogroup core_vector_precision /// @{ /// 2 components vector of high qualifier unsigned integer numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<2, unsigned int, highp> highp_uvec2; /// 2 components vector of medium qualifier unsigned integer numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<2, unsigned int, mediump> mediump_uvec2; /// 2 components vector of low qualifier unsigned integer numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<2, unsigned int, lowp> lowp_uvec2; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_uint3.hpp ================================================ /// @ref core /// @file glm/ext/vector_uint3.hpp #pragma once #include "../detail/type_vec3.hpp" namespace glm { /// @addtogroup core_vector /// @{ /// 3 components vector of unsigned integer numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors typedef vec<3, unsigned int, defaultp> uvec3; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_uint3_precision.hpp ================================================ /// @ref core /// @file glm/ext/vector_uint3_precision.hpp #pragma once #include "../detail/type_vec3.hpp" namespace glm { /// @addtogroup core_vector_precision /// @{ /// 3 components vector of high qualifier unsigned integer numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<3, unsigned int, highp> highp_uvec3; /// 3 components vector of medium qualifier unsigned integer numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<3, unsigned int, mediump> mediump_uvec3; /// 3 components vector of low qualifier unsigned integer numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<3, unsigned int, lowp> lowp_uvec3; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_uint4.hpp ================================================ /// @ref core /// @file glm/ext/vector_uint4.hpp #pragma once #include "../detail/type_vec4.hpp" namespace glm { /// @addtogroup core_vector /// @{ /// 4 components vector of unsigned integer numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors typedef vec<4, unsigned int, defaultp> uvec4; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_uint4_precision.hpp ================================================ /// @ref core /// @file glm/ext/vector_uint4_precision.hpp #pragma once #include "../detail/type_vec4.hpp" namespace glm { /// @addtogroup core_vector_precision /// @{ /// 4 components vector of high qualifier unsigned integer numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<4, unsigned int, highp> highp_uvec4; /// 4 components vector of medium qualifier unsigned integer numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<4, unsigned int, mediump> mediump_uvec4; /// 4 components vector of low qualifier unsigned integer numbers. /// /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier typedef vec<4, unsigned int, lowp> lowp_uvec4; /// @} }//namespace glm ================================================ FILE: libraries/glm/ext/vector_ulp.hpp ================================================ /// @ref ext_vector_ulp /// @file glm/ext/vector_ulp.hpp /// /// @defgroup ext_vector_ulp GLM_EXT_vector_ulp /// @ingroup ext /// /// Allow the measurement of the accuracy of a function against a reference /// implementation. This extension works on floating-point data and provide results /// in ULP. /// /// Include to use the features of this extension. /// /// @see ext_scalar_ulp /// @see ext_scalar_relational /// @see ext_vector_relational #pragma once // Dependencies #include "../ext/scalar_ulp.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_EXT_vector_ulp extension included") #endif namespace glm { /// Return the next ULP value(s) after the input value(s). /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point /// @tparam Q Value from qualifier enum /// /// @see ext_scalar_ulp template GLM_FUNC_DECL vec nextFloat(vec const& x); /// Return the value(s) ULP distance after the input value(s). /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point /// @tparam Q Value from qualifier enum /// /// @see ext_scalar_ulp template GLM_FUNC_DECL vec nextFloat(vec const& x, int ULPs); /// Return the value(s) ULP distance after the input value(s). /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point /// @tparam Q Value from qualifier enum /// /// @see ext_scalar_ulp template GLM_FUNC_DECL vec nextFloat(vec const& x, vec const& ULPs); /// Return the previous ULP value(s) before the input value(s). /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point /// @tparam Q Value from qualifier enum /// /// @see ext_scalar_ulp template GLM_FUNC_DECL vec prevFloat(vec const& x); /// Return the value(s) ULP distance before the input value(s). /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point /// @tparam Q Value from qualifier enum /// /// @see ext_scalar_ulp template GLM_FUNC_DECL vec prevFloat(vec const& x, int ULPs); /// Return the value(s) ULP distance before the input value(s). /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point /// @tparam Q Value from qualifier enum /// /// @see ext_scalar_ulp template GLM_FUNC_DECL vec prevFloat(vec const& x, vec const& ULPs); /// Return the distance in the number of ULP between 2 single-precision floating-point scalars. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam Q Value from qualifier enum /// /// @see ext_scalar_ulp template GLM_FUNC_DECL vec floatDistance(vec const& x, vec const& y); /// Return the distance in the number of ULP between 2 double-precision floating-point scalars. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam Q Value from qualifier enum /// /// @see ext_scalar_ulp template GLM_FUNC_DECL vec floatDistance(vec const& x, vec const& y); /// @} }//namespace glm #include "vector_ulp.inl" ================================================ FILE: libraries/glm/ext/vector_ulp.inl ================================================ namespace glm { template GLM_FUNC_QUALIFIER vec nextFloat(vec const& x) { vec Result; for(length_t i = 0, n = Result.length(); i < n; ++i) Result[i] = nextFloat(x[i]); return Result; } template GLM_FUNC_QUALIFIER vec nextFloat(vec const& x, int ULPs) { vec Result; for(length_t i = 0, n = Result.length(); i < n; ++i) Result[i] = nextFloat(x[i], ULPs); return Result; } template GLM_FUNC_QUALIFIER vec nextFloat(vec const& x, vec const& ULPs) { vec Result; for(length_t i = 0, n = Result.length(); i < n; ++i) Result[i] = nextFloat(x[i], ULPs[i]); return Result; } template GLM_FUNC_QUALIFIER vec prevFloat(vec const& x) { vec Result; for(length_t i = 0, n = Result.length(); i < n; ++i) Result[i] = prevFloat(x[i]); return Result; } template GLM_FUNC_QUALIFIER vec prevFloat(vec const& x, int ULPs) { vec Result; for(length_t i = 0, n = Result.length(); i < n; ++i) Result[i] = prevFloat(x[i], ULPs); return Result; } template GLM_FUNC_QUALIFIER vec prevFloat(vec const& x, vec const& ULPs) { vec Result; for(length_t i = 0, n = Result.length(); i < n; ++i) Result[i] = prevFloat(x[i], ULPs[i]); return Result; } template GLM_FUNC_QUALIFIER vec floatDistance(vec const& x, vec const& y) { vec Result; for(length_t i = 0, n = Result.length(); i < n; ++i) Result[i] = floatDistance(x[i], y[i]); return Result; } template GLM_FUNC_QUALIFIER vec floatDistance(vec const& x, vec const& y) { vec Result; for(length_t i = 0, n = Result.length(); i < n; ++i) Result[i] = floatDistance(x[i], y[i]); return Result; } }//namespace glm ================================================ FILE: libraries/glm/ext.hpp ================================================ /// @file glm/ext.hpp /// /// @ref core (Dependence) #include "detail/setup.hpp" #pragma once #include "glm.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_MESSAGE_EXT_INCLUDED_DISPLAYED) # define GLM_MESSAGE_EXT_INCLUDED_DISPLAYED # pragma message("GLM: All extensions included (not recommended)") #endif//GLM_MESSAGES #include "./ext/matrix_double2x2.hpp" #include "./ext/matrix_double2x2_precision.hpp" #include "./ext/matrix_double2x3.hpp" #include "./ext/matrix_double2x3_precision.hpp" #include "./ext/matrix_double2x4.hpp" #include "./ext/matrix_double2x4_precision.hpp" #include "./ext/matrix_double3x2.hpp" #include "./ext/matrix_double3x2_precision.hpp" #include "./ext/matrix_double3x3.hpp" #include "./ext/matrix_double3x3_precision.hpp" #include "./ext/matrix_double3x4.hpp" #include "./ext/matrix_double3x4_precision.hpp" #include "./ext/matrix_double4x2.hpp" #include "./ext/matrix_double4x2_precision.hpp" #include "./ext/matrix_double4x3.hpp" #include "./ext/matrix_double4x3_precision.hpp" #include "./ext/matrix_double4x4.hpp" #include "./ext/matrix_double4x4_precision.hpp" #include "./ext/matrix_float2x2.hpp" #include "./ext/matrix_float2x2_precision.hpp" #include "./ext/matrix_float2x3.hpp" #include "./ext/matrix_float2x3_precision.hpp" #include "./ext/matrix_float2x4.hpp" #include "./ext/matrix_float2x4_precision.hpp" #include "./ext/matrix_float3x2.hpp" #include "./ext/matrix_float3x2_precision.hpp" #include "./ext/matrix_float3x3.hpp" #include "./ext/matrix_float3x3_precision.hpp" #include "./ext/matrix_float3x4.hpp" #include "./ext/matrix_float3x4_precision.hpp" #include "./ext/matrix_float4x2.hpp" #include "./ext/matrix_float4x2_precision.hpp" #include "./ext/matrix_float4x3.hpp" #include "./ext/matrix_float4x3_precision.hpp" #include "./ext/matrix_float4x4.hpp" #include "./ext/matrix_float4x4_precision.hpp" #include "./ext/matrix_relational.hpp" #include "./ext/quaternion_double.hpp" #include "./ext/quaternion_double_precision.hpp" #include "./ext/quaternion_float.hpp" #include "./ext/quaternion_float_precision.hpp" #include "./ext/quaternion_geometric.hpp" #include "./ext/quaternion_relational.hpp" #include "./ext/scalar_constants.hpp" #include "./ext/scalar_int_sized.hpp" #include "./ext/scalar_relational.hpp" #include "./ext/vector_bool1.hpp" #include "./ext/vector_bool1_precision.hpp" #include "./ext/vector_bool2.hpp" #include "./ext/vector_bool2_precision.hpp" #include "./ext/vector_bool3.hpp" #include "./ext/vector_bool3_precision.hpp" #include "./ext/vector_bool4.hpp" #include "./ext/vector_bool4_precision.hpp" #include "./ext/vector_double1.hpp" #include "./ext/vector_double1_precision.hpp" #include "./ext/vector_double2.hpp" #include "./ext/vector_double2_precision.hpp" #include "./ext/vector_double3.hpp" #include "./ext/vector_double3_precision.hpp" #include "./ext/vector_double4.hpp" #include "./ext/vector_double4_precision.hpp" #include "./ext/vector_float1.hpp" #include "./ext/vector_float1_precision.hpp" #include "./ext/vector_float2.hpp" #include "./ext/vector_float2_precision.hpp" #include "./ext/vector_float3.hpp" #include "./ext/vector_float3_precision.hpp" #include "./ext/vector_float4.hpp" #include "./ext/vector_float4_precision.hpp" #include "./ext/vector_int1.hpp" #include "./ext/vector_int1_precision.hpp" #include "./ext/vector_int2.hpp" #include "./ext/vector_int2_precision.hpp" #include "./ext/vector_int3.hpp" #include "./ext/vector_int3_precision.hpp" #include "./ext/vector_int4.hpp" #include "./ext/vector_int4_precision.hpp" #include "./ext/vector_relational.hpp" #include "./ext/vector_uint1.hpp" #include "./ext/vector_uint1_precision.hpp" #include "./ext/vector_uint2.hpp" #include "./ext/vector_uint2_precision.hpp" #include "./ext/vector_uint3.hpp" #include "./ext/vector_uint3_precision.hpp" #include "./ext/vector_uint4.hpp" #include "./ext/vector_uint4_precision.hpp" #include "./gtc/bitfield.hpp" #include "./gtc/color_space.hpp" #include "./gtc/constants.hpp" #include "./gtc/epsilon.hpp" #include "./gtc/integer.hpp" #include "./gtc/matrix_access.hpp" #include "./gtc/matrix_integer.hpp" #include "./gtc/matrix_inverse.hpp" #include "./gtc/matrix_transform.hpp" #include "./gtc/noise.hpp" #include "./gtc/packing.hpp" #include "./gtc/quaternion.hpp" #include "./gtc/random.hpp" #include "./gtc/reciprocal.hpp" #include "./gtc/round.hpp" #include "./gtc/type_precision.hpp" #include "./gtc/type_ptr.hpp" #include "./gtc/ulp.hpp" #include "./gtc/vec1.hpp" #if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE # include "./gtc/type_aligned.hpp" #endif #ifdef GLM_ENABLE_EXPERIMENTAL #include "./gtx/associated_min_max.hpp" #include "./gtx/bit.hpp" #include "./gtx/closest_point.hpp" #include "./gtx/color_encoding.hpp" #include "./gtx/color_space.hpp" #include "./gtx/color_space_YCoCg.hpp" #include "./gtx/compatibility.hpp" #include "./gtx/component_wise.hpp" #include "./gtx/dual_quaternion.hpp" #include "./gtx/euler_angles.hpp" #include "./gtx/extend.hpp" #include "./gtx/extended_min_max.hpp" #include "./gtx/fast_exponential.hpp" #include "./gtx/fast_square_root.hpp" #include "./gtx/fast_trigonometry.hpp" #include "./gtx/functions.hpp" #include "./gtx/gradient_paint.hpp" #include "./gtx/handed_coordinate_space.hpp" #include "./gtx/integer.hpp" #include "./gtx/intersect.hpp" #include "./gtx/log_base.hpp" #include "./gtx/matrix_cross_product.hpp" #include "./gtx/matrix_interpolation.hpp" #include "./gtx/matrix_major_storage.hpp" #include "./gtx/matrix_operation.hpp" #include "./gtx/matrix_query.hpp" #include "./gtx/mixed_product.hpp" #include "./gtx/norm.hpp" #include "./gtx/normal.hpp" #include "./gtx/normalize_dot.hpp" #include "./gtx/number_precision.hpp" #include "./gtx/optimum_pow.hpp" #include "./gtx/orthonormalize.hpp" #include "./gtx/perpendicular.hpp" #include "./gtx/polar_coordinates.hpp" #include "./gtx/projection.hpp" #include "./gtx/quaternion.hpp" #include "./gtx/raw_data.hpp" #include "./gtx/rotate_vector.hpp" #include "./gtx/spline.hpp" #include "./gtx/std_based_type.hpp" #if !(GLM_COMPILER & GLM_COMPILER_CUDA) # include "./gtx/string_cast.hpp" #endif #include "./gtx/transform.hpp" #include "./gtx/transform2.hpp" #include "./gtx/vec_swizzle.hpp" #include "./gtx/vector_angle.hpp" #include "./gtx/vector_query.hpp" #include "./gtx/wrap.hpp" #if GLM_HAS_TEMPLATE_ALIASES # include "./gtx/scalar_multiplication.hpp" #endif #if GLM_HAS_RANGE_FOR # include "./gtx/range.hpp" #endif #endif//GLM_ENABLE_EXPERIMENTAL ================================================ FILE: libraries/glm/fwd.hpp ================================================ #pragma once #include "detail/qualifier.hpp" namespace glm { #if GLM_HAS_EXTENDED_INTEGER_TYPE typedef std::int8_t int8; typedef std::int16_t int16; typedef std::int32_t int32; typedef std::int64_t int64; typedef std::uint8_t uint8; typedef std::uint16_t uint16; typedef std::uint32_t uint32; typedef std::uint64_t uint64; #else typedef signed char int8; typedef signed short int16; typedef signed int int32; typedef detail::int64 int64; typedef unsigned char uint8; typedef unsigned short uint16; typedef unsigned int uint32; typedef detail::uint64 uint64; #endif // Scalar int typedef int8 lowp_i8; typedef int8 mediump_i8; typedef int8 highp_i8; typedef int8 i8; typedef int8 lowp_int8; typedef int8 mediump_int8; typedef int8 highp_int8; typedef int8 lowp_int8_t; typedef int8 mediump_int8_t; typedef int8 highp_int8_t; typedef int8 int8_t; typedef int16 lowp_i16; typedef int16 mediump_i16; typedef int16 highp_i16; typedef int16 i16; typedef int16 lowp_int16; typedef int16 mediump_int16; typedef int16 highp_int16; typedef int16 lowp_int16_t; typedef int16 mediump_int16_t; typedef int16 highp_int16_t; typedef int16 int16_t; typedef int32 lowp_i32; typedef int32 mediump_i32; typedef int32 highp_i32; typedef int32 i32; typedef int32 lowp_int32; typedef int32 mediump_int32; typedef int32 highp_int32; typedef int32 lowp_int32_t; typedef int32 mediump_int32_t; typedef int32 highp_int32_t; typedef int32 int32_t; typedef int64 lowp_i64; typedef int64 mediump_i64; typedef int64 highp_i64; typedef int64 i64; typedef int64 lowp_int64; typedef int64 mediump_int64; typedef int64 highp_int64; typedef int64 lowp_int64_t; typedef int64 mediump_int64_t; typedef int64 highp_int64_t; typedef int64 int64_t; // Scalar uint typedef uint8 lowp_u8; typedef uint8 mediump_u8; typedef uint8 highp_u8; typedef uint8 u8; typedef uint8 lowp_uint8; typedef uint8 mediump_uint8; typedef uint8 highp_uint8; typedef uint8 lowp_uint8_t; typedef uint8 mediump_uint8_t; typedef uint8 highp_uint8_t; typedef uint8 uint8_t; typedef uint16 lowp_u16; typedef uint16 mediump_u16; typedef uint16 highp_u16; typedef uint16 u16; typedef uint16 lowp_uint16; typedef uint16 mediump_uint16; typedef uint16 highp_uint16; typedef uint16 lowp_uint16_t; typedef uint16 mediump_uint16_t; typedef uint16 highp_uint16_t; typedef uint16 uint16_t; typedef uint32 lowp_u32; typedef uint32 mediump_u32; typedef uint32 highp_u32; typedef uint32 u32; typedef uint32 lowp_uint32; typedef uint32 mediump_uint32; typedef uint32 highp_uint32; typedef uint32 lowp_uint32_t; typedef uint32 mediump_uint32_t; typedef uint32 highp_uint32_t; typedef uint32 uint32_t; typedef uint64 lowp_u64; typedef uint64 mediump_u64; typedef uint64 highp_u64; typedef uint64 u64; typedef uint64 lowp_uint64; typedef uint64 mediump_uint64; typedef uint64 highp_uint64; typedef uint64 lowp_uint64_t; typedef uint64 mediump_uint64_t; typedef uint64 highp_uint64_t; typedef uint64 uint64_t; // Scalar float typedef float lowp_f32; typedef float mediump_f32; typedef float highp_f32; typedef float f32; typedef float lowp_float32; typedef float mediump_float32; typedef float highp_float32; typedef float float32; typedef float lowp_float32_t; typedef float mediump_float32_t; typedef float highp_float32_t; typedef float float32_t; typedef double lowp_f64; typedef double mediump_f64; typedef double highp_f64; typedef double f64; typedef double lowp_float64; typedef double mediump_float64; typedef double highp_float64; typedef double float64; typedef double lowp_float64_t; typedef double mediump_float64_t; typedef double highp_float64_t; typedef double float64_t; // Vector bool typedef vec<1, bool, lowp> lowp_bvec1; typedef vec<2, bool, lowp> lowp_bvec2; typedef vec<3, bool, lowp> lowp_bvec3; typedef vec<4, bool, lowp> lowp_bvec4; typedef vec<1, bool, mediump> mediump_bvec1; typedef vec<2, bool, mediump> mediump_bvec2; typedef vec<3, bool, mediump> mediump_bvec3; typedef vec<4, bool, mediump> mediump_bvec4; typedef vec<1, bool, highp> highp_bvec1; typedef vec<2, bool, highp> highp_bvec2; typedef vec<3, bool, highp> highp_bvec3; typedef vec<4, bool, highp> highp_bvec4; typedef vec<1, bool, defaultp> bvec1; typedef vec<2, bool, defaultp> bvec2; typedef vec<3, bool, defaultp> bvec3; typedef vec<4, bool, defaultp> bvec4; // Vector int typedef vec<1, i32, lowp> lowp_ivec1; typedef vec<2, i32, lowp> lowp_ivec2; typedef vec<3, i32, lowp> lowp_ivec3; typedef vec<4, i32, lowp> lowp_ivec4; typedef vec<1, i32, mediump> mediump_ivec1; typedef vec<2, i32, mediump> mediump_ivec2; typedef vec<3, i32, mediump> mediump_ivec3; typedef vec<4, i32, mediump> mediump_ivec4; typedef vec<1, i32, highp> highp_ivec1; typedef vec<2, i32, highp> highp_ivec2; typedef vec<3, i32, highp> highp_ivec3; typedef vec<4, i32, highp> highp_ivec4; typedef vec<1, i32, defaultp> ivec1; typedef vec<2, i32, defaultp> ivec2; typedef vec<3, i32, defaultp> ivec3; typedef vec<4, i32, defaultp> ivec4; typedef vec<1, i8, lowp> lowp_i8vec1; typedef vec<2, i8, lowp> lowp_i8vec2; typedef vec<3, i8, lowp> lowp_i8vec3; typedef vec<4, i8, lowp> lowp_i8vec4; typedef vec<1, i8, mediump> mediump_i8vec1; typedef vec<2, i8, mediump> mediump_i8vec2; typedef vec<3, i8, mediump> mediump_i8vec3; typedef vec<4, i8, mediump> mediump_i8vec4; typedef vec<1, i8, highp> highp_i8vec1; typedef vec<2, i8, highp> highp_i8vec2; typedef vec<3, i8, highp> highp_i8vec3; typedef vec<4, i8, highp> highp_i8vec4; typedef vec<1, i8, defaultp> i8vec1; typedef vec<2, i8, defaultp> i8vec2; typedef vec<3, i8, defaultp> i8vec3; typedef vec<4, i8, defaultp> i8vec4; typedef vec<1, i16, lowp> lowp_i16vec1; typedef vec<2, i16, lowp> lowp_i16vec2; typedef vec<3, i16, lowp> lowp_i16vec3; typedef vec<4, i16, lowp> lowp_i16vec4; typedef vec<1, i16, mediump> mediump_i16vec1; typedef vec<2, i16, mediump> mediump_i16vec2; typedef vec<3, i16, mediump> mediump_i16vec3; typedef vec<4, i16, mediump> mediump_i16vec4; typedef vec<1, i16, highp> highp_i16vec1; typedef vec<2, i16, highp> highp_i16vec2; typedef vec<3, i16, highp> highp_i16vec3; typedef vec<4, i16, highp> highp_i16vec4; typedef vec<1, i16, defaultp> i16vec1; typedef vec<2, i16, defaultp> i16vec2; typedef vec<3, i16, defaultp> i16vec3; typedef vec<4, i16, defaultp> i16vec4; typedef vec<1, i32, lowp> lowp_i32vec1; typedef vec<2, i32, lowp> lowp_i32vec2; typedef vec<3, i32, lowp> lowp_i32vec3; typedef vec<4, i32, lowp> lowp_i32vec4; typedef vec<1, i32, mediump> mediump_i32vec1; typedef vec<2, i32, mediump> mediump_i32vec2; typedef vec<3, i32, mediump> mediump_i32vec3; typedef vec<4, i32, mediump> mediump_i32vec4; typedef vec<1, i32, highp> highp_i32vec1; typedef vec<2, i32, highp> highp_i32vec2; typedef vec<3, i32, highp> highp_i32vec3; typedef vec<4, i32, highp> highp_i32vec4; typedef vec<1, i32, defaultp> i32vec1; typedef vec<2, i32, defaultp> i32vec2; typedef vec<3, i32, defaultp> i32vec3; typedef vec<4, i32, defaultp> i32vec4; typedef vec<1, i64, lowp> lowp_i64vec1; typedef vec<2, i64, lowp> lowp_i64vec2; typedef vec<3, i64, lowp> lowp_i64vec3; typedef vec<4, i64, lowp> lowp_i64vec4; typedef vec<1, i64, mediump> mediump_i64vec1; typedef vec<2, i64, mediump> mediump_i64vec2; typedef vec<3, i64, mediump> mediump_i64vec3; typedef vec<4, i64, mediump> mediump_i64vec4; typedef vec<1, i64, highp> highp_i64vec1; typedef vec<2, i64, highp> highp_i64vec2; typedef vec<3, i64, highp> highp_i64vec3; typedef vec<4, i64, highp> highp_i64vec4; typedef vec<1, i64, defaultp> i64vec1; typedef vec<2, i64, defaultp> i64vec2; typedef vec<3, i64, defaultp> i64vec3; typedef vec<4, i64, defaultp> i64vec4; // Vector uint typedef vec<1, u32, lowp> lowp_uvec1; typedef vec<2, u32, lowp> lowp_uvec2; typedef vec<3, u32, lowp> lowp_uvec3; typedef vec<4, u32, lowp> lowp_uvec4; typedef vec<1, u32, mediump> mediump_uvec1; typedef vec<2, u32, mediump> mediump_uvec2; typedef vec<3, u32, mediump> mediump_uvec3; typedef vec<4, u32, mediump> mediump_uvec4; typedef vec<1, u32, highp> highp_uvec1; typedef vec<2, u32, highp> highp_uvec2; typedef vec<3, u32, highp> highp_uvec3; typedef vec<4, u32, highp> highp_uvec4; typedef vec<1, u32, defaultp> uvec1; typedef vec<2, u32, defaultp> uvec2; typedef vec<3, u32, defaultp> uvec3; typedef vec<4, u32, defaultp> uvec4; typedef vec<1, u8, lowp> lowp_u8vec1; typedef vec<2, u8, lowp> lowp_u8vec2; typedef vec<3, u8, lowp> lowp_u8vec3; typedef vec<4, u8, lowp> lowp_u8vec4; typedef vec<1, u8, mediump> mediump_u8vec1; typedef vec<2, u8, mediump> mediump_u8vec2; typedef vec<3, u8, mediump> mediump_u8vec3; typedef vec<4, u8, mediump> mediump_u8vec4; typedef vec<1, u8, highp> highp_u8vec1; typedef vec<2, u8, highp> highp_u8vec2; typedef vec<3, u8, highp> highp_u8vec3; typedef vec<4, u8, highp> highp_u8vec4; typedef vec<1, u8, defaultp> u8vec1; typedef vec<2, u8, defaultp> u8vec2; typedef vec<3, u8, defaultp> u8vec3; typedef vec<4, u8, defaultp> u8vec4; typedef vec<1, u16, lowp> lowp_u16vec1; typedef vec<2, u16, lowp> lowp_u16vec2; typedef vec<3, u16, lowp> lowp_u16vec3; typedef vec<4, u16, lowp> lowp_u16vec4; typedef vec<1, u16, mediump> mediump_u16vec1; typedef vec<2, u16, mediump> mediump_u16vec2; typedef vec<3, u16, mediump> mediump_u16vec3; typedef vec<4, u16, mediump> mediump_u16vec4; typedef vec<1, u16, highp> highp_u16vec1; typedef vec<2, u16, highp> highp_u16vec2; typedef vec<3, u16, highp> highp_u16vec3; typedef vec<4, u16, highp> highp_u16vec4; typedef vec<1, u16, defaultp> u16vec1; typedef vec<2, u16, defaultp> u16vec2; typedef vec<3, u16, defaultp> u16vec3; typedef vec<4, u16, defaultp> u16vec4; typedef vec<1, u32, lowp> lowp_u32vec1; typedef vec<2, u32, lowp> lowp_u32vec2; typedef vec<3, u32, lowp> lowp_u32vec3; typedef vec<4, u32, lowp> lowp_u32vec4; typedef vec<1, u32, mediump> mediump_u32vec1; typedef vec<2, u32, mediump> mediump_u32vec2; typedef vec<3, u32, mediump> mediump_u32vec3; typedef vec<4, u32, mediump> mediump_u32vec4; typedef vec<1, u32, highp> highp_u32vec1; typedef vec<2, u32, highp> highp_u32vec2; typedef vec<3, u32, highp> highp_u32vec3; typedef vec<4, u32, highp> highp_u32vec4; typedef vec<1, u32, defaultp> u32vec1; typedef vec<2, u32, defaultp> u32vec2; typedef vec<3, u32, defaultp> u32vec3; typedef vec<4, u32, defaultp> u32vec4; typedef vec<1, u64, lowp> lowp_u64vec1; typedef vec<2, u64, lowp> lowp_u64vec2; typedef vec<3, u64, lowp> lowp_u64vec3; typedef vec<4, u64, lowp> lowp_u64vec4; typedef vec<1, u64, mediump> mediump_u64vec1; typedef vec<2, u64, mediump> mediump_u64vec2; typedef vec<3, u64, mediump> mediump_u64vec3; typedef vec<4, u64, mediump> mediump_u64vec4; typedef vec<1, u64, highp> highp_u64vec1; typedef vec<2, u64, highp> highp_u64vec2; typedef vec<3, u64, highp> highp_u64vec3; typedef vec<4, u64, highp> highp_u64vec4; typedef vec<1, u64, defaultp> u64vec1; typedef vec<2, u64, defaultp> u64vec2; typedef vec<3, u64, defaultp> u64vec3; typedef vec<4, u64, defaultp> u64vec4; // Vector float typedef vec<1, float, lowp> lowp_vec1; typedef vec<2, float, lowp> lowp_vec2; typedef vec<3, float, lowp> lowp_vec3; typedef vec<4, float, lowp> lowp_vec4; typedef vec<1, float, mediump> mediump_vec1; typedef vec<2, float, mediump> mediump_vec2; typedef vec<3, float, mediump> mediump_vec3; typedef vec<4, float, mediump> mediump_vec4; typedef vec<1, float, highp> highp_vec1; typedef vec<2, float, highp> highp_vec2; typedef vec<3, float, highp> highp_vec3; typedef vec<4, float, highp> highp_vec4; typedef vec<1, float, defaultp> vec1; typedef vec<2, float, defaultp> vec2; typedef vec<3, float, defaultp> vec3; typedef vec<4, float, defaultp> vec4; typedef vec<1, float, lowp> lowp_fvec1; typedef vec<2, float, lowp> lowp_fvec2; typedef vec<3, float, lowp> lowp_fvec3; typedef vec<4, float, lowp> lowp_fvec4; typedef vec<1, float, mediump> mediump_fvec1; typedef vec<2, float, mediump> mediump_fvec2; typedef vec<3, float, mediump> mediump_fvec3; typedef vec<4, float, mediump> mediump_fvec4; typedef vec<1, float, highp> highp_fvec1; typedef vec<2, float, highp> highp_fvec2; typedef vec<3, float, highp> highp_fvec3; typedef vec<4, float, highp> highp_fvec4; typedef vec<1, f32, defaultp> fvec1; typedef vec<2, f32, defaultp> fvec2; typedef vec<3, f32, defaultp> fvec3; typedef vec<4, f32, defaultp> fvec4; typedef vec<1, f32, lowp> lowp_f32vec1; typedef vec<2, f32, lowp> lowp_f32vec2; typedef vec<3, f32, lowp> lowp_f32vec3; typedef vec<4, f32, lowp> lowp_f32vec4; typedef vec<1, f32, mediump> mediump_f32vec1; typedef vec<2, f32, mediump> mediump_f32vec2; typedef vec<3, f32, mediump> mediump_f32vec3; typedef vec<4, f32, mediump> mediump_f32vec4; typedef vec<1, f32, highp> highp_f32vec1; typedef vec<2, f32, highp> highp_f32vec2; typedef vec<3, f32, highp> highp_f32vec3; typedef vec<4, f32, highp> highp_f32vec4; typedef vec<1, f32, defaultp> f32vec1; typedef vec<2, f32, defaultp> f32vec2; typedef vec<3, f32, defaultp> f32vec3; typedef vec<4, f32, defaultp> f32vec4; typedef vec<1, f64, lowp> lowp_dvec1; typedef vec<2, f64, lowp> lowp_dvec2; typedef vec<3, f64, lowp> lowp_dvec3; typedef vec<4, f64, lowp> lowp_dvec4; typedef vec<1, f64, mediump> mediump_dvec1; typedef vec<2, f64, mediump> mediump_dvec2; typedef vec<3, f64, mediump> mediump_dvec3; typedef vec<4, f64, mediump> mediump_dvec4; typedef vec<1, f64, highp> highp_dvec1; typedef vec<2, f64, highp> highp_dvec2; typedef vec<3, f64, highp> highp_dvec3; typedef vec<4, f64, highp> highp_dvec4; typedef vec<1, f64, defaultp> dvec1; typedef vec<2, f64, defaultp> dvec2; typedef vec<3, f64, defaultp> dvec3; typedef vec<4, f64, defaultp> dvec4; typedef vec<1, f64, lowp> lowp_f64vec1; typedef vec<2, f64, lowp> lowp_f64vec2; typedef vec<3, f64, lowp> lowp_f64vec3; typedef vec<4, f64, lowp> lowp_f64vec4; typedef vec<1, f64, mediump> mediump_f64vec1; typedef vec<2, f64, mediump> mediump_f64vec2; typedef vec<3, f64, mediump> mediump_f64vec3; typedef vec<4, f64, mediump> mediump_f64vec4; typedef vec<1, f64, highp> highp_f64vec1; typedef vec<2, f64, highp> highp_f64vec2; typedef vec<3, f64, highp> highp_f64vec3; typedef vec<4, f64, highp> highp_f64vec4; typedef vec<1, f64, defaultp> f64vec1; typedef vec<2, f64, defaultp> f64vec2; typedef vec<3, f64, defaultp> f64vec3; typedef vec<4, f64, defaultp> f64vec4; // Matrix NxN typedef mat<2, 2, f32, lowp> lowp_mat2; typedef mat<3, 3, f32, lowp> lowp_mat3; typedef mat<4, 4, f32, lowp> lowp_mat4; typedef mat<2, 2, f32, mediump> mediump_mat2; typedef mat<3, 3, f32, mediump> mediump_mat3; typedef mat<4, 4, f32, mediump> mediump_mat4; typedef mat<2, 2, f32, highp> highp_mat2; typedef mat<3, 3, f32, highp> highp_mat3; typedef mat<4, 4, f32, highp> highp_mat4; typedef mat<2, 2, f32, defaultp> mat2; typedef mat<3, 3, f32, defaultp> mat3; typedef mat<4, 4, f32, defaultp> mat4; typedef mat<2, 2, f32, lowp> lowp_fmat2; typedef mat<3, 3, f32, lowp> lowp_fmat3; typedef mat<4, 4, f32, lowp> lowp_fmat4; typedef mat<2, 2, f32, mediump> mediump_fmat2; typedef mat<3, 3, f32, mediump> mediump_fmat3; typedef mat<4, 4, f32, mediump> mediump_fmat4; typedef mat<2, 2, f32, highp> highp_fmat2; typedef mat<3, 3, f32, highp> highp_fmat3; typedef mat<4, 4, f32, highp> highp_fmat4; typedef mat<2, 2, f32, defaultp> fmat2; typedef mat<3, 3, f32, defaultp> fmat3; typedef mat<4, 4, f32, defaultp> fmat4; typedef mat<2, 2, f32, lowp> lowp_f32mat2; typedef mat<3, 3, f32, lowp> lowp_f32mat3; typedef mat<4, 4, f32, lowp> lowp_f32mat4; typedef mat<2, 2, f32, mediump> mediump_f32mat2; typedef mat<3, 3, f32, mediump> mediump_f32mat3; typedef mat<4, 4, f32, mediump> mediump_f32mat4; typedef mat<2, 2, f32, highp> highp_f32mat2; typedef mat<3, 3, f32, highp> highp_f32mat3; typedef mat<4, 4, f32, highp> highp_f32mat4; typedef mat<2, 2, f32, defaultp> f32mat2; typedef mat<3, 3, f32, defaultp> f32mat3; typedef mat<4, 4, f32, defaultp> f32mat4; typedef mat<2, 2, f64, lowp> lowp_dmat2; typedef mat<3, 3, f64, lowp> lowp_dmat3; typedef mat<4, 4, f64, lowp> lowp_dmat4; typedef mat<2, 2, f64, mediump> mediump_dmat2; typedef mat<3, 3, f64, mediump> mediump_dmat3; typedef mat<4, 4, f64, mediump> mediump_dmat4; typedef mat<2, 2, f64, highp> highp_dmat2; typedef mat<3, 3, f64, highp> highp_dmat3; typedef mat<4, 4, f64, highp> highp_dmat4; typedef mat<2, 2, f64, defaultp> dmat2; typedef mat<3, 3, f64, defaultp> dmat3; typedef mat<4, 4, f64, defaultp> dmat4; typedef mat<2, 2, f64, lowp> lowp_f64mat2; typedef mat<3, 3, f64, lowp> lowp_f64mat3; typedef mat<4, 4, f64, lowp> lowp_f64mat4; typedef mat<2, 2, f64, mediump> mediump_f64mat2; typedef mat<3, 3, f64, mediump> mediump_f64mat3; typedef mat<4, 4, f64, mediump> mediump_f64mat4; typedef mat<2, 2, f64, highp> highp_f64mat2; typedef mat<3, 3, f64, highp> highp_f64mat3; typedef mat<4, 4, f64, highp> highp_f64mat4; typedef mat<2, 2, f64, defaultp> f64mat2; typedef mat<3, 3, f64, defaultp> f64mat3; typedef mat<4, 4, f64, defaultp> f64mat4; // Matrix MxN typedef mat<2, 2, f32, lowp> lowp_mat2x2; typedef mat<2, 3, f32, lowp> lowp_mat2x3; typedef mat<2, 4, f32, lowp> lowp_mat2x4; typedef mat<3, 2, f32, lowp> lowp_mat3x2; typedef mat<3, 3, f32, lowp> lowp_mat3x3; typedef mat<3, 4, f32, lowp> lowp_mat3x4; typedef mat<4, 2, f32, lowp> lowp_mat4x2; typedef mat<4, 3, f32, lowp> lowp_mat4x3; typedef mat<4, 4, f32, lowp> lowp_mat4x4; typedef mat<2, 2, f32, mediump> mediump_mat2x2; typedef mat<2, 3, f32, mediump> mediump_mat2x3; typedef mat<2, 4, f32, mediump> mediump_mat2x4; typedef mat<3, 2, f32, mediump> mediump_mat3x2; typedef mat<3, 3, f32, mediump> mediump_mat3x3; typedef mat<3, 4, f32, mediump> mediump_mat3x4; typedef mat<4, 2, f32, mediump> mediump_mat4x2; typedef mat<4, 3, f32, mediump> mediump_mat4x3; typedef mat<4, 4, f32, mediump> mediump_mat4x4; typedef mat<2, 2, f32, highp> highp_mat2x2; typedef mat<2, 3, f32, highp> highp_mat2x3; typedef mat<2, 4, f32, highp> highp_mat2x4; typedef mat<3, 2, f32, highp> highp_mat3x2; typedef mat<3, 3, f32, highp> highp_mat3x3; typedef mat<3, 4, f32, highp> highp_mat3x4; typedef mat<4, 2, f32, highp> highp_mat4x2; typedef mat<4, 3, f32, highp> highp_mat4x3; typedef mat<4, 4, f32, highp> highp_mat4x4; typedef mat<2, 2, f32, defaultp> mat2x2; typedef mat<3, 2, f32, defaultp> mat3x2; typedef mat<4, 2, f32, defaultp> mat4x2; typedef mat<2, 3, f32, defaultp> mat2x3; typedef mat<3, 3, f32, defaultp> mat3x3; typedef mat<4, 3, f32, defaultp> mat4x3; typedef mat<2, 4, f32, defaultp> mat2x4; typedef mat<3, 4, f32, defaultp> mat3x4; typedef mat<4, 4, f32, defaultp> mat4x4; typedef mat<2, 2, f32, lowp> lowp_fmat2x2; typedef mat<2, 3, f32, lowp> lowp_fmat2x3; typedef mat<2, 4, f32, lowp> lowp_fmat2x4; typedef mat<3, 2, f32, lowp> lowp_fmat3x2; typedef mat<3, 3, f32, lowp> lowp_fmat3x3; typedef mat<3, 4, f32, lowp> lowp_fmat3x4; typedef mat<4, 2, f32, lowp> lowp_fmat4x2; typedef mat<4, 3, f32, lowp> lowp_fmat4x3; typedef mat<4, 4, f32, lowp> lowp_fmat4x4; typedef mat<2, 2, f32, mediump> mediump_fmat2x2; typedef mat<2, 3, f32, mediump> mediump_fmat2x3; typedef mat<2, 4, f32, mediump> mediump_fmat2x4; typedef mat<3, 2, f32, mediump> mediump_fmat3x2; typedef mat<3, 3, f32, mediump> mediump_fmat3x3; typedef mat<3, 4, f32, mediump> mediump_fmat3x4; typedef mat<4, 2, f32, mediump> mediump_fmat4x2; typedef mat<4, 3, f32, mediump> mediump_fmat4x3; typedef mat<4, 4, f32, mediump> mediump_fmat4x4; typedef mat<2, 2, f32, highp> highp_fmat2x2; typedef mat<2, 3, f32, highp> highp_fmat2x3; typedef mat<2, 4, f32, highp> highp_fmat2x4; typedef mat<3, 2, f32, highp> highp_fmat3x2; typedef mat<3, 3, f32, highp> highp_fmat3x3; typedef mat<3, 4, f32, highp> highp_fmat3x4; typedef mat<4, 2, f32, highp> highp_fmat4x2; typedef mat<4, 3, f32, highp> highp_fmat4x3; typedef mat<4, 4, f32, highp> highp_fmat4x4; typedef mat<2, 2, f32, defaultp> fmat2x2; typedef mat<3, 2, f32, defaultp> fmat3x2; typedef mat<4, 2, f32, defaultp> fmat4x2; typedef mat<2, 3, f32, defaultp> fmat2x3; typedef mat<3, 3, f32, defaultp> fmat3x3; typedef mat<4, 3, f32, defaultp> fmat4x3; typedef mat<2, 4, f32, defaultp> fmat2x4; typedef mat<3, 4, f32, defaultp> fmat3x4; typedef mat<4, 4, f32, defaultp> fmat4x4; typedef mat<2, 2, f32, lowp> lowp_f32mat2x2; typedef mat<2, 3, f32, lowp> lowp_f32mat2x3; typedef mat<2, 4, f32, lowp> lowp_f32mat2x4; typedef mat<3, 2, f32, lowp> lowp_f32mat3x2; typedef mat<3, 3, f32, lowp> lowp_f32mat3x3; typedef mat<3, 4, f32, lowp> lowp_f32mat3x4; typedef mat<4, 2, f32, lowp> lowp_f32mat4x2; typedef mat<4, 3, f32, lowp> lowp_f32mat4x3; typedef mat<4, 4, f32, lowp> lowp_f32mat4x4; typedef mat<2, 2, f32, mediump> mediump_f32mat2x2; typedef mat<2, 3, f32, mediump> mediump_f32mat2x3; typedef mat<2, 4, f32, mediump> mediump_f32mat2x4; typedef mat<3, 2, f32, mediump> mediump_f32mat3x2; typedef mat<3, 3, f32, mediump> mediump_f32mat3x3; typedef mat<3, 4, f32, mediump> mediump_f32mat3x4; typedef mat<4, 2, f32, mediump> mediump_f32mat4x2; typedef mat<4, 3, f32, mediump> mediump_f32mat4x3; typedef mat<4, 4, f32, mediump> mediump_f32mat4x4; typedef mat<2, 2, f32, highp> highp_f32mat2x2; typedef mat<2, 3, f32, highp> highp_f32mat2x3; typedef mat<2, 4, f32, highp> highp_f32mat2x4; typedef mat<3, 2, f32, highp> highp_f32mat3x2; typedef mat<3, 3, f32, highp> highp_f32mat3x3; typedef mat<3, 4, f32, highp> highp_f32mat3x4; typedef mat<4, 2, f32, highp> highp_f32mat4x2; typedef mat<4, 3, f32, highp> highp_f32mat4x3; typedef mat<4, 4, f32, highp> highp_f32mat4x4; typedef mat<2, 2, f32, defaultp> f32mat2x2; typedef mat<3, 2, f32, defaultp> f32mat3x2; typedef mat<4, 2, f32, defaultp> f32mat4x2; typedef mat<2, 3, f32, defaultp> f32mat2x3; typedef mat<3, 3, f32, defaultp> f32mat3x3; typedef mat<4, 3, f32, defaultp> f32mat4x3; typedef mat<2, 4, f32, defaultp> f32mat2x4; typedef mat<3, 4, f32, defaultp> f32mat3x4; typedef mat<4, 4, f32, defaultp> f32mat4x4; typedef mat<2, 2, double, lowp> lowp_dmat2x2; typedef mat<2, 3, double, lowp> lowp_dmat2x3; typedef mat<2, 4, double, lowp> lowp_dmat2x4; typedef mat<3, 2, double, lowp> lowp_dmat3x2; typedef mat<3, 3, double, lowp> lowp_dmat3x3; typedef mat<3, 4, double, lowp> lowp_dmat3x4; typedef mat<4, 2, double, lowp> lowp_dmat4x2; typedef mat<4, 3, double, lowp> lowp_dmat4x3; typedef mat<4, 4, double, lowp> lowp_dmat4x4; typedef mat<2, 2, double, mediump> mediump_dmat2x2; typedef mat<2, 3, double, mediump> mediump_dmat2x3; typedef mat<2, 4, double, mediump> mediump_dmat2x4; typedef mat<3, 2, double, mediump> mediump_dmat3x2; typedef mat<3, 3, double, mediump> mediump_dmat3x3; typedef mat<3, 4, double, mediump> mediump_dmat3x4; typedef mat<4, 2, double, mediump> mediump_dmat4x2; typedef mat<4, 3, double, mediump> mediump_dmat4x3; typedef mat<4, 4, double, mediump> mediump_dmat4x4; typedef mat<2, 2, double, highp> highp_dmat2x2; typedef mat<2, 3, double, highp> highp_dmat2x3; typedef mat<2, 4, double, highp> highp_dmat2x4; typedef mat<3, 2, double, highp> highp_dmat3x2; typedef mat<3, 3, double, highp> highp_dmat3x3; typedef mat<3, 4, double, highp> highp_dmat3x4; typedef mat<4, 2, double, highp> highp_dmat4x2; typedef mat<4, 3, double, highp> highp_dmat4x3; typedef mat<4, 4, double, highp> highp_dmat4x4; typedef mat<2, 2, double, defaultp> dmat2x2; typedef mat<3, 2, double, defaultp> dmat3x2; typedef mat<4, 2, double, defaultp> dmat4x2; typedef mat<2, 3, double, defaultp> dmat2x3; typedef mat<3, 3, double, defaultp> dmat3x3; typedef mat<4, 3, double, defaultp> dmat4x3; typedef mat<2, 4, double, defaultp> dmat2x4; typedef mat<3, 4, double, defaultp> dmat3x4; typedef mat<4, 4, double, defaultp> dmat4x4; typedef mat<2, 2, f64, lowp> lowp_f64mat2x2; typedef mat<2, 3, f64, lowp> lowp_f64mat2x3; typedef mat<2, 4, f64, lowp> lowp_f64mat2x4; typedef mat<3, 2, f64, lowp> lowp_f64mat3x2; typedef mat<3, 3, f64, lowp> lowp_f64mat3x3; typedef mat<3, 4, f64, lowp> lowp_f64mat3x4; typedef mat<4, 2, f64, lowp> lowp_f64mat4x2; typedef mat<4, 3, f64, lowp> lowp_f64mat4x3; typedef mat<4, 4, f64, lowp> lowp_f64mat4x4; typedef mat<2, 2, f64, mediump> mediump_f64mat2x2; typedef mat<2, 3, f64, mediump> mediump_f64mat2x3; typedef mat<2, 4, f64, mediump> mediump_f64mat2x4; typedef mat<3, 2, f64, mediump> mediump_f64mat3x2; typedef mat<3, 3, f64, mediump> mediump_f64mat3x3; typedef mat<3, 4, f64, mediump> mediump_f64mat3x4; typedef mat<4, 2, f64, mediump> mediump_f64mat4x2; typedef mat<4, 3, f64, mediump> mediump_f64mat4x3; typedef mat<4, 4, f64, mediump> mediump_f64mat4x4; typedef mat<2, 2, f64, highp> highp_f64mat2x2; typedef mat<2, 3, f64, highp> highp_f64mat2x3; typedef mat<2, 4, f64, highp> highp_f64mat2x4; typedef mat<3, 2, f64, highp> highp_f64mat3x2; typedef mat<3, 3, f64, highp> highp_f64mat3x3; typedef mat<3, 4, f64, highp> highp_f64mat3x4; typedef mat<4, 2, f64, highp> highp_f64mat4x2; typedef mat<4, 3, f64, highp> highp_f64mat4x3; typedef mat<4, 4, f64, highp> highp_f64mat4x4; typedef mat<2, 2, f64, defaultp> f64mat2x2; typedef mat<3, 2, f64, defaultp> f64mat3x2; typedef mat<4, 2, f64, defaultp> f64mat4x2; typedef mat<2, 3, f64, defaultp> f64mat2x3; typedef mat<3, 3, f64, defaultp> f64mat3x3; typedef mat<4, 3, f64, defaultp> f64mat4x3; typedef mat<2, 4, f64, defaultp> f64mat2x4; typedef mat<3, 4, f64, defaultp> f64mat3x4; typedef mat<4, 4, f64, defaultp> f64mat4x4; // Quaternion typedef qua lowp_quat; typedef qua mediump_quat; typedef qua highp_quat; typedef qua quat; typedef qua lowp_fquat; typedef qua mediump_fquat; typedef qua highp_fquat; typedef qua fquat; typedef qua lowp_f32quat; typedef qua mediump_f32quat; typedef qua highp_f32quat; typedef qua f32quat; typedef qua lowp_dquat; typedef qua mediump_dquat; typedef qua highp_dquat; typedef qua dquat; typedef qua lowp_f64quat; typedef qua mediump_f64quat; typedef qua highp_f64quat; typedef qua f64quat; }//namespace glm ================================================ FILE: libraries/glm/geometric.hpp ================================================ /// @ref core /// @file glm/geometric.hpp /// /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions /// /// @defgroup core_func_geometric Geometric functions /// @ingroup core /// /// These operate on vectors as vectors, not component-wise. /// /// Include to use these core features. #pragma once #include "detail/type_vec3.hpp" namespace glm { /// @addtogroup core_func_geometric /// @{ /// Returns the length of x, i.e., sqrt(x * x). /// /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// @tparam T Floating-point scalar types. /// /// @see GLSL length man page /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions template GLM_FUNC_DECL T length(vec const& x); /// Returns the distance betwwen p0 and p1, i.e., length(p0 - p1). /// /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// @tparam T Floating-point scalar types. /// /// @see GLSL distance man page /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions template GLM_FUNC_DECL T distance(vec const& p0, vec const& p1); /// Returns the dot product of x and y, i.e., result = x * y. /// /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// @tparam T Floating-point scalar types. /// /// @see GLSL dot man page /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions template GLM_FUNC_DECL T dot(vec const& x, vec const& y); /// Returns the cross product of x and y. /// /// @tparam T Floating-point scalar types. /// /// @see GLSL cross man page /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions template GLM_FUNC_DECL vec<3, T, Q> cross(vec<3, T, Q> const& x, vec<3, T, Q> const& y); /// Returns a vector in the same direction as x but with length of 1. /// According to issue 10 GLSL 1.10 specification, if length(x) == 0 then result is undefined and generate an error. /// /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// @tparam T Floating-point scalar types. /// /// @see GLSL normalize man page /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions template GLM_FUNC_DECL vec normalize(vec const& x); /// If dot(Nref, I) < 0.0, return N, otherwise, return -N. /// /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// @tparam T Floating-point scalar types. /// /// @see GLSL faceforward man page /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions template GLM_FUNC_DECL vec faceforward( vec const& N, vec const& I, vec const& Nref); /// For the incident vector I and surface orientation N, /// returns the reflection direction : result = I - 2.0 * dot(N, I) * N. /// /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// @tparam T Floating-point scalar types. /// /// @see GLSL reflect man page /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions template GLM_FUNC_DECL vec reflect( vec const& I, vec const& N); /// For the incident vector I and surface normal N, /// and the ratio of indices of refraction eta, /// return the refraction vector. /// /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// @tparam T Floating-point scalar types. /// /// @see GLSL refract man page /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions template GLM_FUNC_DECL vec refract( vec const& I, vec const& N, T eta); /// @} }//namespace glm #include "detail/func_geometric.inl" ================================================ FILE: libraries/glm/glm.hpp ================================================ /// @ref core /// @file glm/glm.hpp /// /// @defgroup core Core features /// /// @brief Features that implement in C++ the GLSL specification as closely as possible. /// /// The GLM core consists of C++ types that mirror GLSL types and /// C++ functions that mirror the GLSL functions. /// /// The best documentation for GLM Core is the current GLSL specification, /// version 4.2 /// (pdf file). /// /// GLM core functionalities require to be included to be used. /// /// /// @defgroup core_vector Vector types /// /// Vector types of two to four components with an exhaustive set of operators. /// /// @ingroup core /// /// /// @defgroup core_vector_precision Vector types with precision qualifiers /// /// @brief Vector types with precision qualifiers which may result in various precision in term of ULPs /// /// GLSL allows defining qualifiers for particular variables. /// With OpenGL's GLSL, these qualifiers have no effect; they are there for compatibility, /// with OpenGL ES's GLSL, these qualifiers do have an effect. /// /// C++ has no language equivalent to qualifier qualifiers. So GLM provides the next-best thing: /// a number of typedefs that use a particular qualifier. /// /// None of these types make any guarantees about the actual qualifier used. /// /// @ingroup core /// /// /// @defgroup core_matrix Matrix types /// /// Matrix types of with C columns and R rows where C and R are values between 2 to 4 included. /// These types have exhaustive sets of operators. /// /// @ingroup core /// /// /// @defgroup core_matrix_precision Matrix types with precision qualifiers /// /// @brief Matrix types with precision qualifiers which may result in various precision in term of ULPs /// /// GLSL allows defining qualifiers for particular variables. /// With OpenGL's GLSL, these qualifiers have no effect; they are there for compatibility, /// with OpenGL ES's GLSL, these qualifiers do have an effect. /// /// C++ has no language equivalent to qualifier qualifiers. So GLM provides the next-best thing: /// a number of typedefs that use a particular qualifier. /// /// None of these types make any guarantees about the actual qualifier used. /// /// @ingroup core /// /// /// @defgroup ext Stable extensions /// /// @brief Additional features not specified by GLSL specification. /// /// EXT extensions are fully tested and documented. /// /// Even if it's highly unrecommended, it's possible to include all the extensions at once by /// including . Otherwise, each extension needs to be included a specific file. /// /// /// @defgroup gtc Recommended extensions /// /// @brief Additional features not specified by GLSL specification. /// /// GTC extensions aim to be stable with tests and documentation. /// /// Even if it's highly unrecommended, it's possible to include all the extensions at once by /// including . Otherwise, each extension needs to be included a specific file. /// /// /// @defgroup gtx Experimental extensions /// /// @brief Experimental features not specified by GLSL specification. /// /// Experimental extensions are useful functions and types, but the development of /// their API and functionality is not necessarily stable. They can change /// substantially between versions. Backwards compatibility is not much of an issue /// for them. /// /// Even if it's highly unrecommended, it's possible to include all the extensions /// at once by including . Otherwise, each extension needs to be /// included a specific file. /// /// @mainpage OpenGL Mathematics (GLM) /// - Website: glm.g-truc.net /// - GLM API documentation /// - GLM Manual #include "detail/_fixes.hpp" #include "detail/setup.hpp" #pragma once #include #include #include #include #include #include "fwd.hpp" #include "vec2.hpp" #include "vec3.hpp" #include "vec4.hpp" #include "mat2x2.hpp" #include "mat2x3.hpp" #include "mat2x4.hpp" #include "mat3x2.hpp" #include "mat3x3.hpp" #include "mat3x4.hpp" #include "mat4x2.hpp" #include "mat4x3.hpp" #include "mat4x4.hpp" #include "trigonometric.hpp" #include "exponential.hpp" #include "common.hpp" #include "packing.hpp" #include "geometric.hpp" #include "matrix.hpp" #include "vector_relational.hpp" #include "integer.hpp" ================================================ FILE: libraries/glm/gtc/bitfield.hpp ================================================ /// @ref gtc_bitfield /// @file glm/gtc/bitfield.hpp /// /// @see core (dependence) /// @see gtc_bitfield (dependence) /// /// @defgroup gtc_bitfield GLM_GTC_bitfield /// @ingroup gtc /// /// Include to use the features of this extension. /// /// Allow to perform bit operations on integer values #include "../detail/setup.hpp" #pragma once // Dependencies #include "../ext/scalar_int_sized.hpp" #include "../ext/scalar_uint_sized.hpp" #include "../detail/qualifier.hpp" #include "../detail/_vectorize.hpp" #include "type_precision.hpp" #include #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_GTC_bitfield extension included") #endif namespace glm { /// @addtogroup gtc_bitfield /// @{ /// Build a mask of 'count' bits /// /// @see gtc_bitfield template GLM_FUNC_DECL genIUType mask(genIUType Bits); /// Build a mask of 'count' bits /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Signed and unsigned integer scalar types /// @tparam Q Value from qualifier enum /// /// @see gtc_bitfield template GLM_FUNC_DECL vec mask(vec const& v); /// Rotate all bits to the right. All the bits dropped in the right side are inserted back on the left side. /// /// @see gtc_bitfield template GLM_FUNC_DECL genIUType bitfieldRotateRight(genIUType In, int Shift); /// Rotate all bits to the right. All the bits dropped in the right side are inserted back on the left side. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Signed and unsigned integer scalar types /// @tparam Q Value from qualifier enum /// /// @see gtc_bitfield template GLM_FUNC_DECL vec bitfieldRotateRight(vec const& In, int Shift); /// Rotate all bits to the left. All the bits dropped in the left side are inserted back on the right side. /// /// @see gtc_bitfield template GLM_FUNC_DECL genIUType bitfieldRotateLeft(genIUType In, int Shift); /// Rotate all bits to the left. All the bits dropped in the left side are inserted back on the right side. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Signed and unsigned integer scalar types /// @tparam Q Value from qualifier enum /// /// @see gtc_bitfield template GLM_FUNC_DECL vec bitfieldRotateLeft(vec const& In, int Shift); /// Set to 1 a range of bits. /// /// @see gtc_bitfield template GLM_FUNC_DECL genIUType bitfieldFillOne(genIUType Value, int FirstBit, int BitCount); /// Set to 1 a range of bits. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Signed and unsigned integer scalar types /// @tparam Q Value from qualifier enum /// /// @see gtc_bitfield template GLM_FUNC_DECL vec bitfieldFillOne(vec const& Value, int FirstBit, int BitCount); /// Set to 0 a range of bits. /// /// @see gtc_bitfield template GLM_FUNC_DECL genIUType bitfieldFillZero(genIUType Value, int FirstBit, int BitCount); /// Set to 0 a range of bits. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Signed and unsigned integer scalar types /// @tparam Q Value from qualifier enum /// /// @see gtc_bitfield template GLM_FUNC_DECL vec bitfieldFillZero(vec const& Value, int FirstBit, int BitCount); /// Interleaves the bits of x and y. /// The first bit is the first bit of x followed by the first bit of y. /// The other bits are interleaved following the previous sequence. /// /// @see gtc_bitfield GLM_FUNC_DECL int16 bitfieldInterleave(int8 x, int8 y); /// Interleaves the bits of x and y. /// The first bit is the first bit of x followed by the first bit of y. /// The other bits are interleaved following the previous sequence. /// /// @see gtc_bitfield GLM_FUNC_DECL uint16 bitfieldInterleave(uint8 x, uint8 y); /// Interleaves the bits of x and y. /// The first bit is the first bit of v.x followed by the first bit of v.y. /// The other bits are interleaved following the previous sequence. /// /// @see gtc_bitfield GLM_FUNC_DECL uint16 bitfieldInterleave(u8vec2 const& v); /// Deinterleaves the bits of x. /// /// @see gtc_bitfield GLM_FUNC_DECL glm::u8vec2 bitfieldDeinterleave(glm::uint16 x); /// Interleaves the bits of x and y. /// The first bit is the first bit of x followed by the first bit of y. /// The other bits are interleaved following the previous sequence. /// /// @see gtc_bitfield GLM_FUNC_DECL int32 bitfieldInterleave(int16 x, int16 y); /// Interleaves the bits of x and y. /// The first bit is the first bit of x followed by the first bit of y. /// The other bits are interleaved following the previous sequence. /// /// @see gtc_bitfield GLM_FUNC_DECL uint32 bitfieldInterleave(uint16 x, uint16 y); /// Interleaves the bits of x and y. /// The first bit is the first bit of v.x followed by the first bit of v.y. /// The other bits are interleaved following the previous sequence. /// /// @see gtc_bitfield GLM_FUNC_DECL uint32 bitfieldInterleave(u16vec2 const& v); /// Deinterleaves the bits of x. /// /// @see gtc_bitfield GLM_FUNC_DECL glm::u16vec2 bitfieldDeinterleave(glm::uint32 x); /// Interleaves the bits of x and y. /// The first bit is the first bit of x followed by the first bit of y. /// The other bits are interleaved following the previous sequence. /// /// @see gtc_bitfield GLM_FUNC_DECL int64 bitfieldInterleave(int32 x, int32 y); /// Interleaves the bits of x and y. /// The first bit is the first bit of x followed by the first bit of y. /// The other bits are interleaved following the previous sequence. /// /// @see gtc_bitfield GLM_FUNC_DECL uint64 bitfieldInterleave(uint32 x, uint32 y); /// Interleaves the bits of x and y. /// The first bit is the first bit of v.x followed by the first bit of v.y. /// The other bits are interleaved following the previous sequence. /// /// @see gtc_bitfield GLM_FUNC_DECL uint64 bitfieldInterleave(u32vec2 const& v); /// Deinterleaves the bits of x. /// /// @see gtc_bitfield GLM_FUNC_DECL glm::u32vec2 bitfieldDeinterleave(glm::uint64 x); /// Interleaves the bits of x, y and z. /// The first bit is the first bit of x followed by the first bit of y and the first bit of z. /// The other bits are interleaved following the previous sequence. /// /// @see gtc_bitfield GLM_FUNC_DECL int32 bitfieldInterleave(int8 x, int8 y, int8 z); /// Interleaves the bits of x, y and z. /// The first bit is the first bit of x followed by the first bit of y and the first bit of z. /// The other bits are interleaved following the previous sequence. /// /// @see gtc_bitfield GLM_FUNC_DECL uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z); /// Interleaves the bits of x, y and z. /// The first bit is the first bit of x followed by the first bit of y and the first bit of z. /// The other bits are interleaved following the previous sequence. /// /// @see gtc_bitfield GLM_FUNC_DECL int64 bitfieldInterleave(int16 x, int16 y, int16 z); /// Interleaves the bits of x, y and z. /// The first bit is the first bit of x followed by the first bit of y and the first bit of z. /// The other bits are interleaved following the previous sequence. /// /// @see gtc_bitfield GLM_FUNC_DECL uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z); /// Interleaves the bits of x, y and z. /// The first bit is the first bit of x followed by the first bit of y and the first bit of z. /// The other bits are interleaved following the previous sequence. /// /// @see gtc_bitfield GLM_FUNC_DECL int64 bitfieldInterleave(int32 x, int32 y, int32 z); /// Interleaves the bits of x, y and z. /// The first bit is the first bit of x followed by the first bit of y and the first bit of z. /// The other bits are interleaved following the previous sequence. /// /// @see gtc_bitfield GLM_FUNC_DECL uint64 bitfieldInterleave(uint32 x, uint32 y, uint32 z); /// Interleaves the bits of x, y, z and w. /// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. /// The other bits are interleaved following the previous sequence. /// /// @see gtc_bitfield GLM_FUNC_DECL int32 bitfieldInterleave(int8 x, int8 y, int8 z, int8 w); /// Interleaves the bits of x, y, z and w. /// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. /// The other bits are interleaved following the previous sequence. /// /// @see gtc_bitfield GLM_FUNC_DECL uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z, uint8 w); /// Interleaves the bits of x, y, z and w. /// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. /// The other bits are interleaved following the previous sequence. /// /// @see gtc_bitfield GLM_FUNC_DECL int64 bitfieldInterleave(int16 x, int16 y, int16 z, int16 w); /// Interleaves the bits of x, y, z and w. /// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. /// The other bits are interleaved following the previous sequence. /// /// @see gtc_bitfield GLM_FUNC_DECL uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z, uint16 w); /// @} } //namespace glm #include "bitfield.inl" ================================================ FILE: libraries/glm/gtc/bitfield.inl ================================================ /// @ref gtc_bitfield #include "../simd/integer.h" namespace glm{ namespace detail { template GLM_FUNC_DECL RET bitfieldInterleave(PARAM x, PARAM y); template GLM_FUNC_DECL RET bitfieldInterleave(PARAM x, PARAM y, PARAM z); template GLM_FUNC_DECL RET bitfieldInterleave(PARAM x, PARAM y, PARAM z, PARAM w); template<> GLM_FUNC_QUALIFIER glm::uint16 bitfieldInterleave(glm::uint8 x, glm::uint8 y) { glm::uint16 REG1(x); glm::uint16 REG2(y); REG1 = ((REG1 << 4) | REG1) & static_cast(0x0F0F); REG2 = ((REG2 << 4) | REG2) & static_cast(0x0F0F); REG1 = ((REG1 << 2) | REG1) & static_cast(0x3333); REG2 = ((REG2 << 2) | REG2) & static_cast(0x3333); REG1 = ((REG1 << 1) | REG1) & static_cast(0x5555); REG2 = ((REG2 << 1) | REG2) & static_cast(0x5555); return REG1 | static_cast(REG2 << 1); } template<> GLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave(glm::uint16 x, glm::uint16 y) { glm::uint32 REG1(x); glm::uint32 REG2(y); REG1 = ((REG1 << 8) | REG1) & static_cast(0x00FF00FF); REG2 = ((REG2 << 8) | REG2) & static_cast(0x00FF00FF); REG1 = ((REG1 << 4) | REG1) & static_cast(0x0F0F0F0F); REG2 = ((REG2 << 4) | REG2) & static_cast(0x0F0F0F0F); REG1 = ((REG1 << 2) | REG1) & static_cast(0x33333333); REG2 = ((REG2 << 2) | REG2) & static_cast(0x33333333); REG1 = ((REG1 << 1) | REG1) & static_cast(0x55555555); REG2 = ((REG2 << 1) | REG2) & static_cast(0x55555555); return REG1 | (REG2 << 1); } template<> GLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint32 x, glm::uint32 y) { glm::uint64 REG1(x); glm::uint64 REG2(y); REG1 = ((REG1 << 16) | REG1) & static_cast(0x0000FFFF0000FFFFull); REG2 = ((REG2 << 16) | REG2) & static_cast(0x0000FFFF0000FFFFull); REG1 = ((REG1 << 8) | REG1) & static_cast(0x00FF00FF00FF00FFull); REG2 = ((REG2 << 8) | REG2) & static_cast(0x00FF00FF00FF00FFull); REG1 = ((REG1 << 4) | REG1) & static_cast(0x0F0F0F0F0F0F0F0Full); REG2 = ((REG2 << 4) | REG2) & static_cast(0x0F0F0F0F0F0F0F0Full); REG1 = ((REG1 << 2) | REG1) & static_cast(0x3333333333333333ull); REG2 = ((REG2 << 2) | REG2) & static_cast(0x3333333333333333ull); REG1 = ((REG1 << 1) | REG1) & static_cast(0x5555555555555555ull); REG2 = ((REG2 << 1) | REG2) & static_cast(0x5555555555555555ull); return REG1 | (REG2 << 1); } template<> GLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave(glm::uint8 x, glm::uint8 y, glm::uint8 z) { glm::uint32 REG1(x); glm::uint32 REG2(y); glm::uint32 REG3(z); REG1 = ((REG1 << 16) | REG1) & static_cast(0xFF0000FFu); REG2 = ((REG2 << 16) | REG2) & static_cast(0xFF0000FFu); REG3 = ((REG3 << 16) | REG3) & static_cast(0xFF0000FFu); REG1 = ((REG1 << 8) | REG1) & static_cast(0x0F00F00Fu); REG2 = ((REG2 << 8) | REG2) & static_cast(0x0F00F00Fu); REG3 = ((REG3 << 8) | REG3) & static_cast(0x0F00F00Fu); REG1 = ((REG1 << 4) | REG1) & static_cast(0xC30C30C3u); REG2 = ((REG2 << 4) | REG2) & static_cast(0xC30C30C3u); REG3 = ((REG3 << 4) | REG3) & static_cast(0xC30C30C3u); REG1 = ((REG1 << 2) | REG1) & static_cast(0x49249249u); REG2 = ((REG2 << 2) | REG2) & static_cast(0x49249249u); REG3 = ((REG3 << 2) | REG3) & static_cast(0x49249249u); return REG1 | (REG2 << 1) | (REG3 << 2); } template<> GLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint16 x, glm::uint16 y, glm::uint16 z) { glm::uint64 REG1(x); glm::uint64 REG2(y); glm::uint64 REG3(z); REG1 = ((REG1 << 32) | REG1) & static_cast(0xFFFF00000000FFFFull); REG2 = ((REG2 << 32) | REG2) & static_cast(0xFFFF00000000FFFFull); REG3 = ((REG3 << 32) | REG3) & static_cast(0xFFFF00000000FFFFull); REG1 = ((REG1 << 16) | REG1) & static_cast(0x00FF0000FF0000FFull); REG2 = ((REG2 << 16) | REG2) & static_cast(0x00FF0000FF0000FFull); REG3 = ((REG3 << 16) | REG3) & static_cast(0x00FF0000FF0000FFull); REG1 = ((REG1 << 8) | REG1) & static_cast(0xF00F00F00F00F00Full); REG2 = ((REG2 << 8) | REG2) & static_cast(0xF00F00F00F00F00Full); REG3 = ((REG3 << 8) | REG3) & static_cast(0xF00F00F00F00F00Full); REG1 = ((REG1 << 4) | REG1) & static_cast(0x30C30C30C30C30C3ull); REG2 = ((REG2 << 4) | REG2) & static_cast(0x30C30C30C30C30C3ull); REG3 = ((REG3 << 4) | REG3) & static_cast(0x30C30C30C30C30C3ull); REG1 = ((REG1 << 2) | REG1) & static_cast(0x9249249249249249ull); REG2 = ((REG2 << 2) | REG2) & static_cast(0x9249249249249249ull); REG3 = ((REG3 << 2) | REG3) & static_cast(0x9249249249249249ull); return REG1 | (REG2 << 1) | (REG3 << 2); } template<> GLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint32 x, glm::uint32 y, glm::uint32 z) { glm::uint64 REG1(x); glm::uint64 REG2(y); glm::uint64 REG3(z); REG1 = ((REG1 << 32) | REG1) & static_cast(0xFFFF00000000FFFFull); REG2 = ((REG2 << 32) | REG2) & static_cast(0xFFFF00000000FFFFull); REG3 = ((REG3 << 32) | REG3) & static_cast(0xFFFF00000000FFFFull); REG1 = ((REG1 << 16) | REG1) & static_cast(0x00FF0000FF0000FFull); REG2 = ((REG2 << 16) | REG2) & static_cast(0x00FF0000FF0000FFull); REG3 = ((REG3 << 16) | REG3) & static_cast(0x00FF0000FF0000FFull); REG1 = ((REG1 << 8) | REG1) & static_cast(0xF00F00F00F00F00Full); REG2 = ((REG2 << 8) | REG2) & static_cast(0xF00F00F00F00F00Full); REG3 = ((REG3 << 8) | REG3) & static_cast(0xF00F00F00F00F00Full); REG1 = ((REG1 << 4) | REG1) & static_cast(0x30C30C30C30C30C3ull); REG2 = ((REG2 << 4) | REG2) & static_cast(0x30C30C30C30C30C3ull); REG3 = ((REG3 << 4) | REG3) & static_cast(0x30C30C30C30C30C3ull); REG1 = ((REG1 << 2) | REG1) & static_cast(0x9249249249249249ull); REG2 = ((REG2 << 2) | REG2) & static_cast(0x9249249249249249ull); REG3 = ((REG3 << 2) | REG3) & static_cast(0x9249249249249249ull); return REG1 | (REG2 << 1) | (REG3 << 2); } template<> GLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave(glm::uint8 x, glm::uint8 y, glm::uint8 z, glm::uint8 w) { glm::uint32 REG1(x); glm::uint32 REG2(y); glm::uint32 REG3(z); glm::uint32 REG4(w); REG1 = ((REG1 << 12) | REG1) & static_cast(0x000F000Fu); REG2 = ((REG2 << 12) | REG2) & static_cast(0x000F000Fu); REG3 = ((REG3 << 12) | REG3) & static_cast(0x000F000Fu); REG4 = ((REG4 << 12) | REG4) & static_cast(0x000F000Fu); REG1 = ((REG1 << 6) | REG1) & static_cast(0x03030303u); REG2 = ((REG2 << 6) | REG2) & static_cast(0x03030303u); REG3 = ((REG3 << 6) | REG3) & static_cast(0x03030303u); REG4 = ((REG4 << 6) | REG4) & static_cast(0x03030303u); REG1 = ((REG1 << 3) | REG1) & static_cast(0x11111111u); REG2 = ((REG2 << 3) | REG2) & static_cast(0x11111111u); REG3 = ((REG3 << 3) | REG3) & static_cast(0x11111111u); REG4 = ((REG4 << 3) | REG4) & static_cast(0x11111111u); return REG1 | (REG2 << 1) | (REG3 << 2) | (REG4 << 3); } template<> GLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint16 x, glm::uint16 y, glm::uint16 z, glm::uint16 w) { glm::uint64 REG1(x); glm::uint64 REG2(y); glm::uint64 REG3(z); glm::uint64 REG4(w); REG1 = ((REG1 << 24) | REG1) & static_cast(0x000000FF000000FFull); REG2 = ((REG2 << 24) | REG2) & static_cast(0x000000FF000000FFull); REG3 = ((REG3 << 24) | REG3) & static_cast(0x000000FF000000FFull); REG4 = ((REG4 << 24) | REG4) & static_cast(0x000000FF000000FFull); REG1 = ((REG1 << 12) | REG1) & static_cast(0x000F000F000F000Full); REG2 = ((REG2 << 12) | REG2) & static_cast(0x000F000F000F000Full); REG3 = ((REG3 << 12) | REG3) & static_cast(0x000F000F000F000Full); REG4 = ((REG4 << 12) | REG4) & static_cast(0x000F000F000F000Full); REG1 = ((REG1 << 6) | REG1) & static_cast(0x0303030303030303ull); REG2 = ((REG2 << 6) | REG2) & static_cast(0x0303030303030303ull); REG3 = ((REG3 << 6) | REG3) & static_cast(0x0303030303030303ull); REG4 = ((REG4 << 6) | REG4) & static_cast(0x0303030303030303ull); REG1 = ((REG1 << 3) | REG1) & static_cast(0x1111111111111111ull); REG2 = ((REG2 << 3) | REG2) & static_cast(0x1111111111111111ull); REG3 = ((REG3 << 3) | REG3) & static_cast(0x1111111111111111ull); REG4 = ((REG4 << 3) | REG4) & static_cast(0x1111111111111111ull); return REG1 | (REG2 << 1) | (REG3 << 2) | (REG4 << 3); } }//namespace detail template GLM_FUNC_QUALIFIER genIUType mask(genIUType Bits) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'mask' accepts only integer values"); return Bits >= sizeof(genIUType) * 8 ? ~static_cast(0) : (static_cast(1) << Bits) - static_cast(1); } template GLM_FUNC_QUALIFIER vec mask(vec const& v) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'mask' accepts only integer values"); return detail::functor1::call(mask, v); } template GLM_FUNC_QUALIFIER genIType bitfieldRotateRight(genIType In, int Shift) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldRotateRight' accepts only integer values"); int const BitSize = static_cast(sizeof(genIType) * 8); return (In << static_cast(Shift)) | (In >> static_cast(BitSize - Shift)); } template GLM_FUNC_QUALIFIER vec bitfieldRotateRight(vec const& In, int Shift) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldRotateRight' accepts only integer values"); int const BitSize = static_cast(sizeof(T) * 8); return (In << static_cast(Shift)) | (In >> static_cast(BitSize - Shift)); } template GLM_FUNC_QUALIFIER genIType bitfieldRotateLeft(genIType In, int Shift) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldRotateLeft' accepts only integer values"); int const BitSize = static_cast(sizeof(genIType) * 8); return (In >> static_cast(Shift)) | (In << static_cast(BitSize - Shift)); } template GLM_FUNC_QUALIFIER vec bitfieldRotateLeft(vec const& In, int Shift) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldRotateLeft' accepts only integer values"); int const BitSize = static_cast(sizeof(T) * 8); return (In >> static_cast(Shift)) | (In << static_cast(BitSize - Shift)); } template GLM_FUNC_QUALIFIER genIUType bitfieldFillOne(genIUType Value, int FirstBit, int BitCount) { return Value | static_cast(mask(BitCount) << FirstBit); } template GLM_FUNC_QUALIFIER vec bitfieldFillOne(vec const& Value, int FirstBit, int BitCount) { return Value | static_cast(mask(BitCount) << FirstBit); } template GLM_FUNC_QUALIFIER genIUType bitfieldFillZero(genIUType Value, int FirstBit, int BitCount) { return Value & static_cast(~(mask(BitCount) << FirstBit)); } template GLM_FUNC_QUALIFIER vec bitfieldFillZero(vec const& Value, int FirstBit, int BitCount) { return Value & static_cast(~(mask(BitCount) << FirstBit)); } GLM_FUNC_QUALIFIER int16 bitfieldInterleave(int8 x, int8 y) { union sign8 { int8 i; uint8 u; } sign_x, sign_y; union sign16 { int16 i; uint16 u; } result; sign_x.i = x; sign_y.i = y; result.u = bitfieldInterleave(sign_x.u, sign_y.u); return result.i; } GLM_FUNC_QUALIFIER uint16 bitfieldInterleave(uint8 x, uint8 y) { return detail::bitfieldInterleave(x, y); } GLM_FUNC_QUALIFIER uint16 bitfieldInterleave(u8vec2 const& v) { return detail::bitfieldInterleave(v.x, v.y); } GLM_FUNC_QUALIFIER u8vec2 bitfieldDeinterleave(glm::uint16 x) { uint16 REG1(x); uint16 REG2(x >>= 1); REG1 = REG1 & static_cast(0x5555); REG2 = REG2 & static_cast(0x5555); REG1 = ((REG1 >> 1) | REG1) & static_cast(0x3333); REG2 = ((REG2 >> 1) | REG2) & static_cast(0x3333); REG1 = ((REG1 >> 2) | REG1) & static_cast(0x0F0F); REG2 = ((REG2 >> 2) | REG2) & static_cast(0x0F0F); REG1 = ((REG1 >> 4) | REG1) & static_cast(0x00FF); REG2 = ((REG2 >> 4) | REG2) & static_cast(0x00FF); REG1 = ((REG1 >> 8) | REG1) & static_cast(0xFFFF); REG2 = ((REG2 >> 8) | REG2) & static_cast(0xFFFF); return glm::u8vec2(REG1, REG2); } GLM_FUNC_QUALIFIER int32 bitfieldInterleave(int16 x, int16 y) { union sign16 { int16 i; uint16 u; } sign_x, sign_y; union sign32 { int32 i; uint32 u; } result; sign_x.i = x; sign_y.i = y; result.u = bitfieldInterleave(sign_x.u, sign_y.u); return result.i; } GLM_FUNC_QUALIFIER uint32 bitfieldInterleave(uint16 x, uint16 y) { return detail::bitfieldInterleave(x, y); } GLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave(u16vec2 const& v) { return detail::bitfieldInterleave(v.x, v.y); } GLM_FUNC_QUALIFIER glm::u16vec2 bitfieldDeinterleave(glm::uint32 x) { glm::uint32 REG1(x); glm::uint32 REG2(x >>= 1); REG1 = REG1 & static_cast(0x55555555); REG2 = REG2 & static_cast(0x55555555); REG1 = ((REG1 >> 1) | REG1) & static_cast(0x33333333); REG2 = ((REG2 >> 1) | REG2) & static_cast(0x33333333); REG1 = ((REG1 >> 2) | REG1) & static_cast(0x0F0F0F0F); REG2 = ((REG2 >> 2) | REG2) & static_cast(0x0F0F0F0F); REG1 = ((REG1 >> 4) | REG1) & static_cast(0x00FF00FF); REG2 = ((REG2 >> 4) | REG2) & static_cast(0x00FF00FF); REG1 = ((REG1 >> 8) | REG1) & static_cast(0x0000FFFF); REG2 = ((REG2 >> 8) | REG2) & static_cast(0x0000FFFF); return glm::u16vec2(REG1, REG2); } GLM_FUNC_QUALIFIER int64 bitfieldInterleave(int32 x, int32 y) { union sign32 { int32 i; uint32 u; } sign_x, sign_y; union sign64 { int64 i; uint64 u; } result; sign_x.i = x; sign_y.i = y; result.u = bitfieldInterleave(sign_x.u, sign_y.u); return result.i; } GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint32 x, uint32 y) { return detail::bitfieldInterleave(x, y); } GLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(u32vec2 const& v) { return detail::bitfieldInterleave(v.x, v.y); } GLM_FUNC_QUALIFIER glm::u32vec2 bitfieldDeinterleave(glm::uint64 x) { glm::uint64 REG1(x); glm::uint64 REG2(x >>= 1); REG1 = REG1 & static_cast(0x5555555555555555ull); REG2 = REG2 & static_cast(0x5555555555555555ull); REG1 = ((REG1 >> 1) | REG1) & static_cast(0x3333333333333333ull); REG2 = ((REG2 >> 1) | REG2) & static_cast(0x3333333333333333ull); REG1 = ((REG1 >> 2) | REG1) & static_cast(0x0F0F0F0F0F0F0F0Full); REG2 = ((REG2 >> 2) | REG2) & static_cast(0x0F0F0F0F0F0F0F0Full); REG1 = ((REG1 >> 4) | REG1) & static_cast(0x00FF00FF00FF00FFull); REG2 = ((REG2 >> 4) | REG2) & static_cast(0x00FF00FF00FF00FFull); REG1 = ((REG1 >> 8) | REG1) & static_cast(0x0000FFFF0000FFFFull); REG2 = ((REG2 >> 8) | REG2) & static_cast(0x0000FFFF0000FFFFull); REG1 = ((REG1 >> 16) | REG1) & static_cast(0x00000000FFFFFFFFull); REG2 = ((REG2 >> 16) | REG2) & static_cast(0x00000000FFFFFFFFull); return glm::u32vec2(REG1, REG2); } GLM_FUNC_QUALIFIER int32 bitfieldInterleave(int8 x, int8 y, int8 z) { union sign8 { int8 i; uint8 u; } sign_x, sign_y, sign_z; union sign32 { int32 i; uint32 u; } result; sign_x.i = x; sign_y.i = y; sign_z.i = z; result.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u); return result.i; } GLM_FUNC_QUALIFIER uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z) { return detail::bitfieldInterleave(x, y, z); } GLM_FUNC_QUALIFIER uint32 bitfieldInterleave(u8vec3 const& v) { return detail::bitfieldInterleave(v.x, v.y, v.z); } GLM_FUNC_QUALIFIER int64 bitfieldInterleave(int16 x, int16 y, int16 z) { union sign16 { int16 i; uint16 u; } sign_x, sign_y, sign_z; union sign64 { int64 i; uint64 u; } result; sign_x.i = x; sign_y.i = y; sign_z.i = z; result.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u); return result.i; } GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z) { return detail::bitfieldInterleave(x, y, z); } GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(u16vec3 const& v) { return detail::bitfieldInterleave(v.x, v.y, v.z); } GLM_FUNC_QUALIFIER int64 bitfieldInterleave(int32 x, int32 y, int32 z) { union sign16 { int32 i; uint32 u; } sign_x, sign_y, sign_z; union sign64 { int64 i; uint64 u; } result; sign_x.i = x; sign_y.i = y; sign_z.i = z; result.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u); return result.i; } GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint32 x, uint32 y, uint32 z) { return detail::bitfieldInterleave(x, y, z); } GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(u32vec3 const& v) { return detail::bitfieldInterleave(v.x, v.y, v.z); } GLM_FUNC_QUALIFIER int32 bitfieldInterleave(int8 x, int8 y, int8 z, int8 w) { union sign8 { int8 i; uint8 u; } sign_x, sign_y, sign_z, sign_w; union sign32 { int32 i; uint32 u; } result; sign_x.i = x; sign_y.i = y; sign_z.i = z; sign_w.i = w; result.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u, sign_w.u); return result.i; } GLM_FUNC_QUALIFIER uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z, uint8 w) { return detail::bitfieldInterleave(x, y, z, w); } GLM_FUNC_QUALIFIER uint32 bitfieldInterleave(u8vec4 const& v) { return detail::bitfieldInterleave(v.x, v.y, v.z, v.w); } GLM_FUNC_QUALIFIER int64 bitfieldInterleave(int16 x, int16 y, int16 z, int16 w) { union sign16 { int16 i; uint16 u; } sign_x, sign_y, sign_z, sign_w; union sign64 { int64 i; uint64 u; } result; sign_x.i = x; sign_y.i = y; sign_z.i = z; sign_w.i = w; result.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u, sign_w.u); return result.i; } GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z, uint16 w) { return detail::bitfieldInterleave(x, y, z, w); } GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(u16vec4 const& v) { return detail::bitfieldInterleave(v.x, v.y, v.z, v.w); } }//namespace glm ================================================ FILE: libraries/glm/gtc/color_space.hpp ================================================ /// @ref gtc_color_space /// @file glm/gtc/color_space.hpp /// /// @see core (dependence) /// @see gtc_color_space (dependence) /// /// @defgroup gtc_color_space GLM_GTC_color_space /// @ingroup gtc /// /// Include to use the features of this extension. /// /// Allow to perform bit operations on integer values #pragma once // Dependencies #include "../detail/setup.hpp" #include "../detail/qualifier.hpp" #include "../exponential.hpp" #include "../vec3.hpp" #include "../vec4.hpp" #include #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_GTC_color_space extension included") #endif namespace glm { /// @addtogroup gtc_color_space /// @{ /// Convert a linear color to sRGB color using a standard gamma correction. /// IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb template GLM_FUNC_DECL vec convertLinearToSRGB(vec const& ColorLinear); /// Convert a linear color to sRGB color using a custom gamma correction. /// IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb template GLM_FUNC_DECL vec convertLinearToSRGB(vec const& ColorLinear, T Gamma); /// Convert a sRGB color to linear color using a standard gamma correction. /// IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb template GLM_FUNC_DECL vec convertSRGBToLinear(vec const& ColorSRGB); /// Convert a sRGB color to linear color using a custom gamma correction. // IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb template GLM_FUNC_DECL vec convertSRGBToLinear(vec const& ColorSRGB, T Gamma); /// @} } //namespace glm #include "color_space.inl" ================================================ FILE: libraries/glm/gtc/color_space.inl ================================================ /// @ref gtc_color_space namespace glm{ namespace detail { template struct compute_rgbToSrgb { GLM_FUNC_QUALIFIER static vec call(vec const& ColorRGB, T GammaCorrection) { vec const ClampedColor(clamp(ColorRGB, static_cast(0), static_cast(1))); return mix( pow(ClampedColor, vec(GammaCorrection)) * static_cast(1.055) - static_cast(0.055), ClampedColor * static_cast(12.92), lessThan(ClampedColor, vec(static_cast(0.0031308)))); } }; template struct compute_rgbToSrgb<4, T, Q> { GLM_FUNC_QUALIFIER static vec<4, T, Q> call(vec<4, T, Q> const& ColorRGB, T GammaCorrection) { return vec<4, T, Q>(compute_rgbToSrgb<3, T, Q>::call(vec<3, T, Q>(ColorRGB), GammaCorrection), ColorRGB.w); } }; template struct compute_srgbToRgb { GLM_FUNC_QUALIFIER static vec call(vec const& ColorSRGB, T Gamma) { return mix( pow((ColorSRGB + static_cast(0.055)) * static_cast(0.94786729857819905213270142180095), vec(Gamma)), ColorSRGB * static_cast(0.07739938080495356037151702786378), lessThanEqual(ColorSRGB, vec(static_cast(0.04045)))); } }; template struct compute_srgbToRgb<4, T, Q> { GLM_FUNC_QUALIFIER static vec<4, T, Q> call(vec<4, T, Q> const& ColorSRGB, T Gamma) { return vec<4, T, Q>(compute_srgbToRgb<3, T, Q>::call(vec<3, T, Q>(ColorSRGB), Gamma), ColorSRGB.w); } }; }//namespace detail template GLM_FUNC_QUALIFIER vec convertLinearToSRGB(vec const& ColorLinear) { return detail::compute_rgbToSrgb::call(ColorLinear, static_cast(0.41666)); } // Based on Ian Taylor http://chilliant.blogspot.fr/2012/08/srgb-approximations-for-hlsl.html template<> GLM_FUNC_QUALIFIER vec<3, float, lowp> convertLinearToSRGB(vec<3, float, lowp> const& ColorLinear) { vec<3, float, lowp> S1 = sqrt(ColorLinear); vec<3, float, lowp> S2 = sqrt(S1); vec<3, float, lowp> S3 = sqrt(S2); return 0.662002687f * S1 + 0.684122060f * S2 - 0.323583601f * S3 - 0.0225411470f * ColorLinear; } template GLM_FUNC_QUALIFIER vec convertLinearToSRGB(vec const& ColorLinear, T Gamma) { return detail::compute_rgbToSrgb::call(ColorLinear, static_cast(1) / Gamma); } template GLM_FUNC_QUALIFIER vec convertSRGBToLinear(vec const& ColorSRGB) { return detail::compute_srgbToRgb::call(ColorSRGB, static_cast(2.4)); } template GLM_FUNC_QUALIFIER vec convertSRGBToLinear(vec const& ColorSRGB, T Gamma) { return detail::compute_srgbToRgb::call(ColorSRGB, Gamma); } }//namespace glm ================================================ FILE: libraries/glm/gtc/constants.hpp ================================================ /// @ref gtc_constants /// @file glm/gtc/constants.hpp /// /// @see core (dependence) /// /// @defgroup gtc_constants GLM_GTC_constants /// @ingroup gtc /// /// Include to use the features of this extension. /// /// Provide a list of constants and precomputed useful values. #pragma once // Dependencies #include "../ext/scalar_constants.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_GTC_constants extension included") #endif namespace glm { /// @addtogroup gtc_constants /// @{ /// Return 0. /// @see gtc_constants template GLM_FUNC_DECL GLM_CONSTEXPR genType zero(); /// Return 1. /// @see gtc_constants template GLM_FUNC_DECL GLM_CONSTEXPR genType one(); /// Return pi * 2. /// @see gtc_constants template GLM_FUNC_DECL GLM_CONSTEXPR genType two_pi(); /// Return square root of pi. /// @see gtc_constants template GLM_FUNC_DECL GLM_CONSTEXPR genType root_pi(); /// Return pi / 2. /// @see gtc_constants template GLM_FUNC_DECL GLM_CONSTEXPR genType half_pi(); /// Return pi / 2 * 3. /// @see gtc_constants template GLM_FUNC_DECL GLM_CONSTEXPR genType three_over_two_pi(); /// Return pi / 4. /// @see gtc_constants template GLM_FUNC_DECL GLM_CONSTEXPR genType quarter_pi(); /// Return 1 / pi. /// @see gtc_constants template GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_pi(); /// Return 1 / (pi * 2). /// @see gtc_constants template GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_two_pi(); /// Return 2 / pi. /// @see gtc_constants template GLM_FUNC_DECL GLM_CONSTEXPR genType two_over_pi(); /// Return 4 / pi. /// @see gtc_constants template GLM_FUNC_DECL GLM_CONSTEXPR genType four_over_pi(); /// Return 2 / sqrt(pi). /// @see gtc_constants template GLM_FUNC_DECL GLM_CONSTEXPR genType two_over_root_pi(); /// Return 1 / sqrt(2). /// @see gtc_constants template GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_root_two(); /// Return sqrt(pi / 2). /// @see gtc_constants template GLM_FUNC_DECL GLM_CONSTEXPR genType root_half_pi(); /// Return sqrt(2 * pi). /// @see gtc_constants template GLM_FUNC_DECL GLM_CONSTEXPR genType root_two_pi(); /// Return sqrt(ln(4)). /// @see gtc_constants template GLM_FUNC_DECL GLM_CONSTEXPR genType root_ln_four(); /// Return e constant. /// @see gtc_constants template GLM_FUNC_DECL GLM_CONSTEXPR genType e(); /// Return Euler's constant. /// @see gtc_constants template GLM_FUNC_DECL GLM_CONSTEXPR genType euler(); /// Return sqrt(2). /// @see gtc_constants template GLM_FUNC_DECL GLM_CONSTEXPR genType root_two(); /// Return sqrt(3). /// @see gtc_constants template GLM_FUNC_DECL GLM_CONSTEXPR genType root_three(); /// Return sqrt(5). /// @see gtc_constants template GLM_FUNC_DECL GLM_CONSTEXPR genType root_five(); /// Return ln(2). /// @see gtc_constants template GLM_FUNC_DECL GLM_CONSTEXPR genType ln_two(); /// Return ln(10). /// @see gtc_constants template GLM_FUNC_DECL GLM_CONSTEXPR genType ln_ten(); /// Return ln(ln(2)). /// @see gtc_constants template GLM_FUNC_DECL GLM_CONSTEXPR genType ln_ln_two(); /// Return 1 / 3. /// @see gtc_constants template GLM_FUNC_DECL GLM_CONSTEXPR genType third(); /// Return 2 / 3. /// @see gtc_constants template GLM_FUNC_DECL GLM_CONSTEXPR genType two_thirds(); /// Return the golden ratio constant. /// @see gtc_constants template GLM_FUNC_DECL GLM_CONSTEXPR genType golden_ratio(); /// @} } //namespace glm #include "constants.inl" ================================================ FILE: libraries/glm/gtc/constants.inl ================================================ /// @ref gtc_constants namespace glm { template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType zero() { return genType(0); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one() { return genType(1); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_pi() { return genType(6.28318530717958647692528676655900576); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_pi() { return genType(1.772453850905516027); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType half_pi() { return genType(1.57079632679489661923132169163975144); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType three_over_two_pi() { return genType(4.71238898038468985769396507491925432); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType quarter_pi() { return genType(0.785398163397448309615660845819875721); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one_over_pi() { return genType(0.318309886183790671537767526745028724); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one_over_two_pi() { return genType(0.159154943091895335768883763372514362); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_over_pi() { return genType(0.636619772367581343075535053490057448); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType four_over_pi() { return genType(1.273239544735162686151070106980114898); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_over_root_pi() { return genType(1.12837916709551257389615890312154517); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one_over_root_two() { return genType(0.707106781186547524400844362104849039); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_half_pi() { return genType(1.253314137315500251); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_two_pi() { return genType(2.506628274631000502); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_ln_four() { return genType(1.17741002251547469); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType e() { return genType(2.71828182845904523536); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType euler() { return genType(0.577215664901532860606); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_two() { return genType(1.41421356237309504880168872420969808); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_three() { return genType(1.73205080756887729352744634150587236); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_five() { return genType(2.23606797749978969640917366873127623); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType ln_two() { return genType(0.693147180559945309417232121458176568); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType ln_ten() { return genType(2.30258509299404568401799145468436421); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType ln_ln_two() { return genType(-0.3665129205816643); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType third() { return genType(0.3333333333333333333333333333333333333333); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_thirds() { return genType(0.666666666666666666666666666666666666667); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType golden_ratio() { return genType(1.61803398874989484820458683436563811); } } //namespace glm ================================================ FILE: libraries/glm/gtc/epsilon.hpp ================================================ /// @ref gtc_epsilon /// @file glm/gtc/epsilon.hpp /// /// @see core (dependence) /// @see gtc_quaternion (dependence) /// /// @defgroup gtc_epsilon GLM_GTC_epsilon /// @ingroup gtc /// /// Include to use the features of this extension. /// /// Comparison functions for a user defined epsilon values. #pragma once // Dependencies #include "../detail/setup.hpp" #include "../detail/qualifier.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_GTC_epsilon extension included") #endif namespace glm { /// @addtogroup gtc_epsilon /// @{ /// Returns the component-wise comparison of |x - y| < epsilon. /// True if this expression is satisfied. /// /// @see gtc_epsilon template GLM_FUNC_DECL vec epsilonEqual(vec const& x, vec const& y, T const& epsilon); /// Returns the component-wise comparison of |x - y| < epsilon. /// True if this expression is satisfied. /// /// @see gtc_epsilon template GLM_FUNC_DECL bool epsilonEqual(genType const& x, genType const& y, genType const& epsilon); /// Returns the component-wise comparison of |x - y| < epsilon. /// True if this expression is not satisfied. /// /// @see gtc_epsilon template GLM_FUNC_DECL vec epsilonNotEqual(vec const& x, vec const& y, T const& epsilon); /// Returns the component-wise comparison of |x - y| >= epsilon. /// True if this expression is not satisfied. /// /// @see gtc_epsilon template GLM_FUNC_DECL bool epsilonNotEqual(genType const& x, genType const& y, genType const& epsilon); /// @} }//namespace glm #include "epsilon.inl" ================================================ FILE: libraries/glm/gtc/epsilon.inl ================================================ /// @ref gtc_epsilon // Dependency: #include "../vector_relational.hpp" #include "../common.hpp" namespace glm { template<> GLM_FUNC_QUALIFIER bool epsilonEqual ( float const& x, float const& y, float const& epsilon ) { return abs(x - y) < epsilon; } template<> GLM_FUNC_QUALIFIER bool epsilonEqual ( double const& x, double const& y, double const& epsilon ) { return abs(x - y) < epsilon; } template GLM_FUNC_QUALIFIER vec epsilonEqual(vec const& x, vec const& y, T const& epsilon) { return lessThan(abs(x - y), vec(epsilon)); } template GLM_FUNC_QUALIFIER vec epsilonEqual(vec const& x, vec const& y, vec const& epsilon) { return lessThan(abs(x - y), vec(epsilon)); } template<> GLM_FUNC_QUALIFIER bool epsilonNotEqual(float const& x, float const& y, float const& epsilon) { return abs(x - y) >= epsilon; } template<> GLM_FUNC_QUALIFIER bool epsilonNotEqual(double const& x, double const& y, double const& epsilon) { return abs(x - y) >= epsilon; } template GLM_FUNC_QUALIFIER vec epsilonNotEqual(vec const& x, vec const& y, T const& epsilon) { return greaterThanEqual(abs(x - y), vec(epsilon)); } template GLM_FUNC_QUALIFIER vec epsilonNotEqual(vec const& x, vec const& y, vec const& epsilon) { return greaterThanEqual(abs(x - y), vec(epsilon)); } template GLM_FUNC_QUALIFIER vec<4, bool, Q> epsilonEqual(qua const& x, qua const& y, T const& epsilon) { vec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w); return lessThan(abs(v), vec<4, T, Q>(epsilon)); } template GLM_FUNC_QUALIFIER vec<4, bool, Q> epsilonNotEqual(qua const& x, qua const& y, T const& epsilon) { vec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w); return greaterThanEqual(abs(v), vec<4, T, Q>(epsilon)); } }//namespace glm ================================================ FILE: libraries/glm/gtc/integer.hpp ================================================ /// @ref gtc_integer /// @file glm/gtc/integer.hpp /// /// @see core (dependence) /// @see gtc_integer (dependence) /// /// @defgroup gtc_integer GLM_GTC_integer /// @ingroup gtc /// /// Include to use the features of this extension. /// /// @brief Allow to perform bit operations on integer values #pragma once // Dependencies #include "../detail/setup.hpp" #include "../detail/qualifier.hpp" #include "../common.hpp" #include "../integer.hpp" #include "../exponential.hpp" #include #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_GTC_integer extension included") #endif namespace glm { /// @addtogroup gtc_integer /// @{ /// Returns the log2 of x for integer values. Usefull to compute mipmap count from the texture size. /// @see gtc_integer template GLM_FUNC_DECL genIUType log2(genIUType x); /// Returns a value equal to the nearest integer to x. /// The fraction 0.5 will round in a direction chosen by the /// implementation, presumably the direction that is fastest. /// /// @param x The values of the argument must be greater or equal to zero. /// @tparam T floating point scalar types. /// /// @see GLSL round man page /// @see gtc_integer template GLM_FUNC_DECL vec iround(vec const& x); /// Returns a value equal to the nearest integer to x. /// The fraction 0.5 will round in a direction chosen by the /// implementation, presumably the direction that is fastest. /// /// @param x The values of the argument must be greater or equal to zero. /// @tparam T floating point scalar types. /// /// @see GLSL round man page /// @see gtc_integer template GLM_FUNC_DECL vec uround(vec const& x); /// @} } //namespace glm #include "integer.inl" ================================================ FILE: libraries/glm/gtc/integer.inl ================================================ /// @ref gtc_integer namespace glm{ namespace detail { template struct compute_log2 { GLM_FUNC_QUALIFIER static vec call(vec const& v) { //Equivalent to return findMSB(vec); but save one function call in ASM with VC //return findMSB(vec); return vec(detail::compute_findMSB_vec::call(v)); } }; # if GLM_HAS_BITSCAN_WINDOWS template struct compute_log2<4, int, Q, false, Aligned> { GLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& v) { vec<4, int, Q> Result; _BitScanReverse(reinterpret_cast(&Result.x), v.x); _BitScanReverse(reinterpret_cast(&Result.y), v.y); _BitScanReverse(reinterpret_cast(&Result.z), v.z); _BitScanReverse(reinterpret_cast(&Result.w), v.w); return Result; } }; # endif//GLM_HAS_BITSCAN_WINDOWS }//namespace detail template GLM_FUNC_QUALIFIER int iround(genType x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'iround' only accept floating-point inputs"); assert(static_cast(0.0) <= x); return static_cast(x + static_cast(0.5)); } template GLM_FUNC_QUALIFIER vec iround(vec const& x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'iround' only accept floating-point inputs"); assert(all(lessThanEqual(vec(0), x))); return vec(x + static_cast(0.5)); } template GLM_FUNC_QUALIFIER uint uround(genType x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'uround' only accept floating-point inputs"); assert(static_cast(0.0) <= x); return static_cast(x + static_cast(0.5)); } template GLM_FUNC_QUALIFIER vec uround(vec const& x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'uround' only accept floating-point inputs"); assert(all(lessThanEqual(vec(0), x))); return vec(x + static_cast(0.5)); } }//namespace glm ================================================ FILE: libraries/glm/gtc/matrix_access.hpp ================================================ /// @ref gtc_matrix_access /// @file glm/gtc/matrix_access.hpp /// /// @see core (dependence) /// /// @defgroup gtc_matrix_access GLM_GTC_matrix_access /// @ingroup gtc /// /// Include to use the features of this extension. /// /// Defines functions to access rows or columns of a matrix easily. #pragma once // Dependency: #include "../detail/setup.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_GTC_matrix_access extension included") #endif namespace glm { /// @addtogroup gtc_matrix_access /// @{ /// Get a specific row of a matrix. /// @see gtc_matrix_access template GLM_FUNC_DECL typename genType::row_type row( genType const& m, length_t index); /// Set a specific row to a matrix. /// @see gtc_matrix_access template GLM_FUNC_DECL genType row( genType const& m, length_t index, typename genType::row_type const& x); /// Get a specific column of a matrix. /// @see gtc_matrix_access template GLM_FUNC_DECL typename genType::col_type column( genType const& m, length_t index); /// Set a specific column to a matrix. /// @see gtc_matrix_access template GLM_FUNC_DECL genType column( genType const& m, length_t index, typename genType::col_type const& x); /// @} }//namespace glm #include "matrix_access.inl" ================================================ FILE: libraries/glm/gtc/matrix_access.inl ================================================ /// @ref gtc_matrix_access namespace glm { template GLM_FUNC_QUALIFIER genType row ( genType const& m, length_t index, typename genType::row_type const& x ) { assert(index >= 0 && index < m[0].length()); genType Result = m; for(length_t i = 0; i < m.length(); ++i) Result[i][index] = x[i]; return Result; } template GLM_FUNC_QUALIFIER typename genType::row_type row ( genType const& m, length_t index ) { assert(index >= 0 && index < m[0].length()); typename genType::row_type Result(0); for(length_t i = 0; i < m.length(); ++i) Result[i] = m[i][index]; return Result; } template GLM_FUNC_QUALIFIER genType column ( genType const& m, length_t index, typename genType::col_type const& x ) { assert(index >= 0 && index < m.length()); genType Result = m; Result[index] = x; return Result; } template GLM_FUNC_QUALIFIER typename genType::col_type column ( genType const& m, length_t index ) { assert(index >= 0 && index < m.length()); return m[index]; } }//namespace glm ================================================ FILE: libraries/glm/gtc/matrix_integer.hpp ================================================ /// @ref gtc_matrix_integer /// @file glm/gtc/matrix_integer.hpp /// /// @see core (dependence) /// /// @defgroup gtc_matrix_integer GLM_GTC_matrix_integer /// @ingroup gtc /// /// Include to use the features of this extension. /// /// Defines a number of matrices with integer types. #pragma once // Dependency: #include "../mat2x2.hpp" #include "../mat2x3.hpp" #include "../mat2x4.hpp" #include "../mat3x2.hpp" #include "../mat3x3.hpp" #include "../mat3x4.hpp" #include "../mat4x2.hpp" #include "../mat4x3.hpp" #include "../mat4x4.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_GTC_matrix_integer extension included") #endif namespace glm { /// @addtogroup gtc_matrix_integer /// @{ /// High-qualifier signed integer 2x2 matrix. /// @see gtc_matrix_integer typedef mat<2, 2, int, highp> highp_imat2; /// High-qualifier signed integer 3x3 matrix. /// @see gtc_matrix_integer typedef mat<3, 3, int, highp> highp_imat3; /// High-qualifier signed integer 4x4 matrix. /// @see gtc_matrix_integer typedef mat<4, 4, int, highp> highp_imat4; /// High-qualifier signed integer 2x2 matrix. /// @see gtc_matrix_integer typedef mat<2, 2, int, highp> highp_imat2x2; /// High-qualifier signed integer 2x3 matrix. /// @see gtc_matrix_integer typedef mat<2, 3, int, highp> highp_imat2x3; /// High-qualifier signed integer 2x4 matrix. /// @see gtc_matrix_integer typedef mat<2, 4, int, highp> highp_imat2x4; /// High-qualifier signed integer 3x2 matrix. /// @see gtc_matrix_integer typedef mat<3, 2, int, highp> highp_imat3x2; /// High-qualifier signed integer 3x3 matrix. /// @see gtc_matrix_integer typedef mat<3, 3, int, highp> highp_imat3x3; /// High-qualifier signed integer 3x4 matrix. /// @see gtc_matrix_integer typedef mat<3, 4, int, highp> highp_imat3x4; /// High-qualifier signed integer 4x2 matrix. /// @see gtc_matrix_integer typedef mat<4, 2, int, highp> highp_imat4x2; /// High-qualifier signed integer 4x3 matrix. /// @see gtc_matrix_integer typedef mat<4, 3, int, highp> highp_imat4x3; /// High-qualifier signed integer 4x4 matrix. /// @see gtc_matrix_integer typedef mat<4, 4, int, highp> highp_imat4x4; /// Medium-qualifier signed integer 2x2 matrix. /// @see gtc_matrix_integer typedef mat<2, 2, int, mediump> mediump_imat2; /// Medium-qualifier signed integer 3x3 matrix. /// @see gtc_matrix_integer typedef mat<3, 3, int, mediump> mediump_imat3; /// Medium-qualifier signed integer 4x4 matrix. /// @see gtc_matrix_integer typedef mat<4, 4, int, mediump> mediump_imat4; /// Medium-qualifier signed integer 2x2 matrix. /// @see gtc_matrix_integer typedef mat<2, 2, int, mediump> mediump_imat2x2; /// Medium-qualifier signed integer 2x3 matrix. /// @see gtc_matrix_integer typedef mat<2, 3, int, mediump> mediump_imat2x3; /// Medium-qualifier signed integer 2x4 matrix. /// @see gtc_matrix_integer typedef mat<2, 4, int, mediump> mediump_imat2x4; /// Medium-qualifier signed integer 3x2 matrix. /// @see gtc_matrix_integer typedef mat<3, 2, int, mediump> mediump_imat3x2; /// Medium-qualifier signed integer 3x3 matrix. /// @see gtc_matrix_integer typedef mat<3, 3, int, mediump> mediump_imat3x3; /// Medium-qualifier signed integer 3x4 matrix. /// @see gtc_matrix_integer typedef mat<3, 4, int, mediump> mediump_imat3x4; /// Medium-qualifier signed integer 4x2 matrix. /// @see gtc_matrix_integer typedef mat<4, 2, int, mediump> mediump_imat4x2; /// Medium-qualifier signed integer 4x3 matrix. /// @see gtc_matrix_integer typedef mat<4, 3, int, mediump> mediump_imat4x3; /// Medium-qualifier signed integer 4x4 matrix. /// @see gtc_matrix_integer typedef mat<4, 4, int, mediump> mediump_imat4x4; /// Low-qualifier signed integer 2x2 matrix. /// @see gtc_matrix_integer typedef mat<2, 2, int, lowp> lowp_imat2; /// Low-qualifier signed integer 3x3 matrix. /// @see gtc_matrix_integer typedef mat<3, 3, int, lowp> lowp_imat3; /// Low-qualifier signed integer 4x4 matrix. /// @see gtc_matrix_integer typedef mat<4, 4, int, lowp> lowp_imat4; /// Low-qualifier signed integer 2x2 matrix. /// @see gtc_matrix_integer typedef mat<2, 2, int, lowp> lowp_imat2x2; /// Low-qualifier signed integer 2x3 matrix. /// @see gtc_matrix_integer typedef mat<2, 3, int, lowp> lowp_imat2x3; /// Low-qualifier signed integer 2x4 matrix. /// @see gtc_matrix_integer typedef mat<2, 4, int, lowp> lowp_imat2x4; /// Low-qualifier signed integer 3x2 matrix. /// @see gtc_matrix_integer typedef mat<3, 2, int, lowp> lowp_imat3x2; /// Low-qualifier signed integer 3x3 matrix. /// @see gtc_matrix_integer typedef mat<3, 3, int, lowp> lowp_imat3x3; /// Low-qualifier signed integer 3x4 matrix. /// @see gtc_matrix_integer typedef mat<3, 4, int, lowp> lowp_imat3x4; /// Low-qualifier signed integer 4x2 matrix. /// @see gtc_matrix_integer typedef mat<4, 2, int, lowp> lowp_imat4x2; /// Low-qualifier signed integer 4x3 matrix. /// @see gtc_matrix_integer typedef mat<4, 3, int, lowp> lowp_imat4x3; /// Low-qualifier signed integer 4x4 matrix. /// @see gtc_matrix_integer typedef mat<4, 4, int, lowp> lowp_imat4x4; /// High-qualifier unsigned integer 2x2 matrix. /// @see gtc_matrix_integer typedef mat<2, 2, uint, highp> highp_umat2; /// High-qualifier unsigned integer 3x3 matrix. /// @see gtc_matrix_integer typedef mat<3, 3, uint, highp> highp_umat3; /// High-qualifier unsigned integer 4x4 matrix. /// @see gtc_matrix_integer typedef mat<4, 4, uint, highp> highp_umat4; /// High-qualifier unsigned integer 2x2 matrix. /// @see gtc_matrix_integer typedef mat<2, 2, uint, highp> highp_umat2x2; /// High-qualifier unsigned integer 2x3 matrix. /// @see gtc_matrix_integer typedef mat<2, 3, uint, highp> highp_umat2x3; /// High-qualifier unsigned integer 2x4 matrix. /// @see gtc_matrix_integer typedef mat<2, 4, uint, highp> highp_umat2x4; /// High-qualifier unsigned integer 3x2 matrix. /// @see gtc_matrix_integer typedef mat<3, 2, uint, highp> highp_umat3x2; /// High-qualifier unsigned integer 3x3 matrix. /// @see gtc_matrix_integer typedef mat<3, 3, uint, highp> highp_umat3x3; /// High-qualifier unsigned integer 3x4 matrix. /// @see gtc_matrix_integer typedef mat<3, 4, uint, highp> highp_umat3x4; /// High-qualifier unsigned integer 4x2 matrix. /// @see gtc_matrix_integer typedef mat<4, 2, uint, highp> highp_umat4x2; /// High-qualifier unsigned integer 4x3 matrix. /// @see gtc_matrix_integer typedef mat<4, 3, uint, highp> highp_umat4x3; /// High-qualifier unsigned integer 4x4 matrix. /// @see gtc_matrix_integer typedef mat<4, 4, uint, highp> highp_umat4x4; /// Medium-qualifier unsigned integer 2x2 matrix. /// @see gtc_matrix_integer typedef mat<2, 2, uint, mediump> mediump_umat2; /// Medium-qualifier unsigned integer 3x3 matrix. /// @see gtc_matrix_integer typedef mat<3, 3, uint, mediump> mediump_umat3; /// Medium-qualifier unsigned integer 4x4 matrix. /// @see gtc_matrix_integer typedef mat<4, 4, uint, mediump> mediump_umat4; /// Medium-qualifier unsigned integer 2x2 matrix. /// @see gtc_matrix_integer typedef mat<2, 2, uint, mediump> mediump_umat2x2; /// Medium-qualifier unsigned integer 2x3 matrix. /// @see gtc_matrix_integer typedef mat<2, 3, uint, mediump> mediump_umat2x3; /// Medium-qualifier unsigned integer 2x4 matrix. /// @see gtc_matrix_integer typedef mat<2, 4, uint, mediump> mediump_umat2x4; /// Medium-qualifier unsigned integer 3x2 matrix. /// @see gtc_matrix_integer typedef mat<3, 2, uint, mediump> mediump_umat3x2; /// Medium-qualifier unsigned integer 3x3 matrix. /// @see gtc_matrix_integer typedef mat<3, 3, uint, mediump> mediump_umat3x3; /// Medium-qualifier unsigned integer 3x4 matrix. /// @see gtc_matrix_integer typedef mat<3, 4, uint, mediump> mediump_umat3x4; /// Medium-qualifier unsigned integer 4x2 matrix. /// @see gtc_matrix_integer typedef mat<4, 2, uint, mediump> mediump_umat4x2; /// Medium-qualifier unsigned integer 4x3 matrix. /// @see gtc_matrix_integer typedef mat<4, 3, uint, mediump> mediump_umat4x3; /// Medium-qualifier unsigned integer 4x4 matrix. /// @see gtc_matrix_integer typedef mat<4, 4, uint, mediump> mediump_umat4x4; /// Low-qualifier unsigned integer 2x2 matrix. /// @see gtc_matrix_integer typedef mat<2, 2, uint, lowp> lowp_umat2; /// Low-qualifier unsigned integer 3x3 matrix. /// @see gtc_matrix_integer typedef mat<3, 3, uint, lowp> lowp_umat3; /// Low-qualifier unsigned integer 4x4 matrix. /// @see gtc_matrix_integer typedef mat<4, 4, uint, lowp> lowp_umat4; /// Low-qualifier unsigned integer 2x2 matrix. /// @see gtc_matrix_integer typedef mat<2, 2, uint, lowp> lowp_umat2x2; /// Low-qualifier unsigned integer 2x3 matrix. /// @see gtc_matrix_integer typedef mat<2, 3, uint, lowp> lowp_umat2x3; /// Low-qualifier unsigned integer 2x4 matrix. /// @see gtc_matrix_integer typedef mat<2, 4, uint, lowp> lowp_umat2x4; /// Low-qualifier unsigned integer 3x2 matrix. /// @see gtc_matrix_integer typedef mat<3, 2, uint, lowp> lowp_umat3x2; /// Low-qualifier unsigned integer 3x3 matrix. /// @see gtc_matrix_integer typedef mat<3, 3, uint, lowp> lowp_umat3x3; /// Low-qualifier unsigned integer 3x4 matrix. /// @see gtc_matrix_integer typedef mat<3, 4, uint, lowp> lowp_umat3x4; /// Low-qualifier unsigned integer 4x2 matrix. /// @see gtc_matrix_integer typedef mat<4, 2, uint, lowp> lowp_umat4x2; /// Low-qualifier unsigned integer 4x3 matrix. /// @see gtc_matrix_integer typedef mat<4, 3, uint, lowp> lowp_umat4x3; /// Low-qualifier unsigned integer 4x4 matrix. /// @see gtc_matrix_integer typedef mat<4, 4, uint, lowp> lowp_umat4x4; #if(defined(GLM_PRECISION_HIGHP_INT)) typedef highp_imat2 imat2; typedef highp_imat3 imat3; typedef highp_imat4 imat4; typedef highp_imat2x2 imat2x2; typedef highp_imat2x3 imat2x3; typedef highp_imat2x4 imat2x4; typedef highp_imat3x2 imat3x2; typedef highp_imat3x3 imat3x3; typedef highp_imat3x4 imat3x4; typedef highp_imat4x2 imat4x2; typedef highp_imat4x3 imat4x3; typedef highp_imat4x4 imat4x4; #elif(defined(GLM_PRECISION_LOWP_INT)) typedef lowp_imat2 imat2; typedef lowp_imat3 imat3; typedef lowp_imat4 imat4; typedef lowp_imat2x2 imat2x2; typedef lowp_imat2x3 imat2x3; typedef lowp_imat2x4 imat2x4; typedef lowp_imat3x2 imat3x2; typedef lowp_imat3x3 imat3x3; typedef lowp_imat3x4 imat3x4; typedef lowp_imat4x2 imat4x2; typedef lowp_imat4x3 imat4x3; typedef lowp_imat4x4 imat4x4; #else //if(defined(GLM_PRECISION_MEDIUMP_INT)) /// Signed integer 2x2 matrix. /// @see gtc_matrix_integer typedef mediump_imat2 imat2; /// Signed integer 3x3 matrix. /// @see gtc_matrix_integer typedef mediump_imat3 imat3; /// Signed integer 4x4 matrix. /// @see gtc_matrix_integer typedef mediump_imat4 imat4; /// Signed integer 2x2 matrix. /// @see gtc_matrix_integer typedef mediump_imat2x2 imat2x2; /// Signed integer 2x3 matrix. /// @see gtc_matrix_integer typedef mediump_imat2x3 imat2x3; /// Signed integer 2x4 matrix. /// @see gtc_matrix_integer typedef mediump_imat2x4 imat2x4; /// Signed integer 3x2 matrix. /// @see gtc_matrix_integer typedef mediump_imat3x2 imat3x2; /// Signed integer 3x3 matrix. /// @see gtc_matrix_integer typedef mediump_imat3x3 imat3x3; /// Signed integer 3x4 matrix. /// @see gtc_matrix_integer typedef mediump_imat3x4 imat3x4; /// Signed integer 4x2 matrix. /// @see gtc_matrix_integer typedef mediump_imat4x2 imat4x2; /// Signed integer 4x3 matrix. /// @see gtc_matrix_integer typedef mediump_imat4x3 imat4x3; /// Signed integer 4x4 matrix. /// @see gtc_matrix_integer typedef mediump_imat4x4 imat4x4; #endif//GLM_PRECISION #if(defined(GLM_PRECISION_HIGHP_UINT)) typedef highp_umat2 umat2; typedef highp_umat3 umat3; typedef highp_umat4 umat4; typedef highp_umat2x2 umat2x2; typedef highp_umat2x3 umat2x3; typedef highp_umat2x4 umat2x4; typedef highp_umat3x2 umat3x2; typedef highp_umat3x3 umat3x3; typedef highp_umat3x4 umat3x4; typedef highp_umat4x2 umat4x2; typedef highp_umat4x3 umat4x3; typedef highp_umat4x4 umat4x4; #elif(defined(GLM_PRECISION_LOWP_UINT)) typedef lowp_umat2 umat2; typedef lowp_umat3 umat3; typedef lowp_umat4 umat4; typedef lowp_umat2x2 umat2x2; typedef lowp_umat2x3 umat2x3; typedef lowp_umat2x4 umat2x4; typedef lowp_umat3x2 umat3x2; typedef lowp_umat3x3 umat3x3; typedef lowp_umat3x4 umat3x4; typedef lowp_umat4x2 umat4x2; typedef lowp_umat4x3 umat4x3; typedef lowp_umat4x4 umat4x4; #else //if(defined(GLM_PRECISION_MEDIUMP_UINT)) /// Unsigned integer 2x2 matrix. /// @see gtc_matrix_integer typedef mediump_umat2 umat2; /// Unsigned integer 3x3 matrix. /// @see gtc_matrix_integer typedef mediump_umat3 umat3; /// Unsigned integer 4x4 matrix. /// @see gtc_matrix_integer typedef mediump_umat4 umat4; /// Unsigned integer 2x2 matrix. /// @see gtc_matrix_integer typedef mediump_umat2x2 umat2x2; /// Unsigned integer 2x3 matrix. /// @see gtc_matrix_integer typedef mediump_umat2x3 umat2x3; /// Unsigned integer 2x4 matrix. /// @see gtc_matrix_integer typedef mediump_umat2x4 umat2x4; /// Unsigned integer 3x2 matrix. /// @see gtc_matrix_integer typedef mediump_umat3x2 umat3x2; /// Unsigned integer 3x3 matrix. /// @see gtc_matrix_integer typedef mediump_umat3x3 umat3x3; /// Unsigned integer 3x4 matrix. /// @see gtc_matrix_integer typedef mediump_umat3x4 umat3x4; /// Unsigned integer 4x2 matrix. /// @see gtc_matrix_integer typedef mediump_umat4x2 umat4x2; /// Unsigned integer 4x3 matrix. /// @see gtc_matrix_integer typedef mediump_umat4x3 umat4x3; /// Unsigned integer 4x4 matrix. /// @see gtc_matrix_integer typedef mediump_umat4x4 umat4x4; #endif//GLM_PRECISION /// @} }//namespace glm ================================================ FILE: libraries/glm/gtc/matrix_inverse.hpp ================================================ /// @ref gtc_matrix_inverse /// @file glm/gtc/matrix_inverse.hpp /// /// @see core (dependence) /// /// @defgroup gtc_matrix_inverse GLM_GTC_matrix_inverse /// @ingroup gtc /// /// Include to use the features of this extension. /// /// Defines additional matrix inverting functions. #pragma once // Dependencies #include "../detail/setup.hpp" #include "../matrix.hpp" #include "../mat2x2.hpp" #include "../mat3x3.hpp" #include "../mat4x4.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_GTC_matrix_inverse extension included") #endif namespace glm { /// @addtogroup gtc_matrix_inverse /// @{ /// Fast matrix inverse for affine matrix. /// /// @param m Input matrix to invert. /// @tparam genType Squared floating-point matrix: half, float or double. Inverse of matrix based of half-qualifier floating point value is highly innacurate. /// @see gtc_matrix_inverse template GLM_FUNC_DECL genType affineInverse(genType const& m); /// Compute the inverse transpose of a matrix. /// /// @param m Input matrix to invert transpose. /// @tparam genType Squared floating-point matrix: half, float or double. Inverse of matrix based of half-qualifier floating point value is highly innacurate. /// @see gtc_matrix_inverse template GLM_FUNC_DECL genType inverseTranspose(genType const& m); /// @} }//namespace glm #include "matrix_inverse.inl" ================================================ FILE: libraries/glm/gtc/matrix_inverse.inl ================================================ /// @ref gtc_matrix_inverse namespace glm { template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> affineInverse(mat<3, 3, T, Q> const& m) { mat<2, 2, T, Q> const Inv(inverse(mat<2, 2, T, Q>(m))); return mat<3, 3, T, Q>( vec<3, T, Q>(Inv[0], static_cast(0)), vec<3, T, Q>(Inv[1], static_cast(0)), vec<3, T, Q>(-Inv * vec<2, T, Q>(m[2]), static_cast(1))); } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> affineInverse(mat<4, 4, T, Q> const& m) { mat<3, 3, T, Q> const Inv(inverse(mat<3, 3, T, Q>(m))); return mat<4, 4, T, Q>( vec<4, T, Q>(Inv[0], static_cast(0)), vec<4, T, Q>(Inv[1], static_cast(0)), vec<4, T, Q>(Inv[2], static_cast(0)), vec<4, T, Q>(-Inv * vec<3, T, Q>(m[3]), static_cast(1))); } template GLM_FUNC_QUALIFIER mat<2, 2, T, Q> inverseTranspose(mat<2, 2, T, Q> const& m) { T Determinant = m[0][0] * m[1][1] - m[1][0] * m[0][1]; mat<2, 2, T, Q> Inverse( + m[1][1] / Determinant, - m[0][1] / Determinant, - m[1][0] / Determinant, + m[0][0] / Determinant); return Inverse; } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> inverseTranspose(mat<3, 3, T, Q> const& m) { T Determinant = + m[0][0] * (m[1][1] * m[2][2] - m[1][2] * m[2][1]) - m[0][1] * (m[1][0] * m[2][2] - m[1][2] * m[2][0]) + m[0][2] * (m[1][0] * m[2][1] - m[1][1] * m[2][0]); mat<3, 3, T, Q> Inverse; Inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]); Inverse[0][1] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]); Inverse[0][2] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]); Inverse[1][0] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]); Inverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]); Inverse[1][2] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]); Inverse[2][0] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]); Inverse[2][1] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]); Inverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]); Inverse /= Determinant; return Inverse; } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> inverseTranspose(mat<4, 4, T, Q> const& m) { T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; T SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; T SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; T SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; T SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; T SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; T SubFactor11 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; T SubFactor12 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; T SubFactor13 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; T SubFactor14 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; T SubFactor15 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; T SubFactor16 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; T SubFactor17 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; mat<4, 4, T, Q> Inverse; Inverse[0][0] = + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02); Inverse[0][1] = - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04); Inverse[0][2] = + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05); Inverse[0][3] = - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05); Inverse[1][0] = - (m[0][1] * SubFactor00 - m[0][2] * SubFactor01 + m[0][3] * SubFactor02); Inverse[1][1] = + (m[0][0] * SubFactor00 - m[0][2] * SubFactor03 + m[0][3] * SubFactor04); Inverse[1][2] = - (m[0][0] * SubFactor01 - m[0][1] * SubFactor03 + m[0][3] * SubFactor05); Inverse[1][3] = + (m[0][0] * SubFactor02 - m[0][1] * SubFactor04 + m[0][2] * SubFactor05); Inverse[2][0] = + (m[0][1] * SubFactor06 - m[0][2] * SubFactor07 + m[0][3] * SubFactor08); Inverse[2][1] = - (m[0][0] * SubFactor06 - m[0][2] * SubFactor09 + m[0][3] * SubFactor10); Inverse[2][2] = + (m[0][0] * SubFactor07 - m[0][1] * SubFactor09 + m[0][3] * SubFactor11); Inverse[2][3] = - (m[0][0] * SubFactor08 - m[0][1] * SubFactor10 + m[0][2] * SubFactor11); Inverse[3][0] = - (m[0][1] * SubFactor12 - m[0][2] * SubFactor13 + m[0][3] * SubFactor14); Inverse[3][1] = + (m[0][0] * SubFactor12 - m[0][2] * SubFactor15 + m[0][3] * SubFactor16); Inverse[3][2] = - (m[0][0] * SubFactor13 - m[0][1] * SubFactor15 + m[0][3] * SubFactor17); Inverse[3][3] = + (m[0][0] * SubFactor14 - m[0][1] * SubFactor16 + m[0][2] * SubFactor17); T Determinant = + m[0][0] * Inverse[0][0] + m[0][1] * Inverse[0][1] + m[0][2] * Inverse[0][2] + m[0][3] * Inverse[0][3]; Inverse /= Determinant; return Inverse; } }//namespace glm ================================================ FILE: libraries/glm/gtc/matrix_transform.hpp ================================================ /// @ref gtc_matrix_transform /// @file glm/gtc/matrix_transform.hpp /// /// @see core (dependence) /// @see gtx_transform /// @see gtx_transform2 /// /// @defgroup gtc_matrix_transform GLM_GTC_matrix_transform /// @ingroup gtc /// /// Include to use the features of this extension. /// /// Defines functions that generate common transformation matrices. /// /// The matrices generated by this extension use standard OpenGL fixed-function /// conventions. For example, the lookAt function generates a transform from world /// space into the specific eye space that the projective matrix functions /// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility /// specifications defines the particular layout of this eye space. #pragma once // Dependencies #include "../mat4x4.hpp" #include "../vec2.hpp" #include "../vec3.hpp" #include "../vec4.hpp" #include "../ext/matrix_projection.hpp" #include "../ext/matrix_clip_space.hpp" #include "../ext/matrix_transform.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_GTC_matrix_transform extension included") #endif #include "matrix_transform.inl" ================================================ FILE: libraries/glm/gtc/matrix_transform.inl ================================================ #include "../geometric.hpp" #include "../trigonometric.hpp" #include "../matrix.hpp" ================================================ FILE: libraries/glm/gtc/noise.hpp ================================================ /// @ref gtc_noise /// @file glm/gtc/noise.hpp /// /// @see core (dependence) /// /// @defgroup gtc_noise GLM_GTC_noise /// @ingroup gtc /// /// Include to use the features of this extension. /// /// Defines 2D, 3D and 4D procedural noise functions /// Based on the work of Stefan Gustavson and Ashima Arts on "webgl-noise": /// https://github.com/ashima/webgl-noise /// Following Stefan Gustavson's paper "Simplex noise demystified": /// http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf #pragma once // Dependencies #include "../detail/setup.hpp" #include "../detail/qualifier.hpp" #include "../detail/_noise.hpp" #include "../geometric.hpp" #include "../common.hpp" #include "../vector_relational.hpp" #include "../vec2.hpp" #include "../vec3.hpp" #include "../vec4.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_GTC_noise extension included") #endif namespace glm { /// @addtogroup gtc_noise /// @{ /// Classic perlin noise. /// @see gtc_noise template GLM_FUNC_DECL T perlin( vec const& p); /// Periodic perlin noise. /// @see gtc_noise template GLM_FUNC_DECL T perlin( vec const& p, vec const& rep); /// Simplex noise. /// @see gtc_noise template GLM_FUNC_DECL T simplex( vec const& p); /// @} }//namespace glm #include "noise.inl" ================================================ FILE: libraries/glm/gtc/noise.inl ================================================ /// @ref gtc_noise /// // Based on the work of Stefan Gustavson and Ashima Arts on "webgl-noise": // https://github.com/ashima/webgl-noise // Following Stefan Gustavson's paper "Simplex noise demystified": // http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf namespace glm{ namespace gtc { template GLM_FUNC_QUALIFIER vec<4, T, Q> grad4(T const& j, vec<4, T, Q> const& ip) { vec<3, T, Q> pXYZ = floor(fract(vec<3, T, Q>(j) * vec<3, T, Q>(ip)) * T(7)) * ip[2] - T(1); T pW = static_cast(1.5) - dot(abs(pXYZ), vec<3, T, Q>(1)); vec<4, T, Q> s = vec<4, T, Q>(lessThan(vec<4, T, Q>(pXYZ, pW), vec<4, T, Q>(0.0))); pXYZ = pXYZ + (vec<3, T, Q>(s) * T(2) - T(1)) * s.w; return vec<4, T, Q>(pXYZ, pW); } }//namespace gtc // Classic Perlin noise template GLM_FUNC_QUALIFIER T perlin(vec<2, T, Q> const& Position) { vec<4, T, Q> Pi = glm::floor(vec<4, T, Q>(Position.x, Position.y, Position.x, Position.y)) + vec<4, T, Q>(0.0, 0.0, 1.0, 1.0); vec<4, T, Q> Pf = glm::fract(vec<4, T, Q>(Position.x, Position.y, Position.x, Position.y)) - vec<4, T, Q>(0.0, 0.0, 1.0, 1.0); Pi = mod(Pi, vec<4, T, Q>(289)); // To avoid truncation effects in permutation vec<4, T, Q> ix(Pi.x, Pi.z, Pi.x, Pi.z); vec<4, T, Q> iy(Pi.y, Pi.y, Pi.w, Pi.w); vec<4, T, Q> fx(Pf.x, Pf.z, Pf.x, Pf.z); vec<4, T, Q> fy(Pf.y, Pf.y, Pf.w, Pf.w); vec<4, T, Q> i = detail::permute(detail::permute(ix) + iy); vec<4, T, Q> gx = static_cast(2) * glm::fract(i / T(41)) - T(1); vec<4, T, Q> gy = glm::abs(gx) - T(0.5); vec<4, T, Q> tx = glm::floor(gx + T(0.5)); gx = gx - tx; vec<2, T, Q> g00(gx.x, gy.x); vec<2, T, Q> g10(gx.y, gy.y); vec<2, T, Q> g01(gx.z, gy.z); vec<2, T, Q> g11(gx.w, gy.w); vec<4, T, Q> norm = detail::taylorInvSqrt(vec<4, T, Q>(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11))); g00 *= norm.x; g01 *= norm.y; g10 *= norm.z; g11 *= norm.w; T n00 = dot(g00, vec<2, T, Q>(fx.x, fy.x)); T n10 = dot(g10, vec<2, T, Q>(fx.y, fy.y)); T n01 = dot(g01, vec<2, T, Q>(fx.z, fy.z)); T n11 = dot(g11, vec<2, T, Q>(fx.w, fy.w)); vec<2, T, Q> fade_xy = detail::fade(vec<2, T, Q>(Pf.x, Pf.y)); vec<2, T, Q> n_x = mix(vec<2, T, Q>(n00, n01), vec<2, T, Q>(n10, n11), fade_xy.x); T n_xy = mix(n_x.x, n_x.y, fade_xy.y); return T(2.3) * n_xy; } // Classic Perlin noise template GLM_FUNC_QUALIFIER T perlin(vec<3, T, Q> const& Position) { vec<3, T, Q> Pi0 = floor(Position); // Integer part for indexing vec<3, T, Q> Pi1 = Pi0 + T(1); // Integer part + 1 Pi0 = detail::mod289(Pi0); Pi1 = detail::mod289(Pi1); vec<3, T, Q> Pf0 = fract(Position); // Fractional part for interpolation vec<3, T, Q> Pf1 = Pf0 - T(1); // Fractional part - 1.0 vec<4, T, Q> ix(Pi0.x, Pi1.x, Pi0.x, Pi1.x); vec<4, T, Q> iy = vec<4, T, Q>(vec<2, T, Q>(Pi0.y), vec<2, T, Q>(Pi1.y)); vec<4, T, Q> iz0(Pi0.z); vec<4, T, Q> iz1(Pi1.z); vec<4, T, Q> ixy = detail::permute(detail::permute(ix) + iy); vec<4, T, Q> ixy0 = detail::permute(ixy + iz0); vec<4, T, Q> ixy1 = detail::permute(ixy + iz1); vec<4, T, Q> gx0 = ixy0 * T(1.0 / 7.0); vec<4, T, Q> gy0 = fract(floor(gx0) * T(1.0 / 7.0)) - T(0.5); gx0 = fract(gx0); vec<4, T, Q> gz0 = vec<4, T, Q>(0.5) - abs(gx0) - abs(gy0); vec<4, T, Q> sz0 = step(gz0, vec<4, T, Q>(0.0)); gx0 -= sz0 * (step(T(0), gx0) - T(0.5)); gy0 -= sz0 * (step(T(0), gy0) - T(0.5)); vec<4, T, Q> gx1 = ixy1 * T(1.0 / 7.0); vec<4, T, Q> gy1 = fract(floor(gx1) * T(1.0 / 7.0)) - T(0.5); gx1 = fract(gx1); vec<4, T, Q> gz1 = vec<4, T, Q>(0.5) - abs(gx1) - abs(gy1); vec<4, T, Q> sz1 = step(gz1, vec<4, T, Q>(0.0)); gx1 -= sz1 * (step(T(0), gx1) - T(0.5)); gy1 -= sz1 * (step(T(0), gy1) - T(0.5)); vec<3, T, Q> g000(gx0.x, gy0.x, gz0.x); vec<3, T, Q> g100(gx0.y, gy0.y, gz0.y); vec<3, T, Q> g010(gx0.z, gy0.z, gz0.z); vec<3, T, Q> g110(gx0.w, gy0.w, gz0.w); vec<3, T, Q> g001(gx1.x, gy1.x, gz1.x); vec<3, T, Q> g101(gx1.y, gy1.y, gz1.y); vec<3, T, Q> g011(gx1.z, gy1.z, gz1.z); vec<3, T, Q> g111(gx1.w, gy1.w, gz1.w); vec<4, T, Q> norm0 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); g000 *= norm0.x; g010 *= norm0.y; g100 *= norm0.z; g110 *= norm0.w; vec<4, T, Q> norm1 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); g001 *= norm1.x; g011 *= norm1.y; g101 *= norm1.z; g111 *= norm1.w; T n000 = dot(g000, Pf0); T n100 = dot(g100, vec<3, T, Q>(Pf1.x, Pf0.y, Pf0.z)); T n010 = dot(g010, vec<3, T, Q>(Pf0.x, Pf1.y, Pf0.z)); T n110 = dot(g110, vec<3, T, Q>(Pf1.x, Pf1.y, Pf0.z)); T n001 = dot(g001, vec<3, T, Q>(Pf0.x, Pf0.y, Pf1.z)); T n101 = dot(g101, vec<3, T, Q>(Pf1.x, Pf0.y, Pf1.z)); T n011 = dot(g011, vec<3, T, Q>(Pf0.x, Pf1.y, Pf1.z)); T n111 = dot(g111, Pf1); vec<3, T, Q> fade_xyz = detail::fade(Pf0); vec<4, T, Q> n_z = mix(vec<4, T, Q>(n000, n100, n010, n110), vec<4, T, Q>(n001, n101, n011, n111), fade_xyz.z); vec<2, T, Q> n_yz = mix(vec<2, T, Q>(n_z.x, n_z.y), vec<2, T, Q>(n_z.z, n_z.w), fade_xyz.y); T n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); return T(2.2) * n_xyz; } /* // Classic Perlin noise template GLM_FUNC_QUALIFIER T perlin(vec<3, T, Q> const& P) { vec<3, T, Q> Pi0 = floor(P); // Integer part for indexing vec<3, T, Q> Pi1 = Pi0 + T(1); // Integer part + 1 Pi0 = mod(Pi0, T(289)); Pi1 = mod(Pi1, T(289)); vec<3, T, Q> Pf0 = fract(P); // Fractional part for interpolation vec<3, T, Q> Pf1 = Pf0 - T(1); // Fractional part - 1.0 vec<4, T, Q> ix(Pi0.x, Pi1.x, Pi0.x, Pi1.x); vec<4, T, Q> iy(Pi0.y, Pi0.y, Pi1.y, Pi1.y); vec<4, T, Q> iz0(Pi0.z); vec<4, T, Q> iz1(Pi1.z); vec<4, T, Q> ixy = permute(permute(ix) + iy); vec<4, T, Q> ixy0 = permute(ixy + iz0); vec<4, T, Q> ixy1 = permute(ixy + iz1); vec<4, T, Q> gx0 = ixy0 / T(7); vec<4, T, Q> gy0 = fract(floor(gx0) / T(7)) - T(0.5); gx0 = fract(gx0); vec<4, T, Q> gz0 = vec<4, T, Q>(0.5) - abs(gx0) - abs(gy0); vec<4, T, Q> sz0 = step(gz0, vec<4, T, Q>(0.0)); gx0 -= sz0 * (step(0.0, gx0) - T(0.5)); gy0 -= sz0 * (step(0.0, gy0) - T(0.5)); vec<4, T, Q> gx1 = ixy1 / T(7); vec<4, T, Q> gy1 = fract(floor(gx1) / T(7)) - T(0.5); gx1 = fract(gx1); vec<4, T, Q> gz1 = vec<4, T, Q>(0.5) - abs(gx1) - abs(gy1); vec<4, T, Q> sz1 = step(gz1, vec<4, T, Q>(0.0)); gx1 -= sz1 * (step(T(0), gx1) - T(0.5)); gy1 -= sz1 * (step(T(0), gy1) - T(0.5)); vec<3, T, Q> g000(gx0.x, gy0.x, gz0.x); vec<3, T, Q> g100(gx0.y, gy0.y, gz0.y); vec<3, T, Q> g010(gx0.z, gy0.z, gz0.z); vec<3, T, Q> g110(gx0.w, gy0.w, gz0.w); vec<3, T, Q> g001(gx1.x, gy1.x, gz1.x); vec<3, T, Q> g101(gx1.y, gy1.y, gz1.y); vec<3, T, Q> g011(gx1.z, gy1.z, gz1.z); vec<3, T, Q> g111(gx1.w, gy1.w, gz1.w); vec<4, T, Q> norm0 = taylorInvSqrt(vec<4, T, Q>(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); g000 *= norm0.x; g010 *= norm0.y; g100 *= norm0.z; g110 *= norm0.w; vec<4, T, Q> norm1 = taylorInvSqrt(vec<4, T, Q>(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); g001 *= norm1.x; g011 *= norm1.y; g101 *= norm1.z; g111 *= norm1.w; T n000 = dot(g000, Pf0); T n100 = dot(g100, vec<3, T, Q>(Pf1.x, Pf0.y, Pf0.z)); T n010 = dot(g010, vec<3, T, Q>(Pf0.x, Pf1.y, Pf0.z)); T n110 = dot(g110, vec<3, T, Q>(Pf1.x, Pf1.y, Pf0.z)); T n001 = dot(g001, vec<3, T, Q>(Pf0.x, Pf0.y, Pf1.z)); T n101 = dot(g101, vec<3, T, Q>(Pf1.x, Pf0.y, Pf1.z)); T n011 = dot(g011, vec<3, T, Q>(Pf0.x, Pf1.y, Pf1.z)); T n111 = dot(g111, Pf1); vec<3, T, Q> fade_xyz = fade(Pf0); vec<4, T, Q> n_z = mix(vec<4, T, Q>(n000, n100, n010, n110), vec<4, T, Q>(n001, n101, n011, n111), fade_xyz.z); vec<2, T, Q> n_yz = mix( vec<2, T, Q>(n_z.x, n_z.y), vec<2, T, Q>(n_z.z, n_z.w), fade_xyz.y); T n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); return T(2.2) * n_xyz; } */ // Classic Perlin noise template GLM_FUNC_QUALIFIER T perlin(vec<4, T, Q> const& Position) { vec<4, T, Q> Pi0 = floor(Position); // Integer part for indexing vec<4, T, Q> Pi1 = Pi0 + T(1); // Integer part + 1 Pi0 = mod(Pi0, vec<4, T, Q>(289)); Pi1 = mod(Pi1, vec<4, T, Q>(289)); vec<4, T, Q> Pf0 = fract(Position); // Fractional part for interpolation vec<4, T, Q> Pf1 = Pf0 - T(1); // Fractional part - 1.0 vec<4, T, Q> ix(Pi0.x, Pi1.x, Pi0.x, Pi1.x); vec<4, T, Q> iy(Pi0.y, Pi0.y, Pi1.y, Pi1.y); vec<4, T, Q> iz0(Pi0.z); vec<4, T, Q> iz1(Pi1.z); vec<4, T, Q> iw0(Pi0.w); vec<4, T, Q> iw1(Pi1.w); vec<4, T, Q> ixy = detail::permute(detail::permute(ix) + iy); vec<4, T, Q> ixy0 = detail::permute(ixy + iz0); vec<4, T, Q> ixy1 = detail::permute(ixy + iz1); vec<4, T, Q> ixy00 = detail::permute(ixy0 + iw0); vec<4, T, Q> ixy01 = detail::permute(ixy0 + iw1); vec<4, T, Q> ixy10 = detail::permute(ixy1 + iw0); vec<4, T, Q> ixy11 = detail::permute(ixy1 + iw1); vec<4, T, Q> gx00 = ixy00 / T(7); vec<4, T, Q> gy00 = floor(gx00) / T(7); vec<4, T, Q> gz00 = floor(gy00) / T(6); gx00 = fract(gx00) - T(0.5); gy00 = fract(gy00) - T(0.5); gz00 = fract(gz00) - T(0.5); vec<4, T, Q> gw00 = vec<4, T, Q>(0.75) - abs(gx00) - abs(gy00) - abs(gz00); vec<4, T, Q> sw00 = step(gw00, vec<4, T, Q>(0.0)); gx00 -= sw00 * (step(T(0), gx00) - T(0.5)); gy00 -= sw00 * (step(T(0), gy00) - T(0.5)); vec<4, T, Q> gx01 = ixy01 / T(7); vec<4, T, Q> gy01 = floor(gx01) / T(7); vec<4, T, Q> gz01 = floor(gy01) / T(6); gx01 = fract(gx01) - T(0.5); gy01 = fract(gy01) - T(0.5); gz01 = fract(gz01) - T(0.5); vec<4, T, Q> gw01 = vec<4, T, Q>(0.75) - abs(gx01) - abs(gy01) - abs(gz01); vec<4, T, Q> sw01 = step(gw01, vec<4, T, Q>(0.0)); gx01 -= sw01 * (step(T(0), gx01) - T(0.5)); gy01 -= sw01 * (step(T(0), gy01) - T(0.5)); vec<4, T, Q> gx10 = ixy10 / T(7); vec<4, T, Q> gy10 = floor(gx10) / T(7); vec<4, T, Q> gz10 = floor(gy10) / T(6); gx10 = fract(gx10) - T(0.5); gy10 = fract(gy10) - T(0.5); gz10 = fract(gz10) - T(0.5); vec<4, T, Q> gw10 = vec<4, T, Q>(0.75) - abs(gx10) - abs(gy10) - abs(gz10); vec<4, T, Q> sw10 = step(gw10, vec<4, T, Q>(0)); gx10 -= sw10 * (step(T(0), gx10) - T(0.5)); gy10 -= sw10 * (step(T(0), gy10) - T(0.5)); vec<4, T, Q> gx11 = ixy11 / T(7); vec<4, T, Q> gy11 = floor(gx11) / T(7); vec<4, T, Q> gz11 = floor(gy11) / T(6); gx11 = fract(gx11) - T(0.5); gy11 = fract(gy11) - T(0.5); gz11 = fract(gz11) - T(0.5); vec<4, T, Q> gw11 = vec<4, T, Q>(0.75) - abs(gx11) - abs(gy11) - abs(gz11); vec<4, T, Q> sw11 = step(gw11, vec<4, T, Q>(0.0)); gx11 -= sw11 * (step(T(0), gx11) - T(0.5)); gy11 -= sw11 * (step(T(0), gy11) - T(0.5)); vec<4, T, Q> g0000(gx00.x, gy00.x, gz00.x, gw00.x); vec<4, T, Q> g1000(gx00.y, gy00.y, gz00.y, gw00.y); vec<4, T, Q> g0100(gx00.z, gy00.z, gz00.z, gw00.z); vec<4, T, Q> g1100(gx00.w, gy00.w, gz00.w, gw00.w); vec<4, T, Q> g0010(gx10.x, gy10.x, gz10.x, gw10.x); vec<4, T, Q> g1010(gx10.y, gy10.y, gz10.y, gw10.y); vec<4, T, Q> g0110(gx10.z, gy10.z, gz10.z, gw10.z); vec<4, T, Q> g1110(gx10.w, gy10.w, gz10.w, gw10.w); vec<4, T, Q> g0001(gx01.x, gy01.x, gz01.x, gw01.x); vec<4, T, Q> g1001(gx01.y, gy01.y, gz01.y, gw01.y); vec<4, T, Q> g0101(gx01.z, gy01.z, gz01.z, gw01.z); vec<4, T, Q> g1101(gx01.w, gy01.w, gz01.w, gw01.w); vec<4, T, Q> g0011(gx11.x, gy11.x, gz11.x, gw11.x); vec<4, T, Q> g1011(gx11.y, gy11.y, gz11.y, gw11.y); vec<4, T, Q> g0111(gx11.z, gy11.z, gz11.z, gw11.z); vec<4, T, Q> g1111(gx11.w, gy11.w, gz11.w, gw11.w); vec<4, T, Q> norm00 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0000, g0000), dot(g0100, g0100), dot(g1000, g1000), dot(g1100, g1100))); g0000 *= norm00.x; g0100 *= norm00.y; g1000 *= norm00.z; g1100 *= norm00.w; vec<4, T, Q> norm01 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0001, g0001), dot(g0101, g0101), dot(g1001, g1001), dot(g1101, g1101))); g0001 *= norm01.x; g0101 *= norm01.y; g1001 *= norm01.z; g1101 *= norm01.w; vec<4, T, Q> norm10 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0010, g0010), dot(g0110, g0110), dot(g1010, g1010), dot(g1110, g1110))); g0010 *= norm10.x; g0110 *= norm10.y; g1010 *= norm10.z; g1110 *= norm10.w; vec<4, T, Q> norm11 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0011, g0011), dot(g0111, g0111), dot(g1011, g1011), dot(g1111, g1111))); g0011 *= norm11.x; g0111 *= norm11.y; g1011 *= norm11.z; g1111 *= norm11.w; T n0000 = dot(g0000, Pf0); T n1000 = dot(g1000, vec<4, T, Q>(Pf1.x, Pf0.y, Pf0.z, Pf0.w)); T n0100 = dot(g0100, vec<4, T, Q>(Pf0.x, Pf1.y, Pf0.z, Pf0.w)); T n1100 = dot(g1100, vec<4, T, Q>(Pf1.x, Pf1.y, Pf0.z, Pf0.w)); T n0010 = dot(g0010, vec<4, T, Q>(Pf0.x, Pf0.y, Pf1.z, Pf0.w)); T n1010 = dot(g1010, vec<4, T, Q>(Pf1.x, Pf0.y, Pf1.z, Pf0.w)); T n0110 = dot(g0110, vec<4, T, Q>(Pf0.x, Pf1.y, Pf1.z, Pf0.w)); T n1110 = dot(g1110, vec<4, T, Q>(Pf1.x, Pf1.y, Pf1.z, Pf0.w)); T n0001 = dot(g0001, vec<4, T, Q>(Pf0.x, Pf0.y, Pf0.z, Pf1.w)); T n1001 = dot(g1001, vec<4, T, Q>(Pf1.x, Pf0.y, Pf0.z, Pf1.w)); T n0101 = dot(g0101, vec<4, T, Q>(Pf0.x, Pf1.y, Pf0.z, Pf1.w)); T n1101 = dot(g1101, vec<4, T, Q>(Pf1.x, Pf1.y, Pf0.z, Pf1.w)); T n0011 = dot(g0011, vec<4, T, Q>(Pf0.x, Pf0.y, Pf1.z, Pf1.w)); T n1011 = dot(g1011, vec<4, T, Q>(Pf1.x, Pf0.y, Pf1.z, Pf1.w)); T n0111 = dot(g0111, vec<4, T, Q>(Pf0.x, Pf1.y, Pf1.z, Pf1.w)); T n1111 = dot(g1111, Pf1); vec<4, T, Q> fade_xyzw = detail::fade(Pf0); vec<4, T, Q> n_0w = mix(vec<4, T, Q>(n0000, n1000, n0100, n1100), vec<4, T, Q>(n0001, n1001, n0101, n1101), fade_xyzw.w); vec<4, T, Q> n_1w = mix(vec<4, T, Q>(n0010, n1010, n0110, n1110), vec<4, T, Q>(n0011, n1011, n0111, n1111), fade_xyzw.w); vec<4, T, Q> n_zw = mix(n_0w, n_1w, fade_xyzw.z); vec<2, T, Q> n_yzw = mix(vec<2, T, Q>(n_zw.x, n_zw.y), vec<2, T, Q>(n_zw.z, n_zw.w), fade_xyzw.y); T n_xyzw = mix(n_yzw.x, n_yzw.y, fade_xyzw.x); return T(2.2) * n_xyzw; } // Classic Perlin noise, periodic variant template GLM_FUNC_QUALIFIER T perlin(vec<2, T, Q> const& Position, vec<2, T, Q> const& rep) { vec<4, T, Q> Pi = floor(vec<4, T, Q>(Position.x, Position.y, Position.x, Position.y)) + vec<4, T, Q>(0.0, 0.0, 1.0, 1.0); vec<4, T, Q> Pf = fract(vec<4, T, Q>(Position.x, Position.y, Position.x, Position.y)) - vec<4, T, Q>(0.0, 0.0, 1.0, 1.0); Pi = mod(Pi, vec<4, T, Q>(rep.x, rep.y, rep.x, rep.y)); // To create noise with explicit period Pi = mod(Pi, vec<4, T, Q>(289)); // To avoid truncation effects in permutation vec<4, T, Q> ix(Pi.x, Pi.z, Pi.x, Pi.z); vec<4, T, Q> iy(Pi.y, Pi.y, Pi.w, Pi.w); vec<4, T, Q> fx(Pf.x, Pf.z, Pf.x, Pf.z); vec<4, T, Q> fy(Pf.y, Pf.y, Pf.w, Pf.w); vec<4, T, Q> i = detail::permute(detail::permute(ix) + iy); vec<4, T, Q> gx = static_cast(2) * fract(i / T(41)) - T(1); vec<4, T, Q> gy = abs(gx) - T(0.5); vec<4, T, Q> tx = floor(gx + T(0.5)); gx = gx - tx; vec<2, T, Q> g00(gx.x, gy.x); vec<2, T, Q> g10(gx.y, gy.y); vec<2, T, Q> g01(gx.z, gy.z); vec<2, T, Q> g11(gx.w, gy.w); vec<4, T, Q> norm = detail::taylorInvSqrt(vec<4, T, Q>(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11))); g00 *= norm.x; g01 *= norm.y; g10 *= norm.z; g11 *= norm.w; T n00 = dot(g00, vec<2, T, Q>(fx.x, fy.x)); T n10 = dot(g10, vec<2, T, Q>(fx.y, fy.y)); T n01 = dot(g01, vec<2, T, Q>(fx.z, fy.z)); T n11 = dot(g11, vec<2, T, Q>(fx.w, fy.w)); vec<2, T, Q> fade_xy = detail::fade(vec<2, T, Q>(Pf.x, Pf.y)); vec<2, T, Q> n_x = mix(vec<2, T, Q>(n00, n01), vec<2, T, Q>(n10, n11), fade_xy.x); T n_xy = mix(n_x.x, n_x.y, fade_xy.y); return T(2.3) * n_xy; } // Classic Perlin noise, periodic variant template GLM_FUNC_QUALIFIER T perlin(vec<3, T, Q> const& Position, vec<3, T, Q> const& rep) { vec<3, T, Q> Pi0 = mod(floor(Position), rep); // Integer part, modulo period vec<3, T, Q> Pi1 = mod(Pi0 + vec<3, T, Q>(T(1)), rep); // Integer part + 1, mod period Pi0 = mod(Pi0, vec<3, T, Q>(289)); Pi1 = mod(Pi1, vec<3, T, Q>(289)); vec<3, T, Q> Pf0 = fract(Position); // Fractional part for interpolation vec<3, T, Q> Pf1 = Pf0 - vec<3, T, Q>(T(1)); // Fractional part - 1.0 vec<4, T, Q> ix = vec<4, T, Q>(Pi0.x, Pi1.x, Pi0.x, Pi1.x); vec<4, T, Q> iy = vec<4, T, Q>(Pi0.y, Pi0.y, Pi1.y, Pi1.y); vec<4, T, Q> iz0(Pi0.z); vec<4, T, Q> iz1(Pi1.z); vec<4, T, Q> ixy = detail::permute(detail::permute(ix) + iy); vec<4, T, Q> ixy0 = detail::permute(ixy + iz0); vec<4, T, Q> ixy1 = detail::permute(ixy + iz1); vec<4, T, Q> gx0 = ixy0 / T(7); vec<4, T, Q> gy0 = fract(floor(gx0) / T(7)) - T(0.5); gx0 = fract(gx0); vec<4, T, Q> gz0 = vec<4, T, Q>(0.5) - abs(gx0) - abs(gy0); vec<4, T, Q> sz0 = step(gz0, vec<4, T, Q>(0)); gx0 -= sz0 * (step(T(0), gx0) - T(0.5)); gy0 -= sz0 * (step(T(0), gy0) - T(0.5)); vec<4, T, Q> gx1 = ixy1 / T(7); vec<4, T, Q> gy1 = fract(floor(gx1) / T(7)) - T(0.5); gx1 = fract(gx1); vec<4, T, Q> gz1 = vec<4, T, Q>(0.5) - abs(gx1) - abs(gy1); vec<4, T, Q> sz1 = step(gz1, vec<4, T, Q>(T(0))); gx1 -= sz1 * (step(T(0), gx1) - T(0.5)); gy1 -= sz1 * (step(T(0), gy1) - T(0.5)); vec<3, T, Q> g000 = vec<3, T, Q>(gx0.x, gy0.x, gz0.x); vec<3, T, Q> g100 = vec<3, T, Q>(gx0.y, gy0.y, gz0.y); vec<3, T, Q> g010 = vec<3, T, Q>(gx0.z, gy0.z, gz0.z); vec<3, T, Q> g110 = vec<3, T, Q>(gx0.w, gy0.w, gz0.w); vec<3, T, Q> g001 = vec<3, T, Q>(gx1.x, gy1.x, gz1.x); vec<3, T, Q> g101 = vec<3, T, Q>(gx1.y, gy1.y, gz1.y); vec<3, T, Q> g011 = vec<3, T, Q>(gx1.z, gy1.z, gz1.z); vec<3, T, Q> g111 = vec<3, T, Q>(gx1.w, gy1.w, gz1.w); vec<4, T, Q> norm0 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); g000 *= norm0.x; g010 *= norm0.y; g100 *= norm0.z; g110 *= norm0.w; vec<4, T, Q> norm1 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); g001 *= norm1.x; g011 *= norm1.y; g101 *= norm1.z; g111 *= norm1.w; T n000 = dot(g000, Pf0); T n100 = dot(g100, vec<3, T, Q>(Pf1.x, Pf0.y, Pf0.z)); T n010 = dot(g010, vec<3, T, Q>(Pf0.x, Pf1.y, Pf0.z)); T n110 = dot(g110, vec<3, T, Q>(Pf1.x, Pf1.y, Pf0.z)); T n001 = dot(g001, vec<3, T, Q>(Pf0.x, Pf0.y, Pf1.z)); T n101 = dot(g101, vec<3, T, Q>(Pf1.x, Pf0.y, Pf1.z)); T n011 = dot(g011, vec<3, T, Q>(Pf0.x, Pf1.y, Pf1.z)); T n111 = dot(g111, Pf1); vec<3, T, Q> fade_xyz = detail::fade(Pf0); vec<4, T, Q> n_z = mix(vec<4, T, Q>(n000, n100, n010, n110), vec<4, T, Q>(n001, n101, n011, n111), fade_xyz.z); vec<2, T, Q> n_yz = mix(vec<2, T, Q>(n_z.x, n_z.y), vec<2, T, Q>(n_z.z, n_z.w), fade_xyz.y); T n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); return T(2.2) * n_xyz; } // Classic Perlin noise, periodic version template GLM_FUNC_QUALIFIER T perlin(vec<4, T, Q> const& Position, vec<4, T, Q> const& rep) { vec<4, T, Q> Pi0 = mod(floor(Position), rep); // Integer part modulo rep vec<4, T, Q> Pi1 = mod(Pi0 + T(1), rep); // Integer part + 1 mod rep vec<4, T, Q> Pf0 = fract(Position); // Fractional part for interpolation vec<4, T, Q> Pf1 = Pf0 - T(1); // Fractional part - 1.0 vec<4, T, Q> ix = vec<4, T, Q>(Pi0.x, Pi1.x, Pi0.x, Pi1.x); vec<4, T, Q> iy = vec<4, T, Q>(Pi0.y, Pi0.y, Pi1.y, Pi1.y); vec<4, T, Q> iz0(Pi0.z); vec<4, T, Q> iz1(Pi1.z); vec<4, T, Q> iw0(Pi0.w); vec<4, T, Q> iw1(Pi1.w); vec<4, T, Q> ixy = detail::permute(detail::permute(ix) + iy); vec<4, T, Q> ixy0 = detail::permute(ixy + iz0); vec<4, T, Q> ixy1 = detail::permute(ixy + iz1); vec<4, T, Q> ixy00 = detail::permute(ixy0 + iw0); vec<4, T, Q> ixy01 = detail::permute(ixy0 + iw1); vec<4, T, Q> ixy10 = detail::permute(ixy1 + iw0); vec<4, T, Q> ixy11 = detail::permute(ixy1 + iw1); vec<4, T, Q> gx00 = ixy00 / T(7); vec<4, T, Q> gy00 = floor(gx00) / T(7); vec<4, T, Q> gz00 = floor(gy00) / T(6); gx00 = fract(gx00) - T(0.5); gy00 = fract(gy00) - T(0.5); gz00 = fract(gz00) - T(0.5); vec<4, T, Q> gw00 = vec<4, T, Q>(0.75) - abs(gx00) - abs(gy00) - abs(gz00); vec<4, T, Q> sw00 = step(gw00, vec<4, T, Q>(0)); gx00 -= sw00 * (step(T(0), gx00) - T(0.5)); gy00 -= sw00 * (step(T(0), gy00) - T(0.5)); vec<4, T, Q> gx01 = ixy01 / T(7); vec<4, T, Q> gy01 = floor(gx01) / T(7); vec<4, T, Q> gz01 = floor(gy01) / T(6); gx01 = fract(gx01) - T(0.5); gy01 = fract(gy01) - T(0.5); gz01 = fract(gz01) - T(0.5); vec<4, T, Q> gw01 = vec<4, T, Q>(0.75) - abs(gx01) - abs(gy01) - abs(gz01); vec<4, T, Q> sw01 = step(gw01, vec<4, T, Q>(0.0)); gx01 -= sw01 * (step(T(0), gx01) - T(0.5)); gy01 -= sw01 * (step(T(0), gy01) - T(0.5)); vec<4, T, Q> gx10 = ixy10 / T(7); vec<4, T, Q> gy10 = floor(gx10) / T(7); vec<4, T, Q> gz10 = floor(gy10) / T(6); gx10 = fract(gx10) - T(0.5); gy10 = fract(gy10) - T(0.5); gz10 = fract(gz10) - T(0.5); vec<4, T, Q> gw10 = vec<4, T, Q>(0.75) - abs(gx10) - abs(gy10) - abs(gz10); vec<4, T, Q> sw10 = step(gw10, vec<4, T, Q>(0.0)); gx10 -= sw10 * (step(T(0), gx10) - T(0.5)); gy10 -= sw10 * (step(T(0), gy10) - T(0.5)); vec<4, T, Q> gx11 = ixy11 / T(7); vec<4, T, Q> gy11 = floor(gx11) / T(7); vec<4, T, Q> gz11 = floor(gy11) / T(6); gx11 = fract(gx11) - T(0.5); gy11 = fract(gy11) - T(0.5); gz11 = fract(gz11) - T(0.5); vec<4, T, Q> gw11 = vec<4, T, Q>(0.75) - abs(gx11) - abs(gy11) - abs(gz11); vec<4, T, Q> sw11 = step(gw11, vec<4, T, Q>(T(0))); gx11 -= sw11 * (step(T(0), gx11) - T(0.5)); gy11 -= sw11 * (step(T(0), gy11) - T(0.5)); vec<4, T, Q> g0000(gx00.x, gy00.x, gz00.x, gw00.x); vec<4, T, Q> g1000(gx00.y, gy00.y, gz00.y, gw00.y); vec<4, T, Q> g0100(gx00.z, gy00.z, gz00.z, gw00.z); vec<4, T, Q> g1100(gx00.w, gy00.w, gz00.w, gw00.w); vec<4, T, Q> g0010(gx10.x, gy10.x, gz10.x, gw10.x); vec<4, T, Q> g1010(gx10.y, gy10.y, gz10.y, gw10.y); vec<4, T, Q> g0110(gx10.z, gy10.z, gz10.z, gw10.z); vec<4, T, Q> g1110(gx10.w, gy10.w, gz10.w, gw10.w); vec<4, T, Q> g0001(gx01.x, gy01.x, gz01.x, gw01.x); vec<4, T, Q> g1001(gx01.y, gy01.y, gz01.y, gw01.y); vec<4, T, Q> g0101(gx01.z, gy01.z, gz01.z, gw01.z); vec<4, T, Q> g1101(gx01.w, gy01.w, gz01.w, gw01.w); vec<4, T, Q> g0011(gx11.x, gy11.x, gz11.x, gw11.x); vec<4, T, Q> g1011(gx11.y, gy11.y, gz11.y, gw11.y); vec<4, T, Q> g0111(gx11.z, gy11.z, gz11.z, gw11.z); vec<4, T, Q> g1111(gx11.w, gy11.w, gz11.w, gw11.w); vec<4, T, Q> norm00 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0000, g0000), dot(g0100, g0100), dot(g1000, g1000), dot(g1100, g1100))); g0000 *= norm00.x; g0100 *= norm00.y; g1000 *= norm00.z; g1100 *= norm00.w; vec<4, T, Q> norm01 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0001, g0001), dot(g0101, g0101), dot(g1001, g1001), dot(g1101, g1101))); g0001 *= norm01.x; g0101 *= norm01.y; g1001 *= norm01.z; g1101 *= norm01.w; vec<4, T, Q> norm10 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0010, g0010), dot(g0110, g0110), dot(g1010, g1010), dot(g1110, g1110))); g0010 *= norm10.x; g0110 *= norm10.y; g1010 *= norm10.z; g1110 *= norm10.w; vec<4, T, Q> norm11 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0011, g0011), dot(g0111, g0111), dot(g1011, g1011), dot(g1111, g1111))); g0011 *= norm11.x; g0111 *= norm11.y; g1011 *= norm11.z; g1111 *= norm11.w; T n0000 = dot(g0000, Pf0); T n1000 = dot(g1000, vec<4, T, Q>(Pf1.x, Pf0.y, Pf0.z, Pf0.w)); T n0100 = dot(g0100, vec<4, T, Q>(Pf0.x, Pf1.y, Pf0.z, Pf0.w)); T n1100 = dot(g1100, vec<4, T, Q>(Pf1.x, Pf1.y, Pf0.z, Pf0.w)); T n0010 = dot(g0010, vec<4, T, Q>(Pf0.x, Pf0.y, Pf1.z, Pf0.w)); T n1010 = dot(g1010, vec<4, T, Q>(Pf1.x, Pf0.y, Pf1.z, Pf0.w)); T n0110 = dot(g0110, vec<4, T, Q>(Pf0.x, Pf1.y, Pf1.z, Pf0.w)); T n1110 = dot(g1110, vec<4, T, Q>(Pf1.x, Pf1.y, Pf1.z, Pf0.w)); T n0001 = dot(g0001, vec<4, T, Q>(Pf0.x, Pf0.y, Pf0.z, Pf1.w)); T n1001 = dot(g1001, vec<4, T, Q>(Pf1.x, Pf0.y, Pf0.z, Pf1.w)); T n0101 = dot(g0101, vec<4, T, Q>(Pf0.x, Pf1.y, Pf0.z, Pf1.w)); T n1101 = dot(g1101, vec<4, T, Q>(Pf1.x, Pf1.y, Pf0.z, Pf1.w)); T n0011 = dot(g0011, vec<4, T, Q>(Pf0.x, Pf0.y, Pf1.z, Pf1.w)); T n1011 = dot(g1011, vec<4, T, Q>(Pf1.x, Pf0.y, Pf1.z, Pf1.w)); T n0111 = dot(g0111, vec<4, T, Q>(Pf0.x, Pf1.y, Pf1.z, Pf1.w)); T n1111 = dot(g1111, Pf1); vec<4, T, Q> fade_xyzw = detail::fade(Pf0); vec<4, T, Q> n_0w = mix(vec<4, T, Q>(n0000, n1000, n0100, n1100), vec<4, T, Q>(n0001, n1001, n0101, n1101), fade_xyzw.w); vec<4, T, Q> n_1w = mix(vec<4, T, Q>(n0010, n1010, n0110, n1110), vec<4, T, Q>(n0011, n1011, n0111, n1111), fade_xyzw.w); vec<4, T, Q> n_zw = mix(n_0w, n_1w, fade_xyzw.z); vec<2, T, Q> n_yzw = mix(vec<2, T, Q>(n_zw.x, n_zw.y), vec<2, T, Q>(n_zw.z, n_zw.w), fade_xyzw.y); T n_xyzw = mix(n_yzw.x, n_yzw.y, fade_xyzw.x); return T(2.2) * n_xyzw; } template GLM_FUNC_QUALIFIER T simplex(glm::vec<2, T, Q> const& v) { vec<4, T, Q> const C = vec<4, T, Q>( T( 0.211324865405187), // (3.0 - sqrt(3.0)) / 6.0 T( 0.366025403784439), // 0.5 * (sqrt(3.0) - 1.0) T(-0.577350269189626), // -1.0 + 2.0 * C.x T( 0.024390243902439)); // 1.0 / 41.0 // First corner vec<2, T, Q> i = floor(v + dot(v, vec<2, T, Q>(C[1]))); vec<2, T, Q> x0 = v - i + dot(i, vec<2, T, Q>(C[0])); // Other corners //i1.x = step( x0.y, x0.x ); // x0.x > x0.y ? 1.0 : 0.0 //i1.y = 1.0 - i1.x; vec<2, T, Q> i1 = (x0.x > x0.y) ? vec<2, T, Q>(1, 0) : vec<2, T, Q>(0, 1); // x0 = x0 - 0.0 + 0.0 * C.xx ; // x1 = x0 - i1 + 1.0 * C.xx ; // x2 = x0 - 1.0 + 2.0 * C.xx ; vec<4, T, Q> x12 = vec<4, T, Q>(x0.x, x0.y, x0.x, x0.y) + vec<4, T, Q>(C.x, C.x, C.z, C.z); x12 = vec<4, T, Q>(vec<2, T, Q>(x12) - i1, x12.z, x12.w); // Permutations i = mod(i, vec<2, T, Q>(289)); // Avoid truncation effects in permutation vec<3, T, Q> p = detail::permute( detail::permute(i.y + vec<3, T, Q>(T(0), i1.y, T(1))) + i.x + vec<3, T, Q>(T(0), i1.x, T(1))); vec<3, T, Q> m = max(vec<3, T, Q>(0.5) - vec<3, T, Q>( dot(x0, x0), dot(vec<2, T, Q>(x12.x, x12.y), vec<2, T, Q>(x12.x, x12.y)), dot(vec<2, T, Q>(x12.z, x12.w), vec<2, T, Q>(x12.z, x12.w))), vec<3, T, Q>(0)); m = m * m ; m = m * m ; // Gradients: 41 points uniformly over a line, mapped onto a diamond. // The ring size 17*17 = 289 is close to a multiple of 41 (41*7 = 287) vec<3, T, Q> x = static_cast(2) * fract(p * C.w) - T(1); vec<3, T, Q> h = abs(x) - T(0.5); vec<3, T, Q> ox = floor(x + T(0.5)); vec<3, T, Q> a0 = x - ox; // Normalise gradients implicitly by scaling m // Inlined for speed: m *= taylorInvSqrt( a0*a0 + h*h ); m *= static_cast(1.79284291400159) - T(0.85373472095314) * (a0 * a0 + h * h); // Compute final noise value at P vec<3, T, Q> g; g.x = a0.x * x0.x + h.x * x0.y; //g.yz = a0.yz * x12.xz + h.yz * x12.yw; g.y = a0.y * x12.x + h.y * x12.y; g.z = a0.z * x12.z + h.z * x12.w; return T(130) * dot(m, g); } template GLM_FUNC_QUALIFIER T simplex(vec<3, T, Q> const& v) { vec<2, T, Q> const C(1.0 / 6.0, 1.0 / 3.0); vec<4, T, Q> const D(0.0, 0.5, 1.0, 2.0); // First corner vec<3, T, Q> i(floor(v + dot(v, vec<3, T, Q>(C.y)))); vec<3, T, Q> x0(v - i + dot(i, vec<3, T, Q>(C.x))); // Other corners vec<3, T, Q> g(step(vec<3, T, Q>(x0.y, x0.z, x0.x), x0)); vec<3, T, Q> l(T(1) - g); vec<3, T, Q> i1(min(g, vec<3, T, Q>(l.z, l.x, l.y))); vec<3, T, Q> i2(max(g, vec<3, T, Q>(l.z, l.x, l.y))); // x0 = x0 - 0.0 + 0.0 * C.xxx; // x1 = x0 - i1 + 1.0 * C.xxx; // x2 = x0 - i2 + 2.0 * C.xxx; // x3 = x0 - 1.0 + 3.0 * C.xxx; vec<3, T, Q> x1(x0 - i1 + C.x); vec<3, T, Q> x2(x0 - i2 + C.y); // 2.0*C.x = 1/3 = C.y vec<3, T, Q> x3(x0 - D.y); // -1.0+3.0*C.x = -0.5 = -D.y // Permutations i = detail::mod289(i); vec<4, T, Q> p(detail::permute(detail::permute(detail::permute( i.z + vec<4, T, Q>(T(0), i1.z, i2.z, T(1))) + i.y + vec<4, T, Q>(T(0), i1.y, i2.y, T(1))) + i.x + vec<4, T, Q>(T(0), i1.x, i2.x, T(1)))); // Gradients: 7x7 points over a square, mapped onto an octahedron. // The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294) T n_ = static_cast(0.142857142857); // 1.0/7.0 vec<3, T, Q> ns(n_ * vec<3, T, Q>(D.w, D.y, D.z) - vec<3, T, Q>(D.x, D.z, D.x)); vec<4, T, Q> j(p - T(49) * floor(p * ns.z * ns.z)); // mod(p,7*7) vec<4, T, Q> x_(floor(j * ns.z)); vec<4, T, Q> y_(floor(j - T(7) * x_)); // mod(j,N) vec<4, T, Q> x(x_ * ns.x + ns.y); vec<4, T, Q> y(y_ * ns.x + ns.y); vec<4, T, Q> h(T(1) - abs(x) - abs(y)); vec<4, T, Q> b0(x.x, x.y, y.x, y.y); vec<4, T, Q> b1(x.z, x.w, y.z, y.w); // vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0; // vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0; vec<4, T, Q> s0(floor(b0) * T(2) + T(1)); vec<4, T, Q> s1(floor(b1) * T(2) + T(1)); vec<4, T, Q> sh(-step(h, vec<4, T, Q>(0.0))); vec<4, T, Q> a0 = vec<4, T, Q>(b0.x, b0.z, b0.y, b0.w) + vec<4, T, Q>(s0.x, s0.z, s0.y, s0.w) * vec<4, T, Q>(sh.x, sh.x, sh.y, sh.y); vec<4, T, Q> a1 = vec<4, T, Q>(b1.x, b1.z, b1.y, b1.w) + vec<4, T, Q>(s1.x, s1.z, s1.y, s1.w) * vec<4, T, Q>(sh.z, sh.z, sh.w, sh.w); vec<3, T, Q> p0(a0.x, a0.y, h.x); vec<3, T, Q> p1(a0.z, a0.w, h.y); vec<3, T, Q> p2(a1.x, a1.y, h.z); vec<3, T, Q> p3(a1.z, a1.w, h.w); // Normalise gradients vec<4, T, Q> norm = detail::taylorInvSqrt(vec<4, T, Q>(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3))); p0 *= norm.x; p1 *= norm.y; p2 *= norm.z; p3 *= norm.w; // Mix final noise value vec<4, T, Q> m = max(T(0.6) - vec<4, T, Q>(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), vec<4, T, Q>(0)); m = m * m; return T(42) * dot(m * m, vec<4, T, Q>(dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3))); } template GLM_FUNC_QUALIFIER T simplex(vec<4, T, Q> const& v) { vec<4, T, Q> const C( 0.138196601125011, // (5 - sqrt(5))/20 G4 0.276393202250021, // 2 * G4 0.414589803375032, // 3 * G4 -0.447213595499958); // -1 + 4 * G4 // (sqrt(5) - 1)/4 = F4, used once below T const F4 = static_cast(0.309016994374947451); // First corner vec<4, T, Q> i = floor(v + dot(v, vec<4, T, Q>(F4))); vec<4, T, Q> x0 = v - i + dot(i, vec<4, T, Q>(C.x)); // Other corners // Rank sorting originally contributed by Bill Licea-Kane, AMD (formerly ATI) vec<4, T, Q> i0; vec<3, T, Q> isX = step(vec<3, T, Q>(x0.y, x0.z, x0.w), vec<3, T, Q>(x0.x)); vec<3, T, Q> isYZ = step(vec<3, T, Q>(x0.z, x0.w, x0.w), vec<3, T, Q>(x0.y, x0.y, x0.z)); // i0.x = dot(isX, vec3(1.0)); //i0.x = isX.x + isX.y + isX.z; //i0.yzw = static_cast(1) - isX; i0 = vec<4, T, Q>(isX.x + isX.y + isX.z, T(1) - isX); // i0.y += dot(isYZ.xy, vec2(1.0)); i0.y += isYZ.x + isYZ.y; //i0.zw += 1.0 - vec<2, T, Q>(isYZ.x, isYZ.y); i0.z += static_cast(1) - isYZ.x; i0.w += static_cast(1) - isYZ.y; i0.z += isYZ.z; i0.w += static_cast(1) - isYZ.z; // i0 now contains the unique values 0,1,2,3 in each channel vec<4, T, Q> i3 = clamp(i0, T(0), T(1)); vec<4, T, Q> i2 = clamp(i0 - T(1), T(0), T(1)); vec<4, T, Q> i1 = clamp(i0 - T(2), T(0), T(1)); // x0 = x0 - 0.0 + 0.0 * C.xxxx // x1 = x0 - i1 + 0.0 * C.xxxx // x2 = x0 - i2 + 0.0 * C.xxxx // x3 = x0 - i3 + 0.0 * C.xxxx // x4 = x0 - 1.0 + 4.0 * C.xxxx vec<4, T, Q> x1 = x0 - i1 + C.x; vec<4, T, Q> x2 = x0 - i2 + C.y; vec<4, T, Q> x3 = x0 - i3 + C.z; vec<4, T, Q> x4 = x0 + C.w; // Permutations i = mod(i, vec<4, T, Q>(289)); T j0 = detail::permute(detail::permute(detail::permute(detail::permute(i.w) + i.z) + i.y) + i.x); vec<4, T, Q> j1 = detail::permute(detail::permute(detail::permute(detail::permute( i.w + vec<4, T, Q>(i1.w, i2.w, i3.w, T(1))) + i.z + vec<4, T, Q>(i1.z, i2.z, i3.z, T(1))) + i.y + vec<4, T, Q>(i1.y, i2.y, i3.y, T(1))) + i.x + vec<4, T, Q>(i1.x, i2.x, i3.x, T(1))); // Gradients: 7x7x6 points over a cube, mapped onto a 4-cross polytope // 7*7*6 = 294, which is close to the ring size 17*17 = 289. vec<4, T, Q> ip = vec<4, T, Q>(T(1) / T(294), T(1) / T(49), T(1) / T(7), T(0)); vec<4, T, Q> p0 = gtc::grad4(j0, ip); vec<4, T, Q> p1 = gtc::grad4(j1.x, ip); vec<4, T, Q> p2 = gtc::grad4(j1.y, ip); vec<4, T, Q> p3 = gtc::grad4(j1.z, ip); vec<4, T, Q> p4 = gtc::grad4(j1.w, ip); // Normalise gradients vec<4, T, Q> norm = detail::taylorInvSqrt(vec<4, T, Q>(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3))); p0 *= norm.x; p1 *= norm.y; p2 *= norm.z; p3 *= norm.w; p4 *= detail::taylorInvSqrt(dot(p4, p4)); // Mix contributions from the five corners vec<3, T, Q> m0 = max(T(0.6) - vec<3, T, Q>(dot(x0, x0), dot(x1, x1), dot(x2, x2)), vec<3, T, Q>(0)); vec<2, T, Q> m1 = max(T(0.6) - vec<2, T, Q>(dot(x3, x3), dot(x4, x4) ), vec<2, T, Q>(0)); m0 = m0 * m0; m1 = m1 * m1; return T(49) * (dot(m0 * m0, vec<3, T, Q>(dot(p0, x0), dot(p1, x1), dot(p2, x2))) + dot(m1 * m1, vec<2, T, Q>(dot(p3, x3), dot(p4, x4)))); } }//namespace glm ================================================ FILE: libraries/glm/gtc/packing.hpp ================================================ /// @ref gtc_packing /// @file glm/gtc/packing.hpp /// /// @see core (dependence) /// /// @defgroup gtc_packing GLM_GTC_packing /// @ingroup gtc /// /// Include to use the features of this extension. /// /// This extension provides a set of function to convert vertors to packed /// formats. #pragma once // Dependency: #include "type_precision.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_GTC_packing extension included") #endif namespace glm { /// @addtogroup gtc_packing /// @{ /// First, converts the normalized floating-point value v into a 8-bit integer value. /// Then, the results are packed into the returned 8-bit unsigned integer. /// /// The conversion for component c of v to fixed point is done as follows: /// packUnorm1x8: round(clamp(c, 0, +1) * 255.0) /// /// @see gtc_packing /// @see uint16 packUnorm2x8(vec2 const& v) /// @see uint32 packUnorm4x8(vec4 const& v) /// @see GLSL packUnorm4x8 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL uint8 packUnorm1x8(float v); /// Convert a single 8-bit integer to a normalized floating-point value. /// /// The conversion for unpacked fixed-point value f to floating point is done as follows: /// unpackUnorm4x8: f / 255.0 /// /// @see gtc_packing /// @see vec2 unpackUnorm2x8(uint16 p) /// @see vec4 unpackUnorm4x8(uint32 p) /// @see GLSL unpackUnorm4x8 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL float unpackUnorm1x8(uint8 p); /// First, converts each component of the normalized floating-point value v into 8-bit integer values. /// Then, the results are packed into the returned 16-bit unsigned integer. /// /// The conversion for component c of v to fixed point is done as follows: /// packUnorm2x8: round(clamp(c, 0, +1) * 255.0) /// /// The first component of the vector will be written to the least significant bits of the output; /// the last component will be written to the most significant bits. /// /// @see gtc_packing /// @see uint8 packUnorm1x8(float const& v) /// @see uint32 packUnorm4x8(vec4 const& v) /// @see GLSL packUnorm4x8 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL uint16 packUnorm2x8(vec2 const& v); /// First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit unsigned integers. /// Then, each component is converted to a normalized floating-point value to generate the returned two-component vector. /// /// The conversion for unpacked fixed-point value f to floating point is done as follows: /// unpackUnorm4x8: f / 255.0 /// /// The first component of the returned vector will be extracted from the least significant bits of the input; /// the last component will be extracted from the most significant bits. /// /// @see gtc_packing /// @see float unpackUnorm1x8(uint8 v) /// @see vec4 unpackUnorm4x8(uint32 p) /// @see GLSL unpackUnorm4x8 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL vec2 unpackUnorm2x8(uint16 p); /// First, converts the normalized floating-point value v into 8-bit integer value. /// Then, the results are packed into the returned 8-bit unsigned integer. /// /// The conversion to fixed point is done as follows: /// packSnorm1x8: round(clamp(s, -1, +1) * 127.0) /// /// @see gtc_packing /// @see uint16 packSnorm2x8(vec2 const& v) /// @see uint32 packSnorm4x8(vec4 const& v) /// @see GLSL packSnorm4x8 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL uint8 packSnorm1x8(float s); /// First, unpacks a single 8-bit unsigned integer p into a single 8-bit signed integers. /// Then, the value is converted to a normalized floating-point value to generate the returned scalar. /// /// The conversion for unpacked fixed-point value f to floating point is done as follows: /// unpackSnorm1x8: clamp(f / 127.0, -1, +1) /// /// @see gtc_packing /// @see vec2 unpackSnorm2x8(uint16 p) /// @see vec4 unpackSnorm4x8(uint32 p) /// @see GLSL unpackSnorm4x8 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL float unpackSnorm1x8(uint8 p); /// First, converts each component of the normalized floating-point value v into 8-bit integer values. /// Then, the results are packed into the returned 16-bit unsigned integer. /// /// The conversion for component c of v to fixed point is done as follows: /// packSnorm2x8: round(clamp(c, -1, +1) * 127.0) /// /// The first component of the vector will be written to the least significant bits of the output; /// the last component will be written to the most significant bits. /// /// @see gtc_packing /// @see uint8 packSnorm1x8(float const& v) /// @see uint32 packSnorm4x8(vec4 const& v) /// @see GLSL packSnorm4x8 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL uint16 packSnorm2x8(vec2 const& v); /// First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit signed integers. /// Then, each component is converted to a normalized floating-point value to generate the returned two-component vector. /// /// The conversion for unpacked fixed-point value f to floating point is done as follows: /// unpackSnorm2x8: clamp(f / 127.0, -1, +1) /// /// The first component of the returned vector will be extracted from the least significant bits of the input; /// the last component will be extracted from the most significant bits. /// /// @see gtc_packing /// @see float unpackSnorm1x8(uint8 p) /// @see vec4 unpackSnorm4x8(uint32 p) /// @see GLSL unpackSnorm4x8 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL vec2 unpackSnorm2x8(uint16 p); /// First, converts the normalized floating-point value v into a 16-bit integer value. /// Then, the results are packed into the returned 16-bit unsigned integer. /// /// The conversion for component c of v to fixed point is done as follows: /// packUnorm1x16: round(clamp(c, 0, +1) * 65535.0) /// /// @see gtc_packing /// @see uint16 packSnorm1x16(float const& v) /// @see uint64 packSnorm4x16(vec4 const& v) /// @see GLSL packUnorm4x8 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL uint16 packUnorm1x16(float v); /// First, unpacks a single 16-bit unsigned integer p into a of 16-bit unsigned integers. /// Then, the value is converted to a normalized floating-point value to generate the returned scalar. /// /// The conversion for unpacked fixed-point value f to floating point is done as follows: /// unpackUnorm1x16: f / 65535.0 /// /// @see gtc_packing /// @see vec2 unpackUnorm2x16(uint32 p) /// @see vec4 unpackUnorm4x16(uint64 p) /// @see GLSL unpackUnorm2x16 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL float unpackUnorm1x16(uint16 p); /// First, converts each component of the normalized floating-point value v into 16-bit integer values. /// Then, the results are packed into the returned 64-bit unsigned integer. /// /// The conversion for component c of v to fixed point is done as follows: /// packUnorm4x16: round(clamp(c, 0, +1) * 65535.0) /// /// The first component of the vector will be written to the least significant bits of the output; /// the last component will be written to the most significant bits. /// /// @see gtc_packing /// @see uint16 packUnorm1x16(float const& v) /// @see uint32 packUnorm2x16(vec2 const& v) /// @see GLSL packUnorm4x8 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL uint64 packUnorm4x16(vec4 const& v); /// First, unpacks a single 64-bit unsigned integer p into four 16-bit unsigned integers. /// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector. /// /// The conversion for unpacked fixed-point value f to floating point is done as follows: /// unpackUnormx4x16: f / 65535.0 /// /// The first component of the returned vector will be extracted from the least significant bits of the input; /// the last component will be extracted from the most significant bits. /// /// @see gtc_packing /// @see float unpackUnorm1x16(uint16 p) /// @see vec2 unpackUnorm2x16(uint32 p) /// @see GLSL unpackUnorm2x16 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL vec4 unpackUnorm4x16(uint64 p); /// First, converts the normalized floating-point value v into 16-bit integer value. /// Then, the results are packed into the returned 16-bit unsigned integer. /// /// The conversion to fixed point is done as follows: /// packSnorm1x8: round(clamp(s, -1, +1) * 32767.0) /// /// @see gtc_packing /// @see uint32 packSnorm2x16(vec2 const& v) /// @see uint64 packSnorm4x16(vec4 const& v) /// @see GLSL packSnorm4x8 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL uint16 packSnorm1x16(float v); /// First, unpacks a single 16-bit unsigned integer p into a single 16-bit signed integers. /// Then, each component is converted to a normalized floating-point value to generate the returned scalar. /// /// The conversion for unpacked fixed-point value f to floating point is done as follows: /// unpackSnorm1x16: clamp(f / 32767.0, -1, +1) /// /// @see gtc_packing /// @see vec2 unpackSnorm2x16(uint32 p) /// @see vec4 unpackSnorm4x16(uint64 p) /// @see GLSL unpackSnorm4x8 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL float unpackSnorm1x16(uint16 p); /// First, converts each component of the normalized floating-point value v into 16-bit integer values. /// Then, the results are packed into the returned 64-bit unsigned integer. /// /// The conversion for component c of v to fixed point is done as follows: /// packSnorm2x8: round(clamp(c, -1, +1) * 32767.0) /// /// The first component of the vector will be written to the least significant bits of the output; /// the last component will be written to the most significant bits. /// /// @see gtc_packing /// @see uint16 packSnorm1x16(float const& v) /// @see uint32 packSnorm2x16(vec2 const& v) /// @see GLSL packSnorm4x8 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL uint64 packSnorm4x16(vec4 const& v); /// First, unpacks a single 64-bit unsigned integer p into four 16-bit signed integers. /// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector. /// /// The conversion for unpacked fixed-point value f to floating point is done as follows: /// unpackSnorm4x16: clamp(f / 32767.0, -1, +1) /// /// The first component of the returned vector will be extracted from the least significant bits of the input; /// the last component will be extracted from the most significant bits. /// /// @see gtc_packing /// @see float unpackSnorm1x16(uint16 p) /// @see vec2 unpackSnorm2x16(uint32 p) /// @see GLSL unpackSnorm4x8 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL vec4 unpackSnorm4x16(uint64 p); /// Returns an unsigned integer obtained by converting the components of a floating-point scalar /// to the 16-bit floating-point representation found in the OpenGL Specification, /// and then packing this 16-bit value into a 16-bit unsigned integer. /// /// @see gtc_packing /// @see uint32 packHalf2x16(vec2 const& v) /// @see uint64 packHalf4x16(vec4 const& v) /// @see GLSL packHalf2x16 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL uint16 packHalf1x16(float v); /// Returns a floating-point scalar with components obtained by unpacking a 16-bit unsigned integer into a 16-bit value, /// interpreted as a 16-bit floating-point number according to the OpenGL Specification, /// and converting it to 32-bit floating-point values. /// /// @see gtc_packing /// @see vec2 unpackHalf2x16(uint32 const& v) /// @see vec4 unpackHalf4x16(uint64 const& v) /// @see GLSL unpackHalf2x16 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL float unpackHalf1x16(uint16 v); /// Returns an unsigned integer obtained by converting the components of a four-component floating-point vector /// to the 16-bit floating-point representation found in the OpenGL Specification, /// and then packing these four 16-bit values into a 64-bit unsigned integer. /// The first vector component specifies the 16 least-significant bits of the result; /// the forth component specifies the 16 most-significant bits. /// /// @see gtc_packing /// @see uint16 packHalf1x16(float const& v) /// @see uint32 packHalf2x16(vec2 const& v) /// @see GLSL packHalf2x16 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL uint64 packHalf4x16(vec4 const& v); /// Returns a four-component floating-point vector with components obtained by unpacking a 64-bit unsigned integer into four 16-bit values, /// interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, /// and converting them to 32-bit floating-point values. /// The first component of the vector is obtained from the 16 least-significant bits of v; /// the forth component is obtained from the 16 most-significant bits of v. /// /// @see gtc_packing /// @see float unpackHalf1x16(uint16 const& v) /// @see vec2 unpackHalf2x16(uint32 const& v) /// @see GLSL unpackHalf2x16 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL vec4 unpackHalf4x16(uint64 p); /// Returns an unsigned integer obtained by converting the components of a four-component signed integer vector /// to the 10-10-10-2-bit signed integer representation found in the OpenGL Specification, /// and then packing these four values into a 32-bit unsigned integer. /// The first vector component specifies the 10 least-significant bits of the result; /// the forth component specifies the 2 most-significant bits. /// /// @see gtc_packing /// @see uint32 packI3x10_1x2(uvec4 const& v) /// @see uint32 packSnorm3x10_1x2(vec4 const& v) /// @see uint32 packUnorm3x10_1x2(vec4 const& v) /// @see ivec4 unpackI3x10_1x2(uint32 const& p) GLM_FUNC_DECL uint32 packI3x10_1x2(ivec4 const& v); /// Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit signed integers. /// /// The first component of the returned vector will be extracted from the least significant bits of the input; /// the last component will be extracted from the most significant bits. /// /// @see gtc_packing /// @see uint32 packU3x10_1x2(uvec4 const& v) /// @see vec4 unpackSnorm3x10_1x2(uint32 const& p); /// @see uvec4 unpackI3x10_1x2(uint32 const& p); GLM_FUNC_DECL ivec4 unpackI3x10_1x2(uint32 p); /// Returns an unsigned integer obtained by converting the components of a four-component unsigned integer vector /// to the 10-10-10-2-bit unsigned integer representation found in the OpenGL Specification, /// and then packing these four values into a 32-bit unsigned integer. /// The first vector component specifies the 10 least-significant bits of the result; /// the forth component specifies the 2 most-significant bits. /// /// @see gtc_packing /// @see uint32 packI3x10_1x2(ivec4 const& v) /// @see uint32 packSnorm3x10_1x2(vec4 const& v) /// @see uint32 packUnorm3x10_1x2(vec4 const& v) /// @see ivec4 unpackU3x10_1x2(uint32 const& p) GLM_FUNC_DECL uint32 packU3x10_1x2(uvec4 const& v); /// Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit unsigned integers. /// /// The first component of the returned vector will be extracted from the least significant bits of the input; /// the last component will be extracted from the most significant bits. /// /// @see gtc_packing /// @see uint32 packU3x10_1x2(uvec4 const& v) /// @see vec4 unpackSnorm3x10_1x2(uint32 const& p); /// @see uvec4 unpackI3x10_1x2(uint32 const& p); GLM_FUNC_DECL uvec4 unpackU3x10_1x2(uint32 p); /// First, converts the first three components of the normalized floating-point value v into 10-bit signed integer values. /// Then, converts the forth component of the normalized floating-point value v into 2-bit signed integer values. /// Then, the results are packed into the returned 32-bit unsigned integer. /// /// The conversion for component c of v to fixed point is done as follows: /// packSnorm3x10_1x2(xyz): round(clamp(c, -1, +1) * 511.0) /// packSnorm3x10_1x2(w): round(clamp(c, -1, +1) * 1.0) /// /// The first vector component specifies the 10 least-significant bits of the result; /// the forth component specifies the 2 most-significant bits. /// /// @see gtc_packing /// @see vec4 unpackSnorm3x10_1x2(uint32 const& p) /// @see uint32 packUnorm3x10_1x2(vec4 const& v) /// @see uint32 packU3x10_1x2(uvec4 const& v) /// @see uint32 packI3x10_1x2(ivec4 const& v) GLM_FUNC_DECL uint32 packSnorm3x10_1x2(vec4 const& v); /// First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers. /// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector. /// /// The conversion for unpacked fixed-point value f to floating point is done as follows: /// unpackSnorm3x10_1x2(xyz): clamp(f / 511.0, -1, +1) /// unpackSnorm3x10_1x2(w): clamp(f / 511.0, -1, +1) /// /// The first component of the returned vector will be extracted from the least significant bits of the input; /// the last component will be extracted from the most significant bits. /// /// @see gtc_packing /// @see uint32 packSnorm3x10_1x2(vec4 const& v) /// @see vec4 unpackUnorm3x10_1x2(uint32 const& p)) /// @see uvec4 unpackI3x10_1x2(uint32 const& p) /// @see uvec4 unpackU3x10_1x2(uint32 const& p) GLM_FUNC_DECL vec4 unpackSnorm3x10_1x2(uint32 p); /// First, converts the first three components of the normalized floating-point value v into 10-bit unsigned integer values. /// Then, converts the forth component of the normalized floating-point value v into 2-bit signed uninteger values. /// Then, the results are packed into the returned 32-bit unsigned integer. /// /// The conversion for component c of v to fixed point is done as follows: /// packUnorm3x10_1x2(xyz): round(clamp(c, 0, +1) * 1023.0) /// packUnorm3x10_1x2(w): round(clamp(c, 0, +1) * 3.0) /// /// The first vector component specifies the 10 least-significant bits of the result; /// the forth component specifies the 2 most-significant bits. /// /// @see gtc_packing /// @see vec4 unpackUnorm3x10_1x2(uint32 const& p) /// @see uint32 packUnorm3x10_1x2(vec4 const& v) /// @see uint32 packU3x10_1x2(uvec4 const& v) /// @see uint32 packI3x10_1x2(ivec4 const& v) GLM_FUNC_DECL uint32 packUnorm3x10_1x2(vec4 const& v); /// First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers. /// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector. /// /// The conversion for unpacked fixed-point value f to floating point is done as follows: /// unpackSnorm3x10_1x2(xyz): clamp(f / 1023.0, 0, +1) /// unpackSnorm3x10_1x2(w): clamp(f / 3.0, 0, +1) /// /// The first component of the returned vector will be extracted from the least significant bits of the input; /// the last component will be extracted from the most significant bits. /// /// @see gtc_packing /// @see uint32 packSnorm3x10_1x2(vec4 const& v) /// @see vec4 unpackInorm3x10_1x2(uint32 const& p)) /// @see uvec4 unpackI3x10_1x2(uint32 const& p) /// @see uvec4 unpackU3x10_1x2(uint32 const& p) GLM_FUNC_DECL vec4 unpackUnorm3x10_1x2(uint32 p); /// First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values. /// Then, converts the third component of the normalized floating-point value v into a 10-bit signless floating-point value. /// Then, the results are packed into the returned 32-bit unsigned integer. /// /// The first vector component specifies the 11 least-significant bits of the result; /// the last component specifies the 10 most-significant bits. /// /// @see gtc_packing /// @see vec3 unpackF2x11_1x10(uint32 const& p) GLM_FUNC_DECL uint32 packF2x11_1x10(vec3 const& v); /// First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value . /// Then, each component is converted to a normalized floating-point value to generate the returned three-component vector. /// /// The first component of the returned vector will be extracted from the least significant bits of the input; /// the last component will be extracted from the most significant bits. /// /// @see gtc_packing /// @see uint32 packF2x11_1x10(vec3 const& v) GLM_FUNC_DECL vec3 unpackF2x11_1x10(uint32 p); /// First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values. /// Then, converts the third component of the normalized floating-point value v into a 10-bit signless floating-point value. /// Then, the results are packed into the returned 32-bit unsigned integer. /// /// The first vector component specifies the 11 least-significant bits of the result; /// the last component specifies the 10 most-significant bits. /// /// packF3x9_E1x5 allows encoding into RGBE / RGB9E5 format /// /// @see gtc_packing /// @see vec3 unpackF3x9_E1x5(uint32 const& p) GLM_FUNC_DECL uint32 packF3x9_E1x5(vec3 const& v); /// First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value . /// Then, each component is converted to a normalized floating-point value to generate the returned three-component vector. /// /// The first component of the returned vector will be extracted from the least significant bits of the input; /// the last component will be extracted from the most significant bits. /// /// unpackF3x9_E1x5 allows decoding RGBE / RGB9E5 data /// /// @see gtc_packing /// @see uint32 packF3x9_E1x5(vec3 const& v) GLM_FUNC_DECL vec3 unpackF3x9_E1x5(uint32 p); /// Returns an unsigned integer vector obtained by converting the components of a floating-point vector /// to the 16-bit floating-point representation found in the OpenGL Specification. /// The first vector component specifies the 16 least-significant bits of the result; /// the forth component specifies the 16 most-significant bits. /// /// @see gtc_packing /// @see vec<3, T, Q> unpackRGBM(vec<4, T, Q> const& p) /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions template GLM_FUNC_DECL vec<4, T, Q> packRGBM(vec<3, T, Q> const& rgb); /// Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values. /// The first component of the vector is obtained from the 16 least-significant bits of v; /// the forth component is obtained from the 16 most-significant bits of v. /// /// @see gtc_packing /// @see vec<4, T, Q> packRGBM(vec<3, float, Q> const& v) /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions template GLM_FUNC_DECL vec<3, T, Q> unpackRGBM(vec<4, T, Q> const& rgbm); /// Returns an unsigned integer vector obtained by converting the components of a floating-point vector /// to the 16-bit floating-point representation found in the OpenGL Specification. /// The first vector component specifies the 16 least-significant bits of the result; /// the forth component specifies the 16 most-significant bits. /// /// @see gtc_packing /// @see vec unpackHalf(vec const& p) /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions template GLM_FUNC_DECL vec packHalf(vec const& v); /// Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values. /// The first component of the vector is obtained from the 16 least-significant bits of v; /// the forth component is obtained from the 16 most-significant bits of v. /// /// @see gtc_packing /// @see vec packHalf(vec const& v) /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions template GLM_FUNC_DECL vec unpackHalf(vec const& p); /// Convert each component of the normalized floating-point vector into unsigned integer values. /// /// @see gtc_packing /// @see vec unpackUnorm(vec const& p); template GLM_FUNC_DECL vec packUnorm(vec const& v); /// Convert a packed integer to a normalized floating-point vector. /// /// @see gtc_packing /// @see vec packUnorm(vec const& v) template GLM_FUNC_DECL vec unpackUnorm(vec const& v); /// Convert each component of the normalized floating-point vector into signed integer values. /// /// @see gtc_packing /// @see vec unpackSnorm(vec const& p); template GLM_FUNC_DECL vec packSnorm(vec const& v); /// Convert a packed integer to a normalized floating-point vector. /// /// @see gtc_packing /// @see vec packSnorm(vec const& v) template GLM_FUNC_DECL vec unpackSnorm(vec const& v); /// Convert each component of the normalized floating-point vector into unsigned integer values. /// /// @see gtc_packing /// @see vec2 unpackUnorm2x4(uint8 p) GLM_FUNC_DECL uint8 packUnorm2x4(vec2 const& v); /// Convert a packed integer to a normalized floating-point vector. /// /// @see gtc_packing /// @see uint8 packUnorm2x4(vec2 const& v) GLM_FUNC_DECL vec2 unpackUnorm2x4(uint8 p); /// Convert each component of the normalized floating-point vector into unsigned integer values. /// /// @see gtc_packing /// @see vec4 unpackUnorm4x4(uint16 p) GLM_FUNC_DECL uint16 packUnorm4x4(vec4 const& v); /// Convert a packed integer to a normalized floating-point vector. /// /// @see gtc_packing /// @see uint16 packUnorm4x4(vec4 const& v) GLM_FUNC_DECL vec4 unpackUnorm4x4(uint16 p); /// Convert each component of the normalized floating-point vector into unsigned integer values. /// /// @see gtc_packing /// @see vec3 unpackUnorm1x5_1x6_1x5(uint16 p) GLM_FUNC_DECL uint16 packUnorm1x5_1x6_1x5(vec3 const& v); /// Convert a packed integer to a normalized floating-point vector. /// /// @see gtc_packing /// @see uint16 packUnorm1x5_1x6_1x5(vec3 const& v) GLM_FUNC_DECL vec3 unpackUnorm1x5_1x6_1x5(uint16 p); /// Convert each component of the normalized floating-point vector into unsigned integer values. /// /// @see gtc_packing /// @see vec4 unpackUnorm3x5_1x1(uint16 p) GLM_FUNC_DECL uint16 packUnorm3x5_1x1(vec4 const& v); /// Convert a packed integer to a normalized floating-point vector. /// /// @see gtc_packing /// @see uint16 packUnorm3x5_1x1(vec4 const& v) GLM_FUNC_DECL vec4 unpackUnorm3x5_1x1(uint16 p); /// Convert each component of the normalized floating-point vector into unsigned integer values. /// /// @see gtc_packing /// @see vec3 unpackUnorm2x3_1x2(uint8 p) GLM_FUNC_DECL uint8 packUnorm2x3_1x2(vec3 const& v); /// Convert a packed integer to a normalized floating-point vector. /// /// @see gtc_packing /// @see uint8 packUnorm2x3_1x2(vec3 const& v) GLM_FUNC_DECL vec3 unpackUnorm2x3_1x2(uint8 p); /// Convert each component from an integer vector into a packed integer. /// /// @see gtc_packing /// @see i8vec2 unpackInt2x8(int16 p) GLM_FUNC_DECL int16 packInt2x8(i8vec2 const& v); /// Convert a packed integer into an integer vector. /// /// @see gtc_packing /// @see int16 packInt2x8(i8vec2 const& v) GLM_FUNC_DECL i8vec2 unpackInt2x8(int16 p); /// Convert each component from an integer vector into a packed unsigned integer. /// /// @see gtc_packing /// @see u8vec2 unpackInt2x8(uint16 p) GLM_FUNC_DECL uint16 packUint2x8(u8vec2 const& v); /// Convert a packed integer into an integer vector. /// /// @see gtc_packing /// @see uint16 packInt2x8(u8vec2 const& v) GLM_FUNC_DECL u8vec2 unpackUint2x8(uint16 p); /// Convert each component from an integer vector into a packed integer. /// /// @see gtc_packing /// @see i8vec4 unpackInt4x8(int32 p) GLM_FUNC_DECL int32 packInt4x8(i8vec4 const& v); /// Convert a packed integer into an integer vector. /// /// @see gtc_packing /// @see int32 packInt2x8(i8vec4 const& v) GLM_FUNC_DECL i8vec4 unpackInt4x8(int32 p); /// Convert each component from an integer vector into a packed unsigned integer. /// /// @see gtc_packing /// @see u8vec4 unpackUint4x8(uint32 p) GLM_FUNC_DECL uint32 packUint4x8(u8vec4 const& v); /// Convert a packed integer into an integer vector. /// /// @see gtc_packing /// @see uint32 packUint4x8(u8vec2 const& v) GLM_FUNC_DECL u8vec4 unpackUint4x8(uint32 p); /// Convert each component from an integer vector into a packed integer. /// /// @see gtc_packing /// @see i16vec2 unpackInt2x16(int p) GLM_FUNC_DECL int packInt2x16(i16vec2 const& v); /// Convert a packed integer into an integer vector. /// /// @see gtc_packing /// @see int packInt2x16(i16vec2 const& v) GLM_FUNC_DECL i16vec2 unpackInt2x16(int p); /// Convert each component from an integer vector into a packed integer. /// /// @see gtc_packing /// @see i16vec4 unpackInt4x16(int64 p) GLM_FUNC_DECL int64 packInt4x16(i16vec4 const& v); /// Convert a packed integer into an integer vector. /// /// @see gtc_packing /// @see int64 packInt4x16(i16vec4 const& v) GLM_FUNC_DECL i16vec4 unpackInt4x16(int64 p); /// Convert each component from an integer vector into a packed unsigned integer. /// /// @see gtc_packing /// @see u16vec2 unpackUint2x16(uint p) GLM_FUNC_DECL uint packUint2x16(u16vec2 const& v); /// Convert a packed integer into an integer vector. /// /// @see gtc_packing /// @see uint packUint2x16(u16vec2 const& v) GLM_FUNC_DECL u16vec2 unpackUint2x16(uint p); /// Convert each component from an integer vector into a packed unsigned integer. /// /// @see gtc_packing /// @see u16vec4 unpackUint4x16(uint64 p) GLM_FUNC_DECL uint64 packUint4x16(u16vec4 const& v); /// Convert a packed integer into an integer vector. /// /// @see gtc_packing /// @see uint64 packUint4x16(u16vec4 const& v) GLM_FUNC_DECL u16vec4 unpackUint4x16(uint64 p); /// Convert each component from an integer vector into a packed integer. /// /// @see gtc_packing /// @see i32vec2 unpackInt2x32(int p) GLM_FUNC_DECL int64 packInt2x32(i32vec2 const& v); /// Convert a packed integer into an integer vector. /// /// @see gtc_packing /// @see int packInt2x16(i32vec2 const& v) GLM_FUNC_DECL i32vec2 unpackInt2x32(int64 p); /// Convert each component from an integer vector into a packed unsigned integer. /// /// @see gtc_packing /// @see u32vec2 unpackUint2x32(int p) GLM_FUNC_DECL uint64 packUint2x32(u32vec2 const& v); /// Convert a packed integer into an integer vector. /// /// @see gtc_packing /// @see int packUint2x16(u32vec2 const& v) GLM_FUNC_DECL u32vec2 unpackUint2x32(uint64 p); /// @} }// namespace glm #include "packing.inl" ================================================ FILE: libraries/glm/gtc/packing.inl ================================================ /// @ref gtc_packing #include "../ext/scalar_relational.hpp" #include "../ext/vector_relational.hpp" #include "../common.hpp" #include "../vec2.hpp" #include "../vec3.hpp" #include "../vec4.hpp" #include "../detail/type_half.hpp" #include #include namespace glm{ namespace detail { GLM_FUNC_QUALIFIER glm::uint16 float2half(glm::uint32 f) { // 10 bits => EE EEEFFFFF // 11 bits => EEE EEFFFFFF // Half bits => SEEEEEFF FFFFFFFF // Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF // 0x00007c00 => 00000000 00000000 01111100 00000000 // 0x000003ff => 00000000 00000000 00000011 11111111 // 0x38000000 => 00111000 00000000 00000000 00000000 // 0x7f800000 => 01111111 10000000 00000000 00000000 // 0x00008000 => 00000000 00000000 10000000 00000000 return ((f >> 16) & 0x8000) | // sign ((((f & 0x7f800000) - 0x38000000) >> 13) & 0x7c00) | // exponential ((f >> 13) & 0x03ff); // Mantissa } GLM_FUNC_QUALIFIER glm::uint32 float2packed11(glm::uint32 f) { // 10 bits => EE EEEFFFFF // 11 bits => EEE EEFFFFFF // Half bits => SEEEEEFF FFFFFFFF // Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF // 0x000007c0 => 00000000 00000000 00000111 11000000 // 0x00007c00 => 00000000 00000000 01111100 00000000 // 0x000003ff => 00000000 00000000 00000011 11111111 // 0x38000000 => 00111000 00000000 00000000 00000000 // 0x7f800000 => 01111111 10000000 00000000 00000000 // 0x00008000 => 00000000 00000000 10000000 00000000 return ((((f & 0x7f800000) - 0x38000000) >> 17) & 0x07c0) | // exponential ((f >> 17) & 0x003f); // Mantissa } GLM_FUNC_QUALIFIER glm::uint32 packed11ToFloat(glm::uint32 p) { // 10 bits => EE EEEFFFFF // 11 bits => EEE EEFFFFFF // Half bits => SEEEEEFF FFFFFFFF // Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF // 0x000007c0 => 00000000 00000000 00000111 11000000 // 0x00007c00 => 00000000 00000000 01111100 00000000 // 0x000003ff => 00000000 00000000 00000011 11111111 // 0x38000000 => 00111000 00000000 00000000 00000000 // 0x7f800000 => 01111111 10000000 00000000 00000000 // 0x00008000 => 00000000 00000000 10000000 00000000 return ((((p & 0x07c0) << 17) + 0x38000000) & 0x7f800000) | // exponential ((p & 0x003f) << 17); // Mantissa } GLM_FUNC_QUALIFIER glm::uint32 float2packed10(glm::uint32 f) { // 10 bits => EE EEEFFFFF // 11 bits => EEE EEFFFFFF // Half bits => SEEEEEFF FFFFFFFF // Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF // 0x0000001F => 00000000 00000000 00000000 00011111 // 0x0000003F => 00000000 00000000 00000000 00111111 // 0x000003E0 => 00000000 00000000 00000011 11100000 // 0x000007C0 => 00000000 00000000 00000111 11000000 // 0x00007C00 => 00000000 00000000 01111100 00000000 // 0x000003FF => 00000000 00000000 00000011 11111111 // 0x38000000 => 00111000 00000000 00000000 00000000 // 0x7f800000 => 01111111 10000000 00000000 00000000 // 0x00008000 => 00000000 00000000 10000000 00000000 return ((((f & 0x7f800000) - 0x38000000) >> 18) & 0x03E0) | // exponential ((f >> 18) & 0x001f); // Mantissa } GLM_FUNC_QUALIFIER glm::uint32 packed10ToFloat(glm::uint32 p) { // 10 bits => EE EEEFFFFF // 11 bits => EEE EEFFFFFF // Half bits => SEEEEEFF FFFFFFFF // Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF // 0x0000001F => 00000000 00000000 00000000 00011111 // 0x0000003F => 00000000 00000000 00000000 00111111 // 0x000003E0 => 00000000 00000000 00000011 11100000 // 0x000007C0 => 00000000 00000000 00000111 11000000 // 0x00007C00 => 00000000 00000000 01111100 00000000 // 0x000003FF => 00000000 00000000 00000011 11111111 // 0x38000000 => 00111000 00000000 00000000 00000000 // 0x7f800000 => 01111111 10000000 00000000 00000000 // 0x00008000 => 00000000 00000000 10000000 00000000 return ((((p & 0x03E0) << 18) + 0x38000000) & 0x7f800000) | // exponential ((p & 0x001f) << 18); // Mantissa } GLM_FUNC_QUALIFIER glm::uint half2float(glm::uint h) { return ((h & 0x8000) << 16) | ((( h & 0x7c00) + 0x1C000) << 13) | ((h & 0x03FF) << 13); } GLM_FUNC_QUALIFIER glm::uint floatTo11bit(float x) { if(x == 0.0f) return 0u; else if(glm::isnan(x)) return ~0u; else if(glm::isinf(x)) return 0x1Fu << 6u; uint Pack = 0u; memcpy(&Pack, &x, sizeof(Pack)); return float2packed11(Pack); } GLM_FUNC_QUALIFIER float packed11bitToFloat(glm::uint x) { if(x == 0) return 0.0f; else if(x == ((1 << 11) - 1)) return ~0;//NaN else if(x == (0x1f << 6)) return ~0;//Inf uint Result = packed11ToFloat(x); float Temp = 0; memcpy(&Temp, &Result, sizeof(Temp)); return Temp; } GLM_FUNC_QUALIFIER glm::uint floatTo10bit(float x) { if(x == 0.0f) return 0u; else if(glm::isnan(x)) return ~0u; else if(glm::isinf(x)) return 0x1Fu << 5u; uint Pack = 0; memcpy(&Pack, &x, sizeof(Pack)); return float2packed10(Pack); } GLM_FUNC_QUALIFIER float packed10bitToFloat(glm::uint x) { if(x == 0) return 0.0f; else if(x == ((1 << 10) - 1)) return ~0;//NaN else if(x == (0x1f << 5)) return ~0;//Inf uint Result = packed10ToFloat(x); float Temp = 0; memcpy(&Temp, &Result, sizeof(Temp)); return Temp; } // GLM_FUNC_QUALIFIER glm::uint f11_f11_f10(float x, float y, float z) // { // return ((floatTo11bit(x) & ((1 << 11) - 1)) << 0) | ((floatTo11bit(y) & ((1 << 11) - 1)) << 11) | ((floatTo10bit(z) & ((1 << 10) - 1)) << 22); // } union u3u3u2 { struct { uint x : 3; uint y : 3; uint z : 2; } data; uint8 pack; }; union u4u4 { struct { uint x : 4; uint y : 4; } data; uint8 pack; }; union u4u4u4u4 { struct { uint x : 4; uint y : 4; uint z : 4; uint w : 4; } data; uint16 pack; }; union u5u6u5 { struct { uint x : 5; uint y : 6; uint z : 5; } data; uint16 pack; }; union u5u5u5u1 { struct { uint x : 5; uint y : 5; uint z : 5; uint w : 1; } data; uint16 pack; }; union u10u10u10u2 { struct { uint x : 10; uint y : 10; uint z : 10; uint w : 2; } data; uint32 pack; }; union i10i10i10i2 { struct { int x : 10; int y : 10; int z : 10; int w : 2; } data; uint32 pack; }; union u9u9u9e5 { struct { uint x : 9; uint y : 9; uint z : 9; uint w : 5; } data; uint32 pack; }; template struct compute_half {}; template struct compute_half<1, Q> { GLM_FUNC_QUALIFIER static vec<1, uint16, Q> pack(vec<1, float, Q> const& v) { int16 const Unpack(detail::toFloat16(v.x)); u16vec1 Packed; memcpy(&Packed, &Unpack, sizeof(Packed)); return Packed; } GLM_FUNC_QUALIFIER static vec<1, float, Q> unpack(vec<1, uint16, Q> const& v) { i16vec1 Unpack; memcpy(&Unpack, &v, sizeof(Unpack)); return vec<1, float, Q>(detail::toFloat32(v.x)); } }; template struct compute_half<2, Q> { GLM_FUNC_QUALIFIER static vec<2, uint16, Q> pack(vec<2, float, Q> const& v) { vec<2, int16, Q> const Unpack(detail::toFloat16(v.x), detail::toFloat16(v.y)); u16vec2 Packed; memcpy(&Packed, &Unpack, sizeof(Packed)); return Packed; } GLM_FUNC_QUALIFIER static vec<2, float, Q> unpack(vec<2, uint16, Q> const& v) { i16vec2 Unpack; memcpy(&Unpack, &v, sizeof(Unpack)); return vec<2, float, Q>(detail::toFloat32(v.x), detail::toFloat32(v.y)); } }; template struct compute_half<3, Q> { GLM_FUNC_QUALIFIER static vec<3, uint16, Q> pack(vec<3, float, Q> const& v) { vec<3, int16, Q> const Unpack(detail::toFloat16(v.x), detail::toFloat16(v.y), detail::toFloat16(v.z)); u16vec3 Packed; memcpy(&Packed, &Unpack, sizeof(Packed)); return Packed; } GLM_FUNC_QUALIFIER static vec<3, float, Q> unpack(vec<3, uint16, Q> const& v) { i16vec3 Unpack; memcpy(&Unpack, &v, sizeof(Unpack)); return vec<3, float, Q>(detail::toFloat32(v.x), detail::toFloat32(v.y), detail::toFloat32(v.z)); } }; template struct compute_half<4, Q> { GLM_FUNC_QUALIFIER static vec<4, uint16, Q> pack(vec<4, float, Q> const& v) { vec<4, int16, Q> const Unpack(detail::toFloat16(v.x), detail::toFloat16(v.y), detail::toFloat16(v.z), detail::toFloat16(v.w)); u16vec4 Packed; memcpy(&Packed, &Unpack, sizeof(Packed)); return Packed; } GLM_FUNC_QUALIFIER static vec<4, float, Q> unpack(vec<4, uint16, Q> const& v) { i16vec4 Unpack; memcpy(&Unpack, &v, sizeof(Unpack)); return vec<4, float, Q>(detail::toFloat32(v.x), detail::toFloat32(v.y), detail::toFloat32(v.z), detail::toFloat32(v.w)); } }; }//namespace detail GLM_FUNC_QUALIFIER uint8 packUnorm1x8(float v) { return static_cast(round(clamp(v, 0.0f, 1.0f) * 255.0f)); } GLM_FUNC_QUALIFIER float unpackUnorm1x8(uint8 p) { float const Unpack(p); return Unpack * static_cast(0.0039215686274509803921568627451); // 1 / 255 } GLM_FUNC_QUALIFIER uint16 packUnorm2x8(vec2 const& v) { u8vec2 const Topack(round(clamp(v, 0.0f, 1.0f) * 255.0f)); uint16 Unpack = 0; memcpy(&Unpack, &Topack, sizeof(Unpack)); return Unpack; } GLM_FUNC_QUALIFIER vec2 unpackUnorm2x8(uint16 p) { u8vec2 Unpack; memcpy(&Unpack, &p, sizeof(Unpack)); return vec2(Unpack) * float(0.0039215686274509803921568627451); // 1 / 255 } GLM_FUNC_QUALIFIER uint8 packSnorm1x8(float v) { int8 const Topack(static_cast(round(clamp(v ,-1.0f, 1.0f) * 127.0f))); uint8 Packed = 0; memcpy(&Packed, &Topack, sizeof(Packed)); return Packed; } GLM_FUNC_QUALIFIER float unpackSnorm1x8(uint8 p) { int8 Unpack = 0; memcpy(&Unpack, &p, sizeof(Unpack)); return clamp( static_cast(Unpack) * 0.00787401574803149606299212598425f, // 1.0f / 127.0f -1.0f, 1.0f); } GLM_FUNC_QUALIFIER uint16 packSnorm2x8(vec2 const& v) { i8vec2 const Topack(round(clamp(v, -1.0f, 1.0f) * 127.0f)); uint16 Packed = 0; memcpy(&Packed, &Topack, sizeof(Packed)); return Packed; } GLM_FUNC_QUALIFIER vec2 unpackSnorm2x8(uint16 p) { i8vec2 Unpack; memcpy(&Unpack, &p, sizeof(Unpack)); return clamp( vec2(Unpack) * 0.00787401574803149606299212598425f, // 1.0f / 127.0f -1.0f, 1.0f); } GLM_FUNC_QUALIFIER uint16 packUnorm1x16(float s) { return static_cast(round(clamp(s, 0.0f, 1.0f) * 65535.0f)); } GLM_FUNC_QUALIFIER float unpackUnorm1x16(uint16 p) { float const Unpack(p); return Unpack * 1.5259021896696421759365224689097e-5f; // 1.0 / 65535.0 } GLM_FUNC_QUALIFIER uint64 packUnorm4x16(vec4 const& v) { u16vec4 const Topack(round(clamp(v , 0.0f, 1.0f) * 65535.0f)); uint64 Packed = 0; memcpy(&Packed, &Topack, sizeof(Packed)); return Packed; } GLM_FUNC_QUALIFIER vec4 unpackUnorm4x16(uint64 p) { u16vec4 Unpack; memcpy(&Unpack, &p, sizeof(Unpack)); return vec4(Unpack) * 1.5259021896696421759365224689097e-5f; // 1.0 / 65535.0 } GLM_FUNC_QUALIFIER uint16 packSnorm1x16(float v) { int16 const Topack = static_cast(round(clamp(v ,-1.0f, 1.0f) * 32767.0f)); uint16 Packed = 0; memcpy(&Packed, &Topack, sizeof(Packed)); return Packed; } GLM_FUNC_QUALIFIER float unpackSnorm1x16(uint16 p) { int16 Unpack = 0; memcpy(&Unpack, &p, sizeof(Unpack)); return clamp( static_cast(Unpack) * 3.0518509475997192297128208258309e-5f, //1.0f / 32767.0f, -1.0f, 1.0f); } GLM_FUNC_QUALIFIER uint64 packSnorm4x16(vec4 const& v) { i16vec4 const Topack(round(clamp(v ,-1.0f, 1.0f) * 32767.0f)); uint64 Packed = 0; memcpy(&Packed, &Topack, sizeof(Packed)); return Packed; } GLM_FUNC_QUALIFIER vec4 unpackSnorm4x16(uint64 p) { i16vec4 Unpack; memcpy(&Unpack, &p, sizeof(Unpack)); return clamp( vec4(Unpack) * 3.0518509475997192297128208258309e-5f, //1.0f / 32767.0f, -1.0f, 1.0f); } GLM_FUNC_QUALIFIER uint16 packHalf1x16(float v) { int16 const Topack(detail::toFloat16(v)); uint16 Packed = 0; memcpy(&Packed, &Topack, sizeof(Packed)); return Packed; } GLM_FUNC_QUALIFIER float unpackHalf1x16(uint16 v) { int16 Unpack = 0; memcpy(&Unpack, &v, sizeof(Unpack)); return detail::toFloat32(Unpack); } GLM_FUNC_QUALIFIER uint64 packHalf4x16(glm::vec4 const& v) { i16vec4 const Unpack( detail::toFloat16(v.x), detail::toFloat16(v.y), detail::toFloat16(v.z), detail::toFloat16(v.w)); uint64 Packed = 0; memcpy(&Packed, &Unpack, sizeof(Packed)); return Packed; } GLM_FUNC_QUALIFIER glm::vec4 unpackHalf4x16(uint64 v) { i16vec4 Unpack; memcpy(&Unpack, &v, sizeof(Unpack)); return vec4( detail::toFloat32(Unpack.x), detail::toFloat32(Unpack.y), detail::toFloat32(Unpack.z), detail::toFloat32(Unpack.w)); } GLM_FUNC_QUALIFIER uint32 packI3x10_1x2(ivec4 const& v) { detail::i10i10i10i2 Result; Result.data.x = v.x; Result.data.y = v.y; Result.data.z = v.z; Result.data.w = v.w; return Result.pack; } GLM_FUNC_QUALIFIER ivec4 unpackI3x10_1x2(uint32 v) { detail::i10i10i10i2 Unpack; Unpack.pack = v; return ivec4( Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w); } GLM_FUNC_QUALIFIER uint32 packU3x10_1x2(uvec4 const& v) { detail::u10u10u10u2 Result; Result.data.x = v.x; Result.data.y = v.y; Result.data.z = v.z; Result.data.w = v.w; return Result.pack; } GLM_FUNC_QUALIFIER uvec4 unpackU3x10_1x2(uint32 v) { detail::u10u10u10u2 Unpack; Unpack.pack = v; return uvec4( Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w); } GLM_FUNC_QUALIFIER uint32 packSnorm3x10_1x2(vec4 const& v) { ivec4 const Pack(round(clamp(v,-1.0f, 1.0f) * vec4(511.f, 511.f, 511.f, 1.f))); detail::i10i10i10i2 Result; Result.data.x = Pack.x; Result.data.y = Pack.y; Result.data.z = Pack.z; Result.data.w = Pack.w; return Result.pack; } GLM_FUNC_QUALIFIER vec4 unpackSnorm3x10_1x2(uint32 v) { detail::i10i10i10i2 Unpack; Unpack.pack = v; vec4 const Result(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w); return clamp(Result * vec4(1.f / 511.f, 1.f / 511.f, 1.f / 511.f, 1.f), -1.0f, 1.0f); } GLM_FUNC_QUALIFIER uint32 packUnorm3x10_1x2(vec4 const& v) { uvec4 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec4(1023.f, 1023.f, 1023.f, 3.f))); detail::u10u10u10u2 Result; Result.data.x = Unpack.x; Result.data.y = Unpack.y; Result.data.z = Unpack.z; Result.data.w = Unpack.w; return Result.pack; } GLM_FUNC_QUALIFIER vec4 unpackUnorm3x10_1x2(uint32 v) { vec4 const ScaleFactors(1.0f / 1023.f, 1.0f / 1023.f, 1.0f / 1023.f, 1.0f / 3.f); detail::u10u10u10u2 Unpack; Unpack.pack = v; return vec4(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w) * ScaleFactors; } GLM_FUNC_QUALIFIER uint32 packF2x11_1x10(vec3 const& v) { return ((detail::floatTo11bit(v.x) & ((1 << 11) - 1)) << 0) | ((detail::floatTo11bit(v.y) & ((1 << 11) - 1)) << 11) | ((detail::floatTo10bit(v.z) & ((1 << 10) - 1)) << 22); } GLM_FUNC_QUALIFIER vec3 unpackF2x11_1x10(uint32 v) { return vec3( detail::packed11bitToFloat(v >> 0), detail::packed11bitToFloat(v >> 11), detail::packed10bitToFloat(v >> 22)); } GLM_FUNC_QUALIFIER uint32 packF3x9_E1x5(vec3 const& v) { float const SharedExpMax = (pow(2.0f, 9.0f - 1.0f) / pow(2.0f, 9.0f)) * pow(2.0f, 31.f - 15.f); vec3 const Color = clamp(v, 0.0f, SharedExpMax); float const MaxColor = max(Color.x, max(Color.y, Color.z)); float const ExpSharedP = max(-15.f - 1.f, floor(log2(MaxColor))) + 1.0f + 15.f; float const MaxShared = floor(MaxColor / pow(2.0f, (ExpSharedP - 15.f - 9.f)) + 0.5f); float const ExpShared = equal(MaxShared, pow(2.0f, 9.0f), epsilon()) ? ExpSharedP + 1.0f : ExpSharedP; uvec3 const ColorComp(floor(Color / pow(2.f, (ExpShared - 15.f - 9.f)) + 0.5f)); detail::u9u9u9e5 Unpack; Unpack.data.x = ColorComp.x; Unpack.data.y = ColorComp.y; Unpack.data.z = ColorComp.z; Unpack.data.w = uint(ExpShared); return Unpack.pack; } GLM_FUNC_QUALIFIER vec3 unpackF3x9_E1x5(uint32 v) { detail::u9u9u9e5 Unpack; Unpack.pack = v; return vec3(Unpack.data.x, Unpack.data.y, Unpack.data.z) * pow(2.0f, Unpack.data.w - 15.f - 9.f); } // Based on Brian Karis http://graphicrants.blogspot.fr/2009/04/rgbm-color-encoding.html template GLM_FUNC_QUALIFIER vec<4, T, Q> packRGBM(vec<3, T, Q> const& rgb) { vec<3, T, Q> const Color(rgb * static_cast(1.0 / 6.0)); T Alpha = clamp(max(max(Color.x, Color.y), max(Color.z, static_cast(1e-6))), static_cast(0), static_cast(1)); Alpha = ceil(Alpha * static_cast(255.0)) / static_cast(255.0); return vec<4, T, Q>(Color / Alpha, Alpha); } template GLM_FUNC_QUALIFIER vec<3, T, Q> unpackRGBM(vec<4, T, Q> const& rgbm) { return vec<3, T, Q>(rgbm.x, rgbm.y, rgbm.z) * rgbm.w * static_cast(6); } template GLM_FUNC_QUALIFIER vec packHalf(vec const& v) { return detail::compute_half::pack(v); } template GLM_FUNC_QUALIFIER vec unpackHalf(vec const& v) { return detail::compute_half::unpack(v); } template GLM_FUNC_QUALIFIER vec packUnorm(vec const& v) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "uintType must be an integer type"); GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "floatType must be a floating point type"); return vec(round(clamp(v, static_cast(0), static_cast(1)) * static_cast(std::numeric_limits::max()))); } template GLM_FUNC_QUALIFIER vec unpackUnorm(vec const& v) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "uintType must be an integer type"); GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "floatType must be a floating point type"); return vec(v) * (static_cast(1) / static_cast(std::numeric_limits::max())); } template GLM_FUNC_QUALIFIER vec packSnorm(vec const& v) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "uintType must be an integer type"); GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "floatType must be a floating point type"); return vec(round(clamp(v , static_cast(-1), static_cast(1)) * static_cast(std::numeric_limits::max()))); } template GLM_FUNC_QUALIFIER vec unpackSnorm(vec const& v) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "uintType must be an integer type"); GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "floatType must be a floating point type"); return clamp(vec(v) * (static_cast(1) / static_cast(std::numeric_limits::max())), static_cast(-1), static_cast(1)); } GLM_FUNC_QUALIFIER uint8 packUnorm2x4(vec2 const& v) { u32vec2 const Unpack(round(clamp(v, 0.0f, 1.0f) * 15.0f)); detail::u4u4 Result; Result.data.x = Unpack.x; Result.data.y = Unpack.y; return Result.pack; } GLM_FUNC_QUALIFIER vec2 unpackUnorm2x4(uint8 v) { float const ScaleFactor(1.f / 15.f); detail::u4u4 Unpack; Unpack.pack = v; return vec2(Unpack.data.x, Unpack.data.y) * ScaleFactor; } GLM_FUNC_QUALIFIER uint16 packUnorm4x4(vec4 const& v) { u32vec4 const Unpack(round(clamp(v, 0.0f, 1.0f) * 15.0f)); detail::u4u4u4u4 Result; Result.data.x = Unpack.x; Result.data.y = Unpack.y; Result.data.z = Unpack.z; Result.data.w = Unpack.w; return Result.pack; } GLM_FUNC_QUALIFIER vec4 unpackUnorm4x4(uint16 v) { float const ScaleFactor(1.f / 15.f); detail::u4u4u4u4 Unpack; Unpack.pack = v; return vec4(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w) * ScaleFactor; } GLM_FUNC_QUALIFIER uint16 packUnorm1x5_1x6_1x5(vec3 const& v) { u32vec3 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec3(31.f, 63.f, 31.f))); detail::u5u6u5 Result; Result.data.x = Unpack.x; Result.data.y = Unpack.y; Result.data.z = Unpack.z; return Result.pack; } GLM_FUNC_QUALIFIER vec3 unpackUnorm1x5_1x6_1x5(uint16 v) { vec3 const ScaleFactor(1.f / 31.f, 1.f / 63.f, 1.f / 31.f); detail::u5u6u5 Unpack; Unpack.pack = v; return vec3(Unpack.data.x, Unpack.data.y, Unpack.data.z) * ScaleFactor; } GLM_FUNC_QUALIFIER uint16 packUnorm3x5_1x1(vec4 const& v) { u32vec4 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec4(31.f, 31.f, 31.f, 1.f))); detail::u5u5u5u1 Result; Result.data.x = Unpack.x; Result.data.y = Unpack.y; Result.data.z = Unpack.z; Result.data.w = Unpack.w; return Result.pack; } GLM_FUNC_QUALIFIER vec4 unpackUnorm3x5_1x1(uint16 v) { vec4 const ScaleFactor(1.f / 31.f, 1.f / 31.f, 1.f / 31.f, 1.f); detail::u5u5u5u1 Unpack; Unpack.pack = v; return vec4(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w) * ScaleFactor; } GLM_FUNC_QUALIFIER uint8 packUnorm2x3_1x2(vec3 const& v) { u32vec3 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec3(7.f, 7.f, 3.f))); detail::u3u3u2 Result; Result.data.x = Unpack.x; Result.data.y = Unpack.y; Result.data.z = Unpack.z; return Result.pack; } GLM_FUNC_QUALIFIER vec3 unpackUnorm2x3_1x2(uint8 v) { vec3 const ScaleFactor(1.f / 7.f, 1.f / 7.f, 1.f / 3.f); detail::u3u3u2 Unpack; Unpack.pack = v; return vec3(Unpack.data.x, Unpack.data.y, Unpack.data.z) * ScaleFactor; } GLM_FUNC_QUALIFIER int16 packInt2x8(i8vec2 const& v) { int16 Pack = 0; memcpy(&Pack, &v, sizeof(Pack)); return Pack; } GLM_FUNC_QUALIFIER i8vec2 unpackInt2x8(int16 p) { i8vec2 Unpack; memcpy(&Unpack, &p, sizeof(Unpack)); return Unpack; } GLM_FUNC_QUALIFIER uint16 packUint2x8(u8vec2 const& v) { uint16 Pack = 0; memcpy(&Pack, &v, sizeof(Pack)); return Pack; } GLM_FUNC_QUALIFIER u8vec2 unpackUint2x8(uint16 p) { u8vec2 Unpack; memcpy(&Unpack, &p, sizeof(Unpack)); return Unpack; } GLM_FUNC_QUALIFIER int32 packInt4x8(i8vec4 const& v) { int32 Pack = 0; memcpy(&Pack, &v, sizeof(Pack)); return Pack; } GLM_FUNC_QUALIFIER i8vec4 unpackInt4x8(int32 p) { i8vec4 Unpack; memcpy(&Unpack, &p, sizeof(Unpack)); return Unpack; } GLM_FUNC_QUALIFIER uint32 packUint4x8(u8vec4 const& v) { uint32 Pack = 0; memcpy(&Pack, &v, sizeof(Pack)); return Pack; } GLM_FUNC_QUALIFIER u8vec4 unpackUint4x8(uint32 p) { u8vec4 Unpack; memcpy(&Unpack, &p, sizeof(Unpack)); return Unpack; } GLM_FUNC_QUALIFIER int packInt2x16(i16vec2 const& v) { int Pack = 0; memcpy(&Pack, &v, sizeof(Pack)); return Pack; } GLM_FUNC_QUALIFIER i16vec2 unpackInt2x16(int p) { i16vec2 Unpack; memcpy(&Unpack, &p, sizeof(Unpack)); return Unpack; } GLM_FUNC_QUALIFIER int64 packInt4x16(i16vec4 const& v) { int64 Pack = 0; memcpy(&Pack, &v, sizeof(Pack)); return Pack; } GLM_FUNC_QUALIFIER i16vec4 unpackInt4x16(int64 p) { i16vec4 Unpack; memcpy(&Unpack, &p, sizeof(Unpack)); return Unpack; } GLM_FUNC_QUALIFIER uint packUint2x16(u16vec2 const& v) { uint Pack = 0; memcpy(&Pack, &v, sizeof(Pack)); return Pack; } GLM_FUNC_QUALIFIER u16vec2 unpackUint2x16(uint p) { u16vec2 Unpack; memcpy(&Unpack, &p, sizeof(Unpack)); return Unpack; } GLM_FUNC_QUALIFIER uint64 packUint4x16(u16vec4 const& v) { uint64 Pack = 0; memcpy(&Pack, &v, sizeof(Pack)); return Pack; } GLM_FUNC_QUALIFIER u16vec4 unpackUint4x16(uint64 p) { u16vec4 Unpack; memcpy(&Unpack, &p, sizeof(Unpack)); return Unpack; } GLM_FUNC_QUALIFIER int64 packInt2x32(i32vec2 const& v) { int64 Pack = 0; memcpy(&Pack, &v, sizeof(Pack)); return Pack; } GLM_FUNC_QUALIFIER i32vec2 unpackInt2x32(int64 p) { i32vec2 Unpack; memcpy(&Unpack, &p, sizeof(Unpack)); return Unpack; } GLM_FUNC_QUALIFIER uint64 packUint2x32(u32vec2 const& v) { uint64 Pack = 0; memcpy(&Pack, &v, sizeof(Pack)); return Pack; } GLM_FUNC_QUALIFIER u32vec2 unpackUint2x32(uint64 p) { u32vec2 Unpack; memcpy(&Unpack, &p, sizeof(Unpack)); return Unpack; } }//namespace glm ================================================ FILE: libraries/glm/gtc/quaternion.hpp ================================================ /// @ref gtc_quaternion /// @file glm/gtc/quaternion.hpp /// /// @see core (dependence) /// @see gtc_constants (dependence) /// /// @defgroup gtc_quaternion GLM_GTC_quaternion /// @ingroup gtc /// /// Include to use the features of this extension. /// /// Defines a templated quaternion type and several quaternion operations. #pragma once // Dependency: #include "../gtc/constants.hpp" #include "../gtc/matrix_transform.hpp" #include "../ext/vector_relational.hpp" #include "../ext/quaternion_common.hpp" #include "../ext/quaternion_float.hpp" #include "../ext/quaternion_float_precision.hpp" #include "../ext/quaternion_double.hpp" #include "../ext/quaternion_double_precision.hpp" #include "../ext/quaternion_relational.hpp" #include "../ext/quaternion_geometric.hpp" #include "../ext/quaternion_trigonometric.hpp" #include "../ext/quaternion_transform.hpp" #include "../detail/type_mat3x3.hpp" #include "../detail/type_mat4x4.hpp" #include "../detail/type_vec3.hpp" #include "../detail/type_vec4.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_GTC_quaternion extension included") #endif namespace glm { /// @addtogroup gtc_quaternion /// @{ /// Returns euler angles, pitch as x, yaw as y, roll as z. /// The result is expressed in radians. /// /// @tparam T Floating-point scalar types. /// /// @see gtc_quaternion template GLM_FUNC_DECL vec<3, T, Q> eulerAngles(qua const& x); /// Returns roll value of euler angles expressed in radians. /// /// @tparam T Floating-point scalar types. /// /// @see gtc_quaternion template GLM_FUNC_DECL T roll(qua const& x); /// Returns pitch value of euler angles expressed in radians. /// /// @tparam T Floating-point scalar types. /// /// @see gtc_quaternion template GLM_FUNC_DECL T pitch(qua const& x); /// Returns yaw value of euler angles expressed in radians. /// /// @tparam T Floating-point scalar types. /// /// @see gtc_quaternion template GLM_FUNC_DECL T yaw(qua const& x); /// Converts a quaternion to a 3 * 3 matrix. /// /// @tparam T Floating-point scalar types. /// /// @see gtc_quaternion template GLM_FUNC_DECL mat<3, 3, T, Q> mat3_cast(qua const& x); /// Converts a quaternion to a 4 * 4 matrix. /// /// @tparam T Floating-point scalar types. /// /// @see gtc_quaternion template GLM_FUNC_DECL mat<4, 4, T, Q> mat4_cast(qua const& x); /// Converts a pure rotation 3 * 3 matrix to a quaternion. /// /// @tparam T Floating-point scalar types. /// /// @see gtc_quaternion template GLM_FUNC_DECL qua quat_cast(mat<3, 3, T, Q> const& x); /// Converts a pure rotation 4 * 4 matrix to a quaternion. /// /// @tparam T Floating-point scalar types. /// /// @see gtc_quaternion template GLM_FUNC_DECL qua quat_cast(mat<4, 4, T, Q> const& x); /// Returns the component-wise comparison result of x < y. /// /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see ext_quaternion_relational template GLM_FUNC_DECL vec<4, bool, Q> lessThan(qua const& x, qua const& y); /// Returns the component-wise comparison of result x <= y. /// /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see ext_quaternion_relational template GLM_FUNC_DECL vec<4, bool, Q> lessThanEqual(qua const& x, qua const& y); /// Returns the component-wise comparison of result x > y. /// /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see ext_quaternion_relational template GLM_FUNC_DECL vec<4, bool, Q> greaterThan(qua const& x, qua const& y); /// Returns the component-wise comparison of result x >= y. /// /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see ext_quaternion_relational template GLM_FUNC_DECL vec<4, bool, Q> greaterThanEqual(qua const& x, qua const& y); /// Build a look at quaternion based on the default handedness. /// /// @param direction Desired forward direction. Needs to be normalized. /// @param up Up vector, how the camera is oriented. Typically (0, 1, 0). template GLM_FUNC_DECL qua quatLookAt( vec<3, T, Q> const& direction, vec<3, T, Q> const& up); /// Build a right-handed look at quaternion. /// /// @param direction Desired forward direction onto which the -z-axis gets mapped. Needs to be normalized. /// @param up Up vector, how the camera is oriented. Typically (0, 1, 0). template GLM_FUNC_DECL qua quatLookAtRH( vec<3, T, Q> const& direction, vec<3, T, Q> const& up); /// Build a left-handed look at quaternion. /// /// @param direction Desired forward direction onto which the +z-axis gets mapped. Needs to be normalized. /// @param up Up vector, how the camera is oriented. Typically (0, 1, 0). template GLM_FUNC_DECL qua quatLookAtLH( vec<3, T, Q> const& direction, vec<3, T, Q> const& up); /// @} } //namespace glm #include "quaternion.inl" ================================================ FILE: libraries/glm/gtc/quaternion.inl ================================================ #include "../trigonometric.hpp" #include "../geometric.hpp" #include "../exponential.hpp" #include "epsilon.hpp" #include namespace glm { template GLM_FUNC_QUALIFIER vec<3, T, Q> eulerAngles(qua const& x) { return vec<3, T, Q>(pitch(x), yaw(x), roll(x)); } template GLM_FUNC_QUALIFIER T roll(qua const& q) { return static_cast(atan(static_cast(2) * (q.x * q.y + q.w * q.z), q.w * q.w + q.x * q.x - q.y * q.y - q.z * q.z)); } template GLM_FUNC_QUALIFIER T pitch(qua const& q) { //return T(atan(T(2) * (q.y * q.z + q.w * q.x), q.w * q.w - q.x * q.x - q.y * q.y + q.z * q.z)); T const y = static_cast(2) * (q.y * q.z + q.w * q.x); T const x = q.w * q.w - q.x * q.x - q.y * q.y + q.z * q.z; if(all(equal(vec<2, T, Q>(x, y), vec<2, T, Q>(0), epsilon()))) //avoid atan2(0,0) - handle singularity - Matiis return static_cast(static_cast(2) * atan(q.x, q.w)); return static_cast(atan(y, x)); } template GLM_FUNC_QUALIFIER T yaw(qua const& q) { return asin(clamp(static_cast(-2) * (q.x * q.z - q.w * q.y), static_cast(-1), static_cast(1))); } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> mat3_cast(qua const& q) { mat<3, 3, T, Q> Result(T(1)); T qxx(q.x * q.x); T qyy(q.y * q.y); T qzz(q.z * q.z); T qxz(q.x * q.z); T qxy(q.x * q.y); T qyz(q.y * q.z); T qwx(q.w * q.x); T qwy(q.w * q.y); T qwz(q.w * q.z); Result[0][0] = T(1) - T(2) * (qyy + qzz); Result[0][1] = T(2) * (qxy + qwz); Result[0][2] = T(2) * (qxz - qwy); Result[1][0] = T(2) * (qxy - qwz); Result[1][1] = T(1) - T(2) * (qxx + qzz); Result[1][2] = T(2) * (qyz + qwx); Result[2][0] = T(2) * (qxz + qwy); Result[2][1] = T(2) * (qyz - qwx); Result[2][2] = T(1) - T(2) * (qxx + qyy); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> mat4_cast(qua const& q) { return mat<4, 4, T, Q>(mat3_cast(q)); } template GLM_FUNC_QUALIFIER qua quat_cast(mat<3, 3, T, Q> const& m) { T fourXSquaredMinus1 = m[0][0] - m[1][1] - m[2][2]; T fourYSquaredMinus1 = m[1][1] - m[0][0] - m[2][2]; T fourZSquaredMinus1 = m[2][2] - m[0][0] - m[1][1]; T fourWSquaredMinus1 = m[0][0] + m[1][1] + m[2][2]; int biggestIndex = 0; T fourBiggestSquaredMinus1 = fourWSquaredMinus1; if(fourXSquaredMinus1 > fourBiggestSquaredMinus1) { fourBiggestSquaredMinus1 = fourXSquaredMinus1; biggestIndex = 1; } if(fourYSquaredMinus1 > fourBiggestSquaredMinus1) { fourBiggestSquaredMinus1 = fourYSquaredMinus1; biggestIndex = 2; } if(fourZSquaredMinus1 > fourBiggestSquaredMinus1) { fourBiggestSquaredMinus1 = fourZSquaredMinus1; biggestIndex = 3; } T biggestVal = sqrt(fourBiggestSquaredMinus1 + static_cast(1)) * static_cast(0.5); T mult = static_cast(0.25) / biggestVal; switch(biggestIndex) { case 0: return qua(biggestVal, (m[1][2] - m[2][1]) * mult, (m[2][0] - m[0][2]) * mult, (m[0][1] - m[1][0]) * mult); case 1: return qua((m[1][2] - m[2][1]) * mult, biggestVal, (m[0][1] + m[1][0]) * mult, (m[2][0] + m[0][2]) * mult); case 2: return qua((m[2][0] - m[0][2]) * mult, (m[0][1] + m[1][0]) * mult, biggestVal, (m[1][2] + m[2][1]) * mult); case 3: return qua((m[0][1] - m[1][0]) * mult, (m[2][0] + m[0][2]) * mult, (m[1][2] + m[2][1]) * mult, biggestVal); default: // Silence a -Wswitch-default warning in GCC. Should never actually get here. Assert is just for sanity. assert(false); return qua(1, 0, 0, 0); } } template GLM_FUNC_QUALIFIER qua quat_cast(mat<4, 4, T, Q> const& m4) { return quat_cast(mat<3, 3, T, Q>(m4)); } template GLM_FUNC_QUALIFIER vec<4, bool, Q> lessThan(qua const& x, qua const& y) { vec<4, bool, Q> Result; for(length_t i = 0; i < x.length(); ++i) Result[i] = x[i] < y[i]; return Result; } template GLM_FUNC_QUALIFIER vec<4, bool, Q> lessThanEqual(qua const& x, qua const& y) { vec<4, bool, Q> Result; for(length_t i = 0; i < x.length(); ++i) Result[i] = x[i] <= y[i]; return Result; } template GLM_FUNC_QUALIFIER vec<4, bool, Q> greaterThan(qua const& x, qua const& y) { vec<4, bool, Q> Result; for(length_t i = 0; i < x.length(); ++i) Result[i] = x[i] > y[i]; return Result; } template GLM_FUNC_QUALIFIER vec<4, bool, Q> greaterThanEqual(qua const& x, qua const& y) { vec<4, bool, Q> Result; for(length_t i = 0; i < x.length(); ++i) Result[i] = x[i] >= y[i]; return Result; } template GLM_FUNC_QUALIFIER qua quatLookAt(vec<3, T, Q> const& direction, vec<3, T, Q> const& up) { # if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT return quatLookAtLH(direction, up); # else return quatLookAtRH(direction, up); # endif } template GLM_FUNC_QUALIFIER qua quatLookAtRH(vec<3, T, Q> const& direction, vec<3, T, Q> const& up) { mat<3, 3, T, Q> Result; Result[2] = -direction; Result[0] = normalize(cross(up, Result[2])); Result[1] = cross(Result[2], Result[0]); return quat_cast(Result); } template GLM_FUNC_QUALIFIER qua quatLookAtLH(vec<3, T, Q> const& direction, vec<3, T, Q> const& up) { mat<3, 3, T, Q> Result; Result[2] = direction; Result[0] = normalize(cross(up, Result[2])); Result[1] = cross(Result[2], Result[0]); return quat_cast(Result); } }//namespace glm #if GLM_CONFIG_SIMD == GLM_ENABLE # include "quaternion_simd.inl" #endif ================================================ FILE: libraries/glm/gtc/quaternion_simd.inl ================================================ ================================================ FILE: libraries/glm/gtc/random.hpp ================================================ /// @ref gtc_random /// @file glm/gtc/random.hpp /// /// @see core (dependence) /// @see gtx_random (extended) /// /// @defgroup gtc_random GLM_GTC_random /// @ingroup gtc /// /// Include to use the features of this extension. /// /// Generate random number from various distribution methods. #pragma once // Dependency: #include "../ext/scalar_int_sized.hpp" #include "../ext/scalar_uint_sized.hpp" #include "../detail/qualifier.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_GTC_random extension included") #endif namespace glm { /// @addtogroup gtc_random /// @{ /// Generate random numbers in the interval [Min, Max], according a linear distribution /// /// @param Min Minimum value included in the sampling /// @param Max Maximum value included in the sampling /// @tparam genType Value type. Currently supported: float or double scalars. /// @see gtc_random template GLM_FUNC_DECL genType linearRand(genType Min, genType Max); /// Generate random numbers in the interval [Min, Max], according a linear distribution /// /// @param Min Minimum value included in the sampling /// @param Max Maximum value included in the sampling /// @tparam T Value type. Currently supported: float or double. /// /// @see gtc_random template GLM_FUNC_DECL vec linearRand(vec const& Min, vec const& Max); /// Generate random numbers in the interval [Min, Max], according a gaussian distribution /// /// @see gtc_random template GLM_FUNC_DECL genType gaussRand(genType Mean, genType Deviation); /// Generate a random 2D vector which coordinates are regulary distributed on a circle of a given radius /// /// @see gtc_random template GLM_FUNC_DECL vec<2, T, defaultp> circularRand(T Radius); /// Generate a random 3D vector which coordinates are regulary distributed on a sphere of a given radius /// /// @see gtc_random template GLM_FUNC_DECL vec<3, T, defaultp> sphericalRand(T Radius); /// Generate a random 2D vector which coordinates are regulary distributed within the area of a disk of a given radius /// /// @see gtc_random template GLM_FUNC_DECL vec<2, T, defaultp> diskRand(T Radius); /// Generate a random 3D vector which coordinates are regulary distributed within the volume of a ball of a given radius /// /// @see gtc_random template GLM_FUNC_DECL vec<3, T, defaultp> ballRand(T Radius); /// @} }//namespace glm #include "random.inl" ================================================ FILE: libraries/glm/gtc/random.inl ================================================ #include "../geometric.hpp" #include "../exponential.hpp" #include "../trigonometric.hpp" #include "../detail/type_vec1.hpp" #include #include #include #include namespace glm{ namespace detail { template struct compute_rand { GLM_FUNC_QUALIFIER static vec call(); }; template struct compute_rand<1, uint8, P> { GLM_FUNC_QUALIFIER static vec<1, uint8, P> call() { return vec<1, uint8, P>( std::rand() % std::numeric_limits::max()); } }; template struct compute_rand<2, uint8, P> { GLM_FUNC_QUALIFIER static vec<2, uint8, P> call() { return vec<2, uint8, P>( std::rand() % std::numeric_limits::max(), std::rand() % std::numeric_limits::max()); } }; template struct compute_rand<3, uint8, P> { GLM_FUNC_QUALIFIER static vec<3, uint8, P> call() { return vec<3, uint8, P>( std::rand() % std::numeric_limits::max(), std::rand() % std::numeric_limits::max(), std::rand() % std::numeric_limits::max()); } }; template struct compute_rand<4, uint8, P> { GLM_FUNC_QUALIFIER static vec<4, uint8, P> call() { return vec<4, uint8, P>( std::rand() % std::numeric_limits::max(), std::rand() % std::numeric_limits::max(), std::rand() % std::numeric_limits::max(), std::rand() % std::numeric_limits::max()); } }; template struct compute_rand { GLM_FUNC_QUALIFIER static vec call() { return (vec(compute_rand::call()) << static_cast(8)) | (vec(compute_rand::call()) << static_cast(0)); } }; template struct compute_rand { GLM_FUNC_QUALIFIER static vec call() { return (vec(compute_rand::call()) << static_cast(16)) | (vec(compute_rand::call()) << static_cast(0)); } }; template struct compute_rand { GLM_FUNC_QUALIFIER static vec call() { return (vec(compute_rand::call()) << static_cast(32)) | (vec(compute_rand::call()) << static_cast(0)); } }; template struct compute_linearRand { GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max); }; template struct compute_linearRand { GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) { return (vec(compute_rand::call() % vec(Max + static_cast(1) - Min))) + Min; } }; template struct compute_linearRand { GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) { return (compute_rand::call() % (Max + static_cast(1) - Min)) + Min; } }; template struct compute_linearRand { GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) { return (vec(compute_rand::call() % vec(Max + static_cast(1) - Min))) + Min; } }; template struct compute_linearRand { GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) { return (compute_rand::call() % (Max + static_cast(1) - Min)) + Min; } }; template struct compute_linearRand { GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) { return (vec(compute_rand::call() % vec(Max + static_cast(1) - Min))) + Min; } }; template struct compute_linearRand { GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) { return (compute_rand::call() % (Max + static_cast(1) - Min)) + Min; } }; template struct compute_linearRand { GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) { return (vec(compute_rand::call() % vec(Max + static_cast(1) - Min))) + Min; } }; template struct compute_linearRand { GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) { return (compute_rand::call() % (Max + static_cast(1) - Min)) + Min; } }; template struct compute_linearRand { GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) { return vec(compute_rand::call()) / static_cast(std::numeric_limits::max()) * (Max - Min) + Min; } }; template struct compute_linearRand { GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) { return vec(compute_rand::call()) / static_cast(std::numeric_limits::max()) * (Max - Min) + Min; } }; template struct compute_linearRand { GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) { return vec(compute_rand::call()) / static_cast(std::numeric_limits::max()) * (Max - Min) + Min; } }; }//namespace detail template GLM_FUNC_QUALIFIER genType linearRand(genType Min, genType Max) { return detail::compute_linearRand<1, genType, highp>::call( vec<1, genType, highp>(Min), vec<1, genType, highp>(Max)).x; } template GLM_FUNC_QUALIFIER vec linearRand(vec const& Min, vec const& Max) { return detail::compute_linearRand::call(Min, Max); } template GLM_FUNC_QUALIFIER genType gaussRand(genType Mean, genType Deviation) { genType w, x1, x2; do { x1 = linearRand(genType(-1), genType(1)); x2 = linearRand(genType(-1), genType(1)); w = x1 * x1 + x2 * x2; } while(w > genType(1)); return static_cast(x2 * Deviation * Deviation * sqrt((genType(-2) * log(w)) / w) + Mean); } template GLM_FUNC_QUALIFIER vec gaussRand(vec const& Mean, vec const& Deviation) { return detail::functor2::call(gaussRand, Mean, Deviation); } template GLM_FUNC_QUALIFIER vec<2, T, defaultp> diskRand(T Radius) { assert(Radius > static_cast(0)); vec<2, T, defaultp> Result(T(0)); T LenRadius(T(0)); do { Result = linearRand( vec<2, T, defaultp>(-Radius), vec<2, T, defaultp>(Radius)); LenRadius = length(Result); } while(LenRadius > Radius); return Result; } template GLM_FUNC_QUALIFIER vec<3, T, defaultp> ballRand(T Radius) { assert(Radius > static_cast(0)); vec<3, T, defaultp> Result(T(0)); T LenRadius(T(0)); do { Result = linearRand( vec<3, T, defaultp>(-Radius), vec<3, T, defaultp>(Radius)); LenRadius = length(Result); } while(LenRadius > Radius); return Result; } template GLM_FUNC_QUALIFIER vec<2, T, defaultp> circularRand(T Radius) { assert(Radius > static_cast(0)); T a = linearRand(T(0), static_cast(6.283185307179586476925286766559)); return vec<2, T, defaultp>(glm::cos(a), glm::sin(a)) * Radius; } template GLM_FUNC_QUALIFIER vec<3, T, defaultp> sphericalRand(T Radius) { assert(Radius > static_cast(0)); T theta = linearRand(T(0), T(6.283185307179586476925286766559f)); T phi = std::acos(linearRand(T(-1.0f), T(1.0f))); T x = std::sin(phi) * std::cos(theta); T y = std::sin(phi) * std::sin(theta); T z = std::cos(phi); return vec<3, T, defaultp>(x, y, z) * Radius; } }//namespace glm ================================================ FILE: libraries/glm/gtc/reciprocal.hpp ================================================ /// @ref gtc_reciprocal /// @file glm/gtc/reciprocal.hpp /// /// @see core (dependence) /// /// @defgroup gtc_reciprocal GLM_GTC_reciprocal /// @ingroup gtc /// /// Include to use the features of this extension. /// /// Define secant, cosecant and cotangent functions. #pragma once // Dependencies #include "../detail/setup.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_GTC_reciprocal extension included") #endif namespace glm { /// @addtogroup gtc_reciprocal /// @{ /// Secant function. /// hypotenuse / adjacent or 1 / cos(x) /// /// @tparam genType Floating-point scalar or vector types. /// /// @see gtc_reciprocal template GLM_FUNC_DECL genType sec(genType angle); /// Cosecant function. /// hypotenuse / opposite or 1 / sin(x) /// /// @tparam genType Floating-point scalar or vector types. /// /// @see gtc_reciprocal template GLM_FUNC_DECL genType csc(genType angle); /// Cotangent function. /// adjacent / opposite or 1 / tan(x) /// /// @tparam genType Floating-point scalar or vector types. /// /// @see gtc_reciprocal template GLM_FUNC_DECL genType cot(genType angle); /// Inverse secant function. /// /// @return Return an angle expressed in radians. /// @tparam genType Floating-point scalar or vector types. /// /// @see gtc_reciprocal template GLM_FUNC_DECL genType asec(genType x); /// Inverse cosecant function. /// /// @return Return an angle expressed in radians. /// @tparam genType Floating-point scalar or vector types. /// /// @see gtc_reciprocal template GLM_FUNC_DECL genType acsc(genType x); /// Inverse cotangent function. /// /// @return Return an angle expressed in radians. /// @tparam genType Floating-point scalar or vector types. /// /// @see gtc_reciprocal template GLM_FUNC_DECL genType acot(genType x); /// Secant hyperbolic function. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see gtc_reciprocal template GLM_FUNC_DECL genType sech(genType angle); /// Cosecant hyperbolic function. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see gtc_reciprocal template GLM_FUNC_DECL genType csch(genType angle); /// Cotangent hyperbolic function. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see gtc_reciprocal template GLM_FUNC_DECL genType coth(genType angle); /// Inverse secant hyperbolic function. /// /// @return Return an angle expressed in radians. /// @tparam genType Floating-point scalar or vector types. /// /// @see gtc_reciprocal template GLM_FUNC_DECL genType asech(genType x); /// Inverse cosecant hyperbolic function. /// /// @return Return an angle expressed in radians. /// @tparam genType Floating-point scalar or vector types. /// /// @see gtc_reciprocal template GLM_FUNC_DECL genType acsch(genType x); /// Inverse cotangent hyperbolic function. /// /// @return Return an angle expressed in radians. /// @tparam genType Floating-point scalar or vector types. /// /// @see gtc_reciprocal template GLM_FUNC_DECL genType acoth(genType x); /// @} }//namespace glm #include "reciprocal.inl" ================================================ FILE: libraries/glm/gtc/reciprocal.inl ================================================ /// @ref gtc_reciprocal #include "../trigonometric.hpp" #include namespace glm { // sec template GLM_FUNC_QUALIFIER genType sec(genType angle) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'sec' only accept floating-point values"); return genType(1) / glm::cos(angle); } template GLM_FUNC_QUALIFIER vec sec(vec const& x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'sec' only accept floating-point inputs"); return detail::functor1::call(sec, x); } // csc template GLM_FUNC_QUALIFIER genType csc(genType angle) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'csc' only accept floating-point values"); return genType(1) / glm::sin(angle); } template GLM_FUNC_QUALIFIER vec csc(vec const& x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'csc' only accept floating-point inputs"); return detail::functor1::call(csc, x); } // cot template GLM_FUNC_QUALIFIER genType cot(genType angle) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'cot' only accept floating-point values"); genType const pi_over_2 = genType(3.1415926535897932384626433832795 / 2.0); return glm::tan(pi_over_2 - angle); } template GLM_FUNC_QUALIFIER vec cot(vec const& x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'cot' only accept floating-point inputs"); return detail::functor1::call(cot, x); } // asec template GLM_FUNC_QUALIFIER genType asec(genType x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'asec' only accept floating-point values"); return acos(genType(1) / x); } template GLM_FUNC_QUALIFIER vec asec(vec const& x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'asec' only accept floating-point inputs"); return detail::functor1::call(asec, x); } // acsc template GLM_FUNC_QUALIFIER genType acsc(genType x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acsc' only accept floating-point values"); return asin(genType(1) / x); } template GLM_FUNC_QUALIFIER vec acsc(vec const& x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acsc' only accept floating-point inputs"); return detail::functor1::call(acsc, x); } // acot template GLM_FUNC_QUALIFIER genType acot(genType x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acot' only accept floating-point values"); genType const pi_over_2 = genType(3.1415926535897932384626433832795 / 2.0); return pi_over_2 - atan(x); } template GLM_FUNC_QUALIFIER vec acot(vec const& x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acot' only accept floating-point inputs"); return detail::functor1::call(acot, x); } // sech template GLM_FUNC_QUALIFIER genType sech(genType angle) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'sech' only accept floating-point values"); return genType(1) / glm::cosh(angle); } template GLM_FUNC_QUALIFIER vec sech(vec const& x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'sech' only accept floating-point inputs"); return detail::functor1::call(sech, x); } // csch template GLM_FUNC_QUALIFIER genType csch(genType angle) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'csch' only accept floating-point values"); return genType(1) / glm::sinh(angle); } template GLM_FUNC_QUALIFIER vec csch(vec const& x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'csch' only accept floating-point inputs"); return detail::functor1::call(csch, x); } // coth template GLM_FUNC_QUALIFIER genType coth(genType angle) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'coth' only accept floating-point values"); return glm::cosh(angle) / glm::sinh(angle); } template GLM_FUNC_QUALIFIER vec coth(vec const& x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'coth' only accept floating-point inputs"); return detail::functor1::call(coth, x); } // asech template GLM_FUNC_QUALIFIER genType asech(genType x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'asech' only accept floating-point values"); return acosh(genType(1) / x); } template GLM_FUNC_QUALIFIER vec asech(vec const& x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'asech' only accept floating-point inputs"); return detail::functor1::call(asech, x); } // acsch template GLM_FUNC_QUALIFIER genType acsch(genType x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acsch' only accept floating-point values"); return asinh(genType(1) / x); } template GLM_FUNC_QUALIFIER vec acsch(vec const& x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acsch' only accept floating-point inputs"); return detail::functor1::call(acsch, x); } // acoth template GLM_FUNC_QUALIFIER genType acoth(genType x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acoth' only accept floating-point values"); return atanh(genType(1) / x); } template GLM_FUNC_QUALIFIER vec acoth(vec const& x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acoth' only accept floating-point inputs"); return detail::functor1::call(acoth, x); } }//namespace glm ================================================ FILE: libraries/glm/gtc/round.hpp ================================================ /// @ref gtc_round /// @file glm/gtc/round.hpp /// /// @see core (dependence) /// @see gtc_round (dependence) /// /// @defgroup gtc_round GLM_GTC_round /// @ingroup gtc /// /// Include to use the features of this extension. /// /// Rounding value to specific boundings #pragma once // Dependencies #include "../detail/setup.hpp" #include "../detail/qualifier.hpp" #include "../detail/_vectorize.hpp" #include "../vector_relational.hpp" #include "../common.hpp" #include #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_GTC_round extension included") #endif namespace glm { /// @addtogroup gtc_round /// @{ /// Return the power of two number which value is just higher the input value, /// round up to a power of two. /// /// @see gtc_round template GLM_FUNC_DECL genIUType ceilPowerOfTwo(genIUType v); /// Return the power of two number which value is just higher the input value, /// round up to a power of two. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point or integer scalar types /// @tparam Q Value from qualifier enum /// /// @see gtc_round template GLM_FUNC_DECL vec ceilPowerOfTwo(vec const& v); /// Return the power of two number which value is just lower the input value, /// round down to a power of two. /// /// @see gtc_round template GLM_FUNC_DECL genIUType floorPowerOfTwo(genIUType v); /// Return the power of two number which value is just lower the input value, /// round down to a power of two. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point or integer scalar types /// @tparam Q Value from qualifier enum /// /// @see gtc_round template GLM_FUNC_DECL vec floorPowerOfTwo(vec const& v); /// Return the power of two number which value is the closet to the input value. /// /// @see gtc_round template GLM_FUNC_DECL genIUType roundPowerOfTwo(genIUType v); /// Return the power of two number which value is the closet to the input value. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point or integer scalar types /// @tparam Q Value from qualifier enum /// /// @see gtc_round template GLM_FUNC_DECL vec roundPowerOfTwo(vec const& v); /// Higher multiple number of Source. /// /// @tparam genType Floating-point or integer scalar or vector types. /// /// @param v Source value to which is applied the function /// @param Multiple Must be a null or positive value /// /// @see gtc_round template GLM_FUNC_DECL genType ceilMultiple(genType v, genType Multiple); /// Higher multiple number of Source. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point or integer scalar types /// @tparam Q Value from qualifier enum /// /// @param v Source values to which is applied the function /// @param Multiple Must be a null or positive value /// /// @see gtc_round template GLM_FUNC_DECL vec ceilMultiple(vec const& v, vec const& Multiple); /// Lower multiple number of Source. /// /// @tparam genType Floating-point or integer scalar or vector types. /// /// @param v Source value to which is applied the function /// @param Multiple Must be a null or positive value /// /// @see gtc_round template GLM_FUNC_DECL genType floorMultiple(genType v, genType Multiple); /// Lower multiple number of Source. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point or integer scalar types /// @tparam Q Value from qualifier enum /// /// @param v Source values to which is applied the function /// @param Multiple Must be a null or positive value /// /// @see gtc_round template GLM_FUNC_DECL vec floorMultiple(vec const& v, vec const& Multiple); /// Lower multiple number of Source. /// /// @tparam genType Floating-point or integer scalar or vector types. /// /// @param v Source value to which is applied the function /// @param Multiple Must be a null or positive value /// /// @see gtc_round template GLM_FUNC_DECL genType roundMultiple(genType v, genType Multiple); /// Lower multiple number of Source. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point or integer scalar types /// @tparam Q Value from qualifier enum /// /// @param v Source values to which is applied the function /// @param Multiple Must be a null or positive value /// /// @see gtc_round template GLM_FUNC_DECL vec roundMultiple(vec const& v, vec const& Multiple); /// @} } //namespace glm #include "round.inl" ================================================ FILE: libraries/glm/gtc/round.inl ================================================ /// @ref gtc_round #include "../integer.hpp" #include "../ext/vector_integer.hpp" namespace glm{ namespace detail { template struct compute_roundMultiple {}; template<> struct compute_roundMultiple { template GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) { if (Source >= genType(0)) return Source - std::fmod(Source, Multiple); else { genType Tmp = Source + genType(1); return Tmp - std::fmod(Tmp, Multiple) - Multiple; } } }; template<> struct compute_roundMultiple { template GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) { if (Source >= genType(0)) return Source - Source % Multiple; else { genType Tmp = Source + genType(1); return Tmp - Tmp % Multiple - Multiple; } } }; template<> struct compute_roundMultiple { template GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) { if (Source >= genType(0)) return Source - Source % Multiple; else { genType Tmp = Source + genType(1); return Tmp - Tmp % Multiple - Multiple; } } }; }//namespace detail ////////////////// // ceilPowerOfTwo template GLM_FUNC_QUALIFIER genType ceilPowerOfTwo(genType value) { return detail::compute_ceilPowerOfTwo<1, genType, defaultp, std::numeric_limits::is_signed>::call(vec<1, genType, defaultp>(value)).x; } template GLM_FUNC_QUALIFIER vec ceilPowerOfTwo(vec const& v) { return detail::compute_ceilPowerOfTwo::is_signed>::call(v); } /////////////////// // floorPowerOfTwo template GLM_FUNC_QUALIFIER genType floorPowerOfTwo(genType value) { return isPowerOfTwo(value) ? value : static_cast(1) << findMSB(value); } template GLM_FUNC_QUALIFIER vec floorPowerOfTwo(vec const& v) { return detail::functor1::call(floorPowerOfTwo, v); } /////////////////// // roundPowerOfTwo template GLM_FUNC_QUALIFIER genIUType roundPowerOfTwo(genIUType value) { if(isPowerOfTwo(value)) return value; genIUType const prev = static_cast(1) << findMSB(value); genIUType const next = prev << static_cast(1); return (next - value) < (value - prev) ? next : prev; } template GLM_FUNC_QUALIFIER vec roundPowerOfTwo(vec const& v) { return detail::functor1::call(roundPowerOfTwo, v); } ////////////////////// // ceilMultiple template GLM_FUNC_QUALIFIER genType ceilMultiple(genType Source, genType Multiple) { return detail::compute_ceilMultiple::is_iec559, std::numeric_limits::is_signed>::call(Source, Multiple); } template GLM_FUNC_QUALIFIER vec ceilMultiple(vec const& Source, vec const& Multiple) { return detail::functor2::call(ceilMultiple, Source, Multiple); } ////////////////////// // floorMultiple template GLM_FUNC_QUALIFIER genType floorMultiple(genType Source, genType Multiple) { return detail::compute_floorMultiple::is_iec559, std::numeric_limits::is_signed>::call(Source, Multiple); } template GLM_FUNC_QUALIFIER vec floorMultiple(vec const& Source, vec const& Multiple) { return detail::functor2::call(floorMultiple, Source, Multiple); } ////////////////////// // roundMultiple template GLM_FUNC_QUALIFIER genType roundMultiple(genType Source, genType Multiple) { return detail::compute_roundMultiple::is_iec559, std::numeric_limits::is_signed>::call(Source, Multiple); } template GLM_FUNC_QUALIFIER vec roundMultiple(vec const& Source, vec const& Multiple) { return detail::functor2::call(roundMultiple, Source, Multiple); } }//namespace glm ================================================ FILE: libraries/glm/gtc/type_aligned.hpp ================================================ /// @ref gtc_type_aligned /// @file glm/gtc/type_aligned.hpp /// /// @see core (dependence) /// /// @defgroup gtc_type_aligned GLM_GTC_type_aligned /// @ingroup gtc /// /// Include to use the features of this extension. /// /// Aligned types allowing SIMD optimizations of vectors and matrices types #pragma once #if (GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE) # error "GLM: Aligned gentypes require to enable C++ language extensions. Define GLM_FORCE_ALIGNED_GENTYPES before including GLM headers to use aligned types." #endif #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_GTC_type_aligned extension included") #endif #include "../mat4x4.hpp" #include "../mat4x3.hpp" #include "../mat4x2.hpp" #include "../mat3x4.hpp" #include "../mat3x3.hpp" #include "../mat3x2.hpp" #include "../mat2x4.hpp" #include "../mat2x3.hpp" #include "../mat2x2.hpp" #include "../gtc/vec1.hpp" #include "../vec2.hpp" #include "../vec3.hpp" #include "../vec4.hpp" namespace glm { /// @addtogroup gtc_type_aligned /// @{ // -- *vec1 -- /// 1 component vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef vec<1, float, aligned_highp> aligned_highp_vec1; /// 1 component vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef vec<1, float, aligned_mediump> aligned_mediump_vec1; /// 1 component vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef vec<1, float, aligned_lowp> aligned_lowp_vec1; /// 1 component vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef vec<1, double, aligned_highp> aligned_highp_dvec1; /// 1 component vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef vec<1, double, aligned_mediump> aligned_mediump_dvec1; /// 1 component vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef vec<1, double, aligned_lowp> aligned_lowp_dvec1; /// 1 component vector aligned in memory of signed integer numbers. typedef vec<1, int, aligned_highp> aligned_highp_ivec1; /// 1 component vector aligned in memory of signed integer numbers. typedef vec<1, int, aligned_mediump> aligned_mediump_ivec1; /// 1 component vector aligned in memory of signed integer numbers. typedef vec<1, int, aligned_lowp> aligned_lowp_ivec1; /// 1 component vector aligned in memory of unsigned integer numbers. typedef vec<1, uint, aligned_highp> aligned_highp_uvec1; /// 1 component vector aligned in memory of unsigned integer numbers. typedef vec<1, uint, aligned_mediump> aligned_mediump_uvec1; /// 1 component vector aligned in memory of unsigned integer numbers. typedef vec<1, uint, aligned_lowp> aligned_lowp_uvec1; /// 1 component vector aligned in memory of bool values. typedef vec<1, bool, aligned_highp> aligned_highp_bvec1; /// 1 component vector aligned in memory of bool values. typedef vec<1, bool, aligned_mediump> aligned_mediump_bvec1; /// 1 component vector aligned in memory of bool values. typedef vec<1, bool, aligned_lowp> aligned_lowp_bvec1; /// 1 component vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef vec<1, float, packed_highp> packed_highp_vec1; /// 1 component vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef vec<1, float, packed_mediump> packed_mediump_vec1; /// 1 component vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef vec<1, float, packed_lowp> packed_lowp_vec1; /// 1 component vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef vec<1, double, packed_highp> packed_highp_dvec1; /// 1 component vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef vec<1, double, packed_mediump> packed_mediump_dvec1; /// 1 component vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef vec<1, double, packed_lowp> packed_lowp_dvec1; /// 1 component vector tightly packed in memory of signed integer numbers. typedef vec<1, int, packed_highp> packed_highp_ivec1; /// 1 component vector tightly packed in memory of signed integer numbers. typedef vec<1, int, packed_mediump> packed_mediump_ivec1; /// 1 component vector tightly packed in memory of signed integer numbers. typedef vec<1, int, packed_lowp> packed_lowp_ivec1; /// 1 component vector tightly packed in memory of unsigned integer numbers. typedef vec<1, uint, packed_highp> packed_highp_uvec1; /// 1 component vector tightly packed in memory of unsigned integer numbers. typedef vec<1, uint, packed_mediump> packed_mediump_uvec1; /// 1 component vector tightly packed in memory of unsigned integer numbers. typedef vec<1, uint, packed_lowp> packed_lowp_uvec1; /// 1 component vector tightly packed in memory of bool values. typedef vec<1, bool, packed_highp> packed_highp_bvec1; /// 1 component vector tightly packed in memory of bool values. typedef vec<1, bool, packed_mediump> packed_mediump_bvec1; /// 1 component vector tightly packed in memory of bool values. typedef vec<1, bool, packed_lowp> packed_lowp_bvec1; // -- *vec2 -- /// 2 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef vec<2, float, aligned_highp> aligned_highp_vec2; /// 2 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef vec<2, float, aligned_mediump> aligned_mediump_vec2; /// 2 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef vec<2, float, aligned_lowp> aligned_lowp_vec2; /// 2 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef vec<2, double, aligned_highp> aligned_highp_dvec2; /// 2 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef vec<2, double, aligned_mediump> aligned_mediump_dvec2; /// 2 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef vec<2, double, aligned_lowp> aligned_lowp_dvec2; /// 2 components vector aligned in memory of signed integer numbers. typedef vec<2, int, aligned_highp> aligned_highp_ivec2; /// 2 components vector aligned in memory of signed integer numbers. typedef vec<2, int, aligned_mediump> aligned_mediump_ivec2; /// 2 components vector aligned in memory of signed integer numbers. typedef vec<2, int, aligned_lowp> aligned_lowp_ivec2; /// 2 components vector aligned in memory of unsigned integer numbers. typedef vec<2, uint, aligned_highp> aligned_highp_uvec2; /// 2 components vector aligned in memory of unsigned integer numbers. typedef vec<2, uint, aligned_mediump> aligned_mediump_uvec2; /// 2 components vector aligned in memory of unsigned integer numbers. typedef vec<2, uint, aligned_lowp> aligned_lowp_uvec2; /// 2 components vector aligned in memory of bool values. typedef vec<2, bool, aligned_highp> aligned_highp_bvec2; /// 2 components vector aligned in memory of bool values. typedef vec<2, bool, aligned_mediump> aligned_mediump_bvec2; /// 2 components vector aligned in memory of bool values. typedef vec<2, bool, aligned_lowp> aligned_lowp_bvec2; /// 2 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef vec<2, float, packed_highp> packed_highp_vec2; /// 2 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef vec<2, float, packed_mediump> packed_mediump_vec2; /// 2 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef vec<2, float, packed_lowp> packed_lowp_vec2; /// 2 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef vec<2, double, packed_highp> packed_highp_dvec2; /// 2 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef vec<2, double, packed_mediump> packed_mediump_dvec2; /// 2 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef vec<2, double, packed_lowp> packed_lowp_dvec2; /// 2 components vector tightly packed in memory of signed integer numbers. typedef vec<2, int, packed_highp> packed_highp_ivec2; /// 2 components vector tightly packed in memory of signed integer numbers. typedef vec<2, int, packed_mediump> packed_mediump_ivec2; /// 2 components vector tightly packed in memory of signed integer numbers. typedef vec<2, int, packed_lowp> packed_lowp_ivec2; /// 2 components vector tightly packed in memory of unsigned integer numbers. typedef vec<2, uint, packed_highp> packed_highp_uvec2; /// 2 components vector tightly packed in memory of unsigned integer numbers. typedef vec<2, uint, packed_mediump> packed_mediump_uvec2; /// 2 components vector tightly packed in memory of unsigned integer numbers. typedef vec<2, uint, packed_lowp> packed_lowp_uvec2; /// 2 components vector tightly packed in memory of bool values. typedef vec<2, bool, packed_highp> packed_highp_bvec2; /// 2 components vector tightly packed in memory of bool values. typedef vec<2, bool, packed_mediump> packed_mediump_bvec2; /// 2 components vector tightly packed in memory of bool values. typedef vec<2, bool, packed_lowp> packed_lowp_bvec2; // -- *vec3 -- /// 3 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef vec<3, float, aligned_highp> aligned_highp_vec3; /// 3 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef vec<3, float, aligned_mediump> aligned_mediump_vec3; /// 3 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef vec<3, float, aligned_lowp> aligned_lowp_vec3; /// 3 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef vec<3, double, aligned_highp> aligned_highp_dvec3; /// 3 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef vec<3, double, aligned_mediump> aligned_mediump_dvec3; /// 3 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef vec<3, double, aligned_lowp> aligned_lowp_dvec3; /// 3 components vector aligned in memory of signed integer numbers. typedef vec<3, int, aligned_highp> aligned_highp_ivec3; /// 3 components vector aligned in memory of signed integer numbers. typedef vec<3, int, aligned_mediump> aligned_mediump_ivec3; /// 3 components vector aligned in memory of signed integer numbers. typedef vec<3, int, aligned_lowp> aligned_lowp_ivec3; /// 3 components vector aligned in memory of unsigned integer numbers. typedef vec<3, uint, aligned_highp> aligned_highp_uvec3; /// 3 components vector aligned in memory of unsigned integer numbers. typedef vec<3, uint, aligned_mediump> aligned_mediump_uvec3; /// 3 components vector aligned in memory of unsigned integer numbers. typedef vec<3, uint, aligned_lowp> aligned_lowp_uvec3; /// 3 components vector aligned in memory of bool values. typedef vec<3, bool, aligned_highp> aligned_highp_bvec3; /// 3 components vector aligned in memory of bool values. typedef vec<3, bool, aligned_mediump> aligned_mediump_bvec3; /// 3 components vector aligned in memory of bool values. typedef vec<3, bool, aligned_lowp> aligned_lowp_bvec3; /// 3 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef vec<3, float, packed_highp> packed_highp_vec3; /// 3 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef vec<3, float, packed_mediump> packed_mediump_vec3; /// 3 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef vec<3, float, packed_lowp> packed_lowp_vec3; /// 3 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef vec<3, double, packed_highp> packed_highp_dvec3; /// 3 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef vec<3, double, packed_mediump> packed_mediump_dvec3; /// 3 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef vec<3, double, packed_lowp> packed_lowp_dvec3; /// 3 components vector tightly packed in memory of signed integer numbers. typedef vec<3, int, packed_highp> packed_highp_ivec3; /// 3 components vector tightly packed in memory of signed integer numbers. typedef vec<3, int, packed_mediump> packed_mediump_ivec3; /// 3 components vector tightly packed in memory of signed integer numbers. typedef vec<3, int, packed_lowp> packed_lowp_ivec3; /// 3 components vector tightly packed in memory of unsigned integer numbers. typedef vec<3, uint, packed_highp> packed_highp_uvec3; /// 3 components vector tightly packed in memory of unsigned integer numbers. typedef vec<3, uint, packed_mediump> packed_mediump_uvec3; /// 3 components vector tightly packed in memory of unsigned integer numbers. typedef vec<3, uint, packed_lowp> packed_lowp_uvec3; /// 3 components vector tightly packed in memory of bool values. typedef vec<3, bool, packed_highp> packed_highp_bvec3; /// 3 components vector tightly packed in memory of bool values. typedef vec<3, bool, packed_mediump> packed_mediump_bvec3; /// 3 components vector tightly packed in memory of bool values. typedef vec<3, bool, packed_lowp> packed_lowp_bvec3; // -- *vec4 -- /// 4 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef vec<4, float, aligned_highp> aligned_highp_vec4; /// 4 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef vec<4, float, aligned_mediump> aligned_mediump_vec4; /// 4 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef vec<4, float, aligned_lowp> aligned_lowp_vec4; /// 4 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef vec<4, double, aligned_highp> aligned_highp_dvec4; /// 4 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef vec<4, double, aligned_mediump> aligned_mediump_dvec4; /// 4 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef vec<4, double, aligned_lowp> aligned_lowp_dvec4; /// 4 components vector aligned in memory of signed integer numbers. typedef vec<4, int, aligned_highp> aligned_highp_ivec4; /// 4 components vector aligned in memory of signed integer numbers. typedef vec<4, int, aligned_mediump> aligned_mediump_ivec4; /// 4 components vector aligned in memory of signed integer numbers. typedef vec<4, int, aligned_lowp> aligned_lowp_ivec4; /// 4 components vector aligned in memory of unsigned integer numbers. typedef vec<4, uint, aligned_highp> aligned_highp_uvec4; /// 4 components vector aligned in memory of unsigned integer numbers. typedef vec<4, uint, aligned_mediump> aligned_mediump_uvec4; /// 4 components vector aligned in memory of unsigned integer numbers. typedef vec<4, uint, aligned_lowp> aligned_lowp_uvec4; /// 4 components vector aligned in memory of bool values. typedef vec<4, bool, aligned_highp> aligned_highp_bvec4; /// 4 components vector aligned in memory of bool values. typedef vec<4, bool, aligned_mediump> aligned_mediump_bvec4; /// 4 components vector aligned in memory of bool values. typedef vec<4, bool, aligned_lowp> aligned_lowp_bvec4; /// 4 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef vec<4, float, packed_highp> packed_highp_vec4; /// 4 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef vec<4, float, packed_mediump> packed_mediump_vec4; /// 4 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef vec<4, float, packed_lowp> packed_lowp_vec4; /// 4 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef vec<4, double, packed_highp> packed_highp_dvec4; /// 4 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef vec<4, double, packed_mediump> packed_mediump_dvec4; /// 4 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef vec<4, double, packed_lowp> packed_lowp_dvec4; /// 4 components vector tightly packed in memory of signed integer numbers. typedef vec<4, int, packed_highp> packed_highp_ivec4; /// 4 components vector tightly packed in memory of signed integer numbers. typedef vec<4, int, packed_mediump> packed_mediump_ivec4; /// 4 components vector tightly packed in memory of signed integer numbers. typedef vec<4, int, packed_lowp> packed_lowp_ivec4; /// 4 components vector tightly packed in memory of unsigned integer numbers. typedef vec<4, uint, packed_highp> packed_highp_uvec4; /// 4 components vector tightly packed in memory of unsigned integer numbers. typedef vec<4, uint, packed_mediump> packed_mediump_uvec4; /// 4 components vector tightly packed in memory of unsigned integer numbers. typedef vec<4, uint, packed_lowp> packed_lowp_uvec4; /// 4 components vector tightly packed in memory of bool values. typedef vec<4, bool, packed_highp> packed_highp_bvec4; /// 4 components vector tightly packed in memory of bool values. typedef vec<4, bool, packed_mediump> packed_mediump_bvec4; /// 4 components vector tightly packed in memory of bool values. typedef vec<4, bool, packed_lowp> packed_lowp_bvec4; // -- *mat2 -- /// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<2, 2, float, aligned_highp> aligned_highp_mat2; /// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<2, 2, float, aligned_mediump> aligned_mediump_mat2; /// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<2, 2, float, aligned_lowp> aligned_lowp_mat2; /// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<2, 2, double, aligned_highp> aligned_highp_dmat2; /// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<2, 2, double, aligned_mediump> aligned_mediump_dmat2; /// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<2, 2, double, aligned_lowp> aligned_lowp_dmat2; /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<2, 2, float, packed_highp> packed_highp_mat2; /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<2, 2, float, packed_mediump> packed_mediump_mat2; /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<2, 2, float, packed_lowp> packed_lowp_mat2; /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<2, 2, double, packed_highp> packed_highp_dmat2; /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<2, 2, double, packed_mediump> packed_mediump_dmat2; /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<2, 2, double, packed_lowp> packed_lowp_dmat2; // -- *mat3 -- /// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<3, 3, float, aligned_highp> aligned_highp_mat3; /// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<3, 3, float, aligned_mediump> aligned_mediump_mat3; /// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<3, 3, float, aligned_lowp> aligned_lowp_mat3; /// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<3, 3, double, aligned_highp> aligned_highp_dmat3; /// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<3, 3, double, aligned_mediump> aligned_mediump_dmat3; /// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<3, 3, double, aligned_lowp> aligned_lowp_dmat3; /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<3, 3, float, packed_highp> packed_highp_mat3; /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<3, 3, float, packed_mediump> packed_mediump_mat3; /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<3, 3, float, packed_lowp> packed_lowp_mat3; /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<3, 3, double, packed_highp> packed_highp_dmat3; /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<3, 3, double, packed_mediump> packed_mediump_dmat3; /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<3, 3, double, packed_lowp> packed_lowp_dmat3; // -- *mat4 -- /// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<4, 4, float, aligned_highp> aligned_highp_mat4; /// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<4, 4, float, aligned_mediump> aligned_mediump_mat4; /// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<4, 4, float, aligned_lowp> aligned_lowp_mat4; /// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<4, 4, double, aligned_highp> aligned_highp_dmat4; /// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<4, 4, double, aligned_mediump> aligned_mediump_dmat4; /// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<4, 4, double, aligned_lowp> aligned_lowp_dmat4; /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<4, 4, float, packed_highp> packed_highp_mat4; /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<4, 4, float, packed_mediump> packed_mediump_mat4; /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<4, 4, float, packed_lowp> packed_lowp_mat4; /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<4, 4, double, packed_highp> packed_highp_dmat4; /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<4, 4, double, packed_mediump> packed_mediump_dmat4; /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<4, 4, double, packed_lowp> packed_lowp_dmat4; // -- *mat2x2 -- /// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<2, 2, float, aligned_highp> aligned_highp_mat2x2; /// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<2, 2, float, aligned_mediump> aligned_mediump_mat2x2; /// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<2, 2, float, aligned_lowp> aligned_lowp_mat2x2; /// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<2, 2, double, aligned_highp> aligned_highp_dmat2x2; /// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<2, 2, double, aligned_mediump> aligned_mediump_dmat2x2; /// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<2, 2, double, aligned_lowp> aligned_lowp_dmat2x2; /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<2, 2, float, packed_highp> packed_highp_mat2x2; /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<2, 2, float, packed_mediump> packed_mediump_mat2x2; /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<2, 2, float, packed_lowp> packed_lowp_mat2x2; /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<2, 2, double, packed_highp> packed_highp_dmat2x2; /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<2, 2, double, packed_mediump> packed_mediump_dmat2x2; /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<2, 2, double, packed_lowp> packed_lowp_dmat2x2; // -- *mat2x3 -- /// 2 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<2, 3, float, aligned_highp> aligned_highp_mat2x3; /// 2 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<2, 3, float, aligned_mediump> aligned_mediump_mat2x3; /// 2 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<2, 3, float, aligned_lowp> aligned_lowp_mat2x3; /// 2 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<2, 3, double, aligned_highp> aligned_highp_dmat2x3; /// 2 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<2, 3, double, aligned_mediump> aligned_mediump_dmat2x3; /// 2 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<2, 3, double, aligned_lowp> aligned_lowp_dmat2x3; /// 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<2, 3, float, packed_highp> packed_highp_mat2x3; /// 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<2, 3, float, packed_mediump> packed_mediump_mat2x3; /// 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<2, 3, float, packed_lowp> packed_lowp_mat2x3; /// 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<2, 3, double, packed_highp> packed_highp_dmat2x3; /// 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<2, 3, double, packed_mediump> packed_mediump_dmat2x3; /// 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<2, 3, double, packed_lowp> packed_lowp_dmat2x3; // -- *mat2x4 -- /// 2 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<2, 4, float, aligned_highp> aligned_highp_mat2x4; /// 2 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<2, 4, float, aligned_mediump> aligned_mediump_mat2x4; /// 2 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<2, 4, float, aligned_lowp> aligned_lowp_mat2x4; /// 2 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<2, 4, double, aligned_highp> aligned_highp_dmat2x4; /// 2 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<2, 4, double, aligned_mediump> aligned_mediump_dmat2x4; /// 2 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<2, 4, double, aligned_lowp> aligned_lowp_dmat2x4; /// 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<2, 4, float, packed_highp> packed_highp_mat2x4; /// 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<2, 4, float, packed_mediump> packed_mediump_mat2x4; /// 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<2, 4, float, packed_lowp> packed_lowp_mat2x4; /// 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<2, 4, double, packed_highp> packed_highp_dmat2x4; /// 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<2, 4, double, packed_mediump> packed_mediump_dmat2x4; /// 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<2, 4, double, packed_lowp> packed_lowp_dmat2x4; // -- *mat3x2 -- /// 3 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<3, 2, float, aligned_highp> aligned_highp_mat3x2; /// 3 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<3, 2, float, aligned_mediump> aligned_mediump_mat3x2; /// 3 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<3, 2, float, aligned_lowp> aligned_lowp_mat3x2; /// 3 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<3, 2, double, aligned_highp> aligned_highp_dmat3x2; /// 3 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<3, 2, double, aligned_mediump> aligned_mediump_dmat3x2; /// 3 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<3, 2, double, aligned_lowp> aligned_lowp_dmat3x2; /// 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<3, 2, float, packed_highp> packed_highp_mat3x2; /// 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<3, 2, float, packed_mediump> packed_mediump_mat3x2; /// 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<3, 2, float, packed_lowp> packed_lowp_mat3x2; /// 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<3, 2, double, packed_highp> packed_highp_dmat3x2; /// 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<3, 2, double, packed_mediump> packed_mediump_dmat3x2; /// 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<3, 2, double, packed_lowp> packed_lowp_dmat3x2; // -- *mat3x3 -- /// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<3, 3, float, aligned_highp> aligned_highp_mat3x3; /// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<3, 3, float, aligned_mediump> aligned_mediump_mat3x3; /// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<3, 3, float, aligned_lowp> aligned_lowp_mat3x3; /// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<3, 3, double, aligned_highp> aligned_highp_dmat3x3; /// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<3, 3, double, aligned_mediump> aligned_mediump_dmat3x3; /// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<3, 3, double, aligned_lowp> aligned_lowp_dmat3x3; /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<3, 3, float, packed_highp> packed_highp_mat3x3; /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<3, 3, float, packed_mediump> packed_mediump_mat3x3; /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<3, 3, float, packed_lowp> packed_lowp_mat3x3; /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<3, 3, double, packed_highp> packed_highp_dmat3x3; /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<3, 3, double, packed_mediump> packed_mediump_dmat3x3; /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<3, 3, double, packed_lowp> packed_lowp_dmat3x3; // -- *mat3x4 -- /// 3 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<3, 4, float, aligned_highp> aligned_highp_mat3x4; /// 3 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<3, 4, float, aligned_mediump> aligned_mediump_mat3x4; /// 3 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<3, 4, float, aligned_lowp> aligned_lowp_mat3x4; /// 3 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<3, 4, double, aligned_highp> aligned_highp_dmat3x4; /// 3 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<3, 4, double, aligned_mediump> aligned_mediump_dmat3x4; /// 3 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<3, 4, double, aligned_lowp> aligned_lowp_dmat3x4; /// 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<3, 4, float, packed_highp> packed_highp_mat3x4; /// 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<3, 4, float, packed_mediump> packed_mediump_mat3x4; /// 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<3, 4, float, packed_lowp> packed_lowp_mat3x4; /// 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<3, 4, double, packed_highp> packed_highp_dmat3x4; /// 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<3, 4, double, packed_mediump> packed_mediump_dmat3x4; /// 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<3, 4, double, packed_lowp> packed_lowp_dmat3x4; // -- *mat4x2 -- /// 4 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<4, 2, float, aligned_highp> aligned_highp_mat4x2; /// 4 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<4, 2, float, aligned_mediump> aligned_mediump_mat4x2; /// 4 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<4, 2, float, aligned_lowp> aligned_lowp_mat4x2; /// 4 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<4, 2, double, aligned_highp> aligned_highp_dmat4x2; /// 4 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<4, 2, double, aligned_mediump> aligned_mediump_dmat4x2; /// 4 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<4, 2, double, aligned_lowp> aligned_lowp_dmat4x2; /// 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<4, 2, float, packed_highp> packed_highp_mat4x2; /// 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<4, 2, float, packed_mediump> packed_mediump_mat4x2; /// 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<4, 2, float, packed_lowp> packed_lowp_mat4x2; /// 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<4, 2, double, packed_highp> packed_highp_dmat4x2; /// 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<4, 2, double, packed_mediump> packed_mediump_dmat4x2; /// 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<4, 2, double, packed_lowp> packed_lowp_dmat4x2; // -- *mat4x3 -- /// 4 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<4, 3, float, aligned_highp> aligned_highp_mat4x3; /// 4 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<4, 3, float, aligned_mediump> aligned_mediump_mat4x3; /// 4 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<4, 3, float, aligned_lowp> aligned_lowp_mat4x3; /// 4 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<4, 3, double, aligned_highp> aligned_highp_dmat4x3; /// 4 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<4, 3, double, aligned_mediump> aligned_mediump_dmat4x3; /// 4 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<4, 3, double, aligned_lowp> aligned_lowp_dmat4x3; /// 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<4, 3, float, packed_highp> packed_highp_mat4x3; /// 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<4, 3, float, packed_mediump> packed_mediump_mat4x3; /// 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<4, 3, float, packed_lowp> packed_lowp_mat4x3; /// 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<4, 3, double, packed_highp> packed_highp_dmat4x3; /// 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<4, 3, double, packed_mediump> packed_mediump_dmat4x3; /// 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<4, 3, double, packed_lowp> packed_lowp_dmat4x3; // -- *mat4x4 -- /// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<4, 4, float, aligned_highp> aligned_highp_mat4x4; /// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<4, 4, float, aligned_mediump> aligned_mediump_mat4x4; /// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<4, 4, float, aligned_lowp> aligned_lowp_mat4x4; /// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<4, 4, double, aligned_highp> aligned_highp_dmat4x4; /// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<4, 4, double, aligned_mediump> aligned_mediump_dmat4x4; /// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<4, 4, double, aligned_lowp> aligned_lowp_dmat4x4; /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<4, 4, float, packed_highp> packed_highp_mat4x4; /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<4, 4, float, packed_mediump> packed_mediump_mat4x4; /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<4, 4, float, packed_lowp> packed_lowp_mat4x4; /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. typedef mat<4, 4, double, packed_highp> packed_highp_dmat4x4; /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. typedef mat<4, 4, double, packed_mediump> packed_mediump_dmat4x4; /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. typedef mat<4, 4, double, packed_lowp> packed_lowp_dmat4x4; // -- default -- #if(defined(GLM_PRECISION_LOWP_FLOAT)) typedef aligned_lowp_vec1 aligned_vec1; typedef aligned_lowp_vec2 aligned_vec2; typedef aligned_lowp_vec3 aligned_vec3; typedef aligned_lowp_vec4 aligned_vec4; typedef packed_lowp_vec1 packed_vec1; typedef packed_lowp_vec2 packed_vec2; typedef packed_lowp_vec3 packed_vec3; typedef packed_lowp_vec4 packed_vec4; typedef aligned_lowp_mat2 aligned_mat2; typedef aligned_lowp_mat3 aligned_mat3; typedef aligned_lowp_mat4 aligned_mat4; typedef packed_lowp_mat2 packed_mat2; typedef packed_lowp_mat3 packed_mat3; typedef packed_lowp_mat4 packed_mat4; typedef aligned_lowp_mat2x2 aligned_mat2x2; typedef aligned_lowp_mat2x3 aligned_mat2x3; typedef aligned_lowp_mat2x4 aligned_mat2x4; typedef aligned_lowp_mat3x2 aligned_mat3x2; typedef aligned_lowp_mat3x3 aligned_mat3x3; typedef aligned_lowp_mat3x4 aligned_mat3x4; typedef aligned_lowp_mat4x2 aligned_mat4x2; typedef aligned_lowp_mat4x3 aligned_mat4x3; typedef aligned_lowp_mat4x4 aligned_mat4x4; typedef packed_lowp_mat2x2 packed_mat2x2; typedef packed_lowp_mat2x3 packed_mat2x3; typedef packed_lowp_mat2x4 packed_mat2x4; typedef packed_lowp_mat3x2 packed_mat3x2; typedef packed_lowp_mat3x3 packed_mat3x3; typedef packed_lowp_mat3x4 packed_mat3x4; typedef packed_lowp_mat4x2 packed_mat4x2; typedef packed_lowp_mat4x3 packed_mat4x3; typedef packed_lowp_mat4x4 packed_mat4x4; #elif(defined(GLM_PRECISION_MEDIUMP_FLOAT)) typedef aligned_mediump_vec1 aligned_vec1; typedef aligned_mediump_vec2 aligned_vec2; typedef aligned_mediump_vec3 aligned_vec3; typedef aligned_mediump_vec4 aligned_vec4; typedef packed_mediump_vec1 packed_vec1; typedef packed_mediump_vec2 packed_vec2; typedef packed_mediump_vec3 packed_vec3; typedef packed_mediump_vec4 packed_vec4; typedef aligned_mediump_mat2 aligned_mat2; typedef aligned_mediump_mat3 aligned_mat3; typedef aligned_mediump_mat4 aligned_mat4; typedef packed_mediump_mat2 packed_mat2; typedef packed_mediump_mat3 packed_mat3; typedef packed_mediump_mat4 packed_mat4; typedef aligned_mediump_mat2x2 aligned_mat2x2; typedef aligned_mediump_mat2x3 aligned_mat2x3; typedef aligned_mediump_mat2x4 aligned_mat2x4; typedef aligned_mediump_mat3x2 aligned_mat3x2; typedef aligned_mediump_mat3x3 aligned_mat3x3; typedef aligned_mediump_mat3x4 aligned_mat3x4; typedef aligned_mediump_mat4x2 aligned_mat4x2; typedef aligned_mediump_mat4x3 aligned_mat4x3; typedef aligned_mediump_mat4x4 aligned_mat4x4; typedef packed_mediump_mat2x2 packed_mat2x2; typedef packed_mediump_mat2x3 packed_mat2x3; typedef packed_mediump_mat2x4 packed_mat2x4; typedef packed_mediump_mat3x2 packed_mat3x2; typedef packed_mediump_mat3x3 packed_mat3x3; typedef packed_mediump_mat3x4 packed_mat3x4; typedef packed_mediump_mat4x2 packed_mat4x2; typedef packed_mediump_mat4x3 packed_mat4x3; typedef packed_mediump_mat4x4 packed_mat4x4; #else //defined(GLM_PRECISION_HIGHP_FLOAT) /// 1 component vector aligned in memory of single-precision floating-point numbers. typedef aligned_highp_vec1 aligned_vec1; /// 2 components vector aligned in memory of single-precision floating-point numbers. typedef aligned_highp_vec2 aligned_vec2; /// 3 components vector aligned in memory of single-precision floating-point numbers. typedef aligned_highp_vec3 aligned_vec3; /// 4 components vector aligned in memory of single-precision floating-point numbers. typedef aligned_highp_vec4 aligned_vec4; /// 1 component vector tightly packed in memory of single-precision floating-point numbers. typedef packed_highp_vec1 packed_vec1; /// 2 components vector tightly packed in memory of single-precision floating-point numbers. typedef packed_highp_vec2 packed_vec2; /// 3 components vector tightly packed in memory of single-precision floating-point numbers. typedef packed_highp_vec3 packed_vec3; /// 4 components vector tightly packed in memory of single-precision floating-point numbers. typedef packed_highp_vec4 packed_vec4; /// 2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. typedef aligned_highp_mat2 aligned_mat2; /// 3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. typedef aligned_highp_mat3 aligned_mat3; /// 4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. typedef aligned_highp_mat4 aligned_mat4; /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers. typedef packed_highp_mat2 packed_mat2; /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers. typedef packed_highp_mat3 packed_mat3; /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers. typedef packed_highp_mat4 packed_mat4; /// 2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. typedef aligned_highp_mat2x2 aligned_mat2x2; /// 2 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. typedef aligned_highp_mat2x3 aligned_mat2x3; /// 2 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. typedef aligned_highp_mat2x4 aligned_mat2x4; /// 3 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. typedef aligned_highp_mat3x2 aligned_mat3x2; /// 3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. typedef aligned_highp_mat3x3 aligned_mat3x3; /// 3 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. typedef aligned_highp_mat3x4 aligned_mat3x4; /// 4 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. typedef aligned_highp_mat4x2 aligned_mat4x2; /// 4 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. typedef aligned_highp_mat4x3 aligned_mat4x3; /// 4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. typedef aligned_highp_mat4x4 aligned_mat4x4; /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers. typedef packed_highp_mat2x2 packed_mat2x2; /// 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers. typedef packed_highp_mat2x3 packed_mat2x3; /// 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers. typedef packed_highp_mat2x4 packed_mat2x4; /// 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers. typedef packed_highp_mat3x2 packed_mat3x2; /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers. typedef packed_highp_mat3x3 packed_mat3x3; /// 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers. typedef packed_highp_mat3x4 packed_mat3x4; /// 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers. typedef packed_highp_mat4x2 packed_mat4x2; /// 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers. typedef packed_highp_mat4x3 packed_mat4x3; /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers. typedef packed_highp_mat4x4 packed_mat4x4; #endif//GLM_PRECISION #if(defined(GLM_PRECISION_LOWP_DOUBLE)) typedef aligned_lowp_dvec1 aligned_dvec1; typedef aligned_lowp_dvec2 aligned_dvec2; typedef aligned_lowp_dvec3 aligned_dvec3; typedef aligned_lowp_dvec4 aligned_dvec4; typedef packed_lowp_dvec1 packed_dvec1; typedef packed_lowp_dvec2 packed_dvec2; typedef packed_lowp_dvec3 packed_dvec3; typedef packed_lowp_dvec4 packed_dvec4; typedef aligned_lowp_dmat2 aligned_dmat2; typedef aligned_lowp_dmat3 aligned_dmat3; typedef aligned_lowp_dmat4 aligned_dmat4; typedef packed_lowp_dmat2 packed_dmat2; typedef packed_lowp_dmat3 packed_dmat3; typedef packed_lowp_dmat4 packed_dmat4; typedef aligned_lowp_dmat2x2 aligned_dmat2x2; typedef aligned_lowp_dmat2x3 aligned_dmat2x3; typedef aligned_lowp_dmat2x4 aligned_dmat2x4; typedef aligned_lowp_dmat3x2 aligned_dmat3x2; typedef aligned_lowp_dmat3x3 aligned_dmat3x3; typedef aligned_lowp_dmat3x4 aligned_dmat3x4; typedef aligned_lowp_dmat4x2 aligned_dmat4x2; typedef aligned_lowp_dmat4x3 aligned_dmat4x3; typedef aligned_lowp_dmat4x4 aligned_dmat4x4; typedef packed_lowp_dmat2x2 packed_dmat2x2; typedef packed_lowp_dmat2x3 packed_dmat2x3; typedef packed_lowp_dmat2x4 packed_dmat2x4; typedef packed_lowp_dmat3x2 packed_dmat3x2; typedef packed_lowp_dmat3x3 packed_dmat3x3; typedef packed_lowp_dmat3x4 packed_dmat3x4; typedef packed_lowp_dmat4x2 packed_dmat4x2; typedef packed_lowp_dmat4x3 packed_dmat4x3; typedef packed_lowp_dmat4x4 packed_dmat4x4; #elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE)) typedef aligned_mediump_dvec1 aligned_dvec1; typedef aligned_mediump_dvec2 aligned_dvec2; typedef aligned_mediump_dvec3 aligned_dvec3; typedef aligned_mediump_dvec4 aligned_dvec4; typedef packed_mediump_dvec1 packed_dvec1; typedef packed_mediump_dvec2 packed_dvec2; typedef packed_mediump_dvec3 packed_dvec3; typedef packed_mediump_dvec4 packed_dvec4; typedef aligned_mediump_dmat2 aligned_dmat2; typedef aligned_mediump_dmat3 aligned_dmat3; typedef aligned_mediump_dmat4 aligned_dmat4; typedef packed_mediump_dmat2 packed_dmat2; typedef packed_mediump_dmat3 packed_dmat3; typedef packed_mediump_dmat4 packed_dmat4; typedef aligned_mediump_dmat2x2 aligned_dmat2x2; typedef aligned_mediump_dmat2x3 aligned_dmat2x3; typedef aligned_mediump_dmat2x4 aligned_dmat2x4; typedef aligned_mediump_dmat3x2 aligned_dmat3x2; typedef aligned_mediump_dmat3x3 aligned_dmat3x3; typedef aligned_mediump_dmat3x4 aligned_dmat3x4; typedef aligned_mediump_dmat4x2 aligned_dmat4x2; typedef aligned_mediump_dmat4x3 aligned_dmat4x3; typedef aligned_mediump_dmat4x4 aligned_dmat4x4; typedef packed_mediump_dmat2x2 packed_dmat2x2; typedef packed_mediump_dmat2x3 packed_dmat2x3; typedef packed_mediump_dmat2x4 packed_dmat2x4; typedef packed_mediump_dmat3x2 packed_dmat3x2; typedef packed_mediump_dmat3x3 packed_dmat3x3; typedef packed_mediump_dmat3x4 packed_dmat3x4; typedef packed_mediump_dmat4x2 packed_dmat4x2; typedef packed_mediump_dmat4x3 packed_dmat4x3; typedef packed_mediump_dmat4x4 packed_dmat4x4; #else //defined(GLM_PRECISION_HIGHP_DOUBLE) /// 1 component vector aligned in memory of double-precision floating-point numbers. typedef aligned_highp_dvec1 aligned_dvec1; /// 2 components vector aligned in memory of double-precision floating-point numbers. typedef aligned_highp_dvec2 aligned_dvec2; /// 3 components vector aligned in memory of double-precision floating-point numbers. typedef aligned_highp_dvec3 aligned_dvec3; /// 4 components vector aligned in memory of double-precision floating-point numbers. typedef aligned_highp_dvec4 aligned_dvec4; /// 1 component vector tightly packed in memory of double-precision floating-point numbers. typedef packed_highp_dvec1 packed_dvec1; /// 2 components vector tightly packed in memory of double-precision floating-point numbers. typedef packed_highp_dvec2 packed_dvec2; /// 3 components vector tightly packed in memory of double-precision floating-point numbers. typedef packed_highp_dvec3 packed_dvec3; /// 4 components vector tightly packed in memory of double-precision floating-point numbers. typedef packed_highp_dvec4 packed_dvec4; /// 2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. typedef aligned_highp_dmat2 aligned_dmat2; /// 3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. typedef aligned_highp_dmat3 aligned_dmat3; /// 4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. typedef aligned_highp_dmat4 aligned_dmat4; /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers. typedef packed_highp_dmat2 packed_dmat2; /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers. typedef packed_highp_dmat3 packed_dmat3; /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers. typedef packed_highp_dmat4 packed_dmat4; /// 2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. typedef aligned_highp_dmat2x2 aligned_dmat2x2; /// 2 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. typedef aligned_highp_dmat2x3 aligned_dmat2x3; /// 2 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. typedef aligned_highp_dmat2x4 aligned_dmat2x4; /// 3 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. typedef aligned_highp_dmat3x2 aligned_dmat3x2; /// 3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. typedef aligned_highp_dmat3x3 aligned_dmat3x3; /// 3 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. typedef aligned_highp_dmat3x4 aligned_dmat3x4; /// 4 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. typedef aligned_highp_dmat4x2 aligned_dmat4x2; /// 4 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. typedef aligned_highp_dmat4x3 aligned_dmat4x3; /// 4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. typedef aligned_highp_dmat4x4 aligned_dmat4x4; /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers. typedef packed_highp_dmat2x2 packed_dmat2x2; /// 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers. typedef packed_highp_dmat2x3 packed_dmat2x3; /// 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers. typedef packed_highp_dmat2x4 packed_dmat2x4; /// 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers. typedef packed_highp_dmat3x2 packed_dmat3x2; /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers. typedef packed_highp_dmat3x3 packed_dmat3x3; /// 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers. typedef packed_highp_dmat3x4 packed_dmat3x4; /// 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers. typedef packed_highp_dmat4x2 packed_dmat4x2; /// 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers. typedef packed_highp_dmat4x3 packed_dmat4x3; /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers. typedef packed_highp_dmat4x4 packed_dmat4x4; #endif//GLM_PRECISION #if(defined(GLM_PRECISION_LOWP_INT)) typedef aligned_lowp_ivec1 aligned_ivec1; typedef aligned_lowp_ivec2 aligned_ivec2; typedef aligned_lowp_ivec3 aligned_ivec3; typedef aligned_lowp_ivec4 aligned_ivec4; #elif(defined(GLM_PRECISION_MEDIUMP_INT)) typedef aligned_mediump_ivec1 aligned_ivec1; typedef aligned_mediump_ivec2 aligned_ivec2; typedef aligned_mediump_ivec3 aligned_ivec3; typedef aligned_mediump_ivec4 aligned_ivec4; #else //defined(GLM_PRECISION_HIGHP_INT) /// 1 component vector aligned in memory of signed integer numbers. typedef aligned_highp_ivec1 aligned_ivec1; /// 2 components vector aligned in memory of signed integer numbers. typedef aligned_highp_ivec2 aligned_ivec2; /// 3 components vector aligned in memory of signed integer numbers. typedef aligned_highp_ivec3 aligned_ivec3; /// 4 components vector aligned in memory of signed integer numbers. typedef aligned_highp_ivec4 aligned_ivec4; /// 1 component vector tightly packed in memory of signed integer numbers. typedef packed_highp_ivec1 packed_ivec1; /// 2 components vector tightly packed in memory of signed integer numbers. typedef packed_highp_ivec2 packed_ivec2; /// 3 components vector tightly packed in memory of signed integer numbers. typedef packed_highp_ivec3 packed_ivec3; /// 4 components vector tightly packed in memory of signed integer numbers. typedef packed_highp_ivec4 packed_ivec4; #endif//GLM_PRECISION // -- Unsigned integer definition -- #if(defined(GLM_PRECISION_LOWP_UINT)) typedef aligned_lowp_uvec1 aligned_uvec1; typedef aligned_lowp_uvec2 aligned_uvec2; typedef aligned_lowp_uvec3 aligned_uvec3; typedef aligned_lowp_uvec4 aligned_uvec4; #elif(defined(GLM_PRECISION_MEDIUMP_UINT)) typedef aligned_mediump_uvec1 aligned_uvec1; typedef aligned_mediump_uvec2 aligned_uvec2; typedef aligned_mediump_uvec3 aligned_uvec3; typedef aligned_mediump_uvec4 aligned_uvec4; #else //defined(GLM_PRECISION_HIGHP_UINT) /// 1 component vector aligned in memory of unsigned integer numbers. typedef aligned_highp_uvec1 aligned_uvec1; /// 2 components vector aligned in memory of unsigned integer numbers. typedef aligned_highp_uvec2 aligned_uvec2; /// 3 components vector aligned in memory of unsigned integer numbers. typedef aligned_highp_uvec3 aligned_uvec3; /// 4 components vector aligned in memory of unsigned integer numbers. typedef aligned_highp_uvec4 aligned_uvec4; /// 1 component vector tightly packed in memory of unsigned integer numbers. typedef packed_highp_uvec1 packed_uvec1; /// 2 components vector tightly packed in memory of unsigned integer numbers. typedef packed_highp_uvec2 packed_uvec2; /// 3 components vector tightly packed in memory of unsigned integer numbers. typedef packed_highp_uvec3 packed_uvec3; /// 4 components vector tightly packed in memory of unsigned integer numbers. typedef packed_highp_uvec4 packed_uvec4; #endif//GLM_PRECISION #if(defined(GLM_PRECISION_LOWP_BOOL)) typedef aligned_lowp_bvec1 aligned_bvec1; typedef aligned_lowp_bvec2 aligned_bvec2; typedef aligned_lowp_bvec3 aligned_bvec3; typedef aligned_lowp_bvec4 aligned_bvec4; #elif(defined(GLM_PRECISION_MEDIUMP_BOOL)) typedef aligned_mediump_bvec1 aligned_bvec1; typedef aligned_mediump_bvec2 aligned_bvec2; typedef aligned_mediump_bvec3 aligned_bvec3; typedef aligned_mediump_bvec4 aligned_bvec4; #else //defined(GLM_PRECISION_HIGHP_BOOL) /// 1 component vector aligned in memory of bool values. typedef aligned_highp_bvec1 aligned_bvec1; /// 2 components vector aligned in memory of bool values. typedef aligned_highp_bvec2 aligned_bvec2; /// 3 components vector aligned in memory of bool values. typedef aligned_highp_bvec3 aligned_bvec3; /// 4 components vector aligned in memory of bool values. typedef aligned_highp_bvec4 aligned_bvec4; /// 1 components vector tightly packed in memory of bool values. typedef packed_highp_bvec1 packed_bvec1; /// 2 components vector tightly packed in memory of bool values. typedef packed_highp_bvec2 packed_bvec2; /// 3 components vector tightly packed in memory of bool values. typedef packed_highp_bvec3 packed_bvec3; /// 4 components vector tightly packed in memory of bool values. typedef packed_highp_bvec4 packed_bvec4; #endif//GLM_PRECISION /// @} }//namespace glm ================================================ FILE: libraries/glm/gtc/type_precision.hpp ================================================ /// @ref gtc_type_precision /// @file glm/gtc/type_precision.hpp /// /// @see core (dependence) /// @see gtc_quaternion (dependence) /// /// @defgroup gtc_type_precision GLM_GTC_type_precision /// @ingroup gtc /// /// Include to use the features of this extension. /// /// Defines specific C++-based qualifier types. #pragma once // Dependency: #include "../gtc/quaternion.hpp" #include "../gtc/vec1.hpp" #include "../ext/scalar_int_sized.hpp" #include "../ext/scalar_uint_sized.hpp" #include "../detail/type_vec2.hpp" #include "../detail/type_vec3.hpp" #include "../detail/type_vec4.hpp" #include "../detail/type_mat2x2.hpp" #include "../detail/type_mat2x3.hpp" #include "../detail/type_mat2x4.hpp" #include "../detail/type_mat3x2.hpp" #include "../detail/type_mat3x3.hpp" #include "../detail/type_mat3x4.hpp" #include "../detail/type_mat4x2.hpp" #include "../detail/type_mat4x3.hpp" #include "../detail/type_mat4x4.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_GTC_type_precision extension included") #endif namespace glm { /////////////////////////// // Signed int vector types /// @addtogroup gtc_type_precision /// @{ /// Low qualifier 8 bit signed integer type. /// @see gtc_type_precision typedef detail::int8 lowp_int8; /// Low qualifier 16 bit signed integer type. /// @see gtc_type_precision typedef detail::int16 lowp_int16; /// Low qualifier 32 bit signed integer type. /// @see gtc_type_precision typedef detail::int32 lowp_int32; /// Low qualifier 64 bit signed integer type. /// @see gtc_type_precision typedef detail::int64 lowp_int64; /// Low qualifier 8 bit signed integer type. /// @see gtc_type_precision typedef detail::int8 lowp_int8_t; /// Low qualifier 16 bit signed integer type. /// @see gtc_type_precision typedef detail::int16 lowp_int16_t; /// Low qualifier 32 bit signed integer type. /// @see gtc_type_precision typedef detail::int32 lowp_int32_t; /// Low qualifier 64 bit signed integer type. /// @see gtc_type_precision typedef detail::int64 lowp_int64_t; /// Low qualifier 8 bit signed integer type. /// @see gtc_type_precision typedef detail::int8 lowp_i8; /// Low qualifier 16 bit signed integer type. /// @see gtc_type_precision typedef detail::int16 lowp_i16; /// Low qualifier 32 bit signed integer type. /// @see gtc_type_precision typedef detail::int32 lowp_i32; /// Low qualifier 64 bit signed integer type. /// @see gtc_type_precision typedef detail::int64 lowp_i64; /// Medium qualifier 8 bit signed integer type. /// @see gtc_type_precision typedef detail::int8 mediump_int8; /// Medium qualifier 16 bit signed integer type. /// @see gtc_type_precision typedef detail::int16 mediump_int16; /// Medium qualifier 32 bit signed integer type. /// @see gtc_type_precision typedef detail::int32 mediump_int32; /// Medium qualifier 64 bit signed integer type. /// @see gtc_type_precision typedef detail::int64 mediump_int64; /// Medium qualifier 8 bit signed integer type. /// @see gtc_type_precision typedef detail::int8 mediump_int8_t; /// Medium qualifier 16 bit signed integer type. /// @see gtc_type_precision typedef detail::int16 mediump_int16_t; /// Medium qualifier 32 bit signed integer type. /// @see gtc_type_precision typedef detail::int32 mediump_int32_t; /// Medium qualifier 64 bit signed integer type. /// @see gtc_type_precision typedef detail::int64 mediump_int64_t; /// Medium qualifier 8 bit signed integer type. /// @see gtc_type_precision typedef detail::int8 mediump_i8; /// Medium qualifier 16 bit signed integer type. /// @see gtc_type_precision typedef detail::int16 mediump_i16; /// Medium qualifier 32 bit signed integer type. /// @see gtc_type_precision typedef detail::int32 mediump_i32; /// Medium qualifier 64 bit signed integer type. /// @see gtc_type_precision typedef detail::int64 mediump_i64; /// High qualifier 8 bit signed integer type. /// @see gtc_type_precision typedef detail::int8 highp_int8; /// High qualifier 16 bit signed integer type. /// @see gtc_type_precision typedef detail::int16 highp_int16; /// High qualifier 32 bit signed integer type. /// @see gtc_type_precision typedef detail::int32 highp_int32; /// High qualifier 64 bit signed integer type. /// @see gtc_type_precision typedef detail::int64 highp_int64; /// High qualifier 8 bit signed integer type. /// @see gtc_type_precision typedef detail::int8 highp_int8_t; /// High qualifier 16 bit signed integer type. /// @see gtc_type_precision typedef detail::int16 highp_int16_t; /// 32 bit signed integer type. /// @see gtc_type_precision typedef detail::int32 highp_int32_t; /// High qualifier 64 bit signed integer type. /// @see gtc_type_precision typedef detail::int64 highp_int64_t; /// High qualifier 8 bit signed integer type. /// @see gtc_type_precision typedef detail::int8 highp_i8; /// High qualifier 16 bit signed integer type. /// @see gtc_type_precision typedef detail::int16 highp_i16; /// High qualifier 32 bit signed integer type. /// @see gtc_type_precision typedef detail::int32 highp_i32; /// High qualifier 64 bit signed integer type. /// @see gtc_type_precision typedef detail::int64 highp_i64; #if GLM_HAS_EXTENDED_INTEGER_TYPE using std::int8_t; using std::int16_t; using std::int32_t; using std::int64_t; #else /// 8 bit signed integer type. /// @see gtc_type_precision typedef detail::int8 int8_t; /// 16 bit signed integer type. /// @see gtc_type_precision typedef detail::int16 int16_t; /// 32 bit signed integer type. /// @see gtc_type_precision typedef detail::int32 int32_t; /// 64 bit signed integer type. /// @see gtc_type_precision typedef detail::int64 int64_t; #endif /// 8 bit signed integer type. /// @see gtc_type_precision typedef detail::int8 i8; /// 16 bit signed integer type. /// @see gtc_type_precision typedef detail::int16 i16; /// 32 bit signed integer type. /// @see gtc_type_precision typedef detail::int32 i32; /// 64 bit signed integer type. /// @see gtc_type_precision typedef detail::int64 i64; /// Low qualifier 8 bit signed integer scalar type. /// @see gtc_type_precision typedef vec<1, i8, lowp> lowp_i8vec1; /// Low qualifier 8 bit signed integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, i8, lowp> lowp_i8vec2; /// Low qualifier 8 bit signed integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, i8, lowp> lowp_i8vec3; /// Low qualifier 8 bit signed integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, i8, lowp> lowp_i8vec4; /// Medium qualifier 8 bit signed integer scalar type. /// @see gtc_type_precision typedef vec<1, i8, mediump> mediump_i8vec1; /// Medium qualifier 8 bit signed integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, i8, mediump> mediump_i8vec2; /// Medium qualifier 8 bit signed integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, i8, mediump> mediump_i8vec3; /// Medium qualifier 8 bit signed integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, i8, mediump> mediump_i8vec4; /// High qualifier 8 bit signed integer scalar type. /// @see gtc_type_precision typedef vec<1, i8, highp> highp_i8vec1; /// High qualifier 8 bit signed integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, i8, highp> highp_i8vec2; /// High qualifier 8 bit signed integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, i8, highp> highp_i8vec3; /// High qualifier 8 bit signed integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, i8, highp> highp_i8vec4; /// 8 bit signed integer scalar type. /// @see gtc_type_precision typedef vec<1, i8, defaultp> i8vec1; /// 8 bit signed integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, i8, defaultp> i8vec2; /// 8 bit signed integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, i8, defaultp> i8vec3; /// 8 bit signed integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, i8, defaultp> i8vec4; /// Low qualifier 16 bit signed integer scalar type. /// @see gtc_type_precision typedef vec<1, i16, lowp> lowp_i16vec1; /// Low qualifier 16 bit signed integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, i16, lowp> lowp_i16vec2; /// Low qualifier 16 bit signed integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, i16, lowp> lowp_i16vec3; /// Low qualifier 16 bit signed integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, i16, lowp> lowp_i16vec4; /// Medium qualifier 16 bit signed integer scalar type. /// @see gtc_type_precision typedef vec<1, i16, mediump> mediump_i16vec1; /// Medium qualifier 16 bit signed integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, i16, mediump> mediump_i16vec2; /// Medium qualifier 16 bit signed integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, i16, mediump> mediump_i16vec3; /// Medium qualifier 16 bit signed integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, i16, mediump> mediump_i16vec4; /// High qualifier 16 bit signed integer scalar type. /// @see gtc_type_precision typedef vec<1, i16, highp> highp_i16vec1; /// High qualifier 16 bit signed integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, i16, highp> highp_i16vec2; /// High qualifier 16 bit signed integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, i16, highp> highp_i16vec3; /// High qualifier 16 bit signed integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, i16, highp> highp_i16vec4; /// 16 bit signed integer scalar type. /// @see gtc_type_precision typedef vec<1, i16, defaultp> i16vec1; /// 16 bit signed integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, i16, defaultp> i16vec2; /// 16 bit signed integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, i16, defaultp> i16vec3; /// 16 bit signed integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, i16, defaultp> i16vec4; /// Low qualifier 32 bit signed integer scalar type. /// @see gtc_type_precision typedef vec<1, i32, lowp> lowp_i32vec1; /// Low qualifier 32 bit signed integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, i32, lowp> lowp_i32vec2; /// Low qualifier 32 bit signed integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, i32, lowp> lowp_i32vec3; /// Low qualifier 32 bit signed integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, i32, lowp> lowp_i32vec4; /// Medium qualifier 32 bit signed integer scalar type. /// @see gtc_type_precision typedef vec<1, i32, mediump> mediump_i32vec1; /// Medium qualifier 32 bit signed integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, i32, mediump> mediump_i32vec2; /// Medium qualifier 32 bit signed integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, i32, mediump> mediump_i32vec3; /// Medium qualifier 32 bit signed integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, i32, mediump> mediump_i32vec4; /// High qualifier 32 bit signed integer scalar type. /// @see gtc_type_precision typedef vec<1, i32, highp> highp_i32vec1; /// High qualifier 32 bit signed integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, i32, highp> highp_i32vec2; /// High qualifier 32 bit signed integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, i32, highp> highp_i32vec3; /// High qualifier 32 bit signed integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, i32, highp> highp_i32vec4; /// 32 bit signed integer scalar type. /// @see gtc_type_precision typedef vec<1, i32, defaultp> i32vec1; /// 32 bit signed integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, i32, defaultp> i32vec2; /// 32 bit signed integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, i32, defaultp> i32vec3; /// 32 bit signed integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, i32, defaultp> i32vec4; /// Low qualifier 64 bit signed integer scalar type. /// @see gtc_type_precision typedef vec<1, i64, lowp> lowp_i64vec1; /// Low qualifier 64 bit signed integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, i64, lowp> lowp_i64vec2; /// Low qualifier 64 bit signed integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, i64, lowp> lowp_i64vec3; /// Low qualifier 64 bit signed integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, i64, lowp> lowp_i64vec4; /// Medium qualifier 64 bit signed integer scalar type. /// @see gtc_type_precision typedef vec<1, i64, mediump> mediump_i64vec1; /// Medium qualifier 64 bit signed integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, i64, mediump> mediump_i64vec2; /// Medium qualifier 64 bit signed integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, i64, mediump> mediump_i64vec3; /// Medium qualifier 64 bit signed integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, i64, mediump> mediump_i64vec4; /// High qualifier 64 bit signed integer scalar type. /// @see gtc_type_precision typedef vec<1, i64, highp> highp_i64vec1; /// High qualifier 64 bit signed integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, i64, highp> highp_i64vec2; /// High qualifier 64 bit signed integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, i64, highp> highp_i64vec3; /// High qualifier 64 bit signed integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, i64, highp> highp_i64vec4; /// 64 bit signed integer scalar type. /// @see gtc_type_precision typedef vec<1, i64, defaultp> i64vec1; /// 64 bit signed integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, i64, defaultp> i64vec2; /// 64 bit signed integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, i64, defaultp> i64vec3; /// 64 bit signed integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, i64, defaultp> i64vec4; ///////////////////////////// // Unsigned int vector types /// Low qualifier 8 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint8 lowp_uint8; /// Low qualifier 16 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint16 lowp_uint16; /// Low qualifier 32 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint32 lowp_uint32; /// Low qualifier 64 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint64 lowp_uint64; /// Low qualifier 8 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint8 lowp_uint8_t; /// Low qualifier 16 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint16 lowp_uint16_t; /// Low qualifier 32 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint32 lowp_uint32_t; /// Low qualifier 64 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint64 lowp_uint64_t; /// Low qualifier 8 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint8 lowp_u8; /// Low qualifier 16 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint16 lowp_u16; /// Low qualifier 32 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint32 lowp_u32; /// Low qualifier 64 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint64 lowp_u64; /// Medium qualifier 8 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint8 mediump_uint8; /// Medium qualifier 16 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint16 mediump_uint16; /// Medium qualifier 32 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint32 mediump_uint32; /// Medium qualifier 64 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint64 mediump_uint64; /// Medium qualifier 8 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint8 mediump_uint8_t; /// Medium qualifier 16 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint16 mediump_uint16_t; /// Medium qualifier 32 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint32 mediump_uint32_t; /// Medium qualifier 64 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint64 mediump_uint64_t; /// Medium qualifier 8 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint8 mediump_u8; /// Medium qualifier 16 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint16 mediump_u16; /// Medium qualifier 32 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint32 mediump_u32; /// Medium qualifier 64 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint64 mediump_u64; /// High qualifier 8 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint8 highp_uint8; /// High qualifier 16 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint16 highp_uint16; /// High qualifier 32 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint32 highp_uint32; /// High qualifier 64 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint64 highp_uint64; /// High qualifier 8 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint8 highp_uint8_t; /// High qualifier 16 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint16 highp_uint16_t; /// High qualifier 32 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint32 highp_uint32_t; /// High qualifier 64 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint64 highp_uint64_t; /// High qualifier 8 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint8 highp_u8; /// High qualifier 16 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint16 highp_u16; /// High qualifier 32 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint32 highp_u32; /// High qualifier 64 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint64 highp_u64; #if GLM_HAS_EXTENDED_INTEGER_TYPE using std::uint8_t; using std::uint16_t; using std::uint32_t; using std::uint64_t; #else /// Default qualifier 8 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint8 uint8_t; /// Default qualifier 16 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint16 uint16_t; /// Default qualifier 32 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint32 uint32_t; /// Default qualifier 64 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint64 uint64_t; #endif /// Default qualifier 8 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint8 u8; /// Default qualifier 16 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint16 u16; /// Default qualifier 32 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint32 u32; /// Default qualifier 64 bit unsigned integer type. /// @see gtc_type_precision typedef detail::uint64 u64; ////////////////////// // Float vector types /// Single-qualifier floating-point scalar. /// @see gtc_type_precision typedef float float32; /// Double-qualifier floating-point scalar. /// @see gtc_type_precision typedef double float64; /// Low 32 bit single-qualifier floating-point scalar. /// @see gtc_type_precision typedef float32 lowp_float32; /// Low 64 bit double-qualifier floating-point scalar. /// @see gtc_type_precision typedef float64 lowp_float64; /// Low 32 bit single-qualifier floating-point scalar. /// @see gtc_type_precision typedef float32 lowp_float32_t; /// Low 64 bit double-qualifier floating-point scalar. /// @see gtc_type_precision typedef float64 lowp_float64_t; /// Low 32 bit single-qualifier floating-point scalar. /// @see gtc_type_precision typedef float32 lowp_f32; /// Low 64 bit double-qualifier floating-point scalar. /// @see gtc_type_precision typedef float64 lowp_f64; /// Low 32 bit single-qualifier floating-point scalar. /// @see gtc_type_precision typedef float32 lowp_float32; /// Low 64 bit double-qualifier floating-point scalar. /// @see gtc_type_precision typedef float64 lowp_float64; /// Low 32 bit single-qualifier floating-point scalar. /// @see gtc_type_precision typedef float32 lowp_float32_t; /// Low 64 bit double-qualifier floating-point scalar. /// @see gtc_type_precision typedef float64 lowp_float64_t; /// Low 32 bit single-qualifier floating-point scalar. /// @see gtc_type_precision typedef float32 lowp_f32; /// Low 64 bit double-qualifier floating-point scalar. /// @see gtc_type_precision typedef float64 lowp_f64; /// Low 32 bit single-qualifier floating-point scalar. /// @see gtc_type_precision typedef float32 lowp_float32; /// Low 64 bit double-qualifier floating-point scalar. /// @see gtc_type_precision typedef float64 lowp_float64; /// Low 32 bit single-qualifier floating-point scalar. /// @see gtc_type_precision typedef float32 lowp_float32_t; /// Low 64 bit double-qualifier floating-point scalar. /// @see gtc_type_precision typedef float64 lowp_float64_t; /// Low 32 bit single-qualifier floating-point scalar. /// @see gtc_type_precision typedef float32 lowp_f32; /// Low 64 bit double-qualifier floating-point scalar. /// @see gtc_type_precision typedef float64 lowp_f64; /// Medium 32 bit single-qualifier floating-point scalar. /// @see gtc_type_precision typedef float32 mediump_float32; /// Medium 64 bit double-qualifier floating-point scalar. /// @see gtc_type_precision typedef float64 mediump_float64; /// Medium 32 bit single-qualifier floating-point scalar. /// @see gtc_type_precision typedef float32 mediump_float32_t; /// Medium 64 bit double-qualifier floating-point scalar. /// @see gtc_type_precision typedef float64 mediump_float64_t; /// Medium 32 bit single-qualifier floating-point scalar. /// @see gtc_type_precision typedef float32 mediump_f32; /// Medium 64 bit double-qualifier floating-point scalar. /// @see gtc_type_precision typedef float64 mediump_f64; /// High 32 bit single-qualifier floating-point scalar. /// @see gtc_type_precision typedef float32 highp_float32; /// High 64 bit double-qualifier floating-point scalar. /// @see gtc_type_precision typedef float64 highp_float64; /// High 32 bit single-qualifier floating-point scalar. /// @see gtc_type_precision typedef float32 highp_float32_t; /// High 64 bit double-qualifier floating-point scalar. /// @see gtc_type_precision typedef float64 highp_float64_t; /// High 32 bit single-qualifier floating-point scalar. /// @see gtc_type_precision typedef float32 highp_f32; /// High 64 bit double-qualifier floating-point scalar. /// @see gtc_type_precision typedef float64 highp_f64; #if(defined(GLM_PRECISION_LOWP_FLOAT)) /// Default 32 bit single-qualifier floating-point scalar. /// @see gtc_type_precision typedef lowp_float32_t float32_t; /// Default 64 bit double-qualifier floating-point scalar. /// @see gtc_type_precision typedef lowp_float64_t float64_t; /// Default 32 bit single-qualifier floating-point scalar. /// @see gtc_type_precision typedef lowp_f32 f32; /// Default 64 bit double-qualifier floating-point scalar. /// @see gtc_type_precision typedef lowp_f64 f64; #elif(defined(GLM_PRECISION_MEDIUMP_FLOAT)) /// Default 32 bit single-qualifier floating-point scalar. /// @see gtc_type_precision typedef mediump_float32 float32_t; /// Default 64 bit double-qualifier floating-point scalar. /// @see gtc_type_precision typedef mediump_float64 float64_t; /// Default 32 bit single-qualifier floating-point scalar. /// @see gtc_type_precision typedef mediump_float32 f32; /// Default 64 bit double-qualifier floating-point scalar. /// @see gtc_type_precision typedef mediump_float64 f64; #else//(defined(GLM_PRECISION_HIGHP_FLOAT)) /// Default 32 bit single-qualifier floating-point scalar. /// @see gtc_type_precision typedef highp_float32_t float32_t; /// Default 64 bit double-qualifier floating-point scalar. /// @see gtc_type_precision typedef highp_float64_t float64_t; /// Default 32 bit single-qualifier floating-point scalar. /// @see gtc_type_precision typedef highp_float32_t f32; /// Default 64 bit double-qualifier floating-point scalar. /// @see gtc_type_precision typedef highp_float64_t f64; #endif /// Low single-qualifier floating-point vector of 1 component. /// @see gtc_type_precision typedef vec<1, float, lowp> lowp_fvec1; /// Low single-qualifier floating-point vector of 2 components. /// @see gtc_type_precision typedef vec<2, float, lowp> lowp_fvec2; /// Low single-qualifier floating-point vector of 3 components. /// @see gtc_type_precision typedef vec<3, float, lowp> lowp_fvec3; /// Low single-qualifier floating-point vector of 4 components. /// @see gtc_type_precision typedef vec<4, float, lowp> lowp_fvec4; /// Medium single-qualifier floating-point vector of 1 component. /// @see gtc_type_precision typedef vec<1, float, mediump> mediump_fvec1; /// Medium Single-qualifier floating-point vector of 2 components. /// @see gtc_type_precision typedef vec<2, float, mediump> mediump_fvec2; /// Medium Single-qualifier floating-point vector of 3 components. /// @see gtc_type_precision typedef vec<3, float, mediump> mediump_fvec3; /// Medium Single-qualifier floating-point vector of 4 components. /// @see gtc_type_precision typedef vec<4, float, mediump> mediump_fvec4; /// High single-qualifier floating-point vector of 1 component. /// @see gtc_type_precision typedef vec<1, float, highp> highp_fvec1; /// High Single-qualifier floating-point vector of 2 components. /// @see core_precision typedef vec<2, float, highp> highp_fvec2; /// High Single-qualifier floating-point vector of 3 components. /// @see core_precision typedef vec<3, float, highp> highp_fvec3; /// High Single-qualifier floating-point vector of 4 components. /// @see core_precision typedef vec<4, float, highp> highp_fvec4; /// Low single-qualifier floating-point vector of 1 component. /// @see gtc_type_precision typedef vec<1, f32, lowp> lowp_f32vec1; /// Low single-qualifier floating-point vector of 2 components. /// @see core_precision typedef vec<2, f32, lowp> lowp_f32vec2; /// Low single-qualifier floating-point vector of 3 components. /// @see core_precision typedef vec<3, f32, lowp> lowp_f32vec3; /// Low single-qualifier floating-point vector of 4 components. /// @see core_precision typedef vec<4, f32, lowp> lowp_f32vec4; /// Medium single-qualifier floating-point vector of 1 component. /// @see gtc_type_precision typedef vec<1, f32, mediump> mediump_f32vec1; /// Medium single-qualifier floating-point vector of 2 components. /// @see core_precision typedef vec<2, f32, mediump> mediump_f32vec2; /// Medium single-qualifier floating-point vector of 3 components. /// @see core_precision typedef vec<3, f32, mediump> mediump_f32vec3; /// Medium single-qualifier floating-point vector of 4 components. /// @see core_precision typedef vec<4, f32, mediump> mediump_f32vec4; /// High single-qualifier floating-point vector of 1 component. /// @see gtc_type_precision typedef vec<1, f32, highp> highp_f32vec1; /// High single-qualifier floating-point vector of 2 components. /// @see gtc_type_precision typedef vec<2, f32, highp> highp_f32vec2; /// High single-qualifier floating-point vector of 3 components. /// @see gtc_type_precision typedef vec<3, f32, highp> highp_f32vec3; /// High single-qualifier floating-point vector of 4 components. /// @see gtc_type_precision typedef vec<4, f32, highp> highp_f32vec4; /// Low double-qualifier floating-point vector of 1 component. /// @see gtc_type_precision typedef vec<1, f64, lowp> lowp_f64vec1; /// Low double-qualifier floating-point vector of 2 components. /// @see gtc_type_precision typedef vec<2, f64, lowp> lowp_f64vec2; /// Low double-qualifier floating-point vector of 3 components. /// @see gtc_type_precision typedef vec<3, f64, lowp> lowp_f64vec3; /// Low double-qualifier floating-point vector of 4 components. /// @see gtc_type_precision typedef vec<4, f64, lowp> lowp_f64vec4; /// Medium double-qualifier floating-point vector of 1 component. /// @see gtc_type_precision typedef vec<1, f64, mediump> mediump_f64vec1; /// Medium double-qualifier floating-point vector of 2 components. /// @see gtc_type_precision typedef vec<2, f64, mediump> mediump_f64vec2; /// Medium double-qualifier floating-point vector of 3 components. /// @see gtc_type_precision typedef vec<3, f64, mediump> mediump_f64vec3; /// Medium double-qualifier floating-point vector of 4 components. /// @see gtc_type_precision typedef vec<4, f64, mediump> mediump_f64vec4; /// High double-qualifier floating-point vector of 1 component. /// @see gtc_type_precision typedef vec<1, f64, highp> highp_f64vec1; /// High double-qualifier floating-point vector of 2 components. /// @see gtc_type_precision typedef vec<2, f64, highp> highp_f64vec2; /// High double-qualifier floating-point vector of 3 components. /// @see gtc_type_precision typedef vec<3, f64, highp> highp_f64vec3; /// High double-qualifier floating-point vector of 4 components. /// @see gtc_type_precision typedef vec<4, f64, highp> highp_f64vec4; ////////////////////// // Float matrix types /// Low single-qualifier floating-point 1x1 matrix. /// @see gtc_type_precision //typedef lowp_f32 lowp_fmat1x1; /// Low single-qualifier floating-point 2x2 matrix. /// @see gtc_type_precision typedef mat<2, 2, f32, lowp> lowp_fmat2x2; /// Low single-qualifier floating-point 2x3 matrix. /// @see gtc_type_precision typedef mat<2, 3, f32, lowp> lowp_fmat2x3; /// Low single-qualifier floating-point 2x4 matrix. /// @see gtc_type_precision typedef mat<2, 4, f32, lowp> lowp_fmat2x4; /// Low single-qualifier floating-point 3x2 matrix. /// @see gtc_type_precision typedef mat<3, 2, f32, lowp> lowp_fmat3x2; /// Low single-qualifier floating-point 3x3 matrix. /// @see gtc_type_precision typedef mat<3, 3, f32, lowp> lowp_fmat3x3; /// Low single-qualifier floating-point 3x4 matrix. /// @see gtc_type_precision typedef mat<3, 4, f32, lowp> lowp_fmat3x4; /// Low single-qualifier floating-point 4x2 matrix. /// @see gtc_type_precision typedef mat<4, 2, f32, lowp> lowp_fmat4x2; /// Low single-qualifier floating-point 4x3 matrix. /// @see gtc_type_precision typedef mat<4, 3, f32, lowp> lowp_fmat4x3; /// Low single-qualifier floating-point 4x4 matrix. /// @see gtc_type_precision typedef mat<4, 4, f32, lowp> lowp_fmat4x4; /// Low single-qualifier floating-point 1x1 matrix. /// @see gtc_type_precision //typedef lowp_fmat1x1 lowp_fmat1; /// Low single-qualifier floating-point 2x2 matrix. /// @see gtc_type_precision typedef lowp_fmat2x2 lowp_fmat2; /// Low single-qualifier floating-point 3x3 matrix. /// @see gtc_type_precision typedef lowp_fmat3x3 lowp_fmat3; /// Low single-qualifier floating-point 4x4 matrix. /// @see gtc_type_precision typedef lowp_fmat4x4 lowp_fmat4; /// Medium single-qualifier floating-point 1x1 matrix. /// @see gtc_type_precision //typedef mediump_f32 mediump_fmat1x1; /// Medium single-qualifier floating-point 2x2 matrix. /// @see gtc_type_precision typedef mat<2, 2, f32, mediump> mediump_fmat2x2; /// Medium single-qualifier floating-point 2x3 matrix. /// @see gtc_type_precision typedef mat<2, 3, f32, mediump> mediump_fmat2x3; /// Medium single-qualifier floating-point 2x4 matrix. /// @see gtc_type_precision typedef mat<2, 4, f32, mediump> mediump_fmat2x4; /// Medium single-qualifier floating-point 3x2 matrix. /// @see gtc_type_precision typedef mat<3, 2, f32, mediump> mediump_fmat3x2; /// Medium single-qualifier floating-point 3x3 matrix. /// @see gtc_type_precision typedef mat<3, 3, f32, mediump> mediump_fmat3x3; /// Medium single-qualifier floating-point 3x4 matrix. /// @see gtc_type_precision typedef mat<3, 4, f32, mediump> mediump_fmat3x4; /// Medium single-qualifier floating-point 4x2 matrix. /// @see gtc_type_precision typedef mat<4, 2, f32, mediump> mediump_fmat4x2; /// Medium single-qualifier floating-point 4x3 matrix. /// @see gtc_type_precision typedef mat<4, 3, f32, mediump> mediump_fmat4x3; /// Medium single-qualifier floating-point 4x4 matrix. /// @see gtc_type_precision typedef mat<4, 4, f32, mediump> mediump_fmat4x4; /// Medium single-qualifier floating-point 1x1 matrix. /// @see gtc_type_precision //typedef mediump_fmat1x1 mediump_fmat1; /// Medium single-qualifier floating-point 2x2 matrix. /// @see gtc_type_precision typedef mediump_fmat2x2 mediump_fmat2; /// Medium single-qualifier floating-point 3x3 matrix. /// @see gtc_type_precision typedef mediump_fmat3x3 mediump_fmat3; /// Medium single-qualifier floating-point 4x4 matrix. /// @see gtc_type_precision typedef mediump_fmat4x4 mediump_fmat4; /// High single-qualifier floating-point 1x1 matrix. /// @see gtc_type_precision //typedef highp_f32 highp_fmat1x1; /// High single-qualifier floating-point 2x2 matrix. /// @see gtc_type_precision typedef mat<2, 2, f32, highp> highp_fmat2x2; /// High single-qualifier floating-point 2x3 matrix. /// @see gtc_type_precision typedef mat<2, 3, f32, highp> highp_fmat2x3; /// High single-qualifier floating-point 2x4 matrix. /// @see gtc_type_precision typedef mat<2, 4, f32, highp> highp_fmat2x4; /// High single-qualifier floating-point 3x2 matrix. /// @see gtc_type_precision typedef mat<3, 2, f32, highp> highp_fmat3x2; /// High single-qualifier floating-point 3x3 matrix. /// @see gtc_type_precision typedef mat<3, 3, f32, highp> highp_fmat3x3; /// High single-qualifier floating-point 3x4 matrix. /// @see gtc_type_precision typedef mat<3, 4, f32, highp> highp_fmat3x4; /// High single-qualifier floating-point 4x2 matrix. /// @see gtc_type_precision typedef mat<4, 2, f32, highp> highp_fmat4x2; /// High single-qualifier floating-point 4x3 matrix. /// @see gtc_type_precision typedef mat<4, 3, f32, highp> highp_fmat4x3; /// High single-qualifier floating-point 4x4 matrix. /// @see gtc_type_precision typedef mat<4, 4, f32, highp> highp_fmat4x4; /// High single-qualifier floating-point 1x1 matrix. /// @see gtc_type_precision //typedef highp_fmat1x1 highp_fmat1; /// High single-qualifier floating-point 2x2 matrix. /// @see gtc_type_precision typedef highp_fmat2x2 highp_fmat2; /// High single-qualifier floating-point 3x3 matrix. /// @see gtc_type_precision typedef highp_fmat3x3 highp_fmat3; /// High single-qualifier floating-point 4x4 matrix. /// @see gtc_type_precision typedef highp_fmat4x4 highp_fmat4; /// Low single-qualifier floating-point 1x1 matrix. /// @see gtc_type_precision //typedef f32 lowp_f32mat1x1; /// Low single-qualifier floating-point 2x2 matrix. /// @see gtc_type_precision typedef mat<2, 2, f32, lowp> lowp_f32mat2x2; /// Low single-qualifier floating-point 2x3 matrix. /// @see gtc_type_precision typedef mat<2, 3, f32, lowp> lowp_f32mat2x3; /// Low single-qualifier floating-point 2x4 matrix. /// @see gtc_type_precision typedef mat<2, 4, f32, lowp> lowp_f32mat2x4; /// Low single-qualifier floating-point 3x2 matrix. /// @see gtc_type_precision typedef mat<3, 2, f32, lowp> lowp_f32mat3x2; /// Low single-qualifier floating-point 3x3 matrix. /// @see gtc_type_precision typedef mat<3, 3, f32, lowp> lowp_f32mat3x3; /// Low single-qualifier floating-point 3x4 matrix. /// @see gtc_type_precision typedef mat<3, 4, f32, lowp> lowp_f32mat3x4; /// Low single-qualifier floating-point 4x2 matrix. /// @see gtc_type_precision typedef mat<4, 2, f32, lowp> lowp_f32mat4x2; /// Low single-qualifier floating-point 4x3 matrix. /// @see gtc_type_precision typedef mat<4, 3, f32, lowp> lowp_f32mat4x3; /// Low single-qualifier floating-point 4x4 matrix. /// @see gtc_type_precision typedef mat<4, 4, f32, lowp> lowp_f32mat4x4; /// Low single-qualifier floating-point 1x1 matrix. /// @see gtc_type_precision //typedef detail::tmat1x1 lowp_f32mat1; /// Low single-qualifier floating-point 2x2 matrix. /// @see gtc_type_precision typedef lowp_f32mat2x2 lowp_f32mat2; /// Low single-qualifier floating-point 3x3 matrix. /// @see gtc_type_precision typedef lowp_f32mat3x3 lowp_f32mat3; /// Low single-qualifier floating-point 4x4 matrix. /// @see gtc_type_precision typedef lowp_f32mat4x4 lowp_f32mat4; /// High single-qualifier floating-point 1x1 matrix. /// @see gtc_type_precision //typedef f32 mediump_f32mat1x1; /// Low single-qualifier floating-point 2x2 matrix. /// @see gtc_type_precision typedef mat<2, 2, f32, mediump> mediump_f32mat2x2; /// Medium single-qualifier floating-point 2x3 matrix. /// @see gtc_type_precision typedef mat<2, 3, f32, mediump> mediump_f32mat2x3; /// Medium single-qualifier floating-point 2x4 matrix. /// @see gtc_type_precision typedef mat<2, 4, f32, mediump> mediump_f32mat2x4; /// Medium single-qualifier floating-point 3x2 matrix. /// @see gtc_type_precision typedef mat<3, 2, f32, mediump> mediump_f32mat3x2; /// Medium single-qualifier floating-point 3x3 matrix. /// @see gtc_type_precision typedef mat<3, 3, f32, mediump> mediump_f32mat3x3; /// Medium single-qualifier floating-point 3x4 matrix. /// @see gtc_type_precision typedef mat<3, 4, f32, mediump> mediump_f32mat3x4; /// Medium single-qualifier floating-point 4x2 matrix. /// @see gtc_type_precision typedef mat<4, 2, f32, mediump> mediump_f32mat4x2; /// Medium single-qualifier floating-point 4x3 matrix. /// @see gtc_type_precision typedef mat<4, 3, f32, mediump> mediump_f32mat4x3; /// Medium single-qualifier floating-point 4x4 matrix. /// @see gtc_type_precision typedef mat<4, 4, f32, mediump> mediump_f32mat4x4; /// Medium single-qualifier floating-point 1x1 matrix. /// @see gtc_type_precision //typedef detail::tmat1x1 f32mat1; /// Medium single-qualifier floating-point 2x2 matrix. /// @see gtc_type_precision typedef mediump_f32mat2x2 mediump_f32mat2; /// Medium single-qualifier floating-point 3x3 matrix. /// @see gtc_type_precision typedef mediump_f32mat3x3 mediump_f32mat3; /// Medium single-qualifier floating-point 4x4 matrix. /// @see gtc_type_precision typedef mediump_f32mat4x4 mediump_f32mat4; /// High single-qualifier floating-point 1x1 matrix. /// @see gtc_type_precision //typedef f32 highp_f32mat1x1; /// High single-qualifier floating-point 2x2 matrix. /// @see gtc_type_precision typedef mat<2, 2, f32, highp> highp_f32mat2x2; /// High single-qualifier floating-point 2x3 matrix. /// @see gtc_type_precision typedef mat<2, 3, f32, highp> highp_f32mat2x3; /// High single-qualifier floating-point 2x4 matrix. /// @see gtc_type_precision typedef mat<2, 4, f32, highp> highp_f32mat2x4; /// High single-qualifier floating-point 3x2 matrix. /// @see gtc_type_precision typedef mat<3, 2, f32, highp> highp_f32mat3x2; /// High single-qualifier floating-point 3x3 matrix. /// @see gtc_type_precision typedef mat<3, 3, f32, highp> highp_f32mat3x3; /// High single-qualifier floating-point 3x4 matrix. /// @see gtc_type_precision typedef mat<3, 4, f32, highp> highp_f32mat3x4; /// High single-qualifier floating-point 4x2 matrix. /// @see gtc_type_precision typedef mat<4, 2, f32, highp> highp_f32mat4x2; /// High single-qualifier floating-point 4x3 matrix. /// @see gtc_type_precision typedef mat<4, 3, f32, highp> highp_f32mat4x3; /// High single-qualifier floating-point 4x4 matrix. /// @see gtc_type_precision typedef mat<4, 4, f32, highp> highp_f32mat4x4; /// High single-qualifier floating-point 1x1 matrix. /// @see gtc_type_precision //typedef detail::tmat1x1 f32mat1; /// High single-qualifier floating-point 2x2 matrix. /// @see gtc_type_precision typedef highp_f32mat2x2 highp_f32mat2; /// High single-qualifier floating-point 3x3 matrix. /// @see gtc_type_precision typedef highp_f32mat3x3 highp_f32mat3; /// High single-qualifier floating-point 4x4 matrix. /// @see gtc_type_precision typedef highp_f32mat4x4 highp_f32mat4; /// Low double-qualifier floating-point 1x1 matrix. /// @see gtc_type_precision //typedef f64 lowp_f64mat1x1; /// Low double-qualifier floating-point 2x2 matrix. /// @see gtc_type_precision typedef mat<2, 2, f64, lowp> lowp_f64mat2x2; /// Low double-qualifier floating-point 2x3 matrix. /// @see gtc_type_precision typedef mat<2, 3, f64, lowp> lowp_f64mat2x3; /// Low double-qualifier floating-point 2x4 matrix. /// @see gtc_type_precision typedef mat<2, 4, f64, lowp> lowp_f64mat2x4; /// Low double-qualifier floating-point 3x2 matrix. /// @see gtc_type_precision typedef mat<3, 2, f64, lowp> lowp_f64mat3x2; /// Low double-qualifier floating-point 3x3 matrix. /// @see gtc_type_precision typedef mat<3, 3, f64, lowp> lowp_f64mat3x3; /// Low double-qualifier floating-point 3x4 matrix. /// @see gtc_type_precision typedef mat<3, 4, f64, lowp> lowp_f64mat3x4; /// Low double-qualifier floating-point 4x2 matrix. /// @see gtc_type_precision typedef mat<4, 2, f64, lowp> lowp_f64mat4x2; /// Low double-qualifier floating-point 4x3 matrix. /// @see gtc_type_precision typedef mat<4, 3, f64, lowp> lowp_f64mat4x3; /// Low double-qualifier floating-point 4x4 matrix. /// @see gtc_type_precision typedef mat<4, 4, f64, lowp> lowp_f64mat4x4; /// Low double-qualifier floating-point 1x1 matrix. /// @see gtc_type_precision //typedef lowp_f64mat1x1 lowp_f64mat1; /// Low double-qualifier floating-point 2x2 matrix. /// @see gtc_type_precision typedef lowp_f64mat2x2 lowp_f64mat2; /// Low double-qualifier floating-point 3x3 matrix. /// @see gtc_type_precision typedef lowp_f64mat3x3 lowp_f64mat3; /// Low double-qualifier floating-point 4x4 matrix. /// @see gtc_type_precision typedef lowp_f64mat4x4 lowp_f64mat4; /// Medium double-qualifier floating-point 1x1 matrix. /// @see gtc_type_precision //typedef f64 Highp_f64mat1x1; /// Medium double-qualifier floating-point 2x2 matrix. /// @see gtc_type_precision typedef mat<2, 2, f64, mediump> mediump_f64mat2x2; /// Medium double-qualifier floating-point 2x3 matrix. /// @see gtc_type_precision typedef mat<2, 3, f64, mediump> mediump_f64mat2x3; /// Medium double-qualifier floating-point 2x4 matrix. /// @see gtc_type_precision typedef mat<2, 4, f64, mediump> mediump_f64mat2x4; /// Medium double-qualifier floating-point 3x2 matrix. /// @see gtc_type_precision typedef mat<3, 2, f64, mediump> mediump_f64mat3x2; /// Medium double-qualifier floating-point 3x3 matrix. /// @see gtc_type_precision typedef mat<3, 3, f64, mediump> mediump_f64mat3x3; /// Medium double-qualifier floating-point 3x4 matrix. /// @see gtc_type_precision typedef mat<3, 4, f64, mediump> mediump_f64mat3x4; /// Medium double-qualifier floating-point 4x2 matrix. /// @see gtc_type_precision typedef mat<4, 2, f64, mediump> mediump_f64mat4x2; /// Medium double-qualifier floating-point 4x3 matrix. /// @see gtc_type_precision typedef mat<4, 3, f64, mediump> mediump_f64mat4x3; /// Medium double-qualifier floating-point 4x4 matrix. /// @see gtc_type_precision typedef mat<4, 4, f64, mediump> mediump_f64mat4x4; /// Medium double-qualifier floating-point 1x1 matrix. /// @see gtc_type_precision //typedef mediump_f64mat1x1 mediump_f64mat1; /// Medium double-qualifier floating-point 2x2 matrix. /// @see gtc_type_precision typedef mediump_f64mat2x2 mediump_f64mat2; /// Medium double-qualifier floating-point 3x3 matrix. /// @see gtc_type_precision typedef mediump_f64mat3x3 mediump_f64mat3; /// Medium double-qualifier floating-point 4x4 matrix. /// @see gtc_type_precision typedef mediump_f64mat4x4 mediump_f64mat4; /// High double-qualifier floating-point 1x1 matrix. /// @see gtc_type_precision //typedef f64 highp_f64mat1x1; /// High double-qualifier floating-point 2x2 matrix. /// @see gtc_type_precision typedef mat<2, 2, f64, highp> highp_f64mat2x2; /// High double-qualifier floating-point 2x3 matrix. /// @see gtc_type_precision typedef mat<2, 3, f64, highp> highp_f64mat2x3; /// High double-qualifier floating-point 2x4 matrix. /// @see gtc_type_precision typedef mat<2, 4, f64, highp> highp_f64mat2x4; /// High double-qualifier floating-point 3x2 matrix. /// @see gtc_type_precision typedef mat<3, 2, f64, highp> highp_f64mat3x2; /// High double-qualifier floating-point 3x3 matrix. /// @see gtc_type_precision typedef mat<3, 3, f64, highp> highp_f64mat3x3; /// High double-qualifier floating-point 3x4 matrix. /// @see gtc_type_precision typedef mat<3, 4, f64, highp> highp_f64mat3x4; /// High double-qualifier floating-point 4x2 matrix. /// @see gtc_type_precision typedef mat<4, 2, f64, highp> highp_f64mat4x2; /// High double-qualifier floating-point 4x3 matrix. /// @see gtc_type_precision typedef mat<4, 3, f64, highp> highp_f64mat4x3; /// High double-qualifier floating-point 4x4 matrix. /// @see gtc_type_precision typedef mat<4, 4, f64, highp> highp_f64mat4x4; /// High double-qualifier floating-point 1x1 matrix. /// @see gtc_type_precision //typedef highp_f64mat1x1 highp_f64mat1; /// High double-qualifier floating-point 2x2 matrix. /// @see gtc_type_precision typedef highp_f64mat2x2 highp_f64mat2; /// High double-qualifier floating-point 3x3 matrix. /// @see gtc_type_precision typedef highp_f64mat3x3 highp_f64mat3; /// High double-qualifier floating-point 4x4 matrix. /// @see gtc_type_precision typedef highp_f64mat4x4 highp_f64mat4; /// Low qualifier 8 bit unsigned integer scalar type. /// @see gtc_type_precision typedef vec<1, u8, lowp> lowp_u8vec1; /// Low qualifier 8 bit unsigned integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, u8, lowp> lowp_u8vec2; /// Low qualifier 8 bit unsigned integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, u8, lowp> lowp_u8vec3; /// Low qualifier 8 bit unsigned integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, u8, lowp> lowp_u8vec4; /// Medium qualifier 8 bit unsigned integer scalar type. /// @see gtc_type_precision typedef vec<1, u8, mediump> mediump_u8vec1; /// Medium qualifier 8 bit unsigned integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, u8, mediump> mediump_u8vec2; /// Medium qualifier 8 bit unsigned integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, u8, mediump> mediump_u8vec3; /// Medium qualifier 8 bit unsigned integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, u8, mediump> mediump_u8vec4; /// High qualifier 8 bit unsigned integer scalar type. /// @see gtc_type_precision typedef vec<1, u8, highp> highp_u8vec1; /// High qualifier 8 bit unsigned integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, u8, highp> highp_u8vec2; /// High qualifier 8 bit unsigned integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, u8, highp> highp_u8vec3; /// High qualifier 8 bit unsigned integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, u8, highp> highp_u8vec4; /// Default qualifier 8 bit unsigned integer scalar type. /// @see gtc_type_precision typedef vec<1, u8, defaultp> u8vec1; /// Default qualifier 8 bit unsigned integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, u8, defaultp> u8vec2; /// Default qualifier 8 bit unsigned integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, u8, defaultp> u8vec3; /// Default qualifier 8 bit unsigned integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, u8, defaultp> u8vec4; /// Low qualifier 16 bit unsigned integer scalar type. /// @see gtc_type_precision typedef vec<1, u16, lowp> lowp_u16vec1; /// Low qualifier 16 bit unsigned integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, u16, lowp> lowp_u16vec2; /// Low qualifier 16 bit unsigned integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, u16, lowp> lowp_u16vec3; /// Low qualifier 16 bit unsigned integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, u16, lowp> lowp_u16vec4; /// Medium qualifier 16 bit unsigned integer scalar type. /// @see gtc_type_precision typedef vec<1, u16, mediump> mediump_u16vec1; /// Medium qualifier 16 bit unsigned integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, u16, mediump> mediump_u16vec2; /// Medium qualifier 16 bit unsigned integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, u16, mediump> mediump_u16vec3; /// Medium qualifier 16 bit unsigned integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, u16, mediump> mediump_u16vec4; /// High qualifier 16 bit unsigned integer scalar type. /// @see gtc_type_precision typedef vec<1, u16, highp> highp_u16vec1; /// High qualifier 16 bit unsigned integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, u16, highp> highp_u16vec2; /// High qualifier 16 bit unsigned integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, u16, highp> highp_u16vec3; /// High qualifier 16 bit unsigned integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, u16, highp> highp_u16vec4; /// Default qualifier 16 bit unsigned integer scalar type. /// @see gtc_type_precision typedef vec<1, u16, defaultp> u16vec1; /// Default qualifier 16 bit unsigned integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, u16, defaultp> u16vec2; /// Default qualifier 16 bit unsigned integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, u16, defaultp> u16vec3; /// Default qualifier 16 bit unsigned integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, u16, defaultp> u16vec4; /// Low qualifier 32 bit unsigned integer scalar type. /// @see gtc_type_precision typedef vec<1, u32, lowp> lowp_u32vec1; /// Low qualifier 32 bit unsigned integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, u32, lowp> lowp_u32vec2; /// Low qualifier 32 bit unsigned integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, u32, lowp> lowp_u32vec3; /// Low qualifier 32 bit unsigned integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, u32, lowp> lowp_u32vec4; /// Medium qualifier 32 bit unsigned integer scalar type. /// @see gtc_type_precision typedef vec<1, u32, mediump> mediump_u32vec1; /// Medium qualifier 32 bit unsigned integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, u32, mediump> mediump_u32vec2; /// Medium qualifier 32 bit unsigned integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, u32, mediump> mediump_u32vec3; /// Medium qualifier 32 bit unsigned integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, u32, mediump> mediump_u32vec4; /// High qualifier 32 bit unsigned integer scalar type. /// @see gtc_type_precision typedef vec<1, u32, highp> highp_u32vec1; /// High qualifier 32 bit unsigned integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, u32, highp> highp_u32vec2; /// High qualifier 32 bit unsigned integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, u32, highp> highp_u32vec3; /// High qualifier 32 bit unsigned integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, u32, highp> highp_u32vec4; /// Default qualifier 32 bit unsigned integer scalar type. /// @see gtc_type_precision typedef vec<1, u32, defaultp> u32vec1; /// Default qualifier 32 bit unsigned integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, u32, defaultp> u32vec2; /// Default qualifier 32 bit unsigned integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, u32, defaultp> u32vec3; /// Default qualifier 32 bit unsigned integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, u32, defaultp> u32vec4; /// Low qualifier 64 bit unsigned integer scalar type. /// @see gtc_type_precision typedef vec<1, u64, lowp> lowp_u64vec1; /// Low qualifier 64 bit unsigned integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, u64, lowp> lowp_u64vec2; /// Low qualifier 64 bit unsigned integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, u64, lowp> lowp_u64vec3; /// Low qualifier 64 bit unsigned integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, u64, lowp> lowp_u64vec4; /// Medium qualifier 64 bit unsigned integer scalar type. /// @see gtc_type_precision typedef vec<1, u64, mediump> mediump_u64vec1; /// Medium qualifier 64 bit unsigned integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, u64, mediump> mediump_u64vec2; /// Medium qualifier 64 bit unsigned integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, u64, mediump> mediump_u64vec3; /// Medium qualifier 64 bit unsigned integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, u64, mediump> mediump_u64vec4; /// High qualifier 64 bit unsigned integer scalar type. /// @see gtc_type_precision typedef vec<1, u64, highp> highp_u64vec1; /// High qualifier 64 bit unsigned integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, u64, highp> highp_u64vec2; /// High qualifier 64 bit unsigned integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, u64, highp> highp_u64vec3; /// High qualifier 64 bit unsigned integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, u64, highp> highp_u64vec4; /// Default qualifier 64 bit unsigned integer scalar type. /// @see gtc_type_precision typedef vec<1, u64, defaultp> u64vec1; /// Default qualifier 64 bit unsigned integer vector of 2 components type. /// @see gtc_type_precision typedef vec<2, u64, defaultp> u64vec2; /// Default qualifier 64 bit unsigned integer vector of 3 components type. /// @see gtc_type_precision typedef vec<3, u64, defaultp> u64vec3; /// Default qualifier 64 bit unsigned integer vector of 4 components type. /// @see gtc_type_precision typedef vec<4, u64, defaultp> u64vec4; ////////////////////// // Float vector types /// 32 bit single-qualifier floating-point scalar. /// @see gtc_type_precision typedef float32 float32_t; /// 32 bit single-qualifier floating-point scalar. /// @see gtc_type_precision typedef float32 f32; # ifndef GLM_FORCE_SINGLE_ONLY /// 64 bit double-qualifier floating-point scalar. /// @see gtc_type_precision typedef float64 float64_t; /// 64 bit double-qualifier floating-point scalar. /// @see gtc_type_precision typedef float64 f64; # endif//GLM_FORCE_SINGLE_ONLY /// Single-qualifier floating-point vector of 1 component. /// @see gtc_type_precision typedef vec<1, float, defaultp> fvec1; /// Single-qualifier floating-point vector of 2 components. /// @see gtc_type_precision typedef vec<2, float, defaultp> fvec2; /// Single-qualifier floating-point vector of 3 components. /// @see gtc_type_precision typedef vec<3, float, defaultp> fvec3; /// Single-qualifier floating-point vector of 4 components. /// @see gtc_type_precision typedef vec<4, float, defaultp> fvec4; /// Single-qualifier floating-point vector of 1 component. /// @see gtc_type_precision typedef vec<1, f32, defaultp> f32vec1; /// Single-qualifier floating-point vector of 2 components. /// @see gtc_type_precision typedef vec<2, f32, defaultp> f32vec2; /// Single-qualifier floating-point vector of 3 components. /// @see gtc_type_precision typedef vec<3, f32, defaultp> f32vec3; /// Single-qualifier floating-point vector of 4 components. /// @see gtc_type_precision typedef vec<4, f32, defaultp> f32vec4; # ifndef GLM_FORCE_SINGLE_ONLY /// Double-qualifier floating-point vector of 1 component. /// @see gtc_type_precision typedef vec<1, f64, defaultp> f64vec1; /// Double-qualifier floating-point vector of 2 components. /// @see gtc_type_precision typedef vec<2, f64, defaultp> f64vec2; /// Double-qualifier floating-point vector of 3 components. /// @see gtc_type_precision typedef vec<3, f64, defaultp> f64vec3; /// Double-qualifier floating-point vector of 4 components. /// @see gtc_type_precision typedef vec<4, f64, defaultp> f64vec4; # endif//GLM_FORCE_SINGLE_ONLY ////////////////////// // Float matrix types /// Single-qualifier floating-point 1x1 matrix. /// @see gtc_type_precision //typedef detail::tmat1x1 fmat1; /// Single-qualifier floating-point 2x2 matrix. /// @see gtc_type_precision typedef mat<2, 2, f32, defaultp> fmat2; /// Single-qualifier floating-point 3x3 matrix. /// @see gtc_type_precision typedef mat<3, 3, f32, defaultp> fmat3; /// Single-qualifier floating-point 4x4 matrix. /// @see gtc_type_precision typedef mat<4, 4, f32, defaultp> fmat4; /// Single-qualifier floating-point 1x1 matrix. /// @see gtc_type_precision //typedef f32 fmat1x1; /// Single-qualifier floating-point 2x2 matrix. /// @see gtc_type_precision typedef mat<2, 2, f32, defaultp> fmat2x2; /// Single-qualifier floating-point 2x3 matrix. /// @see gtc_type_precision typedef mat<2, 3, f32, defaultp> fmat2x3; /// Single-qualifier floating-point 2x4 matrix. /// @see gtc_type_precision typedef mat<2, 4, f32, defaultp> fmat2x4; /// Single-qualifier floating-point 3x2 matrix. /// @see gtc_type_precision typedef mat<3, 2, f32, defaultp> fmat3x2; /// Single-qualifier floating-point 3x3 matrix. /// @see gtc_type_precision typedef mat<3, 3, f32, defaultp> fmat3x3; /// Single-qualifier floating-point 3x4 matrix. /// @see gtc_type_precision typedef mat<3, 4, f32, defaultp> fmat3x4; /// Single-qualifier floating-point 4x2 matrix. /// @see gtc_type_precision typedef mat<4, 2, f32, defaultp> fmat4x2; /// Single-qualifier floating-point 4x3 matrix. /// @see gtc_type_precision typedef mat<4, 3, f32, defaultp> fmat4x3; /// Single-qualifier floating-point 4x4 matrix. /// @see gtc_type_precision typedef mat<4, 4, f32, defaultp> fmat4x4; /// Single-qualifier floating-point 1x1 matrix. /// @see gtc_type_precision //typedef detail::tmat1x1 f32mat1; /// Single-qualifier floating-point 2x2 matrix. /// @see gtc_type_precision typedef mat<2, 2, f32, defaultp> f32mat2; /// Single-qualifier floating-point 3x3 matrix. /// @see gtc_type_precision typedef mat<3, 3, f32, defaultp> f32mat3; /// Single-qualifier floating-point 4x4 matrix. /// @see gtc_type_precision typedef mat<4, 4, f32, defaultp> f32mat4; /// Single-qualifier floating-point 1x1 matrix. /// @see gtc_type_precision //typedef f32 f32mat1x1; /// Single-qualifier floating-point 2x2 matrix. /// @see gtc_type_precision typedef mat<2, 2, f32, defaultp> f32mat2x2; /// Single-qualifier floating-point 2x3 matrix. /// @see gtc_type_precision typedef mat<2, 3, f32, defaultp> f32mat2x3; /// Single-qualifier floating-point 2x4 matrix. /// @see gtc_type_precision typedef mat<2, 4, f32, defaultp> f32mat2x4; /// Single-qualifier floating-point 3x2 matrix. /// @see gtc_type_precision typedef mat<3, 2, f32, defaultp> f32mat3x2; /// Single-qualifier floating-point 3x3 matrix. /// @see gtc_type_precision typedef mat<3, 3, f32, defaultp> f32mat3x3; /// Single-qualifier floating-point 3x4 matrix. /// @see gtc_type_precision typedef mat<3, 4, f32, defaultp> f32mat3x4; /// Single-qualifier floating-point 4x2 matrix. /// @see gtc_type_precision typedef mat<4, 2, f32, defaultp> f32mat4x2; /// Single-qualifier floating-point 4x3 matrix. /// @see gtc_type_precision typedef mat<4, 3, f32, defaultp> f32mat4x3; /// Single-qualifier floating-point 4x4 matrix. /// @see gtc_type_precision typedef mat<4, 4, f32, defaultp> f32mat4x4; # ifndef GLM_FORCE_SINGLE_ONLY /// Double-qualifier floating-point 1x1 matrix. /// @see gtc_type_precision //typedef detail::tmat1x1 f64mat1; /// Double-qualifier floating-point 2x2 matrix. /// @see gtc_type_precision typedef mat<2, 2, f64, defaultp> f64mat2; /// Double-qualifier floating-point 3x3 matrix. /// @see gtc_type_precision typedef mat<3, 3, f64, defaultp> f64mat3; /// Double-qualifier floating-point 4x4 matrix. /// @see gtc_type_precision typedef mat<4, 4, f64, defaultp> f64mat4; /// Double-qualifier floating-point 1x1 matrix. /// @see gtc_type_precision //typedef f64 f64mat1x1; /// Double-qualifier floating-point 2x2 matrix. /// @see gtc_type_precision typedef mat<2, 2, f64, defaultp> f64mat2x2; /// Double-qualifier floating-point 2x3 matrix. /// @see gtc_type_precision typedef mat<2, 3, f64, defaultp> f64mat2x3; /// Double-qualifier floating-point 2x4 matrix. /// @see gtc_type_precision typedef mat<2, 4, f64, defaultp> f64mat2x4; /// Double-qualifier floating-point 3x2 matrix. /// @see gtc_type_precision typedef mat<3, 2, f64, defaultp> f64mat3x2; /// Double-qualifier floating-point 3x3 matrix. /// @see gtc_type_precision typedef mat<3, 3, f64, defaultp> f64mat3x3; /// Double-qualifier floating-point 3x4 matrix. /// @see gtc_type_precision typedef mat<3, 4, f64, defaultp> f64mat3x4; /// Double-qualifier floating-point 4x2 matrix. /// @see gtc_type_precision typedef mat<4, 2, f64, defaultp> f64mat4x2; /// Double-qualifier floating-point 4x3 matrix. /// @see gtc_type_precision typedef mat<4, 3, f64, defaultp> f64mat4x3; /// Double-qualifier floating-point 4x4 matrix. /// @see gtc_type_precision typedef mat<4, 4, f64, defaultp> f64mat4x4; # endif//GLM_FORCE_SINGLE_ONLY ////////////////////////// // Quaternion types /// Single-qualifier floating-point quaternion. /// @see gtc_type_precision typedef qua f32quat; /// Low single-qualifier floating-point quaternion. /// @see gtc_type_precision typedef qua lowp_f32quat; /// Low double-qualifier floating-point quaternion. /// @see gtc_type_precision typedef qua lowp_f64quat; /// Medium single-qualifier floating-point quaternion. /// @see gtc_type_precision typedef qua mediump_f32quat; # ifndef GLM_FORCE_SINGLE_ONLY /// Medium double-qualifier floating-point quaternion. /// @see gtc_type_precision typedef qua mediump_f64quat; /// High single-qualifier floating-point quaternion. /// @see gtc_type_precision typedef qua highp_f32quat; /// High double-qualifier floating-point quaternion. /// @see gtc_type_precision typedef qua highp_f64quat; /// Double-qualifier floating-point quaternion. /// @see gtc_type_precision typedef qua f64quat; # endif//GLM_FORCE_SINGLE_ONLY /// @} }//namespace glm #include "type_precision.inl" ================================================ FILE: libraries/glm/gtc/type_precision.inl ================================================ /// @ref gtc_precision namespace glm { } ================================================ FILE: libraries/glm/gtc/type_ptr.hpp ================================================ /// @ref gtc_type_ptr /// @file glm/gtc/type_ptr.hpp /// /// @see core (dependence) /// @see gtc_quaternion (dependence) /// /// @defgroup gtc_type_ptr GLM_GTC_type_ptr /// @ingroup gtc /// /// Include to use the features of this extension. /// /// Handles the interaction between pointers and vector, matrix types. /// /// This extension defines an overloaded function, glm::value_ptr. It returns /// a pointer to the memory layout of the object. Matrix types store their values /// in column-major order. /// /// This is useful for uploading data to matrices or copying data to buffer objects. /// /// Example: /// @code /// #include /// #include /// /// glm::vec3 aVector(3); /// glm::mat4 someMatrix(1.0); /// /// glUniform3fv(uniformLoc, 1, glm::value_ptr(aVector)); /// glUniformMatrix4fv(uniformMatrixLoc, 1, GL_FALSE, glm::value_ptr(someMatrix)); /// @endcode /// /// need to be included to use the features of this extension. #pragma once // Dependency: #include "../gtc/quaternion.hpp" #include "../gtc/vec1.hpp" #include "../vec2.hpp" #include "../vec3.hpp" #include "../vec4.hpp" #include "../mat2x2.hpp" #include "../mat2x3.hpp" #include "../mat2x4.hpp" #include "../mat3x2.hpp" #include "../mat3x3.hpp" #include "../mat3x4.hpp" #include "../mat4x2.hpp" #include "../mat4x3.hpp" #include "../mat4x4.hpp" #include #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_GTC_type_ptr extension included") #endif namespace glm { /// @addtogroup gtc_type_ptr /// @{ /// Return the constant address to the data of the input parameter. /// @see gtc_type_ptr template GLM_FUNC_DECL typename genType::value_type const * value_ptr(genType const& v); /// Build a vector from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<1, T, Q> const& v); /// Build a vector from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<2, T, Q> const& v); /// Build a vector from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<3, T, Q> const& v); /// Build a vector from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<4, T, Q> const& v); /// Build a vector from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<1, T, Q> const& v); /// Build a vector from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<2, T, Q> const& v); /// Build a vector from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<3, T, Q> const& v); /// Build a vector from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<4, T, Q> const& v); /// Build a vector from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<1, T, Q> const& v); /// Build a vector from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<2, T, Q> const& v); /// Build a vector from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<3, T, Q> const& v); /// Build a vector from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<4, T, Q> const& v); /// Build a vector from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<1, T, Q> const& v); /// Build a vector from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<2, T, Q> const& v); /// Build a vector from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<3, T, Q> const& v); /// Build a vector from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<4, T, Q> const& v); /// Build a vector from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL vec<2, T, defaultp> make_vec2(T const * const ptr); /// Build a vector from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL vec<3, T, defaultp> make_vec3(T const * const ptr); /// Build a vector from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL vec<4, T, defaultp> make_vec4(T const * const ptr); /// Build a matrix from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL mat<2, 2, T, defaultp> make_mat2x2(T const * const ptr); /// Build a matrix from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL mat<2, 3, T, defaultp> make_mat2x3(T const * const ptr); /// Build a matrix from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL mat<2, 4, T, defaultp> make_mat2x4(T const * const ptr); /// Build a matrix from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL mat<3, 2, T, defaultp> make_mat3x2(T const * const ptr); /// Build a matrix from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL mat<3, 3, T, defaultp> make_mat3x3(T const * const ptr); /// Build a matrix from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL mat<3, 4, T, defaultp> make_mat3x4(T const * const ptr); /// Build a matrix from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL mat<4, 2, T, defaultp> make_mat4x2(T const * const ptr); /// Build a matrix from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL mat<4, 3, T, defaultp> make_mat4x3(T const * const ptr); /// Build a matrix from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL mat<4, 4, T, defaultp> make_mat4x4(T const * const ptr); /// Build a matrix from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL mat<2, 2, T, defaultp> make_mat2(T const * const ptr); /// Build a matrix from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL mat<3, 3, T, defaultp> make_mat3(T const * const ptr); /// Build a matrix from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL mat<4, 4, T, defaultp> make_mat4(T const * const ptr); /// Build a quaternion from a pointer. /// @see gtc_type_ptr template GLM_FUNC_DECL qua make_quat(T const * const ptr); /// @} }//namespace glm #include "type_ptr.inl" ================================================ FILE: libraries/glm/gtc/type_ptr.inl ================================================ /// @ref gtc_type_ptr #include namespace glm { /// @addtogroup gtc_type_ptr /// @{ template GLM_FUNC_QUALIFIER T const* value_ptr(vec<2, T, Q> const& v) { return &(v.x); } template GLM_FUNC_QUALIFIER T* value_ptr(vec<2, T, Q>& v) { return &(v.x); } template GLM_FUNC_QUALIFIER T const * value_ptr(vec<3, T, Q> const& v) { return &(v.x); } template GLM_FUNC_QUALIFIER T* value_ptr(vec<3, T, Q>& v) { return &(v.x); } template GLM_FUNC_QUALIFIER T const* value_ptr(vec<4, T, Q> const& v) { return &(v.x); } template GLM_FUNC_QUALIFIER T* value_ptr(vec<4, T, Q>& v) { return &(v.x); } template GLM_FUNC_QUALIFIER T const* value_ptr(mat<2, 2, T, Q> const& m) { return &(m[0].x); } template GLM_FUNC_QUALIFIER T* value_ptr(mat<2, 2, T, Q>& m) { return &(m[0].x); } template GLM_FUNC_QUALIFIER T const* value_ptr(mat<3, 3, T, Q> const& m) { return &(m[0].x); } template GLM_FUNC_QUALIFIER T* value_ptr(mat<3, 3, T, Q>& m) { return &(m[0].x); } template GLM_FUNC_QUALIFIER T const* value_ptr(mat<4, 4, T, Q> const& m) { return &(m[0].x); } template GLM_FUNC_QUALIFIER T* value_ptr(mat<4, 4, T, Q>& m) { return &(m[0].x); } template GLM_FUNC_QUALIFIER T const* value_ptr(mat<2, 3, T, Q> const& m) { return &(m[0].x); } template GLM_FUNC_QUALIFIER T* value_ptr(mat<2, 3, T, Q>& m) { return &(m[0].x); } template GLM_FUNC_QUALIFIER T const* value_ptr(mat<3, 2, T, Q> const& m) { return &(m[0].x); } template GLM_FUNC_QUALIFIER T* value_ptr(mat<3, 2, T, Q>& m) { return &(m[0].x); } template GLM_FUNC_QUALIFIER T const* value_ptr(mat<2, 4, T, Q> const& m) { return &(m[0].x); } template GLM_FUNC_QUALIFIER T* value_ptr(mat<2, 4, T, Q>& m) { return &(m[0].x); } template GLM_FUNC_QUALIFIER T const* value_ptr(mat<4, 2, T, Q> const& m) { return &(m[0].x); } template GLM_FUNC_QUALIFIER T* value_ptr(mat<4, 2, T, Q>& m) { return &(m[0].x); } template GLM_FUNC_QUALIFIER T const* value_ptr(mat<3, 4, T, Q> const& m) { return &(m[0].x); } template GLM_FUNC_QUALIFIER T* value_ptr(mat<3, 4, T, Q>& m) { return &(m[0].x); } template GLM_FUNC_QUALIFIER T const* value_ptr(mat<4, 3, T, Q> const& m) { return &(m[0].x); } template GLM_FUNC_QUALIFIER T * value_ptr(mat<4, 3, T, Q>& m) { return &(m[0].x); } template GLM_FUNC_QUALIFIER T const * value_ptr(qua const& q) { return &(q[0]); } template GLM_FUNC_QUALIFIER T* value_ptr(qua& q) { return &(q[0]); } template inline vec<1, T, Q> make_vec1(vec<1, T, Q> const& v) { return v; } template inline vec<1, T, Q> make_vec1(vec<2, T, Q> const& v) { return vec<1, T, Q>(v); } template inline vec<1, T, Q> make_vec1(vec<3, T, Q> const& v) { return vec<1, T, Q>(v); } template inline vec<1, T, Q> make_vec1(vec<4, T, Q> const& v) { return vec<1, T, Q>(v); } template inline vec<2, T, Q> make_vec2(vec<1, T, Q> const& v) { return vec<2, T, Q>(v.x, static_cast(0)); } template inline vec<2, T, Q> make_vec2(vec<2, T, Q> const& v) { return v; } template inline vec<2, T, Q> make_vec2(vec<3, T, Q> const& v) { return vec<2, T, Q>(v); } template inline vec<2, T, Q> make_vec2(vec<4, T, Q> const& v) { return vec<2, T, Q>(v); } template inline vec<3, T, Q> make_vec3(vec<1, T, Q> const& v) { return vec<3, T, Q>(v.x, static_cast(0), static_cast(0)); } template inline vec<3, T, Q> make_vec3(vec<2, T, Q> const& v) { return vec<3, T, Q>(v.x, v.y, static_cast(0)); } template inline vec<3, T, Q> make_vec3(vec<3, T, Q> const& v) { return v; } template inline vec<3, T, Q> make_vec3(vec<4, T, Q> const& v) { return vec<3, T, Q>(v); } template inline vec<4, T, Q> make_vec4(vec<1, T, Q> const& v) { return vec<4, T, Q>(v.x, static_cast(0), static_cast(0), static_cast(1)); } template inline vec<4, T, Q> make_vec4(vec<2, T, Q> const& v) { return vec<4, T, Q>(v.x, v.y, static_cast(0), static_cast(1)); } template inline vec<4, T, Q> make_vec4(vec<3, T, Q> const& v) { return vec<4, T, Q>(v.x, v.y, v.z, static_cast(1)); } template inline vec<4, T, Q> make_vec4(vec<4, T, Q> const& v) { return v; } template GLM_FUNC_QUALIFIER vec<2, T, defaultp> make_vec2(T const *const ptr) { vec<2, T, defaultp> Result; memcpy(value_ptr(Result), ptr, sizeof(vec<2, T, defaultp>)); return Result; } template GLM_FUNC_QUALIFIER vec<3, T, defaultp> make_vec3(T const *const ptr) { vec<3, T, defaultp> Result; memcpy(value_ptr(Result), ptr, sizeof(vec<3, T, defaultp>)); return Result; } template GLM_FUNC_QUALIFIER vec<4, T, defaultp> make_vec4(T const *const ptr) { vec<4, T, defaultp> Result; memcpy(value_ptr(Result), ptr, sizeof(vec<4, T, defaultp>)); return Result; } template GLM_FUNC_QUALIFIER mat<2, 2, T, defaultp> make_mat2x2(T const *const ptr) { mat<2, 2, T, defaultp> Result; memcpy(value_ptr(Result), ptr, sizeof(mat<2, 2, T, defaultp>)); return Result; } template GLM_FUNC_QUALIFIER mat<2, 3, T, defaultp> make_mat2x3(T const *const ptr) { mat<2, 3, T, defaultp> Result; memcpy(value_ptr(Result), ptr, sizeof(mat<2, 3, T, defaultp>)); return Result; } template GLM_FUNC_QUALIFIER mat<2, 4, T, defaultp> make_mat2x4(T const *const ptr) { mat<2, 4, T, defaultp> Result; memcpy(value_ptr(Result), ptr, sizeof(mat<2, 4, T, defaultp>)); return Result; } template GLM_FUNC_QUALIFIER mat<3, 2, T, defaultp> make_mat3x2(T const *const ptr) { mat<3, 2, T, defaultp> Result; memcpy(value_ptr(Result), ptr, sizeof(mat<3, 2, T, defaultp>)); return Result; } template GLM_FUNC_QUALIFIER mat<3, 3, T, defaultp> make_mat3x3(T const *const ptr) { mat<3, 3, T, defaultp> Result; memcpy(value_ptr(Result), ptr, sizeof(mat<3, 3, T, defaultp>)); return Result; } template GLM_FUNC_QUALIFIER mat<3, 4, T, defaultp> make_mat3x4(T const *const ptr) { mat<3, 4, T, defaultp> Result; memcpy(value_ptr(Result), ptr, sizeof(mat<3, 4, T, defaultp>)); return Result; } template GLM_FUNC_QUALIFIER mat<4, 2, T, defaultp> make_mat4x2(T const *const ptr) { mat<4, 2, T, defaultp> Result; memcpy(value_ptr(Result), ptr, sizeof(mat<4, 2, T, defaultp>)); return Result; } template GLM_FUNC_QUALIFIER mat<4, 3, T, defaultp> make_mat4x3(T const *const ptr) { mat<4, 3, T, defaultp> Result; memcpy(value_ptr(Result), ptr, sizeof(mat<4, 3, T, defaultp>)); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> make_mat4x4(T const *const ptr) { mat<4, 4, T, defaultp> Result; memcpy(value_ptr(Result), ptr, sizeof(mat<4, 4, T, defaultp>)); return Result; } template GLM_FUNC_QUALIFIER mat<2, 2, T, defaultp> make_mat2(T const *const ptr) { return make_mat2x2(ptr); } template GLM_FUNC_QUALIFIER mat<3, 3, T, defaultp> make_mat3(T const *const ptr) { return make_mat3x3(ptr); } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> make_mat4(T const *const ptr) { return make_mat4x4(ptr); } template GLM_FUNC_QUALIFIER qua make_quat(T const *const ptr) { qua Result; memcpy(value_ptr(Result), ptr, sizeof(qua)); return Result; } /// @} }//namespace glm ================================================ FILE: libraries/glm/gtc/ulp.hpp ================================================ /// @ref gtc_ulp /// @file glm/gtc/ulp.hpp /// /// @see core (dependence) /// /// @defgroup gtc_ulp GLM_GTC_ulp /// @ingroup gtc /// /// Include to use the features of this extension. /// /// Allow the measurement of the accuracy of a function against a reference /// implementation. This extension works on floating-point data and provide results /// in ULP. #pragma once // Dependencies #include "../detail/setup.hpp" #include "../detail/qualifier.hpp" #include "../detail/_vectorize.hpp" #include "../ext/scalar_int_sized.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_GTC_ulp extension included") #endif namespace glm { /// Return the next ULP value(s) after the input value(s). /// /// @tparam genType A floating-point scalar type. /// /// @see gtc_ulp template GLM_FUNC_DECL genType next_float(genType x); /// Return the previous ULP value(s) before the input value(s). /// /// @tparam genType A floating-point scalar type. /// /// @see gtc_ulp template GLM_FUNC_DECL genType prev_float(genType x); /// Return the value(s) ULP distance after the input value(s). /// /// @tparam genType A floating-point scalar type. /// /// @see gtc_ulp template GLM_FUNC_DECL genType next_float(genType x, int ULPs); /// Return the value(s) ULP distance before the input value(s). /// /// @tparam genType A floating-point scalar type. /// /// @see gtc_ulp template GLM_FUNC_DECL genType prev_float(genType x, int ULPs); /// Return the distance in the number of ULP between 2 single-precision floating-point scalars. /// /// @see gtc_ulp GLM_FUNC_DECL int float_distance(float x, float y); /// Return the distance in the number of ULP between 2 double-precision floating-point scalars. /// /// @see gtc_ulp GLM_FUNC_DECL int64 float_distance(double x, double y); /// Return the next ULP value(s) after the input value(s). /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point /// @tparam Q Value from qualifier enum /// /// @see gtc_ulp template GLM_FUNC_DECL vec next_float(vec const& x); /// Return the value(s) ULP distance after the input value(s). /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point /// @tparam Q Value from qualifier enum /// /// @see gtc_ulp template GLM_FUNC_DECL vec next_float(vec const& x, int ULPs); /// Return the value(s) ULP distance after the input value(s). /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point /// @tparam Q Value from qualifier enum /// /// @see gtc_ulp template GLM_FUNC_DECL vec next_float(vec const& x, vec const& ULPs); /// Return the previous ULP value(s) before the input value(s). /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point /// @tparam Q Value from qualifier enum /// /// @see gtc_ulp template GLM_FUNC_DECL vec prev_float(vec const& x); /// Return the value(s) ULP distance before the input value(s). /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point /// @tparam Q Value from qualifier enum /// /// @see gtc_ulp template GLM_FUNC_DECL vec prev_float(vec const& x, int ULPs); /// Return the value(s) ULP distance before the input value(s). /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point /// @tparam Q Value from qualifier enum /// /// @see gtc_ulp template GLM_FUNC_DECL vec prev_float(vec const& x, vec const& ULPs); /// Return the distance in the number of ULP between 2 single-precision floating-point scalars. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam Q Value from qualifier enum /// /// @see gtc_ulp template GLM_FUNC_DECL vec float_distance(vec const& x, vec const& y); /// Return the distance in the number of ULP between 2 double-precision floating-point scalars. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam Q Value from qualifier enum /// /// @see gtc_ulp template GLM_FUNC_DECL vec float_distance(vec const& x, vec const& y); /// @} }//namespace glm #include "ulp.inl" ================================================ FILE: libraries/glm/gtc/ulp.inl ================================================ /// @ref gtc_ulp #include "../ext/scalar_ulp.hpp" namespace glm { template<> GLM_FUNC_QUALIFIER float next_float(float x) { # if GLM_HAS_CXX11_STL return std::nextafter(x, std::numeric_limits::max()); # elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) return detail::nextafterf(x, FLT_MAX); # elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) return __builtin_nextafterf(x, FLT_MAX); # else return nextafterf(x, FLT_MAX); # endif } template<> GLM_FUNC_QUALIFIER double next_float(double x) { # if GLM_HAS_CXX11_STL return std::nextafter(x, std::numeric_limits::max()); # elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) return detail::nextafter(x, std::numeric_limits::max()); # elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) return __builtin_nextafter(x, DBL_MAX); # else return nextafter(x, DBL_MAX); # endif } template GLM_FUNC_QUALIFIER T next_float(T x, int ULPs) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'next_float' only accept floating-point input"); assert(ULPs >= 0); T temp = x; for (int i = 0; i < ULPs; ++i) temp = next_float(temp); return temp; } GLM_FUNC_QUALIFIER float prev_float(float x) { # if GLM_HAS_CXX11_STL return std::nextafter(x, std::numeric_limits::min()); # elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) return detail::nextafterf(x, FLT_MIN); # elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) return __builtin_nextafterf(x, FLT_MIN); # else return nextafterf(x, FLT_MIN); # endif } GLM_FUNC_QUALIFIER double prev_float(double x) { # if GLM_HAS_CXX11_STL return std::nextafter(x, std::numeric_limits::min()); # elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) return _nextafter(x, DBL_MIN); # elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) return __builtin_nextafter(x, DBL_MIN); # else return nextafter(x, DBL_MIN); # endif } template GLM_FUNC_QUALIFIER T prev_float(T x, int ULPs) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'prev_float' only accept floating-point input"); assert(ULPs >= 0); T temp = x; for (int i = 0; i < ULPs; ++i) temp = prev_float(temp); return temp; } GLM_FUNC_QUALIFIER int float_distance(float x, float y) { detail::float_t const a(x); detail::float_t const b(y); return abs(a.i - b.i); } GLM_FUNC_QUALIFIER int64 float_distance(double x, double y) { detail::float_t const a(x); detail::float_t const b(y); return abs(a.i - b.i); } template GLM_FUNC_QUALIFIER vec next_float(vec const& x) { vec Result; for (length_t i = 0, n = Result.length(); i < n; ++i) Result[i] = next_float(x[i]); return Result; } template GLM_FUNC_QUALIFIER vec next_float(vec const& x, int ULPs) { vec Result; for (length_t i = 0, n = Result.length(); i < n; ++i) Result[i] = next_float(x[i], ULPs); return Result; } template GLM_FUNC_QUALIFIER vec next_float(vec const& x, vec const& ULPs) { vec Result; for (length_t i = 0, n = Result.length(); i < n; ++i) Result[i] = next_float(x[i], ULPs[i]); return Result; } template GLM_FUNC_QUALIFIER vec prev_float(vec const& x) { vec Result; for (length_t i = 0, n = Result.length(); i < n; ++i) Result[i] = prev_float(x[i]); return Result; } template GLM_FUNC_QUALIFIER vec prev_float(vec const& x, int ULPs) { vec Result; for (length_t i = 0, n = Result.length(); i < n; ++i) Result[i] = prev_float(x[i], ULPs); return Result; } template GLM_FUNC_QUALIFIER vec prev_float(vec const& x, vec const& ULPs) { vec Result; for (length_t i = 0, n = Result.length(); i < n; ++i) Result[i] = prev_float(x[i], ULPs[i]); return Result; } template GLM_FUNC_QUALIFIER vec float_distance(vec const& x, vec const& y) { vec Result; for (length_t i = 0, n = Result.length(); i < n; ++i) Result[i] = float_distance(x[i], y[i]); return Result; } template GLM_FUNC_QUALIFIER vec float_distance(vec const& x, vec const& y) { vec Result; for (length_t i = 0, n = Result.length(); i < n; ++i) Result[i] = float_distance(x[i], y[i]); return Result; } }//namespace glm ================================================ FILE: libraries/glm/gtc/vec1.hpp ================================================ /// @ref gtc_vec1 /// @file glm/gtc/vec1.hpp /// /// @see core (dependence) /// /// @defgroup gtc_vec1 GLM_GTC_vec1 /// @ingroup gtc /// /// Include to use the features of this extension. /// /// Add vec1, ivec1, uvec1 and bvec1 types. #pragma once // Dependency: #include "../ext/vector_bool1.hpp" #include "../ext/vector_bool1_precision.hpp" #include "../ext/vector_float1.hpp" #include "../ext/vector_float1_precision.hpp" #include "../ext/vector_double1.hpp" #include "../ext/vector_double1_precision.hpp" #include "../ext/vector_int1.hpp" #include "../ext/vector_int1_precision.hpp" #include "../ext/vector_uint1.hpp" #include "../ext/vector_uint1_precision.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # pragma message("GLM: GLM_GTC_vec1 extension included") #endif ================================================ FILE: libraries/glm/gtx/associated_min_max.hpp ================================================ /// @ref gtx_associated_min_max /// @file glm/gtx/associated_min_max.hpp /// /// @see core (dependence) /// @see gtx_extented_min_max (dependence) /// /// @defgroup gtx_associated_min_max GLM_GTX_associated_min_max /// @ingroup gtx /// /// Include to use the features of this extension. /// /// @brief Min and max functions that return associated values not the compared onces. #pragma once // Dependency: #include "../glm.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_associated_min_max is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_associated_min_max extension included") # endif #endif namespace glm { /// @addtogroup gtx_associated_min_max /// @{ /// Minimum comparison between 2 variables and returns 2 associated variable values /// @see gtx_associated_min_max template GLM_FUNC_DECL U associatedMin(T x, U a, T y, U b); /// Minimum comparison between 2 variables and returns 2 associated variable values /// @see gtx_associated_min_max template GLM_FUNC_DECL vec<2, U, Q> associatedMin( vec const& x, vec const& a, vec const& y, vec const& b); /// Minimum comparison between 2 variables and returns 2 associated variable values /// @see gtx_associated_min_max template GLM_FUNC_DECL vec associatedMin( T x, const vec& a, T y, const vec& b); /// Minimum comparison between 2 variables and returns 2 associated variable values /// @see gtx_associated_min_max template GLM_FUNC_DECL vec associatedMin( vec const& x, U a, vec const& y, U b); /// Minimum comparison between 3 variables and returns 3 associated variable values /// @see gtx_associated_min_max template GLM_FUNC_DECL U associatedMin( T x, U a, T y, U b, T z, U c); /// Minimum comparison between 3 variables and returns 3 associated variable values /// @see gtx_associated_min_max template GLM_FUNC_DECL vec associatedMin( vec const& x, vec const& a, vec const& y, vec const& b, vec const& z, vec const& c); /// Minimum comparison between 4 variables and returns 4 associated variable values /// @see gtx_associated_min_max template GLM_FUNC_DECL U associatedMin( T x, U a, T y, U b, T z, U c, T w, U d); /// Minimum comparison between 4 variables and returns 4 associated variable values /// @see gtx_associated_min_max template GLM_FUNC_DECL vec associatedMin( vec const& x, vec const& a, vec const& y, vec const& b, vec const& z, vec const& c, vec const& w, vec const& d); /// Minimum comparison between 4 variables and returns 4 associated variable values /// @see gtx_associated_min_max template GLM_FUNC_DECL vec associatedMin( T x, vec const& a, T y, vec const& b, T z, vec const& c, T w, vec const& d); /// Minimum comparison between 4 variables and returns 4 associated variable values /// @see gtx_associated_min_max template GLM_FUNC_DECL vec associatedMin( vec const& x, U a, vec const& y, U b, vec const& z, U c, vec const& w, U d); /// Maximum comparison between 2 variables and returns 2 associated variable values /// @see gtx_associated_min_max template GLM_FUNC_DECL U associatedMax(T x, U a, T y, U b); /// Maximum comparison between 2 variables and returns 2 associated variable values /// @see gtx_associated_min_max template GLM_FUNC_DECL vec<2, U, Q> associatedMax( vec const& x, vec const& a, vec const& y, vec const& b); /// Maximum comparison between 2 variables and returns 2 associated variable values /// @see gtx_associated_min_max template GLM_FUNC_DECL vec associatedMax( T x, vec const& a, T y, vec const& b); /// Maximum comparison between 2 variables and returns 2 associated variable values /// @see gtx_associated_min_max template GLM_FUNC_DECL vec associatedMax( vec const& x, U a, vec const& y, U b); /// Maximum comparison between 3 variables and returns 3 associated variable values /// @see gtx_associated_min_max template GLM_FUNC_DECL U associatedMax( T x, U a, T y, U b, T z, U c); /// Maximum comparison between 3 variables and returns 3 associated variable values /// @see gtx_associated_min_max template GLM_FUNC_DECL vec associatedMax( vec const& x, vec const& a, vec const& y, vec const& b, vec const& z, vec const& c); /// Maximum comparison between 3 variables and returns 3 associated variable values /// @see gtx_associated_min_max template GLM_FUNC_DECL vec associatedMax( T x, vec const& a, T y, vec const& b, T z, vec const& c); /// Maximum comparison between 3 variables and returns 3 associated variable values /// @see gtx_associated_min_max template GLM_FUNC_DECL vec associatedMax( vec const& x, U a, vec const& y, U b, vec const& z, U c); /// Maximum comparison between 4 variables and returns 4 associated variable values /// @see gtx_associated_min_max template GLM_FUNC_DECL U associatedMax( T x, U a, T y, U b, T z, U c, T w, U d); /// Maximum comparison between 4 variables and returns 4 associated variable values /// @see gtx_associated_min_max template GLM_FUNC_DECL vec associatedMax( vec const& x, vec const& a, vec const& y, vec const& b, vec const& z, vec const& c, vec const& w, vec const& d); /// Maximum comparison between 4 variables and returns 4 associated variable values /// @see gtx_associated_min_max template GLM_FUNC_DECL vec associatedMax( T x, vec const& a, T y, vec const& b, T z, vec const& c, T w, vec const& d); /// Maximum comparison between 4 variables and returns 4 associated variable values /// @see gtx_associated_min_max template GLM_FUNC_DECL vec associatedMax( vec const& x, U a, vec const& y, U b, vec const& z, U c, vec const& w, U d); /// @} } //namespace glm #include "associated_min_max.inl" ================================================ FILE: libraries/glm/gtx/associated_min_max.inl ================================================ /// @ref gtx_associated_min_max namespace glm{ // Min comparison between 2 variables template GLM_FUNC_QUALIFIER U associatedMin(T x, U a, T y, U b) { return x < y ? a : b; } template GLM_FUNC_QUALIFIER vec<2, U, Q> associatedMin ( vec const& x, vec const& a, vec const& y, vec const& b ) { vec Result; for(length_t i = 0, n = Result.length(); i < n; ++i) Result[i] = x[i] < y[i] ? a[i] : b[i]; return Result; } template GLM_FUNC_QUALIFIER vec associatedMin ( T x, const vec& a, T y, const vec& b ) { vec Result; for(length_t i = 0, n = Result.length(); i < n; ++i) Result[i] = x < y ? a[i] : b[i]; return Result; } template GLM_FUNC_QUALIFIER vec associatedMin ( vec const& x, U a, vec const& y, U b ) { vec Result; for(length_t i = 0, n = Result.length(); i < n; ++i) Result[i] = x[i] < y[i] ? a : b; return Result; } // Min comparison between 3 variables template GLM_FUNC_QUALIFIER U associatedMin ( T x, U a, T y, U b, T z, U c ) { U Result = x < y ? (x < z ? a : c) : (y < z ? b : c); return Result; } template GLM_FUNC_QUALIFIER vec associatedMin ( vec const& x, vec const& a, vec const& y, vec const& b, vec const& z, vec const& c ) { vec Result; for(length_t i = 0, n = Result.length(); i < n; ++i) Result[i] = x[i] < y[i] ? (x[i] < z[i] ? a[i] : c[i]) : (y[i] < z[i] ? b[i] : c[i]); return Result; } // Min comparison between 4 variables template GLM_FUNC_QUALIFIER U associatedMin ( T x, U a, T y, U b, T z, U c, T w, U d ) { T Test1 = min(x, y); T Test2 = min(z, w); U Result1 = x < y ? a : b; U Result2 = z < w ? c : d; U Result = Test1 < Test2 ? Result1 : Result2; return Result; } // Min comparison between 4 variables template GLM_FUNC_QUALIFIER vec associatedMin ( vec const& x, vec const& a, vec const& y, vec const& b, vec const& z, vec const& c, vec const& w, vec const& d ) { vec Result; for(length_t i = 0, n = Result.length(); i < n; ++i) { T Test1 = min(x[i], y[i]); T Test2 = min(z[i], w[i]); U Result1 = x[i] < y[i] ? a[i] : b[i]; U Result2 = z[i] < w[i] ? c[i] : d[i]; Result[i] = Test1 < Test2 ? Result1 : Result2; } return Result; } // Min comparison between 4 variables template GLM_FUNC_QUALIFIER vec associatedMin ( T x, vec const& a, T y, vec const& b, T z, vec const& c, T w, vec const& d ) { T Test1 = min(x, y); T Test2 = min(z, w); vec Result; for(length_t i = 0, n = Result.length(); i < n; ++i) { U Result1 = x < y ? a[i] : b[i]; U Result2 = z < w ? c[i] : d[i]; Result[i] = Test1 < Test2 ? Result1 : Result2; } return Result; } // Min comparison between 4 variables template GLM_FUNC_QUALIFIER vec associatedMin ( vec const& x, U a, vec const& y, U b, vec const& z, U c, vec const& w, U d ) { vec Result; for(length_t i = 0, n = Result.length(); i < n; ++i) { T Test1 = min(x[i], y[i]); T Test2 = min(z[i], w[i]); U Result1 = x[i] < y[i] ? a : b; U Result2 = z[i] < w[i] ? c : d; Result[i] = Test1 < Test2 ? Result1 : Result2; } return Result; } // Max comparison between 2 variables template GLM_FUNC_QUALIFIER U associatedMax(T x, U a, T y, U b) { return x > y ? a : b; } // Max comparison between 2 variables template GLM_FUNC_QUALIFIER vec<2, U, Q> associatedMax ( vec const& x, vec const& a, vec const& y, vec const& b ) { vec Result; for(length_t i = 0, n = Result.length(); i < n; ++i) Result[i] = x[i] > y[i] ? a[i] : b[i]; return Result; } // Max comparison between 2 variables template GLM_FUNC_QUALIFIER vec associatedMax ( T x, vec const& a, T y, vec const& b ) { vec Result; for(length_t i = 0, n = Result.length(); i < n; ++i) Result[i] = x > y ? a[i] : b[i]; return Result; } // Max comparison between 2 variables template GLM_FUNC_QUALIFIER vec associatedMax ( vec const& x, U a, vec const& y, U b ) { vec Result; for(length_t i = 0, n = Result.length(); i < n; ++i) Result[i] = x[i] > y[i] ? a : b; return Result; } // Max comparison between 3 variables template GLM_FUNC_QUALIFIER U associatedMax ( T x, U a, T y, U b, T z, U c ) { U Result = x > y ? (x > z ? a : c) : (y > z ? b : c); return Result; } // Max comparison between 3 variables template GLM_FUNC_QUALIFIER vec associatedMax ( vec const& x, vec const& a, vec const& y, vec const& b, vec const& z, vec const& c ) { vec Result; for(length_t i = 0, n = Result.length(); i < n; ++i) Result[i] = x[i] > y[i] ? (x[i] > z[i] ? a[i] : c[i]) : (y[i] > z[i] ? b[i] : c[i]); return Result; } // Max comparison between 3 variables template GLM_FUNC_QUALIFIER vec associatedMax ( T x, vec const& a, T y, vec const& b, T z, vec const& c ) { vec Result; for(length_t i = 0, n = Result.length(); i < n; ++i) Result[i] = x > y ? (x > z ? a[i] : c[i]) : (y > z ? b[i] : c[i]); return Result; } // Max comparison between 3 variables template GLM_FUNC_QUALIFIER vec associatedMax ( vec const& x, U a, vec const& y, U b, vec const& z, U c ) { vec Result; for(length_t i = 0, n = Result.length(); i < n; ++i) Result[i] = x[i] > y[i] ? (x[i] > z[i] ? a : c) : (y[i] > z[i] ? b : c); return Result; } // Max comparison between 4 variables template GLM_FUNC_QUALIFIER U associatedMax ( T x, U a, T y, U b, T z, U c, T w, U d ) { T Test1 = max(x, y); T Test2 = max(z, w); U Result1 = x > y ? a : b; U Result2 = z > w ? c : d; U Result = Test1 > Test2 ? Result1 : Result2; return Result; } // Max comparison between 4 variables template GLM_FUNC_QUALIFIER vec associatedMax ( vec const& x, vec const& a, vec const& y, vec const& b, vec const& z, vec const& c, vec const& w, vec const& d ) { vec Result; for(length_t i = 0, n = Result.length(); i < n; ++i) { T Test1 = max(x[i], y[i]); T Test2 = max(z[i], w[i]); U Result1 = x[i] > y[i] ? a[i] : b[i]; U Result2 = z[i] > w[i] ? c[i] : d[i]; Result[i] = Test1 > Test2 ? Result1 : Result2; } return Result; } // Max comparison between 4 variables template GLM_FUNC_QUALIFIER vec associatedMax ( T x, vec const& a, T y, vec const& b, T z, vec const& c, T w, vec const& d ) { T Test1 = max(x, y); T Test2 = max(z, w); vec Result; for(length_t i = 0, n = Result.length(); i < n; ++i) { U Result1 = x > y ? a[i] : b[i]; U Result2 = z > w ? c[i] : d[i]; Result[i] = Test1 > Test2 ? Result1 : Result2; } return Result; } // Max comparison between 4 variables template GLM_FUNC_QUALIFIER vec associatedMax ( vec const& x, U a, vec const& y, U b, vec const& z, U c, vec const& w, U d ) { vec Result; for(length_t i = 0, n = Result.length(); i < n; ++i) { T Test1 = max(x[i], y[i]); T Test2 = max(z[i], w[i]); U Result1 = x[i] > y[i] ? a : b; U Result2 = z[i] > w[i] ? c : d; Result[i] = Test1 > Test2 ? Result1 : Result2; } return Result; } }//namespace glm ================================================ FILE: libraries/glm/gtx/bit.hpp ================================================ /// @ref gtx_bit /// @file glm/gtx/bit.hpp /// /// @see core (dependence) /// /// @defgroup gtx_bit GLM_GTX_bit /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Allow to perform bit operations on integer values #pragma once // Dependencies #include "../gtc/bitfield.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_bit is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_bit extension included") # endif #endif namespace glm { /// @addtogroup gtx_bit /// @{ /// @see gtx_bit template GLM_FUNC_DECL genIUType highestBitValue(genIUType Value); /// @see gtx_bit template GLM_FUNC_DECL genIUType lowestBitValue(genIUType Value); /// Find the highest bit set to 1 in a integer variable and return its value. /// /// @see gtx_bit template GLM_FUNC_DECL vec highestBitValue(vec const& value); /// Return the power of two number which value is just higher the input value. /// Deprecated, use ceilPowerOfTwo from GTC_round instead /// /// @see gtc_round /// @see gtx_bit template GLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoAbove(genIUType Value); /// Return the power of two number which value is just higher the input value. /// Deprecated, use ceilPowerOfTwo from GTC_round instead /// /// @see gtc_round /// @see gtx_bit template GLM_DEPRECATED GLM_FUNC_DECL vec powerOfTwoAbove(vec const& value); /// Return the power of two number which value is just lower the input value. /// Deprecated, use floorPowerOfTwo from GTC_round instead /// /// @see gtc_round /// @see gtx_bit template GLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoBelow(genIUType Value); /// Return the power of two number which value is just lower the input value. /// Deprecated, use floorPowerOfTwo from GTC_round instead /// /// @see gtc_round /// @see gtx_bit template GLM_DEPRECATED GLM_FUNC_DECL vec powerOfTwoBelow(vec const& value); /// Return the power of two number which value is the closet to the input value. /// Deprecated, use roundPowerOfTwo from GTC_round instead /// /// @see gtc_round /// @see gtx_bit template GLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoNearest(genIUType Value); /// Return the power of two number which value is the closet to the input value. /// Deprecated, use roundPowerOfTwo from GTC_round instead /// /// @see gtc_round /// @see gtx_bit template GLM_DEPRECATED GLM_FUNC_DECL vec powerOfTwoNearest(vec const& value); /// @} } //namespace glm #include "bit.inl" ================================================ FILE: libraries/glm/gtx/bit.inl ================================================ /// @ref gtx_bit namespace glm { /////////////////// // highestBitValue template GLM_FUNC_QUALIFIER genIUType highestBitValue(genIUType Value) { genIUType tmp = Value; genIUType result = genIUType(0); while(tmp) { result = (tmp & (~tmp + 1)); // grab lowest bit tmp &= ~result; // clear lowest bit } return result; } template GLM_FUNC_QUALIFIER vec highestBitValue(vec const& v) { return detail::functor1::call(highestBitValue, v); } /////////////////// // lowestBitValue template GLM_FUNC_QUALIFIER genIUType lowestBitValue(genIUType Value) { return (Value & (~Value + 1)); } template GLM_FUNC_QUALIFIER vec lowestBitValue(vec const& v) { return detail::functor1::call(lowestBitValue, v); } /////////////////// // powerOfTwoAbove template GLM_FUNC_QUALIFIER genType powerOfTwoAbove(genType value) { return isPowerOfTwo(value) ? value : highestBitValue(value) << 1; } template GLM_FUNC_QUALIFIER vec powerOfTwoAbove(vec const& v) { return detail::functor1::call(powerOfTwoAbove, v); } /////////////////// // powerOfTwoBelow template GLM_FUNC_QUALIFIER genType powerOfTwoBelow(genType value) { return isPowerOfTwo(value) ? value : highestBitValue(value); } template GLM_FUNC_QUALIFIER vec powerOfTwoBelow(vec const& v) { return detail::functor1::call(powerOfTwoBelow, v); } ///////////////////// // powerOfTwoNearest template GLM_FUNC_QUALIFIER genType powerOfTwoNearest(genType value) { if(isPowerOfTwo(value)) return value; genType const prev = highestBitValue(value); genType const next = prev << 1; return (next - value) < (value - prev) ? next : prev; } template GLM_FUNC_QUALIFIER vec powerOfTwoNearest(vec const& v) { return detail::functor1::call(powerOfTwoNearest, v); } }//namespace glm ================================================ FILE: libraries/glm/gtx/closest_point.hpp ================================================ /// @ref gtx_closest_point /// @file glm/gtx/closest_point.hpp /// /// @see core (dependence) /// /// @defgroup gtx_closest_point GLM_GTX_closest_point /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Find the point on a straight line which is the closet of a point. #pragma once // Dependency: #include "../glm.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_closest_point is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_closest_point extension included") # endif #endif namespace glm { /// @addtogroup gtx_closest_point /// @{ /// Find the point on a straight line which is the closet of a point. /// @see gtx_closest_point template GLM_FUNC_DECL vec<3, T, Q> closestPointOnLine( vec<3, T, Q> const& point, vec<3, T, Q> const& a, vec<3, T, Q> const& b); /// 2d lines work as well template GLM_FUNC_DECL vec<2, T, Q> closestPointOnLine( vec<2, T, Q> const& point, vec<2, T, Q> const& a, vec<2, T, Q> const& b); /// @} }// namespace glm #include "closest_point.inl" ================================================ FILE: libraries/glm/gtx/closest_point.inl ================================================ /// @ref gtx_closest_point namespace glm { template GLM_FUNC_QUALIFIER vec<3, T, Q> closestPointOnLine ( vec<3, T, Q> const& point, vec<3, T, Q> const& a, vec<3, T, Q> const& b ) { T LineLength = distance(a, b); vec<3, T, Q> Vector = point - a; vec<3, T, Q> LineDirection = (b - a) / LineLength; // Project Vector to LineDirection to get the distance of point from a T Distance = dot(Vector, LineDirection); if(Distance <= T(0)) return a; if(Distance >= LineLength) return b; return a + LineDirection * Distance; } template GLM_FUNC_QUALIFIER vec<2, T, Q> closestPointOnLine ( vec<2, T, Q> const& point, vec<2, T, Q> const& a, vec<2, T, Q> const& b ) { T LineLength = distance(a, b); vec<2, T, Q> Vector = point - a; vec<2, T, Q> LineDirection = (b - a) / LineLength; // Project Vector to LineDirection to get the distance of point from a T Distance = dot(Vector, LineDirection); if(Distance <= T(0)) return a; if(Distance >= LineLength) return b; return a + LineDirection * Distance; } }//namespace glm ================================================ FILE: libraries/glm/gtx/color_encoding.hpp ================================================ /// @ref gtx_color_encoding /// @file glm/gtx/color_encoding.hpp /// /// @see core (dependence) /// @see gtx_color_encoding (dependence) /// /// @defgroup gtx_color_encoding GLM_GTX_color_encoding /// @ingroup gtx /// /// Include to use the features of this extension. /// /// @brief Allow to perform bit operations on integer values #pragma once // Dependencies #include "../detail/setup.hpp" #include "../detail/qualifier.hpp" #include "../vec3.hpp" #include #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTC_color_encoding is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTC_color_encoding extension included") # endif #endif namespace glm { /// @addtogroup gtx_color_encoding /// @{ /// Convert a linear sRGB color to D65 YUV. template GLM_FUNC_DECL vec<3, T, Q> convertLinearSRGBToD65XYZ(vec<3, T, Q> const& ColorLinearSRGB); /// Convert a linear sRGB color to D50 YUV. template GLM_FUNC_DECL vec<3, T, Q> convertLinearSRGBToD50XYZ(vec<3, T, Q> const& ColorLinearSRGB); /// Convert a D65 YUV color to linear sRGB. template GLM_FUNC_DECL vec<3, T, Q> convertD65XYZToLinearSRGB(vec<3, T, Q> const& ColorD65XYZ); /// Convert a D65 YUV color to D50 YUV. template GLM_FUNC_DECL vec<3, T, Q> convertD65XYZToD50XYZ(vec<3, T, Q> const& ColorD65XYZ); /// @} } //namespace glm #include "color_encoding.inl" ================================================ FILE: libraries/glm/gtx/color_encoding.inl ================================================ /// @ref gtx_color_encoding namespace glm { template GLM_FUNC_QUALIFIER vec<3, T, Q> convertLinearSRGBToD65XYZ(vec<3, T, Q> const& ColorLinearSRGB) { vec<3, T, Q> const M(0.490f, 0.17697f, 0.2f); vec<3, T, Q> const N(0.31f, 0.8124f, 0.01063f); vec<3, T, Q> const O(0.490f, 0.01f, 0.99f); return (M * ColorLinearSRGB + N * ColorLinearSRGB + O * ColorLinearSRGB) * static_cast(5.650675255693055f); } template GLM_FUNC_QUALIFIER vec<3, T, Q> convertLinearSRGBToD50XYZ(vec<3, T, Q> const& ColorLinearSRGB) { vec<3, T, Q> const M(0.436030342570117f, 0.222438466210245f, 0.013897440074263f); vec<3, T, Q> const N(0.385101860087134f, 0.716942745571917f, 0.097076381494207f); vec<3, T, Q> const O(0.143067806654203f, 0.060618777416563f, 0.713926257896652f); return M * ColorLinearSRGB + N * ColorLinearSRGB + O * ColorLinearSRGB; } template GLM_FUNC_QUALIFIER vec<3, T, Q> convertD65XYZToLinearSRGB(vec<3, T, Q> const& ColorD65XYZ) { vec<3, T, Q> const M(0.41847f, -0.091169f, 0.0009209f); vec<3, T, Q> const N(-0.15866f, 0.25243f, 0.015708f); vec<3, T, Q> const O(0.0009209f, -0.0025498f, 0.1786f); return M * ColorD65XYZ + N * ColorD65XYZ + O * ColorD65XYZ; } template GLM_FUNC_QUALIFIER vec<3, T, Q> convertD65XYZToD50XYZ(vec<3, T, Q> const& ColorD65XYZ) { vec<3, T, Q> const M(+1.047844353856414f, +0.029549007606644f, -0.009250984365223f); vec<3, T, Q> const N(+0.022898981050086f, +0.990508028941971f, +0.015072338237051f); vec<3, T, Q> const O(-0.050206647741605f, -0.017074711360960f, +0.751717835079977f); return M * ColorD65XYZ + N * ColorD65XYZ + O * ColorD65XYZ; } }//namespace glm ================================================ FILE: libraries/glm/gtx/color_space.hpp ================================================ /// @ref gtx_color_space /// @file glm/gtx/color_space.hpp /// /// @see core (dependence) /// /// @defgroup gtx_color_space GLM_GTX_color_space /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Related to RGB to HSV conversions and operations. #pragma once // Dependency: #include "../glm.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_color_space is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_color_space extension included") # endif #endif namespace glm { /// @addtogroup gtx_color_space /// @{ /// Converts a color from HSV color space to its color in RGB color space. /// @see gtx_color_space template GLM_FUNC_DECL vec<3, T, Q> rgbColor( vec<3, T, Q> const& hsvValue); /// Converts a color from RGB color space to its color in HSV color space. /// @see gtx_color_space template GLM_FUNC_DECL vec<3, T, Q> hsvColor( vec<3, T, Q> const& rgbValue); /// Build a saturation matrix. /// @see gtx_color_space template GLM_FUNC_DECL mat<4, 4, T, defaultp> saturation( T const s); /// Modify the saturation of a color. /// @see gtx_color_space template GLM_FUNC_DECL vec<3, T, Q> saturation( T const s, vec<3, T, Q> const& color); /// Modify the saturation of a color. /// @see gtx_color_space template GLM_FUNC_DECL vec<4, T, Q> saturation( T const s, vec<4, T, Q> const& color); /// Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals. /// @see gtx_color_space template GLM_FUNC_DECL T luminosity( vec<3, T, Q> const& color); /// @} }//namespace glm #include "color_space.inl" ================================================ FILE: libraries/glm/gtx/color_space.inl ================================================ /// @ref gtx_color_space namespace glm { template GLM_FUNC_QUALIFIER vec<3, T, Q> rgbColor(const vec<3, T, Q>& hsvColor) { vec<3, T, Q> hsv = hsvColor; vec<3, T, Q> rgbColor; if(hsv.y == static_cast(0)) // achromatic (grey) rgbColor = vec<3, T, Q>(hsv.z); else { T sector = floor(hsv.x * (T(1) / T(60))); T frac = (hsv.x * (T(1) / T(60))) - sector; // factorial part of h T o = hsv.z * (T(1) - hsv.y); T p = hsv.z * (T(1) - hsv.y * frac); T q = hsv.z * (T(1) - hsv.y * (T(1) - frac)); switch(int(sector)) { default: case 0: rgbColor.r = hsv.z; rgbColor.g = q; rgbColor.b = o; break; case 1: rgbColor.r = p; rgbColor.g = hsv.z; rgbColor.b = o; break; case 2: rgbColor.r = o; rgbColor.g = hsv.z; rgbColor.b = q; break; case 3: rgbColor.r = o; rgbColor.g = p; rgbColor.b = hsv.z; break; case 4: rgbColor.r = q; rgbColor.g = o; rgbColor.b = hsv.z; break; case 5: rgbColor.r = hsv.z; rgbColor.g = o; rgbColor.b = p; break; } } return rgbColor; } template GLM_FUNC_QUALIFIER vec<3, T, Q> hsvColor(const vec<3, T, Q>& rgbColor) { vec<3, T, Q> hsv = rgbColor; float Min = min(min(rgbColor.r, rgbColor.g), rgbColor.b); float Max = max(max(rgbColor.r, rgbColor.g), rgbColor.b); float Delta = Max - Min; hsv.z = Max; if(Max != static_cast(0)) { hsv.y = Delta / hsv.z; T h = static_cast(0); if(rgbColor.r == Max) // between yellow & magenta h = static_cast(0) + T(60) * (rgbColor.g - rgbColor.b) / Delta; else if(rgbColor.g == Max) // between cyan & yellow h = static_cast(120) + T(60) * (rgbColor.b - rgbColor.r) / Delta; else // between magenta & cyan h = static_cast(240) + T(60) * (rgbColor.r - rgbColor.g) / Delta; if(h < T(0)) hsv.x = h + T(360); else hsv.x = h; } else { // If r = g = b = 0 then s = 0, h is undefined hsv.y = static_cast(0); hsv.x = static_cast(0); } return hsv; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> saturation(T const s) { vec<3, T, defaultp> rgbw = vec<3, T, defaultp>(T(0.2126), T(0.7152), T(0.0722)); vec<3, T, defaultp> const col((T(1) - s) * rgbw); mat<4, 4, T, defaultp> result(T(1)); result[0][0] = col.x + s; result[0][1] = col.x; result[0][2] = col.x; result[1][0] = col.y; result[1][1] = col.y + s; result[1][2] = col.y; result[2][0] = col.z; result[2][1] = col.z; result[2][2] = col.z + s; return result; } template GLM_FUNC_QUALIFIER vec<3, T, Q> saturation(const T s, const vec<3, T, Q>& color) { return vec<3, T, Q>(saturation(s) * vec<4, T, Q>(color, T(0))); } template GLM_FUNC_QUALIFIER vec<4, T, Q> saturation(const T s, const vec<4, T, Q>& color) { return saturation(s) * color; } template GLM_FUNC_QUALIFIER T luminosity(const vec<3, T, Q>& color) { const vec<3, T, Q> tmp = vec<3, T, Q>(0.33, 0.59, 0.11); return dot(color, tmp); } }//namespace glm ================================================ FILE: libraries/glm/gtx/color_space_YCoCg.hpp ================================================ /// @ref gtx_color_space_YCoCg /// @file glm/gtx/color_space_YCoCg.hpp /// /// @see core (dependence) /// /// @defgroup gtx_color_space_YCoCg GLM_GTX_color_space_YCoCg /// @ingroup gtx /// /// Include to use the features of this extension. /// /// RGB to YCoCg conversions and operations #pragma once // Dependency: #include "../glm.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_color_space_YCoCg is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_color_space_YCoCg extension included") # endif #endif namespace glm { /// @addtogroup gtx_color_space_YCoCg /// @{ /// Convert a color from RGB color space to YCoCg color space. /// @see gtx_color_space_YCoCg template GLM_FUNC_DECL vec<3, T, Q> rgb2YCoCg( vec<3, T, Q> const& rgbColor); /// Convert a color from YCoCg color space to RGB color space. /// @see gtx_color_space_YCoCg template GLM_FUNC_DECL vec<3, T, Q> YCoCg2rgb( vec<3, T, Q> const& YCoCgColor); /// Convert a color from RGB color space to YCoCgR color space. /// @see "YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range" /// @see gtx_color_space_YCoCg template GLM_FUNC_DECL vec<3, T, Q> rgb2YCoCgR( vec<3, T, Q> const& rgbColor); /// Convert a color from YCoCgR color space to RGB color space. /// @see "YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range" /// @see gtx_color_space_YCoCg template GLM_FUNC_DECL vec<3, T, Q> YCoCgR2rgb( vec<3, T, Q> const& YCoCgColor); /// @} }//namespace glm #include "color_space_YCoCg.inl" ================================================ FILE: libraries/glm/gtx/color_space_YCoCg.inl ================================================ /// @ref gtx_color_space_YCoCg namespace glm { template GLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCg ( vec<3, T, Q> const& rgbColor ) { vec<3, T, Q> result; result.x/*Y */ = rgbColor.r / T(4) + rgbColor.g / T(2) + rgbColor.b / T(4); result.y/*Co*/ = rgbColor.r / T(2) + rgbColor.g * T(0) - rgbColor.b / T(2); result.z/*Cg*/ = - rgbColor.r / T(4) + rgbColor.g / T(2) - rgbColor.b / T(4); return result; } template GLM_FUNC_QUALIFIER vec<3, T, Q> YCoCg2rgb ( vec<3, T, Q> const& YCoCgColor ) { vec<3, T, Q> result; result.r = YCoCgColor.x + YCoCgColor.y - YCoCgColor.z; result.g = YCoCgColor.x + YCoCgColor.z; result.b = YCoCgColor.x - YCoCgColor.y - YCoCgColor.z; return result; } template class compute_YCoCgR { public: static GLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCgR ( vec<3, T, Q> const& rgbColor ) { vec<3, T, Q> result; result.x/*Y */ = rgbColor.g * static_cast(0.5) + (rgbColor.r + rgbColor.b) * static_cast(0.25); result.y/*Co*/ = rgbColor.r - rgbColor.b; result.z/*Cg*/ = rgbColor.g - (rgbColor.r + rgbColor.b) * static_cast(0.5); return result; } static GLM_FUNC_QUALIFIER vec<3, T, Q> YCoCgR2rgb ( vec<3, T, Q> const& YCoCgRColor ) { vec<3, T, Q> result; T tmp = YCoCgRColor.x - (YCoCgRColor.z * static_cast(0.5)); result.g = YCoCgRColor.z + tmp; result.b = tmp - (YCoCgRColor.y * static_cast(0.5)); result.r = result.b + YCoCgRColor.y; return result; } }; template class compute_YCoCgR { public: static GLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCgR ( vec<3, T, Q> const& rgbColor ) { vec<3, T, Q> result; result.y/*Co*/ = rgbColor.r - rgbColor.b; T tmp = rgbColor.b + (result.y >> 1); result.z/*Cg*/ = rgbColor.g - tmp; result.x/*Y */ = tmp + (result.z >> 1); return result; } static GLM_FUNC_QUALIFIER vec<3, T, Q> YCoCgR2rgb ( vec<3, T, Q> const& YCoCgRColor ) { vec<3, T, Q> result; T tmp = YCoCgRColor.x - (YCoCgRColor.z >> 1); result.g = YCoCgRColor.z + tmp; result.b = tmp - (YCoCgRColor.y >> 1); result.r = result.b + YCoCgRColor.y; return result; } }; template GLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCgR ( vec<3, T, Q> const& rgbColor ) { return compute_YCoCgR::is_integer>::rgb2YCoCgR(rgbColor); } template GLM_FUNC_QUALIFIER vec<3, T, Q> YCoCgR2rgb ( vec<3, T, Q> const& YCoCgRColor ) { return compute_YCoCgR::is_integer>::YCoCgR2rgb(YCoCgRColor); } }//namespace glm ================================================ FILE: libraries/glm/gtx/common.hpp ================================================ /// @ref gtx_common /// @file glm/gtx/common.hpp /// /// @see core (dependence) /// /// @defgroup gtx_common GLM_GTX_common /// @ingroup gtx /// /// Include to use the features of this extension. /// /// @brief Provide functions to increase the compatibility with Cg and HLSL languages #pragma once // Dependencies: #include "../vec2.hpp" #include "../vec3.hpp" #include "../vec4.hpp" #include "../gtc/vec1.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_common is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_common extension included") # endif #endif namespace glm { /// @addtogroup gtx_common /// @{ /// Returns true if x is a denormalized number /// Numbers whose absolute value is too small to be represented in the normal format are represented in an alternate, denormalized format. /// This format is less precise but can represent values closer to zero. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL isnan man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template GLM_FUNC_DECL typename genType::bool_type isdenormal(genType const& x); /// Similar to 'mod' but with a different rounding and integer support. /// Returns 'x - y * trunc(x/y)' instead of 'x - y * floor(x/y)' /// /// @see GLSL mod vs HLSL fmod /// @see GLSL mod man page template GLM_FUNC_DECL vec fmod(vec const& v); /// Returns whether vector components values are within an interval. A open interval excludes its endpoints, and is denoted with square brackets. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point or integer scalar types /// @tparam Q Value from qualifier enum /// /// @see ext_vector_relational template GLM_FUNC_DECL vec openBounded(vec const& Value, vec const& Min, vec const& Max); /// Returns whether vector components values are within an interval. A closed interval includes its endpoints, and is denoted with square brackets. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point or integer scalar types /// @tparam Q Value from qualifier enum /// /// @see ext_vector_relational template GLM_FUNC_DECL vec closeBounded(vec const& Value, vec const& Min, vec const& Max); /// @} }//namespace glm #include "common.inl" ================================================ FILE: libraries/glm/gtx/common.inl ================================================ /// @ref gtx_common #include #include "../gtc/epsilon.hpp" #include "../gtc/constants.hpp" namespace glm{ namespace detail { template struct compute_fmod { GLM_FUNC_QUALIFIER static vec call(vec const& a, vec const& b) { return detail::functor2::call(std::fmod, a, b); } }; template struct compute_fmod { GLM_FUNC_QUALIFIER static vec call(vec const& a, vec const& b) { return a % b; } }; }//namespace detail template GLM_FUNC_QUALIFIER bool isdenormal(T const& x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isdenormal' only accept floating-point inputs"); # if GLM_HAS_CXX11_STL return std::fpclassify(x) == FP_SUBNORMAL; # else return epsilonNotEqual(x, static_cast(0), epsilon()) && std::fabs(x) < std::numeric_limits::min(); # endif } template GLM_FUNC_QUALIFIER typename vec<1, T, Q>::bool_type isdenormal ( vec<1, T, Q> const& x ) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isdenormal' only accept floating-point inputs"); return typename vec<1, T, Q>::bool_type( isdenormal(x.x)); } template GLM_FUNC_QUALIFIER typename vec<2, T, Q>::bool_type isdenormal ( vec<2, T, Q> const& x ) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isdenormal' only accept floating-point inputs"); return typename vec<2, T, Q>::bool_type( isdenormal(x.x), isdenormal(x.y)); } template GLM_FUNC_QUALIFIER typename vec<3, T, Q>::bool_type isdenormal ( vec<3, T, Q> const& x ) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isdenormal' only accept floating-point inputs"); return typename vec<3, T, Q>::bool_type( isdenormal(x.x), isdenormal(x.y), isdenormal(x.z)); } template GLM_FUNC_QUALIFIER typename vec<4, T, Q>::bool_type isdenormal ( vec<4, T, Q> const& x ) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isdenormal' only accept floating-point inputs"); return typename vec<4, T, Q>::bool_type( isdenormal(x.x), isdenormal(x.y), isdenormal(x.z), isdenormal(x.w)); } // fmod template GLM_FUNC_QUALIFIER genType fmod(genType x, genType y) { return fmod(vec<1, genType>(x), y).x; } template GLM_FUNC_QUALIFIER vec fmod(vec const& x, T y) { return detail::compute_fmod::is_iec559>::call(x, vec(y)); } template GLM_FUNC_QUALIFIER vec fmod(vec const& x, vec const& y) { return detail::compute_fmod::is_iec559>::call(x, y); } template GLM_FUNC_QUALIFIER vec openBounded(vec const& Value, vec const& Min, vec const& Max) { return greaterThan(Value, Min) && lessThan(Value, Max); } template GLM_FUNC_QUALIFIER vec closeBounded(vec const& Value, vec const& Min, vec const& Max) { return greaterThanEqual(Value, Min) && lessThanEqual(Value, Max); } }//namespace glm ================================================ FILE: libraries/glm/gtx/compatibility.hpp ================================================ /// @ref gtx_compatibility /// @file glm/gtx/compatibility.hpp /// /// @see core (dependence) /// /// @defgroup gtx_compatibility GLM_GTX_compatibility /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Provide functions to increase the compatibility with Cg and HLSL languages #pragma once // Dependency: #include "../glm.hpp" #include "../gtc/quaternion.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_compatibility is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_compatibility extension included") # endif #endif #if GLM_COMPILER & GLM_COMPILER_VC # include #elif GLM_COMPILER & GLM_COMPILER_GCC # include # if(GLM_PLATFORM & GLM_PLATFORM_ANDROID) # undef isfinite # endif #endif//GLM_COMPILER namespace glm { /// @addtogroup gtx_compatibility /// @{ template GLM_FUNC_QUALIFIER T lerp(T x, T y, T a){return mix(x, y, a);} //!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) template GLM_FUNC_QUALIFIER vec<2, T, Q> lerp(const vec<2, T, Q>& x, const vec<2, T, Q>& y, T a){return mix(x, y, a);} //!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) template GLM_FUNC_QUALIFIER vec<3, T, Q> lerp(const vec<3, T, Q>& x, const vec<3, T, Q>& y, T a){return mix(x, y, a);} //!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) template GLM_FUNC_QUALIFIER vec<4, T, Q> lerp(const vec<4, T, Q>& x, const vec<4, T, Q>& y, T a){return mix(x, y, a);} //!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) template GLM_FUNC_QUALIFIER vec<2, T, Q> lerp(const vec<2, T, Q>& x, const vec<2, T, Q>& y, const vec<2, T, Q>& a){return mix(x, y, a);} //!< \brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) template GLM_FUNC_QUALIFIER vec<3, T, Q> lerp(const vec<3, T, Q>& x, const vec<3, T, Q>& y, const vec<3, T, Q>& a){return mix(x, y, a);} //!< \brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) template GLM_FUNC_QUALIFIER vec<4, T, Q> lerp(const vec<4, T, Q>& x, const vec<4, T, Q>& y, const vec<4, T, Q>& a){return mix(x, y, a);} //!< \brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) template GLM_FUNC_QUALIFIER T saturate(T x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) template GLM_FUNC_QUALIFIER vec<2, T, Q> saturate(const vec<2, T, Q>& x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) template GLM_FUNC_QUALIFIER vec<3, T, Q> saturate(const vec<3, T, Q>& x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) template GLM_FUNC_QUALIFIER vec<4, T, Q> saturate(const vec<4, T, Q>& x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) template GLM_FUNC_QUALIFIER T atan2(T x, T y){return atan(x, y);} //!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) template GLM_FUNC_QUALIFIER vec<2, T, Q> atan2(const vec<2, T, Q>& x, const vec<2, T, Q>& y){return atan(x, y);} //!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) template GLM_FUNC_QUALIFIER vec<3, T, Q> atan2(const vec<3, T, Q>& x, const vec<3, T, Q>& y){return atan(x, y);} //!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) template GLM_FUNC_QUALIFIER vec<4, T, Q> atan2(const vec<4, T, Q>& x, const vec<4, T, Q>& y){return atan(x, y);} //!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) template GLM_FUNC_DECL bool isfinite(genType const& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) template GLM_FUNC_DECL vec<1, bool, Q> isfinite(const vec<1, T, Q>& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) template GLM_FUNC_DECL vec<2, bool, Q> isfinite(const vec<2, T, Q>& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) template GLM_FUNC_DECL vec<3, bool, Q> isfinite(const vec<3, T, Q>& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) template GLM_FUNC_DECL vec<4, bool, Q> isfinite(const vec<4, T, Q>& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) typedef bool bool1; //!< \brief boolean type with 1 component. (From GLM_GTX_compatibility extension) typedef vec<2, bool, highp> bool2; //!< \brief boolean type with 2 components. (From GLM_GTX_compatibility extension) typedef vec<3, bool, highp> bool3; //!< \brief boolean type with 3 components. (From GLM_GTX_compatibility extension) typedef vec<4, bool, highp> bool4; //!< \brief boolean type with 4 components. (From GLM_GTX_compatibility extension) typedef bool bool1x1; //!< \brief boolean matrix with 1 x 1 component. (From GLM_GTX_compatibility extension) typedef mat<2, 2, bool, highp> bool2x2; //!< \brief boolean matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) typedef mat<2, 3, bool, highp> bool2x3; //!< \brief boolean matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) typedef mat<2, 4, bool, highp> bool2x4; //!< \brief boolean matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) typedef mat<3, 2, bool, highp> bool3x2; //!< \brief boolean matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) typedef mat<3, 3, bool, highp> bool3x3; //!< \brief boolean matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) typedef mat<3, 4, bool, highp> bool3x4; //!< \brief boolean matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) typedef mat<4, 2, bool, highp> bool4x2; //!< \brief boolean matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) typedef mat<4, 3, bool, highp> bool4x3; //!< \brief boolean matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) typedef mat<4, 4, bool, highp> bool4x4; //!< \brief boolean matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) typedef int int1; //!< \brief integer vector with 1 component. (From GLM_GTX_compatibility extension) typedef vec<2, int, highp> int2; //!< \brief integer vector with 2 components. (From GLM_GTX_compatibility extension) typedef vec<3, int, highp> int3; //!< \brief integer vector with 3 components. (From GLM_GTX_compatibility extension) typedef vec<4, int, highp> int4; //!< \brief integer vector with 4 components. (From GLM_GTX_compatibility extension) typedef int int1x1; //!< \brief integer matrix with 1 component. (From GLM_GTX_compatibility extension) typedef mat<2, 2, int, highp> int2x2; //!< \brief integer matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) typedef mat<2, 3, int, highp> int2x3; //!< \brief integer matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) typedef mat<2, 4, int, highp> int2x4; //!< \brief integer matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) typedef mat<3, 2, int, highp> int3x2; //!< \brief integer matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) typedef mat<3, 3, int, highp> int3x3; //!< \brief integer matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) typedef mat<3, 4, int, highp> int3x4; //!< \brief integer matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) typedef mat<4, 2, int, highp> int4x2; //!< \brief integer matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) typedef mat<4, 3, int, highp> int4x3; //!< \brief integer matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) typedef mat<4, 4, int, highp> int4x4; //!< \brief integer matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) typedef float float1; //!< \brief single-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension) typedef vec<2, float, highp> float2; //!< \brief single-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension) typedef vec<3, float, highp> float3; //!< \brief single-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension) typedef vec<4, float, highp> float4; //!< \brief single-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension) typedef float float1x1; //!< \brief single-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) typedef mat<2, 2, float, highp> float2x2; //!< \brief single-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) typedef mat<2, 3, float, highp> float2x3; //!< \brief single-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) typedef mat<2, 4, float, highp> float2x4; //!< \brief single-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) typedef mat<3, 2, float, highp> float3x2; //!< \brief single-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) typedef mat<3, 3, float, highp> float3x3; //!< \brief single-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) typedef mat<3, 4, float, highp> float3x4; //!< \brief single-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) typedef mat<4, 2, float, highp> float4x2; //!< \brief single-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) typedef mat<4, 3, float, highp> float4x3; //!< \brief single-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) typedef mat<4, 4, float, highp> float4x4; //!< \brief single-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) typedef double double1; //!< \brief double-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension) typedef vec<2, double, highp> double2; //!< \brief double-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension) typedef vec<3, double, highp> double3; //!< \brief double-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension) typedef vec<4, double, highp> double4; //!< \brief double-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension) typedef double double1x1; //!< \brief double-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) typedef mat<2, 2, double, highp> double2x2; //!< \brief double-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) typedef mat<2, 3, double, highp> double2x3; //!< \brief double-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) typedef mat<2, 4, double, highp> double2x4; //!< \brief double-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) typedef mat<3, 2, double, highp> double3x2; //!< \brief double-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) typedef mat<3, 3, double, highp> double3x3; //!< \brief double-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) typedef mat<3, 4, double, highp> double3x4; //!< \brief double-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) typedef mat<4, 2, double, highp> double4x2; //!< \brief double-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) typedef mat<4, 3, double, highp> double4x3; //!< \brief double-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) typedef mat<4, 4, double, highp> double4x4; //!< \brief double-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) /// @} }//namespace glm #include "compatibility.inl" ================================================ FILE: libraries/glm/gtx/compatibility.inl ================================================ #include namespace glm { // isfinite template GLM_FUNC_QUALIFIER bool isfinite( genType const& x) { # if GLM_HAS_CXX11_STL return std::isfinite(x) != 0; # elif GLM_COMPILER & GLM_COMPILER_VC return _finite(x) != 0; # elif GLM_COMPILER & GLM_COMPILER_GCC && GLM_PLATFORM & GLM_PLATFORM_ANDROID return _isfinite(x) != 0; # else if (std::numeric_limits::is_integer || std::denorm_absent == std::numeric_limits::has_denorm) return std::numeric_limits::min() <= x && std::numeric_limits::max() >= x; else return -std::numeric_limits::max() <= x && std::numeric_limits::max() >= x; # endif } template GLM_FUNC_QUALIFIER vec<1, bool, Q> isfinite( vec<1, T, Q> const& x) { return vec<1, bool, Q>( isfinite(x.x)); } template GLM_FUNC_QUALIFIER vec<2, bool, Q> isfinite( vec<2, T, Q> const& x) { return vec<2, bool, Q>( isfinite(x.x), isfinite(x.y)); } template GLM_FUNC_QUALIFIER vec<3, bool, Q> isfinite( vec<3, T, Q> const& x) { return vec<3, bool, Q>( isfinite(x.x), isfinite(x.y), isfinite(x.z)); } template GLM_FUNC_QUALIFIER vec<4, bool, Q> isfinite( vec<4, T, Q> const& x) { return vec<4, bool, Q>( isfinite(x.x), isfinite(x.y), isfinite(x.z), isfinite(x.w)); } }//namespace glm ================================================ FILE: libraries/glm/gtx/component_wise.hpp ================================================ /// @ref gtx_component_wise /// @file glm/gtx/component_wise.hpp /// @date 2007-05-21 / 2011-06-07 /// @author Christophe Riccio /// /// @see core (dependence) /// /// @defgroup gtx_component_wise GLM_GTX_component_wise /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Operations between components of a type #pragma once // Dependencies #include "../detail/setup.hpp" #include "../detail/qualifier.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_component_wise is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_component_wise extension included") # endif #endif namespace glm { /// @addtogroup gtx_component_wise /// @{ /// Convert an integer vector to a normalized float vector. /// If the parameter value type is already a floating qualifier type, the value is passed through. /// @see gtx_component_wise template GLM_FUNC_DECL vec compNormalize(vec const& v); /// Convert a normalized float vector to an integer vector. /// If the parameter value type is already a floating qualifier type, the value is passed through. /// @see gtx_component_wise template GLM_FUNC_DECL vec compScale(vec const& v); /// Add all vector components together. /// @see gtx_component_wise template GLM_FUNC_DECL typename genType::value_type compAdd(genType const& v); /// Multiply all vector components together. /// @see gtx_component_wise template GLM_FUNC_DECL typename genType::value_type compMul(genType const& v); /// Find the minimum value between single vector components. /// @see gtx_component_wise template GLM_FUNC_DECL typename genType::value_type compMin(genType const& v); /// Find the maximum value between single vector components. /// @see gtx_component_wise template GLM_FUNC_DECL typename genType::value_type compMax(genType const& v); /// @} }//namespace glm #include "component_wise.inl" ================================================ FILE: libraries/glm/gtx/component_wise.inl ================================================ /// @ref gtx_component_wise #include namespace glm{ namespace detail { template struct compute_compNormalize {}; template struct compute_compNormalize { GLM_FUNC_QUALIFIER static vec call(vec const& v) { floatType const Min = static_cast(std::numeric_limits::min()); floatType const Max = static_cast(std::numeric_limits::max()); return (vec(v) - Min) / (Max - Min) * static_cast(2) - static_cast(1); } }; template struct compute_compNormalize { GLM_FUNC_QUALIFIER static vec call(vec const& v) { return vec(v) / static_cast(std::numeric_limits::max()); } }; template struct compute_compNormalize { GLM_FUNC_QUALIFIER static vec call(vec const& v) { return v; } }; template struct compute_compScale {}; template struct compute_compScale { GLM_FUNC_QUALIFIER static vec call(vec const& v) { floatType const Max = static_cast(std::numeric_limits::max()) + static_cast(0.5); vec const Scaled(v * Max); vec const Result(Scaled - static_cast(0.5)); return Result; } }; template struct compute_compScale { GLM_FUNC_QUALIFIER static vec call(vec const& v) { return vec(vec(v) * static_cast(std::numeric_limits::max())); } }; template struct compute_compScale { GLM_FUNC_QUALIFIER static vec call(vec const& v) { return v; } }; }//namespace detail template GLM_FUNC_QUALIFIER vec compNormalize(vec const& v) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'compNormalize' accepts only floating-point types for 'floatType' template parameter"); return detail::compute_compNormalize::is_integer, std::numeric_limits::is_signed>::call(v); } template GLM_FUNC_QUALIFIER vec compScale(vec const& v) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'compScale' accepts only floating-point types for 'floatType' template parameter"); return detail::compute_compScale::is_integer, std::numeric_limits::is_signed>::call(v); } template GLM_FUNC_QUALIFIER T compAdd(vec const& v) { T Result(0); for(length_t i = 0, n = v.length(); i < n; ++i) Result += v[i]; return Result; } template GLM_FUNC_QUALIFIER T compMul(vec const& v) { T Result(1); for(length_t i = 0, n = v.length(); i < n; ++i) Result *= v[i]; return Result; } template GLM_FUNC_QUALIFIER T compMin(vec const& v) { T Result(v[0]); for(length_t i = 1, n = v.length(); i < n; ++i) Result = min(Result, v[i]); return Result; } template GLM_FUNC_QUALIFIER T compMax(vec const& v) { T Result(v[0]); for(length_t i = 1, n = v.length(); i < n; ++i) Result = max(Result, v[i]); return Result; } }//namespace glm ================================================ FILE: libraries/glm/gtx/dual_quaternion.hpp ================================================ /// @ref gtx_dual_quaternion /// @file glm/gtx/dual_quaternion.hpp /// @author Maksim Vorobiev (msomeone@gmail.com) /// /// @see core (dependence) /// @see gtc_constants (dependence) /// @see gtc_quaternion (dependence) /// /// @defgroup gtx_dual_quaternion GLM_GTX_dual_quaternion /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Defines a templated dual-quaternion type and several dual-quaternion operations. #pragma once // Dependency: #include "../glm.hpp" #include "../gtc/constants.hpp" #include "../gtc/quaternion.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_dual_quaternion is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_dual_quaternion extension included") # endif #endif namespace glm { /// @addtogroup gtx_dual_quaternion /// @{ template struct tdualquat { // -- Implementation detail -- typedef T value_type; typedef qua part_type; // -- Data -- qua real, dual; // -- Component accesses -- typedef length_t length_type; /// Return the count of components of a dual quaternion GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 2;} GLM_FUNC_DECL part_type & operator[](length_type i); GLM_FUNC_DECL part_type const& operator[](length_type i) const; // -- Implicit basic constructors -- GLM_FUNC_DECL GLM_CONSTEXPR tdualquat() GLM_DEFAULT; GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tdualquat const& d) GLM_DEFAULT; template GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tdualquat const& d); // -- Explicit basic constructors -- GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua const& real); GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua const& orientation, vec<3, T, Q> const& translation); GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua const& real, qua const& dual); // -- Conversion constructors -- template GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tdualquat(tdualquat const& q); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR tdualquat(mat<2, 4, T, Q> const& holder_mat); GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR tdualquat(mat<3, 4, T, Q> const& aug_mat); // -- Unary arithmetic operators -- GLM_FUNC_DECL tdualquat & operator=(tdualquat const& m) GLM_DEFAULT; template GLM_FUNC_DECL tdualquat & operator=(tdualquat const& m); template GLM_FUNC_DECL tdualquat & operator*=(U s); template GLM_FUNC_DECL tdualquat & operator/=(U s); }; // -- Unary bit operators -- template GLM_FUNC_DECL tdualquat operator+(tdualquat const& q); template GLM_FUNC_DECL tdualquat operator-(tdualquat const& q); // -- Binary operators -- template GLM_FUNC_DECL tdualquat operator+(tdualquat const& q, tdualquat const& p); template GLM_FUNC_DECL tdualquat operator*(tdualquat const& q, tdualquat const& p); template GLM_FUNC_DECL vec<3, T, Q> operator*(tdualquat const& q, vec<3, T, Q> const& v); template GLM_FUNC_DECL vec<3, T, Q> operator*(vec<3, T, Q> const& v, tdualquat const& q); template GLM_FUNC_DECL vec<4, T, Q> operator*(tdualquat const& q, vec<4, T, Q> const& v); template GLM_FUNC_DECL vec<4, T, Q> operator*(vec<4, T, Q> const& v, tdualquat const& q); template GLM_FUNC_DECL tdualquat operator*(tdualquat const& q, T const& s); template GLM_FUNC_DECL tdualquat operator*(T const& s, tdualquat const& q); template GLM_FUNC_DECL tdualquat operator/(tdualquat const& q, T const& s); // -- Boolean operators -- template GLM_FUNC_DECL bool operator==(tdualquat const& q1, tdualquat const& q2); template GLM_FUNC_DECL bool operator!=(tdualquat const& q1, tdualquat const& q2); /// Creates an identity dual quaternion. /// /// @see gtx_dual_quaternion template GLM_FUNC_DECL tdualquat dual_quat_identity(); /// Returns the normalized quaternion. /// /// @see gtx_dual_quaternion template GLM_FUNC_DECL tdualquat normalize(tdualquat const& q); /// Returns the linear interpolation of two dual quaternion. /// /// @see gtc_dual_quaternion template GLM_FUNC_DECL tdualquat lerp(tdualquat const& x, tdualquat const& y, T const& a); /// Returns the q inverse. /// /// @see gtx_dual_quaternion template GLM_FUNC_DECL tdualquat inverse(tdualquat const& q); /// Converts a quaternion to a 2 * 4 matrix. /// /// @see gtx_dual_quaternion template GLM_FUNC_DECL mat<2, 4, T, Q> mat2x4_cast(tdualquat const& x); /// Converts a quaternion to a 3 * 4 matrix. /// /// @see gtx_dual_quaternion template GLM_FUNC_DECL mat<3, 4, T, Q> mat3x4_cast(tdualquat const& x); /// Converts a 2 * 4 matrix (matrix which holds real and dual parts) to a quaternion. /// /// @see gtx_dual_quaternion template GLM_FUNC_DECL tdualquat dualquat_cast(mat<2, 4, T, Q> const& x); /// Converts a 3 * 4 matrix (augmented matrix rotation + translation) to a quaternion. /// /// @see gtx_dual_quaternion template GLM_FUNC_DECL tdualquat dualquat_cast(mat<3, 4, T, Q> const& x); /// Dual-quaternion of low single-qualifier floating-point numbers. /// /// @see gtx_dual_quaternion typedef tdualquat lowp_dualquat; /// Dual-quaternion of medium single-qualifier floating-point numbers. /// /// @see gtx_dual_quaternion typedef tdualquat mediump_dualquat; /// Dual-quaternion of high single-qualifier floating-point numbers. /// /// @see gtx_dual_quaternion typedef tdualquat highp_dualquat; /// Dual-quaternion of low single-qualifier floating-point numbers. /// /// @see gtx_dual_quaternion typedef tdualquat lowp_fdualquat; /// Dual-quaternion of medium single-qualifier floating-point numbers. /// /// @see gtx_dual_quaternion typedef tdualquat mediump_fdualquat; /// Dual-quaternion of high single-qualifier floating-point numbers. /// /// @see gtx_dual_quaternion typedef tdualquat highp_fdualquat; /// Dual-quaternion of low double-qualifier floating-point numbers. /// /// @see gtx_dual_quaternion typedef tdualquat lowp_ddualquat; /// Dual-quaternion of medium double-qualifier floating-point numbers. /// /// @see gtx_dual_quaternion typedef tdualquat mediump_ddualquat; /// Dual-quaternion of high double-qualifier floating-point numbers. /// /// @see gtx_dual_quaternion typedef tdualquat highp_ddualquat; #if(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT)) /// Dual-quaternion of floating-point numbers. /// /// @see gtx_dual_quaternion typedef highp_fdualquat dualquat; /// Dual-quaternion of single-qualifier floating-point numbers. /// /// @see gtx_dual_quaternion typedef highp_fdualquat fdualquat; #elif(defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT)) typedef highp_fdualquat dualquat; typedef highp_fdualquat fdualquat; #elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT)) typedef mediump_fdualquat dualquat; typedef mediump_fdualquat fdualquat; #elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && defined(GLM_PRECISION_LOWP_FLOAT)) typedef lowp_fdualquat dualquat; typedef lowp_fdualquat fdualquat; #else # error "GLM error: multiple default precision requested for single-precision floating-point types" #endif #if(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE)) /// Dual-quaternion of default double-qualifier floating-point numbers. /// /// @see gtx_dual_quaternion typedef highp_ddualquat ddualquat; #elif(defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE)) typedef highp_ddualquat ddualquat; #elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE)) typedef mediump_ddualquat ddualquat; #elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && defined(GLM_PRECISION_LOWP_DOUBLE)) typedef lowp_ddualquat ddualquat; #else # error "GLM error: Multiple default precision requested for double-precision floating-point types" #endif /// @} } //namespace glm #include "dual_quaternion.inl" ================================================ FILE: libraries/glm/gtx/dual_quaternion.inl ================================================ /// @ref gtx_dual_quaternion #include "../geometric.hpp" #include namespace glm { // -- Component accesses -- template GLM_FUNC_QUALIFIER typename tdualquat::part_type & tdualquat::operator[](typename tdualquat::length_type i) { assert(i >= 0 && i < this->length()); return (&real)[i]; } template GLM_FUNC_QUALIFIER typename tdualquat::part_type const& tdualquat::operator[](typename tdualquat::length_type i) const { assert(i >= 0 && i < this->length()); return (&real)[i]; } // -- Implicit basic constructors -- # if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE template GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat() # if GLM_CONFIG_DEFAULTED_FUNCTIONS != GLM_DISABLE : real(qua()) , dual(qua(0, 0, 0, 0)) # endif {} template GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(tdualquat const& d) : real(d.real) , dual(d.dual) {} # endif template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(tdualquat const& d) : real(d.real) , dual(d.dual) {} // -- Explicit basic constructors -- template GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(qua const& r) : real(r), dual(qua(0, 0, 0, 0)) {} template GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(qua const& q, vec<3, T, Q> const& p) : real(q), dual( T(-0.5) * ( p.x*q.x + p.y*q.y + p.z*q.z), T(+0.5) * ( p.x*q.w + p.y*q.z - p.z*q.y), T(+0.5) * (-p.x*q.z + p.y*q.w + p.z*q.x), T(+0.5) * ( p.x*q.y - p.y*q.x + p.z*q.w)) {} template GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(qua const& r, qua const& d) : real(r), dual(d) {} // -- Conversion constructors -- template template GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(tdualquat const& q) : real(q.real) , dual(q.dual) {} template GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(mat<2, 4, T, Q> const& m) { *this = dualquat_cast(m); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(mat<3, 4, T, Q> const& m) { *this = dualquat_cast(m); } // -- Unary arithmetic operators -- # if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE template GLM_FUNC_QUALIFIER tdualquat & tdualquat::operator=(tdualquat const& q) { this->real = q.real; this->dual = q.dual; return *this; } # endif template template GLM_FUNC_QUALIFIER tdualquat & tdualquat::operator=(tdualquat const& q) { this->real = q.real; this->dual = q.dual; return *this; } template template GLM_FUNC_QUALIFIER tdualquat & tdualquat::operator*=(U s) { this->real *= static_cast(s); this->dual *= static_cast(s); return *this; } template template GLM_FUNC_QUALIFIER tdualquat & tdualquat::operator/=(U s) { this->real /= static_cast(s); this->dual /= static_cast(s); return *this; } // -- Unary bit operators -- template GLM_FUNC_QUALIFIER tdualquat operator+(tdualquat const& q) { return q; } template GLM_FUNC_QUALIFIER tdualquat operator-(tdualquat const& q) { return tdualquat(-q.real, -q.dual); } // -- Binary operators -- template GLM_FUNC_QUALIFIER tdualquat operator+(tdualquat const& q, tdualquat const& p) { return tdualquat(q.real + p.real,q.dual + p.dual); } template GLM_FUNC_QUALIFIER tdualquat operator*(tdualquat const& p, tdualquat const& o) { return tdualquat(p.real * o.real,p.real * o.dual + p.dual * o.real); } template GLM_FUNC_QUALIFIER vec<3, T, Q> operator*(tdualquat const& q, vec<3, T, Q> const& v) { vec<3, T, Q> const real_v3(q.real.x,q.real.y,q.real.z); vec<3, T, Q> const dual_v3(q.dual.x,q.dual.y,q.dual.z); return (cross(real_v3, cross(real_v3,v) + v * q.real.w + dual_v3) + dual_v3 * q.real.w - real_v3 * q.dual.w) * T(2) + v; } template GLM_FUNC_QUALIFIER vec<3, T, Q> operator*(vec<3, T, Q> const& v, tdualquat const& q) { return glm::inverse(q) * v; } template GLM_FUNC_QUALIFIER vec<4, T, Q> operator*(tdualquat const& q, vec<4, T, Q> const& v) { return vec<4, T, Q>(q * vec<3, T, Q>(v), v.w); } template GLM_FUNC_QUALIFIER vec<4, T, Q> operator*(vec<4, T, Q> const& v, tdualquat const& q) { return glm::inverse(q) * v; } template GLM_FUNC_QUALIFIER tdualquat operator*(tdualquat const& q, T const& s) { return tdualquat(q.real * s, q.dual * s); } template GLM_FUNC_QUALIFIER tdualquat operator*(T const& s, tdualquat const& q) { return q * s; } template GLM_FUNC_QUALIFIER tdualquat operator/(tdualquat const& q, T const& s) { return tdualquat(q.real / s, q.dual / s); } // -- Boolean operators -- template GLM_FUNC_QUALIFIER bool operator==(tdualquat const& q1, tdualquat const& q2) { return (q1.real == q2.real) && (q1.dual == q2.dual); } template GLM_FUNC_QUALIFIER bool operator!=(tdualquat const& q1, tdualquat const& q2) { return (q1.real != q2.real) || (q1.dual != q2.dual); } // -- Operations -- template GLM_FUNC_QUALIFIER tdualquat dual_quat_identity() { return tdualquat( qua(static_cast(1), static_cast(0), static_cast(0), static_cast(0)), qua(static_cast(0), static_cast(0), static_cast(0), static_cast(0))); } template GLM_FUNC_QUALIFIER tdualquat normalize(tdualquat const& q) { return q / length(q.real); } template GLM_FUNC_QUALIFIER tdualquat lerp(tdualquat const& x, tdualquat const& y, T const& a) { // Dual Quaternion Linear blend aka DLB: // Lerp is only defined in [0, 1] assert(a >= static_cast(0)); assert(a <= static_cast(1)); T const k = dot(x.real,y.real) < static_cast(0) ? -a : a; T const one(1); return tdualquat(x * (one - a) + y * k); } template GLM_FUNC_QUALIFIER tdualquat inverse(tdualquat const& q) { const glm::qua real = conjugate(q.real); const glm::qua dual = conjugate(q.dual); return tdualquat(real, dual + (real * (-2.0f * dot(real,dual)))); } template GLM_FUNC_QUALIFIER mat<2, 4, T, Q> mat2x4_cast(tdualquat const& x) { return mat<2, 4, T, Q>( x[0].x, x[0].y, x[0].z, x[0].w, x[1].x, x[1].y, x[1].z, x[1].w ); } template GLM_FUNC_QUALIFIER mat<3, 4, T, Q> mat3x4_cast(tdualquat const& x) { qua r = x.real / length2(x.real); qua const rr(r.w * x.real.w, r.x * x.real.x, r.y * x.real.y, r.z * x.real.z); r *= static_cast(2); T const xy = r.x * x.real.y; T const xz = r.x * x.real.z; T const yz = r.y * x.real.z; T const wx = r.w * x.real.x; T const wy = r.w * x.real.y; T const wz = r.w * x.real.z; vec<4, T, Q> const a( rr.w + rr.x - rr.y - rr.z, xy - wz, xz + wy, -(x.dual.w * r.x - x.dual.x * r.w + x.dual.y * r.z - x.dual.z * r.y)); vec<4, T, Q> const b( xy + wz, rr.w + rr.y - rr.x - rr.z, yz - wx, -(x.dual.w * r.y - x.dual.x * r.z - x.dual.y * r.w + x.dual.z * r.x)); vec<4, T, Q> const c( xz - wy, yz + wx, rr.w + rr.z - rr.x - rr.y, -(x.dual.w * r.z + x.dual.x * r.y - x.dual.y * r.x - x.dual.z * r.w)); return mat<3, 4, T, Q>(a, b, c); } template GLM_FUNC_QUALIFIER tdualquat dualquat_cast(mat<2, 4, T, Q> const& x) { return tdualquat( qua( x[0].w, x[0].x, x[0].y, x[0].z ), qua( x[1].w, x[1].x, x[1].y, x[1].z )); } template GLM_FUNC_QUALIFIER tdualquat dualquat_cast(mat<3, 4, T, Q> const& x) { qua real; T const trace = x[0].x + x[1].y + x[2].z; if(trace > static_cast(0)) { T const r = sqrt(T(1) + trace); T const invr = static_cast(0.5) / r; real.w = static_cast(0.5) * r; real.x = (x[2].y - x[1].z) * invr; real.y = (x[0].z - x[2].x) * invr; real.z = (x[1].x - x[0].y) * invr; } else if(x[0].x > x[1].y && x[0].x > x[2].z) { T const r = sqrt(T(1) + x[0].x - x[1].y - x[2].z); T const invr = static_cast(0.5) / r; real.x = static_cast(0.5)*r; real.y = (x[1].x + x[0].y) * invr; real.z = (x[0].z + x[2].x) * invr; real.w = (x[2].y - x[1].z) * invr; } else if(x[1].y > x[2].z) { T const r = sqrt(T(1) + x[1].y - x[0].x - x[2].z); T const invr = static_cast(0.5) / r; real.x = (x[1].x + x[0].y) * invr; real.y = static_cast(0.5) * r; real.z = (x[2].y + x[1].z) * invr; real.w = (x[0].z - x[2].x) * invr; } else { T const r = sqrt(T(1) + x[2].z - x[0].x - x[1].y); T const invr = static_cast(0.5) / r; real.x = (x[0].z + x[2].x) * invr; real.y = (x[2].y + x[1].z) * invr; real.z = static_cast(0.5) * r; real.w = (x[1].x - x[0].y) * invr; } qua dual; dual.x = static_cast(0.5) * ( x[0].w * real.w + x[1].w * real.z - x[2].w * real.y); dual.y = static_cast(0.5) * (-x[0].w * real.z + x[1].w * real.w + x[2].w * real.x); dual.z = static_cast(0.5) * ( x[0].w * real.y - x[1].w * real.x + x[2].w * real.w); dual.w = -static_cast(0.5) * ( x[0].w * real.x + x[1].w * real.y + x[2].w * real.z); return tdualquat(real, dual); } }//namespace glm ================================================ FILE: libraries/glm/gtx/easing.hpp ================================================ /// @ref gtx_easing /// @file glm/gtx/easing.hpp /// @author Robert Chisholm /// /// @see core (dependence) /// /// @defgroup gtx_easing GLM_GTX_easing /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Easing functions for animations and transitons /// All functions take a parameter x in the range [0.0,1.0] /// /// Based on the AHEasing project of Warren Moore (https://github.com/warrenm/AHEasing) #pragma once // Dependency: #include "../glm.hpp" #include "../gtc/constants.hpp" #include "../detail/qualifier.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_easing is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_easing extension included") # endif #endif namespace glm{ /// @addtogroup gtx_easing /// @{ /// Modelled after the line y = x /// @see gtx_easing template GLM_FUNC_DECL genType linearInterpolation(genType const & a); /// Modelled after the parabola y = x^2 /// @see gtx_easing template GLM_FUNC_DECL genType quadraticEaseIn(genType const & a); /// Modelled after the parabola y = -x^2 + 2x /// @see gtx_easing template GLM_FUNC_DECL genType quadraticEaseOut(genType const & a); /// Modelled after the piecewise quadratic /// y = (1/2)((2x)^2) ; [0, 0.5) /// y = -(1/2)((2x-1)*(2x-3) - 1) ; [0.5, 1] /// @see gtx_easing template GLM_FUNC_DECL genType quadraticEaseInOut(genType const & a); /// Modelled after the cubic y = x^3 template GLM_FUNC_DECL genType cubicEaseIn(genType const & a); /// Modelled after the cubic y = (x - 1)^3 + 1 /// @see gtx_easing template GLM_FUNC_DECL genType cubicEaseOut(genType const & a); /// Modelled after the piecewise cubic /// y = (1/2)((2x)^3) ; [0, 0.5) /// y = (1/2)((2x-2)^3 + 2) ; [0.5, 1] /// @see gtx_easing template GLM_FUNC_DECL genType cubicEaseInOut(genType const & a); /// Modelled after the quartic x^4 /// @see gtx_easing template GLM_FUNC_DECL genType quarticEaseIn(genType const & a); /// Modelled after the quartic y = 1 - (x - 1)^4 /// @see gtx_easing template GLM_FUNC_DECL genType quarticEaseOut(genType const & a); /// Modelled after the piecewise quartic /// y = (1/2)((2x)^4) ; [0, 0.5) /// y = -(1/2)((2x-2)^4 - 2) ; [0.5, 1] /// @see gtx_easing template GLM_FUNC_DECL genType quarticEaseInOut(genType const & a); /// Modelled after the quintic y = x^5 /// @see gtx_easing template GLM_FUNC_DECL genType quinticEaseIn(genType const & a); /// Modelled after the quintic y = (x - 1)^5 + 1 /// @see gtx_easing template GLM_FUNC_DECL genType quinticEaseOut(genType const & a); /// Modelled after the piecewise quintic /// y = (1/2)((2x)^5) ; [0, 0.5) /// y = (1/2)((2x-2)^5 + 2) ; [0.5, 1] /// @see gtx_easing template GLM_FUNC_DECL genType quinticEaseInOut(genType const & a); /// Modelled after quarter-cycle of sine wave /// @see gtx_easing template GLM_FUNC_DECL genType sineEaseIn(genType const & a); /// Modelled after quarter-cycle of sine wave (different phase) /// @see gtx_easing template GLM_FUNC_DECL genType sineEaseOut(genType const & a); /// Modelled after half sine wave /// @see gtx_easing template GLM_FUNC_DECL genType sineEaseInOut(genType const & a); /// Modelled after shifted quadrant IV of unit circle /// @see gtx_easing template GLM_FUNC_DECL genType circularEaseIn(genType const & a); /// Modelled after shifted quadrant II of unit circle /// @see gtx_easing template GLM_FUNC_DECL genType circularEaseOut(genType const & a); /// Modelled after the piecewise circular function /// y = (1/2)(1 - sqrt(1 - 4x^2)) ; [0, 0.5) /// y = (1/2)(sqrt(-(2x - 3)*(2x - 1)) + 1) ; [0.5, 1] /// @see gtx_easing template GLM_FUNC_DECL genType circularEaseInOut(genType const & a); /// Modelled after the exponential function y = 2^(10(x - 1)) /// @see gtx_easing template GLM_FUNC_DECL genType exponentialEaseIn(genType const & a); /// Modelled after the exponential function y = -2^(-10x) + 1 /// @see gtx_easing template GLM_FUNC_DECL genType exponentialEaseOut(genType const & a); /// Modelled after the piecewise exponential /// y = (1/2)2^(10(2x - 1)) ; [0,0.5) /// y = -(1/2)*2^(-10(2x - 1))) + 1 ; [0.5,1] /// @see gtx_easing template GLM_FUNC_DECL genType exponentialEaseInOut(genType const & a); /// Modelled after the damped sine wave y = sin(13pi/2*x)*pow(2, 10 * (x - 1)) /// @see gtx_easing template GLM_FUNC_DECL genType elasticEaseIn(genType const & a); /// Modelled after the damped sine wave y = sin(-13pi/2*(x + 1))*pow(2, -10x) + 1 /// @see gtx_easing template GLM_FUNC_DECL genType elasticEaseOut(genType const & a); /// Modelled after the piecewise exponentially-damped sine wave: /// y = (1/2)*sin(13pi/2*(2*x))*pow(2, 10 * ((2*x) - 1)) ; [0,0.5) /// y = (1/2)*(sin(-13pi/2*((2x-1)+1))*pow(2,-10(2*x-1)) + 2) ; [0.5, 1] /// @see gtx_easing template GLM_FUNC_DECL genType elasticEaseInOut(genType const & a); /// @see gtx_easing template GLM_FUNC_DECL genType backEaseIn(genType const& a); /// @see gtx_easing template GLM_FUNC_DECL genType backEaseOut(genType const& a); /// @see gtx_easing template GLM_FUNC_DECL genType backEaseInOut(genType const& a); /// @param a parameter /// @param o Optional overshoot modifier /// @see gtx_easing template GLM_FUNC_DECL genType backEaseIn(genType const& a, genType const& o); /// @param a parameter /// @param o Optional overshoot modifier /// @see gtx_easing template GLM_FUNC_DECL genType backEaseOut(genType const& a, genType const& o); /// @param a parameter /// @param o Optional overshoot modifier /// @see gtx_easing template GLM_FUNC_DECL genType backEaseInOut(genType const& a, genType const& o); /// @see gtx_easing template GLM_FUNC_DECL genType bounceEaseIn(genType const& a); /// @see gtx_easing template GLM_FUNC_DECL genType bounceEaseOut(genType const& a); /// @see gtx_easing template GLM_FUNC_DECL genType bounceEaseInOut(genType const& a); /// @} }//namespace glm #include "easing.inl" ================================================ FILE: libraries/glm/gtx/easing.inl ================================================ /// @ref gtx_easing #include namespace glm{ template GLM_FUNC_QUALIFIER genType linearInterpolation(genType const& a) { // Only defined in [0, 1] assert(a >= zero()); assert(a <= one()); return a; } template GLM_FUNC_QUALIFIER genType quadraticEaseIn(genType const& a) { // Only defined in [0, 1] assert(a >= zero()); assert(a <= one()); return a * a; } template GLM_FUNC_QUALIFIER genType quadraticEaseOut(genType const& a) { // Only defined in [0, 1] assert(a >= zero()); assert(a <= one()); return -(a * (a - static_cast(2))); } template GLM_FUNC_QUALIFIER genType quadraticEaseInOut(genType const& a) { // Only defined in [0, 1] assert(a >= zero()); assert(a <= one()); if(a < static_cast(0.5)) { return static_cast(2) * a * a; } else { return (-static_cast(2) * a * a) + (4 * a) - one(); } } template GLM_FUNC_QUALIFIER genType cubicEaseIn(genType const& a) { // Only defined in [0, 1] assert(a >= zero()); assert(a <= one()); return a * a * a; } template GLM_FUNC_QUALIFIER genType cubicEaseOut(genType const& a) { // Only defined in [0, 1] assert(a >= zero()); assert(a <= one()); genType const f = a - one(); return f * f * f + one(); } template GLM_FUNC_QUALIFIER genType cubicEaseInOut(genType const& a) { // Only defined in [0, 1] assert(a >= zero()); assert(a <= one()); if (a < static_cast(0.5)) { return static_cast(4) * a * a * a; } else { genType const f = ((static_cast(2) * a) - static_cast(2)); return static_cast(0.5) * f * f * f + one(); } } template GLM_FUNC_QUALIFIER genType quarticEaseIn(genType const& a) { // Only defined in [0, 1] assert(a >= zero()); assert(a <= one()); return a * a * a * a; } template GLM_FUNC_QUALIFIER genType quarticEaseOut(genType const& a) { // Only defined in [0, 1] assert(a >= zero()); assert(a <= one()); genType const f = (a - one()); return f * f * f * (one() - a) + one(); } template GLM_FUNC_QUALIFIER genType quarticEaseInOut(genType const& a) { // Only defined in [0, 1] assert(a >= zero()); assert(a <= one()); if(a < static_cast(0.5)) { return static_cast(8) * a * a * a * a; } else { genType const f = (a - one()); return -static_cast(8) * f * f * f * f + one(); } } template GLM_FUNC_QUALIFIER genType quinticEaseIn(genType const& a) { // Only defined in [0, 1] assert(a >= zero()); assert(a <= one()); return a * a * a * a * a; } template GLM_FUNC_QUALIFIER genType quinticEaseOut(genType const& a) { // Only defined in [0, 1] assert(a >= zero()); assert(a <= one()); genType const f = (a - one()); return f * f * f * f * f + one(); } template GLM_FUNC_QUALIFIER genType quinticEaseInOut(genType const& a) { // Only defined in [0, 1] assert(a >= zero()); assert(a <= one()); if(a < static_cast(0.5)) { return static_cast(16) * a * a * a * a * a; } else { genType const f = ((static_cast(2) * a) - static_cast(2)); return static_cast(0.5) * f * f * f * f * f + one(); } } template GLM_FUNC_QUALIFIER genType sineEaseIn(genType const& a) { // Only defined in [0, 1] assert(a >= zero()); assert(a <= one()); return sin((a - one()) * half_pi()) + one(); } template GLM_FUNC_QUALIFIER genType sineEaseOut(genType const& a) { // Only defined in [0, 1] assert(a >= zero()); assert(a <= one()); return sin(a * half_pi()); } template GLM_FUNC_QUALIFIER genType sineEaseInOut(genType const& a) { // Only defined in [0, 1] assert(a >= zero()); assert(a <= one()); return static_cast(0.5) * (one() - cos(a * pi())); } template GLM_FUNC_QUALIFIER genType circularEaseIn(genType const& a) { // Only defined in [0, 1] assert(a >= zero()); assert(a <= one()); return one() - sqrt(one() - (a * a)); } template GLM_FUNC_QUALIFIER genType circularEaseOut(genType const& a) { // Only defined in [0, 1] assert(a >= zero()); assert(a <= one()); return sqrt((static_cast(2) - a) * a); } template GLM_FUNC_QUALIFIER genType circularEaseInOut(genType const& a) { // Only defined in [0, 1] assert(a >= zero()); assert(a <= one()); if(a < static_cast(0.5)) { return static_cast(0.5) * (one() - std::sqrt(one() - static_cast(4) * (a * a))); } else { return static_cast(0.5) * (std::sqrt(-((static_cast(2) * a) - static_cast(3)) * ((static_cast(2) * a) - one())) + one()); } } template GLM_FUNC_QUALIFIER genType exponentialEaseIn(genType const& a) { // Only defined in [0, 1] assert(a >= zero()); assert(a <= one()); if(a <= zero()) return a; else { genType const Complementary = a - one(); genType const Two = static_cast(2); return glm::pow(Two, Complementary * static_cast(10)); } } template GLM_FUNC_QUALIFIER genType exponentialEaseOut(genType const& a) { // Only defined in [0, 1] assert(a >= zero()); assert(a <= one()); if(a >= one()) return a; else { return one() - glm::pow(static_cast(2), -static_cast(10) * a); } } template GLM_FUNC_QUALIFIER genType exponentialEaseInOut(genType const& a) { // Only defined in [0, 1] assert(a >= zero()); assert(a <= one()); if(a < static_cast(0.5)) return static_cast(0.5) * glm::pow(static_cast(2), (static_cast(20) * a) - static_cast(10)); else return -static_cast(0.5) * glm::pow(static_cast(2), (-static_cast(20) * a) + static_cast(10)) + one(); } template GLM_FUNC_QUALIFIER genType elasticEaseIn(genType const& a) { // Only defined in [0, 1] assert(a >= zero()); assert(a <= one()); return std::sin(static_cast(13) * half_pi() * a) * glm::pow(static_cast(2), static_cast(10) * (a - one())); } template GLM_FUNC_QUALIFIER genType elasticEaseOut(genType const& a) { // Only defined in [0, 1] assert(a >= zero()); assert(a <= one()); return std::sin(-static_cast(13) * half_pi() * (a + one())) * glm::pow(static_cast(2), -static_cast(10) * a) + one(); } template GLM_FUNC_QUALIFIER genType elasticEaseInOut(genType const& a) { // Only defined in [0, 1] assert(a >= zero()); assert(a <= one()); if(a < static_cast(0.5)) return static_cast(0.5) * std::sin(static_cast(13) * half_pi() * (static_cast(2) * a)) * glm::pow(static_cast(2), static_cast(10) * ((static_cast(2) * a) - one())); else return static_cast(0.5) * (std::sin(-static_cast(13) * half_pi() * ((static_cast(2) * a - one()) + one())) * glm::pow(static_cast(2), -static_cast(10) * (static_cast(2) * a - one())) + static_cast(2)); } template GLM_FUNC_QUALIFIER genType backEaseIn(genType const& a, genType const& o) { // Only defined in [0, 1] assert(a >= zero()); assert(a <= one()); genType z = ((o + one()) * a) - o; return (a * a * z); } template GLM_FUNC_QUALIFIER genType backEaseOut(genType const& a, genType const& o) { // Only defined in [0, 1] assert(a >= zero()); assert(a <= one()); genType n = a - one(); genType z = ((o + one()) * n) + o; return (n * n * z) + one(); } template GLM_FUNC_QUALIFIER genType backEaseInOut(genType const& a, genType const& o) { // Only defined in [0, 1] assert(a >= zero()); assert(a <= one()); genType s = o * static_cast(1.525); genType x = static_cast(0.5); genType n = a / static_cast(0.5); if (n < static_cast(1)) { genType z = ((s + static_cast(1)) * n) - s; genType m = n * n * z; return x * m; } else { n -= static_cast(2); genType z = ((s + static_cast(1)) * n) + s; genType m = (n*n*z) + static_cast(2); return x * m; } } template GLM_FUNC_QUALIFIER genType backEaseIn(genType const& a) { return backEaseIn(a, static_cast(1.70158)); } template GLM_FUNC_QUALIFIER genType backEaseOut(genType const& a) { return backEaseOut(a, static_cast(1.70158)); } template GLM_FUNC_QUALIFIER genType backEaseInOut(genType const& a) { return backEaseInOut(a, static_cast(1.70158)); } template GLM_FUNC_QUALIFIER genType bounceEaseOut(genType const& a) { // Only defined in [0, 1] assert(a >= zero()); assert(a <= one()); if(a < static_cast(4.0 / 11.0)) { return (static_cast(121) * a * a) / static_cast(16); } else if(a < static_cast(8.0 / 11.0)) { return (static_cast(363.0 / 40.0) * a * a) - (static_cast(99.0 / 10.0) * a) + static_cast(17.0 / 5.0); } else if(a < static_cast(9.0 / 10.0)) { return (static_cast(4356.0 / 361.0) * a * a) - (static_cast(35442.0 / 1805.0) * a) + static_cast(16061.0 / 1805.0); } else { return (static_cast(54.0 / 5.0) * a * a) - (static_cast(513.0 / 25.0) * a) + static_cast(268.0 / 25.0); } } template GLM_FUNC_QUALIFIER genType bounceEaseIn(genType const& a) { // Only defined in [0, 1] assert(a >= zero()); assert(a <= one()); return one() - bounceEaseOut(one() - a); } template GLM_FUNC_QUALIFIER genType bounceEaseInOut(genType const& a) { // Only defined in [0, 1] assert(a >= zero()); assert(a <= one()); if(a < static_cast(0.5)) { return static_cast(0.5) * (one() - bounceEaseOut(a * static_cast(2))); } else { return static_cast(0.5) * bounceEaseOut(a * static_cast(2) - one()) + static_cast(0.5); } } }//namespace glm ================================================ FILE: libraries/glm/gtx/euler_angles.hpp ================================================ /// @ref gtx_euler_angles /// @file glm/gtx/euler_angles.hpp /// /// @see core (dependence) /// /// @defgroup gtx_euler_angles GLM_GTX_euler_angles /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Build matrices from Euler angles. /// /// Extraction of Euler angles from rotation matrix. /// Based on the original paper 2014 Mike Day - Extracting Euler Angles from a Rotation Matrix. #pragma once // Dependency: #include "../glm.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_euler_angles is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_euler_angles extension included") # endif #endif namespace glm { /// @addtogroup gtx_euler_angles /// @{ /// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X. /// @see gtx_euler_angles template GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleX( T const& angleX); /// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y. /// @see gtx_euler_angles template GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleY( T const& angleY); /// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z. /// @see gtx_euler_angles template GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZ( T const& angleZ); /// Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about X-axis. /// @see gtx_euler_angles template GLM_FUNC_DECL mat<4, 4, T, defaultp> derivedEulerAngleX( T const & angleX, T const & angularVelocityX); /// Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Y-axis. /// @see gtx_euler_angles template GLM_FUNC_DECL mat<4, 4, T, defaultp> derivedEulerAngleY( T const & angleY, T const & angularVelocityY); /// Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Z-axis. /// @see gtx_euler_angles template GLM_FUNC_DECL mat<4, 4, T, defaultp> derivedEulerAngleZ( T const & angleZ, T const & angularVelocityZ); /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y). /// @see gtx_euler_angles template GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXY( T const& angleX, T const& angleY); /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X). /// @see gtx_euler_angles template GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYX( T const& angleY, T const& angleX); /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z). /// @see gtx_euler_angles template GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXZ( T const& angleX, T const& angleZ); /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X). /// @see gtx_euler_angles template GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZX( T const& angle, T const& angleX); /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z). /// @see gtx_euler_angles template GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYZ( T const& angleY, T const& angleZ); /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y). /// @see gtx_euler_angles template GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZY( T const& angleZ, T const& angleY); /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * Z). /// @see gtx_euler_angles template GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXYZ( T const& t1, T const& t2, T const& t3); /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). /// @see gtx_euler_angles template GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYXZ( T const& yaw, T const& pitch, T const& roll); /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * X). /// @see gtx_euler_angles template GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXZX( T const & t1, T const & t2, T const & t3); /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * X). /// @see gtx_euler_angles template GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXYX( T const & t1, T const & t2, T const & t3); /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Y). /// @see gtx_euler_angles template GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYXY( T const & t1, T const & t2, T const & t3); /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * Y). /// @see gtx_euler_angles template GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYZY( T const & t1, T const & t2, T const & t3); /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * Z). /// @see gtx_euler_angles template GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZYZ( T const & t1, T const & t2, T const & t3); /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Z). /// @see gtx_euler_angles template GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZXZ( T const & t1, T const & t2, T const & t3); /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * Y). /// @see gtx_euler_angles template GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXZY( T const & t1, T const & t2, T const & t3); /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * X). /// @see gtx_euler_angles template GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYZX( T const & t1, T const & t2, T const & t3); /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * X). /// @see gtx_euler_angles template GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZYX( T const & t1, T const & t2, T const & t3); /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Y). /// @see gtx_euler_angles template GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZXY( T const & t1, T const & t2, T const & t3); /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). /// @see gtx_euler_angles template GLM_FUNC_DECL mat<4, 4, T, defaultp> yawPitchRoll( T const& yaw, T const& pitch, T const& roll); /// Creates a 2D 2 * 2 rotation matrix from an euler angle. /// @see gtx_euler_angles template GLM_FUNC_DECL mat<2, 2, T, defaultp> orientate2(T const& angle); /// Creates a 2D 4 * 4 homogeneous rotation matrix from an euler angle. /// @see gtx_euler_angles template GLM_FUNC_DECL mat<3, 3, T, defaultp> orientate3(T const& angle); /// Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z). /// @see gtx_euler_angles template GLM_FUNC_DECL mat<3, 3, T, Q> orientate3(vec<3, T, Q> const& angles); /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). /// @see gtx_euler_angles template GLM_FUNC_DECL mat<4, 4, T, Q> orientate4(vec<3, T, Q> const& angles); /// Extracts the (X * Y * Z) Euler angles from the rotation matrix M /// @see gtx_euler_angles template GLM_FUNC_DECL void extractEulerAngleXYZ(mat<4, 4, T, defaultp> const& M, T & t1, T & t2, T & t3); /// Extracts the (Y * X * Z) Euler angles from the rotation matrix M /// @see gtx_euler_angles template GLM_FUNC_DECL void extractEulerAngleYXZ(mat<4, 4, T, defaultp> const & M, T & t1, T & t2, T & t3); /// Extracts the (X * Z * X) Euler angles from the rotation matrix M /// @see gtx_euler_angles template GLM_FUNC_DECL void extractEulerAngleXZX(mat<4, 4, T, defaultp> const & M, T & t1, T & t2, T & t3); /// Extracts the (X * Y * X) Euler angles from the rotation matrix M /// @see gtx_euler_angles template GLM_FUNC_DECL void extractEulerAngleXYX(mat<4, 4, T, defaultp> const & M, T & t1, T & t2, T & t3); /// Extracts the (Y * X * Y) Euler angles from the rotation matrix M /// @see gtx_euler_angles template GLM_FUNC_DECL void extractEulerAngleYXY(mat<4, 4, T, defaultp> const & M, T & t1, T & t2, T & t3); /// Extracts the (Y * Z * Y) Euler angles from the rotation matrix M /// @see gtx_euler_angles template GLM_FUNC_DECL void extractEulerAngleYZY(mat<4, 4, T, defaultp> const & M, T & t1, T & t2, T & t3); /// Extracts the (Z * Y * Z) Euler angles from the rotation matrix M /// @see gtx_euler_angles template GLM_FUNC_DECL void extractEulerAngleZYZ(mat<4, 4, T, defaultp> const & M, T & t1, T & t2, T & t3); /// Extracts the (Z * X * Z) Euler angles from the rotation matrix M /// @see gtx_euler_angles template GLM_FUNC_DECL void extractEulerAngleZXZ(mat<4, 4, T, defaultp> const & M, T & t1, T & t2, T & t3); /// Extracts the (X * Z * Y) Euler angles from the rotation matrix M /// @see gtx_euler_angles template GLM_FUNC_DECL void extractEulerAngleXZY(mat<4, 4, T, defaultp> const & M, T & t1, T & t2, T & t3); /// Extracts the (Y * Z * X) Euler angles from the rotation matrix M /// @see gtx_euler_angles template GLM_FUNC_DECL void extractEulerAngleYZX(mat<4, 4, T, defaultp> const & M, T & t1, T & t2, T & t3); /// Extracts the (Z * Y * X) Euler angles from the rotation matrix M /// @see gtx_euler_angles template GLM_FUNC_DECL void extractEulerAngleZYX(mat<4, 4, T, defaultp> const & M, T & t1, T & t2, T & t3); /// Extracts the (Z * X * Y) Euler angles from the rotation matrix M /// @see gtx_euler_angles template GLM_FUNC_DECL void extractEulerAngleZXY(mat<4, 4, T, defaultp> const & M, T & t1, T & t2, T & t3); /// @} }//namespace glm #include "euler_angles.inl" ================================================ FILE: libraries/glm/gtx/euler_angles.inl ================================================ /// @ref gtx_euler_angles #include "compatibility.hpp" // glm::atan2 namespace glm { template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleX ( T const& angleX ) { T cosX = glm::cos(angleX); T sinX = glm::sin(angleX); return mat<4, 4, T, defaultp>( T(1), T(0), T(0), T(0), T(0), cosX, sinX, T(0), T(0),-sinX, cosX, T(0), T(0), T(0), T(0), T(1)); } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleY ( T const& angleY ) { T cosY = glm::cos(angleY); T sinY = glm::sin(angleY); return mat<4, 4, T, defaultp>( cosY, T(0), -sinY, T(0), T(0), T(1), T(0), T(0), sinY, T(0), cosY, T(0), T(0), T(0), T(0), T(1)); } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZ ( T const& angleZ ) { T cosZ = glm::cos(angleZ); T sinZ = glm::sin(angleZ); return mat<4, 4, T, defaultp>( cosZ, sinZ, T(0), T(0), -sinZ, cosZ, T(0), T(0), T(0), T(0), T(1), T(0), T(0), T(0), T(0), T(1)); } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> derivedEulerAngleX ( T const & angleX, T const & angularVelocityX ) { T cosX = glm::cos(angleX) * angularVelocityX; T sinX = glm::sin(angleX) * angularVelocityX; return mat<4, 4, T, defaultp>( T(0), T(0), T(0), T(0), T(0),-sinX, cosX, T(0), T(0),-cosX,-sinX, T(0), T(0), T(0), T(0), T(0)); } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> derivedEulerAngleY ( T const & angleY, T const & angularVelocityY ) { T cosY = glm::cos(angleY) * angularVelocityY; T sinY = glm::sin(angleY) * angularVelocityY; return mat<4, 4, T, defaultp>( -sinY, T(0), -cosY, T(0), T(0), T(0), T(0), T(0), cosY, T(0), -sinY, T(0), T(0), T(0), T(0), T(0)); } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> derivedEulerAngleZ ( T const & angleZ, T const & angularVelocityZ ) { T cosZ = glm::cos(angleZ) * angularVelocityZ; T sinZ = glm::sin(angleZ) * angularVelocityZ; return mat<4, 4, T, defaultp>( -sinZ, cosZ, T(0), T(0), -cosZ, -sinZ, T(0), T(0), T(0), T(0), T(0), T(0), T(0), T(0), T(0), T(0)); } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXY ( T const& angleX, T const& angleY ) { T cosX = glm::cos(angleX); T sinX = glm::sin(angleX); T cosY = glm::cos(angleY); T sinY = glm::sin(angleY); return mat<4, 4, T, defaultp>( cosY, -sinX * -sinY, cosX * -sinY, T(0), T(0), cosX, sinX, T(0), sinY, -sinX * cosY, cosX * cosY, T(0), T(0), T(0), T(0), T(1)); } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYX ( T const& angleY, T const& angleX ) { T cosX = glm::cos(angleX); T sinX = glm::sin(angleX); T cosY = glm::cos(angleY); T sinY = glm::sin(angleY); return mat<4, 4, T, defaultp>( cosY, 0, -sinY, T(0), sinY * sinX, cosX, cosY * sinX, T(0), sinY * cosX, -sinX, cosY * cosX, T(0), T(0), T(0), T(0), T(1)); } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXZ ( T const& angleX, T const& angleZ ) { return eulerAngleX(angleX) * eulerAngleZ(angleZ); } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZX ( T const& angleZ, T const& angleX ) { return eulerAngleZ(angleZ) * eulerAngleX(angleX); } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYZ ( T const& angleY, T const& angleZ ) { return eulerAngleY(angleY) * eulerAngleZ(angleZ); } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZY ( T const& angleZ, T const& angleY ) { return eulerAngleZ(angleZ) * eulerAngleY(angleY); } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXYZ ( T const& t1, T const& t2, T const& t3 ) { T c1 = glm::cos(-t1); T c2 = glm::cos(-t2); T c3 = glm::cos(-t3); T s1 = glm::sin(-t1); T s2 = glm::sin(-t2); T s3 = glm::sin(-t3); mat<4, 4, T, defaultp> Result; Result[0][0] = c2 * c3; Result[0][1] =-c1 * s3 + s1 * s2 * c3; Result[0][2] = s1 * s3 + c1 * s2 * c3; Result[0][3] = static_cast(0); Result[1][0] = c2 * s3; Result[1][1] = c1 * c3 + s1 * s2 * s3; Result[1][2] =-s1 * c3 + c1 * s2 * s3; Result[1][3] = static_cast(0); Result[2][0] =-s2; Result[2][1] = s1 * c2; Result[2][2] = c1 * c2; Result[2][3] = static_cast(0); Result[3][0] = static_cast(0); Result[3][1] = static_cast(0); Result[3][2] = static_cast(0); Result[3][3] = static_cast(1); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYXZ ( T const& yaw, T const& pitch, T const& roll ) { T tmp_ch = glm::cos(yaw); T tmp_sh = glm::sin(yaw); T tmp_cp = glm::cos(pitch); T tmp_sp = glm::sin(pitch); T tmp_cb = glm::cos(roll); T tmp_sb = glm::sin(roll); mat<4, 4, T, defaultp> Result; Result[0][0] = tmp_ch * tmp_cb + tmp_sh * tmp_sp * tmp_sb; Result[0][1] = tmp_sb * tmp_cp; Result[0][2] = -tmp_sh * tmp_cb + tmp_ch * tmp_sp * tmp_sb; Result[0][3] = static_cast(0); Result[1][0] = -tmp_ch * tmp_sb + tmp_sh * tmp_sp * tmp_cb; Result[1][1] = tmp_cb * tmp_cp; Result[1][2] = tmp_sb * tmp_sh + tmp_ch * tmp_sp * tmp_cb; Result[1][3] = static_cast(0); Result[2][0] = tmp_sh * tmp_cp; Result[2][1] = -tmp_sp; Result[2][2] = tmp_ch * tmp_cp; Result[2][3] = static_cast(0); Result[3][0] = static_cast(0); Result[3][1] = static_cast(0); Result[3][2] = static_cast(0); Result[3][3] = static_cast(1); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXZX ( T const & t1, T const & t2, T const & t3 ) { T c1 = glm::cos(t1); T s1 = glm::sin(t1); T c2 = glm::cos(t2); T s2 = glm::sin(t2); T c3 = glm::cos(t3); T s3 = glm::sin(t3); mat<4, 4, T, defaultp> Result; Result[0][0] = c2; Result[0][1] = c1 * s2; Result[0][2] = s1 * s2; Result[0][3] = static_cast(0); Result[1][0] =-c3 * s2; Result[1][1] = c1 * c2 * c3 - s1 * s3; Result[1][2] = c1 * s3 + c2 * c3 * s1; Result[1][3] = static_cast(0); Result[2][0] = s2 * s3; Result[2][1] =-c3 * s1 - c1 * c2 * s3; Result[2][2] = c1 * c3 - c2 * s1 * s3; Result[2][3] = static_cast(0); Result[3][0] = static_cast(0); Result[3][1] = static_cast(0); Result[3][2] = static_cast(0); Result[3][3] = static_cast(1); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXYX ( T const & t1, T const & t2, T const & t3 ) { T c1 = glm::cos(t1); T s1 = glm::sin(t1); T c2 = glm::cos(t2); T s2 = glm::sin(t2); T c3 = glm::cos(t3); T s3 = glm::sin(t3); mat<4, 4, T, defaultp> Result; Result[0][0] = c2; Result[0][1] = s1 * s2; Result[0][2] =-c1 * s2; Result[0][3] = static_cast(0); Result[1][0] = s2 * s3; Result[1][1] = c1 * c3 - c2 * s1 * s3; Result[1][2] = c3 * s1 + c1 * c2 * s3; Result[1][3] = static_cast(0); Result[2][0] = c3 * s2; Result[2][1] =-c1 * s3 - c2 * c3 * s1; Result[2][2] = c1 * c2 * c3 - s1 * s3; Result[2][3] = static_cast(0); Result[3][0] = static_cast(0); Result[3][1] = static_cast(0); Result[3][2] = static_cast(0); Result[3][3] = static_cast(1); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYXY ( T const & t1, T const & t2, T const & t3 ) { T c1 = glm::cos(t1); T s1 = glm::sin(t1); T c2 = glm::cos(t2); T s2 = glm::sin(t2); T c3 = glm::cos(t3); T s3 = glm::sin(t3); mat<4, 4, T, defaultp> Result; Result[0][0] = c1 * c3 - c2 * s1 * s3; Result[0][1] = s2* s3; Result[0][2] =-c3 * s1 - c1 * c2 * s3; Result[0][3] = static_cast(0); Result[1][0] = s1 * s2; Result[1][1] = c2; Result[1][2] = c1 * s2; Result[1][3] = static_cast(0); Result[2][0] = c1 * s3 + c2 * c3 * s1; Result[2][1] =-c3 * s2; Result[2][2] = c1 * c2 * c3 - s1 * s3; Result[2][3] = static_cast(0); Result[3][0] = static_cast(0); Result[3][1] = static_cast(0); Result[3][2] = static_cast(0); Result[3][3] = static_cast(1); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYZY ( T const & t1, T const & t2, T const & t3 ) { T c1 = glm::cos(t1); T s1 = glm::sin(t1); T c2 = glm::cos(t2); T s2 = glm::sin(t2); T c3 = glm::cos(t3); T s3 = glm::sin(t3); mat<4, 4, T, defaultp> Result; Result[0][0] = c1 * c2 * c3 - s1 * s3; Result[0][1] = c3 * s2; Result[0][2] =-c1 * s3 - c2 * c3 * s1; Result[0][3] = static_cast(0); Result[1][0] =-c1 * s2; Result[1][1] = c2; Result[1][2] = s1 * s2; Result[1][3] = static_cast(0); Result[2][0] = c3 * s1 + c1 * c2 * s3; Result[2][1] = s2 * s3; Result[2][2] = c1 * c3 - c2 * s1 * s3; Result[2][3] = static_cast(0); Result[3][0] = static_cast(0); Result[3][1] = static_cast(0); Result[3][2] = static_cast(0); Result[3][3] = static_cast(1); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZYZ ( T const & t1, T const & t2, T const & t3 ) { T c1 = glm::cos(t1); T s1 = glm::sin(t1); T c2 = glm::cos(t2); T s2 = glm::sin(t2); T c3 = glm::cos(t3); T s3 = glm::sin(t3); mat<4, 4, T, defaultp> Result; Result[0][0] = c1 * c2 * c3 - s1 * s3; Result[0][1] = c1 * s3 + c2 * c3 * s1; Result[0][2] =-c3 * s2; Result[0][3] = static_cast(0); Result[1][0] =-c3 * s1 - c1 * c2 * s3; Result[1][1] = c1 * c3 - c2 * s1 * s3; Result[1][2] = s2 * s3; Result[1][3] = static_cast(0); Result[2][0] = c1 * s2; Result[2][1] = s1 * s2; Result[2][2] = c2; Result[2][3] = static_cast(0); Result[3][0] = static_cast(0); Result[3][1] = static_cast(0); Result[3][2] = static_cast(0); Result[3][3] = static_cast(1); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZXZ ( T const & t1, T const & t2, T const & t3 ) { T c1 = glm::cos(t1); T s1 = glm::sin(t1); T c2 = glm::cos(t2); T s2 = glm::sin(t2); T c3 = glm::cos(t3); T s3 = glm::sin(t3); mat<4, 4, T, defaultp> Result; Result[0][0] = c1 * c3 - c2 * s1 * s3; Result[0][1] = c3 * s1 + c1 * c2 * s3; Result[0][2] = s2 *s3; Result[0][3] = static_cast(0); Result[1][0] =-c1 * s3 - c2 * c3 * s1; Result[1][1] = c1 * c2 * c3 - s1 * s3; Result[1][2] = c3 * s2; Result[1][3] = static_cast(0); Result[2][0] = s1 * s2; Result[2][1] =-c1 * s2; Result[2][2] = c2; Result[2][3] = static_cast(0); Result[3][0] = static_cast(0); Result[3][1] = static_cast(0); Result[3][2] = static_cast(0); Result[3][3] = static_cast(1); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXZY ( T const & t1, T const & t2, T const & t3 ) { T c1 = glm::cos(t1); T s1 = glm::sin(t1); T c2 = glm::cos(t2); T s2 = glm::sin(t2); T c3 = glm::cos(t3); T s3 = glm::sin(t3); mat<4, 4, T, defaultp> Result; Result[0][0] = c2 * c3; Result[0][1] = s1 * s3 + c1 * c3 * s2; Result[0][2] = c3 * s1 * s2 - c1 * s3; Result[0][3] = static_cast(0); Result[1][0] =-s2; Result[1][1] = c1 * c2; Result[1][2] = c2 * s1; Result[1][3] = static_cast(0); Result[2][0] = c2 * s3; Result[2][1] = c1 * s2 * s3 - c3 * s1; Result[2][2] = c1 * c3 + s1 * s2 *s3; Result[2][3] = static_cast(0); Result[3][0] = static_cast(0); Result[3][1] = static_cast(0); Result[3][2] = static_cast(0); Result[3][3] = static_cast(1); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYZX ( T const & t1, T const & t2, T const & t3 ) { T c1 = glm::cos(t1); T s1 = glm::sin(t1); T c2 = glm::cos(t2); T s2 = glm::sin(t2); T c3 = glm::cos(t3); T s3 = glm::sin(t3); mat<4, 4, T, defaultp> Result; Result[0][0] = c1 * c2; Result[0][1] = s2; Result[0][2] =-c2 * s1; Result[0][3] = static_cast(0); Result[1][0] = s1 * s3 - c1 * c3 * s2; Result[1][1] = c2 * c3; Result[1][2] = c1 * s3 + c3 * s1 * s2; Result[1][3] = static_cast(0); Result[2][0] = c3 * s1 + c1 * s2 * s3; Result[2][1] =-c2 * s3; Result[2][2] = c1 * c3 - s1 * s2 * s3; Result[2][3] = static_cast(0); Result[3][0] = static_cast(0); Result[3][1] = static_cast(0); Result[3][2] = static_cast(0); Result[3][3] = static_cast(1); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZYX ( T const & t1, T const & t2, T const & t3 ) { T c1 = glm::cos(t1); T s1 = glm::sin(t1); T c2 = glm::cos(t2); T s2 = glm::sin(t2); T c3 = glm::cos(t3); T s3 = glm::sin(t3); mat<4, 4, T, defaultp> Result; Result[0][0] = c1 * c2; Result[0][1] = c2 * s1; Result[0][2] =-s2; Result[0][3] = static_cast(0); Result[1][0] = c1 * s2 * s3 - c3 * s1; Result[1][1] = c1 * c3 + s1 * s2 * s3; Result[1][2] = c2 * s3; Result[1][3] = static_cast(0); Result[2][0] = s1 * s3 + c1 * c3 * s2; Result[2][1] = c3 * s1 * s2 - c1 * s3; Result[2][2] = c2 * c3; Result[2][3] = static_cast(0); Result[3][0] = static_cast(0); Result[3][1] = static_cast(0); Result[3][2] = static_cast(0); Result[3][3] = static_cast(1); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZXY ( T const & t1, T const & t2, T const & t3 ) { T c1 = glm::cos(t1); T s1 = glm::sin(t1); T c2 = glm::cos(t2); T s2 = glm::sin(t2); T c3 = glm::cos(t3); T s3 = glm::sin(t3); mat<4, 4, T, defaultp> Result; Result[0][0] = c1 * c3 - s1 * s2 * s3; Result[0][1] = c3 * s1 + c1 * s2 * s3; Result[0][2] =-c2 * s3; Result[0][3] = static_cast(0); Result[1][0] =-c2 * s1; Result[1][1] = c1 * c2; Result[1][2] = s2; Result[1][3] = static_cast(0); Result[2][0] = c1 * s3 + c3 * s1 * s2; Result[2][1] = s1 * s3 - c1 * c3 * s2; Result[2][2] = c2 * c3; Result[2][3] = static_cast(0); Result[3][0] = static_cast(0); Result[3][1] = static_cast(0); Result[3][2] = static_cast(0); Result[3][3] = static_cast(1); return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> yawPitchRoll ( T const& yaw, T const& pitch, T const& roll ) { T tmp_ch = glm::cos(yaw); T tmp_sh = glm::sin(yaw); T tmp_cp = glm::cos(pitch); T tmp_sp = glm::sin(pitch); T tmp_cb = glm::cos(roll); T tmp_sb = glm::sin(roll); mat<4, 4, T, defaultp> Result; Result[0][0] = tmp_ch * tmp_cb + tmp_sh * tmp_sp * tmp_sb; Result[0][1] = tmp_sb * tmp_cp; Result[0][2] = -tmp_sh * tmp_cb + tmp_ch * tmp_sp * tmp_sb; Result[0][3] = static_cast(0); Result[1][0] = -tmp_ch * tmp_sb + tmp_sh * tmp_sp * tmp_cb; Result[1][1] = tmp_cb * tmp_cp; Result[1][2] = tmp_sb * tmp_sh + tmp_ch * tmp_sp * tmp_cb; Result[1][3] = static_cast(0); Result[2][0] = tmp_sh * tmp_cp; Result[2][1] = -tmp_sp; Result[2][2] = tmp_ch * tmp_cp; Result[2][3] = static_cast(0); Result[3][0] = static_cast(0); Result[3][1] = static_cast(0); Result[3][2] = static_cast(0); Result[3][3] = static_cast(1); return Result; } template GLM_FUNC_QUALIFIER mat<2, 2, T, defaultp> orientate2 ( T const& angle ) { T c = glm::cos(angle); T s = glm::sin(angle); mat<2, 2, T, defaultp> Result; Result[0][0] = c; Result[0][1] = s; Result[1][0] = -s; Result[1][1] = c; return Result; } template GLM_FUNC_QUALIFIER mat<3, 3, T, defaultp> orientate3 ( T const& angle ) { T c = glm::cos(angle); T s = glm::sin(angle); mat<3, 3, T, defaultp> Result; Result[0][0] = c; Result[0][1] = s; Result[0][2] = 0.0f; Result[1][0] = -s; Result[1][1] = c; Result[1][2] = 0.0f; Result[2][0] = 0.0f; Result[2][1] = 0.0f; Result[2][2] = 1.0f; return Result; } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> orientate3 ( vec<3, T, Q> const& angles ) { return mat<3, 3, T, Q>(yawPitchRoll(angles.z, angles.x, angles.y)); } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> orientate4 ( vec<3, T, Q> const& angles ) { return yawPitchRoll(angles.z, angles.x, angles.y); } template GLM_FUNC_DECL void extractEulerAngleXYZ(mat<4, 4, T, defaultp> const& M, T & t1, T & t2, T & t3) { T T1 = glm::atan2(M[2][1], M[2][2]); T C2 = glm::sqrt(M[0][0]*M[0][0] + M[1][0]*M[1][0]); T T2 = glm::atan2(-M[2][0], C2); T S1 = glm::sin(T1); T C1 = glm::cos(T1); T T3 = glm::atan2(S1*M[0][2] - C1*M[0][1], C1*M[1][1] - S1*M[1][2 ]); t1 = -T1; t2 = -T2; t3 = -T3; } template GLM_FUNC_QUALIFIER void extractEulerAngleYXZ(mat<4, 4, T, defaultp> const & M, T & t1, T & t2, T & t3) { T T1 = glm::atan2(M[2][0], M[2][2]); T C2 = glm::sqrt(M[0][1]*M[0][1] + M[1][1]*M[1][1]); T T2 = glm::atan2(-M[2][1], C2); T S1 = glm::sin(T1); T C1 = glm::cos(T1); T T3 = glm::atan2(S1*M[1][2] - C1*M[1][0], C1*M[0][0] - S1*M[0][2]); t1 = T1; t2 = T2; t3 = T3; } template GLM_FUNC_QUALIFIER void extractEulerAngleXZX(mat<4, 4, T, defaultp> const & M, T & t1, T & t2, T & t3) { T T1 = glm::atan2(M[0][2], M[0][1]); T S2 = glm::sqrt(M[1][0]*M[1][0] + M[2][0]*M[2][0]); T T2 = glm::atan2(S2, M[0][0]); T S1 = glm::sin(T1); T C1 = glm::cos(T1); T T3 = glm::atan2(C1*M[1][2] - S1*M[1][1], C1*M[2][2] - S1*M[2][1]); t1 = T1; t2 = T2; t3 = T3; } template GLM_FUNC_QUALIFIER void extractEulerAngleXYX(mat<4, 4, T, defaultp> const & M, T & t1, T & t2, T & t3) { T T1 = glm::atan2(M[0][1], -M[0][2]); T S2 = glm::sqrt(M[1][0]*M[1][0] + M[2][0]*M[2][0]); T T2 = glm::atan2(S2, M[0][0]); T S1 = glm::sin(T1); T C1 = glm::cos(T1); T T3 = glm::atan2(-C1*M[2][1] - S1*M[2][2], C1*M[1][1] + S1*M[1][2]); t1 = T1; t2 = T2; t3 = T3; } template GLM_FUNC_QUALIFIER void extractEulerAngleYXY(mat<4, 4, T, defaultp> const & M, T & t1, T & t2, T & t3) { T T1 = glm::atan2(M[1][0], M[1][2]); T S2 = glm::sqrt(M[0][1]*M[0][1] + M[2][1]*M[2][1]); T T2 = glm::atan2(S2, M[1][1]); T S1 = glm::sin(T1); T C1 = glm::cos(T1); T T3 = glm::atan2(C1*M[2][0] - S1*M[2][2], C1*M[0][0] - S1*M[0][2]); t1 = T1; t2 = T2; t3 = T3; } template GLM_FUNC_QUALIFIER void extractEulerAngleYZY(mat<4, 4, T, defaultp> const & M, T & t1, T & t2, T & t3) { T T1 = glm::atan2(M[1][2], -M[1][0]); T S2 = glm::sqrt(M[0][1]*M[0][1] + M[2][1]*M[2][1]); T T2 = glm::atan2(S2, M[1][1]); T S1 = glm::sin(T1); T C1 = glm::cos(T1); T T3 = glm::atan2(-S1*M[0][0] - C1*M[0][2], S1*M[2][0] + C1*M[2][2]); t1 = T1; t2 = T2; t3 = T3; } template GLM_FUNC_QUALIFIER void extractEulerAngleZYZ(mat<4, 4, T, defaultp> const & M, T & t1, T & t2, T & t3) { T T1 = glm::atan2(M[2][1], M[2][0]); T S2 = glm::sqrt(M[0][2]*M[0][2] + M[1][2]*M[1][2]); T T2 = glm::atan2(S2, M[2][2]); T S1 = glm::sin(T1); T C1 = glm::cos(T1); T T3 = glm::atan2(C1*M[0][1] - S1*M[0][0], C1*M[1][1] - S1*M[1][0]); t1 = T1; t2 = T2; t3 = T3; } template GLM_FUNC_QUALIFIER void extractEulerAngleZXZ(mat<4, 4, T, defaultp> const & M, T & t1, T & t2, T & t3) { T T1 = glm::atan2(M[2][0], -M[2][1]); T S2 = glm::sqrt(M[0][2]*M[0][2] + M[1][2]*M[1][2]); T T2 = glm::atan2(S2, M[2][2]); T S1 = glm::sin(T1); T C1 = glm::cos(T1); T T3 = glm::atan2(-C1*M[1][0] - S1*M[1][1], C1*M[0][0] + S1*M[0][1]); t1 = T1; t2 = T2; t3 = T3; } template GLM_FUNC_QUALIFIER void extractEulerAngleXZY(mat<4, 4, T, defaultp> const & M, T & t1, T & t2, T & t3) { T T1 = glm::atan2(M[1][2], M[1][1]); T C2 = glm::sqrt(M[0][0]*M[0][0] + M[2][0]*M[2][0]); T T2 = glm::atan2(-M[1][0], C2); T S1 = glm::sin(T1); T C1 = glm::cos(T1); T T3 = glm::atan2(S1*M[0][1] - C1*M[0][2], C1*M[2][2] - S1*M[2][1]); t1 = T1; t2 = T2; t3 = T3; } template GLM_FUNC_QUALIFIER void extractEulerAngleYZX(mat<4, 4, T, defaultp> const & M, T & t1, T & t2, T & t3) { T T1 = glm::atan2(-M[0][2], M[0][0]); T C2 = glm::sqrt(M[1][1]*M[1][1] + M[2][1]*M[2][1]); T T2 = glm::atan2(M[0][1], C2); T S1 = glm::sin(T1); T C1 = glm::cos(T1); T T3 = glm::atan2(S1*M[1][0] + C1*M[1][2], S1*M[2][0] + C1*M[2][2]); t1 = T1; t2 = T2; t3 = T3; } template GLM_FUNC_QUALIFIER void extractEulerAngleZYX(mat<4, 4, T, defaultp> const & M, T & t1, T & t2, T & t3) { T T1 = glm::atan2(M[0][1], M[0][0]); T C2 = glm::sqrt(M[1][2]*M[1][2] + M[2][2]*M[2][2]); T T2 = glm::atan2(-M[0][2], C2); T S1 = glm::sin(T1); T C1 = glm::cos(T1); T T3 = glm::atan2(S1*M[2][0] - C1*M[2][1], C1*M[1][1] - S1*M[1][0]); t1 = T1; t2 = T2; t3 = T3; } template GLM_FUNC_QUALIFIER void extractEulerAngleZXY(mat<4, 4, T, defaultp> const & M, T & t1, T & t2, T & t3) { T T1 = glm::atan2(-M[1][0], M[1][1]); T C2 = glm::sqrt(M[0][2]*M[0][2] + M[2][2]*M[2][2]); T T2 = glm::atan2(M[1][2], C2); T S1 = glm::sin(T1); T C1 = glm::cos(T1); T T3 = glm::atan2(C1*M[2][0] + S1*M[2][1], C1*M[0][0] + S1*M[0][1]); t1 = T1; t2 = T2; t3 = T3; } }//namespace glm ================================================ FILE: libraries/glm/gtx/extend.hpp ================================================ /// @ref gtx_extend /// @file glm/gtx/extend.hpp /// /// @see core (dependence) /// /// @defgroup gtx_extend GLM_GTX_extend /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Extend a position from a source to a position at a defined length. #pragma once // Dependency: #include "../glm.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_extend is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_extend extension included") # endif #endif namespace glm { /// @addtogroup gtx_extend /// @{ /// Extends of Length the Origin position using the (Source - Origin) direction. /// @see gtx_extend template GLM_FUNC_DECL genType extend( genType const& Origin, genType const& Source, typename genType::value_type const Length); /// @} }//namespace glm #include "extend.inl" ================================================ FILE: libraries/glm/gtx/extend.inl ================================================ /// @ref gtx_extend namespace glm { template GLM_FUNC_QUALIFIER genType extend ( genType const& Origin, genType const& Source, genType const& Distance ) { return Origin + (Source - Origin) * Distance; } template GLM_FUNC_QUALIFIER vec<2, T, Q> extend ( vec<2, T, Q> const& Origin, vec<2, T, Q> const& Source, T const& Distance ) { return Origin + (Source - Origin) * Distance; } template GLM_FUNC_QUALIFIER vec<3, T, Q> extend ( vec<3, T, Q> const& Origin, vec<3, T, Q> const& Source, T const& Distance ) { return Origin + (Source - Origin) * Distance; } template GLM_FUNC_QUALIFIER vec<4, T, Q> extend ( vec<4, T, Q> const& Origin, vec<4, T, Q> const& Source, T const& Distance ) { return Origin + (Source - Origin) * Distance; } }//namespace glm ================================================ FILE: libraries/glm/gtx/extended_min_max.hpp ================================================ /// @ref gtx_extended_min_max /// @file glm/gtx/extended_min_max.hpp /// /// @see core (dependence) /// /// @defgroup gtx_extended_min_max GLM_GTX_extented_min_max /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Min and max functions for 3 to 4 parameters. #pragma once // Dependency: #include "../glm.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_extented_min_max is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_extented_min_max extension included") # endif #endif namespace glm { /// @addtogroup gtx_extended_min_max /// @{ /// Return the minimum component-wise values of 3 inputs /// @see gtx_extented_min_max template GLM_FUNC_DECL T min( T const& x, T const& y, T const& z); /// Return the minimum component-wise values of 3 inputs /// @see gtx_extented_min_max template class C> GLM_FUNC_DECL C min( C const& x, typename C::T const& y, typename C::T const& z); /// Return the minimum component-wise values of 3 inputs /// @see gtx_extented_min_max template class C> GLM_FUNC_DECL C min( C const& x, C const& y, C const& z); /// Return the minimum component-wise values of 4 inputs /// @see gtx_extented_min_max template GLM_FUNC_DECL T min( T const& x, T const& y, T const& z, T const& w); /// Return the minimum component-wise values of 4 inputs /// @see gtx_extented_min_max template class C> GLM_FUNC_DECL C min( C const& x, typename C::T const& y, typename C::T const& z, typename C::T const& w); /// Return the minimum component-wise values of 4 inputs /// @see gtx_extented_min_max template class C> GLM_FUNC_DECL C min( C const& x, C const& y, C const& z, C const& w); /// Return the maximum component-wise values of 3 inputs /// @see gtx_extented_min_max template GLM_FUNC_DECL T max( T const& x, T const& y, T const& z); /// Return the maximum component-wise values of 3 inputs /// @see gtx_extented_min_max template class C> GLM_FUNC_DECL C max( C const& x, typename C::T const& y, typename C::T const& z); /// Return the maximum component-wise values of 3 inputs /// @see gtx_extented_min_max template class C> GLM_FUNC_DECL C max( C const& x, C const& y, C const& z); /// Return the maximum component-wise values of 4 inputs /// @see gtx_extented_min_max template GLM_FUNC_DECL T max( T const& x, T const& y, T const& z, T const& w); /// Return the maximum component-wise values of 4 inputs /// @see gtx_extented_min_max template class C> GLM_FUNC_DECL C max( C const& x, typename C::T const& y, typename C::T const& z, typename C::T const& w); /// Return the maximum component-wise values of 4 inputs /// @see gtx_extented_min_max template class C> GLM_FUNC_DECL C max( C const& x, C const& y, C const& z, C const& w); /// Returns y if y < x; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. /// /// @tparam genType Floating-point or integer; scalar or vector types. /// /// @see gtx_extented_min_max template GLM_FUNC_DECL genType fmin(genType x, genType y); /// Returns y if x < y; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. /// /// @tparam genType Floating-point; scalar or vector types. /// /// @see gtx_extented_min_max /// @see std::fmax documentation template GLM_FUNC_DECL genType fmax(genType x, genType y); /// Returns min(max(x, minVal), maxVal) for each component in x. If one of the two arguments is NaN, the value of the other argument is returned. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see gtx_extented_min_max template GLM_FUNC_DECL genType fclamp(genType x, genType minVal, genType maxVal); /// Returns min(max(x, minVal), maxVal) for each component in x. If one of the two arguments is NaN, the value of the other argument is returned. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see gtx_extented_min_max template GLM_FUNC_DECL vec fclamp(vec const& x, T minVal, T maxVal); /// Returns min(max(x, minVal), maxVal) for each component in x. If one of the two arguments is NaN, the value of the other argument is returned. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see gtx_extented_min_max template GLM_FUNC_DECL vec fclamp(vec const& x, vec const& minVal, vec const& maxVal); /// @} }//namespace glm #include "extended_min_max.inl" ================================================ FILE: libraries/glm/gtx/extended_min_max.inl ================================================ /// @ref gtx_extended_min_max namespace glm { template GLM_FUNC_QUALIFIER T min( T const& x, T const& y, T const& z) { return glm::min(glm::min(x, y), z); } template class C> GLM_FUNC_QUALIFIER C min ( C const& x, typename C::T const& y, typename C::T const& z ) { return glm::min(glm::min(x, y), z); } template class C> GLM_FUNC_QUALIFIER C min ( C const& x, C const& y, C const& z ) { return glm::min(glm::min(x, y), z); } template GLM_FUNC_QUALIFIER T min ( T const& x, T const& y, T const& z, T const& w ) { return glm::min(glm::min(x, y), glm::min(z, w)); } template class C> GLM_FUNC_QUALIFIER C min ( C const& x, typename C::T const& y, typename C::T const& z, typename C::T const& w ) { return glm::min(glm::min(x, y), glm::min(z, w)); } template class C> GLM_FUNC_QUALIFIER C min ( C const& x, C const& y, C const& z, C const& w ) { return glm::min(glm::min(x, y), glm::min(z, w)); } template GLM_FUNC_QUALIFIER T max( T const& x, T const& y, T const& z) { return glm::max(glm::max(x, y), z); } template class C> GLM_FUNC_QUALIFIER C max ( C const& x, typename C::T const& y, typename C::T const& z ) { return glm::max(glm::max(x, y), z); } template class C> GLM_FUNC_QUALIFIER C max ( C const& x, C const& y, C const& z ) { return glm::max(glm::max(x, y), z); } template GLM_FUNC_QUALIFIER T max ( T const& x, T const& y, T const& z, T const& w ) { return glm::max(glm::max(x, y), glm::max(z, w)); } template class C> GLM_FUNC_QUALIFIER C max ( C const& x, typename C::T const& y, typename C::T const& z, typename C::T const& w ) { return glm::max(glm::max(x, y), glm::max(z, w)); } template class C> GLM_FUNC_QUALIFIER C max ( C const& x, C const& y, C const& z, C const& w ) { return glm::max(glm::max(x, y), glm::max(z, w)); } // fmin # if GLM_HAS_CXX11_STL using std::fmin; # else template GLM_FUNC_QUALIFIER genType fmin(genType x, genType y) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point input"); if (isnan(x)) return y; if (isnan(y)) return x; return min(x, y); } # endif template GLM_FUNC_QUALIFIER vec fmin(vec const& a, T b) { return detail::functor2::call(fmin, a, vec(b)); } template GLM_FUNC_QUALIFIER vec fmin(vec const& a, vec const& b) { return detail::functor2::call(fmin, a, b); } // fmax # if GLM_HAS_CXX11_STL using std::fmax; # else template GLM_FUNC_QUALIFIER genType fmax(genType x, genType y) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point input"); if (isnan(x)) return y; if (isnan(y)) return x; return max(x, y); } # endif template GLM_FUNC_QUALIFIER vec fmax(vec const& a, T b) { return detail::functor2::call(fmax, a, vec(b)); } template GLM_FUNC_QUALIFIER vec fmax(vec const& a, vec const& b) { return detail::functor2::call(fmax, a, b); } // fclamp template GLM_FUNC_QUALIFIER genType fclamp(genType x, genType minVal, genType maxVal) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fclamp' only accept floating-point or integer inputs"); return fmin(fmax(x, minVal), maxVal); } template GLM_FUNC_QUALIFIER vec fclamp(vec const& x, T minVal, T maxVal) { return fmin(fmax(x, vec(minVal)), vec(maxVal)); } template GLM_FUNC_QUALIFIER vec fclamp(vec const& x, vec const& minVal, vec const& maxVal) { return fmin(fmax(x, minVal), maxVal); } }//namespace glm ================================================ FILE: libraries/glm/gtx/exterior_product.hpp ================================================ /// @ref gtx_exterior_product /// @file glm/gtx/exterior_product.hpp /// /// @see core (dependence) /// @see gtx_exterior_product (dependence) /// /// @defgroup gtx_exterior_product GLM_GTX_exterior_product /// @ingroup gtx /// /// Include to use the features of this extension. /// /// @brief Allow to perform bit operations on integer values #pragma once // Dependencies #include "../detail/setup.hpp" #include "../detail/qualifier.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_exterior_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_exterior_product extension included") # endif #endif namespace glm { /// @addtogroup gtx_exterior_product /// @{ /// Returns the cross product of x and y. /// /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see Exterior product template GLM_FUNC_DECL T cross(vec<2, T, Q> const& v, vec<2, T, Q> const& u); /// @} } //namespace glm #include "exterior_product.inl" ================================================ FILE: libraries/glm/gtx/exterior_product.inl ================================================ /// @ref gtx_exterior_product #include namespace glm { namespace detail { template struct compute_cross_vec2 { GLM_FUNC_QUALIFIER static T call(vec<2, T, Q> const& v, vec<2, T, Q> const& u) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'cross' accepts only floating-point inputs"); return v.x * u.y - u.x * v.y; } }; }//namespace detail template GLM_FUNC_QUALIFIER T cross(vec<2, T, Q> const& x, vec<2, T, Q> const& y) { return detail::compute_cross_vec2::value>::call(x, y); } }//namespace glm ================================================ FILE: libraries/glm/gtx/fast_exponential.hpp ================================================ /// @ref gtx_fast_exponential /// @file glm/gtx/fast_exponential.hpp /// /// @see core (dependence) /// @see gtx_half_float (dependence) /// /// @defgroup gtx_fast_exponential GLM_GTX_fast_exponential /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Fast but less accurate implementations of exponential based functions. #pragma once // Dependency: #include "../glm.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_fast_exponential is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_fast_exponential extension included") # endif #endif namespace glm { /// @addtogroup gtx_fast_exponential /// @{ /// Faster than the common pow function but less accurate. /// @see gtx_fast_exponential template GLM_FUNC_DECL genType fastPow(genType x, genType y); /// Faster than the common pow function but less accurate. /// @see gtx_fast_exponential template GLM_FUNC_DECL vec fastPow(vec const& x, vec const& y); /// Faster than the common pow function but less accurate. /// @see gtx_fast_exponential template GLM_FUNC_DECL genTypeT fastPow(genTypeT x, genTypeU y); /// Faster than the common pow function but less accurate. /// @see gtx_fast_exponential template GLM_FUNC_DECL vec fastPow(vec const& x); /// Faster than the common exp function but less accurate. /// @see gtx_fast_exponential template GLM_FUNC_DECL T fastExp(T x); /// Faster than the common exp function but less accurate. /// @see gtx_fast_exponential template GLM_FUNC_DECL vec fastExp(vec const& x); /// Faster than the common log function but less accurate. /// @see gtx_fast_exponential template GLM_FUNC_DECL T fastLog(T x); /// Faster than the common exp2 function but less accurate. /// @see gtx_fast_exponential template GLM_FUNC_DECL vec fastLog(vec const& x); /// Faster than the common exp2 function but less accurate. /// @see gtx_fast_exponential template GLM_FUNC_DECL T fastExp2(T x); /// Faster than the common exp2 function but less accurate. /// @see gtx_fast_exponential template GLM_FUNC_DECL vec fastExp2(vec const& x); /// Faster than the common log2 function but less accurate. /// @see gtx_fast_exponential template GLM_FUNC_DECL T fastLog2(T x); /// Faster than the common log2 function but less accurate. /// @see gtx_fast_exponential template GLM_FUNC_DECL vec fastLog2(vec const& x); /// @} }//namespace glm #include "fast_exponential.inl" ================================================ FILE: libraries/glm/gtx/fast_exponential.inl ================================================ /// @ref gtx_fast_exponential namespace glm { // fastPow: template GLM_FUNC_QUALIFIER genType fastPow(genType x, genType y) { return exp(y * log(x)); } template GLM_FUNC_QUALIFIER vec fastPow(vec const& x, vec const& y) { return exp(y * log(x)); } template GLM_FUNC_QUALIFIER T fastPow(T x, int y) { T f = static_cast(1); for(int i = 0; i < y; ++i) f *= x; return f; } template GLM_FUNC_QUALIFIER vec fastPow(vec const& x, vec const& y) { vec Result; for(length_t i = 0, n = x.length(); i < n; ++i) Result[i] = fastPow(x[i], y[i]); return Result; } // fastExp // Note: This function provides accurate results only for value between -1 and 1, else avoid it. template GLM_FUNC_QUALIFIER T fastExp(T x) { // This has a better looking and same performance in release mode than the following code. However, in debug mode it's slower. // return 1.0f + x * (1.0f + x * 0.5f * (1.0f + x * 0.3333333333f * (1.0f + x * 0.25 * (1.0f + x * 0.2f)))); T x2 = x * x; T x3 = x2 * x; T x4 = x3 * x; T x5 = x4 * x; return T(1) + x + (x2 * T(0.5)) + (x3 * T(0.1666666667)) + (x4 * T(0.041666667)) + (x5 * T(0.008333333333)); } /* // Try to handle all values of float... but often shower than std::exp, glm::floor and the loop kill the performance GLM_FUNC_QUALIFIER float fastExp(float x) { const float e = 2.718281828f; const float IntegerPart = floor(x); const float FloatPart = x - IntegerPart; float z = 1.f; for(int i = 0; i < int(IntegerPart); ++i) z *= e; const float x2 = FloatPart * FloatPart; const float x3 = x2 * FloatPart; const float x4 = x3 * FloatPart; const float x5 = x4 * FloatPart; return z * (1.0f + FloatPart + (x2 * 0.5f) + (x3 * 0.1666666667f) + (x4 * 0.041666667f) + (x5 * 0.008333333333f)); } // Increase accuracy on number bigger that 1 and smaller than -1 but it's not enough for high and negative numbers GLM_FUNC_QUALIFIER float fastExp(float x) { // This has a better looking and same performance in release mode than the following code. However, in debug mode it's slower. // return 1.0f + x * (1.0f + x * 0.5f * (1.0f + x * 0.3333333333f * (1.0f + x * 0.25 * (1.0f + x * 0.2f)))); float x2 = x * x; float x3 = x2 * x; float x4 = x3 * x; float x5 = x4 * x; float x6 = x5 * x; float x7 = x6 * x; float x8 = x7 * x; return 1.0f + x + (x2 * 0.5f) + (x3 * 0.1666666667f) + (x4 * 0.041666667f) + (x5 * 0.008333333333f)+ (x6 * 0.00138888888888f) + (x7 * 0.000198412698f) + (x8 * 0.0000248015873f);; } */ template GLM_FUNC_QUALIFIER vec fastExp(vec const& x) { return detail::functor1::call(fastExp, x); } // fastLog template GLM_FUNC_QUALIFIER genType fastLog(genType x) { return std::log(x); } /* Slower than the VC7.1 function... GLM_FUNC_QUALIFIER float fastLog(float x) { float y1 = (x - 1.0f) / (x + 1.0f); float y2 = y1 * y1; return 2.0f * y1 * (1.0f + y2 * (0.3333333333f + y2 * (0.2f + y2 * 0.1428571429f))); } */ template GLM_FUNC_QUALIFIER vec fastLog(vec const& x) { return detail::functor1::call(fastLog, x); } //fastExp2, ln2 = 0.69314718055994530941723212145818f template GLM_FUNC_QUALIFIER genType fastExp2(genType x) { return fastExp(0.69314718055994530941723212145818f * x); } template GLM_FUNC_QUALIFIER vec fastExp2(vec const& x) { return detail::functor1::call(fastExp2, x); } // fastLog2, ln2 = 0.69314718055994530941723212145818f template GLM_FUNC_QUALIFIER genType fastLog2(genType x) { return fastLog(x) / 0.69314718055994530941723212145818f; } template GLM_FUNC_QUALIFIER vec fastLog2(vec const& x) { return detail::functor1::call(fastLog2, x); } }//namespace glm ================================================ FILE: libraries/glm/gtx/fast_square_root.hpp ================================================ /// @ref gtx_fast_square_root /// @file glm/gtx/fast_square_root.hpp /// /// @see core (dependence) /// /// @defgroup gtx_fast_square_root GLM_GTX_fast_square_root /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Fast but less accurate implementations of square root based functions. /// - Sqrt optimisation based on Newton's method, /// www.gamedev.net/community/forums/topic.asp?topic id=139956 #pragma once // Dependency: #include "../common.hpp" #include "../exponential.hpp" #include "../geometric.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_fast_square_root is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_fast_square_root extension included") # endif #endif namespace glm { /// @addtogroup gtx_fast_square_root /// @{ /// Faster than the common sqrt function but less accurate. /// /// @see gtx_fast_square_root extension. template GLM_FUNC_DECL genType fastSqrt(genType x); /// Faster than the common sqrt function but less accurate. /// /// @see gtx_fast_square_root extension. template GLM_FUNC_DECL vec fastSqrt(vec const& x); /// Faster than the common inversesqrt function but less accurate. /// /// @see gtx_fast_square_root extension. template GLM_FUNC_DECL genType fastInverseSqrt(genType x); /// Faster than the common inversesqrt function but less accurate. /// /// @see gtx_fast_square_root extension. template GLM_FUNC_DECL vec fastInverseSqrt(vec const& x); /// Faster than the common length function but less accurate. /// /// @see gtx_fast_square_root extension. template GLM_FUNC_DECL genType fastLength(genType x); /// Faster than the common length function but less accurate. /// /// @see gtx_fast_square_root extension. template GLM_FUNC_DECL T fastLength(vec const& x); /// Faster than the common distance function but less accurate. /// /// @see gtx_fast_square_root extension. template GLM_FUNC_DECL genType fastDistance(genType x, genType y); /// Faster than the common distance function but less accurate. /// /// @see gtx_fast_square_root extension. template GLM_FUNC_DECL T fastDistance(vec const& x, vec const& y); /// Faster than the common normalize function but less accurate. /// /// @see gtx_fast_square_root extension. template GLM_FUNC_DECL genType fastNormalize(genType const& x); /// @} }// namespace glm #include "fast_square_root.inl" ================================================ FILE: libraries/glm/gtx/fast_square_root.inl ================================================ /// @ref gtx_fast_square_root namespace glm { // fastSqrt template GLM_FUNC_QUALIFIER genType fastSqrt(genType x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fastSqrt' only accept floating-point input"); return genType(1) / fastInverseSqrt(x); } template GLM_FUNC_QUALIFIER vec fastSqrt(vec const& x) { return detail::functor1::call(fastSqrt, x); } // fastInversesqrt template GLM_FUNC_QUALIFIER genType fastInverseSqrt(genType x) { return detail::compute_inversesqrt<1, genType, lowp, detail::is_aligned::value>::call(vec<1, genType, lowp>(x)).x; } template GLM_FUNC_QUALIFIER vec fastInverseSqrt(vec const& x) { return detail::compute_inversesqrt::value>::call(x); } // fastLength template GLM_FUNC_QUALIFIER genType fastLength(genType x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fastLength' only accept floating-point inputs"); return abs(x); } template GLM_FUNC_QUALIFIER T fastLength(vec const& x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fastLength' only accept floating-point inputs"); return fastSqrt(dot(x, x)); } // fastDistance template GLM_FUNC_QUALIFIER genType fastDistance(genType x, genType y) { return fastLength(y - x); } template GLM_FUNC_QUALIFIER T fastDistance(vec const& x, vec const& y) { return fastLength(y - x); } // fastNormalize template GLM_FUNC_QUALIFIER genType fastNormalize(genType x) { return x > genType(0) ? genType(1) : -genType(1); } template GLM_FUNC_QUALIFIER vec fastNormalize(vec const& x) { return x * fastInverseSqrt(dot(x, x)); } }//namespace glm ================================================ FILE: libraries/glm/gtx/fast_trigonometry.hpp ================================================ /// @ref gtx_fast_trigonometry /// @file glm/gtx/fast_trigonometry.hpp /// /// @see core (dependence) /// /// @defgroup gtx_fast_trigonometry GLM_GTX_fast_trigonometry /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Fast but less accurate implementations of trigonometric functions. #pragma once // Dependency: #include "../gtc/constants.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_fast_trigonometry is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_fast_trigonometry extension included") # endif #endif namespace glm { /// @addtogroup gtx_fast_trigonometry /// @{ /// Wrap an angle to [0 2pi[ /// From GLM_GTX_fast_trigonometry extension. template GLM_FUNC_DECL T wrapAngle(T angle); /// Faster than the common sin function but less accurate. /// From GLM_GTX_fast_trigonometry extension. template GLM_FUNC_DECL T fastSin(T angle); /// Faster than the common cos function but less accurate. /// From GLM_GTX_fast_trigonometry extension. template GLM_FUNC_DECL T fastCos(T angle); /// Faster than the common tan function but less accurate. /// Defined between -2pi and 2pi. /// From GLM_GTX_fast_trigonometry extension. template GLM_FUNC_DECL T fastTan(T angle); /// Faster than the common asin function but less accurate. /// Defined between -2pi and 2pi. /// From GLM_GTX_fast_trigonometry extension. template GLM_FUNC_DECL T fastAsin(T angle); /// Faster than the common acos function but less accurate. /// Defined between -2pi and 2pi. /// From GLM_GTX_fast_trigonometry extension. template GLM_FUNC_DECL T fastAcos(T angle); /// Faster than the common atan function but less accurate. /// Defined between -2pi and 2pi. /// From GLM_GTX_fast_trigonometry extension. template GLM_FUNC_DECL T fastAtan(T y, T x); /// Faster than the common atan function but less accurate. /// Defined between -2pi and 2pi. /// From GLM_GTX_fast_trigonometry extension. template GLM_FUNC_DECL T fastAtan(T angle); /// @} }//namespace glm #include "fast_trigonometry.inl" ================================================ FILE: libraries/glm/gtx/fast_trigonometry.inl ================================================ /// @ref gtx_fast_trigonometry namespace glm{ namespace detail { template GLM_FUNC_QUALIFIER vec taylorCos(vec const& x) { return static_cast(1) - (x * x) * (1.f / 2.f) + ((x * x) * (x * x)) * (1.f / 24.f) - (((x * x) * (x * x)) * (x * x)) * (1.f / 720.f) + (((x * x) * (x * x)) * ((x * x) * (x * x))) * (1.f / 40320.f); } template GLM_FUNC_QUALIFIER T cos_52s(T x) { T const xx(x * x); return (T(0.9999932946) + xx * (T(-0.4999124376) + xx * (T(0.0414877472) + xx * T(-0.0012712095)))); } template GLM_FUNC_QUALIFIER vec cos_52s(vec const& x) { return detail::functor1::call(cos_52s, x); } }//namespace detail // wrapAngle template GLM_FUNC_QUALIFIER T wrapAngle(T angle) { return abs(mod(angle, two_pi())); } template GLM_FUNC_QUALIFIER vec wrapAngle(vec const& x) { return detail::functor1::call(wrapAngle, x); } // cos template GLM_FUNC_QUALIFIER T fastCos(T x) { T const angle(wrapAngle(x)); if(angle < half_pi()) return detail::cos_52s(angle); if(angle < pi()) return -detail::cos_52s(pi() - angle); if(angle < (T(3) * half_pi())) return -detail::cos_52s(angle - pi()); return detail::cos_52s(two_pi() - angle); } template GLM_FUNC_QUALIFIER vec fastCos(vec const& x) { return detail::functor1::call(fastCos, x); } // sin template GLM_FUNC_QUALIFIER T fastSin(T x) { return fastCos(half_pi() - x); } template GLM_FUNC_QUALIFIER vec fastSin(vec const& x) { return detail::functor1::call(fastSin, x); } // tan template GLM_FUNC_QUALIFIER T fastTan(T x) { return x + (x * x * x * T(0.3333333333)) + (x * x * x * x * x * T(0.1333333333333)) + (x * x * x * x * x * x * x * T(0.0539682539)); } template GLM_FUNC_QUALIFIER vec fastTan(vec const& x) { return detail::functor1::call(fastTan, x); } // asin template GLM_FUNC_QUALIFIER T fastAsin(T x) { return x + (x * x * x * T(0.166666667)) + (x * x * x * x * x * T(0.075)) + (x * x * x * x * x * x * x * T(0.0446428571)) + (x * x * x * x * x * x * x * x * x * T(0.0303819444));// + (x * x * x * x * x * x * x * x * x * x * x * T(0.022372159)); } template GLM_FUNC_QUALIFIER vec fastAsin(vec const& x) { return detail::functor1::call(fastAsin, x); } // acos template GLM_FUNC_QUALIFIER T fastAcos(T x) { return T(1.5707963267948966192313216916398) - fastAsin(x); //(PI / 2) } template GLM_FUNC_QUALIFIER vec fastAcos(vec const& x) { return detail::functor1::call(fastAcos, x); } // atan template GLM_FUNC_QUALIFIER T fastAtan(T y, T x) { T sgn = sign(y) * sign(x); return abs(fastAtan(y / x)) * sgn; } template GLM_FUNC_QUALIFIER vec fastAtan(vec const& y, vec const& x) { return detail::functor2::call(fastAtan, y, x); } template GLM_FUNC_QUALIFIER T fastAtan(T x) { return x - (x * x * x * T(0.333333333333)) + (x * x * x * x * x * T(0.2)) - (x * x * x * x * x * x * x * T(0.1428571429)) + (x * x * x * x * x * x * x * x * x * T(0.111111111111)) - (x * x * x * x * x * x * x * x * x * x * x * T(0.0909090909)); } template GLM_FUNC_QUALIFIER vec fastAtan(vec const& x) { return detail::functor1::call(fastAtan, x); } }//namespace glm ================================================ FILE: libraries/glm/gtx/float_notmalize.inl ================================================ /// @ref gtx_float_normalize #include namespace glm { template GLM_FUNC_QUALIFIER vec floatNormalize(vec const& v) { return vec(v) / static_cast(std::numeric_limits::max()); } }//namespace glm ================================================ FILE: libraries/glm/gtx/functions.hpp ================================================ /// @ref gtx_functions /// @file glm/gtx/functions.hpp /// /// @see core (dependence) /// @see gtc_quaternion (dependence) /// /// @defgroup gtx_functions GLM_GTX_functions /// @ingroup gtx /// /// Include to use the features of this extension. /// /// List of useful common functions. #pragma once // Dependencies #include "../detail/setup.hpp" #include "../detail/qualifier.hpp" #include "../detail/type_vec2.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_functions is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_functions extension included") # endif #endif namespace glm { /// @addtogroup gtx_functions /// @{ /// 1D gauss function /// /// @see gtc_epsilon template GLM_FUNC_DECL T gauss( T x, T ExpectedValue, T StandardDeviation); /// 2D gauss function /// /// @see gtc_epsilon template GLM_FUNC_DECL T gauss( vec<2, T, Q> const& Coord, vec<2, T, Q> const& ExpectedValue, vec<2, T, Q> const& StandardDeviation); /// @} }//namespace glm #include "functions.inl" ================================================ FILE: libraries/glm/gtx/functions.inl ================================================ /// @ref gtx_functions #include "../exponential.hpp" namespace glm { template GLM_FUNC_QUALIFIER T gauss ( T x, T ExpectedValue, T StandardDeviation ) { return exp(-((x - ExpectedValue) * (x - ExpectedValue)) / (static_cast(2) * StandardDeviation * StandardDeviation)) / (StandardDeviation * sqrt(static_cast(6.28318530717958647692528676655900576))); } template GLM_FUNC_QUALIFIER T gauss ( vec<2, T, Q> const& Coord, vec<2, T, Q> const& ExpectedValue, vec<2, T, Q> const& StandardDeviation ) { vec<2, T, Q> const Squared = ((Coord - ExpectedValue) * (Coord - ExpectedValue)) / (static_cast(2) * StandardDeviation * StandardDeviation); return exp(-(Squared.x + Squared.y)); } }//namespace glm ================================================ FILE: libraries/glm/gtx/gradient_paint.hpp ================================================ /// @ref gtx_gradient_paint /// @file glm/gtx/gradient_paint.hpp /// /// @see core (dependence) /// @see gtx_optimum_pow (dependence) /// /// @defgroup gtx_gradient_paint GLM_GTX_gradient_paint /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Functions that return the color of procedural gradient for specific coordinates. #pragma once // Dependency: #include "../glm.hpp" #include "../gtx/optimum_pow.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_gradient_paint is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_gradient_paint extension included") # endif #endif namespace glm { /// @addtogroup gtx_gradient_paint /// @{ /// Return a color from a radial gradient. /// @see - gtx_gradient_paint template GLM_FUNC_DECL T radialGradient( vec<2, T, Q> const& Center, T const& Radius, vec<2, T, Q> const& Focal, vec<2, T, Q> const& Position); /// Return a color from a linear gradient. /// @see - gtx_gradient_paint template GLM_FUNC_DECL T linearGradient( vec<2, T, Q> const& Point0, vec<2, T, Q> const& Point1, vec<2, T, Q> const& Position); /// @} }// namespace glm #include "gradient_paint.inl" ================================================ FILE: libraries/glm/gtx/gradient_paint.inl ================================================ /// @ref gtx_gradient_paint namespace glm { template GLM_FUNC_QUALIFIER T radialGradient ( vec<2, T, Q> const& Center, T const& Radius, vec<2, T, Q> const& Focal, vec<2, T, Q> const& Position ) { vec<2, T, Q> F = Focal - Center; vec<2, T, Q> D = Position - Focal; T Radius2 = pow2(Radius); T Fx2 = pow2(F.x); T Fy2 = pow2(F.y); T Numerator = (D.x * F.x + D.y * F.y) + sqrt(Radius2 * (pow2(D.x) + pow2(D.y)) - pow2(D.x * F.y - D.y * F.x)); T Denominator = Radius2 - (Fx2 + Fy2); return Numerator / Denominator; } template GLM_FUNC_QUALIFIER T linearGradient ( vec<2, T, Q> const& Point0, vec<2, T, Q> const& Point1, vec<2, T, Q> const& Position ) { vec<2, T, Q> Dist = Point1 - Point0; return (Dist.x * (Position.x - Point0.x) + Dist.y * (Position.y - Point0.y)) / glm::dot(Dist, Dist); } }//namespace glm ================================================ FILE: libraries/glm/gtx/handed_coordinate_space.hpp ================================================ /// @ref gtx_handed_coordinate_space /// @file glm/gtx/handed_coordinate_space.hpp /// /// @see core (dependence) /// /// @defgroup gtx_handed_coordinate_space GLM_GTX_handed_coordinate_space /// @ingroup gtx /// /// Include to use the features of this extension. /// /// To know if a set of three basis vectors defines a right or left-handed coordinate system. #pragma once // Dependency: #include "../glm.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_handed_coordinate_space is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_handed_coordinate_space extension included") # endif #endif namespace glm { /// @addtogroup gtx_handed_coordinate_space /// @{ //! Return if a trihedron right handed or not. //! From GLM_GTX_handed_coordinate_space extension. template GLM_FUNC_DECL bool rightHanded( vec<3, T, Q> const& tangent, vec<3, T, Q> const& binormal, vec<3, T, Q> const& normal); //! Return if a trihedron left handed or not. //! From GLM_GTX_handed_coordinate_space extension. template GLM_FUNC_DECL bool leftHanded( vec<3, T, Q> const& tangent, vec<3, T, Q> const& binormal, vec<3, T, Q> const& normal); /// @} }// namespace glm #include "handed_coordinate_space.inl" ================================================ FILE: libraries/glm/gtx/handed_coordinate_space.inl ================================================ /// @ref gtx_handed_coordinate_space namespace glm { template GLM_FUNC_QUALIFIER bool rightHanded ( vec<3, T, Q> const& tangent, vec<3, T, Q> const& binormal, vec<3, T, Q> const& normal ) { return dot(cross(normal, tangent), binormal) > T(0); } template GLM_FUNC_QUALIFIER bool leftHanded ( vec<3, T, Q> const& tangent, vec<3, T, Q> const& binormal, vec<3, T, Q> const& normal ) { return dot(cross(normal, tangent), binormal) < T(0); } }//namespace glm ================================================ FILE: libraries/glm/gtx/hash.hpp ================================================ /// @ref gtx_hash /// @file glm/gtx/hash.hpp /// /// @see core (dependence) /// /// @defgroup gtx_hash GLM_GTX_hash /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Add std::hash support for glm types #pragma once #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_hash is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_hash extension included") # endif #endif #include #include "../vec2.hpp" #include "../vec3.hpp" #include "../vec4.hpp" #include "../gtc/vec1.hpp" #include "../gtc/quaternion.hpp" #include "../gtx/dual_quaternion.hpp" #include "../mat2x2.hpp" #include "../mat2x3.hpp" #include "../mat2x4.hpp" #include "../mat3x2.hpp" #include "../mat3x3.hpp" #include "../mat3x4.hpp" #include "../mat4x2.hpp" #include "../mat4x3.hpp" #include "../mat4x4.hpp" #if !GLM_HAS_CXX11_STL # error "GLM_GTX_hash requires C++11 standard library support" #endif namespace std { template struct hash > { GLM_FUNC_DECL size_t operator()(glm::vec<1, T, Q> const& v) const; }; template struct hash > { GLM_FUNC_DECL size_t operator()(glm::vec<2, T, Q> const& v) const; }; template struct hash > { GLM_FUNC_DECL size_t operator()(glm::vec<3, T, Q> const& v) const; }; template struct hash > { GLM_FUNC_DECL size_t operator()(glm::vec<4, T, Q> const& v) const; }; template struct hash> { GLM_FUNC_DECL size_t operator()(glm::qua const& q) const; }; template struct hash > { GLM_FUNC_DECL size_t operator()(glm::tdualquat const& q) const; }; template struct hash > { GLM_FUNC_DECL size_t operator()(glm::mat<2, 2, T,Q> const& m) const; }; template struct hash > { GLM_FUNC_DECL size_t operator()(glm::mat<2, 3, T,Q> const& m) const; }; template struct hash > { GLM_FUNC_DECL size_t operator()(glm::mat<2, 4, T,Q> const& m) const; }; template struct hash > { GLM_FUNC_DECL size_t operator()(glm::mat<3, 2, T,Q> const& m) const; }; template struct hash > { GLM_FUNC_DECL size_t operator()(glm::mat<3, 3, T,Q> const& m) const; }; template struct hash > { GLM_FUNC_DECL size_t operator()(glm::mat<3, 4, T,Q> const& m) const; }; template struct hash > { GLM_FUNC_DECL size_t operator()(glm::mat<4, 2, T,Q> const& m) const; }; template struct hash > { GLM_FUNC_DECL size_t operator()(glm::mat<4, 3, T,Q> const& m) const; }; template struct hash > { GLM_FUNC_DECL size_t operator()(glm::mat<4, 4, T,Q> const& m) const; }; } // namespace std #include "hash.inl" ================================================ FILE: libraries/glm/gtx/hash.inl ================================================ /// @ref gtx_hash /// /// @see core (dependence) /// /// @defgroup gtx_hash GLM_GTX_hash /// @ingroup gtx /// /// @brief Add std::hash support for glm types /// /// need to be included to use the features of this extension. namespace glm { namespace detail { GLM_INLINE void hash_combine(size_t &seed, size_t hash) { hash += 0x9e3779b9 + (seed << 6) + (seed >> 2); seed ^= hash; } }} namespace std { template GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::vec<1, T, Q> const& v) const { hash hasher; return hasher(v.x); } template GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::vec<2, T, Q> const& v) const { size_t seed = 0; hash hasher; glm::detail::hash_combine(seed, hasher(v.x)); glm::detail::hash_combine(seed, hasher(v.y)); return seed; } template GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::vec<3, T, Q> const& v) const { size_t seed = 0; hash hasher; glm::detail::hash_combine(seed, hasher(v.x)); glm::detail::hash_combine(seed, hasher(v.y)); glm::detail::hash_combine(seed, hasher(v.z)); return seed; } template GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::vec<4, T, Q> const& v) const { size_t seed = 0; hash hasher; glm::detail::hash_combine(seed, hasher(v.x)); glm::detail::hash_combine(seed, hasher(v.y)); glm::detail::hash_combine(seed, hasher(v.z)); glm::detail::hash_combine(seed, hasher(v.w)); return seed; } template GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::qua const& q) const { size_t seed = 0; hash hasher; glm::detail::hash_combine(seed, hasher(q.x)); glm::detail::hash_combine(seed, hasher(q.y)); glm::detail::hash_combine(seed, hasher(q.z)); glm::detail::hash_combine(seed, hasher(q.w)); return seed; } template GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::tdualquat const& q) const { size_t seed = 0; hash> hasher; glm::detail::hash_combine(seed, hasher(q.real)); glm::detail::hash_combine(seed, hasher(q.dual)); return seed; } template GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<2, 2, T, Q> const& m) const { size_t seed = 0; hash> hasher; glm::detail::hash_combine(seed, hasher(m[0])); glm::detail::hash_combine(seed, hasher(m[1])); return seed; } template GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<2, 3, T, Q> const& m) const { size_t seed = 0; hash> hasher; glm::detail::hash_combine(seed, hasher(m[0])); glm::detail::hash_combine(seed, hasher(m[1])); return seed; } template GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<2, 4, T, Q> const& m) const { size_t seed = 0; hash> hasher; glm::detail::hash_combine(seed, hasher(m[0])); glm::detail::hash_combine(seed, hasher(m[1])); return seed; } template GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<3, 2, T, Q> const& m) const { size_t seed = 0; hash> hasher; glm::detail::hash_combine(seed, hasher(m[0])); glm::detail::hash_combine(seed, hasher(m[1])); glm::detail::hash_combine(seed, hasher(m[2])); return seed; } template GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<3, 3, T, Q> const& m) const { size_t seed = 0; hash> hasher; glm::detail::hash_combine(seed, hasher(m[0])); glm::detail::hash_combine(seed, hasher(m[1])); glm::detail::hash_combine(seed, hasher(m[2])); return seed; } template GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<3, 4, T, Q> const& m) const { size_t seed = 0; hash> hasher; glm::detail::hash_combine(seed, hasher(m[0])); glm::detail::hash_combine(seed, hasher(m[1])); glm::detail::hash_combine(seed, hasher(m[2])); return seed; } template GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<4, 2, T,Q> const& m) const { size_t seed = 0; hash> hasher; glm::detail::hash_combine(seed, hasher(m[0])); glm::detail::hash_combine(seed, hasher(m[1])); glm::detail::hash_combine(seed, hasher(m[2])); glm::detail::hash_combine(seed, hasher(m[3])); return seed; } template GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<4, 3, T,Q> const& m) const { size_t seed = 0; hash> hasher; glm::detail::hash_combine(seed, hasher(m[0])); glm::detail::hash_combine(seed, hasher(m[1])); glm::detail::hash_combine(seed, hasher(m[2])); glm::detail::hash_combine(seed, hasher(m[3])); return seed; } template GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<4, 4, T, Q> const& m) const { size_t seed = 0; hash> hasher; glm::detail::hash_combine(seed, hasher(m[0])); glm::detail::hash_combine(seed, hasher(m[1])); glm::detail::hash_combine(seed, hasher(m[2])); glm::detail::hash_combine(seed, hasher(m[3])); return seed; } } ================================================ FILE: libraries/glm/gtx/integer.hpp ================================================ /// @ref gtx_integer /// @file glm/gtx/integer.hpp /// /// @see core (dependence) /// /// @defgroup gtx_integer GLM_GTX_integer /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Add support for integer for core functions #pragma once // Dependency: #include "../glm.hpp" #include "../gtc/integer.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_integer is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_integer extension included") # endif #endif namespace glm { /// @addtogroup gtx_integer /// @{ //! Returns x raised to the y power. //! From GLM_GTX_integer extension. GLM_FUNC_DECL int pow(int x, uint y); //! Returns the positive square root of x. //! From GLM_GTX_integer extension. GLM_FUNC_DECL int sqrt(int x); //! Returns the floor log2 of x. //! From GLM_GTX_integer extension. GLM_FUNC_DECL unsigned int floor_log2(unsigned int x); //! Modulus. Returns x - y * floor(x / y) for each component in x using the floating point value y. //! From GLM_GTX_integer extension. GLM_FUNC_DECL int mod(int x, int y); //! Return the factorial value of a number (!12 max, integer only) //! From GLM_GTX_integer extension. template GLM_FUNC_DECL genType factorial(genType const& x); //! 32bit signed integer. //! From GLM_GTX_integer extension. typedef signed int sint; //! Returns x raised to the y power. //! From GLM_GTX_integer extension. GLM_FUNC_DECL uint pow(uint x, uint y); //! Returns the positive square root of x. //! From GLM_GTX_integer extension. GLM_FUNC_DECL uint sqrt(uint x); //! Modulus. Returns x - y * floor(x / y) for each component in x using the floating point value y. //! From GLM_GTX_integer extension. GLM_FUNC_DECL uint mod(uint x, uint y); //! Returns the number of leading zeros. //! From GLM_GTX_integer extension. GLM_FUNC_DECL uint nlz(uint x); /// @} }//namespace glm #include "integer.inl" ================================================ FILE: libraries/glm/gtx/integer.inl ================================================ /// @ref gtx_integer namespace glm { // pow GLM_FUNC_QUALIFIER int pow(int x, uint y) { if(y == 0) return x >= 0 ? 1 : -1; int result = x; for(uint i = 1; i < y; ++i) result *= x; return result; } // sqrt: From Christopher J. Musial, An integer square root, Graphics Gems, 1990, page 387 GLM_FUNC_QUALIFIER int sqrt(int x) { if(x <= 1) return x; int NextTrial = x >> 1; int CurrentAnswer; do { CurrentAnswer = NextTrial; NextTrial = (NextTrial + x / NextTrial) >> 1; } while(NextTrial < CurrentAnswer); return CurrentAnswer; } // Henry Gordon Dietz: http://aggregate.org/MAGIC/ namespace detail { GLM_FUNC_QUALIFIER unsigned int ones32(unsigned int x) { /* 32-bit recursive reduction using SWAR... but first step is mapping 2-bit values into sum of 2 1-bit values in sneaky way */ x -= ((x >> 1) & 0x55555555); x = (((x >> 2) & 0x33333333) + (x & 0x33333333)); x = (((x >> 4) + x) & 0x0f0f0f0f); x += (x >> 8); x += (x >> 16); return(x & 0x0000003f); } }//namespace detail // Henry Gordon Dietz: http://aggregate.org/MAGIC/ /* GLM_FUNC_QUALIFIER unsigned int floor_log2(unsigned int x) { x |= (x >> 1); x |= (x >> 2); x |= (x >> 4); x |= (x >> 8); x |= (x >> 16); return _detail::ones32(x) >> 1; } */ // mod GLM_FUNC_QUALIFIER int mod(int x, int y) { return ((x % y) + y) % y; } // factorial (!12 max, integer only) template GLM_FUNC_QUALIFIER genType factorial(genType const& x) { genType Temp = x; genType Result; for(Result = 1; Temp > 1; --Temp) Result *= Temp; return Result; } template GLM_FUNC_QUALIFIER vec<2, T, Q> factorial( vec<2, T, Q> const& x) { return vec<2, T, Q>( factorial(x.x), factorial(x.y)); } template GLM_FUNC_QUALIFIER vec<3, T, Q> factorial( vec<3, T, Q> const& x) { return vec<3, T, Q>( factorial(x.x), factorial(x.y), factorial(x.z)); } template GLM_FUNC_QUALIFIER vec<4, T, Q> factorial( vec<4, T, Q> const& x) { return vec<4, T, Q>( factorial(x.x), factorial(x.y), factorial(x.z), factorial(x.w)); } GLM_FUNC_QUALIFIER uint pow(uint x, uint y) { if (y == 0) return 1u; uint result = x; for(uint i = 1; i < y; ++i) result *= x; return result; } GLM_FUNC_QUALIFIER uint sqrt(uint x) { if(x <= 1) return x; uint NextTrial = x >> 1; uint CurrentAnswer; do { CurrentAnswer = NextTrial; NextTrial = (NextTrial + x / NextTrial) >> 1; } while(NextTrial < CurrentAnswer); return CurrentAnswer; } GLM_FUNC_QUALIFIER uint mod(uint x, uint y) { return x - y * (x / y); } #if(GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_GCC)) GLM_FUNC_QUALIFIER unsigned int nlz(unsigned int x) { return 31u - findMSB(x); } #else // Hackers Delight: http://www.hackersdelight.org/HDcode/nlz.c.txt GLM_FUNC_QUALIFIER unsigned int nlz(unsigned int x) { int y, m, n; y = -int(x >> 16); // If left half of x is 0, m = (y >> 16) & 16; // set n = 16. If left half n = 16 - m; // is nonzero, set n = 0 and x = x >> m; // shift x right 16. // Now x is of the form 0000xxxx. y = x - 0x100; // If positions 8-15 are 0, m = (y >> 16) & 8; // add 8 to n and shift x left 8. n = n + m; x = x << m; y = x - 0x1000; // If positions 12-15 are 0, m = (y >> 16) & 4; // add 4 to n and shift x left 4. n = n + m; x = x << m; y = x - 0x4000; // If positions 14-15 are 0, m = (y >> 16) & 2; // add 2 to n and shift x left 2. n = n + m; x = x << m; y = x >> 14; // Set y = 0, 1, 2, or 3. m = y & ~(y >> 1); // Set m = 0, 1, 2, or 2 resp. return unsigned(n + 2 - m); } #endif//(GLM_COMPILER) }//namespace glm ================================================ FILE: libraries/glm/gtx/intersect.hpp ================================================ /// @ref gtx_intersect /// @file glm/gtx/intersect.hpp /// /// @see core (dependence) /// @see gtx_closest_point (dependence) /// /// @defgroup gtx_intersect GLM_GTX_intersect /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Add intersection functions #pragma once // Dependency: #include #include #include "../glm.hpp" #include "../geometric.hpp" #include "../gtx/closest_point.hpp" #include "../gtx/vector_query.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_closest_point is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_closest_point extension included") # endif #endif namespace glm { /// @addtogroup gtx_intersect /// @{ //! Compute the intersection of a ray and a plane. //! Ray direction and plane normal must be unit length. //! From GLM_GTX_intersect extension. template GLM_FUNC_DECL bool intersectRayPlane( genType const& orig, genType const& dir, genType const& planeOrig, genType const& planeNormal, typename genType::value_type & intersectionDistance); //! Compute the intersection of a ray and a triangle. /// Based om Tomas Möller implementation http://fileadmin.cs.lth.se/cs/Personal/Tomas_Akenine-Moller/raytri/ //! From GLM_GTX_intersect extension. template GLM_FUNC_DECL bool intersectRayTriangle( vec<3, T, Q> const& orig, vec<3, T, Q> const& dir, vec<3, T, Q> const& v0, vec<3, T, Q> const& v1, vec<3, T, Q> const& v2, vec<2, T, Q>& baryPosition, T& distance); //! Compute the intersection of a line and a triangle. //! From GLM_GTX_intersect extension. template GLM_FUNC_DECL bool intersectLineTriangle( genType const& orig, genType const& dir, genType const& vert0, genType const& vert1, genType const& vert2, genType & position); //! Compute the intersection distance of a ray and a sphere. //! The ray direction vector is unit length. //! From GLM_GTX_intersect extension. template GLM_FUNC_DECL bool intersectRaySphere( genType const& rayStarting, genType const& rayNormalizedDirection, genType const& sphereCenter, typename genType::value_type const sphereRadiusSquered, typename genType::value_type & intersectionDistance); //! Compute the intersection of a ray and a sphere. //! From GLM_GTX_intersect extension. template GLM_FUNC_DECL bool intersectRaySphere( genType const& rayStarting, genType const& rayNormalizedDirection, genType const& sphereCenter, const typename genType::value_type sphereRadius, genType & intersectionPosition, genType & intersectionNormal); //! Compute the intersection of a line and a sphere. //! From GLM_GTX_intersect extension template GLM_FUNC_DECL bool intersectLineSphere( genType const& point0, genType const& point1, genType const& sphereCenter, typename genType::value_type sphereRadius, genType & intersectionPosition1, genType & intersectionNormal1, genType & intersectionPosition2 = genType(), genType & intersectionNormal2 = genType()); /// @} }//namespace glm #include "intersect.inl" ================================================ FILE: libraries/glm/gtx/intersect.inl ================================================ /// @ref gtx_intersect namespace glm { template GLM_FUNC_QUALIFIER bool intersectRayPlane ( genType const& orig, genType const& dir, genType const& planeOrig, genType const& planeNormal, typename genType::value_type & intersectionDistance ) { typename genType::value_type d = glm::dot(dir, planeNormal); typename genType::value_type Epsilon = std::numeric_limits::epsilon(); if(glm::abs(d) > Epsilon) // if dir and planeNormal are not perpendicular { typename genType::value_type const tmp_intersectionDistance = glm::dot(planeOrig - orig, planeNormal) / d; if (tmp_intersectionDistance > static_cast(0)) { // allow only intersections intersectionDistance = tmp_intersectionDistance; return true; } } return false; } template GLM_FUNC_QUALIFIER bool intersectRayTriangle ( vec<3, T, Q> const& orig, vec<3, T, Q> const& dir, vec<3, T, Q> const& vert0, vec<3, T, Q> const& vert1, vec<3, T, Q> const& vert2, vec<2, T, Q>& baryPosition, T& distance ) { // find vectors for two edges sharing vert0 vec<3, T, Q> const edge1 = vert1 - vert0; vec<3, T, Q> const edge2 = vert2 - vert0; // begin calculating determinant - also used to calculate U parameter vec<3, T, Q> const p = glm::cross(dir, edge2); // if determinant is near zero, ray lies in plane of triangle T const det = glm::dot(edge1, p); vec<3, T, Q> Perpendicular(0); if(det > std::numeric_limits::epsilon()) { // calculate distance from vert0 to ray origin vec<3, T, Q> const dist = orig - vert0; // calculate U parameter and test bounds baryPosition.x = glm::dot(dist, p); if(baryPosition.x < static_cast(0) || baryPosition.x > det) return false; // prepare to test V parameter Perpendicular = glm::cross(dist, edge1); // calculate V parameter and test bounds baryPosition.y = glm::dot(dir, Perpendicular); if((baryPosition.y < static_cast(0)) || ((baryPosition.x + baryPosition.y) > det)) return false; } else if(det < -std::numeric_limits::epsilon()) { // calculate distance from vert0 to ray origin vec<3, T, Q> const dist = orig - vert0; // calculate U parameter and test bounds baryPosition.x = glm::dot(dist, p); if((baryPosition.x > static_cast(0)) || (baryPosition.x < det)) return false; // prepare to test V parameter Perpendicular = glm::cross(dist, edge1); // calculate V parameter and test bounds baryPosition.y = glm::dot(dir, Perpendicular); if((baryPosition.y > static_cast(0)) || (baryPosition.x + baryPosition.y < det)) return false; } else return false; // ray is parallel to the plane of the triangle T inv_det = static_cast(1) / det; // calculate distance, ray intersects triangle distance = glm::dot(edge2, Perpendicular) * inv_det; baryPosition *= inv_det; return true; } template GLM_FUNC_QUALIFIER bool intersectLineTriangle ( genType const& orig, genType const& dir, genType const& vert0, genType const& vert1, genType const& vert2, genType & position ) { typename genType::value_type Epsilon = std::numeric_limits::epsilon(); genType edge1 = vert1 - vert0; genType edge2 = vert2 - vert0; genType Perpendicular = cross(dir, edge2); float det = dot(edge1, Perpendicular); if (det > -Epsilon && det < Epsilon) return false; typename genType::value_type inv_det = typename genType::value_type(1) / det; genType Tengant = orig - vert0; position.y = dot(Tengant, Perpendicular) * inv_det; if (position.y < typename genType::value_type(0) || position.y > typename genType::value_type(1)) return false; genType Cotengant = cross(Tengant, edge1); position.z = dot(dir, Cotengant) * inv_det; if (position.z < typename genType::value_type(0) || position.y + position.z > typename genType::value_type(1)) return false; position.x = dot(edge2, Cotengant) * inv_det; return true; } template GLM_FUNC_QUALIFIER bool intersectRaySphere ( genType const& rayStarting, genType const& rayNormalizedDirection, genType const& sphereCenter, const typename genType::value_type sphereRadiusSquered, typename genType::value_type & intersectionDistance ) { typename genType::value_type Epsilon = std::numeric_limits::epsilon(); genType diff = sphereCenter - rayStarting; typename genType::value_type t0 = dot(diff, rayNormalizedDirection); typename genType::value_type dSquared = dot(diff, diff) - t0 * t0; if( dSquared > sphereRadiusSquered ) { return false; } typename genType::value_type t1 = sqrt( sphereRadiusSquered - dSquared ); intersectionDistance = t0 > t1 + Epsilon ? t0 - t1 : t0 + t1; return intersectionDistance > Epsilon; } template GLM_FUNC_QUALIFIER bool intersectRaySphere ( genType const& rayStarting, genType const& rayNormalizedDirection, genType const& sphereCenter, const typename genType::value_type sphereRadius, genType & intersectionPosition, genType & intersectionNormal ) { typename genType::value_type distance; if( intersectRaySphere( rayStarting, rayNormalizedDirection, sphereCenter, sphereRadius * sphereRadius, distance ) ) { intersectionPosition = rayStarting + rayNormalizedDirection * distance; intersectionNormal = (intersectionPosition - sphereCenter) / sphereRadius; return true; } return false; } template GLM_FUNC_QUALIFIER bool intersectLineSphere ( genType const& point0, genType const& point1, genType const& sphereCenter, typename genType::value_type sphereRadius, genType & intersectionPoint1, genType & intersectionNormal1, genType & intersectionPoint2, genType & intersectionNormal2 ) { typename genType::value_type Epsilon = std::numeric_limits::epsilon(); genType dir = normalize(point1 - point0); genType diff = sphereCenter - point0; typename genType::value_type t0 = dot(diff, dir); typename genType::value_type dSquared = dot(diff, diff) - t0 * t0; if( dSquared > sphereRadius * sphereRadius ) { return false; } typename genType::value_type t1 = sqrt( sphereRadius * sphereRadius - dSquared ); if( t0 < t1 + Epsilon ) t1 = -t1; intersectionPoint1 = point0 + dir * (t0 - t1); intersectionNormal1 = (intersectionPoint1 - sphereCenter) / sphereRadius; intersectionPoint2 = point0 + dir * (t0 + t1); intersectionNormal2 = (intersectionPoint2 - sphereCenter) / sphereRadius; return true; } }//namespace glm ================================================ FILE: libraries/glm/gtx/io.hpp ================================================ /// @ref gtx_io /// @file glm/gtx/io.hpp /// @author Jan P Springer (regnirpsj@gmail.com) /// /// @see core (dependence) /// @see gtc_matrix_access (dependence) /// @see gtc_quaternion (dependence) /// /// @defgroup gtx_io GLM_GTX_io /// @ingroup gtx /// /// Include to use the features of this extension. /// /// std::[w]ostream support for glm types /// /// std::[w]ostream support for glm types + qualifier/width/etc. manipulators /// based on howard hinnant's std::chrono io proposal /// [http://home.roadrunner.com/~hinnant/bloomington/chrono_io.html] #pragma once // Dependency: #include "../glm.hpp" #include "../gtx/quaternion.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_io is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_io extension included") # endif #endif #include // std::basic_ostream<> (fwd) #include // std::locale, std::locale::facet, std::locale::id #include // std::pair<> namespace glm { /// @addtogroup gtx_io /// @{ namespace io { enum order_type { column_major, row_major}; template class format_punct : public std::locale::facet { typedef CTy char_type; public: static std::locale::id id; bool formatted; unsigned precision; unsigned width; char_type separator; char_type delim_left; char_type delim_right; char_type space; char_type newline; order_type order; GLM_FUNC_DECL explicit format_punct(size_t a = 0); GLM_FUNC_DECL explicit format_punct(format_punct const&); }; template > class basic_state_saver { public: GLM_FUNC_DECL explicit basic_state_saver(std::basic_ios&); GLM_FUNC_DECL ~basic_state_saver(); private: typedef ::std::basic_ios state_type; typedef typename state_type::char_type char_type; typedef ::std::ios_base::fmtflags flags_type; typedef ::std::streamsize streamsize_type; typedef ::std::locale const locale_type; state_type& state_; flags_type flags_; streamsize_type precision_; streamsize_type width_; char_type fill_; locale_type locale_; GLM_FUNC_DECL basic_state_saver& operator=(basic_state_saver const&); }; typedef basic_state_saver state_saver; typedef basic_state_saver wstate_saver; template > class basic_format_saver { public: GLM_FUNC_DECL explicit basic_format_saver(std::basic_ios&); GLM_FUNC_DECL ~basic_format_saver(); private: basic_state_saver const bss_; GLM_FUNC_DECL basic_format_saver& operator=(basic_format_saver const&); }; typedef basic_format_saver format_saver; typedef basic_format_saver wformat_saver; struct precision { unsigned value; GLM_FUNC_DECL explicit precision(unsigned); }; struct width { unsigned value; GLM_FUNC_DECL explicit width(unsigned); }; template struct delimeter { CTy value[3]; GLM_FUNC_DECL explicit delimeter(CTy /* left */, CTy /* right */, CTy /* separator */ = ','); }; struct order { order_type value; GLM_FUNC_DECL explicit order(order_type); }; // functions, inlined (inline) template FTy const& get_facet(std::basic_ios&); template std::basic_ios& formatted(std::basic_ios&); template std::basic_ios& unformattet(std::basic_ios&); template std::basic_ostream& operator<<(std::basic_ostream&, precision const&); template std::basic_ostream& operator<<(std::basic_ostream&, width const&); template std::basic_ostream& operator<<(std::basic_ostream&, delimeter const&); template std::basic_ostream& operator<<(std::basic_ostream&, order const&); }//namespace io template GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, qua const&); template GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, vec<1, T, Q> const&); template GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, vec<2, T, Q> const&); template GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, vec<3, T, Q> const&); template GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, vec<4, T, Q> const&); template GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<2, 2, T, Q> const&); template GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<2, 3, T, Q> const&); template GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<2, 4, T, Q> const&); template GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<3, 2, T, Q> const&); template GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<3, 3, T, Q> const&); template GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<3, 4, T, Q> const&); template GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<4, 2, T, Q> const&); template GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<4, 3, T, Q> const&); template GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<4, 4, T, Q> const&); template GLM_FUNC_DECL std::basic_ostream & operator<<(std::basic_ostream &, std::pair const, mat<4, 4, T, Q> const> const&); /// @} }//namespace glm #include "io.inl" ================================================ FILE: libraries/glm/gtx/io.inl ================================================ /// @ref gtx_io /// @author Jan P Springer (regnirpsj@gmail.com) #include // std::fixed, std::setfill<>, std::setprecision, std::right, std::setw #include // std::basic_ostream<> #include "../gtc/matrix_access.hpp" // glm::col, glm::row #include "../gtx/type_trait.hpp" // glm::type<> namespace glm{ namespace io { template GLM_FUNC_QUALIFIER format_punct::format_punct(size_t a) : std::locale::facet(a) , formatted(true) , precision(3) , width(1 + 4 + 1 + precision) , separator(',') , delim_left('[') , delim_right(']') , space(' ') , newline('\n') , order(column_major) {} template GLM_FUNC_QUALIFIER format_punct::format_punct(format_punct const& a) : std::locale::facet(0) , formatted(a.formatted) , precision(a.precision) , width(a.width) , separator(a.separator) , delim_left(a.delim_left) , delim_right(a.delim_right) , space(a.space) , newline(a.newline) , order(a.order) {} template std::locale::id format_punct::id; template GLM_FUNC_QUALIFIER basic_state_saver::basic_state_saver(std::basic_ios& a) : state_(a) , flags_(a.flags()) , precision_(a.precision()) , width_(a.width()) , fill_(a.fill()) , locale_(a.getloc()) {} template GLM_FUNC_QUALIFIER basic_state_saver::~basic_state_saver() { state_.imbue(locale_); state_.fill(fill_); state_.width(width_); state_.precision(precision_); state_.flags(flags_); } template GLM_FUNC_QUALIFIER basic_format_saver::basic_format_saver(std::basic_ios& a) : bss_(a) { a.imbue(std::locale(a.getloc(), new format_punct(get_facet >(a)))); } template GLM_FUNC_QUALIFIER basic_format_saver::~basic_format_saver() {} GLM_FUNC_QUALIFIER precision::precision(unsigned a) : value(a) {} GLM_FUNC_QUALIFIER width::width(unsigned a) : value(a) {} template GLM_FUNC_QUALIFIER delimeter::delimeter(CTy a, CTy b, CTy c) : value() { value[0] = a; value[1] = b; value[2] = c; } GLM_FUNC_QUALIFIER order::order(order_type a) : value(a) {} template GLM_FUNC_QUALIFIER FTy const& get_facet(std::basic_ios& ios) { if(!std::has_facet(ios.getloc())) ios.imbue(std::locale(ios.getloc(), new FTy)); return std::use_facet(ios.getloc()); } template GLM_FUNC_QUALIFIER std::basic_ios& formatted(std::basic_ios& ios) { const_cast&>(get_facet >(ios)).formatted = true; return ios; } template GLM_FUNC_QUALIFIER std::basic_ios& unformatted(std::basic_ios& ios) { const_cast&>(get_facet >(ios)).formatted = false; return ios; } template GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, precision const& a) { const_cast&>(get_facet >(os)).precision = a.value; return os; } template GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, width const& a) { const_cast&>(get_facet >(os)).width = a.value; return os; } template GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, delimeter const& a) { format_punct & fmt(const_cast&>(get_facet >(os))); fmt.delim_left = a.value[0]; fmt.delim_right = a.value[1]; fmt.separator = a.value[2]; return os; } template GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, order const& a) { const_cast&>(get_facet >(os)).order = a.value; return os; } } // namespace io namespace detail { template GLM_FUNC_QUALIFIER std::basic_ostream& print_vector_on(std::basic_ostream& os, V const& a) { typename std::basic_ostream::sentry const cerberus(os); if(cerberus) { io::format_punct const& fmt(io::get_facet >(os)); length_t const& components(type::components); if(fmt.formatted) { io::basic_state_saver const bss(os); os << std::fixed << std::right << std::setprecision(fmt.precision) << std::setfill(fmt.space) << fmt.delim_left; for(length_t i(0); i < components; ++i) { os << std::setw(fmt.width) << a[i]; if(components-1 != i) os << fmt.separator; } os << fmt.delim_right; } else { for(length_t i(0); i < components; ++i) { os << a[i]; if(components-1 != i) os << fmt.space; } } } return os; } }//namespace detail template GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, qua const& a) { return detail::print_vector_on(os, a); } template GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, vec<1, T, Q> const& a) { return detail::print_vector_on(os, a); } template GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, vec<2, T, Q> const& a) { return detail::print_vector_on(os, a); } template GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, vec<3, T, Q> const& a) { return detail::print_vector_on(os, a); } template GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, vec<4, T, Q> const& a) { return detail::print_vector_on(os, a); } namespace detail { template class M, length_t C, length_t R, typename T, qualifier Q> GLM_FUNC_QUALIFIER std::basic_ostream& print_matrix_on(std::basic_ostream& os, M const& a) { typename std::basic_ostream::sentry const cerberus(os); if(cerberus) { io::format_punct const& fmt(io::get_facet >(os)); length_t const& cols(type >::cols); length_t const& rows(type >::rows); if(fmt.formatted) { os << fmt.newline << fmt.delim_left; switch(fmt.order) { case io::column_major: { for(length_t i(0); i < rows; ++i) { if (0 != i) os << fmt.space; os << row(a, i); if(rows-1 != i) os << fmt.newline; } } break; case io::row_major: { for(length_t i(0); i < cols; ++i) { if(0 != i) os << fmt.space; os << column(a, i); if(cols-1 != i) os << fmt.newline; } } break; } os << fmt.delim_right; } else { switch (fmt.order) { case io::column_major: { for(length_t i(0); i < cols; ++i) { os << column(a, i); if(cols - 1 != i) os << fmt.space; } } break; case io::row_major: { for (length_t i(0); i < rows; ++i) { os << row(a, i); if (rows-1 != i) os << fmt.space; } } break; } } } return os; } }//namespace detail template GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, mat<2, 2, T, Q> const& a) { return detail::print_matrix_on(os, a); } template GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, mat<2, 3, T, Q> const& a) { return detail::print_matrix_on(os, a); } template GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, mat<2, 4, T, Q> const& a) { return detail::print_matrix_on(os, a); } template GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, mat<3, 2, T, Q> const& a) { return detail::print_matrix_on(os, a); } template GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, mat<3, 3, T, Q> const& a) { return detail::print_matrix_on(os, a); } template GLM_FUNC_QUALIFIER std::basic_ostream & operator<<(std::basic_ostream& os, mat<3, 4, T, Q> const& a) { return detail::print_matrix_on(os, a); } template GLM_FUNC_QUALIFIER std::basic_ostream & operator<<(std::basic_ostream& os, mat<4, 2, T, Q> const& a) { return detail::print_matrix_on(os, a); } template GLM_FUNC_QUALIFIER std::basic_ostream & operator<<(std::basic_ostream& os, mat<4, 3, T, Q> const& a) { return detail::print_matrix_on(os, a); } template GLM_FUNC_QUALIFIER std::basic_ostream & operator<<(std::basic_ostream& os, mat<4, 4, T, Q> const& a) { return detail::print_matrix_on(os, a); } namespace detail { template class M, length_t C, length_t R, typename T, qualifier Q> GLM_FUNC_QUALIFIER std::basic_ostream& print_matrix_pair_on(std::basic_ostream& os, std::pair const, M const> const& a) { typename std::basic_ostream::sentry const cerberus(os); if(cerberus) { io::format_punct const& fmt(io::get_facet >(os)); M const& ml(a.first); M const& mr(a.second); length_t const& cols(type >::cols); length_t const& rows(type >::rows); if(fmt.formatted) { os << fmt.newline << fmt.delim_left; switch(fmt.order) { case io::column_major: { for(length_t i(0); i < rows; ++i) { if(0 != i) os << fmt.space; os << row(ml, i) << ((rows-1 != i) ? fmt.space : fmt.delim_right) << fmt.space << ((0 != i) ? fmt.space : fmt.delim_left) << row(mr, i); if(rows-1 != i) os << fmt.newline; } } break; case io::row_major: { for(length_t i(0); i < cols; ++i) { if(0 != i) os << fmt.space; os << column(ml, i) << ((cols-1 != i) ? fmt.space : fmt.delim_right) << fmt.space << ((0 != i) ? fmt.space : fmt.delim_left) << column(mr, i); if(cols-1 != i) os << fmt.newline; } } break; } os << fmt.delim_right; } else { os << ml << fmt.space << mr; } } return os; } }//namespace detail template GLM_FUNC_QUALIFIER std::basic_ostream& operator<<( std::basic_ostream & os, std::pair const, mat<4, 4, T, Q> const> const& a) { return detail::print_matrix_pair_on(os, a); } }//namespace glm ================================================ FILE: libraries/glm/gtx/log_base.hpp ================================================ /// @ref gtx_log_base /// @file glm/gtx/log_base.hpp /// /// @see core (dependence) /// /// @defgroup gtx_log_base GLM_GTX_log_base /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Logarithm for any base. base can be a vector or a scalar. #pragma once // Dependency: #include "../glm.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_log_base is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_log_base extension included") # endif #endif namespace glm { /// @addtogroup gtx_log_base /// @{ /// Logarithm for any base. /// From GLM_GTX_log_base. template GLM_FUNC_DECL genType log( genType const& x, genType const& base); /// Logarithm for any base. /// From GLM_GTX_log_base. template GLM_FUNC_DECL vec sign( vec const& x, vec const& base); /// @} }//namespace glm #include "log_base.inl" ================================================ FILE: libraries/glm/gtx/log_base.inl ================================================ /// @ref gtx_log_base namespace glm { template GLM_FUNC_QUALIFIER genType log(genType const& x, genType const& base) { return glm::log(x) / glm::log(base); } template GLM_FUNC_QUALIFIER vec log(vec const& x, vec const& base) { return glm::log(x) / glm::log(base); } }//namespace glm ================================================ FILE: libraries/glm/gtx/matrix_cross_product.hpp ================================================ /// @ref gtx_matrix_cross_product /// @file glm/gtx/matrix_cross_product.hpp /// /// @see core (dependence) /// @see gtx_extented_min_max (dependence) /// /// @defgroup gtx_matrix_cross_product GLM_GTX_matrix_cross_product /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Build cross product matrices #pragma once // Dependency: #include "../glm.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_matrix_cross_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_matrix_cross_product extension included") # endif #endif namespace glm { /// @addtogroup gtx_matrix_cross_product /// @{ //! Build a cross product matrix. //! From GLM_GTX_matrix_cross_product extension. template GLM_FUNC_DECL mat<3, 3, T, Q> matrixCross3( vec<3, T, Q> const& x); //! Build a cross product matrix. //! From GLM_GTX_matrix_cross_product extension. template GLM_FUNC_DECL mat<4, 4, T, Q> matrixCross4( vec<3, T, Q> const& x); /// @} }//namespace glm #include "matrix_cross_product.inl" ================================================ FILE: libraries/glm/gtx/matrix_cross_product.inl ================================================ /// @ref gtx_matrix_cross_product namespace glm { template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> matrixCross3 ( vec<3, T, Q> const& x ) { mat<3, 3, T, Q> Result(T(0)); Result[0][1] = x.z; Result[1][0] = -x.z; Result[0][2] = -x.y; Result[2][0] = x.y; Result[1][2] = x.x; Result[2][1] = -x.x; return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> matrixCross4 ( vec<3, T, Q> const& x ) { mat<4, 4, T, Q> Result(T(0)); Result[0][1] = x.z; Result[1][0] = -x.z; Result[0][2] = -x.y; Result[2][0] = x.y; Result[1][2] = x.x; Result[2][1] = -x.x; return Result; } }//namespace glm ================================================ FILE: libraries/glm/gtx/matrix_decompose.hpp ================================================ /// @ref gtx_matrix_decompose /// @file glm/gtx/matrix_decompose.hpp /// /// @see core (dependence) /// /// @defgroup gtx_matrix_decompose GLM_GTX_matrix_decompose /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Decomposes a model matrix to translations, rotation and scale components #pragma once // Dependencies #include "../mat4x4.hpp" #include "../vec3.hpp" #include "../vec4.hpp" #include "../geometric.hpp" #include "../gtc/quaternion.hpp" #include "../gtc/matrix_transform.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_matrix_decompose is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_matrix_decompose extension included") # endif #endif namespace glm { /// @addtogroup gtx_matrix_decompose /// @{ /// Decomposes a model matrix to translations, rotation and scale components /// @see gtx_matrix_decompose template GLM_FUNC_DECL bool decompose( mat<4, 4, T, Q> const& modelMatrix, vec<3, T, Q> & scale, qua & orientation, vec<3, T, Q> & translation, vec<3, T, Q> & skew, vec<4, T, Q> & perspective); /// @} }//namespace glm #include "matrix_decompose.inl" ================================================ FILE: libraries/glm/gtx/matrix_decompose.inl ================================================ /// @ref gtx_matrix_decompose #include "../gtc/constants.hpp" #include "../gtc/epsilon.hpp" namespace glm{ namespace detail { /// Make a linear combination of two vectors and return the result. // result = (a * ascl) + (b * bscl) template GLM_FUNC_QUALIFIER vec<3, T, Q> combine( vec<3, T, Q> const& a, vec<3, T, Q> const& b, T ascl, T bscl) { return (a * ascl) + (b * bscl); } template GLM_FUNC_QUALIFIER vec<3, T, Q> scale(vec<3, T, Q> const& v, T desiredLength) { return v * desiredLength / length(v); } }//namespace detail // Matrix decompose // http://www.opensource.apple.com/source/WebCore/WebCore-514/platform/graphics/transforms/TransformationMatrix.cpp // Decomposes the mode matrix to translations,rotation scale components template GLM_FUNC_QUALIFIER bool decompose(mat<4, 4, T, Q> const& ModelMatrix, vec<3, T, Q> & Scale, qua & Orientation, vec<3, T, Q> & Translation, vec<3, T, Q> & Skew, vec<4, T, Q> & Perspective) { mat<4, 4, T, Q> LocalMatrix(ModelMatrix); // Normalize the matrix. if(epsilonEqual(LocalMatrix[3][3], static_cast(0), epsilon())) return false; for(length_t i = 0; i < 4; ++i) for(length_t j = 0; j < 4; ++j) LocalMatrix[i][j] /= LocalMatrix[3][3]; // perspectiveMatrix is used to solve for perspective, but it also provides // an easy way to test for singularity of the upper 3x3 component. mat<4, 4, T, Q> PerspectiveMatrix(LocalMatrix); for(length_t i = 0; i < 3; i++) PerspectiveMatrix[i][3] = static_cast(0); PerspectiveMatrix[3][3] = static_cast(1); /// TODO: Fixme! if(epsilonEqual(determinant(PerspectiveMatrix), static_cast(0), epsilon())) return false; // First, isolate perspective. This is the messiest. if( epsilonNotEqual(LocalMatrix[0][3], static_cast(0), epsilon()) || epsilonNotEqual(LocalMatrix[1][3], static_cast(0), epsilon()) || epsilonNotEqual(LocalMatrix[2][3], static_cast(0), epsilon())) { // rightHandSide is the right hand side of the equation. vec<4, T, Q> RightHandSide; RightHandSide[0] = LocalMatrix[0][3]; RightHandSide[1] = LocalMatrix[1][3]; RightHandSide[2] = LocalMatrix[2][3]; RightHandSide[3] = LocalMatrix[3][3]; // Solve the equation by inverting PerspectiveMatrix and multiplying // rightHandSide by the inverse. (This is the easiest way, not // necessarily the best.) mat<4, 4, T, Q> InversePerspectiveMatrix = glm::inverse(PerspectiveMatrix);// inverse(PerspectiveMatrix, inversePerspectiveMatrix); mat<4, 4, T, Q> TransposedInversePerspectiveMatrix = glm::transpose(InversePerspectiveMatrix);// transposeMatrix4(inversePerspectiveMatrix, transposedInversePerspectiveMatrix); Perspective = TransposedInversePerspectiveMatrix * RightHandSide; // v4MulPointByMatrix(rightHandSide, transposedInversePerspectiveMatrix, perspectivePoint); // Clear the perspective partition LocalMatrix[0][3] = LocalMatrix[1][3] = LocalMatrix[2][3] = static_cast(0); LocalMatrix[3][3] = static_cast(1); } else { // No perspective. Perspective = vec<4, T, Q>(0, 0, 0, 1); } // Next take care of translation (easy). Translation = vec<3, T, Q>(LocalMatrix[3]); LocalMatrix[3] = vec<4, T, Q>(0, 0, 0, LocalMatrix[3].w); vec<3, T, Q> Row[3], Pdum3; // Now get scale and shear. for(length_t i = 0; i < 3; ++i) for(length_t j = 0; j < 3; ++j) Row[i][j] = LocalMatrix[i][j]; // Compute X scale factor and normalize first row. Scale.x = length(Row[0]);// v3Length(Row[0]); Row[0] = detail::scale(Row[0], static_cast(1)); // Compute XY shear factor and make 2nd row orthogonal to 1st. Skew.z = dot(Row[0], Row[1]); Row[1] = detail::combine(Row[1], Row[0], static_cast(1), -Skew.z); // Now, compute Y scale and normalize 2nd row. Scale.y = length(Row[1]); Row[1] = detail::scale(Row[1], static_cast(1)); Skew.z /= Scale.y; // Compute XZ and YZ shears, orthogonalize 3rd row. Skew.y = glm::dot(Row[0], Row[2]); Row[2] = detail::combine(Row[2], Row[0], static_cast(1), -Skew.y); Skew.x = glm::dot(Row[1], Row[2]); Row[2] = detail::combine(Row[2], Row[1], static_cast(1), -Skew.x); // Next, get Z scale and normalize 3rd row. Scale.z = length(Row[2]); Row[2] = detail::scale(Row[2], static_cast(1)); Skew.y /= Scale.z; Skew.x /= Scale.z; // At this point, the matrix (in rows[]) is orthonormal. // Check for a coordinate system flip. If the determinant // is -1, then negate the matrix and the scaling factors. Pdum3 = cross(Row[1], Row[2]); // v3Cross(row[1], row[2], Pdum3); if(dot(Row[0], Pdum3) < 0) { for(length_t i = 0; i < 3; i++) { Scale[i] *= static_cast(-1); Row[i] *= static_cast(-1); } } // Now, get the rotations out, as described in the gem. // FIXME - Add the ability to return either quaternions (which are // easier to recompose with) or Euler angles (rx, ry, rz), which // are easier for authors to deal with. The latter will only be useful // when we fix https://bugs.webkit.org/show_bug.cgi?id=23799, so I // will leave the Euler angle code here for now. // ret.rotateY = asin(-Row[0][2]); // if (cos(ret.rotateY) != 0) { // ret.rotateX = atan2(Row[1][2], Row[2][2]); // ret.rotateZ = atan2(Row[0][1], Row[0][0]); // } else { // ret.rotateX = atan2(-Row[2][0], Row[1][1]); // ret.rotateZ = 0; // } int i, j, k = 0; T root, trace = Row[0].x + Row[1].y + Row[2].z; if(trace > static_cast(0)) { root = sqrt(trace + static_cast(1.0)); Orientation.w = static_cast(0.5) * root; root = static_cast(0.5) / root; Orientation.x = root * (Row[1].z - Row[2].y); Orientation.y = root * (Row[2].x - Row[0].z); Orientation.z = root * (Row[0].y - Row[1].x); } // End if > 0 else { static int Next[3] = {1, 2, 0}; i = 0; if(Row[1].y > Row[0].x) i = 1; if(Row[2].z > Row[i][i]) i = 2; j = Next[i]; k = Next[j]; root = sqrt(Row[i][i] - Row[j][j] - Row[k][k] + static_cast(1.0)); Orientation[i] = static_cast(0.5) * root; root = static_cast(0.5) / root; Orientation[j] = root * (Row[i][j] + Row[j][i]); Orientation[k] = root * (Row[i][k] + Row[k][i]); Orientation.w = root * (Row[j][k] - Row[k][j]); } // End if <= 0 return true; } }//namespace glm ================================================ FILE: libraries/glm/gtx/matrix_factorisation.hpp ================================================ /// @ref gtx_matrix_factorisation /// @file glm/gtx/matrix_factorisation.hpp /// /// @see core (dependence) /// /// @defgroup gtx_matrix_factorisation GLM_GTX_matrix_factorisation /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Functions to factor matrices in various forms #pragma once // Dependency: #include "../glm.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_matrix_factorisation is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_matrix_factorisation extension included") # endif #endif /* Suggestions: - Move helper functions flipud and fliplr to another file: They may be helpful in more general circumstances. - Implement other types of matrix factorisation, such as: QL and LQ, L(D)U, eigendecompositions, etc... */ namespace glm { /// @addtogroup gtx_matrix_factorisation /// @{ /// Flips the matrix rows up and down. /// /// From GLM_GTX_matrix_factorisation extension. template GLM_FUNC_DECL mat flipud(mat const& in); /// Flips the matrix columns right and left. /// /// From GLM_GTX_matrix_factorisation extension. template GLM_FUNC_DECL mat fliplr(mat const& in); /// Performs QR factorisation of a matrix. /// Returns 2 matrices, q and r, such that the columns of q are orthonormal and span the same subspace than those of the input matrix, r is an upper triangular matrix, and q*r=in. /// Given an n-by-m input matrix, q has dimensions min(n,m)-by-m, and r has dimensions n-by-min(n,m). /// /// From GLM_GTX_matrix_factorisation extension. template GLM_FUNC_DECL void qr_decompose(mat const& in, mat<(C < R ? C : R), R, T, Q>& q, mat& r); /// Performs RQ factorisation of a matrix. /// Returns 2 matrices, r and q, such that r is an upper triangular matrix, the rows of q are orthonormal and span the same subspace than those of the input matrix, and r*q=in. /// Note that in the context of RQ factorisation, the diagonal is seen as starting in the lower-right corner of the matrix, instead of the usual upper-left. /// Given an n-by-m input matrix, r has dimensions min(n,m)-by-m, and q has dimensions n-by-min(n,m). /// /// From GLM_GTX_matrix_factorisation extension. template GLM_FUNC_DECL void rq_decompose(mat const& in, mat<(C < R ? C : R), R, T, Q>& r, mat& q); /// @} } #include "matrix_factorisation.inl" ================================================ FILE: libraries/glm/gtx/matrix_factorisation.inl ================================================ /// @ref gtx_matrix_factorisation namespace glm { template GLM_FUNC_QUALIFIER mat flipud(mat const& in) { mat tin = transpose(in); tin = fliplr(tin); mat out = transpose(tin); return out; } template GLM_FUNC_QUALIFIER mat fliplr(mat const& in) { mat out; for (length_t i = 0; i < C; i++) { out[i] = in[(C - i) - 1]; } return out; } template GLM_FUNC_QUALIFIER void qr_decompose(mat const& in, mat<(C < R ? C : R), R, T, Q>& q, mat& r) { // Uses modified Gram-Schmidt method // Source: https://en.wikipedia.org/wiki/GramSchmidt_process // And https://en.wikipedia.org/wiki/QR_decomposition //For all the linearly independs columns of the input... // (there can be no more linearly independents columns than there are rows.) for (length_t i = 0; i < (C < R ? C : R); i++) { //Copy in Q the input's i-th column. q[i] = in[i]; //j = [0,i[ // Make that column orthogonal to all the previous ones by substracting to it the non-orthogonal projection of all the previous columns. // Also: Fill the zero elements of R for (length_t j = 0; j < i; j++) { q[i] -= dot(q[i], q[j])*q[j]; r[j][i] = 0; } //Now, Q i-th column is orthogonal to all the previous columns. Normalize it. q[i] = normalize(q[i]); //j = [i,C[ //Finally, compute the corresponding coefficients of R by computing the projection of the resulting column on the other columns of the input. for (length_t j = i; j < C; j++) { r[j][i] = dot(in[j], q[i]); } } } template GLM_FUNC_QUALIFIER void rq_decompose(mat const& in, mat<(C < R ? C : R), R, T, Q>& r, mat& q) { // From https://en.wikipedia.org/wiki/QR_decomposition: // The RQ decomposition transforms a matrix A into the product of an upper triangular matrix R (also known as right-triangular) and an orthogonal matrix Q. The only difference from QR decomposition is the order of these matrices. // QR decomposition is GramSchmidt orthogonalization of columns of A, started from the first column. // RQ decomposition is GramSchmidt orthogonalization of rows of A, started from the last row. mat tin = transpose(in); tin = fliplr(tin); mat tr; mat<(C < R ? C : R), C, T, Q> tq; qr_decompose(tin, tq, tr); tr = fliplr(tr); r = transpose(tr); r = fliplr(r); tq = fliplr(tq); q = transpose(tq); } } //namespace glm ================================================ FILE: libraries/glm/gtx/matrix_interpolation.hpp ================================================ /// @ref gtx_matrix_interpolation /// @file glm/gtx/matrix_interpolation.hpp /// @author Ghenadii Ursachi (the.asteroth@gmail.com) /// /// @see core (dependence) /// /// @defgroup gtx_matrix_interpolation GLM_GTX_matrix_interpolation /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Allows to directly interpolate two matrices. #pragma once // Dependency: #include "../glm.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_matrix_interpolation is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_matrix_interpolation extension included") # endif #endif namespace glm { /// @addtogroup gtx_matrix_interpolation /// @{ /// Get the axis and angle of the rotation from a matrix. /// From GLM_GTX_matrix_interpolation extension. template GLM_FUNC_DECL void axisAngle( mat<4, 4, T, Q> const& Mat, vec<3, T, Q> & Axis, T & Angle); /// Build a matrix from axis and angle. /// From GLM_GTX_matrix_interpolation extension. template GLM_FUNC_DECL mat<4, 4, T, Q> axisAngleMatrix( vec<3, T, Q> const& Axis, T const Angle); /// Extracts the rotation part of a matrix. /// From GLM_GTX_matrix_interpolation extension. template GLM_FUNC_DECL mat<4, 4, T, Q> extractMatrixRotation( mat<4, 4, T, Q> const& Mat); /// Build a interpolation of 4 * 4 matrixes. /// From GLM_GTX_matrix_interpolation extension. /// Warning! works only with rotation and/or translation matrixes, scale will generate unexpected results. template GLM_FUNC_DECL mat<4, 4, T, Q> interpolate( mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2, T const Delta); /// @} }//namespace glm #include "matrix_interpolation.inl" ================================================ FILE: libraries/glm/gtx/matrix_interpolation.inl ================================================ /// @ref gtx_matrix_interpolation #include "../gtc/constants.hpp" namespace glm { template GLM_FUNC_QUALIFIER void axisAngle(mat<4, 4, T, Q> const& m, vec<3, T, Q> & axis, T& angle) { T epsilon = static_cast(0.01); T epsilon2 = static_cast(0.1); if((abs(m[1][0] - m[0][1]) < epsilon) && (abs(m[2][0] - m[0][2]) < epsilon) && (abs(m[2][1] - m[1][2]) < epsilon)) { if ((abs(m[1][0] + m[0][1]) < epsilon2) && (abs(m[2][0] + m[0][2]) < epsilon2) && (abs(m[2][1] + m[1][2]) < epsilon2) && (abs(m[0][0] + m[1][1] + m[2][2] - static_cast(3.0)) < epsilon2)) { angle = static_cast(0.0); axis.x = static_cast(1.0); axis.y = static_cast(0.0); axis.z = static_cast(0.0); return; } angle = static_cast(3.1415926535897932384626433832795); T xx = (m[0][0] + static_cast(1.0)) * static_cast(0.5); T yy = (m[1][1] + static_cast(1.0)) * static_cast(0.5); T zz = (m[2][2] + static_cast(1.0)) * static_cast(0.5); T xy = (m[1][0] + m[0][1]) * static_cast(0.25); T xz = (m[2][0] + m[0][2]) * static_cast(0.25); T yz = (m[2][1] + m[1][2]) * static_cast(0.25); if((xx > yy) && (xx > zz)) { if(xx < epsilon) { axis.x = static_cast(0.0); axis.y = static_cast(0.7071); axis.z = static_cast(0.7071); } else { axis.x = sqrt(xx); axis.y = xy / axis.x; axis.z = xz / axis.x; } } else if (yy > zz) { if(yy < epsilon) { axis.x = static_cast(0.7071); axis.y = static_cast(0.0); axis.z = static_cast(0.7071); } else { axis.y = sqrt(yy); axis.x = xy / axis.y; axis.z = yz / axis.y; } } else { if (zz < epsilon) { axis.x = static_cast(0.7071); axis.y = static_cast(0.7071); axis.z = static_cast(0.0); } else { axis.z = sqrt(zz); axis.x = xz / axis.z; axis.y = yz / axis.z; } } return; } T s = sqrt((m[2][1] - m[1][2]) * (m[2][1] - m[1][2]) + (m[2][0] - m[0][2]) * (m[2][0] - m[0][2]) + (m[1][0] - m[0][1]) * (m[1][0] - m[0][1])); if (glm::abs(s) < T(0.001)) s = static_cast(1); T const angleCos = (m[0][0] + m[1][1] + m[2][2] - static_cast(1)) * static_cast(0.5); if(angleCos - static_cast(1) < epsilon) angle = pi() * static_cast(0.25); else angle = acos(angleCos); axis.x = (m[1][2] - m[2][1]) / s; axis.y = (m[2][0] - m[0][2]) / s; axis.z = (m[0][1] - m[1][0]) / s; } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> axisAngleMatrix(vec<3, T, Q> const& axis, T const angle) { T c = cos(angle); T s = sin(angle); T t = static_cast(1) - c; vec<3, T, Q> n = normalize(axis); return mat<4, 4, T, Q>( t * n.x * n.x + c, t * n.x * n.y + n.z * s, t * n.x * n.z - n.y * s, static_cast(0.0), t * n.x * n.y - n.z * s, t * n.y * n.y + c, t * n.y * n.z + n.x * s, static_cast(0.0), t * n.x * n.z + n.y * s, t * n.y * n.z - n.x * s, t * n.z * n.z + c, static_cast(0.0), static_cast(0.0), static_cast(0.0), static_cast(0.0), static_cast(1.0)); } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> extractMatrixRotation(mat<4, 4, T, Q> const& m) { return mat<4, 4, T, Q>( m[0][0], m[0][1], m[0][2], static_cast(0.0), m[1][0], m[1][1], m[1][2], static_cast(0.0), m[2][0], m[2][1], m[2][2], static_cast(0.0), static_cast(0.0), static_cast(0.0), static_cast(0.0), static_cast(1.0)); } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> interpolate(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2, T const delta) { mat<4, 4, T, Q> m1rot = extractMatrixRotation(m1); mat<4, 4, T, Q> dltRotation = m2 * transpose(m1rot); vec<3, T, Q> dltAxis; T dltAngle; axisAngle(dltRotation, dltAxis, dltAngle); mat<4, 4, T, Q> out = axisAngleMatrix(dltAxis, dltAngle * delta) * m1rot; out[3][0] = m1[3][0] + delta * (m2[3][0] - m1[3][0]); out[3][1] = m1[3][1] + delta * (m2[3][1] - m1[3][1]); out[3][2] = m1[3][2] + delta * (m2[3][2] - m1[3][2]); return out; } }//namespace glm ================================================ FILE: libraries/glm/gtx/matrix_major_storage.hpp ================================================ /// @ref gtx_matrix_major_storage /// @file glm/gtx/matrix_major_storage.hpp /// /// @see core (dependence) /// @see gtx_extented_min_max (dependence) /// /// @defgroup gtx_matrix_major_storage GLM_GTX_matrix_major_storage /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Build matrices with specific matrix order, row or column #pragma once // Dependency: #include "../glm.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_matrix_major_storage is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_matrix_major_storage extension included") # endif #endif namespace glm { /// @addtogroup gtx_matrix_major_storage /// @{ //! Build a row major matrix from row vectors. //! From GLM_GTX_matrix_major_storage extension. template GLM_FUNC_DECL mat<2, 2, T, Q> rowMajor2( vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); //! Build a row major matrix from other matrix. //! From GLM_GTX_matrix_major_storage extension. template GLM_FUNC_DECL mat<2, 2, T, Q> rowMajor2( mat<2, 2, T, Q> const& m); //! Build a row major matrix from row vectors. //! From GLM_GTX_matrix_major_storage extension. template GLM_FUNC_DECL mat<3, 3, T, Q> rowMajor3( vec<3, T, Q> const& v1, vec<3, T, Q> const& v2, vec<3, T, Q> const& v3); //! Build a row major matrix from other matrix. //! From GLM_GTX_matrix_major_storage extension. template GLM_FUNC_DECL mat<3, 3, T, Q> rowMajor3( mat<3, 3, T, Q> const& m); //! Build a row major matrix from row vectors. //! From GLM_GTX_matrix_major_storage extension. template GLM_FUNC_DECL mat<4, 4, T, Q> rowMajor4( vec<4, T, Q> const& v1, vec<4, T, Q> const& v2, vec<4, T, Q> const& v3, vec<4, T, Q> const& v4); //! Build a row major matrix from other matrix. //! From GLM_GTX_matrix_major_storage extension. template GLM_FUNC_DECL mat<4, 4, T, Q> rowMajor4( mat<4, 4, T, Q> const& m); //! Build a column major matrix from column vectors. //! From GLM_GTX_matrix_major_storage extension. template GLM_FUNC_DECL mat<2, 2, T, Q> colMajor2( vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); //! Build a column major matrix from other matrix. //! From GLM_GTX_matrix_major_storage extension. template GLM_FUNC_DECL mat<2, 2, T, Q> colMajor2( mat<2, 2, T, Q> const& m); //! Build a column major matrix from column vectors. //! From GLM_GTX_matrix_major_storage extension. template GLM_FUNC_DECL mat<3, 3, T, Q> colMajor3( vec<3, T, Q> const& v1, vec<3, T, Q> const& v2, vec<3, T, Q> const& v3); //! Build a column major matrix from other matrix. //! From GLM_GTX_matrix_major_storage extension. template GLM_FUNC_DECL mat<3, 3, T, Q> colMajor3( mat<3, 3, T, Q> const& m); //! Build a column major matrix from column vectors. //! From GLM_GTX_matrix_major_storage extension. template GLM_FUNC_DECL mat<4, 4, T, Q> colMajor4( vec<4, T, Q> const& v1, vec<4, T, Q> const& v2, vec<4, T, Q> const& v3, vec<4, T, Q> const& v4); //! Build a column major matrix from other matrix. //! From GLM_GTX_matrix_major_storage extension. template GLM_FUNC_DECL mat<4, 4, T, Q> colMajor4( mat<4, 4, T, Q> const& m); /// @} }//namespace glm #include "matrix_major_storage.inl" ================================================ FILE: libraries/glm/gtx/matrix_major_storage.inl ================================================ /// @ref gtx_matrix_major_storage namespace glm { template GLM_FUNC_QUALIFIER mat<2, 2, T, Q> rowMajor2 ( vec<2, T, Q> const& v1, vec<2, T, Q> const& v2 ) { mat<2, 2, T, Q> Result; Result[0][0] = v1.x; Result[1][0] = v1.y; Result[0][1] = v2.x; Result[1][1] = v2.y; return Result; } template GLM_FUNC_QUALIFIER mat<2, 2, T, Q> rowMajor2( const mat<2, 2, T, Q>& m) { mat<2, 2, T, Q> Result; Result[0][0] = m[0][0]; Result[0][1] = m[1][0]; Result[1][0] = m[0][1]; Result[1][1] = m[1][1]; return Result; } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> rowMajor3( const vec<3, T, Q>& v1, const vec<3, T, Q>& v2, const vec<3, T, Q>& v3) { mat<3, 3, T, Q> Result; Result[0][0] = v1.x; Result[1][0] = v1.y; Result[2][0] = v1.z; Result[0][1] = v2.x; Result[1][1] = v2.y; Result[2][1] = v2.z; Result[0][2] = v3.x; Result[1][2] = v3.y; Result[2][2] = v3.z; return Result; } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> rowMajor3( const mat<3, 3, T, Q>& m) { mat<3, 3, T, Q> Result; Result[0][0] = m[0][0]; Result[0][1] = m[1][0]; Result[0][2] = m[2][0]; Result[1][0] = m[0][1]; Result[1][1] = m[1][1]; Result[1][2] = m[2][1]; Result[2][0] = m[0][2]; Result[2][1] = m[1][2]; Result[2][2] = m[2][2]; return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rowMajor4( const vec<4, T, Q>& v1, const vec<4, T, Q>& v2, const vec<4, T, Q>& v3, const vec<4, T, Q>& v4) { mat<4, 4, T, Q> Result; Result[0][0] = v1.x; Result[1][0] = v1.y; Result[2][0] = v1.z; Result[3][0] = v1.w; Result[0][1] = v2.x; Result[1][1] = v2.y; Result[2][1] = v2.z; Result[3][1] = v2.w; Result[0][2] = v3.x; Result[1][2] = v3.y; Result[2][2] = v3.z; Result[3][2] = v3.w; Result[0][3] = v4.x; Result[1][3] = v4.y; Result[2][3] = v4.z; Result[3][3] = v4.w; return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rowMajor4( const mat<4, 4, T, Q>& m) { mat<4, 4, T, Q> Result; Result[0][0] = m[0][0]; Result[0][1] = m[1][0]; Result[0][2] = m[2][0]; Result[0][3] = m[3][0]; Result[1][0] = m[0][1]; Result[1][1] = m[1][1]; Result[1][2] = m[2][1]; Result[1][3] = m[3][1]; Result[2][0] = m[0][2]; Result[2][1] = m[1][2]; Result[2][2] = m[2][2]; Result[2][3] = m[3][2]; Result[3][0] = m[0][3]; Result[3][1] = m[1][3]; Result[3][2] = m[2][3]; Result[3][3] = m[3][3]; return Result; } template GLM_FUNC_QUALIFIER mat<2, 2, T, Q> colMajor2( const vec<2, T, Q>& v1, const vec<2, T, Q>& v2) { return mat<2, 2, T, Q>(v1, v2); } template GLM_FUNC_QUALIFIER mat<2, 2, T, Q> colMajor2( const mat<2, 2, T, Q>& m) { return mat<2, 2, T, Q>(m); } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> colMajor3( const vec<3, T, Q>& v1, const vec<3, T, Q>& v2, const vec<3, T, Q>& v3) { return mat<3, 3, T, Q>(v1, v2, v3); } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> colMajor3( const mat<3, 3, T, Q>& m) { return mat<3, 3, T, Q>(m); } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> colMajor4( const vec<4, T, Q>& v1, const vec<4, T, Q>& v2, const vec<4, T, Q>& v3, const vec<4, T, Q>& v4) { return mat<4, 4, T, Q>(v1, v2, v3, v4); } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> colMajor4( const mat<4, 4, T, Q>& m) { return mat<4, 4, T, Q>(m); } }//namespace glm ================================================ FILE: libraries/glm/gtx/matrix_operation.hpp ================================================ /// @ref gtx_matrix_operation /// @file glm/gtx/matrix_operation.hpp /// /// @see core (dependence) /// /// @defgroup gtx_matrix_operation GLM_GTX_matrix_operation /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Build diagonal matrices from vectors. #pragma once // Dependency: #include "../glm.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_matrix_operation is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_matrix_operation extension included") # endif #endif namespace glm { /// @addtogroup gtx_matrix_operation /// @{ //! Build a diagonal matrix. //! From GLM_GTX_matrix_operation extension. template GLM_FUNC_DECL mat<2, 2, T, Q> diagonal2x2( vec<2, T, Q> const& v); //! Build a diagonal matrix. //! From GLM_GTX_matrix_operation extension. template GLM_FUNC_DECL mat<2, 3, T, Q> diagonal2x3( vec<2, T, Q> const& v); //! Build a diagonal matrix. //! From GLM_GTX_matrix_operation extension. template GLM_FUNC_DECL mat<2, 4, T, Q> diagonal2x4( vec<2, T, Q> const& v); //! Build a diagonal matrix. //! From GLM_GTX_matrix_operation extension. template GLM_FUNC_DECL mat<3, 2, T, Q> diagonal3x2( vec<2, T, Q> const& v); //! Build a diagonal matrix. //! From GLM_GTX_matrix_operation extension. template GLM_FUNC_DECL mat<3, 3, T, Q> diagonal3x3( vec<3, T, Q> const& v); //! Build a diagonal matrix. //! From GLM_GTX_matrix_operation extension. template GLM_FUNC_DECL mat<3, 4, T, Q> diagonal3x4( vec<3, T, Q> const& v); //! Build a diagonal matrix. //! From GLM_GTX_matrix_operation extension. template GLM_FUNC_DECL mat<4, 2, T, Q> diagonal4x2( vec<2, T, Q> const& v); //! Build a diagonal matrix. //! From GLM_GTX_matrix_operation extension. template GLM_FUNC_DECL mat<4, 3, T, Q> diagonal4x3( vec<3, T, Q> const& v); //! Build a diagonal matrix. //! From GLM_GTX_matrix_operation extension. template GLM_FUNC_DECL mat<4, 4, T, Q> diagonal4x4( vec<4, T, Q> const& v); /// Build an adjugate matrix. /// From GLM_GTX_matrix_operation extension. template GLM_FUNC_DECL mat<2, 2, T, Q> adjugate(mat<2, 2, T, Q> const& m); /// Build an adjugate matrix. /// From GLM_GTX_matrix_operation extension. template GLM_FUNC_DECL mat<3, 3, T, Q> adjugate(mat<3, 3, T, Q> const& m); /// Build an adjugate matrix. /// From GLM_GTX_matrix_operation extension. template GLM_FUNC_DECL mat<4, 4, T, Q> adjugate(mat<4, 4, T, Q> const& m); /// @} }//namespace glm #include "matrix_operation.inl" ================================================ FILE: libraries/glm/gtx/matrix_operation.inl ================================================ /// @ref gtx_matrix_operation namespace glm { template GLM_FUNC_QUALIFIER mat<2, 2, T, Q> diagonal2x2 ( vec<2, T, Q> const& v ) { mat<2, 2, T, Q> Result(static_cast(1)); Result[0][0] = v[0]; Result[1][1] = v[1]; return Result; } template GLM_FUNC_QUALIFIER mat<2, 3, T, Q> diagonal2x3 ( vec<2, T, Q> const& v ) { mat<2, 3, T, Q> Result(static_cast(1)); Result[0][0] = v[0]; Result[1][1] = v[1]; return Result; } template GLM_FUNC_QUALIFIER mat<2, 4, T, Q> diagonal2x4 ( vec<2, T, Q> const& v ) { mat<2, 4, T, Q> Result(static_cast(1)); Result[0][0] = v[0]; Result[1][1] = v[1]; return Result; } template GLM_FUNC_QUALIFIER mat<3, 2, T, Q> diagonal3x2 ( vec<2, T, Q> const& v ) { mat<3, 2, T, Q> Result(static_cast(1)); Result[0][0] = v[0]; Result[1][1] = v[1]; return Result; } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> diagonal3x3 ( vec<3, T, Q> const& v ) { mat<3, 3, T, Q> Result(static_cast(1)); Result[0][0] = v[0]; Result[1][1] = v[1]; Result[2][2] = v[2]; return Result; } template GLM_FUNC_QUALIFIER mat<3, 4, T, Q> diagonal3x4 ( vec<3, T, Q> const& v ) { mat<3, 4, T, Q> Result(static_cast(1)); Result[0][0] = v[0]; Result[1][1] = v[1]; Result[2][2] = v[2]; return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> diagonal4x4 ( vec<4, T, Q> const& v ) { mat<4, 4, T, Q> Result(static_cast(1)); Result[0][0] = v[0]; Result[1][1] = v[1]; Result[2][2] = v[2]; Result[3][3] = v[3]; return Result; } template GLM_FUNC_QUALIFIER mat<4, 3, T, Q> diagonal4x3 ( vec<3, T, Q> const& v ) { mat<4, 3, T, Q> Result(static_cast(1)); Result[0][0] = v[0]; Result[1][1] = v[1]; Result[2][2] = v[2]; return Result; } template GLM_FUNC_QUALIFIER mat<4, 2, T, Q> diagonal4x2 ( vec<2, T, Q> const& v ) { mat<4, 2, T, Q> Result(static_cast(1)); Result[0][0] = v[0]; Result[1][1] = v[1]; return Result; } template GLM_FUNC_QUALIFIER mat<2, 2, T, Q> adjugate(mat<2, 2, T, Q> const& m) { return mat<2, 2, T, Q>( +m[1][1], -m[1][0], -m[0][1], +m[0][0]); } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> adjugate(mat<3, 3, T, Q> const& m) { T const m00 = determinant(mat<2, 2, T, Q>(m[1][1], m[2][1], m[1][2], m[2][2])); T const m01 = determinant(mat<2, 2, T, Q>(m[0][1], m[2][1], m[0][2], m[2][2])); T const m02 = determinant(mat<2, 2, T, Q>(m[0][1], m[1][1], m[0][2], m[1][2])); T const m10 = determinant(mat<2, 2, T, Q>(m[1][0], m[2][0], m[1][2], m[2][2])); T const m11 = determinant(mat<2, 2, T, Q>(m[0][0], m[2][0], m[0][2], m[2][2])); T const m12 = determinant(mat<2, 2, T, Q>(m[0][0], m[1][0], m[0][2], m[1][2])); T const m20 = determinant(mat<2, 2, T, Q>(m[1][0], m[2][0], m[1][1], m[2][1])); T const m21 = determinant(mat<2, 2, T, Q>(m[0][0], m[2][0], m[0][1], m[2][1])); T const m22 = determinant(mat<2, 2, T, Q>(m[0][0], m[1][0], m[0][1], m[1][1])); return mat<3, 3, T, Q>( +m00, -m01, +m02, -m10, +m11, -m12, +m20, -m21, +m22); } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> adjugate(mat<4, 4, T, Q> const& m) { T const m00 = determinant(mat<3, 3, T, Q>(m[1][1], m[1][2], m[1][3], m[2][1], m[2][2], m[2][3], m[3][1], m[3][2], m[3][3])); T const m01 = determinant(mat<3, 3, T, Q>(m[1][0], m[1][2], m[1][3], m[2][0], m[2][2], m[2][3], m[3][0], m[3][2], m[3][3])); T const m02 = determinant(mat<3, 3, T, Q>(m[1][0], m[1][1], m[1][3], m[2][0], m[2][2], m[2][3], m[3][0], m[3][1], m[3][3])); T const m03 = determinant(mat<3, 3, T, Q>(m[1][0], m[1][1], m[1][2], m[2][0], m[2][1], m[2][2], m[3][0], m[3][1], m[3][2])); T const m10 = determinant(mat<3, 3, T, Q>(m[0][1], m[0][2], m[0][3], m[2][1], m[2][2], m[2][3], m[3][1], m[3][2], m[3][3])); T const m11 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][2], m[0][3], m[2][0], m[2][2], m[2][3], m[3][0], m[3][2], m[3][3])); T const m12 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][3], m[2][0], m[2][1], m[2][3], m[3][0], m[3][1], m[3][3])); T const m13 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][2], m[2][0], m[2][1], m[2][2], m[3][0], m[3][1], m[3][2])); T const m20 = determinant(mat<3, 3, T, Q>(m[0][1], m[0][2], m[0][3], m[1][1], m[1][2], m[1][3], m[3][1], m[3][2], m[3][3])); T const m21 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][2], m[0][3], m[1][0], m[1][2], m[1][3], m[3][0], m[3][2], m[3][3])); T const m22 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][3], m[1][0], m[1][1], m[1][3], m[3][0], m[3][1], m[3][3])); T const m23 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][2], m[1][0], m[1][1], m[1][2], m[3][0], m[3][1], m[3][2])); T const m30 = determinant(mat<3, 3, T, Q>(m[0][1], m[0][2], m[0][3], m[1][1], m[1][2], m[1][3], m[2][1], m[2][2], m[2][3])); T const m31 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][2], m[0][3], m[1][0], m[1][2], m[1][3], m[2][0], m[2][2], m[2][3])); T const m32 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][3], m[1][0], m[1][1], m[1][3], m[2][0], m[2][1], m[2][3])); T const m33 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][2], m[1][0], m[1][1], m[1][2], m[2][0], m[2][1], m[2][2])); return mat<4, 4, T, Q>( +m00, -m01, +m02, -m03, -m10, +m11, -m12, +m13, +m20, -m21, +m22, -m23, -m30, +m31, -m32, +m33); } }//namespace glm ================================================ FILE: libraries/glm/gtx/matrix_query.hpp ================================================ /// @ref gtx_matrix_query /// @file glm/gtx/matrix_query.hpp /// /// @see core (dependence) /// @see gtx_vector_query (dependence) /// /// @defgroup gtx_matrix_query GLM_GTX_matrix_query /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Query to evaluate matrix properties #pragma once // Dependency: #include "../glm.hpp" #include "../gtx/vector_query.hpp" #include #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_matrix_query is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_matrix_query extension included") # endif #endif namespace glm { /// @addtogroup gtx_matrix_query /// @{ /// Return whether a matrix a null matrix. /// From GLM_GTX_matrix_query extension. template GLM_FUNC_DECL bool isNull(mat<2, 2, T, Q> const& m, T const& epsilon); /// Return whether a matrix a null matrix. /// From GLM_GTX_matrix_query extension. template GLM_FUNC_DECL bool isNull(mat<3, 3, T, Q> const& m, T const& epsilon); /// Return whether a matrix is a null matrix. /// From GLM_GTX_matrix_query extension. template GLM_FUNC_DECL bool isNull(mat<4, 4, T, Q> const& m, T const& epsilon); /// Return whether a matrix is an identity matrix. /// From GLM_GTX_matrix_query extension. template class matType> GLM_FUNC_DECL bool isIdentity(matType const& m, T const& epsilon); /// Return whether a matrix is a normalized matrix. /// From GLM_GTX_matrix_query extension. template GLM_FUNC_DECL bool isNormalized(mat<2, 2, T, Q> const& m, T const& epsilon); /// Return whether a matrix is a normalized matrix. /// From GLM_GTX_matrix_query extension. template GLM_FUNC_DECL bool isNormalized(mat<3, 3, T, Q> const& m, T const& epsilon); /// Return whether a matrix is a normalized matrix. /// From GLM_GTX_matrix_query extension. template GLM_FUNC_DECL bool isNormalized(mat<4, 4, T, Q> const& m, T const& epsilon); /// Return whether a matrix is an orthonormalized matrix. /// From GLM_GTX_matrix_query extension. template class matType> GLM_FUNC_DECL bool isOrthogonal(matType const& m, T const& epsilon); /// @} }//namespace glm #include "matrix_query.inl" ================================================ FILE: libraries/glm/gtx/matrix_query.inl ================================================ /// @ref gtx_matrix_query namespace glm { template GLM_FUNC_QUALIFIER bool isNull(mat<2, 2, T, Q> const& m, T const& epsilon) { bool result = true; for(length_t i = 0; result && i < m.length() ; ++i) result = isNull(m[i], epsilon); return result; } template GLM_FUNC_QUALIFIER bool isNull(mat<3, 3, T, Q> const& m, T const& epsilon) { bool result = true; for(length_t i = 0; result && i < m.length() ; ++i) result = isNull(m[i], epsilon); return result; } template GLM_FUNC_QUALIFIER bool isNull(mat<4, 4, T, Q> const& m, T const& epsilon) { bool result = true; for(length_t i = 0; result && i < m.length() ; ++i) result = isNull(m[i], epsilon); return result; } template GLM_FUNC_QUALIFIER bool isIdentity(mat const& m, T const& epsilon) { bool result = true; for(length_t i = 0; result && i < m[0].length() ; ++i) { for(length_t j = 0; result && j < i ; ++j) result = abs(m[i][j]) <= epsilon; if(result) result = abs(m[i][i] - 1) <= epsilon; for(length_t j = i + 1; result && j < m.length(); ++j) result = abs(m[i][j]) <= epsilon; } return result; } template GLM_FUNC_QUALIFIER bool isNormalized(mat<2, 2, T, Q> const& m, T const& epsilon) { bool result(true); for(length_t i = 0; result && i < m.length(); ++i) result = isNormalized(m[i], epsilon); for(length_t i = 0; result && i < m.length(); ++i) { typename mat<2, 2, T, Q>::col_type v; for(length_t j = 0; j < m.length(); ++j) v[j] = m[j][i]; result = isNormalized(v, epsilon); } return result; } template GLM_FUNC_QUALIFIER bool isNormalized(mat<3, 3, T, Q> const& m, T const& epsilon) { bool result(true); for(length_t i = 0; result && i < m.length(); ++i) result = isNormalized(m[i], epsilon); for(length_t i = 0; result && i < m.length(); ++i) { typename mat<3, 3, T, Q>::col_type v; for(length_t j = 0; j < m.length(); ++j) v[j] = m[j][i]; result = isNormalized(v, epsilon); } return result; } template GLM_FUNC_QUALIFIER bool isNormalized(mat<4, 4, T, Q> const& m, T const& epsilon) { bool result(true); for(length_t i = 0; result && i < m.length(); ++i) result = isNormalized(m[i], epsilon); for(length_t i = 0; result && i < m.length(); ++i) { typename mat<4, 4, T, Q>::col_type v; for(length_t j = 0; j < m.length(); ++j) v[j] = m[j][i]; result = isNormalized(v, epsilon); } return result; } template GLM_FUNC_QUALIFIER bool isOrthogonal(mat const& m, T const& epsilon) { bool result = true; for(length_t i(0); result && i < m.length() - 1; ++i) for(length_t j(i + 1); result && j < m.length(); ++j) result = areOrthogonal(m[i], m[j], epsilon); if(result) { mat tmp = transpose(m); for(length_t i(0); result && i < m.length() - 1 ; ++i) for(length_t j(i + 1); result && j < m.length(); ++j) result = areOrthogonal(tmp[i], tmp[j], epsilon); } return result; } }//namespace glm ================================================ FILE: libraries/glm/gtx/matrix_transform_2d.hpp ================================================ /// @ref gtx_matrix_transform_2d /// @file glm/gtx/matrix_transform_2d.hpp /// @author Miguel Ángel Pérez Martínez /// /// @see core (dependence) /// /// @defgroup gtx_matrix_transform_2d GLM_GTX_matrix_transform_2d /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Defines functions that generate common 2d transformation matrices. #pragma once // Dependency: #include "../mat3x3.hpp" #include "../vec2.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_matrix_transform_2d is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_matrix_transform_2d extension included") # endif #endif namespace glm { /// @addtogroup gtx_matrix_transform_2d /// @{ /// Builds a translation 3 * 3 matrix created from a vector of 2 components. /// /// @param m Input matrix multiplied by this translation matrix. /// @param v Coordinates of a translation vector. template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> translate( mat<3, 3, T, Q> const& m, vec<2, T, Q> const& v); /// Builds a rotation 3 * 3 matrix created from an angle. /// /// @param m Input matrix multiplied by this translation matrix. /// @param angle Rotation angle expressed in radians. template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> rotate( mat<3, 3, T, Q> const& m, T angle); /// Builds a scale 3 * 3 matrix created from a vector of 2 components. /// /// @param m Input matrix multiplied by this translation matrix. /// @param v Coordinates of a scale vector. template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> scale( mat<3, 3, T, Q> const& m, vec<2, T, Q> const& v); /// Builds an horizontal (parallel to the x axis) shear 3 * 3 matrix. /// /// @param m Input matrix multiplied by this translation matrix. /// @param y Shear factor. template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearX( mat<3, 3, T, Q> const& m, T y); /// Builds a vertical (parallel to the y axis) shear 3 * 3 matrix. /// /// @param m Input matrix multiplied by this translation matrix. /// @param x Shear factor. template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearY( mat<3, 3, T, Q> const& m, T x); /// @} }//namespace glm #include "matrix_transform_2d.inl" ================================================ FILE: libraries/glm/gtx/matrix_transform_2d.inl ================================================ /// @ref gtx_matrix_transform_2d /// @author Miguel Ángel Pérez Martínez #include "../trigonometric.hpp" namespace glm { template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> translate( mat<3, 3, T, Q> const& m, vec<2, T, Q> const& v) { mat<3, 3, T, Q> Result(m); Result[2] = m[0] * v[0] + m[1] * v[1] + m[2]; return Result; } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> rotate( mat<3, 3, T, Q> const& m, T angle) { T const a = angle; T const c = cos(a); T const s = sin(a); mat<3, 3, T, Q> Result; Result[0] = m[0] * c + m[1] * s; Result[1] = m[0] * -s + m[1] * c; Result[2] = m[2]; return Result; } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> scale( mat<3, 3, T, Q> const& m, vec<2, T, Q> const& v) { mat<3, 3, T, Q> Result; Result[0] = m[0] * v[0]; Result[1] = m[1] * v[1]; Result[2] = m[2]; return Result; } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearX( mat<3, 3, T, Q> const& m, T y) { mat<3, 3, T, Q> Result(1); Result[0][1] = y; return m * Result; } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearY( mat<3, 3, T, Q> const& m, T x) { mat<3, 3, T, Q> Result(1); Result[1][0] = x; return m * Result; } }//namespace glm ================================================ FILE: libraries/glm/gtx/mixed_product.hpp ================================================ /// @ref gtx_mixed_product /// @file glm/gtx/mixed_product.hpp /// /// @see core (dependence) /// /// @defgroup gtx_mixed_product GLM_GTX_mixed_producte /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Mixed product of 3 vectors. #pragma once // Dependency: #include "../glm.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_mixed_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_mixed_product extension included") # endif #endif namespace glm { /// @addtogroup gtx_mixed_product /// @{ /// @brief Mixed product of 3 vectors (from GLM_GTX_mixed_product extension) template GLM_FUNC_DECL T mixedProduct( vec<3, T, Q> const& v1, vec<3, T, Q> const& v2, vec<3, T, Q> const& v3); /// @} }// namespace glm #include "mixed_product.inl" ================================================ FILE: libraries/glm/gtx/mixed_product.inl ================================================ /// @ref gtx_mixed_product namespace glm { template GLM_FUNC_QUALIFIER T mixedProduct ( vec<3, T, Q> const& v1, vec<3, T, Q> const& v2, vec<3, T, Q> const& v3 ) { return dot(cross(v1, v2), v3); } }//namespace glm ================================================ FILE: libraries/glm/gtx/norm.hpp ================================================ /// @ref gtx_norm /// @file glm/gtx/norm.hpp /// /// @see core (dependence) /// @see gtx_quaternion (dependence) /// @see gtx_component_wise (dependence) /// /// @defgroup gtx_norm GLM_GTX_norm /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Various ways to compute vector norms. #pragma once // Dependency: #include "../geometric.hpp" #include "../gtx/quaternion.hpp" #include "../gtx/component_wise.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_norm is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_norm extension included") # endif #endif namespace glm { /// @addtogroup gtx_norm /// @{ /// Returns the squared length of x. /// From GLM_GTX_norm extension. template GLM_FUNC_DECL T length2(vec const& x); /// Returns the squared distance between p0 and p1, i.e., length2(p0 - p1). /// From GLM_GTX_norm extension. template GLM_FUNC_DECL T distance2(vec const& p0, vec const& p1); //! Returns the L1 norm between x and y. //! From GLM_GTX_norm extension. template GLM_FUNC_DECL T l1Norm(vec<3, T, Q> const& x, vec<3, T, Q> const& y); //! Returns the L1 norm of v. //! From GLM_GTX_norm extension. template GLM_FUNC_DECL T l1Norm(vec<3, T, Q> const& v); //! Returns the L2 norm between x and y. //! From GLM_GTX_norm extension. template GLM_FUNC_DECL T l2Norm(vec<3, T, Q> const& x, vec<3, T, Q> const& y); //! Returns the L2 norm of v. //! From GLM_GTX_norm extension. template GLM_FUNC_DECL T l2Norm(vec<3, T, Q> const& x); //! Returns the L norm between x and y. //! From GLM_GTX_norm extension. template GLM_FUNC_DECL T lxNorm(vec<3, T, Q> const& x, vec<3, T, Q> const& y, unsigned int Depth); //! Returns the L norm of v. //! From GLM_GTX_norm extension. template GLM_FUNC_DECL T lxNorm(vec<3, T, Q> const& x, unsigned int Depth); //! Returns the LMax norm between x and y. //! From GLM_GTX_norm extension. template GLM_FUNC_DECL T lMaxNorm(vec<3, T, Q> const& x, vec<3, T, Q> const& y); //! Returns the LMax norm of v. //! From GLM_GTX_norm extension. template GLM_FUNC_DECL T lMaxNorm(vec<3, T, Q> const& x); /// @} }//namespace glm #include "norm.inl" ================================================ FILE: libraries/glm/gtx/norm.inl ================================================ /// @ref gtx_norm #include "../detail/qualifier.hpp" namespace glm{ namespace detail { template struct compute_length2 { GLM_FUNC_QUALIFIER static T call(vec const& v) { return dot(v, v); } }; }//namespace detail template GLM_FUNC_QUALIFIER genType length2(genType x) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'length2' accepts only floating-point inputs"); return x * x; } template GLM_FUNC_QUALIFIER T length2(vec const& v) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'length2' accepts only floating-point inputs"); return detail::compute_length2::value>::call(v); } template GLM_FUNC_QUALIFIER T distance2(T p0, T p1) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'distance2' accepts only floating-point inputs"); return length2(p1 - p0); } template GLM_FUNC_QUALIFIER T distance2(vec const& p0, vec const& p1) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'distance2' accepts only floating-point inputs"); return length2(p1 - p0); } template GLM_FUNC_QUALIFIER T l1Norm(vec<3, T, Q> const& a, vec<3, T, Q> const& b) { return abs(b.x - a.x) + abs(b.y - a.y) + abs(b.z - a.z); } template GLM_FUNC_QUALIFIER T l1Norm(vec<3, T, Q> const& v) { return abs(v.x) + abs(v.y) + abs(v.z); } template GLM_FUNC_QUALIFIER T l2Norm(vec<3, T, Q> const& a, vec<3, T, Q> const& b ) { return length(b - a); } template GLM_FUNC_QUALIFIER T l2Norm(vec<3, T, Q> const& v) { return length(v); } template GLM_FUNC_QUALIFIER T lxNorm(vec<3, T, Q> const& x, vec<3, T, Q> const& y, unsigned int Depth) { return pow(pow(abs(y.x - x.x), T(Depth)) + pow(abs(y.y - x.y), T(Depth)) + pow(abs(y.z - x.z), T(Depth)), T(1) / T(Depth)); } template GLM_FUNC_QUALIFIER T lxNorm(vec<3, T, Q> const& v, unsigned int Depth) { return pow(pow(abs(v.x), T(Depth)) + pow(abs(v.y), T(Depth)) + pow(abs(v.z), T(Depth)), T(1) / T(Depth)); } template GLM_FUNC_QUALIFIER T lMaxNorm(vec<3, T, Q> const& a, vec<3, T, Q> const& b) { return compMax(abs(b - a)); } template GLM_FUNC_QUALIFIER T lMaxNorm(vec<3, T, Q> const& v) { return compMax(abs(v)); } }//namespace glm ================================================ FILE: libraries/glm/gtx/normal.hpp ================================================ /// @ref gtx_normal /// @file glm/gtx/normal.hpp /// /// @see core (dependence) /// @see gtx_extented_min_max (dependence) /// /// @defgroup gtx_normal GLM_GTX_normal /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Compute the normal of a triangle. #pragma once // Dependency: #include "../glm.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_normal is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_normal extension included") # endif #endif namespace glm { /// @addtogroup gtx_normal /// @{ /// Computes triangle normal from triangle points. /// /// @see gtx_normal template GLM_FUNC_DECL vec<3, T, Q> triangleNormal(vec<3, T, Q> const& p1, vec<3, T, Q> const& p2, vec<3, T, Q> const& p3); /// @} }//namespace glm #include "normal.inl" ================================================ FILE: libraries/glm/gtx/normal.inl ================================================ /// @ref gtx_normal namespace glm { template GLM_FUNC_QUALIFIER vec<3, T, Q> triangleNormal ( vec<3, T, Q> const& p1, vec<3, T, Q> const& p2, vec<3, T, Q> const& p3 ) { return normalize(cross(p1 - p2, p1 - p3)); } }//namespace glm ================================================ FILE: libraries/glm/gtx/normalize_dot.hpp ================================================ /// @ref gtx_normalize_dot /// @file glm/gtx/normalize_dot.hpp /// /// @see core (dependence) /// @see gtx_fast_square_root (dependence) /// /// @defgroup gtx_normalize_dot GLM_GTX_normalize_dot /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Dot product of vectors that need to be normalize with a single square root. #pragma once // Dependency: #include "../gtx/fast_square_root.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_normalize_dot is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_normalize_dot extension included") # endif #endif namespace glm { /// @addtogroup gtx_normalize_dot /// @{ /// Normalize parameters and returns the dot product of x and y. /// It's faster that dot(normalize(x), normalize(y)). /// /// @see gtx_normalize_dot extension. template GLM_FUNC_DECL T normalizeDot(vec const& x, vec const& y); /// Normalize parameters and returns the dot product of x and y. /// Faster that dot(fastNormalize(x), fastNormalize(y)). /// /// @see gtx_normalize_dot extension. template GLM_FUNC_DECL T fastNormalizeDot(vec const& x, vec const& y); /// @} }//namespace glm #include "normalize_dot.inl" ================================================ FILE: libraries/glm/gtx/normalize_dot.inl ================================================ /// @ref gtx_normalize_dot namespace glm { template GLM_FUNC_QUALIFIER T normalizeDot(vec const& x, vec const& y) { return glm::dot(x, y) * glm::inversesqrt(glm::dot(x, x) * glm::dot(y, y)); } template GLM_FUNC_QUALIFIER T fastNormalizeDot(vec const& x, vec const& y) { return glm::dot(x, y) * glm::fastInverseSqrt(glm::dot(x, x) * glm::dot(y, y)); } }//namespace glm ================================================ FILE: libraries/glm/gtx/number_precision.hpp ================================================ /// @ref gtx_number_precision /// @file glm/gtx/number_precision.hpp /// /// @see core (dependence) /// @see gtc_type_precision (dependence) /// @see gtc_quaternion (dependence) /// /// @defgroup gtx_number_precision GLM_GTX_number_precision /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Defined size types. #pragma once // Dependency: #include "../glm.hpp" #include "../gtc/type_precision.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_number_precision is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_number_precision extension included") # endif #endif namespace glm{ namespace gtx { ///////////////////////////// // Unsigned int vector types /// @addtogroup gtx_number_precision /// @{ typedef u8 u8vec1; //!< \brief 8bit unsigned integer scalar. (from GLM_GTX_number_precision extension) typedef u16 u16vec1; //!< \brief 16bit unsigned integer scalar. (from GLM_GTX_number_precision extension) typedef u32 u32vec1; //!< \brief 32bit unsigned integer scalar. (from GLM_GTX_number_precision extension) typedef u64 u64vec1; //!< \brief 64bit unsigned integer scalar. (from GLM_GTX_number_precision extension) ////////////////////// // Float vector types typedef f32 f32vec1; //!< \brief Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) typedef f64 f64vec1; //!< \brief Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) ////////////////////// // Float matrix types typedef f32 f32mat1; //!< \brief Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) typedef f32 f32mat1x1; //!< \brief Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) typedef f64 f64mat1; //!< \brief Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) typedef f64 f64mat1x1; //!< \brief Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) /// @} }//namespace gtx }//namespace glm #include "number_precision.inl" ================================================ FILE: libraries/glm/gtx/number_precision.inl ================================================ /// @ref gtx_number_precision namespace glm { } ================================================ FILE: libraries/glm/gtx/optimum_pow.hpp ================================================ /// @ref gtx_optimum_pow /// @file glm/gtx/optimum_pow.hpp /// /// @see core (dependence) /// /// @defgroup gtx_optimum_pow GLM_GTX_optimum_pow /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Integer exponentiation of power functions. #pragma once // Dependency: #include "../glm.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_optimum_pow is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_optimum_pow extension included") # endif #endif namespace glm{ namespace gtx { /// @addtogroup gtx_optimum_pow /// @{ /// Returns x raised to the power of 2. /// /// @see gtx_optimum_pow template GLM_FUNC_DECL genType pow2(genType const& x); /// Returns x raised to the power of 3. /// /// @see gtx_optimum_pow template GLM_FUNC_DECL genType pow3(genType const& x); /// Returns x raised to the power of 4. /// /// @see gtx_optimum_pow template GLM_FUNC_DECL genType pow4(genType const& x); /// @} }//namespace gtx }//namespace glm #include "optimum_pow.inl" ================================================ FILE: libraries/glm/gtx/optimum_pow.inl ================================================ /// @ref gtx_optimum_pow namespace glm { template GLM_FUNC_QUALIFIER genType pow2(genType const& x) { return x * x; } template GLM_FUNC_QUALIFIER genType pow3(genType const& x) { return x * x * x; } template GLM_FUNC_QUALIFIER genType pow4(genType const& x) { return (x * x) * (x * x); } }//namespace glm ================================================ FILE: libraries/glm/gtx/orthonormalize.hpp ================================================ /// @ref gtx_orthonormalize /// @file glm/gtx/orthonormalize.hpp /// /// @see core (dependence) /// @see gtx_extented_min_max (dependence) /// /// @defgroup gtx_orthonormalize GLM_GTX_orthonormalize /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Orthonormalize matrices. #pragma once // Dependency: #include "../vec3.hpp" #include "../mat3x3.hpp" #include "../geometric.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_orthonormalize is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_orthonormalize extension included") # endif #endif namespace glm { /// @addtogroup gtx_orthonormalize /// @{ /// Returns the orthonormalized matrix of m. /// /// @see gtx_orthonormalize template GLM_FUNC_DECL mat<3, 3, T, Q> orthonormalize(mat<3, 3, T, Q> const& m); /// Orthonormalizes x according y. /// /// @see gtx_orthonormalize template GLM_FUNC_DECL vec<3, T, Q> orthonormalize(vec<3, T, Q> const& x, vec<3, T, Q> const& y); /// @} }//namespace glm #include "orthonormalize.inl" ================================================ FILE: libraries/glm/gtx/orthonormalize.inl ================================================ /// @ref gtx_orthonormalize namespace glm { template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> orthonormalize(mat<3, 3, T, Q> const& m) { mat<3, 3, T, Q> r = m; r[0] = normalize(r[0]); T d0 = dot(r[0], r[1]); r[1] -= r[0] * d0; r[1] = normalize(r[1]); T d1 = dot(r[1], r[2]); d0 = dot(r[0], r[2]); r[2] -= r[0] * d0 + r[1] * d1; r[2] = normalize(r[2]); return r; } template GLM_FUNC_QUALIFIER vec<3, T, Q> orthonormalize(vec<3, T, Q> const& x, vec<3, T, Q> const& y) { return normalize(x - y * dot(y, x)); } }//namespace glm ================================================ FILE: libraries/glm/gtx/perpendicular.hpp ================================================ /// @ref gtx_perpendicular /// @file glm/gtx/perpendicular.hpp /// /// @see core (dependence) /// @see gtx_projection (dependence) /// /// @defgroup gtx_perpendicular GLM_GTX_perpendicular /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Perpendicular of a vector from other one #pragma once // Dependency: #include "../glm.hpp" #include "../gtx/projection.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_perpendicular is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_perpendicular extension included") # endif #endif namespace glm { /// @addtogroup gtx_perpendicular /// @{ //! Projects x a perpendicular axis of Normal. //! From GLM_GTX_perpendicular extension. template GLM_FUNC_DECL genType perp(genType const& x, genType const& Normal); /// @} }//namespace glm #include "perpendicular.inl" ================================================ FILE: libraries/glm/gtx/perpendicular.inl ================================================ /// @ref gtx_perpendicular namespace glm { template GLM_FUNC_QUALIFIER genType perp(genType const& x, genType const& Normal) { return x - proj(x, Normal); } }//namespace glm ================================================ FILE: libraries/glm/gtx/polar_coordinates.hpp ================================================ /// @ref gtx_polar_coordinates /// @file glm/gtx/polar_coordinates.hpp /// /// @see core (dependence) /// /// @defgroup gtx_polar_coordinates GLM_GTX_polar_coordinates /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Conversion from Euclidean space to polar space and revert. #pragma once // Dependency: #include "../glm.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_polar_coordinates is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_polar_coordinates extension included") # endif #endif namespace glm { /// @addtogroup gtx_polar_coordinates /// @{ /// Convert Euclidean to Polar coordinates, x is the xz distance, y, the latitude and z the longitude. /// /// @see gtx_polar_coordinates template GLM_FUNC_DECL vec<3, T, Q> polar( vec<3, T, Q> const& euclidean); /// Convert Polar to Euclidean coordinates. /// /// @see gtx_polar_coordinates template GLM_FUNC_DECL vec<3, T, Q> euclidean( vec<2, T, Q> const& polar); /// @} }//namespace glm #include "polar_coordinates.inl" ================================================ FILE: libraries/glm/gtx/polar_coordinates.inl ================================================ /// @ref gtx_polar_coordinates namespace glm { template GLM_FUNC_QUALIFIER vec<3, T, Q> polar ( vec<3, T, Q> const& euclidean ) { T const Length(length(euclidean)); vec<3, T, Q> const tmp(euclidean / Length); T const xz_dist(sqrt(tmp.x * tmp.x + tmp.z * tmp.z)); return vec<3, T, Q>( asin(tmp.y), // latitude atan(tmp.x, tmp.z), // longitude xz_dist); // xz distance } template GLM_FUNC_QUALIFIER vec<3, T, Q> euclidean ( vec<2, T, Q> const& polar ) { T const latitude(polar.x); T const longitude(polar.y); return vec<3, T, Q>( cos(latitude) * sin(longitude), sin(latitude), cos(latitude) * cos(longitude)); } }//namespace glm ================================================ FILE: libraries/glm/gtx/projection.hpp ================================================ /// @ref gtx_projection /// @file glm/gtx/projection.hpp /// /// @see core (dependence) /// /// @defgroup gtx_projection GLM_GTX_projection /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Projection of a vector to other one #pragma once // Dependency: #include "../geometric.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_projection is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_projection extension included") # endif #endif namespace glm { /// @addtogroup gtx_projection /// @{ /// Projects x on Normal. /// /// @param[in] x A vector to project /// @param[in] Normal A normal that doesn't need to be of unit length. /// /// @see gtx_projection template GLM_FUNC_DECL genType proj(genType const& x, genType const& Normal); /// @} }//namespace glm #include "projection.inl" ================================================ FILE: libraries/glm/gtx/projection.inl ================================================ /// @ref gtx_projection namespace glm { template GLM_FUNC_QUALIFIER genType proj(genType const& x, genType const& Normal) { return glm::dot(x, Normal) / glm::dot(Normal, Normal) * Normal; } }//namespace glm ================================================ FILE: libraries/glm/gtx/quaternion.hpp ================================================ /// @ref gtx_quaternion /// @file glm/gtx/quaternion.hpp /// /// @see core (dependence) /// @see gtx_extented_min_max (dependence) /// /// @defgroup gtx_quaternion GLM_GTX_quaternion /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Extented quaternion types and functions #pragma once // Dependency: #include "../glm.hpp" #include "../gtc/constants.hpp" #include "../gtc/quaternion.hpp" #include "../ext/quaternion_exponential.hpp" #include "../gtx/norm.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_quaternion is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_quaternion extension included") # endif #endif namespace glm { /// @addtogroup gtx_quaternion /// @{ /// Create an identity quaternion. /// /// @see gtx_quaternion template GLM_FUNC_DECL GLM_CONSTEXPR qua quat_identity(); /// Compute a cross product between a quaternion and a vector. /// /// @see gtx_quaternion template GLM_FUNC_DECL vec<3, T, Q> cross( qua const& q, vec<3, T, Q> const& v); //! Compute a cross product between a vector and a quaternion. /// /// @see gtx_quaternion template GLM_FUNC_DECL vec<3, T, Q> cross( vec<3, T, Q> const& v, qua const& q); //! Compute a point on a path according squad equation. //! q1 and q2 are control points; s1 and s2 are intermediate control points. /// /// @see gtx_quaternion template GLM_FUNC_DECL qua squad( qua const& q1, qua const& q2, qua const& s1, qua const& s2, T const& h); //! Returns an intermediate control point for squad interpolation. /// /// @see gtx_quaternion template GLM_FUNC_DECL qua intermediate( qua const& prev, qua const& curr, qua const& next); //! Returns quarternion square root. /// /// @see gtx_quaternion //template //qua sqrt( // qua const& q); //! Rotates a 3 components vector by a quaternion. /// /// @see gtx_quaternion template GLM_FUNC_DECL vec<3, T, Q> rotate( qua const& q, vec<3, T, Q> const& v); /// Rotates a 4 components vector by a quaternion. /// /// @see gtx_quaternion template GLM_FUNC_DECL vec<4, T, Q> rotate( qua const& q, vec<4, T, Q> const& v); /// Extract the real component of a quaternion. /// /// @see gtx_quaternion template GLM_FUNC_DECL T extractRealComponent( qua const& q); /// Converts a quaternion to a 3 * 3 matrix. /// /// @see gtx_quaternion template GLM_FUNC_DECL mat<3, 3, T, Q> toMat3( qua const& x){return mat3_cast(x);} /// Converts a quaternion to a 4 * 4 matrix. /// /// @see gtx_quaternion template GLM_FUNC_DECL mat<4, 4, T, Q> toMat4( qua const& x){return mat4_cast(x);} /// Converts a 3 * 3 matrix to a quaternion. /// /// @see gtx_quaternion template GLM_FUNC_DECL qua toQuat( mat<3, 3, T, Q> const& x){return quat_cast(x);} /// Converts a 4 * 4 matrix to a quaternion. /// /// @see gtx_quaternion template GLM_FUNC_DECL qua toQuat( mat<4, 4, T, Q> const& x){return quat_cast(x);} /// Quaternion interpolation using the rotation short path. /// /// @see gtx_quaternion template GLM_FUNC_DECL qua shortMix( qua const& x, qua const& y, T const& a); /// Quaternion normalized linear interpolation. /// /// @see gtx_quaternion template GLM_FUNC_DECL qua fastMix( qua const& x, qua const& y, T const& a); /// Compute the rotation between two vectors. /// @param orig vector, needs to be normalized /// @param dest vector, needs to be normalized /// /// @see gtx_quaternion template GLM_FUNC_DECL qua rotation( vec<3, T, Q> const& orig, vec<3, T, Q> const& dest); /// Returns the squared length of x. /// /// @see gtx_quaternion template GLM_FUNC_DECL GLM_CONSTEXPR T length2(qua const& q); /// @} }//namespace glm #include "quaternion.inl" ================================================ FILE: libraries/glm/gtx/quaternion.inl ================================================ /// @ref gtx_quaternion #include #include "../gtc/constants.hpp" namespace glm { template GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua quat_identity() { return qua(static_cast(1), static_cast(0), static_cast(0), static_cast(0)); } template GLM_FUNC_QUALIFIER vec<3, T, Q> cross(vec<3, T, Q> const& v, qua const& q) { return inverse(q) * v; } template GLM_FUNC_QUALIFIER vec<3, T, Q> cross(qua const& q, vec<3, T, Q> const& v) { return q * v; } template GLM_FUNC_QUALIFIER qua squad ( qua const& q1, qua const& q2, qua const& s1, qua const& s2, T const& h) { return mix(mix(q1, q2, h), mix(s1, s2, h), static_cast(2) * (static_cast(1) - h) * h); } template GLM_FUNC_QUALIFIER qua intermediate ( qua const& prev, qua const& curr, qua const& next ) { qua invQuat = inverse(curr); return exp((log(next * invQuat) + log(prev * invQuat)) / static_cast(-4)) * curr; } template GLM_FUNC_QUALIFIER vec<3, T, Q> rotate(qua const& q, vec<3, T, Q> const& v) { return q * v; } template GLM_FUNC_QUALIFIER vec<4, T, Q> rotate(qua const& q, vec<4, T, Q> const& v) { return q * v; } template GLM_FUNC_QUALIFIER T extractRealComponent(qua const& q) { T w = static_cast(1) - q.x * q.x - q.y * q.y - q.z * q.z; if(w < T(0)) return T(0); else return -sqrt(w); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR T length2(qua const& q) { return q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w; } template GLM_FUNC_QUALIFIER qua shortMix(qua const& x, qua const& y, T const& a) { if(a <= static_cast(0)) return x; if(a >= static_cast(1)) return y; T fCos = dot(x, y); qua y2(y); //BUG!!! qua y2; if(fCos < static_cast(0)) { y2 = -y; fCos = -fCos; } //if(fCos > 1.0f) // problem T k0, k1; if(fCos > (static_cast(1) - epsilon())) { k0 = static_cast(1) - a; k1 = static_cast(0) + a; //BUG!!! 1.0f + a; } else { T fSin = sqrt(T(1) - fCos * fCos); T fAngle = atan(fSin, fCos); T fOneOverSin = static_cast(1) / fSin; k0 = sin((static_cast(1) - a) * fAngle) * fOneOverSin; k1 = sin((static_cast(0) + a) * fAngle) * fOneOverSin; } return qua( k0 * x.w + k1 * y2.w, k0 * x.x + k1 * y2.x, k0 * x.y + k1 * y2.y, k0 * x.z + k1 * y2.z); } template GLM_FUNC_QUALIFIER qua fastMix(qua const& x, qua const& y, T const& a) { return glm::normalize(x * (static_cast(1) - a) + (y * a)); } template GLM_FUNC_QUALIFIER qua rotation(vec<3, T, Q> const& orig, vec<3, T, Q> const& dest) { T cosTheta = dot(orig, dest); vec<3, T, Q> rotationAxis; if(cosTheta >= static_cast(1) - epsilon()) { // orig and dest point in the same direction return quat_identity(); } if(cosTheta < static_cast(-1) + epsilon()) { // special case when vectors in opposite directions : // there is no "ideal" rotation axis // So guess one; any will do as long as it's perpendicular to start // This implementation favors a rotation around the Up axis (Y), // since it's often what you want to do. rotationAxis = cross(vec<3, T, Q>(0, 0, 1), orig); if(length2(rotationAxis) < epsilon()) // bad luck, they were parallel, try again! rotationAxis = cross(vec<3, T, Q>(1, 0, 0), orig); rotationAxis = normalize(rotationAxis); return angleAxis(pi(), rotationAxis); } // Implementation from Stan Melax's Game Programming Gems 1 article rotationAxis = cross(orig, dest); T s = sqrt((T(1) + cosTheta) * static_cast(2)); T invs = static_cast(1) / s; return qua( s * static_cast(0.5f), rotationAxis.x * invs, rotationAxis.y * invs, rotationAxis.z * invs); } }//namespace glm ================================================ FILE: libraries/glm/gtx/range.hpp ================================================ /// @ref gtx_range /// @file glm/gtx/range.hpp /// @author Joshua Moerman /// /// @defgroup gtx_range GLM_GTX_range /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Defines begin and end for vectors and matrices. Useful for range-based for loop. /// The range is defined over the elements, not over columns or rows (e.g. mat4 has 16 elements). #pragma once // Dependencies #include "../detail/setup.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_range is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_range extension included") # endif #endif #include "../gtc/type_ptr.hpp" #include "../gtc/vec1.hpp" namespace glm { /// @addtogroup gtx_range /// @{ # if GLM_COMPILER & GLM_COMPILER_VC # pragma warning(push) # pragma warning(disable : 4100) // unreferenced formal parameter # endif template inline length_t components(vec<1, T, Q> const& v) { return v.length(); } template inline length_t components(vec<2, T, Q> const& v) { return v.length(); } template inline length_t components(vec<3, T, Q> const& v) { return v.length(); } template inline length_t components(vec<4, T, Q> const& v) { return v.length(); } template inline length_t components(genType const& m) { return m.length() * m[0].length(); } template inline typename genType::value_type const * begin(genType const& v) { return value_ptr(v); } template inline typename genType::value_type const * end(genType const& v) { return begin(v) + components(v); } template inline typename genType::value_type * begin(genType& v) { return value_ptr(v); } template inline typename genType::value_type * end(genType& v) { return begin(v) + components(v); } # if GLM_COMPILER & GLM_COMPILER_VC # pragma warning(pop) # endif /// @} }//namespace glm ================================================ FILE: libraries/glm/gtx/raw_data.hpp ================================================ /// @ref gtx_raw_data /// @file glm/gtx/raw_data.hpp /// /// @see core (dependence) /// /// @defgroup gtx_raw_data GLM_GTX_raw_data /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Projection of a vector to other one #pragma once // Dependencies #include "../ext/scalar_uint_sized.hpp" #include "../detail/setup.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_raw_data is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_raw_data extension included") # endif #endif namespace glm { /// @addtogroup gtx_raw_data /// @{ //! Type for byte numbers. //! From GLM_GTX_raw_data extension. typedef detail::uint8 byte; //! Type for word numbers. //! From GLM_GTX_raw_data extension. typedef detail::uint16 word; //! Type for dword numbers. //! From GLM_GTX_raw_data extension. typedef detail::uint32 dword; //! Type for qword numbers. //! From GLM_GTX_raw_data extension. typedef detail::uint64 qword; /// @} }// namespace glm #include "raw_data.inl" ================================================ FILE: libraries/glm/gtx/raw_data.inl ================================================ /// @ref gtx_raw_data ================================================ FILE: libraries/glm/gtx/rotate_normalized_axis.hpp ================================================ /// @ref gtx_rotate_normalized_axis /// @file glm/gtx/rotate_normalized_axis.hpp /// /// @see core (dependence) /// @see gtc_matrix_transform /// @see gtc_quaternion /// /// @defgroup gtx_rotate_normalized_axis GLM_GTX_rotate_normalized_axis /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Quaternions and matrices rotations around normalized axis. #pragma once // Dependency: #include "../glm.hpp" #include "../gtc/epsilon.hpp" #include "../gtc/quaternion.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_rotate_normalized_axis is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_rotate_normalized_axis extension included") # endif #endif namespace glm { /// @addtogroup gtx_rotate_normalized_axis /// @{ /// Builds a rotation 4 * 4 matrix created from a normalized axis and an angle. /// /// @param m Input matrix multiplied by this rotation matrix. /// @param angle Rotation angle expressed in radians. /// @param axis Rotation axis, must be normalized. /// @tparam T Value type used to build the matrix. Currently supported: half (not recommended), float or double. /// /// @see gtx_rotate_normalized_axis /// @see - rotate(T angle, T x, T y, T z) /// @see - rotate(mat<4, 4, T, Q> const& m, T angle, T x, T y, T z) /// @see - rotate(T angle, vec<3, T, Q> const& v) template GLM_FUNC_DECL mat<4, 4, T, Q> rotateNormalizedAxis( mat<4, 4, T, Q> const& m, T const& angle, vec<3, T, Q> const& axis); /// Rotates a quaternion from a vector of 3 components normalized axis and an angle. /// /// @param q Source orientation /// @param angle Angle expressed in radians. /// @param axis Normalized axis of the rotation, must be normalized. /// /// @see gtx_rotate_normalized_axis template GLM_FUNC_DECL qua rotateNormalizedAxis( qua const& q, T const& angle, vec<3, T, Q> const& axis); /// @} }//namespace glm #include "rotate_normalized_axis.inl" ================================================ FILE: libraries/glm/gtx/rotate_normalized_axis.inl ================================================ /// @ref gtx_rotate_normalized_axis namespace glm { template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotateNormalizedAxis ( mat<4, 4, T, Q> const& m, T const& angle, vec<3, T, Q> const& v ) { T const a = angle; T const c = cos(a); T const s = sin(a); vec<3, T, Q> const axis(v); vec<3, T, Q> const temp((static_cast(1) - c) * axis); mat<4, 4, T, Q> Rotate; Rotate[0][0] = c + temp[0] * axis[0]; Rotate[0][1] = 0 + temp[0] * axis[1] + s * axis[2]; Rotate[0][2] = 0 + temp[0] * axis[2] - s * axis[1]; Rotate[1][0] = 0 + temp[1] * axis[0] - s * axis[2]; Rotate[1][1] = c + temp[1] * axis[1]; Rotate[1][2] = 0 + temp[1] * axis[2] + s * axis[0]; Rotate[2][0] = 0 + temp[2] * axis[0] + s * axis[1]; Rotate[2][1] = 0 + temp[2] * axis[1] - s * axis[0]; Rotate[2][2] = c + temp[2] * axis[2]; mat<4, 4, T, Q> Result; Result[0] = m[0] * Rotate[0][0] + m[1] * Rotate[0][1] + m[2] * Rotate[0][2]; Result[1] = m[0] * Rotate[1][0] + m[1] * Rotate[1][1] + m[2] * Rotate[1][2]; Result[2] = m[0] * Rotate[2][0] + m[1] * Rotate[2][1] + m[2] * Rotate[2][2]; Result[3] = m[3]; return Result; } template GLM_FUNC_QUALIFIER qua rotateNormalizedAxis ( qua const& q, T const& angle, vec<3, T, Q> const& v ) { vec<3, T, Q> const Tmp(v); T const AngleRad(angle); T const Sin = sin(AngleRad * T(0.5)); return q * qua(cos(AngleRad * static_cast(0.5)), Tmp.x * Sin, Tmp.y * Sin, Tmp.z * Sin); //return gtc::quaternion::cross(q, tquat(cos(AngleRad * T(0.5)), Tmp.x * fSin, Tmp.y * fSin, Tmp.z * fSin)); } }//namespace glm ================================================ FILE: libraries/glm/gtx/rotate_vector.hpp ================================================ /// @ref gtx_rotate_vector /// @file glm/gtx/rotate_vector.hpp /// /// @see core (dependence) /// @see gtx_transform (dependence) /// /// @defgroup gtx_rotate_vector GLM_GTX_rotate_vector /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Function to directly rotate a vector #pragma once // Dependency: #include "../gtx/transform.hpp" #include "../gtc/epsilon.hpp" #include "../ext/vector_relational.hpp" #include "../glm.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_rotate_vector is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_rotate_vector extension included") # endif #endif namespace glm { /// @addtogroup gtx_rotate_vector /// @{ /// Returns Spherical interpolation between two vectors /// /// @param x A first vector /// @param y A second vector /// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1]. /// /// @see gtx_rotate_vector template GLM_FUNC_DECL vec<3, T, Q> slerp( vec<3, T, Q> const& x, vec<3, T, Q> const& y, T const& a); //! Rotate a two dimensional vector. //! From GLM_GTX_rotate_vector extension. template GLM_FUNC_DECL vec<2, T, Q> rotate( vec<2, T, Q> const& v, T const& angle); //! Rotate a three dimensional vector around an axis. //! From GLM_GTX_rotate_vector extension. template GLM_FUNC_DECL vec<3, T, Q> rotate( vec<3, T, Q> const& v, T const& angle, vec<3, T, Q> const& normal); //! Rotate a four dimensional vector around an axis. //! From GLM_GTX_rotate_vector extension. template GLM_FUNC_DECL vec<4, T, Q> rotate( vec<4, T, Q> const& v, T const& angle, vec<3, T, Q> const& normal); //! Rotate a three dimensional vector around the X axis. //! From GLM_GTX_rotate_vector extension. template GLM_FUNC_DECL vec<3, T, Q> rotateX( vec<3, T, Q> const& v, T const& angle); //! Rotate a three dimensional vector around the Y axis. //! From GLM_GTX_rotate_vector extension. template GLM_FUNC_DECL vec<3, T, Q> rotateY( vec<3, T, Q> const& v, T const& angle); //! Rotate a three dimensional vector around the Z axis. //! From GLM_GTX_rotate_vector extension. template GLM_FUNC_DECL vec<3, T, Q> rotateZ( vec<3, T, Q> const& v, T const& angle); //! Rotate a four dimensional vector around the X axis. //! From GLM_GTX_rotate_vector extension. template GLM_FUNC_DECL vec<4, T, Q> rotateX( vec<4, T, Q> const& v, T const& angle); //! Rotate a four dimensional vector around the Y axis. //! From GLM_GTX_rotate_vector extension. template GLM_FUNC_DECL vec<4, T, Q> rotateY( vec<4, T, Q> const& v, T const& angle); //! Rotate a four dimensional vector around the Z axis. //! From GLM_GTX_rotate_vector extension. template GLM_FUNC_DECL vec<4, T, Q> rotateZ( vec<4, T, Q> const& v, T const& angle); //! Build a rotation matrix from a normal and a up vector. //! From GLM_GTX_rotate_vector extension. template GLM_FUNC_DECL mat<4, 4, T, Q> orientation( vec<3, T, Q> const& Normal, vec<3, T, Q> const& Up); /// @} }//namespace glm #include "rotate_vector.inl" ================================================ FILE: libraries/glm/gtx/rotate_vector.inl ================================================ /// @ref gtx_rotate_vector namespace glm { template GLM_FUNC_QUALIFIER vec<3, T, Q> slerp ( vec<3, T, Q> const& x, vec<3, T, Q> const& y, T const& a ) { // get cosine of angle between vectors (-1 -> 1) T CosAlpha = dot(x, y); // get angle (0 -> pi) T Alpha = acos(CosAlpha); // get sine of angle between vectors (0 -> 1) T SinAlpha = sin(Alpha); // this breaks down when SinAlpha = 0, i.e. Alpha = 0 or pi T t1 = sin((static_cast(1) - a) * Alpha) / SinAlpha; T t2 = sin(a * Alpha) / SinAlpha; // interpolate src vectors return x * t1 + y * t2; } template GLM_FUNC_QUALIFIER vec<2, T, Q> rotate ( vec<2, T, Q> const& v, T const& angle ) { vec<2, T, Q> Result; T const Cos(cos(angle)); T const Sin(sin(angle)); Result.x = v.x * Cos - v.y * Sin; Result.y = v.x * Sin + v.y * Cos; return Result; } template GLM_FUNC_QUALIFIER vec<3, T, Q> rotate ( vec<3, T, Q> const& v, T const& angle, vec<3, T, Q> const& normal ) { return mat<3, 3, T, Q>(glm::rotate(angle, normal)) * v; } /* template GLM_FUNC_QUALIFIER vec<3, T, Q> rotateGTX( const vec<3, T, Q>& x, T angle, const vec<3, T, Q>& normal) { const T Cos = cos(radians(angle)); const T Sin = sin(radians(angle)); return x * Cos + ((x * normal) * (T(1) - Cos)) * normal + cross(x, normal) * Sin; } */ template GLM_FUNC_QUALIFIER vec<4, T, Q> rotate ( vec<4, T, Q> const& v, T const& angle, vec<3, T, Q> const& normal ) { return rotate(angle, normal) * v; } template GLM_FUNC_QUALIFIER vec<3, T, Q> rotateX ( vec<3, T, Q> const& v, T const& angle ) { vec<3, T, Q> Result(v); T const Cos(cos(angle)); T const Sin(sin(angle)); Result.y = v.y * Cos - v.z * Sin; Result.z = v.y * Sin + v.z * Cos; return Result; } template GLM_FUNC_QUALIFIER vec<3, T, Q> rotateY ( vec<3, T, Q> const& v, T const& angle ) { vec<3, T, Q> Result = v; T const Cos(cos(angle)); T const Sin(sin(angle)); Result.x = v.x * Cos + v.z * Sin; Result.z = -v.x * Sin + v.z * Cos; return Result; } template GLM_FUNC_QUALIFIER vec<3, T, Q> rotateZ ( vec<3, T, Q> const& v, T const& angle ) { vec<3, T, Q> Result = v; T const Cos(cos(angle)); T const Sin(sin(angle)); Result.x = v.x * Cos - v.y * Sin; Result.y = v.x * Sin + v.y * Cos; return Result; } template GLM_FUNC_QUALIFIER vec<4, T, Q> rotateX ( vec<4, T, Q> const& v, T const& angle ) { vec<4, T, Q> Result = v; T const Cos(cos(angle)); T const Sin(sin(angle)); Result.y = v.y * Cos - v.z * Sin; Result.z = v.y * Sin + v.z * Cos; return Result; } template GLM_FUNC_QUALIFIER vec<4, T, Q> rotateY ( vec<4, T, Q> const& v, T const& angle ) { vec<4, T, Q> Result = v; T const Cos(cos(angle)); T const Sin(sin(angle)); Result.x = v.x * Cos + v.z * Sin; Result.z = -v.x * Sin + v.z * Cos; return Result; } template GLM_FUNC_QUALIFIER vec<4, T, Q> rotateZ ( vec<4, T, Q> const& v, T const& angle ) { vec<4, T, Q> Result = v; T const Cos(cos(angle)); T const Sin(sin(angle)); Result.x = v.x * Cos - v.y * Sin; Result.y = v.x * Sin + v.y * Cos; return Result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> orientation ( vec<3, T, Q> const& Normal, vec<3, T, Q> const& Up ) { if(all(equal(Normal, Up, epsilon()))) return mat<4, 4, T, Q>(static_cast(1)); vec<3, T, Q> RotationAxis = cross(Up, Normal); T Angle = acos(dot(Normal, Up)); return rotate(Angle, RotationAxis); } }//namespace glm ================================================ FILE: libraries/glm/gtx/scalar_multiplication.hpp ================================================ /// @ref gtx /// @file glm/gtx/scalar_multiplication.hpp /// @author Joshua Moerman /// /// Include to use the features of this extension. /// /// Enables scalar multiplication for all types /// /// Since GLSL is very strict about types, the following (often used) combinations do not work: /// double * vec4 /// int * vec4 /// vec4 / int /// So we'll fix that! Of course "float * vec4" should remain the same (hence the enable_if magic) #pragma once #include "../detail/setup.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_scalar_multiplication is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_scalar_multiplication extension included") # endif #endif #include "../vec2.hpp" #include "../vec3.hpp" #include "../vec4.hpp" #include "../mat2x2.hpp" #include namespace glm { template using return_type_scalar_multiplication = typename std::enable_if< !std::is_same::value // T may not be a float && std::is_arithmetic::value, Vec // But it may be an int or double (no vec3 or mat3, ...) >::type; #define GLM_IMPLEMENT_SCAL_MULT(Vec) \ template \ return_type_scalar_multiplication \ operator*(T const& s, Vec rh){ \ return rh *= static_cast(s); \ } \ \ template \ return_type_scalar_multiplication \ operator*(Vec lh, T const& s){ \ return lh *= static_cast(s); \ } \ \ template \ return_type_scalar_multiplication \ operator/(Vec lh, T const& s){ \ return lh *= 1.0f / static_cast(s); \ } GLM_IMPLEMENT_SCAL_MULT(vec2) GLM_IMPLEMENT_SCAL_MULT(vec3) GLM_IMPLEMENT_SCAL_MULT(vec4) GLM_IMPLEMENT_SCAL_MULT(mat2) GLM_IMPLEMENT_SCAL_MULT(mat2x3) GLM_IMPLEMENT_SCAL_MULT(mat2x4) GLM_IMPLEMENT_SCAL_MULT(mat3x2) GLM_IMPLEMENT_SCAL_MULT(mat3) GLM_IMPLEMENT_SCAL_MULT(mat3x4) GLM_IMPLEMENT_SCAL_MULT(mat4x2) GLM_IMPLEMENT_SCAL_MULT(mat4x3) GLM_IMPLEMENT_SCAL_MULT(mat4) #undef GLM_IMPLEMENT_SCAL_MULT } // namespace glm ================================================ FILE: libraries/glm/gtx/scalar_relational.hpp ================================================ /// @ref gtx_scalar_relational /// @file glm/gtx/scalar_relational.hpp /// /// @see core (dependence) /// /// @defgroup gtx_scalar_relational GLM_GTX_scalar_relational /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Extend a position from a source to a position at a defined length. #pragma once // Dependency: #include "../glm.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_extend is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_extend extension included") # endif #endif namespace glm { /// @addtogroup gtx_scalar_relational /// @{ /// @} }//namespace glm #include "scalar_relational.inl" ================================================ FILE: libraries/glm/gtx/scalar_relational.inl ================================================ /// @ref gtx_scalar_relational namespace glm { template GLM_FUNC_QUALIFIER bool lessThan ( T const& x, T const& y ) { return x < y; } template GLM_FUNC_QUALIFIER bool lessThanEqual ( T const& x, T const& y ) { return x <= y; } template GLM_FUNC_QUALIFIER bool greaterThan ( T const& x, T const& y ) { return x > y; } template GLM_FUNC_QUALIFIER bool greaterThanEqual ( T const& x, T const& y ) { return x >= y; } template GLM_FUNC_QUALIFIER bool equal ( T const& x, T const& y ) { return detail::compute_equal::is_iec559>::call(x, y); } template GLM_FUNC_QUALIFIER bool notEqual ( T const& x, T const& y ) { return !detail::compute_equal::is_iec559>::call(x, y); } GLM_FUNC_QUALIFIER bool any ( bool const& x ) { return x; } GLM_FUNC_QUALIFIER bool all ( bool const& x ) { return x; } GLM_FUNC_QUALIFIER bool not_ ( bool const& x ) { return !x; } }//namespace glm ================================================ FILE: libraries/glm/gtx/spline.hpp ================================================ /// @ref gtx_spline /// @file glm/gtx/spline.hpp /// /// @see core (dependence) /// /// @defgroup gtx_spline GLM_GTX_spline /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Spline functions #pragma once // Dependency: #include "../glm.hpp" #include "../gtx/optimum_pow.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_spline is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_spline extension included") # endif #endif namespace glm { /// @addtogroup gtx_spline /// @{ /// Return a point from a catmull rom curve. /// @see gtx_spline extension. template GLM_FUNC_DECL genType catmullRom( genType const& v1, genType const& v2, genType const& v3, genType const& v4, typename genType::value_type const& s); /// Return a point from a hermite curve. /// @see gtx_spline extension. template GLM_FUNC_DECL genType hermite( genType const& v1, genType const& t1, genType const& v2, genType const& t2, typename genType::value_type const& s); /// Return a point from a cubic curve. /// @see gtx_spline extension. template GLM_FUNC_DECL genType cubic( genType const& v1, genType const& v2, genType const& v3, genType const& v4, typename genType::value_type const& s); /// @} }//namespace glm #include "spline.inl" ================================================ FILE: libraries/glm/gtx/spline.inl ================================================ /// @ref gtx_spline namespace glm { template GLM_FUNC_QUALIFIER genType catmullRom ( genType const& v1, genType const& v2, genType const& v3, genType const& v4, typename genType::value_type const& s ) { typename genType::value_type s2 = pow2(s); typename genType::value_type s3 = pow3(s); typename genType::value_type f1 = -s3 + typename genType::value_type(2) * s2 - s; typename genType::value_type f2 = typename genType::value_type(3) * s3 - typename genType::value_type(5) * s2 + typename genType::value_type(2); typename genType::value_type f3 = typename genType::value_type(-3) * s3 + typename genType::value_type(4) * s2 + s; typename genType::value_type f4 = s3 - s2; return (f1 * v1 + f2 * v2 + f3 * v3 + f4 * v4) / typename genType::value_type(2); } template GLM_FUNC_QUALIFIER genType hermite ( genType const& v1, genType const& t1, genType const& v2, genType const& t2, typename genType::value_type const& s ) { typename genType::value_type s2 = pow2(s); typename genType::value_type s3 = pow3(s); typename genType::value_type f1 = typename genType::value_type(2) * s3 - typename genType::value_type(3) * s2 + typename genType::value_type(1); typename genType::value_type f2 = typename genType::value_type(-2) * s3 + typename genType::value_type(3) * s2; typename genType::value_type f3 = s3 - typename genType::value_type(2) * s2 + s; typename genType::value_type f4 = s3 - s2; return f1 * v1 + f2 * v2 + f3 * t1 + f4 * t2; } template GLM_FUNC_QUALIFIER genType cubic ( genType const& v1, genType const& v2, genType const& v3, genType const& v4, typename genType::value_type const& s ) { return ((v1 * s + v2) * s + v3) * s + v4; } }//namespace glm ================================================ FILE: libraries/glm/gtx/std_based_type.hpp ================================================ /// @ref gtx_std_based_type /// @file glm/gtx/std_based_type.hpp /// /// @see core (dependence) /// @see gtx_extented_min_max (dependence) /// /// @defgroup gtx_std_based_type GLM_GTX_std_based_type /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Adds vector types based on STL value types. #pragma once // Dependency: #include "../glm.hpp" #include #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_std_based_type is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_std_based_type extension included") # endif #endif namespace glm { /// @addtogroup gtx_std_based_type /// @{ /// Vector type based of one std::size_t component. /// @see GLM_GTX_std_based_type typedef vec<1, std::size_t, defaultp> size1; /// Vector type based of two std::size_t components. /// @see GLM_GTX_std_based_type typedef vec<2, std::size_t, defaultp> size2; /// Vector type based of three std::size_t components. /// @see GLM_GTX_std_based_type typedef vec<3, std::size_t, defaultp> size3; /// Vector type based of four std::size_t components. /// @see GLM_GTX_std_based_type typedef vec<4, std::size_t, defaultp> size4; /// Vector type based of one std::size_t component. /// @see GLM_GTX_std_based_type typedef vec<1, std::size_t, defaultp> size1_t; /// Vector type based of two std::size_t components. /// @see GLM_GTX_std_based_type typedef vec<2, std::size_t, defaultp> size2_t; /// Vector type based of three std::size_t components. /// @see GLM_GTX_std_based_type typedef vec<3, std::size_t, defaultp> size3_t; /// Vector type based of four std::size_t components. /// @see GLM_GTX_std_based_type typedef vec<4, std::size_t, defaultp> size4_t; /// @} }//namespace glm #include "std_based_type.inl" ================================================ FILE: libraries/glm/gtx/std_based_type.inl ================================================ /// @ref gtx_std_based_type namespace glm { } ================================================ FILE: libraries/glm/gtx/string_cast.hpp ================================================ /// @ref gtx_string_cast /// @file glm/gtx/string_cast.hpp /// /// @see core (dependence) /// @see gtx_integer (dependence) /// @see gtx_quaternion (dependence) /// /// @defgroup gtx_string_cast GLM_GTX_string_cast /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Setup strings for GLM type values /// /// This extension is not supported with CUDA #pragma once // Dependency: #include "../glm.hpp" #include "../gtc/type_precision.hpp" #include "../gtc/quaternion.hpp" #include "../gtx/dual_quaternion.hpp" #include #include #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_string_cast is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_string_cast extension included") # endif #endif #if(GLM_COMPILER & GLM_COMPILER_CUDA) # error "GLM_GTX_string_cast is not supported on CUDA compiler" #endif namespace glm { /// @addtogroup gtx_string_cast /// @{ /// Create a string from a GLM vector or matrix typed variable. /// @see gtx_string_cast extension. template GLM_FUNC_DECL std::string to_string(genType const& x); /// @} }//namespace glm #include "string_cast.inl" ================================================ FILE: libraries/glm/gtx/string_cast.inl ================================================ /// @ref gtx_string_cast #include #include namespace glm{ namespace detail { template struct cast { typedef T value_type; }; template <> struct cast { typedef double value_type; }; GLM_FUNC_QUALIFIER std::string format(const char* msg, ...) { std::size_t const STRING_BUFFER(4096); char text[STRING_BUFFER]; va_list list; if(msg == GLM_NULLPTR) return std::string(); va_start(list, msg); # if (GLM_COMPILER & GLM_COMPILER_VC) vsprintf_s(text, STRING_BUFFER, msg, list); # else// std::vsprintf(text, msg, list); # endif// va_end(list); return std::string(text); } static const char* LabelTrue = "true"; static const char* LabelFalse = "false"; template struct literal { GLM_FUNC_QUALIFIER static char const * value() {return "%d";} }; template struct literal { GLM_FUNC_QUALIFIER static char const * value() {return "%f";} }; # if GLM_MODEL == GLM_MODEL_32 && GLM_COMPILER && GLM_COMPILER_VC template<> struct literal { GLM_FUNC_QUALIFIER static char const * value() {return "%lld";} }; template<> struct literal { GLM_FUNC_QUALIFIER static char const * value() {return "%lld";} }; # endif//GLM_MODEL == GLM_MODEL_32 && GLM_COMPILER && GLM_COMPILER_VC template struct prefix{}; template<> struct prefix { GLM_FUNC_QUALIFIER static char const * value() {return "";} }; template<> struct prefix { GLM_FUNC_QUALIFIER static char const * value() {return "d";} }; template<> struct prefix { GLM_FUNC_QUALIFIER static char const * value() {return "b";} }; template<> struct prefix { GLM_FUNC_QUALIFIER static char const * value() {return "u8";} }; template<> struct prefix { GLM_FUNC_QUALIFIER static char const * value() {return "i8";} }; template<> struct prefix { GLM_FUNC_QUALIFIER static char const * value() {return "u16";} }; template<> struct prefix { GLM_FUNC_QUALIFIER static char const * value() {return "i16";} }; template<> struct prefix { GLM_FUNC_QUALIFIER static char const * value() {return "u";} }; template<> struct prefix { GLM_FUNC_QUALIFIER static char const * value() {return "i";} }; template<> struct prefix { GLM_FUNC_QUALIFIER static char const * value() {return "u64";} }; template<> struct prefix { GLM_FUNC_QUALIFIER static char const * value() {return "i64";} }; template struct compute_to_string {}; template struct compute_to_string > { GLM_FUNC_QUALIFIER static std::string call(vec<1, bool, Q> const& x) { return detail::format("bvec1(%s)", x[0] ? detail::LabelTrue : detail::LabelFalse); } }; template struct compute_to_string > { GLM_FUNC_QUALIFIER static std::string call(vec<2, bool, Q> const& x) { return detail::format("bvec2(%s, %s)", x[0] ? detail::LabelTrue : detail::LabelFalse, x[1] ? detail::LabelTrue : detail::LabelFalse); } }; template struct compute_to_string > { GLM_FUNC_QUALIFIER static std::string call(vec<3, bool, Q> const& x) { return detail::format("bvec3(%s, %s, %s)", x[0] ? detail::LabelTrue : detail::LabelFalse, x[1] ? detail::LabelTrue : detail::LabelFalse, x[2] ? detail::LabelTrue : detail::LabelFalse); } }; template struct compute_to_string > { GLM_FUNC_QUALIFIER static std::string call(vec<4, bool, Q> const& x) { return detail::format("bvec4(%s, %s, %s, %s)", x[0] ? detail::LabelTrue : detail::LabelFalse, x[1] ? detail::LabelTrue : detail::LabelFalse, x[2] ? detail::LabelTrue : detail::LabelFalse, x[3] ? detail::LabelTrue : detail::LabelFalse); } }; template struct compute_to_string > { GLM_FUNC_QUALIFIER static std::string call(vec<1, T, Q> const& x) { char const * PrefixStr = prefix::value(); char const * LiteralStr = literal::is_iec559>::value(); std::string FormatStr(detail::format("%svec1(%s)", PrefixStr, LiteralStr)); return detail::format(FormatStr.c_str(), static_cast::value_type>(x[0])); } }; template struct compute_to_string > { GLM_FUNC_QUALIFIER static std::string call(vec<2, T, Q> const& x) { char const * PrefixStr = prefix::value(); char const * LiteralStr = literal::is_iec559>::value(); std::string FormatStr(detail::format("%svec2(%s, %s)", PrefixStr, LiteralStr, LiteralStr)); return detail::format(FormatStr.c_str(), static_cast::value_type>(x[0]), static_cast::value_type>(x[1])); } }; template struct compute_to_string > { GLM_FUNC_QUALIFIER static std::string call(vec<3, T, Q> const& x) { char const * PrefixStr = prefix::value(); char const * LiteralStr = literal::is_iec559>::value(); std::string FormatStr(detail::format("%svec3(%s, %s, %s)", PrefixStr, LiteralStr, LiteralStr, LiteralStr)); return detail::format(FormatStr.c_str(), static_cast::value_type>(x[0]), static_cast::value_type>(x[1]), static_cast::value_type>(x[2])); } }; template struct compute_to_string > { GLM_FUNC_QUALIFIER static std::string call(vec<4, T, Q> const& x) { char const * PrefixStr = prefix::value(); char const * LiteralStr = literal::is_iec559>::value(); std::string FormatStr(detail::format("%svec4(%s, %s, %s, %s)", PrefixStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr)); return detail::format(FormatStr.c_str(), static_cast::value_type>(x[0]), static_cast::value_type>(x[1]), static_cast::value_type>(x[2]), static_cast::value_type>(x[3])); } }; template struct compute_to_string > { GLM_FUNC_QUALIFIER static std::string call(mat<2, 2, T, Q> const& x) { char const * PrefixStr = prefix::value(); char const * LiteralStr = literal::is_iec559>::value(); std::string FormatStr(detail::format("%smat2x2((%s, %s), (%s, %s))", PrefixStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr)); return detail::format(FormatStr.c_str(), static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1])); } }; template struct compute_to_string > { GLM_FUNC_QUALIFIER static std::string call(mat<2, 3, T, Q> const& x) { char const * PrefixStr = prefix::value(); char const * LiteralStr = literal::is_iec559>::value(); std::string FormatStr(detail::format("%smat2x3((%s, %s, %s), (%s, %s, %s))", PrefixStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr)); return detail::format(FormatStr.c_str(), static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[0][2]), static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[1][2])); } }; template struct compute_to_string > { GLM_FUNC_QUALIFIER static std::string call(mat<2, 4, T, Q> const& x) { char const * PrefixStr = prefix::value(); char const * LiteralStr = literal::is_iec559>::value(); std::string FormatStr(detail::format("%smat2x4((%s, %s, %s, %s), (%s, %s, %s, %s))", PrefixStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr)); return detail::format(FormatStr.c_str(), static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[0][2]), static_cast::value_type>(x[0][3]), static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[1][2]), static_cast::value_type>(x[1][3])); } }; template struct compute_to_string > { GLM_FUNC_QUALIFIER static std::string call(mat<3, 2, T, Q> const& x) { char const * PrefixStr = prefix::value(); char const * LiteralStr = literal::is_iec559>::value(); std::string FormatStr(detail::format("%smat3x2((%s, %s), (%s, %s), (%s, %s))", PrefixStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr)); return detail::format(FormatStr.c_str(), static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[2][0]), static_cast::value_type>(x[2][1])); } }; template struct compute_to_string > { GLM_FUNC_QUALIFIER static std::string call(mat<3, 3, T, Q> const& x) { char const * PrefixStr = prefix::value(); char const * LiteralStr = literal::is_iec559>::value(); std::string FormatStr(detail::format("%smat3x3((%s, %s, %s), (%s, %s, %s), (%s, %s, %s))", PrefixStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr)); return detail::format(FormatStr.c_str(), static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[0][2]), static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[1][2]), static_cast::value_type>(x[2][0]), static_cast::value_type>(x[2][1]), static_cast::value_type>(x[2][2])); } }; template struct compute_to_string > { GLM_FUNC_QUALIFIER static std::string call(mat<3, 4, T, Q> const& x) { char const * PrefixStr = prefix::value(); char const * LiteralStr = literal::is_iec559>::value(); std::string FormatStr(detail::format("%smat3x4((%s, %s, %s, %s), (%s, %s, %s, %s), (%s, %s, %s, %s))", PrefixStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr)); return detail::format(FormatStr.c_str(), static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[0][2]), static_cast::value_type>(x[0][3]), static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[1][2]), static_cast::value_type>(x[1][3]), static_cast::value_type>(x[2][0]), static_cast::value_type>(x[2][1]), static_cast::value_type>(x[2][2]), static_cast::value_type>(x[2][3])); } }; template struct compute_to_string > { GLM_FUNC_QUALIFIER static std::string call(mat<4, 2, T, Q> const& x) { char const * PrefixStr = prefix::value(); char const * LiteralStr = literal::is_iec559>::value(); std::string FormatStr(detail::format("%smat4x2((%s, %s), (%s, %s), (%s, %s), (%s, %s))", PrefixStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr)); return detail::format(FormatStr.c_str(), static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[2][0]), static_cast::value_type>(x[2][1]), static_cast::value_type>(x[3][0]), static_cast::value_type>(x[3][1])); } }; template struct compute_to_string > { GLM_FUNC_QUALIFIER static std::string call(mat<4, 3, T, Q> const& x) { char const * PrefixStr = prefix::value(); char const * LiteralStr = literal::is_iec559>::value(); std::string FormatStr(detail::format("%smat4x3((%s, %s, %s), (%s, %s, %s), (%s, %s, %s), (%s, %s, %s))", PrefixStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr)); return detail::format(FormatStr.c_str(), static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[0][2]), static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[1][2]), static_cast::value_type>(x[2][0]), static_cast::value_type>(x[2][1]), static_cast::value_type>(x[2][2]), static_cast::value_type>(x[3][0]), static_cast::value_type>(x[3][1]), static_cast::value_type>(x[3][2])); } }; template struct compute_to_string > { GLM_FUNC_QUALIFIER static std::string call(mat<4, 4, T, Q> const& x) { char const * PrefixStr = prefix::value(); char const * LiteralStr = literal::is_iec559>::value(); std::string FormatStr(detail::format("%smat4x4((%s, %s, %s, %s), (%s, %s, %s, %s), (%s, %s, %s, %s), (%s, %s, %s, %s))", PrefixStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr)); return detail::format(FormatStr.c_str(), static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[0][2]), static_cast::value_type>(x[0][3]), static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[1][2]), static_cast::value_type>(x[1][3]), static_cast::value_type>(x[2][0]), static_cast::value_type>(x[2][1]), static_cast::value_type>(x[2][2]), static_cast::value_type>(x[2][3]), static_cast::value_type>(x[3][0]), static_cast::value_type>(x[3][1]), static_cast::value_type>(x[3][2]), static_cast::value_type>(x[3][3])); } }; template struct compute_to_string > { GLM_FUNC_QUALIFIER static std::string call(qua const& q) { char const * PrefixStr = prefix::value(); char const * LiteralStr = literal::is_iec559>::value(); std::string FormatStr(detail::format("%squat(%s, {%s, %s, %s})", PrefixStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr)); return detail::format(FormatStr.c_str(), static_cast::value_type>(q.w), static_cast::value_type>(q.x), static_cast::value_type>(q.y), static_cast::value_type>(q.z)); } }; template struct compute_to_string > { GLM_FUNC_QUALIFIER static std::string call(tdualquat const& x) { char const * PrefixStr = prefix::value(); char const * LiteralStr = literal::is_iec559>::value(); std::string FormatStr(detail::format("%sdualquat((%s, {%s, %s, %s}), (%s, {%s, %s, %s}))", PrefixStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr, LiteralStr)); return detail::format(FormatStr.c_str(), static_cast::value_type>(x.real.w), static_cast::value_type>(x.real.x), static_cast::value_type>(x.real.y), static_cast::value_type>(x.real.z), static_cast::value_type>(x.dual.w), static_cast::value_type>(x.dual.x), static_cast::value_type>(x.dual.y), static_cast::value_type>(x.dual.z)); } }; }//namespace detail template GLM_FUNC_QUALIFIER std::string to_string(matType const& x) { return detail::compute_to_string::call(x); } }//namespace glm ================================================ FILE: libraries/glm/gtx/texture.hpp ================================================ /// @ref gtx_texture /// @file glm/gtx/texture.hpp /// /// @see core (dependence) /// /// @defgroup gtx_texture GLM_GTX_texture /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Wrapping mode of texture coordinates. #pragma once // Dependency: #include "../glm.hpp" #include "../gtc/integer.hpp" #include "../gtx/component_wise.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_texture is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_texture extension included") # endif #endif namespace glm { /// @addtogroup gtx_texture /// @{ /// Compute the number of mipmaps levels necessary to create a mipmap complete texture /// /// @param Extent Extent of the texture base level mipmap /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point or signed integer scalar types /// @tparam Q Value from qualifier enum template T levels(vec const& Extent); /// @} }// namespace glm #include "texture.inl" ================================================ FILE: libraries/glm/gtx/texture.inl ================================================ /// @ref gtx_texture namespace glm { template inline T levels(vec const& Extent) { return glm::log2(compMax(Extent)) + static_cast(1); } template inline T levels(T Extent) { return vec<1, T, defaultp>(Extent).x; } }//namespace glm ================================================ FILE: libraries/glm/gtx/transform.hpp ================================================ /// @ref gtx_transform /// @file glm/gtx/transform.hpp /// /// @see core (dependence) /// @see gtc_matrix_transform (dependence) /// @see gtx_transform /// @see gtx_transform2 /// /// @defgroup gtx_transform GLM_GTX_transform /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Add transformation matrices #pragma once // Dependency: #include "../glm.hpp" #include "../gtc/matrix_transform.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_transform is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_transform extension included") # endif #endif namespace glm { /// @addtogroup gtx_transform /// @{ /// Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars. /// @see gtc_matrix_transform /// @see gtx_transform template GLM_FUNC_DECL mat<4, 4, T, Q> translate( vec<3, T, Q> const& v); /// Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in radians. /// @see gtc_matrix_transform /// @see gtx_transform template GLM_FUNC_DECL mat<4, 4, T, Q> rotate( T angle, vec<3, T, Q> const& v); /// Transforms a matrix with a scale 4 * 4 matrix created from a vector of 3 components. /// @see gtc_matrix_transform /// @see gtx_transform template GLM_FUNC_DECL mat<4, 4, T, Q> scale( vec<3, T, Q> const& v); /// @} }// namespace glm #include "transform.inl" ================================================ FILE: libraries/glm/gtx/transform.inl ================================================ /// @ref gtx_transform namespace glm { template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> translate(vec<3, T, Q> const& v) { return translate(mat<4, 4, T, Q>(static_cast(1)), v); } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotate(T angle, vec<3, T, Q> const& v) { return rotate(mat<4, 4, T, Q>(static_cast(1)), angle, v); } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scale(vec<3, T, Q> const& v) { return scale(mat<4, 4, T, Q>(static_cast(1)), v); } }//namespace glm ================================================ FILE: libraries/glm/gtx/transform2.hpp ================================================ /// @ref gtx_transform2 /// @file glm/gtx/transform2.hpp /// /// @see core (dependence) /// @see gtx_transform (dependence) /// /// @defgroup gtx_transform2 GLM_GTX_transform2 /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Add extra transformation matrices #pragma once // Dependency: #include "../glm.hpp" #include "../gtx/transform.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_transform2 is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_transform2 extension included") # endif #endif namespace glm { /// @addtogroup gtx_transform2 /// @{ //! Transforms a matrix with a shearing on X axis. //! From GLM_GTX_transform2 extension. template GLM_FUNC_DECL mat<3, 3, T, Q> shearX2D(mat<3, 3, T, Q> const& m, T y); //! Transforms a matrix with a shearing on Y axis. //! From GLM_GTX_transform2 extension. template GLM_FUNC_DECL mat<3, 3, T, Q> shearY2D(mat<3, 3, T, Q> const& m, T x); //! Transforms a matrix with a shearing on X axis //! From GLM_GTX_transform2 extension. template GLM_FUNC_DECL mat<4, 4, T, Q> shearX3D(mat<4, 4, T, Q> const& m, T y, T z); //! Transforms a matrix with a shearing on Y axis. //! From GLM_GTX_transform2 extension. template GLM_FUNC_DECL mat<4, 4, T, Q> shearY3D(mat<4, 4, T, Q> const& m, T x, T z); //! Transforms a matrix with a shearing on Z axis. //! From GLM_GTX_transform2 extension. template GLM_FUNC_DECL mat<4, 4, T, Q> shearZ3D(mat<4, 4, T, Q> const& m, T x, T y); //template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shear(const mat<4, 4, T, Q> & m, shearPlane, planePoint, angle) // Identity + tan(angle) * cross(Normal, OnPlaneVector) 0 // - dot(PointOnPlane, normal) * OnPlaneVector 1 // Reflect functions seem to don't work //template mat<3, 3, T, Q> reflect2D(const mat<3, 3, T, Q> & m, const vec<3, T, Q>& normal){return reflect2DGTX(m, normal);} //!< \brief Build a reflection matrix (from GLM_GTX_transform2 extension) //template mat<4, 4, T, Q> reflect3D(const mat<4, 4, T, Q> & m, const vec<3, T, Q>& normal){return reflect3DGTX(m, normal);} //!< \brief Build a reflection matrix (from GLM_GTX_transform2 extension) //! Build planar projection matrix along normal axis. //! From GLM_GTX_transform2 extension. template GLM_FUNC_DECL mat<3, 3, T, Q> proj2D(mat<3, 3, T, Q> const& m, vec<3, T, Q> const& normal); //! Build planar projection matrix along normal axis. //! From GLM_GTX_transform2 extension. template GLM_FUNC_DECL mat<4, 4, T, Q> proj3D(mat<4, 4, T, Q> const & m, vec<3, T, Q> const& normal); //! Build a scale bias matrix. //! From GLM_GTX_transform2 extension. template GLM_FUNC_DECL mat<4, 4, T, Q> scaleBias(T scale, T bias); //! Build a scale bias matrix. //! From GLM_GTX_transform2 extension. template GLM_FUNC_DECL mat<4, 4, T, Q> scaleBias(mat<4, 4, T, Q> const& m, T scale, T bias); /// @} }// namespace glm #include "transform2.inl" ================================================ FILE: libraries/glm/gtx/transform2.inl ================================================ /// @ref gtx_transform2 namespace glm { template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearX2D(mat<3, 3, T, Q> const& m, T s) { mat<3, 3, T, Q> r(1); r[1][0] = s; return m * r; } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearY2D(mat<3, 3, T, Q> const& m, T s) { mat<3, 3, T, Q> r(1); r[0][1] = s; return m * r; } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shearX3D(mat<4, 4, T, Q> const& m, T s, T t) { mat<4, 4, T, Q> r(1); r[0][1] = s; r[0][2] = t; return m * r; } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shearY3D(mat<4, 4, T, Q> const& m, T s, T t) { mat<4, 4, T, Q> r(1); r[1][0] = s; r[1][2] = t; return m * r; } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shearZ3D(mat<4, 4, T, Q> const& m, T s, T t) { mat<4, 4, T, Q> r(1); r[2][0] = s; r[2][1] = t; return m * r; } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> reflect2D(mat<3, 3, T, Q> const& m, vec<3, T, Q> const& normal) { mat<3, 3, T, Q> r(static_cast(1)); r[0][0] = static_cast(1) - static_cast(2) * normal.x * normal.x; r[0][1] = -static_cast(2) * normal.x * normal.y; r[1][0] = -static_cast(2) * normal.x * normal.y; r[1][1] = static_cast(1) - static_cast(2) * normal.y * normal.y; return m * r; } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> reflect3D(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& normal) { mat<4, 4, T, Q> r(static_cast(1)); r[0][0] = static_cast(1) - static_cast(2) * normal.x * normal.x; r[0][1] = -static_cast(2) * normal.x * normal.y; r[0][2] = -static_cast(2) * normal.x * normal.z; r[1][0] = -static_cast(2) * normal.x * normal.y; r[1][1] = static_cast(1) - static_cast(2) * normal.y * normal.y; r[1][2] = -static_cast(2) * normal.y * normal.z; r[2][0] = -static_cast(2) * normal.x * normal.z; r[2][1] = -static_cast(2) * normal.y * normal.z; r[2][2] = static_cast(1) - static_cast(2) * normal.z * normal.z; return m * r; } template GLM_FUNC_QUALIFIER mat<3, 3, T, Q> proj2D( const mat<3, 3, T, Q>& m, const vec<3, T, Q>& normal) { mat<3, 3, T, Q> r(static_cast(1)); r[0][0] = static_cast(1) - normal.x * normal.x; r[0][1] = - normal.x * normal.y; r[1][0] = - normal.x * normal.y; r[1][1] = static_cast(1) - normal.y * normal.y; return m * r; } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> proj3D( const mat<4, 4, T, Q>& m, const vec<3, T, Q>& normal) { mat<4, 4, T, Q> r(static_cast(1)); r[0][0] = static_cast(1) - normal.x * normal.x; r[0][1] = - normal.x * normal.y; r[0][2] = - normal.x * normal.z; r[1][0] = - normal.x * normal.y; r[1][1] = static_cast(1) - normal.y * normal.y; r[1][2] = - normal.y * normal.z; r[2][0] = - normal.x * normal.z; r[2][1] = - normal.y * normal.z; r[2][2] = static_cast(1) - normal.z * normal.z; return m * r; } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scaleBias(T scale, T bias) { mat<4, 4, T, Q> result; result[3] = vec<4, T, Q>(vec<3, T, Q>(bias), static_cast(1)); result[0][0] = scale; result[1][1] = scale; result[2][2] = scale; return result; } template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scaleBias(mat<4, 4, T, Q> const& m, T scale, T bias) { return m * scaleBias(scale, bias); } }//namespace glm ================================================ FILE: libraries/glm/gtx/type_aligned.hpp ================================================ /// @ref gtx_type_aligned /// @file glm/gtx/type_aligned.hpp /// /// @see core (dependence) /// @see gtc_quaternion (dependence) /// /// @defgroup gtx_type_aligned GLM_GTX_type_aligned /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Defines aligned types. #pragma once // Dependency: #include "../gtc/type_precision.hpp" #include "../gtc/quaternion.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_type_aligned is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_type_aligned extension included") # endif #endif namespace glm { /////////////////////////// // Signed int vector types /// @addtogroup gtx_type_aligned /// @{ /// Low qualifier 8 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_int8, aligned_lowp_int8, 1); /// Low qualifier 16 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_int16, aligned_lowp_int16, 2); /// Low qualifier 32 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_int32, aligned_lowp_int32, 4); /// Low qualifier 64 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_int64, aligned_lowp_int64, 8); /// Low qualifier 8 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_int8_t, aligned_lowp_int8_t, 1); /// Low qualifier 16 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_int16_t, aligned_lowp_int16_t, 2); /// Low qualifier 32 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_int32_t, aligned_lowp_int32_t, 4); /// Low qualifier 64 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_int64_t, aligned_lowp_int64_t, 8); /// Low qualifier 8 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_i8, aligned_lowp_i8, 1); /// Low qualifier 16 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_i16, aligned_lowp_i16, 2); /// Low qualifier 32 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_i32, aligned_lowp_i32, 4); /// Low qualifier 64 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_i64, aligned_lowp_i64, 8); /// Medium qualifier 8 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_int8, aligned_mediump_int8, 1); /// Medium qualifier 16 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_int16, aligned_mediump_int16, 2); /// Medium qualifier 32 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_int32, aligned_mediump_int32, 4); /// Medium qualifier 64 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_int64, aligned_mediump_int64, 8); /// Medium qualifier 8 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_int8_t, aligned_mediump_int8_t, 1); /// Medium qualifier 16 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_int16_t, aligned_mediump_int16_t, 2); /// Medium qualifier 32 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_int32_t, aligned_mediump_int32_t, 4); /// Medium qualifier 64 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_int64_t, aligned_mediump_int64_t, 8); /// Medium qualifier 8 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_i8, aligned_mediump_i8, 1); /// Medium qualifier 16 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_i16, aligned_mediump_i16, 2); /// Medium qualifier 32 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_i32, aligned_mediump_i32, 4); /// Medium qualifier 64 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_i64, aligned_mediump_i64, 8); /// High qualifier 8 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_int8, aligned_highp_int8, 1); /// High qualifier 16 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_int16, aligned_highp_int16, 2); /// High qualifier 32 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_int32, aligned_highp_int32, 4); /// High qualifier 64 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_int64, aligned_highp_int64, 8); /// High qualifier 8 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_int8_t, aligned_highp_int8_t, 1); /// High qualifier 16 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_int16_t, aligned_highp_int16_t, 2); /// High qualifier 32 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_int32_t, aligned_highp_int32_t, 4); /// High qualifier 64 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_int64_t, aligned_highp_int64_t, 8); /// High qualifier 8 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_i8, aligned_highp_i8, 1); /// High qualifier 16 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_i16, aligned_highp_i16, 2); /// High qualifier 32 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_i32, aligned_highp_i32, 4); /// High qualifier 64 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_i64, aligned_highp_i64, 8); /// Default qualifier 8 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(int8, aligned_int8, 1); /// Default qualifier 16 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(int16, aligned_int16, 2); /// Default qualifier 32 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(int32, aligned_int32, 4); /// Default qualifier 64 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(int64, aligned_int64, 8); /// Default qualifier 8 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(int8_t, aligned_int8_t, 1); /// Default qualifier 16 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(int16_t, aligned_int16_t, 2); /// Default qualifier 32 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(int32_t, aligned_int32_t, 4); /// Default qualifier 64 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(int64_t, aligned_int64_t, 8); /// Default qualifier 8 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i8, aligned_i8, 1); /// Default qualifier 16 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i16, aligned_i16, 2); /// Default qualifier 32 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i32, aligned_i32, 4); /// Default qualifier 64 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i64, aligned_i64, 8); /// Default qualifier 32 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(ivec1, aligned_ivec1, 4); /// Default qualifier 32 bit signed integer aligned vector of 2 components type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(ivec2, aligned_ivec2, 8); /// Default qualifier 32 bit signed integer aligned vector of 3 components type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(ivec3, aligned_ivec3, 16); /// Default qualifier 32 bit signed integer aligned vector of 4 components type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(ivec4, aligned_ivec4, 16); /// Default qualifier 8 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i8vec1, aligned_i8vec1, 1); /// Default qualifier 8 bit signed integer aligned vector of 2 components type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i8vec2, aligned_i8vec2, 2); /// Default qualifier 8 bit signed integer aligned vector of 3 components type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i8vec3, aligned_i8vec3, 4); /// Default qualifier 8 bit signed integer aligned vector of 4 components type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i8vec4, aligned_i8vec4, 4); /// Default qualifier 16 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i16vec1, aligned_i16vec1, 2); /// Default qualifier 16 bit signed integer aligned vector of 2 components type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i16vec2, aligned_i16vec2, 4); /// Default qualifier 16 bit signed integer aligned vector of 3 components type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i16vec3, aligned_i16vec3, 8); /// Default qualifier 16 bit signed integer aligned vector of 4 components type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i16vec4, aligned_i16vec4, 8); /// Default qualifier 32 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i32vec1, aligned_i32vec1, 4); /// Default qualifier 32 bit signed integer aligned vector of 2 components type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i32vec2, aligned_i32vec2, 8); /// Default qualifier 32 bit signed integer aligned vector of 3 components type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i32vec3, aligned_i32vec3, 16); /// Default qualifier 32 bit signed integer aligned vector of 4 components type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i32vec4, aligned_i32vec4, 16); /// Default qualifier 64 bit signed integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i64vec1, aligned_i64vec1, 8); /// Default qualifier 64 bit signed integer aligned vector of 2 components type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i64vec2, aligned_i64vec2, 16); /// Default qualifier 64 bit signed integer aligned vector of 3 components type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i64vec3, aligned_i64vec3, 32); /// Default qualifier 64 bit signed integer aligned vector of 4 components type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(i64vec4, aligned_i64vec4, 32); ///////////////////////////// // Unsigned int vector types /// Low qualifier 8 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_uint8, aligned_lowp_uint8, 1); /// Low qualifier 16 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_uint16, aligned_lowp_uint16, 2); /// Low qualifier 32 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_uint32, aligned_lowp_uint32, 4); /// Low qualifier 64 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_uint64, aligned_lowp_uint64, 8); /// Low qualifier 8 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_uint8_t, aligned_lowp_uint8_t, 1); /// Low qualifier 16 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_uint16_t, aligned_lowp_uint16_t, 2); /// Low qualifier 32 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_uint32_t, aligned_lowp_uint32_t, 4); /// Low qualifier 64 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_uint64_t, aligned_lowp_uint64_t, 8); /// Low qualifier 8 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_u8, aligned_lowp_u8, 1); /// Low qualifier 16 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_u16, aligned_lowp_u16, 2); /// Low qualifier 32 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_u32, aligned_lowp_u32, 4); /// Low qualifier 64 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(lowp_u64, aligned_lowp_u64, 8); /// Medium qualifier 8 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_uint8, aligned_mediump_uint8, 1); /// Medium qualifier 16 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_uint16, aligned_mediump_uint16, 2); /// Medium qualifier 32 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_uint32, aligned_mediump_uint32, 4); /// Medium qualifier 64 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_uint64, aligned_mediump_uint64, 8); /// Medium qualifier 8 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_uint8_t, aligned_mediump_uint8_t, 1); /// Medium qualifier 16 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_uint16_t, aligned_mediump_uint16_t, 2); /// Medium qualifier 32 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_uint32_t, aligned_mediump_uint32_t, 4); /// Medium qualifier 64 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_uint64_t, aligned_mediump_uint64_t, 8); /// Medium qualifier 8 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_u8, aligned_mediump_u8, 1); /// Medium qualifier 16 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_u16, aligned_mediump_u16, 2); /// Medium qualifier 32 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_u32, aligned_mediump_u32, 4); /// Medium qualifier 64 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mediump_u64, aligned_mediump_u64, 8); /// High qualifier 8 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_uint8, aligned_highp_uint8, 1); /// High qualifier 16 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_uint16, aligned_highp_uint16, 2); /// High qualifier 32 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_uint32, aligned_highp_uint32, 4); /// High qualifier 64 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_uint64, aligned_highp_uint64, 8); /// High qualifier 8 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_uint8_t, aligned_highp_uint8_t, 1); /// High qualifier 16 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_uint16_t, aligned_highp_uint16_t, 2); /// High qualifier 32 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_uint32_t, aligned_highp_uint32_t, 4); /// High qualifier 64 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_uint64_t, aligned_highp_uint64_t, 8); /// High qualifier 8 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_u8, aligned_highp_u8, 1); /// High qualifier 16 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_u16, aligned_highp_u16, 2); /// High qualifier 32 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_u32, aligned_highp_u32, 4); /// High qualifier 64 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(highp_u64, aligned_highp_u64, 8); /// Default qualifier 8 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(uint8, aligned_uint8, 1); /// Default qualifier 16 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(uint16, aligned_uint16, 2); /// Default qualifier 32 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(uint32, aligned_uint32, 4); /// Default qualifier 64 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(uint64, aligned_uint64, 8); /// Default qualifier 8 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(uint8_t, aligned_uint8_t, 1); /// Default qualifier 16 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(uint16_t, aligned_uint16_t, 2); /// Default qualifier 32 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(uint32_t, aligned_uint32_t, 4); /// Default qualifier 64 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(uint64_t, aligned_uint64_t, 8); /// Default qualifier 8 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u8, aligned_u8, 1); /// Default qualifier 16 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u16, aligned_u16, 2); /// Default qualifier 32 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u32, aligned_u32, 4); /// Default qualifier 64 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u64, aligned_u64, 8); /// Default qualifier 32 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(uvec1, aligned_uvec1, 4); /// Default qualifier 32 bit unsigned integer aligned vector of 2 components type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(uvec2, aligned_uvec2, 8); /// Default qualifier 32 bit unsigned integer aligned vector of 3 components type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(uvec3, aligned_uvec3, 16); /// Default qualifier 32 bit unsigned integer aligned vector of 4 components type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(uvec4, aligned_uvec4, 16); /// Default qualifier 8 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u8vec1, aligned_u8vec1, 1); /// Default qualifier 8 bit unsigned integer aligned vector of 2 components type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u8vec2, aligned_u8vec2, 2); /// Default qualifier 8 bit unsigned integer aligned vector of 3 components type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u8vec3, aligned_u8vec3, 4); /// Default qualifier 8 bit unsigned integer aligned vector of 4 components type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u8vec4, aligned_u8vec4, 4); /// Default qualifier 16 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u16vec1, aligned_u16vec1, 2); /// Default qualifier 16 bit unsigned integer aligned vector of 2 components type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u16vec2, aligned_u16vec2, 4); /// Default qualifier 16 bit unsigned integer aligned vector of 3 components type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u16vec3, aligned_u16vec3, 8); /// Default qualifier 16 bit unsigned integer aligned vector of 4 components type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u16vec4, aligned_u16vec4, 8); /// Default qualifier 32 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u32vec1, aligned_u32vec1, 4); /// Default qualifier 32 bit unsigned integer aligned vector of 2 components type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u32vec2, aligned_u32vec2, 8); /// Default qualifier 32 bit unsigned integer aligned vector of 3 components type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u32vec3, aligned_u32vec3, 16); /// Default qualifier 32 bit unsigned integer aligned vector of 4 components type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u32vec4, aligned_u32vec4, 16); /// Default qualifier 64 bit unsigned integer aligned scalar type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u64vec1, aligned_u64vec1, 8); /// Default qualifier 64 bit unsigned integer aligned vector of 2 components type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u64vec2, aligned_u64vec2, 16); /// Default qualifier 64 bit unsigned integer aligned vector of 3 components type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u64vec3, aligned_u64vec3, 32); /// Default qualifier 64 bit unsigned integer aligned vector of 4 components type. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(u64vec4, aligned_u64vec4, 32); ////////////////////// // Float vector types /// 32 bit single-qualifier floating-point aligned scalar. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(float32, aligned_float32, 4); /// 32 bit single-qualifier floating-point aligned scalar. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(float32_t, aligned_float32_t, 4); /// 32 bit single-qualifier floating-point aligned scalar. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(float32, aligned_f32, 4); # ifndef GLM_FORCE_SINGLE_ONLY /// 64 bit double-qualifier floating-point aligned scalar. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(float64, aligned_float64, 8); /// 64 bit double-qualifier floating-point aligned scalar. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(float64_t, aligned_float64_t, 8); /// 64 bit double-qualifier floating-point aligned scalar. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(float64, aligned_f64, 8); # endif//GLM_FORCE_SINGLE_ONLY /// Single-qualifier floating-point aligned vector of 1 component. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(vec1, aligned_vec1, 4); /// Single-qualifier floating-point aligned vector of 2 components. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(vec2, aligned_vec2, 8); /// Single-qualifier floating-point aligned vector of 3 components. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(vec3, aligned_vec3, 16); /// Single-qualifier floating-point aligned vector of 4 components. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(vec4, aligned_vec4, 16); /// Single-qualifier floating-point aligned vector of 1 component. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fvec1, aligned_fvec1, 4); /// Single-qualifier floating-point aligned vector of 2 components. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fvec2, aligned_fvec2, 8); /// Single-qualifier floating-point aligned vector of 3 components. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fvec3, aligned_fvec3, 16); /// Single-qualifier floating-point aligned vector of 4 components. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fvec4, aligned_fvec4, 16); /// Single-qualifier floating-point aligned vector of 1 component. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32vec1, aligned_f32vec1, 4); /// Single-qualifier floating-point aligned vector of 2 components. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32vec2, aligned_f32vec2, 8); /// Single-qualifier floating-point aligned vector of 3 components. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32vec3, aligned_f32vec3, 16); /// Single-qualifier floating-point aligned vector of 4 components. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32vec4, aligned_f32vec4, 16); /// Double-qualifier floating-point aligned vector of 1 component. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(dvec1, aligned_dvec1, 8); /// Double-qualifier floating-point aligned vector of 2 components. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(dvec2, aligned_dvec2, 16); /// Double-qualifier floating-point aligned vector of 3 components. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(dvec3, aligned_dvec3, 32); /// Double-qualifier floating-point aligned vector of 4 components. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(dvec4, aligned_dvec4, 32); # ifndef GLM_FORCE_SINGLE_ONLY /// Double-qualifier floating-point aligned vector of 1 component. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64vec1, aligned_f64vec1, 8); /// Double-qualifier floating-point aligned vector of 2 components. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64vec2, aligned_f64vec2, 16); /// Double-qualifier floating-point aligned vector of 3 components. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64vec3, aligned_f64vec3, 32); /// Double-qualifier floating-point aligned vector of 4 components. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64vec4, aligned_f64vec4, 32); # endif//GLM_FORCE_SINGLE_ONLY ////////////////////// // Float matrix types /// Single-qualifier floating-point aligned 1x1 matrix. /// @see gtx_type_aligned //typedef detail::tmat1 mat1; /// Single-qualifier floating-point aligned 2x2 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mat2, aligned_mat2, 16); /// Single-qualifier floating-point aligned 3x3 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mat3, aligned_mat3, 16); /// Single-qualifier floating-point aligned 4x4 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mat4, aligned_mat4, 16); /// Single-qualifier floating-point aligned 1x1 matrix. /// @see gtx_type_aligned //typedef detail::tmat1x1 mat1; /// Single-qualifier floating-point aligned 2x2 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mat2x2, aligned_mat2x2, 16); /// Single-qualifier floating-point aligned 3x3 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mat3x3, aligned_mat3x3, 16); /// Single-qualifier floating-point aligned 4x4 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(mat4x4, aligned_mat4x4, 16); /// Single-qualifier floating-point aligned 1x1 matrix. /// @see gtx_type_aligned //typedef detail::tmat1x1 fmat1; /// Single-qualifier floating-point aligned 2x2 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2, 16); /// Single-qualifier floating-point aligned 3x3 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3, 16); /// Single-qualifier floating-point aligned 4x4 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4, 16); /// Single-qualifier floating-point aligned 1x1 matrix. /// @see gtx_type_aligned //typedef f32 fmat1x1; /// Single-qualifier floating-point aligned 2x2 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2x2, 16); /// Single-qualifier floating-point aligned 2x3 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fmat2x3, aligned_fmat2x3, 16); /// Single-qualifier floating-point aligned 2x4 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fmat2x4, aligned_fmat2x4, 16); /// Single-qualifier floating-point aligned 3x2 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fmat3x2, aligned_fmat3x2, 16); /// Single-qualifier floating-point aligned 3x3 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3x3, 16); /// Single-qualifier floating-point aligned 3x4 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fmat3x4, aligned_fmat3x4, 16); /// Single-qualifier floating-point aligned 4x2 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fmat4x2, aligned_fmat4x2, 16); /// Single-qualifier floating-point aligned 4x3 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fmat4x3, aligned_fmat4x3, 16); /// Single-qualifier floating-point aligned 4x4 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4x4, 16); /// Single-qualifier floating-point aligned 1x1 matrix. /// @see gtx_type_aligned //typedef detail::tmat1x1 f32mat1; /// Single-qualifier floating-point aligned 2x2 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2, 16); /// Single-qualifier floating-point aligned 3x3 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3, 16); /// Single-qualifier floating-point aligned 4x4 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4, 16); /// Single-qualifier floating-point aligned 1x1 matrix. /// @see gtx_type_aligned //typedef f32 f32mat1x1; /// Single-qualifier floating-point aligned 2x2 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2x2, 16); /// Single-qualifier floating-point aligned 2x3 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32mat2x3, aligned_f32mat2x3, 16); /// Single-qualifier floating-point aligned 2x4 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32mat2x4, aligned_f32mat2x4, 16); /// Single-qualifier floating-point aligned 3x2 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32mat3x2, aligned_f32mat3x2, 16); /// Single-qualifier floating-point aligned 3x3 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3x3, 16); /// Single-qualifier floating-point aligned 3x4 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32mat3x4, aligned_f32mat3x4, 16); /// Single-qualifier floating-point aligned 4x2 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32mat4x2, aligned_f32mat4x2, 16); /// Single-qualifier floating-point aligned 4x3 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32mat4x3, aligned_f32mat4x3, 16); /// Single-qualifier floating-point aligned 4x4 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4x4, 16); # ifndef GLM_FORCE_SINGLE_ONLY /// Double-qualifier floating-point aligned 1x1 matrix. /// @see gtx_type_aligned //typedef detail::tmat1x1 f64mat1; /// Double-qualifier floating-point aligned 2x2 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2, 32); /// Double-qualifier floating-point aligned 3x3 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3, 32); /// Double-qualifier floating-point aligned 4x4 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4, 32); /// Double-qualifier floating-point aligned 1x1 matrix. /// @see gtx_type_aligned //typedef f64 f64mat1x1; /// Double-qualifier floating-point aligned 2x2 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2x2, 32); /// Double-qualifier floating-point aligned 2x3 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64mat2x3, aligned_f64mat2x3, 32); /// Double-qualifier floating-point aligned 2x4 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64mat2x4, aligned_f64mat2x4, 32); /// Double-qualifier floating-point aligned 3x2 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64mat3x2, aligned_f64mat3x2, 32); /// Double-qualifier floating-point aligned 3x3 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3x3, 32); /// Double-qualifier floating-point aligned 3x4 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64mat3x4, aligned_f64mat3x4, 32); /// Double-qualifier floating-point aligned 4x2 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64mat4x2, aligned_f64mat4x2, 32); /// Double-qualifier floating-point aligned 4x3 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64mat4x3, aligned_f64mat4x3, 32); /// Double-qualifier floating-point aligned 4x4 matrix. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4x4, 32); # endif//GLM_FORCE_SINGLE_ONLY ////////////////////////// // Quaternion types /// Single-qualifier floating-point aligned quaternion. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(quat, aligned_quat, 16); /// Single-qualifier floating-point aligned quaternion. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(quat, aligned_fquat, 16); /// Double-qualifier floating-point aligned quaternion. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(dquat, aligned_dquat, 32); /// Single-qualifier floating-point aligned quaternion. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f32quat, aligned_f32quat, 16); # ifndef GLM_FORCE_SINGLE_ONLY /// Double-qualifier floating-point aligned quaternion. /// @see gtx_type_aligned GLM_ALIGNED_TYPEDEF(f64quat, aligned_f64quat, 32); # endif//GLM_FORCE_SINGLE_ONLY /// @} }//namespace glm #include "type_aligned.inl" ================================================ FILE: libraries/glm/gtx/type_aligned.inl ================================================ /// @ref gtc_type_aligned namespace glm { } ================================================ FILE: libraries/glm/gtx/type_trait.hpp ================================================ /// @ref gtx_type_trait /// @file glm/gtx/type_trait.hpp /// /// @see core (dependence) /// /// @defgroup gtx_type_trait GLM_GTX_type_trait /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Defines traits for each type. #pragma once #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_type_trait is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_type_trait extension included") # endif #endif // Dependency: #include "../detail/qualifier.hpp" #include "../gtc/quaternion.hpp" #include "../gtx/dual_quaternion.hpp" namespace glm { /// @addtogroup gtx_type_trait /// @{ template struct type { static bool const is_vec = false; static bool const is_mat = false; static bool const is_quat = false; static length_t const components = 0; static length_t const cols = 0; static length_t const rows = 0; }; template struct type > { static bool const is_vec = true; static bool const is_mat = false; static bool const is_quat = false; static length_t const components = L; }; template struct type > { static bool const is_vec = false; static bool const is_mat = true; static bool const is_quat = false; static length_t const components = C; static length_t const cols = C; static length_t const rows = R; }; template struct type > { static bool const is_vec = false; static bool const is_mat = false; static bool const is_quat = true; static length_t const components = 4; }; template struct type > { static bool const is_vec = false; static bool const is_mat = false; static bool const is_quat = true; static length_t const components = 8; }; /// @} }//namespace glm #include "type_trait.inl" ================================================ FILE: libraries/glm/gtx/type_trait.inl ================================================ /// @ref gtx_type_trait namespace glm { template bool const type::is_vec; template bool const type::is_mat; template bool const type::is_quat; template length_t const type::components; template length_t const type::cols; template length_t const type::rows; // vec template bool const type >::is_vec; template bool const type >::is_mat; template bool const type >::is_quat; template length_t const type >::components; // mat template bool const type >::is_vec; template bool const type >::is_mat; template bool const type >::is_quat; template length_t const type >::components; template length_t const type >::cols; template length_t const type >::rows; // tquat template bool const type >::is_vec; template bool const type >::is_mat; template bool const type >::is_quat; template length_t const type >::components; // tdualquat template bool const type >::is_vec; template bool const type >::is_mat; template bool const type >::is_quat; template length_t const type >::components; }//namespace glm ================================================ FILE: libraries/glm/gtx/vec_swizzle.hpp ================================================ /// @ref gtx_vec_swizzle /// @file glm/gtx/vec_swizzle.hpp /// /// @see core (dependence) /// /// @defgroup gtx_vec_swizzle GLM_GTX_vec_swizzle /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Functions to perform swizzle operation. #pragma once #include "../glm.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_vec_swizzle is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_vec_swizzle extension included") # endif #endif namespace glm { // xx template GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<1, T, Q> &v) { return glm::vec<2, T, Q>(v.x, v.x); } template GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<2, T, Q> &v) { return glm::vec<2, T, Q>(v.x, v.x); } template GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<3, T, Q> &v) { return glm::vec<2, T, Q>(v.x, v.x); } template GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<4, T, Q> &v) { return glm::vec<2, T, Q>(v.x, v.x); } // xy template GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<2, T, Q> &v) { return glm::vec<2, T, Q>(v.x, v.y); } template GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<3, T, Q> &v) { return glm::vec<2, T, Q>(v.x, v.y); } template GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<4, T, Q> &v) { return glm::vec<2, T, Q>(v.x, v.y); } // xz template GLM_INLINE glm::vec<2, T, Q> xz(const glm::vec<3, T, Q> &v) { return glm::vec<2, T, Q>(v.x, v.z); } template GLM_INLINE glm::vec<2, T, Q> xz(const glm::vec<4, T, Q> &v) { return glm::vec<2, T, Q>(v.x, v.z); } // xw template GLM_INLINE glm::vec<2, T, Q> xw(const glm::vec<4, T, Q> &v) { return glm::vec<2, T, Q>(v.x, v.w); } // yx template GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<2, T, Q> &v) { return glm::vec<2, T, Q>(v.y, v.x); } template GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<3, T, Q> &v) { return glm::vec<2, T, Q>(v.y, v.x); } template GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<4, T, Q> &v) { return glm::vec<2, T, Q>(v.y, v.x); } // yy template GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<2, T, Q> &v) { return glm::vec<2, T, Q>(v.y, v.y); } template GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<3, T, Q> &v) { return glm::vec<2, T, Q>(v.y, v.y); } template GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<4, T, Q> &v) { return glm::vec<2, T, Q>(v.y, v.y); } // yz template GLM_INLINE glm::vec<2, T, Q> yz(const glm::vec<3, T, Q> &v) { return glm::vec<2, T, Q>(v.y, v.z); } template GLM_INLINE glm::vec<2, T, Q> yz(const glm::vec<4, T, Q> &v) { return glm::vec<2, T, Q>(v.y, v.z); } // yw template GLM_INLINE glm::vec<2, T, Q> yw(const glm::vec<4, T, Q> &v) { return glm::vec<2, T, Q>(v.y, v.w); } // zx template GLM_INLINE glm::vec<2, T, Q> zx(const glm::vec<3, T, Q> &v) { return glm::vec<2, T, Q>(v.z, v.x); } template GLM_INLINE glm::vec<2, T, Q> zx(const glm::vec<4, T, Q> &v) { return glm::vec<2, T, Q>(v.z, v.x); } // zy template GLM_INLINE glm::vec<2, T, Q> zy(const glm::vec<3, T, Q> &v) { return glm::vec<2, T, Q>(v.z, v.y); } template GLM_INLINE glm::vec<2, T, Q> zy(const glm::vec<4, T, Q> &v) { return glm::vec<2, T, Q>(v.z, v.y); } // zz template GLM_INLINE glm::vec<2, T, Q> zz(const glm::vec<3, T, Q> &v) { return glm::vec<2, T, Q>(v.z, v.z); } template GLM_INLINE glm::vec<2, T, Q> zz(const glm::vec<4, T, Q> &v) { return glm::vec<2, T, Q>(v.z, v.z); } // zw template GLM_INLINE glm::vec<2, T, Q> zw(const glm::vec<4, T, Q> &v) { return glm::vec<2, T, Q>(v.z, v.w); } // wx template GLM_INLINE glm::vec<2, T, Q> wx(const glm::vec<4, T, Q> &v) { return glm::vec<2, T, Q>(v.w, v.x); } // wy template GLM_INLINE glm::vec<2, T, Q> wy(const glm::vec<4, T, Q> &v) { return glm::vec<2, T, Q>(v.w, v.y); } // wz template GLM_INLINE glm::vec<2, T, Q> wz(const glm::vec<4, T, Q> &v) { return glm::vec<2, T, Q>(v.w, v.z); } // ww template GLM_INLINE glm::vec<2, T, Q> ww(const glm::vec<4, T, Q> &v) { return glm::vec<2, T, Q>(v.w, v.w); } // xxx template GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<1, T, Q> &v) { return glm::vec<3, T, Q>(v.x, v.x, v.x); } template GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<2, T, Q> &v) { return glm::vec<3, T, Q>(v.x, v.x, v.x); } template GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<3, T, Q> &v) { return glm::vec<3, T, Q>(v.x, v.x, v.x); } template GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.x, v.x, v.x); } // xxy template GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<2, T, Q> &v) { return glm::vec<3, T, Q>(v.x, v.x, v.y); } template GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<3, T, Q> &v) { return glm::vec<3, T, Q>(v.x, v.x, v.y); } template GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.x, v.x, v.y); } // xxz template GLM_INLINE glm::vec<3, T, Q> xxz(const glm::vec<3, T, Q> &v) { return glm::vec<3, T, Q>(v.x, v.x, v.z); } template GLM_INLINE glm::vec<3, T, Q> xxz(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.x, v.x, v.z); } // xxw template GLM_INLINE glm::vec<3, T, Q> xxw(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.x, v.x, v.w); } // xyx template GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<2, T, Q> &v) { return glm::vec<3, T, Q>(v.x, v.y, v.x); } template GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<3, T, Q> &v) { return glm::vec<3, T, Q>(v.x, v.y, v.x); } template GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.x, v.y, v.x); } // xyy template GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<2, T, Q> &v) { return glm::vec<3, T, Q>(v.x, v.y, v.y); } template GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<3, T, Q> &v) { return glm::vec<3, T, Q>(v.x, v.y, v.y); } template GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.x, v.y, v.y); } // xyz template GLM_INLINE glm::vec<3, T, Q> xyz(const glm::vec<3, T, Q> &v) { return glm::vec<3, T, Q>(v.x, v.y, v.z); } template GLM_INLINE glm::vec<3, T, Q> xyz(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.x, v.y, v.z); } // xyw template GLM_INLINE glm::vec<3, T, Q> xyw(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.x, v.y, v.w); } // xzx template GLM_INLINE glm::vec<3, T, Q> xzx(const glm::vec<3, T, Q> &v) { return glm::vec<3, T, Q>(v.x, v.z, v.x); } template GLM_INLINE glm::vec<3, T, Q> xzx(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.x, v.z, v.x); } // xzy template GLM_INLINE glm::vec<3, T, Q> xzy(const glm::vec<3, T, Q> &v) { return glm::vec<3, T, Q>(v.x, v.z, v.y); } template GLM_INLINE glm::vec<3, T, Q> xzy(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.x, v.z, v.y); } // xzz template GLM_INLINE glm::vec<3, T, Q> xzz(const glm::vec<3, T, Q> &v) { return glm::vec<3, T, Q>(v.x, v.z, v.z); } template GLM_INLINE glm::vec<3, T, Q> xzz(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.x, v.z, v.z); } // xzw template GLM_INLINE glm::vec<3, T, Q> xzw(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.x, v.z, v.w); } // xwx template GLM_INLINE glm::vec<3, T, Q> xwx(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.x, v.w, v.x); } // xwy template GLM_INLINE glm::vec<3, T, Q> xwy(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.x, v.w, v.y); } // xwz template GLM_INLINE glm::vec<3, T, Q> xwz(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.x, v.w, v.z); } // xww template GLM_INLINE glm::vec<3, T, Q> xww(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.x, v.w, v.w); } // yxx template GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<2, T, Q> &v) { return glm::vec<3, T, Q>(v.y, v.x, v.x); } template GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<3, T, Q> &v) { return glm::vec<3, T, Q>(v.y, v.x, v.x); } template GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.y, v.x, v.x); } // yxy template GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<2, T, Q> &v) { return glm::vec<3, T, Q>(v.y, v.x, v.y); } template GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<3, T, Q> &v) { return glm::vec<3, T, Q>(v.y, v.x, v.y); } template GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.y, v.x, v.y); } // yxz template GLM_INLINE glm::vec<3, T, Q> yxz(const glm::vec<3, T, Q> &v) { return glm::vec<3, T, Q>(v.y, v.x, v.z); } template GLM_INLINE glm::vec<3, T, Q> yxz(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.y, v.x, v.z); } // yxw template GLM_INLINE glm::vec<3, T, Q> yxw(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.y, v.x, v.w); } // yyx template GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<2, T, Q> &v) { return glm::vec<3, T, Q>(v.y, v.y, v.x); } template GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<3, T, Q> &v) { return glm::vec<3, T, Q>(v.y, v.y, v.x); } template GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.y, v.y, v.x); } // yyy template GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<2, T, Q> &v) { return glm::vec<3, T, Q>(v.y, v.y, v.y); } template GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<3, T, Q> &v) { return glm::vec<3, T, Q>(v.y, v.y, v.y); } template GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.y, v.y, v.y); } // yyz template GLM_INLINE glm::vec<3, T, Q> yyz(const glm::vec<3, T, Q> &v) { return glm::vec<3, T, Q>(v.y, v.y, v.z); } template GLM_INLINE glm::vec<3, T, Q> yyz(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.y, v.y, v.z); } // yyw template GLM_INLINE glm::vec<3, T, Q> yyw(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.y, v.y, v.w); } // yzx template GLM_INLINE glm::vec<3, T, Q> yzx(const glm::vec<3, T, Q> &v) { return glm::vec<3, T, Q>(v.y, v.z, v.x); } template GLM_INLINE glm::vec<3, T, Q> yzx(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.y, v.z, v.x); } // yzy template GLM_INLINE glm::vec<3, T, Q> yzy(const glm::vec<3, T, Q> &v) { return glm::vec<3, T, Q>(v.y, v.z, v.y); } template GLM_INLINE glm::vec<3, T, Q> yzy(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.y, v.z, v.y); } // yzz template GLM_INLINE glm::vec<3, T, Q> yzz(const glm::vec<3, T, Q> &v) { return glm::vec<3, T, Q>(v.y, v.z, v.z); } template GLM_INLINE glm::vec<3, T, Q> yzz(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.y, v.z, v.z); } // yzw template GLM_INLINE glm::vec<3, T, Q> yzw(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.y, v.z, v.w); } // ywx template GLM_INLINE glm::vec<3, T, Q> ywx(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.y, v.w, v.x); } // ywy template GLM_INLINE glm::vec<3, T, Q> ywy(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.y, v.w, v.y); } // ywz template GLM_INLINE glm::vec<3, T, Q> ywz(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.y, v.w, v.z); } // yww template GLM_INLINE glm::vec<3, T, Q> yww(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.y, v.w, v.w); } // zxx template GLM_INLINE glm::vec<3, T, Q> zxx(const glm::vec<3, T, Q> &v) { return glm::vec<3, T, Q>(v.z, v.x, v.x); } template GLM_INLINE glm::vec<3, T, Q> zxx(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.z, v.x, v.x); } // zxy template GLM_INLINE glm::vec<3, T, Q> zxy(const glm::vec<3, T, Q> &v) { return glm::vec<3, T, Q>(v.z, v.x, v.y); } template GLM_INLINE glm::vec<3, T, Q> zxy(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.z, v.x, v.y); } // zxz template GLM_INLINE glm::vec<3, T, Q> zxz(const glm::vec<3, T, Q> &v) { return glm::vec<3, T, Q>(v.z, v.x, v.z); } template GLM_INLINE glm::vec<3, T, Q> zxz(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.z, v.x, v.z); } // zxw template GLM_INLINE glm::vec<3, T, Q> zxw(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.z, v.x, v.w); } // zyx template GLM_INLINE glm::vec<3, T, Q> zyx(const glm::vec<3, T, Q> &v) { return glm::vec<3, T, Q>(v.z, v.y, v.x); } template GLM_INLINE glm::vec<3, T, Q> zyx(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.z, v.y, v.x); } // zyy template GLM_INLINE glm::vec<3, T, Q> zyy(const glm::vec<3, T, Q> &v) { return glm::vec<3, T, Q>(v.z, v.y, v.y); } template GLM_INLINE glm::vec<3, T, Q> zyy(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.z, v.y, v.y); } // zyz template GLM_INLINE glm::vec<3, T, Q> zyz(const glm::vec<3, T, Q> &v) { return glm::vec<3, T, Q>(v.z, v.y, v.z); } template GLM_INLINE glm::vec<3, T, Q> zyz(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.z, v.y, v.z); } // zyw template GLM_INLINE glm::vec<3, T, Q> zyw(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.z, v.y, v.w); } // zzx template GLM_INLINE glm::vec<3, T, Q> zzx(const glm::vec<3, T, Q> &v) { return glm::vec<3, T, Q>(v.z, v.z, v.x); } template GLM_INLINE glm::vec<3, T, Q> zzx(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.z, v.z, v.x); } // zzy template GLM_INLINE glm::vec<3, T, Q> zzy(const glm::vec<3, T, Q> &v) { return glm::vec<3, T, Q>(v.z, v.z, v.y); } template GLM_INLINE glm::vec<3, T, Q> zzy(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.z, v.z, v.y); } // zzz template GLM_INLINE glm::vec<3, T, Q> zzz(const glm::vec<3, T, Q> &v) { return glm::vec<3, T, Q>(v.z, v.z, v.z); } template GLM_INLINE glm::vec<3, T, Q> zzz(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.z, v.z, v.z); } // zzw template GLM_INLINE glm::vec<3, T, Q> zzw(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.z, v.z, v.w); } // zwx template GLM_INLINE glm::vec<3, T, Q> zwx(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.z, v.w, v.x); } // zwy template GLM_INLINE glm::vec<3, T, Q> zwy(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.z, v.w, v.y); } // zwz template GLM_INLINE glm::vec<3, T, Q> zwz(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.z, v.w, v.z); } // zww template GLM_INLINE glm::vec<3, T, Q> zww(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.z, v.w, v.w); } // wxx template GLM_INLINE glm::vec<3, T, Q> wxx(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.w, v.x, v.x); } // wxy template GLM_INLINE glm::vec<3, T, Q> wxy(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.w, v.x, v.y); } // wxz template GLM_INLINE glm::vec<3, T, Q> wxz(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.w, v.x, v.z); } // wxw template GLM_INLINE glm::vec<3, T, Q> wxw(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.w, v.x, v.w); } // wyx template GLM_INLINE glm::vec<3, T, Q> wyx(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.w, v.y, v.x); } // wyy template GLM_INLINE glm::vec<3, T, Q> wyy(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.w, v.y, v.y); } // wyz template GLM_INLINE glm::vec<3, T, Q> wyz(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.w, v.y, v.z); } // wyw template GLM_INLINE glm::vec<3, T, Q> wyw(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.w, v.y, v.w); } // wzx template GLM_INLINE glm::vec<3, T, Q> wzx(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.w, v.z, v.x); } // wzy template GLM_INLINE glm::vec<3, T, Q> wzy(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.w, v.z, v.y); } // wzz template GLM_INLINE glm::vec<3, T, Q> wzz(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.w, v.z, v.z); } // wzw template GLM_INLINE glm::vec<3, T, Q> wzw(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.w, v.z, v.w); } // wwx template GLM_INLINE glm::vec<3, T, Q> wwx(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.w, v.w, v.x); } // wwy template GLM_INLINE glm::vec<3, T, Q> wwy(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.w, v.w, v.y); } // wwz template GLM_INLINE glm::vec<3, T, Q> wwz(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.w, v.w, v.z); } // www template GLM_INLINE glm::vec<3, T, Q> www(const glm::vec<4, T, Q> &v) { return glm::vec<3, T, Q>(v.w, v.w, v.w); } // xxxx template GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<1, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x); } template GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<2, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x); } template GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x); } template GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x); } // xxxy template GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<2, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y); } template GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y); } template GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y); } // xxxz template GLM_INLINE glm::vec<4, T, Q> xxxz(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.x, v.x, v.z); } template GLM_INLINE glm::vec<4, T, Q> xxxz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.x, v.x, v.z); } // xxxw template GLM_INLINE glm::vec<4, T, Q> xxxw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.x, v.x, v.w); } // xxyx template GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<2, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x); } template GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x); } template GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x); } // xxyy template GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<2, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y); } template GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y); } template GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y); } // xxyz template GLM_INLINE glm::vec<4, T, Q> xxyz(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.x, v.y, v.z); } template GLM_INLINE glm::vec<4, T, Q> xxyz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.x, v.y, v.z); } // xxyw template GLM_INLINE glm::vec<4, T, Q> xxyw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.x, v.y, v.w); } // xxzx template GLM_INLINE glm::vec<4, T, Q> xxzx(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.x, v.z, v.x); } template GLM_INLINE glm::vec<4, T, Q> xxzx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.x, v.z, v.x); } // xxzy template GLM_INLINE glm::vec<4, T, Q> xxzy(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.x, v.z, v.y); } template GLM_INLINE glm::vec<4, T, Q> xxzy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.x, v.z, v.y); } // xxzz template GLM_INLINE glm::vec<4, T, Q> xxzz(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.x, v.z, v.z); } template GLM_INLINE glm::vec<4, T, Q> xxzz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.x, v.z, v.z); } // xxzw template GLM_INLINE glm::vec<4, T, Q> xxzw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.x, v.z, v.w); } // xxwx template GLM_INLINE glm::vec<4, T, Q> xxwx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.x, v.w, v.x); } // xxwy template GLM_INLINE glm::vec<4, T, Q> xxwy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.x, v.w, v.y); } // xxwz template GLM_INLINE glm::vec<4, T, Q> xxwz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.x, v.w, v.z); } // xxww template GLM_INLINE glm::vec<4, T, Q> xxww(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.x, v.w, v.w); } // xyxx template GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<2, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x); } template GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x); } template GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x); } // xyxy template GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<2, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y); } template GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y); } template GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y); } // xyxz template GLM_INLINE glm::vec<4, T, Q> xyxz(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.y, v.x, v.z); } template GLM_INLINE glm::vec<4, T, Q> xyxz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.y, v.x, v.z); } // xyxw template GLM_INLINE glm::vec<4, T, Q> xyxw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.y, v.x, v.w); } // xyyx template GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<2, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x); } template GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x); } template GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x); } // xyyy template GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<2, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y); } template GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y); } template GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y); } // xyyz template GLM_INLINE glm::vec<4, T, Q> xyyz(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.y, v.y, v.z); } template GLM_INLINE glm::vec<4, T, Q> xyyz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.y, v.y, v.z); } // xyyw template GLM_INLINE glm::vec<4, T, Q> xyyw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.y, v.y, v.w); } // xyzx template GLM_INLINE glm::vec<4, T, Q> xyzx(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.y, v.z, v.x); } template GLM_INLINE glm::vec<4, T, Q> xyzx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.y, v.z, v.x); } // xyzy template GLM_INLINE glm::vec<4, T, Q> xyzy(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.y, v.z, v.y); } template GLM_INLINE glm::vec<4, T, Q> xyzy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.y, v.z, v.y); } // xyzz template GLM_INLINE glm::vec<4, T, Q> xyzz(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.y, v.z, v.z); } template GLM_INLINE glm::vec<4, T, Q> xyzz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.y, v.z, v.z); } // xyzw template GLM_INLINE glm::vec<4, T, Q> xyzw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.y, v.z, v.w); } // xywx template GLM_INLINE glm::vec<4, T, Q> xywx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.y, v.w, v.x); } // xywy template GLM_INLINE glm::vec<4, T, Q> xywy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.y, v.w, v.y); } // xywz template GLM_INLINE glm::vec<4, T, Q> xywz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.y, v.w, v.z); } // xyww template GLM_INLINE glm::vec<4, T, Q> xyww(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.y, v.w, v.w); } // xzxx template GLM_INLINE glm::vec<4, T, Q> xzxx(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.z, v.x, v.x); } template GLM_INLINE glm::vec<4, T, Q> xzxx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.z, v.x, v.x); } // xzxy template GLM_INLINE glm::vec<4, T, Q> xzxy(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.z, v.x, v.y); } template GLM_INLINE glm::vec<4, T, Q> xzxy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.z, v.x, v.y); } // xzxz template GLM_INLINE glm::vec<4, T, Q> xzxz(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.z, v.x, v.z); } template GLM_INLINE glm::vec<4, T, Q> xzxz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.z, v.x, v.z); } // xzxw template GLM_INLINE glm::vec<4, T, Q> xzxw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.z, v.x, v.w); } // xzyx template GLM_INLINE glm::vec<4, T, Q> xzyx(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.z, v.y, v.x); } template GLM_INLINE glm::vec<4, T, Q> xzyx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.z, v.y, v.x); } // xzyy template GLM_INLINE glm::vec<4, T, Q> xzyy(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.z, v.y, v.y); } template GLM_INLINE glm::vec<4, T, Q> xzyy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.z, v.y, v.y); } // xzyz template GLM_INLINE glm::vec<4, T, Q> xzyz(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.z, v.y, v.z); } template GLM_INLINE glm::vec<4, T, Q> xzyz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.z, v.y, v.z); } // xzyw template GLM_INLINE glm::vec<4, T, Q> xzyw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.z, v.y, v.w); } // xzzx template GLM_INLINE glm::vec<4, T, Q> xzzx(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.z, v.z, v.x); } template GLM_INLINE glm::vec<4, T, Q> xzzx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.z, v.z, v.x); } // xzzy template GLM_INLINE glm::vec<4, T, Q> xzzy(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.z, v.z, v.y); } template GLM_INLINE glm::vec<4, T, Q> xzzy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.z, v.z, v.y); } // xzzz template GLM_INLINE glm::vec<4, T, Q> xzzz(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.z, v.z, v.z); } template GLM_INLINE glm::vec<4, T, Q> xzzz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.z, v.z, v.z); } // xzzw template GLM_INLINE glm::vec<4, T, Q> xzzw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.z, v.z, v.w); } // xzwx template GLM_INLINE glm::vec<4, T, Q> xzwx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.z, v.w, v.x); } // xzwy template GLM_INLINE glm::vec<4, T, Q> xzwy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.z, v.w, v.y); } // xzwz template GLM_INLINE glm::vec<4, T, Q> xzwz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.z, v.w, v.z); } // xzww template GLM_INLINE glm::vec<4, T, Q> xzww(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.z, v.w, v.w); } // xwxx template GLM_INLINE glm::vec<4, T, Q> xwxx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.w, v.x, v.x); } // xwxy template GLM_INLINE glm::vec<4, T, Q> xwxy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.w, v.x, v.y); } // xwxz template GLM_INLINE glm::vec<4, T, Q> xwxz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.w, v.x, v.z); } // xwxw template GLM_INLINE glm::vec<4, T, Q> xwxw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.w, v.x, v.w); } // xwyx template GLM_INLINE glm::vec<4, T, Q> xwyx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.w, v.y, v.x); } // xwyy template GLM_INLINE glm::vec<4, T, Q> xwyy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.w, v.y, v.y); } // xwyz template GLM_INLINE glm::vec<4, T, Q> xwyz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.w, v.y, v.z); } // xwyw template GLM_INLINE glm::vec<4, T, Q> xwyw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.w, v.y, v.w); } // xwzx template GLM_INLINE glm::vec<4, T, Q> xwzx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.w, v.z, v.x); } // xwzy template GLM_INLINE glm::vec<4, T, Q> xwzy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.w, v.z, v.y); } // xwzz template GLM_INLINE glm::vec<4, T, Q> xwzz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.w, v.z, v.z); } // xwzw template GLM_INLINE glm::vec<4, T, Q> xwzw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.w, v.z, v.w); } // xwwx template GLM_INLINE glm::vec<4, T, Q> xwwx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.w, v.w, v.x); } // xwwy template GLM_INLINE glm::vec<4, T, Q> xwwy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.w, v.w, v.y); } // xwwz template GLM_INLINE glm::vec<4, T, Q> xwwz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.w, v.w, v.z); } // xwww template GLM_INLINE glm::vec<4, T, Q> xwww(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.x, v.w, v.w, v.w); } // yxxx template GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<2, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x); } template GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x); } template GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x); } // yxxy template GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<2, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y); } template GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y); } template GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y); } // yxxz template GLM_INLINE glm::vec<4, T, Q> yxxz(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.x, v.x, v.z); } template GLM_INLINE glm::vec<4, T, Q> yxxz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.x, v.x, v.z); } // yxxw template GLM_INLINE glm::vec<4, T, Q> yxxw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.x, v.x, v.w); } // yxyx template GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<2, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x); } template GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x); } template GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x); } // yxyy template GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<2, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y); } template GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y); } template GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y); } // yxyz template GLM_INLINE glm::vec<4, T, Q> yxyz(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.x, v.y, v.z); } template GLM_INLINE glm::vec<4, T, Q> yxyz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.x, v.y, v.z); } // yxyw template GLM_INLINE glm::vec<4, T, Q> yxyw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.x, v.y, v.w); } // yxzx template GLM_INLINE glm::vec<4, T, Q> yxzx(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.x, v.z, v.x); } template GLM_INLINE glm::vec<4, T, Q> yxzx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.x, v.z, v.x); } // yxzy template GLM_INLINE glm::vec<4, T, Q> yxzy(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.x, v.z, v.y); } template GLM_INLINE glm::vec<4, T, Q> yxzy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.x, v.z, v.y); } // yxzz template GLM_INLINE glm::vec<4, T, Q> yxzz(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.x, v.z, v.z); } template GLM_INLINE glm::vec<4, T, Q> yxzz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.x, v.z, v.z); } // yxzw template GLM_INLINE glm::vec<4, T, Q> yxzw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.x, v.z, v.w); } // yxwx template GLM_INLINE glm::vec<4, T, Q> yxwx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.x, v.w, v.x); } // yxwy template GLM_INLINE glm::vec<4, T, Q> yxwy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.x, v.w, v.y); } // yxwz template GLM_INLINE glm::vec<4, T, Q> yxwz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.x, v.w, v.z); } // yxww template GLM_INLINE glm::vec<4, T, Q> yxww(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.x, v.w, v.w); } // yyxx template GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<2, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x); } template GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x); } template GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x); } // yyxy template GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<2, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y); } template GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y); } template GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y); } // yyxz template GLM_INLINE glm::vec<4, T, Q> yyxz(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.y, v.x, v.z); } template GLM_INLINE glm::vec<4, T, Q> yyxz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.y, v.x, v.z); } // yyxw template GLM_INLINE glm::vec<4, T, Q> yyxw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.y, v.x, v.w); } // yyyx template GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<2, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x); } template GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x); } template GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x); } // yyyy template GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<2, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y); } template GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y); } template GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y); } // yyyz template GLM_INLINE glm::vec<4, T, Q> yyyz(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.y, v.y, v.z); } template GLM_INLINE glm::vec<4, T, Q> yyyz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.y, v.y, v.z); } // yyyw template GLM_INLINE glm::vec<4, T, Q> yyyw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.y, v.y, v.w); } // yyzx template GLM_INLINE glm::vec<4, T, Q> yyzx(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.y, v.z, v.x); } template GLM_INLINE glm::vec<4, T, Q> yyzx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.y, v.z, v.x); } // yyzy template GLM_INLINE glm::vec<4, T, Q> yyzy(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.y, v.z, v.y); } template GLM_INLINE glm::vec<4, T, Q> yyzy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.y, v.z, v.y); } // yyzz template GLM_INLINE glm::vec<4, T, Q> yyzz(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.y, v.z, v.z); } template GLM_INLINE glm::vec<4, T, Q> yyzz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.y, v.z, v.z); } // yyzw template GLM_INLINE glm::vec<4, T, Q> yyzw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.y, v.z, v.w); } // yywx template GLM_INLINE glm::vec<4, T, Q> yywx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.y, v.w, v.x); } // yywy template GLM_INLINE glm::vec<4, T, Q> yywy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.y, v.w, v.y); } // yywz template GLM_INLINE glm::vec<4, T, Q> yywz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.y, v.w, v.z); } // yyww template GLM_INLINE glm::vec<4, T, Q> yyww(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.y, v.w, v.w); } // yzxx template GLM_INLINE glm::vec<4, T, Q> yzxx(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.z, v.x, v.x); } template GLM_INLINE glm::vec<4, T, Q> yzxx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.z, v.x, v.x); } // yzxy template GLM_INLINE glm::vec<4, T, Q> yzxy(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.z, v.x, v.y); } template GLM_INLINE glm::vec<4, T, Q> yzxy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.z, v.x, v.y); } // yzxz template GLM_INLINE glm::vec<4, T, Q> yzxz(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.z, v.x, v.z); } template GLM_INLINE glm::vec<4, T, Q> yzxz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.z, v.x, v.z); } // yzxw template GLM_INLINE glm::vec<4, T, Q> yzxw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.z, v.x, v.w); } // yzyx template GLM_INLINE glm::vec<4, T, Q> yzyx(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.z, v.y, v.x); } template GLM_INLINE glm::vec<4, T, Q> yzyx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.z, v.y, v.x); } // yzyy template GLM_INLINE glm::vec<4, T, Q> yzyy(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.z, v.y, v.y); } template GLM_INLINE glm::vec<4, T, Q> yzyy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.z, v.y, v.y); } // yzyz template GLM_INLINE glm::vec<4, T, Q> yzyz(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.z, v.y, v.z); } template GLM_INLINE glm::vec<4, T, Q> yzyz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.z, v.y, v.z); } // yzyw template GLM_INLINE glm::vec<4, T, Q> yzyw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.z, v.y, v.w); } // yzzx template GLM_INLINE glm::vec<4, T, Q> yzzx(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.z, v.z, v.x); } template GLM_INLINE glm::vec<4, T, Q> yzzx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.z, v.z, v.x); } // yzzy template GLM_INLINE glm::vec<4, T, Q> yzzy(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.z, v.z, v.y); } template GLM_INLINE glm::vec<4, T, Q> yzzy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.z, v.z, v.y); } // yzzz template GLM_INLINE glm::vec<4, T, Q> yzzz(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.z, v.z, v.z); } template GLM_INLINE glm::vec<4, T, Q> yzzz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.z, v.z, v.z); } // yzzw template GLM_INLINE glm::vec<4, T, Q> yzzw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.z, v.z, v.w); } // yzwx template GLM_INLINE glm::vec<4, T, Q> yzwx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.z, v.w, v.x); } // yzwy template GLM_INLINE glm::vec<4, T, Q> yzwy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.z, v.w, v.y); } // yzwz template GLM_INLINE glm::vec<4, T, Q> yzwz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.z, v.w, v.z); } // yzww template GLM_INLINE glm::vec<4, T, Q> yzww(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.z, v.w, v.w); } // ywxx template GLM_INLINE glm::vec<4, T, Q> ywxx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.w, v.x, v.x); } // ywxy template GLM_INLINE glm::vec<4, T, Q> ywxy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.w, v.x, v.y); } // ywxz template GLM_INLINE glm::vec<4, T, Q> ywxz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.w, v.x, v.z); } // ywxw template GLM_INLINE glm::vec<4, T, Q> ywxw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.w, v.x, v.w); } // ywyx template GLM_INLINE glm::vec<4, T, Q> ywyx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.w, v.y, v.x); } // ywyy template GLM_INLINE glm::vec<4, T, Q> ywyy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.w, v.y, v.y); } // ywyz template GLM_INLINE glm::vec<4, T, Q> ywyz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.w, v.y, v.z); } // ywyw template GLM_INLINE glm::vec<4, T, Q> ywyw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.w, v.y, v.w); } // ywzx template GLM_INLINE glm::vec<4, T, Q> ywzx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.w, v.z, v.x); } // ywzy template GLM_INLINE glm::vec<4, T, Q> ywzy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.w, v.z, v.y); } // ywzz template GLM_INLINE glm::vec<4, T, Q> ywzz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.w, v.z, v.z); } // ywzw template GLM_INLINE glm::vec<4, T, Q> ywzw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.w, v.z, v.w); } // ywwx template GLM_INLINE glm::vec<4, T, Q> ywwx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.w, v.w, v.x); } // ywwy template GLM_INLINE glm::vec<4, T, Q> ywwy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.w, v.w, v.y); } // ywwz template GLM_INLINE glm::vec<4, T, Q> ywwz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.w, v.w, v.z); } // ywww template GLM_INLINE glm::vec<4, T, Q> ywww(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.y, v.w, v.w, v.w); } // zxxx template GLM_INLINE glm::vec<4, T, Q> zxxx(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.x, v.x, v.x); } template GLM_INLINE glm::vec<4, T, Q> zxxx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.x, v.x, v.x); } // zxxy template GLM_INLINE glm::vec<4, T, Q> zxxy(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.x, v.x, v.y); } template GLM_INLINE glm::vec<4, T, Q> zxxy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.x, v.x, v.y); } // zxxz template GLM_INLINE glm::vec<4, T, Q> zxxz(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.x, v.x, v.z); } template GLM_INLINE glm::vec<4, T, Q> zxxz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.x, v.x, v.z); } // zxxw template GLM_INLINE glm::vec<4, T, Q> zxxw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.x, v.x, v.w); } // zxyx template GLM_INLINE glm::vec<4, T, Q> zxyx(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.x, v.y, v.x); } template GLM_INLINE glm::vec<4, T, Q> zxyx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.x, v.y, v.x); } // zxyy template GLM_INLINE glm::vec<4, T, Q> zxyy(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.x, v.y, v.y); } template GLM_INLINE glm::vec<4, T, Q> zxyy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.x, v.y, v.y); } // zxyz template GLM_INLINE glm::vec<4, T, Q> zxyz(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.x, v.y, v.z); } template GLM_INLINE glm::vec<4, T, Q> zxyz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.x, v.y, v.z); } // zxyw template GLM_INLINE glm::vec<4, T, Q> zxyw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.x, v.y, v.w); } // zxzx template GLM_INLINE glm::vec<4, T, Q> zxzx(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.x, v.z, v.x); } template GLM_INLINE glm::vec<4, T, Q> zxzx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.x, v.z, v.x); } // zxzy template GLM_INLINE glm::vec<4, T, Q> zxzy(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.x, v.z, v.y); } template GLM_INLINE glm::vec<4, T, Q> zxzy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.x, v.z, v.y); } // zxzz template GLM_INLINE glm::vec<4, T, Q> zxzz(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.x, v.z, v.z); } template GLM_INLINE glm::vec<4, T, Q> zxzz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.x, v.z, v.z); } // zxzw template GLM_INLINE glm::vec<4, T, Q> zxzw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.x, v.z, v.w); } // zxwx template GLM_INLINE glm::vec<4, T, Q> zxwx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.x, v.w, v.x); } // zxwy template GLM_INLINE glm::vec<4, T, Q> zxwy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.x, v.w, v.y); } // zxwz template GLM_INLINE glm::vec<4, T, Q> zxwz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.x, v.w, v.z); } // zxww template GLM_INLINE glm::vec<4, T, Q> zxww(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.x, v.w, v.w); } // zyxx template GLM_INLINE glm::vec<4, T, Q> zyxx(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.y, v.x, v.x); } template GLM_INLINE glm::vec<4, T, Q> zyxx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.y, v.x, v.x); } // zyxy template GLM_INLINE glm::vec<4, T, Q> zyxy(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.y, v.x, v.y); } template GLM_INLINE glm::vec<4, T, Q> zyxy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.y, v.x, v.y); } // zyxz template GLM_INLINE glm::vec<4, T, Q> zyxz(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.y, v.x, v.z); } template GLM_INLINE glm::vec<4, T, Q> zyxz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.y, v.x, v.z); } // zyxw template GLM_INLINE glm::vec<4, T, Q> zyxw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.y, v.x, v.w); } // zyyx template GLM_INLINE glm::vec<4, T, Q> zyyx(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.y, v.y, v.x); } template GLM_INLINE glm::vec<4, T, Q> zyyx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.y, v.y, v.x); } // zyyy template GLM_INLINE glm::vec<4, T, Q> zyyy(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.y, v.y, v.y); } template GLM_INLINE glm::vec<4, T, Q> zyyy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.y, v.y, v.y); } // zyyz template GLM_INLINE glm::vec<4, T, Q> zyyz(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.y, v.y, v.z); } template GLM_INLINE glm::vec<4, T, Q> zyyz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.y, v.y, v.z); } // zyyw template GLM_INLINE glm::vec<4, T, Q> zyyw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.y, v.y, v.w); } // zyzx template GLM_INLINE glm::vec<4, T, Q> zyzx(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.y, v.z, v.x); } template GLM_INLINE glm::vec<4, T, Q> zyzx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.y, v.z, v.x); } // zyzy template GLM_INLINE glm::vec<4, T, Q> zyzy(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.y, v.z, v.y); } template GLM_INLINE glm::vec<4, T, Q> zyzy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.y, v.z, v.y); } // zyzz template GLM_INLINE glm::vec<4, T, Q> zyzz(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.y, v.z, v.z); } template GLM_INLINE glm::vec<4, T, Q> zyzz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.y, v.z, v.z); } // zyzw template GLM_INLINE glm::vec<4, T, Q> zyzw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.y, v.z, v.w); } // zywx template GLM_INLINE glm::vec<4, T, Q> zywx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.y, v.w, v.x); } // zywy template GLM_INLINE glm::vec<4, T, Q> zywy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.y, v.w, v.y); } // zywz template GLM_INLINE glm::vec<4, T, Q> zywz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.y, v.w, v.z); } // zyww template GLM_INLINE glm::vec<4, T, Q> zyww(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.y, v.w, v.w); } // zzxx template GLM_INLINE glm::vec<4, T, Q> zzxx(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.z, v.x, v.x); } template GLM_INLINE glm::vec<4, T, Q> zzxx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.z, v.x, v.x); } // zzxy template GLM_INLINE glm::vec<4, T, Q> zzxy(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.z, v.x, v.y); } template GLM_INLINE glm::vec<4, T, Q> zzxy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.z, v.x, v.y); } // zzxz template GLM_INLINE glm::vec<4, T, Q> zzxz(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.z, v.x, v.z); } template GLM_INLINE glm::vec<4, T, Q> zzxz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.z, v.x, v.z); } // zzxw template GLM_INLINE glm::vec<4, T, Q> zzxw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.z, v.x, v.w); } // zzyx template GLM_INLINE glm::vec<4, T, Q> zzyx(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.z, v.y, v.x); } template GLM_INLINE glm::vec<4, T, Q> zzyx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.z, v.y, v.x); } // zzyy template GLM_INLINE glm::vec<4, T, Q> zzyy(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.z, v.y, v.y); } template GLM_INLINE glm::vec<4, T, Q> zzyy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.z, v.y, v.y); } // zzyz template GLM_INLINE glm::vec<4, T, Q> zzyz(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.z, v.y, v.z); } template GLM_INLINE glm::vec<4, T, Q> zzyz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.z, v.y, v.z); } // zzyw template GLM_INLINE glm::vec<4, T, Q> zzyw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.z, v.y, v.w); } // zzzx template GLM_INLINE glm::vec<4, T, Q> zzzx(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.z, v.z, v.x); } template GLM_INLINE glm::vec<4, T, Q> zzzx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.z, v.z, v.x); } // zzzy template GLM_INLINE glm::vec<4, T, Q> zzzy(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.z, v.z, v.y); } template GLM_INLINE glm::vec<4, T, Q> zzzy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.z, v.z, v.y); } // zzzz template GLM_INLINE glm::vec<4, T, Q> zzzz(const glm::vec<3, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.z, v.z, v.z); } template GLM_INLINE glm::vec<4, T, Q> zzzz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.z, v.z, v.z); } // zzzw template GLM_INLINE glm::vec<4, T, Q> zzzw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.z, v.z, v.w); } // zzwx template GLM_INLINE glm::vec<4, T, Q> zzwx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.z, v.w, v.x); } // zzwy template GLM_INLINE glm::vec<4, T, Q> zzwy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.z, v.w, v.y); } // zzwz template GLM_INLINE glm::vec<4, T, Q> zzwz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.z, v.w, v.z); } // zzww template GLM_INLINE glm::vec<4, T, Q> zzww(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.z, v.w, v.w); } // zwxx template GLM_INLINE glm::vec<4, T, Q> zwxx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.w, v.x, v.x); } // zwxy template GLM_INLINE glm::vec<4, T, Q> zwxy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.w, v.x, v.y); } // zwxz template GLM_INLINE glm::vec<4, T, Q> zwxz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.w, v.x, v.z); } // zwxw template GLM_INLINE glm::vec<4, T, Q> zwxw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.w, v.x, v.w); } // zwyx template GLM_INLINE glm::vec<4, T, Q> zwyx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.w, v.y, v.x); } // zwyy template GLM_INLINE glm::vec<4, T, Q> zwyy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.w, v.y, v.y); } // zwyz template GLM_INLINE glm::vec<4, T, Q> zwyz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.w, v.y, v.z); } // zwyw template GLM_INLINE glm::vec<4, T, Q> zwyw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.w, v.y, v.w); } // zwzx template GLM_INLINE glm::vec<4, T, Q> zwzx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.w, v.z, v.x); } // zwzy template GLM_INLINE glm::vec<4, T, Q> zwzy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.w, v.z, v.y); } // zwzz template GLM_INLINE glm::vec<4, T, Q> zwzz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.w, v.z, v.z); } // zwzw template GLM_INLINE glm::vec<4, T, Q> zwzw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.w, v.z, v.w); } // zwwx template GLM_INLINE glm::vec<4, T, Q> zwwx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.w, v.w, v.x); } // zwwy template GLM_INLINE glm::vec<4, T, Q> zwwy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.w, v.w, v.y); } // zwwz template GLM_INLINE glm::vec<4, T, Q> zwwz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.w, v.w, v.z); } // zwww template GLM_INLINE glm::vec<4, T, Q> zwww(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.z, v.w, v.w, v.w); } // wxxx template GLM_INLINE glm::vec<4, T, Q> wxxx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.x, v.x, v.x); } // wxxy template GLM_INLINE glm::vec<4, T, Q> wxxy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.x, v.x, v.y); } // wxxz template GLM_INLINE glm::vec<4, T, Q> wxxz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.x, v.x, v.z); } // wxxw template GLM_INLINE glm::vec<4, T, Q> wxxw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.x, v.x, v.w); } // wxyx template GLM_INLINE glm::vec<4, T, Q> wxyx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.x, v.y, v.x); } // wxyy template GLM_INLINE glm::vec<4, T, Q> wxyy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.x, v.y, v.y); } // wxyz template GLM_INLINE glm::vec<4, T, Q> wxyz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.x, v.y, v.z); } // wxyw template GLM_INLINE glm::vec<4, T, Q> wxyw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.x, v.y, v.w); } // wxzx template GLM_INLINE glm::vec<4, T, Q> wxzx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.x, v.z, v.x); } // wxzy template GLM_INLINE glm::vec<4, T, Q> wxzy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.x, v.z, v.y); } // wxzz template GLM_INLINE glm::vec<4, T, Q> wxzz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.x, v.z, v.z); } // wxzw template GLM_INLINE glm::vec<4, T, Q> wxzw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.x, v.z, v.w); } // wxwx template GLM_INLINE glm::vec<4, T, Q> wxwx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.x, v.w, v.x); } // wxwy template GLM_INLINE glm::vec<4, T, Q> wxwy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.x, v.w, v.y); } // wxwz template GLM_INLINE glm::vec<4, T, Q> wxwz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.x, v.w, v.z); } // wxww template GLM_INLINE glm::vec<4, T, Q> wxww(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.x, v.w, v.w); } // wyxx template GLM_INLINE glm::vec<4, T, Q> wyxx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.y, v.x, v.x); } // wyxy template GLM_INLINE glm::vec<4, T, Q> wyxy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.y, v.x, v.y); } // wyxz template GLM_INLINE glm::vec<4, T, Q> wyxz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.y, v.x, v.z); } // wyxw template GLM_INLINE glm::vec<4, T, Q> wyxw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.y, v.x, v.w); } // wyyx template GLM_INLINE glm::vec<4, T, Q> wyyx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.y, v.y, v.x); } // wyyy template GLM_INLINE glm::vec<4, T, Q> wyyy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.y, v.y, v.y); } // wyyz template GLM_INLINE glm::vec<4, T, Q> wyyz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.y, v.y, v.z); } // wyyw template GLM_INLINE glm::vec<4, T, Q> wyyw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.y, v.y, v.w); } // wyzx template GLM_INLINE glm::vec<4, T, Q> wyzx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.y, v.z, v.x); } // wyzy template GLM_INLINE glm::vec<4, T, Q> wyzy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.y, v.z, v.y); } // wyzz template GLM_INLINE glm::vec<4, T, Q> wyzz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.y, v.z, v.z); } // wyzw template GLM_INLINE glm::vec<4, T, Q> wyzw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.y, v.z, v.w); } // wywx template GLM_INLINE glm::vec<4, T, Q> wywx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.y, v.w, v.x); } // wywy template GLM_INLINE glm::vec<4, T, Q> wywy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.y, v.w, v.y); } // wywz template GLM_INLINE glm::vec<4, T, Q> wywz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.y, v.w, v.z); } // wyww template GLM_INLINE glm::vec<4, T, Q> wyww(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.y, v.w, v.w); } // wzxx template GLM_INLINE glm::vec<4, T, Q> wzxx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.z, v.x, v.x); } // wzxy template GLM_INLINE glm::vec<4, T, Q> wzxy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.z, v.x, v.y); } // wzxz template GLM_INLINE glm::vec<4, T, Q> wzxz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.z, v.x, v.z); } // wzxw template GLM_INLINE glm::vec<4, T, Q> wzxw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.z, v.x, v.w); } // wzyx template GLM_INLINE glm::vec<4, T, Q> wzyx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.z, v.y, v.x); } // wzyy template GLM_INLINE glm::vec<4, T, Q> wzyy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.z, v.y, v.y); } // wzyz template GLM_INLINE glm::vec<4, T, Q> wzyz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.z, v.y, v.z); } // wzyw template GLM_INLINE glm::vec<4, T, Q> wzyw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.z, v.y, v.w); } // wzzx template GLM_INLINE glm::vec<4, T, Q> wzzx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.z, v.z, v.x); } // wzzy template GLM_INLINE glm::vec<4, T, Q> wzzy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.z, v.z, v.y); } // wzzz template GLM_INLINE glm::vec<4, T, Q> wzzz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.z, v.z, v.z); } // wzzw template GLM_INLINE glm::vec<4, T, Q> wzzw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.z, v.z, v.w); } // wzwx template GLM_INLINE glm::vec<4, T, Q> wzwx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.z, v.w, v.x); } // wzwy template GLM_INLINE glm::vec<4, T, Q> wzwy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.z, v.w, v.y); } // wzwz template GLM_INLINE glm::vec<4, T, Q> wzwz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.z, v.w, v.z); } // wzww template GLM_INLINE glm::vec<4, T, Q> wzww(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.z, v.w, v.w); } // wwxx template GLM_INLINE glm::vec<4, T, Q> wwxx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.w, v.x, v.x); } // wwxy template GLM_INLINE glm::vec<4, T, Q> wwxy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.w, v.x, v.y); } // wwxz template GLM_INLINE glm::vec<4, T, Q> wwxz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.w, v.x, v.z); } // wwxw template GLM_INLINE glm::vec<4, T, Q> wwxw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.w, v.x, v.w); } // wwyx template GLM_INLINE glm::vec<4, T, Q> wwyx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.w, v.y, v.x); } // wwyy template GLM_INLINE glm::vec<4, T, Q> wwyy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.w, v.y, v.y); } // wwyz template GLM_INLINE glm::vec<4, T, Q> wwyz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.w, v.y, v.z); } // wwyw template GLM_INLINE glm::vec<4, T, Q> wwyw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.w, v.y, v.w); } // wwzx template GLM_INLINE glm::vec<4, T, Q> wwzx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.w, v.z, v.x); } // wwzy template GLM_INLINE glm::vec<4, T, Q> wwzy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.w, v.z, v.y); } // wwzz template GLM_INLINE glm::vec<4, T, Q> wwzz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.w, v.z, v.z); } // wwzw template GLM_INLINE glm::vec<4, T, Q> wwzw(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.w, v.z, v.w); } // wwwx template GLM_INLINE glm::vec<4, T, Q> wwwx(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.w, v.w, v.x); } // wwwy template GLM_INLINE glm::vec<4, T, Q> wwwy(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.w, v.w, v.y); } // wwwz template GLM_INLINE glm::vec<4, T, Q> wwwz(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.w, v.w, v.z); } // wwww template GLM_INLINE glm::vec<4, T, Q> wwww(const glm::vec<4, T, Q> &v) { return glm::vec<4, T, Q>(v.w, v.w, v.w, v.w); } } ================================================ FILE: libraries/glm/gtx/vector_angle.hpp ================================================ /// @ref gtx_vector_angle /// @file glm/gtx/vector_angle.hpp /// /// @see core (dependence) /// @see gtx_quaternion (dependence) /// @see gtx_epsilon (dependence) /// /// @defgroup gtx_vector_angle GLM_GTX_vector_angle /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Compute angle between vectors #pragma once // Dependency: #include "../glm.hpp" #include "../gtc/epsilon.hpp" #include "../gtx/quaternion.hpp" #include "../gtx/rotate_vector.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_vector_angle is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_vector_angle extension included") # endif #endif namespace glm { /// @addtogroup gtx_vector_angle /// @{ //! Returns the absolute angle between two vectors. //! Parameters need to be normalized. /// @see gtx_vector_angle extension. template GLM_FUNC_DECL T angle(vec const& x, vec const& y); //! Returns the oriented angle between two 2d vectors. //! Parameters need to be normalized. /// @see gtx_vector_angle extension. template GLM_FUNC_DECL T orientedAngle(vec<2, T, Q> const& x, vec<2, T, Q> const& y); //! Returns the oriented angle between two 3d vectors based from a reference axis. //! Parameters need to be normalized. /// @see gtx_vector_angle extension. template GLM_FUNC_DECL T orientedAngle(vec<3, T, Q> const& x, vec<3, T, Q> const& y, vec<3, T, Q> const& ref); /// @} }// namespace glm #include "vector_angle.inl" ================================================ FILE: libraries/glm/gtx/vector_angle.inl ================================================ /// @ref gtx_vector_angle namespace glm { template GLM_FUNC_QUALIFIER genType angle ( genType const& x, genType const& y ) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'angle' only accept floating-point inputs"); return acos(clamp(dot(x, y), genType(-1), genType(1))); } template GLM_FUNC_QUALIFIER T angle(vec const& x, vec const& y) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'angle' only accept floating-point inputs"); return acos(clamp(dot(x, y), T(-1), T(1))); } //! \todo epsilon is hard coded to 0.01 template GLM_FUNC_QUALIFIER T orientedAngle(vec<2, T, Q> const& x, vec<2, T, Q> const& y) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'orientedAngle' only accept floating-point inputs"); T const Angle(acos(clamp(dot(x, y), T(-1), T(1)))); if(all(epsilonEqual(y, glm::rotate(x, Angle), T(0.0001)))) return Angle; else return -Angle; } template GLM_FUNC_QUALIFIER T orientedAngle(vec<3, T, Q> const& x, vec<3, T, Q> const& y, vec<3, T, Q> const& ref) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'orientedAngle' only accept floating-point inputs"); T const Angle(acos(clamp(dot(x, y), T(-1), T(1)))); return mix(Angle, -Angle, dot(ref, cross(x, y)) < T(0)); } }//namespace glm ================================================ FILE: libraries/glm/gtx/vector_query.hpp ================================================ /// @ref gtx_vector_query /// @file glm/gtx/vector_query.hpp /// /// @see core (dependence) /// /// @defgroup gtx_vector_query GLM_GTX_vector_query /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Query informations of vector types #pragma once // Dependency: #include "../glm.hpp" #include #include #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_vector_query is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_vector_query extension included") # endif #endif namespace glm { /// @addtogroup gtx_vector_query /// @{ //! Check whether two vectors are collinears. /// @see gtx_vector_query extensions. template GLM_FUNC_DECL bool areCollinear(vec const& v0, vec const& v1, T const& epsilon); //! Check whether two vectors are orthogonals. /// @see gtx_vector_query extensions. template GLM_FUNC_DECL bool areOrthogonal(vec const& v0, vec const& v1, T const& epsilon); //! Check whether a vector is normalized. /// @see gtx_vector_query extensions. template GLM_FUNC_DECL bool isNormalized(vec const& v, T const& epsilon); //! Check whether a vector is null. /// @see gtx_vector_query extensions. template GLM_FUNC_DECL bool isNull(vec const& v, T const& epsilon); //! Check whether a each component of a vector is null. /// @see gtx_vector_query extensions. template GLM_FUNC_DECL vec isCompNull(vec const& v, T const& epsilon); //! Check whether two vectors are orthonormal. /// @see gtx_vector_query extensions. template GLM_FUNC_DECL bool areOrthonormal(vec const& v0, vec const& v1, T const& epsilon); /// @} }// namespace glm #include "vector_query.inl" ================================================ FILE: libraries/glm/gtx/vector_query.inl ================================================ /// @ref gtx_vector_query #include namespace glm{ namespace detail { template struct compute_areCollinear{}; template struct compute_areCollinear<2, T, Q> { GLM_FUNC_QUALIFIER static bool call(vec<2, T, Q> const& v0, vec<2, T, Q> const& v1, T const& epsilon) { return length(cross(vec<3, T, Q>(v0, static_cast(0)), vec<3, T, Q>(v1, static_cast(0)))) < epsilon; } }; template struct compute_areCollinear<3, T, Q> { GLM_FUNC_QUALIFIER static bool call(vec<3, T, Q> const& v0, vec<3, T, Q> const& v1, T const& epsilon) { return length(cross(v0, v1)) < epsilon; } }; template struct compute_areCollinear<4, T, Q> { GLM_FUNC_QUALIFIER static bool call(vec<4, T, Q> const& v0, vec<4, T, Q> const& v1, T const& epsilon) { return length(cross(vec<3, T, Q>(v0), vec<3, T, Q>(v1))) < epsilon; } }; template struct compute_isCompNull{}; template struct compute_isCompNull<2, T, Q> { GLM_FUNC_QUALIFIER static vec<2, bool, Q> call(vec<2, T, Q> const& v, T const& epsilon) { return vec<2, bool, Q>( (abs(v.x) < epsilon), (abs(v.y) < epsilon)); } }; template struct compute_isCompNull<3, T, Q> { GLM_FUNC_QUALIFIER static vec<3, bool, Q> call(vec<3, T, Q> const& v, T const& epsilon) { return vec<3, bool, Q>( (abs(v.x) < epsilon), (abs(v.y) < epsilon), (abs(v.z) < epsilon)); } }; template struct compute_isCompNull<4, T, Q> { GLM_FUNC_QUALIFIER static vec<4, bool, Q> call(vec<4, T, Q> const& v, T const& epsilon) { return vec<4, bool, Q>( (abs(v.x) < epsilon), (abs(v.y) < epsilon), (abs(v.z) < epsilon), (abs(v.w) < epsilon)); } }; }//namespace detail template GLM_FUNC_QUALIFIER bool areCollinear(vec const& v0, vec const& v1, T const& epsilon) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'areCollinear' only accept floating-point inputs"); return detail::compute_areCollinear::call(v0, v1, epsilon); } template GLM_FUNC_QUALIFIER bool areOrthogonal(vec const& v0, vec const& v1, T const& epsilon) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'areOrthogonal' only accept floating-point inputs"); return abs(dot(v0, v1)) <= max( static_cast(1), length(v0)) * max(static_cast(1), length(v1)) * epsilon; } template GLM_FUNC_QUALIFIER bool isNormalized(vec const& v, T const& epsilon) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isNormalized' only accept floating-point inputs"); return abs(length(v) - static_cast(1)) <= static_cast(2) * epsilon; } template GLM_FUNC_QUALIFIER bool isNull(vec const& v, T const& epsilon) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isNull' only accept floating-point inputs"); return length(v) <= epsilon; } template GLM_FUNC_QUALIFIER vec isCompNull(vec const& v, T const& epsilon) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isCompNull' only accept floating-point inputs"); return detail::compute_isCompNull::call(v, epsilon); } template GLM_FUNC_QUALIFIER vec<2, bool, Q> isCompNull(vec<2, T, Q> const& v, T const& epsilon) { return vec<2, bool, Q>( abs(v.x) < epsilon, abs(v.y) < epsilon); } template GLM_FUNC_QUALIFIER vec<3, bool, Q> isCompNull(vec<3, T, Q> const& v, T const& epsilon) { return vec<3, bool, Q>( abs(v.x) < epsilon, abs(v.y) < epsilon, abs(v.z) < epsilon); } template GLM_FUNC_QUALIFIER vec<4, bool, Q> isCompNull(vec<4, T, Q> const& v, T const& epsilon) { return vec<4, bool, Q>( abs(v.x) < epsilon, abs(v.y) < epsilon, abs(v.z) < epsilon, abs(v.w) < epsilon); } template GLM_FUNC_QUALIFIER bool areOrthonormal(vec const& v0, vec const& v1, T const& epsilon) { return isNormalized(v0, epsilon) && isNormalized(v1, epsilon) && (abs(dot(v0, v1)) <= epsilon); } }//namespace glm ================================================ FILE: libraries/glm/gtx/wrap.hpp ================================================ /// @ref gtx_wrap /// @file glm/gtx/wrap.hpp /// /// @see core (dependence) /// /// @defgroup gtx_wrap GLM_GTX_wrap /// @ingroup gtx /// /// Include to use the features of this extension. /// /// Wrapping mode of texture coordinates. #pragma once // Dependency: #include "../glm.hpp" #include "../gtc/vec1.hpp" #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) # ifndef GLM_ENABLE_EXPERIMENTAL # pragma message("GLM: GLM_GTX_wrap is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") # else # pragma message("GLM: GLM_GTX_wrap extension included") # endif #endif namespace glm { /// @addtogroup gtx_wrap /// @{ /// Simulate GL_CLAMP OpenGL wrap mode /// @see gtx_wrap extension. template GLM_FUNC_DECL genType clamp(genType const& Texcoord); /// Simulate GL_REPEAT OpenGL wrap mode /// @see gtx_wrap extension. template GLM_FUNC_DECL genType repeat(genType const& Texcoord); /// Simulate GL_MIRRORED_REPEAT OpenGL wrap mode /// @see gtx_wrap extension. template GLM_FUNC_DECL genType mirrorClamp(genType const& Texcoord); /// Simulate GL_MIRROR_REPEAT OpenGL wrap mode /// @see gtx_wrap extension. template GLM_FUNC_DECL genType mirrorRepeat(genType const& Texcoord); /// @} }// namespace glm #include "wrap.inl" ================================================ FILE: libraries/glm/gtx/wrap.inl ================================================ /// @ref gtx_wrap namespace glm { template GLM_FUNC_QUALIFIER vec clamp(vec const& Texcoord) { return glm::clamp(Texcoord, vec(0), vec(1)); } template GLM_FUNC_QUALIFIER genType clamp(genType const& Texcoord) { return clamp(vec<1, genType, defaultp>(Texcoord)).x; } template GLM_FUNC_QUALIFIER vec repeat(vec const& Texcoord) { return glm::fract(Texcoord); } template GLM_FUNC_QUALIFIER genType repeat(genType const& Texcoord) { return repeat(vec<1, genType, defaultp>(Texcoord)).x; } template GLM_FUNC_QUALIFIER vec mirrorClamp(vec const& Texcoord) { return glm::fract(glm::abs(Texcoord)); } template GLM_FUNC_QUALIFIER genType mirrorClamp(genType const& Texcoord) { return mirrorClamp(vec<1, genType, defaultp>(Texcoord)).x; } template GLM_FUNC_QUALIFIER vec mirrorRepeat(vec const& Texcoord) { vec const Abs = glm::abs(Texcoord); vec const Clamp = glm::mod(glm::floor(Abs), vec(2)); vec const Floor = glm::floor(Abs); vec const Rest = Abs - Floor; vec const Mirror = Clamp + Rest; return mix(Rest, vec(1) - Rest, glm::greaterThanEqual(Mirror, vec(1))); } template GLM_FUNC_QUALIFIER genType mirrorRepeat(genType const& Texcoord) { return mirrorRepeat(vec<1, genType, defaultp>(Texcoord)).x; } }//namespace glm ================================================ FILE: libraries/glm/integer.hpp ================================================ /// @ref core /// @file glm/integer.hpp /// /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions /// /// @defgroup core_func_integer Integer functions /// @ingroup core /// /// Provides GLSL functions on integer types /// /// These all operate component-wise. The description is per component. /// The notation [a, b] means the set of bits from bit-number a through bit-number /// b, inclusive. The lowest-order bit is bit 0. /// /// Include to use these core features. #pragma once #include "detail/qualifier.hpp" #include "common.hpp" #include "vector_relational.hpp" namespace glm { /// @addtogroup core_func_integer /// @{ /// Adds 32-bit unsigned integer x and y, returning the sum /// modulo pow(2, 32). The value carry is set to 0 if the sum was /// less than pow(2, 32), or to 1 otherwise. /// /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// /// @see GLSL uaddCarry man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions template GLM_FUNC_DECL vec uaddCarry( vec const& x, vec const& y, vec & carry); /// Subtracts the 32-bit unsigned integer y from x, returning /// the difference if non-negative, or pow(2, 32) plus the difference /// otherwise. The value borrow is set to 0 if x >= y, or to 1 otherwise. /// /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// /// @see GLSL usubBorrow man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions template GLM_FUNC_DECL vec usubBorrow( vec const& x, vec const& y, vec & borrow); /// Multiplies 32-bit integers x and y, producing a 64-bit /// result. The 32 least-significant bits are returned in lsb. /// The 32 most-significant bits are returned in msb. /// /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// /// @see GLSL umulExtended man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions template GLM_FUNC_DECL void umulExtended( vec const& x, vec const& y, vec & msb, vec & lsb); /// Multiplies 32-bit integers x and y, producing a 64-bit /// result. The 32 least-significant bits are returned in lsb. /// The 32 most-significant bits are returned in msb. /// /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// /// @see GLSL imulExtended man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions template GLM_FUNC_DECL void imulExtended( vec const& x, vec const& y, vec & msb, vec & lsb); /// Extracts bits [offset, offset + bits - 1] from value, /// returning them in the least significant bits of the result. /// For unsigned data types, the most significant bits of the /// result will be set to zero. For signed data types, the /// most significant bits will be set to the value of bit offset + base - 1. /// /// If bits is zero, the result will be zero. The result will be /// undefined if offset or bits is negative, or if the sum of /// offset and bits is greater than the number of bits used /// to store the operand. /// /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// @tparam T Signed or unsigned integer scalar types. /// /// @see GLSL bitfieldExtract man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions template GLM_FUNC_DECL vec bitfieldExtract( vec const& Value, int Offset, int Bits); /// Returns the insertion the bits least-significant bits of insert into base. /// /// The result will have bits [offset, offset + bits - 1] taken /// from bits [0, bits - 1] of insert, and all other bits taken /// directly from the corresponding bits of base. If bits is /// zero, the result will simply be base. The result will be /// undefined if offset or bits is negative, or if the sum of /// offset and bits is greater than the number of bits used to /// store the operand. /// /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// @tparam T Signed or unsigned integer scalar or vector types. /// /// @see GLSL bitfieldInsert man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions template GLM_FUNC_DECL vec bitfieldInsert( vec const& Base, vec const& Insert, int Offset, int Bits); /// Returns the reversal of the bits of value. /// The bit numbered n of the result will be taken from bit (bits - 1) - n of value, /// where bits is the total number of bits used to represent value. /// /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// @tparam T Signed or unsigned integer scalar or vector types. /// /// @see GLSL bitfieldReverse man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions template GLM_FUNC_DECL vec bitfieldReverse(vec const& v); /// Returns the number of bits set to 1 in the binary representation of value. /// /// @tparam genType Signed or unsigned integer scalar or vector types. /// /// @see GLSL bitCount man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions template GLM_FUNC_DECL int bitCount(genType v); /// Returns the number of bits set to 1 in the binary representation of value. /// /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// @tparam T Signed or unsigned integer scalar or vector types. /// /// @see GLSL bitCount man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions template GLM_FUNC_DECL vec bitCount(vec const& v); /// Returns the bit number of the least significant bit set to /// 1 in the binary representation of value. /// If value is zero, -1 will be returned. /// /// @tparam genIUType Signed or unsigned integer scalar types. /// /// @see GLSL findLSB man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions template GLM_FUNC_DECL int findLSB(genIUType x); /// Returns the bit number of the least significant bit set to /// 1 in the binary representation of value. /// If value is zero, -1 will be returned. /// /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// @tparam T Signed or unsigned integer scalar types. /// /// @see GLSL findLSB man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions template GLM_FUNC_DECL vec findLSB(vec const& v); /// Returns the bit number of the most significant bit in the binary representation of value. /// For positive integers, the result will be the bit number of the most significant bit set to 1. /// For negative integers, the result will be the bit number of the most significant /// bit set to 0. For a value of zero or negative one, -1 will be returned. /// /// @tparam genIUType Signed or unsigned integer scalar types. /// /// @see GLSL findMSB man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions template GLM_FUNC_DECL int findMSB(genIUType x); /// Returns the bit number of the most significant bit in the binary representation of value. /// For positive integers, the result will be the bit number of the most significant bit set to 1. /// For negative integers, the result will be the bit number of the most significant /// bit set to 0. For a value of zero or negative one, -1 will be returned. /// /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// @tparam T Signed or unsigned integer scalar types. /// /// @see GLSL findMSB man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions template GLM_FUNC_DECL vec findMSB(vec const& v); /// @} }//namespace glm #include "detail/func_integer.inl" ================================================ FILE: libraries/glm/mat2x2.hpp ================================================ /// @ref core /// @file glm/mat2x2.hpp #pragma once #include "./ext/matrix_double2x2.hpp" #include "./ext/matrix_double2x2_precision.hpp" #include "./ext/matrix_float2x2.hpp" #include "./ext/matrix_float2x2_precision.hpp" ================================================ FILE: libraries/glm/mat2x3.hpp ================================================ /// @ref core /// @file glm/mat2x3.hpp #pragma once #include "./ext/matrix_double2x3.hpp" #include "./ext/matrix_double2x3_precision.hpp" #include "./ext/matrix_float2x3.hpp" #include "./ext/matrix_float2x3_precision.hpp" ================================================ FILE: libraries/glm/mat2x4.hpp ================================================ /// @ref core /// @file glm/mat2x4.hpp #pragma once #include "./ext/matrix_double2x4.hpp" #include "./ext/matrix_double2x4_precision.hpp" #include "./ext/matrix_float2x4.hpp" #include "./ext/matrix_float2x4_precision.hpp" ================================================ FILE: libraries/glm/mat3x2.hpp ================================================ /// @ref core /// @file glm/mat3x2.hpp #pragma once #include "./ext/matrix_double3x2.hpp" #include "./ext/matrix_double3x2_precision.hpp" #include "./ext/matrix_float3x2.hpp" #include "./ext/matrix_float3x2_precision.hpp" ================================================ FILE: libraries/glm/mat3x3.hpp ================================================ /// @ref core /// @file glm/mat3x3.hpp #pragma once #include "./ext/matrix_double3x3.hpp" #include "./ext/matrix_double3x3_precision.hpp" #include "./ext/matrix_float3x3.hpp" #include "./ext/matrix_float3x3_precision.hpp" ================================================ FILE: libraries/glm/mat3x4.hpp ================================================ /// @ref core /// @file glm/mat3x4.hpp #pragma once #include "./ext/matrix_double3x4.hpp" #include "./ext/matrix_double3x4_precision.hpp" #include "./ext/matrix_float3x4.hpp" #include "./ext/matrix_float3x4_precision.hpp" ================================================ FILE: libraries/glm/mat4x2.hpp ================================================ /// @ref core /// @file glm/mat4x2.hpp #pragma once #include "./ext/matrix_double4x2.hpp" #include "./ext/matrix_double4x2_precision.hpp" #include "./ext/matrix_float4x2.hpp" #include "./ext/matrix_float4x2_precision.hpp" ================================================ FILE: libraries/glm/mat4x3.hpp ================================================ /// @ref core /// @file glm/mat4x3.hpp #pragma once #include "./ext/matrix_double4x3.hpp" #include "./ext/matrix_double4x3_precision.hpp" #include "./ext/matrix_float4x3.hpp" #include "./ext/matrix_float4x3_precision.hpp" ================================================ FILE: libraries/glm/mat4x4.hpp ================================================ /// @ref core /// @file glm/mat4x4.hpp #pragma once #include "./ext/matrix_double4x4.hpp" #include "./ext/matrix_double4x4_precision.hpp" #include "./ext/matrix_float4x4.hpp" #include "./ext/matrix_float4x4_precision.hpp" ================================================ FILE: libraries/glm/matrix.hpp ================================================ /// @ref core /// @file glm/matrix.hpp /// /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions /// /// @defgroup core_func_matrix Matrix functions /// @ingroup core /// /// Provides GLSL matrix functions. /// /// Include to use these core features. #pragma once // Dependencies #include "detail/qualifier.hpp" #include "detail/setup.hpp" #include "vec2.hpp" #include "vec3.hpp" #include "vec4.hpp" #include "mat2x2.hpp" #include "mat2x3.hpp" #include "mat2x4.hpp" #include "mat3x2.hpp" #include "mat3x3.hpp" #include "mat3x4.hpp" #include "mat4x2.hpp" #include "mat4x3.hpp" #include "mat4x4.hpp" namespace glm { namespace detail { template struct outerProduct_trait{}; template struct outerProduct_trait<2, 2, T, Q> { typedef mat<2, 2, T, Q> type; }; template struct outerProduct_trait<2, 3, T, Q> { typedef mat<3, 2, T, Q> type; }; template struct outerProduct_trait<2, 4, T, Q> { typedef mat<4, 2, T, Q> type; }; template struct outerProduct_trait<3, 2, T, Q> { typedef mat<2, 3, T, Q> type; }; template struct outerProduct_trait<3, 3, T, Q> { typedef mat<3, 3, T, Q> type; }; template struct outerProduct_trait<3, 4, T, Q> { typedef mat<4, 3, T, Q> type; }; template struct outerProduct_trait<4, 2, T, Q> { typedef mat<2, 4, T, Q> type; }; template struct outerProduct_trait<4, 3, T, Q> { typedef mat<3, 4, T, Q> type; }; template struct outerProduct_trait<4, 4, T, Q> { typedef mat<4, 4, T, Q> type; }; }//namespace detail /// @addtogroup core_func_matrix /// @{ /// Multiply matrix x by matrix y component-wise, i.e., /// result[i][j] is the scalar product of x[i][j] and y[i][j]. /// /// @tparam C Integer between 1 and 4 included that qualify the number a column /// @tparam R Integer between 1 and 4 included that qualify the number a row /// @tparam T Floating-point or signed integer scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL matrixCompMult man page /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions template GLM_FUNC_DECL mat matrixCompMult(mat const& x, mat const& y); /// Treats the first parameter c as a column vector /// and the second parameter r as a row vector /// and does a linear algebraic matrix multiply c * r. /// /// @tparam C Integer between 1 and 4 included that qualify the number a column /// @tparam R Integer between 1 and 4 included that qualify the number a row /// @tparam T Floating-point or signed integer scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL outerProduct man page /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions template GLM_FUNC_DECL typename detail::outerProduct_trait::type outerProduct(vec const& c, vec const& r); /// Returns the transposed matrix of x /// /// @tparam C Integer between 1 and 4 included that qualify the number a column /// @tparam R Integer between 1 and 4 included that qualify the number a row /// @tparam T Floating-point or signed integer scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL transpose man page /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions template GLM_FUNC_DECL typename mat::transpose_type transpose(mat const& x); /// Return the determinant of a squared matrix. /// /// @tparam C Integer between 1 and 4 included that qualify the number a column /// @tparam R Integer between 1 and 4 included that qualify the number a row /// @tparam T Floating-point or signed integer scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL determinant man page /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions template GLM_FUNC_DECL T determinant(mat const& m); /// Return the inverse of a squared matrix. /// /// @tparam C Integer between 1 and 4 included that qualify the number a column /// @tparam R Integer between 1 and 4 included that qualify the number a row /// @tparam T Floating-point or signed integer scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL inverse man page /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions template GLM_FUNC_DECL mat inverse(mat const& m); /// @} }//namespace glm #include "detail/func_matrix.inl" ================================================ FILE: libraries/glm/packing.hpp ================================================ /// @ref core /// @file glm/packing.hpp /// /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions /// @see gtc_packing /// /// @defgroup core_func_packing Floating-Point Pack and Unpack Functions /// @ingroup core /// /// Provides GLSL functions to pack and unpack half, single and double-precision floating point values into more compact integer types. /// /// These functions do not operate component-wise, rather as described in each case. /// /// Include to use these core features. #pragma once #include "./ext/vector_uint2.hpp" #include "./ext/vector_float2.hpp" #include "./ext/vector_float4.hpp" namespace glm { /// @addtogroup core_func_packing /// @{ /// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. /// Then, the results are packed into the returned 32-bit unsigned integer. /// /// The conversion for component c of v to fixed point is done as follows: /// packUnorm2x16: round(clamp(c, 0, +1) * 65535.0) /// /// The first component of the vector will be written to the least significant bits of the output; /// the last component will be written to the most significant bits. /// /// @see GLSL packUnorm2x16 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL uint packUnorm2x16(vec2 const& v); /// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. /// Then, the results are packed into the returned 32-bit unsigned integer. /// /// The conversion for component c of v to fixed point is done as follows: /// packSnorm2x16: round(clamp(v, -1, +1) * 32767.0) /// /// The first component of the vector will be written to the least significant bits of the output; /// the last component will be written to the most significant bits. /// /// @see GLSL packSnorm2x16 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL uint packSnorm2x16(vec2 const& v); /// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. /// Then, the results are packed into the returned 32-bit unsigned integer. /// /// The conversion for component c of v to fixed point is done as follows: /// packUnorm4x8: round(clamp(c, 0, +1) * 255.0) /// /// The first component of the vector will be written to the least significant bits of the output; /// the last component will be written to the most significant bits. /// /// @see GLSL packUnorm4x8 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL uint packUnorm4x8(vec4 const& v); /// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. /// Then, the results are packed into the returned 32-bit unsigned integer. /// /// The conversion for component c of v to fixed point is done as follows: /// packSnorm4x8: round(clamp(c, -1, +1) * 127.0) /// /// The first component of the vector will be written to the least significant bits of the output; /// the last component will be written to the most significant bits. /// /// @see GLSL packSnorm4x8 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL uint packSnorm4x8(vec4 const& v); /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. /// /// The conversion for unpacked fixed-point value f to floating point is done as follows: /// unpackUnorm2x16: f / 65535.0 /// /// The first component of the returned vector will be extracted from the least significant bits of the input; /// the last component will be extracted from the most significant bits. /// /// @see GLSL unpackUnorm2x16 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL vec2 unpackUnorm2x16(uint p); /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. /// /// The conversion for unpacked fixed-point value f to floating point is done as follows: /// unpackSnorm2x16: clamp(f / 32767.0, -1, +1) /// /// The first component of the returned vector will be extracted from the least significant bits of the input; /// the last component will be extracted from the most significant bits. /// /// @see GLSL unpackSnorm2x16 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL vec2 unpackSnorm2x16(uint p); /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. /// /// The conversion for unpacked fixed-point value f to floating point is done as follows: /// unpackUnorm4x8: f / 255.0 /// /// The first component of the returned vector will be extracted from the least significant bits of the input; /// the last component will be extracted from the most significant bits. /// /// @see GLSL unpackUnorm4x8 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL vec4 unpackUnorm4x8(uint p); /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. /// /// The conversion for unpacked fixed-point value f to floating point is done as follows: /// unpackSnorm4x8: clamp(f / 127.0, -1, +1) /// /// The first component of the returned vector will be extracted from the least significant bits of the input; /// the last component will be extracted from the most significant bits. /// /// @see GLSL unpackSnorm4x8 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL vec4 unpackSnorm4x8(uint p); /// Returns a double-qualifier value obtained by packing the components of v into a 64-bit value. /// If an IEEE 754 Inf or NaN is created, it will not signal, and the resulting floating point value is unspecified. /// Otherwise, the bit- level representation of v is preserved. /// The first vector component specifies the 32 least significant bits; /// the second component specifies the 32 most significant bits. /// /// @see GLSL packDouble2x32 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL double packDouble2x32(uvec2 const& v); /// Returns a two-component unsigned integer vector representation of v. /// The bit-level representation of v is preserved. /// The first component of the vector contains the 32 least significant bits of the double; /// the second component consists the 32 most significant bits. /// /// @see GLSL unpackDouble2x32 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL uvec2 unpackDouble2x32(double v); /// Returns an unsigned integer obtained by converting the components of a two-component floating-point vector /// to the 16-bit floating-point representation found in the OpenGL Specification, /// and then packing these two 16- bit integers into a 32-bit unsigned integer. /// The first vector component specifies the 16 least-significant bits of the result; /// the second component specifies the 16 most-significant bits. /// /// @see GLSL packHalf2x16 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL uint packHalf2x16(vec2 const& v); /// Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned integer into a pair of 16-bit values, /// interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, /// and converting them to 32-bit floating-point values. /// The first component of the vector is obtained from the 16 least-significant bits of v; /// the second component is obtained from the 16 most-significant bits of v. /// /// @see GLSL unpackHalf2x16 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions GLM_FUNC_DECL vec2 unpackHalf2x16(uint v); /// @} }//namespace glm #include "detail/func_packing.inl" ================================================ FILE: libraries/glm/simd/common.h ================================================ /// @ref simd /// @file glm/simd/common.h #pragma once #include "platform.h" #if GLM_ARCH & GLM_ARCH_SSE2_BIT GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_add(glm_f32vec4 a, glm_f32vec4 b) { return _mm_add_ps(a, b); } GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_add(glm_f32vec4 a, glm_f32vec4 b) { return _mm_add_ss(a, b); } GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_sub(glm_f32vec4 a, glm_f32vec4 b) { return _mm_sub_ps(a, b); } GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_sub(glm_f32vec4 a, glm_f32vec4 b) { return _mm_sub_ss(a, b); } GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_mul(glm_f32vec4 a, glm_f32vec4 b) { return _mm_mul_ps(a, b); } GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_mul(glm_f32vec4 a, glm_f32vec4 b) { return _mm_mul_ss(a, b); } GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_div(glm_f32vec4 a, glm_f32vec4 b) { return _mm_div_ps(a, b); } GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_div(glm_f32vec4 a, glm_f32vec4 b) { return _mm_div_ss(a, b); } GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_div_lowp(glm_f32vec4 a, glm_f32vec4 b) { return glm_vec4_mul(a, _mm_rcp_ps(b)); } GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_swizzle_xyzw(glm_f32vec4 a) { # if GLM_ARCH & GLM_ARCH_AVX2_BIT return _mm_permute_ps(a, _MM_SHUFFLE(3, 2, 1, 0)); # else return _mm_shuffle_ps(a, a, _MM_SHUFFLE(3, 2, 1, 0)); # endif } GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_fma(glm_f32vec4 a, glm_f32vec4 b, glm_f32vec4 c) { # if (GLM_ARCH & GLM_ARCH_AVX2_BIT) && !(GLM_COMPILER & GLM_COMPILER_CLANG) return _mm_fmadd_ss(a, b, c); # else return _mm_add_ss(_mm_mul_ss(a, b), c); # endif } GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_fma(glm_f32vec4 a, glm_f32vec4 b, glm_f32vec4 c) { # if (GLM_ARCH & GLM_ARCH_AVX2_BIT) && !(GLM_COMPILER & GLM_COMPILER_CLANG) return _mm_fmadd_ps(a, b, c); # else return glm_vec4_add(glm_vec4_mul(a, b), c); # endif } GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_abs(glm_f32vec4 x) { return _mm_and_ps(x, _mm_castsi128_ps(_mm_set1_epi32(0x7FFFFFFF))); } GLM_FUNC_QUALIFIER glm_ivec4 glm_ivec4_abs(glm_ivec4 x) { # if GLM_ARCH & GLM_ARCH_SSSE3_BIT return _mm_sign_epi32(x, x); # else glm_ivec4 const sgn0 = _mm_srai_epi32(x, 31); glm_ivec4 const inv0 = _mm_xor_si128(x, sgn0); glm_ivec4 const sub0 = _mm_sub_epi32(inv0, sgn0); return sub0; # endif } GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_sign(glm_vec4 x) { glm_vec4 const zro0 = _mm_setzero_ps(); glm_vec4 const cmp0 = _mm_cmplt_ps(x, zro0); glm_vec4 const cmp1 = _mm_cmpgt_ps(x, zro0); glm_vec4 const and0 = _mm_and_ps(cmp0, _mm_set1_ps(-1.0f)); glm_vec4 const and1 = _mm_and_ps(cmp1, _mm_set1_ps(1.0f)); glm_vec4 const or0 = _mm_or_ps(and0, and1); return or0; } GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_round(glm_vec4 x) { # if GLM_ARCH & GLM_ARCH_SSE41_BIT return _mm_round_ps(x, _MM_FROUND_TO_NEAREST_INT); # else glm_vec4 const sgn0 = _mm_castsi128_ps(_mm_set1_epi32(int(0x80000000))); glm_vec4 const and0 = _mm_and_ps(sgn0, x); glm_vec4 const or0 = _mm_or_ps(and0, _mm_set_ps1(8388608.0f)); glm_vec4 const add0 = glm_vec4_add(x, or0); glm_vec4 const sub0 = glm_vec4_sub(add0, or0); return sub0; # endif } GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_floor(glm_vec4 x) { # if GLM_ARCH & GLM_ARCH_SSE41_BIT return _mm_floor_ps(x); # else glm_vec4 const rnd0 = glm_vec4_round(x); glm_vec4 const cmp0 = _mm_cmplt_ps(x, rnd0); glm_vec4 const and0 = _mm_and_ps(cmp0, _mm_set1_ps(1.0f)); glm_vec4 const sub0 = glm_vec4_sub(rnd0, and0); return sub0; # endif } /* trunc TODO GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_trunc(glm_vec4 x) { return glm_vec4(); } */ //roundEven GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_roundEven(glm_vec4 x) { glm_vec4 const sgn0 = _mm_castsi128_ps(_mm_set1_epi32(int(0x80000000))); glm_vec4 const and0 = _mm_and_ps(sgn0, x); glm_vec4 const or0 = _mm_or_ps(and0, _mm_set_ps1(8388608.0f)); glm_vec4 const add0 = glm_vec4_add(x, or0); glm_vec4 const sub0 = glm_vec4_sub(add0, or0); return sub0; } GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_ceil(glm_vec4 x) { # if GLM_ARCH & GLM_ARCH_SSE41_BIT return _mm_ceil_ps(x); # else glm_vec4 const rnd0 = glm_vec4_round(x); glm_vec4 const cmp0 = _mm_cmpgt_ps(x, rnd0); glm_vec4 const and0 = _mm_and_ps(cmp0, _mm_set1_ps(1.0f)); glm_vec4 const add0 = glm_vec4_add(rnd0, and0); return add0; # endif } GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_fract(glm_vec4 x) { glm_vec4 const flr0 = glm_vec4_floor(x); glm_vec4 const sub0 = glm_vec4_sub(x, flr0); return sub0; } GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_mod(glm_vec4 x, glm_vec4 y) { glm_vec4 const div0 = glm_vec4_div(x, y); glm_vec4 const flr0 = glm_vec4_floor(div0); glm_vec4 const mul0 = glm_vec4_mul(y, flr0); glm_vec4 const sub0 = glm_vec4_sub(x, mul0); return sub0; } GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_clamp(glm_vec4 v, glm_vec4 minVal, glm_vec4 maxVal) { glm_vec4 const min0 = _mm_min_ps(v, maxVal); glm_vec4 const max0 = _mm_max_ps(min0, minVal); return max0; } GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_mix(glm_vec4 v1, glm_vec4 v2, glm_vec4 a) { glm_vec4 const sub0 = glm_vec4_sub(_mm_set1_ps(1.0f), a); glm_vec4 const mul0 = glm_vec4_mul(v1, sub0); glm_vec4 const mad0 = glm_vec4_fma(v2, a, mul0); return mad0; } GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_step(glm_vec4 edge, glm_vec4 x) { glm_vec4 const cmp = _mm_cmple_ps(x, edge); return _mm_movemask_ps(cmp) == 0 ? _mm_set1_ps(1.0f) : _mm_setzero_ps(); } GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_smoothstep(glm_vec4 edge0, glm_vec4 edge1, glm_vec4 x) { glm_vec4 const sub0 = glm_vec4_sub(x, edge0); glm_vec4 const sub1 = glm_vec4_sub(edge1, edge0); glm_vec4 const div0 = glm_vec4_sub(sub0, sub1); glm_vec4 const clp0 = glm_vec4_clamp(div0, _mm_setzero_ps(), _mm_set1_ps(1.0f)); glm_vec4 const mul0 = glm_vec4_mul(_mm_set1_ps(2.0f), clp0); glm_vec4 const sub2 = glm_vec4_sub(_mm_set1_ps(3.0f), mul0); glm_vec4 const mul1 = glm_vec4_mul(clp0, clp0); glm_vec4 const mul2 = glm_vec4_mul(mul1, sub2); return mul2; } // Agner Fog method GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_nan(glm_vec4 x) { glm_ivec4 const t1 = _mm_castps_si128(x); // reinterpret as 32-bit integer glm_ivec4 const t2 = _mm_sll_epi32(t1, _mm_cvtsi32_si128(1)); // shift out sign bit glm_ivec4 const t3 = _mm_set1_epi32(int(0xFF000000)); // exponent mask glm_ivec4 const t4 = _mm_and_si128(t2, t3); // exponent glm_ivec4 const t5 = _mm_andnot_si128(t3, t2); // fraction glm_ivec4 const Equal = _mm_cmpeq_epi32(t3, t4); glm_ivec4 const Nequal = _mm_cmpeq_epi32(t5, _mm_setzero_si128()); glm_ivec4 const And = _mm_and_si128(Equal, Nequal); return _mm_castsi128_ps(And); // exponent = all 1s and fraction != 0 } // Agner Fog method GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_inf(glm_vec4 x) { glm_ivec4 const t1 = _mm_castps_si128(x); // reinterpret as 32-bit integer glm_ivec4 const t2 = _mm_sll_epi32(t1, _mm_cvtsi32_si128(1)); // shift out sign bit return _mm_castsi128_ps(_mm_cmpeq_epi32(t2, _mm_set1_epi32(int(0xFF000000)))); // exponent is all 1s, fraction is 0 } #endif//GLM_ARCH & GLM_ARCH_SSE2_BIT ================================================ FILE: libraries/glm/simd/exponential.h ================================================ /// @ref simd /// @file glm/simd/experimental.h #pragma once #include "platform.h" #if GLM_ARCH & GLM_ARCH_SSE2_BIT GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_sqrt_lowp(glm_f32vec4 x) { return _mm_mul_ss(_mm_rsqrt_ss(x), x); } GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_sqrt_lowp(glm_f32vec4 x) { return _mm_mul_ps(_mm_rsqrt_ps(x), x); } #endif//GLM_ARCH & GLM_ARCH_SSE2_BIT ================================================ FILE: libraries/glm/simd/geometric.h ================================================ /// @ref simd /// @file glm/simd/geometric.h #pragma once #include "common.h" #if GLM_ARCH & GLM_ARCH_SSE2_BIT GLM_FUNC_DECL glm_vec4 glm_vec4_dot(glm_vec4 v1, glm_vec4 v2); GLM_FUNC_DECL glm_vec4 glm_vec1_dot(glm_vec4 v1, glm_vec4 v2); GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_length(glm_vec4 x) { glm_vec4 const dot0 = glm_vec4_dot(x, x); glm_vec4 const sqt0 = _mm_sqrt_ps(dot0); return sqt0; } GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_distance(glm_vec4 p0, glm_vec4 p1) { glm_vec4 const sub0 = _mm_sub_ps(p0, p1); glm_vec4 const len0 = glm_vec4_length(sub0); return len0; } GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_dot(glm_vec4 v1, glm_vec4 v2) { # if GLM_ARCH & GLM_ARCH_AVX_BIT return _mm_dp_ps(v1, v2, 0xff); # elif GLM_ARCH & GLM_ARCH_SSE3_BIT glm_vec4 const mul0 = _mm_mul_ps(v1, v2); glm_vec4 const hadd0 = _mm_hadd_ps(mul0, mul0); glm_vec4 const hadd1 = _mm_hadd_ps(hadd0, hadd0); return hadd1; # else glm_vec4 const mul0 = _mm_mul_ps(v1, v2); glm_vec4 const swp0 = _mm_shuffle_ps(mul0, mul0, _MM_SHUFFLE(2, 3, 0, 1)); glm_vec4 const add0 = _mm_add_ps(mul0, swp0); glm_vec4 const swp1 = _mm_shuffle_ps(add0, add0, _MM_SHUFFLE(0, 1, 2, 3)); glm_vec4 const add1 = _mm_add_ps(add0, swp1); return add1; # endif } GLM_FUNC_QUALIFIER glm_vec4 glm_vec1_dot(glm_vec4 v1, glm_vec4 v2) { # if GLM_ARCH & GLM_ARCH_AVX_BIT return _mm_dp_ps(v1, v2, 0xff); # elif GLM_ARCH & GLM_ARCH_SSE3_BIT glm_vec4 const mul0 = _mm_mul_ps(v1, v2); glm_vec4 const had0 = _mm_hadd_ps(mul0, mul0); glm_vec4 const had1 = _mm_hadd_ps(had0, had0); return had1; # else glm_vec4 const mul0 = _mm_mul_ps(v1, v2); glm_vec4 const mov0 = _mm_movehl_ps(mul0, mul0); glm_vec4 const add0 = _mm_add_ps(mov0, mul0); glm_vec4 const swp1 = _mm_shuffle_ps(add0, add0, 1); glm_vec4 const add1 = _mm_add_ss(add0, swp1); return add1; # endif } GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_cross(glm_vec4 v1, glm_vec4 v2) { glm_vec4 const swp0 = _mm_shuffle_ps(v1, v1, _MM_SHUFFLE(3, 0, 2, 1)); glm_vec4 const swp1 = _mm_shuffle_ps(v1, v1, _MM_SHUFFLE(3, 1, 0, 2)); glm_vec4 const swp2 = _mm_shuffle_ps(v2, v2, _MM_SHUFFLE(3, 0, 2, 1)); glm_vec4 const swp3 = _mm_shuffle_ps(v2, v2, _MM_SHUFFLE(3, 1, 0, 2)); glm_vec4 const mul0 = _mm_mul_ps(swp0, swp3); glm_vec4 const mul1 = _mm_mul_ps(swp1, swp2); glm_vec4 const sub0 = _mm_sub_ps(mul0, mul1); return sub0; } GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_normalize(glm_vec4 v) { glm_vec4 const dot0 = glm_vec4_dot(v, v); glm_vec4 const isr0 = _mm_rsqrt_ps(dot0); glm_vec4 const mul0 = _mm_mul_ps(v, isr0); return mul0; } GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_faceforward(glm_vec4 N, glm_vec4 I, glm_vec4 Nref) { glm_vec4 const dot0 = glm_vec4_dot(Nref, I); glm_vec4 const sgn0 = glm_vec4_sign(dot0); glm_vec4 const mul0 = _mm_mul_ps(sgn0, _mm_set1_ps(-1.0f)); glm_vec4 const mul1 = _mm_mul_ps(N, mul0); return mul1; } GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_reflect(glm_vec4 I, glm_vec4 N) { glm_vec4 const dot0 = glm_vec4_dot(N, I); glm_vec4 const mul0 = _mm_mul_ps(N, dot0); glm_vec4 const mul1 = _mm_mul_ps(mul0, _mm_set1_ps(2.0f)); glm_vec4 const sub0 = _mm_sub_ps(I, mul1); return sub0; } GLM_FUNC_QUALIFIER __m128 glm_vec4_refract(glm_vec4 I, glm_vec4 N, glm_vec4 eta) { glm_vec4 const dot0 = glm_vec4_dot(N, I); glm_vec4 const mul0 = _mm_mul_ps(eta, eta); glm_vec4 const mul1 = _mm_mul_ps(dot0, dot0); glm_vec4 const sub0 = _mm_sub_ps(_mm_set1_ps(1.0f), mul0); glm_vec4 const sub1 = _mm_sub_ps(_mm_set1_ps(1.0f), mul1); glm_vec4 const mul2 = _mm_mul_ps(sub0, sub1); if(_mm_movemask_ps(_mm_cmplt_ss(mul2, _mm_set1_ps(0.0f))) == 0) return _mm_set1_ps(0.0f); glm_vec4 const sqt0 = _mm_sqrt_ps(mul2); glm_vec4 const mad0 = glm_vec4_fma(eta, dot0, sqt0); glm_vec4 const mul4 = _mm_mul_ps(mad0, N); glm_vec4 const mul5 = _mm_mul_ps(eta, I); glm_vec4 const sub2 = _mm_sub_ps(mul5, mul4); return sub2; } #endif//GLM_ARCH & GLM_ARCH_SSE2_BIT ================================================ FILE: libraries/glm/simd/integer.h ================================================ /// @ref simd /// @file glm/simd/integer.h #pragma once #if GLM_ARCH & GLM_ARCH_SSE2_BIT GLM_FUNC_QUALIFIER glm_uvec4 glm_i128_interleave(glm_uvec4 x) { glm_uvec4 const Mask4 = _mm_set1_epi32(0x0000FFFF); glm_uvec4 const Mask3 = _mm_set1_epi32(0x00FF00FF); glm_uvec4 const Mask2 = _mm_set1_epi32(0x0F0F0F0F); glm_uvec4 const Mask1 = _mm_set1_epi32(0x33333333); glm_uvec4 const Mask0 = _mm_set1_epi32(0x55555555); glm_uvec4 Reg1; glm_uvec4 Reg2; // REG1 = x; // REG2 = y; //Reg1 = _mm_unpacklo_epi64(x, y); Reg1 = x; //REG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF); //REG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF); Reg2 = _mm_slli_si128(Reg1, 2); Reg1 = _mm_or_si128(Reg2, Reg1); Reg1 = _mm_and_si128(Reg1, Mask4); //REG1 = ((REG1 << 8) | REG1) & glm::uint64(0x00FF00FF00FF00FF); //REG2 = ((REG2 << 8) | REG2) & glm::uint64(0x00FF00FF00FF00FF); Reg2 = _mm_slli_si128(Reg1, 1); Reg1 = _mm_or_si128(Reg2, Reg1); Reg1 = _mm_and_si128(Reg1, Mask3); //REG1 = ((REG1 << 4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F); //REG2 = ((REG2 << 4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F); Reg2 = _mm_slli_epi32(Reg1, 4); Reg1 = _mm_or_si128(Reg2, Reg1); Reg1 = _mm_and_si128(Reg1, Mask2); //REG1 = ((REG1 << 2) | REG1) & glm::uint64(0x3333333333333333); //REG2 = ((REG2 << 2) | REG2) & glm::uint64(0x3333333333333333); Reg2 = _mm_slli_epi32(Reg1, 2); Reg1 = _mm_or_si128(Reg2, Reg1); Reg1 = _mm_and_si128(Reg1, Mask1); //REG1 = ((REG1 << 1) | REG1) & glm::uint64(0x5555555555555555); //REG2 = ((REG2 << 1) | REG2) & glm::uint64(0x5555555555555555); Reg2 = _mm_slli_epi32(Reg1, 1); Reg1 = _mm_or_si128(Reg2, Reg1); Reg1 = _mm_and_si128(Reg1, Mask0); //return REG1 | (REG2 << 1); Reg2 = _mm_slli_epi32(Reg1, 1); Reg2 = _mm_srli_si128(Reg2, 8); Reg1 = _mm_or_si128(Reg1, Reg2); return Reg1; } GLM_FUNC_QUALIFIER glm_uvec4 glm_i128_interleave2(glm_uvec4 x, glm_uvec4 y) { glm_uvec4 const Mask4 = _mm_set1_epi32(0x0000FFFF); glm_uvec4 const Mask3 = _mm_set1_epi32(0x00FF00FF); glm_uvec4 const Mask2 = _mm_set1_epi32(0x0F0F0F0F); glm_uvec4 const Mask1 = _mm_set1_epi32(0x33333333); glm_uvec4 const Mask0 = _mm_set1_epi32(0x55555555); glm_uvec4 Reg1; glm_uvec4 Reg2; // REG1 = x; // REG2 = y; Reg1 = _mm_unpacklo_epi64(x, y); //REG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF); //REG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF); Reg2 = _mm_slli_si128(Reg1, 2); Reg1 = _mm_or_si128(Reg2, Reg1); Reg1 = _mm_and_si128(Reg1, Mask4); //REG1 = ((REG1 << 8) | REG1) & glm::uint64(0x00FF00FF00FF00FF); //REG2 = ((REG2 << 8) | REG2) & glm::uint64(0x00FF00FF00FF00FF); Reg2 = _mm_slli_si128(Reg1, 1); Reg1 = _mm_or_si128(Reg2, Reg1); Reg1 = _mm_and_si128(Reg1, Mask3); //REG1 = ((REG1 << 4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F); //REG2 = ((REG2 << 4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F); Reg2 = _mm_slli_epi32(Reg1, 4); Reg1 = _mm_or_si128(Reg2, Reg1); Reg1 = _mm_and_si128(Reg1, Mask2); //REG1 = ((REG1 << 2) | REG1) & glm::uint64(0x3333333333333333); //REG2 = ((REG2 << 2) | REG2) & glm::uint64(0x3333333333333333); Reg2 = _mm_slli_epi32(Reg1, 2); Reg1 = _mm_or_si128(Reg2, Reg1); Reg1 = _mm_and_si128(Reg1, Mask1); //REG1 = ((REG1 << 1) | REG1) & glm::uint64(0x5555555555555555); //REG2 = ((REG2 << 1) | REG2) & glm::uint64(0x5555555555555555); Reg2 = _mm_slli_epi32(Reg1, 1); Reg1 = _mm_or_si128(Reg2, Reg1); Reg1 = _mm_and_si128(Reg1, Mask0); //return REG1 | (REG2 << 1); Reg2 = _mm_slli_epi32(Reg1, 1); Reg2 = _mm_srli_si128(Reg2, 8); Reg1 = _mm_or_si128(Reg1, Reg2); return Reg1; } #endif//GLM_ARCH & GLM_ARCH_SSE2_BIT ================================================ FILE: libraries/glm/simd/matrix.h ================================================ /// @ref simd /// @file glm/simd/matrix.h #pragma once #include "geometric.h" #if GLM_ARCH & GLM_ARCH_SSE2_BIT GLM_FUNC_QUALIFIER void glm_mat4_matrixCompMult(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4]) { out[0] = _mm_mul_ps(in1[0], in2[0]); out[1] = _mm_mul_ps(in1[1], in2[1]); out[2] = _mm_mul_ps(in1[2], in2[2]); out[3] = _mm_mul_ps(in1[3], in2[3]); } GLM_FUNC_QUALIFIER void glm_mat4_add(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4]) { out[0] = _mm_add_ps(in1[0], in2[0]); out[1] = _mm_add_ps(in1[1], in2[1]); out[2] = _mm_add_ps(in1[2], in2[2]); out[3] = _mm_add_ps(in1[3], in2[3]); } GLM_FUNC_QUALIFIER void glm_mat4_sub(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4]) { out[0] = _mm_sub_ps(in1[0], in2[0]); out[1] = _mm_sub_ps(in1[1], in2[1]); out[2] = _mm_sub_ps(in1[2], in2[2]); out[3] = _mm_sub_ps(in1[3], in2[3]); } GLM_FUNC_QUALIFIER glm_vec4 glm_mat4_mul_vec4(glm_vec4 const m[4], glm_vec4 v) { __m128 v0 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(0, 0, 0, 0)); __m128 v1 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(1, 1, 1, 1)); __m128 v2 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(2, 2, 2, 2)); __m128 v3 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(3, 3, 3, 3)); __m128 m0 = _mm_mul_ps(m[0], v0); __m128 m1 = _mm_mul_ps(m[1], v1); __m128 m2 = _mm_mul_ps(m[2], v2); __m128 m3 = _mm_mul_ps(m[3], v3); __m128 a0 = _mm_add_ps(m0, m1); __m128 a1 = _mm_add_ps(m2, m3); __m128 a2 = _mm_add_ps(a0, a1); return a2; } GLM_FUNC_QUALIFIER __m128 glm_vec4_mul_mat4(glm_vec4 v, glm_vec4 const m[4]) { __m128 i0 = m[0]; __m128 i1 = m[1]; __m128 i2 = m[2]; __m128 i3 = m[3]; __m128 m0 = _mm_mul_ps(v, i0); __m128 m1 = _mm_mul_ps(v, i1); __m128 m2 = _mm_mul_ps(v, i2); __m128 m3 = _mm_mul_ps(v, i3); __m128 u0 = _mm_unpacklo_ps(m0, m1); __m128 u1 = _mm_unpackhi_ps(m0, m1); __m128 a0 = _mm_add_ps(u0, u1); __m128 u2 = _mm_unpacklo_ps(m2, m3); __m128 u3 = _mm_unpackhi_ps(m2, m3); __m128 a1 = _mm_add_ps(u2, u3); __m128 f0 = _mm_movelh_ps(a0, a1); __m128 f1 = _mm_movehl_ps(a1, a0); __m128 f2 = _mm_add_ps(f0, f1); return f2; } GLM_FUNC_QUALIFIER void glm_mat4_mul(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4]) { { __m128 e0 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(0, 0, 0, 0)); __m128 e1 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(1, 1, 1, 1)); __m128 e2 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(2, 2, 2, 2)); __m128 e3 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(3, 3, 3, 3)); __m128 m0 = _mm_mul_ps(in1[0], e0); __m128 m1 = _mm_mul_ps(in1[1], e1); __m128 m2 = _mm_mul_ps(in1[2], e2); __m128 m3 = _mm_mul_ps(in1[3], e3); __m128 a0 = _mm_add_ps(m0, m1); __m128 a1 = _mm_add_ps(m2, m3); __m128 a2 = _mm_add_ps(a0, a1); out[0] = a2; } { __m128 e0 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(0, 0, 0, 0)); __m128 e1 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(1, 1, 1, 1)); __m128 e2 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(2, 2, 2, 2)); __m128 e3 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(3, 3, 3, 3)); __m128 m0 = _mm_mul_ps(in1[0], e0); __m128 m1 = _mm_mul_ps(in1[1], e1); __m128 m2 = _mm_mul_ps(in1[2], e2); __m128 m3 = _mm_mul_ps(in1[3], e3); __m128 a0 = _mm_add_ps(m0, m1); __m128 a1 = _mm_add_ps(m2, m3); __m128 a2 = _mm_add_ps(a0, a1); out[1] = a2; } { __m128 e0 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(0, 0, 0, 0)); __m128 e1 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(1, 1, 1, 1)); __m128 e2 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(2, 2, 2, 2)); __m128 e3 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(3, 3, 3, 3)); __m128 m0 = _mm_mul_ps(in1[0], e0); __m128 m1 = _mm_mul_ps(in1[1], e1); __m128 m2 = _mm_mul_ps(in1[2], e2); __m128 m3 = _mm_mul_ps(in1[3], e3); __m128 a0 = _mm_add_ps(m0, m1); __m128 a1 = _mm_add_ps(m2, m3); __m128 a2 = _mm_add_ps(a0, a1); out[2] = a2; } { //(__m128&)_mm_shuffle_epi32(__m128i&)in2[0], _MM_SHUFFLE(3, 3, 3, 3)) __m128 e0 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(0, 0, 0, 0)); __m128 e1 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(1, 1, 1, 1)); __m128 e2 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(2, 2, 2, 2)); __m128 e3 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(3, 3, 3, 3)); __m128 m0 = _mm_mul_ps(in1[0], e0); __m128 m1 = _mm_mul_ps(in1[1], e1); __m128 m2 = _mm_mul_ps(in1[2], e2); __m128 m3 = _mm_mul_ps(in1[3], e3); __m128 a0 = _mm_add_ps(m0, m1); __m128 a1 = _mm_add_ps(m2, m3); __m128 a2 = _mm_add_ps(a0, a1); out[3] = a2; } } GLM_FUNC_QUALIFIER void glm_mat4_transpose(glm_vec4 const in[4], glm_vec4 out[4]) { __m128 tmp0 = _mm_shuffle_ps(in[0], in[1], 0x44); __m128 tmp2 = _mm_shuffle_ps(in[0], in[1], 0xEE); __m128 tmp1 = _mm_shuffle_ps(in[2], in[3], 0x44); __m128 tmp3 = _mm_shuffle_ps(in[2], in[3], 0xEE); out[0] = _mm_shuffle_ps(tmp0, tmp1, 0x88); out[1] = _mm_shuffle_ps(tmp0, tmp1, 0xDD); out[2] = _mm_shuffle_ps(tmp2, tmp3, 0x88); out[3] = _mm_shuffle_ps(tmp2, tmp3, 0xDD); } GLM_FUNC_QUALIFIER glm_vec4 glm_mat4_determinant_highp(glm_vec4 const in[4]) { __m128 Fac0; { // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; // valType SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; // valType SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); Fac0 = _mm_sub_ps(Mul00, Mul01); } __m128 Fac1; { // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; // valType SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; // valType SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); Fac1 = _mm_sub_ps(Mul00, Mul01); } __m128 Fac2; { // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; // valType SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; // valType SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); Fac2 = _mm_sub_ps(Mul00, Mul01); } __m128 Fac3; { // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; // valType SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; // valType SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); Fac3 = _mm_sub_ps(Mul00, Mul01); } __m128 Fac4; { // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; // valType SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; // valType SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); Fac4 = _mm_sub_ps(Mul00, Mul01); } __m128 Fac5; { // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; // valType SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; // valType SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); Fac5 = _mm_sub_ps(Mul00, Mul01); } __m128 SignA = _mm_set_ps( 1.0f,-1.0f, 1.0f,-1.0f); __m128 SignB = _mm_set_ps(-1.0f, 1.0f,-1.0f, 1.0f); // m[1][0] // m[0][0] // m[0][0] // m[0][0] __m128 Temp0 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(0, 0, 0, 0)); __m128 Vec0 = _mm_shuffle_ps(Temp0, Temp0, _MM_SHUFFLE(2, 2, 2, 0)); // m[1][1] // m[0][1] // m[0][1] // m[0][1] __m128 Temp1 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(1, 1, 1, 1)); __m128 Vec1 = _mm_shuffle_ps(Temp1, Temp1, _MM_SHUFFLE(2, 2, 2, 0)); // m[1][2] // m[0][2] // m[0][2] // m[0][2] __m128 Temp2 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(2, 2, 2, 2)); __m128 Vec2 = _mm_shuffle_ps(Temp2, Temp2, _MM_SHUFFLE(2, 2, 2, 0)); // m[1][3] // m[0][3] // m[0][3] // m[0][3] __m128 Temp3 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(3, 3, 3, 3)); __m128 Vec3 = _mm_shuffle_ps(Temp3, Temp3, _MM_SHUFFLE(2, 2, 2, 0)); // col0 // + (Vec1[0] * Fac0[0] - Vec2[0] * Fac1[0] + Vec3[0] * Fac2[0]), // - (Vec1[1] * Fac0[1] - Vec2[1] * Fac1[1] + Vec3[1] * Fac2[1]), // + (Vec1[2] * Fac0[2] - Vec2[2] * Fac1[2] + Vec3[2] * Fac2[2]), // - (Vec1[3] * Fac0[3] - Vec2[3] * Fac1[3] + Vec3[3] * Fac2[3]), __m128 Mul00 = _mm_mul_ps(Vec1, Fac0); __m128 Mul01 = _mm_mul_ps(Vec2, Fac1); __m128 Mul02 = _mm_mul_ps(Vec3, Fac2); __m128 Sub00 = _mm_sub_ps(Mul00, Mul01); __m128 Add00 = _mm_add_ps(Sub00, Mul02); __m128 Inv0 = _mm_mul_ps(SignB, Add00); // col1 // - (Vec0[0] * Fac0[0] - Vec2[0] * Fac3[0] + Vec3[0] * Fac4[0]), // + (Vec0[0] * Fac0[1] - Vec2[1] * Fac3[1] + Vec3[1] * Fac4[1]), // - (Vec0[0] * Fac0[2] - Vec2[2] * Fac3[2] + Vec3[2] * Fac4[2]), // + (Vec0[0] * Fac0[3] - Vec2[3] * Fac3[3] + Vec3[3] * Fac4[3]), __m128 Mul03 = _mm_mul_ps(Vec0, Fac0); __m128 Mul04 = _mm_mul_ps(Vec2, Fac3); __m128 Mul05 = _mm_mul_ps(Vec3, Fac4); __m128 Sub01 = _mm_sub_ps(Mul03, Mul04); __m128 Add01 = _mm_add_ps(Sub01, Mul05); __m128 Inv1 = _mm_mul_ps(SignA, Add01); // col2 // + (Vec0[0] * Fac1[0] - Vec1[0] * Fac3[0] + Vec3[0] * Fac5[0]), // - (Vec0[0] * Fac1[1] - Vec1[1] * Fac3[1] + Vec3[1] * Fac5[1]), // + (Vec0[0] * Fac1[2] - Vec1[2] * Fac3[2] + Vec3[2] * Fac5[2]), // - (Vec0[0] * Fac1[3] - Vec1[3] * Fac3[3] + Vec3[3] * Fac5[3]), __m128 Mul06 = _mm_mul_ps(Vec0, Fac1); __m128 Mul07 = _mm_mul_ps(Vec1, Fac3); __m128 Mul08 = _mm_mul_ps(Vec3, Fac5); __m128 Sub02 = _mm_sub_ps(Mul06, Mul07); __m128 Add02 = _mm_add_ps(Sub02, Mul08); __m128 Inv2 = _mm_mul_ps(SignB, Add02); // col3 // - (Vec1[0] * Fac2[0] - Vec1[0] * Fac4[0] + Vec2[0] * Fac5[0]), // + (Vec1[0] * Fac2[1] - Vec1[1] * Fac4[1] + Vec2[1] * Fac5[1]), // - (Vec1[0] * Fac2[2] - Vec1[2] * Fac4[2] + Vec2[2] * Fac5[2]), // + (Vec1[0] * Fac2[3] - Vec1[3] * Fac4[3] + Vec2[3] * Fac5[3])); __m128 Mul09 = _mm_mul_ps(Vec0, Fac2); __m128 Mul10 = _mm_mul_ps(Vec1, Fac4); __m128 Mul11 = _mm_mul_ps(Vec2, Fac5); __m128 Sub03 = _mm_sub_ps(Mul09, Mul10); __m128 Add03 = _mm_add_ps(Sub03, Mul11); __m128 Inv3 = _mm_mul_ps(SignA, Add03); __m128 Row0 = _mm_shuffle_ps(Inv0, Inv1, _MM_SHUFFLE(0, 0, 0, 0)); __m128 Row1 = _mm_shuffle_ps(Inv2, Inv3, _MM_SHUFFLE(0, 0, 0, 0)); __m128 Row2 = _mm_shuffle_ps(Row0, Row1, _MM_SHUFFLE(2, 0, 2, 0)); // valType Determinant = m[0][0] * Inverse[0][0] // + m[0][1] * Inverse[1][0] // + m[0][2] * Inverse[2][0] // + m[0][3] * Inverse[3][0]; __m128 Det0 = glm_vec4_dot(in[0], Row2); return Det0; } GLM_FUNC_QUALIFIER glm_vec4 glm_mat4_determinant_lowp(glm_vec4 const m[4]) { // _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128( //T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; //T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; //T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; //T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; //T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; //T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; // First 2 columns __m128 Swp2A = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[2]), _MM_SHUFFLE(0, 1, 1, 2))); __m128 Swp3A = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[3]), _MM_SHUFFLE(3, 2, 3, 3))); __m128 MulA = _mm_mul_ps(Swp2A, Swp3A); // Second 2 columns __m128 Swp2B = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[2]), _MM_SHUFFLE(3, 2, 3, 3))); __m128 Swp3B = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[3]), _MM_SHUFFLE(0, 1, 1, 2))); __m128 MulB = _mm_mul_ps(Swp2B, Swp3B); // Columns subtraction __m128 SubE = _mm_sub_ps(MulA, MulB); // Last 2 rows __m128 Swp2C = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[2]), _MM_SHUFFLE(0, 0, 1, 2))); __m128 Swp3C = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[3]), _MM_SHUFFLE(1, 2, 0, 0))); __m128 MulC = _mm_mul_ps(Swp2C, Swp3C); __m128 SubF = _mm_sub_ps(_mm_movehl_ps(MulC, MulC), MulC); //vec<4, T, Q> DetCof( // + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02), // - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04), // + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05), // - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05)); __m128 SubFacA = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(SubE), _MM_SHUFFLE(2, 1, 0, 0))); __m128 SwpFacA = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[1]), _MM_SHUFFLE(0, 0, 0, 1))); __m128 MulFacA = _mm_mul_ps(SwpFacA, SubFacA); __m128 SubTmpB = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(0, 0, 3, 1)); __m128 SubFacB = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(SubTmpB), _MM_SHUFFLE(3, 1, 1, 0)));//SubF[0], SubE[3], SubE[3], SubE[1]; __m128 SwpFacB = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[1]), _MM_SHUFFLE(1, 1, 2, 2))); __m128 MulFacB = _mm_mul_ps(SwpFacB, SubFacB); __m128 SubRes = _mm_sub_ps(MulFacA, MulFacB); __m128 SubTmpC = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(1, 0, 2, 2)); __m128 SubFacC = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(SubTmpC), _MM_SHUFFLE(3, 3, 2, 0))); __m128 SwpFacC = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[1]), _MM_SHUFFLE(2, 3, 3, 3))); __m128 MulFacC = _mm_mul_ps(SwpFacC, SubFacC); __m128 AddRes = _mm_add_ps(SubRes, MulFacC); __m128 DetCof = _mm_mul_ps(AddRes, _mm_setr_ps( 1.0f,-1.0f, 1.0f,-1.0f)); //return m[0][0] * DetCof[0] // + m[0][1] * DetCof[1] // + m[0][2] * DetCof[2] // + m[0][3] * DetCof[3]; return glm_vec4_dot(m[0], DetCof); } GLM_FUNC_QUALIFIER glm_vec4 glm_mat4_determinant(glm_vec4 const m[4]) { // _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(add) //T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; //T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; //T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; //T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; //T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; //T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; // First 2 columns __m128 Swp2A = _mm_shuffle_ps(m[2], m[2], _MM_SHUFFLE(0, 1, 1, 2)); __m128 Swp3A = _mm_shuffle_ps(m[3], m[3], _MM_SHUFFLE(3, 2, 3, 3)); __m128 MulA = _mm_mul_ps(Swp2A, Swp3A); // Second 2 columns __m128 Swp2B = _mm_shuffle_ps(m[2], m[2], _MM_SHUFFLE(3, 2, 3, 3)); __m128 Swp3B = _mm_shuffle_ps(m[3], m[3], _MM_SHUFFLE(0, 1, 1, 2)); __m128 MulB = _mm_mul_ps(Swp2B, Swp3B); // Columns subtraction __m128 SubE = _mm_sub_ps(MulA, MulB); // Last 2 rows __m128 Swp2C = _mm_shuffle_ps(m[2], m[2], _MM_SHUFFLE(0, 0, 1, 2)); __m128 Swp3C = _mm_shuffle_ps(m[3], m[3], _MM_SHUFFLE(1, 2, 0, 0)); __m128 MulC = _mm_mul_ps(Swp2C, Swp3C); __m128 SubF = _mm_sub_ps(_mm_movehl_ps(MulC, MulC), MulC); //vec<4, T, Q> DetCof( // + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02), // - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04), // + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05), // - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05)); __m128 SubFacA = _mm_shuffle_ps(SubE, SubE, _MM_SHUFFLE(2, 1, 0, 0)); __m128 SwpFacA = _mm_shuffle_ps(m[1], m[1], _MM_SHUFFLE(0, 0, 0, 1)); __m128 MulFacA = _mm_mul_ps(SwpFacA, SubFacA); __m128 SubTmpB = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(0, 0, 3, 1)); __m128 SubFacB = _mm_shuffle_ps(SubTmpB, SubTmpB, _MM_SHUFFLE(3, 1, 1, 0));//SubF[0], SubE[3], SubE[3], SubE[1]; __m128 SwpFacB = _mm_shuffle_ps(m[1], m[1], _MM_SHUFFLE(1, 1, 2, 2)); __m128 MulFacB = _mm_mul_ps(SwpFacB, SubFacB); __m128 SubRes = _mm_sub_ps(MulFacA, MulFacB); __m128 SubTmpC = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(1, 0, 2, 2)); __m128 SubFacC = _mm_shuffle_ps(SubTmpC, SubTmpC, _MM_SHUFFLE(3, 3, 2, 0)); __m128 SwpFacC = _mm_shuffle_ps(m[1], m[1], _MM_SHUFFLE(2, 3, 3, 3)); __m128 MulFacC = _mm_mul_ps(SwpFacC, SubFacC); __m128 AddRes = _mm_add_ps(SubRes, MulFacC); __m128 DetCof = _mm_mul_ps(AddRes, _mm_setr_ps( 1.0f,-1.0f, 1.0f,-1.0f)); //return m[0][0] * DetCof[0] // + m[0][1] * DetCof[1] // + m[0][2] * DetCof[2] // + m[0][3] * DetCof[3]; return glm_vec4_dot(m[0], DetCof); } GLM_FUNC_QUALIFIER void glm_mat4_inverse(glm_vec4 const in[4], glm_vec4 out[4]) { __m128 Fac0; { // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; // valType SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; // valType SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); Fac0 = _mm_sub_ps(Mul00, Mul01); } __m128 Fac1; { // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; // valType SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; // valType SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); Fac1 = _mm_sub_ps(Mul00, Mul01); } __m128 Fac2; { // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; // valType SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; // valType SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); Fac2 = _mm_sub_ps(Mul00, Mul01); } __m128 Fac3; { // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; // valType SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; // valType SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); Fac3 = _mm_sub_ps(Mul00, Mul01); } __m128 Fac4; { // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; // valType SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; // valType SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); Fac4 = _mm_sub_ps(Mul00, Mul01); } __m128 Fac5; { // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; // valType SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; // valType SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); Fac5 = _mm_sub_ps(Mul00, Mul01); } __m128 SignA = _mm_set_ps( 1.0f,-1.0f, 1.0f,-1.0f); __m128 SignB = _mm_set_ps(-1.0f, 1.0f,-1.0f, 1.0f); // m[1][0] // m[0][0] // m[0][0] // m[0][0] __m128 Temp0 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(0, 0, 0, 0)); __m128 Vec0 = _mm_shuffle_ps(Temp0, Temp0, _MM_SHUFFLE(2, 2, 2, 0)); // m[1][1] // m[0][1] // m[0][1] // m[0][1] __m128 Temp1 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(1, 1, 1, 1)); __m128 Vec1 = _mm_shuffle_ps(Temp1, Temp1, _MM_SHUFFLE(2, 2, 2, 0)); // m[1][2] // m[0][2] // m[0][2] // m[0][2] __m128 Temp2 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(2, 2, 2, 2)); __m128 Vec2 = _mm_shuffle_ps(Temp2, Temp2, _MM_SHUFFLE(2, 2, 2, 0)); // m[1][3] // m[0][3] // m[0][3] // m[0][3] __m128 Temp3 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(3, 3, 3, 3)); __m128 Vec3 = _mm_shuffle_ps(Temp3, Temp3, _MM_SHUFFLE(2, 2, 2, 0)); // col0 // + (Vec1[0] * Fac0[0] - Vec2[0] * Fac1[0] + Vec3[0] * Fac2[0]), // - (Vec1[1] * Fac0[1] - Vec2[1] * Fac1[1] + Vec3[1] * Fac2[1]), // + (Vec1[2] * Fac0[2] - Vec2[2] * Fac1[2] + Vec3[2] * Fac2[2]), // - (Vec1[3] * Fac0[3] - Vec2[3] * Fac1[3] + Vec3[3] * Fac2[3]), __m128 Mul00 = _mm_mul_ps(Vec1, Fac0); __m128 Mul01 = _mm_mul_ps(Vec2, Fac1); __m128 Mul02 = _mm_mul_ps(Vec3, Fac2); __m128 Sub00 = _mm_sub_ps(Mul00, Mul01); __m128 Add00 = _mm_add_ps(Sub00, Mul02); __m128 Inv0 = _mm_mul_ps(SignB, Add00); // col1 // - (Vec0[0] * Fac0[0] - Vec2[0] * Fac3[0] + Vec3[0] * Fac4[0]), // + (Vec0[0] * Fac0[1] - Vec2[1] * Fac3[1] + Vec3[1] * Fac4[1]), // - (Vec0[0] * Fac0[2] - Vec2[2] * Fac3[2] + Vec3[2] * Fac4[2]), // + (Vec0[0] * Fac0[3] - Vec2[3] * Fac3[3] + Vec3[3] * Fac4[3]), __m128 Mul03 = _mm_mul_ps(Vec0, Fac0); __m128 Mul04 = _mm_mul_ps(Vec2, Fac3); __m128 Mul05 = _mm_mul_ps(Vec3, Fac4); __m128 Sub01 = _mm_sub_ps(Mul03, Mul04); __m128 Add01 = _mm_add_ps(Sub01, Mul05); __m128 Inv1 = _mm_mul_ps(SignA, Add01); // col2 // + (Vec0[0] * Fac1[0] - Vec1[0] * Fac3[0] + Vec3[0] * Fac5[0]), // - (Vec0[0] * Fac1[1] - Vec1[1] * Fac3[1] + Vec3[1] * Fac5[1]), // + (Vec0[0] * Fac1[2] - Vec1[2] * Fac3[2] + Vec3[2] * Fac5[2]), // - (Vec0[0] * Fac1[3] - Vec1[3] * Fac3[3] + Vec3[3] * Fac5[3]), __m128 Mul06 = _mm_mul_ps(Vec0, Fac1); __m128 Mul07 = _mm_mul_ps(Vec1, Fac3); __m128 Mul08 = _mm_mul_ps(Vec3, Fac5); __m128 Sub02 = _mm_sub_ps(Mul06, Mul07); __m128 Add02 = _mm_add_ps(Sub02, Mul08); __m128 Inv2 = _mm_mul_ps(SignB, Add02); // col3 // - (Vec1[0] * Fac2[0] - Vec1[0] * Fac4[0] + Vec2[0] * Fac5[0]), // + (Vec1[0] * Fac2[1] - Vec1[1] * Fac4[1] + Vec2[1] * Fac5[1]), // - (Vec1[0] * Fac2[2] - Vec1[2] * Fac4[2] + Vec2[2] * Fac5[2]), // + (Vec1[0] * Fac2[3] - Vec1[3] * Fac4[3] + Vec2[3] * Fac5[3])); __m128 Mul09 = _mm_mul_ps(Vec0, Fac2); __m128 Mul10 = _mm_mul_ps(Vec1, Fac4); __m128 Mul11 = _mm_mul_ps(Vec2, Fac5); __m128 Sub03 = _mm_sub_ps(Mul09, Mul10); __m128 Add03 = _mm_add_ps(Sub03, Mul11); __m128 Inv3 = _mm_mul_ps(SignA, Add03); __m128 Row0 = _mm_shuffle_ps(Inv0, Inv1, _MM_SHUFFLE(0, 0, 0, 0)); __m128 Row1 = _mm_shuffle_ps(Inv2, Inv3, _MM_SHUFFLE(0, 0, 0, 0)); __m128 Row2 = _mm_shuffle_ps(Row0, Row1, _MM_SHUFFLE(2, 0, 2, 0)); // valType Determinant = m[0][0] * Inverse[0][0] // + m[0][1] * Inverse[1][0] // + m[0][2] * Inverse[2][0] // + m[0][3] * Inverse[3][0]; __m128 Det0 = glm_vec4_dot(in[0], Row2); __m128 Rcp0 = _mm_div_ps(_mm_set1_ps(1.0f), Det0); //__m128 Rcp0 = _mm_rcp_ps(Det0); // Inverse /= Determinant; out[0] = _mm_mul_ps(Inv0, Rcp0); out[1] = _mm_mul_ps(Inv1, Rcp0); out[2] = _mm_mul_ps(Inv2, Rcp0); out[3] = _mm_mul_ps(Inv3, Rcp0); } GLM_FUNC_QUALIFIER void glm_mat4_inverse_lowp(glm_vec4 const in[4], glm_vec4 out[4]) { __m128 Fac0; { // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; // valType SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; // valType SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); Fac0 = _mm_sub_ps(Mul00, Mul01); } __m128 Fac1; { // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; // valType SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; // valType SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); Fac1 = _mm_sub_ps(Mul00, Mul01); } __m128 Fac2; { // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; // valType SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; // valType SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); Fac2 = _mm_sub_ps(Mul00, Mul01); } __m128 Fac3; { // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; // valType SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; // valType SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); Fac3 = _mm_sub_ps(Mul00, Mul01); } __m128 Fac4; { // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; // valType SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; // valType SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); Fac4 = _mm_sub_ps(Mul00, Mul01); } __m128 Fac5; { // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; // valType SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; // valType SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); Fac5 = _mm_sub_ps(Mul00, Mul01); } __m128 SignA = _mm_set_ps( 1.0f,-1.0f, 1.0f,-1.0f); __m128 SignB = _mm_set_ps(-1.0f, 1.0f,-1.0f, 1.0f); // m[1][0] // m[0][0] // m[0][0] // m[0][0] __m128 Temp0 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(0, 0, 0, 0)); __m128 Vec0 = _mm_shuffle_ps(Temp0, Temp0, _MM_SHUFFLE(2, 2, 2, 0)); // m[1][1] // m[0][1] // m[0][1] // m[0][1] __m128 Temp1 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(1, 1, 1, 1)); __m128 Vec1 = _mm_shuffle_ps(Temp1, Temp1, _MM_SHUFFLE(2, 2, 2, 0)); // m[1][2] // m[0][2] // m[0][2] // m[0][2] __m128 Temp2 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(2, 2, 2, 2)); __m128 Vec2 = _mm_shuffle_ps(Temp2, Temp2, _MM_SHUFFLE(2, 2, 2, 0)); // m[1][3] // m[0][3] // m[0][3] // m[0][3] __m128 Temp3 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(3, 3, 3, 3)); __m128 Vec3 = _mm_shuffle_ps(Temp3, Temp3, _MM_SHUFFLE(2, 2, 2, 0)); // col0 // + (Vec1[0] * Fac0[0] - Vec2[0] * Fac1[0] + Vec3[0] * Fac2[0]), // - (Vec1[1] * Fac0[1] - Vec2[1] * Fac1[1] + Vec3[1] * Fac2[1]), // + (Vec1[2] * Fac0[2] - Vec2[2] * Fac1[2] + Vec3[2] * Fac2[2]), // - (Vec1[3] * Fac0[3] - Vec2[3] * Fac1[3] + Vec3[3] * Fac2[3]), __m128 Mul00 = _mm_mul_ps(Vec1, Fac0); __m128 Mul01 = _mm_mul_ps(Vec2, Fac1); __m128 Mul02 = _mm_mul_ps(Vec3, Fac2); __m128 Sub00 = _mm_sub_ps(Mul00, Mul01); __m128 Add00 = _mm_add_ps(Sub00, Mul02); __m128 Inv0 = _mm_mul_ps(SignB, Add00); // col1 // - (Vec0[0] * Fac0[0] - Vec2[0] * Fac3[0] + Vec3[0] * Fac4[0]), // + (Vec0[0] * Fac0[1] - Vec2[1] * Fac3[1] + Vec3[1] * Fac4[1]), // - (Vec0[0] * Fac0[2] - Vec2[2] * Fac3[2] + Vec3[2] * Fac4[2]), // + (Vec0[0] * Fac0[3] - Vec2[3] * Fac3[3] + Vec3[3] * Fac4[3]), __m128 Mul03 = _mm_mul_ps(Vec0, Fac0); __m128 Mul04 = _mm_mul_ps(Vec2, Fac3); __m128 Mul05 = _mm_mul_ps(Vec3, Fac4); __m128 Sub01 = _mm_sub_ps(Mul03, Mul04); __m128 Add01 = _mm_add_ps(Sub01, Mul05); __m128 Inv1 = _mm_mul_ps(SignA, Add01); // col2 // + (Vec0[0] * Fac1[0] - Vec1[0] * Fac3[0] + Vec3[0] * Fac5[0]), // - (Vec0[0] * Fac1[1] - Vec1[1] * Fac3[1] + Vec3[1] * Fac5[1]), // + (Vec0[0] * Fac1[2] - Vec1[2] * Fac3[2] + Vec3[2] * Fac5[2]), // - (Vec0[0] * Fac1[3] - Vec1[3] * Fac3[3] + Vec3[3] * Fac5[3]), __m128 Mul06 = _mm_mul_ps(Vec0, Fac1); __m128 Mul07 = _mm_mul_ps(Vec1, Fac3); __m128 Mul08 = _mm_mul_ps(Vec3, Fac5); __m128 Sub02 = _mm_sub_ps(Mul06, Mul07); __m128 Add02 = _mm_add_ps(Sub02, Mul08); __m128 Inv2 = _mm_mul_ps(SignB, Add02); // col3 // - (Vec1[0] * Fac2[0] - Vec1[0] * Fac4[0] + Vec2[0] * Fac5[0]), // + (Vec1[0] * Fac2[1] - Vec1[1] * Fac4[1] + Vec2[1] * Fac5[1]), // - (Vec1[0] * Fac2[2] - Vec1[2] * Fac4[2] + Vec2[2] * Fac5[2]), // + (Vec1[0] * Fac2[3] - Vec1[3] * Fac4[3] + Vec2[3] * Fac5[3])); __m128 Mul09 = _mm_mul_ps(Vec0, Fac2); __m128 Mul10 = _mm_mul_ps(Vec1, Fac4); __m128 Mul11 = _mm_mul_ps(Vec2, Fac5); __m128 Sub03 = _mm_sub_ps(Mul09, Mul10); __m128 Add03 = _mm_add_ps(Sub03, Mul11); __m128 Inv3 = _mm_mul_ps(SignA, Add03); __m128 Row0 = _mm_shuffle_ps(Inv0, Inv1, _MM_SHUFFLE(0, 0, 0, 0)); __m128 Row1 = _mm_shuffle_ps(Inv2, Inv3, _MM_SHUFFLE(0, 0, 0, 0)); __m128 Row2 = _mm_shuffle_ps(Row0, Row1, _MM_SHUFFLE(2, 0, 2, 0)); // valType Determinant = m[0][0] * Inverse[0][0] // + m[0][1] * Inverse[1][0] // + m[0][2] * Inverse[2][0] // + m[0][3] * Inverse[3][0]; __m128 Det0 = glm_vec4_dot(in[0], Row2); __m128 Rcp0 = _mm_rcp_ps(Det0); //__m128 Rcp0 = _mm_div_ps(one, Det0); // Inverse /= Determinant; out[0] = _mm_mul_ps(Inv0, Rcp0); out[1] = _mm_mul_ps(Inv1, Rcp0); out[2] = _mm_mul_ps(Inv2, Rcp0); out[3] = _mm_mul_ps(Inv3, Rcp0); } /* GLM_FUNC_QUALIFIER void glm_mat4_rotate(__m128 const in[4], float Angle, float const v[3], __m128 out[4]) { float a = glm::radians(Angle); float c = cos(a); float s = sin(a); glm::vec4 AxisA(v[0], v[1], v[2], float(0)); __m128 AxisB = _mm_set_ps(AxisA.w, AxisA.z, AxisA.y, AxisA.x); __m128 AxisC = detail::sse_nrm_ps(AxisB); __m128 Cos0 = _mm_set_ss(c); __m128 CosA = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(0, 0, 0, 0)); __m128 Sin0 = _mm_set_ss(s); __m128 SinA = _mm_shuffle_ps(Sin0, Sin0, _MM_SHUFFLE(0, 0, 0, 0)); // vec<3, T, Q> temp = (valType(1) - c) * axis; __m128 Temp0 = _mm_sub_ps(one, CosA); __m128 Temp1 = _mm_mul_ps(Temp0, AxisC); //Rotate[0][0] = c + temp[0] * axis[0]; //Rotate[0][1] = 0 + temp[0] * axis[1] + s * axis[2]; //Rotate[0][2] = 0 + temp[0] * axis[2] - s * axis[1]; __m128 Axis0 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(0, 0, 0, 0)); __m128 TmpA0 = _mm_mul_ps(Axis0, AxisC); __m128 CosA0 = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(1, 1, 1, 0)); __m128 TmpA1 = _mm_add_ps(CosA0, TmpA0); __m128 SinA0 = SinA;//_mm_set_ps(0.0f, s, -s, 0.0f); __m128 TmpA2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(3, 1, 2, 3)); __m128 TmpA3 = _mm_mul_ps(SinA0, TmpA2); __m128 TmpA4 = _mm_add_ps(TmpA1, TmpA3); //Rotate[1][0] = 0 + temp[1] * axis[0] - s * axis[2]; //Rotate[1][1] = c + temp[1] * axis[1]; //Rotate[1][2] = 0 + temp[1] * axis[2] + s * axis[0]; __m128 Axis1 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(1, 1, 1, 1)); __m128 TmpB0 = _mm_mul_ps(Axis1, AxisC); __m128 CosA1 = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(1, 1, 0, 1)); __m128 TmpB1 = _mm_add_ps(CosA1, TmpB0); __m128 SinB0 = SinA;//_mm_set_ps(-s, 0.0f, s, 0.0f); __m128 TmpB2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(3, 0, 3, 2)); __m128 TmpB3 = _mm_mul_ps(SinA0, TmpB2); __m128 TmpB4 = _mm_add_ps(TmpB1, TmpB3); //Rotate[2][0] = 0 + temp[2] * axis[0] + s * axis[1]; //Rotate[2][1] = 0 + temp[2] * axis[1] - s * axis[0]; //Rotate[2][2] = c + temp[2] * axis[2]; __m128 Axis2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(2, 2, 2, 2)); __m128 TmpC0 = _mm_mul_ps(Axis2, AxisC); __m128 CosA2 = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(1, 0, 1, 1)); __m128 TmpC1 = _mm_add_ps(CosA2, TmpC0); __m128 SinC0 = SinA;//_mm_set_ps(s, -s, 0.0f, 0.0f); __m128 TmpC2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(3, 3, 0, 1)); __m128 TmpC3 = _mm_mul_ps(SinA0, TmpC2); __m128 TmpC4 = _mm_add_ps(TmpC1, TmpC3); __m128 Result[4]; Result[0] = TmpA4; Result[1] = TmpB4; Result[2] = TmpC4; Result[3] = _mm_set_ps(1, 0, 0, 0); //mat<4, 4, valType> Result; //Result[0] = m[0] * Rotate[0][0] + m[1] * Rotate[0][1] + m[2] * Rotate[0][2]; //Result[1] = m[0] * Rotate[1][0] + m[1] * Rotate[1][1] + m[2] * Rotate[1][2]; //Result[2] = m[0] * Rotate[2][0] + m[1] * Rotate[2][1] + m[2] * Rotate[2][2]; //Result[3] = m[3]; //return Result; sse_mul_ps(in, Result, out); } */ GLM_FUNC_QUALIFIER void glm_mat4_outerProduct(__m128 const& c, __m128 const& r, __m128 out[4]) { out[0] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(0, 0, 0, 0))); out[1] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(1, 1, 1, 1))); out[2] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(2, 2, 2, 2))); out[3] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(3, 3, 3, 3))); } #endif//GLM_ARCH & GLM_ARCH_SSE2_BIT ================================================ FILE: libraries/glm/simd/neon.h ================================================ /// @ref simd_neon /// @file glm/simd/neon.h #pragma once #if GLM_ARCH & GLM_ARCH_NEON_BIT #include namespace glm { namespace neon { static float32x4_t dupq_lane(float32x4_t vsrc, int lane) { switch(lane) { #if GLM_ARCH & GLM_ARCH_ARMV8_BIT case 0: return vdupq_laneq_f32(vsrc, 0); case 1: return vdupq_laneq_f32(vsrc, 1); case 2: return vdupq_laneq_f32(vsrc, 2); case 3: return vdupq_laneq_f32(vsrc, 3); #else case 0: return vdupq_n_f32(vgetq_lane_f32(vsrc, 0)); case 1: return vdupq_n_f32(vgetq_lane_f32(vsrc, 1)); case 2: return vdupq_n_f32(vgetq_lane_f32(vsrc, 2)); case 3: return vdupq_n_f32(vgetq_lane_f32(vsrc, 3)); #endif } assert(!"Unreachable code executed!"); return vdupq_n_f32(0.0f); } static float32x2_t dup_lane(float32x4_t vsrc, int lane) { switch(lane) { #if GLM_ARCH & GLM_ARCH_ARMV8_BIT case 0: return vdup_laneq_f32(vsrc, 0); case 1: return vdup_laneq_f32(vsrc, 1); case 2: return vdup_laneq_f32(vsrc, 2); case 3: return vdup_laneq_f32(vsrc, 3); #else case 0: return vdup_n_f32(vgetq_lane_f32(vsrc, 0)); case 1: return vdup_n_f32(vgetq_lane_f32(vsrc, 1)); case 2: return vdup_n_f32(vgetq_lane_f32(vsrc, 2)); case 3: return vdup_n_f32(vgetq_lane_f32(vsrc, 3)); #endif } assert(!"Unreachable code executed!"); return vdup_n_f32(0.0f); } static float32x4_t copy_lane(float32x4_t vdst, int dlane, float32x4_t vsrc, int slane) { #if GLM_ARCH & GLM_ARCH_ARMV8_BIT switch(dlane) { case 0: switch(slane) { case 0: return vcopyq_laneq_f32(vdst, 0, vsrc, 0); case 1: return vcopyq_laneq_f32(vdst, 0, vsrc, 1); case 2: return vcopyq_laneq_f32(vdst, 0, vsrc, 2); case 3: return vcopyq_laneq_f32(vdst, 0, vsrc, 3); } assert(!"Unreachable code executed!"); case 1: switch(slane) { case 0: return vcopyq_laneq_f32(vdst, 1, vsrc, 0); case 1: return vcopyq_laneq_f32(vdst, 1, vsrc, 1); case 2: return vcopyq_laneq_f32(vdst, 1, vsrc, 2); case 3: return vcopyq_laneq_f32(vdst, 1, vsrc, 3); } assert(!"Unreachable code executed!"); case 2: switch(slane) { case 0: return vcopyq_laneq_f32(vdst, 2, vsrc, 0); case 1: return vcopyq_laneq_f32(vdst, 2, vsrc, 1); case 2: return vcopyq_laneq_f32(vdst, 2, vsrc, 2); case 3: return vcopyq_laneq_f32(vdst, 2, vsrc, 3); } assert(!"Unreachable code executed!"); case 3: switch(slane) { case 0: return vcopyq_laneq_f32(vdst, 3, vsrc, 0); case 1: return vcopyq_laneq_f32(vdst, 3, vsrc, 1); case 2: return vcopyq_laneq_f32(vdst, 3, vsrc, 2); case 3: return vcopyq_laneq_f32(vdst, 3, vsrc, 3); } assert(!"Unreachable code executed!"); } #else float l; switch(slane) { case 0: l = vgetq_lane_f32(vsrc, 0); break; case 1: l = vgetq_lane_f32(vsrc, 1); break; case 2: l = vgetq_lane_f32(vsrc, 2); break; case 3: l = vgetq_lane_f32(vsrc, 3); break; default: assert(!"Unreachable code executed!"); } switch(dlane) { case 0: return vsetq_lane_f32(l, vdst, 0); case 1: return vsetq_lane_f32(l, vdst, 1); case 2: return vsetq_lane_f32(l, vdst, 2); case 3: return vsetq_lane_f32(l, vdst, 3); } #endif assert(!"Unreachable code executed!"); return vdupq_n_f32(0.0f); } static float32x4_t mul_lane(float32x4_t v, float32x4_t vlane, int lane) { #if GLM_ARCH & GLM_ARCH_ARMV8_BIT switch(lane) { case 0: return vmulq_laneq_f32(v, vlane, 0); break; case 1: return vmulq_laneq_f32(v, vlane, 1); break; case 2: return vmulq_laneq_f32(v, vlane, 2); break; case 3: return vmulq_laneq_f32(v, vlane, 3); break; default: assert(!"Unreachable code executed!"); } assert(!"Unreachable code executed!"); return vdupq_n_f32(0.0f); #else return vmulq_f32(v, dupq_lane(vlane, lane)); #endif } static float32x4_t madd_lane(float32x4_t acc, float32x4_t v, float32x4_t vlane, int lane) { #if GLM_ARCH & GLM_ARCH_ARMV8_BIT #ifdef GLM_CONFIG_FORCE_FMA # define FMADD_LANE(acc, x, y, L) do { asm volatile ("fmla %0.4s, %1.4s, %2.4s" : "+w"(acc) : "w"(x), "w"(dup_lane(y, L))); } while(0) #else # define FMADD_LANE(acc, x, y, L) do { acc = vmlaq_laneq_f32(acc, x, y, L); } while(0) #endif switch(lane) { case 0: FMADD_LANE(acc, v, vlane, 0); return acc; case 1: FMADD_LANE(acc, v, vlane, 1); return acc; case 2: FMADD_LANE(acc, v, vlane, 2); return acc; case 3: FMADD_LANE(acc, v, vlane, 3); return acc; default: assert(!"Unreachable code executed!"); } assert(!"Unreachable code executed!"); return vdupq_n_f32(0.0f); # undef FMADD_LANE #else return vaddq_f32(acc, vmulq_f32(v, dupq_lane(vlane, lane))); #endif } } //namespace neon } // namespace glm #endif // GLM_ARCH & GLM_ARCH_NEON_BIT ================================================ FILE: libraries/glm/simd/packing.h ================================================ /// @ref simd /// @file glm/simd/packing.h #pragma once #if GLM_ARCH & GLM_ARCH_SSE2_BIT #endif//GLM_ARCH & GLM_ARCH_SSE2_BIT ================================================ FILE: libraries/glm/simd/platform.h ================================================ #pragma once /////////////////////////////////////////////////////////////////////////////////// // Platform #define GLM_PLATFORM_UNKNOWN 0x00000000 #define GLM_PLATFORM_WINDOWS 0x00010000 #define GLM_PLATFORM_LINUX 0x00020000 #define GLM_PLATFORM_APPLE 0x00040000 //#define GLM_PLATFORM_IOS 0x00080000 #define GLM_PLATFORM_ANDROID 0x00100000 #define GLM_PLATFORM_CHROME_NACL 0x00200000 #define GLM_PLATFORM_UNIX 0x00400000 #define GLM_PLATFORM_QNXNTO 0x00800000 #define GLM_PLATFORM_WINCE 0x01000000 #define GLM_PLATFORM_CYGWIN 0x02000000 #ifdef GLM_FORCE_PLATFORM_UNKNOWN # define GLM_PLATFORM GLM_PLATFORM_UNKNOWN #elif defined(__CYGWIN__) # define GLM_PLATFORM GLM_PLATFORM_CYGWIN #elif defined(__QNXNTO__) # define GLM_PLATFORM GLM_PLATFORM_QNXNTO #elif defined(__APPLE__) # define GLM_PLATFORM GLM_PLATFORM_APPLE #elif defined(WINCE) # define GLM_PLATFORM GLM_PLATFORM_WINCE #elif defined(_WIN32) # define GLM_PLATFORM GLM_PLATFORM_WINDOWS #elif defined(__native_client__) # define GLM_PLATFORM GLM_PLATFORM_CHROME_NACL #elif defined(__ANDROID__) # define GLM_PLATFORM GLM_PLATFORM_ANDROID #elif defined(__linux) # define GLM_PLATFORM GLM_PLATFORM_LINUX #elif defined(__unix) # define GLM_PLATFORM GLM_PLATFORM_UNIX #else # define GLM_PLATFORM GLM_PLATFORM_UNKNOWN #endif// /////////////////////////////////////////////////////////////////////////////////// // Compiler #define GLM_COMPILER_UNKNOWN 0x00000000 // Intel #define GLM_COMPILER_INTEL 0x00100000 #define GLM_COMPILER_INTEL14 0x00100040 #define GLM_COMPILER_INTEL15 0x00100050 #define GLM_COMPILER_INTEL16 0x00100060 #define GLM_COMPILER_INTEL17 0x00100070 // Visual C++ defines #define GLM_COMPILER_VC 0x01000000 #define GLM_COMPILER_VC12 0x01000001 #define GLM_COMPILER_VC14 0x01000002 #define GLM_COMPILER_VC15 0x01000003 #define GLM_COMPILER_VC15_3 0x01000004 #define GLM_COMPILER_VC15_5 0x01000005 #define GLM_COMPILER_VC15_6 0x01000006 #define GLM_COMPILER_VC15_7 0x01000007 #define GLM_COMPILER_VC15_8 0x01000008 #define GLM_COMPILER_VC15_9 0x01000009 #define GLM_COMPILER_VC16 0x0100000A // GCC defines #define GLM_COMPILER_GCC 0x02000000 #define GLM_COMPILER_GCC46 0x020000D0 #define GLM_COMPILER_GCC47 0x020000E0 #define GLM_COMPILER_GCC48 0x020000F0 #define GLM_COMPILER_GCC49 0x02000100 #define GLM_COMPILER_GCC5 0x02000200 #define GLM_COMPILER_GCC6 0x02000300 #define GLM_COMPILER_GCC7 0x02000400 #define GLM_COMPILER_GCC8 0x02000500 // CUDA #define GLM_COMPILER_CUDA 0x10000000 #define GLM_COMPILER_CUDA75 0x10000001 #define GLM_COMPILER_CUDA80 0x10000002 #define GLM_COMPILER_CUDA90 0x10000004 // SYCL #define GLM_COMPILER_SYCL 0x00300000 // Clang #define GLM_COMPILER_CLANG 0x20000000 #define GLM_COMPILER_CLANG34 0x20000050 #define GLM_COMPILER_CLANG35 0x20000060 #define GLM_COMPILER_CLANG36 0x20000070 #define GLM_COMPILER_CLANG37 0x20000080 #define GLM_COMPILER_CLANG38 0x20000090 #define GLM_COMPILER_CLANG39 0x200000A0 #define GLM_COMPILER_CLANG40 0x200000B0 #define GLM_COMPILER_CLANG41 0x200000C0 #define GLM_COMPILER_CLANG42 0x200000D0 // Build model #define GLM_MODEL_32 0x00000010 #define GLM_MODEL_64 0x00000020 // Force generic C++ compiler #ifdef GLM_FORCE_COMPILER_UNKNOWN # define GLM_COMPILER GLM_COMPILER_UNKNOWN #elif defined(__INTEL_COMPILER) # if __INTEL_COMPILER >= 1700 # define GLM_COMPILER GLM_COMPILER_INTEL17 # elif __INTEL_COMPILER >= 1600 # define GLM_COMPILER GLM_COMPILER_INTEL16 # elif __INTEL_COMPILER >= 1500 # define GLM_COMPILER GLM_COMPILER_INTEL15 # elif __INTEL_COMPILER >= 1400 # define GLM_COMPILER GLM_COMPILER_INTEL14 # elif __INTEL_COMPILER < 1400 # error "GLM requires ICC 2013 SP1 or newer" # endif // CUDA #elif defined(__CUDACC__) # if !defined(CUDA_VERSION) && !defined(GLM_FORCE_CUDA) # include // make sure version is defined since nvcc does not define it itself! # endif # if CUDA_VERSION >= 8000 # define GLM_COMPILER GLM_COMPILER_CUDA80 # elif CUDA_VERSION >= 7500 # define GLM_COMPILER GLM_COMPILER_CUDA75 # elif CUDA_VERSION >= 7000 # define GLM_COMPILER GLM_COMPILER_CUDA70 # elif CUDA_VERSION < 7000 # error "GLM requires CUDA 7.0 or higher" # endif // SYCL #elif defined(__SYCL_DEVICE_ONLY__) # define GLM_COMPILER GLM_COMPILER_SYCL // Clang #elif defined(__clang__) # if defined(__apple_build_version__) # if (__clang_major__ < 6) # error "GLM requires Clang 3.4 / Apple Clang 6.0 or higher" # elif __clang_major__ == 6 && __clang_minor__ == 0 # define GLM_COMPILER GLM_COMPILER_CLANG35 # elif __clang_major__ == 6 && __clang_minor__ >= 1 # define GLM_COMPILER GLM_COMPILER_CLANG36 # elif __clang_major__ >= 7 # define GLM_COMPILER GLM_COMPILER_CLANG37 # endif # else # if ((__clang_major__ == 3) && (__clang_minor__ < 4)) || (__clang_major__ < 3) # error "GLM requires Clang 3.4 or higher" # elif __clang_major__ == 3 && __clang_minor__ == 4 # define GLM_COMPILER GLM_COMPILER_CLANG34 # elif __clang_major__ == 3 && __clang_minor__ == 5 # define GLM_COMPILER GLM_COMPILER_CLANG35 # elif __clang_major__ == 3 && __clang_minor__ == 6 # define GLM_COMPILER GLM_COMPILER_CLANG36 # elif __clang_major__ == 3 && __clang_minor__ == 7 # define GLM_COMPILER GLM_COMPILER_CLANG37 # elif __clang_major__ == 3 && __clang_minor__ == 8 # define GLM_COMPILER GLM_COMPILER_CLANG38 # elif __clang_major__ == 3 && __clang_minor__ >= 9 # define GLM_COMPILER GLM_COMPILER_CLANG39 # elif __clang_major__ == 4 && __clang_minor__ == 0 # define GLM_COMPILER GLM_COMPILER_CLANG40 # elif __clang_major__ == 4 && __clang_minor__ == 1 # define GLM_COMPILER GLM_COMPILER_CLANG41 # elif __clang_major__ == 4 && __clang_minor__ >= 2 # define GLM_COMPILER GLM_COMPILER_CLANG42 # elif __clang_major__ >= 4 # define GLM_COMPILER GLM_COMPILER_CLANG42 # endif # endif // Visual C++ #elif defined(_MSC_VER) # if _MSC_VER >= 1920 # define GLM_COMPILER GLM_COMPILER_VC16 # elif _MSC_VER >= 1916 # define GLM_COMPILER GLM_COMPILER_VC15_9 # elif _MSC_VER >= 1915 # define GLM_COMPILER GLM_COMPILER_VC15_8 # elif _MSC_VER >= 1914 # define GLM_COMPILER GLM_COMPILER_VC15_7 # elif _MSC_VER >= 1913 # define GLM_COMPILER GLM_COMPILER_VC15_6 # elif _MSC_VER >= 1912 # define GLM_COMPILER GLM_COMPILER_VC15_5 # elif _MSC_VER >= 1911 # define GLM_COMPILER GLM_COMPILER_VC15_3 # elif _MSC_VER >= 1910 # define GLM_COMPILER GLM_COMPILER_VC15 # elif _MSC_VER >= 1900 # define GLM_COMPILER GLM_COMPILER_VC14 # elif _MSC_VER >= 1800 # define GLM_COMPILER GLM_COMPILER_VC12 # elif _MSC_VER < 1800 # error "GLM requires Visual C++ 12 - 2013 or higher" # endif//_MSC_VER // G++ #elif defined(__GNUC__) || defined(__MINGW32__) # if __GNUC__ >= 8 # define GLM_COMPILER GLM_COMPILER_GCC8 # elif __GNUC__ >= 7 # define GLM_COMPILER GLM_COMPILER_GCC7 # elif __GNUC__ >= 6 # define GLM_COMPILER GLM_COMPILER_GCC6 # elif __GNUC__ >= 5 # define GLM_COMPILER GLM_COMPILER_GCC5 # elif __GNUC__ == 4 && __GNUC_MINOR__ >= 9 # define GLM_COMPILER GLM_COMPILER_GCC49 # elif __GNUC__ == 4 && __GNUC_MINOR__ >= 8 # define GLM_COMPILER GLM_COMPILER_GCC48 # elif __GNUC__ == 4 && __GNUC_MINOR__ >= 7 # define GLM_COMPILER GLM_COMPILER_GCC47 # elif __GNUC__ == 4 && __GNUC_MINOR__ >= 6 # define GLM_COMPILER GLM_COMPILER_GCC46 # elif ((__GNUC__ == 4) && (__GNUC_MINOR__ < 6)) || (__GNUC__ < 4) # error "GLM requires GCC 4.6 or higher" # endif #else # define GLM_COMPILER GLM_COMPILER_UNKNOWN #endif #ifndef GLM_COMPILER # error "GLM_COMPILER undefined, your compiler may not be supported by GLM. Add #define GLM_COMPILER 0 to ignore this message." #endif//GLM_COMPILER /////////////////////////////////////////////////////////////////////////////////// // Instruction sets // User defines: GLM_FORCE_PURE GLM_FORCE_INTRINSICS GLM_FORCE_SSE2 GLM_FORCE_SSE3 GLM_FORCE_AVX GLM_FORCE_AVX2 GLM_FORCE_AVX2 #define GLM_ARCH_MIPS_BIT (0x10000000) #define GLM_ARCH_PPC_BIT (0x20000000) #define GLM_ARCH_ARM_BIT (0x40000000) #define GLM_ARCH_ARMV8_BIT (0x01000000) #define GLM_ARCH_X86_BIT (0x80000000) #define GLM_ARCH_SIMD_BIT (0x00001000) #define GLM_ARCH_NEON_BIT (0x00000001) #define GLM_ARCH_SSE_BIT (0x00000002) #define GLM_ARCH_SSE2_BIT (0x00000004) #define GLM_ARCH_SSE3_BIT (0x00000008) #define GLM_ARCH_SSSE3_BIT (0x00000010) #define GLM_ARCH_SSE41_BIT (0x00000020) #define GLM_ARCH_SSE42_BIT (0x00000040) #define GLM_ARCH_AVX_BIT (0x00000080) #define GLM_ARCH_AVX2_BIT (0x00000100) #define GLM_ARCH_UNKNOWN (0) #define GLM_ARCH_X86 (GLM_ARCH_X86_BIT) #define GLM_ARCH_SSE (GLM_ARCH_SSE_BIT | GLM_ARCH_SIMD_BIT | GLM_ARCH_X86) #define GLM_ARCH_SSE2 (GLM_ARCH_SSE2_BIT | GLM_ARCH_SSE) #define GLM_ARCH_SSE3 (GLM_ARCH_SSE3_BIT | GLM_ARCH_SSE2) #define GLM_ARCH_SSSE3 (GLM_ARCH_SSSE3_BIT | GLM_ARCH_SSE3) #define GLM_ARCH_SSE41 (GLM_ARCH_SSE41_BIT | GLM_ARCH_SSSE3) #define GLM_ARCH_SSE42 (GLM_ARCH_SSE42_BIT | GLM_ARCH_SSE41) #define GLM_ARCH_AVX (GLM_ARCH_AVX_BIT | GLM_ARCH_SSE42) #define GLM_ARCH_AVX2 (GLM_ARCH_AVX2_BIT | GLM_ARCH_AVX) #define GLM_ARCH_ARM (GLM_ARCH_ARM_BIT) #define GLM_ARCH_ARMV8 (GLM_ARCH_NEON_BIT | GLM_ARCH_SIMD_BIT | GLM_ARCH_ARM | GLM_ARCH_ARMV8_BIT) #define GLM_ARCH_NEON (GLM_ARCH_NEON_BIT | GLM_ARCH_SIMD_BIT | GLM_ARCH_ARM) #define GLM_ARCH_MIPS (GLM_ARCH_MIPS_BIT) #define GLM_ARCH_PPC (GLM_ARCH_PPC_BIT) #if defined(GLM_FORCE_ARCH_UNKNOWN) || defined(GLM_FORCE_PURE) # define GLM_ARCH GLM_ARCH_UNKNOWN #elif defined(GLM_FORCE_NEON) # if __ARM_ARCH >= 8 # define GLM_ARCH (GLM_ARCH_ARMV8) # else # define GLM_ARCH (GLM_ARCH_NEON) # endif # define GLM_FORCE_INTRINSICS #elif defined(GLM_FORCE_AVX2) # define GLM_ARCH (GLM_ARCH_AVX2) # define GLM_FORCE_INTRINSICS #elif defined(GLM_FORCE_AVX) # define GLM_ARCH (GLM_ARCH_AVX) # define GLM_FORCE_INTRINSICS #elif defined(GLM_FORCE_SSE42) # define GLM_ARCH (GLM_ARCH_SSE42) # define GLM_FORCE_INTRINSICS #elif defined(GLM_FORCE_SSE41) # define GLM_ARCH (GLM_ARCH_SSE41) # define GLM_FORCE_INTRINSICS #elif defined(GLM_FORCE_SSSE3) # define GLM_ARCH (GLM_ARCH_SSSE3) # define GLM_FORCE_INTRINSICS #elif defined(GLM_FORCE_SSE3) # define GLM_ARCH (GLM_ARCH_SSE3) # define GLM_FORCE_INTRINSICS #elif defined(GLM_FORCE_SSE2) # define GLM_ARCH (GLM_ARCH_SSE2) # define GLM_FORCE_INTRINSICS #elif defined(GLM_FORCE_SSE) # define GLM_ARCH (GLM_ARCH_SSE) # define GLM_FORCE_INTRINSICS #elif defined(GLM_FORCE_INTRINSICS) && !defined(GLM_FORCE_XYZW_ONLY) # if defined(__AVX2__) # define GLM_ARCH (GLM_ARCH_AVX2) # elif defined(__AVX__) # define GLM_ARCH (GLM_ARCH_AVX) # elif defined(__SSE4_2__) # define GLM_ARCH (GLM_ARCH_SSE42) # elif defined(__SSE4_1__) # define GLM_ARCH (GLM_ARCH_SSE41) # elif defined(__SSSE3__) # define GLM_ARCH (GLM_ARCH_SSSE3) # elif defined(__SSE3__) # define GLM_ARCH (GLM_ARCH_SSE3) # elif defined(__SSE2__) || defined(__x86_64__) || defined(_M_X64) || defined(_M_IX86_FP) # define GLM_ARCH (GLM_ARCH_SSE2) # elif defined(__i386__) # define GLM_ARCH (GLM_ARCH_X86) # elif defined(__ARM_ARCH) && (__ARM_ARCH >= 8) # define GLM_ARCH (GLM_ARCH_ARMV8) # elif defined(__ARM_NEON) # define GLM_ARCH (GLM_ARCH_ARM | GLM_ARCH_NEON) # elif defined(__arm__ ) || defined(_M_ARM) # define GLM_ARCH (GLM_ARCH_ARM) # elif defined(__mips__ ) # define GLM_ARCH (GLM_ARCH_MIPS) # elif defined(__powerpc__ ) || defined(_M_PPC) # define GLM_ARCH (GLM_ARCH_PPC) # else # define GLM_ARCH (GLM_ARCH_UNKNOWN) # endif #else # if defined(__x86_64__) || defined(_M_X64) || defined(_M_IX86) || defined(__i386__) # define GLM_ARCH (GLM_ARCH_X86) # elif defined(__arm__) || defined(_M_ARM) # define GLM_ARCH (GLM_ARCH_ARM) # elif defined(__powerpc__) || defined(_M_PPC) # define GLM_ARCH (GLM_ARCH_PPC) # elif defined(__mips__) # define GLM_ARCH (GLM_ARCH_MIPS) # else # define GLM_ARCH (GLM_ARCH_UNKNOWN) # endif #endif #if GLM_ARCH & GLM_ARCH_AVX2_BIT # include #elif GLM_ARCH & GLM_ARCH_AVX_BIT # include #elif GLM_ARCH & GLM_ARCH_SSE42_BIT # if GLM_COMPILER & GLM_COMPILER_CLANG # include # endif # include #elif GLM_ARCH & GLM_ARCH_SSE41_BIT # include #elif GLM_ARCH & GLM_ARCH_SSSE3_BIT # include #elif GLM_ARCH & GLM_ARCH_SSE3_BIT # include #elif GLM_ARCH & GLM_ARCH_SSE2_BIT # include #elif GLM_ARCH & GLM_ARCH_NEON_BIT # include "neon.h" #endif//GLM_ARCH #if GLM_ARCH & GLM_ARCH_SSE2_BIT typedef __m128 glm_f32vec4; typedef __m128i glm_i32vec4; typedef __m128i glm_u32vec4; typedef __m128d glm_f64vec2; typedef __m128i glm_i64vec2; typedef __m128i glm_u64vec2; typedef glm_f32vec4 glm_vec4; typedef glm_i32vec4 glm_ivec4; typedef glm_u32vec4 glm_uvec4; typedef glm_f64vec2 glm_dvec2; #endif #if GLM_ARCH & GLM_ARCH_AVX_BIT typedef __m256d glm_f64vec4; typedef glm_f64vec4 glm_dvec4; #endif #if GLM_ARCH & GLM_ARCH_AVX2_BIT typedef __m256i glm_i64vec4; typedef __m256i glm_u64vec4; #endif #if GLM_ARCH & GLM_ARCH_NEON_BIT typedef float32x4_t glm_f32vec4; typedef int32x4_t glm_i32vec4; typedef uint32x4_t glm_u32vec4; #endif ================================================ FILE: libraries/glm/simd/trigonometric.h ================================================ /// @ref simd /// @file glm/simd/trigonometric.h #pragma once #if GLM_ARCH & GLM_ARCH_SSE2_BIT #endif//GLM_ARCH & GLM_ARCH_SSE2_BIT ================================================ FILE: libraries/glm/simd/vector_relational.h ================================================ /// @ref simd /// @file glm/simd/vector_relational.h #pragma once #if GLM_ARCH & GLM_ARCH_SSE2_BIT #endif//GLM_ARCH & GLM_ARCH_SSE2_BIT ================================================ FILE: libraries/glm/trigonometric.hpp ================================================ /// @ref core /// @file glm/trigonometric.hpp /// /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions /// /// @defgroup core_func_trigonometric Angle and Trigonometry Functions /// @ingroup core /// /// Function parameters specified as angle are assumed to be in units of radians. /// In no case will any of these functions result in a divide by zero error. If /// the divisor of a ratio is 0, then results will be undefined. /// /// These all operate component-wise. The description is per component. /// /// Include to use these core features. /// /// @see ext_vector_trigonometric #pragma once #include "detail/setup.hpp" #include "detail/qualifier.hpp" namespace glm { /// @addtogroup core_func_trigonometric /// @{ /// Converts degrees to radians and returns the result. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL radians man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template GLM_FUNC_DECL GLM_CONSTEXPR vec radians(vec const& degrees); /// Converts radians to degrees and returns the result. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL degrees man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template GLM_FUNC_DECL GLM_CONSTEXPR vec degrees(vec const& radians); /// The standard trigonometric sine function. /// The values returned by this function will range from [-1, 1]. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL sin man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template GLM_FUNC_DECL vec sin(vec const& angle); /// The standard trigonometric cosine function. /// The values returned by this function will range from [-1, 1]. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL cos man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template GLM_FUNC_DECL vec cos(vec const& angle); /// The standard trigonometric tangent function. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL tan man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template GLM_FUNC_DECL vec tan(vec const& angle); /// Arc sine. Returns an angle whose sine is x. /// The range of values returned by this function is [-PI/2, PI/2]. /// Results are undefined if |x| > 1. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL asin man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template GLM_FUNC_DECL vec asin(vec const& x); /// Arc cosine. Returns an angle whose sine is x. /// The range of values returned by this function is [0, PI]. /// Results are undefined if |x| > 1. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL acos man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template GLM_FUNC_DECL vec acos(vec const& x); /// Arc tangent. Returns an angle whose tangent is y/x. /// The signs of x and y are used to determine what /// quadrant the angle is in. The range of values returned /// by this function is [-PI, PI]. Results are undefined /// if x and y are both 0. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL atan man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template GLM_FUNC_DECL vec atan(vec const& y, vec const& x); /// Arc tangent. Returns an angle whose tangent is y_over_x. /// The range of values returned by this function is [-PI/2, PI/2]. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL atan man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template GLM_FUNC_DECL vec atan(vec const& y_over_x); /// Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2 /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL sinh man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template GLM_FUNC_DECL vec sinh(vec const& angle); /// Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2 /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL cosh man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template GLM_FUNC_DECL vec cosh(vec const& angle); /// Returns the hyperbolic tangent function, sinh(angle) / cosh(angle) /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL tanh man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template GLM_FUNC_DECL vec tanh(vec const& angle); /// Arc hyperbolic sine; returns the inverse of sinh. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL asinh man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template GLM_FUNC_DECL vec asinh(vec const& x); /// Arc hyperbolic cosine; returns the non-negative inverse /// of cosh. Results are undefined if x < 1. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL acosh man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template GLM_FUNC_DECL vec acosh(vec const& x); /// Arc hyperbolic tangent; returns the inverse of tanh. /// Results are undefined if abs(x) >= 1. /// /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector /// @tparam T Floating-point scalar types /// @tparam Q Value from qualifier enum /// /// @see GLSL atanh man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template GLM_FUNC_DECL vec atanh(vec const& x); /// @} }//namespace glm #include "detail/func_trigonometric.inl" ================================================ FILE: libraries/glm/vec2.hpp ================================================ /// @ref core /// @file glm/vec2.hpp #pragma once #include "./ext/vector_bool2.hpp" #include "./ext/vector_bool2_precision.hpp" #include "./ext/vector_float2.hpp" #include "./ext/vector_float2_precision.hpp" #include "./ext/vector_double2.hpp" #include "./ext/vector_double2_precision.hpp" #include "./ext/vector_int2.hpp" #include "./ext/vector_int2_precision.hpp" #include "./ext/vector_uint2.hpp" #include "./ext/vector_uint2_precision.hpp" ================================================ FILE: libraries/glm/vec3.hpp ================================================ /// @ref core /// @file glm/vec3.hpp #pragma once #include "./ext/vector_bool3.hpp" #include "./ext/vector_bool3_precision.hpp" #include "./ext/vector_float3.hpp" #include "./ext/vector_float3_precision.hpp" #include "./ext/vector_double3.hpp" #include "./ext/vector_double3_precision.hpp" #include "./ext/vector_int3.hpp" #include "./ext/vector_int3_precision.hpp" #include "./ext/vector_uint3.hpp" #include "./ext/vector_uint3_precision.hpp" ================================================ FILE: libraries/glm/vec4.hpp ================================================ /// @ref core /// @file glm/vec4.hpp #pragma once #include "./ext/vector_bool4.hpp" #include "./ext/vector_bool4_precision.hpp" #include "./ext/vector_float4.hpp" #include "./ext/vector_float4_precision.hpp" #include "./ext/vector_double4.hpp" #include "./ext/vector_double4_precision.hpp" #include "./ext/vector_int4.hpp" #include "./ext/vector_int4_precision.hpp" #include "./ext/vector_uint4.hpp" #include "./ext/vector_uint4_precision.hpp" ================================================ FILE: libraries/glm/vector_relational.hpp ================================================ /// @ref core /// @file glm/vector_relational.hpp /// /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions /// /// @defgroup core_func_vector_relational Vector Relational Functions /// @ingroup core /// /// Relational and equality operators (<, <=, >, >=, ==, !=) are defined to /// operate on scalars and produce scalar Boolean results. For vector results, /// use the following built-in functions. /// /// In all cases, the sizes of all the input and return vectors for any particular /// call must match. /// /// Include to use these core features. /// /// @see ext_vector_relational #pragma once #include "detail/qualifier.hpp" #include "detail/setup.hpp" namespace glm { /// @addtogroup core_func_vector_relational /// @{ /// Returns the component-wise comparison result of x < y. /// /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// @tparam T A floating-point or integer scalar type. /// /// @see GLSL lessThan man page /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions template GLM_FUNC_DECL GLM_CONSTEXPR vec lessThan(vec const& x, vec const& y); /// Returns the component-wise comparison of result x <= y. /// /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// @tparam T A floating-point or integer scalar type. /// /// @see GLSL lessThanEqual man page /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions template GLM_FUNC_DECL GLM_CONSTEXPR vec lessThanEqual(vec const& x, vec const& y); /// Returns the component-wise comparison of result x > y. /// /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// @tparam T A floating-point or integer scalar type. /// /// @see GLSL greaterThan man page /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions template GLM_FUNC_DECL GLM_CONSTEXPR vec greaterThan(vec const& x, vec const& y); /// Returns the component-wise comparison of result x >= y. /// /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// @tparam T A floating-point or integer scalar type. /// /// @see GLSL greaterThanEqual man page /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions template GLM_FUNC_DECL GLM_CONSTEXPR vec greaterThanEqual(vec const& x, vec const& y); /// Returns the component-wise comparison of result x == y. /// /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// @tparam T A floating-point, integer or bool scalar type. /// /// @see GLSL equal man page /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions template GLM_FUNC_DECL GLM_CONSTEXPR vec equal(vec const& x, vec const& y); /// Returns the component-wise comparison of result x != y. /// /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// @tparam T A floating-point, integer or bool scalar type. /// /// @see GLSL notEqual man page /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions template GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y); /// Returns true if any component of x is true. /// /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// /// @see GLSL any man page /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions template GLM_FUNC_DECL GLM_CONSTEXPR bool any(vec const& v); /// Returns true if all components of x are true. /// /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// /// @see GLSL all man page /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions template GLM_FUNC_DECL GLM_CONSTEXPR bool all(vec const& v); /// Returns the component-wise logical complement of x. /// /!\ Because of language incompatibilities between C++ and GLSL, GLM defines the function not but not_ instead. /// /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. /// /// @see GLSL not man page /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions template GLM_FUNC_DECL GLM_CONSTEXPR vec not_(vec const& v); /// @} }//namespace glm #include "detail/func_vector_relational.inl" ================================================ FILE: libraries/lua/lauxlib.h ================================================ /* ** $Id: lauxlib.h $ ** Auxiliary functions for building Lua libraries ** See Copyright Notice in lua.h */ #ifndef lauxlib_h #define lauxlib_h #include #include #include "luaconf.h" #include "lua.h" /* global table */ #define LUA_GNAME "_G" typedef struct luaL_Buffer luaL_Buffer; /* extra error code for 'luaL_loadfilex' */ #define LUA_ERRFILE (LUA_ERRERR+1) /* key, in the registry, for table of loaded modules */ #define LUA_LOADED_TABLE "_LOADED" /* key, in the registry, for table of preloaded loaders */ #define LUA_PRELOAD_TABLE "_PRELOAD" typedef struct luaL_Reg { const char *name; lua_CFunction func; } luaL_Reg; #define LUAL_NUMSIZES (sizeof(lua_Integer)*16 + sizeof(lua_Number)) LUALIB_API void (luaL_checkversion_) (lua_State *L, lua_Number ver, size_t sz); #define luaL_checkversion(L) \ luaL_checkversion_(L, LUA_VERSION_NUM, LUAL_NUMSIZES) LUALIB_API int (luaL_getmetafield) (lua_State *L, int obj, const char *e); LUALIB_API int (luaL_callmeta) (lua_State *L, int obj, const char *e); LUALIB_API const char *(luaL_tolstring) (lua_State *L, int idx, size_t *len); LUALIB_API int (luaL_argerror) (lua_State *L, int arg, const char *extramsg); LUALIB_API int (luaL_typeerror) (lua_State *L, int arg, const char *tname); LUALIB_API const char *(luaL_checklstring) (lua_State *L, int arg, size_t *l); LUALIB_API const char *(luaL_optlstring) (lua_State *L, int arg, const char *def, size_t *l); LUALIB_API lua_Number (luaL_checknumber) (lua_State *L, int arg); LUALIB_API lua_Number (luaL_optnumber) (lua_State *L, int arg, lua_Number def); LUALIB_API lua_Integer (luaL_checkinteger) (lua_State *L, int arg); LUALIB_API lua_Integer (luaL_optinteger) (lua_State *L, int arg, lua_Integer def); LUALIB_API void (luaL_checkstack) (lua_State *L, int sz, const char *msg); LUALIB_API void (luaL_checktype) (lua_State *L, int arg, int t); LUALIB_API void (luaL_checkany) (lua_State *L, int arg); LUALIB_API int (luaL_newmetatable) (lua_State *L, const char *tname); LUALIB_API void (luaL_setmetatable) (lua_State *L, const char *tname); LUALIB_API void *(luaL_testudata) (lua_State *L, int ud, const char *tname); LUALIB_API void *(luaL_checkudata) (lua_State *L, int ud, const char *tname); LUALIB_API void (luaL_where) (lua_State *L, int lvl); LUALIB_API int (luaL_error) (lua_State *L, const char *fmt, ...); LUALIB_API int (luaL_checkoption) (lua_State *L, int arg, const char *def, const char *const lst[]); LUALIB_API int (luaL_fileresult) (lua_State *L, int stat, const char *fname); LUALIB_API int (luaL_execresult) (lua_State *L, int stat); /* predefined references */ #define LUA_NOREF (-2) #define LUA_REFNIL (-1) LUALIB_API int (luaL_ref) (lua_State *L, int t); LUALIB_API void (luaL_unref) (lua_State *L, int t, int ref); LUALIB_API int (luaL_loadfilex) (lua_State *L, const char *filename, const char *mode); #define luaL_loadfile(L,f) luaL_loadfilex(L,f,NULL) LUALIB_API int (luaL_loadbufferx) (lua_State *L, const char *buff, size_t sz, const char *name, const char *mode); LUALIB_API int (luaL_loadstring) (lua_State *L, const char *s); LUALIB_API lua_State *(luaL_newstate) (void); LUALIB_API lua_Integer (luaL_len) (lua_State *L, int idx); LUALIB_API void (luaL_addgsub) (luaL_Buffer *b, const char *s, const char *p, const char *r); LUALIB_API const char *(luaL_gsub) (lua_State *L, const char *s, const char *p, const char *r); LUALIB_API void (luaL_setfuncs) (lua_State *L, const luaL_Reg *l, int nup); LUALIB_API int (luaL_getsubtable) (lua_State *L, int idx, const char *fname); LUALIB_API void (luaL_traceback) (lua_State *L, lua_State *L1, const char *msg, int level); LUALIB_API void (luaL_requiref) (lua_State *L, const char *modname, lua_CFunction openf, int glb); /* ** =============================================================== ** some useful macros ** =============================================================== */ #define luaL_newlibtable(L,l) \ lua_createtable(L, 0, sizeof(l)/sizeof((l)[0]) - 1) #define luaL_newlib(L,l) \ (luaL_checkversion(L), luaL_newlibtable(L,l), luaL_setfuncs(L,l,0)) #define luaL_argcheck(L, cond,arg,extramsg) \ ((void)(luai_likely(cond) || luaL_argerror(L, (arg), (extramsg)))) #define luaL_argexpected(L,cond,arg,tname) \ ((void)(luai_likely(cond) || luaL_typeerror(L, (arg), (tname)))) #define luaL_checkstring(L,n) (luaL_checklstring(L, (n), NULL)) #define luaL_optstring(L,n,d) (luaL_optlstring(L, (n), (d), NULL)) #define luaL_typename(L,i) lua_typename(L, lua_type(L,(i))) #define luaL_dofile(L, fn) \ (luaL_loadfile(L, fn) || lua_pcall(L, 0, LUA_MULTRET, 0)) #define luaL_dostring(L, s) \ (luaL_loadstring(L, s) || lua_pcall(L, 0, LUA_MULTRET, 0)) #define luaL_getmetatable(L,n) (lua_getfield(L, LUA_REGISTRYINDEX, (n))) #define luaL_opt(L,f,n,d) (lua_isnoneornil(L,(n)) ? (d) : f(L,(n))) #define luaL_loadbuffer(L,s,sz,n) luaL_loadbufferx(L,s,sz,n,NULL) /* ** Perform arithmetic operations on lua_Integer values with wrap-around ** semantics, as the Lua core does. */ #define luaL_intop(op,v1,v2) \ ((lua_Integer)((lua_Unsigned)(v1) op (lua_Unsigned)(v2))) /* push the value used to represent failure/error */ #define luaL_pushfail(L) lua_pushnil(L) /* ** Internal assertions for in-house debugging */ #if !defined(lua_assert) #if defined LUAI_ASSERT #include #define lua_assert(c) assert(c) #else #define lua_assert(c) ((void)0) #endif #endif /* ** {====================================================== ** Generic Buffer manipulation ** ======================================================= */ struct luaL_Buffer { char *b; /* buffer address */ size_t size; /* buffer size */ size_t n; /* number of characters in buffer */ lua_State *L; union { LUAI_MAXALIGN; /* ensure maximum alignment for buffer */ char b[LUAL_BUFFERSIZE]; /* initial buffer */ } init; }; #define luaL_bufflen(bf) ((bf)->n) #define luaL_buffaddr(bf) ((bf)->b) #define luaL_addchar(B,c) \ ((void)((B)->n < (B)->size || luaL_prepbuffsize((B), 1)), \ ((B)->b[(B)->n++] = (c))) #define luaL_addsize(B,s) ((B)->n += (s)) #define luaL_buffsub(B,s) ((B)->n -= (s)) LUALIB_API void (luaL_buffinit) (lua_State *L, luaL_Buffer *B); LUALIB_API char *(luaL_prepbuffsize) (luaL_Buffer *B, size_t sz); LUALIB_API void (luaL_addlstring) (luaL_Buffer *B, const char *s, size_t l); LUALIB_API void (luaL_addstring) (luaL_Buffer *B, const char *s); LUALIB_API void (luaL_addvalue) (luaL_Buffer *B); LUALIB_API void (luaL_pushresult) (luaL_Buffer *B); LUALIB_API void (luaL_pushresultsize) (luaL_Buffer *B, size_t sz); LUALIB_API char *(luaL_buffinitsize) (lua_State *L, luaL_Buffer *B, size_t sz); #define luaL_prepbuffer(B) luaL_prepbuffsize(B, LUAL_BUFFERSIZE) /* }====================================================== */ /* ** {====================================================== ** File handles for IO library ** ======================================================= */ /* ** A file handle is a userdata with metatable 'LUA_FILEHANDLE' and ** initial structure 'luaL_Stream' (it may contain other fields ** after that initial structure). */ #define LUA_FILEHANDLE "FILE*" typedef struct luaL_Stream { FILE *f; /* stream (NULL for incompletely created streams) */ lua_CFunction closef; /* to close stream (NULL for closed streams) */ } luaL_Stream; /* }====================================================== */ /* ** {================================================================== ** "Abstraction Layer" for basic report of messages and errors ** =================================================================== */ /* print a string */ #if !defined(lua_writestring) #define lua_writestring(s,l) fwrite((s), sizeof(char), (l), stdout) #endif /* print a newline and flush the output */ #if !defined(lua_writeline) #define lua_writeline() (lua_writestring("\n", 1), fflush(stdout)) #endif /* print an error message */ #if !defined(lua_writestringerror) #define lua_writestringerror(s,p) \ (fprintf(stderr, (s), (p)), fflush(stderr)) #endif /* }================================================================== */ /* ** {============================================================ ** Compatibility with deprecated conversions ** ============================================================= */ #if defined(LUA_COMPAT_APIINTCASTS) #define luaL_checkunsigned(L,a) ((lua_Unsigned)luaL_checkinteger(L,a)) #define luaL_optunsigned(L,a,d) \ ((lua_Unsigned)luaL_optinteger(L,a,(lua_Integer)(d))) #define luaL_checkint(L,n) ((int)luaL_checkinteger(L, (n))) #define luaL_optint(L,n,d) ((int)luaL_optinteger(L, (n), (d))) #define luaL_checklong(L,n) ((long)luaL_checkinteger(L, (n))) #define luaL_optlong(L,n,d) ((long)luaL_optinteger(L, (n), (d))) #endif /* }============================================================ */ #endif ================================================ FILE: libraries/lua/lua.h ================================================ /* ** $Id: lua.h $ ** Lua - A Scripting Language ** Lua.org, PUC-Rio, Brazil (http://www.lua.org) ** See Copyright Notice at the end of this file */ #ifndef lua_h #define lua_h #include #include #include "luaconf.h" #define LUA_VERSION_MAJOR "5" #define LUA_VERSION_MINOR "4" #define LUA_VERSION_RELEASE "6" #define LUA_VERSION_NUM 504 #define LUA_VERSION_RELEASE_NUM (LUA_VERSION_NUM * 100 + 6) #define LUA_VERSION "Lua " LUA_VERSION_MAJOR "." LUA_VERSION_MINOR #define LUA_RELEASE LUA_VERSION "." LUA_VERSION_RELEASE #define LUA_COPYRIGHT LUA_RELEASE " Copyright (C) 1994-2023 Lua.org, PUC-Rio" #define LUA_AUTHORS "R. Ierusalimschy, L. H. de Figueiredo, W. Celes" /* mark for precompiled code ('Lua') */ #define LUA_SIGNATURE "\x1bLua" /* option for multiple returns in 'lua_pcall' and 'lua_call' */ #define LUA_MULTRET (-1) /* ** Pseudo-indices ** (-LUAI_MAXSTACK is the minimum valid index; we keep some free empty ** space after that to help overflow detection) */ #define LUA_REGISTRYINDEX (-LUAI_MAXSTACK - 1000) #define lua_upvalueindex(i) (LUA_REGISTRYINDEX - (i)) /* thread status */ #define LUA_OK 0 #define LUA_YIELD 1 #define LUA_ERRRUN 2 #define LUA_ERRSYNTAX 3 #define LUA_ERRMEM 4 #define LUA_ERRERR 5 typedef struct lua_State lua_State; /* ** basic types */ #define LUA_TNONE (-1) #define LUA_TNIL 0 #define LUA_TBOOLEAN 1 #define LUA_TLIGHTUSERDATA 2 #define LUA_TNUMBER 3 #define LUA_TSTRING 4 #define LUA_TTABLE 5 #define LUA_TFUNCTION 6 #define LUA_TUSERDATA 7 #define LUA_TTHREAD 8 #define LUA_NUMTYPES 9 /* minimum Lua stack available to a C function */ #define LUA_MINSTACK 20 /* predefined values in the registry */ #define LUA_RIDX_MAINTHREAD 1 #define LUA_RIDX_GLOBALS 2 #define LUA_RIDX_LAST LUA_RIDX_GLOBALS /* type of numbers in Lua */ typedef LUA_NUMBER lua_Number; /* type for integer functions */ typedef LUA_INTEGER lua_Integer; /* unsigned integer type */ typedef LUA_UNSIGNED lua_Unsigned; /* type for continuation-function contexts */ typedef LUA_KCONTEXT lua_KContext; /* ** Type for C functions registered with Lua */ typedef int (*lua_CFunction) (lua_State *L); /* ** Type for continuation functions */ typedef int (*lua_KFunction) (lua_State *L, int status, lua_KContext ctx); /* ** Type for functions that read/write blocks when loading/dumping Lua chunks */ typedef const char * (*lua_Reader) (lua_State *L, void *ud, size_t *sz); typedef int (*lua_Writer) (lua_State *L, const void *p, size_t sz, void *ud); /* ** Type for memory-allocation functions */ typedef void * (*lua_Alloc) (void *ud, void *ptr, size_t osize, size_t nsize); /* ** Type for warning functions */ typedef void (*lua_WarnFunction) (void *ud, const char *msg, int tocont); /* ** Type used by the debug API to collect debug information */ typedef struct lua_Debug lua_Debug; /* ** Functions to be called by the debugger in specific events */ typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar); /* ** generic extra include file */ #if defined(LUA_USER_H) #include LUA_USER_H #endif /* ** RCS ident string */ extern const char lua_ident[]; /* ** state manipulation */ LUA_API lua_State *(lua_newstate) (lua_Alloc f, void *ud); LUA_API void (lua_close) (lua_State *L); LUA_API lua_State *(lua_newthread) (lua_State *L); LUA_API int (lua_closethread) (lua_State *L, lua_State *from); LUA_API int (lua_resetthread) (lua_State *L); /* Deprecated! */ LUA_API lua_CFunction (lua_atpanic) (lua_State *L, lua_CFunction panicf); LUA_API lua_Number (lua_version) (lua_State *L); /* ** basic stack manipulation */ LUA_API int (lua_absindex) (lua_State *L, int idx); LUA_API int (lua_gettop) (lua_State *L); LUA_API void (lua_settop) (lua_State *L, int idx); LUA_API void (lua_pushvalue) (lua_State *L, int idx); LUA_API void (lua_rotate) (lua_State *L, int idx, int n); LUA_API void (lua_copy) (lua_State *L, int fromidx, int toidx); LUA_API int (lua_checkstack) (lua_State *L, int n); LUA_API void (lua_xmove) (lua_State *from, lua_State *to, int n); /* ** access functions (stack -> C) */ LUA_API int (lua_isnumber) (lua_State *L, int idx); LUA_API int (lua_isstring) (lua_State *L, int idx); LUA_API int (lua_iscfunction) (lua_State *L, int idx); LUA_API int (lua_isinteger) (lua_State *L, int idx); LUA_API int (lua_isuserdata) (lua_State *L, int idx); LUA_API int (lua_type) (lua_State *L, int idx); LUA_API const char *(lua_typename) (lua_State *L, int tp); LUA_API lua_Number (lua_tonumberx) (lua_State *L, int idx, int *isnum); LUA_API lua_Integer (lua_tointegerx) (lua_State *L, int idx, int *isnum); LUA_API int (lua_toboolean) (lua_State *L, int idx); LUA_API const char *(lua_tolstring) (lua_State *L, int idx, size_t *len); LUA_API lua_Unsigned (lua_rawlen) (lua_State *L, int idx); LUA_API lua_CFunction (lua_tocfunction) (lua_State *L, int idx); LUA_API void *(lua_touserdata) (lua_State *L, int idx); LUA_API lua_State *(lua_tothread) (lua_State *L, int idx); LUA_API const void *(lua_topointer) (lua_State *L, int idx); /* ** Comparison and arithmetic functions */ #define LUA_OPADD 0 /* ORDER TM, ORDER OP */ #define LUA_OPSUB 1 #define LUA_OPMUL 2 #define LUA_OPMOD 3 #define LUA_OPPOW 4 #define LUA_OPDIV 5 #define LUA_OPIDIV 6 #define LUA_OPBAND 7 #define LUA_OPBOR 8 #define LUA_OPBXOR 9 #define LUA_OPSHL 10 #define LUA_OPSHR 11 #define LUA_OPUNM 12 #define LUA_OPBNOT 13 LUA_API void (lua_arith) (lua_State *L, int op); #define LUA_OPEQ 0 #define LUA_OPLT 1 #define LUA_OPLE 2 LUA_API int (lua_rawequal) (lua_State *L, int idx1, int idx2); LUA_API int (lua_compare) (lua_State *L, int idx1, int idx2, int op); /* ** push functions (C -> stack) */ LUA_API void (lua_pushnil) (lua_State *L); LUA_API void (lua_pushnumber) (lua_State *L, lua_Number n); LUA_API void (lua_pushinteger) (lua_State *L, lua_Integer n); LUA_API const char *(lua_pushlstring) (lua_State *L, const char *s, size_t len); LUA_API const char *(lua_pushstring) (lua_State *L, const char *s); LUA_API const char *(lua_pushvfstring) (lua_State *L, const char *fmt, va_list argp); LUA_API const char *(lua_pushfstring) (lua_State *L, const char *fmt, ...); LUA_API void (lua_pushcclosure) (lua_State *L, lua_CFunction fn, int n); LUA_API void (lua_pushboolean) (lua_State *L, int b); LUA_API void (lua_pushlightuserdata) (lua_State *L, void *p); LUA_API int (lua_pushthread) (lua_State *L); /* ** get functions (Lua -> stack) */ LUA_API int (lua_getglobal) (lua_State *L, const char *name); LUA_API int (lua_gettable) (lua_State *L, int idx); LUA_API int (lua_getfield) (lua_State *L, int idx, const char *k); LUA_API int (lua_geti) (lua_State *L, int idx, lua_Integer n); LUA_API int (lua_rawget) (lua_State *L, int idx); LUA_API int (lua_rawgeti) (lua_State *L, int idx, lua_Integer n); LUA_API int (lua_rawgetp) (lua_State *L, int idx, const void *p); LUA_API void (lua_createtable) (lua_State *L, int narr, int nrec); LUA_API void *(lua_newuserdatauv) (lua_State *L, size_t sz, int nuvalue); LUA_API int (lua_getmetatable) (lua_State *L, int objindex); LUA_API int (lua_getiuservalue) (lua_State *L, int idx, int n); /* ** set functions (stack -> Lua) */ LUA_API void (lua_setglobal) (lua_State *L, const char *name); LUA_API void (lua_settable) (lua_State *L, int idx); LUA_API void (lua_setfield) (lua_State *L, int idx, const char *k); LUA_API void (lua_seti) (lua_State *L, int idx, lua_Integer n); LUA_API void (lua_rawset) (lua_State *L, int idx); LUA_API void (lua_rawseti) (lua_State *L, int idx, lua_Integer n); LUA_API void (lua_rawsetp) (lua_State *L, int idx, const void *p); LUA_API int (lua_setmetatable) (lua_State *L, int objindex); LUA_API int (lua_setiuservalue) (lua_State *L, int idx, int n); /* ** 'load' and 'call' functions (load and run Lua code) */ LUA_API void (lua_callk) (lua_State *L, int nargs, int nresults, lua_KContext ctx, lua_KFunction k); #define lua_call(L,n,r) lua_callk(L, (n), (r), 0, NULL) LUA_API int (lua_pcallk) (lua_State *L, int nargs, int nresults, int errfunc, lua_KContext ctx, lua_KFunction k); #define lua_pcall(L,n,r,f) lua_pcallk(L, (n), (r), (f), 0, NULL) LUA_API int (lua_load) (lua_State *L, lua_Reader reader, void *dt, const char *chunkname, const char *mode); LUA_API int (lua_dump) (lua_State *L, lua_Writer writer, void *data, int strip); /* ** coroutine functions */ LUA_API int (lua_yieldk) (lua_State *L, int nresults, lua_KContext ctx, lua_KFunction k); LUA_API int (lua_resume) (lua_State *L, lua_State *from, int narg, int *nres); LUA_API int (lua_status) (lua_State *L); LUA_API int (lua_isyieldable) (lua_State *L); #define lua_yield(L,n) lua_yieldk(L, (n), 0, NULL) /* ** Warning-related functions */ LUA_API void (lua_setwarnf) (lua_State *L, lua_WarnFunction f, void *ud); LUA_API void (lua_warning) (lua_State *L, const char *msg, int tocont); /* ** garbage-collection function and options */ #define LUA_GCSTOP 0 #define LUA_GCRESTART 1 #define LUA_GCCOLLECT 2 #define LUA_GCCOUNT 3 #define LUA_GCCOUNTB 4 #define LUA_GCSTEP 5 #define LUA_GCSETPAUSE 6 #define LUA_GCSETSTEPMUL 7 #define LUA_GCISRUNNING 9 #define LUA_GCGEN 10 #define LUA_GCINC 11 LUA_API int (lua_gc) (lua_State *L, int what, ...); /* ** miscellaneous functions */ LUA_API int (lua_error) (lua_State *L); LUA_API int (lua_next) (lua_State *L, int idx); LUA_API void (lua_concat) (lua_State *L, int n); LUA_API void (lua_len) (lua_State *L, int idx); LUA_API size_t (lua_stringtonumber) (lua_State *L, const char *s); LUA_API lua_Alloc (lua_getallocf) (lua_State *L, void **ud); LUA_API void (lua_setallocf) (lua_State *L, lua_Alloc f, void *ud); LUA_API void (lua_toclose) (lua_State *L, int idx); LUA_API void (lua_closeslot) (lua_State *L, int idx); /* ** {============================================================== ** some useful macros ** =============================================================== */ #define lua_getextraspace(L) ((void *)((char *)(L) - LUA_EXTRASPACE)) #define lua_tonumber(L,i) lua_tonumberx(L,(i),NULL) #define lua_tointeger(L,i) lua_tointegerx(L,(i),NULL) #define lua_pop(L,n) lua_settop(L, -(n)-1) #define lua_newtable(L) lua_createtable(L, 0, 0) #define lua_register(L,n,f) (lua_pushcfunction(L, (f)), lua_setglobal(L, (n))) #define lua_pushcfunction(L,f) lua_pushcclosure(L, (f), 0) #define lua_isfunction(L,n) (lua_type(L, (n)) == LUA_TFUNCTION) #define lua_istable(L,n) (lua_type(L, (n)) == LUA_TTABLE) #define lua_islightuserdata(L,n) (lua_type(L, (n)) == LUA_TLIGHTUSERDATA) #define lua_isnil(L,n) (lua_type(L, (n)) == LUA_TNIL) #define lua_isboolean(L,n) (lua_type(L, (n)) == LUA_TBOOLEAN) #define lua_isthread(L,n) (lua_type(L, (n)) == LUA_TTHREAD) #define lua_isnone(L,n) (lua_type(L, (n)) == LUA_TNONE) #define lua_isnoneornil(L, n) (lua_type(L, (n)) <= 0) #define lua_pushliteral(L, s) lua_pushstring(L, "" s) #define lua_pushglobaltable(L) \ ((void)lua_rawgeti(L, LUA_REGISTRYINDEX, LUA_RIDX_GLOBALS)) #define lua_tostring(L,i) lua_tolstring(L, (i), NULL) #define lua_insert(L,idx) lua_rotate(L, (idx), 1) #define lua_remove(L,idx) (lua_rotate(L, (idx), -1), lua_pop(L, 1)) #define lua_replace(L,idx) (lua_copy(L, -1, (idx)), lua_pop(L, 1)) /* }============================================================== */ /* ** {============================================================== ** compatibility macros ** =============================================================== */ #if defined(LUA_COMPAT_APIINTCASTS) #define lua_pushunsigned(L,n) lua_pushinteger(L, (lua_Integer)(n)) #define lua_tounsignedx(L,i,is) ((lua_Unsigned)lua_tointegerx(L,i,is)) #define lua_tounsigned(L,i) lua_tounsignedx(L,(i),NULL) #endif #define lua_newuserdata(L,s) lua_newuserdatauv(L,s,1) #define lua_getuservalue(L,idx) lua_getiuservalue(L,idx,1) #define lua_setuservalue(L,idx) lua_setiuservalue(L,idx,1) #define LUA_NUMTAGS LUA_NUMTYPES /* }============================================================== */ /* ** {====================================================================== ** Debug API ** ======================================================================= */ /* ** Event codes */ #define LUA_HOOKCALL 0 #define LUA_HOOKRET 1 #define LUA_HOOKLINE 2 #define LUA_HOOKCOUNT 3 #define LUA_HOOKTAILCALL 4 /* ** Event masks */ #define LUA_MASKCALL (1 << LUA_HOOKCALL) #define LUA_MASKRET (1 << LUA_HOOKRET) #define LUA_MASKLINE (1 << LUA_HOOKLINE) #define LUA_MASKCOUNT (1 << LUA_HOOKCOUNT) LUA_API int (lua_getstack) (lua_State *L, int level, lua_Debug *ar); LUA_API int (lua_getinfo) (lua_State *L, const char *what, lua_Debug *ar); LUA_API const char *(lua_getlocal) (lua_State *L, const lua_Debug *ar, int n); LUA_API const char *(lua_setlocal) (lua_State *L, const lua_Debug *ar, int n); LUA_API const char *(lua_getupvalue) (lua_State *L, int funcindex, int n); LUA_API const char *(lua_setupvalue) (lua_State *L, int funcindex, int n); LUA_API void *(lua_upvalueid) (lua_State *L, int fidx, int n); LUA_API void (lua_upvaluejoin) (lua_State *L, int fidx1, int n1, int fidx2, int n2); LUA_API void (lua_sethook) (lua_State *L, lua_Hook func, int mask, int count); LUA_API lua_Hook (lua_gethook) (lua_State *L); LUA_API int (lua_gethookmask) (lua_State *L); LUA_API int (lua_gethookcount) (lua_State *L); LUA_API int (lua_setcstacklimit) (lua_State *L, unsigned int limit); struct lua_Debug { int event; const char *name; /* (n) */ const char *namewhat; /* (n) 'global', 'local', 'field', 'method' */ const char *what; /* (S) 'Lua', 'C', 'main', 'tail' */ const char *source; /* (S) */ size_t srclen; /* (S) */ int currentline; /* (l) */ int linedefined; /* (S) */ int lastlinedefined; /* (S) */ unsigned char nups; /* (u) number of upvalues */ unsigned char nparams;/* (u) number of parameters */ char isvararg; /* (u) */ char istailcall; /* (t) */ unsigned short ftransfer; /* (r) index of first value transferred */ unsigned short ntransfer; /* (r) number of transferred values */ char short_src[LUA_IDSIZE]; /* (S) */ /* private part */ struct CallInfo *i_ci; /* active function */ }; /* }====================================================================== */ /****************************************************************************** * Copyright (C) 1994-2023 Lua.org, PUC-Rio. * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ******************************************************************************/ #endif ================================================ FILE: libraries/lua/lua.hpp ================================================ // lua.hpp // Lua header files for C++ // <> not supplied automatically because Lua also compiles as C++ extern "C" { #include "lua.h" #include "lualib.h" #include "lauxlib.h" } ================================================ FILE: libraries/lua/luaconf.h ================================================ /* ** $Id: luaconf.h $ ** Configuration file for Lua ** See Copyright Notice in lua.h */ #ifndef luaconf_h #define luaconf_h #include #include /* ** =================================================================== ** General Configuration File for Lua ** ** Some definitions here can be changed externally, through the compiler ** (e.g., with '-D' options): They are commented out or protected ** by '#if !defined' guards. However, several other definitions ** should be changed directly here, either because they affect the ** Lua ABI (by making the changes here, you ensure that all software ** connected to Lua, such as C libraries, will be compiled with the same ** configuration); or because they are seldom changed. ** ** Search for "@@" to find all configurable definitions. ** =================================================================== */ /* ** {==================================================================== ** System Configuration: macros to adapt (if needed) Lua to some ** particular platform, for instance restricting it to C89. ** ===================================================================== */ /* @@ LUA_USE_C89 controls the use of non-ISO-C89 features. ** Define it if you want Lua to avoid the use of a few C99 features ** or Windows-specific features on Windows. */ /* #define LUA_USE_C89 */ /* ** By default, Lua on Windows use (some) specific Windows features */ #if !defined(LUA_USE_C89) && defined(_WIN32) && !defined(_WIN32_WCE) #define LUA_USE_WINDOWS /* enable goodies for regular Windows */ #endif #if defined(LUA_USE_WINDOWS) #define LUA_DL_DLL /* enable support for DLL */ #define LUA_USE_C89 /* broadly, Windows is C89 */ #endif #if defined(LUA_USE_LINUX) #define LUA_USE_POSIX #define LUA_USE_DLOPEN /* needs an extra library: -ldl */ #endif #if defined(LUA_USE_MACOSX) #define LUA_USE_POSIX #define LUA_USE_DLOPEN /* MacOS does not need -ldl */ #endif #if defined(LUA_USE_IOS) #define LUA_USE_POSIX #define LUA_USE_DLOPEN #endif /* @@ LUAI_IS32INT is true iff 'int' has (at least) 32 bits. */ #define LUAI_IS32INT ((UINT_MAX >> 30) >= 3) /* }================================================================== */ /* ** {================================================================== ** Configuration for Number types. These options should not be ** set externally, because any other code connected to Lua must ** use the same configuration. ** =================================================================== */ /* @@ LUA_INT_TYPE defines the type for Lua integers. @@ LUA_FLOAT_TYPE defines the type for Lua floats. ** Lua should work fine with any mix of these options supported ** by your C compiler. The usual configurations are 64-bit integers ** and 'double' (the default), 32-bit integers and 'float' (for ** restricted platforms), and 'long'/'double' (for C compilers not ** compliant with C99, which may not have support for 'long long'). */ /* predefined options for LUA_INT_TYPE */ #define LUA_INT_INT 1 #define LUA_INT_LONG 2 #define LUA_INT_LONGLONG 3 /* predefined options for LUA_FLOAT_TYPE */ #define LUA_FLOAT_FLOAT 1 #define LUA_FLOAT_DOUBLE 2 #define LUA_FLOAT_LONGDOUBLE 3 /* Default configuration ('long long' and 'double', for 64-bit Lua) */ #define LUA_INT_DEFAULT LUA_INT_LONGLONG #define LUA_FLOAT_DEFAULT LUA_FLOAT_DOUBLE /* @@ LUA_32BITS enables Lua with 32-bit integers and 32-bit floats. */ #define LUA_32BITS 0 /* @@ LUA_C89_NUMBERS ensures that Lua uses the largest types available for ** C89 ('long' and 'double'); Windows always has '__int64', so it does ** not need to use this case. */ #if defined(LUA_USE_C89) && !defined(LUA_USE_WINDOWS) #define LUA_C89_NUMBERS 1 #else #define LUA_C89_NUMBERS 0 #endif #if LUA_32BITS /* { */ /* ** 32-bit integers and 'float' */ #if LUAI_IS32INT /* use 'int' if big enough */ #define LUA_INT_TYPE LUA_INT_INT #else /* otherwise use 'long' */ #define LUA_INT_TYPE LUA_INT_LONG #endif #define LUA_FLOAT_TYPE LUA_FLOAT_FLOAT #elif LUA_C89_NUMBERS /* }{ */ /* ** largest types available for C89 ('long' and 'double') */ #define LUA_INT_TYPE LUA_INT_LONG #define LUA_FLOAT_TYPE LUA_FLOAT_DOUBLE #else /* }{ */ /* use defaults */ #define LUA_INT_TYPE LUA_INT_DEFAULT #define LUA_FLOAT_TYPE LUA_FLOAT_DEFAULT #endif /* } */ /* }================================================================== */ /* ** {================================================================== ** Configuration for Paths. ** =================================================================== */ /* ** LUA_PATH_SEP is the character that separates templates in a path. ** LUA_PATH_MARK is the string that marks the substitution points in a ** template. ** LUA_EXEC_DIR in a Windows path is replaced by the executable's ** directory. */ #define LUA_PATH_SEP ";" #define LUA_PATH_MARK "?" #define LUA_EXEC_DIR "!" /* @@ LUA_PATH_DEFAULT is the default path that Lua uses to look for ** Lua libraries. @@ LUA_CPATH_DEFAULT is the default path that Lua uses to look for ** C libraries. ** CHANGE them if your machine has a non-conventional directory ** hierarchy or if you want to install your libraries in ** non-conventional directories. */ #define LUA_VDIR LUA_VERSION_MAJOR "." LUA_VERSION_MINOR #if defined(_WIN32) /* { */ /* ** In Windows, any exclamation mark ('!') in the path is replaced by the ** path of the directory of the executable file of the current process. */ #define LUA_LDIR "!\\lua\\" #define LUA_CDIR "!\\" #define LUA_SHRDIR "!\\..\\share\\lua\\" LUA_VDIR "\\" #if !defined(LUA_PATH_DEFAULT) #define LUA_PATH_DEFAULT \ LUA_LDIR"?.lua;" LUA_LDIR"?\\init.lua;" \ LUA_CDIR"?.lua;" LUA_CDIR"?\\init.lua;" \ LUA_SHRDIR"?.lua;" LUA_SHRDIR"?\\init.lua;" \ ".\\?.lua;" ".\\?\\init.lua" #endif #if !defined(LUA_CPATH_DEFAULT) #define LUA_CPATH_DEFAULT \ LUA_CDIR"?.dll;" \ LUA_CDIR"..\\lib\\lua\\" LUA_VDIR "\\?.dll;" \ LUA_CDIR"loadall.dll;" ".\\?.dll" #endif #else /* }{ */ #define LUA_ROOT "/usr/local/" #define LUA_LDIR LUA_ROOT "share/lua/" LUA_VDIR "/" #define LUA_CDIR LUA_ROOT "lib/lua/" LUA_VDIR "/" #if !defined(LUA_PATH_DEFAULT) #define LUA_PATH_DEFAULT \ LUA_LDIR"?.lua;" LUA_LDIR"?/init.lua;" \ LUA_CDIR"?.lua;" LUA_CDIR"?/init.lua;" \ "./?.lua;" "./?/init.lua" #endif #if !defined(LUA_CPATH_DEFAULT) #define LUA_CPATH_DEFAULT \ LUA_CDIR"?.so;" LUA_CDIR"loadall.so;" "./?.so" #endif #endif /* } */ /* @@ LUA_DIRSEP is the directory separator (for submodules). ** CHANGE it if your machine does not use "/" as the directory separator ** and is not Windows. (On Windows Lua automatically uses "\".) */ #if !defined(LUA_DIRSEP) #if defined(_WIN32) #define LUA_DIRSEP "\\" #else #define LUA_DIRSEP "/" #endif #endif /* }================================================================== */ /* ** {================================================================== ** Marks for exported symbols in the C code ** =================================================================== */ /* @@ LUA_API is a mark for all core API functions. @@ LUALIB_API is a mark for all auxiliary library functions. @@ LUAMOD_API is a mark for all standard library opening functions. ** CHANGE them if you need to define those functions in some special way. ** For instance, if you want to create one Windows DLL with the core and ** the libraries, you may want to use the following definition (define ** LUA_BUILD_AS_DLL to get it). */ #if defined(LUA_BUILD_AS_DLL) /* { */ #if defined(LUA_CORE) || defined(LUA_LIB) /* { */ #define LUA_API __declspec(dllexport) #else /* }{ */ #define LUA_API __declspec(dllimport) #endif /* } */ #else /* }{ */ #define LUA_API extern #endif /* } */ /* ** More often than not the libs go together with the core. */ #define LUALIB_API LUA_API #define LUAMOD_API LUA_API /* @@ LUAI_FUNC is a mark for all extern functions that are not to be ** exported to outside modules. @@ LUAI_DDEF and LUAI_DDEC are marks for all extern (const) variables, ** none of which to be exported to outside modules (LUAI_DDEF for ** definitions and LUAI_DDEC for declarations). ** CHANGE them if you need to mark them in some special way. Elf/gcc ** (versions 3.2 and later) mark them as "hidden" to optimize access ** when Lua is compiled as a shared library. Not all elf targets support ** this attribute. Unfortunately, gcc does not offer a way to check ** whether the target offers that support, and those without support ** give a warning about it. To avoid these warnings, change to the ** default definition. */ #if defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) >= 302) && \ defined(__ELF__) /* { */ #define LUAI_FUNC __attribute__((visibility("internal"))) extern #else /* }{ */ #define LUAI_FUNC extern #endif /* } */ #define LUAI_DDEC(dec) LUAI_FUNC dec #define LUAI_DDEF /* empty */ /* }================================================================== */ /* ** {================================================================== ** Compatibility with previous versions ** =================================================================== */ /* @@ LUA_COMPAT_5_3 controls other macros for compatibility with Lua 5.3. ** You can define it to get all options, or change specific options ** to fit your specific needs. */ #if defined(LUA_COMPAT_5_3) /* { */ /* @@ LUA_COMPAT_MATHLIB controls the presence of several deprecated ** functions in the mathematical library. ** (These functions were already officially removed in 5.3; ** nevertheless they are still available here.) */ #define LUA_COMPAT_MATHLIB /* @@ LUA_COMPAT_APIINTCASTS controls the presence of macros for ** manipulating other integer types (lua_pushunsigned, lua_tounsigned, ** luaL_checkint, luaL_checklong, etc.) ** (These macros were also officially removed in 5.3, but they are still ** available here.) */ #define LUA_COMPAT_APIINTCASTS /* @@ LUA_COMPAT_LT_LE controls the emulation of the '__le' metamethod ** using '__lt'. */ #define LUA_COMPAT_LT_LE /* @@ The following macros supply trivial compatibility for some ** changes in the API. The macros themselves document how to ** change your code to avoid using them. ** (Once more, these macros were officially removed in 5.3, but they are ** still available here.) */ #define lua_strlen(L,i) lua_rawlen(L, (i)) #define lua_objlen(L,i) lua_rawlen(L, (i)) #define lua_equal(L,idx1,idx2) lua_compare(L,(idx1),(idx2),LUA_OPEQ) #define lua_lessthan(L,idx1,idx2) lua_compare(L,(idx1),(idx2),LUA_OPLT) #endif /* } */ /* }================================================================== */ /* ** {================================================================== ** Configuration for Numbers (low-level part). ** Change these definitions if no predefined LUA_FLOAT_* / LUA_INT_* ** satisfy your needs. ** =================================================================== */ /* @@ LUAI_UACNUMBER is the result of a 'default argument promotion' @@ over a floating number. @@ l_floatatt(x) corrects float attribute 'x' to the proper float type ** by prefixing it with one of FLT/DBL/LDBL. @@ LUA_NUMBER_FRMLEN is the length modifier for writing floats. @@ LUA_NUMBER_FMT is the format for writing floats. @@ lua_number2str converts a float to a string. @@ l_mathop allows the addition of an 'l' or 'f' to all math operations. @@ l_floor takes the floor of a float. @@ lua_str2number converts a decimal numeral to a number. */ /* The following definitions are good for most cases here */ #define l_floor(x) (l_mathop(floor)(x)) #define lua_number2str(s,sz,n) \ l_sprintf((s), sz, LUA_NUMBER_FMT, (LUAI_UACNUMBER)(n)) /* @@ lua_numbertointeger converts a float number with an integral value ** to an integer, or returns 0 if float is not within the range of ** a lua_Integer. (The range comparisons are tricky because of ** rounding. The tests here assume a two-complement representation, ** where MININTEGER always has an exact representation as a float; ** MAXINTEGER may not have one, and therefore its conversion to float ** may have an ill-defined value.) */ #define lua_numbertointeger(n,p) \ ((n) >= (LUA_NUMBER)(LUA_MININTEGER) && \ (n) < -(LUA_NUMBER)(LUA_MININTEGER) && \ (*(p) = (LUA_INTEGER)(n), 1)) /* now the variable definitions */ #if LUA_FLOAT_TYPE == LUA_FLOAT_FLOAT /* { single float */ #define LUA_NUMBER float #define l_floatatt(n) (FLT_##n) #define LUAI_UACNUMBER double #define LUA_NUMBER_FRMLEN "" #define LUA_NUMBER_FMT "%.7g" #define l_mathop(op) op##f #define lua_str2number(s,p) strtof((s), (p)) #elif LUA_FLOAT_TYPE == LUA_FLOAT_LONGDOUBLE /* }{ long double */ #define LUA_NUMBER long double #define l_floatatt(n) (LDBL_##n) #define LUAI_UACNUMBER long double #define LUA_NUMBER_FRMLEN "L" #define LUA_NUMBER_FMT "%.19Lg" #define l_mathop(op) op##l #define lua_str2number(s,p) strtold((s), (p)) #elif LUA_FLOAT_TYPE == LUA_FLOAT_DOUBLE /* }{ double */ #define LUA_NUMBER double #define l_floatatt(n) (DBL_##n) #define LUAI_UACNUMBER double #define LUA_NUMBER_FRMLEN "" #define LUA_NUMBER_FMT "%.14g" #define l_mathop(op) op #define lua_str2number(s,p) strtod((s), (p)) #else /* }{ */ #error "numeric float type not defined" #endif /* } */ /* @@ LUA_UNSIGNED is the unsigned version of LUA_INTEGER. @@ LUAI_UACINT is the result of a 'default argument promotion' @@ over a LUA_INTEGER. @@ LUA_INTEGER_FRMLEN is the length modifier for reading/writing integers. @@ LUA_INTEGER_FMT is the format for writing integers. @@ LUA_MAXINTEGER is the maximum value for a LUA_INTEGER. @@ LUA_MININTEGER is the minimum value for a LUA_INTEGER. @@ LUA_MAXUNSIGNED is the maximum value for a LUA_UNSIGNED. @@ lua_integer2str converts an integer to a string. */ /* The following definitions are good for most cases here */ #define LUA_INTEGER_FMT "%" LUA_INTEGER_FRMLEN "d" #define LUAI_UACINT LUA_INTEGER #define lua_integer2str(s,sz,n) \ l_sprintf((s), sz, LUA_INTEGER_FMT, (LUAI_UACINT)(n)) /* ** use LUAI_UACINT here to avoid problems with promotions (which ** can turn a comparison between unsigneds into a signed comparison) */ #define LUA_UNSIGNED unsigned LUAI_UACINT /* now the variable definitions */ #if LUA_INT_TYPE == LUA_INT_INT /* { int */ #define LUA_INTEGER int #define LUA_INTEGER_FRMLEN "" #define LUA_MAXINTEGER INT_MAX #define LUA_MININTEGER INT_MIN #define LUA_MAXUNSIGNED UINT_MAX #elif LUA_INT_TYPE == LUA_INT_LONG /* }{ long */ #define LUA_INTEGER long #define LUA_INTEGER_FRMLEN "l" #define LUA_MAXINTEGER LONG_MAX #define LUA_MININTEGER LONG_MIN #define LUA_MAXUNSIGNED ULONG_MAX #elif LUA_INT_TYPE == LUA_INT_LONGLONG /* }{ long long */ /* use presence of macro LLONG_MAX as proxy for C99 compliance */ #if defined(LLONG_MAX) /* { */ /* use ISO C99 stuff */ #define LUA_INTEGER long long #define LUA_INTEGER_FRMLEN "ll" #define LUA_MAXINTEGER LLONG_MAX #define LUA_MININTEGER LLONG_MIN #define LUA_MAXUNSIGNED ULLONG_MAX #elif defined(LUA_USE_WINDOWS) /* }{ */ /* in Windows, can use specific Windows types */ #define LUA_INTEGER __int64 #define LUA_INTEGER_FRMLEN "I64" #define LUA_MAXINTEGER _I64_MAX #define LUA_MININTEGER _I64_MIN #define LUA_MAXUNSIGNED _UI64_MAX #else /* }{ */ #error "Compiler does not support 'long long'. Use option '-DLUA_32BITS' \ or '-DLUA_C89_NUMBERS' (see file 'luaconf.h' for details)" #endif /* } */ #else /* }{ */ #error "numeric integer type not defined" #endif /* } */ /* }================================================================== */ /* ** {================================================================== ** Dependencies with C99 and other C details ** =================================================================== */ /* @@ l_sprintf is equivalent to 'snprintf' or 'sprintf' in C89. ** (All uses in Lua have only one format item.) */ #if !defined(LUA_USE_C89) #define l_sprintf(s,sz,f,i) snprintf(s,sz,f,i) #else #define l_sprintf(s,sz,f,i) ((void)(sz), sprintf(s,f,i)) #endif /* @@ lua_strx2number converts a hexadecimal numeral to a number. ** In C99, 'strtod' does that conversion. Otherwise, you can ** leave 'lua_strx2number' undefined and Lua will provide its own ** implementation. */ #if !defined(LUA_USE_C89) #define lua_strx2number(s,p) lua_str2number(s,p) #endif /* @@ lua_pointer2str converts a pointer to a readable string in a ** non-specified way. */ #define lua_pointer2str(buff,sz,p) l_sprintf(buff,sz,"%p",p) /* @@ lua_number2strx converts a float to a hexadecimal numeral. ** In C99, 'sprintf' (with format specifiers '%a'/'%A') does that. ** Otherwise, you can leave 'lua_number2strx' undefined and Lua will ** provide its own implementation. */ #if !defined(LUA_USE_C89) #define lua_number2strx(L,b,sz,f,n) \ ((void)L, l_sprintf(b,sz,f,(LUAI_UACNUMBER)(n))) #endif /* ** 'strtof' and 'opf' variants for math functions are not valid in ** C89. Otherwise, the macro 'HUGE_VALF' is a good proxy for testing the ** availability of these variants. ('math.h' is already included in ** all files that use these macros.) */ #if defined(LUA_USE_C89) || (defined(HUGE_VAL) && !defined(HUGE_VALF)) #undef l_mathop /* variants not available */ #undef lua_str2number #define l_mathop(op) (lua_Number)op /* no variant */ #define lua_str2number(s,p) ((lua_Number)strtod((s), (p))) #endif /* @@ LUA_KCONTEXT is the type of the context ('ctx') for continuation ** functions. It must be a numerical type; Lua will use 'intptr_t' if ** available, otherwise it will use 'ptrdiff_t' (the nearest thing to ** 'intptr_t' in C89) */ #define LUA_KCONTEXT ptrdiff_t #if !defined(LUA_USE_C89) && defined(__STDC_VERSION__) && \ __STDC_VERSION__ >= 199901L #include #if defined(INTPTR_MAX) /* even in C99 this type is optional */ #undef LUA_KCONTEXT #define LUA_KCONTEXT intptr_t #endif #endif /* @@ lua_getlocaledecpoint gets the locale "radix character" (decimal point). ** Change that if you do not want to use C locales. (Code using this ** macro must include the header 'locale.h'.) */ #if !defined(lua_getlocaledecpoint) #define lua_getlocaledecpoint() (localeconv()->decimal_point[0]) #endif /* ** macros to improve jump prediction, used mostly for error handling ** and debug facilities. (Some macros in the Lua API use these macros. ** Define LUA_NOBUILTIN if you do not want '__builtin_expect' in your ** code.) */ #if !defined(luai_likely) #if defined(__GNUC__) && !defined(LUA_NOBUILTIN) #define luai_likely(x) (__builtin_expect(((x) != 0), 1)) #define luai_unlikely(x) (__builtin_expect(((x) != 0), 0)) #else #define luai_likely(x) (x) #define luai_unlikely(x) (x) #endif #endif #if defined(LUA_CORE) || defined(LUA_LIB) /* shorter names for Lua's own use */ #define l_likely(x) luai_likely(x) #define l_unlikely(x) luai_unlikely(x) #endif /* }================================================================== */ /* ** {================================================================== ** Language Variations ** ===================================================================== */ /* @@ LUA_NOCVTN2S/LUA_NOCVTS2N control how Lua performs some ** coercions. Define LUA_NOCVTN2S to turn off automatic coercion from ** numbers to strings. Define LUA_NOCVTS2N to turn off automatic ** coercion from strings to numbers. */ /* #define LUA_NOCVTN2S */ /* #define LUA_NOCVTS2N */ /* @@ LUA_USE_APICHECK turns on several consistency checks on the C API. ** Define it as a help when debugging C code. */ #if defined(LUA_USE_APICHECK) #include #define luai_apicheck(l,e) assert(e) #endif /* }================================================================== */ /* ** {================================================================== ** Macros that affect the API and must be stable (that is, must be the ** same when you compile Lua and when you compile code that links to ** Lua). ** ===================================================================== */ /* @@ LUAI_MAXSTACK limits the size of the Lua stack. ** CHANGE it if you need a different limit. This limit is arbitrary; ** its only purpose is to stop Lua from consuming unlimited stack ** space (and to reserve some numbers for pseudo-indices). ** (It must fit into max(size_t)/32 and max(int)/2.) */ #if LUAI_IS32INT #define LUAI_MAXSTACK 1000000 #else #define LUAI_MAXSTACK 15000 #endif /* @@ LUA_EXTRASPACE defines the size of a raw memory area associated with ** a Lua state with very fast access. ** CHANGE it if you need a different size. */ #define LUA_EXTRASPACE (sizeof(void *)) /* @@ LUA_IDSIZE gives the maximum size for the description of the source ** of a function in debug information. ** CHANGE it if you want a different size. */ #define LUA_IDSIZE 60 /* @@ LUAL_BUFFERSIZE is the initial buffer size used by the lauxlib ** buffer system. */ #define LUAL_BUFFERSIZE ((int)(16 * sizeof(void*) * sizeof(lua_Number))) /* @@ LUAI_MAXALIGN defines fields that, when used in a union, ensure ** maximum alignment for the other items in that union. */ #define LUAI_MAXALIGN lua_Number n; double u; void *s; lua_Integer i; long l /* }================================================================== */ /* =================================================================== */ /* ** Local configuration. You can use this space to add your redefinitions ** without modifying the main part of the file. */ #endif ================================================ FILE: libraries/lua/lualib.h ================================================ /* ** $Id: lualib.h $ ** Lua standard libraries ** See Copyright Notice in lua.h */ #ifndef lualib_h #define lualib_h #include "lua.h" /* version suffix for environment variable names */ #define LUA_VERSUFFIX "_" LUA_VERSION_MAJOR "_" LUA_VERSION_MINOR LUAMOD_API int (luaopen_base) (lua_State *L); #define LUA_COLIBNAME "coroutine" LUAMOD_API int (luaopen_coroutine) (lua_State *L); #define LUA_TABLIBNAME "table" LUAMOD_API int (luaopen_table) (lua_State *L); #define LUA_IOLIBNAME "io" LUAMOD_API int (luaopen_io) (lua_State *L); #define LUA_OSLIBNAME "os" LUAMOD_API int (luaopen_os) (lua_State *L); #define LUA_STRLIBNAME "string" LUAMOD_API int (luaopen_string) (lua_State *L); #define LUA_UTF8LIBNAME "utf8" LUAMOD_API int (luaopen_utf8) (lua_State *L); #define LUA_MATHLIBNAME "math" LUAMOD_API int (luaopen_math) (lua_State *L); #define LUA_DBLIBNAME "debug" LUAMOD_API int (luaopen_debug) (lua_State *L); #define LUA_LOADLIBNAME "package" LUAMOD_API int (luaopen_package) (lua_State *L); /* open all previous libraries */ LUALIB_API void (luaL_openlibs) (lua_State *L); #endif ================================================ FILE: libraries/miniz.c ================================================ #include "miniz.h" /************************************************************************** * * Copyright 2013-2014 RAD Game Tools and Valve Software * Copyright 2010-2014 Rich Geldreich and Tenacious Software LLC * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ typedef unsigned char mz_validate_uint16[sizeof(mz_uint16) == 2 ? 1 : -1]; typedef unsigned char mz_validate_uint32[sizeof(mz_uint32) == 4 ? 1 : -1]; typedef unsigned char mz_validate_uint64[sizeof(mz_uint64) == 8 ? 1 : -1]; #ifdef __cplusplus extern "C" { #endif /* ------------------- zlib-style API's */ mz_ulong mz_adler32(mz_ulong adler, const unsigned char *ptr, size_t buf_len) { mz_uint32 i, s1 = (mz_uint32)(adler & 0xffff), s2 = (mz_uint32)(adler >> 16); size_t block_len = buf_len % 5552; if (!ptr) return MZ_ADLER32_INIT; while (buf_len) { for (i = 0; i + 7 < block_len; i += 8, ptr += 8) { s1 += ptr[0], s2 += s1; s1 += ptr[1], s2 += s1; s1 += ptr[2], s2 += s1; s1 += ptr[3], s2 += s1; s1 += ptr[4], s2 += s1; s1 += ptr[5], s2 += s1; s1 += ptr[6], s2 += s1; s1 += ptr[7], s2 += s1; } for (; i < block_len; ++i) s1 += *ptr++, s2 += s1; s1 %= 65521U, s2 %= 65521U; buf_len -= block_len; block_len = 5552; } return (s2 << 16) + s1; } /* Karl Malbrain's compact CRC-32. See "A compact CCITT crc16 and crc32 C implementation that balances processor cache usage against speed": http://www.geocities.com/malbrain/ */ #if 0 mz_ulong mz_crc32(mz_ulong crc, const mz_uint8 *ptr, size_t buf_len) { static const mz_uint32 s_crc32[16] = { 0, 0x1db71064, 0x3b6e20c8, 0x26d930ac, 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c, 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c }; mz_uint32 crcu32 = (mz_uint32)crc; if (!ptr) return MZ_CRC32_INIT; crcu32 = ~crcu32; while (buf_len--) { mz_uint8 b = *ptr++; crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b & 0xF)]; crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b >> 4)]; } return ~crcu32; } #elif defined(USE_EXTERNAL_MZCRC) /* If USE_EXTERNAL_CRC is defined, an external module will export the * mz_crc32() symbol for us to use, e.g. an SSE-accelerated version. * Depending on the impl, it may be necessary to ~ the input/output crc values. */ mz_ulong mz_crc32(mz_ulong crc, const mz_uint8 *ptr, size_t buf_len); #else /* Faster, but larger CPU cache footprint. */ mz_ulong mz_crc32(mz_ulong crc, const mz_uint8 *ptr, size_t buf_len) { static const mz_uint32 s_crc_table[256] = { 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D }; mz_uint32 crc32 = (mz_uint32)crc ^ 0xFFFFFFFF; const mz_uint8 *pByte_buf = (const mz_uint8 *)ptr; while (buf_len >= 4) { crc32 = (crc32 >> 8) ^ s_crc_table[(crc32 ^ pByte_buf[0]) & 0xFF]; crc32 = (crc32 >> 8) ^ s_crc_table[(crc32 ^ pByte_buf[1]) & 0xFF]; crc32 = (crc32 >> 8) ^ s_crc_table[(crc32 ^ pByte_buf[2]) & 0xFF]; crc32 = (crc32 >> 8) ^ s_crc_table[(crc32 ^ pByte_buf[3]) & 0xFF]; pByte_buf += 4; buf_len -= 4; } while (buf_len) { crc32 = (crc32 >> 8) ^ s_crc_table[(crc32 ^ pByte_buf[0]) & 0xFF]; ++pByte_buf; --buf_len; } return ~crc32; } #endif void mz_free(void *p) { MZ_FREE(p); } MINIZ_EXPORT void *miniz_def_alloc_func(void *opaque, size_t items, size_t size) { (void)opaque, (void)items, (void)size; return MZ_MALLOC(items * size); } MINIZ_EXPORT void miniz_def_free_func(void *opaque, void *address) { (void)opaque, (void)address; MZ_FREE(address); } MINIZ_EXPORT void *miniz_def_realloc_func(void *opaque, void *address, size_t items, size_t size) { (void)opaque, (void)address, (void)items, (void)size; return MZ_REALLOC(address, items * size); } const char *mz_version(void) { return MZ_VERSION; } #ifndef MINIZ_NO_ZLIB_APIS #ifndef MINIZ_NO_DEFLATE_APIS int mz_deflateInit(mz_streamp pStream, int level) { return mz_deflateInit2(pStream, level, MZ_DEFLATED, MZ_DEFAULT_WINDOW_BITS, 9, MZ_DEFAULT_STRATEGY); } int mz_deflateInit2(mz_streamp pStream, int level, int method, int window_bits, int mem_level, int strategy) { tdefl_compressor *pComp; mz_uint comp_flags = TDEFL_COMPUTE_ADLER32 | tdefl_create_comp_flags_from_zip_params(level, window_bits, strategy); if (!pStream) return MZ_STREAM_ERROR; if ((method != MZ_DEFLATED) || ((mem_level < 1) || (mem_level > 9)) || ((window_bits != MZ_DEFAULT_WINDOW_BITS) && (-window_bits != MZ_DEFAULT_WINDOW_BITS))) return MZ_PARAM_ERROR; pStream->data_type = 0; pStream->adler = MZ_ADLER32_INIT; pStream->msg = NULL; pStream->reserved = 0; pStream->total_in = 0; pStream->total_out = 0; if (!pStream->zalloc) pStream->zalloc = miniz_def_alloc_func; if (!pStream->zfree) pStream->zfree = miniz_def_free_func; pComp = (tdefl_compressor *)pStream->zalloc(pStream->opaque, 1, sizeof(tdefl_compressor)); if (!pComp) return MZ_MEM_ERROR; pStream->state = (struct mz_internal_state *)pComp; if (tdefl_init(pComp, NULL, NULL, comp_flags) != TDEFL_STATUS_OKAY) { mz_deflateEnd(pStream); return MZ_PARAM_ERROR; } return MZ_OK; } int mz_deflateReset(mz_streamp pStream) { if ((!pStream) || (!pStream->state) || (!pStream->zalloc) || (!pStream->zfree)) return MZ_STREAM_ERROR; pStream->total_in = pStream->total_out = 0; tdefl_init((tdefl_compressor *)pStream->state, NULL, NULL, ((tdefl_compressor *)pStream->state)->m_flags); return MZ_OK; } int mz_deflate(mz_streamp pStream, int flush) { size_t in_bytes, out_bytes; mz_ulong orig_total_in, orig_total_out; int mz_status = MZ_OK; if ((!pStream) || (!pStream->state) || (flush < 0) || (flush > MZ_FINISH) || (!pStream->next_out)) return MZ_STREAM_ERROR; if (!pStream->avail_out) return MZ_BUF_ERROR; if (flush == MZ_PARTIAL_FLUSH) flush = MZ_SYNC_FLUSH; if (((tdefl_compressor *)pStream->state)->m_prev_return_status == TDEFL_STATUS_DONE) return (flush == MZ_FINISH) ? MZ_STREAM_END : MZ_BUF_ERROR; orig_total_in = pStream->total_in; orig_total_out = pStream->total_out; for (;;) { tdefl_status defl_status; in_bytes = pStream->avail_in; out_bytes = pStream->avail_out; defl_status = tdefl_compress((tdefl_compressor *)pStream->state, pStream->next_in, &in_bytes, pStream->next_out, &out_bytes, (tdefl_flush)flush); pStream->next_in += (mz_uint)in_bytes; pStream->avail_in -= (mz_uint)in_bytes; pStream->total_in += (mz_uint)in_bytes; pStream->adler = tdefl_get_adler32((tdefl_compressor *)pStream->state); pStream->next_out += (mz_uint)out_bytes; pStream->avail_out -= (mz_uint)out_bytes; pStream->total_out += (mz_uint)out_bytes; if (defl_status < 0) { mz_status = MZ_STREAM_ERROR; break; } else if (defl_status == TDEFL_STATUS_DONE) { mz_status = MZ_STREAM_END; break; } else if (!pStream->avail_out) break; else if ((!pStream->avail_in) && (flush != MZ_FINISH)) { if ((flush) || (pStream->total_in != orig_total_in) || (pStream->total_out != orig_total_out)) break; return MZ_BUF_ERROR; /* Can't make forward progress without some input. */ } } return mz_status; } int mz_deflateEnd(mz_streamp pStream) { if (!pStream) return MZ_STREAM_ERROR; if (pStream->state) { pStream->zfree(pStream->opaque, pStream->state); pStream->state = NULL; } return MZ_OK; } mz_ulong mz_deflateBound(mz_streamp pStream, mz_ulong source_len) { (void)pStream; /* This is really over conservative. (And lame, but it's actually pretty tricky to compute a true upper bound given the way tdefl's blocking works.) */ return MZ_MAX(128 + (source_len * 110) / 100, 128 + source_len + ((source_len / (31 * 1024)) + 1) * 5); } int mz_compress2(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len, int level) { int status; mz_stream stream; memset(&stream, 0, sizeof(stream)); /* In case mz_ulong is 64-bits (argh I hate longs). */ if ((mz_uint64)(source_len | *pDest_len) > 0xFFFFFFFFU) return MZ_PARAM_ERROR; stream.next_in = pSource; stream.avail_in = (mz_uint32)source_len; stream.next_out = pDest; stream.avail_out = (mz_uint32)*pDest_len; status = mz_deflateInit(&stream, level); if (status != MZ_OK) return status; status = mz_deflate(&stream, MZ_FINISH); if (status != MZ_STREAM_END) { mz_deflateEnd(&stream); return (status == MZ_OK) ? MZ_BUF_ERROR : status; } *pDest_len = stream.total_out; return mz_deflateEnd(&stream); } int mz_compress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len) { return mz_compress2(pDest, pDest_len, pSource, source_len, MZ_DEFAULT_COMPRESSION); } mz_ulong mz_compressBound(mz_ulong source_len) { return mz_deflateBound(NULL, source_len); } #endif /*#ifndef MINIZ_NO_DEFLATE_APIS*/ #ifndef MINIZ_NO_INFLATE_APIS typedef struct { tinfl_decompressor m_decomp; mz_uint m_dict_ofs, m_dict_avail, m_first_call, m_has_flushed; int m_window_bits; mz_uint8 m_dict[TINFL_LZ_DICT_SIZE]; tinfl_status m_last_status; } inflate_state; int mz_inflateInit2(mz_streamp pStream, int window_bits) { inflate_state *pDecomp; if (!pStream) return MZ_STREAM_ERROR; if ((window_bits != MZ_DEFAULT_WINDOW_BITS) && (-window_bits != MZ_DEFAULT_WINDOW_BITS)) return MZ_PARAM_ERROR; pStream->data_type = 0; pStream->adler = 0; pStream->msg = NULL; pStream->total_in = 0; pStream->total_out = 0; pStream->reserved = 0; if (!pStream->zalloc) pStream->zalloc = miniz_def_alloc_func; if (!pStream->zfree) pStream->zfree = miniz_def_free_func; pDecomp = (inflate_state *)pStream->zalloc(pStream->opaque, 1, sizeof(inflate_state)); if (!pDecomp) return MZ_MEM_ERROR; pStream->state = (struct mz_internal_state *)pDecomp; tinfl_init(&pDecomp->m_decomp); pDecomp->m_dict_ofs = 0; pDecomp->m_dict_avail = 0; pDecomp->m_last_status = TINFL_STATUS_NEEDS_MORE_INPUT; pDecomp->m_first_call = 1; pDecomp->m_has_flushed = 0; pDecomp->m_window_bits = window_bits; return MZ_OK; } int mz_inflateInit(mz_streamp pStream) { return mz_inflateInit2(pStream, MZ_DEFAULT_WINDOW_BITS); } int mz_inflateReset(mz_streamp pStream) { inflate_state *pDecomp; if (!pStream) return MZ_STREAM_ERROR; pStream->data_type = 0; pStream->adler = 0; pStream->msg = NULL; pStream->total_in = 0; pStream->total_out = 0; pStream->reserved = 0; pDecomp = (inflate_state *)pStream->state; tinfl_init(&pDecomp->m_decomp); pDecomp->m_dict_ofs = 0; pDecomp->m_dict_avail = 0; pDecomp->m_last_status = TINFL_STATUS_NEEDS_MORE_INPUT; pDecomp->m_first_call = 1; pDecomp->m_has_flushed = 0; /* pDecomp->m_window_bits = window_bits */; return MZ_OK; } int mz_inflate(mz_streamp pStream, int flush) { inflate_state *pState; mz_uint n, first_call, decomp_flags = TINFL_FLAG_COMPUTE_ADLER32; size_t in_bytes, out_bytes, orig_avail_in; tinfl_status status; if ((!pStream) || (!pStream->state)) return MZ_STREAM_ERROR; if (flush == MZ_PARTIAL_FLUSH) flush = MZ_SYNC_FLUSH; if ((flush) && (flush != MZ_SYNC_FLUSH) && (flush != MZ_FINISH)) return MZ_STREAM_ERROR; pState = (inflate_state *)pStream->state; if (pState->m_window_bits > 0) decomp_flags |= TINFL_FLAG_PARSE_ZLIB_HEADER; orig_avail_in = pStream->avail_in; first_call = pState->m_first_call; pState->m_first_call = 0; if (pState->m_last_status < 0) return MZ_DATA_ERROR; if (pState->m_has_flushed && (flush != MZ_FINISH)) return MZ_STREAM_ERROR; pState->m_has_flushed |= (flush == MZ_FINISH); if ((flush == MZ_FINISH) && (first_call)) { /* MZ_FINISH on the first call implies that the input and output buffers are large enough to hold the entire compressed/decompressed file. */ decomp_flags |= TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF; in_bytes = pStream->avail_in; out_bytes = pStream->avail_out; status = tinfl_decompress(&pState->m_decomp, pStream->next_in, &in_bytes, pStream->next_out, pStream->next_out, &out_bytes, decomp_flags); pState->m_last_status = status; pStream->next_in += (mz_uint)in_bytes; pStream->avail_in -= (mz_uint)in_bytes; pStream->total_in += (mz_uint)in_bytes; pStream->adler = tinfl_get_adler32(&pState->m_decomp); pStream->next_out += (mz_uint)out_bytes; pStream->avail_out -= (mz_uint)out_bytes; pStream->total_out += (mz_uint)out_bytes; if (status < 0) return MZ_DATA_ERROR; else if (status != TINFL_STATUS_DONE) { pState->m_last_status = TINFL_STATUS_FAILED; return MZ_BUF_ERROR; } return MZ_STREAM_END; } /* flush != MZ_FINISH then we must assume there's more input. */ if (flush != MZ_FINISH) decomp_flags |= TINFL_FLAG_HAS_MORE_INPUT; if (pState->m_dict_avail) { n = MZ_MIN(pState->m_dict_avail, pStream->avail_out); memcpy(pStream->next_out, pState->m_dict + pState->m_dict_ofs, n); pStream->next_out += n; pStream->avail_out -= n; pStream->total_out += n; pState->m_dict_avail -= n; pState->m_dict_ofs = (pState->m_dict_ofs + n) & (TINFL_LZ_DICT_SIZE - 1); return ((pState->m_last_status == TINFL_STATUS_DONE) && (!pState->m_dict_avail)) ? MZ_STREAM_END : MZ_OK; } for (;;) { in_bytes = pStream->avail_in; out_bytes = TINFL_LZ_DICT_SIZE - pState->m_dict_ofs; status = tinfl_decompress(&pState->m_decomp, pStream->next_in, &in_bytes, pState->m_dict, pState->m_dict + pState->m_dict_ofs, &out_bytes, decomp_flags); pState->m_last_status = status; pStream->next_in += (mz_uint)in_bytes; pStream->avail_in -= (mz_uint)in_bytes; pStream->total_in += (mz_uint)in_bytes; pStream->adler = tinfl_get_adler32(&pState->m_decomp); pState->m_dict_avail = (mz_uint)out_bytes; n = MZ_MIN(pState->m_dict_avail, pStream->avail_out); memcpy(pStream->next_out, pState->m_dict + pState->m_dict_ofs, n); pStream->next_out += n; pStream->avail_out -= n; pStream->total_out += n; pState->m_dict_avail -= n; pState->m_dict_ofs = (pState->m_dict_ofs + n) & (TINFL_LZ_DICT_SIZE - 1); if (status < 0) return MZ_DATA_ERROR; /* Stream is corrupted (there could be some uncompressed data left in the output dictionary - oh well). */ else if ((status == TINFL_STATUS_NEEDS_MORE_INPUT) && (!orig_avail_in)) return MZ_BUF_ERROR; /* Signal caller that we can't make forward progress without supplying more input or by setting flush to MZ_FINISH. */ else if (flush == MZ_FINISH) { /* The output buffer MUST be large to hold the remaining uncompressed data when flush==MZ_FINISH. */ if (status == TINFL_STATUS_DONE) return pState->m_dict_avail ? MZ_BUF_ERROR : MZ_STREAM_END; /* status here must be TINFL_STATUS_HAS_MORE_OUTPUT, which means there's at least 1 more byte on the way. If there's no more room left in the output buffer then something is wrong. */ else if (!pStream->avail_out) return MZ_BUF_ERROR; } else if ((status == TINFL_STATUS_DONE) || (!pStream->avail_in) || (!pStream->avail_out) || (pState->m_dict_avail)) break; } return ((status == TINFL_STATUS_DONE) && (!pState->m_dict_avail)) ? MZ_STREAM_END : MZ_OK; } int mz_inflateEnd(mz_streamp pStream) { if (!pStream) return MZ_STREAM_ERROR; if (pStream->state) { pStream->zfree(pStream->opaque, pStream->state); pStream->state = NULL; } return MZ_OK; } int mz_uncompress2(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong *pSource_len) { mz_stream stream; int status; memset(&stream, 0, sizeof(stream)); /* In case mz_ulong is 64-bits (argh I hate longs). */ if ((mz_uint64)(*pSource_len | *pDest_len) > 0xFFFFFFFFU) return MZ_PARAM_ERROR; stream.next_in = pSource; stream.avail_in = (mz_uint32)*pSource_len; stream.next_out = pDest; stream.avail_out = (mz_uint32)*pDest_len; status = mz_inflateInit(&stream); if (status != MZ_OK) return status; status = mz_inflate(&stream, MZ_FINISH); *pSource_len = *pSource_len - stream.avail_in; if (status != MZ_STREAM_END) { mz_inflateEnd(&stream); return ((status == MZ_BUF_ERROR) && (!stream.avail_in)) ? MZ_DATA_ERROR : status; } *pDest_len = stream.total_out; return mz_inflateEnd(&stream); } int mz_uncompress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len) { return mz_uncompress2(pDest, pDest_len, pSource, &source_len); } #endif /*#ifndef MINIZ_NO_INFLATE_APIS*/ const char *mz_error(int err) { static struct { int m_err; const char *m_pDesc; } s_error_descs[] = { { MZ_OK, "" }, { MZ_STREAM_END, "stream end" }, { MZ_NEED_DICT, "need dictionary" }, { MZ_ERRNO, "file error" }, { MZ_STREAM_ERROR, "stream error" }, { MZ_DATA_ERROR, "data error" }, { MZ_MEM_ERROR, "out of memory" }, { MZ_BUF_ERROR, "buf error" }, { MZ_VERSION_ERROR, "version error" }, { MZ_PARAM_ERROR, "parameter error" } }; mz_uint i; for (i = 0; i < sizeof(s_error_descs) / sizeof(s_error_descs[0]); ++i) if (s_error_descs[i].m_err == err) return s_error_descs[i].m_pDesc; return NULL; } #endif /*MINIZ_NO_ZLIB_APIS */ #ifdef __cplusplus } #endif /* This is free and unencumbered software released into the public domain. Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means. In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain. We make this dedication for the benefit of the public at large and to the detriment of our heirs and successors. We intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. For more information, please refer to */ /************************************************************************** * * Copyright 2013-2014 RAD Game Tools and Valve Software * Copyright 2010-2014 Rich Geldreich and Tenacious Software LLC * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #ifndef MINIZ_NO_DEFLATE_APIS #ifdef __cplusplus extern "C" { #endif /* ------------------- Low-level Compression (independent from all decompression API's) */ /* Purposely making these tables static for faster init and thread safety. */ static const mz_uint16 s_tdefl_len_sym[256] = { 257, 258, 259, 260, 261, 262, 263, 264, 265, 265, 266, 266, 267, 267, 268, 268, 269, 269, 269, 269, 270, 270, 270, 270, 271, 271, 271, 271, 272, 272, 272, 272, 273, 273, 273, 273, 273, 273, 273, 273, 274, 274, 274, 274, 274, 274, 274, 274, 275, 275, 275, 275, 275, 275, 275, 275, 276, 276, 276, 276, 276, 276, 276, 276, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 285 }; static const mz_uint8 s_tdefl_len_extra[256] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0 }; static const mz_uint8 s_tdefl_small_dist_sym[512] = { 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17 }; static const mz_uint8 s_tdefl_small_dist_extra[512] = { 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 }; static const mz_uint8 s_tdefl_large_dist_sym[128] = { 0, 0, 18, 19, 20, 20, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 }; static const mz_uint8 s_tdefl_large_dist_extra[128] = { 0, 0, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13 }; /* Radix sorts tdefl_sym_freq[] array by 16-bit key m_key. Returns ptr to sorted values. */ typedef struct { mz_uint16 m_key, m_sym_index; } tdefl_sym_freq; static tdefl_sym_freq *tdefl_radix_sort_syms(mz_uint num_syms, tdefl_sym_freq *pSyms0, tdefl_sym_freq *pSyms1) { mz_uint32 total_passes = 2, pass_shift, pass, i, hist[256 * 2]; tdefl_sym_freq *pCur_syms = pSyms0, *pNew_syms = pSyms1; MZ_CLEAR_ARR(hist); for (i = 0; i < num_syms; i++) { mz_uint freq = pSyms0[i].m_key; hist[freq & 0xFF]++; hist[256 + ((freq >> 8) & 0xFF)]++; } while ((total_passes > 1) && (num_syms == hist[(total_passes - 1) * 256])) total_passes--; for (pass_shift = 0, pass = 0; pass < total_passes; pass++, pass_shift += 8) { const mz_uint32 *pHist = &hist[pass << 8]; mz_uint offsets[256], cur_ofs = 0; for (i = 0; i < 256; i++) { offsets[i] = cur_ofs; cur_ofs += pHist[i]; } for (i = 0; i < num_syms; i++) pNew_syms[offsets[(pCur_syms[i].m_key >> pass_shift) & 0xFF]++] = pCur_syms[i]; { tdefl_sym_freq *t = pCur_syms; pCur_syms = pNew_syms; pNew_syms = t; } } return pCur_syms; } /* tdefl_calculate_minimum_redundancy() originally written by: Alistair Moffat, alistair@cs.mu.oz.au, Jyrki Katajainen, jyrki@diku.dk, November 1996. */ static void tdefl_calculate_minimum_redundancy(tdefl_sym_freq *A, int n) { int root, leaf, next, avbl, used, dpth; if (n == 0) return; else if (n == 1) { A[0].m_key = 1; return; } A[0].m_key += A[1].m_key; root = 0; leaf = 2; for (next = 1; next < n - 1; next++) { if (leaf >= n || A[root].m_key < A[leaf].m_key) { A[next].m_key = A[root].m_key; A[root++].m_key = (mz_uint16)next; } else A[next].m_key = A[leaf++].m_key; if (leaf >= n || (root < next && A[root].m_key < A[leaf].m_key)) { A[next].m_key = (mz_uint16)(A[next].m_key + A[root].m_key); A[root++].m_key = (mz_uint16)next; } else A[next].m_key = (mz_uint16)(A[next].m_key + A[leaf++].m_key); } A[n - 2].m_key = 0; for (next = n - 3; next >= 0; next--) A[next].m_key = A[A[next].m_key].m_key + 1; avbl = 1; used = dpth = 0; root = n - 2; next = n - 1; while (avbl > 0) { while (root >= 0 && (int)A[root].m_key == dpth) { used++; root--; } while (avbl > used) { A[next--].m_key = (mz_uint16)(dpth); avbl--; } avbl = 2 * used; dpth++; used = 0; } } /* Limits canonical Huffman code table's max code size. */ enum { TDEFL_MAX_SUPPORTED_HUFF_CODESIZE = 32 }; static void tdefl_huffman_enforce_max_code_size(int *pNum_codes, int code_list_len, int max_code_size) { int i; mz_uint32 total = 0; if (code_list_len <= 1) return; for (i = max_code_size + 1; i <= TDEFL_MAX_SUPPORTED_HUFF_CODESIZE; i++) pNum_codes[max_code_size] += pNum_codes[i]; for (i = max_code_size; i > 0; i--) total += (((mz_uint32)pNum_codes[i]) << (max_code_size - i)); while (total != (1UL << max_code_size)) { pNum_codes[max_code_size]--; for (i = max_code_size - 1; i > 0; i--) if (pNum_codes[i]) { pNum_codes[i]--; pNum_codes[i + 1] += 2; break; } total--; } } static void tdefl_optimize_huffman_table(tdefl_compressor *d, int table_num, int table_len, int code_size_limit, int static_table) { int i, j, l, num_codes[1 + TDEFL_MAX_SUPPORTED_HUFF_CODESIZE]; mz_uint next_code[TDEFL_MAX_SUPPORTED_HUFF_CODESIZE + 1]; MZ_CLEAR_ARR(num_codes); if (static_table) { for (i = 0; i < table_len; i++) num_codes[d->m_huff_code_sizes[table_num][i]]++; } else { tdefl_sym_freq syms0[TDEFL_MAX_HUFF_SYMBOLS], syms1[TDEFL_MAX_HUFF_SYMBOLS], *pSyms; int num_used_syms = 0; const mz_uint16 *pSym_count = &d->m_huff_count[table_num][0]; for (i = 0; i < table_len; i++) if (pSym_count[i]) { syms0[num_used_syms].m_key = (mz_uint16)pSym_count[i]; syms0[num_used_syms++].m_sym_index = (mz_uint16)i; } pSyms = tdefl_radix_sort_syms(num_used_syms, syms0, syms1); tdefl_calculate_minimum_redundancy(pSyms, num_used_syms); for (i = 0; i < num_used_syms; i++) num_codes[pSyms[i].m_key]++; tdefl_huffman_enforce_max_code_size(num_codes, num_used_syms, code_size_limit); MZ_CLEAR_ARR(d->m_huff_code_sizes[table_num]); MZ_CLEAR_ARR(d->m_huff_codes[table_num]); for (i = 1, j = num_used_syms; i <= code_size_limit; i++) for (l = num_codes[i]; l > 0; l--) d->m_huff_code_sizes[table_num][pSyms[--j].m_sym_index] = (mz_uint8)(i); } next_code[1] = 0; for (j = 0, i = 2; i <= code_size_limit; i++) next_code[i] = j = ((j + num_codes[i - 1]) << 1); for (i = 0; i < table_len; i++) { mz_uint rev_code = 0, code, code_size; if ((code_size = d->m_huff_code_sizes[table_num][i]) == 0) continue; code = next_code[code_size]++; for (l = code_size; l > 0; l--, code >>= 1) rev_code = (rev_code << 1) | (code & 1); d->m_huff_codes[table_num][i] = (mz_uint16)rev_code; } } #define TDEFL_PUT_BITS(b, l) \ do \ { \ mz_uint bits = b; \ mz_uint len = l; \ MZ_ASSERT(bits <= ((1U << len) - 1U)); \ d->m_bit_buffer |= (bits << d->m_bits_in); \ d->m_bits_in += len; \ while (d->m_bits_in >= 8) \ { \ if (d->m_pOutput_buf < d->m_pOutput_buf_end) \ *d->m_pOutput_buf++ = (mz_uint8)(d->m_bit_buffer); \ d->m_bit_buffer >>= 8; \ d->m_bits_in -= 8; \ } \ } \ MZ_MACRO_END #define TDEFL_RLE_PREV_CODE_SIZE() \ { \ if (rle_repeat_count) \ { \ if (rle_repeat_count < 3) \ { \ d->m_huff_count[2][prev_code_size] = (mz_uint16)(d->m_huff_count[2][prev_code_size] + rle_repeat_count); \ while (rle_repeat_count--) \ packed_code_sizes[num_packed_code_sizes++] = prev_code_size; \ } \ else \ { \ d->m_huff_count[2][16] = (mz_uint16)(d->m_huff_count[2][16] + 1); \ packed_code_sizes[num_packed_code_sizes++] = 16; \ packed_code_sizes[num_packed_code_sizes++] = (mz_uint8)(rle_repeat_count - 3); \ } \ rle_repeat_count = 0; \ } \ } #define TDEFL_RLE_ZERO_CODE_SIZE() \ { \ if (rle_z_count) \ { \ if (rle_z_count < 3) \ { \ d->m_huff_count[2][0] = (mz_uint16)(d->m_huff_count[2][0] + rle_z_count); \ while (rle_z_count--) \ packed_code_sizes[num_packed_code_sizes++] = 0; \ } \ else if (rle_z_count <= 10) \ { \ d->m_huff_count[2][17] = (mz_uint16)(d->m_huff_count[2][17] + 1); \ packed_code_sizes[num_packed_code_sizes++] = 17; \ packed_code_sizes[num_packed_code_sizes++] = (mz_uint8)(rle_z_count - 3); \ } \ else \ { \ d->m_huff_count[2][18] = (mz_uint16)(d->m_huff_count[2][18] + 1); \ packed_code_sizes[num_packed_code_sizes++] = 18; \ packed_code_sizes[num_packed_code_sizes++] = (mz_uint8)(rle_z_count - 11); \ } \ rle_z_count = 0; \ } \ } static const mz_uint8 s_tdefl_packed_code_size_syms_swizzle[] = { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 }; static void tdefl_start_dynamic_block(tdefl_compressor *d) { int num_lit_codes, num_dist_codes, num_bit_lengths; mz_uint i, total_code_sizes_to_pack, num_packed_code_sizes, rle_z_count, rle_repeat_count, packed_code_sizes_index; mz_uint8 code_sizes_to_pack[TDEFL_MAX_HUFF_SYMBOLS_0 + TDEFL_MAX_HUFF_SYMBOLS_1], packed_code_sizes[TDEFL_MAX_HUFF_SYMBOLS_0 + TDEFL_MAX_HUFF_SYMBOLS_1], prev_code_size = 0xFF; d->m_huff_count[0][256] = 1; tdefl_optimize_huffman_table(d, 0, TDEFL_MAX_HUFF_SYMBOLS_0, 15, MZ_FALSE); tdefl_optimize_huffman_table(d, 1, TDEFL_MAX_HUFF_SYMBOLS_1, 15, MZ_FALSE); for (num_lit_codes = 286; num_lit_codes > 257; num_lit_codes--) if (d->m_huff_code_sizes[0][num_lit_codes - 1]) break; for (num_dist_codes = 30; num_dist_codes > 1; num_dist_codes--) if (d->m_huff_code_sizes[1][num_dist_codes - 1]) break; memcpy(code_sizes_to_pack, &d->m_huff_code_sizes[0][0], num_lit_codes); memcpy(code_sizes_to_pack + num_lit_codes, &d->m_huff_code_sizes[1][0], num_dist_codes); total_code_sizes_to_pack = num_lit_codes + num_dist_codes; num_packed_code_sizes = 0; rle_z_count = 0; rle_repeat_count = 0; memset(&d->m_huff_count[2][0], 0, sizeof(d->m_huff_count[2][0]) * TDEFL_MAX_HUFF_SYMBOLS_2); for (i = 0; i < total_code_sizes_to_pack; i++) { mz_uint8 code_size = code_sizes_to_pack[i]; if (!code_size) { TDEFL_RLE_PREV_CODE_SIZE(); if (++rle_z_count == 138) { TDEFL_RLE_ZERO_CODE_SIZE(); } } else { TDEFL_RLE_ZERO_CODE_SIZE(); if (code_size != prev_code_size) { TDEFL_RLE_PREV_CODE_SIZE(); d->m_huff_count[2][code_size] = (mz_uint16)(d->m_huff_count[2][code_size] + 1); packed_code_sizes[num_packed_code_sizes++] = code_size; } else if (++rle_repeat_count == 6) { TDEFL_RLE_PREV_CODE_SIZE(); } } prev_code_size = code_size; } if (rle_repeat_count) { TDEFL_RLE_PREV_CODE_SIZE(); } else { TDEFL_RLE_ZERO_CODE_SIZE(); } tdefl_optimize_huffman_table(d, 2, TDEFL_MAX_HUFF_SYMBOLS_2, 7, MZ_FALSE); TDEFL_PUT_BITS(2, 2); TDEFL_PUT_BITS(num_lit_codes - 257, 5); TDEFL_PUT_BITS(num_dist_codes - 1, 5); for (num_bit_lengths = 18; num_bit_lengths >= 0; num_bit_lengths--) if (d->m_huff_code_sizes[2][s_tdefl_packed_code_size_syms_swizzle[num_bit_lengths]]) break; num_bit_lengths = MZ_MAX(4, (num_bit_lengths + 1)); TDEFL_PUT_BITS(num_bit_lengths - 4, 4); for (i = 0; (int)i < num_bit_lengths; i++) TDEFL_PUT_BITS(d->m_huff_code_sizes[2][s_tdefl_packed_code_size_syms_swizzle[i]], 3); for (packed_code_sizes_index = 0; packed_code_sizes_index < num_packed_code_sizes;) { mz_uint code = packed_code_sizes[packed_code_sizes_index++]; MZ_ASSERT(code < TDEFL_MAX_HUFF_SYMBOLS_2); TDEFL_PUT_BITS(d->m_huff_codes[2][code], d->m_huff_code_sizes[2][code]); if (code >= 16) TDEFL_PUT_BITS(packed_code_sizes[packed_code_sizes_index++], "\02\03\07"[code - 16]); } } static void tdefl_start_static_block(tdefl_compressor *d) { mz_uint i; mz_uint8 *p = &d->m_huff_code_sizes[0][0]; for (i = 0; i <= 143; ++i) *p++ = 8; for (; i <= 255; ++i) *p++ = 9; for (; i <= 279; ++i) *p++ = 7; for (; i <= 287; ++i) *p++ = 8; memset(d->m_huff_code_sizes[1], 5, 32); tdefl_optimize_huffman_table(d, 0, 288, 15, MZ_TRUE); tdefl_optimize_huffman_table(d, 1, 32, 15, MZ_TRUE); TDEFL_PUT_BITS(1, 2); } static const mz_uint mz_bitmasks[17] = { 0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F, 0x00FF, 0x01FF, 0x03FF, 0x07FF, 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF }; #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN && MINIZ_HAS_64BIT_REGISTERS static mz_bool tdefl_compress_lz_codes(tdefl_compressor *d) { mz_uint flags; mz_uint8 *pLZ_codes; mz_uint8 *pOutput_buf = d->m_pOutput_buf; mz_uint8 *pLZ_code_buf_end = d->m_pLZ_code_buf; mz_uint64 bit_buffer = d->m_bit_buffer; mz_uint bits_in = d->m_bits_in; #define TDEFL_PUT_BITS_FAST(b, l) \ { \ bit_buffer |= (((mz_uint64)(b)) << bits_in); \ bits_in += (l); \ } flags = 1; for (pLZ_codes = d->m_lz_code_buf; pLZ_codes < pLZ_code_buf_end; flags >>= 1) { if (flags == 1) flags = *pLZ_codes++ | 0x100; if (flags & 1) { mz_uint s0, s1, n0, n1, sym, num_extra_bits; mz_uint match_len = pLZ_codes[0]; mz_uint match_dist = (pLZ_codes[1] | (pLZ_codes[2] << 8)); pLZ_codes += 3; MZ_ASSERT(d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][s_tdefl_len_sym[match_len]], d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); TDEFL_PUT_BITS_FAST(match_len & mz_bitmasks[s_tdefl_len_extra[match_len]], s_tdefl_len_extra[match_len]); /* This sequence coaxes MSVC into using cmov's vs. jmp's. */ s0 = s_tdefl_small_dist_sym[match_dist & 511]; n0 = s_tdefl_small_dist_extra[match_dist & 511]; s1 = s_tdefl_large_dist_sym[match_dist >> 8]; n1 = s_tdefl_large_dist_extra[match_dist >> 8]; sym = (match_dist < 512) ? s0 : s1; num_extra_bits = (match_dist < 512) ? n0 : n1; MZ_ASSERT(d->m_huff_code_sizes[1][sym]); TDEFL_PUT_BITS_FAST(d->m_huff_codes[1][sym], d->m_huff_code_sizes[1][sym]); TDEFL_PUT_BITS_FAST(match_dist & mz_bitmasks[num_extra_bits], num_extra_bits); } else { mz_uint lit = *pLZ_codes++; MZ_ASSERT(d->m_huff_code_sizes[0][lit]); TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]); if (((flags & 2) == 0) && (pLZ_codes < pLZ_code_buf_end)) { flags >>= 1; lit = *pLZ_codes++; MZ_ASSERT(d->m_huff_code_sizes[0][lit]); TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]); if (((flags & 2) == 0) && (pLZ_codes < pLZ_code_buf_end)) { flags >>= 1; lit = *pLZ_codes++; MZ_ASSERT(d->m_huff_code_sizes[0][lit]); TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]); } } } if (pOutput_buf >= d->m_pOutput_buf_end) return MZ_FALSE; memcpy(pOutput_buf, &bit_buffer, sizeof(mz_uint64)); pOutput_buf += (bits_in >> 3); bit_buffer >>= (bits_in & ~7); bits_in &= 7; } #undef TDEFL_PUT_BITS_FAST d->m_pOutput_buf = pOutput_buf; d->m_bits_in = 0; d->m_bit_buffer = 0; while (bits_in) { mz_uint32 n = MZ_MIN(bits_in, 16); TDEFL_PUT_BITS((mz_uint)bit_buffer & mz_bitmasks[n], n); bit_buffer >>= n; bits_in -= n; } TDEFL_PUT_BITS(d->m_huff_codes[0][256], d->m_huff_code_sizes[0][256]); return (d->m_pOutput_buf < d->m_pOutput_buf_end); } #else static mz_bool tdefl_compress_lz_codes(tdefl_compressor *d) { mz_uint flags; mz_uint8 *pLZ_codes; flags = 1; for (pLZ_codes = d->m_lz_code_buf; pLZ_codes < d->m_pLZ_code_buf; flags >>= 1) { if (flags == 1) flags = *pLZ_codes++ | 0x100; if (flags & 1) { mz_uint sym, num_extra_bits; mz_uint match_len = pLZ_codes[0], match_dist = (pLZ_codes[1] | (pLZ_codes[2] << 8)); pLZ_codes += 3; MZ_ASSERT(d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); TDEFL_PUT_BITS(d->m_huff_codes[0][s_tdefl_len_sym[match_len]], d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); TDEFL_PUT_BITS(match_len & mz_bitmasks[s_tdefl_len_extra[match_len]], s_tdefl_len_extra[match_len]); if (match_dist < 512) { sym = s_tdefl_small_dist_sym[match_dist]; num_extra_bits = s_tdefl_small_dist_extra[match_dist]; } else { sym = s_tdefl_large_dist_sym[match_dist >> 8]; num_extra_bits = s_tdefl_large_dist_extra[match_dist >> 8]; } MZ_ASSERT(d->m_huff_code_sizes[1][sym]); TDEFL_PUT_BITS(d->m_huff_codes[1][sym], d->m_huff_code_sizes[1][sym]); TDEFL_PUT_BITS(match_dist & mz_bitmasks[num_extra_bits], num_extra_bits); } else { mz_uint lit = *pLZ_codes++; MZ_ASSERT(d->m_huff_code_sizes[0][lit]); TDEFL_PUT_BITS(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]); } } TDEFL_PUT_BITS(d->m_huff_codes[0][256], d->m_huff_code_sizes[0][256]); return (d->m_pOutput_buf < d->m_pOutput_buf_end); } #endif /* MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN && MINIZ_HAS_64BIT_REGISTERS */ static mz_bool tdefl_compress_block(tdefl_compressor *d, mz_bool static_block) { if (static_block) tdefl_start_static_block(d); else tdefl_start_dynamic_block(d); return tdefl_compress_lz_codes(d); } static const mz_uint s_tdefl_num_probes[11]; static int tdefl_flush_block(tdefl_compressor *d, int flush) { mz_uint saved_bit_buf, saved_bits_in; mz_uint8 *pSaved_output_buf; mz_bool comp_block_succeeded = MZ_FALSE; int n, use_raw_block = ((d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS) != 0) && (d->m_lookahead_pos - d->m_lz_code_buf_dict_pos) <= d->m_dict_size; mz_uint8 *pOutput_buf_start = ((d->m_pPut_buf_func == NULL) && ((*d->m_pOut_buf_size - d->m_out_buf_ofs) >= TDEFL_OUT_BUF_SIZE)) ? ((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs) : d->m_output_buf; d->m_pOutput_buf = pOutput_buf_start; d->m_pOutput_buf_end = d->m_pOutput_buf + TDEFL_OUT_BUF_SIZE - 16; MZ_ASSERT(!d->m_output_flush_remaining); d->m_output_flush_ofs = 0; d->m_output_flush_remaining = 0; *d->m_pLZ_flags = (mz_uint8)(*d->m_pLZ_flags >> d->m_num_flags_left); d->m_pLZ_code_buf -= (d->m_num_flags_left == 8); if ((d->m_flags & TDEFL_WRITE_ZLIB_HEADER) && (!d->m_block_index)) { const mz_uint8 cmf = 0x78; mz_uint8 flg, flevel = 3; mz_uint header, i, mz_un = sizeof(s_tdefl_num_probes) / sizeof(mz_uint); /* Determine compression level by reversing the process in tdefl_create_comp_flags_from_zip_params() */ for (i = 0; i < mz_un; i++) if (s_tdefl_num_probes[i] == (d->m_flags & 0xFFF)) break; if (i < 2) flevel = 0; else if (i < 6) flevel = 1; else if (i == 6) flevel = 2; header = cmf << 8 | (flevel << 6); header += 31 - (header % 31); flg = header & 0xFF; TDEFL_PUT_BITS(cmf, 8); TDEFL_PUT_BITS(flg, 8); } TDEFL_PUT_BITS(flush == TDEFL_FINISH, 1); pSaved_output_buf = d->m_pOutput_buf; saved_bit_buf = d->m_bit_buffer; saved_bits_in = d->m_bits_in; if (!use_raw_block) comp_block_succeeded = tdefl_compress_block(d, (d->m_flags & TDEFL_FORCE_ALL_STATIC_BLOCKS) || (d->m_total_lz_bytes < 48)); /* If the block gets expanded, forget the current contents of the output buffer and send a raw block instead. */ if (((use_raw_block) || ((d->m_total_lz_bytes) && ((d->m_pOutput_buf - pSaved_output_buf + 1U) >= d->m_total_lz_bytes))) && ((d->m_lookahead_pos - d->m_lz_code_buf_dict_pos) <= d->m_dict_size)) { mz_uint i; d->m_pOutput_buf = pSaved_output_buf; d->m_bit_buffer = saved_bit_buf, d->m_bits_in = saved_bits_in; TDEFL_PUT_BITS(0, 2); if (d->m_bits_in) { TDEFL_PUT_BITS(0, 8 - d->m_bits_in); } for (i = 2; i; --i, d->m_total_lz_bytes ^= 0xFFFF) { TDEFL_PUT_BITS(d->m_total_lz_bytes & 0xFFFF, 16); } for (i = 0; i < d->m_total_lz_bytes; ++i) { TDEFL_PUT_BITS(d->m_dict[(d->m_lz_code_buf_dict_pos + i) & TDEFL_LZ_DICT_SIZE_MASK], 8); } } /* Check for the extremely unlikely (if not impossible) case of the compressed block not fitting into the output buffer when using dynamic codes. */ else if (!comp_block_succeeded) { d->m_pOutput_buf = pSaved_output_buf; d->m_bit_buffer = saved_bit_buf, d->m_bits_in = saved_bits_in; tdefl_compress_block(d, MZ_TRUE); } if (flush) { if (flush == TDEFL_FINISH) { if (d->m_bits_in) { TDEFL_PUT_BITS(0, 8 - d->m_bits_in); } if (d->m_flags & TDEFL_WRITE_ZLIB_HEADER) { mz_uint i, a = d->m_adler32; for (i = 0; i < 4; i++) { TDEFL_PUT_BITS((a >> 24) & 0xFF, 8); a <<= 8; } } } else { mz_uint i, z = 0; TDEFL_PUT_BITS(0, 3); if (d->m_bits_in) { TDEFL_PUT_BITS(0, 8 - d->m_bits_in); } for (i = 2; i; --i, z ^= 0xFFFF) { TDEFL_PUT_BITS(z & 0xFFFF, 16); } } } MZ_ASSERT(d->m_pOutput_buf < d->m_pOutput_buf_end); memset(&d->m_huff_count[0][0], 0, sizeof(d->m_huff_count[0][0]) * TDEFL_MAX_HUFF_SYMBOLS_0); memset(&d->m_huff_count[1][0], 0, sizeof(d->m_huff_count[1][0]) * TDEFL_MAX_HUFF_SYMBOLS_1); d->m_pLZ_code_buf = d->m_lz_code_buf + 1; d->m_pLZ_flags = d->m_lz_code_buf; d->m_num_flags_left = 8; d->m_lz_code_buf_dict_pos += d->m_total_lz_bytes; d->m_total_lz_bytes = 0; d->m_block_index++; if ((n = (int)(d->m_pOutput_buf - pOutput_buf_start)) != 0) { if (d->m_pPut_buf_func) { *d->m_pIn_buf_size = d->m_pSrc - (const mz_uint8 *)d->m_pIn_buf; if (!(*d->m_pPut_buf_func)(d->m_output_buf, n, d->m_pPut_buf_user)) return (d->m_prev_return_status = TDEFL_STATUS_PUT_BUF_FAILED); } else if (pOutput_buf_start == d->m_output_buf) { int bytes_to_copy = (int)MZ_MIN((size_t)n, (size_t)(*d->m_pOut_buf_size - d->m_out_buf_ofs)); memcpy((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs, d->m_output_buf, bytes_to_copy); d->m_out_buf_ofs += bytes_to_copy; if ((n -= bytes_to_copy) != 0) { d->m_output_flush_ofs = bytes_to_copy; d->m_output_flush_remaining = n; } } else { d->m_out_buf_ofs += n; } } return d->m_output_flush_remaining; } #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES #ifdef MINIZ_UNALIGNED_USE_MEMCPY static mz_uint16 TDEFL_READ_UNALIGNED_WORD(const mz_uint8* p) { mz_uint16 ret; memcpy(&ret, p, sizeof(mz_uint16)); return ret; } static mz_uint16 TDEFL_READ_UNALIGNED_WORD2(const mz_uint16* p) { mz_uint16 ret; memcpy(&ret, p, sizeof(mz_uint16)); return ret; } #else #define TDEFL_READ_UNALIGNED_WORD(p) *(const mz_uint16 *)(p) #define TDEFL_READ_UNALIGNED_WORD2(p) *(const mz_uint16 *)(p) #endif static MZ_FORCEINLINE void tdefl_find_match(tdefl_compressor *d, mz_uint lookahead_pos, mz_uint max_dist, mz_uint max_match_len, mz_uint *pMatch_dist, mz_uint *pMatch_len) { mz_uint dist, pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK, match_len = *pMatch_len, probe_pos = pos, next_probe_pos, probe_len; mz_uint num_probes_left = d->m_max_probes[match_len >= 32]; const mz_uint16 *s = (const mz_uint16 *)(d->m_dict + pos), *p, *q; mz_uint16 c01 = TDEFL_READ_UNALIGNED_WORD(&d->m_dict[pos + match_len - 1]), s01 = TDEFL_READ_UNALIGNED_WORD2(s); MZ_ASSERT(max_match_len <= TDEFL_MAX_MATCH_LEN); if (max_match_len <= match_len) return; for (;;) { for (;;) { if (--num_probes_left == 0) return; #define TDEFL_PROBE \ next_probe_pos = d->m_next[probe_pos]; \ if ((!next_probe_pos) || ((dist = (mz_uint16)(lookahead_pos - next_probe_pos)) > max_dist)) \ return; \ probe_pos = next_probe_pos & TDEFL_LZ_DICT_SIZE_MASK; \ if (TDEFL_READ_UNALIGNED_WORD(&d->m_dict[probe_pos + match_len - 1]) == c01) \ break; TDEFL_PROBE; TDEFL_PROBE; TDEFL_PROBE; } if (!dist) break; q = (const mz_uint16 *)(d->m_dict + probe_pos); if (TDEFL_READ_UNALIGNED_WORD2(q) != s01) continue; p = s; probe_len = 32; do { } while ((TDEFL_READ_UNALIGNED_WORD2(++p) == TDEFL_READ_UNALIGNED_WORD2(++q)) && (TDEFL_READ_UNALIGNED_WORD2(++p) == TDEFL_READ_UNALIGNED_WORD2(++q)) && (TDEFL_READ_UNALIGNED_WORD2(++p) == TDEFL_READ_UNALIGNED_WORD2(++q)) && (TDEFL_READ_UNALIGNED_WORD2(++p) == TDEFL_READ_UNALIGNED_WORD2(++q)) && (--probe_len > 0)); if (!probe_len) { *pMatch_dist = dist; *pMatch_len = MZ_MIN(max_match_len, (mz_uint)TDEFL_MAX_MATCH_LEN); break; } else if ((probe_len = ((mz_uint)(p - s) * 2) + (mz_uint)(*(const mz_uint8 *)p == *(const mz_uint8 *)q)) > match_len) { *pMatch_dist = dist; if ((*pMatch_len = match_len = MZ_MIN(max_match_len, probe_len)) == max_match_len) break; c01 = TDEFL_READ_UNALIGNED_WORD(&d->m_dict[pos + match_len - 1]); } } } #else static MZ_FORCEINLINE void tdefl_find_match(tdefl_compressor *d, mz_uint lookahead_pos, mz_uint max_dist, mz_uint max_match_len, mz_uint *pMatch_dist, mz_uint *pMatch_len) { mz_uint dist, pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK, match_len = *pMatch_len, probe_pos = pos, next_probe_pos, probe_len; mz_uint num_probes_left = d->m_max_probes[match_len >= 32]; const mz_uint8 *s = d->m_dict + pos, *p, *q; mz_uint8 c0 = d->m_dict[pos + match_len], c1 = d->m_dict[pos + match_len - 1]; MZ_ASSERT(max_match_len <= TDEFL_MAX_MATCH_LEN); if (max_match_len <= match_len) return; for (;;) { for (;;) { if (--num_probes_left == 0) return; #define TDEFL_PROBE \ next_probe_pos = d->m_next[probe_pos]; \ if ((!next_probe_pos) || ((dist = (mz_uint16)(lookahead_pos - next_probe_pos)) > max_dist)) \ return; \ probe_pos = next_probe_pos & TDEFL_LZ_DICT_SIZE_MASK; \ if ((d->m_dict[probe_pos + match_len] == c0) && (d->m_dict[probe_pos + match_len - 1] == c1)) \ break; TDEFL_PROBE; TDEFL_PROBE; TDEFL_PROBE; } if (!dist) break; p = s; q = d->m_dict + probe_pos; for (probe_len = 0; probe_len < max_match_len; probe_len++) if (*p++ != *q++) break; if (probe_len > match_len) { *pMatch_dist = dist; if ((*pMatch_len = match_len = probe_len) == max_match_len) return; c0 = d->m_dict[pos + match_len]; c1 = d->m_dict[pos + match_len - 1]; } } } #endif /* #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES */ #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN #ifdef MINIZ_UNALIGNED_USE_MEMCPY static mz_uint32 TDEFL_READ_UNALIGNED_WORD32(const mz_uint8* p) { mz_uint32 ret; memcpy(&ret, p, sizeof(mz_uint32)); return ret; } #else #define TDEFL_READ_UNALIGNED_WORD32(p) *(const mz_uint32 *)(p) #endif static mz_bool tdefl_compress_fast(tdefl_compressor *d) { /* Faster, minimally featured LZRW1-style match+parse loop with better register utilization. Intended for applications where raw throughput is valued more highly than ratio. */ mz_uint lookahead_pos = d->m_lookahead_pos, lookahead_size = d->m_lookahead_size, dict_size = d->m_dict_size, total_lz_bytes = d->m_total_lz_bytes, num_flags_left = d->m_num_flags_left; mz_uint8 *pLZ_code_buf = d->m_pLZ_code_buf, *pLZ_flags = d->m_pLZ_flags; mz_uint cur_pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK; while ((d->m_src_buf_left) || ((d->m_flush) && (lookahead_size))) { const mz_uint TDEFL_COMP_FAST_LOOKAHEAD_SIZE = 4096; mz_uint dst_pos = (lookahead_pos + lookahead_size) & TDEFL_LZ_DICT_SIZE_MASK; mz_uint num_bytes_to_process = (mz_uint)MZ_MIN(d->m_src_buf_left, TDEFL_COMP_FAST_LOOKAHEAD_SIZE - lookahead_size); d->m_src_buf_left -= num_bytes_to_process; lookahead_size += num_bytes_to_process; while (num_bytes_to_process) { mz_uint32 n = MZ_MIN(TDEFL_LZ_DICT_SIZE - dst_pos, num_bytes_to_process); memcpy(d->m_dict + dst_pos, d->m_pSrc, n); if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1)) memcpy(d->m_dict + TDEFL_LZ_DICT_SIZE + dst_pos, d->m_pSrc, MZ_MIN(n, (TDEFL_MAX_MATCH_LEN - 1) - dst_pos)); d->m_pSrc += n; dst_pos = (dst_pos + n) & TDEFL_LZ_DICT_SIZE_MASK; num_bytes_to_process -= n; } dict_size = MZ_MIN(TDEFL_LZ_DICT_SIZE - lookahead_size, dict_size); if ((!d->m_flush) && (lookahead_size < TDEFL_COMP_FAST_LOOKAHEAD_SIZE)) break; while (lookahead_size >= 4) { mz_uint cur_match_dist, cur_match_len = 1; mz_uint8 *pCur_dict = d->m_dict + cur_pos; mz_uint first_trigram = TDEFL_READ_UNALIGNED_WORD32(pCur_dict) & 0xFFFFFF; mz_uint hash = (first_trigram ^ (first_trigram >> (24 - (TDEFL_LZ_HASH_BITS - 8)))) & TDEFL_LEVEL1_HASH_SIZE_MASK; mz_uint probe_pos = d->m_hash[hash]; d->m_hash[hash] = (mz_uint16)lookahead_pos; if (((cur_match_dist = (mz_uint16)(lookahead_pos - probe_pos)) <= dict_size) && ((TDEFL_READ_UNALIGNED_WORD32(d->m_dict + (probe_pos &= TDEFL_LZ_DICT_SIZE_MASK)) & 0xFFFFFF) == first_trigram)) { const mz_uint16 *p = (const mz_uint16 *)pCur_dict; const mz_uint16 *q = (const mz_uint16 *)(d->m_dict + probe_pos); mz_uint32 probe_len = 32; do { } while ((TDEFL_READ_UNALIGNED_WORD2(++p) == TDEFL_READ_UNALIGNED_WORD2(++q)) && (TDEFL_READ_UNALIGNED_WORD2(++p) == TDEFL_READ_UNALIGNED_WORD2(++q)) && (TDEFL_READ_UNALIGNED_WORD2(++p) == TDEFL_READ_UNALIGNED_WORD2(++q)) && (TDEFL_READ_UNALIGNED_WORD2(++p) == TDEFL_READ_UNALIGNED_WORD2(++q)) && (--probe_len > 0)); cur_match_len = ((mz_uint)(p - (const mz_uint16 *)pCur_dict) * 2) + (mz_uint)(*(const mz_uint8 *)p == *(const mz_uint8 *)q); if (!probe_len) cur_match_len = cur_match_dist ? TDEFL_MAX_MATCH_LEN : 0; if ((cur_match_len < TDEFL_MIN_MATCH_LEN) || ((cur_match_len == TDEFL_MIN_MATCH_LEN) && (cur_match_dist >= 8U * 1024U))) { cur_match_len = 1; *pLZ_code_buf++ = (mz_uint8)first_trigram; *pLZ_flags = (mz_uint8)(*pLZ_flags >> 1); d->m_huff_count[0][(mz_uint8)first_trigram]++; } else { mz_uint32 s0, s1; cur_match_len = MZ_MIN(cur_match_len, lookahead_size); MZ_ASSERT((cur_match_len >= TDEFL_MIN_MATCH_LEN) && (cur_match_dist >= 1) && (cur_match_dist <= TDEFL_LZ_DICT_SIZE)); cur_match_dist--; pLZ_code_buf[0] = (mz_uint8)(cur_match_len - TDEFL_MIN_MATCH_LEN); #ifdef MINIZ_UNALIGNED_USE_MEMCPY memcpy(&pLZ_code_buf[1], &cur_match_dist, sizeof(cur_match_dist)); #else *(mz_uint16 *)(&pLZ_code_buf[1]) = (mz_uint16)cur_match_dist; #endif pLZ_code_buf += 3; *pLZ_flags = (mz_uint8)((*pLZ_flags >> 1) | 0x80); s0 = s_tdefl_small_dist_sym[cur_match_dist & 511]; s1 = s_tdefl_large_dist_sym[cur_match_dist >> 8]; d->m_huff_count[1][(cur_match_dist < 512) ? s0 : s1]++; d->m_huff_count[0][s_tdefl_len_sym[cur_match_len - TDEFL_MIN_MATCH_LEN]]++; } } else { *pLZ_code_buf++ = (mz_uint8)first_trigram; *pLZ_flags = (mz_uint8)(*pLZ_flags >> 1); d->m_huff_count[0][(mz_uint8)first_trigram]++; } if (--num_flags_left == 0) { num_flags_left = 8; pLZ_flags = pLZ_code_buf++; } total_lz_bytes += cur_match_len; lookahead_pos += cur_match_len; dict_size = MZ_MIN(dict_size + cur_match_len, (mz_uint)TDEFL_LZ_DICT_SIZE); cur_pos = (cur_pos + cur_match_len) & TDEFL_LZ_DICT_SIZE_MASK; MZ_ASSERT(lookahead_size >= cur_match_len); lookahead_size -= cur_match_len; if (pLZ_code_buf > &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) { int n; d->m_lookahead_pos = lookahead_pos; d->m_lookahead_size = lookahead_size; d->m_dict_size = dict_size; d->m_total_lz_bytes = total_lz_bytes; d->m_pLZ_code_buf = pLZ_code_buf; d->m_pLZ_flags = pLZ_flags; d->m_num_flags_left = num_flags_left; if ((n = tdefl_flush_block(d, 0)) != 0) return (n < 0) ? MZ_FALSE : MZ_TRUE; total_lz_bytes = d->m_total_lz_bytes; pLZ_code_buf = d->m_pLZ_code_buf; pLZ_flags = d->m_pLZ_flags; num_flags_left = d->m_num_flags_left; } } while (lookahead_size) { mz_uint8 lit = d->m_dict[cur_pos]; total_lz_bytes++; *pLZ_code_buf++ = lit; *pLZ_flags = (mz_uint8)(*pLZ_flags >> 1); if (--num_flags_left == 0) { num_flags_left = 8; pLZ_flags = pLZ_code_buf++; } d->m_huff_count[0][lit]++; lookahead_pos++; dict_size = MZ_MIN(dict_size + 1, (mz_uint)TDEFL_LZ_DICT_SIZE); cur_pos = (cur_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK; lookahead_size--; if (pLZ_code_buf > &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) { int n; d->m_lookahead_pos = lookahead_pos; d->m_lookahead_size = lookahead_size; d->m_dict_size = dict_size; d->m_total_lz_bytes = total_lz_bytes; d->m_pLZ_code_buf = pLZ_code_buf; d->m_pLZ_flags = pLZ_flags; d->m_num_flags_left = num_flags_left; if ((n = tdefl_flush_block(d, 0)) != 0) return (n < 0) ? MZ_FALSE : MZ_TRUE; total_lz_bytes = d->m_total_lz_bytes; pLZ_code_buf = d->m_pLZ_code_buf; pLZ_flags = d->m_pLZ_flags; num_flags_left = d->m_num_flags_left; } } } d->m_lookahead_pos = lookahead_pos; d->m_lookahead_size = lookahead_size; d->m_dict_size = dict_size; d->m_total_lz_bytes = total_lz_bytes; d->m_pLZ_code_buf = pLZ_code_buf; d->m_pLZ_flags = pLZ_flags; d->m_num_flags_left = num_flags_left; return MZ_TRUE; } #endif /* MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN */ static MZ_FORCEINLINE void tdefl_record_literal(tdefl_compressor *d, mz_uint8 lit) { d->m_total_lz_bytes++; *d->m_pLZ_code_buf++ = lit; *d->m_pLZ_flags = (mz_uint8)(*d->m_pLZ_flags >> 1); if (--d->m_num_flags_left == 0) { d->m_num_flags_left = 8; d->m_pLZ_flags = d->m_pLZ_code_buf++; } d->m_huff_count[0][lit]++; } static MZ_FORCEINLINE void tdefl_record_match(tdefl_compressor *d, mz_uint match_len, mz_uint match_dist) { mz_uint32 s0, s1; MZ_ASSERT((match_len >= TDEFL_MIN_MATCH_LEN) && (match_dist >= 1) && (match_dist <= TDEFL_LZ_DICT_SIZE)); d->m_total_lz_bytes += match_len; d->m_pLZ_code_buf[0] = (mz_uint8)(match_len - TDEFL_MIN_MATCH_LEN); match_dist -= 1; d->m_pLZ_code_buf[1] = (mz_uint8)(match_dist & 0xFF); d->m_pLZ_code_buf[2] = (mz_uint8)(match_dist >> 8); d->m_pLZ_code_buf += 3; *d->m_pLZ_flags = (mz_uint8)((*d->m_pLZ_flags >> 1) | 0x80); if (--d->m_num_flags_left == 0) { d->m_num_flags_left = 8; d->m_pLZ_flags = d->m_pLZ_code_buf++; } s0 = s_tdefl_small_dist_sym[match_dist & 511]; s1 = s_tdefl_large_dist_sym[(match_dist >> 8) & 127]; d->m_huff_count[1][(match_dist < 512) ? s0 : s1]++; d->m_huff_count[0][s_tdefl_len_sym[match_len - TDEFL_MIN_MATCH_LEN]]++; } static mz_bool tdefl_compress_normal(tdefl_compressor *d) { const mz_uint8 *pSrc = d->m_pSrc; size_t src_buf_left = d->m_src_buf_left; tdefl_flush flush = d->m_flush; while ((src_buf_left) || ((flush) && (d->m_lookahead_size))) { mz_uint len_to_move, cur_match_dist, cur_match_len, cur_pos; /* Update dictionary and hash chains. Keeps the lookahead size equal to TDEFL_MAX_MATCH_LEN. */ if ((d->m_lookahead_size + d->m_dict_size) >= (TDEFL_MIN_MATCH_LEN - 1)) { mz_uint dst_pos = (d->m_lookahead_pos + d->m_lookahead_size) & TDEFL_LZ_DICT_SIZE_MASK, ins_pos = d->m_lookahead_pos + d->m_lookahead_size - 2; mz_uint hash = (d->m_dict[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] << TDEFL_LZ_HASH_SHIFT) ^ d->m_dict[(ins_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK]; mz_uint num_bytes_to_process = (mz_uint)MZ_MIN(src_buf_left, TDEFL_MAX_MATCH_LEN - d->m_lookahead_size); const mz_uint8 *pSrc_end = pSrc ? pSrc + num_bytes_to_process : NULL; src_buf_left -= num_bytes_to_process; d->m_lookahead_size += num_bytes_to_process; while (pSrc != pSrc_end) { mz_uint8 c = *pSrc++; d->m_dict[dst_pos] = c; if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1)) d->m_dict[TDEFL_LZ_DICT_SIZE + dst_pos] = c; hash = ((hash << TDEFL_LZ_HASH_SHIFT) ^ c) & (TDEFL_LZ_HASH_SIZE - 1); d->m_next[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] = d->m_hash[hash]; d->m_hash[hash] = (mz_uint16)(ins_pos); dst_pos = (dst_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK; ins_pos++; } } else { while ((src_buf_left) && (d->m_lookahead_size < TDEFL_MAX_MATCH_LEN)) { mz_uint8 c = *pSrc++; mz_uint dst_pos = (d->m_lookahead_pos + d->m_lookahead_size) & TDEFL_LZ_DICT_SIZE_MASK; src_buf_left--; d->m_dict[dst_pos] = c; if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1)) d->m_dict[TDEFL_LZ_DICT_SIZE + dst_pos] = c; if ((++d->m_lookahead_size + d->m_dict_size) >= TDEFL_MIN_MATCH_LEN) { mz_uint ins_pos = d->m_lookahead_pos + (d->m_lookahead_size - 1) - 2; mz_uint hash = ((d->m_dict[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] << (TDEFL_LZ_HASH_SHIFT * 2)) ^ (d->m_dict[(ins_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK] << TDEFL_LZ_HASH_SHIFT) ^ c) & (TDEFL_LZ_HASH_SIZE - 1); d->m_next[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] = d->m_hash[hash]; d->m_hash[hash] = (mz_uint16)(ins_pos); } } } d->m_dict_size = MZ_MIN(TDEFL_LZ_DICT_SIZE - d->m_lookahead_size, d->m_dict_size); if ((!flush) && (d->m_lookahead_size < TDEFL_MAX_MATCH_LEN)) break; /* Simple lazy/greedy parsing state machine. */ len_to_move = 1; cur_match_dist = 0; cur_match_len = d->m_saved_match_len ? d->m_saved_match_len : (TDEFL_MIN_MATCH_LEN - 1); cur_pos = d->m_lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK; if (d->m_flags & (TDEFL_RLE_MATCHES | TDEFL_FORCE_ALL_RAW_BLOCKS)) { if ((d->m_dict_size) && (!(d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS))) { mz_uint8 c = d->m_dict[(cur_pos - 1) & TDEFL_LZ_DICT_SIZE_MASK]; cur_match_len = 0; while (cur_match_len < d->m_lookahead_size) { if (d->m_dict[cur_pos + cur_match_len] != c) break; cur_match_len++; } if (cur_match_len < TDEFL_MIN_MATCH_LEN) cur_match_len = 0; else cur_match_dist = 1; } } else { tdefl_find_match(d, d->m_lookahead_pos, d->m_dict_size, d->m_lookahead_size, &cur_match_dist, &cur_match_len); } if (((cur_match_len == TDEFL_MIN_MATCH_LEN) && (cur_match_dist >= 8U * 1024U)) || (cur_pos == cur_match_dist) || ((d->m_flags & TDEFL_FILTER_MATCHES) && (cur_match_len <= 5))) { cur_match_dist = cur_match_len = 0; } if (d->m_saved_match_len) { if (cur_match_len > d->m_saved_match_len) { tdefl_record_literal(d, (mz_uint8)d->m_saved_lit); if (cur_match_len >= 128) { tdefl_record_match(d, cur_match_len, cur_match_dist); d->m_saved_match_len = 0; len_to_move = cur_match_len; } else { d->m_saved_lit = d->m_dict[cur_pos]; d->m_saved_match_dist = cur_match_dist; d->m_saved_match_len = cur_match_len; } } else { tdefl_record_match(d, d->m_saved_match_len, d->m_saved_match_dist); len_to_move = d->m_saved_match_len - 1; d->m_saved_match_len = 0; } } else if (!cur_match_dist) tdefl_record_literal(d, d->m_dict[MZ_MIN(cur_pos, sizeof(d->m_dict) - 1)]); else if ((d->m_greedy_parsing) || (d->m_flags & TDEFL_RLE_MATCHES) || (cur_match_len >= 128)) { tdefl_record_match(d, cur_match_len, cur_match_dist); len_to_move = cur_match_len; } else { d->m_saved_lit = d->m_dict[MZ_MIN(cur_pos, sizeof(d->m_dict) - 1)]; d->m_saved_match_dist = cur_match_dist; d->m_saved_match_len = cur_match_len; } /* Move the lookahead forward by len_to_move bytes. */ d->m_lookahead_pos += len_to_move; MZ_ASSERT(d->m_lookahead_size >= len_to_move); d->m_lookahead_size -= len_to_move; d->m_dict_size = MZ_MIN(d->m_dict_size + len_to_move, (mz_uint)TDEFL_LZ_DICT_SIZE); /* Check if it's time to flush the current LZ codes to the internal output buffer. */ if ((d->m_pLZ_code_buf > &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) || ((d->m_total_lz_bytes > 31 * 1024) && (((((mz_uint)(d->m_pLZ_code_buf - d->m_lz_code_buf) * 115) >> 7) >= d->m_total_lz_bytes) || (d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS)))) { int n; d->m_pSrc = pSrc; d->m_src_buf_left = src_buf_left; if ((n = tdefl_flush_block(d, 0)) != 0) return (n < 0) ? MZ_FALSE : MZ_TRUE; } } d->m_pSrc = pSrc; d->m_src_buf_left = src_buf_left; return MZ_TRUE; } static tdefl_status tdefl_flush_output_buffer(tdefl_compressor *d) { if (d->m_pIn_buf_size) { *d->m_pIn_buf_size = d->m_pSrc - (const mz_uint8 *)d->m_pIn_buf; } if (d->m_pOut_buf_size) { size_t n = MZ_MIN(*d->m_pOut_buf_size - d->m_out_buf_ofs, d->m_output_flush_remaining); memcpy((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs, d->m_output_buf + d->m_output_flush_ofs, n); d->m_output_flush_ofs += (mz_uint)n; d->m_output_flush_remaining -= (mz_uint)n; d->m_out_buf_ofs += n; *d->m_pOut_buf_size = d->m_out_buf_ofs; } return (d->m_finished && !d->m_output_flush_remaining) ? TDEFL_STATUS_DONE : TDEFL_STATUS_OKAY; } tdefl_status tdefl_compress(tdefl_compressor *d, const void *pIn_buf, size_t *pIn_buf_size, void *pOut_buf, size_t *pOut_buf_size, tdefl_flush flush) { if (!d) { if (pIn_buf_size) *pIn_buf_size = 0; if (pOut_buf_size) *pOut_buf_size = 0; return TDEFL_STATUS_BAD_PARAM; } d->m_pIn_buf = pIn_buf; d->m_pIn_buf_size = pIn_buf_size; d->m_pOut_buf = pOut_buf; d->m_pOut_buf_size = pOut_buf_size; d->m_pSrc = (const mz_uint8 *)(pIn_buf); d->m_src_buf_left = pIn_buf_size ? *pIn_buf_size : 0; d->m_out_buf_ofs = 0; d->m_flush = flush; if (((d->m_pPut_buf_func != NULL) == ((pOut_buf != NULL) || (pOut_buf_size != NULL))) || (d->m_prev_return_status != TDEFL_STATUS_OKAY) || (d->m_wants_to_finish && (flush != TDEFL_FINISH)) || (pIn_buf_size && *pIn_buf_size && !pIn_buf) || (pOut_buf_size && *pOut_buf_size && !pOut_buf)) { if (pIn_buf_size) *pIn_buf_size = 0; if (pOut_buf_size) *pOut_buf_size = 0; return (d->m_prev_return_status = TDEFL_STATUS_BAD_PARAM); } d->m_wants_to_finish |= (flush == TDEFL_FINISH); if ((d->m_output_flush_remaining) || (d->m_finished)) return (d->m_prev_return_status = tdefl_flush_output_buffer(d)); #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN if (((d->m_flags & TDEFL_MAX_PROBES_MASK) == 1) && ((d->m_flags & TDEFL_GREEDY_PARSING_FLAG) != 0) && ((d->m_flags & (TDEFL_FILTER_MATCHES | TDEFL_FORCE_ALL_RAW_BLOCKS | TDEFL_RLE_MATCHES)) == 0)) { if (!tdefl_compress_fast(d)) return d->m_prev_return_status; } else #endif /* #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN */ { if (!tdefl_compress_normal(d)) return d->m_prev_return_status; } if ((d->m_flags & (TDEFL_WRITE_ZLIB_HEADER | TDEFL_COMPUTE_ADLER32)) && (pIn_buf)) d->m_adler32 = (mz_uint32)mz_adler32(d->m_adler32, (const mz_uint8 *)pIn_buf, d->m_pSrc - (const mz_uint8 *)pIn_buf); if ((flush) && (!d->m_lookahead_size) && (!d->m_src_buf_left) && (!d->m_output_flush_remaining)) { if (tdefl_flush_block(d, flush) < 0) return d->m_prev_return_status; d->m_finished = (flush == TDEFL_FINISH); if (flush == TDEFL_FULL_FLUSH) { MZ_CLEAR_ARR(d->m_hash); MZ_CLEAR_ARR(d->m_next); d->m_dict_size = 0; } } return (d->m_prev_return_status = tdefl_flush_output_buffer(d)); } tdefl_status tdefl_compress_buffer(tdefl_compressor *d, const void *pIn_buf, size_t in_buf_size, tdefl_flush flush) { MZ_ASSERT(d->m_pPut_buf_func); return tdefl_compress(d, pIn_buf, &in_buf_size, NULL, NULL, flush); } tdefl_status tdefl_init(tdefl_compressor *d, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags) { d->m_pPut_buf_func = pPut_buf_func; d->m_pPut_buf_user = pPut_buf_user; d->m_flags = (mz_uint)(flags); d->m_max_probes[0] = 1 + ((flags & 0xFFF) + 2) / 3; d->m_greedy_parsing = (flags & TDEFL_GREEDY_PARSING_FLAG) != 0; d->m_max_probes[1] = 1 + (((flags & 0xFFF) >> 2) + 2) / 3; if (!(flags & TDEFL_NONDETERMINISTIC_PARSING_FLAG)) MZ_CLEAR_ARR(d->m_hash); d->m_lookahead_pos = d->m_lookahead_size = d->m_dict_size = d->m_total_lz_bytes = d->m_lz_code_buf_dict_pos = d->m_bits_in = 0; d->m_output_flush_ofs = d->m_output_flush_remaining = d->m_finished = d->m_block_index = d->m_bit_buffer = d->m_wants_to_finish = 0; d->m_pLZ_code_buf = d->m_lz_code_buf + 1; d->m_pLZ_flags = d->m_lz_code_buf; *d->m_pLZ_flags = 0; d->m_num_flags_left = 8; d->m_pOutput_buf = d->m_output_buf; d->m_pOutput_buf_end = d->m_output_buf; d->m_prev_return_status = TDEFL_STATUS_OKAY; d->m_saved_match_dist = d->m_saved_match_len = d->m_saved_lit = 0; d->m_adler32 = 1; d->m_pIn_buf = NULL; d->m_pOut_buf = NULL; d->m_pIn_buf_size = NULL; d->m_pOut_buf_size = NULL; d->m_flush = TDEFL_NO_FLUSH; d->m_pSrc = NULL; d->m_src_buf_left = 0; d->m_out_buf_ofs = 0; if (!(flags & TDEFL_NONDETERMINISTIC_PARSING_FLAG)) MZ_CLEAR_ARR(d->m_dict); memset(&d->m_huff_count[0][0], 0, sizeof(d->m_huff_count[0][0]) * TDEFL_MAX_HUFF_SYMBOLS_0); memset(&d->m_huff_count[1][0], 0, sizeof(d->m_huff_count[1][0]) * TDEFL_MAX_HUFF_SYMBOLS_1); return TDEFL_STATUS_OKAY; } tdefl_status tdefl_get_prev_return_status(tdefl_compressor *d) { return d->m_prev_return_status; } mz_uint32 tdefl_get_adler32(tdefl_compressor *d) { return d->m_adler32; } mz_bool tdefl_compress_mem_to_output(const void *pBuf, size_t buf_len, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags) { tdefl_compressor *pComp; mz_bool succeeded; if (((buf_len) && (!pBuf)) || (!pPut_buf_func)) return MZ_FALSE; pComp = (tdefl_compressor *)MZ_MALLOC(sizeof(tdefl_compressor)); if (!pComp) return MZ_FALSE; succeeded = (tdefl_init(pComp, pPut_buf_func, pPut_buf_user, flags) == TDEFL_STATUS_OKAY); succeeded = succeeded && (tdefl_compress_buffer(pComp, pBuf, buf_len, TDEFL_FINISH) == TDEFL_STATUS_DONE); MZ_FREE(pComp); return succeeded; } typedef struct { size_t m_size, m_capacity; mz_uint8 *m_pBuf; mz_bool m_expandable; } tdefl_output_buffer; static mz_bool tdefl_output_buffer_putter(const void *pBuf, int len, void *pUser) { tdefl_output_buffer *p = (tdefl_output_buffer *)pUser; size_t new_size = p->m_size + len; if (new_size > p->m_capacity) { size_t new_capacity = p->m_capacity; mz_uint8 *pNew_buf; if (!p->m_expandable) return MZ_FALSE; do { new_capacity = MZ_MAX(128U, new_capacity << 1U); } while (new_size > new_capacity); pNew_buf = (mz_uint8 *)MZ_REALLOC(p->m_pBuf, new_capacity); if (!pNew_buf) return MZ_FALSE; p->m_pBuf = pNew_buf; p->m_capacity = new_capacity; } memcpy((mz_uint8 *)p->m_pBuf + p->m_size, pBuf, len); p->m_size = new_size; return MZ_TRUE; } void *tdefl_compress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags) { tdefl_output_buffer out_buf; MZ_CLEAR_OBJ(out_buf); if (!pOut_len) return MZ_FALSE; else *pOut_len = 0; out_buf.m_expandable = MZ_TRUE; if (!tdefl_compress_mem_to_output(pSrc_buf, src_buf_len, tdefl_output_buffer_putter, &out_buf, flags)) return NULL; *pOut_len = out_buf.m_size; return out_buf.m_pBuf; } size_t tdefl_compress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags) { tdefl_output_buffer out_buf; MZ_CLEAR_OBJ(out_buf); if (!pOut_buf) return 0; out_buf.m_pBuf = (mz_uint8 *)pOut_buf; out_buf.m_capacity = out_buf_len; if (!tdefl_compress_mem_to_output(pSrc_buf, src_buf_len, tdefl_output_buffer_putter, &out_buf, flags)) return 0; return out_buf.m_size; } static const mz_uint s_tdefl_num_probes[11] = { 0, 1, 6, 32, 16, 32, 128, 256, 512, 768, 1500 }; /* level may actually range from [0,10] (10 is a "hidden" max level, where we want a bit more compression and it's fine if throughput to fall off a cliff on some files). */ mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits, int strategy) { mz_uint comp_flags = s_tdefl_num_probes[(level >= 0) ? MZ_MIN(10, level) : MZ_DEFAULT_LEVEL] | ((level <= 3) ? TDEFL_GREEDY_PARSING_FLAG : 0); if (window_bits > 0) comp_flags |= TDEFL_WRITE_ZLIB_HEADER; if (!level) comp_flags |= TDEFL_FORCE_ALL_RAW_BLOCKS; else if (strategy == MZ_FILTERED) comp_flags |= TDEFL_FILTER_MATCHES; else if (strategy == MZ_HUFFMAN_ONLY) comp_flags &= ~TDEFL_MAX_PROBES_MASK; else if (strategy == MZ_FIXED) comp_flags |= TDEFL_FORCE_ALL_STATIC_BLOCKS; else if (strategy == MZ_RLE) comp_flags |= TDEFL_RLE_MATCHES; return comp_flags; } #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable : 4204) /* nonstandard extension used : non-constant aggregate initializer (also supported by GNU C and C99, so no big deal) */ #endif /* Simple PNG writer function by Alex Evans, 2011. Released into the public domain: https://gist.github.com/908299, more context at http://altdevblogaday.org/2011/04/06/a-smaller-jpg-encoder/. This is actually a modification of Alex's original code so PNG files generated by this function pass pngcheck. */ void *tdefl_write_image_to_png_file_in_memory_ex(const void *pImage, int w, int h, int num_chans, size_t *pLen_out, mz_uint level, mz_bool flip) { /* Using a local copy of this array here in case MINIZ_NO_ZLIB_APIS was defined. */ static const mz_uint s_tdefl_png_num_probes[11] = { 0, 1, 6, 32, 16, 32, 128, 256, 512, 768, 1500 }; tdefl_compressor *pComp = (tdefl_compressor *)MZ_MALLOC(sizeof(tdefl_compressor)); tdefl_output_buffer out_buf; int i, bpl = w * num_chans, y, z; mz_uint32 c; *pLen_out = 0; if (!pComp) return NULL; MZ_CLEAR_OBJ(out_buf); out_buf.m_expandable = MZ_TRUE; out_buf.m_capacity = 57 + MZ_MAX(64, (1 + bpl) * h); if (NULL == (out_buf.m_pBuf = (mz_uint8 *)MZ_MALLOC(out_buf.m_capacity))) { MZ_FREE(pComp); return NULL; } /* write dummy header */ for (z = 41; z; --z) tdefl_output_buffer_putter(&z, 1, &out_buf); /* compress image data */ tdefl_init(pComp, tdefl_output_buffer_putter, &out_buf, s_tdefl_png_num_probes[MZ_MIN(10, level)] | TDEFL_WRITE_ZLIB_HEADER); for (y = 0; y < h; ++y) { tdefl_compress_buffer(pComp, &z, 1, TDEFL_NO_FLUSH); tdefl_compress_buffer(pComp, (mz_uint8 *)pImage + (flip ? (h - 1 - y) : y) * bpl, bpl, TDEFL_NO_FLUSH); } if (tdefl_compress_buffer(pComp, NULL, 0, TDEFL_FINISH) != TDEFL_STATUS_DONE) { MZ_FREE(pComp); MZ_FREE(out_buf.m_pBuf); return NULL; } /* write real header */ *pLen_out = out_buf.m_size - 41; { static const mz_uint8 chans[] = { 0x00, 0x00, 0x04, 0x02, 0x06 }; mz_uint8 pnghdr[41] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x44, 0x41, 0x54 }; pnghdr[18] = (mz_uint8)(w >> 8); pnghdr[19] = (mz_uint8)w; pnghdr[22] = (mz_uint8)(h >> 8); pnghdr[23] = (mz_uint8)h; pnghdr[25] = chans[num_chans]; pnghdr[33] = (mz_uint8)(*pLen_out >> 24); pnghdr[34] = (mz_uint8)(*pLen_out >> 16); pnghdr[35] = (mz_uint8)(*pLen_out >> 8); pnghdr[36] = (mz_uint8)*pLen_out; c = (mz_uint32)mz_crc32(MZ_CRC32_INIT, pnghdr + 12, 17); for (i = 0; i < 4; ++i, c <<= 8) ((mz_uint8 *)(pnghdr + 29))[i] = (mz_uint8)(c >> 24); memcpy(out_buf.m_pBuf, pnghdr, 41); } /* write footer (IDAT CRC-32, followed by IEND chunk) */ if (!tdefl_output_buffer_putter("\0\0\0\0\0\0\0\0\x49\x45\x4e\x44\xae\x42\x60\x82", 16, &out_buf)) { *pLen_out = 0; MZ_FREE(pComp); MZ_FREE(out_buf.m_pBuf); return NULL; } c = (mz_uint32)mz_crc32(MZ_CRC32_INIT, out_buf.m_pBuf + 41 - 4, *pLen_out + 4); for (i = 0; i < 4; ++i, c <<= 8) (out_buf.m_pBuf + out_buf.m_size - 16)[i] = (mz_uint8)(c >> 24); /* compute final size of file, grab compressed data buffer and return */ *pLen_out += 57; MZ_FREE(pComp); return out_buf.m_pBuf; } void *tdefl_write_image_to_png_file_in_memory(const void *pImage, int w, int h, int num_chans, size_t *pLen_out) { /* Level 6 corresponds to TDEFL_DEFAULT_MAX_PROBES or MZ_DEFAULT_LEVEL (but we can't depend on MZ_DEFAULT_LEVEL being available in case the zlib API's where #defined out) */ return tdefl_write_image_to_png_file_in_memory_ex(pImage, w, h, num_chans, pLen_out, 6, MZ_FALSE); } #ifndef MINIZ_NO_MALLOC /* Allocate the tdefl_compressor and tinfl_decompressor structures in C so that */ /* non-C language bindings to tdefL_ and tinfl_ API don't need to worry about */ /* structure size and allocation mechanism. */ tdefl_compressor *tdefl_compressor_alloc(void) { return (tdefl_compressor *)MZ_MALLOC(sizeof(tdefl_compressor)); } void tdefl_compressor_free(tdefl_compressor *pComp) { MZ_FREE(pComp); } #endif #ifdef _MSC_VER #pragma warning(pop) #endif #ifdef __cplusplus } #endif #endif /*#ifndef MINIZ_NO_DEFLATE_APIS*/ /************************************************************************** * * Copyright 2013-2014 RAD Game Tools and Valve Software * Copyright 2010-2014 Rich Geldreich and Tenacious Software LLC * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #ifndef MINIZ_NO_INFLATE_APIS #ifdef __cplusplus extern "C" { #endif /* ------------------- Low-level Decompression (completely independent from all compression API's) */ #define TINFL_MEMCPY(d, s, l) memcpy(d, s, l) #define TINFL_MEMSET(p, c, l) memset(p, c, l) #define TINFL_CR_BEGIN \ switch (r->m_state) \ { \ case 0: #define TINFL_CR_RETURN(state_index, result) \ do \ { \ status = result; \ r->m_state = state_index; \ goto common_exit; \ case state_index:; \ } \ MZ_MACRO_END #define TINFL_CR_RETURN_FOREVER(state_index, result) \ do \ { \ for (;;) \ { \ TINFL_CR_RETURN(state_index, result); \ } \ } \ MZ_MACRO_END #define TINFL_CR_FINISH } #define TINFL_GET_BYTE(state_index, c) \ do \ { \ while (pIn_buf_cur >= pIn_buf_end) \ { \ TINFL_CR_RETURN(state_index, (decomp_flags & TINFL_FLAG_HAS_MORE_INPUT) ? TINFL_STATUS_NEEDS_MORE_INPUT : TINFL_STATUS_FAILED_CANNOT_MAKE_PROGRESS); \ } \ c = *pIn_buf_cur++; \ } \ MZ_MACRO_END #define TINFL_NEED_BITS(state_index, n) \ do \ { \ mz_uint c; \ TINFL_GET_BYTE(state_index, c); \ bit_buf |= (((tinfl_bit_buf_t)c) << num_bits); \ num_bits += 8; \ } while (num_bits < (mz_uint)(n)) #define TINFL_SKIP_BITS(state_index, n) \ do \ { \ if (num_bits < (mz_uint)(n)) \ { \ TINFL_NEED_BITS(state_index, n); \ } \ bit_buf >>= (n); \ num_bits -= (n); \ } \ MZ_MACRO_END #define TINFL_GET_BITS(state_index, b, n) \ do \ { \ if (num_bits < (mz_uint)(n)) \ { \ TINFL_NEED_BITS(state_index, n); \ } \ b = bit_buf & ((1 << (n)) - 1); \ bit_buf >>= (n); \ num_bits -= (n); \ } \ MZ_MACRO_END /* TINFL_HUFF_BITBUF_FILL() is only used rarely, when the number of bytes remaining in the input buffer falls below 2. */ /* It reads just enough bytes from the input stream that are needed to decode the next Huffman code (and absolutely no more). It works by trying to fully decode a */ /* Huffman code by using whatever bits are currently present in the bit buffer. If this fails, it reads another byte, and tries again until it succeeds or until the */ /* bit buffer contains >=15 bits (deflate's max. Huffman code size). */ #define TINFL_HUFF_BITBUF_FILL(state_index, pLookUp, pTree) \ do \ { \ temp = pLookUp[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]; \ if (temp >= 0) \ { \ code_len = temp >> 9; \ if ((code_len) && (num_bits >= code_len)) \ break; \ } \ else if (num_bits > TINFL_FAST_LOOKUP_BITS) \ { \ code_len = TINFL_FAST_LOOKUP_BITS; \ do \ { \ temp = pTree[~temp + ((bit_buf >> code_len++) & 1)]; \ } while ((temp < 0) && (num_bits >= (code_len + 1))); \ if (temp >= 0) \ break; \ } \ TINFL_GET_BYTE(state_index, c); \ bit_buf |= (((tinfl_bit_buf_t)c) << num_bits); \ num_bits += 8; \ } while (num_bits < 15); /* TINFL_HUFF_DECODE() decodes the next Huffman coded symbol. It's more complex than you would initially expect because the zlib API expects the decompressor to never read */ /* beyond the final byte of the deflate stream. (In other words, when this macro wants to read another byte from the input, it REALLY needs another byte in order to fully */ /* decode the next Huffman code.) Handling this properly is particularly important on raw deflate (non-zlib) streams, which aren't followed by a byte aligned adler-32. */ /* The slow path is only executed at the very end of the input buffer. */ /* v1.16: The original macro handled the case at the very end of the passed-in input buffer, but we also need to handle the case where the user passes in 1+zillion bytes */ /* following the deflate data and our non-conservative read-ahead path won't kick in here on this code. This is much trickier. */ #define TINFL_HUFF_DECODE(state_index, sym, pLookUp, pTree) \ do \ { \ int temp; \ mz_uint code_len, c; \ if (num_bits < 15) \ { \ if ((pIn_buf_end - pIn_buf_cur) < 2) \ { \ TINFL_HUFF_BITBUF_FILL(state_index, pLookUp, pTree); \ } \ else \ { \ bit_buf |= (((tinfl_bit_buf_t)pIn_buf_cur[0]) << num_bits) | (((tinfl_bit_buf_t)pIn_buf_cur[1]) << (num_bits + 8)); \ pIn_buf_cur += 2; \ num_bits += 16; \ } \ } \ if ((temp = pLookUp[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >= 0) \ code_len = temp >> 9, temp &= 511; \ else \ { \ code_len = TINFL_FAST_LOOKUP_BITS; \ do \ { \ temp = pTree[~temp + ((bit_buf >> code_len++) & 1)]; \ } while (temp < 0); \ } \ sym = temp; \ bit_buf >>= code_len; \ num_bits -= code_len; \ } \ MZ_MACRO_END static void tinfl_clear_tree(tinfl_decompressor *r) { if (r->m_type == 0) MZ_CLEAR_ARR(r->m_tree_0); else if (r->m_type == 1) MZ_CLEAR_ARR(r->m_tree_1); else MZ_CLEAR_ARR(r->m_tree_2); } tinfl_status tinfl_decompress(tinfl_decompressor *r, const mz_uint8 *pIn_buf_next, size_t *pIn_buf_size, mz_uint8 *pOut_buf_start, mz_uint8 *pOut_buf_next, size_t *pOut_buf_size, const mz_uint32 decomp_flags) { static const mz_uint16 s_length_base[31] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0 }; static const mz_uint8 s_length_extra[31] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0 }; static const mz_uint16 s_dist_base[32] = { 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0 }; static const mz_uint8 s_dist_extra[32] = { 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 }; static const mz_uint8 s_length_dezigzag[19] = { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 }; static const mz_uint16 s_min_table_sizes[3] = { 257, 1, 4 }; mz_int16 *pTrees[3]; mz_uint8 *pCode_sizes[3]; tinfl_status status = TINFL_STATUS_FAILED; mz_uint32 num_bits, dist, counter, num_extra; tinfl_bit_buf_t bit_buf; const mz_uint8 *pIn_buf_cur = pIn_buf_next, *const pIn_buf_end = pIn_buf_next + *pIn_buf_size; mz_uint8 *pOut_buf_cur = pOut_buf_next, *const pOut_buf_end = pOut_buf_next ? pOut_buf_next + *pOut_buf_size : NULL; size_t out_buf_size_mask = (decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF) ? (size_t)-1 : ((pOut_buf_next - pOut_buf_start) + *pOut_buf_size) - 1, dist_from_out_buf_start; /* Ensure the output buffer's size is a power of 2, unless the output buffer is large enough to hold the entire output file (in which case it doesn't matter). */ if (((out_buf_size_mask + 1) & out_buf_size_mask) || (pOut_buf_next < pOut_buf_start)) { *pIn_buf_size = *pOut_buf_size = 0; return TINFL_STATUS_BAD_PARAM; } pTrees[0] = r->m_tree_0; pTrees[1] = r->m_tree_1; pTrees[2] = r->m_tree_2; pCode_sizes[0] = r->m_code_size_0; pCode_sizes[1] = r->m_code_size_1; pCode_sizes[2] = r->m_code_size_2; num_bits = r->m_num_bits; bit_buf = r->m_bit_buf; dist = r->m_dist; counter = r->m_counter; num_extra = r->m_num_extra; dist_from_out_buf_start = r->m_dist_from_out_buf_start; TINFL_CR_BEGIN bit_buf = num_bits = dist = counter = num_extra = r->m_zhdr0 = r->m_zhdr1 = 0; r->m_z_adler32 = r->m_check_adler32 = 1; if (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) { TINFL_GET_BYTE(1, r->m_zhdr0); TINFL_GET_BYTE(2, r->m_zhdr1); counter = (((r->m_zhdr0 * 256 + r->m_zhdr1) % 31 != 0) || (r->m_zhdr1 & 32) || ((r->m_zhdr0 & 15) != 8)); if (!(decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF)) counter |= (((1U << (8U + (r->m_zhdr0 >> 4))) > 32768U) || ((out_buf_size_mask + 1) < (size_t)((size_t)1 << (8U + (r->m_zhdr0 >> 4))))); if (counter) { TINFL_CR_RETURN_FOREVER(36, TINFL_STATUS_FAILED); } } do { TINFL_GET_BITS(3, r->m_final, 3); r->m_type = r->m_final >> 1; if (r->m_type == 0) { TINFL_SKIP_BITS(5, num_bits & 7); for (counter = 0; counter < 4; ++counter) { if (num_bits) TINFL_GET_BITS(6, r->m_raw_header[counter], 8); else TINFL_GET_BYTE(7, r->m_raw_header[counter]); } if ((counter = (r->m_raw_header[0] | (r->m_raw_header[1] << 8))) != (mz_uint)(0xFFFF ^ (r->m_raw_header[2] | (r->m_raw_header[3] << 8)))) { TINFL_CR_RETURN_FOREVER(39, TINFL_STATUS_FAILED); } while ((counter) && (num_bits)) { TINFL_GET_BITS(51, dist, 8); while (pOut_buf_cur >= pOut_buf_end) { TINFL_CR_RETURN(52, TINFL_STATUS_HAS_MORE_OUTPUT); } *pOut_buf_cur++ = (mz_uint8)dist; counter--; } while (counter) { size_t n; while (pOut_buf_cur >= pOut_buf_end) { TINFL_CR_RETURN(9, TINFL_STATUS_HAS_MORE_OUTPUT); } while (pIn_buf_cur >= pIn_buf_end) { TINFL_CR_RETURN(38, (decomp_flags & TINFL_FLAG_HAS_MORE_INPUT) ? TINFL_STATUS_NEEDS_MORE_INPUT : TINFL_STATUS_FAILED_CANNOT_MAKE_PROGRESS); } n = MZ_MIN(MZ_MIN((size_t)(pOut_buf_end - pOut_buf_cur), (size_t)(pIn_buf_end - pIn_buf_cur)), counter); TINFL_MEMCPY(pOut_buf_cur, pIn_buf_cur, n); pIn_buf_cur += n; pOut_buf_cur += n; counter -= (mz_uint)n; } } else if (r->m_type == 3) { TINFL_CR_RETURN_FOREVER(10, TINFL_STATUS_FAILED); } else { if (r->m_type == 1) { mz_uint8 *p = r->m_code_size_0; mz_uint i; r->m_table_sizes[0] = 288; r->m_table_sizes[1] = 32; TINFL_MEMSET(r->m_code_size_1, 5, 32); for (i = 0; i <= 143; ++i) *p++ = 8; for (; i <= 255; ++i) *p++ = 9; for (; i <= 279; ++i) *p++ = 7; for (; i <= 287; ++i) *p++ = 8; } else { for (counter = 0; counter < 3; counter++) { TINFL_GET_BITS(11, r->m_table_sizes[counter], "\05\05\04"[counter]); r->m_table_sizes[counter] += s_min_table_sizes[counter]; } MZ_CLEAR_ARR(r->m_code_size_2); for (counter = 0; counter < r->m_table_sizes[2]; counter++) { mz_uint s; TINFL_GET_BITS(14, s, 3); r->m_code_size_2[s_length_dezigzag[counter]] = (mz_uint8)s; } r->m_table_sizes[2] = 19; } for (; (int)r->m_type >= 0; r->m_type--) { int tree_next, tree_cur; mz_int16 *pLookUp; mz_int16 *pTree; mz_uint8 *pCode_size; mz_uint i, j, used_syms, total, sym_index, next_code[17], total_syms[16]; pLookUp = r->m_look_up[r->m_type]; pTree = pTrees[r->m_type]; pCode_size = pCode_sizes[r->m_type]; MZ_CLEAR_ARR(total_syms); TINFL_MEMSET(pLookUp, 0, sizeof(r->m_look_up[0])); tinfl_clear_tree(r); for (i = 0; i < r->m_table_sizes[r->m_type]; ++i) total_syms[pCode_size[i]]++; used_syms = 0, total = 0; next_code[0] = next_code[1] = 0; for (i = 1; i <= 15; ++i) { used_syms += total_syms[i]; next_code[i + 1] = (total = ((total + total_syms[i]) << 1)); } if ((65536 != total) && (used_syms > 1)) { TINFL_CR_RETURN_FOREVER(35, TINFL_STATUS_FAILED); } for (tree_next = -1, sym_index = 0; sym_index < r->m_table_sizes[r->m_type]; ++sym_index) { mz_uint rev_code = 0, l, cur_code, code_size = pCode_size[sym_index]; if (!code_size) continue; cur_code = next_code[code_size]++; for (l = code_size; l > 0; l--, cur_code >>= 1) rev_code = (rev_code << 1) | (cur_code & 1); if (code_size <= TINFL_FAST_LOOKUP_BITS) { mz_int16 k = (mz_int16)((code_size << 9) | sym_index); while (rev_code < TINFL_FAST_LOOKUP_SIZE) { pLookUp[rev_code] = k; rev_code += (1 << code_size); } continue; } if (0 == (tree_cur = pLookUp[rev_code & (TINFL_FAST_LOOKUP_SIZE - 1)])) { pLookUp[rev_code & (TINFL_FAST_LOOKUP_SIZE - 1)] = (mz_int16)tree_next; tree_cur = tree_next; tree_next -= 2; } rev_code >>= (TINFL_FAST_LOOKUP_BITS - 1); for (j = code_size; j > (TINFL_FAST_LOOKUP_BITS + 1); j--) { tree_cur -= ((rev_code >>= 1) & 1); if (!pTree[-tree_cur - 1]) { pTree[-tree_cur - 1] = (mz_int16)tree_next; tree_cur = tree_next; tree_next -= 2; } else tree_cur = pTree[-tree_cur - 1]; } tree_cur -= ((rev_code >>= 1) & 1); pTree[-tree_cur - 1] = (mz_int16)sym_index; } if (r->m_type == 2) { for (counter = 0; counter < (r->m_table_sizes[0] + r->m_table_sizes[1]);) { mz_uint s; TINFL_HUFF_DECODE(16, dist, r->m_look_up[2], r->m_tree_2); if (dist < 16) { r->m_len_codes[counter++] = (mz_uint8)dist; continue; } if ((dist == 16) && (!counter)) { TINFL_CR_RETURN_FOREVER(17, TINFL_STATUS_FAILED); } num_extra = "\02\03\07"[dist - 16]; TINFL_GET_BITS(18, s, num_extra); s += "\03\03\013"[dist - 16]; TINFL_MEMSET(r->m_len_codes + counter, (dist == 16) ? r->m_len_codes[counter - 1] : 0, s); counter += s; } if ((r->m_table_sizes[0] + r->m_table_sizes[1]) != counter) { TINFL_CR_RETURN_FOREVER(21, TINFL_STATUS_FAILED); } TINFL_MEMCPY(r->m_code_size_0, r->m_len_codes, r->m_table_sizes[0]); TINFL_MEMCPY(r->m_code_size_1, r->m_len_codes + r->m_table_sizes[0], r->m_table_sizes[1]); } } for (;;) { mz_uint8 *pSrc; for (;;) { if (((pIn_buf_end - pIn_buf_cur) < 4) || ((pOut_buf_end - pOut_buf_cur) < 2)) { TINFL_HUFF_DECODE(23, counter, r->m_look_up[0], r->m_tree_0); if (counter >= 256) break; while (pOut_buf_cur >= pOut_buf_end) { TINFL_CR_RETURN(24, TINFL_STATUS_HAS_MORE_OUTPUT); } *pOut_buf_cur++ = (mz_uint8)counter; } else { int sym2; mz_uint code_len; #if TINFL_USE_64BIT_BITBUF if (num_bits < 30) { bit_buf |= (((tinfl_bit_buf_t)MZ_READ_LE32(pIn_buf_cur)) << num_bits); pIn_buf_cur += 4; num_bits += 32; } #else if (num_bits < 15) { bit_buf |= (((tinfl_bit_buf_t)MZ_READ_LE16(pIn_buf_cur)) << num_bits); pIn_buf_cur += 2; num_bits += 16; } #endif if ((sym2 = r->m_look_up[0][bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >= 0) code_len = sym2 >> 9; else { code_len = TINFL_FAST_LOOKUP_BITS; do { sym2 = r->m_tree_0[~sym2 + ((bit_buf >> code_len++) & 1)]; } while (sym2 < 0); } counter = sym2; bit_buf >>= code_len; num_bits -= code_len; if (counter & 256) break; #if !TINFL_USE_64BIT_BITBUF if (num_bits < 15) { bit_buf |= (((tinfl_bit_buf_t)MZ_READ_LE16(pIn_buf_cur)) << num_bits); pIn_buf_cur += 2; num_bits += 16; } #endif if ((sym2 = r->m_look_up[0][bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >= 0) code_len = sym2 >> 9; else { code_len = TINFL_FAST_LOOKUP_BITS; do { sym2 = r->m_tree_0[~sym2 + ((bit_buf >> code_len++) & 1)]; } while (sym2 < 0); } bit_buf >>= code_len; num_bits -= code_len; pOut_buf_cur[0] = (mz_uint8)counter; if (sym2 & 256) { pOut_buf_cur++; counter = sym2; break; } pOut_buf_cur[1] = (mz_uint8)sym2; pOut_buf_cur += 2; } } if ((counter &= 511) == 256) break; num_extra = s_length_extra[counter - 257]; counter = s_length_base[counter - 257]; if (num_extra) { mz_uint extra_bits; TINFL_GET_BITS(25, extra_bits, num_extra); counter += extra_bits; } TINFL_HUFF_DECODE(26, dist, r->m_look_up[1], r->m_tree_1); num_extra = s_dist_extra[dist]; dist = s_dist_base[dist]; if (num_extra) { mz_uint extra_bits; TINFL_GET_BITS(27, extra_bits, num_extra); dist += extra_bits; } dist_from_out_buf_start = pOut_buf_cur - pOut_buf_start; if ((dist == 0 || dist > dist_from_out_buf_start || dist_from_out_buf_start == 0) && (decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF)) { TINFL_CR_RETURN_FOREVER(37, TINFL_STATUS_FAILED); } pSrc = pOut_buf_start + ((dist_from_out_buf_start - dist) & out_buf_size_mask); if ((MZ_MAX(pOut_buf_cur, pSrc) + counter) > pOut_buf_end) { while (counter--) { while (pOut_buf_cur >= pOut_buf_end) { TINFL_CR_RETURN(53, TINFL_STATUS_HAS_MORE_OUTPUT); } *pOut_buf_cur++ = pOut_buf_start[(dist_from_out_buf_start++ - dist) & out_buf_size_mask]; } continue; } #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES else if ((counter >= 9) && (counter <= dist)) { const mz_uint8 *pSrc_end = pSrc + (counter & ~7); do { #ifdef MINIZ_UNALIGNED_USE_MEMCPY memcpy(pOut_buf_cur, pSrc, sizeof(mz_uint32)*2); #else ((mz_uint32 *)pOut_buf_cur)[0] = ((const mz_uint32 *)pSrc)[0]; ((mz_uint32 *)pOut_buf_cur)[1] = ((const mz_uint32 *)pSrc)[1]; #endif pOut_buf_cur += 8; } while ((pSrc += 8) < pSrc_end); if ((counter &= 7) < 3) { if (counter) { pOut_buf_cur[0] = pSrc[0]; if (counter > 1) pOut_buf_cur[1] = pSrc[1]; pOut_buf_cur += counter; } continue; } } #endif while(counter>2) { pOut_buf_cur[0] = pSrc[0]; pOut_buf_cur[1] = pSrc[1]; pOut_buf_cur[2] = pSrc[2]; pOut_buf_cur += 3; pSrc += 3; counter -= 3; } if (counter > 0) { pOut_buf_cur[0] = pSrc[0]; if (counter > 1) pOut_buf_cur[1] = pSrc[1]; pOut_buf_cur += counter; } } } } while (!(r->m_final & 1)); /* Ensure byte alignment and put back any bytes from the bitbuf if we've looked ahead too far on gzip, or other Deflate streams followed by arbitrary data. */ /* I'm being super conservative here. A number of simplifications can be made to the byte alignment part, and the Adler32 check shouldn't ever need to worry about reading from the bitbuf now. */ TINFL_SKIP_BITS(32, num_bits & 7); while ((pIn_buf_cur > pIn_buf_next) && (num_bits >= 8)) { --pIn_buf_cur; num_bits -= 8; } bit_buf &= ~(~(tinfl_bit_buf_t)0 << num_bits); MZ_ASSERT(!num_bits); /* if this assert fires then we've read beyond the end of non-deflate/zlib streams with following data (such as gzip streams). */ if (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) { for (counter = 0; counter < 4; ++counter) { mz_uint s; if (num_bits) TINFL_GET_BITS(41, s, 8); else TINFL_GET_BYTE(42, s); r->m_z_adler32 = (r->m_z_adler32 << 8) | s; } } TINFL_CR_RETURN_FOREVER(34, TINFL_STATUS_DONE); TINFL_CR_FINISH common_exit: /* As long as we aren't telling the caller that we NEED more input to make forward progress: */ /* Put back any bytes from the bitbuf in case we've looked ahead too far on gzip, or other Deflate streams followed by arbitrary data. */ /* We need to be very careful here to NOT push back any bytes we definitely know we need to make forward progress, though, or we'll lock the caller up into an inf loop. */ if ((status != TINFL_STATUS_NEEDS_MORE_INPUT) && (status != TINFL_STATUS_FAILED_CANNOT_MAKE_PROGRESS)) { while ((pIn_buf_cur > pIn_buf_next) && (num_bits >= 8)) { --pIn_buf_cur; num_bits -= 8; } } r->m_num_bits = num_bits; r->m_bit_buf = bit_buf & ~(~(tinfl_bit_buf_t)0 << num_bits); r->m_dist = dist; r->m_counter = counter; r->m_num_extra = num_extra; r->m_dist_from_out_buf_start = dist_from_out_buf_start; *pIn_buf_size = pIn_buf_cur - pIn_buf_next; *pOut_buf_size = pOut_buf_cur - pOut_buf_next; if ((decomp_flags & (TINFL_FLAG_PARSE_ZLIB_HEADER | TINFL_FLAG_COMPUTE_ADLER32)) && (status >= 0)) { const mz_uint8 *ptr = pOut_buf_next; size_t buf_len = *pOut_buf_size; mz_uint32 i, s1 = r->m_check_adler32 & 0xffff, s2 = r->m_check_adler32 >> 16; size_t block_len = buf_len % 5552; while (buf_len) { for (i = 0; i + 7 < block_len; i += 8, ptr += 8) { s1 += ptr[0], s2 += s1; s1 += ptr[1], s2 += s1; s1 += ptr[2], s2 += s1; s1 += ptr[3], s2 += s1; s1 += ptr[4], s2 += s1; s1 += ptr[5], s2 += s1; s1 += ptr[6], s2 += s1; s1 += ptr[7], s2 += s1; } for (; i < block_len; ++i) s1 += *ptr++, s2 += s1; s1 %= 65521U, s2 %= 65521U; buf_len -= block_len; block_len = 5552; } r->m_check_adler32 = (s2 << 16) + s1; if ((status == TINFL_STATUS_DONE) && (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) && (r->m_check_adler32 != r->m_z_adler32)) status = TINFL_STATUS_ADLER32_MISMATCH; } return status; } /* Higher level helper functions. */ void *tinfl_decompress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags) { tinfl_decompressor decomp; void *pBuf = NULL, *pNew_buf; size_t src_buf_ofs = 0, out_buf_capacity = 0; *pOut_len = 0; tinfl_init(&decomp); for (;;) { size_t src_buf_size = src_buf_len - src_buf_ofs, dst_buf_size = out_buf_capacity - *pOut_len, new_out_buf_capacity; tinfl_status status = tinfl_decompress(&decomp, (const mz_uint8 *)pSrc_buf + src_buf_ofs, &src_buf_size, (mz_uint8 *)pBuf, pBuf ? (mz_uint8 *)pBuf + *pOut_len : NULL, &dst_buf_size, (flags & ~TINFL_FLAG_HAS_MORE_INPUT) | TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF); if ((status < 0) || (status == TINFL_STATUS_NEEDS_MORE_INPUT)) { MZ_FREE(pBuf); *pOut_len = 0; return NULL; } src_buf_ofs += src_buf_size; *pOut_len += dst_buf_size; if (status == TINFL_STATUS_DONE) break; new_out_buf_capacity = out_buf_capacity * 2; if (new_out_buf_capacity < 128) new_out_buf_capacity = 128; pNew_buf = MZ_REALLOC(pBuf, new_out_buf_capacity); if (!pNew_buf) { MZ_FREE(pBuf); *pOut_len = 0; return NULL; } pBuf = pNew_buf; out_buf_capacity = new_out_buf_capacity; } return pBuf; } size_t tinfl_decompress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags) { tinfl_decompressor decomp; tinfl_status status; tinfl_init(&decomp); status = tinfl_decompress(&decomp, (const mz_uint8 *)pSrc_buf, &src_buf_len, (mz_uint8 *)pOut_buf, (mz_uint8 *)pOut_buf, &out_buf_len, (flags & ~TINFL_FLAG_HAS_MORE_INPUT) | TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF); return (status != TINFL_STATUS_DONE) ? TINFL_DECOMPRESS_MEM_TO_MEM_FAILED : out_buf_len; } int tinfl_decompress_mem_to_callback(const void *pIn_buf, size_t *pIn_buf_size, tinfl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags) { int result = 0; tinfl_decompressor decomp; mz_uint8 *pDict = (mz_uint8 *)MZ_MALLOC(TINFL_LZ_DICT_SIZE); size_t in_buf_ofs = 0, dict_ofs = 0; if (!pDict) return TINFL_STATUS_FAILED; memset(pDict,0,TINFL_LZ_DICT_SIZE); tinfl_init(&decomp); for (;;) { size_t in_buf_size = *pIn_buf_size - in_buf_ofs, dst_buf_size = TINFL_LZ_DICT_SIZE - dict_ofs; tinfl_status status = tinfl_decompress(&decomp, (const mz_uint8 *)pIn_buf + in_buf_ofs, &in_buf_size, pDict, pDict + dict_ofs, &dst_buf_size, (flags & ~(TINFL_FLAG_HAS_MORE_INPUT | TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF))); in_buf_ofs += in_buf_size; if ((dst_buf_size) && (!(*pPut_buf_func)(pDict + dict_ofs, (int)dst_buf_size, pPut_buf_user))) break; if (status != TINFL_STATUS_HAS_MORE_OUTPUT) { result = (status == TINFL_STATUS_DONE); break; } dict_ofs = (dict_ofs + dst_buf_size) & (TINFL_LZ_DICT_SIZE - 1); } MZ_FREE(pDict); *pIn_buf_size = in_buf_ofs; return result; } #ifndef MINIZ_NO_MALLOC tinfl_decompressor *tinfl_decompressor_alloc(void) { tinfl_decompressor *pDecomp = (tinfl_decompressor *)MZ_MALLOC(sizeof(tinfl_decompressor)); if (pDecomp) tinfl_init(pDecomp); return pDecomp; } void tinfl_decompressor_free(tinfl_decompressor *pDecomp) { MZ_FREE(pDecomp); } #endif #ifdef __cplusplus } #endif #endif /*#ifndef MINIZ_NO_INFLATE_APIS*/ /************************************************************************** * * Copyright 2013-2014 RAD Game Tools and Valve Software * Copyright 2010-2014 Rich Geldreich and Tenacious Software LLC * Copyright 2016 Martin Raiber * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #ifndef MINIZ_NO_ARCHIVE_APIS #ifdef __cplusplus extern "C" { #endif /* ------------------- .ZIP archive reading */ #ifdef MINIZ_NO_STDIO #define MZ_FILE void * #else #include #if defined(_MSC_VER) || defined(__MINGW64__) #define WIN32_LEAN_AND_MEAN #include static WCHAR* mz_utf8z_to_widechar(const char* str) { int reqChars = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0); WCHAR* wStr = (WCHAR*)malloc(reqChars * sizeof(WCHAR)); MultiByteToWideChar(CP_UTF8, 0, str, -1, wStr, reqChars); return wStr; } static FILE *mz_fopen(const char *pFilename, const char *pMode) { WCHAR* wFilename = mz_utf8z_to_widechar(pFilename); WCHAR* wMode = mz_utf8z_to_widechar(pMode); FILE* pFile = NULL; errno_t err = _wfopen_s(&pFile, wFilename, wMode); free(wFilename); free(wMode); return err ? NULL : pFile; } static FILE *mz_freopen(const char *pPath, const char *pMode, FILE *pStream) { WCHAR* wPath = mz_utf8z_to_widechar(pPath); WCHAR* wMode = mz_utf8z_to_widechar(pMode); FILE* pFile = NULL; errno_t err = _wfreopen_s(&pFile, wPath, wMode, pStream); free(wPath); free(wMode); return err ? NULL : pFile; } static int mz_stat64(const char *path, struct __stat64 *buffer) { WCHAR* wPath = mz_utf8z_to_widechar(path); int res = _wstat64(wPath, buffer); free(wPath); return res; } #ifndef MINIZ_NO_TIME #include #endif #define MZ_FOPEN mz_fopen #define MZ_FCLOSE fclose #define MZ_FREAD fread #define MZ_FWRITE fwrite #define MZ_FTELL64 _ftelli64 #define MZ_FSEEK64 _fseeki64 #define MZ_FILE_STAT_STRUCT _stat64 #define MZ_FILE_STAT mz_stat64 #define MZ_FFLUSH fflush #define MZ_FREOPEN mz_freopen #define MZ_DELETE_FILE remove #elif defined(__MINGW32__) || defined(__WATCOMC__) #ifndef MINIZ_NO_TIME #include #endif #define MZ_FOPEN(f, m) fopen(f, m) #define MZ_FCLOSE fclose #define MZ_FREAD fread #define MZ_FWRITE fwrite #define MZ_FTELL64 _ftelli64 #define MZ_FSEEK64 _fseeki64 #define MZ_FILE_STAT_STRUCT stat #define MZ_FILE_STAT stat #define MZ_FFLUSH fflush #define MZ_FREOPEN(f, m, s) freopen(f, m, s) #define MZ_DELETE_FILE remove #elif defined(__TINYC__) #ifndef MINIZ_NO_TIME #include #endif #define MZ_FOPEN(f, m) fopen(f, m) #define MZ_FCLOSE fclose #define MZ_FREAD fread #define MZ_FWRITE fwrite #define MZ_FTELL64 ftell #define MZ_FSEEK64 fseek #define MZ_FILE_STAT_STRUCT stat #define MZ_FILE_STAT stat #define MZ_FFLUSH fflush #define MZ_FREOPEN(f, m, s) freopen(f, m, s) #define MZ_DELETE_FILE remove #elif defined(__USE_LARGEFILE64) /* gcc, clang */ #ifndef MINIZ_NO_TIME #include #endif #define MZ_FOPEN(f, m) fopen64(f, m) #define MZ_FCLOSE fclose #define MZ_FREAD fread #define MZ_FWRITE fwrite #define MZ_FTELL64 ftello64 #define MZ_FSEEK64 fseeko64 #define MZ_FILE_STAT_STRUCT stat64 #define MZ_FILE_STAT stat64 #define MZ_FFLUSH fflush #define MZ_FREOPEN(p, m, s) freopen64(p, m, s) #define MZ_DELETE_FILE remove #elif defined(__APPLE__) || defined(__FreeBSD__) #ifndef MINIZ_NO_TIME #include #endif #define MZ_FOPEN(f, m) fopen(f, m) #define MZ_FCLOSE fclose #define MZ_FREAD fread #define MZ_FWRITE fwrite #define MZ_FTELL64 ftello #define MZ_FSEEK64 fseeko #define MZ_FILE_STAT_STRUCT stat #define MZ_FILE_STAT stat #define MZ_FFLUSH fflush #define MZ_FREOPEN(p, m, s) freopen(p, m, s) #define MZ_DELETE_FILE remove #else #pragma message("Using fopen, ftello, fseeko, stat() etc. path for file I/O - this path may not support large files.") #ifndef MINIZ_NO_TIME #include #endif #define MZ_FOPEN(f, m) fopen(f, m) #define MZ_FCLOSE fclose #define MZ_FREAD fread #define MZ_FWRITE fwrite #ifdef __STRICT_ANSI__ #define MZ_FTELL64 ftell #define MZ_FSEEK64 fseek #else #define MZ_FTELL64 ftello #define MZ_FSEEK64 fseeko #endif #define MZ_FILE_STAT_STRUCT stat #define MZ_FILE_STAT stat #define MZ_FFLUSH fflush #define MZ_FREOPEN(f, m, s) freopen(f, m, s) #define MZ_DELETE_FILE remove #endif /* #ifdef _MSC_VER */ #endif /* #ifdef MINIZ_NO_STDIO */ #define MZ_TOLOWER(c) ((((c) >= 'A') && ((c) <= 'Z')) ? ((c) - 'A' + 'a') : (c)) /* Various ZIP archive enums. To completely avoid cross platform compiler alignment and platform endian issues, miniz.c doesn't use structs for any of this stuff. */ enum { /* ZIP archive identifiers and record sizes */ MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG = 0x06054b50, MZ_ZIP_CENTRAL_DIR_HEADER_SIG = 0x02014b50, MZ_ZIP_LOCAL_DIR_HEADER_SIG = 0x04034b50, MZ_ZIP_LOCAL_DIR_HEADER_SIZE = 30, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE = 46, MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE = 22, /* ZIP64 archive identifier and record sizes */ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIG = 0x06064b50, MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIG = 0x07064b50, MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE = 56, MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE = 20, MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID = 0x0001, MZ_ZIP_DATA_DESCRIPTOR_ID = 0x08074b50, MZ_ZIP_DATA_DESCRIPTER_SIZE64 = 24, MZ_ZIP_DATA_DESCRIPTER_SIZE32 = 16, /* Central directory header record offsets */ MZ_ZIP_CDH_SIG_OFS = 0, MZ_ZIP_CDH_VERSION_MADE_BY_OFS = 4, MZ_ZIP_CDH_VERSION_NEEDED_OFS = 6, MZ_ZIP_CDH_BIT_FLAG_OFS = 8, MZ_ZIP_CDH_METHOD_OFS = 10, MZ_ZIP_CDH_FILE_TIME_OFS = 12, MZ_ZIP_CDH_FILE_DATE_OFS = 14, MZ_ZIP_CDH_CRC32_OFS = 16, MZ_ZIP_CDH_COMPRESSED_SIZE_OFS = 20, MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS = 24, MZ_ZIP_CDH_FILENAME_LEN_OFS = 28, MZ_ZIP_CDH_EXTRA_LEN_OFS = 30, MZ_ZIP_CDH_COMMENT_LEN_OFS = 32, MZ_ZIP_CDH_DISK_START_OFS = 34, MZ_ZIP_CDH_INTERNAL_ATTR_OFS = 36, MZ_ZIP_CDH_EXTERNAL_ATTR_OFS = 38, MZ_ZIP_CDH_LOCAL_HEADER_OFS = 42, /* Local directory header offsets */ MZ_ZIP_LDH_SIG_OFS = 0, MZ_ZIP_LDH_VERSION_NEEDED_OFS = 4, MZ_ZIP_LDH_BIT_FLAG_OFS = 6, MZ_ZIP_LDH_METHOD_OFS = 8, MZ_ZIP_LDH_FILE_TIME_OFS = 10, MZ_ZIP_LDH_FILE_DATE_OFS = 12, MZ_ZIP_LDH_CRC32_OFS = 14, MZ_ZIP_LDH_COMPRESSED_SIZE_OFS = 18, MZ_ZIP_LDH_DECOMPRESSED_SIZE_OFS = 22, MZ_ZIP_LDH_FILENAME_LEN_OFS = 26, MZ_ZIP_LDH_EXTRA_LEN_OFS = 28, MZ_ZIP_LDH_BIT_FLAG_HAS_LOCATOR = 1 << 3, /* End of central directory offsets */ MZ_ZIP_ECDH_SIG_OFS = 0, MZ_ZIP_ECDH_NUM_THIS_DISK_OFS = 4, MZ_ZIP_ECDH_NUM_DISK_CDIR_OFS = 6, MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS = 8, MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS = 10, MZ_ZIP_ECDH_CDIR_SIZE_OFS = 12, MZ_ZIP_ECDH_CDIR_OFS_OFS = 16, MZ_ZIP_ECDH_COMMENT_SIZE_OFS = 20, /* ZIP64 End of central directory locator offsets */ MZ_ZIP64_ECDL_SIG_OFS = 0, /* 4 bytes */ MZ_ZIP64_ECDL_NUM_DISK_CDIR_OFS = 4, /* 4 bytes */ MZ_ZIP64_ECDL_REL_OFS_TO_ZIP64_ECDR_OFS = 8, /* 8 bytes */ MZ_ZIP64_ECDL_TOTAL_NUMBER_OF_DISKS_OFS = 16, /* 4 bytes */ /* ZIP64 End of central directory header offsets */ MZ_ZIP64_ECDH_SIG_OFS = 0, /* 4 bytes */ MZ_ZIP64_ECDH_SIZE_OF_RECORD_OFS = 4, /* 8 bytes */ MZ_ZIP64_ECDH_VERSION_MADE_BY_OFS = 12, /* 2 bytes */ MZ_ZIP64_ECDH_VERSION_NEEDED_OFS = 14, /* 2 bytes */ MZ_ZIP64_ECDH_NUM_THIS_DISK_OFS = 16, /* 4 bytes */ MZ_ZIP64_ECDH_NUM_DISK_CDIR_OFS = 20, /* 4 bytes */ MZ_ZIP64_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS = 24, /* 8 bytes */ MZ_ZIP64_ECDH_CDIR_TOTAL_ENTRIES_OFS = 32, /* 8 bytes */ MZ_ZIP64_ECDH_CDIR_SIZE_OFS = 40, /* 8 bytes */ MZ_ZIP64_ECDH_CDIR_OFS_OFS = 48, /* 8 bytes */ MZ_ZIP_VERSION_MADE_BY_DOS_FILESYSTEM_ID = 0, MZ_ZIP_DOS_DIR_ATTRIBUTE_BITFLAG = 0x10, MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED = 1, MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_COMPRESSED_PATCH_FLAG = 32, MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION = 64, MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_LOCAL_DIR_IS_MASKED = 8192, MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_UTF8 = 1 << 11 }; typedef struct { void *m_p; size_t m_size, m_capacity; mz_uint m_element_size; } mz_zip_array; struct mz_zip_internal_state_tag { mz_zip_array m_central_dir; mz_zip_array m_central_dir_offsets; mz_zip_array m_sorted_central_dir_offsets; /* The flags passed in when the archive is initially opened. */ mz_uint32 m_init_flags; /* MZ_TRUE if the archive has a zip64 end of central directory headers, etc. */ mz_bool m_zip64; /* MZ_TRUE if we found zip64 extended info in the central directory (m_zip64 will also be slammed to true too, even if we didn't find a zip64 end of central dir header, etc.) */ mz_bool m_zip64_has_extended_info_fields; /* These fields are used by the file, FILE, memory, and memory/heap read/write helpers. */ MZ_FILE *m_pFile; mz_uint64 m_file_archive_start_ofs; void *m_pMem; size_t m_mem_size; size_t m_mem_capacity; }; #define MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(array_ptr, element_size) (array_ptr)->m_element_size = element_size #if defined(DEBUG) || defined(_DEBUG) static MZ_FORCEINLINE mz_uint mz_zip_array_range_check(const mz_zip_array *pArray, mz_uint index) { MZ_ASSERT(index < pArray->m_size); return index; } #define MZ_ZIP_ARRAY_ELEMENT(array_ptr, element_type, index) ((element_type *)((array_ptr)->m_p))[mz_zip_array_range_check(array_ptr, index)] #else #define MZ_ZIP_ARRAY_ELEMENT(array_ptr, element_type, index) ((element_type *)((array_ptr)->m_p))[index] #endif static MZ_FORCEINLINE void mz_zip_array_init(mz_zip_array *pArray, mz_uint32 element_size) { memset(pArray, 0, sizeof(mz_zip_array)); pArray->m_element_size = element_size; } static MZ_FORCEINLINE void mz_zip_array_clear(mz_zip_archive *pZip, mz_zip_array *pArray) { pZip->m_pFree(pZip->m_pAlloc_opaque, pArray->m_p); memset(pArray, 0, sizeof(mz_zip_array)); } static mz_bool mz_zip_array_ensure_capacity(mz_zip_archive *pZip, mz_zip_array *pArray, size_t min_new_capacity, mz_uint growing) { void *pNew_p; size_t new_capacity = min_new_capacity; MZ_ASSERT(pArray->m_element_size); if (pArray->m_capacity >= min_new_capacity) return MZ_TRUE; if (growing) { new_capacity = MZ_MAX(1, pArray->m_capacity); while (new_capacity < min_new_capacity) new_capacity *= 2; } if (NULL == (pNew_p = pZip->m_pRealloc(pZip->m_pAlloc_opaque, pArray->m_p, pArray->m_element_size, new_capacity))) return MZ_FALSE; pArray->m_p = pNew_p; pArray->m_capacity = new_capacity; return MZ_TRUE; } static MZ_FORCEINLINE mz_bool mz_zip_array_reserve(mz_zip_archive *pZip, mz_zip_array *pArray, size_t new_capacity, mz_uint growing) { if (new_capacity > pArray->m_capacity) { if (!mz_zip_array_ensure_capacity(pZip, pArray, new_capacity, growing)) return MZ_FALSE; } return MZ_TRUE; } static MZ_FORCEINLINE mz_bool mz_zip_array_resize(mz_zip_archive *pZip, mz_zip_array *pArray, size_t new_size, mz_uint growing) { if (new_size > pArray->m_capacity) { if (!mz_zip_array_ensure_capacity(pZip, pArray, new_size, growing)) return MZ_FALSE; } pArray->m_size = new_size; return MZ_TRUE; } static MZ_FORCEINLINE mz_bool mz_zip_array_ensure_room(mz_zip_archive *pZip, mz_zip_array *pArray, size_t n) { return mz_zip_array_reserve(pZip, pArray, pArray->m_size + n, MZ_TRUE); } static MZ_FORCEINLINE mz_bool mz_zip_array_push_back(mz_zip_archive *pZip, mz_zip_array *pArray, const void *pElements, size_t n) { size_t orig_size = pArray->m_size; if (!mz_zip_array_resize(pZip, pArray, orig_size + n, MZ_TRUE)) return MZ_FALSE; if (n > 0) memcpy((mz_uint8 *)pArray->m_p + orig_size * pArray->m_element_size, pElements, n * pArray->m_element_size); return MZ_TRUE; } #ifndef MINIZ_NO_TIME static MZ_TIME_T mz_zip_dos_to_time_t(int dos_time, int dos_date) { struct tm tm; memset(&tm, 0, sizeof(tm)); tm.tm_isdst = -1; tm.tm_year = ((dos_date >> 9) & 127) + 1980 - 1900; tm.tm_mon = ((dos_date >> 5) & 15) - 1; tm.tm_mday = dos_date & 31; tm.tm_hour = (dos_time >> 11) & 31; tm.tm_min = (dos_time >> 5) & 63; tm.tm_sec = (dos_time << 1) & 62; return mktime(&tm); } #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS static void mz_zip_time_t_to_dos_time(MZ_TIME_T time, mz_uint16 *pDOS_time, mz_uint16 *pDOS_date) { #ifdef _MSC_VER struct tm tm_struct; struct tm *tm = &tm_struct; errno_t err = localtime_s(tm, &time); if (err) { *pDOS_date = 0; *pDOS_time = 0; return; } #else struct tm *tm = localtime(&time); #endif /* #ifdef _MSC_VER */ *pDOS_time = (mz_uint16)(((tm->tm_hour) << 11) + ((tm->tm_min) << 5) + ((tm->tm_sec) >> 1)); *pDOS_date = (mz_uint16)(((tm->tm_year + 1900 - 1980) << 9) + ((tm->tm_mon + 1) << 5) + tm->tm_mday); } #endif /* MINIZ_NO_ARCHIVE_WRITING_APIS */ #ifndef MINIZ_NO_STDIO #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS static mz_bool mz_zip_get_file_modified_time(const char *pFilename, MZ_TIME_T *pTime) { struct MZ_FILE_STAT_STRUCT file_stat; /* On Linux with x86 glibc, this call will fail on large files (I think >= 0x80000000 bytes) unless you compiled with _LARGEFILE64_SOURCE. Argh. */ if (MZ_FILE_STAT(pFilename, &file_stat) != 0) return MZ_FALSE; *pTime = file_stat.st_mtime; return MZ_TRUE; } #endif /* #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS*/ static mz_bool mz_zip_set_file_times(const char *pFilename, MZ_TIME_T access_time, MZ_TIME_T modified_time) { struct utimbuf t; memset(&t, 0, sizeof(t)); t.actime = access_time; t.modtime = modified_time; return !utime(pFilename, &t); } #endif /* #ifndef MINIZ_NO_STDIO */ #endif /* #ifndef MINIZ_NO_TIME */ static MZ_FORCEINLINE mz_bool mz_zip_set_error(mz_zip_archive *pZip, mz_zip_error err_num) { if (pZip) pZip->m_last_error = err_num; return MZ_FALSE; } static mz_bool mz_zip_reader_init_internal(mz_zip_archive *pZip, mz_uint flags) { (void)flags; if ((!pZip) || (pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_INVALID)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); if (!pZip->m_pAlloc) pZip->m_pAlloc = miniz_def_alloc_func; if (!pZip->m_pFree) pZip->m_pFree = miniz_def_free_func; if (!pZip->m_pRealloc) pZip->m_pRealloc = miniz_def_realloc_func; pZip->m_archive_size = 0; pZip->m_central_directory_file_ofs = 0; pZip->m_total_files = 0; pZip->m_last_error = MZ_ZIP_NO_ERROR; if (NULL == (pZip->m_pState = (mz_zip_internal_state *)pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, sizeof(mz_zip_internal_state)))) return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); memset(pZip->m_pState, 0, sizeof(mz_zip_internal_state)); MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_central_dir, sizeof(mz_uint8)); MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_central_dir_offsets, sizeof(mz_uint32)); MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_sorted_central_dir_offsets, sizeof(mz_uint32)); pZip->m_pState->m_init_flags = flags; pZip->m_pState->m_zip64 = MZ_FALSE; pZip->m_pState->m_zip64_has_extended_info_fields = MZ_FALSE; pZip->m_zip_mode = MZ_ZIP_MODE_READING; return MZ_TRUE; } static MZ_FORCEINLINE mz_bool mz_zip_reader_filename_less(const mz_zip_array *pCentral_dir_array, const mz_zip_array *pCentral_dir_offsets, mz_uint l_index, mz_uint r_index) { const mz_uint8 *pL = &MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_array, mz_uint8, MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_offsets, mz_uint32, l_index)), *pE; const mz_uint8 *pR = &MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_array, mz_uint8, MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_offsets, mz_uint32, r_index)); mz_uint l_len = MZ_READ_LE16(pL + MZ_ZIP_CDH_FILENAME_LEN_OFS), r_len = MZ_READ_LE16(pR + MZ_ZIP_CDH_FILENAME_LEN_OFS); mz_uint8 l = 0, r = 0; pL += MZ_ZIP_CENTRAL_DIR_HEADER_SIZE; pR += MZ_ZIP_CENTRAL_DIR_HEADER_SIZE; pE = pL + MZ_MIN(l_len, r_len); while (pL < pE) { if ((l = MZ_TOLOWER(*pL)) != (r = MZ_TOLOWER(*pR))) break; pL++; pR++; } return (pL == pE) ? (l_len < r_len) : (l < r); } #define MZ_SWAP_UINT32(a, b) \ do \ { \ mz_uint32 t = a; \ a = b; \ b = t; \ } \ MZ_MACRO_END /* Heap sort of lowercased filenames, used to help accelerate plain central directory searches by mz_zip_reader_locate_file(). (Could also use qsort(), but it could allocate memory.) */ static void mz_zip_reader_sort_central_dir_offsets_by_filename(mz_zip_archive *pZip) { mz_zip_internal_state *pState = pZip->m_pState; const mz_zip_array *pCentral_dir_offsets = &pState->m_central_dir_offsets; const mz_zip_array *pCentral_dir = &pState->m_central_dir; mz_uint32 *pIndices; mz_uint32 start, end; const mz_uint32 size = pZip->m_total_files; if (size <= 1U) return; pIndices = &MZ_ZIP_ARRAY_ELEMENT(&pState->m_sorted_central_dir_offsets, mz_uint32, 0); start = (size - 2U) >> 1U; for (;;) { mz_uint64 child, root = start; for (;;) { if ((child = (root << 1U) + 1U) >= size) break; child += (((child + 1U) < size) && (mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets, pIndices[child], pIndices[child + 1U]))); if (!mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets, pIndices[root], pIndices[child])) break; MZ_SWAP_UINT32(pIndices[root], pIndices[child]); root = child; } if (!start) break; start--; } end = size - 1; while (end > 0) { mz_uint64 child, root = 0; MZ_SWAP_UINT32(pIndices[end], pIndices[0]); for (;;) { if ((child = (root << 1U) + 1U) >= end) break; child += (((child + 1U) < end) && mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets, pIndices[child], pIndices[child + 1U])); if (!mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets, pIndices[root], pIndices[child])) break; MZ_SWAP_UINT32(pIndices[root], pIndices[child]); root = child; } end--; } } static mz_bool mz_zip_reader_locate_header_sig(mz_zip_archive *pZip, mz_uint32 record_sig, mz_uint32 record_size, mz_int64 *pOfs) { mz_int64 cur_file_ofs; mz_uint32 buf_u32[4096 / sizeof(mz_uint32)]; mz_uint8 *pBuf = (mz_uint8 *)buf_u32; /* Basic sanity checks - reject files which are too small */ if (pZip->m_archive_size < record_size) return MZ_FALSE; /* Find the record by scanning the file from the end towards the beginning. */ cur_file_ofs = MZ_MAX((mz_int64)pZip->m_archive_size - (mz_int64)sizeof(buf_u32), 0); for (;;) { int i, n = (int)MZ_MIN(sizeof(buf_u32), pZip->m_archive_size - cur_file_ofs); if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf, n) != (mz_uint)n) return MZ_FALSE; for (i = n - 4; i >= 0; --i) { mz_uint s = MZ_READ_LE32(pBuf + i); if (s == record_sig) { if ((pZip->m_archive_size - (cur_file_ofs + i)) >= record_size) break; } } if (i >= 0) { cur_file_ofs += i; break; } /* Give up if we've searched the entire file, or we've gone back "too far" (~64kb) */ if ((!cur_file_ofs) || ((pZip->m_archive_size - cur_file_ofs) >= (MZ_UINT16_MAX + record_size))) return MZ_FALSE; cur_file_ofs = MZ_MAX(cur_file_ofs - (sizeof(buf_u32) - 3), 0); } *pOfs = cur_file_ofs; return MZ_TRUE; } static mz_bool mz_zip_reader_read_central_dir(mz_zip_archive *pZip, mz_uint flags) { mz_uint cdir_size = 0, cdir_entries_on_this_disk = 0, num_this_disk = 0, cdir_disk_index = 0; mz_uint64 cdir_ofs = 0; mz_int64 cur_file_ofs = 0; const mz_uint8 *p; mz_uint32 buf_u32[4096 / sizeof(mz_uint32)]; mz_uint8 *pBuf = (mz_uint8 *)buf_u32; mz_bool sort_central_dir = ((flags & MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY) == 0); mz_uint32 zip64_end_of_central_dir_locator_u32[(MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE + sizeof(mz_uint32) - 1) / sizeof(mz_uint32)]; mz_uint8 *pZip64_locator = (mz_uint8 *)zip64_end_of_central_dir_locator_u32; mz_uint32 zip64_end_of_central_dir_header_u32[(MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) / sizeof(mz_uint32)]; mz_uint8 *pZip64_end_of_central_dir = (mz_uint8 *)zip64_end_of_central_dir_header_u32; mz_uint64 zip64_end_of_central_dir_ofs = 0; /* Basic sanity checks - reject files which are too small, and check the first 4 bytes of the file to make sure a local header is there. */ if (pZip->m_archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE); if (!mz_zip_reader_locate_header_sig(pZip, MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG, MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE, &cur_file_ofs)) return mz_zip_set_error(pZip, MZ_ZIP_FAILED_FINDING_CENTRAL_DIR); /* Read and verify the end of central directory record. */ if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf, MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) != MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); if (MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_SIG_OFS) != MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG) return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE); if (cur_file_ofs >= (MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE + MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE)) { if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs - MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE, pZip64_locator, MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE) == MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE) { if (MZ_READ_LE32(pZip64_locator + MZ_ZIP64_ECDL_SIG_OFS) == MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIG) { zip64_end_of_central_dir_ofs = MZ_READ_LE64(pZip64_locator + MZ_ZIP64_ECDL_REL_OFS_TO_ZIP64_ECDR_OFS); if (zip64_end_of_central_dir_ofs > (pZip->m_archive_size - MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE)) return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE); if (pZip->m_pRead(pZip->m_pIO_opaque, zip64_end_of_central_dir_ofs, pZip64_end_of_central_dir, MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE) == MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE) { if (MZ_READ_LE32(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_SIG_OFS) == MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIG) { pZip->m_pState->m_zip64 = MZ_TRUE; } } } } } pZip->m_total_files = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS); cdir_entries_on_this_disk = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS); num_this_disk = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_NUM_THIS_DISK_OFS); cdir_disk_index = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_NUM_DISK_CDIR_OFS); cdir_size = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_SIZE_OFS); cdir_ofs = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_OFS_OFS); if (pZip->m_pState->m_zip64) { mz_uint32 zip64_total_num_of_disks = MZ_READ_LE32(pZip64_locator + MZ_ZIP64_ECDL_TOTAL_NUMBER_OF_DISKS_OFS); mz_uint64 zip64_cdir_total_entries = MZ_READ_LE64(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_TOTAL_ENTRIES_OFS); mz_uint64 zip64_cdir_total_entries_on_this_disk = MZ_READ_LE64(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS); mz_uint64 zip64_size_of_end_of_central_dir_record = MZ_READ_LE64(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_SIZE_OF_RECORD_OFS); mz_uint64 zip64_size_of_central_directory = MZ_READ_LE64(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_SIZE_OFS); if (zip64_size_of_end_of_central_dir_record < (MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE - 12)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); if (zip64_total_num_of_disks != 1U) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK); /* Check for miniz's practical limits */ if (zip64_cdir_total_entries > MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); pZip->m_total_files = (mz_uint32)zip64_cdir_total_entries; if (zip64_cdir_total_entries_on_this_disk > MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); cdir_entries_on_this_disk = (mz_uint32)zip64_cdir_total_entries_on_this_disk; /* Check for miniz's current practical limits (sorry, this should be enough for millions of files) */ if (zip64_size_of_central_directory > MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE); cdir_size = (mz_uint32)zip64_size_of_central_directory; num_this_disk = MZ_READ_LE32(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_NUM_THIS_DISK_OFS); cdir_disk_index = MZ_READ_LE32(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_NUM_DISK_CDIR_OFS); cdir_ofs = MZ_READ_LE64(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_OFS_OFS); } if (pZip->m_total_files != cdir_entries_on_this_disk) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK); if (((num_this_disk | cdir_disk_index) != 0) && ((num_this_disk != 1) || (cdir_disk_index != 1))) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK); if (cdir_size < (mz_uint64)pZip->m_total_files * MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); if ((cdir_ofs + (mz_uint64)cdir_size) > pZip->m_archive_size) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); pZip->m_central_directory_file_ofs = cdir_ofs; if (pZip->m_total_files) { mz_uint i, n; /* Read the entire central directory into a heap block, and allocate another heap block to hold the unsorted central dir file record offsets, and possibly another to hold the sorted indices. */ if ((!mz_zip_array_resize(pZip, &pZip->m_pState->m_central_dir, cdir_size, MZ_FALSE)) || (!mz_zip_array_resize(pZip, &pZip->m_pState->m_central_dir_offsets, pZip->m_total_files, MZ_FALSE))) return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); if (sort_central_dir) { if (!mz_zip_array_resize(pZip, &pZip->m_pState->m_sorted_central_dir_offsets, pZip->m_total_files, MZ_FALSE)) return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); } if (pZip->m_pRead(pZip->m_pIO_opaque, cdir_ofs, pZip->m_pState->m_central_dir.m_p, cdir_size) != cdir_size) return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); /* Now create an index into the central directory file records, do some basic sanity checking on each record */ p = (const mz_uint8 *)pZip->m_pState->m_central_dir.m_p; for (n = cdir_size, i = 0; i < pZip->m_total_files; ++i) { mz_uint total_header_size, disk_index, bit_flags, filename_size, ext_data_size; mz_uint64 comp_size, decomp_size, local_header_ofs; if ((n < MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) || (MZ_READ_LE32(p) != MZ_ZIP_CENTRAL_DIR_HEADER_SIG)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32, i) = (mz_uint32)(p - (const mz_uint8 *)pZip->m_pState->m_central_dir.m_p); if (sort_central_dir) MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_sorted_central_dir_offsets, mz_uint32, i) = i; comp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS); decomp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS); local_header_ofs = MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS); filename_size = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS); ext_data_size = MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS); if ((!pZip->m_pState->m_zip64_has_extended_info_fields) && (ext_data_size) && (MZ_MAX(MZ_MAX(comp_size, decomp_size), local_header_ofs) == MZ_UINT32_MAX)) { /* Attempt to find zip64 extended information field in the entry's extra data */ mz_uint32 extra_size_remaining = ext_data_size; if (extra_size_remaining) { const mz_uint8 *pExtra_data; void* buf = NULL; if (MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_size + ext_data_size > n) { buf = MZ_MALLOC(ext_data_size); if(buf==NULL) return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); if (pZip->m_pRead(pZip->m_pIO_opaque, cdir_ofs + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_size, buf, ext_data_size) != ext_data_size) { MZ_FREE(buf); return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); } pExtra_data = (mz_uint8*)buf; } else { pExtra_data = p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_size; } do { mz_uint32 field_id; mz_uint32 field_data_size; if (extra_size_remaining < (sizeof(mz_uint16) * 2)) { MZ_FREE(buf); return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); } field_id = MZ_READ_LE16(pExtra_data); field_data_size = MZ_READ_LE16(pExtra_data + sizeof(mz_uint16)); if ((field_data_size + sizeof(mz_uint16) * 2) > extra_size_remaining) { MZ_FREE(buf); return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); } if (field_id == MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID) { /* Ok, the archive didn't have any zip64 headers but it uses a zip64 extended information field so mark it as zip64 anyway (this can occur with infozip's zip util when it reads compresses files from stdin). */ pZip->m_pState->m_zip64 = MZ_TRUE; pZip->m_pState->m_zip64_has_extended_info_fields = MZ_TRUE; break; } pExtra_data += sizeof(mz_uint16) * 2 + field_data_size; extra_size_remaining = extra_size_remaining - sizeof(mz_uint16) * 2 - field_data_size; } while (extra_size_remaining); MZ_FREE(buf); } } /* I've seen archives that aren't marked as zip64 that uses zip64 ext data, argh */ if ((comp_size != MZ_UINT32_MAX) && (decomp_size != MZ_UINT32_MAX)) { if (((!MZ_READ_LE32(p + MZ_ZIP_CDH_METHOD_OFS)) && (decomp_size != comp_size)) || (decomp_size && !comp_size)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); } disk_index = MZ_READ_LE16(p + MZ_ZIP_CDH_DISK_START_OFS); if ((disk_index == MZ_UINT16_MAX) || ((disk_index != num_this_disk) && (disk_index != 1))) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK); if (comp_size != MZ_UINT32_MAX) { if (((mz_uint64)MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS) + MZ_ZIP_LOCAL_DIR_HEADER_SIZE + comp_size) > pZip->m_archive_size) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); } bit_flags = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS); if (bit_flags & MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_LOCAL_DIR_IS_MASKED) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_ENCRYPTION); if ((total_header_size = MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS) + MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS) + MZ_READ_LE16(p + MZ_ZIP_CDH_COMMENT_LEN_OFS)) > n) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); n -= total_header_size; p += total_header_size; } } if (sort_central_dir) mz_zip_reader_sort_central_dir_offsets_by_filename(pZip); return MZ_TRUE; } void mz_zip_zero_struct(mz_zip_archive *pZip) { if (pZip) MZ_CLEAR_PTR(pZip); } static mz_bool mz_zip_reader_end_internal(mz_zip_archive *pZip, mz_bool set_last_error) { mz_bool status = MZ_TRUE; if (!pZip) return MZ_FALSE; if ((!pZip->m_pState) || (!pZip->m_pAlloc) || (!pZip->m_pFree) || (pZip->m_zip_mode != MZ_ZIP_MODE_READING)) { if (set_last_error) pZip->m_last_error = MZ_ZIP_INVALID_PARAMETER; return MZ_FALSE; } if (pZip->m_pState) { mz_zip_internal_state *pState = pZip->m_pState; pZip->m_pState = NULL; mz_zip_array_clear(pZip, &pState->m_central_dir); mz_zip_array_clear(pZip, &pState->m_central_dir_offsets); mz_zip_array_clear(pZip, &pState->m_sorted_central_dir_offsets); #ifndef MINIZ_NO_STDIO if (pState->m_pFile) { if (pZip->m_zip_type == MZ_ZIP_TYPE_FILE) { if (MZ_FCLOSE(pState->m_pFile) == EOF) { if (set_last_error) pZip->m_last_error = MZ_ZIP_FILE_CLOSE_FAILED; status = MZ_FALSE; } } pState->m_pFile = NULL; } #endif /* #ifndef MINIZ_NO_STDIO */ pZip->m_pFree(pZip->m_pAlloc_opaque, pState); } pZip->m_zip_mode = MZ_ZIP_MODE_INVALID; return status; } mz_bool mz_zip_reader_end(mz_zip_archive *pZip) { return mz_zip_reader_end_internal(pZip, MZ_TRUE); } mz_bool mz_zip_reader_init(mz_zip_archive *pZip, mz_uint64 size, mz_uint flags) { if ((!pZip) || (!pZip->m_pRead)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); if (!mz_zip_reader_init_internal(pZip, flags)) return MZ_FALSE; pZip->m_zip_type = MZ_ZIP_TYPE_USER; pZip->m_archive_size = size; if (!mz_zip_reader_read_central_dir(pZip, flags)) { mz_zip_reader_end_internal(pZip, MZ_FALSE); return MZ_FALSE; } return MZ_TRUE; } static size_t mz_zip_mem_read_func(void *pOpaque, mz_uint64 file_ofs, void *pBuf, size_t n) { mz_zip_archive *pZip = (mz_zip_archive *)pOpaque; size_t s = (file_ofs >= pZip->m_archive_size) ? 0 : (size_t)MZ_MIN(pZip->m_archive_size - file_ofs, n); memcpy(pBuf, (const mz_uint8 *)pZip->m_pState->m_pMem + file_ofs, s); return s; } mz_bool mz_zip_reader_init_mem(mz_zip_archive *pZip, const void *pMem, size_t size, mz_uint flags) { if (!pMem) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); if (size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE); if (!mz_zip_reader_init_internal(pZip, flags)) return MZ_FALSE; pZip->m_zip_type = MZ_ZIP_TYPE_MEMORY; pZip->m_archive_size = size; pZip->m_pRead = mz_zip_mem_read_func; pZip->m_pIO_opaque = pZip; pZip->m_pNeeds_keepalive = NULL; #ifdef __cplusplus pZip->m_pState->m_pMem = const_cast(pMem); #else pZip->m_pState->m_pMem = (void *)pMem; #endif pZip->m_pState->m_mem_size = size; if (!mz_zip_reader_read_central_dir(pZip, flags)) { mz_zip_reader_end_internal(pZip, MZ_FALSE); return MZ_FALSE; } return MZ_TRUE; } #ifndef MINIZ_NO_STDIO static size_t mz_zip_file_read_func(void *pOpaque, mz_uint64 file_ofs, void *pBuf, size_t n) { mz_zip_archive *pZip = (mz_zip_archive *)pOpaque; mz_int64 cur_ofs = MZ_FTELL64(pZip->m_pState->m_pFile); file_ofs += pZip->m_pState->m_file_archive_start_ofs; if (((mz_int64)file_ofs < 0) || (((cur_ofs != (mz_int64)file_ofs)) && (MZ_FSEEK64(pZip->m_pState->m_pFile, (mz_int64)file_ofs, SEEK_SET)))) return 0; return MZ_FREAD(pBuf, 1, n, pZip->m_pState->m_pFile); } mz_bool mz_zip_reader_init_file(mz_zip_archive *pZip, const char *pFilename, mz_uint32 flags) { return mz_zip_reader_init_file_v2(pZip, pFilename, flags, 0, 0); } mz_bool mz_zip_reader_init_file_v2(mz_zip_archive *pZip, const char *pFilename, mz_uint flags, mz_uint64 file_start_ofs, mz_uint64 archive_size) { mz_uint64 file_size; MZ_FILE *pFile; if ((!pZip) || (!pFilename) || ((archive_size) && (archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE))) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); pFile = MZ_FOPEN(pFilename, "rb"); if (!pFile) return mz_zip_set_error(pZip, MZ_ZIP_FILE_OPEN_FAILED); file_size = archive_size; if (!file_size) { if (MZ_FSEEK64(pFile, 0, SEEK_END)) { MZ_FCLOSE(pFile); return mz_zip_set_error(pZip, MZ_ZIP_FILE_SEEK_FAILED); } file_size = MZ_FTELL64(pFile); } /* TODO: Better sanity check archive_size and the # of actual remaining bytes */ if (file_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) { MZ_FCLOSE(pFile); return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE); } if (!mz_zip_reader_init_internal(pZip, flags)) { MZ_FCLOSE(pFile); return MZ_FALSE; } pZip->m_zip_type = MZ_ZIP_TYPE_FILE; pZip->m_pRead = mz_zip_file_read_func; pZip->m_pIO_opaque = pZip; pZip->m_pState->m_pFile = pFile; pZip->m_archive_size = file_size; pZip->m_pState->m_file_archive_start_ofs = file_start_ofs; if (!mz_zip_reader_read_central_dir(pZip, flags)) { mz_zip_reader_end_internal(pZip, MZ_FALSE); return MZ_FALSE; } return MZ_TRUE; } mz_bool mz_zip_reader_init_cfile(mz_zip_archive *pZip, MZ_FILE *pFile, mz_uint64 archive_size, mz_uint flags) { mz_uint64 cur_file_ofs; if ((!pZip) || (!pFile)) return mz_zip_set_error(pZip, MZ_ZIP_FILE_OPEN_FAILED); cur_file_ofs = MZ_FTELL64(pFile); if (!archive_size) { if (MZ_FSEEK64(pFile, 0, SEEK_END)) return mz_zip_set_error(pZip, MZ_ZIP_FILE_SEEK_FAILED); archive_size = MZ_FTELL64(pFile) - cur_file_ofs; if (archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE); } if (!mz_zip_reader_init_internal(pZip, flags)) return MZ_FALSE; pZip->m_zip_type = MZ_ZIP_TYPE_CFILE; pZip->m_pRead = mz_zip_file_read_func; pZip->m_pIO_opaque = pZip; pZip->m_pState->m_pFile = pFile; pZip->m_archive_size = archive_size; pZip->m_pState->m_file_archive_start_ofs = cur_file_ofs; if (!mz_zip_reader_read_central_dir(pZip, flags)) { mz_zip_reader_end_internal(pZip, MZ_FALSE); return MZ_FALSE; } return MZ_TRUE; } #endif /* #ifndef MINIZ_NO_STDIO */ static MZ_FORCEINLINE const mz_uint8 *mz_zip_get_cdh(mz_zip_archive *pZip, mz_uint file_index) { if ((!pZip) || (!pZip->m_pState) || (file_index >= pZip->m_total_files)) return NULL; return &MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir, mz_uint8, MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32, file_index)); } mz_bool mz_zip_reader_is_file_encrypted(mz_zip_archive *pZip, mz_uint file_index) { mz_uint m_bit_flag; const mz_uint8 *p = mz_zip_get_cdh(pZip, file_index); if (!p) { mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); return MZ_FALSE; } m_bit_flag = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS); return (m_bit_flag & (MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED | MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION)) != 0; } mz_bool mz_zip_reader_is_file_supported(mz_zip_archive *pZip, mz_uint file_index) { mz_uint bit_flag; mz_uint method; const mz_uint8 *p = mz_zip_get_cdh(pZip, file_index); if (!p) { mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); return MZ_FALSE; } method = MZ_READ_LE16(p + MZ_ZIP_CDH_METHOD_OFS); bit_flag = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS); if ((method != 0) && (method != MZ_DEFLATED)) { mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_METHOD); return MZ_FALSE; } if (bit_flag & (MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED | MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION)) { mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_ENCRYPTION); return MZ_FALSE; } if (bit_flag & MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_COMPRESSED_PATCH_FLAG) { mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_FEATURE); return MZ_FALSE; } return MZ_TRUE; } mz_bool mz_zip_reader_is_file_a_directory(mz_zip_archive *pZip, mz_uint file_index) { mz_uint filename_len, attribute_mapping_id, external_attr; const mz_uint8 *p = mz_zip_get_cdh(pZip, file_index); if (!p) { mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); return MZ_FALSE; } filename_len = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS); if (filename_len) { if (*(p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_len - 1) == '/') return MZ_TRUE; } /* Bugfix: This code was also checking if the internal attribute was non-zero, which wasn't correct. */ /* Most/all zip writers (hopefully) set DOS file/directory attributes in the low 16-bits, so check for the DOS directory flag and ignore the source OS ID in the created by field. */ /* FIXME: Remove this check? Is it necessary - we already check the filename. */ attribute_mapping_id = MZ_READ_LE16(p + MZ_ZIP_CDH_VERSION_MADE_BY_OFS) >> 8; (void)attribute_mapping_id; external_attr = MZ_READ_LE32(p + MZ_ZIP_CDH_EXTERNAL_ATTR_OFS); if ((external_attr & MZ_ZIP_DOS_DIR_ATTRIBUTE_BITFLAG) != 0) { return MZ_TRUE; } return MZ_FALSE; } static mz_bool mz_zip_file_stat_internal(mz_zip_archive *pZip, mz_uint file_index, const mz_uint8 *pCentral_dir_header, mz_zip_archive_file_stat *pStat, mz_bool *pFound_zip64_extra_data) { mz_uint n; const mz_uint8 *p = pCentral_dir_header; if (pFound_zip64_extra_data) *pFound_zip64_extra_data = MZ_FALSE; if ((!p) || (!pStat)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); /* Extract fields from the central directory record. */ pStat->m_file_index = file_index; pStat->m_central_dir_ofs = MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32, file_index); pStat->m_version_made_by = MZ_READ_LE16(p + MZ_ZIP_CDH_VERSION_MADE_BY_OFS); pStat->m_version_needed = MZ_READ_LE16(p + MZ_ZIP_CDH_VERSION_NEEDED_OFS); pStat->m_bit_flag = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS); pStat->m_method = MZ_READ_LE16(p + MZ_ZIP_CDH_METHOD_OFS); #ifndef MINIZ_NO_TIME pStat->m_time = mz_zip_dos_to_time_t(MZ_READ_LE16(p + MZ_ZIP_CDH_FILE_TIME_OFS), MZ_READ_LE16(p + MZ_ZIP_CDH_FILE_DATE_OFS)); #endif pStat->m_crc32 = MZ_READ_LE32(p + MZ_ZIP_CDH_CRC32_OFS); pStat->m_comp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS); pStat->m_uncomp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS); pStat->m_internal_attr = MZ_READ_LE16(p + MZ_ZIP_CDH_INTERNAL_ATTR_OFS); pStat->m_external_attr = MZ_READ_LE32(p + MZ_ZIP_CDH_EXTERNAL_ATTR_OFS); pStat->m_local_header_ofs = MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS); /* Copy as much of the filename and comment as possible. */ n = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS); n = MZ_MIN(n, MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE - 1); memcpy(pStat->m_filename, p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE, n); pStat->m_filename[n] = '\0'; n = MZ_READ_LE16(p + MZ_ZIP_CDH_COMMENT_LEN_OFS); n = MZ_MIN(n, MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE - 1); pStat->m_comment_size = n; memcpy(pStat->m_comment, p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS) + MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS), n); pStat->m_comment[n] = '\0'; /* Set some flags for convienance */ pStat->m_is_directory = mz_zip_reader_is_file_a_directory(pZip, file_index); pStat->m_is_encrypted = mz_zip_reader_is_file_encrypted(pZip, file_index); pStat->m_is_supported = mz_zip_reader_is_file_supported(pZip, file_index); /* See if we need to read any zip64 extended information fields. */ /* Confusingly, these zip64 fields can be present even on non-zip64 archives (Debian zip on a huge files from stdin piped to stdout creates them). */ if (MZ_MAX(MZ_MAX(pStat->m_comp_size, pStat->m_uncomp_size), pStat->m_local_header_ofs) == MZ_UINT32_MAX) { /* Attempt to find zip64 extended information field in the entry's extra data */ mz_uint32 extra_size_remaining = MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS); if (extra_size_remaining) { const mz_uint8 *pExtra_data = p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS); do { mz_uint32 field_id; mz_uint32 field_data_size; if (extra_size_remaining < (sizeof(mz_uint16) * 2)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); field_id = MZ_READ_LE16(pExtra_data); field_data_size = MZ_READ_LE16(pExtra_data + sizeof(mz_uint16)); if ((field_data_size + sizeof(mz_uint16) * 2) > extra_size_remaining) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); if (field_id == MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID) { const mz_uint8 *pField_data = pExtra_data + sizeof(mz_uint16) * 2; mz_uint32 field_data_remaining = field_data_size; if (pFound_zip64_extra_data) *pFound_zip64_extra_data = MZ_TRUE; if (pStat->m_uncomp_size == MZ_UINT32_MAX) { if (field_data_remaining < sizeof(mz_uint64)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); pStat->m_uncomp_size = MZ_READ_LE64(pField_data); pField_data += sizeof(mz_uint64); field_data_remaining -= sizeof(mz_uint64); } if (pStat->m_comp_size == MZ_UINT32_MAX) { if (field_data_remaining < sizeof(mz_uint64)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); pStat->m_comp_size = MZ_READ_LE64(pField_data); pField_data += sizeof(mz_uint64); field_data_remaining -= sizeof(mz_uint64); } if (pStat->m_local_header_ofs == MZ_UINT32_MAX) { if (field_data_remaining < sizeof(mz_uint64)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); pStat->m_local_header_ofs = MZ_READ_LE64(pField_data); pField_data += sizeof(mz_uint64); field_data_remaining -= sizeof(mz_uint64); } break; } pExtra_data += sizeof(mz_uint16) * 2 + field_data_size; extra_size_remaining = extra_size_remaining - sizeof(mz_uint16) * 2 - field_data_size; } while (extra_size_remaining); } } return MZ_TRUE; } static MZ_FORCEINLINE mz_bool mz_zip_string_equal(const char *pA, const char *pB, mz_uint len, mz_uint flags) { mz_uint i; if (flags & MZ_ZIP_FLAG_CASE_SENSITIVE) return 0 == memcmp(pA, pB, len); for (i = 0; i < len; ++i) if (MZ_TOLOWER(pA[i]) != MZ_TOLOWER(pB[i])) return MZ_FALSE; return MZ_TRUE; } static MZ_FORCEINLINE int mz_zip_filename_compare(const mz_zip_array *pCentral_dir_array, const mz_zip_array *pCentral_dir_offsets, mz_uint l_index, const char *pR, mz_uint r_len) { const mz_uint8 *pL = &MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_array, mz_uint8, MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_offsets, mz_uint32, l_index)), *pE; mz_uint l_len = MZ_READ_LE16(pL + MZ_ZIP_CDH_FILENAME_LEN_OFS); mz_uint8 l = 0, r = 0; pL += MZ_ZIP_CENTRAL_DIR_HEADER_SIZE; pE = pL + MZ_MIN(l_len, r_len); while (pL < pE) { if ((l = MZ_TOLOWER(*pL)) != (r = MZ_TOLOWER(*pR))) break; pL++; pR++; } return (pL == pE) ? (int)(l_len - r_len) : (l - r); } static mz_bool mz_zip_locate_file_binary_search(mz_zip_archive *pZip, const char *pFilename, mz_uint32 *pIndex) { mz_zip_internal_state *pState = pZip->m_pState; const mz_zip_array *pCentral_dir_offsets = &pState->m_central_dir_offsets; const mz_zip_array *pCentral_dir = &pState->m_central_dir; mz_uint32 *pIndices = &MZ_ZIP_ARRAY_ELEMENT(&pState->m_sorted_central_dir_offsets, mz_uint32, 0); const mz_uint32 size = pZip->m_total_files; const mz_uint filename_len = (mz_uint)strlen(pFilename); if (pIndex) *pIndex = 0; if (size) { /* yes I could use uint32_t's, but then we would have to add some special case checks in the loop, argh, and */ /* honestly the major expense here on 32-bit CPU's will still be the filename compare */ mz_int64 l = 0, h = (mz_int64)size - 1; while (l <= h) { mz_int64 m = l + ((h - l) >> 1); mz_uint32 file_index = pIndices[(mz_uint32)m]; int comp = mz_zip_filename_compare(pCentral_dir, pCentral_dir_offsets, file_index, pFilename, filename_len); if (!comp) { if (pIndex) *pIndex = file_index; return MZ_TRUE; } else if (comp < 0) l = m + 1; else h = m - 1; } } return mz_zip_set_error(pZip, MZ_ZIP_FILE_NOT_FOUND); } int mz_zip_reader_locate_file(mz_zip_archive *pZip, const char *pName, const char *pComment, mz_uint flags) { mz_uint32 index; if (!mz_zip_reader_locate_file_v2(pZip, pName, pComment, flags, &index)) return -1; else return (int)index; } mz_bool mz_zip_reader_locate_file_v2(mz_zip_archive *pZip, const char *pName, const char *pComment, mz_uint flags, mz_uint32 *pIndex) { mz_uint file_index; size_t name_len, comment_len; if (pIndex) *pIndex = 0; if ((!pZip) || (!pZip->m_pState) || (!pName)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); /* See if we can use a binary search */ if (((pZip->m_pState->m_init_flags & MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY) == 0) && (pZip->m_zip_mode == MZ_ZIP_MODE_READING) && ((flags & (MZ_ZIP_FLAG_IGNORE_PATH | MZ_ZIP_FLAG_CASE_SENSITIVE)) == 0) && (!pComment) && (pZip->m_pState->m_sorted_central_dir_offsets.m_size)) { return mz_zip_locate_file_binary_search(pZip, pName, pIndex); } /* Locate the entry by scanning the entire central directory */ name_len = strlen(pName); if (name_len > MZ_UINT16_MAX) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); comment_len = pComment ? strlen(pComment) : 0; if (comment_len > MZ_UINT16_MAX) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); for (file_index = 0; file_index < pZip->m_total_files; file_index++) { const mz_uint8 *pHeader = &MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir, mz_uint8, MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32, file_index)); mz_uint filename_len = MZ_READ_LE16(pHeader + MZ_ZIP_CDH_FILENAME_LEN_OFS); const char *pFilename = (const char *)pHeader + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE; if (filename_len < name_len) continue; if (comment_len) { mz_uint file_extra_len = MZ_READ_LE16(pHeader + MZ_ZIP_CDH_EXTRA_LEN_OFS), file_comment_len = MZ_READ_LE16(pHeader + MZ_ZIP_CDH_COMMENT_LEN_OFS); const char *pFile_comment = pFilename + filename_len + file_extra_len; if ((file_comment_len != comment_len) || (!mz_zip_string_equal(pComment, pFile_comment, file_comment_len, flags))) continue; } if ((flags & MZ_ZIP_FLAG_IGNORE_PATH) && (filename_len)) { int ofs = filename_len - 1; do { if ((pFilename[ofs] == '/') || (pFilename[ofs] == '\\') || (pFilename[ofs] == ':')) break; } while (--ofs >= 0); ofs++; pFilename += ofs; filename_len -= ofs; } if ((filename_len == name_len) && (mz_zip_string_equal(pName, pFilename, filename_len, flags))) { if (pIndex) *pIndex = file_index; return MZ_TRUE; } } return mz_zip_set_error(pZip, MZ_ZIP_FILE_NOT_FOUND); } static mz_bool mz_zip_reader_extract_to_mem_no_alloc1(mz_zip_archive *pZip, mz_uint file_index, void *pBuf, size_t buf_size, mz_uint flags, void *pUser_read_buf, size_t user_read_buf_size, const mz_zip_archive_file_stat *st) { int status = TINFL_STATUS_DONE; mz_uint64 needed_size, cur_file_ofs, comp_remaining, out_buf_ofs = 0, read_buf_size, read_buf_ofs = 0, read_buf_avail; mz_zip_archive_file_stat file_stat; void *pRead_buf; mz_uint32 local_header_u32[(MZ_ZIP_LOCAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) / sizeof(mz_uint32)]; mz_uint8 *pLocal_header = (mz_uint8 *)local_header_u32; tinfl_decompressor inflator; if ((!pZip) || (!pZip->m_pState) || ((buf_size) && (!pBuf)) || ((user_read_buf_size) && (!pUser_read_buf)) || (!pZip->m_pRead)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); if (st) { file_stat = *st; } else if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) return MZ_FALSE; /* A directory or zero length file */ if ((file_stat.m_is_directory) || (!file_stat.m_comp_size)) return MZ_TRUE; /* Encryption and patch files are not supported. */ if (file_stat.m_bit_flag & (MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED | MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION | MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_COMPRESSED_PATCH_FLAG)) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_ENCRYPTION); /* This function only supports decompressing stored and deflate. */ if ((!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) && (file_stat.m_method != 0) && (file_stat.m_method != MZ_DEFLATED)) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_METHOD); /* Ensure supplied output buffer is large enough. */ needed_size = (flags & MZ_ZIP_FLAG_COMPRESSED_DATA) ? file_stat.m_comp_size : file_stat.m_uncomp_size; if (buf_size < needed_size) return mz_zip_set_error(pZip, MZ_ZIP_BUF_TOO_SMALL); /* Read and parse the local directory entry. */ cur_file_ofs = file_stat.m_local_header_ofs; if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pLocal_header, MZ_ZIP_LOCAL_DIR_HEADER_SIZE) != MZ_ZIP_LOCAL_DIR_HEADER_SIZE) return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); if (MZ_READ_LE32(pLocal_header) != MZ_ZIP_LOCAL_DIR_HEADER_SIG) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); cur_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE + MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_FILENAME_LEN_OFS) + MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_EXTRA_LEN_OFS); if ((cur_file_ofs + file_stat.m_comp_size) > pZip->m_archive_size) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); if ((flags & MZ_ZIP_FLAG_COMPRESSED_DATA) || (!file_stat.m_method)) { /* The file is stored or the caller has requested the compressed data. */ if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf, (size_t)needed_size) != needed_size) return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); #ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS if ((flags & MZ_ZIP_FLAG_COMPRESSED_DATA) == 0) { if (mz_crc32(MZ_CRC32_INIT, (const mz_uint8 *)pBuf, (size_t)file_stat.m_uncomp_size) != file_stat.m_crc32) return mz_zip_set_error(pZip, MZ_ZIP_CRC_CHECK_FAILED); } #endif return MZ_TRUE; } /* Decompress the file either directly from memory or from a file input buffer. */ tinfl_init(&inflator); if (pZip->m_pState->m_pMem) { /* Read directly from the archive in memory. */ pRead_buf = (mz_uint8 *)pZip->m_pState->m_pMem + cur_file_ofs; read_buf_size = read_buf_avail = file_stat.m_comp_size; comp_remaining = 0; } else if (pUser_read_buf) { /* Use a user provided read buffer. */ if (!user_read_buf_size) return MZ_FALSE; pRead_buf = (mz_uint8 *)pUser_read_buf; read_buf_size = user_read_buf_size; read_buf_avail = 0; comp_remaining = file_stat.m_comp_size; } else { /* Temporarily allocate a read buffer. */ read_buf_size = MZ_MIN(file_stat.m_comp_size, (mz_uint64)MZ_ZIP_MAX_IO_BUF_SIZE); if (((sizeof(size_t) == sizeof(mz_uint32))) && (read_buf_size > 0x7FFFFFFF)) return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR); if (NULL == (pRead_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, (size_t)read_buf_size))) return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); read_buf_avail = 0; comp_remaining = file_stat.m_comp_size; } do { /* The size_t cast here should be OK because we've verified that the output buffer is >= file_stat.m_uncomp_size above */ size_t in_buf_size, out_buf_size = (size_t)(file_stat.m_uncomp_size - out_buf_ofs); if ((!read_buf_avail) && (!pZip->m_pState->m_pMem)) { read_buf_avail = MZ_MIN(read_buf_size, comp_remaining); if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pRead_buf, (size_t)read_buf_avail) != read_buf_avail) { status = TINFL_STATUS_FAILED; mz_zip_set_error(pZip, MZ_ZIP_DECOMPRESSION_FAILED); break; } cur_file_ofs += read_buf_avail; comp_remaining -= read_buf_avail; read_buf_ofs = 0; } in_buf_size = (size_t)read_buf_avail; status = tinfl_decompress(&inflator, (mz_uint8 *)pRead_buf + read_buf_ofs, &in_buf_size, (mz_uint8 *)pBuf, (mz_uint8 *)pBuf + out_buf_ofs, &out_buf_size, TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF | (comp_remaining ? TINFL_FLAG_HAS_MORE_INPUT : 0)); read_buf_avail -= in_buf_size; read_buf_ofs += in_buf_size; out_buf_ofs += out_buf_size; } while (status == TINFL_STATUS_NEEDS_MORE_INPUT); if (status == TINFL_STATUS_DONE) { /* Make sure the entire file was decompressed, and check its CRC. */ if (out_buf_ofs != file_stat.m_uncomp_size) { mz_zip_set_error(pZip, MZ_ZIP_UNEXPECTED_DECOMPRESSED_SIZE); status = TINFL_STATUS_FAILED; } #ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS else if (mz_crc32(MZ_CRC32_INIT, (const mz_uint8 *)pBuf, (size_t)file_stat.m_uncomp_size) != file_stat.m_crc32) { mz_zip_set_error(pZip, MZ_ZIP_CRC_CHECK_FAILED); status = TINFL_STATUS_FAILED; } #endif } if ((!pZip->m_pState->m_pMem) && (!pUser_read_buf)) pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); return status == TINFL_STATUS_DONE; } mz_bool mz_zip_reader_extract_to_mem_no_alloc(mz_zip_archive *pZip, mz_uint file_index, void *pBuf, size_t buf_size, mz_uint flags, void *pUser_read_buf, size_t user_read_buf_size) { return mz_zip_reader_extract_to_mem_no_alloc1(pZip, file_index, pBuf, buf_size, flags, pUser_read_buf, user_read_buf_size, NULL); } mz_bool mz_zip_reader_extract_file_to_mem_no_alloc(mz_zip_archive *pZip, const char *pFilename, void *pBuf, size_t buf_size, mz_uint flags, void *pUser_read_buf, size_t user_read_buf_size) { mz_uint32 file_index; if (!mz_zip_reader_locate_file_v2(pZip, pFilename, NULL, flags, &file_index)) return MZ_FALSE; return mz_zip_reader_extract_to_mem_no_alloc1(pZip, file_index, pBuf, buf_size, flags, pUser_read_buf, user_read_buf_size, NULL); } mz_bool mz_zip_reader_extract_to_mem(mz_zip_archive *pZip, mz_uint file_index, void *pBuf, size_t buf_size, mz_uint flags) { return mz_zip_reader_extract_to_mem_no_alloc1(pZip, file_index, pBuf, buf_size, flags, NULL, 0, NULL); } mz_bool mz_zip_reader_extract_file_to_mem(mz_zip_archive *pZip, const char *pFilename, void *pBuf, size_t buf_size, mz_uint flags) { return mz_zip_reader_extract_file_to_mem_no_alloc(pZip, pFilename, pBuf, buf_size, flags, NULL, 0); } void *mz_zip_reader_extract_to_heap(mz_zip_archive *pZip, mz_uint file_index, size_t *pSize, mz_uint flags) { mz_zip_archive_file_stat file_stat; mz_uint64 alloc_size; void *pBuf; if (pSize) *pSize = 0; if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) return NULL; alloc_size = (flags & MZ_ZIP_FLAG_COMPRESSED_DATA) ? file_stat.m_comp_size : file_stat.m_uncomp_size; if (((sizeof(size_t) == sizeof(mz_uint32))) && (alloc_size > 0x7FFFFFFF)) { mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR); return NULL; } if (NULL == (pBuf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, (size_t)alloc_size))) { mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); return NULL; } if (!mz_zip_reader_extract_to_mem_no_alloc1(pZip, file_index, pBuf, (size_t)alloc_size, flags, NULL, 0, &file_stat)) { pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); return NULL; } if (pSize) *pSize = (size_t)alloc_size; return pBuf; } void *mz_zip_reader_extract_file_to_heap(mz_zip_archive *pZip, const char *pFilename, size_t *pSize, mz_uint flags) { mz_uint32 file_index; if (!mz_zip_reader_locate_file_v2(pZip, pFilename, NULL, flags, &file_index)) { if (pSize) *pSize = 0; return MZ_FALSE; } return mz_zip_reader_extract_to_heap(pZip, file_index, pSize, flags); } mz_bool mz_zip_reader_extract_to_callback(mz_zip_archive *pZip, mz_uint file_index, mz_file_write_func pCallback, void *pOpaque, mz_uint flags) { int status = TINFL_STATUS_DONE; #ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS mz_uint file_crc32 = MZ_CRC32_INIT; #endif mz_uint64 read_buf_size, read_buf_ofs = 0, read_buf_avail, comp_remaining, out_buf_ofs = 0, cur_file_ofs; mz_zip_archive_file_stat file_stat; void *pRead_buf = NULL; void *pWrite_buf = NULL; mz_uint32 local_header_u32[(MZ_ZIP_LOCAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) / sizeof(mz_uint32)]; mz_uint8 *pLocal_header = (mz_uint8 *)local_header_u32; if ((!pZip) || (!pZip->m_pState) || (!pCallback) || (!pZip->m_pRead)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) return MZ_FALSE; /* A directory or zero length file */ if ((file_stat.m_is_directory) || (!file_stat.m_comp_size)) return MZ_TRUE; /* Encryption and patch files are not supported. */ if (file_stat.m_bit_flag & (MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED | MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION | MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_COMPRESSED_PATCH_FLAG)) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_ENCRYPTION); /* This function only supports decompressing stored and deflate. */ if ((!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) && (file_stat.m_method != 0) && (file_stat.m_method != MZ_DEFLATED)) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_METHOD); /* Read and do some minimal validation of the local directory entry (this doesn't crack the zip64 stuff, which we already have from the central dir) */ cur_file_ofs = file_stat.m_local_header_ofs; if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pLocal_header, MZ_ZIP_LOCAL_DIR_HEADER_SIZE) != MZ_ZIP_LOCAL_DIR_HEADER_SIZE) return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); if (MZ_READ_LE32(pLocal_header) != MZ_ZIP_LOCAL_DIR_HEADER_SIG) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); cur_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE + MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_FILENAME_LEN_OFS) + MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_EXTRA_LEN_OFS); if ((cur_file_ofs + file_stat.m_comp_size) > pZip->m_archive_size) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); /* Decompress the file either directly from memory or from a file input buffer. */ if (pZip->m_pState->m_pMem) { pRead_buf = (mz_uint8 *)pZip->m_pState->m_pMem + cur_file_ofs; read_buf_size = read_buf_avail = file_stat.m_comp_size; comp_remaining = 0; } else { read_buf_size = MZ_MIN(file_stat.m_comp_size, (mz_uint64)MZ_ZIP_MAX_IO_BUF_SIZE); if (NULL == (pRead_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, (size_t)read_buf_size))) return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); read_buf_avail = 0; comp_remaining = file_stat.m_comp_size; } if ((flags & MZ_ZIP_FLAG_COMPRESSED_DATA) || (!file_stat.m_method)) { /* The file is stored or the caller has requested the compressed data. */ if (pZip->m_pState->m_pMem) { if (((sizeof(size_t) == sizeof(mz_uint32))) && (file_stat.m_comp_size > MZ_UINT32_MAX)) return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR); if (pCallback(pOpaque, out_buf_ofs, pRead_buf, (size_t)file_stat.m_comp_size) != file_stat.m_comp_size) { mz_zip_set_error(pZip, MZ_ZIP_WRITE_CALLBACK_FAILED); status = TINFL_STATUS_FAILED; } else if (!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) { #ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS file_crc32 = (mz_uint32)mz_crc32(file_crc32, (const mz_uint8 *)pRead_buf, (size_t)file_stat.m_comp_size); #endif } cur_file_ofs += file_stat.m_comp_size; out_buf_ofs += file_stat.m_comp_size; comp_remaining = 0; } else { while (comp_remaining) { read_buf_avail = MZ_MIN(read_buf_size, comp_remaining); if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pRead_buf, (size_t)read_buf_avail) != read_buf_avail) { mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); status = TINFL_STATUS_FAILED; break; } #ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS if (!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) { file_crc32 = (mz_uint32)mz_crc32(file_crc32, (const mz_uint8 *)pRead_buf, (size_t)read_buf_avail); } #endif if (pCallback(pOpaque, out_buf_ofs, pRead_buf, (size_t)read_buf_avail) != read_buf_avail) { mz_zip_set_error(pZip, MZ_ZIP_WRITE_CALLBACK_FAILED); status = TINFL_STATUS_FAILED; break; } cur_file_ofs += read_buf_avail; out_buf_ofs += read_buf_avail; comp_remaining -= read_buf_avail; } } } else { tinfl_decompressor inflator; tinfl_init(&inflator); if (NULL == (pWrite_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, TINFL_LZ_DICT_SIZE))) { mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); status = TINFL_STATUS_FAILED; } else { do { mz_uint8 *pWrite_buf_cur = (mz_uint8 *)pWrite_buf + (out_buf_ofs & (TINFL_LZ_DICT_SIZE - 1)); size_t in_buf_size, out_buf_size = TINFL_LZ_DICT_SIZE - (out_buf_ofs & (TINFL_LZ_DICT_SIZE - 1)); if ((!read_buf_avail) && (!pZip->m_pState->m_pMem)) { read_buf_avail = MZ_MIN(read_buf_size, comp_remaining); if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pRead_buf, (size_t)read_buf_avail) != read_buf_avail) { mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); status = TINFL_STATUS_FAILED; break; } cur_file_ofs += read_buf_avail; comp_remaining -= read_buf_avail; read_buf_ofs = 0; } in_buf_size = (size_t)read_buf_avail; status = tinfl_decompress(&inflator, (const mz_uint8 *)pRead_buf + read_buf_ofs, &in_buf_size, (mz_uint8 *)pWrite_buf, pWrite_buf_cur, &out_buf_size, comp_remaining ? TINFL_FLAG_HAS_MORE_INPUT : 0); read_buf_avail -= in_buf_size; read_buf_ofs += in_buf_size; if (out_buf_size) { if (pCallback(pOpaque, out_buf_ofs, pWrite_buf_cur, out_buf_size) != out_buf_size) { mz_zip_set_error(pZip, MZ_ZIP_WRITE_CALLBACK_FAILED); status = TINFL_STATUS_FAILED; break; } #ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS file_crc32 = (mz_uint32)mz_crc32(file_crc32, pWrite_buf_cur, out_buf_size); #endif if ((out_buf_ofs += out_buf_size) > file_stat.m_uncomp_size) { mz_zip_set_error(pZip, MZ_ZIP_DECOMPRESSION_FAILED); status = TINFL_STATUS_FAILED; break; } } } while ((status == TINFL_STATUS_NEEDS_MORE_INPUT) || (status == TINFL_STATUS_HAS_MORE_OUTPUT)); } } if ((status == TINFL_STATUS_DONE) && (!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA))) { /* Make sure the entire file was decompressed, and check its CRC. */ if (out_buf_ofs != file_stat.m_uncomp_size) { mz_zip_set_error(pZip, MZ_ZIP_UNEXPECTED_DECOMPRESSED_SIZE); status = TINFL_STATUS_FAILED; } #ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS else if (file_crc32 != file_stat.m_crc32) { mz_zip_set_error(pZip, MZ_ZIP_DECOMPRESSION_FAILED); status = TINFL_STATUS_FAILED; } #endif } if (!pZip->m_pState->m_pMem) pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); if (pWrite_buf) pZip->m_pFree(pZip->m_pAlloc_opaque, pWrite_buf); return status == TINFL_STATUS_DONE; } mz_bool mz_zip_reader_extract_file_to_callback(mz_zip_archive *pZip, const char *pFilename, mz_file_write_func pCallback, void *pOpaque, mz_uint flags) { mz_uint32 file_index; if (!mz_zip_reader_locate_file_v2(pZip, pFilename, NULL, flags, &file_index)) return MZ_FALSE; return mz_zip_reader_extract_to_callback(pZip, file_index, pCallback, pOpaque, flags); } mz_zip_reader_extract_iter_state* mz_zip_reader_extract_iter_new(mz_zip_archive *pZip, mz_uint file_index, mz_uint flags) { mz_zip_reader_extract_iter_state *pState; mz_uint32 local_header_u32[(MZ_ZIP_LOCAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) / sizeof(mz_uint32)]; mz_uint8 *pLocal_header = (mz_uint8 *)local_header_u32; /* Argument sanity check */ if ((!pZip) || (!pZip->m_pState)) return NULL; /* Allocate an iterator status structure */ pState = (mz_zip_reader_extract_iter_state*)pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, sizeof(mz_zip_reader_extract_iter_state)); if (!pState) { mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); return NULL; } /* Fetch file details */ if (!mz_zip_reader_file_stat(pZip, file_index, &pState->file_stat)) { pZip->m_pFree(pZip->m_pAlloc_opaque, pState); return NULL; } /* Encryption and patch files are not supported. */ if (pState->file_stat.m_bit_flag & (MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED | MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION | MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_COMPRESSED_PATCH_FLAG)) { mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_ENCRYPTION); pZip->m_pFree(pZip->m_pAlloc_opaque, pState); return NULL; } /* This function only supports decompressing stored and deflate. */ if ((!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) && (pState->file_stat.m_method != 0) && (pState->file_stat.m_method != MZ_DEFLATED)) { mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_METHOD); pZip->m_pFree(pZip->m_pAlloc_opaque, pState); return NULL; } /* Init state - save args */ pState->pZip = pZip; pState->flags = flags; /* Init state - reset variables to defaults */ pState->status = TINFL_STATUS_DONE; #ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS pState->file_crc32 = MZ_CRC32_INIT; #endif pState->read_buf_ofs = 0; pState->out_buf_ofs = 0; pState->pRead_buf = NULL; pState->pWrite_buf = NULL; pState->out_blk_remain = 0; /* Read and parse the local directory entry. */ pState->cur_file_ofs = pState->file_stat.m_local_header_ofs; if (pZip->m_pRead(pZip->m_pIO_opaque, pState->cur_file_ofs, pLocal_header, MZ_ZIP_LOCAL_DIR_HEADER_SIZE) != MZ_ZIP_LOCAL_DIR_HEADER_SIZE) { mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); pZip->m_pFree(pZip->m_pAlloc_opaque, pState); return NULL; } if (MZ_READ_LE32(pLocal_header) != MZ_ZIP_LOCAL_DIR_HEADER_SIG) { mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); pZip->m_pFree(pZip->m_pAlloc_opaque, pState); return NULL; } pState->cur_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE + MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_FILENAME_LEN_OFS) + MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_EXTRA_LEN_OFS); if ((pState->cur_file_ofs + pState->file_stat.m_comp_size) > pZip->m_archive_size) { mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); pZip->m_pFree(pZip->m_pAlloc_opaque, pState); return NULL; } /* Decompress the file either directly from memory or from a file input buffer. */ if (pZip->m_pState->m_pMem) { pState->pRead_buf = (mz_uint8 *)pZip->m_pState->m_pMem + pState->cur_file_ofs; pState->read_buf_size = pState->read_buf_avail = pState->file_stat.m_comp_size; pState->comp_remaining = pState->file_stat.m_comp_size; } else { if (!((flags & MZ_ZIP_FLAG_COMPRESSED_DATA) || (!pState->file_stat.m_method))) { /* Decompression required, therefore intermediate read buffer required */ pState->read_buf_size = MZ_MIN(pState->file_stat.m_comp_size, (mz_uint64)MZ_ZIP_MAX_IO_BUF_SIZE); if (NULL == (pState->pRead_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, (size_t)pState->read_buf_size))) { mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); pZip->m_pFree(pZip->m_pAlloc_opaque, pState); return NULL; } } else { /* Decompression not required - we will be reading directly into user buffer, no temp buf required */ pState->read_buf_size = 0; } pState->read_buf_avail = 0; pState->comp_remaining = pState->file_stat.m_comp_size; } if (!((flags & MZ_ZIP_FLAG_COMPRESSED_DATA) || (!pState->file_stat.m_method))) { /* Decompression required, init decompressor */ tinfl_init( &pState->inflator ); /* Allocate write buffer */ if (NULL == (pState->pWrite_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, TINFL_LZ_DICT_SIZE))) { mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); if (pState->pRead_buf) pZip->m_pFree(pZip->m_pAlloc_opaque, pState->pRead_buf); pZip->m_pFree(pZip->m_pAlloc_opaque, pState); return NULL; } } return pState; } mz_zip_reader_extract_iter_state* mz_zip_reader_extract_file_iter_new(mz_zip_archive *pZip, const char *pFilename, mz_uint flags) { mz_uint32 file_index; /* Locate file index by name */ if (!mz_zip_reader_locate_file_v2(pZip, pFilename, NULL, flags, &file_index)) return NULL; /* Construct iterator */ return mz_zip_reader_extract_iter_new(pZip, file_index, flags); } size_t mz_zip_reader_extract_iter_read(mz_zip_reader_extract_iter_state* pState, void* pvBuf, size_t buf_size) { size_t copied_to_caller = 0; /* Argument sanity check */ if ((!pState) || (!pState->pZip) || (!pState->pZip->m_pState) || (!pvBuf)) return 0; if ((pState->flags & MZ_ZIP_FLAG_COMPRESSED_DATA) || (!pState->file_stat.m_method)) { /* The file is stored or the caller has requested the compressed data, calc amount to return. */ copied_to_caller = (size_t)MZ_MIN( buf_size, pState->comp_remaining ); /* Zip is in memory....or requires reading from a file? */ if (pState->pZip->m_pState->m_pMem) { /* Copy data to caller's buffer */ memcpy( pvBuf, pState->pRead_buf, copied_to_caller ); pState->pRead_buf = ((mz_uint8*)pState->pRead_buf) + copied_to_caller; } else { /* Read directly into caller's buffer */ if (pState->pZip->m_pRead(pState->pZip->m_pIO_opaque, pState->cur_file_ofs, pvBuf, copied_to_caller) != copied_to_caller) { /* Failed to read all that was asked for, flag failure and alert user */ mz_zip_set_error(pState->pZip, MZ_ZIP_FILE_READ_FAILED); pState->status = TINFL_STATUS_FAILED; copied_to_caller = 0; } } #ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS /* Compute CRC if not returning compressed data only */ if (!(pState->flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) pState->file_crc32 = (mz_uint32)mz_crc32(pState->file_crc32, (const mz_uint8 *)pvBuf, copied_to_caller); #endif /* Advance offsets, dec counters */ pState->cur_file_ofs += copied_to_caller; pState->out_buf_ofs += copied_to_caller; pState->comp_remaining -= copied_to_caller; } else { do { /* Calc ptr to write buffer - given current output pos and block size */ mz_uint8 *pWrite_buf_cur = (mz_uint8 *)pState->pWrite_buf + (pState->out_buf_ofs & (TINFL_LZ_DICT_SIZE - 1)); /* Calc max output size - given current output pos and block size */ size_t in_buf_size, out_buf_size = TINFL_LZ_DICT_SIZE - (pState->out_buf_ofs & (TINFL_LZ_DICT_SIZE - 1)); if (!pState->out_blk_remain) { /* Read more data from file if none available (and reading from file) */ if ((!pState->read_buf_avail) && (!pState->pZip->m_pState->m_pMem)) { /* Calc read size */ pState->read_buf_avail = MZ_MIN(pState->read_buf_size, pState->comp_remaining); if (pState->pZip->m_pRead(pState->pZip->m_pIO_opaque, pState->cur_file_ofs, pState->pRead_buf, (size_t)pState->read_buf_avail) != pState->read_buf_avail) { mz_zip_set_error(pState->pZip, MZ_ZIP_FILE_READ_FAILED); pState->status = TINFL_STATUS_FAILED; break; } /* Advance offsets, dec counters */ pState->cur_file_ofs += pState->read_buf_avail; pState->comp_remaining -= pState->read_buf_avail; pState->read_buf_ofs = 0; } /* Perform decompression */ in_buf_size = (size_t)pState->read_buf_avail; pState->status = tinfl_decompress(&pState->inflator, (const mz_uint8 *)pState->pRead_buf + pState->read_buf_ofs, &in_buf_size, (mz_uint8 *)pState->pWrite_buf, pWrite_buf_cur, &out_buf_size, pState->comp_remaining ? TINFL_FLAG_HAS_MORE_INPUT : 0); pState->read_buf_avail -= in_buf_size; pState->read_buf_ofs += in_buf_size; /* Update current output block size remaining */ pState->out_blk_remain = out_buf_size; } if (pState->out_blk_remain) { /* Calc amount to return. */ size_t to_copy = MZ_MIN( (buf_size - copied_to_caller), pState->out_blk_remain ); /* Copy data to caller's buffer */ memcpy( (mz_uint8*)pvBuf + copied_to_caller, pWrite_buf_cur, to_copy ); #ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS /* Perform CRC */ pState->file_crc32 = (mz_uint32)mz_crc32(pState->file_crc32, pWrite_buf_cur, to_copy); #endif /* Decrement data consumed from block */ pState->out_blk_remain -= to_copy; /* Inc output offset, while performing sanity check */ if ((pState->out_buf_ofs += to_copy) > pState->file_stat.m_uncomp_size) { mz_zip_set_error(pState->pZip, MZ_ZIP_DECOMPRESSION_FAILED); pState->status = TINFL_STATUS_FAILED; break; } /* Increment counter of data copied to caller */ copied_to_caller += to_copy; } } while ( (copied_to_caller < buf_size) && ((pState->status == TINFL_STATUS_NEEDS_MORE_INPUT) || (pState->status == TINFL_STATUS_HAS_MORE_OUTPUT)) ); } /* Return how many bytes were copied into user buffer */ return copied_to_caller; } mz_bool mz_zip_reader_extract_iter_free(mz_zip_reader_extract_iter_state* pState) { int status; /* Argument sanity check */ if ((!pState) || (!pState->pZip) || (!pState->pZip->m_pState)) return MZ_FALSE; /* Was decompression completed and requested? */ if ((pState->status == TINFL_STATUS_DONE) && (!(pState->flags & MZ_ZIP_FLAG_COMPRESSED_DATA))) { /* Make sure the entire file was decompressed, and check its CRC. */ if (pState->out_buf_ofs != pState->file_stat.m_uncomp_size) { mz_zip_set_error(pState->pZip, MZ_ZIP_UNEXPECTED_DECOMPRESSED_SIZE); pState->status = TINFL_STATUS_FAILED; } #ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS else if (pState->file_crc32 != pState->file_stat.m_crc32) { mz_zip_set_error(pState->pZip, MZ_ZIP_DECOMPRESSION_FAILED); pState->status = TINFL_STATUS_FAILED; } #endif } /* Free buffers */ if (!pState->pZip->m_pState->m_pMem) pState->pZip->m_pFree(pState->pZip->m_pAlloc_opaque, pState->pRead_buf); if (pState->pWrite_buf) pState->pZip->m_pFree(pState->pZip->m_pAlloc_opaque, pState->pWrite_buf); /* Save status */ status = pState->status; /* Free context */ pState->pZip->m_pFree(pState->pZip->m_pAlloc_opaque, pState); return status == TINFL_STATUS_DONE; } #ifndef MINIZ_NO_STDIO static size_t mz_zip_file_write_callback(void *pOpaque, mz_uint64 ofs, const void *pBuf, size_t n) { (void)ofs; return MZ_FWRITE(pBuf, 1, n, (MZ_FILE *)pOpaque); } mz_bool mz_zip_reader_extract_to_file(mz_zip_archive *pZip, mz_uint file_index, const char *pDst_filename, mz_uint flags) { mz_bool status; mz_zip_archive_file_stat file_stat; MZ_FILE *pFile; if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) return MZ_FALSE; if ((file_stat.m_is_directory) || (!file_stat.m_is_supported)) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_FEATURE); pFile = MZ_FOPEN(pDst_filename, "wb"); if (!pFile) return mz_zip_set_error(pZip, MZ_ZIP_FILE_OPEN_FAILED); status = mz_zip_reader_extract_to_callback(pZip, file_index, mz_zip_file_write_callback, pFile, flags); if (MZ_FCLOSE(pFile) == EOF) { if (status) mz_zip_set_error(pZip, MZ_ZIP_FILE_CLOSE_FAILED); status = MZ_FALSE; } #if !defined(MINIZ_NO_TIME) && !defined(MINIZ_NO_STDIO) if (status) mz_zip_set_file_times(pDst_filename, file_stat.m_time, file_stat.m_time); #endif return status; } mz_bool mz_zip_reader_extract_file_to_file(mz_zip_archive *pZip, const char *pArchive_filename, const char *pDst_filename, mz_uint flags) { mz_uint32 file_index; if (!mz_zip_reader_locate_file_v2(pZip, pArchive_filename, NULL, flags, &file_index)) return MZ_FALSE; return mz_zip_reader_extract_to_file(pZip, file_index, pDst_filename, flags); } mz_bool mz_zip_reader_extract_to_cfile(mz_zip_archive *pZip, mz_uint file_index, MZ_FILE *pFile, mz_uint flags) { mz_zip_archive_file_stat file_stat; if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) return MZ_FALSE; if ((file_stat.m_is_directory) || (!file_stat.m_is_supported)) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_FEATURE); return mz_zip_reader_extract_to_callback(pZip, file_index, mz_zip_file_write_callback, pFile, flags); } mz_bool mz_zip_reader_extract_file_to_cfile(mz_zip_archive *pZip, const char *pArchive_filename, MZ_FILE *pFile, mz_uint flags) { mz_uint32 file_index; if (!mz_zip_reader_locate_file_v2(pZip, pArchive_filename, NULL, flags, &file_index)) return MZ_FALSE; return mz_zip_reader_extract_to_cfile(pZip, file_index, pFile, flags); } #endif /* #ifndef MINIZ_NO_STDIO */ static size_t mz_zip_compute_crc32_callback(void *pOpaque, mz_uint64 file_ofs, const void *pBuf, size_t n) { mz_uint32 *p = (mz_uint32 *)pOpaque; (void)file_ofs; *p = (mz_uint32)mz_crc32(*p, (const mz_uint8 *)pBuf, n); return n; } mz_bool mz_zip_validate_file(mz_zip_archive *pZip, mz_uint file_index, mz_uint flags) { mz_zip_archive_file_stat file_stat; mz_zip_internal_state *pState; const mz_uint8 *pCentral_dir_header; mz_bool found_zip64_ext_data_in_cdir = MZ_FALSE; mz_bool found_zip64_ext_data_in_ldir = MZ_FALSE; mz_uint32 local_header_u32[(MZ_ZIP_LOCAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) / sizeof(mz_uint32)]; mz_uint8 *pLocal_header = (mz_uint8 *)local_header_u32; mz_uint64 local_header_ofs = 0; mz_uint32 local_header_filename_len, local_header_extra_len, local_header_crc32; mz_uint64 local_header_comp_size, local_header_uncomp_size; mz_uint32 uncomp_crc32 = MZ_CRC32_INIT; mz_bool has_data_descriptor; mz_uint32 local_header_bit_flags; mz_zip_array file_data_array; mz_zip_array_init(&file_data_array, 1); if ((!pZip) || (!pZip->m_pState) || (!pZip->m_pAlloc) || (!pZip->m_pFree) || (!pZip->m_pRead)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); if (file_index > pZip->m_total_files) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); pState = pZip->m_pState; pCentral_dir_header = mz_zip_get_cdh(pZip, file_index); if (!mz_zip_file_stat_internal(pZip, file_index, pCentral_dir_header, &file_stat, &found_zip64_ext_data_in_cdir)) return MZ_FALSE; /* A directory or zero length file */ if ((file_stat.m_is_directory) || (!file_stat.m_uncomp_size)) return MZ_TRUE; /* Encryption and patch files are not supported. */ if (file_stat.m_is_encrypted) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_ENCRYPTION); /* This function only supports stored and deflate. */ if ((file_stat.m_method != 0) && (file_stat.m_method != MZ_DEFLATED)) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_METHOD); if (!file_stat.m_is_supported) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_FEATURE); /* Read and parse the local directory entry. */ local_header_ofs = file_stat.m_local_header_ofs; if (pZip->m_pRead(pZip->m_pIO_opaque, local_header_ofs, pLocal_header, MZ_ZIP_LOCAL_DIR_HEADER_SIZE) != MZ_ZIP_LOCAL_DIR_HEADER_SIZE) return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); if (MZ_READ_LE32(pLocal_header) != MZ_ZIP_LOCAL_DIR_HEADER_SIG) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); local_header_filename_len = MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_FILENAME_LEN_OFS); local_header_extra_len = MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_EXTRA_LEN_OFS); local_header_comp_size = MZ_READ_LE32(pLocal_header + MZ_ZIP_LDH_COMPRESSED_SIZE_OFS); local_header_uncomp_size = MZ_READ_LE32(pLocal_header + MZ_ZIP_LDH_DECOMPRESSED_SIZE_OFS); local_header_crc32 = MZ_READ_LE32(pLocal_header + MZ_ZIP_LDH_CRC32_OFS); local_header_bit_flags = MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_BIT_FLAG_OFS); has_data_descriptor = (local_header_bit_flags & 8) != 0; if (local_header_filename_len != strlen(file_stat.m_filename)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); if ((local_header_ofs + MZ_ZIP_LOCAL_DIR_HEADER_SIZE + local_header_filename_len + local_header_extra_len + file_stat.m_comp_size) > pZip->m_archive_size) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); if (!mz_zip_array_resize(pZip, &file_data_array, MZ_MAX(local_header_filename_len, local_header_extra_len), MZ_FALSE)) { mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); goto handle_failure; } if (local_header_filename_len) { if (pZip->m_pRead(pZip->m_pIO_opaque, local_header_ofs + MZ_ZIP_LOCAL_DIR_HEADER_SIZE, file_data_array.m_p, local_header_filename_len) != local_header_filename_len) { mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); goto handle_failure; } /* I've seen 1 archive that had the same pathname, but used backslashes in the local dir and forward slashes in the central dir. Do we care about this? For now, this case will fail validation. */ if (memcmp(file_stat.m_filename, file_data_array.m_p, local_header_filename_len) != 0) { mz_zip_set_error(pZip, MZ_ZIP_VALIDATION_FAILED); goto handle_failure; } } if ((local_header_extra_len) && ((local_header_comp_size == MZ_UINT32_MAX) || (local_header_uncomp_size == MZ_UINT32_MAX))) { mz_uint32 extra_size_remaining = local_header_extra_len; const mz_uint8 *pExtra_data = (const mz_uint8 *)file_data_array.m_p; if (pZip->m_pRead(pZip->m_pIO_opaque, local_header_ofs + MZ_ZIP_LOCAL_DIR_HEADER_SIZE + local_header_filename_len, file_data_array.m_p, local_header_extra_len) != local_header_extra_len) { mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); goto handle_failure; } do { mz_uint32 field_id, field_data_size, field_total_size; if (extra_size_remaining < (sizeof(mz_uint16) * 2)) { mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); goto handle_failure; } field_id = MZ_READ_LE16(pExtra_data); field_data_size = MZ_READ_LE16(pExtra_data + sizeof(mz_uint16)); field_total_size = field_data_size + sizeof(mz_uint16) * 2; if (field_total_size > extra_size_remaining) { mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); goto handle_failure; } if (field_id == MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID) { const mz_uint8 *pSrc_field_data = pExtra_data + sizeof(mz_uint32); if (field_data_size < sizeof(mz_uint64) * 2) { mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); goto handle_failure; } local_header_uncomp_size = MZ_READ_LE64(pSrc_field_data); local_header_comp_size = MZ_READ_LE64(pSrc_field_data + sizeof(mz_uint64)); found_zip64_ext_data_in_ldir = MZ_TRUE; break; } pExtra_data += field_total_size; extra_size_remaining -= field_total_size; } while (extra_size_remaining); } /* TODO: parse local header extra data when local_header_comp_size is 0xFFFFFFFF! (big_descriptor.zip) */ /* I've seen zips in the wild with the data descriptor bit set, but proper local header values and bogus data descriptors */ if ((has_data_descriptor) && (!local_header_comp_size) && (!local_header_crc32)) { mz_uint8 descriptor_buf[32]; mz_bool has_id; const mz_uint8 *pSrc; mz_uint32 file_crc32; mz_uint64 comp_size = 0, uncomp_size = 0; mz_uint32 num_descriptor_uint32s = ((pState->m_zip64) || (found_zip64_ext_data_in_ldir)) ? 6 : 4; if (pZip->m_pRead(pZip->m_pIO_opaque, local_header_ofs + MZ_ZIP_LOCAL_DIR_HEADER_SIZE + local_header_filename_len + local_header_extra_len + file_stat.m_comp_size, descriptor_buf, sizeof(mz_uint32) * num_descriptor_uint32s) != (sizeof(mz_uint32) * num_descriptor_uint32s)) { mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); goto handle_failure; } has_id = (MZ_READ_LE32(descriptor_buf) == MZ_ZIP_DATA_DESCRIPTOR_ID); pSrc = has_id ? (descriptor_buf + sizeof(mz_uint32)) : descriptor_buf; file_crc32 = MZ_READ_LE32(pSrc); if ((pState->m_zip64) || (found_zip64_ext_data_in_ldir)) { comp_size = MZ_READ_LE64(pSrc + sizeof(mz_uint32)); uncomp_size = MZ_READ_LE64(pSrc + sizeof(mz_uint32) + sizeof(mz_uint64)); } else { comp_size = MZ_READ_LE32(pSrc + sizeof(mz_uint32)); uncomp_size = MZ_READ_LE32(pSrc + sizeof(mz_uint32) + sizeof(mz_uint32)); } if ((file_crc32 != file_stat.m_crc32) || (comp_size != file_stat.m_comp_size) || (uncomp_size != file_stat.m_uncomp_size)) { mz_zip_set_error(pZip, MZ_ZIP_VALIDATION_FAILED); goto handle_failure; } } else { if ((local_header_crc32 != file_stat.m_crc32) || (local_header_comp_size != file_stat.m_comp_size) || (local_header_uncomp_size != file_stat.m_uncomp_size)) { mz_zip_set_error(pZip, MZ_ZIP_VALIDATION_FAILED); goto handle_failure; } } mz_zip_array_clear(pZip, &file_data_array); if ((flags & MZ_ZIP_FLAG_VALIDATE_HEADERS_ONLY) == 0) { if (!mz_zip_reader_extract_to_callback(pZip, file_index, mz_zip_compute_crc32_callback, &uncomp_crc32, 0)) return MZ_FALSE; /* 1 more check to be sure, although the extract checks too. */ if (uncomp_crc32 != file_stat.m_crc32) { mz_zip_set_error(pZip, MZ_ZIP_VALIDATION_FAILED); return MZ_FALSE; } } return MZ_TRUE; handle_failure: mz_zip_array_clear(pZip, &file_data_array); return MZ_FALSE; } mz_bool mz_zip_validate_archive(mz_zip_archive *pZip, mz_uint flags) { mz_zip_internal_state *pState; mz_uint32 i; if ((!pZip) || (!pZip->m_pState) || (!pZip->m_pAlloc) || (!pZip->m_pFree) || (!pZip->m_pRead)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); pState = pZip->m_pState; /* Basic sanity checks */ if (!pState->m_zip64) { if (pZip->m_total_files > MZ_UINT16_MAX) return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); if (pZip->m_archive_size > MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); } else { if (pState->m_central_dir.m_size >= MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); } for (i = 0; i < pZip->m_total_files; i++) { if (MZ_ZIP_FLAG_VALIDATE_LOCATE_FILE_FLAG & flags) { mz_uint32 found_index; mz_zip_archive_file_stat stat; if (!mz_zip_reader_file_stat(pZip, i, &stat)) return MZ_FALSE; if (!mz_zip_reader_locate_file_v2(pZip, stat.m_filename, NULL, 0, &found_index)) return MZ_FALSE; /* This check can fail if there are duplicate filenames in the archive (which we don't check for when writing - that's up to the user) */ if (found_index != i) return mz_zip_set_error(pZip, MZ_ZIP_VALIDATION_FAILED); } if (!mz_zip_validate_file(pZip, i, flags)) return MZ_FALSE; } return MZ_TRUE; } mz_bool mz_zip_validate_mem_archive(const void *pMem, size_t size, mz_uint flags, mz_zip_error *pErr) { mz_bool success = MZ_TRUE; mz_zip_archive zip; mz_zip_error actual_err = MZ_ZIP_NO_ERROR; if ((!pMem) || (!size)) { if (pErr) *pErr = MZ_ZIP_INVALID_PARAMETER; return MZ_FALSE; } mz_zip_zero_struct(&zip); if (!mz_zip_reader_init_mem(&zip, pMem, size, flags)) { if (pErr) *pErr = zip.m_last_error; return MZ_FALSE; } if (!mz_zip_validate_archive(&zip, flags)) { actual_err = zip.m_last_error; success = MZ_FALSE; } if (!mz_zip_reader_end_internal(&zip, success)) { if (!actual_err) actual_err = zip.m_last_error; success = MZ_FALSE; } if (pErr) *pErr = actual_err; return success; } #ifndef MINIZ_NO_STDIO mz_bool mz_zip_validate_file_archive(const char *pFilename, mz_uint flags, mz_zip_error *pErr) { mz_bool success = MZ_TRUE; mz_zip_archive zip; mz_zip_error actual_err = MZ_ZIP_NO_ERROR; if (!pFilename) { if (pErr) *pErr = MZ_ZIP_INVALID_PARAMETER; return MZ_FALSE; } mz_zip_zero_struct(&zip); if (!mz_zip_reader_init_file_v2(&zip, pFilename, flags, 0, 0)) { if (pErr) *pErr = zip.m_last_error; return MZ_FALSE; } if (!mz_zip_validate_archive(&zip, flags)) { actual_err = zip.m_last_error; success = MZ_FALSE; } if (!mz_zip_reader_end_internal(&zip, success)) { if (!actual_err) actual_err = zip.m_last_error; success = MZ_FALSE; } if (pErr) *pErr = actual_err; return success; } #endif /* #ifndef MINIZ_NO_STDIO */ /* ------------------- .ZIP archive writing */ #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS static MZ_FORCEINLINE void mz_write_le16(mz_uint8 *p, mz_uint16 v) { p[0] = (mz_uint8)v; p[1] = (mz_uint8)(v >> 8); } static MZ_FORCEINLINE void mz_write_le32(mz_uint8 *p, mz_uint32 v) { p[0] = (mz_uint8)v; p[1] = (mz_uint8)(v >> 8); p[2] = (mz_uint8)(v >> 16); p[3] = (mz_uint8)(v >> 24); } static MZ_FORCEINLINE void mz_write_le64(mz_uint8 *p, mz_uint64 v) { mz_write_le32(p, (mz_uint32)v); mz_write_le32(p + sizeof(mz_uint32), (mz_uint32)(v >> 32)); } #define MZ_WRITE_LE16(p, v) mz_write_le16((mz_uint8 *)(p), (mz_uint16)(v)) #define MZ_WRITE_LE32(p, v) mz_write_le32((mz_uint8 *)(p), (mz_uint32)(v)) #define MZ_WRITE_LE64(p, v) mz_write_le64((mz_uint8 *)(p), (mz_uint64)(v)) static size_t mz_zip_heap_write_func(void *pOpaque, mz_uint64 file_ofs, const void *pBuf, size_t n) { mz_zip_archive *pZip = (mz_zip_archive *)pOpaque; mz_zip_internal_state *pState = pZip->m_pState; mz_uint64 new_size = MZ_MAX(file_ofs + n, pState->m_mem_size); if (!n) return 0; /* An allocation this big is likely to just fail on 32-bit systems, so don't even go there. */ if ((sizeof(size_t) == sizeof(mz_uint32)) && (new_size > 0x7FFFFFFF)) { mz_zip_set_error(pZip, MZ_ZIP_FILE_TOO_LARGE); return 0; } if (new_size > pState->m_mem_capacity) { void *pNew_block; size_t new_capacity = MZ_MAX(64, pState->m_mem_capacity); while (new_capacity < new_size) new_capacity *= 2; if (NULL == (pNew_block = pZip->m_pRealloc(pZip->m_pAlloc_opaque, pState->m_pMem, 1, new_capacity))) { mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); return 0; } pState->m_pMem = pNew_block; pState->m_mem_capacity = new_capacity; } memcpy((mz_uint8 *)pState->m_pMem + file_ofs, pBuf, n); pState->m_mem_size = (size_t)new_size; return n; } static mz_bool mz_zip_writer_end_internal(mz_zip_archive *pZip, mz_bool set_last_error) { mz_zip_internal_state *pState; mz_bool status = MZ_TRUE; if ((!pZip) || (!pZip->m_pState) || (!pZip->m_pAlloc) || (!pZip->m_pFree) || ((pZip->m_zip_mode != MZ_ZIP_MODE_WRITING) && (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED))) { if (set_last_error) mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); return MZ_FALSE; } pState = pZip->m_pState; pZip->m_pState = NULL; mz_zip_array_clear(pZip, &pState->m_central_dir); mz_zip_array_clear(pZip, &pState->m_central_dir_offsets); mz_zip_array_clear(pZip, &pState->m_sorted_central_dir_offsets); #ifndef MINIZ_NO_STDIO if (pState->m_pFile) { if (pZip->m_zip_type == MZ_ZIP_TYPE_FILE) { if (MZ_FCLOSE(pState->m_pFile) == EOF) { if (set_last_error) mz_zip_set_error(pZip, MZ_ZIP_FILE_CLOSE_FAILED); status = MZ_FALSE; } } pState->m_pFile = NULL; } #endif /* #ifndef MINIZ_NO_STDIO */ if ((pZip->m_pWrite == mz_zip_heap_write_func) && (pState->m_pMem)) { pZip->m_pFree(pZip->m_pAlloc_opaque, pState->m_pMem); pState->m_pMem = NULL; } pZip->m_pFree(pZip->m_pAlloc_opaque, pState); pZip->m_zip_mode = MZ_ZIP_MODE_INVALID; return status; } mz_bool mz_zip_writer_init_v2(mz_zip_archive *pZip, mz_uint64 existing_size, mz_uint flags) { mz_bool zip64 = (flags & MZ_ZIP_FLAG_WRITE_ZIP64) != 0; if ((!pZip) || (pZip->m_pState) || (!pZip->m_pWrite) || (pZip->m_zip_mode != MZ_ZIP_MODE_INVALID)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); if (flags & MZ_ZIP_FLAG_WRITE_ALLOW_READING) { if (!pZip->m_pRead) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); } if (pZip->m_file_offset_alignment) { /* Ensure user specified file offset alignment is a power of 2. */ if (pZip->m_file_offset_alignment & (pZip->m_file_offset_alignment - 1)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); } if (!pZip->m_pAlloc) pZip->m_pAlloc = miniz_def_alloc_func; if (!pZip->m_pFree) pZip->m_pFree = miniz_def_free_func; if (!pZip->m_pRealloc) pZip->m_pRealloc = miniz_def_realloc_func; pZip->m_archive_size = existing_size; pZip->m_central_directory_file_ofs = 0; pZip->m_total_files = 0; if (NULL == (pZip->m_pState = (mz_zip_internal_state *)pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, sizeof(mz_zip_internal_state)))) return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); memset(pZip->m_pState, 0, sizeof(mz_zip_internal_state)); MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_central_dir, sizeof(mz_uint8)); MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_central_dir_offsets, sizeof(mz_uint32)); MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_sorted_central_dir_offsets, sizeof(mz_uint32)); pZip->m_pState->m_zip64 = zip64; pZip->m_pState->m_zip64_has_extended_info_fields = zip64; pZip->m_zip_type = MZ_ZIP_TYPE_USER; pZip->m_zip_mode = MZ_ZIP_MODE_WRITING; return MZ_TRUE; } mz_bool mz_zip_writer_init(mz_zip_archive *pZip, mz_uint64 existing_size) { return mz_zip_writer_init_v2(pZip, existing_size, 0); } mz_bool mz_zip_writer_init_heap_v2(mz_zip_archive *pZip, size_t size_to_reserve_at_beginning, size_t initial_allocation_size, mz_uint flags) { pZip->m_pWrite = mz_zip_heap_write_func; pZip->m_pNeeds_keepalive = NULL; if (flags & MZ_ZIP_FLAG_WRITE_ALLOW_READING) pZip->m_pRead = mz_zip_mem_read_func; pZip->m_pIO_opaque = pZip; if (!mz_zip_writer_init_v2(pZip, size_to_reserve_at_beginning, flags)) return MZ_FALSE; pZip->m_zip_type = MZ_ZIP_TYPE_HEAP; if (0 != (initial_allocation_size = MZ_MAX(initial_allocation_size, size_to_reserve_at_beginning))) { if (NULL == (pZip->m_pState->m_pMem = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, initial_allocation_size))) { mz_zip_writer_end_internal(pZip, MZ_FALSE); return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); } pZip->m_pState->m_mem_capacity = initial_allocation_size; } return MZ_TRUE; } mz_bool mz_zip_writer_init_heap(mz_zip_archive *pZip, size_t size_to_reserve_at_beginning, size_t initial_allocation_size) { return mz_zip_writer_init_heap_v2(pZip, size_to_reserve_at_beginning, initial_allocation_size, 0); } #ifndef MINIZ_NO_STDIO static size_t mz_zip_file_write_func(void *pOpaque, mz_uint64 file_ofs, const void *pBuf, size_t n) { mz_zip_archive *pZip = (mz_zip_archive *)pOpaque; mz_int64 cur_ofs = MZ_FTELL64(pZip->m_pState->m_pFile); file_ofs += pZip->m_pState->m_file_archive_start_ofs; if (((mz_int64)file_ofs < 0) || (((cur_ofs != (mz_int64)file_ofs)) && (MZ_FSEEK64(pZip->m_pState->m_pFile, (mz_int64)file_ofs, SEEK_SET)))) { mz_zip_set_error(pZip, MZ_ZIP_FILE_SEEK_FAILED); return 0; } return MZ_FWRITE(pBuf, 1, n, pZip->m_pState->m_pFile); } mz_bool mz_zip_writer_init_file(mz_zip_archive *pZip, const char *pFilename, mz_uint64 size_to_reserve_at_beginning) { return mz_zip_writer_init_file_v2(pZip, pFilename, size_to_reserve_at_beginning, 0); } mz_bool mz_zip_writer_init_file_v2(mz_zip_archive *pZip, const char *pFilename, mz_uint64 size_to_reserve_at_beginning, mz_uint flags) { MZ_FILE *pFile; pZip->m_pWrite = mz_zip_file_write_func; pZip->m_pNeeds_keepalive = NULL; if (flags & MZ_ZIP_FLAG_WRITE_ALLOW_READING) pZip->m_pRead = mz_zip_file_read_func; pZip->m_pIO_opaque = pZip; if (!mz_zip_writer_init_v2(pZip, size_to_reserve_at_beginning, flags)) return MZ_FALSE; if (NULL == (pFile = MZ_FOPEN(pFilename, (flags & MZ_ZIP_FLAG_WRITE_ALLOW_READING) ? "w+b" : "wb"))) { mz_zip_writer_end(pZip); return mz_zip_set_error(pZip, MZ_ZIP_FILE_OPEN_FAILED); } pZip->m_pState->m_pFile = pFile; pZip->m_zip_type = MZ_ZIP_TYPE_FILE; if (size_to_reserve_at_beginning) { mz_uint64 cur_ofs = 0; char buf[4096]; MZ_CLEAR_ARR(buf); do { size_t n = (size_t)MZ_MIN(sizeof(buf), size_to_reserve_at_beginning); if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_ofs, buf, n) != n) { mz_zip_writer_end(pZip); return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); } cur_ofs += n; size_to_reserve_at_beginning -= n; } while (size_to_reserve_at_beginning); } return MZ_TRUE; } mz_bool mz_zip_writer_init_cfile(mz_zip_archive *pZip, MZ_FILE *pFile, mz_uint flags) { pZip->m_pWrite = mz_zip_file_write_func; pZip->m_pNeeds_keepalive = NULL; if (flags & MZ_ZIP_FLAG_WRITE_ALLOW_READING) pZip->m_pRead = mz_zip_file_read_func; pZip->m_pIO_opaque = pZip; if (!mz_zip_writer_init_v2(pZip, 0, flags)) return MZ_FALSE; pZip->m_pState->m_pFile = pFile; pZip->m_pState->m_file_archive_start_ofs = MZ_FTELL64(pZip->m_pState->m_pFile); pZip->m_zip_type = MZ_ZIP_TYPE_CFILE; return MZ_TRUE; } #endif /* #ifndef MINIZ_NO_STDIO */ mz_bool mz_zip_writer_init_from_reader_v2(mz_zip_archive *pZip, const char *pFilename, mz_uint flags) { mz_zip_internal_state *pState; if ((!pZip) || (!pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_READING)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); if (flags & MZ_ZIP_FLAG_WRITE_ZIP64) { /* We don't support converting a non-zip64 file to zip64 - this seems like more trouble than it's worth. (What about the existing 32-bit data descriptors that could follow the compressed data?) */ if (!pZip->m_pState->m_zip64) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); } /* No sense in trying to write to an archive that's already at the support max size */ if (pZip->m_pState->m_zip64) { if (pZip->m_total_files == MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); } else { if (pZip->m_total_files == MZ_UINT16_MAX) return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); if ((pZip->m_archive_size + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + MZ_ZIP_LOCAL_DIR_HEADER_SIZE) > MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_FILE_TOO_LARGE); } pState = pZip->m_pState; if (pState->m_pFile) { #ifdef MINIZ_NO_STDIO (void)pFilename; return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); #else if (pZip->m_pIO_opaque != pZip) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); if (pZip->m_zip_type == MZ_ZIP_TYPE_FILE) { if (!pFilename) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); /* Archive is being read from stdio and was originally opened only for reading. Try to reopen as writable. */ if (NULL == (pState->m_pFile = MZ_FREOPEN(pFilename, "r+b", pState->m_pFile))) { /* The mz_zip_archive is now in a bogus state because pState->m_pFile is NULL, so just close it. */ mz_zip_reader_end_internal(pZip, MZ_FALSE); return mz_zip_set_error(pZip, MZ_ZIP_FILE_OPEN_FAILED); } } pZip->m_pWrite = mz_zip_file_write_func; pZip->m_pNeeds_keepalive = NULL; #endif /* #ifdef MINIZ_NO_STDIO */ } else if (pState->m_pMem) { /* Archive lives in a memory block. Assume it's from the heap that we can resize using the realloc callback. */ if (pZip->m_pIO_opaque != pZip) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); pState->m_mem_capacity = pState->m_mem_size; pZip->m_pWrite = mz_zip_heap_write_func; pZip->m_pNeeds_keepalive = NULL; } /* Archive is being read via a user provided read function - make sure the user has specified a write function too. */ else if (!pZip->m_pWrite) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); /* Start writing new files at the archive's current central directory location. */ /* TODO: We could add a flag that lets the user start writing immediately AFTER the existing central dir - this would be safer. */ pZip->m_archive_size = pZip->m_central_directory_file_ofs; pZip->m_central_directory_file_ofs = 0; /* Clear the sorted central dir offsets, they aren't useful or maintained now. */ /* Even though we're now in write mode, files can still be extracted and verified, but file locates will be slow. */ /* TODO: We could easily maintain the sorted central directory offsets. */ mz_zip_array_clear(pZip, &pZip->m_pState->m_sorted_central_dir_offsets); pZip->m_zip_mode = MZ_ZIP_MODE_WRITING; return MZ_TRUE; } mz_bool mz_zip_writer_init_from_reader(mz_zip_archive *pZip, const char *pFilename) { return mz_zip_writer_init_from_reader_v2(pZip, pFilename, 0); } /* TODO: pArchive_name is a terrible name here! */ mz_bool mz_zip_writer_add_mem(mz_zip_archive *pZip, const char *pArchive_name, const void *pBuf, size_t buf_size, mz_uint level_and_flags) { return mz_zip_writer_add_mem_ex(pZip, pArchive_name, pBuf, buf_size, NULL, 0, level_and_flags, 0, 0); } typedef struct { mz_zip_archive *m_pZip; mz_uint64 m_cur_archive_file_ofs; mz_uint64 m_comp_size; } mz_zip_writer_add_state; static mz_bool mz_zip_writer_add_put_buf_callback(const void *pBuf, int len, void *pUser) { mz_zip_writer_add_state *pState = (mz_zip_writer_add_state *)pUser; if ((int)pState->m_pZip->m_pWrite(pState->m_pZip->m_pIO_opaque, pState->m_cur_archive_file_ofs, pBuf, len) != len) return MZ_FALSE; pState->m_cur_archive_file_ofs += len; pState->m_comp_size += len; return MZ_TRUE; } #define MZ_ZIP64_MAX_LOCAL_EXTRA_FIELD_SIZE (sizeof(mz_uint16) * 2 + sizeof(mz_uint64) * 2) #define MZ_ZIP64_MAX_CENTRAL_EXTRA_FIELD_SIZE (sizeof(mz_uint16) * 2 + sizeof(mz_uint64) * 3) static mz_uint32 mz_zip_writer_create_zip64_extra_data(mz_uint8 *pBuf, mz_uint64 *pUncomp_size, mz_uint64 *pComp_size, mz_uint64 *pLocal_header_ofs) { mz_uint8 *pDst = pBuf; mz_uint32 field_size = 0; MZ_WRITE_LE16(pDst + 0, MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID); MZ_WRITE_LE16(pDst + 2, 0); pDst += sizeof(mz_uint16) * 2; if (pUncomp_size) { MZ_WRITE_LE64(pDst, *pUncomp_size); pDst += sizeof(mz_uint64); field_size += sizeof(mz_uint64); } if (pComp_size) { MZ_WRITE_LE64(pDst, *pComp_size); pDst += sizeof(mz_uint64); field_size += sizeof(mz_uint64); } if (pLocal_header_ofs) { MZ_WRITE_LE64(pDst, *pLocal_header_ofs); pDst += sizeof(mz_uint64); field_size += sizeof(mz_uint64); } MZ_WRITE_LE16(pBuf + 2, field_size); return (mz_uint32)(pDst - pBuf); } static mz_bool mz_zip_writer_create_local_dir_header(mz_zip_archive *pZip, mz_uint8 *pDst, mz_uint16 filename_size, mz_uint16 extra_size, mz_uint64 uncomp_size, mz_uint64 comp_size, mz_uint32 uncomp_crc32, mz_uint16 method, mz_uint16 bit_flags, mz_uint16 dos_time, mz_uint16 dos_date) { (void)pZip; memset(pDst, 0, MZ_ZIP_LOCAL_DIR_HEADER_SIZE); MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_SIG_OFS, MZ_ZIP_LOCAL_DIR_HEADER_SIG); MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_VERSION_NEEDED_OFS, method ? 20 : 0); MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_BIT_FLAG_OFS, bit_flags); MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_METHOD_OFS, method); MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_FILE_TIME_OFS, dos_time); MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_FILE_DATE_OFS, dos_date); MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_CRC32_OFS, uncomp_crc32); MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_COMPRESSED_SIZE_OFS, MZ_MIN(comp_size, MZ_UINT32_MAX)); MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_DECOMPRESSED_SIZE_OFS, MZ_MIN(uncomp_size, MZ_UINT32_MAX)); MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_FILENAME_LEN_OFS, filename_size); MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_EXTRA_LEN_OFS, extra_size); return MZ_TRUE; } static mz_bool mz_zip_writer_create_central_dir_header(mz_zip_archive *pZip, mz_uint8 *pDst, mz_uint16 filename_size, mz_uint16 extra_size, mz_uint16 comment_size, mz_uint64 uncomp_size, mz_uint64 comp_size, mz_uint32 uncomp_crc32, mz_uint16 method, mz_uint16 bit_flags, mz_uint16 dos_time, mz_uint16 dos_date, mz_uint64 local_header_ofs, mz_uint32 ext_attributes) { (void)pZip; memset(pDst, 0, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE); MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_SIG_OFS, MZ_ZIP_CENTRAL_DIR_HEADER_SIG); MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_VERSION_NEEDED_OFS, method ? 20 : 0); MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_BIT_FLAG_OFS, bit_flags); MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_METHOD_OFS, method); MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_FILE_TIME_OFS, dos_time); MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_FILE_DATE_OFS, dos_date); MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_CRC32_OFS, uncomp_crc32); MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS, MZ_MIN(comp_size, MZ_UINT32_MAX)); MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS, MZ_MIN(uncomp_size, MZ_UINT32_MAX)); MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_FILENAME_LEN_OFS, filename_size); MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_EXTRA_LEN_OFS, extra_size); MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_COMMENT_LEN_OFS, comment_size); MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_EXTERNAL_ATTR_OFS, ext_attributes); MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_LOCAL_HEADER_OFS, MZ_MIN(local_header_ofs, MZ_UINT32_MAX)); return MZ_TRUE; } static mz_bool mz_zip_writer_add_to_central_dir(mz_zip_archive *pZip, const char *pFilename, mz_uint16 filename_size, const void *pExtra, mz_uint16 extra_size, const void *pComment, mz_uint16 comment_size, mz_uint64 uncomp_size, mz_uint64 comp_size, mz_uint32 uncomp_crc32, mz_uint16 method, mz_uint16 bit_flags, mz_uint16 dos_time, mz_uint16 dos_date, mz_uint64 local_header_ofs, mz_uint32 ext_attributes, const char *user_extra_data, mz_uint user_extra_data_len) { mz_zip_internal_state *pState = pZip->m_pState; mz_uint32 central_dir_ofs = (mz_uint32)pState->m_central_dir.m_size; size_t orig_central_dir_size = pState->m_central_dir.m_size; mz_uint8 central_dir_header[MZ_ZIP_CENTRAL_DIR_HEADER_SIZE]; if (!pZip->m_pState->m_zip64) { if (local_header_ofs > 0xFFFFFFFF) return mz_zip_set_error(pZip, MZ_ZIP_FILE_TOO_LARGE); } /* miniz doesn't support central dirs >= MZ_UINT32_MAX bytes yet */ if (((mz_uint64)pState->m_central_dir.m_size + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_size + extra_size + user_extra_data_len + comment_size) >= MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE); if (!mz_zip_writer_create_central_dir_header(pZip, central_dir_header, filename_size, (mz_uint16)(extra_size + user_extra_data_len), comment_size, uncomp_size, comp_size, uncomp_crc32, method, bit_flags, dos_time, dos_date, local_header_ofs, ext_attributes)) return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR); if ((!mz_zip_array_push_back(pZip, &pState->m_central_dir, central_dir_header, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE)) || (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pFilename, filename_size)) || (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pExtra, extra_size)) || (!mz_zip_array_push_back(pZip, &pState->m_central_dir, user_extra_data, user_extra_data_len)) || (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pComment, comment_size)) || (!mz_zip_array_push_back(pZip, &pState->m_central_dir_offsets, ¢ral_dir_ofs, 1))) { /* Try to resize the central directory array back into its original state. */ mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size, MZ_FALSE); return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); } return MZ_TRUE; } static mz_bool mz_zip_writer_validate_archive_name(const char *pArchive_name) { /* Basic ZIP archive filename validity checks: Valid filenames cannot start with a forward slash, cannot contain a drive letter, and cannot use DOS-style backward slashes. */ if (*pArchive_name == '/') return MZ_FALSE; /* Making sure the name does not contain drive letters or DOS style backward slashes is the responsibility of the program using miniz*/ return MZ_TRUE; } static mz_uint mz_zip_writer_compute_padding_needed_for_file_alignment(mz_zip_archive *pZip) { mz_uint32 n; if (!pZip->m_file_offset_alignment) return 0; n = (mz_uint32)(pZip->m_archive_size & (pZip->m_file_offset_alignment - 1)); return (mz_uint)((pZip->m_file_offset_alignment - n) & (pZip->m_file_offset_alignment - 1)); } static mz_bool mz_zip_writer_write_zeros(mz_zip_archive *pZip, mz_uint64 cur_file_ofs, mz_uint32 n) { char buf[4096]; memset(buf, 0, MZ_MIN(sizeof(buf), n)); while (n) { mz_uint32 s = MZ_MIN(sizeof(buf), n); if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_file_ofs, buf, s) != s) return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); cur_file_ofs += s; n -= s; } return MZ_TRUE; } mz_bool mz_zip_writer_add_mem_ex(mz_zip_archive *pZip, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags, mz_uint64 uncomp_size, mz_uint32 uncomp_crc32) { return mz_zip_writer_add_mem_ex_v2(pZip, pArchive_name, pBuf, buf_size, pComment, comment_size, level_and_flags, uncomp_size, uncomp_crc32, NULL, NULL, 0, NULL, 0); } mz_bool mz_zip_writer_add_mem_ex_v2(mz_zip_archive *pZip, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags, mz_uint64 uncomp_size, mz_uint32 uncomp_crc32, MZ_TIME_T *last_modified, const char *user_extra_data, mz_uint user_extra_data_len, const char *user_extra_data_central, mz_uint user_extra_data_central_len) { mz_uint16 method = 0, dos_time = 0, dos_date = 0; mz_uint level, ext_attributes = 0, num_alignment_padding_bytes; mz_uint64 local_dir_header_ofs = pZip->m_archive_size, cur_archive_file_ofs = pZip->m_archive_size, comp_size = 0; size_t archive_name_size; mz_uint8 local_dir_header[MZ_ZIP_LOCAL_DIR_HEADER_SIZE]; tdefl_compressor *pComp = NULL; mz_bool store_data_uncompressed; mz_zip_internal_state *pState; mz_uint8 *pExtra_data = NULL; mz_uint32 extra_size = 0; mz_uint8 extra_data[MZ_ZIP64_MAX_CENTRAL_EXTRA_FIELD_SIZE]; mz_uint16 bit_flags = 0; if ((int)level_and_flags < 0) level_and_flags = MZ_DEFAULT_LEVEL; if (uncomp_size || (buf_size && !(level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA))) bit_flags |= MZ_ZIP_LDH_BIT_FLAG_HAS_LOCATOR; if (!(level_and_flags & MZ_ZIP_FLAG_ASCII_FILENAME)) bit_flags |= MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_UTF8; level = level_and_flags & 0xF; store_data_uncompressed = ((!level) || (level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA)); if ((!pZip) || (!pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING) || ((buf_size) && (!pBuf)) || (!pArchive_name) || ((comment_size) && (!pComment)) || (level > MZ_UBER_COMPRESSION)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); pState = pZip->m_pState; if (pState->m_zip64) { if (pZip->m_total_files == MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); } else { if (pZip->m_total_files == MZ_UINT16_MAX) { pState->m_zip64 = MZ_TRUE; /*return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); */ } if (((mz_uint64)buf_size > 0xFFFFFFFF) || (uncomp_size > 0xFFFFFFFF)) { pState->m_zip64 = MZ_TRUE; /*return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); */ } } if ((!(level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) && (uncomp_size)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); if (!mz_zip_writer_validate_archive_name(pArchive_name)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_FILENAME); #ifndef MINIZ_NO_TIME if (last_modified != NULL) { mz_zip_time_t_to_dos_time(*last_modified, &dos_time, &dos_date); } else { MZ_TIME_T cur_time; time(&cur_time); mz_zip_time_t_to_dos_time(cur_time, &dos_time, &dos_date); } #endif /* #ifndef MINIZ_NO_TIME */ if (!(level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) { uncomp_crc32 = (mz_uint32)mz_crc32(MZ_CRC32_INIT, (const mz_uint8 *)pBuf, buf_size); uncomp_size = buf_size; if (uncomp_size <= 3) { level = 0; store_data_uncompressed = MZ_TRUE; } } archive_name_size = strlen(pArchive_name); if (archive_name_size > MZ_UINT16_MAX) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_FILENAME); num_alignment_padding_bytes = mz_zip_writer_compute_padding_needed_for_file_alignment(pZip); /* miniz doesn't support central dirs >= MZ_UINT32_MAX bytes yet */ if (((mz_uint64)pState->m_central_dir.m_size + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + archive_name_size + MZ_ZIP64_MAX_CENTRAL_EXTRA_FIELD_SIZE + comment_size) >= MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE); if (!pState->m_zip64) { /* Bail early if the archive would obviously become too large */ if ((pZip->m_archive_size + num_alignment_padding_bytes + MZ_ZIP_LOCAL_DIR_HEADER_SIZE + archive_name_size + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + archive_name_size + comment_size + user_extra_data_len + pState->m_central_dir.m_size + MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE + user_extra_data_central_len + MZ_ZIP_DATA_DESCRIPTER_SIZE32) > 0xFFFFFFFF) { pState->m_zip64 = MZ_TRUE; /*return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); */ } } if ((archive_name_size) && (pArchive_name[archive_name_size - 1] == '/')) { /* Set DOS Subdirectory attribute bit. */ ext_attributes |= MZ_ZIP_DOS_DIR_ATTRIBUTE_BITFLAG; /* Subdirectories cannot contain data. */ if ((buf_size) || (uncomp_size)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); } /* Try to do any allocations before writing to the archive, so if an allocation fails the file remains unmodified. (A good idea if we're doing an in-place modification.) */ if ((!mz_zip_array_ensure_room(pZip, &pState->m_central_dir, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + archive_name_size + comment_size + (pState->m_zip64 ? MZ_ZIP64_MAX_CENTRAL_EXTRA_FIELD_SIZE : 0))) || (!mz_zip_array_ensure_room(pZip, &pState->m_central_dir_offsets, 1))) return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); if ((!store_data_uncompressed) && (buf_size)) { if (NULL == (pComp = (tdefl_compressor *)pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, sizeof(tdefl_compressor)))) return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); } if (!mz_zip_writer_write_zeros(pZip, cur_archive_file_ofs, num_alignment_padding_bytes)) { pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); return MZ_FALSE; } local_dir_header_ofs += num_alignment_padding_bytes; if (pZip->m_file_offset_alignment) { MZ_ASSERT((local_dir_header_ofs & (pZip->m_file_offset_alignment - 1)) == 0); } cur_archive_file_ofs += num_alignment_padding_bytes; MZ_CLEAR_ARR(local_dir_header); if (!store_data_uncompressed || (level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) { method = MZ_DEFLATED; } if (pState->m_zip64) { if (uncomp_size >= MZ_UINT32_MAX || local_dir_header_ofs >= MZ_UINT32_MAX) { pExtra_data = extra_data; extra_size = mz_zip_writer_create_zip64_extra_data(extra_data, (uncomp_size >= MZ_UINT32_MAX) ? &uncomp_size : NULL, (uncomp_size >= MZ_UINT32_MAX) ? &comp_size : NULL, (local_dir_header_ofs >= MZ_UINT32_MAX) ? &local_dir_header_ofs : NULL); } if (!mz_zip_writer_create_local_dir_header(pZip, local_dir_header, (mz_uint16)archive_name_size, (mz_uint16)(extra_size + user_extra_data_len), 0, 0, 0, method, bit_flags, dos_time, dos_date)) return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR); if (pZip->m_pWrite(pZip->m_pIO_opaque, local_dir_header_ofs, local_dir_header, sizeof(local_dir_header)) != sizeof(local_dir_header)) return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); cur_archive_file_ofs += sizeof(local_dir_header); if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pArchive_name, archive_name_size) != archive_name_size) { pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); } cur_archive_file_ofs += archive_name_size; if (pExtra_data != NULL) { if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, extra_data, extra_size) != extra_size) return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); cur_archive_file_ofs += extra_size; } } else { if ((comp_size > MZ_UINT32_MAX) || (cur_archive_file_ofs > MZ_UINT32_MAX)) return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); if (!mz_zip_writer_create_local_dir_header(pZip, local_dir_header, (mz_uint16)archive_name_size, (mz_uint16)user_extra_data_len, 0, 0, 0, method, bit_flags, dos_time, dos_date)) return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR); if (pZip->m_pWrite(pZip->m_pIO_opaque, local_dir_header_ofs, local_dir_header, sizeof(local_dir_header)) != sizeof(local_dir_header)) return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); cur_archive_file_ofs += sizeof(local_dir_header); if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pArchive_name, archive_name_size) != archive_name_size) { pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); } cur_archive_file_ofs += archive_name_size; } if (user_extra_data_len > 0) { if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, user_extra_data, user_extra_data_len) != user_extra_data_len) return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); cur_archive_file_ofs += user_extra_data_len; } if (store_data_uncompressed) { if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pBuf, buf_size) != buf_size) { pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); } cur_archive_file_ofs += buf_size; comp_size = buf_size; } else if (buf_size) { mz_zip_writer_add_state state; state.m_pZip = pZip; state.m_cur_archive_file_ofs = cur_archive_file_ofs; state.m_comp_size = 0; if ((tdefl_init(pComp, mz_zip_writer_add_put_buf_callback, &state, tdefl_create_comp_flags_from_zip_params(level, -15, MZ_DEFAULT_STRATEGY)) != TDEFL_STATUS_OKAY) || (tdefl_compress_buffer(pComp, pBuf, buf_size, TDEFL_FINISH) != TDEFL_STATUS_DONE)) { pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); return mz_zip_set_error(pZip, MZ_ZIP_COMPRESSION_FAILED); } comp_size = state.m_comp_size; cur_archive_file_ofs = state.m_cur_archive_file_ofs; } pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); pComp = NULL; if (uncomp_size) { mz_uint8 local_dir_footer[MZ_ZIP_DATA_DESCRIPTER_SIZE64]; mz_uint32 local_dir_footer_size = MZ_ZIP_DATA_DESCRIPTER_SIZE32; MZ_ASSERT(bit_flags & MZ_ZIP_LDH_BIT_FLAG_HAS_LOCATOR); MZ_WRITE_LE32(local_dir_footer + 0, MZ_ZIP_DATA_DESCRIPTOR_ID); MZ_WRITE_LE32(local_dir_footer + 4, uncomp_crc32); if (pExtra_data == NULL) { if (comp_size > MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); MZ_WRITE_LE32(local_dir_footer + 8, comp_size); MZ_WRITE_LE32(local_dir_footer + 12, uncomp_size); } else { MZ_WRITE_LE64(local_dir_footer + 8, comp_size); MZ_WRITE_LE64(local_dir_footer + 16, uncomp_size); local_dir_footer_size = MZ_ZIP_DATA_DESCRIPTER_SIZE64; } if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, local_dir_footer, local_dir_footer_size) != local_dir_footer_size) return MZ_FALSE; cur_archive_file_ofs += local_dir_footer_size; } if (pExtra_data != NULL) { extra_size = mz_zip_writer_create_zip64_extra_data(extra_data, (uncomp_size >= MZ_UINT32_MAX) ? &uncomp_size : NULL, (uncomp_size >= MZ_UINT32_MAX) ? &comp_size : NULL, (local_dir_header_ofs >= MZ_UINT32_MAX) ? &local_dir_header_ofs : NULL); } if (!mz_zip_writer_add_to_central_dir(pZip, pArchive_name, (mz_uint16)archive_name_size, pExtra_data, (mz_uint16)extra_size, pComment, comment_size, uncomp_size, comp_size, uncomp_crc32, method, bit_flags, dos_time, dos_date, local_dir_header_ofs, ext_attributes, user_extra_data_central, user_extra_data_central_len)) return MZ_FALSE; pZip->m_total_files++; pZip->m_archive_size = cur_archive_file_ofs; return MZ_TRUE; } mz_bool mz_zip_writer_add_read_buf_callback(mz_zip_archive *pZip, const char *pArchive_name, mz_file_read_func read_callback, void* callback_opaque, mz_uint64 max_size, const MZ_TIME_T *pFile_time, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags, const char *user_extra_data, mz_uint user_extra_data_len, const char *user_extra_data_central, mz_uint user_extra_data_central_len) { mz_uint16 gen_flags; mz_uint uncomp_crc32 = MZ_CRC32_INIT, level, num_alignment_padding_bytes; mz_uint16 method = 0, dos_time = 0, dos_date = 0, ext_attributes = 0; mz_uint64 local_dir_header_ofs, cur_archive_file_ofs = pZip->m_archive_size, uncomp_size = 0, comp_size = 0; size_t archive_name_size; mz_uint8 local_dir_header[MZ_ZIP_LOCAL_DIR_HEADER_SIZE]; mz_uint8 *pExtra_data = NULL; mz_uint32 extra_size = 0; mz_uint8 extra_data[MZ_ZIP64_MAX_CENTRAL_EXTRA_FIELD_SIZE]; mz_zip_internal_state *pState; mz_uint64 file_ofs = 0, cur_archive_header_file_ofs; if ((int)level_and_flags < 0) level_and_flags = MZ_DEFAULT_LEVEL; level = level_and_flags & 0xF; gen_flags = (level_and_flags & MZ_ZIP_FLAG_WRITE_HEADER_SET_SIZE) ? 0 : MZ_ZIP_LDH_BIT_FLAG_HAS_LOCATOR; if (!(level_and_flags & MZ_ZIP_FLAG_ASCII_FILENAME)) gen_flags |= MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_UTF8; /* Sanity checks */ if ((!pZip) || (!pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING) || (!pArchive_name) || ((comment_size) && (!pComment)) || (level > MZ_UBER_COMPRESSION)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); pState = pZip->m_pState; if ((!pState->m_zip64) && (max_size > MZ_UINT32_MAX)) { /* Source file is too large for non-zip64 */ /*return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); */ pState->m_zip64 = MZ_TRUE; } /* We could support this, but why? */ if (level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); if (!mz_zip_writer_validate_archive_name(pArchive_name)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_FILENAME); if (pState->m_zip64) { if (pZip->m_total_files == MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); } else { if (pZip->m_total_files == MZ_UINT16_MAX) { pState->m_zip64 = MZ_TRUE; /*return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); */ } } archive_name_size = strlen(pArchive_name); if (archive_name_size > MZ_UINT16_MAX) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_FILENAME); num_alignment_padding_bytes = mz_zip_writer_compute_padding_needed_for_file_alignment(pZip); /* miniz doesn't support central dirs >= MZ_UINT32_MAX bytes yet */ if (((mz_uint64)pState->m_central_dir.m_size + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + archive_name_size + MZ_ZIP64_MAX_CENTRAL_EXTRA_FIELD_SIZE + comment_size) >= MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE); if (!pState->m_zip64) { /* Bail early if the archive would obviously become too large */ if ((pZip->m_archive_size + num_alignment_padding_bytes + MZ_ZIP_LOCAL_DIR_HEADER_SIZE + archive_name_size + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + archive_name_size + comment_size + user_extra_data_len + pState->m_central_dir.m_size + MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE + 1024 + MZ_ZIP_DATA_DESCRIPTER_SIZE32 + user_extra_data_central_len) > 0xFFFFFFFF) { pState->m_zip64 = MZ_TRUE; /*return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); */ } } #ifndef MINIZ_NO_TIME if (pFile_time) { mz_zip_time_t_to_dos_time(*pFile_time, &dos_time, &dos_date); } #endif if (max_size <= 3) level = 0; if (!mz_zip_writer_write_zeros(pZip, cur_archive_file_ofs, num_alignment_padding_bytes)) { return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); } cur_archive_file_ofs += num_alignment_padding_bytes; local_dir_header_ofs = cur_archive_file_ofs; if (pZip->m_file_offset_alignment) { MZ_ASSERT((cur_archive_file_ofs & (pZip->m_file_offset_alignment - 1)) == 0); } if (max_size && level) { method = MZ_DEFLATED; } MZ_CLEAR_ARR(local_dir_header); if (pState->m_zip64) { if (max_size >= MZ_UINT32_MAX || local_dir_header_ofs >= MZ_UINT32_MAX) { pExtra_data = extra_data; if (level_and_flags & MZ_ZIP_FLAG_WRITE_HEADER_SET_SIZE) extra_size = mz_zip_writer_create_zip64_extra_data(extra_data, (max_size >= MZ_UINT32_MAX) ? &uncomp_size : NULL, (max_size >= MZ_UINT32_MAX) ? &comp_size : NULL, (local_dir_header_ofs >= MZ_UINT32_MAX) ? &local_dir_header_ofs : NULL); else extra_size = mz_zip_writer_create_zip64_extra_data(extra_data, NULL, NULL, (local_dir_header_ofs >= MZ_UINT32_MAX) ? &local_dir_header_ofs : NULL); } if (!mz_zip_writer_create_local_dir_header(pZip, local_dir_header, (mz_uint16)archive_name_size, (mz_uint16)(extra_size + user_extra_data_len), 0, 0, 0, method, gen_flags, dos_time, dos_date)) return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR); if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, local_dir_header, sizeof(local_dir_header)) != sizeof(local_dir_header)) return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); cur_archive_file_ofs += sizeof(local_dir_header); if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pArchive_name, archive_name_size) != archive_name_size) { return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); } cur_archive_file_ofs += archive_name_size; if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, extra_data, extra_size) != extra_size) return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); cur_archive_file_ofs += extra_size; } else { if ((comp_size > MZ_UINT32_MAX) || (cur_archive_file_ofs > MZ_UINT32_MAX)) return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); if (!mz_zip_writer_create_local_dir_header(pZip, local_dir_header, (mz_uint16)archive_name_size, (mz_uint16)user_extra_data_len, 0, 0, 0, method, gen_flags, dos_time, dos_date)) return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR); if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, local_dir_header, sizeof(local_dir_header)) != sizeof(local_dir_header)) return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); cur_archive_file_ofs += sizeof(local_dir_header); if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pArchive_name, archive_name_size) != archive_name_size) { return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); } cur_archive_file_ofs += archive_name_size; } if (user_extra_data_len > 0) { if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, user_extra_data, user_extra_data_len) != user_extra_data_len) return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); cur_archive_file_ofs += user_extra_data_len; } if (max_size) { void *pRead_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, MZ_ZIP_MAX_IO_BUF_SIZE); if (!pRead_buf) { return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); } if (!level) { while (1) { size_t n = read_callback(callback_opaque, file_ofs, pRead_buf, MZ_ZIP_MAX_IO_BUF_SIZE); if (n == 0) break; if ((n > MZ_ZIP_MAX_IO_BUF_SIZE) || (file_ofs + n > max_size)) { pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); } if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pRead_buf, n) != n) { pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); } file_ofs += n; uncomp_crc32 = (mz_uint32)mz_crc32(uncomp_crc32, (const mz_uint8 *)pRead_buf, n); cur_archive_file_ofs += n; } uncomp_size = file_ofs; comp_size = uncomp_size; } else { mz_bool result = MZ_FALSE; mz_zip_writer_add_state state; tdefl_compressor *pComp = (tdefl_compressor *)pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, sizeof(tdefl_compressor)); if (!pComp) { pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); } state.m_pZip = pZip; state.m_cur_archive_file_ofs = cur_archive_file_ofs; state.m_comp_size = 0; if (tdefl_init(pComp, mz_zip_writer_add_put_buf_callback, &state, tdefl_create_comp_flags_from_zip_params(level, -15, MZ_DEFAULT_STRATEGY)) != TDEFL_STATUS_OKAY) { pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR); } for (;;) { tdefl_status status; tdefl_flush flush = TDEFL_NO_FLUSH; size_t n = read_callback(callback_opaque, file_ofs, pRead_buf, MZ_ZIP_MAX_IO_BUF_SIZE); if ((n > MZ_ZIP_MAX_IO_BUF_SIZE) || (file_ofs + n > max_size)) { mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); break; } file_ofs += n; uncomp_crc32 = (mz_uint32)mz_crc32(uncomp_crc32, (const mz_uint8 *)pRead_buf, n); if (pZip->m_pNeeds_keepalive != NULL && pZip->m_pNeeds_keepalive(pZip->m_pIO_opaque)) flush = TDEFL_FULL_FLUSH; if (n == 0) flush = TDEFL_FINISH; status = tdefl_compress_buffer(pComp, pRead_buf, n, flush); if (status == TDEFL_STATUS_DONE) { result = MZ_TRUE; break; } else if (status != TDEFL_STATUS_OKAY) { mz_zip_set_error(pZip, MZ_ZIP_COMPRESSION_FAILED); break; } } pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); if (!result) { pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); return MZ_FALSE; } uncomp_size = file_ofs; comp_size = state.m_comp_size; cur_archive_file_ofs = state.m_cur_archive_file_ofs; } pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); } if (!(level_and_flags & MZ_ZIP_FLAG_WRITE_HEADER_SET_SIZE)) { mz_uint8 local_dir_footer[MZ_ZIP_DATA_DESCRIPTER_SIZE64]; mz_uint32 local_dir_footer_size = MZ_ZIP_DATA_DESCRIPTER_SIZE32; MZ_WRITE_LE32(local_dir_footer + 0, MZ_ZIP_DATA_DESCRIPTOR_ID); MZ_WRITE_LE32(local_dir_footer + 4, uncomp_crc32); if (pExtra_data == NULL) { if (comp_size > MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); MZ_WRITE_LE32(local_dir_footer + 8, comp_size); MZ_WRITE_LE32(local_dir_footer + 12, uncomp_size); } else { MZ_WRITE_LE64(local_dir_footer + 8, comp_size); MZ_WRITE_LE64(local_dir_footer + 16, uncomp_size); local_dir_footer_size = MZ_ZIP_DATA_DESCRIPTER_SIZE64; } if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, local_dir_footer, local_dir_footer_size) != local_dir_footer_size) return MZ_FALSE; cur_archive_file_ofs += local_dir_footer_size; } if (level_and_flags & MZ_ZIP_FLAG_WRITE_HEADER_SET_SIZE) { if (pExtra_data != NULL) { extra_size = mz_zip_writer_create_zip64_extra_data(extra_data, (max_size >= MZ_UINT32_MAX) ? &uncomp_size : NULL, (max_size >= MZ_UINT32_MAX) ? &comp_size : NULL, (local_dir_header_ofs >= MZ_UINT32_MAX) ? &local_dir_header_ofs : NULL); } if (!mz_zip_writer_create_local_dir_header(pZip, local_dir_header, (mz_uint16)archive_name_size, (mz_uint16)(extra_size + user_extra_data_len), (max_size >= MZ_UINT32_MAX) ? MZ_UINT32_MAX : uncomp_size, (max_size >= MZ_UINT32_MAX) ? MZ_UINT32_MAX : comp_size, uncomp_crc32, method, gen_flags, dos_time, dos_date)) return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR); cur_archive_header_file_ofs = local_dir_header_ofs; if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_header_file_ofs, local_dir_header, sizeof(local_dir_header)) != sizeof(local_dir_header)) return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); if (pExtra_data != NULL) { cur_archive_header_file_ofs += sizeof(local_dir_header); if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_header_file_ofs, pArchive_name, archive_name_size) != archive_name_size) { return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); } cur_archive_header_file_ofs += archive_name_size; if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_header_file_ofs, extra_data, extra_size) != extra_size) return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); cur_archive_header_file_ofs += extra_size; } } if (pExtra_data != NULL) { extra_size = mz_zip_writer_create_zip64_extra_data(extra_data, (uncomp_size >= MZ_UINT32_MAX) ? &uncomp_size : NULL, (uncomp_size >= MZ_UINT32_MAX) ? &comp_size : NULL, (local_dir_header_ofs >= MZ_UINT32_MAX) ? &local_dir_header_ofs : NULL); } if (!mz_zip_writer_add_to_central_dir(pZip, pArchive_name, (mz_uint16)archive_name_size, pExtra_data, (mz_uint16)extra_size, pComment, comment_size, uncomp_size, comp_size, uncomp_crc32, method, gen_flags, dos_time, dos_date, local_dir_header_ofs, ext_attributes, user_extra_data_central, user_extra_data_central_len)) return MZ_FALSE; pZip->m_total_files++; pZip->m_archive_size = cur_archive_file_ofs; return MZ_TRUE; } #ifndef MINIZ_NO_STDIO static size_t mz_file_read_func_stdio(void *pOpaque, mz_uint64 file_ofs, void *pBuf, size_t n) { MZ_FILE *pSrc_file = (MZ_FILE *)pOpaque; mz_int64 cur_ofs = MZ_FTELL64(pSrc_file); if (((mz_int64)file_ofs < 0) || (((cur_ofs != (mz_int64)file_ofs)) && (MZ_FSEEK64(pSrc_file, (mz_int64)file_ofs, SEEK_SET)))) return 0; return MZ_FREAD(pBuf, 1, n, pSrc_file); } mz_bool mz_zip_writer_add_cfile(mz_zip_archive *pZip, const char *pArchive_name, MZ_FILE *pSrc_file, mz_uint64 max_size, const MZ_TIME_T *pFile_time, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags, const char *user_extra_data, mz_uint user_extra_data_len, const char *user_extra_data_central, mz_uint user_extra_data_central_len) { return mz_zip_writer_add_read_buf_callback(pZip, pArchive_name, mz_file_read_func_stdio, pSrc_file, max_size, pFile_time, pComment, comment_size, level_and_flags, user_extra_data, user_extra_data_len, user_extra_data_central, user_extra_data_central_len); } mz_bool mz_zip_writer_add_file(mz_zip_archive *pZip, const char *pArchive_name, const char *pSrc_filename, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags) { MZ_FILE *pSrc_file = NULL; mz_uint64 uncomp_size = 0; MZ_TIME_T file_modified_time; MZ_TIME_T *pFile_time = NULL; mz_bool status; memset(&file_modified_time, 0, sizeof(file_modified_time)); #if !defined(MINIZ_NO_TIME) && !defined(MINIZ_NO_STDIO) pFile_time = &file_modified_time; if (!mz_zip_get_file_modified_time(pSrc_filename, &file_modified_time)) return mz_zip_set_error(pZip, MZ_ZIP_FILE_STAT_FAILED); #endif pSrc_file = MZ_FOPEN(pSrc_filename, "rb"); if (!pSrc_file) return mz_zip_set_error(pZip, MZ_ZIP_FILE_OPEN_FAILED); MZ_FSEEK64(pSrc_file, 0, SEEK_END); uncomp_size = MZ_FTELL64(pSrc_file); MZ_FSEEK64(pSrc_file, 0, SEEK_SET); status = mz_zip_writer_add_cfile(pZip, pArchive_name, pSrc_file, uncomp_size, pFile_time, pComment, comment_size, level_and_flags, NULL, 0, NULL, 0); MZ_FCLOSE(pSrc_file); return status; } #endif /* #ifndef MINIZ_NO_STDIO */ static mz_bool mz_zip_writer_update_zip64_extension_block(mz_zip_array *pNew_ext, mz_zip_archive *pZip, const mz_uint8 *pExt, mz_uint32 ext_len, mz_uint64 *pComp_size, mz_uint64 *pUncomp_size, mz_uint64 *pLocal_header_ofs, mz_uint32 *pDisk_start) { /* + 64 should be enough for any new zip64 data */ if (!mz_zip_array_reserve(pZip, pNew_ext, ext_len + 64, MZ_FALSE)) return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); mz_zip_array_resize(pZip, pNew_ext, 0, MZ_FALSE); if ((pUncomp_size) || (pComp_size) || (pLocal_header_ofs) || (pDisk_start)) { mz_uint8 new_ext_block[64]; mz_uint8 *pDst = new_ext_block; mz_write_le16(pDst, MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID); mz_write_le16(pDst + sizeof(mz_uint16), 0); pDst += sizeof(mz_uint16) * 2; if (pUncomp_size) { mz_write_le64(pDst, *pUncomp_size); pDst += sizeof(mz_uint64); } if (pComp_size) { mz_write_le64(pDst, *pComp_size); pDst += sizeof(mz_uint64); } if (pLocal_header_ofs) { mz_write_le64(pDst, *pLocal_header_ofs); pDst += sizeof(mz_uint64); } if (pDisk_start) { mz_write_le32(pDst, *pDisk_start); pDst += sizeof(mz_uint32); } mz_write_le16(new_ext_block + sizeof(mz_uint16), (mz_uint16)((pDst - new_ext_block) - sizeof(mz_uint16) * 2)); if (!mz_zip_array_push_back(pZip, pNew_ext, new_ext_block, pDst - new_ext_block)) return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); } if ((pExt) && (ext_len)) { mz_uint32 extra_size_remaining = ext_len; const mz_uint8 *pExtra_data = pExt; do { mz_uint32 field_id, field_data_size, field_total_size; if (extra_size_remaining < (sizeof(mz_uint16) * 2)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); field_id = MZ_READ_LE16(pExtra_data); field_data_size = MZ_READ_LE16(pExtra_data + sizeof(mz_uint16)); field_total_size = field_data_size + sizeof(mz_uint16) * 2; if (field_total_size > extra_size_remaining) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); if (field_id != MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID) { if (!mz_zip_array_push_back(pZip, pNew_ext, pExtra_data, field_total_size)) return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); } pExtra_data += field_total_size; extra_size_remaining -= field_total_size; } while (extra_size_remaining); } return MZ_TRUE; } /* TODO: This func is now pretty freakin complex due to zip64, split it up? */ mz_bool mz_zip_writer_add_from_zip_reader(mz_zip_archive *pZip, mz_zip_archive *pSource_zip, mz_uint src_file_index) { mz_uint n, bit_flags, num_alignment_padding_bytes, src_central_dir_following_data_size; mz_uint64 src_archive_bytes_remaining, local_dir_header_ofs; mz_uint64 cur_src_file_ofs, cur_dst_file_ofs; mz_uint32 local_header_u32[(MZ_ZIP_LOCAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) / sizeof(mz_uint32)]; mz_uint8 *pLocal_header = (mz_uint8 *)local_header_u32; mz_uint8 new_central_header[MZ_ZIP_CENTRAL_DIR_HEADER_SIZE]; size_t orig_central_dir_size; mz_zip_internal_state *pState; void *pBuf; const mz_uint8 *pSrc_central_header; mz_zip_archive_file_stat src_file_stat; mz_uint32 src_filename_len, src_comment_len, src_ext_len; mz_uint32 local_header_filename_size, local_header_extra_len; mz_uint64 local_header_comp_size, local_header_uncomp_size; mz_bool found_zip64_ext_data_in_ldir = MZ_FALSE; /* Sanity checks */ if ((!pZip) || (!pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING) || (!pSource_zip->m_pRead)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); pState = pZip->m_pState; /* Don't support copying files from zip64 archives to non-zip64, even though in some cases this is possible */ if ((pSource_zip->m_pState->m_zip64) && (!pZip->m_pState->m_zip64)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); /* Get pointer to the source central dir header and crack it */ if (NULL == (pSrc_central_header = mz_zip_get_cdh(pSource_zip, src_file_index))) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); if (MZ_READ_LE32(pSrc_central_header + MZ_ZIP_CDH_SIG_OFS) != MZ_ZIP_CENTRAL_DIR_HEADER_SIG) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); src_filename_len = MZ_READ_LE16(pSrc_central_header + MZ_ZIP_CDH_FILENAME_LEN_OFS); src_comment_len = MZ_READ_LE16(pSrc_central_header + MZ_ZIP_CDH_COMMENT_LEN_OFS); src_ext_len = MZ_READ_LE16(pSrc_central_header + MZ_ZIP_CDH_EXTRA_LEN_OFS); src_central_dir_following_data_size = src_filename_len + src_ext_len + src_comment_len; /* TODO: We don't support central dir's >= MZ_UINT32_MAX bytes right now (+32 fudge factor in case we need to add more extra data) */ if ((pState->m_central_dir.m_size + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + src_central_dir_following_data_size + 32) >= MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE); num_alignment_padding_bytes = mz_zip_writer_compute_padding_needed_for_file_alignment(pZip); if (!pState->m_zip64) { if (pZip->m_total_files == MZ_UINT16_MAX) return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); } else { /* TODO: Our zip64 support still has some 32-bit limits that may not be worth fixing. */ if (pZip->m_total_files == MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); } if (!mz_zip_file_stat_internal(pSource_zip, src_file_index, pSrc_central_header, &src_file_stat, NULL)) return MZ_FALSE; cur_src_file_ofs = src_file_stat.m_local_header_ofs; cur_dst_file_ofs = pZip->m_archive_size; /* Read the source archive's local dir header */ if (pSource_zip->m_pRead(pSource_zip->m_pIO_opaque, cur_src_file_ofs, pLocal_header, MZ_ZIP_LOCAL_DIR_HEADER_SIZE) != MZ_ZIP_LOCAL_DIR_HEADER_SIZE) return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); if (MZ_READ_LE32(pLocal_header) != MZ_ZIP_LOCAL_DIR_HEADER_SIG) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); cur_src_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE; /* Compute the total size we need to copy (filename+extra data+compressed data) */ local_header_filename_size = MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_FILENAME_LEN_OFS); local_header_extra_len = MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_EXTRA_LEN_OFS); local_header_comp_size = MZ_READ_LE32(pLocal_header + MZ_ZIP_LDH_COMPRESSED_SIZE_OFS); local_header_uncomp_size = MZ_READ_LE32(pLocal_header + MZ_ZIP_LDH_DECOMPRESSED_SIZE_OFS); src_archive_bytes_remaining = local_header_filename_size + local_header_extra_len + src_file_stat.m_comp_size; /* Try to find a zip64 extended information field */ if ((local_header_extra_len) && ((local_header_comp_size == MZ_UINT32_MAX) || (local_header_uncomp_size == MZ_UINT32_MAX))) { mz_zip_array file_data_array; const mz_uint8 *pExtra_data; mz_uint32 extra_size_remaining = local_header_extra_len; mz_zip_array_init(&file_data_array, 1); if (!mz_zip_array_resize(pZip, &file_data_array, local_header_extra_len, MZ_FALSE)) { return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); } if (pSource_zip->m_pRead(pSource_zip->m_pIO_opaque, src_file_stat.m_local_header_ofs + MZ_ZIP_LOCAL_DIR_HEADER_SIZE + local_header_filename_size, file_data_array.m_p, local_header_extra_len) != local_header_extra_len) { mz_zip_array_clear(pZip, &file_data_array); return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); } pExtra_data = (const mz_uint8 *)file_data_array.m_p; do { mz_uint32 field_id, field_data_size, field_total_size; if (extra_size_remaining < (sizeof(mz_uint16) * 2)) { mz_zip_array_clear(pZip, &file_data_array); return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); } field_id = MZ_READ_LE16(pExtra_data); field_data_size = MZ_READ_LE16(pExtra_data + sizeof(mz_uint16)); field_total_size = field_data_size + sizeof(mz_uint16) * 2; if (field_total_size > extra_size_remaining) { mz_zip_array_clear(pZip, &file_data_array); return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); } if (field_id == MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID) { const mz_uint8 *pSrc_field_data = pExtra_data + sizeof(mz_uint32); if (field_data_size < sizeof(mz_uint64) * 2) { mz_zip_array_clear(pZip, &file_data_array); return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); } local_header_uncomp_size = MZ_READ_LE64(pSrc_field_data); local_header_comp_size = MZ_READ_LE64(pSrc_field_data + sizeof(mz_uint64)); /* may be 0 if there's a descriptor */ found_zip64_ext_data_in_ldir = MZ_TRUE; break; } pExtra_data += field_total_size; extra_size_remaining -= field_total_size; } while (extra_size_remaining); mz_zip_array_clear(pZip, &file_data_array); } if (!pState->m_zip64) { /* Try to detect if the new archive will most likely wind up too big and bail early (+(sizeof(mz_uint32) * 4) is for the optional descriptor which could be present, +64 is a fudge factor). */ /* We also check when the archive is finalized so this doesn't need to be perfect. */ mz_uint64 approx_new_archive_size = cur_dst_file_ofs + num_alignment_padding_bytes + MZ_ZIP_LOCAL_DIR_HEADER_SIZE + src_archive_bytes_remaining + (sizeof(mz_uint32) * 4) + pState->m_central_dir.m_size + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + src_central_dir_following_data_size + MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE + 64; if (approx_new_archive_size >= MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); } /* Write dest archive padding */ if (!mz_zip_writer_write_zeros(pZip, cur_dst_file_ofs, num_alignment_padding_bytes)) return MZ_FALSE; cur_dst_file_ofs += num_alignment_padding_bytes; local_dir_header_ofs = cur_dst_file_ofs; if (pZip->m_file_offset_alignment) { MZ_ASSERT((local_dir_header_ofs & (pZip->m_file_offset_alignment - 1)) == 0); } /* The original zip's local header+ext block doesn't change, even with zip64, so we can just copy it over to the dest zip */ if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_dst_file_ofs, pLocal_header, MZ_ZIP_LOCAL_DIR_HEADER_SIZE) != MZ_ZIP_LOCAL_DIR_HEADER_SIZE) return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); cur_dst_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE; /* Copy over the source archive bytes to the dest archive, also ensure we have enough buf space to handle optional data descriptor */ if (NULL == (pBuf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, (size_t)MZ_MAX(32U, MZ_MIN((mz_uint64)MZ_ZIP_MAX_IO_BUF_SIZE, src_archive_bytes_remaining))))) return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); while (src_archive_bytes_remaining) { n = (mz_uint)MZ_MIN((mz_uint64)MZ_ZIP_MAX_IO_BUF_SIZE, src_archive_bytes_remaining); if (pSource_zip->m_pRead(pSource_zip->m_pIO_opaque, cur_src_file_ofs, pBuf, n) != n) { pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); } cur_src_file_ofs += n; if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_dst_file_ofs, pBuf, n) != n) { pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); } cur_dst_file_ofs += n; src_archive_bytes_remaining -= n; } /* Now deal with the optional data descriptor */ bit_flags = MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_BIT_FLAG_OFS); if (bit_flags & 8) { /* Copy data descriptor */ if ((pSource_zip->m_pState->m_zip64) || (found_zip64_ext_data_in_ldir)) { /* src is zip64, dest must be zip64 */ /* name uint32_t's */ /* id 1 (optional in zip64?) */ /* crc 1 */ /* comp_size 2 */ /* uncomp_size 2 */ if (pSource_zip->m_pRead(pSource_zip->m_pIO_opaque, cur_src_file_ofs, pBuf, (sizeof(mz_uint32) * 6)) != (sizeof(mz_uint32) * 6)) { pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); } n = sizeof(mz_uint32) * ((MZ_READ_LE32(pBuf) == MZ_ZIP_DATA_DESCRIPTOR_ID) ? 6 : 5); } else { /* src is NOT zip64 */ mz_bool has_id; if (pSource_zip->m_pRead(pSource_zip->m_pIO_opaque, cur_src_file_ofs, pBuf, sizeof(mz_uint32) * 4) != sizeof(mz_uint32) * 4) { pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); } has_id = (MZ_READ_LE32(pBuf) == MZ_ZIP_DATA_DESCRIPTOR_ID); if (pZip->m_pState->m_zip64) { /* dest is zip64, so upgrade the data descriptor */ const mz_uint8 *pSrc_descriptor = (const mz_uint8 *)pBuf + (has_id ? sizeof(mz_uint32) : 0); const mz_uint32 src_crc32 = MZ_READ_LE32(pSrc_descriptor); const mz_uint64 src_comp_size = MZ_READ_LE32(pSrc_descriptor + sizeof(mz_uint32)); const mz_uint64 src_uncomp_size = MZ_READ_LE32(pSrc_descriptor + 2*sizeof(mz_uint32)); mz_write_le32((mz_uint8 *)pBuf, MZ_ZIP_DATA_DESCRIPTOR_ID); mz_write_le32((mz_uint8 *)pBuf + sizeof(mz_uint32) * 1, src_crc32); mz_write_le64((mz_uint8 *)pBuf + sizeof(mz_uint32) * 2, src_comp_size); mz_write_le64((mz_uint8 *)pBuf + sizeof(mz_uint32) * 4, src_uncomp_size); n = sizeof(mz_uint32) * 6; } else { /* dest is NOT zip64, just copy it as-is */ n = sizeof(mz_uint32) * (has_id ? 4 : 3); } } if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_dst_file_ofs, pBuf, n) != n) { pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); } cur_src_file_ofs += n; cur_dst_file_ofs += n; } pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); /* Finally, add the new central dir header */ orig_central_dir_size = pState->m_central_dir.m_size; memcpy(new_central_header, pSrc_central_header, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE); if (pState->m_zip64) { /* This is the painful part: We need to write a new central dir header + ext block with updated zip64 fields, and ensure the old fields (if any) are not included. */ const mz_uint8 *pSrc_ext = pSrc_central_header + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + src_filename_len; mz_zip_array new_ext_block; mz_zip_array_init(&new_ext_block, sizeof(mz_uint8)); MZ_WRITE_LE32(new_central_header + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS, MZ_UINT32_MAX); MZ_WRITE_LE32(new_central_header + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS, MZ_UINT32_MAX); MZ_WRITE_LE32(new_central_header + MZ_ZIP_CDH_LOCAL_HEADER_OFS, MZ_UINT32_MAX); if (!mz_zip_writer_update_zip64_extension_block(&new_ext_block, pZip, pSrc_ext, src_ext_len, &src_file_stat.m_comp_size, &src_file_stat.m_uncomp_size, &local_dir_header_ofs, NULL)) { mz_zip_array_clear(pZip, &new_ext_block); return MZ_FALSE; } MZ_WRITE_LE16(new_central_header + MZ_ZIP_CDH_EXTRA_LEN_OFS, new_ext_block.m_size); if (!mz_zip_array_push_back(pZip, &pState->m_central_dir, new_central_header, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE)) { mz_zip_array_clear(pZip, &new_ext_block); return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); } if (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pSrc_central_header + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE, src_filename_len)) { mz_zip_array_clear(pZip, &new_ext_block); mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size, MZ_FALSE); return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); } if (!mz_zip_array_push_back(pZip, &pState->m_central_dir, new_ext_block.m_p, new_ext_block.m_size)) { mz_zip_array_clear(pZip, &new_ext_block); mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size, MZ_FALSE); return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); } if (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pSrc_central_header + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + src_filename_len + src_ext_len, src_comment_len)) { mz_zip_array_clear(pZip, &new_ext_block); mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size, MZ_FALSE); return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); } mz_zip_array_clear(pZip, &new_ext_block); } else { /* sanity checks */ if (cur_dst_file_ofs > MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); if (local_dir_header_ofs >= MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); MZ_WRITE_LE32(new_central_header + MZ_ZIP_CDH_LOCAL_HEADER_OFS, local_dir_header_ofs); if (!mz_zip_array_push_back(pZip, &pState->m_central_dir, new_central_header, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE)) return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); if (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pSrc_central_header + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE, src_central_dir_following_data_size)) { mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size, MZ_FALSE); return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); } } /* This shouldn't trigger unless we screwed up during the initial sanity checks */ if (pState->m_central_dir.m_size >= MZ_UINT32_MAX) { /* TODO: Support central dirs >= 32-bits in size */ mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size, MZ_FALSE); return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE); } n = (mz_uint32)orig_central_dir_size; if (!mz_zip_array_push_back(pZip, &pState->m_central_dir_offsets, &n, 1)) { mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size, MZ_FALSE); return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); } pZip->m_total_files++; pZip->m_archive_size = cur_dst_file_ofs; return MZ_TRUE; } mz_bool mz_zip_writer_finalize_archive(mz_zip_archive *pZip) { mz_zip_internal_state *pState; mz_uint64 central_dir_ofs, central_dir_size; mz_uint8 hdr[256]; if ((!pZip) || (!pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); pState = pZip->m_pState; if (pState->m_zip64) { if ((mz_uint64)pState->m_central_dir.m_size >= MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); } else { if ((pZip->m_total_files > MZ_UINT16_MAX) || ((pZip->m_archive_size + pState->m_central_dir.m_size + MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) > MZ_UINT32_MAX)) return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); } central_dir_ofs = 0; central_dir_size = 0; if (pZip->m_total_files) { /* Write central directory */ central_dir_ofs = pZip->m_archive_size; central_dir_size = pState->m_central_dir.m_size; pZip->m_central_directory_file_ofs = central_dir_ofs; if (pZip->m_pWrite(pZip->m_pIO_opaque, central_dir_ofs, pState->m_central_dir.m_p, (size_t)central_dir_size) != central_dir_size) return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); pZip->m_archive_size += central_dir_size; } if (pState->m_zip64) { /* Write zip64 end of central directory header */ mz_uint64 rel_ofs_to_zip64_ecdr = pZip->m_archive_size; MZ_CLEAR_ARR(hdr); MZ_WRITE_LE32(hdr + MZ_ZIP64_ECDH_SIG_OFS, MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIG); MZ_WRITE_LE64(hdr + MZ_ZIP64_ECDH_SIZE_OF_RECORD_OFS, MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE - sizeof(mz_uint32) - sizeof(mz_uint64)); MZ_WRITE_LE16(hdr + MZ_ZIP64_ECDH_VERSION_MADE_BY_OFS, 0x031E); /* TODO: always Unix */ MZ_WRITE_LE16(hdr + MZ_ZIP64_ECDH_VERSION_NEEDED_OFS, 0x002D); MZ_WRITE_LE64(hdr + MZ_ZIP64_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS, pZip->m_total_files); MZ_WRITE_LE64(hdr + MZ_ZIP64_ECDH_CDIR_TOTAL_ENTRIES_OFS, pZip->m_total_files); MZ_WRITE_LE64(hdr + MZ_ZIP64_ECDH_CDIR_SIZE_OFS, central_dir_size); MZ_WRITE_LE64(hdr + MZ_ZIP64_ECDH_CDIR_OFS_OFS, central_dir_ofs); if (pZip->m_pWrite(pZip->m_pIO_opaque, pZip->m_archive_size, hdr, MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE) != MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE) return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); pZip->m_archive_size += MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE; /* Write zip64 end of central directory locator */ MZ_CLEAR_ARR(hdr); MZ_WRITE_LE32(hdr + MZ_ZIP64_ECDL_SIG_OFS, MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIG); MZ_WRITE_LE64(hdr + MZ_ZIP64_ECDL_REL_OFS_TO_ZIP64_ECDR_OFS, rel_ofs_to_zip64_ecdr); MZ_WRITE_LE32(hdr + MZ_ZIP64_ECDL_TOTAL_NUMBER_OF_DISKS_OFS, 1); if (pZip->m_pWrite(pZip->m_pIO_opaque, pZip->m_archive_size, hdr, MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE) != MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE) return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); pZip->m_archive_size += MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE; } /* Write end of central directory record */ MZ_CLEAR_ARR(hdr); MZ_WRITE_LE32(hdr + MZ_ZIP_ECDH_SIG_OFS, MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG); MZ_WRITE_LE16(hdr + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS, MZ_MIN(MZ_UINT16_MAX, pZip->m_total_files)); MZ_WRITE_LE16(hdr + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS, MZ_MIN(MZ_UINT16_MAX, pZip->m_total_files)); MZ_WRITE_LE32(hdr + MZ_ZIP_ECDH_CDIR_SIZE_OFS, MZ_MIN(MZ_UINT32_MAX, central_dir_size)); MZ_WRITE_LE32(hdr + MZ_ZIP_ECDH_CDIR_OFS_OFS, MZ_MIN(MZ_UINT32_MAX, central_dir_ofs)); if (pZip->m_pWrite(pZip->m_pIO_opaque, pZip->m_archive_size, hdr, MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) != MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); #ifndef MINIZ_NO_STDIO if ((pState->m_pFile) && (MZ_FFLUSH(pState->m_pFile) == EOF)) return mz_zip_set_error(pZip, MZ_ZIP_FILE_CLOSE_FAILED); #endif /* #ifndef MINIZ_NO_STDIO */ pZip->m_archive_size += MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE; pZip->m_zip_mode = MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED; return MZ_TRUE; } mz_bool mz_zip_writer_finalize_heap_archive(mz_zip_archive *pZip, void **ppBuf, size_t *pSize) { if ((!ppBuf) || (!pSize)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); *ppBuf = NULL; *pSize = 0; if ((!pZip) || (!pZip->m_pState)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); if (pZip->m_pWrite != mz_zip_heap_write_func) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); if (!mz_zip_writer_finalize_archive(pZip)) return MZ_FALSE; *ppBuf = pZip->m_pState->m_pMem; *pSize = pZip->m_pState->m_mem_size; pZip->m_pState->m_pMem = NULL; pZip->m_pState->m_mem_size = pZip->m_pState->m_mem_capacity = 0; return MZ_TRUE; } mz_bool mz_zip_writer_end(mz_zip_archive *pZip) { return mz_zip_writer_end_internal(pZip, MZ_TRUE); } #ifndef MINIZ_NO_STDIO mz_bool mz_zip_add_mem_to_archive_file_in_place(const char *pZip_filename, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags) { return mz_zip_add_mem_to_archive_file_in_place_v2(pZip_filename, pArchive_name, pBuf, buf_size, pComment, comment_size, level_and_flags, NULL); } mz_bool mz_zip_add_mem_to_archive_file_in_place_v2(const char *pZip_filename, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags, mz_zip_error *pErr) { mz_bool status, created_new_archive = MZ_FALSE; mz_zip_archive zip_archive; struct MZ_FILE_STAT_STRUCT file_stat; mz_zip_error actual_err = MZ_ZIP_NO_ERROR; mz_zip_zero_struct(&zip_archive); if ((int)level_and_flags < 0) level_and_flags = MZ_DEFAULT_LEVEL; if ((!pZip_filename) || (!pArchive_name) || ((buf_size) && (!pBuf)) || ((comment_size) && (!pComment)) || ((level_and_flags & 0xF) > MZ_UBER_COMPRESSION)) { if (pErr) *pErr = MZ_ZIP_INVALID_PARAMETER; return MZ_FALSE; } if (!mz_zip_writer_validate_archive_name(pArchive_name)) { if (pErr) *pErr = MZ_ZIP_INVALID_FILENAME; return MZ_FALSE; } /* Important: The regular non-64 bit version of stat() can fail here if the file is very large, which could cause the archive to be overwritten. */ /* So be sure to compile with _LARGEFILE64_SOURCE 1 */ if (MZ_FILE_STAT(pZip_filename, &file_stat) != 0) { /* Create a new archive. */ if (!mz_zip_writer_init_file_v2(&zip_archive, pZip_filename, 0, level_and_flags)) { if (pErr) *pErr = zip_archive.m_last_error; return MZ_FALSE; } created_new_archive = MZ_TRUE; } else { /* Append to an existing archive. */ if (!mz_zip_reader_init_file_v2(&zip_archive, pZip_filename, level_and_flags | MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY, 0, 0)) { if (pErr) *pErr = zip_archive.m_last_error; return MZ_FALSE; } if (!mz_zip_writer_init_from_reader_v2(&zip_archive, pZip_filename, level_and_flags)) { if (pErr) *pErr = zip_archive.m_last_error; mz_zip_reader_end_internal(&zip_archive, MZ_FALSE); return MZ_FALSE; } } status = mz_zip_writer_add_mem_ex(&zip_archive, pArchive_name, pBuf, buf_size, pComment, comment_size, level_and_flags, 0, 0); actual_err = zip_archive.m_last_error; /* Always finalize, even if adding failed for some reason, so we have a valid central directory. (This may not always succeed, but we can try.) */ if (!mz_zip_writer_finalize_archive(&zip_archive)) { if (!actual_err) actual_err = zip_archive.m_last_error; status = MZ_FALSE; } if (!mz_zip_writer_end_internal(&zip_archive, status)) { if (!actual_err) actual_err = zip_archive.m_last_error; status = MZ_FALSE; } if ((!status) && (created_new_archive)) { /* It's a new archive and something went wrong, so just delete it. */ int ignoredStatus = MZ_DELETE_FILE(pZip_filename); (void)ignoredStatus; } if (pErr) *pErr = actual_err; return status; } void *mz_zip_extract_archive_file_to_heap_v2(const char *pZip_filename, const char *pArchive_name, const char *pComment, size_t *pSize, mz_uint flags, mz_zip_error *pErr) { mz_uint32 file_index; mz_zip_archive zip_archive; void *p = NULL; if (pSize) *pSize = 0; if ((!pZip_filename) || (!pArchive_name)) { if (pErr) *pErr = MZ_ZIP_INVALID_PARAMETER; return NULL; } mz_zip_zero_struct(&zip_archive); if (!mz_zip_reader_init_file_v2(&zip_archive, pZip_filename, flags | MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY, 0, 0)) { if (pErr) *pErr = zip_archive.m_last_error; return NULL; } if (mz_zip_reader_locate_file_v2(&zip_archive, pArchive_name, pComment, flags, &file_index)) { p = mz_zip_reader_extract_to_heap(&zip_archive, file_index, pSize, flags); } mz_zip_reader_end_internal(&zip_archive, p != NULL); if (pErr) *pErr = zip_archive.m_last_error; return p; } void *mz_zip_extract_archive_file_to_heap(const char *pZip_filename, const char *pArchive_name, size_t *pSize, mz_uint flags) { return mz_zip_extract_archive_file_to_heap_v2(pZip_filename, pArchive_name, NULL, pSize, flags, NULL); } #endif /* #ifndef MINIZ_NO_STDIO */ #endif /* #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS */ /* ------------------- Misc utils */ mz_zip_mode mz_zip_get_mode(mz_zip_archive *pZip) { return pZip ? pZip->m_zip_mode : MZ_ZIP_MODE_INVALID; } mz_zip_type mz_zip_get_type(mz_zip_archive *pZip) { return pZip ? pZip->m_zip_type : MZ_ZIP_TYPE_INVALID; } mz_zip_error mz_zip_set_last_error(mz_zip_archive *pZip, mz_zip_error err_num) { mz_zip_error prev_err; if (!pZip) return MZ_ZIP_INVALID_PARAMETER; prev_err = pZip->m_last_error; pZip->m_last_error = err_num; return prev_err; } mz_zip_error mz_zip_peek_last_error(mz_zip_archive *pZip) { if (!pZip) return MZ_ZIP_INVALID_PARAMETER; return pZip->m_last_error; } mz_zip_error mz_zip_clear_last_error(mz_zip_archive *pZip) { return mz_zip_set_last_error(pZip, MZ_ZIP_NO_ERROR); } mz_zip_error mz_zip_get_last_error(mz_zip_archive *pZip) { mz_zip_error prev_err; if (!pZip) return MZ_ZIP_INVALID_PARAMETER; prev_err = pZip->m_last_error; pZip->m_last_error = MZ_ZIP_NO_ERROR; return prev_err; } const char *mz_zip_get_error_string(mz_zip_error mz_err) { switch (mz_err) { case MZ_ZIP_NO_ERROR: return "no error"; case MZ_ZIP_UNDEFINED_ERROR: return "undefined error"; case MZ_ZIP_TOO_MANY_FILES: return "too many files"; case MZ_ZIP_FILE_TOO_LARGE: return "file too large"; case MZ_ZIP_UNSUPPORTED_METHOD: return "unsupported method"; case MZ_ZIP_UNSUPPORTED_ENCRYPTION: return "unsupported encryption"; case MZ_ZIP_UNSUPPORTED_FEATURE: return "unsupported feature"; case MZ_ZIP_FAILED_FINDING_CENTRAL_DIR: return "failed finding central directory"; case MZ_ZIP_NOT_AN_ARCHIVE: return "not a ZIP archive"; case MZ_ZIP_INVALID_HEADER_OR_CORRUPTED: return "invalid header or archive is corrupted"; case MZ_ZIP_UNSUPPORTED_MULTIDISK: return "unsupported multidisk archive"; case MZ_ZIP_DECOMPRESSION_FAILED: return "decompression failed or archive is corrupted"; case MZ_ZIP_COMPRESSION_FAILED: return "compression failed"; case MZ_ZIP_UNEXPECTED_DECOMPRESSED_SIZE: return "unexpected decompressed size"; case MZ_ZIP_CRC_CHECK_FAILED: return "CRC-32 check failed"; case MZ_ZIP_UNSUPPORTED_CDIR_SIZE: return "unsupported central directory size"; case MZ_ZIP_ALLOC_FAILED: return "allocation failed"; case MZ_ZIP_FILE_OPEN_FAILED: return "file open failed"; case MZ_ZIP_FILE_CREATE_FAILED: return "file create failed"; case MZ_ZIP_FILE_WRITE_FAILED: return "file write failed"; case MZ_ZIP_FILE_READ_FAILED: return "file read failed"; case MZ_ZIP_FILE_CLOSE_FAILED: return "file close failed"; case MZ_ZIP_FILE_SEEK_FAILED: return "file seek failed"; case MZ_ZIP_FILE_STAT_FAILED: return "file stat failed"; case MZ_ZIP_INVALID_PARAMETER: return "invalid parameter"; case MZ_ZIP_INVALID_FILENAME: return "invalid filename"; case MZ_ZIP_BUF_TOO_SMALL: return "buffer too small"; case MZ_ZIP_INTERNAL_ERROR: return "internal error"; case MZ_ZIP_FILE_NOT_FOUND: return "file not found"; case MZ_ZIP_ARCHIVE_TOO_LARGE: return "archive is too large"; case MZ_ZIP_VALIDATION_FAILED: return "validation failed"; case MZ_ZIP_WRITE_CALLBACK_FAILED: return "write callback failed"; case MZ_ZIP_TOTAL_ERRORS: return "total errors"; default: break; } return "unknown error"; } /* Note: Just because the archive is not zip64 doesn't necessarily mean it doesn't have Zip64 extended information extra field, argh. */ mz_bool mz_zip_is_zip64(mz_zip_archive *pZip) { if ((!pZip) || (!pZip->m_pState)) return MZ_FALSE; return pZip->m_pState->m_zip64; } size_t mz_zip_get_central_dir_size(mz_zip_archive *pZip) { if ((!pZip) || (!pZip->m_pState)) return 0; return pZip->m_pState->m_central_dir.m_size; } mz_uint mz_zip_reader_get_num_files(mz_zip_archive *pZip) { return pZip ? pZip->m_total_files : 0; } mz_uint64 mz_zip_get_archive_size(mz_zip_archive *pZip) { if (!pZip) return 0; return pZip->m_archive_size; } mz_uint64 mz_zip_get_archive_file_start_offset(mz_zip_archive *pZip) { if ((!pZip) || (!pZip->m_pState)) return 0; return pZip->m_pState->m_file_archive_start_ofs; } MZ_FILE *mz_zip_get_cfile(mz_zip_archive *pZip) { if ((!pZip) || (!pZip->m_pState)) return 0; return pZip->m_pState->m_pFile; } size_t mz_zip_read_archive_data(mz_zip_archive *pZip, mz_uint64 file_ofs, void *pBuf, size_t n) { if ((!pZip) || (!pZip->m_pState) || (!pBuf) || (!pZip->m_pRead)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); return pZip->m_pRead(pZip->m_pIO_opaque, file_ofs, pBuf, n); } mz_uint mz_zip_reader_get_filename(mz_zip_archive *pZip, mz_uint file_index, char *pFilename, mz_uint filename_buf_size) { mz_uint n; const mz_uint8 *p = mz_zip_get_cdh(pZip, file_index); if (!p) { if (filename_buf_size) pFilename[0] = '\0'; mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); return 0; } n = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS); if (filename_buf_size) { n = MZ_MIN(n, filename_buf_size - 1); memcpy(pFilename, p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE, n); pFilename[n] = '\0'; } return n + 1; } mz_bool mz_zip_reader_file_stat(mz_zip_archive *pZip, mz_uint file_index, mz_zip_archive_file_stat *pStat) { return mz_zip_file_stat_internal(pZip, file_index, mz_zip_get_cdh(pZip, file_index), pStat, NULL); } mz_bool mz_zip_end(mz_zip_archive *pZip) { if (!pZip) return MZ_FALSE; if (pZip->m_zip_mode == MZ_ZIP_MODE_READING) return mz_zip_reader_end(pZip); #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS else if ((pZip->m_zip_mode == MZ_ZIP_MODE_WRITING) || (pZip->m_zip_mode == MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED)) return mz_zip_writer_end(pZip); #endif return MZ_FALSE; } #ifdef __cplusplus } #endif #endif /*#ifndef MINIZ_NO_ARCHIVE_APIS*/ ================================================ FILE: libraries/miniz.h ================================================ #ifndef MINIZ_EXPORT #define MINIZ_EXPORT #endif /* miniz.c 3.0.0 - public domain deflate/inflate, zlib-subset, ZIP reading/writing/appending, PNG writing See "unlicense" statement at the end of this file. Rich Geldreich , last updated Oct. 13, 2013 Implements RFC 1950: http://www.ietf.org/rfc/rfc1950.txt and RFC 1951: http://www.ietf.org/rfc/rfc1951.txt Most API's defined in miniz.c are optional. For example, to disable the archive related functions just define MINIZ_NO_ARCHIVE_APIS, or to get rid of all stdio usage define MINIZ_NO_STDIO (see the list below for more macros). * Low-level Deflate/Inflate implementation notes: Compression: Use the "tdefl" API's. The compressor supports raw, static, and dynamic blocks, lazy or greedy parsing, match length filtering, RLE-only, and Huffman-only streams. It performs and compresses approximately as well as zlib. Decompression: Use the "tinfl" API's. The entire decompressor is implemented as a single function coroutine: see tinfl_decompress(). It supports decompression into a 32KB (or larger power of 2) wrapping buffer, or into a memory block large enough to hold the entire file. The low-level tdefl/tinfl API's do not make any use of dynamic memory allocation. * zlib-style API notes: miniz.c implements a fairly large subset of zlib. There's enough functionality present for it to be a drop-in zlib replacement in many apps: The z_stream struct, optional memory allocation callbacks deflateInit/deflateInit2/deflate/deflateReset/deflateEnd/deflateBound inflateInit/inflateInit2/inflate/inflateReset/inflateEnd compress, compress2, compressBound, uncompress CRC-32, Adler-32 - Using modern, minimal code size, CPU cache friendly routines. Supports raw deflate streams or standard zlib streams with adler-32 checking. Limitations: The callback API's are not implemented yet. No support for gzip headers or zlib static dictionaries. I've tried to closely emulate zlib's various flavors of stream flushing and return status codes, but there are no guarantees that miniz.c pulls this off perfectly. * PNG writing: See the tdefl_write_image_to_png_file_in_memory() function, originally written by Alex Evans. Supports 1-4 bytes/pixel images. * ZIP archive API notes: The ZIP archive API's where designed with simplicity and efficiency in mind, with just enough abstraction to get the job done with minimal fuss. There are simple API's to retrieve file information, read files from existing archives, create new archives, append new files to existing archives, or clone archive data from one archive to another. It supports archives located in memory or the heap, on disk (using stdio.h), or you can specify custom file read/write callbacks. - Archive reading: Just call this function to read a single file from a disk archive: void *mz_zip_extract_archive_file_to_heap(const char *pZip_filename, const char *pArchive_name, size_t *pSize, mz_uint zip_flags); For more complex cases, use the "mz_zip_reader" functions. Upon opening an archive, the entire central directory is located and read as-is into memory, and subsequent file access only occurs when reading individual files. - Archives file scanning: The simple way is to use this function to scan a loaded archive for a specific file: int mz_zip_reader_locate_file(mz_zip_archive *pZip, const char *pName, const char *pComment, mz_uint flags); The locate operation can optionally check file comments too, which (as one example) can be used to identify multiple versions of the same file in an archive. This function uses a simple linear search through the central directory, so it's not very fast. Alternately, you can iterate through all the files in an archive (using mz_zip_reader_get_num_files()) and retrieve detailed info on each file by calling mz_zip_reader_file_stat(). - Archive creation: Use the "mz_zip_writer" functions. The ZIP writer immediately writes compressed file data to disk and builds an exact image of the central directory in memory. The central directory image is written all at once at the end of the archive file when the archive is finalized. The archive writer can optionally align each file's local header and file data to any power of 2 alignment, which can be useful when the archive will be read from optical media. Also, the writer supports placing arbitrary data blobs at the very beginning of ZIP archives. Archives written using either feature are still readable by any ZIP tool. - Archive appending: The simple way to add a single file to an archive is to call this function: mz_bool mz_zip_add_mem_to_archive_file_in_place(const char *pZip_filename, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags); The archive will be created if it doesn't already exist, otherwise it'll be appended to. Note the appending is done in-place and is not an atomic operation, so if something goes wrong during the operation it's possible the archive could be left without a central directory (although the local file headers and file data will be fine, so the archive will be recoverable). For more complex archive modification scenarios: 1. The safest way is to use a mz_zip_reader to read the existing archive, cloning only those bits you want to preserve into a new archive using using the mz_zip_writer_add_from_zip_reader() function (which compiles the compressed file data as-is). When you're done, delete the old archive and rename the newly written archive, and you're done. This is safe but requires a bunch of temporary disk space or heap memory. 2. Or, you can convert an mz_zip_reader in-place to an mz_zip_writer using mz_zip_writer_init_from_reader(), append new files as needed, then finalize the archive which will write an updated central directory to the original archive. (This is basically what mz_zip_add_mem_to_archive_file_in_place() does.) There's a possibility that the archive's central directory could be lost with this method if anything goes wrong, though. - ZIP archive support limitations: No spanning support. Extraction functions can only handle unencrypted, stored or deflated files. Requires streams capable of seeking. * This is a header file library, like stb_image.c. To get only a header file, either cut and paste the below header, or create miniz.h, #define MINIZ_HEADER_FILE_ONLY, and then include miniz.c from it. * Important: For best perf. be sure to customize the below macros for your target platform: #define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 1 #define MINIZ_LITTLE_ENDIAN 1 #define MINIZ_HAS_64BIT_REGISTERS 1 * On platforms using glibc, Be sure to "#define _LARGEFILE64_SOURCE 1" before including miniz.c to ensure miniz uses the 64-bit variants: fopen64(), stat64(), etc. Otherwise you won't be able to process large files (i.e. 32-bit stat() fails for me on files > 0x7FFFFFFF bytes). */ #pragma once /* Defines to completely disable specific portions of miniz.c: If all macros here are defined the only functionality remaining will be CRC-32 and adler-32. */ /* Define MINIZ_NO_STDIO to disable all usage and any functions which rely on stdio for file I/O. */ /*#define MINIZ_NO_STDIO */ /* If MINIZ_NO_TIME is specified then the ZIP archive functions will not be able to get the current time, or */ /* get/set file times, and the C run-time funcs that get/set times won't be called. */ /* The current downside is the times written to your archives will be from 1979. */ /*#define MINIZ_NO_TIME */ /* Define MINIZ_NO_DEFLATE_APIS to disable all compression API's. */ /*#define MINIZ_NO_DEFLATE_APIS */ /* Define MINIZ_NO_INFLATE_APIS to disable all decompression API's. */ /*#define MINIZ_NO_INFLATE_APIS */ /* Define MINIZ_NO_ARCHIVE_APIS to disable all ZIP archive API's. */ /*#define MINIZ_NO_ARCHIVE_APIS */ /* Define MINIZ_NO_ARCHIVE_WRITING_APIS to disable all writing related ZIP archive API's. */ /*#define MINIZ_NO_ARCHIVE_WRITING_APIS */ /* Define MINIZ_NO_ZLIB_APIS to remove all ZLIB-style compression/decompression API's. */ /*#define MINIZ_NO_ZLIB_APIS */ /* Define MINIZ_NO_ZLIB_COMPATIBLE_NAME to disable zlib names, to prevent conflicts against stock zlib. */ /*#define MINIZ_NO_ZLIB_COMPATIBLE_NAMES */ /* Define MINIZ_NO_MALLOC to disable all calls to malloc, free, and realloc. Note if MINIZ_NO_MALLOC is defined then the user must always provide custom user alloc/free/realloc callbacks to the zlib and archive API's, and a few stand-alone helper API's which don't provide custom user functions (such as tdefl_compress_mem_to_heap() and tinfl_decompress_mem_to_heap()) won't work. */ /*#define MINIZ_NO_MALLOC */ #ifdef MINIZ_NO_INFLATE_APIS #define MINIZ_NO_ARCHIVE_APIS #endif #ifdef MINIZ_NO_DEFLATE_APIS #define MINIZ_NO_ARCHIVE_WRITING_APIS #endif #if defined(__TINYC__) && (defined(__linux) || defined(__linux__)) /* TODO: Work around "error: include file 'sys\utime.h' when compiling with tcc on Linux */ #define MINIZ_NO_TIME #endif #include #if !defined(MINIZ_NO_TIME) && !defined(MINIZ_NO_ARCHIVE_APIS) #include #endif #if defined(_M_IX86) || defined(_M_X64) || defined(__i386__) || defined(__i386) || defined(__i486__) || defined(__i486) || defined(i386) || defined(__ia64__) || defined(__x86_64__) /* MINIZ_X86_OR_X64_CPU is only used to help set the below macros. */ #define MINIZ_X86_OR_X64_CPU 1 #else #define MINIZ_X86_OR_X64_CPU 0 #endif /* Set MINIZ_LITTLE_ENDIAN only if not set */ #if !defined(MINIZ_LITTLE_ENDIAN) #if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) #if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) /* Set MINIZ_LITTLE_ENDIAN to 1 if the processor is little endian. */ #define MINIZ_LITTLE_ENDIAN 1 #else #define MINIZ_LITTLE_ENDIAN 0 #endif #else #if MINIZ_X86_OR_X64_CPU #define MINIZ_LITTLE_ENDIAN 1 #else #define MINIZ_LITTLE_ENDIAN 0 #endif #endif #endif /* Using unaligned loads and stores causes errors when using UBSan */ #if defined(__has_feature) #if __has_feature(undefined_behavior_sanitizer) #define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 0 #endif #endif /* Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES only if not set */ #if !defined(MINIZ_USE_UNALIGNED_LOADS_AND_STORES) #if MINIZ_X86_OR_X64_CPU /* Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES to 1 on CPU's that permit efficient integer loads and stores from unaligned addresses. */ #define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 0 #define MINIZ_UNALIGNED_USE_MEMCPY #else #define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 0 #endif #endif #if defined(_M_X64) || defined(_WIN64) || defined(__MINGW64__) || defined(_LP64) || defined(__LP64__) || defined(__ia64__) || defined(__x86_64__) /* Set MINIZ_HAS_64BIT_REGISTERS to 1 if operations on 64-bit integers are reasonably fast (and don't involve compiler generated calls to helper functions). */ #define MINIZ_HAS_64BIT_REGISTERS 1 #else #define MINIZ_HAS_64BIT_REGISTERS 0 #endif #ifdef __cplusplus extern "C" { #endif /* ------------------- zlib-style API Definitions. */ /* For more compatibility with zlib, miniz.c uses unsigned long for some parameters/struct members. Beware: mz_ulong can be either 32 or 64-bits! */ typedef unsigned long mz_ulong; /* mz_free() internally uses the MZ_FREE() macro (which by default calls free() unless you've modified the MZ_MALLOC macro) to release a block allocated from the heap. */ MINIZ_EXPORT void mz_free(void *p); #define MZ_ADLER32_INIT (1) /* mz_adler32() returns the initial adler-32 value to use when called with ptr==NULL. */ MINIZ_EXPORT mz_ulong mz_adler32(mz_ulong adler, const unsigned char *ptr, size_t buf_len); #define MZ_CRC32_INIT (0) /* mz_crc32() returns the initial CRC-32 value to use when called with ptr==NULL. */ MINIZ_EXPORT mz_ulong mz_crc32(mz_ulong crc, const unsigned char *ptr, size_t buf_len); /* Compression strategies. */ enum { MZ_DEFAULT_STRATEGY = 0, MZ_FILTERED = 1, MZ_HUFFMAN_ONLY = 2, MZ_RLE = 3, MZ_FIXED = 4 }; /* Method */ #define MZ_DEFLATED 8 /* Heap allocation callbacks. Note that mz_alloc_func parameter types purposely differ from zlib's: items/size is size_t, not unsigned long. */ typedef void *(*mz_alloc_func)(void *opaque, size_t items, size_t size); typedef void (*mz_free_func)(void *opaque, void *address); typedef void *(*mz_realloc_func)(void *opaque, void *address, size_t items, size_t size); /* Compression levels: 0-9 are the standard zlib-style levels, 10 is best possible compression (not zlib compatible, and may be very slow), MZ_DEFAULT_COMPRESSION=MZ_DEFAULT_LEVEL. */ enum { MZ_NO_COMPRESSION = 0, MZ_BEST_SPEED = 1, MZ_BEST_COMPRESSION = 9, MZ_UBER_COMPRESSION = 10, MZ_DEFAULT_LEVEL = 6, MZ_DEFAULT_COMPRESSION = -1 }; #define MZ_VERSION "11.0.2" #define MZ_VERNUM 0xB002 #define MZ_VER_MAJOR 11 #define MZ_VER_MINOR 2 #define MZ_VER_REVISION 0 #define MZ_VER_SUBREVISION 0 #ifndef MINIZ_NO_ZLIB_APIS /* Flush values. For typical usage you only need MZ_NO_FLUSH and MZ_FINISH. The other values are for advanced use (refer to the zlib docs). */ enum { MZ_NO_FLUSH = 0, MZ_PARTIAL_FLUSH = 1, MZ_SYNC_FLUSH = 2, MZ_FULL_FLUSH = 3, MZ_FINISH = 4, MZ_BLOCK = 5 }; /* Return status codes. MZ_PARAM_ERROR is non-standard. */ enum { MZ_OK = 0, MZ_STREAM_END = 1, MZ_NEED_DICT = 2, MZ_ERRNO = -1, MZ_STREAM_ERROR = -2, MZ_DATA_ERROR = -3, MZ_MEM_ERROR = -4, MZ_BUF_ERROR = -5, MZ_VERSION_ERROR = -6, MZ_PARAM_ERROR = -10000 }; /* Window bits */ #define MZ_DEFAULT_WINDOW_BITS 15 struct mz_internal_state; /* Compression/decompression stream struct. */ typedef struct mz_stream_s { const unsigned char *next_in; /* pointer to next byte to read */ unsigned int avail_in; /* number of bytes available at next_in */ mz_ulong total_in; /* total number of bytes consumed so far */ unsigned char *next_out; /* pointer to next byte to write */ unsigned int avail_out; /* number of bytes that can be written to next_out */ mz_ulong total_out; /* total number of bytes produced so far */ char *msg; /* error msg (unused) */ struct mz_internal_state *state; /* internal state, allocated by zalloc/zfree */ mz_alloc_func zalloc; /* optional heap allocation function (defaults to malloc) */ mz_free_func zfree; /* optional heap free function (defaults to free) */ void *opaque; /* heap alloc function user pointer */ int data_type; /* data_type (unused) */ mz_ulong adler; /* adler32 of the source or uncompressed data */ mz_ulong reserved; /* not used */ } mz_stream; typedef mz_stream *mz_streamp; /* Returns the version string of miniz.c. */ MINIZ_EXPORT const char *mz_version(void); #ifndef MINIZ_NO_DEFLATE_APIS /* mz_deflateInit() initializes a compressor with default options: */ /* Parameters: */ /* pStream must point to an initialized mz_stream struct. */ /* level must be between [MZ_NO_COMPRESSION, MZ_BEST_COMPRESSION]. */ /* level 1 enables a specially optimized compression function that's been optimized purely for performance, not ratio. */ /* (This special func. is currently only enabled when MINIZ_USE_UNALIGNED_LOADS_AND_STORES and MINIZ_LITTLE_ENDIAN are defined.) */ /* Return values: */ /* MZ_OK on success. */ /* MZ_STREAM_ERROR if the stream is bogus. */ /* MZ_PARAM_ERROR if the input parameters are bogus. */ /* MZ_MEM_ERROR on out of memory. */ MINIZ_EXPORT int mz_deflateInit(mz_streamp pStream, int level); /* mz_deflateInit2() is like mz_deflate(), except with more control: */ /* Additional parameters: */ /* method must be MZ_DEFLATED */ /* window_bits must be MZ_DEFAULT_WINDOW_BITS (to wrap the deflate stream with zlib header/adler-32 footer) or -MZ_DEFAULT_WINDOW_BITS (raw deflate/no header or footer) */ /* mem_level must be between [1, 9] (it's checked but ignored by miniz.c) */ MINIZ_EXPORT int mz_deflateInit2(mz_streamp pStream, int level, int method, int window_bits, int mem_level, int strategy); /* Quickly resets a compressor without having to reallocate anything. Same as calling mz_deflateEnd() followed by mz_deflateInit()/mz_deflateInit2(). */ MINIZ_EXPORT int mz_deflateReset(mz_streamp pStream); /* mz_deflate() compresses the input to output, consuming as much of the input and producing as much output as possible. */ /* Parameters: */ /* pStream is the stream to read from and write to. You must initialize/update the next_in, avail_in, next_out, and avail_out members. */ /* flush may be MZ_NO_FLUSH, MZ_PARTIAL_FLUSH/MZ_SYNC_FLUSH, MZ_FULL_FLUSH, or MZ_FINISH. */ /* Return values: */ /* MZ_OK on success (when flushing, or if more input is needed but not available, and/or there's more output to be written but the output buffer is full). */ /* MZ_STREAM_END if all input has been consumed and all output bytes have been written. Don't call mz_deflate() on the stream anymore. */ /* MZ_STREAM_ERROR if the stream is bogus. */ /* MZ_PARAM_ERROR if one of the parameters is invalid. */ /* MZ_BUF_ERROR if no forward progress is possible because the input and/or output buffers are empty. (Fill up the input buffer or free up some output space and try again.) */ MINIZ_EXPORT int mz_deflate(mz_streamp pStream, int flush); /* mz_deflateEnd() deinitializes a compressor: */ /* Return values: */ /* MZ_OK on success. */ /* MZ_STREAM_ERROR if the stream is bogus. */ MINIZ_EXPORT int mz_deflateEnd(mz_streamp pStream); /* mz_deflateBound() returns a (very) conservative upper bound on the amount of data that could be generated by deflate(), assuming flush is set to only MZ_NO_FLUSH or MZ_FINISH. */ MINIZ_EXPORT mz_ulong mz_deflateBound(mz_streamp pStream, mz_ulong source_len); /* Single-call compression functions mz_compress() and mz_compress2(): */ /* Returns MZ_OK on success, or one of the error codes from mz_deflate() on failure. */ MINIZ_EXPORT int mz_compress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len); MINIZ_EXPORT int mz_compress2(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len, int level); /* mz_compressBound() returns a (very) conservative upper bound on the amount of data that could be generated by calling mz_compress(). */ MINIZ_EXPORT mz_ulong mz_compressBound(mz_ulong source_len); #endif /*#ifndef MINIZ_NO_DEFLATE_APIS*/ #ifndef MINIZ_NO_INFLATE_APIS /* Initializes a decompressor. */ MINIZ_EXPORT int mz_inflateInit(mz_streamp pStream); /* mz_inflateInit2() is like mz_inflateInit() with an additional option that controls the window size and whether or not the stream has been wrapped with a zlib header/footer: */ /* window_bits must be MZ_DEFAULT_WINDOW_BITS (to parse zlib header/footer) or -MZ_DEFAULT_WINDOW_BITS (raw deflate). */ MINIZ_EXPORT int mz_inflateInit2(mz_streamp pStream, int window_bits); /* Quickly resets a compressor without having to reallocate anything. Same as calling mz_inflateEnd() followed by mz_inflateInit()/mz_inflateInit2(). */ MINIZ_EXPORT int mz_inflateReset(mz_streamp pStream); /* Decompresses the input stream to the output, consuming only as much of the input as needed, and writing as much to the output as possible. */ /* Parameters: */ /* pStream is the stream to read from and write to. You must initialize/update the next_in, avail_in, next_out, and avail_out members. */ /* flush may be MZ_NO_FLUSH, MZ_SYNC_FLUSH, or MZ_FINISH. */ /* On the first call, if flush is MZ_FINISH it's assumed the input and output buffers are both sized large enough to decompress the entire stream in a single call (this is slightly faster). */ /* MZ_FINISH implies that there are no more source bytes available beside what's already in the input buffer, and that the output buffer is large enough to hold the rest of the decompressed data. */ /* Return values: */ /* MZ_OK on success. Either more input is needed but not available, and/or there's more output to be written but the output buffer is full. */ /* MZ_STREAM_END if all needed input has been consumed and all output bytes have been written. For zlib streams, the adler-32 of the decompressed data has also been verified. */ /* MZ_STREAM_ERROR if the stream is bogus. */ /* MZ_DATA_ERROR if the deflate stream is invalid. */ /* MZ_PARAM_ERROR if one of the parameters is invalid. */ /* MZ_BUF_ERROR if no forward progress is possible because the input buffer is empty but the inflater needs more input to continue, or if the output buffer is not large enough. Call mz_inflate() again */ /* with more input data, or with more room in the output buffer (except when using single call decompression, described above). */ MINIZ_EXPORT int mz_inflate(mz_streamp pStream, int flush); /* Deinitializes a decompressor. */ MINIZ_EXPORT int mz_inflateEnd(mz_streamp pStream); /* Single-call decompression. */ /* Returns MZ_OK on success, or one of the error codes from mz_inflate() on failure. */ MINIZ_EXPORT int mz_uncompress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len); MINIZ_EXPORT int mz_uncompress2(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong *pSource_len); #endif /*#ifndef MINIZ_NO_INFLATE_APIS*/ /* Returns a string description of the specified error code, or NULL if the error code is invalid. */ MINIZ_EXPORT const char *mz_error(int err); /* Redefine zlib-compatible names to miniz equivalents, so miniz.c can be used as a drop-in replacement for the subset of zlib that miniz.c supports. */ /* Define MINIZ_NO_ZLIB_COMPATIBLE_NAMES to disable zlib-compatibility if you use zlib in the same project. */ #ifndef MINIZ_NO_ZLIB_COMPATIBLE_NAMES typedef unsigned char Byte; typedef unsigned int uInt; typedef mz_ulong uLong; typedef Byte Bytef; typedef uInt uIntf; typedef char charf; typedef int intf; typedef void *voidpf; typedef uLong uLongf; typedef void *voidp; typedef void *const voidpc; #define Z_NULL 0 #define Z_NO_FLUSH MZ_NO_FLUSH #define Z_PARTIAL_FLUSH MZ_PARTIAL_FLUSH #define Z_SYNC_FLUSH MZ_SYNC_FLUSH #define Z_FULL_FLUSH MZ_FULL_FLUSH #define Z_FINISH MZ_FINISH #define Z_BLOCK MZ_BLOCK #define Z_OK MZ_OK #define Z_STREAM_END MZ_STREAM_END #define Z_NEED_DICT MZ_NEED_DICT #define Z_ERRNO MZ_ERRNO #define Z_STREAM_ERROR MZ_STREAM_ERROR #define Z_DATA_ERROR MZ_DATA_ERROR #define Z_MEM_ERROR MZ_MEM_ERROR #define Z_BUF_ERROR MZ_BUF_ERROR #define Z_VERSION_ERROR MZ_VERSION_ERROR #define Z_PARAM_ERROR MZ_PARAM_ERROR #define Z_NO_COMPRESSION MZ_NO_COMPRESSION #define Z_BEST_SPEED MZ_BEST_SPEED #define Z_BEST_COMPRESSION MZ_BEST_COMPRESSION #define Z_DEFAULT_COMPRESSION MZ_DEFAULT_COMPRESSION #define Z_DEFAULT_STRATEGY MZ_DEFAULT_STRATEGY #define Z_FILTERED MZ_FILTERED #define Z_HUFFMAN_ONLY MZ_HUFFMAN_ONLY #define Z_RLE MZ_RLE #define Z_FIXED MZ_FIXED #define Z_DEFLATED MZ_DEFLATED #define Z_DEFAULT_WINDOW_BITS MZ_DEFAULT_WINDOW_BITS #define alloc_func mz_alloc_func #define free_func mz_free_func #define internal_state mz_internal_state #define z_stream mz_stream #ifndef MINIZ_NO_DEFLATE_APIS #define deflateInit mz_deflateInit #define deflateInit2 mz_deflateInit2 #define deflateReset mz_deflateReset #define deflate mz_deflate #define deflateEnd mz_deflateEnd #define deflateBound mz_deflateBound #define compress mz_compress #define compress2 mz_compress2 #define compressBound mz_compressBound #endif /*#ifndef MINIZ_NO_DEFLATE_APIS*/ #ifndef MINIZ_NO_INFLATE_APIS #define inflateInit mz_inflateInit #define inflateInit2 mz_inflateInit2 #define inflateReset mz_inflateReset #define inflate mz_inflate #define inflateEnd mz_inflateEnd #define uncompress mz_uncompress #define uncompress2 mz_uncompress2 #endif /*#ifndef MINIZ_NO_INFLATE_APIS*/ #define crc32 mz_crc32 #define adler32 mz_adler32 #define MAX_WBITS 15 #define MAX_MEM_LEVEL 9 #define zError mz_error #define ZLIB_VERSION MZ_VERSION #define ZLIB_VERNUM MZ_VERNUM #define ZLIB_VER_MAJOR MZ_VER_MAJOR #define ZLIB_VER_MINOR MZ_VER_MINOR #define ZLIB_VER_REVISION MZ_VER_REVISION #define ZLIB_VER_SUBREVISION MZ_VER_SUBREVISION #define zlibVersion mz_version #define zlib_version mz_version() #endif /* #ifndef MINIZ_NO_ZLIB_COMPATIBLE_NAMES */ #endif /* MINIZ_NO_ZLIB_APIS */ #ifdef __cplusplus } #endif #pragma once #include #include #include #include /* ------------------- Types and macros */ typedef unsigned char mz_uint8; typedef signed short mz_int16; typedef unsigned short mz_uint16; typedef unsigned int mz_uint32; typedef unsigned int mz_uint; typedef int64_t mz_int64; typedef uint64_t mz_uint64; typedef int mz_bool; #define MZ_FALSE (0) #define MZ_TRUE (1) /* Works around MSVC's spammy "warning C4127: conditional expression is constant" message. */ #ifdef _MSC_VER #define MZ_MACRO_END while (0, 0) #else #define MZ_MACRO_END while (0) #endif #ifdef MINIZ_NO_STDIO #define MZ_FILE void * #else #include #define MZ_FILE FILE #endif /* #ifdef MINIZ_NO_STDIO */ #ifdef MINIZ_NO_TIME typedef struct mz_dummy_time_t_tag { mz_uint32 m_dummy1; mz_uint32 m_dummy2; } mz_dummy_time_t; #define MZ_TIME_T mz_dummy_time_t #else #define MZ_TIME_T time_t #endif #define MZ_ASSERT(x) assert(x) #ifdef MINIZ_NO_MALLOC #define MZ_MALLOC(x) NULL #define MZ_FREE(x) (void)x, ((void)0) #define MZ_REALLOC(p, x) NULL #else #define MZ_MALLOC(x) malloc(x) #define MZ_FREE(x) free(x) #define MZ_REALLOC(p, x) realloc(p, x) #endif #define MZ_MAX(a, b) (((a) > (b)) ? (a) : (b)) #define MZ_MIN(a, b) (((a) < (b)) ? (a) : (b)) #define MZ_CLEAR_OBJ(obj) memset(&(obj), 0, sizeof(obj)) #define MZ_CLEAR_ARR(obj) memset((obj), 0, sizeof(obj)) #define MZ_CLEAR_PTR(obj) memset((obj), 0, sizeof(*obj)) #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN #define MZ_READ_LE16(p) *((const mz_uint16 *)(p)) #define MZ_READ_LE32(p) *((const mz_uint32 *)(p)) #else #define MZ_READ_LE16(p) ((mz_uint32)(((const mz_uint8 *)(p))[0]) | ((mz_uint32)(((const mz_uint8 *)(p))[1]) << 8U)) #define MZ_READ_LE32(p) ((mz_uint32)(((const mz_uint8 *)(p))[0]) | ((mz_uint32)(((const mz_uint8 *)(p))[1]) << 8U) | ((mz_uint32)(((const mz_uint8 *)(p))[2]) << 16U) | ((mz_uint32)(((const mz_uint8 *)(p))[3]) << 24U)) #endif #define MZ_READ_LE64(p) (((mz_uint64)MZ_READ_LE32(p)) | (((mz_uint64)MZ_READ_LE32((const mz_uint8 *)(p) + sizeof(mz_uint32))) << 32U)) #ifdef _MSC_VER #define MZ_FORCEINLINE __forceinline #elif defined(__GNUC__) #define MZ_FORCEINLINE __inline__ __attribute__((__always_inline__)) #else #define MZ_FORCEINLINE inline #endif #ifdef __cplusplus extern "C" { #endif extern MINIZ_EXPORT void *miniz_def_alloc_func(void *opaque, size_t items, size_t size); extern MINIZ_EXPORT void miniz_def_free_func(void *opaque, void *address); extern MINIZ_EXPORT void *miniz_def_realloc_func(void *opaque, void *address, size_t items, size_t size); #define MZ_UINT16_MAX (0xFFFFU) #define MZ_UINT32_MAX (0xFFFFFFFFU) #ifdef __cplusplus } #endif #pragma once #ifndef MINIZ_NO_DEFLATE_APIS #ifdef __cplusplus extern "C" { #endif /* ------------------- Low-level Compression API Definitions */ /* Set TDEFL_LESS_MEMORY to 1 to use less memory (compression will be slightly slower, and raw/dynamic blocks will be output more frequently). */ #define TDEFL_LESS_MEMORY 0 /* tdefl_init() compression flags logically OR'd together (low 12 bits contain the max. number of probes per dictionary search): */ /* TDEFL_DEFAULT_MAX_PROBES: The compressor defaults to 128 dictionary probes per dictionary search. 0=Huffman only, 1=Huffman+LZ (fastest/crap compression), 4095=Huffman+LZ (slowest/best compression). */ enum { TDEFL_HUFFMAN_ONLY = 0, TDEFL_DEFAULT_MAX_PROBES = 128, TDEFL_MAX_PROBES_MASK = 0xFFF }; /* TDEFL_WRITE_ZLIB_HEADER: If set, the compressor outputs a zlib header before the deflate data, and the Adler-32 of the source data at the end. Otherwise, you'll get raw deflate data. */ /* TDEFL_COMPUTE_ADLER32: Always compute the adler-32 of the input data (even when not writing zlib headers). */ /* TDEFL_GREEDY_PARSING_FLAG: Set to use faster greedy parsing, instead of more efficient lazy parsing. */ /* TDEFL_NONDETERMINISTIC_PARSING_FLAG: Enable to decrease the compressor's initialization time to the minimum, but the output may vary from run to run given the same input (depending on the contents of memory). */ /* TDEFL_RLE_MATCHES: Only look for RLE matches (matches with a distance of 1) */ /* TDEFL_FILTER_MATCHES: Discards matches <= 5 chars if enabled. */ /* TDEFL_FORCE_ALL_STATIC_BLOCKS: Disable usage of optimized Huffman tables. */ /* TDEFL_FORCE_ALL_RAW_BLOCKS: Only use raw (uncompressed) deflate blocks. */ /* The low 12 bits are reserved to control the max # of hash probes per dictionary lookup (see TDEFL_MAX_PROBES_MASK). */ enum { TDEFL_WRITE_ZLIB_HEADER = 0x01000, TDEFL_COMPUTE_ADLER32 = 0x02000, TDEFL_GREEDY_PARSING_FLAG = 0x04000, TDEFL_NONDETERMINISTIC_PARSING_FLAG = 0x08000, TDEFL_RLE_MATCHES = 0x10000, TDEFL_FILTER_MATCHES = 0x20000, TDEFL_FORCE_ALL_STATIC_BLOCKS = 0x40000, TDEFL_FORCE_ALL_RAW_BLOCKS = 0x80000 }; /* High level compression functions: */ /* tdefl_compress_mem_to_heap() compresses a block in memory to a heap block allocated via malloc(). */ /* On entry: */ /* pSrc_buf, src_buf_len: Pointer and size of source block to compress. */ /* flags: The max match finder probes (default is 128) logically OR'd against the above flags. Higher probes are slower but improve compression. */ /* On return: */ /* Function returns a pointer to the compressed data, or NULL on failure. */ /* *pOut_len will be set to the compressed data's size, which could be larger than src_buf_len on uncompressible data. */ /* The caller must free() the returned block when it's no longer needed. */ MINIZ_EXPORT void *tdefl_compress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags); /* tdefl_compress_mem_to_mem() compresses a block in memory to another block in memory. */ /* Returns 0 on failure. */ MINIZ_EXPORT size_t tdefl_compress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags); /* Compresses an image to a compressed PNG file in memory. */ /* On entry: */ /* pImage, w, h, and num_chans describe the image to compress. num_chans may be 1, 2, 3, or 4. */ /* The image pitch in bytes per scanline will be w*num_chans. The leftmost pixel on the top scanline is stored first in memory. */ /* level may range from [0,10], use MZ_NO_COMPRESSION, MZ_BEST_SPEED, MZ_BEST_COMPRESSION, etc. or a decent default is MZ_DEFAULT_LEVEL */ /* If flip is true, the image will be flipped on the Y axis (useful for OpenGL apps). */ /* On return: */ /* Function returns a pointer to the compressed data, or NULL on failure. */ /* *pLen_out will be set to the size of the PNG image file. */ /* The caller must mz_free() the returned heap block (which will typically be larger than *pLen_out) when it's no longer needed. */ MINIZ_EXPORT void *tdefl_write_image_to_png_file_in_memory_ex(const void *pImage, int w, int h, int num_chans, size_t *pLen_out, mz_uint level, mz_bool flip); MINIZ_EXPORT void *tdefl_write_image_to_png_file_in_memory(const void *pImage, int w, int h, int num_chans, size_t *pLen_out); /* Output stream interface. The compressor uses this interface to write compressed data. It'll typically be called TDEFL_OUT_BUF_SIZE at a time. */ typedef mz_bool (*tdefl_put_buf_func_ptr)(const void *pBuf, int len, void *pUser); /* tdefl_compress_mem_to_output() compresses a block to an output stream. The above helpers use this function internally. */ MINIZ_EXPORT mz_bool tdefl_compress_mem_to_output(const void *pBuf, size_t buf_len, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags); enum { TDEFL_MAX_HUFF_TABLES = 3, TDEFL_MAX_HUFF_SYMBOLS_0 = 288, TDEFL_MAX_HUFF_SYMBOLS_1 = 32, TDEFL_MAX_HUFF_SYMBOLS_2 = 19, TDEFL_LZ_DICT_SIZE = 32768, TDEFL_LZ_DICT_SIZE_MASK = TDEFL_LZ_DICT_SIZE - 1, TDEFL_MIN_MATCH_LEN = 3, TDEFL_MAX_MATCH_LEN = 258 }; /* TDEFL_OUT_BUF_SIZE MUST be large enough to hold a single entire compressed output block (using static/fixed Huffman codes). */ #if TDEFL_LESS_MEMORY enum { TDEFL_LZ_CODE_BUF_SIZE = 24 * 1024, TDEFL_OUT_BUF_SIZE = (TDEFL_LZ_CODE_BUF_SIZE * 13) / 10, TDEFL_MAX_HUFF_SYMBOLS = 288, TDEFL_LZ_HASH_BITS = 12, TDEFL_LEVEL1_HASH_SIZE_MASK = 4095, TDEFL_LZ_HASH_SHIFT = (TDEFL_LZ_HASH_BITS + 2) / 3, TDEFL_LZ_HASH_SIZE = 1 << TDEFL_LZ_HASH_BITS }; #else enum { TDEFL_LZ_CODE_BUF_SIZE = 64 * 1024, TDEFL_OUT_BUF_SIZE = (TDEFL_LZ_CODE_BUF_SIZE * 13) / 10, TDEFL_MAX_HUFF_SYMBOLS = 288, TDEFL_LZ_HASH_BITS = 15, TDEFL_LEVEL1_HASH_SIZE_MASK = 4095, TDEFL_LZ_HASH_SHIFT = (TDEFL_LZ_HASH_BITS + 2) / 3, TDEFL_LZ_HASH_SIZE = 1 << TDEFL_LZ_HASH_BITS }; #endif /* The low-level tdefl functions below may be used directly if the above helper functions aren't flexible enough. The low-level functions don't make any heap allocations, unlike the above helper functions. */ typedef enum { TDEFL_STATUS_BAD_PARAM = -2, TDEFL_STATUS_PUT_BUF_FAILED = -1, TDEFL_STATUS_OKAY = 0, TDEFL_STATUS_DONE = 1 } tdefl_status; /* Must map to MZ_NO_FLUSH, MZ_SYNC_FLUSH, etc. enums */ typedef enum { TDEFL_NO_FLUSH = 0, TDEFL_SYNC_FLUSH = 2, TDEFL_FULL_FLUSH = 3, TDEFL_FINISH = 4 } tdefl_flush; /* tdefl's compression state structure. */ typedef struct { tdefl_put_buf_func_ptr m_pPut_buf_func; void *m_pPut_buf_user; mz_uint m_flags, m_max_probes[2]; int m_greedy_parsing; mz_uint m_adler32, m_lookahead_pos, m_lookahead_size, m_dict_size; mz_uint8 *m_pLZ_code_buf, *m_pLZ_flags, *m_pOutput_buf, *m_pOutput_buf_end; mz_uint m_num_flags_left, m_total_lz_bytes, m_lz_code_buf_dict_pos, m_bits_in, m_bit_buffer; mz_uint m_saved_match_dist, m_saved_match_len, m_saved_lit, m_output_flush_ofs, m_output_flush_remaining, m_finished, m_block_index, m_wants_to_finish; tdefl_status m_prev_return_status; const void *m_pIn_buf; void *m_pOut_buf; size_t *m_pIn_buf_size, *m_pOut_buf_size; tdefl_flush m_flush; const mz_uint8 *m_pSrc; size_t m_src_buf_left, m_out_buf_ofs; mz_uint8 m_dict[TDEFL_LZ_DICT_SIZE + TDEFL_MAX_MATCH_LEN - 1]; mz_uint16 m_huff_count[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS]; mz_uint16 m_huff_codes[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS]; mz_uint8 m_huff_code_sizes[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS]; mz_uint8 m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE]; mz_uint16 m_next[TDEFL_LZ_DICT_SIZE]; mz_uint16 m_hash[TDEFL_LZ_HASH_SIZE]; mz_uint8 m_output_buf[TDEFL_OUT_BUF_SIZE]; } tdefl_compressor; /* Initializes the compressor. */ /* There is no corresponding deinit() function because the tdefl API's do not dynamically allocate memory. */ /* pBut_buf_func: If NULL, output data will be supplied to the specified callback. In this case, the user should call the tdefl_compress_buffer() API for compression. */ /* If pBut_buf_func is NULL the user should always call the tdefl_compress() API. */ /* flags: See the above enums (TDEFL_HUFFMAN_ONLY, TDEFL_WRITE_ZLIB_HEADER, etc.) */ MINIZ_EXPORT tdefl_status tdefl_init(tdefl_compressor *d, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags); /* Compresses a block of data, consuming as much of the specified input buffer as possible, and writing as much compressed data to the specified output buffer as possible. */ MINIZ_EXPORT tdefl_status tdefl_compress(tdefl_compressor *d, const void *pIn_buf, size_t *pIn_buf_size, void *pOut_buf, size_t *pOut_buf_size, tdefl_flush flush); /* tdefl_compress_buffer() is only usable when the tdefl_init() is called with a non-NULL tdefl_put_buf_func_ptr. */ /* tdefl_compress_buffer() always consumes the entire input buffer. */ MINIZ_EXPORT tdefl_status tdefl_compress_buffer(tdefl_compressor *d, const void *pIn_buf, size_t in_buf_size, tdefl_flush flush); MINIZ_EXPORT tdefl_status tdefl_get_prev_return_status(tdefl_compressor *d); MINIZ_EXPORT mz_uint32 tdefl_get_adler32(tdefl_compressor *d); /* Create tdefl_compress() flags given zlib-style compression parameters. */ /* level may range from [0,10] (where 10 is absolute max compression, but may be much slower on some files) */ /* window_bits may be -15 (raw deflate) or 15 (zlib) */ /* strategy may be either MZ_DEFAULT_STRATEGY, MZ_FILTERED, MZ_HUFFMAN_ONLY, MZ_RLE, or MZ_FIXED */ MINIZ_EXPORT mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits, int strategy); #ifndef MINIZ_NO_MALLOC /* Allocate the tdefl_compressor structure in C so that */ /* non-C language bindings to tdefl_ API don't need to worry about */ /* structure size and allocation mechanism. */ MINIZ_EXPORT tdefl_compressor *tdefl_compressor_alloc(void); MINIZ_EXPORT void tdefl_compressor_free(tdefl_compressor *pComp); #endif #ifdef __cplusplus } #endif #endif /*#ifndef MINIZ_NO_DEFLATE_APIS*/ #pragma once /* ------------------- Low-level Decompression API Definitions */ #ifndef MINIZ_NO_INFLATE_APIS #ifdef __cplusplus extern "C" { #endif /* Decompression flags used by tinfl_decompress(). */ /* TINFL_FLAG_PARSE_ZLIB_HEADER: If set, the input has a valid zlib header and ends with an adler32 checksum (it's a valid zlib stream). Otherwise, the input is a raw deflate stream. */ /* TINFL_FLAG_HAS_MORE_INPUT: If set, there are more input bytes available beyond the end of the supplied input buffer. If clear, the input buffer contains all remaining input. */ /* TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF: If set, the output buffer is large enough to hold the entire decompressed stream. If clear, the output buffer is at least the size of the dictionary (typically 32KB). */ /* TINFL_FLAG_COMPUTE_ADLER32: Force adler-32 checksum computation of the decompressed bytes. */ enum { TINFL_FLAG_PARSE_ZLIB_HEADER = 1, TINFL_FLAG_HAS_MORE_INPUT = 2, TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF = 4, TINFL_FLAG_COMPUTE_ADLER32 = 8 }; /* High level decompression functions: */ /* tinfl_decompress_mem_to_heap() decompresses a block in memory to a heap block allocated via malloc(). */ /* On entry: */ /* pSrc_buf, src_buf_len: Pointer and size of the Deflate or zlib source data to decompress. */ /* On return: */ /* Function returns a pointer to the decompressed data, or NULL on failure. */ /* *pOut_len will be set to the decompressed data's size, which could be larger than src_buf_len on uncompressible data. */ /* The caller must call mz_free() on the returned block when it's no longer needed. */ MINIZ_EXPORT void *tinfl_decompress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags); /* tinfl_decompress_mem_to_mem() decompresses a block in memory to another block in memory. */ /* Returns TINFL_DECOMPRESS_MEM_TO_MEM_FAILED on failure, or the number of bytes written on success. */ #define TINFL_DECOMPRESS_MEM_TO_MEM_FAILED ((size_t)(-1)) MINIZ_EXPORT size_t tinfl_decompress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags); /* tinfl_decompress_mem_to_callback() decompresses a block in memory to an internal 32KB buffer, and a user provided callback function will be called to flush the buffer. */ /* Returns 1 on success or 0 on failure. */ typedef int (*tinfl_put_buf_func_ptr)(const void *pBuf, int len, void *pUser); MINIZ_EXPORT int tinfl_decompress_mem_to_callback(const void *pIn_buf, size_t *pIn_buf_size, tinfl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags); struct tinfl_decompressor_tag; typedef struct tinfl_decompressor_tag tinfl_decompressor; #ifndef MINIZ_NO_MALLOC /* Allocate the tinfl_decompressor structure in C so that */ /* non-C language bindings to tinfl_ API don't need to worry about */ /* structure size and allocation mechanism. */ MINIZ_EXPORT tinfl_decompressor *tinfl_decompressor_alloc(void); MINIZ_EXPORT void tinfl_decompressor_free(tinfl_decompressor *pDecomp); #endif /* Max size of LZ dictionary. */ #define TINFL_LZ_DICT_SIZE 32768 /* Return status. */ typedef enum { /* This flags indicates the inflator needs 1 or more input bytes to make forward progress, but the caller is indicating that no more are available. The compressed data */ /* is probably corrupted. If you call the inflator again with more bytes it'll try to continue processing the input but this is a BAD sign (either the data is corrupted or you called it incorrectly). */ /* If you call it again with no input you'll just get TINFL_STATUS_FAILED_CANNOT_MAKE_PROGRESS again. */ TINFL_STATUS_FAILED_CANNOT_MAKE_PROGRESS = -4, /* This flag indicates that one or more of the input parameters was obviously bogus. (You can try calling it again, but if you get this error the calling code is wrong.) */ TINFL_STATUS_BAD_PARAM = -3, /* This flags indicate the inflator is finished but the adler32 check of the uncompressed data didn't match. If you call it again it'll return TINFL_STATUS_DONE. */ TINFL_STATUS_ADLER32_MISMATCH = -2, /* This flags indicate the inflator has somehow failed (bad code, corrupted input, etc.). If you call it again without resetting via tinfl_init() it it'll just keep on returning the same status failure code. */ TINFL_STATUS_FAILED = -1, /* Any status code less than TINFL_STATUS_DONE must indicate a failure. */ /* This flag indicates the inflator has returned every byte of uncompressed data that it can, has consumed every byte that it needed, has successfully reached the end of the deflate stream, and */ /* if zlib headers and adler32 checking enabled that it has successfully checked the uncompressed data's adler32. If you call it again you'll just get TINFL_STATUS_DONE over and over again. */ TINFL_STATUS_DONE = 0, /* This flag indicates the inflator MUST have more input data (even 1 byte) before it can make any more forward progress, or you need to clear the TINFL_FLAG_HAS_MORE_INPUT */ /* flag on the next call if you don't have any more source data. If the source data was somehow corrupted it's also possible (but unlikely) for the inflator to keep on demanding input to */ /* proceed, so be sure to properly set the TINFL_FLAG_HAS_MORE_INPUT flag. */ TINFL_STATUS_NEEDS_MORE_INPUT = 1, /* This flag indicates the inflator definitely has 1 or more bytes of uncompressed data available, but it cannot write this data into the output buffer. */ /* Note if the source compressed data was corrupted it's possible for the inflator to return a lot of uncompressed data to the caller. I've been assuming you know how much uncompressed data to expect */ /* (either exact or worst case) and will stop calling the inflator and fail after receiving too much. In pure streaming scenarios where you have no idea how many bytes to expect this may not be possible */ /* so I may need to add some code to address this. */ TINFL_STATUS_HAS_MORE_OUTPUT = 2 } tinfl_status; /* Initializes the decompressor to its initial state. */ #define tinfl_init(r) \ do \ { \ (r)->m_state = 0; \ } \ MZ_MACRO_END #define tinfl_get_adler32(r) (r)->m_check_adler32 /* Main low-level decompressor coroutine function. This is the only function actually needed for decompression. All the other functions are just high-level helpers for improved usability. */ /* This is a universal API, i.e. it can be used as a building block to build any desired higher level decompression API. In the limit case, it can be called once per every byte input or output. */ MINIZ_EXPORT tinfl_status tinfl_decompress(tinfl_decompressor *r, const mz_uint8 *pIn_buf_next, size_t *pIn_buf_size, mz_uint8 *pOut_buf_start, mz_uint8 *pOut_buf_next, size_t *pOut_buf_size, const mz_uint32 decomp_flags); /* Internal/private bits follow. */ enum { TINFL_MAX_HUFF_TABLES = 3, TINFL_MAX_HUFF_SYMBOLS_0 = 288, TINFL_MAX_HUFF_SYMBOLS_1 = 32, TINFL_MAX_HUFF_SYMBOLS_2 = 19, TINFL_FAST_LOOKUP_BITS = 10, TINFL_FAST_LOOKUP_SIZE = 1 << TINFL_FAST_LOOKUP_BITS }; #if MINIZ_HAS_64BIT_REGISTERS #define TINFL_USE_64BIT_BITBUF 1 #else #define TINFL_USE_64BIT_BITBUF 0 #endif #if TINFL_USE_64BIT_BITBUF typedef mz_uint64 tinfl_bit_buf_t; #define TINFL_BITBUF_SIZE (64) #else typedef mz_uint32 tinfl_bit_buf_t; #define TINFL_BITBUF_SIZE (32) #endif struct tinfl_decompressor_tag { mz_uint32 m_state, m_num_bits, m_zhdr0, m_zhdr1, m_z_adler32, m_final, m_type, m_check_adler32, m_dist, m_counter, m_num_extra, m_table_sizes[TINFL_MAX_HUFF_TABLES]; tinfl_bit_buf_t m_bit_buf; size_t m_dist_from_out_buf_start; mz_int16 m_look_up[TINFL_MAX_HUFF_TABLES][TINFL_FAST_LOOKUP_SIZE]; mz_int16 m_tree_0[TINFL_MAX_HUFF_SYMBOLS_0 * 2]; mz_int16 m_tree_1[TINFL_MAX_HUFF_SYMBOLS_1 * 2]; mz_int16 m_tree_2[TINFL_MAX_HUFF_SYMBOLS_2 * 2]; mz_uint8 m_code_size_0[TINFL_MAX_HUFF_SYMBOLS_0]; mz_uint8 m_code_size_1[TINFL_MAX_HUFF_SYMBOLS_1]; mz_uint8 m_code_size_2[TINFL_MAX_HUFF_SYMBOLS_2]; mz_uint8 m_raw_header[4], m_len_codes[TINFL_MAX_HUFF_SYMBOLS_0 + TINFL_MAX_HUFF_SYMBOLS_1 + 137]; }; #ifdef __cplusplus } #endif #endif /*#ifndef MINIZ_NO_INFLATE_APIS*/ #pragma once /* ------------------- ZIP archive reading/writing */ #ifndef MINIZ_NO_ARCHIVE_APIS #ifdef __cplusplus extern "C" { #endif enum { /* Note: These enums can be reduced as needed to save memory or stack space - they are pretty conservative. */ MZ_ZIP_MAX_IO_BUF_SIZE = 64 * 1024, MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE = 512, MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE = 512 }; typedef struct { /* Central directory file index. */ mz_uint32 m_file_index; /* Byte offset of this entry in the archive's central directory. Note we currently only support up to UINT_MAX or less bytes in the central dir. */ mz_uint64 m_central_dir_ofs; /* These fields are copied directly from the zip's central dir. */ mz_uint16 m_version_made_by; mz_uint16 m_version_needed; mz_uint16 m_bit_flag; mz_uint16 m_method; /* CRC-32 of uncompressed data. */ mz_uint32 m_crc32; /* File's compressed size. */ mz_uint64 m_comp_size; /* File's uncompressed size. Note, I've seen some old archives where directory entries had 512 bytes for their uncompressed sizes, but when you try to unpack them you actually get 0 bytes. */ mz_uint64 m_uncomp_size; /* Zip internal and external file attributes. */ mz_uint16 m_internal_attr; mz_uint32 m_external_attr; /* Entry's local header file offset in bytes. */ mz_uint64 m_local_header_ofs; /* Size of comment in bytes. */ mz_uint32 m_comment_size; /* MZ_TRUE if the entry appears to be a directory. */ mz_bool m_is_directory; /* MZ_TRUE if the entry uses encryption/strong encryption (which miniz_zip doesn't support) */ mz_bool m_is_encrypted; /* MZ_TRUE if the file is not encrypted, a patch file, and if it uses a compression method we support. */ mz_bool m_is_supported; /* Filename. If string ends in '/' it's a subdirectory entry. */ /* Guaranteed to be zero terminated, may be truncated to fit. */ char m_filename[MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE]; /* Comment field. */ /* Guaranteed to be zero terminated, may be truncated to fit. */ char m_comment[MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE]; #ifdef MINIZ_NO_TIME MZ_TIME_T m_padding; #else MZ_TIME_T m_time; #endif } mz_zip_archive_file_stat; typedef size_t (*mz_file_read_func)(void *pOpaque, mz_uint64 file_ofs, void *pBuf, size_t n); typedef size_t (*mz_file_write_func)(void *pOpaque, mz_uint64 file_ofs, const void *pBuf, size_t n); typedef mz_bool (*mz_file_needs_keepalive)(void *pOpaque); struct mz_zip_internal_state_tag; typedef struct mz_zip_internal_state_tag mz_zip_internal_state; typedef enum { MZ_ZIP_MODE_INVALID = 0, MZ_ZIP_MODE_READING = 1, MZ_ZIP_MODE_WRITING = 2, MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED = 3 } mz_zip_mode; typedef enum { MZ_ZIP_FLAG_CASE_SENSITIVE = 0x0100, MZ_ZIP_FLAG_IGNORE_PATH = 0x0200, MZ_ZIP_FLAG_COMPRESSED_DATA = 0x0400, MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY = 0x0800, MZ_ZIP_FLAG_VALIDATE_LOCATE_FILE_FLAG = 0x1000, /* if enabled, mz_zip_reader_locate_file() will be called on each file as its validated to ensure the func finds the file in the central dir (intended for testing) */ MZ_ZIP_FLAG_VALIDATE_HEADERS_ONLY = 0x2000, /* validate the local headers, but don't decompress the entire file and check the crc32 */ MZ_ZIP_FLAG_WRITE_ZIP64 = 0x4000, /* always use the zip64 file format, instead of the original zip file format with automatic switch to zip64. Use as flags parameter with mz_zip_writer_init*_v2 */ MZ_ZIP_FLAG_WRITE_ALLOW_READING = 0x8000, MZ_ZIP_FLAG_ASCII_FILENAME = 0x10000, /*After adding a compressed file, seek back to local file header and set the correct sizes*/ MZ_ZIP_FLAG_WRITE_HEADER_SET_SIZE = 0x20000 } mz_zip_flags; typedef enum { MZ_ZIP_TYPE_INVALID = 0, MZ_ZIP_TYPE_USER, MZ_ZIP_TYPE_MEMORY, MZ_ZIP_TYPE_HEAP, MZ_ZIP_TYPE_FILE, MZ_ZIP_TYPE_CFILE, MZ_ZIP_TOTAL_TYPES } mz_zip_type; /* miniz error codes. Be sure to update mz_zip_get_error_string() if you add or modify this enum. */ typedef enum { MZ_ZIP_NO_ERROR = 0, MZ_ZIP_UNDEFINED_ERROR, MZ_ZIP_TOO_MANY_FILES, MZ_ZIP_FILE_TOO_LARGE, MZ_ZIP_UNSUPPORTED_METHOD, MZ_ZIP_UNSUPPORTED_ENCRYPTION, MZ_ZIP_UNSUPPORTED_FEATURE, MZ_ZIP_FAILED_FINDING_CENTRAL_DIR, MZ_ZIP_NOT_AN_ARCHIVE, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED, MZ_ZIP_UNSUPPORTED_MULTIDISK, MZ_ZIP_DECOMPRESSION_FAILED, MZ_ZIP_COMPRESSION_FAILED, MZ_ZIP_UNEXPECTED_DECOMPRESSED_SIZE, MZ_ZIP_CRC_CHECK_FAILED, MZ_ZIP_UNSUPPORTED_CDIR_SIZE, MZ_ZIP_ALLOC_FAILED, MZ_ZIP_FILE_OPEN_FAILED, MZ_ZIP_FILE_CREATE_FAILED, MZ_ZIP_FILE_WRITE_FAILED, MZ_ZIP_FILE_READ_FAILED, MZ_ZIP_FILE_CLOSE_FAILED, MZ_ZIP_FILE_SEEK_FAILED, MZ_ZIP_FILE_STAT_FAILED, MZ_ZIP_INVALID_PARAMETER, MZ_ZIP_INVALID_FILENAME, MZ_ZIP_BUF_TOO_SMALL, MZ_ZIP_INTERNAL_ERROR, MZ_ZIP_FILE_NOT_FOUND, MZ_ZIP_ARCHIVE_TOO_LARGE, MZ_ZIP_VALIDATION_FAILED, MZ_ZIP_WRITE_CALLBACK_FAILED, MZ_ZIP_TOTAL_ERRORS } mz_zip_error; typedef struct { mz_uint64 m_archive_size; mz_uint64 m_central_directory_file_ofs; /* We only support up to UINT32_MAX files in zip64 mode. */ mz_uint32 m_total_files; mz_zip_mode m_zip_mode; mz_zip_type m_zip_type; mz_zip_error m_last_error; mz_uint64 m_file_offset_alignment; mz_alloc_func m_pAlloc; mz_free_func m_pFree; mz_realloc_func m_pRealloc; void *m_pAlloc_opaque; mz_file_read_func m_pRead; mz_file_write_func m_pWrite; mz_file_needs_keepalive m_pNeeds_keepalive; void *m_pIO_opaque; mz_zip_internal_state *m_pState; } mz_zip_archive; typedef struct { mz_zip_archive *pZip; mz_uint flags; int status; mz_uint64 read_buf_size, read_buf_ofs, read_buf_avail, comp_remaining, out_buf_ofs, cur_file_ofs; mz_zip_archive_file_stat file_stat; void *pRead_buf; void *pWrite_buf; size_t out_blk_remain; tinfl_decompressor inflator; #ifdef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS mz_uint padding; #else mz_uint file_crc32; #endif } mz_zip_reader_extract_iter_state; /* -------- ZIP reading */ /* Inits a ZIP archive reader. */ /* These functions read and validate the archive's central directory. */ MINIZ_EXPORT mz_bool mz_zip_reader_init(mz_zip_archive *pZip, mz_uint64 size, mz_uint flags); MINIZ_EXPORT mz_bool mz_zip_reader_init_mem(mz_zip_archive *pZip, const void *pMem, size_t size, mz_uint flags); #ifndef MINIZ_NO_STDIO /* Read a archive from a disk file. */ /* file_start_ofs is the file offset where the archive actually begins, or 0. */ /* actual_archive_size is the true total size of the archive, which may be smaller than the file's actual size on disk. If zero the entire file is treated as the archive. */ MINIZ_EXPORT mz_bool mz_zip_reader_init_file(mz_zip_archive *pZip, const char *pFilename, mz_uint32 flags); MINIZ_EXPORT mz_bool mz_zip_reader_init_file_v2(mz_zip_archive *pZip, const char *pFilename, mz_uint flags, mz_uint64 file_start_ofs, mz_uint64 archive_size); /* Read an archive from an already opened FILE, beginning at the current file position. */ /* The archive is assumed to be archive_size bytes long. If archive_size is 0, then the entire rest of the file is assumed to contain the archive. */ /* The FILE will NOT be closed when mz_zip_reader_end() is called. */ MINIZ_EXPORT mz_bool mz_zip_reader_init_cfile(mz_zip_archive *pZip, MZ_FILE *pFile, mz_uint64 archive_size, mz_uint flags); #endif /* Ends archive reading, freeing all allocations, and closing the input archive file if mz_zip_reader_init_file() was used. */ MINIZ_EXPORT mz_bool mz_zip_reader_end(mz_zip_archive *pZip); /* -------- ZIP reading or writing */ /* Clears a mz_zip_archive struct to all zeros. */ /* Important: This must be done before passing the struct to any mz_zip functions. */ MINIZ_EXPORT void mz_zip_zero_struct(mz_zip_archive *pZip); MINIZ_EXPORT mz_zip_mode mz_zip_get_mode(mz_zip_archive *pZip); MINIZ_EXPORT mz_zip_type mz_zip_get_type(mz_zip_archive *pZip); /* Returns the total number of files in the archive. */ MINIZ_EXPORT mz_uint mz_zip_reader_get_num_files(mz_zip_archive *pZip); MINIZ_EXPORT mz_uint64 mz_zip_get_archive_size(mz_zip_archive *pZip); MINIZ_EXPORT mz_uint64 mz_zip_get_archive_file_start_offset(mz_zip_archive *pZip); MINIZ_EXPORT MZ_FILE *mz_zip_get_cfile(mz_zip_archive *pZip); /* Reads n bytes of raw archive data, starting at file offset file_ofs, to pBuf. */ MINIZ_EXPORT size_t mz_zip_read_archive_data(mz_zip_archive *pZip, mz_uint64 file_ofs, void *pBuf, size_t n); /* All mz_zip funcs set the m_last_error field in the mz_zip_archive struct. These functions retrieve/manipulate this field. */ /* Note that the m_last_error functionality is not thread safe. */ MINIZ_EXPORT mz_zip_error mz_zip_set_last_error(mz_zip_archive *pZip, mz_zip_error err_num); MINIZ_EXPORT mz_zip_error mz_zip_peek_last_error(mz_zip_archive *pZip); MINIZ_EXPORT mz_zip_error mz_zip_clear_last_error(mz_zip_archive *pZip); MINIZ_EXPORT mz_zip_error mz_zip_get_last_error(mz_zip_archive *pZip); MINIZ_EXPORT const char *mz_zip_get_error_string(mz_zip_error mz_err); /* MZ_TRUE if the archive file entry is a directory entry. */ MINIZ_EXPORT mz_bool mz_zip_reader_is_file_a_directory(mz_zip_archive *pZip, mz_uint file_index); /* MZ_TRUE if the file is encrypted/strong encrypted. */ MINIZ_EXPORT mz_bool mz_zip_reader_is_file_encrypted(mz_zip_archive *pZip, mz_uint file_index); /* MZ_TRUE if the compression method is supported, and the file is not encrypted, and the file is not a compressed patch file. */ MINIZ_EXPORT mz_bool mz_zip_reader_is_file_supported(mz_zip_archive *pZip, mz_uint file_index); /* Retrieves the filename of an archive file entry. */ /* Returns the number of bytes written to pFilename, or if filename_buf_size is 0 this function returns the number of bytes needed to fully store the filename. */ MINIZ_EXPORT mz_uint mz_zip_reader_get_filename(mz_zip_archive *pZip, mz_uint file_index, char *pFilename, mz_uint filename_buf_size); /* Attempts to locates a file in the archive's central directory. */ /* Valid flags: MZ_ZIP_FLAG_CASE_SENSITIVE, MZ_ZIP_FLAG_IGNORE_PATH */ /* Returns -1 if the file cannot be found. */ MINIZ_EXPORT int mz_zip_reader_locate_file(mz_zip_archive *pZip, const char *pName, const char *pComment, mz_uint flags); MINIZ_EXPORT mz_bool mz_zip_reader_locate_file_v2(mz_zip_archive *pZip, const char *pName, const char *pComment, mz_uint flags, mz_uint32 *file_index); /* Returns detailed information about an archive file entry. */ MINIZ_EXPORT mz_bool mz_zip_reader_file_stat(mz_zip_archive *pZip, mz_uint file_index, mz_zip_archive_file_stat *pStat); /* MZ_TRUE if the file is in zip64 format. */ /* A file is considered zip64 if it contained a zip64 end of central directory marker, or if it contained any zip64 extended file information fields in the central directory. */ MINIZ_EXPORT mz_bool mz_zip_is_zip64(mz_zip_archive *pZip); /* Returns the total central directory size in bytes. */ /* The current max supported size is <= MZ_UINT32_MAX. */ MINIZ_EXPORT size_t mz_zip_get_central_dir_size(mz_zip_archive *pZip); /* Extracts a archive file to a memory buffer using no memory allocation. */ /* There must be at least enough room on the stack to store the inflator's state (~34KB or so). */ MINIZ_EXPORT mz_bool mz_zip_reader_extract_to_mem_no_alloc(mz_zip_archive *pZip, mz_uint file_index, void *pBuf, size_t buf_size, mz_uint flags, void *pUser_read_buf, size_t user_read_buf_size); MINIZ_EXPORT mz_bool mz_zip_reader_extract_file_to_mem_no_alloc(mz_zip_archive *pZip, const char *pFilename, void *pBuf, size_t buf_size, mz_uint flags, void *pUser_read_buf, size_t user_read_buf_size); /* Extracts a archive file to a memory buffer. */ MINIZ_EXPORT mz_bool mz_zip_reader_extract_to_mem(mz_zip_archive *pZip, mz_uint file_index, void *pBuf, size_t buf_size, mz_uint flags); MINIZ_EXPORT mz_bool mz_zip_reader_extract_file_to_mem(mz_zip_archive *pZip, const char *pFilename, void *pBuf, size_t buf_size, mz_uint flags); /* Extracts a archive file to a dynamically allocated heap buffer. */ /* The memory will be allocated via the mz_zip_archive's alloc/realloc functions. */ /* Returns NULL and sets the last error on failure. */ MINIZ_EXPORT void *mz_zip_reader_extract_to_heap(mz_zip_archive *pZip, mz_uint file_index, size_t *pSize, mz_uint flags); MINIZ_EXPORT void *mz_zip_reader_extract_file_to_heap(mz_zip_archive *pZip, const char *pFilename, size_t *pSize, mz_uint flags); /* Extracts a archive file using a callback function to output the file's data. */ MINIZ_EXPORT mz_bool mz_zip_reader_extract_to_callback(mz_zip_archive *pZip, mz_uint file_index, mz_file_write_func pCallback, void *pOpaque, mz_uint flags); MINIZ_EXPORT mz_bool mz_zip_reader_extract_file_to_callback(mz_zip_archive *pZip, const char *pFilename, mz_file_write_func pCallback, void *pOpaque, mz_uint flags); /* Extract a file iteratively */ MINIZ_EXPORT mz_zip_reader_extract_iter_state* mz_zip_reader_extract_iter_new(mz_zip_archive *pZip, mz_uint file_index, mz_uint flags); MINIZ_EXPORT mz_zip_reader_extract_iter_state* mz_zip_reader_extract_file_iter_new(mz_zip_archive *pZip, const char *pFilename, mz_uint flags); MINIZ_EXPORT size_t mz_zip_reader_extract_iter_read(mz_zip_reader_extract_iter_state* pState, void* pvBuf, size_t buf_size); MINIZ_EXPORT mz_bool mz_zip_reader_extract_iter_free(mz_zip_reader_extract_iter_state* pState); #ifndef MINIZ_NO_STDIO /* Extracts a archive file to a disk file and sets its last accessed and modified times. */ /* This function only extracts files, not archive directory records. */ MINIZ_EXPORT mz_bool mz_zip_reader_extract_to_file(mz_zip_archive *pZip, mz_uint file_index, const char *pDst_filename, mz_uint flags); MINIZ_EXPORT mz_bool mz_zip_reader_extract_file_to_file(mz_zip_archive *pZip, const char *pArchive_filename, const char *pDst_filename, mz_uint flags); /* Extracts a archive file starting at the current position in the destination FILE stream. */ MINIZ_EXPORT mz_bool mz_zip_reader_extract_to_cfile(mz_zip_archive *pZip, mz_uint file_index, MZ_FILE *File, mz_uint flags); MINIZ_EXPORT mz_bool mz_zip_reader_extract_file_to_cfile(mz_zip_archive *pZip, const char *pArchive_filename, MZ_FILE *pFile, mz_uint flags); #endif #if 0 /* TODO */ typedef void *mz_zip_streaming_extract_state_ptr; mz_zip_streaming_extract_state_ptr mz_zip_streaming_extract_begin(mz_zip_archive *pZip, mz_uint file_index, mz_uint flags); mz_uint64 mz_zip_streaming_extract_get_size(mz_zip_archive *pZip, mz_zip_streaming_extract_state_ptr pState); mz_uint64 mz_zip_streaming_extract_get_cur_ofs(mz_zip_archive *pZip, mz_zip_streaming_extract_state_ptr pState); mz_bool mz_zip_streaming_extract_seek(mz_zip_archive *pZip, mz_zip_streaming_extract_state_ptr pState, mz_uint64 new_ofs); size_t mz_zip_streaming_extract_read(mz_zip_archive *pZip, mz_zip_streaming_extract_state_ptr pState, void *pBuf, size_t buf_size); mz_bool mz_zip_streaming_extract_end(mz_zip_archive *pZip, mz_zip_streaming_extract_state_ptr pState); #endif /* This function compares the archive's local headers, the optional local zip64 extended information block, and the optional descriptor following the compressed data vs. the data in the central directory. */ /* It also validates that each file can be successfully uncompressed unless the MZ_ZIP_FLAG_VALIDATE_HEADERS_ONLY is specified. */ MINIZ_EXPORT mz_bool mz_zip_validate_file(mz_zip_archive *pZip, mz_uint file_index, mz_uint flags); /* Validates an entire archive by calling mz_zip_validate_file() on each file. */ MINIZ_EXPORT mz_bool mz_zip_validate_archive(mz_zip_archive *pZip, mz_uint flags); /* Misc utils/helpers, valid for ZIP reading or writing */ MINIZ_EXPORT mz_bool mz_zip_validate_mem_archive(const void *pMem, size_t size, mz_uint flags, mz_zip_error *pErr); #ifndef MINIZ_NO_STDIO MINIZ_EXPORT mz_bool mz_zip_validate_file_archive(const char *pFilename, mz_uint flags, mz_zip_error *pErr); #endif /* Universal end function - calls either mz_zip_reader_end() or mz_zip_writer_end(). */ MINIZ_EXPORT mz_bool mz_zip_end(mz_zip_archive *pZip); /* -------- ZIP writing */ #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS /* Inits a ZIP archive writer. */ /*Set pZip->m_pWrite (and pZip->m_pIO_opaque) before calling mz_zip_writer_init or mz_zip_writer_init_v2*/ /*The output is streamable, i.e. file_ofs in mz_file_write_func always increases only by n*/ MINIZ_EXPORT mz_bool mz_zip_writer_init(mz_zip_archive *pZip, mz_uint64 existing_size); MINIZ_EXPORT mz_bool mz_zip_writer_init_v2(mz_zip_archive *pZip, mz_uint64 existing_size, mz_uint flags); MINIZ_EXPORT mz_bool mz_zip_writer_init_heap(mz_zip_archive *pZip, size_t size_to_reserve_at_beginning, size_t initial_allocation_size); MINIZ_EXPORT mz_bool mz_zip_writer_init_heap_v2(mz_zip_archive *pZip, size_t size_to_reserve_at_beginning, size_t initial_allocation_size, mz_uint flags); #ifndef MINIZ_NO_STDIO MINIZ_EXPORT mz_bool mz_zip_writer_init_file(mz_zip_archive *pZip, const char *pFilename, mz_uint64 size_to_reserve_at_beginning); MINIZ_EXPORT mz_bool mz_zip_writer_init_file_v2(mz_zip_archive *pZip, const char *pFilename, mz_uint64 size_to_reserve_at_beginning, mz_uint flags); MINIZ_EXPORT mz_bool mz_zip_writer_init_cfile(mz_zip_archive *pZip, MZ_FILE *pFile, mz_uint flags); #endif /* Converts a ZIP archive reader object into a writer object, to allow efficient in-place file appends to occur on an existing archive. */ /* For archives opened using mz_zip_reader_init_file, pFilename must be the archive's filename so it can be reopened for writing. If the file can't be reopened, mz_zip_reader_end() will be called. */ /* For archives opened using mz_zip_reader_init_mem, the memory block must be growable using the realloc callback (which defaults to realloc unless you've overridden it). */ /* Finally, for archives opened using mz_zip_reader_init, the mz_zip_archive's user provided m_pWrite function cannot be NULL. */ /* Note: In-place archive modification is not recommended unless you know what you're doing, because if execution stops or something goes wrong before */ /* the archive is finalized the file's central directory will be hosed. */ MINIZ_EXPORT mz_bool mz_zip_writer_init_from_reader(mz_zip_archive *pZip, const char *pFilename); MINIZ_EXPORT mz_bool mz_zip_writer_init_from_reader_v2(mz_zip_archive *pZip, const char *pFilename, mz_uint flags); /* Adds the contents of a memory buffer to an archive. These functions record the current local time into the archive. */ /* To add a directory entry, call this method with an archive name ending in a forwardslash with an empty buffer. */ /* level_and_flags - compression level (0-10, see MZ_BEST_SPEED, MZ_BEST_COMPRESSION, etc.) logically OR'd with zero or more mz_zip_flags, or just set to MZ_DEFAULT_COMPRESSION. */ MINIZ_EXPORT mz_bool mz_zip_writer_add_mem(mz_zip_archive *pZip, const char *pArchive_name, const void *pBuf, size_t buf_size, mz_uint level_and_flags); /* Like mz_zip_writer_add_mem(), except you can specify a file comment field, and optionally supply the function with already compressed data. */ /* uncomp_size/uncomp_crc32 are only used if the MZ_ZIP_FLAG_COMPRESSED_DATA flag is specified. */ MINIZ_EXPORT mz_bool mz_zip_writer_add_mem_ex(mz_zip_archive *pZip, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags, mz_uint64 uncomp_size, mz_uint32 uncomp_crc32); MINIZ_EXPORT mz_bool mz_zip_writer_add_mem_ex_v2(mz_zip_archive *pZip, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags, mz_uint64 uncomp_size, mz_uint32 uncomp_crc32, MZ_TIME_T *last_modified, const char *user_extra_data_local, mz_uint user_extra_data_local_len, const char *user_extra_data_central, mz_uint user_extra_data_central_len); /* Adds the contents of a file to an archive. This function also records the disk file's modified time into the archive. */ /* File data is supplied via a read callback function. User mz_zip_writer_add_(c)file to add a file directly.*/ MINIZ_EXPORT mz_bool mz_zip_writer_add_read_buf_callback(mz_zip_archive *pZip, const char *pArchive_name, mz_file_read_func read_callback, void* callback_opaque, mz_uint64 max_size, const MZ_TIME_T *pFile_time, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags, const char *user_extra_data_local, mz_uint user_extra_data_local_len, const char *user_extra_data_central, mz_uint user_extra_data_central_len); #ifndef MINIZ_NO_STDIO /* Adds the contents of a disk file to an archive. This function also records the disk file's modified time into the archive. */ /* level_and_flags - compression level (0-10, see MZ_BEST_SPEED, MZ_BEST_COMPRESSION, etc.) logically OR'd with zero or more mz_zip_flags, or just set to MZ_DEFAULT_COMPRESSION. */ MINIZ_EXPORT mz_bool mz_zip_writer_add_file(mz_zip_archive *pZip, const char *pArchive_name, const char *pSrc_filename, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags); /* Like mz_zip_writer_add_file(), except the file data is read from the specified FILE stream. */ MINIZ_EXPORT mz_bool mz_zip_writer_add_cfile(mz_zip_archive *pZip, const char *pArchive_name, MZ_FILE *pSrc_file, mz_uint64 max_size, const MZ_TIME_T *pFile_time, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags, const char *user_extra_data_local, mz_uint user_extra_data_local_len, const char *user_extra_data_central, mz_uint user_extra_data_central_len); #endif /* Adds a file to an archive by fully cloning the data from another archive. */ /* This function fully clones the source file's compressed data (no recompression), along with its full filename, extra data (it may add or modify the zip64 local header extra data field), and the optional descriptor following the compressed data. */ MINIZ_EXPORT mz_bool mz_zip_writer_add_from_zip_reader(mz_zip_archive *pZip, mz_zip_archive *pSource_zip, mz_uint src_file_index); /* Finalizes the archive by writing the central directory records followed by the end of central directory record. */ /* After an archive is finalized, the only valid call on the mz_zip_archive struct is mz_zip_writer_end(). */ /* An archive must be manually finalized by calling this function for it to be valid. */ MINIZ_EXPORT mz_bool mz_zip_writer_finalize_archive(mz_zip_archive *pZip); /* Finalizes a heap archive, returning a pointer to the heap block and its size. */ /* The heap block will be allocated using the mz_zip_archive's alloc/realloc callbacks. */ MINIZ_EXPORT mz_bool mz_zip_writer_finalize_heap_archive(mz_zip_archive *pZip, void **ppBuf, size_t *pSize); /* Ends archive writing, freeing all allocations, and closing the output file if mz_zip_writer_init_file() was used. */ /* Note for the archive to be valid, it *must* have been finalized before ending (this function will not do it for you). */ MINIZ_EXPORT mz_bool mz_zip_writer_end(mz_zip_archive *pZip); /* -------- Misc. high-level helper functions: */ /* mz_zip_add_mem_to_archive_file_in_place() efficiently (but not atomically) appends a memory blob to a ZIP archive. */ /* Note this is NOT a fully safe operation. If it crashes or dies in some way your archive can be left in a screwed up state (without a central directory). */ /* level_and_flags - compression level (0-10, see MZ_BEST_SPEED, MZ_BEST_COMPRESSION, etc.) logically OR'd with zero or more mz_zip_flags, or just set to MZ_DEFAULT_COMPRESSION. */ /* TODO: Perhaps add an option to leave the existing central dir in place in case the add dies? We could then truncate the file (so the old central dir would be at the end) if something goes wrong. */ MINIZ_EXPORT mz_bool mz_zip_add_mem_to_archive_file_in_place(const char *pZip_filename, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags); MINIZ_EXPORT mz_bool mz_zip_add_mem_to_archive_file_in_place_v2(const char *pZip_filename, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags, mz_zip_error *pErr); #ifndef MINIZ_NO_STDIO /* Reads a single file from an archive into a heap block. */ /* If pComment is not NULL, only the file with the specified comment will be extracted. */ /* Returns NULL on failure. */ MINIZ_EXPORT void *mz_zip_extract_archive_file_to_heap(const char *pZip_filename, const char *pArchive_name, size_t *pSize, mz_uint flags); MINIZ_EXPORT void *mz_zip_extract_archive_file_to_heap_v2(const char *pZip_filename, const char *pArchive_name, const char *pComment, size_t *pSize, mz_uint flags, mz_zip_error *pErr); #endif #endif /* #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS */ #ifdef __cplusplus } #endif #endif /* MINIZ_NO_ARCHIVE_APIS */ ================================================ FILE: libraries/murmur.h ================================================ // MurmurHash2 was written by Austin Appleby, and is placed in the public // domain. The author hereby disclaims copyright to this source code. // This function is adapted from the MurmurHash64A function. You can find // the original functions here: https://github.com/aappleby/smhasher inline constexpr uint64_t MurmurHash (auto& value) { const void* key = &value; const int len = sizeof(value); const uint64_t seed = 123456; const uint64_t m = 0xc6a4a7935bd1e995llu; const int r = 47; uint64_t h = seed ^ (len * m); const uint64_t* data = (const uint64_t*)key; const uint64_t* end = data + (len/8); while(data != end) { uint64_t k = *data++; k *= m; k ^= k >> r; k *= m; h ^= k; h *= m; } const unsigned char * data2 = (const unsigned char*)data; switch(len & 7) { case 7: h ^= uint64_t(data2[6]) << 48; case 6: h ^= uint64_t(data2[5]) << 40; case 5: h ^= uint64_t(data2[4]) << 32; case 4: h ^= uint64_t(data2[3]) << 24; case 3: h ^= uint64_t(data2[2]) << 16; case 2: h ^= uint64_t(data2[1]) << 8; case 1: h ^= uint64_t(data2[0]); h *= m; }; h ^= h >> r; h *= m; h ^= h >> r; return h; } inline constexpr uint64_t MurmurHash2 (const char* input, int length) { const uint64_t seed = 123456; const uint64_t m = 0xc6a4a7935bd1e995llu; const int r = 47; uint64_t h = seed ^ (length * m); const uint64_t* data = (const uint64_t*)input; const uint64_t* end = data + (length/8); while(data != end) { uint64_t k = *data++; k *= m; k ^= k >> r; k *= m; h ^= k; h *= m; } const unsigned char * data2 = (const unsigned char*)data; switch(length & 7) { case 7: h ^= uint64_t(data2[6]) << 48; case 6: h ^= uint64_t(data2[5]) << 40; case 5: h ^= uint64_t(data2[4]) << 32; case 4: h ^= uint64_t(data2[3]) << 24; case 3: h ^= uint64_t(data2[2]) << 16; case 2: h ^= uint64_t(data2[1]) << 8; case 1: h ^= uint64_t(data2[0]); h *= m; }; h ^= h >> r; h *= m; h ^= h >> r; return h; } ================================================ FILE: libraries/openal/LICENSE_OPENAL ================================================ GNU LIBRARY GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. GNU LIBRARY GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS ================================================ FILE: libraries/openal/al.h ================================================ #ifndef AL_AL_H #define AL_AL_H #if defined(__cplusplus) extern "C" { #endif #ifndef AL_API #if defined(AL_LIBTYPE_STATIC) #define AL_API #elif defined(_WIN32) #define AL_API __declspec(dllimport) #else #define AL_API extern #endif #endif #if defined(_WIN32) #define AL_APIENTRY __cdecl #else #define AL_APIENTRY #endif /* Deprecated macros. */ #define OPENAL #define ALAPI AL_API #define ALAPIENTRY AL_APIENTRY #define AL_INVALID (-1) #define AL_ILLEGAL_ENUM AL_INVALID_ENUM #define AL_ILLEGAL_COMMAND AL_INVALID_OPERATION /* Supported AL versions. */ #define AL_VERSION_1_0 #define AL_VERSION_1_1 /** 8-bit boolean */ typedef char ALboolean; /** character */ typedef char ALchar; /** signed 8-bit 2's complement integer */ typedef signed char ALbyte; /** unsigned 8-bit integer */ typedef unsigned char ALubyte; /** signed 16-bit 2's complement integer */ typedef short ALshort; /** unsigned 16-bit integer */ typedef unsigned short ALushort; /** signed 32-bit 2's complement integer */ typedef int ALint; /** unsigned 32-bit integer */ typedef unsigned int ALuint; /** non-negative 32-bit binary integer size */ typedef int ALsizei; /** enumerated 32-bit value */ typedef int ALenum; /** 32-bit IEEE754 floating-point */ typedef float ALfloat; /** 64-bit IEEE754 floating-point */ typedef double ALdouble; /** void type (for opaque pointers only) */ typedef void ALvoid; /* Enumerant values begin at column 50. No tabs. */ /** "no distance model" or "no buffer" */ #define AL_NONE 0 /** Boolean False. */ #define AL_FALSE 0 /** Boolean True. */ #define AL_TRUE 1 /** * Relative source. * Type: ALboolean * Range: [AL_TRUE, AL_FALSE] * Default: AL_FALSE * * Specifies if the Source has relative coordinates. */ #define AL_SOURCE_RELATIVE 0x202 /** * Inner cone angle, in degrees. * Type: ALint, ALfloat * Range: [0 - 360] * Default: 360 * * The angle covered by the inner cone, where the source will not attenuate. */ #define AL_CONE_INNER_ANGLE 0x1001 /** * Outer cone angle, in degrees. * Range: [0 - 360] * Default: 360 * * The angle covered by the outer cone, where the source will be fully * attenuated. */ #define AL_CONE_OUTER_ANGLE 0x1002 /** * Source pitch. * Type: ALfloat * Range: [0.5 - 2.0] * Default: 1.0 * * A multiplier for the frequency (sample rate) of the source's buffer. */ #define AL_PITCH 0x1003 /** * Source or listener position. * Type: ALfloat[3], ALint[3] * Default: {0, 0, 0} * * The source or listener location in three dimensional space. * * OpenAL, like OpenGL, uses a right handed coordinate system, where in a * frontal default view X (thumb) points right, Y points up (index finger), and * Z points towards the viewer/camera (middle finger). * * To switch from a left handed coordinate system, flip the sign on the Z * coordinate. */ #define AL_POSITION 0x1004 /** * Source direction. * Type: ALfloat[3], ALint[3] * Default: {0, 0, 0} * * Specifies the current direction in local space. * A zero-length vector specifies an omni-directional source (cone is ignored). */ #define AL_DIRECTION 0x1005 /** * Source or listener velocity. * Type: ALfloat[3], ALint[3] * Default: {0, 0, 0} * * Specifies the current velocity in local space. */ #define AL_VELOCITY 0x1006 /** * Source looping. * Type: ALboolean * Range: [AL_TRUE, AL_FALSE] * Default: AL_FALSE * * Specifies whether source is looping. */ #define AL_LOOPING 0x1007 /** * Source buffer. * Type: ALuint * Range: any valid Buffer. * * Specifies the buffer to provide sound samples. */ #define AL_BUFFER 0x1009 /** * Source or listener gain. * Type: ALfloat * Range: [0.0 - ] * * A value of 1.0 means unattenuated. Each division by 2 equals an attenuation * of about -6dB. Each multiplicaton by 2 equals an amplification of about * +6dB. * * A value of 0.0 is meaningless with respect to a logarithmic scale; it is * silent. */ #define AL_GAIN 0x100A /** * Minimum source gain. * Type: ALfloat * Range: [0.0 - 1.0] * * The minimum gain allowed for a source, after distance and cone attenation is * applied (if applicable). */ #define AL_MIN_GAIN 0x100D /** * Maximum source gain. * Type: ALfloat * Range: [0.0 - 1.0] * * The maximum gain allowed for a source, after distance and cone attenation is * applied (if applicable). */ #define AL_MAX_GAIN 0x100E /** * Listener orientation. * Type: ALfloat[6] * Default: {0.0, 0.0, -1.0, 0.0, 1.0, 0.0} * * Effectively two three dimensional vectors. The first vector is the front (or * "at") and the second is the top (or "up"). * * Both vectors are in local space. */ #define AL_ORIENTATION 0x100F /** * Source state (query only). * Type: ALint * Range: [AL_INITIAL, AL_PLAYING, AL_PAUSED, AL_STOPPED] */ #define AL_SOURCE_STATE 0x1010 /* Source state values. */ #define AL_INITIAL 0x1011 #define AL_PLAYING 0x1012 #define AL_PAUSED 0x1013 #define AL_STOPPED 0x1014 /** * Source Buffer Queue size (query only). * Type: ALint * * The number of buffers queued using alSourceQueueBuffers, minus the buffers * removed with alSourceUnqueueBuffers. */ #define AL_BUFFERS_QUEUED 0x1015 /** * Source Buffer Queue processed count (query only). * Type: ALint * * The number of queued buffers that have been fully processed, and can be * removed with alSourceUnqueueBuffers. * * Looping sources will never fully process buffers because they will be set to * play again for when the source loops. */ #define AL_BUFFERS_PROCESSED 0x1016 /** * Source reference distance. * Type: ALfloat * Range: [0.0 - ] * Default: 1.0 * * The distance in units that no attenuation occurs. * * At 0.0, no distance attenuation ever occurs on non-linear attenuation models. */ #define AL_REFERENCE_DISTANCE 0x1020 /** * Source rolloff factor. * Type: ALfloat * Range: [0.0 - ] * Default: 1.0 * * Multiplier to exaggerate or diminish distance attenuation. * * At 0.0, no distance attenuation ever occurs. */ #define AL_ROLLOFF_FACTOR 0x1021 /** * Outer cone gain. * Type: ALfloat * Range: [0.0 - 1.0] * Default: 0.0 * * The gain attenuation applied when the listener is outside of the source's * outer cone. */ #define AL_CONE_OUTER_GAIN 0x1022 /** * Source maximum distance. * Type: ALfloat * Range: [0.0 - ] * Default: FLT_MAX * * The distance above which the source is not attenuated any further with a * clamped distance model, or where attenuation reaches 0.0 gain for linear * distance models with a default rolloff factor. */ #define AL_MAX_DISTANCE 0x1023 /** Source buffer position, in seconds */ #define AL_SEC_OFFSET 0x1024 /** Source buffer position, in sample frames */ #define AL_SAMPLE_OFFSET 0x1025 /** Source buffer position, in bytes */ #define AL_BYTE_OFFSET 0x1026 /** * Source type (query only). * Type: ALint * Range: [AL_STATIC, AL_STREAMING, AL_UNDETERMINED] * * A Source is Static if a Buffer has been attached using AL_BUFFER. * * A Source is Streaming if one or more Buffers have been attached using * alSourceQueueBuffers. * * A Source is Undetermined when it has the NULL buffer attached using * AL_BUFFER. */ #define AL_SOURCE_TYPE 0x1027 /* Source type values. */ #define AL_STATIC 0x1028 #define AL_STREAMING 0x1029 #define AL_UNDETERMINED 0x1030 /** Unsigned 8-bit mono buffer format. */ #define AL_FORMAT_MONO8 0x1100 /** Signed 16-bit mono buffer format. */ #define AL_FORMAT_MONO16 0x1101 /** Unsigned 8-bit stereo buffer format. */ #define AL_FORMAT_STEREO8 0x1102 /** Signed 16-bit stereo buffer format. */ #define AL_FORMAT_STEREO16 0x1103 /** Buffer frequency (query only). */ #define AL_FREQUENCY 0x2001 /** Buffer bits per sample (query only). */ #define AL_BITS 0x2002 /** Buffer channel count (query only). */ #define AL_CHANNELS 0x2003 /** Buffer data size (query only). */ #define AL_SIZE 0x2004 /* Buffer state. Not for public use. */ #define AL_UNUSED 0x2010 #define AL_PENDING 0x2011 #define AL_PROCESSED 0x2012 /** No error. */ #define AL_NO_ERROR 0 /** Invalid name paramater passed to AL call. */ #define AL_INVALID_NAME 0xA001 /** Invalid enum parameter passed to AL call. */ #define AL_INVALID_ENUM 0xA002 /** Invalid value parameter passed to AL call. */ #define AL_INVALID_VALUE 0xA003 /** Illegal AL call. */ #define AL_INVALID_OPERATION 0xA004 /** Not enough memory. */ #define AL_OUT_OF_MEMORY 0xA005 /** Context string: Vendor ID. */ #define AL_VENDOR 0xB001 /** Context string: Version. */ #define AL_VERSION 0xB002 /** Context string: Renderer ID. */ #define AL_RENDERER 0xB003 /** Context string: Space-separated extension list. */ #define AL_EXTENSIONS 0xB004 /** * Doppler scale. * Type: ALfloat * Range: [0.0 - ] * Default: 1.0 * * Scale for source and listener velocities. */ #define AL_DOPPLER_FACTOR 0xC000 AL_API void AL_APIENTRY alDopplerFactor(ALfloat value); /** * Doppler velocity (deprecated). * * A multiplier applied to the Speed of Sound. */ #define AL_DOPPLER_VELOCITY 0xC001 AL_API void AL_APIENTRY alDopplerVelocity(ALfloat value); /** * Speed of Sound, in units per second. * Type: ALfloat * Range: [0.0001 - ] * Default: 343.3 * * The speed at which sound waves are assumed to travel, when calculating the * doppler effect. */ #define AL_SPEED_OF_SOUND 0xC003 AL_API void AL_APIENTRY alSpeedOfSound(ALfloat value); /** * Distance attenuation model. * Type: ALint * Range: [AL_NONE, AL_INVERSE_DISTANCE, AL_INVERSE_DISTANCE_CLAMPED, * AL_LINEAR_DISTANCE, AL_LINEAR_DISTANCE_CLAMPED, * AL_EXPONENT_DISTANCE, AL_EXPONENT_DISTANCE_CLAMPED] * Default: AL_INVERSE_DISTANCE_CLAMPED * * The model by which sources attenuate with distance. * * None - No distance attenuation. * Inverse - Doubling the distance halves the source gain. * Linear - Linear gain scaling between the reference and max distances. * Exponent - Exponential gain dropoff. * * Clamped variations work like the non-clamped counterparts, except the * distance calculated is clamped between the reference and max distances. */ #define AL_DISTANCE_MODEL 0xD000 AL_API void AL_APIENTRY alDistanceModel(ALenum distanceModel); /* Distance model values. */ #define AL_INVERSE_DISTANCE 0xD001 #define AL_INVERSE_DISTANCE_CLAMPED 0xD002 #define AL_LINEAR_DISTANCE 0xD003 #define AL_LINEAR_DISTANCE_CLAMPED 0xD004 #define AL_EXPONENT_DISTANCE 0xD005 #define AL_EXPONENT_DISTANCE_CLAMPED 0xD006 /* Renderer State management. */ AL_API void AL_APIENTRY alEnable(ALenum capability); AL_API void AL_APIENTRY alDisable(ALenum capability); AL_API ALboolean AL_APIENTRY alIsEnabled(ALenum capability); /* State retrieval. */ AL_API const ALchar* AL_APIENTRY alGetString(ALenum param); AL_API void AL_APIENTRY alGetBooleanv(ALenum param, ALboolean *values); AL_API void AL_APIENTRY alGetIntegerv(ALenum param, ALint *values); AL_API void AL_APIENTRY alGetFloatv(ALenum param, ALfloat *values); AL_API void AL_APIENTRY alGetDoublev(ALenum param, ALdouble *values); AL_API ALboolean AL_APIENTRY alGetBoolean(ALenum param); AL_API ALint AL_APIENTRY alGetInteger(ALenum param); AL_API ALfloat AL_APIENTRY alGetFloat(ALenum param); AL_API ALdouble AL_APIENTRY alGetDouble(ALenum param); /* Error retrieval. */ /** Obtain the first error generated in the AL context since the last check. */ AL_API ALenum AL_APIENTRY alGetError(void); /** Query for the presence of an extension on the AL context. */ AL_API ALboolean AL_APIENTRY alIsExtensionPresent(const ALchar *extname); /** * Retrieve the address of a function. The returned function may be context- * specific. */ AL_API void* AL_APIENTRY alGetProcAddress(const ALchar *fname); /** * Retrieve the value of an enum. The returned value may be context-specific. */ AL_API ALenum AL_APIENTRY alGetEnumValue(const ALchar *ename); /* Set Listener parameters */ AL_API void AL_APIENTRY alListenerf(ALenum param, ALfloat value); AL_API void AL_APIENTRY alListener3f(ALenum param, ALfloat value1, ALfloat value2, ALfloat value3); AL_API void AL_APIENTRY alListenerfv(ALenum param, const ALfloat *values); AL_API void AL_APIENTRY alListeneri(ALenum param, ALint value); AL_API void AL_APIENTRY alListener3i(ALenum param, ALint value1, ALint value2, ALint value3); AL_API void AL_APIENTRY alListeneriv(ALenum param, const ALint *values); /* Get Listener parameters */ AL_API void AL_APIENTRY alGetListenerf(ALenum param, ALfloat *value); AL_API void AL_APIENTRY alGetListener3f(ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3); AL_API void AL_APIENTRY alGetListenerfv(ALenum param, ALfloat *values); AL_API void AL_APIENTRY alGetListeneri(ALenum param, ALint *value); AL_API void AL_APIENTRY alGetListener3i(ALenum param, ALint *value1, ALint *value2, ALint *value3); AL_API void AL_APIENTRY alGetListeneriv(ALenum param, ALint *values); /** Create Source objects. */ AL_API void AL_APIENTRY alGenSources(ALsizei n, ALuint *sources); /** Delete Source objects. */ AL_API void AL_APIENTRY alDeleteSources(ALsizei n, const ALuint *sources); /** Verify a handle is a valid Source. */ AL_API ALboolean AL_APIENTRY alIsSource(ALuint source); /* Set Source parameters. */ AL_API void AL_APIENTRY alSourcef(ALuint source, ALenum param, ALfloat value); AL_API void AL_APIENTRY alSource3f(ALuint source, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3); AL_API void AL_APIENTRY alSourcefv(ALuint source, ALenum param, const ALfloat *values); AL_API void AL_APIENTRY alSourcei(ALuint source, ALenum param, ALint value); AL_API void AL_APIENTRY alSource3i(ALuint source, ALenum param, ALint value1, ALint value2, ALint value3); AL_API void AL_APIENTRY alSourceiv(ALuint source, ALenum param, const ALint *values); /* Get Source parameters. */ AL_API void AL_APIENTRY alGetSourcef(ALuint source, ALenum param, ALfloat *value); AL_API void AL_APIENTRY alGetSource3f(ALuint source, ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3); AL_API void AL_APIENTRY alGetSourcefv(ALuint source, ALenum param, ALfloat *values); AL_API void AL_APIENTRY alGetSourcei(ALuint source, ALenum param, ALint *value); AL_API void AL_APIENTRY alGetSource3i(ALuint source, ALenum param, ALint *value1, ALint *value2, ALint *value3); AL_API void AL_APIENTRY alGetSourceiv(ALuint source, ALenum param, ALint *values); /** Play, replay, or resume (if paused) a list of Sources */ AL_API void AL_APIENTRY alSourcePlayv(ALsizei n, const ALuint *sources); /** Stop a list of Sources */ AL_API void AL_APIENTRY alSourceStopv(ALsizei n, const ALuint *sources); /** Rewind a list of Sources */ AL_API void AL_APIENTRY alSourceRewindv(ALsizei n, const ALuint *sources); /** Pause a list of Sources */ AL_API void AL_APIENTRY alSourcePausev(ALsizei n, const ALuint *sources); /** Play, replay, or resume a Source */ AL_API void AL_APIENTRY alSourcePlay(ALuint source); /** Stop a Source */ AL_API void AL_APIENTRY alSourceStop(ALuint source); /** Rewind a Source (set playback postiton to beginning) */ AL_API void AL_APIENTRY alSourceRewind(ALuint source); /** Pause a Source */ AL_API void AL_APIENTRY alSourcePause(ALuint source); /** Queue buffers onto a source */ AL_API void AL_APIENTRY alSourceQueueBuffers(ALuint source, ALsizei nb, const ALuint *buffers); /** Unqueue processed buffers from a source */ AL_API void AL_APIENTRY alSourceUnqueueBuffers(ALuint source, ALsizei nb, ALuint *buffers); /** Create Buffer objects */ AL_API void AL_APIENTRY alGenBuffers(ALsizei n, ALuint *buffers); /** Delete Buffer objects */ AL_API void AL_APIENTRY alDeleteBuffers(ALsizei n, const ALuint *buffers); /** Verify a handle is a valid Buffer */ AL_API ALboolean AL_APIENTRY alIsBuffer(ALuint buffer); /** Specifies the data to be copied into a buffer */ AL_API void AL_APIENTRY alBufferData(ALuint buffer, ALenum format, const ALvoid *data, ALsizei size, ALsizei freq); /* Set Buffer parameters, */ AL_API void AL_APIENTRY alBufferf(ALuint buffer, ALenum param, ALfloat value); AL_API void AL_APIENTRY alBuffer3f(ALuint buffer, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3); AL_API void AL_APIENTRY alBufferfv(ALuint buffer, ALenum param, const ALfloat *values); AL_API void AL_APIENTRY alBufferi(ALuint buffer, ALenum param, ALint value); AL_API void AL_APIENTRY alBuffer3i(ALuint buffer, ALenum param, ALint value1, ALint value2, ALint value3); AL_API void AL_APIENTRY alBufferiv(ALuint buffer, ALenum param, const ALint *values); /* Get Buffer parameters. */ AL_API void AL_APIENTRY alGetBufferf(ALuint buffer, ALenum param, ALfloat *value); AL_API void AL_APIENTRY alGetBuffer3f(ALuint buffer, ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3); AL_API void AL_APIENTRY alGetBufferfv(ALuint buffer, ALenum param, ALfloat *values); AL_API void AL_APIENTRY alGetBufferi(ALuint buffer, ALenum param, ALint *value); AL_API void AL_APIENTRY alGetBuffer3i(ALuint buffer, ALenum param, ALint *value1, ALint *value2, ALint *value3); AL_API void AL_APIENTRY alGetBufferiv(ALuint buffer, ALenum param, ALint *values); /* Pointer-to-function type, useful for dynamically getting AL entry points. */ typedef void (AL_APIENTRY *LPALENABLE)(ALenum capability); typedef void (AL_APIENTRY *LPALDISABLE)(ALenum capability); typedef ALboolean (AL_APIENTRY *LPALISENABLED)(ALenum capability); typedef const ALchar* (AL_APIENTRY *LPALGETSTRING)(ALenum param); typedef void (AL_APIENTRY *LPALGETBOOLEANV)(ALenum param, ALboolean *values); typedef void (AL_APIENTRY *LPALGETINTEGERV)(ALenum param, ALint *values); typedef void (AL_APIENTRY *LPALGETFLOATV)(ALenum param, ALfloat *values); typedef void (AL_APIENTRY *LPALGETDOUBLEV)(ALenum param, ALdouble *values); typedef ALboolean (AL_APIENTRY *LPALGETBOOLEAN)(ALenum param); typedef ALint (AL_APIENTRY *LPALGETINTEGER)(ALenum param); typedef ALfloat (AL_APIENTRY *LPALGETFLOAT)(ALenum param); typedef ALdouble (AL_APIENTRY *LPALGETDOUBLE)(ALenum param); typedef ALenum (AL_APIENTRY *LPALGETERROR)(void); typedef ALboolean (AL_APIENTRY *LPALISEXTENSIONPRESENT)(const ALchar *extname); typedef void* (AL_APIENTRY *LPALGETPROCADDRESS)(const ALchar *fname); typedef ALenum (AL_APIENTRY *LPALGETENUMVALUE)(const ALchar *ename); typedef void (AL_APIENTRY *LPALLISTENERF)(ALenum param, ALfloat value); typedef void (AL_APIENTRY *LPALLISTENER3F)(ALenum param, ALfloat value1, ALfloat value2, ALfloat value3); typedef void (AL_APIENTRY *LPALLISTENERFV)(ALenum param, const ALfloat *values); typedef void (AL_APIENTRY *LPALLISTENERI)(ALenum param, ALint value); typedef void (AL_APIENTRY *LPALLISTENER3I)(ALenum param, ALint value1, ALint value2, ALint value3); typedef void (AL_APIENTRY *LPALLISTENERIV)(ALenum param, const ALint *values); typedef void (AL_APIENTRY *LPALGETLISTENERF)(ALenum param, ALfloat *value); typedef void (AL_APIENTRY *LPALGETLISTENER3F)(ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3); typedef void (AL_APIENTRY *LPALGETLISTENERFV)(ALenum param, ALfloat *values); typedef void (AL_APIENTRY *LPALGETLISTENERI)(ALenum param, ALint *value); typedef void (AL_APIENTRY *LPALGETLISTENER3I)(ALenum param, ALint *value1, ALint *value2, ALint *value3); typedef void (AL_APIENTRY *LPALGETLISTENERIV)(ALenum param, ALint *values); typedef void (AL_APIENTRY *LPALGENSOURCES)(ALsizei n, ALuint *sources); typedef void (AL_APIENTRY *LPALDELETESOURCES)(ALsizei n, const ALuint *sources); typedef ALboolean (AL_APIENTRY *LPALISSOURCE)(ALuint source); typedef void (AL_APIENTRY *LPALSOURCEF)(ALuint source, ALenum param, ALfloat value); typedef void (AL_APIENTRY *LPALSOURCE3F)(ALuint source, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3); typedef void (AL_APIENTRY *LPALSOURCEFV)(ALuint source, ALenum param, const ALfloat *values); typedef void (AL_APIENTRY *LPALSOURCEI)(ALuint source, ALenum param, ALint value); typedef void (AL_APIENTRY *LPALSOURCE3I)(ALuint source, ALenum param, ALint value1, ALint value2, ALint value3); typedef void (AL_APIENTRY *LPALSOURCEIV)(ALuint source, ALenum param, const ALint *values); typedef void (AL_APIENTRY *LPALGETSOURCEF)(ALuint source, ALenum param, ALfloat *value); typedef void (AL_APIENTRY *LPALGETSOURCE3F)(ALuint source, ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3); typedef void (AL_APIENTRY *LPALGETSOURCEFV)(ALuint source, ALenum param, ALfloat *values); typedef void (AL_APIENTRY *LPALGETSOURCEI)(ALuint source, ALenum param, ALint *value); typedef void (AL_APIENTRY *LPALGETSOURCE3I)(ALuint source, ALenum param, ALint *value1, ALint *value2, ALint *value3); typedef void (AL_APIENTRY *LPALGETSOURCEIV)(ALuint source, ALenum param, ALint *values); typedef void (AL_APIENTRY *LPALSOURCEPLAYV)(ALsizei n, const ALuint *sources); typedef void (AL_APIENTRY *LPALSOURCESTOPV)(ALsizei n, const ALuint *sources); typedef void (AL_APIENTRY *LPALSOURCEREWINDV)(ALsizei n, const ALuint *sources); typedef void (AL_APIENTRY *LPALSOURCEPAUSEV)(ALsizei n, const ALuint *sources); typedef void (AL_APIENTRY *LPALSOURCEPLAY)(ALuint source); typedef void (AL_APIENTRY *LPALSOURCESTOP)(ALuint source); typedef void (AL_APIENTRY *LPALSOURCEREWIND)(ALuint source); typedef void (AL_APIENTRY *LPALSOURCEPAUSE)(ALuint source); typedef void (AL_APIENTRY *LPALSOURCEQUEUEBUFFERS)(ALuint source, ALsizei nb, const ALuint *buffers); typedef void (AL_APIENTRY *LPALSOURCEUNQUEUEBUFFERS)(ALuint source, ALsizei nb, ALuint *buffers); typedef void (AL_APIENTRY *LPALGENBUFFERS)(ALsizei n, ALuint *buffers); typedef void (AL_APIENTRY *LPALDELETEBUFFERS)(ALsizei n, const ALuint *buffers); typedef ALboolean (AL_APIENTRY *LPALISBUFFER)(ALuint buffer); typedef void (AL_APIENTRY *LPALBUFFERDATA)(ALuint buffer, ALenum format, const ALvoid *data, ALsizei size, ALsizei freq); typedef void (AL_APIENTRY *LPALBUFFERF)(ALuint buffer, ALenum param, ALfloat value); typedef void (AL_APIENTRY *LPALBUFFER3F)(ALuint buffer, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3); typedef void (AL_APIENTRY *LPALBUFFERFV)(ALuint buffer, ALenum param, const ALfloat *values); typedef void (AL_APIENTRY *LPALBUFFERI)(ALuint buffer, ALenum param, ALint value); typedef void (AL_APIENTRY *LPALBUFFER3I)(ALuint buffer, ALenum param, ALint value1, ALint value2, ALint value3); typedef void (AL_APIENTRY *LPALBUFFERIV)(ALuint buffer, ALenum param, const ALint *values); typedef void (AL_APIENTRY *LPALGETBUFFERF)(ALuint buffer, ALenum param, ALfloat *value); typedef void (AL_APIENTRY *LPALGETBUFFER3F)(ALuint buffer, ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3); typedef void (AL_APIENTRY *LPALGETBUFFERFV)(ALuint buffer, ALenum param, ALfloat *values); typedef void (AL_APIENTRY *LPALGETBUFFERI)(ALuint buffer, ALenum param, ALint *value); typedef void (AL_APIENTRY *LPALGETBUFFER3I)(ALuint buffer, ALenum param, ALint *value1, ALint *value2, ALint *value3); typedef void (AL_APIENTRY *LPALGETBUFFERIV)(ALuint buffer, ALenum param, ALint *values); typedef void (AL_APIENTRY *LPALDOPPLERFACTOR)(ALfloat value); typedef void (AL_APIENTRY *LPALDOPPLERVELOCITY)(ALfloat value); typedef void (AL_APIENTRY *LPALSPEEDOFSOUND)(ALfloat value); typedef void (AL_APIENTRY *LPALDISTANCEMODEL)(ALenum distanceModel); #if defined(__cplusplus) } /* extern "C" */ #endif #endif /* AL_AL_H */ ================================================ FILE: libraries/openal/alc.h ================================================ #ifndef AL_ALC_H #define AL_ALC_H #if defined(__cplusplus) extern "C" { #endif #ifndef ALC_API #if defined(AL_LIBTYPE_STATIC) #define ALC_API #elif defined(_WIN32) #define ALC_API __declspec(dllimport) #else #define ALC_API extern #endif #endif #if defined(_WIN32) #define ALC_APIENTRY __cdecl #else #define ALC_APIENTRY #endif /* Deprecated macros. */ #define ALCAPI ALC_API #define ALCAPIENTRY ALC_APIENTRY #define ALC_INVALID 0 /** Supported ALC version? */ #define ALC_VERSION_0_1 1 /** Opaque device handle */ typedef struct ALCdevice ALCdevice; /** Opaque context handle */ typedef struct ALCcontext ALCcontext; /** 8-bit boolean */ typedef char ALCboolean; /** character */ typedef char ALCchar; /** signed 8-bit 2's complement integer */ typedef signed char ALCbyte; /** unsigned 8-bit integer */ typedef unsigned char ALCubyte; /** signed 16-bit 2's complement integer */ typedef short ALCshort; /** unsigned 16-bit integer */ typedef unsigned short ALCushort; /** signed 32-bit 2's complement integer */ typedef int ALCint; /** unsigned 32-bit integer */ typedef unsigned int ALCuint; /** non-negative 32-bit binary integer size */ typedef int ALCsizei; /** enumerated 32-bit value */ typedef int ALCenum; /** 32-bit IEEE754 floating-point */ typedef float ALCfloat; /** 64-bit IEEE754 floating-point */ typedef double ALCdouble; /** void type (for opaque pointers only) */ typedef void ALCvoid; /* Enumerant values begin at column 50. No tabs. */ /** Boolean False. */ #define ALC_FALSE 0 /** Boolean True. */ #define ALC_TRUE 1 /** Context attribute: Hz. */ #define ALC_FREQUENCY 0x1007 /** Context attribute: Hz. */ #define ALC_REFRESH 0x1008 /** Context attribute: AL_TRUE or AL_FALSE synchronous context? */ #define ALC_SYNC 0x1009 /** Context attribute: requested Mono (3D) Sources. */ #define ALC_MONO_SOURCES 0x1010 /** Context attribute: requested Stereo Sources. */ #define ALC_STEREO_SOURCES 0x1011 /** No error. */ #define ALC_NO_ERROR 0 /** Invalid device handle. */ #define ALC_INVALID_DEVICE 0xA001 /** Invalid context handle. */ #define ALC_INVALID_CONTEXT 0xA002 /** Invalid enum parameter passed to an ALC call. */ #define ALC_INVALID_ENUM 0xA003 /** Invalid value parameter passed to an ALC call. */ #define ALC_INVALID_VALUE 0xA004 /** Out of memory. */ #define ALC_OUT_OF_MEMORY 0xA005 /** Runtime ALC major version. */ #define ALC_MAJOR_VERSION 0x1000 /** Runtime ALC minor version. */ #define ALC_MINOR_VERSION 0x1001 /** Context attribute list size. */ #define ALC_ATTRIBUTES_SIZE 0x1002 /** Context attribute list properties. */ #define ALC_ALL_ATTRIBUTES 0x1003 /** String for the default device specifier. */ #define ALC_DEFAULT_DEVICE_SPECIFIER 0x1004 /** * String for the given device's specifier. * * If device handle is NULL, it is instead a null-char separated list of * strings of known device specifiers (list ends with an empty string). */ #define ALC_DEVICE_SPECIFIER 0x1005 /** String for space-separated list of ALC extensions. */ #define ALC_EXTENSIONS 0x1006 /** Capture extension */ #define ALC_EXT_CAPTURE 1 /** * String for the given capture device's specifier. * * If device handle is NULL, it is instead a null-char separated list of * strings of known capture device specifiers (list ends with an empty string). */ #define ALC_CAPTURE_DEVICE_SPECIFIER 0x310 /** String for the default capture device specifier. */ #define ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER 0x311 /** Number of sample frames available for capture. */ #define ALC_CAPTURE_SAMPLES 0x312 /** Enumerate All extension */ #define ALC_ENUMERATE_ALL_EXT 1 /** String for the default extended device specifier. */ #define ALC_DEFAULT_ALL_DEVICES_SPECIFIER 0x1012 /** * String for the given extended device's specifier. * * If device handle is NULL, it is instead a null-char separated list of * strings of known extended device specifiers (list ends with an empty string). */ #define ALC_ALL_DEVICES_SPECIFIER 0x1013 /* Context management. */ /** Create and attach a context to the given device. */ ALC_API ALCcontext* ALC_APIENTRY alcCreateContext(ALCdevice *device, const ALCint *attrlist); /** * Makes the given context the active process-wide context. Passing NULL clears * the active context. */ ALC_API ALCboolean ALC_APIENTRY alcMakeContextCurrent(ALCcontext *context); /** Resumes processing updates for the given context. */ ALC_API void ALC_APIENTRY alcProcessContext(ALCcontext *context); /** Suspends updates for the given context. */ ALC_API void ALC_APIENTRY alcSuspendContext(ALCcontext *context); /** Remove a context from its device and destroys it. */ ALC_API void ALC_APIENTRY alcDestroyContext(ALCcontext *context); /** Returns the currently active context. */ ALC_API ALCcontext* ALC_APIENTRY alcGetCurrentContext(void); /** Returns the device that a particular context is attached to. */ ALC_API ALCdevice* ALC_APIENTRY alcGetContextsDevice(ALCcontext *context); /* Device management. */ /** Opens the named playback device. */ ALC_API ALCdevice* ALC_APIENTRY alcOpenDevice(const ALCchar *devicename); /** Closes the given playback device. */ ALC_API ALCboolean ALC_APIENTRY alcCloseDevice(ALCdevice *device); /* Error support. */ /** Obtain the most recent Device error. */ ALC_API ALCenum ALC_APIENTRY alcGetError(ALCdevice *device); /* Extension support. */ /** * Query for the presence of an extension on the device. Pass a NULL device to * query a device-inspecific extension. */ ALC_API ALCboolean ALC_APIENTRY alcIsExtensionPresent(ALCdevice *device, const ALCchar *extname); /** * Retrieve the address of a function. Given a non-NULL device, the returned * function may be device-specific. */ ALC_API ALCvoid* ALC_APIENTRY alcGetProcAddress(ALCdevice *device, const ALCchar *funcname); /** * Retrieve the value of an enum. Given a non-NULL device, the returned value * may be device-specific. */ ALC_API ALCenum ALC_APIENTRY alcGetEnumValue(ALCdevice *device, const ALCchar *enumname); /* Query functions. */ /** Returns information about the device, and error strings. */ ALC_API const ALCchar* ALC_APIENTRY alcGetString(ALCdevice *device, ALCenum param); /** Returns information about the device and the version of OpenAL. */ ALC_API void ALC_APIENTRY alcGetIntegerv(ALCdevice *device, ALCenum param, ALCsizei size, ALCint *values); /* Capture functions. */ /** * Opens the named capture device with the given frequency, format, and buffer * size. */ ALC_API ALCdevice* ALC_APIENTRY alcCaptureOpenDevice(const ALCchar *devicename, ALCuint frequency, ALCenum format, ALCsizei buffersize); /** Closes the given capture device. */ ALC_API ALCboolean ALC_APIENTRY alcCaptureCloseDevice(ALCdevice *device); /** Starts capturing samples into the device buffer. */ ALC_API void ALC_APIENTRY alcCaptureStart(ALCdevice *device); /** Stops capturing samples. Samples in the device buffer remain available. */ ALC_API void ALC_APIENTRY alcCaptureStop(ALCdevice *device); /** Reads samples from the device buffer. */ ALC_API void ALC_APIENTRY alcCaptureSamples(ALCdevice *device, ALCvoid *buffer, ALCsizei samples); /* Pointer-to-function type, useful for dynamically getting ALC entry points. */ typedef ALCcontext* (ALC_APIENTRY *LPALCCREATECONTEXT)(ALCdevice *device, const ALCint *attrlist); typedef ALCboolean (ALC_APIENTRY *LPALCMAKECONTEXTCURRENT)(ALCcontext *context); typedef void (ALC_APIENTRY *LPALCPROCESSCONTEXT)(ALCcontext *context); typedef void (ALC_APIENTRY *LPALCSUSPENDCONTEXT)(ALCcontext *context); typedef void (ALC_APIENTRY *LPALCDESTROYCONTEXT)(ALCcontext *context); typedef ALCcontext* (ALC_APIENTRY *LPALCGETCURRENTCONTEXT)(void); typedef ALCdevice* (ALC_APIENTRY *LPALCGETCONTEXTSDEVICE)(ALCcontext *context); typedef ALCdevice* (ALC_APIENTRY *LPALCOPENDEVICE)(const ALCchar *devicename); typedef ALCboolean (ALC_APIENTRY *LPALCCLOSEDEVICE)(ALCdevice *device); typedef ALCenum (ALC_APIENTRY *LPALCGETERROR)(ALCdevice *device); typedef ALCboolean (ALC_APIENTRY *LPALCISEXTENSIONPRESENT)(ALCdevice *device, const ALCchar *extname); typedef ALCvoid* (ALC_APIENTRY *LPALCGETPROCADDRESS)(ALCdevice *device, const ALCchar *funcname); typedef ALCenum (ALC_APIENTRY *LPALCGETENUMVALUE)(ALCdevice *device, const ALCchar *enumname); typedef const ALCchar* (ALC_APIENTRY *LPALCGETSTRING)(ALCdevice *device, ALCenum param); typedef void (ALC_APIENTRY *LPALCGETINTEGERV)(ALCdevice *device, ALCenum param, ALCsizei size, ALCint *values); typedef ALCdevice* (ALC_APIENTRY *LPALCCAPTUREOPENDEVICE)(const ALCchar *devicename, ALCuint frequency, ALCenum format, ALCsizei buffersize); typedef ALCboolean (ALC_APIENTRY *LPALCCAPTURECLOSEDEVICE)(ALCdevice *device); typedef void (ALC_APIENTRY *LPALCCAPTURESTART)(ALCdevice *device); typedef void (ALC_APIENTRY *LPALCCAPTURESTOP)(ALCdevice *device); typedef void (ALC_APIENTRY *LPALCCAPTURESAMPLES)(ALCdevice *device, ALCvoid *buffer, ALCsizei samples); #if defined(__cplusplus) } #endif #endif /* AL_ALC_H */ ================================================ FILE: libraries/portaudio/portaudio.h ================================================ #ifndef PORTAUDIO_H #define PORTAUDIO_H /* * $Id$ * PortAudio Portable Real-Time Audio Library * PortAudio API Header File * Latest version available at: http://www.portaudio.com/ * * Copyright (c) 1999-2002 Ross Bencina and Phil Burk * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files * (the "Software"), to deal in the Software without restriction, * including without limitation the rights to use, copy, modify, merge, * publish, distribute, sublicense, and/or sell copies of the Software, * and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* * The text above constitutes the entire PortAudio license; however, * the PortAudio community also makes the following non-binding requests: * * Any person wishing to distribute modifications to the Software is * requested to send the modifications to the original developer so that * they can be incorporated into the canonical version. It is also * requested that these non-binding requests be included along with the * license above. */ /** @file @ingroup public_header @brief The portable PortAudio API. */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** Retrieve the release number of the currently running PortAudio build. For example, for version "19.5.1" this will return 0x00130501. @see paMakeVersionNumber */ int Pa_GetVersion( void ); /** Retrieve a textual description of the current PortAudio build, e.g. "PortAudio V19.5.0-devel, revision 1952M". The format of the text may change in the future. Do not try to parse the returned string. @deprecated As of 19.5.0, use Pa_GetVersionInfo()->versionText instead. */ const char* Pa_GetVersionText( void ); /** Generate a packed integer version number in the same format used by Pa_GetVersion(). Use this to compare a specified version number with the currently running version. For example: @code if( Pa_GetVersion() < paMakeVersionNumber(19,5,1) ) {} @endcode @see Pa_GetVersion, Pa_GetVersionInfo @version Available as of 19.5.0. */ #define paMakeVersionNumber(major, minor, subminor) \ (((major)&0xFF)<<16 | ((minor)&0xFF)<<8 | ((subminor)&0xFF)) /** A structure containing PortAudio API version information. @see Pa_GetVersionInfo, paMakeVersionNumber @version Available as of 19.5.0. */ typedef struct PaVersionInfo { int versionMajor; int versionMinor; int versionSubMinor; /** This is currently the Git revision hash but may change in the future. The versionControlRevision is updated by running a script before compiling the library. If the update does not occur, this value may refer to an earlier revision. */ const char *versionControlRevision; /** Version as a string, for example "PortAudio V19.5.0-devel, revision 1952M" */ const char *versionText; } PaVersionInfo; /** Retrieve version information for the currently running PortAudio build. @return A pointer to an immutable PaVersionInfo structure. @note This function can be called at any time. It does not require PortAudio to be initialized. The structure pointed to is statically allocated. Do not attempt to free it or modify it. @see PaVersionInfo, paMakeVersionNumber @version Available as of 19.5.0. */ const PaVersionInfo* Pa_GetVersionInfo( void ); /** Error codes returned by PortAudio functions. Note that with the exception of paNoError, all PaErrorCodes are negative. */ typedef int PaError; typedef enum PaErrorCode { paNoError = 0, paNotInitialized = -10000, paUnanticipatedHostError, paInvalidChannelCount, paInvalidSampleRate, paInvalidDevice, paInvalidFlag, paSampleFormatNotSupported, paBadIODeviceCombination, paInsufficientMemory, paBufferTooBig, paBufferTooSmall, paNullCallback, paBadStreamPtr, paTimedOut, paInternalError, paDeviceUnavailable, paIncompatibleHostApiSpecificStreamInfo, paStreamIsStopped, paStreamIsNotStopped, paInputOverflowed, paOutputUnderflowed, paHostApiNotFound, paInvalidHostApi, paCanNotReadFromACallbackStream, paCanNotWriteToACallbackStream, paCanNotReadFromAnOutputOnlyStream, paCanNotWriteToAnInputOnlyStream, paIncompatibleStreamHostApi, paBadBufferPtr } PaErrorCode; /** Translate the supplied PortAudio error code into a human readable message. */ const char *Pa_GetErrorText( PaError errorCode ); /** Library initialization function - call this before using PortAudio. This function initializes internal data structures and prepares underlying host APIs for use. With the exception of Pa_GetVersion(), Pa_GetVersionText(), and Pa_GetErrorText(), this function MUST be called before using any other PortAudio API functions. If Pa_Initialize() is called multiple times, each successful call must be matched with a corresponding call to Pa_Terminate(). Pairs of calls to Pa_Initialize()/Pa_Terminate() may overlap, and are not required to be fully nested. Note that if Pa_Initialize() returns an error code, Pa_Terminate() should NOT be called. @return paNoError if successful, otherwise an error code indicating the cause of failure. @see Pa_Terminate */ PaError Pa_Initialize( void ); /** Library termination function - call this when finished using PortAudio. This function deallocates all resources allocated by PortAudio since it was initialized by a call to Pa_Initialize(). In cases where Pa_Initialise() has been called multiple times, each call must be matched with a corresponding call to Pa_Terminate(). The final matching call to Pa_Terminate() will automatically close any PortAudio streams that are still open. Pa_Terminate() MUST be called before exiting a program which uses PortAudio. Failure to do so may result in serious resource leaks, such as audio devices not being available until the next reboot. @return paNoError if successful, otherwise an error code indicating the cause of failure. @see Pa_Initialize */ PaError Pa_Terminate( void ); /** The type used to refer to audio devices. Values of this type usually range from 0 to (Pa_GetDeviceCount()-1), and may also take on the PaNoDevice and paUseHostApiSpecificDeviceSpecification values. @see Pa_GetDeviceCount, paNoDevice, paUseHostApiSpecificDeviceSpecification */ typedef int PaDeviceIndex; /** A special PaDeviceIndex value indicating that no device is available, or should be used. @see PaDeviceIndex */ #define paNoDevice ((PaDeviceIndex)-1) /** A special PaDeviceIndex value indicating that the device(s) to be used are specified in the host api specific stream info structure. @see PaDeviceIndex */ #define paUseHostApiSpecificDeviceSpecification ((PaDeviceIndex)-2) /* Host API enumeration mechanism */ /** The type used to enumerate to host APIs at runtime. Values of this type range from 0 to (Pa_GetHostApiCount()-1). @see Pa_GetHostApiCount */ typedef int PaHostApiIndex; /** Retrieve the number of available host APIs. Even if a host API is available it may have no devices available. @return A non-negative value indicating the number of available host APIs or, a PaErrorCode (which are always negative) if PortAudio is not initialized or an error is encountered. @see PaHostApiIndex */ PaHostApiIndex Pa_GetHostApiCount( void ); /** Retrieve the index of the default host API. The default host API will be the lowest common denominator host API on the current platform and is unlikely to provide the best performance. @return A non-negative value ranging from 0 to (Pa_GetHostApiCount()-1) indicating the default host API index or, a PaErrorCode (which are always negative) if PortAudio is not initialized or an error is encountered. */ PaHostApiIndex Pa_GetDefaultHostApi( void ); /** Unchanging unique identifiers for each supported host API. This type is used in the PaHostApiInfo structure. The values are guaranteed to be unique and to never change, thus allowing code to be written that conditionally uses host API specific extensions. New type ids will be allocated when support for a host API reaches "public alpha" status, prior to that developers should use the paInDevelopment type id. @see PaHostApiInfo */ typedef enum PaHostApiTypeId { paInDevelopment=0, /* use while developing support for a new host API */ paDirectSound=1, paMME=2, paASIO=3, paSoundManager=4, paCoreAudio=5, paOSS=7, paALSA=8, paAL=9, paBeOS=10, paWDMKS=11, paJACK=12, paWASAPI=13, paAudioScienceHPI=14 } PaHostApiTypeId; /** A structure containing information about a particular host API. */ typedef struct PaHostApiInfo { /** this is struct version 1 */ int structVersion; /** The well known unique identifier of this host API @see PaHostApiTypeId */ PaHostApiTypeId type; /** A textual description of the host API for display on user interfaces. */ const char *name; /** The number of devices belonging to this host API. This field may be used in conjunction with Pa_HostApiDeviceIndexToDeviceIndex() to enumerate all devices for this host API. @see Pa_HostApiDeviceIndexToDeviceIndex */ int deviceCount; /** The default input device for this host API. The value will be a device index ranging from 0 to (Pa_GetDeviceCount()-1), or paNoDevice if no default input device is available. */ PaDeviceIndex defaultInputDevice; /** The default output device for this host API. The value will be a device index ranging from 0 to (Pa_GetDeviceCount()-1), or paNoDevice if no default output device is available. */ PaDeviceIndex defaultOutputDevice; } PaHostApiInfo; /** Retrieve a pointer to a structure containing information about a specific host Api. @param hostApi A valid host API index ranging from 0 to (Pa_GetHostApiCount()-1) @return A pointer to an immutable PaHostApiInfo structure describing a specific host API. If the hostApi parameter is out of range or an error is encountered, the function returns NULL. The returned structure is owned by the PortAudio implementation and must not be manipulated or freed. The pointer is only guaranteed to be valid between calls to Pa_Initialize() and Pa_Terminate(). */ const PaHostApiInfo * Pa_GetHostApiInfo( PaHostApiIndex hostApi ); /** Convert a static host API unique identifier, into a runtime host API index. @param type A unique host API identifier belonging to the PaHostApiTypeId enumeration. @return A valid PaHostApiIndex ranging from 0 to (Pa_GetHostApiCount()-1) or, a PaErrorCode (which are always negative) if PortAudio is not initialized or an error is encountered. The paHostApiNotFound error code indicates that the host API specified by the type parameter is not available. @see PaHostApiTypeId */ PaHostApiIndex Pa_HostApiTypeIdToHostApiIndex( PaHostApiTypeId type ); /** Convert a host-API-specific device index to standard PortAudio device index. This function may be used in conjunction with the deviceCount field of PaHostApiInfo to enumerate all devices for the specified host API. @param hostApi A valid host API index ranging from 0 to (Pa_GetHostApiCount()-1) @param hostApiDeviceIndex A valid per-host device index in the range 0 to (Pa_GetHostApiInfo(hostApi)->deviceCount-1) @return A non-negative PaDeviceIndex ranging from 0 to (Pa_GetDeviceCount()-1) or, a PaErrorCode (which are always negative) if PortAudio is not initialized or an error is encountered. A paInvalidHostApi error code indicates that the host API index specified by the hostApi parameter is out of range. A paInvalidDevice error code indicates that the hostApiDeviceIndex parameter is out of range. @see PaHostApiInfo */ PaDeviceIndex Pa_HostApiDeviceIndexToDeviceIndex( PaHostApiIndex hostApi, int hostApiDeviceIndex ); /** Structure used to return information about a host error condition. */ typedef struct PaHostErrorInfo{ PaHostApiTypeId hostApiType; /**< the host API which returned the error code */ long errorCode; /**< the error code returned */ const char *errorText; /**< a textual description of the error if available, otherwise a zero-length string */ }PaHostErrorInfo; /** Return information about the last host error encountered. The error information returned by Pa_GetLastHostErrorInfo() will never be modified asynchronously by errors occurring in other PortAudio owned threads (such as the thread that manages the stream callback.) This function is provided as a last resort, primarily to enhance debugging by providing clients with access to all available error information. @return A pointer to an immutable structure constraining information about the host error. The values in this structure will only be valid if a PortAudio function has previously returned the paUnanticipatedHostError error code. */ const PaHostErrorInfo* Pa_GetLastHostErrorInfo( void ); /* Device enumeration and capabilities */ /** Retrieve the number of available devices. The number of available devices may be zero. @return A non-negative value indicating the number of available devices or, a PaErrorCode (which are always negative) if PortAudio is not initialized or an error is encountered. */ PaDeviceIndex Pa_GetDeviceCount( void ); /** Retrieve the index of the default input device. The result can be used in the inputDevice parameter to Pa_OpenStream(). @return The default input device index for the default host API, or paNoDevice if no default input device is available or an error was encountered. */ PaDeviceIndex Pa_GetDefaultInputDevice( void ); /** Retrieve the index of the default output device. The result can be used in the outputDevice parameter to Pa_OpenStream(). @return The default output device index for the default host API, or paNoDevice if no default output device is available or an error was encountered. @note On the PC, the user can specify a default device by setting an environment variable. For example, to use device #1.
     set PA_RECOMMENDED_OUTPUT_DEVICE=1
    
    The user should first determine the available device ids by using the supplied application "pa_devs". */ PaDeviceIndex Pa_GetDefaultOutputDevice( void ); /** The type used to represent monotonic time in seconds. PaTime is used for the fields of the PaStreamCallbackTimeInfo argument to the PaStreamCallback and as the result of Pa_GetStreamTime(). PaTime values have unspecified origin. @see PaStreamCallback, PaStreamCallbackTimeInfo, Pa_GetStreamTime */ typedef double PaTime; /** A type used to specify one or more sample formats. Each value indicates a possible format for sound data passed to and from the stream callback, Pa_ReadStream and Pa_WriteStream. The standard formats paFloat32, paInt16, paInt32, paInt24, paInt8 and aUInt8 are usually implemented by all implementations. The floating point representation (paFloat32) uses +1.0 and -1.0 as the maximum and minimum respectively. paUInt8 is an unsigned 8 bit format where 128 is considered "ground" The paNonInterleaved flag indicates that audio data is passed as an array of pointers to separate buffers, one buffer for each channel. Usually, when this flag is not used, audio data is passed as a single buffer with all channels interleaved. @see Pa_OpenStream, Pa_OpenDefaultStream, PaDeviceInfo @see paFloat32, paInt16, paInt32, paInt24, paInt8 @see paUInt8, paCustomFormat, paNonInterleaved */ typedef unsigned long PaSampleFormat; #define paFloat32 ((PaSampleFormat) 0x00000001) /**< @see PaSampleFormat */ #define paInt32 ((PaSampleFormat) 0x00000002) /**< @see PaSampleFormat */ #define paInt24 ((PaSampleFormat) 0x00000004) /**< Packed 24 bit format. @see PaSampleFormat */ #define paInt16 ((PaSampleFormat) 0x00000008) /**< @see PaSampleFormat */ #define paInt8 ((PaSampleFormat) 0x00000010) /**< @see PaSampleFormat */ #define paUInt8 ((PaSampleFormat) 0x00000020) /**< @see PaSampleFormat */ #define paCustomFormat ((PaSampleFormat) 0x00010000) /**< @see PaSampleFormat */ #define paNonInterleaved ((PaSampleFormat) 0x80000000) /**< @see PaSampleFormat */ /** A structure providing information and capabilities of PortAudio devices. Devices may support input, output or both input and output. */ typedef struct PaDeviceInfo { int structVersion; /* this is struct version 2 */ const char *name; PaHostApiIndex hostApi; /**< note this is a host API index, not a type id*/ int maxInputChannels; int maxOutputChannels; /** Default latency values for interactive performance. */ PaTime defaultLowInputLatency; PaTime defaultLowOutputLatency; /** Default latency values for robust non-interactive applications (eg. playing sound files). */ PaTime defaultHighInputLatency; PaTime defaultHighOutputLatency; double defaultSampleRate; } PaDeviceInfo; /** Retrieve a pointer to a PaDeviceInfo structure containing information about the specified device. @return A pointer to an immutable PaDeviceInfo structure. If the device parameter is out of range the function returns NULL. @param device A valid device index in the range 0 to (Pa_GetDeviceCount()-1) @note PortAudio manages the memory referenced by the returned pointer, the client must not manipulate or free the memory. The pointer is only guaranteed to be valid between calls to Pa_Initialize() and Pa_Terminate(). @see PaDeviceInfo, PaDeviceIndex */ const PaDeviceInfo* Pa_GetDeviceInfo( PaDeviceIndex device ); /** Parameters for one direction (input or output) of a stream. */ typedef struct PaStreamParameters { /** A valid device index in the range 0 to (Pa_GetDeviceCount()-1) specifying the device to be used or the special constant paUseHostApiSpecificDeviceSpecification which indicates that the actual device(s) to use are specified in hostApiSpecificStreamInfo. This field must not be set to paNoDevice. */ PaDeviceIndex device; /** The number of channels of sound to be delivered to the stream callback or accessed by Pa_ReadStream() or Pa_WriteStream(). It can range from 1 to the value of maxInputChannels in the PaDeviceInfo record for the device specified by the device parameter. */ int channelCount; /** The sample format of the buffer provided to the stream callback, a_ReadStream() or Pa_WriteStream(). It may be any of the formats described by the PaSampleFormat enumeration. */ PaSampleFormat sampleFormat; /** The desired latency in seconds. Where practical, implementations should configure their latency based on these parameters, otherwise they may choose the closest viable latency instead. Unless the suggested latency is greater than the absolute upper limit for the device implementations should round the suggestedLatency up to the next practical value - ie to provide an equal or higher latency than suggestedLatency wherever possible. Actual latency values for an open stream may be retrieved using the inputLatency and outputLatency fields of the PaStreamInfo structure returned by Pa_GetStreamInfo(). @see default*Latency in PaDeviceInfo, *Latency in PaStreamInfo */ PaTime suggestedLatency; /** An optional pointer to a host api specific data structure containing additional information for device setup and/or stream processing. hostApiSpecificStreamInfo is never required for correct operation, if not used it should be set to NULL. */ void *hostApiSpecificStreamInfo; } PaStreamParameters; /** Return code for Pa_IsFormatSupported indicating success. */ #define paFormatIsSupported (0) /** Determine whether it would be possible to open a stream with the specified parameters. @param inputParameters A structure that describes the input parameters used to open a stream. The suggestedLatency field is ignored. See PaStreamParameters for a description of these parameters. inputParameters must be NULL for output-only streams. @param outputParameters A structure that describes the output parameters used to open a stream. The suggestedLatency field is ignored. See PaStreamParameters for a description of these parameters. outputParameters must be NULL for input-only streams. @param sampleRate The required sampleRate. For full-duplex streams it is the sample rate for both input and output @return Returns 0 if the format is supported, and an error code indicating why the format is not supported otherwise. The constant paFormatIsSupported is provided to compare with the return value for success. @see paFormatIsSupported, PaStreamParameters */ PaError Pa_IsFormatSupported( const PaStreamParameters *inputParameters, const PaStreamParameters *outputParameters, double sampleRate ); /* Streaming types and functions */ /** A single PaStream can provide multiple channels of real-time streaming audio input and output to a client application. A stream provides access to audio hardware represented by one or more PaDevices. Depending on the underlying Host API, it may be possible to open multiple streams using the same device, however this behavior is implementation defined. Portable applications should assume that a PaDevice may be simultaneously used by at most one PaStream. Pointers to PaStream objects are passed between PortAudio functions that operate on streams. @see Pa_OpenStream, Pa_OpenDefaultStream, Pa_OpenDefaultStream, Pa_CloseStream, Pa_StartStream, Pa_StopStream, Pa_AbortStream, Pa_IsStreamActive, Pa_GetStreamTime, Pa_GetStreamCpuLoad */ typedef void PaStream; /** Can be passed as the framesPerBuffer parameter to Pa_OpenStream() or Pa_OpenDefaultStream() to indicate that the stream callback will accept buffers of any size. */ #define paFramesPerBufferUnspecified (0) /** Flags used to control the behavior of a stream. They are passed as parameters to Pa_OpenStream or Pa_OpenDefaultStream. Multiple flags may be ORed together. @see Pa_OpenStream, Pa_OpenDefaultStream @see paNoFlag, paClipOff, paDitherOff, paNeverDropInput, paPrimeOutputBuffersUsingStreamCallback, paPlatformSpecificFlags */ typedef unsigned long PaStreamFlags; /** @see PaStreamFlags */ #define paNoFlag ((PaStreamFlags) 0) /** Disable default clipping of out of range samples. @see PaStreamFlags */ #define paClipOff ((PaStreamFlags) 0x00000001) /** Disable default dithering. @see PaStreamFlags */ #define paDitherOff ((PaStreamFlags) 0x00000002) /** Flag requests that where possible a full duplex stream will not discard overflowed input samples without calling the stream callback. This flag is only valid for full duplex callback streams and only when used in combination with the paFramesPerBufferUnspecified (0) framesPerBuffer parameter. Using this flag incorrectly results in a paInvalidFlag error being returned from Pa_OpenStream and Pa_OpenDefaultStream. @see PaStreamFlags, paFramesPerBufferUnspecified */ #define paNeverDropInput ((PaStreamFlags) 0x00000004) /** Call the stream callback to fill initial output buffers, rather than the default behavior of priming the buffers with zeros (silence). This flag has no effect for input-only and blocking read/write streams. @see PaStreamFlags */ #define paPrimeOutputBuffersUsingStreamCallback ((PaStreamFlags) 0x00000008) /** A mask specifying the platform specific bits. @see PaStreamFlags */ #define paPlatformSpecificFlags ((PaStreamFlags)0xFFFF0000) /** Timing information for the buffers passed to the stream callback. Time values are expressed in seconds and are synchronised with the time base used by Pa_GetStreamTime() for the associated stream. @see PaStreamCallback, Pa_GetStreamTime */ typedef struct PaStreamCallbackTimeInfo{ PaTime inputBufferAdcTime; /**< The time when the first sample of the input buffer was captured at the ADC input */ PaTime currentTime; /**< The time when the stream callback was invoked */ PaTime outputBufferDacTime; /**< The time when the first sample of the output buffer will output the DAC */ } PaStreamCallbackTimeInfo; /** Flag bit constants for the statusFlags to PaStreamCallback. @see paInputUnderflow, paInputOverflow, paOutputUnderflow, paOutputOverflow, paPrimingOutput */ typedef unsigned long PaStreamCallbackFlags; /** In a stream opened with paFramesPerBufferUnspecified, indicates that input data is all silence (zeros) because no real data is available. In a stream opened without paFramesPerBufferUnspecified, it indicates that one or more zero samples have been inserted into the input buffer to compensate for an input underflow. @see PaStreamCallbackFlags */ #define paInputUnderflow ((PaStreamCallbackFlags) 0x00000001) /** In a stream opened with paFramesPerBufferUnspecified, indicates that data prior to the first sample of the input buffer was discarded due to an overflow, possibly because the stream callback is using too much CPU time. Otherwise indicates that data prior to one or more samples in the input buffer was discarded. @see PaStreamCallbackFlags */ #define paInputOverflow ((PaStreamCallbackFlags) 0x00000002) /** Indicates that output data (or a gap) was inserted, possibly because the stream callback is using too much CPU time. @see PaStreamCallbackFlags */ #define paOutputUnderflow ((PaStreamCallbackFlags) 0x00000004) /** Indicates that output data will be discarded because no room is available. @see PaStreamCallbackFlags */ #define paOutputOverflow ((PaStreamCallbackFlags) 0x00000008) /** Some of all of the output data will be used to prime the stream, input data may be zero. @see PaStreamCallbackFlags */ #define paPrimingOutput ((PaStreamCallbackFlags) 0x00000010) /** Allowable return values for the PaStreamCallback. @see PaStreamCallback */ typedef enum PaStreamCallbackResult { paContinue=0, /**< Signal that the stream should continue invoking the callback and processing audio. */ paComplete=1, /**< Signal that the stream should stop invoking the callback and finish once all output samples have played. */ paAbort=2 /**< Signal that the stream should stop invoking the callback and finish as soon as possible. */ } PaStreamCallbackResult; /** Functions of type PaStreamCallback are implemented by PortAudio clients. They consume, process or generate audio in response to requests from an active PortAudio stream. When a stream is running, PortAudio calls the stream callback periodically. The callback function is responsible for processing buffers of audio samples passed via the input and output parameters. The PortAudio stream callback runs at very high or real-time priority. It is required to consistently meet its time deadlines. Do not allocate memory, access the file system, call library functions or call other functions from the stream callback that may block or take an unpredictable amount of time to complete. In order for a stream to maintain glitch-free operation the callback must consume and return audio data faster than it is recorded and/or played. PortAudio anticipates that each callback invocation may execute for a duration approaching the duration of frameCount audio frames at the stream sample rate. It is reasonable to expect to be able to utilise 70% or more of the available CPU time in the PortAudio callback. However, due to buffer size adaption and other factors, not all host APIs are able to guarantee audio stability under heavy CPU load with arbitrary fixed callback buffer sizes. When high callback CPU utilisation is required the most robust behavior can be achieved by using paFramesPerBufferUnspecified as the Pa_OpenStream() framesPerBuffer parameter. @param input and @param output are either arrays of interleaved samples or; if non-interleaved samples were requested using the paNonInterleaved sample format flag, an array of buffer pointers, one non-interleaved buffer for each channel. The format, packing and number of channels used by the buffers are determined by parameters to Pa_OpenStream(). @param frameCount The number of sample frames to be processed by the stream callback. @param timeInfo Timestamps indicating the ADC capture time of the first sample in the input buffer, the DAC output time of the first sample in the output buffer and the time the callback was invoked. See PaStreamCallbackTimeInfo and Pa_GetStreamTime() @param statusFlags Flags indicating whether input and/or output buffers have been inserted or will be dropped to overcome underflow or overflow conditions. @param userData The value of a user supplied pointer passed to Pa_OpenStream() intended for storing synthesis data etc. @return The stream callback should return one of the values in the ::PaStreamCallbackResult enumeration. To ensure that the callback continues to be called, it should return paContinue (0). Either paComplete or paAbort can be returned to finish stream processing, after either of these values is returned the callback will not be called again. If paAbort is returned the stream will finish as soon as possible. If paComplete is returned, the stream will continue until all buffers generated by the callback have been played. This may be useful in applications such as soundfile players where a specific duration of output is required. However, it is not necessary to utilize this mechanism as Pa_StopStream(), Pa_AbortStream() or Pa_CloseStream() can also be used to stop the stream. The callback must always fill the entire output buffer irrespective of its return value. @see Pa_OpenStream, Pa_OpenDefaultStream @note With the exception of Pa_GetStreamCpuLoad() it is not permissible to call PortAudio API functions from within the stream callback. */ typedef int PaStreamCallback( const void *input, void *output, unsigned long frameCount, const PaStreamCallbackTimeInfo* timeInfo, PaStreamCallbackFlags statusFlags, void *userData ); /** Opens a stream for either input, output or both. @param stream The address of a PaStream pointer which will receive a pointer to the newly opened stream. @param inputParameters A structure that describes the input parameters used by the opened stream. See PaStreamParameters for a description of these parameters. inputParameters must be NULL for output-only streams. @param outputParameters A structure that describes the output parameters used by the opened stream. See PaStreamParameters for a description of these parameters. outputParameters must be NULL for input-only streams. @param sampleRate The desired sampleRate. For full-duplex streams it is the sample rate for both input and output. Note that the actual sampleRate may differ very slightly from the desired rate because of hardware limitations. The exact rate can be queried using Pa_GetStreamInfo(). If nothing close to the desired sampleRate is available then the open will fail and return an error. @param framesPerBuffer The number of frames passed to the stream callback function, or the preferred block granularity for a blocking read/write stream. The special value paFramesPerBufferUnspecified (0) may be used to request that the stream callback will receive an optimal (and possibly varying) number of frames based on host requirements and the requested latency settings. Note: With some host APIs, the use of non-zero framesPerBuffer for a callback stream may introduce an additional layer of buffering which could introduce additional latency. PortAudio guarantees that the additional latency will be kept to the theoretical minimum however, it is strongly recommended that a non-zero framesPerBuffer value only be used when your algorithm requires a fixed number of frames per stream callback. @param streamFlags Flags which modify the behavior of the streaming process. This parameter may contain a combination of flags ORed together. Some flags may only be relevant to certain buffer formats. @param streamCallback A pointer to a client supplied function that is responsible for processing and filling input and output buffers. If this parameter is NULL the stream will be opened in 'blocking read/write' mode. In blocking mode, the client can receive sample data using Pa_ReadStream and write sample data using Pa_WriteStream, the number of samples that may be read or written without blocking is returned by Pa_GetStreamReadAvailable and Pa_GetStreamWriteAvailable respectively. @param userData A client supplied pointer which is passed to the stream callback function. It could for example, contain a pointer to instance data necessary for processing the audio buffers. This parameter is ignored if streamCallback is NULL. @return Upon success Pa_OpenStream() returns paNoError and places a pointer to a valid PaStream in the stream argument. The stream is inactive (stopped). If a call to Pa_OpenStream() fails, a non-zero error code is returned (see PaError for possible error codes) and the value of stream is invalid. @see PaStreamParameters, PaStreamCallback, Pa_ReadStream, Pa_WriteStream, Pa_GetStreamReadAvailable, Pa_GetStreamWriteAvailable */ PaError Pa_OpenStream( PaStream** stream, const PaStreamParameters *inputParameters, const PaStreamParameters *outputParameters, double sampleRate, unsigned long framesPerBuffer, PaStreamFlags streamFlags, PaStreamCallback *streamCallback, void *userData ); /** A simplified version of Pa_OpenStream() that opens the default input and/or output devices. @param stream The address of a PaStream pointer which will receive a pointer to the newly opened stream. @param numInputChannels The number of channels of sound that will be supplied to the stream callback or returned by Pa_ReadStream. It can range from 1 to the value of maxInputChannels in the PaDeviceInfo record for the default input device. If 0 the stream is opened as an output-only stream. @param numOutputChannels The number of channels of sound to be delivered to the stream callback or passed to Pa_WriteStream. It can range from 1 to the value of maxOutputChannels in the PaDeviceInfo record for the default output device. If 0 the stream is opened as an output-only stream. @param sampleFormat The sample format of both the input and output buffers provided to the callback or passed to and from Pa_ReadStream and Pa_WriteStream. sampleFormat may be any of the formats described by the PaSampleFormat enumeration. @param sampleRate Same as Pa_OpenStream parameter of the same name. @param framesPerBuffer Same as Pa_OpenStream parameter of the same name. @param streamCallback Same as Pa_OpenStream parameter of the same name. @param userData Same as Pa_OpenStream parameter of the same name. @return As for Pa_OpenStream @see Pa_OpenStream, PaStreamCallback */ PaError Pa_OpenDefaultStream( PaStream** stream, int numInputChannels, int numOutputChannels, PaSampleFormat sampleFormat, double sampleRate, unsigned long framesPerBuffer, PaStreamCallback *streamCallback, void *userData ); /** Closes an audio stream. If the audio stream is active it discards any pending buffers as if Pa_AbortStream() had been called. */ PaError Pa_CloseStream( PaStream *stream ); /** Functions of type PaStreamFinishedCallback are implemented by PortAudio clients. They can be registered with a stream using the Pa_SetStreamFinishedCallback function. Once registered they are called when the stream becomes inactive (ie once a call to Pa_StopStream() will not block). A stream will become inactive after the stream callback returns non-zero, or when Pa_StopStream or Pa_AbortStream is called. For a stream providing audio output, if the stream callback returns paComplete, or Pa_StopStream() is called, the stream finished callback will not be called until all generated sample data has been played. @param userData The userData parameter supplied to Pa_OpenStream() @see Pa_SetStreamFinishedCallback */ typedef void PaStreamFinishedCallback( void *userData ); /** Register a stream finished callback function which will be called when the stream becomes inactive. See the description of PaStreamFinishedCallback for further details about when the callback will be called. @param stream a pointer to a PaStream that is in the stopped state - if the stream is not stopped, the stream's finished callback will remain unchanged and an error code will be returned. @param streamFinishedCallback a pointer to a function with the same signature as PaStreamFinishedCallback, that will be called when the stream becomes inactive. Passing NULL for this parameter will un-register a previously registered stream finished callback function. @return on success returns paNoError, otherwise an error code indicating the cause of the error. @see PaStreamFinishedCallback */ PaError Pa_SetStreamFinishedCallback( PaStream *stream, PaStreamFinishedCallback* streamFinishedCallback ); /** Commences audio processing. */ PaError Pa_StartStream( PaStream *stream ); /** Terminates audio processing. It waits until all pending audio buffers have been played before it returns. */ PaError Pa_StopStream( PaStream *stream ); /** Terminates audio processing immediately without waiting for pending buffers to complete. */ PaError Pa_AbortStream( PaStream *stream ); /** Determine whether the stream is stopped. A stream is considered to be stopped prior to a successful call to Pa_StartStream and after a successful call to Pa_StopStream or Pa_AbortStream. If a stream callback returns a value other than paContinue the stream is NOT considered to be stopped. @return Returns one (1) when the stream is stopped, zero (0) when the stream is running or, a PaErrorCode (which are always negative) if PortAudio is not initialized or an error is encountered. @see Pa_StopStream, Pa_AbortStream, Pa_IsStreamActive */ PaError Pa_IsStreamStopped( PaStream *stream ); /** Determine whether the stream is active. A stream is active after a successful call to Pa_StartStream(), until it becomes inactive either as a result of a call to Pa_StopStream() or Pa_AbortStream(), or as a result of a return value other than paContinue from the stream callback. In the latter case, the stream is considered inactive after the last buffer has finished playing. @return Returns one (1) when the stream is active (ie playing or recording audio), zero (0) when not playing or, a PaErrorCode (which are always negative) if PortAudio is not initialized or an error is encountered. @see Pa_StopStream, Pa_AbortStream, Pa_IsStreamStopped */ PaError Pa_IsStreamActive( PaStream *stream ); /** A structure containing unchanging information about an open stream. @see Pa_GetStreamInfo */ typedef struct PaStreamInfo { /** this is struct version 1 */ int structVersion; /** The input latency of the stream in seconds. This value provides the most accurate estimate of input latency available to the implementation. It may differ significantly from the suggestedLatency value passed to Pa_OpenStream(). The value of this field will be zero (0.) for output-only streams. @see PaTime */ PaTime inputLatency; /** The output latency of the stream in seconds. This value provides the most accurate estimate of output latency available to the implementation. It may differ significantly from the suggestedLatency value passed to Pa_OpenStream(). The value of this field will be zero (0.) for input-only streams. @see PaTime */ PaTime outputLatency; /** The sample rate of the stream in Hertz (samples per second). In cases where the hardware sample rate is inaccurate and PortAudio is aware of it, the value of this field may be different from the sampleRate parameter passed to Pa_OpenStream(). If information about the actual hardware sample rate is not available, this field will have the same value as the sampleRate parameter passed to Pa_OpenStream(). */ double sampleRate; } PaStreamInfo; /** Retrieve a pointer to a PaStreamInfo structure containing information about the specified stream. @return A pointer to an immutable PaStreamInfo structure. If the stream parameter is invalid, or an error is encountered, the function returns NULL. @param stream A pointer to an open stream previously created with Pa_OpenStream. @note PortAudio manages the memory referenced by the returned pointer, the client must not manipulate or free the memory. The pointer is only guaranteed to be valid until the specified stream is closed. @see PaStreamInfo */ const PaStreamInfo* Pa_GetStreamInfo( PaStream *stream ); /** Returns the current time in seconds for a stream according to the same clock used to generate callback PaStreamCallbackTimeInfo timestamps. The time values are monotonically increasing and have unspecified origin. Pa_GetStreamTime returns valid time values for the entire life of the stream, from when the stream is opened until it is closed. Starting and stopping the stream does not affect the passage of time returned by Pa_GetStreamTime. This time may be used for synchronizing other events to the audio stream, for example synchronizing audio to MIDI. @return The stream's current time in seconds, or 0 if an error occurred. @see PaTime, PaStreamCallback, PaStreamCallbackTimeInfo */ PaTime Pa_GetStreamTime( PaStream *stream ); /** Retrieve CPU usage information for the specified stream. The "CPU Load" is a fraction of total CPU time consumed by a callback stream's audio processing routines including, but not limited to the client supplied stream callback. This function does not work with blocking read/write streams. This function may be called from the stream callback function or the application. @return A floating point value, typically between 0.0 and 1.0, where 1.0 indicates that the stream callback is consuming the maximum number of CPU cycles possible to maintain real-time operation. A value of 0.5 would imply that PortAudio and the stream callback was consuming roughly 50% of the available CPU time. The return value may exceed 1.0. A value of 0.0 will always be returned for a blocking read/write stream, or if an error occurs. */ double Pa_GetStreamCpuLoad( PaStream* stream ); /** Read samples from an input stream. The function doesn't return until the entire buffer has been filled - this may involve waiting for the operating system to supply the data. @param stream A pointer to an open stream previously created with Pa_OpenStream. @param buffer A pointer to a buffer of sample frames. The buffer contains samples in the format specified by the inputParameters->sampleFormat field used to open the stream, and the number of channels specified by inputParameters->numChannels. If non-interleaved samples were requested using the paNonInterleaved sample format flag, buffer is a pointer to the first element of an array of buffer pointers, one non-interleaved buffer for each channel. @param frames The number of frames to be read into buffer. This parameter is not constrained to a specific range, however high performance applications will want to match this parameter to the framesPerBuffer parameter used when opening the stream. @return On success PaNoError will be returned, or PaInputOverflowed if input data was discarded by PortAudio after the previous call and before this call. */ PaError Pa_ReadStream( PaStream* stream, void *buffer, unsigned long frames ); /** Write samples to an output stream. This function doesn't return until the entire buffer has been written - this may involve waiting for the operating system to consume the data. @param stream A pointer to an open stream previously created with Pa_OpenStream. @param buffer A pointer to a buffer of sample frames. The buffer contains samples in the format specified by the outputParameters->sampleFormat field used to open the stream, and the number of channels specified by outputParameters->numChannels. If non-interleaved samples were requested using the paNonInterleaved sample format flag, buffer is a pointer to the first element of an array of buffer pointers, one non-interleaved buffer for each channel. @param frames The number of frames to be written from buffer. This parameter is not constrained to a specific range, however high performance applications will want to match this parameter to the framesPerBuffer parameter used when opening the stream. @return On success PaNoError will be returned, or paOutputUnderflowed if additional output data was inserted after the previous call and before this call. */ PaError Pa_WriteStream( PaStream* stream, const void *buffer, unsigned long frames ); /** Retrieve the number of frames that can be read from the stream without waiting. @return Returns a non-negative value representing the maximum number of frames that can be read from the stream without blocking or busy waiting or, a PaErrorCode (which are always negative) if PortAudio is not initialized or an error is encountered. */ signed long Pa_GetStreamReadAvailable( PaStream* stream ); /** Retrieve the number of frames that can be written to the stream without waiting. @return Returns a non-negative value representing the maximum number of frames that can be written to the stream without blocking or busy waiting or, a PaErrorCode (which are always negative) if PortAudio is not initialized or an error is encountered. */ signed long Pa_GetStreamWriteAvailable( PaStream* stream ); /* Miscellaneous utilities */ /** Retrieve the size of a given sample format in bytes. @return The size in bytes of a single sample in the specified format, or paSampleFormatNotSupported if the format is not supported. */ PaError Pa_GetSampleSize( PaSampleFormat format ); /** Put the caller to sleep for at least 'msec' milliseconds. This function is provided only as a convenience for authors of portable code (such as the tests and examples in the PortAudio distribution.) The function may sleep longer than requested so don't rely on this for accurate musical timing. */ void Pa_Sleep( long msec ); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* PORTAUDIO_H */ ================================================ FILE: libraries/sdl2/SDL.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL.h * * Main include header for the SDL library */ #ifndef SDL_h_ #define SDL_h_ #include "SDL_main.h" #include "SDL_stdinc.h" #include "SDL_assert.h" #include "SDL_atomic.h" #include "SDL_audio.h" #include "SDL_clipboard.h" #include "SDL_cpuinfo.h" #include "SDL_endian.h" #include "SDL_error.h" #include "SDL_events.h" #include "SDL_filesystem.h" #include "SDL_gamecontroller.h" #include "SDL_guid.h" #include "SDL_haptic.h" #include "SDL_hidapi.h" #include "SDL_hints.h" #include "SDL_joystick.h" #include "SDL_loadso.h" #include "SDL_log.h" #include "SDL_messagebox.h" #include "SDL_metal.h" #include "SDL_mutex.h" #include "SDL_power.h" #include "SDL_render.h" #include "SDL_rwops.h" #include "SDL_sensor.h" #include "SDL_shape.h" #include "SDL_system.h" #include "SDL_thread.h" #include "SDL_timer.h" #include "SDL_version.h" #include "SDL_video.h" #include "SDL_locale.h" #include "SDL_misc.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /* As of version 0.5, SDL is loaded dynamically into the application */ /** * \name SDL_INIT_* * * These are the flags which may be passed to SDL_Init(). You should * specify the subsystems which you will be using in your application. */ /* @{ */ #define SDL_INIT_TIMER 0x00000001u #define SDL_INIT_AUDIO 0x00000010u #define SDL_INIT_VIDEO 0x00000020u /**< SDL_INIT_VIDEO implies SDL_INIT_EVENTS */ #define SDL_INIT_JOYSTICK 0x00000200u /**< SDL_INIT_JOYSTICK implies SDL_INIT_EVENTS */ #define SDL_INIT_HAPTIC 0x00001000u #define SDL_INIT_GAMECONTROLLER 0x00002000u /**< SDL_INIT_GAMECONTROLLER implies SDL_INIT_JOYSTICK */ #define SDL_INIT_EVENTS 0x00004000u #define SDL_INIT_SENSOR 0x00008000u #define SDL_INIT_NOPARACHUTE 0x00100000u /**< compatibility; this flag is ignored. */ #define SDL_INIT_EVERYTHING ( \ SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO | SDL_INIT_EVENTS | \ SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_GAMECONTROLLER | SDL_INIT_SENSOR \ ) /* @} */ /** * Initialize the SDL library. * * SDL_Init() simply forwards to calling SDL_InitSubSystem(). Therefore, the * two may be used interchangeably. Though for readability of your code * SDL_InitSubSystem() might be preferred. * * The file I/O (for example: SDL_RWFromFile) and threading (SDL_CreateThread) * subsystems are initialized by default. Message boxes * (SDL_ShowSimpleMessageBox) also attempt to work without initializing the * video subsystem, in hopes of being useful in showing an error dialog when * SDL_Init fails. You must specifically initialize other subsystems if you * use them in your application. * * Logging (such as SDL_Log) works without initialization, too. * * `flags` may be any of the following OR'd together: * * - `SDL_INIT_TIMER`: timer subsystem * - `SDL_INIT_AUDIO`: audio subsystem * - `SDL_INIT_VIDEO`: video subsystem; automatically initializes the events * subsystem * - `SDL_INIT_JOYSTICK`: joystick subsystem; automatically initializes the * events subsystem * - `SDL_INIT_HAPTIC`: haptic (force feedback) subsystem * - `SDL_INIT_GAMECONTROLLER`: controller subsystem; automatically * initializes the joystick subsystem * - `SDL_INIT_EVENTS`: events subsystem * - `SDL_INIT_EVERYTHING`: all of the above subsystems * - `SDL_INIT_NOPARACHUTE`: compatibility; this flag is ignored * * Subsystem initialization is ref-counted, you must call SDL_QuitSubSystem() * for each SDL_InitSubSystem() to correctly shutdown a subsystem manually (or * call SDL_Quit() to force shutdown). If a subsystem is already loaded then * this call will increase the ref-count and return. * * \param flags subsystem initialization flags * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_InitSubSystem * \sa SDL_Quit * \sa SDL_SetMainReady * \sa SDL_WasInit */ extern DECLSPEC int SDLCALL SDL_Init(Uint32 flags); /** * Compatibility function to initialize the SDL library. * * In SDL2, this function and SDL_Init() are interchangeable. * * \param flags any of the flags used by SDL_Init(); see SDL_Init for details. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_Init * \sa SDL_Quit * \sa SDL_QuitSubSystem */ extern DECLSPEC int SDLCALL SDL_InitSubSystem(Uint32 flags); /** * Shut down specific SDL subsystems. * * If you start a subsystem using a call to that subsystem's init function * (for example SDL_VideoInit()) instead of SDL_Init() or SDL_InitSubSystem(), * SDL_QuitSubSystem() and SDL_WasInit() will not work. You will need to use * that subsystem's quit function (SDL_VideoQuit()) directly instead. But * generally, you should not be using those functions directly anyhow; use * SDL_Init() instead. * * You still need to call SDL_Quit() even if you close all open subsystems * with SDL_QuitSubSystem(). * * \param flags any of the flags used by SDL_Init(); see SDL_Init for details. * * \since This function is available since SDL 2.0.0. * * \sa SDL_InitSubSystem * \sa SDL_Quit */ extern DECLSPEC void SDLCALL SDL_QuitSubSystem(Uint32 flags); /** * Get a mask of the specified subsystems which are currently initialized. * * \param flags any of the flags used by SDL_Init(); see SDL_Init for details. * \returns a mask of all initialized subsystems if `flags` is 0, otherwise it * returns the initialization status of the specified subsystems. * * The return value does not include SDL_INIT_NOPARACHUTE. * * \since This function is available since SDL 2.0.0. * * \sa SDL_Init * \sa SDL_InitSubSystem */ extern DECLSPEC Uint32 SDLCALL SDL_WasInit(Uint32 flags); /** * Clean up all initialized subsystems. * * You should call this function even if you have already shutdown each * initialized subsystem with SDL_QuitSubSystem(). It is safe to call this * function even in the case of errors in initialization. * * If you start a subsystem using a call to that subsystem's init function * (for example SDL_VideoInit()) instead of SDL_Init() or SDL_InitSubSystem(), * then you must use that subsystem's quit function (SDL_VideoQuit()) to shut * it down before calling SDL_Quit(). But generally, you should not be using * those functions directly anyhow; use SDL_Init() instead. * * You can use this function with atexit() to ensure that it is run when your * application is shutdown, but it is not wise to do this from a library or * other dynamically loaded code. * * \since This function is available since SDL 2.0.0. * * \sa SDL_Init * \sa SDL_QuitSubSystem */ extern DECLSPEC void SDLCALL SDL_Quit(void); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_assert.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef SDL_assert_h_ #define SDL_assert_h_ #include "SDL_stdinc.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif #ifndef SDL_ASSERT_LEVEL #ifdef SDL_DEFAULT_ASSERT_LEVEL #define SDL_ASSERT_LEVEL SDL_DEFAULT_ASSERT_LEVEL #elif defined(_DEBUG) || defined(DEBUG) || \ (defined(__GNUC__) && !defined(__OPTIMIZE__)) #define SDL_ASSERT_LEVEL 2 #else #define SDL_ASSERT_LEVEL 1 #endif #endif /* SDL_ASSERT_LEVEL */ /* These are macros and not first class functions so that the debugger breaks on the assertion line and not in some random guts of SDL, and so each assert can have unique static variables associated with it. */ #if defined(_MSC_VER) /* Don't include intrin.h here because it contains C++ code */ extern void __cdecl __debugbreak(void); #define SDL_TriggerBreakpoint() __debugbreak() #elif _SDL_HAS_BUILTIN(__builtin_debugtrap) #define SDL_TriggerBreakpoint() __builtin_debugtrap() #elif ( (!defined(__NACL__)) && ((defined(__GNUC__) || defined(__clang__)) && (defined(__i386__) || defined(__x86_64__))) ) #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "int $3\n\t" ) #elif (defined(__GNUC__) || defined(__clang__)) && defined(__riscv) #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "ebreak\n\t" ) #elif ( defined(__APPLE__) && (defined(__arm64__) || defined(__aarch64__)) ) /* this might work on other ARM targets, but this is a known quantity... */ #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "brk #22\n\t" ) #elif defined(__APPLE__) && defined(__arm__) #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "bkpt #22\n\t" ) #elif defined(__386__) && defined(__WATCOMC__) #define SDL_TriggerBreakpoint() { _asm { int 0x03 } } #elif defined(HAVE_SIGNAL_H) && !defined(__WATCOMC__) #include #define SDL_TriggerBreakpoint() raise(SIGTRAP) #else /* How do we trigger breakpoints on this platform? */ #define SDL_TriggerBreakpoint() #endif #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 supports __func__ as a standard. */ # define SDL_FUNCTION __func__ #elif ((defined(__GNUC__) && (__GNUC__ >= 2)) || defined(_MSC_VER) || defined (__WATCOMC__)) # define SDL_FUNCTION __FUNCTION__ #else # define SDL_FUNCTION "???" #endif #define SDL_FILE __FILE__ #define SDL_LINE __LINE__ /* sizeof (x) makes the compiler still parse the expression even without assertions enabled, so the code is always checked at compile time, but doesn't actually generate code for it, so there are no side effects or expensive checks at run time, just the constant size of what x WOULD be, which presumably gets optimized out as unused. This also solves the problem of... int somevalue = blah(); SDL_assert(somevalue == 1); ...which would cause compiles to complain that somevalue is unused if we disable assertions. */ /* "while (0,0)" fools Microsoft's compiler's /W4 warning level into thinking this condition isn't constant. And looks like an owl's face! */ #ifdef _MSC_VER /* stupid /W4 warnings. */ #define SDL_NULL_WHILE_LOOP_CONDITION (0,0) #else #define SDL_NULL_WHILE_LOOP_CONDITION (0) #endif #define SDL_disabled_assert(condition) \ do { (void) sizeof ((condition)); } while (SDL_NULL_WHILE_LOOP_CONDITION) typedef enum { SDL_ASSERTION_RETRY, /**< Retry the assert immediately. */ SDL_ASSERTION_BREAK, /**< Make the debugger trigger a breakpoint. */ SDL_ASSERTION_ABORT, /**< Terminate the program. */ SDL_ASSERTION_IGNORE, /**< Ignore the assert. */ SDL_ASSERTION_ALWAYS_IGNORE /**< Ignore the assert from now on. */ } SDL_AssertState; typedef struct SDL_AssertData { int always_ignore; unsigned int trigger_count; const char *condition; const char *filename; int linenum; const char *function; const struct SDL_AssertData *next; } SDL_AssertData; /* Never call this directly. Use the SDL_assert* macros. */ extern DECLSPEC SDL_AssertState SDLCALL SDL_ReportAssertion(SDL_AssertData *, const char *, const char *, int) #if defined(__clang__) #if __has_feature(attribute_analyzer_noreturn) /* this tells Clang's static analysis that we're a custom assert function, and that the analyzer should assume the condition was always true past this SDL_assert test. */ __attribute__((analyzer_noreturn)) #endif #endif ; /* the do {} while(0) avoids dangling else problems: if (x) SDL_assert(y); else blah(); ... without the do/while, the "else" could attach to this macro's "if". We try to handle just the minimum we need here in a macro...the loop, the static vars, and break points. The heavy lifting is handled in SDL_ReportAssertion(), in SDL_assert.c. */ #define SDL_enabled_assert(condition) \ do { \ while ( !(condition) ) { \ static struct SDL_AssertData sdl_assert_data = { 0, 0, #condition, 0, 0, 0, 0 }; \ const SDL_AssertState sdl_assert_state = SDL_ReportAssertion(&sdl_assert_data, SDL_FUNCTION, SDL_FILE, SDL_LINE); \ if (sdl_assert_state == SDL_ASSERTION_RETRY) { \ continue; /* go again. */ \ } else if (sdl_assert_state == SDL_ASSERTION_BREAK) { \ SDL_TriggerBreakpoint(); \ } \ break; /* not retrying. */ \ } \ } while (SDL_NULL_WHILE_LOOP_CONDITION) /* Enable various levels of assertions. */ #if SDL_ASSERT_LEVEL == 0 /* assertions disabled */ # define SDL_assert(condition) SDL_disabled_assert(condition) # define SDL_assert_release(condition) SDL_disabled_assert(condition) # define SDL_assert_paranoid(condition) SDL_disabled_assert(condition) #elif SDL_ASSERT_LEVEL == 1 /* release settings. */ # define SDL_assert(condition) SDL_disabled_assert(condition) # define SDL_assert_release(condition) SDL_enabled_assert(condition) # define SDL_assert_paranoid(condition) SDL_disabled_assert(condition) #elif SDL_ASSERT_LEVEL == 2 /* normal settings. */ # define SDL_assert(condition) SDL_enabled_assert(condition) # define SDL_assert_release(condition) SDL_enabled_assert(condition) # define SDL_assert_paranoid(condition) SDL_disabled_assert(condition) #elif SDL_ASSERT_LEVEL == 3 /* paranoid settings. */ # define SDL_assert(condition) SDL_enabled_assert(condition) # define SDL_assert_release(condition) SDL_enabled_assert(condition) # define SDL_assert_paranoid(condition) SDL_enabled_assert(condition) #else # error Unknown assertion level. #endif /* this assertion is never disabled at any level. */ #define SDL_assert_always(condition) SDL_enabled_assert(condition) /** * A callback that fires when an SDL assertion fails. * * \param data a pointer to the SDL_AssertData structure corresponding to the * current assertion * \param userdata what was passed as `userdata` to SDL_SetAssertionHandler() * \returns an SDL_AssertState value indicating how to handle the failure. */ typedef SDL_AssertState (SDLCALL *SDL_AssertionHandler)( const SDL_AssertData* data, void* userdata); /** * Set an application-defined assertion handler. * * This function allows an application to show its own assertion UI and/or * force the response to an assertion failure. If the application doesn't * provide this, SDL will try to do the right thing, popping up a * system-specific GUI dialog, and probably minimizing any fullscreen windows. * * This callback may fire from any thread, but it runs wrapped in a mutex, so * it will only fire from one thread at a time. * * This callback is NOT reset to SDL's internal handler upon SDL_Quit()! * * \param handler the SDL_AssertionHandler function to call when an assertion * fails or NULL for the default handler * \param userdata a pointer that is passed to `handler` * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetAssertionHandler */ extern DECLSPEC void SDLCALL SDL_SetAssertionHandler( SDL_AssertionHandler handler, void *userdata); /** * Get the default assertion handler. * * This returns the function pointer that is called by default when an * assertion is triggered. This is an internal function provided by SDL, that * is used for assertions when SDL_SetAssertionHandler() hasn't been used to * provide a different function. * * \returns the default SDL_AssertionHandler that is called when an assert * triggers. * * \since This function is available since SDL 2.0.2. * * \sa SDL_GetAssertionHandler */ extern DECLSPEC SDL_AssertionHandler SDLCALL SDL_GetDefaultAssertionHandler(void); /** * Get the current assertion handler. * * This returns the function pointer that is called when an assertion is * triggered. This is either the value last passed to * SDL_SetAssertionHandler(), or if no application-specified function is set, * is equivalent to calling SDL_GetDefaultAssertionHandler(). * * The parameter `puserdata` is a pointer to a void*, which will store the * "userdata" pointer that was passed to SDL_SetAssertionHandler(). This value * will always be NULL for the default handler. If you don't care about this * data, it is safe to pass a NULL pointer to this function to ignore it. * * \param puserdata pointer which is filled with the "userdata" pointer that * was passed to SDL_SetAssertionHandler() * \returns the SDL_AssertionHandler that is called when an assert triggers. * * \since This function is available since SDL 2.0.2. * * \sa SDL_SetAssertionHandler */ extern DECLSPEC SDL_AssertionHandler SDLCALL SDL_GetAssertionHandler(void **puserdata); /** * Get a list of all assertion failures. * * This function gets all assertions triggered since the last call to * SDL_ResetAssertionReport(), or the start of the program. * * The proper way to examine this data looks something like this: * * ```c * const SDL_AssertData *item = SDL_GetAssertionReport(); * while (item) { * printf("'%s', %s (%s:%d), triggered %u times, always ignore: %s.\\n", * item->condition, item->function, item->filename, * item->linenum, item->trigger_count, * item->always_ignore ? "yes" : "no"); * item = item->next; * } * ``` * * \returns a list of all failed assertions or NULL if the list is empty. This * memory should not be modified or freed by the application. * * \since This function is available since SDL 2.0.0. * * \sa SDL_ResetAssertionReport */ extern DECLSPEC const SDL_AssertData * SDLCALL SDL_GetAssertionReport(void); /** * Clear the list of all assertion failures. * * This function will clear the list of all assertions triggered up to that * point. Immediately following this call, SDL_GetAssertionReport will return * no items. In addition, any previously-triggered assertions will be reset to * a trigger_count of zero, and their always_ignore state will be false. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetAssertionReport */ extern DECLSPEC void SDLCALL SDL_ResetAssertionReport(void); /* these had wrong naming conventions until 2.0.4. Please update your app! */ #define SDL_assert_state SDL_AssertState #define SDL_assert_data SDL_AssertData /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_assert_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_atomic.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_atomic.h * * Atomic operations. * * IMPORTANT: * If you are not an expert in concurrent lockless programming, you should * only be using the atomic lock and reference counting functions in this * file. In all other cases you should be protecting your data structures * with full mutexes. * * The list of "safe" functions to use are: * SDL_AtomicLock() * SDL_AtomicUnlock() * SDL_AtomicIncRef() * SDL_AtomicDecRef() * * Seriously, here be dragons! * ^^^^^^^^^^^^^^^^^^^^^^^^^^^ * * You can find out a little more about lockless programming and the * subtle issues that can arise here: * http://msdn.microsoft.com/en-us/library/ee418650%28v=vs.85%29.aspx * * There's also lots of good information here: * http://www.1024cores.net/home/lock-free-algorithms * http://preshing.com/ * * These operations may or may not actually be implemented using * processor specific atomic operations. When possible they are * implemented as true processor specific atomic operations. When that * is not possible the are implemented using locks that *do* use the * available atomic operations. * * All of the atomic operations that modify memory are full memory barriers. */ #ifndef SDL_atomic_h_ #define SDL_atomic_h_ #include "SDL_stdinc.h" #include "SDL_platform.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** * \name SDL AtomicLock * * The atomic locks are efficient spinlocks using CPU instructions, * but are vulnerable to starvation and can spin forever if a thread * holding a lock has been terminated. For this reason you should * minimize the code executed inside an atomic lock and never do * expensive things like API or system calls while holding them. * * The atomic locks are not safe to lock recursively. * * Porting Note: * The spin lock functions and type are required and can not be * emulated because they are used in the atomic emulation code. */ /* @{ */ typedef int SDL_SpinLock; /** * Try to lock a spin lock by setting it to a non-zero value. * * ***Please note that spinlocks are dangerous if you don't know what you're * doing. Please be careful using any sort of spinlock!*** * * \param lock a pointer to a lock variable * \returns SDL_TRUE if the lock succeeded, SDL_FALSE if the lock is already * held. * * \since This function is available since SDL 2.0.0. * * \sa SDL_AtomicLock * \sa SDL_AtomicUnlock */ extern DECLSPEC SDL_bool SDLCALL SDL_AtomicTryLock(SDL_SpinLock *lock); /** * Lock a spin lock by setting it to a non-zero value. * * ***Please note that spinlocks are dangerous if you don't know what you're * doing. Please be careful using any sort of spinlock!*** * * \param lock a pointer to a lock variable * * \since This function is available since SDL 2.0.0. * * \sa SDL_AtomicTryLock * \sa SDL_AtomicUnlock */ extern DECLSPEC void SDLCALL SDL_AtomicLock(SDL_SpinLock *lock); /** * Unlock a spin lock by setting it to 0. * * Always returns immediately. * * ***Please note that spinlocks are dangerous if you don't know what you're * doing. Please be careful using any sort of spinlock!*** * * \param lock a pointer to a lock variable * * \since This function is available since SDL 2.0.0. * * \sa SDL_AtomicLock * \sa SDL_AtomicTryLock */ extern DECLSPEC void SDLCALL SDL_AtomicUnlock(SDL_SpinLock *lock); /* @} *//* SDL AtomicLock */ /** * The compiler barrier prevents the compiler from reordering * reads and writes to globally visible variables across the call. */ #if defined(_MSC_VER) && (_MSC_VER > 1200) && !defined(__clang__) void _ReadWriteBarrier(void); #pragma intrinsic(_ReadWriteBarrier) #define SDL_CompilerBarrier() _ReadWriteBarrier() #elif (defined(__GNUC__) && !defined(__EMSCRIPTEN__)) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x5120)) /* This is correct for all CPUs when using GCC or Solaris Studio 12.1+. */ #define SDL_CompilerBarrier() __asm__ __volatile__ ("" : : : "memory") #elif defined(__WATCOMC__) extern __inline void SDL_CompilerBarrier(void); #pragma aux SDL_CompilerBarrier = "" parm [] modify exact []; #else #define SDL_CompilerBarrier() \ { SDL_SpinLock _tmp = 0; SDL_AtomicLock(&_tmp); SDL_AtomicUnlock(&_tmp); } #endif /** * Memory barriers are designed to prevent reads and writes from being * reordered by the compiler and being seen out of order on multi-core CPUs. * * A typical pattern would be for thread A to write some data and a flag, and * for thread B to read the flag and get the data. In this case you would * insert a release barrier between writing the data and the flag, * guaranteeing that the data write completes no later than the flag is * written, and you would insert an acquire barrier between reading the flag * and reading the data, to ensure that all the reads associated with the flag * have completed. * * In this pattern you should always see a release barrier paired with an * acquire barrier and you should gate the data reads/writes with a single * flag variable. * * For more information on these semantics, take a look at the blog post: * http://preshing.com/20120913/acquire-and-release-semantics * * \since This function is available since SDL 2.0.6. */ extern DECLSPEC void SDLCALL SDL_MemoryBarrierReleaseFunction(void); extern DECLSPEC void SDLCALL SDL_MemoryBarrierAcquireFunction(void); #if defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) #define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("lwsync" : : : "memory") #define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("lwsync" : : : "memory") #elif defined(__GNUC__) && defined(__aarch64__) #define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("dmb ish" : : : "memory") #define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("dmb ish" : : : "memory") #elif defined(__GNUC__) && defined(__arm__) #if 0 /* defined(__LINUX__) || defined(__ANDROID__) */ /* Information from: https://chromium.googlesource.com/chromium/chromium/+/trunk/base/atomicops_internals_arm_gcc.h#19 The Linux kernel provides a helper function which provides the right code for a memory barrier, hard-coded at address 0xffff0fa0 */ typedef void (*SDL_KernelMemoryBarrierFunc)(); #define SDL_MemoryBarrierRelease() ((SDL_KernelMemoryBarrierFunc)0xffff0fa0)() #define SDL_MemoryBarrierAcquire() ((SDL_KernelMemoryBarrierFunc)0xffff0fa0)() #elif 0 /* defined(__QNXNTO__) */ #include #define SDL_MemoryBarrierRelease() __cpu_membarrier() #define SDL_MemoryBarrierAcquire() __cpu_membarrier() #else #if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) || defined(__ARM_ARCH_8A__) #define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("dmb ish" : : : "memory") #define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("dmb ish" : : : "memory") #elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6T2__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) #ifdef __thumb__ /* The mcr instruction isn't available in thumb mode, use real functions */ #define SDL_MEMORY_BARRIER_USES_FUNCTION #define SDL_MemoryBarrierRelease() SDL_MemoryBarrierReleaseFunction() #define SDL_MemoryBarrierAcquire() SDL_MemoryBarrierAcquireFunction() #else #define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r"(0) : "memory") #define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r"(0) : "memory") #endif /* __thumb__ */ #else #define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("" : : : "memory") #define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("" : : : "memory") #endif /* __LINUX__ || __ANDROID__ */ #endif /* __GNUC__ && __arm__ */ #else #if (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x5120)) /* This is correct for all CPUs on Solaris when using Solaris Studio 12.1+. */ #include #define SDL_MemoryBarrierRelease() __machine_rel_barrier() #define SDL_MemoryBarrierAcquire() __machine_acq_barrier() #else /* This is correct for the x86 and x64 CPUs, and we'll expand this over time. */ #define SDL_MemoryBarrierRelease() SDL_CompilerBarrier() #define SDL_MemoryBarrierAcquire() SDL_CompilerBarrier() #endif #endif /* "REP NOP" is PAUSE, coded for tools that don't know it by that name. */ #if (defined(__GNUC__) || defined(__clang__)) && (defined(__i386__) || defined(__x86_64__)) #define SDL_CPUPauseInstruction() __asm__ __volatile__("pause\n") /* Some assemblers can't do REP NOP, so go with PAUSE. */ #elif (defined(__arm__) && defined(__ARM_ARCH) && __ARM_ARCH >= 7) || defined(__aarch64__) #define SDL_CPUPauseInstruction() __asm__ __volatile__("yield" ::: "memory") #elif (defined(__powerpc__) || defined(__powerpc64__)) #define SDL_CPUPauseInstruction() __asm__ __volatile__("or 27,27,27"); #elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64)) #define SDL_CPUPauseInstruction() _mm_pause() /* this is actually "rep nop" and not a SIMD instruction. No inline asm in MSVC x86-64! */ #elif defined(_MSC_VER) && (defined(_M_ARM) || defined(_M_ARM64)) #define SDL_CPUPauseInstruction() __yield() #elif defined(__WATCOMC__) && defined(__386__) extern __inline void SDL_CPUPauseInstruction(void); #pragma aux SDL_CPUPauseInstruction = ".686p" ".xmm2" "pause" #else #define SDL_CPUPauseInstruction() #endif /** * \brief A type representing an atomic integer value. It is a struct * so people don't accidentally use numeric operations on it. */ typedef struct { int value; } SDL_atomic_t; /** * Set an atomic variable to a new value if it is currently an old value. * * ***Note: If you don't know what this function is for, you shouldn't use * it!*** * * \param a a pointer to an SDL_atomic_t variable to be modified * \param oldval the old value * \param newval the new value * \returns SDL_TRUE if the atomic variable was set, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.0. * * \sa SDL_AtomicCASPtr * \sa SDL_AtomicGet * \sa SDL_AtomicSet */ extern DECLSPEC SDL_bool SDLCALL SDL_AtomicCAS(SDL_atomic_t *a, int oldval, int newval); /** * Set an atomic variable to a value. * * This function also acts as a full memory barrier. * * ***Note: If you don't know what this function is for, you shouldn't use * it!*** * * \param a a pointer to an SDL_atomic_t variable to be modified * \param v the desired value * \returns the previous value of the atomic variable. * * \since This function is available since SDL 2.0.2. * * \sa SDL_AtomicGet */ extern DECLSPEC int SDLCALL SDL_AtomicSet(SDL_atomic_t *a, int v); /** * Get the value of an atomic variable. * * ***Note: If you don't know what this function is for, you shouldn't use * it!*** * * \param a a pointer to an SDL_atomic_t variable * \returns the current value of an atomic variable. * * \since This function is available since SDL 2.0.2. * * \sa SDL_AtomicSet */ extern DECLSPEC int SDLCALL SDL_AtomicGet(SDL_atomic_t *a); /** * Add to an atomic variable. * * This function also acts as a full memory barrier. * * ***Note: If you don't know what this function is for, you shouldn't use * it!*** * * \param a a pointer to an SDL_atomic_t variable to be modified * \param v the desired value to add * \returns the previous value of the atomic variable. * * \since This function is available since SDL 2.0.2. * * \sa SDL_AtomicDecRef * \sa SDL_AtomicIncRef */ extern DECLSPEC int SDLCALL SDL_AtomicAdd(SDL_atomic_t *a, int v); /** * \brief Increment an atomic variable used as a reference count. */ #ifndef SDL_AtomicIncRef #define SDL_AtomicIncRef(a) SDL_AtomicAdd(a, 1) #endif /** * \brief Decrement an atomic variable used as a reference count. * * \return SDL_TRUE if the variable reached zero after decrementing, * SDL_FALSE otherwise */ #ifndef SDL_AtomicDecRef #define SDL_AtomicDecRef(a) (SDL_AtomicAdd(a, -1) == 1) #endif /** * Set a pointer to a new value if it is currently an old value. * * ***Note: If you don't know what this function is for, you shouldn't use * it!*** * * \param a a pointer to a pointer * \param oldval the old pointer value * \param newval the new pointer value * \returns SDL_TRUE if the pointer was set, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.0. * * \sa SDL_AtomicCAS * \sa SDL_AtomicGetPtr * \sa SDL_AtomicSetPtr */ extern DECLSPEC SDL_bool SDLCALL SDL_AtomicCASPtr(void **a, void *oldval, void *newval); /** * Set a pointer to a value atomically. * * ***Note: If you don't know what this function is for, you shouldn't use * it!*** * * \param a a pointer to a pointer * \param v the desired pointer value * \returns the previous value of the pointer. * * \since This function is available since SDL 2.0.2. * * \sa SDL_AtomicCASPtr * \sa SDL_AtomicGetPtr */ extern DECLSPEC void* SDLCALL SDL_AtomicSetPtr(void **a, void* v); /** * Get the value of a pointer atomically. * * ***Note: If you don't know what this function is for, you shouldn't use * it!*** * * \param a a pointer to a pointer * \returns the current value of a pointer. * * \since This function is available since SDL 2.0.2. * * \sa SDL_AtomicCASPtr * \sa SDL_AtomicSetPtr */ extern DECLSPEC void* SDLCALL SDL_AtomicGetPtr(void **a); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_atomic_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_audio.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /* !!! FIXME: several functions in here need Doxygen comments. */ /** * \file SDL_audio.h * * Access to the raw audio mixing buffer for the SDL library. */ #ifndef SDL_audio_h_ #define SDL_audio_h_ #include "SDL_stdinc.h" #include "SDL_error.h" #include "SDL_endian.h" #include "SDL_mutex.h" #include "SDL_thread.h" #include "SDL_rwops.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** * \brief Audio format flags. * * These are what the 16 bits in SDL_AudioFormat currently mean... * (Unspecified bits are always zero). * * \verbatim ++-----------------------sample is signed if set || || ++-----------sample is bigendian if set || || || || ++---sample is float if set || || || || || || +---sample bit size---+ || || || | | 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 \endverbatim * * There are macros in SDL 2.0 and later to query these bits. */ typedef Uint16 SDL_AudioFormat; /** * \name Audio flags */ /* @{ */ #define SDL_AUDIO_MASK_BITSIZE (0xFF) #define SDL_AUDIO_MASK_DATATYPE (1<<8) #define SDL_AUDIO_MASK_ENDIAN (1<<12) #define SDL_AUDIO_MASK_SIGNED (1<<15) #define SDL_AUDIO_BITSIZE(x) (x & SDL_AUDIO_MASK_BITSIZE) #define SDL_AUDIO_ISFLOAT(x) (x & SDL_AUDIO_MASK_DATATYPE) #define SDL_AUDIO_ISBIGENDIAN(x) (x & SDL_AUDIO_MASK_ENDIAN) #define SDL_AUDIO_ISSIGNED(x) (x & SDL_AUDIO_MASK_SIGNED) #define SDL_AUDIO_ISINT(x) (!SDL_AUDIO_ISFLOAT(x)) #define SDL_AUDIO_ISLITTLEENDIAN(x) (!SDL_AUDIO_ISBIGENDIAN(x)) #define SDL_AUDIO_ISUNSIGNED(x) (!SDL_AUDIO_ISSIGNED(x)) /** * \name Audio format flags * * Defaults to LSB byte order. */ /* @{ */ #define AUDIO_U8 0x0008 /**< Unsigned 8-bit samples */ #define AUDIO_S8 0x8008 /**< Signed 8-bit samples */ #define AUDIO_U16LSB 0x0010 /**< Unsigned 16-bit samples */ #define AUDIO_S16LSB 0x8010 /**< Signed 16-bit samples */ #define AUDIO_U16MSB 0x1010 /**< As above, but big-endian byte order */ #define AUDIO_S16MSB 0x9010 /**< As above, but big-endian byte order */ #define AUDIO_U16 AUDIO_U16LSB #define AUDIO_S16 AUDIO_S16LSB /* @} */ /** * \name int32 support */ /* @{ */ #define AUDIO_S32LSB 0x8020 /**< 32-bit integer samples */ #define AUDIO_S32MSB 0x9020 /**< As above, but big-endian byte order */ #define AUDIO_S32 AUDIO_S32LSB /* @} */ /** * \name float32 support */ /* @{ */ #define AUDIO_F32LSB 0x8120 /**< 32-bit floating point samples */ #define AUDIO_F32MSB 0x9120 /**< As above, but big-endian byte order */ #define AUDIO_F32 AUDIO_F32LSB /* @} */ /** * \name Native audio byte ordering */ /* @{ */ #if SDL_BYTEORDER == SDL_LIL_ENDIAN #define AUDIO_U16SYS AUDIO_U16LSB #define AUDIO_S16SYS AUDIO_S16LSB #define AUDIO_S32SYS AUDIO_S32LSB #define AUDIO_F32SYS AUDIO_F32LSB #else #define AUDIO_U16SYS AUDIO_U16MSB #define AUDIO_S16SYS AUDIO_S16MSB #define AUDIO_S32SYS AUDIO_S32MSB #define AUDIO_F32SYS AUDIO_F32MSB #endif /* @} */ /** * \name Allow change flags * * Which audio format changes are allowed when opening a device. */ /* @{ */ #define SDL_AUDIO_ALLOW_FREQUENCY_CHANGE 0x00000001 #define SDL_AUDIO_ALLOW_FORMAT_CHANGE 0x00000002 #define SDL_AUDIO_ALLOW_CHANNELS_CHANGE 0x00000004 #define SDL_AUDIO_ALLOW_SAMPLES_CHANGE 0x00000008 #define SDL_AUDIO_ALLOW_ANY_CHANGE (SDL_AUDIO_ALLOW_FREQUENCY_CHANGE|SDL_AUDIO_ALLOW_FORMAT_CHANGE|SDL_AUDIO_ALLOW_CHANNELS_CHANGE|SDL_AUDIO_ALLOW_SAMPLES_CHANGE) /* @} */ /* @} *//* Audio flags */ /** * This function is called when the audio device needs more data. * * \param userdata An application-specific parameter saved in * the SDL_AudioSpec structure * \param stream A pointer to the audio data buffer. * \param len The length of that buffer in bytes. * * Once the callback returns, the buffer will no longer be valid. * Stereo samples are stored in a LRLRLR ordering. * * You can choose to avoid callbacks and use SDL_QueueAudio() instead, if * you like. Just open your audio device with a NULL callback. */ typedef void (SDLCALL * SDL_AudioCallback) (void *userdata, Uint8 * stream, int len); /** * The calculated values in this structure are calculated by SDL_OpenAudio(). * * For multi-channel audio, the default SDL channel mapping is: * 2: FL FR (stereo) * 3: FL FR LFE (2.1 surround) * 4: FL FR BL BR (quad) * 5: FL FR LFE BL BR (4.1 surround) * 6: FL FR FC LFE SL SR (5.1 surround - last two can also be BL BR) * 7: FL FR FC LFE BC SL SR (6.1 surround) * 8: FL FR FC LFE BL BR SL SR (7.1 surround) */ typedef struct SDL_AudioSpec { int freq; /**< DSP frequency -- samples per second */ SDL_AudioFormat format; /**< Audio data format */ Uint8 channels; /**< Number of channels: 1 mono, 2 stereo */ Uint8 silence; /**< Audio buffer silence value (calculated) */ Uint16 samples; /**< Audio buffer size in sample FRAMES (total samples divided by channel count) */ Uint16 padding; /**< Necessary for some compile environments */ Uint32 size; /**< Audio buffer size in bytes (calculated) */ SDL_AudioCallback callback; /**< Callback that feeds the audio device (NULL to use SDL_QueueAudio()). */ void *userdata; /**< Userdata passed to callback (ignored for NULL callbacks). */ } SDL_AudioSpec; struct SDL_AudioCVT; typedef void (SDLCALL * SDL_AudioFilter) (struct SDL_AudioCVT * cvt, SDL_AudioFormat format); /** * \brief Upper limit of filters in SDL_AudioCVT * * The maximum number of SDL_AudioFilter functions in SDL_AudioCVT is * currently limited to 9. The SDL_AudioCVT.filters array has 10 pointers, * one of which is the terminating NULL pointer. */ #define SDL_AUDIOCVT_MAX_FILTERS 9 /** * \struct SDL_AudioCVT * \brief A structure to hold a set of audio conversion filters and buffers. * * Note that various parts of the conversion pipeline can take advantage * of SIMD operations (like SSE2, for example). SDL_AudioCVT doesn't require * you to pass it aligned data, but can possibly run much faster if you * set both its (buf) field to a pointer that is aligned to 16 bytes, and its * (len) field to something that's a multiple of 16, if possible. */ #if defined(__GNUC__) && !defined(__CHERI_PURE_CAPABILITY__) /* This structure is 84 bytes on 32-bit architectures, make sure GCC doesn't pad it out to 88 bytes to guarantee ABI compatibility between compilers. This is not a concern on CHERI architectures, where pointers must be stored at aligned locations otherwise they will become invalid, and thus structs containing pointers cannot be packed without giving a warning or error. vvv The next time we rev the ABI, make sure to size the ints and add padding. */ #define SDL_AUDIOCVT_PACKED __attribute__((packed)) #else #define SDL_AUDIOCVT_PACKED #endif /* */ typedef struct SDL_AudioCVT { int needed; /**< Set to 1 if conversion possible */ SDL_AudioFormat src_format; /**< Source audio format */ SDL_AudioFormat dst_format; /**< Target audio format */ double rate_incr; /**< Rate conversion increment */ Uint8 *buf; /**< Buffer to hold entire audio data */ int len; /**< Length of original audio buffer */ int len_cvt; /**< Length of converted audio buffer */ int len_mult; /**< buffer must be len*len_mult big */ double len_ratio; /**< Given len, final size is len*len_ratio */ SDL_AudioFilter filters[SDL_AUDIOCVT_MAX_FILTERS + 1]; /**< NULL-terminated list of filter functions */ int filter_index; /**< Current audio conversion function */ } SDL_AUDIOCVT_PACKED SDL_AudioCVT; /* Function prototypes */ /** * \name Driver discovery functions * * These functions return the list of built in audio drivers, in the * order that they are normally initialized by default. */ /* @{ */ /** * Use this function to get the number of built-in audio drivers. * * This function returns a hardcoded number. This never returns a negative * value; if there are no drivers compiled into this build of SDL, this * function returns zero. The presence of a driver in this list does not mean * it will function, it just means SDL is capable of interacting with that * interface. For example, a build of SDL might have esound support, but if * there's no esound server available, SDL's esound driver would fail if used. * * By default, SDL tries all drivers, in its preferred order, until one is * found to be usable. * * \returns the number of built-in audio drivers. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetAudioDriver */ extern DECLSPEC int SDLCALL SDL_GetNumAudioDrivers(void); /** * Use this function to get the name of a built in audio driver. * * The list of audio drivers is given in the order that they are normally * initialized by default; the drivers that seem more reasonable to choose * first (as far as the SDL developers believe) are earlier in the list. * * The names of drivers are all simple, low-ASCII identifiers, like "alsa", * "coreaudio" or "xaudio2". These never have Unicode characters, and are not * meant to be proper names. * * \param index the index of the audio driver; the value ranges from 0 to * SDL_GetNumAudioDrivers() - 1 * \returns the name of the audio driver at the requested index, or NULL if an * invalid index was specified. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetNumAudioDrivers */ extern DECLSPEC const char *SDLCALL SDL_GetAudioDriver(int index); /* @} */ /** * \name Initialization and cleanup * * \internal These functions are used internally, and should not be used unless * you have a specific need to specify the audio driver you want to * use. You should normally use SDL_Init() or SDL_InitSubSystem(). */ /* @{ */ /** * Use this function to initialize a particular audio driver. * * This function is used internally, and should not be used unless you have a * specific need to designate the audio driver you want to use. You should * normally use SDL_Init() or SDL_InitSubSystem(). * * \param driver_name the name of the desired audio driver * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_AudioQuit */ extern DECLSPEC int SDLCALL SDL_AudioInit(const char *driver_name); /** * Use this function to shut down audio if you initialized it with * SDL_AudioInit(). * * This function is used internally, and should not be used unless you have a * specific need to specify the audio driver you want to use. You should * normally use SDL_Quit() or SDL_QuitSubSystem(). * * \since This function is available since SDL 2.0.0. * * \sa SDL_AudioInit */ extern DECLSPEC void SDLCALL SDL_AudioQuit(void); /* @} */ /** * Get the name of the current audio driver. * * The returned string points to internal static memory and thus never becomes * invalid, even if you quit the audio subsystem and initialize a new driver * (although such a case would return a different static string from another * call to this function, of course). As such, you should not modify or free * the returned string. * * \returns the name of the current audio driver or NULL if no driver has been * initialized. * * \since This function is available since SDL 2.0.0. * * \sa SDL_AudioInit */ extern DECLSPEC const char *SDLCALL SDL_GetCurrentAudioDriver(void); /** * This function is a legacy means of opening the audio device. * * This function remains for compatibility with SDL 1.2, but also because it's * slightly easier to use than the new functions in SDL 2.0. The new, more * powerful, and preferred way to do this is SDL_OpenAudioDevice(). * * This function is roughly equivalent to: * * ```c * SDL_OpenAudioDevice(NULL, 0, desired, obtained, SDL_AUDIO_ALLOW_ANY_CHANGE); * ``` * * With two notable exceptions: * * - If `obtained` is NULL, we use `desired` (and allow no changes), which * means desired will be modified to have the correct values for silence, * etc, and SDL will convert any differences between your app's specific * request and the hardware behind the scenes. * - The return value is always success or failure, and not a device ID, which * means you can only have one device open at a time with this function. * * \param desired an SDL_AudioSpec structure representing the desired output * format. Please refer to the SDL_OpenAudioDevice * documentation for details on how to prepare this structure. * \param obtained an SDL_AudioSpec structure filled in with the actual * parameters, or NULL. * \returns 0 if successful, placing the actual hardware parameters in the * structure pointed to by `obtained`. * * If `obtained` is NULL, the audio data passed to the callback * function will be guaranteed to be in the requested format, and * will be automatically converted to the actual hardware audio * format if necessary. If `obtained` is NULL, `desired` will have * fields modified. * * This function returns a negative error code on failure to open the * audio device or failure to set up the audio thread; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CloseAudio * \sa SDL_LockAudio * \sa SDL_PauseAudio * \sa SDL_UnlockAudio */ extern DECLSPEC int SDLCALL SDL_OpenAudio(SDL_AudioSpec * desired, SDL_AudioSpec * obtained); /** * SDL Audio Device IDs. * * A successful call to SDL_OpenAudio() is always device id 1, and legacy * SDL audio APIs assume you want this device ID. SDL_OpenAudioDevice() calls * always returns devices >= 2 on success. The legacy calls are good both * for backwards compatibility and when you don't care about multiple, * specific, or capture devices. */ typedef Uint32 SDL_AudioDeviceID; /** * Get the number of built-in audio devices. * * This function is only valid after successfully initializing the audio * subsystem. * * Note that audio capture support is not implemented as of SDL 2.0.4, so the * `iscapture` parameter is for future expansion and should always be zero for * now. * * This function will return -1 if an explicit list of devices can't be * determined. Returning -1 is not an error. For example, if SDL is set up to * talk to a remote audio server, it can't list every one available on the * Internet, but it will still allow a specific host to be specified in * SDL_OpenAudioDevice(). * * In many common cases, when this function returns a value <= 0, it can still * successfully open the default device (NULL for first argument of * SDL_OpenAudioDevice()). * * This function may trigger a complete redetect of available hardware. It * should not be called for each iteration of a loop, but rather once at the * start of a loop: * * ```c * // Don't do this: * for (int i = 0; i < SDL_GetNumAudioDevices(0); i++) * * // do this instead: * const int count = SDL_GetNumAudioDevices(0); * for (int i = 0; i < count; ++i) { do_something_here(); } * ``` * * \param iscapture zero to request playback devices, non-zero to request * recording devices * \returns the number of available devices exposed by the current driver or * -1 if an explicit list of devices can't be determined. A return * value of -1 does not necessarily mean an error condition. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetAudioDeviceName * \sa SDL_OpenAudioDevice */ extern DECLSPEC int SDLCALL SDL_GetNumAudioDevices(int iscapture); /** * Get the human-readable name of a specific audio device. * * This function is only valid after successfully initializing the audio * subsystem. The values returned by this function reflect the latest call to * SDL_GetNumAudioDevices(); re-call that function to redetect available * hardware. * * The string returned by this function is UTF-8 encoded, read-only, and * managed internally. You are not to free it. If you need to keep the string * for any length of time, you should make your own copy of it, as it will be * invalid next time any of several other SDL functions are called. * * \param index the index of the audio device; valid values range from 0 to * SDL_GetNumAudioDevices() - 1 * \param iscapture non-zero to query the list of recording devices, zero to * query the list of output devices. * \returns the name of the audio device at the requested index, or NULL on * error. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetNumAudioDevices * \sa SDL_GetDefaultAudioInfo */ extern DECLSPEC const char *SDLCALL SDL_GetAudioDeviceName(int index, int iscapture); /** * Get the preferred audio format of a specific audio device. * * This function is only valid after a successfully initializing the audio * subsystem. The values returned by this function reflect the latest call to * SDL_GetNumAudioDevices(); re-call that function to redetect available * hardware. * * `spec` will be filled with the sample rate, sample format, and channel * count. * * \param index the index of the audio device; valid values range from 0 to * SDL_GetNumAudioDevices() - 1 * \param iscapture non-zero to query the list of recording devices, zero to * query the list of output devices. * \param spec The SDL_AudioSpec to be initialized by this function. * \returns 0 on success, nonzero on error * * \since This function is available since SDL 2.0.16. * * \sa SDL_GetNumAudioDevices * \sa SDL_GetDefaultAudioInfo */ extern DECLSPEC int SDLCALL SDL_GetAudioDeviceSpec(int index, int iscapture, SDL_AudioSpec *spec); /** * Get the name and preferred format of the default audio device. * * Some (but not all!) platforms have an isolated mechanism to get information * about the "default" device. This can actually be a completely different * device that's not in the list you get from SDL_GetAudioDeviceSpec(). It can * even be a network address! (This is discussed in SDL_OpenAudioDevice().) * * As a result, this call is not guaranteed to be performant, as it can query * the sound server directly every time, unlike the other query functions. You * should call this function sparingly! * * `spec` will be filled with the sample rate, sample format, and channel * count, if a default device exists on the system. If `name` is provided, * will be filled with either a dynamically-allocated UTF-8 string or NULL. * * \param name A pointer to be filled with the name of the default device (can * be NULL). Please call SDL_free() when you are done with this * pointer! * \param spec The SDL_AudioSpec to be initialized by this function. * \param iscapture non-zero to query the default recording device, zero to * query the default output device. * \returns 0 on success, nonzero on error * * \since This function is available since SDL 2.24.0. * * \sa SDL_GetAudioDeviceName * \sa SDL_GetAudioDeviceSpec * \sa SDL_OpenAudioDevice */ extern DECLSPEC int SDLCALL SDL_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture); /** * Open a specific audio device. * * SDL_OpenAudio(), unlike this function, always acts on device ID 1. As such, * this function will never return a 1 so as not to conflict with the legacy * function. * * Please note that SDL 2.0 before 2.0.5 did not support recording; as such, * this function would fail if `iscapture` was not zero. Starting with SDL * 2.0.5, recording is implemented and this value can be non-zero. * * Passing in a `device` name of NULL requests the most reasonable default * (and is equivalent to what SDL_OpenAudio() does to choose a device). The * `device` name is a UTF-8 string reported by SDL_GetAudioDeviceName(), but * some drivers allow arbitrary and driver-specific strings, such as a * hostname/IP address for a remote audio server, or a filename in the * diskaudio driver. * * An opened audio device starts out paused, and should be enabled for playing * by calling SDL_PauseAudioDevice(devid, 0) when you are ready for your audio * callback function to be called. Since the audio driver may modify the * requested size of the audio buffer, you should allocate any local mixing * buffers after you open the audio device. * * The audio callback runs in a separate thread in most cases; you can prevent * race conditions between your callback and other threads without fully * pausing playback with SDL_LockAudioDevice(). For more information about the * callback, see SDL_AudioSpec. * * Managing the audio spec via 'desired' and 'obtained': * * When filling in the desired audio spec structure: * * - `desired->freq` should be the frequency in sample-frames-per-second (Hz). * - `desired->format` should be the audio format (`AUDIO_S16SYS`, etc). * - `desired->samples` is the desired size of the audio buffer, in _sample * frames_ (with stereo output, two samples--left and right--would make a * single sample frame). This number should be a power of two, and may be * adjusted by the audio driver to a value more suitable for the hardware. * Good values seem to range between 512 and 8096 inclusive, depending on * the application and CPU speed. Smaller values reduce latency, but can * lead to underflow if the application is doing heavy processing and cannot * fill the audio buffer in time. Note that the number of sample frames is * directly related to time by the following formula: `ms = * (sampleframes*1000)/freq` * - `desired->size` is the size in _bytes_ of the audio buffer, and is * calculated by SDL_OpenAudioDevice(). You don't initialize this. * - `desired->silence` is the value used to set the buffer to silence, and is * calculated by SDL_OpenAudioDevice(). You don't initialize this. * - `desired->callback` should be set to a function that will be called when * the audio device is ready for more data. It is passed a pointer to the * audio buffer, and the length in bytes of the audio buffer. This function * usually runs in a separate thread, and so you should protect data * structures that it accesses by calling SDL_LockAudioDevice() and * SDL_UnlockAudioDevice() in your code. Alternately, you may pass a NULL * pointer here, and call SDL_QueueAudio() with some frequency, to queue * more audio samples to be played (or for capture devices, call * SDL_DequeueAudio() with some frequency, to obtain audio samples). * - `desired->userdata` is passed as the first parameter to your callback * function. If you passed a NULL callback, this value is ignored. * * `allowed_changes` can have the following flags OR'd together: * * - `SDL_AUDIO_ALLOW_FREQUENCY_CHANGE` * - `SDL_AUDIO_ALLOW_FORMAT_CHANGE` * - `SDL_AUDIO_ALLOW_CHANNELS_CHANGE` * - `SDL_AUDIO_ALLOW_SAMPLES_CHANGE` * - `SDL_AUDIO_ALLOW_ANY_CHANGE` * * These flags specify how SDL should behave when a device cannot offer a * specific feature. If the application requests a feature that the hardware * doesn't offer, SDL will always try to get the closest equivalent. * * For example, if you ask for float32 audio format, but the sound card only * supports int16, SDL will set the hardware to int16. If you had set * SDL_AUDIO_ALLOW_FORMAT_CHANGE, SDL will change the format in the `obtained` * structure. If that flag was *not* set, SDL will prepare to convert your * callback's float32 audio to int16 before feeding it to the hardware and * will keep the originally requested format in the `obtained` structure. * * The resulting audio specs, varying depending on hardware and on what * changes were allowed, will then be written back to `obtained`. * * If your application can only handle one specific data format, pass a zero * for `allowed_changes` and let SDL transparently handle any differences. * * \param device a UTF-8 string reported by SDL_GetAudioDeviceName() or a * driver-specific name as appropriate. NULL requests the most * reasonable default device. * \param iscapture non-zero to specify a device should be opened for * recording, not playback * \param desired an SDL_AudioSpec structure representing the desired output * format; see SDL_OpenAudio() for more information * \param obtained an SDL_AudioSpec structure filled in with the actual output * format; see SDL_OpenAudio() for more information * \param allowed_changes 0, or one or more flags OR'd together * \returns a valid device ID that is > 0 on success or 0 on failure; call * SDL_GetError() for more information. * * For compatibility with SDL 1.2, this will never return 1, since * SDL reserves that ID for the legacy SDL_OpenAudio() function. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CloseAudioDevice * \sa SDL_GetAudioDeviceName * \sa SDL_LockAudioDevice * \sa SDL_OpenAudio * \sa SDL_PauseAudioDevice * \sa SDL_UnlockAudioDevice */ extern DECLSPEC SDL_AudioDeviceID SDLCALL SDL_OpenAudioDevice( const char *device, int iscapture, const SDL_AudioSpec *desired, SDL_AudioSpec *obtained, int allowed_changes); /** * \name Audio state * * Get the current audio state. */ /* @{ */ typedef enum { SDL_AUDIO_STOPPED = 0, SDL_AUDIO_PLAYING, SDL_AUDIO_PAUSED } SDL_AudioStatus; /** * This function is a legacy means of querying the audio device. * * New programs might want to use SDL_GetAudioDeviceStatus() instead. This * function is equivalent to calling... * * ```c * SDL_GetAudioDeviceStatus(1); * ``` * * ...and is only useful if you used the legacy SDL_OpenAudio() function. * * \returns the SDL_AudioStatus of the audio device opened by SDL_OpenAudio(). * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetAudioDeviceStatus */ extern DECLSPEC SDL_AudioStatus SDLCALL SDL_GetAudioStatus(void); /** * Use this function to get the current audio state of an audio device. * * \param dev the ID of an audio device previously opened with * SDL_OpenAudioDevice() * \returns the SDL_AudioStatus of the specified audio device. * * \since This function is available since SDL 2.0.0. * * \sa SDL_PauseAudioDevice */ extern DECLSPEC SDL_AudioStatus SDLCALL SDL_GetAudioDeviceStatus(SDL_AudioDeviceID dev); /* @} *//* Audio State */ /** * \name Pause audio functions * * These functions pause and unpause the audio callback processing. * They should be called with a parameter of 0 after opening the audio * device to start playing sound. This is so you can safely initialize * data for your callback function after opening the audio device. * Silence will be written to the audio device during the pause. */ /* @{ */ /** * This function is a legacy means of pausing the audio device. * * New programs might want to use SDL_PauseAudioDevice() instead. This * function is equivalent to calling... * * ```c * SDL_PauseAudioDevice(1, pause_on); * ``` * * ...and is only useful if you used the legacy SDL_OpenAudio() function. * * \param pause_on non-zero to pause, 0 to unpause * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetAudioStatus * \sa SDL_PauseAudioDevice */ extern DECLSPEC void SDLCALL SDL_PauseAudio(int pause_on); /** * Use this function to pause and unpause audio playback on a specified * device. * * This function pauses and unpauses the audio callback processing for a given * device. Newly-opened audio devices start in the paused state, so you must * call this function with **pause_on**=0 after opening the specified audio * device to start playing sound. This allows you to safely initialize data * for your callback function after opening the audio device. Silence will be * written to the audio device while paused, and the audio callback is * guaranteed to not be called. Pausing one device does not prevent other * unpaused devices from running their callbacks. * * Pausing state does not stack; even if you pause a device several times, a * single unpause will start the device playing again, and vice versa. This is * different from how SDL_LockAudioDevice() works. * * If you just need to protect a few variables from race conditions vs your * callback, you shouldn't pause the audio device, as it will lead to dropouts * in the audio playback. Instead, you should use SDL_LockAudioDevice(). * * \param dev a device opened by SDL_OpenAudioDevice() * \param pause_on non-zero to pause, 0 to unpause * * \since This function is available since SDL 2.0.0. * * \sa SDL_LockAudioDevice */ extern DECLSPEC void SDLCALL SDL_PauseAudioDevice(SDL_AudioDeviceID dev, int pause_on); /* @} *//* Pause audio functions */ /** * Load the audio data of a WAVE file into memory. * * Loading a WAVE file requires `src`, `spec`, `audio_buf` and `audio_len` to * be valid pointers. The entire data portion of the file is then loaded into * memory and decoded if necessary. * * If `freesrc` is non-zero, the data source gets automatically closed and * freed before the function returns. * * Supported formats are RIFF WAVE files with the formats PCM (8, 16, 24, and * 32 bits), IEEE Float (32 bits), Microsoft ADPCM and IMA ADPCM (4 bits), and * A-law and mu-law (8 bits). Other formats are currently unsupported and * cause an error. * * If this function succeeds, the pointer returned by it is equal to `spec` * and the pointer to the audio data allocated by the function is written to * `audio_buf` and its length in bytes to `audio_len`. The SDL_AudioSpec * members `freq`, `channels`, and `format` are set to the values of the audio * data in the buffer. The `samples` member is set to a sane default and all * others are set to zero. * * It's necessary to use SDL_FreeWAV() to free the audio data returned in * `audio_buf` when it is no longer used. * * Because of the underspecification of the .WAV format, there are many * problematic files in the wild that cause issues with strict decoders. To * provide compatibility with these files, this decoder is lenient in regards * to the truncation of the file, the fact chunk, and the size of the RIFF * chunk. The hints `SDL_HINT_WAVE_RIFF_CHUNK_SIZE`, * `SDL_HINT_WAVE_TRUNCATION`, and `SDL_HINT_WAVE_FACT_CHUNK` can be used to * tune the behavior of the loading process. * * Any file that is invalid (due to truncation, corruption, or wrong values in * the headers), too big, or unsupported causes an error. Additionally, any * critical I/O error from the data source will terminate the loading process * with an error. The function returns NULL on error and in all cases (with * the exception of `src` being NULL), an appropriate error message will be * set. * * It is required that the data source supports seeking. * * Example: * * ```c * SDL_LoadWAV_RW(SDL_RWFromFile("sample.wav", "rb"), 1, &spec, &buf, &len); * ``` * * Note that the SDL_LoadWAV macro does this same thing for you, but in a less * messy way: * * ```c * SDL_LoadWAV("sample.wav", &spec, &buf, &len); * ``` * * \param src The data source for the WAVE data * \param freesrc If non-zero, SDL will _always_ free the data source * \param spec An SDL_AudioSpec that will be filled in with the wave file's * format details * \param audio_buf A pointer filled with the audio data, allocated by the * function. * \param audio_len A pointer filled with the length of the audio data buffer * in bytes * \returns This function, if successfully called, returns `spec`, which will * be filled with the audio data format of the wave source data. * `audio_buf` will be filled with a pointer to an allocated buffer * containing the audio data, and `audio_len` is filled with the * length of that audio buffer in bytes. * * This function returns NULL if the .WAV file cannot be opened, uses * an unknown data format, or is corrupt; call SDL_GetError() for * more information. * * When the application is done with the data returned in * `audio_buf`, it should call SDL_FreeWAV() to dispose of it. * * \since This function is available since SDL 2.0.0. * * \sa SDL_FreeWAV * \sa SDL_LoadWAV */ extern DECLSPEC SDL_AudioSpec *SDLCALL SDL_LoadWAV_RW(SDL_RWops * src, int freesrc, SDL_AudioSpec * spec, Uint8 ** audio_buf, Uint32 * audio_len); /** * Loads a WAV from a file. * Compatibility convenience function. */ #define SDL_LoadWAV(file, spec, audio_buf, audio_len) \ SDL_LoadWAV_RW(SDL_RWFromFile(file, "rb"),1, spec,audio_buf,audio_len) /** * Free data previously allocated with SDL_LoadWAV() or SDL_LoadWAV_RW(). * * After a WAVE file has been opened with SDL_LoadWAV() or SDL_LoadWAV_RW() * its data can eventually be freed with SDL_FreeWAV(). It is safe to call * this function with a NULL pointer. * * \param audio_buf a pointer to the buffer created by SDL_LoadWAV() or * SDL_LoadWAV_RW() * * \since This function is available since SDL 2.0.0. * * \sa SDL_LoadWAV * \sa SDL_LoadWAV_RW */ extern DECLSPEC void SDLCALL SDL_FreeWAV(Uint8 * audio_buf); /** * Initialize an SDL_AudioCVT structure for conversion. * * Before an SDL_AudioCVT structure can be used to convert audio data it must * be initialized with source and destination information. * * This function will zero out every field of the SDL_AudioCVT, so it must be * called before the application fills in the final buffer information. * * Once this function has returned successfully, and reported that a * conversion is necessary, the application fills in the rest of the fields in * SDL_AudioCVT, now that it knows how large a buffer it needs to allocate, * and then can call SDL_ConvertAudio() to complete the conversion. * * \param cvt an SDL_AudioCVT structure filled in with audio conversion * information * \param src_format the source format of the audio data; for more info see * SDL_AudioFormat * \param src_channels the number of channels in the source * \param src_rate the frequency (sample-frames-per-second) of the source * \param dst_format the destination format of the audio data; for more info * see SDL_AudioFormat * \param dst_channels the number of channels in the destination * \param dst_rate the frequency (sample-frames-per-second) of the destination * \returns 1 if the audio filter is prepared, 0 if no conversion is needed, * or a negative error code on failure; call SDL_GetError() for more * information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_ConvertAudio */ extern DECLSPEC int SDLCALL SDL_BuildAudioCVT(SDL_AudioCVT * cvt, SDL_AudioFormat src_format, Uint8 src_channels, int src_rate, SDL_AudioFormat dst_format, Uint8 dst_channels, int dst_rate); /** * Convert audio data to a desired audio format. * * This function does the actual audio data conversion, after the application * has called SDL_BuildAudioCVT() to prepare the conversion information and * then filled in the buffer details. * * Once the application has initialized the `cvt` structure using * SDL_BuildAudioCVT(), allocated an audio buffer and filled it with audio * data in the source format, this function will convert the buffer, in-place, * to the desired format. * * The data conversion may go through several passes; any given pass may * possibly temporarily increase the size of the data. For example, SDL might * expand 16-bit data to 32 bits before resampling to a lower frequency, * shrinking the data size after having grown it briefly. Since the supplied * buffer will be both the source and destination, converting as necessary * in-place, the application must allocate a buffer that will fully contain * the data during its largest conversion pass. After SDL_BuildAudioCVT() * returns, the application should set the `cvt->len` field to the size, in * bytes, of the source data, and allocate a buffer that is `cvt->len * * cvt->len_mult` bytes long for the `buf` field. * * The source data should be copied into this buffer before the call to * SDL_ConvertAudio(). Upon successful return, this buffer will contain the * converted audio, and `cvt->len_cvt` will be the size of the converted data, * in bytes. Any bytes in the buffer past `cvt->len_cvt` are undefined once * this function returns. * * \param cvt an SDL_AudioCVT structure that was previously set up by * SDL_BuildAudioCVT(). * \returns 0 if the conversion was completed successfully or a negative error * code on failure; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_BuildAudioCVT */ extern DECLSPEC int SDLCALL SDL_ConvertAudio(SDL_AudioCVT * cvt); /* SDL_AudioStream is a new audio conversion interface. The benefits vs SDL_AudioCVT: - it can handle resampling data in chunks without generating artifacts, when it doesn't have the complete buffer available. - it can handle incoming data in any variable size. - You push data as you have it, and pull it when you need it */ /* this is opaque to the outside world. */ struct _SDL_AudioStream; typedef struct _SDL_AudioStream SDL_AudioStream; /** * Create a new audio stream. * * \param src_format The format of the source audio * \param src_channels The number of channels of the source audio * \param src_rate The sampling rate of the source audio * \param dst_format The format of the desired audio output * \param dst_channels The number of channels of the desired audio output * \param dst_rate The sampling rate of the desired audio output * \returns 0 on success, or -1 on error. * * \since This function is available since SDL 2.0.7. * * \sa SDL_AudioStreamPut * \sa SDL_AudioStreamGet * \sa SDL_AudioStreamAvailable * \sa SDL_AudioStreamFlush * \sa SDL_AudioStreamClear * \sa SDL_FreeAudioStream */ extern DECLSPEC SDL_AudioStream * SDLCALL SDL_NewAudioStream(const SDL_AudioFormat src_format, const Uint8 src_channels, const int src_rate, const SDL_AudioFormat dst_format, const Uint8 dst_channels, const int dst_rate); /** * Add data to be converted/resampled to the stream. * * \param stream The stream the audio data is being added to * \param buf A pointer to the audio data to add * \param len The number of bytes to write to the stream * \returns 0 on success, or -1 on error. * * \since This function is available since SDL 2.0.7. * * \sa SDL_NewAudioStream * \sa SDL_AudioStreamGet * \sa SDL_AudioStreamAvailable * \sa SDL_AudioStreamFlush * \sa SDL_AudioStreamClear * \sa SDL_FreeAudioStream */ extern DECLSPEC int SDLCALL SDL_AudioStreamPut(SDL_AudioStream *stream, const void *buf, int len); /** * Get converted/resampled data from the stream * * \param stream The stream the audio is being requested from * \param buf A buffer to fill with audio data * \param len The maximum number of bytes to fill * \returns the number of bytes read from the stream, or -1 on error * * \since This function is available since SDL 2.0.7. * * \sa SDL_NewAudioStream * \sa SDL_AudioStreamPut * \sa SDL_AudioStreamAvailable * \sa SDL_AudioStreamFlush * \sa SDL_AudioStreamClear * \sa SDL_FreeAudioStream */ extern DECLSPEC int SDLCALL SDL_AudioStreamGet(SDL_AudioStream *stream, void *buf, int len); /** * Get the number of converted/resampled bytes available. * * The stream may be buffering data behind the scenes until it has enough to * resample correctly, so this number might be lower than what you expect, or * even be zero. Add more data or flush the stream if you need the data now. * * \since This function is available since SDL 2.0.7. * * \sa SDL_NewAudioStream * \sa SDL_AudioStreamPut * \sa SDL_AudioStreamGet * \sa SDL_AudioStreamFlush * \sa SDL_AudioStreamClear * \sa SDL_FreeAudioStream */ extern DECLSPEC int SDLCALL SDL_AudioStreamAvailable(SDL_AudioStream *stream); /** * Tell the stream that you're done sending data, and anything being buffered * should be converted/resampled and made available immediately. * * It is legal to add more data to a stream after flushing, but there will be * audio gaps in the output. Generally this is intended to signal the end of * input, so the complete output becomes available. * * \since This function is available since SDL 2.0.7. * * \sa SDL_NewAudioStream * \sa SDL_AudioStreamPut * \sa SDL_AudioStreamGet * \sa SDL_AudioStreamAvailable * \sa SDL_AudioStreamClear * \sa SDL_FreeAudioStream */ extern DECLSPEC int SDLCALL SDL_AudioStreamFlush(SDL_AudioStream *stream); /** * Clear any pending data in the stream without converting it * * \since This function is available since SDL 2.0.7. * * \sa SDL_NewAudioStream * \sa SDL_AudioStreamPut * \sa SDL_AudioStreamGet * \sa SDL_AudioStreamAvailable * \sa SDL_AudioStreamFlush * \sa SDL_FreeAudioStream */ extern DECLSPEC void SDLCALL SDL_AudioStreamClear(SDL_AudioStream *stream); /** * Free an audio stream * * \since This function is available since SDL 2.0.7. * * \sa SDL_NewAudioStream * \sa SDL_AudioStreamPut * \sa SDL_AudioStreamGet * \sa SDL_AudioStreamAvailable * \sa SDL_AudioStreamFlush * \sa SDL_AudioStreamClear */ extern DECLSPEC void SDLCALL SDL_FreeAudioStream(SDL_AudioStream *stream); #define SDL_MIX_MAXVOLUME 128 /** * This function is a legacy means of mixing audio. * * This function is equivalent to calling... * * ```c * SDL_MixAudioFormat(dst, src, format, len, volume); * ``` * * ...where `format` is the obtained format of the audio device from the * legacy SDL_OpenAudio() function. * * \param dst the destination for the mixed audio * \param src the source audio buffer to be mixed * \param len the length of the audio buffer in bytes * \param volume ranges from 0 - 128, and should be set to SDL_MIX_MAXVOLUME * for full audio volume * * \since This function is available since SDL 2.0.0. * * \sa SDL_MixAudioFormat */ extern DECLSPEC void SDLCALL SDL_MixAudio(Uint8 * dst, const Uint8 * src, Uint32 len, int volume); /** * Mix audio data in a specified format. * * This takes an audio buffer `src` of `len` bytes of `format` data and mixes * it into `dst`, performing addition, volume adjustment, and overflow * clipping. The buffer pointed to by `dst` must also be `len` bytes of * `format` data. * * This is provided for convenience -- you can mix your own audio data. * * Do not use this function for mixing together more than two streams of * sample data. The output from repeated application of this function may be * distorted by clipping, because there is no accumulator with greater range * than the input (not to mention this being an inefficient way of doing it). * * It is a common misconception that this function is required to write audio * data to an output stream in an audio callback. While you can do that, * SDL_MixAudioFormat() is really only needed when you're mixing a single * audio stream with a volume adjustment. * * \param dst the destination for the mixed audio * \param src the source audio buffer to be mixed * \param format the SDL_AudioFormat structure representing the desired audio * format * \param len the length of the audio buffer in bytes * \param volume ranges from 0 - 128, and should be set to SDL_MIX_MAXVOLUME * for full audio volume * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC void SDLCALL SDL_MixAudioFormat(Uint8 * dst, const Uint8 * src, SDL_AudioFormat format, Uint32 len, int volume); /** * Queue more audio on non-callback devices. * * If you are looking to retrieve queued audio from a non-callback capture * device, you want SDL_DequeueAudio() instead. SDL_QueueAudio() will return * -1 to signify an error if you use it with capture devices. * * SDL offers two ways to feed audio to the device: you can either supply a * callback that SDL triggers with some frequency to obtain more audio (pull * method), or you can supply no callback, and then SDL will expect you to * supply data at regular intervals (push method) with this function. * * There are no limits on the amount of data you can queue, short of * exhaustion of address space. Queued data will drain to the device as * necessary without further intervention from you. If the device needs audio * but there is not enough queued, it will play silence to make up the * difference. This means you will have skips in your audio playback if you * aren't routinely queueing sufficient data. * * This function copies the supplied data, so you are safe to free it when the * function returns. This function is thread-safe, but queueing to the same * device from two threads at once does not promise which buffer will be * queued first. * * You may not queue audio on a device that is using an application-supplied * callback; doing so returns an error. You have to use the audio callback or * queue audio with this function, but not both. * * You should not call SDL_LockAudio() on the device before queueing; SDL * handles locking internally for this function. * * Note that SDL2 does not support planar audio. You will need to resample * from planar audio formats into a non-planar one (see SDL_AudioFormat) * before queuing audio. * * \param dev the device ID to which we will queue audio * \param data the data to queue to the device for later playback * \param len the number of bytes (not samples!) to which `data` points * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.4. * * \sa SDL_ClearQueuedAudio * \sa SDL_GetQueuedAudioSize */ extern DECLSPEC int SDLCALL SDL_QueueAudio(SDL_AudioDeviceID dev, const void *data, Uint32 len); /** * Dequeue more audio on non-callback devices. * * If you are looking to queue audio for output on a non-callback playback * device, you want SDL_QueueAudio() instead. SDL_DequeueAudio() will always * return 0 if you use it with playback devices. * * SDL offers two ways to retrieve audio from a capture device: you can either * supply a callback that SDL triggers with some frequency as the device * records more audio data, (push method), or you can supply no callback, and * then SDL will expect you to retrieve data at regular intervals (pull * method) with this function. * * There are no limits on the amount of data you can queue, short of * exhaustion of address space. Data from the device will keep queuing as * necessary without further intervention from you. This means you will * eventually run out of memory if you aren't routinely dequeueing data. * * Capture devices will not queue data when paused; if you are expecting to * not need captured audio for some length of time, use SDL_PauseAudioDevice() * to stop the capture device from queueing more data. This can be useful * during, say, level loading times. When unpaused, capture devices will start * queueing data from that point, having flushed any capturable data available * while paused. * * This function is thread-safe, but dequeueing from the same device from two * threads at once does not promise which thread will dequeue data first. * * You may not dequeue audio from a device that is using an * application-supplied callback; doing so returns an error. You have to use * the audio callback, or dequeue audio with this function, but not both. * * You should not call SDL_LockAudio() on the device before dequeueing; SDL * handles locking internally for this function. * * \param dev the device ID from which we will dequeue audio * \param data a pointer into where audio data should be copied * \param len the number of bytes (not samples!) to which (data) points * \returns the number of bytes dequeued, which could be less than requested; * call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.5. * * \sa SDL_ClearQueuedAudio * \sa SDL_GetQueuedAudioSize */ extern DECLSPEC Uint32 SDLCALL SDL_DequeueAudio(SDL_AudioDeviceID dev, void *data, Uint32 len); /** * Get the number of bytes of still-queued audio. * * For playback devices: this is the number of bytes that have been queued for * playback with SDL_QueueAudio(), but have not yet been sent to the hardware. * * Once we've sent it to the hardware, this function can not decide the exact * byte boundary of what has been played. It's possible that we just gave the * hardware several kilobytes right before you called this function, but it * hasn't played any of it yet, or maybe half of it, etc. * * For capture devices, this is the number of bytes that have been captured by * the device and are waiting for you to dequeue. This number may grow at any * time, so this only informs of the lower-bound of available data. * * You may not queue or dequeue audio on a device that is using an * application-supplied callback; calling this function on such a device * always returns 0. You have to use the audio callback or queue audio, but * not both. * * You should not call SDL_LockAudio() on the device before querying; SDL * handles locking internally for this function. * * \param dev the device ID of which we will query queued audio size * \returns the number of bytes (not samples!) of queued audio. * * \since This function is available since SDL 2.0.4. * * \sa SDL_ClearQueuedAudio * \sa SDL_QueueAudio * \sa SDL_DequeueAudio */ extern DECLSPEC Uint32 SDLCALL SDL_GetQueuedAudioSize(SDL_AudioDeviceID dev); /** * Drop any queued audio data waiting to be sent to the hardware. * * Immediately after this call, SDL_GetQueuedAudioSize() will return 0. For * output devices, the hardware will start playing silence if more audio isn't * queued. For capture devices, the hardware will start filling the empty * queue with new data if the capture device isn't paused. * * This will not prevent playback of queued audio that's already been sent to * the hardware, as we can not undo that, so expect there to be some fraction * of a second of audio that might still be heard. This can be useful if you * want to, say, drop any pending music or any unprocessed microphone input * during a level change in your game. * * You may not queue or dequeue audio on a device that is using an * application-supplied callback; calling this function on such a device * always returns 0. You have to use the audio callback or queue audio, but * not both. * * You should not call SDL_LockAudio() on the device before clearing the * queue; SDL handles locking internally for this function. * * This function always succeeds and thus returns void. * * \param dev the device ID of which to clear the audio queue * * \since This function is available since SDL 2.0.4. * * \sa SDL_GetQueuedAudioSize * \sa SDL_QueueAudio * \sa SDL_DequeueAudio */ extern DECLSPEC void SDLCALL SDL_ClearQueuedAudio(SDL_AudioDeviceID dev); /** * \name Audio lock functions * * The lock manipulated by these functions protects the callback function. * During a SDL_LockAudio()/SDL_UnlockAudio() pair, you can be guaranteed that * the callback function is not running. Do not call these from the callback * function or you will cause deadlock. */ /* @{ */ /** * This function is a legacy means of locking the audio device. * * New programs might want to use SDL_LockAudioDevice() instead. This function * is equivalent to calling... * * ```c * SDL_LockAudioDevice(1); * ``` * * ...and is only useful if you used the legacy SDL_OpenAudio() function. * * \since This function is available since SDL 2.0.0. * * \sa SDL_LockAudioDevice * \sa SDL_UnlockAudio * \sa SDL_UnlockAudioDevice */ extern DECLSPEC void SDLCALL SDL_LockAudio(void); /** * Use this function to lock out the audio callback function for a specified * device. * * The lock manipulated by these functions protects the audio callback * function specified in SDL_OpenAudioDevice(). During a * SDL_LockAudioDevice()/SDL_UnlockAudioDevice() pair, you can be guaranteed * that the callback function for that device is not running, even if the * device is not paused. While a device is locked, any other unpaused, * unlocked devices may still run their callbacks. * * Calling this function from inside your audio callback is unnecessary. SDL * obtains this lock before calling your function, and releases it when the * function returns. * * You should not hold the lock longer than absolutely necessary. If you hold * it too long, you'll experience dropouts in your audio playback. Ideally, * your application locks the device, sets a few variables and unlocks again. * Do not do heavy work while holding the lock for a device. * * It is safe to lock the audio device multiple times, as long as you unlock * it an equivalent number of times. The callback will not run until the * device has been unlocked completely in this way. If your application fails * to unlock the device appropriately, your callback will never run, you might * hear repeating bursts of audio, and SDL_CloseAudioDevice() will probably * deadlock. * * Internally, the audio device lock is a mutex; if you lock from two threads * at once, not only will you block the audio callback, you'll block the other * thread. * * \param dev the ID of the device to be locked * * \since This function is available since SDL 2.0.0. * * \sa SDL_UnlockAudioDevice */ extern DECLSPEC void SDLCALL SDL_LockAudioDevice(SDL_AudioDeviceID dev); /** * This function is a legacy means of unlocking the audio device. * * New programs might want to use SDL_UnlockAudioDevice() instead. This * function is equivalent to calling... * * ```c * SDL_UnlockAudioDevice(1); * ``` * * ...and is only useful if you used the legacy SDL_OpenAudio() function. * * \since This function is available since SDL 2.0.0. * * \sa SDL_LockAudio * \sa SDL_UnlockAudioDevice */ extern DECLSPEC void SDLCALL SDL_UnlockAudio(void); /** * Use this function to unlock the audio callback function for a specified * device. * * This function should be paired with a previous SDL_LockAudioDevice() call. * * \param dev the ID of the device to be unlocked * * \since This function is available since SDL 2.0.0. * * \sa SDL_LockAudioDevice */ extern DECLSPEC void SDLCALL SDL_UnlockAudioDevice(SDL_AudioDeviceID dev); /* @} *//* Audio lock functions */ /** * This function is a legacy means of closing the audio device. * * This function is equivalent to calling... * * ```c * SDL_CloseAudioDevice(1); * ``` * * ...and is only useful if you used the legacy SDL_OpenAudio() function. * * \since This function is available since SDL 2.0.0. * * \sa SDL_OpenAudio */ extern DECLSPEC void SDLCALL SDL_CloseAudio(void); /** * Use this function to shut down audio processing and close the audio device. * * The application should close open audio devices once they are no longer * needed. Calling this function will wait until the device's audio callback * is not running, release the audio hardware and then clean up internal * state. No further audio will play from this device once this function * returns. * * This function may block briefly while pending audio data is played by the * hardware, so that applications don't drop the last buffer of data they * supplied. * * The device ID is invalid as soon as the device is closed, and is eligible * for reuse in a new SDL_OpenAudioDevice() call immediately. * * \param dev an audio device previously opened with SDL_OpenAudioDevice() * * \since This function is available since SDL 2.0.0. * * \sa SDL_OpenAudioDevice */ extern DECLSPEC void SDLCALL SDL_CloseAudioDevice(SDL_AudioDeviceID dev); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_audio_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_bits.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_bits.h * * Functions for fiddling with bits and bitmasks. */ #ifndef SDL_bits_h_ #define SDL_bits_h_ #include "SDL_stdinc.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** * \file SDL_bits.h */ /** * Get the index of the most significant bit. Result is undefined when called * with 0. This operation can also be stated as "count leading zeroes" and * "log base 2". * * \return the index of the most significant bit, or -1 if the value is 0. */ #if defined(__WATCOMC__) && defined(__386__) extern __inline int _SDL_bsr_watcom(Uint32); #pragma aux _SDL_bsr_watcom = \ "bsr eax, eax" \ parm [eax] nomemory \ value [eax] \ modify exact [eax] nomemory; #endif SDL_FORCE_INLINE int SDL_MostSignificantBitIndex32(Uint32 x) { #if defined(__GNUC__) && (__GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) /* Count Leading Zeroes builtin in GCC. * http://gcc.gnu.org/onlinedocs/gcc-4.3.4/gcc/Other-Builtins.html */ if (x == 0) { return -1; } return 31 - __builtin_clz(x); #elif defined(__WATCOMC__) && defined(__386__) if (x == 0) { return -1; } return _SDL_bsr_watcom(x); #elif defined(_MSC_VER) unsigned long index; if (_BitScanReverse(&index, x)) { return index; } return -1; #else /* Based off of Bit Twiddling Hacks by Sean Eron Anderson * , released in the public domain. * http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog */ const Uint32 b[] = {0x2, 0xC, 0xF0, 0xFF00, 0xFFFF0000}; const int S[] = {1, 2, 4, 8, 16}; int msbIndex = 0; int i; if (x == 0) { return -1; } for (i = 4; i >= 0; i--) { if (x & b[i]) { x >>= S[i]; msbIndex |= S[i]; } } return msbIndex; #endif } SDL_FORCE_INLINE SDL_bool SDL_HasExactlyOneBitSet32(Uint32 x) { if (x && !(x & (x - 1))) { return SDL_TRUE; } return SDL_FALSE; } /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_bits_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_blendmode.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_blendmode.h * * Header file declaring the SDL_BlendMode enumeration */ #ifndef SDL_blendmode_h_ #define SDL_blendmode_h_ #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** * \brief The blend mode used in SDL_RenderCopy() and drawing operations. */ typedef enum { SDL_BLENDMODE_NONE = 0x00000000, /**< no blending dstRGBA = srcRGBA */ SDL_BLENDMODE_BLEND = 0x00000001, /**< alpha blending dstRGB = (srcRGB * srcA) + (dstRGB * (1-srcA)) dstA = srcA + (dstA * (1-srcA)) */ SDL_BLENDMODE_ADD = 0x00000002, /**< additive blending dstRGB = (srcRGB * srcA) + dstRGB dstA = dstA */ SDL_BLENDMODE_MOD = 0x00000004, /**< color modulate dstRGB = srcRGB * dstRGB dstA = dstA */ SDL_BLENDMODE_MUL = 0x00000008, /**< color multiply dstRGB = (srcRGB * dstRGB) + (dstRGB * (1-srcA)) dstA = dstA */ SDL_BLENDMODE_INVALID = 0x7FFFFFFF /* Additional custom blend modes can be returned by SDL_ComposeCustomBlendMode() */ } SDL_BlendMode; /** * \brief The blend operation used when combining source and destination pixel components */ typedef enum { SDL_BLENDOPERATION_ADD = 0x1, /**< dst + src: supported by all renderers */ SDL_BLENDOPERATION_SUBTRACT = 0x2, /**< src - dst : supported by D3D9, D3D11, OpenGL, OpenGLES */ SDL_BLENDOPERATION_REV_SUBTRACT = 0x3, /**< dst - src : supported by D3D9, D3D11, OpenGL, OpenGLES */ SDL_BLENDOPERATION_MINIMUM = 0x4, /**< min(dst, src) : supported by D3D9, D3D11 */ SDL_BLENDOPERATION_MAXIMUM = 0x5 /**< max(dst, src) : supported by D3D9, D3D11 */ } SDL_BlendOperation; /** * \brief The normalized factor used to multiply pixel components */ typedef enum { SDL_BLENDFACTOR_ZERO = 0x1, /**< 0, 0, 0, 0 */ SDL_BLENDFACTOR_ONE = 0x2, /**< 1, 1, 1, 1 */ SDL_BLENDFACTOR_SRC_COLOR = 0x3, /**< srcR, srcG, srcB, srcA */ SDL_BLENDFACTOR_ONE_MINUS_SRC_COLOR = 0x4, /**< 1-srcR, 1-srcG, 1-srcB, 1-srcA */ SDL_BLENDFACTOR_SRC_ALPHA = 0x5, /**< srcA, srcA, srcA, srcA */ SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA = 0x6, /**< 1-srcA, 1-srcA, 1-srcA, 1-srcA */ SDL_BLENDFACTOR_DST_COLOR = 0x7, /**< dstR, dstG, dstB, dstA */ SDL_BLENDFACTOR_ONE_MINUS_DST_COLOR = 0x8, /**< 1-dstR, 1-dstG, 1-dstB, 1-dstA */ SDL_BLENDFACTOR_DST_ALPHA = 0x9, /**< dstA, dstA, dstA, dstA */ SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA = 0xA /**< 1-dstA, 1-dstA, 1-dstA, 1-dstA */ } SDL_BlendFactor; /** * Compose a custom blend mode for renderers. * * The functions SDL_SetRenderDrawBlendMode and SDL_SetTextureBlendMode accept * the SDL_BlendMode returned by this function if the renderer supports it. * * A blend mode controls how the pixels from a drawing operation (source) get * combined with the pixels from the render target (destination). First, the * components of the source and destination pixels get multiplied with their * blend factors. Then, the blend operation takes the two products and * calculates the result that will get stored in the render target. * * Expressed in pseudocode, it would look like this: * * ```c * dstRGB = colorOperation(srcRGB * srcColorFactor, dstRGB * dstColorFactor); * dstA = alphaOperation(srcA * srcAlphaFactor, dstA * dstAlphaFactor); * ``` * * Where the functions `colorOperation(src, dst)` and `alphaOperation(src, * dst)` can return one of the following: * * - `src + dst` * - `src - dst` * - `dst - src` * - `min(src, dst)` * - `max(src, dst)` * * The red, green, and blue components are always multiplied with the first, * second, and third components of the SDL_BlendFactor, respectively. The * fourth component is not used. * * The alpha component is always multiplied with the fourth component of the * SDL_BlendFactor. The other components are not used in the alpha * calculation. * * Support for these blend modes varies for each renderer. To check if a * specific SDL_BlendMode is supported, create a renderer and pass it to * either SDL_SetRenderDrawBlendMode or SDL_SetTextureBlendMode. They will * return with an error if the blend mode is not supported. * * This list describes the support of custom blend modes for each renderer in * SDL 2.0.6. All renderers support the four blend modes listed in the * SDL_BlendMode enumeration. * * - **direct3d**: Supports all operations with all factors. However, some * factors produce unexpected results with `SDL_BLENDOPERATION_MINIMUM` and * `SDL_BLENDOPERATION_MAXIMUM`. * - **direct3d11**: Same as Direct3D 9. * - **opengl**: Supports the `SDL_BLENDOPERATION_ADD` operation with all * factors. OpenGL versions 1.1, 1.2, and 1.3 do not work correctly with SDL * 2.0.6. * - **opengles**: Supports the `SDL_BLENDOPERATION_ADD` operation with all * factors. Color and alpha factors need to be the same. OpenGL ES 1 * implementation specific: May also support `SDL_BLENDOPERATION_SUBTRACT` * and `SDL_BLENDOPERATION_REV_SUBTRACT`. May support color and alpha * operations being different from each other. May support color and alpha * factors being different from each other. * - **opengles2**: Supports the `SDL_BLENDOPERATION_ADD`, * `SDL_BLENDOPERATION_SUBTRACT`, `SDL_BLENDOPERATION_REV_SUBTRACT` * operations with all factors. * - **psp**: No custom blend mode support. * - **software**: No custom blend mode support. * * Some renderers do not provide an alpha component for the default render * target. The `SDL_BLENDFACTOR_DST_ALPHA` and * `SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA` factors do not have an effect in this * case. * * \param srcColorFactor the SDL_BlendFactor applied to the red, green, and * blue components of the source pixels * \param dstColorFactor the SDL_BlendFactor applied to the red, green, and * blue components of the destination pixels * \param colorOperation the SDL_BlendOperation used to combine the red, * green, and blue components of the source and * destination pixels * \param srcAlphaFactor the SDL_BlendFactor applied to the alpha component of * the source pixels * \param dstAlphaFactor the SDL_BlendFactor applied to the alpha component of * the destination pixels * \param alphaOperation the SDL_BlendOperation used to combine the alpha * component of the source and destination pixels * \returns an SDL_BlendMode that represents the chosen factors and * operations. * * \since This function is available since SDL 2.0.6. * * \sa SDL_SetRenderDrawBlendMode * \sa SDL_GetRenderDrawBlendMode * \sa SDL_SetTextureBlendMode * \sa SDL_GetTextureBlendMode */ extern DECLSPEC SDL_BlendMode SDLCALL SDL_ComposeCustomBlendMode(SDL_BlendFactor srcColorFactor, SDL_BlendFactor dstColorFactor, SDL_BlendOperation colorOperation, SDL_BlendFactor srcAlphaFactor, SDL_BlendFactor dstAlphaFactor, SDL_BlendOperation alphaOperation); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_blendmode_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_clipboard.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_clipboard.h * * Include file for SDL clipboard handling */ #ifndef SDL_clipboard_h_ #define SDL_clipboard_h_ #include "SDL_stdinc.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /* Function prototypes */ /** * Put UTF-8 text into the clipboard. * * \param text the text to store in the clipboard * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetClipboardText * \sa SDL_HasClipboardText */ extern DECLSPEC int SDLCALL SDL_SetClipboardText(const char *text); /** * Get UTF-8 text from the clipboard, which must be freed with SDL_free(). * * This functions returns empty string if there was not enough memory left for * a copy of the clipboard's content. * * \returns the clipboard text on success or an empty string on failure; call * SDL_GetError() for more information. Caller must call SDL_free() * on the returned pointer when done with it (even if there was an * error). * * \since This function is available since SDL 2.0.0. * * \sa SDL_HasClipboardText * \sa SDL_SetClipboardText */ extern DECLSPEC char * SDLCALL SDL_GetClipboardText(void); /** * Query whether the clipboard exists and contains a non-empty text string. * * \returns SDL_TRUE if the clipboard has text, or SDL_FALSE if it does not. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetClipboardText * \sa SDL_SetClipboardText */ extern DECLSPEC SDL_bool SDLCALL SDL_HasClipboardText(void); /** * Put UTF-8 text into the primary selection. * * \param text the text to store in the primary selection * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.26.0. * * \sa SDL_GetPrimarySelectionText * \sa SDL_HasPrimarySelectionText */ extern DECLSPEC int SDLCALL SDL_SetPrimarySelectionText(const char *text); /** * Get UTF-8 text from the primary selection, which must be freed with * SDL_free(). * * This functions returns empty string if there was not enough memory left for * a copy of the primary selection's content. * * \returns the primary selection text on success or an empty string on * failure; call SDL_GetError() for more information. Caller must * call SDL_free() on the returned pointer when done with it (even if * there was an error). * * \since This function is available since SDL 2.26.0. * * \sa SDL_HasPrimarySelectionText * \sa SDL_SetPrimarySelectionText */ extern DECLSPEC char * SDLCALL SDL_GetPrimarySelectionText(void); /** * Query whether the primary selection exists and contains a non-empty text * string. * * \returns SDL_TRUE if the primary selection has text, or SDL_FALSE if it * does not. * * \since This function is available since SDL 2.26.0. * * \sa SDL_GetPrimarySelectionText * \sa SDL_SetPrimarySelectionText */ extern DECLSPEC SDL_bool SDLCALL SDL_HasPrimarySelectionText(void); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_clipboard_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_config.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef SDL_config_h_ #define SDL_config_h_ /** * \file SDL_config.h.in * * This is a set of defines to configure the SDL features */ /* General platform specific identifiers */ #include "SDL_platform.h" /* C language features */ /* #undef const */ /* #undef inline */ /* #undef volatile */ /* C datatypes */ /* Define SIZEOF_VOIDP for 64/32 architectures */ #if defined(__LP64__) || defined(_LP64) || defined(_WIN64) #define SIZEOF_VOIDP 8 #else #define SIZEOF_VOIDP 4 #endif #define HAVE_GCC_ATOMICS 1 /* #undef HAVE_GCC_SYNC_LOCK_TEST_AND_SET */ /* Comment this if you want to build without any C library requirements */ #define HAVE_LIBC 1 #ifdef HAVE_LIBC /* Useful headers */ #define STDC_HEADERS 1 /* #undef HAVE_ALLOCA_H */ #define HAVE_CTYPE_H 1 #define HAVE_FLOAT_H 1 /* #undef HAVE_ICONV_H */ #define HAVE_INTTYPES_H 1 #define HAVE_LIMITS_H 1 #define HAVE_MALLOC_H 1 #define HAVE_MATH_H 1 #define HAVE_MEMORY_H 1 #define HAVE_SIGNAL_H 1 #define HAVE_STDARG_H 1 #define HAVE_STDDEF_H 1 #define HAVE_STDINT_H 1 #define HAVE_STDIO_H 1 #define HAVE_STDLIB_H 1 #define HAVE_STRINGS_H 1 #define HAVE_STRING_H 1 #define HAVE_SYS_TYPES_H 1 #define HAVE_WCHAR_H 1 /* #undef HAVE_LINUX_INPUT_H */ /* #undef HAVE_PTHREAD_NP_H */ /* #undef HAVE_LIBUNWIND_H */ /* C library functions */ /* #undef HAVE_DLOPEN */ #define HAVE_MALLOC 1 #define HAVE_CALLOC 1 #define HAVE_REALLOC 1 #define HAVE_FREE 1 #define HAVE_ALLOCA 1 #ifndef __WIN32__ /* Don't use C runtime versions of these on Windows */ #define HAVE_GETENV 1 /* #undef HAVE_SETENV */ #define HAVE_PUTENV 1 /* #undef HAVE_UNSETENV */ #endif #define HAVE_QSORT 1 #define HAVE_BSEARCH 1 #define HAVE_ABS 1 /* #undef HAVE_BCOPY */ #define HAVE_MEMSET 1 #define HAVE_MEMCPY 1 #define HAVE_MEMMOVE 1 #define HAVE_MEMCMP 1 #define HAVE_WCSLEN 1 /* #undef HAVE_WCSLCPY */ /* #undef HAVE_WCSLCAT */ #define HAVE__WCSDUP 1 #define HAVE_WCSDUP 1 #define HAVE_WCSSTR 1 #define HAVE_WCSCMP 1 #define HAVE_WCSNCMP 1 /* #undef HAVE_WCSCASECMP */ #define HAVE__WCSICMP 1 /* #undef HAVE_WCSNCASECMP */ #define HAVE__WCSNICMP 1 #define HAVE_STRLEN 1 /* #undef HAVE_STRLCPY */ /* #undef HAVE_STRLCAT */ #define HAVE__STRREV 1 #define HAVE__STRUPR 1 #define HAVE__STRLWR 1 /* #undef HAVE_INDEX */ /* #undef HAVE_RINDEX */ #define HAVE_STRCHR 1 #define HAVE_STRRCHR 1 #define HAVE_STRSTR 1 #define HAVE_STRTOK_R 1 #define HAVE_ITOA 1 #define HAVE__LTOA 1 /* #undef HAVE__UITOA */ #define HAVE__ULTOA 1 #define HAVE_STRTOL 1 #define HAVE_STRTOUL 1 #define HAVE__I64TOA 1 #define HAVE__UI64TOA 1 #define HAVE_STRTOLL 1 #define HAVE_STRTOULL 1 #define HAVE_STRTOD 1 #define HAVE_ATOI 1 #define HAVE_ATOF 1 #define HAVE_STRCMP 1 #define HAVE_STRNCMP 1 #define HAVE__STRICMP 1 #define HAVE_STRCASECMP 1 #define HAVE__STRNICMP 1 #define HAVE_STRNCASECMP 1 /* #undef HAVE_STRCASESTR */ #define HAVE_SSCANF 1 #define HAVE_VSSCANF 1 #define HAVE_VSNPRINTF 1 #define HAVE_M_PI 1 #define HAVE_ACOS 1 #define HAVE_ACOSF 1 #define HAVE_ASIN 1 #define HAVE_ASINF 1 #define HAVE_ATAN 1 #define HAVE_ATANF 1 #define HAVE_ATAN2 1 #define HAVE_ATAN2F 1 #define HAVE_CEIL 1 #define HAVE_CEILF 1 #define HAVE_COPYSIGN 1 #define HAVE_COPYSIGNF 1 #define HAVE_COS 1 #define HAVE_COSF 1 #define HAVE_EXP 1 #define HAVE_EXPF 1 #define HAVE_FABS 1 #define HAVE_FABSF 1 #define HAVE_FLOOR 1 #define HAVE_FLOORF 1 #define HAVE_FMOD 1 #define HAVE_FMODF 1 #define HAVE_LOG 1 #define HAVE_LOGF 1 #define HAVE_LOG10 1 #define HAVE_LOG10F 1 #define HAVE_LROUND 1 #define HAVE_LROUNDF 1 #define HAVE_POW 1 #define HAVE_POWF 1 #define HAVE_ROUND 1 #define HAVE_ROUNDF 1 #define HAVE_SCALBN 1 #define HAVE_SCALBNF 1 #define HAVE_SIN 1 #define HAVE_SINF 1 #define HAVE_SQRT 1 #define HAVE_SQRTF 1 #define HAVE_TAN 1 #define HAVE_TANF 1 #define HAVE_TRUNC 1 #define HAVE_TRUNCF 1 #define HAVE_FOPEN64 1 #define HAVE_FSEEKO 1 #define HAVE_FSEEKO64 1 /* #undef HAVE_MEMFD_CREATE */ /* #undef HAVE_POSIX_FALLOCATE */ /* #undef HAVE_SIGACTION */ /* #undef HAVE_SA_SIGACTION */ #define HAVE_SETJMP 1 #define HAVE_NANOSLEEP 1 /* #undef HAVE_SYSCONF */ /* #undef HAVE_SYSCTLBYNAME */ /* #undef HAVE_CLOCK_GETTIME */ /* #undef HAVE_GETPAGESIZE */ /* #undef HAVE_MPROTECT */ /* #undef HAVE_ICONV */ /* #undef SDL_USE_LIBICONV */ /* #undef HAVE_PTHREAD_SETNAME_NP */ /* #undef HAVE_PTHREAD_SET_NAME_NP */ /* #undef HAVE_SEM_TIMEDWAIT */ /* #undef HAVE_GETAUXVAL */ /* #undef HAVE_ELF_AUX_INFO */ /* #undef HAVE_POLL */ #define HAVE__EXIT 1 #else #define HAVE_STDARG_H 1 #define HAVE_STDDEF_H 1 #define HAVE_STDINT_H 1 #define HAVE_FLOAT_H 1 #endif /* HAVE_LIBC */ /* #undef HAVE_ALTIVEC_H */ /* #undef HAVE_DBUS_DBUS_H */ /* #undef HAVE_FCITX */ /* #undef HAVE_IBUS_IBUS_H */ /* #undef HAVE_SYS_INOTIFY_H */ /* #undef HAVE_INOTIFY_INIT */ /* #undef HAVE_INOTIFY_INIT1 */ /* #undef HAVE_INOTIFY */ /* #undef HAVE_LIBUSB */ /* #undef HAVE_O_CLOEXEC */ /* Apple platforms might be building universal binaries, where Intel builds can use immintrin.h but other architectures can't. */ #ifdef __APPLE__ # if defined(__has_include) && (defined(__i386__) || defined(__x86_64)) # if __has_include() # define HAVE_IMMINTRIN_H 1 # endif # endif #else /* non-Apple platforms can use the normal CMake check for this. */ #define HAVE_IMMINTRIN_H 1 #endif /* #undef HAVE_LIBUDEV_H */ /* #undef HAVE_LIBSAMPLERATE_H */ /* #undef HAVE_LIBDECOR_H */ #define HAVE_D3D_H 1 #define HAVE_D3D11_H 1 #define HAVE_D3D12_H 1 #define HAVE_DDRAW_H 1 #define HAVE_DSOUND_H 1 #define HAVE_DINPUT_H 1 #define HAVE_XINPUT_H 1 /* #undef HAVE_WINDOWS_GAMING_INPUT_H */ #define HAVE_DXGI_H 1 #define HAVE_MMDEVICEAPI_H 1 #define HAVE_AUDIOCLIENT_H 1 #define HAVE_TPCSHRD_H 1 #define HAVE_SENSORSAPI_H 1 #define HAVE_ROAPI_H 1 #define HAVE_SHELLSCALINGAPI_H 1 /* #undef USE_POSIX_SPAWN */ /* SDL internal assertion support */ #if 0 /* #undef SDL_DEFAULT_ASSERT_LEVEL */ #endif /* Allow disabling of core subsystems */ /* #undef SDL_ATOMIC_DISABLED */ /* #undef SDL_AUDIO_DISABLED */ /* #undef SDL_CPUINFO_DISABLED */ /* #undef SDL_EVENTS_DISABLED */ /* #undef SDL_FILE_DISABLED */ /* #undef SDL_JOYSTICK_DISABLED */ /* #undef SDL_HAPTIC_DISABLED */ /* #undef SDL_HIDAPI_DISABLED */ /* #undef SDL_SENSOR_DISABLED */ /* #undef SDL_LOADSO_DISABLED */ /* #undef SDL_RENDER_DISABLED */ /* #undef SDL_THREADS_DISABLED */ /* #undef SDL_TIMERS_DISABLED */ /* #undef SDL_VIDEO_DISABLED */ /* #undef SDL_POWER_DISABLED */ /* #undef SDL_FILESYSTEM_DISABLED */ /* #undef SDL_LOCALE_DISABLED */ /* #undef SDL_MISC_DISABLED */ /* Enable various audio drivers */ /* #undef SDL_AUDIO_DRIVER_ALSA */ /* #undef SDL_AUDIO_DRIVER_ALSA_DYNAMIC */ /* #undef SDL_AUDIO_DRIVER_ANDROID */ /* #undef SDL_AUDIO_DRIVER_OPENSLES */ /* #undef SDL_AUDIO_DRIVER_AAUDIO */ /* #undef SDL_AUDIO_DRIVER_ARTS */ /* #undef SDL_AUDIO_DRIVER_ARTS_DYNAMIC */ /* #undef SDL_AUDIO_DRIVER_COREAUDIO */ #define SDL_AUDIO_DRIVER_DISK 1 #define SDL_AUDIO_DRIVER_DSOUND 1 #define SDL_AUDIO_DRIVER_DUMMY 1 /* #undef SDL_AUDIO_DRIVER_EMSCRIPTEN */ /* #undef SDL_AUDIO_DRIVER_ESD */ /* #undef SDL_AUDIO_DRIVER_ESD_DYNAMIC */ /* #undef SDL_AUDIO_DRIVER_FUSIONSOUND */ /* #undef SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC */ /* #undef SDL_AUDIO_DRIVER_HAIKU */ /* #undef SDL_AUDIO_DRIVER_JACK */ /* #undef SDL_AUDIO_DRIVER_JACK_DYNAMIC */ /* #undef SDL_AUDIO_DRIVER_NAS */ /* #undef SDL_AUDIO_DRIVER_NAS_DYNAMIC */ /* #undef SDL_AUDIO_DRIVER_NETBSD */ /* #undef SDL_AUDIO_DRIVER_OSS */ /* #undef SDL_AUDIO_DRIVER_PAUDIO */ /* #undef SDL_AUDIO_DRIVER_PIPEWIRE */ /* #undef SDL_AUDIO_DRIVER_PIPEWIRE_DYNAMIC */ /* #undef SDL_AUDIO_DRIVER_PULSEAUDIO */ /* #undef SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC */ /* #undef SDL_AUDIO_DRIVER_QSA */ /* #undef SDL_AUDIO_DRIVER_SNDIO */ /* #undef SDL_AUDIO_DRIVER_SNDIO_DYNAMIC */ /* #undef SDL_AUDIO_DRIVER_SUNAUDIO */ #define SDL_AUDIO_DRIVER_WASAPI 1 #define SDL_AUDIO_DRIVER_WINMM 1 /* #undef SDL_AUDIO_DRIVER_OS2 */ /* #undef SDL_AUDIO_DRIVER_VITA */ /* #undef SDL_AUDIO_DRIVER_PSP */ /* #undef SDL_AUDIO_DRIVER_PS2 */ /* #undef SDL_AUDIO_DRIVER_N3DS */ /* Enable various input drivers */ /* #undef SDL_INPUT_LINUXEV */ /* #undef SDL_INPUT_LINUXKD */ /* #undef SDL_INPUT_FBSDKBIO */ /* #undef SDL_INPUT_WSCONS */ /* #undef SDL_JOYSTICK_ANDROID */ /* #undef SDL_JOYSTICK_HAIKU */ /* #undef SDL_JOYSTICK_WGI */ #define SDL_JOYSTICK_DINPUT 1 #define SDL_JOYSTICK_XINPUT 1 /* #undef SDL_JOYSTICK_DUMMY */ /* #undef SDL_JOYSTICK_IOKIT */ /* #undef SDL_JOYSTICK_MFI */ /* #undef SDL_JOYSTICK_LINUX */ /* #undef SDL_JOYSTICK_OS2 */ /* #undef SDL_JOYSTICK_USBHID */ /* #undef SDL_HAVE_MACHINE_JOYSTICK_H */ #define SDL_JOYSTICK_HIDAPI 1 #define SDL_JOYSTICK_RAWINPUT 1 /* #undef SDL_JOYSTICK_EMSCRIPTEN */ #define SDL_JOYSTICK_VIRTUAL 1 /* #undef SDL_JOYSTICK_VITA */ /* #undef SDL_JOYSTICK_PSP */ /* #undef SDL_JOYSTICK_PS2 */ /* #undef SDL_JOYSTICK_N3DS */ /* #undef SDL_HAPTIC_DUMMY */ /* #undef SDL_HAPTIC_LINUX */ /* #undef SDL_HAPTIC_IOKIT */ #define SDL_HAPTIC_DINPUT 1 #define SDL_HAPTIC_XINPUT 1 /* #undef SDL_HAPTIC_ANDROID */ /* #undef SDL_LIBUSB_DYNAMIC */ /* #undef SDL_UDEV_DYNAMIC */ /* Enable various sensor drivers */ /* #undef SDL_SENSOR_ANDROID */ /* #undef SDL_SENSOR_COREMOTION */ #define SDL_SENSOR_WINDOWS 1 /* #undef SDL_SENSOR_DUMMY */ /* #undef SDL_SENSOR_VITA */ /* #undef SDL_SENSOR_N3DS */ /* Enable various shared object loading systems */ /* #undef SDL_LOADSO_DLOPEN */ /* #undef SDL_LOADSO_DUMMY */ /* #undef SDL_LOADSO_LDG */ #define SDL_LOADSO_WINDOWS 1 /* #undef SDL_LOADSO_OS2 */ /* Enable various threading systems */ #define SDL_THREAD_GENERIC_COND_SUFFIX 1 /* #undef SDL_THREAD_PTHREAD */ /* #undef SDL_THREAD_PTHREAD_RECURSIVE_MUTEX */ /* #undef SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP */ #define SDL_THREAD_WINDOWS 1 /* #undef SDL_THREAD_OS2 */ /* #undef SDL_THREAD_VITA */ /* #undef SDL_THREAD_PSP */ /* #undef SDL_THREAD_PS2 */ /* #undef SDL_THREAD_N3DS */ /* Enable various timer systems */ /* #undef SDL_TIMER_HAIKU */ /* #undef SDL_TIMER_DUMMY */ /* #undef SDL_TIMER_UNIX */ #define SDL_TIMER_WINDOWS 1 /* #undef SDL_TIMER_OS2 */ /* #undef SDL_TIMER_VITA */ /* #undef SDL_TIMER_PSP */ /* #undef SDL_TIMER_PS2 */ /* #undef SDL_TIMER_N3DS */ /* Enable various video drivers */ /* #undef SDL_VIDEO_DRIVER_ANDROID */ /* #undef SDL_VIDEO_DRIVER_EMSCRIPTEN */ /* #undef SDL_VIDEO_DRIVER_HAIKU */ /* #undef SDL_VIDEO_DRIVER_COCOA */ /* #undef SDL_VIDEO_DRIVER_UIKIT */ /* #undef SDL_VIDEO_DRIVER_DIRECTFB */ /* #undef SDL_VIDEO_DRIVER_DIRECTFB_DYNAMIC */ #define SDL_VIDEO_DRIVER_DUMMY 1 #define SDL_VIDEO_DRIVER_OFFSCREEN 1 #define SDL_VIDEO_DRIVER_WINDOWS 1 /* #undef SDL_VIDEO_DRIVER_WINRT */ /* #undef SDL_VIDEO_DRIVER_WAYLAND */ /* #undef SDL_VIDEO_DRIVER_RPI */ /* #undef SDL_VIDEO_DRIVER_VIVANTE */ /* #undef SDL_VIDEO_DRIVER_VIVANTE_VDK */ /* #undef SDL_VIDEO_DRIVER_OS2 */ /* #undef SDL_VIDEO_DRIVER_QNX */ /* #undef SDL_VIDEO_DRIVER_RISCOS */ /* #undef SDL_VIDEO_DRIVER_PSP */ /* #undef SDL_VIDEO_DRIVER_PS2 */ /* #undef SDL_VIDEO_DRIVER_KMSDRM */ /* #undef SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC */ /* #undef SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC_GBM */ /* #undef SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH */ /* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC */ /* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL */ /* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR */ /* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON */ /* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_LIBDECOR */ /* #undef SDL_VIDEO_DRIVER_X11 */ /* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC */ /* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT */ /* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR */ /* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2 */ /* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XFIXES */ /* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR */ /* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS */ /* #undef SDL_VIDEO_DRIVER_X11_XCURSOR */ /* #undef SDL_VIDEO_DRIVER_X11_XDBE */ /* #undef SDL_VIDEO_DRIVER_X11_XINPUT2 */ /* #undef SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH */ /* #undef SDL_VIDEO_DRIVER_X11_XFIXES */ /* #undef SDL_VIDEO_DRIVER_X11_XRANDR */ /* #undef SDL_VIDEO_DRIVER_X11_XSCRNSAVER */ /* #undef SDL_VIDEO_DRIVER_X11_XSHAPE */ /* #undef SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS */ /* #undef SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM */ /* #undef SDL_VIDEO_DRIVER_VITA */ /* #undef SDL_VIDEO_DRIVER_N3DS */ #define SDL_VIDEO_RENDER_D3D 1 #define SDL_VIDEO_RENDER_D3D11 1 #define SDL_VIDEO_RENDER_D3D12 1 #define SDL_VIDEO_RENDER_OGL 1 /* #undef SDL_VIDEO_RENDER_OGL_ES */ #define SDL_VIDEO_RENDER_OGL_ES2 1 /* #undef SDL_VIDEO_RENDER_DIRECTFB */ /* #undef SDL_VIDEO_RENDER_METAL */ /* #undef SDL_VIDEO_RENDER_VITA_GXM */ /* #undef SDL_VIDEO_RENDER_PS2 */ /* #undef SDL_VIDEO_RENDER_PSP */ /* Enable OpenGL support */ #define SDL_VIDEO_OPENGL 1 /* #undef SDL_VIDEO_OPENGL_ES */ #define SDL_VIDEO_OPENGL_ES2 1 /* #undef SDL_VIDEO_OPENGL_BGL */ /* #undef SDL_VIDEO_OPENGL_CGL */ /* #undef SDL_VIDEO_OPENGL_GLX */ #define SDL_VIDEO_OPENGL_WGL 1 #define SDL_VIDEO_OPENGL_EGL 1 /* #undef SDL_VIDEO_OPENGL_OSMESA */ /* #undef SDL_VIDEO_OPENGL_OSMESA_DYNAMIC */ /* Enable Vulkan support */ #define SDL_VIDEO_VULKAN 1 /* Enable Metal support */ /* #undef SDL_VIDEO_METAL */ /* Enable system power support */ /* #undef SDL_POWER_ANDROID */ /* #undef SDL_POWER_LINUX */ #define SDL_POWER_WINDOWS 1 /* #undef SDL_POWER_WINRT */ /* #undef SDL_POWER_MACOSX */ /* #undef SDL_POWER_UIKIT */ /* #undef SDL_POWER_HAIKU */ /* #undef SDL_POWER_EMSCRIPTEN */ /* #undef SDL_POWER_HARDWIRED */ /* #undef SDL_POWER_VITA */ /* #undef SDL_POWER_PSP */ /* #undef SDL_POWER_N3DS */ /* Enable system filesystem support */ /* #undef SDL_FILESYSTEM_ANDROID */ /* #undef SDL_FILESYSTEM_HAIKU */ /* #undef SDL_FILESYSTEM_COCOA */ /* #undef SDL_FILESYSTEM_DUMMY */ /* #undef SDL_FILESYSTEM_RISCOS */ /* #undef SDL_FILESYSTEM_UNIX */ #define SDL_FILESYSTEM_WINDOWS 1 /* #undef SDL_FILESYSTEM_EMSCRIPTEN */ /* #undef SDL_FILESYSTEM_OS2 */ /* #undef SDL_FILESYSTEM_VITA */ /* #undef SDL_FILESYSTEM_PSP */ /* #undef SDL_FILESYSTEM_PS2 */ /* #undef SDL_FILESYSTEM_N3DS */ /* Enable misc subsystem */ /* #undef SDL_MISC_DUMMY */ /* Enable locale subsystem */ /* #undef SDL_LOCALE_DUMMY */ /* Enable assembly routines */ /* #undef SDL_ALTIVEC_BLITTERS */ /* #undef SDL_ARM_SIMD_BLITTERS */ /* #undef SDL_ARM_NEON_BLITTERS */ /* Whether SDL_DYNAMIC_API needs dlopen */ /* #undef DYNAPI_NEEDS_DLOPEN */ /* Enable dynamic libsamplerate support */ /* #undef SDL_LIBSAMPLERATE_DYNAMIC */ /* Enable ime support */ /* #undef SDL_USE_IME */ /* Platform specific definitions */ /* #undef SDL_IPHONE_KEYBOARD */ /* #undef SDL_IPHONE_LAUNCHSCREEN */ /* #undef SDL_VIDEO_VITA_PIB */ /* #undef SDL_VIDEO_VITA_PVR */ /* #undef SDL_VIDEO_VITA_PVR_OGL */ /* #undef SDL_HAVE_LIBDECOR_GET_MIN_MAX */ #if !defined(HAVE_STDINT_H) && !defined(_STDINT_H_) /* Most everything except Visual Studio 2008 and earlier has stdint.h now */ #if defined(_MSC_VER) && (_MSC_VER < 1600) typedef signed __int8 int8_t; typedef unsigned __int8 uint8_t; typedef signed __int16 int16_t; typedef unsigned __int16 uint16_t; typedef signed __int32 int32_t; typedef unsigned __int32 uint32_t; typedef signed __int64 int64_t; typedef unsigned __int64 uint64_t; #ifndef _UINTPTR_T_DEFINED #ifdef _WIN64 typedef unsigned __int64 uintptr_t; #else typedef unsigned int uintptr_t; #endif #define _UINTPTR_T_DEFINED #endif #endif /* Visual Studio 2008 */ #endif /* !_STDINT_H_ && !HAVE_STDINT_H */ #endif /* SDL_config_h_ */ ================================================ FILE: libraries/sdl2/SDL_copying.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ ================================================ FILE: libraries/sdl2/SDL_cpuinfo.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_cpuinfo.h * * CPU feature detection for SDL. */ #ifndef SDL_cpuinfo_h_ #define SDL_cpuinfo_h_ #include "SDL_stdinc.h" /* Need to do this here because intrin.h has C++ code in it */ /* Visual Studio 2005 has a bug where intrin.h conflicts with winnt.h */ #if defined(_MSC_VER) && (_MSC_VER >= 1500) && (defined(_M_IX86) || defined(_M_X64)) #ifdef __clang__ /* As of Clang 11, '_m_prefetchw' is conflicting with the winnt.h's version, so we define the needed '_m_prefetch' here as a pseudo-header, until the issue is fixed. */ #ifndef __PRFCHWINTRIN_H #define __PRFCHWINTRIN_H static __inline__ void __attribute__((__always_inline__, __nodebug__)) _m_prefetch(void *__P) { __builtin_prefetch (__P, 0, 3 /* _MM_HINT_T0 */); } #endif /* __PRFCHWINTRIN_H */ #endif /* __clang__ */ #include #ifndef _WIN64 #ifndef __MMX__ #define __MMX__ #endif #ifndef __3dNOW__ #define __3dNOW__ #endif #endif #ifndef __SSE__ #define __SSE__ #endif #ifndef __SSE2__ #define __SSE2__ #endif #ifndef __SSE3__ #define __SSE3__ #endif #elif defined(__MINGW64_VERSION_MAJOR) #include #if !defined(SDL_DISABLE_ARM_NEON_H) && defined(__ARM_NEON) # include #endif #else /* altivec.h redefining bool causes a number of problems, see bugs 3993 and 4392, so you need to explicitly define SDL_ENABLE_ALTIVEC_H to have it included. */ #if defined(HAVE_ALTIVEC_H) && defined(__ALTIVEC__) && !defined(__APPLE_ALTIVEC__) && defined(SDL_ENABLE_ALTIVEC_H) #include #endif #if !defined(SDL_DISABLE_ARM_NEON_H) # if defined(__ARM_NEON) # include # elif defined(__WINDOWS__) || defined(__WINRT__) || defined(__GDK__) /* Visual Studio doesn't define __ARM_ARCH, but _M_ARM (if set, always 7), and _M_ARM64 (if set, always 1). */ # if defined(_M_ARM) # include # include # define __ARM_NEON 1 /* Set __ARM_NEON so that it can be used elsewhere, at compile time */ # endif # if defined (_M_ARM64) # include # include # define __ARM_NEON 1 /* Set __ARM_NEON so that it can be used elsewhere, at compile time */ # define __ARM_ARCH 8 # endif # endif #endif #endif /* compiler version */ #if defined(__3dNOW__) && !defined(SDL_DISABLE_MM3DNOW_H) #include #endif #if defined(__loongarch_sx) && !defined(SDL_DISABLE_LSX_H) #include #define __LSX__ #endif #if defined(__loongarch_asx) && !defined(SDL_DISABLE_LASX_H) #include #define __LASX__ #endif #if defined(HAVE_IMMINTRIN_H) && !defined(SDL_DISABLE_IMMINTRIN_H) #include #else #if defined(__MMX__) && !defined(SDL_DISABLE_MMINTRIN_H) #include #endif #if defined(__SSE__) && !defined(SDL_DISABLE_XMMINTRIN_H) #include #endif #if defined(__SSE2__) && !defined(SDL_DISABLE_EMMINTRIN_H) #include #endif #if defined(__SSE3__) && !defined(SDL_DISABLE_PMMINTRIN_H) #include #endif #endif /* HAVE_IMMINTRIN_H */ #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /* This is a guess for the cacheline size used for padding. * Most x86 processors have a 64 byte cache line. * The 64-bit PowerPC processors have a 128 byte cache line. * We'll use the larger value to be generally safe. */ #define SDL_CACHELINE_SIZE 128 /** * Get the number of CPU cores available. * * \returns the total number of logical CPU cores. On CPUs that include * technologies such as hyperthreading, the number of logical cores * may be more than the number of physical cores. * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC int SDLCALL SDL_GetCPUCount(void); /** * Determine the L1 cache line size of the CPU. * * This is useful for determining multi-threaded structure padding or SIMD * prefetch sizes. * * \returns the L1 cache line size of the CPU, in bytes. * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC int SDLCALL SDL_GetCPUCacheLineSize(void); /** * Determine whether the CPU has the RDTSC instruction. * * This always returns false on CPUs that aren't using Intel instruction sets. * * \returns SDL_TRUE if the CPU has the RDTSC instruction or SDL_FALSE if not. * * \since This function is available since SDL 2.0.0. * * \sa SDL_Has3DNow * \sa SDL_HasAltiVec * \sa SDL_HasAVX * \sa SDL_HasAVX2 * \sa SDL_HasMMX * \sa SDL_HasSSE * \sa SDL_HasSSE2 * \sa SDL_HasSSE3 * \sa SDL_HasSSE41 * \sa SDL_HasSSE42 */ extern DECLSPEC SDL_bool SDLCALL SDL_HasRDTSC(void); /** * Determine whether the CPU has AltiVec features. * * This always returns false on CPUs that aren't using PowerPC instruction * sets. * * \returns SDL_TRUE if the CPU has AltiVec features or SDL_FALSE if not. * * \since This function is available since SDL 2.0.0. * * \sa SDL_Has3DNow * \sa SDL_HasAVX * \sa SDL_HasAVX2 * \sa SDL_HasMMX * \sa SDL_HasRDTSC * \sa SDL_HasSSE * \sa SDL_HasSSE2 * \sa SDL_HasSSE3 * \sa SDL_HasSSE41 * \sa SDL_HasSSE42 */ extern DECLSPEC SDL_bool SDLCALL SDL_HasAltiVec(void); /** * Determine whether the CPU has MMX features. * * This always returns false on CPUs that aren't using Intel instruction sets. * * \returns SDL_TRUE if the CPU has MMX features or SDL_FALSE if not. * * \since This function is available since SDL 2.0.0. * * \sa SDL_Has3DNow * \sa SDL_HasAltiVec * \sa SDL_HasAVX * \sa SDL_HasAVX2 * \sa SDL_HasRDTSC * \sa SDL_HasSSE * \sa SDL_HasSSE2 * \sa SDL_HasSSE3 * \sa SDL_HasSSE41 * \sa SDL_HasSSE42 */ extern DECLSPEC SDL_bool SDLCALL SDL_HasMMX(void); /** * Determine whether the CPU has 3DNow! features. * * This always returns false on CPUs that aren't using AMD instruction sets. * * \returns SDL_TRUE if the CPU has 3DNow! features or SDL_FALSE if not. * * \since This function is available since SDL 2.0.0. * * \sa SDL_HasAltiVec * \sa SDL_HasAVX * \sa SDL_HasAVX2 * \sa SDL_HasMMX * \sa SDL_HasRDTSC * \sa SDL_HasSSE * \sa SDL_HasSSE2 * \sa SDL_HasSSE3 * \sa SDL_HasSSE41 * \sa SDL_HasSSE42 */ extern DECLSPEC SDL_bool SDLCALL SDL_Has3DNow(void); /** * Determine whether the CPU has SSE features. * * This always returns false on CPUs that aren't using Intel instruction sets. * * \returns SDL_TRUE if the CPU has SSE features or SDL_FALSE if not. * * \since This function is available since SDL 2.0.0. * * \sa SDL_Has3DNow * \sa SDL_HasAltiVec * \sa SDL_HasAVX * \sa SDL_HasAVX2 * \sa SDL_HasMMX * \sa SDL_HasRDTSC * \sa SDL_HasSSE2 * \sa SDL_HasSSE3 * \sa SDL_HasSSE41 * \sa SDL_HasSSE42 */ extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE(void); /** * Determine whether the CPU has SSE2 features. * * This always returns false on CPUs that aren't using Intel instruction sets. * * \returns SDL_TRUE if the CPU has SSE2 features or SDL_FALSE if not. * * \since This function is available since SDL 2.0.0. * * \sa SDL_Has3DNow * \sa SDL_HasAltiVec * \sa SDL_HasAVX * \sa SDL_HasAVX2 * \sa SDL_HasMMX * \sa SDL_HasRDTSC * \sa SDL_HasSSE * \sa SDL_HasSSE3 * \sa SDL_HasSSE41 * \sa SDL_HasSSE42 */ extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE2(void); /** * Determine whether the CPU has SSE3 features. * * This always returns false on CPUs that aren't using Intel instruction sets. * * \returns SDL_TRUE if the CPU has SSE3 features or SDL_FALSE if not. * * \since This function is available since SDL 2.0.0. * * \sa SDL_Has3DNow * \sa SDL_HasAltiVec * \sa SDL_HasAVX * \sa SDL_HasAVX2 * \sa SDL_HasMMX * \sa SDL_HasRDTSC * \sa SDL_HasSSE * \sa SDL_HasSSE2 * \sa SDL_HasSSE41 * \sa SDL_HasSSE42 */ extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE3(void); /** * Determine whether the CPU has SSE4.1 features. * * This always returns false on CPUs that aren't using Intel instruction sets. * * \returns SDL_TRUE if the CPU has SSE4.1 features or SDL_FALSE if not. * * \since This function is available since SDL 2.0.0. * * \sa SDL_Has3DNow * \sa SDL_HasAltiVec * \sa SDL_HasAVX * \sa SDL_HasAVX2 * \sa SDL_HasMMX * \sa SDL_HasRDTSC * \sa SDL_HasSSE * \sa SDL_HasSSE2 * \sa SDL_HasSSE3 * \sa SDL_HasSSE42 */ extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE41(void); /** * Determine whether the CPU has SSE4.2 features. * * This always returns false on CPUs that aren't using Intel instruction sets. * * \returns SDL_TRUE if the CPU has SSE4.2 features or SDL_FALSE if not. * * \since This function is available since SDL 2.0.0. * * \sa SDL_Has3DNow * \sa SDL_HasAltiVec * \sa SDL_HasAVX * \sa SDL_HasAVX2 * \sa SDL_HasMMX * \sa SDL_HasRDTSC * \sa SDL_HasSSE * \sa SDL_HasSSE2 * \sa SDL_HasSSE3 * \sa SDL_HasSSE41 */ extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE42(void); /** * Determine whether the CPU has AVX features. * * This always returns false on CPUs that aren't using Intel instruction sets. * * \returns SDL_TRUE if the CPU has AVX features or SDL_FALSE if not. * * \since This function is available since SDL 2.0.2. * * \sa SDL_Has3DNow * \sa SDL_HasAltiVec * \sa SDL_HasAVX2 * \sa SDL_HasMMX * \sa SDL_HasRDTSC * \sa SDL_HasSSE * \sa SDL_HasSSE2 * \sa SDL_HasSSE3 * \sa SDL_HasSSE41 * \sa SDL_HasSSE42 */ extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX(void); /** * Determine whether the CPU has AVX2 features. * * This always returns false on CPUs that aren't using Intel instruction sets. * * \returns SDL_TRUE if the CPU has AVX2 features or SDL_FALSE if not. * * \since This function is available since SDL 2.0.4. * * \sa SDL_Has3DNow * \sa SDL_HasAltiVec * \sa SDL_HasAVX * \sa SDL_HasMMX * \sa SDL_HasRDTSC * \sa SDL_HasSSE * \sa SDL_HasSSE2 * \sa SDL_HasSSE3 * \sa SDL_HasSSE41 * \sa SDL_HasSSE42 */ extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX2(void); /** * Determine whether the CPU has AVX-512F (foundation) features. * * This always returns false on CPUs that aren't using Intel instruction sets. * * \returns SDL_TRUE if the CPU has AVX-512F features or SDL_FALSE if not. * * \since This function is available since SDL 2.0.9. * * \sa SDL_HasAVX */ extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX512F(void); /** * Determine whether the CPU has ARM SIMD (ARMv6) features. * * This is different from ARM NEON, which is a different instruction set. * * This always returns false on CPUs that aren't using ARM instruction sets. * * \returns SDL_TRUE if the CPU has ARM SIMD features or SDL_FALSE if not. * * \since This function is available since SDL 2.0.12. * * \sa SDL_HasNEON */ extern DECLSPEC SDL_bool SDLCALL SDL_HasARMSIMD(void); /** * Determine whether the CPU has NEON (ARM SIMD) features. * * This always returns false on CPUs that aren't using ARM instruction sets. * * \returns SDL_TRUE if the CPU has ARM NEON features or SDL_FALSE if not. * * \since This function is available since SDL 2.0.6. */ extern DECLSPEC SDL_bool SDLCALL SDL_HasNEON(void); /** * Determine whether the CPU has LSX (LOONGARCH SIMD) features. * * This always returns false on CPUs that aren't using LOONGARCH instruction * sets. * * \returns SDL_TRUE if the CPU has LOONGARCH LSX features or SDL_FALSE if * not. * * \since This function is available since SDL 2.24.0. */ extern DECLSPEC SDL_bool SDLCALL SDL_HasLSX(void); /** * Determine whether the CPU has LASX (LOONGARCH SIMD) features. * * This always returns false on CPUs that aren't using LOONGARCH instruction * sets. * * \returns SDL_TRUE if the CPU has LOONGARCH LASX features or SDL_FALSE if * not. * * \since This function is available since SDL 2.24.0. */ extern DECLSPEC SDL_bool SDLCALL SDL_HasLASX(void); /** * Get the amount of RAM configured in the system. * * \returns the amount of RAM configured in the system in MiB. * * \since This function is available since SDL 2.0.1. */ extern DECLSPEC int SDLCALL SDL_GetSystemRAM(void); /** * Report the alignment this system needs for SIMD allocations. * * This will return the minimum number of bytes to which a pointer must be * aligned to be compatible with SIMD instructions on the current machine. For * example, if the machine supports SSE only, it will return 16, but if it * supports AVX-512F, it'll return 64 (etc). This only reports values for * instruction sets SDL knows about, so if your SDL build doesn't have * SDL_HasAVX512F(), then it might return 16 for the SSE support it sees and * not 64 for the AVX-512 instructions that exist but SDL doesn't know about. * Plan accordingly. * * \returns the alignment in bytes needed for available, known SIMD * instructions. * * \since This function is available since SDL 2.0.10. */ extern DECLSPEC size_t SDLCALL SDL_SIMDGetAlignment(void); /** * Allocate memory in a SIMD-friendly way. * * This will allocate a block of memory that is suitable for use with SIMD * instructions. Specifically, it will be properly aligned and padded for the * system's supported vector instructions. * * The memory returned will be padded such that it is safe to read or write an * incomplete vector at the end of the memory block. This can be useful so you * don't have to drop back to a scalar fallback at the end of your SIMD * processing loop to deal with the final elements without overflowing the * allocated buffer. * * You must free this memory with SDL_FreeSIMD(), not free() or SDL_free() or * delete[], etc. * * Note that SDL will only deal with SIMD instruction sets it is aware of; for * example, SDL 2.0.8 knows that SSE wants 16-byte vectors (SDL_HasSSE()), and * AVX2 wants 32 bytes (SDL_HasAVX2()), but doesn't know that AVX-512 wants * 64. To be clear: if you can't decide to use an instruction set with an * SDL_Has*() function, don't use that instruction set with memory allocated * through here. * * SDL_AllocSIMD(0) will return a non-NULL pointer, assuming the system isn't * out of memory, but you are not allowed to dereference it (because you only * own zero bytes of that buffer). * * \param len The length, in bytes, of the block to allocate. The actual * allocated block might be larger due to padding, etc. * \returns a pointer to the newly-allocated block, NULL if out of memory. * * \since This function is available since SDL 2.0.10. * * \sa SDL_SIMDGetAlignment * \sa SDL_SIMDRealloc * \sa SDL_SIMDFree */ extern DECLSPEC void * SDLCALL SDL_SIMDAlloc(const size_t len); /** * Reallocate memory obtained from SDL_SIMDAlloc * * It is not valid to use this function on a pointer from anything but * SDL_SIMDAlloc(). It can't be used on pointers from malloc, realloc, * SDL_malloc, memalign, new[], etc. * * \param mem The pointer obtained from SDL_SIMDAlloc. This function also * accepts NULL, at which point this function is the same as * calling SDL_SIMDAlloc with a NULL pointer. * \param len The length, in bytes, of the block to allocated. The actual * allocated block might be larger due to padding, etc. Passing 0 * will return a non-NULL pointer, assuming the system isn't out of * memory. * \returns a pointer to the newly-reallocated block, NULL if out of memory. * * \since This function is available since SDL 2.0.14. * * \sa SDL_SIMDGetAlignment * \sa SDL_SIMDAlloc * \sa SDL_SIMDFree */ extern DECLSPEC void * SDLCALL SDL_SIMDRealloc(void *mem, const size_t len); /** * Deallocate memory obtained from SDL_SIMDAlloc * * It is not valid to use this function on a pointer from anything but * SDL_SIMDAlloc() or SDL_SIMDRealloc(). It can't be used on pointers from * malloc, realloc, SDL_malloc, memalign, new[], etc. * * However, SDL_SIMDFree(NULL) is a legal no-op. * * The memory pointed to by `ptr` is no longer valid for access upon return, * and may be returned to the system or reused by a future allocation. The * pointer passed to this function is no longer safe to dereference once this * function returns, and should be discarded. * * \param ptr The pointer, returned from SDL_SIMDAlloc or SDL_SIMDRealloc, to * deallocate. NULL is a legal no-op. * * \since This function is available since SDL 2.0.10. * * \sa SDL_SIMDAlloc * \sa SDL_SIMDRealloc */ extern DECLSPEC void SDLCALL SDL_SIMDFree(void *ptr); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_cpuinfo_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_egl.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_egl.h * * This is a simple file to encapsulate the EGL API headers. */ #if !defined(_MSC_VER) && !defined(__ANDROID__) && !defined(SDL_USE_BUILTIN_OPENGL_DEFINITIONS) #if defined(__vita__) || defined(__psp2__) #include #endif #include #include #else /* _MSC_VER */ /* EGL headers for Visual Studio */ #ifndef __khrplatform_h_ #define __khrplatform_h_ /* ** Copyright (c) 2008-2018 The Khronos Group Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and/or associated documentation files (the ** "Materials"), to deal in the Materials without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Materials, and to ** permit persons to whom the Materials are furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be included ** in all copies or substantial portions of the Materials. ** ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. */ /* Khronos platform-specific types and definitions. * * The master copy of khrplatform.h is maintained in the Khronos EGL * Registry repository at https://github.com/KhronosGroup/EGL-Registry * The last semantic modification to khrplatform.h was at commit ID: * 67a3e0864c2d75ea5287b9f3d2eb74a745936692 * * Adopters may modify this file to suit their platform. Adopters are * encouraged to submit platform specific modifications to the Khronos * group so that they can be included in future versions of this file. * Please submit changes by filing pull requests or issues on * the EGL Registry repository linked above. * * * See the Implementer's Guidelines for information about where this file * should be located on your system and for more details of its use: * http://www.khronos.org/registry/implementers_guide.pdf * * This file should be included as * #include * by Khronos client API header files that use its types and defines. * * The types in khrplatform.h should only be used to define API-specific types. * * Types defined in khrplatform.h: * khronos_int8_t signed 8 bit * khronos_uint8_t unsigned 8 bit * khronos_int16_t signed 16 bit * khronos_uint16_t unsigned 16 bit * khronos_int32_t signed 32 bit * khronos_uint32_t unsigned 32 bit * khronos_int64_t signed 64 bit * khronos_uint64_t unsigned 64 bit * khronos_intptr_t signed same number of bits as a pointer * khronos_uintptr_t unsigned same number of bits as a pointer * khronos_ssize_t signed size * khronos_usize_t unsigned size * khronos_float_t signed 32 bit floating point * khronos_time_ns_t unsigned 64 bit time in nanoseconds * khronos_utime_nanoseconds_t unsigned time interval or absolute time in * nanoseconds * khronos_stime_nanoseconds_t signed time interval in nanoseconds * khronos_boolean_enum_t enumerated boolean type. This should * only be used as a base type when a client API's boolean type is * an enum. Client APIs which use an integer or other type for * booleans cannot use this as the base type for their boolean. * * Tokens defined in khrplatform.h: * * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. * * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. * * Calling convention macros defined in this file: * KHRONOS_APICALL * KHRONOS_APIENTRY * KHRONOS_APIATTRIBUTES * * These may be used in function prototypes as: * * KHRONOS_APICALL void KHRONOS_APIENTRY funcname( * int arg1, * int arg2) KHRONOS_APIATTRIBUTES; */ #if defined(__SCITECH_SNAP__) && !defined(KHRONOS_STATIC) # define KHRONOS_STATIC 1 #endif /*------------------------------------------------------------------------- * Definition of KHRONOS_APICALL *------------------------------------------------------------------------- * This precedes the return type of the function in the function prototype. */ #if defined(KHRONOS_STATIC) /* If the preprocessor constant KHRONOS_STATIC is defined, make the * header compatible with static linking. */ # define KHRONOS_APICALL #elif defined(_WIN32) # define KHRONOS_APICALL __declspec(dllimport) #elif defined (__SYMBIAN32__) # define KHRONOS_APICALL IMPORT_C #elif defined(__ANDROID__) # define KHRONOS_APICALL __attribute__((visibility("default"))) #else # define KHRONOS_APICALL #endif /*------------------------------------------------------------------------- * Definition of KHRONOS_APIENTRY *------------------------------------------------------------------------- * This follows the return type of the function and precedes the function * name in the function prototype. */ #if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__) /* Win32 but not WinCE */ # define KHRONOS_APIENTRY __stdcall #else # define KHRONOS_APIENTRY #endif /*------------------------------------------------------------------------- * Definition of KHRONOS_APIATTRIBUTES *------------------------------------------------------------------------- * This follows the closing parenthesis of the function prototype arguments. */ #if defined (__ARMCC_2__) #define KHRONOS_APIATTRIBUTES __softfp #else #define KHRONOS_APIATTRIBUTES #endif /*------------------------------------------------------------------------- * basic type definitions *-----------------------------------------------------------------------*/ #if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) /* * Using */ #include typedef int32_t khronos_int32_t; typedef uint32_t khronos_uint32_t; typedef int64_t khronos_int64_t; typedef uint64_t khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 /* * To support platform where unsigned long cannot be used interchangeably with * inptr_t (e.g. CHERI-extended ISAs), we can use the stdint.h intptr_t. * Ideally, we could just use (u)intptr_t everywhere, but this could result in * ABI breakage if khronos_uintptr_t is changed from unsigned long to * unsigned long long or similar (this results in different C++ name mangling). * To avoid changes for existing platforms, we restrict usage of intptr_t to * platforms where the size of a pointer is larger than the size of long. */ #if defined(__SIZEOF_LONG__) && defined(__SIZEOF_POINTER__) #if __SIZEOF_POINTER__ > __SIZEOF_LONG__ #define KHRONOS_USE_INTPTR_T #endif #endif #elif defined(__VMS ) || defined(__sgi) /* * Using */ #include typedef int32_t khronos_int32_t; typedef uint32_t khronos_uint32_t; typedef int64_t khronos_int64_t; typedef uint64_t khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #elif defined(_WIN32) && !defined(__SCITECH_SNAP__) /* * Win32 */ typedef __int32 khronos_int32_t; typedef unsigned __int32 khronos_uint32_t; typedef __int64 khronos_int64_t; typedef unsigned __int64 khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #elif defined(__sun__) || defined(__digital__) /* * Sun or Digital */ typedef int khronos_int32_t; typedef unsigned int khronos_uint32_t; #if defined(__arch64__) || defined(_LP64) typedef long int khronos_int64_t; typedef unsigned long int khronos_uint64_t; #else typedef long long int khronos_int64_t; typedef unsigned long long int khronos_uint64_t; #endif /* __arch64__ */ #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #elif 0 /* * Hypothetical platform with no float or int64 support */ typedef int khronos_int32_t; typedef unsigned int khronos_uint32_t; #define KHRONOS_SUPPORT_INT64 0 #define KHRONOS_SUPPORT_FLOAT 0 #else /* * Generic fallback */ #include typedef int32_t khronos_int32_t; typedef uint32_t khronos_uint32_t; typedef int64_t khronos_int64_t; typedef uint64_t khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #endif /* * Types that are (so far) the same on all platforms */ typedef signed char khronos_int8_t; typedef unsigned char khronos_uint8_t; typedef signed short int khronos_int16_t; typedef unsigned short int khronos_uint16_t; /* * Types that differ between LLP64 and LP64 architectures - in LLP64, * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears * to be the only LLP64 architecture in current use. */ #ifdef KHRONOS_USE_INTPTR_T typedef intptr_t khronos_intptr_t; typedef uintptr_t khronos_uintptr_t; #elif defined(_WIN64) typedef signed long long int khronos_intptr_t; typedef unsigned long long int khronos_uintptr_t; #else typedef signed long int khronos_intptr_t; typedef unsigned long int khronos_uintptr_t; #endif #if defined(_WIN64) typedef signed long long int khronos_ssize_t; typedef unsigned long long int khronos_usize_t; #else typedef signed long int khronos_ssize_t; typedef unsigned long int khronos_usize_t; #endif #if KHRONOS_SUPPORT_FLOAT /* * Float type */ typedef float khronos_float_t; #endif #if KHRONOS_SUPPORT_INT64 /* Time types * * These types can be used to represent a time interval in nanoseconds or * an absolute Unadjusted System Time. Unadjusted System Time is the number * of nanoseconds since some arbitrary system event (e.g. since the last * time the system booted). The Unadjusted System Time is an unsigned * 64 bit value that wraps back to 0 every 584 years. Time intervals * may be either signed or unsigned. */ typedef khronos_uint64_t khronos_utime_nanoseconds_t; typedef khronos_int64_t khronos_stime_nanoseconds_t; #endif /* * Dummy value used to pad enum types to 32 bits. */ #ifndef KHRONOS_MAX_ENUM #define KHRONOS_MAX_ENUM 0x7FFFFFFF #endif /* * Enumerated boolean type * * Values other than zero should be considered to be true. Therefore * comparisons should not be made against KHRONOS_TRUE. */ typedef enum { KHRONOS_FALSE = 0, KHRONOS_TRUE = 1, KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM } khronos_boolean_enum_t; #endif /* __khrplatform_h_ */ #ifndef __eglplatform_h_ #define __eglplatform_h_ /* ** Copyright 2007-2020 The Khronos Group Inc. ** SPDX-License-Identifier: Apache-2.0 */ /* Platform-specific types and definitions for egl.h * * Adopters may modify khrplatform.h and this file to suit their platform. * You are encouraged to submit all modifications to the Khronos group so that * they can be included in future versions of this file. Please submit changes * by filing an issue or pull request on the public Khronos EGL Registry, at * https://www.github.com/KhronosGroup/EGL-Registry/ */ /*#include */ /* Macros used in EGL function prototype declarations. * * EGL functions should be prototyped as: * * EGLAPI return-type EGLAPIENTRY eglFunction(arguments); * typedef return-type (EXPAPIENTRYP PFNEGLFUNCTIONPROC) (arguments); * * KHRONOS_APICALL and KHRONOS_APIENTRY are defined in KHR/khrplatform.h */ #ifndef EGLAPI #define EGLAPI KHRONOS_APICALL #endif #ifndef EGLAPIENTRY #define EGLAPIENTRY KHRONOS_APIENTRY #endif #define EGLAPIENTRYP EGLAPIENTRY* /* The types NativeDisplayType, NativeWindowType, and NativePixmapType * are aliases of window-system-dependent types, such as X Display * or * Windows Device Context. They must be defined in platform-specific * code below. The EGL-prefixed versions of Native*Type are the same * types, renamed in EGL 1.3 so all types in the API start with "EGL". * * Khronos STRONGLY RECOMMENDS that you use the default definitions * provided below, since these changes affect both binary and source * portability of applications using EGL running on different EGL * implementations. */ #if defined(EGL_NO_PLATFORM_SPECIFIC_TYPES) typedef void *EGLNativeDisplayType; typedef void *EGLNativePixmapType; typedef void *EGLNativeWindowType; #elif defined(_WIN32) || defined(__VC32__) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) /* Win32 and WinCE */ #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN 1 #endif #include typedef HDC EGLNativeDisplayType; typedef HBITMAP EGLNativePixmapType; typedef HWND EGLNativeWindowType; #elif defined(__EMSCRIPTEN__) typedef int EGLNativeDisplayType; typedef int EGLNativePixmapType; typedef int EGLNativeWindowType; #elif defined(__WINSCW__) || defined(__SYMBIAN32__) /* Symbian */ typedef int EGLNativeDisplayType; typedef void *EGLNativePixmapType; typedef void *EGLNativeWindowType; #elif defined(WL_EGL_PLATFORM) typedef struct wl_display *EGLNativeDisplayType; typedef struct wl_egl_pixmap *EGLNativePixmapType; typedef struct wl_egl_window *EGLNativeWindowType; #elif defined(__GBM__) typedef struct gbm_device *EGLNativeDisplayType; typedef struct gbm_bo *EGLNativePixmapType; typedef void *EGLNativeWindowType; #elif defined(__ANDROID__) || defined(ANDROID) struct ANativeWindow; struct egl_native_pixmap_t; typedef void* EGLNativeDisplayType; typedef struct egl_native_pixmap_t* EGLNativePixmapType; typedef struct ANativeWindow* EGLNativeWindowType; #elif defined(USE_OZONE) typedef intptr_t EGLNativeDisplayType; typedef intptr_t EGLNativePixmapType; typedef intptr_t EGLNativeWindowType; #elif defined(USE_X11) /* X11 (tentative) */ #include #include typedef Display *EGLNativeDisplayType; typedef Pixmap EGLNativePixmapType; typedef Window EGLNativeWindowType; #elif defined(__unix__) typedef void *EGLNativeDisplayType; typedef khronos_uintptr_t EGLNativePixmapType; typedef khronos_uintptr_t EGLNativeWindowType; #elif defined(__APPLE__) typedef int EGLNativeDisplayType; typedef void *EGLNativePixmapType; typedef void *EGLNativeWindowType; #elif defined(__HAIKU__) #include typedef void *EGLNativeDisplayType; typedef khronos_uintptr_t EGLNativePixmapType; typedef khronos_uintptr_t EGLNativeWindowType; #elif defined(__Fuchsia__) typedef void *EGLNativeDisplayType; typedef khronos_uintptr_t EGLNativePixmapType; typedef khronos_uintptr_t EGLNativeWindowType; #else #error "Platform not recognized" #endif /* EGL 1.2 types, renamed for consistency in EGL 1.3 */ typedef EGLNativeDisplayType NativeDisplayType; typedef EGLNativePixmapType NativePixmapType; typedef EGLNativeWindowType NativeWindowType; /* Define EGLint. This must be a signed integral type large enough to contain * all legal attribute names and values passed into and out of EGL, whether * their type is boolean, bitmask, enumerant (symbolic constant), integer, * handle, or other. While in general a 32-bit integer will suffice, if * handles are 64 bit types, then EGLint should be defined as a signed 64-bit * integer type. */ typedef khronos_int32_t EGLint; /* C++ / C typecast macros for special EGL handle values */ #if defined(__cplusplus) #define EGL_CAST(type, value) (static_cast(value)) #else #define EGL_CAST(type, value) ((type) (value)) #endif #endif /* __eglplatform_h */ #ifndef __egl_h_ #define __egl_h_ 1 #ifdef __cplusplus extern "C" { #endif /* ** Copyright 2013-2020 The Khronos Group Inc. ** SPDX-License-Identifier: Apache-2.0 ** ** This header is generated from the Khronos EGL XML API Registry. ** The current version of the Registry, generator scripts ** used to make the header, and the header can be found at ** http://www.khronos.org/registry/egl ** ** Khronos $Git commit SHA1: 6fb1daea15 $ on $Git commit date: 2022-05-25 09:41:13 -0600 $ */ /*#include */ #ifndef EGL_EGL_PROTOTYPES #define EGL_EGL_PROTOTYPES 1 #endif /* Generated on date 20220525 */ /* Generated C header for: * API: egl * Versions considered: .* * Versions emitted: .* * Default extensions included: None * Additional extensions included: _nomatch_^ * Extensions removed: _nomatch_^ */ #ifndef EGL_VERSION_1_0 #define EGL_VERSION_1_0 1 typedef unsigned int EGLBoolean; typedef void *EGLDisplay; /*#include */ /*#include */ typedef void *EGLConfig; typedef void *EGLSurface; typedef void *EGLContext; typedef void (*__eglMustCastToProperFunctionPointerType)(void); #define EGL_ALPHA_SIZE 0x3021 #define EGL_BAD_ACCESS 0x3002 #define EGL_BAD_ALLOC 0x3003 #define EGL_BAD_ATTRIBUTE 0x3004 #define EGL_BAD_CONFIG 0x3005 #define EGL_BAD_CONTEXT 0x3006 #define EGL_BAD_CURRENT_SURFACE 0x3007 #define EGL_BAD_DISPLAY 0x3008 #define EGL_BAD_MATCH 0x3009 #define EGL_BAD_NATIVE_PIXMAP 0x300A #define EGL_BAD_NATIVE_WINDOW 0x300B #define EGL_BAD_PARAMETER 0x300C #define EGL_BAD_SURFACE 0x300D #define EGL_BLUE_SIZE 0x3022 #define EGL_BUFFER_SIZE 0x3020 #define EGL_CONFIG_CAVEAT 0x3027 #define EGL_CONFIG_ID 0x3028 #define EGL_CORE_NATIVE_ENGINE 0x305B #define EGL_DEPTH_SIZE 0x3025 #define EGL_DONT_CARE EGL_CAST(EGLint,-1) #define EGL_DRAW 0x3059 #define EGL_EXTENSIONS 0x3055 #define EGL_FALSE 0 #define EGL_GREEN_SIZE 0x3023 #define EGL_HEIGHT 0x3056 #define EGL_LARGEST_PBUFFER 0x3058 #define EGL_LEVEL 0x3029 #define EGL_MAX_PBUFFER_HEIGHT 0x302A #define EGL_MAX_PBUFFER_PIXELS 0x302B #define EGL_MAX_PBUFFER_WIDTH 0x302C #define EGL_NATIVE_RENDERABLE 0x302D #define EGL_NATIVE_VISUAL_ID 0x302E #define EGL_NATIVE_VISUAL_TYPE 0x302F #define EGL_NONE 0x3038 #define EGL_NON_CONFORMANT_CONFIG 0x3051 #define EGL_NOT_INITIALIZED 0x3001 #define EGL_NO_CONTEXT EGL_CAST(EGLContext,0) #define EGL_NO_DISPLAY EGL_CAST(EGLDisplay,0) #define EGL_NO_SURFACE EGL_CAST(EGLSurface,0) #define EGL_PBUFFER_BIT 0x0001 #define EGL_PIXMAP_BIT 0x0002 #define EGL_READ 0x305A #define EGL_RED_SIZE 0x3024 #define EGL_SAMPLES 0x3031 #define EGL_SAMPLE_BUFFERS 0x3032 #define EGL_SLOW_CONFIG 0x3050 #define EGL_STENCIL_SIZE 0x3026 #define EGL_SUCCESS 0x3000 #define EGL_SURFACE_TYPE 0x3033 #define EGL_TRANSPARENT_BLUE_VALUE 0x3035 #define EGL_TRANSPARENT_GREEN_VALUE 0x3036 #define EGL_TRANSPARENT_RED_VALUE 0x3037 #define EGL_TRANSPARENT_RGB 0x3052 #define EGL_TRANSPARENT_TYPE 0x3034 #define EGL_TRUE 1 #define EGL_VENDOR 0x3053 #define EGL_VERSION 0x3054 #define EGL_WIDTH 0x3057 #define EGL_WINDOW_BIT 0x0004 typedef EGLBoolean (EGLAPIENTRYP PFNEGLCHOOSECONFIGPROC) (EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config); typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOPYBUFFERSPROC) (EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target); typedef EGLContext (EGLAPIENTRYP PFNEGLCREATECONTEXTPROC) (EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list); typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPBUFFERSURFACEPROC) (EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list); typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPIXMAPSURFACEPROC) (EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list); typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEWINDOWSURFACEPROC) (EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list); typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYCONTEXTPROC) (EGLDisplay dpy, EGLContext ctx); typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSURFACEPROC) (EGLDisplay dpy, EGLSurface surface); typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETCONFIGATTRIBPROC) (EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value); typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETCONFIGSPROC) (EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config); typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETCURRENTDISPLAYPROC) (void); typedef EGLSurface (EGLAPIENTRYP PFNEGLGETCURRENTSURFACEPROC) (EGLint readdraw); typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETDISPLAYPROC) (EGLNativeDisplayType display_id); typedef EGLint (EGLAPIENTRYP PFNEGLGETERRORPROC) (void); typedef __eglMustCastToProperFunctionPointerType (EGLAPIENTRYP PFNEGLGETPROCADDRESSPROC) (const char *procname); typedef EGLBoolean (EGLAPIENTRYP PFNEGLINITIALIZEPROC) (EGLDisplay dpy, EGLint *major, EGLint *minor); typedef EGLBoolean (EGLAPIENTRYP PFNEGLMAKECURRENTPROC) (EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx); typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYCONTEXTPROC) (EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value); typedef const char *(EGLAPIENTRYP PFNEGLQUERYSTRINGPROC) (EGLDisplay dpy, EGLint name); typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value); typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSPROC) (EGLDisplay dpy, EGLSurface surface); typedef EGLBoolean (EGLAPIENTRYP PFNEGLTERMINATEPROC) (EGLDisplay dpy); typedef EGLBoolean (EGLAPIENTRYP PFNEGLWAITGLPROC) (void); typedef EGLBoolean (EGLAPIENTRYP PFNEGLWAITNATIVEPROC) (EGLint engine); #if EGL_EGL_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglChooseConfig (EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config); EGLAPI EGLBoolean EGLAPIENTRY eglCopyBuffers (EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target); EGLAPI EGLContext EGLAPIENTRY eglCreateContext (EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list); EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferSurface (EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list); EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurface (EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list); EGLAPI EGLSurface EGLAPIENTRY eglCreateWindowSurface (EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list); EGLAPI EGLBoolean EGLAPIENTRY eglDestroyContext (EGLDisplay dpy, EGLContext ctx); EGLAPI EGLBoolean EGLAPIENTRY eglDestroySurface (EGLDisplay dpy, EGLSurface surface); EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigAttrib (EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value); EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigs (EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config); EGLAPI EGLDisplay EGLAPIENTRY eglGetCurrentDisplay (void); EGLAPI EGLSurface EGLAPIENTRY eglGetCurrentSurface (EGLint readdraw); EGLAPI EGLDisplay EGLAPIENTRY eglGetDisplay (EGLNativeDisplayType display_id); EGLAPI EGLint EGLAPIENTRY eglGetError (void); EGLAPI __eglMustCastToProperFunctionPointerType EGLAPIENTRY eglGetProcAddress (const char *procname); EGLAPI EGLBoolean EGLAPIENTRY eglInitialize (EGLDisplay dpy, EGLint *major, EGLint *minor); EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent (EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx); EGLAPI EGLBoolean EGLAPIENTRY eglQueryContext (EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value); EGLAPI const char *EGLAPIENTRY eglQueryString (EGLDisplay dpy, EGLint name); EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value); EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers (EGLDisplay dpy, EGLSurface surface); EGLAPI EGLBoolean EGLAPIENTRY eglTerminate (EGLDisplay dpy); EGLAPI EGLBoolean EGLAPIENTRY eglWaitGL (void); EGLAPI EGLBoolean EGLAPIENTRY eglWaitNative (EGLint engine); #endif #endif /* EGL_VERSION_1_0 */ #ifndef EGL_VERSION_1_1 #define EGL_VERSION_1_1 1 #define EGL_BACK_BUFFER 0x3084 #define EGL_BIND_TO_TEXTURE_RGB 0x3039 #define EGL_BIND_TO_TEXTURE_RGBA 0x303A #define EGL_CONTEXT_LOST 0x300E #define EGL_MIN_SWAP_INTERVAL 0x303B #define EGL_MAX_SWAP_INTERVAL 0x303C #define EGL_MIPMAP_TEXTURE 0x3082 #define EGL_MIPMAP_LEVEL 0x3083 #define EGL_NO_TEXTURE 0x305C #define EGL_TEXTURE_2D 0x305F #define EGL_TEXTURE_FORMAT 0x3080 #define EGL_TEXTURE_RGB 0x305D #define EGL_TEXTURE_RGBA 0x305E #define EGL_TEXTURE_TARGET 0x3081 typedef EGLBoolean (EGLAPIENTRYP PFNEGLBINDTEXIMAGEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint buffer); typedef EGLBoolean (EGLAPIENTRYP PFNEGLRELEASETEXIMAGEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint buffer); typedef EGLBoolean (EGLAPIENTRYP PFNEGLSURFACEATTRIBPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value); typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPINTERVALPROC) (EGLDisplay dpy, EGLint interval); #if EGL_EGL_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglBindTexImage (EGLDisplay dpy, EGLSurface surface, EGLint buffer); EGLAPI EGLBoolean EGLAPIENTRY eglReleaseTexImage (EGLDisplay dpy, EGLSurface surface, EGLint buffer); EGLAPI EGLBoolean EGLAPIENTRY eglSurfaceAttrib (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value); EGLAPI EGLBoolean EGLAPIENTRY eglSwapInterval (EGLDisplay dpy, EGLint interval); #endif #endif /* EGL_VERSION_1_1 */ #ifndef EGL_VERSION_1_2 #define EGL_VERSION_1_2 1 typedef unsigned int EGLenum; typedef void *EGLClientBuffer; #define EGL_ALPHA_FORMAT 0x3088 #define EGL_ALPHA_FORMAT_NONPRE 0x308B #define EGL_ALPHA_FORMAT_PRE 0x308C #define EGL_ALPHA_MASK_SIZE 0x303E #define EGL_BUFFER_PRESERVED 0x3094 #define EGL_BUFFER_DESTROYED 0x3095 #define EGL_CLIENT_APIS 0x308D #define EGL_COLORSPACE 0x3087 #define EGL_COLORSPACE_sRGB 0x3089 #define EGL_COLORSPACE_LINEAR 0x308A #define EGL_COLOR_BUFFER_TYPE 0x303F #define EGL_CONTEXT_CLIENT_TYPE 0x3097 #define EGL_DISPLAY_SCALING 10000 #define EGL_HORIZONTAL_RESOLUTION 0x3090 #define EGL_LUMINANCE_BUFFER 0x308F #define EGL_LUMINANCE_SIZE 0x303D #define EGL_OPENGL_ES_BIT 0x0001 #define EGL_OPENVG_BIT 0x0002 #define EGL_OPENGL_ES_API 0x30A0 #define EGL_OPENVG_API 0x30A1 #define EGL_OPENVG_IMAGE 0x3096 #define EGL_PIXEL_ASPECT_RATIO 0x3092 #define EGL_RENDERABLE_TYPE 0x3040 #define EGL_RENDER_BUFFER 0x3086 #define EGL_RGB_BUFFER 0x308E #define EGL_SINGLE_BUFFER 0x3085 #define EGL_SWAP_BEHAVIOR 0x3093 #define EGL_UNKNOWN EGL_CAST(EGLint,-1) #define EGL_VERTICAL_RESOLUTION 0x3091 typedef EGLBoolean (EGLAPIENTRYP PFNEGLBINDAPIPROC) (EGLenum api); typedef EGLenum (EGLAPIENTRYP PFNEGLQUERYAPIPROC) (void); typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPBUFFERFROMCLIENTBUFFERPROC) (EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list); typedef EGLBoolean (EGLAPIENTRYP PFNEGLRELEASETHREADPROC) (void); typedef EGLBoolean (EGLAPIENTRYP PFNEGLWAITCLIENTPROC) (void); #if EGL_EGL_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglBindAPI (EGLenum api); EGLAPI EGLenum EGLAPIENTRY eglQueryAPI (void); EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferFromClientBuffer (EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list); EGLAPI EGLBoolean EGLAPIENTRY eglReleaseThread (void); EGLAPI EGLBoolean EGLAPIENTRY eglWaitClient (void); #endif #endif /* EGL_VERSION_1_2 */ #ifndef EGL_VERSION_1_3 #define EGL_VERSION_1_3 1 #define EGL_CONFORMANT 0x3042 #define EGL_CONTEXT_CLIENT_VERSION 0x3098 #define EGL_MATCH_NATIVE_PIXMAP 0x3041 #define EGL_OPENGL_ES2_BIT 0x0004 #define EGL_VG_ALPHA_FORMAT 0x3088 #define EGL_VG_ALPHA_FORMAT_NONPRE 0x308B #define EGL_VG_ALPHA_FORMAT_PRE 0x308C #define EGL_VG_ALPHA_FORMAT_PRE_BIT 0x0040 #define EGL_VG_COLORSPACE 0x3087 #define EGL_VG_COLORSPACE_sRGB 0x3089 #define EGL_VG_COLORSPACE_LINEAR 0x308A #define EGL_VG_COLORSPACE_LINEAR_BIT 0x0020 #endif /* EGL_VERSION_1_3 */ #ifndef EGL_VERSION_1_4 #define EGL_VERSION_1_4 1 #define EGL_DEFAULT_DISPLAY EGL_CAST(EGLNativeDisplayType,0) #define EGL_MULTISAMPLE_RESOLVE_BOX_BIT 0x0200 #define EGL_MULTISAMPLE_RESOLVE 0x3099 #define EGL_MULTISAMPLE_RESOLVE_DEFAULT 0x309A #define EGL_MULTISAMPLE_RESOLVE_BOX 0x309B #define EGL_OPENGL_API 0x30A2 #define EGL_OPENGL_BIT 0x0008 #define EGL_SWAP_BEHAVIOR_PRESERVED_BIT 0x0400 typedef EGLContext (EGLAPIENTRYP PFNEGLGETCURRENTCONTEXTPROC) (void); #if EGL_EGL_PROTOTYPES EGLAPI EGLContext EGLAPIENTRY eglGetCurrentContext (void); #endif #endif /* EGL_VERSION_1_4 */ #ifndef EGL_VERSION_1_5 #define EGL_VERSION_1_5 1 typedef void *EGLSync; typedef intptr_t EGLAttrib; typedef khronos_utime_nanoseconds_t EGLTime; typedef void *EGLImage; #define EGL_CONTEXT_MAJOR_VERSION 0x3098 #define EGL_CONTEXT_MINOR_VERSION 0x30FB #define EGL_CONTEXT_OPENGL_PROFILE_MASK 0x30FD #define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY 0x31BD #define EGL_NO_RESET_NOTIFICATION 0x31BE #define EGL_LOSE_CONTEXT_ON_RESET 0x31BF #define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT 0x00000001 #define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT 0x00000002 #define EGL_CONTEXT_OPENGL_DEBUG 0x31B0 #define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE 0x31B1 #define EGL_CONTEXT_OPENGL_ROBUST_ACCESS 0x31B2 #define EGL_OPENGL_ES3_BIT 0x00000040 #define EGL_CL_EVENT_HANDLE 0x309C #define EGL_SYNC_CL_EVENT 0x30FE #define EGL_SYNC_CL_EVENT_COMPLETE 0x30FF #define EGL_SYNC_PRIOR_COMMANDS_COMPLETE 0x30F0 #define EGL_SYNC_TYPE 0x30F7 #define EGL_SYNC_STATUS 0x30F1 #define EGL_SYNC_CONDITION 0x30F8 #define EGL_SIGNALED 0x30F2 #define EGL_UNSIGNALED 0x30F3 #define EGL_SYNC_FLUSH_COMMANDS_BIT 0x0001 #define EGL_FOREVER 0xFFFFFFFFFFFFFFFFull #define EGL_TIMEOUT_EXPIRED 0x30F5 #define EGL_CONDITION_SATISFIED 0x30F6 #define EGL_NO_SYNC EGL_CAST(EGLSync,0) #define EGL_SYNC_FENCE 0x30F9 #define EGL_GL_COLORSPACE 0x309D #define EGL_GL_COLORSPACE_SRGB 0x3089 #define EGL_GL_COLORSPACE_LINEAR 0x308A #define EGL_GL_RENDERBUFFER 0x30B9 #define EGL_GL_TEXTURE_2D 0x30B1 #define EGL_GL_TEXTURE_LEVEL 0x30BC #define EGL_GL_TEXTURE_3D 0x30B2 #define EGL_GL_TEXTURE_ZOFFSET 0x30BD #define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x30B3 #define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x30B4 #define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x30B5 #define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x30B6 #define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x30B7 #define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x30B8 #define EGL_IMAGE_PRESERVED 0x30D2 #define EGL_NO_IMAGE EGL_CAST(EGLImage,0) typedef EGLSync (EGLAPIENTRYP PFNEGLCREATESYNCPROC) (EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list); typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCPROC) (EGLDisplay dpy, EGLSync sync); typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCPROC) (EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout); typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBPROC) (EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib *value); typedef EGLImage (EGLAPIENTRYP PFNEGLCREATEIMAGEPROC) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib *attrib_list); typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYIMAGEPROC) (EGLDisplay dpy, EGLImage image); typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYPROC) (EGLenum platform, void *native_display, const EGLAttrib *attrib_list); typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMWINDOWSURFACEPROC) (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLAttrib *attrib_list); typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMPIXMAPSURFACEPROC) (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLAttrib *attrib_list); typedef EGLBoolean (EGLAPIENTRYP PFNEGLWAITSYNCPROC) (EGLDisplay dpy, EGLSync sync, EGLint flags); #if EGL_EGL_PROTOTYPES EGLAPI EGLSync EGLAPIENTRY eglCreateSync (EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list); EGLAPI EGLBoolean EGLAPIENTRY eglDestroySync (EGLDisplay dpy, EGLSync sync); EGLAPI EGLint EGLAPIENTRY eglClientWaitSync (EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout); EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttrib (EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib *value); EGLAPI EGLImage EGLAPIENTRY eglCreateImage (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib *attrib_list); EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImage (EGLDisplay dpy, EGLImage image); EGLAPI EGLDisplay EGLAPIENTRY eglGetPlatformDisplay (EGLenum platform, void *native_display, const EGLAttrib *attrib_list); EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformWindowSurface (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLAttrib *attrib_list); EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurface (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLAttrib *attrib_list); EGLAPI EGLBoolean EGLAPIENTRY eglWaitSync (EGLDisplay dpy, EGLSync sync, EGLint flags); #endif #endif /* EGL_VERSION_1_5 */ #ifdef __cplusplus } #endif #endif /* __egl_h_ */ #ifndef __eglext_h_ #define __eglext_h_ 1 #ifdef __cplusplus extern "C" { #endif /* ** Copyright 2013-2020 The Khronos Group Inc. ** SPDX-License-Identifier: Apache-2.0 ** ** This header is generated from the Khronos EGL XML API Registry. ** The current version of the Registry, generator scripts ** used to make the header, and the header can be found at ** http://www.khronos.org/registry/egl ** ** Khronos $Git commit SHA1: 6fb1daea15 $ on $Git commit date: 2022-05-25 09:41:13 -0600 $ */ /*#include */ #define EGL_EGLEXT_VERSION 20220525 /* Generated C header for: * API: egl * Versions considered: .* * Versions emitted: _nomatch_^ * Default extensions included: egl * Additional extensions included: _nomatch_^ * Extensions removed: _nomatch_^ */ #ifndef EGL_KHR_cl_event #define EGL_KHR_cl_event 1 #define EGL_CL_EVENT_HANDLE_KHR 0x309C #define EGL_SYNC_CL_EVENT_KHR 0x30FE #define EGL_SYNC_CL_EVENT_COMPLETE_KHR 0x30FF #endif /* EGL_KHR_cl_event */ #ifndef EGL_KHR_cl_event2 #define EGL_KHR_cl_event2 1 typedef void *EGLSyncKHR; typedef intptr_t EGLAttribKHR; typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNC64KHRPROC) (EGLDisplay dpy, EGLenum type, const EGLAttribKHR *attrib_list); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSync64KHR (EGLDisplay dpy, EGLenum type, const EGLAttribKHR *attrib_list); #endif #endif /* EGL_KHR_cl_event2 */ #ifndef EGL_KHR_client_get_all_proc_addresses #define EGL_KHR_client_get_all_proc_addresses 1 #endif /* EGL_KHR_client_get_all_proc_addresses */ #ifndef EGL_KHR_config_attribs #define EGL_KHR_config_attribs 1 #define EGL_CONFORMANT_KHR 0x3042 #define EGL_VG_COLORSPACE_LINEAR_BIT_KHR 0x0020 #define EGL_VG_ALPHA_FORMAT_PRE_BIT_KHR 0x0040 #endif /* EGL_KHR_config_attribs */ #ifndef EGL_KHR_context_flush_control #define EGL_KHR_context_flush_control 1 #define EGL_CONTEXT_RELEASE_BEHAVIOR_NONE_KHR 0 #define EGL_CONTEXT_RELEASE_BEHAVIOR_KHR 0x2097 #define EGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR 0x2098 #endif /* EGL_KHR_context_flush_control */ #ifndef EGL_KHR_create_context #define EGL_KHR_create_context 1 #define EGL_CONTEXT_MAJOR_VERSION_KHR 0x3098 #define EGL_CONTEXT_MINOR_VERSION_KHR 0x30FB #define EGL_CONTEXT_FLAGS_KHR 0x30FC #define EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR 0x30FD #define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR 0x31BD #define EGL_NO_RESET_NOTIFICATION_KHR 0x31BE #define EGL_LOSE_CONTEXT_ON_RESET_KHR 0x31BF #define EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR 0x00000001 #define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR 0x00000002 #define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR 0x00000004 #define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR 0x00000001 #define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR 0x00000002 #define EGL_OPENGL_ES3_BIT_KHR 0x00000040 #endif /* EGL_KHR_create_context */ #ifndef EGL_KHR_create_context_no_error #define EGL_KHR_create_context_no_error 1 #define EGL_CONTEXT_OPENGL_NO_ERROR_KHR 0x31B3 #endif /* EGL_KHR_create_context_no_error */ #ifndef EGL_KHR_debug #define EGL_KHR_debug 1 typedef void *EGLLabelKHR; typedef void *EGLObjectKHR; typedef void (EGLAPIENTRY *EGLDEBUGPROCKHR)(EGLenum error,const char *command,EGLint messageType,EGLLabelKHR threadLabel,EGLLabelKHR objectLabel,const char* message); #define EGL_OBJECT_THREAD_KHR 0x33B0 #define EGL_OBJECT_DISPLAY_KHR 0x33B1 #define EGL_OBJECT_CONTEXT_KHR 0x33B2 #define EGL_OBJECT_SURFACE_KHR 0x33B3 #define EGL_OBJECT_IMAGE_KHR 0x33B4 #define EGL_OBJECT_SYNC_KHR 0x33B5 #define EGL_OBJECT_STREAM_KHR 0x33B6 #define EGL_DEBUG_MSG_CRITICAL_KHR 0x33B9 #define EGL_DEBUG_MSG_ERROR_KHR 0x33BA #define EGL_DEBUG_MSG_WARN_KHR 0x33BB #define EGL_DEBUG_MSG_INFO_KHR 0x33BC #define EGL_DEBUG_CALLBACK_KHR 0x33B8 typedef EGLint (EGLAPIENTRYP PFNEGLDEBUGMESSAGECONTROLKHRPROC) (EGLDEBUGPROCKHR callback, const EGLAttrib *attrib_list); typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEBUGKHRPROC) (EGLint attribute, EGLAttrib *value); typedef EGLint (EGLAPIENTRYP PFNEGLLABELOBJECTKHRPROC) (EGLDisplay display, EGLenum objectType, EGLObjectKHR object, EGLLabelKHR label); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLint EGLAPIENTRY eglDebugMessageControlKHR (EGLDEBUGPROCKHR callback, const EGLAttrib *attrib_list); EGLAPI EGLBoolean EGLAPIENTRY eglQueryDebugKHR (EGLint attribute, EGLAttrib *value); EGLAPI EGLint EGLAPIENTRY eglLabelObjectKHR (EGLDisplay display, EGLenum objectType, EGLObjectKHR object, EGLLabelKHR label); #endif #endif /* EGL_KHR_debug */ #ifndef EGL_KHR_display_reference #define EGL_KHR_display_reference 1 #define EGL_TRACK_REFERENCES_KHR 0x3352 typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDISPLAYATTRIBKHRPROC) (EGLDisplay dpy, EGLint name, EGLAttrib *value); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglQueryDisplayAttribKHR (EGLDisplay dpy, EGLint name, EGLAttrib *value); #endif #endif /* EGL_KHR_display_reference */ #ifndef EGL_KHR_fence_sync #define EGL_KHR_fence_sync 1 typedef khronos_utime_nanoseconds_t EGLTimeKHR; #ifdef KHRONOS_SUPPORT_INT64 #define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR 0x30F0 #define EGL_SYNC_CONDITION_KHR 0x30F8 #define EGL_SYNC_FENCE_KHR 0x30F9 typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNCKHRPROC) (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list); typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync); typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout); typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSyncKHR (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list); EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncKHR (EGLDisplay dpy, EGLSyncKHR sync); EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout); EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value); #endif #endif /* KHRONOS_SUPPORT_INT64 */ #endif /* EGL_KHR_fence_sync */ #ifndef EGL_KHR_get_all_proc_addresses #define EGL_KHR_get_all_proc_addresses 1 #endif /* EGL_KHR_get_all_proc_addresses */ #ifndef EGL_KHR_gl_colorspace #define EGL_KHR_gl_colorspace 1 #define EGL_GL_COLORSPACE_KHR 0x309D #define EGL_GL_COLORSPACE_SRGB_KHR 0x3089 #define EGL_GL_COLORSPACE_LINEAR_KHR 0x308A #endif /* EGL_KHR_gl_colorspace */ #ifndef EGL_KHR_gl_renderbuffer_image #define EGL_KHR_gl_renderbuffer_image 1 #define EGL_GL_RENDERBUFFER_KHR 0x30B9 #endif /* EGL_KHR_gl_renderbuffer_image */ #ifndef EGL_KHR_gl_texture_2D_image #define EGL_KHR_gl_texture_2D_image 1 #define EGL_GL_TEXTURE_2D_KHR 0x30B1 #define EGL_GL_TEXTURE_LEVEL_KHR 0x30BC #endif /* EGL_KHR_gl_texture_2D_image */ #ifndef EGL_KHR_gl_texture_3D_image #define EGL_KHR_gl_texture_3D_image 1 #define EGL_GL_TEXTURE_3D_KHR 0x30B2 #define EGL_GL_TEXTURE_ZOFFSET_KHR 0x30BD #endif /* EGL_KHR_gl_texture_3D_image */ #ifndef EGL_KHR_gl_texture_cubemap_image #define EGL_KHR_gl_texture_cubemap_image 1 #define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR 0x30B3 #define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR 0x30B4 #define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR 0x30B5 #define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR 0x30B6 #define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR 0x30B7 #define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR 0x30B8 #endif /* EGL_KHR_gl_texture_cubemap_image */ #ifndef EGL_KHR_image #define EGL_KHR_image 1 typedef void *EGLImageKHR; #define EGL_NATIVE_PIXMAP_KHR 0x30B0 #define EGL_NO_IMAGE_KHR EGL_CAST(EGLImageKHR,0) typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEIMAGEKHRPROC) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list); typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYIMAGEKHRPROC) (EGLDisplay dpy, EGLImageKHR image); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLImageKHR EGLAPIENTRY eglCreateImageKHR (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list); EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImageKHR (EGLDisplay dpy, EGLImageKHR image); #endif #endif /* EGL_KHR_image */ #ifndef EGL_KHR_image_base #define EGL_KHR_image_base 1 #define EGL_IMAGE_PRESERVED_KHR 0x30D2 #endif /* EGL_KHR_image_base */ #ifndef EGL_KHR_image_pixmap #define EGL_KHR_image_pixmap 1 #endif /* EGL_KHR_image_pixmap */ #ifndef EGL_KHR_lock_surface #define EGL_KHR_lock_surface 1 #define EGL_READ_SURFACE_BIT_KHR 0x0001 #define EGL_WRITE_SURFACE_BIT_KHR 0x0002 #define EGL_LOCK_SURFACE_BIT_KHR 0x0080 #define EGL_OPTIMAL_FORMAT_BIT_KHR 0x0100 #define EGL_MATCH_FORMAT_KHR 0x3043 #define EGL_FORMAT_RGB_565_EXACT_KHR 0x30C0 #define EGL_FORMAT_RGB_565_KHR 0x30C1 #define EGL_FORMAT_RGBA_8888_EXACT_KHR 0x30C2 #define EGL_FORMAT_RGBA_8888_KHR 0x30C3 #define EGL_MAP_PRESERVE_PIXELS_KHR 0x30C4 #define EGL_LOCK_USAGE_HINT_KHR 0x30C5 #define EGL_BITMAP_POINTER_KHR 0x30C6 #define EGL_BITMAP_PITCH_KHR 0x30C7 #define EGL_BITMAP_ORIGIN_KHR 0x30C8 #define EGL_BITMAP_PIXEL_RED_OFFSET_KHR 0x30C9 #define EGL_BITMAP_PIXEL_GREEN_OFFSET_KHR 0x30CA #define EGL_BITMAP_PIXEL_BLUE_OFFSET_KHR 0x30CB #define EGL_BITMAP_PIXEL_ALPHA_OFFSET_KHR 0x30CC #define EGL_BITMAP_PIXEL_LUMINANCE_OFFSET_KHR 0x30CD #define EGL_LOWER_LEFT_KHR 0x30CE #define EGL_UPPER_LEFT_KHR 0x30CF typedef EGLBoolean (EGLAPIENTRYP PFNEGLLOCKSURFACEKHRPROC) (EGLDisplay dpy, EGLSurface surface, const EGLint *attrib_list); typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNLOCKSURFACEKHRPROC) (EGLDisplay dpy, EGLSurface surface); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglLockSurfaceKHR (EGLDisplay dpy, EGLSurface surface, const EGLint *attrib_list); EGLAPI EGLBoolean EGLAPIENTRY eglUnlockSurfaceKHR (EGLDisplay dpy, EGLSurface surface); #endif #endif /* EGL_KHR_lock_surface */ #ifndef EGL_KHR_lock_surface2 #define EGL_KHR_lock_surface2 1 #define EGL_BITMAP_PIXEL_SIZE_KHR 0x3110 #endif /* EGL_KHR_lock_surface2 */ #ifndef EGL_KHR_lock_surface3 #define EGL_KHR_lock_surface3 1 typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACE64KHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLAttribKHR *value); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface64KHR (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLAttribKHR *value); #endif #endif /* EGL_KHR_lock_surface3 */ #ifndef EGL_KHR_mutable_render_buffer #define EGL_KHR_mutable_render_buffer 1 #define EGL_MUTABLE_RENDER_BUFFER_BIT_KHR 0x1000 #endif /* EGL_KHR_mutable_render_buffer */ #ifndef EGL_KHR_no_config_context #define EGL_KHR_no_config_context 1 #define EGL_NO_CONFIG_KHR EGL_CAST(EGLConfig,0) #endif /* EGL_KHR_no_config_context */ #ifndef EGL_KHR_partial_update #define EGL_KHR_partial_update 1 #define EGL_BUFFER_AGE_KHR 0x313D typedef EGLBoolean (EGLAPIENTRYP PFNEGLSETDAMAGEREGIONKHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglSetDamageRegionKHR (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); #endif #endif /* EGL_KHR_partial_update */ #ifndef EGL_KHR_platform_android #define EGL_KHR_platform_android 1 #define EGL_PLATFORM_ANDROID_KHR 0x3141 #endif /* EGL_KHR_platform_android */ #ifndef EGL_KHR_platform_gbm #define EGL_KHR_platform_gbm 1 #define EGL_PLATFORM_GBM_KHR 0x31D7 #endif /* EGL_KHR_platform_gbm */ #ifndef EGL_KHR_platform_wayland #define EGL_KHR_platform_wayland 1 #define EGL_PLATFORM_WAYLAND_KHR 0x31D8 #endif /* EGL_KHR_platform_wayland */ #ifndef EGL_KHR_platform_x11 #define EGL_KHR_platform_x11 1 #define EGL_PLATFORM_X11_KHR 0x31D5 #define EGL_PLATFORM_X11_SCREEN_KHR 0x31D6 #endif /* EGL_KHR_platform_x11 */ #ifndef EGL_KHR_reusable_sync #define EGL_KHR_reusable_sync 1 #ifdef KHRONOS_SUPPORT_INT64 #define EGL_SYNC_STATUS_KHR 0x30F1 #define EGL_SIGNALED_KHR 0x30F2 #define EGL_UNSIGNALED_KHR 0x30F3 #define EGL_TIMEOUT_EXPIRED_KHR 0x30F5 #define EGL_CONDITION_SATISFIED_KHR 0x30F6 #define EGL_SYNC_TYPE_KHR 0x30F7 #define EGL_SYNC_REUSABLE_KHR 0x30FA #define EGL_SYNC_FLUSH_COMMANDS_BIT_KHR 0x0001 #define EGL_FOREVER_KHR 0xFFFFFFFFFFFFFFFFull #define EGL_NO_SYNC_KHR EGL_CAST(EGLSyncKHR,0) typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode); #endif #endif /* KHRONOS_SUPPORT_INT64 */ #endif /* EGL_KHR_reusable_sync */ #ifndef EGL_KHR_stream #define EGL_KHR_stream 1 typedef void *EGLStreamKHR; typedef khronos_uint64_t EGLuint64KHR; #ifdef KHRONOS_SUPPORT_INT64 #define EGL_NO_STREAM_KHR EGL_CAST(EGLStreamKHR,0) #define EGL_CONSUMER_LATENCY_USEC_KHR 0x3210 #define EGL_PRODUCER_FRAME_KHR 0x3212 #define EGL_CONSUMER_FRAME_KHR 0x3213 #define EGL_STREAM_STATE_KHR 0x3214 #define EGL_STREAM_STATE_CREATED_KHR 0x3215 #define EGL_STREAM_STATE_CONNECTING_KHR 0x3216 #define EGL_STREAM_STATE_EMPTY_KHR 0x3217 #define EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR 0x3218 #define EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR 0x3219 #define EGL_STREAM_STATE_DISCONNECTED_KHR 0x321A #define EGL_BAD_STREAM_KHR 0x321B #define EGL_BAD_STATE_KHR 0x321C typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMKHRPROC) (EGLDisplay dpy, const EGLint *attrib_list); typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSTREAMKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value); typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint *value); typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMU64KHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR *value); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamKHR (EGLDisplay dpy, const EGLint *attrib_list); EGLAPI EGLBoolean EGLAPIENTRY eglDestroyStreamKHR (EGLDisplay dpy, EGLStreamKHR stream); EGLAPI EGLBoolean EGLAPIENTRY eglStreamAttribKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value); EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint *value); EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamu64KHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR *value); #endif #endif /* KHRONOS_SUPPORT_INT64 */ #endif /* EGL_KHR_stream */ #ifndef EGL_KHR_stream_attrib #define EGL_KHR_stream_attrib 1 #ifdef KHRONOS_SUPPORT_INT64 typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMATTRIBKHRPROC) (EGLDisplay dpy, const EGLAttrib *attrib_list); typedef EGLBoolean (EGLAPIENTRYP PFNEGLSETSTREAMATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLAttrib value); typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLAttrib *value); typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERACQUIREATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list); typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERRELEASEATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamAttribKHR (EGLDisplay dpy, const EGLAttrib *attrib_list); EGLAPI EGLBoolean EGLAPIENTRY eglSetStreamAttribKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLAttrib value); EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamAttribKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLAttrib *value); EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerAcquireAttribKHR (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list); EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerReleaseAttribKHR (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list); #endif #endif /* KHRONOS_SUPPORT_INT64 */ #endif /* EGL_KHR_stream_attrib */ #ifndef EGL_KHR_stream_consumer_gltexture #define EGL_KHR_stream_consumer_gltexture 1 #ifdef EGL_KHR_stream #define EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR 0x321E typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERACQUIREKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERRELEASEKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerGLTextureExternalKHR (EGLDisplay dpy, EGLStreamKHR stream); EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerAcquireKHR (EGLDisplay dpy, EGLStreamKHR stream); EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerReleaseKHR (EGLDisplay dpy, EGLStreamKHR stream); #endif #endif /* EGL_KHR_stream */ #endif /* EGL_KHR_stream_consumer_gltexture */ #ifndef EGL_KHR_stream_cross_process_fd #define EGL_KHR_stream_cross_process_fd 1 typedef int EGLNativeFileDescriptorKHR; #ifdef EGL_KHR_stream #define EGL_NO_FILE_DESCRIPTOR_KHR EGL_CAST(EGLNativeFileDescriptorKHR,-1) typedef EGLNativeFileDescriptorKHR (EGLAPIENTRYP PFNEGLGETSTREAMFILEDESCRIPTORKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMFROMFILEDESCRIPTORKHRPROC) (EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLNativeFileDescriptorKHR EGLAPIENTRY eglGetStreamFileDescriptorKHR (EGLDisplay dpy, EGLStreamKHR stream); EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamFromFileDescriptorKHR (EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor); #endif #endif /* EGL_KHR_stream */ #endif /* EGL_KHR_stream_cross_process_fd */ #ifndef EGL_KHR_stream_fifo #define EGL_KHR_stream_fifo 1 #ifdef EGL_KHR_stream #define EGL_STREAM_FIFO_LENGTH_KHR 0x31FC #define EGL_STREAM_TIME_NOW_KHR 0x31FD #define EGL_STREAM_TIME_CONSUMER_KHR 0x31FE #define EGL_STREAM_TIME_PRODUCER_KHR 0x31FF typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMTIMEKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR *value); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamTimeKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR *value); #endif #endif /* EGL_KHR_stream */ #endif /* EGL_KHR_stream_fifo */ #ifndef EGL_KHR_stream_producer_aldatalocator #define EGL_KHR_stream_producer_aldatalocator 1 #ifdef EGL_KHR_stream #endif /* EGL_KHR_stream */ #endif /* EGL_KHR_stream_producer_aldatalocator */ #ifndef EGL_KHR_stream_producer_eglsurface #define EGL_KHR_stream_producer_eglsurface 1 #ifdef EGL_KHR_stream #define EGL_STREAM_BIT_KHR 0x0800 typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC) (EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint *attrib_list); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLSurface EGLAPIENTRY eglCreateStreamProducerSurfaceKHR (EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint *attrib_list); #endif #endif /* EGL_KHR_stream */ #endif /* EGL_KHR_stream_producer_eglsurface */ #ifndef EGL_KHR_surfaceless_context #define EGL_KHR_surfaceless_context 1 #endif /* EGL_KHR_surfaceless_context */ #ifndef EGL_KHR_swap_buffers_with_damage #define EGL_KHR_swap_buffers_with_damage 1 typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEKHRPROC) (EGLDisplay dpy, EGLSurface surface, const EGLint *rects, EGLint n_rects); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageKHR (EGLDisplay dpy, EGLSurface surface, const EGLint *rects, EGLint n_rects); #endif #endif /* EGL_KHR_swap_buffers_with_damage */ #ifndef EGL_KHR_vg_parent_image #define EGL_KHR_vg_parent_image 1 #define EGL_VG_PARENT_IMAGE_KHR 0x30BA #endif /* EGL_KHR_vg_parent_image */ #ifndef EGL_KHR_wait_sync #define EGL_KHR_wait_sync 1 typedef EGLint (EGLAPIENTRYP PFNEGLWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLint EGLAPIENTRY eglWaitSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags); #endif #endif /* EGL_KHR_wait_sync */ #ifndef EGL_ANDROID_GLES_layers #define EGL_ANDROID_GLES_layers 1 #endif /* EGL_ANDROID_GLES_layers */ #ifndef EGL_ANDROID_blob_cache #define EGL_ANDROID_blob_cache 1 typedef khronos_ssize_t EGLsizeiANDROID; typedef void (*EGLSetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, const void *value, EGLsizeiANDROID valueSize); typedef EGLsizeiANDROID (*EGLGetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, void *value, EGLsizeiANDROID valueSize); typedef void (EGLAPIENTRYP PFNEGLSETBLOBCACHEFUNCSANDROIDPROC) (EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI void EGLAPIENTRY eglSetBlobCacheFuncsANDROID (EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get); #endif #endif /* EGL_ANDROID_blob_cache */ #ifndef EGL_ANDROID_create_native_client_buffer #define EGL_ANDROID_create_native_client_buffer 1 #define EGL_NATIVE_BUFFER_USAGE_ANDROID 0x3143 #define EGL_NATIVE_BUFFER_USAGE_PROTECTED_BIT_ANDROID 0x00000001 #define EGL_NATIVE_BUFFER_USAGE_RENDERBUFFER_BIT_ANDROID 0x00000002 #define EGL_NATIVE_BUFFER_USAGE_TEXTURE_BIT_ANDROID 0x00000004 typedef EGLClientBuffer (EGLAPIENTRYP PFNEGLCREATENATIVECLIENTBUFFERANDROIDPROC) (const EGLint *attrib_list); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLClientBuffer EGLAPIENTRY eglCreateNativeClientBufferANDROID (const EGLint *attrib_list); #endif #endif /* EGL_ANDROID_create_native_client_buffer */ #ifndef EGL_ANDROID_framebuffer_target #define EGL_ANDROID_framebuffer_target 1 #define EGL_FRAMEBUFFER_TARGET_ANDROID 0x3147 #endif /* EGL_ANDROID_framebuffer_target */ #ifndef EGL_ANDROID_front_buffer_auto_refresh #define EGL_ANDROID_front_buffer_auto_refresh 1 #define EGL_FRONT_BUFFER_AUTO_REFRESH_ANDROID 0x314C #endif /* EGL_ANDROID_front_buffer_auto_refresh */ #ifndef EGL_ANDROID_get_frame_timestamps #define EGL_ANDROID_get_frame_timestamps 1 typedef khronos_stime_nanoseconds_t EGLnsecsANDROID; #define EGL_TIMESTAMP_PENDING_ANDROID EGL_CAST(EGLnsecsANDROID,-2) #define EGL_TIMESTAMP_INVALID_ANDROID EGL_CAST(EGLnsecsANDROID,-1) #define EGL_TIMESTAMPS_ANDROID 0x3430 #define EGL_COMPOSITE_DEADLINE_ANDROID 0x3431 #define EGL_COMPOSITE_INTERVAL_ANDROID 0x3432 #define EGL_COMPOSITE_TO_PRESENT_LATENCY_ANDROID 0x3433 #define EGL_REQUESTED_PRESENT_TIME_ANDROID 0x3434 #define EGL_RENDERING_COMPLETE_TIME_ANDROID 0x3435 #define EGL_COMPOSITION_LATCH_TIME_ANDROID 0x3436 #define EGL_FIRST_COMPOSITION_START_TIME_ANDROID 0x3437 #define EGL_LAST_COMPOSITION_START_TIME_ANDROID 0x3438 #define EGL_FIRST_COMPOSITION_GPU_FINISHED_TIME_ANDROID 0x3439 #define EGL_DISPLAY_PRESENT_TIME_ANDROID 0x343A #define EGL_DEQUEUE_READY_TIME_ANDROID 0x343B #define EGL_READS_DONE_TIME_ANDROID 0x343C typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETCOMPOSITORTIMINGSUPPORTEDANDROIDPROC) (EGLDisplay dpy, EGLSurface surface, EGLint name); typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETCOMPOSITORTIMINGANDROIDPROC) (EGLDisplay dpy, EGLSurface surface, EGLint numTimestamps, const EGLint *names, EGLnsecsANDROID *values); typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETNEXTFRAMEIDANDROIDPROC) (EGLDisplay dpy, EGLSurface surface, EGLuint64KHR *frameId); typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETFRAMETIMESTAMPSUPPORTEDANDROIDPROC) (EGLDisplay dpy, EGLSurface surface, EGLint timestamp); typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETFRAMETIMESTAMPSANDROIDPROC) (EGLDisplay dpy, EGLSurface surface, EGLuint64KHR frameId, EGLint numTimestamps, const EGLint *timestamps, EGLnsecsANDROID *values); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglGetCompositorTimingSupportedANDROID (EGLDisplay dpy, EGLSurface surface, EGLint name); EGLAPI EGLBoolean EGLAPIENTRY eglGetCompositorTimingANDROID (EGLDisplay dpy, EGLSurface surface, EGLint numTimestamps, const EGLint *names, EGLnsecsANDROID *values); EGLAPI EGLBoolean EGLAPIENTRY eglGetNextFrameIdANDROID (EGLDisplay dpy, EGLSurface surface, EGLuint64KHR *frameId); EGLAPI EGLBoolean EGLAPIENTRY eglGetFrameTimestampSupportedANDROID (EGLDisplay dpy, EGLSurface surface, EGLint timestamp); EGLAPI EGLBoolean EGLAPIENTRY eglGetFrameTimestampsANDROID (EGLDisplay dpy, EGLSurface surface, EGLuint64KHR frameId, EGLint numTimestamps, const EGLint *timestamps, EGLnsecsANDROID *values); #endif #endif /* EGL_ANDROID_get_frame_timestamps */ #ifndef EGL_ANDROID_get_native_client_buffer #define EGL_ANDROID_get_native_client_buffer 1 struct AHardwareBuffer; typedef EGLClientBuffer (EGLAPIENTRYP PFNEGLGETNATIVECLIENTBUFFERANDROIDPROC) (const struct AHardwareBuffer *buffer); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLClientBuffer EGLAPIENTRY eglGetNativeClientBufferANDROID (const struct AHardwareBuffer *buffer); #endif #endif /* EGL_ANDROID_get_native_client_buffer */ #ifndef EGL_ANDROID_image_native_buffer #define EGL_ANDROID_image_native_buffer 1 #define EGL_NATIVE_BUFFER_ANDROID 0x3140 #endif /* EGL_ANDROID_image_native_buffer */ #ifndef EGL_ANDROID_native_fence_sync #define EGL_ANDROID_native_fence_sync 1 #define EGL_SYNC_NATIVE_FENCE_ANDROID 0x3144 #define EGL_SYNC_NATIVE_FENCE_FD_ANDROID 0x3145 #define EGL_SYNC_NATIVE_FENCE_SIGNALED_ANDROID 0x3146 #define EGL_NO_NATIVE_FENCE_FD_ANDROID -1 typedef EGLint (EGLAPIENTRYP PFNEGLDUPNATIVEFENCEFDANDROIDPROC) (EGLDisplay dpy, EGLSyncKHR sync); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLint EGLAPIENTRY eglDupNativeFenceFDANDROID (EGLDisplay dpy, EGLSyncKHR sync); #endif #endif /* EGL_ANDROID_native_fence_sync */ #ifndef EGL_ANDROID_presentation_time #define EGL_ANDROID_presentation_time 1 typedef EGLBoolean (EGLAPIENTRYP PFNEGLPRESENTATIONTIMEANDROIDPROC) (EGLDisplay dpy, EGLSurface surface, EGLnsecsANDROID time); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglPresentationTimeANDROID (EGLDisplay dpy, EGLSurface surface, EGLnsecsANDROID time); #endif #endif /* EGL_ANDROID_presentation_time */ #ifndef EGL_ANDROID_recordable #define EGL_ANDROID_recordable 1 #define EGL_RECORDABLE_ANDROID 0x3142 #endif /* EGL_ANDROID_recordable */ #ifndef EGL_ANGLE_d3d_share_handle_client_buffer #define EGL_ANGLE_d3d_share_handle_client_buffer 1 #define EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE 0x3200 #endif /* EGL_ANGLE_d3d_share_handle_client_buffer */ #ifndef EGL_ANGLE_device_d3d #define EGL_ANGLE_device_d3d 1 #define EGL_D3D9_DEVICE_ANGLE 0x33A0 #define EGL_D3D11_DEVICE_ANGLE 0x33A1 #endif /* EGL_ANGLE_device_d3d */ #ifndef EGL_ANGLE_query_surface_pointer #define EGL_ANGLE_query_surface_pointer 1 typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACEPOINTERANGLEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurfacePointerANGLE (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value); #endif #endif /* EGL_ANGLE_query_surface_pointer */ #ifndef EGL_ANGLE_surface_d3d_texture_2d_share_handle #define EGL_ANGLE_surface_d3d_texture_2d_share_handle 1 #endif /* EGL_ANGLE_surface_d3d_texture_2d_share_handle */ #ifndef EGL_ANGLE_sync_control_rate #define EGL_ANGLE_sync_control_rate 1 typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETMSCRATEANGLEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *numerator, EGLint *denominator); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglGetMscRateANGLE (EGLDisplay dpy, EGLSurface surface, EGLint *numerator, EGLint *denominator); #endif #endif /* EGL_ANGLE_sync_control_rate */ #ifndef EGL_ANGLE_window_fixed_size #define EGL_ANGLE_window_fixed_size 1 #define EGL_FIXED_SIZE_ANGLE 0x3201 #endif /* EGL_ANGLE_window_fixed_size */ #ifndef EGL_ARM_image_format #define EGL_ARM_image_format 1 #define EGL_COLOR_COMPONENT_TYPE_UNSIGNED_INTEGER_ARM 0x3287 #define EGL_COLOR_COMPONENT_TYPE_INTEGER_ARM 0x3288 #endif /* EGL_ARM_image_format */ #ifndef EGL_ARM_implicit_external_sync #define EGL_ARM_implicit_external_sync 1 #define EGL_SYNC_PRIOR_COMMANDS_IMPLICIT_EXTERNAL_ARM 0x328A #endif /* EGL_ARM_implicit_external_sync */ #ifndef EGL_ARM_pixmap_multisample_discard #define EGL_ARM_pixmap_multisample_discard 1 #define EGL_DISCARD_SAMPLES_ARM 0x3286 #endif /* EGL_ARM_pixmap_multisample_discard */ #ifndef EGL_EXT_bind_to_front #define EGL_EXT_bind_to_front 1 #define EGL_FRONT_BUFFER_EXT 0x3464 #endif /* EGL_EXT_bind_to_front */ #ifndef EGL_EXT_buffer_age #define EGL_EXT_buffer_age 1 #define EGL_BUFFER_AGE_EXT 0x313D #endif /* EGL_EXT_buffer_age */ #ifndef EGL_EXT_client_extensions #define EGL_EXT_client_extensions 1 #endif /* EGL_EXT_client_extensions */ #ifndef EGL_EXT_client_sync #define EGL_EXT_client_sync 1 #define EGL_SYNC_CLIENT_EXT 0x3364 #define EGL_SYNC_CLIENT_SIGNAL_EXT 0x3365 typedef EGLBoolean (EGLAPIENTRYP PFNEGLCLIENTSIGNALSYNCEXTPROC) (EGLDisplay dpy, EGLSync sync, const EGLAttrib *attrib_list); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglClientSignalSyncEXT (EGLDisplay dpy, EGLSync sync, const EGLAttrib *attrib_list); #endif #endif /* EGL_EXT_client_sync */ #ifndef EGL_EXT_compositor #define EGL_EXT_compositor 1 #define EGL_PRIMARY_COMPOSITOR_CONTEXT_EXT 0x3460 #define EGL_EXTERNAL_REF_ID_EXT 0x3461 #define EGL_COMPOSITOR_DROP_NEWEST_FRAME_EXT 0x3462 #define EGL_COMPOSITOR_KEEP_NEWEST_FRAME_EXT 0x3463 typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETCONTEXTLISTEXTPROC) (const EGLint *external_ref_ids, EGLint num_entries); typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETCONTEXTATTRIBUTESEXTPROC) (EGLint external_ref_id, const EGLint *context_attributes, EGLint num_entries); typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETWINDOWLISTEXTPROC) (EGLint external_ref_id, const EGLint *external_win_ids, EGLint num_entries); typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETWINDOWATTRIBUTESEXTPROC) (EGLint external_win_id, const EGLint *window_attributes, EGLint num_entries); typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORBINDTEXWINDOWEXTPROC) (EGLint external_win_id); typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETSIZEEXTPROC) (EGLint external_win_id, EGLint width, EGLint height); typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSWAPPOLICYEXTPROC) (EGLint external_win_id, EGLint policy); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSetContextListEXT (const EGLint *external_ref_ids, EGLint num_entries); EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSetContextAttributesEXT (EGLint external_ref_id, const EGLint *context_attributes, EGLint num_entries); EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSetWindowListEXT (EGLint external_ref_id, const EGLint *external_win_ids, EGLint num_entries); EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSetWindowAttributesEXT (EGLint external_win_id, const EGLint *window_attributes, EGLint num_entries); EGLAPI EGLBoolean EGLAPIENTRY eglCompositorBindTexWindowEXT (EGLint external_win_id); EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSetSizeEXT (EGLint external_win_id, EGLint width, EGLint height); EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSwapPolicyEXT (EGLint external_win_id, EGLint policy); #endif #endif /* EGL_EXT_compositor */ #ifndef EGL_EXT_config_select_group #define EGL_EXT_config_select_group 1 #define EGL_CONFIG_SELECT_GROUP_EXT 0x34C0 #endif /* EGL_EXT_config_select_group */ #ifndef EGL_EXT_create_context_robustness #define EGL_EXT_create_context_robustness 1 #define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT 0x30BF #define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT 0x3138 #define EGL_NO_RESET_NOTIFICATION_EXT 0x31BE #define EGL_LOSE_CONTEXT_ON_RESET_EXT 0x31BF #endif /* EGL_EXT_create_context_robustness */ #ifndef EGL_EXT_device_base #define EGL_EXT_device_base 1 typedef void *EGLDeviceEXT; #define EGL_NO_DEVICE_EXT EGL_CAST(EGLDeviceEXT,0) #define EGL_BAD_DEVICE_EXT 0x322B #define EGL_DEVICE_EXT 0x322C typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEVICEATTRIBEXTPROC) (EGLDeviceEXT device, EGLint attribute, EGLAttrib *value); typedef const char *(EGLAPIENTRYP PFNEGLQUERYDEVICESTRINGEXTPROC) (EGLDeviceEXT device, EGLint name); typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEVICESEXTPROC) (EGLint max_devices, EGLDeviceEXT *devices, EGLint *num_devices); typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDISPLAYATTRIBEXTPROC) (EGLDisplay dpy, EGLint attribute, EGLAttrib *value); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglQueryDeviceAttribEXT (EGLDeviceEXT device, EGLint attribute, EGLAttrib *value); EGLAPI const char *EGLAPIENTRY eglQueryDeviceStringEXT (EGLDeviceEXT device, EGLint name); EGLAPI EGLBoolean EGLAPIENTRY eglQueryDevicesEXT (EGLint max_devices, EGLDeviceEXT *devices, EGLint *num_devices); EGLAPI EGLBoolean EGLAPIENTRY eglQueryDisplayAttribEXT (EGLDisplay dpy, EGLint attribute, EGLAttrib *value); #endif #endif /* EGL_EXT_device_base */ #ifndef EGL_EXT_device_drm #define EGL_EXT_device_drm 1 #define EGL_DRM_DEVICE_FILE_EXT 0x3233 #define EGL_DRM_MASTER_FD_EXT 0x333C #endif /* EGL_EXT_device_drm */ #ifndef EGL_EXT_device_drm_render_node #define EGL_EXT_device_drm_render_node 1 #define EGL_DRM_RENDER_NODE_FILE_EXT 0x3377 #endif /* EGL_EXT_device_drm_render_node */ #ifndef EGL_EXT_device_enumeration #define EGL_EXT_device_enumeration 1 #endif /* EGL_EXT_device_enumeration */ #ifndef EGL_EXT_device_openwf #define EGL_EXT_device_openwf 1 #define EGL_OPENWF_DEVICE_ID_EXT 0x3237 #define EGL_OPENWF_DEVICE_EXT 0x333D #endif /* EGL_EXT_device_openwf */ #ifndef EGL_EXT_device_persistent_id #define EGL_EXT_device_persistent_id 1 #define EGL_DEVICE_UUID_EXT 0x335C #define EGL_DRIVER_UUID_EXT 0x335D #define EGL_DRIVER_NAME_EXT 0x335E typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEVICEBINARYEXTPROC) (EGLDeviceEXT device, EGLint name, EGLint max_size, void *value, EGLint *size); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglQueryDeviceBinaryEXT (EGLDeviceEXT device, EGLint name, EGLint max_size, void *value, EGLint *size); #endif #endif /* EGL_EXT_device_persistent_id */ #ifndef EGL_EXT_device_query #define EGL_EXT_device_query 1 #endif /* EGL_EXT_device_query */ #ifndef EGL_EXT_device_query_name #define EGL_EXT_device_query_name 1 #define EGL_RENDERER_EXT 0x335F #endif /* EGL_EXT_device_query_name */ #ifndef EGL_EXT_explicit_device #define EGL_EXT_explicit_device 1 #endif /* EGL_EXT_explicit_device */ #ifndef EGL_EXT_gl_colorspace_bt2020_linear #define EGL_EXT_gl_colorspace_bt2020_linear 1 #define EGL_GL_COLORSPACE_BT2020_LINEAR_EXT 0x333F #endif /* EGL_EXT_gl_colorspace_bt2020_linear */ #ifndef EGL_EXT_gl_colorspace_bt2020_pq #define EGL_EXT_gl_colorspace_bt2020_pq 1 #define EGL_GL_COLORSPACE_BT2020_PQ_EXT 0x3340 #endif /* EGL_EXT_gl_colorspace_bt2020_pq */ #ifndef EGL_EXT_gl_colorspace_display_p3 #define EGL_EXT_gl_colorspace_display_p3 1 #define EGL_GL_COLORSPACE_DISPLAY_P3_EXT 0x3363 #endif /* EGL_EXT_gl_colorspace_display_p3 */ #ifndef EGL_EXT_gl_colorspace_display_p3_linear #define EGL_EXT_gl_colorspace_display_p3_linear 1 #define EGL_GL_COLORSPACE_DISPLAY_P3_LINEAR_EXT 0x3362 #endif /* EGL_EXT_gl_colorspace_display_p3_linear */ #ifndef EGL_EXT_gl_colorspace_display_p3_passthrough #define EGL_EXT_gl_colorspace_display_p3_passthrough 1 #define EGL_GL_COLORSPACE_DISPLAY_P3_PASSTHROUGH_EXT 0x3490 #endif /* EGL_EXT_gl_colorspace_display_p3_passthrough */ #ifndef EGL_EXT_gl_colorspace_scrgb #define EGL_EXT_gl_colorspace_scrgb 1 #define EGL_GL_COLORSPACE_SCRGB_EXT 0x3351 #endif /* EGL_EXT_gl_colorspace_scrgb */ #ifndef EGL_EXT_gl_colorspace_scrgb_linear #define EGL_EXT_gl_colorspace_scrgb_linear 1 #define EGL_GL_COLORSPACE_SCRGB_LINEAR_EXT 0x3350 #endif /* EGL_EXT_gl_colorspace_scrgb_linear */ #ifndef EGL_EXT_image_dma_buf_import #define EGL_EXT_image_dma_buf_import 1 #define EGL_LINUX_DMA_BUF_EXT 0x3270 #define EGL_LINUX_DRM_FOURCC_EXT 0x3271 #define EGL_DMA_BUF_PLANE0_FD_EXT 0x3272 #define EGL_DMA_BUF_PLANE0_OFFSET_EXT 0x3273 #define EGL_DMA_BUF_PLANE0_PITCH_EXT 0x3274 #define EGL_DMA_BUF_PLANE1_FD_EXT 0x3275 #define EGL_DMA_BUF_PLANE1_OFFSET_EXT 0x3276 #define EGL_DMA_BUF_PLANE1_PITCH_EXT 0x3277 #define EGL_DMA_BUF_PLANE2_FD_EXT 0x3278 #define EGL_DMA_BUF_PLANE2_OFFSET_EXT 0x3279 #define EGL_DMA_BUF_PLANE2_PITCH_EXT 0x327A #define EGL_YUV_COLOR_SPACE_HINT_EXT 0x327B #define EGL_SAMPLE_RANGE_HINT_EXT 0x327C #define EGL_YUV_CHROMA_HORIZONTAL_SITING_HINT_EXT 0x327D #define EGL_YUV_CHROMA_VERTICAL_SITING_HINT_EXT 0x327E #define EGL_ITU_REC601_EXT 0x327F #define EGL_ITU_REC709_EXT 0x3280 #define EGL_ITU_REC2020_EXT 0x3281 #define EGL_YUV_FULL_RANGE_EXT 0x3282 #define EGL_YUV_NARROW_RANGE_EXT 0x3283 #define EGL_YUV_CHROMA_SITING_0_EXT 0x3284 #define EGL_YUV_CHROMA_SITING_0_5_EXT 0x3285 #endif /* EGL_EXT_image_dma_buf_import */ #ifndef EGL_EXT_image_dma_buf_import_modifiers #define EGL_EXT_image_dma_buf_import_modifiers 1 #define EGL_DMA_BUF_PLANE3_FD_EXT 0x3440 #define EGL_DMA_BUF_PLANE3_OFFSET_EXT 0x3441 #define EGL_DMA_BUF_PLANE3_PITCH_EXT 0x3442 #define EGL_DMA_BUF_PLANE0_MODIFIER_LO_EXT 0x3443 #define EGL_DMA_BUF_PLANE0_MODIFIER_HI_EXT 0x3444 #define EGL_DMA_BUF_PLANE1_MODIFIER_LO_EXT 0x3445 #define EGL_DMA_BUF_PLANE1_MODIFIER_HI_EXT 0x3446 #define EGL_DMA_BUF_PLANE2_MODIFIER_LO_EXT 0x3447 #define EGL_DMA_BUF_PLANE2_MODIFIER_HI_EXT 0x3448 #define EGL_DMA_BUF_PLANE3_MODIFIER_LO_EXT 0x3449 #define EGL_DMA_BUF_PLANE3_MODIFIER_HI_EXT 0x344A typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDMABUFFORMATSEXTPROC) (EGLDisplay dpy, EGLint max_formats, EGLint *formats, EGLint *num_formats); typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDMABUFMODIFIERSEXTPROC) (EGLDisplay dpy, EGLint format, EGLint max_modifiers, EGLuint64KHR *modifiers, EGLBoolean *external_only, EGLint *num_modifiers); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglQueryDmaBufFormatsEXT (EGLDisplay dpy, EGLint max_formats, EGLint *formats, EGLint *num_formats); EGLAPI EGLBoolean EGLAPIENTRY eglQueryDmaBufModifiersEXT (EGLDisplay dpy, EGLint format, EGLint max_modifiers, EGLuint64KHR *modifiers, EGLBoolean *external_only, EGLint *num_modifiers); #endif #endif /* EGL_EXT_image_dma_buf_import_modifiers */ #ifndef EGL_EXT_image_gl_colorspace #define EGL_EXT_image_gl_colorspace 1 #define EGL_GL_COLORSPACE_DEFAULT_EXT 0x314D #endif /* EGL_EXT_image_gl_colorspace */ #ifndef EGL_EXT_image_implicit_sync_control #define EGL_EXT_image_implicit_sync_control 1 #define EGL_IMPORT_SYNC_TYPE_EXT 0x3470 #define EGL_IMPORT_IMPLICIT_SYNC_EXT 0x3471 #define EGL_IMPORT_EXPLICIT_SYNC_EXT 0x3472 #endif /* EGL_EXT_image_implicit_sync_control */ #ifndef EGL_EXT_multiview_window #define EGL_EXT_multiview_window 1 #define EGL_MULTIVIEW_VIEW_COUNT_EXT 0x3134 #endif /* EGL_EXT_multiview_window */ #ifndef EGL_EXT_output_base #define EGL_EXT_output_base 1 typedef void *EGLOutputLayerEXT; typedef void *EGLOutputPortEXT; #define EGL_NO_OUTPUT_LAYER_EXT EGL_CAST(EGLOutputLayerEXT,0) #define EGL_NO_OUTPUT_PORT_EXT EGL_CAST(EGLOutputPortEXT,0) #define EGL_BAD_OUTPUT_LAYER_EXT 0x322D #define EGL_BAD_OUTPUT_PORT_EXT 0x322E #define EGL_SWAP_INTERVAL_EXT 0x322F typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETOUTPUTLAYERSEXTPROC) (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputLayerEXT *layers, EGLint max_layers, EGLint *num_layers); typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETOUTPUTPORTSEXTPROC) (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputPortEXT *ports, EGLint max_ports, EGLint *num_ports); typedef EGLBoolean (EGLAPIENTRYP PFNEGLOUTPUTLAYERATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib value); typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYOUTPUTLAYERATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib *value); typedef const char *(EGLAPIENTRYP PFNEGLQUERYOUTPUTLAYERSTRINGEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint name); typedef EGLBoolean (EGLAPIENTRYP PFNEGLOUTPUTPORTATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib value); typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYOUTPUTPORTATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib *value); typedef const char *(EGLAPIENTRYP PFNEGLQUERYOUTPUTPORTSTRINGEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint name); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglGetOutputLayersEXT (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputLayerEXT *layers, EGLint max_layers, EGLint *num_layers); EGLAPI EGLBoolean EGLAPIENTRY eglGetOutputPortsEXT (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputPortEXT *ports, EGLint max_ports, EGLint *num_ports); EGLAPI EGLBoolean EGLAPIENTRY eglOutputLayerAttribEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib value); EGLAPI EGLBoolean EGLAPIENTRY eglQueryOutputLayerAttribEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib *value); EGLAPI const char *EGLAPIENTRY eglQueryOutputLayerStringEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint name); EGLAPI EGLBoolean EGLAPIENTRY eglOutputPortAttribEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib value); EGLAPI EGLBoolean EGLAPIENTRY eglQueryOutputPortAttribEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib *value); EGLAPI const char *EGLAPIENTRY eglQueryOutputPortStringEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint name); #endif #endif /* EGL_EXT_output_base */ #ifndef EGL_EXT_output_drm #define EGL_EXT_output_drm 1 #define EGL_DRM_CRTC_EXT 0x3234 #define EGL_DRM_PLANE_EXT 0x3235 #define EGL_DRM_CONNECTOR_EXT 0x3236 #endif /* EGL_EXT_output_drm */ #ifndef EGL_EXT_output_openwf #define EGL_EXT_output_openwf 1 #define EGL_OPENWF_PIPELINE_ID_EXT 0x3238 #define EGL_OPENWF_PORT_ID_EXT 0x3239 #endif /* EGL_EXT_output_openwf */ #ifndef EGL_EXT_pixel_format_float #define EGL_EXT_pixel_format_float 1 #define EGL_COLOR_COMPONENT_TYPE_EXT 0x3339 #define EGL_COLOR_COMPONENT_TYPE_FIXED_EXT 0x333A #define EGL_COLOR_COMPONENT_TYPE_FLOAT_EXT 0x333B #endif /* EGL_EXT_pixel_format_float */ #ifndef EGL_EXT_platform_base #define EGL_EXT_platform_base 1 typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC) (EGLenum platform, void *native_display, const EGLint *attrib_list); typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list); typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLDisplay EGLAPIENTRY eglGetPlatformDisplayEXT (EGLenum platform, void *native_display, const EGLint *attrib_list); EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformWindowSurfaceEXT (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list); EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurfaceEXT (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list); #endif #endif /* EGL_EXT_platform_base */ #ifndef EGL_EXT_platform_device #define EGL_EXT_platform_device 1 #define EGL_PLATFORM_DEVICE_EXT 0x313F #endif /* EGL_EXT_platform_device */ #ifndef EGL_EXT_platform_wayland #define EGL_EXT_platform_wayland 1 #define EGL_PLATFORM_WAYLAND_EXT 0x31D8 #endif /* EGL_EXT_platform_wayland */ #ifndef EGL_EXT_platform_x11 #define EGL_EXT_platform_x11 1 #define EGL_PLATFORM_X11_EXT 0x31D5 #define EGL_PLATFORM_X11_SCREEN_EXT 0x31D6 #endif /* EGL_EXT_platform_x11 */ #ifndef EGL_EXT_platform_xcb #define EGL_EXT_platform_xcb 1 #define EGL_PLATFORM_XCB_EXT 0x31DC #define EGL_PLATFORM_XCB_SCREEN_EXT 0x31DE #endif /* EGL_EXT_platform_xcb */ #ifndef EGL_EXT_present_opaque #define EGL_EXT_present_opaque 1 #define EGL_PRESENT_OPAQUE_EXT 0x31DF #endif /* EGL_EXT_present_opaque */ #ifndef EGL_EXT_protected_content #define EGL_EXT_protected_content 1 #define EGL_PROTECTED_CONTENT_EXT 0x32C0 #endif /* EGL_EXT_protected_content */ #ifndef EGL_EXT_protected_surface #define EGL_EXT_protected_surface 1 #endif /* EGL_EXT_protected_surface */ #ifndef EGL_EXT_stream_consumer_egloutput #define EGL_EXT_stream_consumer_egloutput 1 typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMEROUTPUTEXTPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLOutputLayerEXT layer); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerOutputEXT (EGLDisplay dpy, EGLStreamKHR stream, EGLOutputLayerEXT layer); #endif #endif /* EGL_EXT_stream_consumer_egloutput */ #ifndef EGL_EXT_surface_CTA861_3_metadata #define EGL_EXT_surface_CTA861_3_metadata 1 #define EGL_CTA861_3_MAX_CONTENT_LIGHT_LEVEL_EXT 0x3360 #define EGL_CTA861_3_MAX_FRAME_AVERAGE_LEVEL_EXT 0x3361 #endif /* EGL_EXT_surface_CTA861_3_metadata */ #ifndef EGL_EXT_surface_SMPTE2086_metadata #define EGL_EXT_surface_SMPTE2086_metadata 1 #define EGL_SMPTE2086_DISPLAY_PRIMARY_RX_EXT 0x3341 #define EGL_SMPTE2086_DISPLAY_PRIMARY_RY_EXT 0x3342 #define EGL_SMPTE2086_DISPLAY_PRIMARY_GX_EXT 0x3343 #define EGL_SMPTE2086_DISPLAY_PRIMARY_GY_EXT 0x3344 #define EGL_SMPTE2086_DISPLAY_PRIMARY_BX_EXT 0x3345 #define EGL_SMPTE2086_DISPLAY_PRIMARY_BY_EXT 0x3346 #define EGL_SMPTE2086_WHITE_POINT_X_EXT 0x3347 #define EGL_SMPTE2086_WHITE_POINT_Y_EXT 0x3348 #define EGL_SMPTE2086_MAX_LUMINANCE_EXT 0x3349 #define EGL_SMPTE2086_MIN_LUMINANCE_EXT 0x334A #define EGL_METADATA_SCALING_EXT 50000 #endif /* EGL_EXT_surface_SMPTE2086_metadata */ #ifndef EGL_EXT_surface_compression #define EGL_EXT_surface_compression 1 #define EGL_SURFACE_COMPRESSION_EXT 0x34B0 #define EGL_SURFACE_COMPRESSION_PLANE1_EXT 0x328E #define EGL_SURFACE_COMPRESSION_PLANE2_EXT 0x328F #define EGL_SURFACE_COMPRESSION_FIXED_RATE_NONE_EXT 0x34B1 #define EGL_SURFACE_COMPRESSION_FIXED_RATE_DEFAULT_EXT 0x34B2 #define EGL_SURFACE_COMPRESSION_FIXED_RATE_1BPC_EXT 0x34B4 #define EGL_SURFACE_COMPRESSION_FIXED_RATE_2BPC_EXT 0x34B5 #define EGL_SURFACE_COMPRESSION_FIXED_RATE_3BPC_EXT 0x34B6 #define EGL_SURFACE_COMPRESSION_FIXED_RATE_4BPC_EXT 0x34B7 #define EGL_SURFACE_COMPRESSION_FIXED_RATE_5BPC_EXT 0x34B8 #define EGL_SURFACE_COMPRESSION_FIXED_RATE_6BPC_EXT 0x34B9 #define EGL_SURFACE_COMPRESSION_FIXED_RATE_7BPC_EXT 0x34BA #define EGL_SURFACE_COMPRESSION_FIXED_RATE_8BPC_EXT 0x34BB #define EGL_SURFACE_COMPRESSION_FIXED_RATE_9BPC_EXT 0x34BC #define EGL_SURFACE_COMPRESSION_FIXED_RATE_10BPC_EXT 0x34BD #define EGL_SURFACE_COMPRESSION_FIXED_RATE_11BPC_EXT 0x34BE #define EGL_SURFACE_COMPRESSION_FIXED_RATE_12BPC_EXT 0x34BF typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSUPPORTEDCOMPRESSIONRATESEXTPROC) (EGLDisplay dpy, EGLConfig config, const EGLAttrib *attrib_list, EGLint *rates, EGLint rate_size, EGLint *num_rates); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglQuerySupportedCompressionRatesEXT (EGLDisplay dpy, EGLConfig config, const EGLAttrib *attrib_list, EGLint *rates, EGLint rate_size, EGLint *num_rates); #endif #endif /* EGL_EXT_surface_compression */ #ifndef EGL_EXT_swap_buffers_with_damage #define EGL_EXT_swap_buffers_with_damage 1 typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC) (EGLDisplay dpy, EGLSurface surface, const EGLint *rects, EGLint n_rects); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageEXT (EGLDisplay dpy, EGLSurface surface, const EGLint *rects, EGLint n_rects); #endif #endif /* EGL_EXT_swap_buffers_with_damage */ #ifndef EGL_EXT_sync_reuse #define EGL_EXT_sync_reuse 1 typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNSIGNALSYNCEXTPROC) (EGLDisplay dpy, EGLSync sync, const EGLAttrib *attrib_list); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglUnsignalSyncEXT (EGLDisplay dpy, EGLSync sync, const EGLAttrib *attrib_list); #endif #endif /* EGL_EXT_sync_reuse */ #ifndef EGL_EXT_yuv_surface #define EGL_EXT_yuv_surface 1 #define EGL_YUV_ORDER_EXT 0x3301 #define EGL_YUV_NUMBER_OF_PLANES_EXT 0x3311 #define EGL_YUV_SUBSAMPLE_EXT 0x3312 #define EGL_YUV_DEPTH_RANGE_EXT 0x3317 #define EGL_YUV_CSC_STANDARD_EXT 0x330A #define EGL_YUV_PLANE_BPP_EXT 0x331A #define EGL_YUV_BUFFER_EXT 0x3300 #define EGL_YUV_ORDER_YUV_EXT 0x3302 #define EGL_YUV_ORDER_YVU_EXT 0x3303 #define EGL_YUV_ORDER_YUYV_EXT 0x3304 #define EGL_YUV_ORDER_UYVY_EXT 0x3305 #define EGL_YUV_ORDER_YVYU_EXT 0x3306 #define EGL_YUV_ORDER_VYUY_EXT 0x3307 #define EGL_YUV_ORDER_AYUV_EXT 0x3308 #define EGL_YUV_SUBSAMPLE_4_2_0_EXT 0x3313 #define EGL_YUV_SUBSAMPLE_4_2_2_EXT 0x3314 #define EGL_YUV_SUBSAMPLE_4_4_4_EXT 0x3315 #define EGL_YUV_DEPTH_RANGE_LIMITED_EXT 0x3318 #define EGL_YUV_DEPTH_RANGE_FULL_EXT 0x3319 #define EGL_YUV_CSC_STANDARD_601_EXT 0x330B #define EGL_YUV_CSC_STANDARD_709_EXT 0x330C #define EGL_YUV_CSC_STANDARD_2020_EXT 0x330D #define EGL_YUV_PLANE_BPP_0_EXT 0x331B #define EGL_YUV_PLANE_BPP_8_EXT 0x331C #define EGL_YUV_PLANE_BPP_10_EXT 0x331D #endif /* EGL_EXT_yuv_surface */ #ifndef EGL_HI_clientpixmap #define EGL_HI_clientpixmap 1 struct EGLClientPixmapHI { void *pData; EGLint iWidth; EGLint iHeight; EGLint iStride; }; #define EGL_CLIENT_PIXMAP_POINTER_HI 0x8F74 typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPIXMAPSURFACEHIPROC) (EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI *pixmap); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurfaceHI (EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI *pixmap); #endif #endif /* EGL_HI_clientpixmap */ #ifndef EGL_HI_colorformats #define EGL_HI_colorformats 1 #define EGL_COLOR_FORMAT_HI 0x8F70 #define EGL_COLOR_RGB_HI 0x8F71 #define EGL_COLOR_RGBA_HI 0x8F72 #define EGL_COLOR_ARGB_HI 0x8F73 #endif /* EGL_HI_colorformats */ #ifndef EGL_IMG_context_priority #define EGL_IMG_context_priority 1 #define EGL_CONTEXT_PRIORITY_LEVEL_IMG 0x3100 #define EGL_CONTEXT_PRIORITY_HIGH_IMG 0x3101 #define EGL_CONTEXT_PRIORITY_MEDIUM_IMG 0x3102 #define EGL_CONTEXT_PRIORITY_LOW_IMG 0x3103 #endif /* EGL_IMG_context_priority */ #ifndef EGL_IMG_image_plane_attribs #define EGL_IMG_image_plane_attribs 1 #define EGL_NATIVE_BUFFER_MULTIPLANE_SEPARATE_IMG 0x3105 #define EGL_NATIVE_BUFFER_PLANE_OFFSET_IMG 0x3106 #endif /* EGL_IMG_image_plane_attribs */ #ifndef EGL_MESA_drm_image #define EGL_MESA_drm_image 1 #define EGL_DRM_BUFFER_FORMAT_MESA 0x31D0 #define EGL_DRM_BUFFER_USE_MESA 0x31D1 #define EGL_DRM_BUFFER_FORMAT_ARGB32_MESA 0x31D2 #define EGL_DRM_BUFFER_MESA 0x31D3 #define EGL_DRM_BUFFER_STRIDE_MESA 0x31D4 #define EGL_DRM_BUFFER_USE_SCANOUT_MESA 0x00000001 #define EGL_DRM_BUFFER_USE_SHARE_MESA 0x00000002 #define EGL_DRM_BUFFER_USE_CURSOR_MESA 0x00000004 typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEDRMIMAGEMESAPROC) (EGLDisplay dpy, const EGLint *attrib_list); typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDRMIMAGEMESAPROC) (EGLDisplay dpy, EGLImageKHR image, EGLint *name, EGLint *handle, EGLint *stride); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLImageKHR EGLAPIENTRY eglCreateDRMImageMESA (EGLDisplay dpy, const EGLint *attrib_list); EGLAPI EGLBoolean EGLAPIENTRY eglExportDRMImageMESA (EGLDisplay dpy, EGLImageKHR image, EGLint *name, EGLint *handle, EGLint *stride); #endif #endif /* EGL_MESA_drm_image */ #ifndef EGL_MESA_image_dma_buf_export #define EGL_MESA_image_dma_buf_export 1 typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC) (EGLDisplay dpy, EGLImageKHR image, int *fourcc, int *num_planes, EGLuint64KHR *modifiers); typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDMABUFIMAGEMESAPROC) (EGLDisplay dpy, EGLImageKHR image, int *fds, EGLint *strides, EGLint *offsets); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglExportDMABUFImageQueryMESA (EGLDisplay dpy, EGLImageKHR image, int *fourcc, int *num_planes, EGLuint64KHR *modifiers); EGLAPI EGLBoolean EGLAPIENTRY eglExportDMABUFImageMESA (EGLDisplay dpy, EGLImageKHR image, int *fds, EGLint *strides, EGLint *offsets); #endif #endif /* EGL_MESA_image_dma_buf_export */ #ifndef EGL_MESA_platform_gbm #define EGL_MESA_platform_gbm 1 #define EGL_PLATFORM_GBM_MESA 0x31D7 #endif /* EGL_MESA_platform_gbm */ #ifndef EGL_MESA_platform_surfaceless #define EGL_MESA_platform_surfaceless 1 #define EGL_PLATFORM_SURFACELESS_MESA 0x31DD #endif /* EGL_MESA_platform_surfaceless */ #ifndef EGL_MESA_query_driver #define EGL_MESA_query_driver 1 typedef char *(EGLAPIENTRYP PFNEGLGETDISPLAYDRIVERCONFIGPROC) (EGLDisplay dpy); typedef const char *(EGLAPIENTRYP PFNEGLGETDISPLAYDRIVERNAMEPROC) (EGLDisplay dpy); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI char *EGLAPIENTRY eglGetDisplayDriverConfig (EGLDisplay dpy); EGLAPI const char *EGLAPIENTRY eglGetDisplayDriverName (EGLDisplay dpy); #endif #endif /* EGL_MESA_query_driver */ #ifndef EGL_NOK_swap_region #define EGL_NOK_swap_region 1 typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSREGIONNOKPROC) (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersRegionNOK (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects); #endif #endif /* EGL_NOK_swap_region */ #ifndef EGL_NOK_swap_region2 #define EGL_NOK_swap_region2 1 typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSREGION2NOKPROC) (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersRegion2NOK (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects); #endif #endif /* EGL_NOK_swap_region2 */ #ifndef EGL_NOK_texture_from_pixmap #define EGL_NOK_texture_from_pixmap 1 #define EGL_Y_INVERTED_NOK 0x307F #endif /* EGL_NOK_texture_from_pixmap */ #ifndef EGL_NV_3dvision_surface #define EGL_NV_3dvision_surface 1 #define EGL_AUTO_STEREO_NV 0x3136 #endif /* EGL_NV_3dvision_surface */ #ifndef EGL_NV_context_priority_realtime #define EGL_NV_context_priority_realtime 1 #define EGL_CONTEXT_PRIORITY_REALTIME_NV 0x3357 #endif /* EGL_NV_context_priority_realtime */ #ifndef EGL_NV_coverage_sample #define EGL_NV_coverage_sample 1 #define EGL_COVERAGE_BUFFERS_NV 0x30E0 #define EGL_COVERAGE_SAMPLES_NV 0x30E1 #endif /* EGL_NV_coverage_sample */ #ifndef EGL_NV_coverage_sample_resolve #define EGL_NV_coverage_sample_resolve 1 #define EGL_COVERAGE_SAMPLE_RESOLVE_NV 0x3131 #define EGL_COVERAGE_SAMPLE_RESOLVE_DEFAULT_NV 0x3132 #define EGL_COVERAGE_SAMPLE_RESOLVE_NONE_NV 0x3133 #endif /* EGL_NV_coverage_sample_resolve */ #ifndef EGL_NV_cuda_event #define EGL_NV_cuda_event 1 #define EGL_CUDA_EVENT_HANDLE_NV 0x323B #define EGL_SYNC_CUDA_EVENT_NV 0x323C #define EGL_SYNC_CUDA_EVENT_COMPLETE_NV 0x323D #endif /* EGL_NV_cuda_event */ #ifndef EGL_NV_depth_nonlinear #define EGL_NV_depth_nonlinear 1 #define EGL_DEPTH_ENCODING_NV 0x30E2 #define EGL_DEPTH_ENCODING_NONE_NV 0 #define EGL_DEPTH_ENCODING_NONLINEAR_NV 0x30E3 #endif /* EGL_NV_depth_nonlinear */ #ifndef EGL_NV_device_cuda #define EGL_NV_device_cuda 1 #define EGL_CUDA_DEVICE_NV 0x323A #endif /* EGL_NV_device_cuda */ #ifndef EGL_NV_native_query #define EGL_NV_native_query 1 typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEDISPLAYNVPROC) (EGLDisplay dpy, EGLNativeDisplayType *display_id); typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEWINDOWNVPROC) (EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType *window); typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEPIXMAPNVPROC) (EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType *pixmap); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativeDisplayNV (EGLDisplay dpy, EGLNativeDisplayType *display_id); EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativeWindowNV (EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType *window); EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativePixmapNV (EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType *pixmap); #endif #endif /* EGL_NV_native_query */ #ifndef EGL_NV_post_convert_rounding #define EGL_NV_post_convert_rounding 1 #endif /* EGL_NV_post_convert_rounding */ #ifndef EGL_NV_post_sub_buffer #define EGL_NV_post_sub_buffer 1 #define EGL_POST_SUB_BUFFER_SUPPORTED_NV 0x30BE typedef EGLBoolean (EGLAPIENTRYP PFNEGLPOSTSUBBUFFERNVPROC) (EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglPostSubBufferNV (EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height); #endif #endif /* EGL_NV_post_sub_buffer */ #ifndef EGL_NV_quadruple_buffer #define EGL_NV_quadruple_buffer 1 #define EGL_QUADRUPLE_BUFFER_NV 0x3231 #endif /* EGL_NV_quadruple_buffer */ #ifndef EGL_NV_robustness_video_memory_purge #define EGL_NV_robustness_video_memory_purge 1 #define EGL_GENERATE_RESET_ON_VIDEO_MEMORY_PURGE_NV 0x334C #endif /* EGL_NV_robustness_video_memory_purge */ #ifndef EGL_NV_stream_consumer_eglimage #define EGL_NV_stream_consumer_eglimage 1 #define EGL_STREAM_CONSUMER_IMAGE_NV 0x3373 #define EGL_STREAM_IMAGE_ADD_NV 0x3374 #define EGL_STREAM_IMAGE_REMOVE_NV 0x3375 #define EGL_STREAM_IMAGE_AVAILABLE_NV 0x3376 typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMIMAGECONSUMERCONNECTNVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLint num_modifiers, const EGLuint64KHR *modifiers, const EGLAttrib *attrib_list); typedef EGLint (EGLAPIENTRYP PFNEGLQUERYSTREAMCONSUMEREVENTNVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLTime timeout, EGLenum *event, EGLAttrib *aux); typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMACQUIREIMAGENVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLImage *pImage, EGLSync sync); typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMRELEASEIMAGENVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLImage image, EGLSync sync); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglStreamImageConsumerConnectNV (EGLDisplay dpy, EGLStreamKHR stream, EGLint num_modifiers, const EGLuint64KHR *modifiers, const EGLAttrib *attrib_list); EGLAPI EGLint EGLAPIENTRY eglQueryStreamConsumerEventNV (EGLDisplay dpy, EGLStreamKHR stream, EGLTime timeout, EGLenum *event, EGLAttrib *aux); EGLAPI EGLBoolean EGLAPIENTRY eglStreamAcquireImageNV (EGLDisplay dpy, EGLStreamKHR stream, EGLImage *pImage, EGLSync sync); EGLAPI EGLBoolean EGLAPIENTRY eglStreamReleaseImageNV (EGLDisplay dpy, EGLStreamKHR stream, EGLImage image, EGLSync sync); #endif #endif /* EGL_NV_stream_consumer_eglimage */ #ifndef EGL_NV_stream_consumer_gltexture_yuv #define EGL_NV_stream_consumer_gltexture_yuv 1 #define EGL_YUV_PLANE0_TEXTURE_UNIT_NV 0x332C #define EGL_YUV_PLANE1_TEXTURE_UNIT_NV 0x332D #define EGL_YUV_PLANE2_TEXTURE_UNIT_NV 0x332E typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALATTRIBSNVPROC) (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerGLTextureExternalAttribsNV (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list); #endif #endif /* EGL_NV_stream_consumer_gltexture_yuv */ #ifndef EGL_NV_stream_cross_display #define EGL_NV_stream_cross_display 1 #define EGL_STREAM_CROSS_DISPLAY_NV 0x334E #endif /* EGL_NV_stream_cross_display */ #ifndef EGL_NV_stream_cross_object #define EGL_NV_stream_cross_object 1 #define EGL_STREAM_CROSS_OBJECT_NV 0x334D #endif /* EGL_NV_stream_cross_object */ #ifndef EGL_NV_stream_cross_partition #define EGL_NV_stream_cross_partition 1 #define EGL_STREAM_CROSS_PARTITION_NV 0x323F #endif /* EGL_NV_stream_cross_partition */ #ifndef EGL_NV_stream_cross_process #define EGL_NV_stream_cross_process 1 #define EGL_STREAM_CROSS_PROCESS_NV 0x3245 #endif /* EGL_NV_stream_cross_process */ #ifndef EGL_NV_stream_cross_system #define EGL_NV_stream_cross_system 1 #define EGL_STREAM_CROSS_SYSTEM_NV 0x334F #endif /* EGL_NV_stream_cross_system */ #ifndef EGL_NV_stream_dma #define EGL_NV_stream_dma 1 #define EGL_STREAM_DMA_NV 0x3371 #define EGL_STREAM_DMA_SERVER_NV 0x3372 #endif /* EGL_NV_stream_dma */ #ifndef EGL_NV_stream_fifo_next #define EGL_NV_stream_fifo_next 1 #define EGL_PENDING_FRAME_NV 0x3329 #define EGL_STREAM_TIME_PENDING_NV 0x332A #endif /* EGL_NV_stream_fifo_next */ #ifndef EGL_NV_stream_fifo_synchronous #define EGL_NV_stream_fifo_synchronous 1 #define EGL_STREAM_FIFO_SYNCHRONOUS_NV 0x3336 #endif /* EGL_NV_stream_fifo_synchronous */ #ifndef EGL_NV_stream_flush #define EGL_NV_stream_flush 1 typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMFLUSHNVPROC) (EGLDisplay dpy, EGLStreamKHR stream); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglStreamFlushNV (EGLDisplay dpy, EGLStreamKHR stream); #endif #endif /* EGL_NV_stream_flush */ #ifndef EGL_NV_stream_frame_limits #define EGL_NV_stream_frame_limits 1 #define EGL_PRODUCER_MAX_FRAME_HINT_NV 0x3337 #define EGL_CONSUMER_MAX_FRAME_HINT_NV 0x3338 #endif /* EGL_NV_stream_frame_limits */ #ifndef EGL_NV_stream_metadata #define EGL_NV_stream_metadata 1 #define EGL_MAX_STREAM_METADATA_BLOCKS_NV 0x3250 #define EGL_MAX_STREAM_METADATA_BLOCK_SIZE_NV 0x3251 #define EGL_MAX_STREAM_METADATA_TOTAL_SIZE_NV 0x3252 #define EGL_PRODUCER_METADATA_NV 0x3253 #define EGL_CONSUMER_METADATA_NV 0x3254 #define EGL_PENDING_METADATA_NV 0x3328 #define EGL_METADATA0_SIZE_NV 0x3255 #define EGL_METADATA1_SIZE_NV 0x3256 #define EGL_METADATA2_SIZE_NV 0x3257 #define EGL_METADATA3_SIZE_NV 0x3258 #define EGL_METADATA0_TYPE_NV 0x3259 #define EGL_METADATA1_TYPE_NV 0x325A #define EGL_METADATA2_TYPE_NV 0x325B #define EGL_METADATA3_TYPE_NV 0x325C typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDISPLAYATTRIBNVPROC) (EGLDisplay dpy, EGLint attribute, EGLAttrib *value); typedef EGLBoolean (EGLAPIENTRYP PFNEGLSETSTREAMMETADATANVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLint n, EGLint offset, EGLint size, const void *data); typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMMETADATANVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum name, EGLint n, EGLint offset, EGLint size, void *data); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglQueryDisplayAttribNV (EGLDisplay dpy, EGLint attribute, EGLAttrib *value); EGLAPI EGLBoolean EGLAPIENTRY eglSetStreamMetadataNV (EGLDisplay dpy, EGLStreamKHR stream, EGLint n, EGLint offset, EGLint size, const void *data); EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamMetadataNV (EGLDisplay dpy, EGLStreamKHR stream, EGLenum name, EGLint n, EGLint offset, EGLint size, void *data); #endif #endif /* EGL_NV_stream_metadata */ #ifndef EGL_NV_stream_origin #define EGL_NV_stream_origin 1 #define EGL_STREAM_FRAME_ORIGIN_X_NV 0x3366 #define EGL_STREAM_FRAME_ORIGIN_Y_NV 0x3367 #define EGL_STREAM_FRAME_MAJOR_AXIS_NV 0x3368 #define EGL_CONSUMER_AUTO_ORIENTATION_NV 0x3369 #define EGL_PRODUCER_AUTO_ORIENTATION_NV 0x336A #define EGL_LEFT_NV 0x336B #define EGL_RIGHT_NV 0x336C #define EGL_TOP_NV 0x336D #define EGL_BOTTOM_NV 0x336E #define EGL_X_AXIS_NV 0x336F #define EGL_Y_AXIS_NV 0x3370 #endif /* EGL_NV_stream_origin */ #ifndef EGL_NV_stream_remote #define EGL_NV_stream_remote 1 #define EGL_STREAM_STATE_INITIALIZING_NV 0x3240 #define EGL_STREAM_TYPE_NV 0x3241 #define EGL_STREAM_PROTOCOL_NV 0x3242 #define EGL_STREAM_ENDPOINT_NV 0x3243 #define EGL_STREAM_LOCAL_NV 0x3244 #define EGL_STREAM_PRODUCER_NV 0x3247 #define EGL_STREAM_CONSUMER_NV 0x3248 #define EGL_STREAM_PROTOCOL_FD_NV 0x3246 #endif /* EGL_NV_stream_remote */ #ifndef EGL_NV_stream_reset #define EGL_NV_stream_reset 1 #define EGL_SUPPORT_RESET_NV 0x3334 #define EGL_SUPPORT_REUSE_NV 0x3335 typedef EGLBoolean (EGLAPIENTRYP PFNEGLRESETSTREAMNVPROC) (EGLDisplay dpy, EGLStreamKHR stream); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglResetStreamNV (EGLDisplay dpy, EGLStreamKHR stream); #endif #endif /* EGL_NV_stream_reset */ #ifndef EGL_NV_stream_socket #define EGL_NV_stream_socket 1 #define EGL_STREAM_PROTOCOL_SOCKET_NV 0x324B #define EGL_SOCKET_HANDLE_NV 0x324C #define EGL_SOCKET_TYPE_NV 0x324D #endif /* EGL_NV_stream_socket */ #ifndef EGL_NV_stream_socket_inet #define EGL_NV_stream_socket_inet 1 #define EGL_SOCKET_TYPE_INET_NV 0x324F #endif /* EGL_NV_stream_socket_inet */ #ifndef EGL_NV_stream_socket_unix #define EGL_NV_stream_socket_unix 1 #define EGL_SOCKET_TYPE_UNIX_NV 0x324E #endif /* EGL_NV_stream_socket_unix */ #ifndef EGL_NV_stream_sync #define EGL_NV_stream_sync 1 #define EGL_SYNC_NEW_FRAME_NV 0x321F typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESTREAMSYNCNVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum type, const EGLint *attrib_list); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateStreamSyncNV (EGLDisplay dpy, EGLStreamKHR stream, EGLenum type, const EGLint *attrib_list); #endif #endif /* EGL_NV_stream_sync */ #ifndef EGL_NV_sync #define EGL_NV_sync 1 typedef void *EGLSyncNV; typedef khronos_utime_nanoseconds_t EGLTimeNV; #ifdef KHRONOS_SUPPORT_INT64 #define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_NV 0x30E6 #define EGL_SYNC_STATUS_NV 0x30E7 #define EGL_SIGNALED_NV 0x30E8 #define EGL_UNSIGNALED_NV 0x30E9 #define EGL_SYNC_FLUSH_COMMANDS_BIT_NV 0x0001 #define EGL_FOREVER_NV 0xFFFFFFFFFFFFFFFFull #define EGL_ALREADY_SIGNALED_NV 0x30EA #define EGL_TIMEOUT_EXPIRED_NV 0x30EB #define EGL_CONDITION_SATISFIED_NV 0x30EC #define EGL_SYNC_TYPE_NV 0x30ED #define EGL_SYNC_CONDITION_NV 0x30EE #define EGL_SYNC_FENCE_NV 0x30EF #define EGL_NO_SYNC_NV EGL_CAST(EGLSyncNV,0) typedef EGLSyncNV (EGLAPIENTRYP PFNEGLCREATEFENCESYNCNVPROC) (EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list); typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCNVPROC) (EGLSyncNV sync); typedef EGLBoolean (EGLAPIENTRYP PFNEGLFENCENVPROC) (EGLSyncNV sync); typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCNVPROC) (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout); typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCNVPROC) (EGLSyncNV sync, EGLenum mode); typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBNVPROC) (EGLSyncNV sync, EGLint attribute, EGLint *value); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLSyncNV EGLAPIENTRY eglCreateFenceSyncNV (EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list); EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncNV (EGLSyncNV sync); EGLAPI EGLBoolean EGLAPIENTRY eglFenceNV (EGLSyncNV sync); EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncNV (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout); EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncNV (EGLSyncNV sync, EGLenum mode); EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribNV (EGLSyncNV sync, EGLint attribute, EGLint *value); #endif #endif /* KHRONOS_SUPPORT_INT64 */ #endif /* EGL_NV_sync */ #ifndef EGL_NV_system_time #define EGL_NV_system_time 1 typedef khronos_utime_nanoseconds_t EGLuint64NV; #ifdef KHRONOS_SUPPORT_INT64 typedef EGLuint64NV (EGLAPIENTRYP PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC) (void); typedef EGLuint64NV (EGLAPIENTRYP PFNEGLGETSYSTEMTIMENVPROC) (void); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeFrequencyNV (void); EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeNV (void); #endif #endif /* KHRONOS_SUPPORT_INT64 */ #endif /* EGL_NV_system_time */ #ifndef EGL_NV_triple_buffer #define EGL_NV_triple_buffer 1 #define EGL_TRIPLE_BUFFER_NV 0x3230 #endif /* EGL_NV_triple_buffer */ #ifndef EGL_TIZEN_image_native_buffer #define EGL_TIZEN_image_native_buffer 1 #define EGL_NATIVE_BUFFER_TIZEN 0x32A0 #endif /* EGL_TIZEN_image_native_buffer */ #ifndef EGL_TIZEN_image_native_surface #define EGL_TIZEN_image_native_surface 1 #define EGL_NATIVE_SURFACE_TIZEN 0x32A1 #endif /* EGL_TIZEN_image_native_surface */ #ifndef EGL_WL_bind_wayland_display #define EGL_WL_bind_wayland_display 1 #define PFNEGLBINDWAYLANDDISPLAYWL PFNEGLBINDWAYLANDDISPLAYWLPROC #define PFNEGLUNBINDWAYLANDDISPLAYWL PFNEGLUNBINDWAYLANDDISPLAYWLPROC #define PFNEGLQUERYWAYLANDBUFFERWL PFNEGLQUERYWAYLANDBUFFERWLPROC struct wl_display; struct wl_resource; #define EGL_WAYLAND_BUFFER_WL 0x31D5 #define EGL_WAYLAND_PLANE_WL 0x31D6 #define EGL_TEXTURE_Y_U_V_WL 0x31D7 #define EGL_TEXTURE_Y_UV_WL 0x31D8 #define EGL_TEXTURE_Y_XUXV_WL 0x31D9 #define EGL_TEXTURE_EXTERNAL_WL 0x31DA #define EGL_WAYLAND_Y_INVERTED_WL 0x31DB typedef EGLBoolean (EGLAPIENTRYP PFNEGLBINDWAYLANDDISPLAYWLPROC) (EGLDisplay dpy, struct wl_display *display); typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNBINDWAYLANDDISPLAYWLPROC) (EGLDisplay dpy, struct wl_display *display); typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYWAYLANDBUFFERWLPROC) (EGLDisplay dpy, struct wl_resource *buffer, EGLint attribute, EGLint *value); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI EGLBoolean EGLAPIENTRY eglBindWaylandDisplayWL (EGLDisplay dpy, struct wl_display *display); EGLAPI EGLBoolean EGLAPIENTRY eglUnbindWaylandDisplayWL (EGLDisplay dpy, struct wl_display *display); EGLAPI EGLBoolean EGLAPIENTRY eglQueryWaylandBufferWL (EGLDisplay dpy, struct wl_resource *buffer, EGLint attribute, EGLint *value); #endif #endif /* EGL_WL_bind_wayland_display */ #ifndef EGL_WL_create_wayland_buffer_from_image #define EGL_WL_create_wayland_buffer_from_image 1 #define PFNEGLCREATEWAYLANDBUFFERFROMIMAGEWL PFNEGLCREATEWAYLANDBUFFERFROMIMAGEWLPROC struct wl_buffer; typedef struct wl_buffer *(EGLAPIENTRYP PFNEGLCREATEWAYLANDBUFFERFROMIMAGEWLPROC) (EGLDisplay dpy, EGLImageKHR image); #ifdef EGL_EGLEXT_PROTOTYPES EGLAPI struct wl_buffer *EGLAPIENTRY eglCreateWaylandBufferFromImageWL (EGLDisplay dpy, EGLImageKHR image); #endif #endif /* EGL_WL_create_wayland_buffer_from_image */ #ifdef __cplusplus } #endif #endif /* __eglext_h_ */ #endif /* _MSC_VER */ ================================================ FILE: libraries/sdl2/SDL_endian.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_endian.h * * Functions for reading and writing endian-specific values */ #ifndef SDL_endian_h_ #define SDL_endian_h_ #include "SDL_stdinc.h" #if defined(_MSC_VER) && (_MSC_VER >= 1400) /* As of Clang 11, '_m_prefetchw' is conflicting with the winnt.h's version, so we define the needed '_m_prefetch' here as a pseudo-header, until the issue is fixed. */ #ifdef __clang__ #ifndef __PRFCHWINTRIN_H #define __PRFCHWINTRIN_H static __inline__ void __attribute__((__always_inline__, __nodebug__)) _m_prefetch(void *__P) { __builtin_prefetch(__P, 0, 3 /* _MM_HINT_T0 */); } #endif /* __PRFCHWINTRIN_H */ #endif /* __clang__ */ #include #endif /** * \name The two types of endianness */ /* @{ */ #define SDL_LIL_ENDIAN 1234 #define SDL_BIG_ENDIAN 4321 /* @} */ #ifndef SDL_BYTEORDER /* Not defined in SDL_config.h? */ #ifdef __linux__ #include #define SDL_BYTEORDER __BYTE_ORDER #elif defined(__OpenBSD__) || defined(__DragonFly__) #include #define SDL_BYTEORDER BYTE_ORDER #elif defined(__FreeBSD__) || defined(__NetBSD__) #include #define SDL_BYTEORDER BYTE_ORDER /* predefs from newer gcc and clang versions: */ #elif defined(__ORDER_LITTLE_ENDIAN__) && defined(__ORDER_BIG_ENDIAN__) && defined(__BYTE_ORDER__) #if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) #define SDL_BYTEORDER SDL_LIL_ENDIAN #elif (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) #define SDL_BYTEORDER SDL_BIG_ENDIAN #else #error Unsupported endianness #endif /**/ #else #if defined(__hppa__) || \ defined(__m68k__) || defined(mc68000) || defined(_M_M68K) || \ (defined(__MIPS__) && defined(__MIPSEB__)) || \ defined(__ppc__) || defined(__POWERPC__) || defined(__powerpc__) || defined(__PPC__) || \ defined(__sparc__) #define SDL_BYTEORDER SDL_BIG_ENDIAN #else #define SDL_BYTEORDER SDL_LIL_ENDIAN #endif #endif /* __linux__ */ #endif /* !SDL_BYTEORDER */ #ifndef SDL_FLOATWORDORDER /* Not defined in SDL_config.h? */ /* predefs from newer gcc versions: */ #if defined(__ORDER_LITTLE_ENDIAN__) && defined(__ORDER_BIG_ENDIAN__) && defined(__FLOAT_WORD_ORDER__) #if (__FLOAT_WORD_ORDER__ == __ORDER_LITTLE_ENDIAN__) #define SDL_FLOATWORDORDER SDL_LIL_ENDIAN #elif (__FLOAT_WORD_ORDER__ == __ORDER_BIG_ENDIAN__) #define SDL_FLOATWORDORDER SDL_BIG_ENDIAN #else #error Unsupported endianness #endif /**/ #elif defined(__MAVERICK__) /* For Maverick, float words are always little-endian. */ #define SDL_FLOATWORDORDER SDL_LIL_ENDIAN #elif (defined(__arm__) || defined(__thumb__)) && !defined(__VFP_FP__) && !defined(__ARM_EABI__) /* For FPA, float words are always big-endian. */ #define SDL_FLOATWORDORDER SDL_BIG_ENDIAN #else /* By default, assume that floats words follow the memory system mode. */ #define SDL_FLOATWORDORDER SDL_BYTEORDER #endif /* __FLOAT_WORD_ORDER__ */ #endif /* !SDL_FLOATWORDORDER */ #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** * \file SDL_endian.h */ /* various modern compilers may have builtin swap */ #if defined(__GNUC__) || defined(__clang__) # define HAS_BUILTIN_BSWAP16 (_SDL_HAS_BUILTIN(__builtin_bswap16)) || \ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)) # define HAS_BUILTIN_BSWAP32 (_SDL_HAS_BUILTIN(__builtin_bswap32)) || \ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) # define HAS_BUILTIN_BSWAP64 (_SDL_HAS_BUILTIN(__builtin_bswap64)) || \ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) /* this one is broken */ # define HAS_BROKEN_BSWAP (__GNUC__ == 2 && __GNUC_MINOR__ <= 95) #else # define HAS_BUILTIN_BSWAP16 0 # define HAS_BUILTIN_BSWAP32 0 # define HAS_BUILTIN_BSWAP64 0 # define HAS_BROKEN_BSWAP 0 #endif #if HAS_BUILTIN_BSWAP16 #define SDL_Swap16(x) __builtin_bswap16(x) #elif (defined(_MSC_VER) && (_MSC_VER >= 1400)) && !defined(__ICL) #pragma intrinsic(_byteswap_ushort) #define SDL_Swap16(x) _byteswap_ushort(x) #elif defined(__i386__) && !HAS_BROKEN_BSWAP SDL_FORCE_INLINE Uint16 SDL_Swap16(Uint16 x) { __asm__("xchgb %b0,%h0": "=q"(x):"0"(x)); return x; } #elif defined(__x86_64__) SDL_FORCE_INLINE Uint16 SDL_Swap16(Uint16 x) { __asm__("xchgb %b0,%h0": "=Q"(x):"0"(x)); return x; } #elif (defined(__powerpc__) || defined(__ppc__)) SDL_FORCE_INLINE Uint16 SDL_Swap16(Uint16 x) { int result; __asm__("rlwimi %0,%2,8,16,23": "=&r"(result):"0"(x >> 8), "r"(x)); return (Uint16)result; } #elif (defined(__m68k__) && !defined(__mcoldfire__)) SDL_FORCE_INLINE Uint16 SDL_Swap16(Uint16 x) { __asm__("rorw #8,%0": "=d"(x): "0"(x):"cc"); return x; } #elif defined(__WATCOMC__) && defined(__386__) extern __inline Uint16 SDL_Swap16(Uint16); #pragma aux SDL_Swap16 = \ "xchg al, ah" \ parm [ax] \ modify [ax]; #else SDL_FORCE_INLINE Uint16 SDL_Swap16(Uint16 x) { return SDL_static_cast(Uint16, ((x << 8) | (x >> 8))); } #endif #if HAS_BUILTIN_BSWAP32 #define SDL_Swap32(x) __builtin_bswap32(x) #elif (defined(_MSC_VER) && (_MSC_VER >= 1400)) && !defined(__ICL) #pragma intrinsic(_byteswap_ulong) #define SDL_Swap32(x) _byteswap_ulong(x) #elif defined(__i386__) && !HAS_BROKEN_BSWAP SDL_FORCE_INLINE Uint32 SDL_Swap32(Uint32 x) { __asm__("bswap %0": "=r"(x):"0"(x)); return x; } #elif defined(__x86_64__) SDL_FORCE_INLINE Uint32 SDL_Swap32(Uint32 x) { __asm__("bswapl %0": "=r"(x):"0"(x)); return x; } #elif (defined(__powerpc__) || defined(__ppc__)) SDL_FORCE_INLINE Uint32 SDL_Swap32(Uint32 x) { Uint32 result; __asm__("rlwimi %0,%2,24,16,23": "=&r"(result): "0" (x>>24), "r"(x)); __asm__("rlwimi %0,%2,8,8,15" : "=&r"(result): "0" (result), "r"(x)); __asm__("rlwimi %0,%2,24,0,7" : "=&r"(result): "0" (result), "r"(x)); return result; } #elif (defined(__m68k__) && !defined(__mcoldfire__)) SDL_FORCE_INLINE Uint32 SDL_Swap32(Uint32 x) { __asm__("rorw #8,%0\n\tswap %0\n\trorw #8,%0": "=d"(x): "0"(x):"cc"); return x; } #elif defined(__WATCOMC__) && defined(__386__) extern __inline Uint32 SDL_Swap32(Uint32); #pragma aux SDL_Swap32 = \ "bswap eax" \ parm [eax] \ modify [eax]; #else SDL_FORCE_INLINE Uint32 SDL_Swap32(Uint32 x) { return SDL_static_cast(Uint32, ((x << 24) | ((x << 8) & 0x00FF0000) | ((x >> 8) & 0x0000FF00) | (x >> 24))); } #endif #if HAS_BUILTIN_BSWAP64 #define SDL_Swap64(x) __builtin_bswap64(x) #elif (defined(_MSC_VER) && (_MSC_VER >= 1400)) && !defined(__ICL) #pragma intrinsic(_byteswap_uint64) #define SDL_Swap64(x) _byteswap_uint64(x) #elif defined(__i386__) && !HAS_BROKEN_BSWAP SDL_FORCE_INLINE Uint64 SDL_Swap64(Uint64 x) { union { struct { Uint32 a, b; } s; Uint64 u; } v; v.u = x; __asm__("bswapl %0 ; bswapl %1 ; xchgl %0,%1" : "=r"(v.s.a), "=r"(v.s.b) : "0" (v.s.a), "1"(v.s.b)); return v.u; } #elif defined(__x86_64__) SDL_FORCE_INLINE Uint64 SDL_Swap64(Uint64 x) { __asm__("bswapq %0": "=r"(x):"0"(x)); return x; } #elif defined(__WATCOMC__) && defined(__386__) extern __inline Uint64 SDL_Swap64(Uint64); #pragma aux SDL_Swap64 = \ "bswap eax" \ "bswap edx" \ "xchg eax,edx" \ parm [eax edx] \ modify [eax edx]; #else SDL_FORCE_INLINE Uint64 SDL_Swap64(Uint64 x) { Uint32 hi, lo; /* Separate into high and low 32-bit values and swap them */ lo = SDL_static_cast(Uint32, x & 0xFFFFFFFF); x >>= 32; hi = SDL_static_cast(Uint32, x & 0xFFFFFFFF); x = SDL_Swap32(lo); x <<= 32; x |= SDL_Swap32(hi); return (x); } #endif SDL_FORCE_INLINE float SDL_SwapFloat(float x) { union { float f; Uint32 ui32; } swapper; swapper.f = x; swapper.ui32 = SDL_Swap32(swapper.ui32); return swapper.f; } /* remove extra macros */ #undef HAS_BROKEN_BSWAP #undef HAS_BUILTIN_BSWAP16 #undef HAS_BUILTIN_BSWAP32 #undef HAS_BUILTIN_BSWAP64 /** * \name Swap to native * Byteswap item from the specified endianness to the native endianness. */ /* @{ */ #if SDL_BYTEORDER == SDL_LIL_ENDIAN #define SDL_SwapLE16(X) (X) #define SDL_SwapLE32(X) (X) #define SDL_SwapLE64(X) (X) #define SDL_SwapFloatLE(X) (X) #define SDL_SwapBE16(X) SDL_Swap16(X) #define SDL_SwapBE32(X) SDL_Swap32(X) #define SDL_SwapBE64(X) SDL_Swap64(X) #define SDL_SwapFloatBE(X) SDL_SwapFloat(X) #else #define SDL_SwapLE16(X) SDL_Swap16(X) #define SDL_SwapLE32(X) SDL_Swap32(X) #define SDL_SwapLE64(X) SDL_Swap64(X) #define SDL_SwapFloatLE(X) SDL_SwapFloat(X) #define SDL_SwapBE16(X) (X) #define SDL_SwapBE32(X) (X) #define SDL_SwapBE64(X) (X) #define SDL_SwapFloatBE(X) (X) #endif /* @} *//* Swap to native */ /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_endian_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_error.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_error.h * * Simple error message routines for SDL. */ #ifndef SDL_error_h_ #define SDL_error_h_ #include "SDL_stdinc.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /* Public functions */ /** * Set the SDL error message for the current thread. * * Calling this function will replace any previous error message that was set. * * This function always returns -1, since SDL frequently uses -1 to signify an * failing result, leading to this idiom: * * ```c * if (error_code) { * return SDL_SetError("This operation has failed: %d", error_code); * } * ``` * * \param fmt a printf()-style message format string * \param ... additional parameters matching % tokens in the `fmt` string, if * any * \returns always -1. * * \since This function is available since SDL 2.0.0. * * \sa SDL_ClearError * \sa SDL_GetError */ extern DECLSPEC int SDLCALL SDL_SetError(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); /** * Retrieve a message about the last error that occurred on the current * thread. * * It is possible for multiple errors to occur before calling SDL_GetError(). * Only the last error is returned. * * The message is only applicable when an SDL function has signaled an error. * You must check the return values of SDL function calls to determine when to * appropriately call SDL_GetError(). You should *not* use the results of * SDL_GetError() to decide if an error has occurred! Sometimes SDL will set * an error string even when reporting success. * * SDL will *not* clear the error string for successful API calls. You *must* * check return values for failure cases before you can assume the error * string applies. * * Error strings are set per-thread, so an error set in a different thread * will not interfere with the current thread's operation. * * The returned string is internally allocated and must not be freed by the * application. * * \returns a message with information about the specific error that occurred, * or an empty string if there hasn't been an error message set since * the last call to SDL_ClearError(). The message is only applicable * when an SDL function has signaled an error. You must check the * return values of SDL function calls to determine when to * appropriately call SDL_GetError(). * * \since This function is available since SDL 2.0.0. * * \sa SDL_ClearError * \sa SDL_SetError */ extern DECLSPEC const char *SDLCALL SDL_GetError(void); /** * Get the last error message that was set for the current thread. * * This allows the caller to copy the error string into a provided buffer, but * otherwise operates exactly the same as SDL_GetError(). * * \param errstr A buffer to fill with the last error message that was set for * the current thread * \param maxlen The size of the buffer pointed to by the errstr parameter * \returns the pointer passed in as the `errstr` parameter. * * \since This function is available since SDL 2.0.14. * * \sa SDL_GetError */ extern DECLSPEC char * SDLCALL SDL_GetErrorMsg(char *errstr, int maxlen); /** * Clear any previous error message for this thread. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetError * \sa SDL_SetError */ extern DECLSPEC void SDLCALL SDL_ClearError(void); /** * \name Internal error functions * * \internal * Private error reporting function - used internally. */ /* @{ */ #define SDL_OutOfMemory() SDL_Error(SDL_ENOMEM) #define SDL_Unsupported() SDL_Error(SDL_UNSUPPORTED) #define SDL_InvalidParamError(param) SDL_SetError("Parameter '%s' is invalid", (param)) typedef enum { SDL_ENOMEM, SDL_EFREAD, SDL_EFWRITE, SDL_EFSEEK, SDL_UNSUPPORTED, SDL_LASTERROR } SDL_errorcode; /* SDL_Error() unconditionally returns -1. */ extern DECLSPEC int SDLCALL SDL_Error(SDL_errorcode code); /* @} *//* Internal error functions */ /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_error_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_events.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_events.h * * Include file for SDL event handling. */ #ifndef SDL_events_h_ #define SDL_events_h_ #include "SDL_stdinc.h" #include "SDL_error.h" #include "SDL_video.h" #include "SDL_keyboard.h" #include "SDL_mouse.h" #include "SDL_joystick.h" #include "SDL_gamecontroller.h" #include "SDL_quit.h" #include "SDL_gesture.h" #include "SDL_touch.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /* General keyboard/mouse state definitions */ #define SDL_RELEASED 0 #define SDL_PRESSED 1 /** * The types of events that can be delivered. */ typedef enum { SDL_FIRSTEVENT = 0, /**< Unused (do not remove) */ /* Application events */ SDL_QUIT = 0x100, /**< User-requested quit */ /* These application events have special meaning on iOS, see README-ios.md for details */ SDL_APP_TERMINATING, /**< The application is being terminated by the OS Called on iOS in applicationWillTerminate() Called on Android in onDestroy() */ SDL_APP_LOWMEMORY, /**< The application is low on memory, free memory if possible. Called on iOS in applicationDidReceiveMemoryWarning() Called on Android in onLowMemory() */ SDL_APP_WILLENTERBACKGROUND, /**< The application is about to enter the background Called on iOS in applicationWillResignActive() Called on Android in onPause() */ SDL_APP_DIDENTERBACKGROUND, /**< The application did enter the background and may not get CPU for some time Called on iOS in applicationDidEnterBackground() Called on Android in onPause() */ SDL_APP_WILLENTERFOREGROUND, /**< The application is about to enter the foreground Called on iOS in applicationWillEnterForeground() Called on Android in onResume() */ SDL_APP_DIDENTERFOREGROUND, /**< The application is now interactive Called on iOS in applicationDidBecomeActive() Called on Android in onResume() */ SDL_LOCALECHANGED, /**< The user's locale preferences have changed. */ /* Display events */ SDL_DISPLAYEVENT = 0x150, /**< Display state change */ /* Window events */ SDL_WINDOWEVENT = 0x200, /**< Window state change */ SDL_SYSWMEVENT, /**< System specific event */ /* Keyboard events */ SDL_KEYDOWN = 0x300, /**< Key pressed */ SDL_KEYUP, /**< Key released */ SDL_TEXTEDITING, /**< Keyboard text editing (composition) */ SDL_TEXTINPUT, /**< Keyboard text input */ SDL_KEYMAPCHANGED, /**< Keymap changed due to a system event such as an input language or keyboard layout change. */ SDL_TEXTEDITING_EXT, /**< Extended keyboard text editing (composition) */ /* Mouse events */ SDL_MOUSEMOTION = 0x400, /**< Mouse moved */ SDL_MOUSEBUTTONDOWN, /**< Mouse button pressed */ SDL_MOUSEBUTTONUP, /**< Mouse button released */ SDL_MOUSEWHEEL, /**< Mouse wheel motion */ /* Joystick events */ SDL_JOYAXISMOTION = 0x600, /**< Joystick axis motion */ SDL_JOYBALLMOTION, /**< Joystick trackball motion */ SDL_JOYHATMOTION, /**< Joystick hat position change */ SDL_JOYBUTTONDOWN, /**< Joystick button pressed */ SDL_JOYBUTTONUP, /**< Joystick button released */ SDL_JOYDEVICEADDED, /**< A new joystick has been inserted into the system */ SDL_JOYDEVICEREMOVED, /**< An opened joystick has been removed */ SDL_JOYBATTERYUPDATED, /**< Joystick battery level change */ /* Game controller events */ SDL_CONTROLLERAXISMOTION = 0x650, /**< Game controller axis motion */ SDL_CONTROLLERBUTTONDOWN, /**< Game controller button pressed */ SDL_CONTROLLERBUTTONUP, /**< Game controller button released */ SDL_CONTROLLERDEVICEADDED, /**< A new Game controller has been inserted into the system */ SDL_CONTROLLERDEVICEREMOVED, /**< An opened Game controller has been removed */ SDL_CONTROLLERDEVICEREMAPPED, /**< The controller mapping was updated */ SDL_CONTROLLERTOUCHPADDOWN, /**< Game controller touchpad was touched */ SDL_CONTROLLERTOUCHPADMOTION, /**< Game controller touchpad finger was moved */ SDL_CONTROLLERTOUCHPADUP, /**< Game controller touchpad finger was lifted */ SDL_CONTROLLERSENSORUPDATE, /**< Game controller sensor was updated */ SDL_CONTROLLERUPDATECOMPLETE_RESERVED_FOR_SDL3, SDL_CONTROLLERSTEAMHANDLEUPDATED, /**< Game controller Steam handle has changed */ /* Touch events */ SDL_FINGERDOWN = 0x700, SDL_FINGERUP, SDL_FINGERMOTION, /* Gesture events */ SDL_DOLLARGESTURE = 0x800, SDL_DOLLARRECORD, SDL_MULTIGESTURE, /* Clipboard events */ SDL_CLIPBOARDUPDATE = 0x900, /**< The clipboard or primary selection changed */ /* Drag and drop events */ SDL_DROPFILE = 0x1000, /**< The system requests a file open */ SDL_DROPTEXT, /**< text/plain drag-and-drop event */ SDL_DROPBEGIN, /**< A new set of drops is beginning (NULL filename) */ SDL_DROPCOMPLETE, /**< Current set of drops is now complete (NULL filename) */ /* Audio hotplug events */ SDL_AUDIODEVICEADDED = 0x1100, /**< A new audio device is available */ SDL_AUDIODEVICEREMOVED, /**< An audio device has been removed. */ /* Sensor events */ SDL_SENSORUPDATE = 0x1200, /**< A sensor was updated */ /* Render events */ SDL_RENDER_TARGETS_RESET = 0x2000, /**< The render targets have been reset and their contents need to be updated */ SDL_RENDER_DEVICE_RESET, /**< The device has been reset and all textures need to be recreated */ /* Internal events */ SDL_POLLSENTINEL = 0x7F00, /**< Signals the end of an event poll cycle */ /** Events ::SDL_USEREVENT through ::SDL_LASTEVENT are for your use, * and should be allocated with SDL_RegisterEvents() */ SDL_USEREVENT = 0x8000, /** * This last event is only for bounding internal arrays */ SDL_LASTEVENT = 0xFFFF } SDL_EventType; /** * \brief Fields shared by every event */ typedef struct SDL_CommonEvent { Uint32 type; Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ } SDL_CommonEvent; /** * \brief Display state change event data (event.display.*) */ typedef struct SDL_DisplayEvent { Uint32 type; /**< ::SDL_DISPLAYEVENT */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ Uint32 display; /**< The associated display index */ Uint8 event; /**< ::SDL_DisplayEventID */ Uint8 padding1; Uint8 padding2; Uint8 padding3; Sint32 data1; /**< event dependent data */ } SDL_DisplayEvent; /** * \brief Window state change event data (event.window.*) */ typedef struct SDL_WindowEvent { Uint32 type; /**< ::SDL_WINDOWEVENT */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ Uint32 windowID; /**< The associated window */ Uint8 event; /**< ::SDL_WindowEventID */ Uint8 padding1; Uint8 padding2; Uint8 padding3; Sint32 data1; /**< event dependent data */ Sint32 data2; /**< event dependent data */ } SDL_WindowEvent; /** * \brief Keyboard button event structure (event.key.*) */ typedef struct SDL_KeyboardEvent { Uint32 type; /**< ::SDL_KEYDOWN or ::SDL_KEYUP */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ Uint32 windowID; /**< The window with keyboard focus, if any */ Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ Uint8 repeat; /**< Non-zero if this is a key repeat */ Uint8 padding2; Uint8 padding3; SDL_Keysym keysym; /**< The key that was pressed or released */ } SDL_KeyboardEvent; #define SDL_TEXTEDITINGEVENT_TEXT_SIZE (32) /** * \brief Keyboard text editing event structure (event.edit.*) */ typedef struct SDL_TextEditingEvent { Uint32 type; /**< ::SDL_TEXTEDITING */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ Uint32 windowID; /**< The window with keyboard focus, if any */ char text[SDL_TEXTEDITINGEVENT_TEXT_SIZE]; /**< The editing text */ Sint32 start; /**< The start cursor of selected editing text */ Sint32 length; /**< The length of selected editing text */ } SDL_TextEditingEvent; /** * \brief Extended keyboard text editing event structure (event.editExt.*) when text would be * truncated if stored in the text buffer SDL_TextEditingEvent */ typedef struct SDL_TextEditingExtEvent { Uint32 type; /**< ::SDL_TEXTEDITING_EXT */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ Uint32 windowID; /**< The window with keyboard focus, if any */ char* text; /**< The editing text, which should be freed with SDL_free(), and will not be NULL */ Sint32 start; /**< The start cursor of selected editing text */ Sint32 length; /**< The length of selected editing text */ } SDL_TextEditingExtEvent; #define SDL_TEXTINPUTEVENT_TEXT_SIZE (32) /** * \brief Keyboard text input event structure (event.text.*) */ typedef struct SDL_TextInputEvent { Uint32 type; /**< ::SDL_TEXTINPUT */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ Uint32 windowID; /**< The window with keyboard focus, if any */ char text[SDL_TEXTINPUTEVENT_TEXT_SIZE]; /**< The input text */ } SDL_TextInputEvent; /** * \brief Mouse motion event structure (event.motion.*) */ typedef struct SDL_MouseMotionEvent { Uint32 type; /**< ::SDL_MOUSEMOTION */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ Uint32 windowID; /**< The window with mouse focus, if any */ Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ Uint32 state; /**< The current button state */ Sint32 x; /**< X coordinate, relative to window */ Sint32 y; /**< Y coordinate, relative to window */ Sint32 xrel; /**< The relative motion in the X direction */ Sint32 yrel; /**< The relative motion in the Y direction */ } SDL_MouseMotionEvent; /** * \brief Mouse button event structure (event.button.*) */ typedef struct SDL_MouseButtonEvent { Uint32 type; /**< ::SDL_MOUSEBUTTONDOWN or ::SDL_MOUSEBUTTONUP */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ Uint32 windowID; /**< The window with mouse focus, if any */ Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ Uint8 button; /**< The mouse button index */ Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ Uint8 clicks; /**< 1 for single-click, 2 for double-click, etc. */ Uint8 padding1; Sint32 x; /**< X coordinate, relative to window */ Sint32 y; /**< Y coordinate, relative to window */ } SDL_MouseButtonEvent; /** * \brief Mouse wheel event structure (event.wheel.*) */ typedef struct SDL_MouseWheelEvent { Uint32 type; /**< ::SDL_MOUSEWHEEL */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ Uint32 windowID; /**< The window with mouse focus, if any */ Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ Sint32 x; /**< The amount scrolled horizontally, positive to the right and negative to the left */ Sint32 y; /**< The amount scrolled vertically, positive away from the user and negative toward the user */ Uint32 direction; /**< Set to one of the SDL_MOUSEWHEEL_* defines. When FLIPPED the values in X and Y will be opposite. Multiply by -1 to change them back */ float preciseX; /**< The amount scrolled horizontally, positive to the right and negative to the left, with float precision (added in 2.0.18) */ float preciseY; /**< The amount scrolled vertically, positive away from the user and negative toward the user, with float precision (added in 2.0.18) */ Sint32 mouseX; /**< X coordinate, relative to window (added in 2.26.0) */ Sint32 mouseY; /**< Y coordinate, relative to window (added in 2.26.0) */ } SDL_MouseWheelEvent; /** * \brief Joystick axis motion event structure (event.jaxis.*) */ typedef struct SDL_JoyAxisEvent { Uint32 type; /**< ::SDL_JOYAXISMOTION */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ SDL_JoystickID which; /**< The joystick instance id */ Uint8 axis; /**< The joystick axis index */ Uint8 padding1; Uint8 padding2; Uint8 padding3; Sint16 value; /**< The axis value (range: -32768 to 32767) */ Uint16 padding4; } SDL_JoyAxisEvent; /** * \brief Joystick trackball motion event structure (event.jball.*) */ typedef struct SDL_JoyBallEvent { Uint32 type; /**< ::SDL_JOYBALLMOTION */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ SDL_JoystickID which; /**< The joystick instance id */ Uint8 ball; /**< The joystick trackball index */ Uint8 padding1; Uint8 padding2; Uint8 padding3; Sint16 xrel; /**< The relative motion in the X direction */ Sint16 yrel; /**< The relative motion in the Y direction */ } SDL_JoyBallEvent; /** * \brief Joystick hat position change event structure (event.jhat.*) */ typedef struct SDL_JoyHatEvent { Uint32 type; /**< ::SDL_JOYHATMOTION */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ SDL_JoystickID which; /**< The joystick instance id */ Uint8 hat; /**< The joystick hat index */ Uint8 value; /**< The hat position value. * \sa ::SDL_HAT_LEFTUP ::SDL_HAT_UP ::SDL_HAT_RIGHTUP * \sa ::SDL_HAT_LEFT ::SDL_HAT_CENTERED ::SDL_HAT_RIGHT * \sa ::SDL_HAT_LEFTDOWN ::SDL_HAT_DOWN ::SDL_HAT_RIGHTDOWN * * Note that zero means the POV is centered. */ Uint8 padding1; Uint8 padding2; } SDL_JoyHatEvent; /** * \brief Joystick button event structure (event.jbutton.*) */ typedef struct SDL_JoyButtonEvent { Uint32 type; /**< ::SDL_JOYBUTTONDOWN or ::SDL_JOYBUTTONUP */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ SDL_JoystickID which; /**< The joystick instance id */ Uint8 button; /**< The joystick button index */ Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ Uint8 padding1; Uint8 padding2; } SDL_JoyButtonEvent; /** * \brief Joystick device event structure (event.jdevice.*) */ typedef struct SDL_JoyDeviceEvent { Uint32 type; /**< ::SDL_JOYDEVICEADDED or ::SDL_JOYDEVICEREMOVED */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ Sint32 which; /**< The joystick device index for the ADDED event, instance id for the REMOVED event */ } SDL_JoyDeviceEvent; /** * \brief Joysick battery level change event structure (event.jbattery.*) */ typedef struct SDL_JoyBatteryEvent { Uint32 type; /**< ::SDL_JOYBATTERYUPDATED */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ SDL_JoystickID which; /**< The joystick instance id */ SDL_JoystickPowerLevel level; /**< The joystick battery level */ } SDL_JoyBatteryEvent; /** * \brief Game controller axis motion event structure (event.caxis.*) */ typedef struct SDL_ControllerAxisEvent { Uint32 type; /**< ::SDL_CONTROLLERAXISMOTION */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ SDL_JoystickID which; /**< The joystick instance id */ Uint8 axis; /**< The controller axis (SDL_GameControllerAxis) */ Uint8 padding1; Uint8 padding2; Uint8 padding3; Sint16 value; /**< The axis value (range: -32768 to 32767) */ Uint16 padding4; } SDL_ControllerAxisEvent; /** * \brief Game controller button event structure (event.cbutton.*) */ typedef struct SDL_ControllerButtonEvent { Uint32 type; /**< ::SDL_CONTROLLERBUTTONDOWN or ::SDL_CONTROLLERBUTTONUP */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ SDL_JoystickID which; /**< The joystick instance id */ Uint8 button; /**< The controller button (SDL_GameControllerButton) */ Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ Uint8 padding1; Uint8 padding2; } SDL_ControllerButtonEvent; /** * \brief Controller device event structure (event.cdevice.*) */ typedef struct SDL_ControllerDeviceEvent { Uint32 type; /**< ::SDL_CONTROLLERDEVICEADDED, ::SDL_CONTROLLERDEVICEREMOVED, ::SDL_CONTROLLERDEVICEREMAPPED, or ::SDL_CONTROLLERSTEAMHANDLEUPDATED */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ Sint32 which; /**< The joystick device index for the ADDED event, instance id for the REMOVED or REMAPPED event */ } SDL_ControllerDeviceEvent; /** * \brief Game controller touchpad event structure (event.ctouchpad.*) */ typedef struct SDL_ControllerTouchpadEvent { Uint32 type; /**< ::SDL_CONTROLLERTOUCHPADDOWN or ::SDL_CONTROLLERTOUCHPADMOTION or ::SDL_CONTROLLERTOUCHPADUP */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ SDL_JoystickID which; /**< The joystick instance id */ Sint32 touchpad; /**< The index of the touchpad */ Sint32 finger; /**< The index of the finger on the touchpad */ float x; /**< Normalized in the range 0...1 with 0 being on the left */ float y; /**< Normalized in the range 0...1 with 0 being at the top */ float pressure; /**< Normalized in the range 0...1 */ } SDL_ControllerTouchpadEvent; /** * \brief Game controller sensor event structure (event.csensor.*) */ typedef struct SDL_ControllerSensorEvent { Uint32 type; /**< ::SDL_CONTROLLERSENSORUPDATE */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ SDL_JoystickID which; /**< The joystick instance id */ Sint32 sensor; /**< The type of the sensor, one of the values of ::SDL_SensorType */ float data[3]; /**< Up to 3 values from the sensor, as defined in SDL_sensor.h */ Uint64 timestamp_us; /**< The timestamp of the sensor reading in microseconds, if the hardware provides this information. */ } SDL_ControllerSensorEvent; /** * \brief Audio device event structure (event.adevice.*) */ typedef struct SDL_AudioDeviceEvent { Uint32 type; /**< ::SDL_AUDIODEVICEADDED, or ::SDL_AUDIODEVICEREMOVED */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ Uint32 which; /**< The audio device index for the ADDED event (valid until next SDL_GetNumAudioDevices() call), SDL_AudioDeviceID for the REMOVED event */ Uint8 iscapture; /**< zero if an output device, non-zero if a capture device. */ Uint8 padding1; Uint8 padding2; Uint8 padding3; } SDL_AudioDeviceEvent; /** * \brief Touch finger event structure (event.tfinger.*) */ typedef struct SDL_TouchFingerEvent { Uint32 type; /**< ::SDL_FINGERMOTION or ::SDL_FINGERDOWN or ::SDL_FINGERUP */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ SDL_TouchID touchId; /**< The touch device id */ SDL_FingerID fingerId; float x; /**< Normalized in the range 0...1 */ float y; /**< Normalized in the range 0...1 */ float dx; /**< Normalized in the range -1...1 */ float dy; /**< Normalized in the range -1...1 */ float pressure; /**< Normalized in the range 0...1 */ Uint32 windowID; /**< The window underneath the finger, if any */ } SDL_TouchFingerEvent; /** * \brief Multiple Finger Gesture Event (event.mgesture.*) */ typedef struct SDL_MultiGestureEvent { Uint32 type; /**< ::SDL_MULTIGESTURE */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ SDL_TouchID touchId; /**< The touch device id */ float dTheta; float dDist; float x; float y; Uint16 numFingers; Uint16 padding; } SDL_MultiGestureEvent; /** * \brief Dollar Gesture Event (event.dgesture.*) */ typedef struct SDL_DollarGestureEvent { Uint32 type; /**< ::SDL_DOLLARGESTURE or ::SDL_DOLLARRECORD */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ SDL_TouchID touchId; /**< The touch device id */ SDL_GestureID gestureId; Uint32 numFingers; float error; float x; /**< Normalized center of gesture */ float y; /**< Normalized center of gesture */ } SDL_DollarGestureEvent; /** * \brief An event used to request a file open by the system (event.drop.*) * This event is enabled by default, you can disable it with SDL_EventState(). * \note If this event is enabled, you must free the filename in the event. */ typedef struct SDL_DropEvent { Uint32 type; /**< ::SDL_DROPBEGIN or ::SDL_DROPFILE or ::SDL_DROPTEXT or ::SDL_DROPCOMPLETE */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ char *file; /**< The file name, which should be freed with SDL_free(), is NULL on begin/complete */ Uint32 windowID; /**< The window that was dropped on, if any */ } SDL_DropEvent; /** * \brief Sensor event structure (event.sensor.*) */ typedef struct SDL_SensorEvent { Uint32 type; /**< ::SDL_SENSORUPDATE */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ Sint32 which; /**< The instance ID of the sensor */ float data[6]; /**< Up to 6 values from the sensor - additional values can be queried using SDL_SensorGetData() */ Uint64 timestamp_us; /**< The timestamp of the sensor reading in microseconds, if the hardware provides this information. */ } SDL_SensorEvent; /** * \brief The "quit requested" event */ typedef struct SDL_QuitEvent { Uint32 type; /**< ::SDL_QUIT */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ } SDL_QuitEvent; /** * \brief A user-defined event type (event.user.*) */ typedef struct SDL_UserEvent { Uint32 type; /**< ::SDL_USEREVENT through ::SDL_LASTEVENT-1 */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ Uint32 windowID; /**< The associated window if any */ Sint32 code; /**< User defined event code */ void *data1; /**< User defined data pointer */ void *data2; /**< User defined data pointer */ } SDL_UserEvent; struct SDL_SysWMmsg; typedef struct SDL_SysWMmsg SDL_SysWMmsg; /** * \brief A video driver dependent system event (event.syswm.*) * This event is disabled by default, you can enable it with SDL_EventState() * * \note If you want to use this event, you should include SDL_syswm.h. */ typedef struct SDL_SysWMEvent { Uint32 type; /**< ::SDL_SYSWMEVENT */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ SDL_SysWMmsg *msg; /**< driver dependent data, defined in SDL_syswm.h */ } SDL_SysWMEvent; /** * \brief General event structure */ typedef union SDL_Event { Uint32 type; /**< Event type, shared with all events */ SDL_CommonEvent common; /**< Common event data */ SDL_DisplayEvent display; /**< Display event data */ SDL_WindowEvent window; /**< Window event data */ SDL_KeyboardEvent key; /**< Keyboard event data */ SDL_TextEditingEvent edit; /**< Text editing event data */ SDL_TextEditingExtEvent editExt; /**< Extended text editing event data */ SDL_TextInputEvent text; /**< Text input event data */ SDL_MouseMotionEvent motion; /**< Mouse motion event data */ SDL_MouseButtonEvent button; /**< Mouse button event data */ SDL_MouseWheelEvent wheel; /**< Mouse wheel event data */ SDL_JoyAxisEvent jaxis; /**< Joystick axis event data */ SDL_JoyBallEvent jball; /**< Joystick ball event data */ SDL_JoyHatEvent jhat; /**< Joystick hat event data */ SDL_JoyButtonEvent jbutton; /**< Joystick button event data */ SDL_JoyDeviceEvent jdevice; /**< Joystick device change event data */ SDL_JoyBatteryEvent jbattery; /**< Joystick battery event data */ SDL_ControllerAxisEvent caxis; /**< Game Controller axis event data */ SDL_ControllerButtonEvent cbutton; /**< Game Controller button event data */ SDL_ControllerDeviceEvent cdevice; /**< Game Controller device event data */ SDL_ControllerTouchpadEvent ctouchpad; /**< Game Controller touchpad event data */ SDL_ControllerSensorEvent csensor; /**< Game Controller sensor event data */ SDL_AudioDeviceEvent adevice; /**< Audio device event data */ SDL_SensorEvent sensor; /**< Sensor event data */ SDL_QuitEvent quit; /**< Quit request event data */ SDL_UserEvent user; /**< Custom event data */ SDL_SysWMEvent syswm; /**< System dependent window event data */ SDL_TouchFingerEvent tfinger; /**< Touch finger event data */ SDL_MultiGestureEvent mgesture; /**< Gesture event data */ SDL_DollarGestureEvent dgesture; /**< Gesture event data */ SDL_DropEvent drop; /**< Drag and drop event data */ /* This is necessary for ABI compatibility between Visual C++ and GCC. Visual C++ will respect the push pack pragma and use 52 bytes (size of SDL_TextEditingEvent, the largest structure for 32-bit and 64-bit architectures) for this union, and GCC will use the alignment of the largest datatype within the union, which is 8 bytes on 64-bit architectures. So... we'll add padding to force the size to be 56 bytes for both. On architectures where pointers are 16 bytes, this needs rounding up to the next multiple of 16, 64, and on architectures where pointers are even larger the size of SDL_UserEvent will dominate as being 3 pointers. */ Uint8 padding[sizeof(void *) <= 8 ? 56 : sizeof(void *) == 16 ? 64 : 3 * sizeof(void *)]; } SDL_Event; /* Make sure we haven't broken binary compatibility */ SDL_COMPILE_TIME_ASSERT(SDL_Event, sizeof(SDL_Event) == sizeof(((SDL_Event *)NULL)->padding)); /* Function prototypes */ /** * Pump the event loop, gathering events from the input devices. * * This function updates the event queue and internal input device state. * * **WARNING**: This should only be run in the thread that initialized the * video subsystem, and for extra safety, you should consider only doing those * things on the main thread in any case. * * SDL_PumpEvents() gathers all the pending input information from devices and * places it in the event queue. Without calls to SDL_PumpEvents() no events * would ever be placed on the queue. Often the need for calls to * SDL_PumpEvents() is hidden from the user since SDL_PollEvent() and * SDL_WaitEvent() implicitly call SDL_PumpEvents(). However, if you are not * polling or waiting for events (e.g. you are filtering them), then you must * call SDL_PumpEvents() to force an event queue update. * * \since This function is available since SDL 2.0.0. * * \sa SDL_PollEvent * \sa SDL_WaitEvent */ extern DECLSPEC void SDLCALL SDL_PumpEvents(void); /* @{ */ typedef enum { SDL_ADDEVENT, SDL_PEEKEVENT, SDL_GETEVENT } SDL_eventaction; /** * Check the event queue for messages and optionally return them. * * `action` may be any of the following: * * - `SDL_ADDEVENT`: up to `numevents` events will be added to the back of the * event queue. * - `SDL_PEEKEVENT`: `numevents` events at the front of the event queue, * within the specified minimum and maximum type, will be returned to the * caller and will _not_ be removed from the queue. * - `SDL_GETEVENT`: up to `numevents` events at the front of the event queue, * within the specified minimum and maximum type, will be returned to the * caller and will be removed from the queue. * * You may have to call SDL_PumpEvents() before calling this function. * Otherwise, the events may not be ready to be filtered when you call * SDL_PeepEvents(). * * This function is thread-safe. * * \param events destination buffer for the retrieved events * \param numevents if action is SDL_ADDEVENT, the number of events to add * back to the event queue; if action is SDL_PEEKEVENT or * SDL_GETEVENT, the maximum number of events to retrieve * \param action action to take; see [[#action|Remarks]] for details * \param minType minimum value of the event type to be considered; * SDL_FIRSTEVENT is a safe choice * \param maxType maximum value of the event type to be considered; * SDL_LASTEVENT is a safe choice * \returns the number of events actually stored or a negative error code on * failure; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_PollEvent * \sa SDL_PumpEvents * \sa SDL_PushEvent */ extern DECLSPEC int SDLCALL SDL_PeepEvents(SDL_Event * events, int numevents, SDL_eventaction action, Uint32 minType, Uint32 maxType); /* @} */ /** * Check for the existence of a certain event type in the event queue. * * If you need to check for a range of event types, use SDL_HasEvents() * instead. * * \param type the type of event to be queried; see SDL_EventType for details * \returns SDL_TRUE if events matching `type` are present, or SDL_FALSE if * events matching `type` are not present. * * \since This function is available since SDL 2.0.0. * * \sa SDL_HasEvents */ extern DECLSPEC SDL_bool SDLCALL SDL_HasEvent(Uint32 type); /** * Check for the existence of certain event types in the event queue. * * If you need to check for a single event type, use SDL_HasEvent() instead. * * \param minType the low end of event type to be queried, inclusive; see * SDL_EventType for details * \param maxType the high end of event type to be queried, inclusive; see * SDL_EventType for details * \returns SDL_TRUE if events with type >= `minType` and <= `maxType` are * present, or SDL_FALSE if not. * * \since This function is available since SDL 2.0.0. * * \sa SDL_HasEvents */ extern DECLSPEC SDL_bool SDLCALL SDL_HasEvents(Uint32 minType, Uint32 maxType); /** * Clear events of a specific type from the event queue. * * This will unconditionally remove any events from the queue that match * `type`. If you need to remove a range of event types, use SDL_FlushEvents() * instead. * * It's also normal to just ignore events you don't care about in your event * loop without calling this function. * * This function only affects currently queued events. If you want to make * sure that all pending OS events are flushed, you can call SDL_PumpEvents() * on the main thread immediately before the flush call. * * \param type the type of event to be cleared; see SDL_EventType for details * * \since This function is available since SDL 2.0.0. * * \sa SDL_FlushEvents */ extern DECLSPEC void SDLCALL SDL_FlushEvent(Uint32 type); /** * Clear events of a range of types from the event queue. * * This will unconditionally remove any events from the queue that are in the * range of `minType` to `maxType`, inclusive. If you need to remove a single * event type, use SDL_FlushEvent() instead. * * It's also normal to just ignore events you don't care about in your event * loop without calling this function. * * This function only affects currently queued events. If you want to make * sure that all pending OS events are flushed, you can call SDL_PumpEvents() * on the main thread immediately before the flush call. * * \param minType the low end of event type to be cleared, inclusive; see * SDL_EventType for details * \param maxType the high end of event type to be cleared, inclusive; see * SDL_EventType for details * * \since This function is available since SDL 2.0.0. * * \sa SDL_FlushEvent */ extern DECLSPEC void SDLCALL SDL_FlushEvents(Uint32 minType, Uint32 maxType); /** * Poll for currently pending events. * * If `event` is not NULL, the next event is removed from the queue and stored * in the SDL_Event structure pointed to by `event`. The 1 returned refers to * this event, immediately stored in the SDL Event structure -- not an event * to follow. * * If `event` is NULL, it simply returns 1 if there is an event in the queue, * but will not remove it from the queue. * * As this function may implicitly call SDL_PumpEvents(), you can only call * this function in the thread that set the video mode. * * SDL_PollEvent() is the favored way of receiving system events since it can * be done from the main loop and does not suspend the main loop while waiting * on an event to be posted. * * The common practice is to fully process the event queue once every frame, * usually as a first step before updating the game's state: * * ```c * while (game_is_still_running) { * SDL_Event event; * while (SDL_PollEvent(&event)) { // poll until all events are handled! * // decide what to do with this event. * } * * // update game state, draw the current frame * } * ``` * * \param event the SDL_Event structure to be filled with the next event from * the queue, or NULL * \returns 1 if there is a pending event or 0 if there are none available. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetEventFilter * \sa SDL_PeepEvents * \sa SDL_PushEvent * \sa SDL_SetEventFilter * \sa SDL_WaitEvent * \sa SDL_WaitEventTimeout */ extern DECLSPEC int SDLCALL SDL_PollEvent(SDL_Event * event); /** * Wait indefinitely for the next available event. * * If `event` is not NULL, the next event is removed from the queue and stored * in the SDL_Event structure pointed to by `event`. * * As this function may implicitly call SDL_PumpEvents(), you can only call * this function in the thread that initialized the video subsystem. * * \param event the SDL_Event structure to be filled in with the next event * from the queue, or NULL * \returns 1 on success or 0 if there was an error while waiting for events; * call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_PollEvent * \sa SDL_PumpEvents * \sa SDL_WaitEventTimeout */ extern DECLSPEC int SDLCALL SDL_WaitEvent(SDL_Event * event); /** * Wait until the specified timeout (in milliseconds) for the next available * event. * * If `event` is not NULL, the next event is removed from the queue and stored * in the SDL_Event structure pointed to by `event`. * * As this function may implicitly call SDL_PumpEvents(), you can only call * this function in the thread that initialized the video subsystem. * * \param event the SDL_Event structure to be filled in with the next event * from the queue, or NULL * \param timeout the maximum number of milliseconds to wait for the next * available event * \returns 1 on success or 0 if there was an error while waiting for events; * call SDL_GetError() for more information. This also returns 0 if * the timeout elapsed without an event arriving. * * \since This function is available since SDL 2.0.0. * * \sa SDL_PollEvent * \sa SDL_PumpEvents * \sa SDL_WaitEvent */ extern DECLSPEC int SDLCALL SDL_WaitEventTimeout(SDL_Event * event, int timeout); /** * Add an event to the event queue. * * The event queue can actually be used as a two way communication channel. * Not only can events be read from the queue, but the user can also push * their own events onto it. `event` is a pointer to the event structure you * wish to push onto the queue. The event is copied into the queue, and the * caller may dispose of the memory pointed to after SDL_PushEvent() returns. * * Note: Pushing device input events onto the queue doesn't modify the state * of the device within SDL. * * This function is thread-safe, and can be called from other threads safely. * * Note: Events pushed onto the queue with SDL_PushEvent() get passed through * the event filter but events added with SDL_PeepEvents() do not. * * For pushing application-specific events, please use SDL_RegisterEvents() to * get an event type that does not conflict with other code that also wants * its own custom event types. * * \param event the SDL_Event to be added to the queue * \returns 1 on success, 0 if the event was filtered, or a negative error * code on failure; call SDL_GetError() for more information. A * common reason for error is the event queue being full. * * \since This function is available since SDL 2.0.0. * * \sa SDL_PeepEvents * \sa SDL_PollEvent * \sa SDL_RegisterEvents */ extern DECLSPEC int SDLCALL SDL_PushEvent(SDL_Event * event); /** * A function pointer used for callbacks that watch the event queue. * * \param userdata what was passed as `userdata` to SDL_SetEventFilter() * or SDL_AddEventWatch, etc * \param event the event that triggered the callback * \returns 1 to permit event to be added to the queue, and 0 to disallow * it. When used with SDL_AddEventWatch, the return value is ignored. * * \sa SDL_SetEventFilter * \sa SDL_AddEventWatch */ typedef int (SDLCALL * SDL_EventFilter) (void *userdata, SDL_Event * event); /** * Set up a filter to process all events before they change internal state and * are posted to the internal event queue. * * If the filter function returns 1 when called, then the event will be added * to the internal queue. If it returns 0, then the event will be dropped from * the queue, but the internal state will still be updated. This allows * selective filtering of dynamically arriving events. * * **WARNING**: Be very careful of what you do in the event filter function, * as it may run in a different thread! * * On platforms that support it, if the quit event is generated by an * interrupt signal (e.g. pressing Ctrl-C), it will be delivered to the * application at the next event poll. * * There is one caveat when dealing with the ::SDL_QuitEvent event type. The * event filter is only called when the window manager desires to close the * application window. If the event filter returns 1, then the window will be * closed, otherwise the window will remain open if possible. * * Note: Disabled events never make it to the event filter function; see * SDL_EventState(). * * Note: If you just want to inspect events without filtering, you should use * SDL_AddEventWatch() instead. * * Note: Events pushed onto the queue with SDL_PushEvent() get passed through * the event filter, but events pushed onto the queue with SDL_PeepEvents() do * not. * * \param filter An SDL_EventFilter function to call when an event happens * \param userdata a pointer that is passed to `filter` * * \since This function is available since SDL 2.0.0. * * \sa SDL_AddEventWatch * \sa SDL_EventState * \sa SDL_GetEventFilter * \sa SDL_PeepEvents * \sa SDL_PushEvent */ extern DECLSPEC void SDLCALL SDL_SetEventFilter(SDL_EventFilter filter, void *userdata); /** * Query the current event filter. * * This function can be used to "chain" filters, by saving the existing filter * before replacing it with a function that will call that saved filter. * * \param filter the current callback function will be stored here * \param userdata the pointer that is passed to the current event filter will * be stored here * \returns SDL_TRUE on success or SDL_FALSE if there is no event filter set. * * \since This function is available since SDL 2.0.0. * * \sa SDL_SetEventFilter */ extern DECLSPEC SDL_bool SDLCALL SDL_GetEventFilter(SDL_EventFilter * filter, void **userdata); /** * Add a callback to be triggered when an event is added to the event queue. * * `filter` will be called when an event happens, and its return value is * ignored. * * **WARNING**: Be very careful of what you do in the event filter function, * as it may run in a different thread! * * If the quit event is generated by a signal (e.g. SIGINT), it will bypass * the internal queue and be delivered to the watch callback immediately, and * arrive at the next event poll. * * Note: the callback is called for events posted by the user through * SDL_PushEvent(), but not for disabled events, nor for events by a filter * callback set with SDL_SetEventFilter(), nor for events posted by the user * through SDL_PeepEvents(). * * \param filter an SDL_EventFilter function to call when an event happens. * \param userdata a pointer that is passed to `filter` * * \since This function is available since SDL 2.0.0. * * \sa SDL_DelEventWatch * \sa SDL_SetEventFilter */ extern DECLSPEC void SDLCALL SDL_AddEventWatch(SDL_EventFilter filter, void *userdata); /** * Remove an event watch callback added with SDL_AddEventWatch(). * * This function takes the same input as SDL_AddEventWatch() to identify and * delete the corresponding callback. * * \param filter the function originally passed to SDL_AddEventWatch() * \param userdata the pointer originally passed to SDL_AddEventWatch() * * \since This function is available since SDL 2.0.0. * * \sa SDL_AddEventWatch */ extern DECLSPEC void SDLCALL SDL_DelEventWatch(SDL_EventFilter filter, void *userdata); /** * Run a specific filter function on the current event queue, removing any * events for which the filter returns 0. * * See SDL_SetEventFilter() for more information. Unlike SDL_SetEventFilter(), * this function does not change the filter permanently, it only uses the * supplied filter until this function returns. * * \param filter the SDL_EventFilter function to call when an event happens * \param userdata a pointer that is passed to `filter` * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetEventFilter * \sa SDL_SetEventFilter */ extern DECLSPEC void SDLCALL SDL_FilterEvents(SDL_EventFilter filter, void *userdata); /* @{ */ #define SDL_QUERY -1 #define SDL_IGNORE 0 #define SDL_DISABLE 0 #define SDL_ENABLE 1 /** * Set the state of processing events by type. * * `state` may be any of the following: * * - `SDL_QUERY`: returns the current processing state of the specified event * - `SDL_IGNORE` (aka `SDL_DISABLE`): the event will automatically be dropped * from the event queue and will not be filtered * - `SDL_ENABLE`: the event will be processed normally * * \param type the type of event; see SDL_EventType for details * \param state how to process the event * \returns `SDL_DISABLE` or `SDL_ENABLE`, representing the processing state * of the event before this function makes any changes to it. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetEventState */ extern DECLSPEC Uint8 SDLCALL SDL_EventState(Uint32 type, int state); /* @} */ #define SDL_GetEventState(type) SDL_EventState(type, SDL_QUERY) /** * Allocate a set of user-defined events, and return the beginning event * number for that set of events. * * Calling this function with `numevents` <= 0 is an error and will return * (Uint32)-1. * * Note, (Uint32)-1 means the maximum unsigned 32-bit integer value (or * 0xFFFFFFFF), but is clearer to write. * * \param numevents the number of events to be allocated * \returns the beginning event number, or (Uint32)-1 if there are not enough * user-defined events left. * * \since This function is available since SDL 2.0.0. * * \sa SDL_PushEvent */ extern DECLSPEC Uint32 SDLCALL SDL_RegisterEvents(int numevents); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_events_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_filesystem.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_filesystem.h * * \brief Include file for filesystem SDL API functions */ #ifndef SDL_filesystem_h_ #define SDL_filesystem_h_ #include "SDL_stdinc.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** * Get the directory where the application was run from. * * This is not necessarily a fast call, so you should call this once near * startup and save the string if you need it. * * **Mac OS X and iOS Specific Functionality**: If the application is in a * ".app" bundle, this function returns the Resource directory (e.g. * MyApp.app/Contents/Resources/). This behaviour can be overridden by adding * a property to the Info.plist file. Adding a string key with the name * SDL_FILESYSTEM_BASE_DIR_TYPE with a supported value will change the * behaviour. * * Supported values for the SDL_FILESYSTEM_BASE_DIR_TYPE property (Given an * application in /Applications/SDLApp/MyApp.app): * * - `resource`: bundle resource directory (the default). For example: * `/Applications/SDLApp/MyApp.app/Contents/Resources` * - `bundle`: the Bundle directory. For example: * `/Applications/SDLApp/MyApp.app/` * - `parent`: the containing directory of the bundle. For example: * `/Applications/SDLApp/` * * **Nintendo 3DS Specific Functionality**: This function returns "romfs" * directory of the application as it is uncommon to store resources outside * the executable. As such it is not a writable directory. * * The returned path is guaranteed to end with a path separator ('\\' on * Windows, '/' on most other platforms). * * The pointer returned is owned by the caller. Please call SDL_free() on the * pointer when done with it. * * \returns an absolute path in UTF-8 encoding to the application data * directory. NULL will be returned on error or when the platform * doesn't implement this functionality, call SDL_GetError() for more * information. * * \since This function is available since SDL 2.0.1. * * \sa SDL_GetPrefPath */ extern DECLSPEC char *SDLCALL SDL_GetBasePath(void); /** * Get the user-and-app-specific path where files can be written. * * Get the "pref dir". This is meant to be where users can write personal * files (preferences and save games, etc) that are specific to your * application. This directory is unique per user, per application. * * This function will decide the appropriate location in the native * filesystem, create the directory if necessary, and return a string of the * absolute path to the directory in UTF-8 encoding. * * On Windows, the string might look like: * * `C:\\Users\\bob\\AppData\\Roaming\\My Company\\My Program Name\\` * * On Linux, the string might look like: * * `/home/bob/.local/share/My Program Name/` * * On Mac OS X, the string might look like: * * `/Users/bob/Library/Application Support/My Program Name/` * * You should assume the path returned by this function is the only safe place * to write files (and that SDL_GetBasePath(), while it might be writable, or * even the parent of the returned path, isn't where you should be writing * things). * * Both the org and app strings may become part of a directory name, so please * follow these rules: * * - Try to use the same org string (_including case-sensitivity_) for all * your applications that use this function. * - Always use a unique app string for each one, and make sure it never * changes for an app once you've decided on it. * - Unicode characters are legal, as long as it's UTF-8 encoded, but... * - ...only use letters, numbers, and spaces. Avoid punctuation like "Game * Name 2: Bad Guy's Revenge!" ... "Game Name 2" is sufficient. * * The returned path is guaranteed to end with a path separator ('\\' on * Windows, '/' on most other platforms). * * The pointer returned is owned by the caller. Please call SDL_free() on the * pointer when done with it. * * \param org the name of your organization * \param app the name of your application * \returns a UTF-8 string of the user directory in platform-dependent * notation. NULL if there's a problem (creating directory failed, * etc.). * * \since This function is available since SDL 2.0.1. * * \sa SDL_GetBasePath */ extern DECLSPEC char *SDLCALL SDL_GetPrefPath(const char *org, const char *app); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_filesystem_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_gamecontroller.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_gamecontroller.h * * Include file for SDL game controller event handling */ #ifndef SDL_gamecontroller_h_ #define SDL_gamecontroller_h_ #include "SDL_stdinc.h" #include "SDL_error.h" #include "SDL_rwops.h" #include "SDL_sensor.h" #include "SDL_joystick.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** * \file SDL_gamecontroller.h * * In order to use these functions, SDL_Init() must have been called * with the ::SDL_INIT_GAMECONTROLLER flag. This causes SDL to scan the system * for game controllers, and load appropriate drivers. * * If you would like to receive controller updates while the application * is in the background, you should set the following hint before calling * SDL_Init(): SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS */ /** * The gamecontroller structure used to identify an SDL game controller */ struct _SDL_GameController; typedef struct _SDL_GameController SDL_GameController; typedef enum { SDL_CONTROLLER_TYPE_UNKNOWN = 0, SDL_CONTROLLER_TYPE_XBOX360, SDL_CONTROLLER_TYPE_XBOXONE, SDL_CONTROLLER_TYPE_PS3, SDL_CONTROLLER_TYPE_PS4, SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_PRO, SDL_CONTROLLER_TYPE_VIRTUAL, SDL_CONTROLLER_TYPE_PS5, SDL_CONTROLLER_TYPE_AMAZON_LUNA, SDL_CONTROLLER_TYPE_GOOGLE_STADIA, SDL_CONTROLLER_TYPE_NVIDIA_SHIELD, SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_JOYCON_LEFT, SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_JOYCON_RIGHT, SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_JOYCON_PAIR, SDL_CONTROLLER_TYPE_MAX } SDL_GameControllerType; typedef enum { SDL_CONTROLLER_BINDTYPE_NONE = 0, SDL_CONTROLLER_BINDTYPE_BUTTON, SDL_CONTROLLER_BINDTYPE_AXIS, SDL_CONTROLLER_BINDTYPE_HAT } SDL_GameControllerBindType; /** * Get the SDL joystick layer binding for this controller button/axis mapping */ typedef struct SDL_GameControllerButtonBind { SDL_GameControllerBindType bindType; union { int button; int axis; struct { int hat; int hat_mask; } hat; } value; } SDL_GameControllerButtonBind; /** * To count the number of game controllers in the system for the following: * * ```c * int nJoysticks = SDL_NumJoysticks(); * int nGameControllers = 0; * for (int i = 0; i < nJoysticks; i++) { * if (SDL_IsGameController(i)) { * nGameControllers++; * } * } * ``` * * Using the SDL_HINT_GAMECONTROLLERCONFIG hint or the SDL_GameControllerAddMapping() you can add support for controllers SDL is unaware of or cause an existing controller to have a different binding. The format is: * guid,name,mappings * * Where GUID is the string value from SDL_JoystickGetGUIDString(), name is the human readable string for the device and mappings are controller mappings to joystick ones. * Under Windows there is a reserved GUID of "xinput" that covers any XInput devices. * The mapping format for joystick is: * bX - a joystick button, index X * hX.Y - hat X with value Y * aX - axis X of the joystick * Buttons can be used as a controller axis and vice versa. * * This string shows an example of a valid mapping for a controller * * ```c * "03000000341a00003608000000000000,PS3 Controller,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7", * ``` */ /** * Load a set of Game Controller mappings from a seekable SDL data stream. * * You can call this function several times, if needed, to load different * database files. * * If a new mapping is loaded for an already known controller GUID, the later * version will overwrite the one currently loaded. * * Mappings not belonging to the current platform or with no platform field * specified will be ignored (i.e. mappings for Linux will be ignored in * Windows, etc). * * This function will load the text database entirely in memory before * processing it, so take this into consideration if you are in a memory * constrained environment. * * \param rw the data stream for the mappings to be added * \param freerw non-zero to close the stream after being read * \returns the number of mappings added or -1 on error; call SDL_GetError() * for more information. * * \since This function is available since SDL 2.0.2. * * \sa SDL_GameControllerAddMapping * \sa SDL_GameControllerAddMappingsFromFile * \sa SDL_GameControllerMappingForGUID */ extern DECLSPEC int SDLCALL SDL_GameControllerAddMappingsFromRW(SDL_RWops * rw, int freerw); /** * Load a set of mappings from a file, filtered by the current SDL_GetPlatform() * * Convenience macro. */ #define SDL_GameControllerAddMappingsFromFile(file) SDL_GameControllerAddMappingsFromRW(SDL_RWFromFile(file, "rb"), 1) /** * Add support for controllers that SDL is unaware of or to cause an existing * controller to have a different binding. * * The mapping string has the format "GUID,name,mapping", where GUID is the * string value from SDL_JoystickGetGUIDString(), name is the human readable * string for the device and mappings are controller mappings to joystick * ones. Under Windows there is a reserved GUID of "xinput" that covers all * XInput devices. The mapping format for joystick is: {| |bX |a joystick * button, index X |- |hX.Y |hat X with value Y |- |aX |axis X of the joystick * |} Buttons can be used as a controller axes and vice versa. * * This string shows an example of a valid mapping for a controller: * * ```c * "341a3608000000000000504944564944,Afterglow PS3 Controller,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7" * ``` * * \param mappingString the mapping string * \returns 1 if a new mapping is added, 0 if an existing mapping is updated, * -1 on error; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GameControllerMapping * \sa SDL_GameControllerMappingForGUID */ extern DECLSPEC int SDLCALL SDL_GameControllerAddMapping(const char* mappingString); /** * Get the number of mappings installed. * * \returns the number of mappings. * * \since This function is available since SDL 2.0.6. */ extern DECLSPEC int SDLCALL SDL_GameControllerNumMappings(void); /** * Get the mapping at a particular index. * * \returns the mapping string. Must be freed with SDL_free(). Returns NULL if * the index is out of range. * * \since This function is available since SDL 2.0.6. */ extern DECLSPEC char * SDLCALL SDL_GameControllerMappingForIndex(int mapping_index); /** * Get the game controller mapping string for a given GUID. * * The returned string must be freed with SDL_free(). * * \param guid a structure containing the GUID for which a mapping is desired * \returns a mapping string or NULL on error; call SDL_GetError() for more * information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_JoystickGetDeviceGUID * \sa SDL_JoystickGetGUID */ extern DECLSPEC char * SDLCALL SDL_GameControllerMappingForGUID(SDL_JoystickGUID guid); /** * Get the current mapping of a Game Controller. * * The returned string must be freed with SDL_free(). * * Details about mappings are discussed with SDL_GameControllerAddMapping(). * * \param gamecontroller the game controller you want to get the current * mapping for * \returns a string that has the controller's mapping or NULL if no mapping * is available; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GameControllerAddMapping * \sa SDL_GameControllerMappingForGUID */ extern DECLSPEC char * SDLCALL SDL_GameControllerMapping(SDL_GameController *gamecontroller); /** * Check if the given joystick is supported by the game controller interface. * * `joystick_index` is the same as the `device_index` passed to * SDL_JoystickOpen(). * * \param joystick_index the device_index of a device, up to * SDL_NumJoysticks() * \returns SDL_TRUE if the given joystick is supported by the game controller * interface, SDL_FALSE if it isn't or it's an invalid index. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GameControllerNameForIndex * \sa SDL_GameControllerOpen */ extern DECLSPEC SDL_bool SDLCALL SDL_IsGameController(int joystick_index); /** * Get the implementation dependent name for the game controller. * * This function can be called before any controllers are opened. * * `joystick_index` is the same as the `device_index` passed to * SDL_JoystickOpen(). * * \param joystick_index the device_index of a device, from zero to * SDL_NumJoysticks()-1 * \returns the implementation-dependent name for the game controller, or NULL * if there is no name or the index is invalid. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GameControllerName * \sa SDL_GameControllerOpen * \sa SDL_IsGameController */ extern DECLSPEC const char *SDLCALL SDL_GameControllerNameForIndex(int joystick_index); /** * Get the implementation dependent path for the game controller. * * This function can be called before any controllers are opened. * * `joystick_index` is the same as the `device_index` passed to * SDL_JoystickOpen(). * * \param joystick_index the device_index of a device, from zero to * SDL_NumJoysticks()-1 * \returns the implementation-dependent path for the game controller, or NULL * if there is no path or the index is invalid. * * \since This function is available since SDL 2.24.0. * * \sa SDL_GameControllerPath */ extern DECLSPEC const char *SDLCALL SDL_GameControllerPathForIndex(int joystick_index); /** * Get the type of a game controller. * * This can be called before any controllers are opened. * * \param joystick_index the device_index of a device, from zero to * SDL_NumJoysticks()-1 * \returns the controller type. * * \since This function is available since SDL 2.0.12. */ extern DECLSPEC SDL_GameControllerType SDLCALL SDL_GameControllerTypeForIndex(int joystick_index); /** * Get the mapping of a game controller. * * This can be called before any controllers are opened. * * \param joystick_index the device_index of a device, from zero to * SDL_NumJoysticks()-1 * \returns the mapping string. Must be freed with SDL_free(). Returns NULL if * no mapping is available. * * \since This function is available since SDL 2.0.9. */ extern DECLSPEC char *SDLCALL SDL_GameControllerMappingForDeviceIndex(int joystick_index); /** * Open a game controller for use. * * `joystick_index` is the same as the `device_index` passed to * SDL_JoystickOpen(). * * The index passed as an argument refers to the N'th game controller on the * system. This index is not the value which will identify this controller in * future controller events. The joystick's instance id (SDL_JoystickID) will * be used there instead. * * \param joystick_index the device_index of a device, up to * SDL_NumJoysticks() * \returns a gamecontroller identifier or NULL if an error occurred; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GameControllerClose * \sa SDL_GameControllerNameForIndex * \sa SDL_IsGameController */ extern DECLSPEC SDL_GameController *SDLCALL SDL_GameControllerOpen(int joystick_index); /** * Get the SDL_GameController associated with an instance id. * * \param joyid the instance id to get the SDL_GameController for * \returns an SDL_GameController on success or NULL on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.4. */ extern DECLSPEC SDL_GameController *SDLCALL SDL_GameControllerFromInstanceID(SDL_JoystickID joyid); /** * Get the SDL_GameController associated with a player index. * * Please note that the player index is _not_ the device index, nor is it the * instance id! * * \param player_index the player index, which is not the device index or the * instance id! * \returns the SDL_GameController associated with a player index. * * \since This function is available since SDL 2.0.12. * * \sa SDL_GameControllerGetPlayerIndex * \sa SDL_GameControllerSetPlayerIndex */ extern DECLSPEC SDL_GameController *SDLCALL SDL_GameControllerFromPlayerIndex(int player_index); /** * Get the implementation-dependent name for an opened game controller. * * This is the same name as returned by SDL_GameControllerNameForIndex(), but * it takes a controller identifier instead of the (unstable) device index. * * \param gamecontroller a game controller identifier previously returned by * SDL_GameControllerOpen() * \returns the implementation dependent name for the game controller, or NULL * if there is no name or the identifier passed is invalid. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GameControllerNameForIndex * \sa SDL_GameControllerOpen */ extern DECLSPEC const char *SDLCALL SDL_GameControllerName(SDL_GameController *gamecontroller); /** * Get the implementation-dependent path for an opened game controller. * * This is the same path as returned by SDL_GameControllerNameForIndex(), but * it takes a controller identifier instead of the (unstable) device index. * * \param gamecontroller a game controller identifier previously returned by * SDL_GameControllerOpen() * \returns the implementation dependent path for the game controller, or NULL * if there is no path or the identifier passed is invalid. * * \since This function is available since SDL 2.24.0. * * \sa SDL_GameControllerPathForIndex */ extern DECLSPEC const char *SDLCALL SDL_GameControllerPath(SDL_GameController *gamecontroller); /** * Get the type of this currently opened controller * * This is the same name as returned by SDL_GameControllerTypeForIndex(), but * it takes a controller identifier instead of the (unstable) device index. * * \param gamecontroller the game controller object to query. * \returns the controller type. * * \since This function is available since SDL 2.0.12. */ extern DECLSPEC SDL_GameControllerType SDLCALL SDL_GameControllerGetType(SDL_GameController *gamecontroller); /** * Get the player index of an opened game controller. * * For XInput controllers this returns the XInput user index. * * \param gamecontroller the game controller object to query. * \returns the player index for controller, or -1 if it's not available. * * \since This function is available since SDL 2.0.9. */ extern DECLSPEC int SDLCALL SDL_GameControllerGetPlayerIndex(SDL_GameController *gamecontroller); /** * Set the player index of an opened game controller. * * \param gamecontroller the game controller object to adjust. * \param player_index Player index to assign to this controller, or -1 to * clear the player index and turn off player LEDs. * * \since This function is available since SDL 2.0.12. */ extern DECLSPEC void SDLCALL SDL_GameControllerSetPlayerIndex(SDL_GameController *gamecontroller, int player_index); /** * Get the USB vendor ID of an opened controller, if available. * * If the vendor ID isn't available this function returns 0. * * \param gamecontroller the game controller object to query. * \return the USB vendor ID, or zero if unavailable. * * \since This function is available since SDL 2.0.6. */ extern DECLSPEC Uint16 SDLCALL SDL_GameControllerGetVendor(SDL_GameController *gamecontroller); /** * Get the USB product ID of an opened controller, if available. * * If the product ID isn't available this function returns 0. * * \param gamecontroller the game controller object to query. * \return the USB product ID, or zero if unavailable. * * \since This function is available since SDL 2.0.6. */ extern DECLSPEC Uint16 SDLCALL SDL_GameControllerGetProduct(SDL_GameController *gamecontroller); /** * Get the product version of an opened controller, if available. * * If the product version isn't available this function returns 0. * * \param gamecontroller the game controller object to query. * \return the USB product version, or zero if unavailable. * * \since This function is available since SDL 2.0.6. */ extern DECLSPEC Uint16 SDLCALL SDL_GameControllerGetProductVersion(SDL_GameController *gamecontroller); /** * Get the firmware version of an opened controller, if available. * * If the firmware version isn't available this function returns 0. * * \param gamecontroller the game controller object to query. * \return the controller firmware version, or zero if unavailable. * * \since This function is available since SDL 2.24.0. */ extern DECLSPEC Uint16 SDLCALL SDL_GameControllerGetFirmwareVersion(SDL_GameController *gamecontroller); /** * Get the serial number of an opened controller, if available. * * Returns the serial number of the controller, or NULL if it is not * available. * * \param gamecontroller the game controller object to query. * \return the serial number, or NULL if unavailable. * * \since This function is available since SDL 2.0.14. */ extern DECLSPEC const char * SDLCALL SDL_GameControllerGetSerial(SDL_GameController *gamecontroller); /** * Get the Steam Input handle of an opened controller, if available. * * Returns an InputHandle_t for the controller that can be used with Steam Input API: * https://partner.steamgames.com/doc/api/ISteamInput * * \param gamecontroller the game controller object to query. * \returns the gamepad handle, or 0 if unavailable. * * \since This function is available since SDL 2.30.0. */ extern DECLSPEC Uint64 SDLCALL SDL_GameControllerGetSteamHandle(SDL_GameController *gamecontroller); /** * Check if a controller has been opened and is currently connected. * * \param gamecontroller a game controller identifier previously returned by * SDL_GameControllerOpen() * \returns SDL_TRUE if the controller has been opened and is currently * connected, or SDL_FALSE if not. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GameControllerClose * \sa SDL_GameControllerOpen */ extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerGetAttached(SDL_GameController *gamecontroller); /** * Get the Joystick ID from a Game Controller. * * This function will give you a SDL_Joystick object, which allows you to use * the SDL_Joystick functions with a SDL_GameController object. This would be * useful for getting a joystick's position at any given time, even if it * hasn't moved (moving it would produce an event, which would have the axis' * value). * * The pointer returned is owned by the SDL_GameController. You should not * call SDL_JoystickClose() on it, for example, since doing so will likely * cause SDL to crash. * * \param gamecontroller the game controller object that you want to get a * joystick from * \returns a SDL_Joystick object; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC SDL_Joystick *SDLCALL SDL_GameControllerGetJoystick(SDL_GameController *gamecontroller); /** * Query or change current state of Game Controller events. * * If controller events are disabled, you must call SDL_GameControllerUpdate() * yourself and check the state of the controller when you want controller * information. * * Any number can be passed to SDL_GameControllerEventState(), but only -1, 0, * and 1 will have any effect. Other numbers will just be returned. * * \param state can be one of `SDL_QUERY`, `SDL_IGNORE`, or `SDL_ENABLE` * \returns the same value passed to the function, with exception to -1 * (SDL_QUERY), which will return the current state. * * \since This function is available since SDL 2.0.0. * * \sa SDL_JoystickEventState */ extern DECLSPEC int SDLCALL SDL_GameControllerEventState(int state); /** * Manually pump game controller updates if not using the loop. * * This function is called automatically by the event loop if events are * enabled. Under such circumstances, it will not be necessary to call this * function. * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC void SDLCALL SDL_GameControllerUpdate(void); /** * The list of axes available from a controller * * Thumbstick axis values range from SDL_JOYSTICK_AXIS_MIN to SDL_JOYSTICK_AXIS_MAX, * and are centered within ~8000 of zero, though advanced UI will allow users to set * or autodetect the dead zone, which varies between controllers. * * Trigger axis values range from 0 (released) to SDL_JOYSTICK_AXIS_MAX * (fully pressed) when reported by SDL_GameControllerGetAxis(). Note that this is not the * same range that will be reported by the lower-level SDL_GetJoystickAxis(). */ typedef enum { SDL_CONTROLLER_AXIS_INVALID = -1, SDL_CONTROLLER_AXIS_LEFTX, SDL_CONTROLLER_AXIS_LEFTY, SDL_CONTROLLER_AXIS_RIGHTX, SDL_CONTROLLER_AXIS_RIGHTY, SDL_CONTROLLER_AXIS_TRIGGERLEFT, SDL_CONTROLLER_AXIS_TRIGGERRIGHT, SDL_CONTROLLER_AXIS_MAX } SDL_GameControllerAxis; /** * Convert a string into SDL_GameControllerAxis enum. * * This function is called internally to translate SDL_GameController mapping * strings for the underlying joystick device into the consistent * SDL_GameController mapping. You do not normally need to call this function * unless you are parsing SDL_GameController mappings in your own code. * * Note specially that "righttrigger" and "lefttrigger" map to * `SDL_CONTROLLER_AXIS_TRIGGERRIGHT` and `SDL_CONTROLLER_AXIS_TRIGGERLEFT`, * respectively. * * \param str string representing a SDL_GameController axis * \returns the SDL_GameControllerAxis enum corresponding to the input string, * or `SDL_CONTROLLER_AXIS_INVALID` if no match was found. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GameControllerGetStringForAxis */ extern DECLSPEC SDL_GameControllerAxis SDLCALL SDL_GameControllerGetAxisFromString(const char *str); /** * Convert from an SDL_GameControllerAxis enum to a string. * * The caller should not SDL_free() the returned string. * * \param axis an enum value for a given SDL_GameControllerAxis * \returns a string for the given axis, or NULL if an invalid axis is * specified. The string returned is of the format used by * SDL_GameController mapping strings. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GameControllerGetAxisFromString */ extern DECLSPEC const char* SDLCALL SDL_GameControllerGetStringForAxis(SDL_GameControllerAxis axis); /** * Get the SDL joystick layer binding for a controller axis mapping. * * \param gamecontroller a game controller * \param axis an axis enum value (one of the SDL_GameControllerAxis values) * \returns a SDL_GameControllerButtonBind describing the bind. On failure * (like the given Controller axis doesn't exist on the device), its * `.bindType` will be `SDL_CONTROLLER_BINDTYPE_NONE`. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GameControllerGetBindForButton */ extern DECLSPEC SDL_GameControllerButtonBind SDLCALL SDL_GameControllerGetBindForAxis(SDL_GameController *gamecontroller, SDL_GameControllerAxis axis); /** * Query whether a game controller has a given axis. * * This merely reports whether the controller's mapping defined this axis, as * that is all the information SDL has about the physical device. * * \param gamecontroller a game controller * \param axis an axis enum value (an SDL_GameControllerAxis value) * \returns SDL_TRUE if the controller has this axis, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.14. */ extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasAxis(SDL_GameController *gamecontroller, SDL_GameControllerAxis axis); /** * Get the current state of an axis control on a game controller. * * The axis indices start at index 0. * * For thumbsticks, the state is a value ranging from -32768 (up/left) * to 32767 (down/right). * * Triggers range from 0 when released to 32767 when fully pressed, and * never return a negative value. Note that this differs from the value * reported by the lower-level SDL_GetJoystickAxis(), which normally uses * the full range. * * \param gamecontroller a game controller * \param axis an axis index (one of the SDL_GameControllerAxis values) * \returns axis state (including 0) on success or 0 (also) on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GameControllerGetButton */ extern DECLSPEC Sint16 SDLCALL SDL_GameControllerGetAxis(SDL_GameController *gamecontroller, SDL_GameControllerAxis axis); /** * The list of buttons available from a controller */ typedef enum { SDL_CONTROLLER_BUTTON_INVALID = -1, SDL_CONTROLLER_BUTTON_A, SDL_CONTROLLER_BUTTON_B, SDL_CONTROLLER_BUTTON_X, SDL_CONTROLLER_BUTTON_Y, SDL_CONTROLLER_BUTTON_BACK, SDL_CONTROLLER_BUTTON_GUIDE, SDL_CONTROLLER_BUTTON_START, SDL_CONTROLLER_BUTTON_LEFTSTICK, SDL_CONTROLLER_BUTTON_RIGHTSTICK, SDL_CONTROLLER_BUTTON_LEFTSHOULDER, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER, SDL_CONTROLLER_BUTTON_DPAD_UP, SDL_CONTROLLER_BUTTON_DPAD_DOWN, SDL_CONTROLLER_BUTTON_DPAD_LEFT, SDL_CONTROLLER_BUTTON_DPAD_RIGHT, SDL_CONTROLLER_BUTTON_MISC1, /* Xbox Series X share button, PS5 microphone button, Nintendo Switch Pro capture button, Amazon Luna microphone button */ SDL_CONTROLLER_BUTTON_PADDLE1, /* Xbox Elite paddle P1 (upper left, facing the back) */ SDL_CONTROLLER_BUTTON_PADDLE2, /* Xbox Elite paddle P3 (upper right, facing the back) */ SDL_CONTROLLER_BUTTON_PADDLE3, /* Xbox Elite paddle P2 (lower left, facing the back) */ SDL_CONTROLLER_BUTTON_PADDLE4, /* Xbox Elite paddle P4 (lower right, facing the back) */ SDL_CONTROLLER_BUTTON_TOUCHPAD, /* PS4/PS5 touchpad button */ SDL_CONTROLLER_BUTTON_MAX } SDL_GameControllerButton; /** * Convert a string into an SDL_GameControllerButton enum. * * This function is called internally to translate SDL_GameController mapping * strings for the underlying joystick device into the consistent * SDL_GameController mapping. You do not normally need to call this function * unless you are parsing SDL_GameController mappings in your own code. * * \param str string representing a SDL_GameController axis * \returns the SDL_GameControllerButton enum corresponding to the input * string, or `SDL_CONTROLLER_AXIS_INVALID` if no match was found. * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC SDL_GameControllerButton SDLCALL SDL_GameControllerGetButtonFromString(const char *str); /** * Convert from an SDL_GameControllerButton enum to a string. * * The caller should not SDL_free() the returned string. * * \param button an enum value for a given SDL_GameControllerButton * \returns a string for the given button, or NULL if an invalid button is * specified. The string returned is of the format used by * SDL_GameController mapping strings. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GameControllerGetButtonFromString */ extern DECLSPEC const char* SDLCALL SDL_GameControllerGetStringForButton(SDL_GameControllerButton button); /** * Get the SDL joystick layer binding for a controller button mapping. * * \param gamecontroller a game controller * \param button an button enum value (an SDL_GameControllerButton value) * \returns a SDL_GameControllerButtonBind describing the bind. On failure * (like the given Controller button doesn't exist on the device), * its `.bindType` will be `SDL_CONTROLLER_BINDTYPE_NONE`. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GameControllerGetBindForAxis */ extern DECLSPEC SDL_GameControllerButtonBind SDLCALL SDL_GameControllerGetBindForButton(SDL_GameController *gamecontroller, SDL_GameControllerButton button); /** * Query whether a game controller has a given button. * * This merely reports whether the controller's mapping defined this button, * as that is all the information SDL has about the physical device. * * \param gamecontroller a game controller * \param button a button enum value (an SDL_GameControllerButton value) * \returns SDL_TRUE if the controller has this button, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.14. */ extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasButton(SDL_GameController *gamecontroller, SDL_GameControllerButton button); /** * Get the current state of a button on a game controller. * * \param gamecontroller a game controller * \param button a button index (one of the SDL_GameControllerButton values) * \returns 1 for pressed state or 0 for not pressed state or error; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GameControllerGetAxis */ extern DECLSPEC Uint8 SDLCALL SDL_GameControllerGetButton(SDL_GameController *gamecontroller, SDL_GameControllerButton button); /** * Get the number of touchpads on a game controller. * * \since This function is available since SDL 2.0.14. */ extern DECLSPEC int SDLCALL SDL_GameControllerGetNumTouchpads(SDL_GameController *gamecontroller); /** * Get the number of supported simultaneous fingers on a touchpad on a game * controller. * * \since This function is available since SDL 2.0.14. */ extern DECLSPEC int SDLCALL SDL_GameControllerGetNumTouchpadFingers(SDL_GameController *gamecontroller, int touchpad); /** * Get the current state of a finger on a touchpad on a game controller. * * \since This function is available since SDL 2.0.14. */ extern DECLSPEC int SDLCALL SDL_GameControllerGetTouchpadFinger(SDL_GameController *gamecontroller, int touchpad, int finger, Uint8 *state, float *x, float *y, float *pressure); /** * Return whether a game controller has a particular sensor. * * \param gamecontroller The controller to query * \param type The type of sensor to query * \returns SDL_TRUE if the sensor exists, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.14. */ extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasSensor(SDL_GameController *gamecontroller, SDL_SensorType type); /** * Set whether data reporting for a game controller sensor is enabled. * * \param gamecontroller The controller to update * \param type The type of sensor to enable/disable * \param enabled Whether data reporting should be enabled * \returns 0 or -1 if an error occurred. * * \since This function is available since SDL 2.0.14. */ extern DECLSPEC int SDLCALL SDL_GameControllerSetSensorEnabled(SDL_GameController *gamecontroller, SDL_SensorType type, SDL_bool enabled); /** * Query whether sensor data reporting is enabled for a game controller. * * \param gamecontroller The controller to query * \param type The type of sensor to query * \returns SDL_TRUE if the sensor is enabled, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.14. */ extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerIsSensorEnabled(SDL_GameController *gamecontroller, SDL_SensorType type); /** * Get the data rate (number of events per second) of a game controller * sensor. * * \param gamecontroller The controller to query * \param type The type of sensor to query * \return the data rate, or 0.0f if the data rate is not available. * * \since This function is available since SDL 2.0.16. */ extern DECLSPEC float SDLCALL SDL_GameControllerGetSensorDataRate(SDL_GameController *gamecontroller, SDL_SensorType type); /** * Get the current state of a game controller sensor. * * The number of values and interpretation of the data is sensor dependent. * See SDL_sensor.h for the details for each type of sensor. * * \param gamecontroller The controller to query * \param type The type of sensor to query * \param data A pointer filled with the current sensor state * \param num_values The number of values to write to data * \return 0 or -1 if an error occurred. * * \since This function is available since SDL 2.0.14. */ extern DECLSPEC int SDLCALL SDL_GameControllerGetSensorData(SDL_GameController *gamecontroller, SDL_SensorType type, float *data, int num_values); /** * Get the current state of a game controller sensor with the timestamp of the * last update. * * The number of values and interpretation of the data is sensor dependent. * See SDL_sensor.h for the details for each type of sensor. * * \param gamecontroller The controller to query * \param type The type of sensor to query * \param timestamp A pointer filled with the timestamp in microseconds of the * current sensor reading if available, or 0 if not * \param data A pointer filled with the current sensor state * \param num_values The number of values to write to data * \return 0 or -1 if an error occurred. * * \since This function is available since SDL 2.26.0. */ extern DECLSPEC int SDLCALL SDL_GameControllerGetSensorDataWithTimestamp(SDL_GameController *gamecontroller, SDL_SensorType type, Uint64 *timestamp, float *data, int num_values); /** * Start a rumble effect on a game controller. * * Each call to this function cancels any previous rumble effect, and calling * it with 0 intensity stops any rumbling. * * \param gamecontroller The controller to vibrate * \param low_frequency_rumble The intensity of the low frequency (left) * rumble motor, from 0 to 0xFFFF * \param high_frequency_rumble The intensity of the high frequency (right) * rumble motor, from 0 to 0xFFFF * \param duration_ms The duration of the rumble effect, in milliseconds * \returns 0, or -1 if rumble isn't supported on this controller * * \since This function is available since SDL 2.0.9. * * \sa SDL_GameControllerHasRumble */ extern DECLSPEC int SDLCALL SDL_GameControllerRumble(SDL_GameController *gamecontroller, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms); /** * Start a rumble effect in the game controller's triggers. * * Each call to this function cancels any previous trigger rumble effect, and * calling it with 0 intensity stops any rumbling. * * Note that this is rumbling of the _triggers_ and not the game controller as * a whole. This is currently only supported on Xbox One controllers. If you * want the (more common) whole-controller rumble, use * SDL_GameControllerRumble() instead. * * \param gamecontroller The controller to vibrate * \param left_rumble The intensity of the left trigger rumble motor, from 0 * to 0xFFFF * \param right_rumble The intensity of the right trigger rumble motor, from 0 * to 0xFFFF * \param duration_ms The duration of the rumble effect, in milliseconds * \returns 0, or -1 if trigger rumble isn't supported on this controller * * \since This function is available since SDL 2.0.14. * * \sa SDL_GameControllerHasRumbleTriggers */ extern DECLSPEC int SDLCALL SDL_GameControllerRumbleTriggers(SDL_GameController *gamecontroller, Uint16 left_rumble, Uint16 right_rumble, Uint32 duration_ms); /** * Query whether a game controller has an LED. * * \param gamecontroller The controller to query * \returns SDL_TRUE, or SDL_FALSE if this controller does not have a * modifiable LED * * \since This function is available since SDL 2.0.14. */ extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasLED(SDL_GameController *gamecontroller); /** * Query whether a game controller has rumble support. * * \param gamecontroller The controller to query * \returns SDL_TRUE, or SDL_FALSE if this controller does not have rumble * support * * \since This function is available since SDL 2.0.18. * * \sa SDL_GameControllerRumble */ extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasRumble(SDL_GameController *gamecontroller); /** * Query whether a game controller has rumble support on triggers. * * \param gamecontroller The controller to query * \returns SDL_TRUE, or SDL_FALSE if this controller does not have trigger * rumble support * * \since This function is available since SDL 2.0.18. * * \sa SDL_GameControllerRumbleTriggers */ extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasRumbleTriggers(SDL_GameController *gamecontroller); /** * Update a game controller's LED color. * * \param gamecontroller The controller to update * \param red The intensity of the red LED * \param green The intensity of the green LED * \param blue The intensity of the blue LED * \returns 0, or -1 if this controller does not have a modifiable LED * * \since This function is available since SDL 2.0.14. */ extern DECLSPEC int SDLCALL SDL_GameControllerSetLED(SDL_GameController *gamecontroller, Uint8 red, Uint8 green, Uint8 blue); /** * Send a controller specific effect packet * * \param gamecontroller The controller to affect * \param data The data to send to the controller * \param size The size of the data to send to the controller * \returns 0, or -1 if this controller or driver doesn't support effect * packets * * \since This function is available since SDL 2.0.16. */ extern DECLSPEC int SDLCALL SDL_GameControllerSendEffect(SDL_GameController *gamecontroller, const void *data, int size); /** * Close a game controller previously opened with SDL_GameControllerOpen(). * * \param gamecontroller a game controller identifier previously returned by * SDL_GameControllerOpen() * * \since This function is available since SDL 2.0.0. * * \sa SDL_GameControllerOpen */ extern DECLSPEC void SDLCALL SDL_GameControllerClose(SDL_GameController *gamecontroller); /** * Return the sfSymbolsName for a given button on a game controller on Apple * platforms. * * \param gamecontroller the controller to query * \param button a button on the game controller * \returns the sfSymbolsName or NULL if the name can't be found * * \since This function is available since SDL 2.0.18. * * \sa SDL_GameControllerGetAppleSFSymbolsNameForAxis */ extern DECLSPEC const char* SDLCALL SDL_GameControllerGetAppleSFSymbolsNameForButton(SDL_GameController *gamecontroller, SDL_GameControllerButton button); /** * Return the sfSymbolsName for a given axis on a game controller on Apple * platforms. * * \param gamecontroller the controller to query * \param axis an axis on the game controller * \returns the sfSymbolsName or NULL if the name can't be found * * \since This function is available since SDL 2.0.18. * * \sa SDL_GameControllerGetAppleSFSymbolsNameForButton */ extern DECLSPEC const char* SDLCALL SDL_GameControllerGetAppleSFSymbolsNameForAxis(SDL_GameController *gamecontroller, SDL_GameControllerAxis axis); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_gamecontroller_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_gesture.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_gesture.h * * Include file for SDL gesture event handling. */ #ifndef SDL_gesture_h_ #define SDL_gesture_h_ #include "SDL_stdinc.h" #include "SDL_error.h" #include "SDL_video.h" #include "SDL_touch.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif typedef Sint64 SDL_GestureID; /* Function prototypes */ /** * Begin recording a gesture on a specified touch device or all touch devices. * * If the parameter `touchId` is -1 (i.e., all devices), this function will * always return 1, regardless of whether there actually are any devices. * * \param touchId the touch device id, or -1 for all touch devices * \returns 1 on success or 0 if the specified device could not be found. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetTouchDevice */ extern DECLSPEC int SDLCALL SDL_RecordGesture(SDL_TouchID touchId); /** * Save all currently loaded Dollar Gesture templates. * * \param dst a SDL_RWops to save to * \returns the number of saved templates on success or 0 on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_LoadDollarTemplates * \sa SDL_SaveDollarTemplate */ extern DECLSPEC int SDLCALL SDL_SaveAllDollarTemplates(SDL_RWops *dst); /** * Save a currently loaded Dollar Gesture template. * * \param gestureId a gesture id * \param dst a SDL_RWops to save to * \returns 1 on success or 0 on failure; call SDL_GetError() for more * information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_LoadDollarTemplates * \sa SDL_SaveAllDollarTemplates */ extern DECLSPEC int SDLCALL SDL_SaveDollarTemplate(SDL_GestureID gestureId,SDL_RWops *dst); /** * Load Dollar Gesture templates from a file. * * \param touchId a touch id * \param src a SDL_RWops to load from * \returns the number of loaded templates on success or a negative error code * (or 0) on failure; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_SaveAllDollarTemplates * \sa SDL_SaveDollarTemplate */ extern DECLSPEC int SDLCALL SDL_LoadDollarTemplates(SDL_TouchID touchId, SDL_RWops *src); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_gesture_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_guid.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_guid.h * * Include file for handling ::SDL_GUID values. */ #ifndef SDL_guid_h_ #define SDL_guid_h_ #include "SDL_stdinc.h" #include "SDL_error.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** * An SDL_GUID is a 128-bit identifier for an input device that * identifies that device across runs of SDL programs on the same * platform. If the device is detached and then re-attached to a * different port, or if the base system is rebooted, the device * should still report the same GUID. * * GUIDs are as precise as possible but are not guaranteed to * distinguish physically distinct but equivalent devices. For * example, two game controllers from the same vendor with the same * product ID and revision may have the same GUID. * * GUIDs may be platform-dependent (i.e., the same device may report * different GUIDs on different operating systems). */ typedef struct { Uint8 data[16]; } SDL_GUID; /* Function prototypes */ /** * Get an ASCII string representation for a given ::SDL_GUID. * * You should supply at least 33 bytes for pszGUID. * * \param guid the ::SDL_GUID you wish to convert to string * \param pszGUID buffer in which to write the ASCII string * \param cbGUID the size of pszGUID * * \since This function is available since SDL 2.24.0. * * \sa SDL_GUIDFromString */ extern DECLSPEC void SDLCALL SDL_GUIDToString(SDL_GUID guid, char *pszGUID, int cbGUID); /** * Convert a GUID string into a ::SDL_GUID structure. * * Performs no error checking. If this function is given a string containing * an invalid GUID, the function will silently succeed, but the GUID generated * will not be useful. * * \param pchGUID string containing an ASCII representation of a GUID * \returns a ::SDL_GUID structure. * * \since This function is available since SDL 2.24.0. * * \sa SDL_GUIDToString */ extern DECLSPEC SDL_GUID SDLCALL SDL_GUIDFromString(const char *pchGUID); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_guid_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_haptic.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_haptic.h * * \brief The SDL haptic subsystem allows you to control haptic (force feedback) * devices. * * The basic usage is as follows: * - Initialize the subsystem (::SDL_INIT_HAPTIC). * - Open a haptic device. * - SDL_HapticOpen() to open from index. * - SDL_HapticOpenFromJoystick() to open from an existing joystick. * - Create an effect (::SDL_HapticEffect). * - Upload the effect with SDL_HapticNewEffect(). * - Run the effect with SDL_HapticRunEffect(). * - (optional) Free the effect with SDL_HapticDestroyEffect(). * - Close the haptic device with SDL_HapticClose(). * * \par Simple rumble example: * \code * SDL_Haptic *haptic; * * // Open the device * haptic = SDL_HapticOpen( 0 ); * if (haptic == NULL) * return -1; * * // Initialize simple rumble * if (SDL_HapticRumbleInit( haptic ) != 0) * return -1; * * // Play effect at 50% strength for 2 seconds * if (SDL_HapticRumblePlay( haptic, 0.5, 2000 ) != 0) * return -1; * SDL_Delay( 2000 ); * * // Clean up * SDL_HapticClose( haptic ); * \endcode * * \par Complete example: * \code * int test_haptic( SDL_Joystick * joystick ) { * SDL_Haptic *haptic; * SDL_HapticEffect effect; * int effect_id; * * // Open the device * haptic = SDL_HapticOpenFromJoystick( joystick ); * if (haptic == NULL) return -1; // Most likely joystick isn't haptic * * // See if it can do sine waves * if ((SDL_HapticQuery(haptic) & SDL_HAPTIC_SINE)==0) { * SDL_HapticClose(haptic); // No sine effect * return -1; * } * * // Create the effect * SDL_memset( &effect, 0, sizeof(SDL_HapticEffect) ); // 0 is safe default * effect.type = SDL_HAPTIC_SINE; * effect.periodic.direction.type = SDL_HAPTIC_POLAR; // Polar coordinates * effect.periodic.direction.dir[0] = 18000; // Force comes from south * effect.periodic.period = 1000; // 1000 ms * effect.periodic.magnitude = 20000; // 20000/32767 strength * effect.periodic.length = 5000; // 5 seconds long * effect.periodic.attack_length = 1000; // Takes 1 second to get max strength * effect.periodic.fade_length = 1000; // Takes 1 second to fade away * * // Upload the effect * effect_id = SDL_HapticNewEffect( haptic, &effect ); * * // Test the effect * SDL_HapticRunEffect( haptic, effect_id, 1 ); * SDL_Delay( 5000); // Wait for the effect to finish * * // We destroy the effect, although closing the device also does this * SDL_HapticDestroyEffect( haptic, effect_id ); * * // Close the device * SDL_HapticClose(haptic); * * return 0; // Success * } * \endcode */ #ifndef SDL_haptic_h_ #define SDL_haptic_h_ #include "SDL_stdinc.h" #include "SDL_error.h" #include "SDL_joystick.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* FIXME: For SDL 2.1, adjust all the magnitude variables to be Uint16 (0xFFFF). * * At the moment the magnitude variables are mixed between signed/unsigned, and * it is also not made clear that ALL of those variables expect a max of 0x7FFF. * * Some platforms may have higher precision than that (Linux FF, Windows XInput) * so we should fix the inconsistency in favor of higher possible precision, * adjusting for platforms that use different scales. * -flibit */ /** * \typedef SDL_Haptic * * \brief The haptic structure used to identify an SDL haptic. * * \sa SDL_HapticOpen * \sa SDL_HapticOpenFromJoystick * \sa SDL_HapticClose */ struct _SDL_Haptic; typedef struct _SDL_Haptic SDL_Haptic; /** * \name Haptic features * * Different haptic features a device can have. */ /* @{ */ /** * \name Haptic effects */ /* @{ */ /** * \brief Constant effect supported. * * Constant haptic effect. * * \sa SDL_HapticCondition */ #define SDL_HAPTIC_CONSTANT (1u<<0) /** * \brief Sine wave effect supported. * * Periodic haptic effect that simulates sine waves. * * \sa SDL_HapticPeriodic */ #define SDL_HAPTIC_SINE (1u<<1) /** * \brief Left/Right effect supported. * * Haptic effect for direct control over high/low frequency motors. * * \sa SDL_HapticLeftRight * \warning this value was SDL_HAPTIC_SQUARE right before 2.0.0 shipped. Sorry, * we ran out of bits, and this is important for XInput devices. */ #define SDL_HAPTIC_LEFTRIGHT (1u<<2) /* !!! FIXME: put this back when we have more bits in 2.1 */ /* #define SDL_HAPTIC_SQUARE (1<<2) */ /** * \brief Triangle wave effect supported. * * Periodic haptic effect that simulates triangular waves. * * \sa SDL_HapticPeriodic */ #define SDL_HAPTIC_TRIANGLE (1u<<3) /** * \brief Sawtoothup wave effect supported. * * Periodic haptic effect that simulates saw tooth up waves. * * \sa SDL_HapticPeriodic */ #define SDL_HAPTIC_SAWTOOTHUP (1u<<4) /** * \brief Sawtoothdown wave effect supported. * * Periodic haptic effect that simulates saw tooth down waves. * * \sa SDL_HapticPeriodic */ #define SDL_HAPTIC_SAWTOOTHDOWN (1u<<5) /** * \brief Ramp effect supported. * * Ramp haptic effect. * * \sa SDL_HapticRamp */ #define SDL_HAPTIC_RAMP (1u<<6) /** * \brief Spring effect supported - uses axes position. * * Condition haptic effect that simulates a spring. Effect is based on the * axes position. * * \sa SDL_HapticCondition */ #define SDL_HAPTIC_SPRING (1u<<7) /** * \brief Damper effect supported - uses axes velocity. * * Condition haptic effect that simulates dampening. Effect is based on the * axes velocity. * * \sa SDL_HapticCondition */ #define SDL_HAPTIC_DAMPER (1u<<8) /** * \brief Inertia effect supported - uses axes acceleration. * * Condition haptic effect that simulates inertia. Effect is based on the axes * acceleration. * * \sa SDL_HapticCondition */ #define SDL_HAPTIC_INERTIA (1u<<9) /** * \brief Friction effect supported - uses axes movement. * * Condition haptic effect that simulates friction. Effect is based on the * axes movement. * * \sa SDL_HapticCondition */ #define SDL_HAPTIC_FRICTION (1u<<10) /** * \brief Custom effect is supported. * * User defined custom haptic effect. */ #define SDL_HAPTIC_CUSTOM (1u<<11) /* @} *//* Haptic effects */ /* These last few are features the device has, not effects */ /** * \brief Device can set global gain. * * Device supports setting the global gain. * * \sa SDL_HapticSetGain */ #define SDL_HAPTIC_GAIN (1u<<12) /** * \brief Device can set autocenter. * * Device supports setting autocenter. * * \sa SDL_HapticSetAutocenter */ #define SDL_HAPTIC_AUTOCENTER (1u<<13) /** * \brief Device can be queried for effect status. * * Device supports querying effect status. * * \sa SDL_HapticGetEffectStatus */ #define SDL_HAPTIC_STATUS (1u<<14) /** * \brief Device can be paused. * * Devices supports being paused. * * \sa SDL_HapticPause * \sa SDL_HapticUnpause */ #define SDL_HAPTIC_PAUSE (1u<<15) /** * \name Direction encodings */ /* @{ */ /** * \brief Uses polar coordinates for the direction. * * \sa SDL_HapticDirection */ #define SDL_HAPTIC_POLAR 0 /** * \brief Uses cartesian coordinates for the direction. * * \sa SDL_HapticDirection */ #define SDL_HAPTIC_CARTESIAN 1 /** * \brief Uses spherical coordinates for the direction. * * \sa SDL_HapticDirection */ #define SDL_HAPTIC_SPHERICAL 2 /** * \brief Use this value to play an effect on the steering wheel axis. This * provides better compatibility across platforms and devices as SDL will guess * the correct axis. * \sa SDL_HapticDirection */ #define SDL_HAPTIC_STEERING_AXIS 3 /* @} *//* Direction encodings */ /* @} *//* Haptic features */ /* * Misc defines. */ /** * \brief Used to play a device an infinite number of times. * * \sa SDL_HapticRunEffect */ #define SDL_HAPTIC_INFINITY 4294967295U /** * \brief Structure that represents a haptic direction. * * This is the direction where the force comes from, * instead of the direction in which the force is exerted. * * Directions can be specified by: * - ::SDL_HAPTIC_POLAR : Specified by polar coordinates. * - ::SDL_HAPTIC_CARTESIAN : Specified by cartesian coordinates. * - ::SDL_HAPTIC_SPHERICAL : Specified by spherical coordinates. * * Cardinal directions of the haptic device are relative to the positioning * of the device. North is considered to be away from the user. * * The following diagram represents the cardinal directions: * \verbatim .--. |__| .-------. |=.| |.-----.| |--| || || | | |'-----'| |__|~')_____(' [ COMPUTER ] North (0,-1) ^ | | (-1,0) West <----[ HAPTIC ]----> East (1,0) | | v South (0,1) [ USER ] \|||/ (o o) ---ooO-(_)-Ooo--- \endverbatim * * If type is ::SDL_HAPTIC_POLAR, direction is encoded by hundredths of a * degree starting north and turning clockwise. ::SDL_HAPTIC_POLAR only uses * the first \c dir parameter. The cardinal directions would be: * - North: 0 (0 degrees) * - East: 9000 (90 degrees) * - South: 18000 (180 degrees) * - West: 27000 (270 degrees) * * If type is ::SDL_HAPTIC_CARTESIAN, direction is encoded by three positions * (X axis, Y axis and Z axis (with 3 axes)). ::SDL_HAPTIC_CARTESIAN uses * the first three \c dir parameters. The cardinal directions would be: * - North: 0,-1, 0 * - East: 1, 0, 0 * - South: 0, 1, 0 * - West: -1, 0, 0 * * The Z axis represents the height of the effect if supported, otherwise * it's unused. In cartesian encoding (1, 2) would be the same as (2, 4), you * can use any multiple you want, only the direction matters. * * If type is ::SDL_HAPTIC_SPHERICAL, direction is encoded by two rotations. * The first two \c dir parameters are used. The \c dir parameters are as * follows (all values are in hundredths of degrees): * - Degrees from (1, 0) rotated towards (0, 1). * - Degrees towards (0, 0, 1) (device needs at least 3 axes). * * * Example of force coming from the south with all encodings (force coming * from the south means the user will have to pull the stick to counteract): * \code * SDL_HapticDirection direction; * * // Cartesian directions * direction.type = SDL_HAPTIC_CARTESIAN; // Using cartesian direction encoding. * direction.dir[0] = 0; // X position * direction.dir[1] = 1; // Y position * // Assuming the device has 2 axes, we don't need to specify third parameter. * * // Polar directions * direction.type = SDL_HAPTIC_POLAR; // We'll be using polar direction encoding. * direction.dir[0] = 18000; // Polar only uses first parameter * * // Spherical coordinates * direction.type = SDL_HAPTIC_SPHERICAL; // Spherical encoding * direction.dir[0] = 9000; // Since we only have two axes we don't need more parameters. * \endcode * * \sa SDL_HAPTIC_POLAR * \sa SDL_HAPTIC_CARTESIAN * \sa SDL_HAPTIC_SPHERICAL * \sa SDL_HAPTIC_STEERING_AXIS * \sa SDL_HapticEffect * \sa SDL_HapticNumAxes */ typedef struct SDL_HapticDirection { Uint8 type; /**< The type of encoding. */ Sint32 dir[3]; /**< The encoded direction. */ } SDL_HapticDirection; /** * \brief A structure containing a template for a Constant effect. * * This struct is exclusively for the ::SDL_HAPTIC_CONSTANT effect. * * A constant effect applies a constant force in the specified direction * to the joystick. * * \sa SDL_HAPTIC_CONSTANT * \sa SDL_HapticEffect */ typedef struct SDL_HapticConstant { /* Header */ Uint16 type; /**< ::SDL_HAPTIC_CONSTANT */ SDL_HapticDirection direction; /**< Direction of the effect. */ /* Replay */ Uint32 length; /**< Duration of the effect. */ Uint16 delay; /**< Delay before starting the effect. */ /* Trigger */ Uint16 button; /**< Button that triggers the effect. */ Uint16 interval; /**< How soon it can be triggered again after button. */ /* Constant */ Sint16 level; /**< Strength of the constant effect. */ /* Envelope */ Uint16 attack_length; /**< Duration of the attack. */ Uint16 attack_level; /**< Level at the start of the attack. */ Uint16 fade_length; /**< Duration of the fade. */ Uint16 fade_level; /**< Level at the end of the fade. */ } SDL_HapticConstant; /** * \brief A structure containing a template for a Periodic effect. * * The struct handles the following effects: * - ::SDL_HAPTIC_SINE * - ::SDL_HAPTIC_LEFTRIGHT * - ::SDL_HAPTIC_TRIANGLE * - ::SDL_HAPTIC_SAWTOOTHUP * - ::SDL_HAPTIC_SAWTOOTHDOWN * * A periodic effect consists in a wave-shaped effect that repeats itself * over time. The type determines the shape of the wave and the parameters * determine the dimensions of the wave. * * Phase is given by hundredth of a degree meaning that giving the phase a value * of 9000 will displace it 25% of its period. Here are sample values: * - 0: No phase displacement. * - 9000: Displaced 25% of its period. * - 18000: Displaced 50% of its period. * - 27000: Displaced 75% of its period. * - 36000: Displaced 100% of its period, same as 0, but 0 is preferred. * * Examples: * \verbatim SDL_HAPTIC_SINE __ __ __ __ / \ / \ / \ / / \__/ \__/ \__/ SDL_HAPTIC_SQUARE __ __ __ __ __ | | | | | | | | | | | |__| |__| |__| |__| | SDL_HAPTIC_TRIANGLE /\ /\ /\ /\ /\ / \ / \ / \ / \ / / \/ \/ \/ \/ SDL_HAPTIC_SAWTOOTHUP /| /| /| /| /| /| /| / | / | / | / | / | / | / | / |/ |/ |/ |/ |/ |/ | SDL_HAPTIC_SAWTOOTHDOWN \ |\ |\ |\ |\ |\ |\ | \ | \ | \ | \ | \ | \ | \ | \| \| \| \| \| \| \| \endverbatim * * \sa SDL_HAPTIC_SINE * \sa SDL_HAPTIC_LEFTRIGHT * \sa SDL_HAPTIC_TRIANGLE * \sa SDL_HAPTIC_SAWTOOTHUP * \sa SDL_HAPTIC_SAWTOOTHDOWN * \sa SDL_HapticEffect */ typedef struct SDL_HapticPeriodic { /* Header */ Uint16 type; /**< ::SDL_HAPTIC_SINE, ::SDL_HAPTIC_LEFTRIGHT, ::SDL_HAPTIC_TRIANGLE, ::SDL_HAPTIC_SAWTOOTHUP or ::SDL_HAPTIC_SAWTOOTHDOWN */ SDL_HapticDirection direction; /**< Direction of the effect. */ /* Replay */ Uint32 length; /**< Duration of the effect. */ Uint16 delay; /**< Delay before starting the effect. */ /* Trigger */ Uint16 button; /**< Button that triggers the effect. */ Uint16 interval; /**< How soon it can be triggered again after button. */ /* Periodic */ Uint16 period; /**< Period of the wave. */ Sint16 magnitude; /**< Peak value; if negative, equivalent to 180 degrees extra phase shift. */ Sint16 offset; /**< Mean value of the wave. */ Uint16 phase; /**< Positive phase shift given by hundredth of a degree. */ /* Envelope */ Uint16 attack_length; /**< Duration of the attack. */ Uint16 attack_level; /**< Level at the start of the attack. */ Uint16 fade_length; /**< Duration of the fade. */ Uint16 fade_level; /**< Level at the end of the fade. */ } SDL_HapticPeriodic; /** * \brief A structure containing a template for a Condition effect. * * The struct handles the following effects: * - ::SDL_HAPTIC_SPRING: Effect based on axes position. * - ::SDL_HAPTIC_DAMPER: Effect based on axes velocity. * - ::SDL_HAPTIC_INERTIA: Effect based on axes acceleration. * - ::SDL_HAPTIC_FRICTION: Effect based on axes movement. * * Direction is handled by condition internals instead of a direction member. * The condition effect specific members have three parameters. The first * refers to the X axis, the second refers to the Y axis and the third * refers to the Z axis. The right terms refer to the positive side of the * axis and the left terms refer to the negative side of the axis. Please * refer to the ::SDL_HapticDirection diagram for which side is positive and * which is negative. * * \sa SDL_HapticDirection * \sa SDL_HAPTIC_SPRING * \sa SDL_HAPTIC_DAMPER * \sa SDL_HAPTIC_INERTIA * \sa SDL_HAPTIC_FRICTION * \sa SDL_HapticEffect */ typedef struct SDL_HapticCondition { /* Header */ Uint16 type; /**< ::SDL_HAPTIC_SPRING, ::SDL_HAPTIC_DAMPER, ::SDL_HAPTIC_INERTIA or ::SDL_HAPTIC_FRICTION */ SDL_HapticDirection direction; /**< Direction of the effect - Not used ATM. */ /* Replay */ Uint32 length; /**< Duration of the effect. */ Uint16 delay; /**< Delay before starting the effect. */ /* Trigger */ Uint16 button; /**< Button that triggers the effect. */ Uint16 interval; /**< How soon it can be triggered again after button. */ /* Condition */ Uint16 right_sat[3]; /**< Level when joystick is to the positive side; max 0xFFFF. */ Uint16 left_sat[3]; /**< Level when joystick is to the negative side; max 0xFFFF. */ Sint16 right_coeff[3]; /**< How fast to increase the force towards the positive side. */ Sint16 left_coeff[3]; /**< How fast to increase the force towards the negative side. */ Uint16 deadband[3]; /**< Size of the dead zone; max 0xFFFF: whole axis-range when 0-centered. */ Sint16 center[3]; /**< Position of the dead zone. */ } SDL_HapticCondition; /** * \brief A structure containing a template for a Ramp effect. * * This struct is exclusively for the ::SDL_HAPTIC_RAMP effect. * * The ramp effect starts at start strength and ends at end strength. * It augments in linear fashion. If you use attack and fade with a ramp * the effects get added to the ramp effect making the effect become * quadratic instead of linear. * * \sa SDL_HAPTIC_RAMP * \sa SDL_HapticEffect */ typedef struct SDL_HapticRamp { /* Header */ Uint16 type; /**< ::SDL_HAPTIC_RAMP */ SDL_HapticDirection direction; /**< Direction of the effect. */ /* Replay */ Uint32 length; /**< Duration of the effect. */ Uint16 delay; /**< Delay before starting the effect. */ /* Trigger */ Uint16 button; /**< Button that triggers the effect. */ Uint16 interval; /**< How soon it can be triggered again after button. */ /* Ramp */ Sint16 start; /**< Beginning strength level. */ Sint16 end; /**< Ending strength level. */ /* Envelope */ Uint16 attack_length; /**< Duration of the attack. */ Uint16 attack_level; /**< Level at the start of the attack. */ Uint16 fade_length; /**< Duration of the fade. */ Uint16 fade_level; /**< Level at the end of the fade. */ } SDL_HapticRamp; /** * \brief A structure containing a template for a Left/Right effect. * * This struct is exclusively for the ::SDL_HAPTIC_LEFTRIGHT effect. * * The Left/Right effect is used to explicitly control the large and small * motors, commonly found in modern game controllers. The small (right) motor * is high frequency, and the large (left) motor is low frequency. * * \sa SDL_HAPTIC_LEFTRIGHT * \sa SDL_HapticEffect */ typedef struct SDL_HapticLeftRight { /* Header */ Uint16 type; /**< ::SDL_HAPTIC_LEFTRIGHT */ /* Replay */ Uint32 length; /**< Duration of the effect in milliseconds. */ /* Rumble */ Uint16 large_magnitude; /**< Control of the large controller motor. */ Uint16 small_magnitude; /**< Control of the small controller motor. */ } SDL_HapticLeftRight; /** * \brief A structure containing a template for the ::SDL_HAPTIC_CUSTOM effect. * * This struct is exclusively for the ::SDL_HAPTIC_CUSTOM effect. * * A custom force feedback effect is much like a periodic effect, where the * application can define its exact shape. You will have to allocate the * data yourself. Data should consist of channels * samples Uint16 samples. * * If channels is one, the effect is rotated using the defined direction. * Otherwise it uses the samples in data for the different axes. * * \sa SDL_HAPTIC_CUSTOM * \sa SDL_HapticEffect */ typedef struct SDL_HapticCustom { /* Header */ Uint16 type; /**< ::SDL_HAPTIC_CUSTOM */ SDL_HapticDirection direction; /**< Direction of the effect. */ /* Replay */ Uint32 length; /**< Duration of the effect. */ Uint16 delay; /**< Delay before starting the effect. */ /* Trigger */ Uint16 button; /**< Button that triggers the effect. */ Uint16 interval; /**< How soon it can be triggered again after button. */ /* Custom */ Uint8 channels; /**< Axes to use, minimum of one. */ Uint16 period; /**< Sample periods. */ Uint16 samples; /**< Amount of samples. */ Uint16 *data; /**< Should contain channels*samples items. */ /* Envelope */ Uint16 attack_length; /**< Duration of the attack. */ Uint16 attack_level; /**< Level at the start of the attack. */ Uint16 fade_length; /**< Duration of the fade. */ Uint16 fade_level; /**< Level at the end of the fade. */ } SDL_HapticCustom; /** * \brief The generic template for any haptic effect. * * All values max at 32767 (0x7FFF). Signed values also can be negative. * Time values unless specified otherwise are in milliseconds. * * You can also pass ::SDL_HAPTIC_INFINITY to length instead of a 0-32767 * value. Neither delay, interval, attack_length nor fade_length support * ::SDL_HAPTIC_INFINITY. Fade will also not be used since effect never ends. * * Additionally, the ::SDL_HAPTIC_RAMP effect does not support a duration of * ::SDL_HAPTIC_INFINITY. * * Button triggers may not be supported on all devices, it is advised to not * use them if possible. Buttons start at index 1 instead of index 0 like * the joystick. * * If both attack_length and fade_level are 0, the envelope is not used, * otherwise both values are used. * * Common parts: * \code * // Replay - All effects have this * Uint32 length; // Duration of effect (ms). * Uint16 delay; // Delay before starting effect. * * // Trigger - All effects have this * Uint16 button; // Button that triggers effect. * Uint16 interval; // How soon before effect can be triggered again. * * // Envelope - All effects except condition effects have this * Uint16 attack_length; // Duration of the attack (ms). * Uint16 attack_level; // Level at the start of the attack. * Uint16 fade_length; // Duration of the fade out (ms). * Uint16 fade_level; // Level at the end of the fade. * \endcode * * * Here we have an example of a constant effect evolution in time: * \verbatim Strength ^ | | effect level --> _________________ | / \ | / \ | / \ | / \ | attack_level --> | \ | | | <--- fade_level | +--------------------------------------------------> Time [--] [---] attack_length fade_length [------------------][-----------------------] delay length \endverbatim * * Note either the attack_level or the fade_level may be above the actual * effect level. * * \sa SDL_HapticConstant * \sa SDL_HapticPeriodic * \sa SDL_HapticCondition * \sa SDL_HapticRamp * \sa SDL_HapticLeftRight * \sa SDL_HapticCustom */ typedef union SDL_HapticEffect { /* Common for all force feedback effects */ Uint16 type; /**< Effect type. */ SDL_HapticConstant constant; /**< Constant effect. */ SDL_HapticPeriodic periodic; /**< Periodic effect. */ SDL_HapticCondition condition; /**< Condition effect. */ SDL_HapticRamp ramp; /**< Ramp effect. */ SDL_HapticLeftRight leftright; /**< Left/Right effect. */ SDL_HapticCustom custom; /**< Custom effect. */ } SDL_HapticEffect; /* Function prototypes */ /** * Count the number of haptic devices attached to the system. * * \returns the number of haptic devices detected on the system or a negative * error code on failure; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_HapticName */ extern DECLSPEC int SDLCALL SDL_NumHaptics(void); /** * Get the implementation dependent name of a haptic device. * * This can be called before any joysticks are opened. If no name can be * found, this function returns NULL. * * \param device_index index of the device to query. * \returns the name of the device or NULL on failure; call SDL_GetError() for * more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_NumHaptics */ extern DECLSPEC const char *SDLCALL SDL_HapticName(int device_index); /** * Open a haptic device for use. * * The index passed as an argument refers to the N'th haptic device on this * system. * * When opening a haptic device, its gain will be set to maximum and * autocenter will be disabled. To modify these values use SDL_HapticSetGain() * and SDL_HapticSetAutocenter(). * * \param device_index index of the device to open * \returns the device identifier or NULL on failure; call SDL_GetError() for * more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_HapticClose * \sa SDL_HapticIndex * \sa SDL_HapticOpenFromJoystick * \sa SDL_HapticOpenFromMouse * \sa SDL_HapticPause * \sa SDL_HapticSetAutocenter * \sa SDL_HapticSetGain * \sa SDL_HapticStopAll */ extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpen(int device_index); /** * Check if the haptic device at the designated index has been opened. * * \param device_index the index of the device to query * \returns 1 if it has been opened, 0 if it hasn't or on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_HapticIndex * \sa SDL_HapticOpen */ extern DECLSPEC int SDLCALL SDL_HapticOpened(int device_index); /** * Get the index of a haptic device. * * \param haptic the SDL_Haptic device to query * \returns the index of the specified haptic device or a negative error code * on failure; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_HapticOpen * \sa SDL_HapticOpened */ extern DECLSPEC int SDLCALL SDL_HapticIndex(SDL_Haptic * haptic); /** * Query whether or not the current mouse has haptic capabilities. * * \returns SDL_TRUE if the mouse is haptic or SDL_FALSE if it isn't. * * \since This function is available since SDL 2.0.0. * * \sa SDL_HapticOpenFromMouse */ extern DECLSPEC int SDLCALL SDL_MouseIsHaptic(void); /** * Try to open a haptic device from the current mouse. * * \returns the haptic device identifier or NULL on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_HapticOpen * \sa SDL_MouseIsHaptic */ extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpenFromMouse(void); /** * Query if a joystick has haptic features. * * \param joystick the SDL_Joystick to test for haptic capabilities * \returns SDL_TRUE if the joystick is haptic, SDL_FALSE if it isn't, or a * negative error code on failure; call SDL_GetError() for more * information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_HapticOpenFromJoystick */ extern DECLSPEC int SDLCALL SDL_JoystickIsHaptic(SDL_Joystick * joystick); /** * Open a haptic device for use from a joystick device. * * You must still close the haptic device separately. It will not be closed * with the joystick. * * When opened from a joystick you should first close the haptic device before * closing the joystick device. If not, on some implementations the haptic * device will also get unallocated and you'll be unable to use force feedback * on that device. * * \param joystick the SDL_Joystick to create a haptic device from * \returns a valid haptic device identifier on success or NULL on failure; * call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_HapticClose * \sa SDL_HapticOpen * \sa SDL_JoystickIsHaptic */ extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpenFromJoystick(SDL_Joystick * joystick); /** * Close a haptic device previously opened with SDL_HapticOpen(). * * \param haptic the SDL_Haptic device to close * * \since This function is available since SDL 2.0.0. * * \sa SDL_HapticOpen */ extern DECLSPEC void SDLCALL SDL_HapticClose(SDL_Haptic * haptic); /** * Get the number of effects a haptic device can store. * * On some platforms this isn't fully supported, and therefore is an * approximation. Always check to see if your created effect was actually * created and do not rely solely on SDL_HapticNumEffects(). * * \param haptic the SDL_Haptic device to query * \returns the number of effects the haptic device can store or a negative * error code on failure; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_HapticNumEffectsPlaying * \sa SDL_HapticQuery */ extern DECLSPEC int SDLCALL SDL_HapticNumEffects(SDL_Haptic * haptic); /** * Get the number of effects a haptic device can play at the same time. * * This is not supported on all platforms, but will always return a value. * * \param haptic the SDL_Haptic device to query maximum playing effects * \returns the number of effects the haptic device can play at the same time * or a negative error code on failure; call SDL_GetError() for more * information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_HapticNumEffects * \sa SDL_HapticQuery */ extern DECLSPEC int SDLCALL SDL_HapticNumEffectsPlaying(SDL_Haptic * haptic); /** * Get the haptic device's supported features in bitwise manner. * * \param haptic the SDL_Haptic device to query * \returns a list of supported haptic features in bitwise manner (OR'd), or 0 * on failure; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_HapticEffectSupported * \sa SDL_HapticNumEffects */ extern DECLSPEC unsigned int SDLCALL SDL_HapticQuery(SDL_Haptic * haptic); /** * Get the number of haptic axes the device has. * * The number of haptic axes might be useful if working with the * SDL_HapticDirection effect. * * \param haptic the SDL_Haptic device to query * \returns the number of axes on success or a negative error code on failure; * call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC int SDLCALL SDL_HapticNumAxes(SDL_Haptic * haptic); /** * Check to see if an effect is supported by a haptic device. * * \param haptic the SDL_Haptic device to query * \param effect the desired effect to query * \returns SDL_TRUE if effect is supported, SDL_FALSE if it isn't, or a * negative error code on failure; call SDL_GetError() for more * information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_HapticNewEffect * \sa SDL_HapticQuery */ extern DECLSPEC int SDLCALL SDL_HapticEffectSupported(SDL_Haptic * haptic, SDL_HapticEffect * effect); /** * Create a new haptic effect on a specified device. * * \param haptic an SDL_Haptic device to create the effect on * \param effect an SDL_HapticEffect structure containing the properties of * the effect to create * \returns the ID of the effect on success or a negative error code on * failure; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_HapticDestroyEffect * \sa SDL_HapticRunEffect * \sa SDL_HapticUpdateEffect */ extern DECLSPEC int SDLCALL SDL_HapticNewEffect(SDL_Haptic * haptic, SDL_HapticEffect * effect); /** * Update the properties of an effect. * * Can be used dynamically, although behavior when dynamically changing * direction may be strange. Specifically the effect may re-upload itself and * start playing from the start. You also cannot change the type either when * running SDL_HapticUpdateEffect(). * * \param haptic the SDL_Haptic device that has the effect * \param effect the identifier of the effect to update * \param data an SDL_HapticEffect structure containing the new effect * properties to use * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_HapticDestroyEffect * \sa SDL_HapticNewEffect * \sa SDL_HapticRunEffect */ extern DECLSPEC int SDLCALL SDL_HapticUpdateEffect(SDL_Haptic * haptic, int effect, SDL_HapticEffect * data); /** * Run the haptic effect on its associated haptic device. * * To repeat the effect over and over indefinitely, set `iterations` to * `SDL_HAPTIC_INFINITY`. (Repeats the envelope - attack and fade.) To make * one instance of the effect last indefinitely (so the effect does not fade), * set the effect's `length` in its structure/union to `SDL_HAPTIC_INFINITY` * instead. * * \param haptic the SDL_Haptic device to run the effect on * \param effect the ID of the haptic effect to run * \param iterations the number of iterations to run the effect; use * `SDL_HAPTIC_INFINITY` to repeat forever * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_HapticDestroyEffect * \sa SDL_HapticGetEffectStatus * \sa SDL_HapticStopEffect */ extern DECLSPEC int SDLCALL SDL_HapticRunEffect(SDL_Haptic * haptic, int effect, Uint32 iterations); /** * Stop the haptic effect on its associated haptic device. * * * * * \param haptic the SDL_Haptic device to stop the effect on * \param effect the ID of the haptic effect to stop * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_HapticDestroyEffect * \sa SDL_HapticRunEffect */ extern DECLSPEC int SDLCALL SDL_HapticStopEffect(SDL_Haptic * haptic, int effect); /** * Destroy a haptic effect on the device. * * This will stop the effect if it's running. Effects are automatically * destroyed when the device is closed. * * \param haptic the SDL_Haptic device to destroy the effect on * \param effect the ID of the haptic effect to destroy * * \since This function is available since SDL 2.0.0. * * \sa SDL_HapticNewEffect */ extern DECLSPEC void SDLCALL SDL_HapticDestroyEffect(SDL_Haptic * haptic, int effect); /** * Get the status of the current effect on the specified haptic device. * * Device must support the SDL_HAPTIC_STATUS feature. * * \param haptic the SDL_Haptic device to query for the effect status on * \param effect the ID of the haptic effect to query its status * \returns 0 if it isn't playing, 1 if it is playing, or a negative error * code on failure; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_HapticRunEffect * \sa SDL_HapticStopEffect */ extern DECLSPEC int SDLCALL SDL_HapticGetEffectStatus(SDL_Haptic * haptic, int effect); /** * Set the global gain of the specified haptic device. * * Device must support the SDL_HAPTIC_GAIN feature. * * The user may specify the maximum gain by setting the environment variable * `SDL_HAPTIC_GAIN_MAX` which should be between 0 and 100. All calls to * SDL_HapticSetGain() will scale linearly using `SDL_HAPTIC_GAIN_MAX` as the * maximum. * * \param haptic the SDL_Haptic device to set the gain on * \param gain value to set the gain to, should be between 0 and 100 (0 - 100) * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_HapticQuery */ extern DECLSPEC int SDLCALL SDL_HapticSetGain(SDL_Haptic * haptic, int gain); /** * Set the global autocenter of the device. * * Autocenter should be between 0 and 100. Setting it to 0 will disable * autocentering. * * Device must support the SDL_HAPTIC_AUTOCENTER feature. * * \param haptic the SDL_Haptic device to set autocentering on * \param autocenter value to set autocenter to (0-100) * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_HapticQuery */ extern DECLSPEC int SDLCALL SDL_HapticSetAutocenter(SDL_Haptic * haptic, int autocenter); /** * Pause a haptic device. * * Device must support the `SDL_HAPTIC_PAUSE` feature. Call * SDL_HapticUnpause() to resume playback. * * Do not modify the effects nor add new ones while the device is paused. That * can cause all sorts of weird errors. * * \param haptic the SDL_Haptic device to pause * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_HapticUnpause */ extern DECLSPEC int SDLCALL SDL_HapticPause(SDL_Haptic * haptic); /** * Unpause a haptic device. * * Call to unpause after SDL_HapticPause(). * * \param haptic the SDL_Haptic device to unpause * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_HapticPause */ extern DECLSPEC int SDLCALL SDL_HapticUnpause(SDL_Haptic * haptic); /** * Stop all the currently playing effects on a haptic device. * * \param haptic the SDL_Haptic device to stop * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC int SDLCALL SDL_HapticStopAll(SDL_Haptic * haptic); /** * Check whether rumble is supported on a haptic device. * * \param haptic haptic device to check for rumble support * \returns SDL_TRUE if effect is supported, SDL_FALSE if it isn't, or a * negative error code on failure; call SDL_GetError() for more * information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_HapticRumbleInit * \sa SDL_HapticRumblePlay * \sa SDL_HapticRumbleStop */ extern DECLSPEC int SDLCALL SDL_HapticRumbleSupported(SDL_Haptic * haptic); /** * Initialize a haptic device for simple rumble playback. * * \param haptic the haptic device to initialize for simple rumble playback * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_HapticOpen * \sa SDL_HapticRumblePlay * \sa SDL_HapticRumbleStop * \sa SDL_HapticRumbleSupported */ extern DECLSPEC int SDLCALL SDL_HapticRumbleInit(SDL_Haptic * haptic); /** * Run a simple rumble effect on a haptic device. * * \param haptic the haptic device to play the rumble effect on * \param strength strength of the rumble to play as a 0-1 float value * \param length length of the rumble to play in milliseconds * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_HapticRumbleInit * \sa SDL_HapticRumbleStop * \sa SDL_HapticRumbleSupported */ extern DECLSPEC int SDLCALL SDL_HapticRumblePlay(SDL_Haptic * haptic, float strength, Uint32 length ); /** * Stop the simple rumble on a haptic device. * * \param haptic the haptic device to stop the rumble effect on * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_HapticRumbleInit * \sa SDL_HapticRumblePlay * \sa SDL_HapticRumbleSupported */ extern DECLSPEC int SDLCALL SDL_HapticRumbleStop(SDL_Haptic * haptic); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_haptic_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_hidapi.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_hidapi.h * * Header file for SDL HIDAPI functions. * * This is an adaptation of the original HIDAPI interface by Alan Ott, * and includes source code licensed under the following BSD license: * Copyright (c) 2010, Alan Ott, Signal 11 Software All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Signal 11 Software nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * If you would like a version of SDL without this code, you can build SDL * with SDL_HIDAPI_DISABLED defined to 1. You might want to do this for example * on iOS or tvOS to avoid a dependency on the CoreBluetooth framework. */ #ifndef SDL_hidapi_h_ #define SDL_hidapi_h_ #include "SDL_stdinc.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** * \brief A handle representing an open HID device */ struct SDL_hid_device_; typedef struct SDL_hid_device_ SDL_hid_device; /**< opaque hidapi structure */ /** hidapi info structure */ /** * \brief Information about a connected HID device */ typedef struct SDL_hid_device_info { /** Platform-specific device path */ char *path; /** Device Vendor ID */ unsigned short vendor_id; /** Device Product ID */ unsigned short product_id; /** Serial Number */ wchar_t *serial_number; /** Device Release Number in binary-coded decimal, also known as Device Version Number */ unsigned short release_number; /** Manufacturer String */ wchar_t *manufacturer_string; /** Product string */ wchar_t *product_string; /** Usage Page for this Device/Interface (Windows/Mac only). */ unsigned short usage_page; /** Usage for this Device/Interface (Windows/Mac only).*/ unsigned short usage; /** The USB interface which this logical device represents. * Valid on both Linux implementations in all cases. * Valid on the Windows implementation only if the device contains more than one interface. */ int interface_number; /** Additional information about the USB interface. Valid on libusb and Android implementations. */ int interface_class; int interface_subclass; int interface_protocol; /** Pointer to the next device */ struct SDL_hid_device_info *next; } SDL_hid_device_info; /** * Initialize the HIDAPI library. * * This function initializes the HIDAPI library. Calling it is not strictly * necessary, as it will be called automatically by SDL_hid_enumerate() and * any of the SDL_hid_open_*() functions if it is needed. This function should * be called at the beginning of execution however, if there is a chance of * HIDAPI handles being opened by different threads simultaneously. * * Each call to this function should have a matching call to SDL_hid_exit() * * \returns 0 on success and -1 on error. * * \since This function is available since SDL 2.0.18. * * \sa SDL_hid_exit */ extern DECLSPEC int SDLCALL SDL_hid_init(void); /** * Finalize the HIDAPI library. * * This function frees all of the static data associated with HIDAPI. It * should be called at the end of execution to avoid memory leaks. * * \returns 0 on success and -1 on error. * * \since This function is available since SDL 2.0.18. * * \sa SDL_hid_init */ extern DECLSPEC int SDLCALL SDL_hid_exit(void); /** * Check to see if devices may have been added or removed. * * Enumerating the HID devices is an expensive operation, so you can call this * to see if there have been any system device changes since the last call to * this function. A change in the counter returned doesn't necessarily mean * that anything has changed, but you can call SDL_hid_enumerate() to get an * updated device list. * * Calling this function for the first time may cause a thread or other system * resource to be allocated to track device change notifications. * * \returns a change counter that is incremented with each potential device * change, or 0 if device change detection isn't available. * * \since This function is available since SDL 2.0.18. * * \sa SDL_hid_enumerate */ extern DECLSPEC Uint32 SDLCALL SDL_hid_device_change_count(void); /** * Enumerate the HID Devices. * * This function returns a linked list of all the HID devices attached to the * system which match vendor_id and product_id. If `vendor_id` is set to 0 * then any vendor matches. If `product_id` is set to 0 then any product * matches. If `vendor_id` and `product_id` are both set to 0, then all HID * devices will be returned. * * \param vendor_id The Vendor ID (VID) of the types of device to open. * \param product_id The Product ID (PID) of the types of device to open. * \returns a pointer to a linked list of type SDL_hid_device_info, containing * information about the HID devices attached to the system, or NULL * in the case of failure. Free this linked list by calling * SDL_hid_free_enumeration(). * * \since This function is available since SDL 2.0.18. * * \sa SDL_hid_device_change_count */ extern DECLSPEC SDL_hid_device_info * SDLCALL SDL_hid_enumerate(unsigned short vendor_id, unsigned short product_id); /** * Free an enumeration Linked List * * This function frees a linked list created by SDL_hid_enumerate(). * * \param devs Pointer to a list of struct_device returned from * SDL_hid_enumerate(). * * \since This function is available since SDL 2.0.18. */ extern DECLSPEC void SDLCALL SDL_hid_free_enumeration(SDL_hid_device_info *devs); /** * Open a HID device using a Vendor ID (VID), Product ID (PID) and optionally * a serial number. * * If `serial_number` is NULL, the first device with the specified VID and PID * is opened. * * \param vendor_id The Vendor ID (VID) of the device to open. * \param product_id The Product ID (PID) of the device to open. * \param serial_number The Serial Number of the device to open (Optionally * NULL). * \returns a pointer to a SDL_hid_device object on success or NULL on * failure. * * \since This function is available since SDL 2.0.18. */ extern DECLSPEC SDL_hid_device * SDLCALL SDL_hid_open(unsigned short vendor_id, unsigned short product_id, const wchar_t *serial_number); /** * Open a HID device by its path name. * * The path name be determined by calling SDL_hid_enumerate(), or a * platform-specific path name can be used (eg: /dev/hidraw0 on Linux). * * \param path The path name of the device to open * \returns a pointer to a SDL_hid_device object on success or NULL on * failure. * * \since This function is available since SDL 2.0.18. */ extern DECLSPEC SDL_hid_device * SDLCALL SDL_hid_open_path(const char *path, int bExclusive /* = false */); /** * Write an Output report to a HID device. * * The first byte of `data` must contain the Report ID. For devices which only * support a single report, this must be set to 0x0. The remaining bytes * contain the report data. Since the Report ID is mandatory, calls to * SDL_hid_write() will always contain one more byte than the report contains. * For example, if a hid report is 16 bytes long, 17 bytes must be passed to * SDL_hid_write(), the Report ID (or 0x0, for devices with a single report), * followed by the report data (16 bytes). In this example, the length passed * in would be 17. * * SDL_hid_write() will send the data on the first OUT endpoint, if one * exists. If it does not, it will send the data through the Control Endpoint * (Endpoint 0). * * \param dev A device handle returned from SDL_hid_open(). * \param data The data to send, including the report number as the first * byte. * \param length The length in bytes of the data to send. * \returns the actual number of bytes written and -1 on error. * * \since This function is available since SDL 2.0.18. */ extern DECLSPEC int SDLCALL SDL_hid_write(SDL_hid_device *dev, const unsigned char *data, size_t length); /** * Read an Input report from a HID device with timeout. * * Input reports are returned to the host through the INTERRUPT IN endpoint. * The first byte will contain the Report number if the device uses numbered * reports. * * \param dev A device handle returned from SDL_hid_open(). * \param data A buffer to put the read data into. * \param length The number of bytes to read. For devices with multiple * reports, make sure to read an extra byte for the report * number. * \param milliseconds timeout in milliseconds or -1 for blocking wait. * \returns the actual number of bytes read and -1 on error. If no packet was * available to be read within the timeout period, this function * returns 0. * * \since This function is available since SDL 2.0.18. */ extern DECLSPEC int SDLCALL SDL_hid_read_timeout(SDL_hid_device *dev, unsigned char *data, size_t length, int milliseconds); /** * Read an Input report from a HID device. * * Input reports are returned to the host through the INTERRUPT IN endpoint. * The first byte will contain the Report number if the device uses numbered * reports. * * \param dev A device handle returned from SDL_hid_open(). * \param data A buffer to put the read data into. * \param length The number of bytes to read. For devices with multiple * reports, make sure to read an extra byte for the report * number. * \returns the actual number of bytes read and -1 on error. If no packet was * available to be read and the handle is in non-blocking mode, this * function returns 0. * * \since This function is available since SDL 2.0.18. */ extern DECLSPEC int SDLCALL SDL_hid_read(SDL_hid_device *dev, unsigned char *data, size_t length); /** * Set the device handle to be non-blocking. * * In non-blocking mode calls to SDL_hid_read() will return immediately with a * value of 0 if there is no data to be read. In blocking mode, SDL_hid_read() * will wait (block) until there is data to read before returning. * * Nonblocking can be turned on and off at any time. * * \param dev A device handle returned from SDL_hid_open(). * \param nonblock enable or not the nonblocking reads - 1 to enable * nonblocking - 0 to disable nonblocking. * \returns 0 on success and -1 on error. * * \since This function is available since SDL 2.0.18. */ extern DECLSPEC int SDLCALL SDL_hid_set_nonblocking(SDL_hid_device *dev, int nonblock); /** * Send a Feature report to the device. * * Feature reports are sent over the Control endpoint as a Set_Report * transfer. The first byte of `data` must contain the Report ID. For devices * which only support a single report, this must be set to 0x0. The remaining * bytes contain the report data. Since the Report ID is mandatory, calls to * SDL_hid_send_feature_report() will always contain one more byte than the * report contains. For example, if a hid report is 16 bytes long, 17 bytes * must be passed to SDL_hid_send_feature_report(): the Report ID (or 0x0, for * devices which do not use numbered reports), followed by the report data (16 * bytes). In this example, the length passed in would be 17. * * \param dev A device handle returned from SDL_hid_open(). * \param data The data to send, including the report number as the first * byte. * \param length The length in bytes of the data to send, including the report * number. * \returns the actual number of bytes written and -1 on error. * * \since This function is available since SDL 2.0.18. */ extern DECLSPEC int SDLCALL SDL_hid_send_feature_report(SDL_hid_device *dev, const unsigned char *data, size_t length); /** * Get a feature report from a HID device. * * Set the first byte of `data` to the Report ID of the report to be read. * Make sure to allow space for this extra byte in `data`. Upon return, the * first byte will still contain the Report ID, and the report data will start * in data[1]. * * \param dev A device handle returned from SDL_hid_open(). * \param data A buffer to put the read data into, including the Report ID. * Set the first byte of `data` to the Report ID of the report to * be read, or set it to zero if your device does not use numbered * reports. * \param length The number of bytes to read, including an extra byte for the * report ID. The buffer can be longer than the actual report. * \returns the number of bytes read plus one for the report ID (which is * still in the first byte), or -1 on error. * * \since This function is available since SDL 2.0.18. */ extern DECLSPEC int SDLCALL SDL_hid_get_feature_report(SDL_hid_device *dev, unsigned char *data, size_t length); /** * Close a HID device. * * \param dev A device handle returned from SDL_hid_open(). * * \since This function is available since SDL 2.0.18. */ extern DECLSPEC void SDLCALL SDL_hid_close(SDL_hid_device *dev); /** * Get The Manufacturer String from a HID device. * * \param dev A device handle returned from SDL_hid_open(). * \param string A wide string buffer to put the data into. * \param maxlen The length of the buffer in multiples of wchar_t. * \returns 0 on success and -1 on error. * * \since This function is available since SDL 2.0.18. */ extern DECLSPEC int SDLCALL SDL_hid_get_manufacturer_string(SDL_hid_device *dev, wchar_t *string, size_t maxlen); /** * Get The Product String from a HID device. * * \param dev A device handle returned from SDL_hid_open(). * \param string A wide string buffer to put the data into. * \param maxlen The length of the buffer in multiples of wchar_t. * \returns 0 on success and -1 on error. * * \since This function is available since SDL 2.0.18. */ extern DECLSPEC int SDLCALL SDL_hid_get_product_string(SDL_hid_device *dev, wchar_t *string, size_t maxlen); /** * Get The Serial Number String from a HID device. * * \param dev A device handle returned from SDL_hid_open(). * \param string A wide string buffer to put the data into. * \param maxlen The length of the buffer in multiples of wchar_t. * \returns 0 on success and -1 on error. * * \since This function is available since SDL 2.0.18. */ extern DECLSPEC int SDLCALL SDL_hid_get_serial_number_string(SDL_hid_device *dev, wchar_t *string, size_t maxlen); /** * Get a string from a HID device, based on its string index. * * \param dev A device handle returned from SDL_hid_open(). * \param string_index The index of the string to get. * \param string A wide string buffer to put the data into. * \param maxlen The length of the buffer in multiples of wchar_t. * \returns 0 on success and -1 on error. * * \since This function is available since SDL 2.0.18. */ extern DECLSPEC int SDLCALL SDL_hid_get_indexed_string(SDL_hid_device *dev, int string_index, wchar_t *string, size_t maxlen); /** * Start or stop a BLE scan on iOS and tvOS to pair Steam Controllers * * \param active SDL_TRUE to start the scan, SDL_FALSE to stop the scan * * \since This function is available since SDL 2.0.18. */ extern DECLSPEC void SDLCALL SDL_hid_ble_scan(SDL_bool active); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_hidapi_h_ */ /* vi: set sts=4 ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_hints.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_hints.h * * Official documentation for SDL configuration variables * * This file contains functions to set and get configuration hints, * as well as listing each of them alphabetically. * * The convention for naming hints is SDL_HINT_X, where "SDL_X" is * the environment variable that can be used to override the default. * * In general these hints are just that - they may or may not be * supported or applicable on any given platform, but they provide * a way for an application or user to give the library a hint as * to how they would like the library to work. */ #ifndef SDL_hints_h_ #define SDL_hints_h_ #include "SDL_stdinc.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** * \brief A variable controlling whether the Android / iOS built-in * accelerometer should be listed as a joystick device. * * This variable can be set to the following values: * "0" - The accelerometer is not listed as a joystick * "1" - The accelerometer is available as a 3 axis joystick (the default). */ #define SDL_HINT_ACCELEROMETER_AS_JOYSTICK "SDL_ACCELEROMETER_AS_JOYSTICK" /** * \brief Specify the behavior of Alt+Tab while the keyboard is grabbed. * * By default, SDL emulates Alt+Tab functionality while the keyboard is grabbed * and your window is full-screen. This prevents the user from getting stuck in * your application if you've enabled keyboard grab. * * The variable can be set to the following values: * "0" - SDL will not handle Alt+Tab. Your application is responsible for handling Alt+Tab while the keyboard is grabbed. * "1" - SDL will minimize your window when Alt+Tab is pressed (default) */ #define SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED "SDL_ALLOW_ALT_TAB_WHILE_GRABBED" /** * \brief If set to "0" then never set the top most bit on a SDL Window, even if the video mode expects it. * This is a debugging aid for developers and not expected to be used by end users. The default is "1" * * This variable can be set to the following values: * "0" - don't allow topmost * "1" - allow topmost */ #define SDL_HINT_ALLOW_TOPMOST "SDL_ALLOW_TOPMOST" /** * \brief Android APK expansion main file version. Should be a string number like "1", "2" etc. * * Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION. * * If both hints were set then SDL_RWFromFile() will look into expansion files * after a given relative path was not found in the internal storage and assets. * * By default this hint is not set and the APK expansion files are not searched. */ #define SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION "SDL_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION" /** * \brief Android APK expansion patch file version. Should be a string number like "1", "2" etc. * * Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION. * * If both hints were set then SDL_RWFromFile() will look into expansion files * after a given relative path was not found in the internal storage and assets. * * By default this hint is not set and the APK expansion files are not searched. */ #define SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION "SDL_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION" /** * \brief A variable to control whether the event loop will block itself when the app is paused. * * The variable can be set to the following values: * "0" - Non blocking. * "1" - Blocking. (default) * * The value should be set before SDL is initialized. */ #define SDL_HINT_ANDROID_BLOCK_ON_PAUSE "SDL_ANDROID_BLOCK_ON_PAUSE" /** * \brief A variable to control whether SDL will pause audio in background * (Requires SDL_ANDROID_BLOCK_ON_PAUSE as "Non blocking") * * The variable can be set to the following values: * "0" - Non paused. * "1" - Paused. (default) * * The value should be set before SDL is initialized. */ #define SDL_HINT_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO "SDL_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO" /** * \brief A variable to control whether we trap the Android back button to handle it manually. * This is necessary for the right mouse button to work on some Android devices, or * to be able to trap the back button for use in your code reliably. If set to true, * the back button will show up as an SDL_KEYDOWN / SDL_KEYUP pair with a keycode of * SDL_SCANCODE_AC_BACK. * * The variable can be set to the following values: * "0" - Back button will be handled as usual for system. (default) * "1" - Back button will be trapped, allowing you to handle the key press * manually. (This will also let right mouse click work on systems * where the right mouse button functions as back.) * * The value of this hint is used at runtime, so it can be changed at any time. */ #define SDL_HINT_ANDROID_TRAP_BACK_BUTTON "SDL_ANDROID_TRAP_BACK_BUTTON" /** * \brief Specify an application name. * * This hint lets you specify the application name sent to the OS when * required. For example, this will often appear in volume control applets for * audio streams, and in lists of applications which are inhibiting the * screensaver. You should use a string that describes your program ("My Game * 2: The Revenge") * * Setting this to "" or leaving it unset will have SDL use a reasonable * default: probably the application's name or "SDL Application" if SDL * doesn't have any better information. * * Note that, for audio streams, this can be overridden with * SDL_HINT_AUDIO_DEVICE_APP_NAME. * * On targets where this is not supported, this hint does nothing. */ #define SDL_HINT_APP_NAME "SDL_APP_NAME" /** * \brief A variable controlling whether controllers used with the Apple TV * generate UI events. * * When UI events are generated by controller input, the app will be * backgrounded when the Apple TV remote's menu button is pressed, and when the * pause or B buttons on gamepads are pressed. * * More information about properly making use of controllers for the Apple TV * can be found here: * https://developer.apple.com/tvos/human-interface-guidelines/remote-and-controllers/ * * This variable can be set to the following values: * "0" - Controller input does not generate UI events (the default). * "1" - Controller input generates UI events. */ #define SDL_HINT_APPLE_TV_CONTROLLER_UI_EVENTS "SDL_APPLE_TV_CONTROLLER_UI_EVENTS" /** * \brief A variable controlling whether the Apple TV remote's joystick axes * will automatically match the rotation of the remote. * * This variable can be set to the following values: * "0" - Remote orientation does not affect joystick axes (the default). * "1" - Joystick axes are based on the orientation of the remote. */ #define SDL_HINT_APPLE_TV_REMOTE_ALLOW_ROTATION "SDL_APPLE_TV_REMOTE_ALLOW_ROTATION" /** * \brief A variable controlling the audio category on iOS and Mac OS X * * This variable can be set to the following values: * * "ambient" - Use the AVAudioSessionCategoryAmbient audio category, will be muted by the phone mute switch (default) * "playback" - Use the AVAudioSessionCategoryPlayback category * * For more information, see Apple's documentation: * https://developer.apple.com/library/content/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/AudioSessionCategoriesandModes/AudioSessionCategoriesandModes.html */ #define SDL_HINT_AUDIO_CATEGORY "SDL_AUDIO_CATEGORY" /** * \brief Specify an application name for an audio device. * * Some audio backends (such as PulseAudio) allow you to describe your audio * stream. Among other things, this description might show up in a system * control panel that lets the user adjust the volume on specific audio * streams instead of using one giant master volume slider. * * This hints lets you transmit that information to the OS. The contents of * this hint are used while opening an audio device. You should use a string * that describes your program ("My Game 2: The Revenge") * * Setting this to "" or leaving it unset will have SDL use a reasonable * default: this will be the name set with SDL_HINT_APP_NAME, if that hint is * set. Otherwise, it'll probably the application's name or "SDL Application" * if SDL doesn't have any better information. * * On targets where this is not supported, this hint does nothing. */ #define SDL_HINT_AUDIO_DEVICE_APP_NAME "SDL_AUDIO_DEVICE_APP_NAME" /** * \brief Specify an application name for an audio device. * * Some audio backends (such as PulseAudio) allow you to describe your audio * stream. Among other things, this description might show up in a system * control panel that lets the user adjust the volume on specific audio * streams instead of using one giant master volume slider. * * This hints lets you transmit that information to the OS. The contents of * this hint are used while opening an audio device. You should use a string * that describes your what your program is playing ("audio stream" is * probably sufficient in many cases, but this could be useful for something * like "team chat" if you have a headset playing VoIP audio separately). * * Setting this to "" or leaving it unset will have SDL use a reasonable * default: "audio stream" or something similar. * * On targets where this is not supported, this hint does nothing. */ #define SDL_HINT_AUDIO_DEVICE_STREAM_NAME "SDL_AUDIO_DEVICE_STREAM_NAME" /** * \brief Specify an application role for an audio device. * * Some audio backends (such as Pipewire) allow you to describe the role of * your audio stream. Among other things, this description might show up in * a system control panel or software for displaying and manipulating media * playback/capture graphs. * * This hints lets you transmit that information to the OS. The contents of * this hint are used while opening an audio device. You should use a string * that describes your what your program is playing (Game, Music, Movie, * etc...). * * Setting this to "" or leaving it unset will have SDL use a reasonable * default: "Game" or something similar. * * On targets where this is not supported, this hint does nothing. */ #define SDL_HINT_AUDIO_DEVICE_STREAM_ROLE "SDL_AUDIO_DEVICE_STREAM_ROLE" /** * \brief A variable controlling speed/quality tradeoff of audio resampling. * * If available, SDL can use libsamplerate ( http://www.mega-nerd.com/SRC/ ) * to handle audio resampling. There are different resampling modes available * that produce different levels of quality, using more CPU. * * If this hint isn't specified to a valid setting, or libsamplerate isn't * available, SDL will use the default, internal resampling algorithm. * * As of SDL 2.26, SDL_ConvertAudio() respects this hint when libsamplerate is available. * * This hint is currently only checked at audio subsystem initialization. * * This variable can be set to the following values: * * "0" or "default" - Use SDL's internal resampling (Default when not set - low quality, fast) * "1" or "fast" - Use fast, slightly higher quality resampling, if available * "2" or "medium" - Use medium quality resampling, if available * "3" or "best" - Use high quality resampling, if available */ #define SDL_HINT_AUDIO_RESAMPLING_MODE "SDL_AUDIO_RESAMPLING_MODE" /** * \brief A variable controlling whether SDL updates joystick state when getting input events * * This variable can be set to the following values: * * "0" - You'll call SDL_JoystickUpdate() manually * "1" - SDL will automatically call SDL_JoystickUpdate() (default) * * This hint can be toggled on and off at runtime. */ #define SDL_HINT_AUTO_UPDATE_JOYSTICKS "SDL_AUTO_UPDATE_JOYSTICKS" /** * \brief A variable controlling whether SDL updates sensor state when getting input events * * This variable can be set to the following values: * * "0" - You'll call SDL_SensorUpdate() manually * "1" - SDL will automatically call SDL_SensorUpdate() (default) * * This hint can be toggled on and off at runtime. */ #define SDL_HINT_AUTO_UPDATE_SENSORS "SDL_AUTO_UPDATE_SENSORS" /** * \brief Prevent SDL from using version 4 of the bitmap header when saving BMPs. * * The bitmap header version 4 is required for proper alpha channel support and * SDL will use it when required. Should this not be desired, this hint can * force the use of the 40 byte header version which is supported everywhere. * * The variable can be set to the following values: * "0" - Surfaces with a colorkey or an alpha channel are saved to a * 32-bit BMP file with an alpha mask. SDL will use the bitmap * header version 4 and set the alpha mask accordingly. * "1" - Surfaces with a colorkey or an alpha channel are saved to a * 32-bit BMP file without an alpha mask. The alpha channel data * will be in the file, but applications are going to ignore it. * * The default value is "0". */ #define SDL_HINT_BMP_SAVE_LEGACY_FORMAT "SDL_BMP_SAVE_LEGACY_FORMAT" /** * \brief Override for SDL_GetDisplayUsableBounds() * * If set, this hint will override the expected results for * SDL_GetDisplayUsableBounds() for display index 0. Generally you don't want * to do this, but this allows an embedded system to request that some of the * screen be reserved for other uses when paired with a well-behaved * application. * * The contents of this hint must be 4 comma-separated integers, the first * is the bounds x, then y, width and height, in that order. */ #define SDL_HINT_DISPLAY_USABLE_BOUNDS "SDL_DISPLAY_USABLE_BOUNDS" /** * \brief Disable giving back control to the browser automatically * when running with asyncify * * With -s ASYNCIFY, SDL2 calls emscripten_sleep during operations * such as refreshing the screen or polling events. * * This hint only applies to the emscripten platform * * The variable can be set to the following values: * "0" - Disable emscripten_sleep calls (if you give back browser control manually or use asyncify for other purposes) * "1" - Enable emscripten_sleep calls (the default) */ #define SDL_HINT_EMSCRIPTEN_ASYNCIFY "SDL_EMSCRIPTEN_ASYNCIFY" /** * \brief override the binding element for keyboard inputs for Emscripten builds * * This hint only applies to the emscripten platform * * The variable can be one of * "#window" - The javascript window object (this is the default) * "#document" - The javascript document object * "#screen" - the javascript window.screen object * "#canvas" - the WebGL canvas element * any other string without a leading # sign applies to the element on the page with that ID. */ #define SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT "SDL_EMSCRIPTEN_KEYBOARD_ELEMENT" /** * \brief A variable that controls whether the on-screen keyboard should be shown when text input is active * * The variable can be set to the following values: * "0" - Do not show the on-screen keyboard * "1" - Show the on-screen keyboard * * The default value is "1". This hint must be set before text input is activated. */ #define SDL_HINT_ENABLE_SCREEN_KEYBOARD "SDL_ENABLE_SCREEN_KEYBOARD" /** * \brief A variable that controls whether Steam Controllers should be exposed using the SDL joystick and game controller APIs * * The variable can be set to the following values: * "0" - Do not scan for Steam Controllers * "1" - Scan for Steam Controllers (the default) * * The default value is "1". This hint must be set before initializing the joystick subsystem. */ #define SDL_HINT_ENABLE_STEAM_CONTROLLERS "SDL_ENABLE_STEAM_CONTROLLERS" /** * \brief A variable controlling verbosity of the logging of SDL events pushed onto the internal queue. * * This variable can be set to the following values, from least to most verbose: * * "0" - Don't log any events (default) * "1" - Log most events (other than the really spammy ones). * "2" - Include mouse and finger motion events. * "3" - Include SDL_SysWMEvent events. * * This is generally meant to be used to debug SDL itself, but can be useful * for application developers that need better visibility into what is going * on in the event queue. Logged events are sent through SDL_Log(), which * means by default they appear on stdout on most platforms or maybe * OutputDebugString() on Windows, and can be funneled by the app with * SDL_LogSetOutputFunction(), etc. * * This hint can be toggled on and off at runtime, if you only need to log * events for a small subset of program execution. */ #define SDL_HINT_EVENT_LOGGING "SDL_EVENT_LOGGING" /** * \brief A variable controlling whether raising the window should be done more forcefully * * This variable can be set to the following values: * "0" - No forcing (the default) * "1" - Extra level of forcing * * At present, this is only an issue under MS Windows, which makes it nearly impossible to * programmatically move a window to the foreground, for "security" reasons. See * http://stackoverflow.com/a/34414846 for a discussion. */ #define SDL_HINT_FORCE_RAISEWINDOW "SDL_HINT_FORCE_RAISEWINDOW" /** * \brief A variable controlling how 3D acceleration is used to accelerate the SDL screen surface. * * SDL can try to accelerate the SDL screen surface by using streaming * textures with a 3D rendering engine. This variable controls whether and * how this is done. * * This variable can be set to the following values: * "0" - Disable 3D acceleration * "1" - Enable 3D acceleration, using the default renderer. * "X" - Enable 3D acceleration, using X where X is one of the valid rendering drivers. (e.g. "direct3d", "opengl", etc.) * * By default SDL tries to make a best guess for each platform whether * to use acceleration or not. */ #define SDL_HINT_FRAMEBUFFER_ACCELERATION "SDL_FRAMEBUFFER_ACCELERATION" /** * \brief A variable that lets you manually hint extra gamecontroller db entries. * * The variable should be newline delimited rows of gamecontroller config data, see SDL_gamecontroller.h * * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) * You can update mappings after the system is initialized with SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping() */ #define SDL_HINT_GAMECONTROLLERCONFIG "SDL_GAMECONTROLLERCONFIG" /** * \brief A variable that lets you provide a file with extra gamecontroller db entries. * * The file should contain lines of gamecontroller config data, see SDL_gamecontroller.h * * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) * You can update mappings after the system is initialized with SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping() */ #define SDL_HINT_GAMECONTROLLERCONFIG_FILE "SDL_GAMECONTROLLERCONFIG_FILE" /** * \brief A variable that overrides the automatic controller type detection * * The variable should be comma separated entries, in the form: VID/PID=type * * The VID and PID should be hexadecimal with exactly 4 digits, e.g. 0x00fd * * The type should be one of: * Xbox360 * XboxOne * PS3 * PS4 * PS5 * SwitchPro * * This hint affects what driver is used, and must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) */ #define SDL_HINT_GAMECONTROLLERTYPE "SDL_GAMECONTROLLERTYPE" /** * \brief A variable containing a list of devices to skip when scanning for game controllers. * * The format of the string is a comma separated list of USB VID/PID pairs * in hexadecimal form, e.g. * * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * * The variable can also take the form of @file, in which case the named * file will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES "SDL_GAMECONTROLLER_IGNORE_DEVICES" /** * \brief If set, all devices will be skipped when scanning for game controllers except for the ones listed in this variable. * * The format of the string is a comma separated list of USB VID/PID pairs * in hexadecimal form, e.g. * * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * * The variable can also take the form of @file, in which case the named * file will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT "SDL_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT" /** * \brief If set, game controller face buttons report their values according to their labels instead of their positional layout. * * For example, on Nintendo Switch controllers, normally you'd get: * * (Y) * (X) (B) * (A) * * but if this hint is set, you'll get: * * (X) * (Y) (A) * (B) * * The variable can be set to the following values: * "0" - Report the face buttons by position, as though they were on an Xbox controller. * "1" - Report the face buttons by label instead of position * * The default value is "1". This hint may be set at any time. */ #define SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS "SDL_GAMECONTROLLER_USE_BUTTON_LABELS" /** * \brief A variable controlling whether grabbing input grabs the keyboard * * This variable can be set to the following values: * "0" - Grab will affect only the mouse * "1" - Grab will affect mouse and keyboard * * By default SDL will not grab the keyboard so system shortcuts still work. */ #define SDL_HINT_GRAB_KEYBOARD "SDL_GRAB_KEYBOARD" /** * \brief A variable containing a list of devices to ignore in SDL_hid_enumerate() * * For example, to ignore the Shanwan DS3 controller and any Valve controller, you might * have the string "0x2563/0x0523,0x28de/0x0000" */ #define SDL_HINT_HIDAPI_IGNORE_DEVICES "SDL_HIDAPI_IGNORE_DEVICES" /** * \brief A variable controlling whether the idle timer is disabled on iOS. * * When an iOS app does not receive touches for some time, the screen is * dimmed automatically. For games where the accelerometer is the only input * this is problematic. This functionality can be disabled by setting this * hint. * * As of SDL 2.0.4, SDL_EnableScreenSaver() and SDL_DisableScreenSaver() * accomplish the same thing on iOS. They should be preferred over this hint. * * This variable can be set to the following values: * "0" - Enable idle timer * "1" - Disable idle timer */ #define SDL_HINT_IDLE_TIMER_DISABLED "SDL_IOS_IDLE_TIMER_DISABLED" /** * \brief A variable to control whether certain IMEs should handle text editing internally instead of sending SDL_TEXTEDITING events. * * The variable can be set to the following values: * "0" - SDL_TEXTEDITING events are sent, and it is the application's * responsibility to render the text from these events and * differentiate it somehow from committed text. (default) * "1" - If supported by the IME then SDL_TEXTEDITING events are not sent, * and text that is being composed will be rendered in its own UI. */ #define SDL_HINT_IME_INTERNAL_EDITING "SDL_IME_INTERNAL_EDITING" /** * \brief A variable to control whether certain IMEs should show native UI components (such as the Candidate List) instead of suppressing them. * * The variable can be set to the following values: * "0" - Native UI components are not display. (default) * "1" - Native UI components are displayed. */ #define SDL_HINT_IME_SHOW_UI "SDL_IME_SHOW_UI" /** * \brief A variable to control if extended IME text support is enabled. * If enabled then SDL_TextEditingExtEvent will be issued if the text would be truncated otherwise. * Additionally SDL_TextInputEvent will be dispatched multiple times so that it is not truncated. * * The variable can be set to the following values: * "0" - Legacy behavior. Text can be truncated, no heap allocations. (default) * "1" - Modern behavior. */ #define SDL_HINT_IME_SUPPORT_EXTENDED_TEXT "SDL_IME_SUPPORT_EXTENDED_TEXT" /** * \brief A variable controlling whether the home indicator bar on iPhone X * should be hidden. * * This variable can be set to the following values: * "0" - The indicator bar is not hidden (default for windowed applications) * "1" - The indicator bar is hidden and is shown when the screen is touched (useful for movie playback applications) * "2" - The indicator bar is dim and the first swipe makes it visible and the second swipe performs the "home" action (default for fullscreen applications) */ #define SDL_HINT_IOS_HIDE_HOME_INDICATOR "SDL_IOS_HIDE_HOME_INDICATOR" /** * \brief A variable that lets you enable joystick (and gamecontroller) events even when your app is in the background. * * The variable can be set to the following values: * "0" - Disable joystick & gamecontroller input events when the * application is in the background. * "1" - Enable joystick & gamecontroller input events when the * application is in the background. * * The default value is "0". This hint may be set at any time. */ #define SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS "SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS" /** * A variable containing a list of arcade stick style controllers. * * The format of the string is a comma separated list of USB VID/PID pairs * in hexadecimal form, e.g. * * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * * The variable can also take the form of @file, in which case the named * file will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_JOYSTICK_ARCADESTICK_DEVICES "SDL_JOYSTICK_ARCADESTICK_DEVICES" /** * A variable containing a list of devices that are not arcade stick style controllers. This will override SDL_HINT_JOYSTICK_ARCADESTICK_DEVICES and the built in device list. * * The format of the string is a comma separated list of USB VID/PID pairs * in hexadecimal form, e.g. * * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * * The variable can also take the form of @file, in which case the named * file will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_JOYSTICK_ARCADESTICK_DEVICES_EXCLUDED "SDL_JOYSTICK_ARCADESTICK_DEVICES_EXCLUDED" /** * A variable containing a list of devices that should not be considerd joysticks. * * The format of the string is a comma separated list of USB VID/PID pairs * in hexadecimal form, e.g. * * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * * The variable can also take the form of @file, in which case the named * file will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_JOYSTICK_BLACKLIST_DEVICES "SDL_JOYSTICK_BLACKLIST_DEVICES" /** * A variable containing a list of devices that should be considered joysticks. This will override SDL_HINT_JOYSTICK_BLACKLIST_DEVICES and the built in device list. * * The format of the string is a comma separated list of USB VID/PID pairs * in hexadecimal form, e.g. * * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * * The variable can also take the form of @file, in which case the named * file will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_JOYSTICK_BLACKLIST_DEVICES_EXCLUDED "SDL_JOYSTICK_BLACKLIST_DEVICES_EXCLUDED" /** * A variable containing a list of flightstick style controllers. * * The format of the string is a comma separated list of USB VID/PID pairs * in hexadecimal form, e.g. * * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * * The variable can also take the form of @file, in which case the named * file will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_JOYSTICK_FLIGHTSTICK_DEVICES "SDL_JOYSTICK_FLIGHTSTICK_DEVICES" /** * A variable containing a list of devices that are not flightstick style controllers. This will override SDL_HINT_JOYSTICK_FLIGHTSTICK_DEVICES and the built in device list. * * The format of the string is a comma separated list of USB VID/PID pairs * in hexadecimal form, e.g. * * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * * The variable can also take the form of @file, in which case the named * file will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_JOYSTICK_FLIGHTSTICK_DEVICES_EXCLUDED "SDL_JOYSTICK_FLIGHTSTICK_DEVICES_EXCLUDED" /** * A variable containing a list of devices known to have a GameCube form factor. * * The format of the string is a comma separated list of USB VID/PID pairs * in hexadecimal form, e.g. * * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * * The variable can also take the form of @file, in which case the named * file will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_JOYSTICK_GAMECUBE_DEVICES "SDL_JOYSTICK_GAMECUBE_DEVICES" /** * A variable containing a list of devices known not to have a GameCube form factor. This will override SDL_HINT_JOYSTICK_GAMECUBE_DEVICES and the built in device list. * * The format of the string is a comma separated list of USB VID/PID pairs * in hexadecimal form, e.g. * * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * * The variable can also take the form of @file, in which case the named * file will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_JOYSTICK_GAMECUBE_DEVICES_EXCLUDED "SDL_JOYSTICK_GAMECUBE_DEVICES_EXCLUDED" /** * \brief A variable controlling whether the HIDAPI joystick drivers should be used. * * This variable can be set to the following values: * "0" - HIDAPI drivers are not used * "1" - HIDAPI drivers are used (the default) * * This variable is the default for all drivers, but can be overridden by the hints for specific drivers below. */ #define SDL_HINT_JOYSTICK_HIDAPI "SDL_JOYSTICK_HIDAPI" /** * \brief A variable controlling whether the HIDAPI driver for Nintendo GameCube controllers should be used. * * This variable can be set to the following values: * "0" - HIDAPI driver is not used * "1" - HIDAPI driver is used * * The default is the value of SDL_HINT_JOYSTICK_HIDAPI */ #define SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE "SDL_JOYSTICK_HIDAPI_GAMECUBE" /** * \brief A variable controlling whether "low_frequency_rumble" and "high_frequency_rumble" is used to implement * the GameCube controller's 3 rumble modes, Stop(0), Rumble(1), and StopHard(2) * this is useful for applications that need full compatibility for things like ADSR envelopes. * Stop is implemented by setting "low_frequency_rumble" to "0" and "high_frequency_rumble" ">0" * Rumble is both at any arbitrary value, * StopHard is implemented by setting both "low_frequency_rumble" and "high_frequency_rumble" to "0" * * This variable can be set to the following values: * "0" - Normal rumble behavior is behavior is used (default) * "1" - Proper GameCube controller rumble behavior is used * */ #define SDL_HINT_JOYSTICK_GAMECUBE_RUMBLE_BRAKE "SDL_JOYSTICK_GAMECUBE_RUMBLE_BRAKE" /** * \brief A variable controlling whether the HIDAPI driver for Nintendo Switch Joy-Cons should be used. * * This variable can be set to the following values: * "0" - HIDAPI driver is not used * "1" - HIDAPI driver is used * * The default is the value of SDL_HINT_JOYSTICK_HIDAPI */ #define SDL_HINT_JOYSTICK_HIDAPI_JOY_CONS "SDL_JOYSTICK_HIDAPI_JOY_CONS" /** * \brief A variable controlling whether Nintendo Switch Joy-Con controllers will be combined into a single Pro-like controller when using the HIDAPI driver * * This variable can be set to the following values: * "0" - Left and right Joy-Con controllers will not be combined and each will be a mini-gamepad * "1" - Left and right Joy-Con controllers will be combined into a single controller (the default) */ #define SDL_HINT_JOYSTICK_HIDAPI_COMBINE_JOY_CONS "SDL_JOYSTICK_HIDAPI_COMBINE_JOY_CONS" /** * \brief A variable controlling whether Nintendo Switch Joy-Con controllers will be in vertical mode when using the HIDAPI driver * * This variable can be set to the following values: * "0" - Left and right Joy-Con controllers will not be in vertical mode (the default) * "1" - Left and right Joy-Con controllers will be in vertical mode * * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) */ #define SDL_HINT_JOYSTICK_HIDAPI_VERTICAL_JOY_CONS "SDL_JOYSTICK_HIDAPI_VERTICAL_JOY_CONS" /** * \brief A variable controlling whether the HIDAPI driver for Amazon Luna controllers connected via Bluetooth should be used. * * This variable can be set to the following values: * "0" - HIDAPI driver is not used * "1" - HIDAPI driver is used * * The default is the value of SDL_HINT_JOYSTICK_HIDAPI */ #define SDL_HINT_JOYSTICK_HIDAPI_LUNA "SDL_JOYSTICK_HIDAPI_LUNA" /** * \brief A variable controlling whether the HIDAPI driver for Nintendo Online classic controllers should be used. * * This variable can be set to the following values: * "0" - HIDAPI driver is not used * "1" - HIDAPI driver is used * * The default is the value of SDL_HINT_JOYSTICK_HIDAPI */ #define SDL_HINT_JOYSTICK_HIDAPI_NINTENDO_CLASSIC "SDL_JOYSTICK_HIDAPI_NINTENDO_CLASSIC" /** * \brief A variable controlling whether the HIDAPI driver for NVIDIA SHIELD controllers should be used. * * This variable can be set to the following values: * "0" - HIDAPI driver is not used * "1" - HIDAPI driver is used * * The default is the value of SDL_HINT_JOYSTICK_HIDAPI */ #define SDL_HINT_JOYSTICK_HIDAPI_SHIELD "SDL_JOYSTICK_HIDAPI_SHIELD" /** * \brief A variable controlling whether the HIDAPI driver for PS3 controllers should be used. * * This variable can be set to the following values: * "0" - HIDAPI driver is not used * "1" - HIDAPI driver is used * * The default is the value of SDL_HINT_JOYSTICK_HIDAPI on macOS, and "0" on other platforms. * * It is not possible to use this driver on Windows, due to limitations in the default drivers * installed. See https://github.com/ViGEm/DsHidMini for an alternative driver on Windows. */ #define SDL_HINT_JOYSTICK_HIDAPI_PS3 "SDL_JOYSTICK_HIDAPI_PS3" /** * \brief A variable controlling whether the HIDAPI driver for PS4 controllers should be used. * * This variable can be set to the following values: * "0" - HIDAPI driver is not used * "1" - HIDAPI driver is used * * The default is the value of SDL_HINT_JOYSTICK_HIDAPI */ #define SDL_HINT_JOYSTICK_HIDAPI_PS4 "SDL_JOYSTICK_HIDAPI_PS4" /** * \brief A variable controlling whether extended input reports should be used for PS4 controllers when using the HIDAPI driver. * * This variable can be set to the following values: * "0" - extended reports are not enabled (the default) * "1" - extended reports * * Extended input reports allow rumble on Bluetooth PS4 controllers, but * break DirectInput handling for applications that don't use SDL. * * Once extended reports are enabled, they can not be disabled without * power cycling the controller. * * For compatibility with applications written for versions of SDL prior * to the introduction of PS5 controller support, this value will also * control the state of extended reports on PS5 controllers when the * SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE hint is not explicitly set. */ #define SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE "SDL_JOYSTICK_HIDAPI_PS4_RUMBLE" /** * \brief A variable controlling whether the HIDAPI driver for PS5 controllers should be used. * * This variable can be set to the following values: * "0" - HIDAPI driver is not used * "1" - HIDAPI driver is used * * The default is the value of SDL_HINT_JOYSTICK_HIDAPI */ #define SDL_HINT_JOYSTICK_HIDAPI_PS5 "SDL_JOYSTICK_HIDAPI_PS5" /** * \brief A variable controlling whether the player LEDs should be lit to indicate which player is associated with a PS5 controller. * * This variable can be set to the following values: * "0" - player LEDs are not enabled * "1" - player LEDs are enabled (the default) */ #define SDL_HINT_JOYSTICK_HIDAPI_PS5_PLAYER_LED "SDL_JOYSTICK_HIDAPI_PS5_PLAYER_LED" /** * \brief A variable controlling whether extended input reports should be used for PS5 controllers when using the HIDAPI driver. * * This variable can be set to the following values: * "0" - extended reports are not enabled (the default) * "1" - extended reports * * Extended input reports allow rumble on Bluetooth PS5 controllers, but * break DirectInput handling for applications that don't use SDL. * * Once extended reports are enabled, they can not be disabled without * power cycling the controller. * * For compatibility with applications written for versions of SDL prior * to the introduction of PS5 controller support, this value defaults to * the value of SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE. */ #define SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE "SDL_JOYSTICK_HIDAPI_PS5_RUMBLE" /** * \brief A variable controlling whether the HIDAPI driver for Google Stadia controllers should be used. * * This variable can be set to the following values: * "0" - HIDAPI driver is not used * "1" - HIDAPI driver is used * * The default is the value of SDL_HINT_JOYSTICK_HIDAPI */ #define SDL_HINT_JOYSTICK_HIDAPI_STADIA "SDL_JOYSTICK_HIDAPI_STADIA" /** * \brief A variable controlling whether the HIDAPI driver for Bluetooth Steam Controllers should be used. * * This variable can be set to the following values: * "0" - HIDAPI driver is not used * "1" - HIDAPI driver is used for Steam Controllers, which requires Bluetooth access * and may prompt the user for permission on iOS and Android. * * The default is "0" */ #define SDL_HINT_JOYSTICK_HIDAPI_STEAM "SDL_JOYSTICK_HIDAPI_STEAM" /** * \brief A variable controlling whether the HIDAPI driver for the Steam Deck builtin controller should be used. * * This variable can be set to the following values: * "0" - HIDAPI driver is not used * "1" - HIDAPI driver is used * * The default is the value of SDL_HINT_JOYSTICK_HIDAPI */ #define SDL_HINT_JOYSTICK_HIDAPI_STEAMDECK "SDL_JOYSTICK_HIDAPI_STEAMDECK" /** * \brief A variable controlling whether the HIDAPI driver for Nintendo Switch controllers should be used. * * This variable can be set to the following values: * "0" - HIDAPI driver is not used * "1" - HIDAPI driver is used * * The default is the value of SDL_HINT_JOYSTICK_HIDAPI */ #define SDL_HINT_JOYSTICK_HIDAPI_SWITCH "SDL_JOYSTICK_HIDAPI_SWITCH" /** * \brief A variable controlling whether the Home button LED should be turned on when a Nintendo Switch Pro controller is opened * * This variable can be set to the following values: * "0" - home button LED is turned off * "1" - home button LED is turned on * * By default the Home button LED state is not changed. This hint can also be set to a floating point value between 0.0 and 1.0 which controls the brightness of the Home button LED. */ #define SDL_HINT_JOYSTICK_HIDAPI_SWITCH_HOME_LED "SDL_JOYSTICK_HIDAPI_SWITCH_HOME_LED" /** * \brief A variable controlling whether the Home button LED should be turned on when a Nintendo Switch Joy-Con controller is opened * * This variable can be set to the following values: * "0" - home button LED is turned off * "1" - home button LED is turned on * * By default the Home button LED state is not changed. This hint can also be set to a floating point value between 0.0 and 1.0 which controls the brightness of the Home button LED. */ #define SDL_HINT_JOYSTICK_HIDAPI_JOYCON_HOME_LED "SDL_JOYSTICK_HIDAPI_JOYCON_HOME_LED" /** * \brief A variable controlling whether the player LEDs should be lit to indicate which player is associated with a Nintendo Switch controller. * * This variable can be set to the following values: * "0" - player LEDs are not enabled * "1" - player LEDs are enabled (the default) */ #define SDL_HINT_JOYSTICK_HIDAPI_SWITCH_PLAYER_LED "SDL_JOYSTICK_HIDAPI_SWITCH_PLAYER_LED" /** * \brief A variable controlling whether the HIDAPI driver for Nintendo Wii and Wii U controllers should be used. * * This variable can be set to the following values: * "0" - HIDAPI driver is not used * "1" - HIDAPI driver is used * * This driver doesn't work with the dolphinbar, so the default is SDL_FALSE for now. */ #define SDL_HINT_JOYSTICK_HIDAPI_WII "SDL_JOYSTICK_HIDAPI_WII" /** * \brief A variable controlling whether the player LEDs should be lit to indicate which player is associated with a Wii controller. * * This variable can be set to the following values: * "0" - player LEDs are not enabled * "1" - player LEDs are enabled (the default) */ #define SDL_HINT_JOYSTICK_HIDAPI_WII_PLAYER_LED "SDL_JOYSTICK_HIDAPI_WII_PLAYER_LED" /** * \brief A variable controlling whether the HIDAPI driver for XBox controllers should be used. * * This variable can be set to the following values: * "0" - HIDAPI driver is not used * "1" - HIDAPI driver is used * * The default is "0" on Windows, otherwise the value of SDL_HINT_JOYSTICK_HIDAPI */ #define SDL_HINT_JOYSTICK_HIDAPI_XBOX "SDL_JOYSTICK_HIDAPI_XBOX" /** * \brief A variable controlling whether the HIDAPI driver for XBox 360 controllers should be used. * * This variable can be set to the following values: * "0" - HIDAPI driver is not used * "1" - HIDAPI driver is used * * The default is the value of SDL_HINT_JOYSTICK_HIDAPI_XBOX */ #define SDL_HINT_JOYSTICK_HIDAPI_XBOX_360 "SDL_JOYSTICK_HIDAPI_XBOX_360" /** * \brief A variable controlling whether the player LEDs should be lit to indicate which player is associated with an Xbox 360 controller. * * This variable can be set to the following values: * "0" - player LEDs are not enabled * "1" - player LEDs are enabled (the default) */ #define SDL_HINT_JOYSTICK_HIDAPI_XBOX_360_PLAYER_LED "SDL_JOYSTICK_HIDAPI_XBOX_360_PLAYER_LED" /** * \brief A variable controlling whether the HIDAPI driver for XBox 360 wireless controllers should be used. * * This variable can be set to the following values: * "0" - HIDAPI driver is not used * "1" - HIDAPI driver is used * * The default is the value of SDL_HINT_JOYSTICK_HIDAPI_XBOX_360 */ #define SDL_HINT_JOYSTICK_HIDAPI_XBOX_360_WIRELESS "SDL_JOYSTICK_HIDAPI_XBOX_360_WIRELESS" /** * \brief A variable controlling whether the HIDAPI driver for XBox One controllers should be used. * * This variable can be set to the following values: * "0" - HIDAPI driver is not used * "1" - HIDAPI driver is used * * The default is the value of SDL_HINT_JOYSTICK_HIDAPI_XBOX */ #define SDL_HINT_JOYSTICK_HIDAPI_XBOX_ONE "SDL_JOYSTICK_HIDAPI_XBOX_ONE" /** * \brief A variable controlling whether the Home button LED should be turned on when an Xbox One controller is opened * * This variable can be set to the following values: * "0" - home button LED is turned off * "1" - home button LED is turned on * * By default the Home button LED state is not changed. This hint can also be set to a floating point value between 0.0 and 1.0 which controls the brightness of the Home button LED. The default brightness is 0.4. */ #define SDL_HINT_JOYSTICK_HIDAPI_XBOX_ONE_HOME_LED "SDL_JOYSTICK_HIDAPI_XBOX_ONE_HOME_LED" /** * A variable controlling whether IOKit should be used for controller handling. * * This variable can be set to the following values: * "0" - IOKit is not used * "1" - IOKit is used (the default) */ #define SDL_HINT_JOYSTICK_IOKIT "SDL_JOYSTICK_IOKIT" /** * A variable controlling whether GCController should be used for controller handling. * * This variable can be set to the following values: * "0" - GCController is not used * "1" - GCController is used (the default) */ #define SDL_HINT_JOYSTICK_MFI "SDL_JOYSTICK_MFI" /** * \brief A variable controlling whether the RAWINPUT joystick drivers should be used for better handling XInput-capable devices. * * This variable can be set to the following values: * "0" - RAWINPUT drivers are not used * "1" - RAWINPUT drivers are used (the default) */ #define SDL_HINT_JOYSTICK_RAWINPUT "SDL_JOYSTICK_RAWINPUT" /** * \brief A variable controlling whether the RAWINPUT driver should pull correlated data from XInput. * * This variable can be set to the following values: * "0" - RAWINPUT driver will only use data from raw input APIs * "1" - RAWINPUT driver will also pull data from XInput, providing * better trigger axes, guide button presses, and rumble support * for Xbox controllers * * The default is "1". This hint applies to any joysticks opened after setting the hint. */ #define SDL_HINT_JOYSTICK_RAWINPUT_CORRELATE_XINPUT "SDL_JOYSTICK_RAWINPUT_CORRELATE_XINPUT" /** * \brief A variable controlling whether the ROG Chakram mice should show up as joysticks * * This variable can be set to the following values: * "0" - ROG Chakram mice do not show up as joysticks (the default) * "1" - ROG Chakram mice show up as joysticks */ #define SDL_HINT_JOYSTICK_ROG_CHAKRAM "SDL_JOYSTICK_ROG_CHAKRAM" /** * \brief A variable controlling whether a separate thread should be used * for handling joystick detection and raw input messages on Windows * * This variable can be set to the following values: * "0" - A separate thread is not used (the default) * "1" - A separate thread is used for handling raw input messages * */ #define SDL_HINT_JOYSTICK_THREAD "SDL_JOYSTICK_THREAD" /** * A variable containing a list of throttle style controllers. * * The format of the string is a comma separated list of USB VID/PID pairs * in hexadecimal form, e.g. * * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * * The variable can also take the form of @file, in which case the named * file will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_JOYSTICK_THROTTLE_DEVICES "SDL_JOYSTICK_THROTTLE_DEVICES" /** * A variable containing a list of devices that are not throttle style controllers. This will override SDL_HINT_JOYSTICK_THROTTLE_DEVICES and the built in device list. * * The format of the string is a comma separated list of USB VID/PID pairs * in hexadecimal form, e.g. * * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * * The variable can also take the form of @file, in which case the named * file will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_JOYSTICK_THROTTLE_DEVICES_EXCLUDED "SDL_JOYSTICK_THROTTLE_DEVICES_EXCLUDED" /** * \brief A variable controlling whether Windows.Gaming.Input should be used for controller handling. * * This variable can be set to the following values: * "0" - WGI is not used * "1" - WGI is used (the default) */ #define SDL_HINT_JOYSTICK_WGI "SDL_JOYSTICK_WGI" /** * A variable containing a list of wheel style controllers. * * The format of the string is a comma separated list of USB VID/PID pairs * in hexadecimal form, e.g. * * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * * The variable can also take the form of @file, in which case the named * file will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_JOYSTICK_WHEEL_DEVICES "SDL_JOYSTICK_WHEEL_DEVICES" /** * A variable containing a list of devices that are not wheel style controllers. This will override SDL_HINT_JOYSTICK_WHEEL_DEVICES and the built in device list. * * The format of the string is a comma separated list of USB VID/PID pairs * in hexadecimal form, e.g. * * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * * The variable can also take the form of @file, in which case the named * file will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_JOYSTICK_WHEEL_DEVICES_EXCLUDED "SDL_JOYSTICK_WHEEL_DEVICES_EXCLUDED" /** * A variable containing a list of devices known to have all axes centered at zero. * * The format of the string is a comma separated list of USB VID/PID pairs * in hexadecimal form, e.g. * * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * * The variable can also take the form of @file, in which case the named * file will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_JOYSTICK_ZERO_CENTERED_DEVICES "SDL_JOYSTICK_ZERO_CENTERED_DEVICES" /** * \brief Determines whether SDL enforces that DRM master is required in order * to initialize the KMSDRM video backend. * * The DRM subsystem has a concept of a "DRM master" which is a DRM client that * has the ability to set planes, set cursor, etc. When SDL is DRM master, it * can draw to the screen using the SDL rendering APIs. Without DRM master, SDL * is still able to process input and query attributes of attached displays, * but it cannot change display state or draw to the screen directly. * * In some cases, it can be useful to have the KMSDRM backend even if it cannot * be used for rendering. An app may want to use SDL for input processing while * using another rendering API (such as an MMAL overlay on Raspberry Pi) or * using its own code to render to DRM overlays that SDL doesn't support. * * This hint must be set before initializing the video subsystem. * * This variable can be set to the following values: * "0" - SDL will allow usage of the KMSDRM backend without DRM master * "1" - SDL Will require DRM master to use the KMSDRM backend (default) */ #define SDL_HINT_KMSDRM_REQUIRE_DRM_MASTER "SDL_KMSDRM_REQUIRE_DRM_MASTER" /** * \brief A comma separated list of devices to open as joysticks * * This variable is currently only used by the Linux joystick driver. */ #define SDL_HINT_JOYSTICK_DEVICE "SDL_JOYSTICK_DEVICE" /** * \brief A variable controlling whether joysticks on Linux will always treat 'hat' axis inputs (ABS_HAT0X - ABS_HAT3Y) as 8-way digital hats without checking whether they may be analog. * * This variable can be set to the following values: * "0" - Only map hat axis inputs to digital hat outputs if the input axes appear to actually be digital (the default) * "1" - Always handle the input axes numbered ABS_HAT0X to ABS_HAT3Y as digital hats */ #define SDL_HINT_LINUX_DIGITAL_HATS "SDL_LINUX_DIGITAL_HATS" /** * \brief A variable controlling whether digital hats on Linux will apply deadzones to their underlying input axes or use unfiltered values. * * This variable can be set to the following values: * "0" - Return digital hat values based on unfiltered input axis values * "1" - Return digital hat values with deadzones on the input axes taken into account (the default) */ #define SDL_HINT_LINUX_HAT_DEADZONES "SDL_LINUX_HAT_DEADZONES" /** * \brief A variable controlling whether to use the classic /dev/input/js* joystick interface or the newer /dev/input/event* joystick interface on Linux * * This variable can be set to the following values: * "0" - Use /dev/input/event* * "1" - Use /dev/input/js* * * By default the /dev/input/event* interfaces are used */ #define SDL_HINT_LINUX_JOYSTICK_CLASSIC "SDL_LINUX_JOYSTICK_CLASSIC" /** * \brief A variable controlling whether joysticks on Linux adhere to their HID-defined deadzones or return unfiltered values. * * This variable can be set to the following values: * "0" - Return unfiltered joystick axis values (the default) * "1" - Return axis values with deadzones taken into account */ #define SDL_HINT_LINUX_JOYSTICK_DEADZONES "SDL_LINUX_JOYSTICK_DEADZONES" /** * \brief A variable controlling the default SDL log levels. * * This variable is a comma separated set of category=level tokens that define the default logging levels for SDL applications. * * The category can be a numeric category, one of "app", "error", "assert", "system", "audio", "video", "render", "input", "test", or `*` for any unspecified category. * * The level can be a numeric level, one of "verbose", "debug", "info", "warn", "error", "critical", or "quiet" to disable that category. * * You can omit the category if you want to set the logging level for all categories. * * If this hint isn't set, the default log levels are equivalent to: * "app=info,assert=warn,test=verbose,*=error" */ #define SDL_HINT_LOGGING "SDL_LOGGING" /** * \brief When set don't force the SDL app to become a foreground process * * This hint only applies to Mac OS X. * */ #define SDL_HINT_MAC_BACKGROUND_APP "SDL_MAC_BACKGROUND_APP" /** * \brief A variable that determines whether ctrl+click should generate a right-click event on Mac * * If present, holding ctrl while left clicking will generate a right click * event when on Mac. */ #define SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK "SDL_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK" /** * \brief A variable controlling whether dispatching OpenGL context updates should block the dispatching thread until the main thread finishes processing * * This variable can be set to the following values: * "0" - Dispatching OpenGL context updates will block the dispatching thread until the main thread finishes processing (default). * "1" - Dispatching OpenGL context updates will allow the dispatching thread to continue execution. * * Generally you want the default, but if you have OpenGL code in a background thread on a Mac, and the main thread * hangs because it's waiting for that background thread, but that background thread is also hanging because it's * waiting for the main thread to do an update, this might fix your issue. * * This hint only applies to macOS. * * This hint is available since SDL 2.24.0. * */ #define SDL_HINT_MAC_OPENGL_ASYNC_DISPATCH "SDL_MAC_OPENGL_ASYNC_DISPATCH" /** * \brief A variable setting the double click radius, in pixels. */ #define SDL_HINT_MOUSE_DOUBLE_CLICK_RADIUS "SDL_MOUSE_DOUBLE_CLICK_RADIUS" /** * \brief A variable setting the double click time, in milliseconds. */ #define SDL_HINT_MOUSE_DOUBLE_CLICK_TIME "SDL_MOUSE_DOUBLE_CLICK_TIME" /** * \brief Allow mouse click events when clicking to focus an SDL window * * This variable can be set to the following values: * "0" - Ignore mouse clicks that activate a window * "1" - Generate events for mouse clicks that activate a window * * By default SDL will ignore mouse clicks that activate a window */ #define SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH "SDL_MOUSE_FOCUS_CLICKTHROUGH" /** * \brief A variable setting the speed scale for mouse motion, in floating point, when the mouse is not in relative mode */ #define SDL_HINT_MOUSE_NORMAL_SPEED_SCALE "SDL_MOUSE_NORMAL_SPEED_SCALE" /** * \brief A variable controlling whether relative mouse mode constrains the mouse to the center of the window * * This variable can be set to the following values: * "0" - Relative mouse mode constrains the mouse to the window * "1" - Relative mouse mode constrains the mouse to the center of the window * * Constraining to the center of the window works better for FPS games and when the * application is running over RDP. Constraining to the whole window works better * for 2D games and increases the chance that the mouse will be in the correct * position when using high DPI mice. * * By default SDL will constrain the mouse to the center of the window */ #define SDL_HINT_MOUSE_RELATIVE_MODE_CENTER "SDL_MOUSE_RELATIVE_MODE_CENTER" /** * \brief A variable controlling whether relative mouse mode is implemented using mouse warping * * This variable can be set to the following values: * "0" - Relative mouse mode uses raw input * "1" - Relative mouse mode uses mouse warping * * By default SDL will use raw input for relative mouse mode */ #define SDL_HINT_MOUSE_RELATIVE_MODE_WARP "SDL_MOUSE_RELATIVE_MODE_WARP" /** * \brief A variable controlling whether relative mouse motion is affected by renderer scaling * * This variable can be set to the following values: * "0" - Relative motion is unaffected by DPI or renderer's logical size * "1" - Relative motion is scaled according to DPI scaling and logical size * * By default relative mouse deltas are affected by DPI and renderer scaling */ #define SDL_HINT_MOUSE_RELATIVE_SCALING "SDL_MOUSE_RELATIVE_SCALING" /** * \brief A variable setting the scale for mouse motion, in floating point, when the mouse is in relative mode */ #define SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE "SDL_MOUSE_RELATIVE_SPEED_SCALE" /** * \brief A variable controlling whether the system mouse acceleration curve is used for relative mouse motion. * * This variable can be set to the following values: * "0" - Relative mouse motion will be unscaled (the default) * "1" - Relative mouse motion will be scaled using the system mouse acceleration curve. * * If SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE is set, that will override the system speed scale. */ #define SDL_HINT_MOUSE_RELATIVE_SYSTEM_SCALE "SDL_MOUSE_RELATIVE_SYSTEM_SCALE" /** * \brief A variable controlling whether a motion event should be generated for mouse warping in relative mode. * * This variable can be set to the following values: * "0" - Warping the mouse will not generate a motion event in relative mode * "1" - Warping the mouse will generate a motion event in relative mode * * By default warping the mouse will not generate motion events in relative mode. This avoids the application having to filter out large relative motion due to warping. */ #define SDL_HINT_MOUSE_RELATIVE_WARP_MOTION "SDL_MOUSE_RELATIVE_WARP_MOTION" /** * \brief A variable controlling whether mouse events should generate synthetic touch events * * This variable can be set to the following values: * "0" - Mouse events will not generate touch events (default for desktop platforms) * "1" - Mouse events will generate touch events (default for mobile platforms, such as Android and iOS) */ #define SDL_HINT_MOUSE_TOUCH_EVENTS "SDL_MOUSE_TOUCH_EVENTS" /** * \brief A variable controlling whether the mouse is captured while mouse buttons are pressed * * This variable can be set to the following values: * "0" - The mouse is not captured while mouse buttons are pressed * "1" - The mouse is captured while mouse buttons are pressed * * By default the mouse is captured while mouse buttons are pressed so if the mouse is dragged * outside the window, the application continues to receive mouse events until the button is * released. */ #define SDL_HINT_MOUSE_AUTO_CAPTURE "SDL_MOUSE_AUTO_CAPTURE" /** * \brief Tell SDL not to catch the SIGINT or SIGTERM signals. * * This hint only applies to Unix-like platforms, and should set before * any calls to SDL_Init() * * The variable can be set to the following values: * "0" - SDL will install a SIGINT and SIGTERM handler, and when it * catches a signal, convert it into an SDL_QUIT event. * "1" - SDL will not install a signal handler at all. */ #define SDL_HINT_NO_SIGNAL_HANDLERS "SDL_NO_SIGNAL_HANDLERS" /** * \brief A variable controlling what driver to use for OpenGL ES contexts. * * On some platforms, currently Windows and X11, OpenGL drivers may support * creating contexts with an OpenGL ES profile. By default SDL uses these * profiles, when available, otherwise it attempts to load an OpenGL ES * library, e.g. that provided by the ANGLE project. This variable controls * whether SDL follows this default behaviour or will always load an * OpenGL ES library. * * Circumstances where this is useful include * - Testing an app with a particular OpenGL ES implementation, e.g ANGLE, * or emulator, e.g. those from ARM, Imagination or Qualcomm. * - Resolving OpenGL ES function addresses at link time by linking with * the OpenGL ES library instead of querying them at run time with * SDL_GL_GetProcAddress(). * * Caution: for an application to work with the default behaviour across * different OpenGL drivers it must query the OpenGL ES function * addresses at run time using SDL_GL_GetProcAddress(). * * This variable is ignored on most platforms because OpenGL ES is native * or not supported. * * This variable can be set to the following values: * "0" - Use ES profile of OpenGL, if available. (Default when not set.) * "1" - Load OpenGL ES library using the default library names. * */ #define SDL_HINT_OPENGL_ES_DRIVER "SDL_OPENGL_ES_DRIVER" /** * \brief A variable controlling which orientations are allowed on iOS/Android. * * In some circumstances it is necessary to be able to explicitly control * which UI orientations are allowed. * * This variable is a space delimited list of the following values: * "LandscapeLeft", "LandscapeRight", "Portrait" "PortraitUpsideDown" */ #define SDL_HINT_ORIENTATIONS "SDL_IOS_ORIENTATIONS" /** * \brief A variable controlling the use of a sentinel event when polling the event queue * * This variable can be set to the following values: * "0" - Disable poll sentinels * "1" - Enable poll sentinels * * When polling for events, SDL_PumpEvents is used to gather new events from devices. * If a device keeps producing new events between calls to SDL_PumpEvents, a poll loop will * become stuck until the new events stop. * This is most noticeable when moving a high frequency mouse. * * By default, poll sentinels are enabled. */ #define SDL_HINT_POLL_SENTINEL "SDL_POLL_SENTINEL" /** * \brief Override for SDL_GetPreferredLocales() * * If set, this will be favored over anything the OS might report for the * user's preferred locales. Changing this hint at runtime will not generate * a SDL_LOCALECHANGED event (but if you can change the hint, you can push * your own event, if you want). * * The format of this hint is a comma-separated list of language and locale, * combined with an underscore, as is a common format: "en_GB". Locale is * optional: "en". So you might have a list like this: "en_GB,jp,es_PT" */ #define SDL_HINT_PREFERRED_LOCALES "SDL_PREFERRED_LOCALES" /** * \brief A variable describing the content orientation on QtWayland-based platforms. * * On QtWayland platforms, windows are rotated client-side to allow for custom * transitions. In order to correctly position overlays (e.g. volume bar) and * gestures (e.g. events view, close/minimize gestures), the system needs to * know in which orientation the application is currently drawing its contents. * * This does not cause the window to be rotated or resized, the application * needs to take care of drawing the content in the right orientation (the * framebuffer is always in portrait mode). * * This variable can be one of the following values: * "primary" (default), "portrait", "landscape", "inverted-portrait", "inverted-landscape" * * Since SDL 2.0.22 this variable accepts a comma-separated list of values above. */ #define SDL_HINT_QTWAYLAND_CONTENT_ORIENTATION "SDL_QTWAYLAND_CONTENT_ORIENTATION" /** * \brief Flags to set on QtWayland windows to integrate with the native window manager. * * On QtWayland platforms, this hint controls the flags to set on the windows. * For example, on Sailfish OS "OverridesSystemGestures" disables swipe gestures. * * This variable is a space-separated list of the following values (empty = no flags): * "OverridesSystemGestures", "StaysOnTop", "BypassWindowManager" */ #define SDL_HINT_QTWAYLAND_WINDOW_FLAGS "SDL_QTWAYLAND_WINDOW_FLAGS" /** * \brief A variable controlling whether the 2D render API is compatible or efficient. * * This variable can be set to the following values: * * "0" - Don't use batching to make rendering more efficient. * "1" - Use batching, but might cause problems if app makes its own direct OpenGL calls. * * Up to SDL 2.0.9, the render API would draw immediately when requested. Now * it batches up draw requests and sends them all to the GPU only when forced * to (during SDL_RenderPresent, when changing render targets, by updating a * texture that the batch needs, etc). This is significantly more efficient, * but it can cause problems for apps that expect to render on top of the * render API's output. As such, SDL will disable batching if a specific * render backend is requested (since this might indicate that the app is * planning to use the underlying graphics API directly). This hint can * be used to explicitly request batching in this instance. It is a contract * that you will either never use the underlying graphics API directly, or * if you do, you will call SDL_RenderFlush() before you do so any current * batch goes to the GPU before your work begins. Not following this contract * will result in undefined behavior. */ #define SDL_HINT_RENDER_BATCHING "SDL_RENDER_BATCHING" /** * \brief A variable controlling how the 2D render API renders lines * * This variable can be set to the following values: * "0" - Use the default line drawing method (Bresenham's line algorithm as of SDL 2.0.20) * "1" - Use the driver point API using Bresenham's line algorithm (correct, draws many points) * "2" - Use the driver line API (occasionally misses line endpoints based on hardware driver quirks, was the default before 2.0.20) * "3" - Use the driver geometry API (correct, draws thicker diagonal lines) * * This variable should be set when the renderer is created. */ #define SDL_HINT_RENDER_LINE_METHOD "SDL_RENDER_LINE_METHOD" /** * \brief A variable controlling whether to enable Direct3D 11+'s Debug Layer. * * This variable does not have any effect on the Direct3D 9 based renderer. * * This variable can be set to the following values: * "0" - Disable Debug Layer use * "1" - Enable Debug Layer use * * By default, SDL does not use Direct3D Debug Layer. */ #define SDL_HINT_RENDER_DIRECT3D11_DEBUG "SDL_RENDER_DIRECT3D11_DEBUG" /** * \brief A variable controlling whether the Direct3D device is initialized for thread-safe operations. * * This variable can be set to the following values: * "0" - Thread-safety is not enabled (faster) * "1" - Thread-safety is enabled * * By default the Direct3D device is created with thread-safety disabled. */ #define SDL_HINT_RENDER_DIRECT3D_THREADSAFE "SDL_RENDER_DIRECT3D_THREADSAFE" /** * \brief A variable specifying which render driver to use. * * If the application doesn't pick a specific renderer to use, this variable * specifies the name of the preferred renderer. If the preferred renderer * can't be initialized, the normal default renderer is used. * * This variable is case insensitive and can be set to the following values: * "direct3d" * "direct3d11" * "direct3d12" * "opengl" * "opengles2" * "opengles" * "metal" * "software" * * The default varies by platform, but it's the first one in the list that * is available on the current platform. */ #define SDL_HINT_RENDER_DRIVER "SDL_RENDER_DRIVER" /** * \brief A variable controlling the scaling policy for SDL_RenderSetLogicalSize. * * This variable can be set to the following values: * "0" or "letterbox" - Uses letterbox/sidebars to fit the entire rendering on screen * "1" or "overscan" - Will zoom the rendering so it fills the entire screen, allowing edges to be drawn offscreen * * By default letterbox is used */ #define SDL_HINT_RENDER_LOGICAL_SIZE_MODE "SDL_RENDER_LOGICAL_SIZE_MODE" /** * \brief A variable controlling whether the OpenGL render driver uses shaders if they are available. * * This variable can be set to the following values: * "0" - Disable shaders * "1" - Enable shaders * * By default shaders are used if OpenGL supports them. */ #define SDL_HINT_RENDER_OPENGL_SHADERS "SDL_RENDER_OPENGL_SHADERS" /** * \brief A variable controlling the scaling quality * * This variable can be set to the following values: * "0" or "nearest" - Nearest pixel sampling * "1" or "linear" - Linear filtering (supported by OpenGL and Direct3D) * "2" or "best" - Currently this is the same as "linear" * * By default nearest pixel sampling is used */ #define SDL_HINT_RENDER_SCALE_QUALITY "SDL_RENDER_SCALE_QUALITY" /** * \brief A variable controlling whether updates to the SDL screen surface should be synchronized with the vertical refresh, to avoid tearing. * * This variable can be set to the following values: * "0" - Disable vsync * "1" - Enable vsync * * By default SDL does not sync screen surface updates with vertical refresh. */ #define SDL_HINT_RENDER_VSYNC "SDL_RENDER_VSYNC" /** * \brief A variable controlling whether the Metal render driver select low power device over default one * * This variable can be set to the following values: * "0" - Use the prefered OS device * "1" - Select a low power one * * By default the prefered OS device is used. */ #define SDL_HINT_RENDER_METAL_PREFER_LOW_POWER_DEVICE "SDL_RENDER_METAL_PREFER_LOW_POWER_DEVICE" /** * A variable containing a list of ROG gamepad capable mice. * * The format of the string is a comma separated list of USB VID/PID pairs * in hexadecimal form, e.g. * * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * * The variable can also take the form of @file, in which case the named * file will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_ROG_GAMEPAD_MICE "SDL_ROG_GAMEPAD_MICE" /** * A variable containing a list of devices that are not ROG gamepad capable mice. This will override SDL_HINT_ROG_GAMEPAD_MICE and the built in device list. * * The format of the string is a comma separated list of USB VID/PID pairs * in hexadecimal form, e.g. * * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * * The variable can also take the form of @file, in which case the named * file will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_ROG_GAMEPAD_MICE_EXCLUDED "SDL_ROG_GAMEPAD_MICE_EXCLUDED" /** * \brief A variable controlling if VSYNC is automatically disable if doesn't reach the enough FPS * * This variable can be set to the following values: * "0" - It will be using VSYNC as defined in the main flag. Default * "1" - If VSYNC was previously enabled, then it will disable VSYNC if doesn't reach enough speed * * By default SDL does not enable the automatic VSYNC */ #define SDL_HINT_PS2_DYNAMIC_VSYNC "SDL_PS2_DYNAMIC_VSYNC" /** * \brief A variable to control whether the return key on the soft keyboard * should hide the soft keyboard on Android and iOS. * * The variable can be set to the following values: * "0" - The return key will be handled as a key event. This is the behaviour of SDL <= 2.0.3. (default) * "1" - The return key will hide the keyboard. * * The value of this hint is used at runtime, so it can be changed at any time. */ #define SDL_HINT_RETURN_KEY_HIDES_IME "SDL_RETURN_KEY_HIDES_IME" /** * \brief Tell SDL which Dispmanx layer to use on a Raspberry PI * * Also known as Z-order. The variable can take a negative or positive value. * The default is 10000. */ #define SDL_HINT_RPI_VIDEO_LAYER "SDL_RPI_VIDEO_LAYER" /** * \brief Specify an "activity name" for screensaver inhibition. * * Some platforms, notably Linux desktops, list the applications which are * inhibiting the screensaver or other power-saving features. * * This hint lets you specify the "activity name" sent to the OS when * SDL_DisableScreenSaver() is used (or the screensaver is automatically * disabled). The contents of this hint are used when the screensaver is * disabled. You should use a string that describes what your program is doing * (and, therefore, why the screensaver is disabled). For example, "Playing a * game" or "Watching a video". * * Setting this to "" or leaving it unset will have SDL use a reasonable * default: "Playing a game" or something similar. * * On targets where this is not supported, this hint does nothing. */ #define SDL_HINT_SCREENSAVER_INHIBIT_ACTIVITY_NAME "SDL_SCREENSAVER_INHIBIT_ACTIVITY_NAME" /** * \brief Specifies whether SDL_THREAD_PRIORITY_TIME_CRITICAL should be treated as realtime. * * On some platforms, like Linux, a realtime priority thread may be subject to restrictions * that require special handling by the application. This hint exists to let SDL know that * the app is prepared to handle said restrictions. * * On Linux, SDL will apply the following configuration to any thread that becomes realtime: * * The SCHED_RESET_ON_FORK bit will be set on the scheduling policy, * * An RLIMIT_RTTIME budget will be configured to the rtkit specified limit. * * Exceeding this limit will result in the kernel sending SIGKILL to the app, * * Refer to the man pages for more information. * * This variable can be set to the following values: * "0" - default platform specific behaviour * "1" - Force SDL_THREAD_PRIORITY_TIME_CRITICAL to a realtime scheduling policy */ #define SDL_HINT_THREAD_FORCE_REALTIME_TIME_CRITICAL "SDL_THREAD_FORCE_REALTIME_TIME_CRITICAL" /** * \brief A string specifying additional information to use with SDL_SetThreadPriority. * * By default SDL_SetThreadPriority will make appropriate system changes in order to * apply a thread priority. For example on systems using pthreads the scheduler policy * is changed automatically to a policy that works well with a given priority. * Code which has specific requirements can override SDL's default behavior with this hint. * * pthread hint values are "current", "other", "fifo" and "rr". * Currently no other platform hint values are defined but may be in the future. * * \note On Linux, the kernel may send SIGKILL to realtime tasks which exceed the distro * configured execution budget for rtkit. This budget can be queried through RLIMIT_RTTIME * after calling SDL_SetThreadPriority(). */ #define SDL_HINT_THREAD_PRIORITY_POLICY "SDL_THREAD_PRIORITY_POLICY" /** * \brief A string specifying SDL's threads stack size in bytes or "0" for the backend's default size * * Use this hint in case you need to set SDL's threads stack size to other than the default. * This is specially useful if you build SDL against a non glibc libc library (such as musl) which * provides a relatively small default thread stack size (a few kilobytes versus the default 8MB glibc uses). * Support for this hint is currently available only in the pthread, Windows, and PSP backend. * * Instead of this hint, in 2.0.9 and later, you can use * SDL_CreateThreadWithStackSize(). This hint only works with the classic * SDL_CreateThread(). */ #define SDL_HINT_THREAD_STACK_SIZE "SDL_THREAD_STACK_SIZE" /** * \brief A variable that controls the timer resolution, in milliseconds. * * The higher resolution the timer, the more frequently the CPU services * timer interrupts, and the more precise delays are, but this takes up * power and CPU time. This hint is only used on Windows. * * See this blog post for more information: * http://randomascii.wordpress.com/2013/07/08/windows-timer-resolution-megawatts-wasted/ * * If this variable is set to "0", the system timer resolution is not set. * * The default value is "1". This hint may be set at any time. */ #define SDL_HINT_TIMER_RESOLUTION "SDL_TIMER_RESOLUTION" /** * \brief A variable controlling whether touch events should generate synthetic mouse events * * This variable can be set to the following values: * "0" - Touch events will not generate mouse events * "1" - Touch events will generate mouse events * * By default SDL will generate mouse events for touch events */ #define SDL_HINT_TOUCH_MOUSE_EVENTS "SDL_TOUCH_MOUSE_EVENTS" /** * \brief A variable controlling which touchpad should generate synthetic mouse events * * This variable can be set to the following values: * "0" - Only front touchpad should generate mouse events. Default * "1" - Only back touchpad should generate mouse events. * "2" - Both touchpads should generate mouse events. * * By default SDL will generate mouse events for all touch devices */ #define SDL_HINT_VITA_TOUCH_MOUSE_DEVICE "SDL_HINT_VITA_TOUCH_MOUSE_DEVICE" /** * \brief A variable controlling whether the Android / tvOS remotes * should be listed as joystick devices, instead of sending keyboard events. * * This variable can be set to the following values: * "0" - Remotes send enter/escape/arrow key events * "1" - Remotes are available as 2 axis, 2 button joysticks (the default). */ #define SDL_HINT_TV_REMOTE_AS_JOYSTICK "SDL_TV_REMOTE_AS_JOYSTICK" /** * \brief A variable controlling whether the screensaver is enabled. * * This variable can be set to the following values: * "0" - Disable screensaver * "1" - Enable screensaver * * By default SDL will disable the screensaver. */ #define SDL_HINT_VIDEO_ALLOW_SCREENSAVER "SDL_VIDEO_ALLOW_SCREENSAVER" /** * \brief Tell the video driver that we only want a double buffer. * * By default, most lowlevel 2D APIs will use a triple buffer scheme that * wastes no CPU time on waiting for vsync after issuing a flip, but * introduces a frame of latency. On the other hand, using a double buffer * scheme instead is recommended for cases where low latency is an important * factor because we save a whole frame of latency. * We do so by waiting for vsync immediately after issuing a flip, usually just * after eglSwapBuffers call in the backend's *_SwapWindow function. * * Since it's driver-specific, it's only supported where possible and * implemented. Currently supported the following drivers: * * - KMSDRM (kmsdrm) * - Raspberry Pi (raspberrypi) */ #define SDL_HINT_VIDEO_DOUBLE_BUFFER "SDL_VIDEO_DOUBLE_BUFFER" /** * \brief A variable controlling whether the EGL window is allowed to be * composited as transparent, rather than opaque. * * Most window systems will always render windows opaque, even if the surface * format has an alpha channel. This is not always true, however, so by default * SDL will try to enforce opaque composition. To override this behavior, you * can set this hint to "1". */ #define SDL_HINT_VIDEO_EGL_ALLOW_TRANSPARENCY "SDL_VIDEO_EGL_ALLOW_TRANSPARENCY" /** * \brief A variable controlling whether the graphics context is externally managed. * * This variable can be set to the following values: * "0" - SDL will manage graphics contexts that are attached to windows. * "1" - Disable graphics context management on windows. * * By default SDL will manage OpenGL contexts in certain situations. For example, on Android the * context will be automatically saved and restored when pausing the application. Additionally, some * platforms will assume usage of OpenGL if Vulkan isn't used. Setting this to "1" will prevent this * behavior, which is desireable when the application manages the graphics context, such as * an externally managed OpenGL context or attaching a Vulkan surface to the window. */ #define SDL_HINT_VIDEO_EXTERNAL_CONTEXT "SDL_VIDEO_EXTERNAL_CONTEXT" /** * \brief If set to 1, then do not allow high-DPI windows. ("Retina" on Mac and iOS) */ #define SDL_HINT_VIDEO_HIGHDPI_DISABLED "SDL_VIDEO_HIGHDPI_DISABLED" /** * \brief A variable that dictates policy for fullscreen Spaces on Mac OS X. * * This hint only applies to Mac OS X. * * The variable can be set to the following values: * "0" - Disable Spaces support (FULLSCREEN_DESKTOP won't use them and * SDL_WINDOW_RESIZABLE windows won't offer the "fullscreen" * button on their titlebars). * "1" - Enable Spaces support (FULLSCREEN_DESKTOP will use them and * SDL_WINDOW_RESIZABLE windows will offer the "fullscreen" * button on their titlebars). * * The default value is "1". This hint must be set before any windows are created. */ #define SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES "SDL_VIDEO_MAC_FULLSCREEN_SPACES" /** * \brief Minimize your SDL_Window if it loses key focus when in fullscreen mode. Defaults to false. * \warning Before SDL 2.0.14, this defaulted to true! In 2.0.14, we're * seeing if "true" causes more problems than it solves in modern times. * */ #define SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS "SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS" /** * \brief A variable controlling whether the libdecor Wayland backend is allowed to be used. * * This variable can be set to the following values: * "0" - libdecor use is disabled. * "1" - libdecor use is enabled (default). * * libdecor is used over xdg-shell when xdg-decoration protocol is unavailable. */ #define SDL_HINT_VIDEO_WAYLAND_ALLOW_LIBDECOR "SDL_VIDEO_WAYLAND_ALLOW_LIBDECOR" /** * \brief A variable controlling whether the libdecor Wayland backend is preferred over native decrations. * * When this hint is set, libdecor will be used to provide window decorations, even if xdg-decoration is * available. (Note that, by default, libdecor will use xdg-decoration itself if available). * * This variable can be set to the following values: * "0" - libdecor is enabled only if server-side decorations are unavailable. * "1" - libdecor is always enabled if available. * * libdecor is used over xdg-shell when xdg-decoration protocol is unavailable. */ #define SDL_HINT_VIDEO_WAYLAND_PREFER_LIBDECOR "SDL_VIDEO_WAYLAND_PREFER_LIBDECOR" /** * \brief A variable controlling whether video mode emulation is enabled under Wayland. * * When this hint is set, a standard set of emulated CVT video modes will be exposed for use by the application. * If it is disabled, the only modes exposed will be the logical desktop size and, in the case of a scaled * desktop, the native display resolution. * * This variable can be set to the following values: * "0" - Video mode emulation is disabled. * "1" - Video mode emulation is enabled. * * By default video mode emulation is enabled. */ #define SDL_HINT_VIDEO_WAYLAND_MODE_EMULATION "SDL_VIDEO_WAYLAND_MODE_EMULATION" /** * \brief Enable or disable mouse pointer warp emulation, needed by some older games. * * When this hint is set, any SDL will emulate mouse warps using relative mouse mode. * This is required for some older games (such as Source engine games), which warp the * mouse to the centre of the screen rather than using relative mouse motion. Note that * relative mouse mode may have different mouse acceleration behaviour than pointer warps. * * This variable can be set to the following values: * "0" - All mouse warps fail, as mouse warping is not available under wayland. * "1" - Some mouse warps will be emulated by forcing relative mouse mode. * * If not set, this is automatically enabled unless an application uses relative mouse * mode directly. */ #define SDL_HINT_VIDEO_WAYLAND_EMULATE_MOUSE_WARP "SDL_VIDEO_WAYLAND_EMULATE_MOUSE_WARP" /** * \brief A variable that is the address of another SDL_Window* (as a hex string formatted with "%p"). * * If this hint is set before SDL_CreateWindowFrom() and the SDL_Window* it is set to has * SDL_WINDOW_OPENGL set (and running on WGL only, currently), then two things will occur on the newly * created SDL_Window: * * 1. Its pixel format will be set to the same pixel format as this SDL_Window. This is * needed for example when sharing an OpenGL context across multiple windows. * * 2. The flag SDL_WINDOW_OPENGL will be set on the new window so it can be used for * OpenGL rendering. * * This variable can be set to the following values: * The address (as a string "%p") of the SDL_Window* that new windows created with SDL_CreateWindowFrom() should * share a pixel format with. */ #define SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT "SDL_VIDEO_WINDOW_SHARE_PIXEL_FORMAT" /** * \brief When calling SDL_CreateWindowFrom(), make the window compatible with OpenGL. * * This variable can be set to the following values: * "0" - Don't add any graphics flags to the SDL_WindowFlags * "1" - Add SDL_WINDOW_OPENGL to the SDL_WindowFlags * * By default SDL will not make the foreign window compatible with OpenGL. */ #define SDL_HINT_VIDEO_FOREIGN_WINDOW_OPENGL "SDL_VIDEO_FOREIGN_WINDOW_OPENGL" /** * \brief When calling SDL_CreateWindowFrom(), make the window compatible with Vulkan. * * This variable can be set to the following values: * "0" - Don't add any graphics flags to the SDL_WindowFlags * "1" - Add SDL_WINDOW_VULKAN to the SDL_WindowFlags * * By default SDL will not make the foreign window compatible with Vulkan. */ #define SDL_HINT_VIDEO_FOREIGN_WINDOW_VULKAN "SDL_VIDEO_FOREIGN_WINDOW_VULKAN" /** * \brief A variable specifying which shader compiler to preload when using the Chrome ANGLE binaries * * SDL has EGL and OpenGL ES2 support on Windows via the ANGLE project. It * can use two different sets of binaries, those compiled by the user from source * or those provided by the Chrome browser. In the later case, these binaries require * that SDL loads a DLL providing the shader compiler. * * This variable can be set to the following values: * "d3dcompiler_46.dll" - default, best for Vista or later. * "d3dcompiler_43.dll" - for XP support. * "none" - do not load any library, useful if you compiled ANGLE from source and included the compiler in your binaries. * */ #define SDL_HINT_VIDEO_WIN_D3DCOMPILER "SDL_VIDEO_WIN_D3DCOMPILER" /** * \brief A variable controlling whether X11 should use GLX or EGL by default * * This variable can be set to the following values: * "0" - Use GLX * "1" - Use EGL * * By default SDL will use GLX when both are present. */ #define SDL_HINT_VIDEO_X11_FORCE_EGL "SDL_VIDEO_X11_FORCE_EGL" /** * \brief A variable controlling whether the X11 _NET_WM_BYPASS_COMPOSITOR hint should be used. * * This variable can be set to the following values: * "0" - Disable _NET_WM_BYPASS_COMPOSITOR * "1" - Enable _NET_WM_BYPASS_COMPOSITOR * * By default SDL will use _NET_WM_BYPASS_COMPOSITOR * */ #define SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR "SDL_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR" /** * \brief A variable controlling whether the X11 _NET_WM_PING protocol should be supported. * * This variable can be set to the following values: * "0" - Disable _NET_WM_PING * "1" - Enable _NET_WM_PING * * By default SDL will use _NET_WM_PING, but for applications that know they * will not always be able to respond to ping requests in a timely manner they can * turn it off to avoid the window manager thinking the app is hung. * The hint is checked in CreateWindow. */ #define SDL_HINT_VIDEO_X11_NET_WM_PING "SDL_VIDEO_X11_NET_WM_PING" /** * \brief A variable forcing the visual ID chosen for new X11 windows * */ #define SDL_HINT_VIDEO_X11_WINDOW_VISUALID "SDL_VIDEO_X11_WINDOW_VISUALID" /** * \brief A no-longer-used variable controlling whether the X11 Xinerama extension should be used. * * Before SDL 2.0.24, this would let apps and users disable Xinerama support on X11. * Now SDL never uses Xinerama, and does not check for this hint at all. * The preprocessor define is left here for source compatibility. */ #define SDL_HINT_VIDEO_X11_XINERAMA "SDL_VIDEO_X11_XINERAMA" /** * \brief A variable controlling whether the X11 XRandR extension should be used. * * This variable can be set to the following values: * "0" - Disable XRandR * "1" - Enable XRandR * * By default SDL will use XRandR. */ #define SDL_HINT_VIDEO_X11_XRANDR "SDL_VIDEO_X11_XRANDR" /** * \brief A no-longer-used variable controlling whether the X11 VidMode extension should be used. * * Before SDL 2.0.24, this would let apps and users disable XVidMode support on X11. * Now SDL never uses XVidMode, and does not check for this hint at all. * The preprocessor define is left here for source compatibility. */ #define SDL_HINT_VIDEO_X11_XVIDMODE "SDL_VIDEO_X11_XVIDMODE" /** * \brief Controls how the fact chunk affects the loading of a WAVE file. * * The fact chunk stores information about the number of samples of a WAVE * file. The Standards Update from Microsoft notes that this value can be used * to 'determine the length of the data in seconds'. This is especially useful * for compressed formats (for which this is a mandatory chunk) if they produce * multiple sample frames per block and truncating the block is not allowed. * The fact chunk can exactly specify how many sample frames there should be * in this case. * * Unfortunately, most application seem to ignore the fact chunk and so SDL * ignores it by default as well. * * This variable can be set to the following values: * * "truncate" - Use the number of samples to truncate the wave data if * the fact chunk is present and valid * "strict" - Like "truncate", but raise an error if the fact chunk * is invalid, not present for non-PCM formats, or if the * data chunk doesn't have that many samples * "ignorezero" - Like "truncate", but ignore fact chunk if the number of * samples is zero * "ignore" - Ignore fact chunk entirely (default) */ #define SDL_HINT_WAVE_FACT_CHUNK "SDL_WAVE_FACT_CHUNK" /** * \brief Controls how the size of the RIFF chunk affects the loading of a WAVE file. * * The size of the RIFF chunk (which includes all the sub-chunks of the WAVE * file) is not always reliable. In case the size is wrong, it's possible to * just ignore it and step through the chunks until a fixed limit is reached. * * Note that files that have trailing data unrelated to the WAVE file or * corrupt files may slow down the loading process without a reliable boundary. * By default, SDL stops after 10000 chunks to prevent wasting time. Use the * environment variable SDL_WAVE_CHUNK_LIMIT to adjust this value. * * This variable can be set to the following values: * * "force" - Always use the RIFF chunk size as a boundary for the chunk search * "ignorezero" - Like "force", but a zero size searches up to 4 GiB (default) * "ignore" - Ignore the RIFF chunk size and always search up to 4 GiB * "maximum" - Search for chunks until the end of file (not recommended) */ #define SDL_HINT_WAVE_RIFF_CHUNK_SIZE "SDL_WAVE_RIFF_CHUNK_SIZE" /** * \brief Controls how a truncated WAVE file is handled. * * A WAVE file is considered truncated if any of the chunks are incomplete or * the data chunk size is not a multiple of the block size. By default, SDL * decodes until the first incomplete block, as most applications seem to do. * * This variable can be set to the following values: * * "verystrict" - Raise an error if the file is truncated * "strict" - Like "verystrict", but the size of the RIFF chunk is ignored * "dropframe" - Decode until the first incomplete sample frame * "dropblock" - Decode until the first incomplete block (default) */ #define SDL_HINT_WAVE_TRUNCATION "SDL_WAVE_TRUNCATION" /** * \brief Tell SDL not to name threads on Windows with the 0x406D1388 Exception. * The 0x406D1388 Exception is a trick used to inform Visual Studio of a * thread's name, but it tends to cause problems with other debuggers, * and the .NET runtime. Note that SDL 2.0.6 and later will still use * the (safer) SetThreadDescription API, introduced in the Windows 10 * Creators Update, if available. * * The variable can be set to the following values: * "0" - SDL will raise the 0x406D1388 Exception to name threads. * This is the default behavior of SDL <= 2.0.4. * "1" - SDL will not raise this exception, and threads will be unnamed. (default) * This is necessary with .NET languages or debuggers that aren't Visual Studio. */ #define SDL_HINT_WINDOWS_DISABLE_THREAD_NAMING "SDL_WINDOWS_DISABLE_THREAD_NAMING" /** * \brief Controls whether menus can be opened with their keyboard shortcut (Alt+mnemonic). * * If the mnemonics are enabled, then menus can be opened by pressing the Alt * key and the corresponding mnemonic (for example, Alt+F opens the File menu). * However, in case an invalid mnemonic is pressed, Windows makes an audible * beep to convey that nothing happened. This is true even if the window has * no menu at all! * * Because most SDL applications don't have menus, and some want to use the Alt * key for other purposes, SDL disables mnemonics (and the beeping) by default. * * Note: This also affects keyboard events: with mnemonics enabled, when a * menu is opened from the keyboard, you will not receive a KEYUP event for * the mnemonic key, and *might* not receive one for Alt. * * This variable can be set to the following values: * "0" - Alt+mnemonic does nothing, no beeping. (default) * "1" - Alt+mnemonic opens menus, invalid mnemonics produce a beep. */ #define SDL_HINT_WINDOWS_ENABLE_MENU_MNEMONICS "SDL_WINDOWS_ENABLE_MENU_MNEMONICS" /** * \brief A variable controlling whether the windows message loop is processed by SDL * * This variable can be set to the following values: * "0" - The window message loop is not run * "1" - The window message loop is processed in SDL_PumpEvents() * * By default SDL will process the windows message loop */ #define SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP "SDL_WINDOWS_ENABLE_MESSAGELOOP" /** * \brief Force SDL to use Critical Sections for mutexes on Windows. * On Windows 7 and newer, Slim Reader/Writer Locks are available. * They offer better performance, allocate no kernel ressources and * use less memory. SDL will fall back to Critical Sections on older * OS versions or if forced to by this hint. * * This variable can be set to the following values: * "0" - Use SRW Locks when available. If not, fall back to Critical Sections. (default) * "1" - Force the use of Critical Sections in all cases. * */ #define SDL_HINT_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS "SDL_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS" /** * \brief Force SDL to use Kernel Semaphores on Windows. * Kernel Semaphores are inter-process and require a context * switch on every interaction. On Windows 8 and newer, the * WaitOnAddress API is available. Using that and atomics to * implement semaphores increases performance. * SDL will fall back to Kernel Objects on older OS versions * or if forced to by this hint. * * This variable can be set to the following values: * "0" - Use Atomics and WaitOnAddress API when available. If not, fall back to Kernel Objects. (default) * "1" - Force the use of Kernel Objects in all cases. * */ #define SDL_HINT_WINDOWS_FORCE_SEMAPHORE_KERNEL "SDL_WINDOWS_FORCE_SEMAPHORE_KERNEL" /** * \brief A variable to specify custom icon resource id from RC file on Windows platform */ #define SDL_HINT_WINDOWS_INTRESOURCE_ICON "SDL_WINDOWS_INTRESOURCE_ICON" #define SDL_HINT_WINDOWS_INTRESOURCE_ICON_SMALL "SDL_WINDOWS_INTRESOURCE_ICON_SMALL" /** * \brief Tell SDL not to generate window-close events for Alt+F4 on Windows. * * The variable can be set to the following values: * "0" - SDL will generate a window-close event when it sees Alt+F4. * "1" - SDL will only do normal key handling for Alt+F4. */ #define SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 "SDL_WINDOWS_NO_CLOSE_ON_ALT_F4" /** * \brief Use the D3D9Ex API introduced in Windows Vista, instead of normal D3D9. * Direct3D 9Ex contains changes to state management that can eliminate device * loss errors during scenarios like Alt+Tab or UAC prompts. D3D9Ex may require * some changes to your application to cope with the new behavior, so this * is disabled by default. * * This hint must be set before initializing the video subsystem. * * For more information on Direct3D 9Ex, see: * - https://docs.microsoft.com/en-us/windows/win32/direct3darticles/graphics-apis-in-windows-vista#direct3d-9ex * - https://docs.microsoft.com/en-us/windows/win32/direct3darticles/direct3d-9ex-improvements * * This variable can be set to the following values: * "0" - Use the original Direct3D 9 API (default) * "1" - Use the Direct3D 9Ex API on Vista and later (and fall back if D3D9Ex is unavailable) * */ #define SDL_HINT_WINDOWS_USE_D3D9EX "SDL_WINDOWS_USE_D3D9EX" /** * \brief Controls whether SDL will declare the process to be DPI aware. * * This hint must be set before initializing the video subsystem. * * The main purpose of declaring DPI awareness is to disable OS bitmap scaling of SDL windows on monitors with * a DPI scale factor. * * This hint is equivalent to requesting DPI awareness via external means (e.g. calling SetProcessDpiAwarenessContext) * and does not cause SDL to use a virtualized coordinate system, so it will generally give you 1 SDL coordinate = 1 pixel * even on high-DPI displays. * * For more information, see: * https://docs.microsoft.com/en-us/windows/win32/hidpi/high-dpi-desktop-application-development-on-windows * * This variable can be set to the following values: * "" - Do not change the DPI awareness (default). * "unaware" - Declare the process as DPI unaware. (Windows 8.1 and later). * "system" - Request system DPI awareness. (Vista and later). * "permonitor" - Request per-monitor DPI awareness. (Windows 8.1 and later). * "permonitorv2" - Request per-monitor V2 DPI awareness. (Windows 10, version 1607 and later). * The most visible difference from "permonitor" is that window title bar will be scaled * to the visually correct size when dragging between monitors with different scale factors. * This is the preferred DPI awareness level. * * If the requested DPI awareness is not available on the currently running OS, SDL will try to request the best * available match. */ #define SDL_HINT_WINDOWS_DPI_AWARENESS "SDL_WINDOWS_DPI_AWARENESS" /** * \brief Uses DPI-scaled points as the SDL coordinate system on Windows. * * This changes the SDL coordinate system units to be DPI-scaled points, rather than pixels everywhere. * This means windows will be appropriately sized, even when created on high-DPI displays with scaling. * * e.g. requesting a 640x480 window from SDL, on a display with 125% scaling in Windows display settings, * will create a window with an 800x600 client area (in pixels). * * Setting this to "1" implicitly requests process DPI awareness (setting SDL_WINDOWS_DPI_AWARENESS is unnecessary), * and forces SDL_WINDOW_ALLOW_HIGHDPI on all windows. * * This variable can be set to the following values: * "0" - SDL coordinates equal Windows coordinates. No automatic window resizing when dragging * between monitors with different scale factors (unless this is performed by * Windows itself, which is the case when the process is DPI unaware). * "1" - SDL coordinates are in DPI-scaled points. Automatically resize windows as needed on * displays with non-100% scale factors. */ #define SDL_HINT_WINDOWS_DPI_SCALING "SDL_WINDOWS_DPI_SCALING" /** * \brief A variable controlling whether the window frame and title bar are interactive when the cursor is hidden * * This variable can be set to the following values: * "0" - The window frame is not interactive when the cursor is hidden (no move, resize, etc) * "1" - The window frame is interactive when the cursor is hidden * * By default SDL will allow interaction with the window frame when the cursor is hidden */ #define SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN "SDL_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN" /** * \brief A variable controlling whether the window is activated when the SDL_ShowWindow function is called * * This variable can be set to the following values: * "0" - The window is activated when the SDL_ShowWindow function is called * "1" - The window is not activated when the SDL_ShowWindow function is called * * By default SDL will activate the window when the SDL_ShowWindow function is called */ #define SDL_HINT_WINDOW_NO_ACTIVATION_WHEN_SHOWN "SDL_WINDOW_NO_ACTIVATION_WHEN_SHOWN" /** \brief Allows back-button-press events on Windows Phone to be marked as handled * * Windows Phone devices typically feature a Back button. When pressed, * the OS will emit back-button-press events, which apps are expected to * handle in an appropriate manner. If apps do not explicitly mark these * events as 'Handled', then the OS will invoke its default behavior for * unhandled back-button-press events, which on Windows Phone 8 and 8.1 is to * terminate the app (and attempt to switch to the previous app, or to the * device's home screen). * * Setting the SDL_HINT_WINRT_HANDLE_BACK_BUTTON hint to "1" will cause SDL * to mark back-button-press events as Handled, if and when one is sent to * the app. * * Internally, Windows Phone sends back button events as parameters to * special back-button-press callback functions. Apps that need to respond * to back-button-press events are expected to register one or more * callback functions for such, shortly after being launched (during the * app's initialization phase). After the back button is pressed, the OS * will invoke these callbacks. If the app's callback(s) do not explicitly * mark the event as handled by the time they return, or if the app never * registers one of these callback, the OS will consider the event * un-handled, and it will apply its default back button behavior (terminate * the app). * * SDL registers its own back-button-press callback with the Windows Phone * OS. This callback will emit a pair of SDL key-press events (SDL_KEYDOWN * and SDL_KEYUP), each with a scancode of SDL_SCANCODE_AC_BACK, after which * it will check the contents of the hint, SDL_HINT_WINRT_HANDLE_BACK_BUTTON. * If the hint's value is set to "1", the back button event's Handled * property will get set to 'true'. If the hint's value is set to something * else, or if it is unset, SDL will leave the event's Handled property * alone. (By default, the OS sets this property to 'false', to note.) * * SDL apps can either set SDL_HINT_WINRT_HANDLE_BACK_BUTTON well before a * back button is pressed, or can set it in direct-response to a back button * being pressed. * * In order to get notified when a back button is pressed, SDL apps should * register a callback function with SDL_AddEventWatch(), and have it listen * for SDL_KEYDOWN events that have a scancode of SDL_SCANCODE_AC_BACK. * (Alternatively, SDL_KEYUP events can be listened-for. Listening for * either event type is suitable.) Any value of SDL_HINT_WINRT_HANDLE_BACK_BUTTON * set by such a callback, will be applied to the OS' current * back-button-press event. * * More details on back button behavior in Windows Phone apps can be found * at the following page, on Microsoft's developer site: * http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj247550(v=vs.105).aspx */ #define SDL_HINT_WINRT_HANDLE_BACK_BUTTON "SDL_WINRT_HANDLE_BACK_BUTTON" /** \brief Label text for a WinRT app's privacy policy link * * Network-enabled WinRT apps must include a privacy policy. On Windows 8, 8.1, and RT, * Microsoft mandates that this policy be available via the Windows Settings charm. * SDL provides code to add a link there, with its label text being set via the * optional hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL. * * Please note that a privacy policy's contents are not set via this hint. A separate * hint, SDL_HINT_WINRT_PRIVACY_POLICY_URL, is used to link to the actual text of the * policy. * * The contents of this hint should be encoded as a UTF8 string. * * The default value is "Privacy Policy". This hint should only be set during app * initialization, preferably before any calls to SDL_Init(). * * For additional information on linking to a privacy policy, see the documentation for * SDL_HINT_WINRT_PRIVACY_POLICY_URL. */ #define SDL_HINT_WINRT_PRIVACY_POLICY_LABEL "SDL_WINRT_PRIVACY_POLICY_LABEL" /** * \brief A URL to a WinRT app's privacy policy * * All network-enabled WinRT apps must make a privacy policy available to its * users. On Windows 8, 8.1, and RT, Microsoft mandates that this policy be * be available in the Windows Settings charm, as accessed from within the app. * SDL provides code to add a URL-based link there, which can point to the app's * privacy policy. * * To setup a URL to an app's privacy policy, set SDL_HINT_WINRT_PRIVACY_POLICY_URL * before calling any SDL_Init() functions. The contents of the hint should * be a valid URL. For example, "http://www.example.com". * * The default value is "", which will prevent SDL from adding a privacy policy * link to the Settings charm. This hint should only be set during app init. * * The label text of an app's "Privacy Policy" link may be customized via another * hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL. * * Please note that on Windows Phone, Microsoft does not provide standard UI * for displaying a privacy policy link, and as such, SDL_HINT_WINRT_PRIVACY_POLICY_URL * will not get used on that platform. Network-enabled phone apps should display * their privacy policy through some other, in-app means. */ #define SDL_HINT_WINRT_PRIVACY_POLICY_URL "SDL_WINRT_PRIVACY_POLICY_URL" /** * \brief Mark X11 windows as override-redirect. * * If set, this _might_ increase framerate at the expense of the desktop * not working as expected. Override-redirect windows aren't noticed by the * window manager at all. * * You should probably only use this for fullscreen windows, and you probably * shouldn't even use it for that. But it's here if you want to try! */ #define SDL_HINT_X11_FORCE_OVERRIDE_REDIRECT "SDL_X11_FORCE_OVERRIDE_REDIRECT" /** * \brief A variable that lets you disable the detection and use of Xinput gamepad devices * * The variable can be set to the following values: * "0" - Disable XInput detection (only uses direct input) * "1" - Enable XInput detection (the default) */ #define SDL_HINT_XINPUT_ENABLED "SDL_XINPUT_ENABLED" /** * \brief A variable that lets you disable the detection and use of DirectInput gamepad devices * * The variable can be set to the following values: * "0" - Disable DirectInput detection (only uses XInput) * "1" - Enable DirectInput detection (the default) */ #define SDL_HINT_DIRECTINPUT_ENABLED "SDL_DIRECTINPUT_ENABLED" /** * \brief A variable that causes SDL to use the old axis and button mapping for XInput devices. * * This hint is for backwards compatibility only and will be removed in SDL 2.1 * * The default value is "0". This hint must be set before SDL_Init() */ #define SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING "SDL_XINPUT_USE_OLD_JOYSTICK_MAPPING" /** * \brief A variable that causes SDL to not ignore audio "monitors" * * This is currently only used for PulseAudio and ignored elsewhere. * * By default, SDL ignores audio devices that aren't associated with physical * hardware. Changing this hint to "1" will expose anything SDL sees that * appears to be an audio source or sink. This will add "devices" to the list * that the user probably doesn't want or need, but it can be useful in * scenarios where you want to hook up SDL to some sort of virtual device, * etc. * * The default value is "0". This hint must be set before SDL_Init(). * * This hint is available since SDL 2.0.16. Before then, virtual devices are * always ignored. */ #define SDL_HINT_AUDIO_INCLUDE_MONITORS "SDL_AUDIO_INCLUDE_MONITORS" /** * \brief A variable that forces X11 windows to create as a custom type. * * This is currently only used for X11 and ignored elsewhere. * * During SDL_CreateWindow, SDL uses the _NET_WM_WINDOW_TYPE X11 property * to report to the window manager the type of window it wants to create. * This might be set to various things if SDL_WINDOW_TOOLTIP or * SDL_WINDOW_POPUP_MENU, etc, were specified. For "normal" windows that * haven't set a specific type, this hint can be used to specify a custom * type. For example, a dock window might set this to * "_NET_WM_WINDOW_TYPE_DOCK". * * If not set or set to "", this hint is ignored. This hint must be set * before the SDL_CreateWindow() call that it is intended to affect. * * This hint is available since SDL 2.0.22. */ #define SDL_HINT_X11_WINDOW_TYPE "SDL_X11_WINDOW_TYPE" /** * \brief A variable that decides whether to send SDL_QUIT when closing the final window. * * By default, SDL sends an SDL_QUIT event when there is only one window * and it receives an SDL_WINDOWEVENT_CLOSE event, under the assumption most * apps would also take the loss of this window as a signal to terminate the * program. * * However, it's not unreasonable in some cases to have the program continue * to live on, perhaps to create new windows later. * * Changing this hint to "0" will cause SDL to not send an SDL_QUIT event * when the final window is requesting to close. Note that in this case, * there are still other legitimate reasons one might get an SDL_QUIT * event: choosing "Quit" from the macOS menu bar, sending a SIGINT (ctrl-c) * on Unix, etc. * * The default value is "1". This hint can be changed at any time. * * This hint is available since SDL 2.0.22. Before then, you always get * an SDL_QUIT event when closing the final window. */ #define SDL_HINT_QUIT_ON_LAST_WINDOW_CLOSE "SDL_QUIT_ON_LAST_WINDOW_CLOSE" /** * \brief A variable that decides what video backend to use. * * By default, SDL will try all available video backends in a reasonable * order until it finds one that can work, but this hint allows the app * or user to force a specific target, such as "x11" if, say, you are * on Wayland but want to try talking to the X server instead. * * This functionality has existed since SDL 2.0.0 (indeed, before that) * but before 2.0.22 this was an environment variable only. In 2.0.22, * it was upgraded to a full SDL hint, so you can set the environment * variable as usual or programatically set the hint with SDL_SetHint, * which won't propagate to child processes. * * The default value is unset, in which case SDL will try to figure out * the best video backend on your behalf. This hint needs to be set * before SDL_Init() is called to be useful. * * This hint is available since SDL 2.0.22. Before then, you could set * the environment variable to get the same effect. */ #define SDL_HINT_VIDEODRIVER "SDL_VIDEODRIVER" /** * \brief A variable that decides what audio backend to use. * * By default, SDL will try all available audio backends in a reasonable * order until it finds one that can work, but this hint allows the app * or user to force a specific target, such as "alsa" if, say, you are * on PulseAudio but want to try talking to the lower level instead. * * This functionality has existed since SDL 2.0.0 (indeed, before that) * but before 2.0.22 this was an environment variable only. In 2.0.22, * it was upgraded to a full SDL hint, so you can set the environment * variable as usual or programatically set the hint with SDL_SetHint, * which won't propagate to child processes. * * The default value is unset, in which case SDL will try to figure out * the best audio backend on your behalf. This hint needs to be set * before SDL_Init() is called to be useful. * * This hint is available since SDL 2.0.22. Before then, you could set * the environment variable to get the same effect. */ #define SDL_HINT_AUDIODRIVER "SDL_AUDIODRIVER" /** * \brief A variable that decides what KMSDRM device to use. * * Internally, SDL might open something like "/dev/dri/cardNN" to * access KMSDRM functionality, where "NN" is a device index number. * * SDL makes a guess at the best index to use (usually zero), but the * app or user can set this hint to a number between 0 and 99 to * force selection. * * This hint is available since SDL 2.24.0. */ #define SDL_HINT_KMSDRM_DEVICE_INDEX "SDL_KMSDRM_DEVICE_INDEX" /** * \brief A variable that treats trackpads as touch devices. * * On macOS (and possibly other platforms in the future), SDL will report * touches on a trackpad as mouse input, which is generally what users * expect from this device; however, these are often actually full * multitouch-capable touch devices, so it might be preferable to some apps * to treat them as such. * * Setting this hint to true will make the trackpad input report as a * multitouch device instead of a mouse. The default is false. * * Note that most platforms don't support this hint. As of 2.24.0, it * only supports MacBooks' trackpads on macOS. Others may follow later. * * This hint is checked during SDL_Init and can not be changed after. * * This hint is available since SDL 2.24.0. */ #define SDL_HINT_TRACKPAD_IS_TOUCH_ONLY "SDL_TRACKPAD_IS_TOUCH_ONLY" /** * Cause SDL to call dbus_shutdown() on quit. * * This is useful as a debug tool to validate memory leaks, but shouldn't ever * be set in production applications, as other libraries used by the application * might use dbus under the hood and this cause cause crashes if they continue * after SDL_Quit(). * * This variable can be set to the following values: * "0" - SDL will not call dbus_shutdown() on quit (default) * "1" - SDL will call dbus_shutdown() on quit * * This hint is available since SDL 2.30.0. */ #define SDL_HINT_SHUTDOWN_DBUS_ON_QUIT "SDL_SHUTDOWN_DBUS_ON_QUIT" /** * \brief An enumeration of hint priorities */ typedef enum { SDL_HINT_DEFAULT, SDL_HINT_NORMAL, SDL_HINT_OVERRIDE } SDL_HintPriority; /** * Set a hint with a specific priority. * * The priority controls the behavior when setting a hint that already has a * value. Hints will replace existing hints of their priority and lower. * Environment variables are considered to have override priority. * * \param name the hint to set * \param value the value of the hint variable * \param priority the SDL_HintPriority level for the hint * \returns SDL_TRUE if the hint was set, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetHint * \sa SDL_SetHint */ extern DECLSPEC SDL_bool SDLCALL SDL_SetHintWithPriority(const char *name, const char *value, SDL_HintPriority priority); /** * Set a hint with normal priority. * * Hints will not be set if there is an existing override hint or environment * variable that takes precedence. You can use SDL_SetHintWithPriority() to * set the hint with override priority instead. * * \param name the hint to set * \param value the value of the hint variable * \returns SDL_TRUE if the hint was set, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetHint * \sa SDL_SetHintWithPriority */ extern DECLSPEC SDL_bool SDLCALL SDL_SetHint(const char *name, const char *value); /** * Reset a hint to the default value. * * This will reset a hint to the value of the environment variable, or NULL if * the environment isn't set. Callbacks will be called normally with this * change. * * \param name the hint to set * \returns SDL_TRUE if the hint was set, SDL_FALSE otherwise. * * \since This function is available since SDL 2.24.0. * * \sa SDL_GetHint * \sa SDL_SetHint */ extern DECLSPEC SDL_bool SDLCALL SDL_ResetHint(const char *name); /** * Reset all hints to the default values. * * This will reset all hints to the value of the associated environment * variable, or NULL if the environment isn't set. Callbacks will be called * normally with this change. * * \since This function is available since SDL 2.26.0. * * \sa SDL_GetHint * \sa SDL_SetHint * \sa SDL_ResetHint */ extern DECLSPEC void SDLCALL SDL_ResetHints(void); /** * Get the value of a hint. * * \param name the hint to query * \returns the string value of a hint or NULL if the hint isn't set. * * \since This function is available since SDL 2.0.0. * * \sa SDL_SetHint * \sa SDL_SetHintWithPriority */ extern DECLSPEC const char * SDLCALL SDL_GetHint(const char *name); /** * Get the boolean value of a hint variable. * * \param name the name of the hint to get the boolean value from * \param default_value the value to return if the hint does not exist * \returns the boolean value of a hint or the provided default value if the * hint does not exist. * * \since This function is available since SDL 2.0.5. * * \sa SDL_GetHint * \sa SDL_SetHint */ extern DECLSPEC SDL_bool SDLCALL SDL_GetHintBoolean(const char *name, SDL_bool default_value); /** * Type definition of the hint callback function. * * \param userdata what was passed as `userdata` to SDL_AddHintCallback() * \param name what was passed as `name` to SDL_AddHintCallback() * \param oldValue the previous hint value * \param newValue the new value hint is to be set to */ typedef void (SDLCALL *SDL_HintCallback)(void *userdata, const char *name, const char *oldValue, const char *newValue); /** * Add a function to watch a particular hint. * * \param name the hint to watch * \param callback An SDL_HintCallback function that will be called when the * hint value changes * \param userdata a pointer to pass to the callback function * * \since This function is available since SDL 2.0.0. * * \sa SDL_DelHintCallback */ extern DECLSPEC void SDLCALL SDL_AddHintCallback(const char *name, SDL_HintCallback callback, void *userdata); /** * Remove a function watching a particular hint. * * \param name the hint being watched * \param callback An SDL_HintCallback function that will be called when the * hint value changes * \param userdata a pointer being passed to the callback function * * \since This function is available since SDL 2.0.0. * * \sa SDL_AddHintCallback */ extern DECLSPEC void SDLCALL SDL_DelHintCallback(const char *name, SDL_HintCallback callback, void *userdata); /** * Clear all hints. * * This function is automatically called during SDL_Quit(), and deletes all * callbacks without calling them and frees all memory associated with hints. * If you're calling this from application code you probably want to call * SDL_ResetHints() instead. * * This function will be removed from the API the next time we rev the ABI. * * \since This function is available since SDL 2.0.0. * * \sa SDL_ResetHints */ extern DECLSPEC void SDLCALL SDL_ClearHints(void); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_hints_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_joystick.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_joystick.h * * Include file for SDL joystick event handling * * The term "device_index" identifies currently plugged in joystick devices between 0 and SDL_NumJoysticks(), with the exact joystick * behind a device_index changing as joysticks are plugged and unplugged. * * The term "instance_id" is the current instantiation of a joystick device in the system, if the joystick is removed and then re-inserted * then it will get a new instance_id, instance_id's are monotonically increasing identifiers of a joystick plugged in. * * The term "player_index" is the number assigned to a player on a specific * controller. For XInput controllers this returns the XInput user index. * Many joysticks will not be able to supply this information. * * The term JoystickGUID is a stable 128-bit identifier for a joystick device that does not change over time, it identifies class of * the device (a X360 wired controller for example). This identifier is platform dependent. */ #ifndef SDL_joystick_h_ #define SDL_joystick_h_ #include "SDL_stdinc.h" #include "SDL_error.h" #include "SDL_guid.h" #include "SDL_mutex.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** * \file SDL_joystick.h * * In order to use these functions, SDL_Init() must have been called * with the ::SDL_INIT_JOYSTICK flag. This causes SDL to scan the system * for joysticks, and load appropriate drivers. * * If you would like to receive joystick updates while the application * is in the background, you should set the following hint before calling * SDL_Init(): SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS */ /** * The joystick structure used to identify an SDL joystick */ #ifdef SDL_THREAD_SAFETY_ANALYSIS extern SDL_mutex *SDL_joystick_lock; #endif struct _SDL_Joystick; typedef struct _SDL_Joystick SDL_Joystick; /* A structure that encodes the stable unique id for a joystick device */ typedef SDL_GUID SDL_JoystickGUID; /** * This is a unique ID for a joystick for the time it is connected to the system, * and is never reused for the lifetime of the application. If the joystick is * disconnected and reconnected, it will get a new ID. * * The ID value starts at 0 and increments from there. The value -1 is an invalid ID. */ typedef Sint32 SDL_JoystickID; typedef enum { SDL_JOYSTICK_TYPE_UNKNOWN, SDL_JOYSTICK_TYPE_GAMECONTROLLER, SDL_JOYSTICK_TYPE_WHEEL, SDL_JOYSTICK_TYPE_ARCADE_STICK, SDL_JOYSTICK_TYPE_FLIGHT_STICK, SDL_JOYSTICK_TYPE_DANCE_PAD, SDL_JOYSTICK_TYPE_GUITAR, SDL_JOYSTICK_TYPE_DRUM_KIT, SDL_JOYSTICK_TYPE_ARCADE_PAD, SDL_JOYSTICK_TYPE_THROTTLE } SDL_JoystickType; typedef enum { SDL_JOYSTICK_POWER_UNKNOWN = -1, SDL_JOYSTICK_POWER_EMPTY, /* <= 5% */ SDL_JOYSTICK_POWER_LOW, /* <= 20% */ SDL_JOYSTICK_POWER_MEDIUM, /* <= 70% */ SDL_JOYSTICK_POWER_FULL, /* <= 100% */ SDL_JOYSTICK_POWER_WIRED, SDL_JOYSTICK_POWER_MAX } SDL_JoystickPowerLevel; /* Set max recognized G-force from accelerometer See src/joystick/uikit/SDL_sysjoystick.m for notes on why this is needed */ #define SDL_IPHONE_MAX_GFORCE 5.0 /* Function prototypes */ /** * Locking for multi-threaded access to the joystick API * * If you are using the joystick API or handling events from multiple threads * you should use these locking functions to protect access to the joysticks. * * In particular, you are guaranteed that the joystick list won't change, so * the API functions that take a joystick index will be valid, and joystick * and game controller events will not be delivered. * * As of SDL 2.26.0, you can take the joystick lock around reinitializing the * joystick subsystem, to prevent other threads from seeing joysticks in an * uninitialized state. However, all open joysticks will be closed and SDL * functions called with them will fail. * * \since This function is available since SDL 2.0.7. */ extern DECLSPEC void SDLCALL SDL_LockJoysticks(void) SDL_ACQUIRE(SDL_joystick_lock); /** * Unlocking for multi-threaded access to the joystick API * * If you are using the joystick API or handling events from multiple threads * you should use these locking functions to protect access to the joysticks. * * In particular, you are guaranteed that the joystick list won't change, so * the API functions that take a joystick index will be valid, and joystick * and game controller events will not be delivered. * * \since This function is available since SDL 2.0.7. */ extern DECLSPEC void SDLCALL SDL_UnlockJoysticks(void) SDL_RELEASE(SDL_joystick_lock); /** * Count the number of joysticks attached to the system. * * \returns the number of attached joysticks on success or a negative error * code on failure; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_JoystickName * \sa SDL_JoystickPath * \sa SDL_JoystickOpen */ extern DECLSPEC int SDLCALL SDL_NumJoysticks(void); /** * Get the implementation dependent name of a joystick. * * This can be called before any joysticks are opened. * * \param device_index the index of the joystick to query (the N'th joystick * on the system) * \returns the name of the selected joystick. If no name can be found, this * function returns NULL; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_JoystickName * \sa SDL_JoystickOpen */ extern DECLSPEC const char *SDLCALL SDL_JoystickNameForIndex(int device_index); /** * Get the implementation dependent path of a joystick. * * This can be called before any joysticks are opened. * * \param device_index the index of the joystick to query (the N'th joystick * on the system) * \returns the path of the selected joystick. If no path can be found, this * function returns NULL; call SDL_GetError() for more information. * * \since This function is available since SDL 2.24.0. * * \sa SDL_JoystickPath * \sa SDL_JoystickOpen */ extern DECLSPEC const char *SDLCALL SDL_JoystickPathForIndex(int device_index); /** * Get the player index of a joystick, or -1 if it's not available This can be * called before any joysticks are opened. * * \since This function is available since SDL 2.0.9. */ extern DECLSPEC int SDLCALL SDL_JoystickGetDevicePlayerIndex(int device_index); /** * Get the implementation-dependent GUID for the joystick at a given device * index. * * This function can be called before any joysticks are opened. * * \param device_index the index of the joystick to query (the N'th joystick * on the system * \returns the GUID of the selected joystick. If called on an invalid index, * this function returns a zero GUID * * \since This function is available since SDL 2.0.0. * * \sa SDL_JoystickGetGUID * \sa SDL_JoystickGetGUIDString */ extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetDeviceGUID(int device_index); /** * Get the USB vendor ID of a joystick, if available. * * This can be called before any joysticks are opened. If the vendor ID isn't * available this function returns 0. * * \param device_index the index of the joystick to query (the N'th joystick * on the system * \returns the USB vendor ID of the selected joystick. If called on an * invalid index, this function returns zero * * \since This function is available since SDL 2.0.6. */ extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetDeviceVendor(int device_index); /** * Get the USB product ID of a joystick, if available. * * This can be called before any joysticks are opened. If the product ID isn't * available this function returns 0. * * \param device_index the index of the joystick to query (the N'th joystick * on the system * \returns the USB product ID of the selected joystick. If called on an * invalid index, this function returns zero * * \since This function is available since SDL 2.0.6. */ extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetDeviceProduct(int device_index); /** * Get the product version of a joystick, if available. * * This can be called before any joysticks are opened. If the product version * isn't available this function returns 0. * * \param device_index the index of the joystick to query (the N'th joystick * on the system * \returns the product version of the selected joystick. If called on an * invalid index, this function returns zero * * \since This function is available since SDL 2.0.6. */ extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetDeviceProductVersion(int device_index); /** * Get the type of a joystick, if available. * * This can be called before any joysticks are opened. * * \param device_index the index of the joystick to query (the N'th joystick * on the system * \returns the SDL_JoystickType of the selected joystick. If called on an * invalid index, this function returns `SDL_JOYSTICK_TYPE_UNKNOWN` * * \since This function is available since SDL 2.0.6. */ extern DECLSPEC SDL_JoystickType SDLCALL SDL_JoystickGetDeviceType(int device_index); /** * Get the instance ID of a joystick. * * This can be called before any joysticks are opened. * * \param device_index the index of the joystick to query (the N'th joystick * on the system * \returns the instance id of the selected joystick. If called on an invalid * index, this function returns -1. * * \since This function is available since SDL 2.0.6. */ extern DECLSPEC SDL_JoystickID SDLCALL SDL_JoystickGetDeviceInstanceID(int device_index); /** * Open a joystick for use. * * The `device_index` argument refers to the N'th joystick presently * recognized by SDL on the system. It is **NOT** the same as the instance ID * used to identify the joystick in future events. See * SDL_JoystickInstanceID() for more details about instance IDs. * * The joystick subsystem must be initialized before a joystick can be opened * for use. * * \param device_index the index of the joystick to query * \returns a joystick identifier or NULL if an error occurred; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_JoystickClose * \sa SDL_JoystickInstanceID */ extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickOpen(int device_index); /** * Get the SDL_Joystick associated with an instance id. * * \param instance_id the instance id to get the SDL_Joystick for * \returns an SDL_Joystick on success or NULL on failure; call SDL_GetError() * for more information. * * \since This function is available since SDL 2.0.4. */ extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickFromInstanceID(SDL_JoystickID instance_id); /** * Get the SDL_Joystick associated with a player index. * * \param player_index the player index to get the SDL_Joystick for * \returns an SDL_Joystick on success or NULL on failure; call SDL_GetError() * for more information. * * \since This function is available since SDL 2.0.12. */ extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickFromPlayerIndex(int player_index); /** * Attach a new virtual joystick. * * \returns the joystick's device index, or -1 if an error occurred. * * \since This function is available since SDL 2.0.14. */ extern DECLSPEC int SDLCALL SDL_JoystickAttachVirtual(SDL_JoystickType type, int naxes, int nbuttons, int nhats); /** * The structure that defines an extended virtual joystick description * * The caller must zero the structure and then initialize the version with `SDL_VIRTUAL_JOYSTICK_DESC_VERSION` before passing it to SDL_JoystickAttachVirtualEx() * All other elements of this structure are optional and can be left 0. * * \sa SDL_JoystickAttachVirtualEx */ typedef struct SDL_VirtualJoystickDesc { Uint16 version; /**< `SDL_VIRTUAL_JOYSTICK_DESC_VERSION` */ Uint16 type; /**< `SDL_JoystickType` */ Uint16 naxes; /**< the number of axes on this joystick */ Uint16 nbuttons; /**< the number of buttons on this joystick */ Uint16 nhats; /**< the number of hats on this joystick */ Uint16 vendor_id; /**< the USB vendor ID of this joystick */ Uint16 product_id; /**< the USB product ID of this joystick */ Uint16 padding; /**< unused */ Uint32 button_mask; /**< A mask of which buttons are valid for this controller e.g. (1 << SDL_CONTROLLER_BUTTON_A) */ Uint32 axis_mask; /**< A mask of which axes are valid for this controller e.g. (1 << SDL_CONTROLLER_AXIS_LEFTX) */ const char *name; /**< the name of the joystick */ void *userdata; /**< User data pointer passed to callbacks */ void (SDLCALL *Update)(void *userdata); /**< Called when the joystick state should be updated */ void (SDLCALL *SetPlayerIndex)(void *userdata, int player_index); /**< Called when the player index is set */ int (SDLCALL *Rumble)(void *userdata, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble); /**< Implements SDL_JoystickRumble() */ int (SDLCALL *RumbleTriggers)(void *userdata, Uint16 left_rumble, Uint16 right_rumble); /**< Implements SDL_JoystickRumbleTriggers() */ int (SDLCALL *SetLED)(void *userdata, Uint8 red, Uint8 green, Uint8 blue); /**< Implements SDL_JoystickSetLED() */ int (SDLCALL *SendEffect)(void *userdata, const void *data, int size); /**< Implements SDL_JoystickSendEffect() */ } SDL_VirtualJoystickDesc; /** * \brief The current version of the SDL_VirtualJoystickDesc structure */ #define SDL_VIRTUAL_JOYSTICK_DESC_VERSION 1 /** * Attach a new virtual joystick with extended properties. * * \returns the joystick's device index, or -1 if an error occurred. * * \since This function is available since SDL 2.24.0. */ extern DECLSPEC int SDLCALL SDL_JoystickAttachVirtualEx(const SDL_VirtualJoystickDesc *desc); /** * Detach a virtual joystick. * * \param device_index a value previously returned from * SDL_JoystickAttachVirtual() * \returns 0 on success, or -1 if an error occurred. * * \since This function is available since SDL 2.0.14. */ extern DECLSPEC int SDLCALL SDL_JoystickDetachVirtual(int device_index); /** * Query whether or not the joystick at a given device index is virtual. * * \param device_index a joystick device index. * \returns SDL_TRUE if the joystick is virtual, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.14. */ extern DECLSPEC SDL_bool SDLCALL SDL_JoystickIsVirtual(int device_index); /** * Set values on an opened, virtual-joystick's axis. * * Please note that values set here will not be applied until the next call to * SDL_JoystickUpdate, which can either be called directly, or can be called * indirectly through various other SDL APIs, including, but not limited to * the following: SDL_PollEvent, SDL_PumpEvents, SDL_WaitEventTimeout, * SDL_WaitEvent. * * Note that when sending trigger axes, you should scale the value to the full * range of Sint16. For example, a trigger at rest would have the value of * `SDL_JOYSTICK_AXIS_MIN`. * * \param joystick the virtual joystick on which to set state. * \param axis the specific axis on the virtual joystick to set. * \param value the new value for the specified axis. * \returns 0 on success, -1 on error. * * \since This function is available since SDL 2.0.14. */ extern DECLSPEC int SDLCALL SDL_JoystickSetVirtualAxis(SDL_Joystick *joystick, int axis, Sint16 value); /** * Set values on an opened, virtual-joystick's button. * * Please note that values set here will not be applied until the next call to * SDL_JoystickUpdate, which can either be called directly, or can be called * indirectly through various other SDL APIs, including, but not limited to * the following: SDL_PollEvent, SDL_PumpEvents, SDL_WaitEventTimeout, * SDL_WaitEvent. * * \param joystick the virtual joystick on which to set state. * \param button the specific button on the virtual joystick to set. * \param value the new value for the specified button. * \returns 0 on success, -1 on error. * * \since This function is available since SDL 2.0.14. */ extern DECLSPEC int SDLCALL SDL_JoystickSetVirtualButton(SDL_Joystick *joystick, int button, Uint8 value); /** * Set values on an opened, virtual-joystick's hat. * * Please note that values set here will not be applied until the next call to * SDL_JoystickUpdate, which can either be called directly, or can be called * indirectly through various other SDL APIs, including, but not limited to * the following: SDL_PollEvent, SDL_PumpEvents, SDL_WaitEventTimeout, * SDL_WaitEvent. * * \param joystick the virtual joystick on which to set state. * \param hat the specific hat on the virtual joystick to set. * \param value the new value for the specified hat. * \returns 0 on success, -1 on error. * * \since This function is available since SDL 2.0.14. */ extern DECLSPEC int SDLCALL SDL_JoystickSetVirtualHat(SDL_Joystick *joystick, int hat, Uint8 value); /** * Get the implementation dependent name of a joystick. * * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() * \returns the name of the selected joystick. If no name can be found, this * function returns NULL; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_JoystickNameForIndex * \sa SDL_JoystickOpen */ extern DECLSPEC const char *SDLCALL SDL_JoystickName(SDL_Joystick *joystick); /** * Get the implementation dependent path of a joystick. * * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() * \returns the path of the selected joystick. If no path can be found, this * function returns NULL; call SDL_GetError() for more information. * * \since This function is available since SDL 2.24.0. * * \sa SDL_JoystickPathForIndex */ extern DECLSPEC const char *SDLCALL SDL_JoystickPath(SDL_Joystick *joystick); /** * Get the player index of an opened joystick. * * For XInput controllers this returns the XInput user index. Many joysticks * will not be able to supply this information. * * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() * \returns the player index, or -1 if it's not available. * * \since This function is available since SDL 2.0.9. */ extern DECLSPEC int SDLCALL SDL_JoystickGetPlayerIndex(SDL_Joystick *joystick); /** * Set the player index of an opened joystick. * * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() * \param player_index Player index to assign to this joystick, or -1 to clear * the player index and turn off player LEDs. * * \since This function is available since SDL 2.0.12. */ extern DECLSPEC void SDLCALL SDL_JoystickSetPlayerIndex(SDL_Joystick *joystick, int player_index); /** * Get the implementation-dependent GUID for the joystick. * * This function requires an open joystick. * * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() * \returns the GUID of the given joystick. If called on an invalid index, * this function returns a zero GUID; call SDL_GetError() for more * information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_JoystickGetDeviceGUID * \sa SDL_JoystickGetGUIDString */ extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetGUID(SDL_Joystick *joystick); /** * Get the USB vendor ID of an opened joystick, if available. * * If the vendor ID isn't available this function returns 0. * * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() * \returns the USB vendor ID of the selected joystick, or 0 if unavailable. * * \since This function is available since SDL 2.0.6. */ extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetVendor(SDL_Joystick *joystick); /** * Get the USB product ID of an opened joystick, if available. * * If the product ID isn't available this function returns 0. * * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() * \returns the USB product ID of the selected joystick, or 0 if unavailable. * * \since This function is available since SDL 2.0.6. */ extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetProduct(SDL_Joystick *joystick); /** * Get the product version of an opened joystick, if available. * * If the product version isn't available this function returns 0. * * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() * \returns the product version of the selected joystick, or 0 if unavailable. * * \since This function is available since SDL 2.0.6. */ extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetProductVersion(SDL_Joystick *joystick); /** * Get the firmware version of an opened joystick, if available. * * If the firmware version isn't available this function returns 0. * * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() * \returns the firmware version of the selected joystick, or 0 if * unavailable. * * \since This function is available since SDL 2.24.0. */ extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetFirmwareVersion(SDL_Joystick *joystick); /** * Get the serial number of an opened joystick, if available. * * Returns the serial number of the joystick, or NULL if it is not available. * * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() * \returns the serial number of the selected joystick, or NULL if * unavailable. * * \since This function is available since SDL 2.0.14. */ extern DECLSPEC const char * SDLCALL SDL_JoystickGetSerial(SDL_Joystick *joystick); /** * Get the type of an opened joystick. * * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() * \returns the SDL_JoystickType of the selected joystick. * * \since This function is available since SDL 2.0.6. */ extern DECLSPEC SDL_JoystickType SDLCALL SDL_JoystickGetType(SDL_Joystick *joystick); /** * Get an ASCII string representation for a given SDL_JoystickGUID. * * You should supply at least 33 bytes for pszGUID. * * \param guid the SDL_JoystickGUID you wish to convert to string * \param pszGUID buffer in which to write the ASCII string * \param cbGUID the size of pszGUID * * \since This function is available since SDL 2.0.0. * * \sa SDL_JoystickGetDeviceGUID * \sa SDL_JoystickGetGUID * \sa SDL_JoystickGetGUIDFromString */ extern DECLSPEC void SDLCALL SDL_JoystickGetGUIDString(SDL_JoystickGUID guid, char *pszGUID, int cbGUID); /** * Convert a GUID string into a SDL_JoystickGUID structure. * * Performs no error checking. If this function is given a string containing * an invalid GUID, the function will silently succeed, but the GUID generated * will not be useful. * * \param pchGUID string containing an ASCII representation of a GUID * \returns a SDL_JoystickGUID structure. * * \since This function is available since SDL 2.0.0. * * \sa SDL_JoystickGetGUIDString */ extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetGUIDFromString(const char *pchGUID); /** * Get the device information encoded in a SDL_JoystickGUID structure * * \param guid the SDL_JoystickGUID you wish to get info about * \param vendor A pointer filled in with the device VID, or 0 if not * available * \param product A pointer filled in with the device PID, or 0 if not * available * \param version A pointer filled in with the device version, or 0 if not * available * \param crc16 A pointer filled in with a CRC used to distinguish different * products with the same VID/PID, or 0 if not available * * \since This function is available since SDL 2.26.0. * * \sa SDL_JoystickGetDeviceGUID */ extern DECLSPEC void SDLCALL SDL_GetJoystickGUIDInfo(SDL_JoystickGUID guid, Uint16 *vendor, Uint16 *product, Uint16 *version, Uint16 *crc16); /** * Get the status of a specified joystick. * * \param joystick the joystick to query * \returns SDL_TRUE if the joystick has been opened, SDL_FALSE if it has not; * call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_JoystickClose * \sa SDL_JoystickOpen */ extern DECLSPEC SDL_bool SDLCALL SDL_JoystickGetAttached(SDL_Joystick *joystick); /** * Get the instance ID of an opened joystick. * * \param joystick an SDL_Joystick structure containing joystick information * \returns the instance ID of the specified joystick on success or a negative * error code on failure; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_JoystickOpen */ extern DECLSPEC SDL_JoystickID SDLCALL SDL_JoystickInstanceID(SDL_Joystick *joystick); /** * Get the number of general axis controls on a joystick. * * Often, the directional pad on a game controller will either look like 4 * separate buttons or a POV hat, and not axes, but all of this is up to the * device and platform. * * \param joystick an SDL_Joystick structure containing joystick information * \returns the number of axis controls/number of axes on success or a * negative error code on failure; call SDL_GetError() for more * information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_JoystickGetAxis * \sa SDL_JoystickOpen */ extern DECLSPEC int SDLCALL SDL_JoystickNumAxes(SDL_Joystick *joystick); /** * Get the number of trackballs on a joystick. * * Joystick trackballs have only relative motion events associated with them * and their state cannot be polled. * * Most joysticks do not have trackballs. * * \param joystick an SDL_Joystick structure containing joystick information * \returns the number of trackballs on success or a negative error code on * failure; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_JoystickGetBall */ extern DECLSPEC int SDLCALL SDL_JoystickNumBalls(SDL_Joystick *joystick); /** * Get the number of POV hats on a joystick. * * \param joystick an SDL_Joystick structure containing joystick information * \returns the number of POV hats on success or a negative error code on * failure; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_JoystickGetHat * \sa SDL_JoystickOpen */ extern DECLSPEC int SDLCALL SDL_JoystickNumHats(SDL_Joystick *joystick); /** * Get the number of buttons on a joystick. * * \param joystick an SDL_Joystick structure containing joystick information * \returns the number of buttons on success or a negative error code on * failure; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_JoystickGetButton * \sa SDL_JoystickOpen */ extern DECLSPEC int SDLCALL SDL_JoystickNumButtons(SDL_Joystick *joystick); /** * Update the current state of the open joysticks. * * This is called automatically by the event loop if any joystick events are * enabled. * * \since This function is available since SDL 2.0.0. * * \sa SDL_JoystickEventState */ extern DECLSPEC void SDLCALL SDL_JoystickUpdate(void); /** * Enable/disable joystick event polling. * * If joystick events are disabled, you must call SDL_JoystickUpdate() * yourself and manually check the state of the joystick when you want * joystick information. * * It is recommended that you leave joystick event handling enabled. * * **WARNING**: Calling this function may delete all events currently in SDL's * event queue. * * \param state can be one of `SDL_QUERY`, `SDL_IGNORE`, or `SDL_ENABLE` * \returns 1 if enabled, 0 if disabled, or a negative error code on failure; * call SDL_GetError() for more information. * * If `state` is `SDL_QUERY` then the current state is returned, * otherwise the new processing state is returned. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GameControllerEventState */ extern DECLSPEC int SDLCALL SDL_JoystickEventState(int state); #define SDL_JOYSTICK_AXIS_MAX 32767 #define SDL_JOYSTICK_AXIS_MIN -32768 /** * Get the current state of an axis control on a joystick. * * SDL makes no promises about what part of the joystick any given axis refers * to. Your game should have some sort of configuration UI to let users * specify what each axis should be bound to. Alternately, SDL's higher-level * Game Controller API makes a great effort to apply order to this lower-level * interface, so you know that a specific axis is the "left thumb stick," etc. * * The value returned by SDL_JoystickGetAxis() is a signed integer (-32768 to * 32767) representing the current position of the axis. It may be necessary * to impose certain tolerances on these values to account for jitter. * * \param joystick an SDL_Joystick structure containing joystick information * \param axis the axis to query; the axis indices start at index 0 * \returns a 16-bit signed integer representing the current position of the * axis or 0 on failure; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_JoystickNumAxes */ extern DECLSPEC Sint16 SDLCALL SDL_JoystickGetAxis(SDL_Joystick *joystick, int axis); /** * Get the initial state of an axis control on a joystick. * * The state is a value ranging from -32768 to 32767. * * The axis indices start at index 0. * * \param joystick an SDL_Joystick structure containing joystick information * \param axis the axis to query; the axis indices start at index 0 * \param state Upon return, the initial value is supplied here. * \return SDL_TRUE if this axis has any initial value, or SDL_FALSE if not. * * \since This function is available since SDL 2.0.6. */ extern DECLSPEC SDL_bool SDLCALL SDL_JoystickGetAxisInitialState(SDL_Joystick *joystick, int axis, Sint16 *state); /** * \name Hat positions */ /* @{ */ #define SDL_HAT_CENTERED 0x00 #define SDL_HAT_UP 0x01 #define SDL_HAT_RIGHT 0x02 #define SDL_HAT_DOWN 0x04 #define SDL_HAT_LEFT 0x08 #define SDL_HAT_RIGHTUP (SDL_HAT_RIGHT|SDL_HAT_UP) #define SDL_HAT_RIGHTDOWN (SDL_HAT_RIGHT|SDL_HAT_DOWN) #define SDL_HAT_LEFTUP (SDL_HAT_LEFT|SDL_HAT_UP) #define SDL_HAT_LEFTDOWN (SDL_HAT_LEFT|SDL_HAT_DOWN) /* @} */ /** * Get the current state of a POV hat on a joystick. * * The returned value will be one of the following positions: * * - `SDL_HAT_CENTERED` * - `SDL_HAT_UP` * - `SDL_HAT_RIGHT` * - `SDL_HAT_DOWN` * - `SDL_HAT_LEFT` * - `SDL_HAT_RIGHTUP` * - `SDL_HAT_RIGHTDOWN` * - `SDL_HAT_LEFTUP` * - `SDL_HAT_LEFTDOWN` * * \param joystick an SDL_Joystick structure containing joystick information * \param hat the hat index to get the state from; indices start at index 0 * \returns the current hat position. * * \since This function is available since SDL 2.0.0. * * \sa SDL_JoystickNumHats */ extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetHat(SDL_Joystick *joystick, int hat); /** * Get the ball axis change since the last poll. * * Trackballs can only return relative motion since the last call to * SDL_JoystickGetBall(), these motion deltas are placed into `dx` and `dy`. * * Most joysticks do not have trackballs. * * \param joystick the SDL_Joystick to query * \param ball the ball index to query; ball indices start at index 0 * \param dx stores the difference in the x axis position since the last poll * \param dy stores the difference in the y axis position since the last poll * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_JoystickNumBalls */ extern DECLSPEC int SDLCALL SDL_JoystickGetBall(SDL_Joystick *joystick, int ball, int *dx, int *dy); /** * Get the current state of a button on a joystick. * * \param joystick an SDL_Joystick structure containing joystick information * \param button the button index to get the state from; indices start at * index 0 * \returns 1 if the specified button is pressed, 0 otherwise. * * \since This function is available since SDL 2.0.0. * * \sa SDL_JoystickNumButtons */ extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetButton(SDL_Joystick *joystick, int button); /** * Start a rumble effect. * * Each call to this function cancels any previous rumble effect, and calling * it with 0 intensity stops any rumbling. * * \param joystick The joystick to vibrate * \param low_frequency_rumble The intensity of the low frequency (left) * rumble motor, from 0 to 0xFFFF * \param high_frequency_rumble The intensity of the high frequency (right) * rumble motor, from 0 to 0xFFFF * \param duration_ms The duration of the rumble effect, in milliseconds * \returns 0, or -1 if rumble isn't supported on this joystick * * \since This function is available since SDL 2.0.9. * * \sa SDL_JoystickHasRumble */ extern DECLSPEC int SDLCALL SDL_JoystickRumble(SDL_Joystick *joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms); /** * Start a rumble effect in the joystick's triggers * * Each call to this function cancels any previous trigger rumble effect, and * calling it with 0 intensity stops any rumbling. * * Note that this is rumbling of the _triggers_ and not the game controller as * a whole. This is currently only supported on Xbox One controllers. If you * want the (more common) whole-controller rumble, use SDL_JoystickRumble() * instead. * * \param joystick The joystick to vibrate * \param left_rumble The intensity of the left trigger rumble motor, from 0 * to 0xFFFF * \param right_rumble The intensity of the right trigger rumble motor, from 0 * to 0xFFFF * \param duration_ms The duration of the rumble effect, in milliseconds * \returns 0, or -1 if trigger rumble isn't supported on this joystick * * \since This function is available since SDL 2.0.14. * * \sa SDL_JoystickHasRumbleTriggers */ extern DECLSPEC int SDLCALL SDL_JoystickRumbleTriggers(SDL_Joystick *joystick, Uint16 left_rumble, Uint16 right_rumble, Uint32 duration_ms); /** * Query whether a joystick has an LED. * * An example of a joystick LED is the light on the back of a PlayStation 4's * DualShock 4 controller. * * \param joystick The joystick to query * \return SDL_TRUE if the joystick has a modifiable LED, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.14. */ extern DECLSPEC SDL_bool SDLCALL SDL_JoystickHasLED(SDL_Joystick *joystick); /** * Query whether a joystick has rumble support. * * \param joystick The joystick to query * \return SDL_TRUE if the joystick has rumble, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.18. * * \sa SDL_JoystickRumble */ extern DECLSPEC SDL_bool SDLCALL SDL_JoystickHasRumble(SDL_Joystick *joystick); /** * Query whether a joystick has rumble support on triggers. * * \param joystick The joystick to query * \return SDL_TRUE if the joystick has trigger rumble, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.18. * * \sa SDL_JoystickRumbleTriggers */ extern DECLSPEC SDL_bool SDLCALL SDL_JoystickHasRumbleTriggers(SDL_Joystick *joystick); /** * Update a joystick's LED color. * * An example of a joystick LED is the light on the back of a PlayStation 4's * DualShock 4 controller. * * \param joystick The joystick to update * \param red The intensity of the red LED * \param green The intensity of the green LED * \param blue The intensity of the blue LED * \returns 0 on success, -1 if this joystick does not have a modifiable LED * * \since This function is available since SDL 2.0.14. */ extern DECLSPEC int SDLCALL SDL_JoystickSetLED(SDL_Joystick *joystick, Uint8 red, Uint8 green, Uint8 blue); /** * Send a joystick specific effect packet * * \param joystick The joystick to affect * \param data The data to send to the joystick * \param size The size of the data to send to the joystick * \returns 0, or -1 if this joystick or driver doesn't support effect packets * * \since This function is available since SDL 2.0.16. */ extern DECLSPEC int SDLCALL SDL_JoystickSendEffect(SDL_Joystick *joystick, const void *data, int size); /** * Close a joystick previously opened with SDL_JoystickOpen(). * * \param joystick The joystick device to close * * \since This function is available since SDL 2.0.0. * * \sa SDL_JoystickOpen */ extern DECLSPEC void SDLCALL SDL_JoystickClose(SDL_Joystick *joystick); /** * Get the battery level of a joystick as SDL_JoystickPowerLevel. * * \param joystick the SDL_Joystick to query * \returns the current battery level as SDL_JoystickPowerLevel on success or * `SDL_JOYSTICK_POWER_UNKNOWN` if it is unknown * * \since This function is available since SDL 2.0.4. */ extern DECLSPEC SDL_JoystickPowerLevel SDLCALL SDL_JoystickCurrentPowerLevel(SDL_Joystick *joystick); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_joystick_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_keyboard.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_keyboard.h * * Include file for SDL keyboard event handling */ #ifndef SDL_keyboard_h_ #define SDL_keyboard_h_ #include "SDL_stdinc.h" #include "SDL_error.h" #include "SDL_keycode.h" #include "SDL_video.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** * \brief The SDL keysym structure, used in key events. * * \note If you are looking for translated character input, see the ::SDL_TEXTINPUT event. */ typedef struct SDL_Keysym { SDL_Scancode scancode; /**< SDL physical key code - see ::SDL_Scancode for details */ SDL_Keycode sym; /**< SDL virtual key code - see ::SDL_Keycode for details */ Uint16 mod; /**< current key modifiers */ Uint32 unused; } SDL_Keysym; /* Function prototypes */ /** * Query the window which currently has keyboard focus. * * \returns the window with keyboard focus. * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC SDL_Window * SDLCALL SDL_GetKeyboardFocus(void); /** * Get a snapshot of the current state of the keyboard. * * The pointer returned is a pointer to an internal SDL array. It will be * valid for the whole lifetime of the application and should not be freed by * the caller. * * A array element with a value of 1 means that the key is pressed and a value * of 0 means that it is not. Indexes into this array are obtained by using * SDL_Scancode values. * * Use SDL_PumpEvents() to update the state array. * * This function gives you the current state after all events have been * processed, so if a key or button has been pressed and released before you * process events, then the pressed state will never show up in the * SDL_GetKeyboardState() calls. * * Note: This function doesn't take into account whether shift has been * pressed or not. * * \param numkeys if non-NULL, receives the length of the returned array * \returns a pointer to an array of key states. * * \since This function is available since SDL 2.0.0. * * \sa SDL_PumpEvents * \sa SDL_ResetKeyboard */ extern DECLSPEC const Uint8 *SDLCALL SDL_GetKeyboardState(int *numkeys); /** * Clear the state of the keyboard * * This function will generate key up events for all pressed keys. * * \since This function is available since SDL 2.24.0. * * \sa SDL_GetKeyboardState */ extern DECLSPEC void SDLCALL SDL_ResetKeyboard(void); /** * Get the current key modifier state for the keyboard. * * \returns an OR'd combination of the modifier keys for the keyboard. See * SDL_Keymod for details. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetKeyboardState * \sa SDL_SetModState */ extern DECLSPEC SDL_Keymod SDLCALL SDL_GetModState(void); /** * Set the current key modifier state for the keyboard. * * The inverse of SDL_GetModState(), SDL_SetModState() allows you to impose * modifier key states on your application. Simply pass your desired modifier * states into `modstate`. This value may be a bitwise, OR'd combination of * SDL_Keymod values. * * This does not change the keyboard state, only the key modifier flags that * SDL reports. * * \param modstate the desired SDL_Keymod for the keyboard * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetModState */ extern DECLSPEC void SDLCALL SDL_SetModState(SDL_Keymod modstate); /** * Get the key code corresponding to the given scancode according to the * current keyboard layout. * * See SDL_Keycode for details. * * \param scancode the desired SDL_Scancode to query * \returns the SDL_Keycode that corresponds to the given SDL_Scancode. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetKeyName * \sa SDL_GetScancodeFromKey */ extern DECLSPEC SDL_Keycode SDLCALL SDL_GetKeyFromScancode(SDL_Scancode scancode); /** * Get the scancode corresponding to the given key code according to the * current keyboard layout. * * See SDL_Scancode for details. * * \param key the desired SDL_Keycode to query * \returns the SDL_Scancode that corresponds to the given SDL_Keycode. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetKeyFromScancode * \sa SDL_GetScancodeName */ extern DECLSPEC SDL_Scancode SDLCALL SDL_GetScancodeFromKey(SDL_Keycode key); /** * Get a human-readable name for a scancode. * * See SDL_Scancode for details. * * **Warning**: The returned name is by design not stable across platforms, * e.g. the name for `SDL_SCANCODE_LGUI` is "Left GUI" under Linux but "Left * Windows" under Microsoft Windows, and some scancodes like * `SDL_SCANCODE_NONUSBACKSLASH` don't have any name at all. There are even * scancodes that share names, e.g. `SDL_SCANCODE_RETURN` and * `SDL_SCANCODE_RETURN2` (both called "Return"). This function is therefore * unsuitable for creating a stable cross-platform two-way mapping between * strings and scancodes. * * \param scancode the desired SDL_Scancode to query * \returns a pointer to the name for the scancode. If the scancode doesn't * have a name this function returns an empty string (""). * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetScancodeFromKey * \sa SDL_GetScancodeFromName */ extern DECLSPEC const char *SDLCALL SDL_GetScancodeName(SDL_Scancode scancode); /** * Get a scancode from a human-readable name. * * \param name the human-readable scancode name * \returns the SDL_Scancode, or `SDL_SCANCODE_UNKNOWN` if the name wasn't * recognized; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetKeyFromName * \sa SDL_GetScancodeFromKey * \sa SDL_GetScancodeName */ extern DECLSPEC SDL_Scancode SDLCALL SDL_GetScancodeFromName(const char *name); /** * Get a human-readable name for a key. * * See SDL_Scancode and SDL_Keycode for details. * * \param key the desired SDL_Keycode to query * \returns a pointer to a UTF-8 string that stays valid at least until the * next call to this function. If you need it around any longer, you * must copy it. If the key doesn't have a name, this function * returns an empty string (""). * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetKeyFromName * \sa SDL_GetKeyFromScancode * \sa SDL_GetScancodeFromKey */ extern DECLSPEC const char *SDLCALL SDL_GetKeyName(SDL_Keycode key); /** * Get a key code from a human-readable name. * * \param name the human-readable key name * \returns key code, or `SDLK_UNKNOWN` if the name wasn't recognized; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetKeyFromScancode * \sa SDL_GetKeyName * \sa SDL_GetScancodeFromName */ extern DECLSPEC SDL_Keycode SDLCALL SDL_GetKeyFromName(const char *name); /** * Start accepting Unicode text input events. * * This function will start accepting Unicode text input events in the focused * SDL window, and start emitting SDL_TextInputEvent (SDL_TEXTINPUT) and * SDL_TextEditingEvent (SDL_TEXTEDITING) events. Please use this function in * pair with SDL_StopTextInput(). * * On some platforms using this function activates the screen keyboard. * * \since This function is available since SDL 2.0.0. * * \sa SDL_SetTextInputRect * \sa SDL_StopTextInput */ extern DECLSPEC void SDLCALL SDL_StartTextInput(void); /** * Check whether or not Unicode text input events are enabled. * * \returns SDL_TRUE if text input events are enabled else SDL_FALSE. * * \since This function is available since SDL 2.0.0. * * \sa SDL_StartTextInput */ extern DECLSPEC SDL_bool SDLCALL SDL_IsTextInputActive(void); /** * Stop receiving any text input events. * * \since This function is available since SDL 2.0.0. * * \sa SDL_StartTextInput */ extern DECLSPEC void SDLCALL SDL_StopTextInput(void); /** * Dismiss the composition window/IME without disabling the subsystem. * * \since This function is available since SDL 2.0.22. * * \sa SDL_StartTextInput * \sa SDL_StopTextInput */ extern DECLSPEC void SDLCALL SDL_ClearComposition(void); /** * Returns if an IME Composite or Candidate window is currently shown. * * \since This function is available since SDL 2.0.22. */ extern DECLSPEC SDL_bool SDLCALL SDL_IsTextInputShown(void); /** * Set the rectangle used to type Unicode text inputs. Native input methods * will place a window with word suggestions near it, without covering the * text being inputted. * * To start text input in a given location, this function is intended to be * called before SDL_StartTextInput, although some platforms support moving * the rectangle even while text input (and a composition) is active. * * Note: If you want to use the system native IME window, try setting hint * **SDL_HINT_IME_SHOW_UI** to **1**, otherwise this function won't give you * any feedback. * * \param rect the SDL_Rect structure representing the rectangle to receive * text (ignored if NULL) * * \since This function is available since SDL 2.0.0. * * \sa SDL_StartTextInput */ extern DECLSPEC void SDLCALL SDL_SetTextInputRect(const SDL_Rect *rect); /** * Check whether the platform has screen keyboard support. * * \returns SDL_TRUE if the platform has some screen keyboard support or * SDL_FALSE if not. * * \since This function is available since SDL 2.0.0. * * \sa SDL_StartTextInput * \sa SDL_IsScreenKeyboardShown */ extern DECLSPEC SDL_bool SDLCALL SDL_HasScreenKeyboardSupport(void); /** * Check whether the screen keyboard is shown for given window. * * \param window the window for which screen keyboard should be queried * \returns SDL_TRUE if screen keyboard is shown or SDL_FALSE if not. * * \since This function is available since SDL 2.0.0. * * \sa SDL_HasScreenKeyboardSupport */ extern DECLSPEC SDL_bool SDLCALL SDL_IsScreenKeyboardShown(SDL_Window *window); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_keyboard_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_keycode.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_keycode.h * * Defines constants which identify keyboard keys and modifiers. */ #ifndef SDL_keycode_h_ #define SDL_keycode_h_ #include "SDL_stdinc.h" #include "SDL_scancode.h" /** * \brief The SDL virtual key representation. * * Values of this type are used to represent keyboard keys using the current * layout of the keyboard. These values include Unicode values representing * the unmodified character that would be generated by pressing the key, or * an SDLK_* constant for those keys that do not generate characters. * * A special exception is the number keys at the top of the keyboard which * map to SDLK_0...SDLK_9 on AZERTY layouts. */ typedef Sint32 SDL_Keycode; #define SDLK_SCANCODE_MASK (1<<30) #define SDL_SCANCODE_TO_KEYCODE(X) (X | SDLK_SCANCODE_MASK) typedef enum { SDLK_UNKNOWN = 0, SDLK_RETURN = '\r', SDLK_ESCAPE = '\x1B', SDLK_BACKSPACE = '\b', SDLK_TAB = '\t', SDLK_SPACE = ' ', SDLK_EXCLAIM = '!', SDLK_QUOTEDBL = '"', SDLK_HASH = '#', SDLK_PERCENT = '%', SDLK_DOLLAR = '$', SDLK_AMPERSAND = '&', SDLK_QUOTE = '\'', SDLK_LEFTPAREN = '(', SDLK_RIGHTPAREN = ')', SDLK_ASTERISK = '*', SDLK_PLUS = '+', SDLK_COMMA = ',', SDLK_MINUS = '-', SDLK_PERIOD = '.', SDLK_SLASH = '/', SDLK_0 = '0', SDLK_1 = '1', SDLK_2 = '2', SDLK_3 = '3', SDLK_4 = '4', SDLK_5 = '5', SDLK_6 = '6', SDLK_7 = '7', SDLK_8 = '8', SDLK_9 = '9', SDLK_COLON = ':', SDLK_SEMICOLON = ';', SDLK_LESS = '<', SDLK_EQUALS = '=', SDLK_GREATER = '>', SDLK_QUESTION = '?', SDLK_AT = '@', /* Skip uppercase letters */ SDLK_LEFTBRACKET = '[', SDLK_BACKSLASH = '\\', SDLK_RIGHTBRACKET = ']', SDLK_CARET = '^', SDLK_UNDERSCORE = '_', SDLK_BACKQUOTE = '`', SDLK_a = 'a', SDLK_b = 'b', SDLK_c = 'c', SDLK_d = 'd', SDLK_e = 'e', SDLK_f = 'f', SDLK_g = 'g', SDLK_h = 'h', SDLK_i = 'i', SDLK_j = 'j', SDLK_k = 'k', SDLK_l = 'l', SDLK_m = 'm', SDLK_n = 'n', SDLK_o = 'o', SDLK_p = 'p', SDLK_q = 'q', SDLK_r = 'r', SDLK_s = 's', SDLK_t = 't', SDLK_u = 'u', SDLK_v = 'v', SDLK_w = 'w', SDLK_x = 'x', SDLK_y = 'y', SDLK_z = 'z', SDLK_CAPSLOCK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CAPSLOCK), SDLK_F1 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F1), SDLK_F2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F2), SDLK_F3 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F3), SDLK_F4 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F4), SDLK_F5 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F5), SDLK_F6 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F6), SDLK_F7 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F7), SDLK_F8 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F8), SDLK_F9 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F9), SDLK_F10 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F10), SDLK_F11 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F11), SDLK_F12 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F12), SDLK_PRINTSCREEN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PRINTSCREEN), SDLK_SCROLLLOCK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SCROLLLOCK), SDLK_PAUSE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAUSE), SDLK_INSERT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_INSERT), SDLK_HOME = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_HOME), SDLK_PAGEUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAGEUP), SDLK_DELETE = '\x7F', SDLK_END = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_END), SDLK_PAGEDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAGEDOWN), SDLK_RIGHT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RIGHT), SDLK_LEFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LEFT), SDLK_DOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DOWN), SDLK_UP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_UP), SDLK_NUMLOCKCLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_NUMLOCKCLEAR), SDLK_KP_DIVIDE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DIVIDE), SDLK_KP_MULTIPLY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MULTIPLY), SDLK_KP_MINUS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MINUS), SDLK_KP_PLUS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PLUS), SDLK_KP_ENTER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_ENTER), SDLK_KP_1 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_1), SDLK_KP_2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_2), SDLK_KP_3 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_3), SDLK_KP_4 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_4), SDLK_KP_5 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_5), SDLK_KP_6 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_6), SDLK_KP_7 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_7), SDLK_KP_8 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_8), SDLK_KP_9 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_9), SDLK_KP_0 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_0), SDLK_KP_PERIOD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PERIOD), SDLK_APPLICATION = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APPLICATION), SDLK_POWER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_POWER), SDLK_KP_EQUALS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EQUALS), SDLK_F13 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F13), SDLK_F14 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F14), SDLK_F15 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F15), SDLK_F16 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F16), SDLK_F17 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F17), SDLK_F18 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F18), SDLK_F19 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F19), SDLK_F20 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F20), SDLK_F21 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F21), SDLK_F22 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F22), SDLK_F23 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F23), SDLK_F24 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F24), SDLK_EXECUTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EXECUTE), SDLK_HELP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_HELP), SDLK_MENU = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MENU), SDLK_SELECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SELECT), SDLK_STOP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_STOP), SDLK_AGAIN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AGAIN), SDLK_UNDO = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_UNDO), SDLK_CUT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CUT), SDLK_COPY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_COPY), SDLK_PASTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PASTE), SDLK_FIND = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_FIND), SDLK_MUTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MUTE), SDLK_VOLUMEUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_VOLUMEUP), SDLK_VOLUMEDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_VOLUMEDOWN), SDLK_KP_COMMA = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_COMMA), SDLK_KP_EQUALSAS400 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EQUALSAS400), SDLK_ALTERASE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_ALTERASE), SDLK_SYSREQ = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SYSREQ), SDLK_CANCEL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CANCEL), SDLK_CLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CLEAR), SDLK_PRIOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PRIOR), SDLK_RETURN2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RETURN2), SDLK_SEPARATOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SEPARATOR), SDLK_OUT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_OUT), SDLK_OPER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_OPER), SDLK_CLEARAGAIN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CLEARAGAIN), SDLK_CRSEL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CRSEL), SDLK_EXSEL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EXSEL), SDLK_KP_00 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_00), SDLK_KP_000 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_000), SDLK_THOUSANDSSEPARATOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_THOUSANDSSEPARATOR), SDLK_DECIMALSEPARATOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DECIMALSEPARATOR), SDLK_CURRENCYUNIT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CURRENCYUNIT), SDLK_CURRENCYSUBUNIT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CURRENCYSUBUNIT), SDLK_KP_LEFTPAREN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LEFTPAREN), SDLK_KP_RIGHTPAREN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_RIGHTPAREN), SDLK_KP_LEFTBRACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LEFTBRACE), SDLK_KP_RIGHTBRACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_RIGHTBRACE), SDLK_KP_TAB = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_TAB), SDLK_KP_BACKSPACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_BACKSPACE), SDLK_KP_A = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_A), SDLK_KP_B = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_B), SDLK_KP_C = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_C), SDLK_KP_D = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_D), SDLK_KP_E = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_E), SDLK_KP_F = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_F), SDLK_KP_XOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_XOR), SDLK_KP_POWER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_POWER), SDLK_KP_PERCENT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PERCENT), SDLK_KP_LESS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LESS), SDLK_KP_GREATER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_GREATER), SDLK_KP_AMPERSAND = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_AMPERSAND), SDLK_KP_DBLAMPERSAND = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DBLAMPERSAND), SDLK_KP_VERTICALBAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_VERTICALBAR), SDLK_KP_DBLVERTICALBAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DBLVERTICALBAR), SDLK_KP_COLON = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_COLON), SDLK_KP_HASH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_HASH), SDLK_KP_SPACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_SPACE), SDLK_KP_AT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_AT), SDLK_KP_EXCLAM = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EXCLAM), SDLK_KP_MEMSTORE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMSTORE), SDLK_KP_MEMRECALL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMRECALL), SDLK_KP_MEMCLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMCLEAR), SDLK_KP_MEMADD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMADD), SDLK_KP_MEMSUBTRACT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMSUBTRACT), SDLK_KP_MEMMULTIPLY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMMULTIPLY), SDLK_KP_MEMDIVIDE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMDIVIDE), SDLK_KP_PLUSMINUS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PLUSMINUS), SDLK_KP_CLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_CLEAR), SDLK_KP_CLEARENTRY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_CLEARENTRY), SDLK_KP_BINARY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_BINARY), SDLK_KP_OCTAL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_OCTAL), SDLK_KP_DECIMAL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DECIMAL), SDLK_KP_HEXADECIMAL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_HEXADECIMAL), SDLK_LCTRL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LCTRL), SDLK_LSHIFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LSHIFT), SDLK_LALT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LALT), SDLK_LGUI = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LGUI), SDLK_RCTRL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RCTRL), SDLK_RSHIFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RSHIFT), SDLK_RALT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RALT), SDLK_RGUI = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RGUI), SDLK_MODE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MODE), SDLK_AUDIONEXT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIONEXT), SDLK_AUDIOPREV = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOPREV), SDLK_AUDIOSTOP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOSTOP), SDLK_AUDIOPLAY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOPLAY), SDLK_AUDIOMUTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOMUTE), SDLK_MEDIASELECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIASELECT), SDLK_WWW = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_WWW), SDLK_MAIL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MAIL), SDLK_CALCULATOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CALCULATOR), SDLK_COMPUTER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_COMPUTER), SDLK_AC_SEARCH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_SEARCH), SDLK_AC_HOME = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_HOME), SDLK_AC_BACK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_BACK), SDLK_AC_FORWARD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_FORWARD), SDLK_AC_STOP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_STOP), SDLK_AC_REFRESH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_REFRESH), SDLK_AC_BOOKMARKS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_BOOKMARKS), SDLK_BRIGHTNESSDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_BRIGHTNESSDOWN), SDLK_BRIGHTNESSUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_BRIGHTNESSUP), SDLK_DISPLAYSWITCH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DISPLAYSWITCH), SDLK_KBDILLUMTOGGLE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMTOGGLE), SDLK_KBDILLUMDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMDOWN), SDLK_KBDILLUMUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMUP), SDLK_EJECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EJECT), SDLK_SLEEP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SLEEP), SDLK_APP1 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APP1), SDLK_APP2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APP2), SDLK_AUDIOREWIND = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOREWIND), SDLK_AUDIOFASTFORWARD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOFASTFORWARD), SDLK_SOFTLEFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SOFTLEFT), SDLK_SOFTRIGHT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SOFTRIGHT), SDLK_CALL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CALL), SDLK_ENDCALL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_ENDCALL) } SDL_KeyCode; /** * \brief Enumeration of valid key mods (possibly OR'd together). */ typedef enum { KMOD_NONE = 0x0000, KMOD_LSHIFT = 0x0001, KMOD_RSHIFT = 0x0002, KMOD_LCTRL = 0x0040, KMOD_RCTRL = 0x0080, KMOD_LALT = 0x0100, KMOD_RALT = 0x0200, KMOD_LGUI = 0x0400, KMOD_RGUI = 0x0800, KMOD_NUM = 0x1000, KMOD_CAPS = 0x2000, KMOD_MODE = 0x4000, KMOD_SCROLL = 0x8000, KMOD_CTRL = KMOD_LCTRL | KMOD_RCTRL, KMOD_SHIFT = KMOD_LSHIFT | KMOD_RSHIFT, KMOD_ALT = KMOD_LALT | KMOD_RALT, KMOD_GUI = KMOD_LGUI | KMOD_RGUI, KMOD_RESERVED = KMOD_SCROLL /* This is for source-level compatibility with SDL 2.0.0. */ } SDL_Keymod; #endif /* SDL_keycode_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_loadso.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_loadso.h * * System dependent library loading routines * * Some things to keep in mind: * \li These functions only work on C function names. Other languages may * have name mangling and intrinsic language support that varies from * compiler to compiler. * \li Make sure you declare your function pointers with the same calling * convention as the actual library function. Your code will crash * mysteriously if you do not do this. * \li Avoid namespace collisions. If you load a symbol from the library, * it is not defined whether or not it goes into the global symbol * namespace for the application. If it does and it conflicts with * symbols in your code or other shared libraries, you will not get * the results you expect. :) */ #ifndef SDL_loadso_h_ #define SDL_loadso_h_ #include "SDL_stdinc.h" #include "SDL_error.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** * Dynamically load a shared object. * * \param sofile a system-dependent name of the object file * \returns an opaque pointer to the object handle or NULL if there was an * error; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_LoadFunction * \sa SDL_UnloadObject */ extern DECLSPEC void *SDLCALL SDL_LoadObject(const char *sofile); /** * Look up the address of the named function in a shared object. * * This function pointer is no longer valid after calling SDL_UnloadObject(). * * This function can only look up C function names. Other languages may have * name mangling and intrinsic language support that varies from compiler to * compiler. * * Make sure you declare your function pointers with the same calling * convention as the actual library function. Your code will crash * mysteriously if you do not do this. * * If the requested function doesn't exist, NULL is returned. * * \param handle a valid shared object handle returned by SDL_LoadObject() * \param name the name of the function to look up * \returns a pointer to the function or NULL if there was an error; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_LoadObject * \sa SDL_UnloadObject */ extern DECLSPEC void *SDLCALL SDL_LoadFunction(void *handle, const char *name); /** * Unload a shared object from memory. * * \param handle a valid shared object handle returned by SDL_LoadObject() * * \since This function is available since SDL 2.0.0. * * \sa SDL_LoadFunction * \sa SDL_LoadObject */ extern DECLSPEC void SDLCALL SDL_UnloadObject(void *handle); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_loadso_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_locale.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_locale.h * * Include file for SDL locale services */ #ifndef _SDL_locale_h #define _SDL_locale_h #include "SDL_stdinc.h" #include "SDL_error.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus /* *INDENT-OFF* */ extern "C" { /* *INDENT-ON* */ #endif typedef struct SDL_Locale { const char *language; /**< A language name, like "en" for English. */ const char *country; /**< A country, like "US" for America. Can be NULL. */ } SDL_Locale; /** * Report the user's preferred locale. * * This returns an array of SDL_Locale structs, the final item zeroed out. * When the caller is done with this array, it should call SDL_free() on the * returned value; all the memory involved is allocated in a single block, so * a single SDL_free() will suffice. * * Returned language strings are in the format xx, where 'xx' is an ISO-639 * language specifier (such as "en" for English, "de" for German, etc). * Country strings are in the format YY, where "YY" is an ISO-3166 country * code (such as "US" for the United States, "CA" for Canada, etc). Country * might be NULL if there's no specific guidance on them (so you might get { * "en", "US" } for American English, but { "en", NULL } means "English * language, generically"). Language strings are never NULL, except to * terminate the array. * * Please note that not all of these strings are 2 characters; some are three * or more. * * The returned list of locales are in the order of the user's preference. For * example, a German citizen that is fluent in US English and knows enough * Japanese to navigate around Tokyo might have a list like: { "de", "en_US", * "jp", NULL }. Someone from England might prefer British English (where * "color" is spelled "colour", etc), but will settle for anything like it: { * "en_GB", "en", NULL }. * * This function returns NULL on error, including when the platform does not * supply this information at all. * * This might be a "slow" call that has to query the operating system. It's * best to ask for this once and save the results. However, this list can * change, usually because the user has changed a system preference outside of * your program; SDL will send an SDL_LOCALECHANGED event in this case, if * possible, and you can call this function again to get an updated copy of * preferred locales. * * \return array of locales, terminated with a locale with a NULL language * field. Will return NULL on error. * * \since This function is available since SDL 2.0.14. */ extern DECLSPEC SDL_Locale * SDLCALL SDL_GetPreferredLocales(void); /* Ends C function definitions when using C++ */ #ifdef __cplusplus /* *INDENT-OFF* */ } /* *INDENT-ON* */ #endif #include "close_code.h" #endif /* _SDL_locale_h */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_log.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_log.h * * Simple log messages with categories and priorities. * * By default logs are quiet, but if you're debugging SDL you might want: * * SDL_LogSetAllPriority(SDL_LOG_PRIORITY_WARN); * * Here's where the messages go on different platforms: * Windows: debug output stream * Android: log output * Others: standard error output (stderr) */ #ifndef SDL_log_h_ #define SDL_log_h_ #include "SDL_stdinc.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** * \brief The maximum size of a log message prior to SDL 2.0.24 * * As of 2.0.24 there is no limit to the length of SDL log messages. */ #define SDL_MAX_LOG_MESSAGE 4096 /** * \brief The predefined log categories * * By default the application category is enabled at the INFO level, * the assert category is enabled at the WARN level, test is enabled * at the VERBOSE level and all other categories are enabled at the * ERROR level. */ typedef enum { SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_CATEGORY_ERROR, SDL_LOG_CATEGORY_ASSERT, SDL_LOG_CATEGORY_SYSTEM, SDL_LOG_CATEGORY_AUDIO, SDL_LOG_CATEGORY_VIDEO, SDL_LOG_CATEGORY_RENDER, SDL_LOG_CATEGORY_INPUT, SDL_LOG_CATEGORY_TEST, /* Reserved for future SDL library use */ SDL_LOG_CATEGORY_RESERVED1, SDL_LOG_CATEGORY_RESERVED2, SDL_LOG_CATEGORY_RESERVED3, SDL_LOG_CATEGORY_RESERVED4, SDL_LOG_CATEGORY_RESERVED5, SDL_LOG_CATEGORY_RESERVED6, SDL_LOG_CATEGORY_RESERVED7, SDL_LOG_CATEGORY_RESERVED8, SDL_LOG_CATEGORY_RESERVED9, SDL_LOG_CATEGORY_RESERVED10, /* Beyond this point is reserved for application use, e.g. enum { MYAPP_CATEGORY_AWESOME1 = SDL_LOG_CATEGORY_CUSTOM, MYAPP_CATEGORY_AWESOME2, MYAPP_CATEGORY_AWESOME3, ... }; */ SDL_LOG_CATEGORY_CUSTOM } SDL_LogCategory; /** * \brief The predefined log priorities */ typedef enum { SDL_LOG_PRIORITY_VERBOSE = 1, SDL_LOG_PRIORITY_DEBUG, SDL_LOG_PRIORITY_INFO, SDL_LOG_PRIORITY_WARN, SDL_LOG_PRIORITY_ERROR, SDL_LOG_PRIORITY_CRITICAL, SDL_NUM_LOG_PRIORITIES } SDL_LogPriority; /** * Set the priority of all log categories. * * \param priority the SDL_LogPriority to assign * * \since This function is available since SDL 2.0.0. * * \sa SDL_LogSetPriority */ extern DECLSPEC void SDLCALL SDL_LogSetAllPriority(SDL_LogPriority priority); /** * Set the priority of a particular log category. * * \param category the category to assign a priority to * \param priority the SDL_LogPriority to assign * * \since This function is available since SDL 2.0.0. * * \sa SDL_LogGetPriority * \sa SDL_LogSetAllPriority */ extern DECLSPEC void SDLCALL SDL_LogSetPriority(int category, SDL_LogPriority priority); /** * Get the priority of a particular log category. * * \param category the category to query * \returns the SDL_LogPriority for the requested category * * \since This function is available since SDL 2.0.0. * * \sa SDL_LogSetPriority */ extern DECLSPEC SDL_LogPriority SDLCALL SDL_LogGetPriority(int category); /** * Reset all priorities to default. * * This is called by SDL_Quit(). * * \since This function is available since SDL 2.0.0. * * \sa SDL_LogSetAllPriority * \sa SDL_LogSetPriority */ extern DECLSPEC void SDLCALL SDL_LogResetPriorities(void); /** * Log a message with SDL_LOG_CATEGORY_APPLICATION and SDL_LOG_PRIORITY_INFO. * * = * \param fmt a printf() style message format string * * \param ... additional parameters matching % tokens in the `fmt` string, if * any * * \since This function is available since SDL 2.0.0. * * \sa SDL_LogCritical * \sa SDL_LogDebug * \sa SDL_LogError * \sa SDL_LogInfo * \sa SDL_LogMessage * \sa SDL_LogMessageV * \sa SDL_LogVerbose * \sa SDL_LogWarn */ extern DECLSPEC void SDLCALL SDL_Log(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); /** * Log a message with SDL_LOG_PRIORITY_VERBOSE. * * \param category the category of the message * \param fmt a printf() style message format string * \param ... additional parameters matching % tokens in the **fmt** string, * if any * * \since This function is available since SDL 2.0.0. * * \sa SDL_Log * \sa SDL_LogCritical * \sa SDL_LogDebug * \sa SDL_LogError * \sa SDL_LogInfo * \sa SDL_LogMessage * \sa SDL_LogMessageV * \sa SDL_LogWarn */ extern DECLSPEC void SDLCALL SDL_LogVerbose(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); /** * Log a message with SDL_LOG_PRIORITY_DEBUG. * * \param category the category of the message * \param fmt a printf() style message format string * \param ... additional parameters matching % tokens in the **fmt** string, * if any * * \since This function is available since SDL 2.0.0. * * \sa SDL_Log * \sa SDL_LogCritical * \sa SDL_LogError * \sa SDL_LogInfo * \sa SDL_LogMessage * \sa SDL_LogMessageV * \sa SDL_LogVerbose * \sa SDL_LogWarn */ extern DECLSPEC void SDLCALL SDL_LogDebug(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); /** * Log a message with SDL_LOG_PRIORITY_INFO. * * \param category the category of the message * \param fmt a printf() style message format string * \param ... additional parameters matching % tokens in the **fmt** string, * if any * * \since This function is available since SDL 2.0.0. * * \sa SDL_Log * \sa SDL_LogCritical * \sa SDL_LogDebug * \sa SDL_LogError * \sa SDL_LogMessage * \sa SDL_LogMessageV * \sa SDL_LogVerbose * \sa SDL_LogWarn */ extern DECLSPEC void SDLCALL SDL_LogInfo(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); /** * Log a message with SDL_LOG_PRIORITY_WARN. * * \param category the category of the message * \param fmt a printf() style message format string * \param ... additional parameters matching % tokens in the **fmt** string, * if any * * \since This function is available since SDL 2.0.0. * * \sa SDL_Log * \sa SDL_LogCritical * \sa SDL_LogDebug * \sa SDL_LogError * \sa SDL_LogInfo * \sa SDL_LogMessage * \sa SDL_LogMessageV * \sa SDL_LogVerbose */ extern DECLSPEC void SDLCALL SDL_LogWarn(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); /** * Log a message with SDL_LOG_PRIORITY_ERROR. * * \param category the category of the message * \param fmt a printf() style message format string * \param ... additional parameters matching % tokens in the **fmt** string, * if any * * \since This function is available since SDL 2.0.0. * * \sa SDL_Log * \sa SDL_LogCritical * \sa SDL_LogDebug * \sa SDL_LogInfo * \sa SDL_LogMessage * \sa SDL_LogMessageV * \sa SDL_LogVerbose * \sa SDL_LogWarn */ extern DECLSPEC void SDLCALL SDL_LogError(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); /** * Log a message with SDL_LOG_PRIORITY_CRITICAL. * * \param category the category of the message * \param fmt a printf() style message format string * \param ... additional parameters matching % tokens in the **fmt** string, * if any * * \since This function is available since SDL 2.0.0. * * \sa SDL_Log * \sa SDL_LogDebug * \sa SDL_LogError * \sa SDL_LogInfo * \sa SDL_LogMessage * \sa SDL_LogMessageV * \sa SDL_LogVerbose * \sa SDL_LogWarn */ extern DECLSPEC void SDLCALL SDL_LogCritical(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); /** * Log a message with the specified category and priority. * * \param category the category of the message * \param priority the priority of the message * \param fmt a printf() style message format string * \param ... additional parameters matching % tokens in the **fmt** string, * if any * * \since This function is available since SDL 2.0.0. * * \sa SDL_Log * \sa SDL_LogCritical * \sa SDL_LogDebug * \sa SDL_LogError * \sa SDL_LogInfo * \sa SDL_LogMessageV * \sa SDL_LogVerbose * \sa SDL_LogWarn */ extern DECLSPEC void SDLCALL SDL_LogMessage(int category, SDL_LogPriority priority, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(3); /** * Log a message with the specified category and priority. * * \param category the category of the message * \param priority the priority of the message * \param fmt a printf() style message format string * \param ap a variable argument list * * \since This function is available since SDL 2.0.0. * * \sa SDL_Log * \sa SDL_LogCritical * \sa SDL_LogDebug * \sa SDL_LogError * \sa SDL_LogInfo * \sa SDL_LogMessage * \sa SDL_LogVerbose * \sa SDL_LogWarn */ extern DECLSPEC void SDLCALL SDL_LogMessageV(int category, SDL_LogPriority priority, SDL_PRINTF_FORMAT_STRING const char *fmt, va_list ap) SDL_PRINTF_VARARG_FUNCV(3); /** * The prototype for the log output callback function. * * This function is called by SDL when there is new text to be logged. * * \param userdata what was passed as `userdata` to SDL_LogSetOutputFunction() * \param category the category of the message * \param priority the priority of the message * \param message the message being output */ typedef void (SDLCALL *SDL_LogOutputFunction)(void *userdata, int category, SDL_LogPriority priority, const char *message); /** * Get the current log output function. * * \param callback an SDL_LogOutputFunction filled in with the current log * callback * \param userdata a pointer filled in with the pointer that is passed to * `callback` * * \since This function is available since SDL 2.0.0. * * \sa SDL_LogSetOutputFunction */ extern DECLSPEC void SDLCALL SDL_LogGetOutputFunction(SDL_LogOutputFunction *callback, void **userdata); /** * Replace the default log output function with one of your own. * * \param callback an SDL_LogOutputFunction to call instead of the default * \param userdata a pointer that is passed to `callback` * * \since This function is available since SDL 2.0.0. * * \sa SDL_LogGetOutputFunction */ extern DECLSPEC void SDLCALL SDL_LogSetOutputFunction(SDL_LogOutputFunction callback, void *userdata); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_log_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_main.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef SDL_main_h_ #define SDL_main_h_ #include "SDL_stdinc.h" /** * \file SDL_main.h * * Redefine main() on some platforms so that it is called by SDL. */ #ifndef SDL_MAIN_HANDLED #if defined(__WIN32__) /* On Windows SDL provides WinMain(), which parses the command line and passes the arguments to your main function. If you provide your own WinMain(), you may define SDL_MAIN_HANDLED */ #define SDL_MAIN_AVAILABLE #elif defined(__WINRT__) /* On WinRT, SDL provides a main function that initializes CoreApplication, creating an instance of IFrameworkView in the process. Please note that #include'ing SDL_main.h is not enough to get a main() function working. In non-XAML apps, the file, src/main/winrt/SDL_WinRT_main_NonXAML.cpp, or a copy of it, must be compiled into the app itself. In XAML apps, the function, SDL_WinRTRunApp must be called, with a pointer to the Direct3D-hosted XAML control passed in. */ #define SDL_MAIN_NEEDED #elif defined(__GDK__) /* On GDK, SDL provides a main function that initializes the game runtime. Please note that #include'ing SDL_main.h is not enough to get a main() function working. You must either link against SDL2main or, if not possible, call the SDL_GDKRunApp function from your entry point. */ #define SDL_MAIN_NEEDED #elif defined(__IPHONEOS__) /* On iOS SDL provides a main function that creates an application delegate and starts the iOS application run loop. If you link with SDL dynamically on iOS, the main function can't be in a shared library, so you need to link with libSDLmain.a, which includes a stub main function that calls into the shared library to start execution. See src/video/uikit/SDL_uikitappdelegate.m for more details. */ #define SDL_MAIN_NEEDED #elif defined(__ANDROID__) /* On Android SDL provides a Java class in SDLActivity.java that is the main activity entry point. See docs/README-android.md for more details on extending that class. */ #define SDL_MAIN_NEEDED /* We need to export SDL_main so it can be launched from Java */ #define SDLMAIN_DECLSPEC DECLSPEC #elif defined(__NACL__) /* On NACL we use ppapi_simple to set up the application helper code, then wait for the first PSE_INSTANCE_DIDCHANGEVIEW event before starting the user main function. All user code is run in a separate thread by ppapi_simple, thus allowing for blocking io to take place via nacl_io */ #define SDL_MAIN_NEEDED #elif defined(__PSP__) /* On PSP SDL provides a main function that sets the module info, activates the GPU and starts the thread required to be able to exit the software. If you provide this yourself, you may define SDL_MAIN_HANDLED */ #define SDL_MAIN_AVAILABLE #elif defined(__PS2__) #define SDL_MAIN_AVAILABLE #define SDL_PS2_SKIP_IOP_RESET() \ void reset_IOP(); \ void reset_IOP() {} #elif defined(__3DS__) /* On N3DS, SDL provides a main function that sets up the screens and storage. If you provide this yourself, you may define SDL_MAIN_HANDLED */ #define SDL_MAIN_AVAILABLE #endif #endif /* SDL_MAIN_HANDLED */ #ifndef SDLMAIN_DECLSPEC #define SDLMAIN_DECLSPEC #endif /** * \file SDL_main.h * * The application's main() function must be called with C linkage, * and should be declared like this: * \code * #ifdef __cplusplus * extern "C" * #endif * int main(int argc, char *argv[]) * { * } * \endcode */ #if defined(SDL_MAIN_NEEDED) || defined(SDL_MAIN_AVAILABLE) #define main SDL_main #endif #include "begin_code.h" #ifdef __cplusplus extern "C" { #endif /** * The prototype for the application's main() function */ typedef int (*SDL_main_func)(int argc, char *argv[]); extern SDLMAIN_DECLSPEC int SDL_main(int argc, char *argv[]); /** * Circumvent failure of SDL_Init() when not using SDL_main() as an entry * point. * * This function is defined in SDL_main.h, along with the preprocessor rule to * redefine main() as SDL_main(). Thus to ensure that your main() function * will not be changed it is necessary to define SDL_MAIN_HANDLED before * including SDL.h. * * \since This function is available since SDL 2.0.0. * * \sa SDL_Init */ extern DECLSPEC void SDLCALL SDL_SetMainReady(void); #if defined(__WIN32__) || defined(__GDK__) /** * Register a win32 window class for SDL's use. * * This can be called to set the application window class at startup. It is * safe to call this multiple times, as long as every call is eventually * paired with a call to SDL_UnregisterApp, but a second registration attempt * while a previous registration is still active will be ignored, other than * to increment a counter. * * Most applications do not need to, and should not, call this directly; SDL * will call it when initializing the video subsystem. * * \param name the window class name, in UTF-8 encoding. If NULL, SDL * currently uses "SDL_app" but this isn't guaranteed. * \param style the value to use in WNDCLASSEX::style. If `name` is NULL, SDL * currently uses `(CS_BYTEALIGNCLIENT | CS_OWNDC)` regardless of * what is specified here. * \param hInst the HINSTANCE to use in WNDCLASSEX::hInstance. If zero, SDL * will use `GetModuleHandle(NULL)` instead. * \returns 0 on success, -1 on error. SDL_GetError() may have details. * * \since This function is available since SDL 2.0.2. */ extern DECLSPEC int SDLCALL SDL_RegisterApp(const char *name, Uint32 style, void *hInst); /** * Deregister the win32 window class from an SDL_RegisterApp call. * * This can be called to undo the effects of SDL_RegisterApp. * * Most applications do not need to, and should not, call this directly; SDL * will call it when deinitializing the video subsystem. * * It is safe to call this multiple times, as long as every call is eventually * paired with a prior call to SDL_RegisterApp. The window class will only be * deregistered when the registration counter in SDL_RegisterApp decrements to * zero through calls to this function. * * \since This function is available since SDL 2.0.2. */ extern DECLSPEC void SDLCALL SDL_UnregisterApp(void); #endif /* defined(__WIN32__) || defined(__GDK__) */ #ifdef __WINRT__ /** * Initialize and launch an SDL/WinRT application. * * \param mainFunction the SDL app's C-style main(), an SDL_main_func * \param reserved reserved for future use; should be NULL * \returns 0 on success or -1 on failure; call SDL_GetError() to retrieve * more information on the failure. * * \since This function is available since SDL 2.0.3. */ extern DECLSPEC int SDLCALL SDL_WinRTRunApp(SDL_main_func mainFunction, void * reserved); #endif /* __WINRT__ */ #if defined(__IPHONEOS__) /** * Initializes and launches an SDL application. * * \param argc The argc parameter from the application's main() function * \param argv The argv parameter from the application's main() function * \param mainFunction The SDL app's C-style main(), an SDL_main_func * \return the return value from mainFunction * * \since This function is available since SDL 2.0.10. */ extern DECLSPEC int SDLCALL SDL_UIKitRunApp(int argc, char *argv[], SDL_main_func mainFunction); #endif /* __IPHONEOS__ */ #ifdef __GDK__ /** * Initialize and launch an SDL GDK application. * * \param mainFunction the SDL app's C-style main(), an SDL_main_func * \param reserved reserved for future use; should be NULL * \returns 0 on success or -1 on failure; call SDL_GetError() to retrieve * more information on the failure. * * \since This function is available since SDL 2.24.0. */ extern DECLSPEC int SDLCALL SDL_GDKRunApp(SDL_main_func mainFunction, void *reserved); /** * Callback from the application to let the suspend continue. * * \since This function is available since SDL 2.28.0. */ extern DECLSPEC void SDLCALL SDL_GDKSuspendComplete(void); #endif /* __GDK__ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_main_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_messagebox.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef SDL_messagebox_h_ #define SDL_messagebox_h_ #include "SDL_stdinc.h" #include "SDL_video.h" /* For SDL_Window */ #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** * SDL_MessageBox flags. If supported will display warning icon, etc. */ typedef enum { SDL_MESSAGEBOX_ERROR = 0x00000010, /**< error dialog */ SDL_MESSAGEBOX_WARNING = 0x00000020, /**< warning dialog */ SDL_MESSAGEBOX_INFORMATION = 0x00000040, /**< informational dialog */ SDL_MESSAGEBOX_BUTTONS_LEFT_TO_RIGHT = 0x00000080, /**< buttons placed left to right */ SDL_MESSAGEBOX_BUTTONS_RIGHT_TO_LEFT = 0x00000100 /**< buttons placed right to left */ } SDL_MessageBoxFlags; /** * Flags for SDL_MessageBoxButtonData. */ typedef enum { SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT = 0x00000001, /**< Marks the default button when return is hit */ SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT = 0x00000002 /**< Marks the default button when escape is hit */ } SDL_MessageBoxButtonFlags; /** * Individual button data. */ typedef struct { Uint32 flags; /**< ::SDL_MessageBoxButtonFlags */ int buttonid; /**< User defined button id (value returned via SDL_ShowMessageBox) */ const char * text; /**< The UTF-8 button text */ } SDL_MessageBoxButtonData; /** * RGB value used in a message box color scheme */ typedef struct { Uint8 r, g, b; } SDL_MessageBoxColor; typedef enum { SDL_MESSAGEBOX_COLOR_BACKGROUND, SDL_MESSAGEBOX_COLOR_TEXT, SDL_MESSAGEBOX_COLOR_BUTTON_BORDER, SDL_MESSAGEBOX_COLOR_BUTTON_BACKGROUND, SDL_MESSAGEBOX_COLOR_BUTTON_SELECTED, SDL_MESSAGEBOX_COLOR_MAX } SDL_MessageBoxColorType; /** * A set of colors to use for message box dialogs */ typedef struct { SDL_MessageBoxColor colors[SDL_MESSAGEBOX_COLOR_MAX]; } SDL_MessageBoxColorScheme; /** * MessageBox structure containing title, text, window, etc. */ typedef struct { Uint32 flags; /**< ::SDL_MessageBoxFlags */ SDL_Window *window; /**< Parent window, can be NULL */ const char *title; /**< UTF-8 title */ const char *message; /**< UTF-8 message text */ int numbuttons; const SDL_MessageBoxButtonData *buttons; const SDL_MessageBoxColorScheme *colorScheme; /**< ::SDL_MessageBoxColorScheme, can be NULL to use system settings */ } SDL_MessageBoxData; /** * Create a modal message box. * * If your needs aren't complex, it might be easier to use * SDL_ShowSimpleMessageBox. * * This function should be called on the thread that created the parent * window, or on the main thread if the messagebox has no parent. It will * block execution of that thread until the user clicks a button or closes the * messagebox. * * This function may be called at any time, even before SDL_Init(). This makes * it useful for reporting errors like a failure to create a renderer or * OpenGL context. * * On X11, SDL rolls its own dialog box with X11 primitives instead of a * formal toolkit like GTK+ or Qt. * * Note that if SDL_Init() would fail because there isn't any available video * target, this function is likely to fail for the same reasons. If this is a * concern, check the return value from this function and fall back to writing * to stderr if you can. * * \param messageboxdata the SDL_MessageBoxData structure with title, text and * other options * \param buttonid the pointer to which user id of hit button should be copied * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_ShowSimpleMessageBox */ extern DECLSPEC int SDLCALL SDL_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid); /** * Display a simple modal message box. * * If your needs aren't complex, this function is preferred over * SDL_ShowMessageBox. * * `flags` may be any of the following: * * - `SDL_MESSAGEBOX_ERROR`: error dialog * - `SDL_MESSAGEBOX_WARNING`: warning dialog * - `SDL_MESSAGEBOX_INFORMATION`: informational dialog * * This function should be called on the thread that created the parent * window, or on the main thread if the messagebox has no parent. It will * block execution of that thread until the user clicks a button or closes the * messagebox. * * This function may be called at any time, even before SDL_Init(). This makes * it useful for reporting errors like a failure to create a renderer or * OpenGL context. * * On X11, SDL rolls its own dialog box with X11 primitives instead of a * formal toolkit like GTK+ or Qt. * * Note that if SDL_Init() would fail because there isn't any available video * target, this function is likely to fail for the same reasons. If this is a * concern, check the return value from this function and fall back to writing * to stderr if you can. * * \param flags an SDL_MessageBoxFlags value * \param title UTF-8 title text * \param message UTF-8 message text * \param window the parent window, or NULL for no parent * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_ShowMessageBox */ extern DECLSPEC int SDLCALL SDL_ShowSimpleMessageBox(Uint32 flags, const char *title, const char *message, SDL_Window *window); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_messagebox_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_metal.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_metal.h * * Header file for functions to creating Metal layers and views on SDL windows. */ #ifndef SDL_metal_h_ #define SDL_metal_h_ #include "SDL_video.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** * \brief A handle to a CAMetalLayer-backed NSView (macOS) or UIView (iOS/tvOS). * * \note This can be cast directly to an NSView or UIView. */ typedef void *SDL_MetalView; /** * \name Metal support functions */ /* @{ */ /** * Create a CAMetalLayer-backed NSView/UIView and attach it to the specified * window. * * On macOS, this does *not* associate a MTLDevice with the CAMetalLayer on * its own. It is up to user code to do that. * * The returned handle can be casted directly to a NSView or UIView. To access * the backing CAMetalLayer, call SDL_Metal_GetLayer(). * * \since This function is available since SDL 2.0.12. * * \sa SDL_Metal_DestroyView * \sa SDL_Metal_GetLayer */ extern DECLSPEC SDL_MetalView SDLCALL SDL_Metal_CreateView(SDL_Window * window); /** * Destroy an existing SDL_MetalView object. * * This should be called before SDL_DestroyWindow, if SDL_Metal_CreateView was * called after SDL_CreateWindow. * * \since This function is available since SDL 2.0.12. * * \sa SDL_Metal_CreateView */ extern DECLSPEC void SDLCALL SDL_Metal_DestroyView(SDL_MetalView view); /** * Get a pointer to the backing CAMetalLayer for the given view. * * \since This function is available since SDL 2.0.14. * * \sa SDL_Metal_CreateView */ extern DECLSPEC void *SDLCALL SDL_Metal_GetLayer(SDL_MetalView view); /** * Get the size of a window's underlying drawable in pixels (for use with * setting viewport, scissor & etc). * * \param window SDL_Window from which the drawable size should be queried * \param w Pointer to variable for storing the width in pixels, may be NULL * \param h Pointer to variable for storing the height in pixels, may be NULL * * \since This function is available since SDL 2.0.14. * * \sa SDL_GetWindowSize * \sa SDL_CreateWindow */ extern DECLSPEC void SDLCALL SDL_Metal_GetDrawableSize(SDL_Window* window, int *w, int *h); /* @} *//* Metal support functions */ /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_metal_h_ */ ================================================ FILE: libraries/sdl2/SDL_misc.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_misc.h * * \brief Include file for SDL API functions that don't fit elsewhere. */ #ifndef SDL_misc_h_ #define SDL_misc_h_ #include "SDL_stdinc.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** * Open a URL/URI in the browser or other appropriate external application. * * Open a URL in a separate, system-provided application. How this works will * vary wildly depending on the platform. This will likely launch what makes * sense to handle a specific URL's protocol (a web browser for `http://`, * etc), but it might also be able to launch file managers for directories and * other things. * * What happens when you open a URL varies wildly as well: your game window * may lose focus (and may or may not lose focus if your game was fullscreen * or grabbing input at the time). On mobile devices, your app will likely * move to the background or your process might be paused. Any given platform * may or may not handle a given URL. * * If this is unimplemented (or simply unavailable) for a platform, this will * fail with an error. A successful result does not mean the URL loaded, just * that we launched _something_ to handle it (or at least believe we did). * * All this to say: this function can be useful, but you should definitely * test it on every platform you target. * * \param url A valid URL/URI to open. Use `file:///full/path/to/file` for * local files, if supported. * \returns 0 on success, or -1 on error; call SDL_GetError() for more * information. * * \since This function is available since SDL 2.0.14. */ extern DECLSPEC int SDLCALL SDL_OpenURL(const char *url); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_misc_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_mouse.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_mouse.h * * Include file for SDL mouse event handling. */ #ifndef SDL_mouse_h_ #define SDL_mouse_h_ #include "SDL_stdinc.h" #include "SDL_error.h" #include "SDL_video.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif typedef struct SDL_Cursor SDL_Cursor; /**< Implementation dependent */ /** * \brief Cursor types for SDL_CreateSystemCursor(). */ typedef enum { SDL_SYSTEM_CURSOR_ARROW, /**< Arrow */ SDL_SYSTEM_CURSOR_IBEAM, /**< I-beam */ SDL_SYSTEM_CURSOR_WAIT, /**< Wait */ SDL_SYSTEM_CURSOR_CROSSHAIR, /**< Crosshair */ SDL_SYSTEM_CURSOR_WAITARROW, /**< Small wait cursor (or Wait if not available) */ SDL_SYSTEM_CURSOR_SIZENWSE, /**< Double arrow pointing northwest and southeast */ SDL_SYSTEM_CURSOR_SIZENESW, /**< Double arrow pointing northeast and southwest */ SDL_SYSTEM_CURSOR_SIZEWE, /**< Double arrow pointing west and east */ SDL_SYSTEM_CURSOR_SIZENS, /**< Double arrow pointing north and south */ SDL_SYSTEM_CURSOR_SIZEALL, /**< Four pointed arrow pointing north, south, east, and west */ SDL_SYSTEM_CURSOR_NO, /**< Slashed circle or crossbones */ SDL_SYSTEM_CURSOR_HAND, /**< Hand */ SDL_NUM_SYSTEM_CURSORS } SDL_SystemCursor; /** * \brief Scroll direction types for the Scroll event */ typedef enum { SDL_MOUSEWHEEL_NORMAL, /**< The scroll direction is normal */ SDL_MOUSEWHEEL_FLIPPED /**< The scroll direction is flipped / natural */ } SDL_MouseWheelDirection; /* Function prototypes */ /** * Get the window which currently has mouse focus. * * \returns the window with mouse focus. * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC SDL_Window * SDLCALL SDL_GetMouseFocus(void); /** * Retrieve the current state of the mouse. * * The current button state is returned as a button bitmask, which can be * tested using the `SDL_BUTTON(X)` macros (where `X` is generally 1 for the * left, 2 for middle, 3 for the right button), and `x` and `y` are set to the * mouse cursor position relative to the focus window. You can pass NULL for * either `x` or `y`. * * \param x the x coordinate of the mouse cursor position relative to the * focus window * \param y the y coordinate of the mouse cursor position relative to the * focus window * \returns a 32-bit button bitmask of the current button state. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetGlobalMouseState * \sa SDL_GetRelativeMouseState * \sa SDL_PumpEvents */ extern DECLSPEC Uint32 SDLCALL SDL_GetMouseState(int *x, int *y); /** * Get the current state of the mouse in relation to the desktop. * * This works similarly to SDL_GetMouseState(), but the coordinates will be * reported relative to the top-left of the desktop. This can be useful if you * need to track the mouse outside of a specific window and SDL_CaptureMouse() * doesn't fit your needs. For example, it could be useful if you need to * track the mouse while dragging a window, where coordinates relative to a * window might not be in sync at all times. * * Note: SDL_GetMouseState() returns the mouse position as SDL understands it * from the last pump of the event queue. This function, however, queries the * OS for the current mouse position, and as such, might be a slightly less * efficient function. Unless you know what you're doing and have a good * reason to use this function, you probably want SDL_GetMouseState() instead. * * \param x filled in with the current X coord relative to the desktop; can be * NULL * \param y filled in with the current Y coord relative to the desktop; can be * NULL * \returns the current button state as a bitmask which can be tested using * the SDL_BUTTON(X) macros. * * \since This function is available since SDL 2.0.4. * * \sa SDL_CaptureMouse */ extern DECLSPEC Uint32 SDLCALL SDL_GetGlobalMouseState(int *x, int *y); /** * Retrieve the relative state of the mouse. * * The current button state is returned as a button bitmask, which can be * tested using the `SDL_BUTTON(X)` macros (where `X` is generally 1 for the * left, 2 for middle, 3 for the right button), and `x` and `y` are set to the * mouse deltas since the last call to SDL_GetRelativeMouseState() or since * event initialization. You can pass NULL for either `x` or `y`. * * \param x a pointer filled with the last recorded x coordinate of the mouse * \param y a pointer filled with the last recorded y coordinate of the mouse * \returns a 32-bit button bitmask of the relative button state. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetMouseState */ extern DECLSPEC Uint32 SDLCALL SDL_GetRelativeMouseState(int *x, int *y); /** * Move the mouse cursor to the given position within the window. * * This function generates a mouse motion event if relative mode is not * enabled. If relative mode is enabled, you can force mouse events for the * warp by setting the SDL_HINT_MOUSE_RELATIVE_WARP_MOTION hint. * * Note that this function will appear to succeed, but not actually move the * mouse when used over Microsoft Remote Desktop. * * \param window the window to move the mouse into, or NULL for the current * mouse focus * \param x the x coordinate within the window * \param y the y coordinate within the window * * \since This function is available since SDL 2.0.0. * * \sa SDL_WarpMouseGlobal */ extern DECLSPEC void SDLCALL SDL_WarpMouseInWindow(SDL_Window * window, int x, int y); /** * Move the mouse to the given position in global screen space. * * This function generates a mouse motion event. * * A failure of this function usually means that it is unsupported by a * platform. * * Note that this function will appear to succeed, but not actually move the * mouse when used over Microsoft Remote Desktop. * * \param x the x coordinate * \param y the y coordinate * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.4. * * \sa SDL_WarpMouseInWindow */ extern DECLSPEC int SDLCALL SDL_WarpMouseGlobal(int x, int y); /** * Set relative mouse mode. * * While the mouse is in relative mode, the cursor is hidden, the mouse * position is constrained to the window, and SDL will report continuous * relative mouse motion even if the mouse is at the edge of the window. * * This function will flush any pending mouse motion. * * \param enabled SDL_TRUE to enable relative mode, SDL_FALSE to disable. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * If relative mode is not supported, this returns -1. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetRelativeMouseMode */ extern DECLSPEC int SDLCALL SDL_SetRelativeMouseMode(SDL_bool enabled); /** * Capture the mouse and to track input outside an SDL window. * * Capturing enables your app to obtain mouse events globally, instead of just * within your window. Not all video targets support this function. When * capturing is enabled, the current window will get all mouse events, but * unlike relative mode, no change is made to the cursor and it is not * restrained to your window. * * This function may also deny mouse input to other windows--both those in * your application and others on the system--so you should use this function * sparingly, and in small bursts. For example, you might want to track the * mouse while the user is dragging something, until the user releases a mouse * button. It is not recommended that you capture the mouse for long periods * of time, such as the entire time your app is running. For that, you should * probably use SDL_SetRelativeMouseMode() or SDL_SetWindowGrab(), depending * on your goals. * * While captured, mouse events still report coordinates relative to the * current (foreground) window, but those coordinates may be outside the * bounds of the window (including negative values). Capturing is only allowed * for the foreground window. If the window loses focus while capturing, the * capture will be disabled automatically. * * While capturing is enabled, the current window will have the * `SDL_WINDOW_MOUSE_CAPTURE` flag set. * * Please note that as of SDL 2.0.22, SDL will attempt to "auto capture" the * mouse while the user is pressing a button; this is to try and make mouse * behavior more consistent between platforms, and deal with the common case * of a user dragging the mouse outside of the window. This means that if you * are calling SDL_CaptureMouse() only to deal with this situation, you no * longer have to (although it is safe to do so). If this causes problems for * your app, you can disable auto capture by setting the * `SDL_HINT_MOUSE_AUTO_CAPTURE` hint to zero. * * \param enabled SDL_TRUE to enable capturing, SDL_FALSE to disable. * \returns 0 on success or -1 if not supported; call SDL_GetError() for more * information. * * \since This function is available since SDL 2.0.4. * * \sa SDL_GetGlobalMouseState */ extern DECLSPEC int SDLCALL SDL_CaptureMouse(SDL_bool enabled); /** * Query whether relative mouse mode is enabled. * * \returns SDL_TRUE if relative mode is enabled or SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.0. * * \sa SDL_SetRelativeMouseMode */ extern DECLSPEC SDL_bool SDLCALL SDL_GetRelativeMouseMode(void); /** * Create a cursor using the specified bitmap data and mask (in MSB format). * * `mask` has to be in MSB (Most Significant Bit) format. * * The cursor width (`w`) must be a multiple of 8 bits. * * The cursor is created in black and white according to the following: * * - data=0, mask=1: white * - data=1, mask=1: black * - data=0, mask=0: transparent * - data=1, mask=0: inverted color if possible, black if not. * * Cursors created with this function must be freed with SDL_FreeCursor(). * * If you want to have a color cursor, or create your cursor from an * SDL_Surface, you should use SDL_CreateColorCursor(). Alternately, you can * hide the cursor and draw your own as part of your game's rendering, but it * will be bound to the framerate. * * Also, since SDL 2.0.0, SDL_CreateSystemCursor() is available, which * provides twelve readily available system cursors to pick from. * * \param data the color value for each pixel of the cursor * \param mask the mask value for each pixel of the cursor * \param w the width of the cursor * \param h the height of the cursor * \param hot_x the X-axis location of the upper left corner of the cursor * relative to the actual mouse position * \param hot_y the Y-axis location of the upper left corner of the cursor * relative to the actual mouse position * \returns a new cursor with the specified parameters on success or NULL on * failure; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_FreeCursor * \sa SDL_SetCursor * \sa SDL_ShowCursor */ extern DECLSPEC SDL_Cursor *SDLCALL SDL_CreateCursor(const Uint8 * data, const Uint8 * mask, int w, int h, int hot_x, int hot_y); /** * Create a color cursor. * * \param surface an SDL_Surface structure representing the cursor image * \param hot_x the x position of the cursor hot spot * \param hot_y the y position of the cursor hot spot * \returns the new cursor on success or NULL on failure; call SDL_GetError() * for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateCursor * \sa SDL_FreeCursor */ extern DECLSPEC SDL_Cursor *SDLCALL SDL_CreateColorCursor(SDL_Surface *surface, int hot_x, int hot_y); /** * Create a system cursor. * * \param id an SDL_SystemCursor enum value * \returns a cursor on success or NULL on failure; call SDL_GetError() for * more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_FreeCursor */ extern DECLSPEC SDL_Cursor *SDLCALL SDL_CreateSystemCursor(SDL_SystemCursor id); /** * Set the active cursor. * * This function sets the currently active cursor to the specified one. If the * cursor is currently visible, the change will be immediately represented on * the display. SDL_SetCursor(NULL) can be used to force cursor redraw, if * this is desired for any reason. * * \param cursor a cursor to make active * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateCursor * \sa SDL_GetCursor * \sa SDL_ShowCursor */ extern DECLSPEC void SDLCALL SDL_SetCursor(SDL_Cursor * cursor); /** * Get the active cursor. * * This function returns a pointer to the current cursor which is owned by the * library. It is not necessary to free the cursor with SDL_FreeCursor(). * * \returns the active cursor or NULL if there is no mouse. * * \since This function is available since SDL 2.0.0. * * \sa SDL_SetCursor */ extern DECLSPEC SDL_Cursor *SDLCALL SDL_GetCursor(void); /** * Get the default cursor. * * You do not have to call SDL_FreeCursor() on the return value, but it is * safe to do so. * * \returns the default cursor on success or NULL on failure. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateSystemCursor */ extern DECLSPEC SDL_Cursor *SDLCALL SDL_GetDefaultCursor(void); /** * Free a previously-created cursor. * * Use this function to free cursor resources created with SDL_CreateCursor(), * SDL_CreateColorCursor() or SDL_CreateSystemCursor(). * * \param cursor the cursor to free * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateColorCursor * \sa SDL_CreateCursor * \sa SDL_CreateSystemCursor */ extern DECLSPEC void SDLCALL SDL_FreeCursor(SDL_Cursor * cursor); /** * Toggle whether or not the cursor is shown. * * The cursor starts off displayed but can be turned off. Passing `SDL_ENABLE` * displays the cursor and passing `SDL_DISABLE` hides it. * * The current state of the mouse cursor can be queried by passing * `SDL_QUERY`; either `SDL_DISABLE` or `SDL_ENABLE` will be returned. * * \param toggle `SDL_ENABLE` to show the cursor, `SDL_DISABLE` to hide it, * `SDL_QUERY` to query the current state without changing it. * \returns `SDL_ENABLE` if the cursor is shown, or `SDL_DISABLE` if the * cursor is hidden, or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateCursor * \sa SDL_SetCursor */ extern DECLSPEC int SDLCALL SDL_ShowCursor(int toggle); /** * Used as a mask when testing buttons in buttonstate. * * - Button 1: Left mouse button * - Button 2: Middle mouse button * - Button 3: Right mouse button */ #define SDL_BUTTON(X) (1 << ((X)-1)) #define SDL_BUTTON_LEFT 1 #define SDL_BUTTON_MIDDLE 2 #define SDL_BUTTON_RIGHT 3 #define SDL_BUTTON_X1 4 #define SDL_BUTTON_X2 5 #define SDL_BUTTON_LMASK SDL_BUTTON(SDL_BUTTON_LEFT) #define SDL_BUTTON_MMASK SDL_BUTTON(SDL_BUTTON_MIDDLE) #define SDL_BUTTON_RMASK SDL_BUTTON(SDL_BUTTON_RIGHT) #define SDL_BUTTON_X1MASK SDL_BUTTON(SDL_BUTTON_X1) #define SDL_BUTTON_X2MASK SDL_BUTTON(SDL_BUTTON_X2) /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_mouse_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_mutex.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef SDL_mutex_h_ #define SDL_mutex_h_ /** * \file SDL_mutex.h * * Functions to provide thread synchronization primitives. */ #include "SDL_stdinc.h" #include "SDL_error.h" /******************************************************************************/ /* Enable thread safety attributes only with clang. * The attributes can be safely erased when compiling with other compilers. */ #if defined(SDL_THREAD_SAFETY_ANALYSIS) && \ defined(__clang__) && (!defined(SWIG)) #define SDL_THREAD_ANNOTATION_ATTRIBUTE__(x) __attribute__((x)) #else #define SDL_THREAD_ANNOTATION_ATTRIBUTE__(x) /* no-op */ #endif #define SDL_CAPABILITY(x) \ SDL_THREAD_ANNOTATION_ATTRIBUTE__(capability(x)) #define SDL_SCOPED_CAPABILITY \ SDL_THREAD_ANNOTATION_ATTRIBUTE__(scoped_lockable) #define SDL_GUARDED_BY(x) \ SDL_THREAD_ANNOTATION_ATTRIBUTE__(guarded_by(x)) #define SDL_PT_GUARDED_BY(x) \ SDL_THREAD_ANNOTATION_ATTRIBUTE__(pt_guarded_by(x)) #define SDL_ACQUIRED_BEFORE(x) \ SDL_THREAD_ANNOTATION_ATTRIBUTE__(acquired_before(x)) #define SDL_ACQUIRED_AFTER(x) \ SDL_THREAD_ANNOTATION_ATTRIBUTE__(acquired_after(x)) #define SDL_REQUIRES(x) \ SDL_THREAD_ANNOTATION_ATTRIBUTE__(requires_capability(x)) #define SDL_REQUIRES_SHARED(x) \ SDL_THREAD_ANNOTATION_ATTRIBUTE__(requires_shared_capability(x)) #define SDL_ACQUIRE(x) \ SDL_THREAD_ANNOTATION_ATTRIBUTE__(acquire_capability(x)) #define SDL_ACQUIRE_SHARED(x) \ SDL_THREAD_ANNOTATION_ATTRIBUTE__(acquire_shared_capability(x)) #define SDL_RELEASE(x) \ SDL_THREAD_ANNOTATION_ATTRIBUTE__(release_capability(x)) #define SDL_RELEASE_SHARED(x) \ SDL_THREAD_ANNOTATION_ATTRIBUTE__(release_shared_capability(x)) #define SDL_RELEASE_GENERIC(x) \ SDL_THREAD_ANNOTATION_ATTRIBUTE__(release_generic_capability(x)) #define SDL_TRY_ACQUIRE(x, y) \ SDL_THREAD_ANNOTATION_ATTRIBUTE__(try_acquire_capability(x, y)) #define SDL_TRY_ACQUIRE_SHARED(x, y) \ SDL_THREAD_ANNOTATION_ATTRIBUTE__(try_acquire_shared_capability(x, y)) #define SDL_EXCLUDES(x) \ SDL_THREAD_ANNOTATION_ATTRIBUTE__(locks_excluded(x)) #define SDL_ASSERT_CAPABILITY(x) \ SDL_THREAD_ANNOTATION_ATTRIBUTE__(assert_capability(x)) #define SDL_ASSERT_SHARED_CAPABILITY(x) \ SDL_THREAD_ANNOTATION_ATTRIBUTE__(assert_shared_capability(x)) #define SDL_RETURN_CAPABILITY(x) \ SDL_THREAD_ANNOTATION_ATTRIBUTE__(lock_returned(x)) #define SDL_NO_THREAD_SAFETY_ANALYSIS \ SDL_THREAD_ANNOTATION_ATTRIBUTE__(no_thread_safety_analysis) /******************************************************************************/ #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** * Synchronization functions which can time out return this value * if they time out. */ #define SDL_MUTEX_TIMEDOUT 1 /** * This is the timeout value which corresponds to never time out. */ #define SDL_MUTEX_MAXWAIT (~(Uint32)0) /** * \name Mutex functions */ /* @{ */ /* The SDL mutex structure, defined in SDL_sysmutex.c */ struct SDL_mutex; typedef struct SDL_mutex SDL_mutex; /** * Create a new mutex. * * All newly-created mutexes begin in the _unlocked_ state. * * Calls to SDL_LockMutex() will not return while the mutex is locked by * another thread. See SDL_TryLockMutex() to attempt to lock without blocking. * * SDL mutexes are reentrant. * * \returns the initialized and unlocked mutex or NULL on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_DestroyMutex * \sa SDL_LockMutex * \sa SDL_TryLockMutex * \sa SDL_UnlockMutex */ extern DECLSPEC SDL_mutex *SDLCALL SDL_CreateMutex(void); /** * Lock the mutex. * * This will block until the mutex is available, which is to say it is in the * unlocked state and the OS has chosen the caller as the next thread to lock * it. Of all threads waiting to lock the mutex, only one may do so at a time. * * It is legal for the owning thread to lock an already-locked mutex. It must * unlock it the same number of times before it is actually made available for * other threads in the system (this is known as a "recursive mutex"). * * \param mutex the mutex to lock * \return 0, or -1 on error. * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC int SDLCALL SDL_LockMutex(SDL_mutex * mutex) SDL_ACQUIRE(mutex); #define SDL_mutexP(m) SDL_LockMutex(m) /** * Try to lock a mutex without blocking. * * This works just like SDL_LockMutex(), but if the mutex is not available, * this function returns `SDL_MUTEX_TIMEOUT` immediately. * * This technique is useful if you need exclusive access to a resource but * don't want to wait for it, and will return to it to try again later. * * \param mutex the mutex to try to lock * \returns 0, `SDL_MUTEX_TIMEDOUT`, or -1 on error; call SDL_GetError() for * more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateMutex * \sa SDL_DestroyMutex * \sa SDL_LockMutex * \sa SDL_UnlockMutex */ extern DECLSPEC int SDLCALL SDL_TryLockMutex(SDL_mutex * mutex) SDL_TRY_ACQUIRE(0, mutex); /** * Unlock the mutex. * * It is legal for the owning thread to lock an already-locked mutex. It must * unlock it the same number of times before it is actually made available for * other threads in the system (this is known as a "recursive mutex"). * * It is an error to unlock a mutex that has not been locked by the current * thread, and doing so results in undefined behavior. * * It is also an error to unlock a mutex that isn't locked at all. * * \param mutex the mutex to unlock. * \returns 0, or -1 on error. * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC int SDLCALL SDL_UnlockMutex(SDL_mutex * mutex) SDL_RELEASE(mutex); #define SDL_mutexV(m) SDL_UnlockMutex(m) /** * Destroy a mutex created with SDL_CreateMutex(). * * This function must be called on any mutex that is no longer needed. Failure * to destroy a mutex will result in a system memory or resource leak. While * it is safe to destroy a mutex that is _unlocked_, it is not safe to attempt * to destroy a locked mutex, and may result in undefined behavior depending * on the platform. * * \param mutex the mutex to destroy * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateMutex * \sa SDL_LockMutex * \sa SDL_TryLockMutex * \sa SDL_UnlockMutex */ extern DECLSPEC void SDLCALL SDL_DestroyMutex(SDL_mutex * mutex); /* @} *//* Mutex functions */ /** * \name Semaphore functions */ /* @{ */ /* The SDL semaphore structure, defined in SDL_syssem.c */ struct SDL_semaphore; typedef struct SDL_semaphore SDL_sem; /** * Create a semaphore. * * This function creates a new semaphore and initializes it with the value * `initial_value`. Each wait operation on the semaphore will atomically * decrement the semaphore value and potentially block if the semaphore value * is 0. Each post operation will atomically increment the semaphore value and * wake waiting threads and allow them to retry the wait operation. * * \param initial_value the starting value of the semaphore * \returns a new semaphore or NULL on failure; call SDL_GetError() for more * information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_DestroySemaphore * \sa SDL_SemPost * \sa SDL_SemTryWait * \sa SDL_SemValue * \sa SDL_SemWait * \sa SDL_SemWaitTimeout */ extern DECLSPEC SDL_sem *SDLCALL SDL_CreateSemaphore(Uint32 initial_value); /** * Destroy a semaphore. * * It is not safe to destroy a semaphore if there are threads currently * waiting on it. * * \param sem the semaphore to destroy * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateSemaphore * \sa SDL_SemPost * \sa SDL_SemTryWait * \sa SDL_SemValue * \sa SDL_SemWait * \sa SDL_SemWaitTimeout */ extern DECLSPEC void SDLCALL SDL_DestroySemaphore(SDL_sem * sem); /** * Wait until a semaphore has a positive value and then decrements it. * * This function suspends the calling thread until either the semaphore * pointed to by `sem` has a positive value or the call is interrupted by a * signal or error. If the call is successful it will atomically decrement the * semaphore value. * * This function is the equivalent of calling SDL_SemWaitTimeout() with a time * length of `SDL_MUTEX_MAXWAIT`. * * \param sem the semaphore wait on * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateSemaphore * \sa SDL_DestroySemaphore * \sa SDL_SemPost * \sa SDL_SemTryWait * \sa SDL_SemValue * \sa SDL_SemWait * \sa SDL_SemWaitTimeout */ extern DECLSPEC int SDLCALL SDL_SemWait(SDL_sem * sem); /** * See if a semaphore has a positive value and decrement it if it does. * * This function checks to see if the semaphore pointed to by `sem` has a * positive value and atomically decrements the semaphore value if it does. If * the semaphore doesn't have a positive value, the function immediately * returns SDL_MUTEX_TIMEDOUT. * * \param sem the semaphore to wait on * \returns 0 if the wait succeeds, `SDL_MUTEX_TIMEDOUT` if the wait would * block, or a negative error code on failure; call SDL_GetError() * for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateSemaphore * \sa SDL_DestroySemaphore * \sa SDL_SemPost * \sa SDL_SemValue * \sa SDL_SemWait * \sa SDL_SemWaitTimeout */ extern DECLSPEC int SDLCALL SDL_SemTryWait(SDL_sem * sem); /** * Wait until a semaphore has a positive value and then decrements it. * * This function suspends the calling thread until either the semaphore * pointed to by `sem` has a positive value, the call is interrupted by a * signal or error, or the specified time has elapsed. If the call is * successful it will atomically decrement the semaphore value. * * \param sem the semaphore to wait on * \param timeout the length of the timeout, in milliseconds * \returns 0 if the wait succeeds, `SDL_MUTEX_TIMEDOUT` if the wait does not * succeed in the allotted time, or a negative error code on failure; * call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateSemaphore * \sa SDL_DestroySemaphore * \sa SDL_SemPost * \sa SDL_SemTryWait * \sa SDL_SemValue * \sa SDL_SemWait */ extern DECLSPEC int SDLCALL SDL_SemWaitTimeout(SDL_sem *sem, Uint32 timeout); /** * Atomically increment a semaphore's value and wake waiting threads. * * \param sem the semaphore to increment * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateSemaphore * \sa SDL_DestroySemaphore * \sa SDL_SemTryWait * \sa SDL_SemValue * \sa SDL_SemWait * \sa SDL_SemWaitTimeout */ extern DECLSPEC int SDLCALL SDL_SemPost(SDL_sem * sem); /** * Get the current value of a semaphore. * * \param sem the semaphore to query * \returns the current value of the semaphore. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateSemaphore */ extern DECLSPEC Uint32 SDLCALL SDL_SemValue(SDL_sem * sem); /* @} *//* Semaphore functions */ /** * \name Condition variable functions */ /* @{ */ /* The SDL condition variable structure, defined in SDL_syscond.c */ struct SDL_cond; typedef struct SDL_cond SDL_cond; /** * Create a condition variable. * * \returns a new condition variable or NULL on failure; call SDL_GetError() * for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CondBroadcast * \sa SDL_CondSignal * \sa SDL_CondWait * \sa SDL_CondWaitTimeout * \sa SDL_DestroyCond */ extern DECLSPEC SDL_cond *SDLCALL SDL_CreateCond(void); /** * Destroy a condition variable. * * \param cond the condition variable to destroy * * \since This function is available since SDL 2.0.0. * * \sa SDL_CondBroadcast * \sa SDL_CondSignal * \sa SDL_CondWait * \sa SDL_CondWaitTimeout * \sa SDL_CreateCond */ extern DECLSPEC void SDLCALL SDL_DestroyCond(SDL_cond * cond); /** * Restart one of the threads that are waiting on the condition variable. * * \param cond the condition variable to signal * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CondBroadcast * \sa SDL_CondWait * \sa SDL_CondWaitTimeout * \sa SDL_CreateCond * \sa SDL_DestroyCond */ extern DECLSPEC int SDLCALL SDL_CondSignal(SDL_cond * cond); /** * Restart all threads that are waiting on the condition variable. * * \param cond the condition variable to signal * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CondSignal * \sa SDL_CondWait * \sa SDL_CondWaitTimeout * \sa SDL_CreateCond * \sa SDL_DestroyCond */ extern DECLSPEC int SDLCALL SDL_CondBroadcast(SDL_cond * cond); /** * Wait until a condition variable is signaled. * * This function unlocks the specified `mutex` and waits for another thread to * call SDL_CondSignal() or SDL_CondBroadcast() on the condition variable * `cond`. Once the condition variable is signaled, the mutex is re-locked and * the function returns. * * The mutex must be locked before calling this function. * * This function is the equivalent of calling SDL_CondWaitTimeout() with a * time length of `SDL_MUTEX_MAXWAIT`. * * \param cond the condition variable to wait on * \param mutex the mutex used to coordinate thread access * \returns 0 when it is signaled or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CondBroadcast * \sa SDL_CondSignal * \sa SDL_CondWaitTimeout * \sa SDL_CreateCond * \sa SDL_DestroyCond */ extern DECLSPEC int SDLCALL SDL_CondWait(SDL_cond * cond, SDL_mutex * mutex); /** * Wait until a condition variable is signaled or a certain time has passed. * * This function unlocks the specified `mutex` and waits for another thread to * call SDL_CondSignal() or SDL_CondBroadcast() on the condition variable * `cond`, or for the specified time to elapse. Once the condition variable is * signaled or the time elapsed, the mutex is re-locked and the function * returns. * * The mutex must be locked before calling this function. * * \param cond the condition variable to wait on * \param mutex the mutex used to coordinate thread access * \param ms the maximum time to wait, in milliseconds, or `SDL_MUTEX_MAXWAIT` * to wait indefinitely * \returns 0 if the condition variable is signaled, `SDL_MUTEX_TIMEDOUT` if * the condition is not signaled in the allotted time, or a negative * error code on failure; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CondBroadcast * \sa SDL_CondSignal * \sa SDL_CondWait * \sa SDL_CreateCond * \sa SDL_DestroyCond */ extern DECLSPEC int SDLCALL SDL_CondWaitTimeout(SDL_cond * cond, SDL_mutex * mutex, Uint32 ms); /* @} *//* Condition variable functions */ /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_mutex_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_name.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef SDLname_h_ #define SDLname_h_ #if defined(__STDC__) || defined(__cplusplus) #define NeedFunctionPrototypes 1 #endif #define SDL_NAME(X) SDL_##X #endif /* SDLname_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_opengl.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_opengl.h * * This is a simple file to encapsulate the OpenGL API headers. */ /** * \def NO_SDL_GLEXT * * Define this if you have your own version of glext.h and want to disable the * version included in SDL_opengl.h. */ #ifndef SDL_opengl_h_ #define SDL_opengl_h_ #include "SDL_config.h" #ifndef __IPHONEOS__ /* No OpenGL on iOS. */ /* * Mesa 3-D graphics library * * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * Copyright (C) 2009 VMware, Inc. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. */ #ifndef __gl_h_ #define __gl_h_ #if defined(USE_MGL_NAMESPACE) #include "gl_mangle.h" #endif /********************************************************************** * Begin system-specific stuff. */ #if defined(_WIN32) && !defined(__WIN32__) && !defined(__CYGWIN__) #define __WIN32__ #endif #if defined(__WIN32__) && !defined(__CYGWIN__) # if (defined(_MSC_VER) || defined(__MINGW32__)) && defined(BUILD_GL32) /* tag specify we're building mesa as a DLL */ # define GLAPI __declspec(dllexport) # elif (defined(_MSC_VER) || defined(__MINGW32__)) && defined(_DLL) /* tag specifying we're building for DLL runtime support */ # define GLAPI __declspec(dllimport) # else /* for use with static link lib build of Win32 edition only */ # define GLAPI extern # endif /* _STATIC_MESA support */ # if defined(__MINGW32__) && defined(GL_NO_STDCALL) || defined(UNDER_CE) /* The generated DLLs by MingW with STDCALL are not compatible with the ones done by Microsoft's compilers */ # define GLAPIENTRY # else # define GLAPIENTRY __stdcall # endif #elif defined(__CYGWIN__) && defined(USE_OPENGL32) /* use native windows opengl32 */ # define GLAPI extern # define GLAPIENTRY __stdcall #elif defined(__OS2__) || defined(__EMX__) /* native os/2 opengl */ # define GLAPI extern # define GLAPIENTRY _System # define APIENTRY _System # if defined(__GNUC__) && !defined(_System) # define _System # endif #elif (defined(__GNUC__) && __GNUC__ >= 4) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) # define GLAPI __attribute__((visibility("default"))) # define GLAPIENTRY #endif /* WIN32 && !CYGWIN */ /* * WINDOWS: Include windows.h here to define APIENTRY. * It is also useful when applications include this file by * including only glut.h, since glut.h depends on windows.h. * Applications needing to include windows.h with parms other * than "WIN32_LEAN_AND_MEAN" may include windows.h before * glut.h or gl.h. */ #if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN 1 #endif #ifndef NOMINMAX /* don't define min() and max(). */ #define NOMINMAX #endif #include #endif #ifndef GLAPI #define GLAPI extern #endif #ifndef GLAPIENTRY #define GLAPIENTRY #endif #ifndef APIENTRY #define APIENTRY GLAPIENTRY #endif /* "P" suffix to be used for a pointer to a function */ #ifndef APIENTRYP #define APIENTRYP APIENTRY * #endif #ifndef GLAPIENTRYP #define GLAPIENTRYP GLAPIENTRY * #endif #if defined(PRAGMA_EXPORT_SUPPORTED) #pragma export on #endif /* * End system-specific stuff. **********************************************************************/ #ifdef __cplusplus extern "C" { #endif #define GL_VERSION_1_1 1 #define GL_VERSION_1_2 1 #define GL_VERSION_1_3 1 #define GL_ARB_imaging 1 /* * Datatypes */ typedef unsigned int GLenum; typedef unsigned char GLboolean; typedef unsigned int GLbitfield; typedef void GLvoid; typedef signed char GLbyte; /* 1-byte signed */ typedef short GLshort; /* 2-byte signed */ typedef int GLint; /* 4-byte signed */ typedef unsigned char GLubyte; /* 1-byte unsigned */ typedef unsigned short GLushort; /* 2-byte unsigned */ typedef unsigned int GLuint; /* 4-byte unsigned */ typedef int GLsizei; /* 4-byte signed */ typedef float GLfloat; /* single precision float */ typedef float GLclampf; /* single precision float in [0,1] */ typedef double GLdouble; /* double precision float */ typedef double GLclampd; /* double precision float in [0,1] */ /* * Constants */ /* Boolean values */ #define GL_FALSE 0 #define GL_TRUE 1 /* Data types */ #define GL_BYTE 0x1400 #define GL_UNSIGNED_BYTE 0x1401 #define GL_SHORT 0x1402 #define GL_UNSIGNED_SHORT 0x1403 #define GL_INT 0x1404 #define GL_UNSIGNED_INT 0x1405 #define GL_FLOAT 0x1406 #define GL_2_BYTES 0x1407 #define GL_3_BYTES 0x1408 #define GL_4_BYTES 0x1409 #define GL_DOUBLE 0x140A /* Primitives */ #define GL_POINTS 0x0000 #define GL_LINES 0x0001 #define GL_LINE_LOOP 0x0002 #define GL_LINE_STRIP 0x0003 #define GL_TRIANGLES 0x0004 #define GL_TRIANGLE_STRIP 0x0005 #define GL_TRIANGLE_FAN 0x0006 #define GL_QUADS 0x0007 #define GL_QUAD_STRIP 0x0008 #define GL_POLYGON 0x0009 /* Vertex Arrays */ #define GL_VERTEX_ARRAY 0x8074 #define GL_NORMAL_ARRAY 0x8075 #define GL_COLOR_ARRAY 0x8076 #define GL_INDEX_ARRAY 0x8077 #define GL_TEXTURE_COORD_ARRAY 0x8078 #define GL_EDGE_FLAG_ARRAY 0x8079 #define GL_VERTEX_ARRAY_SIZE 0x807A #define GL_VERTEX_ARRAY_TYPE 0x807B #define GL_VERTEX_ARRAY_STRIDE 0x807C #define GL_NORMAL_ARRAY_TYPE 0x807E #define GL_NORMAL_ARRAY_STRIDE 0x807F #define GL_COLOR_ARRAY_SIZE 0x8081 #define GL_COLOR_ARRAY_TYPE 0x8082 #define GL_COLOR_ARRAY_STRIDE 0x8083 #define GL_INDEX_ARRAY_TYPE 0x8085 #define GL_INDEX_ARRAY_STRIDE 0x8086 #define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088 #define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089 #define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A #define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C #define GL_VERTEX_ARRAY_POINTER 0x808E #define GL_NORMAL_ARRAY_POINTER 0x808F #define GL_COLOR_ARRAY_POINTER 0x8090 #define GL_INDEX_ARRAY_POINTER 0x8091 #define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092 #define GL_EDGE_FLAG_ARRAY_POINTER 0x8093 #define GL_V2F 0x2A20 #define GL_V3F 0x2A21 #define GL_C4UB_V2F 0x2A22 #define GL_C4UB_V3F 0x2A23 #define GL_C3F_V3F 0x2A24 #define GL_N3F_V3F 0x2A25 #define GL_C4F_N3F_V3F 0x2A26 #define GL_T2F_V3F 0x2A27 #define GL_T4F_V4F 0x2A28 #define GL_T2F_C4UB_V3F 0x2A29 #define GL_T2F_C3F_V3F 0x2A2A #define GL_T2F_N3F_V3F 0x2A2B #define GL_T2F_C4F_N3F_V3F 0x2A2C #define GL_T4F_C4F_N3F_V4F 0x2A2D /* Matrix Mode */ #define GL_MATRIX_MODE 0x0BA0 #define GL_MODELVIEW 0x1700 #define GL_PROJECTION 0x1701 #define GL_TEXTURE 0x1702 /* Points */ #define GL_POINT_SMOOTH 0x0B10 #define GL_POINT_SIZE 0x0B11 #define GL_POINT_SIZE_GRANULARITY 0x0B13 #define GL_POINT_SIZE_RANGE 0x0B12 /* Lines */ #define GL_LINE_SMOOTH 0x0B20 #define GL_LINE_STIPPLE 0x0B24 #define GL_LINE_STIPPLE_PATTERN 0x0B25 #define GL_LINE_STIPPLE_REPEAT 0x0B26 #define GL_LINE_WIDTH 0x0B21 #define GL_LINE_WIDTH_GRANULARITY 0x0B23 #define GL_LINE_WIDTH_RANGE 0x0B22 /* Polygons */ #define GL_POINT 0x1B00 #define GL_LINE 0x1B01 #define GL_FILL 0x1B02 #define GL_CW 0x0900 #define GL_CCW 0x0901 #define GL_FRONT 0x0404 #define GL_BACK 0x0405 #define GL_POLYGON_MODE 0x0B40 #define GL_POLYGON_SMOOTH 0x0B41 #define GL_POLYGON_STIPPLE 0x0B42 #define GL_EDGE_FLAG 0x0B43 #define GL_CULL_FACE 0x0B44 #define GL_CULL_FACE_MODE 0x0B45 #define GL_FRONT_FACE 0x0B46 #define GL_POLYGON_OFFSET_FACTOR 0x8038 #define GL_POLYGON_OFFSET_UNITS 0x2A00 #define GL_POLYGON_OFFSET_POINT 0x2A01 #define GL_POLYGON_OFFSET_LINE 0x2A02 #define GL_POLYGON_OFFSET_FILL 0x8037 /* Display Lists */ #define GL_COMPILE 0x1300 #define GL_COMPILE_AND_EXECUTE 0x1301 #define GL_LIST_BASE 0x0B32 #define GL_LIST_INDEX 0x0B33 #define GL_LIST_MODE 0x0B30 /* Depth buffer */ #define GL_NEVER 0x0200 #define GL_LESS 0x0201 #define GL_EQUAL 0x0202 #define GL_LEQUAL 0x0203 #define GL_GREATER 0x0204 #define GL_NOTEQUAL 0x0205 #define GL_GEQUAL 0x0206 #define GL_ALWAYS 0x0207 #define GL_DEPTH_TEST 0x0B71 #define GL_DEPTH_BITS 0x0D56 #define GL_DEPTH_CLEAR_VALUE 0x0B73 #define GL_DEPTH_FUNC 0x0B74 #define GL_DEPTH_RANGE 0x0B70 #define GL_DEPTH_WRITEMASK 0x0B72 #define GL_DEPTH_COMPONENT 0x1902 /* Lighting */ #define GL_LIGHTING 0x0B50 #define GL_LIGHT0 0x4000 #define GL_LIGHT1 0x4001 #define GL_LIGHT2 0x4002 #define GL_LIGHT3 0x4003 #define GL_LIGHT4 0x4004 #define GL_LIGHT5 0x4005 #define GL_LIGHT6 0x4006 #define GL_LIGHT7 0x4007 #define GL_SPOT_EXPONENT 0x1205 #define GL_SPOT_CUTOFF 0x1206 #define GL_CONSTANT_ATTENUATION 0x1207 #define GL_LINEAR_ATTENUATION 0x1208 #define GL_QUADRATIC_ATTENUATION 0x1209 #define GL_AMBIENT 0x1200 #define GL_DIFFUSE 0x1201 #define GL_SPECULAR 0x1202 #define GL_SHININESS 0x1601 #define GL_EMISSION 0x1600 #define GL_POSITION 0x1203 #define GL_SPOT_DIRECTION 0x1204 #define GL_AMBIENT_AND_DIFFUSE 0x1602 #define GL_COLOR_INDEXES 0x1603 #define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 #define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 #define GL_LIGHT_MODEL_AMBIENT 0x0B53 #define GL_FRONT_AND_BACK 0x0408 #define GL_SHADE_MODEL 0x0B54 #define GL_FLAT 0x1D00 #define GL_SMOOTH 0x1D01 #define GL_COLOR_MATERIAL 0x0B57 #define GL_COLOR_MATERIAL_FACE 0x0B55 #define GL_COLOR_MATERIAL_PARAMETER 0x0B56 #define GL_NORMALIZE 0x0BA1 /* User clipping planes */ #define GL_CLIP_PLANE0 0x3000 #define GL_CLIP_PLANE1 0x3001 #define GL_CLIP_PLANE2 0x3002 #define GL_CLIP_PLANE3 0x3003 #define GL_CLIP_PLANE4 0x3004 #define GL_CLIP_PLANE5 0x3005 /* Accumulation buffer */ #define GL_ACCUM_RED_BITS 0x0D58 #define GL_ACCUM_GREEN_BITS 0x0D59 #define GL_ACCUM_BLUE_BITS 0x0D5A #define GL_ACCUM_ALPHA_BITS 0x0D5B #define GL_ACCUM_CLEAR_VALUE 0x0B80 #define GL_ACCUM 0x0100 #define GL_ADD 0x0104 #define GL_LOAD 0x0101 #define GL_MULT 0x0103 #define GL_RETURN 0x0102 /* Alpha testing */ #define GL_ALPHA_TEST 0x0BC0 #define GL_ALPHA_TEST_REF 0x0BC2 #define GL_ALPHA_TEST_FUNC 0x0BC1 /* Blending */ #define GL_BLEND 0x0BE2 #define GL_BLEND_SRC 0x0BE1 #define GL_BLEND_DST 0x0BE0 #define GL_ZERO 0 #define GL_ONE 1 #define GL_SRC_COLOR 0x0300 #define GL_ONE_MINUS_SRC_COLOR 0x0301 #define GL_SRC_ALPHA 0x0302 #define GL_ONE_MINUS_SRC_ALPHA 0x0303 #define GL_DST_ALPHA 0x0304 #define GL_ONE_MINUS_DST_ALPHA 0x0305 #define GL_DST_COLOR 0x0306 #define GL_ONE_MINUS_DST_COLOR 0x0307 #define GL_SRC_ALPHA_SATURATE 0x0308 /* Render Mode */ #define GL_FEEDBACK 0x1C01 #define GL_RENDER 0x1C00 #define GL_SELECT 0x1C02 /* Feedback */ #define GL_2D 0x0600 #define GL_3D 0x0601 #define GL_3D_COLOR 0x0602 #define GL_3D_COLOR_TEXTURE 0x0603 #define GL_4D_COLOR_TEXTURE 0x0604 #define GL_POINT_TOKEN 0x0701 #define GL_LINE_TOKEN 0x0702 #define GL_LINE_RESET_TOKEN 0x0707 #define GL_POLYGON_TOKEN 0x0703 #define GL_BITMAP_TOKEN 0x0704 #define GL_DRAW_PIXEL_TOKEN 0x0705 #define GL_COPY_PIXEL_TOKEN 0x0706 #define GL_PASS_THROUGH_TOKEN 0x0700 #define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 #define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 #define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 /* Selection */ #define GL_SELECTION_BUFFER_POINTER 0x0DF3 #define GL_SELECTION_BUFFER_SIZE 0x0DF4 /* Fog */ #define GL_FOG 0x0B60 #define GL_FOG_MODE 0x0B65 #define GL_FOG_DENSITY 0x0B62 #define GL_FOG_COLOR 0x0B66 #define GL_FOG_INDEX 0x0B61 #define GL_FOG_START 0x0B63 #define GL_FOG_END 0x0B64 #define GL_LINEAR 0x2601 #define GL_EXP 0x0800 #define GL_EXP2 0x0801 /* Logic Ops */ #define GL_LOGIC_OP 0x0BF1 #define GL_INDEX_LOGIC_OP 0x0BF1 #define GL_COLOR_LOGIC_OP 0x0BF2 #define GL_LOGIC_OP_MODE 0x0BF0 #define GL_CLEAR 0x1500 #define GL_SET 0x150F #define GL_COPY 0x1503 #define GL_COPY_INVERTED 0x150C #define GL_NOOP 0x1505 #define GL_INVERT 0x150A #define GL_AND 0x1501 #define GL_NAND 0x150E #define GL_OR 0x1507 #define GL_NOR 0x1508 #define GL_XOR 0x1506 #define GL_EQUIV 0x1509 #define GL_AND_REVERSE 0x1502 #define GL_AND_INVERTED 0x1504 #define GL_OR_REVERSE 0x150B #define GL_OR_INVERTED 0x150D /* Stencil */ #define GL_STENCIL_BITS 0x0D57 #define GL_STENCIL_TEST 0x0B90 #define GL_STENCIL_CLEAR_VALUE 0x0B91 #define GL_STENCIL_FUNC 0x0B92 #define GL_STENCIL_VALUE_MASK 0x0B93 #define GL_STENCIL_FAIL 0x0B94 #define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 #define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 #define GL_STENCIL_REF 0x0B97 #define GL_STENCIL_WRITEMASK 0x0B98 #define GL_STENCIL_INDEX 0x1901 #define GL_KEEP 0x1E00 #define GL_REPLACE 0x1E01 #define GL_INCR 0x1E02 #define GL_DECR 0x1E03 /* Buffers, Pixel Drawing/Reading */ #define GL_NONE 0 #define GL_LEFT 0x0406 #define GL_RIGHT 0x0407 /*GL_FRONT 0x0404 */ /*GL_BACK 0x0405 */ /*GL_FRONT_AND_BACK 0x0408 */ #define GL_FRONT_LEFT 0x0400 #define GL_FRONT_RIGHT 0x0401 #define GL_BACK_LEFT 0x0402 #define GL_BACK_RIGHT 0x0403 #define GL_AUX0 0x0409 #define GL_AUX1 0x040A #define GL_AUX2 0x040B #define GL_AUX3 0x040C #define GL_COLOR_INDEX 0x1900 #define GL_RED 0x1903 #define GL_GREEN 0x1904 #define GL_BLUE 0x1905 #define GL_ALPHA 0x1906 #define GL_LUMINANCE 0x1909 #define GL_LUMINANCE_ALPHA 0x190A #define GL_ALPHA_BITS 0x0D55 #define GL_RED_BITS 0x0D52 #define GL_GREEN_BITS 0x0D53 #define GL_BLUE_BITS 0x0D54 #define GL_INDEX_BITS 0x0D51 #define GL_SUBPIXEL_BITS 0x0D50 #define GL_AUX_BUFFERS 0x0C00 #define GL_READ_BUFFER 0x0C02 #define GL_DRAW_BUFFER 0x0C01 #define GL_DOUBLEBUFFER 0x0C32 #define GL_STEREO 0x0C33 #define GL_BITMAP 0x1A00 #define GL_COLOR 0x1800 #define GL_DEPTH 0x1801 #define GL_STENCIL 0x1802 #define GL_DITHER 0x0BD0 #define GL_RGB 0x1907 #define GL_RGBA 0x1908 /* Implementation limits */ #define GL_MAX_LIST_NESTING 0x0B31 #define GL_MAX_EVAL_ORDER 0x0D30 #define GL_MAX_LIGHTS 0x0D31 #define GL_MAX_CLIP_PLANES 0x0D32 #define GL_MAX_TEXTURE_SIZE 0x0D33 #define GL_MAX_PIXEL_MAP_TABLE 0x0D34 #define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35 #define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 #define GL_MAX_NAME_STACK_DEPTH 0x0D37 #define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 #define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 #define GL_MAX_VIEWPORT_DIMS 0x0D3A #define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B /* Gets */ #define GL_ATTRIB_STACK_DEPTH 0x0BB0 #define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 #define GL_COLOR_CLEAR_VALUE 0x0C22 #define GL_COLOR_WRITEMASK 0x0C23 #define GL_CURRENT_INDEX 0x0B01 #define GL_CURRENT_COLOR 0x0B00 #define GL_CURRENT_NORMAL 0x0B02 #define GL_CURRENT_RASTER_COLOR 0x0B04 #define GL_CURRENT_RASTER_DISTANCE 0x0B09 #define GL_CURRENT_RASTER_INDEX 0x0B05 #define GL_CURRENT_RASTER_POSITION 0x0B07 #define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 #define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 #define GL_CURRENT_TEXTURE_COORDS 0x0B03 #define GL_INDEX_CLEAR_VALUE 0x0C20 #define GL_INDEX_MODE 0x0C30 #define GL_INDEX_WRITEMASK 0x0C21 #define GL_MODELVIEW_MATRIX 0x0BA6 #define GL_MODELVIEW_STACK_DEPTH 0x0BA3 #define GL_NAME_STACK_DEPTH 0x0D70 #define GL_PROJECTION_MATRIX 0x0BA7 #define GL_PROJECTION_STACK_DEPTH 0x0BA4 #define GL_RENDER_MODE 0x0C40 #define GL_RGBA_MODE 0x0C31 #define GL_TEXTURE_MATRIX 0x0BA8 #define GL_TEXTURE_STACK_DEPTH 0x0BA5 #define GL_VIEWPORT 0x0BA2 /* Evaluators */ #define GL_AUTO_NORMAL 0x0D80 #define GL_MAP1_COLOR_4 0x0D90 #define GL_MAP1_INDEX 0x0D91 #define GL_MAP1_NORMAL 0x0D92 #define GL_MAP1_TEXTURE_COORD_1 0x0D93 #define GL_MAP1_TEXTURE_COORD_2 0x0D94 #define GL_MAP1_TEXTURE_COORD_3 0x0D95 #define GL_MAP1_TEXTURE_COORD_4 0x0D96 #define GL_MAP1_VERTEX_3 0x0D97 #define GL_MAP1_VERTEX_4 0x0D98 #define GL_MAP2_COLOR_4 0x0DB0 #define GL_MAP2_INDEX 0x0DB1 #define GL_MAP2_NORMAL 0x0DB2 #define GL_MAP2_TEXTURE_COORD_1 0x0DB3 #define GL_MAP2_TEXTURE_COORD_2 0x0DB4 #define GL_MAP2_TEXTURE_COORD_3 0x0DB5 #define GL_MAP2_TEXTURE_COORD_4 0x0DB6 #define GL_MAP2_VERTEX_3 0x0DB7 #define GL_MAP2_VERTEX_4 0x0DB8 #define GL_MAP1_GRID_DOMAIN 0x0DD0 #define GL_MAP1_GRID_SEGMENTS 0x0DD1 #define GL_MAP2_GRID_DOMAIN 0x0DD2 #define GL_MAP2_GRID_SEGMENTS 0x0DD3 #define GL_COEFF 0x0A00 #define GL_ORDER 0x0A01 #define GL_DOMAIN 0x0A02 /* Hints */ #define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 #define GL_POINT_SMOOTH_HINT 0x0C51 #define GL_LINE_SMOOTH_HINT 0x0C52 #define GL_POLYGON_SMOOTH_HINT 0x0C53 #define GL_FOG_HINT 0x0C54 #define GL_DONT_CARE 0x1100 #define GL_FASTEST 0x1101 #define GL_NICEST 0x1102 /* Scissor box */ #define GL_SCISSOR_BOX 0x0C10 #define GL_SCISSOR_TEST 0x0C11 /* Pixel Mode / Transfer */ #define GL_MAP_COLOR 0x0D10 #define GL_MAP_STENCIL 0x0D11 #define GL_INDEX_SHIFT 0x0D12 #define GL_INDEX_OFFSET 0x0D13 #define GL_RED_SCALE 0x0D14 #define GL_RED_BIAS 0x0D15 #define GL_GREEN_SCALE 0x0D18 #define GL_GREEN_BIAS 0x0D19 #define GL_BLUE_SCALE 0x0D1A #define GL_BLUE_BIAS 0x0D1B #define GL_ALPHA_SCALE 0x0D1C #define GL_ALPHA_BIAS 0x0D1D #define GL_DEPTH_SCALE 0x0D1E #define GL_DEPTH_BIAS 0x0D1F #define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1 #define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0 #define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2 #define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3 #define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4 #define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5 #define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6 #define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7 #define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8 #define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9 #define GL_PIXEL_MAP_S_TO_S 0x0C71 #define GL_PIXEL_MAP_I_TO_I 0x0C70 #define GL_PIXEL_MAP_I_TO_R 0x0C72 #define GL_PIXEL_MAP_I_TO_G 0x0C73 #define GL_PIXEL_MAP_I_TO_B 0x0C74 #define GL_PIXEL_MAP_I_TO_A 0x0C75 #define GL_PIXEL_MAP_R_TO_R 0x0C76 #define GL_PIXEL_MAP_G_TO_G 0x0C77 #define GL_PIXEL_MAP_B_TO_B 0x0C78 #define GL_PIXEL_MAP_A_TO_A 0x0C79 #define GL_PACK_ALIGNMENT 0x0D05 #define GL_PACK_LSB_FIRST 0x0D01 #define GL_PACK_ROW_LENGTH 0x0D02 #define GL_PACK_SKIP_PIXELS 0x0D04 #define GL_PACK_SKIP_ROWS 0x0D03 #define GL_PACK_SWAP_BYTES 0x0D00 #define GL_UNPACK_ALIGNMENT 0x0CF5 #define GL_UNPACK_LSB_FIRST 0x0CF1 #define GL_UNPACK_ROW_LENGTH 0x0CF2 #define GL_UNPACK_SKIP_PIXELS 0x0CF4 #define GL_UNPACK_SKIP_ROWS 0x0CF3 #define GL_UNPACK_SWAP_BYTES 0x0CF0 #define GL_ZOOM_X 0x0D16 #define GL_ZOOM_Y 0x0D17 /* Texture mapping */ #define GL_TEXTURE_ENV 0x2300 #define GL_TEXTURE_ENV_MODE 0x2200 #define GL_TEXTURE_1D 0x0DE0 #define GL_TEXTURE_2D 0x0DE1 #define GL_TEXTURE_WRAP_S 0x2802 #define GL_TEXTURE_WRAP_T 0x2803 #define GL_TEXTURE_MAG_FILTER 0x2800 #define GL_TEXTURE_MIN_FILTER 0x2801 #define GL_TEXTURE_ENV_COLOR 0x2201 #define GL_TEXTURE_GEN_S 0x0C60 #define GL_TEXTURE_GEN_T 0x0C61 #define GL_TEXTURE_GEN_R 0x0C62 #define GL_TEXTURE_GEN_Q 0x0C63 #define GL_TEXTURE_GEN_MODE 0x2500 #define GL_TEXTURE_BORDER_COLOR 0x1004 #define GL_TEXTURE_WIDTH 0x1000 #define GL_TEXTURE_HEIGHT 0x1001 #define GL_TEXTURE_BORDER 0x1005 #define GL_TEXTURE_COMPONENTS 0x1003 #define GL_TEXTURE_RED_SIZE 0x805C #define GL_TEXTURE_GREEN_SIZE 0x805D #define GL_TEXTURE_BLUE_SIZE 0x805E #define GL_TEXTURE_ALPHA_SIZE 0x805F #define GL_TEXTURE_LUMINANCE_SIZE 0x8060 #define GL_TEXTURE_INTENSITY_SIZE 0x8061 #define GL_NEAREST_MIPMAP_NEAREST 0x2700 #define GL_NEAREST_MIPMAP_LINEAR 0x2702 #define GL_LINEAR_MIPMAP_NEAREST 0x2701 #define GL_LINEAR_MIPMAP_LINEAR 0x2703 #define GL_OBJECT_LINEAR 0x2401 #define GL_OBJECT_PLANE 0x2501 #define GL_EYE_LINEAR 0x2400 #define GL_EYE_PLANE 0x2502 #define GL_SPHERE_MAP 0x2402 #define GL_DECAL 0x2101 #define GL_MODULATE 0x2100 #define GL_NEAREST 0x2600 #define GL_REPEAT 0x2901 #define GL_CLAMP 0x2900 #define GL_S 0x2000 #define GL_T 0x2001 #define GL_R 0x2002 #define GL_Q 0x2003 /* Utility */ #define GL_VENDOR 0x1F00 #define GL_RENDERER 0x1F01 #define GL_VERSION 0x1F02 #define GL_EXTENSIONS 0x1F03 /* Errors */ #define GL_NO_ERROR 0 #define GL_INVALID_ENUM 0x0500 #define GL_INVALID_VALUE 0x0501 #define GL_INVALID_OPERATION 0x0502 #define GL_STACK_OVERFLOW 0x0503 #define GL_STACK_UNDERFLOW 0x0504 #define GL_OUT_OF_MEMORY 0x0505 /* glPush/PopAttrib bits */ #define GL_CURRENT_BIT 0x00000001 #define GL_POINT_BIT 0x00000002 #define GL_LINE_BIT 0x00000004 #define GL_POLYGON_BIT 0x00000008 #define GL_POLYGON_STIPPLE_BIT 0x00000010 #define GL_PIXEL_MODE_BIT 0x00000020 #define GL_LIGHTING_BIT 0x00000040 #define GL_FOG_BIT 0x00000080 #define GL_DEPTH_BUFFER_BIT 0x00000100 #define GL_ACCUM_BUFFER_BIT 0x00000200 #define GL_STENCIL_BUFFER_BIT 0x00000400 #define GL_VIEWPORT_BIT 0x00000800 #define GL_TRANSFORM_BIT 0x00001000 #define GL_ENABLE_BIT 0x00002000 #define GL_COLOR_BUFFER_BIT 0x00004000 #define GL_HINT_BIT 0x00008000 #define GL_EVAL_BIT 0x00010000 #define GL_LIST_BIT 0x00020000 #define GL_TEXTURE_BIT 0x00040000 #define GL_SCISSOR_BIT 0x00080000 #define GL_ALL_ATTRIB_BITS 0x000FFFFF /* OpenGL 1.1 */ #define GL_PROXY_TEXTURE_1D 0x8063 #define GL_PROXY_TEXTURE_2D 0x8064 #define GL_TEXTURE_PRIORITY 0x8066 #define GL_TEXTURE_RESIDENT 0x8067 #define GL_TEXTURE_BINDING_1D 0x8068 #define GL_TEXTURE_BINDING_2D 0x8069 #define GL_TEXTURE_INTERNAL_FORMAT 0x1003 #define GL_ALPHA4 0x803B #define GL_ALPHA8 0x803C #define GL_ALPHA12 0x803D #define GL_ALPHA16 0x803E #define GL_LUMINANCE4 0x803F #define GL_LUMINANCE8 0x8040 #define GL_LUMINANCE12 0x8041 #define GL_LUMINANCE16 0x8042 #define GL_LUMINANCE4_ALPHA4 0x8043 #define GL_LUMINANCE6_ALPHA2 0x8044 #define GL_LUMINANCE8_ALPHA8 0x8045 #define GL_LUMINANCE12_ALPHA4 0x8046 #define GL_LUMINANCE12_ALPHA12 0x8047 #define GL_LUMINANCE16_ALPHA16 0x8048 #define GL_INTENSITY 0x8049 #define GL_INTENSITY4 0x804A #define GL_INTENSITY8 0x804B #define GL_INTENSITY12 0x804C #define GL_INTENSITY16 0x804D #define GL_R3_G3_B2 0x2A10 #define GL_RGB4 0x804F #define GL_RGB5 0x8050 #define GL_RGB8 0x8051 #define GL_RGB10 0x8052 #define GL_RGB12 0x8053 #define GL_RGB16 0x8054 #define GL_RGBA2 0x8055 #define GL_RGBA4 0x8056 #define GL_RGB5_A1 0x8057 #define GL_RGBA8 0x8058 #define GL_RGB10_A2 0x8059 #define GL_RGBA12 0x805A #define GL_RGBA16 0x805B #define GL_CLIENT_PIXEL_STORE_BIT 0x00000001 #define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002 #define GL_ALL_CLIENT_ATTRIB_BITS 0xFFFFFFFF #define GL_CLIENT_ALL_ATTRIB_BITS 0xFFFFFFFF /* * Miscellaneous */ GLAPI void GLAPIENTRY glClearIndex( GLfloat c ); GLAPI void GLAPIENTRY glClearColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha ); GLAPI void GLAPIENTRY glClear( GLbitfield mask ); GLAPI void GLAPIENTRY glIndexMask( GLuint mask ); GLAPI void GLAPIENTRY glColorMask( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha ); GLAPI void GLAPIENTRY glAlphaFunc( GLenum func, GLclampf ref ); GLAPI void GLAPIENTRY glBlendFunc( GLenum sfactor, GLenum dfactor ); GLAPI void GLAPIENTRY glLogicOp( GLenum opcode ); GLAPI void GLAPIENTRY glCullFace( GLenum mode ); GLAPI void GLAPIENTRY glFrontFace( GLenum mode ); GLAPI void GLAPIENTRY glPointSize( GLfloat size ); GLAPI void GLAPIENTRY glLineWidth( GLfloat width ); GLAPI void GLAPIENTRY glLineStipple( GLint factor, GLushort pattern ); GLAPI void GLAPIENTRY glPolygonMode( GLenum face, GLenum mode ); GLAPI void GLAPIENTRY glPolygonOffset( GLfloat factor, GLfloat units ); GLAPI void GLAPIENTRY glPolygonStipple( const GLubyte *mask ); GLAPI void GLAPIENTRY glGetPolygonStipple( GLubyte *mask ); GLAPI void GLAPIENTRY glEdgeFlag( GLboolean flag ); GLAPI void GLAPIENTRY glEdgeFlagv( const GLboolean *flag ); GLAPI void GLAPIENTRY glScissor( GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void GLAPIENTRY glClipPlane( GLenum plane, const GLdouble *equation ); GLAPI void GLAPIENTRY glGetClipPlane( GLenum plane, GLdouble *equation ); GLAPI void GLAPIENTRY glDrawBuffer( GLenum mode ); GLAPI void GLAPIENTRY glReadBuffer( GLenum mode ); GLAPI void GLAPIENTRY glEnable( GLenum cap ); GLAPI void GLAPIENTRY glDisable( GLenum cap ); GLAPI GLboolean GLAPIENTRY glIsEnabled( GLenum cap ); GLAPI void GLAPIENTRY glEnableClientState( GLenum cap ); /* 1.1 */ GLAPI void GLAPIENTRY glDisableClientState( GLenum cap ); /* 1.1 */ GLAPI void GLAPIENTRY glGetBooleanv( GLenum pname, GLboolean *params ); GLAPI void GLAPIENTRY glGetDoublev( GLenum pname, GLdouble *params ); GLAPI void GLAPIENTRY glGetFloatv( GLenum pname, GLfloat *params ); GLAPI void GLAPIENTRY glGetIntegerv( GLenum pname, GLint *params ); GLAPI void GLAPIENTRY glPushAttrib( GLbitfield mask ); GLAPI void GLAPIENTRY glPopAttrib( void ); GLAPI void GLAPIENTRY glPushClientAttrib( GLbitfield mask ); /* 1.1 */ GLAPI void GLAPIENTRY glPopClientAttrib( void ); /* 1.1 */ GLAPI GLint GLAPIENTRY glRenderMode( GLenum mode ); GLAPI GLenum GLAPIENTRY glGetError( void ); GLAPI const GLubyte * GLAPIENTRY glGetString( GLenum name ); GLAPI void GLAPIENTRY glFinish( void ); GLAPI void GLAPIENTRY glFlush( void ); GLAPI void GLAPIENTRY glHint( GLenum target, GLenum mode ); /* * Depth Buffer */ GLAPI void GLAPIENTRY glClearDepth( GLclampd depth ); GLAPI void GLAPIENTRY glDepthFunc( GLenum func ); GLAPI void GLAPIENTRY glDepthMask( GLboolean flag ); GLAPI void GLAPIENTRY glDepthRange( GLclampd near_val, GLclampd far_val ); /* * Accumulation Buffer */ GLAPI void GLAPIENTRY glClearAccum( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ); GLAPI void GLAPIENTRY glAccum( GLenum op, GLfloat value ); /* * Transformation */ GLAPI void GLAPIENTRY glMatrixMode( GLenum mode ); GLAPI void GLAPIENTRY glOrtho( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val ); GLAPI void GLAPIENTRY glFrustum( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val ); GLAPI void GLAPIENTRY glViewport( GLint x, GLint y, GLsizei width, GLsizei height ); GLAPI void GLAPIENTRY glPushMatrix( void ); GLAPI void GLAPIENTRY glPopMatrix( void ); GLAPI void GLAPIENTRY glLoadIdentity( void ); GLAPI void GLAPIENTRY glLoadMatrixd( const GLdouble *m ); GLAPI void GLAPIENTRY glLoadMatrixf( const GLfloat *m ); GLAPI void GLAPIENTRY glMultMatrixd( const GLdouble *m ); GLAPI void GLAPIENTRY glMultMatrixf( const GLfloat *m ); GLAPI void GLAPIENTRY glRotated( GLdouble angle, GLdouble x, GLdouble y, GLdouble z ); GLAPI void GLAPIENTRY glRotatef( GLfloat angle, GLfloat x, GLfloat y, GLfloat z ); GLAPI void GLAPIENTRY glScaled( GLdouble x, GLdouble y, GLdouble z ); GLAPI void GLAPIENTRY glScalef( GLfloat x, GLfloat y, GLfloat z ); GLAPI void GLAPIENTRY glTranslated( GLdouble x, GLdouble y, GLdouble z ); GLAPI void GLAPIENTRY glTranslatef( GLfloat x, GLfloat y, GLfloat z ); /* * Display Lists */ GLAPI GLboolean GLAPIENTRY glIsList( GLuint list ); GLAPI void GLAPIENTRY glDeleteLists( GLuint list, GLsizei range ); GLAPI GLuint GLAPIENTRY glGenLists( GLsizei range ); GLAPI void GLAPIENTRY glNewList( GLuint list, GLenum mode ); GLAPI void GLAPIENTRY glEndList( void ); GLAPI void GLAPIENTRY glCallList( GLuint list ); GLAPI void GLAPIENTRY glCallLists( GLsizei n, GLenum type, const GLvoid *lists ); GLAPI void GLAPIENTRY glListBase( GLuint base ); /* * Drawing Functions */ GLAPI void GLAPIENTRY glBegin( GLenum mode ); GLAPI void GLAPIENTRY glEnd( void ); GLAPI void GLAPIENTRY glVertex2d( GLdouble x, GLdouble y ); GLAPI void GLAPIENTRY glVertex2f( GLfloat x, GLfloat y ); GLAPI void GLAPIENTRY glVertex2i( GLint x, GLint y ); GLAPI void GLAPIENTRY glVertex2s( GLshort x, GLshort y ); GLAPI void GLAPIENTRY glVertex3d( GLdouble x, GLdouble y, GLdouble z ); GLAPI void GLAPIENTRY glVertex3f( GLfloat x, GLfloat y, GLfloat z ); GLAPI void GLAPIENTRY glVertex3i( GLint x, GLint y, GLint z ); GLAPI void GLAPIENTRY glVertex3s( GLshort x, GLshort y, GLshort z ); GLAPI void GLAPIENTRY glVertex4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w ); GLAPI void GLAPIENTRY glVertex4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w ); GLAPI void GLAPIENTRY glVertex4i( GLint x, GLint y, GLint z, GLint w ); GLAPI void GLAPIENTRY glVertex4s( GLshort x, GLshort y, GLshort z, GLshort w ); GLAPI void GLAPIENTRY glVertex2dv( const GLdouble *v ); GLAPI void GLAPIENTRY glVertex2fv( const GLfloat *v ); GLAPI void GLAPIENTRY glVertex2iv( const GLint *v ); GLAPI void GLAPIENTRY glVertex2sv( const GLshort *v ); GLAPI void GLAPIENTRY glVertex3dv( const GLdouble *v ); GLAPI void GLAPIENTRY glVertex3fv( const GLfloat *v ); GLAPI void GLAPIENTRY glVertex3iv( const GLint *v ); GLAPI void GLAPIENTRY glVertex3sv( const GLshort *v ); GLAPI void GLAPIENTRY glVertex4dv( const GLdouble *v ); GLAPI void GLAPIENTRY glVertex4fv( const GLfloat *v ); GLAPI void GLAPIENTRY glVertex4iv( const GLint *v ); GLAPI void GLAPIENTRY glVertex4sv( const GLshort *v ); GLAPI void GLAPIENTRY glNormal3b( GLbyte nx, GLbyte ny, GLbyte nz ); GLAPI void GLAPIENTRY glNormal3d( GLdouble nx, GLdouble ny, GLdouble nz ); GLAPI void GLAPIENTRY glNormal3f( GLfloat nx, GLfloat ny, GLfloat nz ); GLAPI void GLAPIENTRY glNormal3i( GLint nx, GLint ny, GLint nz ); GLAPI void GLAPIENTRY glNormal3s( GLshort nx, GLshort ny, GLshort nz ); GLAPI void GLAPIENTRY glNormal3bv( const GLbyte *v ); GLAPI void GLAPIENTRY glNormal3dv( const GLdouble *v ); GLAPI void GLAPIENTRY glNormal3fv( const GLfloat *v ); GLAPI void GLAPIENTRY glNormal3iv( const GLint *v ); GLAPI void GLAPIENTRY glNormal3sv( const GLshort *v ); GLAPI void GLAPIENTRY glIndexd( GLdouble c ); GLAPI void GLAPIENTRY glIndexf( GLfloat c ); GLAPI void GLAPIENTRY glIndexi( GLint c ); GLAPI void GLAPIENTRY glIndexs( GLshort c ); GLAPI void GLAPIENTRY glIndexub( GLubyte c ); /* 1.1 */ GLAPI void GLAPIENTRY glIndexdv( const GLdouble *c ); GLAPI void GLAPIENTRY glIndexfv( const GLfloat *c ); GLAPI void GLAPIENTRY glIndexiv( const GLint *c ); GLAPI void GLAPIENTRY glIndexsv( const GLshort *c ); GLAPI void GLAPIENTRY glIndexubv( const GLubyte *c ); /* 1.1 */ GLAPI void GLAPIENTRY glColor3b( GLbyte red, GLbyte green, GLbyte blue ); GLAPI void GLAPIENTRY glColor3d( GLdouble red, GLdouble green, GLdouble blue ); GLAPI void GLAPIENTRY glColor3f( GLfloat red, GLfloat green, GLfloat blue ); GLAPI void GLAPIENTRY glColor3i( GLint red, GLint green, GLint blue ); GLAPI void GLAPIENTRY glColor3s( GLshort red, GLshort green, GLshort blue ); GLAPI void GLAPIENTRY glColor3ub( GLubyte red, GLubyte green, GLubyte blue ); GLAPI void GLAPIENTRY glColor3ui( GLuint red, GLuint green, GLuint blue ); GLAPI void GLAPIENTRY glColor3us( GLushort red, GLushort green, GLushort blue ); GLAPI void GLAPIENTRY glColor4b( GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha ); GLAPI void GLAPIENTRY glColor4d( GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha ); GLAPI void GLAPIENTRY glColor4f( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ); GLAPI void GLAPIENTRY glColor4i( GLint red, GLint green, GLint blue, GLint alpha ); GLAPI void GLAPIENTRY glColor4s( GLshort red, GLshort green, GLshort blue, GLshort alpha ); GLAPI void GLAPIENTRY glColor4ub( GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha ); GLAPI void GLAPIENTRY glColor4ui( GLuint red, GLuint green, GLuint blue, GLuint alpha ); GLAPI void GLAPIENTRY glColor4us( GLushort red, GLushort green, GLushort blue, GLushort alpha ); GLAPI void GLAPIENTRY glColor3bv( const GLbyte *v ); GLAPI void GLAPIENTRY glColor3dv( const GLdouble *v ); GLAPI void GLAPIENTRY glColor3fv( const GLfloat *v ); GLAPI void GLAPIENTRY glColor3iv( const GLint *v ); GLAPI void GLAPIENTRY glColor3sv( const GLshort *v ); GLAPI void GLAPIENTRY glColor3ubv( const GLubyte *v ); GLAPI void GLAPIENTRY glColor3uiv( const GLuint *v ); GLAPI void GLAPIENTRY glColor3usv( const GLushort *v ); GLAPI void GLAPIENTRY glColor4bv( const GLbyte *v ); GLAPI void GLAPIENTRY glColor4dv( const GLdouble *v ); GLAPI void GLAPIENTRY glColor4fv( const GLfloat *v ); GLAPI void GLAPIENTRY glColor4iv( const GLint *v ); GLAPI void GLAPIENTRY glColor4sv( const GLshort *v ); GLAPI void GLAPIENTRY glColor4ubv( const GLubyte *v ); GLAPI void GLAPIENTRY glColor4uiv( const GLuint *v ); GLAPI void GLAPIENTRY glColor4usv( const GLushort *v ); GLAPI void GLAPIENTRY glTexCoord1d( GLdouble s ); GLAPI void GLAPIENTRY glTexCoord1f( GLfloat s ); GLAPI void GLAPIENTRY glTexCoord1i( GLint s ); GLAPI void GLAPIENTRY glTexCoord1s( GLshort s ); GLAPI void GLAPIENTRY glTexCoord2d( GLdouble s, GLdouble t ); GLAPI void GLAPIENTRY glTexCoord2f( GLfloat s, GLfloat t ); GLAPI void GLAPIENTRY glTexCoord2i( GLint s, GLint t ); GLAPI void GLAPIENTRY glTexCoord2s( GLshort s, GLshort t ); GLAPI void GLAPIENTRY glTexCoord3d( GLdouble s, GLdouble t, GLdouble r ); GLAPI void GLAPIENTRY glTexCoord3f( GLfloat s, GLfloat t, GLfloat r ); GLAPI void GLAPIENTRY glTexCoord3i( GLint s, GLint t, GLint r ); GLAPI void GLAPIENTRY glTexCoord3s( GLshort s, GLshort t, GLshort r ); GLAPI void GLAPIENTRY glTexCoord4d( GLdouble s, GLdouble t, GLdouble r, GLdouble q ); GLAPI void GLAPIENTRY glTexCoord4f( GLfloat s, GLfloat t, GLfloat r, GLfloat q ); GLAPI void GLAPIENTRY glTexCoord4i( GLint s, GLint t, GLint r, GLint q ); GLAPI void GLAPIENTRY glTexCoord4s( GLshort s, GLshort t, GLshort r, GLshort q ); GLAPI void GLAPIENTRY glTexCoord1dv( const GLdouble *v ); GLAPI void GLAPIENTRY glTexCoord1fv( const GLfloat *v ); GLAPI void GLAPIENTRY glTexCoord1iv( const GLint *v ); GLAPI void GLAPIENTRY glTexCoord1sv( const GLshort *v ); GLAPI void GLAPIENTRY glTexCoord2dv( const GLdouble *v ); GLAPI void GLAPIENTRY glTexCoord2fv( const GLfloat *v ); GLAPI void GLAPIENTRY glTexCoord2iv( const GLint *v ); GLAPI void GLAPIENTRY glTexCoord2sv( const GLshort *v ); GLAPI void GLAPIENTRY glTexCoord3dv( const GLdouble *v ); GLAPI void GLAPIENTRY glTexCoord3fv( const GLfloat *v ); GLAPI void GLAPIENTRY glTexCoord3iv( const GLint *v ); GLAPI void GLAPIENTRY glTexCoord3sv( const GLshort *v ); GLAPI void GLAPIENTRY glTexCoord4dv( const GLdouble *v ); GLAPI void GLAPIENTRY glTexCoord4fv( const GLfloat *v ); GLAPI void GLAPIENTRY glTexCoord4iv( const GLint *v ); GLAPI void GLAPIENTRY glTexCoord4sv( const GLshort *v ); GLAPI void GLAPIENTRY glRasterPos2d( GLdouble x, GLdouble y ); GLAPI void GLAPIENTRY glRasterPos2f( GLfloat x, GLfloat y ); GLAPI void GLAPIENTRY glRasterPos2i( GLint x, GLint y ); GLAPI void GLAPIENTRY glRasterPos2s( GLshort x, GLshort y ); GLAPI void GLAPIENTRY glRasterPos3d( GLdouble x, GLdouble y, GLdouble z ); GLAPI void GLAPIENTRY glRasterPos3f( GLfloat x, GLfloat y, GLfloat z ); GLAPI void GLAPIENTRY glRasterPos3i( GLint x, GLint y, GLint z ); GLAPI void GLAPIENTRY glRasterPos3s( GLshort x, GLshort y, GLshort z ); GLAPI void GLAPIENTRY glRasterPos4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w ); GLAPI void GLAPIENTRY glRasterPos4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w ); GLAPI void GLAPIENTRY glRasterPos4i( GLint x, GLint y, GLint z, GLint w ); GLAPI void GLAPIENTRY glRasterPos4s( GLshort x, GLshort y, GLshort z, GLshort w ); GLAPI void GLAPIENTRY glRasterPos2dv( const GLdouble *v ); GLAPI void GLAPIENTRY glRasterPos2fv( const GLfloat *v ); GLAPI void GLAPIENTRY glRasterPos2iv( const GLint *v ); GLAPI void GLAPIENTRY glRasterPos2sv( const GLshort *v ); GLAPI void GLAPIENTRY glRasterPos3dv( const GLdouble *v ); GLAPI void GLAPIENTRY glRasterPos3fv( const GLfloat *v ); GLAPI void GLAPIENTRY glRasterPos3iv( const GLint *v ); GLAPI void GLAPIENTRY glRasterPos3sv( const GLshort *v ); GLAPI void GLAPIENTRY glRasterPos4dv( const GLdouble *v ); GLAPI void GLAPIENTRY glRasterPos4fv( const GLfloat *v ); GLAPI void GLAPIENTRY glRasterPos4iv( const GLint *v ); GLAPI void GLAPIENTRY glRasterPos4sv( const GLshort *v ); GLAPI void GLAPIENTRY glRectd( GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2 ); GLAPI void GLAPIENTRY glRectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 ); GLAPI void GLAPIENTRY glRecti( GLint x1, GLint y1, GLint x2, GLint y2 ); GLAPI void GLAPIENTRY glRects( GLshort x1, GLshort y1, GLshort x2, GLshort y2 ); GLAPI void GLAPIENTRY glRectdv( const GLdouble *v1, const GLdouble *v2 ); GLAPI void GLAPIENTRY glRectfv( const GLfloat *v1, const GLfloat *v2 ); GLAPI void GLAPIENTRY glRectiv( const GLint *v1, const GLint *v2 ); GLAPI void GLAPIENTRY glRectsv( const GLshort *v1, const GLshort *v2 ); /* * Vertex Arrays (1.1) */ GLAPI void GLAPIENTRY glVertexPointer( GLint size, GLenum type, GLsizei stride, const GLvoid *ptr ); GLAPI void GLAPIENTRY glNormalPointer( GLenum type, GLsizei stride, const GLvoid *ptr ); GLAPI void GLAPIENTRY glColorPointer( GLint size, GLenum type, GLsizei stride, const GLvoid *ptr ); GLAPI void GLAPIENTRY glIndexPointer( GLenum type, GLsizei stride, const GLvoid *ptr ); GLAPI void GLAPIENTRY glTexCoordPointer( GLint size, GLenum type, GLsizei stride, const GLvoid *ptr ); GLAPI void GLAPIENTRY glEdgeFlagPointer( GLsizei stride, const GLvoid *ptr ); GLAPI void GLAPIENTRY glGetPointerv( GLenum pname, GLvoid **params ); GLAPI void GLAPIENTRY glArrayElement( GLint i ); GLAPI void GLAPIENTRY glDrawArrays( GLenum mode, GLint first, GLsizei count ); GLAPI void GLAPIENTRY glDrawElements( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices ); GLAPI void GLAPIENTRY glInterleavedArrays( GLenum format, GLsizei stride, const GLvoid *pointer ); /* * Lighting */ GLAPI void GLAPIENTRY glShadeModel( GLenum mode ); GLAPI void GLAPIENTRY glLightf( GLenum light, GLenum pname, GLfloat param ); GLAPI void GLAPIENTRY glLighti( GLenum light, GLenum pname, GLint param ); GLAPI void GLAPIENTRY glLightfv( GLenum light, GLenum pname, const GLfloat *params ); GLAPI void GLAPIENTRY glLightiv( GLenum light, GLenum pname, const GLint *params ); GLAPI void GLAPIENTRY glGetLightfv( GLenum light, GLenum pname, GLfloat *params ); GLAPI void GLAPIENTRY glGetLightiv( GLenum light, GLenum pname, GLint *params ); GLAPI void GLAPIENTRY glLightModelf( GLenum pname, GLfloat param ); GLAPI void GLAPIENTRY glLightModeli( GLenum pname, GLint param ); GLAPI void GLAPIENTRY glLightModelfv( GLenum pname, const GLfloat *params ); GLAPI void GLAPIENTRY glLightModeliv( GLenum pname, const GLint *params ); GLAPI void GLAPIENTRY glMaterialf( GLenum face, GLenum pname, GLfloat param ); GLAPI void GLAPIENTRY glMateriali( GLenum face, GLenum pname, GLint param ); GLAPI void GLAPIENTRY glMaterialfv( GLenum face, GLenum pname, const GLfloat *params ); GLAPI void GLAPIENTRY glMaterialiv( GLenum face, GLenum pname, const GLint *params ); GLAPI void GLAPIENTRY glGetMaterialfv( GLenum face, GLenum pname, GLfloat *params ); GLAPI void GLAPIENTRY glGetMaterialiv( GLenum face, GLenum pname, GLint *params ); GLAPI void GLAPIENTRY glColorMaterial( GLenum face, GLenum mode ); /* * Raster functions */ GLAPI void GLAPIENTRY glPixelZoom( GLfloat xfactor, GLfloat yfactor ); GLAPI void GLAPIENTRY glPixelStoref( GLenum pname, GLfloat param ); GLAPI void GLAPIENTRY glPixelStorei( GLenum pname, GLint param ); GLAPI void GLAPIENTRY glPixelTransferf( GLenum pname, GLfloat param ); GLAPI void GLAPIENTRY glPixelTransferi( GLenum pname, GLint param ); GLAPI void GLAPIENTRY glPixelMapfv( GLenum map, GLsizei mapsize, const GLfloat *values ); GLAPI void GLAPIENTRY glPixelMapuiv( GLenum map, GLsizei mapsize, const GLuint *values ); GLAPI void GLAPIENTRY glPixelMapusv( GLenum map, GLsizei mapsize, const GLushort *values ); GLAPI void GLAPIENTRY glGetPixelMapfv( GLenum map, GLfloat *values ); GLAPI void GLAPIENTRY glGetPixelMapuiv( GLenum map, GLuint *values ); GLAPI void GLAPIENTRY glGetPixelMapusv( GLenum map, GLushort *values ); GLAPI void GLAPIENTRY glBitmap( GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap ); GLAPI void GLAPIENTRY glReadPixels( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels ); GLAPI void GLAPIENTRY glDrawPixels( GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels ); GLAPI void GLAPIENTRY glCopyPixels( GLint x, GLint y, GLsizei width, GLsizei height, GLenum type ); /* * Stenciling */ GLAPI void GLAPIENTRY glStencilFunc( GLenum func, GLint ref, GLuint mask ); GLAPI void GLAPIENTRY glStencilMask( GLuint mask ); GLAPI void GLAPIENTRY glStencilOp( GLenum fail, GLenum zfail, GLenum zpass ); GLAPI void GLAPIENTRY glClearStencil( GLint s ); /* * Texture mapping */ GLAPI void GLAPIENTRY glTexGend( GLenum coord, GLenum pname, GLdouble param ); GLAPI void GLAPIENTRY glTexGenf( GLenum coord, GLenum pname, GLfloat param ); GLAPI void GLAPIENTRY glTexGeni( GLenum coord, GLenum pname, GLint param ); GLAPI void GLAPIENTRY glTexGendv( GLenum coord, GLenum pname, const GLdouble *params ); GLAPI void GLAPIENTRY glTexGenfv( GLenum coord, GLenum pname, const GLfloat *params ); GLAPI void GLAPIENTRY glTexGeniv( GLenum coord, GLenum pname, const GLint *params ); GLAPI void GLAPIENTRY glGetTexGendv( GLenum coord, GLenum pname, GLdouble *params ); GLAPI void GLAPIENTRY glGetTexGenfv( GLenum coord, GLenum pname, GLfloat *params ); GLAPI void GLAPIENTRY glGetTexGeniv( GLenum coord, GLenum pname, GLint *params ); GLAPI void GLAPIENTRY glTexEnvf( GLenum target, GLenum pname, GLfloat param ); GLAPI void GLAPIENTRY glTexEnvi( GLenum target, GLenum pname, GLint param ); GLAPI void GLAPIENTRY glTexEnvfv( GLenum target, GLenum pname, const GLfloat *params ); GLAPI void GLAPIENTRY glTexEnviv( GLenum target, GLenum pname, const GLint *params ); GLAPI void GLAPIENTRY glGetTexEnvfv( GLenum target, GLenum pname, GLfloat *params ); GLAPI void GLAPIENTRY glGetTexEnviv( GLenum target, GLenum pname, GLint *params ); GLAPI void GLAPIENTRY glTexParameterf( GLenum target, GLenum pname, GLfloat param ); GLAPI void GLAPIENTRY glTexParameteri( GLenum target, GLenum pname, GLint param ); GLAPI void GLAPIENTRY glTexParameterfv( GLenum target, GLenum pname, const GLfloat *params ); GLAPI void GLAPIENTRY glTexParameteriv( GLenum target, GLenum pname, const GLint *params ); GLAPI void GLAPIENTRY glGetTexParameterfv( GLenum target, GLenum pname, GLfloat *params); GLAPI void GLAPIENTRY glGetTexParameteriv( GLenum target, GLenum pname, GLint *params ); GLAPI void GLAPIENTRY glGetTexLevelParameterfv( GLenum target, GLint level, GLenum pname, GLfloat *params ); GLAPI void GLAPIENTRY glGetTexLevelParameteriv( GLenum target, GLint level, GLenum pname, GLint *params ); GLAPI void GLAPIENTRY glTexImage1D( GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels ); GLAPI void GLAPIENTRY glTexImage2D( GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels ); GLAPI void GLAPIENTRY glGetTexImage( GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels ); /* 1.1 functions */ GLAPI void GLAPIENTRY glGenTextures( GLsizei n, GLuint *textures ); GLAPI void GLAPIENTRY glDeleteTextures( GLsizei n, const GLuint *textures); GLAPI void GLAPIENTRY glBindTexture( GLenum target, GLuint texture ); GLAPI void GLAPIENTRY glPrioritizeTextures( GLsizei n, const GLuint *textures, const GLclampf *priorities ); GLAPI GLboolean GLAPIENTRY glAreTexturesResident( GLsizei n, const GLuint *textures, GLboolean *residences ); GLAPI GLboolean GLAPIENTRY glIsTexture( GLuint texture ); GLAPI void GLAPIENTRY glTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels ); GLAPI void GLAPIENTRY glTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels ); GLAPI void GLAPIENTRY glCopyTexImage1D( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border ); GLAPI void GLAPIENTRY glCopyTexImage2D( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border ); GLAPI void GLAPIENTRY glCopyTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width ); GLAPI void GLAPIENTRY glCopyTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height ); /* * Evaluators */ GLAPI void GLAPIENTRY glMap1d( GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points ); GLAPI void GLAPIENTRY glMap1f( GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points ); GLAPI void GLAPIENTRY glMap2d( GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points ); GLAPI void GLAPIENTRY glMap2f( GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points ); GLAPI void GLAPIENTRY glGetMapdv( GLenum target, GLenum query, GLdouble *v ); GLAPI void GLAPIENTRY glGetMapfv( GLenum target, GLenum query, GLfloat *v ); GLAPI void GLAPIENTRY glGetMapiv( GLenum target, GLenum query, GLint *v ); GLAPI void GLAPIENTRY glEvalCoord1d( GLdouble u ); GLAPI void GLAPIENTRY glEvalCoord1f( GLfloat u ); GLAPI void GLAPIENTRY glEvalCoord1dv( const GLdouble *u ); GLAPI void GLAPIENTRY glEvalCoord1fv( const GLfloat *u ); GLAPI void GLAPIENTRY glEvalCoord2d( GLdouble u, GLdouble v ); GLAPI void GLAPIENTRY glEvalCoord2f( GLfloat u, GLfloat v ); GLAPI void GLAPIENTRY glEvalCoord2dv( const GLdouble *u ); GLAPI void GLAPIENTRY glEvalCoord2fv( const GLfloat *u ); GLAPI void GLAPIENTRY glMapGrid1d( GLint un, GLdouble u1, GLdouble u2 ); GLAPI void GLAPIENTRY glMapGrid1f( GLint un, GLfloat u1, GLfloat u2 ); GLAPI void GLAPIENTRY glMapGrid2d( GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2 ); GLAPI void GLAPIENTRY glMapGrid2f( GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2 ); GLAPI void GLAPIENTRY glEvalPoint1( GLint i ); GLAPI void GLAPIENTRY glEvalPoint2( GLint i, GLint j ); GLAPI void GLAPIENTRY glEvalMesh1( GLenum mode, GLint i1, GLint i2 ); GLAPI void GLAPIENTRY glEvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 ); /* * Fog */ GLAPI void GLAPIENTRY glFogf( GLenum pname, GLfloat param ); GLAPI void GLAPIENTRY glFogi( GLenum pname, GLint param ); GLAPI void GLAPIENTRY glFogfv( GLenum pname, const GLfloat *params ); GLAPI void GLAPIENTRY glFogiv( GLenum pname, const GLint *params ); /* * Selection and Feedback */ GLAPI void GLAPIENTRY glFeedbackBuffer( GLsizei size, GLenum type, GLfloat *buffer ); GLAPI void GLAPIENTRY glPassThrough( GLfloat token ); GLAPI void GLAPIENTRY glSelectBuffer( GLsizei size, GLuint *buffer ); GLAPI void GLAPIENTRY glInitNames( void ); GLAPI void GLAPIENTRY glLoadName( GLuint name ); GLAPI void GLAPIENTRY glPushName( GLuint name ); GLAPI void GLAPIENTRY glPopName( void ); /* * OpenGL 1.2 */ #define GL_RESCALE_NORMAL 0x803A #define GL_CLAMP_TO_EDGE 0x812F #define GL_MAX_ELEMENTS_VERTICES 0x80E8 #define GL_MAX_ELEMENTS_INDICES 0x80E9 #define GL_BGR 0x80E0 #define GL_BGRA 0x80E1 #define GL_UNSIGNED_BYTE_3_3_2 0x8032 #define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 #define GL_UNSIGNED_SHORT_5_6_5 0x8363 #define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 #define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 #define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 #define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 #define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 #define GL_UNSIGNED_INT_8_8_8_8 0x8035 #define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 #define GL_UNSIGNED_INT_10_10_10_2 0x8036 #define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 #define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 #define GL_SINGLE_COLOR 0x81F9 #define GL_SEPARATE_SPECULAR_COLOR 0x81FA #define GL_TEXTURE_MIN_LOD 0x813A #define GL_TEXTURE_MAX_LOD 0x813B #define GL_TEXTURE_BASE_LEVEL 0x813C #define GL_TEXTURE_MAX_LEVEL 0x813D #define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 #define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 #define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 #define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 #define GL_ALIASED_POINT_SIZE_RANGE 0x846D #define GL_ALIASED_LINE_WIDTH_RANGE 0x846E #define GL_PACK_SKIP_IMAGES 0x806B #define GL_PACK_IMAGE_HEIGHT 0x806C #define GL_UNPACK_SKIP_IMAGES 0x806D #define GL_UNPACK_IMAGE_HEIGHT 0x806E #define GL_TEXTURE_3D 0x806F #define GL_PROXY_TEXTURE_3D 0x8070 #define GL_TEXTURE_DEPTH 0x8071 #define GL_TEXTURE_WRAP_R 0x8072 #define GL_MAX_3D_TEXTURE_SIZE 0x8073 #define GL_TEXTURE_BINDING_3D 0x806A GLAPI void GLAPIENTRY glDrawRangeElements( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices ); GLAPI void GLAPIENTRY glTexImage3D( GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels ); GLAPI void GLAPIENTRY glTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); GLAPI void GLAPIENTRY glCopyTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height ); typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); /* * GL_ARB_imaging */ #define GL_CONSTANT_COLOR 0x8001 #define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 #define GL_CONSTANT_ALPHA 0x8003 #define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 #define GL_COLOR_TABLE 0x80D0 #define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 #define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 #define GL_PROXY_COLOR_TABLE 0x80D3 #define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 #define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 #define GL_COLOR_TABLE_SCALE 0x80D6 #define GL_COLOR_TABLE_BIAS 0x80D7 #define GL_COLOR_TABLE_FORMAT 0x80D8 #define GL_COLOR_TABLE_WIDTH 0x80D9 #define GL_COLOR_TABLE_RED_SIZE 0x80DA #define GL_COLOR_TABLE_GREEN_SIZE 0x80DB #define GL_COLOR_TABLE_BLUE_SIZE 0x80DC #define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD #define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE #define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF #define GL_CONVOLUTION_1D 0x8010 #define GL_CONVOLUTION_2D 0x8011 #define GL_SEPARABLE_2D 0x8012 #define GL_CONVOLUTION_BORDER_MODE 0x8013 #define GL_CONVOLUTION_FILTER_SCALE 0x8014 #define GL_CONVOLUTION_FILTER_BIAS 0x8015 #define GL_REDUCE 0x8016 #define GL_CONVOLUTION_FORMAT 0x8017 #define GL_CONVOLUTION_WIDTH 0x8018 #define GL_CONVOLUTION_HEIGHT 0x8019 #define GL_MAX_CONVOLUTION_WIDTH 0x801A #define GL_MAX_CONVOLUTION_HEIGHT 0x801B #define GL_POST_CONVOLUTION_RED_SCALE 0x801C #define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D #define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E #define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F #define GL_POST_CONVOLUTION_RED_BIAS 0x8020 #define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 #define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 #define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 #define GL_CONSTANT_BORDER 0x8151 #define GL_REPLICATE_BORDER 0x8153 #define GL_CONVOLUTION_BORDER_COLOR 0x8154 #define GL_COLOR_MATRIX 0x80B1 #define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 #define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 #define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 #define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 #define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 #define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 #define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 #define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 #define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA #define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB #define GL_HISTOGRAM 0x8024 #define GL_PROXY_HISTOGRAM 0x8025 #define GL_HISTOGRAM_WIDTH 0x8026 #define GL_HISTOGRAM_FORMAT 0x8027 #define GL_HISTOGRAM_RED_SIZE 0x8028 #define GL_HISTOGRAM_GREEN_SIZE 0x8029 #define GL_HISTOGRAM_BLUE_SIZE 0x802A #define GL_HISTOGRAM_ALPHA_SIZE 0x802B #define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C #define GL_HISTOGRAM_SINK 0x802D #define GL_MINMAX 0x802E #define GL_MINMAX_FORMAT 0x802F #define GL_MINMAX_SINK 0x8030 #define GL_TABLE_TOO_LARGE 0x8031 #define GL_BLEND_EQUATION 0x8009 #define GL_MIN 0x8007 #define GL_MAX 0x8008 #define GL_FUNC_ADD 0x8006 #define GL_FUNC_SUBTRACT 0x800A #define GL_FUNC_REVERSE_SUBTRACT 0x800B #define GL_BLEND_COLOR 0x8005 GLAPI void GLAPIENTRY glColorTable( GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table ); GLAPI void GLAPIENTRY glColorSubTable( GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data ); GLAPI void GLAPIENTRY glColorTableParameteriv(GLenum target, GLenum pname, const GLint *params); GLAPI void GLAPIENTRY glColorTableParameterfv(GLenum target, GLenum pname, const GLfloat *params); GLAPI void GLAPIENTRY glCopyColorSubTable( GLenum target, GLsizei start, GLint x, GLint y, GLsizei width ); GLAPI void GLAPIENTRY glCopyColorTable( GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width ); GLAPI void GLAPIENTRY glGetColorTable( GLenum target, GLenum format, GLenum type, GLvoid *table ); GLAPI void GLAPIENTRY glGetColorTableParameterfv( GLenum target, GLenum pname, GLfloat *params ); GLAPI void GLAPIENTRY glGetColorTableParameteriv( GLenum target, GLenum pname, GLint *params ); GLAPI void GLAPIENTRY glBlendEquation( GLenum mode ); GLAPI void GLAPIENTRY glBlendColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha ); GLAPI void GLAPIENTRY glHistogram( GLenum target, GLsizei width, GLenum internalformat, GLboolean sink ); GLAPI void GLAPIENTRY glResetHistogram( GLenum target ); GLAPI void GLAPIENTRY glGetHistogram( GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values ); GLAPI void GLAPIENTRY glGetHistogramParameterfv( GLenum target, GLenum pname, GLfloat *params ); GLAPI void GLAPIENTRY glGetHistogramParameteriv( GLenum target, GLenum pname, GLint *params ); GLAPI void GLAPIENTRY glMinmax( GLenum target, GLenum internalformat, GLboolean sink ); GLAPI void GLAPIENTRY glResetMinmax( GLenum target ); GLAPI void GLAPIENTRY glGetMinmax( GLenum target, GLboolean reset, GLenum format, GLenum types, GLvoid *values ); GLAPI void GLAPIENTRY glGetMinmaxParameterfv( GLenum target, GLenum pname, GLfloat *params ); GLAPI void GLAPIENTRY glGetMinmaxParameteriv( GLenum target, GLenum pname, GLint *params ); GLAPI void GLAPIENTRY glConvolutionFilter1D( GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image ); GLAPI void GLAPIENTRY glConvolutionFilter2D( GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image ); GLAPI void GLAPIENTRY glConvolutionParameterf( GLenum target, GLenum pname, GLfloat params ); GLAPI void GLAPIENTRY glConvolutionParameterfv( GLenum target, GLenum pname, const GLfloat *params ); GLAPI void GLAPIENTRY glConvolutionParameteri( GLenum target, GLenum pname, GLint params ); GLAPI void GLAPIENTRY glConvolutionParameteriv( GLenum target, GLenum pname, const GLint *params ); GLAPI void GLAPIENTRY glCopyConvolutionFilter1D( GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width ); GLAPI void GLAPIENTRY glCopyConvolutionFilter2D( GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void GLAPIENTRY glGetConvolutionFilter( GLenum target, GLenum format, GLenum type, GLvoid *image ); GLAPI void GLAPIENTRY glGetConvolutionParameterfv( GLenum target, GLenum pname, GLfloat *params ); GLAPI void GLAPIENTRY glGetConvolutionParameteriv( GLenum target, GLenum pname, GLint *params ); GLAPI void GLAPIENTRY glSeparableFilter2D( GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column ); GLAPI void GLAPIENTRY glGetSeparableFilter( GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span ); /* * OpenGL 1.3 */ /* multitexture */ #define GL_TEXTURE0 0x84C0 #define GL_TEXTURE1 0x84C1 #define GL_TEXTURE2 0x84C2 #define GL_TEXTURE3 0x84C3 #define GL_TEXTURE4 0x84C4 #define GL_TEXTURE5 0x84C5 #define GL_TEXTURE6 0x84C6 #define GL_TEXTURE7 0x84C7 #define GL_TEXTURE8 0x84C8 #define GL_TEXTURE9 0x84C9 #define GL_TEXTURE10 0x84CA #define GL_TEXTURE11 0x84CB #define GL_TEXTURE12 0x84CC #define GL_TEXTURE13 0x84CD #define GL_TEXTURE14 0x84CE #define GL_TEXTURE15 0x84CF #define GL_TEXTURE16 0x84D0 #define GL_TEXTURE17 0x84D1 #define GL_TEXTURE18 0x84D2 #define GL_TEXTURE19 0x84D3 #define GL_TEXTURE20 0x84D4 #define GL_TEXTURE21 0x84D5 #define GL_TEXTURE22 0x84D6 #define GL_TEXTURE23 0x84D7 #define GL_TEXTURE24 0x84D8 #define GL_TEXTURE25 0x84D9 #define GL_TEXTURE26 0x84DA #define GL_TEXTURE27 0x84DB #define GL_TEXTURE28 0x84DC #define GL_TEXTURE29 0x84DD #define GL_TEXTURE30 0x84DE #define GL_TEXTURE31 0x84DF #define GL_ACTIVE_TEXTURE 0x84E0 #define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 #define GL_MAX_TEXTURE_UNITS 0x84E2 /* texture_cube_map */ #define GL_NORMAL_MAP 0x8511 #define GL_REFLECTION_MAP 0x8512 #define GL_TEXTURE_CUBE_MAP 0x8513 #define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A #define GL_PROXY_TEXTURE_CUBE_MAP 0x851B #define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C /* texture_compression */ #define GL_COMPRESSED_ALPHA 0x84E9 #define GL_COMPRESSED_LUMINANCE 0x84EA #define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB #define GL_COMPRESSED_INTENSITY 0x84EC #define GL_COMPRESSED_RGB 0x84ED #define GL_COMPRESSED_RGBA 0x84EE #define GL_TEXTURE_COMPRESSION_HINT 0x84EF #define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 #define GL_TEXTURE_COMPRESSED 0x86A1 #define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 #define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 /* multisample */ #define GL_MULTISAMPLE 0x809D #define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E #define GL_SAMPLE_ALPHA_TO_ONE 0x809F #define GL_SAMPLE_COVERAGE 0x80A0 #define GL_SAMPLE_BUFFERS 0x80A8 #define GL_SAMPLES 0x80A9 #define GL_SAMPLE_COVERAGE_VALUE 0x80AA #define GL_SAMPLE_COVERAGE_INVERT 0x80AB #define GL_MULTISAMPLE_BIT 0x20000000 /* transpose_matrix */ #define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 #define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 #define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 #define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 /* texture_env_combine */ #define GL_COMBINE 0x8570 #define GL_COMBINE_RGB 0x8571 #define GL_COMBINE_ALPHA 0x8572 #define GL_SOURCE0_RGB 0x8580 #define GL_SOURCE1_RGB 0x8581 #define GL_SOURCE2_RGB 0x8582 #define GL_SOURCE0_ALPHA 0x8588 #define GL_SOURCE1_ALPHA 0x8589 #define GL_SOURCE2_ALPHA 0x858A #define GL_OPERAND0_RGB 0x8590 #define GL_OPERAND1_RGB 0x8591 #define GL_OPERAND2_RGB 0x8592 #define GL_OPERAND0_ALPHA 0x8598 #define GL_OPERAND1_ALPHA 0x8599 #define GL_OPERAND2_ALPHA 0x859A #define GL_RGB_SCALE 0x8573 #define GL_ADD_SIGNED 0x8574 #define GL_INTERPOLATE 0x8575 #define GL_SUBTRACT 0x84E7 #define GL_CONSTANT 0x8576 #define GL_PRIMARY_COLOR 0x8577 #define GL_PREVIOUS 0x8578 /* texture_env_dot3 */ #define GL_DOT3_RGB 0x86AE #define GL_DOT3_RGBA 0x86AF /* texture_border_clamp */ #define GL_CLAMP_TO_BORDER 0x812D GLAPI void GLAPIENTRY glActiveTexture( GLenum texture ); GLAPI void GLAPIENTRY glClientActiveTexture( GLenum texture ); GLAPI void GLAPIENTRY glCompressedTexImage1D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data ); GLAPI void GLAPIENTRY glCompressedTexImage2D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data ); GLAPI void GLAPIENTRY glCompressedTexImage3D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data ); GLAPI void GLAPIENTRY glCompressedTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data ); GLAPI void GLAPIENTRY glCompressedTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data ); GLAPI void GLAPIENTRY glCompressedTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data ); GLAPI void GLAPIENTRY glGetCompressedTexImage( GLenum target, GLint lod, GLvoid *img ); GLAPI void GLAPIENTRY glMultiTexCoord1d( GLenum target, GLdouble s ); GLAPI void GLAPIENTRY glMultiTexCoord1dv( GLenum target, const GLdouble *v ); GLAPI void GLAPIENTRY glMultiTexCoord1f( GLenum target, GLfloat s ); GLAPI void GLAPIENTRY glMultiTexCoord1fv( GLenum target, const GLfloat *v ); GLAPI void GLAPIENTRY glMultiTexCoord1i( GLenum target, GLint s ); GLAPI void GLAPIENTRY glMultiTexCoord1iv( GLenum target, const GLint *v ); GLAPI void GLAPIENTRY glMultiTexCoord1s( GLenum target, GLshort s ); GLAPI void GLAPIENTRY glMultiTexCoord1sv( GLenum target, const GLshort *v ); GLAPI void GLAPIENTRY glMultiTexCoord2d( GLenum target, GLdouble s, GLdouble t ); GLAPI void GLAPIENTRY glMultiTexCoord2dv( GLenum target, const GLdouble *v ); GLAPI void GLAPIENTRY glMultiTexCoord2f( GLenum target, GLfloat s, GLfloat t ); GLAPI void GLAPIENTRY glMultiTexCoord2fv( GLenum target, const GLfloat *v ); GLAPI void GLAPIENTRY glMultiTexCoord2i( GLenum target, GLint s, GLint t ); GLAPI void GLAPIENTRY glMultiTexCoord2iv( GLenum target, const GLint *v ); GLAPI void GLAPIENTRY glMultiTexCoord2s( GLenum target, GLshort s, GLshort t ); GLAPI void GLAPIENTRY glMultiTexCoord2sv( GLenum target, const GLshort *v ); GLAPI void GLAPIENTRY glMultiTexCoord3d( GLenum target, GLdouble s, GLdouble t, GLdouble r ); GLAPI void GLAPIENTRY glMultiTexCoord3dv( GLenum target, const GLdouble *v ); GLAPI void GLAPIENTRY glMultiTexCoord3f( GLenum target, GLfloat s, GLfloat t, GLfloat r ); GLAPI void GLAPIENTRY glMultiTexCoord3fv( GLenum target, const GLfloat *v ); GLAPI void GLAPIENTRY glMultiTexCoord3i( GLenum target, GLint s, GLint t, GLint r ); GLAPI void GLAPIENTRY glMultiTexCoord3iv( GLenum target, const GLint *v ); GLAPI void GLAPIENTRY glMultiTexCoord3s( GLenum target, GLshort s, GLshort t, GLshort r ); GLAPI void GLAPIENTRY glMultiTexCoord3sv( GLenum target, const GLshort *v ); GLAPI void GLAPIENTRY glMultiTexCoord4d( GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q ); GLAPI void GLAPIENTRY glMultiTexCoord4dv( GLenum target, const GLdouble *v ); GLAPI void GLAPIENTRY glMultiTexCoord4f( GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q ); GLAPI void GLAPIENTRY glMultiTexCoord4fv( GLenum target, const GLfloat *v ); GLAPI void GLAPIENTRY glMultiTexCoord4i( GLenum target, GLint s, GLint t, GLint r, GLint q ); GLAPI void GLAPIENTRY glMultiTexCoord4iv( GLenum target, const GLint *v ); GLAPI void GLAPIENTRY glMultiTexCoord4s( GLenum target, GLshort s, GLshort t, GLshort r, GLshort q ); GLAPI void GLAPIENTRY glMultiTexCoord4sv( GLenum target, const GLshort *v ); GLAPI void GLAPIENTRY glLoadTransposeMatrixd( const GLdouble m[16] ); GLAPI void GLAPIENTRY glLoadTransposeMatrixf( const GLfloat m[16] ); GLAPI void GLAPIENTRY glMultTransposeMatrixd( const GLdouble m[16] ); GLAPI void GLAPIENTRY glMultTransposeMatrixf( const GLfloat m[16] ); GLAPI void GLAPIENTRY glSampleCoverage( GLclampf value, GLboolean invert ); typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img); /* * GL_ARB_multitexture (ARB extension 1 and OpenGL 1.2.1) */ #ifndef GL_ARB_multitexture #define GL_ARB_multitexture 1 #define GL_TEXTURE0_ARB 0x84C0 #define GL_TEXTURE1_ARB 0x84C1 #define GL_TEXTURE2_ARB 0x84C2 #define GL_TEXTURE3_ARB 0x84C3 #define GL_TEXTURE4_ARB 0x84C4 #define GL_TEXTURE5_ARB 0x84C5 #define GL_TEXTURE6_ARB 0x84C6 #define GL_TEXTURE7_ARB 0x84C7 #define GL_TEXTURE8_ARB 0x84C8 #define GL_TEXTURE9_ARB 0x84C9 #define GL_TEXTURE10_ARB 0x84CA #define GL_TEXTURE11_ARB 0x84CB #define GL_TEXTURE12_ARB 0x84CC #define GL_TEXTURE13_ARB 0x84CD #define GL_TEXTURE14_ARB 0x84CE #define GL_TEXTURE15_ARB 0x84CF #define GL_TEXTURE16_ARB 0x84D0 #define GL_TEXTURE17_ARB 0x84D1 #define GL_TEXTURE18_ARB 0x84D2 #define GL_TEXTURE19_ARB 0x84D3 #define GL_TEXTURE20_ARB 0x84D4 #define GL_TEXTURE21_ARB 0x84D5 #define GL_TEXTURE22_ARB 0x84D6 #define GL_TEXTURE23_ARB 0x84D7 #define GL_TEXTURE24_ARB 0x84D8 #define GL_TEXTURE25_ARB 0x84D9 #define GL_TEXTURE26_ARB 0x84DA #define GL_TEXTURE27_ARB 0x84DB #define GL_TEXTURE28_ARB 0x84DC #define GL_TEXTURE29_ARB 0x84DD #define GL_TEXTURE30_ARB 0x84DE #define GL_TEXTURE31_ARB 0x84DF #define GL_ACTIVE_TEXTURE_ARB 0x84E0 #define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 #define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 GLAPI void GLAPIENTRY glActiveTextureARB(GLenum texture); GLAPI void GLAPIENTRY glClientActiveTextureARB(GLenum texture); GLAPI void GLAPIENTRY glMultiTexCoord1dARB(GLenum target, GLdouble s); GLAPI void GLAPIENTRY glMultiTexCoord1dvARB(GLenum target, const GLdouble *v); GLAPI void GLAPIENTRY glMultiTexCoord1fARB(GLenum target, GLfloat s); GLAPI void GLAPIENTRY glMultiTexCoord1fvARB(GLenum target, const GLfloat *v); GLAPI void GLAPIENTRY glMultiTexCoord1iARB(GLenum target, GLint s); GLAPI void GLAPIENTRY glMultiTexCoord1ivARB(GLenum target, const GLint *v); GLAPI void GLAPIENTRY glMultiTexCoord1sARB(GLenum target, GLshort s); GLAPI void GLAPIENTRY glMultiTexCoord1svARB(GLenum target, const GLshort *v); GLAPI void GLAPIENTRY glMultiTexCoord2dARB(GLenum target, GLdouble s, GLdouble t); GLAPI void GLAPIENTRY glMultiTexCoord2dvARB(GLenum target, const GLdouble *v); GLAPI void GLAPIENTRY glMultiTexCoord2fARB(GLenum target, GLfloat s, GLfloat t); GLAPI void GLAPIENTRY glMultiTexCoord2fvARB(GLenum target, const GLfloat *v); GLAPI void GLAPIENTRY glMultiTexCoord2iARB(GLenum target, GLint s, GLint t); GLAPI void GLAPIENTRY glMultiTexCoord2ivARB(GLenum target, const GLint *v); GLAPI void GLAPIENTRY glMultiTexCoord2sARB(GLenum target, GLshort s, GLshort t); GLAPI void GLAPIENTRY glMultiTexCoord2svARB(GLenum target, const GLshort *v); GLAPI void GLAPIENTRY glMultiTexCoord3dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r); GLAPI void GLAPIENTRY glMultiTexCoord3dvARB(GLenum target, const GLdouble *v); GLAPI void GLAPIENTRY glMultiTexCoord3fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r); GLAPI void GLAPIENTRY glMultiTexCoord3fvARB(GLenum target, const GLfloat *v); GLAPI void GLAPIENTRY glMultiTexCoord3iARB(GLenum target, GLint s, GLint t, GLint r); GLAPI void GLAPIENTRY glMultiTexCoord3ivARB(GLenum target, const GLint *v); GLAPI void GLAPIENTRY glMultiTexCoord3sARB(GLenum target, GLshort s, GLshort t, GLshort r); GLAPI void GLAPIENTRY glMultiTexCoord3svARB(GLenum target, const GLshort *v); GLAPI void GLAPIENTRY glMultiTexCoord4dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); GLAPI void GLAPIENTRY glMultiTexCoord4dvARB(GLenum target, const GLdouble *v); GLAPI void GLAPIENTRY glMultiTexCoord4fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); GLAPI void GLAPIENTRY glMultiTexCoord4fvARB(GLenum target, const GLfloat *v); GLAPI void GLAPIENTRY glMultiTexCoord4iARB(GLenum target, GLint s, GLint t, GLint r, GLint q); GLAPI void GLAPIENTRY glMultiTexCoord4ivARB(GLenum target, const GLint *v); GLAPI void GLAPIENTRY glMultiTexCoord4sARB(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); GLAPI void GLAPIENTRY glMultiTexCoord4svARB(GLenum target, const GLshort *v); typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); #endif /* GL_ARB_multitexture */ /* * Define this token if you want "old-style" header file behaviour (extensions * defined in gl.h). Otherwise, extensions will be included from glext.h. */ #if !defined(NO_SDL_GLEXT) && !defined(GL_GLEXT_LEGACY) #include "SDL_opengl_glext.h" #endif /* GL_GLEXT_LEGACY */ /********************************************************************** * Begin system-specific stuff */ #if defined(PRAGMA_EXPORT_SUPPORTED) #pragma export off #endif /* * End system-specific stuff **********************************************************************/ #ifdef __cplusplus } #endif #endif /* __gl_h_ */ #endif /* !__IPHONEOS__ */ #endif /* SDL_opengl_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_opengl_glext.h ================================================ /* SDL modified the include guard to be compatible with Mesa and Apple include guards: * - Mesa uses: __gl_glext_h_ * - Apple uses: __glext_h_ */ #if !defined(__glext_h_) && !defined(__gl_glext_h_) #define __glext_h_ 1 #define __gl_glext_h_ 1 #ifdef __cplusplus extern "C" { #endif /* ** Copyright 2013-2020 The Khronos Group Inc. ** SPDX-License-Identifier: MIT ** ** This header is generated from the Khronos OpenGL / OpenGL ES XML ** API Registry. The current version of the Registry, generator scripts ** used to make the header, and the header can be found at ** https://github.com/KhronosGroup/OpenGL-Registry */ #if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN 1 #endif #include #endif #ifndef APIENTRY #define APIENTRY #endif #ifndef APIENTRYP #define APIENTRYP APIENTRY * #endif #ifndef GLAPI #define GLAPI extern #endif #define GL_GLEXT_VERSION 20220530 /*#include */ #ifndef __khrplatform_h_ #define __khrplatform_h_ /* ** Copyright (c) 2008-2018 The Khronos Group Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and/or associated documentation files (the ** "Materials"), to deal in the Materials without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Materials, and to ** permit persons to whom the Materials are furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be included ** in all copies or substantial portions of the Materials. ** ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. */ /* Khronos platform-specific types and definitions. * * The master copy of khrplatform.h is maintained in the Khronos EGL * Registry repository at https://github.com/KhronosGroup/EGL-Registry * The last semantic modification to khrplatform.h was at commit ID: * 67a3e0864c2d75ea5287b9f3d2eb74a745936692 * * Adopters may modify this file to suit their platform. Adopters are * encouraged to submit platform specific modifications to the Khronos * group so that they can be included in future versions of this file. * Please submit changes by filing pull requests or issues on * the EGL Registry repository linked above. * * * See the Implementer's Guidelines for information about where this file * should be located on your system and for more details of its use: * http://www.khronos.org/registry/implementers_guide.pdf * * This file should be included as * #include * by Khronos client API header files that use its types and defines. * * The types in khrplatform.h should only be used to define API-specific types. * * Types defined in khrplatform.h: * khronos_int8_t signed 8 bit * khronos_uint8_t unsigned 8 bit * khronos_int16_t signed 16 bit * khronos_uint16_t unsigned 16 bit * khronos_int32_t signed 32 bit * khronos_uint32_t unsigned 32 bit * khronos_int64_t signed 64 bit * khronos_uint64_t unsigned 64 bit * khronos_intptr_t signed same number of bits as a pointer * khronos_uintptr_t unsigned same number of bits as a pointer * khronos_ssize_t signed size * khronos_usize_t unsigned size * khronos_float_t signed 32 bit floating point * khronos_time_ns_t unsigned 64 bit time in nanoseconds * khronos_utime_nanoseconds_t unsigned time interval or absolute time in * nanoseconds * khronos_stime_nanoseconds_t signed time interval in nanoseconds * khronos_boolean_enum_t enumerated boolean type. This should * only be used as a base type when a client API's boolean type is * an enum. Client APIs which use an integer or other type for * booleans cannot use this as the base type for their boolean. * * Tokens defined in khrplatform.h: * * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. * * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. * * Calling convention macros defined in this file: * KHRONOS_APICALL * KHRONOS_APIENTRY * KHRONOS_APIATTRIBUTES * * These may be used in function prototypes as: * * KHRONOS_APICALL void KHRONOS_APIENTRY funcname( * int arg1, * int arg2) KHRONOS_APIATTRIBUTES; */ #if defined(__SCITECH_SNAP__) && !defined(KHRONOS_STATIC) # define KHRONOS_STATIC 1 #endif /*------------------------------------------------------------------------- * Definition of KHRONOS_APICALL *------------------------------------------------------------------------- * This precedes the return type of the function in the function prototype. */ #if defined(KHRONOS_STATIC) /* If the preprocessor constant KHRONOS_STATIC is defined, make the * header compatible with static linking. */ # define KHRONOS_APICALL #elif defined(_WIN32) # define KHRONOS_APICALL __declspec(dllimport) #elif defined (__SYMBIAN32__) # define KHRONOS_APICALL IMPORT_C #elif defined(__ANDROID__) # define KHRONOS_APICALL __attribute__((visibility("default"))) #else # define KHRONOS_APICALL #endif /*------------------------------------------------------------------------- * Definition of KHRONOS_APIENTRY *------------------------------------------------------------------------- * This follows the return type of the function and precedes the function * name in the function prototype. */ #if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__) /* Win32 but not WinCE */ # define KHRONOS_APIENTRY __stdcall #else # define KHRONOS_APIENTRY #endif /*------------------------------------------------------------------------- * Definition of KHRONOS_APIATTRIBUTES *------------------------------------------------------------------------- * This follows the closing parenthesis of the function prototype arguments. */ #if defined (__ARMCC_2__) #define KHRONOS_APIATTRIBUTES __softfp #else #define KHRONOS_APIATTRIBUTES #endif /*------------------------------------------------------------------------- * basic type definitions *-----------------------------------------------------------------------*/ #if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) /* * Using */ #include typedef int32_t khronos_int32_t; typedef uint32_t khronos_uint32_t; typedef int64_t khronos_int64_t; typedef uint64_t khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 /* * To support platform where unsigned long cannot be used interchangeably with * inptr_t (e.g. CHERI-extended ISAs), we can use the stdint.h intptr_t. * Ideally, we could just use (u)intptr_t everywhere, but this could result in * ABI breakage if khronos_uintptr_t is changed from unsigned long to * unsigned long long or similar (this results in different C++ name mangling). * To avoid changes for existing platforms, we restrict usage of intptr_t to * platforms where the size of a pointer is larger than the size of long. */ #if defined(__SIZEOF_LONG__) && defined(__SIZEOF_POINTER__) #if __SIZEOF_POINTER__ > __SIZEOF_LONG__ #define KHRONOS_USE_INTPTR_T #endif #endif #elif defined(__VMS ) || defined(__sgi) /* * Using */ #include typedef int32_t khronos_int32_t; typedef uint32_t khronos_uint32_t; typedef int64_t khronos_int64_t; typedef uint64_t khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #elif defined(_WIN32) && !defined(__SCITECH_SNAP__) /* * Win32 */ typedef __int32 khronos_int32_t; typedef unsigned __int32 khronos_uint32_t; typedef __int64 khronos_int64_t; typedef unsigned __int64 khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #elif defined(__sun__) || defined(__digital__) /* * Sun or Digital */ typedef int khronos_int32_t; typedef unsigned int khronos_uint32_t; #if defined(__arch64__) || defined(_LP64) typedef long int khronos_int64_t; typedef unsigned long int khronos_uint64_t; #else typedef long long int khronos_int64_t; typedef unsigned long long int khronos_uint64_t; #endif /* __arch64__ */ #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #elif 0 /* * Hypothetical platform with no float or int64 support */ typedef int khronos_int32_t; typedef unsigned int khronos_uint32_t; #define KHRONOS_SUPPORT_INT64 0 #define KHRONOS_SUPPORT_FLOAT 0 #else /* * Generic fallback */ #include typedef int32_t khronos_int32_t; typedef uint32_t khronos_uint32_t; typedef int64_t khronos_int64_t; typedef uint64_t khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #endif /* * Types that are (so far) the same on all platforms */ typedef signed char khronos_int8_t; typedef unsigned char khronos_uint8_t; typedef signed short int khronos_int16_t; typedef unsigned short int khronos_uint16_t; /* * Types that differ between LLP64 and LP64 architectures - in LLP64, * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears * to be the only LLP64 architecture in current use. */ #ifdef KHRONOS_USE_INTPTR_T typedef intptr_t khronos_intptr_t; typedef uintptr_t khronos_uintptr_t; #elif defined(_WIN64) typedef signed long long int khronos_intptr_t; typedef unsigned long long int khronos_uintptr_t; #else typedef signed long int khronos_intptr_t; typedef unsigned long int khronos_uintptr_t; #endif #if defined(_WIN64) typedef signed long long int khronos_ssize_t; typedef unsigned long long int khronos_usize_t; #else typedef signed long int khronos_ssize_t; typedef unsigned long int khronos_usize_t; #endif #if KHRONOS_SUPPORT_FLOAT /* * Float type */ typedef float khronos_float_t; #endif #if KHRONOS_SUPPORT_INT64 /* Time types * * These types can be used to represent a time interval in nanoseconds or * an absolute Unadjusted System Time. Unadjusted System Time is the number * of nanoseconds since some arbitrary system event (e.g. since the last * time the system booted). The Unadjusted System Time is an unsigned * 64 bit value that wraps back to 0 every 584 years. Time intervals * may be either signed or unsigned. */ typedef khronos_uint64_t khronos_utime_nanoseconds_t; typedef khronos_int64_t khronos_stime_nanoseconds_t; #endif /* * Dummy value used to pad enum types to 32 bits. */ #ifndef KHRONOS_MAX_ENUM #define KHRONOS_MAX_ENUM 0x7FFFFFFF #endif /* * Enumerated boolean type * * Values other than zero should be considered to be true. Therefore * comparisons should not be made against KHRONOS_TRUE. */ typedef enum { KHRONOS_FALSE = 0, KHRONOS_TRUE = 1, KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM } khronos_boolean_enum_t; #endif /* __khrplatform_h_ */ /* Generated C header for: * API: gl * Profile: compatibility * Versions considered: .* * Versions emitted: 1\.[2-9]|[234]\.[0-9] * Default extensions included: gl * Additional extensions included: _nomatch_^ * Extensions removed: _nomatch_^ */ #ifndef GL_VERSION_1_2 #define GL_VERSION_1_2 1 #define GL_UNSIGNED_BYTE_3_3_2 0x8032 #define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 #define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 #define GL_UNSIGNED_INT_8_8_8_8 0x8035 #define GL_UNSIGNED_INT_10_10_10_2 0x8036 #define GL_TEXTURE_BINDING_3D 0x806A #define GL_PACK_SKIP_IMAGES 0x806B #define GL_PACK_IMAGE_HEIGHT 0x806C #define GL_UNPACK_SKIP_IMAGES 0x806D #define GL_UNPACK_IMAGE_HEIGHT 0x806E #define GL_TEXTURE_3D 0x806F #define GL_PROXY_TEXTURE_3D 0x8070 #define GL_TEXTURE_DEPTH 0x8071 #define GL_TEXTURE_WRAP_R 0x8072 #define GL_MAX_3D_TEXTURE_SIZE 0x8073 #define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 #define GL_UNSIGNED_SHORT_5_6_5 0x8363 #define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 #define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 #define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 #define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 #define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 #define GL_BGR 0x80E0 #define GL_BGRA 0x80E1 #define GL_MAX_ELEMENTS_VERTICES 0x80E8 #define GL_MAX_ELEMENTS_INDICES 0x80E9 #define GL_CLAMP_TO_EDGE 0x812F #define GL_TEXTURE_MIN_LOD 0x813A #define GL_TEXTURE_MAX_LOD 0x813B #define GL_TEXTURE_BASE_LEVEL 0x813C #define GL_TEXTURE_MAX_LEVEL 0x813D #define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 #define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 #define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 #define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 #define GL_ALIASED_LINE_WIDTH_RANGE 0x846E #define GL_RESCALE_NORMAL 0x803A #define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 #define GL_SINGLE_COLOR 0x81F9 #define GL_SEPARATE_SPECULAR_COLOR 0x81FA #define GL_ALIASED_POINT_SIZE_RANGE 0x846D typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); GLAPI void APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); #endif #endif /* GL_VERSION_1_2 */ #ifndef GL_VERSION_1_3 #define GL_VERSION_1_3 1 #define GL_TEXTURE0 0x84C0 #define GL_TEXTURE1 0x84C1 #define GL_TEXTURE2 0x84C2 #define GL_TEXTURE3 0x84C3 #define GL_TEXTURE4 0x84C4 #define GL_TEXTURE5 0x84C5 #define GL_TEXTURE6 0x84C6 #define GL_TEXTURE7 0x84C7 #define GL_TEXTURE8 0x84C8 #define GL_TEXTURE9 0x84C9 #define GL_TEXTURE10 0x84CA #define GL_TEXTURE11 0x84CB #define GL_TEXTURE12 0x84CC #define GL_TEXTURE13 0x84CD #define GL_TEXTURE14 0x84CE #define GL_TEXTURE15 0x84CF #define GL_TEXTURE16 0x84D0 #define GL_TEXTURE17 0x84D1 #define GL_TEXTURE18 0x84D2 #define GL_TEXTURE19 0x84D3 #define GL_TEXTURE20 0x84D4 #define GL_TEXTURE21 0x84D5 #define GL_TEXTURE22 0x84D6 #define GL_TEXTURE23 0x84D7 #define GL_TEXTURE24 0x84D8 #define GL_TEXTURE25 0x84D9 #define GL_TEXTURE26 0x84DA #define GL_TEXTURE27 0x84DB #define GL_TEXTURE28 0x84DC #define GL_TEXTURE29 0x84DD #define GL_TEXTURE30 0x84DE #define GL_TEXTURE31 0x84DF #define GL_ACTIVE_TEXTURE 0x84E0 #define GL_MULTISAMPLE 0x809D #define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E #define GL_SAMPLE_ALPHA_TO_ONE 0x809F #define GL_SAMPLE_COVERAGE 0x80A0 #define GL_SAMPLE_BUFFERS 0x80A8 #define GL_SAMPLES 0x80A9 #define GL_SAMPLE_COVERAGE_VALUE 0x80AA #define GL_SAMPLE_COVERAGE_INVERT 0x80AB #define GL_TEXTURE_CUBE_MAP 0x8513 #define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A #define GL_PROXY_TEXTURE_CUBE_MAP 0x851B #define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C #define GL_COMPRESSED_RGB 0x84ED #define GL_COMPRESSED_RGBA 0x84EE #define GL_TEXTURE_COMPRESSION_HINT 0x84EF #define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 #define GL_TEXTURE_COMPRESSED 0x86A1 #define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 #define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 #define GL_CLAMP_TO_BORDER 0x812D #define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 #define GL_MAX_TEXTURE_UNITS 0x84E2 #define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 #define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 #define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 #define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 #define GL_MULTISAMPLE_BIT 0x20000000 #define GL_NORMAL_MAP 0x8511 #define GL_REFLECTION_MAP 0x8512 #define GL_COMPRESSED_ALPHA 0x84E9 #define GL_COMPRESSED_LUMINANCE 0x84EA #define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB #define GL_COMPRESSED_INTENSITY 0x84EC #define GL_COMBINE 0x8570 #define GL_COMBINE_RGB 0x8571 #define GL_COMBINE_ALPHA 0x8572 #define GL_SOURCE0_RGB 0x8580 #define GL_SOURCE1_RGB 0x8581 #define GL_SOURCE2_RGB 0x8582 #define GL_SOURCE0_ALPHA 0x8588 #define GL_SOURCE1_ALPHA 0x8589 #define GL_SOURCE2_ALPHA 0x858A #define GL_OPERAND0_RGB 0x8590 #define GL_OPERAND1_RGB 0x8591 #define GL_OPERAND2_RGB 0x8592 #define GL_OPERAND0_ALPHA 0x8598 #define GL_OPERAND1_ALPHA 0x8599 #define GL_OPERAND2_ALPHA 0x859A #define GL_RGB_SCALE 0x8573 #define GL_ADD_SIGNED 0x8574 #define GL_INTERPOLATE 0x8575 #define GL_SUBTRACT 0x84E7 #define GL_CONSTANT 0x8576 #define GL_PRIMARY_COLOR 0x8577 #define GL_PREVIOUS 0x8578 #define GL_DOT3_RGB 0x86AE #define GL_DOT3_RGBA 0x86AF typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, void *img); typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture); typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v); typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m); typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m); typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m); typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glActiveTexture (GLenum texture); GLAPI void APIENTRY glSampleCoverage (GLfloat value, GLboolean invert); GLAPI void APIENTRY glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); GLAPI void APIENTRY glGetCompressedTexImage (GLenum target, GLint level, void *img); GLAPI void APIENTRY glClientActiveTexture (GLenum texture); GLAPI void APIENTRY glMultiTexCoord1d (GLenum target, GLdouble s); GLAPI void APIENTRY glMultiTexCoord1dv (GLenum target, const GLdouble *v); GLAPI void APIENTRY glMultiTexCoord1f (GLenum target, GLfloat s); GLAPI void APIENTRY glMultiTexCoord1fv (GLenum target, const GLfloat *v); GLAPI void APIENTRY glMultiTexCoord1i (GLenum target, GLint s); GLAPI void APIENTRY glMultiTexCoord1iv (GLenum target, const GLint *v); GLAPI void APIENTRY glMultiTexCoord1s (GLenum target, GLshort s); GLAPI void APIENTRY glMultiTexCoord1sv (GLenum target, const GLshort *v); GLAPI void APIENTRY glMultiTexCoord2d (GLenum target, GLdouble s, GLdouble t); GLAPI void APIENTRY glMultiTexCoord2dv (GLenum target, const GLdouble *v); GLAPI void APIENTRY glMultiTexCoord2f (GLenum target, GLfloat s, GLfloat t); GLAPI void APIENTRY glMultiTexCoord2fv (GLenum target, const GLfloat *v); GLAPI void APIENTRY glMultiTexCoord2i (GLenum target, GLint s, GLint t); GLAPI void APIENTRY glMultiTexCoord2iv (GLenum target, const GLint *v); GLAPI void APIENTRY glMultiTexCoord2s (GLenum target, GLshort s, GLshort t); GLAPI void APIENTRY glMultiTexCoord2sv (GLenum target, const GLshort *v); GLAPI void APIENTRY glMultiTexCoord3d (GLenum target, GLdouble s, GLdouble t, GLdouble r); GLAPI void APIENTRY glMultiTexCoord3dv (GLenum target, const GLdouble *v); GLAPI void APIENTRY glMultiTexCoord3f (GLenum target, GLfloat s, GLfloat t, GLfloat r); GLAPI void APIENTRY glMultiTexCoord3fv (GLenum target, const GLfloat *v); GLAPI void APIENTRY glMultiTexCoord3i (GLenum target, GLint s, GLint t, GLint r); GLAPI void APIENTRY glMultiTexCoord3iv (GLenum target, const GLint *v); GLAPI void APIENTRY glMultiTexCoord3s (GLenum target, GLshort s, GLshort t, GLshort r); GLAPI void APIENTRY glMultiTexCoord3sv (GLenum target, const GLshort *v); GLAPI void APIENTRY glMultiTexCoord4d (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); GLAPI void APIENTRY glMultiTexCoord4dv (GLenum target, const GLdouble *v); GLAPI void APIENTRY glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); GLAPI void APIENTRY glMultiTexCoord4fv (GLenum target, const GLfloat *v); GLAPI void APIENTRY glMultiTexCoord4i (GLenum target, GLint s, GLint t, GLint r, GLint q); GLAPI void APIENTRY glMultiTexCoord4iv (GLenum target, const GLint *v); GLAPI void APIENTRY glMultiTexCoord4s (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); GLAPI void APIENTRY glMultiTexCoord4sv (GLenum target, const GLshort *v); GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *m); GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *m); GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *m); GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *m); #endif #endif /* GL_VERSION_1_3 */ #ifndef GL_VERSION_1_4 #define GL_VERSION_1_4 1 #define GL_BLEND_DST_RGB 0x80C8 #define GL_BLEND_SRC_RGB 0x80C9 #define GL_BLEND_DST_ALPHA 0x80CA #define GL_BLEND_SRC_ALPHA 0x80CB #define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 #define GL_DEPTH_COMPONENT16 0x81A5 #define GL_DEPTH_COMPONENT24 0x81A6 #define GL_DEPTH_COMPONENT32 0x81A7 #define GL_MIRRORED_REPEAT 0x8370 #define GL_MAX_TEXTURE_LOD_BIAS 0x84FD #define GL_TEXTURE_LOD_BIAS 0x8501 #define GL_INCR_WRAP 0x8507 #define GL_DECR_WRAP 0x8508 #define GL_TEXTURE_DEPTH_SIZE 0x884A #define GL_TEXTURE_COMPARE_MODE 0x884C #define GL_TEXTURE_COMPARE_FUNC 0x884D #define GL_POINT_SIZE_MIN 0x8126 #define GL_POINT_SIZE_MAX 0x8127 #define GL_POINT_DISTANCE_ATTENUATION 0x8129 #define GL_GENERATE_MIPMAP 0x8191 #define GL_GENERATE_MIPMAP_HINT 0x8192 #define GL_FOG_COORDINATE_SOURCE 0x8450 #define GL_FOG_COORDINATE 0x8451 #define GL_FRAGMENT_DEPTH 0x8452 #define GL_CURRENT_FOG_COORDINATE 0x8453 #define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 #define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 #define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 #define GL_FOG_COORDINATE_ARRAY 0x8457 #define GL_COLOR_SUM 0x8458 #define GL_CURRENT_SECONDARY_COLOR 0x8459 #define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A #define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B #define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C #define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D #define GL_SECONDARY_COLOR_ARRAY 0x845E #define GL_TEXTURE_FILTER_CONTROL 0x8500 #define GL_DEPTH_TEXTURE_MODE 0x884B #define GL_COMPARE_R_TO_TEXTURE 0x884E #define GL_BLEND_COLOR 0x8005 #define GL_BLEND_EQUATION 0x8009 #define GL_CONSTANT_COLOR 0x8001 #define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 #define GL_CONSTANT_ALPHA 0x8003 #define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 #define GL_FUNC_ADD 0x8006 #define GL_FUNC_REVERSE_SUBTRACT 0x800B #define GL_FUNC_SUBTRACT 0x800A #define GL_MIN 0x8007 #define GL_MAX 0x8008 typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param); typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord); typedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord); typedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord); typedef void (APIENTRYP PFNGLFOGCOORDDVPROC) (const GLdouble *coord); typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const void *pointer); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v); typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); typedef void (APIENTRYP PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y); typedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLWINDOWPOS2IPROC) (GLint x, GLint y); typedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC) (const GLint *v); typedef void (APIENTRYP PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y); typedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC) (const GLshort *v); typedef void (APIENTRYP PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z); typedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC) (const GLint *v); typedef void (APIENTRYP PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z); typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC) (const GLshort *v); typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); GLAPI void APIENTRY glMultiDrawArrays (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); GLAPI void APIENTRY glMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); GLAPI void APIENTRY glPointParameterf (GLenum pname, GLfloat param); GLAPI void APIENTRY glPointParameterfv (GLenum pname, const GLfloat *params); GLAPI void APIENTRY glPointParameteri (GLenum pname, GLint param); GLAPI void APIENTRY glPointParameteriv (GLenum pname, const GLint *params); GLAPI void APIENTRY glFogCoordf (GLfloat coord); GLAPI void APIENTRY glFogCoordfv (const GLfloat *coord); GLAPI void APIENTRY glFogCoordd (GLdouble coord); GLAPI void APIENTRY glFogCoorddv (const GLdouble *coord); GLAPI void APIENTRY glFogCoordPointer (GLenum type, GLsizei stride, const void *pointer); GLAPI void APIENTRY glSecondaryColor3b (GLbyte red, GLbyte green, GLbyte blue); GLAPI void APIENTRY glSecondaryColor3bv (const GLbyte *v); GLAPI void APIENTRY glSecondaryColor3d (GLdouble red, GLdouble green, GLdouble blue); GLAPI void APIENTRY glSecondaryColor3dv (const GLdouble *v); GLAPI void APIENTRY glSecondaryColor3f (GLfloat red, GLfloat green, GLfloat blue); GLAPI void APIENTRY glSecondaryColor3fv (const GLfloat *v); GLAPI void APIENTRY glSecondaryColor3i (GLint red, GLint green, GLint blue); GLAPI void APIENTRY glSecondaryColor3iv (const GLint *v); GLAPI void APIENTRY glSecondaryColor3s (GLshort red, GLshort green, GLshort blue); GLAPI void APIENTRY glSecondaryColor3sv (const GLshort *v); GLAPI void APIENTRY glSecondaryColor3ub (GLubyte red, GLubyte green, GLubyte blue); GLAPI void APIENTRY glSecondaryColor3ubv (const GLubyte *v); GLAPI void APIENTRY glSecondaryColor3ui (GLuint red, GLuint green, GLuint blue); GLAPI void APIENTRY glSecondaryColor3uiv (const GLuint *v); GLAPI void APIENTRY glSecondaryColor3us (GLushort red, GLushort green, GLushort blue); GLAPI void APIENTRY glSecondaryColor3usv (const GLushort *v); GLAPI void APIENTRY glSecondaryColorPointer (GLint size, GLenum type, GLsizei stride, const void *pointer); GLAPI void APIENTRY glWindowPos2d (GLdouble x, GLdouble y); GLAPI void APIENTRY glWindowPos2dv (const GLdouble *v); GLAPI void APIENTRY glWindowPos2f (GLfloat x, GLfloat y); GLAPI void APIENTRY glWindowPos2fv (const GLfloat *v); GLAPI void APIENTRY glWindowPos2i (GLint x, GLint y); GLAPI void APIENTRY glWindowPos2iv (const GLint *v); GLAPI void APIENTRY glWindowPos2s (GLshort x, GLshort y); GLAPI void APIENTRY glWindowPos2sv (const GLshort *v); GLAPI void APIENTRY glWindowPos3d (GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glWindowPos3dv (const GLdouble *v); GLAPI void APIENTRY glWindowPos3f (GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glWindowPos3fv (const GLfloat *v); GLAPI void APIENTRY glWindowPos3i (GLint x, GLint y, GLint z); GLAPI void APIENTRY glWindowPos3iv (const GLint *v); GLAPI void APIENTRY glWindowPos3s (GLshort x, GLshort y, GLshort z); GLAPI void APIENTRY glWindowPos3sv (const GLshort *v); GLAPI void APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); GLAPI void APIENTRY glBlendEquation (GLenum mode); #endif #endif /* GL_VERSION_1_4 */ #ifndef GL_VERSION_1_5 #define GL_VERSION_1_5 1 typedef khronos_ssize_t GLsizeiptr; typedef khronos_intptr_t GLintptr; #define GL_BUFFER_SIZE 0x8764 #define GL_BUFFER_USAGE 0x8765 #define GL_QUERY_COUNTER_BITS 0x8864 #define GL_CURRENT_QUERY 0x8865 #define GL_QUERY_RESULT 0x8866 #define GL_QUERY_RESULT_AVAILABLE 0x8867 #define GL_ARRAY_BUFFER 0x8892 #define GL_ELEMENT_ARRAY_BUFFER 0x8893 #define GL_ARRAY_BUFFER_BINDING 0x8894 #define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 #define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F #define GL_READ_ONLY 0x88B8 #define GL_WRITE_ONLY 0x88B9 #define GL_READ_WRITE 0x88BA #define GL_BUFFER_ACCESS 0x88BB #define GL_BUFFER_MAPPED 0x88BC #define GL_BUFFER_MAP_POINTER 0x88BD #define GL_STREAM_DRAW 0x88E0 #define GL_STREAM_READ 0x88E1 #define GL_STREAM_COPY 0x88E2 #define GL_STATIC_DRAW 0x88E4 #define GL_STATIC_READ 0x88E5 #define GL_STATIC_COPY 0x88E6 #define GL_DYNAMIC_DRAW 0x88E8 #define GL_DYNAMIC_READ 0x88E9 #define GL_DYNAMIC_COPY 0x88EA #define GL_SAMPLES_PASSED 0x8914 #define GL_SRC1_ALPHA 0x8589 #define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 #define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 #define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 #define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 #define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A #define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B #define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C #define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D #define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E #define GL_FOG_COORD_SRC 0x8450 #define GL_FOG_COORD 0x8451 #define GL_CURRENT_FOG_COORD 0x8453 #define GL_FOG_COORD_ARRAY_TYPE 0x8454 #define GL_FOG_COORD_ARRAY_STRIDE 0x8455 #define GL_FOG_COORD_ARRAY_POINTER 0x8456 #define GL_FOG_COORD_ARRAY 0x8457 #define GL_FOG_COORD_ARRAY_BUFFER_BINDING 0x889D #define GL_SRC0_RGB 0x8580 #define GL_SRC1_RGB 0x8581 #define GL_SRC2_RGB 0x8582 #define GL_SRC0_ALPHA 0x8588 #define GL_SRC2_ALPHA 0x858A typedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids); typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids); typedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id); typedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id); typedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target); typedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers); typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer); typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const void *data, GLenum usage); typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, void *data); typedef void *(APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access); typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target); typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, void **params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGenQueries (GLsizei n, GLuint *ids); GLAPI void APIENTRY glDeleteQueries (GLsizei n, const GLuint *ids); GLAPI GLboolean APIENTRY glIsQuery (GLuint id); GLAPI void APIENTRY glBeginQuery (GLenum target, GLuint id); GLAPI void APIENTRY glEndQuery (GLenum target); GLAPI void APIENTRY glGetQueryiv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetQueryObjectiv (GLuint id, GLenum pname, GLint *params); GLAPI void APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params); GLAPI void APIENTRY glBindBuffer (GLenum target, GLuint buffer); GLAPI void APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers); GLAPI void APIENTRY glGenBuffers (GLsizei n, GLuint *buffers); GLAPI GLboolean APIENTRY glIsBuffer (GLuint buffer); GLAPI void APIENTRY glBufferData (GLenum target, GLsizeiptr size, const void *data, GLenum usage); GLAPI void APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); GLAPI void APIENTRY glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, void *data); GLAPI void *APIENTRY glMapBuffer (GLenum target, GLenum access); GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum target); GLAPI void APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, void **params); #endif #endif /* GL_VERSION_1_5 */ #ifndef GL_VERSION_2_0 #define GL_VERSION_2_0 1 typedef char GLchar; #define GL_BLEND_EQUATION_RGB 0x8009 #define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 #define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 #define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 #define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 #define GL_CURRENT_VERTEX_ATTRIB 0x8626 #define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 #define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 #define GL_STENCIL_BACK_FUNC 0x8800 #define GL_STENCIL_BACK_FAIL 0x8801 #define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 #define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 #define GL_MAX_DRAW_BUFFERS 0x8824 #define GL_DRAW_BUFFER0 0x8825 #define GL_DRAW_BUFFER1 0x8826 #define GL_DRAW_BUFFER2 0x8827 #define GL_DRAW_BUFFER3 0x8828 #define GL_DRAW_BUFFER4 0x8829 #define GL_DRAW_BUFFER5 0x882A #define GL_DRAW_BUFFER6 0x882B #define GL_DRAW_BUFFER7 0x882C #define GL_DRAW_BUFFER8 0x882D #define GL_DRAW_BUFFER9 0x882E #define GL_DRAW_BUFFER10 0x882F #define GL_DRAW_BUFFER11 0x8830 #define GL_DRAW_BUFFER12 0x8831 #define GL_DRAW_BUFFER13 0x8832 #define GL_DRAW_BUFFER14 0x8833 #define GL_DRAW_BUFFER15 0x8834 #define GL_BLEND_EQUATION_ALPHA 0x883D #define GL_MAX_VERTEX_ATTRIBS 0x8869 #define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A #define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 #define GL_FRAGMENT_SHADER 0x8B30 #define GL_VERTEX_SHADER 0x8B31 #define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 #define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A #define GL_MAX_VARYING_FLOATS 0x8B4B #define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C #define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D #define GL_SHADER_TYPE 0x8B4F #define GL_FLOAT_VEC2 0x8B50 #define GL_FLOAT_VEC3 0x8B51 #define GL_FLOAT_VEC4 0x8B52 #define GL_INT_VEC2 0x8B53 #define GL_INT_VEC3 0x8B54 #define GL_INT_VEC4 0x8B55 #define GL_BOOL 0x8B56 #define GL_BOOL_VEC2 0x8B57 #define GL_BOOL_VEC3 0x8B58 #define GL_BOOL_VEC4 0x8B59 #define GL_FLOAT_MAT2 0x8B5A #define GL_FLOAT_MAT3 0x8B5B #define GL_FLOAT_MAT4 0x8B5C #define GL_SAMPLER_1D 0x8B5D #define GL_SAMPLER_2D 0x8B5E #define GL_SAMPLER_3D 0x8B5F #define GL_SAMPLER_CUBE 0x8B60 #define GL_SAMPLER_1D_SHADOW 0x8B61 #define GL_SAMPLER_2D_SHADOW 0x8B62 #define GL_DELETE_STATUS 0x8B80 #define GL_COMPILE_STATUS 0x8B81 #define GL_LINK_STATUS 0x8B82 #define GL_VALIDATE_STATUS 0x8B83 #define GL_INFO_LOG_LENGTH 0x8B84 #define GL_ATTACHED_SHADERS 0x8B85 #define GL_ACTIVE_UNIFORMS 0x8B86 #define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 #define GL_SHADER_SOURCE_LENGTH 0x8B88 #define GL_ACTIVE_ATTRIBUTES 0x8B89 #define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A #define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B #define GL_SHADING_LANGUAGE_VERSION 0x8B8C #define GL_CURRENT_PROGRAM 0x8B8D #define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 #define GL_LOWER_LEFT 0x8CA1 #define GL_UPPER_LEFT 0x8CA2 #define GL_STENCIL_BACK_REF 0x8CA3 #define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 #define GL_STENCIL_BACK_WRITEMASK 0x8CA5 #define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 #define GL_POINT_SPRITE 0x8861 #define GL_COORD_REPLACE 0x8862 #define GL_MAX_TEXTURE_COORDS 0x8871 typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs); typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask); typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name); typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader); typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void); typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type); typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program); typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader); typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name); typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name); typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params); typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, void **pointer); typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program); typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader); typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program); typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program); typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0); typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program); typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); GLAPI void APIENTRY glDrawBuffers (GLsizei n, const GLenum *bufs); GLAPI void APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); GLAPI void APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); GLAPI void APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); GLAPI void APIENTRY glAttachShader (GLuint program, GLuint shader); GLAPI void APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name); GLAPI void APIENTRY glCompileShader (GLuint shader); GLAPI GLuint APIENTRY glCreateProgram (void); GLAPI GLuint APIENTRY glCreateShader (GLenum type); GLAPI void APIENTRY glDeleteProgram (GLuint program); GLAPI void APIENTRY glDeleteShader (GLuint shader); GLAPI void APIENTRY glDetachShader (GLuint program, GLuint shader); GLAPI void APIENTRY glDisableVertexAttribArray (GLuint index); GLAPI void APIENTRY glEnableVertexAttribArray (GLuint index); GLAPI void APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); GLAPI void APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); GLAPI void APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); GLAPI GLint APIENTRY glGetAttribLocation (GLuint program, const GLchar *name); GLAPI void APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params); GLAPI void APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); GLAPI void APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params); GLAPI void APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); GLAPI void APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); GLAPI GLint APIENTRY glGetUniformLocation (GLuint program, const GLchar *name); GLAPI void APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params); GLAPI void APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params); GLAPI void APIENTRY glGetVertexAttribdv (GLuint index, GLenum pname, GLdouble *params); GLAPI void APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params); GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, void **pointer); GLAPI GLboolean APIENTRY glIsProgram (GLuint program); GLAPI GLboolean APIENTRY glIsShader (GLuint shader); GLAPI void APIENTRY glLinkProgram (GLuint program); GLAPI void APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); GLAPI void APIENTRY glUseProgram (GLuint program); GLAPI void APIENTRY glUniform1f (GLint location, GLfloat v0); GLAPI void APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1); GLAPI void APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); GLAPI void APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); GLAPI void APIENTRY glUniform1i (GLint location, GLint v0); GLAPI void APIENTRY glUniform2i (GLint location, GLint v0, GLint v1); GLAPI void APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2); GLAPI void APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); GLAPI void APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glValidateProgram (GLuint program); GLAPI void APIENTRY glVertexAttrib1d (GLuint index, GLdouble x); GLAPI void APIENTRY glVertexAttrib1dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib1f (GLuint index, GLfloat x); GLAPI void APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib1s (GLuint index, GLshort x); GLAPI void APIENTRY glVertexAttrib1sv (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib2d (GLuint index, GLdouble x, GLdouble y); GLAPI void APIENTRY glVertexAttrib2dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y); GLAPI void APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib2s (GLuint index, GLshort x, GLshort y); GLAPI void APIENTRY glVertexAttrib2sv (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glVertexAttrib3dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z); GLAPI void APIENTRY glVertexAttrib3sv (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint index, const GLbyte *v); GLAPI void APIENTRY glVertexAttrib4Niv (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint index, const GLubyte *v); GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint index, const GLushort *v); GLAPI void APIENTRY glVertexAttrib4bv (GLuint index, const GLbyte *v); GLAPI void APIENTRY glVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glVertexAttrib4dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib4iv (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); GLAPI void APIENTRY glVertexAttrib4sv (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib4ubv (GLuint index, const GLubyte *v); GLAPI void APIENTRY glVertexAttrib4uiv (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttrib4usv (GLuint index, const GLushort *v); GLAPI void APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); #endif #endif /* GL_VERSION_2_0 */ #ifndef GL_VERSION_2_1 #define GL_VERSION_2_1 1 #define GL_PIXEL_PACK_BUFFER 0x88EB #define GL_PIXEL_UNPACK_BUFFER 0x88EC #define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED #define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF #define GL_FLOAT_MAT2x3 0x8B65 #define GL_FLOAT_MAT2x4 0x8B66 #define GL_FLOAT_MAT3x2 0x8B67 #define GL_FLOAT_MAT3x4 0x8B68 #define GL_FLOAT_MAT4x2 0x8B69 #define GL_FLOAT_MAT4x3 0x8B6A #define GL_SRGB 0x8C40 #define GL_SRGB8 0x8C41 #define GL_SRGB_ALPHA 0x8C42 #define GL_SRGB8_ALPHA8 0x8C43 #define GL_COMPRESSED_SRGB 0x8C48 #define GL_COMPRESSED_SRGB_ALPHA 0x8C49 #define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F #define GL_SLUMINANCE_ALPHA 0x8C44 #define GL_SLUMINANCE8_ALPHA8 0x8C45 #define GL_SLUMINANCE 0x8C46 #define GL_SLUMINANCE8 0x8C47 #define GL_COMPRESSED_SLUMINANCE 0x8C4A #define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); #endif #endif /* GL_VERSION_2_1 */ #ifndef GL_VERSION_3_0 #define GL_VERSION_3_0 1 typedef khronos_uint16_t GLhalf; #define GL_COMPARE_REF_TO_TEXTURE 0x884E #define GL_CLIP_DISTANCE0 0x3000 #define GL_CLIP_DISTANCE1 0x3001 #define GL_CLIP_DISTANCE2 0x3002 #define GL_CLIP_DISTANCE3 0x3003 #define GL_CLIP_DISTANCE4 0x3004 #define GL_CLIP_DISTANCE5 0x3005 #define GL_CLIP_DISTANCE6 0x3006 #define GL_CLIP_DISTANCE7 0x3007 #define GL_MAX_CLIP_DISTANCES 0x0D32 #define GL_MAJOR_VERSION 0x821B #define GL_MINOR_VERSION 0x821C #define GL_NUM_EXTENSIONS 0x821D #define GL_CONTEXT_FLAGS 0x821E #define GL_COMPRESSED_RED 0x8225 #define GL_COMPRESSED_RG 0x8226 #define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001 #define GL_RGBA32F 0x8814 #define GL_RGB32F 0x8815 #define GL_RGBA16F 0x881A #define GL_RGB16F 0x881B #define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD #define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF #define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 #define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 #define GL_CLAMP_READ_COLOR 0x891C #define GL_FIXED_ONLY 0x891D #define GL_MAX_VARYING_COMPONENTS 0x8B4B #define GL_TEXTURE_1D_ARRAY 0x8C18 #define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 #define GL_TEXTURE_2D_ARRAY 0x8C1A #define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B #define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C #define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D #define GL_R11F_G11F_B10F 0x8C3A #define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B #define GL_RGB9_E5 0x8C3D #define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E #define GL_TEXTURE_SHARED_SIZE 0x8C3F #define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 #define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 #define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 #define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 #define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 #define GL_PRIMITIVES_GENERATED 0x8C87 #define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 #define GL_RASTERIZER_DISCARD 0x8C89 #define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B #define GL_INTERLEAVED_ATTRIBS 0x8C8C #define GL_SEPARATE_ATTRIBS 0x8C8D #define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E #define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F #define GL_RGBA32UI 0x8D70 #define GL_RGB32UI 0x8D71 #define GL_RGBA16UI 0x8D76 #define GL_RGB16UI 0x8D77 #define GL_RGBA8UI 0x8D7C #define GL_RGB8UI 0x8D7D #define GL_RGBA32I 0x8D82 #define GL_RGB32I 0x8D83 #define GL_RGBA16I 0x8D88 #define GL_RGB16I 0x8D89 #define GL_RGBA8I 0x8D8E #define GL_RGB8I 0x8D8F #define GL_RED_INTEGER 0x8D94 #define GL_GREEN_INTEGER 0x8D95 #define GL_BLUE_INTEGER 0x8D96 #define GL_RGB_INTEGER 0x8D98 #define GL_RGBA_INTEGER 0x8D99 #define GL_BGR_INTEGER 0x8D9A #define GL_BGRA_INTEGER 0x8D9B #define GL_SAMPLER_1D_ARRAY 0x8DC0 #define GL_SAMPLER_2D_ARRAY 0x8DC1 #define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 #define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 #define GL_SAMPLER_CUBE_SHADOW 0x8DC5 #define GL_UNSIGNED_INT_VEC2 0x8DC6 #define GL_UNSIGNED_INT_VEC3 0x8DC7 #define GL_UNSIGNED_INT_VEC4 0x8DC8 #define GL_INT_SAMPLER_1D 0x8DC9 #define GL_INT_SAMPLER_2D 0x8DCA #define GL_INT_SAMPLER_3D 0x8DCB #define GL_INT_SAMPLER_CUBE 0x8DCC #define GL_INT_SAMPLER_1D_ARRAY 0x8DCE #define GL_INT_SAMPLER_2D_ARRAY 0x8DCF #define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 #define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 #define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 #define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 #define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 #define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 #define GL_QUERY_WAIT 0x8E13 #define GL_QUERY_NO_WAIT 0x8E14 #define GL_QUERY_BY_REGION_WAIT 0x8E15 #define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 #define GL_BUFFER_ACCESS_FLAGS 0x911F #define GL_BUFFER_MAP_LENGTH 0x9120 #define GL_BUFFER_MAP_OFFSET 0x9121 #define GL_DEPTH_COMPONENT32F 0x8CAC #define GL_DEPTH32F_STENCIL8 0x8CAD #define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD #define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 #define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 #define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 #define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 #define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 #define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 #define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 #define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 #define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 #define GL_FRAMEBUFFER_DEFAULT 0x8218 #define GL_FRAMEBUFFER_UNDEFINED 0x8219 #define GL_DEPTH_STENCIL_ATTACHMENT 0x821A #define GL_MAX_RENDERBUFFER_SIZE 0x84E8 #define GL_DEPTH_STENCIL 0x84F9 #define GL_UNSIGNED_INT_24_8 0x84FA #define GL_DEPTH24_STENCIL8 0x88F0 #define GL_TEXTURE_STENCIL_SIZE 0x88F1 #define GL_TEXTURE_RED_TYPE 0x8C10 #define GL_TEXTURE_GREEN_TYPE 0x8C11 #define GL_TEXTURE_BLUE_TYPE 0x8C12 #define GL_TEXTURE_ALPHA_TYPE 0x8C13 #define GL_TEXTURE_DEPTH_TYPE 0x8C16 #define GL_UNSIGNED_NORMALIZED 0x8C17 #define GL_FRAMEBUFFER_BINDING 0x8CA6 #define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 #define GL_RENDERBUFFER_BINDING 0x8CA7 #define GL_READ_FRAMEBUFFER 0x8CA8 #define GL_DRAW_FRAMEBUFFER 0x8CA9 #define GL_READ_FRAMEBUFFER_BINDING 0x8CAA #define GL_RENDERBUFFER_SAMPLES 0x8CAB #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 #define GL_FRAMEBUFFER_COMPLETE 0x8CD5 #define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 #define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 #define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB #define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC #define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD #define GL_MAX_COLOR_ATTACHMENTS 0x8CDF #define GL_COLOR_ATTACHMENT0 0x8CE0 #define GL_COLOR_ATTACHMENT1 0x8CE1 #define GL_COLOR_ATTACHMENT2 0x8CE2 #define GL_COLOR_ATTACHMENT3 0x8CE3 #define GL_COLOR_ATTACHMENT4 0x8CE4 #define GL_COLOR_ATTACHMENT5 0x8CE5 #define GL_COLOR_ATTACHMENT6 0x8CE6 #define GL_COLOR_ATTACHMENT7 0x8CE7 #define GL_COLOR_ATTACHMENT8 0x8CE8 #define GL_COLOR_ATTACHMENT9 0x8CE9 #define GL_COLOR_ATTACHMENT10 0x8CEA #define GL_COLOR_ATTACHMENT11 0x8CEB #define GL_COLOR_ATTACHMENT12 0x8CEC #define GL_COLOR_ATTACHMENT13 0x8CED #define GL_COLOR_ATTACHMENT14 0x8CEE #define GL_COLOR_ATTACHMENT15 0x8CEF #define GL_COLOR_ATTACHMENT16 0x8CF0 #define GL_COLOR_ATTACHMENT17 0x8CF1 #define GL_COLOR_ATTACHMENT18 0x8CF2 #define GL_COLOR_ATTACHMENT19 0x8CF3 #define GL_COLOR_ATTACHMENT20 0x8CF4 #define GL_COLOR_ATTACHMENT21 0x8CF5 #define GL_COLOR_ATTACHMENT22 0x8CF6 #define GL_COLOR_ATTACHMENT23 0x8CF7 #define GL_COLOR_ATTACHMENT24 0x8CF8 #define GL_COLOR_ATTACHMENT25 0x8CF9 #define GL_COLOR_ATTACHMENT26 0x8CFA #define GL_COLOR_ATTACHMENT27 0x8CFB #define GL_COLOR_ATTACHMENT28 0x8CFC #define GL_COLOR_ATTACHMENT29 0x8CFD #define GL_COLOR_ATTACHMENT30 0x8CFE #define GL_COLOR_ATTACHMENT31 0x8CFF #define GL_DEPTH_ATTACHMENT 0x8D00 #define GL_STENCIL_ATTACHMENT 0x8D20 #define GL_FRAMEBUFFER 0x8D40 #define GL_RENDERBUFFER 0x8D41 #define GL_RENDERBUFFER_WIDTH 0x8D42 #define GL_RENDERBUFFER_HEIGHT 0x8D43 #define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 #define GL_STENCIL_INDEX1 0x8D46 #define GL_STENCIL_INDEX4 0x8D47 #define GL_STENCIL_INDEX8 0x8D48 #define GL_STENCIL_INDEX16 0x8D49 #define GL_RENDERBUFFER_RED_SIZE 0x8D50 #define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 #define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 #define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 #define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 #define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 #define GL_MAX_SAMPLES 0x8D57 #define GL_INDEX 0x8222 #define GL_TEXTURE_LUMINANCE_TYPE 0x8C14 #define GL_TEXTURE_INTENSITY_TYPE 0x8C15 #define GL_FRAMEBUFFER_SRGB 0x8DB9 #define GL_HALF_FLOAT 0x140B #define GL_MAP_READ_BIT 0x0001 #define GL_MAP_WRITE_BIT 0x0002 #define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 #define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 #define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 #define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 #define GL_COMPRESSED_RED_RGTC1 0x8DBB #define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC #define GL_COMPRESSED_RG_RGTC2 0x8DBD #define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE #define GL_RG 0x8227 #define GL_RG_INTEGER 0x8228 #define GL_R8 0x8229 #define GL_R16 0x822A #define GL_RG8 0x822B #define GL_RG16 0x822C #define GL_R16F 0x822D #define GL_R32F 0x822E #define GL_RG16F 0x822F #define GL_RG32F 0x8230 #define GL_R8I 0x8231 #define GL_R8UI 0x8232 #define GL_R16I 0x8233 #define GL_R16UI 0x8234 #define GL_R32I 0x8235 #define GL_R32UI 0x8236 #define GL_RG8I 0x8237 #define GL_RG8UI 0x8238 #define GL_RG16I 0x8239 #define GL_RG16UI 0x823A #define GL_RG32I 0x823B #define GL_RG32UI 0x823C #define GL_VERTEX_ARRAY_BINDING 0x85B5 #define GL_CLAMP_VERTEX_COLOR 0x891A #define GL_CLAMP_FRAGMENT_COLOR 0x891B #define GL_ALPHA_INTEGER 0x8D97 typedef void (APIENTRYP PFNGLCOLORMASKIPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data); typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data); typedef void (APIENTRYP PFNGLENABLEIPROC) (GLenum target, GLuint index); typedef void (APIENTRYP PFNGLDISABLEIPROC) (GLenum target, GLuint index); typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC) (GLenum target, GLuint index); typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode); typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC) (void); typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer); typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); typedef void (APIENTRYP PFNGLCLAMPCOLORPROC) (GLenum target, GLenum clamp); typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC) (GLuint id, GLenum mode); typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC) (void); typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC) (GLuint index, GLint x); typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC) (GLuint index, GLint x, GLint y); typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC) (GLuint index, GLint x, GLint y, GLint z); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC) (GLuint index, GLuint x); typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC) (GLuint index, GLuint x, GLuint y); typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC) (GLuint index, const GLbyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC) (GLuint index, const GLubyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC) (GLuint index, const GLushort *v); typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint *params); typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC) (GLuint program, GLuint color, const GLchar *name); typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar *name); typedef void (APIENTRYP PFNGLUNIFORM1UIPROC) (GLint location, GLuint v0); typedef void (APIENTRYP PFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1); typedef void (APIENTRYP PFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); typedef void (APIENTRYP PFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, const GLuint *params); typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint *value); typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint *value); typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat *value); typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index); typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer); typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer); typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers); typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers); typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer); typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer); typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers); typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers); typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target); typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); typedef void *(APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length); typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array); typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays); typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays); typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glColorMaski (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); GLAPI void APIENTRY glGetBooleani_v (GLenum target, GLuint index, GLboolean *data); GLAPI void APIENTRY glGetIntegeri_v (GLenum target, GLuint index, GLint *data); GLAPI void APIENTRY glEnablei (GLenum target, GLuint index); GLAPI void APIENTRY glDisablei (GLenum target, GLuint index); GLAPI GLboolean APIENTRY glIsEnabledi (GLenum target, GLuint index); GLAPI void APIENTRY glBeginTransformFeedback (GLenum primitiveMode); GLAPI void APIENTRY glEndTransformFeedback (void); GLAPI void APIENTRY glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); GLAPI void APIENTRY glBindBufferBase (GLenum target, GLuint index, GLuint buffer); GLAPI void APIENTRY glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); GLAPI void APIENTRY glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); GLAPI void APIENTRY glClampColor (GLenum target, GLenum clamp); GLAPI void APIENTRY glBeginConditionalRender (GLuint id, GLenum mode); GLAPI void APIENTRY glEndConditionalRender (void); GLAPI void APIENTRY glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); GLAPI void APIENTRY glGetVertexAttribIiv (GLuint index, GLenum pname, GLint *params); GLAPI void APIENTRY glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint *params); GLAPI void APIENTRY glVertexAttribI1i (GLuint index, GLint x); GLAPI void APIENTRY glVertexAttribI2i (GLuint index, GLint x, GLint y); GLAPI void APIENTRY glVertexAttribI3i (GLuint index, GLint x, GLint y, GLint z); GLAPI void APIENTRY glVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w); GLAPI void APIENTRY glVertexAttribI1ui (GLuint index, GLuint x); GLAPI void APIENTRY glVertexAttribI2ui (GLuint index, GLuint x, GLuint y); GLAPI void APIENTRY glVertexAttribI3ui (GLuint index, GLuint x, GLuint y, GLuint z); GLAPI void APIENTRY glVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); GLAPI void APIENTRY glVertexAttribI1iv (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttribI2iv (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttribI3iv (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttribI4iv (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttribI1uiv (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttribI2uiv (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttribI3uiv (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttribI4uiv (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttribI4bv (GLuint index, const GLbyte *v); GLAPI void APIENTRY glVertexAttribI4sv (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttribI4ubv (GLuint index, const GLubyte *v); GLAPI void APIENTRY glVertexAttribI4usv (GLuint index, const GLushort *v); GLAPI void APIENTRY glGetUniformuiv (GLuint program, GLint location, GLuint *params); GLAPI void APIENTRY glBindFragDataLocation (GLuint program, GLuint color, const GLchar *name); GLAPI GLint APIENTRY glGetFragDataLocation (GLuint program, const GLchar *name); GLAPI void APIENTRY glUniform1ui (GLint location, GLuint v0); GLAPI void APIENTRY glUniform2ui (GLint location, GLuint v0, GLuint v1); GLAPI void APIENTRY glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2); GLAPI void APIENTRY glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); GLAPI void APIENTRY glUniform1uiv (GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glUniform2uiv (GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glUniform3uiv (GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glUniform4uiv (GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glTexParameterIiv (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glTexParameterIuiv (GLenum target, GLenum pname, const GLuint *params); GLAPI void APIENTRY glGetTexParameterIiv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetTexParameterIuiv (GLenum target, GLenum pname, GLuint *params); GLAPI void APIENTRY glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value); GLAPI void APIENTRY glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value); GLAPI void APIENTRY glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value); GLAPI void APIENTRY glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); GLAPI const GLubyte *APIENTRY glGetStringi (GLenum name, GLuint index); GLAPI GLboolean APIENTRY glIsRenderbuffer (GLuint renderbuffer); GLAPI void APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); GLAPI void APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers); GLAPI void APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers); GLAPI void APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params); GLAPI GLboolean APIENTRY glIsFramebuffer (GLuint framebuffer); GLAPI void APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); GLAPI void APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers); GLAPI void APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers); GLAPI GLenum APIENTRY glCheckFramebufferStatus (GLenum target); GLAPI void APIENTRY glFramebufferTexture1D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLAPI void APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLAPI void APIENTRY glFramebufferTexture3D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); GLAPI void APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); GLAPI void APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params); GLAPI void APIENTRY glGenerateMipmap (GLenum target); GLAPI void APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); GLAPI void APIENTRY glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); GLAPI void *APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); GLAPI void APIENTRY glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length); GLAPI void APIENTRY glBindVertexArray (GLuint array); GLAPI void APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays); GLAPI void APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays); GLAPI GLboolean APIENTRY glIsVertexArray (GLuint array); #endif #endif /* GL_VERSION_3_0 */ #ifndef GL_VERSION_3_1 #define GL_VERSION_3_1 1 #define GL_SAMPLER_2D_RECT 0x8B63 #define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 #define GL_SAMPLER_BUFFER 0x8DC2 #define GL_INT_SAMPLER_2D_RECT 0x8DCD #define GL_INT_SAMPLER_BUFFER 0x8DD0 #define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 #define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 #define GL_TEXTURE_BUFFER 0x8C2A #define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B #define GL_TEXTURE_BINDING_BUFFER 0x8C2C #define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D #define GL_TEXTURE_RECTANGLE 0x84F5 #define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 #define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 #define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 #define GL_R8_SNORM 0x8F94 #define GL_RG8_SNORM 0x8F95 #define GL_RGB8_SNORM 0x8F96 #define GL_RGBA8_SNORM 0x8F97 #define GL_R16_SNORM 0x8F98 #define GL_RG16_SNORM 0x8F99 #define GL_RGB16_SNORM 0x8F9A #define GL_RGBA16_SNORM 0x8F9B #define GL_SIGNED_NORMALIZED 0x8F9C #define GL_PRIMITIVE_RESTART 0x8F9D #define GL_PRIMITIVE_RESTART_INDEX 0x8F9E #define GL_COPY_READ_BUFFER 0x8F36 #define GL_COPY_WRITE_BUFFER 0x8F37 #define GL_UNIFORM_BUFFER 0x8A11 #define GL_UNIFORM_BUFFER_BINDING 0x8A28 #define GL_UNIFORM_BUFFER_START 0x8A29 #define GL_UNIFORM_BUFFER_SIZE 0x8A2A #define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B #define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C #define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D #define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E #define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F #define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 #define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 #define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 #define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 #define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 #define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 #define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 #define GL_UNIFORM_TYPE 0x8A37 #define GL_UNIFORM_SIZE 0x8A38 #define GL_UNIFORM_NAME_LENGTH 0x8A39 #define GL_UNIFORM_BLOCK_INDEX 0x8A3A #define GL_UNIFORM_OFFSET 0x8A3B #define GL_UNIFORM_ARRAY_STRIDE 0x8A3C #define GL_UNIFORM_MATRIX_STRIDE 0x8A3D #define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E #define GL_UNIFORM_BLOCK_BINDING 0x8A3F #define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 #define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 #define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 #define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 #define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 #define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 #define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 #define GL_INVALID_INDEX 0xFFFFFFFFu typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount); typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); typedef void (APIENTRYP PFNGLTEXBUFFERPROC) (GLenum target, GLenum internalformat, GLuint buffer); typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC) (GLuint index); typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC) (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName); typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei instancecount); GLAPI void APIENTRY glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); GLAPI void APIENTRY glTexBuffer (GLenum target, GLenum internalformat, GLuint buffer); GLAPI void APIENTRY glPrimitiveRestartIndex (GLuint index); GLAPI void APIENTRY glCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); GLAPI void APIENTRY glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); GLAPI void APIENTRY glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); GLAPI void APIENTRY glGetActiveUniformName (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); GLAPI GLuint APIENTRY glGetUniformBlockIndex (GLuint program, const GLchar *uniformBlockName); GLAPI void APIENTRY glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); GLAPI void APIENTRY glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); GLAPI void APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); #endif #endif /* GL_VERSION_3_1 */ #ifndef GL_VERSION_3_2 #define GL_VERSION_3_2 1 typedef struct __GLsync *GLsync; typedef khronos_uint64_t GLuint64; typedef khronos_int64_t GLint64; #define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 #define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 #define GL_LINES_ADJACENCY 0x000A #define GL_LINE_STRIP_ADJACENCY 0x000B #define GL_TRIANGLES_ADJACENCY 0x000C #define GL_TRIANGLE_STRIP_ADJACENCY 0x000D #define GL_PROGRAM_POINT_SIZE 0x8642 #define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 #define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 #define GL_GEOMETRY_SHADER 0x8DD9 #define GL_GEOMETRY_VERTICES_OUT 0x8916 #define GL_GEOMETRY_INPUT_TYPE 0x8917 #define GL_GEOMETRY_OUTPUT_TYPE 0x8918 #define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF #define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 #define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 #define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 #define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 #define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 #define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 #define GL_CONTEXT_PROFILE_MASK 0x9126 #define GL_DEPTH_CLAMP 0x864F #define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C #define GL_FIRST_VERTEX_CONVENTION 0x8E4D #define GL_LAST_VERTEX_CONVENTION 0x8E4E #define GL_PROVOKING_VERTEX 0x8E4F #define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F #define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 #define GL_OBJECT_TYPE 0x9112 #define GL_SYNC_CONDITION 0x9113 #define GL_SYNC_STATUS 0x9114 #define GL_SYNC_FLAGS 0x9115 #define GL_SYNC_FENCE 0x9116 #define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 #define GL_UNSIGNALED 0x9118 #define GL_SIGNALED 0x9119 #define GL_ALREADY_SIGNALED 0x911A #define GL_TIMEOUT_EXPIRED 0x911B #define GL_CONDITION_SATISFIED 0x911C #define GL_WAIT_FAILED 0x911D #define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull #define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 #define GL_SAMPLE_POSITION 0x8E50 #define GL_SAMPLE_MASK 0x8E51 #define GL_SAMPLE_MASK_VALUE 0x8E52 #define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 #define GL_TEXTURE_2D_MULTISAMPLE 0x9100 #define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 #define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 #define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 #define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 #define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 #define GL_TEXTURE_SAMPLES 0x9106 #define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 #define GL_SAMPLER_2D_MULTISAMPLE 0x9108 #define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 #define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A #define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B #define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C #define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D #define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E #define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F #define GL_MAX_INTEGER_SAMPLES 0x9110 typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC) (GLenum mode); typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags); typedef GLboolean (APIENTRYP PFNGLISSYNCPROC) (GLsync sync); typedef void (APIENTRYP PFNGLDELETESYNCPROC) (GLsync sync); typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); typedef void (APIENTRYP PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); typedef void (APIENTRYP PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *data); typedef void (APIENTRYP PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei count, GLsizei *length, GLint *values); typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data); typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 *params); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat *val); typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC) (GLuint maskNumber, GLbitfield mask); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); GLAPI void APIENTRY glDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); GLAPI void APIENTRY glDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); GLAPI void APIENTRY glMultiDrawElementsBaseVertex (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); GLAPI void APIENTRY glProvokingVertex (GLenum mode); GLAPI GLsync APIENTRY glFenceSync (GLenum condition, GLbitfield flags); GLAPI GLboolean APIENTRY glIsSync (GLsync sync); GLAPI void APIENTRY glDeleteSync (GLsync sync); GLAPI GLenum APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); GLAPI void APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); GLAPI void APIENTRY glGetInteger64v (GLenum pname, GLint64 *data); GLAPI void APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei count, GLsizei *length, GLint *values); GLAPI void APIENTRY glGetInteger64i_v (GLenum target, GLuint index, GLint64 *data); GLAPI void APIENTRY glGetBufferParameteri64v (GLenum target, GLenum pname, GLint64 *params); GLAPI void APIENTRY glFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level); GLAPI void APIENTRY glTexImage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); GLAPI void APIENTRY glTexImage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); GLAPI void APIENTRY glGetMultisamplefv (GLenum pname, GLuint index, GLfloat *val); GLAPI void APIENTRY glSampleMaski (GLuint maskNumber, GLbitfield mask); #endif #endif /* GL_VERSION_3_2 */ #ifndef GL_VERSION_3_3 #define GL_VERSION_3_3 1 #define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE #define GL_SRC1_COLOR 0x88F9 #define GL_ONE_MINUS_SRC1_COLOR 0x88FA #define GL_ONE_MINUS_SRC1_ALPHA 0x88FB #define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC #define GL_ANY_SAMPLES_PASSED 0x8C2F #define GL_SAMPLER_BINDING 0x8919 #define GL_RGB10_A2UI 0x906F #define GL_TEXTURE_SWIZZLE_R 0x8E42 #define GL_TEXTURE_SWIZZLE_G 0x8E43 #define GL_TEXTURE_SWIZZLE_B 0x8E44 #define GL_TEXTURE_SWIZZLE_A 0x8E45 #define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 #define GL_TIME_ELAPSED 0x88BF #define GL_TIMESTAMP 0x8E28 #define GL_INT_2_10_10_10_REV 0x8D9F typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC) (GLuint program, const GLchar *name); typedef void (APIENTRYP PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint *samplers); typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint *samplers); typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC) (GLuint sampler); typedef void (APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler); typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint *param); typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param); typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, const GLint *param); typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, const GLuint *param); typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC) (GLuint id, GLenum target); typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC) (GLuint id, GLenum pname, GLint64 *params); typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC) (GLuint id, GLenum pname, GLuint64 *params); typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor); typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); typedef void (APIENTRYP PFNGLVERTEXP2UIPROC) (GLenum type, GLuint value); typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC) (GLenum type, const GLuint *value); typedef void (APIENTRYP PFNGLVERTEXP3UIPROC) (GLenum type, GLuint value); typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC) (GLenum type, const GLuint *value); typedef void (APIENTRYP PFNGLVERTEXP4UIPROC) (GLenum type, GLuint value); typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC) (GLenum type, const GLuint *value); typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC) (GLenum type, GLuint coords); typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC) (GLenum type, const GLuint *coords); typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC) (GLenum type, GLuint coords); typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC) (GLenum type, const GLuint *coords); typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC) (GLenum type, GLuint coords); typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC) (GLenum type, const GLuint *coords); typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC) (GLenum type, GLuint coords); typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC) (GLenum type, const GLuint *coords); typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC) (GLenum texture, GLenum type, GLuint coords); typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC) (GLenum texture, GLenum type, GLuint coords); typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC) (GLenum texture, GLenum type, GLuint coords); typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC) (GLenum texture, GLenum type, GLuint coords); typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); typedef void (APIENTRYP PFNGLNORMALP3UIPROC) (GLenum type, GLuint coords); typedef void (APIENTRYP PFNGLNORMALP3UIVPROC) (GLenum type, const GLuint *coords); typedef void (APIENTRYP PFNGLCOLORP3UIPROC) (GLenum type, GLuint color); typedef void (APIENTRYP PFNGLCOLORP3UIVPROC) (GLenum type, const GLuint *color); typedef void (APIENTRYP PFNGLCOLORP4UIPROC) (GLenum type, GLuint color); typedef void (APIENTRYP PFNGLCOLORP4UIVPROC) (GLenum type, const GLuint *color); typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC) (GLenum type, GLuint color); typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC) (GLenum type, const GLuint *color); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBindFragDataLocationIndexed (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); GLAPI GLint APIENTRY glGetFragDataIndex (GLuint program, const GLchar *name); GLAPI void APIENTRY glGenSamplers (GLsizei count, GLuint *samplers); GLAPI void APIENTRY glDeleteSamplers (GLsizei count, const GLuint *samplers); GLAPI GLboolean APIENTRY glIsSampler (GLuint sampler); GLAPI void APIENTRY glBindSampler (GLuint unit, GLuint sampler); GLAPI void APIENTRY glSamplerParameteri (GLuint sampler, GLenum pname, GLint param); GLAPI void APIENTRY glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint *param); GLAPI void APIENTRY glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param); GLAPI void APIENTRY glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat *param); GLAPI void APIENTRY glSamplerParameterIiv (GLuint sampler, GLenum pname, const GLint *param); GLAPI void APIENTRY glSamplerParameterIuiv (GLuint sampler, GLenum pname, const GLuint *param); GLAPI void APIENTRY glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint *params); GLAPI void APIENTRY glGetSamplerParameterIiv (GLuint sampler, GLenum pname, GLint *params); GLAPI void APIENTRY glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetSamplerParameterIuiv (GLuint sampler, GLenum pname, GLuint *params); GLAPI void APIENTRY glQueryCounter (GLuint id, GLenum target); GLAPI void APIENTRY glGetQueryObjecti64v (GLuint id, GLenum pname, GLint64 *params); GLAPI void APIENTRY glGetQueryObjectui64v (GLuint id, GLenum pname, GLuint64 *params); GLAPI void APIENTRY glVertexAttribDivisor (GLuint index, GLuint divisor); GLAPI void APIENTRY glVertexAttribP1ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); GLAPI void APIENTRY glVertexAttribP1uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); GLAPI void APIENTRY glVertexAttribP2ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); GLAPI void APIENTRY glVertexAttribP2uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); GLAPI void APIENTRY glVertexAttribP3ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); GLAPI void APIENTRY glVertexAttribP3uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); GLAPI void APIENTRY glVertexAttribP4ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); GLAPI void APIENTRY glVertexAttribP4uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); GLAPI void APIENTRY glVertexP2ui (GLenum type, GLuint value); GLAPI void APIENTRY glVertexP2uiv (GLenum type, const GLuint *value); GLAPI void APIENTRY glVertexP3ui (GLenum type, GLuint value); GLAPI void APIENTRY glVertexP3uiv (GLenum type, const GLuint *value); GLAPI void APIENTRY glVertexP4ui (GLenum type, GLuint value); GLAPI void APIENTRY glVertexP4uiv (GLenum type, const GLuint *value); GLAPI void APIENTRY glTexCoordP1ui (GLenum type, GLuint coords); GLAPI void APIENTRY glTexCoordP1uiv (GLenum type, const GLuint *coords); GLAPI void APIENTRY glTexCoordP2ui (GLenum type, GLuint coords); GLAPI void APIENTRY glTexCoordP2uiv (GLenum type, const GLuint *coords); GLAPI void APIENTRY glTexCoordP3ui (GLenum type, GLuint coords); GLAPI void APIENTRY glTexCoordP3uiv (GLenum type, const GLuint *coords); GLAPI void APIENTRY glTexCoordP4ui (GLenum type, GLuint coords); GLAPI void APIENTRY glTexCoordP4uiv (GLenum type, const GLuint *coords); GLAPI void APIENTRY glMultiTexCoordP1ui (GLenum texture, GLenum type, GLuint coords); GLAPI void APIENTRY glMultiTexCoordP1uiv (GLenum texture, GLenum type, const GLuint *coords); GLAPI void APIENTRY glMultiTexCoordP2ui (GLenum texture, GLenum type, GLuint coords); GLAPI void APIENTRY glMultiTexCoordP2uiv (GLenum texture, GLenum type, const GLuint *coords); GLAPI void APIENTRY glMultiTexCoordP3ui (GLenum texture, GLenum type, GLuint coords); GLAPI void APIENTRY glMultiTexCoordP3uiv (GLenum texture, GLenum type, const GLuint *coords); GLAPI void APIENTRY glMultiTexCoordP4ui (GLenum texture, GLenum type, GLuint coords); GLAPI void APIENTRY glMultiTexCoordP4uiv (GLenum texture, GLenum type, const GLuint *coords); GLAPI void APIENTRY glNormalP3ui (GLenum type, GLuint coords); GLAPI void APIENTRY glNormalP3uiv (GLenum type, const GLuint *coords); GLAPI void APIENTRY glColorP3ui (GLenum type, GLuint color); GLAPI void APIENTRY glColorP3uiv (GLenum type, const GLuint *color); GLAPI void APIENTRY glColorP4ui (GLenum type, GLuint color); GLAPI void APIENTRY glColorP4uiv (GLenum type, const GLuint *color); GLAPI void APIENTRY glSecondaryColorP3ui (GLenum type, GLuint color); GLAPI void APIENTRY glSecondaryColorP3uiv (GLenum type, const GLuint *color); #endif #endif /* GL_VERSION_3_3 */ #ifndef GL_VERSION_4_0 #define GL_VERSION_4_0 1 #define GL_SAMPLE_SHADING 0x8C36 #define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 #define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E #define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F #define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 #define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A #define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B #define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C #define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D #define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E #define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F #define GL_DRAW_INDIRECT_BUFFER 0x8F3F #define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 #define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F #define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A #define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B #define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C #define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D #define GL_MAX_VERTEX_STREAMS 0x8E71 #define GL_DOUBLE_VEC2 0x8FFC #define GL_DOUBLE_VEC3 0x8FFD #define GL_DOUBLE_VEC4 0x8FFE #define GL_DOUBLE_MAT2 0x8F46 #define GL_DOUBLE_MAT3 0x8F47 #define GL_DOUBLE_MAT4 0x8F48 #define GL_DOUBLE_MAT2x3 0x8F49 #define GL_DOUBLE_MAT2x4 0x8F4A #define GL_DOUBLE_MAT3x2 0x8F4B #define GL_DOUBLE_MAT3x4 0x8F4C #define GL_DOUBLE_MAT4x2 0x8F4D #define GL_DOUBLE_MAT4x3 0x8F4E #define GL_ACTIVE_SUBROUTINES 0x8DE5 #define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 #define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 #define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 #define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 #define GL_MAX_SUBROUTINES 0x8DE7 #define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 #define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A #define GL_COMPATIBLE_SUBROUTINES 0x8E4B #define GL_PATCHES 0x000E #define GL_PATCH_VERTICES 0x8E72 #define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73 #define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74 #define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75 #define GL_TESS_GEN_MODE 0x8E76 #define GL_TESS_GEN_SPACING 0x8E77 #define GL_TESS_GEN_VERTEX_ORDER 0x8E78 #define GL_TESS_GEN_POINT_MODE 0x8E79 #define GL_ISOLINES 0x8E7A #define GL_FRACTIONAL_ODD 0x8E7B #define GL_FRACTIONAL_EVEN 0x8E7C #define GL_MAX_PATCH_VERTICES 0x8E7D #define GL_MAX_TESS_GEN_LEVEL 0x8E7E #define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F #define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80 #define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81 #define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82 #define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83 #define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84 #define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85 #define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86 #define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 #define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A #define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C #define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D #define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E #define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F #define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 #define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 #define GL_TESS_EVALUATION_SHADER 0x8E87 #define GL_TESS_CONTROL_SHADER 0x8E88 #define GL_TRANSFORM_FEEDBACK 0x8E22 #define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23 #define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24 #define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 #define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 typedef void (APIENTRYP PFNGLMINSAMPLESHADINGPROC) (GLfloat value); typedef void (APIENTRYP PFNGLBLENDEQUATIONIPROC) (GLuint buf, GLenum mode); typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); typedef void (APIENTRYP PFNGLBLENDFUNCIPROC) (GLuint buf, GLenum src, GLenum dst); typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); typedef void (APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect); typedef void (APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect); typedef void (APIENTRYP PFNGLUNIFORM1DPROC) (GLint location, GLdouble x); typedef void (APIENTRYP PFNGLUNIFORM2DPROC) (GLint location, GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLUNIFORM3DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLUNIFORM4DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLUNIFORM1DVPROC) (GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORM2DVPROC) (GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORM3DVPROC) (GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORM4DVPROC) (GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLGETUNIFORMDVPROC) (GLuint program, GLint location, GLdouble *params); typedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint program, GLenum shadertype, const GLchar *name); typedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC) (GLuint program, GLenum shadertype, const GLchar *name); typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINENAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); typedef void (APIENTRYP PFNGLUNIFORMSUBROUTINESUIVPROC) (GLenum shadertype, GLsizei count, const GLuint *indices); typedef void (APIENTRYP PFNGLGETUNIFORMSUBROUTINEUIVPROC) (GLenum shadertype, GLint location, GLuint *params); typedef void (APIENTRYP PFNGLGETPROGRAMSTAGEIVPROC) (GLuint program, GLenum shadertype, GLenum pname, GLint *values); typedef void (APIENTRYP PFNGLPATCHPARAMETERIPROC) (GLenum pname, GLint value); typedef void (APIENTRYP PFNGLPATCHPARAMETERFVPROC) (GLenum pname, const GLfloat *values); typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id); typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint *ids); typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids); typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id); typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC) (void); typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC) (void); typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKPROC) (GLenum mode, GLuint id); typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) (GLenum mode, GLuint id, GLuint stream); typedef void (APIENTRYP PFNGLBEGINQUERYINDEXEDPROC) (GLenum target, GLuint index, GLuint id); typedef void (APIENTRYP PFNGLENDQUERYINDEXEDPROC) (GLenum target, GLuint index); typedef void (APIENTRYP PFNGLGETQUERYINDEXEDIVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMinSampleShading (GLfloat value); GLAPI void APIENTRY glBlendEquationi (GLuint buf, GLenum mode); GLAPI void APIENTRY glBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha); GLAPI void APIENTRY glBlendFunci (GLuint buf, GLenum src, GLenum dst); GLAPI void APIENTRY glBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); GLAPI void APIENTRY glDrawArraysIndirect (GLenum mode, const void *indirect); GLAPI void APIENTRY glDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect); GLAPI void APIENTRY glUniform1d (GLint location, GLdouble x); GLAPI void APIENTRY glUniform2d (GLint location, GLdouble x, GLdouble y); GLAPI void APIENTRY glUniform3d (GLint location, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glUniform4d (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glUniform1dv (GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glUniform2dv (GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glUniform3dv (GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glUniform4dv (GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix2x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix2x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix3x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix3x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix4x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix4x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glGetUniformdv (GLuint program, GLint location, GLdouble *params); GLAPI GLint APIENTRY glGetSubroutineUniformLocation (GLuint program, GLenum shadertype, const GLchar *name); GLAPI GLuint APIENTRY glGetSubroutineIndex (GLuint program, GLenum shadertype, const GLchar *name); GLAPI void APIENTRY glGetActiveSubroutineUniformiv (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); GLAPI void APIENTRY glGetActiveSubroutineUniformName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); GLAPI void APIENTRY glGetActiveSubroutineName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); GLAPI void APIENTRY glUniformSubroutinesuiv (GLenum shadertype, GLsizei count, const GLuint *indices); GLAPI void APIENTRY glGetUniformSubroutineuiv (GLenum shadertype, GLint location, GLuint *params); GLAPI void APIENTRY glGetProgramStageiv (GLuint program, GLenum shadertype, GLenum pname, GLint *values); GLAPI void APIENTRY glPatchParameteri (GLenum pname, GLint value); GLAPI void APIENTRY glPatchParameterfv (GLenum pname, const GLfloat *values); GLAPI void APIENTRY glBindTransformFeedback (GLenum target, GLuint id); GLAPI void APIENTRY glDeleteTransformFeedbacks (GLsizei n, const GLuint *ids); GLAPI void APIENTRY glGenTransformFeedbacks (GLsizei n, GLuint *ids); GLAPI GLboolean APIENTRY glIsTransformFeedback (GLuint id); GLAPI void APIENTRY glPauseTransformFeedback (void); GLAPI void APIENTRY glResumeTransformFeedback (void); GLAPI void APIENTRY glDrawTransformFeedback (GLenum mode, GLuint id); GLAPI void APIENTRY glDrawTransformFeedbackStream (GLenum mode, GLuint id, GLuint stream); GLAPI void APIENTRY glBeginQueryIndexed (GLenum target, GLuint index, GLuint id); GLAPI void APIENTRY glEndQueryIndexed (GLenum target, GLuint index); GLAPI void APIENTRY glGetQueryIndexediv (GLenum target, GLuint index, GLenum pname, GLint *params); #endif #endif /* GL_VERSION_4_0 */ #ifndef GL_VERSION_4_1 #define GL_VERSION_4_1 1 #define GL_FIXED 0x140C #define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A #define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B #define GL_LOW_FLOAT 0x8DF0 #define GL_MEDIUM_FLOAT 0x8DF1 #define GL_HIGH_FLOAT 0x8DF2 #define GL_LOW_INT 0x8DF3 #define GL_MEDIUM_INT 0x8DF4 #define GL_HIGH_INT 0x8DF5 #define GL_SHADER_COMPILER 0x8DFA #define GL_SHADER_BINARY_FORMATS 0x8DF8 #define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 #define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB #define GL_MAX_VARYING_VECTORS 0x8DFC #define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD #define GL_RGB565 0x8D62 #define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 #define GL_PROGRAM_BINARY_LENGTH 0x8741 #define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE #define GL_PROGRAM_BINARY_FORMATS 0x87FF #define GL_VERTEX_SHADER_BIT 0x00000001 #define GL_FRAGMENT_SHADER_BIT 0x00000002 #define GL_GEOMETRY_SHADER_BIT 0x00000004 #define GL_TESS_CONTROL_SHADER_BIT 0x00000008 #define GL_TESS_EVALUATION_SHADER_BIT 0x00000010 #define GL_ALL_SHADER_BITS 0xFFFFFFFF #define GL_PROGRAM_SEPARABLE 0x8258 #define GL_ACTIVE_PROGRAM 0x8259 #define GL_PROGRAM_PIPELINE_BINDING 0x825A #define GL_MAX_VIEWPORTS 0x825B #define GL_VIEWPORT_SUBPIXEL_BITS 0x825C #define GL_VIEWPORT_BOUNDS_RANGE 0x825D #define GL_LAYER_PROVOKING_VERTEX 0x825E #define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F #define GL_UNDEFINED_VERTEX 0x8260 typedef void (APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void); typedef void (APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryFormat, const void *binary, GLsizei length); typedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); typedef void (APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f); typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d); typedef void (APIENTRYP PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); typedef void (APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value); typedef void (APIENTRYP PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program); typedef void (APIENTRYP PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program); typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar *const*strings); typedef void (APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline); typedef void (APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint *pipelines); typedef void (APIENTRYP PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines); typedef GLboolean (APIENTRYP PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline); typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint v0); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat v0); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DPROC) (GLuint program, GLint location, GLdouble v0); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint v0); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint v0, GLint v1); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline); typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DPROC) (GLuint index, GLdouble x); typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DPROC) (GLuint index, GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVPROC) (GLuint index, GLenum pname, GLdouble *params); typedef void (APIENTRYP PFNGLVIEWPORTARRAYVPROC) (GLuint first, GLsizei count, const GLfloat *v); typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLSCISSORARRAYVPROC) (GLuint first, GLsizei count, const GLint *v); typedef void (APIENTRYP PFNGLSCISSORINDEXEDPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLSCISSORINDEXEDVPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYVPROC) (GLuint first, GLsizei count, const GLdouble *v); typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDPROC) (GLuint index, GLdouble n, GLdouble f); typedef void (APIENTRYP PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat *data); typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble *data); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glReleaseShaderCompiler (void); GLAPI void APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryFormat, const void *binary, GLsizei length); GLAPI void APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); GLAPI void APIENTRY glDepthRangef (GLfloat n, GLfloat f); GLAPI void APIENTRY glClearDepthf (GLfloat d); GLAPI void APIENTRY glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); GLAPI void APIENTRY glProgramBinary (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); GLAPI void APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value); GLAPI void APIENTRY glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program); GLAPI void APIENTRY glActiveShaderProgram (GLuint pipeline, GLuint program); GLAPI GLuint APIENTRY glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar *const*strings); GLAPI void APIENTRY glBindProgramPipeline (GLuint pipeline); GLAPI void APIENTRY glDeleteProgramPipelines (GLsizei n, const GLuint *pipelines); GLAPI void APIENTRY glGenProgramPipelines (GLsizei n, GLuint *pipelines); GLAPI GLboolean APIENTRY glIsProgramPipeline (GLuint pipeline); GLAPI void APIENTRY glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint *params); GLAPI void APIENTRY glProgramUniform1i (GLuint program, GLint location, GLint v0); GLAPI void APIENTRY glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniform1f (GLuint program, GLint location, GLfloat v0); GLAPI void APIENTRY glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform1d (GLuint program, GLint location, GLdouble v0); GLAPI void APIENTRY glProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniform1ui (GLuint program, GLint location, GLuint v0); GLAPI void APIENTRY glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glProgramUniform2i (GLuint program, GLint location, GLint v0, GLint v1); GLAPI void APIENTRY glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniform2f (GLuint program, GLint location, GLfloat v0, GLfloat v1); GLAPI void APIENTRY glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform2d (GLuint program, GLint location, GLdouble v0, GLdouble v1); GLAPI void APIENTRY glProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniform2ui (GLuint program, GLint location, GLuint v0, GLuint v1); GLAPI void APIENTRY glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glProgramUniform3i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); GLAPI void APIENTRY glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniform3f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); GLAPI void APIENTRY glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform3d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); GLAPI void APIENTRY glProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniform3ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); GLAPI void APIENTRY glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glProgramUniform4i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); GLAPI void APIENTRY glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniform4f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); GLAPI void APIENTRY glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform4d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); GLAPI void APIENTRY glProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniform4ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); GLAPI void APIENTRY glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glValidateProgramPipeline (GLuint pipeline); GLAPI void APIENTRY glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); GLAPI void APIENTRY glVertexAttribL1d (GLuint index, GLdouble x); GLAPI void APIENTRY glVertexAttribL2d (GLuint index, GLdouble x, GLdouble y); GLAPI void APIENTRY glVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glVertexAttribL1dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttribL2dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttribL3dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttribL4dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); GLAPI void APIENTRY glGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble *params); GLAPI void APIENTRY glViewportArrayv (GLuint first, GLsizei count, const GLfloat *v); GLAPI void APIENTRY glViewportIndexedf (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); GLAPI void APIENTRY glViewportIndexedfv (GLuint index, const GLfloat *v); GLAPI void APIENTRY glScissorArrayv (GLuint first, GLsizei count, const GLint *v); GLAPI void APIENTRY glScissorIndexed (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); GLAPI void APIENTRY glScissorIndexedv (GLuint index, const GLint *v); GLAPI void APIENTRY glDepthRangeArrayv (GLuint first, GLsizei count, const GLdouble *v); GLAPI void APIENTRY glDepthRangeIndexed (GLuint index, GLdouble n, GLdouble f); GLAPI void APIENTRY glGetFloati_v (GLenum target, GLuint index, GLfloat *data); GLAPI void APIENTRY glGetDoublei_v (GLenum target, GLuint index, GLdouble *data); #endif #endif /* GL_VERSION_4_1 */ #ifndef GL_VERSION_4_2 #define GL_VERSION_4_2 1 #define GL_COPY_READ_BUFFER_BINDING 0x8F36 #define GL_COPY_WRITE_BUFFER_BINDING 0x8F37 #define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24 #define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23 #define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127 #define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128 #define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129 #define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A #define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B #define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C #define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D #define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E #define GL_NUM_SAMPLE_COUNTS 0x9380 #define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC #define GL_ATOMIC_COUNTER_BUFFER 0x92C0 #define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1 #define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2 #define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3 #define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4 #define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5 #define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6 #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7 #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8 #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9 #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB #define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC #define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD #define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE #define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF #define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0 #define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1 #define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2 #define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3 #define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4 #define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5 #define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6 #define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7 #define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8 #define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC #define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9 #define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA #define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB #define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001 #define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002 #define GL_UNIFORM_BARRIER_BIT 0x00000004 #define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008 #define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020 #define GL_COMMAND_BARRIER_BIT 0x00000040 #define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080 #define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100 #define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200 #define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400 #define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800 #define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000 #define GL_ALL_BARRIER_BITS 0xFFFFFFFF #define GL_MAX_IMAGE_UNITS 0x8F38 #define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39 #define GL_IMAGE_BINDING_NAME 0x8F3A #define GL_IMAGE_BINDING_LEVEL 0x8F3B #define GL_IMAGE_BINDING_LAYERED 0x8F3C #define GL_IMAGE_BINDING_LAYER 0x8F3D #define GL_IMAGE_BINDING_ACCESS 0x8F3E #define GL_IMAGE_1D 0x904C #define GL_IMAGE_2D 0x904D #define GL_IMAGE_3D 0x904E #define GL_IMAGE_2D_RECT 0x904F #define GL_IMAGE_CUBE 0x9050 #define GL_IMAGE_BUFFER 0x9051 #define GL_IMAGE_1D_ARRAY 0x9052 #define GL_IMAGE_2D_ARRAY 0x9053 #define GL_IMAGE_CUBE_MAP_ARRAY 0x9054 #define GL_IMAGE_2D_MULTISAMPLE 0x9055 #define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056 #define GL_INT_IMAGE_1D 0x9057 #define GL_INT_IMAGE_2D 0x9058 #define GL_INT_IMAGE_3D 0x9059 #define GL_INT_IMAGE_2D_RECT 0x905A #define GL_INT_IMAGE_CUBE 0x905B #define GL_INT_IMAGE_BUFFER 0x905C #define GL_INT_IMAGE_1D_ARRAY 0x905D #define GL_INT_IMAGE_2D_ARRAY 0x905E #define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F #define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060 #define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061 #define GL_UNSIGNED_INT_IMAGE_1D 0x9062 #define GL_UNSIGNED_INT_IMAGE_2D 0x9063 #define GL_UNSIGNED_INT_IMAGE_3D 0x9064 #define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065 #define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066 #define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067 #define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068 #define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069 #define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A #define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B #define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C #define GL_MAX_IMAGE_SAMPLES 0x906D #define GL_IMAGE_BINDING_FORMAT 0x906E #define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7 #define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8 #define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9 #define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA #define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB #define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC #define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD #define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE #define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF #define GL_COMPRESSED_RGBA_BPTC_UNORM 0x8E8C #define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM 0x8E8D #define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT 0x8E8E #define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT 0x8E8F #define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); typedef void (APIENTRYP PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei count, GLint *params); typedef void (APIENTRYP PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC) (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREPROC) (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); typedef void (APIENTRYP PFNGLMEMORYBARRIERPROC) (GLbitfield barriers); typedef void (APIENTRYP PFNGLTEXSTORAGE1DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); typedef void (APIENTRYP PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC) (GLenum mode, GLuint id, GLsizei instancecount); typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC) (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawArraysInstancedBaseInstance (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); GLAPI void APIENTRY glDrawElementsInstancedBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); GLAPI void APIENTRY glDrawElementsInstancedBaseVertexBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); GLAPI void APIENTRY glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei count, GLint *params); GLAPI void APIENTRY glGetActiveAtomicCounterBufferiv (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); GLAPI void APIENTRY glBindImageTexture (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); GLAPI void APIENTRY glMemoryBarrier (GLbitfield barriers); GLAPI void APIENTRY glTexStorage1D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); GLAPI void APIENTRY glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); GLAPI void APIENTRY glDrawTransformFeedbackInstanced (GLenum mode, GLuint id, GLsizei instancecount); GLAPI void APIENTRY glDrawTransformFeedbackStreamInstanced (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); #endif #endif /* GL_VERSION_4_2 */ #ifndef GL_VERSION_4_3 #define GL_VERSION_4_3 1 typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); #define GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9 #define GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E #define GL_COMPRESSED_RGB8_ETC2 0x9274 #define GL_COMPRESSED_SRGB8_ETC2 0x9275 #define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276 #define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277 #define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278 #define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279 #define GL_COMPRESSED_R11_EAC 0x9270 #define GL_COMPRESSED_SIGNED_R11_EAC 0x9271 #define GL_COMPRESSED_RG11_EAC 0x9272 #define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273 #define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 #define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A #define GL_MAX_ELEMENT_INDEX 0x8D6B #define GL_COMPUTE_SHADER 0x91B9 #define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB #define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC #define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD #define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262 #define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263 #define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264 #define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265 #define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266 #define GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS 0x90EB #define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE #define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF #define GL_COMPUTE_WORK_GROUP_SIZE 0x8267 #define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED #define GL_DISPATCH_INDIRECT_BUFFER 0x90EE #define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF #define GL_COMPUTE_SHADER_BIT 0x00000020 #define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 #define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 #define GL_DEBUG_CALLBACK_FUNCTION 0x8244 #define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 #define GL_DEBUG_SOURCE_API 0x8246 #define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 #define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 #define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 #define GL_DEBUG_SOURCE_APPLICATION 0x824A #define GL_DEBUG_SOURCE_OTHER 0x824B #define GL_DEBUG_TYPE_ERROR 0x824C #define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D #define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E #define GL_DEBUG_TYPE_PORTABILITY 0x824F #define GL_DEBUG_TYPE_PERFORMANCE 0x8250 #define GL_DEBUG_TYPE_OTHER 0x8251 #define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 #define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 #define GL_DEBUG_LOGGED_MESSAGES 0x9145 #define GL_DEBUG_SEVERITY_HIGH 0x9146 #define GL_DEBUG_SEVERITY_MEDIUM 0x9147 #define GL_DEBUG_SEVERITY_LOW 0x9148 #define GL_DEBUG_TYPE_MARKER 0x8268 #define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 #define GL_DEBUG_TYPE_POP_GROUP 0x826A #define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B #define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C #define GL_DEBUG_GROUP_STACK_DEPTH 0x826D #define GL_BUFFER 0x82E0 #define GL_SHADER 0x82E1 #define GL_PROGRAM 0x82E2 #define GL_QUERY 0x82E3 #define GL_PROGRAM_PIPELINE 0x82E4 #define GL_SAMPLER 0x82E6 #define GL_MAX_LABEL_LENGTH 0x82E8 #define GL_DEBUG_OUTPUT 0x92E0 #define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 #define GL_MAX_UNIFORM_LOCATIONS 0x826E #define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310 #define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311 #define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312 #define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313 #define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314 #define GL_MAX_FRAMEBUFFER_WIDTH 0x9315 #define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316 #define GL_MAX_FRAMEBUFFER_LAYERS 0x9317 #define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318 #define GL_INTERNALFORMAT_SUPPORTED 0x826F #define GL_INTERNALFORMAT_PREFERRED 0x8270 #define GL_INTERNALFORMAT_RED_SIZE 0x8271 #define GL_INTERNALFORMAT_GREEN_SIZE 0x8272 #define GL_INTERNALFORMAT_BLUE_SIZE 0x8273 #define GL_INTERNALFORMAT_ALPHA_SIZE 0x8274 #define GL_INTERNALFORMAT_DEPTH_SIZE 0x8275 #define GL_INTERNALFORMAT_STENCIL_SIZE 0x8276 #define GL_INTERNALFORMAT_SHARED_SIZE 0x8277 #define GL_INTERNALFORMAT_RED_TYPE 0x8278 #define GL_INTERNALFORMAT_GREEN_TYPE 0x8279 #define GL_INTERNALFORMAT_BLUE_TYPE 0x827A #define GL_INTERNALFORMAT_ALPHA_TYPE 0x827B #define GL_INTERNALFORMAT_DEPTH_TYPE 0x827C #define GL_INTERNALFORMAT_STENCIL_TYPE 0x827D #define GL_MAX_WIDTH 0x827E #define GL_MAX_HEIGHT 0x827F #define GL_MAX_DEPTH 0x8280 #define GL_MAX_LAYERS 0x8281 #define GL_MAX_COMBINED_DIMENSIONS 0x8282 #define GL_COLOR_COMPONENTS 0x8283 #define GL_DEPTH_COMPONENTS 0x8284 #define GL_STENCIL_COMPONENTS 0x8285 #define GL_COLOR_RENDERABLE 0x8286 #define GL_DEPTH_RENDERABLE 0x8287 #define GL_STENCIL_RENDERABLE 0x8288 #define GL_FRAMEBUFFER_RENDERABLE 0x8289 #define GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A #define GL_FRAMEBUFFER_BLEND 0x828B #define GL_READ_PIXELS 0x828C #define GL_READ_PIXELS_FORMAT 0x828D #define GL_READ_PIXELS_TYPE 0x828E #define GL_TEXTURE_IMAGE_FORMAT 0x828F #define GL_TEXTURE_IMAGE_TYPE 0x8290 #define GL_GET_TEXTURE_IMAGE_FORMAT 0x8291 #define GL_GET_TEXTURE_IMAGE_TYPE 0x8292 #define GL_MIPMAP 0x8293 #define GL_MANUAL_GENERATE_MIPMAP 0x8294 #define GL_AUTO_GENERATE_MIPMAP 0x8295 #define GL_COLOR_ENCODING 0x8296 #define GL_SRGB_READ 0x8297 #define GL_SRGB_WRITE 0x8298 #define GL_FILTER 0x829A #define GL_VERTEX_TEXTURE 0x829B #define GL_TESS_CONTROL_TEXTURE 0x829C #define GL_TESS_EVALUATION_TEXTURE 0x829D #define GL_GEOMETRY_TEXTURE 0x829E #define GL_FRAGMENT_TEXTURE 0x829F #define GL_COMPUTE_TEXTURE 0x82A0 #define GL_TEXTURE_SHADOW 0x82A1 #define GL_TEXTURE_GATHER 0x82A2 #define GL_TEXTURE_GATHER_SHADOW 0x82A3 #define GL_SHADER_IMAGE_LOAD 0x82A4 #define GL_SHADER_IMAGE_STORE 0x82A5 #define GL_SHADER_IMAGE_ATOMIC 0x82A6 #define GL_IMAGE_TEXEL_SIZE 0x82A7 #define GL_IMAGE_COMPATIBILITY_CLASS 0x82A8 #define GL_IMAGE_PIXEL_FORMAT 0x82A9 #define GL_IMAGE_PIXEL_TYPE 0x82AA #define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC #define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD #define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE #define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF #define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1 #define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2 #define GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3 #define GL_CLEAR_BUFFER 0x82B4 #define GL_TEXTURE_VIEW 0x82B5 #define GL_VIEW_COMPATIBILITY_CLASS 0x82B6 #define GL_FULL_SUPPORT 0x82B7 #define GL_CAVEAT_SUPPORT 0x82B8 #define GL_IMAGE_CLASS_4_X_32 0x82B9 #define GL_IMAGE_CLASS_2_X_32 0x82BA #define GL_IMAGE_CLASS_1_X_32 0x82BB #define GL_IMAGE_CLASS_4_X_16 0x82BC #define GL_IMAGE_CLASS_2_X_16 0x82BD #define GL_IMAGE_CLASS_1_X_16 0x82BE #define GL_IMAGE_CLASS_4_X_8 0x82BF #define GL_IMAGE_CLASS_2_X_8 0x82C0 #define GL_IMAGE_CLASS_1_X_8 0x82C1 #define GL_IMAGE_CLASS_11_11_10 0x82C2 #define GL_IMAGE_CLASS_10_10_10_2 0x82C3 #define GL_VIEW_CLASS_128_BITS 0x82C4 #define GL_VIEW_CLASS_96_BITS 0x82C5 #define GL_VIEW_CLASS_64_BITS 0x82C6 #define GL_VIEW_CLASS_48_BITS 0x82C7 #define GL_VIEW_CLASS_32_BITS 0x82C8 #define GL_VIEW_CLASS_24_BITS 0x82C9 #define GL_VIEW_CLASS_16_BITS 0x82CA #define GL_VIEW_CLASS_8_BITS 0x82CB #define GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC #define GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD #define GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE #define GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF #define GL_VIEW_CLASS_RGTC1_RED 0x82D0 #define GL_VIEW_CLASS_RGTC2_RG 0x82D1 #define GL_VIEW_CLASS_BPTC_UNORM 0x82D2 #define GL_VIEW_CLASS_BPTC_FLOAT 0x82D3 #define GL_UNIFORM 0x92E1 #define GL_UNIFORM_BLOCK 0x92E2 #define GL_PROGRAM_INPUT 0x92E3 #define GL_PROGRAM_OUTPUT 0x92E4 #define GL_BUFFER_VARIABLE 0x92E5 #define GL_SHADER_STORAGE_BLOCK 0x92E6 #define GL_VERTEX_SUBROUTINE 0x92E8 #define GL_TESS_CONTROL_SUBROUTINE 0x92E9 #define GL_TESS_EVALUATION_SUBROUTINE 0x92EA #define GL_GEOMETRY_SUBROUTINE 0x92EB #define GL_FRAGMENT_SUBROUTINE 0x92EC #define GL_COMPUTE_SUBROUTINE 0x92ED #define GL_VERTEX_SUBROUTINE_UNIFORM 0x92EE #define GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF #define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0 #define GL_GEOMETRY_SUBROUTINE_UNIFORM 0x92F1 #define GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2 #define GL_COMPUTE_SUBROUTINE_UNIFORM 0x92F3 #define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4 #define GL_ACTIVE_RESOURCES 0x92F5 #define GL_MAX_NAME_LENGTH 0x92F6 #define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7 #define GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8 #define GL_NAME_LENGTH 0x92F9 #define GL_TYPE 0x92FA #define GL_ARRAY_SIZE 0x92FB #define GL_OFFSET 0x92FC #define GL_BLOCK_INDEX 0x92FD #define GL_ARRAY_STRIDE 0x92FE #define GL_MATRIX_STRIDE 0x92FF #define GL_IS_ROW_MAJOR 0x9300 #define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301 #define GL_BUFFER_BINDING 0x9302 #define GL_BUFFER_DATA_SIZE 0x9303 #define GL_NUM_ACTIVE_VARIABLES 0x9304 #define GL_ACTIVE_VARIABLES 0x9305 #define GL_REFERENCED_BY_VERTEX_SHADER 0x9306 #define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307 #define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308 #define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309 #define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A #define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B #define GL_TOP_LEVEL_ARRAY_SIZE 0x930C #define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D #define GL_LOCATION 0x930E #define GL_LOCATION_INDEX 0x930F #define GL_IS_PER_PATCH 0x92E7 #define GL_SHADER_STORAGE_BUFFER 0x90D2 #define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3 #define GL_SHADER_STORAGE_BUFFER_START 0x90D4 #define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5 #define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6 #define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7 #define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8 #define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9 #define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA #define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB #define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC #define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD #define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE #define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF #define GL_SHADER_STORAGE_BARRIER_BIT 0x00002000 #define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39 #define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA #define GL_TEXTURE_BUFFER_OFFSET 0x919D #define GL_TEXTURE_BUFFER_SIZE 0x919E #define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F #define GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB #define GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC #define GL_TEXTURE_VIEW_MIN_LAYER 0x82DD #define GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE #define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF #define GL_VERTEX_ATTRIB_BINDING 0x82D4 #define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5 #define GL_VERTEX_BINDING_DIVISOR 0x82D6 #define GL_VERTEX_BINDING_OFFSET 0x82D7 #define GL_VERTEX_BINDING_STRIDE 0x82D8 #define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9 #define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA #define GL_VERTEX_BINDING_BUFFER 0x8F4F #define GL_DISPLAY_LIST 0x82E7 typedef void (APIENTRYP PFNGLCLEARBUFFERDATAPROC) (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); typedef void (APIENTRYP PFNGLCLEARBUFFERSUBDATAPROC) (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEINDIRECTPROC) (GLintptr indirect); typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATAPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); typedef void (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIPROC) (GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETINTERNALFORMATI64VPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei count, GLint64 *params); typedef void (APIENTRYP PFNGLINVALIDATETEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); typedef void (APIENTRYP PFNGLINVALIDATETEXIMAGEPROC) (GLuint texture, GLint level); typedef void (APIENTRYP PFNGLINVALIDATEBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); typedef void (APIENTRYP PFNGLINVALIDATEBUFFERDATAPROC) (GLuint buffer); typedef void (APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments); typedef void (APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); typedef void (APIENTRYP PFNGLGETPROGRAMINTERFACEIVPROC) (GLuint program, GLenum programInterface, GLenum pname, GLint *params); typedef GLuint (APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name); typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCENAMEPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEIVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei count, GLsizei *length, GLint *params); typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC) (GLuint program, GLenum programInterface, const GLchar *name); typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name); typedef void (APIENTRYP PFNGLSHADERSTORAGEBLOCKBINDINGPROC) (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); typedef void (APIENTRYP PFNGLTEXBUFFERRANGEPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); typedef void (APIENTRYP PFNGLTEXSTORAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); typedef void (APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); typedef void (APIENTRYP PFNGLTEXTUREVIEWPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERPROC) (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC) (GLuint attribindex, GLuint bindingindex); typedef void (APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC) (GLuint bindingindex, GLuint divisor); typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam); typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); typedef void (APIENTRYP PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message); typedef void (APIENTRYP PFNGLPOPDEBUGGROUPPROC) (void); typedef void (APIENTRYP PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); typedef void (APIENTRYP PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); typedef void (APIENTRYP PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label); typedef void (APIENTRYP PFNGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glClearBufferData (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); GLAPI void APIENTRY glClearBufferSubData (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); GLAPI void APIENTRY glDispatchCompute (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); GLAPI void APIENTRY glDispatchComputeIndirect (GLintptr indirect); GLAPI void APIENTRY glCopyImageSubData (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); GLAPI void APIENTRY glFramebufferParameteri (GLenum target, GLenum pname, GLint param); GLAPI void APIENTRY glGetFramebufferParameteriv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetInternalformati64v (GLenum target, GLenum internalformat, GLenum pname, GLsizei count, GLint64 *params); GLAPI void APIENTRY glInvalidateTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); GLAPI void APIENTRY glInvalidateTexImage (GLuint texture, GLint level); GLAPI void APIENTRY glInvalidateBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr length); GLAPI void APIENTRY glInvalidateBufferData (GLuint buffer); GLAPI void APIENTRY glInvalidateFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments); GLAPI void APIENTRY glInvalidateSubFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glMultiDrawArraysIndirect (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); GLAPI void APIENTRY glMultiDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); GLAPI void APIENTRY glGetProgramInterfaceiv (GLuint program, GLenum programInterface, GLenum pname, GLint *params); GLAPI GLuint APIENTRY glGetProgramResourceIndex (GLuint program, GLenum programInterface, const GLchar *name); GLAPI void APIENTRY glGetProgramResourceName (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); GLAPI void APIENTRY glGetProgramResourceiv (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei count, GLsizei *length, GLint *params); GLAPI GLint APIENTRY glGetProgramResourceLocation (GLuint program, GLenum programInterface, const GLchar *name); GLAPI GLint APIENTRY glGetProgramResourceLocationIndex (GLuint program, GLenum programInterface, const GLchar *name); GLAPI void APIENTRY glShaderStorageBlockBinding (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); GLAPI void APIENTRY glTexBufferRange (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); GLAPI void APIENTRY glTexStorage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); GLAPI void APIENTRY glTexStorage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); GLAPI void APIENTRY glTextureView (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); GLAPI void APIENTRY glBindVertexBuffer (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); GLAPI void APIENTRY glVertexAttribFormat (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); GLAPI void APIENTRY glVertexAttribIFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); GLAPI void APIENTRY glVertexAttribLFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); GLAPI void APIENTRY glVertexAttribBinding (GLuint attribindex, GLuint bindingindex); GLAPI void APIENTRY glVertexBindingDivisor (GLuint bindingindex, GLuint divisor); GLAPI void APIENTRY glDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); GLAPI void APIENTRY glDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); GLAPI void APIENTRY glDebugMessageCallback (GLDEBUGPROC callback, const void *userParam); GLAPI GLuint APIENTRY glGetDebugMessageLog (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); GLAPI void APIENTRY glPushDebugGroup (GLenum source, GLuint id, GLsizei length, const GLchar *message); GLAPI void APIENTRY glPopDebugGroup (void); GLAPI void APIENTRY glObjectLabel (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); GLAPI void APIENTRY glGetObjectLabel (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); GLAPI void APIENTRY glObjectPtrLabel (const void *ptr, GLsizei length, const GLchar *label); GLAPI void APIENTRY glGetObjectPtrLabel (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); #endif #endif /* GL_VERSION_4_3 */ #ifndef GL_VERSION_4_4 #define GL_VERSION_4_4 1 #define GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5 #define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221 #define GL_TEXTURE_BUFFER_BINDING 0x8C2A #define GL_MAP_PERSISTENT_BIT 0x0040 #define GL_MAP_COHERENT_BIT 0x0080 #define GL_DYNAMIC_STORAGE_BIT 0x0100 #define GL_CLIENT_STORAGE_BIT 0x0200 #define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT 0x00004000 #define GL_BUFFER_IMMUTABLE_STORAGE 0x821F #define GL_BUFFER_STORAGE_FLAGS 0x8220 #define GL_CLEAR_TEXTURE 0x9365 #define GL_LOCATION_COMPONENT 0x934A #define GL_TRANSFORM_FEEDBACK_BUFFER_INDEX 0x934B #define GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE 0x934C #define GL_QUERY_BUFFER 0x9192 #define GL_QUERY_BUFFER_BARRIER_BIT 0x00008000 #define GL_QUERY_BUFFER_BINDING 0x9193 #define GL_QUERY_RESULT_NO_WAIT 0x9194 #define GL_MIRROR_CLAMP_TO_EDGE 0x8743 typedef void (APIENTRYP PFNGLBUFFERSTORAGEPROC) (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); typedef void (APIENTRYP PFNGLCLEARTEXIMAGEPROC) (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); typedef void (APIENTRYP PFNGLCLEARTEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); typedef void (APIENTRYP PFNGLBINDBUFFERSBASEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers); typedef void (APIENTRYP PFNGLBINDBUFFERSRANGEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes); typedef void (APIENTRYP PFNGLBINDTEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures); typedef void (APIENTRYP PFNGLBINDSAMPLERSPROC) (GLuint first, GLsizei count, const GLuint *samplers); typedef void (APIENTRYP PFNGLBINDIMAGETEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures); typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERSPROC) (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBufferStorage (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); GLAPI void APIENTRY glClearTexImage (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); GLAPI void APIENTRY glClearTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); GLAPI void APIENTRY glBindBuffersBase (GLenum target, GLuint first, GLsizei count, const GLuint *buffers); GLAPI void APIENTRY glBindBuffersRange (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes); GLAPI void APIENTRY glBindTextures (GLuint first, GLsizei count, const GLuint *textures); GLAPI void APIENTRY glBindSamplers (GLuint first, GLsizei count, const GLuint *samplers); GLAPI void APIENTRY glBindImageTextures (GLuint first, GLsizei count, const GLuint *textures); GLAPI void APIENTRY glBindVertexBuffers (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); #endif #endif /* GL_VERSION_4_4 */ #ifndef GL_VERSION_4_5 #define GL_VERSION_4_5 1 #define GL_CONTEXT_LOST 0x0507 #define GL_NEGATIVE_ONE_TO_ONE 0x935E #define GL_ZERO_TO_ONE 0x935F #define GL_CLIP_ORIGIN 0x935C #define GL_CLIP_DEPTH_MODE 0x935D #define GL_QUERY_WAIT_INVERTED 0x8E17 #define GL_QUERY_NO_WAIT_INVERTED 0x8E18 #define GL_QUERY_BY_REGION_WAIT_INVERTED 0x8E19 #define GL_QUERY_BY_REGION_NO_WAIT_INVERTED 0x8E1A #define GL_MAX_CULL_DISTANCES 0x82F9 #define GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES 0x82FA #define GL_TEXTURE_TARGET 0x1006 #define GL_QUERY_TARGET 0x82EA #define GL_GUILTY_CONTEXT_RESET 0x8253 #define GL_INNOCENT_CONTEXT_RESET 0x8254 #define GL_UNKNOWN_CONTEXT_RESET 0x8255 #define GL_RESET_NOTIFICATION_STRATEGY 0x8256 #define GL_LOSE_CONTEXT_ON_RESET 0x8252 #define GL_NO_RESET_NOTIFICATION 0x8261 #define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT 0x00000004 #define GL_COLOR_TABLE 0x80D0 #define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 #define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 #define GL_PROXY_COLOR_TABLE 0x80D3 #define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 #define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 #define GL_CONVOLUTION_1D 0x8010 #define GL_CONVOLUTION_2D 0x8011 #define GL_SEPARABLE_2D 0x8012 #define GL_HISTOGRAM 0x8024 #define GL_PROXY_HISTOGRAM 0x8025 #define GL_MINMAX 0x802E #define GL_CONTEXT_RELEASE_BEHAVIOR 0x82FB #define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH 0x82FC typedef void (APIENTRYP PFNGLCLIPCONTROLPROC) (GLenum origin, GLenum depth); typedef void (APIENTRYP PFNGLCREATETRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids); typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC) (GLuint xfb, GLuint index, GLuint buffer); typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC) (GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKIVPROC) (GLuint xfb, GLenum pname, GLint *param); typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI_VPROC) (GLuint xfb, GLenum pname, GLuint index, GLint *param); typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI64_VPROC) (GLuint xfb, GLenum pname, GLuint index, GLint64 *param); typedef void (APIENTRYP PFNGLCREATEBUFFERSPROC) (GLsizei n, GLuint *buffers); typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); typedef void (APIENTRYP PFNGLCOPYNAMEDBUFFERSUBDATAPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERPROC) (GLuint buffer, GLenum access); typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERRANGEPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFERPROC) (GLuint buffer); typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVPROC) (GLuint buffer, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERI64VPROC) (GLuint buffer, GLenum pname, GLint64 *params); typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVPROC) (GLuint buffer, GLenum pname, void **params); typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); typedef void (APIENTRYP PFNGLCREATEFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC) (GLuint framebuffer, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC) (GLuint framebuffer, GLenum buf); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC) (GLuint framebuffer, GLenum src); typedef void (APIENTRYP PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC) (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments); typedef void (APIENTRYP PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC) (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERIVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value); typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value); typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERFVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value); typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERFIPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); typedef void (APIENTRYP PFNGLBLITNAMEDFRAMEBUFFERPROC) (GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC) (GLuint framebuffer, GLenum target); typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC) (GLuint framebuffer, GLenum pname, GLint *param); typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLCREATERENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers); typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC) (GLuint renderbuffer, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLCREATETEXTURESPROC) (GLenum target, GLsizei n, GLuint *textures); typedef void (APIENTRYP PFNGLTEXTUREBUFFERPROC) (GLuint texture, GLenum internalformat, GLuint buffer); typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEPROC) (GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DPROC) (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width); typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DPROC) (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DPROC) (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC) (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC) (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DPROC) (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC) (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DPROC) (GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFPROC) (GLuint texture, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVPROC) (GLuint texture, GLenum pname, const GLfloat *param); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIPROC) (GLuint texture, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVPROC) (GLuint texture, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVPROC) (GLuint texture, GLenum pname, const GLuint *params); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVPROC) (GLuint texture, GLenum pname, const GLint *param); typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPPROC) (GLuint texture); typedef void (APIENTRYP PFNGLBINDTEXTUREUNITPROC) (GLuint unit, GLuint texture); typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEPROC) (GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC) (GLuint texture, GLint level, GLsizei bufSize, void *pixels); typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVPROC) (GLuint texture, GLint level, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVPROC) (GLuint texture, GLint level, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVPROC) (GLuint texture, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVPROC) (GLuint texture, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVPROC) (GLuint texture, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVPROC) (GLuint texture, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLCREATEVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays); typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYATTRIBPROC) (GLuint vaobj, GLuint index); typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYATTRIBPROC) (GLuint vaobj, GLuint index); typedef void (APIENTRYP PFNGLVERTEXARRAYELEMENTBUFFERPROC) (GLuint vaobj, GLuint buffer); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBUFFERPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBUFFERSPROC) (GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBBINDINGPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex); typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBFORMATPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBIFORMATPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBLFORMATPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXARRAYBINDINGDIVISORPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor); typedef void (APIENTRYP PFNGLGETVERTEXARRAYIVPROC) (GLuint vaobj, GLenum pname, GLint *param); typedef void (APIENTRYP PFNGLGETVERTEXARRAYINDEXEDIVPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint *param); typedef void (APIENTRYP PFNGLGETVERTEXARRAYINDEXED64IVPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint64 *param); typedef void (APIENTRYP PFNGLCREATESAMPLERSPROC) (GLsizei n, GLuint *samplers); typedef void (APIENTRYP PFNGLCREATEPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines); typedef void (APIENTRYP PFNGLCREATEQUERIESPROC) (GLenum target, GLsizei n, GLuint *ids); typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTI64VPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTIVPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTUI64VPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTUIVPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); typedef void (APIENTRYP PFNGLMEMORYBARRIERBYREGIONPROC) (GLbitfield barriers); typedef void (APIENTRYP PFNGLGETTEXTURESUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void *pixels); typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void *pixels); typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSPROC) (void); typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint lod, GLsizei bufSize, void *pixels); typedef void (APIENTRYP PFNGLGETNTEXIMAGEPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); typedef void (APIENTRYP PFNGLGETNUNIFORMDVPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); typedef void (APIENTRYP PFNGLGETNUNIFORMFVPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); typedef void (APIENTRYP PFNGLGETNUNIFORMIVPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); typedef void (APIENTRYP PFNGLGETNUNIFORMUIVPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params); typedef void (APIENTRYP PFNGLREADNPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); typedef void (APIENTRYP PFNGLGETNMAPDVPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); typedef void (APIENTRYP PFNGLGETNMAPFVPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); typedef void (APIENTRYP PFNGLGETNMAPIVPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint *v); typedef void (APIENTRYP PFNGLGETNPIXELMAPFVPROC) (GLenum map, GLsizei bufSize, GLfloat *values); typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVPROC) (GLenum map, GLsizei bufSize, GLuint *values); typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVPROC) (GLenum map, GLsizei bufSize, GLushort *values); typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEPROC) (GLsizei bufSize, GLubyte *pattern); typedef void (APIENTRYP PFNGLGETNCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); typedef void (APIENTRYP PFNGLGETNHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); typedef void (APIENTRYP PFNGLGETNMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); typedef void (APIENTRYP PFNGLTEXTUREBARRIERPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glClipControl (GLenum origin, GLenum depth); GLAPI void APIENTRY glCreateTransformFeedbacks (GLsizei n, GLuint *ids); GLAPI void APIENTRY glTransformFeedbackBufferBase (GLuint xfb, GLuint index, GLuint buffer); GLAPI void APIENTRY glTransformFeedbackBufferRange (GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); GLAPI void APIENTRY glGetTransformFeedbackiv (GLuint xfb, GLenum pname, GLint *param); GLAPI void APIENTRY glGetTransformFeedbacki_v (GLuint xfb, GLenum pname, GLuint index, GLint *param); GLAPI void APIENTRY glGetTransformFeedbacki64_v (GLuint xfb, GLenum pname, GLuint index, GLint64 *param); GLAPI void APIENTRY glCreateBuffers (GLsizei n, GLuint *buffers); GLAPI void APIENTRY glNamedBufferStorage (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); GLAPI void APIENTRY glNamedBufferData (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); GLAPI void APIENTRY glNamedBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); GLAPI void APIENTRY glCopyNamedBufferSubData (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); GLAPI void APIENTRY glClearNamedBufferData (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); GLAPI void APIENTRY glClearNamedBufferSubData (GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); GLAPI void *APIENTRY glMapNamedBuffer (GLuint buffer, GLenum access); GLAPI void *APIENTRY glMapNamedBufferRange (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); GLAPI GLboolean APIENTRY glUnmapNamedBuffer (GLuint buffer); GLAPI void APIENTRY glFlushMappedNamedBufferRange (GLuint buffer, GLintptr offset, GLsizeiptr length); GLAPI void APIENTRY glGetNamedBufferParameteriv (GLuint buffer, GLenum pname, GLint *params); GLAPI void APIENTRY glGetNamedBufferParameteri64v (GLuint buffer, GLenum pname, GLint64 *params); GLAPI void APIENTRY glGetNamedBufferPointerv (GLuint buffer, GLenum pname, void **params); GLAPI void APIENTRY glGetNamedBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); GLAPI void APIENTRY glCreateFramebuffers (GLsizei n, GLuint *framebuffers); GLAPI void APIENTRY glNamedFramebufferRenderbuffer (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); GLAPI void APIENTRY glNamedFramebufferParameteri (GLuint framebuffer, GLenum pname, GLint param); GLAPI void APIENTRY glNamedFramebufferTexture (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); GLAPI void APIENTRY glNamedFramebufferTextureLayer (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); GLAPI void APIENTRY glNamedFramebufferDrawBuffer (GLuint framebuffer, GLenum buf); GLAPI void APIENTRY glNamedFramebufferDrawBuffers (GLuint framebuffer, GLsizei n, const GLenum *bufs); GLAPI void APIENTRY glNamedFramebufferReadBuffer (GLuint framebuffer, GLenum src); GLAPI void APIENTRY glInvalidateNamedFramebufferData (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments); GLAPI void APIENTRY glInvalidateNamedFramebufferSubData (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glClearNamedFramebufferiv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value); GLAPI void APIENTRY glClearNamedFramebufferuiv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value); GLAPI void APIENTRY glClearNamedFramebufferfv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value); GLAPI void APIENTRY glClearNamedFramebufferfi (GLuint framebuffer, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); GLAPI void APIENTRY glBlitNamedFramebuffer (GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); GLAPI GLenum APIENTRY glCheckNamedFramebufferStatus (GLuint framebuffer, GLenum target); GLAPI void APIENTRY glGetNamedFramebufferParameteriv (GLuint framebuffer, GLenum pname, GLint *param); GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameteriv (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); GLAPI void APIENTRY glCreateRenderbuffers (GLsizei n, GLuint *renderbuffers); GLAPI void APIENTRY glNamedRenderbufferStorage (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glNamedRenderbufferStorageMultisample (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glGetNamedRenderbufferParameteriv (GLuint renderbuffer, GLenum pname, GLint *params); GLAPI void APIENTRY glCreateTextures (GLenum target, GLsizei n, GLuint *textures); GLAPI void APIENTRY glTextureBuffer (GLuint texture, GLenum internalformat, GLuint buffer); GLAPI void APIENTRY glTextureBufferRange (GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); GLAPI void APIENTRY glTextureStorage1D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width); GLAPI void APIENTRY glTextureStorage2D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glTextureStorage3D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); GLAPI void APIENTRY glTextureStorage2DMultisample (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); GLAPI void APIENTRY glTextureStorage3DMultisample (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); GLAPI void APIENTRY glTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glCompressedTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCompressedTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCompressedTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCopyTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glCopyTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glCopyTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glTextureParameterf (GLuint texture, GLenum pname, GLfloat param); GLAPI void APIENTRY glTextureParameterfv (GLuint texture, GLenum pname, const GLfloat *param); GLAPI void APIENTRY glTextureParameteri (GLuint texture, GLenum pname, GLint param); GLAPI void APIENTRY glTextureParameterIiv (GLuint texture, GLenum pname, const GLint *params); GLAPI void APIENTRY glTextureParameterIuiv (GLuint texture, GLenum pname, const GLuint *params); GLAPI void APIENTRY glTextureParameteriv (GLuint texture, GLenum pname, const GLint *param); GLAPI void APIENTRY glGenerateTextureMipmap (GLuint texture); GLAPI void APIENTRY glBindTextureUnit (GLuint unit, GLuint texture); GLAPI void APIENTRY glGetTextureImage (GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); GLAPI void APIENTRY glGetCompressedTextureImage (GLuint texture, GLint level, GLsizei bufSize, void *pixels); GLAPI void APIENTRY glGetTextureLevelParameterfv (GLuint texture, GLint level, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetTextureLevelParameteriv (GLuint texture, GLint level, GLenum pname, GLint *params); GLAPI void APIENTRY glGetTextureParameterfv (GLuint texture, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetTextureParameterIiv (GLuint texture, GLenum pname, GLint *params); GLAPI void APIENTRY glGetTextureParameterIuiv (GLuint texture, GLenum pname, GLuint *params); GLAPI void APIENTRY glGetTextureParameteriv (GLuint texture, GLenum pname, GLint *params); GLAPI void APIENTRY glCreateVertexArrays (GLsizei n, GLuint *arrays); GLAPI void APIENTRY glDisableVertexArrayAttrib (GLuint vaobj, GLuint index); GLAPI void APIENTRY glEnableVertexArrayAttrib (GLuint vaobj, GLuint index); GLAPI void APIENTRY glVertexArrayElementBuffer (GLuint vaobj, GLuint buffer); GLAPI void APIENTRY glVertexArrayVertexBuffer (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); GLAPI void APIENTRY glVertexArrayVertexBuffers (GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); GLAPI void APIENTRY glVertexArrayAttribBinding (GLuint vaobj, GLuint attribindex, GLuint bindingindex); GLAPI void APIENTRY glVertexArrayAttribFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); GLAPI void APIENTRY glVertexArrayAttribIFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); GLAPI void APIENTRY glVertexArrayAttribLFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); GLAPI void APIENTRY glVertexArrayBindingDivisor (GLuint vaobj, GLuint bindingindex, GLuint divisor); GLAPI void APIENTRY glGetVertexArrayiv (GLuint vaobj, GLenum pname, GLint *param); GLAPI void APIENTRY glGetVertexArrayIndexediv (GLuint vaobj, GLuint index, GLenum pname, GLint *param); GLAPI void APIENTRY glGetVertexArrayIndexed64iv (GLuint vaobj, GLuint index, GLenum pname, GLint64 *param); GLAPI void APIENTRY glCreateSamplers (GLsizei n, GLuint *samplers); GLAPI void APIENTRY glCreateProgramPipelines (GLsizei n, GLuint *pipelines); GLAPI void APIENTRY glCreateQueries (GLenum target, GLsizei n, GLuint *ids); GLAPI void APIENTRY glGetQueryBufferObjecti64v (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); GLAPI void APIENTRY glGetQueryBufferObjectiv (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); GLAPI void APIENTRY glGetQueryBufferObjectui64v (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); GLAPI void APIENTRY glGetQueryBufferObjectuiv (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); GLAPI void APIENTRY glMemoryBarrierByRegion (GLbitfield barriers); GLAPI void APIENTRY glGetTextureSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void *pixels); GLAPI void APIENTRY glGetCompressedTextureSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void *pixels); GLAPI GLenum APIENTRY glGetGraphicsResetStatus (void); GLAPI void APIENTRY glGetnCompressedTexImage (GLenum target, GLint lod, GLsizei bufSize, void *pixels); GLAPI void APIENTRY glGetnTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); GLAPI void APIENTRY glGetnUniformdv (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); GLAPI void APIENTRY glGetnUniformfv (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); GLAPI void APIENTRY glGetnUniformiv (GLuint program, GLint location, GLsizei bufSize, GLint *params); GLAPI void APIENTRY glGetnUniformuiv (GLuint program, GLint location, GLsizei bufSize, GLuint *params); GLAPI void APIENTRY glReadnPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); GLAPI void APIENTRY glGetnMapdv (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); GLAPI void APIENTRY glGetnMapfv (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); GLAPI void APIENTRY glGetnMapiv (GLenum target, GLenum query, GLsizei bufSize, GLint *v); GLAPI void APIENTRY glGetnPixelMapfv (GLenum map, GLsizei bufSize, GLfloat *values); GLAPI void APIENTRY glGetnPixelMapuiv (GLenum map, GLsizei bufSize, GLuint *values); GLAPI void APIENTRY glGetnPixelMapusv (GLenum map, GLsizei bufSize, GLushort *values); GLAPI void APIENTRY glGetnPolygonStipple (GLsizei bufSize, GLubyte *pattern); GLAPI void APIENTRY glGetnColorTable (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); GLAPI void APIENTRY glGetnConvolutionFilter (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); GLAPI void APIENTRY glGetnSeparableFilter (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); GLAPI void APIENTRY glGetnHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); GLAPI void APIENTRY glGetnMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); GLAPI void APIENTRY glTextureBarrier (void); #endif #endif /* GL_VERSION_4_5 */ #ifndef GL_VERSION_4_6 #define GL_VERSION_4_6 1 #define GL_SHADER_BINARY_FORMAT_SPIR_V 0x9551 #define GL_SPIR_V_BINARY 0x9552 #define GL_PARAMETER_BUFFER 0x80EE #define GL_PARAMETER_BUFFER_BINDING 0x80EF #define GL_CONTEXT_FLAG_NO_ERROR_BIT 0x00000008 #define GL_VERTICES_SUBMITTED 0x82EE #define GL_PRIMITIVES_SUBMITTED 0x82EF #define GL_VERTEX_SHADER_INVOCATIONS 0x82F0 #define GL_TESS_CONTROL_SHADER_PATCHES 0x82F1 #define GL_TESS_EVALUATION_SHADER_INVOCATIONS 0x82F2 #define GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED 0x82F3 #define GL_FRAGMENT_SHADER_INVOCATIONS 0x82F4 #define GL_COMPUTE_SHADER_INVOCATIONS 0x82F5 #define GL_CLIPPING_INPUT_PRIMITIVES 0x82F6 #define GL_CLIPPING_OUTPUT_PRIMITIVES 0x82F7 #define GL_POLYGON_OFFSET_CLAMP 0x8E1B #define GL_SPIR_V_EXTENSIONS 0x9553 #define GL_NUM_SPIR_V_EXTENSIONS 0x9554 #define GL_TEXTURE_MAX_ANISOTROPY 0x84FE #define GL_MAX_TEXTURE_MAX_ANISOTROPY 0x84FF #define GL_TRANSFORM_FEEDBACK_OVERFLOW 0x82EC #define GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW 0x82ED typedef void (APIENTRYP PFNGLSPECIALIZESHADERPROC) (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue); typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC) (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC) (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); typedef void (APIENTRYP PFNGLPOLYGONOFFSETCLAMPPROC) (GLfloat factor, GLfloat units, GLfloat clamp); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSpecializeShader (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue); GLAPI void APIENTRY glMultiDrawArraysIndirectCount (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); GLAPI void APIENTRY glMultiDrawElementsIndirectCount (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); GLAPI void APIENTRY glPolygonOffsetClamp (GLfloat factor, GLfloat units, GLfloat clamp); #endif #endif /* GL_VERSION_4_6 */ #ifndef GL_ARB_ES2_compatibility #define GL_ARB_ES2_compatibility 1 #endif /* GL_ARB_ES2_compatibility */ #ifndef GL_ARB_ES3_1_compatibility #define GL_ARB_ES3_1_compatibility 1 #endif /* GL_ARB_ES3_1_compatibility */ #ifndef GL_ARB_ES3_2_compatibility #define GL_ARB_ES3_2_compatibility 1 #define GL_PRIMITIVE_BOUNDING_BOX_ARB 0x92BE #define GL_MULTISAMPLE_LINE_WIDTH_RANGE_ARB 0x9381 #define GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY_ARB 0x9382 typedef void (APIENTRYP PFNGLPRIMITIVEBOUNDINGBOXARBPROC) (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPrimitiveBoundingBoxARB (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); #endif #endif /* GL_ARB_ES3_2_compatibility */ #ifndef GL_ARB_ES3_compatibility #define GL_ARB_ES3_compatibility 1 #endif /* GL_ARB_ES3_compatibility */ #ifndef GL_ARB_arrays_of_arrays #define GL_ARB_arrays_of_arrays 1 #endif /* GL_ARB_arrays_of_arrays */ #ifndef GL_ARB_base_instance #define GL_ARB_base_instance 1 #endif /* GL_ARB_base_instance */ #ifndef GL_ARB_bindless_texture #define GL_ARB_bindless_texture 1 typedef khronos_uint64_t GLuint64EXT; #define GL_UNSIGNED_INT64_ARB 0x140F typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLEARBPROC) (GLuint texture); typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLEARBPROC) (GLuint texture, GLuint sampler); typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC) (GLuint64 handle); typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLEARBPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle, GLenum access); typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC) (GLuint64 handle); typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64ARBPROC) (GLint location, GLuint64 value); typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC) (GLuint program, GLint location, GLuint64 value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle); typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64ARBPROC) (GLuint index, GLuint64EXT x); typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VARBPROC) (GLuint index, const GLuint64EXT *v); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VARBPROC) (GLuint index, GLenum pname, GLuint64EXT *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLuint64 APIENTRY glGetTextureHandleARB (GLuint texture); GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleARB (GLuint texture, GLuint sampler); GLAPI void APIENTRY glMakeTextureHandleResidentARB (GLuint64 handle); GLAPI void APIENTRY glMakeTextureHandleNonResidentARB (GLuint64 handle); GLAPI GLuint64 APIENTRY glGetImageHandleARB (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); GLAPI void APIENTRY glMakeImageHandleResidentARB (GLuint64 handle, GLenum access); GLAPI void APIENTRY glMakeImageHandleNonResidentARB (GLuint64 handle); GLAPI void APIENTRY glUniformHandleui64ARB (GLint location, GLuint64 value); GLAPI void APIENTRY glUniformHandleui64vARB (GLint location, GLsizei count, const GLuint64 *value); GLAPI void APIENTRY glProgramUniformHandleui64ARB (GLuint program, GLint location, GLuint64 value); GLAPI void APIENTRY glProgramUniformHandleui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *values); GLAPI GLboolean APIENTRY glIsTextureHandleResidentARB (GLuint64 handle); GLAPI GLboolean APIENTRY glIsImageHandleResidentARB (GLuint64 handle); GLAPI void APIENTRY glVertexAttribL1ui64ARB (GLuint index, GLuint64EXT x); GLAPI void APIENTRY glVertexAttribL1ui64vARB (GLuint index, const GLuint64EXT *v); GLAPI void APIENTRY glGetVertexAttribLui64vARB (GLuint index, GLenum pname, GLuint64EXT *params); #endif #endif /* GL_ARB_bindless_texture */ #ifndef GL_ARB_blend_func_extended #define GL_ARB_blend_func_extended 1 #endif /* GL_ARB_blend_func_extended */ #ifndef GL_ARB_buffer_storage #define GL_ARB_buffer_storage 1 #endif /* GL_ARB_buffer_storage */ #ifndef GL_ARB_cl_event #define GL_ARB_cl_event 1 struct _cl_context; struct _cl_event; #define GL_SYNC_CL_EVENT_ARB 0x8240 #define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241 typedef GLsync (APIENTRYP PFNGLCREATESYNCFROMCLEVENTARBPROC) (struct _cl_context *context, struct _cl_event *event, GLbitfield flags); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLsync APIENTRY glCreateSyncFromCLeventARB (struct _cl_context *context, struct _cl_event *event, GLbitfield flags); #endif #endif /* GL_ARB_cl_event */ #ifndef GL_ARB_clear_buffer_object #define GL_ARB_clear_buffer_object 1 #endif /* GL_ARB_clear_buffer_object */ #ifndef GL_ARB_clear_texture #define GL_ARB_clear_texture 1 #endif /* GL_ARB_clear_texture */ #ifndef GL_ARB_clip_control #define GL_ARB_clip_control 1 #endif /* GL_ARB_clip_control */ #ifndef GL_ARB_color_buffer_float #define GL_ARB_color_buffer_float 1 #define GL_RGBA_FLOAT_MODE_ARB 0x8820 #define GL_CLAMP_VERTEX_COLOR_ARB 0x891A #define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B #define GL_CLAMP_READ_COLOR_ARB 0x891C #define GL_FIXED_ONLY_ARB 0x891D typedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glClampColorARB (GLenum target, GLenum clamp); #endif #endif /* GL_ARB_color_buffer_float */ #ifndef GL_ARB_compatibility #define GL_ARB_compatibility 1 #endif /* GL_ARB_compatibility */ #ifndef GL_ARB_compressed_texture_pixel_storage #define GL_ARB_compressed_texture_pixel_storage 1 #endif /* GL_ARB_compressed_texture_pixel_storage */ #ifndef GL_ARB_compute_shader #define GL_ARB_compute_shader 1 #endif /* GL_ARB_compute_shader */ #ifndef GL_ARB_compute_variable_group_size #define GL_ARB_compute_variable_group_size 1 #define GL_MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB 0x9344 #define GL_MAX_COMPUTE_FIXED_GROUP_INVOCATIONS_ARB 0x90EB #define GL_MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB 0x9345 #define GL_MAX_COMPUTE_FIXED_GROUP_SIZE_ARB 0x91BF typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDispatchComputeGroupSizeARB (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); #endif #endif /* GL_ARB_compute_variable_group_size */ #ifndef GL_ARB_conditional_render_inverted #define GL_ARB_conditional_render_inverted 1 #endif /* GL_ARB_conditional_render_inverted */ #ifndef GL_ARB_conservative_depth #define GL_ARB_conservative_depth 1 #endif /* GL_ARB_conservative_depth */ #ifndef GL_ARB_copy_buffer #define GL_ARB_copy_buffer 1 #endif /* GL_ARB_copy_buffer */ #ifndef GL_ARB_copy_image #define GL_ARB_copy_image 1 #endif /* GL_ARB_copy_image */ #ifndef GL_ARB_cull_distance #define GL_ARB_cull_distance 1 #endif /* GL_ARB_cull_distance */ #ifndef GL_ARB_debug_output #define GL_ARB_debug_output 1 typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); #define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242 #define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243 #define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244 #define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245 #define GL_DEBUG_SOURCE_API_ARB 0x8246 #define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247 #define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248 #define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249 #define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A #define GL_DEBUG_SOURCE_OTHER_ARB 0x824B #define GL_DEBUG_TYPE_ERROR_ARB 0x824C #define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D #define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E #define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F #define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 #define GL_DEBUG_TYPE_OTHER_ARB 0x8251 #define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143 #define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144 #define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145 #define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146 #define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147 #define GL_DEBUG_SEVERITY_LOW_ARB 0x9148 typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, const void *userParam); typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDebugMessageControlARB (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); GLAPI void APIENTRY glDebugMessageInsertARB (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); GLAPI void APIENTRY glDebugMessageCallbackARB (GLDEBUGPROCARB callback, const void *userParam); GLAPI GLuint APIENTRY glGetDebugMessageLogARB (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); #endif #endif /* GL_ARB_debug_output */ #ifndef GL_ARB_depth_buffer_float #define GL_ARB_depth_buffer_float 1 #endif /* GL_ARB_depth_buffer_float */ #ifndef GL_ARB_depth_clamp #define GL_ARB_depth_clamp 1 #endif /* GL_ARB_depth_clamp */ #ifndef GL_ARB_depth_texture #define GL_ARB_depth_texture 1 #define GL_DEPTH_COMPONENT16_ARB 0x81A5 #define GL_DEPTH_COMPONENT24_ARB 0x81A6 #define GL_DEPTH_COMPONENT32_ARB 0x81A7 #define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A #define GL_DEPTH_TEXTURE_MODE_ARB 0x884B #endif /* GL_ARB_depth_texture */ #ifndef GL_ARB_derivative_control #define GL_ARB_derivative_control 1 #endif /* GL_ARB_derivative_control */ #ifndef GL_ARB_direct_state_access #define GL_ARB_direct_state_access 1 #endif /* GL_ARB_direct_state_access */ #ifndef GL_ARB_draw_buffers #define GL_ARB_draw_buffers 1 #define GL_MAX_DRAW_BUFFERS_ARB 0x8824 #define GL_DRAW_BUFFER0_ARB 0x8825 #define GL_DRAW_BUFFER1_ARB 0x8826 #define GL_DRAW_BUFFER2_ARB 0x8827 #define GL_DRAW_BUFFER3_ARB 0x8828 #define GL_DRAW_BUFFER4_ARB 0x8829 #define GL_DRAW_BUFFER5_ARB 0x882A #define GL_DRAW_BUFFER6_ARB 0x882B #define GL_DRAW_BUFFER7_ARB 0x882C #define GL_DRAW_BUFFER8_ARB 0x882D #define GL_DRAW_BUFFER9_ARB 0x882E #define GL_DRAW_BUFFER10_ARB 0x882F #define GL_DRAW_BUFFER11_ARB 0x8830 #define GL_DRAW_BUFFER12_ARB 0x8831 #define GL_DRAW_BUFFER13_ARB 0x8832 #define GL_DRAW_BUFFER14_ARB 0x8833 #define GL_DRAW_BUFFER15_ARB 0x8834 typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawBuffersARB (GLsizei n, const GLenum *bufs); #endif #endif /* GL_ARB_draw_buffers */ #ifndef GL_ARB_draw_buffers_blend #define GL_ARB_draw_buffers_blend 1 typedef void (APIENTRYP PFNGLBLENDEQUATIONIARBPROC) (GLuint buf, GLenum mode); typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIARBPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); typedef void (APIENTRYP PFNGLBLENDFUNCIARBPROC) (GLuint buf, GLenum src, GLenum dst); typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIARBPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendEquationiARB (GLuint buf, GLenum mode); GLAPI void APIENTRY glBlendEquationSeparateiARB (GLuint buf, GLenum modeRGB, GLenum modeAlpha); GLAPI void APIENTRY glBlendFunciARB (GLuint buf, GLenum src, GLenum dst); GLAPI void APIENTRY glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); #endif #endif /* GL_ARB_draw_buffers_blend */ #ifndef GL_ARB_draw_elements_base_vertex #define GL_ARB_draw_elements_base_vertex 1 #endif /* GL_ARB_draw_elements_base_vertex */ #ifndef GL_ARB_draw_indirect #define GL_ARB_draw_indirect 1 #endif /* GL_ARB_draw_indirect */ #ifndef GL_ARB_draw_instanced #define GL_ARB_draw_instanced 1 typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDARBPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count, GLsizei primcount); GLAPI void APIENTRY glDrawElementsInstancedARB (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); #endif #endif /* GL_ARB_draw_instanced */ #ifndef GL_ARB_enhanced_layouts #define GL_ARB_enhanced_layouts 1 #endif /* GL_ARB_enhanced_layouts */ #ifndef GL_ARB_explicit_attrib_location #define GL_ARB_explicit_attrib_location 1 #endif /* GL_ARB_explicit_attrib_location */ #ifndef GL_ARB_explicit_uniform_location #define GL_ARB_explicit_uniform_location 1 #endif /* GL_ARB_explicit_uniform_location */ #ifndef GL_ARB_fragment_coord_conventions #define GL_ARB_fragment_coord_conventions 1 #endif /* GL_ARB_fragment_coord_conventions */ #ifndef GL_ARB_fragment_layer_viewport #define GL_ARB_fragment_layer_viewport 1 #endif /* GL_ARB_fragment_layer_viewport */ #ifndef GL_ARB_fragment_program #define GL_ARB_fragment_program 1 #define GL_FRAGMENT_PROGRAM_ARB 0x8804 #define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 #define GL_PROGRAM_LENGTH_ARB 0x8627 #define GL_PROGRAM_FORMAT_ARB 0x8876 #define GL_PROGRAM_BINDING_ARB 0x8677 #define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 #define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 #define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 #define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 #define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 #define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 #define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 #define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 #define GL_PROGRAM_PARAMETERS_ARB 0x88A8 #define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 #define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA #define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB #define GL_PROGRAM_ATTRIBS_ARB 0x88AC #define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD #define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE #define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF #define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 #define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 #define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 #define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 #define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 #define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 #define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 #define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 #define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A #define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B #define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C #define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D #define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E #define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F #define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 #define GL_PROGRAM_STRING_ARB 0x8628 #define GL_PROGRAM_ERROR_POSITION_ARB 0x864B #define GL_CURRENT_MATRIX_ARB 0x8641 #define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 #define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 #define GL_MAX_PROGRAM_MATRICES_ARB 0x862F #define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E #define GL_MAX_TEXTURE_COORDS_ARB 0x8871 #define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 #define GL_PROGRAM_ERROR_STRING_ARB 0x8874 #define GL_MATRIX0_ARB 0x88C0 #define GL_MATRIX1_ARB 0x88C1 #define GL_MATRIX2_ARB 0x88C2 #define GL_MATRIX3_ARB 0x88C3 #define GL_MATRIX4_ARB 0x88C4 #define GL_MATRIX5_ARB 0x88C5 #define GL_MATRIX6_ARB 0x88C6 #define GL_MATRIX7_ARB 0x88C7 #define GL_MATRIX8_ARB 0x88C8 #define GL_MATRIX9_ARB 0x88C9 #define GL_MATRIX10_ARB 0x88CA #define GL_MATRIX11_ARB 0x88CB #define GL_MATRIX12_ARB 0x88CC #define GL_MATRIX13_ARB 0x88CD #define GL_MATRIX14_ARB 0x88CE #define GL_MATRIX15_ARB 0x88CF #define GL_MATRIX16_ARB 0x88D0 #define GL_MATRIX17_ARB 0x88D1 #define GL_MATRIX18_ARB 0x88D2 #define GL_MATRIX19_ARB 0x88D3 #define GL_MATRIX20_ARB 0x88D4 #define GL_MATRIX21_ARB 0x88D5 #define GL_MATRIX22_ARB 0x88D6 #define GL_MATRIX23_ARB 0x88D7 #define GL_MATRIX24_ARB 0x88D8 #define GL_MATRIX25_ARB 0x88D9 #define GL_MATRIX26_ARB 0x88DA #define GL_MATRIX27_ARB 0x88DB #define GL_MATRIX28_ARB 0x88DC #define GL_MATRIX29_ARB 0x88DD #define GL_MATRIX30_ARB 0x88DE #define GL_MATRIX31_ARB 0x88DF typedef void (APIENTRYP PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const void *string); typedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program); typedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs); typedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs); typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, void *string); typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC) (GLuint program); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glProgramStringARB (GLenum target, GLenum format, GLsizei len, const void *string); GLAPI void APIENTRY glBindProgramARB (GLenum target, GLuint program); GLAPI void APIENTRY glDeleteProgramsARB (GLsizei n, const GLuint *programs); GLAPI void APIENTRY glGenProgramsARB (GLsizei n, GLuint *programs); GLAPI void APIENTRY glProgramEnvParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glProgramEnvParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); GLAPI void APIENTRY glProgramEnvParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glProgramEnvParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); GLAPI void APIENTRY glProgramLocalParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glProgramLocalParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); GLAPI void APIENTRY glProgramLocalParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glProgramLocalParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); GLAPI void APIENTRY glGetProgramEnvParameterdvARB (GLenum target, GLuint index, GLdouble *params); GLAPI void APIENTRY glGetProgramEnvParameterfvARB (GLenum target, GLuint index, GLfloat *params); GLAPI void APIENTRY glGetProgramLocalParameterdvARB (GLenum target, GLuint index, GLdouble *params); GLAPI void APIENTRY glGetProgramLocalParameterfvARB (GLenum target, GLuint index, GLfloat *params); GLAPI void APIENTRY glGetProgramivARB (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetProgramStringARB (GLenum target, GLenum pname, void *string); GLAPI GLboolean APIENTRY glIsProgramARB (GLuint program); #endif #endif /* GL_ARB_fragment_program */ #ifndef GL_ARB_fragment_program_shadow #define GL_ARB_fragment_program_shadow 1 #endif /* GL_ARB_fragment_program_shadow */ #ifndef GL_ARB_fragment_shader #define GL_ARB_fragment_shader 1 #define GL_FRAGMENT_SHADER_ARB 0x8B30 #define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 #define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B #endif /* GL_ARB_fragment_shader */ #ifndef GL_ARB_fragment_shader_interlock #define GL_ARB_fragment_shader_interlock 1 #endif /* GL_ARB_fragment_shader_interlock */ #ifndef GL_ARB_framebuffer_no_attachments #define GL_ARB_framebuffer_no_attachments 1 #endif /* GL_ARB_framebuffer_no_attachments */ #ifndef GL_ARB_framebuffer_object #define GL_ARB_framebuffer_object 1 #endif /* GL_ARB_framebuffer_object */ #ifndef GL_ARB_framebuffer_sRGB #define GL_ARB_framebuffer_sRGB 1 #endif /* GL_ARB_framebuffer_sRGB */ #ifndef GL_ARB_geometry_shader4 #define GL_ARB_geometry_shader4 1 #define GL_LINES_ADJACENCY_ARB 0x000A #define GL_LINE_STRIP_ADJACENCY_ARB 0x000B #define GL_TRIANGLES_ADJACENCY_ARB 0x000C #define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000D #define GL_PROGRAM_POINT_SIZE_ARB 0x8642 #define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29 #define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7 #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8 #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9 #define GL_GEOMETRY_SHADER_ARB 0x8DD9 #define GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA #define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB #define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC #define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD #define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE #define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF #define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0 #define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1 typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIARBPROC) (GLuint program, GLenum pname, GLint value); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glProgramParameteriARB (GLuint program, GLenum pname, GLint value); GLAPI void APIENTRY glFramebufferTextureARB (GLenum target, GLenum attachment, GLuint texture, GLint level); GLAPI void APIENTRY glFramebufferTextureLayerARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); GLAPI void APIENTRY glFramebufferTextureFaceARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); #endif #endif /* GL_ARB_geometry_shader4 */ #ifndef GL_ARB_get_program_binary #define GL_ARB_get_program_binary 1 #endif /* GL_ARB_get_program_binary */ #ifndef GL_ARB_get_texture_sub_image #define GL_ARB_get_texture_sub_image 1 #endif /* GL_ARB_get_texture_sub_image */ #ifndef GL_ARB_gl_spirv #define GL_ARB_gl_spirv 1 #define GL_SHADER_BINARY_FORMAT_SPIR_V_ARB 0x9551 #define GL_SPIR_V_BINARY_ARB 0x9552 typedef void (APIENTRYP PFNGLSPECIALIZESHADERARBPROC) (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSpecializeShaderARB (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue); #endif #endif /* GL_ARB_gl_spirv */ #ifndef GL_ARB_gpu_shader5 #define GL_ARB_gpu_shader5 1 #endif /* GL_ARB_gpu_shader5 */ #ifndef GL_ARB_gpu_shader_fp64 #define GL_ARB_gpu_shader_fp64 1 #endif /* GL_ARB_gpu_shader_fp64 */ #ifndef GL_ARB_gpu_shader_int64 #define GL_ARB_gpu_shader_int64 1 #define GL_INT64_ARB 0x140E #define GL_INT64_VEC2_ARB 0x8FE9 #define GL_INT64_VEC3_ARB 0x8FEA #define GL_INT64_VEC4_ARB 0x8FEB #define GL_UNSIGNED_INT64_VEC2_ARB 0x8FF5 #define GL_UNSIGNED_INT64_VEC3_ARB 0x8FF6 #define GL_UNSIGNED_INT64_VEC4_ARB 0x8FF7 typedef void (APIENTRYP PFNGLUNIFORM1I64ARBPROC) (GLint location, GLint64 x); typedef void (APIENTRYP PFNGLUNIFORM2I64ARBPROC) (GLint location, GLint64 x, GLint64 y); typedef void (APIENTRYP PFNGLUNIFORM3I64ARBPROC) (GLint location, GLint64 x, GLint64 y, GLint64 z); typedef void (APIENTRYP PFNGLUNIFORM4I64ARBPROC) (GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); typedef void (APIENTRYP PFNGLUNIFORM1I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value); typedef void (APIENTRYP PFNGLUNIFORM2I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value); typedef void (APIENTRYP PFNGLUNIFORM3I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value); typedef void (APIENTRYP PFNGLUNIFORM4I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value); typedef void (APIENTRYP PFNGLUNIFORM1UI64ARBPROC) (GLint location, GLuint64 x); typedef void (APIENTRYP PFNGLUNIFORM2UI64ARBPROC) (GLint location, GLuint64 x, GLuint64 y); typedef void (APIENTRYP PFNGLUNIFORM3UI64ARBPROC) (GLint location, GLuint64 x, GLuint64 y, GLuint64 z); typedef void (APIENTRYP PFNGLUNIFORM4UI64ARBPROC) (GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); typedef void (APIENTRYP PFNGLUNIFORM1UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); typedef void (APIENTRYP PFNGLUNIFORM2UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); typedef void (APIENTRYP PFNGLUNIFORM3UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); typedef void (APIENTRYP PFNGLUNIFORM4UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); typedef void (APIENTRYP PFNGLGETUNIFORMI64VARBPROC) (GLuint program, GLint location, GLint64 *params); typedef void (APIENTRYP PFNGLGETUNIFORMUI64VARBPROC) (GLuint program, GLint location, GLuint64 *params); typedef void (APIENTRYP PFNGLGETNUNIFORMI64VARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint64 *params); typedef void (APIENTRYP PFNGLGETNUNIFORMUI64VARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint64 *params); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64ARBPROC) (GLuint program, GLint location, GLint64 x); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64ARBPROC) (GLuint program, GLint location, GLint64 x, GLint64 y); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64ARBPROC) (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64ARBPROC) (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64ARBPROC) (GLuint program, GLint location, GLuint64 x); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64ARBPROC) (GLuint program, GLint location, GLuint64 x, GLuint64 y); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64ARBPROC) (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64ARBPROC) (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glUniform1i64ARB (GLint location, GLint64 x); GLAPI void APIENTRY glUniform2i64ARB (GLint location, GLint64 x, GLint64 y); GLAPI void APIENTRY glUniform3i64ARB (GLint location, GLint64 x, GLint64 y, GLint64 z); GLAPI void APIENTRY glUniform4i64ARB (GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); GLAPI void APIENTRY glUniform1i64vARB (GLint location, GLsizei count, const GLint64 *value); GLAPI void APIENTRY glUniform2i64vARB (GLint location, GLsizei count, const GLint64 *value); GLAPI void APIENTRY glUniform3i64vARB (GLint location, GLsizei count, const GLint64 *value); GLAPI void APIENTRY glUniform4i64vARB (GLint location, GLsizei count, const GLint64 *value); GLAPI void APIENTRY glUniform1ui64ARB (GLint location, GLuint64 x); GLAPI void APIENTRY glUniform2ui64ARB (GLint location, GLuint64 x, GLuint64 y); GLAPI void APIENTRY glUniform3ui64ARB (GLint location, GLuint64 x, GLuint64 y, GLuint64 z); GLAPI void APIENTRY glUniform4ui64ARB (GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); GLAPI void APIENTRY glUniform1ui64vARB (GLint location, GLsizei count, const GLuint64 *value); GLAPI void APIENTRY glUniform2ui64vARB (GLint location, GLsizei count, const GLuint64 *value); GLAPI void APIENTRY glUniform3ui64vARB (GLint location, GLsizei count, const GLuint64 *value); GLAPI void APIENTRY glUniform4ui64vARB (GLint location, GLsizei count, const GLuint64 *value); GLAPI void APIENTRY glGetUniformi64vARB (GLuint program, GLint location, GLint64 *params); GLAPI void APIENTRY glGetUniformui64vARB (GLuint program, GLint location, GLuint64 *params); GLAPI void APIENTRY glGetnUniformi64vARB (GLuint program, GLint location, GLsizei bufSize, GLint64 *params); GLAPI void APIENTRY glGetnUniformui64vARB (GLuint program, GLint location, GLsizei bufSize, GLuint64 *params); GLAPI void APIENTRY glProgramUniform1i64ARB (GLuint program, GLint location, GLint64 x); GLAPI void APIENTRY glProgramUniform2i64ARB (GLuint program, GLint location, GLint64 x, GLint64 y); GLAPI void APIENTRY glProgramUniform3i64ARB (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z); GLAPI void APIENTRY glProgramUniform4i64ARB (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); GLAPI void APIENTRY glProgramUniform1i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value); GLAPI void APIENTRY glProgramUniform2i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value); GLAPI void APIENTRY glProgramUniform3i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value); GLAPI void APIENTRY glProgramUniform4i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value); GLAPI void APIENTRY glProgramUniform1ui64ARB (GLuint program, GLint location, GLuint64 x); GLAPI void APIENTRY glProgramUniform2ui64ARB (GLuint program, GLint location, GLuint64 x, GLuint64 y); GLAPI void APIENTRY glProgramUniform3ui64ARB (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z); GLAPI void APIENTRY glProgramUniform4ui64ARB (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); GLAPI void APIENTRY glProgramUniform1ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value); GLAPI void APIENTRY glProgramUniform2ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value); GLAPI void APIENTRY glProgramUniform3ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value); GLAPI void APIENTRY glProgramUniform4ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value); #endif #endif /* GL_ARB_gpu_shader_int64 */ #ifndef GL_ARB_half_float_pixel #define GL_ARB_half_float_pixel 1 typedef khronos_uint16_t GLhalfARB; #define GL_HALF_FLOAT_ARB 0x140B #endif /* GL_ARB_half_float_pixel */ #ifndef GL_ARB_half_float_vertex #define GL_ARB_half_float_vertex 1 #endif /* GL_ARB_half_float_vertex */ #ifndef GL_ARB_imaging #define GL_ARB_imaging 1 #define GL_CONVOLUTION_BORDER_MODE 0x8013 #define GL_CONVOLUTION_FILTER_SCALE 0x8014 #define GL_CONVOLUTION_FILTER_BIAS 0x8015 #define GL_REDUCE 0x8016 #define GL_CONVOLUTION_FORMAT 0x8017 #define GL_CONVOLUTION_WIDTH 0x8018 #define GL_CONVOLUTION_HEIGHT 0x8019 #define GL_MAX_CONVOLUTION_WIDTH 0x801A #define GL_MAX_CONVOLUTION_HEIGHT 0x801B #define GL_POST_CONVOLUTION_RED_SCALE 0x801C #define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D #define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E #define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F #define GL_POST_CONVOLUTION_RED_BIAS 0x8020 #define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 #define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 #define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 #define GL_HISTOGRAM_WIDTH 0x8026 #define GL_HISTOGRAM_FORMAT 0x8027 #define GL_HISTOGRAM_RED_SIZE 0x8028 #define GL_HISTOGRAM_GREEN_SIZE 0x8029 #define GL_HISTOGRAM_BLUE_SIZE 0x802A #define GL_HISTOGRAM_ALPHA_SIZE 0x802B #define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C #define GL_HISTOGRAM_SINK 0x802D #define GL_MINMAX_FORMAT 0x802F #define GL_MINMAX_SINK 0x8030 #define GL_TABLE_TOO_LARGE 0x8031 #define GL_COLOR_MATRIX 0x80B1 #define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 #define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 #define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 #define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 #define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 #define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 #define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 #define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 #define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA #define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB #define GL_COLOR_TABLE_SCALE 0x80D6 #define GL_COLOR_TABLE_BIAS 0x80D7 #define GL_COLOR_TABLE_FORMAT 0x80D8 #define GL_COLOR_TABLE_WIDTH 0x80D9 #define GL_COLOR_TABLE_RED_SIZE 0x80DA #define GL_COLOR_TABLE_GREEN_SIZE 0x80DB #define GL_COLOR_TABLE_BLUE_SIZE 0x80DC #define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD #define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE #define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF #define GL_CONSTANT_BORDER 0x8151 #define GL_REPLICATE_BORDER 0x8153 #define GL_CONVOLUTION_BORDER_COLOR 0x8154 typedef void (APIENTRYP PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); typedef void (APIENTRYP PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, void *table); typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params); typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params); typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, void *image); typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); typedef void (APIENTRYP PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); typedef void (APIENTRYP PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink); typedef void (APIENTRYP PFNGLRESETHISTOGRAMPROC) (GLenum target); typedef void (APIENTRYP PFNGLRESETMINMAXPROC) (GLenum target); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); GLAPI void APIENTRY glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glGetColorTable (GLenum target, GLenum format, GLenum type, void *table); GLAPI void APIENTRY glGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); GLAPI void APIENTRY glCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); GLAPI void APIENTRY glConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); GLAPI void APIENTRY glConvolutionParameterf (GLenum target, GLenum pname, GLfloat params); GLAPI void APIENTRY glConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glConvolutionParameteri (GLenum target, GLenum pname, GLint params); GLAPI void APIENTRY glConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glGetConvolutionFilter (GLenum target, GLenum format, GLenum type, void *image); GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetSeparableFilter (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); GLAPI void APIENTRY glSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); GLAPI void APIENTRY glGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); GLAPI void APIENTRY glGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); GLAPI void APIENTRY glMinmax (GLenum target, GLenum internalformat, GLboolean sink); GLAPI void APIENTRY glResetHistogram (GLenum target); GLAPI void APIENTRY glResetMinmax (GLenum target); #endif #endif /* GL_ARB_imaging */ #ifndef GL_ARB_indirect_parameters #define GL_ARB_indirect_parameters 1 #define GL_PARAMETER_BUFFER_ARB 0x80EE #define GL_PARAMETER_BUFFER_BINDING_ARB 0x80EF typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC) (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC) (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMultiDrawArraysIndirectCountARB (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); GLAPI void APIENTRY glMultiDrawElementsIndirectCountARB (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); #endif #endif /* GL_ARB_indirect_parameters */ #ifndef GL_ARB_instanced_arrays #define GL_ARB_instanced_arrays 1 #define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexAttribDivisorARB (GLuint index, GLuint divisor); #endif #endif /* GL_ARB_instanced_arrays */ #ifndef GL_ARB_internalformat_query #define GL_ARB_internalformat_query 1 #endif /* GL_ARB_internalformat_query */ #ifndef GL_ARB_internalformat_query2 #define GL_ARB_internalformat_query2 1 #define GL_SRGB_DECODE_ARB 0x8299 #define GL_VIEW_CLASS_EAC_R11 0x9383 #define GL_VIEW_CLASS_EAC_RG11 0x9384 #define GL_VIEW_CLASS_ETC2_RGB 0x9385 #define GL_VIEW_CLASS_ETC2_RGBA 0x9386 #define GL_VIEW_CLASS_ETC2_EAC_RGBA 0x9387 #define GL_VIEW_CLASS_ASTC_4x4_RGBA 0x9388 #define GL_VIEW_CLASS_ASTC_5x4_RGBA 0x9389 #define GL_VIEW_CLASS_ASTC_5x5_RGBA 0x938A #define GL_VIEW_CLASS_ASTC_6x5_RGBA 0x938B #define GL_VIEW_CLASS_ASTC_6x6_RGBA 0x938C #define GL_VIEW_CLASS_ASTC_8x5_RGBA 0x938D #define GL_VIEW_CLASS_ASTC_8x6_RGBA 0x938E #define GL_VIEW_CLASS_ASTC_8x8_RGBA 0x938F #define GL_VIEW_CLASS_ASTC_10x5_RGBA 0x9390 #define GL_VIEW_CLASS_ASTC_10x6_RGBA 0x9391 #define GL_VIEW_CLASS_ASTC_10x8_RGBA 0x9392 #define GL_VIEW_CLASS_ASTC_10x10_RGBA 0x9393 #define GL_VIEW_CLASS_ASTC_12x10_RGBA 0x9394 #define GL_VIEW_CLASS_ASTC_12x12_RGBA 0x9395 #endif /* GL_ARB_internalformat_query2 */ #ifndef GL_ARB_invalidate_subdata #define GL_ARB_invalidate_subdata 1 #endif /* GL_ARB_invalidate_subdata */ #ifndef GL_ARB_map_buffer_alignment #define GL_ARB_map_buffer_alignment 1 #endif /* GL_ARB_map_buffer_alignment */ #ifndef GL_ARB_map_buffer_range #define GL_ARB_map_buffer_range 1 #endif /* GL_ARB_map_buffer_range */ #ifndef GL_ARB_matrix_palette #define GL_ARB_matrix_palette 1 #define GL_MATRIX_PALETTE_ARB 0x8840 #define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 #define GL_MAX_PALETTE_MATRICES_ARB 0x8842 #define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 #define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 #define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 #define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 #define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 #define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 #define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 typedef void (APIENTRYP PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index); typedef void (APIENTRYP PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices); typedef void (APIENTRYP PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices); typedef void (APIENTRYP PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices); typedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint index); GLAPI void APIENTRY glMatrixIndexubvARB (GLint size, const GLubyte *indices); GLAPI void APIENTRY glMatrixIndexusvARB (GLint size, const GLushort *indices); GLAPI void APIENTRY glMatrixIndexuivARB (GLint size, const GLuint *indices); GLAPI void APIENTRY glMatrixIndexPointerARB (GLint size, GLenum type, GLsizei stride, const void *pointer); #endif #endif /* GL_ARB_matrix_palette */ #ifndef GL_ARB_multi_bind #define GL_ARB_multi_bind 1 #endif /* GL_ARB_multi_bind */ #ifndef GL_ARB_multi_draw_indirect #define GL_ARB_multi_draw_indirect 1 #endif /* GL_ARB_multi_draw_indirect */ #ifndef GL_ARB_multisample #define GL_ARB_multisample 1 #define GL_MULTISAMPLE_ARB 0x809D #define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E #define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F #define GL_SAMPLE_COVERAGE_ARB 0x80A0 #define GL_SAMPLE_BUFFERS_ARB 0x80A8 #define GL_SAMPLES_ARB 0x80A9 #define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA #define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB #define GL_MULTISAMPLE_BIT_ARB 0x20000000 typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLfloat value, GLboolean invert); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSampleCoverageARB (GLfloat value, GLboolean invert); #endif #endif /* GL_ARB_multisample */ #ifndef GL_ARB_multitexture #define GL_ARB_multitexture 1 #define GL_TEXTURE0_ARB 0x84C0 #define GL_TEXTURE1_ARB 0x84C1 #define GL_TEXTURE2_ARB 0x84C2 #define GL_TEXTURE3_ARB 0x84C3 #define GL_TEXTURE4_ARB 0x84C4 #define GL_TEXTURE5_ARB 0x84C5 #define GL_TEXTURE6_ARB 0x84C6 #define GL_TEXTURE7_ARB 0x84C7 #define GL_TEXTURE8_ARB 0x84C8 #define GL_TEXTURE9_ARB 0x84C9 #define GL_TEXTURE10_ARB 0x84CA #define GL_TEXTURE11_ARB 0x84CB #define GL_TEXTURE12_ARB 0x84CC #define GL_TEXTURE13_ARB 0x84CD #define GL_TEXTURE14_ARB 0x84CE #define GL_TEXTURE15_ARB 0x84CF #define GL_TEXTURE16_ARB 0x84D0 #define GL_TEXTURE17_ARB 0x84D1 #define GL_TEXTURE18_ARB 0x84D2 #define GL_TEXTURE19_ARB 0x84D3 #define GL_TEXTURE20_ARB 0x84D4 #define GL_TEXTURE21_ARB 0x84D5 #define GL_TEXTURE22_ARB 0x84D6 #define GL_TEXTURE23_ARB 0x84D7 #define GL_TEXTURE24_ARB 0x84D8 #define GL_TEXTURE25_ARB 0x84D9 #define GL_TEXTURE26_ARB 0x84DA #define GL_TEXTURE27_ARB 0x84DB #define GL_TEXTURE28_ARB 0x84DC #define GL_TEXTURE29_ARB 0x84DD #define GL_TEXTURE30_ARB 0x84DE #define GL_TEXTURE31_ARB 0x84DF #define GL_ACTIVE_TEXTURE_ARB 0x84E0 #define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 #define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glActiveTextureARB (GLenum texture); GLAPI void APIENTRY glClientActiveTextureARB (GLenum texture); GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum target, GLdouble s); GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum target, const GLdouble *v); GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum target, GLfloat s); GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum target, const GLfloat *v); GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum target, GLint s); GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum target, const GLint *v); GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum target, GLshort s); GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum target, const GLshort *v); GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum target, GLdouble s, GLdouble t); GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum target, const GLdouble *v); GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum target, GLfloat s, GLfloat t); GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum target, const GLfloat *v); GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum target, GLint s, GLint t); GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum target, const GLint *v); GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum target, GLshort s, GLshort t); GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum target, const GLshort *v); GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r); GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum target, const GLdouble *v); GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r); GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum target, const GLfloat *v); GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum target, GLint s, GLint t, GLint r); GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum target, const GLint *v); GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum target, GLshort s, GLshort t, GLshort r); GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum target, const GLshort *v); GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum target, const GLdouble *v); GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum target, const GLfloat *v); GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum target, GLint s, GLint t, GLint r, GLint q); GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum target, const GLint *v); GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum target, const GLshort *v); #endif #endif /* GL_ARB_multitexture */ #ifndef GL_ARB_occlusion_query #define GL_ARB_occlusion_query 1 #define GL_QUERY_COUNTER_BITS_ARB 0x8864 #define GL_CURRENT_QUERY_ARB 0x8865 #define GL_QUERY_RESULT_ARB 0x8866 #define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 #define GL_SAMPLES_PASSED_ARB 0x8914 typedef void (APIENTRYP PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint *ids); typedef void (APIENTRYP PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint *ids); typedef GLboolean (APIENTRYP PFNGLISQUERYARBPROC) (GLuint id); typedef void (APIENTRYP PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id); typedef void (APIENTRYP PFNGLENDQUERYARBPROC) (GLenum target); typedef void (APIENTRYP PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGenQueriesARB (GLsizei n, GLuint *ids); GLAPI void APIENTRY glDeleteQueriesARB (GLsizei n, const GLuint *ids); GLAPI GLboolean APIENTRY glIsQueryARB (GLuint id); GLAPI void APIENTRY glBeginQueryARB (GLenum target, GLuint id); GLAPI void APIENTRY glEndQueryARB (GLenum target); GLAPI void APIENTRY glGetQueryivARB (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetQueryObjectivARB (GLuint id, GLenum pname, GLint *params); GLAPI void APIENTRY glGetQueryObjectuivARB (GLuint id, GLenum pname, GLuint *params); #endif #endif /* GL_ARB_occlusion_query */ #ifndef GL_ARB_occlusion_query2 #define GL_ARB_occlusion_query2 1 #endif /* GL_ARB_occlusion_query2 */ #ifndef GL_ARB_parallel_shader_compile #define GL_ARB_parallel_shader_compile 1 #define GL_MAX_SHADER_COMPILER_THREADS_ARB 0x91B0 #define GL_COMPLETION_STATUS_ARB 0x91B1 typedef void (APIENTRYP PFNGLMAXSHADERCOMPILERTHREADSARBPROC) (GLuint count); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMaxShaderCompilerThreadsARB (GLuint count); #endif #endif /* GL_ARB_parallel_shader_compile */ #ifndef GL_ARB_pipeline_statistics_query #define GL_ARB_pipeline_statistics_query 1 #define GL_VERTICES_SUBMITTED_ARB 0x82EE #define GL_PRIMITIVES_SUBMITTED_ARB 0x82EF #define GL_VERTEX_SHADER_INVOCATIONS_ARB 0x82F0 #define GL_TESS_CONTROL_SHADER_PATCHES_ARB 0x82F1 #define GL_TESS_EVALUATION_SHADER_INVOCATIONS_ARB 0x82F2 #define GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED_ARB 0x82F3 #define GL_FRAGMENT_SHADER_INVOCATIONS_ARB 0x82F4 #define GL_COMPUTE_SHADER_INVOCATIONS_ARB 0x82F5 #define GL_CLIPPING_INPUT_PRIMITIVES_ARB 0x82F6 #define GL_CLIPPING_OUTPUT_PRIMITIVES_ARB 0x82F7 #endif /* GL_ARB_pipeline_statistics_query */ #ifndef GL_ARB_pixel_buffer_object #define GL_ARB_pixel_buffer_object 1 #define GL_PIXEL_PACK_BUFFER_ARB 0x88EB #define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC #define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED #define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF #endif /* GL_ARB_pixel_buffer_object */ #ifndef GL_ARB_point_parameters #define GL_ARB_point_parameters 1 #define GL_POINT_SIZE_MIN_ARB 0x8126 #define GL_POINT_SIZE_MAX_ARB 0x8127 #define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 #define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 typedef void (APIENTRYP PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPointParameterfARB (GLenum pname, GLfloat param); GLAPI void APIENTRY glPointParameterfvARB (GLenum pname, const GLfloat *params); #endif #endif /* GL_ARB_point_parameters */ #ifndef GL_ARB_point_sprite #define GL_ARB_point_sprite 1 #define GL_POINT_SPRITE_ARB 0x8861 #define GL_COORD_REPLACE_ARB 0x8862 #endif /* GL_ARB_point_sprite */ #ifndef GL_ARB_polygon_offset_clamp #define GL_ARB_polygon_offset_clamp 1 #endif /* GL_ARB_polygon_offset_clamp */ #ifndef GL_ARB_post_depth_coverage #define GL_ARB_post_depth_coverage 1 #endif /* GL_ARB_post_depth_coverage */ #ifndef GL_ARB_program_interface_query #define GL_ARB_program_interface_query 1 #endif /* GL_ARB_program_interface_query */ #ifndef GL_ARB_provoking_vertex #define GL_ARB_provoking_vertex 1 #endif /* GL_ARB_provoking_vertex */ #ifndef GL_ARB_query_buffer_object #define GL_ARB_query_buffer_object 1 #endif /* GL_ARB_query_buffer_object */ #ifndef GL_ARB_robust_buffer_access_behavior #define GL_ARB_robust_buffer_access_behavior 1 #endif /* GL_ARB_robust_buffer_access_behavior */ #ifndef GL_ARB_robustness #define GL_ARB_robustness 1 #define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 #define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 #define GL_GUILTY_CONTEXT_RESET_ARB 0x8253 #define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 #define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 #define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 #define GL_NO_RESET_NOTIFICATION_ARB 0x8261 typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSARBPROC) (void); typedef void (APIENTRYP PFNGLGETNTEXIMAGEARBPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img); typedef void (APIENTRYP PFNGLREADNPIXELSARBPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLsizei bufSize, void *img); typedef void (APIENTRYP PFNGLGETNUNIFORMFVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); typedef void (APIENTRYP PFNGLGETNUNIFORMIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); typedef void (APIENTRYP PFNGLGETNUNIFORMUIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params); typedef void (APIENTRYP PFNGLGETNUNIFORMDVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); typedef void (APIENTRYP PFNGLGETNMAPDVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); typedef void (APIENTRYP PFNGLGETNMAPFVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); typedef void (APIENTRYP PFNGLGETNMAPIVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint *v); typedef void (APIENTRYP PFNGLGETNPIXELMAPFVARBPROC) (GLenum map, GLsizei bufSize, GLfloat *values); typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVARBPROC) (GLenum map, GLsizei bufSize, GLuint *values); typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVARBPROC) (GLenum map, GLsizei bufSize, GLushort *values); typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEARBPROC) (GLsizei bufSize, GLubyte *pattern); typedef void (APIENTRYP PFNGLGETNCOLORTABLEARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); typedef void (APIENTRYP PFNGLGETNHISTOGRAMARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); typedef void (APIENTRYP PFNGLGETNMINMAXARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLenum APIENTRY glGetGraphicsResetStatusARB (void); GLAPI void APIENTRY glGetnTexImageARB (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img); GLAPI void APIENTRY glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); GLAPI void APIENTRY glGetnCompressedTexImageARB (GLenum target, GLint lod, GLsizei bufSize, void *img); GLAPI void APIENTRY glGetnUniformfvARB (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); GLAPI void APIENTRY glGetnUniformivARB (GLuint program, GLint location, GLsizei bufSize, GLint *params); GLAPI void APIENTRY glGetnUniformuivARB (GLuint program, GLint location, GLsizei bufSize, GLuint *params); GLAPI void APIENTRY glGetnUniformdvARB (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); GLAPI void APIENTRY glGetnMapdvARB (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); GLAPI void APIENTRY glGetnMapfvARB (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); GLAPI void APIENTRY glGetnMapivARB (GLenum target, GLenum query, GLsizei bufSize, GLint *v); GLAPI void APIENTRY glGetnPixelMapfvARB (GLenum map, GLsizei bufSize, GLfloat *values); GLAPI void APIENTRY glGetnPixelMapuivARB (GLenum map, GLsizei bufSize, GLuint *values); GLAPI void APIENTRY glGetnPixelMapusvARB (GLenum map, GLsizei bufSize, GLushort *values); GLAPI void APIENTRY glGetnPolygonStippleARB (GLsizei bufSize, GLubyte *pattern); GLAPI void APIENTRY glGetnColorTableARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); GLAPI void APIENTRY glGetnConvolutionFilterARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); GLAPI void APIENTRY glGetnSeparableFilterARB (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); GLAPI void APIENTRY glGetnHistogramARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); GLAPI void APIENTRY glGetnMinmaxARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); #endif #endif /* GL_ARB_robustness */ #ifndef GL_ARB_robustness_isolation #define GL_ARB_robustness_isolation 1 #endif /* GL_ARB_robustness_isolation */ #ifndef GL_ARB_sample_locations #define GL_ARB_sample_locations 1 #define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_ARB 0x933D #define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_ARB 0x933E #define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_ARB 0x933F #define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_ARB 0x9340 #define GL_SAMPLE_LOCATION_ARB 0x8E50 #define GL_PROGRAMMABLE_SAMPLE_LOCATION_ARB 0x9341 #define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_ARB 0x9342 #define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_ARB 0x9343 typedef void (APIENTRYP PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC) (GLenum target, GLuint start, GLsizei count, const GLfloat *v); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC) (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); typedef void (APIENTRYP PFNGLEVALUATEDEPTHVALUESARBPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFramebufferSampleLocationsfvARB (GLenum target, GLuint start, GLsizei count, const GLfloat *v); GLAPI void APIENTRY glNamedFramebufferSampleLocationsfvARB (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); GLAPI void APIENTRY glEvaluateDepthValuesARB (void); #endif #endif /* GL_ARB_sample_locations */ #ifndef GL_ARB_sample_shading #define GL_ARB_sample_shading 1 #define GL_SAMPLE_SHADING_ARB 0x8C36 #define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37 typedef void (APIENTRYP PFNGLMINSAMPLESHADINGARBPROC) (GLfloat value); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMinSampleShadingARB (GLfloat value); #endif #endif /* GL_ARB_sample_shading */ #ifndef GL_ARB_sampler_objects #define GL_ARB_sampler_objects 1 #endif /* GL_ARB_sampler_objects */ #ifndef GL_ARB_seamless_cube_map #define GL_ARB_seamless_cube_map 1 #endif /* GL_ARB_seamless_cube_map */ #ifndef GL_ARB_seamless_cubemap_per_texture #define GL_ARB_seamless_cubemap_per_texture 1 #endif /* GL_ARB_seamless_cubemap_per_texture */ #ifndef GL_ARB_separate_shader_objects #define GL_ARB_separate_shader_objects 1 #endif /* GL_ARB_separate_shader_objects */ #ifndef GL_ARB_shader_atomic_counter_ops #define GL_ARB_shader_atomic_counter_ops 1 #endif /* GL_ARB_shader_atomic_counter_ops */ #ifndef GL_ARB_shader_atomic_counters #define GL_ARB_shader_atomic_counters 1 #endif /* GL_ARB_shader_atomic_counters */ #ifndef GL_ARB_shader_ballot #define GL_ARB_shader_ballot 1 #endif /* GL_ARB_shader_ballot */ #ifndef GL_ARB_shader_bit_encoding #define GL_ARB_shader_bit_encoding 1 #endif /* GL_ARB_shader_bit_encoding */ #ifndef GL_ARB_shader_clock #define GL_ARB_shader_clock 1 #endif /* GL_ARB_shader_clock */ #ifndef GL_ARB_shader_draw_parameters #define GL_ARB_shader_draw_parameters 1 #endif /* GL_ARB_shader_draw_parameters */ #ifndef GL_ARB_shader_group_vote #define GL_ARB_shader_group_vote 1 #endif /* GL_ARB_shader_group_vote */ #ifndef GL_ARB_shader_image_load_store #define GL_ARB_shader_image_load_store 1 #endif /* GL_ARB_shader_image_load_store */ #ifndef GL_ARB_shader_image_size #define GL_ARB_shader_image_size 1 #endif /* GL_ARB_shader_image_size */ #ifndef GL_ARB_shader_objects #define GL_ARB_shader_objects 1 #ifdef __APPLE__ typedef void *GLhandleARB; #else typedef unsigned int GLhandleARB; #endif typedef char GLcharARB; #define GL_PROGRAM_OBJECT_ARB 0x8B40 #define GL_SHADER_OBJECT_ARB 0x8B48 #define GL_OBJECT_TYPE_ARB 0x8B4E #define GL_OBJECT_SUBTYPE_ARB 0x8B4F #define GL_FLOAT_VEC2_ARB 0x8B50 #define GL_FLOAT_VEC3_ARB 0x8B51 #define GL_FLOAT_VEC4_ARB 0x8B52 #define GL_INT_VEC2_ARB 0x8B53 #define GL_INT_VEC3_ARB 0x8B54 #define GL_INT_VEC4_ARB 0x8B55 #define GL_BOOL_ARB 0x8B56 #define GL_BOOL_VEC2_ARB 0x8B57 #define GL_BOOL_VEC3_ARB 0x8B58 #define GL_BOOL_VEC4_ARB 0x8B59 #define GL_FLOAT_MAT2_ARB 0x8B5A #define GL_FLOAT_MAT3_ARB 0x8B5B #define GL_FLOAT_MAT4_ARB 0x8B5C #define GL_SAMPLER_1D_ARB 0x8B5D #define GL_SAMPLER_2D_ARB 0x8B5E #define GL_SAMPLER_3D_ARB 0x8B5F #define GL_SAMPLER_CUBE_ARB 0x8B60 #define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 #define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 #define GL_SAMPLER_2D_RECT_ARB 0x8B63 #define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 #define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 #define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 #define GL_OBJECT_LINK_STATUS_ARB 0x8B82 #define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 #define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 #define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 #define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 #define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 #define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj); typedef GLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC) (GLenum pname); typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj); typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType); typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length); typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj); typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void); typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj); typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj); typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj); typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj); typedef void (APIENTRYP PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0); typedef void (APIENTRYP PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1); typedef void (APIENTRYP PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); typedef void (APIENTRYP PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0); typedef void (APIENTRYP PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1); typedef void (APIENTRYP PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2); typedef void (APIENTRYP PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); typedef void (APIENTRYP PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); typedef void (APIENTRYP PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); typedef void (APIENTRYP PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat *params); typedef void (APIENTRYP PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint *params); typedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDeleteObjectARB (GLhandleARB obj); GLAPI GLhandleARB APIENTRY glGetHandleARB (GLenum pname); GLAPI void APIENTRY glDetachObjectARB (GLhandleARB containerObj, GLhandleARB attachedObj); GLAPI GLhandleARB APIENTRY glCreateShaderObjectARB (GLenum shaderType); GLAPI void APIENTRY glShaderSourceARB (GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length); GLAPI void APIENTRY glCompileShaderARB (GLhandleARB shaderObj); GLAPI GLhandleARB APIENTRY glCreateProgramObjectARB (void); GLAPI void APIENTRY glAttachObjectARB (GLhandleARB containerObj, GLhandleARB obj); GLAPI void APIENTRY glLinkProgramARB (GLhandleARB programObj); GLAPI void APIENTRY glUseProgramObjectARB (GLhandleARB programObj); GLAPI void APIENTRY glValidateProgramARB (GLhandleARB programObj); GLAPI void APIENTRY glUniform1fARB (GLint location, GLfloat v0); GLAPI void APIENTRY glUniform2fARB (GLint location, GLfloat v0, GLfloat v1); GLAPI void APIENTRY glUniform3fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); GLAPI void APIENTRY glUniform4fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); GLAPI void APIENTRY glUniform1iARB (GLint location, GLint v0); GLAPI void APIENTRY glUniform2iARB (GLint location, GLint v0, GLint v1); GLAPI void APIENTRY glUniform3iARB (GLint location, GLint v0, GLint v1, GLint v2); GLAPI void APIENTRY glUniform4iARB (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); GLAPI void APIENTRY glUniform1fvARB (GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glUniform2fvARB (GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glUniform3fvARB (GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glUniform4fvARB (GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glUniform1ivARB (GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glUniform2ivARB (GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glUniform3ivARB (GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glUniform4ivARB (GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glUniformMatrix2fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix3fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix4fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glGetObjectParameterfvARB (GLhandleARB obj, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetObjectParameterivARB (GLhandleARB obj, GLenum pname, GLint *params); GLAPI void APIENTRY glGetInfoLogARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); GLAPI void APIENTRY glGetAttachedObjectsARB (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); GLAPI GLint APIENTRY glGetUniformLocationARB (GLhandleARB programObj, const GLcharARB *name); GLAPI void APIENTRY glGetActiveUniformARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); GLAPI void APIENTRY glGetUniformfvARB (GLhandleARB programObj, GLint location, GLfloat *params); GLAPI void APIENTRY glGetUniformivARB (GLhandleARB programObj, GLint location, GLint *params); GLAPI void APIENTRY glGetShaderSourceARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); #endif #endif /* GL_ARB_shader_objects */ #ifndef GL_ARB_shader_precision #define GL_ARB_shader_precision 1 #endif /* GL_ARB_shader_precision */ #ifndef GL_ARB_shader_stencil_export #define GL_ARB_shader_stencil_export 1 #endif /* GL_ARB_shader_stencil_export */ #ifndef GL_ARB_shader_storage_buffer_object #define GL_ARB_shader_storage_buffer_object 1 #endif /* GL_ARB_shader_storage_buffer_object */ #ifndef GL_ARB_shader_subroutine #define GL_ARB_shader_subroutine 1 #endif /* GL_ARB_shader_subroutine */ #ifndef GL_ARB_shader_texture_image_samples #define GL_ARB_shader_texture_image_samples 1 #endif /* GL_ARB_shader_texture_image_samples */ #ifndef GL_ARB_shader_texture_lod #define GL_ARB_shader_texture_lod 1 #endif /* GL_ARB_shader_texture_lod */ #ifndef GL_ARB_shader_viewport_layer_array #define GL_ARB_shader_viewport_layer_array 1 #endif /* GL_ARB_shader_viewport_layer_array */ #ifndef GL_ARB_shading_language_100 #define GL_ARB_shading_language_100 1 #define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C #endif /* GL_ARB_shading_language_100 */ #ifndef GL_ARB_shading_language_420pack #define GL_ARB_shading_language_420pack 1 #endif /* GL_ARB_shading_language_420pack */ #ifndef GL_ARB_shading_language_include #define GL_ARB_shading_language_include 1 #define GL_SHADER_INCLUDE_ARB 0x8DAE #define GL_NAMED_STRING_LENGTH_ARB 0x8DE9 #define GL_NAMED_STRING_TYPE_ARB 0x8DEA typedef void (APIENTRYP PFNGLNAMEDSTRINGARBPROC) (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); typedef void (APIENTRYP PFNGLDELETENAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); typedef void (APIENTRYP PFNGLCOMPILESHADERINCLUDEARBPROC) (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length); typedef GLboolean (APIENTRYP PFNGLISNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); typedef void (APIENTRYP PFNGLGETNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); typedef void (APIENTRYP PFNGLGETNAMEDSTRINGIVARBPROC) (GLint namelen, const GLchar *name, GLenum pname, GLint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glNamedStringARB (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); GLAPI void APIENTRY glDeleteNamedStringARB (GLint namelen, const GLchar *name); GLAPI void APIENTRY glCompileShaderIncludeARB (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length); GLAPI GLboolean APIENTRY glIsNamedStringARB (GLint namelen, const GLchar *name); GLAPI void APIENTRY glGetNamedStringARB (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); GLAPI void APIENTRY glGetNamedStringivARB (GLint namelen, const GLchar *name, GLenum pname, GLint *params); #endif #endif /* GL_ARB_shading_language_include */ #ifndef GL_ARB_shading_language_packing #define GL_ARB_shading_language_packing 1 #endif /* GL_ARB_shading_language_packing */ #ifndef GL_ARB_shadow #define GL_ARB_shadow 1 #define GL_TEXTURE_COMPARE_MODE_ARB 0x884C #define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D #define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E #endif /* GL_ARB_shadow */ #ifndef GL_ARB_shadow_ambient #define GL_ARB_shadow_ambient 1 #define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF #endif /* GL_ARB_shadow_ambient */ #ifndef GL_ARB_sparse_buffer #define GL_ARB_sparse_buffer 1 #define GL_SPARSE_STORAGE_BIT_ARB 0x0400 #define GL_SPARSE_BUFFER_PAGE_SIZE_ARB 0x82F8 typedef void (APIENTRYP PFNGLBUFFERPAGECOMMITMENTARBPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLboolean commit); typedef void (APIENTRYP PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); typedef void (APIENTRYP PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBufferPageCommitmentARB (GLenum target, GLintptr offset, GLsizeiptr size, GLboolean commit); GLAPI void APIENTRY glNamedBufferPageCommitmentEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); GLAPI void APIENTRY glNamedBufferPageCommitmentARB (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); #endif #endif /* GL_ARB_sparse_buffer */ #ifndef GL_ARB_sparse_texture #define GL_ARB_sparse_texture 1 #define GL_TEXTURE_SPARSE_ARB 0x91A6 #define GL_VIRTUAL_PAGE_SIZE_INDEX_ARB 0x91A7 #define GL_NUM_SPARSE_LEVELS_ARB 0x91AA #define GL_NUM_VIRTUAL_PAGE_SIZES_ARB 0x91A8 #define GL_VIRTUAL_PAGE_SIZE_X_ARB 0x9195 #define GL_VIRTUAL_PAGE_SIZE_Y_ARB 0x9196 #define GL_VIRTUAL_PAGE_SIZE_Z_ARB 0x9197 #define GL_MAX_SPARSE_TEXTURE_SIZE_ARB 0x9198 #define GL_MAX_SPARSE_3D_TEXTURE_SIZE_ARB 0x9199 #define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_ARB 0x919A #define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB 0x91A9 typedef void (APIENTRYP PFNGLTEXPAGECOMMITMENTARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexPageCommitmentARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); #endif #endif /* GL_ARB_sparse_texture */ #ifndef GL_ARB_sparse_texture2 #define GL_ARB_sparse_texture2 1 #endif /* GL_ARB_sparse_texture2 */ #ifndef GL_ARB_sparse_texture_clamp #define GL_ARB_sparse_texture_clamp 1 #endif /* GL_ARB_sparse_texture_clamp */ #ifndef GL_ARB_spirv_extensions #define GL_ARB_spirv_extensions 1 #endif /* GL_ARB_spirv_extensions */ #ifndef GL_ARB_stencil_texturing #define GL_ARB_stencil_texturing 1 #endif /* GL_ARB_stencil_texturing */ #ifndef GL_ARB_sync #define GL_ARB_sync 1 #endif /* GL_ARB_sync */ #ifndef GL_ARB_tessellation_shader #define GL_ARB_tessellation_shader 1 #endif /* GL_ARB_tessellation_shader */ #ifndef GL_ARB_texture_barrier #define GL_ARB_texture_barrier 1 #endif /* GL_ARB_texture_barrier */ #ifndef GL_ARB_texture_border_clamp #define GL_ARB_texture_border_clamp 1 #define GL_CLAMP_TO_BORDER_ARB 0x812D #endif /* GL_ARB_texture_border_clamp */ #ifndef GL_ARB_texture_buffer_object #define GL_ARB_texture_buffer_object 1 #define GL_TEXTURE_BUFFER_ARB 0x8C2A #define GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B #define GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C #define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D #define GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E typedef void (APIENTRYP PFNGLTEXBUFFERARBPROC) (GLenum target, GLenum internalformat, GLuint buffer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexBufferARB (GLenum target, GLenum internalformat, GLuint buffer); #endif #endif /* GL_ARB_texture_buffer_object */ #ifndef GL_ARB_texture_buffer_object_rgb32 #define GL_ARB_texture_buffer_object_rgb32 1 #endif /* GL_ARB_texture_buffer_object_rgb32 */ #ifndef GL_ARB_texture_buffer_range #define GL_ARB_texture_buffer_range 1 #endif /* GL_ARB_texture_buffer_range */ #ifndef GL_ARB_texture_compression #define GL_ARB_texture_compression 1 #define GL_COMPRESSED_ALPHA_ARB 0x84E9 #define GL_COMPRESSED_LUMINANCE_ARB 0x84EA #define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB #define GL_COMPRESSED_INTENSITY_ARB 0x84EC #define GL_COMPRESSED_RGB_ARB 0x84ED #define GL_COMPRESSED_RGBA_ARB 0x84EE #define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF #define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 #define GL_TEXTURE_COMPRESSED_ARB 0x86A1 #define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 #define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, void *img); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum target, GLint level, void *img); #endif #endif /* GL_ARB_texture_compression */ #ifndef GL_ARB_texture_compression_bptc #define GL_ARB_texture_compression_bptc 1 #define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C #define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D #define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E #define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F #endif /* GL_ARB_texture_compression_bptc */ #ifndef GL_ARB_texture_compression_rgtc #define GL_ARB_texture_compression_rgtc 1 #endif /* GL_ARB_texture_compression_rgtc */ #ifndef GL_ARB_texture_cube_map #define GL_ARB_texture_cube_map 1 #define GL_NORMAL_MAP_ARB 0x8511 #define GL_REFLECTION_MAP_ARB 0x8512 #define GL_TEXTURE_CUBE_MAP_ARB 0x8513 #define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A #define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B #define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C #endif /* GL_ARB_texture_cube_map */ #ifndef GL_ARB_texture_cube_map_array #define GL_ARB_texture_cube_map_array 1 #define GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009 #define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A #define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B #define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C #define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D #define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E #define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F #endif /* GL_ARB_texture_cube_map_array */ #ifndef GL_ARB_texture_env_add #define GL_ARB_texture_env_add 1 #endif /* GL_ARB_texture_env_add */ #ifndef GL_ARB_texture_env_combine #define GL_ARB_texture_env_combine 1 #define GL_COMBINE_ARB 0x8570 #define GL_COMBINE_RGB_ARB 0x8571 #define GL_COMBINE_ALPHA_ARB 0x8572 #define GL_SOURCE0_RGB_ARB 0x8580 #define GL_SOURCE1_RGB_ARB 0x8581 #define GL_SOURCE2_RGB_ARB 0x8582 #define GL_SOURCE0_ALPHA_ARB 0x8588 #define GL_SOURCE1_ALPHA_ARB 0x8589 #define GL_SOURCE2_ALPHA_ARB 0x858A #define GL_OPERAND0_RGB_ARB 0x8590 #define GL_OPERAND1_RGB_ARB 0x8591 #define GL_OPERAND2_RGB_ARB 0x8592 #define GL_OPERAND0_ALPHA_ARB 0x8598 #define GL_OPERAND1_ALPHA_ARB 0x8599 #define GL_OPERAND2_ALPHA_ARB 0x859A #define GL_RGB_SCALE_ARB 0x8573 #define GL_ADD_SIGNED_ARB 0x8574 #define GL_INTERPOLATE_ARB 0x8575 #define GL_SUBTRACT_ARB 0x84E7 #define GL_CONSTANT_ARB 0x8576 #define GL_PRIMARY_COLOR_ARB 0x8577 #define GL_PREVIOUS_ARB 0x8578 #endif /* GL_ARB_texture_env_combine */ #ifndef GL_ARB_texture_env_crossbar #define GL_ARB_texture_env_crossbar 1 #endif /* GL_ARB_texture_env_crossbar */ #ifndef GL_ARB_texture_env_dot3 #define GL_ARB_texture_env_dot3 1 #define GL_DOT3_RGB_ARB 0x86AE #define GL_DOT3_RGBA_ARB 0x86AF #endif /* GL_ARB_texture_env_dot3 */ #ifndef GL_ARB_texture_filter_anisotropic #define GL_ARB_texture_filter_anisotropic 1 #endif /* GL_ARB_texture_filter_anisotropic */ #ifndef GL_ARB_texture_filter_minmax #define GL_ARB_texture_filter_minmax 1 #define GL_TEXTURE_REDUCTION_MODE_ARB 0x9366 #define GL_WEIGHTED_AVERAGE_ARB 0x9367 #endif /* GL_ARB_texture_filter_minmax */ #ifndef GL_ARB_texture_float #define GL_ARB_texture_float 1 #define GL_TEXTURE_RED_TYPE_ARB 0x8C10 #define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 #define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 #define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 #define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 #define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 #define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 #define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 #define GL_RGBA32F_ARB 0x8814 #define GL_RGB32F_ARB 0x8815 #define GL_ALPHA32F_ARB 0x8816 #define GL_INTENSITY32F_ARB 0x8817 #define GL_LUMINANCE32F_ARB 0x8818 #define GL_LUMINANCE_ALPHA32F_ARB 0x8819 #define GL_RGBA16F_ARB 0x881A #define GL_RGB16F_ARB 0x881B #define GL_ALPHA16F_ARB 0x881C #define GL_INTENSITY16F_ARB 0x881D #define GL_LUMINANCE16F_ARB 0x881E #define GL_LUMINANCE_ALPHA16F_ARB 0x881F #endif /* GL_ARB_texture_float */ #ifndef GL_ARB_texture_gather #define GL_ARB_texture_gather 1 #define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E #define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F #define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F #endif /* GL_ARB_texture_gather */ #ifndef GL_ARB_texture_mirror_clamp_to_edge #define GL_ARB_texture_mirror_clamp_to_edge 1 #endif /* GL_ARB_texture_mirror_clamp_to_edge */ #ifndef GL_ARB_texture_mirrored_repeat #define GL_ARB_texture_mirrored_repeat 1 #define GL_MIRRORED_REPEAT_ARB 0x8370 #endif /* GL_ARB_texture_mirrored_repeat */ #ifndef GL_ARB_texture_multisample #define GL_ARB_texture_multisample 1 #endif /* GL_ARB_texture_multisample */ #ifndef GL_ARB_texture_non_power_of_two #define GL_ARB_texture_non_power_of_two 1 #endif /* GL_ARB_texture_non_power_of_two */ #ifndef GL_ARB_texture_query_levels #define GL_ARB_texture_query_levels 1 #endif /* GL_ARB_texture_query_levels */ #ifndef GL_ARB_texture_query_lod #define GL_ARB_texture_query_lod 1 #endif /* GL_ARB_texture_query_lod */ #ifndef GL_ARB_texture_rectangle #define GL_ARB_texture_rectangle 1 #define GL_TEXTURE_RECTANGLE_ARB 0x84F5 #define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 #define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 #define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 #endif /* GL_ARB_texture_rectangle */ #ifndef GL_ARB_texture_rg #define GL_ARB_texture_rg 1 #endif /* GL_ARB_texture_rg */ #ifndef GL_ARB_texture_rgb10_a2ui #define GL_ARB_texture_rgb10_a2ui 1 #endif /* GL_ARB_texture_rgb10_a2ui */ #ifndef GL_ARB_texture_stencil8 #define GL_ARB_texture_stencil8 1 #endif /* GL_ARB_texture_stencil8 */ #ifndef GL_ARB_texture_storage #define GL_ARB_texture_storage 1 #endif /* GL_ARB_texture_storage */ #ifndef GL_ARB_texture_storage_multisample #define GL_ARB_texture_storage_multisample 1 #endif /* GL_ARB_texture_storage_multisample */ #ifndef GL_ARB_texture_swizzle #define GL_ARB_texture_swizzle 1 #endif /* GL_ARB_texture_swizzle */ #ifndef GL_ARB_texture_view #define GL_ARB_texture_view 1 #endif /* GL_ARB_texture_view */ #ifndef GL_ARB_timer_query #define GL_ARB_timer_query 1 #endif /* GL_ARB_timer_query */ #ifndef GL_ARB_transform_feedback2 #define GL_ARB_transform_feedback2 1 #endif /* GL_ARB_transform_feedback2 */ #ifndef GL_ARB_transform_feedback3 #define GL_ARB_transform_feedback3 1 #endif /* GL_ARB_transform_feedback3 */ #ifndef GL_ARB_transform_feedback_instanced #define GL_ARB_transform_feedback_instanced 1 #endif /* GL_ARB_transform_feedback_instanced */ #ifndef GL_ARB_transform_feedback_overflow_query #define GL_ARB_transform_feedback_overflow_query 1 #define GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB 0x82EC #define GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB 0x82ED #endif /* GL_ARB_transform_feedback_overflow_query */ #ifndef GL_ARB_transpose_matrix #define GL_ARB_transpose_matrix 1 #define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 #define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 #define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 #define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *m); GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *m); GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *m); GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *m); #endif #endif /* GL_ARB_transpose_matrix */ #ifndef GL_ARB_uniform_buffer_object #define GL_ARB_uniform_buffer_object 1 #endif /* GL_ARB_uniform_buffer_object */ #ifndef GL_ARB_vertex_array_bgra #define GL_ARB_vertex_array_bgra 1 #endif /* GL_ARB_vertex_array_bgra */ #ifndef GL_ARB_vertex_array_object #define GL_ARB_vertex_array_object 1 #endif /* GL_ARB_vertex_array_object */ #ifndef GL_ARB_vertex_attrib_64bit #define GL_ARB_vertex_attrib_64bit 1 #endif /* GL_ARB_vertex_attrib_64bit */ #ifndef GL_ARB_vertex_attrib_binding #define GL_ARB_vertex_attrib_binding 1 #endif /* GL_ARB_vertex_attrib_binding */ #ifndef GL_ARB_vertex_blend #define GL_ARB_vertex_blend 1 #define GL_MAX_VERTEX_UNITS_ARB 0x86A4 #define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 #define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 #define GL_VERTEX_BLEND_ARB 0x86A7 #define GL_CURRENT_WEIGHT_ARB 0x86A8 #define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 #define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA #define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB #define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC #define GL_WEIGHT_ARRAY_ARB 0x86AD #define GL_MODELVIEW0_ARB 0x1700 #define GL_MODELVIEW1_ARB 0x850A #define GL_MODELVIEW2_ARB 0x8722 #define GL_MODELVIEW3_ARB 0x8723 #define GL_MODELVIEW4_ARB 0x8724 #define GL_MODELVIEW5_ARB 0x8725 #define GL_MODELVIEW6_ARB 0x8726 #define GL_MODELVIEW7_ARB 0x8727 #define GL_MODELVIEW8_ARB 0x8728 #define GL_MODELVIEW9_ARB 0x8729 #define GL_MODELVIEW10_ARB 0x872A #define GL_MODELVIEW11_ARB 0x872B #define GL_MODELVIEW12_ARB 0x872C #define GL_MODELVIEW13_ARB 0x872D #define GL_MODELVIEW14_ARB 0x872E #define GL_MODELVIEW15_ARB 0x872F #define GL_MODELVIEW16_ARB 0x8730 #define GL_MODELVIEW17_ARB 0x8731 #define GL_MODELVIEW18_ARB 0x8732 #define GL_MODELVIEW19_ARB 0x8733 #define GL_MODELVIEW20_ARB 0x8734 #define GL_MODELVIEW21_ARB 0x8735 #define GL_MODELVIEW22_ARB 0x8736 #define GL_MODELVIEW23_ARB 0x8737 #define GL_MODELVIEW24_ARB 0x8738 #define GL_MODELVIEW25_ARB 0x8739 #define GL_MODELVIEW26_ARB 0x873A #define GL_MODELVIEW27_ARB 0x873B #define GL_MODELVIEW28_ARB 0x873C #define GL_MODELVIEW29_ARB 0x873D #define GL_MODELVIEW30_ARB 0x873E #define GL_MODELVIEW31_ARB 0x873F typedef void (APIENTRYP PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights); typedef void (APIENTRYP PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights); typedef void (APIENTRYP PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights); typedef void (APIENTRYP PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights); typedef void (APIENTRYP PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights); typedef void (APIENTRYP PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights); typedef void (APIENTRYP PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights); typedef void (APIENTRYP PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights); typedef void (APIENTRYP PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); typedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC) (GLint count); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glWeightbvARB (GLint size, const GLbyte *weights); GLAPI void APIENTRY glWeightsvARB (GLint size, const GLshort *weights); GLAPI void APIENTRY glWeightivARB (GLint size, const GLint *weights); GLAPI void APIENTRY glWeightfvARB (GLint size, const GLfloat *weights); GLAPI void APIENTRY glWeightdvARB (GLint size, const GLdouble *weights); GLAPI void APIENTRY glWeightubvARB (GLint size, const GLubyte *weights); GLAPI void APIENTRY glWeightusvARB (GLint size, const GLushort *weights); GLAPI void APIENTRY glWeightuivARB (GLint size, const GLuint *weights); GLAPI void APIENTRY glWeightPointerARB (GLint size, GLenum type, GLsizei stride, const void *pointer); GLAPI void APIENTRY glVertexBlendARB (GLint count); #endif #endif /* GL_ARB_vertex_blend */ #ifndef GL_ARB_vertex_buffer_object #define GL_ARB_vertex_buffer_object 1 typedef khronos_ssize_t GLsizeiptrARB; typedef khronos_intptr_t GLintptrARB; #define GL_BUFFER_SIZE_ARB 0x8764 #define GL_BUFFER_USAGE_ARB 0x8765 #define GL_ARRAY_BUFFER_ARB 0x8892 #define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 #define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 #define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 #define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 #define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 #define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 #define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 #define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A #define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B #define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C #define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D #define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E #define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F #define GL_READ_ONLY_ARB 0x88B8 #define GL_WRITE_ONLY_ARB 0x88B9 #define GL_READ_WRITE_ARB 0x88BA #define GL_BUFFER_ACCESS_ARB 0x88BB #define GL_BUFFER_MAPPED_ARB 0x88BC #define GL_BUFFER_MAP_POINTER_ARB 0x88BD #define GL_STREAM_DRAW_ARB 0x88E0 #define GL_STREAM_READ_ARB 0x88E1 #define GL_STREAM_COPY_ARB 0x88E2 #define GL_STATIC_DRAW_ARB 0x88E4 #define GL_STATIC_READ_ARB 0x88E5 #define GL_STATIC_COPY_ARB 0x88E6 #define GL_DYNAMIC_DRAW_ARB 0x88E8 #define GL_DYNAMIC_READ_ARB 0x88E9 #define GL_DYNAMIC_COPY_ARB 0x88EA typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers); typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers); typedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC) (GLuint buffer); typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const void *data, GLenum usage); typedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data); typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data); typedef void *(APIENTRYP PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access); typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC) (GLenum target); typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, void **params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBindBufferARB (GLenum target, GLuint buffer); GLAPI void APIENTRY glDeleteBuffersARB (GLsizei n, const GLuint *buffers); GLAPI void APIENTRY glGenBuffersARB (GLsizei n, GLuint *buffers); GLAPI GLboolean APIENTRY glIsBufferARB (GLuint buffer); GLAPI void APIENTRY glBufferDataARB (GLenum target, GLsizeiptrARB size, const void *data, GLenum usage); GLAPI void APIENTRY glBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data); GLAPI void APIENTRY glGetBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data); GLAPI void *APIENTRY glMapBufferARB (GLenum target, GLenum access); GLAPI GLboolean APIENTRY glUnmapBufferARB (GLenum target); GLAPI void APIENTRY glGetBufferParameterivARB (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetBufferPointervARB (GLenum target, GLenum pname, void **params); #endif #endif /* GL_ARB_vertex_buffer_object */ #ifndef GL_ARB_vertex_program #define GL_ARB_vertex_program 1 #define GL_COLOR_SUM_ARB 0x8458 #define GL_VERTEX_PROGRAM_ARB 0x8620 #define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 #define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 #define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 #define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 #define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 #define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 #define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 #define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 #define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 #define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A #define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 #define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 #define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 #define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, void **pointer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexAttrib1dARB (GLuint index, GLdouble x); GLAPI void APIENTRY glVertexAttrib1dvARB (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib1fARB (GLuint index, GLfloat x); GLAPI void APIENTRY glVertexAttrib1fvARB (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib1sARB (GLuint index, GLshort x); GLAPI void APIENTRY glVertexAttrib1svARB (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib2dARB (GLuint index, GLdouble x, GLdouble y); GLAPI void APIENTRY glVertexAttrib2dvARB (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib2fARB (GLuint index, GLfloat x, GLfloat y); GLAPI void APIENTRY glVertexAttrib2fvARB (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib2sARB (GLuint index, GLshort x, GLshort y); GLAPI void APIENTRY glVertexAttrib2svARB (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib3dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glVertexAttrib3dvARB (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib3fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glVertexAttrib3fvARB (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib3sARB (GLuint index, GLshort x, GLshort y, GLshort z); GLAPI void APIENTRY glVertexAttrib3svARB (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib4NbvARB (GLuint index, const GLbyte *v); GLAPI void APIENTRY glVertexAttrib4NivARB (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttrib4NsvARB (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib4NubARB (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); GLAPI void APIENTRY glVertexAttrib4NubvARB (GLuint index, const GLubyte *v); GLAPI void APIENTRY glVertexAttrib4NuivARB (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttrib4NusvARB (GLuint index, const GLushort *v); GLAPI void APIENTRY glVertexAttrib4bvARB (GLuint index, const GLbyte *v); GLAPI void APIENTRY glVertexAttrib4dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glVertexAttrib4dvARB (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib4fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glVertexAttrib4fvARB (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib4ivARB (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttrib4sARB (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); GLAPI void APIENTRY glVertexAttrib4svARB (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib4ubvARB (GLuint index, const GLubyte *v); GLAPI void APIENTRY glVertexAttrib4uivARB (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttrib4usvARB (GLuint index, const GLushort *v); GLAPI void APIENTRY glVertexAttribPointerARB (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); GLAPI void APIENTRY glEnableVertexAttribArrayARB (GLuint index); GLAPI void APIENTRY glDisableVertexAttribArrayARB (GLuint index); GLAPI void APIENTRY glGetVertexAttribdvARB (GLuint index, GLenum pname, GLdouble *params); GLAPI void APIENTRY glGetVertexAttribfvARB (GLuint index, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetVertexAttribivARB (GLuint index, GLenum pname, GLint *params); GLAPI void APIENTRY glGetVertexAttribPointervARB (GLuint index, GLenum pname, void **pointer); #endif #endif /* GL_ARB_vertex_program */ #ifndef GL_ARB_vertex_shader #define GL_ARB_vertex_shader 1 #define GL_VERTEX_SHADER_ARB 0x8B31 #define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A #define GL_MAX_VARYING_FLOATS_ARB 0x8B4B #define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C #define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D #define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 #define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB *name); typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBindAttribLocationARB (GLhandleARB programObj, GLuint index, const GLcharARB *name); GLAPI void APIENTRY glGetActiveAttribARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); GLAPI GLint APIENTRY glGetAttribLocationARB (GLhandleARB programObj, const GLcharARB *name); #endif #endif /* GL_ARB_vertex_shader */ #ifndef GL_ARB_vertex_type_10f_11f_11f_rev #define GL_ARB_vertex_type_10f_11f_11f_rev 1 #endif /* GL_ARB_vertex_type_10f_11f_11f_rev */ #ifndef GL_ARB_vertex_type_2_10_10_10_rev #define GL_ARB_vertex_type_2_10_10_10_rev 1 #endif /* GL_ARB_vertex_type_2_10_10_10_rev */ #ifndef GL_ARB_viewport_array #define GL_ARB_viewport_array 1 typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYDVNVPROC) (GLuint first, GLsizei count, const GLdouble *v); typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDDNVPROC) (GLuint index, GLdouble n, GLdouble f); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDepthRangeArraydvNV (GLuint first, GLsizei count, const GLdouble *v); GLAPI void APIENTRY glDepthRangeIndexeddNV (GLuint index, GLdouble n, GLdouble f); #endif #endif /* GL_ARB_viewport_array */ #ifndef GL_ARB_window_pos #define GL_ARB_window_pos 1 typedef void (APIENTRYP PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y); typedef void (APIENTRYP PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y); typedef void (APIENTRYP PFNGLWINDOWPOS2IVARBPROC) (const GLint *v); typedef void (APIENTRYP PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y); typedef void (APIENTRYP PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v); typedef void (APIENTRYP PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z); typedef void (APIENTRYP PFNGLWINDOWPOS3IVARBPROC) (const GLint *v); typedef void (APIENTRYP PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z); typedef void (APIENTRYP PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glWindowPos2dARB (GLdouble x, GLdouble y); GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *v); GLAPI void APIENTRY glWindowPos2fARB (GLfloat x, GLfloat y); GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *v); GLAPI void APIENTRY glWindowPos2iARB (GLint x, GLint y); GLAPI void APIENTRY glWindowPos2ivARB (const GLint *v); GLAPI void APIENTRY glWindowPos2sARB (GLshort x, GLshort y); GLAPI void APIENTRY glWindowPos2svARB (const GLshort *v); GLAPI void APIENTRY glWindowPos3dARB (GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *v); GLAPI void APIENTRY glWindowPos3fARB (GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *v); GLAPI void APIENTRY glWindowPos3iARB (GLint x, GLint y, GLint z); GLAPI void APIENTRY glWindowPos3ivARB (const GLint *v); GLAPI void APIENTRY glWindowPos3sARB (GLshort x, GLshort y, GLshort z); GLAPI void APIENTRY glWindowPos3svARB (const GLshort *v); #endif #endif /* GL_ARB_window_pos */ #ifndef GL_KHR_blend_equation_advanced #define GL_KHR_blend_equation_advanced 1 #define GL_MULTIPLY_KHR 0x9294 #define GL_SCREEN_KHR 0x9295 #define GL_OVERLAY_KHR 0x9296 #define GL_DARKEN_KHR 0x9297 #define GL_LIGHTEN_KHR 0x9298 #define GL_COLORDODGE_KHR 0x9299 #define GL_COLORBURN_KHR 0x929A #define GL_HARDLIGHT_KHR 0x929B #define GL_SOFTLIGHT_KHR 0x929C #define GL_DIFFERENCE_KHR 0x929E #define GL_EXCLUSION_KHR 0x92A0 #define GL_HSL_HUE_KHR 0x92AD #define GL_HSL_SATURATION_KHR 0x92AE #define GL_HSL_COLOR_KHR 0x92AF #define GL_HSL_LUMINOSITY_KHR 0x92B0 typedef void (APIENTRYP PFNGLBLENDBARRIERKHRPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendBarrierKHR (void); #endif #endif /* GL_KHR_blend_equation_advanced */ #ifndef GL_KHR_blend_equation_advanced_coherent #define GL_KHR_blend_equation_advanced_coherent 1 #define GL_BLEND_ADVANCED_COHERENT_KHR 0x9285 #endif /* GL_KHR_blend_equation_advanced_coherent */ #ifndef GL_KHR_context_flush_control #define GL_KHR_context_flush_control 1 #endif /* GL_KHR_context_flush_control */ #ifndef GL_KHR_debug #define GL_KHR_debug 1 #endif /* GL_KHR_debug */ #ifndef GL_KHR_no_error #define GL_KHR_no_error 1 #define GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR 0x00000008 #endif /* GL_KHR_no_error */ #ifndef GL_KHR_parallel_shader_compile #define GL_KHR_parallel_shader_compile 1 #define GL_MAX_SHADER_COMPILER_THREADS_KHR 0x91B0 #define GL_COMPLETION_STATUS_KHR 0x91B1 typedef void (APIENTRYP PFNGLMAXSHADERCOMPILERTHREADSKHRPROC) (GLuint count); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMaxShaderCompilerThreadsKHR (GLuint count); #endif #endif /* GL_KHR_parallel_shader_compile */ #ifndef GL_KHR_robust_buffer_access_behavior #define GL_KHR_robust_buffer_access_behavior 1 #endif /* GL_KHR_robust_buffer_access_behavior */ #ifndef GL_KHR_robustness #define GL_KHR_robustness 1 #define GL_CONTEXT_ROBUST_ACCESS 0x90F3 #endif /* GL_KHR_robustness */ #ifndef GL_KHR_shader_subgroup #define GL_KHR_shader_subgroup 1 #define GL_SUBGROUP_SIZE_KHR 0x9532 #define GL_SUBGROUP_SUPPORTED_STAGES_KHR 0x9533 #define GL_SUBGROUP_SUPPORTED_FEATURES_KHR 0x9534 #define GL_SUBGROUP_QUAD_ALL_STAGES_KHR 0x9535 #define GL_SUBGROUP_FEATURE_BASIC_BIT_KHR 0x00000001 #define GL_SUBGROUP_FEATURE_VOTE_BIT_KHR 0x00000002 #define GL_SUBGROUP_FEATURE_ARITHMETIC_BIT_KHR 0x00000004 #define GL_SUBGROUP_FEATURE_BALLOT_BIT_KHR 0x00000008 #define GL_SUBGROUP_FEATURE_SHUFFLE_BIT_KHR 0x00000010 #define GL_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT_KHR 0x00000020 #define GL_SUBGROUP_FEATURE_CLUSTERED_BIT_KHR 0x00000040 #define GL_SUBGROUP_FEATURE_QUAD_BIT_KHR 0x00000080 #endif /* GL_KHR_shader_subgroup */ #ifndef GL_KHR_texture_compression_astc_hdr #define GL_KHR_texture_compression_astc_hdr 1 #define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 #define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 #define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 #define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 #define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 #define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 #define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 #define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 #define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 #define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 #define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA #define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB #define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC #define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD #endif /* GL_KHR_texture_compression_astc_hdr */ #ifndef GL_KHR_texture_compression_astc_ldr #define GL_KHR_texture_compression_astc_ldr 1 #endif /* GL_KHR_texture_compression_astc_ldr */ #ifndef GL_KHR_texture_compression_astc_sliced_3d #define GL_KHR_texture_compression_astc_sliced_3d 1 #endif /* GL_KHR_texture_compression_astc_sliced_3d */ #ifndef GL_OES_byte_coordinates #define GL_OES_byte_coordinates 1 typedef void (APIENTRYP PFNGLMULTITEXCOORD1BOESPROC) (GLenum texture, GLbyte s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1BVOESPROC) (GLenum texture, const GLbyte *coords); typedef void (APIENTRYP PFNGLMULTITEXCOORD2BOESPROC) (GLenum texture, GLbyte s, GLbyte t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2BVOESPROC) (GLenum texture, const GLbyte *coords); typedef void (APIENTRYP PFNGLMULTITEXCOORD3BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3BVOESPROC) (GLenum texture, const GLbyte *coords); typedef void (APIENTRYP PFNGLMULTITEXCOORD4BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4BVOESPROC) (GLenum texture, const GLbyte *coords); typedef void (APIENTRYP PFNGLTEXCOORD1BOESPROC) (GLbyte s); typedef void (APIENTRYP PFNGLTEXCOORD1BVOESPROC) (const GLbyte *coords); typedef void (APIENTRYP PFNGLTEXCOORD2BOESPROC) (GLbyte s, GLbyte t); typedef void (APIENTRYP PFNGLTEXCOORD2BVOESPROC) (const GLbyte *coords); typedef void (APIENTRYP PFNGLTEXCOORD3BOESPROC) (GLbyte s, GLbyte t, GLbyte r); typedef void (APIENTRYP PFNGLTEXCOORD3BVOESPROC) (const GLbyte *coords); typedef void (APIENTRYP PFNGLTEXCOORD4BOESPROC) (GLbyte s, GLbyte t, GLbyte r, GLbyte q); typedef void (APIENTRYP PFNGLTEXCOORD4BVOESPROC) (const GLbyte *coords); typedef void (APIENTRYP PFNGLVERTEX2BOESPROC) (GLbyte x, GLbyte y); typedef void (APIENTRYP PFNGLVERTEX2BVOESPROC) (const GLbyte *coords); typedef void (APIENTRYP PFNGLVERTEX3BOESPROC) (GLbyte x, GLbyte y, GLbyte z); typedef void (APIENTRYP PFNGLVERTEX3BVOESPROC) (const GLbyte *coords); typedef void (APIENTRYP PFNGLVERTEX4BOESPROC) (GLbyte x, GLbyte y, GLbyte z, GLbyte w); typedef void (APIENTRYP PFNGLVERTEX4BVOESPROC) (const GLbyte *coords); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMultiTexCoord1bOES (GLenum texture, GLbyte s); GLAPI void APIENTRY glMultiTexCoord1bvOES (GLenum texture, const GLbyte *coords); GLAPI void APIENTRY glMultiTexCoord2bOES (GLenum texture, GLbyte s, GLbyte t); GLAPI void APIENTRY glMultiTexCoord2bvOES (GLenum texture, const GLbyte *coords); GLAPI void APIENTRY glMultiTexCoord3bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r); GLAPI void APIENTRY glMultiTexCoord3bvOES (GLenum texture, const GLbyte *coords); GLAPI void APIENTRY glMultiTexCoord4bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); GLAPI void APIENTRY glMultiTexCoord4bvOES (GLenum texture, const GLbyte *coords); GLAPI void APIENTRY glTexCoord1bOES (GLbyte s); GLAPI void APIENTRY glTexCoord1bvOES (const GLbyte *coords); GLAPI void APIENTRY glTexCoord2bOES (GLbyte s, GLbyte t); GLAPI void APIENTRY glTexCoord2bvOES (const GLbyte *coords); GLAPI void APIENTRY glTexCoord3bOES (GLbyte s, GLbyte t, GLbyte r); GLAPI void APIENTRY glTexCoord3bvOES (const GLbyte *coords); GLAPI void APIENTRY glTexCoord4bOES (GLbyte s, GLbyte t, GLbyte r, GLbyte q); GLAPI void APIENTRY glTexCoord4bvOES (const GLbyte *coords); GLAPI void APIENTRY glVertex2bOES (GLbyte x, GLbyte y); GLAPI void APIENTRY glVertex2bvOES (const GLbyte *coords); GLAPI void APIENTRY glVertex3bOES (GLbyte x, GLbyte y, GLbyte z); GLAPI void APIENTRY glVertex3bvOES (const GLbyte *coords); GLAPI void APIENTRY glVertex4bOES (GLbyte x, GLbyte y, GLbyte z, GLbyte w); GLAPI void APIENTRY glVertex4bvOES (const GLbyte *coords); #endif #endif /* GL_OES_byte_coordinates */ #ifndef GL_OES_compressed_paletted_texture #define GL_OES_compressed_paletted_texture 1 #define GL_PALETTE4_RGB8_OES 0x8B90 #define GL_PALETTE4_RGBA8_OES 0x8B91 #define GL_PALETTE4_R5_G6_B5_OES 0x8B92 #define GL_PALETTE4_RGBA4_OES 0x8B93 #define GL_PALETTE4_RGB5_A1_OES 0x8B94 #define GL_PALETTE8_RGB8_OES 0x8B95 #define GL_PALETTE8_RGBA8_OES 0x8B96 #define GL_PALETTE8_R5_G6_B5_OES 0x8B97 #define GL_PALETTE8_RGBA4_OES 0x8B98 #define GL_PALETTE8_RGB5_A1_OES 0x8B99 #endif /* GL_OES_compressed_paletted_texture */ #ifndef GL_OES_fixed_point #define GL_OES_fixed_point 1 typedef khronos_int32_t GLfixed; #define GL_FIXED_OES 0x140C typedef void (APIENTRYP PFNGLALPHAFUNCXOESPROC) (GLenum func, GLfixed ref); typedef void (APIENTRYP PFNGLCLEARCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); typedef void (APIENTRYP PFNGLCLEARDEPTHXOESPROC) (GLfixed depth); typedef void (APIENTRYP PFNGLCLIPPLANEXOESPROC) (GLenum plane, const GLfixed *equation); typedef void (APIENTRYP PFNGLCOLOR4XOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); typedef void (APIENTRYP PFNGLDEPTHRANGEXOESPROC) (GLfixed n, GLfixed f); typedef void (APIENTRYP PFNGLFOGXOESPROC) (GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLFOGXVOESPROC) (GLenum pname, const GLfixed *param); typedef void (APIENTRYP PFNGLFRUSTUMXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); typedef void (APIENTRYP PFNGLGETCLIPPLANEXOESPROC) (GLenum plane, GLfixed *equation); typedef void (APIENTRYP PFNGLGETFIXEDVOESPROC) (GLenum pname, GLfixed *params); typedef void (APIENTRYP PFNGLGETTEXENVXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); typedef void (APIENTRYP PFNGLGETTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); typedef void (APIENTRYP PFNGLLIGHTMODELXOESPROC) (GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLLIGHTMODELXVOESPROC) (GLenum pname, const GLfixed *param); typedef void (APIENTRYP PFNGLLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLLIGHTXVOESPROC) (GLenum light, GLenum pname, const GLfixed *params); typedef void (APIENTRYP PFNGLLINEWIDTHXOESPROC) (GLfixed width); typedef void (APIENTRYP PFNGLLOADMATRIXXOESPROC) (const GLfixed *m); typedef void (APIENTRYP PFNGLMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLMATERIALXVOESPROC) (GLenum face, GLenum pname, const GLfixed *param); typedef void (APIENTRYP PFNGLMULTMATRIXXOESPROC) (const GLfixed *m); typedef void (APIENTRYP PFNGLMULTITEXCOORD4XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); typedef void (APIENTRYP PFNGLNORMAL3XOESPROC) (GLfixed nx, GLfixed ny, GLfixed nz); typedef void (APIENTRYP PFNGLORTHOXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); typedef void (APIENTRYP PFNGLPOINTPARAMETERXVOESPROC) (GLenum pname, const GLfixed *params); typedef void (APIENTRYP PFNGLPOINTSIZEXOESPROC) (GLfixed size); typedef void (APIENTRYP PFNGLPOLYGONOFFSETXOESPROC) (GLfixed factor, GLfixed units); typedef void (APIENTRYP PFNGLROTATEXOESPROC) (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); typedef void (APIENTRYP PFNGLSCALEXOESPROC) (GLfixed x, GLfixed y, GLfixed z); typedef void (APIENTRYP PFNGLTEXENVXOESPROC) (GLenum target, GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLTEXENVXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); typedef void (APIENTRYP PFNGLTEXPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); typedef void (APIENTRYP PFNGLTRANSLATEXOESPROC) (GLfixed x, GLfixed y, GLfixed z); typedef void (APIENTRYP PFNGLACCUMXOESPROC) (GLenum op, GLfixed value); typedef void (APIENTRYP PFNGLBITMAPXOESPROC) (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap); typedef void (APIENTRYP PFNGLBLENDCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); typedef void (APIENTRYP PFNGLCLEARACCUMXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); typedef void (APIENTRYP PFNGLCOLOR3XOESPROC) (GLfixed red, GLfixed green, GLfixed blue); typedef void (APIENTRYP PFNGLCOLOR3XVOESPROC) (const GLfixed *components); typedef void (APIENTRYP PFNGLCOLOR4XVOESPROC) (const GLfixed *components); typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); typedef void (APIENTRYP PFNGLEVALCOORD1XOESPROC) (GLfixed u); typedef void (APIENTRYP PFNGLEVALCOORD1XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLEVALCOORD2XOESPROC) (GLfixed u, GLfixed v); typedef void (APIENTRYP PFNGLEVALCOORD2XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLFEEDBACKBUFFERXOESPROC) (GLsizei n, GLenum type, const GLfixed *buffer); typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); typedef void (APIENTRYP PFNGLGETLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed *params); typedef void (APIENTRYP PFNGLGETMAPXVOESPROC) (GLenum target, GLenum query, GLfixed *v); typedef void (APIENTRYP PFNGLGETMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLGETPIXELMAPXVPROC) (GLenum map, GLint size, GLfixed *values); typedef void (APIENTRYP PFNGLGETTEXGENXVOESPROC) (GLenum coord, GLenum pname, GLfixed *params); typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERXVOESPROC) (GLenum target, GLint level, GLenum pname, GLfixed *params); typedef void (APIENTRYP PFNGLINDEXXOESPROC) (GLfixed component); typedef void (APIENTRYP PFNGLINDEXXVOESPROC) (const GLfixed *component); typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXXOESPROC) (const GLfixed *m); typedef void (APIENTRYP PFNGLMAP1XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); typedef void (APIENTRYP PFNGLMAP2XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); typedef void (APIENTRYP PFNGLMAPGRID1XOESPROC) (GLint n, GLfixed u1, GLfixed u2); typedef void (APIENTRYP PFNGLMAPGRID2XOESPROC) (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXXOESPROC) (const GLfixed *m); typedef void (APIENTRYP PFNGLMULTITEXCOORD1XOESPROC) (GLenum texture, GLfixed s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1XVOESPROC) (GLenum texture, const GLfixed *coords); typedef void (APIENTRYP PFNGLMULTITEXCOORD2XOESPROC) (GLenum texture, GLfixed s, GLfixed t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2XVOESPROC) (GLenum texture, const GLfixed *coords); typedef void (APIENTRYP PFNGLMULTITEXCOORD3XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3XVOESPROC) (GLenum texture, const GLfixed *coords); typedef void (APIENTRYP PFNGLMULTITEXCOORD4XVOESPROC) (GLenum texture, const GLfixed *coords); typedef void (APIENTRYP PFNGLNORMAL3XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLPASSTHROUGHXOESPROC) (GLfixed token); typedef void (APIENTRYP PFNGLPIXELMAPXPROC) (GLenum map, GLint size, const GLfixed *values); typedef void (APIENTRYP PFNGLPIXELSTOREXPROC) (GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLPIXELTRANSFERXOESPROC) (GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLPIXELZOOMXOESPROC) (GLfixed xfactor, GLfixed yfactor); typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESXOESPROC) (GLsizei n, const GLuint *textures, const GLfixed *priorities); typedef void (APIENTRYP PFNGLRASTERPOS2XOESPROC) (GLfixed x, GLfixed y); typedef void (APIENTRYP PFNGLRASTERPOS2XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLRASTERPOS3XOESPROC) (GLfixed x, GLfixed y, GLfixed z); typedef void (APIENTRYP PFNGLRASTERPOS3XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLRASTERPOS4XOESPROC) (GLfixed x, GLfixed y, GLfixed z, GLfixed w); typedef void (APIENTRYP PFNGLRASTERPOS4XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLRECTXOESPROC) (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); typedef void (APIENTRYP PFNGLRECTXVOESPROC) (const GLfixed *v1, const GLfixed *v2); typedef void (APIENTRYP PFNGLTEXCOORD1XOESPROC) (GLfixed s); typedef void (APIENTRYP PFNGLTEXCOORD1XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLTEXCOORD2XOESPROC) (GLfixed s, GLfixed t); typedef void (APIENTRYP PFNGLTEXCOORD2XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLTEXCOORD3XOESPROC) (GLfixed s, GLfixed t, GLfixed r); typedef void (APIENTRYP PFNGLTEXCOORD3XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLTEXCOORD4XOESPROC) (GLfixed s, GLfixed t, GLfixed r, GLfixed q); typedef void (APIENTRYP PFNGLTEXCOORD4XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLTEXGENXOESPROC) (GLenum coord, GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLTEXGENXVOESPROC) (GLenum coord, GLenum pname, const GLfixed *params); typedef void (APIENTRYP PFNGLVERTEX2XOESPROC) (GLfixed x); typedef void (APIENTRYP PFNGLVERTEX2XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLVERTEX3XOESPROC) (GLfixed x, GLfixed y); typedef void (APIENTRYP PFNGLVERTEX3XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLVERTEX4XOESPROC) (GLfixed x, GLfixed y, GLfixed z); typedef void (APIENTRYP PFNGLVERTEX4XVOESPROC) (const GLfixed *coords); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glAlphaFuncxOES (GLenum func, GLfixed ref); GLAPI void APIENTRY glClearColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); GLAPI void APIENTRY glClearDepthxOES (GLfixed depth); GLAPI void APIENTRY glClipPlanexOES (GLenum plane, const GLfixed *equation); GLAPI void APIENTRY glColor4xOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); GLAPI void APIENTRY glDepthRangexOES (GLfixed n, GLfixed f); GLAPI void APIENTRY glFogxOES (GLenum pname, GLfixed param); GLAPI void APIENTRY glFogxvOES (GLenum pname, const GLfixed *param); GLAPI void APIENTRY glFrustumxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); GLAPI void APIENTRY glGetClipPlanexOES (GLenum plane, GLfixed *equation); GLAPI void APIENTRY glGetFixedvOES (GLenum pname, GLfixed *params); GLAPI void APIENTRY glGetTexEnvxvOES (GLenum target, GLenum pname, GLfixed *params); GLAPI void APIENTRY glGetTexParameterxvOES (GLenum target, GLenum pname, GLfixed *params); GLAPI void APIENTRY glLightModelxOES (GLenum pname, GLfixed param); GLAPI void APIENTRY glLightModelxvOES (GLenum pname, const GLfixed *param); GLAPI void APIENTRY glLightxOES (GLenum light, GLenum pname, GLfixed param); GLAPI void APIENTRY glLightxvOES (GLenum light, GLenum pname, const GLfixed *params); GLAPI void APIENTRY glLineWidthxOES (GLfixed width); GLAPI void APIENTRY glLoadMatrixxOES (const GLfixed *m); GLAPI void APIENTRY glMaterialxOES (GLenum face, GLenum pname, GLfixed param); GLAPI void APIENTRY glMaterialxvOES (GLenum face, GLenum pname, const GLfixed *param); GLAPI void APIENTRY glMultMatrixxOES (const GLfixed *m); GLAPI void APIENTRY glMultiTexCoord4xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); GLAPI void APIENTRY glNormal3xOES (GLfixed nx, GLfixed ny, GLfixed nz); GLAPI void APIENTRY glOrthoxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); GLAPI void APIENTRY glPointParameterxvOES (GLenum pname, const GLfixed *params); GLAPI void APIENTRY glPointSizexOES (GLfixed size); GLAPI void APIENTRY glPolygonOffsetxOES (GLfixed factor, GLfixed units); GLAPI void APIENTRY glRotatexOES (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); GLAPI void APIENTRY glScalexOES (GLfixed x, GLfixed y, GLfixed z); GLAPI void APIENTRY glTexEnvxOES (GLenum target, GLenum pname, GLfixed param); GLAPI void APIENTRY glTexEnvxvOES (GLenum target, GLenum pname, const GLfixed *params); GLAPI void APIENTRY glTexParameterxOES (GLenum target, GLenum pname, GLfixed param); GLAPI void APIENTRY glTexParameterxvOES (GLenum target, GLenum pname, const GLfixed *params); GLAPI void APIENTRY glTranslatexOES (GLfixed x, GLfixed y, GLfixed z); GLAPI void APIENTRY glAccumxOES (GLenum op, GLfixed value); GLAPI void APIENTRY glBitmapxOES (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap); GLAPI void APIENTRY glBlendColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); GLAPI void APIENTRY glClearAccumxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); GLAPI void APIENTRY glColor3xOES (GLfixed red, GLfixed green, GLfixed blue); GLAPI void APIENTRY glColor3xvOES (const GLfixed *components); GLAPI void APIENTRY glColor4xvOES (const GLfixed *components); GLAPI void APIENTRY glConvolutionParameterxOES (GLenum target, GLenum pname, GLfixed param); GLAPI void APIENTRY glConvolutionParameterxvOES (GLenum target, GLenum pname, const GLfixed *params); GLAPI void APIENTRY glEvalCoord1xOES (GLfixed u); GLAPI void APIENTRY glEvalCoord1xvOES (const GLfixed *coords); GLAPI void APIENTRY glEvalCoord2xOES (GLfixed u, GLfixed v); GLAPI void APIENTRY glEvalCoord2xvOES (const GLfixed *coords); GLAPI void APIENTRY glFeedbackBufferxOES (GLsizei n, GLenum type, const GLfixed *buffer); GLAPI void APIENTRY glGetConvolutionParameterxvOES (GLenum target, GLenum pname, GLfixed *params); GLAPI void APIENTRY glGetHistogramParameterxvOES (GLenum target, GLenum pname, GLfixed *params); GLAPI void APIENTRY glGetLightxOES (GLenum light, GLenum pname, GLfixed *params); GLAPI void APIENTRY glGetMapxvOES (GLenum target, GLenum query, GLfixed *v); GLAPI void APIENTRY glGetMaterialxOES (GLenum face, GLenum pname, GLfixed param); GLAPI void APIENTRY glGetPixelMapxv (GLenum map, GLint size, GLfixed *values); GLAPI void APIENTRY glGetTexGenxvOES (GLenum coord, GLenum pname, GLfixed *params); GLAPI void APIENTRY glGetTexLevelParameterxvOES (GLenum target, GLint level, GLenum pname, GLfixed *params); GLAPI void APIENTRY glIndexxOES (GLfixed component); GLAPI void APIENTRY glIndexxvOES (const GLfixed *component); GLAPI void APIENTRY glLoadTransposeMatrixxOES (const GLfixed *m); GLAPI void APIENTRY glMap1xOES (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); GLAPI void APIENTRY glMap2xOES (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); GLAPI void APIENTRY glMapGrid1xOES (GLint n, GLfixed u1, GLfixed u2); GLAPI void APIENTRY glMapGrid2xOES (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); GLAPI void APIENTRY glMultTransposeMatrixxOES (const GLfixed *m); GLAPI void APIENTRY glMultiTexCoord1xOES (GLenum texture, GLfixed s); GLAPI void APIENTRY glMultiTexCoord1xvOES (GLenum texture, const GLfixed *coords); GLAPI void APIENTRY glMultiTexCoord2xOES (GLenum texture, GLfixed s, GLfixed t); GLAPI void APIENTRY glMultiTexCoord2xvOES (GLenum texture, const GLfixed *coords); GLAPI void APIENTRY glMultiTexCoord3xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r); GLAPI void APIENTRY glMultiTexCoord3xvOES (GLenum texture, const GLfixed *coords); GLAPI void APIENTRY glMultiTexCoord4xvOES (GLenum texture, const GLfixed *coords); GLAPI void APIENTRY glNormal3xvOES (const GLfixed *coords); GLAPI void APIENTRY glPassThroughxOES (GLfixed token); GLAPI void APIENTRY glPixelMapx (GLenum map, GLint size, const GLfixed *values); GLAPI void APIENTRY glPixelStorex (GLenum pname, GLfixed param); GLAPI void APIENTRY glPixelTransferxOES (GLenum pname, GLfixed param); GLAPI void APIENTRY glPixelZoomxOES (GLfixed xfactor, GLfixed yfactor); GLAPI void APIENTRY glPrioritizeTexturesxOES (GLsizei n, const GLuint *textures, const GLfixed *priorities); GLAPI void APIENTRY glRasterPos2xOES (GLfixed x, GLfixed y); GLAPI void APIENTRY glRasterPos2xvOES (const GLfixed *coords); GLAPI void APIENTRY glRasterPos3xOES (GLfixed x, GLfixed y, GLfixed z); GLAPI void APIENTRY glRasterPos3xvOES (const GLfixed *coords); GLAPI void APIENTRY glRasterPos4xOES (GLfixed x, GLfixed y, GLfixed z, GLfixed w); GLAPI void APIENTRY glRasterPos4xvOES (const GLfixed *coords); GLAPI void APIENTRY glRectxOES (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); GLAPI void APIENTRY glRectxvOES (const GLfixed *v1, const GLfixed *v2); GLAPI void APIENTRY glTexCoord1xOES (GLfixed s); GLAPI void APIENTRY glTexCoord1xvOES (const GLfixed *coords); GLAPI void APIENTRY glTexCoord2xOES (GLfixed s, GLfixed t); GLAPI void APIENTRY glTexCoord2xvOES (const GLfixed *coords); GLAPI void APIENTRY glTexCoord3xOES (GLfixed s, GLfixed t, GLfixed r); GLAPI void APIENTRY glTexCoord3xvOES (const GLfixed *coords); GLAPI void APIENTRY glTexCoord4xOES (GLfixed s, GLfixed t, GLfixed r, GLfixed q); GLAPI void APIENTRY glTexCoord4xvOES (const GLfixed *coords); GLAPI void APIENTRY glTexGenxOES (GLenum coord, GLenum pname, GLfixed param); GLAPI void APIENTRY glTexGenxvOES (GLenum coord, GLenum pname, const GLfixed *params); GLAPI void APIENTRY glVertex2xOES (GLfixed x); GLAPI void APIENTRY glVertex2xvOES (const GLfixed *coords); GLAPI void APIENTRY glVertex3xOES (GLfixed x, GLfixed y); GLAPI void APIENTRY glVertex3xvOES (const GLfixed *coords); GLAPI void APIENTRY glVertex4xOES (GLfixed x, GLfixed y, GLfixed z); GLAPI void APIENTRY glVertex4xvOES (const GLfixed *coords); #endif #endif /* GL_OES_fixed_point */ #ifndef GL_OES_query_matrix #define GL_OES_query_matrix 1 typedef GLbitfield (APIENTRYP PFNGLQUERYMATRIXXOESPROC) (GLfixed *mantissa, GLint *exponent); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLbitfield APIENTRY glQueryMatrixxOES (GLfixed *mantissa, GLint *exponent); #endif #endif /* GL_OES_query_matrix */ #ifndef GL_OES_read_format #define GL_OES_read_format 1 #define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A #define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B #endif /* GL_OES_read_format */ #ifndef GL_OES_single_precision #define GL_OES_single_precision 1 typedef void (APIENTRYP PFNGLCLEARDEPTHFOESPROC) (GLclampf depth); typedef void (APIENTRYP PFNGLCLIPPLANEFOESPROC) (GLenum plane, const GLfloat *equation); typedef void (APIENTRYP PFNGLDEPTHRANGEFOESPROC) (GLclampf n, GLclampf f); typedef void (APIENTRYP PFNGLFRUSTUMFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); typedef void (APIENTRYP PFNGLGETCLIPPLANEFOESPROC) (GLenum plane, GLfloat *equation); typedef void (APIENTRYP PFNGLORTHOFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glClearDepthfOES (GLclampf depth); GLAPI void APIENTRY glClipPlanefOES (GLenum plane, const GLfloat *equation); GLAPI void APIENTRY glDepthRangefOES (GLclampf n, GLclampf f); GLAPI void APIENTRY glFrustumfOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); GLAPI void APIENTRY glGetClipPlanefOES (GLenum plane, GLfloat *equation); GLAPI void APIENTRY glOrthofOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); #endif #endif /* GL_OES_single_precision */ #ifndef GL_3DFX_multisample #define GL_3DFX_multisample 1 #define GL_MULTISAMPLE_3DFX 0x86B2 #define GL_SAMPLE_BUFFERS_3DFX 0x86B3 #define GL_SAMPLES_3DFX 0x86B4 #define GL_MULTISAMPLE_BIT_3DFX 0x20000000 #endif /* GL_3DFX_multisample */ #ifndef GL_3DFX_tbuffer #define GL_3DFX_tbuffer 1 typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTbufferMask3DFX (GLuint mask); #endif #endif /* GL_3DFX_tbuffer */ #ifndef GL_3DFX_texture_compression_FXT1 #define GL_3DFX_texture_compression_FXT1 1 #define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 #define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 #endif /* GL_3DFX_texture_compression_FXT1 */ #ifndef GL_AMD_blend_minmax_factor #define GL_AMD_blend_minmax_factor 1 #define GL_FACTOR_MIN_AMD 0x901C #define GL_FACTOR_MAX_AMD 0x901D #endif /* GL_AMD_blend_minmax_factor */ #ifndef GL_AMD_conservative_depth #define GL_AMD_conservative_depth 1 #endif /* GL_AMD_conservative_depth */ #ifndef GL_AMD_debug_output #define GL_AMD_debug_output 1 typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); #define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143 #define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144 #define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145 #define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146 #define GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147 #define GL_DEBUG_SEVERITY_LOW_AMD 0x9148 #define GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149 #define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A #define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B #define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C #define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D #define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E #define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F #define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150 typedef void (APIENTRYP PFNGLDEBUGMESSAGEENABLEAMDPROC) (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTAMDPROC) (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKAMDPROC) (GLDEBUGPROCAMD callback, void *userParam); typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGAMDPROC) (GLuint count, GLsizei bufSize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDebugMessageEnableAMD (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); GLAPI void APIENTRY glDebugMessageInsertAMD (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); GLAPI void APIENTRY glDebugMessageCallbackAMD (GLDEBUGPROCAMD callback, void *userParam); GLAPI GLuint APIENTRY glGetDebugMessageLogAMD (GLuint count, GLsizei bufSize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); #endif #endif /* GL_AMD_debug_output */ #ifndef GL_AMD_depth_clamp_separate #define GL_AMD_depth_clamp_separate 1 #define GL_DEPTH_CLAMP_NEAR_AMD 0x901E #define GL_DEPTH_CLAMP_FAR_AMD 0x901F #endif /* GL_AMD_depth_clamp_separate */ #ifndef GL_AMD_draw_buffers_blend #define GL_AMD_draw_buffers_blend 1 typedef void (APIENTRYP PFNGLBLENDFUNCINDEXEDAMDPROC) (GLuint buf, GLenum src, GLenum dst); typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); typedef void (APIENTRYP PFNGLBLENDEQUATIONINDEXEDAMDPROC) (GLuint buf, GLenum mode); typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendFuncIndexedAMD (GLuint buf, GLenum src, GLenum dst); GLAPI void APIENTRY glBlendFuncSeparateIndexedAMD (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); GLAPI void APIENTRY glBlendEquationIndexedAMD (GLuint buf, GLenum mode); GLAPI void APIENTRY glBlendEquationSeparateIndexedAMD (GLuint buf, GLenum modeRGB, GLenum modeAlpha); #endif #endif /* GL_AMD_draw_buffers_blend */ #ifndef GL_AMD_framebuffer_multisample_advanced #define GL_AMD_framebuffer_multisample_advanced 1 #define GL_RENDERBUFFER_STORAGE_SAMPLES_AMD 0x91B2 #define GL_MAX_COLOR_FRAMEBUFFER_SAMPLES_AMD 0x91B3 #define GL_MAX_COLOR_FRAMEBUFFER_STORAGE_SAMPLES_AMD 0x91B4 #define GL_MAX_DEPTH_STENCIL_FRAMEBUFFER_SAMPLES_AMD 0x91B5 #define GL_NUM_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B6 #define GL_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B7 typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glRenderbufferStorageMultisampleAdvancedAMD (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleAdvancedAMD (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); #endif #endif /* GL_AMD_framebuffer_multisample_advanced */ #ifndef GL_AMD_framebuffer_sample_positions #define GL_AMD_framebuffer_sample_positions 1 #define GL_SUBSAMPLE_DISTANCE_AMD 0x883F #define GL_PIXELS_PER_SAMPLE_PATTERN_X_AMD 0x91AE #define GL_PIXELS_PER_SAMPLE_PATTERN_Y_AMD 0x91AF #define GL_ALL_PIXELS_AMD 0xFFFFFFFF typedef void (APIENTRYP PFNGLFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC) (GLenum target, GLuint numsamples, GLuint pixelindex, const GLfloat *values); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC) (GLuint framebuffer, GLuint numsamples, GLuint pixelindex, const GLfloat *values); typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERFVAMDPROC) (GLenum target, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat *values); typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERFVAMDPROC) (GLuint framebuffer, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat *values); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFramebufferSamplePositionsfvAMD (GLenum target, GLuint numsamples, GLuint pixelindex, const GLfloat *values); GLAPI void APIENTRY glNamedFramebufferSamplePositionsfvAMD (GLuint framebuffer, GLuint numsamples, GLuint pixelindex, const GLfloat *values); GLAPI void APIENTRY glGetFramebufferParameterfvAMD (GLenum target, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat *values); GLAPI void APIENTRY glGetNamedFramebufferParameterfvAMD (GLuint framebuffer, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat *values); #endif #endif /* GL_AMD_framebuffer_sample_positions */ #ifndef GL_AMD_gcn_shader #define GL_AMD_gcn_shader 1 #endif /* GL_AMD_gcn_shader */ #ifndef GL_AMD_gpu_shader_half_float #define GL_AMD_gpu_shader_half_float 1 #define GL_FLOAT16_NV 0x8FF8 #define GL_FLOAT16_VEC2_NV 0x8FF9 #define GL_FLOAT16_VEC3_NV 0x8FFA #define GL_FLOAT16_VEC4_NV 0x8FFB #define GL_FLOAT16_MAT2_AMD 0x91C5 #define GL_FLOAT16_MAT3_AMD 0x91C6 #define GL_FLOAT16_MAT4_AMD 0x91C7 #define GL_FLOAT16_MAT2x3_AMD 0x91C8 #define GL_FLOAT16_MAT2x4_AMD 0x91C9 #define GL_FLOAT16_MAT3x2_AMD 0x91CA #define GL_FLOAT16_MAT3x4_AMD 0x91CB #define GL_FLOAT16_MAT4x2_AMD 0x91CC #define GL_FLOAT16_MAT4x3_AMD 0x91CD #endif /* GL_AMD_gpu_shader_half_float */ #ifndef GL_AMD_gpu_shader_int16 #define GL_AMD_gpu_shader_int16 1 #endif /* GL_AMD_gpu_shader_int16 */ #ifndef GL_AMD_gpu_shader_int64 #define GL_AMD_gpu_shader_int64 1 typedef khronos_int64_t GLint64EXT; #define GL_INT64_NV 0x140E #define GL_UNSIGNED_INT64_NV 0x140F #define GL_INT8_NV 0x8FE0 #define GL_INT8_VEC2_NV 0x8FE1 #define GL_INT8_VEC3_NV 0x8FE2 #define GL_INT8_VEC4_NV 0x8FE3 #define GL_INT16_NV 0x8FE4 #define GL_INT16_VEC2_NV 0x8FE5 #define GL_INT16_VEC3_NV 0x8FE6 #define GL_INT16_VEC4_NV 0x8FE7 #define GL_INT64_VEC2_NV 0x8FE9 #define GL_INT64_VEC3_NV 0x8FEA #define GL_INT64_VEC4_NV 0x8FEB #define GL_UNSIGNED_INT8_NV 0x8FEC #define GL_UNSIGNED_INT8_VEC2_NV 0x8FED #define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE #define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF #define GL_UNSIGNED_INT16_NV 0x8FF0 #define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 #define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 #define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 #define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5 #define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6 #define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7 typedef void (APIENTRYP PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x); typedef void (APIENTRYP PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y); typedef void (APIENTRYP PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); typedef void (APIENTRYP PFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); typedef void (APIENTRYP PFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x); typedef void (APIENTRYP PFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y); typedef void (APIENTRYP PFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); typedef void (APIENTRYP PFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); typedef void (APIENTRYP PFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT *params); typedef void (APIENTRYP PFNGLGETUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLuint64EXT *params); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glUniform1i64NV (GLint location, GLint64EXT x); GLAPI void APIENTRY glUniform2i64NV (GLint location, GLint64EXT x, GLint64EXT y); GLAPI void APIENTRY glUniform3i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); GLAPI void APIENTRY glUniform4i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); GLAPI void APIENTRY glUniform1i64vNV (GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glUniform2i64vNV (GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glUniform3i64vNV (GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glUniform4i64vNV (GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glUniform1ui64NV (GLint location, GLuint64EXT x); GLAPI void APIENTRY glUniform2ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y); GLAPI void APIENTRY glUniform3ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); GLAPI void APIENTRY glUniform4ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); GLAPI void APIENTRY glUniform1ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glUniform2ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glUniform3ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glUniform4ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glGetUniformi64vNV (GLuint program, GLint location, GLint64EXT *params); GLAPI void APIENTRY glGetUniformui64vNV (GLuint program, GLint location, GLuint64EXT *params); GLAPI void APIENTRY glProgramUniform1i64NV (GLuint program, GLint location, GLint64EXT x); GLAPI void APIENTRY glProgramUniform2i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); GLAPI void APIENTRY glProgramUniform3i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); GLAPI void APIENTRY glProgramUniform4i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); GLAPI void APIENTRY glProgramUniform1i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glProgramUniform2i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glProgramUniform3i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glProgramUniform4i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glProgramUniform1ui64NV (GLuint program, GLint location, GLuint64EXT x); GLAPI void APIENTRY glProgramUniform2ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); GLAPI void APIENTRY glProgramUniform3ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); GLAPI void APIENTRY glProgramUniform4ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); GLAPI void APIENTRY glProgramUniform1ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glProgramUniform2ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glProgramUniform3ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glProgramUniform4ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); #endif #endif /* GL_AMD_gpu_shader_int64 */ #ifndef GL_AMD_interleaved_elements #define GL_AMD_interleaved_elements 1 #define GL_VERTEX_ELEMENT_SWIZZLE_AMD 0x91A4 #define GL_VERTEX_ID_SWIZZLE_AMD 0x91A5 typedef void (APIENTRYP PFNGLVERTEXATTRIBPARAMETERIAMDPROC) (GLuint index, GLenum pname, GLint param); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexAttribParameteriAMD (GLuint index, GLenum pname, GLint param); #endif #endif /* GL_AMD_interleaved_elements */ #ifndef GL_AMD_multi_draw_indirect #define GL_AMD_multi_draw_indirect 1 typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC) (GLenum mode, const void *indirect, GLsizei primcount, GLsizei stride); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei primcount, GLsizei stride); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMultiDrawArraysIndirectAMD (GLenum mode, const void *indirect, GLsizei primcount, GLsizei stride); GLAPI void APIENTRY glMultiDrawElementsIndirectAMD (GLenum mode, GLenum type, const void *indirect, GLsizei primcount, GLsizei stride); #endif #endif /* GL_AMD_multi_draw_indirect */ #ifndef GL_AMD_name_gen_delete #define GL_AMD_name_gen_delete 1 #define GL_DATA_BUFFER_AMD 0x9151 #define GL_PERFORMANCE_MONITOR_AMD 0x9152 #define GL_QUERY_OBJECT_AMD 0x9153 #define GL_VERTEX_ARRAY_OBJECT_AMD 0x9154 #define GL_SAMPLER_OBJECT_AMD 0x9155 typedef void (APIENTRYP PFNGLGENNAMESAMDPROC) (GLenum identifier, GLuint num, GLuint *names); typedef void (APIENTRYP PFNGLDELETENAMESAMDPROC) (GLenum identifier, GLuint num, const GLuint *names); typedef GLboolean (APIENTRYP PFNGLISNAMEAMDPROC) (GLenum identifier, GLuint name); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGenNamesAMD (GLenum identifier, GLuint num, GLuint *names); GLAPI void APIENTRY glDeleteNamesAMD (GLenum identifier, GLuint num, const GLuint *names); GLAPI GLboolean APIENTRY glIsNameAMD (GLenum identifier, GLuint name); #endif #endif /* GL_AMD_name_gen_delete */ #ifndef GL_AMD_occlusion_query_event #define GL_AMD_occlusion_query_event 1 #define GL_OCCLUSION_QUERY_EVENT_MASK_AMD 0x874F #define GL_QUERY_DEPTH_PASS_EVENT_BIT_AMD 0x00000001 #define GL_QUERY_DEPTH_FAIL_EVENT_BIT_AMD 0x00000002 #define GL_QUERY_STENCIL_FAIL_EVENT_BIT_AMD 0x00000004 #define GL_QUERY_DEPTH_BOUNDS_FAIL_EVENT_BIT_AMD 0x00000008 #define GL_QUERY_ALL_EVENT_BITS_AMD 0xFFFFFFFF typedef void (APIENTRYP PFNGLQUERYOBJECTPARAMETERUIAMDPROC) (GLenum target, GLuint id, GLenum pname, GLuint param); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glQueryObjectParameteruiAMD (GLenum target, GLuint id, GLenum pname, GLuint param); #endif #endif /* GL_AMD_occlusion_query_event */ #ifndef GL_AMD_performance_monitor #define GL_AMD_performance_monitor 1 #define GL_COUNTER_TYPE_AMD 0x8BC0 #define GL_COUNTER_RANGE_AMD 0x8BC1 #define GL_UNSIGNED_INT64_AMD 0x8BC2 #define GL_PERCENTAGE_AMD 0x8BC3 #define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 #define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 #define GL_PERFMON_RESULT_AMD 0x8BC6 typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups); typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, void *data); typedef void (APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); typedef void (APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); typedef void (APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); typedef void (APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); typedef void (APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); GLAPI void APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); GLAPI void APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); GLAPI void APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); GLAPI void APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, void *data); GLAPI void APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors); GLAPI void APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors); GLAPI void APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); GLAPI void APIENTRY glBeginPerfMonitorAMD (GLuint monitor); GLAPI void APIENTRY glEndPerfMonitorAMD (GLuint monitor); GLAPI void APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); #endif #endif /* GL_AMD_performance_monitor */ #ifndef GL_AMD_pinned_memory #define GL_AMD_pinned_memory 1 #define GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD 0x9160 #endif /* GL_AMD_pinned_memory */ #ifndef GL_AMD_query_buffer_object #define GL_AMD_query_buffer_object 1 #define GL_QUERY_BUFFER_AMD 0x9192 #define GL_QUERY_BUFFER_BINDING_AMD 0x9193 #define GL_QUERY_RESULT_NO_WAIT_AMD 0x9194 #endif /* GL_AMD_query_buffer_object */ #ifndef GL_AMD_sample_positions #define GL_AMD_sample_positions 1 typedef void (APIENTRYP PFNGLSETMULTISAMPLEFVAMDPROC) (GLenum pname, GLuint index, const GLfloat *val); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSetMultisamplefvAMD (GLenum pname, GLuint index, const GLfloat *val); #endif #endif /* GL_AMD_sample_positions */ #ifndef GL_AMD_seamless_cubemap_per_texture #define GL_AMD_seamless_cubemap_per_texture 1 #endif /* GL_AMD_seamless_cubemap_per_texture */ #ifndef GL_AMD_shader_atomic_counter_ops #define GL_AMD_shader_atomic_counter_ops 1 #endif /* GL_AMD_shader_atomic_counter_ops */ #ifndef GL_AMD_shader_ballot #define GL_AMD_shader_ballot 1 #endif /* GL_AMD_shader_ballot */ #ifndef GL_AMD_shader_explicit_vertex_parameter #define GL_AMD_shader_explicit_vertex_parameter 1 #endif /* GL_AMD_shader_explicit_vertex_parameter */ #ifndef GL_AMD_shader_gpu_shader_half_float_fetch #define GL_AMD_shader_gpu_shader_half_float_fetch 1 #endif /* GL_AMD_shader_gpu_shader_half_float_fetch */ #ifndef GL_AMD_shader_image_load_store_lod #define GL_AMD_shader_image_load_store_lod 1 #endif /* GL_AMD_shader_image_load_store_lod */ #ifndef GL_AMD_shader_stencil_export #define GL_AMD_shader_stencil_export 1 #endif /* GL_AMD_shader_stencil_export */ #ifndef GL_AMD_shader_trinary_minmax #define GL_AMD_shader_trinary_minmax 1 #endif /* GL_AMD_shader_trinary_minmax */ #ifndef GL_AMD_sparse_texture #define GL_AMD_sparse_texture 1 #define GL_VIRTUAL_PAGE_SIZE_X_AMD 0x9195 #define GL_VIRTUAL_PAGE_SIZE_Y_AMD 0x9196 #define GL_VIRTUAL_PAGE_SIZE_Z_AMD 0x9197 #define GL_MAX_SPARSE_TEXTURE_SIZE_AMD 0x9198 #define GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD 0x9199 #define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS 0x919A #define GL_MIN_SPARSE_LEVEL_AMD 0x919B #define GL_MIN_LOD_WARNING_AMD 0x919C #define GL_TEXTURE_STORAGE_SPARSE_BIT_AMD 0x00000001 typedef void (APIENTRYP PFNGLTEXSTORAGESPARSEAMDPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); typedef void (APIENTRYP PFNGLTEXTURESTORAGESPARSEAMDPROC) (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexStorageSparseAMD (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); GLAPI void APIENTRY glTextureStorageSparseAMD (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); #endif #endif /* GL_AMD_sparse_texture */ #ifndef GL_AMD_stencil_operation_extended #define GL_AMD_stencil_operation_extended 1 #define GL_SET_AMD 0x874A #define GL_REPLACE_VALUE_AMD 0x874B #define GL_STENCIL_OP_VALUE_AMD 0x874C #define GL_STENCIL_BACK_OP_VALUE_AMD 0x874D typedef void (APIENTRYP PFNGLSTENCILOPVALUEAMDPROC) (GLenum face, GLuint value); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glStencilOpValueAMD (GLenum face, GLuint value); #endif #endif /* GL_AMD_stencil_operation_extended */ #ifndef GL_AMD_texture_gather_bias_lod #define GL_AMD_texture_gather_bias_lod 1 #endif /* GL_AMD_texture_gather_bias_lod */ #ifndef GL_AMD_texture_texture4 #define GL_AMD_texture_texture4 1 #endif /* GL_AMD_texture_texture4 */ #ifndef GL_AMD_transform_feedback3_lines_triangles #define GL_AMD_transform_feedback3_lines_triangles 1 #endif /* GL_AMD_transform_feedback3_lines_triangles */ #ifndef GL_AMD_transform_feedback4 #define GL_AMD_transform_feedback4 1 #define GL_STREAM_RASTERIZATION_AMD 0x91A0 #endif /* GL_AMD_transform_feedback4 */ #ifndef GL_AMD_vertex_shader_layer #define GL_AMD_vertex_shader_layer 1 #endif /* GL_AMD_vertex_shader_layer */ #ifndef GL_AMD_vertex_shader_tessellator #define GL_AMD_vertex_shader_tessellator 1 #define GL_SAMPLER_BUFFER_AMD 0x9001 #define GL_INT_SAMPLER_BUFFER_AMD 0x9002 #define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003 #define GL_TESSELLATION_MODE_AMD 0x9004 #define GL_TESSELLATION_FACTOR_AMD 0x9005 #define GL_DISCRETE_AMD 0x9006 #define GL_CONTINUOUS_AMD 0x9007 typedef void (APIENTRYP PFNGLTESSELLATIONFACTORAMDPROC) (GLfloat factor); typedef void (APIENTRYP PFNGLTESSELLATIONMODEAMDPROC) (GLenum mode); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTessellationFactorAMD (GLfloat factor); GLAPI void APIENTRY glTessellationModeAMD (GLenum mode); #endif #endif /* GL_AMD_vertex_shader_tessellator */ #ifndef GL_AMD_vertex_shader_viewport_index #define GL_AMD_vertex_shader_viewport_index 1 #endif /* GL_AMD_vertex_shader_viewport_index */ #ifndef GL_APPLE_aux_depth_stencil #define GL_APPLE_aux_depth_stencil 1 #define GL_AUX_DEPTH_STENCIL_APPLE 0x8A14 #endif /* GL_APPLE_aux_depth_stencil */ #ifndef GL_APPLE_client_storage #define GL_APPLE_client_storage 1 #define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 #endif /* GL_APPLE_client_storage */ #ifndef GL_APPLE_element_array #define GL_APPLE_element_array 1 #define GL_ELEMENT_ARRAY_APPLE 0x8A0C #define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D #define GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E typedef void (APIENTRYP PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const void *pointer); typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count); typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); typedef void (APIENTRYP PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glElementPointerAPPLE (GLenum type, const void *pointer); GLAPI void APIENTRY glDrawElementArrayAPPLE (GLenum mode, GLint first, GLsizei count); GLAPI void APIENTRY glDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); GLAPI void APIENTRY glMultiDrawElementArrayAPPLE (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); GLAPI void APIENTRY glMultiDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); #endif #endif /* GL_APPLE_element_array */ #ifndef GL_APPLE_fence #define GL_APPLE_fence 1 #define GL_DRAW_PIXELS_APPLE 0x8A0A #define GL_FENCE_APPLE 0x8A0B typedef void (APIENTRYP PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint *fences); typedef void (APIENTRYP PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint *fences); typedef void (APIENTRYP PFNGLSETFENCEAPPLEPROC) (GLuint fence); typedef GLboolean (APIENTRYP PFNGLISFENCEAPPLEPROC) (GLuint fence); typedef GLboolean (APIENTRYP PFNGLTESTFENCEAPPLEPROC) (GLuint fence); typedef void (APIENTRYP PFNGLFINISHFENCEAPPLEPROC) (GLuint fence); typedef GLboolean (APIENTRYP PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name); typedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGenFencesAPPLE (GLsizei n, GLuint *fences); GLAPI void APIENTRY glDeleteFencesAPPLE (GLsizei n, const GLuint *fences); GLAPI void APIENTRY glSetFenceAPPLE (GLuint fence); GLAPI GLboolean APIENTRY glIsFenceAPPLE (GLuint fence); GLAPI GLboolean APIENTRY glTestFenceAPPLE (GLuint fence); GLAPI void APIENTRY glFinishFenceAPPLE (GLuint fence); GLAPI GLboolean APIENTRY glTestObjectAPPLE (GLenum object, GLuint name); GLAPI void APIENTRY glFinishObjectAPPLE (GLenum object, GLint name); #endif #endif /* GL_APPLE_fence */ #ifndef GL_APPLE_float_pixels #define GL_APPLE_float_pixels 1 #define GL_HALF_APPLE 0x140B #define GL_RGBA_FLOAT32_APPLE 0x8814 #define GL_RGB_FLOAT32_APPLE 0x8815 #define GL_ALPHA_FLOAT32_APPLE 0x8816 #define GL_INTENSITY_FLOAT32_APPLE 0x8817 #define GL_LUMINANCE_FLOAT32_APPLE 0x8818 #define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 #define GL_RGBA_FLOAT16_APPLE 0x881A #define GL_RGB_FLOAT16_APPLE 0x881B #define GL_ALPHA_FLOAT16_APPLE 0x881C #define GL_INTENSITY_FLOAT16_APPLE 0x881D #define GL_LUMINANCE_FLOAT16_APPLE 0x881E #define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F #define GL_COLOR_FLOAT_APPLE 0x8A0F #endif /* GL_APPLE_float_pixels */ #ifndef GL_APPLE_flush_buffer_range #define GL_APPLE_flush_buffer_range 1 #define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 #define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 typedef void (APIENTRYP PFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBufferParameteriAPPLE (GLenum target, GLenum pname, GLint param); GLAPI void APIENTRY glFlushMappedBufferRangeAPPLE (GLenum target, GLintptr offset, GLsizeiptr size); #endif #endif /* GL_APPLE_flush_buffer_range */ #ifndef GL_APPLE_object_purgeable #define GL_APPLE_object_purgeable 1 #define GL_BUFFER_OBJECT_APPLE 0x85B3 #define GL_RELEASED_APPLE 0x8A19 #define GL_VOLATILE_APPLE 0x8A1A #define GL_RETAINED_APPLE 0x8A1B #define GL_UNDEFINED_APPLE 0x8A1C #define GL_PURGEABLE_APPLE 0x8A1D typedef GLenum (APIENTRYP PFNGLOBJECTPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); typedef GLenum (APIENTRYP PFNGLOBJECTUNPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVAPPLEPROC) (GLenum objectType, GLuint name, GLenum pname, GLint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLenum APIENTRY glObjectPurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); GLAPI GLenum APIENTRY glObjectUnpurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); GLAPI void APIENTRY glGetObjectParameterivAPPLE (GLenum objectType, GLuint name, GLenum pname, GLint *params); #endif #endif /* GL_APPLE_object_purgeable */ #ifndef GL_APPLE_rgb_422 #define GL_APPLE_rgb_422 1 #define GL_RGB_422_APPLE 0x8A1F #define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA #define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB #define GL_RGB_RAW_422_APPLE 0x8A51 #endif /* GL_APPLE_rgb_422 */ #ifndef GL_APPLE_row_bytes #define GL_APPLE_row_bytes 1 #define GL_PACK_ROW_BYTES_APPLE 0x8A15 #define GL_UNPACK_ROW_BYTES_APPLE 0x8A16 #endif /* GL_APPLE_row_bytes */ #ifndef GL_APPLE_specular_vector #define GL_APPLE_specular_vector 1 #define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 #endif /* GL_APPLE_specular_vector */ #ifndef GL_APPLE_texture_range #define GL_APPLE_texture_range 1 #define GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7 #define GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8 #define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC #define GL_STORAGE_PRIVATE_APPLE 0x85BD #define GL_STORAGE_CACHED_APPLE 0x85BE #define GL_STORAGE_SHARED_APPLE 0x85BF typedef void (APIENTRYP PFNGLTEXTURERANGEAPPLEPROC) (GLenum target, GLsizei length, const void *pointer); typedef void (APIENTRYP PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC) (GLenum target, GLenum pname, void **params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTextureRangeAPPLE (GLenum target, GLsizei length, const void *pointer); GLAPI void APIENTRY glGetTexParameterPointervAPPLE (GLenum target, GLenum pname, void **params); #endif #endif /* GL_APPLE_texture_range */ #ifndef GL_APPLE_transform_hint #define GL_APPLE_transform_hint 1 #define GL_TRANSFORM_HINT_APPLE 0x85B1 #endif /* GL_APPLE_transform_hint */ #ifndef GL_APPLE_vertex_array_object #define GL_APPLE_vertex_array_object 1 #define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 typedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array); typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays); typedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, GLuint *arrays); typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBindVertexArrayAPPLE (GLuint array); GLAPI void APIENTRY glDeleteVertexArraysAPPLE (GLsizei n, const GLuint *arrays); GLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei n, GLuint *arrays); GLAPI GLboolean APIENTRY glIsVertexArrayAPPLE (GLuint array); #endif #endif /* GL_APPLE_vertex_array_object */ #ifndef GL_APPLE_vertex_array_range #define GL_APPLE_vertex_array_range 1 #define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D #define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E #define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F #define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 #define GL_STORAGE_CLIENT_APPLE 0x85B4 typedef void (APIENTRYP PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void *pointer); typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void *pointer); typedef void (APIENTRYP PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexArrayRangeAPPLE (GLsizei length, void *pointer); GLAPI void APIENTRY glFlushVertexArrayRangeAPPLE (GLsizei length, void *pointer); GLAPI void APIENTRY glVertexArrayParameteriAPPLE (GLenum pname, GLint param); #endif #endif /* GL_APPLE_vertex_array_range */ #ifndef GL_APPLE_vertex_program_evaluators #define GL_APPLE_vertex_program_evaluators 1 #define GL_VERTEX_ATTRIB_MAP1_APPLE 0x8A00 #define GL_VERTEX_ATTRIB_MAP2_APPLE 0x8A01 #define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02 #define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03 #define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04 #define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05 #define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06 #define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07 #define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08 #define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09 typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); typedef GLboolean (APIENTRYP PFNGLISVERTEXATTRIBENABLEDAPPLEPROC) (GLuint index, GLenum pname); typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glEnableVertexAttribAPPLE (GLuint index, GLenum pname); GLAPI void APIENTRY glDisableVertexAttribAPPLE (GLuint index, GLenum pname); GLAPI GLboolean APIENTRY glIsVertexAttribEnabledAPPLE (GLuint index, GLenum pname); GLAPI void APIENTRY glMapVertexAttrib1dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); GLAPI void APIENTRY glMapVertexAttrib1fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); GLAPI void APIENTRY glMapVertexAttrib2dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); GLAPI void APIENTRY glMapVertexAttrib2fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); #endif #endif /* GL_APPLE_vertex_program_evaluators */ #ifndef GL_APPLE_ycbcr_422 #define GL_APPLE_ycbcr_422 1 #define GL_YCBCR_422_APPLE 0x85B9 #endif /* GL_APPLE_ycbcr_422 */ #ifndef GL_ATI_draw_buffers #define GL_ATI_draw_buffers 1 #define GL_MAX_DRAW_BUFFERS_ATI 0x8824 #define GL_DRAW_BUFFER0_ATI 0x8825 #define GL_DRAW_BUFFER1_ATI 0x8826 #define GL_DRAW_BUFFER2_ATI 0x8827 #define GL_DRAW_BUFFER3_ATI 0x8828 #define GL_DRAW_BUFFER4_ATI 0x8829 #define GL_DRAW_BUFFER5_ATI 0x882A #define GL_DRAW_BUFFER6_ATI 0x882B #define GL_DRAW_BUFFER7_ATI 0x882C #define GL_DRAW_BUFFER8_ATI 0x882D #define GL_DRAW_BUFFER9_ATI 0x882E #define GL_DRAW_BUFFER10_ATI 0x882F #define GL_DRAW_BUFFER11_ATI 0x8830 #define GL_DRAW_BUFFER12_ATI 0x8831 #define GL_DRAW_BUFFER13_ATI 0x8832 #define GL_DRAW_BUFFER14_ATI 0x8833 #define GL_DRAW_BUFFER15_ATI 0x8834 typedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawBuffersATI (GLsizei n, const GLenum *bufs); #endif #endif /* GL_ATI_draw_buffers */ #ifndef GL_ATI_element_array #define GL_ATI_element_array 1 #define GL_ELEMENT_ARRAY_ATI 0x8768 #define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 #define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A typedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC) (GLenum type, const void *pointer); typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count); typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glElementPointerATI (GLenum type, const void *pointer); GLAPI void APIENTRY glDrawElementArrayATI (GLenum mode, GLsizei count); GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum mode, GLuint start, GLuint end, GLsizei count); #endif #endif /* GL_ATI_element_array */ #ifndef GL_ATI_envmap_bumpmap #define GL_ATI_envmap_bumpmap 1 #define GL_BUMP_ROT_MATRIX_ATI 0x8775 #define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 #define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 #define GL_BUMP_TEX_UNITS_ATI 0x8778 #define GL_DUDV_ATI 0x8779 #define GL_DU8DV8_ATI 0x877A #define GL_BUMP_ENVMAP_ATI 0x877B #define GL_BUMP_TARGET_ATI 0x877C typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param); typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param); typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param); typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexBumpParameterivATI (GLenum pname, const GLint *param); GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum pname, const GLfloat *param); GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum pname, GLint *param); GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum pname, GLfloat *param); #endif #endif /* GL_ATI_envmap_bumpmap */ #ifndef GL_ATI_fragment_shader #define GL_ATI_fragment_shader 1 #define GL_FRAGMENT_SHADER_ATI 0x8920 #define GL_REG_0_ATI 0x8921 #define GL_REG_1_ATI 0x8922 #define GL_REG_2_ATI 0x8923 #define GL_REG_3_ATI 0x8924 #define GL_REG_4_ATI 0x8925 #define GL_REG_5_ATI 0x8926 #define GL_REG_6_ATI 0x8927 #define GL_REG_7_ATI 0x8928 #define GL_REG_8_ATI 0x8929 #define GL_REG_9_ATI 0x892A #define GL_REG_10_ATI 0x892B #define GL_REG_11_ATI 0x892C #define GL_REG_12_ATI 0x892D #define GL_REG_13_ATI 0x892E #define GL_REG_14_ATI 0x892F #define GL_REG_15_ATI 0x8930 #define GL_REG_16_ATI 0x8931 #define GL_REG_17_ATI 0x8932 #define GL_REG_18_ATI 0x8933 #define GL_REG_19_ATI 0x8934 #define GL_REG_20_ATI 0x8935 #define GL_REG_21_ATI 0x8936 #define GL_REG_22_ATI 0x8937 #define GL_REG_23_ATI 0x8938 #define GL_REG_24_ATI 0x8939 #define GL_REG_25_ATI 0x893A #define GL_REG_26_ATI 0x893B #define GL_REG_27_ATI 0x893C #define GL_REG_28_ATI 0x893D #define GL_REG_29_ATI 0x893E #define GL_REG_30_ATI 0x893F #define GL_REG_31_ATI 0x8940 #define GL_CON_0_ATI 0x8941 #define GL_CON_1_ATI 0x8942 #define GL_CON_2_ATI 0x8943 #define GL_CON_3_ATI 0x8944 #define GL_CON_4_ATI 0x8945 #define GL_CON_5_ATI 0x8946 #define GL_CON_6_ATI 0x8947 #define GL_CON_7_ATI 0x8948 #define GL_CON_8_ATI 0x8949 #define GL_CON_9_ATI 0x894A #define GL_CON_10_ATI 0x894B #define GL_CON_11_ATI 0x894C #define GL_CON_12_ATI 0x894D #define GL_CON_13_ATI 0x894E #define GL_CON_14_ATI 0x894F #define GL_CON_15_ATI 0x8950 #define GL_CON_16_ATI 0x8951 #define GL_CON_17_ATI 0x8952 #define GL_CON_18_ATI 0x8953 #define GL_CON_19_ATI 0x8954 #define GL_CON_20_ATI 0x8955 #define GL_CON_21_ATI 0x8956 #define GL_CON_22_ATI 0x8957 #define GL_CON_23_ATI 0x8958 #define GL_CON_24_ATI 0x8959 #define GL_CON_25_ATI 0x895A #define GL_CON_26_ATI 0x895B #define GL_CON_27_ATI 0x895C #define GL_CON_28_ATI 0x895D #define GL_CON_29_ATI 0x895E #define GL_CON_30_ATI 0x895F #define GL_CON_31_ATI 0x8960 #define GL_MOV_ATI 0x8961 #define GL_ADD_ATI 0x8963 #define GL_MUL_ATI 0x8964 #define GL_SUB_ATI 0x8965 #define GL_DOT3_ATI 0x8966 #define GL_DOT4_ATI 0x8967 #define GL_MAD_ATI 0x8968 #define GL_LERP_ATI 0x8969 #define GL_CND_ATI 0x896A #define GL_CND0_ATI 0x896B #define GL_DOT2_ADD_ATI 0x896C #define GL_SECONDARY_INTERPOLATOR_ATI 0x896D #define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E #define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F #define GL_NUM_PASSES_ATI 0x8970 #define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 #define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 #define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 #define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 #define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 #define GL_SWIZZLE_STR_ATI 0x8976 #define GL_SWIZZLE_STQ_ATI 0x8977 #define GL_SWIZZLE_STR_DR_ATI 0x8978 #define GL_SWIZZLE_STQ_DQ_ATI 0x8979 #define GL_SWIZZLE_STRQ_ATI 0x897A #define GL_SWIZZLE_STRQ_DQ_ATI 0x897B #define GL_RED_BIT_ATI 0x00000001 #define GL_GREEN_BIT_ATI 0x00000002 #define GL_BLUE_BIT_ATI 0x00000004 #define GL_2X_BIT_ATI 0x00000001 #define GL_4X_BIT_ATI 0x00000002 #define GL_8X_BIT_ATI 0x00000004 #define GL_HALF_BIT_ATI 0x00000008 #define GL_QUARTER_BIT_ATI 0x00000010 #define GL_EIGHTH_BIT_ATI 0x00000020 #define GL_SATURATE_BIT_ATI 0x00000040 #define GL_COMP_BIT_ATI 0x00000002 #define GL_NEGATE_BIT_ATI 0x00000004 #define GL_BIAS_BIT_ATI 0x00000008 typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range); typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id); typedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id); typedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC) (void); typedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC) (void); typedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle); typedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle); typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); typedef void (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint range); GLAPI void APIENTRY glBindFragmentShaderATI (GLuint id); GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint id); GLAPI void APIENTRY glBeginFragmentShaderATI (void); GLAPI void APIENTRY glEndFragmentShaderATI (void); GLAPI void APIENTRY glPassTexCoordATI (GLuint dst, GLuint coord, GLenum swizzle); GLAPI void APIENTRY glSampleMapATI (GLuint dst, GLuint interp, GLenum swizzle); GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); GLAPI void APIENTRY glColorFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); GLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint dst, const GLfloat *value); #endif #endif /* GL_ATI_fragment_shader */ #ifndef GL_ATI_map_object_buffer #define GL_ATI_map_object_buffer 1 typedef void *(APIENTRYP PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer); typedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void *APIENTRY glMapObjectBufferATI (GLuint buffer); GLAPI void APIENTRY glUnmapObjectBufferATI (GLuint buffer); #endif #endif /* GL_ATI_map_object_buffer */ #ifndef GL_ATI_meminfo #define GL_ATI_meminfo 1 #define GL_VBO_FREE_MEMORY_ATI 0x87FB #define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC #define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD #endif /* GL_ATI_meminfo */ #ifndef GL_ATI_pixel_format_float #define GL_ATI_pixel_format_float 1 #define GL_RGBA_FLOAT_MODE_ATI 0x8820 #define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 #endif /* GL_ATI_pixel_format_float */ #ifndef GL_ATI_pn_triangles #define GL_ATI_pn_triangles 1 #define GL_PN_TRIANGLES_ATI 0x87F0 #define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 #define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 #define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 #define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 #define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 #define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 #define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 #define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 typedef void (APIENTRYP PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param); typedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPNTrianglesiATI (GLenum pname, GLint param); GLAPI void APIENTRY glPNTrianglesfATI (GLenum pname, GLfloat param); #endif #endif /* GL_ATI_pn_triangles */ #ifndef GL_ATI_separate_stencil #define GL_ATI_separate_stencil 1 #define GL_STENCIL_BACK_FUNC_ATI 0x8800 #define GL_STENCIL_BACK_FAIL_ATI 0x8801 #define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 #define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glStencilOpSeparateATI (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); GLAPI void APIENTRY glStencilFuncSeparateATI (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); #endif #endif /* GL_ATI_separate_stencil */ #ifndef GL_ATI_text_fragment_shader #define GL_ATI_text_fragment_shader 1 #define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 #endif /* GL_ATI_text_fragment_shader */ #ifndef GL_ATI_texture_env_combine3 #define GL_ATI_texture_env_combine3 1 #define GL_MODULATE_ADD_ATI 0x8744 #define GL_MODULATE_SIGNED_ADD_ATI 0x8745 #define GL_MODULATE_SUBTRACT_ATI 0x8746 #endif /* GL_ATI_texture_env_combine3 */ #ifndef GL_ATI_texture_float #define GL_ATI_texture_float 1 #define GL_RGBA_FLOAT32_ATI 0x8814 #define GL_RGB_FLOAT32_ATI 0x8815 #define GL_ALPHA_FLOAT32_ATI 0x8816 #define GL_INTENSITY_FLOAT32_ATI 0x8817 #define GL_LUMINANCE_FLOAT32_ATI 0x8818 #define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 #define GL_RGBA_FLOAT16_ATI 0x881A #define GL_RGB_FLOAT16_ATI 0x881B #define GL_ALPHA_FLOAT16_ATI 0x881C #define GL_INTENSITY_FLOAT16_ATI 0x881D #define GL_LUMINANCE_FLOAT16_ATI 0x881E #define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F #endif /* GL_ATI_texture_float */ #ifndef GL_ATI_texture_mirror_once #define GL_ATI_texture_mirror_once 1 #define GL_MIRROR_CLAMP_ATI 0x8742 #define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 #endif /* GL_ATI_texture_mirror_once */ #ifndef GL_ATI_vertex_array_object #define GL_ATI_vertex_array_object 1 #define GL_STATIC_ATI 0x8760 #define GL_DYNAMIC_ATI 0x8761 #define GL_PRESERVE_ATI 0x8762 #define GL_DISCARD_ATI 0x8763 #define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 #define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 #define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 #define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const void *pointer, GLenum usage); typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer); typedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const void *pointer, GLenum preserve); typedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer); typedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); typedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei size, const void *pointer, GLenum usage); GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint buffer); GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint buffer, GLuint offset, GLsizei size, const void *pointer, GLenum preserve); GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint buffer, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetObjectBufferivATI (GLuint buffer, GLenum pname, GLint *params); GLAPI void APIENTRY glFreeObjectBufferATI (GLuint buffer); GLAPI void APIENTRY glArrayObjectATI (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum array, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetArrayObjectivATI (GLenum array, GLenum pname, GLint *params); GLAPI void APIENTRY glVariantArrayObjectATI (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint id, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint id, GLenum pname, GLint *params); #endif #endif /* GL_ATI_vertex_array_object */ #ifndef GL_ATI_vertex_attrib_array_object #define GL_ATI_vertex_attrib_array_object 1 typedef void (APIENTRYP PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexAttribArrayObjectATI (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); GLAPI void APIENTRY glGetVertexAttribArrayObjectfvATI (GLuint index, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetVertexAttribArrayObjectivATI (GLuint index, GLenum pname, GLint *params); #endif #endif /* GL_ATI_vertex_attrib_array_object */ #ifndef GL_ATI_vertex_streams #define GL_ATI_vertex_streams 1 #define GL_MAX_VERTEX_STREAMS_ATI 0x876B #define GL_VERTEX_STREAM0_ATI 0x876C #define GL_VERTEX_STREAM1_ATI 0x876D #define GL_VERTEX_STREAM2_ATI 0x876E #define GL_VERTEX_STREAM3_ATI 0x876F #define GL_VERTEX_STREAM4_ATI 0x8770 #define GL_VERTEX_STREAM5_ATI 0x8771 #define GL_VERTEX_STREAM6_ATI 0x8772 #define GL_VERTEX_STREAM7_ATI 0x8773 #define GL_VERTEX_SOURCE_ATI 0x8774 typedef void (APIENTRYP PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x); typedef void (APIENTRYP PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x); typedef void (APIENTRYP PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x); typedef void (APIENTRYP PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x); typedef void (APIENTRYP PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y); typedef void (APIENTRYP PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y); typedef void (APIENTRYP PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y); typedef void (APIENTRYP PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); typedef void (APIENTRYP PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); typedef void (APIENTRYP PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); typedef void (APIENTRYP PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w); typedef void (APIENTRYP PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords); typedef void (APIENTRYP PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); typedef void (APIENTRYP PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords); typedef void (APIENTRYP PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz); typedef void (APIENTRYP PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); typedef void (APIENTRYP PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz); typedef void (APIENTRYP PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); typedef void (APIENTRYP PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); typedef void (APIENTRYP PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); typedef void (APIENTRYP PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); typedef void (APIENTRYP PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); typedef void (APIENTRYP PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream); typedef void (APIENTRYP PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param); typedef void (APIENTRYP PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexStream1sATI (GLenum stream, GLshort x); GLAPI void APIENTRY glVertexStream1svATI (GLenum stream, const GLshort *coords); GLAPI void APIENTRY glVertexStream1iATI (GLenum stream, GLint x); GLAPI void APIENTRY glVertexStream1ivATI (GLenum stream, const GLint *coords); GLAPI void APIENTRY glVertexStream1fATI (GLenum stream, GLfloat x); GLAPI void APIENTRY glVertexStream1fvATI (GLenum stream, const GLfloat *coords); GLAPI void APIENTRY glVertexStream1dATI (GLenum stream, GLdouble x); GLAPI void APIENTRY glVertexStream1dvATI (GLenum stream, const GLdouble *coords); GLAPI void APIENTRY glVertexStream2sATI (GLenum stream, GLshort x, GLshort y); GLAPI void APIENTRY glVertexStream2svATI (GLenum stream, const GLshort *coords); GLAPI void APIENTRY glVertexStream2iATI (GLenum stream, GLint x, GLint y); GLAPI void APIENTRY glVertexStream2ivATI (GLenum stream, const GLint *coords); GLAPI void APIENTRY glVertexStream2fATI (GLenum stream, GLfloat x, GLfloat y); GLAPI void APIENTRY glVertexStream2fvATI (GLenum stream, const GLfloat *coords); GLAPI void APIENTRY glVertexStream2dATI (GLenum stream, GLdouble x, GLdouble y); GLAPI void APIENTRY glVertexStream2dvATI (GLenum stream, const GLdouble *coords); GLAPI void APIENTRY glVertexStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z); GLAPI void APIENTRY glVertexStream3svATI (GLenum stream, const GLshort *coords); GLAPI void APIENTRY glVertexStream3iATI (GLenum stream, GLint x, GLint y, GLint z); GLAPI void APIENTRY glVertexStream3ivATI (GLenum stream, const GLint *coords); GLAPI void APIENTRY glVertexStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glVertexStream3fvATI (GLenum stream, const GLfloat *coords); GLAPI void APIENTRY glVertexStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glVertexStream3dvATI (GLenum stream, const GLdouble *coords); GLAPI void APIENTRY glVertexStream4sATI (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); GLAPI void APIENTRY glVertexStream4svATI (GLenum stream, const GLshort *coords); GLAPI void APIENTRY glVertexStream4iATI (GLenum stream, GLint x, GLint y, GLint z, GLint w); GLAPI void APIENTRY glVertexStream4ivATI (GLenum stream, const GLint *coords); GLAPI void APIENTRY glVertexStream4fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glVertexStream4fvATI (GLenum stream, const GLfloat *coords); GLAPI void APIENTRY glVertexStream4dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glVertexStream4dvATI (GLenum stream, const GLdouble *coords); GLAPI void APIENTRY glNormalStream3bATI (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); GLAPI void APIENTRY glNormalStream3bvATI (GLenum stream, const GLbyte *coords); GLAPI void APIENTRY glNormalStream3sATI (GLenum stream, GLshort nx, GLshort ny, GLshort nz); GLAPI void APIENTRY glNormalStream3svATI (GLenum stream, const GLshort *coords); GLAPI void APIENTRY glNormalStream3iATI (GLenum stream, GLint nx, GLint ny, GLint nz); GLAPI void APIENTRY glNormalStream3ivATI (GLenum stream, const GLint *coords); GLAPI void APIENTRY glNormalStream3fATI (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); GLAPI void APIENTRY glNormalStream3fvATI (GLenum stream, const GLfloat *coords); GLAPI void APIENTRY glNormalStream3dATI (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); GLAPI void APIENTRY glNormalStream3dvATI (GLenum stream, const GLdouble *coords); GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum stream); GLAPI void APIENTRY glVertexBlendEnviATI (GLenum pname, GLint param); GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum pname, GLfloat param); #endif #endif /* GL_ATI_vertex_streams */ #ifndef GL_EXT_422_pixels #define GL_EXT_422_pixels 1 #define GL_422_EXT 0x80CC #define GL_422_REV_EXT 0x80CD #define GL_422_AVERAGE_EXT 0x80CE #define GL_422_REV_AVERAGE_EXT 0x80CF #endif /* GL_EXT_422_pixels */ #ifndef GL_EXT_EGL_image_storage #define GL_EXT_EGL_image_storage 1 typedef void *GLeglImageOES; typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXSTORAGEEXTPROC) (GLenum target, GLeglImageOES image, const GLint* attrib_list); typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXTURESTORAGEEXTPROC) (GLuint texture, GLeglImageOES image, const GLint* attrib_list); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glEGLImageTargetTexStorageEXT (GLenum target, GLeglImageOES image, const GLint* attrib_list); GLAPI void APIENTRY glEGLImageTargetTextureStorageEXT (GLuint texture, GLeglImageOES image, const GLint* attrib_list); #endif #endif /* GL_EXT_EGL_image_storage */ #ifndef GL_EXT_EGL_sync #define GL_EXT_EGL_sync 1 #endif /* GL_EXT_EGL_sync */ #ifndef GL_EXT_abgr #define GL_EXT_abgr 1 #define GL_ABGR_EXT 0x8000 #endif /* GL_EXT_abgr */ #ifndef GL_EXT_bgra #define GL_EXT_bgra 1 #define GL_BGR_EXT 0x80E0 #define GL_BGRA_EXT 0x80E1 #endif /* GL_EXT_bgra */ #ifndef GL_EXT_bindable_uniform #define GL_EXT_bindable_uniform 1 #define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 #define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 #define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 #define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED #define GL_UNIFORM_BUFFER_EXT 0x8DEE #define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF typedef void (APIENTRYP PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer); typedef GLint (APIENTRYP PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location); typedef GLintptr (APIENTRYP PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glUniformBufferEXT (GLuint program, GLint location, GLuint buffer); GLAPI GLint APIENTRY glGetUniformBufferSizeEXT (GLuint program, GLint location); GLAPI GLintptr APIENTRY glGetUniformOffsetEXT (GLuint program, GLint location); #endif #endif /* GL_EXT_bindable_uniform */ #ifndef GL_EXT_blend_color #define GL_EXT_blend_color 1 #define GL_CONSTANT_COLOR_EXT 0x8001 #define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 #define GL_CONSTANT_ALPHA_EXT 0x8003 #define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 #define GL_BLEND_COLOR_EXT 0x8005 typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendColorEXT (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); #endif #endif /* GL_EXT_blend_color */ #ifndef GL_EXT_blend_equation_separate #define GL_EXT_blend_equation_separate 1 #define GL_BLEND_EQUATION_RGB_EXT 0x8009 #define GL_BLEND_EQUATION_ALPHA_EXT 0x883D typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendEquationSeparateEXT (GLenum modeRGB, GLenum modeAlpha); #endif #endif /* GL_EXT_blend_equation_separate */ #ifndef GL_EXT_blend_func_separate #define GL_EXT_blend_func_separate 1 #define GL_BLEND_DST_RGB_EXT 0x80C8 #define GL_BLEND_SRC_RGB_EXT 0x80C9 #define GL_BLEND_DST_ALPHA_EXT 0x80CA #define GL_BLEND_SRC_ALPHA_EXT 0x80CB typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); #endif #endif /* GL_EXT_blend_func_separate */ #ifndef GL_EXT_blend_logic_op #define GL_EXT_blend_logic_op 1 #endif /* GL_EXT_blend_logic_op */ #ifndef GL_EXT_blend_minmax #define GL_EXT_blend_minmax 1 #define GL_MIN_EXT 0x8007 #define GL_MAX_EXT 0x8008 #define GL_FUNC_ADD_EXT 0x8006 #define GL_BLEND_EQUATION_EXT 0x8009 typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendEquationEXT (GLenum mode); #endif #endif /* GL_EXT_blend_minmax */ #ifndef GL_EXT_blend_subtract #define GL_EXT_blend_subtract 1 #define GL_FUNC_SUBTRACT_EXT 0x800A #define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B #endif /* GL_EXT_blend_subtract */ #ifndef GL_EXT_clip_volume_hint #define GL_EXT_clip_volume_hint 1 #define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 #endif /* GL_EXT_clip_volume_hint */ #ifndef GL_EXT_cmyka #define GL_EXT_cmyka 1 #define GL_CMYK_EXT 0x800C #define GL_CMYKA_EXT 0x800D #define GL_PACK_CMYK_HINT_EXT 0x800E #define GL_UNPACK_CMYK_HINT_EXT 0x800F #endif /* GL_EXT_cmyka */ #ifndef GL_EXT_color_subtable #define GL_EXT_color_subtable 1 typedef void (APIENTRYP PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glColorSubTableEXT (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); #endif #endif /* GL_EXT_color_subtable */ #ifndef GL_EXT_compiled_vertex_array #define GL_EXT_compiled_vertex_array 1 #define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 #define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 typedef void (APIENTRYP PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count); typedef void (APIENTRYP PFNGLUNLOCKARRAYSEXTPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glLockArraysEXT (GLint first, GLsizei count); GLAPI void APIENTRY glUnlockArraysEXT (void); #endif #endif /* GL_EXT_compiled_vertex_array */ #ifndef GL_EXT_convolution #define GL_EXT_convolution 1 #define GL_CONVOLUTION_1D_EXT 0x8010 #define GL_CONVOLUTION_2D_EXT 0x8011 #define GL_SEPARABLE_2D_EXT 0x8012 #define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 #define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 #define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 #define GL_REDUCE_EXT 0x8016 #define GL_CONVOLUTION_FORMAT_EXT 0x8017 #define GL_CONVOLUTION_WIDTH_EXT 0x8018 #define GL_CONVOLUTION_HEIGHT_EXT 0x8019 #define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A #define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B #define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C #define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D #define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E #define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F #define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 #define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 #define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 #define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params); typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params); typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void *image); typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum target, GLenum pname, GLfloat params); GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum target, GLenum pname, GLint params); GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum target, GLenum format, GLenum type, void *image); GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); #endif #endif /* GL_EXT_convolution */ #ifndef GL_EXT_coordinate_frame #define GL_EXT_coordinate_frame 1 #define GL_TANGENT_ARRAY_EXT 0x8439 #define GL_BINORMAL_ARRAY_EXT 0x843A #define GL_CURRENT_TANGENT_EXT 0x843B #define GL_CURRENT_BINORMAL_EXT 0x843C #define GL_TANGENT_ARRAY_TYPE_EXT 0x843E #define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F #define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 #define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 #define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 #define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 #define GL_MAP1_TANGENT_EXT 0x8444 #define GL_MAP2_TANGENT_EXT 0x8445 #define GL_MAP1_BINORMAL_EXT 0x8446 #define GL_MAP2_BINORMAL_EXT 0x8447 typedef void (APIENTRYP PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz); typedef void (APIENTRYP PFNGLTANGENT3BVEXTPROC) (const GLbyte *v); typedef void (APIENTRYP PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz); typedef void (APIENTRYP PFNGLTANGENT3DVEXTPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz); typedef void (APIENTRYP PFNGLTANGENT3FVEXTPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz); typedef void (APIENTRYP PFNGLTANGENT3IVEXTPROC) (const GLint *v); typedef void (APIENTRYP PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz); typedef void (APIENTRYP PFNGLTANGENT3SVEXTPROC) (const GLshort *v); typedef void (APIENTRYP PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz); typedef void (APIENTRYP PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v); typedef void (APIENTRYP PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz); typedef void (APIENTRYP PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz); typedef void (APIENTRYP PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz); typedef void (APIENTRYP PFNGLBINORMAL3IVEXTPROC) (const GLint *v); typedef void (APIENTRYP PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz); typedef void (APIENTRYP PFNGLBINORMAL3SVEXTPROC) (const GLshort *v); typedef void (APIENTRYP PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); typedef void (APIENTRYP PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTangent3bEXT (GLbyte tx, GLbyte ty, GLbyte tz); GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *v); GLAPI void APIENTRY glTangent3dEXT (GLdouble tx, GLdouble ty, GLdouble tz); GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *v); GLAPI void APIENTRY glTangent3fEXT (GLfloat tx, GLfloat ty, GLfloat tz); GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *v); GLAPI void APIENTRY glTangent3iEXT (GLint tx, GLint ty, GLint tz); GLAPI void APIENTRY glTangent3ivEXT (const GLint *v); GLAPI void APIENTRY glTangent3sEXT (GLshort tx, GLshort ty, GLshort tz); GLAPI void APIENTRY glTangent3svEXT (const GLshort *v); GLAPI void APIENTRY glBinormal3bEXT (GLbyte bx, GLbyte by, GLbyte bz); GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *v); GLAPI void APIENTRY glBinormal3dEXT (GLdouble bx, GLdouble by, GLdouble bz); GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *v); GLAPI void APIENTRY glBinormal3fEXT (GLfloat bx, GLfloat by, GLfloat bz); GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *v); GLAPI void APIENTRY glBinormal3iEXT (GLint bx, GLint by, GLint bz); GLAPI void APIENTRY glBinormal3ivEXT (const GLint *v); GLAPI void APIENTRY glBinormal3sEXT (GLshort bx, GLshort by, GLshort bz); GLAPI void APIENTRY glBinormal3svEXT (const GLshort *v); GLAPI void APIENTRY glTangentPointerEXT (GLenum type, GLsizei stride, const void *pointer); GLAPI void APIENTRY glBinormalPointerEXT (GLenum type, GLsizei stride, const void *pointer); #endif #endif /* GL_EXT_coordinate_frame */ #ifndef GL_EXT_copy_texture #define GL_EXT_copy_texture 1 typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); #endif #endif /* GL_EXT_copy_texture */ #ifndef GL_EXT_cull_vertex #define GL_EXT_cull_vertex 1 #define GL_CULL_VERTEX_EXT 0x81AA #define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB #define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC typedef void (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params); typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCullParameterdvEXT (GLenum pname, GLdouble *params); GLAPI void APIENTRY glCullParameterfvEXT (GLenum pname, GLfloat *params); #endif #endif /* GL_EXT_cull_vertex */ #ifndef GL_EXT_debug_label #define GL_EXT_debug_label 1 #define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F #define GL_PROGRAM_OBJECT_EXT 0x8B40 #define GL_SHADER_OBJECT_EXT 0x8B48 #define GL_BUFFER_OBJECT_EXT 0x9151 #define GL_QUERY_OBJECT_EXT 0x9153 #define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 typedef void (APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label); typedef void (APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label); GLAPI void APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); #endif #endif /* GL_EXT_debug_label */ #ifndef GL_EXT_debug_marker #define GL_EXT_debug_marker 1 typedef void (APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker); typedef void (APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker); typedef void (APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker); GLAPI void APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker); GLAPI void APIENTRY glPopGroupMarkerEXT (void); #endif #endif /* GL_EXT_debug_marker */ #ifndef GL_EXT_depth_bounds_test #define GL_EXT_depth_bounds_test 1 #define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 #define GL_DEPTH_BOUNDS_EXT 0x8891 typedef void (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDepthBoundsEXT (GLclampd zmin, GLclampd zmax); #endif #endif /* GL_EXT_depth_bounds_test */ #ifndef GL_EXT_direct_state_access #define GL_EXT_direct_state_access 1 #define GL_PROGRAM_MATRIX_EXT 0x8E2D #define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E #define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F typedef void (APIENTRYP PFNGLMATRIXLOADFEXTPROC) (GLenum mode, const GLfloat *m); typedef void (APIENTRYP PFNGLMATRIXLOADDEXTPROC) (GLenum mode, const GLdouble *m); typedef void (APIENTRYP PFNGLMATRIXMULTFEXTPROC) (GLenum mode, const GLfloat *m); typedef void (APIENTRYP PFNGLMATRIXMULTDEXTPROC) (GLenum mode, const GLdouble *m); typedef void (APIENTRYP PFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum mode); typedef void (APIENTRYP PFNGLMATRIXROTATEFEXTPROC) (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLMATRIXROTATEDEXTPROC) (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLMATRIXSCALEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLMATRIXSCALEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLMATRIXTRANSLATEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLMATRIXTRANSLATEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLMATRIXFRUSTUMEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); typedef void (APIENTRYP PFNGLMATRIXORTHOEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); typedef void (APIENTRYP PFNGLMATRIXPOPEXTPROC) (GLenum mode); typedef void (APIENTRYP PFNGLMATRIXPUSHEXTPROC) (GLenum mode); typedef void (APIENTRYP PFNGLCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); typedef void (APIENTRYP PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLBINDMULTITEXTUREEXTPROC) (GLenum texunit, GLenum target, GLuint texture); typedef void (APIENTRYP PFNGLMULTITEXCOORDPOINTEREXTPROC) (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer); typedef void (APIENTRYP PFNGLMULTITEXENVFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLMULTITEXENVIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLMULTITEXGENDEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); typedef void (APIENTRYP PFNGLMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); typedef void (APIENTRYP PFNGLMULTITEXGENFEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLMULTITEXGENIEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLGETMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); typedef void (APIENTRYP PFNGLGETMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLGETMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLENABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); typedef void (APIENTRYP PFNGLGETFLOATINDEXEDVEXTPROC) (GLenum target, GLuint index, GLfloat *data); typedef void (APIENTRYP PFNGLGETDOUBLEINDEXEDVEXTPROC) (GLenum target, GLuint index, GLdouble *data); typedef void (APIENTRYP PFNGLGETPOINTERINDEXEDVEXTPROC) (GLenum target, GLuint index, void **data); typedef void (APIENTRYP PFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index); typedef void (APIENTRYP PFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index); typedef GLboolean (APIENTRYP PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index); typedef void (APIENTRYP PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLint *data); typedef void (APIENTRYP PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum target, GLuint index, GLboolean *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint lod, void *img); typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint lod, void *img); typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFEREXTPROC) (GLuint buffer, GLenum access); typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFEREXTPROC) (GLuint buffer); typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) (GLuint buffer, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVEXTPROC) (GLuint buffer, GLenum pname, void **params); typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLTEXTUREBUFFEREXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); typedef void (APIENTRYP PFNGLMULTITEXBUFFEREXTPROC) (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLuint *params); typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC) (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLint *params); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLuint *params); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLint *params); typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint *params); typedef void (APIENTRYP PFNGLENABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index); typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index); typedef void (APIENTRYP PFNGLGETFLOATI_VEXTPROC) (GLenum pname, GLuint index, GLfloat *params); typedef void (APIENTRYP PFNGLGETDOUBLEI_VEXTPROC) (GLenum pname, GLuint index, GLdouble *params); typedef void (APIENTRYP PFNGLGETPOINTERI_VEXTPROC) (GLenum pname, GLuint index, void **params); typedef void (APIENTRYP PFNGLNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLdouble *params); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLfloat *params); typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble *params); typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat *params); typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMIVEXTPROC) (GLuint program, GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum pname, void *string); typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) (GLuint renderbuffer, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) (GLuint framebuffer, GLenum target); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPEXTPROC) (GLuint texture, GLenum target); typedef void (APIENTRYP PFNGLGENERATEMULTITEXMIPMAPEXTPROC) (GLenum texunit, GLenum target); typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs); typedef void (APIENTRYP PFNGLFRAMEBUFFERREADBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); typedef void (APIENTRYP PFNGLTEXTURERENDERBUFFEREXTPROC) (GLuint texture, GLenum target, GLuint renderbuffer); typedef void (APIENTRYP PFNGLMULTITEXRENDERBUFFEREXTPROC) (GLenum texunit, GLenum target, GLuint renderbuffer); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLVERTEXARRAYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLVERTEXARRAYINDEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLVERTEXARRAYNORMALOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array); typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array); typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index); typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index); typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERVEXTPROC) (GLuint vaobj, GLenum pname, GLint *param); typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERVEXTPROC) (GLuint vaobj, GLenum pname, void **param); typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint *param); typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, void **param); typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC) (GLuint framebuffer, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DEXTPROC) (GLuint program, GLint location, GLdouble x); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEEXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); typedef void (APIENTRYP PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLTEXTUREPAGECOMMITMENTEXTPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC) (GLuint vaobj, GLuint index, GLuint divisor); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMatrixLoadfEXT (GLenum mode, const GLfloat *m); GLAPI void APIENTRY glMatrixLoaddEXT (GLenum mode, const GLdouble *m); GLAPI void APIENTRY glMatrixMultfEXT (GLenum mode, const GLfloat *m); GLAPI void APIENTRY glMatrixMultdEXT (GLenum mode, const GLdouble *m); GLAPI void APIENTRY glMatrixLoadIdentityEXT (GLenum mode); GLAPI void APIENTRY glMatrixRotatefEXT (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glMatrixRotatedEXT (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glMatrixScalefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glMatrixScaledEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glMatrixTranslatefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glMatrixTranslatedEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glMatrixFrustumEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); GLAPI void APIENTRY glMatrixOrthoEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); GLAPI void APIENTRY glMatrixPopEXT (GLenum mode); GLAPI void APIENTRY glMatrixPushEXT (GLenum mode); GLAPI void APIENTRY glClientAttribDefaultEXT (GLbitfield mask); GLAPI void APIENTRY glPushClientAttribDefaultEXT (GLbitfield mask); GLAPI void APIENTRY glTextureParameterfEXT (GLuint texture, GLenum target, GLenum pname, GLfloat param); GLAPI void APIENTRY glTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glTextureParameteriEXT (GLuint texture, GLenum target, GLenum pname, GLint param); GLAPI void APIENTRY glTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glCopyTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); GLAPI void APIENTRY glCopyTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); GLAPI void APIENTRY glCopyTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glCopyTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glGetTextureImageEXT (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); GLAPI void APIENTRY glGetTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetTextureLevelParameterfvEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetTextureLevelParameterivEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); GLAPI void APIENTRY glTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glCopyTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glBindMultiTextureEXT (GLenum texunit, GLenum target, GLuint texture); GLAPI void APIENTRY glMultiTexCoordPointerEXT (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer); GLAPI void APIENTRY glMultiTexEnvfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); GLAPI void APIENTRY glMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glMultiTexEnviEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); GLAPI void APIENTRY glMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glMultiTexGendEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); GLAPI void APIENTRY glMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); GLAPI void APIENTRY glMultiTexGenfEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); GLAPI void APIENTRY glMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glMultiTexGeniEXT (GLenum texunit, GLenum coord, GLenum pname, GLint param); GLAPI void APIENTRY glMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); GLAPI void APIENTRY glGetMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); GLAPI void APIENTRY glGetMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, GLint *params); GLAPI void APIENTRY glMultiTexParameteriEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); GLAPI void APIENTRY glMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glMultiTexParameterfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); GLAPI void APIENTRY glMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glCopyMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); GLAPI void APIENTRY glCopyMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); GLAPI void APIENTRY glCopyMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glCopyMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glGetMultiTexImageEXT (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); GLAPI void APIENTRY glGetMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetMultiTexLevelParameterfvEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetMultiTexLevelParameterivEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); GLAPI void APIENTRY glMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glCopyMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glEnableClientStateIndexedEXT (GLenum array, GLuint index); GLAPI void APIENTRY glDisableClientStateIndexedEXT (GLenum array, GLuint index); GLAPI void APIENTRY glGetFloatIndexedvEXT (GLenum target, GLuint index, GLfloat *data); GLAPI void APIENTRY glGetDoubleIndexedvEXT (GLenum target, GLuint index, GLdouble *data); GLAPI void APIENTRY glGetPointerIndexedvEXT (GLenum target, GLuint index, void **data); GLAPI void APIENTRY glEnableIndexedEXT (GLenum target, GLuint index); GLAPI void APIENTRY glDisableIndexedEXT (GLenum target, GLuint index); GLAPI GLboolean APIENTRY glIsEnabledIndexedEXT (GLenum target, GLuint index); GLAPI void APIENTRY glGetIntegerIndexedvEXT (GLenum target, GLuint index, GLint *data); GLAPI void APIENTRY glGetBooleanIndexedvEXT (GLenum target, GLuint index, GLboolean *data); GLAPI void APIENTRY glCompressedTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glCompressedTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glCompressedTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glCompressedTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glCompressedTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glCompressedTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glGetCompressedTextureImageEXT (GLuint texture, GLenum target, GLint lod, void *img); GLAPI void APIENTRY glCompressedMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glCompressedMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glCompressedMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glCompressedMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glCompressedMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glCompressedMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glGetCompressedMultiTexImageEXT (GLenum texunit, GLenum target, GLint lod, void *img); GLAPI void APIENTRY glMatrixLoadTransposefEXT (GLenum mode, const GLfloat *m); GLAPI void APIENTRY glMatrixLoadTransposedEXT (GLenum mode, const GLdouble *m); GLAPI void APIENTRY glMatrixMultTransposefEXT (GLenum mode, const GLfloat *m); GLAPI void APIENTRY glMatrixMultTransposedEXT (GLenum mode, const GLdouble *m); GLAPI void APIENTRY glNamedBufferDataEXT (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); GLAPI void APIENTRY glNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); GLAPI void *APIENTRY glMapNamedBufferEXT (GLuint buffer, GLenum access); GLAPI GLboolean APIENTRY glUnmapNamedBufferEXT (GLuint buffer); GLAPI void APIENTRY glGetNamedBufferParameterivEXT (GLuint buffer, GLenum pname, GLint *params); GLAPI void APIENTRY glGetNamedBufferPointervEXT (GLuint buffer, GLenum pname, void **params); GLAPI void APIENTRY glGetNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); GLAPI void APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0); GLAPI void APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1); GLAPI void APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); GLAPI void APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); GLAPI void APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint v0); GLAPI void APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1); GLAPI void APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); GLAPI void APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); GLAPI void APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glTextureBufferEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); GLAPI void APIENTRY glMultiTexBufferEXT (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); GLAPI void APIENTRY glTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, const GLuint *params); GLAPI void APIENTRY glGetTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, GLuint *params); GLAPI void APIENTRY glMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); GLAPI void APIENTRY glGetMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, GLuint *params); GLAPI void APIENTRY glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0); GLAPI void APIENTRY glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1); GLAPI void APIENTRY glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); GLAPI void APIENTRY glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); GLAPI void APIENTRY glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glNamedProgramLocalParameters4fvEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); GLAPI void APIENTRY glNamedProgramLocalParameterI4iEXT (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); GLAPI void APIENTRY glNamedProgramLocalParameterI4ivEXT (GLuint program, GLenum target, GLuint index, const GLint *params); GLAPI void APIENTRY glNamedProgramLocalParametersI4ivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); GLAPI void APIENTRY glNamedProgramLocalParameterI4uiEXT (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); GLAPI void APIENTRY glNamedProgramLocalParameterI4uivEXT (GLuint program, GLenum target, GLuint index, const GLuint *params); GLAPI void APIENTRY glNamedProgramLocalParametersI4uivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); GLAPI void APIENTRY glGetNamedProgramLocalParameterIivEXT (GLuint program, GLenum target, GLuint index, GLint *params); GLAPI void APIENTRY glGetNamedProgramLocalParameterIuivEXT (GLuint program, GLenum target, GLuint index, GLuint *params); GLAPI void APIENTRY glEnableClientStateiEXT (GLenum array, GLuint index); GLAPI void APIENTRY glDisableClientStateiEXT (GLenum array, GLuint index); GLAPI void APIENTRY glGetFloati_vEXT (GLenum pname, GLuint index, GLfloat *params); GLAPI void APIENTRY glGetDoublei_vEXT (GLenum pname, GLuint index, GLdouble *params); GLAPI void APIENTRY glGetPointeri_vEXT (GLenum pname, GLuint index, void **params); GLAPI void APIENTRY glNamedProgramStringEXT (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string); GLAPI void APIENTRY glNamedProgramLocalParameter4dEXT (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glNamedProgramLocalParameter4dvEXT (GLuint program, GLenum target, GLuint index, const GLdouble *params); GLAPI void APIENTRY glNamedProgramLocalParameter4fEXT (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glNamedProgramLocalParameter4fvEXT (GLuint program, GLenum target, GLuint index, const GLfloat *params); GLAPI void APIENTRY glGetNamedProgramLocalParameterdvEXT (GLuint program, GLenum target, GLuint index, GLdouble *params); GLAPI void APIENTRY glGetNamedProgramLocalParameterfvEXT (GLuint program, GLenum target, GLuint index, GLfloat *params); GLAPI void APIENTRY glGetNamedProgramivEXT (GLuint program, GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetNamedProgramStringEXT (GLuint program, GLenum target, GLenum pname, void *string); GLAPI void APIENTRY glNamedRenderbufferStorageEXT (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glGetNamedRenderbufferParameterivEXT (GLuint renderbuffer, GLenum pname, GLint *params); GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleEXT (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleCoverageEXT (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); GLAPI GLenum APIENTRY glCheckNamedFramebufferStatusEXT (GLuint framebuffer, GLenum target); GLAPI void APIENTRY glNamedFramebufferTexture1DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLAPI void APIENTRY glNamedFramebufferTexture2DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLAPI void APIENTRY glNamedFramebufferTexture3DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); GLAPI void APIENTRY glNamedFramebufferRenderbufferEXT (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameterivEXT (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); GLAPI void APIENTRY glGenerateTextureMipmapEXT (GLuint texture, GLenum target); GLAPI void APIENTRY glGenerateMultiTexMipmapEXT (GLenum texunit, GLenum target); GLAPI void APIENTRY glFramebufferDrawBufferEXT (GLuint framebuffer, GLenum mode); GLAPI void APIENTRY glFramebufferDrawBuffersEXT (GLuint framebuffer, GLsizei n, const GLenum *bufs); GLAPI void APIENTRY glFramebufferReadBufferEXT (GLuint framebuffer, GLenum mode); GLAPI void APIENTRY glGetFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); GLAPI void APIENTRY glNamedCopyBufferSubDataEXT (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); GLAPI void APIENTRY glNamedFramebufferTextureEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); GLAPI void APIENTRY glNamedFramebufferTextureLayerEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); GLAPI void APIENTRY glNamedFramebufferTextureFaceEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); GLAPI void APIENTRY glTextureRenderbufferEXT (GLuint texture, GLenum target, GLuint renderbuffer); GLAPI void APIENTRY glMultiTexRenderbufferEXT (GLenum texunit, GLenum target, GLuint renderbuffer); GLAPI void APIENTRY glVertexArrayVertexOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glVertexArrayColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glVertexArrayEdgeFlagOffsetEXT (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glVertexArrayIndexOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glVertexArrayNormalOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glVertexArrayTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glVertexArrayMultiTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glVertexArrayFogCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glVertexArraySecondaryColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glVertexArrayVertexAttribOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glVertexArrayVertexAttribIOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glEnableVertexArrayEXT (GLuint vaobj, GLenum array); GLAPI void APIENTRY glDisableVertexArrayEXT (GLuint vaobj, GLenum array); GLAPI void APIENTRY glEnableVertexArrayAttribEXT (GLuint vaobj, GLuint index); GLAPI void APIENTRY glDisableVertexArrayAttribEXT (GLuint vaobj, GLuint index); GLAPI void APIENTRY glGetVertexArrayIntegervEXT (GLuint vaobj, GLenum pname, GLint *param); GLAPI void APIENTRY glGetVertexArrayPointervEXT (GLuint vaobj, GLenum pname, void **param); GLAPI void APIENTRY glGetVertexArrayIntegeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, GLint *param); GLAPI void APIENTRY glGetVertexArrayPointeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, void **param); GLAPI void *APIENTRY glMapNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); GLAPI void APIENTRY glFlushMappedNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length); GLAPI void APIENTRY glNamedBufferStorageEXT (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); GLAPI void APIENTRY glClearNamedBufferDataEXT (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); GLAPI void APIENTRY glClearNamedBufferSubDataEXT (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); GLAPI void APIENTRY glNamedFramebufferParameteriEXT (GLuint framebuffer, GLenum pname, GLint param); GLAPI void APIENTRY glGetNamedFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); GLAPI void APIENTRY glProgramUniform1dEXT (GLuint program, GLint location, GLdouble x); GLAPI void APIENTRY glProgramUniform2dEXT (GLuint program, GLint location, GLdouble x, GLdouble y); GLAPI void APIENTRY glProgramUniform3dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glProgramUniform4dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glProgramUniform1dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniform2dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniform3dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniform4dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix2x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix2x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix3x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix3x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix4x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix4x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glTextureBufferRangeEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); GLAPI void APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); GLAPI void APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); GLAPI void APIENTRY glTextureStorage2DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); GLAPI void APIENTRY glTextureStorage3DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); GLAPI void APIENTRY glVertexArrayBindVertexBufferEXT (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); GLAPI void APIENTRY glVertexArrayVertexAttribFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); GLAPI void APIENTRY glVertexArrayVertexAttribIFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); GLAPI void APIENTRY glVertexArrayVertexAttribLFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); GLAPI void APIENTRY glVertexArrayVertexAttribBindingEXT (GLuint vaobj, GLuint attribindex, GLuint bindingindex); GLAPI void APIENTRY glVertexArrayVertexBindingDivisorEXT (GLuint vaobj, GLuint bindingindex, GLuint divisor); GLAPI void APIENTRY glVertexArrayVertexAttribLOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glTexturePageCommitmentEXT (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); GLAPI void APIENTRY glVertexArrayVertexAttribDivisorEXT (GLuint vaobj, GLuint index, GLuint divisor); #endif #endif /* GL_EXT_direct_state_access */ #ifndef GL_EXT_draw_buffers2 #define GL_EXT_draw_buffers2 1 typedef void (APIENTRYP PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glColorMaskIndexedEXT (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); #endif #endif /* GL_EXT_draw_buffers2 */ #ifndef GL_EXT_draw_instanced #define GL_EXT_draw_instanced 1 typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount); typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount); GLAPI void APIENTRY glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); #endif #endif /* GL_EXT_draw_instanced */ #ifndef GL_EXT_draw_range_elements #define GL_EXT_draw_range_elements 1 #define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 #define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); #endif #endif /* GL_EXT_draw_range_elements */ #ifndef GL_EXT_external_buffer #define GL_EXT_external_buffer 1 typedef void *GLeglClientBufferEXT; typedef void (APIENTRYP PFNGLBUFFERSTORAGEEXTERNALEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEEXTERNALEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBufferStorageExternalEXT (GLenum target, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); GLAPI void APIENTRY glNamedBufferStorageExternalEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); #endif #endif /* GL_EXT_external_buffer */ #ifndef GL_EXT_fog_coord #define GL_EXT_fog_coord 1 #define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 #define GL_FOG_COORDINATE_EXT 0x8451 #define GL_FRAGMENT_DEPTH_EXT 0x8452 #define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 #define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 #define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 #define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 #define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 typedef void (APIENTRYP PFNGLFOGCOORDFEXTPROC) (GLfloat coord); typedef void (APIENTRYP PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord); typedef void (APIENTRYP PFNGLFOGCOORDDEXTPROC) (GLdouble coord); typedef void (APIENTRYP PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord); typedef void (APIENTRYP PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFogCoordfEXT (GLfloat coord); GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *coord); GLAPI void APIENTRY glFogCoorddEXT (GLdouble coord); GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *coord); GLAPI void APIENTRY glFogCoordPointerEXT (GLenum type, GLsizei stride, const void *pointer); #endif #endif /* GL_EXT_fog_coord */ #ifndef GL_EXT_framebuffer_blit #define GL_EXT_framebuffer_blit 1 #define GL_READ_FRAMEBUFFER_EXT 0x8CA8 #define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 #define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6 #define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA typedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlitFramebufferEXT (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); #endif #endif /* GL_EXT_framebuffer_blit */ #ifndef GL_EXT_framebuffer_multisample #define GL_EXT_framebuffer_multisample 1 #define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 #define GL_MAX_SAMPLES_EXT 0x8D57 typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); #endif #endif /* GL_EXT_framebuffer_multisample */ #ifndef GL_EXT_framebuffer_multisample_blit_scaled #define GL_EXT_framebuffer_multisample_blit_scaled 1 #define GL_SCALED_RESOLVE_FASTEST_EXT 0x90BA #define GL_SCALED_RESOLVE_NICEST_EXT 0x90BB #endif /* GL_EXT_framebuffer_multisample_blit_scaled */ #ifndef GL_EXT_framebuffer_object #define GL_EXT_framebuffer_object 1 #define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 #define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 #define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 #define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 #define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 #define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 #define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 #define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 #define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA #define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB #define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC #define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD #define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF #define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 #define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 #define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 #define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 #define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 #define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 #define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 #define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 #define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 #define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 #define GL_COLOR_ATTACHMENT10_EXT 0x8CEA #define GL_COLOR_ATTACHMENT11_EXT 0x8CEB #define GL_COLOR_ATTACHMENT12_EXT 0x8CEC #define GL_COLOR_ATTACHMENT13_EXT 0x8CED #define GL_COLOR_ATTACHMENT14_EXT 0x8CEE #define GL_COLOR_ATTACHMENT15_EXT 0x8CEF #define GL_DEPTH_ATTACHMENT_EXT 0x8D00 #define GL_STENCIL_ATTACHMENT_EXT 0x8D20 #define GL_FRAMEBUFFER_EXT 0x8D40 #define GL_RENDERBUFFER_EXT 0x8D41 #define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 #define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 #define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 #define GL_STENCIL_INDEX1_EXT 0x8D46 #define GL_STENCIL_INDEX4_EXT 0x8D47 #define GL_STENCIL_INDEX8_EXT 0x8D48 #define GL_STENCIL_INDEX16_EXT 0x8D49 #define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 #define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 #define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 #define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 #define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 #define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer); typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer); typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers); typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers); typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer); typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer); typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers); typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers); typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint renderbuffer); GLAPI void APIENTRY glBindRenderbufferEXT (GLenum target, GLuint renderbuffer); GLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei n, const GLuint *renderbuffers); GLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei n, GLuint *renderbuffers); GLAPI void APIENTRY glRenderbufferStorageEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum target, GLenum pname, GLint *params); GLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint framebuffer); GLAPI void APIENTRY glBindFramebufferEXT (GLenum target, GLuint framebuffer); GLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei n, const GLuint *framebuffers); GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei n, GLuint *framebuffers); GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum target); GLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); GLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum target, GLenum attachment, GLenum pname, GLint *params); GLAPI void APIENTRY glGenerateMipmapEXT (GLenum target); #endif #endif /* GL_EXT_framebuffer_object */ #ifndef GL_EXT_framebuffer_sRGB #define GL_EXT_framebuffer_sRGB 1 #define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 #define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA #endif /* GL_EXT_framebuffer_sRGB */ #ifndef GL_EXT_geometry_shader4 #define GL_EXT_geometry_shader4 1 #define GL_GEOMETRY_SHADER_EXT 0x8DD9 #define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA #define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB #define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC #define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 #define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD #define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE #define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B #define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF #define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 #define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 #define GL_LINES_ADJACENCY_EXT 0x000A #define GL_LINE_STRIP_ADJACENCY_EXT 0x000B #define GL_TRIANGLES_ADJACENCY_EXT 0x000C #define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 #define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 #define GL_PROGRAM_POINT_SIZE_EXT 0x8642 typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value); #endif #endif /* GL_EXT_geometry_shader4 */ #ifndef GL_EXT_gpu_program_parameters #define GL_EXT_gpu_program_parameters 1 typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glProgramEnvParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); GLAPI void APIENTRY glProgramLocalParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); #endif #endif /* GL_EXT_gpu_program_parameters */ #ifndef GL_EXT_gpu_shader4 #define GL_EXT_gpu_shader4 1 #define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 #define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 #define GL_SAMPLER_BUFFER_EXT 0x8DC2 #define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 #define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 #define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 #define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 #define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 #define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 #define GL_INT_SAMPLER_1D_EXT 0x8DC9 #define GL_INT_SAMPLER_2D_EXT 0x8DCA #define GL_INT_SAMPLER_3D_EXT 0x8DCB #define GL_INT_SAMPLER_CUBE_EXT 0x8DCC #define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD #define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE #define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF #define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 #define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 #define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 #define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 #define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 #define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 #define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 #define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 #define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 #define GL_MIN_PROGRAM_TEXEL_OFFSET_EXT 0x8904 #define GL_MAX_PROGRAM_TEXEL_OFFSET_EXT 0x8905 #define GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88FD typedef void (APIENTRYP PFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint *params); typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name); typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar *name); typedef void (APIENTRYP PFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0); typedef void (APIENTRYP PFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1); typedef void (APIENTRYP PFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); typedef void (APIENTRYP PFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); typedef void (APIENTRYP PFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IEXTPROC) (GLuint index, GLint x); typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y); typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IEXTPROC) (GLuint index, GLint x, GLint y, GLint z); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IEXTPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIEXTPROC) (GLuint index, GLuint x); typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIEXTPROC) (GLuint index, GLuint x, GLuint y); typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVEXTPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVEXTPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVEXTPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVEXTPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVEXTPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVEXTPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVEXTPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVEXTPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVEXTPROC) (GLuint index, const GLbyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVEXTPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVEXTPROC) (GLuint index, const GLubyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVEXTPROC) (GLuint index, const GLushort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVEXTPROC) (GLuint index, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum pname, GLuint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetUniformuivEXT (GLuint program, GLint location, GLuint *params); GLAPI void APIENTRY glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name); GLAPI GLint APIENTRY glGetFragDataLocationEXT (GLuint program, const GLchar *name); GLAPI void APIENTRY glUniform1uiEXT (GLint location, GLuint v0); GLAPI void APIENTRY glUniform2uiEXT (GLint location, GLuint v0, GLuint v1); GLAPI void APIENTRY glUniform3uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2); GLAPI void APIENTRY glUniform4uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); GLAPI void APIENTRY glUniform1uivEXT (GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glUniform2uivEXT (GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glUniform3uivEXT (GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glUniform4uivEXT (GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glVertexAttribI1iEXT (GLuint index, GLint x); GLAPI void APIENTRY glVertexAttribI2iEXT (GLuint index, GLint x, GLint y); GLAPI void APIENTRY glVertexAttribI3iEXT (GLuint index, GLint x, GLint y, GLint z); GLAPI void APIENTRY glVertexAttribI4iEXT (GLuint index, GLint x, GLint y, GLint z, GLint w); GLAPI void APIENTRY glVertexAttribI1uiEXT (GLuint index, GLuint x); GLAPI void APIENTRY glVertexAttribI2uiEXT (GLuint index, GLuint x, GLuint y); GLAPI void APIENTRY glVertexAttribI3uiEXT (GLuint index, GLuint x, GLuint y, GLuint z); GLAPI void APIENTRY glVertexAttribI4uiEXT (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); GLAPI void APIENTRY glVertexAttribI1ivEXT (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttribI2ivEXT (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttribI3ivEXT (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttribI4ivEXT (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttribI1uivEXT (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttribI2uivEXT (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttribI3uivEXT (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttribI4uivEXT (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttribI4bvEXT (GLuint index, const GLbyte *v); GLAPI void APIENTRY glVertexAttribI4svEXT (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttribI4ubvEXT (GLuint index, const GLubyte *v); GLAPI void APIENTRY glVertexAttribI4usvEXT (GLuint index, const GLushort *v); GLAPI void APIENTRY glVertexAttribIPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); GLAPI void APIENTRY glGetVertexAttribIivEXT (GLuint index, GLenum pname, GLint *params); GLAPI void APIENTRY glGetVertexAttribIuivEXT (GLuint index, GLenum pname, GLuint *params); #endif #endif /* GL_EXT_gpu_shader4 */ #ifndef GL_EXT_histogram #define GL_EXT_histogram 1 #define GL_HISTOGRAM_EXT 0x8024 #define GL_PROXY_HISTOGRAM_EXT 0x8025 #define GL_HISTOGRAM_WIDTH_EXT 0x8026 #define GL_HISTOGRAM_FORMAT_EXT 0x8027 #define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 #define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 #define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A #define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B #define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C #define GL_HISTOGRAM_SINK_EXT 0x802D #define GL_MINMAX_EXT 0x802E #define GL_MINMAX_FORMAT_EXT 0x802F #define GL_MINMAX_SINK_EXT 0x8030 #define GL_TABLE_TOO_LARGE_EXT 0x8031 typedef void (APIENTRYP PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); typedef void (APIENTRYP PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink); typedef void (APIENTRYP PFNGLRESETHISTOGRAMEXTPROC) (GLenum target); typedef void (APIENTRYP PFNGLRESETMINMAXEXTPROC) (GLenum target); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetHistogramEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetMinmaxEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glHistogramEXT (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); GLAPI void APIENTRY glMinmaxEXT (GLenum target, GLenum internalformat, GLboolean sink); GLAPI void APIENTRY glResetHistogramEXT (GLenum target); GLAPI void APIENTRY glResetMinmaxEXT (GLenum target); #endif #endif /* GL_EXT_histogram */ #ifndef GL_EXT_index_array_formats #define GL_EXT_index_array_formats 1 #define GL_IUI_V2F_EXT 0x81AD #define GL_IUI_V3F_EXT 0x81AE #define GL_IUI_N3F_V2F_EXT 0x81AF #define GL_IUI_N3F_V3F_EXT 0x81B0 #define GL_T2F_IUI_V2F_EXT 0x81B1 #define GL_T2F_IUI_V3F_EXT 0x81B2 #define GL_T2F_IUI_N3F_V2F_EXT 0x81B3 #define GL_T2F_IUI_N3F_V3F_EXT 0x81B4 #endif /* GL_EXT_index_array_formats */ #ifndef GL_EXT_index_func #define GL_EXT_index_func 1 #define GL_INDEX_TEST_EXT 0x81B5 #define GL_INDEX_TEST_FUNC_EXT 0x81B6 #define GL_INDEX_TEST_REF_EXT 0x81B7 typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glIndexFuncEXT (GLenum func, GLclampf ref); #endif #endif /* GL_EXT_index_func */ #ifndef GL_EXT_index_material #define GL_EXT_index_material 1 #define GL_INDEX_MATERIAL_EXT 0x81B8 #define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9 #define GL_INDEX_MATERIAL_FACE_EXT 0x81BA typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glIndexMaterialEXT (GLenum face, GLenum mode); #endif #endif /* GL_EXT_index_material */ #ifndef GL_EXT_index_texture #define GL_EXT_index_texture 1 #endif /* GL_EXT_index_texture */ #ifndef GL_EXT_light_texture #define GL_EXT_light_texture 1 #define GL_FRAGMENT_MATERIAL_EXT 0x8349 #define GL_FRAGMENT_NORMAL_EXT 0x834A #define GL_FRAGMENT_COLOR_EXT 0x834C #define GL_ATTENUATION_EXT 0x834D #define GL_SHADOW_ATTENUATION_EXT 0x834E #define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F #define GL_TEXTURE_LIGHT_EXT 0x8350 #define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 #define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 typedef void (APIENTRYP PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode); typedef void (APIENTRYP PFNGLTEXTURELIGHTEXTPROC) (GLenum pname); typedef void (APIENTRYP PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glApplyTextureEXT (GLenum mode); GLAPI void APIENTRY glTextureLightEXT (GLenum pname); GLAPI void APIENTRY glTextureMaterialEXT (GLenum face, GLenum mode); #endif #endif /* GL_EXT_light_texture */ #ifndef GL_EXT_memory_object #define GL_EXT_memory_object 1 #define GL_TEXTURE_TILING_EXT 0x9580 #define GL_DEDICATED_MEMORY_OBJECT_EXT 0x9581 #define GL_PROTECTED_MEMORY_OBJECT_EXT 0x959B #define GL_NUM_TILING_TYPES_EXT 0x9582 #define GL_TILING_TYPES_EXT 0x9583 #define GL_OPTIMAL_TILING_EXT 0x9584 #define GL_LINEAR_TILING_EXT 0x9585 #define GL_NUM_DEVICE_UUIDS_EXT 0x9596 #define GL_DEVICE_UUID_EXT 0x9597 #define GL_DRIVER_UUID_EXT 0x9598 #define GL_UUID_SIZE_EXT 16 typedef void (APIENTRYP PFNGLGETUNSIGNEDBYTEVEXTPROC) (GLenum pname, GLubyte *data); typedef void (APIENTRYP PFNGLGETUNSIGNEDBYTEI_VEXTPROC) (GLenum target, GLuint index, GLubyte *data); typedef void (APIENTRYP PFNGLDELETEMEMORYOBJECTSEXTPROC) (GLsizei n, const GLuint *memoryObjects); typedef GLboolean (APIENTRYP PFNGLISMEMORYOBJECTEXTPROC) (GLuint memoryObject); typedef void (APIENTRYP PFNGLCREATEMEMORYOBJECTSEXTPROC) (GLsizei n, GLuint *memoryObjects); typedef void (APIENTRYP PFNGLMEMORYOBJECTPARAMETERIVEXTPROC) (GLuint memoryObject, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLGETMEMORYOBJECTPARAMETERIVEXTPROC) (GLuint memoryObject, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLTEXSTORAGEMEM2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); typedef void (APIENTRYP PFNGLTEXSTORAGEMEM2DMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); typedef void (APIENTRYP PFNGLTEXSTORAGEMEM3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); typedef void (APIENTRYP PFNGLTEXSTORAGEMEM3DMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); typedef void (APIENTRYP PFNGLBUFFERSTORAGEMEMEXTPROC) (GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset); typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM2DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM2DMULTISAMPLEEXTPROC) (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM3DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM3DMULTISAMPLEEXTPROC) (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEMEMEXTPROC) (GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset); typedef void (APIENTRYP PFNGLTEXSTORAGEMEM1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset); typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM1DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetUnsignedBytevEXT (GLenum pname, GLubyte *data); GLAPI void APIENTRY glGetUnsignedBytei_vEXT (GLenum target, GLuint index, GLubyte *data); GLAPI void APIENTRY glDeleteMemoryObjectsEXT (GLsizei n, const GLuint *memoryObjects); GLAPI GLboolean APIENTRY glIsMemoryObjectEXT (GLuint memoryObject); GLAPI void APIENTRY glCreateMemoryObjectsEXT (GLsizei n, GLuint *memoryObjects); GLAPI void APIENTRY glMemoryObjectParameterivEXT (GLuint memoryObject, GLenum pname, const GLint *params); GLAPI void APIENTRY glGetMemoryObjectParameterivEXT (GLuint memoryObject, GLenum pname, GLint *params); GLAPI void APIENTRY glTexStorageMem2DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); GLAPI void APIENTRY glTexStorageMem2DMultisampleEXT (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); GLAPI void APIENTRY glTexStorageMem3DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); GLAPI void APIENTRY glTexStorageMem3DMultisampleEXT (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); GLAPI void APIENTRY glBufferStorageMemEXT (GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset); GLAPI void APIENTRY glTextureStorageMem2DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); GLAPI void APIENTRY glTextureStorageMem2DMultisampleEXT (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); GLAPI void APIENTRY glTextureStorageMem3DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); GLAPI void APIENTRY glTextureStorageMem3DMultisampleEXT (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); GLAPI void APIENTRY glNamedBufferStorageMemEXT (GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset); GLAPI void APIENTRY glTexStorageMem1DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset); GLAPI void APIENTRY glTextureStorageMem1DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset); #endif #endif /* GL_EXT_memory_object */ #ifndef GL_EXT_memory_object_fd #define GL_EXT_memory_object_fd 1 #define GL_HANDLE_TYPE_OPAQUE_FD_EXT 0x9586 typedef void (APIENTRYP PFNGLIMPORTMEMORYFDEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, GLint fd); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glImportMemoryFdEXT (GLuint memory, GLuint64 size, GLenum handleType, GLint fd); #endif #endif /* GL_EXT_memory_object_fd */ #ifndef GL_EXT_memory_object_win32 #define GL_EXT_memory_object_win32 1 #define GL_HANDLE_TYPE_OPAQUE_WIN32_EXT 0x9587 #define GL_HANDLE_TYPE_OPAQUE_WIN32_KMT_EXT 0x9588 #define GL_DEVICE_LUID_EXT 0x9599 #define GL_DEVICE_NODE_MASK_EXT 0x959A #define GL_LUID_SIZE_EXT 8 #define GL_HANDLE_TYPE_D3D12_TILEPOOL_EXT 0x9589 #define GL_HANDLE_TYPE_D3D12_RESOURCE_EXT 0x958A #define GL_HANDLE_TYPE_D3D11_IMAGE_EXT 0x958B #define GL_HANDLE_TYPE_D3D11_IMAGE_KMT_EXT 0x958C typedef void (APIENTRYP PFNGLIMPORTMEMORYWIN32HANDLEEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, void *handle); typedef void (APIENTRYP PFNGLIMPORTMEMORYWIN32NAMEEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, const void *name); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glImportMemoryWin32HandleEXT (GLuint memory, GLuint64 size, GLenum handleType, void *handle); GLAPI void APIENTRY glImportMemoryWin32NameEXT (GLuint memory, GLuint64 size, GLenum handleType, const void *name); #endif #endif /* GL_EXT_memory_object_win32 */ #ifndef GL_EXT_misc_attribute #define GL_EXT_misc_attribute 1 #endif /* GL_EXT_misc_attribute */ #ifndef GL_EXT_multi_draw_arrays #define GL_EXT_multi_draw_arrays 1 typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); #endif #endif /* GL_EXT_multi_draw_arrays */ #ifndef GL_EXT_multisample #define GL_EXT_multisample 1 #define GL_MULTISAMPLE_EXT 0x809D #define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E #define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F #define GL_SAMPLE_MASK_EXT 0x80A0 #define GL_1PASS_EXT 0x80A1 #define GL_2PASS_0_EXT 0x80A2 #define GL_2PASS_1_EXT 0x80A3 #define GL_4PASS_0_EXT 0x80A4 #define GL_4PASS_1_EXT 0x80A5 #define GL_4PASS_2_EXT 0x80A6 #define GL_4PASS_3_EXT 0x80A7 #define GL_SAMPLE_BUFFERS_EXT 0x80A8 #define GL_SAMPLES_EXT 0x80A9 #define GL_SAMPLE_MASK_VALUE_EXT 0x80AA #define GL_SAMPLE_MASK_INVERT_EXT 0x80AB #define GL_SAMPLE_PATTERN_EXT 0x80AC #define GL_MULTISAMPLE_BIT_EXT 0x20000000 typedef void (APIENTRYP PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert); typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSampleMaskEXT (GLclampf value, GLboolean invert); GLAPI void APIENTRY glSamplePatternEXT (GLenum pattern); #endif #endif /* GL_EXT_multisample */ #ifndef GL_EXT_multiview_tessellation_geometry_shader #define GL_EXT_multiview_tessellation_geometry_shader 1 #endif /* GL_EXT_multiview_tessellation_geometry_shader */ #ifndef GL_EXT_multiview_texture_multisample #define GL_EXT_multiview_texture_multisample 1 #endif /* GL_EXT_multiview_texture_multisample */ #ifndef GL_EXT_multiview_timer_query #define GL_EXT_multiview_timer_query 1 #endif /* GL_EXT_multiview_timer_query */ #ifndef GL_EXT_packed_depth_stencil #define GL_EXT_packed_depth_stencil 1 #define GL_DEPTH_STENCIL_EXT 0x84F9 #define GL_UNSIGNED_INT_24_8_EXT 0x84FA #define GL_DEPTH24_STENCIL8_EXT 0x88F0 #define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 #endif /* GL_EXT_packed_depth_stencil */ #ifndef GL_EXT_packed_float #define GL_EXT_packed_float 1 #define GL_R11F_G11F_B10F_EXT 0x8C3A #define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B #define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C #endif /* GL_EXT_packed_float */ #ifndef GL_EXT_packed_pixels #define GL_EXT_packed_pixels 1 #define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 #define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 #define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 #define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 #define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 #endif /* GL_EXT_packed_pixels */ #ifndef GL_EXT_paletted_texture #define GL_EXT_paletted_texture 1 #define GL_COLOR_INDEX1_EXT 0x80E2 #define GL_COLOR_INDEX2_EXT 0x80E3 #define GL_COLOR_INDEX4_EXT 0x80E4 #define GL_COLOR_INDEX8_EXT 0x80E5 #define GL_COLOR_INDEX12_EXT 0x80E6 #define GL_COLOR_INDEX16_EXT 0x80E7 #define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED typedef void (APIENTRYP PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void *table); typedef void (APIENTRYP PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, void *data); typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glColorTableEXT (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void *table); GLAPI void APIENTRY glGetColorTableEXT (GLenum target, GLenum format, GLenum type, void *data); GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); #endif #endif /* GL_EXT_paletted_texture */ #ifndef GL_EXT_pixel_buffer_object #define GL_EXT_pixel_buffer_object 1 #define GL_PIXEL_PACK_BUFFER_EXT 0x88EB #define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC #define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED #define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF #endif /* GL_EXT_pixel_buffer_object */ #ifndef GL_EXT_pixel_transform #define GL_EXT_pixel_transform 1 #define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 #define GL_PIXEL_MAG_FILTER_EXT 0x8331 #define GL_PIXEL_MIN_FILTER_EXT 0x8332 #define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 #define GL_CUBIC_EXT 0x8334 #define GL_AVERAGE_EXT 0x8335 #define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 #define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 #define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum target, GLenum pname, GLint param); GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum target, GLenum pname, GLfloat param); GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glGetPixelTransformParameterivEXT (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetPixelTransformParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); #endif #endif /* GL_EXT_pixel_transform */ #ifndef GL_EXT_pixel_transform_color_table #define GL_EXT_pixel_transform_color_table 1 #endif /* GL_EXT_pixel_transform_color_table */ #ifndef GL_EXT_point_parameters #define GL_EXT_point_parameters 1 #define GL_POINT_SIZE_MIN_EXT 0x8126 #define GL_POINT_SIZE_MAX_EXT 0x8127 #define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 #define GL_DISTANCE_ATTENUATION_EXT 0x8129 typedef void (APIENTRYP PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPointParameterfEXT (GLenum pname, GLfloat param); GLAPI void APIENTRY glPointParameterfvEXT (GLenum pname, const GLfloat *params); #endif #endif /* GL_EXT_point_parameters */ #ifndef GL_EXT_polygon_offset #define GL_EXT_polygon_offset 1 #define GL_POLYGON_OFFSET_EXT 0x8037 #define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 #define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 typedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat factor, GLfloat bias); #endif #endif /* GL_EXT_polygon_offset */ #ifndef GL_EXT_polygon_offset_clamp #define GL_EXT_polygon_offset_clamp 1 #define GL_POLYGON_OFFSET_CLAMP_EXT 0x8E1B typedef void (APIENTRYP PFNGLPOLYGONOFFSETCLAMPEXTPROC) (GLfloat factor, GLfloat units, GLfloat clamp); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPolygonOffsetClampEXT (GLfloat factor, GLfloat units, GLfloat clamp); #endif #endif /* GL_EXT_polygon_offset_clamp */ #ifndef GL_EXT_post_depth_coverage #define GL_EXT_post_depth_coverage 1 #endif /* GL_EXT_post_depth_coverage */ #ifndef GL_EXT_provoking_vertex #define GL_EXT_provoking_vertex 1 #define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C #define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D #define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E #define GL_PROVOKING_VERTEX_EXT 0x8E4F typedef void (APIENTRYP PFNGLPROVOKINGVERTEXEXTPROC) (GLenum mode); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glProvokingVertexEXT (GLenum mode); #endif #endif /* GL_EXT_provoking_vertex */ #ifndef GL_EXT_raster_multisample #define GL_EXT_raster_multisample 1 #define GL_RASTER_MULTISAMPLE_EXT 0x9327 #define GL_RASTER_SAMPLES_EXT 0x9328 #define GL_MAX_RASTER_SAMPLES_EXT 0x9329 #define GL_RASTER_FIXED_SAMPLE_LOCATIONS_EXT 0x932A #define GL_MULTISAMPLE_RASTERIZATION_ALLOWED_EXT 0x932B #define GL_EFFECTIVE_RASTER_SAMPLES_EXT 0x932C typedef void (APIENTRYP PFNGLRASTERSAMPLESEXTPROC) (GLuint samples, GLboolean fixedsamplelocations); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glRasterSamplesEXT (GLuint samples, GLboolean fixedsamplelocations); #endif #endif /* GL_EXT_raster_multisample */ #ifndef GL_EXT_rescale_normal #define GL_EXT_rescale_normal 1 #define GL_RESCALE_NORMAL_EXT 0x803A #endif /* GL_EXT_rescale_normal */ #ifndef GL_EXT_secondary_color #define GL_EXT_secondary_color 1 #define GL_COLOR_SUM_EXT 0x8458 #define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 #define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A #define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B #define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C #define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D #define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v); typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte red, GLbyte green, GLbyte blue); GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *v); GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble red, GLdouble green, GLdouble blue); GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *v); GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat red, GLfloat green, GLfloat blue); GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *v); GLAPI void APIENTRY glSecondaryColor3iEXT (GLint red, GLint green, GLint blue); GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *v); GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort red, GLshort green, GLshort blue); GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *v); GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte red, GLubyte green, GLubyte blue); GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *v); GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint red, GLuint green, GLuint blue); GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *v); GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort red, GLushort green, GLushort blue); GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *v); GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint size, GLenum type, GLsizei stride, const void *pointer); #endif #endif /* GL_EXT_secondary_color */ #ifndef GL_EXT_semaphore #define GL_EXT_semaphore 1 #define GL_LAYOUT_GENERAL_EXT 0x958D #define GL_LAYOUT_COLOR_ATTACHMENT_EXT 0x958E #define GL_LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT 0x958F #define GL_LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT 0x9590 #define GL_LAYOUT_SHADER_READ_ONLY_EXT 0x9591 #define GL_LAYOUT_TRANSFER_SRC_EXT 0x9592 #define GL_LAYOUT_TRANSFER_DST_EXT 0x9593 #define GL_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_EXT 0x9530 #define GL_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT 0x9531 typedef void (APIENTRYP PFNGLGENSEMAPHORESEXTPROC) (GLsizei n, GLuint *semaphores); typedef void (APIENTRYP PFNGLDELETESEMAPHORESEXTPROC) (GLsizei n, const GLuint *semaphores); typedef GLboolean (APIENTRYP PFNGLISSEMAPHOREEXTPROC) (GLuint semaphore); typedef void (APIENTRYP PFNGLSEMAPHOREPARAMETERUI64VEXTPROC) (GLuint semaphore, GLenum pname, const GLuint64 *params); typedef void (APIENTRYP PFNGLGETSEMAPHOREPARAMETERUI64VEXTPROC) (GLuint semaphore, GLenum pname, GLuint64 *params); typedef void (APIENTRYP PFNGLWAITSEMAPHOREEXTPROC) (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts); typedef void (APIENTRYP PFNGLSIGNALSEMAPHOREEXTPROC) (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGenSemaphoresEXT (GLsizei n, GLuint *semaphores); GLAPI void APIENTRY glDeleteSemaphoresEXT (GLsizei n, const GLuint *semaphores); GLAPI GLboolean APIENTRY glIsSemaphoreEXT (GLuint semaphore); GLAPI void APIENTRY glSemaphoreParameterui64vEXT (GLuint semaphore, GLenum pname, const GLuint64 *params); GLAPI void APIENTRY glGetSemaphoreParameterui64vEXT (GLuint semaphore, GLenum pname, GLuint64 *params); GLAPI void APIENTRY glWaitSemaphoreEXT (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts); GLAPI void APIENTRY glSignalSemaphoreEXT (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts); #endif #endif /* GL_EXT_semaphore */ #ifndef GL_EXT_semaphore_fd #define GL_EXT_semaphore_fd 1 typedef void (APIENTRYP PFNGLIMPORTSEMAPHOREFDEXTPROC) (GLuint semaphore, GLenum handleType, GLint fd); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glImportSemaphoreFdEXT (GLuint semaphore, GLenum handleType, GLint fd); #endif #endif /* GL_EXT_semaphore_fd */ #ifndef GL_EXT_semaphore_win32 #define GL_EXT_semaphore_win32 1 #define GL_HANDLE_TYPE_D3D12_FENCE_EXT 0x9594 #define GL_D3D12_FENCE_VALUE_EXT 0x9595 typedef void (APIENTRYP PFNGLIMPORTSEMAPHOREWIN32HANDLEEXTPROC) (GLuint semaphore, GLenum handleType, void *handle); typedef void (APIENTRYP PFNGLIMPORTSEMAPHOREWIN32NAMEEXTPROC) (GLuint semaphore, GLenum handleType, const void *name); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glImportSemaphoreWin32HandleEXT (GLuint semaphore, GLenum handleType, void *handle); GLAPI void APIENTRY glImportSemaphoreWin32NameEXT (GLuint semaphore, GLenum handleType, const void *name); #endif #endif /* GL_EXT_semaphore_win32 */ #ifndef GL_EXT_separate_shader_objects #define GL_EXT_separate_shader_objects 1 #define GL_ACTIVE_PROGRAM_EXT 0x8B8D typedef void (APIENTRYP PFNGLUSESHADERPROGRAMEXTPROC) (GLenum type, GLuint program); typedef void (APIENTRYP PFNGLACTIVEPROGRAMEXTPROC) (GLuint program); typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMEXTPROC) (GLenum type, const GLchar *string); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glUseShaderProgramEXT (GLenum type, GLuint program); GLAPI void APIENTRY glActiveProgramEXT (GLuint program); GLAPI GLuint APIENTRY glCreateShaderProgramEXT (GLenum type, const GLchar *string); #endif #endif /* GL_EXT_separate_shader_objects */ #ifndef GL_EXT_separate_specular_color #define GL_EXT_separate_specular_color 1 #define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 #define GL_SINGLE_COLOR_EXT 0x81F9 #define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA #endif /* GL_EXT_separate_specular_color */ #ifndef GL_EXT_shader_framebuffer_fetch #define GL_EXT_shader_framebuffer_fetch 1 #define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52 #endif /* GL_EXT_shader_framebuffer_fetch */ #ifndef GL_EXT_shader_framebuffer_fetch_non_coherent #define GL_EXT_shader_framebuffer_fetch_non_coherent 1 typedef void (APIENTRYP PFNGLFRAMEBUFFERFETCHBARRIEREXTPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFramebufferFetchBarrierEXT (void); #endif #endif /* GL_EXT_shader_framebuffer_fetch_non_coherent */ #ifndef GL_EXT_shader_image_load_formatted #define GL_EXT_shader_image_load_formatted 1 #endif /* GL_EXT_shader_image_load_formatted */ #ifndef GL_EXT_shader_image_load_store #define GL_EXT_shader_image_load_store 1 #define GL_MAX_IMAGE_UNITS_EXT 0x8F38 #define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39 #define GL_IMAGE_BINDING_NAME_EXT 0x8F3A #define GL_IMAGE_BINDING_LEVEL_EXT 0x8F3B #define GL_IMAGE_BINDING_LAYERED_EXT 0x8F3C #define GL_IMAGE_BINDING_LAYER_EXT 0x8F3D #define GL_IMAGE_BINDING_ACCESS_EXT 0x8F3E #define GL_IMAGE_1D_EXT 0x904C #define GL_IMAGE_2D_EXT 0x904D #define GL_IMAGE_3D_EXT 0x904E #define GL_IMAGE_2D_RECT_EXT 0x904F #define GL_IMAGE_CUBE_EXT 0x9050 #define GL_IMAGE_BUFFER_EXT 0x9051 #define GL_IMAGE_1D_ARRAY_EXT 0x9052 #define GL_IMAGE_2D_ARRAY_EXT 0x9053 #define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 #define GL_IMAGE_2D_MULTISAMPLE_EXT 0x9055 #define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056 #define GL_INT_IMAGE_1D_EXT 0x9057 #define GL_INT_IMAGE_2D_EXT 0x9058 #define GL_INT_IMAGE_3D_EXT 0x9059 #define GL_INT_IMAGE_2D_RECT_EXT 0x905A #define GL_INT_IMAGE_CUBE_EXT 0x905B #define GL_INT_IMAGE_BUFFER_EXT 0x905C #define GL_INT_IMAGE_1D_ARRAY_EXT 0x905D #define GL_INT_IMAGE_2D_ARRAY_EXT 0x905E #define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F #define GL_INT_IMAGE_2D_MULTISAMPLE_EXT 0x9060 #define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061 #define GL_UNSIGNED_INT_IMAGE_1D_EXT 0x9062 #define GL_UNSIGNED_INT_IMAGE_2D_EXT 0x9063 #define GL_UNSIGNED_INT_IMAGE_3D_EXT 0x9064 #define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065 #define GL_UNSIGNED_INT_IMAGE_CUBE_EXT 0x9066 #define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067 #define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068 #define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069 #define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A #define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B #define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C #define GL_MAX_IMAGE_SAMPLES_EXT 0x906D #define GL_IMAGE_BINDING_FORMAT_EXT 0x906E #define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001 #define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT 0x00000002 #define GL_UNIFORM_BARRIER_BIT_EXT 0x00000004 #define GL_TEXTURE_FETCH_BARRIER_BIT_EXT 0x00000008 #define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020 #define GL_COMMAND_BARRIER_BIT_EXT 0x00000040 #define GL_PIXEL_BUFFER_BARRIER_BIT_EXT 0x00000080 #define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100 #define GL_BUFFER_UPDATE_BARRIER_BIT_EXT 0x00000200 #define GL_FRAMEBUFFER_BARRIER_BIT_EXT 0x00000400 #define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800 #define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000 #define GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREEXTPROC) (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); typedef void (APIENTRYP PFNGLMEMORYBARRIEREXTPROC) (GLbitfield barriers); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBindImageTextureEXT (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); GLAPI void APIENTRY glMemoryBarrierEXT (GLbitfield barriers); #endif #endif /* GL_EXT_shader_image_load_store */ #ifndef GL_EXT_shader_integer_mix #define GL_EXT_shader_integer_mix 1 #endif /* GL_EXT_shader_integer_mix */ #ifndef GL_EXT_shader_samples_identical #define GL_EXT_shader_samples_identical 1 #endif /* GL_EXT_shader_samples_identical */ #ifndef GL_EXT_shadow_funcs #define GL_EXT_shadow_funcs 1 #endif /* GL_EXT_shadow_funcs */ #ifndef GL_EXT_shared_texture_palette #define GL_EXT_shared_texture_palette 1 #define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB #endif /* GL_EXT_shared_texture_palette */ #ifndef GL_EXT_sparse_texture2 #define GL_EXT_sparse_texture2 1 #endif /* GL_EXT_sparse_texture2 */ #ifndef GL_EXT_stencil_clear_tag #define GL_EXT_stencil_clear_tag 1 #define GL_STENCIL_TAG_BITS_EXT 0x88F2 #define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 typedef void (APIENTRYP PFNGLSTENCILCLEARTAGEXTPROC) (GLsizei stencilTagBits, GLuint stencilClearTag); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glStencilClearTagEXT (GLsizei stencilTagBits, GLuint stencilClearTag); #endif #endif /* GL_EXT_stencil_clear_tag */ #ifndef GL_EXT_stencil_two_side #define GL_EXT_stencil_two_side 1 #define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 #define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 typedef void (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glActiveStencilFaceEXT (GLenum face); #endif #endif /* GL_EXT_stencil_two_side */ #ifndef GL_EXT_stencil_wrap #define GL_EXT_stencil_wrap 1 #define GL_INCR_WRAP_EXT 0x8507 #define GL_DECR_WRAP_EXT 0x8508 #endif /* GL_EXT_stencil_wrap */ #ifndef GL_EXT_subtexture #define GL_EXT_subtexture 1 typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); #endif #endif /* GL_EXT_subtexture */ #ifndef GL_EXT_texture #define GL_EXT_texture 1 #define GL_ALPHA4_EXT 0x803B #define GL_ALPHA8_EXT 0x803C #define GL_ALPHA12_EXT 0x803D #define GL_ALPHA16_EXT 0x803E #define GL_LUMINANCE4_EXT 0x803F #define GL_LUMINANCE8_EXT 0x8040 #define GL_LUMINANCE12_EXT 0x8041 #define GL_LUMINANCE16_EXT 0x8042 #define GL_LUMINANCE4_ALPHA4_EXT 0x8043 #define GL_LUMINANCE6_ALPHA2_EXT 0x8044 #define GL_LUMINANCE8_ALPHA8_EXT 0x8045 #define GL_LUMINANCE12_ALPHA4_EXT 0x8046 #define GL_LUMINANCE12_ALPHA12_EXT 0x8047 #define GL_LUMINANCE16_ALPHA16_EXT 0x8048 #define GL_INTENSITY_EXT 0x8049 #define GL_INTENSITY4_EXT 0x804A #define GL_INTENSITY8_EXT 0x804B #define GL_INTENSITY12_EXT 0x804C #define GL_INTENSITY16_EXT 0x804D #define GL_RGB2_EXT 0x804E #define GL_RGB4_EXT 0x804F #define GL_RGB5_EXT 0x8050 #define GL_RGB8_EXT 0x8051 #define GL_RGB10_EXT 0x8052 #define GL_RGB12_EXT 0x8053 #define GL_RGB16_EXT 0x8054 #define GL_RGBA2_EXT 0x8055 #define GL_RGBA4_EXT 0x8056 #define GL_RGB5_A1_EXT 0x8057 #define GL_RGBA8_EXT 0x8058 #define GL_RGB10_A2_EXT 0x8059 #define GL_RGBA12_EXT 0x805A #define GL_RGBA16_EXT 0x805B #define GL_TEXTURE_RED_SIZE_EXT 0x805C #define GL_TEXTURE_GREEN_SIZE_EXT 0x805D #define GL_TEXTURE_BLUE_SIZE_EXT 0x805E #define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F #define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 #define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 #define GL_REPLACE_EXT 0x8062 #define GL_PROXY_TEXTURE_1D_EXT 0x8063 #define GL_PROXY_TEXTURE_2D_EXT 0x8064 #define GL_TEXTURE_TOO_LARGE_EXT 0x8065 #endif /* GL_EXT_texture */ #ifndef GL_EXT_texture3D #define GL_EXT_texture3D 1 #define GL_PACK_SKIP_IMAGES_EXT 0x806B #define GL_PACK_IMAGE_HEIGHT_EXT 0x806C #define GL_UNPACK_SKIP_IMAGES_EXT 0x806D #define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E #define GL_TEXTURE_3D_EXT 0x806F #define GL_PROXY_TEXTURE_3D_EXT 0x8070 #define GL_TEXTURE_DEPTH_EXT 0x8071 #define GL_TEXTURE_WRAP_R_EXT 0x8072 #define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 typedef void (APIENTRYP PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexImage3DEXT (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); #endif #endif /* GL_EXT_texture3D */ #ifndef GL_EXT_texture_array #define GL_EXT_texture_array 1 #define GL_TEXTURE_1D_ARRAY_EXT 0x8C18 #define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 #define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A #define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B #define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C #define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D #define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF #define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFramebufferTextureLayerEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); #endif #endif /* GL_EXT_texture_array */ #ifndef GL_EXT_texture_buffer_object #define GL_EXT_texture_buffer_object 1 #define GL_TEXTURE_BUFFER_EXT 0x8C2A #define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B #define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C #define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D #define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E typedef void (APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer); #endif #endif /* GL_EXT_texture_buffer_object */ #ifndef GL_EXT_texture_compression_latc #define GL_EXT_texture_compression_latc 1 #define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 #define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 #define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 #define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 #endif /* GL_EXT_texture_compression_latc */ #ifndef GL_EXT_texture_compression_rgtc #define GL_EXT_texture_compression_rgtc 1 #define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB #define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC #define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD #define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE #endif /* GL_EXT_texture_compression_rgtc */ #ifndef GL_EXT_texture_compression_s3tc #define GL_EXT_texture_compression_s3tc 1 #define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 #define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 #define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 #define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 #endif /* GL_EXT_texture_compression_s3tc */ #ifndef GL_EXT_texture_cube_map #define GL_EXT_texture_cube_map 1 #define GL_NORMAL_MAP_EXT 0x8511 #define GL_REFLECTION_MAP_EXT 0x8512 #define GL_TEXTURE_CUBE_MAP_EXT 0x8513 #define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A #define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B #define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C #endif /* GL_EXT_texture_cube_map */ #ifndef GL_EXT_texture_env_add #define GL_EXT_texture_env_add 1 #endif /* GL_EXT_texture_env_add */ #ifndef GL_EXT_texture_env_combine #define GL_EXT_texture_env_combine 1 #define GL_COMBINE_EXT 0x8570 #define GL_COMBINE_RGB_EXT 0x8571 #define GL_COMBINE_ALPHA_EXT 0x8572 #define GL_RGB_SCALE_EXT 0x8573 #define GL_ADD_SIGNED_EXT 0x8574 #define GL_INTERPOLATE_EXT 0x8575 #define GL_CONSTANT_EXT 0x8576 #define GL_PRIMARY_COLOR_EXT 0x8577 #define GL_PREVIOUS_EXT 0x8578 #define GL_SOURCE0_RGB_EXT 0x8580 #define GL_SOURCE1_RGB_EXT 0x8581 #define GL_SOURCE2_RGB_EXT 0x8582 #define GL_SOURCE0_ALPHA_EXT 0x8588 #define GL_SOURCE1_ALPHA_EXT 0x8589 #define GL_SOURCE2_ALPHA_EXT 0x858A #define GL_OPERAND0_RGB_EXT 0x8590 #define GL_OPERAND1_RGB_EXT 0x8591 #define GL_OPERAND2_RGB_EXT 0x8592 #define GL_OPERAND0_ALPHA_EXT 0x8598 #define GL_OPERAND1_ALPHA_EXT 0x8599 #define GL_OPERAND2_ALPHA_EXT 0x859A #endif /* GL_EXT_texture_env_combine */ #ifndef GL_EXT_texture_env_dot3 #define GL_EXT_texture_env_dot3 1 #define GL_DOT3_RGB_EXT 0x8740 #define GL_DOT3_RGBA_EXT 0x8741 #endif /* GL_EXT_texture_env_dot3 */ #ifndef GL_EXT_texture_filter_anisotropic #define GL_EXT_texture_filter_anisotropic 1 #define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE #define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF #endif /* GL_EXT_texture_filter_anisotropic */ #ifndef GL_EXT_texture_filter_minmax #define GL_EXT_texture_filter_minmax 1 #define GL_TEXTURE_REDUCTION_MODE_EXT 0x9366 #define GL_WEIGHTED_AVERAGE_EXT 0x9367 #endif /* GL_EXT_texture_filter_minmax */ #ifndef GL_EXT_texture_integer #define GL_EXT_texture_integer 1 #define GL_RGBA32UI_EXT 0x8D70 #define GL_RGB32UI_EXT 0x8D71 #define GL_ALPHA32UI_EXT 0x8D72 #define GL_INTENSITY32UI_EXT 0x8D73 #define GL_LUMINANCE32UI_EXT 0x8D74 #define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 #define GL_RGBA16UI_EXT 0x8D76 #define GL_RGB16UI_EXT 0x8D77 #define GL_ALPHA16UI_EXT 0x8D78 #define GL_INTENSITY16UI_EXT 0x8D79 #define GL_LUMINANCE16UI_EXT 0x8D7A #define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B #define GL_RGBA8UI_EXT 0x8D7C #define GL_RGB8UI_EXT 0x8D7D #define GL_ALPHA8UI_EXT 0x8D7E #define GL_INTENSITY8UI_EXT 0x8D7F #define GL_LUMINANCE8UI_EXT 0x8D80 #define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 #define GL_RGBA32I_EXT 0x8D82 #define GL_RGB32I_EXT 0x8D83 #define GL_ALPHA32I_EXT 0x8D84 #define GL_INTENSITY32I_EXT 0x8D85 #define GL_LUMINANCE32I_EXT 0x8D86 #define GL_LUMINANCE_ALPHA32I_EXT 0x8D87 #define GL_RGBA16I_EXT 0x8D88 #define GL_RGB16I_EXT 0x8D89 #define GL_ALPHA16I_EXT 0x8D8A #define GL_INTENSITY16I_EXT 0x8D8B #define GL_LUMINANCE16I_EXT 0x8D8C #define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D #define GL_RGBA8I_EXT 0x8D8E #define GL_RGB8I_EXT 0x8D8F #define GL_ALPHA8I_EXT 0x8D90 #define GL_INTENSITY8I_EXT 0x8D91 #define GL_LUMINANCE8I_EXT 0x8D92 #define GL_LUMINANCE_ALPHA8I_EXT 0x8D93 #define GL_RED_INTEGER_EXT 0x8D94 #define GL_GREEN_INTEGER_EXT 0x8D95 #define GL_BLUE_INTEGER_EXT 0x8D96 #define GL_ALPHA_INTEGER_EXT 0x8D97 #define GL_RGB_INTEGER_EXT 0x8D98 #define GL_RGBA_INTEGER_EXT 0x8D99 #define GL_BGR_INTEGER_EXT 0x8D9A #define GL_BGRA_INTEGER_EXT 0x8D9B #define GL_LUMINANCE_INTEGER_EXT 0x8D9C #define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D #define GL_RGBA_INTEGER_MODE_EXT 0x8D9E typedef void (APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params); typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha); typedef void (APIENTRYP PFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params); GLAPI void APIENTRY glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params); GLAPI void APIENTRY glClearColorIiEXT (GLint red, GLint green, GLint blue, GLint alpha); GLAPI void APIENTRY glClearColorIuiEXT (GLuint red, GLuint green, GLuint blue, GLuint alpha); #endif #endif /* GL_EXT_texture_integer */ #ifndef GL_EXT_texture_lod_bias #define GL_EXT_texture_lod_bias 1 #define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD #define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 #define GL_TEXTURE_LOD_BIAS_EXT 0x8501 #endif /* GL_EXT_texture_lod_bias */ #ifndef GL_EXT_texture_mirror_clamp #define GL_EXT_texture_mirror_clamp 1 #define GL_MIRROR_CLAMP_EXT 0x8742 #define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 #define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 #endif /* GL_EXT_texture_mirror_clamp */ #ifndef GL_EXT_texture_object #define GL_EXT_texture_object 1 #define GL_TEXTURE_PRIORITY_EXT 0x8066 #define GL_TEXTURE_RESIDENT_EXT 0x8067 #define GL_TEXTURE_1D_BINDING_EXT 0x8068 #define GL_TEXTURE_2D_BINDING_EXT 0x8069 #define GL_TEXTURE_3D_BINDING_EXT 0x806A typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences); typedef void (APIENTRYP PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture); typedef void (APIENTRYP PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures); typedef void (APIENTRYP PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures); typedef GLboolean (APIENTRYP PFNGLISTEXTUREEXTPROC) (GLuint texture); typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei n, const GLuint *textures, GLboolean *residences); GLAPI void APIENTRY glBindTextureEXT (GLenum target, GLuint texture); GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei n, const GLuint *textures); GLAPI void APIENTRY glGenTexturesEXT (GLsizei n, GLuint *textures); GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint texture); GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei n, const GLuint *textures, const GLclampf *priorities); #endif #endif /* GL_EXT_texture_object */ #ifndef GL_EXT_texture_perturb_normal #define GL_EXT_texture_perturb_normal 1 #define GL_PERTURB_EXT 0x85AE #define GL_TEXTURE_NORMAL_EXT 0x85AF typedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTextureNormalEXT (GLenum mode); #endif #endif /* GL_EXT_texture_perturb_normal */ #ifndef GL_EXT_texture_sRGB #define GL_EXT_texture_sRGB 1 #define GL_SRGB_EXT 0x8C40 #define GL_SRGB8_EXT 0x8C41 #define GL_SRGB_ALPHA_EXT 0x8C42 #define GL_SRGB8_ALPHA8_EXT 0x8C43 #define GL_SLUMINANCE_ALPHA_EXT 0x8C44 #define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 #define GL_SLUMINANCE_EXT 0x8C46 #define GL_SLUMINANCE8_EXT 0x8C47 #define GL_COMPRESSED_SRGB_EXT 0x8C48 #define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 #define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A #define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B #define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F #endif /* GL_EXT_texture_sRGB */ #ifndef GL_EXT_texture_sRGB_R8 #define GL_EXT_texture_sRGB_R8 1 #define GL_SR8_EXT 0x8FBD #endif /* GL_EXT_texture_sRGB_R8 */ #ifndef GL_EXT_texture_sRGB_RG8 #define GL_EXT_texture_sRGB_RG8 1 #define GL_SRG8_EXT 0x8FBE #endif /* GL_EXT_texture_sRGB_RG8 */ #ifndef GL_EXT_texture_sRGB_decode #define GL_EXT_texture_sRGB_decode 1 #define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 #define GL_DECODE_EXT 0x8A49 #define GL_SKIP_DECODE_EXT 0x8A4A #endif /* GL_EXT_texture_sRGB_decode */ #ifndef GL_EXT_texture_shadow_lod #define GL_EXT_texture_shadow_lod 1 #endif /* GL_EXT_texture_shadow_lod */ #ifndef GL_EXT_texture_shared_exponent #define GL_EXT_texture_shared_exponent 1 #define GL_RGB9_E5_EXT 0x8C3D #define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E #define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F #endif /* GL_EXT_texture_shared_exponent */ #ifndef GL_EXT_texture_snorm #define GL_EXT_texture_snorm 1 #define GL_ALPHA_SNORM 0x9010 #define GL_LUMINANCE_SNORM 0x9011 #define GL_LUMINANCE_ALPHA_SNORM 0x9012 #define GL_INTENSITY_SNORM 0x9013 #define GL_ALPHA8_SNORM 0x9014 #define GL_LUMINANCE8_SNORM 0x9015 #define GL_LUMINANCE8_ALPHA8_SNORM 0x9016 #define GL_INTENSITY8_SNORM 0x9017 #define GL_ALPHA16_SNORM 0x9018 #define GL_LUMINANCE16_SNORM 0x9019 #define GL_LUMINANCE16_ALPHA16_SNORM 0x901A #define GL_INTENSITY16_SNORM 0x901B #define GL_RED_SNORM 0x8F90 #define GL_RG_SNORM 0x8F91 #define GL_RGB_SNORM 0x8F92 #define GL_RGBA_SNORM 0x8F93 #endif /* GL_EXT_texture_snorm */ #ifndef GL_EXT_texture_storage #define GL_EXT_texture_storage 1 #define GL_TEXTURE_IMMUTABLE_FORMAT_EXT 0x912F #define GL_RGBA32F_EXT 0x8814 #define GL_RGB32F_EXT 0x8815 #define GL_ALPHA32F_EXT 0x8816 #define GL_LUMINANCE32F_EXT 0x8818 #define GL_LUMINANCE_ALPHA32F_EXT 0x8819 #define GL_RGBA16F_EXT 0x881A #define GL_RGB16F_EXT 0x881B #define GL_ALPHA16F_EXT 0x881C #define GL_LUMINANCE16F_EXT 0x881E #define GL_LUMINANCE_ALPHA16F_EXT 0x881F #define GL_BGRA8_EXT 0x93A1 #define GL_R8_EXT 0x8229 #define GL_RG8_EXT 0x822B #define GL_R32F_EXT 0x822E #define GL_RG32F_EXT 0x8230 #define GL_R16F_EXT 0x822D #define GL_RG16F_EXT 0x822F typedef void (APIENTRYP PFNGLTEXSTORAGE1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); typedef void (APIENTRYP PFNGLTEXSTORAGE2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLTEXSTORAGE3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexStorage1DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); GLAPI void APIENTRY glTexStorage2DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glTexStorage3DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); #endif #endif /* GL_EXT_texture_storage */ #ifndef GL_EXT_texture_swizzle #define GL_EXT_texture_swizzle 1 #define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42 #define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43 #define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44 #define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45 #define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46 #endif /* GL_EXT_texture_swizzle */ #ifndef GL_EXT_timer_query #define GL_EXT_timer_query 1 #define GL_TIME_ELAPSED_EXT 0x88BF typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64 *params); typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64 *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64 *params); GLAPI void APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64 *params); #endif #endif /* GL_EXT_timer_query */ #ifndef GL_EXT_transform_feedback #define GL_EXT_transform_feedback 1 #define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E #define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84 #define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85 #define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F #define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C #define GL_SEPARATE_ATTRIBS_EXT 0x8C8D #define GL_PRIMITIVES_GENERATED_EXT 0x8C87 #define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88 #define GL_RASTERIZER_DISCARD_EXT 0x8C89 #define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80 #define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83 #define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F #define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76 typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKEXTPROC) (GLenum primitiveMode); typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKEXTPROC) (void); typedef void (APIENTRYP PFNGLBINDBUFFERRANGEEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); typedef void (APIENTRYP PFNGLBINDBUFFERBASEEXTPROC) (GLenum target, GLuint index, GLuint buffer); typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBeginTransformFeedbackEXT (GLenum primitiveMode); GLAPI void APIENTRY glEndTransformFeedbackEXT (void); GLAPI void APIENTRY glBindBufferRangeEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); GLAPI void APIENTRY glBindBufferOffsetEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset); GLAPI void APIENTRY glBindBufferBaseEXT (GLenum target, GLuint index, GLuint buffer); GLAPI void APIENTRY glTransformFeedbackVaryingsEXT (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); GLAPI void APIENTRY glGetTransformFeedbackVaryingEXT (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); #endif #endif /* GL_EXT_transform_feedback */ #ifndef GL_EXT_vertex_array #define GL_EXT_vertex_array 1 #define GL_VERTEX_ARRAY_EXT 0x8074 #define GL_NORMAL_ARRAY_EXT 0x8075 #define GL_COLOR_ARRAY_EXT 0x8076 #define GL_INDEX_ARRAY_EXT 0x8077 #define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 #define GL_EDGE_FLAG_ARRAY_EXT 0x8079 #define GL_VERTEX_ARRAY_SIZE_EXT 0x807A #define GL_VERTEX_ARRAY_TYPE_EXT 0x807B #define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C #define GL_VERTEX_ARRAY_COUNT_EXT 0x807D #define GL_NORMAL_ARRAY_TYPE_EXT 0x807E #define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F #define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 #define GL_COLOR_ARRAY_SIZE_EXT 0x8081 #define GL_COLOR_ARRAY_TYPE_EXT 0x8082 #define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 #define GL_COLOR_ARRAY_COUNT_EXT 0x8084 #define GL_INDEX_ARRAY_TYPE_EXT 0x8085 #define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 #define GL_INDEX_ARRAY_COUNT_EXT 0x8087 #define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 #define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 #define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A #define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B #define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C #define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D #define GL_VERTEX_ARRAY_POINTER_EXT 0x808E #define GL_NORMAL_ARRAY_POINTER_EXT 0x808F #define GL_COLOR_ARRAY_POINTER_EXT 0x8090 #define GL_INDEX_ARRAY_POINTER_EXT 0x8091 #define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 #define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 typedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC) (GLint i); typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); typedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count); typedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer); typedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC) (GLenum pname, void **params); typedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void *pointer); typedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void *pointer); typedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glArrayElementEXT (GLint i); GLAPI void APIENTRY glColorPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); GLAPI void APIENTRY glDrawArraysEXT (GLenum mode, GLint first, GLsizei count); GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei stride, GLsizei count, const GLboolean *pointer); GLAPI void APIENTRY glGetPointervEXT (GLenum pname, void **params); GLAPI void APIENTRY glIndexPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void *pointer); GLAPI void APIENTRY glNormalPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void *pointer); GLAPI void APIENTRY glTexCoordPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); GLAPI void APIENTRY glVertexPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); #endif #endif /* GL_EXT_vertex_array */ #ifndef GL_EXT_vertex_array_bgra #define GL_EXT_vertex_array_bgra 1 #endif /* GL_EXT_vertex_array_bgra */ #ifndef GL_EXT_vertex_attrib_64bit #define GL_EXT_vertex_attrib_64bit 1 #define GL_DOUBLE_VEC2_EXT 0x8FFC #define GL_DOUBLE_VEC3_EXT 0x8FFD #define GL_DOUBLE_VEC4_EXT 0x8FFE #define GL_DOUBLE_MAT2_EXT 0x8F46 #define GL_DOUBLE_MAT3_EXT 0x8F47 #define GL_DOUBLE_MAT4_EXT 0x8F48 #define GL_DOUBLE_MAT2x3_EXT 0x8F49 #define GL_DOUBLE_MAT2x4_EXT 0x8F4A #define GL_DOUBLE_MAT3x2_EXT 0x8F4B #define GL_DOUBLE_MAT3x4_EXT 0x8F4C #define GL_DOUBLE_MAT4x2_EXT 0x8F4D #define GL_DOUBLE_MAT4x3_EXT 0x8F4E typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DEXTPROC) (GLuint index, GLdouble x); typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DEXTPROC) (GLuint index, GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVEXTPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVEXTPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVEXTPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVEXTPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVEXTPROC) (GLuint index, GLenum pname, GLdouble *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexAttribL1dEXT (GLuint index, GLdouble x); GLAPI void APIENTRY glVertexAttribL2dEXT (GLuint index, GLdouble x, GLdouble y); GLAPI void APIENTRY glVertexAttribL3dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glVertexAttribL4dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glVertexAttribL1dvEXT (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttribL2dvEXT (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttribL3dvEXT (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttribL4dvEXT (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttribLPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); GLAPI void APIENTRY glGetVertexAttribLdvEXT (GLuint index, GLenum pname, GLdouble *params); #endif #endif /* GL_EXT_vertex_attrib_64bit */ #ifndef GL_EXT_vertex_shader #define GL_EXT_vertex_shader 1 #define GL_VERTEX_SHADER_EXT 0x8780 #define GL_VERTEX_SHADER_BINDING_EXT 0x8781 #define GL_OP_INDEX_EXT 0x8782 #define GL_OP_NEGATE_EXT 0x8783 #define GL_OP_DOT3_EXT 0x8784 #define GL_OP_DOT4_EXT 0x8785 #define GL_OP_MUL_EXT 0x8786 #define GL_OP_ADD_EXT 0x8787 #define GL_OP_MADD_EXT 0x8788 #define GL_OP_FRAC_EXT 0x8789 #define GL_OP_MAX_EXT 0x878A #define GL_OP_MIN_EXT 0x878B #define GL_OP_SET_GE_EXT 0x878C #define GL_OP_SET_LT_EXT 0x878D #define GL_OP_CLAMP_EXT 0x878E #define GL_OP_FLOOR_EXT 0x878F #define GL_OP_ROUND_EXT 0x8790 #define GL_OP_EXP_BASE_2_EXT 0x8791 #define GL_OP_LOG_BASE_2_EXT 0x8792 #define GL_OP_POWER_EXT 0x8793 #define GL_OP_RECIP_EXT 0x8794 #define GL_OP_RECIP_SQRT_EXT 0x8795 #define GL_OP_SUB_EXT 0x8796 #define GL_OP_CROSS_PRODUCT_EXT 0x8797 #define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 #define GL_OP_MOV_EXT 0x8799 #define GL_OUTPUT_VERTEX_EXT 0x879A #define GL_OUTPUT_COLOR0_EXT 0x879B #define GL_OUTPUT_COLOR1_EXT 0x879C #define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D #define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E #define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F #define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 #define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 #define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 #define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 #define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 #define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 #define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 #define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 #define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 #define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 #define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA #define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB #define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC #define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD #define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE #define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF #define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 #define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 #define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 #define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 #define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 #define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 #define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 #define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 #define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 #define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 #define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA #define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB #define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC #define GL_OUTPUT_FOG_EXT 0x87BD #define GL_SCALAR_EXT 0x87BE #define GL_VECTOR_EXT 0x87BF #define GL_MATRIX_EXT 0x87C0 #define GL_VARIANT_EXT 0x87C1 #define GL_INVARIANT_EXT 0x87C2 #define GL_LOCAL_CONSTANT_EXT 0x87C3 #define GL_LOCAL_EXT 0x87C4 #define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 #define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 #define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 #define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 #define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 #define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA #define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB #define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC #define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD #define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE #define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF #define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 #define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 #define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 #define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 #define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 #define GL_X_EXT 0x87D5 #define GL_Y_EXT 0x87D6 #define GL_Z_EXT 0x87D7 #define GL_W_EXT 0x87D8 #define GL_NEGATIVE_X_EXT 0x87D9 #define GL_NEGATIVE_Y_EXT 0x87DA #define GL_NEGATIVE_Z_EXT 0x87DB #define GL_NEGATIVE_W_EXT 0x87DC #define GL_ZERO_EXT 0x87DD #define GL_ONE_EXT 0x87DE #define GL_NEGATIVE_ONE_EXT 0x87DF #define GL_NORMALIZED_RANGE_EXT 0x87E0 #define GL_FULL_RANGE_EXT 0x87E1 #define GL_CURRENT_VERTEX_EXT 0x87E2 #define GL_MVP_MATRIX_EXT 0x87E3 #define GL_VARIANT_VALUE_EXT 0x87E4 #define GL_VARIANT_DATATYPE_EXT 0x87E5 #define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 #define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 #define GL_VARIANT_ARRAY_EXT 0x87E8 #define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 #define GL_INVARIANT_VALUE_EXT 0x87EA #define GL_INVARIANT_DATATYPE_EXT 0x87EB #define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC #define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC) (void); typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC) (void); typedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id); typedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range); typedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id); typedef void (APIENTRYP PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1); typedef void (APIENTRYP PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2); typedef void (APIENTRYP PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); typedef void (APIENTRYP PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); typedef void (APIENTRYP PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); typedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); typedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); typedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); typedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const void *addr); typedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const void *addr); typedef void (APIENTRYP PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr); typedef void (APIENTRYP PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr); typedef void (APIENTRYP PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr); typedef void (APIENTRYP PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr); typedef void (APIENTRYP PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr); typedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr); typedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr); typedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr); typedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const void *addr); typedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); typedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); typedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value); typedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value); typedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value); typedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value); typedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC) (GLenum value); typedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap); typedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); typedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); typedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); typedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, void **data); typedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); typedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); typedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); typedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); typedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBeginVertexShaderEXT (void); GLAPI void APIENTRY glEndVertexShaderEXT (void); GLAPI void APIENTRY glBindVertexShaderEXT (GLuint id); GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint range); GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint id); GLAPI void APIENTRY glShaderOp1EXT (GLenum op, GLuint res, GLuint arg1); GLAPI void APIENTRY glShaderOp2EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2); GLAPI void APIENTRY glShaderOp3EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); GLAPI void APIENTRY glSwizzleEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); GLAPI void APIENTRY glWriteMaskEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); GLAPI void APIENTRY glInsertComponentEXT (GLuint res, GLuint src, GLuint num); GLAPI void APIENTRY glExtractComponentEXT (GLuint res, GLuint src, GLuint num); GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); GLAPI void APIENTRY glSetInvariantEXT (GLuint id, GLenum type, const void *addr); GLAPI void APIENTRY glSetLocalConstantEXT (GLuint id, GLenum type, const void *addr); GLAPI void APIENTRY glVariantbvEXT (GLuint id, const GLbyte *addr); GLAPI void APIENTRY glVariantsvEXT (GLuint id, const GLshort *addr); GLAPI void APIENTRY glVariantivEXT (GLuint id, const GLint *addr); GLAPI void APIENTRY glVariantfvEXT (GLuint id, const GLfloat *addr); GLAPI void APIENTRY glVariantdvEXT (GLuint id, const GLdouble *addr); GLAPI void APIENTRY glVariantubvEXT (GLuint id, const GLubyte *addr); GLAPI void APIENTRY glVariantusvEXT (GLuint id, const GLushort *addr); GLAPI void APIENTRY glVariantuivEXT (GLuint id, const GLuint *addr); GLAPI void APIENTRY glVariantPointerEXT (GLuint id, GLenum type, GLuint stride, const void *addr); GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint id); GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint id); GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum light, GLenum value); GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum face, GLenum value); GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum unit, GLenum coord, GLenum value); GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum unit, GLenum value); GLAPI GLuint APIENTRY glBindParameterEXT (GLenum value); GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint id, GLenum cap); GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint id, GLenum value, GLint *data); GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); GLAPI void APIENTRY glGetVariantPointervEXT (GLuint id, GLenum value, void **data); GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint id, GLenum value, GLint *data); GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint id, GLenum value, GLint *data); GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint id, GLenum value, GLfloat *data); #endif #endif /* GL_EXT_vertex_shader */ #ifndef GL_EXT_vertex_weighting #define GL_EXT_vertex_weighting 1 #define GL_MODELVIEW0_STACK_DEPTH_EXT 0x0BA3 #define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 #define GL_MODELVIEW0_MATRIX_EXT 0x0BA6 #define GL_MODELVIEW1_MATRIX_EXT 0x8506 #define GL_VERTEX_WEIGHTING_EXT 0x8509 #define GL_MODELVIEW0_EXT 0x1700 #define GL_MODELVIEW1_EXT 0x850A #define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B #define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C #define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D #define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E #define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F #define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 typedef void (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight); typedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight); typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexWeightfEXT (GLfloat weight); GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *weight); GLAPI void APIENTRY glVertexWeightPointerEXT (GLint size, GLenum type, GLsizei stride, const void *pointer); #endif #endif /* GL_EXT_vertex_weighting */ #ifndef GL_EXT_win32_keyed_mutex #define GL_EXT_win32_keyed_mutex 1 typedef GLboolean (APIENTRYP PFNGLACQUIREKEYEDMUTEXWIN32EXTPROC) (GLuint memory, GLuint64 key, GLuint timeout); typedef GLboolean (APIENTRYP PFNGLRELEASEKEYEDMUTEXWIN32EXTPROC) (GLuint memory, GLuint64 key); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLboolean APIENTRY glAcquireKeyedMutexWin32EXT (GLuint memory, GLuint64 key, GLuint timeout); GLAPI GLboolean APIENTRY glReleaseKeyedMutexWin32EXT (GLuint memory, GLuint64 key); #endif #endif /* GL_EXT_win32_keyed_mutex */ #ifndef GL_EXT_window_rectangles #define GL_EXT_window_rectangles 1 #define GL_INCLUSIVE_EXT 0x8F10 #define GL_EXCLUSIVE_EXT 0x8F11 #define GL_WINDOW_RECTANGLE_EXT 0x8F12 #define GL_WINDOW_RECTANGLE_MODE_EXT 0x8F13 #define GL_MAX_WINDOW_RECTANGLES_EXT 0x8F14 #define GL_NUM_WINDOW_RECTANGLES_EXT 0x8F15 typedef void (APIENTRYP PFNGLWINDOWRECTANGLESEXTPROC) (GLenum mode, GLsizei count, const GLint *box); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glWindowRectanglesEXT (GLenum mode, GLsizei count, const GLint *box); #endif #endif /* GL_EXT_window_rectangles */ #ifndef GL_EXT_x11_sync_object #define GL_EXT_x11_sync_object 1 #define GL_SYNC_X11_FENCE_EXT 0x90E1 typedef GLsync (APIENTRYP PFNGLIMPORTSYNCEXTPROC) (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLsync APIENTRY glImportSyncEXT (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); #endif #endif /* GL_EXT_x11_sync_object */ #ifndef GL_GREMEDY_frame_terminator #define GL_GREMEDY_frame_terminator 1 typedef void (APIENTRYP PFNGLFRAMETERMINATORGREMEDYPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFrameTerminatorGREMEDY (void); #endif #endif /* GL_GREMEDY_frame_terminator */ #ifndef GL_GREMEDY_string_marker #define GL_GREMEDY_string_marker 1 typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const void *string); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei len, const void *string); #endif #endif /* GL_GREMEDY_string_marker */ #ifndef GL_HP_convolution_border_modes #define GL_HP_convolution_border_modes 1 #define GL_IGNORE_BORDER_HP 0x8150 #define GL_CONSTANT_BORDER_HP 0x8151 #define GL_REPLICATE_BORDER_HP 0x8153 #define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 #endif /* GL_HP_convolution_border_modes */ #ifndef GL_HP_image_transform #define GL_HP_image_transform 1 #define GL_IMAGE_SCALE_X_HP 0x8155 #define GL_IMAGE_SCALE_Y_HP 0x8156 #define GL_IMAGE_TRANSLATE_X_HP 0x8157 #define GL_IMAGE_TRANSLATE_Y_HP 0x8158 #define GL_IMAGE_ROTATE_ANGLE_HP 0x8159 #define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A #define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B #define GL_IMAGE_MAG_FILTER_HP 0x815C #define GL_IMAGE_MIN_FILTER_HP 0x815D #define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E #define GL_CUBIC_HP 0x815F #define GL_AVERAGE_HP 0x8160 #define GL_IMAGE_TRANSFORM_2D_HP 0x8161 #define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162 #define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163 typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glImageTransformParameteriHP (GLenum target, GLenum pname, GLint param); GLAPI void APIENTRY glImageTransformParameterfHP (GLenum target, GLenum pname, GLfloat param); GLAPI void APIENTRY glImageTransformParameterivHP (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum target, GLenum pname, GLfloat *params); #endif #endif /* GL_HP_image_transform */ #ifndef GL_HP_occlusion_test #define GL_HP_occlusion_test 1 #define GL_OCCLUSION_TEST_HP 0x8165 #define GL_OCCLUSION_TEST_RESULT_HP 0x8166 #endif /* GL_HP_occlusion_test */ #ifndef GL_HP_texture_lighting #define GL_HP_texture_lighting 1 #define GL_TEXTURE_LIGHTING_MODE_HP 0x8167 #define GL_TEXTURE_POST_SPECULAR_HP 0x8168 #define GL_TEXTURE_PRE_SPECULAR_HP 0x8169 #endif /* GL_HP_texture_lighting */ #ifndef GL_IBM_cull_vertex #define GL_IBM_cull_vertex 1 #define GL_CULL_VERTEX_IBM 103050 #endif /* GL_IBM_cull_vertex */ #ifndef GL_IBM_multimode_draw_arrays #define GL_IBM_multimode_draw_arrays 1 typedef void (APIENTRYP PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); typedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, GLint modestride); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMultiModeDrawArraysIBM (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, GLint modestride); #endif #endif /* GL_IBM_multimode_draw_arrays */ #ifndef GL_IBM_rasterpos_clip #define GL_IBM_rasterpos_clip 1 #define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262 #endif /* GL_IBM_rasterpos_clip */ #ifndef GL_IBM_static_data #define GL_IBM_static_data 1 #define GL_ALL_STATIC_DATA_IBM 103060 #define GL_STATIC_VERTEX_ARRAY_IBM 103061 typedef void (APIENTRYP PFNGLFLUSHSTATICDATAIBMPROC) (GLenum target); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFlushStaticDataIBM (GLenum target); #endif #endif /* GL_IBM_static_data */ #ifndef GL_IBM_texture_mirrored_repeat #define GL_IBM_texture_mirrored_repeat 1 #define GL_MIRRORED_REPEAT_IBM 0x8370 #endif /* GL_IBM_texture_mirrored_repeat */ #ifndef GL_IBM_vertex_array_lists #define GL_IBM_vertex_array_lists 1 #define GL_VERTEX_ARRAY_LIST_IBM 103070 #define GL_NORMAL_ARRAY_LIST_IBM 103071 #define GL_COLOR_ARRAY_LIST_IBM 103072 #define GL_INDEX_ARRAY_LIST_IBM 103073 #define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 #define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 #define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 #define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 #define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 #define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 #define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 #define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 #define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 #define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 #define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 #define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 typedef void (APIENTRYP PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean **pointer, GLint ptrstride); typedef void (APIENTRYP PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); typedef void (APIENTRYP PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); typedef void (APIENTRYP PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); typedef void (APIENTRYP PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); typedef void (APIENTRYP PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glColorPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint stride, const GLboolean **pointer, GLint ptrstride); GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); GLAPI void APIENTRY glIndexPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); GLAPI void APIENTRY glNormalPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); GLAPI void APIENTRY glTexCoordPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); GLAPI void APIENTRY glVertexPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); #endif #endif /* GL_IBM_vertex_array_lists */ #ifndef GL_INGR_blend_func_separate #define GL_INGR_blend_func_separate 1 typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); #endif #endif /* GL_INGR_blend_func_separate */ #ifndef GL_INGR_color_clamp #define GL_INGR_color_clamp 1 #define GL_RED_MIN_CLAMP_INGR 0x8560 #define GL_GREEN_MIN_CLAMP_INGR 0x8561 #define GL_BLUE_MIN_CLAMP_INGR 0x8562 #define GL_ALPHA_MIN_CLAMP_INGR 0x8563 #define GL_RED_MAX_CLAMP_INGR 0x8564 #define GL_GREEN_MAX_CLAMP_INGR 0x8565 #define GL_BLUE_MAX_CLAMP_INGR 0x8566 #define GL_ALPHA_MAX_CLAMP_INGR 0x8567 #endif /* GL_INGR_color_clamp */ #ifndef GL_INGR_interlace_read #define GL_INGR_interlace_read 1 #define GL_INTERLACE_READ_INGR 0x8568 #endif /* GL_INGR_interlace_read */ #ifndef GL_INTEL_blackhole_render #define GL_INTEL_blackhole_render 1 #define GL_BLACKHOLE_RENDER_INTEL 0x83FC #endif /* GL_INTEL_blackhole_render */ #ifndef GL_INTEL_conservative_rasterization #define GL_INTEL_conservative_rasterization 1 #define GL_CONSERVATIVE_RASTERIZATION_INTEL 0x83FE #endif /* GL_INTEL_conservative_rasterization */ #ifndef GL_INTEL_fragment_shader_ordering #define GL_INTEL_fragment_shader_ordering 1 #endif /* GL_INTEL_fragment_shader_ordering */ #ifndef GL_INTEL_framebuffer_CMAA #define GL_INTEL_framebuffer_CMAA 1 typedef void (APIENTRYP PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glApplyFramebufferAttachmentCMAAINTEL (void); #endif #endif /* GL_INTEL_framebuffer_CMAA */ #ifndef GL_INTEL_map_texture #define GL_INTEL_map_texture 1 #define GL_TEXTURE_MEMORY_LAYOUT_INTEL 0x83FF #define GL_LAYOUT_DEFAULT_INTEL 0 #define GL_LAYOUT_LINEAR_INTEL 1 #define GL_LAYOUT_LINEAR_CPU_CACHED_INTEL 2 typedef void (APIENTRYP PFNGLSYNCTEXTUREINTELPROC) (GLuint texture); typedef void (APIENTRYP PFNGLUNMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level); typedef void *(APIENTRYP PFNGLMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level, GLbitfield access, GLint *stride, GLenum *layout); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSyncTextureINTEL (GLuint texture); GLAPI void APIENTRY glUnmapTexture2DINTEL (GLuint texture, GLint level); GLAPI void *APIENTRY glMapTexture2DINTEL (GLuint texture, GLint level, GLbitfield access, GLint *stride, GLenum *layout); #endif #endif /* GL_INTEL_map_texture */ #ifndef GL_INTEL_parallel_arrays #define GL_INTEL_parallel_arrays 1 #define GL_PARALLEL_ARRAYS_INTEL 0x83F4 #define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 #define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 #define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 #define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 typedef void (APIENTRYP PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); typedef void (APIENTRYP PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const void **pointer); typedef void (APIENTRYP PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); typedef void (APIENTRYP PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexPointervINTEL (GLint size, GLenum type, const void **pointer); GLAPI void APIENTRY glNormalPointervINTEL (GLenum type, const void **pointer); GLAPI void APIENTRY glColorPointervINTEL (GLint size, GLenum type, const void **pointer); GLAPI void APIENTRY glTexCoordPointervINTEL (GLint size, GLenum type, const void **pointer); #endif #endif /* GL_INTEL_parallel_arrays */ #ifndef GL_INTEL_performance_query #define GL_INTEL_performance_query 1 #define GL_PERFQUERY_SINGLE_CONTEXT_INTEL 0x00000000 #define GL_PERFQUERY_GLOBAL_CONTEXT_INTEL 0x00000001 #define GL_PERFQUERY_WAIT_INTEL 0x83FB #define GL_PERFQUERY_FLUSH_INTEL 0x83FA #define GL_PERFQUERY_DONOT_FLUSH_INTEL 0x83F9 #define GL_PERFQUERY_COUNTER_EVENT_INTEL 0x94F0 #define GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL 0x94F1 #define GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL 0x94F2 #define GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL 0x94F3 #define GL_PERFQUERY_COUNTER_RAW_INTEL 0x94F4 #define GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL 0x94F5 #define GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL 0x94F8 #define GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL 0x94F9 #define GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL 0x94FA #define GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL 0x94FB #define GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL 0x94FC #define GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL 0x94FD #define GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL 0x94FE #define GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL 0x94FF #define GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL 0x9500 typedef void (APIENTRYP PFNGLBEGINPERFQUERYINTELPROC) (GLuint queryHandle); typedef void (APIENTRYP PFNGLCREATEPERFQUERYINTELPROC) (GLuint queryId, GLuint *queryHandle); typedef void (APIENTRYP PFNGLDELETEPERFQUERYINTELPROC) (GLuint queryHandle); typedef void (APIENTRYP PFNGLENDPERFQUERYINTELPROC) (GLuint queryHandle); typedef void (APIENTRYP PFNGLGETFIRSTPERFQUERYIDINTELPROC) (GLuint *queryId); typedef void (APIENTRYP PFNGLGETNEXTPERFQUERYIDINTELPROC) (GLuint queryId, GLuint *nextQueryId); typedef void (APIENTRYP PFNGLGETPERFCOUNTERINFOINTELPROC) (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); typedef void (APIENTRYP PFNGLGETPERFQUERYDATAINTELPROC) (GLuint queryHandle, GLuint flags, GLsizei dataSize, void *data, GLuint *bytesWritten); typedef void (APIENTRYP PFNGLGETPERFQUERYIDBYNAMEINTELPROC) (GLchar *queryName, GLuint *queryId); typedef void (APIENTRYP PFNGLGETPERFQUERYINFOINTELPROC) (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBeginPerfQueryINTEL (GLuint queryHandle); GLAPI void APIENTRY glCreatePerfQueryINTEL (GLuint queryId, GLuint *queryHandle); GLAPI void APIENTRY glDeletePerfQueryINTEL (GLuint queryHandle); GLAPI void APIENTRY glEndPerfQueryINTEL (GLuint queryHandle); GLAPI void APIENTRY glGetFirstPerfQueryIdINTEL (GLuint *queryId); GLAPI void APIENTRY glGetNextPerfQueryIdINTEL (GLuint queryId, GLuint *nextQueryId); GLAPI void APIENTRY glGetPerfCounterInfoINTEL (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); GLAPI void APIENTRY glGetPerfQueryDataINTEL (GLuint queryHandle, GLuint flags, GLsizei dataSize, void *data, GLuint *bytesWritten); GLAPI void APIENTRY glGetPerfQueryIdByNameINTEL (GLchar *queryName, GLuint *queryId); GLAPI void APIENTRY glGetPerfQueryInfoINTEL (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); #endif #endif /* GL_INTEL_performance_query */ #ifndef GL_MESAX_texture_stack #define GL_MESAX_texture_stack 1 #define GL_TEXTURE_1D_STACK_MESAX 0x8759 #define GL_TEXTURE_2D_STACK_MESAX 0x875A #define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B #define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C #define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D #define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E #endif /* GL_MESAX_texture_stack */ #ifndef GL_MESA_framebuffer_flip_x #define GL_MESA_framebuffer_flip_x 1 #define GL_FRAMEBUFFER_FLIP_X_MESA 0x8BBC #endif /* GL_MESA_framebuffer_flip_x */ #ifndef GL_MESA_framebuffer_flip_y #define GL_MESA_framebuffer_flip_y 1 #define GL_FRAMEBUFFER_FLIP_Y_MESA 0x8BBB typedef void (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIMESAPROC) (GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVMESAPROC) (GLenum target, GLenum pname, GLint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFramebufferParameteriMESA (GLenum target, GLenum pname, GLint param); GLAPI void APIENTRY glGetFramebufferParameterivMESA (GLenum target, GLenum pname, GLint *params); #endif #endif /* GL_MESA_framebuffer_flip_y */ #ifndef GL_MESA_framebuffer_swap_xy #define GL_MESA_framebuffer_swap_xy 1 #define GL_FRAMEBUFFER_SWAP_XY_MESA 0x8BBD #endif /* GL_MESA_framebuffer_swap_xy */ #ifndef GL_MESA_pack_invert #define GL_MESA_pack_invert 1 #define GL_PACK_INVERT_MESA 0x8758 #endif /* GL_MESA_pack_invert */ #ifndef GL_MESA_program_binary_formats #define GL_MESA_program_binary_formats 1 #define GL_PROGRAM_BINARY_FORMAT_MESA 0x875F #endif /* GL_MESA_program_binary_formats */ #ifndef GL_MESA_resize_buffers #define GL_MESA_resize_buffers 1 typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glResizeBuffersMESA (void); #endif #endif /* GL_MESA_resize_buffers */ #ifndef GL_MESA_shader_integer_functions #define GL_MESA_shader_integer_functions 1 #endif /* GL_MESA_shader_integer_functions */ #ifndef GL_MESA_tile_raster_order #define GL_MESA_tile_raster_order 1 #define GL_TILE_RASTER_ORDER_FIXED_MESA 0x8BB8 #define GL_TILE_RASTER_ORDER_INCREASING_X_MESA 0x8BB9 #define GL_TILE_RASTER_ORDER_INCREASING_Y_MESA 0x8BBA #endif /* GL_MESA_tile_raster_order */ #ifndef GL_MESA_window_pos #define GL_MESA_window_pos 1 typedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y); typedef void (APIENTRYP PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y); typedef void (APIENTRYP PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v); typedef void (APIENTRYP PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y); typedef void (APIENTRYP PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v); typedef void (APIENTRYP PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z); typedef void (APIENTRYP PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v); typedef void (APIENTRYP PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z); typedef void (APIENTRYP PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v); typedef void (APIENTRYP PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w); typedef void (APIENTRYP PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v); typedef void (APIENTRYP PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w); typedef void (APIENTRYP PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glWindowPos2dMESA (GLdouble x, GLdouble y); GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *v); GLAPI void APIENTRY glWindowPos2fMESA (GLfloat x, GLfloat y); GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *v); GLAPI void APIENTRY glWindowPos2iMESA (GLint x, GLint y); GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *v); GLAPI void APIENTRY glWindowPos2sMESA (GLshort x, GLshort y); GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *v); GLAPI void APIENTRY glWindowPos3dMESA (GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *v); GLAPI void APIENTRY glWindowPos3fMESA (GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *v); GLAPI void APIENTRY glWindowPos3iMESA (GLint x, GLint y, GLint z); GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *v); GLAPI void APIENTRY glWindowPos3sMESA (GLshort x, GLshort y, GLshort z); GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *v); GLAPI void APIENTRY glWindowPos4dMESA (GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *v); GLAPI void APIENTRY glWindowPos4fMESA (GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *v); GLAPI void APIENTRY glWindowPos4iMESA (GLint x, GLint y, GLint z, GLint w); GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *v); GLAPI void APIENTRY glWindowPos4sMESA (GLshort x, GLshort y, GLshort z, GLshort w); GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *v); #endif #endif /* GL_MESA_window_pos */ #ifndef GL_MESA_ycbcr_texture #define GL_MESA_ycbcr_texture 1 #define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA #define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB #define GL_YCBCR_MESA 0x8757 #endif /* GL_MESA_ycbcr_texture */ #ifndef GL_NVX_blend_equation_advanced_multi_draw_buffers #define GL_NVX_blend_equation_advanced_multi_draw_buffers 1 #endif /* GL_NVX_blend_equation_advanced_multi_draw_buffers */ #ifndef GL_NVX_conditional_render #define GL_NVX_conditional_render 1 typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVXPROC) (GLuint id); typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVXPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBeginConditionalRenderNVX (GLuint id); GLAPI void APIENTRY glEndConditionalRenderNVX (void); #endif #endif /* GL_NVX_conditional_render */ #ifndef GL_NVX_gpu_memory_info #define GL_NVX_gpu_memory_info 1 #define GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047 #define GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048 #define GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049 #define GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A #define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B #endif /* GL_NVX_gpu_memory_info */ #ifndef GL_NVX_gpu_multicast2 #define GL_NVX_gpu_multicast2 1 #define GL_UPLOAD_GPU_MASK_NVX 0x954A typedef void (APIENTRYP PFNGLUPLOADGPUMASKNVXPROC) (GLbitfield mask); typedef void (APIENTRYP PFNGLMULTICASTVIEWPORTARRAYVNVXPROC) (GLuint gpu, GLuint first, GLsizei count, const GLfloat *v); typedef void (APIENTRYP PFNGLMULTICASTVIEWPORTPOSITIONWSCALENVXPROC) (GLuint gpu, GLuint index, GLfloat xcoeff, GLfloat ycoeff); typedef void (APIENTRYP PFNGLMULTICASTSCISSORARRAYVNVXPROC) (GLuint gpu, GLuint first, GLsizei count, const GLint *v); typedef GLuint (APIENTRYP PFNGLASYNCCOPYBUFFERSUBDATANVXPROC) (GLsizei waitSemaphoreCount, const GLuint *waitSemaphoreArray, const GLuint64 *fenceValueArray, GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size, GLsizei signalSemaphoreCount, const GLuint *signalSemaphoreArray, const GLuint64 *signalValueArray); typedef GLuint (APIENTRYP PFNGLASYNCCOPYIMAGESUBDATANVXPROC) (GLsizei waitSemaphoreCount, const GLuint *waitSemaphoreArray, const GLuint64 *waitValueArray, GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth, GLsizei signalSemaphoreCount, const GLuint *signalSemaphoreArray, const GLuint64 *signalValueArray); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glUploadGpuMaskNVX (GLbitfield mask); GLAPI void APIENTRY glMulticastViewportArrayvNVX (GLuint gpu, GLuint first, GLsizei count, const GLfloat *v); GLAPI void APIENTRY glMulticastViewportPositionWScaleNVX (GLuint gpu, GLuint index, GLfloat xcoeff, GLfloat ycoeff); GLAPI void APIENTRY glMulticastScissorArrayvNVX (GLuint gpu, GLuint first, GLsizei count, const GLint *v); GLAPI GLuint APIENTRY glAsyncCopyBufferSubDataNVX (GLsizei waitSemaphoreCount, const GLuint *waitSemaphoreArray, const GLuint64 *fenceValueArray, GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size, GLsizei signalSemaphoreCount, const GLuint *signalSemaphoreArray, const GLuint64 *signalValueArray); GLAPI GLuint APIENTRY glAsyncCopyImageSubDataNVX (GLsizei waitSemaphoreCount, const GLuint *waitSemaphoreArray, const GLuint64 *waitValueArray, GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth, GLsizei signalSemaphoreCount, const GLuint *signalSemaphoreArray, const GLuint64 *signalValueArray); #endif #endif /* GL_NVX_gpu_multicast2 */ #ifndef GL_NVX_linked_gpu_multicast #define GL_NVX_linked_gpu_multicast 1 #define GL_LGPU_SEPARATE_STORAGE_BIT_NVX 0x0800 #define GL_MAX_LGPU_GPUS_NVX 0x92BA typedef void (APIENTRYP PFNGLLGPUNAMEDBUFFERSUBDATANVXPROC) (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); typedef void (APIENTRYP PFNGLLGPUCOPYIMAGESUBDATANVXPROC) (GLuint sourceGpu, GLbitfield destinationGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srxY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); typedef void (APIENTRYP PFNGLLGPUINTERLOCKNVXPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glLGPUNamedBufferSubDataNVX (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); GLAPI void APIENTRY glLGPUCopyImageSubDataNVX (GLuint sourceGpu, GLbitfield destinationGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srxY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); GLAPI void APIENTRY glLGPUInterlockNVX (void); #endif #endif /* GL_NVX_linked_gpu_multicast */ #ifndef GL_NVX_progress_fence #define GL_NVX_progress_fence 1 typedef GLuint (APIENTRYP PFNGLCREATEPROGRESSFENCENVXPROC) (void); typedef void (APIENTRYP PFNGLSIGNALSEMAPHOREUI64NVXPROC) (GLuint signalGpu, GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray); typedef void (APIENTRYP PFNGLWAITSEMAPHOREUI64NVXPROC) (GLuint waitGpu, GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray); typedef void (APIENTRYP PFNGLCLIENTWAITSEMAPHOREUI64NVXPROC) (GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLuint APIENTRY glCreateProgressFenceNVX (void); GLAPI void APIENTRY glSignalSemaphoreui64NVX (GLuint signalGpu, GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray); GLAPI void APIENTRY glWaitSemaphoreui64NVX (GLuint waitGpu, GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray); GLAPI void APIENTRY glClientWaitSemaphoreui64NVX (GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray); #endif #endif /* GL_NVX_progress_fence */ #ifndef GL_NV_alpha_to_coverage_dither_control #define GL_NV_alpha_to_coverage_dither_control 1 #define GL_ALPHA_TO_COVERAGE_DITHER_DEFAULT_NV 0x934D #define GL_ALPHA_TO_COVERAGE_DITHER_ENABLE_NV 0x934E #define GL_ALPHA_TO_COVERAGE_DITHER_DISABLE_NV 0x934F #define GL_ALPHA_TO_COVERAGE_DITHER_MODE_NV 0x92BF typedef void (APIENTRYP PFNGLALPHATOCOVERAGEDITHERCONTROLNVPROC) (GLenum mode); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glAlphaToCoverageDitherControlNV (GLenum mode); #endif #endif /* GL_NV_alpha_to_coverage_dither_control */ #ifndef GL_NV_bindless_multi_draw_indirect #define GL_NV_bindless_multi_draw_indirect 1 typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC) (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMultiDrawArraysIndirectBindlessNV (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); GLAPI void APIENTRY glMultiDrawElementsIndirectBindlessNV (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); #endif #endif /* GL_NV_bindless_multi_draw_indirect */ #ifndef GL_NV_bindless_multi_draw_indirect_count #define GL_NV_bindless_multi_draw_indirect_count 1 typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC) (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMultiDrawArraysIndirectBindlessCountNV (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); GLAPI void APIENTRY glMultiDrawElementsIndirectBindlessCountNV (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); #endif #endif /* GL_NV_bindless_multi_draw_indirect_count */ #ifndef GL_NV_bindless_texture #define GL_NV_bindless_texture 1 typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLENVPROC) (GLuint texture); typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLENVPROC) (GLuint texture, GLuint sampler); typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC) (GLuint64 handle); typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLENVPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle, GLenum access); typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC) (GLuint64 handle); typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64NVPROC) (GLint location, GLuint64 value); typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VNVPROC) (GLint location, GLsizei count, const GLuint64 *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC) (GLuint program, GLint location, GLuint64 value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLuint64 APIENTRY glGetTextureHandleNV (GLuint texture); GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleNV (GLuint texture, GLuint sampler); GLAPI void APIENTRY glMakeTextureHandleResidentNV (GLuint64 handle); GLAPI void APIENTRY glMakeTextureHandleNonResidentNV (GLuint64 handle); GLAPI GLuint64 APIENTRY glGetImageHandleNV (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); GLAPI void APIENTRY glMakeImageHandleResidentNV (GLuint64 handle, GLenum access); GLAPI void APIENTRY glMakeImageHandleNonResidentNV (GLuint64 handle); GLAPI void APIENTRY glUniformHandleui64NV (GLint location, GLuint64 value); GLAPI void APIENTRY glUniformHandleui64vNV (GLint location, GLsizei count, const GLuint64 *value); GLAPI void APIENTRY glProgramUniformHandleui64NV (GLuint program, GLint location, GLuint64 value); GLAPI void APIENTRY glProgramUniformHandleui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64 *values); GLAPI GLboolean APIENTRY glIsTextureHandleResidentNV (GLuint64 handle); GLAPI GLboolean APIENTRY glIsImageHandleResidentNV (GLuint64 handle); #endif #endif /* GL_NV_bindless_texture */ #ifndef GL_NV_blend_equation_advanced #define GL_NV_blend_equation_advanced 1 #define GL_BLEND_OVERLAP_NV 0x9281 #define GL_BLEND_PREMULTIPLIED_SRC_NV 0x9280 #define GL_BLUE_NV 0x1905 #define GL_COLORBURN_NV 0x929A #define GL_COLORDODGE_NV 0x9299 #define GL_CONJOINT_NV 0x9284 #define GL_CONTRAST_NV 0x92A1 #define GL_DARKEN_NV 0x9297 #define GL_DIFFERENCE_NV 0x929E #define GL_DISJOINT_NV 0x9283 #define GL_DST_ATOP_NV 0x928F #define GL_DST_IN_NV 0x928B #define GL_DST_NV 0x9287 #define GL_DST_OUT_NV 0x928D #define GL_DST_OVER_NV 0x9289 #define GL_EXCLUSION_NV 0x92A0 #define GL_GREEN_NV 0x1904 #define GL_HARDLIGHT_NV 0x929B #define GL_HARDMIX_NV 0x92A9 #define GL_HSL_COLOR_NV 0x92AF #define GL_HSL_HUE_NV 0x92AD #define GL_HSL_LUMINOSITY_NV 0x92B0 #define GL_HSL_SATURATION_NV 0x92AE #define GL_INVERT_OVG_NV 0x92B4 #define GL_INVERT_RGB_NV 0x92A3 #define GL_LIGHTEN_NV 0x9298 #define GL_LINEARBURN_NV 0x92A5 #define GL_LINEARDODGE_NV 0x92A4 #define GL_LINEARLIGHT_NV 0x92A7 #define GL_MINUS_CLAMPED_NV 0x92B3 #define GL_MINUS_NV 0x929F #define GL_MULTIPLY_NV 0x9294 #define GL_OVERLAY_NV 0x9296 #define GL_PINLIGHT_NV 0x92A8 #define GL_PLUS_CLAMPED_ALPHA_NV 0x92B2 #define GL_PLUS_CLAMPED_NV 0x92B1 #define GL_PLUS_DARKER_NV 0x9292 #define GL_PLUS_NV 0x9291 #define GL_RED_NV 0x1903 #define GL_SCREEN_NV 0x9295 #define GL_SOFTLIGHT_NV 0x929C #define GL_SRC_ATOP_NV 0x928E #define GL_SRC_IN_NV 0x928A #define GL_SRC_NV 0x9286 #define GL_SRC_OUT_NV 0x928C #define GL_SRC_OVER_NV 0x9288 #define GL_UNCORRELATED_NV 0x9282 #define GL_VIVIDLIGHT_NV 0x92A6 #define GL_XOR_NV 0x1506 typedef void (APIENTRYP PFNGLBLENDPARAMETERINVPROC) (GLenum pname, GLint value); typedef void (APIENTRYP PFNGLBLENDBARRIERNVPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendParameteriNV (GLenum pname, GLint value); GLAPI void APIENTRY glBlendBarrierNV (void); #endif #endif /* GL_NV_blend_equation_advanced */ #ifndef GL_NV_blend_equation_advanced_coherent #define GL_NV_blend_equation_advanced_coherent 1 #define GL_BLEND_ADVANCED_COHERENT_NV 0x9285 #endif /* GL_NV_blend_equation_advanced_coherent */ #ifndef GL_NV_blend_minmax_factor #define GL_NV_blend_minmax_factor 1 #endif /* GL_NV_blend_minmax_factor */ #ifndef GL_NV_blend_square #define GL_NV_blend_square 1 #endif /* GL_NV_blend_square */ #ifndef GL_NV_clip_space_w_scaling #define GL_NV_clip_space_w_scaling 1 #define GL_VIEWPORT_POSITION_W_SCALE_NV 0x937C #define GL_VIEWPORT_POSITION_W_SCALE_X_COEFF_NV 0x937D #define GL_VIEWPORT_POSITION_W_SCALE_Y_COEFF_NV 0x937E typedef void (APIENTRYP PFNGLVIEWPORTPOSITIONWSCALENVPROC) (GLuint index, GLfloat xcoeff, GLfloat ycoeff); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glViewportPositionWScaleNV (GLuint index, GLfloat xcoeff, GLfloat ycoeff); #endif #endif /* GL_NV_clip_space_w_scaling */ #ifndef GL_NV_command_list #define GL_NV_command_list 1 #define GL_TERMINATE_SEQUENCE_COMMAND_NV 0x0000 #define GL_NOP_COMMAND_NV 0x0001 #define GL_DRAW_ELEMENTS_COMMAND_NV 0x0002 #define GL_DRAW_ARRAYS_COMMAND_NV 0x0003 #define GL_DRAW_ELEMENTS_STRIP_COMMAND_NV 0x0004 #define GL_DRAW_ARRAYS_STRIP_COMMAND_NV 0x0005 #define GL_DRAW_ELEMENTS_INSTANCED_COMMAND_NV 0x0006 #define GL_DRAW_ARRAYS_INSTANCED_COMMAND_NV 0x0007 #define GL_ELEMENT_ADDRESS_COMMAND_NV 0x0008 #define GL_ATTRIBUTE_ADDRESS_COMMAND_NV 0x0009 #define GL_UNIFORM_ADDRESS_COMMAND_NV 0x000A #define GL_BLEND_COLOR_COMMAND_NV 0x000B #define GL_STENCIL_REF_COMMAND_NV 0x000C #define GL_LINE_WIDTH_COMMAND_NV 0x000D #define GL_POLYGON_OFFSET_COMMAND_NV 0x000E #define GL_ALPHA_REF_COMMAND_NV 0x000F #define GL_VIEWPORT_COMMAND_NV 0x0010 #define GL_SCISSOR_COMMAND_NV 0x0011 #define GL_FRONT_FACE_COMMAND_NV 0x0012 typedef void (APIENTRYP PFNGLCREATESTATESNVPROC) (GLsizei n, GLuint *states); typedef void (APIENTRYP PFNGLDELETESTATESNVPROC) (GLsizei n, const GLuint *states); typedef GLboolean (APIENTRYP PFNGLISSTATENVPROC) (GLuint state); typedef void (APIENTRYP PFNGLSTATECAPTURENVPROC) (GLuint state, GLenum mode); typedef GLuint (APIENTRYP PFNGLGETCOMMANDHEADERNVPROC) (GLenum tokenID, GLuint size); typedef GLushort (APIENTRYP PFNGLGETSTAGEINDEXNVPROC) (GLenum shadertype); typedef void (APIENTRYP PFNGLDRAWCOMMANDSNVPROC) (GLenum primitiveMode, GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, GLuint count); typedef void (APIENTRYP PFNGLDRAWCOMMANDSADDRESSNVPROC) (GLenum primitiveMode, const GLuint64 *indirects, const GLsizei *sizes, GLuint count); typedef void (APIENTRYP PFNGLDRAWCOMMANDSSTATESNVPROC) (GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); typedef void (APIENTRYP PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC) (const GLuint64 *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); typedef void (APIENTRYP PFNGLCREATECOMMANDLISTSNVPROC) (GLsizei n, GLuint *lists); typedef void (APIENTRYP PFNGLDELETECOMMANDLISTSNVPROC) (GLsizei n, const GLuint *lists); typedef GLboolean (APIENTRYP PFNGLISCOMMANDLISTNVPROC) (GLuint list); typedef void (APIENTRYP PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC) (GLuint list, GLuint segment, const void **indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); typedef void (APIENTRYP PFNGLCOMMANDLISTSEGMENTSNVPROC) (GLuint list, GLuint segments); typedef void (APIENTRYP PFNGLCOMPILECOMMANDLISTNVPROC) (GLuint list); typedef void (APIENTRYP PFNGLCALLCOMMANDLISTNVPROC) (GLuint list); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCreateStatesNV (GLsizei n, GLuint *states); GLAPI void APIENTRY glDeleteStatesNV (GLsizei n, const GLuint *states); GLAPI GLboolean APIENTRY glIsStateNV (GLuint state); GLAPI void APIENTRY glStateCaptureNV (GLuint state, GLenum mode); GLAPI GLuint APIENTRY glGetCommandHeaderNV (GLenum tokenID, GLuint size); GLAPI GLushort APIENTRY glGetStageIndexNV (GLenum shadertype); GLAPI void APIENTRY glDrawCommandsNV (GLenum primitiveMode, GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, GLuint count); GLAPI void APIENTRY glDrawCommandsAddressNV (GLenum primitiveMode, const GLuint64 *indirects, const GLsizei *sizes, GLuint count); GLAPI void APIENTRY glDrawCommandsStatesNV (GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); GLAPI void APIENTRY glDrawCommandsStatesAddressNV (const GLuint64 *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); GLAPI void APIENTRY glCreateCommandListsNV (GLsizei n, GLuint *lists); GLAPI void APIENTRY glDeleteCommandListsNV (GLsizei n, const GLuint *lists); GLAPI GLboolean APIENTRY glIsCommandListNV (GLuint list); GLAPI void APIENTRY glListDrawCommandsStatesClientNV (GLuint list, GLuint segment, const void **indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); GLAPI void APIENTRY glCommandListSegmentsNV (GLuint list, GLuint segments); GLAPI void APIENTRY glCompileCommandListNV (GLuint list); GLAPI void APIENTRY glCallCommandListNV (GLuint list); #endif #endif /* GL_NV_command_list */ #ifndef GL_NV_compute_program5 #define GL_NV_compute_program5 1 #define GL_COMPUTE_PROGRAM_NV 0x90FB #define GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV 0x90FC #endif /* GL_NV_compute_program5 */ #ifndef GL_NV_compute_shader_derivatives #define GL_NV_compute_shader_derivatives 1 #endif /* GL_NV_compute_shader_derivatives */ #ifndef GL_NV_conditional_render #define GL_NV_conditional_render 1 #define GL_QUERY_WAIT_NV 0x8E13 #define GL_QUERY_NO_WAIT_NV 0x8E14 #define GL_QUERY_BY_REGION_WAIT_NV 0x8E15 #define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode); typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBeginConditionalRenderNV (GLuint id, GLenum mode); GLAPI void APIENTRY glEndConditionalRenderNV (void); #endif #endif /* GL_NV_conditional_render */ #ifndef GL_NV_conservative_raster #define GL_NV_conservative_raster 1 #define GL_CONSERVATIVE_RASTERIZATION_NV 0x9346 #define GL_SUBPIXEL_PRECISION_BIAS_X_BITS_NV 0x9347 #define GL_SUBPIXEL_PRECISION_BIAS_Y_BITS_NV 0x9348 #define GL_MAX_SUBPIXEL_PRECISION_BIAS_BITS_NV 0x9349 typedef void (APIENTRYP PFNGLSUBPIXELPRECISIONBIASNVPROC) (GLuint xbits, GLuint ybits); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSubpixelPrecisionBiasNV (GLuint xbits, GLuint ybits); #endif #endif /* GL_NV_conservative_raster */ #ifndef GL_NV_conservative_raster_dilate #define GL_NV_conservative_raster_dilate 1 #define GL_CONSERVATIVE_RASTER_DILATE_NV 0x9379 #define GL_CONSERVATIVE_RASTER_DILATE_RANGE_NV 0x937A #define GL_CONSERVATIVE_RASTER_DILATE_GRANULARITY_NV 0x937B typedef void (APIENTRYP PFNGLCONSERVATIVERASTERPARAMETERFNVPROC) (GLenum pname, GLfloat value); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glConservativeRasterParameterfNV (GLenum pname, GLfloat value); #endif #endif /* GL_NV_conservative_raster_dilate */ #ifndef GL_NV_conservative_raster_pre_snap #define GL_NV_conservative_raster_pre_snap 1 #define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_NV 0x9550 #endif /* GL_NV_conservative_raster_pre_snap */ #ifndef GL_NV_conservative_raster_pre_snap_triangles #define GL_NV_conservative_raster_pre_snap_triangles 1 #define GL_CONSERVATIVE_RASTER_MODE_NV 0x954D #define GL_CONSERVATIVE_RASTER_MODE_POST_SNAP_NV 0x954E #define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_TRIANGLES_NV 0x954F typedef void (APIENTRYP PFNGLCONSERVATIVERASTERPARAMETERINVPROC) (GLenum pname, GLint param); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glConservativeRasterParameteriNV (GLenum pname, GLint param); #endif #endif /* GL_NV_conservative_raster_pre_snap_triangles */ #ifndef GL_NV_conservative_raster_underestimation #define GL_NV_conservative_raster_underestimation 1 #endif /* GL_NV_conservative_raster_underestimation */ #ifndef GL_NV_copy_depth_to_color #define GL_NV_copy_depth_to_color 1 #define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E #define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F #endif /* GL_NV_copy_depth_to_color */ #ifndef GL_NV_copy_image #define GL_NV_copy_image 1 typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATANVPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCopyImageSubDataNV (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); #endif #endif /* GL_NV_copy_image */ #ifndef GL_NV_deep_texture3D #define GL_NV_deep_texture3D 1 #define GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV 0x90D0 #define GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV 0x90D1 #endif /* GL_NV_deep_texture3D */ #ifndef GL_NV_depth_buffer_float #define GL_NV_depth_buffer_float 1 #define GL_DEPTH_COMPONENT32F_NV 0x8DAB #define GL_DEPTH32F_STENCIL8_NV 0x8DAC #define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD #define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF typedef void (APIENTRYP PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar); typedef void (APIENTRYP PFNGLCLEARDEPTHDNVPROC) (GLdouble depth); typedef void (APIENTRYP PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDepthRangedNV (GLdouble zNear, GLdouble zFar); GLAPI void APIENTRY glClearDepthdNV (GLdouble depth); GLAPI void APIENTRY glDepthBoundsdNV (GLdouble zmin, GLdouble zmax); #endif #endif /* GL_NV_depth_buffer_float */ #ifndef GL_NV_depth_clamp #define GL_NV_depth_clamp 1 #define GL_DEPTH_CLAMP_NV 0x864F #endif /* GL_NV_depth_clamp */ #ifndef GL_NV_draw_texture #define GL_NV_draw_texture 1 typedef void (APIENTRYP PFNGLDRAWTEXTURENVPROC) (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawTextureNV (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); #endif #endif /* GL_NV_draw_texture */ #ifndef GL_NV_draw_vulkan_image #define GL_NV_draw_vulkan_image 1 typedef void (APIENTRY *GLVULKANPROCNV)(void); typedef void (APIENTRYP PFNGLDRAWVKIMAGENVPROC) (GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); typedef GLVULKANPROCNV (APIENTRYP PFNGLGETVKPROCADDRNVPROC) (const GLchar *name); typedef void (APIENTRYP PFNGLWAITVKSEMAPHORENVPROC) (GLuint64 vkSemaphore); typedef void (APIENTRYP PFNGLSIGNALVKSEMAPHORENVPROC) (GLuint64 vkSemaphore); typedef void (APIENTRYP PFNGLSIGNALVKFENCENVPROC) (GLuint64 vkFence); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawVkImageNV (GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); GLAPI GLVULKANPROCNV APIENTRY glGetVkProcAddrNV (const GLchar *name); GLAPI void APIENTRY glWaitVkSemaphoreNV (GLuint64 vkSemaphore); GLAPI void APIENTRY glSignalVkSemaphoreNV (GLuint64 vkSemaphore); GLAPI void APIENTRY glSignalVkFenceNV (GLuint64 vkFence); #endif #endif /* GL_NV_draw_vulkan_image */ #ifndef GL_NV_evaluators #define GL_NV_evaluators 1 #define GL_EVAL_2D_NV 0x86C0 #define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 #define GL_MAP_TESSELLATION_NV 0x86C2 #define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 #define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 #define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 #define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 #define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 #define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 #define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 #define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA #define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB #define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC #define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD #define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE #define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF #define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 #define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 #define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 #define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 #define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 #define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 #define GL_MAX_MAP_TESSELLATION_NV 0x86D6 #define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 typedef void (APIENTRYP PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points); typedef void (APIENTRYP PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void *points); typedef void (APIENTRYP PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points); GLAPI void APIENTRY glMapParameterivNV (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glMapParameterfvNV (GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glGetMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void *points); GLAPI void APIENTRY glGetMapParameterivNV (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetMapParameterfvNV (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum target, GLuint index, GLenum pname, GLint *params); GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); GLAPI void APIENTRY glEvalMapsNV (GLenum target, GLenum mode); #endif #endif /* GL_NV_evaluators */ #ifndef GL_NV_explicit_multisample #define GL_NV_explicit_multisample 1 #define GL_SAMPLE_POSITION_NV 0x8E50 #define GL_SAMPLE_MASK_NV 0x8E51 #define GL_SAMPLE_MASK_VALUE_NV 0x8E52 #define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53 #define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54 #define GL_TEXTURE_RENDERBUFFER_NV 0x8E55 #define GL_SAMPLER_RENDERBUFFER_NV 0x8E56 #define GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57 #define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58 #define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59 typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVNVPROC) (GLenum pname, GLuint index, GLfloat *val); typedef void (APIENTRYP PFNGLSAMPLEMASKINDEXEDNVPROC) (GLuint index, GLbitfield mask); typedef void (APIENTRYP PFNGLTEXRENDERBUFFERNVPROC) (GLenum target, GLuint renderbuffer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetMultisamplefvNV (GLenum pname, GLuint index, GLfloat *val); GLAPI void APIENTRY glSampleMaskIndexedNV (GLuint index, GLbitfield mask); GLAPI void APIENTRY glTexRenderbufferNV (GLenum target, GLuint renderbuffer); #endif #endif /* GL_NV_explicit_multisample */ #ifndef GL_NV_fence #define GL_NV_fence 1 #define GL_ALL_COMPLETED_NV 0x84F2 #define GL_FENCE_STATUS_NV 0x84F3 #define GL_FENCE_CONDITION_NV 0x84F4 typedef void (APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); typedef void (APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); typedef GLboolean (APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); typedef GLboolean (APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); typedef void (APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); typedef void (APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences); GLAPI void APIENTRY glGenFencesNV (GLsizei n, GLuint *fences); GLAPI GLboolean APIENTRY glIsFenceNV (GLuint fence); GLAPI GLboolean APIENTRY glTestFenceNV (GLuint fence); GLAPI void APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params); GLAPI void APIENTRY glFinishFenceNV (GLuint fence); GLAPI void APIENTRY glSetFenceNV (GLuint fence, GLenum condition); #endif #endif /* GL_NV_fence */ #ifndef GL_NV_fill_rectangle #define GL_NV_fill_rectangle 1 #define GL_FILL_RECTANGLE_NV 0x933C #endif /* GL_NV_fill_rectangle */ #ifndef GL_NV_float_buffer #define GL_NV_float_buffer 1 #define GL_FLOAT_R_NV 0x8880 #define GL_FLOAT_RG_NV 0x8881 #define GL_FLOAT_RGB_NV 0x8882 #define GL_FLOAT_RGBA_NV 0x8883 #define GL_FLOAT_R16_NV 0x8884 #define GL_FLOAT_R32_NV 0x8885 #define GL_FLOAT_RG16_NV 0x8886 #define GL_FLOAT_RG32_NV 0x8887 #define GL_FLOAT_RGB16_NV 0x8888 #define GL_FLOAT_RGB32_NV 0x8889 #define GL_FLOAT_RGBA16_NV 0x888A #define GL_FLOAT_RGBA32_NV 0x888B #define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C #define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D #define GL_FLOAT_RGBA_MODE_NV 0x888E #endif /* GL_NV_float_buffer */ #ifndef GL_NV_fog_distance #define GL_NV_fog_distance 1 #define GL_FOG_DISTANCE_MODE_NV 0x855A #define GL_EYE_RADIAL_NV 0x855B #define GL_EYE_PLANE_ABSOLUTE_NV 0x855C #endif /* GL_NV_fog_distance */ #ifndef GL_NV_fragment_coverage_to_color #define GL_NV_fragment_coverage_to_color 1 #define GL_FRAGMENT_COVERAGE_TO_COLOR_NV 0x92DD #define GL_FRAGMENT_COVERAGE_COLOR_NV 0x92DE typedef void (APIENTRYP PFNGLFRAGMENTCOVERAGECOLORNVPROC) (GLuint color); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFragmentCoverageColorNV (GLuint color); #endif #endif /* GL_NV_fragment_coverage_to_color */ #ifndef GL_NV_fragment_program #define GL_NV_fragment_program 1 #define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 #define GL_FRAGMENT_PROGRAM_NV 0x8870 #define GL_MAX_TEXTURE_COORDS_NV 0x8871 #define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 #define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 #define GL_PROGRAM_ERROR_STRING_NV 0x8874 typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glProgramNamedParameter4fNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glProgramNamedParameter4fvNV (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); GLAPI void APIENTRY glProgramNamedParameter4dNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glProgramNamedParameter4dvNV (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); GLAPI void APIENTRY glGetProgramNamedParameterfvNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); GLAPI void APIENTRY glGetProgramNamedParameterdvNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); #endif #endif /* GL_NV_fragment_program */ #ifndef GL_NV_fragment_program2 #define GL_NV_fragment_program2 1 #define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 #define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 #define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 #define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 #define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 #endif /* GL_NV_fragment_program2 */ #ifndef GL_NV_fragment_program4 #define GL_NV_fragment_program4 1 #endif /* GL_NV_fragment_program4 */ #ifndef GL_NV_fragment_program_option #define GL_NV_fragment_program_option 1 #endif /* GL_NV_fragment_program_option */ #ifndef GL_NV_fragment_shader_barycentric #define GL_NV_fragment_shader_barycentric 1 #endif /* GL_NV_fragment_shader_barycentric */ #ifndef GL_NV_fragment_shader_interlock #define GL_NV_fragment_shader_interlock 1 #endif /* GL_NV_fragment_shader_interlock */ #ifndef GL_NV_framebuffer_mixed_samples #define GL_NV_framebuffer_mixed_samples 1 #define GL_COVERAGE_MODULATION_TABLE_NV 0x9331 #define GL_COLOR_SAMPLES_NV 0x8E20 #define GL_DEPTH_SAMPLES_NV 0x932D #define GL_STENCIL_SAMPLES_NV 0x932E #define GL_MIXED_DEPTH_SAMPLES_SUPPORTED_NV 0x932F #define GL_MIXED_STENCIL_SAMPLES_SUPPORTED_NV 0x9330 #define GL_COVERAGE_MODULATION_NV 0x9332 #define GL_COVERAGE_MODULATION_TABLE_SIZE_NV 0x9333 typedef void (APIENTRYP PFNGLCOVERAGEMODULATIONTABLENVPROC) (GLsizei n, const GLfloat *v); typedef void (APIENTRYP PFNGLGETCOVERAGEMODULATIONTABLENVPROC) (GLsizei bufSize, GLfloat *v); typedef void (APIENTRYP PFNGLCOVERAGEMODULATIONNVPROC) (GLenum components); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCoverageModulationTableNV (GLsizei n, const GLfloat *v); GLAPI void APIENTRY glGetCoverageModulationTableNV (GLsizei bufSize, GLfloat *v); GLAPI void APIENTRY glCoverageModulationNV (GLenum components); #endif #endif /* GL_NV_framebuffer_mixed_samples */ #ifndef GL_NV_framebuffer_multisample_coverage #define GL_NV_framebuffer_multisample_coverage 1 #define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB #define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 #define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 #define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glRenderbufferStorageMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); #endif #endif /* GL_NV_framebuffer_multisample_coverage */ #ifndef GL_NV_geometry_program4 #define GL_NV_geometry_program4 1 #define GL_GEOMETRY_PROGRAM_NV 0x8C26 #define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 #define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 typedef void (APIENTRYP PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint limit); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glProgramVertexLimitNV (GLenum target, GLint limit); GLAPI void APIENTRY glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level); GLAPI void APIENTRY glFramebufferTextureFaceEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); #endif #endif /* GL_NV_geometry_program4 */ #ifndef GL_NV_geometry_shader4 #define GL_NV_geometry_shader4 1 #endif /* GL_NV_geometry_shader4 */ #ifndef GL_NV_geometry_shader_passthrough #define GL_NV_geometry_shader_passthrough 1 #endif /* GL_NV_geometry_shader_passthrough */ #ifndef GL_NV_gpu_multicast #define GL_NV_gpu_multicast 1 #define GL_PER_GPU_STORAGE_BIT_NV 0x0800 #define GL_MULTICAST_GPUS_NV 0x92BA #define GL_RENDER_GPU_MASK_NV 0x9558 #define GL_PER_GPU_STORAGE_NV 0x9548 #define GL_MULTICAST_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9549 typedef void (APIENTRYP PFNGLRENDERGPUMASKNVPROC) (GLbitfield mask); typedef void (APIENTRYP PFNGLMULTICASTBUFFERSUBDATANVPROC) (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); typedef void (APIENTRYP PFNGLMULTICASTCOPYBUFFERSUBDATANVPROC) (GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); typedef void (APIENTRYP PFNGLMULTICASTCOPYIMAGESUBDATANVPROC) (GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); typedef void (APIENTRYP PFNGLMULTICASTBLITFRAMEBUFFERNVPROC) (GLuint srcGpu, GLuint dstGpu, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); typedef void (APIENTRYP PFNGLMULTICASTFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLuint gpu, GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); typedef void (APIENTRYP PFNGLMULTICASTBARRIERNVPROC) (void); typedef void (APIENTRYP PFNGLMULTICASTWAITSYNCNVPROC) (GLuint signalGpu, GLbitfield waitGpuMask); typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTIVNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTUIVNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTI64VNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLint64 *params); typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTUI64VNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLuint64 *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glRenderGpuMaskNV (GLbitfield mask); GLAPI void APIENTRY glMulticastBufferSubDataNV (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); GLAPI void APIENTRY glMulticastCopyBufferSubDataNV (GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); GLAPI void APIENTRY glMulticastCopyImageSubDataNV (GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); GLAPI void APIENTRY glMulticastBlitFramebufferNV (GLuint srcGpu, GLuint dstGpu, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); GLAPI void APIENTRY glMulticastFramebufferSampleLocationsfvNV (GLuint gpu, GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); GLAPI void APIENTRY glMulticastBarrierNV (void); GLAPI void APIENTRY glMulticastWaitSyncNV (GLuint signalGpu, GLbitfield waitGpuMask); GLAPI void APIENTRY glMulticastGetQueryObjectivNV (GLuint gpu, GLuint id, GLenum pname, GLint *params); GLAPI void APIENTRY glMulticastGetQueryObjectuivNV (GLuint gpu, GLuint id, GLenum pname, GLuint *params); GLAPI void APIENTRY glMulticastGetQueryObjecti64vNV (GLuint gpu, GLuint id, GLenum pname, GLint64 *params); GLAPI void APIENTRY glMulticastGetQueryObjectui64vNV (GLuint gpu, GLuint id, GLenum pname, GLuint64 *params); #endif #endif /* GL_NV_gpu_multicast */ #ifndef GL_NV_gpu_program4 #define GL_NV_gpu_program4 1 #define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 #define GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 #define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 #define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 #define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 #define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 #define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 #define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glProgramLocalParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); GLAPI void APIENTRY glProgramLocalParameterI4ivNV (GLenum target, GLuint index, const GLint *params); GLAPI void APIENTRY glProgramLocalParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); GLAPI void APIENTRY glProgramLocalParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); GLAPI void APIENTRY glProgramLocalParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); GLAPI void APIENTRY glProgramLocalParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); GLAPI void APIENTRY glProgramEnvParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); GLAPI void APIENTRY glProgramEnvParameterI4ivNV (GLenum target, GLuint index, const GLint *params); GLAPI void APIENTRY glProgramEnvParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); GLAPI void APIENTRY glProgramEnvParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); GLAPI void APIENTRY glProgramEnvParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); GLAPI void APIENTRY glProgramEnvParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); GLAPI void APIENTRY glGetProgramLocalParameterIivNV (GLenum target, GLuint index, GLint *params); GLAPI void APIENTRY glGetProgramLocalParameterIuivNV (GLenum target, GLuint index, GLuint *params); GLAPI void APIENTRY glGetProgramEnvParameterIivNV (GLenum target, GLuint index, GLint *params); GLAPI void APIENTRY glGetProgramEnvParameterIuivNV (GLenum target, GLuint index, GLuint *params); #endif #endif /* GL_NV_gpu_program4 */ #ifndef GL_NV_gpu_program5 #define GL_NV_gpu_program5 1 #define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A #define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B #define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C #define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D #define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E #define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F #define GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV 0x8F44 #define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV 0x8F45 typedef void (APIENTRYP PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC) (GLenum target, GLsizei count, const GLuint *params); typedef void (APIENTRYP PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC) (GLenum target, GLuint index, GLuint *param); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glProgramSubroutineParametersuivNV (GLenum target, GLsizei count, const GLuint *params); GLAPI void APIENTRY glGetProgramSubroutineParameteruivNV (GLenum target, GLuint index, GLuint *param); #endif #endif /* GL_NV_gpu_program5 */ #ifndef GL_NV_gpu_program5_mem_extended #define GL_NV_gpu_program5_mem_extended 1 #endif /* GL_NV_gpu_program5_mem_extended */ #ifndef GL_NV_gpu_shader5 #define GL_NV_gpu_shader5 1 #endif /* GL_NV_gpu_shader5 */ #ifndef GL_NV_half_float #define GL_NV_half_float 1 typedef unsigned short GLhalfNV; #define GL_HALF_FLOAT_NV 0x140B typedef void (APIENTRYP PFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y); typedef void (APIENTRYP PFNGLVERTEX2HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z); typedef void (APIENTRYP PFNGLVERTEX3HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); typedef void (APIENTRYP PFNGLVERTEX4HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); typedef void (APIENTRYP PFNGLNORMAL3HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); typedef void (APIENTRYP PFNGLCOLOR3HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); typedef void (APIENTRYP PFNGLCOLOR4HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLTEXCOORD1HNVPROC) (GLhalfNV s); typedef void (APIENTRYP PFNGLTEXCOORD1HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t); typedef void (APIENTRYP PFNGLTEXCOORD2HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r); typedef void (APIENTRYP PFNGLTEXCOORD3HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); typedef void (APIENTRYP PFNGLTEXCOORD4HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v); typedef void (APIENTRYP PFNGLFOGCOORDHNVPROC) (GLhalfNV fog); typedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC) (const GLhalfNV *fog); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight); typedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight); typedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertex2hNV (GLhalfNV x, GLhalfNV y); GLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *v); GLAPI void APIENTRY glVertex3hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z); GLAPI void APIENTRY glVertex3hvNV (const GLhalfNV *v); GLAPI void APIENTRY glVertex4hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); GLAPI void APIENTRY glVertex4hvNV (const GLhalfNV *v); GLAPI void APIENTRY glNormal3hNV (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); GLAPI void APIENTRY glNormal3hvNV (const GLhalfNV *v); GLAPI void APIENTRY glColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); GLAPI void APIENTRY glColor3hvNV (const GLhalfNV *v); GLAPI void APIENTRY glColor4hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); GLAPI void APIENTRY glColor4hvNV (const GLhalfNV *v); GLAPI void APIENTRY glTexCoord1hNV (GLhalfNV s); GLAPI void APIENTRY glTexCoord1hvNV (const GLhalfNV *v); GLAPI void APIENTRY glTexCoord2hNV (GLhalfNV s, GLhalfNV t); GLAPI void APIENTRY glTexCoord2hvNV (const GLhalfNV *v); GLAPI void APIENTRY glTexCoord3hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r); GLAPI void APIENTRY glTexCoord3hvNV (const GLhalfNV *v); GLAPI void APIENTRY glTexCoord4hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); GLAPI void APIENTRY glTexCoord4hvNV (const GLhalfNV *v); GLAPI void APIENTRY glMultiTexCoord1hNV (GLenum target, GLhalfNV s); GLAPI void APIENTRY glMultiTexCoord1hvNV (GLenum target, const GLhalfNV *v); GLAPI void APIENTRY glMultiTexCoord2hNV (GLenum target, GLhalfNV s, GLhalfNV t); GLAPI void APIENTRY glMultiTexCoord2hvNV (GLenum target, const GLhalfNV *v); GLAPI void APIENTRY glMultiTexCoord3hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); GLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum target, const GLhalfNV *v); GLAPI void APIENTRY glMultiTexCoord4hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); GLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum target, const GLhalfNV *v); GLAPI void APIENTRY glFogCoordhNV (GLhalfNV fog); GLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *fog); GLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); GLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *v); GLAPI void APIENTRY glVertexWeighthNV (GLhalfNV weight); GLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *weight); GLAPI void APIENTRY glVertexAttrib1hNV (GLuint index, GLhalfNV x); GLAPI void APIENTRY glVertexAttrib1hvNV (GLuint index, const GLhalfNV *v); GLAPI void APIENTRY glVertexAttrib2hNV (GLuint index, GLhalfNV x, GLhalfNV y); GLAPI void APIENTRY glVertexAttrib2hvNV (GLuint index, const GLhalfNV *v); GLAPI void APIENTRY glVertexAttrib3hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); GLAPI void APIENTRY glVertexAttrib3hvNV (GLuint index, const GLhalfNV *v); GLAPI void APIENTRY glVertexAttrib4hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); GLAPI void APIENTRY glVertexAttrib4hvNV (GLuint index, const GLhalfNV *v); GLAPI void APIENTRY glVertexAttribs1hvNV (GLuint index, GLsizei n, const GLhalfNV *v); GLAPI void APIENTRY glVertexAttribs2hvNV (GLuint index, GLsizei n, const GLhalfNV *v); GLAPI void APIENTRY glVertexAttribs3hvNV (GLuint index, GLsizei n, const GLhalfNV *v); GLAPI void APIENTRY glVertexAttribs4hvNV (GLuint index, GLsizei n, const GLhalfNV *v); #endif #endif /* GL_NV_half_float */ #ifndef GL_NV_internalformat_sample_query #define GL_NV_internalformat_sample_query 1 #define GL_MULTISAMPLES_NV 0x9371 #define GL_SUPERSAMPLE_SCALE_X_NV 0x9372 #define GL_SUPERSAMPLE_SCALE_Y_NV 0x9373 #define GL_CONFORMANT_NV 0x9374 typedef void (APIENTRYP PFNGLGETINTERNALFORMATSAMPLEIVNVPROC) (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei count, GLint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetInternalformatSampleivNV (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei count, GLint *params); #endif #endif /* GL_NV_internalformat_sample_query */ #ifndef GL_NV_light_max_exponent #define GL_NV_light_max_exponent 1 #define GL_MAX_SHININESS_NV 0x8504 #define GL_MAX_SPOT_EXPONENT_NV 0x8505 #endif /* GL_NV_light_max_exponent */ #ifndef GL_NV_memory_attachment #define GL_NV_memory_attachment 1 #define GL_ATTACHED_MEMORY_OBJECT_NV 0x95A4 #define GL_ATTACHED_MEMORY_OFFSET_NV 0x95A5 #define GL_MEMORY_ATTACHABLE_ALIGNMENT_NV 0x95A6 #define GL_MEMORY_ATTACHABLE_SIZE_NV 0x95A7 #define GL_MEMORY_ATTACHABLE_NV 0x95A8 #define GL_DETACHED_MEMORY_INCARNATION_NV 0x95A9 #define GL_DETACHED_TEXTURES_NV 0x95AA #define GL_DETACHED_BUFFERS_NV 0x95AB #define GL_MAX_DETACHED_TEXTURES_NV 0x95AC #define GL_MAX_DETACHED_BUFFERS_NV 0x95AD typedef void (APIENTRYP PFNGLGETMEMORYOBJECTDETACHEDRESOURCESUIVNVPROC) (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params); typedef void (APIENTRYP PFNGLRESETMEMORYOBJECTPARAMETERNVPROC) (GLuint memory, GLenum pname); typedef void (APIENTRYP PFNGLTEXATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset); typedef void (APIENTRYP PFNGLBUFFERATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset); typedef void (APIENTRYP PFNGLTEXTUREATTACHMEMORYNVPROC) (GLuint texture, GLuint memory, GLuint64 offset); typedef void (APIENTRYP PFNGLNAMEDBUFFERATTACHMEMORYNVPROC) (GLuint buffer, GLuint memory, GLuint64 offset); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetMemoryObjectDetachedResourcesuivNV (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params); GLAPI void APIENTRY glResetMemoryObjectParameterNV (GLuint memory, GLenum pname); GLAPI void APIENTRY glTexAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset); GLAPI void APIENTRY glBufferAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset); GLAPI void APIENTRY glTextureAttachMemoryNV (GLuint texture, GLuint memory, GLuint64 offset); GLAPI void APIENTRY glNamedBufferAttachMemoryNV (GLuint buffer, GLuint memory, GLuint64 offset); #endif #endif /* GL_NV_memory_attachment */ #ifndef GL_NV_memory_object_sparse #define GL_NV_memory_object_sparse 1 typedef void (APIENTRYP PFNGLBUFFERPAGECOMMITMENTMEMNVPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLuint memory, GLuint64 memOffset, GLboolean commit); typedef void (APIENTRYP PFNGLTEXPAGECOMMITMENTMEMNVPROC) (GLenum target, GLint layer, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset, GLboolean commit); typedef void (APIENTRYP PFNGLNAMEDBUFFERPAGECOMMITMENTMEMNVPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLuint memory, GLuint64 memOffset, GLboolean commit); typedef void (APIENTRYP PFNGLTEXTUREPAGECOMMITMENTMEMNVPROC) (GLuint texture, GLint layer, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset, GLboolean commit); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBufferPageCommitmentMemNV (GLenum target, GLintptr offset, GLsizeiptr size, GLuint memory, GLuint64 memOffset, GLboolean commit); GLAPI void APIENTRY glTexPageCommitmentMemNV (GLenum target, GLint layer, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset, GLboolean commit); GLAPI void APIENTRY glNamedBufferPageCommitmentMemNV (GLuint buffer, GLintptr offset, GLsizeiptr size, GLuint memory, GLuint64 memOffset, GLboolean commit); GLAPI void APIENTRY glTexturePageCommitmentMemNV (GLuint texture, GLint layer, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset, GLboolean commit); #endif #endif /* GL_NV_memory_object_sparse */ #ifndef GL_NV_mesh_shader #define GL_NV_mesh_shader 1 #define GL_MESH_SHADER_NV 0x9559 #define GL_TASK_SHADER_NV 0x955A #define GL_MAX_MESH_UNIFORM_BLOCKS_NV 0x8E60 #define GL_MAX_MESH_TEXTURE_IMAGE_UNITS_NV 0x8E61 #define GL_MAX_MESH_IMAGE_UNIFORMS_NV 0x8E62 #define GL_MAX_MESH_UNIFORM_COMPONENTS_NV 0x8E63 #define GL_MAX_MESH_ATOMIC_COUNTER_BUFFERS_NV 0x8E64 #define GL_MAX_MESH_ATOMIC_COUNTERS_NV 0x8E65 #define GL_MAX_MESH_SHADER_STORAGE_BLOCKS_NV 0x8E66 #define GL_MAX_COMBINED_MESH_UNIFORM_COMPONENTS_NV 0x8E67 #define GL_MAX_TASK_UNIFORM_BLOCKS_NV 0x8E68 #define GL_MAX_TASK_TEXTURE_IMAGE_UNITS_NV 0x8E69 #define GL_MAX_TASK_IMAGE_UNIFORMS_NV 0x8E6A #define GL_MAX_TASK_UNIFORM_COMPONENTS_NV 0x8E6B #define GL_MAX_TASK_ATOMIC_COUNTER_BUFFERS_NV 0x8E6C #define GL_MAX_TASK_ATOMIC_COUNTERS_NV 0x8E6D #define GL_MAX_TASK_SHADER_STORAGE_BLOCKS_NV 0x8E6E #define GL_MAX_COMBINED_TASK_UNIFORM_COMPONENTS_NV 0x8E6F #define GL_MAX_MESH_WORK_GROUP_INVOCATIONS_NV 0x95A2 #define GL_MAX_TASK_WORK_GROUP_INVOCATIONS_NV 0x95A3 #define GL_MAX_MESH_TOTAL_MEMORY_SIZE_NV 0x9536 #define GL_MAX_TASK_TOTAL_MEMORY_SIZE_NV 0x9537 #define GL_MAX_MESH_OUTPUT_VERTICES_NV 0x9538 #define GL_MAX_MESH_OUTPUT_PRIMITIVES_NV 0x9539 #define GL_MAX_TASK_OUTPUT_COUNT_NV 0x953A #define GL_MAX_DRAW_MESH_TASKS_COUNT_NV 0x953D #define GL_MAX_MESH_VIEWS_NV 0x9557 #define GL_MESH_OUTPUT_PER_VERTEX_GRANULARITY_NV 0x92DF #define GL_MESH_OUTPUT_PER_PRIMITIVE_GRANULARITY_NV 0x9543 #define GL_MAX_MESH_WORK_GROUP_SIZE_NV 0x953B #define GL_MAX_TASK_WORK_GROUP_SIZE_NV 0x953C #define GL_MESH_WORK_GROUP_SIZE_NV 0x953E #define GL_TASK_WORK_GROUP_SIZE_NV 0x953F #define GL_MESH_VERTICES_OUT_NV 0x9579 #define GL_MESH_PRIMITIVES_OUT_NV 0x957A #define GL_MESH_OUTPUT_TYPE_NV 0x957B #define GL_UNIFORM_BLOCK_REFERENCED_BY_MESH_SHADER_NV 0x959C #define GL_UNIFORM_BLOCK_REFERENCED_BY_TASK_SHADER_NV 0x959D #define GL_REFERENCED_BY_MESH_SHADER_NV 0x95A0 #define GL_REFERENCED_BY_TASK_SHADER_NV 0x95A1 #define GL_MESH_SHADER_BIT_NV 0x00000040 #define GL_TASK_SHADER_BIT_NV 0x00000080 #define GL_MESH_SUBROUTINE_NV 0x957C #define GL_TASK_SUBROUTINE_NV 0x957D #define GL_MESH_SUBROUTINE_UNIFORM_NV 0x957E #define GL_TASK_SUBROUTINE_UNIFORM_NV 0x957F #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_MESH_SHADER_NV 0x959E #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TASK_SHADER_NV 0x959F typedef void (APIENTRYP PFNGLDRAWMESHTASKSNVPROC) (GLuint first, GLuint count); typedef void (APIENTRYP PFNGLDRAWMESHTASKSINDIRECTNVPROC) (GLintptr indirect); typedef void (APIENTRYP PFNGLMULTIDRAWMESHTASKSINDIRECTNVPROC) (GLintptr indirect, GLsizei drawcount, GLsizei stride); typedef void (APIENTRYP PFNGLMULTIDRAWMESHTASKSINDIRECTCOUNTNVPROC) (GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawMeshTasksNV (GLuint first, GLuint count); GLAPI void APIENTRY glDrawMeshTasksIndirectNV (GLintptr indirect); GLAPI void APIENTRY glMultiDrawMeshTasksIndirectNV (GLintptr indirect, GLsizei drawcount, GLsizei stride); GLAPI void APIENTRY glMultiDrawMeshTasksIndirectCountNV (GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); #endif #endif /* GL_NV_mesh_shader */ #ifndef GL_NV_multisample_coverage #define GL_NV_multisample_coverage 1 #endif /* GL_NV_multisample_coverage */ #ifndef GL_NV_multisample_filter_hint #define GL_NV_multisample_filter_hint 1 #define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 #endif /* GL_NV_multisample_filter_hint */ #ifndef GL_NV_occlusion_query #define GL_NV_occlusion_query 1 #define GL_PIXEL_COUNTER_BITS_NV 0x8864 #define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 #define GL_PIXEL_COUNT_NV 0x8866 #define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 typedef void (APIENTRYP PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids); typedef void (APIENTRYP PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids); typedef GLboolean (APIENTRYP PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id); typedef void (APIENTRYP PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id); typedef void (APIENTRYP PFNGLENDOCCLUSIONQUERYNVPROC) (void); typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei n, GLuint *ids); GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei n, const GLuint *ids); GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint id); GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint id); GLAPI void APIENTRY glEndOcclusionQueryNV (void); GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint id, GLenum pname, GLint *params); GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint id, GLenum pname, GLuint *params); #endif #endif /* GL_NV_occlusion_query */ #ifndef GL_NV_packed_depth_stencil #define GL_NV_packed_depth_stencil 1 #define GL_DEPTH_STENCIL_NV 0x84F9 #define GL_UNSIGNED_INT_24_8_NV 0x84FA #endif /* GL_NV_packed_depth_stencil */ #ifndef GL_NV_parameter_buffer_object #define GL_NV_parameter_buffer_object 1 #define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 #define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 #define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 #define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 #define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params); typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params); typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glProgramBufferParametersfvNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params); GLAPI void APIENTRY glProgramBufferParametersIivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params); GLAPI void APIENTRY glProgramBufferParametersIuivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params); #endif #endif /* GL_NV_parameter_buffer_object */ #ifndef GL_NV_parameter_buffer_object2 #define GL_NV_parameter_buffer_object2 1 #endif /* GL_NV_parameter_buffer_object2 */ #ifndef GL_NV_path_rendering #define GL_NV_path_rendering 1 #define GL_PATH_FORMAT_SVG_NV 0x9070 #define GL_PATH_FORMAT_PS_NV 0x9071 #define GL_STANDARD_FONT_NAME_NV 0x9072 #define GL_SYSTEM_FONT_NAME_NV 0x9073 #define GL_FILE_NAME_NV 0x9074 #define GL_PATH_STROKE_WIDTH_NV 0x9075 #define GL_PATH_END_CAPS_NV 0x9076 #define GL_PATH_INITIAL_END_CAP_NV 0x9077 #define GL_PATH_TERMINAL_END_CAP_NV 0x9078 #define GL_PATH_JOIN_STYLE_NV 0x9079 #define GL_PATH_MITER_LIMIT_NV 0x907A #define GL_PATH_DASH_CAPS_NV 0x907B #define GL_PATH_INITIAL_DASH_CAP_NV 0x907C #define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D #define GL_PATH_DASH_OFFSET_NV 0x907E #define GL_PATH_CLIENT_LENGTH_NV 0x907F #define GL_PATH_FILL_MODE_NV 0x9080 #define GL_PATH_FILL_MASK_NV 0x9081 #define GL_PATH_FILL_COVER_MODE_NV 0x9082 #define GL_PATH_STROKE_COVER_MODE_NV 0x9083 #define GL_PATH_STROKE_MASK_NV 0x9084 #define GL_COUNT_UP_NV 0x9088 #define GL_COUNT_DOWN_NV 0x9089 #define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A #define GL_CONVEX_HULL_NV 0x908B #define GL_BOUNDING_BOX_NV 0x908D #define GL_TRANSLATE_X_NV 0x908E #define GL_TRANSLATE_Y_NV 0x908F #define GL_TRANSLATE_2D_NV 0x9090 #define GL_TRANSLATE_3D_NV 0x9091 #define GL_AFFINE_2D_NV 0x9092 #define GL_AFFINE_3D_NV 0x9094 #define GL_TRANSPOSE_AFFINE_2D_NV 0x9096 #define GL_TRANSPOSE_AFFINE_3D_NV 0x9098 #define GL_UTF8_NV 0x909A #define GL_UTF16_NV 0x909B #define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C #define GL_PATH_COMMAND_COUNT_NV 0x909D #define GL_PATH_COORD_COUNT_NV 0x909E #define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F #define GL_PATH_COMPUTED_LENGTH_NV 0x90A0 #define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1 #define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2 #define GL_SQUARE_NV 0x90A3 #define GL_ROUND_NV 0x90A4 #define GL_TRIANGULAR_NV 0x90A5 #define GL_BEVEL_NV 0x90A6 #define GL_MITER_REVERT_NV 0x90A7 #define GL_MITER_TRUNCATE_NV 0x90A8 #define GL_SKIP_MISSING_GLYPH_NV 0x90A9 #define GL_USE_MISSING_GLYPH_NV 0x90AA #define GL_PATH_ERROR_POSITION_NV 0x90AB #define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD #define GL_ADJACENT_PAIRS_NV 0x90AE #define GL_FIRST_TO_REST_NV 0x90AF #define GL_PATH_GEN_MODE_NV 0x90B0 #define GL_PATH_GEN_COEFF_NV 0x90B1 #define GL_PATH_GEN_COMPONENTS_NV 0x90B3 #define GL_PATH_STENCIL_FUNC_NV 0x90B7 #define GL_PATH_STENCIL_REF_NV 0x90B8 #define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9 #define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD #define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE #define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF #define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4 #define GL_MOVE_TO_RESETS_NV 0x90B5 #define GL_MOVE_TO_CONTINUES_NV 0x90B6 #define GL_CLOSE_PATH_NV 0x00 #define GL_MOVE_TO_NV 0x02 #define GL_RELATIVE_MOVE_TO_NV 0x03 #define GL_LINE_TO_NV 0x04 #define GL_RELATIVE_LINE_TO_NV 0x05 #define GL_HORIZONTAL_LINE_TO_NV 0x06 #define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07 #define GL_VERTICAL_LINE_TO_NV 0x08 #define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09 #define GL_QUADRATIC_CURVE_TO_NV 0x0A #define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B #define GL_CUBIC_CURVE_TO_NV 0x0C #define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D #define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E #define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F #define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10 #define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11 #define GL_SMALL_CCW_ARC_TO_NV 0x12 #define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13 #define GL_SMALL_CW_ARC_TO_NV 0x14 #define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15 #define GL_LARGE_CCW_ARC_TO_NV 0x16 #define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17 #define GL_LARGE_CW_ARC_TO_NV 0x18 #define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19 #define GL_RESTART_PATH_NV 0xF0 #define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2 #define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4 #define GL_RECT_NV 0xF6 #define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8 #define GL_CIRCULAR_CW_ARC_TO_NV 0xFA #define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC #define GL_ARC_TO_NV 0xFE #define GL_RELATIVE_ARC_TO_NV 0xFF #define GL_BOLD_BIT_NV 0x01 #define GL_ITALIC_BIT_NV 0x02 #define GL_GLYPH_WIDTH_BIT_NV 0x01 #define GL_GLYPH_HEIGHT_BIT_NV 0x02 #define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04 #define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08 #define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10 #define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20 #define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40 #define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80 #define GL_GLYPH_HAS_KERNING_BIT_NV 0x100 #define GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000 #define GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000 #define GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000 #define GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000 #define GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000 #define GL_FONT_ASCENDER_BIT_NV 0x00200000 #define GL_FONT_DESCENDER_BIT_NV 0x00400000 #define GL_FONT_HEIGHT_BIT_NV 0x00800000 #define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000 #define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000 #define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000 #define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000 #define GL_FONT_HAS_KERNING_BIT_NV 0x10000000 #define GL_ROUNDED_RECT_NV 0xE8 #define GL_RELATIVE_ROUNDED_RECT_NV 0xE9 #define GL_ROUNDED_RECT2_NV 0xEA #define GL_RELATIVE_ROUNDED_RECT2_NV 0xEB #define GL_ROUNDED_RECT4_NV 0xEC #define GL_RELATIVE_ROUNDED_RECT4_NV 0xED #define GL_ROUNDED_RECT8_NV 0xEE #define GL_RELATIVE_ROUNDED_RECT8_NV 0xEF #define GL_RELATIVE_RECT_NV 0xF7 #define GL_FONT_GLYPHS_AVAILABLE_NV 0x9368 #define GL_FONT_TARGET_UNAVAILABLE_NV 0x9369 #define GL_FONT_UNAVAILABLE_NV 0x936A #define GL_FONT_UNINTELLIGIBLE_NV 0x936B #define GL_CONIC_CURVE_TO_NV 0x1A #define GL_RELATIVE_CONIC_CURVE_TO_NV 0x1B #define GL_FONT_NUM_GLYPH_INDICES_BIT_NV 0x20000000 #define GL_STANDARD_FONT_FORMAT_NV 0x936C #define GL_2_BYTES_NV 0x1407 #define GL_3_BYTES_NV 0x1408 #define GL_4_BYTES_NV 0x1409 #define GL_EYE_LINEAR_NV 0x2400 #define GL_OBJECT_LINEAR_NV 0x2401 #define GL_CONSTANT_NV 0x8576 #define GL_PATH_FOG_GEN_MODE_NV 0x90AC #define GL_PRIMARY_COLOR_NV 0x852C #define GL_SECONDARY_COLOR_NV 0x852D #define GL_PATH_GEN_COLOR_FORMAT_NV 0x90B2 #define GL_PATH_PROJECTION_NV 0x1701 #define GL_PATH_MODELVIEW_NV 0x1700 #define GL_PATH_MODELVIEW_STACK_DEPTH_NV 0x0BA3 #define GL_PATH_MODELVIEW_MATRIX_NV 0x0BA6 #define GL_PATH_MAX_MODELVIEW_STACK_DEPTH_NV 0x0D36 #define GL_PATH_TRANSPOSE_MODELVIEW_MATRIX_NV 0x84E3 #define GL_PATH_PROJECTION_STACK_DEPTH_NV 0x0BA4 #define GL_PATH_PROJECTION_MATRIX_NV 0x0BA7 #define GL_PATH_MAX_PROJECTION_STACK_DEPTH_NV 0x0D38 #define GL_PATH_TRANSPOSE_PROJECTION_MATRIX_NV 0x84E4 #define GL_FRAGMENT_INPUT_NV 0x936D typedef GLuint (APIENTRYP PFNGLGENPATHSNVPROC) (GLsizei range); typedef void (APIENTRYP PFNGLDELETEPATHSNVPROC) (GLuint path, GLsizei range); typedef GLboolean (APIENTRYP PFNGLISPATHNVPROC) (GLuint path); typedef void (APIENTRYP PFNGLPATHCOMMANDSNVPROC) (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); typedef void (APIENTRYP PFNGLPATHCOORDSNVPROC) (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); typedef void (APIENTRYP PFNGLPATHSUBCOMMANDSNVPROC) (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); typedef void (APIENTRYP PFNGLPATHSUBCOORDSNVPROC) (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); typedef void (APIENTRYP PFNGLPATHSTRINGNVPROC) (GLuint path, GLenum format, GLsizei length, const void *pathString); typedef void (APIENTRYP PFNGLPATHGLYPHSNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); typedef void (APIENTRYP PFNGLPATHGLYPHRANGENVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); typedef void (APIENTRYP PFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); typedef void (APIENTRYP PFNGLCOPYPATHNVPROC) (GLuint resultPath, GLuint srcPath); typedef void (APIENTRYP PFNGLINTERPOLATEPATHSNVPROC) (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); typedef void (APIENTRYP PFNGLTRANSFORMPATHNVPROC) (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); typedef void (APIENTRYP PFNGLPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, const GLint *value); typedef void (APIENTRYP PFNGLPATHPARAMETERINVPROC) (GLuint path, GLenum pname, GLint value); typedef void (APIENTRYP PFNGLPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, const GLfloat *value); typedef void (APIENTRYP PFNGLPATHPARAMETERFNVPROC) (GLuint path, GLenum pname, GLfloat value); typedef void (APIENTRYP PFNGLPATHDASHARRAYNVPROC) (GLuint path, GLsizei dashCount, const GLfloat *dashArray); typedef void (APIENTRYP PFNGLPATHSTENCILFUNCNVPROC) (GLenum func, GLint ref, GLuint mask); typedef void (APIENTRYP PFNGLPATHSTENCILDEPTHOFFSETNVPROC) (GLfloat factor, GLfloat units); typedef void (APIENTRYP PFNGLSTENCILFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask); typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask); typedef void (APIENTRYP PFNGLSTENCILFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); typedef void (APIENTRYP PFNGLPATHCOVERDEPTHFUNCNVPROC) (GLenum func); typedef void (APIENTRYP PFNGLCOVERFILLPATHNVPROC) (GLuint path, GLenum coverMode); typedef void (APIENTRYP PFNGLCOVERSTROKEPATHNVPROC) (GLuint path, GLenum coverMode); typedef void (APIENTRYP PFNGLCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); typedef void (APIENTRYP PFNGLCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); typedef void (APIENTRYP PFNGLGETPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, GLint *value); typedef void (APIENTRYP PFNGLGETPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, GLfloat *value); typedef void (APIENTRYP PFNGLGETPATHCOMMANDSNVPROC) (GLuint path, GLubyte *commands); typedef void (APIENTRYP PFNGLGETPATHCOORDSNVPROC) (GLuint path, GLfloat *coords); typedef void (APIENTRYP PFNGLGETPATHDASHARRAYNVPROC) (GLuint path, GLfloat *dashArray); typedef void (APIENTRYP PFNGLGETPATHMETRICSNVPROC) (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); typedef void (APIENTRYP PFNGLGETPATHMETRICRANGENVPROC) (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); typedef void (APIENTRYP PFNGLGETPATHSPACINGNVPROC) (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); typedef GLboolean (APIENTRYP PFNGLISPOINTINFILLPATHNVPROC) (GLuint path, GLuint mask, GLfloat x, GLfloat y); typedef GLboolean (APIENTRYP PFNGLISPOINTINSTROKEPATHNVPROC) (GLuint path, GLfloat x, GLfloat y); typedef GLfloat (APIENTRYP PFNGLGETPATHLENGTHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments); typedef GLboolean (APIENTRYP PFNGLPOINTALONGPATHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); typedef void (APIENTRYP PFNGLMATRIXLOAD3X2FNVPROC) (GLenum matrixMode, const GLfloat *m); typedef void (APIENTRYP PFNGLMATRIXLOAD3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); typedef void (APIENTRYP PFNGLMATRIXMULT3X2FNVPROC) (GLenum matrixMode, const GLfloat *m); typedef void (APIENTRYP PFNGLMATRIXMULT3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); typedef void (APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode); typedef void (APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask, GLenum coverMode); typedef void (APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); typedef void (APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); typedef GLenum (APIENTRYP PFNGLPATHGLYPHINDEXRANGENVPROC) (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint *baseAndCount); typedef GLenum (APIENTRYP PFNGLPATHGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); typedef GLenum (APIENTRYP PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); typedef void (APIENTRYP PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC) (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs); typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEFVNVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei count, GLsizei *length, GLfloat *params); typedef void (APIENTRYP PFNGLPATHCOLORGENNVPROC) (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs); typedef void (APIENTRYP PFNGLPATHTEXGENNVPROC) (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs); typedef void (APIENTRYP PFNGLPATHFOGGENNVPROC) (GLenum genMode); typedef void (APIENTRYP PFNGLGETPATHCOLORGENIVNVPROC) (GLenum color, GLenum pname, GLint *value); typedef void (APIENTRYP PFNGLGETPATHCOLORGENFVNVPROC) (GLenum color, GLenum pname, GLfloat *value); typedef void (APIENTRYP PFNGLGETPATHTEXGENIVNVPROC) (GLenum texCoordSet, GLenum pname, GLint *value); typedef void (APIENTRYP PFNGLGETPATHTEXGENFVNVPROC) (GLenum texCoordSet, GLenum pname, GLfloat *value); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLuint APIENTRY glGenPathsNV (GLsizei range); GLAPI void APIENTRY glDeletePathsNV (GLuint path, GLsizei range); GLAPI GLboolean APIENTRY glIsPathNV (GLuint path); GLAPI void APIENTRY glPathCommandsNV (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); GLAPI void APIENTRY glPathCoordsNV (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); GLAPI void APIENTRY glPathSubCommandsNV (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); GLAPI void APIENTRY glPathSubCoordsNV (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); GLAPI void APIENTRY glPathStringNV (GLuint path, GLenum format, GLsizei length, const void *pathString); GLAPI void APIENTRY glPathGlyphsNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); GLAPI void APIENTRY glPathGlyphRangeNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); GLAPI void APIENTRY glWeightPathsNV (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); GLAPI void APIENTRY glCopyPathNV (GLuint resultPath, GLuint srcPath); GLAPI void APIENTRY glInterpolatePathsNV (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); GLAPI void APIENTRY glTransformPathNV (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); GLAPI void APIENTRY glPathParameterivNV (GLuint path, GLenum pname, const GLint *value); GLAPI void APIENTRY glPathParameteriNV (GLuint path, GLenum pname, GLint value); GLAPI void APIENTRY glPathParameterfvNV (GLuint path, GLenum pname, const GLfloat *value); GLAPI void APIENTRY glPathParameterfNV (GLuint path, GLenum pname, GLfloat value); GLAPI void APIENTRY glPathDashArrayNV (GLuint path, GLsizei dashCount, const GLfloat *dashArray); GLAPI void APIENTRY glPathStencilFuncNV (GLenum func, GLint ref, GLuint mask); GLAPI void APIENTRY glPathStencilDepthOffsetNV (GLfloat factor, GLfloat units); GLAPI void APIENTRY glStencilFillPathNV (GLuint path, GLenum fillMode, GLuint mask); GLAPI void APIENTRY glStencilStrokePathNV (GLuint path, GLint reference, GLuint mask); GLAPI void APIENTRY glStencilFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); GLAPI void APIENTRY glStencilStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); GLAPI void APIENTRY glPathCoverDepthFuncNV (GLenum func); GLAPI void APIENTRY glCoverFillPathNV (GLuint path, GLenum coverMode); GLAPI void APIENTRY glCoverStrokePathNV (GLuint path, GLenum coverMode); GLAPI void APIENTRY glCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); GLAPI void APIENTRY glCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); GLAPI void APIENTRY glGetPathParameterivNV (GLuint path, GLenum pname, GLint *value); GLAPI void APIENTRY glGetPathParameterfvNV (GLuint path, GLenum pname, GLfloat *value); GLAPI void APIENTRY glGetPathCommandsNV (GLuint path, GLubyte *commands); GLAPI void APIENTRY glGetPathCoordsNV (GLuint path, GLfloat *coords); GLAPI void APIENTRY glGetPathDashArrayNV (GLuint path, GLfloat *dashArray); GLAPI void APIENTRY glGetPathMetricsNV (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); GLAPI void APIENTRY glGetPathMetricRangeNV (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); GLAPI void APIENTRY glGetPathSpacingNV (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); GLAPI GLboolean APIENTRY glIsPointInFillPathNV (GLuint path, GLuint mask, GLfloat x, GLfloat y); GLAPI GLboolean APIENTRY glIsPointInStrokePathNV (GLuint path, GLfloat x, GLfloat y); GLAPI GLfloat APIENTRY glGetPathLengthNV (GLuint path, GLsizei startSegment, GLsizei numSegments); GLAPI GLboolean APIENTRY glPointAlongPathNV (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); GLAPI void APIENTRY glMatrixLoad3x2fNV (GLenum matrixMode, const GLfloat *m); GLAPI void APIENTRY glMatrixLoad3x3fNV (GLenum matrixMode, const GLfloat *m); GLAPI void APIENTRY glMatrixLoadTranspose3x3fNV (GLenum matrixMode, const GLfloat *m); GLAPI void APIENTRY glMatrixMult3x2fNV (GLenum matrixMode, const GLfloat *m); GLAPI void APIENTRY glMatrixMult3x3fNV (GLenum matrixMode, const GLfloat *m); GLAPI void APIENTRY glMatrixMultTranspose3x3fNV (GLenum matrixMode, const GLfloat *m); GLAPI void APIENTRY glStencilThenCoverFillPathNV (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode); GLAPI void APIENTRY glStencilThenCoverStrokePathNV (GLuint path, GLint reference, GLuint mask, GLenum coverMode); GLAPI void APIENTRY glStencilThenCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); GLAPI void APIENTRY glStencilThenCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); GLAPI GLenum APIENTRY glPathGlyphIndexRangeNV (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint *baseAndCount); GLAPI GLenum APIENTRY glPathGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); GLAPI GLenum APIENTRY glPathMemoryGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); GLAPI void APIENTRY glProgramPathFragmentInputGenNV (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs); GLAPI void APIENTRY glGetProgramResourcefvNV (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei count, GLsizei *length, GLfloat *params); GLAPI void APIENTRY glPathColorGenNV (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs); GLAPI void APIENTRY glPathTexGenNV (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs); GLAPI void APIENTRY glPathFogGenNV (GLenum genMode); GLAPI void APIENTRY glGetPathColorGenivNV (GLenum color, GLenum pname, GLint *value); GLAPI void APIENTRY glGetPathColorGenfvNV (GLenum color, GLenum pname, GLfloat *value); GLAPI void APIENTRY glGetPathTexGenivNV (GLenum texCoordSet, GLenum pname, GLint *value); GLAPI void APIENTRY glGetPathTexGenfvNV (GLenum texCoordSet, GLenum pname, GLfloat *value); #endif #endif /* GL_NV_path_rendering */ #ifndef GL_NV_path_rendering_shared_edge #define GL_NV_path_rendering_shared_edge 1 #define GL_SHARED_EDGE_NV 0xC0 #endif /* GL_NV_path_rendering_shared_edge */ #ifndef GL_NV_pixel_data_range #define GL_NV_pixel_data_range 1 #define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 #define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 #define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A #define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B #define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C #define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D typedef void (APIENTRYP PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, const void *pointer); typedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPixelDataRangeNV (GLenum target, GLsizei length, const void *pointer); GLAPI void APIENTRY glFlushPixelDataRangeNV (GLenum target); #endif #endif /* GL_NV_pixel_data_range */ #ifndef GL_NV_point_sprite #define GL_NV_point_sprite 1 #define GL_POINT_SPRITE_NV 0x8861 #define GL_COORD_REPLACE_NV 0x8862 #define GL_POINT_SPRITE_R_MODE_NV 0x8863 typedef void (APIENTRYP PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param); typedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPointParameteriNV (GLenum pname, GLint param); GLAPI void APIENTRY glPointParameterivNV (GLenum pname, const GLint *params); #endif #endif /* GL_NV_point_sprite */ #ifndef GL_NV_present_video #define GL_NV_present_video 1 #define GL_FRAME_NV 0x8E26 #define GL_FIELDS_NV 0x8E27 #define GL_CURRENT_TIME_NV 0x8E28 #define GL_NUM_FILL_STREAMS_NV 0x8E29 #define GL_PRESENT_TIME_NV 0x8E2A #define GL_PRESENT_DURATION_NV 0x8E2B typedef void (APIENTRYP PFNGLPRESENTFRAMEKEYEDNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); typedef void (APIENTRYP PFNGLPRESENTFRAMEDUALFILLNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); typedef void (APIENTRYP PFNGLGETVIDEOIVNVPROC) (GLuint video_slot, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETVIDEOUIVNVPROC) (GLuint video_slot, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLGETVIDEOI64VNVPROC) (GLuint video_slot, GLenum pname, GLint64EXT *params); typedef void (APIENTRYP PFNGLGETVIDEOUI64VNVPROC) (GLuint video_slot, GLenum pname, GLuint64EXT *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPresentFrameKeyedNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); GLAPI void APIENTRY glPresentFrameDualFillNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); GLAPI void APIENTRY glGetVideoivNV (GLuint video_slot, GLenum pname, GLint *params); GLAPI void APIENTRY glGetVideouivNV (GLuint video_slot, GLenum pname, GLuint *params); GLAPI void APIENTRY glGetVideoi64vNV (GLuint video_slot, GLenum pname, GLint64EXT *params); GLAPI void APIENTRY glGetVideoui64vNV (GLuint video_slot, GLenum pname, GLuint64EXT *params); #endif #endif /* GL_NV_present_video */ #ifndef GL_NV_primitive_restart #define GL_NV_primitive_restart 1 #define GL_PRIMITIVE_RESTART_NV 0x8558 #define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 typedef void (APIENTRYP PFNGLPRIMITIVERESTARTNVPROC) (void); typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPrimitiveRestartNV (void); GLAPI void APIENTRY glPrimitiveRestartIndexNV (GLuint index); #endif #endif /* GL_NV_primitive_restart */ #ifndef GL_NV_primitive_shading_rate #define GL_NV_primitive_shading_rate 1 #define GL_SHADING_RATE_IMAGE_PER_PRIMITIVE_NV 0x95B1 #define GL_SHADING_RATE_IMAGE_PALETTE_COUNT_NV 0x95B2 #endif /* GL_NV_primitive_shading_rate */ #ifndef GL_NV_query_resource #define GL_NV_query_resource 1 #define GL_QUERY_RESOURCE_TYPE_VIDMEM_ALLOC_NV 0x9540 #define GL_QUERY_RESOURCE_MEMTYPE_VIDMEM_NV 0x9542 #define GL_QUERY_RESOURCE_SYS_RESERVED_NV 0x9544 #define GL_QUERY_RESOURCE_TEXTURE_NV 0x9545 #define GL_QUERY_RESOURCE_RENDERBUFFER_NV 0x9546 #define GL_QUERY_RESOURCE_BUFFEROBJECT_NV 0x9547 typedef GLint (APIENTRYP PFNGLQUERYRESOURCENVPROC) (GLenum queryType, GLint tagId, GLuint count, GLint *buffer); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLint APIENTRY glQueryResourceNV (GLenum queryType, GLint tagId, GLuint count, GLint *buffer); #endif #endif /* GL_NV_query_resource */ #ifndef GL_NV_query_resource_tag #define GL_NV_query_resource_tag 1 typedef void (APIENTRYP PFNGLGENQUERYRESOURCETAGNVPROC) (GLsizei n, GLint *tagIds); typedef void (APIENTRYP PFNGLDELETEQUERYRESOURCETAGNVPROC) (GLsizei n, const GLint *tagIds); typedef void (APIENTRYP PFNGLQUERYRESOURCETAGNVPROC) (GLint tagId, const GLchar *tagString); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGenQueryResourceTagNV (GLsizei n, GLint *tagIds); GLAPI void APIENTRY glDeleteQueryResourceTagNV (GLsizei n, const GLint *tagIds); GLAPI void APIENTRY glQueryResourceTagNV (GLint tagId, const GLchar *tagString); #endif #endif /* GL_NV_query_resource_tag */ #ifndef GL_NV_register_combiners #define GL_NV_register_combiners 1 #define GL_REGISTER_COMBINERS_NV 0x8522 #define GL_VARIABLE_A_NV 0x8523 #define GL_VARIABLE_B_NV 0x8524 #define GL_VARIABLE_C_NV 0x8525 #define GL_VARIABLE_D_NV 0x8526 #define GL_VARIABLE_E_NV 0x8527 #define GL_VARIABLE_F_NV 0x8528 #define GL_VARIABLE_G_NV 0x8529 #define GL_CONSTANT_COLOR0_NV 0x852A #define GL_CONSTANT_COLOR1_NV 0x852B #define GL_SPARE0_NV 0x852E #define GL_SPARE1_NV 0x852F #define GL_DISCARD_NV 0x8530 #define GL_E_TIMES_F_NV 0x8531 #define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 #define GL_UNSIGNED_IDENTITY_NV 0x8536 #define GL_UNSIGNED_INVERT_NV 0x8537 #define GL_EXPAND_NORMAL_NV 0x8538 #define GL_EXPAND_NEGATE_NV 0x8539 #define GL_HALF_BIAS_NORMAL_NV 0x853A #define GL_HALF_BIAS_NEGATE_NV 0x853B #define GL_SIGNED_IDENTITY_NV 0x853C #define GL_SIGNED_NEGATE_NV 0x853D #define GL_SCALE_BY_TWO_NV 0x853E #define GL_SCALE_BY_FOUR_NV 0x853F #define GL_SCALE_BY_ONE_HALF_NV 0x8540 #define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 #define GL_COMBINER_INPUT_NV 0x8542 #define GL_COMBINER_MAPPING_NV 0x8543 #define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 #define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 #define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 #define GL_COMBINER_MUX_SUM_NV 0x8547 #define GL_COMBINER_SCALE_NV 0x8548 #define GL_COMBINER_BIAS_NV 0x8549 #define GL_COMBINER_AB_OUTPUT_NV 0x854A #define GL_COMBINER_CD_OUTPUT_NV 0x854B #define GL_COMBINER_SUM_OUTPUT_NV 0x854C #define GL_MAX_GENERAL_COMBINERS_NV 0x854D #define GL_NUM_GENERAL_COMBINERS_NV 0x854E #define GL_COLOR_SUM_CLAMP_NV 0x854F #define GL_COMBINER0_NV 0x8550 #define GL_COMBINER1_NV 0x8551 #define GL_COMBINER2_NV 0x8552 #define GL_COMBINER3_NV 0x8553 #define GL_COMBINER4_NV 0x8554 #define GL_COMBINER5_NV 0x8555 #define GL_COMBINER6_NV 0x8556 #define GL_COMBINER7_NV 0x8557 typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param); typedef void (APIENTRYP PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); typedef void (APIENTRYP PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); typedef void (APIENTRYP PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCombinerParameterfvNV (GLenum pname, const GLfloat *params); GLAPI void APIENTRY glCombinerParameterfNV (GLenum pname, GLfloat param); GLAPI void APIENTRY glCombinerParameterivNV (GLenum pname, const GLint *params); GLAPI void APIENTRY glCombinerParameteriNV (GLenum pname, GLint param); GLAPI void APIENTRY glCombinerInputNV (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); GLAPI void APIENTRY glCombinerOutputNV (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); GLAPI void APIENTRY glFinalCombinerInputNV (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum stage, GLenum portion, GLenum pname, GLint *params); GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum variable, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum variable, GLenum pname, GLint *params); #endif #endif /* GL_NV_register_combiners */ #ifndef GL_NV_register_combiners2 #define GL_NV_register_combiners2 1 #define GL_PER_STAGE_CONSTANTS_NV 0x8535 typedef void (APIENTRYP PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum stage, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum stage, GLenum pname, GLfloat *params); #endif #endif /* GL_NV_register_combiners2 */ #ifndef GL_NV_representative_fragment_test #define GL_NV_representative_fragment_test 1 #define GL_REPRESENTATIVE_FRAGMENT_TEST_NV 0x937F #endif /* GL_NV_representative_fragment_test */ #ifndef GL_NV_robustness_video_memory_purge #define GL_NV_robustness_video_memory_purge 1 #define GL_PURGED_CONTEXT_RESET_NV 0x92BB #endif /* GL_NV_robustness_video_memory_purge */ #ifndef GL_NV_sample_locations #define GL_NV_sample_locations 1 #define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_NV 0x933D #define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_NV 0x933E #define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_NV 0x933F #define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_NV 0x9340 #define GL_SAMPLE_LOCATION_NV 0x8E50 #define GL_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9341 #define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_NV 0x9342 #define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_NV 0x9343 typedef void (APIENTRYP PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLenum target, GLuint start, GLsizei count, const GLfloat *v); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); typedef void (APIENTRYP PFNGLRESOLVEDEPTHVALUESNVPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFramebufferSampleLocationsfvNV (GLenum target, GLuint start, GLsizei count, const GLfloat *v); GLAPI void APIENTRY glNamedFramebufferSampleLocationsfvNV (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); GLAPI void APIENTRY glResolveDepthValuesNV (void); #endif #endif /* GL_NV_sample_locations */ #ifndef GL_NV_sample_mask_override_coverage #define GL_NV_sample_mask_override_coverage 1 #endif /* GL_NV_sample_mask_override_coverage */ #ifndef GL_NV_scissor_exclusive #define GL_NV_scissor_exclusive 1 #define GL_SCISSOR_TEST_EXCLUSIVE_NV 0x9555 #define GL_SCISSOR_BOX_EXCLUSIVE_NV 0x9556 typedef void (APIENTRYP PFNGLSCISSOREXCLUSIVENVPROC) (GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLSCISSOREXCLUSIVEARRAYVNVPROC) (GLuint first, GLsizei count, const GLint *v); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glScissorExclusiveNV (GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glScissorExclusiveArrayvNV (GLuint first, GLsizei count, const GLint *v); #endif #endif /* GL_NV_scissor_exclusive */ #ifndef GL_NV_shader_atomic_counters #define GL_NV_shader_atomic_counters 1 #endif /* GL_NV_shader_atomic_counters */ #ifndef GL_NV_shader_atomic_float #define GL_NV_shader_atomic_float 1 #endif /* GL_NV_shader_atomic_float */ #ifndef GL_NV_shader_atomic_float64 #define GL_NV_shader_atomic_float64 1 #endif /* GL_NV_shader_atomic_float64 */ #ifndef GL_NV_shader_atomic_fp16_vector #define GL_NV_shader_atomic_fp16_vector 1 #endif /* GL_NV_shader_atomic_fp16_vector */ #ifndef GL_NV_shader_atomic_int64 #define GL_NV_shader_atomic_int64 1 #endif /* GL_NV_shader_atomic_int64 */ #ifndef GL_NV_shader_buffer_load #define GL_NV_shader_buffer_load 1 #define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D #define GL_GPU_ADDRESS_NV 0x8F34 #define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35 typedef void (APIENTRYP PFNGLMAKEBUFFERRESIDENTNVPROC) (GLenum target, GLenum access); typedef void (APIENTRYP PFNGLMAKEBUFFERNONRESIDENTNVPROC) (GLenum target); typedef GLboolean (APIENTRYP PFNGLISBUFFERRESIDENTNVPROC) (GLenum target); typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERRESIDENTNVPROC) (GLuint buffer, GLenum access); typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC) (GLuint buffer); typedef GLboolean (APIENTRYP PFNGLISNAMEDBUFFERRESIDENTNVPROC) (GLuint buffer); typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERUI64VNVPROC) (GLenum target, GLenum pname, GLuint64EXT *params); typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC) (GLuint buffer, GLenum pname, GLuint64EXT *params); typedef void (APIENTRYP PFNGLGETINTEGERUI64VNVPROC) (GLenum value, GLuint64EXT *result); typedef void (APIENTRYP PFNGLUNIFORMUI64NVPROC) (GLint location, GLuint64EXT value); typedef void (APIENTRYP PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64NVPROC) (GLuint program, GLint location, GLuint64EXT value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMakeBufferResidentNV (GLenum target, GLenum access); GLAPI void APIENTRY glMakeBufferNonResidentNV (GLenum target); GLAPI GLboolean APIENTRY glIsBufferResidentNV (GLenum target); GLAPI void APIENTRY glMakeNamedBufferResidentNV (GLuint buffer, GLenum access); GLAPI void APIENTRY glMakeNamedBufferNonResidentNV (GLuint buffer); GLAPI GLboolean APIENTRY glIsNamedBufferResidentNV (GLuint buffer); GLAPI void APIENTRY glGetBufferParameterui64vNV (GLenum target, GLenum pname, GLuint64EXT *params); GLAPI void APIENTRY glGetNamedBufferParameterui64vNV (GLuint buffer, GLenum pname, GLuint64EXT *params); GLAPI void APIENTRY glGetIntegerui64vNV (GLenum value, GLuint64EXT *result); GLAPI void APIENTRY glUniformui64NV (GLint location, GLuint64EXT value); GLAPI void APIENTRY glUniformui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glProgramUniformui64NV (GLuint program, GLint location, GLuint64EXT value); GLAPI void APIENTRY glProgramUniformui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); #endif #endif /* GL_NV_shader_buffer_load */ #ifndef GL_NV_shader_buffer_store #define GL_NV_shader_buffer_store 1 #define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010 #endif /* GL_NV_shader_buffer_store */ #ifndef GL_NV_shader_storage_buffer_object #define GL_NV_shader_storage_buffer_object 1 #endif /* GL_NV_shader_storage_buffer_object */ #ifndef GL_NV_shader_subgroup_partitioned #define GL_NV_shader_subgroup_partitioned 1 #define GL_SUBGROUP_FEATURE_PARTITIONED_BIT_NV 0x00000100 #endif /* GL_NV_shader_subgroup_partitioned */ #ifndef GL_NV_shader_texture_footprint #define GL_NV_shader_texture_footprint 1 #endif /* GL_NV_shader_texture_footprint */ #ifndef GL_NV_shader_thread_group #define GL_NV_shader_thread_group 1 #define GL_WARP_SIZE_NV 0x9339 #define GL_WARPS_PER_SM_NV 0x933A #define GL_SM_COUNT_NV 0x933B #endif /* GL_NV_shader_thread_group */ #ifndef GL_NV_shader_thread_shuffle #define GL_NV_shader_thread_shuffle 1 #endif /* GL_NV_shader_thread_shuffle */ #ifndef GL_NV_shading_rate_image #define GL_NV_shading_rate_image 1 #define GL_SHADING_RATE_IMAGE_NV 0x9563 #define GL_SHADING_RATE_NO_INVOCATIONS_NV 0x9564 #define GL_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV 0x9565 #define GL_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV 0x9566 #define GL_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV 0x9567 #define GL_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV 0x9568 #define GL_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV 0x9569 #define GL_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV 0x956A #define GL_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV 0x956B #define GL_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV 0x956C #define GL_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV 0x956D #define GL_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV 0x956E #define GL_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV 0x956F #define GL_SHADING_RATE_IMAGE_BINDING_NV 0x955B #define GL_SHADING_RATE_IMAGE_TEXEL_WIDTH_NV 0x955C #define GL_SHADING_RATE_IMAGE_TEXEL_HEIGHT_NV 0x955D #define GL_SHADING_RATE_IMAGE_PALETTE_SIZE_NV 0x955E #define GL_MAX_COARSE_FRAGMENT_SAMPLES_NV 0x955F #define GL_SHADING_RATE_SAMPLE_ORDER_DEFAULT_NV 0x95AE #define GL_SHADING_RATE_SAMPLE_ORDER_PIXEL_MAJOR_NV 0x95AF #define GL_SHADING_RATE_SAMPLE_ORDER_SAMPLE_MAJOR_NV 0x95B0 typedef void (APIENTRYP PFNGLBINDSHADINGRATEIMAGENVPROC) (GLuint texture); typedef void (APIENTRYP PFNGLGETSHADINGRATEIMAGEPALETTENVPROC) (GLuint viewport, GLuint entry, GLenum *rate); typedef void (APIENTRYP PFNGLGETSHADINGRATESAMPLELOCATIONIVNVPROC) (GLenum rate, GLuint samples, GLuint index, GLint *location); typedef void (APIENTRYP PFNGLSHADINGRATEIMAGEBARRIERNVPROC) (GLboolean synchronize); typedef void (APIENTRYP PFNGLSHADINGRATEIMAGEPALETTENVPROC) (GLuint viewport, GLuint first, GLsizei count, const GLenum *rates); typedef void (APIENTRYP PFNGLSHADINGRATESAMPLEORDERNVPROC) (GLenum order); typedef void (APIENTRYP PFNGLSHADINGRATESAMPLEORDERCUSTOMNVPROC) (GLenum rate, GLuint samples, const GLint *locations); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBindShadingRateImageNV (GLuint texture); GLAPI void APIENTRY glGetShadingRateImagePaletteNV (GLuint viewport, GLuint entry, GLenum *rate); GLAPI void APIENTRY glGetShadingRateSampleLocationivNV (GLenum rate, GLuint samples, GLuint index, GLint *location); GLAPI void APIENTRY glShadingRateImageBarrierNV (GLboolean synchronize); GLAPI void APIENTRY glShadingRateImagePaletteNV (GLuint viewport, GLuint first, GLsizei count, const GLenum *rates); GLAPI void APIENTRY glShadingRateSampleOrderNV (GLenum order); GLAPI void APIENTRY glShadingRateSampleOrderCustomNV (GLenum rate, GLuint samples, const GLint *locations); #endif #endif /* GL_NV_shading_rate_image */ #ifndef GL_NV_stereo_view_rendering #define GL_NV_stereo_view_rendering 1 #endif /* GL_NV_stereo_view_rendering */ #ifndef GL_NV_tessellation_program5 #define GL_NV_tessellation_program5 1 #define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8 #define GL_TESS_CONTROL_PROGRAM_NV 0x891E #define GL_TESS_EVALUATION_PROGRAM_NV 0x891F #define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74 #define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75 #endif /* GL_NV_tessellation_program5 */ #ifndef GL_NV_texgen_emboss #define GL_NV_texgen_emboss 1 #define GL_EMBOSS_LIGHT_NV 0x855D #define GL_EMBOSS_CONSTANT_NV 0x855E #define GL_EMBOSS_MAP_NV 0x855F #endif /* GL_NV_texgen_emboss */ #ifndef GL_NV_texgen_reflection #define GL_NV_texgen_reflection 1 #define GL_NORMAL_MAP_NV 0x8511 #define GL_REFLECTION_MAP_NV 0x8512 #endif /* GL_NV_texgen_reflection */ #ifndef GL_NV_texture_barrier #define GL_NV_texture_barrier 1 typedef void (APIENTRYP PFNGLTEXTUREBARRIERNVPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTextureBarrierNV (void); #endif #endif /* GL_NV_texture_barrier */ #ifndef GL_NV_texture_compression_vtc #define GL_NV_texture_compression_vtc 1 #endif /* GL_NV_texture_compression_vtc */ #ifndef GL_NV_texture_env_combine4 #define GL_NV_texture_env_combine4 1 #define GL_COMBINE4_NV 0x8503 #define GL_SOURCE3_RGB_NV 0x8583 #define GL_SOURCE3_ALPHA_NV 0x858B #define GL_OPERAND3_RGB_NV 0x8593 #define GL_OPERAND3_ALPHA_NV 0x859B #endif /* GL_NV_texture_env_combine4 */ #ifndef GL_NV_texture_expand_normal #define GL_NV_texture_expand_normal 1 #define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F #endif /* GL_NV_texture_expand_normal */ #ifndef GL_NV_texture_multisample #define GL_NV_texture_multisample 1 #define GL_TEXTURE_COVERAGE_SAMPLES_NV 0x9045 #define GL_TEXTURE_COLOR_SAMPLES_NV 0x9046 typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexImage2DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); GLAPI void APIENTRY glTexImage3DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); GLAPI void APIENTRY glTextureImage2DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); GLAPI void APIENTRY glTextureImage3DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); GLAPI void APIENTRY glTextureImage2DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); GLAPI void APIENTRY glTextureImage3DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); #endif #endif /* GL_NV_texture_multisample */ #ifndef GL_NV_texture_rectangle #define GL_NV_texture_rectangle 1 #define GL_TEXTURE_RECTANGLE_NV 0x84F5 #define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 #define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 #define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 #endif /* GL_NV_texture_rectangle */ #ifndef GL_NV_texture_rectangle_compressed #define GL_NV_texture_rectangle_compressed 1 #endif /* GL_NV_texture_rectangle_compressed */ #ifndef GL_NV_texture_shader #define GL_NV_texture_shader 1 #define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C #define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D #define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E #define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 #define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA #define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB #define GL_DSDT_MAG_INTENSITY_NV 0x86DC #define GL_SHADER_CONSISTENT_NV 0x86DD #define GL_TEXTURE_SHADER_NV 0x86DE #define GL_SHADER_OPERATION_NV 0x86DF #define GL_CULL_MODES_NV 0x86E0 #define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 #define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 #define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 #define GL_OFFSET_TEXTURE_2D_MATRIX_NV 0x86E1 #define GL_OFFSET_TEXTURE_2D_SCALE_NV 0x86E2 #define GL_OFFSET_TEXTURE_2D_BIAS_NV 0x86E3 #define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 #define GL_CONST_EYE_NV 0x86E5 #define GL_PASS_THROUGH_NV 0x86E6 #define GL_CULL_FRAGMENT_NV 0x86E7 #define GL_OFFSET_TEXTURE_2D_NV 0x86E8 #define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 #define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA #define GL_DOT_PRODUCT_NV 0x86EC #define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED #define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE #define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 #define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 #define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 #define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 #define GL_HILO_NV 0x86F4 #define GL_DSDT_NV 0x86F5 #define GL_DSDT_MAG_NV 0x86F6 #define GL_DSDT_MAG_VIB_NV 0x86F7 #define GL_HILO16_NV 0x86F8 #define GL_SIGNED_HILO_NV 0x86F9 #define GL_SIGNED_HILO16_NV 0x86FA #define GL_SIGNED_RGBA_NV 0x86FB #define GL_SIGNED_RGBA8_NV 0x86FC #define GL_SIGNED_RGB_NV 0x86FE #define GL_SIGNED_RGB8_NV 0x86FF #define GL_SIGNED_LUMINANCE_NV 0x8701 #define GL_SIGNED_LUMINANCE8_NV 0x8702 #define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 #define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 #define GL_SIGNED_ALPHA_NV 0x8705 #define GL_SIGNED_ALPHA8_NV 0x8706 #define GL_SIGNED_INTENSITY_NV 0x8707 #define GL_SIGNED_INTENSITY8_NV 0x8708 #define GL_DSDT8_NV 0x8709 #define GL_DSDT8_MAG8_NV 0x870A #define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B #define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C #define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D #define GL_HI_SCALE_NV 0x870E #define GL_LO_SCALE_NV 0x870F #define GL_DS_SCALE_NV 0x8710 #define GL_DT_SCALE_NV 0x8711 #define GL_MAGNITUDE_SCALE_NV 0x8712 #define GL_VIBRANCE_SCALE_NV 0x8713 #define GL_HI_BIAS_NV 0x8714 #define GL_LO_BIAS_NV 0x8715 #define GL_DS_BIAS_NV 0x8716 #define GL_DT_BIAS_NV 0x8717 #define GL_MAGNITUDE_BIAS_NV 0x8718 #define GL_VIBRANCE_BIAS_NV 0x8719 #define GL_TEXTURE_BORDER_VALUES_NV 0x871A #define GL_TEXTURE_HI_SIZE_NV 0x871B #define GL_TEXTURE_LO_SIZE_NV 0x871C #define GL_TEXTURE_DS_SIZE_NV 0x871D #define GL_TEXTURE_DT_SIZE_NV 0x871E #define GL_TEXTURE_MAG_SIZE_NV 0x871F #endif /* GL_NV_texture_shader */ #ifndef GL_NV_texture_shader2 #define GL_NV_texture_shader2 1 #define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF #endif /* GL_NV_texture_shader2 */ #ifndef GL_NV_texture_shader3 #define GL_NV_texture_shader3 1 #define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 #define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 #define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 #define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 #define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 #define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 #define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 #define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 #define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 #define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 #define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A #define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B #define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C #define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D #define GL_HILO8_NV 0x885E #define GL_SIGNED_HILO8_NV 0x885F #define GL_FORCE_BLUE_TO_ONE_NV 0x8860 #endif /* GL_NV_texture_shader3 */ #ifndef GL_NV_timeline_semaphore #define GL_NV_timeline_semaphore 1 #define GL_TIMELINE_SEMAPHORE_VALUE_NV 0x9595 #define GL_SEMAPHORE_TYPE_NV 0x95B3 #define GL_SEMAPHORE_TYPE_BINARY_NV 0x95B4 #define GL_SEMAPHORE_TYPE_TIMELINE_NV 0x95B5 #define GL_MAX_TIMELINE_SEMAPHORE_VALUE_DIFFERENCE_NV 0x95B6 typedef void (APIENTRYP PFNGLCREATESEMAPHORESNVPROC) (GLsizei n, GLuint *semaphores); typedef void (APIENTRYP PFNGLSEMAPHOREPARAMETERIVNVPROC) (GLuint semaphore, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLGETSEMAPHOREPARAMETERIVNVPROC) (GLuint semaphore, GLenum pname, GLint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCreateSemaphoresNV (GLsizei n, GLuint *semaphores); GLAPI void APIENTRY glSemaphoreParameterivNV (GLuint semaphore, GLenum pname, const GLint *params); GLAPI void APIENTRY glGetSemaphoreParameterivNV (GLuint semaphore, GLenum pname, GLint *params); #endif #endif /* GL_NV_timeline_semaphore */ #ifndef GL_NV_transform_feedback #define GL_NV_transform_feedback 1 #define GL_BACK_PRIMARY_COLOR_NV 0x8C77 #define GL_BACK_SECONDARY_COLOR_NV 0x8C78 #define GL_TEXTURE_COORD_NV 0x8C79 #define GL_CLIP_DISTANCE_NV 0x8C7A #define GL_VERTEX_ID_NV 0x8C7B #define GL_PRIMITIVE_ID_NV 0x8C7C #define GL_GENERIC_ATTRIB_NV 0x8C7D #define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E #define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 #define GL_ACTIVE_VARYINGS_NV 0x8C81 #define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 #define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 #define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 #define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 #define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 #define GL_PRIMITIVES_GENERATED_NV 0x8C87 #define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 #define GL_RASTERIZER_DISCARD_NV 0x8C89 #define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B #define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C #define GL_SEPARATE_ATTRIBS_NV 0x8C8D #define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E #define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F #define GL_LAYER_NV 0x8DAA #define GL_NEXT_BUFFER_NV -2 #define GL_SKIP_COMPONENTS4_NV -3 #define GL_SKIP_COMPONENTS3_NV -4 #define GL_SKIP_COMPONENTS2_NV -5 #define GL_SKIP_COMPONENTS1_NV -6 typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode); typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKNVPROC) (void); typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLsizei count, const GLint *attribs, GLenum bufferMode); typedef void (APIENTRYP PFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); typedef void (APIENTRYP PFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer); typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); typedef void (APIENTRYP PFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar *name); typedef GLint (APIENTRYP PFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar *name); typedef void (APIENTRYP PFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint *location); typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC) (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBeginTransformFeedbackNV (GLenum primitiveMode); GLAPI void APIENTRY glEndTransformFeedbackNV (void); GLAPI void APIENTRY glTransformFeedbackAttribsNV (GLsizei count, const GLint *attribs, GLenum bufferMode); GLAPI void APIENTRY glBindBufferRangeNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); GLAPI void APIENTRY glBindBufferOffsetNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset); GLAPI void APIENTRY glBindBufferBaseNV (GLenum target, GLuint index, GLuint buffer); GLAPI void APIENTRY glTransformFeedbackVaryingsNV (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); GLAPI void APIENTRY glActiveVaryingNV (GLuint program, const GLchar *name); GLAPI GLint APIENTRY glGetVaryingLocationNV (GLuint program, const GLchar *name); GLAPI void APIENTRY glGetActiveVaryingNV (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); GLAPI void APIENTRY glGetTransformFeedbackVaryingNV (GLuint program, GLuint index, GLint *location); GLAPI void APIENTRY glTransformFeedbackStreamAttribsNV (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); #endif #endif /* GL_NV_transform_feedback */ #ifndef GL_NV_transform_feedback2 #define GL_NV_transform_feedback2 1 #define GL_TRANSFORM_FEEDBACK_NV 0x8E22 #define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23 #define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24 #define GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25 typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKNVPROC) (GLenum target, GLuint id); typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSNVPROC) (GLsizei n, const GLuint *ids); typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSNVPROC) (GLsizei n, GLuint *ids); typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKNVPROC) (GLuint id); typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKNVPROC) (void); typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKNVPROC) (void); typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKNVPROC) (GLenum mode, GLuint id); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBindTransformFeedbackNV (GLenum target, GLuint id); GLAPI void APIENTRY glDeleteTransformFeedbacksNV (GLsizei n, const GLuint *ids); GLAPI void APIENTRY glGenTransformFeedbacksNV (GLsizei n, GLuint *ids); GLAPI GLboolean APIENTRY glIsTransformFeedbackNV (GLuint id); GLAPI void APIENTRY glPauseTransformFeedbackNV (void); GLAPI void APIENTRY glResumeTransformFeedbackNV (void); GLAPI void APIENTRY glDrawTransformFeedbackNV (GLenum mode, GLuint id); #endif #endif /* GL_NV_transform_feedback2 */ #ifndef GL_NV_uniform_buffer_unified_memory #define GL_NV_uniform_buffer_unified_memory 1 #define GL_UNIFORM_BUFFER_UNIFIED_NV 0x936E #define GL_UNIFORM_BUFFER_ADDRESS_NV 0x936F #define GL_UNIFORM_BUFFER_LENGTH_NV 0x9370 #endif /* GL_NV_uniform_buffer_unified_memory */ #ifndef GL_NV_vdpau_interop #define GL_NV_vdpau_interop 1 typedef GLintptr GLvdpauSurfaceNV; #define GL_SURFACE_STATE_NV 0x86EB #define GL_SURFACE_REGISTERED_NV 0x86FD #define GL_SURFACE_MAPPED_NV 0x8700 #define GL_WRITE_DISCARD_NV 0x88BE typedef void (APIENTRYP PFNGLVDPAUINITNVPROC) (const void *vdpDevice, const void *getProcAddress); typedef void (APIENTRYP PFNGLVDPAUFININVPROC) (void); typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); typedef GLboolean (APIENTRYP PFNGLVDPAUISSURFACENVPROC) (GLvdpauSurfaceNV surface); typedef void (APIENTRYP PFNGLVDPAUUNREGISTERSURFACENVPROC) (GLvdpauSurfaceNV surface); typedef void (APIENTRYP PFNGLVDPAUGETSURFACEIVNVPROC) (GLvdpauSurfaceNV surface, GLenum pname, GLsizei count, GLsizei *length, GLint *values); typedef void (APIENTRYP PFNGLVDPAUSURFACEACCESSNVPROC) (GLvdpauSurfaceNV surface, GLenum access); typedef void (APIENTRYP PFNGLVDPAUMAPSURFACESNVPROC) (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); typedef void (APIENTRYP PFNGLVDPAUUNMAPSURFACESNVPROC) (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVDPAUInitNV (const void *vdpDevice, const void *getProcAddress); GLAPI void APIENTRY glVDPAUFiniNV (void); GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterOutputSurfaceNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); GLAPI GLboolean APIENTRY glVDPAUIsSurfaceNV (GLvdpauSurfaceNV surface); GLAPI void APIENTRY glVDPAUUnregisterSurfaceNV (GLvdpauSurfaceNV surface); GLAPI void APIENTRY glVDPAUGetSurfaceivNV (GLvdpauSurfaceNV surface, GLenum pname, GLsizei count, GLsizei *length, GLint *values); GLAPI void APIENTRY glVDPAUSurfaceAccessNV (GLvdpauSurfaceNV surface, GLenum access); GLAPI void APIENTRY glVDPAUMapSurfacesNV (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); GLAPI void APIENTRY glVDPAUUnmapSurfacesNV (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); #endif #endif /* GL_NV_vdpau_interop */ #ifndef GL_NV_vdpau_interop2 #define GL_NV_vdpau_interop2 1 typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACEWITHPICTURESTRUCTURENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames, GLboolean isFrameStructure); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceWithPictureStructureNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames, GLboolean isFrameStructure); #endif #endif /* GL_NV_vdpau_interop2 */ #ifndef GL_NV_vertex_array_range #define GL_NV_vertex_array_range 1 #define GL_VERTEX_ARRAY_RANGE_NV 0x851D #define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E #define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F #define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 #define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void); typedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const void *pointer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFlushVertexArrayRangeNV (void); GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei length, const void *pointer); #endif #endif /* GL_NV_vertex_array_range */ #ifndef GL_NV_vertex_array_range2 #define GL_NV_vertex_array_range2 1 #define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 #endif /* GL_NV_vertex_array_range2 */ #ifndef GL_NV_vertex_attrib_integer_64bit #define GL_NV_vertex_attrib_integer_64bit 1 typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64NVPROC) (GLuint index, GLint64EXT x); typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y); typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64VNVPROC) (GLuint index, const GLint64EXT *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64VNVPROC) (GLuint index, const GLint64EXT *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64VNVPROC) (GLuint index, const GLint64EXT *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64VNVPROC) (GLuint index, const GLint64EXT *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64NVPROC) (GLuint index, GLuint64EXT x); typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y); typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VNVPROC) (GLuint index, const GLuint64EXT *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64VNVPROC) (GLuint index, const GLuint64EXT *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64VNVPROC) (GLuint index, const GLuint64EXT *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64VNVPROC) (GLuint index, const GLuint64EXT *v); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLI64VNVPROC) (GLuint index, GLenum pname, GLint64EXT *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VNVPROC) (GLuint index, GLenum pname, GLuint64EXT *params); typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexAttribL1i64NV (GLuint index, GLint64EXT x); GLAPI void APIENTRY glVertexAttribL2i64NV (GLuint index, GLint64EXT x, GLint64EXT y); GLAPI void APIENTRY glVertexAttribL3i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); GLAPI void APIENTRY glVertexAttribL4i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); GLAPI void APIENTRY glVertexAttribL1i64vNV (GLuint index, const GLint64EXT *v); GLAPI void APIENTRY glVertexAttribL2i64vNV (GLuint index, const GLint64EXT *v); GLAPI void APIENTRY glVertexAttribL3i64vNV (GLuint index, const GLint64EXT *v); GLAPI void APIENTRY glVertexAttribL4i64vNV (GLuint index, const GLint64EXT *v); GLAPI void APIENTRY glVertexAttribL1ui64NV (GLuint index, GLuint64EXT x); GLAPI void APIENTRY glVertexAttribL2ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y); GLAPI void APIENTRY glVertexAttribL3ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); GLAPI void APIENTRY glVertexAttribL4ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); GLAPI void APIENTRY glVertexAttribL1ui64vNV (GLuint index, const GLuint64EXT *v); GLAPI void APIENTRY glVertexAttribL2ui64vNV (GLuint index, const GLuint64EXT *v); GLAPI void APIENTRY glVertexAttribL3ui64vNV (GLuint index, const GLuint64EXT *v); GLAPI void APIENTRY glVertexAttribL4ui64vNV (GLuint index, const GLuint64EXT *v); GLAPI void APIENTRY glGetVertexAttribLi64vNV (GLuint index, GLenum pname, GLint64EXT *params); GLAPI void APIENTRY glGetVertexAttribLui64vNV (GLuint index, GLenum pname, GLuint64EXT *params); GLAPI void APIENTRY glVertexAttribLFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); #endif #endif /* GL_NV_vertex_attrib_integer_64bit */ #ifndef GL_NV_vertex_buffer_unified_memory #define GL_NV_vertex_buffer_unified_memory 1 #define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E #define GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F #define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20 #define GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21 #define GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22 #define GL_COLOR_ARRAY_ADDRESS_NV 0x8F23 #define GL_INDEX_ARRAY_ADDRESS_NV 0x8F24 #define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25 #define GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26 #define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27 #define GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28 #define GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29 #define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A #define GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B #define GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C #define GL_COLOR_ARRAY_LENGTH_NV 0x8F2D #define GL_INDEX_ARRAY_LENGTH_NV 0x8F2E #define GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F #define GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30 #define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31 #define GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32 #define GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33 #define GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40 #define GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41 #define GL_DRAW_INDIRECT_LENGTH_NV 0x8F42 typedef void (APIENTRYP PFNGLBUFFERADDRESSRANGENVPROC) (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); typedef void (APIENTRYP PFNGLVERTEXFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLNORMALFORMATNVPROC) (GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLINDEXFORMATNVPROC) (GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLTEXCOORDFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLEDGEFLAGFORMATNVPROC) (GLsizei stride); typedef void (APIENTRYP PFNGLSECONDARYCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLFOGCOORDFORMATNVPROC) (GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT *result); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBufferAddressRangeNV (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); GLAPI void APIENTRY glVertexFormatNV (GLint size, GLenum type, GLsizei stride); GLAPI void APIENTRY glNormalFormatNV (GLenum type, GLsizei stride); GLAPI void APIENTRY glColorFormatNV (GLint size, GLenum type, GLsizei stride); GLAPI void APIENTRY glIndexFormatNV (GLenum type, GLsizei stride); GLAPI void APIENTRY glTexCoordFormatNV (GLint size, GLenum type, GLsizei stride); GLAPI void APIENTRY glEdgeFlagFormatNV (GLsizei stride); GLAPI void APIENTRY glSecondaryColorFormatNV (GLint size, GLenum type, GLsizei stride); GLAPI void APIENTRY glFogCoordFormatNV (GLenum type, GLsizei stride); GLAPI void APIENTRY glVertexAttribFormatNV (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); GLAPI void APIENTRY glVertexAttribIFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); GLAPI void APIENTRY glGetIntegerui64i_vNV (GLenum value, GLuint index, GLuint64EXT *result); #endif #endif /* GL_NV_vertex_buffer_unified_memory */ #ifndef GL_NV_vertex_program #define GL_NV_vertex_program 1 #define GL_VERTEX_PROGRAM_NV 0x8620 #define GL_VERTEX_STATE_PROGRAM_NV 0x8621 #define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 #define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 #define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 #define GL_CURRENT_ATTRIB_NV 0x8626 #define GL_PROGRAM_LENGTH_NV 0x8627 #define GL_PROGRAM_STRING_NV 0x8628 #define GL_MODELVIEW_PROJECTION_NV 0x8629 #define GL_IDENTITY_NV 0x862A #define GL_INVERSE_NV 0x862B #define GL_TRANSPOSE_NV 0x862C #define GL_INVERSE_TRANSPOSE_NV 0x862D #define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E #define GL_MAX_TRACK_MATRICES_NV 0x862F #define GL_MATRIX0_NV 0x8630 #define GL_MATRIX1_NV 0x8631 #define GL_MATRIX2_NV 0x8632 #define GL_MATRIX3_NV 0x8633 #define GL_MATRIX4_NV 0x8634 #define GL_MATRIX5_NV 0x8635 #define GL_MATRIX6_NV 0x8636 #define GL_MATRIX7_NV 0x8637 #define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 #define GL_CURRENT_MATRIX_NV 0x8641 #define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 #define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 #define GL_PROGRAM_PARAMETER_NV 0x8644 #define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 #define GL_PROGRAM_TARGET_NV 0x8646 #define GL_PROGRAM_RESIDENT_NV 0x8647 #define GL_TRACK_MATRIX_NV 0x8648 #define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 #define GL_VERTEX_PROGRAM_BINDING_NV 0x864A #define GL_PROGRAM_ERROR_POSITION_NV 0x864B #define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 #define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 #define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 #define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 #define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 #define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 #define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 #define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 #define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 #define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 #define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A #define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B #define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C #define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D #define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E #define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F #define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 #define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 #define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 #define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 #define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 #define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 #define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 #define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 #define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 #define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 #define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A #define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B #define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C #define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D #define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E #define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F #define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 #define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 #define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 #define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 #define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 #define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 #define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 #define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 #define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 #define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 #define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A #define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B #define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C #define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D #define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E #define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F typedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences); typedef void (APIENTRYP PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id); typedef void (APIENTRYP PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); typedef void (APIENTRYP PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params); typedef void (APIENTRYP PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs); typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params); typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program); typedef void (APIENTRYP PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, void **pointer); typedef GLboolean (APIENTRYP PFNGLISPROGRAMNVPROC) (GLuint id); typedef void (APIENTRYP PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program); typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLdouble *v); typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *v); typedef void (APIENTRYP PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); typedef void (APIENTRYP PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform); typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer); typedef void (APIENTRYP PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei n, const GLuint *programs, GLboolean *residences); GLAPI void APIENTRY glBindProgramNV (GLenum target, GLuint id); GLAPI void APIENTRY glDeleteProgramsNV (GLsizei n, const GLuint *programs); GLAPI void APIENTRY glExecuteProgramNV (GLenum target, GLuint id, const GLfloat *params); GLAPI void APIENTRY glGenProgramsNV (GLsizei n, GLuint *programs); GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum target, GLuint index, GLenum pname, GLdouble *params); GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetProgramivNV (GLuint id, GLenum pname, GLint *params); GLAPI void APIENTRY glGetProgramStringNV (GLuint id, GLenum pname, GLubyte *program); GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum target, GLuint address, GLenum pname, GLint *params); GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint index, GLenum pname, GLdouble *params); GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint index, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetVertexAttribivNV (GLuint index, GLenum pname, GLint *params); GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint index, GLenum pname, void **pointer); GLAPI GLboolean APIENTRY glIsProgramNV (GLuint id); GLAPI void APIENTRY glLoadProgramNV (GLenum target, GLuint id, GLsizei len, const GLubyte *program); GLAPI void APIENTRY glProgramParameter4dNV (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glProgramParameter4dvNV (GLenum target, GLuint index, const GLdouble *v); GLAPI void APIENTRY glProgramParameter4fNV (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glProgramParameter4fvNV (GLenum target, GLuint index, const GLfloat *v); GLAPI void APIENTRY glProgramParameters4dvNV (GLenum target, GLuint index, GLsizei count, const GLdouble *v); GLAPI void APIENTRY glProgramParameters4fvNV (GLenum target, GLuint index, GLsizei count, const GLfloat *v); GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei n, const GLuint *programs); GLAPI void APIENTRY glTrackMatrixNV (GLenum target, GLuint address, GLenum matrix, GLenum transform); GLAPI void APIENTRY glVertexAttribPointerNV (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer); GLAPI void APIENTRY glVertexAttrib1dNV (GLuint index, GLdouble x); GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib1fNV (GLuint index, GLfloat x); GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib1sNV (GLuint index, GLshort x); GLAPI void APIENTRY glVertexAttrib1svNV (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib2dNV (GLuint index, GLdouble x, GLdouble y); GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib2fNV (GLuint index, GLfloat x, GLfloat y); GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib2sNV (GLuint index, GLshort x, GLshort y); GLAPI void APIENTRY glVertexAttrib2svNV (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib3dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib3fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib3sNV (GLuint index, GLshort x, GLshort y, GLshort z); GLAPI void APIENTRY glVertexAttrib3svNV (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib4dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib4fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib4sNV (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); GLAPI void APIENTRY glVertexAttrib4svNV (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint index, const GLubyte *v); GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint index, GLsizei count, const GLdouble *v); GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint index, GLsizei count, const GLfloat *v); GLAPI void APIENTRY glVertexAttribs1svNV (GLuint index, GLsizei count, const GLshort *v); GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint index, GLsizei count, const GLdouble *v); GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint index, GLsizei count, const GLfloat *v); GLAPI void APIENTRY glVertexAttribs2svNV (GLuint index, GLsizei count, const GLshort *v); GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint index, GLsizei count, const GLdouble *v); GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint index, GLsizei count, const GLfloat *v); GLAPI void APIENTRY glVertexAttribs3svNV (GLuint index, GLsizei count, const GLshort *v); GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint index, GLsizei count, const GLdouble *v); GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint index, GLsizei count, const GLfloat *v); GLAPI void APIENTRY glVertexAttribs4svNV (GLuint index, GLsizei count, const GLshort *v); GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint index, GLsizei count, const GLubyte *v); #endif #endif /* GL_NV_vertex_program */ #ifndef GL_NV_vertex_program1_1 #define GL_NV_vertex_program1_1 1 #endif /* GL_NV_vertex_program1_1 */ #ifndef GL_NV_vertex_program2 #define GL_NV_vertex_program2 1 #endif /* GL_NV_vertex_program2 */ #ifndef GL_NV_vertex_program2_option #define GL_NV_vertex_program2_option 1 #endif /* GL_NV_vertex_program2_option */ #ifndef GL_NV_vertex_program3 #define GL_NV_vertex_program3 1 #endif /* GL_NV_vertex_program3 */ #ifndef GL_NV_vertex_program4 #define GL_NV_vertex_program4 1 #define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD #endif /* GL_NV_vertex_program4 */ #ifndef GL_NV_video_capture #define GL_NV_video_capture 1 #define GL_VIDEO_BUFFER_NV 0x9020 #define GL_VIDEO_BUFFER_BINDING_NV 0x9021 #define GL_FIELD_UPPER_NV 0x9022 #define GL_FIELD_LOWER_NV 0x9023 #define GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024 #define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025 #define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026 #define GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027 #define GL_VIDEO_BUFFER_PITCH_NV 0x9028 #define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029 #define GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A #define GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B #define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C #define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D #define GL_PARTIAL_SUCCESS_NV 0x902E #define GL_SUCCESS_NV 0x902F #define GL_FAILURE_NV 0x9030 #define GL_YCBYCR8_422_NV 0x9031 #define GL_YCBAYCR8A_4224_NV 0x9032 #define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033 #define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034 #define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035 #define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036 #define GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037 #define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038 #define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039 #define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A #define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B #define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C typedef void (APIENTRYP PFNGLBEGINVIDEOCAPTURENVPROC) (GLuint video_capture_slot); typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); typedef void (APIENTRYP PFNGLENDVIDEOCAPTURENVPROC) (GLuint video_capture_slot); typedef void (APIENTRYP PFNGLGETVIDEOCAPTUREIVNVPROC) (GLuint video_capture_slot, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); typedef GLenum (APIENTRYP PFNGLVIDEOCAPTURENVPROC) (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBeginVideoCaptureNV (GLuint video_capture_slot); GLAPI void APIENTRY glBindVideoCaptureStreamBufferNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); GLAPI void APIENTRY glBindVideoCaptureStreamTextureNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); GLAPI void APIENTRY glEndVideoCaptureNV (GLuint video_capture_slot); GLAPI void APIENTRY glGetVideoCaptureivNV (GLuint video_capture_slot, GLenum pname, GLint *params); GLAPI void APIENTRY glGetVideoCaptureStreamivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); GLAPI void APIENTRY glGetVideoCaptureStreamfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetVideoCaptureStreamdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); GLAPI GLenum APIENTRY glVideoCaptureNV (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); GLAPI void APIENTRY glVideoCaptureStreamParameterivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); GLAPI void APIENTRY glVideoCaptureStreamParameterfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glVideoCaptureStreamParameterdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); #endif #endif /* GL_NV_video_capture */ #ifndef GL_NV_viewport_array2 #define GL_NV_viewport_array2 1 #endif /* GL_NV_viewport_array2 */ #ifndef GL_NV_viewport_swizzle #define GL_NV_viewport_swizzle 1 #define GL_VIEWPORT_SWIZZLE_POSITIVE_X_NV 0x9350 #define GL_VIEWPORT_SWIZZLE_NEGATIVE_X_NV 0x9351 #define GL_VIEWPORT_SWIZZLE_POSITIVE_Y_NV 0x9352 #define GL_VIEWPORT_SWIZZLE_NEGATIVE_Y_NV 0x9353 #define GL_VIEWPORT_SWIZZLE_POSITIVE_Z_NV 0x9354 #define GL_VIEWPORT_SWIZZLE_NEGATIVE_Z_NV 0x9355 #define GL_VIEWPORT_SWIZZLE_POSITIVE_W_NV 0x9356 #define GL_VIEWPORT_SWIZZLE_NEGATIVE_W_NV 0x9357 #define GL_VIEWPORT_SWIZZLE_X_NV 0x9358 #define GL_VIEWPORT_SWIZZLE_Y_NV 0x9359 #define GL_VIEWPORT_SWIZZLE_Z_NV 0x935A #define GL_VIEWPORT_SWIZZLE_W_NV 0x935B typedef void (APIENTRYP PFNGLVIEWPORTSWIZZLENVPROC) (GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glViewportSwizzleNV (GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew); #endif #endif /* GL_NV_viewport_swizzle */ #ifndef GL_OML_interlace #define GL_OML_interlace 1 #define GL_INTERLACE_OML 0x8980 #define GL_INTERLACE_READ_OML 0x8981 #endif /* GL_OML_interlace */ #ifndef GL_OML_resample #define GL_OML_resample 1 #define GL_PACK_RESAMPLE_OML 0x8984 #define GL_UNPACK_RESAMPLE_OML 0x8985 #define GL_RESAMPLE_REPLICATE_OML 0x8986 #define GL_RESAMPLE_ZERO_FILL_OML 0x8987 #define GL_RESAMPLE_AVERAGE_OML 0x8988 #define GL_RESAMPLE_DECIMATE_OML 0x8989 #endif /* GL_OML_resample */ #ifndef GL_OML_subsample #define GL_OML_subsample 1 #define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 #define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 #endif /* GL_OML_subsample */ #ifndef GL_OVR_multiview #define GL_OVR_multiview 1 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR 0x9630 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR 0x9632 #define GL_MAX_VIEWS_OVR 0x9631 #define GL_FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR 0x9633 typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFramebufferTextureMultiviewOVR (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews); #endif #endif /* GL_OVR_multiview */ #ifndef GL_OVR_multiview2 #define GL_OVR_multiview2 1 #endif /* GL_OVR_multiview2 */ #ifndef GL_PGI_misc_hints #define GL_PGI_misc_hints 1 #define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8 #define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD #define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE #define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202 #define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203 #define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204 #define GL_ALWAYS_FAST_HINT_PGI 0x1A20C #define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D #define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E #define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F #define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210 #define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211 #define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216 #define GL_STRICT_LIGHTING_HINT_PGI 0x1A217 #define GL_STRICT_SCISSOR_HINT_PGI 0x1A218 #define GL_FULL_STIPPLE_HINT_PGI 0x1A219 #define GL_CLIP_NEAR_HINT_PGI 0x1A220 #define GL_CLIP_FAR_HINT_PGI 0x1A221 #define GL_WIDE_LINE_HINT_PGI 0x1A222 #define GL_BACK_NORMALS_HINT_PGI 0x1A223 typedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glHintPGI (GLenum target, GLint mode); #endif #endif /* GL_PGI_misc_hints */ #ifndef GL_PGI_vertex_hints #define GL_PGI_vertex_hints 1 #define GL_VERTEX_DATA_HINT_PGI 0x1A22A #define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B #define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C #define GL_MAX_VERTEX_HINT_PGI 0x1A22D #define GL_COLOR3_BIT_PGI 0x00010000 #define GL_COLOR4_BIT_PGI 0x00020000 #define GL_EDGEFLAG_BIT_PGI 0x00040000 #define GL_INDEX_BIT_PGI 0x00080000 #define GL_MAT_AMBIENT_BIT_PGI 0x00100000 #define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 #define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 #define GL_MAT_EMISSION_BIT_PGI 0x00800000 #define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 #define GL_MAT_SHININESS_BIT_PGI 0x02000000 #define GL_MAT_SPECULAR_BIT_PGI 0x04000000 #define GL_NORMAL_BIT_PGI 0x08000000 #define GL_TEXCOORD1_BIT_PGI 0x10000000 #define GL_TEXCOORD2_BIT_PGI 0x20000000 #define GL_TEXCOORD3_BIT_PGI 0x40000000 #define GL_TEXCOORD4_BIT_PGI 0x80000000 #define GL_VERTEX23_BIT_PGI 0x00000004 #define GL_VERTEX4_BIT_PGI 0x00000008 #endif /* GL_PGI_vertex_hints */ #ifndef GL_REND_screen_coordinates #define GL_REND_screen_coordinates 1 #define GL_SCREEN_COORDINATES_REND 0x8490 #define GL_INVERTED_SCREEN_W_REND 0x8491 #endif /* GL_REND_screen_coordinates */ #ifndef GL_S3_s3tc #define GL_S3_s3tc 1 #define GL_RGB_S3TC 0x83A0 #define GL_RGB4_S3TC 0x83A1 #define GL_RGBA_S3TC 0x83A2 #define GL_RGBA4_S3TC 0x83A3 #define GL_RGBA_DXT5_S3TC 0x83A4 #define GL_RGBA4_DXT5_S3TC 0x83A5 #endif /* GL_S3_s3tc */ #ifndef GL_SGIS_detail_texture #define GL_SGIS_detail_texture 1 #define GL_DETAIL_TEXTURE_2D_SGIS 0x8095 #define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096 #define GL_LINEAR_DETAIL_SGIS 0x8097 #define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098 #define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099 #define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A #define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B #define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C typedef void (APIENTRYP PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); typedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum target, GLfloat *points); #endif #endif /* GL_SGIS_detail_texture */ #ifndef GL_SGIS_fog_function #define GL_SGIS_fog_function 1 #define GL_FOG_FUNC_SGIS 0x812A #define GL_FOG_FUNC_POINTS_SGIS 0x812B #define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C typedef void (APIENTRYP PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points); typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFogFuncSGIS (GLsizei n, const GLfloat *points); GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *points); #endif #endif /* GL_SGIS_fog_function */ #ifndef GL_SGIS_generate_mipmap #define GL_SGIS_generate_mipmap 1 #define GL_GENERATE_MIPMAP_SGIS 0x8191 #define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 #endif /* GL_SGIS_generate_mipmap */ #ifndef GL_SGIS_multisample #define GL_SGIS_multisample 1 #define GL_MULTISAMPLE_SGIS 0x809D #define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E #define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F #define GL_SAMPLE_MASK_SGIS 0x80A0 #define GL_1PASS_SGIS 0x80A1 #define GL_2PASS_0_SGIS 0x80A2 #define GL_2PASS_1_SGIS 0x80A3 #define GL_4PASS_0_SGIS 0x80A4 #define GL_4PASS_1_SGIS 0x80A5 #define GL_4PASS_2_SGIS 0x80A6 #define GL_4PASS_3_SGIS 0x80A7 #define GL_SAMPLE_BUFFERS_SGIS 0x80A8 #define GL_SAMPLES_SGIS 0x80A9 #define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA #define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB #define GL_SAMPLE_PATTERN_SGIS 0x80AC typedef void (APIENTRYP PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert); typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSampleMaskSGIS (GLclampf value, GLboolean invert); GLAPI void APIENTRY glSamplePatternSGIS (GLenum pattern); #endif #endif /* GL_SGIS_multisample */ #ifndef GL_SGIS_pixel_texture #define GL_SGIS_pixel_texture 1 #define GL_PIXEL_TEXTURE_SGIS 0x8353 #define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354 #define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355 #define GL_PIXEL_GROUP_COLOR_SGIS 0x8356 typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param); typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum pname, GLint param); GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum pname, const GLint *params); GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum pname, GLfloat param); GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum pname, const GLfloat *params); GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum pname, GLint *params); GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum pname, GLfloat *params); #endif #endif /* GL_SGIS_pixel_texture */ #ifndef GL_SGIS_point_line_texgen #define GL_SGIS_point_line_texgen 1 #define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 #define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 #define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 #define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 #define GL_EYE_POINT_SGIS 0x81F4 #define GL_OBJECT_POINT_SGIS 0x81F5 #define GL_EYE_LINE_SGIS 0x81F6 #define GL_OBJECT_LINE_SGIS 0x81F7 #endif /* GL_SGIS_point_line_texgen */ #ifndef GL_SGIS_point_parameters #define GL_SGIS_point_parameters 1 #define GL_POINT_SIZE_MIN_SGIS 0x8126 #define GL_POINT_SIZE_MAX_SGIS 0x8127 #define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 #define GL_DISTANCE_ATTENUATION_SGIS 0x8129 typedef void (APIENTRYP PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPointParameterfSGIS (GLenum pname, GLfloat param); GLAPI void APIENTRY glPointParameterfvSGIS (GLenum pname, const GLfloat *params); #endif #endif /* GL_SGIS_point_parameters */ #ifndef GL_SGIS_sharpen_texture #define GL_SGIS_sharpen_texture 1 #define GL_LINEAR_SHARPEN_SGIS 0x80AD #define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE #define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF #define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0 typedef void (APIENTRYP PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); typedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum target, GLfloat *points); #endif #endif /* GL_SGIS_sharpen_texture */ #ifndef GL_SGIS_texture4D #define GL_SGIS_texture4D 1 #define GL_PACK_SKIP_VOLUMES_SGIS 0x8130 #define GL_PACK_IMAGE_DEPTH_SGIS 0x8131 #define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132 #define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133 #define GL_TEXTURE_4D_SGIS 0x8134 #define GL_PROXY_TEXTURE_4D_SGIS 0x8135 #define GL_TEXTURE_4DSIZE_SGIS 0x8136 #define GL_TEXTURE_WRAP_Q_SGIS 0x8137 #define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138 #define GL_TEXTURE_4D_BINDING_SGIS 0x814F typedef void (APIENTRYP PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void *pixels); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexImage4DSGIS (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glTexSubImage4DSGIS (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void *pixels); #endif #endif /* GL_SGIS_texture4D */ #ifndef GL_SGIS_texture_border_clamp #define GL_SGIS_texture_border_clamp 1 #define GL_CLAMP_TO_BORDER_SGIS 0x812D #endif /* GL_SGIS_texture_border_clamp */ #ifndef GL_SGIS_texture_color_mask #define GL_SGIS_texture_color_mask 1 #define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF typedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); #endif #endif /* GL_SGIS_texture_color_mask */ #ifndef GL_SGIS_texture_edge_clamp #define GL_SGIS_texture_edge_clamp 1 #define GL_CLAMP_TO_EDGE_SGIS 0x812F #endif /* GL_SGIS_texture_edge_clamp */ #ifndef GL_SGIS_texture_filter4 #define GL_SGIS_texture_filter4 1 #define GL_FILTER4_SGIS 0x8146 #define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 typedef void (APIENTRYP PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights); typedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum target, GLenum filter, GLfloat *weights); GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); #endif #endif /* GL_SGIS_texture_filter4 */ #ifndef GL_SGIS_texture_lod #define GL_SGIS_texture_lod 1 #define GL_TEXTURE_MIN_LOD_SGIS 0x813A #define GL_TEXTURE_MAX_LOD_SGIS 0x813B #define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C #define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D #endif /* GL_SGIS_texture_lod */ #ifndef GL_SGIS_texture_select #define GL_SGIS_texture_select 1 #define GL_DUAL_ALPHA4_SGIS 0x8110 #define GL_DUAL_ALPHA8_SGIS 0x8111 #define GL_DUAL_ALPHA12_SGIS 0x8112 #define GL_DUAL_ALPHA16_SGIS 0x8113 #define GL_DUAL_LUMINANCE4_SGIS 0x8114 #define GL_DUAL_LUMINANCE8_SGIS 0x8115 #define GL_DUAL_LUMINANCE12_SGIS 0x8116 #define GL_DUAL_LUMINANCE16_SGIS 0x8117 #define GL_DUAL_INTENSITY4_SGIS 0x8118 #define GL_DUAL_INTENSITY8_SGIS 0x8119 #define GL_DUAL_INTENSITY12_SGIS 0x811A #define GL_DUAL_INTENSITY16_SGIS 0x811B #define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C #define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D #define GL_QUAD_ALPHA4_SGIS 0x811E #define GL_QUAD_ALPHA8_SGIS 0x811F #define GL_QUAD_LUMINANCE4_SGIS 0x8120 #define GL_QUAD_LUMINANCE8_SGIS 0x8121 #define GL_QUAD_INTENSITY4_SGIS 0x8122 #define GL_QUAD_INTENSITY8_SGIS 0x8123 #define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124 #define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125 #endif /* GL_SGIS_texture_select */ #ifndef GL_SGIX_async #define GL_SGIX_async 1 #define GL_ASYNC_MARKER_SGIX 0x8329 typedef void (APIENTRYP PFNGLASYNCMARKERSGIXPROC) (GLuint marker); typedef GLint (APIENTRYP PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp); typedef GLint (APIENTRYP PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp); typedef GLuint (APIENTRYP PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range); typedef void (APIENTRYP PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range); typedef GLboolean (APIENTRYP PFNGLISASYNCMARKERSGIXPROC) (GLuint marker); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint marker); GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *markerp); GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *markerp); GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei range); GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint marker, GLsizei range); GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint marker); #endif #endif /* GL_SGIX_async */ #ifndef GL_SGIX_async_histogram #define GL_SGIX_async_histogram 1 #define GL_ASYNC_HISTOGRAM_SGIX 0x832C #define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D #endif /* GL_SGIX_async_histogram */ #ifndef GL_SGIX_async_pixel #define GL_SGIX_async_pixel 1 #define GL_ASYNC_TEX_IMAGE_SGIX 0x835C #define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D #define GL_ASYNC_READ_PIXELS_SGIX 0x835E #define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F #define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 #define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 #endif /* GL_SGIX_async_pixel */ #ifndef GL_SGIX_blend_alpha_minmax #define GL_SGIX_blend_alpha_minmax 1 #define GL_ALPHA_MIN_SGIX 0x8320 #define GL_ALPHA_MAX_SGIX 0x8321 #endif /* GL_SGIX_blend_alpha_minmax */ #ifndef GL_SGIX_calligraphic_fragment #define GL_SGIX_calligraphic_fragment 1 #define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 #endif /* GL_SGIX_calligraphic_fragment */ #ifndef GL_SGIX_clipmap #define GL_SGIX_clipmap 1 #define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170 #define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171 #define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172 #define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173 #define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174 #define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175 #define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176 #define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177 #define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178 #define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D #define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E #define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F #endif /* GL_SGIX_clipmap */ #ifndef GL_SGIX_convolution_accuracy #define GL_SGIX_convolution_accuracy 1 #define GL_CONVOLUTION_HINT_SGIX 0x8316 #endif /* GL_SGIX_convolution_accuracy */ #ifndef GL_SGIX_depth_pass_instrument #define GL_SGIX_depth_pass_instrument 1 #endif /* GL_SGIX_depth_pass_instrument */ #ifndef GL_SGIX_depth_texture #define GL_SGIX_depth_texture 1 #define GL_DEPTH_COMPONENT16_SGIX 0x81A5 #define GL_DEPTH_COMPONENT24_SGIX 0x81A6 #define GL_DEPTH_COMPONENT32_SGIX 0x81A7 #endif /* GL_SGIX_depth_texture */ #ifndef GL_SGIX_flush_raster #define GL_SGIX_flush_raster 1 typedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFlushRasterSGIX (void); #endif #endif /* GL_SGIX_flush_raster */ #ifndef GL_SGIX_fog_offset #define GL_SGIX_fog_offset 1 #define GL_FOG_OFFSET_SGIX 0x8198 #define GL_FOG_OFFSET_VALUE_SGIX 0x8199 #endif /* GL_SGIX_fog_offset */ #ifndef GL_SGIX_fragment_lighting #define GL_SGIX_fragment_lighting 1 #define GL_FRAGMENT_LIGHTING_SGIX 0x8400 #define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401 #define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402 #define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403 #define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404 #define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405 #define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406 #define GL_LIGHT_ENV_MODE_SGIX 0x8407 #define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408 #define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409 #define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A #define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B #define GL_FRAGMENT_LIGHT0_SGIX 0x840C #define GL_FRAGMENT_LIGHT1_SGIX 0x840D #define GL_FRAGMENT_LIGHT2_SGIX 0x840E #define GL_FRAGMENT_LIGHT3_SGIX 0x840F #define GL_FRAGMENT_LIGHT4_SGIX 0x8410 #define GL_FRAGMENT_LIGHT5_SGIX 0x8411 #define GL_FRAGMENT_LIGHT6_SGIX 0x8412 #define GL_FRAGMENT_LIGHT7_SGIX 0x8413 typedef void (APIENTRYP PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode); typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param); typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum face, GLenum mode); GLAPI void APIENTRY glFragmentLightfSGIX (GLenum light, GLenum pname, GLfloat param); GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum light, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glFragmentLightiSGIX (GLenum light, GLenum pname, GLint param); GLAPI void APIENTRY glFragmentLightivSGIX (GLenum light, GLenum pname, const GLint *params); GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum pname, GLfloat param); GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum pname, const GLfloat *params); GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum pname, GLint param); GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum pname, const GLint *params); GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum face, GLenum pname, GLfloat param); GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum face, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum face, GLenum pname, GLint param); GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum face, GLenum pname, const GLint *params); GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum light, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum light, GLenum pname, GLint *params); GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum face, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum face, GLenum pname, GLint *params); GLAPI void APIENTRY glLightEnviSGIX (GLenum pname, GLint param); #endif #endif /* GL_SGIX_fragment_lighting */ #ifndef GL_SGIX_framezoom #define GL_SGIX_framezoom 1 #define GL_FRAMEZOOM_SGIX 0x818B #define GL_FRAMEZOOM_FACTOR_SGIX 0x818C #define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D typedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC) (GLint factor); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFrameZoomSGIX (GLint factor); #endif #endif /* GL_SGIX_framezoom */ #ifndef GL_SGIX_igloo_interface #define GL_SGIX_igloo_interface 1 typedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const void *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum pname, const void *params); #endif #endif /* GL_SGIX_igloo_interface */ #ifndef GL_SGIX_instruments #define GL_SGIX_instruments 1 #define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 #define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 typedef GLint (APIENTRYP PFNGLGETINSTRUMENTSSGIXPROC) (void); typedef void (APIENTRYP PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer); typedef GLint (APIENTRYP PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p); typedef void (APIENTRYP PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker); typedef void (APIENTRYP PFNGLSTARTINSTRUMENTSSGIXPROC) (void); typedef void (APIENTRYP PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLint APIENTRY glGetInstrumentsSGIX (void); GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei size, GLint *buffer); GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *marker_p); GLAPI void APIENTRY glReadInstrumentsSGIX (GLint marker); GLAPI void APIENTRY glStartInstrumentsSGIX (void); GLAPI void APIENTRY glStopInstrumentsSGIX (GLint marker); #endif #endif /* GL_SGIX_instruments */ #ifndef GL_SGIX_interlace #define GL_SGIX_interlace 1 #define GL_INTERLACE_SGIX 0x8094 #endif /* GL_SGIX_interlace */ #ifndef GL_SGIX_ir_instrument1 #define GL_SGIX_ir_instrument1 1 #define GL_IR_INSTRUMENT1_SGIX 0x817F #endif /* GL_SGIX_ir_instrument1 */ #ifndef GL_SGIX_list_priority #define GL_SGIX_list_priority 1 #define GL_LIST_PRIORITY_SGIX 0x8182 typedef void (APIENTRYP PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint list, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetListParameterivSGIX (GLuint list, GLenum pname, GLint *params); GLAPI void APIENTRY glListParameterfSGIX (GLuint list, GLenum pname, GLfloat param); GLAPI void APIENTRY glListParameterfvSGIX (GLuint list, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glListParameteriSGIX (GLuint list, GLenum pname, GLint param); GLAPI void APIENTRY glListParameterivSGIX (GLuint list, GLenum pname, const GLint *params); #endif #endif /* GL_SGIX_list_priority */ #ifndef GL_SGIX_pixel_texture #define GL_SGIX_pixel_texture 1 #define GL_PIXEL_TEX_GEN_SGIX 0x8139 #define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPixelTexGenSGIX (GLenum mode); #endif #endif /* GL_SGIX_pixel_texture */ #ifndef GL_SGIX_pixel_tiles #define GL_SGIX_pixel_tiles 1 #define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E #define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F #define GL_PIXEL_TILE_WIDTH_SGIX 0x8140 #define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141 #define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142 #define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143 #define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144 #define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145 #endif /* GL_SGIX_pixel_tiles */ #ifndef GL_SGIX_polynomial_ffd #define GL_SGIX_polynomial_ffd 1 #define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 #define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 #define GL_GEOMETRY_DEFORMATION_SGIX 0x8194 #define GL_TEXTURE_DEFORMATION_SGIX 0x8195 #define GL_DEFORMATIONS_MASK_SGIX 0x8196 #define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197 typedef void (APIENTRYP PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); typedef void (APIENTRYP PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); typedef void (APIENTRYP PFNGLDEFORMSGIXPROC) (GLbitfield mask); typedef void (APIENTRYP PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDeformationMap3dSGIX (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); GLAPI void APIENTRY glDeformationMap3fSGIX (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); GLAPI void APIENTRY glDeformSGIX (GLbitfield mask); GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield mask); #endif #endif /* GL_SGIX_polynomial_ffd */ #ifndef GL_SGIX_reference_plane #define GL_SGIX_reference_plane 1 #define GL_REFERENCE_PLANE_SGIX 0x817D #define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E typedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *equation); #endif #endif /* GL_SGIX_reference_plane */ #ifndef GL_SGIX_resample #define GL_SGIX_resample 1 #define GL_PACK_RESAMPLE_SGIX 0x842E #define GL_UNPACK_RESAMPLE_SGIX 0x842F #define GL_RESAMPLE_REPLICATE_SGIX 0x8433 #define GL_RESAMPLE_ZERO_FILL_SGIX 0x8434 #define GL_RESAMPLE_DECIMATE_SGIX 0x8430 #endif /* GL_SGIX_resample */ #ifndef GL_SGIX_scalebias_hint #define GL_SGIX_scalebias_hint 1 #define GL_SCALEBIAS_HINT_SGIX 0x8322 #endif /* GL_SGIX_scalebias_hint */ #ifndef GL_SGIX_shadow #define GL_SGIX_shadow 1 #define GL_TEXTURE_COMPARE_SGIX 0x819A #define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B #define GL_TEXTURE_LEQUAL_R_SGIX 0x819C #define GL_TEXTURE_GEQUAL_R_SGIX 0x819D #endif /* GL_SGIX_shadow */ #ifndef GL_SGIX_shadow_ambient #define GL_SGIX_shadow_ambient 1 #define GL_SHADOW_AMBIENT_SGIX 0x80BF #endif /* GL_SGIX_shadow_ambient */ #ifndef GL_SGIX_sprite #define GL_SGIX_sprite 1 #define GL_SPRITE_SGIX 0x8148 #define GL_SPRITE_MODE_SGIX 0x8149 #define GL_SPRITE_AXIS_SGIX 0x814A #define GL_SPRITE_TRANSLATION_SGIX 0x814B #define GL_SPRITE_AXIAL_SGIX 0x814C #define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D #define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E typedef void (APIENTRYP PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param); typedef void (APIENTRYP PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum pname, GLfloat param); GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum pname, const GLfloat *params); GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum pname, GLint param); GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum pname, const GLint *params); #endif #endif /* GL_SGIX_sprite */ #ifndef GL_SGIX_subsample #define GL_SGIX_subsample 1 #define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0 #define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1 #define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2 #define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3 #define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4 #endif /* GL_SGIX_subsample */ #ifndef GL_SGIX_tag_sample_buffer #define GL_SGIX_tag_sample_buffer 1 typedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTagSampleBufferSGIX (void); #endif #endif /* GL_SGIX_tag_sample_buffer */ #ifndef GL_SGIX_texture_add_env #define GL_SGIX_texture_add_env 1 #define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE #endif /* GL_SGIX_texture_add_env */ #ifndef GL_SGIX_texture_coordinate_clamp #define GL_SGIX_texture_coordinate_clamp 1 #define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 #define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A #define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B #endif /* GL_SGIX_texture_coordinate_clamp */ #ifndef GL_SGIX_texture_lod_bias #define GL_SGIX_texture_lod_bias 1 #define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E #define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F #define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 #endif /* GL_SGIX_texture_lod_bias */ #ifndef GL_SGIX_texture_multi_buffer #define GL_SGIX_texture_multi_buffer 1 #define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E #endif /* GL_SGIX_texture_multi_buffer */ #ifndef GL_SGIX_texture_scale_bias #define GL_SGIX_texture_scale_bias 1 #define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 #define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A #define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B #define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C #endif /* GL_SGIX_texture_scale_bias */ #ifndef GL_SGIX_vertex_preclip #define GL_SGIX_vertex_preclip 1 #define GL_VERTEX_PRECLIP_SGIX 0x83EE #define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF #endif /* GL_SGIX_vertex_preclip */ #ifndef GL_SGIX_ycrcb #define GL_SGIX_ycrcb 1 #define GL_YCRCB_422_SGIX 0x81BB #define GL_YCRCB_444_SGIX 0x81BC #endif /* GL_SGIX_ycrcb */ #ifndef GL_SGIX_ycrcb_subsample #define GL_SGIX_ycrcb_subsample 1 #endif /* GL_SGIX_ycrcb_subsample */ #ifndef GL_SGIX_ycrcba #define GL_SGIX_ycrcba 1 #define GL_YCRCB_SGIX 0x8318 #define GL_YCRCBA_SGIX 0x8319 #endif /* GL_SGIX_ycrcba */ #ifndef GL_SGI_color_matrix #define GL_SGI_color_matrix 1 #define GL_COLOR_MATRIX_SGI 0x80B1 #define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 #define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 #define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 #define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 #define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 #define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 #define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 #define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 #define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA #define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB #endif /* GL_SGI_color_matrix */ #ifndef GL_SGI_color_table #define GL_SGI_color_table 1 #define GL_COLOR_TABLE_SGI 0x80D0 #define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 #define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 #define GL_PROXY_COLOR_TABLE_SGI 0x80D3 #define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 #define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 #define GL_COLOR_TABLE_SCALE_SGI 0x80D6 #define GL_COLOR_TABLE_BIAS_SGI 0x80D7 #define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 #define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 #define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA #define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB #define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC #define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD #define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE #define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF typedef void (APIENTRYP PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); typedef void (APIENTRYP PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, void *table); typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glColorTableSGI (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glColorTableParameterivSGI (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glCopyColorTableSGI (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glGetColorTableSGI (GLenum target, GLenum format, GLenum type, void *table); GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum target, GLenum pname, GLint *params); #endif #endif /* GL_SGI_color_table */ #ifndef GL_SGI_texture_color_table #define GL_SGI_texture_color_table 1 #define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC #define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD #endif /* GL_SGI_texture_color_table */ #ifndef GL_SUNX_constant_data #define GL_SUNX_constant_data 1 #define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 #define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 typedef void (APIENTRYP PFNGLFINISHTEXTURESUNXPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFinishTextureSUNX (void); #endif #endif /* GL_SUNX_constant_data */ #ifndef GL_SUN_convolution_border_modes #define GL_SUN_convolution_border_modes 1 #define GL_WRAP_BORDER_SUN 0x81D4 #endif /* GL_SUN_convolution_border_modes */ #ifndef GL_SUN_global_alpha #define GL_SUN_global_alpha 1 #define GL_GLOBAL_ALPHA_SUN 0x81D9 #define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor); typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor); typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor); typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor); typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor); typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor); typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor); typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte factor); GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort factor); GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint factor); GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat factor); GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble factor); GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte factor); GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort factor); GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint factor); #endif #endif /* GL_SUN_global_alpha */ #ifndef GL_SUN_mesh_array #define GL_SUN_mesh_array 1 #define GL_QUAD_MESH_SUN 0x8614 #define GL_TRIANGLE_MESH_SUN 0x8615 typedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum mode, GLint first, GLsizei count, GLsizei width); #endif #endif /* GL_SUN_mesh_array */ #ifndef GL_SUN_slice_accum #define GL_SUN_slice_accum 1 #define GL_SLICE_ACCUM_SUN 0x85CC #endif /* GL_SUN_slice_accum */ #ifndef GL_SUN_triangle_list #define GL_SUN_triangle_list 1 #define GL_RESTART_SUN 0x0001 #define GL_REPLACE_MIDDLE_SUN 0x0002 #define GL_REPLACE_OLDEST_SUN 0x0003 #define GL_TRIANGLE_LIST_SUN 0x81D7 #define GL_REPLACEMENT_CODE_SUN 0x81D8 #define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 #define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 #define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 #define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 #define GL_R1UI_V3F_SUN 0x85C4 #define GL_R1UI_C4UB_V3F_SUN 0x85C5 #define GL_R1UI_C3F_V3F_SUN 0x85C6 #define GL_R1UI_N3F_V3F_SUN 0x85C7 #define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 #define GL_R1UI_T2F_V3F_SUN 0x85C9 #define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA #define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB typedef void (APIENTRYP PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code); typedef void (APIENTRYP PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const void **pointer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint code); GLAPI void APIENTRY glReplacementCodeusSUN (GLushort code); GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte code); GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *code); GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *code); GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *code); GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum type, GLsizei stride, const void **pointer); #endif #endif /* GL_SUN_triangle_list */ #ifndef GL_SUN_vertex #define GL_SUN_vertex 1 typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v); typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v); typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v); typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v); typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v); typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v); typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v); typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v); typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v); typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v); typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *v); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint *rc, const GLubyte *c, const GLfloat *v); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *v); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *n, const GLfloat *v); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *v); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *c, const GLfloat *v); GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *c, const GLfloat *v); GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *c, const GLfloat *v); GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *n, const GLfloat *v); GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *c, const GLfloat *n, const GLfloat *v); GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *tc, const GLfloat *v); GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *tc, const GLfloat *v); GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *tc, const GLubyte *c, const GLfloat *v); GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *v); GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *n, const GLfloat *v); GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLuint rc, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLuint *rc, const GLfloat *v); GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint *rc, const GLubyte *c, const GLfloat *v); GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *v); GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *n, const GLfloat *v); GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *v); GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); #endif #endif /* GL_SUN_vertex */ #ifndef GL_WIN_phong_shading #define GL_WIN_phong_shading 1 #define GL_PHONG_WIN 0x80EA #define GL_PHONG_HINT_WIN 0x80EB #endif /* GL_WIN_phong_shading */ #ifndef GL_WIN_specular_fog #define GL_WIN_specular_fog 1 #define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC #endif /* GL_WIN_specular_fog */ #ifdef __cplusplus } #endif #endif ================================================ FILE: libraries/sdl2/SDL_opengles.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_opengles.h * * This is a simple file to encapsulate the OpenGL ES 1.X API headers. */ #include "SDL_config.h" #ifdef __IPHONEOS__ #include #include #else #include #include #endif #ifndef APIENTRY #define APIENTRY #endif ================================================ FILE: libraries/sdl2/SDL_opengles2.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_opengles2.h * * This is a simple file to encapsulate the OpenGL ES 2.0 API headers. */ #include "SDL_config.h" #if !defined(_MSC_VER) && !defined(SDL_USE_BUILTIN_OPENGL_DEFINITIONS) #ifdef __IPHONEOS__ #include #include #else #include #include #include #endif #else /* _MSC_VER */ /* OpenGL ES2 headers for Visual Studio */ #include "SDL_opengles2_khrplatform.h" #include "SDL_opengles2_gl2platform.h" #include "SDL_opengles2_gl2.h" #include "SDL_opengles2_gl2ext.h" #endif /* _MSC_VER */ #ifndef APIENTRY #define APIENTRY GL_APIENTRY #endif ================================================ FILE: libraries/sdl2/SDL_opengles2_gl2.h ================================================ #ifndef __gles2_gl2_h_ #define __gles2_gl2_h_ 1 #ifdef __cplusplus extern "C" { #endif /* ** Copyright 2013-2020 The Khronos Group Inc. ** SPDX-License-Identifier: MIT ** ** This header is generated from the Khronos OpenGL / OpenGL ES XML ** API Registry. The current version of the Registry, generator scripts ** used to make the header, and the header can be found at ** https://github.com/KhronosGroup/OpenGL-Registry */ /*#include */ #ifndef GL_APIENTRYP #define GL_APIENTRYP GL_APIENTRY* #endif #ifndef GL_GLES_PROTOTYPES #define GL_GLES_PROTOTYPES 1 #endif /* Generated on date 20220530 */ /* Generated C header for: * API: gles2 * Profile: common * Versions considered: 2\.[0-9] * Versions emitted: .* * Default extensions included: None * Additional extensions included: _nomatch_^ * Extensions removed: _nomatch_^ */ #ifndef GL_ES_VERSION_2_0 #define GL_ES_VERSION_2_0 1 /*#include */ typedef khronos_int8_t GLbyte; typedef khronos_float_t GLclampf; typedef khronos_int32_t GLfixed; typedef khronos_int16_t GLshort; typedef khronos_uint16_t GLushort; typedef void GLvoid; typedef struct __GLsync *GLsync; typedef khronos_int64_t GLint64; typedef khronos_uint64_t GLuint64; typedef unsigned int GLenum; typedef unsigned int GLuint; typedef char GLchar; typedef khronos_float_t GLfloat; typedef khronos_ssize_t GLsizeiptr; typedef khronos_intptr_t GLintptr; typedef unsigned int GLbitfield; typedef int GLint; typedef unsigned char GLboolean; typedef int GLsizei; typedef khronos_uint8_t GLubyte; #define GL_DEPTH_BUFFER_BIT 0x00000100 #define GL_STENCIL_BUFFER_BIT 0x00000400 #define GL_COLOR_BUFFER_BIT 0x00004000 #define GL_FALSE 0 #define GL_TRUE 1 #define GL_POINTS 0x0000 #define GL_LINES 0x0001 #define GL_LINE_LOOP 0x0002 #define GL_LINE_STRIP 0x0003 #define GL_TRIANGLES 0x0004 #define GL_TRIANGLE_STRIP 0x0005 #define GL_TRIANGLE_FAN 0x0006 #define GL_ZERO 0 #define GL_ONE 1 #define GL_SRC_COLOR 0x0300 #define GL_ONE_MINUS_SRC_COLOR 0x0301 #define GL_SRC_ALPHA 0x0302 #define GL_ONE_MINUS_SRC_ALPHA 0x0303 #define GL_DST_ALPHA 0x0304 #define GL_ONE_MINUS_DST_ALPHA 0x0305 #define GL_DST_COLOR 0x0306 #define GL_ONE_MINUS_DST_COLOR 0x0307 #define GL_SRC_ALPHA_SATURATE 0x0308 #define GL_FUNC_ADD 0x8006 #define GL_BLEND_EQUATION 0x8009 #define GL_BLEND_EQUATION_RGB 0x8009 #define GL_BLEND_EQUATION_ALPHA 0x883D #define GL_FUNC_SUBTRACT 0x800A #define GL_FUNC_REVERSE_SUBTRACT 0x800B #define GL_BLEND_DST_RGB 0x80C8 #define GL_BLEND_SRC_RGB 0x80C9 #define GL_BLEND_DST_ALPHA 0x80CA #define GL_BLEND_SRC_ALPHA 0x80CB #define GL_CONSTANT_COLOR 0x8001 #define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 #define GL_CONSTANT_ALPHA 0x8003 #define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 #define GL_BLEND_COLOR 0x8005 #define GL_ARRAY_BUFFER 0x8892 #define GL_ELEMENT_ARRAY_BUFFER 0x8893 #define GL_ARRAY_BUFFER_BINDING 0x8894 #define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 #define GL_STREAM_DRAW 0x88E0 #define GL_STATIC_DRAW 0x88E4 #define GL_DYNAMIC_DRAW 0x88E8 #define GL_BUFFER_SIZE 0x8764 #define GL_BUFFER_USAGE 0x8765 #define GL_CURRENT_VERTEX_ATTRIB 0x8626 #define GL_FRONT 0x0404 #define GL_BACK 0x0405 #define GL_FRONT_AND_BACK 0x0408 #define GL_TEXTURE_2D 0x0DE1 #define GL_CULL_FACE 0x0B44 #define GL_BLEND 0x0BE2 #define GL_DITHER 0x0BD0 #define GL_STENCIL_TEST 0x0B90 #define GL_DEPTH_TEST 0x0B71 #define GL_SCISSOR_TEST 0x0C11 #define GL_POLYGON_OFFSET_FILL 0x8037 #define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E #define GL_SAMPLE_COVERAGE 0x80A0 #define GL_NO_ERROR 0 #define GL_INVALID_ENUM 0x0500 #define GL_INVALID_VALUE 0x0501 #define GL_INVALID_OPERATION 0x0502 #define GL_OUT_OF_MEMORY 0x0505 #define GL_CW 0x0900 #define GL_CCW 0x0901 #define GL_LINE_WIDTH 0x0B21 #define GL_ALIASED_POINT_SIZE_RANGE 0x846D #define GL_ALIASED_LINE_WIDTH_RANGE 0x846E #define GL_CULL_FACE_MODE 0x0B45 #define GL_FRONT_FACE 0x0B46 #define GL_DEPTH_RANGE 0x0B70 #define GL_DEPTH_WRITEMASK 0x0B72 #define GL_DEPTH_CLEAR_VALUE 0x0B73 #define GL_DEPTH_FUNC 0x0B74 #define GL_STENCIL_CLEAR_VALUE 0x0B91 #define GL_STENCIL_FUNC 0x0B92 #define GL_STENCIL_FAIL 0x0B94 #define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 #define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 #define GL_STENCIL_REF 0x0B97 #define GL_STENCIL_VALUE_MASK 0x0B93 #define GL_STENCIL_WRITEMASK 0x0B98 #define GL_STENCIL_BACK_FUNC 0x8800 #define GL_STENCIL_BACK_FAIL 0x8801 #define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 #define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 #define GL_STENCIL_BACK_REF 0x8CA3 #define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 #define GL_STENCIL_BACK_WRITEMASK 0x8CA5 #define GL_VIEWPORT 0x0BA2 #define GL_SCISSOR_BOX 0x0C10 #define GL_COLOR_CLEAR_VALUE 0x0C22 #define GL_COLOR_WRITEMASK 0x0C23 #define GL_UNPACK_ALIGNMENT 0x0CF5 #define GL_PACK_ALIGNMENT 0x0D05 #define GL_MAX_TEXTURE_SIZE 0x0D33 #define GL_MAX_VIEWPORT_DIMS 0x0D3A #define GL_SUBPIXEL_BITS 0x0D50 #define GL_RED_BITS 0x0D52 #define GL_GREEN_BITS 0x0D53 #define GL_BLUE_BITS 0x0D54 #define GL_ALPHA_BITS 0x0D55 #define GL_DEPTH_BITS 0x0D56 #define GL_STENCIL_BITS 0x0D57 #define GL_POLYGON_OFFSET_UNITS 0x2A00 #define GL_POLYGON_OFFSET_FACTOR 0x8038 #define GL_TEXTURE_BINDING_2D 0x8069 #define GL_SAMPLE_BUFFERS 0x80A8 #define GL_SAMPLES 0x80A9 #define GL_SAMPLE_COVERAGE_VALUE 0x80AA #define GL_SAMPLE_COVERAGE_INVERT 0x80AB #define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 #define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 #define GL_DONT_CARE 0x1100 #define GL_FASTEST 0x1101 #define GL_NICEST 0x1102 #define GL_GENERATE_MIPMAP_HINT 0x8192 #define GL_BYTE 0x1400 #define GL_UNSIGNED_BYTE 0x1401 #define GL_SHORT 0x1402 #define GL_UNSIGNED_SHORT 0x1403 #define GL_INT 0x1404 #define GL_UNSIGNED_INT 0x1405 #define GL_FLOAT 0x1406 #define GL_FIXED 0x140C #define GL_DEPTH_COMPONENT 0x1902 #define GL_ALPHA 0x1906 #define GL_RGB 0x1907 #define GL_RGBA 0x1908 #define GL_LUMINANCE 0x1909 #define GL_LUMINANCE_ALPHA 0x190A #define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 #define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 #define GL_UNSIGNED_SHORT_5_6_5 0x8363 #define GL_FRAGMENT_SHADER 0x8B30 #define GL_VERTEX_SHADER 0x8B31 #define GL_MAX_VERTEX_ATTRIBS 0x8869 #define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB #define GL_MAX_VARYING_VECTORS 0x8DFC #define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D #define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C #define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 #define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD #define GL_SHADER_TYPE 0x8B4F #define GL_DELETE_STATUS 0x8B80 #define GL_LINK_STATUS 0x8B82 #define GL_VALIDATE_STATUS 0x8B83 #define GL_ATTACHED_SHADERS 0x8B85 #define GL_ACTIVE_UNIFORMS 0x8B86 #define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 #define GL_ACTIVE_ATTRIBUTES 0x8B89 #define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A #define GL_SHADING_LANGUAGE_VERSION 0x8B8C #define GL_CURRENT_PROGRAM 0x8B8D #define GL_NEVER 0x0200 #define GL_LESS 0x0201 #define GL_EQUAL 0x0202 #define GL_LEQUAL 0x0203 #define GL_GREATER 0x0204 #define GL_NOTEQUAL 0x0205 #define GL_GEQUAL 0x0206 #define GL_ALWAYS 0x0207 #define GL_KEEP 0x1E00 #define GL_REPLACE 0x1E01 #define GL_INCR 0x1E02 #define GL_DECR 0x1E03 #define GL_INVERT 0x150A #define GL_INCR_WRAP 0x8507 #define GL_DECR_WRAP 0x8508 #define GL_VENDOR 0x1F00 #define GL_RENDERER 0x1F01 #define GL_VERSION 0x1F02 #define GL_EXTENSIONS 0x1F03 #define GL_NEAREST 0x2600 #define GL_LINEAR 0x2601 #define GL_NEAREST_MIPMAP_NEAREST 0x2700 #define GL_LINEAR_MIPMAP_NEAREST 0x2701 #define GL_NEAREST_MIPMAP_LINEAR 0x2702 #define GL_LINEAR_MIPMAP_LINEAR 0x2703 #define GL_TEXTURE_MAG_FILTER 0x2800 #define GL_TEXTURE_MIN_FILTER 0x2801 #define GL_TEXTURE_WRAP_S 0x2802 #define GL_TEXTURE_WRAP_T 0x2803 #define GL_TEXTURE 0x1702 #define GL_TEXTURE_CUBE_MAP 0x8513 #define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A #define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C #define GL_TEXTURE0 0x84C0 #define GL_TEXTURE1 0x84C1 #define GL_TEXTURE2 0x84C2 #define GL_TEXTURE3 0x84C3 #define GL_TEXTURE4 0x84C4 #define GL_TEXTURE5 0x84C5 #define GL_TEXTURE6 0x84C6 #define GL_TEXTURE7 0x84C7 #define GL_TEXTURE8 0x84C8 #define GL_TEXTURE9 0x84C9 #define GL_TEXTURE10 0x84CA #define GL_TEXTURE11 0x84CB #define GL_TEXTURE12 0x84CC #define GL_TEXTURE13 0x84CD #define GL_TEXTURE14 0x84CE #define GL_TEXTURE15 0x84CF #define GL_TEXTURE16 0x84D0 #define GL_TEXTURE17 0x84D1 #define GL_TEXTURE18 0x84D2 #define GL_TEXTURE19 0x84D3 #define GL_TEXTURE20 0x84D4 #define GL_TEXTURE21 0x84D5 #define GL_TEXTURE22 0x84D6 #define GL_TEXTURE23 0x84D7 #define GL_TEXTURE24 0x84D8 #define GL_TEXTURE25 0x84D9 #define GL_TEXTURE26 0x84DA #define GL_TEXTURE27 0x84DB #define GL_TEXTURE28 0x84DC #define GL_TEXTURE29 0x84DD #define GL_TEXTURE30 0x84DE #define GL_TEXTURE31 0x84DF #define GL_ACTIVE_TEXTURE 0x84E0 #define GL_REPEAT 0x2901 #define GL_CLAMP_TO_EDGE 0x812F #define GL_MIRRORED_REPEAT 0x8370 #define GL_FLOAT_VEC2 0x8B50 #define GL_FLOAT_VEC3 0x8B51 #define GL_FLOAT_VEC4 0x8B52 #define GL_INT_VEC2 0x8B53 #define GL_INT_VEC3 0x8B54 #define GL_INT_VEC4 0x8B55 #define GL_BOOL 0x8B56 #define GL_BOOL_VEC2 0x8B57 #define GL_BOOL_VEC3 0x8B58 #define GL_BOOL_VEC4 0x8B59 #define GL_FLOAT_MAT2 0x8B5A #define GL_FLOAT_MAT3 0x8B5B #define GL_FLOAT_MAT4 0x8B5C #define GL_SAMPLER_2D 0x8B5E #define GL_SAMPLER_CUBE 0x8B60 #define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 #define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 #define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 #define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 #define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A #define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 #define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F #define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A #define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B #define GL_COMPILE_STATUS 0x8B81 #define GL_INFO_LOG_LENGTH 0x8B84 #define GL_SHADER_SOURCE_LENGTH 0x8B88 #define GL_SHADER_COMPILER 0x8DFA #define GL_SHADER_BINARY_FORMATS 0x8DF8 #define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 #define GL_LOW_FLOAT 0x8DF0 #define GL_MEDIUM_FLOAT 0x8DF1 #define GL_HIGH_FLOAT 0x8DF2 #define GL_LOW_INT 0x8DF3 #define GL_MEDIUM_INT 0x8DF4 #define GL_HIGH_INT 0x8DF5 #define GL_FRAMEBUFFER 0x8D40 #define GL_RENDERBUFFER 0x8D41 #define GL_RGBA4 0x8056 #define GL_RGB5_A1 0x8057 #define GL_RGB565 0x8D62 #define GL_DEPTH_COMPONENT16 0x81A5 #define GL_STENCIL_INDEX8 0x8D48 #define GL_RENDERBUFFER_WIDTH 0x8D42 #define GL_RENDERBUFFER_HEIGHT 0x8D43 #define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 #define GL_RENDERBUFFER_RED_SIZE 0x8D50 #define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 #define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 #define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 #define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 #define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 #define GL_COLOR_ATTACHMENT0 0x8CE0 #define GL_DEPTH_ATTACHMENT 0x8D00 #define GL_STENCIL_ATTACHMENT 0x8D20 #define GL_NONE 0 #define GL_FRAMEBUFFER_COMPLETE 0x8CD5 #define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 #define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 #define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 0x8CD9 #define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD #define GL_FRAMEBUFFER_BINDING 0x8CA6 #define GL_RENDERBUFFER_BINDING 0x8CA7 #define GL_MAX_RENDERBUFFER_SIZE 0x84E8 #define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 typedef void (GL_APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); typedef void (GL_APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); typedef void (GL_APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name); typedef void (GL_APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); typedef void (GL_APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer); typedef void (GL_APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer); typedef void (GL_APIENTRYP PFNGLBINDTEXTUREPROC) (GLenum target, GLuint texture); typedef void (GL_APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode); typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); typedef void (GL_APIENTRYP PFNGLBLENDFUNCPROC) (GLenum sfactor, GLenum dfactor); typedef void (GL_APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); typedef void (GL_APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const void *data, GLenum usage); typedef void (GL_APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); typedef GLenum (GL_APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target); typedef void (GL_APIENTRYP PFNGLCLEARPROC) (GLbitfield mask); typedef void (GL_APIENTRYP PFNGLCLEARCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); typedef void (GL_APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d); typedef void (GL_APIENTRYP PFNGLCLEARSTENCILPROC) (GLint s); typedef void (GL_APIENTRYP PFNGLCOLORMASKPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); typedef void (GL_APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader); typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); typedef void (GL_APIENTRYP PFNGLCOPYTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef GLuint (GL_APIENTRYP PFNGLCREATEPROGRAMPROC) (void); typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROC) (GLenum type); typedef void (GL_APIENTRYP PFNGLCULLFACEPROC) (GLenum mode); typedef void (GL_APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers); typedef void (GL_APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers); typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program); typedef void (GL_APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers); typedef void (GL_APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader); typedef void (GL_APIENTRYP PFNGLDELETETEXTURESPROC) (GLsizei n, const GLuint *textures); typedef void (GL_APIENTRYP PFNGLDEPTHFUNCPROC) (GLenum func); typedef void (GL_APIENTRYP PFNGLDEPTHMASKPROC) (GLboolean flag); typedef void (GL_APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f); typedef void (GL_APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); typedef void (GL_APIENTRYP PFNGLDISABLEPROC) (GLenum cap); typedef void (GL_APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); typedef void (GL_APIENTRYP PFNGLDRAWARRAYSPROC) (GLenum mode, GLint first, GLsizei count); typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices); typedef void (GL_APIENTRYP PFNGLENABLEPROC) (GLenum cap); typedef void (GL_APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); typedef void (GL_APIENTRYP PFNGLFINISHPROC) (void); typedef void (GL_APIENTRYP PFNGLFLUSHPROC) (void); typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void (GL_APIENTRYP PFNGLFRONTFACEPROC) (GLenum mode); typedef void (GL_APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); typedef void (GL_APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target); typedef void (GL_APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers); typedef void (GL_APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers); typedef void (GL_APIENTRYP PFNGLGENTEXTURESPROC) (GLsizei n, GLuint *textures); typedef void (GL_APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); typedef void (GL_APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); typedef GLint (GL_APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name); typedef void (GL_APIENTRYP PFNGLGETBOOLEANVPROC) (GLenum pname, GLboolean *data); typedef void (GL_APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef GLenum (GL_APIENTRYP PFNGLGETERRORPROC) (void); typedef void (GL_APIENTRYP PFNGLGETFLOATVPROC) (GLenum pname, GLfloat *data); typedef void (GL_APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLGETINTEGERVPROC) (GLenum pname, GLint *data); typedef void (GL_APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); typedef void (GL_APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); typedef void (GL_APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); typedef void (GL_APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); typedef const GLubyte *(GL_APIENTRYP PFNGLGETSTRINGPROC) (GLenum name); typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params); typedef void (GL_APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params); typedef GLint (GL_APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name); typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params); typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, void **pointer); typedef void (GL_APIENTRYP PFNGLHINTPROC) (GLenum target, GLenum mode); typedef GLboolean (GL_APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer); typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDPROC) (GLenum cap); typedef GLboolean (GL_APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer); typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPROC) (GLuint program); typedef GLboolean (GL_APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer); typedef GLboolean (GL_APIENTRYP PFNGLISSHADERPROC) (GLuint shader); typedef GLboolean (GL_APIENTRYP PFNGLISTEXTUREPROC) (GLuint texture); typedef void (GL_APIENTRYP PFNGLLINEWIDTHPROC) (GLfloat width); typedef void (GL_APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program); typedef void (GL_APIENTRYP PFNGLPIXELSTOREIPROC) (GLenum pname, GLint param); typedef void (GL_APIENTRYP PFNGLPOLYGONOFFSETPROC) (GLfloat factor, GLfloat units); typedef void (GL_APIENTRYP PFNGLREADPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels); typedef void (GL_APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void); typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); typedef void (GL_APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert); typedef void (GL_APIENTRYP PFNGLSCISSORPROC) (GLint x, GLint y, GLsizei width, GLsizei height); typedef void (GL_APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryFormat, const void *binary, GLsizei length); typedef void (GL_APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); typedef void (GL_APIENTRYP PFNGLSTENCILFUNCPROC) (GLenum func, GLint ref, GLuint mask); typedef void (GL_APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask); typedef void (GL_APIENTRYP PFNGLSTENCILMASKPROC) (GLuint mask); typedef void (GL_APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); typedef void (GL_APIENTRYP PFNGLSTENCILOPPROC) (GLenum fail, GLenum zfail, GLenum zpass); typedef void (GL_APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); typedef void (GL_APIENTRYP PFNGLTEXIMAGE2DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); typedef void (GL_APIENTRYP PFNGLTEXPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat param); typedef void (GL_APIENTRYP PFNGLTEXPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIPROC) (GLenum target, GLenum pname, GLint param); typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); typedef void (GL_APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); typedef void (GL_APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0); typedef void (GL_APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value); typedef void (GL_APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); typedef void (GL_APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); typedef void (GL_APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value); typedef void (GL_APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); typedef void (GL_APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); typedef void (GL_APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value); typedef void (GL_APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); typedef void (GL_APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); typedef void (GL_APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value); typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program); typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program); typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v); typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v); typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v); typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v); typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); typedef void (GL_APIENTRYP PFNGLVIEWPORTPROC) (GLint x, GLint y, GLsizei width, GLsizei height); #if GL_GLES_PROTOTYPES GL_APICALL void GL_APIENTRY glActiveTexture (GLenum texture); GL_APICALL void GL_APIENTRY glAttachShader (GLuint program, GLuint shader); GL_APICALL void GL_APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name); GL_APICALL void GL_APIENTRY glBindBuffer (GLenum target, GLuint buffer); GL_APICALL void GL_APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); GL_APICALL void GL_APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); GL_APICALL void GL_APIENTRY glBindTexture (GLenum target, GLuint texture); GL_APICALL void GL_APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); GL_APICALL void GL_APIENTRY glBlendEquation (GLenum mode); GL_APICALL void GL_APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); GL_APICALL void GL_APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor); GL_APICALL void GL_APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); GL_APICALL void GL_APIENTRY glBufferData (GLenum target, GLsizeiptr size, const void *data, GLenum usage); GL_APICALL void GL_APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); GL_APICALL GLenum GL_APIENTRY glCheckFramebufferStatus (GLenum target); GL_APICALL void GL_APIENTRY glClear (GLbitfield mask); GL_APICALL void GL_APIENTRY glClearColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); GL_APICALL void GL_APIENTRY glClearDepthf (GLfloat d); GL_APICALL void GL_APIENTRY glClearStencil (GLint s); GL_APICALL void GL_APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); GL_APICALL void GL_APIENTRY glCompileShader (GLuint shader); GL_APICALL void GL_APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); GL_APICALL void GL_APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); GL_APICALL void GL_APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); GL_APICALL void GL_APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); GL_APICALL GLuint GL_APIENTRY glCreateProgram (void); GL_APICALL GLuint GL_APIENTRY glCreateShader (GLenum type); GL_APICALL void GL_APIENTRY glCullFace (GLenum mode); GL_APICALL void GL_APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers); GL_APICALL void GL_APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers); GL_APICALL void GL_APIENTRY glDeleteProgram (GLuint program); GL_APICALL void GL_APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers); GL_APICALL void GL_APIENTRY glDeleteShader (GLuint shader); GL_APICALL void GL_APIENTRY glDeleteTextures (GLsizei n, const GLuint *textures); GL_APICALL void GL_APIENTRY glDepthFunc (GLenum func); GL_APICALL void GL_APIENTRY glDepthMask (GLboolean flag); GL_APICALL void GL_APIENTRY glDepthRangef (GLfloat n, GLfloat f); GL_APICALL void GL_APIENTRY glDetachShader (GLuint program, GLuint shader); GL_APICALL void GL_APIENTRY glDisable (GLenum cap); GL_APICALL void GL_APIENTRY glDisableVertexAttribArray (GLuint index); GL_APICALL void GL_APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count); GL_APICALL void GL_APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const void *indices); GL_APICALL void GL_APIENTRY glEnable (GLenum cap); GL_APICALL void GL_APIENTRY glEnableVertexAttribArray (GLuint index); GL_APICALL void GL_APIENTRY glFinish (void); GL_APICALL void GL_APIENTRY glFlush (void); GL_APICALL void GL_APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); GL_APICALL void GL_APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GL_APICALL void GL_APIENTRY glFrontFace (GLenum mode); GL_APICALL void GL_APIENTRY glGenBuffers (GLsizei n, GLuint *buffers); GL_APICALL void GL_APIENTRY glGenerateMipmap (GLenum target); GL_APICALL void GL_APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers); GL_APICALL void GL_APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers); GL_APICALL void GL_APIENTRY glGenTextures (GLsizei n, GLuint *textures); GL_APICALL void GL_APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); GL_APICALL void GL_APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); GL_APICALL void GL_APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); GL_APICALL GLint GL_APIENTRY glGetAttribLocation (GLuint program, const GLchar *name); GL_APICALL void GL_APIENTRY glGetBooleanv (GLenum pname, GLboolean *data); GL_APICALL void GL_APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params); GL_APICALL GLenum GL_APIENTRY glGetError (void); GL_APICALL void GL_APIENTRY glGetFloatv (GLenum pname, GLfloat *data); GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params); GL_APICALL void GL_APIENTRY glGetIntegerv (GLenum pname, GLint *data); GL_APICALL void GL_APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params); GL_APICALL void GL_APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); GL_APICALL void GL_APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params); GL_APICALL void GL_APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params); GL_APICALL void GL_APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); GL_APICALL void GL_APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); GL_APICALL void GL_APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); GL_APICALL const GLubyte *GL_APIENTRY glGetString (GLenum name); GL_APICALL void GL_APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params); GL_APICALL void GL_APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint *params); GL_APICALL void GL_APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params); GL_APICALL void GL_APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params); GL_APICALL GLint GL_APIENTRY glGetUniformLocation (GLuint program, const GLchar *name); GL_APICALL void GL_APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params); GL_APICALL void GL_APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params); GL_APICALL void GL_APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, void **pointer); GL_APICALL void GL_APIENTRY glHint (GLenum target, GLenum mode); GL_APICALL GLboolean GL_APIENTRY glIsBuffer (GLuint buffer); GL_APICALL GLboolean GL_APIENTRY glIsEnabled (GLenum cap); GL_APICALL GLboolean GL_APIENTRY glIsFramebuffer (GLuint framebuffer); GL_APICALL GLboolean GL_APIENTRY glIsProgram (GLuint program); GL_APICALL GLboolean GL_APIENTRY glIsRenderbuffer (GLuint renderbuffer); GL_APICALL GLboolean GL_APIENTRY glIsShader (GLuint shader); GL_APICALL GLboolean GL_APIENTRY glIsTexture (GLuint texture); GL_APICALL void GL_APIENTRY glLineWidth (GLfloat width); GL_APICALL void GL_APIENTRY glLinkProgram (GLuint program); GL_APICALL void GL_APIENTRY glPixelStorei (GLenum pname, GLint param); GL_APICALL void GL_APIENTRY glPolygonOffset (GLfloat factor, GLfloat units); GL_APICALL void GL_APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels); GL_APICALL void GL_APIENTRY glReleaseShaderCompiler (void); GL_APICALL void GL_APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); GL_APICALL void GL_APIENTRY glSampleCoverage (GLfloat value, GLboolean invert); GL_APICALL void GL_APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); GL_APICALL void GL_APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryFormat, const void *binary, GLsizei length); GL_APICALL void GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); GL_APICALL void GL_APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask); GL_APICALL void GL_APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); GL_APICALL void GL_APIENTRY glStencilMask (GLuint mask); GL_APICALL void GL_APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); GL_APICALL void GL_APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass); GL_APICALL void GL_APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); GL_APICALL void GL_APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); GL_APICALL void GL_APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param); GL_APICALL void GL_APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params); GL_APICALL void GL_APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param); GL_APICALL void GL_APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint *params); GL_APICALL void GL_APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); GL_APICALL void GL_APIENTRY glUniform1f (GLint location, GLfloat v0); GL_APICALL void GL_APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value); GL_APICALL void GL_APIENTRY glUniform1i (GLint location, GLint v0); GL_APICALL void GL_APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value); GL_APICALL void GL_APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1); GL_APICALL void GL_APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value); GL_APICALL void GL_APIENTRY glUniform2i (GLint location, GLint v0, GLint v1); GL_APICALL void GL_APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value); GL_APICALL void GL_APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); GL_APICALL void GL_APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value); GL_APICALL void GL_APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2); GL_APICALL void GL_APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value); GL_APICALL void GL_APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); GL_APICALL void GL_APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value); GL_APICALL void GL_APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); GL_APICALL void GL_APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value); GL_APICALL void GL_APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glUseProgram (GLuint program); GL_APICALL void GL_APIENTRY glValidateProgram (GLuint program); GL_APICALL void GL_APIENTRY glVertexAttrib1f (GLuint index, GLfloat x); GL_APICALL void GL_APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v); GL_APICALL void GL_APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y); GL_APICALL void GL_APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v); GL_APICALL void GL_APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z); GL_APICALL void GL_APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v); GL_APICALL void GL_APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GL_APICALL void GL_APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v); GL_APICALL void GL_APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); GL_APICALL void GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height); #endif #endif /* GL_ES_VERSION_2_0 */ #ifdef __cplusplus } #endif #endif ================================================ FILE: libraries/sdl2/SDL_opengles2_gl2ext.h ================================================ #ifndef __gles2_gl2ext_h_ #define __gles2_gl2ext_h_ 1 #ifdef __cplusplus extern "C" { #endif /* ** Copyright 2013-2020 The Khronos Group Inc. ** SPDX-License-Identifier: MIT ** ** This header is generated from the Khronos OpenGL / OpenGL ES XML ** API Registry. The current version of the Registry, generator scripts ** used to make the header, and the header can be found at ** https://github.com/KhronosGroup/OpenGL-Registry */ #ifndef GL_APIENTRYP #define GL_APIENTRYP GL_APIENTRY* #endif /* Generated on date 20220530 */ /* Generated C header for: * API: gles2 * Profile: common * Versions considered: 2\.[0-9] * Versions emitted: _nomatch_^ * Default extensions included: gles2 * Additional extensions included: _nomatch_^ * Extensions removed: _nomatch_^ */ #ifndef GL_KHR_blend_equation_advanced #define GL_KHR_blend_equation_advanced 1 #define GL_MULTIPLY_KHR 0x9294 #define GL_SCREEN_KHR 0x9295 #define GL_OVERLAY_KHR 0x9296 #define GL_DARKEN_KHR 0x9297 #define GL_LIGHTEN_KHR 0x9298 #define GL_COLORDODGE_KHR 0x9299 #define GL_COLORBURN_KHR 0x929A #define GL_HARDLIGHT_KHR 0x929B #define GL_SOFTLIGHT_KHR 0x929C #define GL_DIFFERENCE_KHR 0x929E #define GL_EXCLUSION_KHR 0x92A0 #define GL_HSL_HUE_KHR 0x92AD #define GL_HSL_SATURATION_KHR 0x92AE #define GL_HSL_COLOR_KHR 0x92AF #define GL_HSL_LUMINOSITY_KHR 0x92B0 typedef void (GL_APIENTRYP PFNGLBLENDBARRIERKHRPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glBlendBarrierKHR (void); #endif #endif /* GL_KHR_blend_equation_advanced */ #ifndef GL_KHR_blend_equation_advanced_coherent #define GL_KHR_blend_equation_advanced_coherent 1 #define GL_BLEND_ADVANCED_COHERENT_KHR 0x9285 #endif /* GL_KHR_blend_equation_advanced_coherent */ #ifndef GL_KHR_context_flush_control #define GL_KHR_context_flush_control 1 #define GL_CONTEXT_RELEASE_BEHAVIOR_KHR 0x82FB #define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR 0x82FC #endif /* GL_KHR_context_flush_control */ #ifndef GL_KHR_debug #define GL_KHR_debug 1 typedef void (GL_APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); #define GL_SAMPLER 0x82E6 #define GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR 0x8242 #define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_KHR 0x8243 #define GL_DEBUG_CALLBACK_FUNCTION_KHR 0x8244 #define GL_DEBUG_CALLBACK_USER_PARAM_KHR 0x8245 #define GL_DEBUG_SOURCE_API_KHR 0x8246 #define GL_DEBUG_SOURCE_WINDOW_SYSTEM_KHR 0x8247 #define GL_DEBUG_SOURCE_SHADER_COMPILER_KHR 0x8248 #define GL_DEBUG_SOURCE_THIRD_PARTY_KHR 0x8249 #define GL_DEBUG_SOURCE_APPLICATION_KHR 0x824A #define GL_DEBUG_SOURCE_OTHER_KHR 0x824B #define GL_DEBUG_TYPE_ERROR_KHR 0x824C #define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_KHR 0x824D #define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_KHR 0x824E #define GL_DEBUG_TYPE_PORTABILITY_KHR 0x824F #define GL_DEBUG_TYPE_PERFORMANCE_KHR 0x8250 #define GL_DEBUG_TYPE_OTHER_KHR 0x8251 #define GL_DEBUG_TYPE_MARKER_KHR 0x8268 #define GL_DEBUG_TYPE_PUSH_GROUP_KHR 0x8269 #define GL_DEBUG_TYPE_POP_GROUP_KHR 0x826A #define GL_DEBUG_SEVERITY_NOTIFICATION_KHR 0x826B #define GL_MAX_DEBUG_GROUP_STACK_DEPTH_KHR 0x826C #define GL_DEBUG_GROUP_STACK_DEPTH_KHR 0x826D #define GL_BUFFER_KHR 0x82E0 #define GL_SHADER_KHR 0x82E1 #define GL_PROGRAM_KHR 0x82E2 #define GL_VERTEX_ARRAY_KHR 0x8074 #define GL_QUERY_KHR 0x82E3 #define GL_PROGRAM_PIPELINE_KHR 0x82E4 #define GL_SAMPLER_KHR 0x82E6 #define GL_MAX_LABEL_LENGTH_KHR 0x82E8 #define GL_MAX_DEBUG_MESSAGE_LENGTH_KHR 0x9143 #define GL_MAX_DEBUG_LOGGED_MESSAGES_KHR 0x9144 #define GL_DEBUG_LOGGED_MESSAGES_KHR 0x9145 #define GL_DEBUG_SEVERITY_HIGH_KHR 0x9146 #define GL_DEBUG_SEVERITY_MEDIUM_KHR 0x9147 #define GL_DEBUG_SEVERITY_LOW_KHR 0x9148 #define GL_DEBUG_OUTPUT_KHR 0x92E0 #define GL_CONTEXT_FLAG_DEBUG_BIT_KHR 0x00000002 #define GL_STACK_OVERFLOW_KHR 0x0503 #define GL_STACK_UNDERFLOW_KHR 0x0504 typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECONTROLKHRPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGEINSERTKHRPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECALLBACKKHRPROC) (GLDEBUGPROCKHR callback, const void *userParam); typedef GLuint (GL_APIENTRYP PFNGLGETDEBUGMESSAGELOGKHRPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); typedef void (GL_APIENTRYP PFNGLPUSHDEBUGGROUPKHRPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message); typedef void (GL_APIENTRYP PFNGLPOPDEBUGGROUPKHRPROC) (void); typedef void (GL_APIENTRYP PFNGLOBJECTLABELKHRPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELKHRPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); typedef void (GL_APIENTRYP PFNGLOBJECTPTRLABELKHRPROC) (const void *ptr, GLsizei length, const GLchar *label); typedef void (GL_APIENTRYP PFNGLGETOBJECTPTRLABELKHRPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); typedef void (GL_APIENTRYP PFNGLGETPOINTERVKHRPROC) (GLenum pname, void **params); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glDebugMessageControlKHR (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); GL_APICALL void GL_APIENTRY glDebugMessageInsertKHR (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); GL_APICALL void GL_APIENTRY glDebugMessageCallbackKHR (GLDEBUGPROCKHR callback, const void *userParam); GL_APICALL GLuint GL_APIENTRY glGetDebugMessageLogKHR (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); GL_APICALL void GL_APIENTRY glPushDebugGroupKHR (GLenum source, GLuint id, GLsizei length, const GLchar *message); GL_APICALL void GL_APIENTRY glPopDebugGroupKHR (void); GL_APICALL void GL_APIENTRY glObjectLabelKHR (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); GL_APICALL void GL_APIENTRY glGetObjectLabelKHR (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); GL_APICALL void GL_APIENTRY glObjectPtrLabelKHR (const void *ptr, GLsizei length, const GLchar *label); GL_APICALL void GL_APIENTRY glGetObjectPtrLabelKHR (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); GL_APICALL void GL_APIENTRY glGetPointervKHR (GLenum pname, void **params); #endif #endif /* GL_KHR_debug */ #ifndef GL_KHR_no_error #define GL_KHR_no_error 1 #define GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR 0x00000008 #endif /* GL_KHR_no_error */ #ifndef GL_KHR_parallel_shader_compile #define GL_KHR_parallel_shader_compile 1 #define GL_MAX_SHADER_COMPILER_THREADS_KHR 0x91B0 #define GL_COMPLETION_STATUS_KHR 0x91B1 typedef void (GL_APIENTRYP PFNGLMAXSHADERCOMPILERTHREADSKHRPROC) (GLuint count); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glMaxShaderCompilerThreadsKHR (GLuint count); #endif #endif /* GL_KHR_parallel_shader_compile */ #ifndef GL_KHR_robust_buffer_access_behavior #define GL_KHR_robust_buffer_access_behavior 1 #endif /* GL_KHR_robust_buffer_access_behavior */ #ifndef GL_KHR_robustness #define GL_KHR_robustness 1 #define GL_CONTEXT_ROBUST_ACCESS_KHR 0x90F3 #define GL_LOSE_CONTEXT_ON_RESET_KHR 0x8252 #define GL_GUILTY_CONTEXT_RESET_KHR 0x8253 #define GL_INNOCENT_CONTEXT_RESET_KHR 0x8254 #define GL_UNKNOWN_CONTEXT_RESET_KHR 0x8255 #define GL_RESET_NOTIFICATION_STRATEGY_KHR 0x8256 #define GL_NO_RESET_NOTIFICATION_KHR 0x8261 #define GL_CONTEXT_LOST_KHR 0x0507 typedef GLenum (GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSKHRPROC) (void); typedef void (GL_APIENTRYP PFNGLREADNPIXELSKHRPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVKHRPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVKHRPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); typedef void (GL_APIENTRYP PFNGLGETNUNIFORMUIVKHRPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL GLenum GL_APIENTRY glGetGraphicsResetStatusKHR (void); GL_APICALL void GL_APIENTRY glReadnPixelsKHR (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); GL_APICALL void GL_APIENTRY glGetnUniformfvKHR (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); GL_APICALL void GL_APIENTRY glGetnUniformivKHR (GLuint program, GLint location, GLsizei bufSize, GLint *params); GL_APICALL void GL_APIENTRY glGetnUniformuivKHR (GLuint program, GLint location, GLsizei bufSize, GLuint *params); #endif #endif /* GL_KHR_robustness */ #ifndef GL_KHR_shader_subgroup #define GL_KHR_shader_subgroup 1 #define GL_SUBGROUP_SIZE_KHR 0x9532 #define GL_SUBGROUP_SUPPORTED_STAGES_KHR 0x9533 #define GL_SUBGROUP_SUPPORTED_FEATURES_KHR 0x9534 #define GL_SUBGROUP_QUAD_ALL_STAGES_KHR 0x9535 #define GL_SUBGROUP_FEATURE_BASIC_BIT_KHR 0x00000001 #define GL_SUBGROUP_FEATURE_VOTE_BIT_KHR 0x00000002 #define GL_SUBGROUP_FEATURE_ARITHMETIC_BIT_KHR 0x00000004 #define GL_SUBGROUP_FEATURE_BALLOT_BIT_KHR 0x00000008 #define GL_SUBGROUP_FEATURE_SHUFFLE_BIT_KHR 0x00000010 #define GL_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT_KHR 0x00000020 #define GL_SUBGROUP_FEATURE_CLUSTERED_BIT_KHR 0x00000040 #define GL_SUBGROUP_FEATURE_QUAD_BIT_KHR 0x00000080 #endif /* GL_KHR_shader_subgroup */ #ifndef GL_KHR_texture_compression_astc_hdr #define GL_KHR_texture_compression_astc_hdr 1 #define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 #define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 #define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 #define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 #define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 #define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 #define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 #define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 #define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 #define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 #define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA #define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB #define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC #define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD #endif /* GL_KHR_texture_compression_astc_hdr */ #ifndef GL_KHR_texture_compression_astc_ldr #define GL_KHR_texture_compression_astc_ldr 1 #endif /* GL_KHR_texture_compression_astc_ldr */ #ifndef GL_KHR_texture_compression_astc_sliced_3d #define GL_KHR_texture_compression_astc_sliced_3d 1 #endif /* GL_KHR_texture_compression_astc_sliced_3d */ #ifndef GL_OES_EGL_image #define GL_OES_EGL_image 1 typedef void *GLeglImageOES; typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image); typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image); GL_APICALL void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image); #endif #endif /* GL_OES_EGL_image */ #ifndef GL_OES_EGL_image_external #define GL_OES_EGL_image_external 1 #define GL_TEXTURE_EXTERNAL_OES 0x8D65 #define GL_TEXTURE_BINDING_EXTERNAL_OES 0x8D67 #define GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES 0x8D68 #define GL_SAMPLER_EXTERNAL_OES 0x8D66 #endif /* GL_OES_EGL_image_external */ #ifndef GL_OES_EGL_image_external_essl3 #define GL_OES_EGL_image_external_essl3 1 #endif /* GL_OES_EGL_image_external_essl3 */ #ifndef GL_OES_compressed_ETC1_RGB8_sub_texture #define GL_OES_compressed_ETC1_RGB8_sub_texture 1 #endif /* GL_OES_compressed_ETC1_RGB8_sub_texture */ #ifndef GL_OES_compressed_ETC1_RGB8_texture #define GL_OES_compressed_ETC1_RGB8_texture 1 #define GL_ETC1_RGB8_OES 0x8D64 #endif /* GL_OES_compressed_ETC1_RGB8_texture */ #ifndef GL_OES_compressed_paletted_texture #define GL_OES_compressed_paletted_texture 1 #define GL_PALETTE4_RGB8_OES 0x8B90 #define GL_PALETTE4_RGBA8_OES 0x8B91 #define GL_PALETTE4_R5_G6_B5_OES 0x8B92 #define GL_PALETTE4_RGBA4_OES 0x8B93 #define GL_PALETTE4_RGB5_A1_OES 0x8B94 #define GL_PALETTE8_RGB8_OES 0x8B95 #define GL_PALETTE8_RGBA8_OES 0x8B96 #define GL_PALETTE8_R5_G6_B5_OES 0x8B97 #define GL_PALETTE8_RGBA4_OES 0x8B98 #define GL_PALETTE8_RGB5_A1_OES 0x8B99 #endif /* GL_OES_compressed_paletted_texture */ #ifndef GL_OES_copy_image #define GL_OES_copy_image 1 typedef void (GL_APIENTRYP PFNGLCOPYIMAGESUBDATAOESPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glCopyImageSubDataOES (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); #endif #endif /* GL_OES_copy_image */ #ifndef GL_OES_depth24 #define GL_OES_depth24 1 #define GL_DEPTH_COMPONENT24_OES 0x81A6 #endif /* GL_OES_depth24 */ #ifndef GL_OES_depth32 #define GL_OES_depth32 1 #define GL_DEPTH_COMPONENT32_OES 0x81A7 #endif /* GL_OES_depth32 */ #ifndef GL_OES_depth_texture #define GL_OES_depth_texture 1 #endif /* GL_OES_depth_texture */ #ifndef GL_OES_draw_buffers_indexed #define GL_OES_draw_buffers_indexed 1 #define GL_MIN 0x8007 #define GL_MAX 0x8008 typedef void (GL_APIENTRYP PFNGLENABLEIOESPROC) (GLenum target, GLuint index); typedef void (GL_APIENTRYP PFNGLDISABLEIOESPROC) (GLenum target, GLuint index); typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONIOESPROC) (GLuint buf, GLenum mode); typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONSEPARATEIOESPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); typedef void (GL_APIENTRYP PFNGLBLENDFUNCIOESPROC) (GLuint buf, GLenum src, GLenum dst); typedef void (GL_APIENTRYP PFNGLBLENDFUNCSEPARATEIOESPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); typedef void (GL_APIENTRYP PFNGLCOLORMASKIOESPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDIOESPROC) (GLenum target, GLuint index); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glEnableiOES (GLenum target, GLuint index); GL_APICALL void GL_APIENTRY glDisableiOES (GLenum target, GLuint index); GL_APICALL void GL_APIENTRY glBlendEquationiOES (GLuint buf, GLenum mode); GL_APICALL void GL_APIENTRY glBlendEquationSeparateiOES (GLuint buf, GLenum modeRGB, GLenum modeAlpha); GL_APICALL void GL_APIENTRY glBlendFunciOES (GLuint buf, GLenum src, GLenum dst); GL_APICALL void GL_APIENTRY glBlendFuncSeparateiOES (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); GL_APICALL void GL_APIENTRY glColorMaskiOES (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); GL_APICALL GLboolean GL_APIENTRY glIsEnablediOES (GLenum target, GLuint index); #endif #endif /* GL_OES_draw_buffers_indexed */ #ifndef GL_OES_draw_elements_base_vertex #define GL_OES_draw_elements_base_vertex 1 typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXOESPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); typedef void (GL_APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXOESPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXOESPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glDrawElementsBaseVertexOES (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); GL_APICALL void GL_APIENTRY glDrawRangeElementsBaseVertexOES (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); GL_APICALL void GL_APIENTRY glDrawElementsInstancedBaseVertexOES (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); GL_APICALL void GL_APIENTRY glMultiDrawElementsBaseVertexEXT (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); #endif #endif /* GL_OES_draw_elements_base_vertex */ #ifndef GL_OES_element_index_uint #define GL_OES_element_index_uint 1 #endif /* GL_OES_element_index_uint */ #ifndef GL_OES_fbo_render_mipmap #define GL_OES_fbo_render_mipmap 1 #endif /* GL_OES_fbo_render_mipmap */ #ifndef GL_OES_fragment_precision_high #define GL_OES_fragment_precision_high 1 #endif /* GL_OES_fragment_precision_high */ #ifndef GL_OES_geometry_point_size #define GL_OES_geometry_point_size 1 #endif /* GL_OES_geometry_point_size */ #ifndef GL_OES_geometry_shader #define GL_OES_geometry_shader 1 #define GL_GEOMETRY_SHADER_OES 0x8DD9 #define GL_GEOMETRY_SHADER_BIT_OES 0x00000004 #define GL_GEOMETRY_LINKED_VERTICES_OUT_OES 0x8916 #define GL_GEOMETRY_LINKED_INPUT_TYPE_OES 0x8917 #define GL_GEOMETRY_LINKED_OUTPUT_TYPE_OES 0x8918 #define GL_GEOMETRY_SHADER_INVOCATIONS_OES 0x887F #define GL_LAYER_PROVOKING_VERTEX_OES 0x825E #define GL_LINES_ADJACENCY_OES 0x000A #define GL_LINE_STRIP_ADJACENCY_OES 0x000B #define GL_TRIANGLES_ADJACENCY_OES 0x000C #define GL_TRIANGLE_STRIP_ADJACENCY_OES 0x000D #define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_OES 0x8DDF #define GL_MAX_GEOMETRY_UNIFORM_BLOCKS_OES 0x8A2C #define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_OES 0x8A32 #define GL_MAX_GEOMETRY_INPUT_COMPONENTS_OES 0x9123 #define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_OES 0x9124 #define GL_MAX_GEOMETRY_OUTPUT_VERTICES_OES 0x8DE0 #define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_OES 0x8DE1 #define GL_MAX_GEOMETRY_SHADER_INVOCATIONS_OES 0x8E5A #define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_OES 0x8C29 #define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_OES 0x92CF #define GL_MAX_GEOMETRY_ATOMIC_COUNTERS_OES 0x92D5 #define GL_MAX_GEOMETRY_IMAGE_UNIFORMS_OES 0x90CD #define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_OES 0x90D7 #define GL_FIRST_VERTEX_CONVENTION_OES 0x8E4D #define GL_LAST_VERTEX_CONVENTION_OES 0x8E4E #define GL_UNDEFINED_VERTEX_OES 0x8260 #define GL_PRIMITIVES_GENERATED_OES 0x8C87 #define GL_FRAMEBUFFER_DEFAULT_LAYERS_OES 0x9312 #define GL_MAX_FRAMEBUFFER_LAYERS_OES 0x9317 #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_OES 0x8DA8 #define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_OES 0x8DA7 #define GL_REFERENCED_BY_GEOMETRY_SHADER_OES 0x9309 typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTUREOESPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glFramebufferTextureOES (GLenum target, GLenum attachment, GLuint texture, GLint level); #endif #endif /* GL_OES_geometry_shader */ #ifndef GL_OES_get_program_binary #define GL_OES_get_program_binary 1 #define GL_PROGRAM_BINARY_LENGTH_OES 0x8741 #define GL_NUM_PROGRAM_BINARY_FORMATS_OES 0x87FE #define GL_PROGRAM_BINARY_FORMATS_OES 0x87FF typedef void (GL_APIENTRYP PFNGLGETPROGRAMBINARYOESPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); typedef void (GL_APIENTRYP PFNGLPROGRAMBINARYOESPROC) (GLuint program, GLenum binaryFormat, const void *binary, GLint length); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glGetProgramBinaryOES (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); GL_APICALL void GL_APIENTRY glProgramBinaryOES (GLuint program, GLenum binaryFormat, const void *binary, GLint length); #endif #endif /* GL_OES_get_program_binary */ #ifndef GL_OES_gpu_shader5 #define GL_OES_gpu_shader5 1 #endif /* GL_OES_gpu_shader5 */ #ifndef GL_OES_mapbuffer #define GL_OES_mapbuffer 1 #define GL_WRITE_ONLY_OES 0x88B9 #define GL_BUFFER_ACCESS_OES 0x88BB #define GL_BUFFER_MAPPED_OES 0x88BC #define GL_BUFFER_MAP_POINTER_OES 0x88BD typedef void *(GL_APIENTRYP PFNGLMAPBUFFEROESPROC) (GLenum target, GLenum access); typedef GLboolean (GL_APIENTRYP PFNGLUNMAPBUFFEROESPROC) (GLenum target); typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVOESPROC) (GLenum target, GLenum pname, void **params); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void *GL_APIENTRY glMapBufferOES (GLenum target, GLenum access); GL_APICALL GLboolean GL_APIENTRY glUnmapBufferOES (GLenum target); GL_APICALL void GL_APIENTRY glGetBufferPointervOES (GLenum target, GLenum pname, void **params); #endif #endif /* GL_OES_mapbuffer */ #ifndef GL_OES_packed_depth_stencil #define GL_OES_packed_depth_stencil 1 #define GL_DEPTH_STENCIL_OES 0x84F9 #define GL_UNSIGNED_INT_24_8_OES 0x84FA #define GL_DEPTH24_STENCIL8_OES 0x88F0 #endif /* GL_OES_packed_depth_stencil */ #ifndef GL_OES_primitive_bounding_box #define GL_OES_primitive_bounding_box 1 #define GL_PRIMITIVE_BOUNDING_BOX_OES 0x92BE typedef void (GL_APIENTRYP PFNGLPRIMITIVEBOUNDINGBOXOESPROC) (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glPrimitiveBoundingBoxOES (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); #endif #endif /* GL_OES_primitive_bounding_box */ #ifndef GL_OES_required_internalformat #define GL_OES_required_internalformat 1 #define GL_ALPHA8_OES 0x803C #define GL_DEPTH_COMPONENT16_OES 0x81A5 #define GL_LUMINANCE4_ALPHA4_OES 0x8043 #define GL_LUMINANCE8_ALPHA8_OES 0x8045 #define GL_LUMINANCE8_OES 0x8040 #define GL_RGBA4_OES 0x8056 #define GL_RGB5_A1_OES 0x8057 #define GL_RGB565_OES 0x8D62 #define GL_RGB8_OES 0x8051 #define GL_RGBA8_OES 0x8058 #define GL_RGB10_EXT 0x8052 #define GL_RGB10_A2_EXT 0x8059 #endif /* GL_OES_required_internalformat */ #ifndef GL_OES_rgb8_rgba8 #define GL_OES_rgb8_rgba8 1 #endif /* GL_OES_rgb8_rgba8 */ #ifndef GL_OES_sample_shading #define GL_OES_sample_shading 1 #define GL_SAMPLE_SHADING_OES 0x8C36 #define GL_MIN_SAMPLE_SHADING_VALUE_OES 0x8C37 typedef void (GL_APIENTRYP PFNGLMINSAMPLESHADINGOESPROC) (GLfloat value); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glMinSampleShadingOES (GLfloat value); #endif #endif /* GL_OES_sample_shading */ #ifndef GL_OES_sample_variables #define GL_OES_sample_variables 1 #endif /* GL_OES_sample_variables */ #ifndef GL_OES_shader_image_atomic #define GL_OES_shader_image_atomic 1 #endif /* GL_OES_shader_image_atomic */ #ifndef GL_OES_shader_io_blocks #define GL_OES_shader_io_blocks 1 #endif /* GL_OES_shader_io_blocks */ #ifndef GL_OES_shader_multisample_interpolation #define GL_OES_shader_multisample_interpolation 1 #define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_OES 0x8E5B #define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_OES 0x8E5C #define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS_OES 0x8E5D #endif /* GL_OES_shader_multisample_interpolation */ #ifndef GL_OES_standard_derivatives #define GL_OES_standard_derivatives 1 #define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES 0x8B8B #endif /* GL_OES_standard_derivatives */ #ifndef GL_OES_stencil1 #define GL_OES_stencil1 1 #define GL_STENCIL_INDEX1_OES 0x8D46 #endif /* GL_OES_stencil1 */ #ifndef GL_OES_stencil4 #define GL_OES_stencil4 1 #define GL_STENCIL_INDEX4_OES 0x8D47 #endif /* GL_OES_stencil4 */ #ifndef GL_OES_surfaceless_context #define GL_OES_surfaceless_context 1 #define GL_FRAMEBUFFER_UNDEFINED_OES 0x8219 #endif /* GL_OES_surfaceless_context */ #ifndef GL_OES_tessellation_point_size #define GL_OES_tessellation_point_size 1 #endif /* GL_OES_tessellation_point_size */ #ifndef GL_OES_tessellation_shader #define GL_OES_tessellation_shader 1 #define GL_PATCHES_OES 0x000E #define GL_PATCH_VERTICES_OES 0x8E72 #define GL_TESS_CONTROL_OUTPUT_VERTICES_OES 0x8E75 #define GL_TESS_GEN_MODE_OES 0x8E76 #define GL_TESS_GEN_SPACING_OES 0x8E77 #define GL_TESS_GEN_VERTEX_ORDER_OES 0x8E78 #define GL_TESS_GEN_POINT_MODE_OES 0x8E79 #define GL_ISOLINES_OES 0x8E7A #define GL_QUADS_OES 0x0007 #define GL_FRACTIONAL_ODD_OES 0x8E7B #define GL_FRACTIONAL_EVEN_OES 0x8E7C #define GL_MAX_PATCH_VERTICES_OES 0x8E7D #define GL_MAX_TESS_GEN_LEVEL_OES 0x8E7E #define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS_OES 0x8E7F #define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS_OES 0x8E80 #define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS_OES 0x8E81 #define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS_OES 0x8E82 #define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS_OES 0x8E83 #define GL_MAX_TESS_PATCH_COMPONENTS_OES 0x8E84 #define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS_OES 0x8E85 #define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS_OES 0x8E86 #define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS_OES 0x8E89 #define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS_OES 0x8E8A #define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS_OES 0x886C #define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS_OES 0x886D #define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS_OES 0x8E1E #define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS_OES 0x8E1F #define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS_OES 0x92CD #define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS_OES 0x92CE #define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS_OES 0x92D3 #define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS_OES 0x92D4 #define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS_OES 0x90CB #define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS_OES 0x90CC #define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS_OES 0x90D8 #define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS_OES 0x90D9 #define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED_OES 0x8221 #define GL_IS_PER_PATCH_OES 0x92E7 #define GL_REFERENCED_BY_TESS_CONTROL_SHADER_OES 0x9307 #define GL_REFERENCED_BY_TESS_EVALUATION_SHADER_OES 0x9308 #define GL_TESS_CONTROL_SHADER_OES 0x8E88 #define GL_TESS_EVALUATION_SHADER_OES 0x8E87 #define GL_TESS_CONTROL_SHADER_BIT_OES 0x00000008 #define GL_TESS_EVALUATION_SHADER_BIT_OES 0x00000010 typedef void (GL_APIENTRYP PFNGLPATCHPARAMETERIOESPROC) (GLenum pname, GLint value); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glPatchParameteriOES (GLenum pname, GLint value); #endif #endif /* GL_OES_tessellation_shader */ #ifndef GL_OES_texture_3D #define GL_OES_texture_3D 1 #define GL_TEXTURE_WRAP_R_OES 0x8072 #define GL_TEXTURE_3D_OES 0x806F #define GL_TEXTURE_BINDING_3D_OES 0x806A #define GL_MAX_3D_TEXTURE_SIZE_OES 0x8073 #define GL_SAMPLER_3D_OES 0x8B5F #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES 0x8CD4 typedef void (GL_APIENTRYP PFNGLTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DOESPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); GL_APICALL void GL_APIENTRY glTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); GL_APICALL void GL_APIENTRY glCopyTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); GL_APICALL void GL_APIENTRY glCompressedTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); GL_APICALL void GL_APIENTRY glCompressedTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); GL_APICALL void GL_APIENTRY glFramebufferTexture3DOES (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); #endif #endif /* GL_OES_texture_3D */ #ifndef GL_OES_texture_border_clamp #define GL_OES_texture_border_clamp 1 #define GL_TEXTURE_BORDER_COLOR_OES 0x1004 #define GL_CLAMP_TO_BORDER_OES 0x812D typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIIVOESPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIUIVOESPROC) (GLenum target, GLenum pname, const GLuint *params); typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIIVOESPROC) (GLenum target, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIUIVOESPROC) (GLenum target, GLenum pname, GLuint *params); typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIIVOESPROC) (GLuint sampler, GLenum pname, const GLint *param); typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIUIVOESPROC) (GLuint sampler, GLenum pname, const GLuint *param); typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIIVOESPROC) (GLuint sampler, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVOESPROC) (GLuint sampler, GLenum pname, GLuint *params); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glTexParameterIivOES (GLenum target, GLenum pname, const GLint *params); GL_APICALL void GL_APIENTRY glTexParameterIuivOES (GLenum target, GLenum pname, const GLuint *params); GL_APICALL void GL_APIENTRY glGetTexParameterIivOES (GLenum target, GLenum pname, GLint *params); GL_APICALL void GL_APIENTRY glGetTexParameterIuivOES (GLenum target, GLenum pname, GLuint *params); GL_APICALL void GL_APIENTRY glSamplerParameterIivOES (GLuint sampler, GLenum pname, const GLint *param); GL_APICALL void GL_APIENTRY glSamplerParameterIuivOES (GLuint sampler, GLenum pname, const GLuint *param); GL_APICALL void GL_APIENTRY glGetSamplerParameterIivOES (GLuint sampler, GLenum pname, GLint *params); GL_APICALL void GL_APIENTRY glGetSamplerParameterIuivOES (GLuint sampler, GLenum pname, GLuint *params); #endif #endif /* GL_OES_texture_border_clamp */ #ifndef GL_OES_texture_buffer #define GL_OES_texture_buffer 1 #define GL_TEXTURE_BUFFER_OES 0x8C2A #define GL_TEXTURE_BUFFER_BINDING_OES 0x8C2A #define GL_MAX_TEXTURE_BUFFER_SIZE_OES 0x8C2B #define GL_TEXTURE_BINDING_BUFFER_OES 0x8C2C #define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_OES 0x8C2D #define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT_OES 0x919F #define GL_SAMPLER_BUFFER_OES 0x8DC2 #define GL_INT_SAMPLER_BUFFER_OES 0x8DD0 #define GL_UNSIGNED_INT_SAMPLER_BUFFER_OES 0x8DD8 #define GL_IMAGE_BUFFER_OES 0x9051 #define GL_INT_IMAGE_BUFFER_OES 0x905C #define GL_UNSIGNED_INT_IMAGE_BUFFER_OES 0x9067 #define GL_TEXTURE_BUFFER_OFFSET_OES 0x919D #define GL_TEXTURE_BUFFER_SIZE_OES 0x919E typedef void (GL_APIENTRYP PFNGLTEXBUFFEROESPROC) (GLenum target, GLenum internalformat, GLuint buffer); typedef void (GL_APIENTRYP PFNGLTEXBUFFERRANGEOESPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glTexBufferOES (GLenum target, GLenum internalformat, GLuint buffer); GL_APICALL void GL_APIENTRY glTexBufferRangeOES (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); #endif #endif /* GL_OES_texture_buffer */ #ifndef GL_OES_texture_compression_astc #define GL_OES_texture_compression_astc 1 #define GL_COMPRESSED_RGBA_ASTC_3x3x3_OES 0x93C0 #define GL_COMPRESSED_RGBA_ASTC_4x3x3_OES 0x93C1 #define GL_COMPRESSED_RGBA_ASTC_4x4x3_OES 0x93C2 #define GL_COMPRESSED_RGBA_ASTC_4x4x4_OES 0x93C3 #define GL_COMPRESSED_RGBA_ASTC_5x4x4_OES 0x93C4 #define GL_COMPRESSED_RGBA_ASTC_5x5x4_OES 0x93C5 #define GL_COMPRESSED_RGBA_ASTC_5x5x5_OES 0x93C6 #define GL_COMPRESSED_RGBA_ASTC_6x5x5_OES 0x93C7 #define GL_COMPRESSED_RGBA_ASTC_6x6x5_OES 0x93C8 #define GL_COMPRESSED_RGBA_ASTC_6x6x6_OES 0x93C9 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_3x3x3_OES 0x93E0 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x3x3_OES 0x93E1 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x3_OES 0x93E2 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x4_OES 0x93E3 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4x4_OES 0x93E4 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x4_OES 0x93E5 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x5_OES 0x93E6 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5x5_OES 0x93E7 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x5_OES 0x93E8 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x6_OES 0x93E9 #endif /* GL_OES_texture_compression_astc */ #ifndef GL_OES_texture_cube_map_array #define GL_OES_texture_cube_map_array 1 #define GL_TEXTURE_CUBE_MAP_ARRAY_OES 0x9009 #define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_OES 0x900A #define GL_SAMPLER_CUBE_MAP_ARRAY_OES 0x900C #define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_OES 0x900D #define GL_INT_SAMPLER_CUBE_MAP_ARRAY_OES 0x900E #define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_OES 0x900F #define GL_IMAGE_CUBE_MAP_ARRAY_OES 0x9054 #define GL_INT_IMAGE_CUBE_MAP_ARRAY_OES 0x905F #define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_OES 0x906A #endif /* GL_OES_texture_cube_map_array */ #ifndef GL_OES_texture_float #define GL_OES_texture_float 1 #endif /* GL_OES_texture_float */ #ifndef GL_OES_texture_float_linear #define GL_OES_texture_float_linear 1 #endif /* GL_OES_texture_float_linear */ #ifndef GL_OES_texture_half_float #define GL_OES_texture_half_float 1 #define GL_HALF_FLOAT_OES 0x8D61 #endif /* GL_OES_texture_half_float */ #ifndef GL_OES_texture_half_float_linear #define GL_OES_texture_half_float_linear 1 #endif /* GL_OES_texture_half_float_linear */ #ifndef GL_OES_texture_npot #define GL_OES_texture_npot 1 #endif /* GL_OES_texture_npot */ #ifndef GL_OES_texture_stencil8 #define GL_OES_texture_stencil8 1 #define GL_STENCIL_INDEX_OES 0x1901 #define GL_STENCIL_INDEX8_OES 0x8D48 #endif /* GL_OES_texture_stencil8 */ #ifndef GL_OES_texture_storage_multisample_2d_array #define GL_OES_texture_storage_multisample_2d_array 1 #define GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES 0x9102 #define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY_OES 0x9105 #define GL_SAMPLER_2D_MULTISAMPLE_ARRAY_OES 0x910B #define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES 0x910C #define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES 0x910D typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEOESPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glTexStorage3DMultisampleOES (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); #endif #endif /* GL_OES_texture_storage_multisample_2d_array */ #ifndef GL_OES_texture_view #define GL_OES_texture_view 1 #define GL_TEXTURE_VIEW_MIN_LEVEL_OES 0x82DB #define GL_TEXTURE_VIEW_NUM_LEVELS_OES 0x82DC #define GL_TEXTURE_VIEW_MIN_LAYER_OES 0x82DD #define GL_TEXTURE_VIEW_NUM_LAYERS_OES 0x82DE #define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF typedef void (GL_APIENTRYP PFNGLTEXTUREVIEWOESPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glTextureViewOES (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); #endif #endif /* GL_OES_texture_view */ #ifndef GL_OES_vertex_array_object #define GL_OES_vertex_array_object 1 #define GL_VERTEX_ARRAY_BINDING_OES 0x85B5 typedef void (GL_APIENTRYP PFNGLBINDVERTEXARRAYOESPROC) (GLuint array); typedef void (GL_APIENTRYP PFNGLDELETEVERTEXARRAYSOESPROC) (GLsizei n, const GLuint *arrays); typedef void (GL_APIENTRYP PFNGLGENVERTEXARRAYSOESPROC) (GLsizei n, GLuint *arrays); typedef GLboolean (GL_APIENTRYP PFNGLISVERTEXARRAYOESPROC) (GLuint array); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glBindVertexArrayOES (GLuint array); GL_APICALL void GL_APIENTRY glDeleteVertexArraysOES (GLsizei n, const GLuint *arrays); GL_APICALL void GL_APIENTRY glGenVertexArraysOES (GLsizei n, GLuint *arrays); GL_APICALL GLboolean GL_APIENTRY glIsVertexArrayOES (GLuint array); #endif #endif /* GL_OES_vertex_array_object */ #ifndef GL_OES_vertex_half_float #define GL_OES_vertex_half_float 1 #endif /* GL_OES_vertex_half_float */ #ifndef GL_OES_vertex_type_10_10_10_2 #define GL_OES_vertex_type_10_10_10_2 1 #define GL_UNSIGNED_INT_10_10_10_2_OES 0x8DF6 #define GL_INT_10_10_10_2_OES 0x8DF7 #endif /* GL_OES_vertex_type_10_10_10_2 */ #ifndef GL_OES_viewport_array #define GL_OES_viewport_array 1 #define GL_MAX_VIEWPORTS_OES 0x825B #define GL_VIEWPORT_SUBPIXEL_BITS_OES 0x825C #define GL_VIEWPORT_BOUNDS_RANGE_OES 0x825D #define GL_VIEWPORT_INDEX_PROVOKING_VERTEX_OES 0x825F typedef void (GL_APIENTRYP PFNGLVIEWPORTARRAYVOESPROC) (GLuint first, GLsizei count, const GLfloat *v); typedef void (GL_APIENTRYP PFNGLVIEWPORTINDEXEDFOESPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); typedef void (GL_APIENTRYP PFNGLVIEWPORTINDEXEDFVOESPROC) (GLuint index, const GLfloat *v); typedef void (GL_APIENTRYP PFNGLSCISSORARRAYVOESPROC) (GLuint first, GLsizei count, const GLint *v); typedef void (GL_APIENTRYP PFNGLSCISSORINDEXEDOESPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); typedef void (GL_APIENTRYP PFNGLSCISSORINDEXEDVOESPROC) (GLuint index, const GLint *v); typedef void (GL_APIENTRYP PFNGLDEPTHRANGEARRAYFVOESPROC) (GLuint first, GLsizei count, const GLfloat *v); typedef void (GL_APIENTRYP PFNGLDEPTHRANGEINDEXEDFOESPROC) (GLuint index, GLfloat n, GLfloat f); typedef void (GL_APIENTRYP PFNGLGETFLOATI_VOESPROC) (GLenum target, GLuint index, GLfloat *data); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glViewportArrayvOES (GLuint first, GLsizei count, const GLfloat *v); GL_APICALL void GL_APIENTRY glViewportIndexedfOES (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); GL_APICALL void GL_APIENTRY glViewportIndexedfvOES (GLuint index, const GLfloat *v); GL_APICALL void GL_APIENTRY glScissorArrayvOES (GLuint first, GLsizei count, const GLint *v); GL_APICALL void GL_APIENTRY glScissorIndexedOES (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); GL_APICALL void GL_APIENTRY glScissorIndexedvOES (GLuint index, const GLint *v); GL_APICALL void GL_APIENTRY glDepthRangeArrayfvOES (GLuint first, GLsizei count, const GLfloat *v); GL_APICALL void GL_APIENTRY glDepthRangeIndexedfOES (GLuint index, GLfloat n, GLfloat f); GL_APICALL void GL_APIENTRY glGetFloati_vOES (GLenum target, GLuint index, GLfloat *data); #endif #endif /* GL_OES_viewport_array */ #ifndef GL_AMD_compressed_3DC_texture #define GL_AMD_compressed_3DC_texture 1 #define GL_3DC_X_AMD 0x87F9 #define GL_3DC_XY_AMD 0x87FA #endif /* GL_AMD_compressed_3DC_texture */ #ifndef GL_AMD_compressed_ATC_texture #define GL_AMD_compressed_ATC_texture 1 #define GL_ATC_RGB_AMD 0x8C92 #define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD 0x8C93 #define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD 0x87EE #endif /* GL_AMD_compressed_ATC_texture */ #ifndef GL_AMD_framebuffer_multisample_advanced #define GL_AMD_framebuffer_multisample_advanced 1 #define GL_RENDERBUFFER_STORAGE_SAMPLES_AMD 0x91B2 #define GL_MAX_COLOR_FRAMEBUFFER_SAMPLES_AMD 0x91B3 #define GL_MAX_COLOR_FRAMEBUFFER_STORAGE_SAMPLES_AMD 0x91B4 #define GL_MAX_DEPTH_STENCIL_FRAMEBUFFER_SAMPLES_AMD 0x91B5 #define GL_NUM_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B6 #define GL_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B7 typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); typedef void (GL_APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleAdvancedAMD (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); GL_APICALL void GL_APIENTRY glNamedRenderbufferStorageMultisampleAdvancedAMD (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); #endif #endif /* GL_AMD_framebuffer_multisample_advanced */ #ifndef GL_AMD_performance_monitor #define GL_AMD_performance_monitor 1 #define GL_COUNTER_TYPE_AMD 0x8BC0 #define GL_COUNTER_RANGE_AMD 0x8BC1 #define GL_UNSIGNED_INT64_AMD 0x8BC2 #define GL_PERCENTAGE_AMD 0x8BC3 #define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 #define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 #define GL_PERFMON_RESULT_AMD 0x8BC6 typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups); typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, void *data); typedef void (GL_APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); typedef void (GL_APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); typedef void (GL_APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); typedef void (GL_APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); typedef void (GL_APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); GL_APICALL void GL_APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, void *data); GL_APICALL void GL_APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors); GL_APICALL void GL_APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors); GL_APICALL void GL_APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); GL_APICALL void GL_APIENTRY glBeginPerfMonitorAMD (GLuint monitor); GL_APICALL void GL_APIENTRY glEndPerfMonitorAMD (GLuint monitor); GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); #endif #endif /* GL_AMD_performance_monitor */ #ifndef GL_AMD_program_binary_Z400 #define GL_AMD_program_binary_Z400 1 #define GL_Z400_BINARY_AMD 0x8740 #endif /* GL_AMD_program_binary_Z400 */ #ifndef GL_ANDROID_extension_pack_es31a #define GL_ANDROID_extension_pack_es31a 1 #endif /* GL_ANDROID_extension_pack_es31a */ #ifndef GL_ANGLE_depth_texture #define GL_ANGLE_depth_texture 1 #endif /* GL_ANGLE_depth_texture */ #ifndef GL_ANGLE_framebuffer_blit #define GL_ANGLE_framebuffer_blit 1 #define GL_READ_FRAMEBUFFER_ANGLE 0x8CA8 #define GL_DRAW_FRAMEBUFFER_ANGLE 0x8CA9 #define GL_DRAW_FRAMEBUFFER_BINDING_ANGLE 0x8CA6 #define GL_READ_FRAMEBUFFER_BINDING_ANGLE 0x8CAA typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERANGLEPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glBlitFramebufferANGLE (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); #endif #endif /* GL_ANGLE_framebuffer_blit */ #ifndef GL_ANGLE_framebuffer_multisample #define GL_ANGLE_framebuffer_multisample 1 #define GL_RENDERBUFFER_SAMPLES_ANGLE 0x8CAB #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE 0x8D56 #define GL_MAX_SAMPLES_ANGLE 0x8D57 typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleANGLE (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); #endif #endif /* GL_ANGLE_framebuffer_multisample */ #ifndef GL_ANGLE_instanced_arrays #define GL_ANGLE_instanced_arrays 1 #define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE 0x88FE typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDANGLEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDANGLEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORANGLEPROC) (GLuint index, GLuint divisor); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glDrawArraysInstancedANGLE (GLenum mode, GLint first, GLsizei count, GLsizei primcount); GL_APICALL void GL_APIENTRY glDrawElementsInstancedANGLE (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); GL_APICALL void GL_APIENTRY glVertexAttribDivisorANGLE (GLuint index, GLuint divisor); #endif #endif /* GL_ANGLE_instanced_arrays */ #ifndef GL_ANGLE_pack_reverse_row_order #define GL_ANGLE_pack_reverse_row_order 1 #define GL_PACK_REVERSE_ROW_ORDER_ANGLE 0x93A4 #endif /* GL_ANGLE_pack_reverse_row_order */ #ifndef GL_ANGLE_program_binary #define GL_ANGLE_program_binary 1 #define GL_PROGRAM_BINARY_ANGLE 0x93A6 #endif /* GL_ANGLE_program_binary */ #ifndef GL_ANGLE_texture_compression_dxt3 #define GL_ANGLE_texture_compression_dxt3 1 #define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 #endif /* GL_ANGLE_texture_compression_dxt3 */ #ifndef GL_ANGLE_texture_compression_dxt5 #define GL_ANGLE_texture_compression_dxt5 1 #define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 #endif /* GL_ANGLE_texture_compression_dxt5 */ #ifndef GL_ANGLE_texture_usage #define GL_ANGLE_texture_usage 1 #define GL_TEXTURE_USAGE_ANGLE 0x93A2 #define GL_FRAMEBUFFER_ATTACHMENT_ANGLE 0x93A3 #endif /* GL_ANGLE_texture_usage */ #ifndef GL_ANGLE_translated_shader_source #define GL_ANGLE_translated_shader_source 1 #define GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE 0x93A0 typedef void (GL_APIENTRYP PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glGetTranslatedShaderSourceANGLE (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); #endif #endif /* GL_ANGLE_translated_shader_source */ #ifndef GL_APPLE_clip_distance #define GL_APPLE_clip_distance 1 #define GL_MAX_CLIP_DISTANCES_APPLE 0x0D32 #define GL_CLIP_DISTANCE0_APPLE 0x3000 #define GL_CLIP_DISTANCE1_APPLE 0x3001 #define GL_CLIP_DISTANCE2_APPLE 0x3002 #define GL_CLIP_DISTANCE3_APPLE 0x3003 #define GL_CLIP_DISTANCE4_APPLE 0x3004 #define GL_CLIP_DISTANCE5_APPLE 0x3005 #define GL_CLIP_DISTANCE6_APPLE 0x3006 #define GL_CLIP_DISTANCE7_APPLE 0x3007 #endif /* GL_APPLE_clip_distance */ #ifndef GL_APPLE_color_buffer_packed_float #define GL_APPLE_color_buffer_packed_float 1 #endif /* GL_APPLE_color_buffer_packed_float */ #ifndef GL_APPLE_copy_texture_levels #define GL_APPLE_copy_texture_levels 1 typedef void (GL_APIENTRYP PFNGLCOPYTEXTURELEVELSAPPLEPROC) (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glCopyTextureLevelsAPPLE (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); #endif #endif /* GL_APPLE_copy_texture_levels */ #ifndef GL_APPLE_framebuffer_multisample #define GL_APPLE_framebuffer_multisample 1 #define GL_RENDERBUFFER_SAMPLES_APPLE 0x8CAB #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_APPLE 0x8D56 #define GL_MAX_SAMPLES_APPLE 0x8D57 #define GL_READ_FRAMEBUFFER_APPLE 0x8CA8 #define GL_DRAW_FRAMEBUFFER_APPLE 0x8CA9 #define GL_DRAW_FRAMEBUFFER_BINDING_APPLE 0x8CA6 #define GL_READ_FRAMEBUFFER_BINDING_APPLE 0x8CAA typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); typedef void (GL_APIENTRYP PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleAPPLE (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); GL_APICALL void GL_APIENTRY glResolveMultisampleFramebufferAPPLE (void); #endif #endif /* GL_APPLE_framebuffer_multisample */ #ifndef GL_APPLE_rgb_422 #define GL_APPLE_rgb_422 1 #define GL_RGB_422_APPLE 0x8A1F #define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA #define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB #define GL_RGB_RAW_422_APPLE 0x8A51 #endif /* GL_APPLE_rgb_422 */ #ifndef GL_APPLE_sync #define GL_APPLE_sync 1 #define GL_SYNC_OBJECT_APPLE 0x8A53 #define GL_MAX_SERVER_WAIT_TIMEOUT_APPLE 0x9111 #define GL_OBJECT_TYPE_APPLE 0x9112 #define GL_SYNC_CONDITION_APPLE 0x9113 #define GL_SYNC_STATUS_APPLE 0x9114 #define GL_SYNC_FLAGS_APPLE 0x9115 #define GL_SYNC_FENCE_APPLE 0x9116 #define GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE 0x9117 #define GL_UNSIGNALED_APPLE 0x9118 #define GL_SIGNALED_APPLE 0x9119 #define GL_ALREADY_SIGNALED_APPLE 0x911A #define GL_TIMEOUT_EXPIRED_APPLE 0x911B #define GL_CONDITION_SATISFIED_APPLE 0x911C #define GL_WAIT_FAILED_APPLE 0x911D #define GL_SYNC_FLUSH_COMMANDS_BIT_APPLE 0x00000001 #define GL_TIMEOUT_IGNORED_APPLE 0xFFFFFFFFFFFFFFFFull typedef GLsync (GL_APIENTRYP PFNGLFENCESYNCAPPLEPROC) (GLenum condition, GLbitfield flags); typedef GLboolean (GL_APIENTRYP PFNGLISSYNCAPPLEPROC) (GLsync sync); typedef void (GL_APIENTRYP PFNGLDELETESYNCAPPLEPROC) (GLsync sync); typedef GLenum (GL_APIENTRYP PFNGLCLIENTWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); typedef void (GL_APIENTRYP PFNGLWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); typedef void (GL_APIENTRYP PFNGLGETINTEGER64VAPPLEPROC) (GLenum pname, GLint64 *params); typedef void (GL_APIENTRYP PFNGLGETSYNCIVAPPLEPROC) (GLsync sync, GLenum pname, GLsizei count, GLsizei *length, GLint *values); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL GLsync GL_APIENTRY glFenceSyncAPPLE (GLenum condition, GLbitfield flags); GL_APICALL GLboolean GL_APIENTRY glIsSyncAPPLE (GLsync sync); GL_APICALL void GL_APIENTRY glDeleteSyncAPPLE (GLsync sync); GL_APICALL GLenum GL_APIENTRY glClientWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout); GL_APICALL void GL_APIENTRY glWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout); GL_APICALL void GL_APIENTRY glGetInteger64vAPPLE (GLenum pname, GLint64 *params); GL_APICALL void GL_APIENTRY glGetSyncivAPPLE (GLsync sync, GLenum pname, GLsizei count, GLsizei *length, GLint *values); #endif #endif /* GL_APPLE_sync */ #ifndef GL_APPLE_texture_format_BGRA8888 #define GL_APPLE_texture_format_BGRA8888 1 #define GL_BGRA_EXT 0x80E1 #define GL_BGRA8_EXT 0x93A1 #endif /* GL_APPLE_texture_format_BGRA8888 */ #ifndef GL_APPLE_texture_max_level #define GL_APPLE_texture_max_level 1 #define GL_TEXTURE_MAX_LEVEL_APPLE 0x813D #endif /* GL_APPLE_texture_max_level */ #ifndef GL_APPLE_texture_packed_float #define GL_APPLE_texture_packed_float 1 #define GL_UNSIGNED_INT_10F_11F_11F_REV_APPLE 0x8C3B #define GL_UNSIGNED_INT_5_9_9_9_REV_APPLE 0x8C3E #define GL_R11F_G11F_B10F_APPLE 0x8C3A #define GL_RGB9_E5_APPLE 0x8C3D #endif /* GL_APPLE_texture_packed_float */ #ifndef GL_ARM_mali_program_binary #define GL_ARM_mali_program_binary 1 #define GL_MALI_PROGRAM_BINARY_ARM 0x8F61 #endif /* GL_ARM_mali_program_binary */ #ifndef GL_ARM_mali_shader_binary #define GL_ARM_mali_shader_binary 1 #define GL_MALI_SHADER_BINARY_ARM 0x8F60 #endif /* GL_ARM_mali_shader_binary */ #ifndef GL_ARM_rgba8 #define GL_ARM_rgba8 1 #endif /* GL_ARM_rgba8 */ #ifndef GL_ARM_shader_framebuffer_fetch #define GL_ARM_shader_framebuffer_fetch 1 #define GL_FETCH_PER_SAMPLE_ARM 0x8F65 #define GL_FRAGMENT_SHADER_FRAMEBUFFER_FETCH_MRT_ARM 0x8F66 #endif /* GL_ARM_shader_framebuffer_fetch */ #ifndef GL_ARM_shader_framebuffer_fetch_depth_stencil #define GL_ARM_shader_framebuffer_fetch_depth_stencil 1 #endif /* GL_ARM_shader_framebuffer_fetch_depth_stencil */ #ifndef GL_ARM_texture_unnormalized_coordinates #define GL_ARM_texture_unnormalized_coordinates 1 #define GL_TEXTURE_UNNORMALIZED_COORDINATES_ARM 0x8F6A #endif /* GL_ARM_texture_unnormalized_coordinates */ #ifndef GL_DMP_program_binary #define GL_DMP_program_binary 1 #define GL_SMAPHS30_PROGRAM_BINARY_DMP 0x9251 #define GL_SMAPHS_PROGRAM_BINARY_DMP 0x9252 #define GL_DMP_PROGRAM_BINARY_DMP 0x9253 #endif /* GL_DMP_program_binary */ #ifndef GL_DMP_shader_binary #define GL_DMP_shader_binary 1 #define GL_SHADER_BINARY_DMP 0x9250 #endif /* GL_DMP_shader_binary */ #ifndef GL_EXT_EGL_image_array #define GL_EXT_EGL_image_array 1 #endif /* GL_EXT_EGL_image_array */ #ifndef GL_EXT_EGL_image_storage #define GL_EXT_EGL_image_storage 1 typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXSTORAGEEXTPROC) (GLenum target, GLeglImageOES image, const GLint* attrib_list); typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXTURESTORAGEEXTPROC) (GLuint texture, GLeglImageOES image, const GLint* attrib_list); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glEGLImageTargetTexStorageEXT (GLenum target, GLeglImageOES image, const GLint* attrib_list); GL_APICALL void GL_APIENTRY glEGLImageTargetTextureStorageEXT (GLuint texture, GLeglImageOES image, const GLint* attrib_list); #endif #endif /* GL_EXT_EGL_image_storage */ #ifndef GL_EXT_EGL_image_storage_compression #define GL_EXT_EGL_image_storage_compression 1 #define GL_SURFACE_COMPRESSION_EXT 0x96C0 #define GL_SURFACE_COMPRESSION_FIXED_RATE_NONE_EXT 0x96C1 #define GL_SURFACE_COMPRESSION_FIXED_RATE_DEFAULT_EXT 0x96C2 #endif /* GL_EXT_EGL_image_storage_compression */ #ifndef GL_EXT_YUV_target #define GL_EXT_YUV_target 1 #define GL_SAMPLER_EXTERNAL_2D_Y2Y_EXT 0x8BE7 #endif /* GL_EXT_YUV_target */ #ifndef GL_EXT_base_instance #define GL_EXT_base_instance 1 typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEEXTPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glDrawArraysInstancedBaseInstanceEXT (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); GL_APICALL void GL_APIENTRY glDrawElementsInstancedBaseInstanceEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); GL_APICALL void GL_APIENTRY glDrawElementsInstancedBaseVertexBaseInstanceEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); #endif #endif /* GL_EXT_base_instance */ #ifndef GL_EXT_blend_func_extended #define GL_EXT_blend_func_extended 1 #define GL_SRC1_COLOR_EXT 0x88F9 #define GL_SRC1_ALPHA_EXT 0x8589 #define GL_ONE_MINUS_SRC1_COLOR_EXT 0x88FA #define GL_ONE_MINUS_SRC1_ALPHA_EXT 0x88FB #define GL_SRC_ALPHA_SATURATE_EXT 0x0308 #define GL_LOCATION_INDEX_EXT 0x930F #define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS_EXT 0x88FC typedef void (GL_APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDEXTPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); typedef void (GL_APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name); typedef GLint (GL_APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXEXTPROC) (GLuint program, GLenum programInterface, const GLchar *name); typedef GLint (GL_APIENTRYP PFNGLGETFRAGDATAINDEXEXTPROC) (GLuint program, const GLchar *name); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glBindFragDataLocationIndexedEXT (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); GL_APICALL void GL_APIENTRY glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name); GL_APICALL GLint GL_APIENTRY glGetProgramResourceLocationIndexEXT (GLuint program, GLenum programInterface, const GLchar *name); GL_APICALL GLint GL_APIENTRY glGetFragDataIndexEXT (GLuint program, const GLchar *name); #endif #endif /* GL_EXT_blend_func_extended */ #ifndef GL_EXT_blend_minmax #define GL_EXT_blend_minmax 1 #define GL_MIN_EXT 0x8007 #define GL_MAX_EXT 0x8008 #endif /* GL_EXT_blend_minmax */ #ifndef GL_EXT_buffer_storage #define GL_EXT_buffer_storage 1 #define GL_MAP_READ_BIT 0x0001 #define GL_MAP_WRITE_BIT 0x0002 #define GL_MAP_PERSISTENT_BIT_EXT 0x0040 #define GL_MAP_COHERENT_BIT_EXT 0x0080 #define GL_DYNAMIC_STORAGE_BIT_EXT 0x0100 #define GL_CLIENT_STORAGE_BIT_EXT 0x0200 #define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT_EXT 0x00004000 #define GL_BUFFER_IMMUTABLE_STORAGE_EXT 0x821F #define GL_BUFFER_STORAGE_FLAGS_EXT 0x8220 typedef void (GL_APIENTRYP PFNGLBUFFERSTORAGEEXTPROC) (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glBufferStorageEXT (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); #endif #endif /* GL_EXT_buffer_storage */ #ifndef GL_EXT_clear_texture #define GL_EXT_clear_texture 1 typedef void (GL_APIENTRYP PFNGLCLEARTEXIMAGEEXTPROC) (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); typedef void (GL_APIENTRYP PFNGLCLEARTEXSUBIMAGEEXTPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glClearTexImageEXT (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); GL_APICALL void GL_APIENTRY glClearTexSubImageEXT (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); #endif #endif /* GL_EXT_clear_texture */ #ifndef GL_EXT_clip_control #define GL_EXT_clip_control 1 #define GL_LOWER_LEFT_EXT 0x8CA1 #define GL_UPPER_LEFT_EXT 0x8CA2 #define GL_NEGATIVE_ONE_TO_ONE_EXT 0x935E #define GL_ZERO_TO_ONE_EXT 0x935F #define GL_CLIP_ORIGIN_EXT 0x935C #define GL_CLIP_DEPTH_MODE_EXT 0x935D typedef void (GL_APIENTRYP PFNGLCLIPCONTROLEXTPROC) (GLenum origin, GLenum depth); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glClipControlEXT (GLenum origin, GLenum depth); #endif #endif /* GL_EXT_clip_control */ #ifndef GL_EXT_clip_cull_distance #define GL_EXT_clip_cull_distance 1 #define GL_MAX_CLIP_DISTANCES_EXT 0x0D32 #define GL_MAX_CULL_DISTANCES_EXT 0x82F9 #define GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES_EXT 0x82FA #define GL_CLIP_DISTANCE0_EXT 0x3000 #define GL_CLIP_DISTANCE1_EXT 0x3001 #define GL_CLIP_DISTANCE2_EXT 0x3002 #define GL_CLIP_DISTANCE3_EXT 0x3003 #define GL_CLIP_DISTANCE4_EXT 0x3004 #define GL_CLIP_DISTANCE5_EXT 0x3005 #define GL_CLIP_DISTANCE6_EXT 0x3006 #define GL_CLIP_DISTANCE7_EXT 0x3007 #endif /* GL_EXT_clip_cull_distance */ #ifndef GL_EXT_color_buffer_float #define GL_EXT_color_buffer_float 1 #endif /* GL_EXT_color_buffer_float */ #ifndef GL_EXT_color_buffer_half_float #define GL_EXT_color_buffer_half_float 1 #define GL_RGBA16F_EXT 0x881A #define GL_RGB16F_EXT 0x881B #define GL_RG16F_EXT 0x822F #define GL_R16F_EXT 0x822D #define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT 0x8211 #define GL_UNSIGNED_NORMALIZED_EXT 0x8C17 #endif /* GL_EXT_color_buffer_half_float */ #ifndef GL_EXT_conservative_depth #define GL_EXT_conservative_depth 1 #endif /* GL_EXT_conservative_depth */ #ifndef GL_EXT_copy_image #define GL_EXT_copy_image 1 typedef void (GL_APIENTRYP PFNGLCOPYIMAGESUBDATAEXTPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glCopyImageSubDataEXT (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); #endif #endif /* GL_EXT_copy_image */ #ifndef GL_EXT_debug_label #define GL_EXT_debug_label 1 #define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F #define GL_PROGRAM_OBJECT_EXT 0x8B40 #define GL_SHADER_OBJECT_EXT 0x8B48 #define GL_BUFFER_OBJECT_EXT 0x9151 #define GL_QUERY_OBJECT_EXT 0x9153 #define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 #define GL_TRANSFORM_FEEDBACK 0x8E22 typedef void (GL_APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label); typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label); GL_APICALL void GL_APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); #endif #endif /* GL_EXT_debug_label */ #ifndef GL_EXT_debug_marker #define GL_EXT_debug_marker 1 typedef void (GL_APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker); typedef void (GL_APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker); typedef void (GL_APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker); GL_APICALL void GL_APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker); GL_APICALL void GL_APIENTRY glPopGroupMarkerEXT (void); #endif #endif /* GL_EXT_debug_marker */ #ifndef GL_EXT_depth_clamp #define GL_EXT_depth_clamp 1 #define GL_DEPTH_CLAMP_EXT 0x864F #endif /* GL_EXT_depth_clamp */ #ifndef GL_EXT_discard_framebuffer #define GL_EXT_discard_framebuffer 1 #define GL_COLOR_EXT 0x1800 #define GL_DEPTH_EXT 0x1801 #define GL_STENCIL_EXT 0x1802 typedef void (GL_APIENTRYP PFNGLDISCARDFRAMEBUFFEREXTPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glDiscardFramebufferEXT (GLenum target, GLsizei numAttachments, const GLenum *attachments); #endif #endif /* GL_EXT_discard_framebuffer */ #ifndef GL_EXT_disjoint_timer_query #define GL_EXT_disjoint_timer_query 1 #define GL_QUERY_COUNTER_BITS_EXT 0x8864 #define GL_CURRENT_QUERY_EXT 0x8865 #define GL_QUERY_RESULT_EXT 0x8866 #define GL_QUERY_RESULT_AVAILABLE_EXT 0x8867 #define GL_TIME_ELAPSED_EXT 0x88BF #define GL_TIMESTAMP_EXT 0x8E28 #define GL_GPU_DISJOINT_EXT 0x8FBB typedef void (GL_APIENTRYP PFNGLGENQUERIESEXTPROC) (GLsizei n, GLuint *ids); typedef void (GL_APIENTRYP PFNGLDELETEQUERIESEXTPROC) (GLsizei n, const GLuint *ids); typedef GLboolean (GL_APIENTRYP PFNGLISQUERYEXTPROC) (GLuint id); typedef void (GL_APIENTRYP PFNGLBEGINQUERYEXTPROC) (GLenum target, GLuint id); typedef void (GL_APIENTRYP PFNGLENDQUERYEXTPROC) (GLenum target); typedef void (GL_APIENTRYP PFNGLQUERYCOUNTEREXTPROC) (GLuint id, GLenum target); typedef void (GL_APIENTRYP PFNGLGETQUERYIVEXTPROC) (GLenum target, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTIVEXTPROC) (GLuint id, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUIVEXTPROC) (GLuint id, GLenum pname, GLuint *params); typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64 *params); typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64 *params); typedef void (GL_APIENTRYP PFNGLGETINTEGER64VEXTPROC) (GLenum pname, GLint64 *data); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glGenQueriesEXT (GLsizei n, GLuint *ids); GL_APICALL void GL_APIENTRY glDeleteQueriesEXT (GLsizei n, const GLuint *ids); GL_APICALL GLboolean GL_APIENTRY glIsQueryEXT (GLuint id); GL_APICALL void GL_APIENTRY glBeginQueryEXT (GLenum target, GLuint id); GL_APICALL void GL_APIENTRY glEndQueryEXT (GLenum target); GL_APICALL void GL_APIENTRY glQueryCounterEXT (GLuint id, GLenum target); GL_APICALL void GL_APIENTRY glGetQueryivEXT (GLenum target, GLenum pname, GLint *params); GL_APICALL void GL_APIENTRY glGetQueryObjectivEXT (GLuint id, GLenum pname, GLint *params); GL_APICALL void GL_APIENTRY glGetQueryObjectuivEXT (GLuint id, GLenum pname, GLuint *params); GL_APICALL void GL_APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64 *params); GL_APICALL void GL_APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64 *params); GL_APICALL void GL_APIENTRY glGetInteger64vEXT (GLenum pname, GLint64 *data); #endif #endif /* GL_EXT_disjoint_timer_query */ #ifndef GL_EXT_draw_buffers #define GL_EXT_draw_buffers 1 #define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF #define GL_MAX_DRAW_BUFFERS_EXT 0x8824 #define GL_DRAW_BUFFER0_EXT 0x8825 #define GL_DRAW_BUFFER1_EXT 0x8826 #define GL_DRAW_BUFFER2_EXT 0x8827 #define GL_DRAW_BUFFER3_EXT 0x8828 #define GL_DRAW_BUFFER4_EXT 0x8829 #define GL_DRAW_BUFFER5_EXT 0x882A #define GL_DRAW_BUFFER6_EXT 0x882B #define GL_DRAW_BUFFER7_EXT 0x882C #define GL_DRAW_BUFFER8_EXT 0x882D #define GL_DRAW_BUFFER9_EXT 0x882E #define GL_DRAW_BUFFER10_EXT 0x882F #define GL_DRAW_BUFFER11_EXT 0x8830 #define GL_DRAW_BUFFER12_EXT 0x8831 #define GL_DRAW_BUFFER13_EXT 0x8832 #define GL_DRAW_BUFFER14_EXT 0x8833 #define GL_DRAW_BUFFER15_EXT 0x8834 #define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 #define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 #define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 #define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 #define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 #define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 #define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 #define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 #define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 #define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 #define GL_COLOR_ATTACHMENT10_EXT 0x8CEA #define GL_COLOR_ATTACHMENT11_EXT 0x8CEB #define GL_COLOR_ATTACHMENT12_EXT 0x8CEC #define GL_COLOR_ATTACHMENT13_EXT 0x8CED #define GL_COLOR_ATTACHMENT14_EXT 0x8CEE #define GL_COLOR_ATTACHMENT15_EXT 0x8CEF typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSEXTPROC) (GLsizei n, const GLenum *bufs); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glDrawBuffersEXT (GLsizei n, const GLenum *bufs); #endif #endif /* GL_EXT_draw_buffers */ #ifndef GL_EXT_draw_buffers_indexed #define GL_EXT_draw_buffers_indexed 1 typedef void (GL_APIENTRYP PFNGLENABLEIEXTPROC) (GLenum target, GLuint index); typedef void (GL_APIENTRYP PFNGLDISABLEIEXTPROC) (GLenum target, GLuint index); typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONIEXTPROC) (GLuint buf, GLenum mode); typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONSEPARATEIEXTPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); typedef void (GL_APIENTRYP PFNGLBLENDFUNCIEXTPROC) (GLuint buf, GLenum src, GLenum dst); typedef void (GL_APIENTRYP PFNGLBLENDFUNCSEPARATEIEXTPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); typedef void (GL_APIENTRYP PFNGLCOLORMASKIEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDIEXTPROC) (GLenum target, GLuint index); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glEnableiEXT (GLenum target, GLuint index); GL_APICALL void GL_APIENTRY glDisableiEXT (GLenum target, GLuint index); GL_APICALL void GL_APIENTRY glBlendEquationiEXT (GLuint buf, GLenum mode); GL_APICALL void GL_APIENTRY glBlendEquationSeparateiEXT (GLuint buf, GLenum modeRGB, GLenum modeAlpha); GL_APICALL void GL_APIENTRY glBlendFunciEXT (GLuint buf, GLenum src, GLenum dst); GL_APICALL void GL_APIENTRY glBlendFuncSeparateiEXT (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); GL_APICALL void GL_APIENTRY glColorMaskiEXT (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); GL_APICALL GLboolean GL_APIENTRY glIsEnablediEXT (GLenum target, GLuint index); #endif #endif /* GL_EXT_draw_buffers_indexed */ #ifndef GL_EXT_draw_elements_base_vertex #define GL_EXT_draw_elements_base_vertex 1 typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); typedef void (GL_APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glDrawElementsBaseVertexEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); GL_APICALL void GL_APIENTRY glDrawRangeElementsBaseVertexEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); GL_APICALL void GL_APIENTRY glDrawElementsInstancedBaseVertexEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); #endif #endif /* GL_EXT_draw_elements_base_vertex */ #ifndef GL_EXT_draw_instanced #define GL_EXT_draw_instanced 1 typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount); typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount); GL_APICALL void GL_APIENTRY glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); #endif #endif /* GL_EXT_draw_instanced */ #ifndef GL_EXT_draw_transform_feedback #define GL_EXT_draw_transform_feedback 1 typedef void (GL_APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKEXTPROC) (GLenum mode, GLuint id); typedef void (GL_APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDEXTPROC) (GLenum mode, GLuint id, GLsizei instancecount); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glDrawTransformFeedbackEXT (GLenum mode, GLuint id); GL_APICALL void GL_APIENTRY glDrawTransformFeedbackInstancedEXT (GLenum mode, GLuint id, GLsizei instancecount); #endif #endif /* GL_EXT_draw_transform_feedback */ #ifndef GL_EXT_external_buffer #define GL_EXT_external_buffer 1 typedef void *GLeglClientBufferEXT; typedef void (GL_APIENTRYP PFNGLBUFFERSTORAGEEXTERNALEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); typedef void (GL_APIENTRYP PFNGLNAMEDBUFFERSTORAGEEXTERNALEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glBufferStorageExternalEXT (GLenum target, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); GL_APICALL void GL_APIENTRY glNamedBufferStorageExternalEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); #endif #endif /* GL_EXT_external_buffer */ #ifndef GL_EXT_float_blend #define GL_EXT_float_blend 1 #endif /* GL_EXT_float_blend */ #ifndef GL_EXT_fragment_shading_rate #define GL_EXT_fragment_shading_rate 1 #define GL_SHADING_RATE_1X1_PIXELS_EXT 0x96A6 #define GL_SHADING_RATE_1X2_PIXELS_EXT 0x96A7 #define GL_SHADING_RATE_2X1_PIXELS_EXT 0x96A8 #define GL_SHADING_RATE_2X2_PIXELS_EXT 0x96A9 #define GL_SHADING_RATE_1X4_PIXELS_EXT 0x96AA #define GL_SHADING_RATE_4X1_PIXELS_EXT 0x96AB #define GL_SHADING_RATE_4X2_PIXELS_EXT 0x96AC #define GL_SHADING_RATE_2X4_PIXELS_EXT 0x96AD #define GL_SHADING_RATE_4X4_PIXELS_EXT 0x96AE #define GL_SHADING_RATE_EXT 0x96D0 #define GL_SHADING_RATE_ATTACHMENT_EXT 0x96D1 #define GL_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_EXT 0x96D2 #define GL_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_EXT 0x96D3 #define GL_FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_EXT 0x96D4 #define GL_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_EXT 0x96D5 #define GL_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_EXT 0x96D6 #define GL_MIN_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_WIDTH_EXT 0x96D7 #define GL_MAX_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_WIDTH_EXT 0x96D8 #define GL_MIN_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_HEIGHT_EXT 0x96D9 #define GL_MAX_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_HEIGHT_EXT 0x96DA #define GL_MAX_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_ASPECT_RATIO_EXT 0x96DB #define GL_MAX_FRAGMENT_SHADING_RATE_ATTACHMENT_LAYERS_EXT 0x96DC #define GL_FRAGMENT_SHADING_RATE_WITH_SHADER_DEPTH_STENCIL_WRITES_SUPPORTED_EXT 0x96DD #define GL_FRAGMENT_SHADING_RATE_WITH_SAMPLE_MASK_SUPPORTED_EXT 0x96DE #define GL_FRAGMENT_SHADING_RATE_ATTACHMENT_WITH_DEFAULT_FRAMEBUFFER_SUPPORTED_EXT 0x96DF #define GL_FRAGMENT_SHADING_RATE_NON_TRIVIAL_COMBINERS_SUPPORTED_EXT 0x8F6F typedef void (GL_APIENTRYP PFNGLGETFRAGMENTSHADINGRATESEXTPROC) (GLsizei samples, GLsizei maxCount, GLsizei *count, GLenum *shadingRates); typedef void (GL_APIENTRYP PFNGLSHADINGRATEEXTPROC) (GLenum rate); typedef void (GL_APIENTRYP PFNGLSHADINGRATECOMBINEROPSEXTPROC) (GLenum combinerOp0, GLenum combinerOp1); typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERSHADINGRATEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint baseLayer, GLsizei numLayers, GLsizei texelWidth, GLsizei texelHeight); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glGetFragmentShadingRatesEXT (GLsizei samples, GLsizei maxCount, GLsizei *count, GLenum *shadingRates); GL_APICALL void GL_APIENTRY glShadingRateEXT (GLenum rate); GL_APICALL void GL_APIENTRY glShadingRateCombinerOpsEXT (GLenum combinerOp0, GLenum combinerOp1); GL_APICALL void GL_APIENTRY glFramebufferShadingRateEXT (GLenum target, GLenum attachment, GLuint texture, GLint baseLayer, GLsizei numLayers, GLsizei texelWidth, GLsizei texelHeight); #endif #endif /* GL_EXT_fragment_shading_rate */ #ifndef GL_EXT_geometry_point_size #define GL_EXT_geometry_point_size 1 #endif /* GL_EXT_geometry_point_size */ #ifndef GL_EXT_geometry_shader #define GL_EXT_geometry_shader 1 #define GL_GEOMETRY_SHADER_EXT 0x8DD9 #define GL_GEOMETRY_SHADER_BIT_EXT 0x00000004 #define GL_GEOMETRY_LINKED_VERTICES_OUT_EXT 0x8916 #define GL_GEOMETRY_LINKED_INPUT_TYPE_EXT 0x8917 #define GL_GEOMETRY_LINKED_OUTPUT_TYPE_EXT 0x8918 #define GL_GEOMETRY_SHADER_INVOCATIONS_EXT 0x887F #define GL_LAYER_PROVOKING_VERTEX_EXT 0x825E #define GL_LINES_ADJACENCY_EXT 0x000A #define GL_LINE_STRIP_ADJACENCY_EXT 0x000B #define GL_TRIANGLES_ADJACENCY_EXT 0x000C #define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D #define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF #define GL_MAX_GEOMETRY_UNIFORM_BLOCKS_EXT 0x8A2C #define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8A32 #define GL_MAX_GEOMETRY_INPUT_COMPONENTS_EXT 0x9123 #define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_EXT 0x9124 #define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 #define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 #define GL_MAX_GEOMETRY_SHADER_INVOCATIONS_EXT 0x8E5A #define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 #define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_EXT 0x92CF #define GL_MAX_GEOMETRY_ATOMIC_COUNTERS_EXT 0x92D5 #define GL_MAX_GEOMETRY_IMAGE_UNIFORMS_EXT 0x90CD #define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_EXT 0x90D7 #define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D #define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E #define GL_UNDEFINED_VERTEX_EXT 0x8260 #define GL_PRIMITIVES_GENERATED_EXT 0x8C87 #define GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT 0x9312 #define GL_MAX_FRAMEBUFFER_LAYERS_EXT 0x9317 #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 #define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 #define GL_REFERENCED_BY_GEOMETRY_SHADER_EXT 0x9309 typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level); #endif #endif /* GL_EXT_geometry_shader */ #ifndef GL_EXT_gpu_shader5 #define GL_EXT_gpu_shader5 1 #endif /* GL_EXT_gpu_shader5 */ #ifndef GL_EXT_instanced_arrays #define GL_EXT_instanced_arrays 1 #define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_EXT 0x88FE typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISOREXTPROC) (GLuint index, GLuint divisor); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glVertexAttribDivisorEXT (GLuint index, GLuint divisor); #endif #endif /* GL_EXT_instanced_arrays */ #ifndef GL_EXT_map_buffer_range #define GL_EXT_map_buffer_range 1 #define GL_MAP_READ_BIT_EXT 0x0001 #define GL_MAP_WRITE_BIT_EXT 0x0002 #define GL_MAP_INVALIDATE_RANGE_BIT_EXT 0x0004 #define GL_MAP_INVALIDATE_BUFFER_BIT_EXT 0x0008 #define GL_MAP_FLUSH_EXPLICIT_BIT_EXT 0x0010 #define GL_MAP_UNSYNCHRONIZED_BIT_EXT 0x0020 typedef void *(GL_APIENTRYP PFNGLMAPBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); typedef void (GL_APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void *GL_APIENTRY glMapBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); GL_APICALL void GL_APIENTRY glFlushMappedBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length); #endif #endif /* GL_EXT_map_buffer_range */ #ifndef GL_EXT_memory_object #define GL_EXT_memory_object 1 #define GL_TEXTURE_TILING_EXT 0x9580 #define GL_DEDICATED_MEMORY_OBJECT_EXT 0x9581 #define GL_PROTECTED_MEMORY_OBJECT_EXT 0x959B #define GL_NUM_TILING_TYPES_EXT 0x9582 #define GL_TILING_TYPES_EXT 0x9583 #define GL_OPTIMAL_TILING_EXT 0x9584 #define GL_LINEAR_TILING_EXT 0x9585 #define GL_NUM_DEVICE_UUIDS_EXT 0x9596 #define GL_DEVICE_UUID_EXT 0x9597 #define GL_DRIVER_UUID_EXT 0x9598 #define GL_UUID_SIZE_EXT 16 typedef void (GL_APIENTRYP PFNGLGETUNSIGNEDBYTEVEXTPROC) (GLenum pname, GLubyte *data); typedef void (GL_APIENTRYP PFNGLGETUNSIGNEDBYTEI_VEXTPROC) (GLenum target, GLuint index, GLubyte *data); typedef void (GL_APIENTRYP PFNGLDELETEMEMORYOBJECTSEXTPROC) (GLsizei n, const GLuint *memoryObjects); typedef GLboolean (GL_APIENTRYP PFNGLISMEMORYOBJECTEXTPROC) (GLuint memoryObject); typedef void (GL_APIENTRYP PFNGLCREATEMEMORYOBJECTSEXTPROC) (GLsizei n, GLuint *memoryObjects); typedef void (GL_APIENTRYP PFNGLMEMORYOBJECTPARAMETERIVEXTPROC) (GLuint memoryObject, GLenum pname, const GLint *params); typedef void (GL_APIENTRYP PFNGLGETMEMORYOBJECTPARAMETERIVEXTPROC) (GLuint memoryObject, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLTEXSTORAGEMEM2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); typedef void (GL_APIENTRYP PFNGLTEXSTORAGEMEM2DMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); typedef void (GL_APIENTRYP PFNGLTEXSTORAGEMEM3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); typedef void (GL_APIENTRYP PFNGLTEXSTORAGEMEM3DMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); typedef void (GL_APIENTRYP PFNGLBUFFERSTORAGEMEMEXTPROC) (GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset); typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGEMEM2DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGEMEM2DMULTISAMPLEEXTPROC) (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGEMEM3DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGEMEM3DMULTISAMPLEEXTPROC) (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); typedef void (GL_APIENTRYP PFNGLNAMEDBUFFERSTORAGEMEMEXTPROC) (GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glGetUnsignedBytevEXT (GLenum pname, GLubyte *data); GL_APICALL void GL_APIENTRY glGetUnsignedBytei_vEXT (GLenum target, GLuint index, GLubyte *data); GL_APICALL void GL_APIENTRY glDeleteMemoryObjectsEXT (GLsizei n, const GLuint *memoryObjects); GL_APICALL GLboolean GL_APIENTRY glIsMemoryObjectEXT (GLuint memoryObject); GL_APICALL void GL_APIENTRY glCreateMemoryObjectsEXT (GLsizei n, GLuint *memoryObjects); GL_APICALL void GL_APIENTRY glMemoryObjectParameterivEXT (GLuint memoryObject, GLenum pname, const GLint *params); GL_APICALL void GL_APIENTRY glGetMemoryObjectParameterivEXT (GLuint memoryObject, GLenum pname, GLint *params); GL_APICALL void GL_APIENTRY glTexStorageMem2DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); GL_APICALL void GL_APIENTRY glTexStorageMem2DMultisampleEXT (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); GL_APICALL void GL_APIENTRY glTexStorageMem3DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); GL_APICALL void GL_APIENTRY glTexStorageMem3DMultisampleEXT (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); GL_APICALL void GL_APIENTRY glBufferStorageMemEXT (GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset); GL_APICALL void GL_APIENTRY glTextureStorageMem2DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); GL_APICALL void GL_APIENTRY glTextureStorageMem2DMultisampleEXT (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); GL_APICALL void GL_APIENTRY glTextureStorageMem3DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); GL_APICALL void GL_APIENTRY glTextureStorageMem3DMultisampleEXT (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); GL_APICALL void GL_APIENTRY glNamedBufferStorageMemEXT (GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset); #endif #endif /* GL_EXT_memory_object */ #ifndef GL_EXT_memory_object_fd #define GL_EXT_memory_object_fd 1 #define GL_HANDLE_TYPE_OPAQUE_FD_EXT 0x9586 typedef void (GL_APIENTRYP PFNGLIMPORTMEMORYFDEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, GLint fd); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glImportMemoryFdEXT (GLuint memory, GLuint64 size, GLenum handleType, GLint fd); #endif #endif /* GL_EXT_memory_object_fd */ #ifndef GL_EXT_memory_object_win32 #define GL_EXT_memory_object_win32 1 #define GL_HANDLE_TYPE_OPAQUE_WIN32_EXT 0x9587 #define GL_HANDLE_TYPE_OPAQUE_WIN32_KMT_EXT 0x9588 #define GL_DEVICE_LUID_EXT 0x9599 #define GL_DEVICE_NODE_MASK_EXT 0x959A #define GL_LUID_SIZE_EXT 8 #define GL_HANDLE_TYPE_D3D12_TILEPOOL_EXT 0x9589 #define GL_HANDLE_TYPE_D3D12_RESOURCE_EXT 0x958A #define GL_HANDLE_TYPE_D3D11_IMAGE_EXT 0x958B #define GL_HANDLE_TYPE_D3D11_IMAGE_KMT_EXT 0x958C typedef void (GL_APIENTRYP PFNGLIMPORTMEMORYWIN32HANDLEEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, void *handle); typedef void (GL_APIENTRYP PFNGLIMPORTMEMORYWIN32NAMEEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, const void *name); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glImportMemoryWin32HandleEXT (GLuint memory, GLuint64 size, GLenum handleType, void *handle); GL_APICALL void GL_APIENTRY glImportMemoryWin32NameEXT (GLuint memory, GLuint64 size, GLenum handleType, const void *name); #endif #endif /* GL_EXT_memory_object_win32 */ #ifndef GL_EXT_multi_draw_arrays #define GL_EXT_multi_draw_arrays 1 typedef void (GL_APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); GL_APICALL void GL_APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); #endif #endif /* GL_EXT_multi_draw_arrays */ #ifndef GL_EXT_multi_draw_indirect #define GL_EXT_multi_draw_indirect 1 typedef void (GL_APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTEXTPROC) (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTEXTPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glMultiDrawArraysIndirectEXT (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); GL_APICALL void GL_APIENTRY glMultiDrawElementsIndirectEXT (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); #endif #endif /* GL_EXT_multi_draw_indirect */ #ifndef GL_EXT_multisampled_compatibility #define GL_EXT_multisampled_compatibility 1 #define GL_MULTISAMPLE_EXT 0x809D #define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F #endif /* GL_EXT_multisampled_compatibility */ #ifndef GL_EXT_multisampled_render_to_texture #define GL_EXT_multisampled_render_to_texture 1 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT 0x8D6C #define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 #define GL_MAX_SAMPLES_EXT 0x8D57 typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); #endif #endif /* GL_EXT_multisampled_render_to_texture */ #ifndef GL_EXT_multisampled_render_to_texture2 #define GL_EXT_multisampled_render_to_texture2 1 #endif /* GL_EXT_multisampled_render_to_texture2 */ #ifndef GL_EXT_multiview_draw_buffers #define GL_EXT_multiview_draw_buffers 1 #define GL_COLOR_ATTACHMENT_EXT 0x90F0 #define GL_MULTIVIEW_EXT 0x90F1 #define GL_DRAW_BUFFER_EXT 0x0C01 #define GL_READ_BUFFER_EXT 0x0C02 #define GL_MAX_MULTIVIEW_BUFFERS_EXT 0x90F2 typedef void (GL_APIENTRYP PFNGLREADBUFFERINDEXEDEXTPROC) (GLenum src, GLint index); typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSINDEXEDEXTPROC) (GLint n, const GLenum *location, const GLint *indices); typedef void (GL_APIENTRYP PFNGLGETINTEGERI_VEXTPROC) (GLenum target, GLuint index, GLint *data); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glReadBufferIndexedEXT (GLenum src, GLint index); GL_APICALL void GL_APIENTRY glDrawBuffersIndexedEXT (GLint n, const GLenum *location, const GLint *indices); GL_APICALL void GL_APIENTRY glGetIntegeri_vEXT (GLenum target, GLuint index, GLint *data); #endif #endif /* GL_EXT_multiview_draw_buffers */ #ifndef GL_EXT_multiview_tessellation_geometry_shader #define GL_EXT_multiview_tessellation_geometry_shader 1 #endif /* GL_EXT_multiview_tessellation_geometry_shader */ #ifndef GL_EXT_multiview_texture_multisample #define GL_EXT_multiview_texture_multisample 1 #endif /* GL_EXT_multiview_texture_multisample */ #ifndef GL_EXT_multiview_timer_query #define GL_EXT_multiview_timer_query 1 #endif /* GL_EXT_multiview_timer_query */ #ifndef GL_EXT_occlusion_query_boolean #define GL_EXT_occlusion_query_boolean 1 #define GL_ANY_SAMPLES_PASSED_EXT 0x8C2F #define GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT 0x8D6A #endif /* GL_EXT_occlusion_query_boolean */ #ifndef GL_EXT_polygon_offset_clamp #define GL_EXT_polygon_offset_clamp 1 #define GL_POLYGON_OFFSET_CLAMP_EXT 0x8E1B typedef void (GL_APIENTRYP PFNGLPOLYGONOFFSETCLAMPEXTPROC) (GLfloat factor, GLfloat units, GLfloat clamp); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glPolygonOffsetClampEXT (GLfloat factor, GLfloat units, GLfloat clamp); #endif #endif /* GL_EXT_polygon_offset_clamp */ #ifndef GL_EXT_post_depth_coverage #define GL_EXT_post_depth_coverage 1 #endif /* GL_EXT_post_depth_coverage */ #ifndef GL_EXT_primitive_bounding_box #define GL_EXT_primitive_bounding_box 1 #define GL_PRIMITIVE_BOUNDING_BOX_EXT 0x92BE typedef void (GL_APIENTRYP PFNGLPRIMITIVEBOUNDINGBOXEXTPROC) (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glPrimitiveBoundingBoxEXT (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); #endif #endif /* GL_EXT_primitive_bounding_box */ #ifndef GL_EXT_protected_textures #define GL_EXT_protected_textures 1 #define GL_CONTEXT_FLAG_PROTECTED_CONTENT_BIT_EXT 0x00000010 #define GL_TEXTURE_PROTECTED_EXT 0x8BFA #endif /* GL_EXT_protected_textures */ #ifndef GL_EXT_pvrtc_sRGB #define GL_EXT_pvrtc_sRGB 1 #define GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT 0x8A54 #define GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT 0x8A55 #define GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT 0x8A56 #define GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT 0x8A57 #define GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV2_IMG 0x93F0 #define GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV2_IMG 0x93F1 #endif /* GL_EXT_pvrtc_sRGB */ #ifndef GL_EXT_raster_multisample #define GL_EXT_raster_multisample 1 #define GL_RASTER_MULTISAMPLE_EXT 0x9327 #define GL_RASTER_SAMPLES_EXT 0x9328 #define GL_MAX_RASTER_SAMPLES_EXT 0x9329 #define GL_RASTER_FIXED_SAMPLE_LOCATIONS_EXT 0x932A #define GL_MULTISAMPLE_RASTERIZATION_ALLOWED_EXT 0x932B #define GL_EFFECTIVE_RASTER_SAMPLES_EXT 0x932C typedef void (GL_APIENTRYP PFNGLRASTERSAMPLESEXTPROC) (GLuint samples, GLboolean fixedsamplelocations); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glRasterSamplesEXT (GLuint samples, GLboolean fixedsamplelocations); #endif #endif /* GL_EXT_raster_multisample */ #ifndef GL_EXT_read_format_bgra #define GL_EXT_read_format_bgra 1 #define GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT 0x8365 #define GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT 0x8366 #endif /* GL_EXT_read_format_bgra */ #ifndef GL_EXT_render_snorm #define GL_EXT_render_snorm 1 #define GL_R8_SNORM 0x8F94 #define GL_RG8_SNORM 0x8F95 #define GL_RGBA8_SNORM 0x8F97 #define GL_R16_SNORM_EXT 0x8F98 #define GL_RG16_SNORM_EXT 0x8F99 #define GL_RGBA16_SNORM_EXT 0x8F9B #endif /* GL_EXT_render_snorm */ #ifndef GL_EXT_robustness #define GL_EXT_robustness 1 #define GL_GUILTY_CONTEXT_RESET_EXT 0x8253 #define GL_INNOCENT_CONTEXT_RESET_EXT 0x8254 #define GL_UNKNOWN_CONTEXT_RESET_EXT 0x8255 #define GL_CONTEXT_ROBUST_ACCESS_EXT 0x90F3 #define GL_RESET_NOTIFICATION_STRATEGY_EXT 0x8256 #define GL_LOSE_CONTEXT_ON_RESET_EXT 0x8252 #define GL_NO_RESET_NOTIFICATION_EXT 0x8261 typedef GLenum (GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSEXTPROC) (void); typedef void (GL_APIENTRYP PFNGLREADNPIXELSEXTPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL GLenum GL_APIENTRY glGetGraphicsResetStatusEXT (void); GL_APICALL void GL_APIENTRY glReadnPixelsEXT (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); GL_APICALL void GL_APIENTRY glGetnUniformfvEXT (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); GL_APICALL void GL_APIENTRY glGetnUniformivEXT (GLuint program, GLint location, GLsizei bufSize, GLint *params); #endif #endif /* GL_EXT_robustness */ #ifndef GL_EXT_sRGB #define GL_EXT_sRGB 1 #define GL_SRGB_EXT 0x8C40 #define GL_SRGB_ALPHA_EXT 0x8C42 #define GL_SRGB8_ALPHA8_EXT 0x8C43 #define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT 0x8210 #endif /* GL_EXT_sRGB */ #ifndef GL_EXT_sRGB_write_control #define GL_EXT_sRGB_write_control 1 #define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 #endif /* GL_EXT_sRGB_write_control */ #ifndef GL_EXT_semaphore #define GL_EXT_semaphore 1 #define GL_LAYOUT_GENERAL_EXT 0x958D #define GL_LAYOUT_COLOR_ATTACHMENT_EXT 0x958E #define GL_LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT 0x958F #define GL_LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT 0x9590 #define GL_LAYOUT_SHADER_READ_ONLY_EXT 0x9591 #define GL_LAYOUT_TRANSFER_SRC_EXT 0x9592 #define GL_LAYOUT_TRANSFER_DST_EXT 0x9593 #define GL_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_EXT 0x9530 #define GL_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT 0x9531 typedef void (GL_APIENTRYP PFNGLGENSEMAPHORESEXTPROC) (GLsizei n, GLuint *semaphores); typedef void (GL_APIENTRYP PFNGLDELETESEMAPHORESEXTPROC) (GLsizei n, const GLuint *semaphores); typedef GLboolean (GL_APIENTRYP PFNGLISSEMAPHOREEXTPROC) (GLuint semaphore); typedef void (GL_APIENTRYP PFNGLSEMAPHOREPARAMETERUI64VEXTPROC) (GLuint semaphore, GLenum pname, const GLuint64 *params); typedef void (GL_APIENTRYP PFNGLGETSEMAPHOREPARAMETERUI64VEXTPROC) (GLuint semaphore, GLenum pname, GLuint64 *params); typedef void (GL_APIENTRYP PFNGLWAITSEMAPHOREEXTPROC) (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts); typedef void (GL_APIENTRYP PFNGLSIGNALSEMAPHOREEXTPROC) (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glGenSemaphoresEXT (GLsizei n, GLuint *semaphores); GL_APICALL void GL_APIENTRY glDeleteSemaphoresEXT (GLsizei n, const GLuint *semaphores); GL_APICALL GLboolean GL_APIENTRY glIsSemaphoreEXT (GLuint semaphore); GL_APICALL void GL_APIENTRY glSemaphoreParameterui64vEXT (GLuint semaphore, GLenum pname, const GLuint64 *params); GL_APICALL void GL_APIENTRY glGetSemaphoreParameterui64vEXT (GLuint semaphore, GLenum pname, GLuint64 *params); GL_APICALL void GL_APIENTRY glWaitSemaphoreEXT (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts); GL_APICALL void GL_APIENTRY glSignalSemaphoreEXT (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts); #endif #endif /* GL_EXT_semaphore */ #ifndef GL_EXT_semaphore_fd #define GL_EXT_semaphore_fd 1 typedef void (GL_APIENTRYP PFNGLIMPORTSEMAPHOREFDEXTPROC) (GLuint semaphore, GLenum handleType, GLint fd); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glImportSemaphoreFdEXT (GLuint semaphore, GLenum handleType, GLint fd); #endif #endif /* GL_EXT_semaphore_fd */ #ifndef GL_EXT_semaphore_win32 #define GL_EXT_semaphore_win32 1 #define GL_HANDLE_TYPE_D3D12_FENCE_EXT 0x9594 #define GL_D3D12_FENCE_VALUE_EXT 0x9595 typedef void (GL_APIENTRYP PFNGLIMPORTSEMAPHOREWIN32HANDLEEXTPROC) (GLuint semaphore, GLenum handleType, void *handle); typedef void (GL_APIENTRYP PFNGLIMPORTSEMAPHOREWIN32NAMEEXTPROC) (GLuint semaphore, GLenum handleType, const void *name); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glImportSemaphoreWin32HandleEXT (GLuint semaphore, GLenum handleType, void *handle); GL_APICALL void GL_APIENTRY glImportSemaphoreWin32NameEXT (GLuint semaphore, GLenum handleType, const void *name); #endif #endif /* GL_EXT_semaphore_win32 */ #ifndef GL_EXT_separate_depth_stencil #define GL_EXT_separate_depth_stencil 1 #endif /* GL_EXT_separate_depth_stencil */ #ifndef GL_EXT_separate_shader_objects #define GL_EXT_separate_shader_objects 1 #define GL_ACTIVE_PROGRAM_EXT 0x8259 #define GL_VERTEX_SHADER_BIT_EXT 0x00000001 #define GL_FRAGMENT_SHADER_BIT_EXT 0x00000002 #define GL_ALL_SHADER_BITS_EXT 0xFFFFFFFF #define GL_PROGRAM_SEPARABLE_EXT 0x8258 #define GL_PROGRAM_PIPELINE_BINDING_EXT 0x825A typedef void (GL_APIENTRYP PFNGLACTIVESHADERPROGRAMEXTPROC) (GLuint pipeline, GLuint program); typedef void (GL_APIENTRYP PFNGLBINDPROGRAMPIPELINEEXTPROC) (GLuint pipeline); typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROGRAMVEXTPROC) (GLenum type, GLsizei count, const GLchar **strings); typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPIPELINESEXTPROC) (GLsizei n, const GLuint *pipelines); typedef void (GL_APIENTRYP PFNGLGENPROGRAMPIPELINESEXTPROC) (GLsizei n, GLuint *pipelines); typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGEXTPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEIVEXTPROC) (GLuint pipeline, GLenum pname, GLint *params); typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPIPELINEEXTPROC) (GLuint pipeline); typedef void (GL_APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLUSEPROGRAMSTAGESEXTPROC) (GLuint pipeline, GLbitfield stages, GLuint program); typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEEXTPROC) (GLuint pipeline); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glActiveShaderProgramEXT (GLuint pipeline, GLuint program); GL_APICALL void GL_APIENTRY glBindProgramPipelineEXT (GLuint pipeline); GL_APICALL GLuint GL_APIENTRY glCreateShaderProgramvEXT (GLenum type, GLsizei count, const GLchar **strings); GL_APICALL void GL_APIENTRY glDeleteProgramPipelinesEXT (GLsizei n, const GLuint *pipelines); GL_APICALL void GL_APIENTRY glGenProgramPipelinesEXT (GLsizei n, GLuint *pipelines); GL_APICALL void GL_APIENTRY glGetProgramPipelineInfoLogEXT (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); GL_APICALL void GL_APIENTRY glGetProgramPipelineivEXT (GLuint pipeline, GLenum pname, GLint *params); GL_APICALL GLboolean GL_APIENTRY glIsProgramPipelineEXT (GLuint pipeline); GL_APICALL void GL_APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value); GL_APICALL void GL_APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0); GL_APICALL void GL_APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); GL_APICALL void GL_APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint v0); GL_APICALL void GL_APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); GL_APICALL void GL_APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1); GL_APICALL void GL_APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); GL_APICALL void GL_APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1); GL_APICALL void GL_APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); GL_APICALL void GL_APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); GL_APICALL void GL_APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); GL_APICALL void GL_APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); GL_APICALL void GL_APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); GL_APICALL void GL_APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); GL_APICALL void GL_APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); GL_APICALL void GL_APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); GL_APICALL void GL_APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); GL_APICALL void GL_APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glUseProgramStagesEXT (GLuint pipeline, GLbitfield stages, GLuint program); GL_APICALL void GL_APIENTRY glValidateProgramPipelineEXT (GLuint pipeline); GL_APICALL void GL_APIENTRY glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0); GL_APICALL void GL_APIENTRY glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1); GL_APICALL void GL_APIENTRY glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); GL_APICALL void GL_APIENTRY glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); GL_APICALL void GL_APIENTRY glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); GL_APICALL void GL_APIENTRY glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); GL_APICALL void GL_APIENTRY glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); GL_APICALL void GL_APIENTRY glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); GL_APICALL void GL_APIENTRY glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); #endif #endif /* GL_EXT_separate_shader_objects */ #ifndef GL_EXT_shader_framebuffer_fetch #define GL_EXT_shader_framebuffer_fetch 1 #define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52 #endif /* GL_EXT_shader_framebuffer_fetch */ #ifndef GL_EXT_shader_framebuffer_fetch_non_coherent #define GL_EXT_shader_framebuffer_fetch_non_coherent 1 typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERFETCHBARRIEREXTPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glFramebufferFetchBarrierEXT (void); #endif #endif /* GL_EXT_shader_framebuffer_fetch_non_coherent */ #ifndef GL_EXT_shader_group_vote #define GL_EXT_shader_group_vote 1 #endif /* GL_EXT_shader_group_vote */ #ifndef GL_EXT_shader_implicit_conversions #define GL_EXT_shader_implicit_conversions 1 #endif /* GL_EXT_shader_implicit_conversions */ #ifndef GL_EXT_shader_integer_mix #define GL_EXT_shader_integer_mix 1 #endif /* GL_EXT_shader_integer_mix */ #ifndef GL_EXT_shader_io_blocks #define GL_EXT_shader_io_blocks 1 #endif /* GL_EXT_shader_io_blocks */ #ifndef GL_EXT_shader_non_constant_global_initializers #define GL_EXT_shader_non_constant_global_initializers 1 #endif /* GL_EXT_shader_non_constant_global_initializers */ #ifndef GL_EXT_shader_pixel_local_storage #define GL_EXT_shader_pixel_local_storage 1 #define GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_FAST_SIZE_EXT 0x8F63 #define GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_SIZE_EXT 0x8F67 #define GL_SHADER_PIXEL_LOCAL_STORAGE_EXT 0x8F64 #endif /* GL_EXT_shader_pixel_local_storage */ #ifndef GL_EXT_shader_pixel_local_storage2 #define GL_EXT_shader_pixel_local_storage2 1 #define GL_MAX_SHADER_COMBINED_LOCAL_STORAGE_FAST_SIZE_EXT 0x9650 #define GL_MAX_SHADER_COMBINED_LOCAL_STORAGE_SIZE_EXT 0x9651 #define GL_FRAMEBUFFER_INCOMPLETE_INSUFFICIENT_SHADER_COMBINED_LOCAL_STORAGE_EXT 0x9652 typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERPIXELLOCALSTORAGESIZEEXTPROC) (GLuint target, GLsizei size); typedef GLsizei (GL_APIENTRYP PFNGLGETFRAMEBUFFERPIXELLOCALSTORAGESIZEEXTPROC) (GLuint target); typedef void (GL_APIENTRYP PFNGLCLEARPIXELLOCALSTORAGEUIEXTPROC) (GLsizei offset, GLsizei n, const GLuint *values); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glFramebufferPixelLocalStorageSizeEXT (GLuint target, GLsizei size); GL_APICALL GLsizei GL_APIENTRY glGetFramebufferPixelLocalStorageSizeEXT (GLuint target); GL_APICALL void GL_APIENTRY glClearPixelLocalStorageuiEXT (GLsizei offset, GLsizei n, const GLuint *values); #endif #endif /* GL_EXT_shader_pixel_local_storage2 */ #ifndef GL_EXT_shader_samples_identical #define GL_EXT_shader_samples_identical 1 #endif /* GL_EXT_shader_samples_identical */ #ifndef GL_EXT_shader_texture_lod #define GL_EXT_shader_texture_lod 1 #endif /* GL_EXT_shader_texture_lod */ #ifndef GL_EXT_shadow_samplers #define GL_EXT_shadow_samplers 1 #define GL_TEXTURE_COMPARE_MODE_EXT 0x884C #define GL_TEXTURE_COMPARE_FUNC_EXT 0x884D #define GL_COMPARE_REF_TO_TEXTURE_EXT 0x884E #define GL_SAMPLER_2D_SHADOW_EXT 0x8B62 #endif /* GL_EXT_shadow_samplers */ #ifndef GL_EXT_sparse_texture #define GL_EXT_sparse_texture 1 #define GL_TEXTURE_SPARSE_EXT 0x91A6 #define GL_VIRTUAL_PAGE_SIZE_INDEX_EXT 0x91A7 #define GL_NUM_SPARSE_LEVELS_EXT 0x91AA #define GL_NUM_VIRTUAL_PAGE_SIZES_EXT 0x91A8 #define GL_VIRTUAL_PAGE_SIZE_X_EXT 0x9195 #define GL_VIRTUAL_PAGE_SIZE_Y_EXT 0x9196 #define GL_VIRTUAL_PAGE_SIZE_Z_EXT 0x9197 #define GL_TEXTURE_2D_ARRAY 0x8C1A #define GL_TEXTURE_3D 0x806F #define GL_MAX_SPARSE_TEXTURE_SIZE_EXT 0x9198 #define GL_MAX_SPARSE_3D_TEXTURE_SIZE_EXT 0x9199 #define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_EXT 0x919A #define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_EXT 0x91A9 typedef void (GL_APIENTRYP PFNGLTEXPAGECOMMITMENTEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glTexPageCommitmentEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); #endif #endif /* GL_EXT_sparse_texture */ #ifndef GL_EXT_sparse_texture2 #define GL_EXT_sparse_texture2 1 #endif /* GL_EXT_sparse_texture2 */ #ifndef GL_EXT_tessellation_point_size #define GL_EXT_tessellation_point_size 1 #endif /* GL_EXT_tessellation_point_size */ #ifndef GL_EXT_tessellation_shader #define GL_EXT_tessellation_shader 1 #define GL_PATCHES_EXT 0x000E #define GL_PATCH_VERTICES_EXT 0x8E72 #define GL_TESS_CONTROL_OUTPUT_VERTICES_EXT 0x8E75 #define GL_TESS_GEN_MODE_EXT 0x8E76 #define GL_TESS_GEN_SPACING_EXT 0x8E77 #define GL_TESS_GEN_VERTEX_ORDER_EXT 0x8E78 #define GL_TESS_GEN_POINT_MODE_EXT 0x8E79 #define GL_ISOLINES_EXT 0x8E7A #define GL_QUADS_EXT 0x0007 #define GL_FRACTIONAL_ODD_EXT 0x8E7B #define GL_FRACTIONAL_EVEN_EXT 0x8E7C #define GL_MAX_PATCH_VERTICES_EXT 0x8E7D #define GL_MAX_TESS_GEN_LEVEL_EXT 0x8E7E #define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS_EXT 0x8E7F #define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT 0x8E80 #define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS_EXT 0x8E81 #define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS_EXT 0x8E82 #define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS_EXT 0x8E83 #define GL_MAX_TESS_PATCH_COMPONENTS_EXT 0x8E84 #define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS_EXT 0x8E85 #define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS_EXT 0x8E86 #define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS_EXT 0x8E89 #define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS_EXT 0x8E8A #define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS_EXT 0x886C #define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS_EXT 0x886D #define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS_EXT 0x8E1E #define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT 0x8E1F #define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS_EXT 0x92CD #define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS_EXT 0x92CE #define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS_EXT 0x92D3 #define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS_EXT 0x92D4 #define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS_EXT 0x90CB #define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS_EXT 0x90CC #define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS_EXT 0x90D8 #define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS_EXT 0x90D9 #define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221 #define GL_IS_PER_PATCH_EXT 0x92E7 #define GL_REFERENCED_BY_TESS_CONTROL_SHADER_EXT 0x9307 #define GL_REFERENCED_BY_TESS_EVALUATION_SHADER_EXT 0x9308 #define GL_TESS_CONTROL_SHADER_EXT 0x8E88 #define GL_TESS_EVALUATION_SHADER_EXT 0x8E87 #define GL_TESS_CONTROL_SHADER_BIT_EXT 0x00000008 #define GL_TESS_EVALUATION_SHADER_BIT_EXT 0x00000010 typedef void (GL_APIENTRYP PFNGLPATCHPARAMETERIEXTPROC) (GLenum pname, GLint value); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glPatchParameteriEXT (GLenum pname, GLint value); #endif #endif /* GL_EXT_tessellation_shader */ #ifndef GL_EXT_texture_border_clamp #define GL_EXT_texture_border_clamp 1 #define GL_TEXTURE_BORDER_COLOR_EXT 0x1004 #define GL_CLAMP_TO_BORDER_EXT 0x812D typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params); typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params); typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIIVEXTPROC) (GLuint sampler, GLenum pname, const GLint *param); typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIUIVEXTPROC) (GLuint sampler, GLenum pname, const GLuint *param); typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIIVEXTPROC) (GLuint sampler, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVEXTPROC) (GLuint sampler, GLenum pname, GLuint *params); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params); GL_APICALL void GL_APIENTRY glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params); GL_APICALL void GL_APIENTRY glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params); GL_APICALL void GL_APIENTRY glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params); GL_APICALL void GL_APIENTRY glSamplerParameterIivEXT (GLuint sampler, GLenum pname, const GLint *param); GL_APICALL void GL_APIENTRY glSamplerParameterIuivEXT (GLuint sampler, GLenum pname, const GLuint *param); GL_APICALL void GL_APIENTRY glGetSamplerParameterIivEXT (GLuint sampler, GLenum pname, GLint *params); GL_APICALL void GL_APIENTRY glGetSamplerParameterIuivEXT (GLuint sampler, GLenum pname, GLuint *params); #endif #endif /* GL_EXT_texture_border_clamp */ #ifndef GL_EXT_texture_buffer #define GL_EXT_texture_buffer 1 #define GL_TEXTURE_BUFFER_EXT 0x8C2A #define GL_TEXTURE_BUFFER_BINDING_EXT 0x8C2A #define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B #define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C #define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D #define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT_EXT 0x919F #define GL_SAMPLER_BUFFER_EXT 0x8DC2 #define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 #define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 #define GL_IMAGE_BUFFER_EXT 0x9051 #define GL_INT_IMAGE_BUFFER_EXT 0x905C #define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067 #define GL_TEXTURE_BUFFER_OFFSET_EXT 0x919D #define GL_TEXTURE_BUFFER_SIZE_EXT 0x919E typedef void (GL_APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer); typedef void (GL_APIENTRYP PFNGLTEXBUFFERRANGEEXTPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer); GL_APICALL void GL_APIENTRY glTexBufferRangeEXT (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); #endif #endif /* GL_EXT_texture_buffer */ #ifndef GL_EXT_texture_compression_astc_decode_mode #define GL_EXT_texture_compression_astc_decode_mode 1 #define GL_TEXTURE_ASTC_DECODE_PRECISION_EXT 0x8F69 #endif /* GL_EXT_texture_compression_astc_decode_mode */ #ifndef GL_EXT_texture_compression_bptc #define GL_EXT_texture_compression_bptc 1 #define GL_COMPRESSED_RGBA_BPTC_UNORM_EXT 0x8E8C #define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT 0x8E8D #define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT 0x8E8E #define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT 0x8E8F #endif /* GL_EXT_texture_compression_bptc */ #ifndef GL_EXT_texture_compression_dxt1 #define GL_EXT_texture_compression_dxt1 1 #define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 #define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 #endif /* GL_EXT_texture_compression_dxt1 */ #ifndef GL_EXT_texture_compression_rgtc #define GL_EXT_texture_compression_rgtc 1 #define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB #define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC #define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD #define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE #endif /* GL_EXT_texture_compression_rgtc */ #ifndef GL_EXT_texture_compression_s3tc #define GL_EXT_texture_compression_s3tc 1 #define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 #define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 #endif /* GL_EXT_texture_compression_s3tc */ #ifndef GL_EXT_texture_compression_s3tc_srgb #define GL_EXT_texture_compression_s3tc_srgb 1 #define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F #endif /* GL_EXT_texture_compression_s3tc_srgb */ #ifndef GL_EXT_texture_cube_map_array #define GL_EXT_texture_cube_map_array 1 #define GL_TEXTURE_CUBE_MAP_ARRAY_EXT 0x9009 #define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_EXT 0x900A #define GL_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900C #define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_EXT 0x900D #define GL_INT_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900E #define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900F #define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 #define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F #define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A #endif /* GL_EXT_texture_cube_map_array */ #ifndef GL_EXT_texture_filter_anisotropic #define GL_EXT_texture_filter_anisotropic 1 #define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE #define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF #endif /* GL_EXT_texture_filter_anisotropic */ #ifndef GL_EXT_texture_filter_minmax #define GL_EXT_texture_filter_minmax 1 #define GL_TEXTURE_REDUCTION_MODE_EXT 0x9366 #define GL_WEIGHTED_AVERAGE_EXT 0x9367 #endif /* GL_EXT_texture_filter_minmax */ #ifndef GL_EXT_texture_format_BGRA8888 #define GL_EXT_texture_format_BGRA8888 1 #endif /* GL_EXT_texture_format_BGRA8888 */ #ifndef GL_EXT_texture_format_sRGB_override #define GL_EXT_texture_format_sRGB_override 1 #define GL_TEXTURE_FORMAT_SRGB_OVERRIDE_EXT 0x8FBF #endif /* GL_EXT_texture_format_sRGB_override */ #ifndef GL_EXT_texture_mirror_clamp_to_edge #define GL_EXT_texture_mirror_clamp_to_edge 1 #define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 #endif /* GL_EXT_texture_mirror_clamp_to_edge */ #ifndef GL_EXT_texture_norm16 #define GL_EXT_texture_norm16 1 #define GL_R16_EXT 0x822A #define GL_RG16_EXT 0x822C #define GL_RGBA16_EXT 0x805B #define GL_RGB16_EXT 0x8054 #define GL_RGB16_SNORM_EXT 0x8F9A #endif /* GL_EXT_texture_norm16 */ #ifndef GL_EXT_texture_query_lod #define GL_EXT_texture_query_lod 1 #endif /* GL_EXT_texture_query_lod */ #ifndef GL_EXT_texture_rg #define GL_EXT_texture_rg 1 #define GL_RED_EXT 0x1903 #define GL_RG_EXT 0x8227 #define GL_R8_EXT 0x8229 #define GL_RG8_EXT 0x822B #endif /* GL_EXT_texture_rg */ #ifndef GL_EXT_texture_sRGB_R8 #define GL_EXT_texture_sRGB_R8 1 #define GL_SR8_EXT 0x8FBD #endif /* GL_EXT_texture_sRGB_R8 */ #ifndef GL_EXT_texture_sRGB_RG8 #define GL_EXT_texture_sRGB_RG8 1 #define GL_SRG8_EXT 0x8FBE #endif /* GL_EXT_texture_sRGB_RG8 */ #ifndef GL_EXT_texture_sRGB_decode #define GL_EXT_texture_sRGB_decode 1 #define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 #define GL_DECODE_EXT 0x8A49 #define GL_SKIP_DECODE_EXT 0x8A4A #endif /* GL_EXT_texture_sRGB_decode */ #ifndef GL_EXT_texture_shadow_lod #define GL_EXT_texture_shadow_lod 1 #endif /* GL_EXT_texture_shadow_lod */ #ifndef GL_EXT_texture_storage #define GL_EXT_texture_storage 1 #define GL_TEXTURE_IMMUTABLE_FORMAT_EXT 0x912F #define GL_ALPHA8_EXT 0x803C #define GL_LUMINANCE8_EXT 0x8040 #define GL_LUMINANCE8_ALPHA8_EXT 0x8045 #define GL_RGBA32F_EXT 0x8814 #define GL_RGB32F_EXT 0x8815 #define GL_ALPHA32F_EXT 0x8816 #define GL_LUMINANCE32F_EXT 0x8818 #define GL_LUMINANCE_ALPHA32F_EXT 0x8819 #define GL_ALPHA16F_EXT 0x881C #define GL_LUMINANCE16F_EXT 0x881E #define GL_LUMINANCE_ALPHA16F_EXT 0x881F #define GL_R32F_EXT 0x822E #define GL_RG32F_EXT 0x8230 typedef void (GL_APIENTRYP PFNGLTEXSTORAGE1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glTexStorage1DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); GL_APICALL void GL_APIENTRY glTexStorage2DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); GL_APICALL void GL_APIENTRY glTexStorage3DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); GL_APICALL void GL_APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); GL_APICALL void GL_APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); GL_APICALL void GL_APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); #endif #endif /* GL_EXT_texture_storage */ #ifndef GL_EXT_texture_storage_compression #define GL_EXT_texture_storage_compression 1 #define GL_NUM_SURFACE_COMPRESSION_FIXED_RATES_EXT 0x8F6E #define GL_SURFACE_COMPRESSION_FIXED_RATE_1BPC_EXT 0x96C4 #define GL_SURFACE_COMPRESSION_FIXED_RATE_2BPC_EXT 0x96C5 #define GL_SURFACE_COMPRESSION_FIXED_RATE_3BPC_EXT 0x96C6 #define GL_SURFACE_COMPRESSION_FIXED_RATE_4BPC_EXT 0x96C7 #define GL_SURFACE_COMPRESSION_FIXED_RATE_5BPC_EXT 0x96C8 #define GL_SURFACE_COMPRESSION_FIXED_RATE_6BPC_EXT 0x96C9 #define GL_SURFACE_COMPRESSION_FIXED_RATE_7BPC_EXT 0x96CA #define GL_SURFACE_COMPRESSION_FIXED_RATE_8BPC_EXT 0x96CB #define GL_SURFACE_COMPRESSION_FIXED_RATE_9BPC_EXT 0x96CC #define GL_SURFACE_COMPRESSION_FIXED_RATE_10BPC_EXT 0x96CD #define GL_SURFACE_COMPRESSION_FIXED_RATE_11BPC_EXT 0x96CE #define GL_SURFACE_COMPRESSION_FIXED_RATE_12BPC_EXT 0x96CF typedef void (GL_APIENTRYP PFNGLTEXSTORAGEATTRIBS2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, const GLint* attrib_list); typedef void (GL_APIENTRYP PFNGLTEXSTORAGEATTRIBS3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, const GLint* attrib_list); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glTexStorageAttribs2DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, const GLint* attrib_list); GL_APICALL void GL_APIENTRY glTexStorageAttribs3DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, const GLint* attrib_list); #endif #endif /* GL_EXT_texture_storage_compression */ #ifndef GL_EXT_texture_type_2_10_10_10_REV #define GL_EXT_texture_type_2_10_10_10_REV 1 #define GL_UNSIGNED_INT_2_10_10_10_REV_EXT 0x8368 #endif /* GL_EXT_texture_type_2_10_10_10_REV */ #ifndef GL_EXT_texture_view #define GL_EXT_texture_view 1 #define GL_TEXTURE_VIEW_MIN_LEVEL_EXT 0x82DB #define GL_TEXTURE_VIEW_NUM_LEVELS_EXT 0x82DC #define GL_TEXTURE_VIEW_MIN_LAYER_EXT 0x82DD #define GL_TEXTURE_VIEW_NUM_LAYERS_EXT 0x82DE typedef void (GL_APIENTRYP PFNGLTEXTUREVIEWEXTPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glTextureViewEXT (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); #endif #endif /* GL_EXT_texture_view */ #ifndef GL_EXT_unpack_subimage #define GL_EXT_unpack_subimage 1 #define GL_UNPACK_ROW_LENGTH_EXT 0x0CF2 #define GL_UNPACK_SKIP_ROWS_EXT 0x0CF3 #define GL_UNPACK_SKIP_PIXELS_EXT 0x0CF4 #endif /* GL_EXT_unpack_subimage */ #ifndef GL_EXT_win32_keyed_mutex #define GL_EXT_win32_keyed_mutex 1 typedef GLboolean (GL_APIENTRYP PFNGLACQUIREKEYEDMUTEXWIN32EXTPROC) (GLuint memory, GLuint64 key, GLuint timeout); typedef GLboolean (GL_APIENTRYP PFNGLRELEASEKEYEDMUTEXWIN32EXTPROC) (GLuint memory, GLuint64 key); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL GLboolean GL_APIENTRY glAcquireKeyedMutexWin32EXT (GLuint memory, GLuint64 key, GLuint timeout); GL_APICALL GLboolean GL_APIENTRY glReleaseKeyedMutexWin32EXT (GLuint memory, GLuint64 key); #endif #endif /* GL_EXT_win32_keyed_mutex */ #ifndef GL_EXT_window_rectangles #define GL_EXT_window_rectangles 1 #define GL_INCLUSIVE_EXT 0x8F10 #define GL_EXCLUSIVE_EXT 0x8F11 #define GL_WINDOW_RECTANGLE_EXT 0x8F12 #define GL_WINDOW_RECTANGLE_MODE_EXT 0x8F13 #define GL_MAX_WINDOW_RECTANGLES_EXT 0x8F14 #define GL_NUM_WINDOW_RECTANGLES_EXT 0x8F15 typedef void (GL_APIENTRYP PFNGLWINDOWRECTANGLESEXTPROC) (GLenum mode, GLsizei count, const GLint *box); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glWindowRectanglesEXT (GLenum mode, GLsizei count, const GLint *box); #endif #endif /* GL_EXT_window_rectangles */ #ifndef GL_FJ_shader_binary_GCCSO #define GL_FJ_shader_binary_GCCSO 1 #define GL_GCCSO_SHADER_BINARY_FJ 0x9260 #endif /* GL_FJ_shader_binary_GCCSO */ #ifndef GL_IMG_bindless_texture #define GL_IMG_bindless_texture 1 typedef GLuint64 (GL_APIENTRYP PFNGLGETTEXTUREHANDLEIMGPROC) (GLuint texture); typedef GLuint64 (GL_APIENTRYP PFNGLGETTEXTURESAMPLERHANDLEIMGPROC) (GLuint texture, GLuint sampler); typedef void (GL_APIENTRYP PFNGLUNIFORMHANDLEUI64IMGPROC) (GLint location, GLuint64 value); typedef void (GL_APIENTRYP PFNGLUNIFORMHANDLEUI64VIMGPROC) (GLint location, GLsizei count, const GLuint64 *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64IMGPROC) (GLuint program, GLint location, GLuint64 value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VIMGPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL GLuint64 GL_APIENTRY glGetTextureHandleIMG (GLuint texture); GL_APICALL GLuint64 GL_APIENTRY glGetTextureSamplerHandleIMG (GLuint texture, GLuint sampler); GL_APICALL void GL_APIENTRY glUniformHandleui64IMG (GLint location, GLuint64 value); GL_APICALL void GL_APIENTRY glUniformHandleui64vIMG (GLint location, GLsizei count, const GLuint64 *value); GL_APICALL void GL_APIENTRY glProgramUniformHandleui64IMG (GLuint program, GLint location, GLuint64 value); GL_APICALL void GL_APIENTRY glProgramUniformHandleui64vIMG (GLuint program, GLint location, GLsizei count, const GLuint64 *values); #endif #endif /* GL_IMG_bindless_texture */ #ifndef GL_IMG_framebuffer_downsample #define GL_IMG_framebuffer_downsample 1 #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_AND_DOWNSAMPLE_IMG 0x913C #define GL_NUM_DOWNSAMPLE_SCALES_IMG 0x913D #define GL_DOWNSAMPLE_SCALES_IMG 0x913E #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SCALE_IMG 0x913F typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DDOWNSAMPLEIMGPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint xscale, GLint yscale); typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERDOWNSAMPLEIMGPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer, GLint xscale, GLint yscale); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glFramebufferTexture2DDownsampleIMG (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint xscale, GLint yscale); GL_APICALL void GL_APIENTRY glFramebufferTextureLayerDownsampleIMG (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer, GLint xscale, GLint yscale); #endif #endif /* GL_IMG_framebuffer_downsample */ #ifndef GL_IMG_multisampled_render_to_texture #define GL_IMG_multisampled_render_to_texture 1 #define GL_RENDERBUFFER_SAMPLES_IMG 0x9133 #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG 0x9134 #define GL_MAX_SAMPLES_IMG 0x9135 #define GL_TEXTURE_SAMPLES_IMG 0x9136 typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleIMG (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleIMG (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); #endif #endif /* GL_IMG_multisampled_render_to_texture */ #ifndef GL_IMG_program_binary #define GL_IMG_program_binary 1 #define GL_SGX_PROGRAM_BINARY_IMG 0x9130 #endif /* GL_IMG_program_binary */ #ifndef GL_IMG_read_format #define GL_IMG_read_format 1 #define GL_BGRA_IMG 0x80E1 #define GL_UNSIGNED_SHORT_4_4_4_4_REV_IMG 0x8365 #endif /* GL_IMG_read_format */ #ifndef GL_IMG_shader_binary #define GL_IMG_shader_binary 1 #define GL_SGX_BINARY_IMG 0x8C0A #endif /* GL_IMG_shader_binary */ #ifndef GL_IMG_texture_compression_pvrtc #define GL_IMG_texture_compression_pvrtc 1 #define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00 #define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG 0x8C01 #define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02 #define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03 #endif /* GL_IMG_texture_compression_pvrtc */ #ifndef GL_IMG_texture_compression_pvrtc2 #define GL_IMG_texture_compression_pvrtc2 1 #define GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG 0x9137 #define GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG 0x9138 #endif /* GL_IMG_texture_compression_pvrtc2 */ #ifndef GL_IMG_texture_filter_cubic #define GL_IMG_texture_filter_cubic 1 #define GL_CUBIC_IMG 0x9139 #define GL_CUBIC_MIPMAP_NEAREST_IMG 0x913A #define GL_CUBIC_MIPMAP_LINEAR_IMG 0x913B #endif /* GL_IMG_texture_filter_cubic */ #ifndef GL_INTEL_blackhole_render #define GL_INTEL_blackhole_render 1 #define GL_BLACKHOLE_RENDER_INTEL 0x83FC #endif /* GL_INTEL_blackhole_render */ #ifndef GL_INTEL_conservative_rasterization #define GL_INTEL_conservative_rasterization 1 #define GL_CONSERVATIVE_RASTERIZATION_INTEL 0x83FE #endif /* GL_INTEL_conservative_rasterization */ #ifndef GL_INTEL_framebuffer_CMAA #define GL_INTEL_framebuffer_CMAA 1 typedef void (GL_APIENTRYP PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glApplyFramebufferAttachmentCMAAINTEL (void); #endif #endif /* GL_INTEL_framebuffer_CMAA */ #ifndef GL_INTEL_performance_query #define GL_INTEL_performance_query 1 #define GL_PERFQUERY_SINGLE_CONTEXT_INTEL 0x00000000 #define GL_PERFQUERY_GLOBAL_CONTEXT_INTEL 0x00000001 #define GL_PERFQUERY_WAIT_INTEL 0x83FB #define GL_PERFQUERY_FLUSH_INTEL 0x83FA #define GL_PERFQUERY_DONOT_FLUSH_INTEL 0x83F9 #define GL_PERFQUERY_COUNTER_EVENT_INTEL 0x94F0 #define GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL 0x94F1 #define GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL 0x94F2 #define GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL 0x94F3 #define GL_PERFQUERY_COUNTER_RAW_INTEL 0x94F4 #define GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL 0x94F5 #define GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL 0x94F8 #define GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL 0x94F9 #define GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL 0x94FA #define GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL 0x94FB #define GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL 0x94FC #define GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL 0x94FD #define GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL 0x94FE #define GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL 0x94FF #define GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL 0x9500 typedef void (GL_APIENTRYP PFNGLBEGINPERFQUERYINTELPROC) (GLuint queryHandle); typedef void (GL_APIENTRYP PFNGLCREATEPERFQUERYINTELPROC) (GLuint queryId, GLuint *queryHandle); typedef void (GL_APIENTRYP PFNGLDELETEPERFQUERYINTELPROC) (GLuint queryHandle); typedef void (GL_APIENTRYP PFNGLENDPERFQUERYINTELPROC) (GLuint queryHandle); typedef void (GL_APIENTRYP PFNGLGETFIRSTPERFQUERYIDINTELPROC) (GLuint *queryId); typedef void (GL_APIENTRYP PFNGLGETNEXTPERFQUERYIDINTELPROC) (GLuint queryId, GLuint *nextQueryId); typedef void (GL_APIENTRYP PFNGLGETPERFCOUNTERINFOINTELPROC) (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); typedef void (GL_APIENTRYP PFNGLGETPERFQUERYDATAINTELPROC) (GLuint queryHandle, GLuint flags, GLsizei dataSize, void *data, GLuint *bytesWritten); typedef void (GL_APIENTRYP PFNGLGETPERFQUERYIDBYNAMEINTELPROC) (GLchar *queryName, GLuint *queryId); typedef void (GL_APIENTRYP PFNGLGETPERFQUERYINFOINTELPROC) (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glBeginPerfQueryINTEL (GLuint queryHandle); GL_APICALL void GL_APIENTRY glCreatePerfQueryINTEL (GLuint queryId, GLuint *queryHandle); GL_APICALL void GL_APIENTRY glDeletePerfQueryINTEL (GLuint queryHandle); GL_APICALL void GL_APIENTRY glEndPerfQueryINTEL (GLuint queryHandle); GL_APICALL void GL_APIENTRY glGetFirstPerfQueryIdINTEL (GLuint *queryId); GL_APICALL void GL_APIENTRY glGetNextPerfQueryIdINTEL (GLuint queryId, GLuint *nextQueryId); GL_APICALL void GL_APIENTRY glGetPerfCounterInfoINTEL (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); GL_APICALL void GL_APIENTRY glGetPerfQueryDataINTEL (GLuint queryHandle, GLuint flags, GLsizei dataSize, void *data, GLuint *bytesWritten); GL_APICALL void GL_APIENTRY glGetPerfQueryIdByNameINTEL (GLchar *queryName, GLuint *queryId); GL_APICALL void GL_APIENTRY glGetPerfQueryInfoINTEL (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); #endif #endif /* GL_INTEL_performance_query */ #ifndef GL_MESA_bgra #define GL_MESA_bgra 1 #define GL_BGR_EXT 0x80E0 #endif /* GL_MESA_bgra */ #ifndef GL_MESA_framebuffer_flip_x #define GL_MESA_framebuffer_flip_x 1 #define GL_FRAMEBUFFER_FLIP_X_MESA 0x8BBC #endif /* GL_MESA_framebuffer_flip_x */ #ifndef GL_MESA_framebuffer_flip_y #define GL_MESA_framebuffer_flip_y 1 #define GL_FRAMEBUFFER_FLIP_Y_MESA 0x8BBB typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERPARAMETERIMESAPROC) (GLenum target, GLenum pname, GLint param); typedef void (GL_APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVMESAPROC) (GLenum target, GLenum pname, GLint *params); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glFramebufferParameteriMESA (GLenum target, GLenum pname, GLint param); GL_APICALL void GL_APIENTRY glGetFramebufferParameterivMESA (GLenum target, GLenum pname, GLint *params); #endif #endif /* GL_MESA_framebuffer_flip_y */ #ifndef GL_MESA_framebuffer_swap_xy #define GL_MESA_framebuffer_swap_xy 1 #define GL_FRAMEBUFFER_SWAP_XY_MESA 0x8BBD #endif /* GL_MESA_framebuffer_swap_xy */ #ifndef GL_MESA_program_binary_formats #define GL_MESA_program_binary_formats 1 #define GL_PROGRAM_BINARY_FORMAT_MESA 0x875F #endif /* GL_MESA_program_binary_formats */ #ifndef GL_MESA_shader_integer_functions #define GL_MESA_shader_integer_functions 1 #endif /* GL_MESA_shader_integer_functions */ #ifndef GL_NVX_blend_equation_advanced_multi_draw_buffers #define GL_NVX_blend_equation_advanced_multi_draw_buffers 1 #endif /* GL_NVX_blend_equation_advanced_multi_draw_buffers */ #ifndef GL_NV_bindless_texture #define GL_NV_bindless_texture 1 typedef GLuint64 (GL_APIENTRYP PFNGLGETTEXTUREHANDLENVPROC) (GLuint texture); typedef GLuint64 (GL_APIENTRYP PFNGLGETTEXTURESAMPLERHANDLENVPROC) (GLuint texture, GLuint sampler); typedef void (GL_APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); typedef void (GL_APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC) (GLuint64 handle); typedef GLuint64 (GL_APIENTRYP PFNGLGETIMAGEHANDLENVPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); typedef void (GL_APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle, GLenum access); typedef void (GL_APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC) (GLuint64 handle); typedef void (GL_APIENTRYP PFNGLUNIFORMHANDLEUI64NVPROC) (GLint location, GLuint64 value); typedef void (GL_APIENTRYP PFNGLUNIFORMHANDLEUI64VNVPROC) (GLint location, GLsizei count, const GLuint64 *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC) (GLuint program, GLint location, GLuint64 value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); typedef GLboolean (GL_APIENTRYP PFNGLISTEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); typedef GLboolean (GL_APIENTRYP PFNGLISIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL GLuint64 GL_APIENTRY glGetTextureHandleNV (GLuint texture); GL_APICALL GLuint64 GL_APIENTRY glGetTextureSamplerHandleNV (GLuint texture, GLuint sampler); GL_APICALL void GL_APIENTRY glMakeTextureHandleResidentNV (GLuint64 handle); GL_APICALL void GL_APIENTRY glMakeTextureHandleNonResidentNV (GLuint64 handle); GL_APICALL GLuint64 GL_APIENTRY glGetImageHandleNV (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); GL_APICALL void GL_APIENTRY glMakeImageHandleResidentNV (GLuint64 handle, GLenum access); GL_APICALL void GL_APIENTRY glMakeImageHandleNonResidentNV (GLuint64 handle); GL_APICALL void GL_APIENTRY glUniformHandleui64NV (GLint location, GLuint64 value); GL_APICALL void GL_APIENTRY glUniformHandleui64vNV (GLint location, GLsizei count, const GLuint64 *value); GL_APICALL void GL_APIENTRY glProgramUniformHandleui64NV (GLuint program, GLint location, GLuint64 value); GL_APICALL void GL_APIENTRY glProgramUniformHandleui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64 *values); GL_APICALL GLboolean GL_APIENTRY glIsTextureHandleResidentNV (GLuint64 handle); GL_APICALL GLboolean GL_APIENTRY glIsImageHandleResidentNV (GLuint64 handle); #endif #endif /* GL_NV_bindless_texture */ #ifndef GL_NV_blend_equation_advanced #define GL_NV_blend_equation_advanced 1 #define GL_BLEND_OVERLAP_NV 0x9281 #define GL_BLEND_PREMULTIPLIED_SRC_NV 0x9280 #define GL_BLUE_NV 0x1905 #define GL_COLORBURN_NV 0x929A #define GL_COLORDODGE_NV 0x9299 #define GL_CONJOINT_NV 0x9284 #define GL_CONTRAST_NV 0x92A1 #define GL_DARKEN_NV 0x9297 #define GL_DIFFERENCE_NV 0x929E #define GL_DISJOINT_NV 0x9283 #define GL_DST_ATOP_NV 0x928F #define GL_DST_IN_NV 0x928B #define GL_DST_NV 0x9287 #define GL_DST_OUT_NV 0x928D #define GL_DST_OVER_NV 0x9289 #define GL_EXCLUSION_NV 0x92A0 #define GL_GREEN_NV 0x1904 #define GL_HARDLIGHT_NV 0x929B #define GL_HARDMIX_NV 0x92A9 #define GL_HSL_COLOR_NV 0x92AF #define GL_HSL_HUE_NV 0x92AD #define GL_HSL_LUMINOSITY_NV 0x92B0 #define GL_HSL_SATURATION_NV 0x92AE #define GL_INVERT_OVG_NV 0x92B4 #define GL_INVERT_RGB_NV 0x92A3 #define GL_LIGHTEN_NV 0x9298 #define GL_LINEARBURN_NV 0x92A5 #define GL_LINEARDODGE_NV 0x92A4 #define GL_LINEARLIGHT_NV 0x92A7 #define GL_MINUS_CLAMPED_NV 0x92B3 #define GL_MINUS_NV 0x929F #define GL_MULTIPLY_NV 0x9294 #define GL_OVERLAY_NV 0x9296 #define GL_PINLIGHT_NV 0x92A8 #define GL_PLUS_CLAMPED_ALPHA_NV 0x92B2 #define GL_PLUS_CLAMPED_NV 0x92B1 #define GL_PLUS_DARKER_NV 0x9292 #define GL_PLUS_NV 0x9291 #define GL_RED_NV 0x1903 #define GL_SCREEN_NV 0x9295 #define GL_SOFTLIGHT_NV 0x929C #define GL_SRC_ATOP_NV 0x928E #define GL_SRC_IN_NV 0x928A #define GL_SRC_NV 0x9286 #define GL_SRC_OUT_NV 0x928C #define GL_SRC_OVER_NV 0x9288 #define GL_UNCORRELATED_NV 0x9282 #define GL_VIVIDLIGHT_NV 0x92A6 #define GL_XOR_NV 0x1506 typedef void (GL_APIENTRYP PFNGLBLENDPARAMETERINVPROC) (GLenum pname, GLint value); typedef void (GL_APIENTRYP PFNGLBLENDBARRIERNVPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glBlendParameteriNV (GLenum pname, GLint value); GL_APICALL void GL_APIENTRY glBlendBarrierNV (void); #endif #endif /* GL_NV_blend_equation_advanced */ #ifndef GL_NV_blend_equation_advanced_coherent #define GL_NV_blend_equation_advanced_coherent 1 #define GL_BLEND_ADVANCED_COHERENT_NV 0x9285 #endif /* GL_NV_blend_equation_advanced_coherent */ #ifndef GL_NV_blend_minmax_factor #define GL_NV_blend_minmax_factor 1 #define GL_FACTOR_MIN_AMD 0x901C #define GL_FACTOR_MAX_AMD 0x901D #endif /* GL_NV_blend_minmax_factor */ #ifndef GL_NV_clip_space_w_scaling #define GL_NV_clip_space_w_scaling 1 #define GL_VIEWPORT_POSITION_W_SCALE_NV 0x937C #define GL_VIEWPORT_POSITION_W_SCALE_X_COEFF_NV 0x937D #define GL_VIEWPORT_POSITION_W_SCALE_Y_COEFF_NV 0x937E typedef void (GL_APIENTRYP PFNGLVIEWPORTPOSITIONWSCALENVPROC) (GLuint index, GLfloat xcoeff, GLfloat ycoeff); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glViewportPositionWScaleNV (GLuint index, GLfloat xcoeff, GLfloat ycoeff); #endif #endif /* GL_NV_clip_space_w_scaling */ #ifndef GL_NV_compute_shader_derivatives #define GL_NV_compute_shader_derivatives 1 #endif /* GL_NV_compute_shader_derivatives */ #ifndef GL_NV_conditional_render #define GL_NV_conditional_render 1 #define GL_QUERY_WAIT_NV 0x8E13 #define GL_QUERY_NO_WAIT_NV 0x8E14 #define GL_QUERY_BY_REGION_WAIT_NV 0x8E15 #define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 typedef void (GL_APIENTRYP PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode); typedef void (GL_APIENTRYP PFNGLENDCONDITIONALRENDERNVPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glBeginConditionalRenderNV (GLuint id, GLenum mode); GL_APICALL void GL_APIENTRY glEndConditionalRenderNV (void); #endif #endif /* GL_NV_conditional_render */ #ifndef GL_NV_conservative_raster #define GL_NV_conservative_raster 1 #define GL_CONSERVATIVE_RASTERIZATION_NV 0x9346 #define GL_SUBPIXEL_PRECISION_BIAS_X_BITS_NV 0x9347 #define GL_SUBPIXEL_PRECISION_BIAS_Y_BITS_NV 0x9348 #define GL_MAX_SUBPIXEL_PRECISION_BIAS_BITS_NV 0x9349 typedef void (GL_APIENTRYP PFNGLSUBPIXELPRECISIONBIASNVPROC) (GLuint xbits, GLuint ybits); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glSubpixelPrecisionBiasNV (GLuint xbits, GLuint ybits); #endif #endif /* GL_NV_conservative_raster */ #ifndef GL_NV_conservative_raster_pre_snap #define GL_NV_conservative_raster_pre_snap 1 #define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_NV 0x9550 #endif /* GL_NV_conservative_raster_pre_snap */ #ifndef GL_NV_conservative_raster_pre_snap_triangles #define GL_NV_conservative_raster_pre_snap_triangles 1 #define GL_CONSERVATIVE_RASTER_MODE_NV 0x954D #define GL_CONSERVATIVE_RASTER_MODE_POST_SNAP_NV 0x954E #define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_TRIANGLES_NV 0x954F typedef void (GL_APIENTRYP PFNGLCONSERVATIVERASTERPARAMETERINVPROC) (GLenum pname, GLint param); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glConservativeRasterParameteriNV (GLenum pname, GLint param); #endif #endif /* GL_NV_conservative_raster_pre_snap_triangles */ #ifndef GL_NV_copy_buffer #define GL_NV_copy_buffer 1 #define GL_COPY_READ_BUFFER_NV 0x8F36 #define GL_COPY_WRITE_BUFFER_NV 0x8F37 typedef void (GL_APIENTRYP PFNGLCOPYBUFFERSUBDATANVPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glCopyBufferSubDataNV (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); #endif #endif /* GL_NV_copy_buffer */ #ifndef GL_NV_coverage_sample #define GL_NV_coverage_sample 1 #define GL_COVERAGE_COMPONENT_NV 0x8ED0 #define GL_COVERAGE_COMPONENT4_NV 0x8ED1 #define GL_COVERAGE_ATTACHMENT_NV 0x8ED2 #define GL_COVERAGE_BUFFERS_NV 0x8ED3 #define GL_COVERAGE_SAMPLES_NV 0x8ED4 #define GL_COVERAGE_ALL_FRAGMENTS_NV 0x8ED5 #define GL_COVERAGE_EDGE_FRAGMENTS_NV 0x8ED6 #define GL_COVERAGE_AUTOMATIC_NV 0x8ED7 #define GL_COVERAGE_BUFFER_BIT_NV 0x00008000 typedef void (GL_APIENTRYP PFNGLCOVERAGEMASKNVPROC) (GLboolean mask); typedef void (GL_APIENTRYP PFNGLCOVERAGEOPERATIONNVPROC) (GLenum operation); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glCoverageMaskNV (GLboolean mask); GL_APICALL void GL_APIENTRY glCoverageOperationNV (GLenum operation); #endif #endif /* GL_NV_coverage_sample */ #ifndef GL_NV_depth_nonlinear #define GL_NV_depth_nonlinear 1 #define GL_DEPTH_COMPONENT16_NONLINEAR_NV 0x8E2C #endif /* GL_NV_depth_nonlinear */ #ifndef GL_NV_draw_buffers #define GL_NV_draw_buffers 1 #define GL_MAX_DRAW_BUFFERS_NV 0x8824 #define GL_DRAW_BUFFER0_NV 0x8825 #define GL_DRAW_BUFFER1_NV 0x8826 #define GL_DRAW_BUFFER2_NV 0x8827 #define GL_DRAW_BUFFER3_NV 0x8828 #define GL_DRAW_BUFFER4_NV 0x8829 #define GL_DRAW_BUFFER5_NV 0x882A #define GL_DRAW_BUFFER6_NV 0x882B #define GL_DRAW_BUFFER7_NV 0x882C #define GL_DRAW_BUFFER8_NV 0x882D #define GL_DRAW_BUFFER9_NV 0x882E #define GL_DRAW_BUFFER10_NV 0x882F #define GL_DRAW_BUFFER11_NV 0x8830 #define GL_DRAW_BUFFER12_NV 0x8831 #define GL_DRAW_BUFFER13_NV 0x8832 #define GL_DRAW_BUFFER14_NV 0x8833 #define GL_DRAW_BUFFER15_NV 0x8834 #define GL_COLOR_ATTACHMENT0_NV 0x8CE0 #define GL_COLOR_ATTACHMENT1_NV 0x8CE1 #define GL_COLOR_ATTACHMENT2_NV 0x8CE2 #define GL_COLOR_ATTACHMENT3_NV 0x8CE3 #define GL_COLOR_ATTACHMENT4_NV 0x8CE4 #define GL_COLOR_ATTACHMENT5_NV 0x8CE5 #define GL_COLOR_ATTACHMENT6_NV 0x8CE6 #define GL_COLOR_ATTACHMENT7_NV 0x8CE7 #define GL_COLOR_ATTACHMENT8_NV 0x8CE8 #define GL_COLOR_ATTACHMENT9_NV 0x8CE9 #define GL_COLOR_ATTACHMENT10_NV 0x8CEA #define GL_COLOR_ATTACHMENT11_NV 0x8CEB #define GL_COLOR_ATTACHMENT12_NV 0x8CEC #define GL_COLOR_ATTACHMENT13_NV 0x8CED #define GL_COLOR_ATTACHMENT14_NV 0x8CEE #define GL_COLOR_ATTACHMENT15_NV 0x8CEF typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSNVPROC) (GLsizei n, const GLenum *bufs); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glDrawBuffersNV (GLsizei n, const GLenum *bufs); #endif #endif /* GL_NV_draw_buffers */ #ifndef GL_NV_draw_instanced #define GL_NV_draw_instanced 1 typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDNVPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDNVPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glDrawArraysInstancedNV (GLenum mode, GLint first, GLsizei count, GLsizei primcount); GL_APICALL void GL_APIENTRY glDrawElementsInstancedNV (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); #endif #endif /* GL_NV_draw_instanced */ #ifndef GL_NV_draw_vulkan_image #define GL_NV_draw_vulkan_image 1 typedef void (GL_APIENTRY *GLVULKANPROCNV)(void); typedef void (GL_APIENTRYP PFNGLDRAWVKIMAGENVPROC) (GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); typedef GLVULKANPROCNV (GL_APIENTRYP PFNGLGETVKPROCADDRNVPROC) (const GLchar *name); typedef void (GL_APIENTRYP PFNGLWAITVKSEMAPHORENVPROC) (GLuint64 vkSemaphore); typedef void (GL_APIENTRYP PFNGLSIGNALVKSEMAPHORENVPROC) (GLuint64 vkSemaphore); typedef void (GL_APIENTRYP PFNGLSIGNALVKFENCENVPROC) (GLuint64 vkFence); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glDrawVkImageNV (GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); GL_APICALL GLVULKANPROCNV GL_APIENTRY glGetVkProcAddrNV (const GLchar *name); GL_APICALL void GL_APIENTRY glWaitVkSemaphoreNV (GLuint64 vkSemaphore); GL_APICALL void GL_APIENTRY glSignalVkSemaphoreNV (GLuint64 vkSemaphore); GL_APICALL void GL_APIENTRY glSignalVkFenceNV (GLuint64 vkFence); #endif #endif /* GL_NV_draw_vulkan_image */ #ifndef GL_NV_explicit_attrib_location #define GL_NV_explicit_attrib_location 1 #endif /* GL_NV_explicit_attrib_location */ #ifndef GL_NV_fbo_color_attachments #define GL_NV_fbo_color_attachments 1 #define GL_MAX_COLOR_ATTACHMENTS_NV 0x8CDF #endif /* GL_NV_fbo_color_attachments */ #ifndef GL_NV_fence #define GL_NV_fence 1 #define GL_ALL_COMPLETED_NV 0x84F2 #define GL_FENCE_STATUS_NV 0x84F3 #define GL_FENCE_CONDITION_NV 0x84F4 typedef void (GL_APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); typedef void (GL_APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); typedef GLboolean (GL_APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); typedef GLboolean (GL_APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); typedef void (GL_APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); typedef void (GL_APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences); GL_APICALL void GL_APIENTRY glGenFencesNV (GLsizei n, GLuint *fences); GL_APICALL GLboolean GL_APIENTRY glIsFenceNV (GLuint fence); GL_APICALL GLboolean GL_APIENTRY glTestFenceNV (GLuint fence); GL_APICALL void GL_APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params); GL_APICALL void GL_APIENTRY glFinishFenceNV (GLuint fence); GL_APICALL void GL_APIENTRY glSetFenceNV (GLuint fence, GLenum condition); #endif #endif /* GL_NV_fence */ #ifndef GL_NV_fill_rectangle #define GL_NV_fill_rectangle 1 #define GL_FILL_RECTANGLE_NV 0x933C #endif /* GL_NV_fill_rectangle */ #ifndef GL_NV_fragment_coverage_to_color #define GL_NV_fragment_coverage_to_color 1 #define GL_FRAGMENT_COVERAGE_TO_COLOR_NV 0x92DD #define GL_FRAGMENT_COVERAGE_COLOR_NV 0x92DE typedef void (GL_APIENTRYP PFNGLFRAGMENTCOVERAGECOLORNVPROC) (GLuint color); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glFragmentCoverageColorNV (GLuint color); #endif #endif /* GL_NV_fragment_coverage_to_color */ #ifndef GL_NV_fragment_shader_barycentric #define GL_NV_fragment_shader_barycentric 1 #endif /* GL_NV_fragment_shader_barycentric */ #ifndef GL_NV_fragment_shader_interlock #define GL_NV_fragment_shader_interlock 1 #endif /* GL_NV_fragment_shader_interlock */ #ifndef GL_NV_framebuffer_blit #define GL_NV_framebuffer_blit 1 #define GL_READ_FRAMEBUFFER_NV 0x8CA8 #define GL_DRAW_FRAMEBUFFER_NV 0x8CA9 #define GL_DRAW_FRAMEBUFFER_BINDING_NV 0x8CA6 #define GL_READ_FRAMEBUFFER_BINDING_NV 0x8CAA typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERNVPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glBlitFramebufferNV (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); #endif #endif /* GL_NV_framebuffer_blit */ #ifndef GL_NV_framebuffer_mixed_samples #define GL_NV_framebuffer_mixed_samples 1 #define GL_COVERAGE_MODULATION_TABLE_NV 0x9331 #define GL_COLOR_SAMPLES_NV 0x8E20 #define GL_DEPTH_SAMPLES_NV 0x932D #define GL_STENCIL_SAMPLES_NV 0x932E #define GL_MIXED_DEPTH_SAMPLES_SUPPORTED_NV 0x932F #define GL_MIXED_STENCIL_SAMPLES_SUPPORTED_NV 0x9330 #define GL_COVERAGE_MODULATION_NV 0x9332 #define GL_COVERAGE_MODULATION_TABLE_SIZE_NV 0x9333 typedef void (GL_APIENTRYP PFNGLCOVERAGEMODULATIONTABLENVPROC) (GLsizei n, const GLfloat *v); typedef void (GL_APIENTRYP PFNGLGETCOVERAGEMODULATIONTABLENVPROC) (GLsizei bufSize, GLfloat *v); typedef void (GL_APIENTRYP PFNGLCOVERAGEMODULATIONNVPROC) (GLenum components); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glCoverageModulationTableNV (GLsizei n, const GLfloat *v); GL_APICALL void GL_APIENTRY glGetCoverageModulationTableNV (GLsizei bufSize, GLfloat *v); GL_APICALL void GL_APIENTRY glCoverageModulationNV (GLenum components); #endif #endif /* GL_NV_framebuffer_mixed_samples */ #ifndef GL_NV_framebuffer_multisample #define GL_NV_framebuffer_multisample 1 #define GL_RENDERBUFFER_SAMPLES_NV 0x8CAB #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_NV 0x8D56 #define GL_MAX_SAMPLES_NV 0x8D57 typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLENVPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleNV (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); #endif #endif /* GL_NV_framebuffer_multisample */ #ifndef GL_NV_generate_mipmap_sRGB #define GL_NV_generate_mipmap_sRGB 1 #endif /* GL_NV_generate_mipmap_sRGB */ #ifndef GL_NV_geometry_shader_passthrough #define GL_NV_geometry_shader_passthrough 1 #endif /* GL_NV_geometry_shader_passthrough */ #ifndef GL_NV_gpu_shader5 #define GL_NV_gpu_shader5 1 typedef khronos_int64_t GLint64EXT; typedef khronos_uint64_t GLuint64EXT; #define GL_INT64_NV 0x140E #define GL_UNSIGNED_INT64_NV 0x140F #define GL_INT8_NV 0x8FE0 #define GL_INT8_VEC2_NV 0x8FE1 #define GL_INT8_VEC3_NV 0x8FE2 #define GL_INT8_VEC4_NV 0x8FE3 #define GL_INT16_NV 0x8FE4 #define GL_INT16_VEC2_NV 0x8FE5 #define GL_INT16_VEC3_NV 0x8FE6 #define GL_INT16_VEC4_NV 0x8FE7 #define GL_INT64_VEC2_NV 0x8FE9 #define GL_INT64_VEC3_NV 0x8FEA #define GL_INT64_VEC4_NV 0x8FEB #define GL_UNSIGNED_INT8_NV 0x8FEC #define GL_UNSIGNED_INT8_VEC2_NV 0x8FED #define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE #define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF #define GL_UNSIGNED_INT16_NV 0x8FF0 #define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 #define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 #define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 #define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5 #define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6 #define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7 #define GL_FLOAT16_NV 0x8FF8 #define GL_FLOAT16_VEC2_NV 0x8FF9 #define GL_FLOAT16_VEC3_NV 0x8FFA #define GL_FLOAT16_VEC4_NV 0x8FFB #define GL_PATCHES 0x000E typedef void (GL_APIENTRYP PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x); typedef void (GL_APIENTRYP PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y); typedef void (GL_APIENTRYP PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); typedef void (GL_APIENTRYP PFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); typedef void (GL_APIENTRYP PFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); typedef void (GL_APIENTRYP PFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); typedef void (GL_APIENTRYP PFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); typedef void (GL_APIENTRYP PFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); typedef void (GL_APIENTRYP PFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x); typedef void (GL_APIENTRYP PFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y); typedef void (GL_APIENTRYP PFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); typedef void (GL_APIENTRYP PFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); typedef void (GL_APIENTRYP PFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); typedef void (GL_APIENTRYP PFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); typedef void (GL_APIENTRYP PFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); typedef void (GL_APIENTRYP PFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); typedef void (GL_APIENTRYP PFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT *params); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glUniform1i64NV (GLint location, GLint64EXT x); GL_APICALL void GL_APIENTRY glUniform2i64NV (GLint location, GLint64EXT x, GLint64EXT y); GL_APICALL void GL_APIENTRY glUniform3i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); GL_APICALL void GL_APIENTRY glUniform4i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); GL_APICALL void GL_APIENTRY glUniform1i64vNV (GLint location, GLsizei count, const GLint64EXT *value); GL_APICALL void GL_APIENTRY glUniform2i64vNV (GLint location, GLsizei count, const GLint64EXT *value); GL_APICALL void GL_APIENTRY glUniform3i64vNV (GLint location, GLsizei count, const GLint64EXT *value); GL_APICALL void GL_APIENTRY glUniform4i64vNV (GLint location, GLsizei count, const GLint64EXT *value); GL_APICALL void GL_APIENTRY glUniform1ui64NV (GLint location, GLuint64EXT x); GL_APICALL void GL_APIENTRY glUniform2ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y); GL_APICALL void GL_APIENTRY glUniform3ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); GL_APICALL void GL_APIENTRY glUniform4ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); GL_APICALL void GL_APIENTRY glUniform1ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); GL_APICALL void GL_APIENTRY glUniform2ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); GL_APICALL void GL_APIENTRY glUniform3ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); GL_APICALL void GL_APIENTRY glUniform4ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); GL_APICALL void GL_APIENTRY glGetUniformi64vNV (GLuint program, GLint location, GLint64EXT *params); GL_APICALL void GL_APIENTRY glProgramUniform1i64NV (GLuint program, GLint location, GLint64EXT x); GL_APICALL void GL_APIENTRY glProgramUniform2i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); GL_APICALL void GL_APIENTRY glProgramUniform3i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); GL_APICALL void GL_APIENTRY glProgramUniform4i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); GL_APICALL void GL_APIENTRY glProgramUniform1i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); GL_APICALL void GL_APIENTRY glProgramUniform2i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); GL_APICALL void GL_APIENTRY glProgramUniform3i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); GL_APICALL void GL_APIENTRY glProgramUniform4i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); GL_APICALL void GL_APIENTRY glProgramUniform1ui64NV (GLuint program, GLint location, GLuint64EXT x); GL_APICALL void GL_APIENTRY glProgramUniform2ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); GL_APICALL void GL_APIENTRY glProgramUniform3ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); GL_APICALL void GL_APIENTRY glProgramUniform4ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); GL_APICALL void GL_APIENTRY glProgramUniform1ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); GL_APICALL void GL_APIENTRY glProgramUniform2ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); GL_APICALL void GL_APIENTRY glProgramUniform3ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); GL_APICALL void GL_APIENTRY glProgramUniform4ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); #endif #endif /* GL_NV_gpu_shader5 */ #ifndef GL_NV_image_formats #define GL_NV_image_formats 1 #endif /* GL_NV_image_formats */ #ifndef GL_NV_instanced_arrays #define GL_NV_instanced_arrays 1 #define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_NV 0x88FE typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORNVPROC) (GLuint index, GLuint divisor); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glVertexAttribDivisorNV (GLuint index, GLuint divisor); #endif #endif /* GL_NV_instanced_arrays */ #ifndef GL_NV_internalformat_sample_query #define GL_NV_internalformat_sample_query 1 #define GL_TEXTURE_2D_MULTISAMPLE 0x9100 #define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 #define GL_MULTISAMPLES_NV 0x9371 #define GL_SUPERSAMPLE_SCALE_X_NV 0x9372 #define GL_SUPERSAMPLE_SCALE_Y_NV 0x9373 #define GL_CONFORMANT_NV 0x9374 typedef void (GL_APIENTRYP PFNGLGETINTERNALFORMATSAMPLEIVNVPROC) (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei count, GLint *params); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glGetInternalformatSampleivNV (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei count, GLint *params); #endif #endif /* GL_NV_internalformat_sample_query */ #ifndef GL_NV_memory_attachment #define GL_NV_memory_attachment 1 #define GL_ATTACHED_MEMORY_OBJECT_NV 0x95A4 #define GL_ATTACHED_MEMORY_OFFSET_NV 0x95A5 #define GL_MEMORY_ATTACHABLE_ALIGNMENT_NV 0x95A6 #define GL_MEMORY_ATTACHABLE_SIZE_NV 0x95A7 #define GL_MEMORY_ATTACHABLE_NV 0x95A8 #define GL_DETACHED_MEMORY_INCARNATION_NV 0x95A9 #define GL_DETACHED_TEXTURES_NV 0x95AA #define GL_DETACHED_BUFFERS_NV 0x95AB #define GL_MAX_DETACHED_TEXTURES_NV 0x95AC #define GL_MAX_DETACHED_BUFFERS_NV 0x95AD typedef void (GL_APIENTRYP PFNGLGETMEMORYOBJECTDETACHEDRESOURCESUIVNVPROC) (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params); typedef void (GL_APIENTRYP PFNGLRESETMEMORYOBJECTPARAMETERNVPROC) (GLuint memory, GLenum pname); typedef void (GL_APIENTRYP PFNGLTEXATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset); typedef void (GL_APIENTRYP PFNGLBUFFERATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset); typedef void (GL_APIENTRYP PFNGLTEXTUREATTACHMEMORYNVPROC) (GLuint texture, GLuint memory, GLuint64 offset); typedef void (GL_APIENTRYP PFNGLNAMEDBUFFERATTACHMEMORYNVPROC) (GLuint buffer, GLuint memory, GLuint64 offset); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glGetMemoryObjectDetachedResourcesuivNV (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params); GL_APICALL void GL_APIENTRY glResetMemoryObjectParameterNV (GLuint memory, GLenum pname); GL_APICALL void GL_APIENTRY glTexAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset); GL_APICALL void GL_APIENTRY glBufferAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset); GL_APICALL void GL_APIENTRY glTextureAttachMemoryNV (GLuint texture, GLuint memory, GLuint64 offset); GL_APICALL void GL_APIENTRY glNamedBufferAttachMemoryNV (GLuint buffer, GLuint memory, GLuint64 offset); #endif #endif /* GL_NV_memory_attachment */ #ifndef GL_NV_memory_object_sparse #define GL_NV_memory_object_sparse 1 typedef void (GL_APIENTRYP PFNGLBUFFERPAGECOMMITMENTMEMNVPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLuint memory, GLuint64 memOffset, GLboolean commit); typedef void (GL_APIENTRYP PFNGLTEXPAGECOMMITMENTMEMNVPROC) (GLenum target, GLint layer, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset, GLboolean commit); typedef void (GL_APIENTRYP PFNGLNAMEDBUFFERPAGECOMMITMENTMEMNVPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLuint memory, GLuint64 memOffset, GLboolean commit); typedef void (GL_APIENTRYP PFNGLTEXTUREPAGECOMMITMENTMEMNVPROC) (GLuint texture, GLint layer, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset, GLboolean commit); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glBufferPageCommitmentMemNV (GLenum target, GLintptr offset, GLsizeiptr size, GLuint memory, GLuint64 memOffset, GLboolean commit); GL_APICALL void GL_APIENTRY glTexPageCommitmentMemNV (GLenum target, GLint layer, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset, GLboolean commit); GL_APICALL void GL_APIENTRY glNamedBufferPageCommitmentMemNV (GLuint buffer, GLintptr offset, GLsizeiptr size, GLuint memory, GLuint64 memOffset, GLboolean commit); GL_APICALL void GL_APIENTRY glTexturePageCommitmentMemNV (GLuint texture, GLint layer, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset, GLboolean commit); #endif #endif /* GL_NV_memory_object_sparse */ #ifndef GL_NV_mesh_shader #define GL_NV_mesh_shader 1 #define GL_MESH_SHADER_NV 0x9559 #define GL_TASK_SHADER_NV 0x955A #define GL_MAX_MESH_UNIFORM_BLOCKS_NV 0x8E60 #define GL_MAX_MESH_TEXTURE_IMAGE_UNITS_NV 0x8E61 #define GL_MAX_MESH_IMAGE_UNIFORMS_NV 0x8E62 #define GL_MAX_MESH_UNIFORM_COMPONENTS_NV 0x8E63 #define GL_MAX_MESH_ATOMIC_COUNTER_BUFFERS_NV 0x8E64 #define GL_MAX_MESH_ATOMIC_COUNTERS_NV 0x8E65 #define GL_MAX_MESH_SHADER_STORAGE_BLOCKS_NV 0x8E66 #define GL_MAX_COMBINED_MESH_UNIFORM_COMPONENTS_NV 0x8E67 #define GL_MAX_TASK_UNIFORM_BLOCKS_NV 0x8E68 #define GL_MAX_TASK_TEXTURE_IMAGE_UNITS_NV 0x8E69 #define GL_MAX_TASK_IMAGE_UNIFORMS_NV 0x8E6A #define GL_MAX_TASK_UNIFORM_COMPONENTS_NV 0x8E6B #define GL_MAX_TASK_ATOMIC_COUNTER_BUFFERS_NV 0x8E6C #define GL_MAX_TASK_ATOMIC_COUNTERS_NV 0x8E6D #define GL_MAX_TASK_SHADER_STORAGE_BLOCKS_NV 0x8E6E #define GL_MAX_COMBINED_TASK_UNIFORM_COMPONENTS_NV 0x8E6F #define GL_MAX_MESH_WORK_GROUP_INVOCATIONS_NV 0x95A2 #define GL_MAX_TASK_WORK_GROUP_INVOCATIONS_NV 0x95A3 #define GL_MAX_MESH_TOTAL_MEMORY_SIZE_NV 0x9536 #define GL_MAX_TASK_TOTAL_MEMORY_SIZE_NV 0x9537 #define GL_MAX_MESH_OUTPUT_VERTICES_NV 0x9538 #define GL_MAX_MESH_OUTPUT_PRIMITIVES_NV 0x9539 #define GL_MAX_TASK_OUTPUT_COUNT_NV 0x953A #define GL_MAX_DRAW_MESH_TASKS_COUNT_NV 0x953D #define GL_MAX_MESH_VIEWS_NV 0x9557 #define GL_MESH_OUTPUT_PER_VERTEX_GRANULARITY_NV 0x92DF #define GL_MESH_OUTPUT_PER_PRIMITIVE_GRANULARITY_NV 0x9543 #define GL_MAX_MESH_WORK_GROUP_SIZE_NV 0x953B #define GL_MAX_TASK_WORK_GROUP_SIZE_NV 0x953C #define GL_MESH_WORK_GROUP_SIZE_NV 0x953E #define GL_TASK_WORK_GROUP_SIZE_NV 0x953F #define GL_MESH_VERTICES_OUT_NV 0x9579 #define GL_MESH_PRIMITIVES_OUT_NV 0x957A #define GL_MESH_OUTPUT_TYPE_NV 0x957B #define GL_UNIFORM_BLOCK_REFERENCED_BY_MESH_SHADER_NV 0x959C #define GL_UNIFORM_BLOCK_REFERENCED_BY_TASK_SHADER_NV 0x959D #define GL_REFERENCED_BY_MESH_SHADER_NV 0x95A0 #define GL_REFERENCED_BY_TASK_SHADER_NV 0x95A1 #define GL_MESH_SHADER_BIT_NV 0x00000040 #define GL_TASK_SHADER_BIT_NV 0x00000080 #define GL_MESH_SUBROUTINE_NV 0x957C #define GL_TASK_SUBROUTINE_NV 0x957D #define GL_MESH_SUBROUTINE_UNIFORM_NV 0x957E #define GL_TASK_SUBROUTINE_UNIFORM_NV 0x957F #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_MESH_SHADER_NV 0x959E #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TASK_SHADER_NV 0x959F typedef void (GL_APIENTRYP PFNGLDRAWMESHTASKSNVPROC) (GLuint first, GLuint count); typedef void (GL_APIENTRYP PFNGLDRAWMESHTASKSINDIRECTNVPROC) (GLintptr indirect); typedef void (GL_APIENTRYP PFNGLMULTIDRAWMESHTASKSINDIRECTNVPROC) (GLintptr indirect, GLsizei drawcount, GLsizei stride); typedef void (GL_APIENTRYP PFNGLMULTIDRAWMESHTASKSINDIRECTCOUNTNVPROC) (GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glDrawMeshTasksNV (GLuint first, GLuint count); GL_APICALL void GL_APIENTRY glDrawMeshTasksIndirectNV (GLintptr indirect); GL_APICALL void GL_APIENTRY glMultiDrawMeshTasksIndirectNV (GLintptr indirect, GLsizei drawcount, GLsizei stride); GL_APICALL void GL_APIENTRY glMultiDrawMeshTasksIndirectCountNV (GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); #endif #endif /* GL_NV_mesh_shader */ #ifndef GL_NV_non_square_matrices #define GL_NV_non_square_matrices 1 #define GL_FLOAT_MAT2x3_NV 0x8B65 #define GL_FLOAT_MAT2x4_NV 0x8B66 #define GL_FLOAT_MAT3x2_NV 0x8B67 #define GL_FLOAT_MAT3x4_NV 0x8B68 #define GL_FLOAT_MAT4x2_NV 0x8B69 #define GL_FLOAT_MAT4x3_NV 0x8B6A typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2X3FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3X2FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2X4FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4X2FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3X4FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4X3FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glUniformMatrix2x3fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glUniformMatrix3x2fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glUniformMatrix2x4fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glUniformMatrix4x2fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glUniformMatrix3x4fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GL_APICALL void GL_APIENTRY glUniformMatrix4x3fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); #endif #endif /* GL_NV_non_square_matrices */ #ifndef GL_NV_path_rendering #define GL_NV_path_rendering 1 typedef double GLdouble; #define GL_PATH_FORMAT_SVG_NV 0x9070 #define GL_PATH_FORMAT_PS_NV 0x9071 #define GL_STANDARD_FONT_NAME_NV 0x9072 #define GL_SYSTEM_FONT_NAME_NV 0x9073 #define GL_FILE_NAME_NV 0x9074 #define GL_PATH_STROKE_WIDTH_NV 0x9075 #define GL_PATH_END_CAPS_NV 0x9076 #define GL_PATH_INITIAL_END_CAP_NV 0x9077 #define GL_PATH_TERMINAL_END_CAP_NV 0x9078 #define GL_PATH_JOIN_STYLE_NV 0x9079 #define GL_PATH_MITER_LIMIT_NV 0x907A #define GL_PATH_DASH_CAPS_NV 0x907B #define GL_PATH_INITIAL_DASH_CAP_NV 0x907C #define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D #define GL_PATH_DASH_OFFSET_NV 0x907E #define GL_PATH_CLIENT_LENGTH_NV 0x907F #define GL_PATH_FILL_MODE_NV 0x9080 #define GL_PATH_FILL_MASK_NV 0x9081 #define GL_PATH_FILL_COVER_MODE_NV 0x9082 #define GL_PATH_STROKE_COVER_MODE_NV 0x9083 #define GL_PATH_STROKE_MASK_NV 0x9084 #define GL_COUNT_UP_NV 0x9088 #define GL_COUNT_DOWN_NV 0x9089 #define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A #define GL_CONVEX_HULL_NV 0x908B #define GL_BOUNDING_BOX_NV 0x908D #define GL_TRANSLATE_X_NV 0x908E #define GL_TRANSLATE_Y_NV 0x908F #define GL_TRANSLATE_2D_NV 0x9090 #define GL_TRANSLATE_3D_NV 0x9091 #define GL_AFFINE_2D_NV 0x9092 #define GL_AFFINE_3D_NV 0x9094 #define GL_TRANSPOSE_AFFINE_2D_NV 0x9096 #define GL_TRANSPOSE_AFFINE_3D_NV 0x9098 #define GL_UTF8_NV 0x909A #define GL_UTF16_NV 0x909B #define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C #define GL_PATH_COMMAND_COUNT_NV 0x909D #define GL_PATH_COORD_COUNT_NV 0x909E #define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F #define GL_PATH_COMPUTED_LENGTH_NV 0x90A0 #define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1 #define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2 #define GL_SQUARE_NV 0x90A3 #define GL_ROUND_NV 0x90A4 #define GL_TRIANGULAR_NV 0x90A5 #define GL_BEVEL_NV 0x90A6 #define GL_MITER_REVERT_NV 0x90A7 #define GL_MITER_TRUNCATE_NV 0x90A8 #define GL_SKIP_MISSING_GLYPH_NV 0x90A9 #define GL_USE_MISSING_GLYPH_NV 0x90AA #define GL_PATH_ERROR_POSITION_NV 0x90AB #define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD #define GL_ADJACENT_PAIRS_NV 0x90AE #define GL_FIRST_TO_REST_NV 0x90AF #define GL_PATH_GEN_MODE_NV 0x90B0 #define GL_PATH_GEN_COEFF_NV 0x90B1 #define GL_PATH_GEN_COMPONENTS_NV 0x90B3 #define GL_PATH_STENCIL_FUNC_NV 0x90B7 #define GL_PATH_STENCIL_REF_NV 0x90B8 #define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9 #define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD #define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE #define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF #define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4 #define GL_MOVE_TO_RESETS_NV 0x90B5 #define GL_MOVE_TO_CONTINUES_NV 0x90B6 #define GL_CLOSE_PATH_NV 0x00 #define GL_MOVE_TO_NV 0x02 #define GL_RELATIVE_MOVE_TO_NV 0x03 #define GL_LINE_TO_NV 0x04 #define GL_RELATIVE_LINE_TO_NV 0x05 #define GL_HORIZONTAL_LINE_TO_NV 0x06 #define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07 #define GL_VERTICAL_LINE_TO_NV 0x08 #define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09 #define GL_QUADRATIC_CURVE_TO_NV 0x0A #define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B #define GL_CUBIC_CURVE_TO_NV 0x0C #define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D #define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E #define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F #define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10 #define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11 #define GL_SMALL_CCW_ARC_TO_NV 0x12 #define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13 #define GL_SMALL_CW_ARC_TO_NV 0x14 #define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15 #define GL_LARGE_CCW_ARC_TO_NV 0x16 #define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17 #define GL_LARGE_CW_ARC_TO_NV 0x18 #define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19 #define GL_RESTART_PATH_NV 0xF0 #define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2 #define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4 #define GL_RECT_NV 0xF6 #define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8 #define GL_CIRCULAR_CW_ARC_TO_NV 0xFA #define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC #define GL_ARC_TO_NV 0xFE #define GL_RELATIVE_ARC_TO_NV 0xFF #define GL_BOLD_BIT_NV 0x01 #define GL_ITALIC_BIT_NV 0x02 #define GL_GLYPH_WIDTH_BIT_NV 0x01 #define GL_GLYPH_HEIGHT_BIT_NV 0x02 #define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04 #define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08 #define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10 #define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20 #define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40 #define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80 #define GL_GLYPH_HAS_KERNING_BIT_NV 0x100 #define GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000 #define GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000 #define GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000 #define GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000 #define GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000 #define GL_FONT_ASCENDER_BIT_NV 0x00200000 #define GL_FONT_DESCENDER_BIT_NV 0x00400000 #define GL_FONT_HEIGHT_BIT_NV 0x00800000 #define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000 #define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000 #define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000 #define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000 #define GL_FONT_HAS_KERNING_BIT_NV 0x10000000 #define GL_ROUNDED_RECT_NV 0xE8 #define GL_RELATIVE_ROUNDED_RECT_NV 0xE9 #define GL_ROUNDED_RECT2_NV 0xEA #define GL_RELATIVE_ROUNDED_RECT2_NV 0xEB #define GL_ROUNDED_RECT4_NV 0xEC #define GL_RELATIVE_ROUNDED_RECT4_NV 0xED #define GL_ROUNDED_RECT8_NV 0xEE #define GL_RELATIVE_ROUNDED_RECT8_NV 0xEF #define GL_RELATIVE_RECT_NV 0xF7 #define GL_FONT_GLYPHS_AVAILABLE_NV 0x9368 #define GL_FONT_TARGET_UNAVAILABLE_NV 0x9369 #define GL_FONT_UNAVAILABLE_NV 0x936A #define GL_FONT_UNINTELLIGIBLE_NV 0x936B #define GL_CONIC_CURVE_TO_NV 0x1A #define GL_RELATIVE_CONIC_CURVE_TO_NV 0x1B #define GL_FONT_NUM_GLYPH_INDICES_BIT_NV 0x20000000 #define GL_STANDARD_FONT_FORMAT_NV 0x936C #define GL_PATH_PROJECTION_NV 0x1701 #define GL_PATH_MODELVIEW_NV 0x1700 #define GL_PATH_MODELVIEW_STACK_DEPTH_NV 0x0BA3 #define GL_PATH_MODELVIEW_MATRIX_NV 0x0BA6 #define GL_PATH_MAX_MODELVIEW_STACK_DEPTH_NV 0x0D36 #define GL_PATH_TRANSPOSE_MODELVIEW_MATRIX_NV 0x84E3 #define GL_PATH_PROJECTION_STACK_DEPTH_NV 0x0BA4 #define GL_PATH_PROJECTION_MATRIX_NV 0x0BA7 #define GL_PATH_MAX_PROJECTION_STACK_DEPTH_NV 0x0D38 #define GL_PATH_TRANSPOSE_PROJECTION_MATRIX_NV 0x84E4 #define GL_FRAGMENT_INPUT_NV 0x936D typedef GLuint (GL_APIENTRYP PFNGLGENPATHSNVPROC) (GLsizei range); typedef void (GL_APIENTRYP PFNGLDELETEPATHSNVPROC) (GLuint path, GLsizei range); typedef GLboolean (GL_APIENTRYP PFNGLISPATHNVPROC) (GLuint path); typedef void (GL_APIENTRYP PFNGLPATHCOMMANDSNVPROC) (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); typedef void (GL_APIENTRYP PFNGLPATHCOORDSNVPROC) (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); typedef void (GL_APIENTRYP PFNGLPATHSUBCOMMANDSNVPROC) (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); typedef void (GL_APIENTRYP PFNGLPATHSUBCOORDSNVPROC) (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); typedef void (GL_APIENTRYP PFNGLPATHSTRINGNVPROC) (GLuint path, GLenum format, GLsizei length, const void *pathString); typedef void (GL_APIENTRYP PFNGLPATHGLYPHSNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); typedef void (GL_APIENTRYP PFNGLPATHGLYPHRANGENVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); typedef void (GL_APIENTRYP PFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); typedef void (GL_APIENTRYP PFNGLCOPYPATHNVPROC) (GLuint resultPath, GLuint srcPath); typedef void (GL_APIENTRYP PFNGLINTERPOLATEPATHSNVPROC) (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); typedef void (GL_APIENTRYP PFNGLTRANSFORMPATHNVPROC) (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); typedef void (GL_APIENTRYP PFNGLPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, const GLint *value); typedef void (GL_APIENTRYP PFNGLPATHPARAMETERINVPROC) (GLuint path, GLenum pname, GLint value); typedef void (GL_APIENTRYP PFNGLPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, const GLfloat *value); typedef void (GL_APIENTRYP PFNGLPATHPARAMETERFNVPROC) (GLuint path, GLenum pname, GLfloat value); typedef void (GL_APIENTRYP PFNGLPATHDASHARRAYNVPROC) (GLuint path, GLsizei dashCount, const GLfloat *dashArray); typedef void (GL_APIENTRYP PFNGLPATHSTENCILFUNCNVPROC) (GLenum func, GLint ref, GLuint mask); typedef void (GL_APIENTRYP PFNGLPATHSTENCILDEPTHOFFSETNVPROC) (GLfloat factor, GLfloat units); typedef void (GL_APIENTRYP PFNGLSTENCILFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask); typedef void (GL_APIENTRYP PFNGLSTENCILSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask); typedef void (GL_APIENTRYP PFNGLSTENCILFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); typedef void (GL_APIENTRYP PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); typedef void (GL_APIENTRYP PFNGLPATHCOVERDEPTHFUNCNVPROC) (GLenum func); typedef void (GL_APIENTRYP PFNGLCOVERFILLPATHNVPROC) (GLuint path, GLenum coverMode); typedef void (GL_APIENTRYP PFNGLCOVERSTROKEPATHNVPROC) (GLuint path, GLenum coverMode); typedef void (GL_APIENTRYP PFNGLCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); typedef void (GL_APIENTRYP PFNGLCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); typedef void (GL_APIENTRYP PFNGLGETPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, GLint *value); typedef void (GL_APIENTRYP PFNGLGETPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, GLfloat *value); typedef void (GL_APIENTRYP PFNGLGETPATHCOMMANDSNVPROC) (GLuint path, GLubyte *commands); typedef void (GL_APIENTRYP PFNGLGETPATHCOORDSNVPROC) (GLuint path, GLfloat *coords); typedef void (GL_APIENTRYP PFNGLGETPATHDASHARRAYNVPROC) (GLuint path, GLfloat *dashArray); typedef void (GL_APIENTRYP PFNGLGETPATHMETRICSNVPROC) (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); typedef void (GL_APIENTRYP PFNGLGETPATHMETRICRANGENVPROC) (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); typedef void (GL_APIENTRYP PFNGLGETPATHSPACINGNVPROC) (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); typedef GLboolean (GL_APIENTRYP PFNGLISPOINTINFILLPATHNVPROC) (GLuint path, GLuint mask, GLfloat x, GLfloat y); typedef GLboolean (GL_APIENTRYP PFNGLISPOINTINSTROKEPATHNVPROC) (GLuint path, GLfloat x, GLfloat y); typedef GLfloat (GL_APIENTRYP PFNGLGETPATHLENGTHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments); typedef GLboolean (GL_APIENTRYP PFNGLPOINTALONGPATHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); typedef void (GL_APIENTRYP PFNGLMATRIXLOAD3X2FNVPROC) (GLenum matrixMode, const GLfloat *m); typedef void (GL_APIENTRYP PFNGLMATRIXLOAD3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); typedef void (GL_APIENTRYP PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); typedef void (GL_APIENTRYP PFNGLMATRIXMULT3X2FNVPROC) (GLenum matrixMode, const GLfloat *m); typedef void (GL_APIENTRYP PFNGLMATRIXMULT3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); typedef void (GL_APIENTRYP PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); typedef void (GL_APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode); typedef void (GL_APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask, GLenum coverMode); typedef void (GL_APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); typedef void (GL_APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); typedef GLenum (GL_APIENTRYP PFNGLPATHGLYPHINDEXRANGENVPROC) (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint *baseAndCount); typedef GLenum (GL_APIENTRYP PFNGLPATHGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); typedef GLenum (GL_APIENTRYP PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); typedef void (GL_APIENTRYP PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC) (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs); typedef void (GL_APIENTRYP PFNGLGETPROGRAMRESOURCEFVNVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei count, GLsizei *length, GLfloat *params); typedef void (GL_APIENTRYP PFNGLMATRIXFRUSTUMEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); typedef void (GL_APIENTRYP PFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum mode); typedef void (GL_APIENTRYP PFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); typedef void (GL_APIENTRYP PFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); typedef void (GL_APIENTRYP PFNGLMATRIXLOADFEXTPROC) (GLenum mode, const GLfloat *m); typedef void (GL_APIENTRYP PFNGLMATRIXLOADDEXTPROC) (GLenum mode, const GLdouble *m); typedef void (GL_APIENTRYP PFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); typedef void (GL_APIENTRYP PFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); typedef void (GL_APIENTRYP PFNGLMATRIXMULTFEXTPROC) (GLenum mode, const GLfloat *m); typedef void (GL_APIENTRYP PFNGLMATRIXMULTDEXTPROC) (GLenum mode, const GLdouble *m); typedef void (GL_APIENTRYP PFNGLMATRIXORTHOEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); typedef void (GL_APIENTRYP PFNGLMATRIXPOPEXTPROC) (GLenum mode); typedef void (GL_APIENTRYP PFNGLMATRIXPUSHEXTPROC) (GLenum mode); typedef void (GL_APIENTRYP PFNGLMATRIXROTATEFEXTPROC) (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); typedef void (GL_APIENTRYP PFNGLMATRIXROTATEDEXTPROC) (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); typedef void (GL_APIENTRYP PFNGLMATRIXSCALEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); typedef void (GL_APIENTRYP PFNGLMATRIXSCALEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); typedef void (GL_APIENTRYP PFNGLMATRIXTRANSLATEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); typedef void (GL_APIENTRYP PFNGLMATRIXTRANSLATEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL GLuint GL_APIENTRY glGenPathsNV (GLsizei range); GL_APICALL void GL_APIENTRY glDeletePathsNV (GLuint path, GLsizei range); GL_APICALL GLboolean GL_APIENTRY glIsPathNV (GLuint path); GL_APICALL void GL_APIENTRY glPathCommandsNV (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); GL_APICALL void GL_APIENTRY glPathCoordsNV (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); GL_APICALL void GL_APIENTRY glPathSubCommandsNV (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); GL_APICALL void GL_APIENTRY glPathSubCoordsNV (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); GL_APICALL void GL_APIENTRY glPathStringNV (GLuint path, GLenum format, GLsizei length, const void *pathString); GL_APICALL void GL_APIENTRY glPathGlyphsNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); GL_APICALL void GL_APIENTRY glPathGlyphRangeNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); GL_APICALL void GL_APIENTRY glWeightPathsNV (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); GL_APICALL void GL_APIENTRY glCopyPathNV (GLuint resultPath, GLuint srcPath); GL_APICALL void GL_APIENTRY glInterpolatePathsNV (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); GL_APICALL void GL_APIENTRY glTransformPathNV (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); GL_APICALL void GL_APIENTRY glPathParameterivNV (GLuint path, GLenum pname, const GLint *value); GL_APICALL void GL_APIENTRY glPathParameteriNV (GLuint path, GLenum pname, GLint value); GL_APICALL void GL_APIENTRY glPathParameterfvNV (GLuint path, GLenum pname, const GLfloat *value); GL_APICALL void GL_APIENTRY glPathParameterfNV (GLuint path, GLenum pname, GLfloat value); GL_APICALL void GL_APIENTRY glPathDashArrayNV (GLuint path, GLsizei dashCount, const GLfloat *dashArray); GL_APICALL void GL_APIENTRY glPathStencilFuncNV (GLenum func, GLint ref, GLuint mask); GL_APICALL void GL_APIENTRY glPathStencilDepthOffsetNV (GLfloat factor, GLfloat units); GL_APICALL void GL_APIENTRY glStencilFillPathNV (GLuint path, GLenum fillMode, GLuint mask); GL_APICALL void GL_APIENTRY glStencilStrokePathNV (GLuint path, GLint reference, GLuint mask); GL_APICALL void GL_APIENTRY glStencilFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); GL_APICALL void GL_APIENTRY glStencilStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); GL_APICALL void GL_APIENTRY glPathCoverDepthFuncNV (GLenum func); GL_APICALL void GL_APIENTRY glCoverFillPathNV (GLuint path, GLenum coverMode); GL_APICALL void GL_APIENTRY glCoverStrokePathNV (GLuint path, GLenum coverMode); GL_APICALL void GL_APIENTRY glCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); GL_APICALL void GL_APIENTRY glCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); GL_APICALL void GL_APIENTRY glGetPathParameterivNV (GLuint path, GLenum pname, GLint *value); GL_APICALL void GL_APIENTRY glGetPathParameterfvNV (GLuint path, GLenum pname, GLfloat *value); GL_APICALL void GL_APIENTRY glGetPathCommandsNV (GLuint path, GLubyte *commands); GL_APICALL void GL_APIENTRY glGetPathCoordsNV (GLuint path, GLfloat *coords); GL_APICALL void GL_APIENTRY glGetPathDashArrayNV (GLuint path, GLfloat *dashArray); GL_APICALL void GL_APIENTRY glGetPathMetricsNV (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); GL_APICALL void GL_APIENTRY glGetPathMetricRangeNV (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); GL_APICALL void GL_APIENTRY glGetPathSpacingNV (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); GL_APICALL GLboolean GL_APIENTRY glIsPointInFillPathNV (GLuint path, GLuint mask, GLfloat x, GLfloat y); GL_APICALL GLboolean GL_APIENTRY glIsPointInStrokePathNV (GLuint path, GLfloat x, GLfloat y); GL_APICALL GLfloat GL_APIENTRY glGetPathLengthNV (GLuint path, GLsizei startSegment, GLsizei numSegments); GL_APICALL GLboolean GL_APIENTRY glPointAlongPathNV (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); GL_APICALL void GL_APIENTRY glMatrixLoad3x2fNV (GLenum matrixMode, const GLfloat *m); GL_APICALL void GL_APIENTRY glMatrixLoad3x3fNV (GLenum matrixMode, const GLfloat *m); GL_APICALL void GL_APIENTRY glMatrixLoadTranspose3x3fNV (GLenum matrixMode, const GLfloat *m); GL_APICALL void GL_APIENTRY glMatrixMult3x2fNV (GLenum matrixMode, const GLfloat *m); GL_APICALL void GL_APIENTRY glMatrixMult3x3fNV (GLenum matrixMode, const GLfloat *m); GL_APICALL void GL_APIENTRY glMatrixMultTranspose3x3fNV (GLenum matrixMode, const GLfloat *m); GL_APICALL void GL_APIENTRY glStencilThenCoverFillPathNV (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode); GL_APICALL void GL_APIENTRY glStencilThenCoverStrokePathNV (GLuint path, GLint reference, GLuint mask, GLenum coverMode); GL_APICALL void GL_APIENTRY glStencilThenCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); GL_APICALL void GL_APIENTRY glStencilThenCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); GL_APICALL GLenum GL_APIENTRY glPathGlyphIndexRangeNV (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint *baseAndCount); GL_APICALL GLenum GL_APIENTRY glPathGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); GL_APICALL GLenum GL_APIENTRY glPathMemoryGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); GL_APICALL void GL_APIENTRY glProgramPathFragmentInputGenNV (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs); GL_APICALL void GL_APIENTRY glGetProgramResourcefvNV (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei count, GLsizei *length, GLfloat *params); GL_APICALL void GL_APIENTRY glMatrixFrustumEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); GL_APICALL void GL_APIENTRY glMatrixLoadIdentityEXT (GLenum mode); GL_APICALL void GL_APIENTRY glMatrixLoadTransposefEXT (GLenum mode, const GLfloat *m); GL_APICALL void GL_APIENTRY glMatrixLoadTransposedEXT (GLenum mode, const GLdouble *m); GL_APICALL void GL_APIENTRY glMatrixLoadfEXT (GLenum mode, const GLfloat *m); GL_APICALL void GL_APIENTRY glMatrixLoaddEXT (GLenum mode, const GLdouble *m); GL_APICALL void GL_APIENTRY glMatrixMultTransposefEXT (GLenum mode, const GLfloat *m); GL_APICALL void GL_APIENTRY glMatrixMultTransposedEXT (GLenum mode, const GLdouble *m); GL_APICALL void GL_APIENTRY glMatrixMultfEXT (GLenum mode, const GLfloat *m); GL_APICALL void GL_APIENTRY glMatrixMultdEXT (GLenum mode, const GLdouble *m); GL_APICALL void GL_APIENTRY glMatrixOrthoEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); GL_APICALL void GL_APIENTRY glMatrixPopEXT (GLenum mode); GL_APICALL void GL_APIENTRY glMatrixPushEXT (GLenum mode); GL_APICALL void GL_APIENTRY glMatrixRotatefEXT (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); GL_APICALL void GL_APIENTRY glMatrixRotatedEXT (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); GL_APICALL void GL_APIENTRY glMatrixScalefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); GL_APICALL void GL_APIENTRY glMatrixScaledEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); GL_APICALL void GL_APIENTRY glMatrixTranslatefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); GL_APICALL void GL_APIENTRY glMatrixTranslatedEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); #endif #endif /* GL_NV_path_rendering */ #ifndef GL_NV_path_rendering_shared_edge #define GL_NV_path_rendering_shared_edge 1 #define GL_SHARED_EDGE_NV 0xC0 #endif /* GL_NV_path_rendering_shared_edge */ #ifndef GL_NV_pixel_buffer_object #define GL_NV_pixel_buffer_object 1 #define GL_PIXEL_PACK_BUFFER_NV 0x88EB #define GL_PIXEL_UNPACK_BUFFER_NV 0x88EC #define GL_PIXEL_PACK_BUFFER_BINDING_NV 0x88ED #define GL_PIXEL_UNPACK_BUFFER_BINDING_NV 0x88EF #endif /* GL_NV_pixel_buffer_object */ #ifndef GL_NV_polygon_mode #define GL_NV_polygon_mode 1 #define GL_POLYGON_MODE_NV 0x0B40 #define GL_POLYGON_OFFSET_POINT_NV 0x2A01 #define GL_POLYGON_OFFSET_LINE_NV 0x2A02 #define GL_POINT_NV 0x1B00 #define GL_LINE_NV 0x1B01 #define GL_FILL_NV 0x1B02 typedef void (GL_APIENTRYP PFNGLPOLYGONMODENVPROC) (GLenum face, GLenum mode); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glPolygonModeNV (GLenum face, GLenum mode); #endif #endif /* GL_NV_polygon_mode */ #ifndef GL_NV_primitive_shading_rate #define GL_NV_primitive_shading_rate 1 #define GL_SHADING_RATE_IMAGE_PER_PRIMITIVE_NV 0x95B1 #define GL_SHADING_RATE_IMAGE_PALETTE_COUNT_NV 0x95B2 #endif /* GL_NV_primitive_shading_rate */ #ifndef GL_NV_read_buffer #define GL_NV_read_buffer 1 #define GL_READ_BUFFER_NV 0x0C02 typedef void (GL_APIENTRYP PFNGLREADBUFFERNVPROC) (GLenum mode); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glReadBufferNV (GLenum mode); #endif #endif /* GL_NV_read_buffer */ #ifndef GL_NV_read_buffer_front #define GL_NV_read_buffer_front 1 #endif /* GL_NV_read_buffer_front */ #ifndef GL_NV_read_depth #define GL_NV_read_depth 1 #endif /* GL_NV_read_depth */ #ifndef GL_NV_read_depth_stencil #define GL_NV_read_depth_stencil 1 #endif /* GL_NV_read_depth_stencil */ #ifndef GL_NV_read_stencil #define GL_NV_read_stencil 1 #endif /* GL_NV_read_stencil */ #ifndef GL_NV_representative_fragment_test #define GL_NV_representative_fragment_test 1 #define GL_REPRESENTATIVE_FRAGMENT_TEST_NV 0x937F #endif /* GL_NV_representative_fragment_test */ #ifndef GL_NV_sRGB_formats #define GL_NV_sRGB_formats 1 #define GL_SLUMINANCE_NV 0x8C46 #define GL_SLUMINANCE_ALPHA_NV 0x8C44 #define GL_SRGB8_NV 0x8C41 #define GL_SLUMINANCE8_NV 0x8C47 #define GL_SLUMINANCE8_ALPHA8_NV 0x8C45 #define GL_COMPRESSED_SRGB_S3TC_DXT1_NV 0x8C4C #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_NV 0x8C4D #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_NV 0x8C4E #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_NV 0x8C4F #define GL_ETC1_SRGB8_NV 0x88EE #endif /* GL_NV_sRGB_formats */ #ifndef GL_NV_sample_locations #define GL_NV_sample_locations 1 #define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_NV 0x933D #define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_NV 0x933E #define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_NV 0x933F #define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_NV 0x9340 #define GL_SAMPLE_LOCATION_NV 0x8E50 #define GL_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9341 #define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_NV 0x9342 #define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_NV 0x9343 typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLenum target, GLuint start, GLsizei count, const GLfloat *v); typedef void (GL_APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); typedef void (GL_APIENTRYP PFNGLRESOLVEDEPTHVALUESNVPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glFramebufferSampleLocationsfvNV (GLenum target, GLuint start, GLsizei count, const GLfloat *v); GL_APICALL void GL_APIENTRY glNamedFramebufferSampleLocationsfvNV (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); GL_APICALL void GL_APIENTRY glResolveDepthValuesNV (void); #endif #endif /* GL_NV_sample_locations */ #ifndef GL_NV_sample_mask_override_coverage #define GL_NV_sample_mask_override_coverage 1 #endif /* GL_NV_sample_mask_override_coverage */ #ifndef GL_NV_scissor_exclusive #define GL_NV_scissor_exclusive 1 #define GL_SCISSOR_TEST_EXCLUSIVE_NV 0x9555 #define GL_SCISSOR_BOX_EXCLUSIVE_NV 0x9556 typedef void (GL_APIENTRYP PFNGLSCISSOREXCLUSIVENVPROC) (GLint x, GLint y, GLsizei width, GLsizei height); typedef void (GL_APIENTRYP PFNGLSCISSOREXCLUSIVEARRAYVNVPROC) (GLuint first, GLsizei count, const GLint *v); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glScissorExclusiveNV (GLint x, GLint y, GLsizei width, GLsizei height); GL_APICALL void GL_APIENTRY glScissorExclusiveArrayvNV (GLuint first, GLsizei count, const GLint *v); #endif #endif /* GL_NV_scissor_exclusive */ #ifndef GL_NV_shader_atomic_fp16_vector #define GL_NV_shader_atomic_fp16_vector 1 #endif /* GL_NV_shader_atomic_fp16_vector */ #ifndef GL_NV_shader_noperspective_interpolation #define GL_NV_shader_noperspective_interpolation 1 #endif /* GL_NV_shader_noperspective_interpolation */ #ifndef GL_NV_shader_subgroup_partitioned #define GL_NV_shader_subgroup_partitioned 1 #define GL_SUBGROUP_FEATURE_PARTITIONED_BIT_NV 0x00000100 #endif /* GL_NV_shader_subgroup_partitioned */ #ifndef GL_NV_shader_texture_footprint #define GL_NV_shader_texture_footprint 1 #endif /* GL_NV_shader_texture_footprint */ #ifndef GL_NV_shading_rate_image #define GL_NV_shading_rate_image 1 #define GL_SHADING_RATE_IMAGE_NV 0x9563 #define GL_SHADING_RATE_NO_INVOCATIONS_NV 0x9564 #define GL_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV 0x9565 #define GL_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV 0x9566 #define GL_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV 0x9567 #define GL_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV 0x9568 #define GL_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV 0x9569 #define GL_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV 0x956A #define GL_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV 0x956B #define GL_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV 0x956C #define GL_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV 0x956D #define GL_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV 0x956E #define GL_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV 0x956F #define GL_SHADING_RATE_IMAGE_BINDING_NV 0x955B #define GL_SHADING_RATE_IMAGE_TEXEL_WIDTH_NV 0x955C #define GL_SHADING_RATE_IMAGE_TEXEL_HEIGHT_NV 0x955D #define GL_SHADING_RATE_IMAGE_PALETTE_SIZE_NV 0x955E #define GL_MAX_COARSE_FRAGMENT_SAMPLES_NV 0x955F #define GL_SHADING_RATE_SAMPLE_ORDER_DEFAULT_NV 0x95AE #define GL_SHADING_RATE_SAMPLE_ORDER_PIXEL_MAJOR_NV 0x95AF #define GL_SHADING_RATE_SAMPLE_ORDER_SAMPLE_MAJOR_NV 0x95B0 typedef void (GL_APIENTRYP PFNGLBINDSHADINGRATEIMAGENVPROC) (GLuint texture); typedef void (GL_APIENTRYP PFNGLGETSHADINGRATEIMAGEPALETTENVPROC) (GLuint viewport, GLuint entry, GLenum *rate); typedef void (GL_APIENTRYP PFNGLGETSHADINGRATESAMPLELOCATIONIVNVPROC) (GLenum rate, GLuint samples, GLuint index, GLint *location); typedef void (GL_APIENTRYP PFNGLSHADINGRATEIMAGEBARRIERNVPROC) (GLboolean synchronize); typedef void (GL_APIENTRYP PFNGLSHADINGRATEIMAGEPALETTENVPROC) (GLuint viewport, GLuint first, GLsizei count, const GLenum *rates); typedef void (GL_APIENTRYP PFNGLSHADINGRATESAMPLEORDERNVPROC) (GLenum order); typedef void (GL_APIENTRYP PFNGLSHADINGRATESAMPLEORDERCUSTOMNVPROC) (GLenum rate, GLuint samples, const GLint *locations); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glBindShadingRateImageNV (GLuint texture); GL_APICALL void GL_APIENTRY glGetShadingRateImagePaletteNV (GLuint viewport, GLuint entry, GLenum *rate); GL_APICALL void GL_APIENTRY glGetShadingRateSampleLocationivNV (GLenum rate, GLuint samples, GLuint index, GLint *location); GL_APICALL void GL_APIENTRY glShadingRateImageBarrierNV (GLboolean synchronize); GL_APICALL void GL_APIENTRY glShadingRateImagePaletteNV (GLuint viewport, GLuint first, GLsizei count, const GLenum *rates); GL_APICALL void GL_APIENTRY glShadingRateSampleOrderNV (GLenum order); GL_APICALL void GL_APIENTRY glShadingRateSampleOrderCustomNV (GLenum rate, GLuint samples, const GLint *locations); #endif #endif /* GL_NV_shading_rate_image */ #ifndef GL_NV_shadow_samplers_array #define GL_NV_shadow_samplers_array 1 #define GL_SAMPLER_2D_ARRAY_SHADOW_NV 0x8DC4 #endif /* GL_NV_shadow_samplers_array */ #ifndef GL_NV_shadow_samplers_cube #define GL_NV_shadow_samplers_cube 1 #define GL_SAMPLER_CUBE_SHADOW_NV 0x8DC5 #endif /* GL_NV_shadow_samplers_cube */ #ifndef GL_NV_stereo_view_rendering #define GL_NV_stereo_view_rendering 1 #endif /* GL_NV_stereo_view_rendering */ #ifndef GL_NV_texture_border_clamp #define GL_NV_texture_border_clamp 1 #define GL_TEXTURE_BORDER_COLOR_NV 0x1004 #define GL_CLAMP_TO_BORDER_NV 0x812D #endif /* GL_NV_texture_border_clamp */ #ifndef GL_NV_texture_compression_s3tc_update #define GL_NV_texture_compression_s3tc_update 1 #endif /* GL_NV_texture_compression_s3tc_update */ #ifndef GL_NV_texture_npot_2D_mipmap #define GL_NV_texture_npot_2D_mipmap 1 #endif /* GL_NV_texture_npot_2D_mipmap */ #ifndef GL_NV_timeline_semaphore #define GL_NV_timeline_semaphore 1 #define GL_TIMELINE_SEMAPHORE_VALUE_NV 0x9595 #define GL_SEMAPHORE_TYPE_NV 0x95B3 #define GL_SEMAPHORE_TYPE_BINARY_NV 0x95B4 #define GL_SEMAPHORE_TYPE_TIMELINE_NV 0x95B5 #define GL_MAX_TIMELINE_SEMAPHORE_VALUE_DIFFERENCE_NV 0x95B6 typedef void (GL_APIENTRYP PFNGLCREATESEMAPHORESNVPROC) (GLsizei n, GLuint *semaphores); typedef void (GL_APIENTRYP PFNGLSEMAPHOREPARAMETERIVNVPROC) (GLuint semaphore, GLenum pname, const GLint *params); typedef void (GL_APIENTRYP PFNGLGETSEMAPHOREPARAMETERIVNVPROC) (GLuint semaphore, GLenum pname, GLint *params); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glCreateSemaphoresNV (GLsizei n, GLuint *semaphores); GL_APICALL void GL_APIENTRY glSemaphoreParameterivNV (GLuint semaphore, GLenum pname, const GLint *params); GL_APICALL void GL_APIENTRY glGetSemaphoreParameterivNV (GLuint semaphore, GLenum pname, GLint *params); #endif #endif /* GL_NV_timeline_semaphore */ #ifndef GL_NV_viewport_array #define GL_NV_viewport_array 1 #define GL_MAX_VIEWPORTS_NV 0x825B #define GL_VIEWPORT_SUBPIXEL_BITS_NV 0x825C #define GL_VIEWPORT_BOUNDS_RANGE_NV 0x825D #define GL_VIEWPORT_INDEX_PROVOKING_VERTEX_NV 0x825F typedef void (GL_APIENTRYP PFNGLVIEWPORTARRAYVNVPROC) (GLuint first, GLsizei count, const GLfloat *v); typedef void (GL_APIENTRYP PFNGLVIEWPORTINDEXEDFNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); typedef void (GL_APIENTRYP PFNGLVIEWPORTINDEXEDFVNVPROC) (GLuint index, const GLfloat *v); typedef void (GL_APIENTRYP PFNGLSCISSORARRAYVNVPROC) (GLuint first, GLsizei count, const GLint *v); typedef void (GL_APIENTRYP PFNGLSCISSORINDEXEDNVPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); typedef void (GL_APIENTRYP PFNGLSCISSORINDEXEDVNVPROC) (GLuint index, const GLint *v); typedef void (GL_APIENTRYP PFNGLDEPTHRANGEARRAYFVNVPROC) (GLuint first, GLsizei count, const GLfloat *v); typedef void (GL_APIENTRYP PFNGLDEPTHRANGEINDEXEDFNVPROC) (GLuint index, GLfloat n, GLfloat f); typedef void (GL_APIENTRYP PFNGLGETFLOATI_VNVPROC) (GLenum target, GLuint index, GLfloat *data); typedef void (GL_APIENTRYP PFNGLENABLEINVPROC) (GLenum target, GLuint index); typedef void (GL_APIENTRYP PFNGLDISABLEINVPROC) (GLenum target, GLuint index); typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDINVPROC) (GLenum target, GLuint index); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glViewportArrayvNV (GLuint first, GLsizei count, const GLfloat *v); GL_APICALL void GL_APIENTRY glViewportIndexedfNV (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); GL_APICALL void GL_APIENTRY glViewportIndexedfvNV (GLuint index, const GLfloat *v); GL_APICALL void GL_APIENTRY glScissorArrayvNV (GLuint first, GLsizei count, const GLint *v); GL_APICALL void GL_APIENTRY glScissorIndexedNV (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); GL_APICALL void GL_APIENTRY glScissorIndexedvNV (GLuint index, const GLint *v); GL_APICALL void GL_APIENTRY glDepthRangeArrayfvNV (GLuint first, GLsizei count, const GLfloat *v); GL_APICALL void GL_APIENTRY glDepthRangeIndexedfNV (GLuint index, GLfloat n, GLfloat f); GL_APICALL void GL_APIENTRY glGetFloati_vNV (GLenum target, GLuint index, GLfloat *data); GL_APICALL void GL_APIENTRY glEnableiNV (GLenum target, GLuint index); GL_APICALL void GL_APIENTRY glDisableiNV (GLenum target, GLuint index); GL_APICALL GLboolean GL_APIENTRY glIsEnablediNV (GLenum target, GLuint index); #endif #endif /* GL_NV_viewport_array */ #ifndef GL_NV_viewport_array2 #define GL_NV_viewport_array2 1 #endif /* GL_NV_viewport_array2 */ #ifndef GL_NV_viewport_swizzle #define GL_NV_viewport_swizzle 1 #define GL_VIEWPORT_SWIZZLE_POSITIVE_X_NV 0x9350 #define GL_VIEWPORT_SWIZZLE_NEGATIVE_X_NV 0x9351 #define GL_VIEWPORT_SWIZZLE_POSITIVE_Y_NV 0x9352 #define GL_VIEWPORT_SWIZZLE_NEGATIVE_Y_NV 0x9353 #define GL_VIEWPORT_SWIZZLE_POSITIVE_Z_NV 0x9354 #define GL_VIEWPORT_SWIZZLE_NEGATIVE_Z_NV 0x9355 #define GL_VIEWPORT_SWIZZLE_POSITIVE_W_NV 0x9356 #define GL_VIEWPORT_SWIZZLE_NEGATIVE_W_NV 0x9357 #define GL_VIEWPORT_SWIZZLE_X_NV 0x9358 #define GL_VIEWPORT_SWIZZLE_Y_NV 0x9359 #define GL_VIEWPORT_SWIZZLE_Z_NV 0x935A #define GL_VIEWPORT_SWIZZLE_W_NV 0x935B typedef void (GL_APIENTRYP PFNGLVIEWPORTSWIZZLENVPROC) (GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glViewportSwizzleNV (GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew); #endif #endif /* GL_NV_viewport_swizzle */ #ifndef GL_OVR_multiview #define GL_OVR_multiview 1 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR 0x9630 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR 0x9632 #define GL_MAX_VIEWS_OVR 0x9631 #define GL_FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR 0x9633 typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glFramebufferTextureMultiviewOVR (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews); #endif #endif /* GL_OVR_multiview */ #ifndef GL_OVR_multiview2 #define GL_OVR_multiview2 1 #endif /* GL_OVR_multiview2 */ #ifndef GL_OVR_multiview_multisampled_render_to_texture #define GL_OVR_multiview_multisampled_render_to_texture 1 typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTUREMULTISAMPLEMULTIVIEWOVRPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLsizei samples, GLint baseViewIndex, GLsizei numViews); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glFramebufferTextureMultisampleMultiviewOVR (GLenum target, GLenum attachment, GLuint texture, GLint level, GLsizei samples, GLint baseViewIndex, GLsizei numViews); #endif #endif /* GL_OVR_multiview_multisampled_render_to_texture */ #ifndef GL_QCOM_YUV_texture_gather #define GL_QCOM_YUV_texture_gather 1 #endif /* GL_QCOM_YUV_texture_gather */ #ifndef GL_QCOM_alpha_test #define GL_QCOM_alpha_test 1 #define GL_ALPHA_TEST_QCOM 0x0BC0 #define GL_ALPHA_TEST_FUNC_QCOM 0x0BC1 #define GL_ALPHA_TEST_REF_QCOM 0x0BC2 typedef void (GL_APIENTRYP PFNGLALPHAFUNCQCOMPROC) (GLenum func, GLclampf ref); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glAlphaFuncQCOM (GLenum func, GLclampf ref); #endif #endif /* GL_QCOM_alpha_test */ #ifndef GL_QCOM_binning_control #define GL_QCOM_binning_control 1 #define GL_BINNING_CONTROL_HINT_QCOM 0x8FB0 #define GL_CPU_OPTIMIZED_QCOM 0x8FB1 #define GL_GPU_OPTIMIZED_QCOM 0x8FB2 #define GL_RENDER_DIRECT_TO_FRAMEBUFFER_QCOM 0x8FB3 #endif /* GL_QCOM_binning_control */ #ifndef GL_QCOM_driver_control #define GL_QCOM_driver_control 1 typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSQCOMPROC) (GLint *num, GLsizei size, GLuint *driverControls); typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSTRINGQCOMPROC) (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString); typedef void (GL_APIENTRYP PFNGLENABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl); typedef void (GL_APIENTRYP PFNGLDISABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glGetDriverControlsQCOM (GLint *num, GLsizei size, GLuint *driverControls); GL_APICALL void GL_APIENTRY glGetDriverControlStringQCOM (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString); GL_APICALL void GL_APIENTRY glEnableDriverControlQCOM (GLuint driverControl); GL_APICALL void GL_APIENTRY glDisableDriverControlQCOM (GLuint driverControl); #endif #endif /* GL_QCOM_driver_control */ #ifndef GL_QCOM_extended_get #define GL_QCOM_extended_get 1 #define GL_TEXTURE_WIDTH_QCOM 0x8BD2 #define GL_TEXTURE_HEIGHT_QCOM 0x8BD3 #define GL_TEXTURE_DEPTH_QCOM 0x8BD4 #define GL_TEXTURE_INTERNAL_FORMAT_QCOM 0x8BD5 #define GL_TEXTURE_FORMAT_QCOM 0x8BD6 #define GL_TEXTURE_TYPE_QCOM 0x8BD7 #define GL_TEXTURE_IMAGE_VALID_QCOM 0x8BD8 #define GL_TEXTURE_NUM_LEVELS_QCOM 0x8BD9 #define GL_TEXTURE_TARGET_QCOM 0x8BDA #define GL_TEXTURE_OBJECT_VALID_QCOM 0x8BDB #define GL_STATE_RESTORE 0x8BDC typedef void (GL_APIENTRYP PFNGLEXTGETTEXTURESQCOMPROC) (GLuint *textures, GLint maxTextures, GLint *numTextures); typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERSQCOMPROC) (GLuint *buffers, GLint maxBuffers, GLint *numBuffers); typedef void (GL_APIENTRYP PFNGLEXTGETRENDERBUFFERSQCOMPROC) (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers); typedef void (GL_APIENTRYP PFNGLEXTGETFRAMEBUFFERSQCOMPROC) (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers); typedef void (GL_APIENTRYP PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC) (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params); typedef void (GL_APIENTRYP PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC) (GLenum target, GLenum pname, GLint param); typedef void (GL_APIENTRYP PFNGLEXTGETTEXSUBIMAGEQCOMPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, void *texels); typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERPOINTERVQCOMPROC) (GLenum target, void **params); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glExtGetTexturesQCOM (GLuint *textures, GLint maxTextures, GLint *numTextures); GL_APICALL void GL_APIENTRY glExtGetBuffersQCOM (GLuint *buffers, GLint maxBuffers, GLint *numBuffers); GL_APICALL void GL_APIENTRY glExtGetRenderbuffersQCOM (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers); GL_APICALL void GL_APIENTRY glExtGetFramebuffersQCOM (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers); GL_APICALL void GL_APIENTRY glExtGetTexLevelParameterivQCOM (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params); GL_APICALL void GL_APIENTRY glExtTexObjectStateOverrideiQCOM (GLenum target, GLenum pname, GLint param); GL_APICALL void GL_APIENTRY glExtGetTexSubImageQCOM (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, void *texels); GL_APICALL void GL_APIENTRY glExtGetBufferPointervQCOM (GLenum target, void **params); #endif #endif /* GL_QCOM_extended_get */ #ifndef GL_QCOM_extended_get2 #define GL_QCOM_extended_get2 1 typedef void (GL_APIENTRYP PFNGLEXTGETSHADERSQCOMPROC) (GLuint *shaders, GLint maxShaders, GLint *numShaders); typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMSQCOMPROC) (GLuint *programs, GLint maxPrograms, GLint *numPrograms); typedef GLboolean (GL_APIENTRYP PFNGLEXTISPROGRAMBINARYQCOMPROC) (GLuint program); typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC) (GLuint program, GLenum shadertype, GLchar *source, GLint *length); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glExtGetShadersQCOM (GLuint *shaders, GLint maxShaders, GLint *numShaders); GL_APICALL void GL_APIENTRY glExtGetProgramsQCOM (GLuint *programs, GLint maxPrograms, GLint *numPrograms); GL_APICALL GLboolean GL_APIENTRY glExtIsProgramBinaryQCOM (GLuint program); GL_APICALL void GL_APIENTRY glExtGetProgramBinarySourceQCOM (GLuint program, GLenum shadertype, GLchar *source, GLint *length); #endif #endif /* GL_QCOM_extended_get2 */ #ifndef GL_QCOM_frame_extrapolation #define GL_QCOM_frame_extrapolation 1 typedef void (GL_APIENTRYP PFNGLEXTRAPOLATETEX2DQCOMPROC) (GLuint src1, GLuint src2, GLuint output, GLfloat scaleFactor); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glExtrapolateTex2DQCOM (GLuint src1, GLuint src2, GLuint output, GLfloat scaleFactor); #endif #endif /* GL_QCOM_frame_extrapolation */ #ifndef GL_QCOM_framebuffer_foveated #define GL_QCOM_framebuffer_foveated 1 #define GL_FOVEATION_ENABLE_BIT_QCOM 0x00000001 #define GL_FOVEATION_SCALED_BIN_METHOD_BIT_QCOM 0x00000002 typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERFOVEATIONCONFIGQCOMPROC) (GLuint framebuffer, GLuint numLayers, GLuint focalPointsPerLayer, GLuint requestedFeatures, GLuint *providedFeatures); typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERFOVEATIONPARAMETERSQCOMPROC) (GLuint framebuffer, GLuint layer, GLuint focalPoint, GLfloat focalX, GLfloat focalY, GLfloat gainX, GLfloat gainY, GLfloat foveaArea); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glFramebufferFoveationConfigQCOM (GLuint framebuffer, GLuint numLayers, GLuint focalPointsPerLayer, GLuint requestedFeatures, GLuint *providedFeatures); GL_APICALL void GL_APIENTRY glFramebufferFoveationParametersQCOM (GLuint framebuffer, GLuint layer, GLuint focalPoint, GLfloat focalX, GLfloat focalY, GLfloat gainX, GLfloat gainY, GLfloat foveaArea); #endif #endif /* GL_QCOM_framebuffer_foveated */ #ifndef GL_QCOM_motion_estimation #define GL_QCOM_motion_estimation 1 #define GL_MOTION_ESTIMATION_SEARCH_BLOCK_X_QCOM 0x8C90 #define GL_MOTION_ESTIMATION_SEARCH_BLOCK_Y_QCOM 0x8C91 typedef void (GL_APIENTRYP PFNGLTEXESTIMATEMOTIONQCOMPROC) (GLuint ref, GLuint target, GLuint output); typedef void (GL_APIENTRYP PFNGLTEXESTIMATEMOTIONREGIONSQCOMPROC) (GLuint ref, GLuint target, GLuint output, GLuint mask); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glTexEstimateMotionQCOM (GLuint ref, GLuint target, GLuint output); GL_APICALL void GL_APIENTRY glTexEstimateMotionRegionsQCOM (GLuint ref, GLuint target, GLuint output, GLuint mask); #endif #endif /* GL_QCOM_motion_estimation */ #ifndef GL_QCOM_perfmon_global_mode #define GL_QCOM_perfmon_global_mode 1 #define GL_PERFMON_GLOBAL_MODE_QCOM 0x8FA0 #endif /* GL_QCOM_perfmon_global_mode */ #ifndef GL_QCOM_render_shared_exponent #define GL_QCOM_render_shared_exponent 1 #endif /* GL_QCOM_render_shared_exponent */ #ifndef GL_QCOM_shader_framebuffer_fetch_noncoherent #define GL_QCOM_shader_framebuffer_fetch_noncoherent 1 #define GL_FRAMEBUFFER_FETCH_NONCOHERENT_QCOM 0x96A2 typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERFETCHBARRIERQCOMPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glFramebufferFetchBarrierQCOM (void); #endif #endif /* GL_QCOM_shader_framebuffer_fetch_noncoherent */ #ifndef GL_QCOM_shader_framebuffer_fetch_rate #define GL_QCOM_shader_framebuffer_fetch_rate 1 #endif /* GL_QCOM_shader_framebuffer_fetch_rate */ #ifndef GL_QCOM_shading_rate #define GL_QCOM_shading_rate 1 #define GL_SHADING_RATE_QCOM 0x96A4 #define GL_SHADING_RATE_PRESERVE_ASPECT_RATIO_QCOM 0x96A5 #define GL_SHADING_RATE_1X1_PIXELS_QCOM 0x96A6 #define GL_SHADING_RATE_1X2_PIXELS_QCOM 0x96A7 #define GL_SHADING_RATE_2X1_PIXELS_QCOM 0x96A8 #define GL_SHADING_RATE_2X2_PIXELS_QCOM 0x96A9 #define GL_SHADING_RATE_4X2_PIXELS_QCOM 0x96AC #define GL_SHADING_RATE_4X4_PIXELS_QCOM 0x96AE typedef void (GL_APIENTRYP PFNGLSHADINGRATEQCOMPROC) (GLenum rate); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glShadingRateQCOM (GLenum rate); #endif #endif /* GL_QCOM_shading_rate */ #ifndef GL_QCOM_texture_foveated #define GL_QCOM_texture_foveated 1 #define GL_TEXTURE_FOVEATED_FEATURE_BITS_QCOM 0x8BFB #define GL_TEXTURE_FOVEATED_MIN_PIXEL_DENSITY_QCOM 0x8BFC #define GL_TEXTURE_FOVEATED_FEATURE_QUERY_QCOM 0x8BFD #define GL_TEXTURE_FOVEATED_NUM_FOCAL_POINTS_QUERY_QCOM 0x8BFE #define GL_FRAMEBUFFER_INCOMPLETE_FOVEATION_QCOM 0x8BFF typedef void (GL_APIENTRYP PFNGLTEXTUREFOVEATIONPARAMETERSQCOMPROC) (GLuint texture, GLuint layer, GLuint focalPoint, GLfloat focalX, GLfloat focalY, GLfloat gainX, GLfloat gainY, GLfloat foveaArea); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glTextureFoveationParametersQCOM (GLuint texture, GLuint layer, GLuint focalPoint, GLfloat focalX, GLfloat focalY, GLfloat gainX, GLfloat gainY, GLfloat foveaArea); #endif #endif /* GL_QCOM_texture_foveated */ #ifndef GL_QCOM_texture_foveated2 #define GL_QCOM_texture_foveated2 1 #define GL_TEXTURE_FOVEATED_CUTOFF_DENSITY_QCOM 0x96A0 #endif /* GL_QCOM_texture_foveated2 */ #ifndef GL_QCOM_texture_foveated_subsampled_layout #define GL_QCOM_texture_foveated_subsampled_layout 1 #define GL_FOVEATION_SUBSAMPLED_LAYOUT_METHOD_BIT_QCOM 0x00000004 #define GL_MAX_SHADER_SUBSAMPLED_IMAGE_UNITS_QCOM 0x8FA1 #endif /* GL_QCOM_texture_foveated_subsampled_layout */ #ifndef GL_QCOM_tiled_rendering #define GL_QCOM_tiled_rendering 1 #define GL_COLOR_BUFFER_BIT0_QCOM 0x00000001 #define GL_COLOR_BUFFER_BIT1_QCOM 0x00000002 #define GL_COLOR_BUFFER_BIT2_QCOM 0x00000004 #define GL_COLOR_BUFFER_BIT3_QCOM 0x00000008 #define GL_COLOR_BUFFER_BIT4_QCOM 0x00000010 #define GL_COLOR_BUFFER_BIT5_QCOM 0x00000020 #define GL_COLOR_BUFFER_BIT6_QCOM 0x00000040 #define GL_COLOR_BUFFER_BIT7_QCOM 0x00000080 #define GL_DEPTH_BUFFER_BIT0_QCOM 0x00000100 #define GL_DEPTH_BUFFER_BIT1_QCOM 0x00000200 #define GL_DEPTH_BUFFER_BIT2_QCOM 0x00000400 #define GL_DEPTH_BUFFER_BIT3_QCOM 0x00000800 #define GL_DEPTH_BUFFER_BIT4_QCOM 0x00001000 #define GL_DEPTH_BUFFER_BIT5_QCOM 0x00002000 #define GL_DEPTH_BUFFER_BIT6_QCOM 0x00004000 #define GL_DEPTH_BUFFER_BIT7_QCOM 0x00008000 #define GL_STENCIL_BUFFER_BIT0_QCOM 0x00010000 #define GL_STENCIL_BUFFER_BIT1_QCOM 0x00020000 #define GL_STENCIL_BUFFER_BIT2_QCOM 0x00040000 #define GL_STENCIL_BUFFER_BIT3_QCOM 0x00080000 #define GL_STENCIL_BUFFER_BIT4_QCOM 0x00100000 #define GL_STENCIL_BUFFER_BIT5_QCOM 0x00200000 #define GL_STENCIL_BUFFER_BIT6_QCOM 0x00400000 #define GL_STENCIL_BUFFER_BIT7_QCOM 0x00800000 #define GL_MULTISAMPLE_BUFFER_BIT0_QCOM 0x01000000 #define GL_MULTISAMPLE_BUFFER_BIT1_QCOM 0x02000000 #define GL_MULTISAMPLE_BUFFER_BIT2_QCOM 0x04000000 #define GL_MULTISAMPLE_BUFFER_BIT3_QCOM 0x08000000 #define GL_MULTISAMPLE_BUFFER_BIT4_QCOM 0x10000000 #define GL_MULTISAMPLE_BUFFER_BIT5_QCOM 0x20000000 #define GL_MULTISAMPLE_BUFFER_BIT6_QCOM 0x40000000 #define GL_MULTISAMPLE_BUFFER_BIT7_QCOM 0x80000000 typedef void (GL_APIENTRYP PFNGLSTARTTILINGQCOMPROC) (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); typedef void (GL_APIENTRYP PFNGLENDTILINGQCOMPROC) (GLbitfield preserveMask); #ifdef GL_GLEXT_PROTOTYPES GL_APICALL void GL_APIENTRY glStartTilingQCOM (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); GL_APICALL void GL_APIENTRY glEndTilingQCOM (GLbitfield preserveMask); #endif #endif /* GL_QCOM_tiled_rendering */ #ifndef GL_QCOM_writeonly_rendering #define GL_QCOM_writeonly_rendering 1 #define GL_WRITEONLY_RENDERING_QCOM 0x8823 #endif /* GL_QCOM_writeonly_rendering */ #ifndef GL_VIV_shader_binary #define GL_VIV_shader_binary 1 #define GL_SHADER_BINARY_VIV 0x8FC4 #endif /* GL_VIV_shader_binary */ #ifdef __cplusplus } #endif #endif ================================================ FILE: libraries/sdl2/SDL_opengles2_gl2platform.h ================================================ #ifndef __gl2platform_h_ #define __gl2platform_h_ /* ** Copyright 2017-2020 The Khronos Group Inc. ** SPDX-License-Identifier: Apache-2.0 */ /* Platform-specific types and definitions for OpenGL ES 2.X gl2.h * * Adopters may modify khrplatform.h and this file to suit their platform. * Please contribute modifications back to Khronos as pull requests on the * public github repository: * https://github.com/KhronosGroup/OpenGL-Registry */ /*#include */ #ifndef GL_APICALL #define GL_APICALL KHRONOS_APICALL #endif #ifndef GL_APIENTRY #define GL_APIENTRY KHRONOS_APIENTRY #endif #endif /* __gl2platform_h_ */ ================================================ FILE: libraries/sdl2/SDL_opengles2_khrplatform.h ================================================ #ifndef __khrplatform_h_ #define __khrplatform_h_ /* ** Copyright (c) 2008-2018 The Khronos Group Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and/or associated documentation files (the ** "Materials"), to deal in the Materials without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Materials, and to ** permit persons to whom the Materials are furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be included ** in all copies or substantial portions of the Materials. ** ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. */ /* Khronos platform-specific types and definitions. * * The master copy of khrplatform.h is maintained in the Khronos EGL * Registry repository at https://github.com/KhronosGroup/EGL-Registry * The last semantic modification to khrplatform.h was at commit ID: * 67a3e0864c2d75ea5287b9f3d2eb74a745936692 * * Adopters may modify this file to suit their platform. Adopters are * encouraged to submit platform specific modifications to the Khronos * group so that they can be included in future versions of this file. * Please submit changes by filing pull requests or issues on * the EGL Registry repository linked above. * * * See the Implementer's Guidelines for information about where this file * should be located on your system and for more details of its use: * http://www.khronos.org/registry/implementers_guide.pdf * * This file should be included as * #include * by Khronos client API header files that use its types and defines. * * The types in khrplatform.h should only be used to define API-specific types. * * Types defined in khrplatform.h: * khronos_int8_t signed 8 bit * khronos_uint8_t unsigned 8 bit * khronos_int16_t signed 16 bit * khronos_uint16_t unsigned 16 bit * khronos_int32_t signed 32 bit * khronos_uint32_t unsigned 32 bit * khronos_int64_t signed 64 bit * khronos_uint64_t unsigned 64 bit * khronos_intptr_t signed same number of bits as a pointer * khronos_uintptr_t unsigned same number of bits as a pointer * khronos_ssize_t signed size * khronos_usize_t unsigned size * khronos_float_t signed 32 bit floating point * khronos_time_ns_t unsigned 64 bit time in nanoseconds * khronos_utime_nanoseconds_t unsigned time interval or absolute time in * nanoseconds * khronos_stime_nanoseconds_t signed time interval in nanoseconds * khronos_boolean_enum_t enumerated boolean type. This should * only be used as a base type when a client API's boolean type is * an enum. Client APIs which use an integer or other type for * booleans cannot use this as the base type for their boolean. * * Tokens defined in khrplatform.h: * * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. * * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. * * Calling convention macros defined in this file: * KHRONOS_APICALL * KHRONOS_APIENTRY * KHRONOS_APIATTRIBUTES * * These may be used in function prototypes as: * * KHRONOS_APICALL void KHRONOS_APIENTRY funcname( * int arg1, * int arg2) KHRONOS_APIATTRIBUTES; */ #if defined(__SCITECH_SNAP__) && !defined(KHRONOS_STATIC) # define KHRONOS_STATIC 1 #endif /*------------------------------------------------------------------------- * Definition of KHRONOS_APICALL *------------------------------------------------------------------------- * This precedes the return type of the function in the function prototype. */ #if defined(KHRONOS_STATIC) /* If the preprocessor constant KHRONOS_STATIC is defined, make the * header compatible with static linking. */ # define KHRONOS_APICALL #elif defined(_WIN32) # define KHRONOS_APICALL __declspec(dllimport) #elif defined (__SYMBIAN32__) # define KHRONOS_APICALL IMPORT_C #elif defined(__ANDROID__) # define KHRONOS_APICALL __attribute__((visibility("default"))) #else # define KHRONOS_APICALL #endif /*------------------------------------------------------------------------- * Definition of KHRONOS_APIENTRY *------------------------------------------------------------------------- * This follows the return type of the function and precedes the function * name in the function prototype. */ #if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__) /* Win32 but not WinCE */ # define KHRONOS_APIENTRY __stdcall #else # define KHRONOS_APIENTRY #endif /*------------------------------------------------------------------------- * Definition of KHRONOS_APIATTRIBUTES *------------------------------------------------------------------------- * This follows the closing parenthesis of the function prototype arguments. */ #if defined (__ARMCC_2__) #define KHRONOS_APIATTRIBUTES __softfp #else #define KHRONOS_APIATTRIBUTES #endif /*------------------------------------------------------------------------- * basic type definitions *-----------------------------------------------------------------------*/ #if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) /* * Using */ #include typedef int32_t khronos_int32_t; typedef uint32_t khronos_uint32_t; typedef int64_t khronos_int64_t; typedef uint64_t khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 /* * To support platform where unsigned long cannot be used interchangeably with * inptr_t (e.g. CHERI-extended ISAs), we can use the stdint.h intptr_t. * Ideally, we could just use (u)intptr_t everywhere, but this could result in * ABI breakage if khronos_uintptr_t is changed from unsigned long to * unsigned long long or similar (this results in different C++ name mangling). * To avoid changes for existing platforms, we restrict usage of intptr_t to * platforms where the size of a pointer is larger than the size of long. */ #if defined(__SIZEOF_LONG__) && defined(__SIZEOF_POINTER__) #if __SIZEOF_POINTER__ > __SIZEOF_LONG__ #define KHRONOS_USE_INTPTR_T #endif #endif #elif defined(__VMS ) || defined(__sgi) /* * Using */ #include typedef int32_t khronos_int32_t; typedef uint32_t khronos_uint32_t; typedef int64_t khronos_int64_t; typedef uint64_t khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #elif defined(_WIN32) && !defined(__SCITECH_SNAP__) /* * Win32 */ typedef __int32 khronos_int32_t; typedef unsigned __int32 khronos_uint32_t; typedef __int64 khronos_int64_t; typedef unsigned __int64 khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #elif defined(__sun__) || defined(__digital__) /* * Sun or Digital */ typedef int khronos_int32_t; typedef unsigned int khronos_uint32_t; #if defined(__arch64__) || defined(_LP64) typedef long int khronos_int64_t; typedef unsigned long int khronos_uint64_t; #else typedef long long int khronos_int64_t; typedef unsigned long long int khronos_uint64_t; #endif /* __arch64__ */ #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #elif 0 /* * Hypothetical platform with no float or int64 support */ typedef int khronos_int32_t; typedef unsigned int khronos_uint32_t; #define KHRONOS_SUPPORT_INT64 0 #define KHRONOS_SUPPORT_FLOAT 0 #else /* * Generic fallback */ #include typedef int32_t khronos_int32_t; typedef uint32_t khronos_uint32_t; typedef int64_t khronos_int64_t; typedef uint64_t khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #endif /* * Types that are (so far) the same on all platforms */ typedef signed char khronos_int8_t; typedef unsigned char khronos_uint8_t; typedef signed short int khronos_int16_t; typedef unsigned short int khronos_uint16_t; /* * Types that differ between LLP64 and LP64 architectures - in LLP64, * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears * to be the only LLP64 architecture in current use. */ #ifdef KHRONOS_USE_INTPTR_T typedef intptr_t khronos_intptr_t; typedef uintptr_t khronos_uintptr_t; #elif defined(_WIN64) typedef signed long long int khronos_intptr_t; typedef unsigned long long int khronos_uintptr_t; #else typedef signed long int khronos_intptr_t; typedef unsigned long int khronos_uintptr_t; #endif #if defined(_WIN64) typedef signed long long int khronos_ssize_t; typedef unsigned long long int khronos_usize_t; #else typedef signed long int khronos_ssize_t; typedef unsigned long int khronos_usize_t; #endif #if KHRONOS_SUPPORT_FLOAT /* * Float type */ typedef float khronos_float_t; #endif #if KHRONOS_SUPPORT_INT64 /* Time types * * These types can be used to represent a time interval in nanoseconds or * an absolute Unadjusted System Time. Unadjusted System Time is the number * of nanoseconds since some arbitrary system event (e.g. since the last * time the system booted). The Unadjusted System Time is an unsigned * 64 bit value that wraps back to 0 every 584 years. Time intervals * may be either signed or unsigned. */ typedef khronos_uint64_t khronos_utime_nanoseconds_t; typedef khronos_int64_t khronos_stime_nanoseconds_t; #endif /* * Dummy value used to pad enum types to 32 bits. */ #ifndef KHRONOS_MAX_ENUM #define KHRONOS_MAX_ENUM 0x7FFFFFFF #endif /* * Enumerated boolean type * * Values other than zero should be considered to be true. Therefore * comparisons should not be made against KHRONOS_TRUE. */ typedef enum { KHRONOS_FALSE = 0, KHRONOS_TRUE = 1, KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM } khronos_boolean_enum_t; #endif /* __khrplatform_h_ */ ================================================ FILE: libraries/sdl2/SDL_pixels.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_pixels.h * * Header for the enumerated pixel format definitions. */ #ifndef SDL_pixels_h_ #define SDL_pixels_h_ #include "SDL_stdinc.h" #include "SDL_endian.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** * \name Transparency definitions * * These define alpha as the opacity of a surface. */ /* @{ */ #define SDL_ALPHA_OPAQUE 255 #define SDL_ALPHA_TRANSPARENT 0 /* @} */ /** Pixel type. */ typedef enum { SDL_PIXELTYPE_UNKNOWN, SDL_PIXELTYPE_INDEX1, SDL_PIXELTYPE_INDEX4, SDL_PIXELTYPE_INDEX8, SDL_PIXELTYPE_PACKED8, SDL_PIXELTYPE_PACKED16, SDL_PIXELTYPE_PACKED32, SDL_PIXELTYPE_ARRAYU8, SDL_PIXELTYPE_ARRAYU16, SDL_PIXELTYPE_ARRAYU32, SDL_PIXELTYPE_ARRAYF16, SDL_PIXELTYPE_ARRAYF32, /* This must be at the end of the list to avoid breaking the existing ABI */ SDL_PIXELTYPE_INDEX2 } SDL_PixelType; /** Bitmap pixel order, high bit -> low bit. */ typedef enum { SDL_BITMAPORDER_NONE, SDL_BITMAPORDER_4321, SDL_BITMAPORDER_1234 } SDL_BitmapOrder; /** Packed component order, high bit -> low bit. */ typedef enum { SDL_PACKEDORDER_NONE, SDL_PACKEDORDER_XRGB, SDL_PACKEDORDER_RGBX, SDL_PACKEDORDER_ARGB, SDL_PACKEDORDER_RGBA, SDL_PACKEDORDER_XBGR, SDL_PACKEDORDER_BGRX, SDL_PACKEDORDER_ABGR, SDL_PACKEDORDER_BGRA } SDL_PackedOrder; /** Array component order, low byte -> high byte. */ /* !!! FIXME: in 2.1, make these not overlap differently with !!! FIXME: SDL_PACKEDORDER_*, so we can simplify SDL_ISPIXELFORMAT_ALPHA */ typedef enum { SDL_ARRAYORDER_NONE, SDL_ARRAYORDER_RGB, SDL_ARRAYORDER_RGBA, SDL_ARRAYORDER_ARGB, SDL_ARRAYORDER_BGR, SDL_ARRAYORDER_BGRA, SDL_ARRAYORDER_ABGR } SDL_ArrayOrder; /** Packed component layout. */ typedef enum { SDL_PACKEDLAYOUT_NONE, SDL_PACKEDLAYOUT_332, SDL_PACKEDLAYOUT_4444, SDL_PACKEDLAYOUT_1555, SDL_PACKEDLAYOUT_5551, SDL_PACKEDLAYOUT_565, SDL_PACKEDLAYOUT_8888, SDL_PACKEDLAYOUT_2101010, SDL_PACKEDLAYOUT_1010102 } SDL_PackedLayout; #define SDL_DEFINE_PIXELFOURCC(A, B, C, D) SDL_FOURCC(A, B, C, D) #define SDL_DEFINE_PIXELFORMAT(type, order, layout, bits, bytes) \ ((1 << 28) | ((type) << 24) | ((order) << 20) | ((layout) << 16) | \ ((bits) << 8) | ((bytes) << 0)) #define SDL_PIXELFLAG(X) (((X) >> 28) & 0x0F) #define SDL_PIXELTYPE(X) (((X) >> 24) & 0x0F) #define SDL_PIXELORDER(X) (((X) >> 20) & 0x0F) #define SDL_PIXELLAYOUT(X) (((X) >> 16) & 0x0F) #define SDL_BITSPERPIXEL(X) (((X) >> 8) & 0xFF) #define SDL_BYTESPERPIXEL(X) \ (SDL_ISPIXELFORMAT_FOURCC(X) ? \ ((((X) == SDL_PIXELFORMAT_YUY2) || \ ((X) == SDL_PIXELFORMAT_UYVY) || \ ((X) == SDL_PIXELFORMAT_YVYU)) ? 2 : 1) : (((X) >> 0) & 0xFF)) #define SDL_ISPIXELFORMAT_INDEXED(format) \ (!SDL_ISPIXELFORMAT_FOURCC(format) && \ ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX1) || \ (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX2) || \ (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX4) || \ (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX8))) #define SDL_ISPIXELFORMAT_PACKED(format) \ (!SDL_ISPIXELFORMAT_FOURCC(format) && \ ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED8) || \ (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED16) || \ (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED32))) #define SDL_ISPIXELFORMAT_ARRAY(format) \ (!SDL_ISPIXELFORMAT_FOURCC(format) && \ ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU8) || \ (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU16) || \ (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU32) || \ (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF16) || \ (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF32))) #define SDL_ISPIXELFORMAT_ALPHA(format) \ ((SDL_ISPIXELFORMAT_PACKED(format) && \ ((SDL_PIXELORDER(format) == SDL_PACKEDORDER_ARGB) || \ (SDL_PIXELORDER(format) == SDL_PACKEDORDER_RGBA) || \ (SDL_PIXELORDER(format) == SDL_PACKEDORDER_ABGR) || \ (SDL_PIXELORDER(format) == SDL_PACKEDORDER_BGRA))) || \ (SDL_ISPIXELFORMAT_ARRAY(format) && \ ((SDL_PIXELORDER(format) == SDL_ARRAYORDER_ARGB) || \ (SDL_PIXELORDER(format) == SDL_ARRAYORDER_RGBA) || \ (SDL_PIXELORDER(format) == SDL_ARRAYORDER_ABGR) || \ (SDL_PIXELORDER(format) == SDL_ARRAYORDER_BGRA)))) /* The flag is set to 1 because 0x1? is not in the printable ASCII range */ #define SDL_ISPIXELFORMAT_FOURCC(format) \ ((format) && (SDL_PIXELFLAG(format) != 1)) /* Note: If you modify this list, update SDL_GetPixelFormatName() */ typedef enum { SDL_PIXELFORMAT_UNKNOWN, SDL_PIXELFORMAT_INDEX1LSB = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_4321, 0, 1, 0), SDL_PIXELFORMAT_INDEX1MSB = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_1234, 0, 1, 0), SDL_PIXELFORMAT_INDEX2LSB = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX2, SDL_BITMAPORDER_4321, 0, 2, 0), SDL_PIXELFORMAT_INDEX2MSB = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX2, SDL_BITMAPORDER_1234, 0, 2, 0), SDL_PIXELFORMAT_INDEX4LSB = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_4321, 0, 4, 0), SDL_PIXELFORMAT_INDEX4MSB = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_1234, 0, 4, 0), SDL_PIXELFORMAT_INDEX8 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX8, 0, 0, 8, 1), SDL_PIXELFORMAT_RGB332 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED8, SDL_PACKEDORDER_XRGB, SDL_PACKEDLAYOUT_332, 8, 1), SDL_PIXELFORMAT_XRGB4444 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, SDL_PACKEDLAYOUT_4444, 12, 2), SDL_PIXELFORMAT_RGB444 = SDL_PIXELFORMAT_XRGB4444, SDL_PIXELFORMAT_XBGR4444 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, SDL_PACKEDLAYOUT_4444, 12, 2), SDL_PIXELFORMAT_BGR444 = SDL_PIXELFORMAT_XBGR4444, SDL_PIXELFORMAT_XRGB1555 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, SDL_PACKEDLAYOUT_1555, 15, 2), SDL_PIXELFORMAT_RGB555 = SDL_PIXELFORMAT_XRGB1555, SDL_PIXELFORMAT_XBGR1555 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, SDL_PACKEDLAYOUT_1555, 15, 2), SDL_PIXELFORMAT_BGR555 = SDL_PIXELFORMAT_XBGR1555, SDL_PIXELFORMAT_ARGB4444 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB, SDL_PACKEDLAYOUT_4444, 16, 2), SDL_PIXELFORMAT_RGBA4444 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA, SDL_PACKEDLAYOUT_4444, 16, 2), SDL_PIXELFORMAT_ABGR4444 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR, SDL_PACKEDLAYOUT_4444, 16, 2), SDL_PIXELFORMAT_BGRA4444 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA, SDL_PACKEDLAYOUT_4444, 16, 2), SDL_PIXELFORMAT_ARGB1555 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB, SDL_PACKEDLAYOUT_1555, 16, 2), SDL_PIXELFORMAT_RGBA5551 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA, SDL_PACKEDLAYOUT_5551, 16, 2), SDL_PIXELFORMAT_ABGR1555 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR, SDL_PACKEDLAYOUT_1555, 16, 2), SDL_PIXELFORMAT_BGRA5551 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA, SDL_PACKEDLAYOUT_5551, 16, 2), SDL_PIXELFORMAT_RGB565 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, SDL_PACKEDLAYOUT_565, 16, 2), SDL_PIXELFORMAT_BGR565 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, SDL_PACKEDLAYOUT_565, 16, 2), SDL_PIXELFORMAT_RGB24 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_RGB, 0, 24, 3), SDL_PIXELFORMAT_BGR24 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_BGR, 0, 24, 3), SDL_PIXELFORMAT_XRGB8888 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XRGB, SDL_PACKEDLAYOUT_8888, 24, 4), SDL_PIXELFORMAT_RGB888 = SDL_PIXELFORMAT_XRGB8888, SDL_PIXELFORMAT_RGBX8888 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_RGBX, SDL_PACKEDLAYOUT_8888, 24, 4), SDL_PIXELFORMAT_XBGR8888 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XBGR, SDL_PACKEDLAYOUT_8888, 24, 4), SDL_PIXELFORMAT_BGR888 = SDL_PIXELFORMAT_XBGR8888, SDL_PIXELFORMAT_BGRX8888 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_BGRX, SDL_PACKEDLAYOUT_8888, 24, 4), SDL_PIXELFORMAT_ARGB8888 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB, SDL_PACKEDLAYOUT_8888, 32, 4), SDL_PIXELFORMAT_RGBA8888 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_RGBA, SDL_PACKEDLAYOUT_8888, 32, 4), SDL_PIXELFORMAT_ABGR8888 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ABGR, SDL_PACKEDLAYOUT_8888, 32, 4), SDL_PIXELFORMAT_BGRA8888 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_BGRA, SDL_PACKEDLAYOUT_8888, 32, 4), SDL_PIXELFORMAT_ARGB2101010 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB, SDL_PACKEDLAYOUT_2101010, 32, 4), /* Aliases for RGBA byte arrays of color data, for the current platform */ #if SDL_BYTEORDER == SDL_BIG_ENDIAN SDL_PIXELFORMAT_RGBA32 = SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_ARGB32 = SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_BGRA32 = SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_ABGR32 = SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_RGBX32 = SDL_PIXELFORMAT_RGBX8888, SDL_PIXELFORMAT_XRGB32 = SDL_PIXELFORMAT_XRGB8888, SDL_PIXELFORMAT_BGRX32 = SDL_PIXELFORMAT_BGRX8888, SDL_PIXELFORMAT_XBGR32 = SDL_PIXELFORMAT_XBGR8888, #else SDL_PIXELFORMAT_RGBA32 = SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_ARGB32 = SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_BGRA32 = SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_ABGR32 = SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_RGBX32 = SDL_PIXELFORMAT_XBGR8888, SDL_PIXELFORMAT_XRGB32 = SDL_PIXELFORMAT_BGRX8888, SDL_PIXELFORMAT_BGRX32 = SDL_PIXELFORMAT_XRGB8888, SDL_PIXELFORMAT_XBGR32 = SDL_PIXELFORMAT_RGBX8888, #endif SDL_PIXELFORMAT_YV12 = /**< Planar mode: Y + V + U (3 planes) */ SDL_DEFINE_PIXELFOURCC('Y', 'V', '1', '2'), SDL_PIXELFORMAT_IYUV = /**< Planar mode: Y + U + V (3 planes) */ SDL_DEFINE_PIXELFOURCC('I', 'Y', 'U', 'V'), SDL_PIXELFORMAT_YUY2 = /**< Packed mode: Y0+U0+Y1+V0 (1 plane) */ SDL_DEFINE_PIXELFOURCC('Y', 'U', 'Y', '2'), SDL_PIXELFORMAT_UYVY = /**< Packed mode: U0+Y0+V0+Y1 (1 plane) */ SDL_DEFINE_PIXELFOURCC('U', 'Y', 'V', 'Y'), SDL_PIXELFORMAT_YVYU = /**< Packed mode: Y0+V0+Y1+U0 (1 plane) */ SDL_DEFINE_PIXELFOURCC('Y', 'V', 'Y', 'U'), SDL_PIXELFORMAT_NV12 = /**< Planar mode: Y + U/V interleaved (2 planes) */ SDL_DEFINE_PIXELFOURCC('N', 'V', '1', '2'), SDL_PIXELFORMAT_NV21 = /**< Planar mode: Y + V/U interleaved (2 planes) */ SDL_DEFINE_PIXELFOURCC('N', 'V', '2', '1'), SDL_PIXELFORMAT_EXTERNAL_OES = /**< Android video texture format */ SDL_DEFINE_PIXELFOURCC('O', 'E', 'S', ' ') } SDL_PixelFormatEnum; /** * The bits of this structure can be directly reinterpreted as an integer-packed * color which uses the SDL_PIXELFORMAT_RGBA32 format (SDL_PIXELFORMAT_ABGR8888 * on little-endian systems and SDL_PIXELFORMAT_RGBA8888 on big-endian systems). */ typedef struct SDL_Color { Uint8 r; Uint8 g; Uint8 b; Uint8 a; } SDL_Color; #define SDL_Colour SDL_Color typedef struct SDL_Palette { int ncolors; SDL_Color *colors; Uint32 version; int refcount; } SDL_Palette; /** * \note Everything in the pixel format structure is read-only. */ typedef struct SDL_PixelFormat { Uint32 format; SDL_Palette *palette; Uint8 BitsPerPixel; Uint8 BytesPerPixel; Uint8 padding[2]; Uint32 Rmask; Uint32 Gmask; Uint32 Bmask; Uint32 Amask; Uint8 Rloss; Uint8 Gloss; Uint8 Bloss; Uint8 Aloss; Uint8 Rshift; Uint8 Gshift; Uint8 Bshift; Uint8 Ashift; int refcount; struct SDL_PixelFormat *next; } SDL_PixelFormat; /** * Get the human readable name of a pixel format. * * \param format the pixel format to query * \returns the human readable name of the specified pixel format or * `SDL_PIXELFORMAT_UNKNOWN` if the format isn't recognized. * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC const char* SDLCALL SDL_GetPixelFormatName(Uint32 format); /** * Convert one of the enumerated pixel formats to a bpp value and RGBA masks. * * \param format one of the SDL_PixelFormatEnum values * \param bpp a bits per pixel value; usually 15, 16, or 32 * \param Rmask a pointer filled in with the red mask for the format * \param Gmask a pointer filled in with the green mask for the format * \param Bmask a pointer filled in with the blue mask for the format * \param Amask a pointer filled in with the alpha mask for the format * \returns SDL_TRUE on success or SDL_FALSE if the conversion wasn't * possible; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_MasksToPixelFormatEnum */ extern DECLSPEC SDL_bool SDLCALL SDL_PixelFormatEnumToMasks(Uint32 format, int *bpp, Uint32 * Rmask, Uint32 * Gmask, Uint32 * Bmask, Uint32 * Amask); /** * Convert a bpp value and RGBA masks to an enumerated pixel format. * * This will return `SDL_PIXELFORMAT_UNKNOWN` if the conversion wasn't * possible. * * \param bpp a bits per pixel value; usually 15, 16, or 32 * \param Rmask the red mask for the format * \param Gmask the green mask for the format * \param Bmask the blue mask for the format * \param Amask the alpha mask for the format * \returns one of the SDL_PixelFormatEnum values * * \since This function is available since SDL 2.0.0. * * \sa SDL_PixelFormatEnumToMasks */ extern DECLSPEC Uint32 SDLCALL SDL_MasksToPixelFormatEnum(int bpp, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask); /** * Create an SDL_PixelFormat structure corresponding to a pixel format. * * Returned structure may come from a shared global cache (i.e. not newly * allocated), and hence should not be modified, especially the palette. Weird * errors such as `Blit combination not supported` may occur. * * \param pixel_format one of the SDL_PixelFormatEnum values * \returns the new SDL_PixelFormat structure or NULL on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_FreeFormat */ extern DECLSPEC SDL_PixelFormat * SDLCALL SDL_AllocFormat(Uint32 pixel_format); /** * Free an SDL_PixelFormat structure allocated by SDL_AllocFormat(). * * \param format the SDL_PixelFormat structure to free * * \since This function is available since SDL 2.0.0. * * \sa SDL_AllocFormat */ extern DECLSPEC void SDLCALL SDL_FreeFormat(SDL_PixelFormat *format); /** * Create a palette structure with the specified number of color entries. * * The palette entries are initialized to white. * * \param ncolors represents the number of color entries in the color palette * \returns a new SDL_Palette structure on success or NULL on failure (e.g. if * there wasn't enough memory); call SDL_GetError() for more * information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_FreePalette */ extern DECLSPEC SDL_Palette *SDLCALL SDL_AllocPalette(int ncolors); /** * Set the palette for a pixel format structure. * * \param format the SDL_PixelFormat structure that will use the palette * \param palette the SDL_Palette structure that will be used * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_AllocPalette * \sa SDL_FreePalette */ extern DECLSPEC int SDLCALL SDL_SetPixelFormatPalette(SDL_PixelFormat * format, SDL_Palette *palette); /** * Set a range of colors in a palette. * * \param palette the SDL_Palette structure to modify * \param colors an array of SDL_Color structures to copy into the palette * \param firstcolor the index of the first palette entry to modify * \param ncolors the number of entries to modify * \returns 0 on success or a negative error code if not all of the colors * could be set; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_AllocPalette * \sa SDL_CreateRGBSurface */ extern DECLSPEC int SDLCALL SDL_SetPaletteColors(SDL_Palette * palette, const SDL_Color * colors, int firstcolor, int ncolors); /** * Free a palette created with SDL_AllocPalette(). * * \param palette the SDL_Palette structure to be freed * * \since This function is available since SDL 2.0.0. * * \sa SDL_AllocPalette */ extern DECLSPEC void SDLCALL SDL_FreePalette(SDL_Palette * palette); /** * Map an RGB triple to an opaque pixel value for a given pixel format. * * This function maps the RGB color value to the specified pixel format and * returns the pixel value best approximating the given RGB color value for * the given pixel format. * * If the format has a palette (8-bit) the index of the closest matching color * in the palette will be returned. * * If the specified pixel format has an alpha component it will be returned as * all 1 bits (fully opaque). * * If the pixel format bpp (color depth) is less than 32-bpp then the unused * upper bits of the return value can safely be ignored (e.g., with a 16-bpp * format the return value can be assigned to a Uint16, and similarly a Uint8 * for an 8-bpp format). * * \param format an SDL_PixelFormat structure describing the pixel format * \param r the red component of the pixel in the range 0-255 * \param g the green component of the pixel in the range 0-255 * \param b the blue component of the pixel in the range 0-255 * \returns a pixel value * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetRGB * \sa SDL_GetRGBA * \sa SDL_MapRGBA */ extern DECLSPEC Uint32 SDLCALL SDL_MapRGB(const SDL_PixelFormat * format, Uint8 r, Uint8 g, Uint8 b); /** * Map an RGBA quadruple to a pixel value for a given pixel format. * * This function maps the RGBA color value to the specified pixel format and * returns the pixel value best approximating the given RGBA color value for * the given pixel format. * * If the specified pixel format has no alpha component the alpha value will * be ignored (as it will be in formats with a palette). * * If the format has a palette (8-bit) the index of the closest matching color * in the palette will be returned. * * If the pixel format bpp (color depth) is less than 32-bpp then the unused * upper bits of the return value can safely be ignored (e.g., with a 16-bpp * format the return value can be assigned to a Uint16, and similarly a Uint8 * for an 8-bpp format). * * \param format an SDL_PixelFormat structure describing the format of the * pixel * \param r the red component of the pixel in the range 0-255 * \param g the green component of the pixel in the range 0-255 * \param b the blue component of the pixel in the range 0-255 * \param a the alpha component of the pixel in the range 0-255 * \returns a pixel value * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetRGB * \sa SDL_GetRGBA * \sa SDL_MapRGB */ extern DECLSPEC Uint32 SDLCALL SDL_MapRGBA(const SDL_PixelFormat * format, Uint8 r, Uint8 g, Uint8 b, Uint8 a); /** * Get RGB values from a pixel in the specified format. * * This function uses the entire 8-bit [0..255] range when converting color * components from pixel formats with less than 8-bits per RGB component * (e.g., a completely white pixel in 16-bit RGB565 format would return [0xff, * 0xff, 0xff] not [0xf8, 0xfc, 0xf8]). * * \param pixel a pixel value * \param format an SDL_PixelFormat structure describing the format of the * pixel * \param r a pointer filled in with the red component * \param g a pointer filled in with the green component * \param b a pointer filled in with the blue component * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetRGBA * \sa SDL_MapRGB * \sa SDL_MapRGBA */ extern DECLSPEC void SDLCALL SDL_GetRGB(Uint32 pixel, const SDL_PixelFormat * format, Uint8 * r, Uint8 * g, Uint8 * b); /** * Get RGBA values from a pixel in the specified format. * * This function uses the entire 8-bit [0..255] range when converting color * components from pixel formats with less than 8-bits per RGB component * (e.g., a completely white pixel in 16-bit RGB565 format would return [0xff, * 0xff, 0xff] not [0xf8, 0xfc, 0xf8]). * * If the surface has no alpha component, the alpha will be returned as 0xff * (100% opaque). * * \param pixel a pixel value * \param format an SDL_PixelFormat structure describing the format of the * pixel * \param r a pointer filled in with the red component * \param g a pointer filled in with the green component * \param b a pointer filled in with the blue component * \param a a pointer filled in with the alpha component * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetRGB * \sa SDL_MapRGB * \sa SDL_MapRGBA */ extern DECLSPEC void SDLCALL SDL_GetRGBA(Uint32 pixel, const SDL_PixelFormat * format, Uint8 * r, Uint8 * g, Uint8 * b, Uint8 * a); /** * Calculate a 256 entry gamma ramp for a gamma value. * * \param gamma a gamma value where 0.0 is black and 1.0 is identity * \param ramp an array of 256 values filled in with the gamma ramp * * \since This function is available since SDL 2.0.0. * * \sa SDL_SetWindowGammaRamp */ extern DECLSPEC void SDLCALL SDL_CalculateGammaRamp(float gamma, Uint16 * ramp); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_pixels_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_platform.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_platform.h * * Try to get a standard set of platform defines. */ #ifndef SDL_platform_h_ #define SDL_platform_h_ #if defined(_AIX) #undef __AIX__ #define __AIX__ 1 #endif #if defined(__HAIKU__) #undef __HAIKU__ #define __HAIKU__ 1 #endif #if defined(bsdi) || defined(__bsdi) || defined(__bsdi__) #undef __BSDI__ #define __BSDI__ 1 #endif #if defined(_arch_dreamcast) #undef __DREAMCAST__ #define __DREAMCAST__ 1 #endif #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) #undef __FREEBSD__ #define __FREEBSD__ 1 #endif #if defined(hpux) || defined(__hpux) || defined(__hpux__) #undef __HPUX__ #define __HPUX__ 1 #endif #if defined(sgi) || defined(__sgi) || defined(__sgi__) || defined(_SGI_SOURCE) #undef __IRIX__ #define __IRIX__ 1 #endif #if (defined(linux) || defined(__linux) || defined(__linux__)) #undef __LINUX__ #define __LINUX__ 1 #endif #if defined(ANDROID) || defined(__ANDROID__) #undef __ANDROID__ #undef __LINUX__ /* do we need to do this? */ #define __ANDROID__ 1 #endif #if defined(__NGAGE__) #undef __NGAGE__ #define __NGAGE__ 1 #endif #if defined(__APPLE__) /* lets us know what version of Mac OS X we're compiling on */ #include #ifndef __has_extension /* Older compilers don't support this */ #define __has_extension(x) 0 #include #undef __has_extension #else #include #endif /* Fix building with older SDKs that don't define these See this for more information: https://stackoverflow.com/questions/12132933/preprocessor-macro-for-os-x-targets */ #ifndef TARGET_OS_MACCATALYST #define TARGET_OS_MACCATALYST 0 #endif #ifndef TARGET_OS_IOS #define TARGET_OS_IOS 0 #endif #ifndef TARGET_OS_IPHONE #define TARGET_OS_IPHONE 0 #endif #ifndef TARGET_OS_TV #define TARGET_OS_TV 0 #endif #ifndef TARGET_OS_SIMULATOR #define TARGET_OS_SIMULATOR 0 #endif #if TARGET_OS_TV #undef __TVOS__ #define __TVOS__ 1 #endif #if TARGET_OS_IPHONE /* if compiling for iOS */ #undef __IPHONEOS__ #define __IPHONEOS__ 1 #undef __MACOSX__ #else /* if not compiling for iOS */ #undef __MACOSX__ #define __MACOSX__ 1 #if MAC_OS_X_VERSION_MIN_REQUIRED < 1070 # error SDL for Mac OS X only supports deploying on 10.7 and above. #endif /* MAC_OS_X_VERSION_MIN_REQUIRED < 1070 */ #endif /* TARGET_OS_IPHONE */ #endif /* defined(__APPLE__) */ #if defined(__NetBSD__) #undef __NETBSD__ #define __NETBSD__ 1 #endif #if defined(__OpenBSD__) #undef __OPENBSD__ #define __OPENBSD__ 1 #endif #if defined(__OS2__) || defined(__EMX__) #undef __OS2__ #define __OS2__ 1 #endif #if defined(osf) || defined(__osf) || defined(__osf__) || defined(_OSF_SOURCE) #undef __OSF__ #define __OSF__ 1 #endif #if defined(__QNXNTO__) #undef __QNXNTO__ #define __QNXNTO__ 1 #endif #if defined(riscos) || defined(__riscos) || defined(__riscos__) #undef __RISCOS__ #define __RISCOS__ 1 #endif #if defined(__sun) && defined(__SVR4) #undef __SOLARIS__ #define __SOLARIS__ 1 #endif #if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) || defined(__MINGW32__) /* Try to find out if we're compiling for WinRT, GDK or non-WinRT/GDK */ #if defined(_MSC_VER) && defined(__has_include) #if __has_include() #define HAVE_WINAPIFAMILY_H 1 #else #define HAVE_WINAPIFAMILY_H 0 #endif /* If _USING_V110_SDK71_ is defined it means we are using the Windows XP toolset. */ #elif defined(_MSC_VER) && (_MSC_VER >= 1700 && !_USING_V110_SDK71_) /* _MSC_VER == 1700 for Visual Studio 2012 */ #define HAVE_WINAPIFAMILY_H 1 #else #define HAVE_WINAPIFAMILY_H 0 #endif #if HAVE_WINAPIFAMILY_H #include #define WINAPI_FAMILY_WINRT (!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)) #else #define WINAPI_FAMILY_WINRT 0 #endif /* HAVE_WINAPIFAMILY_H */ #if (HAVE_WINAPIFAMILY_H) && defined(WINAPI_FAMILY_PHONE_APP) #define SDL_WINAPI_FAMILY_PHONE (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) #else #define SDL_WINAPI_FAMILY_PHONE 0 #endif #if WINAPI_FAMILY_WINRT #undef __WINRT__ #define __WINRT__ 1 #elif defined(_GAMING_DESKTOP) /* GDK project configuration always defines _GAMING_XXX */ #undef __WINGDK__ #define __WINGDK__ 1 #elif defined(_GAMING_XBOX_XBOXONE) #undef __XBOXONE__ #define __XBOXONE__ 1 #elif defined(_GAMING_XBOX_SCARLETT) #undef __XBOXSERIES__ #define __XBOXSERIES__ 1 #else #undef __WINDOWS__ #define __WINDOWS__ 1 #endif #endif /* defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) */ #if defined(__WINDOWS__) #undef __WIN32__ #define __WIN32__ 1 #endif /* This is to support generic "any GDK" separate from a platform-specific GDK */ #if defined(__WINGDK__) || defined(__XBOXONE__) || defined(__XBOXSERIES__) #undef __GDK__ #define __GDK__ 1 #endif #if defined(__PSP__) || defined(__psp__) #ifdef __PSP__ #undef __PSP__ #endif #define __PSP__ 1 #endif #if defined(PS2) #define __PS2__ 1 #endif /* The NACL compiler defines __native_client__ and __pnacl__ * Ref: http://www.chromium.org/nativeclient/pnacl/stability-of-the-pnacl-bitcode-abi */ #if defined(__native_client__) #undef __LINUX__ #undef __NACL__ #define __NACL__ 1 #endif #if defined(__pnacl__) #undef __LINUX__ #undef __PNACL__ #define __PNACL__ 1 /* PNACL with newlib supports static linking only */ #define __SDL_NOGETPROCADDR__ #endif #if defined(__vita__) #define __VITA__ 1 #endif #if defined(__3DS__) #undef __3DS__ #define __3DS__ 1 #endif #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** * Get the name of the platform. * * Here are the names returned for some (but not all) supported platforms: * * - "Windows" * - "Mac OS X" * - "Linux" * - "iOS" * - "Android" * * \returns the name of the platform. If the correct platform name is not * available, returns a string beginning with the text "Unknown". * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC const char * SDLCALL SDL_GetPlatform (void); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_platform_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_power.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef SDL_power_h_ #define SDL_power_h_ /** * \file SDL_power.h * * Header for the SDL power management routines. */ #include "SDL_stdinc.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** * The basic state for the system's power supply. */ typedef enum { SDL_POWERSTATE_UNKNOWN, /**< cannot determine power status */ SDL_POWERSTATE_ON_BATTERY, /**< Not plugged in, running on the battery */ SDL_POWERSTATE_NO_BATTERY, /**< Plugged in, no battery available */ SDL_POWERSTATE_CHARGING, /**< Plugged in, charging battery */ SDL_POWERSTATE_CHARGED /**< Plugged in, battery charged */ } SDL_PowerState; /** * Get the current power supply details. * * You should never take a battery status as absolute truth. Batteries * (especially failing batteries) are delicate hardware, and the values * reported here are best estimates based on what that hardware reports. It's * not uncommon for older batteries to lose stored power much faster than it * reports, or completely drain when reporting it has 20 percent left, etc. * * Battery status can change at any time; if you are concerned with power * state, you should call this function frequently, and perhaps ignore changes * until they seem to be stable for a few seconds. * * It's possible a platform can only report battery percentage or time left * but not both. * * \param seconds seconds of battery life left, you can pass a NULL here if * you don't care, will return -1 if we can't determine a * value, or we're not running on a battery * \param percent percentage of battery life left, between 0 and 100, you can * pass a NULL here if you don't care, will return -1 if we * can't determine a value, or we're not running on a battery * \returns an SDL_PowerState enum representing the current battery state. * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC SDL_PowerState SDLCALL SDL_GetPowerInfo(int *seconds, int *percent); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_power_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_quit.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_quit.h * * Include file for SDL quit event handling. */ #ifndef SDL_quit_h_ #define SDL_quit_h_ #include "SDL_stdinc.h" #include "SDL_error.h" /** * \file SDL_quit.h * * An ::SDL_QUIT event is generated when the user tries to close the application * window. If it is ignored or filtered out, the window will remain open. * If it is not ignored or filtered, it is queued normally and the window * is allowed to close. When the window is closed, screen updates will * complete, but have no effect. * * SDL_Init() installs signal handlers for SIGINT (keyboard interrupt) * and SIGTERM (system termination request), if handlers do not already * exist, that generate ::SDL_QUIT events as well. There is no way * to determine the cause of an ::SDL_QUIT event, but setting a signal * handler in your application will override the default generation of * quit events for that signal. * * \sa SDL_Quit() */ /* There are no functions directly affecting the quit event */ #define SDL_QuitRequested() \ (SDL_PumpEvents(), (SDL_PeepEvents(NULL,0,SDL_PEEKEVENT,SDL_QUIT,SDL_QUIT) > 0)) #endif /* SDL_quit_h_ */ ================================================ FILE: libraries/sdl2/SDL_rect.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_rect.h * * Header file for SDL_rect definition and management functions. */ #ifndef SDL_rect_h_ #define SDL_rect_h_ #include "SDL_stdinc.h" #include "SDL_error.h" #include "SDL_pixels.h" #include "SDL_rwops.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** * The structure that defines a point (integer) * * \sa SDL_EnclosePoints * \sa SDL_PointInRect */ typedef struct SDL_Point { int x; int y; } SDL_Point; /** * The structure that defines a point (floating point) * * \sa SDL_EncloseFPoints * \sa SDL_PointInFRect */ typedef struct SDL_FPoint { float x; float y; } SDL_FPoint; /** * A rectangle, with the origin at the upper left (integer). * * \sa SDL_RectEmpty * \sa SDL_RectEquals * \sa SDL_HasIntersection * \sa SDL_IntersectRect * \sa SDL_IntersectRectAndLine * \sa SDL_UnionRect * \sa SDL_EnclosePoints */ typedef struct SDL_Rect { int x, y; int w, h; } SDL_Rect; /** * A rectangle, with the origin at the upper left (floating point). * * \sa SDL_FRectEmpty * \sa SDL_FRectEquals * \sa SDL_FRectEqualsEpsilon * \sa SDL_HasIntersectionF * \sa SDL_IntersectFRect * \sa SDL_IntersectFRectAndLine * \sa SDL_UnionFRect * \sa SDL_EncloseFPoints * \sa SDL_PointInFRect */ typedef struct SDL_FRect { float x; float y; float w; float h; } SDL_FRect; /** * Returns true if point resides inside a rectangle. */ SDL_FORCE_INLINE SDL_bool SDL_PointInRect(const SDL_Point *p, const SDL_Rect *r) { return ( (p->x >= r->x) && (p->x < (r->x + r->w)) && (p->y >= r->y) && (p->y < (r->y + r->h)) ) ? SDL_TRUE : SDL_FALSE; } /** * Returns true if the rectangle has no area. */ SDL_FORCE_INLINE SDL_bool SDL_RectEmpty(const SDL_Rect *r) { return ((!r) || (r->w <= 0) || (r->h <= 0)) ? SDL_TRUE : SDL_FALSE; } /** * Returns true if the two rectangles are equal. */ SDL_FORCE_INLINE SDL_bool SDL_RectEquals(const SDL_Rect *a, const SDL_Rect *b) { return (a && b && (a->x == b->x) && (a->y == b->y) && (a->w == b->w) && (a->h == b->h)) ? SDL_TRUE : SDL_FALSE; } /** * Determine whether two rectangles intersect. * * If either pointer is NULL the function will return SDL_FALSE. * * \param A an SDL_Rect structure representing the first rectangle * \param B an SDL_Rect structure representing the second rectangle * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.0. * * \sa SDL_IntersectRect */ extern DECLSPEC SDL_bool SDLCALL SDL_HasIntersection(const SDL_Rect * A, const SDL_Rect * B); /** * Calculate the intersection of two rectangles. * * If `result` is NULL then this function will return SDL_FALSE. * * \param A an SDL_Rect structure representing the first rectangle * \param B an SDL_Rect structure representing the second rectangle * \param result an SDL_Rect structure filled in with the intersection of * rectangles `A` and `B` * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.0. * * \sa SDL_HasIntersection */ extern DECLSPEC SDL_bool SDLCALL SDL_IntersectRect(const SDL_Rect * A, const SDL_Rect * B, SDL_Rect * result); /** * Calculate the union of two rectangles. * * \param A an SDL_Rect structure representing the first rectangle * \param B an SDL_Rect structure representing the second rectangle * \param result an SDL_Rect structure filled in with the union of rectangles * `A` and `B` * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC void SDLCALL SDL_UnionRect(const SDL_Rect * A, const SDL_Rect * B, SDL_Rect * result); /** * Calculate a minimal rectangle enclosing a set of points. * * If `clip` is not NULL then only points inside of the clipping rectangle are * considered. * * \param points an array of SDL_Point structures representing points to be * enclosed * \param count the number of structures in the `points` array * \param clip an SDL_Rect used for clipping or NULL to enclose all points * \param result an SDL_Rect structure filled in with the minimal enclosing * rectangle * \returns SDL_TRUE if any points were enclosed or SDL_FALSE if all the * points were outside of the clipping rectangle. * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC SDL_bool SDLCALL SDL_EnclosePoints(const SDL_Point * points, int count, const SDL_Rect * clip, SDL_Rect * result); /** * Calculate the intersection of a rectangle and line segment. * * This function is used to clip a line segment to a rectangle. A line segment * contained entirely within the rectangle or that does not intersect will * remain unchanged. A line segment that crosses the rectangle at either or * both ends will be clipped to the boundary of the rectangle and the new * coordinates saved in `X1`, `Y1`, `X2`, and/or `Y2` as necessary. * * \param rect an SDL_Rect structure representing the rectangle to intersect * \param X1 a pointer to the starting X-coordinate of the line * \param Y1 a pointer to the starting Y-coordinate of the line * \param X2 a pointer to the ending X-coordinate of the line * \param Y2 a pointer to the ending Y-coordinate of the line * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC SDL_bool SDLCALL SDL_IntersectRectAndLine(const SDL_Rect * rect, int *X1, int *Y1, int *X2, int *Y2); /* SDL_FRect versions... */ /** * Returns true if point resides inside a rectangle. */ SDL_FORCE_INLINE SDL_bool SDL_PointInFRect(const SDL_FPoint *p, const SDL_FRect *r) { return ( (p->x >= r->x) && (p->x < (r->x + r->w)) && (p->y >= r->y) && (p->y < (r->y + r->h)) ) ? SDL_TRUE : SDL_FALSE; } /** * Returns true if the rectangle has no area. */ SDL_FORCE_INLINE SDL_bool SDL_FRectEmpty(const SDL_FRect *r) { return ((!r) || (r->w <= 0.0f) || (r->h <= 0.0f)) ? SDL_TRUE : SDL_FALSE; } /** * Returns true if the two rectangles are equal, within some given epsilon. * * \since This function is available since SDL 2.0.22. */ SDL_FORCE_INLINE SDL_bool SDL_FRectEqualsEpsilon(const SDL_FRect *a, const SDL_FRect *b, const float epsilon) { return (a && b && ((a == b) || ((SDL_fabsf(a->x - b->x) <= epsilon) && (SDL_fabsf(a->y - b->y) <= epsilon) && (SDL_fabsf(a->w - b->w) <= epsilon) && (SDL_fabsf(a->h - b->h) <= epsilon)))) ? SDL_TRUE : SDL_FALSE; } /** * Returns true if the two rectangles are equal, using a default epsilon. * * \since This function is available since SDL 2.0.22. */ SDL_FORCE_INLINE SDL_bool SDL_FRectEquals(const SDL_FRect *a, const SDL_FRect *b) { return SDL_FRectEqualsEpsilon(a, b, SDL_FLT_EPSILON); } /** * Determine whether two rectangles intersect with float precision. * * If either pointer is NULL the function will return SDL_FALSE. * * \param A an SDL_FRect structure representing the first rectangle * \param B an SDL_FRect structure representing the second rectangle * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.22. * * \sa SDL_IntersectRect */ extern DECLSPEC SDL_bool SDLCALL SDL_HasIntersectionF(const SDL_FRect * A, const SDL_FRect * B); /** * Calculate the intersection of two rectangles with float precision. * * If `result` is NULL then this function will return SDL_FALSE. * * \param A an SDL_FRect structure representing the first rectangle * \param B an SDL_FRect structure representing the second rectangle * \param result an SDL_FRect structure filled in with the intersection of * rectangles `A` and `B` * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.22. * * \sa SDL_HasIntersectionF */ extern DECLSPEC SDL_bool SDLCALL SDL_IntersectFRect(const SDL_FRect * A, const SDL_FRect * B, SDL_FRect * result); /** * Calculate the union of two rectangles with float precision. * * \param A an SDL_FRect structure representing the first rectangle * \param B an SDL_FRect structure representing the second rectangle * \param result an SDL_FRect structure filled in with the union of rectangles * `A` and `B` * * \since This function is available since SDL 2.0.22. */ extern DECLSPEC void SDLCALL SDL_UnionFRect(const SDL_FRect * A, const SDL_FRect * B, SDL_FRect * result); /** * Calculate a minimal rectangle enclosing a set of points with float * precision. * * If `clip` is not NULL then only points inside of the clipping rectangle are * considered. * * \param points an array of SDL_FPoint structures representing points to be * enclosed * \param count the number of structures in the `points` array * \param clip an SDL_FRect used for clipping or NULL to enclose all points * \param result an SDL_FRect structure filled in with the minimal enclosing * rectangle * \returns SDL_TRUE if any points were enclosed or SDL_FALSE if all the * points were outside of the clipping rectangle. * * \since This function is available since SDL 2.0.22. */ extern DECLSPEC SDL_bool SDLCALL SDL_EncloseFPoints(const SDL_FPoint * points, int count, const SDL_FRect * clip, SDL_FRect * result); /** * Calculate the intersection of a rectangle and line segment with float * precision. * * This function is used to clip a line segment to a rectangle. A line segment * contained entirely within the rectangle or that does not intersect will * remain unchanged. A line segment that crosses the rectangle at either or * both ends will be clipped to the boundary of the rectangle and the new * coordinates saved in `X1`, `Y1`, `X2`, and/or `Y2` as necessary. * * \param rect an SDL_FRect structure representing the rectangle to intersect * \param X1 a pointer to the starting X-coordinate of the line * \param Y1 a pointer to the starting Y-coordinate of the line * \param X2 a pointer to the ending X-coordinate of the line * \param Y2 a pointer to the ending Y-coordinate of the line * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.22. */ extern DECLSPEC SDL_bool SDLCALL SDL_IntersectFRectAndLine(const SDL_FRect * rect, float *X1, float *Y1, float *X2, float *Y2); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_rect_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_render.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_render.h * * Header file for SDL 2D rendering functions. * * This API supports the following features: * * single pixel points * * single pixel lines * * filled rectangles * * texture images * * The primitives may be drawn in opaque, blended, or additive modes. * * The texture images may be drawn in opaque, blended, or additive modes. * They can have an additional color tint or alpha modulation applied to * them, and may also be stretched with linear interpolation. * * This API is designed to accelerate simple 2D operations. You may * want more functionality such as polygons and particle effects and * in that case you should use SDL's OpenGL/Direct3D support or one * of the many good 3D engines. * * These functions must be called from the main thread. * See this bug for details: https://github.com/libsdl-org/SDL/issues/986 */ #ifndef SDL_render_h_ #define SDL_render_h_ #include "SDL_stdinc.h" #include "SDL_rect.h" #include "SDL_video.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** * Flags used when creating a rendering context */ typedef enum { SDL_RENDERER_SOFTWARE = 0x00000001, /**< The renderer is a software fallback */ SDL_RENDERER_ACCELERATED = 0x00000002, /**< The renderer uses hardware acceleration */ SDL_RENDERER_PRESENTVSYNC = 0x00000004, /**< Present is synchronized with the refresh rate */ SDL_RENDERER_TARGETTEXTURE = 0x00000008 /**< The renderer supports rendering to texture */ } SDL_RendererFlags; /** * Information on the capabilities of a render driver or context. */ typedef struct SDL_RendererInfo { const char *name; /**< The name of the renderer */ Uint32 flags; /**< Supported ::SDL_RendererFlags */ Uint32 num_texture_formats; /**< The number of available texture formats */ Uint32 texture_formats[16]; /**< The available texture formats */ int max_texture_width; /**< The maximum texture width */ int max_texture_height; /**< The maximum texture height */ } SDL_RendererInfo; /** * Vertex structure */ typedef struct SDL_Vertex { SDL_FPoint position; /**< Vertex position, in SDL_Renderer coordinates */ SDL_Color color; /**< Vertex color */ SDL_FPoint tex_coord; /**< Normalized texture coordinates, if needed */ } SDL_Vertex; /** * The scaling mode for a texture. */ typedef enum { SDL_ScaleModeNearest, /**< nearest pixel sampling */ SDL_ScaleModeLinear, /**< linear filtering */ SDL_ScaleModeBest /**< anisotropic filtering */ } SDL_ScaleMode; /** * The access pattern allowed for a texture. */ typedef enum { SDL_TEXTUREACCESS_STATIC, /**< Changes rarely, not lockable */ SDL_TEXTUREACCESS_STREAMING, /**< Changes frequently, lockable */ SDL_TEXTUREACCESS_TARGET /**< Texture can be used as a render target */ } SDL_TextureAccess; /** * The texture channel modulation used in SDL_RenderCopy(). */ typedef enum { SDL_TEXTUREMODULATE_NONE = 0x00000000, /**< No modulation */ SDL_TEXTUREMODULATE_COLOR = 0x00000001, /**< srcC = srcC * color */ SDL_TEXTUREMODULATE_ALPHA = 0x00000002 /**< srcA = srcA * alpha */ } SDL_TextureModulate; /** * Flip constants for SDL_RenderCopyEx */ typedef enum { SDL_FLIP_NONE = 0x00000000, /**< Do not flip */ SDL_FLIP_HORIZONTAL = 0x00000001, /**< flip horizontally */ SDL_FLIP_VERTICAL = 0x00000002 /**< flip vertically */ } SDL_RendererFlip; /** * A structure representing rendering state */ struct SDL_Renderer; typedef struct SDL_Renderer SDL_Renderer; /** * An efficient driver-specific representation of pixel data */ struct SDL_Texture; typedef struct SDL_Texture SDL_Texture; /* Function prototypes */ /** * Get the number of 2D rendering drivers available for the current display. * * A render driver is a set of code that handles rendering and texture * management on a particular display. Normally there is only one, but some * drivers may have several available with different capabilities. * * There may be none if SDL was compiled without render support. * * \returns a number >= 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateRenderer * \sa SDL_GetRenderDriverInfo */ extern DECLSPEC int SDLCALL SDL_GetNumRenderDrivers(void); /** * Get info about a specific 2D rendering driver for the current display. * * \param index the index of the driver to query information about * \param info an SDL_RendererInfo structure to be filled with information on * the rendering driver * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateRenderer * \sa SDL_GetNumRenderDrivers */ extern DECLSPEC int SDLCALL SDL_GetRenderDriverInfo(int index, SDL_RendererInfo * info); /** * Create a window and default renderer. * * \param width the width of the window * \param height the height of the window * \param window_flags the flags used to create the window (see * SDL_CreateWindow()) * \param window a pointer filled with the window, or NULL on error * \param renderer a pointer filled with the renderer, or NULL on error * \returns 0 on success, or -1 on error; call SDL_GetError() for more * information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateRenderer * \sa SDL_CreateWindow */ extern DECLSPEC int SDLCALL SDL_CreateWindowAndRenderer( int width, int height, Uint32 window_flags, SDL_Window **window, SDL_Renderer **renderer); /** * Create a 2D rendering context for a window. * * \param window the window where rendering is displayed * \param index the index of the rendering driver to initialize, or -1 to * initialize the first one supporting the requested flags * \param flags 0, or one or more SDL_RendererFlags OR'd together * \returns a valid rendering context or NULL if there was an error; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateSoftwareRenderer * \sa SDL_DestroyRenderer * \sa SDL_GetNumRenderDrivers * \sa SDL_GetRendererInfo */ extern DECLSPEC SDL_Renderer * SDLCALL SDL_CreateRenderer(SDL_Window * window, int index, Uint32 flags); /** * Create a 2D software rendering context for a surface. * * Two other API which can be used to create SDL_Renderer: * SDL_CreateRenderer() and SDL_CreateWindowAndRenderer(). These can _also_ * create a software renderer, but they are intended to be used with an * SDL_Window as the final destination and not an SDL_Surface. * * \param surface the SDL_Surface structure representing the surface where * rendering is done * \returns a valid rendering context or NULL if there was an error; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateRenderer * \sa SDL_CreateWindowRenderer * \sa SDL_DestroyRenderer */ extern DECLSPEC SDL_Renderer * SDLCALL SDL_CreateSoftwareRenderer(SDL_Surface * surface); /** * Get the renderer associated with a window. * * \param window the window to query * \returns the rendering context on success or NULL on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateRenderer */ extern DECLSPEC SDL_Renderer * SDLCALL SDL_GetRenderer(SDL_Window * window); /** * Get the window associated with a renderer. * * \param renderer the renderer to query * \returns the window on success or NULL on failure; call SDL_GetError() for * more information. * * \since This function is available since SDL 2.0.22. */ extern DECLSPEC SDL_Window * SDLCALL SDL_RenderGetWindow(SDL_Renderer *renderer); /** * Get information about a rendering context. * * \param renderer the rendering context * \param info an SDL_RendererInfo structure filled with information about the * current renderer * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateRenderer */ extern DECLSPEC int SDLCALL SDL_GetRendererInfo(SDL_Renderer * renderer, SDL_RendererInfo * info); /** * Get the output size in pixels of a rendering context. * * Due to high-dpi displays, you might end up with a rendering context that * has more pixels than the window that contains it, so use this instead of * SDL_GetWindowSize() to decide how much drawing area you have. * * \param renderer the rendering context * \param w an int filled with the width * \param h an int filled with the height * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetRenderer */ extern DECLSPEC int SDLCALL SDL_GetRendererOutputSize(SDL_Renderer * renderer, int *w, int *h); /** * Create a texture for a rendering context. * * You can set the texture scaling method by setting * `SDL_HINT_RENDER_SCALE_QUALITY` before creating the texture. * * \param renderer the rendering context * \param format one of the enumerated values in SDL_PixelFormatEnum * \param access one of the enumerated values in SDL_TextureAccess * \param w the width of the texture in pixels * \param h the height of the texture in pixels * \returns a pointer to the created texture or NULL if no rendering context * was active, the format was unsupported, or the width or height * were out of range; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateTextureFromSurface * \sa SDL_DestroyTexture * \sa SDL_QueryTexture * \sa SDL_UpdateTexture */ extern DECLSPEC SDL_Texture * SDLCALL SDL_CreateTexture(SDL_Renderer * renderer, Uint32 format, int access, int w, int h); /** * Create a texture from an existing surface. * * The surface is not modified or freed by this function. * * The SDL_TextureAccess hint for the created texture is * `SDL_TEXTUREACCESS_STATIC`. * * The pixel format of the created texture may be different from the pixel * format of the surface. Use SDL_QueryTexture() to query the pixel format of * the texture. * * \param renderer the rendering context * \param surface the SDL_Surface structure containing pixel data used to fill * the texture * \returns the created texture or NULL on failure; call SDL_GetError() for * more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateTexture * \sa SDL_DestroyTexture * \sa SDL_QueryTexture */ extern DECLSPEC SDL_Texture * SDLCALL SDL_CreateTextureFromSurface(SDL_Renderer * renderer, SDL_Surface * surface); /** * Query the attributes of a texture. * * \param texture the texture to query * \param format a pointer filled in with the raw format of the texture; the * actual format may differ, but pixel transfers will use this * format (one of the SDL_PixelFormatEnum values). This argument * can be NULL if you don't need this information. * \param access a pointer filled in with the actual access to the texture * (one of the SDL_TextureAccess values). This argument can be * NULL if you don't need this information. * \param w a pointer filled in with the width of the texture in pixels. This * argument can be NULL if you don't need this information. * \param h a pointer filled in with the height of the texture in pixels. This * argument can be NULL if you don't need this information. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateTexture */ extern DECLSPEC int SDLCALL SDL_QueryTexture(SDL_Texture * texture, Uint32 * format, int *access, int *w, int *h); /** * Set an additional color value multiplied into render copy operations. * * When this texture is rendered, during the copy operation each source color * channel is modulated by the appropriate color value according to the * following formula: * * `srcC = srcC * (color / 255)` * * Color modulation is not always supported by the renderer; it will return -1 * if color modulation is not supported. * * \param texture the texture to update * \param r the red color value multiplied into copy operations * \param g the green color value multiplied into copy operations * \param b the blue color value multiplied into copy operations * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetTextureColorMod * \sa SDL_SetTextureAlphaMod */ extern DECLSPEC int SDLCALL SDL_SetTextureColorMod(SDL_Texture * texture, Uint8 r, Uint8 g, Uint8 b); /** * Get the additional color value multiplied into render copy operations. * * \param texture the texture to query * \param r a pointer filled in with the current red color value * \param g a pointer filled in with the current green color value * \param b a pointer filled in with the current blue color value * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetTextureAlphaMod * \sa SDL_SetTextureColorMod */ extern DECLSPEC int SDLCALL SDL_GetTextureColorMod(SDL_Texture * texture, Uint8 * r, Uint8 * g, Uint8 * b); /** * Set an additional alpha value multiplied into render copy operations. * * When this texture is rendered, during the copy operation the source alpha * value is modulated by this alpha value according to the following formula: * * `srcA = srcA * (alpha / 255)` * * Alpha modulation is not always supported by the renderer; it will return -1 * if alpha modulation is not supported. * * \param texture the texture to update * \param alpha the source alpha value multiplied into copy operations * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetTextureAlphaMod * \sa SDL_SetTextureColorMod */ extern DECLSPEC int SDLCALL SDL_SetTextureAlphaMod(SDL_Texture * texture, Uint8 alpha); /** * Get the additional alpha value multiplied into render copy operations. * * \param texture the texture to query * \param alpha a pointer filled in with the current alpha value * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetTextureColorMod * \sa SDL_SetTextureAlphaMod */ extern DECLSPEC int SDLCALL SDL_GetTextureAlphaMod(SDL_Texture * texture, Uint8 * alpha); /** * Set the blend mode for a texture, used by SDL_RenderCopy(). * * If the blend mode is not supported, the closest supported mode is chosen * and this function returns -1. * * \param texture the texture to update * \param blendMode the SDL_BlendMode to use for texture blending * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetTextureBlendMode * \sa SDL_RenderCopy */ extern DECLSPEC int SDLCALL SDL_SetTextureBlendMode(SDL_Texture * texture, SDL_BlendMode blendMode); /** * Get the blend mode used for texture copy operations. * * \param texture the texture to query * \param blendMode a pointer filled in with the current SDL_BlendMode * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_SetTextureBlendMode */ extern DECLSPEC int SDLCALL SDL_GetTextureBlendMode(SDL_Texture * texture, SDL_BlendMode *blendMode); /** * Set the scale mode used for texture scale operations. * * If the scale mode is not supported, the closest supported mode is chosen. * * \param texture The texture to update. * \param scaleMode the SDL_ScaleMode to use for texture scaling. * \returns 0 on success, or -1 if the texture is not valid. * * \since This function is available since SDL 2.0.12. * * \sa SDL_GetTextureScaleMode */ extern DECLSPEC int SDLCALL SDL_SetTextureScaleMode(SDL_Texture * texture, SDL_ScaleMode scaleMode); /** * Get the scale mode used for texture scale operations. * * \param texture the texture to query. * \param scaleMode a pointer filled in with the current scale mode. * \return 0 on success, or -1 if the texture is not valid. * * \since This function is available since SDL 2.0.12. * * \sa SDL_SetTextureScaleMode */ extern DECLSPEC int SDLCALL SDL_GetTextureScaleMode(SDL_Texture * texture, SDL_ScaleMode *scaleMode); /** * Associate a user-specified pointer with a texture. * * \param texture the texture to update. * \param userdata the pointer to associate with the texture. * \returns 0 on success, or -1 if the texture is not valid. * * \since This function is available since SDL 2.0.18. * * \sa SDL_GetTextureUserData */ extern DECLSPEC int SDLCALL SDL_SetTextureUserData(SDL_Texture * texture, void *userdata); /** * Get the user-specified pointer associated with a texture * * \param texture the texture to query. * \return the pointer associated with the texture, or NULL if the texture is * not valid. * * \since This function is available since SDL 2.0.18. * * \sa SDL_SetTextureUserData */ extern DECLSPEC void * SDLCALL SDL_GetTextureUserData(SDL_Texture * texture); /** * Update the given texture rectangle with new pixel data. * * The pixel data must be in the pixel format of the texture. Use * SDL_QueryTexture() to query the pixel format of the texture. * * This is a fairly slow function, intended for use with static textures that * do not change often. * * If the texture is intended to be updated often, it is preferred to create * the texture as streaming and use the locking functions referenced below. * While this function will work with streaming textures, for optimization * reasons you may not get the pixels back if you lock the texture afterward. * * \param texture the texture to update * \param rect an SDL_Rect structure representing the area to update, or NULL * to update the entire texture * \param pixels the raw pixel data in the format of the texture * \param pitch the number of bytes in a row of pixel data, including padding * between lines * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateTexture * \sa SDL_LockTexture * \sa SDL_UnlockTexture */ extern DECLSPEC int SDLCALL SDL_UpdateTexture(SDL_Texture * texture, const SDL_Rect * rect, const void *pixels, int pitch); /** * Update a rectangle within a planar YV12 or IYUV texture with new pixel * data. * * You can use SDL_UpdateTexture() as long as your pixel data is a contiguous * block of Y and U/V planes in the proper order, but this function is * available if your pixel data is not contiguous. * * \param texture the texture to update * \param rect a pointer to the rectangle of pixels to update, or NULL to * update the entire texture * \param Yplane the raw pixel data for the Y plane * \param Ypitch the number of bytes between rows of pixel data for the Y * plane * \param Uplane the raw pixel data for the U plane * \param Upitch the number of bytes between rows of pixel data for the U * plane * \param Vplane the raw pixel data for the V plane * \param Vpitch the number of bytes between rows of pixel data for the V * plane * \returns 0 on success or -1 if the texture is not valid; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.1. * * \sa SDL_UpdateTexture */ extern DECLSPEC int SDLCALL SDL_UpdateYUVTexture(SDL_Texture * texture, const SDL_Rect * rect, const Uint8 *Yplane, int Ypitch, const Uint8 *Uplane, int Upitch, const Uint8 *Vplane, int Vpitch); /** * Update a rectangle within a planar NV12 or NV21 texture with new pixels. * * You can use SDL_UpdateTexture() as long as your pixel data is a contiguous * block of NV12/21 planes in the proper order, but this function is available * if your pixel data is not contiguous. * * \param texture the texture to update * \param rect a pointer to the rectangle of pixels to update, or NULL to * update the entire texture. * \param Yplane the raw pixel data for the Y plane. * \param Ypitch the number of bytes between rows of pixel data for the Y * plane. * \param UVplane the raw pixel data for the UV plane. * \param UVpitch the number of bytes between rows of pixel data for the UV * plane. * \return 0 on success, or -1 if the texture is not valid. * * \since This function is available since SDL 2.0.16. */ extern DECLSPEC int SDLCALL SDL_UpdateNVTexture(SDL_Texture * texture, const SDL_Rect * rect, const Uint8 *Yplane, int Ypitch, const Uint8 *UVplane, int UVpitch); /** * Lock a portion of the texture for **write-only** pixel access. * * As an optimization, the pixels made available for editing don't necessarily * contain the old texture data. This is a write-only operation, and if you * need to keep a copy of the texture data you should do that at the * application level. * * You must use SDL_UnlockTexture() to unlock the pixels and apply any * changes. * * \param texture the texture to lock for access, which was created with * `SDL_TEXTUREACCESS_STREAMING` * \param rect an SDL_Rect structure representing the area to lock for access; * NULL to lock the entire texture * \param pixels this is filled in with a pointer to the locked pixels, * appropriately offset by the locked area * \param pitch this is filled in with the pitch of the locked pixels; the * pitch is the length of one row in bytes * \returns 0 on success or a negative error code if the texture is not valid * or was not created with `SDL_TEXTUREACCESS_STREAMING`; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_UnlockTexture */ extern DECLSPEC int SDLCALL SDL_LockTexture(SDL_Texture * texture, const SDL_Rect * rect, void **pixels, int *pitch); /** * Lock a portion of the texture for **write-only** pixel access, and expose * it as a SDL surface. * * Besides providing an SDL_Surface instead of raw pixel data, this function * operates like SDL_LockTexture. * * As an optimization, the pixels made available for editing don't necessarily * contain the old texture data. This is a write-only operation, and if you * need to keep a copy of the texture data you should do that at the * application level. * * You must use SDL_UnlockTexture() to unlock the pixels and apply any * changes. * * The returned surface is freed internally after calling SDL_UnlockTexture() * or SDL_DestroyTexture(). The caller should not free it. * * \param texture the texture to lock for access, which was created with * `SDL_TEXTUREACCESS_STREAMING` * \param rect a pointer to the rectangle to lock for access. If the rect is * NULL, the entire texture will be locked * \param surface this is filled in with an SDL surface representing the * locked area * \returns 0 on success, or -1 if the texture is not valid or was not created * with `SDL_TEXTUREACCESS_STREAMING` * * \since This function is available since SDL 2.0.12. * * \sa SDL_LockTexture * \sa SDL_UnlockTexture */ extern DECLSPEC int SDLCALL SDL_LockTextureToSurface(SDL_Texture *texture, const SDL_Rect *rect, SDL_Surface **surface); /** * Unlock a texture, uploading the changes to video memory, if needed. * * **Warning**: Please note that SDL_LockTexture() is intended to be * write-only; it will not guarantee the previous contents of the texture will * be provided. You must fully initialize any area of a texture that you lock * before unlocking it, as the pixels might otherwise be uninitialized memory. * * Which is to say: locking and immediately unlocking a texture can result in * corrupted textures, depending on the renderer in use. * * \param texture a texture locked by SDL_LockTexture() * * \since This function is available since SDL 2.0.0. * * \sa SDL_LockTexture */ extern DECLSPEC void SDLCALL SDL_UnlockTexture(SDL_Texture * texture); /** * Determine whether a renderer supports the use of render targets. * * \param renderer the renderer that will be checked * \returns SDL_TRUE if supported or SDL_FALSE if not. * * \since This function is available since SDL 2.0.0. * * \sa SDL_SetRenderTarget */ extern DECLSPEC SDL_bool SDLCALL SDL_RenderTargetSupported(SDL_Renderer *renderer); /** * Set a texture as the current rendering target. * * Before using this function, you should check the * `SDL_RENDERER_TARGETTEXTURE` bit in the flags of SDL_RendererInfo to see if * render targets are supported. * * The default render target is the window for which the renderer was created. * To stop rendering to a texture and render to the window again, call this * function with a NULL `texture`. * * \param renderer the rendering context * \param texture the targeted texture, which must be created with the * `SDL_TEXTUREACCESS_TARGET` flag, or NULL to render to the * window instead of a texture. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetRenderTarget */ extern DECLSPEC int SDLCALL SDL_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture); /** * Get the current render target. * * The default render target is the window for which the renderer was created, * and is reported a NULL here. * * \param renderer the rendering context * \returns the current render target or NULL for the default render target. * * \since This function is available since SDL 2.0.0. * * \sa SDL_SetRenderTarget */ extern DECLSPEC SDL_Texture * SDLCALL SDL_GetRenderTarget(SDL_Renderer *renderer); /** * Set a device independent resolution for rendering. * * This function uses the viewport and scaling functionality to allow a fixed * logical resolution for rendering, regardless of the actual output * resolution. If the actual output resolution doesn't have the same aspect * ratio the output rendering will be centered within the output display. * * If the output display is a window, mouse and touch events in the window * will be filtered and scaled so they seem to arrive within the logical * resolution. The SDL_HINT_MOUSE_RELATIVE_SCALING hint controls whether * relative motion events are also scaled. * * If this function results in scaling or subpixel drawing by the rendering * backend, it will be handled using the appropriate quality hints. * * \param renderer the renderer for which resolution should be set * \param w the width of the logical resolution * \param h the height of the logical resolution * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_RenderGetLogicalSize */ extern DECLSPEC int SDLCALL SDL_RenderSetLogicalSize(SDL_Renderer * renderer, int w, int h); /** * Get device independent resolution for rendering. * * When using the main rendering target (eg no target texture is set): this * may return 0 for `w` and `h` if the SDL_Renderer has never had its logical * size set by SDL_RenderSetLogicalSize(). Otherwise it returns the logical * width and height. * * When using a target texture: Never return 0 for `w` and `h` at first. Then * it returns the logical width and height that are set. * * \param renderer a rendering context * \param w an int to be filled with the width * \param h an int to be filled with the height * * \since This function is available since SDL 2.0.0. * * \sa SDL_RenderSetLogicalSize */ extern DECLSPEC void SDLCALL SDL_RenderGetLogicalSize(SDL_Renderer * renderer, int *w, int *h); /** * Set whether to force integer scales for resolution-independent rendering. * * This function restricts the logical viewport to integer values - that is, * when a resolution is between two multiples of a logical size, the viewport * size is rounded down to the lower multiple. * * \param renderer the renderer for which integer scaling should be set * \param enable enable or disable the integer scaling for rendering * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.5. * * \sa SDL_RenderGetIntegerScale * \sa SDL_RenderSetLogicalSize */ extern DECLSPEC int SDLCALL SDL_RenderSetIntegerScale(SDL_Renderer * renderer, SDL_bool enable); /** * Get whether integer scales are forced for resolution-independent rendering. * * \param renderer the renderer from which integer scaling should be queried * \returns SDL_TRUE if integer scales are forced or SDL_FALSE if not and on * failure; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.5. * * \sa SDL_RenderSetIntegerScale */ extern DECLSPEC SDL_bool SDLCALL SDL_RenderGetIntegerScale(SDL_Renderer * renderer); /** * Set the drawing area for rendering on the current target. * * When the window is resized, the viewport is reset to fill the entire new * window size. * * \param renderer the rendering context * \param rect the SDL_Rect structure representing the drawing area, or NULL * to set the viewport to the entire target * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_RenderGetViewport */ extern DECLSPEC int SDLCALL SDL_RenderSetViewport(SDL_Renderer * renderer, const SDL_Rect * rect); /** * Get the drawing area for the current target. * * \param renderer the rendering context * \param rect an SDL_Rect structure filled in with the current drawing area * * \since This function is available since SDL 2.0.0. * * \sa SDL_RenderSetViewport */ extern DECLSPEC void SDLCALL SDL_RenderGetViewport(SDL_Renderer * renderer, SDL_Rect * rect); /** * Set the clip rectangle for rendering on the specified target. * * \param renderer the rendering context for which clip rectangle should be * set * \param rect an SDL_Rect structure representing the clip area, relative to * the viewport, or NULL to disable clipping * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_RenderGetClipRect * \sa SDL_RenderIsClipEnabled */ extern DECLSPEC int SDLCALL SDL_RenderSetClipRect(SDL_Renderer * renderer, const SDL_Rect * rect); /** * Get the clip rectangle for the current target. * * \param renderer the rendering context from which clip rectangle should be * queried * \param rect an SDL_Rect structure filled in with the current clipping area * or an empty rectangle if clipping is disabled * * \since This function is available since SDL 2.0.0. * * \sa SDL_RenderIsClipEnabled * \sa SDL_RenderSetClipRect */ extern DECLSPEC void SDLCALL SDL_RenderGetClipRect(SDL_Renderer * renderer, SDL_Rect * rect); /** * Get whether clipping is enabled on the given renderer. * * \param renderer the renderer from which clip state should be queried * \returns SDL_TRUE if clipping is enabled or SDL_FALSE if not; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.4. * * \sa SDL_RenderGetClipRect * \sa SDL_RenderSetClipRect */ extern DECLSPEC SDL_bool SDLCALL SDL_RenderIsClipEnabled(SDL_Renderer * renderer); /** * Set the drawing scale for rendering on the current target. * * The drawing coordinates are scaled by the x/y scaling factors before they * are used by the renderer. This allows resolution independent drawing with a * single coordinate system. * * If this results in scaling or subpixel drawing by the rendering backend, it * will be handled using the appropriate quality hints. For best results use * integer scaling factors. * * \param renderer a rendering context * \param scaleX the horizontal scaling factor * \param scaleY the vertical scaling factor * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_RenderGetScale * \sa SDL_RenderSetLogicalSize */ extern DECLSPEC int SDLCALL SDL_RenderSetScale(SDL_Renderer * renderer, float scaleX, float scaleY); /** * Get the drawing scale for the current target. * * \param renderer the renderer from which drawing scale should be queried * \param scaleX a pointer filled in with the horizontal scaling factor * \param scaleY a pointer filled in with the vertical scaling factor * * \since This function is available since SDL 2.0.0. * * \sa SDL_RenderSetScale */ extern DECLSPEC void SDLCALL SDL_RenderGetScale(SDL_Renderer * renderer, float *scaleX, float *scaleY); /** * Get logical coordinates of point in renderer when given real coordinates of * point in window. * * Logical coordinates will differ from real coordinates when render is scaled * and logical renderer size set * * \param renderer the renderer from which the logical coordinates should be * calculated * \param windowX the real X coordinate in the window * \param windowY the real Y coordinate in the window * \param logicalX the pointer filled with the logical x coordinate * \param logicalY the pointer filled with the logical y coordinate * * \since This function is available since SDL 2.0.18. * * \sa SDL_RenderGetScale * \sa SDL_RenderSetScale * \sa SDL_RenderGetLogicalSize * \sa SDL_RenderSetLogicalSize */ extern DECLSPEC void SDLCALL SDL_RenderWindowToLogical(SDL_Renderer * renderer, int windowX, int windowY, float *logicalX, float *logicalY); /** * Get real coordinates of point in window when given logical coordinates of * point in renderer. * * Logical coordinates will differ from real coordinates when render is scaled * and logical renderer size set * * \param renderer the renderer from which the window coordinates should be * calculated * \param logicalX the logical x coordinate * \param logicalY the logical y coordinate * \param windowX the pointer filled with the real X coordinate in the window * \param windowY the pointer filled with the real Y coordinate in the window * * \since This function is available since SDL 2.0.18. * * \sa SDL_RenderGetScale * \sa SDL_RenderSetScale * \sa SDL_RenderGetLogicalSize * \sa SDL_RenderSetLogicalSize */ extern DECLSPEC void SDLCALL SDL_RenderLogicalToWindow(SDL_Renderer * renderer, float logicalX, float logicalY, int *windowX, int *windowY); /** * Set the color used for drawing operations (Rect, Line and Clear). * * Set the color for drawing or filling rectangles, lines, and points, and for * SDL_RenderClear(). * * \param renderer the rendering context * \param r the red value used to draw on the rendering target * \param g the green value used to draw on the rendering target * \param b the blue value used to draw on the rendering target * \param a the alpha value used to draw on the rendering target; usually * `SDL_ALPHA_OPAQUE` (255). Use SDL_SetRenderDrawBlendMode to * specify how the alpha channel is used * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetRenderDrawColor * \sa SDL_RenderClear * \sa SDL_RenderDrawLine * \sa SDL_RenderDrawLines * \sa SDL_RenderDrawPoint * \sa SDL_RenderDrawPoints * \sa SDL_RenderDrawRect * \sa SDL_RenderDrawRects * \sa SDL_RenderFillRect * \sa SDL_RenderFillRects */ extern DECLSPEC int SDLCALL SDL_SetRenderDrawColor(SDL_Renderer * renderer, Uint8 r, Uint8 g, Uint8 b, Uint8 a); /** * Get the color used for drawing operations (Rect, Line and Clear). * * \param renderer the rendering context * \param r a pointer filled in with the red value used to draw on the * rendering target * \param g a pointer filled in with the green value used to draw on the * rendering target * \param b a pointer filled in with the blue value used to draw on the * rendering target * \param a a pointer filled in with the alpha value used to draw on the * rendering target; usually `SDL_ALPHA_OPAQUE` (255) * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_SetRenderDrawColor */ extern DECLSPEC int SDLCALL SDL_GetRenderDrawColor(SDL_Renderer * renderer, Uint8 * r, Uint8 * g, Uint8 * b, Uint8 * a); /** * Set the blend mode used for drawing operations (Fill and Line). * * If the blend mode is not supported, the closest supported mode is chosen. * * \param renderer the rendering context * \param blendMode the SDL_BlendMode to use for blending * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetRenderDrawBlendMode * \sa SDL_RenderDrawLine * \sa SDL_RenderDrawLines * \sa SDL_RenderDrawPoint * \sa SDL_RenderDrawPoints * \sa SDL_RenderDrawRect * \sa SDL_RenderDrawRects * \sa SDL_RenderFillRect * \sa SDL_RenderFillRects */ extern DECLSPEC int SDLCALL SDL_SetRenderDrawBlendMode(SDL_Renderer * renderer, SDL_BlendMode blendMode); /** * Get the blend mode used for drawing operations. * * \param renderer the rendering context * \param blendMode a pointer filled in with the current SDL_BlendMode * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_SetRenderDrawBlendMode */ extern DECLSPEC int SDLCALL SDL_GetRenderDrawBlendMode(SDL_Renderer * renderer, SDL_BlendMode *blendMode); /** * Clear the current rendering target with the drawing color. * * This function clears the entire rendering target, ignoring the viewport and * the clip rectangle. * * \param renderer the rendering context * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_SetRenderDrawColor */ extern DECLSPEC int SDLCALL SDL_RenderClear(SDL_Renderer * renderer); /** * Draw a point on the current rendering target. * * SDL_RenderDrawPoint() draws a single point. If you want to draw multiple, * use SDL_RenderDrawPoints() instead. * * \param renderer the rendering context * \param x the x coordinate of the point * \param y the y coordinate of the point * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_RenderDrawLine * \sa SDL_RenderDrawLines * \sa SDL_RenderDrawPoints * \sa SDL_RenderDrawRect * \sa SDL_RenderDrawRects * \sa SDL_RenderFillRect * \sa SDL_RenderFillRects * \sa SDL_RenderPresent * \sa SDL_SetRenderDrawBlendMode * \sa SDL_SetRenderDrawColor */ extern DECLSPEC int SDLCALL SDL_RenderDrawPoint(SDL_Renderer * renderer, int x, int y); /** * Draw multiple points on the current rendering target. * * \param renderer the rendering context * \param points an array of SDL_Point structures that represent the points to * draw * \param count the number of points to draw * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_RenderDrawLine * \sa SDL_RenderDrawLines * \sa SDL_RenderDrawPoint * \sa SDL_RenderDrawRect * \sa SDL_RenderDrawRects * \sa SDL_RenderFillRect * \sa SDL_RenderFillRects * \sa SDL_RenderPresent * \sa SDL_SetRenderDrawBlendMode * \sa SDL_SetRenderDrawColor */ extern DECLSPEC int SDLCALL SDL_RenderDrawPoints(SDL_Renderer * renderer, const SDL_Point * points, int count); /** * Draw a line on the current rendering target. * * SDL_RenderDrawLine() draws the line to include both end points. If you want * to draw multiple, connecting lines use SDL_RenderDrawLines() instead. * * \param renderer the rendering context * \param x1 the x coordinate of the start point * \param y1 the y coordinate of the start point * \param x2 the x coordinate of the end point * \param y2 the y coordinate of the end point * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_RenderDrawLines * \sa SDL_RenderDrawPoint * \sa SDL_RenderDrawPoints * \sa SDL_RenderDrawRect * \sa SDL_RenderDrawRects * \sa SDL_RenderFillRect * \sa SDL_RenderFillRects * \sa SDL_RenderPresent * \sa SDL_SetRenderDrawBlendMode * \sa SDL_SetRenderDrawColor */ extern DECLSPEC int SDLCALL SDL_RenderDrawLine(SDL_Renderer * renderer, int x1, int y1, int x2, int y2); /** * Draw a series of connected lines on the current rendering target. * * \param renderer the rendering context * \param points an array of SDL_Point structures representing points along * the lines * \param count the number of points, drawing count-1 lines * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_RenderDrawLine * \sa SDL_RenderDrawPoint * \sa SDL_RenderDrawPoints * \sa SDL_RenderDrawRect * \sa SDL_RenderDrawRects * \sa SDL_RenderFillRect * \sa SDL_RenderFillRects * \sa SDL_RenderPresent * \sa SDL_SetRenderDrawBlendMode * \sa SDL_SetRenderDrawColor */ extern DECLSPEC int SDLCALL SDL_RenderDrawLines(SDL_Renderer * renderer, const SDL_Point * points, int count); /** * Draw a rectangle on the current rendering target. * * \param renderer the rendering context * \param rect an SDL_Rect structure representing the rectangle to draw, or * NULL to outline the entire rendering target * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_RenderDrawLine * \sa SDL_RenderDrawLines * \sa SDL_RenderDrawPoint * \sa SDL_RenderDrawPoints * \sa SDL_RenderDrawRects * \sa SDL_RenderFillRect * \sa SDL_RenderFillRects * \sa SDL_RenderPresent * \sa SDL_SetRenderDrawBlendMode * \sa SDL_SetRenderDrawColor */ extern DECLSPEC int SDLCALL SDL_RenderDrawRect(SDL_Renderer * renderer, const SDL_Rect * rect); /** * Draw some number of rectangles on the current rendering target. * * \param renderer the rendering context * \param rects an array of SDL_Rect structures representing the rectangles to * be drawn * \param count the number of rectangles * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_RenderDrawLine * \sa SDL_RenderDrawLines * \sa SDL_RenderDrawPoint * \sa SDL_RenderDrawPoints * \sa SDL_RenderDrawRect * \sa SDL_RenderFillRect * \sa SDL_RenderFillRects * \sa SDL_RenderPresent * \sa SDL_SetRenderDrawBlendMode * \sa SDL_SetRenderDrawColor */ extern DECLSPEC int SDLCALL SDL_RenderDrawRects(SDL_Renderer * renderer, const SDL_Rect * rects, int count); /** * Fill a rectangle on the current rendering target with the drawing color. * * The current drawing color is set by SDL_SetRenderDrawColor(), and the * color's alpha value is ignored unless blending is enabled with the * appropriate call to SDL_SetRenderDrawBlendMode(). * * \param renderer the rendering context * \param rect the SDL_Rect structure representing the rectangle to fill, or * NULL for the entire rendering target * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_RenderDrawLine * \sa SDL_RenderDrawLines * \sa SDL_RenderDrawPoint * \sa SDL_RenderDrawPoints * \sa SDL_RenderDrawRect * \sa SDL_RenderDrawRects * \sa SDL_RenderFillRects * \sa SDL_RenderPresent * \sa SDL_SetRenderDrawBlendMode * \sa SDL_SetRenderDrawColor */ extern DECLSPEC int SDLCALL SDL_RenderFillRect(SDL_Renderer * renderer, const SDL_Rect * rect); /** * Fill some number of rectangles on the current rendering target with the * drawing color. * * \param renderer the rendering context * \param rects an array of SDL_Rect structures representing the rectangles to * be filled * \param count the number of rectangles * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_RenderDrawLine * \sa SDL_RenderDrawLines * \sa SDL_RenderDrawPoint * \sa SDL_RenderDrawPoints * \sa SDL_RenderDrawRect * \sa SDL_RenderDrawRects * \sa SDL_RenderFillRect * \sa SDL_RenderPresent */ extern DECLSPEC int SDLCALL SDL_RenderFillRects(SDL_Renderer * renderer, const SDL_Rect * rects, int count); /** * Copy a portion of the texture to the current rendering target. * * The texture is blended with the destination based on its blend mode set * with SDL_SetTextureBlendMode(). * * The texture color is affected based on its color modulation set by * SDL_SetTextureColorMod(). * * The texture alpha is affected based on its alpha modulation set by * SDL_SetTextureAlphaMod(). * * \param renderer the rendering context * \param texture the source texture * \param srcrect the source SDL_Rect structure or NULL for the entire texture * \param dstrect the destination SDL_Rect structure or NULL for the entire * rendering target; the texture will be stretched to fill the * given rectangle * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_RenderCopyEx * \sa SDL_SetTextureAlphaMod * \sa SDL_SetTextureBlendMode * \sa SDL_SetTextureColorMod */ extern DECLSPEC int SDLCALL SDL_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, const SDL_Rect * srcrect, const SDL_Rect * dstrect); /** * Copy a portion of the texture to the current rendering, with optional * rotation and flipping. * * Copy a portion of the texture to the current rendering target, optionally * rotating it by angle around the given center and also flipping it * top-bottom and/or left-right. * * The texture is blended with the destination based on its blend mode set * with SDL_SetTextureBlendMode(). * * The texture color is affected based on its color modulation set by * SDL_SetTextureColorMod(). * * The texture alpha is affected based on its alpha modulation set by * SDL_SetTextureAlphaMod(). * * \param renderer the rendering context * \param texture the source texture * \param srcrect the source SDL_Rect structure or NULL for the entire texture * \param dstrect the destination SDL_Rect structure or NULL for the entire * rendering target * \param angle an angle in degrees that indicates the rotation that will be * applied to dstrect, rotating it in a clockwise direction * \param center a pointer to a point indicating the point around which * dstrect will be rotated (if NULL, rotation will be done * around `dstrect.w / 2`, `dstrect.h / 2`) * \param flip a SDL_RendererFlip value stating which flipping actions should * be performed on the texture * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_RenderCopy * \sa SDL_SetTextureAlphaMod * \sa SDL_SetTextureBlendMode * \sa SDL_SetTextureColorMod */ extern DECLSPEC int SDLCALL SDL_RenderCopyEx(SDL_Renderer * renderer, SDL_Texture * texture, const SDL_Rect * srcrect, const SDL_Rect * dstrect, const double angle, const SDL_Point *center, const SDL_RendererFlip flip); /** * Draw a point on the current rendering target at subpixel precision. * * \param renderer The renderer which should draw a point. * \param x The x coordinate of the point. * \param y The y coordinate of the point. * \return 0 on success, or -1 on error * * \since This function is available since SDL 2.0.10. */ extern DECLSPEC int SDLCALL SDL_RenderDrawPointF(SDL_Renderer * renderer, float x, float y); /** * Draw multiple points on the current rendering target at subpixel precision. * * \param renderer The renderer which should draw multiple points. * \param points The points to draw * \param count The number of points to draw * \return 0 on success, or -1 on error * * \since This function is available since SDL 2.0.10. */ extern DECLSPEC int SDLCALL SDL_RenderDrawPointsF(SDL_Renderer * renderer, const SDL_FPoint * points, int count); /** * Draw a line on the current rendering target at subpixel precision. * * \param renderer The renderer which should draw a line. * \param x1 The x coordinate of the start point. * \param y1 The y coordinate of the start point. * \param x2 The x coordinate of the end point. * \param y2 The y coordinate of the end point. * \return 0 on success, or -1 on error * * \since This function is available since SDL 2.0.10. */ extern DECLSPEC int SDLCALL SDL_RenderDrawLineF(SDL_Renderer * renderer, float x1, float y1, float x2, float y2); /** * Draw a series of connected lines on the current rendering target at * subpixel precision. * * \param renderer The renderer which should draw multiple lines. * \param points The points along the lines * \param count The number of points, drawing count-1 lines * \return 0 on success, or -1 on error * * \since This function is available since SDL 2.0.10. */ extern DECLSPEC int SDLCALL SDL_RenderDrawLinesF(SDL_Renderer * renderer, const SDL_FPoint * points, int count); /** * Draw a rectangle on the current rendering target at subpixel precision. * * \param renderer The renderer which should draw a rectangle. * \param rect A pointer to the destination rectangle, or NULL to outline the * entire rendering target. * \return 0 on success, or -1 on error * * \since This function is available since SDL 2.0.10. */ extern DECLSPEC int SDLCALL SDL_RenderDrawRectF(SDL_Renderer * renderer, const SDL_FRect * rect); /** * Draw some number of rectangles on the current rendering target at subpixel * precision. * * \param renderer The renderer which should draw multiple rectangles. * \param rects A pointer to an array of destination rectangles. * \param count The number of rectangles. * \return 0 on success, or -1 on error * * \since This function is available since SDL 2.0.10. */ extern DECLSPEC int SDLCALL SDL_RenderDrawRectsF(SDL_Renderer * renderer, const SDL_FRect * rects, int count); /** * Fill a rectangle on the current rendering target with the drawing color at * subpixel precision. * * \param renderer The renderer which should fill a rectangle. * \param rect A pointer to the destination rectangle, or NULL for the entire * rendering target. * \return 0 on success, or -1 on error * * \since This function is available since SDL 2.0.10. */ extern DECLSPEC int SDLCALL SDL_RenderFillRectF(SDL_Renderer * renderer, const SDL_FRect * rect); /** * Fill some number of rectangles on the current rendering target with the * drawing color at subpixel precision. * * \param renderer The renderer which should fill multiple rectangles. * \param rects A pointer to an array of destination rectangles. * \param count The number of rectangles. * \return 0 on success, or -1 on error * * \since This function is available since SDL 2.0.10. */ extern DECLSPEC int SDLCALL SDL_RenderFillRectsF(SDL_Renderer * renderer, const SDL_FRect * rects, int count); /** * Copy a portion of the texture to the current rendering target at subpixel * precision. * * \param renderer The renderer which should copy parts of a texture. * \param texture The source texture. * \param srcrect A pointer to the source rectangle, or NULL for the entire * texture. * \param dstrect A pointer to the destination rectangle, or NULL for the * entire rendering target. * \return 0 on success, or -1 on error * * \since This function is available since SDL 2.0.10. */ extern DECLSPEC int SDLCALL SDL_RenderCopyF(SDL_Renderer * renderer, SDL_Texture * texture, const SDL_Rect * srcrect, const SDL_FRect * dstrect); /** * Copy a portion of the source texture to the current rendering target, with * rotation and flipping, at subpixel precision. * * \param renderer The renderer which should copy parts of a texture. * \param texture The source texture. * \param srcrect A pointer to the source rectangle, or NULL for the entire * texture. * \param dstrect A pointer to the destination rectangle, or NULL for the * entire rendering target. * \param angle An angle in degrees that indicates the rotation that will be * applied to dstrect, rotating it in a clockwise direction * \param center A pointer to a point indicating the point around which * dstrect will be rotated (if NULL, rotation will be done * around dstrect.w/2, dstrect.h/2). * \param flip An SDL_RendererFlip value stating which flipping actions should * be performed on the texture * \return 0 on success, or -1 on error * * \since This function is available since SDL 2.0.10. */ extern DECLSPEC int SDLCALL SDL_RenderCopyExF(SDL_Renderer * renderer, SDL_Texture * texture, const SDL_Rect * srcrect, const SDL_FRect * dstrect, const double angle, const SDL_FPoint *center, const SDL_RendererFlip flip); /** * Render a list of triangles, optionally using a texture and indices into the * vertex array Color and alpha modulation is done per vertex * (SDL_SetTextureColorMod and SDL_SetTextureAlphaMod are ignored). * * \param renderer The rendering context. * \param texture (optional) The SDL texture to use. * \param vertices Vertices. * \param num_vertices Number of vertices. * \param indices (optional) An array of integer indices into the 'vertices' * array, if NULL all vertices will be rendered in sequential * order. * \param num_indices Number of indices. * \return 0 on success, or -1 if the operation is not supported * * \since This function is available since SDL 2.0.18. * * \sa SDL_RenderGeometryRaw * \sa SDL_Vertex */ extern DECLSPEC int SDLCALL SDL_RenderGeometry(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Vertex *vertices, int num_vertices, const int *indices, int num_indices); /** * Render a list of triangles, optionally using a texture and indices into the * vertex arrays Color and alpha modulation is done per vertex * (SDL_SetTextureColorMod and SDL_SetTextureAlphaMod are ignored). * * \param renderer The rendering context. * \param texture (optional) The SDL texture to use. * \param xy Vertex positions * \param xy_stride Byte size to move from one element to the next element * \param color Vertex colors (as SDL_Color) * \param color_stride Byte size to move from one element to the next element * \param uv Vertex normalized texture coordinates * \param uv_stride Byte size to move from one element to the next element * \param num_vertices Number of vertices. * \param indices (optional) An array of indices into the 'vertices' arrays, * if NULL all vertices will be rendered in sequential order. * \param num_indices Number of indices. * \param size_indices Index size: 1 (byte), 2 (short), 4 (int) * \return 0 on success, or -1 if the operation is not supported * * \since This function is available since SDL 2.0.18. * * \sa SDL_RenderGeometry * \sa SDL_Vertex */ extern DECLSPEC int SDLCALL SDL_RenderGeometryRaw(SDL_Renderer *renderer, SDL_Texture *texture, const float *xy, int xy_stride, const SDL_Color *color, int color_stride, const float *uv, int uv_stride, int num_vertices, const void *indices, int num_indices, int size_indices); /** * Read pixels from the current rendering target to an array of pixels. * * **WARNING**: This is a very slow operation, and should not be used * frequently. If you're using this on the main rendering target, it should be * called after rendering and before SDL_RenderPresent(). * * `pitch` specifies the number of bytes between rows in the destination * `pixels` data. This allows you to write to a subrectangle or have padded * rows in the destination. Generally, `pitch` should equal the number of * pixels per row in the `pixels` data times the number of bytes per pixel, * but it might contain additional padding (for example, 24bit RGB Windows * Bitmap data pads all rows to multiples of 4 bytes). * * \param renderer the rendering context * \param rect an SDL_Rect structure representing the area to read, or NULL * for the entire render target * \param format an SDL_PixelFormatEnum value of the desired format of the * pixel data, or 0 to use the format of the rendering target * \param pixels a pointer to the pixel data to copy into * \param pitch the pitch of the `pixels` parameter * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC int SDLCALL SDL_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect, Uint32 format, void *pixels, int pitch); /** * Update the screen with any rendering performed since the previous call. * * SDL's rendering functions operate on a backbuffer; that is, calling a * rendering function such as SDL_RenderDrawLine() does not directly put a * line on the screen, but rather updates the backbuffer. As such, you compose * your entire scene and *present* the composed backbuffer to the screen as a * complete picture. * * Therefore, when using SDL's rendering API, one does all drawing intended * for the frame, and then calls this function once per frame to present the * final drawing to the user. * * The backbuffer should be considered invalidated after each present; do not * assume that previous contents will exist between frames. You are strongly * encouraged to call SDL_RenderClear() to initialize the backbuffer before * starting each new frame's drawing, even if you plan to overwrite every * pixel. * * \param renderer the rendering context * * \threadsafety You may only call this function on the main thread. If this * happens to work on a background thread on any given platform * or backend, it's purely by luck and you should not rely on it * to work next time. * * \since This function is available since SDL 2.0.0. * * \sa SDL_RenderClear * \sa SDL_RenderDrawLine * \sa SDL_RenderDrawLines * \sa SDL_RenderDrawPoint * \sa SDL_RenderDrawPoints * \sa SDL_RenderDrawRect * \sa SDL_RenderDrawRects * \sa SDL_RenderFillRect * \sa SDL_RenderFillRects * \sa SDL_SetRenderDrawBlendMode * \sa SDL_SetRenderDrawColor */ extern DECLSPEC void SDLCALL SDL_RenderPresent(SDL_Renderer * renderer); /** * Destroy the specified texture. * * Passing NULL or an otherwise invalid texture will set the SDL error message * to "Invalid texture". * * \param texture the texture to destroy * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateTexture * \sa SDL_CreateTextureFromSurface */ extern DECLSPEC void SDLCALL SDL_DestroyTexture(SDL_Texture * texture); /** * Destroy the rendering context for a window and free associated textures. * * If `renderer` is NULL, this function will return immediately after setting * the SDL error message to "Invalid renderer". See SDL_GetError(). * * \param renderer the rendering context * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateRenderer */ extern DECLSPEC void SDLCALL SDL_DestroyRenderer(SDL_Renderer * renderer); /** * Force the rendering context to flush any pending commands to the underlying * rendering API. * * You do not need to (and in fact, shouldn't) call this function unless you * are planning to call into OpenGL/Direct3D/Metal/whatever directly in * addition to using an SDL_Renderer. * * This is for a very-specific case: if you are using SDL's render API, you * asked for a specific renderer backend (OpenGL, Direct3D, etc), you set * SDL_HINT_RENDER_BATCHING to "1", and you plan to make OpenGL/D3D/whatever * calls in addition to SDL render API calls. If all of this applies, you * should call SDL_RenderFlush() between calls to SDL's render API and the * low-level API you're using in cooperation. * * In all other cases, you can ignore this function. This is only here to get * maximum performance out of a specific situation. In all other cases, SDL * will do the right thing, perhaps at a performance loss. * * This function is first available in SDL 2.0.10, and is not needed in 2.0.9 * and earlier, as earlier versions did not queue rendering commands at all, * instead flushing them to the OS immediately. * * \param renderer the rendering context * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.10. */ extern DECLSPEC int SDLCALL SDL_RenderFlush(SDL_Renderer * renderer); /** * Bind an OpenGL/ES/ES2 texture to the current context. * * This is for use with OpenGL instructions when rendering OpenGL primitives * directly. * * If not NULL, `texw` and `texh` will be filled with the width and height * values suitable for the provided texture. In most cases, both will be 1.0, * however, on systems that support the GL_ARB_texture_rectangle extension, * these values will actually be the pixel width and height used to create the * texture, so this factor needs to be taken into account when providing * texture coordinates to OpenGL. * * You need a renderer to create an SDL_Texture, therefore you can only use * this function with an implicit OpenGL context from SDL_CreateRenderer(), * not with your own OpenGL context. If you need control over your OpenGL * context, you need to write your own texture-loading methods. * * Also note that SDL may upload RGB textures as BGR (or vice-versa), and * re-order the color channels in the shaders phase, so the uploaded texture * may have swapped color channels. * * \param texture the texture to bind to the current OpenGL/ES/ES2 context * \param texw a pointer to a float value which will be filled with the * texture width or NULL if you don't need that value * \param texh a pointer to a float value which will be filled with the * texture height or NULL if you don't need that value * \returns 0 on success, or -1 if the operation is not supported; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GL_MakeCurrent * \sa SDL_GL_UnbindTexture */ extern DECLSPEC int SDLCALL SDL_GL_BindTexture(SDL_Texture *texture, float *texw, float *texh); /** * Unbind an OpenGL/ES/ES2 texture from the current context. * * See SDL_GL_BindTexture() for examples on how to use these functions * * \param texture the texture to unbind from the current OpenGL/ES/ES2 context * \returns 0 on success, or -1 if the operation is not supported * * \since This function is available since SDL 2.0.0. * * \sa SDL_GL_BindTexture * \sa SDL_GL_MakeCurrent */ extern DECLSPEC int SDLCALL SDL_GL_UnbindTexture(SDL_Texture *texture); /** * Get the CAMetalLayer associated with the given Metal renderer. * * This function returns `void *`, so SDL doesn't have to include Metal's * headers, but it can be safely cast to a `CAMetalLayer *`. * * \param renderer The renderer to query * \returns a `CAMetalLayer *` on success, or NULL if the renderer isn't a * Metal renderer * * \since This function is available since SDL 2.0.8. * * \sa SDL_RenderGetMetalCommandEncoder */ extern DECLSPEC void *SDLCALL SDL_RenderGetMetalLayer(SDL_Renderer * renderer); /** * Get the Metal command encoder for the current frame * * This function returns `void *`, so SDL doesn't have to include Metal's * headers, but it can be safely cast to an `id`. * * Note that as of SDL 2.0.18, this will return NULL if Metal refuses to give * SDL a drawable to render to, which might happen if the window is * hidden/minimized/offscreen. This doesn't apply to command encoders for * render targets, just the window's backbuffer. Check your return values! * * \param renderer The renderer to query * \returns an `id` on success, or NULL if the * renderer isn't a Metal renderer or there was an error. * * \since This function is available since SDL 2.0.8. * * \sa SDL_RenderGetMetalLayer */ extern DECLSPEC void *SDLCALL SDL_RenderGetMetalCommandEncoder(SDL_Renderer * renderer); /** * Toggle VSync of the given renderer. * * \param renderer The renderer to toggle * \param vsync 1 for on, 0 for off. All other values are reserved * \returns a 0 int on success, or non-zero on failure * * \since This function is available since SDL 2.0.18. */ extern DECLSPEC int SDLCALL SDL_RenderSetVSync(SDL_Renderer* renderer, int vsync); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_render_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_revision.h ================================================ /* #undef SDL_VENDOR_INFO */ #define SDL_REVISION_NUMBER 0 #ifdef SDL_VENDOR_INFO #define SDL_REVISION "SDL-2.30.4-no-vcs (" SDL_VENDOR_INFO ")" #else #define SDL_REVISION "SDL-2.30.4-no-vcs" #endif ================================================ FILE: libraries/sdl2/SDL_rwops.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_rwops.h * * This file provides a general interface for SDL to read and write * data streams. It can easily be extended to files, memory, etc. */ #ifndef SDL_rwops_h_ #define SDL_rwops_h_ #include "SDL_stdinc.h" #include "SDL_error.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /* RWops Types */ #define SDL_RWOPS_UNKNOWN 0U /**< Unknown stream type */ #define SDL_RWOPS_WINFILE 1U /**< Win32 file */ #define SDL_RWOPS_STDFILE 2U /**< Stdio file */ #define SDL_RWOPS_JNIFILE 3U /**< Android asset */ #define SDL_RWOPS_MEMORY 4U /**< Memory stream */ #define SDL_RWOPS_MEMORY_RO 5U /**< Read-Only memory stream */ /** * This is the read/write operation structure -- very basic. */ typedef struct SDL_RWops { /** * Return the size of the file in this rwops, or -1 if unknown */ Sint64 (SDLCALL * size) (struct SDL_RWops * context); /** * Seek to \c offset relative to \c whence, one of stdio's whence values: * RW_SEEK_SET, RW_SEEK_CUR, RW_SEEK_END * * \return the final offset in the data stream, or -1 on error. */ Sint64 (SDLCALL * seek) (struct SDL_RWops * context, Sint64 offset, int whence); /** * Read up to \c maxnum objects each of size \c size from the data * stream to the area pointed at by \c ptr. * * \return the number of objects read, or 0 at error or end of file. */ size_t (SDLCALL * read) (struct SDL_RWops * context, void *ptr, size_t size, size_t maxnum); /** * Write exactly \c num objects each of size \c size from the area * pointed at by \c ptr to data stream. * * \return the number of objects written, or 0 at error or end of file. */ size_t (SDLCALL * write) (struct SDL_RWops * context, const void *ptr, size_t size, size_t num); /** * Close and free an allocated SDL_RWops structure. * * \return 0 if successful or -1 on write error when flushing data. */ int (SDLCALL * close) (struct SDL_RWops * context); Uint32 type; union { #if defined(__ANDROID__) struct { void *asset; } androidio; #elif defined(__WIN32__) || defined(__GDK__) struct { SDL_bool append; void *h; struct { void *data; size_t size; size_t left; } buffer; } windowsio; #endif #ifdef HAVE_STDIO_H struct { SDL_bool autoclose; FILE *fp; } stdio; #endif struct { Uint8 *base; Uint8 *here; Uint8 *stop; } mem; struct { void *data1; void *data2; } unknown; } hidden; } SDL_RWops; /** * \name RWFrom functions * * Functions to create SDL_RWops structures from various data streams. */ /* @{ */ /** * Use this function to create a new SDL_RWops structure for reading from * and/or writing to a named file. * * The `mode` string is treated roughly the same as in a call to the C * library's fopen(), even if SDL doesn't happen to use fopen() behind the * scenes. * * Available `mode` strings: * * - "r": Open a file for reading. The file must exist. * - "w": Create an empty file for writing. If a file with the same name * already exists its content is erased and the file is treated as a new * empty file. * - "a": Append to a file. Writing operations append data at the end of the * file. The file is created if it does not exist. * - "r+": Open a file for update both reading and writing. The file must * exist. * - "w+": Create an empty file for both reading and writing. If a file with * the same name already exists its content is erased and the file is * treated as a new empty file. * - "a+": Open a file for reading and appending. All writing operations are * performed at the end of the file, protecting the previous content to be * overwritten. You can reposition (fseek, rewind) the internal pointer to * anywhere in the file for reading, but writing operations will move it * back to the end of file. The file is created if it does not exist. * * **NOTE**: In order to open a file as a binary file, a "b" character has to * be included in the `mode` string. This additional "b" character can either * be appended at the end of the string (thus making the following compound * modes: "rb", "wb", "ab", "r+b", "w+b", "a+b") or be inserted between the * letter and the "+" sign for the mixed modes ("rb+", "wb+", "ab+"). * Additional characters may follow the sequence, although they should have no * effect. For example, "t" is sometimes appended to make explicit the file is * a text file. * * This function supports Unicode filenames, but they must be encoded in UTF-8 * format, regardless of the underlying operating system. * * As a fallback, SDL_RWFromFile() will transparently open a matching filename * in an Android app's `assets`. * * Closing the SDL_RWops will close the file handle SDL is holding internally. * * \param file a UTF-8 string representing the filename to open * \param mode an ASCII string representing the mode to be used for opening * the file. * \returns a pointer to the SDL_RWops structure that is created, or NULL on * failure; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_RWclose * \sa SDL_RWFromConstMem * \sa SDL_RWFromFP * \sa SDL_RWFromMem * \sa SDL_RWread * \sa SDL_RWseek * \sa SDL_RWtell * \sa SDL_RWwrite */ extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFile(const char *file, const char *mode); #ifdef HAVE_STDIO_H extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFP(FILE * fp, SDL_bool autoclose); #else /** * Use this function to create an SDL_RWops structure from a standard I/O file * pointer (stdio.h's `FILE*`). * * This function is not available on Windows, since files opened in an * application on that platform cannot be used by a dynamically linked * library. * * On some platforms, the first parameter is a `void*`, on others, it's a * `FILE*`, depending on what system headers are available to SDL. It is * always intended to be the `FILE*` type from the C runtime's stdio.h. * * \param fp the `FILE*` that feeds the SDL_RWops stream * \param autoclose SDL_TRUE to close the `FILE*` when closing the SDL_RWops, * SDL_FALSE to leave the `FILE*` open when the RWops is * closed * \returns a pointer to the SDL_RWops structure that is created, or NULL on * failure; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_RWclose * \sa SDL_RWFromConstMem * \sa SDL_RWFromFile * \sa SDL_RWFromMem * \sa SDL_RWread * \sa SDL_RWseek * \sa SDL_RWtell * \sa SDL_RWwrite */ extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFP(void * fp, SDL_bool autoclose); #endif /** * Use this function to prepare a read-write memory buffer for use with * SDL_RWops. * * This function sets up an SDL_RWops struct based on a memory area of a * certain size, for both read and write access. * * This memory buffer is not copied by the RWops; the pointer you provide must * remain valid until you close the stream. Closing the stream will not free * the original buffer. * * If you need to make sure the RWops never writes to the memory buffer, you * should use SDL_RWFromConstMem() with a read-only buffer of memory instead. * * \param mem a pointer to a buffer to feed an SDL_RWops stream * \param size the buffer size, in bytes * \returns a pointer to a new SDL_RWops structure, or NULL if it fails; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_RWclose * \sa SDL_RWFromConstMem * \sa SDL_RWFromFile * \sa SDL_RWFromFP * \sa SDL_RWFromMem * \sa SDL_RWread * \sa SDL_RWseek * \sa SDL_RWtell * \sa SDL_RWwrite */ extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromMem(void *mem, int size); /** * Use this function to prepare a read-only memory buffer for use with RWops. * * This function sets up an SDL_RWops struct based on a memory area of a * certain size. It assumes the memory area is not writable. * * Attempting to write to this RWops stream will report an error without * writing to the memory buffer. * * This memory buffer is not copied by the RWops; the pointer you provide must * remain valid until you close the stream. Closing the stream will not free * the original buffer. * * If you need to write to a memory buffer, you should use SDL_RWFromMem() * with a writable buffer of memory instead. * * \param mem a pointer to a read-only buffer to feed an SDL_RWops stream * \param size the buffer size, in bytes * \returns a pointer to a new SDL_RWops structure, or NULL if it fails; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_RWclose * \sa SDL_RWFromConstMem * \sa SDL_RWFromFile * \sa SDL_RWFromFP * \sa SDL_RWFromMem * \sa SDL_RWread * \sa SDL_RWseek * \sa SDL_RWtell */ extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromConstMem(const void *mem, int size); /* @} *//* RWFrom functions */ /** * Use this function to allocate an empty, unpopulated SDL_RWops structure. * * Applications do not need to use this function unless they are providing * their own SDL_RWops implementation. If you just need a SDL_RWops to * read/write a common data source, you should use the built-in * implementations in SDL, like SDL_RWFromFile() or SDL_RWFromMem(), etc. * * You must free the returned pointer with SDL_FreeRW(). Depending on your * operating system and compiler, there may be a difference between the * malloc() and free() your program uses and the versions SDL calls * internally. Trying to mix the two can cause crashing such as segmentation * faults. Since all SDL_RWops must free themselves when their **close** * method is called, all SDL_RWops must be allocated through this function, so * they can all be freed correctly with SDL_FreeRW(). * * \returns a pointer to the allocated memory on success, or NULL on failure; * call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_FreeRW */ extern DECLSPEC SDL_RWops *SDLCALL SDL_AllocRW(void); /** * Use this function to free an SDL_RWops structure allocated by * SDL_AllocRW(). * * Applications do not need to use this function unless they are providing * their own SDL_RWops implementation. If you just need a SDL_RWops to * read/write a common data source, you should use the built-in * implementations in SDL, like SDL_RWFromFile() or SDL_RWFromMem(), etc, and * call the **close** method on those SDL_RWops pointers when you are done * with them. * * Only use SDL_FreeRW() on pointers returned by SDL_AllocRW(). The pointer is * invalid as soon as this function returns. Any extra memory allocated during * creation of the SDL_RWops is not freed by SDL_FreeRW(); the programmer must * be responsible for managing that memory in their **close** method. * * \param area the SDL_RWops structure to be freed * * \since This function is available since SDL 2.0.0. * * \sa SDL_AllocRW */ extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWops * area); #define RW_SEEK_SET 0 /**< Seek from the beginning of data */ #define RW_SEEK_CUR 1 /**< Seek relative to current read point */ #define RW_SEEK_END 2 /**< Seek relative to the end of data */ /** * Use this function to get the size of the data stream in an SDL_RWops. * * Prior to SDL 2.0.10, this function was a macro. * * \param context the SDL_RWops to get the size of the data stream from * \returns the size of the data stream in the SDL_RWops on success, -1 if * unknown or a negative error code on failure; call SDL_GetError() * for more information. * * \since This function is available since SDL 2.0.10. */ extern DECLSPEC Sint64 SDLCALL SDL_RWsize(SDL_RWops *context); /** * Seek within an SDL_RWops data stream. * * This function seeks to byte `offset`, relative to `whence`. * * `whence` may be any of the following values: * * - `RW_SEEK_SET`: seek from the beginning of data * - `RW_SEEK_CUR`: seek relative to current read point * - `RW_SEEK_END`: seek relative to the end of data * * If this stream can not seek, it will return -1. * * SDL_RWseek() is actually a wrapper function that calls the SDL_RWops's * `seek` method appropriately, to simplify application development. * * Prior to SDL 2.0.10, this function was a macro. * * \param context a pointer to an SDL_RWops structure * \param offset an offset in bytes, relative to **whence** location; can be * negative * \param whence any of `RW_SEEK_SET`, `RW_SEEK_CUR`, `RW_SEEK_END` * \returns the final offset in the data stream after the seek or -1 on error. * * \since This function is available since SDL 2.0.10. * * \sa SDL_RWclose * \sa SDL_RWFromConstMem * \sa SDL_RWFromFile * \sa SDL_RWFromFP * \sa SDL_RWFromMem * \sa SDL_RWread * \sa SDL_RWtell * \sa SDL_RWwrite */ extern DECLSPEC Sint64 SDLCALL SDL_RWseek(SDL_RWops *context, Sint64 offset, int whence); /** * Determine the current read/write offset in an SDL_RWops data stream. * * SDL_RWtell is actually a wrapper function that calls the SDL_RWops's `seek` * method, with an offset of 0 bytes from `RW_SEEK_CUR`, to simplify * application development. * * Prior to SDL 2.0.10, this function was a macro. * * \param context a SDL_RWops data stream object from which to get the current * offset * \returns the current offset in the stream, or -1 if the information can not * be determined. * * \since This function is available since SDL 2.0.10. * * \sa SDL_RWclose * \sa SDL_RWFromConstMem * \sa SDL_RWFromFile * \sa SDL_RWFromFP * \sa SDL_RWFromMem * \sa SDL_RWread * \sa SDL_RWseek * \sa SDL_RWwrite */ extern DECLSPEC Sint64 SDLCALL SDL_RWtell(SDL_RWops *context); /** * Read from a data source. * * This function reads up to `maxnum` objects each of size `size` from the * data source to the area pointed at by `ptr`. This function may read less * objects than requested. It will return zero when there has been an error or * the data stream is completely read. * * SDL_RWread() is actually a function wrapper that calls the SDL_RWops's * `read` method appropriately, to simplify application development. * * Prior to SDL 2.0.10, this function was a macro. * * \param context a pointer to an SDL_RWops structure * \param ptr a pointer to a buffer to read data into * \param size the size of each object to read, in bytes * \param maxnum the maximum number of objects to be read * \returns the number of objects read, or 0 at error or end of file; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.10. * * \sa SDL_RWclose * \sa SDL_RWFromConstMem * \sa SDL_RWFromFile * \sa SDL_RWFromFP * \sa SDL_RWFromMem * \sa SDL_RWseek * \sa SDL_RWwrite */ extern DECLSPEC size_t SDLCALL SDL_RWread(SDL_RWops *context, void *ptr, size_t size, size_t maxnum); /** * Write to an SDL_RWops data stream. * * This function writes exactly `num` objects each of size `size` from the * area pointed at by `ptr` to the stream. If this fails for any reason, it'll * return less than `num` to demonstrate how far the write progressed. On * success, it returns `num`. * * SDL_RWwrite is actually a function wrapper that calls the SDL_RWops's * `write` method appropriately, to simplify application development. * * Prior to SDL 2.0.10, this function was a macro. * * \param context a pointer to an SDL_RWops structure * \param ptr a pointer to a buffer containing data to write * \param size the size of an object to write, in bytes * \param num the number of objects to write * \returns the number of objects written, which will be less than **num** on * error; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.10. * * \sa SDL_RWclose * \sa SDL_RWFromConstMem * \sa SDL_RWFromFile * \sa SDL_RWFromFP * \sa SDL_RWFromMem * \sa SDL_RWread * \sa SDL_RWseek */ extern DECLSPEC size_t SDLCALL SDL_RWwrite(SDL_RWops *context, const void *ptr, size_t size, size_t num); /** * Close and free an allocated SDL_RWops structure. * * SDL_RWclose() closes and cleans up the SDL_RWops stream. It releases any * resources used by the stream and frees the SDL_RWops itself with * SDL_FreeRW(). This returns 0 on success, or -1 if the stream failed to * flush to its output (e.g. to disk). * * Note that if this fails to flush the stream to disk, this function reports * an error, but the SDL_RWops is still invalid once this function returns. * * Prior to SDL 2.0.10, this function was a macro. * * \param context SDL_RWops structure to close * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.10. * * \sa SDL_RWFromConstMem * \sa SDL_RWFromFile * \sa SDL_RWFromFP * \sa SDL_RWFromMem * \sa SDL_RWread * \sa SDL_RWseek * \sa SDL_RWwrite */ extern DECLSPEC int SDLCALL SDL_RWclose(SDL_RWops *context); /** * Load all the data from an SDL data stream. * * The data is allocated with a zero byte at the end (null terminated) for * convenience. This extra byte is not included in the value reported via * `datasize`. * * The data should be freed with SDL_free(). * * \param src the SDL_RWops to read all available data from * \param datasize if not NULL, will store the number of bytes read * \param freesrc if non-zero, calls SDL_RWclose() on `src` before returning * \returns the data, or NULL if there was an error. * * \since This function is available since SDL 2.0.6. */ extern DECLSPEC void *SDLCALL SDL_LoadFile_RW(SDL_RWops *src, size_t *datasize, int freesrc); /** * Load all the data from a file path. * * The data is allocated with a zero byte at the end (null terminated) for * convenience. This extra byte is not included in the value reported via * `datasize`. * * The data should be freed with SDL_free(). * * Prior to SDL 2.0.10, this function was a macro wrapping around * SDL_LoadFile_RW. * * \param file the path to read all available data from * \param datasize if not NULL, will store the number of bytes read * \returns the data, or NULL if there was an error. * * \since This function is available since SDL 2.0.10. */ extern DECLSPEC void *SDLCALL SDL_LoadFile(const char *file, size_t *datasize); /** * \name Read endian functions * * Read an item of the specified endianness and return in native format. */ /* @{ */ /** * Use this function to read a byte from an SDL_RWops. * * \param src the SDL_RWops to read from * \returns the read byte on success or 0 on failure; call SDL_GetError() for * more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_WriteU8 */ extern DECLSPEC Uint8 SDLCALL SDL_ReadU8(SDL_RWops * src); /** * Use this function to read 16 bits of little-endian data from an SDL_RWops * and return in native format. * * SDL byteswaps the data only if necessary, so the data returned will be in * the native byte order. * * \param src the stream from which to read data * \returns 16 bits of data in the native byte order of the platform. * * \since This function is available since SDL 2.0.0. * * \sa SDL_ReadBE16 */ extern DECLSPEC Uint16 SDLCALL SDL_ReadLE16(SDL_RWops * src); /** * Use this function to read 16 bits of big-endian data from an SDL_RWops and * return in native format. * * SDL byteswaps the data only if necessary, so the data returned will be in * the native byte order. * * \param src the stream from which to read data * \returns 16 bits of data in the native byte order of the platform. * * \since This function is available since SDL 2.0.0. * * \sa SDL_ReadLE16 */ extern DECLSPEC Uint16 SDLCALL SDL_ReadBE16(SDL_RWops * src); /** * Use this function to read 32 bits of little-endian data from an SDL_RWops * and return in native format. * * SDL byteswaps the data only if necessary, so the data returned will be in * the native byte order. * * \param src the stream from which to read data * \returns 32 bits of data in the native byte order of the platform. * * \since This function is available since SDL 2.0.0. * * \sa SDL_ReadBE32 */ extern DECLSPEC Uint32 SDLCALL SDL_ReadLE32(SDL_RWops * src); /** * Use this function to read 32 bits of big-endian data from an SDL_RWops and * return in native format. * * SDL byteswaps the data only if necessary, so the data returned will be in * the native byte order. * * \param src the stream from which to read data * \returns 32 bits of data in the native byte order of the platform. * * \since This function is available since SDL 2.0.0. * * \sa SDL_ReadLE32 */ extern DECLSPEC Uint32 SDLCALL SDL_ReadBE32(SDL_RWops * src); /** * Use this function to read 64 bits of little-endian data from an SDL_RWops * and return in native format. * * SDL byteswaps the data only if necessary, so the data returned will be in * the native byte order. * * \param src the stream from which to read data * \returns 64 bits of data in the native byte order of the platform. * * \since This function is available since SDL 2.0.0. * * \sa SDL_ReadBE64 */ extern DECLSPEC Uint64 SDLCALL SDL_ReadLE64(SDL_RWops * src); /** * Use this function to read 64 bits of big-endian data from an SDL_RWops and * return in native format. * * SDL byteswaps the data only if necessary, so the data returned will be in * the native byte order. * * \param src the stream from which to read data * \returns 64 bits of data in the native byte order of the platform. * * \since This function is available since SDL 2.0.0. * * \sa SDL_ReadLE64 */ extern DECLSPEC Uint64 SDLCALL SDL_ReadBE64(SDL_RWops * src); /* @} *//* Read endian functions */ /** * \name Write endian functions * * Write an item of native format to the specified endianness. */ /* @{ */ /** * Use this function to write a byte to an SDL_RWops. * * \param dst the SDL_RWops to write to * \param value the byte value to write * \returns 1 on success or 0 on failure; call SDL_GetError() for more * information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_ReadU8 */ extern DECLSPEC size_t SDLCALL SDL_WriteU8(SDL_RWops * dst, Uint8 value); /** * Use this function to write 16 bits in native format to a SDL_RWops as * little-endian data. * * SDL byteswaps the data only if necessary, so the application always * specifies native format, and the data written will be in little-endian * format. * * \param dst the stream to which data will be written * \param value the data to be written, in native format * \returns 1 on successful write, 0 on error. * * \since This function is available since SDL 2.0.0. * * \sa SDL_WriteBE16 */ extern DECLSPEC size_t SDLCALL SDL_WriteLE16(SDL_RWops * dst, Uint16 value); /** * Use this function to write 16 bits in native format to a SDL_RWops as * big-endian data. * * SDL byteswaps the data only if necessary, so the application always * specifies native format, and the data written will be in big-endian format. * * \param dst the stream to which data will be written * \param value the data to be written, in native format * \returns 1 on successful write, 0 on error. * * \since This function is available since SDL 2.0.0. * * \sa SDL_WriteLE16 */ extern DECLSPEC size_t SDLCALL SDL_WriteBE16(SDL_RWops * dst, Uint16 value); /** * Use this function to write 32 bits in native format to a SDL_RWops as * little-endian data. * * SDL byteswaps the data only if necessary, so the application always * specifies native format, and the data written will be in little-endian * format. * * \param dst the stream to which data will be written * \param value the data to be written, in native format * \returns 1 on successful write, 0 on error. * * \since This function is available since SDL 2.0.0. * * \sa SDL_WriteBE32 */ extern DECLSPEC size_t SDLCALL SDL_WriteLE32(SDL_RWops * dst, Uint32 value); /** * Use this function to write 32 bits in native format to a SDL_RWops as * big-endian data. * * SDL byteswaps the data only if necessary, so the application always * specifies native format, and the data written will be in big-endian format. * * \param dst the stream to which data will be written * \param value the data to be written, in native format * \returns 1 on successful write, 0 on error. * * \since This function is available since SDL 2.0.0. * * \sa SDL_WriteLE32 */ extern DECLSPEC size_t SDLCALL SDL_WriteBE32(SDL_RWops * dst, Uint32 value); /** * Use this function to write 64 bits in native format to a SDL_RWops as * little-endian data. * * SDL byteswaps the data only if necessary, so the application always * specifies native format, and the data written will be in little-endian * format. * * \param dst the stream to which data will be written * \param value the data to be written, in native format * \returns 1 on successful write, 0 on error. * * \since This function is available since SDL 2.0.0. * * \sa SDL_WriteBE64 */ extern DECLSPEC size_t SDLCALL SDL_WriteLE64(SDL_RWops * dst, Uint64 value); /** * Use this function to write 64 bits in native format to a SDL_RWops as * big-endian data. * * SDL byteswaps the data only if necessary, so the application always * specifies native format, and the data written will be in big-endian format. * * \param dst the stream to which data will be written * \param value the data to be written, in native format * \returns 1 on successful write, 0 on error. * * \since This function is available since SDL 2.0.0. * * \sa SDL_WriteLE64 */ extern DECLSPEC size_t SDLCALL SDL_WriteBE64(SDL_RWops * dst, Uint64 value); /* @} *//* Write endian functions */ /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_rwops_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_scancode.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_scancode.h * * Defines keyboard scancodes. */ #ifndef SDL_scancode_h_ #define SDL_scancode_h_ #include "SDL_stdinc.h" /** * \brief The SDL keyboard scancode representation. * * Values of this type are used to represent keyboard keys, among other places * in the \link SDL_Keysym::scancode key.keysym.scancode \endlink field of the * SDL_Event structure. * * The values in this enumeration are based on the USB usage page standard: * https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf */ typedef enum { SDL_SCANCODE_UNKNOWN = 0, /** * \name Usage page 0x07 * * These values are from usage page 0x07 (USB keyboard page). */ /* @{ */ SDL_SCANCODE_A = 4, SDL_SCANCODE_B = 5, SDL_SCANCODE_C = 6, SDL_SCANCODE_D = 7, SDL_SCANCODE_E = 8, SDL_SCANCODE_F = 9, SDL_SCANCODE_G = 10, SDL_SCANCODE_H = 11, SDL_SCANCODE_I = 12, SDL_SCANCODE_J = 13, SDL_SCANCODE_K = 14, SDL_SCANCODE_L = 15, SDL_SCANCODE_M = 16, SDL_SCANCODE_N = 17, SDL_SCANCODE_O = 18, SDL_SCANCODE_P = 19, SDL_SCANCODE_Q = 20, SDL_SCANCODE_R = 21, SDL_SCANCODE_S = 22, SDL_SCANCODE_T = 23, SDL_SCANCODE_U = 24, SDL_SCANCODE_V = 25, SDL_SCANCODE_W = 26, SDL_SCANCODE_X = 27, SDL_SCANCODE_Y = 28, SDL_SCANCODE_Z = 29, SDL_SCANCODE_1 = 30, SDL_SCANCODE_2 = 31, SDL_SCANCODE_3 = 32, SDL_SCANCODE_4 = 33, SDL_SCANCODE_5 = 34, SDL_SCANCODE_6 = 35, SDL_SCANCODE_7 = 36, SDL_SCANCODE_8 = 37, SDL_SCANCODE_9 = 38, SDL_SCANCODE_0 = 39, SDL_SCANCODE_RETURN = 40, SDL_SCANCODE_ESCAPE = 41, SDL_SCANCODE_BACKSPACE = 42, SDL_SCANCODE_TAB = 43, SDL_SCANCODE_SPACE = 44, SDL_SCANCODE_MINUS = 45, SDL_SCANCODE_EQUALS = 46, SDL_SCANCODE_LEFTBRACKET = 47, SDL_SCANCODE_RIGHTBRACKET = 48, SDL_SCANCODE_BACKSLASH = 49, /**< Located at the lower left of the return * key on ISO keyboards and at the right end * of the QWERTY row on ANSI keyboards. * Produces REVERSE SOLIDUS (backslash) and * VERTICAL LINE in a US layout, REVERSE * SOLIDUS and VERTICAL LINE in a UK Mac * layout, NUMBER SIGN and TILDE in a UK * Windows layout, DOLLAR SIGN and POUND SIGN * in a Swiss German layout, NUMBER SIGN and * APOSTROPHE in a German layout, GRAVE * ACCENT and POUND SIGN in a French Mac * layout, and ASTERISK and MICRO SIGN in a * French Windows layout. */ SDL_SCANCODE_NONUSHASH = 50, /**< ISO USB keyboards actually use this code * instead of 49 for the same key, but all * OSes I've seen treat the two codes * identically. So, as an implementor, unless * your keyboard generates both of those * codes and your OS treats them differently, * you should generate SDL_SCANCODE_BACKSLASH * instead of this code. As a user, you * should not rely on this code because SDL * will never generate it with most (all?) * keyboards. */ SDL_SCANCODE_SEMICOLON = 51, SDL_SCANCODE_APOSTROPHE = 52, SDL_SCANCODE_GRAVE = 53, /**< Located in the top left corner (on both ANSI * and ISO keyboards). Produces GRAVE ACCENT and * TILDE in a US Windows layout and in US and UK * Mac layouts on ANSI keyboards, GRAVE ACCENT * and NOT SIGN in a UK Windows layout, SECTION * SIGN and PLUS-MINUS SIGN in US and UK Mac * layouts on ISO keyboards, SECTION SIGN and * DEGREE SIGN in a Swiss German layout (Mac: * only on ISO keyboards), CIRCUMFLEX ACCENT and * DEGREE SIGN in a German layout (Mac: only on * ISO keyboards), SUPERSCRIPT TWO and TILDE in a * French Windows layout, COMMERCIAL AT and * NUMBER SIGN in a French Mac layout on ISO * keyboards, and LESS-THAN SIGN and GREATER-THAN * SIGN in a Swiss German, German, or French Mac * layout on ANSI keyboards. */ SDL_SCANCODE_COMMA = 54, SDL_SCANCODE_PERIOD = 55, SDL_SCANCODE_SLASH = 56, SDL_SCANCODE_CAPSLOCK = 57, SDL_SCANCODE_F1 = 58, SDL_SCANCODE_F2 = 59, SDL_SCANCODE_F3 = 60, SDL_SCANCODE_F4 = 61, SDL_SCANCODE_F5 = 62, SDL_SCANCODE_F6 = 63, SDL_SCANCODE_F7 = 64, SDL_SCANCODE_F8 = 65, SDL_SCANCODE_F9 = 66, SDL_SCANCODE_F10 = 67, SDL_SCANCODE_F11 = 68, SDL_SCANCODE_F12 = 69, SDL_SCANCODE_PRINTSCREEN = 70, SDL_SCANCODE_SCROLLLOCK = 71, SDL_SCANCODE_PAUSE = 72, SDL_SCANCODE_INSERT = 73, /**< insert on PC, help on some Mac keyboards (but does send code 73, not 117) */ SDL_SCANCODE_HOME = 74, SDL_SCANCODE_PAGEUP = 75, SDL_SCANCODE_DELETE = 76, SDL_SCANCODE_END = 77, SDL_SCANCODE_PAGEDOWN = 78, SDL_SCANCODE_RIGHT = 79, SDL_SCANCODE_LEFT = 80, SDL_SCANCODE_DOWN = 81, SDL_SCANCODE_UP = 82, SDL_SCANCODE_NUMLOCKCLEAR = 83, /**< num lock on PC, clear on Mac keyboards */ SDL_SCANCODE_KP_DIVIDE = 84, SDL_SCANCODE_KP_MULTIPLY = 85, SDL_SCANCODE_KP_MINUS = 86, SDL_SCANCODE_KP_PLUS = 87, SDL_SCANCODE_KP_ENTER = 88, SDL_SCANCODE_KP_1 = 89, SDL_SCANCODE_KP_2 = 90, SDL_SCANCODE_KP_3 = 91, SDL_SCANCODE_KP_4 = 92, SDL_SCANCODE_KP_5 = 93, SDL_SCANCODE_KP_6 = 94, SDL_SCANCODE_KP_7 = 95, SDL_SCANCODE_KP_8 = 96, SDL_SCANCODE_KP_9 = 97, SDL_SCANCODE_KP_0 = 98, SDL_SCANCODE_KP_PERIOD = 99, SDL_SCANCODE_NONUSBACKSLASH = 100, /**< This is the additional key that ISO * keyboards have over ANSI ones, * located between left shift and Y. * Produces GRAVE ACCENT and TILDE in a * US or UK Mac layout, REVERSE SOLIDUS * (backslash) and VERTICAL LINE in a * US or UK Windows layout, and * LESS-THAN SIGN and GREATER-THAN SIGN * in a Swiss German, German, or French * layout. */ SDL_SCANCODE_APPLICATION = 101, /**< windows contextual menu, compose */ SDL_SCANCODE_POWER = 102, /**< The USB document says this is a status flag, * not a physical key - but some Mac keyboards * do have a power key. */ SDL_SCANCODE_KP_EQUALS = 103, SDL_SCANCODE_F13 = 104, SDL_SCANCODE_F14 = 105, SDL_SCANCODE_F15 = 106, SDL_SCANCODE_F16 = 107, SDL_SCANCODE_F17 = 108, SDL_SCANCODE_F18 = 109, SDL_SCANCODE_F19 = 110, SDL_SCANCODE_F20 = 111, SDL_SCANCODE_F21 = 112, SDL_SCANCODE_F22 = 113, SDL_SCANCODE_F23 = 114, SDL_SCANCODE_F24 = 115, SDL_SCANCODE_EXECUTE = 116, SDL_SCANCODE_HELP = 117, /**< AL Integrated Help Center */ SDL_SCANCODE_MENU = 118, /**< Menu (show menu) */ SDL_SCANCODE_SELECT = 119, SDL_SCANCODE_STOP = 120, /**< AC Stop */ SDL_SCANCODE_AGAIN = 121, /**< AC Redo/Repeat */ SDL_SCANCODE_UNDO = 122, /**< AC Undo */ SDL_SCANCODE_CUT = 123, /**< AC Cut */ SDL_SCANCODE_COPY = 124, /**< AC Copy */ SDL_SCANCODE_PASTE = 125, /**< AC Paste */ SDL_SCANCODE_FIND = 126, /**< AC Find */ SDL_SCANCODE_MUTE = 127, SDL_SCANCODE_VOLUMEUP = 128, SDL_SCANCODE_VOLUMEDOWN = 129, /* not sure whether there's a reason to enable these */ /* SDL_SCANCODE_LOCKINGCAPSLOCK = 130, */ /* SDL_SCANCODE_LOCKINGNUMLOCK = 131, */ /* SDL_SCANCODE_LOCKINGSCROLLLOCK = 132, */ SDL_SCANCODE_KP_COMMA = 133, SDL_SCANCODE_KP_EQUALSAS400 = 134, SDL_SCANCODE_INTERNATIONAL1 = 135, /**< used on Asian keyboards, see footnotes in USB doc */ SDL_SCANCODE_INTERNATIONAL2 = 136, SDL_SCANCODE_INTERNATIONAL3 = 137, /**< Yen */ SDL_SCANCODE_INTERNATIONAL4 = 138, SDL_SCANCODE_INTERNATIONAL5 = 139, SDL_SCANCODE_INTERNATIONAL6 = 140, SDL_SCANCODE_INTERNATIONAL7 = 141, SDL_SCANCODE_INTERNATIONAL8 = 142, SDL_SCANCODE_INTERNATIONAL9 = 143, SDL_SCANCODE_LANG1 = 144, /**< Hangul/English toggle */ SDL_SCANCODE_LANG2 = 145, /**< Hanja conversion */ SDL_SCANCODE_LANG3 = 146, /**< Katakana */ SDL_SCANCODE_LANG4 = 147, /**< Hiragana */ SDL_SCANCODE_LANG5 = 148, /**< Zenkaku/Hankaku */ SDL_SCANCODE_LANG6 = 149, /**< reserved */ SDL_SCANCODE_LANG7 = 150, /**< reserved */ SDL_SCANCODE_LANG8 = 151, /**< reserved */ SDL_SCANCODE_LANG9 = 152, /**< reserved */ SDL_SCANCODE_ALTERASE = 153, /**< Erase-Eaze */ SDL_SCANCODE_SYSREQ = 154, SDL_SCANCODE_CANCEL = 155, /**< AC Cancel */ SDL_SCANCODE_CLEAR = 156, SDL_SCANCODE_PRIOR = 157, SDL_SCANCODE_RETURN2 = 158, SDL_SCANCODE_SEPARATOR = 159, SDL_SCANCODE_OUT = 160, SDL_SCANCODE_OPER = 161, SDL_SCANCODE_CLEARAGAIN = 162, SDL_SCANCODE_CRSEL = 163, SDL_SCANCODE_EXSEL = 164, SDL_SCANCODE_KP_00 = 176, SDL_SCANCODE_KP_000 = 177, SDL_SCANCODE_THOUSANDSSEPARATOR = 178, SDL_SCANCODE_DECIMALSEPARATOR = 179, SDL_SCANCODE_CURRENCYUNIT = 180, SDL_SCANCODE_CURRENCYSUBUNIT = 181, SDL_SCANCODE_KP_LEFTPAREN = 182, SDL_SCANCODE_KP_RIGHTPAREN = 183, SDL_SCANCODE_KP_LEFTBRACE = 184, SDL_SCANCODE_KP_RIGHTBRACE = 185, SDL_SCANCODE_KP_TAB = 186, SDL_SCANCODE_KP_BACKSPACE = 187, SDL_SCANCODE_KP_A = 188, SDL_SCANCODE_KP_B = 189, SDL_SCANCODE_KP_C = 190, SDL_SCANCODE_KP_D = 191, SDL_SCANCODE_KP_E = 192, SDL_SCANCODE_KP_F = 193, SDL_SCANCODE_KP_XOR = 194, SDL_SCANCODE_KP_POWER = 195, SDL_SCANCODE_KP_PERCENT = 196, SDL_SCANCODE_KP_LESS = 197, SDL_SCANCODE_KP_GREATER = 198, SDL_SCANCODE_KP_AMPERSAND = 199, SDL_SCANCODE_KP_DBLAMPERSAND = 200, SDL_SCANCODE_KP_VERTICALBAR = 201, SDL_SCANCODE_KP_DBLVERTICALBAR = 202, SDL_SCANCODE_KP_COLON = 203, SDL_SCANCODE_KP_HASH = 204, SDL_SCANCODE_KP_SPACE = 205, SDL_SCANCODE_KP_AT = 206, SDL_SCANCODE_KP_EXCLAM = 207, SDL_SCANCODE_KP_MEMSTORE = 208, SDL_SCANCODE_KP_MEMRECALL = 209, SDL_SCANCODE_KP_MEMCLEAR = 210, SDL_SCANCODE_KP_MEMADD = 211, SDL_SCANCODE_KP_MEMSUBTRACT = 212, SDL_SCANCODE_KP_MEMMULTIPLY = 213, SDL_SCANCODE_KP_MEMDIVIDE = 214, SDL_SCANCODE_KP_PLUSMINUS = 215, SDL_SCANCODE_KP_CLEAR = 216, SDL_SCANCODE_KP_CLEARENTRY = 217, SDL_SCANCODE_KP_BINARY = 218, SDL_SCANCODE_KP_OCTAL = 219, SDL_SCANCODE_KP_DECIMAL = 220, SDL_SCANCODE_KP_HEXADECIMAL = 221, SDL_SCANCODE_LCTRL = 224, SDL_SCANCODE_LSHIFT = 225, SDL_SCANCODE_LALT = 226, /**< alt, option */ SDL_SCANCODE_LGUI = 227, /**< windows, command (apple), meta */ SDL_SCANCODE_RCTRL = 228, SDL_SCANCODE_RSHIFT = 229, SDL_SCANCODE_RALT = 230, /**< alt gr, option */ SDL_SCANCODE_RGUI = 231, /**< windows, command (apple), meta */ SDL_SCANCODE_MODE = 257, /**< I'm not sure if this is really not covered * by any of the above, but since there's a * special KMOD_MODE for it I'm adding it here */ /* @} *//* Usage page 0x07 */ /** * \name Usage page 0x0C * * These values are mapped from usage page 0x0C (USB consumer page). * See https://usb.org/sites/default/files/hut1_2.pdf * * There are way more keys in the spec than we can represent in the * current scancode range, so pick the ones that commonly come up in * real world usage. */ /* @{ */ SDL_SCANCODE_AUDIONEXT = 258, SDL_SCANCODE_AUDIOPREV = 259, SDL_SCANCODE_AUDIOSTOP = 260, SDL_SCANCODE_AUDIOPLAY = 261, SDL_SCANCODE_AUDIOMUTE = 262, SDL_SCANCODE_MEDIASELECT = 263, SDL_SCANCODE_WWW = 264, /**< AL Internet Browser */ SDL_SCANCODE_MAIL = 265, SDL_SCANCODE_CALCULATOR = 266, /**< AL Calculator */ SDL_SCANCODE_COMPUTER = 267, SDL_SCANCODE_AC_SEARCH = 268, /**< AC Search */ SDL_SCANCODE_AC_HOME = 269, /**< AC Home */ SDL_SCANCODE_AC_BACK = 270, /**< AC Back */ SDL_SCANCODE_AC_FORWARD = 271, /**< AC Forward */ SDL_SCANCODE_AC_STOP = 272, /**< AC Stop */ SDL_SCANCODE_AC_REFRESH = 273, /**< AC Refresh */ SDL_SCANCODE_AC_BOOKMARKS = 274, /**< AC Bookmarks */ /* @} *//* Usage page 0x0C */ /** * \name Walther keys * * These are values that Christian Walther added (for mac keyboard?). */ /* @{ */ SDL_SCANCODE_BRIGHTNESSDOWN = 275, SDL_SCANCODE_BRIGHTNESSUP = 276, SDL_SCANCODE_DISPLAYSWITCH = 277, /**< display mirroring/dual display switch, video mode switch */ SDL_SCANCODE_KBDILLUMTOGGLE = 278, SDL_SCANCODE_KBDILLUMDOWN = 279, SDL_SCANCODE_KBDILLUMUP = 280, SDL_SCANCODE_EJECT = 281, SDL_SCANCODE_SLEEP = 282, /**< SC System Sleep */ SDL_SCANCODE_APP1 = 283, SDL_SCANCODE_APP2 = 284, /* @} *//* Walther keys */ /** * \name Usage page 0x0C (additional media keys) * * These values are mapped from usage page 0x0C (USB consumer page). */ /* @{ */ SDL_SCANCODE_AUDIOREWIND = 285, SDL_SCANCODE_AUDIOFASTFORWARD = 286, /* @} *//* Usage page 0x0C (additional media keys) */ /** * \name Mobile keys * * These are values that are often used on mobile phones. */ /* @{ */ SDL_SCANCODE_SOFTLEFT = 287, /**< Usually situated below the display on phones and used as a multi-function feature key for selecting a software defined function shown on the bottom left of the display. */ SDL_SCANCODE_SOFTRIGHT = 288, /**< Usually situated below the display on phones and used as a multi-function feature key for selecting a software defined function shown on the bottom right of the display. */ SDL_SCANCODE_CALL = 289, /**< Used for accepting phone calls. */ SDL_SCANCODE_ENDCALL = 290, /**< Used for rejecting phone calls. */ /* @} *//* Mobile keys */ /* Add any other keys here. */ SDL_NUM_SCANCODES = 512 /**< not a key, just marks the number of scancodes for array bounds */ } SDL_Scancode; #endif /* SDL_scancode_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_sensor.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_sensor.h * * Include file for SDL sensor event handling * */ #ifndef SDL_sensor_h_ #define SDL_sensor_h_ #include "SDL_stdinc.h" #include "SDL_error.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus /* *INDENT-OFF* */ extern "C" { /* *INDENT-ON* */ #endif /** * \brief SDL_sensor.h * * In order to use these functions, SDL_Init() must have been called * with the ::SDL_INIT_SENSOR flag. This causes SDL to scan the system * for sensors, and load appropriate drivers. */ struct _SDL_Sensor; typedef struct _SDL_Sensor SDL_Sensor; /** * This is a unique ID for a sensor for the time it is connected to the system, * and is never reused for the lifetime of the application. * * The ID value starts at 0 and increments from there. The value -1 is an invalid ID. */ typedef Sint32 SDL_SensorID; /* The different sensors defined by SDL * * Additional sensors may be available, using platform dependent semantics. * * Hare are the additional Android sensors: * https://developer.android.com/reference/android/hardware/SensorEvent.html#values */ typedef enum { SDL_SENSOR_INVALID = -1, /**< Returned for an invalid sensor */ SDL_SENSOR_UNKNOWN, /**< Unknown sensor type */ SDL_SENSOR_ACCEL, /**< Accelerometer */ SDL_SENSOR_GYRO, /**< Gyroscope */ SDL_SENSOR_ACCEL_L, /**< Accelerometer for left Joy-Con controller and Wii nunchuk */ SDL_SENSOR_GYRO_L, /**< Gyroscope for left Joy-Con controller */ SDL_SENSOR_ACCEL_R, /**< Accelerometer for right Joy-Con controller */ SDL_SENSOR_GYRO_R /**< Gyroscope for right Joy-Con controller */ } SDL_SensorType; /** * Accelerometer sensor * * The accelerometer returns the current acceleration in SI meters per * second squared. This measurement includes the force of gravity, so * a device at rest will have an value of SDL_STANDARD_GRAVITY away * from the center of the earth, which is a positive Y value. * * values[0]: Acceleration on the x axis * values[1]: Acceleration on the y axis * values[2]: Acceleration on the z axis * * For phones held in portrait mode and game controllers held in front of you, * the axes are defined as follows: * -X ... +X : left ... right * -Y ... +Y : bottom ... top * -Z ... +Z : farther ... closer * * The axis data is not changed when the phone is rotated. * * \sa SDL_GetDisplayOrientation() */ #define SDL_STANDARD_GRAVITY 9.80665f /** * Gyroscope sensor * * The gyroscope returns the current rate of rotation in radians per second. * The rotation is positive in the counter-clockwise direction. That is, * an observer looking from a positive location on one of the axes would * see positive rotation on that axis when it appeared to be rotating * counter-clockwise. * * values[0]: Angular speed around the x axis (pitch) * values[1]: Angular speed around the y axis (yaw) * values[2]: Angular speed around the z axis (roll) * * For phones held in portrait mode and game controllers held in front of you, * the axes are defined as follows: * -X ... +X : left ... right * -Y ... +Y : bottom ... top * -Z ... +Z : farther ... closer * * The axis data is not changed when the phone or controller is rotated. * * \sa SDL_GetDisplayOrientation() */ /* Function prototypes */ /** * Locking for multi-threaded access to the sensor API * * If you are using the sensor API or handling events from multiple threads * you should use these locking functions to protect access to the sensors. * * In particular, you are guaranteed that the sensor list won't change, so the * API functions that take a sensor index will be valid, and sensor events * will not be delivered. * * \since This function is available since SDL 2.0.14. */ extern DECLSPEC void SDLCALL SDL_LockSensors(void); extern DECLSPEC void SDLCALL SDL_UnlockSensors(void); /** * Count the number of sensors attached to the system right now. * * \returns the number of sensors detected. * * \since This function is available since SDL 2.0.9. */ extern DECLSPEC int SDLCALL SDL_NumSensors(void); /** * Get the implementation dependent name of a sensor. * * \param device_index The sensor to obtain name from * \returns the sensor name, or NULL if `device_index` is out of range. * * \since This function is available since SDL 2.0.9. */ extern DECLSPEC const char *SDLCALL SDL_SensorGetDeviceName(int device_index); /** * Get the type of a sensor. * * \param device_index The sensor to get the type from * \returns the SDL_SensorType, or `SDL_SENSOR_INVALID` if `device_index` is * out of range. * * \since This function is available since SDL 2.0.9. */ extern DECLSPEC SDL_SensorType SDLCALL SDL_SensorGetDeviceType(int device_index); /** * Get the platform dependent type of a sensor. * * \param device_index The sensor to check * \returns the sensor platform dependent type, or -1 if `device_index` is out * of range. * * \since This function is available since SDL 2.0.9. */ extern DECLSPEC int SDLCALL SDL_SensorGetDeviceNonPortableType(int device_index); /** * Get the instance ID of a sensor. * * \param device_index The sensor to get instance id from * \returns the sensor instance ID, or -1 if `device_index` is out of range. * * \since This function is available since SDL 2.0.9. */ extern DECLSPEC SDL_SensorID SDLCALL SDL_SensorGetDeviceInstanceID(int device_index); /** * Open a sensor for use. * * \param device_index The sensor to open * \returns an SDL_Sensor sensor object, or NULL if an error occurred. * * \since This function is available since SDL 2.0.9. */ extern DECLSPEC SDL_Sensor *SDLCALL SDL_SensorOpen(int device_index); /** * Return the SDL_Sensor associated with an instance id. * * \param instance_id The sensor from instance id * \returns an SDL_Sensor object. * * \since This function is available since SDL 2.0.9. */ extern DECLSPEC SDL_Sensor *SDLCALL SDL_SensorFromInstanceID(SDL_SensorID instance_id); /** * Get the implementation dependent name of a sensor * * \param sensor The SDL_Sensor object * \returns the sensor name, or NULL if `sensor` is NULL. * * \since This function is available since SDL 2.0.9. */ extern DECLSPEC const char *SDLCALL SDL_SensorGetName(SDL_Sensor *sensor); /** * Get the type of a sensor. * * \param sensor The SDL_Sensor object to inspect * \returns the SDL_SensorType type, or `SDL_SENSOR_INVALID` if `sensor` is * NULL. * * \since This function is available since SDL 2.0.9. */ extern DECLSPEC SDL_SensorType SDLCALL SDL_SensorGetType(SDL_Sensor *sensor); /** * Get the platform dependent type of a sensor. * * \param sensor The SDL_Sensor object to inspect * \returns the sensor platform dependent type, or -1 if `sensor` is NULL. * * \since This function is available since SDL 2.0.9. */ extern DECLSPEC int SDLCALL SDL_SensorGetNonPortableType(SDL_Sensor *sensor); /** * Get the instance ID of a sensor. * * \param sensor The SDL_Sensor object to inspect * \returns the sensor instance ID, or -1 if `sensor` is NULL. * * \since This function is available since SDL 2.0.9. */ extern DECLSPEC SDL_SensorID SDLCALL SDL_SensorGetInstanceID(SDL_Sensor *sensor); /** * Get the current state of an opened sensor. * * The number of values and interpretation of the data is sensor dependent. * * \param sensor The SDL_Sensor object to query * \param data A pointer filled with the current sensor state * \param num_values The number of values to write to data * \returns 0 or -1 if an error occurred. * * \since This function is available since SDL 2.0.9. */ extern DECLSPEC int SDLCALL SDL_SensorGetData(SDL_Sensor *sensor, float *data, int num_values); /** * Get the current state of an opened sensor with the timestamp of the last * update. * * The number of values and interpretation of the data is sensor dependent. * * \param sensor The SDL_Sensor object to query * \param timestamp A pointer filled with the timestamp in microseconds of the * current sensor reading if available, or 0 if not * \param data A pointer filled with the current sensor state * \param num_values The number of values to write to data * \returns 0 or -1 if an error occurred. * * \since This function is available since SDL 2.26.0. */ extern DECLSPEC int SDLCALL SDL_SensorGetDataWithTimestamp(SDL_Sensor *sensor, Uint64 *timestamp, float *data, int num_values); /** * Close a sensor previously opened with SDL_SensorOpen(). * * \param sensor The SDL_Sensor object to close * * \since This function is available since SDL 2.0.9. */ extern DECLSPEC void SDLCALL SDL_SensorClose(SDL_Sensor *sensor); /** * Update the current state of the open sensors. * * This is called automatically by the event loop if sensor events are * enabled. * * This needs to be called from the thread that initialized the sensor * subsystem. * * \since This function is available since SDL 2.0.9. */ extern DECLSPEC void SDLCALL SDL_SensorUpdate(void); /* Ends C function definitions when using C++ */ #ifdef __cplusplus /* *INDENT-OFF* */ } /* *INDENT-ON* */ #endif #include "close_code.h" #endif /* SDL_sensor_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_shape.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef SDL_shape_h_ #define SDL_shape_h_ #include "SDL_stdinc.h" #include "SDL_pixels.h" #include "SDL_rect.h" #include "SDL_surface.h" #include "SDL_video.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** \file SDL_shape.h * * Header file for the shaped window API. */ #define SDL_NONSHAPEABLE_WINDOW -1 #define SDL_INVALID_SHAPE_ARGUMENT -2 #define SDL_WINDOW_LACKS_SHAPE -3 /** * Create a window that can be shaped with the specified position, dimensions, * and flags. * * \param title The title of the window, in UTF-8 encoding. * \param x The x position of the window, ::SDL_WINDOWPOS_CENTERED, or * ::SDL_WINDOWPOS_UNDEFINED. * \param y The y position of the window, ::SDL_WINDOWPOS_CENTERED, or * ::SDL_WINDOWPOS_UNDEFINED. * \param w The width of the window. * \param h The height of the window. * \param flags The flags for the window, a mask of SDL_WINDOW_BORDERLESS with * any of the following: ::SDL_WINDOW_OPENGL, * ::SDL_WINDOW_INPUT_GRABBED, ::SDL_WINDOW_HIDDEN, * ::SDL_WINDOW_RESIZABLE, ::SDL_WINDOW_MAXIMIZED, * ::SDL_WINDOW_MINIMIZED, ::SDL_WINDOW_BORDERLESS is always set, * and ::SDL_WINDOW_FULLSCREEN is always unset. * \return the window created, or NULL if window creation failed. * * \since This function is available since SDL 2.0.0. * * \sa SDL_DestroyWindow */ extern DECLSPEC SDL_Window * SDLCALL SDL_CreateShapedWindow(const char *title,unsigned int x,unsigned int y,unsigned int w,unsigned int h,Uint32 flags); /** * Return whether the given window is a shaped window. * * \param window The window to query for being shaped. * \return SDL_TRUE if the window is a window that can be shaped, SDL_FALSE if * the window is unshaped or NULL. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateShapedWindow */ extern DECLSPEC SDL_bool SDLCALL SDL_IsShapedWindow(const SDL_Window *window); /** \brief An enum denoting the specific type of contents present in an SDL_WindowShapeParams union. */ typedef enum { /** \brief The default mode, a binarized alpha cutoff of 1. */ ShapeModeDefault, /** \brief A binarized alpha cutoff with a given integer value. */ ShapeModeBinarizeAlpha, /** \brief A binarized alpha cutoff with a given integer value, but with the opposite comparison. */ ShapeModeReverseBinarizeAlpha, /** \brief A color key is applied. */ ShapeModeColorKey } WindowShapeMode; #define SDL_SHAPEMODEALPHA(mode) (mode == ShapeModeDefault || mode == ShapeModeBinarizeAlpha || mode == ShapeModeReverseBinarizeAlpha) /** \brief A union containing parameters for shaped windows. */ typedef union { /** \brief A cutoff alpha value for binarization of the window shape's alpha channel. */ Uint8 binarizationCutoff; SDL_Color colorKey; } SDL_WindowShapeParams; /** \brief A struct that tags the SDL_WindowShapeParams union with an enum describing the type of its contents. */ typedef struct SDL_WindowShapeMode { /** \brief The mode of these window-shape parameters. */ WindowShapeMode mode; /** \brief Window-shape parameters. */ SDL_WindowShapeParams parameters; } SDL_WindowShapeMode; /** * Set the shape and parameters of a shaped window. * * \param window The shaped window whose parameters should be set. * \param shape A surface encoding the desired shape for the window. * \param shape_mode The parameters to set for the shaped window. * \return 0 on success, SDL_INVALID_SHAPE_ARGUMENT on an invalid shape * argument, or SDL_NONSHAPEABLE_WINDOW if the SDL_Window given does * not reference a valid shaped window. * * \since This function is available since SDL 2.0.0. * * \sa SDL_WindowShapeMode * \sa SDL_GetShapedWindowMode */ extern DECLSPEC int SDLCALL SDL_SetWindowShape(SDL_Window *window,SDL_Surface *shape,SDL_WindowShapeMode *shape_mode); /** * Get the shape parameters of a shaped window. * * \param window The shaped window whose parameters should be retrieved. * \param shape_mode An empty shape-mode structure to fill, or NULL to check * whether the window has a shape. * \return 0 if the window has a shape and, provided shape_mode was not NULL, * shape_mode has been filled with the mode data, * SDL_NONSHAPEABLE_WINDOW if the SDL_Window given is not a shaped * window, or SDL_WINDOW_LACKS_SHAPE if the SDL_Window given is a * shapeable window currently lacking a shape. * * \since This function is available since SDL 2.0.0. * * \sa SDL_WindowShapeMode * \sa SDL_SetWindowShape */ extern DECLSPEC int SDLCALL SDL_GetShapedWindowMode(SDL_Window *window,SDL_WindowShapeMode *shape_mode); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_shape_h_ */ ================================================ FILE: libraries/sdl2/SDL_stdinc.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_stdinc.h * * This is a general header that includes C language support. */ #ifndef SDL_stdinc_h_ #define SDL_stdinc_h_ #include "SDL_config.h" #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_STDIO_H #include #endif #if defined(STDC_HEADERS) # include # include # include #else # if defined(HAVE_STDLIB_H) # include # elif defined(HAVE_MALLOC_H) # include # endif # if defined(HAVE_STDDEF_H) # include # endif # if defined(HAVE_STDARG_H) # include # endif #endif #ifdef HAVE_STRING_H # if !defined(STDC_HEADERS) && defined(HAVE_MEMORY_H) # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_WCHAR_H # include #endif #if defined(HAVE_INTTYPES_H) # include #elif defined(HAVE_STDINT_H) # include #endif #ifdef HAVE_CTYPE_H # include #endif #ifdef HAVE_MATH_H # if defined(_MSC_VER) /* Defining _USE_MATH_DEFINES is required to get M_PI to be defined on Visual Studio. See http://msdn.microsoft.com/en-us/library/4hwaceh6.aspx for more information. */ # ifndef _USE_MATH_DEFINES # define _USE_MATH_DEFINES # endif # endif # include #endif #ifdef HAVE_FLOAT_H # include #endif #if defined(HAVE_ALLOCA) && !defined(alloca) # if defined(HAVE_ALLOCA_H) # include # elif defined(__GNUC__) # define alloca __builtin_alloca # elif defined(_MSC_VER) # include # define alloca _alloca # elif defined(__WATCOMC__) # include # elif defined(__BORLANDC__) # include # elif defined(__DMC__) # include # elif defined(__AIX__) #pragma alloca # elif defined(__MRC__) void *alloca(unsigned); # else void *alloca(size_t); # endif #endif #ifdef SIZE_MAX # define SDL_SIZE_MAX SIZE_MAX #else # define SDL_SIZE_MAX ((size_t) -1) #endif /** * Check if the compiler supports a given builtin. * Supported by virtually all clang versions and recent gcc. Use this * instead of checking the clang version if possible. */ #ifdef __has_builtin #define _SDL_HAS_BUILTIN(x) __has_builtin(x) #else #define _SDL_HAS_BUILTIN(x) 0 #endif /** * The number of elements in an array. */ #define SDL_arraysize(array) (sizeof(array)/sizeof(array[0])) #define SDL_TABLESIZE(table) SDL_arraysize(table) /** * Macro useful for building other macros with strings in them * * e.g. #define LOG_ERROR(X) OutputDebugString(SDL_STRINGIFY_ARG(__FUNCTION__) ": " X "\n") */ #define SDL_STRINGIFY_ARG(arg) #arg /** * \name Cast operators * * Use proper C++ casts when compiled as C++ to be compatible with the option * -Wold-style-cast of GCC (and -Werror=old-style-cast in GCC 4.2 and above). */ /* @{ */ #ifdef __cplusplus #define SDL_reinterpret_cast(type, expression) reinterpret_cast(expression) #define SDL_static_cast(type, expression) static_cast(expression) #define SDL_const_cast(type, expression) const_cast(expression) #else #define SDL_reinterpret_cast(type, expression) ((type)(expression)) #define SDL_static_cast(type, expression) ((type)(expression)) #define SDL_const_cast(type, expression) ((type)(expression)) #endif /* @} *//* Cast operators */ /* Define a four character code as a Uint32 */ #define SDL_FOURCC(A, B, C, D) \ ((SDL_static_cast(Uint32, SDL_static_cast(Uint8, (A))) << 0) | \ (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (B))) << 8) | \ (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (C))) << 16) | \ (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (D))) << 24)) /** * \name Basic data types */ /* @{ */ #ifdef __CC_ARM /* ARM's compiler throws warnings if we use an enum: like "SDL_bool x = a < b;" */ #define SDL_FALSE 0 #define SDL_TRUE 1 typedef int SDL_bool; #else typedef enum { SDL_FALSE = 0, SDL_TRUE = 1 } SDL_bool; #endif /** * \brief A signed 8-bit integer type. */ #define SDL_MAX_SINT8 ((Sint8)0x7F) /* 127 */ #define SDL_MIN_SINT8 ((Sint8)(~0x7F)) /* -128 */ typedef int8_t Sint8; /** * \brief An unsigned 8-bit integer type. */ #define SDL_MAX_UINT8 ((Uint8)0xFF) /* 255 */ #define SDL_MIN_UINT8 ((Uint8)0x00) /* 0 */ typedef uint8_t Uint8; /** * \brief A signed 16-bit integer type. */ #define SDL_MAX_SINT16 ((Sint16)0x7FFF) /* 32767 */ #define SDL_MIN_SINT16 ((Sint16)(~0x7FFF)) /* -32768 */ typedef int16_t Sint16; /** * \brief An unsigned 16-bit integer type. */ #define SDL_MAX_UINT16 ((Uint16)0xFFFF) /* 65535 */ #define SDL_MIN_UINT16 ((Uint16)0x0000) /* 0 */ typedef uint16_t Uint16; /** * \brief A signed 32-bit integer type. */ #define SDL_MAX_SINT32 ((Sint32)0x7FFFFFFF) /* 2147483647 */ #define SDL_MIN_SINT32 ((Sint32)(~0x7FFFFFFF)) /* -2147483648 */ typedef int32_t Sint32; /** * \brief An unsigned 32-bit integer type. */ #define SDL_MAX_UINT32 ((Uint32)0xFFFFFFFFu) /* 4294967295 */ #define SDL_MIN_UINT32 ((Uint32)0x00000000) /* 0 */ typedef uint32_t Uint32; /** * \brief A signed 64-bit integer type. */ #define SDL_MAX_SINT64 ((Sint64)0x7FFFFFFFFFFFFFFFll) /* 9223372036854775807 */ #define SDL_MIN_SINT64 ((Sint64)(~0x7FFFFFFFFFFFFFFFll)) /* -9223372036854775808 */ typedef int64_t Sint64; /** * \brief An unsigned 64-bit integer type. */ #define SDL_MAX_UINT64 ((Uint64)0xFFFFFFFFFFFFFFFFull) /* 18446744073709551615 */ #define SDL_MIN_UINT64 ((Uint64)(0x0000000000000000ull)) /* 0 */ typedef uint64_t Uint64; /* @} *//* Basic data types */ /** * \name Floating-point constants */ /* @{ */ #ifdef FLT_EPSILON #define SDL_FLT_EPSILON FLT_EPSILON #else #define SDL_FLT_EPSILON 1.1920928955078125e-07F /* 0x0.000002p0 */ #endif /* @} *//* Floating-point constants */ /* Make sure we have macros for printing width-based integers. * should define these but this is not true all platforms. * (for example win32) */ #ifndef SDL_PRIs64 #if defined(__WIN32__) || defined(__GDK__) #define SDL_PRIs64 "I64d" #elif defined(PRIs64) #define SDL_PRIs64 PRIs64 #elif defined(__LP64__) && !defined(__APPLE__) #define SDL_PRIs64 "ld" #else #define SDL_PRIs64 "lld" #endif #endif #ifndef SDL_PRIu64 #if defined(__WIN32__) || defined(__GDK__) #define SDL_PRIu64 "I64u" #elif defined(PRIu64) #define SDL_PRIu64 PRIu64 #elif defined(__LP64__) && !defined(__APPLE__) #define SDL_PRIu64 "lu" #else #define SDL_PRIu64 "llu" #endif #endif #ifndef SDL_PRIx64 #if defined(__WIN32__) || defined(__GDK__) #define SDL_PRIx64 "I64x" #elif defined(PRIx64) #define SDL_PRIx64 PRIx64 #elif defined(__LP64__) && !defined(__APPLE__) #define SDL_PRIx64 "lx" #else #define SDL_PRIx64 "llx" #endif #endif #ifndef SDL_PRIX64 #if defined(__WIN32__) || defined(__GDK__) #define SDL_PRIX64 "I64X" #elif defined(PRIX64) #define SDL_PRIX64 PRIX64 #elif defined(__LP64__) && !defined(__APPLE__) #define SDL_PRIX64 "lX" #else #define SDL_PRIX64 "llX" #endif #endif #ifndef SDL_PRIs32 #ifdef PRId32 #define SDL_PRIs32 PRId32 #else #define SDL_PRIs32 "d" #endif #endif #ifndef SDL_PRIu32 #ifdef PRIu32 #define SDL_PRIu32 PRIu32 #else #define SDL_PRIu32 "u" #endif #endif #ifndef SDL_PRIx32 #ifdef PRIx32 #define SDL_PRIx32 PRIx32 #else #define SDL_PRIx32 "x" #endif #endif #ifndef SDL_PRIX32 #ifdef PRIX32 #define SDL_PRIX32 PRIX32 #else #define SDL_PRIX32 "X" #endif #endif /* Annotations to help code analysis tools */ #ifdef SDL_DISABLE_ANALYZE_MACROS #define SDL_IN_BYTECAP(x) #define SDL_INOUT_Z_CAP(x) #define SDL_OUT_Z_CAP(x) #define SDL_OUT_CAP(x) #define SDL_OUT_BYTECAP(x) #define SDL_OUT_Z_BYTECAP(x) #define SDL_PRINTF_FORMAT_STRING #define SDL_SCANF_FORMAT_STRING #define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) #define SDL_PRINTF_VARARG_FUNCV( fmtargnumber ) #define SDL_SCANF_VARARG_FUNC( fmtargnumber ) #define SDL_SCANF_VARARG_FUNCV( fmtargnumber ) #else #if defined(_MSC_VER) && (_MSC_VER >= 1600) /* VS 2010 and above */ #include #define SDL_IN_BYTECAP(x) _In_bytecount_(x) #define SDL_INOUT_Z_CAP(x) _Inout_z_cap_(x) #define SDL_OUT_Z_CAP(x) _Out_z_cap_(x) #define SDL_OUT_CAP(x) _Out_cap_(x) #define SDL_OUT_BYTECAP(x) _Out_bytecap_(x) #define SDL_OUT_Z_BYTECAP(x) _Out_z_bytecap_(x) #define SDL_PRINTF_FORMAT_STRING _Printf_format_string_ #define SDL_SCANF_FORMAT_STRING _Scanf_format_string_impl_ #else #define SDL_IN_BYTECAP(x) #define SDL_INOUT_Z_CAP(x) #define SDL_OUT_Z_CAP(x) #define SDL_OUT_CAP(x) #define SDL_OUT_BYTECAP(x) #define SDL_OUT_Z_BYTECAP(x) #define SDL_PRINTF_FORMAT_STRING #define SDL_SCANF_FORMAT_STRING #endif #if defined(__GNUC__) #define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) __attribute__ (( format( __printf__, fmtargnumber, fmtargnumber+1 ))) #define SDL_PRINTF_VARARG_FUNCV( fmtargnumber ) __attribute__(( format( __printf__, fmtargnumber, 0 ))) #define SDL_SCANF_VARARG_FUNC( fmtargnumber ) __attribute__ (( format( __scanf__, fmtargnumber, fmtargnumber+1 ))) #define SDL_SCANF_VARARG_FUNCV( fmtargnumber ) __attribute__(( format( __scanf__, fmtargnumber, 0 ))) #else #define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) #define SDL_PRINTF_VARARG_FUNCV( fmtargnumber ) #define SDL_SCANF_VARARG_FUNC( fmtargnumber ) #define SDL_SCANF_VARARG_FUNCV( fmtargnumber ) #endif #endif /* SDL_DISABLE_ANALYZE_MACROS */ #ifndef SDL_COMPILE_TIME_ASSERT #if defined(__cplusplus) #if (__cplusplus >= 201103L) #define SDL_COMPILE_TIME_ASSERT(name, x) static_assert(x, #x) #endif #elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) #define SDL_COMPILE_TIME_ASSERT(name, x) _Static_assert(x, #x) #endif #endif /* !SDL_COMPILE_TIME_ASSERT */ #ifndef SDL_COMPILE_TIME_ASSERT /* universal, but may trigger -Wunused-local-typedefs */ #define SDL_COMPILE_TIME_ASSERT(name, x) \ typedef int SDL_compile_time_assert_ ## name[(x) * 2 - 1] #endif /** \cond */ #ifndef DOXYGEN_SHOULD_IGNORE_THIS SDL_COMPILE_TIME_ASSERT(uint8, sizeof(Uint8) == 1); SDL_COMPILE_TIME_ASSERT(sint8, sizeof(Sint8) == 1); SDL_COMPILE_TIME_ASSERT(uint16, sizeof(Uint16) == 2); SDL_COMPILE_TIME_ASSERT(sint16, sizeof(Sint16) == 2); SDL_COMPILE_TIME_ASSERT(uint32, sizeof(Uint32) == 4); SDL_COMPILE_TIME_ASSERT(sint32, sizeof(Sint32) == 4); SDL_COMPILE_TIME_ASSERT(uint64, sizeof(Uint64) == 8); SDL_COMPILE_TIME_ASSERT(sint64, sizeof(Sint64) == 8); #endif /* DOXYGEN_SHOULD_IGNORE_THIS */ /** \endcond */ /* Check to make sure enums are the size of ints, for structure packing. For both Watcom C/C++ and Borland C/C++ the compiler option that makes enums having the size of an int must be enabled. This is "-b" for Borland C/C++ and "-ei" for Watcom C/C++ (v11). */ /** \cond */ #ifndef DOXYGEN_SHOULD_IGNORE_THIS #if !defined(__ANDROID__) && !defined(__VITA__) && !defined(__3DS__) /* TODO: include/SDL_stdinc.h:174: error: size of array 'SDL_dummy_enum' is negative */ typedef enum { DUMMY_ENUM_VALUE } SDL_DUMMY_ENUM; SDL_COMPILE_TIME_ASSERT(enum, sizeof(SDL_DUMMY_ENUM) == sizeof(int)); #endif #endif /* DOXYGEN_SHOULD_IGNORE_THIS */ /** \endcond */ #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif #ifdef HAVE_ALLOCA #define SDL_stack_alloc(type, count) (type*)alloca(sizeof(type)*(count)) #define SDL_stack_free(data) #else #define SDL_stack_alloc(type, count) (type*)SDL_malloc(sizeof(type)*(count)) #define SDL_stack_free(data) SDL_free(data) #endif extern DECLSPEC void *SDLCALL SDL_malloc(size_t size); extern DECLSPEC void *SDLCALL SDL_calloc(size_t nmemb, size_t size); extern DECLSPEC void *SDLCALL SDL_realloc(void *mem, size_t size); extern DECLSPEC void SDLCALL SDL_free(void *mem); typedef void *(SDLCALL *SDL_malloc_func)(size_t size); typedef void *(SDLCALL *SDL_calloc_func)(size_t nmemb, size_t size); typedef void *(SDLCALL *SDL_realloc_func)(void *mem, size_t size); typedef void (SDLCALL *SDL_free_func)(void *mem); /** * Get the original set of SDL memory functions * * \since This function is available since SDL 2.24.0. */ extern DECLSPEC void SDLCALL SDL_GetOriginalMemoryFunctions(SDL_malloc_func *malloc_func, SDL_calloc_func *calloc_func, SDL_realloc_func *realloc_func, SDL_free_func *free_func); /** * Get the current set of SDL memory functions * * \since This function is available since SDL 2.0.7. */ extern DECLSPEC void SDLCALL SDL_GetMemoryFunctions(SDL_malloc_func *malloc_func, SDL_calloc_func *calloc_func, SDL_realloc_func *realloc_func, SDL_free_func *free_func); /** * Replace SDL's memory allocation functions with a custom set * * \since This function is available since SDL 2.0.7. */ extern DECLSPEC int SDLCALL SDL_SetMemoryFunctions(SDL_malloc_func malloc_func, SDL_calloc_func calloc_func, SDL_realloc_func realloc_func, SDL_free_func free_func); /** * Get the number of outstanding (unfreed) allocations * * \since This function is available since SDL 2.0.7. */ extern DECLSPEC int SDLCALL SDL_GetNumAllocations(void); extern DECLSPEC char *SDLCALL SDL_getenv(const char *name); extern DECLSPEC int SDLCALL SDL_setenv(const char *name, const char *value, int overwrite); extern DECLSPEC void SDLCALL SDL_qsort(void *base, size_t nmemb, size_t size, int (SDLCALL *compare) (const void *, const void *)); extern DECLSPEC void * SDLCALL SDL_bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (SDLCALL *compare) (const void *, const void *)); extern DECLSPEC int SDLCALL SDL_abs(int x); /* NOTE: these double-evaluate their arguments, so you should never have side effects in the parameters */ #define SDL_min(x, y) (((x) < (y)) ? (x) : (y)) #define SDL_max(x, y) (((x) > (y)) ? (x) : (y)) #define SDL_clamp(x, a, b) (((x) < (a)) ? (a) : (((x) > (b)) ? (b) : (x))) extern DECLSPEC int SDLCALL SDL_isalpha(int x); extern DECLSPEC int SDLCALL SDL_isalnum(int x); extern DECLSPEC int SDLCALL SDL_isblank(int x); extern DECLSPEC int SDLCALL SDL_iscntrl(int x); extern DECLSPEC int SDLCALL SDL_isdigit(int x); extern DECLSPEC int SDLCALL SDL_isxdigit(int x); extern DECLSPEC int SDLCALL SDL_ispunct(int x); extern DECLSPEC int SDLCALL SDL_isspace(int x); extern DECLSPEC int SDLCALL SDL_isupper(int x); extern DECLSPEC int SDLCALL SDL_islower(int x); extern DECLSPEC int SDLCALL SDL_isprint(int x); extern DECLSPEC int SDLCALL SDL_isgraph(int x); extern DECLSPEC int SDLCALL SDL_toupper(int x); extern DECLSPEC int SDLCALL SDL_tolower(int x); extern DECLSPEC Uint16 SDLCALL SDL_crc16(Uint16 crc, const void *data, size_t len); extern DECLSPEC Uint32 SDLCALL SDL_crc32(Uint32 crc, const void *data, size_t len); extern DECLSPEC void *SDLCALL SDL_memset(SDL_OUT_BYTECAP(len) void *dst, int c, size_t len); #define SDL_zero(x) SDL_memset(&(x), 0, sizeof((x))) #define SDL_zerop(x) SDL_memset((x), 0, sizeof(*(x))) #define SDL_zeroa(x) SDL_memset((x), 0, sizeof((x))) #define SDL_copyp(dst, src) \ { SDL_COMPILE_TIME_ASSERT(SDL_copyp, sizeof (*(dst)) == sizeof (*(src))); } \ SDL_memcpy((dst), (src), sizeof (*(src))) /* Note that memset() is a byte assignment and this is a 32-bit assignment, so they're not directly equivalent. */ SDL_FORCE_INLINE void SDL_memset4(void *dst, Uint32 val, size_t dwords) { #if defined(__GNUC__) && defined(__i386__) int u0, u1, u2; __asm__ __volatile__ ( "cld \n\t" "rep ; stosl \n\t" : "=&D" (u0), "=&a" (u1), "=&c" (u2) : "0" (dst), "1" (val), "2" (SDL_static_cast(Uint32, dwords)) : "memory" ); #else size_t _n = (dwords + 3) / 4; Uint32 *_p = SDL_static_cast(Uint32 *, dst); Uint32 _val = (val); if (dwords == 0) { return; } switch (dwords % 4) { case 0: do { *_p++ = _val; SDL_FALLTHROUGH; case 3: *_p++ = _val; SDL_FALLTHROUGH; case 2: *_p++ = _val; SDL_FALLTHROUGH; case 1: *_p++ = _val; } while ( --_n ); } #endif } extern DECLSPEC void *SDLCALL SDL_memcpy(SDL_OUT_BYTECAP(len) void *dst, SDL_IN_BYTECAP(len) const void *src, size_t len); extern DECLSPEC void *SDLCALL SDL_memmove(SDL_OUT_BYTECAP(len) void *dst, SDL_IN_BYTECAP(len) const void *src, size_t len); extern DECLSPEC int SDLCALL SDL_memcmp(const void *s1, const void *s2, size_t len); extern DECLSPEC size_t SDLCALL SDL_wcslen(const wchar_t *wstr); extern DECLSPEC size_t SDLCALL SDL_wcslcpy(SDL_OUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen); extern DECLSPEC size_t SDLCALL SDL_wcslcat(SDL_INOUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen); extern DECLSPEC wchar_t *SDLCALL SDL_wcsdup(const wchar_t *wstr); extern DECLSPEC wchar_t *SDLCALL SDL_wcsstr(const wchar_t *haystack, const wchar_t *needle); extern DECLSPEC int SDLCALL SDL_wcscmp(const wchar_t *str1, const wchar_t *str2); extern DECLSPEC int SDLCALL SDL_wcsncmp(const wchar_t *str1, const wchar_t *str2, size_t maxlen); extern DECLSPEC int SDLCALL SDL_wcscasecmp(const wchar_t *str1, const wchar_t *str2); extern DECLSPEC int SDLCALL SDL_wcsncasecmp(const wchar_t *str1, const wchar_t *str2, size_t len); extern DECLSPEC size_t SDLCALL SDL_strlen(const char *str); extern DECLSPEC size_t SDLCALL SDL_strlcpy(SDL_OUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen); extern DECLSPEC size_t SDLCALL SDL_utf8strlcpy(SDL_OUT_Z_CAP(dst_bytes) char *dst, const char *src, size_t dst_bytes); extern DECLSPEC size_t SDLCALL SDL_strlcat(SDL_INOUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen); extern DECLSPEC char *SDLCALL SDL_strdup(const char *str); extern DECLSPEC char *SDLCALL SDL_strrev(char *str); extern DECLSPEC char *SDLCALL SDL_strupr(char *str); extern DECLSPEC char *SDLCALL SDL_strlwr(char *str); extern DECLSPEC char *SDLCALL SDL_strchr(const char *str, int c); extern DECLSPEC char *SDLCALL SDL_strrchr(const char *str, int c); extern DECLSPEC char *SDLCALL SDL_strstr(const char *haystack, const char *needle); extern DECLSPEC char *SDLCALL SDL_strcasestr(const char *haystack, const char *needle); extern DECLSPEC char *SDLCALL SDL_strtokr(char *s1, const char *s2, char **saveptr); extern DECLSPEC size_t SDLCALL SDL_utf8strlen(const char *str); extern DECLSPEC size_t SDLCALL SDL_utf8strnlen(const char *str, size_t bytes); extern DECLSPEC char *SDLCALL SDL_itoa(int value, char *str, int radix); extern DECLSPEC char *SDLCALL SDL_uitoa(unsigned int value, char *str, int radix); extern DECLSPEC char *SDLCALL SDL_ltoa(long value, char *str, int radix); extern DECLSPEC char *SDLCALL SDL_ultoa(unsigned long value, char *str, int radix); extern DECLSPEC char *SDLCALL SDL_lltoa(Sint64 value, char *str, int radix); extern DECLSPEC char *SDLCALL SDL_ulltoa(Uint64 value, char *str, int radix); extern DECLSPEC int SDLCALL SDL_atoi(const char *str); extern DECLSPEC double SDLCALL SDL_atof(const char *str); extern DECLSPEC long SDLCALL SDL_strtol(const char *str, char **endp, int base); extern DECLSPEC unsigned long SDLCALL SDL_strtoul(const char *str, char **endp, int base); extern DECLSPEC Sint64 SDLCALL SDL_strtoll(const char *str, char **endp, int base); extern DECLSPEC Uint64 SDLCALL SDL_strtoull(const char *str, char **endp, int base); extern DECLSPEC double SDLCALL SDL_strtod(const char *str, char **endp); extern DECLSPEC int SDLCALL SDL_strcmp(const char *str1, const char *str2); extern DECLSPEC int SDLCALL SDL_strncmp(const char *str1, const char *str2, size_t maxlen); extern DECLSPEC int SDLCALL SDL_strcasecmp(const char *str1, const char *str2); extern DECLSPEC int SDLCALL SDL_strncasecmp(const char *str1, const char *str2, size_t len); extern DECLSPEC int SDLCALL SDL_sscanf(const char *text, SDL_SCANF_FORMAT_STRING const char *fmt, ...) SDL_SCANF_VARARG_FUNC(2); extern DECLSPEC int SDLCALL SDL_vsscanf(const char *text, SDL_SCANF_FORMAT_STRING const char *fmt, va_list ap) SDL_SCANF_VARARG_FUNCV(2); extern DECLSPEC int SDLCALL SDL_snprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, SDL_PRINTF_FORMAT_STRING const char *fmt, ... ) SDL_PRINTF_VARARG_FUNC(3); extern DECLSPEC int SDLCALL SDL_vsnprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, SDL_PRINTF_FORMAT_STRING const char *fmt, va_list ap) SDL_PRINTF_VARARG_FUNCV(3); extern DECLSPEC int SDLCALL SDL_asprintf(char **strp, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); extern DECLSPEC int SDLCALL SDL_vasprintf(char **strp, SDL_PRINTF_FORMAT_STRING const char *fmt, va_list ap) SDL_PRINTF_VARARG_FUNCV(2); #ifndef HAVE_M_PI #ifndef M_PI #define M_PI 3.14159265358979323846264338327950288 /**< pi */ #endif #endif /** * Use this function to compute arc cosine of `x`. * * The definition of `y = acos(x)` is `x = cos(y)`. * * Domain: `-1 <= x <= 1` * * Range: `0 <= y <= Pi` * * \param x floating point value, in radians. * \returns arc cosine of `x`. * * \since This function is available since SDL 2.0.2. */ extern DECLSPEC double SDLCALL SDL_acos(double x); extern DECLSPEC float SDLCALL SDL_acosf(float x); extern DECLSPEC double SDLCALL SDL_asin(double x); extern DECLSPEC float SDLCALL SDL_asinf(float x); extern DECLSPEC double SDLCALL SDL_atan(double x); extern DECLSPEC float SDLCALL SDL_atanf(float x); extern DECLSPEC double SDLCALL SDL_atan2(double y, double x); extern DECLSPEC float SDLCALL SDL_atan2f(float y, float x); extern DECLSPEC double SDLCALL SDL_ceil(double x); extern DECLSPEC float SDLCALL SDL_ceilf(float x); extern DECLSPEC double SDLCALL SDL_copysign(double x, double y); extern DECLSPEC float SDLCALL SDL_copysignf(float x, float y); extern DECLSPEC double SDLCALL SDL_cos(double x); extern DECLSPEC float SDLCALL SDL_cosf(float x); extern DECLSPEC double SDLCALL SDL_exp(double x); extern DECLSPEC float SDLCALL SDL_expf(float x); extern DECLSPEC double SDLCALL SDL_fabs(double x); extern DECLSPEC float SDLCALL SDL_fabsf(float x); extern DECLSPEC double SDLCALL SDL_floor(double x); extern DECLSPEC float SDLCALL SDL_floorf(float x); extern DECLSPEC double SDLCALL SDL_trunc(double x); extern DECLSPEC float SDLCALL SDL_truncf(float x); extern DECLSPEC double SDLCALL SDL_fmod(double x, double y); extern DECLSPEC float SDLCALL SDL_fmodf(float x, float y); extern DECLSPEC double SDLCALL SDL_log(double x); extern DECLSPEC float SDLCALL SDL_logf(float x); extern DECLSPEC double SDLCALL SDL_log10(double x); extern DECLSPEC float SDLCALL SDL_log10f(float x); extern DECLSPEC double SDLCALL SDL_pow(double x, double y); extern DECLSPEC float SDLCALL SDL_powf(float x, float y); extern DECLSPEC double SDLCALL SDL_round(double x); extern DECLSPEC float SDLCALL SDL_roundf(float x); extern DECLSPEC long SDLCALL SDL_lround(double x); extern DECLSPEC long SDLCALL SDL_lroundf(float x); extern DECLSPEC double SDLCALL SDL_scalbn(double x, int n); extern DECLSPEC float SDLCALL SDL_scalbnf(float x, int n); extern DECLSPEC double SDLCALL SDL_sin(double x); extern DECLSPEC float SDLCALL SDL_sinf(float x); extern DECLSPEC double SDLCALL SDL_sqrt(double x); extern DECLSPEC float SDLCALL SDL_sqrtf(float x); extern DECLSPEC double SDLCALL SDL_tan(double x); extern DECLSPEC float SDLCALL SDL_tanf(float x); /* The SDL implementation of iconv() returns these error codes */ #define SDL_ICONV_ERROR (size_t)-1 #define SDL_ICONV_E2BIG (size_t)-2 #define SDL_ICONV_EILSEQ (size_t)-3 #define SDL_ICONV_EINVAL (size_t)-4 /* SDL_iconv_* are now always real symbols/types, not macros or inlined. */ typedef struct _SDL_iconv_t *SDL_iconv_t; extern DECLSPEC SDL_iconv_t SDLCALL SDL_iconv_open(const char *tocode, const char *fromcode); extern DECLSPEC int SDLCALL SDL_iconv_close(SDL_iconv_t cd); extern DECLSPEC size_t SDLCALL SDL_iconv(SDL_iconv_t cd, const char **inbuf, size_t * inbytesleft, char **outbuf, size_t * outbytesleft); /** * This function converts a buffer or string between encodings in one pass, * returning a string that must be freed with SDL_free() or NULL on error. * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC char *SDLCALL SDL_iconv_string(const char *tocode, const char *fromcode, const char *inbuf, size_t inbytesleft); #define SDL_iconv_utf8_locale(S) SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1) #define SDL_iconv_utf8_ucs2(S) (Uint16 *)SDL_iconv_string("UCS-2", "UTF-8", S, SDL_strlen(S)+1) #define SDL_iconv_utf8_ucs4(S) (Uint32 *)SDL_iconv_string("UCS-4", "UTF-8", S, SDL_strlen(S)+1) #define SDL_iconv_wchar_utf8(S) SDL_iconv_string("UTF-8", "WCHAR_T", (char *)S, (SDL_wcslen(S)+1)*sizeof(wchar_t)) /* force builds using Clang's static analysis tools to use literal C runtime here, since there are possibly tests that are ineffective otherwise. */ #if defined(__clang_analyzer__) && !defined(SDL_DISABLE_ANALYZE_MACROS) /* The analyzer knows about strlcpy even when the system doesn't provide it */ #ifndef HAVE_STRLCPY size_t strlcpy(char* dst, const char* src, size_t size); #endif /* The analyzer knows about strlcat even when the system doesn't provide it */ #ifndef HAVE_STRLCAT size_t strlcat(char* dst, const char* src, size_t size); #endif #ifndef HAVE_WCSLCPY size_t wcslcpy(wchar_t *dst, const wchar_t *src, size_t size); #endif #ifndef HAVE_WCSLCAT size_t wcslcat(wchar_t *dst, const wchar_t *src, size_t size); #endif /* Starting LLVM 16, the analyser errors out if these functions do not have their prototype defined (clang-diagnostic-implicit-function-declaration) */ #include #include #include #define SDL_malloc malloc #define SDL_calloc calloc #define SDL_realloc realloc #define SDL_free free #define SDL_memset memset #define SDL_memcpy memcpy #define SDL_memmove memmove #define SDL_memcmp memcmp #define SDL_strlcpy strlcpy #define SDL_strlcat strlcat #define SDL_strlen strlen #define SDL_wcslen wcslen #define SDL_wcslcpy wcslcpy #define SDL_wcslcat wcslcat #define SDL_strdup strdup #define SDL_wcsdup wcsdup #define SDL_strchr strchr #define SDL_strrchr strrchr #define SDL_strstr strstr #define SDL_wcsstr wcsstr #define SDL_strtokr strtok_r #define SDL_strcmp strcmp #define SDL_wcscmp wcscmp #define SDL_strncmp strncmp #define SDL_wcsncmp wcsncmp #define SDL_strcasecmp strcasecmp #define SDL_strncasecmp strncasecmp #define SDL_sscanf sscanf #define SDL_vsscanf vsscanf #define SDL_snprintf snprintf #define SDL_vsnprintf vsnprintf #endif SDL_FORCE_INLINE void *SDL_memcpy4(SDL_OUT_BYTECAP(dwords*4) void *dst, SDL_IN_BYTECAP(dwords*4) const void *src, size_t dwords) { return SDL_memcpy(dst, src, dwords * 4); } /** * If a * b would overflow, return -1. Otherwise store a * b via ret * and return 0. * * \since This function is available since SDL 2.24.0. */ SDL_FORCE_INLINE int SDL_size_mul_overflow (size_t a, size_t b, size_t *ret) { if (a != 0 && b > SDL_SIZE_MAX / a) { return -1; } *ret = a * b; return 0; } #if _SDL_HAS_BUILTIN(__builtin_mul_overflow) /* This needs to be wrapped in an inline rather than being a direct #define, * because __builtin_mul_overflow() is type-generic, but we want to be * consistent about interpreting a and b as size_t. */ SDL_FORCE_INLINE int _SDL_size_mul_overflow_builtin (size_t a, size_t b, size_t *ret) { return __builtin_mul_overflow(a, b, ret) == 0 ? 0 : -1; } #define SDL_size_mul_overflow(a, b, ret) (_SDL_size_mul_overflow_builtin(a, b, ret)) #endif /** * If a + b would overflow, return -1. Otherwise store a + b via ret * and return 0. * * \since This function is available since SDL 2.24.0. */ SDL_FORCE_INLINE int SDL_size_add_overflow (size_t a, size_t b, size_t *ret) { if (b > SDL_SIZE_MAX - a) { return -1; } *ret = a + b; return 0; } #if _SDL_HAS_BUILTIN(__builtin_add_overflow) /* This needs to be wrapped in an inline rather than being a direct #define, * the same as the call to __builtin_mul_overflow() above. */ SDL_FORCE_INLINE int _SDL_size_add_overflow_builtin (size_t a, size_t b, size_t *ret) { return __builtin_add_overflow(a, b, ret) == 0 ? 0 : -1; } #define SDL_size_add_overflow(a, b, ret) (_SDL_size_add_overflow_builtin(a, b, ret)) #endif /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_stdinc_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_surface.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_surface.h * * Header file for ::SDL_Surface definition and management functions. */ #ifndef SDL_surface_h_ #define SDL_surface_h_ #include "SDL_stdinc.h" #include "SDL_pixels.h" #include "SDL_rect.h" #include "SDL_blendmode.h" #include "SDL_rwops.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** * \name Surface flags * * These are the currently supported flags for the ::SDL_Surface. * * \internal * Used internally (read-only). */ /* @{ */ #define SDL_SWSURFACE 0 /**< Just here for compatibility */ #define SDL_PREALLOC 0x00000001 /**< Surface uses preallocated memory */ #define SDL_RLEACCEL 0x00000002 /**< Surface is RLE encoded */ #define SDL_DONTFREE 0x00000004 /**< Surface is referenced internally */ #define SDL_SIMD_ALIGNED 0x00000008 /**< Surface uses aligned memory */ /* @} *//* Surface flags */ /** * Evaluates to true if the surface needs to be locked before access. */ #define SDL_MUSTLOCK(S) (((S)->flags & SDL_RLEACCEL) != 0) typedef struct SDL_BlitMap SDL_BlitMap; /* this is an opaque type. */ /** * \brief A collection of pixels used in software blitting. * * \note This structure should be treated as read-only, except for \c pixels, * which, if not NULL, contains the raw pixel data for the surface. */ typedef struct SDL_Surface { Uint32 flags; /**< Read-only */ SDL_PixelFormat *format; /**< Read-only */ int w, h; /**< Read-only */ int pitch; /**< Read-only */ void *pixels; /**< Read-write */ /** Application data associated with the surface */ void *userdata; /**< Read-write */ /** information needed for surfaces requiring locks */ int locked; /**< Read-only */ /** list of BlitMap that hold a reference to this surface */ void *list_blitmap; /**< Private */ /** clipping information */ SDL_Rect clip_rect; /**< Read-only */ /** info for fast blit mapping to other surfaces */ SDL_BlitMap *map; /**< Private */ /** Reference count -- used when freeing surface */ int refcount; /**< Read-mostly */ } SDL_Surface; /** * \brief The type of function used for surface blitting functions. */ typedef int (SDLCALL *SDL_blit) (struct SDL_Surface * src, SDL_Rect * srcrect, struct SDL_Surface * dst, SDL_Rect * dstrect); /** * \brief The formula used for converting between YUV and RGB */ typedef enum { SDL_YUV_CONVERSION_JPEG, /**< Full range JPEG */ SDL_YUV_CONVERSION_BT601, /**< BT.601 (the default) */ SDL_YUV_CONVERSION_BT709, /**< BT.709 */ SDL_YUV_CONVERSION_AUTOMATIC /**< BT.601 for SD content, BT.709 for HD content */ } SDL_YUV_CONVERSION_MODE; /** * Allocate a new RGB surface. * * If `depth` is 4 or 8 bits, an empty palette is allocated for the surface. * If `depth` is greater than 8 bits, the pixel format is set using the * [RGBA]mask parameters. * * The [RGBA]mask parameters are the bitmasks used to extract that color from * a pixel. For instance, `Rmask` being 0xFF000000 means the red data is * stored in the most significant byte. Using zeros for the RGB masks sets a * default value, based on the depth. For example: * * ```c++ * SDL_CreateRGBSurface(0,w,h,32,0,0,0,0); * ``` * * However, using zero for the Amask results in an Amask of 0. * * By default surfaces with an alpha mask are set up for blending as with: * * ```c++ * SDL_SetSurfaceBlendMode(surface, SDL_BLENDMODE_BLEND) * ``` * * You can change this by calling SDL_SetSurfaceBlendMode() and selecting a * different `blendMode`. * * \param flags the flags are unused and should be set to 0 * \param width the width of the surface * \param height the height of the surface * \param depth the depth of the surface in bits * \param Rmask the red mask for the pixels * \param Gmask the green mask for the pixels * \param Bmask the blue mask for the pixels * \param Amask the alpha mask for the pixels * \returns the new SDL_Surface structure that is created or NULL if it fails; * call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateRGBSurfaceFrom * \sa SDL_CreateRGBSurfaceWithFormat * \sa SDL_FreeSurface */ extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurface (Uint32 flags, int width, int height, int depth, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask); /* !!! FIXME for 2.1: why does this ask for depth? Format provides that. */ /** * Allocate a new RGB surface with a specific pixel format. * * This function operates mostly like SDL_CreateRGBSurface(), except instead * of providing pixel color masks, you provide it with a predefined format * from SDL_PixelFormatEnum. * * \param flags the flags are unused and should be set to 0 * \param width the width of the surface * \param height the height of the surface * \param depth the depth of the surface in bits * \param format the SDL_PixelFormatEnum for the new surface's pixel format. * \returns the new SDL_Surface structure that is created or NULL if it fails; * call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.5. * * \sa SDL_CreateRGBSurface * \sa SDL_CreateRGBSurfaceFrom * \sa SDL_FreeSurface */ extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceWithFormat (Uint32 flags, int width, int height, int depth, Uint32 format); /** * Allocate a new RGB surface with existing pixel data. * * This function operates mostly like SDL_CreateRGBSurface(), except it does * not allocate memory for the pixel data, instead the caller provides an * existing buffer of data for the surface to use. * * No copy is made of the pixel data. Pixel data is not managed automatically; * you must free the surface before you free the pixel data. * * \param pixels a pointer to existing pixel data * \param width the width of the surface * \param height the height of the surface * \param depth the depth of the surface in bits * \param pitch the pitch of the surface in bytes * \param Rmask the red mask for the pixels * \param Gmask the green mask for the pixels * \param Bmask the blue mask for the pixels * \param Amask the alpha mask for the pixels * \returns the new SDL_Surface structure that is created or NULL if it fails; * call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateRGBSurface * \sa SDL_CreateRGBSurfaceWithFormat * \sa SDL_FreeSurface */ extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceFrom(void *pixels, int width, int height, int depth, int pitch, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask); /* !!! FIXME for 2.1: why does this ask for depth? Format provides that. */ /** * Allocate a new RGB surface with with a specific pixel format and existing * pixel data. * * This function operates mostly like SDL_CreateRGBSurfaceFrom(), except * instead of providing pixel color masks, you provide it with a predefined * format from SDL_PixelFormatEnum. * * No copy is made of the pixel data. Pixel data is not managed automatically; * you must free the surface before you free the pixel data. * * \param pixels a pointer to existing pixel data * \param width the width of the surface * \param height the height of the surface * \param depth the depth of the surface in bits * \param pitch the pitch of the surface in bytes * \param format the SDL_PixelFormatEnum for the new surface's pixel format. * \returns the new SDL_Surface structure that is created or NULL if it fails; * call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.5. * * \sa SDL_CreateRGBSurfaceFrom * \sa SDL_CreateRGBSurfaceWithFormat * \sa SDL_FreeSurface */ extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceWithFormatFrom (void *pixels, int width, int height, int depth, int pitch, Uint32 format); /** * Free an RGB surface. * * It is safe to pass NULL to this function. * * \param surface the SDL_Surface to free. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateRGBSurface * \sa SDL_CreateRGBSurfaceFrom * \sa SDL_LoadBMP * \sa SDL_LoadBMP_RW */ extern DECLSPEC void SDLCALL SDL_FreeSurface(SDL_Surface * surface); /** * Set the palette used by a surface. * * A single palette can be shared with many surfaces. * * \param surface the SDL_Surface structure to update * \param palette the SDL_Palette structure to use * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC int SDLCALL SDL_SetSurfacePalette(SDL_Surface * surface, SDL_Palette * palette); /** * Set up a surface for directly accessing the pixels. * * Between calls to SDL_LockSurface() / SDL_UnlockSurface(), you can write to * and read from `surface->pixels`, using the pixel format stored in * `surface->format`. Once you are done accessing the surface, you should use * SDL_UnlockSurface() to release it. * * Not all surfaces require locking. If `SDL_MUSTLOCK(surface)` evaluates to * 0, then you can read and write to the surface at any time, and the pixel * format of the surface will not change. * * \param surface the SDL_Surface structure to be locked * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_MUSTLOCK * \sa SDL_UnlockSurface */ extern DECLSPEC int SDLCALL SDL_LockSurface(SDL_Surface * surface); /** * Release a surface after directly accessing the pixels. * * \param surface the SDL_Surface structure to be unlocked * * \since This function is available since SDL 2.0.0. * * \sa SDL_LockSurface */ extern DECLSPEC void SDLCALL SDL_UnlockSurface(SDL_Surface * surface); /** * Load a BMP image from a seekable SDL data stream. * * The new surface should be freed with SDL_FreeSurface(). Not doing so will * result in a memory leak. * * src is an open SDL_RWops buffer, typically loaded with SDL_RWFromFile. * Alternitavely, you might also use the macro SDL_LoadBMP to load a bitmap * from a file, convert it to an SDL_Surface and then close the file. * * \param src the data stream for the surface * \param freesrc non-zero to close the stream after being read * \returns a pointer to a new SDL_Surface structure or NULL if there was an * error; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_FreeSurface * \sa SDL_RWFromFile * \sa SDL_LoadBMP * \sa SDL_SaveBMP_RW */ extern DECLSPEC SDL_Surface *SDLCALL SDL_LoadBMP_RW(SDL_RWops * src, int freesrc); /** * Load a surface from a file. * * Convenience macro. */ #define SDL_LoadBMP(file) SDL_LoadBMP_RW(SDL_RWFromFile(file, "rb"), 1) /** * Save a surface to a seekable SDL data stream in BMP format. * * Surfaces with a 24-bit, 32-bit and paletted 8-bit format get saved in the * BMP directly. Other RGB formats with 8-bit or higher get converted to a * 24-bit surface or, if they have an alpha mask or a colorkey, to a 32-bit * surface before they are saved. YUV and paletted 1-bit and 4-bit formats are * not supported. * * \param surface the SDL_Surface structure containing the image to be saved * \param dst a data stream to save to * \param freedst non-zero to close the stream after being written * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_LoadBMP_RW * \sa SDL_SaveBMP */ extern DECLSPEC int SDLCALL SDL_SaveBMP_RW (SDL_Surface * surface, SDL_RWops * dst, int freedst); /** * Save a surface to a file. * * Convenience macro. */ #define SDL_SaveBMP(surface, file) \ SDL_SaveBMP_RW(surface, SDL_RWFromFile(file, "wb"), 1) /** * Set the RLE acceleration hint for a surface. * * If RLE is enabled, color key and alpha blending blits are much faster, but * the surface must be locked before directly accessing the pixels. * * \param surface the SDL_Surface structure to optimize * \param flag 0 to disable, non-zero to enable RLE acceleration * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_BlitSurface * \sa SDL_LockSurface * \sa SDL_UnlockSurface */ extern DECLSPEC int SDLCALL SDL_SetSurfaceRLE(SDL_Surface * surface, int flag); /** * Returns whether the surface is RLE enabled * * It is safe to pass a NULL `surface` here; it will return SDL_FALSE. * * \param surface the SDL_Surface structure to query * \returns SDL_TRUE if the surface is RLE enabled, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.14. * * \sa SDL_SetSurfaceRLE */ extern DECLSPEC SDL_bool SDLCALL SDL_HasSurfaceRLE(SDL_Surface * surface); /** * Set the color key (transparent pixel) in a surface. * * The color key defines a pixel value that will be treated as transparent in * a blit. For example, one can use this to specify that cyan pixels should be * considered transparent, and therefore not rendered. * * It is a pixel of the format used by the surface, as generated by * SDL_MapRGB(). * * RLE acceleration can substantially speed up blitting of images with large * horizontal runs of transparent pixels. See SDL_SetSurfaceRLE() for details. * * \param surface the SDL_Surface structure to update * \param flag SDL_TRUE to enable color key, SDL_FALSE to disable color key * \param key the transparent pixel * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_BlitSurface * \sa SDL_GetColorKey */ extern DECLSPEC int SDLCALL SDL_SetColorKey(SDL_Surface * surface, int flag, Uint32 key); /** * Returns whether the surface has a color key * * It is safe to pass a NULL `surface` here; it will return SDL_FALSE. * * \param surface the SDL_Surface structure to query * \return SDL_TRUE if the surface has a color key, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.9. * * \sa SDL_SetColorKey * \sa SDL_GetColorKey */ extern DECLSPEC SDL_bool SDLCALL SDL_HasColorKey(SDL_Surface * surface); /** * Get the color key (transparent pixel) for a surface. * * The color key is a pixel of the format used by the surface, as generated by * SDL_MapRGB(). * * If the surface doesn't have color key enabled this function returns -1. * * \param surface the SDL_Surface structure to query * \param key a pointer filled in with the transparent pixel * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_BlitSurface * \sa SDL_SetColorKey */ extern DECLSPEC int SDLCALL SDL_GetColorKey(SDL_Surface * surface, Uint32 * key); /** * Set an additional color value multiplied into blit operations. * * When this surface is blitted, during the blit operation each source color * channel is modulated by the appropriate color value according to the * following formula: * * `srcC = srcC * (color / 255)` * * \param surface the SDL_Surface structure to update * \param r the red color value multiplied into blit operations * \param g the green color value multiplied into blit operations * \param b the blue color value multiplied into blit operations * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetSurfaceColorMod * \sa SDL_SetSurfaceAlphaMod */ extern DECLSPEC int SDLCALL SDL_SetSurfaceColorMod(SDL_Surface * surface, Uint8 r, Uint8 g, Uint8 b); /** * Get the additional color value multiplied into blit operations. * * \param surface the SDL_Surface structure to query * \param r a pointer filled in with the current red color value * \param g a pointer filled in with the current green color value * \param b a pointer filled in with the current blue color value * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetSurfaceAlphaMod * \sa SDL_SetSurfaceColorMod */ extern DECLSPEC int SDLCALL SDL_GetSurfaceColorMod(SDL_Surface * surface, Uint8 * r, Uint8 * g, Uint8 * b); /** * Set an additional alpha value used in blit operations. * * When this surface is blitted, during the blit operation the source alpha * value is modulated by this alpha value according to the following formula: * * `srcA = srcA * (alpha / 255)` * * \param surface the SDL_Surface structure to update * \param alpha the alpha value multiplied into blit operations * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetSurfaceAlphaMod * \sa SDL_SetSurfaceColorMod */ extern DECLSPEC int SDLCALL SDL_SetSurfaceAlphaMod(SDL_Surface * surface, Uint8 alpha); /** * Get the additional alpha value used in blit operations. * * \param surface the SDL_Surface structure to query * \param alpha a pointer filled in with the current alpha value * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetSurfaceColorMod * \sa SDL_SetSurfaceAlphaMod */ extern DECLSPEC int SDLCALL SDL_GetSurfaceAlphaMod(SDL_Surface * surface, Uint8 * alpha); /** * Set the blend mode used for blit operations. * * To copy a surface to another surface (or texture) without blending with the * existing data, the blendmode of the SOURCE surface should be set to * `SDL_BLENDMODE_NONE`. * * \param surface the SDL_Surface structure to update * \param blendMode the SDL_BlendMode to use for blit blending * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetSurfaceBlendMode */ extern DECLSPEC int SDLCALL SDL_SetSurfaceBlendMode(SDL_Surface * surface, SDL_BlendMode blendMode); /** * Get the blend mode used for blit operations. * * \param surface the SDL_Surface structure to query * \param blendMode a pointer filled in with the current SDL_BlendMode * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_SetSurfaceBlendMode */ extern DECLSPEC int SDLCALL SDL_GetSurfaceBlendMode(SDL_Surface * surface, SDL_BlendMode *blendMode); /** * Set the clipping rectangle for a surface. * * When `surface` is the destination of a blit, only the area within the clip * rectangle is drawn into. * * Note that blits are automatically clipped to the edges of the source and * destination surfaces. * * \param surface the SDL_Surface structure to be clipped * \param rect the SDL_Rect structure representing the clipping rectangle, or * NULL to disable clipping * \returns SDL_TRUE if the rectangle intersects the surface, otherwise * SDL_FALSE and blits will be completely clipped. * * \since This function is available since SDL 2.0.0. * * \sa SDL_BlitSurface * \sa SDL_GetClipRect */ extern DECLSPEC SDL_bool SDLCALL SDL_SetClipRect(SDL_Surface * surface, const SDL_Rect * rect); /** * Get the clipping rectangle for a surface. * * When `surface` is the destination of a blit, only the area within the clip * rectangle is drawn into. * * \param surface the SDL_Surface structure representing the surface to be * clipped * \param rect an SDL_Rect structure filled in with the clipping rectangle for * the surface * * \since This function is available since SDL 2.0.0. * * \sa SDL_BlitSurface * \sa SDL_SetClipRect */ extern DECLSPEC void SDLCALL SDL_GetClipRect(SDL_Surface * surface, SDL_Rect * rect); /* * Creates a new surface identical to the existing surface. * * The returned surface should be freed with SDL_FreeSurface(). * * \param surface the surface to duplicate. * \returns a copy of the surface, or NULL on failure; call SDL_GetError() for * more information. */ extern DECLSPEC SDL_Surface *SDLCALL SDL_DuplicateSurface(SDL_Surface * surface); /** * Copy an existing surface to a new surface of the specified format. * * This function is used to optimize images for faster *repeat* blitting. This * is accomplished by converting the original and storing the result as a new * surface. The new, optimized surface can then be used as the source for * future blits, making them faster. * * \param src the existing SDL_Surface structure to convert * \param fmt the SDL_PixelFormat structure that the new surface is optimized * for * \param flags the flags are unused and should be set to 0; this is a * leftover from SDL 1.2's API * \returns the new SDL_Surface structure that is created or NULL if it fails; * call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_AllocFormat * \sa SDL_ConvertSurfaceFormat * \sa SDL_CreateRGBSurface */ extern DECLSPEC SDL_Surface *SDLCALL SDL_ConvertSurface (SDL_Surface * src, const SDL_PixelFormat * fmt, Uint32 flags); /** * Copy an existing surface to a new surface of the specified format enum. * * This function operates just like SDL_ConvertSurface(), but accepts an * SDL_PixelFormatEnum value instead of an SDL_PixelFormat structure. As such, * it might be easier to call but it doesn't have access to palette * information for the destination surface, in case that would be important. * * \param src the existing SDL_Surface structure to convert * \param pixel_format the SDL_PixelFormatEnum that the new surface is * optimized for * \param flags the flags are unused and should be set to 0; this is a * leftover from SDL 1.2's API * \returns the new SDL_Surface structure that is created or NULL if it fails; * call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_AllocFormat * \sa SDL_ConvertSurface * \sa SDL_CreateRGBSurface */ extern DECLSPEC SDL_Surface *SDLCALL SDL_ConvertSurfaceFormat (SDL_Surface * src, Uint32 pixel_format, Uint32 flags); /** * Copy a block of pixels of one format to another format. * * \param width the width of the block to copy, in pixels * \param height the height of the block to copy, in pixels * \param src_format an SDL_PixelFormatEnum value of the `src` pixels format * \param src a pointer to the source pixels * \param src_pitch the pitch of the source pixels, in bytes * \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format * \param dst a pointer to be filled in with new pixel data * \param dst_pitch the pitch of the destination pixels, in bytes * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC int SDLCALL SDL_ConvertPixels(int width, int height, Uint32 src_format, const void * src, int src_pitch, Uint32 dst_format, void * dst, int dst_pitch); /** * Premultiply the alpha on a block of pixels. * * This is safe to use with src == dst, but not for other overlapping areas. * * This function is currently only implemented for SDL_PIXELFORMAT_ARGB8888. * * \param width the width of the block to convert, in pixels * \param height the height of the block to convert, in pixels * \param src_format an SDL_PixelFormatEnum value of the `src` pixels format * \param src a pointer to the source pixels * \param src_pitch the pitch of the source pixels, in bytes * \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format * \param dst a pointer to be filled in with premultiplied pixel data * \param dst_pitch the pitch of the destination pixels, in bytes * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.18. */ extern DECLSPEC int SDLCALL SDL_PremultiplyAlpha(int width, int height, Uint32 src_format, const void * src, int src_pitch, Uint32 dst_format, void * dst, int dst_pitch); /** * Perform a fast fill of a rectangle with a specific color. * * `color` should be a pixel of the format used by the surface, and can be * generated by SDL_MapRGB() or SDL_MapRGBA(). If the color value contains an * alpha component then the destination is simply filled with that alpha * information, no blending takes place. * * If there is a clip rectangle set on the destination (set via * SDL_SetClipRect()), then this function will fill based on the intersection * of the clip rectangle and `rect`. * * \param dst the SDL_Surface structure that is the drawing target * \param rect the SDL_Rect structure representing the rectangle to fill, or * NULL to fill the entire surface * \param color the color to fill with * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_FillRects */ extern DECLSPEC int SDLCALL SDL_FillRect (SDL_Surface * dst, const SDL_Rect * rect, Uint32 color); /** * Perform a fast fill of a set of rectangles with a specific color. * * `color` should be a pixel of the format used by the surface, and can be * generated by SDL_MapRGB() or SDL_MapRGBA(). If the color value contains an * alpha component then the destination is simply filled with that alpha * information, no blending takes place. * * If there is a clip rectangle set on the destination (set via * SDL_SetClipRect()), then this function will fill based on the intersection * of the clip rectangle and `rect`. * * \param dst the SDL_Surface structure that is the drawing target * \param rects an array of SDL_Rects representing the rectangles to fill. * \param count the number of rectangles in the array * \param color the color to fill with * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_FillRect */ extern DECLSPEC int SDLCALL SDL_FillRects (SDL_Surface * dst, const SDL_Rect * rects, int count, Uint32 color); /* !!! FIXME: merge this documentation with the wiki */ /** * Performs a fast blit from the source surface to the destination surface. * * This assumes that the source and destination rectangles are * the same size. If either \c srcrect or \c dstrect are NULL, the entire * surface (\c src or \c dst) is copied. The final blit rectangles are saved * in \c srcrect and \c dstrect after all clipping is performed. * * \returns 0 if the blit is successful, otherwise it returns -1. * * The blit function should not be called on a locked surface. * * The blit semantics for surfaces with and without blending and colorkey * are defined as follows: * \verbatim RGBA->RGB: Source surface blend mode set to SDL_BLENDMODE_BLEND: alpha-blend (using the source alpha-channel and per-surface alpha) SDL_SRCCOLORKEY ignored. Source surface blend mode set to SDL_BLENDMODE_NONE: copy RGB. if SDL_SRCCOLORKEY set, only copy the pixels matching the RGB values of the source color key, ignoring alpha in the comparison. RGB->RGBA: Source surface blend mode set to SDL_BLENDMODE_BLEND: alpha-blend (using the source per-surface alpha) Source surface blend mode set to SDL_BLENDMODE_NONE: copy RGB, set destination alpha to source per-surface alpha value. both: if SDL_SRCCOLORKEY set, only copy the pixels matching the source color key. RGBA->RGBA: Source surface blend mode set to SDL_BLENDMODE_BLEND: alpha-blend (using the source alpha-channel and per-surface alpha) SDL_SRCCOLORKEY ignored. Source surface blend mode set to SDL_BLENDMODE_NONE: copy all of RGBA to the destination. if SDL_SRCCOLORKEY set, only copy the pixels matching the RGB values of the source color key, ignoring alpha in the comparison. RGB->RGB: Source surface blend mode set to SDL_BLENDMODE_BLEND: alpha-blend (using the source per-surface alpha) Source surface blend mode set to SDL_BLENDMODE_NONE: copy RGB. both: if SDL_SRCCOLORKEY set, only copy the pixels matching the source color key. \endverbatim * * You should call SDL_BlitSurface() unless you know exactly how SDL * blitting works internally and how to use the other blit functions. */ #define SDL_BlitSurface SDL_UpperBlit /** * Perform a fast blit from the source surface to the destination surface. * * SDL_UpperBlit() has been replaced by SDL_BlitSurface(), which is merely a * macro for this function with a less confusing name. * * \since This function is available since SDL 2.0.0. * * \sa SDL_BlitSurface */ extern DECLSPEC int SDLCALL SDL_UpperBlit (SDL_Surface * src, const SDL_Rect * srcrect, SDL_Surface * dst, SDL_Rect * dstrect); /** * Perform low-level surface blitting only. * * This is a semi-private blit function and it performs low-level surface * blitting, assuming the input rectangles have already been clipped. * * Unless you know what you're doing, you should be using SDL_BlitSurface() * instead. * * \param src the SDL_Surface structure to be copied from * \param srcrect the SDL_Rect structure representing the rectangle to be * copied, or NULL to copy the entire surface * \param dst the SDL_Surface structure that is the blit target * \param dstrect the SDL_Rect structure representing the rectangle that is * copied into * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_BlitSurface */ extern DECLSPEC int SDLCALL SDL_LowerBlit (SDL_Surface * src, SDL_Rect * srcrect, SDL_Surface * dst, SDL_Rect * dstrect); /** * Perform a fast, low quality, stretch blit between two surfaces of the same * format. * * Please use SDL_BlitScaled() instead. * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC int SDLCALL SDL_SoftStretch(SDL_Surface * src, const SDL_Rect * srcrect, SDL_Surface * dst, const SDL_Rect * dstrect); /** * Perform bilinear scaling between two surfaces of the same format, 32BPP. * * \since This function is available since SDL 2.0.16. */ extern DECLSPEC int SDLCALL SDL_SoftStretchLinear(SDL_Surface * src, const SDL_Rect * srcrect, SDL_Surface * dst, const SDL_Rect * dstrect); #define SDL_BlitScaled SDL_UpperBlitScaled /** * Perform a scaled surface copy to a destination surface. * * SDL_UpperBlitScaled() has been replaced by SDL_BlitScaled(), which is * merely a macro for this function with a less confusing name. * * \since This function is available since SDL 2.0.0. * * \sa SDL_BlitScaled */ extern DECLSPEC int SDLCALL SDL_UpperBlitScaled (SDL_Surface * src, const SDL_Rect * srcrect, SDL_Surface * dst, SDL_Rect * dstrect); /** * Perform low-level surface scaled blitting only. * * This is a semi-private function and it performs low-level surface blitting, * assuming the input rectangles have already been clipped. * * \param src the SDL_Surface structure to be copied from * \param srcrect the SDL_Rect structure representing the rectangle to be * copied * \param dst the SDL_Surface structure that is the blit target * \param dstrect the SDL_Rect structure representing the rectangle that is * copied into * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_BlitScaled */ extern DECLSPEC int SDLCALL SDL_LowerBlitScaled (SDL_Surface * src, SDL_Rect * srcrect, SDL_Surface * dst, SDL_Rect * dstrect); /** * Set the YUV conversion mode * * \since This function is available since SDL 2.0.8. */ extern DECLSPEC void SDLCALL SDL_SetYUVConversionMode(SDL_YUV_CONVERSION_MODE mode); /** * Get the YUV conversion mode * * \since This function is available since SDL 2.0.8. */ extern DECLSPEC SDL_YUV_CONVERSION_MODE SDLCALL SDL_GetYUVConversionMode(void); /** * Get the YUV conversion mode, returning the correct mode for the resolution * when the current conversion mode is SDL_YUV_CONVERSION_AUTOMATIC * * \since This function is available since SDL 2.0.8. */ extern DECLSPEC SDL_YUV_CONVERSION_MODE SDLCALL SDL_GetYUVConversionModeForResolution(int width, int height); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_surface_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_system.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_system.h * * Include file for platform specific SDL API functions */ #ifndef SDL_system_h_ #define SDL_system_h_ #include "SDL_stdinc.h" #include "SDL_keyboard.h" #include "SDL_render.h" #include "SDL_video.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /* Platform specific functions for Windows */ #if defined(__WIN32__) || defined(__GDK__) typedef void (SDLCALL * SDL_WindowsMessageHook)(void *userdata, void *hWnd, unsigned int message, Uint64 wParam, Sint64 lParam); /** * Set a callback for every Windows message, run before TranslateMessage(). * * \param callback The SDL_WindowsMessageHook function to call. * \param userdata a pointer to pass to every iteration of `callback` * * \since This function is available since SDL 2.0.4. */ extern DECLSPEC void SDLCALL SDL_SetWindowsMessageHook(SDL_WindowsMessageHook callback, void *userdata); #endif /* defined(__WIN32__) || defined(__GDK__) */ #if defined(__WIN32__) || defined(__WINGDK__) /** * Get the D3D9 adapter index that matches the specified display index. * * The returned adapter index can be passed to `IDirect3D9::CreateDevice` and * controls on which monitor a full screen application will appear. * * \param displayIndex the display index for which to get the D3D9 adapter * index * \returns the D3D9 adapter index on success or a negative error code on * failure; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.1. */ extern DECLSPEC int SDLCALL SDL_Direct3D9GetAdapterIndex( int displayIndex ); typedef struct IDirect3DDevice9 IDirect3DDevice9; /** * Get the D3D9 device associated with a renderer. * * Once you are done using the device, you should release it to avoid a * resource leak. * * \param renderer the renderer from which to get the associated D3D device * \returns the D3D9 device associated with given renderer or NULL if it is * not a D3D9 renderer; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.1. */ extern DECLSPEC IDirect3DDevice9* SDLCALL SDL_RenderGetD3D9Device(SDL_Renderer * renderer); typedef struct ID3D11Device ID3D11Device; /** * Get the D3D11 device associated with a renderer. * * Once you are done using the device, you should release it to avoid a * resource leak. * * \param renderer the renderer from which to get the associated D3D11 device * \returns the D3D11 device associated with given renderer or NULL if it is * not a D3D11 renderer; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.16. */ extern DECLSPEC ID3D11Device* SDLCALL SDL_RenderGetD3D11Device(SDL_Renderer * renderer); #endif /* defined(__WIN32__) || defined(__WINGDK__) */ #if defined(__WIN32__) || defined(__GDK__) typedef struct ID3D12Device ID3D12Device; /** * Get the D3D12 device associated with a renderer. * * Once you are done using the device, you should release it to avoid a * resource leak. * * \param renderer the renderer from which to get the associated D3D12 device * \returns the D3D12 device associated with given renderer or NULL if it is * not a D3D12 renderer; call SDL_GetError() for more information. * * \since This function is available since SDL 2.24.0. */ extern DECLSPEC ID3D12Device* SDLCALL SDL_RenderGetD3D12Device(SDL_Renderer* renderer); #endif /* defined(__WIN32__) || defined(__GDK__) */ #if defined(__WIN32__) || defined(__WINGDK__) /** * Get the DXGI Adapter and Output indices for the specified display index. * * The DXGI Adapter and Output indices can be passed to `EnumAdapters` and * `EnumOutputs` respectively to get the objects required to create a DX10 or * DX11 device and swap chain. * * Before SDL 2.0.4 this function did not return a value. Since SDL 2.0.4 it * returns an SDL_bool. * * \param displayIndex the display index for which to get both indices * \param adapterIndex a pointer to be filled in with the adapter index * \param outputIndex a pointer to be filled in with the output index * \returns SDL_TRUE on success or SDL_FALSE on failure; call SDL_GetError() * for more information. * * \since This function is available since SDL 2.0.2. */ extern DECLSPEC SDL_bool SDLCALL SDL_DXGIGetOutputInfo( int displayIndex, int *adapterIndex, int *outputIndex ); #endif /* defined(__WIN32__) || defined(__WINGDK__) */ /* Platform specific functions for Linux */ #ifdef __LINUX__ /** * Sets the UNIX nice value for a thread. * * This uses setpriority() if possible, and RealtimeKit if available. * * \param threadID the Unix thread ID to change priority of. * \param priority The new, Unix-specific, priority value. * \returns 0 on success, or -1 on error. * * \since This function is available since SDL 2.0.9. */ extern DECLSPEC int SDLCALL SDL_LinuxSetThreadPriority(Sint64 threadID, int priority); /** * Sets the priority (not nice level) and scheduling policy for a thread. * * This uses setpriority() if possible, and RealtimeKit if available. * * \param threadID The Unix thread ID to change priority of. * \param sdlPriority The new SDL_ThreadPriority value. * \param schedPolicy The new scheduling policy (SCHED_FIFO, SCHED_RR, * SCHED_OTHER, etc...) * \returns 0 on success, or -1 on error. * * \since This function is available since SDL 2.0.18. */ extern DECLSPEC int SDLCALL SDL_LinuxSetThreadPriorityAndPolicy(Sint64 threadID, int sdlPriority, int schedPolicy); #endif /* __LINUX__ */ /* Platform specific functions for iOS */ #ifdef __IPHONEOS__ #define SDL_iOSSetAnimationCallback(window, interval, callback, callbackParam) SDL_iPhoneSetAnimationCallback(window, interval, callback, callbackParam) /** * Use this function to set the animation callback on Apple iOS. * * The function prototype for `callback` is: * * ```c * void callback(void* callbackParam); * ``` * * Where its parameter, `callbackParam`, is what was passed as `callbackParam` * to SDL_iPhoneSetAnimationCallback(). * * This function is only available on Apple iOS. * * For more information see: * https://github.com/libsdl-org/SDL/blob/main/docs/README-ios.md * * This functions is also accessible using the macro * SDL_iOSSetAnimationCallback() since SDL 2.0.4. * * \param window the window for which the animation callback should be set * \param interval the number of frames after which **callback** will be * called * \param callback the function to call for every frame. * \param callbackParam a pointer that is passed to `callback`. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_iPhoneSetEventPump */ extern DECLSPEC int SDLCALL SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, void (SDLCALL *callback)(void*), void *callbackParam); #define SDL_iOSSetEventPump(enabled) SDL_iPhoneSetEventPump(enabled) /** * Use this function to enable or disable the SDL event pump on Apple iOS. * * This function is only available on Apple iOS. * * This functions is also accessible using the macro SDL_iOSSetEventPump() * since SDL 2.0.4. * * \param enabled SDL_TRUE to enable the event pump, SDL_FALSE to disable it * * \since This function is available since SDL 2.0.0. * * \sa SDL_iPhoneSetAnimationCallback */ extern DECLSPEC void SDLCALL SDL_iPhoneSetEventPump(SDL_bool enabled); #endif /* __IPHONEOS__ */ /* Platform specific functions for Android */ #ifdef __ANDROID__ /** * Get the Android Java Native Interface Environment of the current thread. * * This is the JNIEnv one needs to access the Java virtual machine from native * code, and is needed for many Android APIs to be usable from C. * * The prototype of the function in SDL's code actually declare a void* return * type, even if the implementation returns a pointer to a JNIEnv. The * rationale being that the SDL headers can avoid including jni.h. * * \returns a pointer to Java native interface object (JNIEnv) to which the * current thread is attached, or 0 on error. * * \since This function is available since SDL 2.0.0. * * \sa SDL_AndroidGetActivity */ extern DECLSPEC void * SDLCALL SDL_AndroidGetJNIEnv(void); /** * Retrieve the Java instance of the Android activity class. * * The prototype of the function in SDL's code actually declares a void* * return type, even if the implementation returns a jobject. The rationale * being that the SDL headers can avoid including jni.h. * * The jobject returned by the function is a local reference and must be * released by the caller. See the PushLocalFrame() and PopLocalFrame() or * DeleteLocalRef() functions of the Java native interface: * * https://docs.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html * * \returns the jobject representing the instance of the Activity class of the * Android application, or NULL on error. * * \since This function is available since SDL 2.0.0. * * \sa SDL_AndroidGetJNIEnv */ extern DECLSPEC void * SDLCALL SDL_AndroidGetActivity(void); /** * Query Android API level of the current device. * * - API level 31: Android 12 * - API level 30: Android 11 * - API level 29: Android 10 * - API level 28: Android 9 * - API level 27: Android 8.1 * - API level 26: Android 8.0 * - API level 25: Android 7.1 * - API level 24: Android 7.0 * - API level 23: Android 6.0 * - API level 22: Android 5.1 * - API level 21: Android 5.0 * - API level 20: Android 4.4W * - API level 19: Android 4.4 * - API level 18: Android 4.3 * - API level 17: Android 4.2 * - API level 16: Android 4.1 * - API level 15: Android 4.0.3 * - API level 14: Android 4.0 * - API level 13: Android 3.2 * - API level 12: Android 3.1 * - API level 11: Android 3.0 * - API level 10: Android 2.3.3 * * \returns the Android API level. * * \since This function is available since SDL 2.0.12. */ extern DECLSPEC int SDLCALL SDL_GetAndroidSDKVersion(void); /** * Query if the application is running on Android TV. * * \returns SDL_TRUE if this is Android TV, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.8. */ extern DECLSPEC SDL_bool SDLCALL SDL_IsAndroidTV(void); /** * Query if the application is running on a Chromebook. * * \returns SDL_TRUE if this is a Chromebook, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.9. */ extern DECLSPEC SDL_bool SDLCALL SDL_IsChromebook(void); /** * Query if the application is running on a Samsung DeX docking station. * * \returns SDL_TRUE if this is a DeX docking station, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.9. */ extern DECLSPEC SDL_bool SDLCALL SDL_IsDeXMode(void); /** * Trigger the Android system back button behavior. * * \since This function is available since SDL 2.0.9. */ extern DECLSPEC void SDLCALL SDL_AndroidBackButton(void); /** See the official Android developer guide for more information: http://developer.android.com/guide/topics/data/data-storage.html */ #define SDL_ANDROID_EXTERNAL_STORAGE_READ 0x01 #define SDL_ANDROID_EXTERNAL_STORAGE_WRITE 0x02 /** * Get the path used for internal storage for this application. * * This path is unique to your application and cannot be written to by other * applications. * * Your internal storage path is typically: * `/data/data/your.app.package/files`. * * \returns the path used for internal storage or NULL on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_AndroidGetExternalStorageState */ extern DECLSPEC const char * SDLCALL SDL_AndroidGetInternalStoragePath(void); /** * Get the current state of external storage. * * The current state of external storage, a bitmask of these values: * `SDL_ANDROID_EXTERNAL_STORAGE_READ`, `SDL_ANDROID_EXTERNAL_STORAGE_WRITE`. * * If external storage is currently unavailable, this will return 0. * * \returns the current state of external storage on success or 0 on failure; * call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_AndroidGetExternalStoragePath */ extern DECLSPEC int SDLCALL SDL_AndroidGetExternalStorageState(void); /** * Get the path used for external storage for this application. * * This path is unique to your application, but is public and can be written * to by other applications. * * Your external storage path is typically: * `/storage/sdcard0/Android/data/your.app.package/files`. * * \returns the path used for external storage for this application on success * or NULL on failure; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_AndroidGetExternalStorageState */ extern DECLSPEC const char * SDLCALL SDL_AndroidGetExternalStoragePath(void); /** * Request permissions at runtime. * * This blocks the calling thread until the permission is granted or denied. * * \param permission The permission to request. * \returns SDL_TRUE if the permission was granted, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.14. */ extern DECLSPEC SDL_bool SDLCALL SDL_AndroidRequestPermission(const char *permission); /** * Shows an Android toast notification. * * Toasts are a sort of lightweight notification that are unique to Android. * * https://developer.android.com/guide/topics/ui/notifiers/toasts * * Shows toast in UI thread. * * For the `gravity` parameter, choose a value from here, or -1 if you don't * have a preference: * * https://developer.android.com/reference/android/view/Gravity * * \param message text message to be shown * \param duration 0=short, 1=long * \param gravity where the notification should appear on the screen. * \param xoffset set this parameter only when gravity >=0 * \param yoffset set this parameter only when gravity >=0 * \returns 0 if success, -1 if any error occurs. * * \since This function is available since SDL 2.0.16. */ extern DECLSPEC int SDLCALL SDL_AndroidShowToast(const char* message, int duration, int gravity, int xoffset, int yoffset); /** * Send a user command to SDLActivity. * * Override "boolean onUnhandledMessage(Message msg)" to handle the message. * * \param command user command that must be greater or equal to 0x8000 * \param param user parameter * * \since This function is available since SDL 2.0.22. */ extern DECLSPEC int SDLCALL SDL_AndroidSendMessage(Uint32 command, int param); #endif /* __ANDROID__ */ /* Platform specific functions for WinRT */ #ifdef __WINRT__ /** * \brief WinRT / Windows Phone path types */ typedef enum { /** \brief The installed app's root directory. Files here are likely to be read-only. */ SDL_WINRT_PATH_INSTALLED_LOCATION, /** \brief The app's local data store. Files may be written here */ SDL_WINRT_PATH_LOCAL_FOLDER, /** \brief The app's roaming data store. Unsupported on Windows Phone. Files written here may be copied to other machines via a network connection. */ SDL_WINRT_PATH_ROAMING_FOLDER, /** \brief The app's temporary data store. Unsupported on Windows Phone. Files written here may be deleted at any time. */ SDL_WINRT_PATH_TEMP_FOLDER } SDL_WinRT_Path; /** * \brief WinRT Device Family */ typedef enum { /** \brief Unknown family */ SDL_WINRT_DEVICEFAMILY_UNKNOWN, /** \brief Desktop family*/ SDL_WINRT_DEVICEFAMILY_DESKTOP, /** \brief Mobile family (for example smartphone) */ SDL_WINRT_DEVICEFAMILY_MOBILE, /** \brief XBox family */ SDL_WINRT_DEVICEFAMILY_XBOX, } SDL_WinRT_DeviceFamily; /** * Retrieve a WinRT defined path on the local file system. * * Not all paths are available on all versions of Windows. This is especially * true on Windows Phone. Check the documentation for the given SDL_WinRT_Path * for more information on which path types are supported where. * * Documentation on most app-specific path types on WinRT can be found on * MSDN, at the URL: * * https://msdn.microsoft.com/en-us/library/windows/apps/hh464917.aspx * * \param pathType the type of path to retrieve, one of SDL_WinRT_Path * \returns a UCS-2 string (16-bit, wide-char) containing the path, or NULL if * the path is not available for any reason; call SDL_GetError() for * more information. * * \since This function is available since SDL 2.0.3. * * \sa SDL_WinRTGetFSPathUTF8 */ extern DECLSPEC const wchar_t * SDLCALL SDL_WinRTGetFSPathUNICODE(SDL_WinRT_Path pathType); /** * Retrieve a WinRT defined path on the local file system. * * Not all paths are available on all versions of Windows. This is especially * true on Windows Phone. Check the documentation for the given SDL_WinRT_Path * for more information on which path types are supported where. * * Documentation on most app-specific path types on WinRT can be found on * MSDN, at the URL: * * https://msdn.microsoft.com/en-us/library/windows/apps/hh464917.aspx * * \param pathType the type of path to retrieve, one of SDL_WinRT_Path * \returns a UTF-8 string (8-bit, multi-byte) containing the path, or NULL if * the path is not available for any reason; call SDL_GetError() for * more information. * * \since This function is available since SDL 2.0.3. * * \sa SDL_WinRTGetFSPathUNICODE */ extern DECLSPEC const char * SDLCALL SDL_WinRTGetFSPathUTF8(SDL_WinRT_Path pathType); /** * Detects the device family of WinRT platform at runtime. * * \returns a value from the SDL_WinRT_DeviceFamily enum. * * \since This function is available since SDL 2.0.8. */ extern DECLSPEC SDL_WinRT_DeviceFamily SDLCALL SDL_WinRTGetDeviceFamily(); #endif /* __WINRT__ */ /** * Query if the current device is a tablet. * * If SDL can't determine this, it will return SDL_FALSE. * * \returns SDL_TRUE if the device is a tablet, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.9. */ extern DECLSPEC SDL_bool SDLCALL SDL_IsTablet(void); /* Functions used by iOS application delegates to notify SDL about state changes */ extern DECLSPEC void SDLCALL SDL_OnApplicationWillTerminate(void); extern DECLSPEC void SDLCALL SDL_OnApplicationDidReceiveMemoryWarning(void); extern DECLSPEC void SDLCALL SDL_OnApplicationWillResignActive(void); extern DECLSPEC void SDLCALL SDL_OnApplicationDidEnterBackground(void); extern DECLSPEC void SDLCALL SDL_OnApplicationWillEnterForeground(void); extern DECLSPEC void SDLCALL SDL_OnApplicationDidBecomeActive(void); #ifdef __IPHONEOS__ extern DECLSPEC void SDLCALL SDL_OnApplicationDidChangeStatusBarOrientation(void); #endif /* Functions used only by GDK */ #if defined(__GDK__) typedef struct XTaskQueueObject *XTaskQueueHandle; typedef struct XUser *XUserHandle; /** * Gets a reference to the global async task queue handle for GDK, * initializing if needed. * * Once you are done with the task queue, you should call * XTaskQueueCloseHandle to reduce the reference count to avoid a resource * leak. * * \param outTaskQueue a pointer to be filled in with task queue handle. * \returns 0 if success, -1 if any error occurs. * * \since This function is available since SDL 2.24.0. */ extern DECLSPEC int SDLCALL SDL_GDKGetTaskQueue(XTaskQueueHandle * outTaskQueue); /** * Gets a reference to the default user handle for GDK. * * This is effectively a synchronous version of XUserAddAsync, which always * prefers the default user and allows a sign-in UI. * * \param outUserHandle a pointer to be filled in with the default user * handle. * \returns 0 if success, -1 if any error occurs. * * \since This function is available since SDL 2.28.0. */ extern DECLSPEC int SDLCALL SDL_GDKGetDefaultUser(XUserHandle * outUserHandle); #endif /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_system_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_syswm.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_syswm.h * * Include file for SDL custom system window manager hooks. */ #ifndef SDL_syswm_h_ #define SDL_syswm_h_ #include "SDL_stdinc.h" #include "SDL_error.h" #include "SDL_video.h" #include "SDL_version.h" /** * \brief SDL_syswm.h * * Your application has access to a special type of event ::SDL_SYSWMEVENT, * which contains window-manager specific information and arrives whenever * an unhandled window event occurs. This event is ignored by default, but * you can enable it with SDL_EventState(). */ struct SDL_SysWMinfo; #if !defined(SDL_PROTOTYPES_ONLY) #if defined(SDL_VIDEO_DRIVER_WINDOWS) #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #ifndef NOMINMAX /* don't define min() and max(). */ #define NOMINMAX #endif #include #endif #if defined(SDL_VIDEO_DRIVER_WINRT) #include #endif /* This is the structure for custom window manager events */ #if defined(SDL_VIDEO_DRIVER_X11) #if defined(__APPLE__) && defined(__MACH__) /* conflicts with Quickdraw.h */ #define Cursor X11Cursor #endif #include #include #if defined(__APPLE__) && defined(__MACH__) /* matches the re-define above */ #undef Cursor #endif #endif /* defined(SDL_VIDEO_DRIVER_X11) */ #if defined(SDL_VIDEO_DRIVER_DIRECTFB) #include #endif #if defined(SDL_VIDEO_DRIVER_COCOA) #ifdef __OBJC__ @class NSWindow; #else typedef struct _NSWindow NSWindow; #endif #endif #if defined(SDL_VIDEO_DRIVER_UIKIT) #ifdef __OBJC__ #include #else typedef struct _UIWindow UIWindow; typedef struct _UIViewController UIViewController; #endif typedef Uint32 GLuint; #endif #if defined(SDL_VIDEO_VULKAN) || defined(SDL_VIDEO_METAL) #define SDL_METALVIEW_TAG 255 #endif #if defined(SDL_VIDEO_DRIVER_ANDROID) typedef struct ANativeWindow ANativeWindow; typedef void *EGLSurface; #endif #if defined(SDL_VIDEO_DRIVER_VIVANTE) #include "SDL_egl.h" #endif #if defined(SDL_VIDEO_DRIVER_OS2) #define INCL_WIN #include #endif #endif /* SDL_PROTOTYPES_ONLY */ #if defined(SDL_VIDEO_DRIVER_KMSDRM) struct gbm_device; #endif #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif #if !defined(SDL_PROTOTYPES_ONLY) /** * These are the various supported windowing subsystems */ typedef enum { SDL_SYSWM_UNKNOWN, SDL_SYSWM_WINDOWS, SDL_SYSWM_X11, SDL_SYSWM_DIRECTFB, SDL_SYSWM_COCOA, SDL_SYSWM_UIKIT, SDL_SYSWM_WAYLAND, SDL_SYSWM_MIR, /* no longer available, left for API/ABI compatibility. Remove in 2.1! */ SDL_SYSWM_WINRT, SDL_SYSWM_ANDROID, SDL_SYSWM_VIVANTE, SDL_SYSWM_OS2, SDL_SYSWM_HAIKU, SDL_SYSWM_KMSDRM, SDL_SYSWM_RISCOS } SDL_SYSWM_TYPE; /** * The custom event structure. */ struct SDL_SysWMmsg { SDL_version version; SDL_SYSWM_TYPE subsystem; union { #if defined(SDL_VIDEO_DRIVER_WINDOWS) struct { HWND hwnd; /**< The window for the message */ UINT msg; /**< The type of message */ WPARAM wParam; /**< WORD message parameter */ LPARAM lParam; /**< LONG message parameter */ } win; #endif #if defined(SDL_VIDEO_DRIVER_X11) struct { XEvent event; } x11; #endif #if defined(SDL_VIDEO_DRIVER_DIRECTFB) struct { DFBEvent event; } dfb; #endif #if defined(SDL_VIDEO_DRIVER_COCOA) struct { /* Latest version of Xcode clang complains about empty structs in C v. C++: error: empty struct has size 0 in C, size 1 in C++ */ int dummy; /* No Cocoa window events yet */ } cocoa; #endif #if defined(SDL_VIDEO_DRIVER_UIKIT) struct { int dummy; /* No UIKit window events yet */ } uikit; #endif #if defined(SDL_VIDEO_DRIVER_VIVANTE) struct { int dummy; /* No Vivante window events yet */ } vivante; #endif #if defined(SDL_VIDEO_DRIVER_OS2) struct { BOOL fFrame; /**< TRUE if hwnd is a frame window */ HWND hwnd; /**< The window receiving the message */ ULONG msg; /**< The message identifier */ MPARAM mp1; /**< The first first message parameter */ MPARAM mp2; /**< The second first message parameter */ } os2; #endif /* Can't have an empty union */ int dummy; } msg; }; /** * The custom window manager information structure. * * When this structure is returned, it holds information about which * low level system it is using, and will be one of SDL_SYSWM_TYPE. */ struct SDL_SysWMinfo { SDL_version version; SDL_SYSWM_TYPE subsystem; union { #if defined(SDL_VIDEO_DRIVER_WINDOWS) struct { HWND window; /**< The window handle */ HDC hdc; /**< The window device context */ HINSTANCE hinstance; /**< The instance handle */ } win; #endif #if defined(SDL_VIDEO_DRIVER_WINRT) struct { IInspectable * window; /**< The WinRT CoreWindow */ } winrt; #endif #if defined(SDL_VIDEO_DRIVER_X11) struct { Display *display; /**< The X11 display */ Window window; /**< The X11 window */ } x11; #endif #if defined(SDL_VIDEO_DRIVER_DIRECTFB) struct { IDirectFB *dfb; /**< The directfb main interface */ IDirectFBWindow *window; /**< The directfb window handle */ IDirectFBSurface *surface; /**< The directfb client surface */ } dfb; #endif #if defined(SDL_VIDEO_DRIVER_COCOA) struct { #if defined(__OBJC__) && defined(__has_feature) #if __has_feature(objc_arc) NSWindow __unsafe_unretained *window; /**< The Cocoa window */ #else NSWindow *window; /**< The Cocoa window */ #endif #else NSWindow *window; /**< The Cocoa window */ #endif } cocoa; #endif #if defined(SDL_VIDEO_DRIVER_UIKIT) struct { #if defined(__OBJC__) && defined(__has_feature) #if __has_feature(objc_arc) UIWindow __unsafe_unretained *window; /**< The UIKit window */ #else UIWindow *window; /**< The UIKit window */ #endif #else UIWindow *window; /**< The UIKit window */ #endif GLuint framebuffer; /**< The GL view's Framebuffer Object. It must be bound when rendering to the screen using GL. */ GLuint colorbuffer; /**< The GL view's color Renderbuffer Object. It must be bound when SDL_GL_SwapWindow is called. */ GLuint resolveFramebuffer; /**< The Framebuffer Object which holds the resolve color Renderbuffer, when MSAA is used. */ } uikit; #endif #if defined(SDL_VIDEO_DRIVER_WAYLAND) struct { struct wl_display *display; /**< Wayland display */ struct wl_surface *surface; /**< Wayland surface */ void *shell_surface; /**< DEPRECATED Wayland shell_surface (window manager handle) */ struct wl_egl_window *egl_window; /**< Wayland EGL window (native window) */ struct xdg_surface *xdg_surface; /**< Wayland xdg surface (window manager handle) */ struct xdg_toplevel *xdg_toplevel; /**< Wayland xdg toplevel role */ struct xdg_popup *xdg_popup; /**< Wayland xdg popup role */ struct xdg_positioner *xdg_positioner; /**< Wayland xdg positioner, for popup */ } wl; #endif #if defined(SDL_VIDEO_DRIVER_MIR) /* no longer available, left for API/ABI compatibility. Remove in 2.1! */ struct { void *connection; /**< Mir display server connection */ void *surface; /**< Mir surface */ } mir; #endif #if defined(SDL_VIDEO_DRIVER_ANDROID) struct { ANativeWindow *window; EGLSurface surface; } android; #endif #if defined(SDL_VIDEO_DRIVER_OS2) struct { HWND hwnd; /**< The window handle */ HWND hwndFrame; /**< The frame window handle */ } os2; #endif #if defined(SDL_VIDEO_DRIVER_VIVANTE) struct { EGLNativeDisplayType display; EGLNativeWindowType window; } vivante; #endif #if defined(SDL_VIDEO_DRIVER_KMSDRM) struct { int dev_index; /**< Device index (ex: the X in /dev/dri/cardX) */ int drm_fd; /**< DRM FD (unavailable on Vulkan windows) */ struct gbm_device *gbm_dev; /**< GBM device (unavailable on Vulkan windows) */ } kmsdrm; #endif /* Make sure this union is always 64 bytes (8 64-bit pointers). */ /* Be careful not to overflow this if you add a new target! */ Uint8 dummy[64]; } info; }; #endif /* SDL_PROTOTYPES_ONLY */ typedef struct SDL_SysWMinfo SDL_SysWMinfo; /** * Get driver-specific information about a window. * * You must include SDL_syswm.h for the declaration of SDL_SysWMinfo. * * The caller must initialize the `info` structure's version by using * `SDL_VERSION(&info.version)`, and then this function will fill in the rest * of the structure with information about the given window. * * \param window the window about which information is being requested * \param info an SDL_SysWMinfo structure filled in with window information * \returns SDL_TRUE if the function is implemented and the `version` member * of the `info` struct is valid, or SDL_FALSE if the information * could not be retrieved; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowWMInfo(SDL_Window * window, SDL_SysWMinfo * info); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_syswm_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_test.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_test.h * * Include file for SDL test framework. * * This code is a part of the SDL2_test library, not the main SDL library. */ #ifndef SDL_test_h_ #define SDL_test_h_ #include "SDL.h" #include "SDL_test_assert.h" #include "SDL_test_common.h" #include "SDL_test_compare.h" #include "SDL_test_crc32.h" #include "SDL_test_font.h" #include "SDL_test_fuzzer.h" #include "SDL_test_harness.h" #include "SDL_test_images.h" #include "SDL_test_log.h" #include "SDL_test_md5.h" #include "SDL_test_memory.h" #include "SDL_test_random.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /* Global definitions */ /* * Note: Maximum size of SDLTest log message is less than SDL's limit * to ensure we can fit additional information such as the timestamp. */ #define SDLTEST_MAX_LOGMESSAGE_LENGTH 3584 /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_test_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_test_assert.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_test_assert.h * * Include file for SDL test framework. * * This code is a part of the SDL2_test library, not the main SDL library. */ /* * * Assert API for test code and test cases * */ #ifndef SDL_test_assert_h_ #define SDL_test_assert_h_ #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** * \brief Fails the assert. */ #define ASSERT_FAIL 0 /** * \brief Passes the assert. */ #define ASSERT_PASS 1 /** * \brief Assert that logs and break execution flow on failures. * * \param assertCondition Evaluated condition or variable to assert; fail (==0) or pass (!=0). * \param assertDescription Message to log with the assert describing it. */ void SDLTest_Assert(int assertCondition, SDL_PRINTF_FORMAT_STRING const char *assertDescription, ...) SDL_PRINTF_VARARG_FUNC(2); /** * \brief Assert for test cases that logs but does not break execution flow on failures. Updates assertion counters. * * \param assertCondition Evaluated condition or variable to assert; fail (==0) or pass (!=0). * \param assertDescription Message to log with the assert describing it. * * \returns the assertCondition so it can be used to externally to break execution flow if desired. */ int SDLTest_AssertCheck(int assertCondition, SDL_PRINTF_FORMAT_STRING const char *assertDescription, ...) SDL_PRINTF_VARARG_FUNC(2); /** * \brief Explicitly pass without checking an assertion condition. Updates assertion counter. * * \param assertDescription Message to log with the assert describing it. */ void SDLTest_AssertPass(SDL_PRINTF_FORMAT_STRING const char *assertDescription, ...) SDL_PRINTF_VARARG_FUNC(1); /** * \brief Resets the assert summary counters to zero. */ void SDLTest_ResetAssertSummary(void); /** * \brief Logs summary of all assertions (total, pass, fail) since last reset as INFO or ERROR. */ void SDLTest_LogAssertSummary(void); /** * \brief Converts the current assert summary state to a test result. * * \returns TEST_RESULT_PASSED, TEST_RESULT_FAILED, or TEST_RESULT_NO_ASSERT */ int SDLTest_AssertSummaryToTestResult(void); #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_test_assert_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_test_common.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_test_common.h * * Include file for SDL test framework. * * This code is a part of the SDL2_test library, not the main SDL library. */ /* Ported from original test\common.h file. */ #ifndef SDL_test_common_h_ #define SDL_test_common_h_ #include "SDL.h" #if defined(__PSP__) #define DEFAULT_WINDOW_WIDTH 480 #define DEFAULT_WINDOW_HEIGHT 272 #elif defined(__VITA__) #define DEFAULT_WINDOW_WIDTH 960 #define DEFAULT_WINDOW_HEIGHT 544 #else #define DEFAULT_WINDOW_WIDTH 640 #define DEFAULT_WINDOW_HEIGHT 480 #endif #define VERBOSE_VIDEO 0x00000001 #define VERBOSE_MODES 0x00000002 #define VERBOSE_RENDER 0x00000004 #define VERBOSE_EVENT 0x00000008 #define VERBOSE_AUDIO 0x00000010 #define VERBOSE_MOTION 0x00000020 typedef struct { /* SDL init flags */ char **argv; Uint32 flags; Uint32 verbose; /* Video info */ const char *videodriver; int display; const char *window_title; const char *window_icon; Uint32 window_flags; SDL_bool flash_on_focus_loss; int window_x; int window_y; int window_w; int window_h; int window_minW; int window_minH; int window_maxW; int window_maxH; int logical_w; int logical_h; float scale; int depth; int refresh_rate; int num_windows; SDL_Window **windows; /* Renderer info */ const char *renderdriver; Uint32 render_flags; SDL_bool skip_renderer; SDL_Renderer **renderers; SDL_Texture **targets; /* Audio info */ const char *audiodriver; SDL_AudioSpec audiospec; /* GL settings */ int gl_red_size; int gl_green_size; int gl_blue_size; int gl_alpha_size; int gl_buffer_size; int gl_depth_size; int gl_stencil_size; int gl_double_buffer; int gl_accum_red_size; int gl_accum_green_size; int gl_accum_blue_size; int gl_accum_alpha_size; int gl_stereo; int gl_multisamplebuffers; int gl_multisamplesamples; int gl_retained_backing; int gl_accelerated; int gl_major_version; int gl_minor_version; int gl_debug; int gl_profile_mask; /* Additional fields added in 2.0.18 */ SDL_Rect confine; } SDLTest_CommonState; #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /* Function prototypes */ /** * \brief Parse command line parameters and create common state. * * \param argv Array of command line parameters * \param flags Flags indicating which subsystem to initialize (i.e. SDL_INIT_VIDEO | SDL_INIT_AUDIO) * * \returns a newly allocated common state object. */ SDLTest_CommonState *SDLTest_CommonCreateState(char **argv, Uint32 flags); /** * \brief Process one common argument. * * \param state The common state describing the test window to create. * \param index The index of the argument to process in argv[]. * * \returns the number of arguments processed (i.e. 1 for --fullscreen, 2 for --video [videodriver], or -1 on error. */ int SDLTest_CommonArg(SDLTest_CommonState * state, int index); /** * \brief Logs command line usage info. * * This logs the appropriate command line options for the subsystems in use * plus other common options, and then any application-specific options. * This uses the SDL_Log() function and splits up output to be friendly to * 80-character-wide terminals. * * \param state The common state describing the test window for the app. * \param argv0 argv[0], as passed to main/SDL_main. * \param options an array of strings for application specific options. The last element of the array should be NULL. */ void SDLTest_CommonLogUsage(SDLTest_CommonState * state, const char *argv0, const char **options); /** * \brief Returns common usage information * * You should (probably) be using SDLTest_CommonLogUsage() instead, but this * function remains for binary compatibility. Strings returned from this * function are valid until SDLTest_CommonQuit() is called, in which case * those strings' memory is freed and can no longer be used. * * \param state The common state describing the test window to create. * \returns a string with usage information */ const char *SDLTest_CommonUsage(SDLTest_CommonState * state); /** * \brief Open test window. * * \param state The common state describing the test window to create. * * \returns SDL_TRUE if initialization succeeded, false otherwise */ SDL_bool SDLTest_CommonInit(SDLTest_CommonState * state); /** * \brief Easy argument handling when test app doesn't need any custom args. * * \param state The common state describing the test window to create. * \param argc argc, as supplied to SDL_main * \param argv argv, as supplied to SDL_main * * \returns SDL_FALSE if app should quit, true otherwise. */ SDL_bool SDLTest_CommonDefaultArgs(SDLTest_CommonState * state, const int argc, char **argv); /** * \brief Common event handler for test windows. * * \param state The common state used to create test window. * \param event The event to handle. * \param done Flag indicating we are done. * */ void SDLTest_CommonEvent(SDLTest_CommonState * state, SDL_Event * event, int *done); /** * \brief Close test window. * * \param state The common state used to create test window. * */ void SDLTest_CommonQuit(SDLTest_CommonState * state); /** * \brief Draws various window information (position, size, etc.) to the renderer. * * \param renderer The renderer to draw to. * \param window The window whose information should be displayed. * \param usedHeight Returns the height used, so the caller can draw more below. * */ void SDLTest_CommonDrawWindowInfo(SDL_Renderer * renderer, SDL_Window * window, int * usedHeight); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_test_common_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_test_compare.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_test_compare.h * * Include file for SDL test framework. * * This code is a part of the SDL2_test library, not the main SDL library. */ /* Defines comparison functions (i.e. for surfaces). */ #ifndef SDL_test_compare_h_ #define SDL_test_compare_h_ #include "SDL.h" #include "SDL_test_images.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** * \brief Compares a surface and with reference image data for equality * * \param surface Surface used in comparison * \param referenceSurface Test Surface used in comparison * \param allowable_error Allowable difference (=sum of squared difference for each RGB component) in blending accuracy. * * \returns 0 if comparison succeeded, >0 (=number of pixels for which the comparison failed) if comparison failed, -1 if any of the surfaces were NULL, -2 if the surface sizes differ. */ int SDLTest_CompareSurfaces(SDL_Surface *surface, SDL_Surface *referenceSurface, int allowable_error); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_test_compare_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_test_crc32.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_test_crc32.h * * Include file for SDL test framework. * * This code is a part of the SDL2_test library, not the main SDL library. */ /* Implements CRC32 calculations (default output is Perl String::CRC32 compatible). */ #ifndef SDL_test_crc32_h_ #define SDL_test_crc32_h_ #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /* ------------ Definitions --------- */ /* Definition shared by all CRC routines */ #ifndef CrcUint32 #define CrcUint32 unsigned int #endif #ifndef CrcUint8 #define CrcUint8 unsigned char #endif #ifdef ORIGINAL_METHOD #define CRC32_POLY 0x04c11db7 /* AUTODIN II, Ethernet, & FDDI */ #else #define CRC32_POLY 0xEDB88320 /* Perl String::CRC32 compatible */ #endif /** * Data structure for CRC32 (checksum) computation */ typedef struct { CrcUint32 crc32_table[256]; /* CRC table */ } SDLTest_Crc32Context; /* ---------- Function Prototypes ------------- */ /** * \brief Initialize the CRC context * * Note: The function initializes the crc table required for all crc calculations. * * \param crcContext pointer to context variable * * \returns 0 for OK, -1 on error * */ int SDLTest_Crc32Init(SDLTest_Crc32Context * crcContext); /** * \brief calculate a crc32 from a data block * * \param crcContext pointer to context variable * \param inBuf input buffer to checksum * \param inLen length of input buffer * \param crc32 pointer to Uint32 to store the final CRC into * * \returns 0 for OK, -1 on error * */ int SDLTest_Crc32Calc(SDLTest_Crc32Context * crcContext, CrcUint8 *inBuf, CrcUint32 inLen, CrcUint32 *crc32); /* Same routine broken down into three steps */ int SDLTest_Crc32CalcStart(SDLTest_Crc32Context * crcContext, CrcUint32 *crc32); int SDLTest_Crc32CalcEnd(SDLTest_Crc32Context * crcContext, CrcUint32 *crc32); int SDLTest_Crc32CalcBuffer(SDLTest_Crc32Context * crcContext, CrcUint8 *inBuf, CrcUint32 inLen, CrcUint32 *crc32); /** * \brief clean up CRC context * * \param crcContext pointer to context variable * * \returns 0 for OK, -1 on error * */ int SDLTest_Crc32Done(SDLTest_Crc32Context * crcContext); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_test_crc32_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_test_font.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_test_font.h * * Include file for SDL test framework. * * This code is a part of the SDL2_test library, not the main SDL library. */ #ifndef SDL_test_font_h_ #define SDL_test_font_h_ #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /* Function prototypes */ #define FONT_CHARACTER_SIZE 8 #define FONT_LINE_HEIGHT (FONT_CHARACTER_SIZE + 2) /** * \brief Draw a string in the currently set font. * * \param renderer The renderer to draw on. * \param x The X coordinate of the upper left corner of the character. * \param y The Y coordinate of the upper left corner of the character. * \param c The character to draw. * * \returns 0 on success, -1 on failure. */ int SDLTest_DrawCharacter(SDL_Renderer *renderer, int x, int y, Uint32 c); /** * \brief Draw a UTF-8 string in the currently set font. * * The font currently only supports characters in the Basic Latin and Latin-1 Supplement sets. * * \param renderer The renderer to draw on. * \param x The X coordinate of the upper left corner of the string. * \param y The Y coordinate of the upper left corner of the string. * \param s The string to draw. * * \returns 0 on success, -1 on failure. */ int SDLTest_DrawString(SDL_Renderer *renderer, int x, int y, const char *s); /** * \brief Data used for multi-line text output */ typedef struct SDLTest_TextWindow { SDL_Rect rect; int current; int numlines; char **lines; } SDLTest_TextWindow; /** * \brief Create a multi-line text output window * * \param x The X coordinate of the upper left corner of the window. * \param y The Y coordinate of the upper left corner of the window. * \param w The width of the window (currently ignored) * \param h The height of the window (currently ignored) * * \returns the new window, or NULL on failure. * * \since This function is available since SDL 2.24.0 */ SDLTest_TextWindow *SDLTest_TextWindowCreate(int x, int y, int w, int h); /** * \brief Display a multi-line text output window * * This function should be called every frame to display the text * * \param textwin The text output window * \param renderer The renderer to use for display * * \since This function is available since SDL 2.24.0 */ void SDLTest_TextWindowDisplay(SDLTest_TextWindow *textwin, SDL_Renderer *renderer); /** * \brief Add text to a multi-line text output window * * Adds UTF-8 text to the end of the current text. The newline character starts a * new line of text. The backspace character deletes the last character or, if the * line is empty, deletes the line and goes to the end of the previous line. * * \param textwin The text output window * \param fmt A printf() style format string * \param ... additional parameters matching % tokens in the `fmt` string, if any * * \since This function is available since SDL 2.24.0 */ void SDLTest_TextWindowAddText(SDLTest_TextWindow *textwin, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); /** * \brief Add text to a multi-line text output window * * Adds UTF-8 text to the end of the current text. The newline character starts a * new line of text. The backspace character deletes the last character or, if the * line is empty, deletes the line and goes to the end of the previous line. * * \param textwin The text output window * \param text The text to add to the window * \param len The length, in bytes, of the text to add to the window * * \since This function is available since SDL 2.24.0 */ void SDLTest_TextWindowAddTextWithLength(SDLTest_TextWindow *textwin, const char *text, size_t len); /** * \brief Clear the text in a multi-line text output window * * \param textwin The text output window * * \since This function is available since SDL 2.24.0 */ void SDLTest_TextWindowClear(SDLTest_TextWindow *textwin); /** * \brief Free the storage associated with a multi-line text output window * * \param textwin The text output window * * \since This function is available since SDL 2.24.0 */ void SDLTest_TextWindowDestroy(SDLTest_TextWindow *textwin); /** * \brief Cleanup textures used by font drawing functions. */ void SDLTest_CleanupTextDrawing(void); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_test_font_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_test_fuzzer.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_test_fuzzer.h * * Include file for SDL test framework. * * This code is a part of the SDL2_test library, not the main SDL library. */ /* Data generators for fuzzing test data in a reproducible way. */ #ifndef SDL_test_fuzzer_h_ #define SDL_test_fuzzer_h_ #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /* Based on GSOC code by Markus Kauppila */ /** * \file * Note: The fuzzer implementation uses a static instance of random context * internally which makes it thread-UNsafe. */ /** * Initializes the fuzzer for a test * * \param execKey Execution "Key" that initializes the random number generator uniquely for the test. * */ void SDLTest_FuzzerInit(Uint64 execKey); /** * Returns a random Uint8 * * \returns a generated integer */ Uint8 SDLTest_RandomUint8(void); /** * Returns a random Sint8 * * \returns a generated signed integer */ Sint8 SDLTest_RandomSint8(void); /** * Returns a random Uint16 * * \returns a generated integer */ Uint16 SDLTest_RandomUint16(void); /** * Returns a random Sint16 * * \returns a generated signed integer */ Sint16 SDLTest_RandomSint16(void); /** * Returns a random integer * * \returns a generated integer */ Sint32 SDLTest_RandomSint32(void); /** * Returns a random positive integer * * \returns a generated integer */ Uint32 SDLTest_RandomUint32(void); /** * Returns random Uint64. * * \returns a generated integer */ Uint64 SDLTest_RandomUint64(void); /** * Returns random Sint64. * * \returns a generated signed integer */ Sint64 SDLTest_RandomSint64(void); /** * \returns a random float in range [0.0 - 1.0] */ float SDLTest_RandomUnitFloat(void); /** * \returns a random double in range [0.0 - 1.0] */ double SDLTest_RandomUnitDouble(void); /** * \returns a random float. * */ float SDLTest_RandomFloat(void); /** * \returns a random double. * */ double SDLTest_RandomDouble(void); /** * Returns a random boundary value for Uint8 within the given boundaries. * Boundaries are inclusive, see the usage examples below. If validDomain * is true, the function will only return valid boundaries, otherwise non-valid * boundaries are also possible. * If boundary1 > boundary2, the values are swapped * * Usage examples: * RandomUint8BoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 * RandomUint8BoundaryValue(1, 20, SDL_FALSE) returns 0 or 21 * RandomUint8BoundaryValue(0, 99, SDL_FALSE) returns 100 * RandomUint8BoundaryValue(0, 255, SDL_FALSE) returns 0 (error set) * * \param boundary1 Lower boundary limit * \param boundary2 Upper boundary limit * \param validDomain Should the generated boundary be valid (=within the bounds) or not? * * \returns a random boundary value for the given range and domain or 0 with error set */ Uint8 SDLTest_RandomUint8BoundaryValue(Uint8 boundary1, Uint8 boundary2, SDL_bool validDomain); /** * Returns a random boundary value for Uint16 within the given boundaries. * Boundaries are inclusive, see the usage examples below. If validDomain * is true, the function will only return valid boundaries, otherwise non-valid * boundaries are also possible. * If boundary1 > boundary2, the values are swapped * * Usage examples: * RandomUint16BoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 * RandomUint16BoundaryValue(1, 20, SDL_FALSE) returns 0 or 21 * RandomUint16BoundaryValue(0, 99, SDL_FALSE) returns 100 * RandomUint16BoundaryValue(0, 0xFFFF, SDL_FALSE) returns 0 (error set) * * \param boundary1 Lower boundary limit * \param boundary2 Upper boundary limit * \param validDomain Should the generated boundary be valid (=within the bounds) or not? * * \returns a random boundary value for the given range and domain or 0 with error set */ Uint16 SDLTest_RandomUint16BoundaryValue(Uint16 boundary1, Uint16 boundary2, SDL_bool validDomain); /** * Returns a random boundary value for Uint32 within the given boundaries. * Boundaries are inclusive, see the usage examples below. If validDomain * is true, the function will only return valid boundaries, otherwise non-valid * boundaries are also possible. * If boundary1 > boundary2, the values are swapped * * Usage examples: * RandomUint32BoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 * RandomUint32BoundaryValue(1, 20, SDL_FALSE) returns 0 or 21 * RandomUint32BoundaryValue(0, 99, SDL_FALSE) returns 100 * RandomUint32BoundaryValue(0, 0xFFFFFFFF, SDL_FALSE) returns 0 (with error set) * * \param boundary1 Lower boundary limit * \param boundary2 Upper boundary limit * \param validDomain Should the generated boundary be valid (=within the bounds) or not? * * \returns a random boundary value for the given range and domain or 0 with error set */ Uint32 SDLTest_RandomUint32BoundaryValue(Uint32 boundary1, Uint32 boundary2, SDL_bool validDomain); /** * Returns a random boundary value for Uint64 within the given boundaries. * Boundaries are inclusive, see the usage examples below. If validDomain * is true, the function will only return valid boundaries, otherwise non-valid * boundaries are also possible. * If boundary1 > boundary2, the values are swapped * * Usage examples: * RandomUint64BoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 * RandomUint64BoundaryValue(1, 20, SDL_FALSE) returns 0 or 21 * RandomUint64BoundaryValue(0, 99, SDL_FALSE) returns 100 * RandomUint64BoundaryValue(0, 0xFFFFFFFFFFFFFFFF, SDL_FALSE) returns 0 (with error set) * * \param boundary1 Lower boundary limit * \param boundary2 Upper boundary limit * \param validDomain Should the generated boundary be valid (=within the bounds) or not? * * \returns a random boundary value for the given range and domain or 0 with error set */ Uint64 SDLTest_RandomUint64BoundaryValue(Uint64 boundary1, Uint64 boundary2, SDL_bool validDomain); /** * Returns a random boundary value for Sint8 within the given boundaries. * Boundaries are inclusive, see the usage examples below. If validDomain * is true, the function will only return valid boundaries, otherwise non-valid * boundaries are also possible. * If boundary1 > boundary2, the values are swapped * * Usage examples: * RandomSint8BoundaryValue(-10, 20, SDL_TRUE) returns -11, -10, 19 or 20 * RandomSint8BoundaryValue(-100, -10, SDL_FALSE) returns -101 or -9 * RandomSint8BoundaryValue(SINT8_MIN, 99, SDL_FALSE) returns 100 * RandomSint8BoundaryValue(SINT8_MIN, SINT8_MAX, SDL_FALSE) returns SINT8_MIN (== error value) with error set * * \param boundary1 Lower boundary limit * \param boundary2 Upper boundary limit * \param validDomain Should the generated boundary be valid (=within the bounds) or not? * * \returns a random boundary value for the given range and domain or SINT8_MIN with error set */ Sint8 SDLTest_RandomSint8BoundaryValue(Sint8 boundary1, Sint8 boundary2, SDL_bool validDomain); /** * Returns a random boundary value for Sint16 within the given boundaries. * Boundaries are inclusive, see the usage examples below. If validDomain * is true, the function will only return valid boundaries, otherwise non-valid * boundaries are also possible. * If boundary1 > boundary2, the values are swapped * * Usage examples: * RandomSint16BoundaryValue(-10, 20, SDL_TRUE) returns -11, -10, 19 or 20 * RandomSint16BoundaryValue(-100, -10, SDL_FALSE) returns -101 or -9 * RandomSint16BoundaryValue(SINT16_MIN, 99, SDL_FALSE) returns 100 * RandomSint16BoundaryValue(SINT16_MIN, SINT16_MAX, SDL_FALSE) returns SINT16_MIN (== error value) with error set * * \param boundary1 Lower boundary limit * \param boundary2 Upper boundary limit * \param validDomain Should the generated boundary be valid (=within the bounds) or not? * * \returns a random boundary value for the given range and domain or SINT16_MIN with error set */ Sint16 SDLTest_RandomSint16BoundaryValue(Sint16 boundary1, Sint16 boundary2, SDL_bool validDomain); /** * Returns a random boundary value for Sint32 within the given boundaries. * Boundaries are inclusive, see the usage examples below. If validDomain * is true, the function will only return valid boundaries, otherwise non-valid * boundaries are also possible. * If boundary1 > boundary2, the values are swapped * * Usage examples: * RandomSint32BoundaryValue(-10, 20, SDL_TRUE) returns -11, -10, 19 or 20 * RandomSint32BoundaryValue(-100, -10, SDL_FALSE) returns -101 or -9 * RandomSint32BoundaryValue(SINT32_MIN, 99, SDL_FALSE) returns 100 * RandomSint32BoundaryValue(SINT32_MIN, SINT32_MAX, SDL_FALSE) returns SINT32_MIN (== error value) * * \param boundary1 Lower boundary limit * \param boundary2 Upper boundary limit * \param validDomain Should the generated boundary be valid (=within the bounds) or not? * * \returns a random boundary value for the given range and domain or SINT32_MIN with error set */ Sint32 SDLTest_RandomSint32BoundaryValue(Sint32 boundary1, Sint32 boundary2, SDL_bool validDomain); /** * Returns a random boundary value for Sint64 within the given boundaries. * Boundaries are inclusive, see the usage examples below. If validDomain * is true, the function will only return valid boundaries, otherwise non-valid * boundaries are also possible. * If boundary1 > boundary2, the values are swapped * * Usage examples: * RandomSint64BoundaryValue(-10, 20, SDL_TRUE) returns -11, -10, 19 or 20 * RandomSint64BoundaryValue(-100, -10, SDL_FALSE) returns -101 or -9 * RandomSint64BoundaryValue(SINT64_MIN, 99, SDL_FALSE) returns 100 * RandomSint64BoundaryValue(SINT64_MIN, SINT64_MAX, SDL_FALSE) returns SINT64_MIN (== error value) and error set * * \param boundary1 Lower boundary limit * \param boundary2 Upper boundary limit * \param validDomain Should the generated boundary be valid (=within the bounds) or not? * * \returns a random boundary value for the given range and domain or SINT64_MIN with error set */ Sint64 SDLTest_RandomSint64BoundaryValue(Sint64 boundary1, Sint64 boundary2, SDL_bool validDomain); /** * Returns integer in range [min, max] (inclusive). * Min and max values can be negative values. * If Max in smaller than min, then the values are swapped. * Min and max are the same value, that value will be returned. * * \param min Minimum inclusive value of returned random number * \param max Maximum inclusive value of returned random number * * \returns a generated random integer in range */ Sint32 SDLTest_RandomIntegerInRange(Sint32 min, Sint32 max); /** * Generates random null-terminated string. The minimum length for * the string is 1 character, maximum length for the string is 255 * characters and it can contain ASCII characters from 32 to 126. * * Note: Returned string needs to be deallocated. * * \returns a newly allocated random string; or NULL if length was invalid or string could not be allocated. */ char * SDLTest_RandomAsciiString(void); /** * Generates random null-terminated string. The maximum length for * the string is defined by the maxLength parameter. * String can contain ASCII characters from 32 to 126. * * Note: Returned string needs to be deallocated. * * \param maxLength The maximum length of the generated string. * * \returns a newly allocated random string; or NULL if maxLength was invalid or string could not be allocated. */ char * SDLTest_RandomAsciiStringWithMaximumLength(int maxLength); /** * Generates random null-terminated string. The length for * the string is defined by the size parameter. * String can contain ASCII characters from 32 to 126. * * Note: Returned string needs to be deallocated. * * \param size The length of the generated string * * \returns a newly allocated random string; or NULL if size was invalid or string could not be allocated. */ char * SDLTest_RandomAsciiStringOfSize(int size); /** * Get the invocation count for the fuzzer since last ...FuzzerInit. * * \returns the invocation count. */ int SDLTest_GetFuzzerInvocationCount(void); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_test_fuzzer_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_test_harness.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_test_harness.h * * Include file for SDL test framework. * * This code is a part of the SDL2_test library, not the main SDL library. */ /* Defines types for test case definitions and the test execution harness API. Based on original GSOC code by Markus Kauppila */ #ifndef SDL_test_h_arness_h #define SDL_test_h_arness_h #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /* ! Definitions for test case structures */ #define TEST_ENABLED 1 #define TEST_DISABLED 0 /* ! Definition of all the possible test return values of the test case method */ #define TEST_ABORTED -1 #define TEST_STARTED 0 #define TEST_COMPLETED 1 #define TEST_SKIPPED 2 /* ! Definition of all the possible test results for the harness */ #define TEST_RESULT_PASSED 0 #define TEST_RESULT_FAILED 1 #define TEST_RESULT_NO_ASSERT 2 #define TEST_RESULT_SKIPPED 3 #define TEST_RESULT_SETUP_FAILURE 4 /* !< Function pointer to a test case setup function (run before every test) */ typedef void (*SDLTest_TestCaseSetUpFp)(void *arg); /* !< Function pointer to a test case function */ typedef int (*SDLTest_TestCaseFp)(void *arg); /* !< Function pointer to a test case teardown function (run after every test) */ typedef void (*SDLTest_TestCaseTearDownFp)(void *arg); /** * Holds information about a single test case. */ typedef struct SDLTest_TestCaseReference { /* !< Func2Stress */ SDLTest_TestCaseFp testCase; /* !< Short name (or function name) "Func2Stress" */ const char *name; /* !< Long name or full description "This test pushes func2() to the limit." */ const char *description; /* !< Set to TEST_ENABLED or TEST_DISABLED (test won't be run) */ int enabled; } SDLTest_TestCaseReference; /** * Holds information about a test suite (multiple test cases). */ typedef struct SDLTest_TestSuiteReference { /* !< "PlatformSuite" */ const char *name; /* !< The function that is run before each test. NULL skips. */ SDLTest_TestCaseSetUpFp testSetUp; /* !< The test cases that are run as part of the suite. Last item should be NULL. */ const SDLTest_TestCaseReference **testCases; /* !< The function that is run after each test. NULL skips. */ SDLTest_TestCaseTearDownFp testTearDown; } SDLTest_TestSuiteReference; /** * \brief Generates a random run seed string for the harness. The generated seed will contain alphanumeric characters (0-9A-Z). * * Note: The returned string needs to be deallocated by the caller. * * \param length The length of the seed string to generate * * \returns the generated seed string */ char *SDLTest_GenerateRunSeed(const int length); /** * \brief Execute a test suite using the given run seed and execution key. * * \param testSuites Suites containing the test case. * \param userRunSeed Custom run seed provided by user, or NULL to autogenerate one. * \param userExecKey Custom execution key provided by user, or 0 to autogenerate one. * \param filter Filter specification. NULL disables. Case sensitive. * \param testIterations Number of iterations to run each test case. * * \returns the test run result: 0 when all tests passed, 1 if any tests failed. */ int SDLTest_RunSuites(SDLTest_TestSuiteReference *testSuites[], const char *userRunSeed, Uint64 userExecKey, const char *filter, int testIterations); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_test_h_arness_h */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_test_images.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_test_images.h * * Include file for SDL test framework. * * This code is a part of the SDL2_test library, not the main SDL library. */ /* Defines some images for tests. */ #ifndef SDL_test_images_h_ #define SDL_test_images_h_ #include "SDL.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** *Type for test images. */ typedef struct SDLTest_SurfaceImage_s { int width; int height; unsigned int bytes_per_pixel; /* 3:RGB, 4:RGBA */ const char *pixel_data; } SDLTest_SurfaceImage_t; /* Test images */ SDL_Surface *SDLTest_ImageBlit(void); SDL_Surface *SDLTest_ImageBlitColor(void); SDL_Surface *SDLTest_ImageBlitAlpha(void); SDL_Surface *SDLTest_ImageBlitBlendAdd(void); SDL_Surface *SDLTest_ImageBlitBlend(void); SDL_Surface *SDLTest_ImageBlitBlendMod(void); SDL_Surface *SDLTest_ImageBlitBlendNone(void); SDL_Surface *SDLTest_ImageBlitBlendAll(void); SDL_Surface *SDLTest_ImageFace(void); SDL_Surface *SDLTest_ImagePrimitives(void); SDL_Surface *SDLTest_ImagePrimitivesBlend(void); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_test_images_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_test_log.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_test_log.h * * Include file for SDL test framework. * * This code is a part of the SDL2_test library, not the main SDL library. */ /* * * Wrapper to log in the TEST category * */ #ifndef SDL_test_log_h_ #define SDL_test_log_h_ #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** * \brief Prints given message with a timestamp in the TEST category and INFO priority. * * \param fmt Message to be logged */ void SDLTest_Log(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); /** * \brief Prints given message with a timestamp in the TEST category and the ERROR priority. * * \param fmt Message to be logged */ void SDLTest_LogError(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_test_log_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_test_md5.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_test_md5.h * * Include file for SDL test framework. * * This code is a part of the SDL2_test library, not the main SDL library. */ /* *********************************************************************** ** Header file for implementation of MD5 ** ** RSA Data Security, Inc. MD5 Message-Digest Algorithm ** ** Created: 2/17/90 RLR ** ** Revised: 12/27/90 SRD,AJ,BSK,JT Reference C version ** ** Revised (for MD5): RLR 4/27/91 ** ** -- G modified to have y&~z instead of y&z ** ** -- FF, GG, HH modified to add in last register done ** ** -- Access pattern: round 2 works mod 5, round 3 works mod 3 ** ** -- distinct additive constant for each step ** ** -- round 4 added, working mod 7 ** *********************************************************************** */ /* *********************************************************************** ** Message-digest routines: ** ** To form the message digest for a message M ** ** (1) Initialize a context buffer mdContext using MD5Init ** ** (2) Call MD5Update on mdContext and M ** ** (3) Call MD5Final on mdContext ** ** The message digest is now in mdContext->digest[0...15] ** *********************************************************************** */ #ifndef SDL_test_md5_h_ #define SDL_test_md5_h_ #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /* ------------ Definitions --------- */ /* typedef a 32-bit type */ typedef unsigned long int MD5UINT4; /* Data structure for MD5 (Message-Digest) computation */ typedef struct { MD5UINT4 i[2]; /* number of _bits_ handled mod 2^64 */ MD5UINT4 buf[4]; /* scratch buffer */ unsigned char in[64]; /* input buffer */ unsigned char digest[16]; /* actual digest after Md5Final call */ } SDLTest_Md5Context; /* ---------- Function Prototypes ------------- */ /** * \brief initialize the context * * \param mdContext pointer to context variable * * Note: The function initializes the message-digest context * mdContext. Call before each new use of the context - * all fields are set to zero. */ void SDLTest_Md5Init(SDLTest_Md5Context * mdContext); /** * \brief update digest from variable length data * * \param mdContext pointer to context variable * \param inBuf pointer to data array/string * \param inLen length of data array/string * * Note: The function updates the message-digest context to account * for the presence of each of the characters inBuf[0..inLen-1] * in the message whose digest is being computed. */ void SDLTest_Md5Update(SDLTest_Md5Context * mdContext, unsigned char *inBuf, unsigned int inLen); /** * \brief complete digest computation * * \param mdContext pointer to context variable * * Note: The function terminates the message-digest computation and * ends with the desired message digest in mdContext.digest[0..15]. * Always call before using the digest[] variable. */ void SDLTest_Md5Final(SDLTest_Md5Context * mdContext); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_test_md5_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_test_memory.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_test_memory.h * * Include file for SDL test framework. * * This code is a part of the SDL2_test library, not the main SDL library. */ #ifndef SDL_test_memory_h_ #define SDL_test_memory_h_ #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** * \brief Start tracking SDL memory allocations * * \note This should be called before any other SDL functions for complete tracking coverage */ int SDLTest_TrackAllocations(void); /** * \brief Print a log of any outstanding allocations * * \note This can be called after SDL_Quit() */ void SDLTest_LogAllocations(void); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_test_memory_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_test_random.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_test_random.h * * Include file for SDL test framework. * * This code is a part of the SDL2_test library, not the main SDL library. */ /* A "32-bit Multiply with carry random number generator. Very fast. Includes a list of recommended multipliers. multiply-with-carry generator: x(n) = a*x(n-1) + carry mod 2^32. period: (a*2^31)-1 */ #ifndef SDL_test_random_h_ #define SDL_test_random_h_ #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /* --- Definitions */ /* * Macros that return a random number in a specific format. */ #define SDLTest_RandomInt(c) ((int)SDLTest_Random(c)) /* * Context structure for the random number generator state. */ typedef struct { unsigned int a; unsigned int x; unsigned int c; unsigned int ah; unsigned int al; } SDLTest_RandomContext; /* --- Function prototypes */ /** * \brief Initialize random number generator with two integers. * * Note: The random sequence of numbers returned by ...Random() is the * same for the same two integers and has a period of 2^31. * * \param rndContext pointer to context structure * \param xi integer that defines the random sequence * \param ci integer that defines the random sequence * */ void SDLTest_RandomInit(SDLTest_RandomContext * rndContext, unsigned int xi, unsigned int ci); /** * \brief Initialize random number generator based on current system time. * * \param rndContext pointer to context structure * */ void SDLTest_RandomInitTime(SDLTest_RandomContext *rndContext); /** * \brief Initialize random number generator based on current system time. * * Note: ...RandomInit() or ...RandomInitTime() must have been called * before using this function. * * \param rndContext pointer to context structure * * \returns a random number (32bit unsigned integer) * */ unsigned int SDLTest_Random(SDLTest_RandomContext *rndContext); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_test_random_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_thread.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef SDL_thread_h_ #define SDL_thread_h_ /** * \file SDL_thread.h * * Header for the SDL thread management routines. */ #include "SDL_stdinc.h" #include "SDL_error.h" /* Thread synchronization primitives */ #include "SDL_atomic.h" #include "SDL_mutex.h" #if (defined(__WIN32__) || defined(__GDK__)) && !defined(__WINRT__) #include /* _beginthreadex() and _endthreadex() */ #endif #if defined(__OS2__) /* for _beginthread() and _endthread() */ #ifndef __EMX__ #include #else #include #endif #endif #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /* The SDL thread structure, defined in SDL_thread.c */ struct SDL_Thread; typedef struct SDL_Thread SDL_Thread; /* The SDL thread ID */ typedef unsigned long SDL_threadID; /* Thread local storage ID, 0 is the invalid ID */ typedef unsigned int SDL_TLSID; /** * The SDL thread priority. * * SDL will make system changes as necessary in order to apply the thread priority. * Code which attempts to control thread state related to priority should be aware * that calling SDL_SetThreadPriority may alter such state. * SDL_HINT_THREAD_PRIORITY_POLICY can be used to control aspects of this behavior. * * \note On many systems you require special privileges to set high or time critical priority. */ typedef enum { SDL_THREAD_PRIORITY_LOW, SDL_THREAD_PRIORITY_NORMAL, SDL_THREAD_PRIORITY_HIGH, SDL_THREAD_PRIORITY_TIME_CRITICAL } SDL_ThreadPriority; /** * The function passed to SDL_CreateThread(). * * \param data what was passed as `data` to SDL_CreateThread() * \returns a value that can be reported through SDL_WaitThread(). */ typedef int (SDLCALL * SDL_ThreadFunction) (void *data); #if (defined(__WIN32__) || defined(__GDK__)) && !defined(__WINRT__) /** * \file SDL_thread.h * * We compile SDL into a DLL. This means, that it's the DLL which * creates a new thread for the calling process with the SDL_CreateThread() * API. There is a problem with this, that only the RTL of the SDL2.DLL will * be initialized for those threads, and not the RTL of the calling * application! * * To solve this, we make a little hack here. * * We'll always use the caller's _beginthread() and _endthread() APIs to * start a new thread. This way, if it's the SDL2.DLL which uses this API, * then the RTL of SDL2.DLL will be used to create the new thread, and if it's * the application, then the RTL of the application will be used. * * So, in short: * Always use the _beginthread() and _endthread() of the calling runtime * library! */ #define SDL_PASSED_BEGINTHREAD_ENDTHREAD typedef uintptr_t (__cdecl * pfnSDL_CurrentBeginThread) (void *, unsigned, unsigned (__stdcall *func)(void *), void * /*arg*/, unsigned, unsigned * /* threadID */); typedef void (__cdecl * pfnSDL_CurrentEndThread) (unsigned code); #ifndef SDL_beginthread #define SDL_beginthread _beginthreadex #endif #ifndef SDL_endthread #define SDL_endthread _endthreadex #endif extern DECLSPEC SDL_Thread *SDLCALL SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data, pfnSDL_CurrentBeginThread pfnBeginThread, pfnSDL_CurrentEndThread pfnEndThread); extern DECLSPEC SDL_Thread *SDLCALL SDL_CreateThreadWithStackSize(SDL_ThreadFunction fn, const char *name, const size_t stacksize, void *data, pfnSDL_CurrentBeginThread pfnBeginThread, pfnSDL_CurrentEndThread pfnEndThread); #if defined(SDL_CreateThread) && SDL_DYNAMIC_API #undef SDL_CreateThread #define SDL_CreateThread(fn, name, data) SDL_CreateThread_REAL(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) #undef SDL_CreateThreadWithStackSize #define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize_REAL(fn, name, stacksize, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) #else #define SDL_CreateThread(fn, name, data) SDL_CreateThread(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) #define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize(fn, name, stacksize, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) #endif #elif defined(__OS2__) /* * just like the windows case above: We compile SDL2 * into a dll with Watcom's runtime statically linked. */ #define SDL_PASSED_BEGINTHREAD_ENDTHREAD typedef int (*pfnSDL_CurrentBeginThread)(void (*func)(void *), void *, unsigned, void * /*arg*/); typedef void (*pfnSDL_CurrentEndThread)(void); #ifndef SDL_beginthread #define SDL_beginthread _beginthread #endif #ifndef SDL_endthread #define SDL_endthread _endthread #endif extern DECLSPEC SDL_Thread *SDLCALL SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data, pfnSDL_CurrentBeginThread pfnBeginThread, pfnSDL_CurrentEndThread pfnEndThread); extern DECLSPEC SDL_Thread *SDLCALL SDL_CreateThreadWithStackSize(SDL_ThreadFunction fn, const char *name, const size_t stacksize, void *data, pfnSDL_CurrentBeginThread pfnBeginThread, pfnSDL_CurrentEndThread pfnEndThread); #if defined(SDL_CreateThread) && SDL_DYNAMIC_API #undef SDL_CreateThread #define SDL_CreateThread(fn, name, data) SDL_CreateThread_REAL(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) #undef SDL_CreateThreadWithStackSize #define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize_REAL(fn, name, stacksize, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) #else #define SDL_CreateThread(fn, name, data) SDL_CreateThread(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) #define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize(fn, name, stacksize, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) #endif #else /** * Create a new thread with a default stack size. * * This is equivalent to calling: * * ```c * SDL_CreateThreadWithStackSize(fn, name, 0, data); * ``` * * \param fn the SDL_ThreadFunction function to call in the new thread * \param name the name of the thread * \param data a pointer that is passed to `fn` * \returns an opaque pointer to the new thread object on success, NULL if the * new thread could not be created; call SDL_GetError() for more * information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateThreadWithStackSize * \sa SDL_WaitThread */ extern DECLSPEC SDL_Thread *SDLCALL SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data); /** * Create a new thread with a specific stack size. * * SDL makes an attempt to report `name` to the system, so that debuggers can * display it. Not all platforms support this. * * Thread naming is a little complicated: Most systems have very small limits * for the string length (Haiku has 32 bytes, Linux currently has 16, Visual * C++ 6.0 has _nine_!), and possibly other arbitrary rules. You'll have to * see what happens with your system's debugger. The name should be UTF-8 (but * using the naming limits of C identifiers is a better bet). There are no * requirements for thread naming conventions, so long as the string is * null-terminated UTF-8, but these guidelines are helpful in choosing a name: * * https://stackoverflow.com/questions/149932/naming-conventions-for-threads * * If a system imposes requirements, SDL will try to munge the string for it * (truncate, etc), but the original string contents will be available from * SDL_GetThreadName(). * * The size (in bytes) of the new stack can be specified. Zero means "use the * system default" which might be wildly different between platforms. x86 * Linux generally defaults to eight megabytes, an embedded device might be a * few kilobytes instead. You generally need to specify a stack that is a * multiple of the system's page size (in many cases, this is 4 kilobytes, but * check your system documentation). * * In SDL 2.1, stack size will be folded into the original SDL_CreateThread * function, but for backwards compatibility, this is currently a separate * function. * * \param fn the SDL_ThreadFunction function to call in the new thread * \param name the name of the thread * \param stacksize the size, in bytes, to allocate for the new thread stack. * \param data a pointer that is passed to `fn` * \returns an opaque pointer to the new thread object on success, NULL if the * new thread could not be created; call SDL_GetError() for more * information. * * \since This function is available since SDL 2.0.9. * * \sa SDL_WaitThread */ extern DECLSPEC SDL_Thread *SDLCALL SDL_CreateThreadWithStackSize(SDL_ThreadFunction fn, const char *name, const size_t stacksize, void *data); #endif /** * Get the thread name as it was specified in SDL_CreateThread(). * * This is internal memory, not to be freed by the caller, and remains valid * until the specified thread is cleaned up by SDL_WaitThread(). * * \param thread the thread to query * \returns a pointer to a UTF-8 string that names the specified thread, or * NULL if it doesn't have a name. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateThread */ extern DECLSPEC const char *SDLCALL SDL_GetThreadName(SDL_Thread *thread); /** * Get the thread identifier for the current thread. * * This thread identifier is as reported by the underlying operating system. * If SDL is running on a platform that does not support threads the return * value will always be zero. * * This function also returns a valid thread ID when called from the main * thread. * * \returns the ID of the current thread. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetThreadID */ extern DECLSPEC SDL_threadID SDLCALL SDL_ThreadID(void); /** * Get the thread identifier for the specified thread. * * This thread identifier is as reported by the underlying operating system. * If SDL is running on a platform that does not support threads the return * value will always be zero. * * \param thread the thread to query * \returns the ID of the specified thread, or the ID of the current thread if * `thread` is NULL. * * \since This function is available since SDL 2.0.0. * * \sa SDL_ThreadID */ extern DECLSPEC SDL_threadID SDLCALL SDL_GetThreadID(SDL_Thread * thread); /** * Set the priority for the current thread. * * Note that some platforms will not let you alter the priority (or at least, * promote the thread to a higher priority) at all, and some require you to be * an administrator account. Be prepared for this to fail. * * \param priority the SDL_ThreadPriority to set * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC int SDLCALL SDL_SetThreadPriority(SDL_ThreadPriority priority); /** * Wait for a thread to finish. * * Threads that haven't been detached will remain (as a "zombie") until this * function cleans them up. Not doing so is a resource leak. * * Once a thread has been cleaned up through this function, the SDL_Thread * that references it becomes invalid and should not be referenced again. As * such, only one thread may call SDL_WaitThread() on another. * * The return code for the thread function is placed in the area pointed to by * `status`, if `status` is not NULL. * * You may not wait on a thread that has been used in a call to * SDL_DetachThread(). Use either that function or this one, but not both, or * behavior is undefined. * * It is safe to pass a NULL thread to this function; it is a no-op. * * Note that the thread pointer is freed by this function and is not valid * afterward. * * \param thread the SDL_Thread pointer that was returned from the * SDL_CreateThread() call that started this thread * \param status pointer to an integer that will receive the value returned * from the thread function by its 'return', or NULL to not * receive such value back. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateThread * \sa SDL_DetachThread */ extern DECLSPEC void SDLCALL SDL_WaitThread(SDL_Thread * thread, int *status); /** * Let a thread clean up on exit without intervention. * * A thread may be "detached" to signify that it should not remain until * another thread has called SDL_WaitThread() on it. Detaching a thread is * useful for long-running threads that nothing needs to synchronize with or * further manage. When a detached thread is done, it simply goes away. * * There is no way to recover the return code of a detached thread. If you * need this, don't detach the thread and instead use SDL_WaitThread(). * * Once a thread is detached, you should usually assume the SDL_Thread isn't * safe to reference again, as it will become invalid immediately upon the * detached thread's exit, instead of remaining until someone has called * SDL_WaitThread() to finally clean it up. As such, don't detach the same * thread more than once. * * If a thread has already exited when passed to SDL_DetachThread(), it will * stop waiting for a call to SDL_WaitThread() and clean up immediately. It is * not safe to detach a thread that might be used with SDL_WaitThread(). * * You may not call SDL_WaitThread() on a thread that has been detached. Use * either that function or this one, but not both, or behavior is undefined. * * It is safe to pass NULL to this function; it is a no-op. * * \param thread the SDL_Thread pointer that was returned from the * SDL_CreateThread() call that started this thread * * \since This function is available since SDL 2.0.2. * * \sa SDL_CreateThread * \sa SDL_WaitThread */ extern DECLSPEC void SDLCALL SDL_DetachThread(SDL_Thread * thread); /** * Create a piece of thread-local storage. * * This creates an identifier that is globally visible to all threads but * refers to data that is thread-specific. * * \returns the newly created thread local storage identifier or 0 on error. * * \since This function is available since SDL 2.0.0. * * \sa SDL_TLSGet * \sa SDL_TLSSet */ extern DECLSPEC SDL_TLSID SDLCALL SDL_TLSCreate(void); /** * Get the current thread's value associated with a thread local storage ID. * * \param id the thread local storage ID * \returns the value associated with the ID for the current thread or NULL if * no value has been set; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_TLSCreate * \sa SDL_TLSSet */ extern DECLSPEC void * SDLCALL SDL_TLSGet(SDL_TLSID id); /** * Set the current thread's value associated with a thread local storage ID. * * The function prototype for `destructor` is: * * ```c * void destructor(void *value) * ``` * * where its parameter `value` is what was passed as `value` to SDL_TLSSet(). * * \param id the thread local storage ID * \param value the value to associate with the ID for the current thread * \param destructor a function called when the thread exits, to free the * value * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_TLSCreate * \sa SDL_TLSGet */ extern DECLSPEC int SDLCALL SDL_TLSSet(SDL_TLSID id, const void *value, void (SDLCALL *destructor)(void*)); /** * Cleanup all TLS data for this thread. * * \since This function is available since SDL 2.0.16. */ extern DECLSPEC void SDLCALL SDL_TLSCleanup(void); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_thread_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_timer.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef SDL_timer_h_ #define SDL_timer_h_ /** * \file SDL_timer.h * * Header for the SDL time management routines. */ #include "SDL_stdinc.h" #include "SDL_error.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** * Get the number of milliseconds since SDL library initialization. * * This value wraps if the program runs for more than ~49 days. * * This function is not recommended as of SDL 2.0.18; use SDL_GetTicks64() * instead, where the value doesn't wrap every ~49 days. There are places in * SDL where we provide a 32-bit timestamp that can not change without * breaking binary compatibility, though, so this function isn't officially * deprecated. * * \returns an unsigned 32-bit value representing the number of milliseconds * since the SDL library initialized. * * \since This function is available since SDL 2.0.0. * * \sa SDL_TICKS_PASSED */ extern DECLSPEC Uint32 SDLCALL SDL_GetTicks(void); /** * Get the number of milliseconds since SDL library initialization. * * Note that you should not use the SDL_TICKS_PASSED macro with values * returned by this function, as that macro does clever math to compensate for * the 32-bit overflow every ~49 days that SDL_GetTicks() suffers from. 64-bit * values from this function can be safely compared directly. * * For example, if you want to wait 100 ms, you could do this: * * ```c * const Uint64 timeout = SDL_GetTicks64() + 100; * while (SDL_GetTicks64() < timeout) { * // ... do work until timeout has elapsed * } * ``` * * \returns an unsigned 64-bit value representing the number of milliseconds * since the SDL library initialized. * * \since This function is available since SDL 2.0.18. */ extern DECLSPEC Uint64 SDLCALL SDL_GetTicks64(void); /** * Compare 32-bit SDL ticks values, and return true if `A` has passed `B`. * * This should be used with results from SDL_GetTicks(), as this macro * attempts to deal with the 32-bit counter wrapping back to zero every ~49 * days, but should _not_ be used with SDL_GetTicks64(), which does not have * that problem. * * For example, with SDL_GetTicks(), if you want to wait 100 ms, you could * do this: * * ```c * const Uint32 timeout = SDL_GetTicks() + 100; * while (!SDL_TICKS_PASSED(SDL_GetTicks(), timeout)) { * // ... do work until timeout has elapsed * } * ``` * * Note that this does not handle tick differences greater * than 2^31 so take care when using the above kind of code * with large timeout delays (tens of days). */ #define SDL_TICKS_PASSED(A, B) ((Sint32)((B) - (A)) <= 0) /** * Get the current value of the high resolution counter. * * This function is typically used for profiling. * * The counter values are only meaningful relative to each other. Differences * between values can be converted to times by using * SDL_GetPerformanceFrequency(). * * \returns the current counter value. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetPerformanceFrequency */ extern DECLSPEC Uint64 SDLCALL SDL_GetPerformanceCounter(void); /** * Get the count per second of the high resolution counter. * * \returns a platform-specific count per second. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetPerformanceCounter */ extern DECLSPEC Uint64 SDLCALL SDL_GetPerformanceFrequency(void); /** * Wait a specified number of milliseconds before returning. * * This function waits a specified number of milliseconds before returning. It * waits at least the specified time, but possibly longer due to OS * scheduling. * * \param ms the number of milliseconds to delay * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC void SDLCALL SDL_Delay(Uint32 ms); /** * Function prototype for the timer callback function. * * The callback function is passed the current timer interval and returns * the next timer interval. If the returned value is the same as the one * passed in, the periodic alarm continues, otherwise a new alarm is * scheduled. If the callback returns 0, the periodic alarm is cancelled. */ typedef Uint32 (SDLCALL * SDL_TimerCallback) (Uint32 interval, void *param); /** * Definition of the timer ID type. */ typedef int SDL_TimerID; /** * Call a callback function at a future time. * * If you use this function, you must pass `SDL_INIT_TIMER` to SDL_Init(). * * The callback function is passed the current timer interval and the user * supplied parameter from the SDL_AddTimer() call and should return the next * timer interval. If the value returned from the callback is 0, the timer is * canceled. * * The callback is run on a separate thread. * * Timers take into account the amount of time it took to execute the * callback. For example, if the callback took 250 ms to execute and returned * 1000 (ms), the timer would only wait another 750 ms before its next * iteration. * * Timing may be inexact due to OS scheduling. Be sure to note the current * time with SDL_GetTicks() or SDL_GetPerformanceCounter() in case your * callback needs to adjust for variances. * * \param interval the timer delay, in milliseconds, passed to `callback` * \param callback the SDL_TimerCallback function to call when the specified * `interval` elapses * \param param a pointer that is passed to `callback` * \returns a timer ID or 0 if an error occurs; call SDL_GetError() for more * information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_RemoveTimer */ extern DECLSPEC SDL_TimerID SDLCALL SDL_AddTimer(Uint32 interval, SDL_TimerCallback callback, void *param); /** * Remove a timer created with SDL_AddTimer(). * * \param id the ID of the timer to remove * \returns SDL_TRUE if the timer is removed or SDL_FALSE if the timer wasn't * found. * * \since This function is available since SDL 2.0.0. * * \sa SDL_AddTimer */ extern DECLSPEC SDL_bool SDLCALL SDL_RemoveTimer(SDL_TimerID id); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_timer_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_touch.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_touch.h * * Include file for SDL touch event handling. */ #ifndef SDL_touch_h_ #define SDL_touch_h_ #include "SDL_stdinc.h" #include "SDL_error.h" #include "SDL_video.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif typedef Sint64 SDL_TouchID; typedef Sint64 SDL_FingerID; typedef enum { SDL_TOUCH_DEVICE_INVALID = -1, SDL_TOUCH_DEVICE_DIRECT, /* touch screen with window-relative coordinates */ SDL_TOUCH_DEVICE_INDIRECT_ABSOLUTE, /* trackpad with absolute device coordinates */ SDL_TOUCH_DEVICE_INDIRECT_RELATIVE /* trackpad with screen cursor-relative coordinates */ } SDL_TouchDeviceType; typedef struct SDL_Finger { SDL_FingerID id; float x; float y; float pressure; } SDL_Finger; /* Used as the device ID for mouse events simulated with touch input */ #define SDL_TOUCH_MOUSEID ((Uint32)-1) /* Used as the SDL_TouchID for touch events simulated with mouse input */ #define SDL_MOUSE_TOUCHID ((Sint64)-1) /** * Get the number of registered touch devices. * * On some platforms SDL first sees the touch device if it was actually used. * Therefore SDL_GetNumTouchDevices() may return 0 although devices are * available. After using all devices at least once the number will be * correct. * * This was fixed for Android in SDL 2.0.1. * * \returns the number of registered touch devices. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetTouchDevice */ extern DECLSPEC int SDLCALL SDL_GetNumTouchDevices(void); /** * Get the touch ID with the given index. * * \param index the touch device index * \returns the touch ID with the given index on success or 0 if the index is * invalid; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetNumTouchDevices */ extern DECLSPEC SDL_TouchID SDLCALL SDL_GetTouchDevice(int index); /** * Get the touch device name as reported from the driver or NULL if the index * is invalid. * * \since This function is available since SDL 2.0.22. */ extern DECLSPEC const char* SDLCALL SDL_GetTouchName(int index); /** * Get the type of the given touch device. * * \since This function is available since SDL 2.0.10. */ extern DECLSPEC SDL_TouchDeviceType SDLCALL SDL_GetTouchDeviceType(SDL_TouchID touchID); /** * Get the number of active fingers for a given touch device. * * \param touchID the ID of a touch device * \returns the number of active fingers for a given touch device on success * or 0 on failure; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetTouchFinger */ extern DECLSPEC int SDLCALL SDL_GetNumTouchFingers(SDL_TouchID touchID); /** * Get the finger object for specified touch device ID and finger index. * * The returned resource is owned by SDL and should not be deallocated. * * \param touchID the ID of the requested touch device * \param index the index of the requested finger * \returns a pointer to the SDL_Finger object or NULL if no object at the * given ID and index could be found. * * \since This function is available since SDL 2.0.0. * * \sa SDL_RecordGesture */ extern DECLSPEC SDL_Finger * SDLCALL SDL_GetTouchFinger(SDL_TouchID touchID, int index); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_touch_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_types.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_types.h * * \deprecated */ /* DEPRECATED */ #include "SDL_stdinc.h" ================================================ FILE: libraries/sdl2/SDL_version.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_version.h * * This header defines the current SDL version. */ #ifndef SDL_version_h_ #define SDL_version_h_ #include "SDL_stdinc.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** * Information about the version of SDL in use. * * Represents the library's version as three levels: major revision * (increments with massive changes, additions, and enhancements), * minor revision (increments with backwards-compatible changes to the * major revision), and patchlevel (increments with fixes to the minor * revision). * * \sa SDL_VERSION * \sa SDL_GetVersion */ typedef struct SDL_version { Uint8 major; /**< major version */ Uint8 minor; /**< minor version */ Uint8 patch; /**< update version */ } SDL_version; /* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL */ #define SDL_MAJOR_VERSION 2 #define SDL_MINOR_VERSION 30 #define SDL_PATCHLEVEL 4 /** * Macro to determine SDL version program was compiled against. * * This macro fills in a SDL_version structure with the version of the * library you compiled against. This is determined by what header the * compiler uses. Note that if you dynamically linked the library, you might * have a slightly newer or older version at runtime. That version can be * determined with SDL_GetVersion(), which, unlike SDL_VERSION(), * is not a macro. * * \param x A pointer to a SDL_version struct to initialize. * * \sa SDL_version * \sa SDL_GetVersion */ #define SDL_VERSION(x) \ { \ (x)->major = SDL_MAJOR_VERSION; \ (x)->minor = SDL_MINOR_VERSION; \ (x)->patch = SDL_PATCHLEVEL; \ } /* TODO: Remove this whole block in SDL 3 */ #if SDL_MAJOR_VERSION < 3 /** * This macro turns the version numbers into a numeric value: * \verbatim (1,2,3) -> (1203) \endverbatim * * This assumes that there will never be more than 100 patchlevels. * * In versions higher than 2.9.0, the minor version overflows into * the thousands digit: for example, 2.23.0 is encoded as 4300, * and 2.255.99 would be encoded as 25799. * This macro will not be available in SDL 3.x. */ #define SDL_VERSIONNUM(X, Y, Z) \ ((X)*1000 + (Y)*100 + (Z)) /** * This is the version number macro for the current SDL version. * * In versions higher than 2.9.0, the minor version overflows into * the thousands digit: for example, 2.23.0 is encoded as 4300. * This macro will not be available in SDL 3.x. * * Deprecated, use SDL_VERSION_ATLEAST or SDL_VERSION instead. */ #define SDL_COMPILEDVERSION \ SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) #endif /* SDL_MAJOR_VERSION < 3 */ /** * This macro will evaluate to true if compiled with SDL at least X.Y.Z. */ #define SDL_VERSION_ATLEAST(X, Y, Z) \ ((SDL_MAJOR_VERSION >= X) && \ (SDL_MAJOR_VERSION > X || SDL_MINOR_VERSION >= Y) && \ (SDL_MAJOR_VERSION > X || SDL_MINOR_VERSION > Y || SDL_PATCHLEVEL >= Z)) /** * Get the version of SDL that is linked against your program. * * If you are linking to SDL dynamically, then it is possible that the current * version will be different than the version you compiled against. This * function returns the current version, while SDL_VERSION() is a macro that * tells you what version you compiled with. * * This function may be called safely at any time, even before SDL_Init(). * * \param ver the SDL_version structure that contains the version information * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetRevision */ extern DECLSPEC void SDLCALL SDL_GetVersion(SDL_version * ver); /** * Get the code revision of SDL that is linked against your program. * * This value is the revision of the code you are linked with and may be * different from the code you are compiling with, which is found in the * constant SDL_REVISION. * * The revision is arbitrary string (a hash value) uniquely identifying the * exact revision of the SDL library in use, and is only useful in comparing * against other revisions. It is NOT an incrementing number. * * If SDL wasn't built from a git repository with the appropriate tools, this * will return an empty string. * * Prior to SDL 2.0.16, before development moved to GitHub, this returned a * hash for a Mercurial repository. * * You shouldn't use this function for anything but logging it for debugging * purposes. The string is not intended to be reliable in any way. * * \returns an arbitrary string, uniquely identifying the exact revision of * the SDL library in use. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetVersion */ extern DECLSPEC const char *SDLCALL SDL_GetRevision(void); /** * Obsolete function, do not use. * * When SDL was hosted in a Mercurial repository, and was built carefully, * this would return the revision number that the build was created from. This * number was not reliable for several reasons, but more importantly, SDL is * now hosted in a git repository, which does not offer numbers at all, only * hashes. This function only ever returns zero now. Don't use it. * * Before SDL 2.0.16, this might have returned an unreliable, but non-zero * number. * * \deprecated Use SDL_GetRevision() instead; if SDL was carefully built, it * will return a git hash. * * \returns zero, always, in modern SDL releases. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetRevision */ extern SDL_DEPRECATED DECLSPEC int SDLCALL SDL_GetRevisionNumber(void); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_version_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_video.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_video.h * * Header file for SDL video functions. */ #ifndef SDL_video_h_ #define SDL_video_h_ #include "SDL_stdinc.h" #include "SDL_pixels.h" #include "SDL_rect.h" #include "SDL_surface.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** * \brief The structure that defines a display mode * * \sa SDL_GetNumDisplayModes() * \sa SDL_GetDisplayMode() * \sa SDL_GetDesktopDisplayMode() * \sa SDL_GetCurrentDisplayMode() * \sa SDL_GetClosestDisplayMode() * \sa SDL_SetWindowDisplayMode() * \sa SDL_GetWindowDisplayMode() */ typedef struct { Uint32 format; /**< pixel format */ int w; /**< width, in screen coordinates */ int h; /**< height, in screen coordinates */ int refresh_rate; /**< refresh rate (or zero for unspecified) */ void *driverdata; /**< driver-specific data, initialize to 0 */ } SDL_DisplayMode; /** * \brief The type used to identify a window * * \sa SDL_CreateWindow() * \sa SDL_CreateWindowFrom() * \sa SDL_DestroyWindow() * \sa SDL_FlashWindow() * \sa SDL_GetWindowData() * \sa SDL_GetWindowFlags() * \sa SDL_GetWindowGrab() * \sa SDL_GetWindowKeyboardGrab() * \sa SDL_GetWindowMouseGrab() * \sa SDL_GetWindowPosition() * \sa SDL_GetWindowSize() * \sa SDL_GetWindowTitle() * \sa SDL_HideWindow() * \sa SDL_MaximizeWindow() * \sa SDL_MinimizeWindow() * \sa SDL_RaiseWindow() * \sa SDL_RestoreWindow() * \sa SDL_SetWindowData() * \sa SDL_SetWindowFullscreen() * \sa SDL_SetWindowGrab() * \sa SDL_SetWindowKeyboardGrab() * \sa SDL_SetWindowMouseGrab() * \sa SDL_SetWindowIcon() * \sa SDL_SetWindowPosition() * \sa SDL_SetWindowSize() * \sa SDL_SetWindowBordered() * \sa SDL_SetWindowResizable() * \sa SDL_SetWindowTitle() * \sa SDL_ShowWindow() */ typedef struct SDL_Window SDL_Window; /** * \brief The flags on a window * * \sa SDL_GetWindowFlags() */ typedef enum { SDL_WINDOW_FULLSCREEN = 0x00000001, /**< fullscreen window */ SDL_WINDOW_OPENGL = 0x00000002, /**< window usable with OpenGL context */ SDL_WINDOW_SHOWN = 0x00000004, /**< window is visible */ SDL_WINDOW_HIDDEN = 0x00000008, /**< window is not visible */ SDL_WINDOW_BORDERLESS = 0x00000010, /**< no window decoration */ SDL_WINDOW_RESIZABLE = 0x00000020, /**< window can be resized */ SDL_WINDOW_MINIMIZED = 0x00000040, /**< window is minimized */ SDL_WINDOW_MAXIMIZED = 0x00000080, /**< window is maximized */ SDL_WINDOW_MOUSE_GRABBED = 0x00000100, /**< window has grabbed mouse input */ SDL_WINDOW_INPUT_FOCUS = 0x00000200, /**< window has input focus */ SDL_WINDOW_MOUSE_FOCUS = 0x00000400, /**< window has mouse focus */ SDL_WINDOW_FULLSCREEN_DESKTOP = ( SDL_WINDOW_FULLSCREEN | 0x00001000 ), SDL_WINDOW_FOREIGN = 0x00000800, /**< window not created by SDL */ SDL_WINDOW_ALLOW_HIGHDPI = 0x00002000, /**< window should be created in high-DPI mode if supported. On macOS NSHighResolutionCapable must be set true in the application's Info.plist for this to have any effect. */ SDL_WINDOW_MOUSE_CAPTURE = 0x00004000, /**< window has mouse captured (unrelated to MOUSE_GRABBED) */ SDL_WINDOW_ALWAYS_ON_TOP = 0x00008000, /**< window should always be above others */ SDL_WINDOW_SKIP_TASKBAR = 0x00010000, /**< window should not be added to the taskbar */ SDL_WINDOW_UTILITY = 0x00020000, /**< window should be treated as a utility window */ SDL_WINDOW_TOOLTIP = 0x00040000, /**< window should be treated as a tooltip */ SDL_WINDOW_POPUP_MENU = 0x00080000, /**< window should be treated as a popup menu */ SDL_WINDOW_KEYBOARD_GRABBED = 0x00100000, /**< window has grabbed keyboard input */ SDL_WINDOW_VULKAN = 0x10000000, /**< window usable for Vulkan surface */ SDL_WINDOW_METAL = 0x20000000, /**< window usable for Metal view */ SDL_WINDOW_INPUT_GRABBED = SDL_WINDOW_MOUSE_GRABBED /**< equivalent to SDL_WINDOW_MOUSE_GRABBED for compatibility */ } SDL_WindowFlags; /** * \brief Used to indicate that you don't care what the window position is. */ #define SDL_WINDOWPOS_UNDEFINED_MASK 0x1FFF0000u #define SDL_WINDOWPOS_UNDEFINED_DISPLAY(X) (SDL_WINDOWPOS_UNDEFINED_MASK|(X)) #define SDL_WINDOWPOS_UNDEFINED SDL_WINDOWPOS_UNDEFINED_DISPLAY(0) #define SDL_WINDOWPOS_ISUNDEFINED(X) \ (((X)&0xFFFF0000) == SDL_WINDOWPOS_UNDEFINED_MASK) /** * \brief Used to indicate that the window position should be centered. */ #define SDL_WINDOWPOS_CENTERED_MASK 0x2FFF0000u #define SDL_WINDOWPOS_CENTERED_DISPLAY(X) (SDL_WINDOWPOS_CENTERED_MASK|(X)) #define SDL_WINDOWPOS_CENTERED SDL_WINDOWPOS_CENTERED_DISPLAY(0) #define SDL_WINDOWPOS_ISCENTERED(X) \ (((X)&0xFFFF0000) == SDL_WINDOWPOS_CENTERED_MASK) /** * \brief Event subtype for window events */ typedef enum { SDL_WINDOWEVENT_NONE, /**< Never used */ SDL_WINDOWEVENT_SHOWN, /**< Window has been shown */ SDL_WINDOWEVENT_HIDDEN, /**< Window has been hidden */ SDL_WINDOWEVENT_EXPOSED, /**< Window has been exposed and should be redrawn */ SDL_WINDOWEVENT_MOVED, /**< Window has been moved to data1, data2 */ SDL_WINDOWEVENT_RESIZED, /**< Window has been resized to data1xdata2 */ SDL_WINDOWEVENT_SIZE_CHANGED, /**< The window size has changed, either as a result of an API call or through the system or user changing the window size. */ SDL_WINDOWEVENT_MINIMIZED, /**< Window has been minimized */ SDL_WINDOWEVENT_MAXIMIZED, /**< Window has been maximized */ SDL_WINDOWEVENT_RESTORED, /**< Window has been restored to normal size and position */ SDL_WINDOWEVENT_ENTER, /**< Window has gained mouse focus */ SDL_WINDOWEVENT_LEAVE, /**< Window has lost mouse focus */ SDL_WINDOWEVENT_FOCUS_GAINED, /**< Window has gained keyboard focus */ SDL_WINDOWEVENT_FOCUS_LOST, /**< Window has lost keyboard focus */ SDL_WINDOWEVENT_CLOSE, /**< The window manager requests that the window be closed */ SDL_WINDOWEVENT_TAKE_FOCUS, /**< Window is being offered a focus (should SetWindowInputFocus() on itself or a subwindow, or ignore) */ SDL_WINDOWEVENT_HIT_TEST, /**< Window had a hit test that wasn't SDL_HITTEST_NORMAL. */ SDL_WINDOWEVENT_ICCPROF_CHANGED,/**< The ICC profile of the window's display has changed. */ SDL_WINDOWEVENT_DISPLAY_CHANGED /**< Window has been moved to display data1. */ } SDL_WindowEventID; /** * \brief Event subtype for display events */ typedef enum { SDL_DISPLAYEVENT_NONE, /**< Never used */ SDL_DISPLAYEVENT_ORIENTATION, /**< Display orientation has changed to data1 */ SDL_DISPLAYEVENT_CONNECTED, /**< Display has been added to the system */ SDL_DISPLAYEVENT_DISCONNECTED, /**< Display has been removed from the system */ SDL_DISPLAYEVENT_MOVED /**< Display has changed position */ } SDL_DisplayEventID; /** * \brief Display orientation */ typedef enum { SDL_ORIENTATION_UNKNOWN, /**< The display orientation can't be determined */ SDL_ORIENTATION_LANDSCAPE, /**< The display is in landscape mode, with the right side up, relative to portrait mode */ SDL_ORIENTATION_LANDSCAPE_FLIPPED, /**< The display is in landscape mode, with the left side up, relative to portrait mode */ SDL_ORIENTATION_PORTRAIT, /**< The display is in portrait mode */ SDL_ORIENTATION_PORTRAIT_FLIPPED /**< The display is in portrait mode, upside down */ } SDL_DisplayOrientation; /** * \brief Window flash operation */ typedef enum { SDL_FLASH_CANCEL, /**< Cancel any window flash state */ SDL_FLASH_BRIEFLY, /**< Flash the window briefly to get attention */ SDL_FLASH_UNTIL_FOCUSED /**< Flash the window until it gets focus */ } SDL_FlashOperation; /** * \brief An opaque handle to an OpenGL context. */ typedef void *SDL_GLContext; /** * \brief OpenGL configuration attributes */ typedef enum { SDL_GL_RED_SIZE, SDL_GL_GREEN_SIZE, SDL_GL_BLUE_SIZE, SDL_GL_ALPHA_SIZE, SDL_GL_BUFFER_SIZE, SDL_GL_DOUBLEBUFFER, SDL_GL_DEPTH_SIZE, SDL_GL_STENCIL_SIZE, SDL_GL_ACCUM_RED_SIZE, SDL_GL_ACCUM_GREEN_SIZE, SDL_GL_ACCUM_BLUE_SIZE, SDL_GL_ACCUM_ALPHA_SIZE, SDL_GL_STEREO, SDL_GL_MULTISAMPLEBUFFERS, SDL_GL_MULTISAMPLESAMPLES, SDL_GL_ACCELERATED_VISUAL, SDL_GL_RETAINED_BACKING, SDL_GL_CONTEXT_MAJOR_VERSION, SDL_GL_CONTEXT_MINOR_VERSION, SDL_GL_CONTEXT_EGL, SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_SHARE_WITH_CURRENT_CONTEXT, SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, SDL_GL_CONTEXT_RELEASE_BEHAVIOR, SDL_GL_CONTEXT_RESET_NOTIFICATION, SDL_GL_CONTEXT_NO_ERROR, SDL_GL_FLOATBUFFERS } SDL_GLattr; typedef enum { SDL_GL_CONTEXT_PROFILE_CORE = 0x0001, SDL_GL_CONTEXT_PROFILE_COMPATIBILITY = 0x0002, SDL_GL_CONTEXT_PROFILE_ES = 0x0004 /**< GLX_CONTEXT_ES2_PROFILE_BIT_EXT */ } SDL_GLprofile; typedef enum { SDL_GL_CONTEXT_DEBUG_FLAG = 0x0001, SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG = 0x0002, SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG = 0x0004, SDL_GL_CONTEXT_RESET_ISOLATION_FLAG = 0x0008 } SDL_GLcontextFlag; typedef enum { SDL_GL_CONTEXT_RELEASE_BEHAVIOR_NONE = 0x0000, SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH = 0x0001 } SDL_GLcontextReleaseFlag; typedef enum { SDL_GL_CONTEXT_RESET_NO_NOTIFICATION = 0x0000, SDL_GL_CONTEXT_RESET_LOSE_CONTEXT = 0x0001 } SDL_GLContextResetNotification; /* Function prototypes */ /** * Get the number of video drivers compiled into SDL. * * \returns a number >= 1 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetVideoDriver */ extern DECLSPEC int SDLCALL SDL_GetNumVideoDrivers(void); /** * Get the name of a built in video driver. * * The video drivers are presented in the order in which they are normally * checked during initialization. * * \param index the index of a video driver * \returns the name of the video driver with the given **index**. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetNumVideoDrivers */ extern DECLSPEC const char *SDLCALL SDL_GetVideoDriver(int index); /** * Initialize the video subsystem, optionally specifying a video driver. * * This function initializes the video subsystem, setting up a connection to * the window manager, etc, and determines the available display modes and * pixel formats, but does not initialize a window or graphics mode. * * If you use this function and you haven't used the SDL_INIT_VIDEO flag with * either SDL_Init() or SDL_InitSubSystem(), you should call SDL_VideoQuit() * before calling SDL_Quit(). * * It is safe to call this function multiple times. SDL_VideoInit() will call * SDL_VideoQuit() itself if the video subsystem has already been initialized. * * You can use SDL_GetNumVideoDrivers() and SDL_GetVideoDriver() to find a * specific `driver_name`. * * \param driver_name the name of a video driver to initialize, or NULL for * the default driver * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetNumVideoDrivers * \sa SDL_GetVideoDriver * \sa SDL_InitSubSystem * \sa SDL_VideoQuit */ extern DECLSPEC int SDLCALL SDL_VideoInit(const char *driver_name); /** * Shut down the video subsystem, if initialized with SDL_VideoInit(). * * This function closes all windows, and restores the original video mode. * * \since This function is available since SDL 2.0.0. * * \sa SDL_VideoInit */ extern DECLSPEC void SDLCALL SDL_VideoQuit(void); /** * Get the name of the currently initialized video driver. * * \returns the name of the current video driver or NULL if no driver has been * initialized. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetNumVideoDrivers * \sa SDL_GetVideoDriver */ extern DECLSPEC const char *SDLCALL SDL_GetCurrentVideoDriver(void); /** * Get the number of available video displays. * * \returns a number >= 1 or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetDisplayBounds */ extern DECLSPEC int SDLCALL SDL_GetNumVideoDisplays(void); /** * Get the name of a display in UTF-8 encoding. * * \param displayIndex the index of display from which the name should be * queried * \returns the name of a display or NULL for an invalid display index or * failure; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetNumVideoDisplays */ extern DECLSPEC const char * SDLCALL SDL_GetDisplayName(int displayIndex); /** * Get the desktop area represented by a display. * * The primary display (`displayIndex` zero) is always located at 0,0. * * \param displayIndex the index of the display to query * \param rect the SDL_Rect structure filled in with the display bounds * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetNumVideoDisplays */ extern DECLSPEC int SDLCALL SDL_GetDisplayBounds(int displayIndex, SDL_Rect * rect); /** * Get the usable desktop area represented by a display. * * The primary display (`displayIndex` zero) is always located at 0,0. * * This is the same area as SDL_GetDisplayBounds() reports, but with portions * reserved by the system removed. For example, on Apple's macOS, this * subtracts the area occupied by the menu bar and dock. * * Setting a window to be fullscreen generally bypasses these unusable areas, * so these are good guidelines for the maximum space available to a * non-fullscreen window. * * The parameter `rect` is ignored if it is NULL. * * This function also returns -1 if the parameter `displayIndex` is out of * range. * * \param displayIndex the index of the display to query the usable bounds * from * \param rect the SDL_Rect structure filled in with the display bounds * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.5. * * \sa SDL_GetDisplayBounds * \sa SDL_GetNumVideoDisplays */ extern DECLSPEC int SDLCALL SDL_GetDisplayUsableBounds(int displayIndex, SDL_Rect * rect); /** * Get the dots/pixels-per-inch for a display. * * Diagonal, horizontal and vertical DPI can all be optionally returned if the * appropriate parameter is non-NULL. * * A failure of this function usually means that either no DPI information is * available or the `displayIndex` is out of range. * * **WARNING**: This reports the DPI that the hardware reports, and it is not * always reliable! It is almost always better to use SDL_GetWindowSize() to * find the window size, which might be in logical points instead of pixels, * and then SDL_GL_GetDrawableSize(), SDL_Vulkan_GetDrawableSize(), * SDL_Metal_GetDrawableSize(), or SDL_GetRendererOutputSize(), and compare * the two values to get an actual scaling value between the two. We will be * rethinking how high-dpi details should be managed in SDL3 to make things * more consistent, reliable, and clear. * * \param displayIndex the index of the display from which DPI information * should be queried * \param ddpi a pointer filled in with the diagonal DPI of the display; may * be NULL * \param hdpi a pointer filled in with the horizontal DPI of the display; may * be NULL * \param vdpi a pointer filled in with the vertical DPI of the display; may * be NULL * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.4. * * \sa SDL_GetNumVideoDisplays */ extern DECLSPEC int SDLCALL SDL_GetDisplayDPI(int displayIndex, float * ddpi, float * hdpi, float * vdpi); /** * Get the orientation of a display. * * \param displayIndex the index of the display to query * \returns The SDL_DisplayOrientation enum value of the display, or * `SDL_ORIENTATION_UNKNOWN` if it isn't available. * * \since This function is available since SDL 2.0.9. * * \sa SDL_GetNumVideoDisplays */ extern DECLSPEC SDL_DisplayOrientation SDLCALL SDL_GetDisplayOrientation(int displayIndex); /** * Get the number of available display modes. * * The `displayIndex` needs to be in the range from 0 to * SDL_GetNumVideoDisplays() - 1. * * \param displayIndex the index of the display to query * \returns a number >= 1 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetDisplayMode * \sa SDL_GetNumVideoDisplays */ extern DECLSPEC int SDLCALL SDL_GetNumDisplayModes(int displayIndex); /** * Get information about a specific display mode. * * The display modes are sorted in this priority: * * - width -> largest to smallest * - height -> largest to smallest * - bits per pixel -> more colors to fewer colors * - packed pixel layout -> largest to smallest * - refresh rate -> highest to lowest * * \param displayIndex the index of the display to query * \param modeIndex the index of the display mode to query * \param mode an SDL_DisplayMode structure filled in with the mode at * `modeIndex` * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetNumDisplayModes */ extern DECLSPEC int SDLCALL SDL_GetDisplayMode(int displayIndex, int modeIndex, SDL_DisplayMode * mode); /** * Get information about the desktop's display mode. * * There's a difference between this function and SDL_GetCurrentDisplayMode() * when SDL runs fullscreen and has changed the resolution. In that case this * function will return the previous native display mode, and not the current * display mode. * * \param displayIndex the index of the display to query * \param mode an SDL_DisplayMode structure filled in with the current display * mode * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetCurrentDisplayMode * \sa SDL_GetDisplayMode * \sa SDL_SetWindowDisplayMode */ extern DECLSPEC int SDLCALL SDL_GetDesktopDisplayMode(int displayIndex, SDL_DisplayMode * mode); /** * Get information about the current display mode. * * There's a difference between this function and SDL_GetDesktopDisplayMode() * when SDL runs fullscreen and has changed the resolution. In that case this * function will return the current display mode, and not the previous native * display mode. * * \param displayIndex the index of the display to query * \param mode an SDL_DisplayMode structure filled in with the current display * mode * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetDesktopDisplayMode * \sa SDL_GetDisplayMode * \sa SDL_GetNumVideoDisplays * \sa SDL_SetWindowDisplayMode */ extern DECLSPEC int SDLCALL SDL_GetCurrentDisplayMode(int displayIndex, SDL_DisplayMode * mode); /** * Get the closest match to the requested display mode. * * The available display modes are scanned and `closest` is filled in with the * closest mode matching the requested mode and returned. The mode format and * refresh rate default to the desktop mode if they are set to 0. The modes * are scanned with size being first priority, format being second priority, * and finally checking the refresh rate. If all the available modes are too * small, then NULL is returned. * * \param displayIndex the index of the display to query * \param mode an SDL_DisplayMode structure containing the desired display * mode * \param closest an SDL_DisplayMode structure filled in with the closest * match of the available display modes * \returns the passed in value `closest` or NULL if no matching video mode * was available; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetDisplayMode * \sa SDL_GetNumDisplayModes */ extern DECLSPEC SDL_DisplayMode * SDLCALL SDL_GetClosestDisplayMode(int displayIndex, const SDL_DisplayMode * mode, SDL_DisplayMode * closest); /** * Get the index of the display containing a point * * \param point the point to query * \returns the index of the display containing the point or a negative error * code on failure; call SDL_GetError() for more information. * * \since This function is available since SDL 2.24.0. * * \sa SDL_GetDisplayBounds * \sa SDL_GetNumVideoDisplays */ extern DECLSPEC int SDLCALL SDL_GetPointDisplayIndex(const SDL_Point * point); /** * Get the index of the display primarily containing a rect * * \param rect the rect to query * \returns the index of the display entirely containing the rect or closest * to the center of the rect on success or a negative error code on * failure; call SDL_GetError() for more information. * * \since This function is available since SDL 2.24.0. * * \sa SDL_GetDisplayBounds * \sa SDL_GetNumVideoDisplays */ extern DECLSPEC int SDLCALL SDL_GetRectDisplayIndex(const SDL_Rect * rect); /** * Get the index of the display associated with a window. * * \param window the window to query * \returns the index of the display containing the center of the window on * success or a negative error code on failure; call SDL_GetError() * for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetDisplayBounds * \sa SDL_GetNumVideoDisplays */ extern DECLSPEC int SDLCALL SDL_GetWindowDisplayIndex(SDL_Window * window); /** * Set the display mode to use when a window is visible at fullscreen. * * This only affects the display mode used when the window is fullscreen. To * change the window size when the window is not fullscreen, use * SDL_SetWindowSize(). * * \param window the window to affect * \param mode the SDL_DisplayMode structure representing the mode to use, or * NULL to use the window's dimensions and the desktop's format * and refresh rate * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetWindowDisplayMode * \sa SDL_SetWindowFullscreen */ extern DECLSPEC int SDLCALL SDL_SetWindowDisplayMode(SDL_Window * window, const SDL_DisplayMode * mode); /** * Query the display mode to use when a window is visible at fullscreen. * * \param window the window to query * \param mode an SDL_DisplayMode structure filled in with the fullscreen * display mode * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_SetWindowDisplayMode * \sa SDL_SetWindowFullscreen */ extern DECLSPEC int SDLCALL SDL_GetWindowDisplayMode(SDL_Window * window, SDL_DisplayMode * mode); /** * Get the raw ICC profile data for the screen the window is currently on. * * Data returned should be freed with SDL_free. * * \param window the window to query * \param size the size of the ICC profile * \returns the raw ICC profile data on success or NULL on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.18. */ extern DECLSPEC void* SDLCALL SDL_GetWindowICCProfile(SDL_Window * window, size_t* size); /** * Get the pixel format associated with the window. * * \param window the window to query * \returns the pixel format of the window on success or * SDL_PIXELFORMAT_UNKNOWN on failure; call SDL_GetError() for more * information. * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC Uint32 SDLCALL SDL_GetWindowPixelFormat(SDL_Window * window); /** * Create a window with the specified position, dimensions, and flags. * * `flags` may be any of the following OR'd together: * * - `SDL_WINDOW_FULLSCREEN`: fullscreen window * - `SDL_WINDOW_FULLSCREEN_DESKTOP`: fullscreen window at desktop resolution * - `SDL_WINDOW_OPENGL`: window usable with an OpenGL context * - `SDL_WINDOW_VULKAN`: window usable with a Vulkan instance * - `SDL_WINDOW_METAL`: window usable with a Metal instance * - `SDL_WINDOW_HIDDEN`: window is not visible * - `SDL_WINDOW_BORDERLESS`: no window decoration * - `SDL_WINDOW_RESIZABLE`: window can be resized * - `SDL_WINDOW_MINIMIZED`: window is minimized * - `SDL_WINDOW_MAXIMIZED`: window is maximized * - `SDL_WINDOW_INPUT_GRABBED`: window has grabbed input focus * - `SDL_WINDOW_ALLOW_HIGHDPI`: window should be created in high-DPI mode if * supported (>= SDL 2.0.1) * * `SDL_WINDOW_SHOWN` is ignored by SDL_CreateWindow(). The SDL_Window is * implicitly shown if SDL_WINDOW_HIDDEN is not set. `SDL_WINDOW_SHOWN` may be * queried later using SDL_GetWindowFlags(). * * On Apple's macOS, you **must** set the NSHighResolutionCapable Info.plist * property to YES, otherwise you will not receive a High-DPI OpenGL canvas. * * If the window is created with the `SDL_WINDOW_ALLOW_HIGHDPI` flag, its size * in pixels may differ from its size in screen coordinates on platforms with * high-DPI support (e.g. iOS and macOS). Use SDL_GetWindowSize() to query the * client area's size in screen coordinates, and SDL_GL_GetDrawableSize() or * SDL_GetRendererOutputSize() to query the drawable size in pixels. Note that * when this flag is set, the drawable size can vary after the window is * created and should be queried after major window events such as when the * window is resized or moved between displays. * * If the window is set fullscreen, the width and height parameters `w` and * `h` will not be used. However, invalid size parameters (e.g. too large) may * still fail. Window size is actually limited to 16384 x 16384 for all * platforms at window creation. * * If the window is created with any of the SDL_WINDOW_OPENGL or * SDL_WINDOW_VULKAN flags, then the corresponding LoadLibrary function * (SDL_GL_LoadLibrary or SDL_Vulkan_LoadLibrary) is called and the * corresponding UnloadLibrary function is called by SDL_DestroyWindow(). * * If SDL_WINDOW_VULKAN is specified and there isn't a working Vulkan driver, * SDL_CreateWindow() will fail because SDL_Vulkan_LoadLibrary() will fail. * * If SDL_WINDOW_METAL is specified on an OS that does not support Metal, * SDL_CreateWindow() will fail. * * On non-Apple devices, SDL requires you to either not link to the Vulkan * loader or link to a dynamic library version. This limitation may be removed * in a future version of SDL. * * \param title the title of the window, in UTF-8 encoding * \param x the x position of the window, `SDL_WINDOWPOS_CENTERED`, or * `SDL_WINDOWPOS_UNDEFINED` * \param y the y position of the window, `SDL_WINDOWPOS_CENTERED`, or * `SDL_WINDOWPOS_UNDEFINED` * \param w the width of the window, in screen coordinates * \param h the height of the window, in screen coordinates * \param flags 0, or one or more SDL_WindowFlags OR'd together * \returns the window that was created or NULL on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateWindowFrom * \sa SDL_DestroyWindow */ extern DECLSPEC SDL_Window * SDLCALL SDL_CreateWindow(const char *title, int x, int y, int w, int h, Uint32 flags); /** * Create an SDL window from an existing native window. * * In some cases (e.g. OpenGL) and on some platforms (e.g. Microsoft Windows) * the hint `SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT` needs to be configured * before using SDL_CreateWindowFrom(). * * \param data a pointer to driver-dependent window creation data, typically * your native window cast to a void* * \returns the window that was created or NULL on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateWindow * \sa SDL_DestroyWindow */ extern DECLSPEC SDL_Window * SDLCALL SDL_CreateWindowFrom(const void *data); /** * Get the numeric ID of a window. * * The numeric ID is what SDL_WindowEvent references, and is necessary to map * these events to specific SDL_Window objects. * * \param window the window to query * \returns the ID of the window on success or 0 on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetWindowFromID */ extern DECLSPEC Uint32 SDLCALL SDL_GetWindowID(SDL_Window * window); /** * Get a window from a stored ID. * * The numeric ID is what SDL_WindowEvent references, and is necessary to map * these events to specific SDL_Window objects. * * \param id the ID of the window * \returns the window associated with `id` or NULL if it doesn't exist; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetWindowID */ extern DECLSPEC SDL_Window * SDLCALL SDL_GetWindowFromID(Uint32 id); /** * Get the window flags. * * \param window the window to query * \returns a mask of the SDL_WindowFlags associated with `window` * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateWindow * \sa SDL_HideWindow * \sa SDL_MaximizeWindow * \sa SDL_MinimizeWindow * \sa SDL_SetWindowFullscreen * \sa SDL_SetWindowGrab * \sa SDL_ShowWindow */ extern DECLSPEC Uint32 SDLCALL SDL_GetWindowFlags(SDL_Window * window); /** * Set the title of a window. * * This string is expected to be in UTF-8 encoding. * * \param window the window to change * \param title the desired window title in UTF-8 format * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetWindowTitle */ extern DECLSPEC void SDLCALL SDL_SetWindowTitle(SDL_Window * window, const char *title); /** * Get the title of a window. * * \param window the window to query * \returns the title of the window in UTF-8 format or "" if there is no * title. * * \since This function is available since SDL 2.0.0. * * \sa SDL_SetWindowTitle */ extern DECLSPEC const char *SDLCALL SDL_GetWindowTitle(SDL_Window * window); /** * Set the icon for a window. * * \param window the window to change * \param icon an SDL_Surface structure containing the icon for the window * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC void SDLCALL SDL_SetWindowIcon(SDL_Window * window, SDL_Surface * icon); /** * Associate an arbitrary named pointer with a window. * * `name` is case-sensitive. * * \param window the window to associate with the pointer * \param name the name of the pointer * \param userdata the associated pointer * \returns the previous value associated with `name`. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetWindowData */ extern DECLSPEC void* SDLCALL SDL_SetWindowData(SDL_Window * window, const char *name, void *userdata); /** * Retrieve the data pointer associated with a window. * * \param window the window to query * \param name the name of the pointer * \returns the value associated with `name`. * * \since This function is available since SDL 2.0.0. * * \sa SDL_SetWindowData */ extern DECLSPEC void *SDLCALL SDL_GetWindowData(SDL_Window * window, const char *name); /** * Set the position of a window. * * The window coordinate origin is the upper left of the display. * * \param window the window to reposition * \param x the x coordinate of the window in screen coordinates, or * `SDL_WINDOWPOS_CENTERED` or `SDL_WINDOWPOS_UNDEFINED` * \param y the y coordinate of the window in screen coordinates, or * `SDL_WINDOWPOS_CENTERED` or `SDL_WINDOWPOS_UNDEFINED` * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetWindowPosition */ extern DECLSPEC void SDLCALL SDL_SetWindowPosition(SDL_Window * window, int x, int y); /** * Get the position of a window. * * If you do not need the value for one of the positions a NULL may be passed * in the `x` or `y` parameter. * * \param window the window to query * \param x a pointer filled in with the x position of the window, in screen * coordinates, may be NULL * \param y a pointer filled in with the y position of the window, in screen * coordinates, may be NULL * * \since This function is available since SDL 2.0.0. * * \sa SDL_SetWindowPosition */ extern DECLSPEC void SDLCALL SDL_GetWindowPosition(SDL_Window * window, int *x, int *y); /** * Set the size of a window's client area. * * The window size in screen coordinates may differ from the size in pixels, * if the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a platform * with high-dpi support (e.g. iOS or macOS). Use SDL_GL_GetDrawableSize() or * SDL_GetRendererOutputSize() to get the real client area size in pixels. * * Fullscreen windows automatically match the size of the display mode, and * you should use SDL_SetWindowDisplayMode() to change their size. * * \param window the window to change * \param w the width of the window in pixels, in screen coordinates, must be * > 0 * \param h the height of the window in pixels, in screen coordinates, must be * > 0 * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetWindowSize * \sa SDL_SetWindowDisplayMode */ extern DECLSPEC void SDLCALL SDL_SetWindowSize(SDL_Window * window, int w, int h); /** * Get the size of a window's client area. * * NULL can safely be passed as the `w` or `h` parameter if the width or * height value is not desired. * * The window size in screen coordinates may differ from the size in pixels, * if the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a platform * with high-dpi support (e.g. iOS or macOS). Use SDL_GL_GetDrawableSize(), * SDL_Vulkan_GetDrawableSize(), or SDL_GetRendererOutputSize() to get the * real client area size in pixels. * * \param window the window to query the width and height from * \param w a pointer filled in with the width of the window, in screen * coordinates, may be NULL * \param h a pointer filled in with the height of the window, in screen * coordinates, may be NULL * * \since This function is available since SDL 2.0.0. * * \sa SDL_GL_GetDrawableSize * \sa SDL_Vulkan_GetDrawableSize * \sa SDL_SetWindowSize */ extern DECLSPEC void SDLCALL SDL_GetWindowSize(SDL_Window * window, int *w, int *h); /** * Get the size of a window's borders (decorations) around the client area. * * Note: If this function fails (returns -1), the size values will be * initialized to 0, 0, 0, 0 (if a non-NULL pointer is provided), as if the * window in question was borderless. * * Note: This function may fail on systems where the window has not yet been * decorated by the display server (for example, immediately after calling * SDL_CreateWindow). It is recommended that you wait at least until the * window has been presented and composited, so that the window system has a * chance to decorate the window and provide the border dimensions to SDL. * * This function also returns -1 if getting the information is not supported. * * \param window the window to query the size values of the border * (decorations) from * \param top pointer to variable for storing the size of the top border; NULL * is permitted * \param left pointer to variable for storing the size of the left border; * NULL is permitted * \param bottom pointer to variable for storing the size of the bottom * border; NULL is permitted * \param right pointer to variable for storing the size of the right border; * NULL is permitted * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.5. * * \sa SDL_GetWindowSize */ extern DECLSPEC int SDLCALL SDL_GetWindowBordersSize(SDL_Window * window, int *top, int *left, int *bottom, int *right); /** * Get the size of a window in pixels. * * This may differ from SDL_GetWindowSize() if we're rendering to a high-DPI * drawable, i.e. the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a * platform with high-DPI support (Apple calls this "Retina"), and not * disabled by the `SDL_HINT_VIDEO_HIGHDPI_DISABLED` hint. * * \param window the window from which the drawable size should be queried * \param w a pointer to variable for storing the width in pixels, may be NULL * \param h a pointer to variable for storing the height in pixels, may be * NULL * * \since This function is available since SDL 2.26.0. * * \sa SDL_CreateWindow * \sa SDL_GetWindowSize */ extern DECLSPEC void SDLCALL SDL_GetWindowSizeInPixels(SDL_Window * window, int *w, int *h); /** * Set the minimum size of a window's client area. * * \param window the window to change * \param min_w the minimum width of the window in pixels * \param min_h the minimum height of the window in pixels * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetWindowMinimumSize * \sa SDL_SetWindowMaximumSize */ extern DECLSPEC void SDLCALL SDL_SetWindowMinimumSize(SDL_Window * window, int min_w, int min_h); /** * Get the minimum size of a window's client area. * * \param window the window to query * \param w a pointer filled in with the minimum width of the window, may be * NULL * \param h a pointer filled in with the minimum height of the window, may be * NULL * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetWindowMaximumSize * \sa SDL_SetWindowMinimumSize */ extern DECLSPEC void SDLCALL SDL_GetWindowMinimumSize(SDL_Window * window, int *w, int *h); /** * Set the maximum size of a window's client area. * * \param window the window to change * \param max_w the maximum width of the window in pixels * \param max_h the maximum height of the window in pixels * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetWindowMaximumSize * \sa SDL_SetWindowMinimumSize */ extern DECLSPEC void SDLCALL SDL_SetWindowMaximumSize(SDL_Window * window, int max_w, int max_h); /** * Get the maximum size of a window's client area. * * \param window the window to query * \param w a pointer filled in with the maximum width of the window, may be * NULL * \param h a pointer filled in with the maximum height of the window, may be * NULL * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetWindowMinimumSize * \sa SDL_SetWindowMaximumSize */ extern DECLSPEC void SDLCALL SDL_GetWindowMaximumSize(SDL_Window * window, int *w, int *h); /** * Set the border state of a window. * * This will add or remove the window's `SDL_WINDOW_BORDERLESS` flag and add * or remove the border from the actual window. This is a no-op if the * window's border already matches the requested state. * * You can't change the border state of a fullscreen window. * * \param window the window of which to change the border state * \param bordered SDL_FALSE to remove border, SDL_TRUE to add border * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetWindowFlags */ extern DECLSPEC void SDLCALL SDL_SetWindowBordered(SDL_Window * window, SDL_bool bordered); /** * Set the user-resizable state of a window. * * This will add or remove the window's `SDL_WINDOW_RESIZABLE` flag and * allow/disallow user resizing of the window. This is a no-op if the window's * resizable state already matches the requested state. * * You can't change the resizable state of a fullscreen window. * * \param window the window of which to change the resizable state * \param resizable SDL_TRUE to allow resizing, SDL_FALSE to disallow * * \since This function is available since SDL 2.0.5. * * \sa SDL_GetWindowFlags */ extern DECLSPEC void SDLCALL SDL_SetWindowResizable(SDL_Window * window, SDL_bool resizable); /** * Set the window to always be above the others. * * This will add or remove the window's `SDL_WINDOW_ALWAYS_ON_TOP` flag. This * will bring the window to the front and keep the window above the rest. * * \param window The window of which to change the always on top state * \param on_top SDL_TRUE to set the window always on top, SDL_FALSE to * disable * * \since This function is available since SDL 2.0.16. * * \sa SDL_GetWindowFlags */ extern DECLSPEC void SDLCALL SDL_SetWindowAlwaysOnTop(SDL_Window * window, SDL_bool on_top); /** * Show a window. * * \param window the window to show * * \since This function is available since SDL 2.0.0. * * \sa SDL_HideWindow * \sa SDL_RaiseWindow */ extern DECLSPEC void SDLCALL SDL_ShowWindow(SDL_Window * window); /** * Hide a window. * * \param window the window to hide * * \since This function is available since SDL 2.0.0. * * \sa SDL_ShowWindow */ extern DECLSPEC void SDLCALL SDL_HideWindow(SDL_Window * window); /** * Raise a window above other windows and set the input focus. * * \param window the window to raise * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC void SDLCALL SDL_RaiseWindow(SDL_Window * window); /** * Make a window as large as possible. * * \param window the window to maximize * * \since This function is available since SDL 2.0.0. * * \sa SDL_MinimizeWindow * \sa SDL_RestoreWindow */ extern DECLSPEC void SDLCALL SDL_MaximizeWindow(SDL_Window * window); /** * Minimize a window to an iconic representation. * * \param window the window to minimize * * \since This function is available since SDL 2.0.0. * * \sa SDL_MaximizeWindow * \sa SDL_RestoreWindow */ extern DECLSPEC void SDLCALL SDL_MinimizeWindow(SDL_Window * window); /** * Restore the size and position of a minimized or maximized window. * * \param window the window to restore * * \since This function is available since SDL 2.0.0. * * \sa SDL_MaximizeWindow * \sa SDL_MinimizeWindow */ extern DECLSPEC void SDLCALL SDL_RestoreWindow(SDL_Window * window); /** * Set a window's fullscreen state. * * `flags` may be `SDL_WINDOW_FULLSCREEN`, for "real" fullscreen with a * videomode change; `SDL_WINDOW_FULLSCREEN_DESKTOP` for "fake" fullscreen * that takes the size of the desktop; and 0 for windowed mode. * * \param window the window to change * \param flags `SDL_WINDOW_FULLSCREEN`, `SDL_WINDOW_FULLSCREEN_DESKTOP` or 0 * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetWindowDisplayMode * \sa SDL_SetWindowDisplayMode */ extern DECLSPEC int SDLCALL SDL_SetWindowFullscreen(SDL_Window * window, Uint32 flags); /** * Return whether the window has a surface associated with it. * * \returns SDL_TRUE if there is a surface associated with the window, or * SDL_FALSE otherwise. * * \since This function is available since SDL 2.28.0. * * \sa SDL_GetWindowSurface */ extern DECLSPEC SDL_bool SDLCALL SDL_HasWindowSurface(SDL_Window *window); /** * Get the SDL surface associated with the window. * * A new surface will be created with the optimal format for the window, if * necessary. This surface will be freed when the window is destroyed. Do not * free this surface. * * This surface will be invalidated if the window is resized. After resizing a * window this function must be called again to return a valid surface. * * You may not combine this with 3D or the rendering API on this window. * * This function is affected by `SDL_HINT_FRAMEBUFFER_ACCELERATION`. * * \param window the window to query * \returns the surface associated with the window, or NULL on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_DestroyWindowSurface * \sa SDL_HasWindowSurface * \sa SDL_UpdateWindowSurface * \sa SDL_UpdateWindowSurfaceRects */ extern DECLSPEC SDL_Surface * SDLCALL SDL_GetWindowSurface(SDL_Window * window); /** * Copy the window surface to the screen. * * This is the function you use to reflect any changes to the surface on the * screen. * * This function is equivalent to the SDL 1.2 API SDL_Flip(). * * \param window the window to update * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetWindowSurface * \sa SDL_UpdateWindowSurfaceRects */ extern DECLSPEC int SDLCALL SDL_UpdateWindowSurface(SDL_Window * window); /** * Copy areas of the window surface to the screen. * * This is the function you use to reflect changes to portions of the surface * on the screen. * * This function is equivalent to the SDL 1.2 API SDL_UpdateRects(). * * Note that this function will update _at least_ the rectangles specified, * but this is only intended as an optimization; in practice, this might * update more of the screen (or all of the screen!), depending on what * method SDL uses to send pixels to the system. * * \param window the window to update * \param rects an array of SDL_Rect structures representing areas of the * surface to copy, in pixels * \param numrects the number of rectangles * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetWindowSurface * \sa SDL_UpdateWindowSurface */ extern DECLSPEC int SDLCALL SDL_UpdateWindowSurfaceRects(SDL_Window * window, const SDL_Rect * rects, int numrects); /** * Destroy the surface associated with the window. * * \param window the window to update * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.28.0. * * \sa SDL_GetWindowSurface * \sa SDL_HasWindowSurface */ extern DECLSPEC int SDLCALL SDL_DestroyWindowSurface(SDL_Window *window); /** * Set a window's input grab mode. * * When input is grabbed, the mouse is confined to the window. This function * will also grab the keyboard if `SDL_HINT_GRAB_KEYBOARD` is set. To grab the * keyboard without also grabbing the mouse, use SDL_SetWindowKeyboardGrab(). * * If the caller enables a grab while another window is currently grabbed, the * other window loses its grab in favor of the caller's window. * * \param window the window for which the input grab mode should be set * \param grabbed SDL_TRUE to grab input or SDL_FALSE to release input * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetGrabbedWindow * \sa SDL_GetWindowGrab */ extern DECLSPEC void SDLCALL SDL_SetWindowGrab(SDL_Window * window, SDL_bool grabbed); /** * Set a window's keyboard grab mode. * * Keyboard grab enables capture of system keyboard shortcuts like Alt+Tab or * the Meta/Super key. Note that not all system keyboard shortcuts can be * captured by applications (one example is Ctrl+Alt+Del on Windows). * * This is primarily intended for specialized applications such as VNC clients * or VM frontends. Normal games should not use keyboard grab. * * When keyboard grab is enabled, SDL will continue to handle Alt+Tab when the * window is full-screen to ensure the user is not trapped in your * application. If you have a custom keyboard shortcut to exit fullscreen * mode, you may suppress this behavior with * `SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED`. * * If the caller enables a grab while another window is currently grabbed, the * other window loses its grab in favor of the caller's window. * * \param window The window for which the keyboard grab mode should be set. * \param grabbed This is SDL_TRUE to grab keyboard, and SDL_FALSE to release. * * \since This function is available since SDL 2.0.16. * * \sa SDL_GetWindowKeyboardGrab * \sa SDL_SetWindowMouseGrab * \sa SDL_SetWindowGrab */ extern DECLSPEC void SDLCALL SDL_SetWindowKeyboardGrab(SDL_Window * window, SDL_bool grabbed); /** * Set a window's mouse grab mode. * * Mouse grab confines the mouse cursor to the window. * * \param window The window for which the mouse grab mode should be set. * \param grabbed This is SDL_TRUE to grab mouse, and SDL_FALSE to release. * * \since This function is available since SDL 2.0.16. * * \sa SDL_GetWindowMouseGrab * \sa SDL_SetWindowKeyboardGrab * \sa SDL_SetWindowGrab */ extern DECLSPEC void SDLCALL SDL_SetWindowMouseGrab(SDL_Window * window, SDL_bool grabbed); /** * Get a window's input grab mode. * * \param window the window to query * \returns SDL_TRUE if input is grabbed, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.0. * * \sa SDL_SetWindowGrab */ extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowGrab(SDL_Window * window); /** * Get a window's keyboard grab mode. * * \param window the window to query * \returns SDL_TRUE if keyboard is grabbed, and SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.16. * * \sa SDL_SetWindowKeyboardGrab * \sa SDL_GetWindowGrab */ extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowKeyboardGrab(SDL_Window * window); /** * Get a window's mouse grab mode. * * \param window the window to query * \returns SDL_TRUE if mouse is grabbed, and SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.16. * * \sa SDL_SetWindowKeyboardGrab * \sa SDL_GetWindowGrab */ extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowMouseGrab(SDL_Window * window); /** * Get the window that currently has an input grab enabled. * * \returns the window if input is grabbed or NULL otherwise. * * \since This function is available since SDL 2.0.4. * * \sa SDL_GetWindowGrab * \sa SDL_SetWindowGrab */ extern DECLSPEC SDL_Window * SDLCALL SDL_GetGrabbedWindow(void); /** * Confines the cursor to the specified area of a window. * * Note that this does NOT grab the cursor, it only defines the area a cursor * is restricted to when the window has mouse focus. * * \param window The window that will be associated with the barrier. * \param rect A rectangle area in window-relative coordinates. If NULL the * barrier for the specified window will be destroyed. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.18. * * \sa SDL_GetWindowMouseRect * \sa SDL_SetWindowMouseGrab */ extern DECLSPEC int SDLCALL SDL_SetWindowMouseRect(SDL_Window * window, const SDL_Rect * rect); /** * Get the mouse confinement rectangle of a window. * * \param window The window to query * \returns A pointer to the mouse confinement rectangle of a window, or NULL * if there isn't one. * * \since This function is available since SDL 2.0.18. * * \sa SDL_SetWindowMouseRect */ extern DECLSPEC const SDL_Rect * SDLCALL SDL_GetWindowMouseRect(SDL_Window * window); /** * Set the brightness (gamma multiplier) for a given window's display. * * Despite the name and signature, this method sets the brightness of the * entire display, not an individual window. A window is considered to be * owned by the display that contains the window's center pixel. (The index of * this display can be retrieved using SDL_GetWindowDisplayIndex().) The * brightness set will not follow the window if it is moved to another * display. * * Many platforms will refuse to set the display brightness in modern times. * You are better off using a shader to adjust gamma during rendering, or * something similar. * * \param window the window used to select the display whose brightness will * be changed * \param brightness the brightness (gamma multiplier) value to set where 0.0 * is completely dark and 1.0 is normal brightness * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetWindowBrightness * \sa SDL_SetWindowGammaRamp */ extern DECLSPEC int SDLCALL SDL_SetWindowBrightness(SDL_Window * window, float brightness); /** * Get the brightness (gamma multiplier) for a given window's display. * * Despite the name and signature, this method retrieves the brightness of the * entire display, not an individual window. A window is considered to be * owned by the display that contains the window's center pixel. (The index of * this display can be retrieved using SDL_GetWindowDisplayIndex().) * * \param window the window used to select the display whose brightness will * be queried * \returns the brightness for the display where 0.0 is completely dark and * 1.0 is normal brightness. * * \since This function is available since SDL 2.0.0. * * \sa SDL_SetWindowBrightness */ extern DECLSPEC float SDLCALL SDL_GetWindowBrightness(SDL_Window * window); /** * Set the opacity for a window. * * The parameter `opacity` will be clamped internally between 0.0f * (transparent) and 1.0f (opaque). * * This function also returns -1 if setting the opacity isn't supported. * * \param window the window which will be made transparent or opaque * \param opacity the opacity value (0.0f - transparent, 1.0f - opaque) * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.5. * * \sa SDL_GetWindowOpacity */ extern DECLSPEC int SDLCALL SDL_SetWindowOpacity(SDL_Window * window, float opacity); /** * Get the opacity of a window. * * If transparency isn't supported on this platform, opacity will be reported * as 1.0f without error. * * The parameter `opacity` is ignored if it is NULL. * * This function also returns -1 if an invalid window was provided. * * \param window the window to get the current opacity value from * \param out_opacity the float filled in (0.0f - transparent, 1.0f - opaque) * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.5. * * \sa SDL_SetWindowOpacity */ extern DECLSPEC int SDLCALL SDL_GetWindowOpacity(SDL_Window * window, float * out_opacity); /** * Set the window as a modal for another window. * * \param modal_window the window that should be set modal * \param parent_window the parent window for the modal window * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.5. */ extern DECLSPEC int SDLCALL SDL_SetWindowModalFor(SDL_Window * modal_window, SDL_Window * parent_window); /** * Explicitly set input focus to the window. * * You almost certainly want SDL_RaiseWindow() instead of this function. Use * this with caution, as you might give focus to a window that is completely * obscured by other windows. * * \param window the window that should get the input focus * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.5. * * \sa SDL_RaiseWindow */ extern DECLSPEC int SDLCALL SDL_SetWindowInputFocus(SDL_Window * window); /** * Set the gamma ramp for the display that owns a given window. * * Set the gamma translation table for the red, green, and blue channels of * the video hardware. Each table is an array of 256 16-bit quantities, * representing a mapping between the input and output for that channel. The * input is the index into the array, and the output is the 16-bit gamma value * at that index, scaled to the output color precision. * * Despite the name and signature, this method sets the gamma ramp of the * entire display, not an individual window. A window is considered to be * owned by the display that contains the window's center pixel. (The index of * this display can be retrieved using SDL_GetWindowDisplayIndex().) The gamma * ramp set will not follow the window if it is moved to another display. * * \param window the window used to select the display whose gamma ramp will * be changed * \param red a 256 element array of 16-bit quantities representing the * translation table for the red channel, or NULL * \param green a 256 element array of 16-bit quantities representing the * translation table for the green channel, or NULL * \param blue a 256 element array of 16-bit quantities representing the * translation table for the blue channel, or NULL * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GetWindowGammaRamp */ extern DECLSPEC int SDLCALL SDL_SetWindowGammaRamp(SDL_Window * window, const Uint16 * red, const Uint16 * green, const Uint16 * blue); /** * Get the gamma ramp for a given window's display. * * Despite the name and signature, this method retrieves the gamma ramp of the * entire display, not an individual window. A window is considered to be * owned by the display that contains the window's center pixel. (The index of * this display can be retrieved using SDL_GetWindowDisplayIndex().) * * \param window the window used to select the display whose gamma ramp will * be queried * \param red a 256 element array of 16-bit quantities filled in with the * translation table for the red channel, or NULL * \param green a 256 element array of 16-bit quantities filled in with the * translation table for the green channel, or NULL * \param blue a 256 element array of 16-bit quantities filled in with the * translation table for the blue channel, or NULL * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_SetWindowGammaRamp */ extern DECLSPEC int SDLCALL SDL_GetWindowGammaRamp(SDL_Window * window, Uint16 * red, Uint16 * green, Uint16 * blue); /** * Possible return values from the SDL_HitTest callback. * * \sa SDL_HitTest */ typedef enum { SDL_HITTEST_NORMAL, /**< Region is normal. No special properties. */ SDL_HITTEST_DRAGGABLE, /**< Region can drag entire window. */ SDL_HITTEST_RESIZE_TOPLEFT, SDL_HITTEST_RESIZE_TOP, SDL_HITTEST_RESIZE_TOPRIGHT, SDL_HITTEST_RESIZE_RIGHT, SDL_HITTEST_RESIZE_BOTTOMRIGHT, SDL_HITTEST_RESIZE_BOTTOM, SDL_HITTEST_RESIZE_BOTTOMLEFT, SDL_HITTEST_RESIZE_LEFT } SDL_HitTestResult; /** * Callback used for hit-testing. * * \param win the SDL_Window where hit-testing was set on * \param area an SDL_Point which should be hit-tested * \param data what was passed as `callback_data` to SDL_SetWindowHitTest() * \return an SDL_HitTestResult value. * * \sa SDL_SetWindowHitTest */ typedef SDL_HitTestResult (SDLCALL *SDL_HitTest)(SDL_Window *win, const SDL_Point *area, void *data); /** * Provide a callback that decides if a window region has special properties. * * Normally windows are dragged and resized by decorations provided by the * system window manager (a title bar, borders, etc), but for some apps, it * makes sense to drag them from somewhere else inside the window itself; for * example, one might have a borderless window that wants to be draggable from * any part, or simulate its own title bar, etc. * * This function lets the app provide a callback that designates pieces of a * given window as special. This callback is run during event processing if we * need to tell the OS to treat a region of the window specially; the use of * this callback is known as "hit testing." * * Mouse input may not be delivered to your application if it is within a * special area; the OS will often apply that input to moving the window or * resizing the window and not deliver it to the application. * * Specifying NULL for a callback disables hit-testing. Hit-testing is * disabled by default. * * Platforms that don't support this functionality will return -1 * unconditionally, even if you're attempting to disable hit-testing. * * Your callback may fire at any time, and its firing does not indicate any * specific behavior (for example, on Windows, this certainly might fire when * the OS is deciding whether to drag your window, but it fires for lots of * other reasons, too, some unrelated to anything you probably care about _and * when the mouse isn't actually at the location it is testing_). Since this * can fire at any time, you should try to keep your callback efficient, * devoid of allocations, etc. * * \param window the window to set hit-testing on * \param callback the function to call when doing a hit-test * \param callback_data an app-defined void pointer passed to **callback** * \returns 0 on success or -1 on error (including unsupported); call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.4. */ extern DECLSPEC int SDLCALL SDL_SetWindowHitTest(SDL_Window * window, SDL_HitTest callback, void *callback_data); /** * Request a window to demand attention from the user. * * \param window the window to be flashed * \param operation the flash operation * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.16. */ extern DECLSPEC int SDLCALL SDL_FlashWindow(SDL_Window * window, SDL_FlashOperation operation); /** * Destroy a window. * * If `window` is NULL, this function will return immediately after setting * the SDL error message to "Invalid window". See SDL_GetError(). * * \param window the window to destroy * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateWindow * \sa SDL_CreateWindowFrom */ extern DECLSPEC void SDLCALL SDL_DestroyWindow(SDL_Window * window); /** * Check whether the screensaver is currently enabled. * * The screensaver is disabled by default since SDL 2.0.2. Before SDL 2.0.2 * the screensaver was enabled by default. * * The default can also be changed using `SDL_HINT_VIDEO_ALLOW_SCREENSAVER`. * * \returns SDL_TRUE if the screensaver is enabled, SDL_FALSE if it is * disabled. * * \since This function is available since SDL 2.0.0. * * \sa SDL_DisableScreenSaver * \sa SDL_EnableScreenSaver */ extern DECLSPEC SDL_bool SDLCALL SDL_IsScreenSaverEnabled(void); /** * Allow the screen to be blanked by a screen saver. * * \since This function is available since SDL 2.0.0. * * \sa SDL_DisableScreenSaver * \sa SDL_IsScreenSaverEnabled */ extern DECLSPEC void SDLCALL SDL_EnableScreenSaver(void); /** * Prevent the screen from being blanked by a screen saver. * * If you disable the screensaver, it is automatically re-enabled when SDL * quits. * * The screensaver is disabled by default since SDL 2.0.2. Before SDL 2.0.2 * the screensaver was enabled by default. * * \since This function is available since SDL 2.0.0. * * \sa SDL_EnableScreenSaver * \sa SDL_IsScreenSaverEnabled */ extern DECLSPEC void SDLCALL SDL_DisableScreenSaver(void); /** * \name OpenGL support functions */ /* @{ */ /** * Dynamically load an OpenGL library. * * This should be done after initializing the video driver, but before * creating any OpenGL windows. If no OpenGL library is loaded, the default * library will be loaded upon creation of the first OpenGL window. * * If you do this, you need to retrieve all of the GL functions used in your * program from the dynamic library using SDL_GL_GetProcAddress(). * * \param path the platform dependent OpenGL library name, or NULL to open the * default OpenGL library * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GL_GetProcAddress * \sa SDL_GL_UnloadLibrary */ extern DECLSPEC int SDLCALL SDL_GL_LoadLibrary(const char *path); /** * Get an OpenGL function by name. * * If the GL library is loaded at runtime with SDL_GL_LoadLibrary(), then all * GL functions must be retrieved this way. Usually this is used to retrieve * function pointers to OpenGL extensions. * * There are some quirks to looking up OpenGL functions that require some * extra care from the application. If you code carefully, you can handle * these quirks without any platform-specific code, though: * * - On Windows, function pointers are specific to the current GL context; * this means you need to have created a GL context and made it current * before calling SDL_GL_GetProcAddress(). If you recreate your context or * create a second context, you should assume that any existing function * pointers aren't valid to use with it. This is (currently) a * Windows-specific limitation, and in practice lots of drivers don't suffer * this limitation, but it is still the way the wgl API is documented to * work and you should expect crashes if you don't respect it. Store a copy * of the function pointers that comes and goes with context lifespan. * - On X11, function pointers returned by this function are valid for any * context, and can even be looked up before a context is created at all. * This means that, for at least some common OpenGL implementations, if you * look up a function that doesn't exist, you'll get a non-NULL result that * is _NOT_ safe to call. You must always make sure the function is actually * available for a given GL context before calling it, by checking for the * existence of the appropriate extension with SDL_GL_ExtensionSupported(), * or verifying that the version of OpenGL you're using offers the function * as core functionality. * - Some OpenGL drivers, on all platforms, *will* return NULL if a function * isn't supported, but you can't count on this behavior. Check for * extensions you use, and if you get a NULL anyway, act as if that * extension wasn't available. This is probably a bug in the driver, but you * can code defensively for this scenario anyhow. * - Just because you're on Linux/Unix, don't assume you'll be using X11. * Next-gen display servers are waiting to replace it, and may or may not * make the same promises about function pointers. * - OpenGL function pointers must be declared `APIENTRY` as in the example * code. This will ensure the proper calling convention is followed on * platforms where this matters (Win32) thereby avoiding stack corruption. * * \param proc the name of an OpenGL function * \returns a pointer to the named OpenGL function. The returned pointer * should be cast to the appropriate function signature. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GL_ExtensionSupported * \sa SDL_GL_LoadLibrary * \sa SDL_GL_UnloadLibrary */ extern DECLSPEC void *SDLCALL SDL_GL_GetProcAddress(const char *proc); /** * Unload the OpenGL library previously loaded by SDL_GL_LoadLibrary(). * * \since This function is available since SDL 2.0.0. * * \sa SDL_GL_LoadLibrary */ extern DECLSPEC void SDLCALL SDL_GL_UnloadLibrary(void); /** * Check if an OpenGL extension is supported for the current context. * * This function operates on the current GL context; you must have created a * context and it must be current before calling this function. Do not assume * that all contexts you create will have the same set of extensions * available, or that recreating an existing context will offer the same * extensions again. * * While it's probably not a massive overhead, this function is not an O(1) * operation. Check the extensions you care about after creating the GL * context and save that information somewhere instead of calling the function * every time you need to know. * * \param extension the name of the extension to check * \returns SDL_TRUE if the extension is supported, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC SDL_bool SDLCALL SDL_GL_ExtensionSupported(const char *extension); /** * Reset all previously set OpenGL context attributes to their default values. * * \since This function is available since SDL 2.0.2. * * \sa SDL_GL_GetAttribute * \sa SDL_GL_SetAttribute */ extern DECLSPEC void SDLCALL SDL_GL_ResetAttributes(void); /** * Set an OpenGL window attribute before window creation. * * This function sets the OpenGL attribute `attr` to `value`. The requested * attributes should be set before creating an OpenGL window. You should use * SDL_GL_GetAttribute() to check the values after creating the OpenGL * context, since the values obtained can differ from the requested ones. * * \param attr an SDL_GLattr enum value specifying the OpenGL attribute to set * \param value the desired value for the attribute * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GL_GetAttribute * \sa SDL_GL_ResetAttributes */ extern DECLSPEC int SDLCALL SDL_GL_SetAttribute(SDL_GLattr attr, int value); /** * Get the actual value for an attribute from the current context. * * \param attr an SDL_GLattr enum value specifying the OpenGL attribute to get * \param value a pointer filled in with the current value of `attr` * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GL_ResetAttributes * \sa SDL_GL_SetAttribute */ extern DECLSPEC int SDLCALL SDL_GL_GetAttribute(SDL_GLattr attr, int *value); /** * Create an OpenGL context for an OpenGL window, and make it current. * * Windows users new to OpenGL should note that, for historical reasons, GL * functions added after OpenGL version 1.1 are not available by default. * Those functions must be loaded at run-time, either with an OpenGL * extension-handling library or with SDL_GL_GetProcAddress() and its related * functions. * * SDL_GLContext is an alias for `void *`. It's opaque to the application. * * \param window the window to associate with the context * \returns the OpenGL context associated with `window` or NULL on error; call * SDL_GetError() for more details. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GL_DeleteContext * \sa SDL_GL_MakeCurrent */ extern DECLSPEC SDL_GLContext SDLCALL SDL_GL_CreateContext(SDL_Window * window); /** * Set up an OpenGL context for rendering into an OpenGL window. * * The context must have been created with a compatible window. * * \param window the window to associate with the context * \param context the OpenGL context to associate with the window * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GL_CreateContext */ extern DECLSPEC int SDLCALL SDL_GL_MakeCurrent(SDL_Window * window, SDL_GLContext context); /** * Get the currently active OpenGL window. * * \returns the currently active OpenGL window on success or NULL on failure; * call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC SDL_Window* SDLCALL SDL_GL_GetCurrentWindow(void); /** * Get the currently active OpenGL context. * * \returns the currently active OpenGL context or NULL on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GL_MakeCurrent */ extern DECLSPEC SDL_GLContext SDLCALL SDL_GL_GetCurrentContext(void); /** * Get the size of a window's underlying drawable in pixels. * * This returns info useful for calling glViewport(). * * This may differ from SDL_GetWindowSize() if we're rendering to a high-DPI * drawable, i.e. the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a * platform with high-DPI support (Apple calls this "Retina"), and not * disabled by the `SDL_HINT_VIDEO_HIGHDPI_DISABLED` hint. * * \param window the window from which the drawable size should be queried * \param w a pointer to variable for storing the width in pixels, may be NULL * \param h a pointer to variable for storing the height in pixels, may be * NULL * * \since This function is available since SDL 2.0.1. * * \sa SDL_CreateWindow * \sa SDL_GetWindowSize */ extern DECLSPEC void SDLCALL SDL_GL_GetDrawableSize(SDL_Window * window, int *w, int *h); /** * Set the swap interval for the current OpenGL context. * * Some systems allow specifying -1 for the interval, to enable adaptive * vsync. Adaptive vsync works the same as vsync, but if you've already missed * the vertical retrace for a given frame, it swaps buffers immediately, which * might be less jarring for the user during occasional framerate drops. If an * application requests adaptive vsync and the system does not support it, * this function will fail and return -1. In such a case, you should probably * retry the call with 1 for the interval. * * Adaptive vsync is implemented for some glX drivers with * GLX_EXT_swap_control_tear, and for some Windows drivers with * WGL_EXT_swap_control_tear. * * Read more on the Khronos wiki: * https://www.khronos.org/opengl/wiki/Swap_Interval#Adaptive_Vsync * * \param interval 0 for immediate updates, 1 for updates synchronized with * the vertical retrace, -1 for adaptive vsync * \returns 0 on success or -1 if setting the swap interval is not supported; * call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GL_GetSwapInterval */ extern DECLSPEC int SDLCALL SDL_GL_SetSwapInterval(int interval); /** * Get the swap interval for the current OpenGL context. * * If the system can't determine the swap interval, or there isn't a valid * current context, this function will return 0 as a safe default. * * \returns 0 if there is no vertical retrace synchronization, 1 if the buffer * swap is synchronized with the vertical retrace, and -1 if late * swaps happen immediately instead of waiting for the next retrace; * call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_GL_SetSwapInterval */ extern DECLSPEC int SDLCALL SDL_GL_GetSwapInterval(void); /** * Update a window with OpenGL rendering. * * This is used with double-buffered OpenGL contexts, which are the default. * * On macOS, make sure you bind 0 to the draw framebuffer before swapping the * window, otherwise nothing will happen. If you aren't using * glBindFramebuffer(), this is the default and you won't have to do anything * extra. * * \param window the window to change * * \since This function is available since SDL 2.0.0. */ extern DECLSPEC void SDLCALL SDL_GL_SwapWindow(SDL_Window * window); /** * Delete an OpenGL context. * * \param context the OpenGL context to be deleted * * \since This function is available since SDL 2.0.0. * * \sa SDL_GL_CreateContext */ extern DECLSPEC void SDLCALL SDL_GL_DeleteContext(SDL_GLContext context); /* @} *//* OpenGL support functions */ /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_video_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: libraries/sdl2/SDL_vulkan.h ================================================ /* Simple DirectMedia Layer Copyright (C) 2017, Mark Callow This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL_vulkan.h * * Header file for functions to creating Vulkan surfaces on SDL windows. */ #ifndef SDL_vulkan_h_ #define SDL_vulkan_h_ #include "SDL_video.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /* Avoid including vulkan.h, don't define VkInstance if it's already included */ #ifdef VULKAN_H_ #define NO_SDL_VULKAN_TYPEDEFS #endif #ifndef NO_SDL_VULKAN_TYPEDEFS #define VK_DEFINE_HANDLE(object) typedef struct object##_T* object; #if defined(__LP64__) || defined(_WIN64) || defined(__x86_64__) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__) #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object; #else #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object; #endif VK_DEFINE_HANDLE(VkInstance) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR) #endif /* !NO_SDL_VULKAN_TYPEDEFS */ typedef VkInstance SDL_vulkanInstance; typedef VkSurfaceKHR SDL_vulkanSurface; /* for compatibility with Tizen */ /** * \name Vulkan support functions * * \note SDL_Vulkan_GetInstanceExtensions & SDL_Vulkan_CreateSurface API * is compatable with Tizen's implementation of Vulkan in SDL. */ /* @{ */ /** * Dynamically load the Vulkan loader library. * * This should be called after initializing the video driver, but before * creating any Vulkan windows. If no Vulkan loader library is loaded, the * default library will be loaded upon creation of the first Vulkan window. * * It is fairly common for Vulkan applications to link with libvulkan instead * of explicitly loading it at run time. This will work with SDL provided the * application links to a dynamic library and both it and SDL use the same * search path. * * If you specify a non-NULL `path`, an application should retrieve all of the * Vulkan functions it uses from the dynamic library using * SDL_Vulkan_GetVkGetInstanceProcAddr unless you can guarantee `path` points * to the same vulkan loader library the application linked to. * * On Apple devices, if `path` is NULL, SDL will attempt to find the * `vkGetInstanceProcAddr` address within all the Mach-O images of the current * process. This is because it is fairly common for Vulkan applications to * link with libvulkan (and historically MoltenVK was provided as a static * library). If it is not found, on macOS, SDL will attempt to load * `vulkan.framework/vulkan`, `libvulkan.1.dylib`, * `MoltenVK.framework/MoltenVK`, and `libMoltenVK.dylib`, in that order. On * iOS, SDL will attempt to load `libMoltenVK.dylib`. Applications using a * dynamic framework or .dylib must ensure it is included in its application * bundle. * * On non-Apple devices, application linking with a static libvulkan is not * supported. Either do not link to the Vulkan loader or link to a dynamic * library version. * * \param path The platform dependent Vulkan loader library name or NULL * \returns 0 on success or -1 if the library couldn't be loaded; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.6. * * \sa SDL_Vulkan_GetVkInstanceProcAddr * \sa SDL_Vulkan_UnloadLibrary */ extern DECLSPEC int SDLCALL SDL_Vulkan_LoadLibrary(const char *path); /** * Get the address of the `vkGetInstanceProcAddr` function. * * This should be called after either calling SDL_Vulkan_LoadLibrary() or * creating an SDL_Window with the `SDL_WINDOW_VULKAN` flag. * * \returns the function pointer for `vkGetInstanceProcAddr` or NULL on error. * * \since This function is available since SDL 2.0.6. */ extern DECLSPEC void *SDLCALL SDL_Vulkan_GetVkGetInstanceProcAddr(void); /** * Unload the Vulkan library previously loaded by SDL_Vulkan_LoadLibrary() * * \since This function is available since SDL 2.0.6. * * \sa SDL_Vulkan_LoadLibrary */ extern DECLSPEC void SDLCALL SDL_Vulkan_UnloadLibrary(void); /** * Get the names of the Vulkan instance extensions needed to create a surface * with SDL_Vulkan_CreateSurface. * * If `pNames` is NULL, then the number of required Vulkan instance extensions * is returned in `pCount`. Otherwise, `pCount` must point to a variable set * to the number of elements in the `pNames` array, and on return the variable * is overwritten with the number of names actually written to `pNames`. If * `pCount` is less than the number of required extensions, at most `pCount` * structures will be written. If `pCount` is smaller than the number of * required extensions, SDL_FALSE will be returned instead of SDL_TRUE, to * indicate that not all the required extensions were returned. * * The `window` parameter is currently needed to be valid as of SDL 2.0.8, * however, this parameter will likely be removed in future releases * * \param window A window for which the required Vulkan instance extensions * should be retrieved (will be deprecated in a future release) * \param pCount A pointer to an unsigned int corresponding to the number of * extensions to be returned * \param pNames NULL or a pointer to an array to be filled with required * Vulkan instance extensions * \returns SDL_TRUE on success, SDL_FALSE on error. * * \since This function is available since SDL 2.0.6. * * \sa SDL_Vulkan_CreateSurface */ extern DECLSPEC SDL_bool SDLCALL SDL_Vulkan_GetInstanceExtensions(SDL_Window *window, unsigned int *pCount, const char **pNames); /** * Create a Vulkan rendering surface for a window. * * The `window` must have been created with the `SDL_WINDOW_VULKAN` flag and * `instance` must have been created with extensions returned by * SDL_Vulkan_GetInstanceExtensions() enabled. * * \param window The window to which to attach the Vulkan surface * \param instance The Vulkan instance handle * \param surface A pointer to a VkSurfaceKHR handle to output the newly * created surface * \returns SDL_TRUE on success, SDL_FALSE on error. * * \since This function is available since SDL 2.0.6. * * \sa SDL_Vulkan_GetInstanceExtensions * \sa SDL_Vulkan_GetDrawableSize */ extern DECLSPEC SDL_bool SDLCALL SDL_Vulkan_CreateSurface(SDL_Window *window, VkInstance instance, VkSurfaceKHR* surface); /** * Get the size of the window's underlying drawable dimensions in pixels. * * This may differ from SDL_GetWindowSize() if we're rendering to a high-DPI * drawable, i.e. the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a * platform with high-DPI support (Apple calls this "Retina"), and not * disabled by the `SDL_HINT_VIDEO_HIGHDPI_DISABLED` hint. * * \param window an SDL_Window for which the size is to be queried * \param w Pointer to the variable to write the width to or NULL * \param h Pointer to the variable to write the height to or NULL * * \since This function is available since SDL 2.0.6. * * \sa SDL_GetWindowSize * \sa SDL_CreateWindow * \sa SDL_Vulkan_CreateSurface */ extern DECLSPEC void SDLCALL SDL_Vulkan_GetDrawableSize(SDL_Window * window, int *w, int *h); /* @} *//* Vulkan support functions */ /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_vulkan_h_ */ ================================================ FILE: libraries/sdl2/begin_code.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file begin_code.h * * This file sets things up for C dynamic library function definitions, * static inlined functions, and structures aligned at 4-byte alignment. * If you don't like ugly C preprocessor code, don't look at this file. :) */ /* This shouldn't be nested -- included it around code only. */ #ifdef SDL_begin_code_h #error Nested inclusion of begin_code.h #endif #define SDL_begin_code_h #ifndef SDL_DEPRECATED # if defined(__GNUC__) && (__GNUC__ >= 4) /* technically, this arrived in gcc 3.1, but oh well. */ # define SDL_DEPRECATED __attribute__((deprecated)) # elif defined(_MSC_VER) # define SDL_DEPRECATED __declspec(deprecated) # else # define SDL_DEPRECATED # endif #endif #ifndef SDL_UNUSED # ifdef __GNUC__ # define SDL_UNUSED __attribute__((unused)) # else # define SDL_UNUSED # endif #endif /* Some compilers use a special export keyword */ #ifndef DECLSPEC # if defined(__WIN32__) || defined(__WINRT__) || defined(__CYGWIN__) || defined(__GDK__) # ifdef DLL_EXPORT # define DECLSPEC __declspec(dllexport) # else # define DECLSPEC # endif # elif defined(__OS2__) # ifdef BUILD_SDL # define DECLSPEC __declspec(dllexport) # else # define DECLSPEC # endif # else # if defined(__GNUC__) && __GNUC__ >= 4 # define DECLSPEC __attribute__ ((visibility("default"))) # else # define DECLSPEC # endif # endif #endif /* By default SDL uses the C calling convention */ #ifndef SDLCALL #if (defined(__WIN32__) || defined(__WINRT__) || defined(__GDK__)) && !defined(__GNUC__) #define SDLCALL __cdecl #elif defined(__OS2__) || defined(__EMX__) #define SDLCALL _System # if defined (__GNUC__) && !defined(_System) # define _System /* for old EMX/GCC compat. */ # endif #else #define SDLCALL #endif #endif /* SDLCALL */ /* Removed DECLSPEC on Symbian OS because SDL cannot be a DLL in EPOC */ #ifdef __SYMBIAN32__ #undef DECLSPEC #define DECLSPEC #endif /* __SYMBIAN32__ */ /* Force structure packing at 4 byte alignment. This is necessary if the header is included in code which has structure packing set to an alternate value, say for loading structures from disk. The packing is reset to the previous value in close_code.h */ #if defined(_MSC_VER) || defined(__MWERKS__) || defined(__BORLANDC__) #ifdef _MSC_VER #pragma warning(disable: 4103) #endif #ifdef __clang__ #pragma clang diagnostic ignored "-Wpragma-pack" #endif #ifdef __BORLANDC__ #pragma nopackwarning #endif #ifdef _WIN64 /* Use 8-byte alignment on 64-bit architectures, so pointers are aligned */ #pragma pack(push,8) #else #pragma pack(push,4) #endif #endif /* Compiler needs structure packing set */ #ifndef SDL_INLINE #if defined(__GNUC__) #define SDL_INLINE __inline__ #elif defined(_MSC_VER) || defined(__BORLANDC__) || \ defined(__DMC__) || defined(__SC__) || \ defined(__WATCOMC__) || defined(__LCC__) || \ defined(__DECC) || defined(__CC_ARM) #define SDL_INLINE __inline #ifndef __inline__ #define __inline__ __inline #endif #else #define SDL_INLINE inline #ifndef __inline__ #define __inline__ inline #endif #endif #endif /* SDL_INLINE not defined */ #ifndef SDL_FORCE_INLINE #if defined(_MSC_VER) #define SDL_FORCE_INLINE __forceinline #elif ( (defined(__GNUC__) && (__GNUC__ >= 4)) || defined(__clang__) ) #define SDL_FORCE_INLINE __attribute__((always_inline)) static __inline__ #else #define SDL_FORCE_INLINE static SDL_INLINE #endif #endif /* SDL_FORCE_INLINE not defined */ #ifndef SDL_NORETURN #if defined(__GNUC__) #define SDL_NORETURN __attribute__((noreturn)) #elif defined(_MSC_VER) #define SDL_NORETURN __declspec(noreturn) #else #define SDL_NORETURN #endif #endif /* SDL_NORETURN not defined */ /* Apparently this is needed by several Windows compilers */ #if !defined(__MACH__) #ifndef NULL #ifdef __cplusplus #define NULL 0 #else #define NULL ((void *)0) #endif #endif /* NULL */ #endif /* ! Mac OS X - breaks precompiled headers */ #ifndef SDL_FALLTHROUGH #if (defined(__cplusplus) && __cplusplus >= 201703L) || \ (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202000L) #define SDL_FALLTHROUGH [[fallthrough]] #else #if defined(__has_attribute) #define SDL_HAS_FALLTHROUGH __has_attribute(__fallthrough__) #else #define SDL_HAS_FALLTHROUGH 0 #endif /* __has_attribute */ #if SDL_HAS_FALLTHROUGH && \ ((defined(__GNUC__) && __GNUC__ >= 7) || \ (defined(__clang_major__) && __clang_major__ >= 10)) #define SDL_FALLTHROUGH __attribute__((__fallthrough__)) #else #define SDL_FALLTHROUGH do {} while (0) /* fallthrough */ #endif /* SDL_HAS_FALLTHROUGH */ #undef SDL_HAS_FALLTHROUGH #endif /* C++17 or C2x */ #endif /* SDL_FALLTHROUGH not defined */ ================================================ FILE: libraries/sdl2/close_code.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2024 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file close_code.h * * This file reverses the effects of begin_code.h and should be included * after you finish any function and structure declarations in your headers */ #ifndef SDL_begin_code_h #error close_code.h included without matching begin_code.h #endif #undef SDL_begin_code_h /* Reset structure packing at previous byte alignment */ #if defined(_MSC_VER) || defined(__MWERKS__) || defined(__BORLANDC__) #ifdef __BORLANDC__ #pragma nopackwarning #endif #pragma pack(pop) #endif /* Compiler needs structure packing set */ ================================================ FILE: libraries/stb_image.h ================================================ /* stb_image - v2.26 - public domain image loader - http://nothings.org/stb no warranty implied; use at your own risk Do this: #define STB_IMAGE_IMPLEMENTATION before you include this file in *one* C or C++ file to create the implementation. // i.e. it should look like this: #include ... #include ... #include ... #define STB_IMAGE_IMPLEMENTATION #include "stb_image.h" You can #define STBI_ASSERT(x) before the #include to avoid using assert.h. And #define STBI_MALLOC, STBI_REALLOC, and STBI_FREE to avoid using malloc,realloc,free QUICK NOTES: Primarily of interest to game developers and other people who can avoid problematic images and only need the trivial interface JPEG baseline & progressive (12 bpc/arithmetic not supported, same as stock IJG lib) PNG 1/2/4/8/16-bit-per-channel TGA (not sure what subset, if a subset) BMP non-1bpp, non-RLE PSD (composited view only, no extra channels, 8/16 bit-per-channel) GIF (*comp always reports as 4-channel) HDR (radiance rgbE format) PIC (Softimage PIC) PNM (PPM and PGM binary only) Animated GIF still needs a proper API, but here's one way to do it: http://gist.github.com/urraka/685d9a6340b26b830d49 - decode from memory or through FILE (define STBI_NO_STDIO to remove code) - decode from arbitrary I/O callbacks - SIMD acceleration on x86/x64 (SSE2) and ARM (NEON) Full documentation under "DOCUMENTATION" below. LICENSE See end of file for license information. RECENT REVISION HISTORY: 2.26 (2020-07-13) many minor fixes 2.25 (2020-02-02) fix warnings 2.24 (2020-02-02) fix warnings; thread-local failure_reason and flip_vertically 2.23 (2019-08-11) fix clang static analysis warning 2.22 (2019-03-04) gif fixes, fix warnings 2.21 (2019-02-25) fix typo in comment 2.20 (2019-02-07) support utf8 filenames in Windows; fix warnings and platform ifdefs 2.19 (2018-02-11) fix warning 2.18 (2018-01-30) fix warnings 2.17 (2018-01-29) bugfix, 1-bit BMP, 16-bitness query, fix warnings 2.16 (2017-07-23) all functions have 16-bit variants; optimizations; bugfixes 2.15 (2017-03-18) fix png-1,2,4; all Imagenet JPGs; no runtime SSE detection on GCC 2.14 (2017-03-03) remove deprecated STBI_JPEG_OLD; fixes for Imagenet JPGs 2.13 (2016-12-04) experimental 16-bit API, only for PNG so far; fixes 2.12 (2016-04-02) fix typo in 2.11 PSD fix that caused crashes 2.11 (2016-04-02) 16-bit PNGS; enable SSE2 in non-gcc x64 RGB-format JPEG; remove white matting in PSD; allocate large structures on the stack; correct channel count for PNG & BMP 2.10 (2016-01-22) avoid warning introduced in 2.09 2.09 (2016-01-16) 16-bit TGA; comments in PNM files; STBI_REALLOC_SIZED See end of file for full revision history. ============================ Contributors ========================= Image formats Extensions, features Sean Barrett (jpeg, png, bmp) Jetro Lauha (stbi_info) Nicolas Schulz (hdr, psd) Martin "SpartanJ" Golini (stbi_info) Jonathan Dummer (tga) James "moose2000" Brown (iPhone PNG) Jean-Marc Lienher (gif) Ben "Disch" Wenger (io callbacks) Tom Seddon (pic) Omar Cornut (1/2/4-bit PNG) Thatcher Ulrich (psd) Nicolas Guillemot (vertical flip) Ken Miller (pgm, ppm) Richard Mitton (16-bit PSD) github:urraka (animated gif) Junggon Kim (PNM comments) Christopher Forseth (animated gif) Daniel Gibson (16-bit TGA) socks-the-fox (16-bit PNG) Jeremy Sawicki (handle all ImageNet JPGs) Optimizations & bugfixes Mikhail Morozov (1-bit BMP) Fabian "ryg" Giesen Anael Seghezzi (is-16-bit query) Arseny Kapoulkine John-Mark Allen Carmelo J Fdez-Aguera Bug & warning fixes Marc LeBlanc David Woo Guillaume George Martins Mozeiko Christpher Lloyd Jerry Jansson Joseph Thomson Blazej Dariusz Roszkowski Phil Jordan Dave Moore Roy Eltham Hayaki Saito Nathan Reed Won Chun Luke Graham Johan Duparc Nick Verigakis the Horde3D community Thomas Ruf Ronny Chevalier github:rlyeh Janez Zemva John Bartholomew Michal Cichon github:romigrou Jonathan Blow Ken Hamada Tero Hanninen github:svdijk Laurent Gomila Cort Stratton github:snagar Aruelien Pocheville Sergio Gonzalez Thibault Reuille github:Zelex Cass Everitt Ryamond Barbiero github:grim210 Paul Du Bois Engin Manap Aldo Culquicondor github:sammyhw Philipp Wiesemann Dale Weiler Oriol Ferrer Mesia github:phprus Josh Tobin Matthew Gregan github:poppolopoppo Julian Raschke Gregory Mullen Christian Floisand github:darealshinji Baldur Karlsson Kevin Schmidt JR Smith github:Michaelangel007 Brad Weinberger Matvey Cherevko [reserved] Luca Sas Alexander Veselov Zack Middleton [reserved] Ryan C. Gordon [reserved] [reserved] DO NOT ADD YOUR NAME HERE To add your name to the credits, pick a random blank space in the middle and fill it. 80% of merge conflicts on stb PRs are due to people adding their name at the end of the credits. */ #ifndef STBI_INCLUDE_STB_IMAGE_H #define STBI_INCLUDE_STB_IMAGE_H // DOCUMENTATION // // Limitations: // - no 12-bit-per-channel JPEG // - no JPEGs with arithmetic coding // - GIF always returns *comp=4 // // Basic usage (see HDR discussion below for HDR usage): // int x,y,n; // unsigned char *data = stbi_load(filename, &x, &y, &n, 0); // // ... process data if not NULL ... // // ... x = width, y = height, n = # 8-bit components per pixel ... // // ... replace '0' with '1'..'4' to force that many components per pixel // // ... but 'n' will always be the number that it would have been if you said 0 // stbi_image_free(data) // // Standard parameters: // int *x -- outputs image width in pixels // int *y -- outputs image height in pixels // int *channels_in_file -- outputs # of image components in image file // int desired_channels -- if non-zero, # of image components requested in result // // The return value from an image loader is an 'unsigned char *' which points // to the pixel data, or NULL on an allocation failure or if the image is // corrupt or invalid. The pixel data consists of *y scanlines of *x pixels, // with each pixel consisting of N interleaved 8-bit components; the first // pixel pointed to is top-left-most in the image. There is no padding between // image scanlines or between pixels, regardless of format. The number of // components N is 'desired_channels' if desired_channels is non-zero, or // *channels_in_file otherwise. If desired_channels is non-zero, // *channels_in_file has the number of components that _would_ have been // output otherwise. E.g. if you set desired_channels to 4, you will always // get RGBA output, but you can check *channels_in_file to see if it's trivially // opaque because e.g. there were only 3 channels in the source image. // // An output image with N components has the following components interleaved // in this order in each pixel: // // N=#comp components // 1 grey // 2 grey, alpha // 3 red, green, blue // 4 red, green, blue, alpha // // If image loading fails for any reason, the return value will be NULL, // and *x, *y, *channels_in_file will be unchanged. The function // stbi_failure_reason() can be queried for an extremely brief, end-user // unfriendly explanation of why the load failed. Define STBI_NO_FAILURE_STRINGS // to avoid compiling these strings at all, and STBI_FAILURE_USERMSG to get slightly // more user-friendly ones. // // Paletted PNG, BMP, GIF, and PIC images are automatically depalettized. // // =========================================================================== // // UNICODE: // // If compiling for Windows and you wish to use Unicode filenames, compile // with // #define STBI_WINDOWS_UTF8 // and pass utf8-encoded filenames. Call stbi_convert_wchar_to_utf8 to convert // Windows wchar_t filenames to utf8. // // =========================================================================== // // Philosophy // // stb libraries are designed with the following priorities: // // 1. easy to use // 2. easy to maintain // 3. good performance // // Sometimes I let "good performance" creep up in priority over "easy to maintain", // and for best performance I may provide less-easy-to-use APIs that give higher // performance, in addition to the easy-to-use ones. Nevertheless, it's important // to keep in mind that from the standpoint of you, a client of this library, // all you care about is #1 and #3, and stb libraries DO NOT emphasize #3 above all. // // Some secondary priorities arise directly from the first two, some of which // provide more explicit reasons why performance can't be emphasized. // // - Portable ("ease of use") // - Small source code footprint ("easy to maintain") // - No dependencies ("ease of use") // // =========================================================================== // // I/O callbacks // // I/O callbacks allow you to read from arbitrary sources, like packaged // files or some other source. Data read from callbacks are processed // through a small internal buffer (currently 128 bytes) to try to reduce // overhead. // // The three functions you must define are "read" (reads some bytes of data), // "skip" (skips some bytes of data), "eof" (reports if the stream is at the end). // // =========================================================================== // // SIMD support // // The JPEG decoder will try to automatically use SIMD kernels on x86 when // supported by the compiler. For ARM Neon support, you must explicitly // request it. // // (The old do-it-yourself SIMD API is no longer supported in the current // code.) // // On x86, SSE2 will automatically be used when available based on a run-time // test; if not, the generic C versions are used as a fall-back. On ARM targets, // the typical path is to have separate builds for NEON and non-NEON devices // (at least this is true for iOS and Android). Therefore, the NEON support is // toggled by a build flag: define STBI_NEON to get NEON loops. // // If for some reason you do not want to use any of SIMD code, or if // you have issues compiling it, you can disable it entirely by // defining STBI_NO_SIMD. // // =========================================================================== // // HDR image support (disable by defining STBI_NO_HDR) // // stb_image supports loading HDR images in general, and currently the Radiance // .HDR file format specifically. You can still load any file through the existing // interface; if you attempt to load an HDR file, it will be automatically remapped // to LDR, assuming gamma 2.2 and an arbitrary scale factor defaulting to 1; // both of these constants can be reconfigured through this interface: // // stbi_hdr_to_ldr_gamma(2.2f); // stbi_hdr_to_ldr_scale(1.0f); // // (note, do not use _inverse_ constants; stbi_image will invert them // appropriately). // // Additionally, there is a new, parallel interface for loading files as // (linear) floats to preserve the full dynamic range: // // float *data = stbi_loadf(filename, &x, &y, &n, 0); // // If you load LDR images through this interface, those images will // be promoted to floating point values, run through the inverse of // constants corresponding to the above: // // stbi_ldr_to_hdr_scale(1.0f); // stbi_ldr_to_hdr_gamma(2.2f); // // Finally, given a filename (or an open file or memory block--see header // file for details) containing image data, you can query for the "most // appropriate" interface to use (that is, whether the image is HDR or // not), using: // // stbi_is_hdr(char *filename); // // =========================================================================== // // iPhone PNG support: // // By default we convert iphone-formatted PNGs back to RGB, even though // they are internally encoded differently. You can disable this conversion // by calling stbi_convert_iphone_png_to_rgb(0), in which case // you will always just get the native iphone "format" through (which // is BGR stored in RGB). // // Call stbi_set_unpremultiply_on_load(1) as well to force a divide per // pixel to remove any premultiplied alpha *only* if the image file explicitly // says there's premultiplied data (currently only happens in iPhone images, // and only if iPhone convert-to-rgb processing is on). // // =========================================================================== // // ADDITIONAL CONFIGURATION // // - You can suppress implementation of any of the decoders to reduce // your code footprint by #defining one or more of the following // symbols before creating the implementation. // // STBI_NO_JPEG // STBI_NO_PNG // STBI_NO_BMP // STBI_NO_PSD // STBI_NO_TGA // STBI_NO_GIF // STBI_NO_HDR // STBI_NO_PIC // STBI_NO_PNM (.ppm and .pgm) // // - You can request *only* certain decoders and suppress all other ones // (this will be more forward-compatible, as addition of new decoders // doesn't require you to disable them explicitly): // // STBI_ONLY_JPEG // STBI_ONLY_PNG // STBI_ONLY_BMP // STBI_ONLY_PSD // STBI_ONLY_TGA // STBI_ONLY_GIF // STBI_ONLY_HDR // STBI_ONLY_PIC // STBI_ONLY_PNM (.ppm and .pgm) // // - If you use STBI_NO_PNG (or _ONLY_ without PNG), and you still // want the zlib decoder to be available, #define STBI_SUPPORT_ZLIB // // - If you define STBI_MAX_DIMENSIONS, stb_image will reject images greater // than that size (in either width or height) without further processing. // This is to let programs in the wild set an upper bound to prevent // denial-of-service attacks on untrusted data, as one could generate a // valid image of gigantic dimensions and force stb_image to allocate a // huge block of memory and spend disproportionate time decoding it. By // default this is set to (1 << 24), which is 16777216, but that's still // very big. #ifndef STBI_NO_STDIO #include #endif // STBI_NO_STDIO #define STBI_VERSION 1 enum { STBI_default = 0, // only used for desired_channels STBI_grey = 1, STBI_grey_alpha = 2, STBI_rgb = 3, STBI_rgb_alpha = 4 }; #include typedef unsigned char stbi_uc; typedef unsigned short stbi_us; #ifdef __cplusplus extern "C" { #endif #ifndef STBIDEF #ifdef STB_IMAGE_STATIC #define STBIDEF static #else #define STBIDEF extern #endif #endif ////////////////////////////////////////////////////////////////////////////// // // PRIMARY API - works on images of any type // // // load image by filename, open file, or memory buffer // typedef struct { int (*read) (void *user,char *data,int size); // fill 'data' with 'size' bytes. return number of bytes actually read void (*skip) (void *user,int n); // skip the next 'n' bytes, or 'unget' the last -n bytes if negative int (*eof) (void *user); // returns nonzero if we are at end of file/data } stbi_io_callbacks; //////////////////////////////////// // // 8-bits-per-channel interface // STBIDEF stbi_uc *stbi_load_from_memory (stbi_uc const *buffer, int len , int *x, int *y, int *channels_in_file, int desired_channels); STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk , void *user, int *x, int *y, int *channels_in_file, int desired_channels); #ifndef STBI_NO_STDIO STBIDEF stbi_uc *stbi_load (char const *filename, int *x, int *y, int *channels_in_file, int desired_channels); STBIDEF stbi_uc *stbi_load_from_file (FILE *f, int *x, int *y, int *channels_in_file, int desired_channels); // for stbi_load_from_file, file pointer is left pointing immediately after image #endif #ifndef STBI_NO_GIF STBIDEF stbi_uc *stbi_load_gif_from_memory(stbi_uc const *buffer, int len, int **delays, int *x, int *y, int *z, int *comp, int req_comp); #endif #ifdef STBI_WINDOWS_UTF8 STBIDEF int stbi_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input); #endif //////////////////////////////////// // // 16-bits-per-channel interface // STBIDEF stbi_us *stbi_load_16_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *channels_in_file, int desired_channels); STBIDEF stbi_us *stbi_load_16_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *channels_in_file, int desired_channels); #ifndef STBI_NO_STDIO STBIDEF stbi_us *stbi_load_16 (char const *filename, int *x, int *y, int *channels_in_file, int desired_channels); STBIDEF stbi_us *stbi_load_from_file_16(FILE *f, int *x, int *y, int *channels_in_file, int desired_channels); #endif //////////////////////////////////// // // float-per-channel interface // #ifndef STBI_NO_LINEAR STBIDEF float *stbi_loadf_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *channels_in_file, int desired_channels); STBIDEF float *stbi_loadf_from_callbacks (stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *channels_in_file, int desired_channels); #ifndef STBI_NO_STDIO STBIDEF float *stbi_loadf (char const *filename, int *x, int *y, int *channels_in_file, int desired_channels); STBIDEF float *stbi_loadf_from_file (FILE *f, int *x, int *y, int *channels_in_file, int desired_channels); #endif #endif #ifndef STBI_NO_HDR STBIDEF void stbi_hdr_to_ldr_gamma(float gamma); STBIDEF void stbi_hdr_to_ldr_scale(float scale); #endif // STBI_NO_HDR #ifndef STBI_NO_LINEAR STBIDEF void stbi_ldr_to_hdr_gamma(float gamma); STBIDEF void stbi_ldr_to_hdr_scale(float scale); #endif // STBI_NO_LINEAR // stbi_is_hdr is always defined, but always returns false if STBI_NO_HDR STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user); STBIDEF int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len); #ifndef STBI_NO_STDIO STBIDEF int stbi_is_hdr (char const *filename); STBIDEF int stbi_is_hdr_from_file(FILE *f); #endif // STBI_NO_STDIO // get a VERY brief reason for failure // on most compilers (and ALL modern mainstream compilers) this is threadsafe STBIDEF const char *stbi_failure_reason (void); // free the loaded image -- this is just free() STBIDEF void stbi_image_free (void *retval_from_stbi_load); // get image dimensions & components without fully decoding STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp); STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp); STBIDEF int stbi_is_16_bit_from_memory(stbi_uc const *buffer, int len); STBIDEF int stbi_is_16_bit_from_callbacks(stbi_io_callbacks const *clbk, void *user); #ifndef STBI_NO_STDIO STBIDEF int stbi_info (char const *filename, int *x, int *y, int *comp); STBIDEF int stbi_info_from_file (FILE *f, int *x, int *y, int *comp); STBIDEF int stbi_is_16_bit (char const *filename); STBIDEF int stbi_is_16_bit_from_file(FILE *f); #endif // for image formats that explicitly notate that they have premultiplied alpha, // we just return the colors as stored in the file. set this flag to force // unpremultiplication. results are undefined if the unpremultiply overflow. STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply); // indicate whether we should process iphone images back to canonical format, // or just pass them through "as-is" STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert); // flip the image vertically, so the first pixel in the output array is the bottom left STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip); // as above, but only applies to images loaded on the thread that calls the function // this function is only available if your compiler supports thread-local variables; // calling it will fail to link if your compiler doesn't STBIDEF void stbi_set_flip_vertically_on_load_thread(int flag_true_if_should_flip); // ZLIB client - used by PNG, available for other purposes STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen); STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header); STBIDEF char *stbi_zlib_decode_malloc(const char *buffer, int len, int *outlen); STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); STBIDEF char *stbi_zlib_decode_noheader_malloc(const char *buffer, int len, int *outlen); STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); #ifdef __cplusplus } #endif // // //// end header file ///////////////////////////////////////////////////// #endif // STBI_INCLUDE_STB_IMAGE_H #ifdef STB_IMAGE_IMPLEMENTATION #if defined(STBI_ONLY_JPEG) || defined(STBI_ONLY_PNG) || defined(STBI_ONLY_BMP) \ || defined(STBI_ONLY_TGA) || defined(STBI_ONLY_GIF) || defined(STBI_ONLY_PSD) \ || defined(STBI_ONLY_HDR) || defined(STBI_ONLY_PIC) || defined(STBI_ONLY_PNM) \ || defined(STBI_ONLY_ZLIB) #ifndef STBI_ONLY_JPEG #define STBI_NO_JPEG #endif #ifndef STBI_ONLY_PNG #define STBI_NO_PNG #endif #ifndef STBI_ONLY_BMP #define STBI_NO_BMP #endif #ifndef STBI_ONLY_PSD #define STBI_NO_PSD #endif #ifndef STBI_ONLY_TGA #define STBI_NO_TGA #endif #ifndef STBI_ONLY_GIF #define STBI_NO_GIF #endif #ifndef STBI_ONLY_HDR #define STBI_NO_HDR #endif #ifndef STBI_ONLY_PIC #define STBI_NO_PIC #endif #ifndef STBI_ONLY_PNM #define STBI_NO_PNM #endif #endif #if defined(STBI_NO_PNG) && !defined(STBI_SUPPORT_ZLIB) && !defined(STBI_NO_ZLIB) #define STBI_NO_ZLIB #endif #include #include // ptrdiff_t on osx #include #include #include #if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) #include // ldexp, pow #endif #ifndef STBI_NO_STDIO #include #endif #ifndef STBI_ASSERT #include #define STBI_ASSERT(x) assert(x) #endif #ifdef __cplusplus #define STBI_EXTERN extern "C" #else #define STBI_EXTERN extern #endif #ifndef _MSC_VER #ifdef __cplusplus #define stbi_inline inline #else #define stbi_inline #endif #else #define stbi_inline __forceinline #endif #ifndef STBI_NO_THREAD_LOCALS #if defined(__cplusplus) && __cplusplus >= 201103L #define STBI_THREAD_LOCAL thread_local #elif defined(__GNUC__) && __GNUC__ < 5 #define STBI_THREAD_LOCAL __thread #elif defined(_MSC_VER) #define STBI_THREAD_LOCAL __declspec(thread) #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L && !defined(__STDC_NO_THREADS__) #define STBI_THREAD_LOCAL _Thread_local #endif #ifndef STBI_THREAD_LOCAL #if defined(__GNUC__) #define STBI_THREAD_LOCAL __thread #endif #endif #endif #ifdef _MSC_VER typedef unsigned short stbi__uint16; typedef signed short stbi__int16; typedef unsigned int stbi__uint32; typedef signed int stbi__int32; #else #include typedef uint16_t stbi__uint16; typedef int16_t stbi__int16; typedef uint32_t stbi__uint32; typedef int32_t stbi__int32; #endif // should produce compiler error if size is wrong typedef unsigned char validate_uint32[sizeof(stbi__uint32)==4 ? 1 : -1]; #ifdef _MSC_VER #define STBI_NOTUSED(v) (void)(v) #else #define STBI_NOTUSED(v) (void)sizeof(v) #endif #ifdef _MSC_VER #define STBI_HAS_LROTL #endif #ifdef STBI_HAS_LROTL #define stbi_lrot(x,y) _lrotl(x,y) #else #define stbi_lrot(x,y) (((x) << (y)) | ((x) >> (32 - (y)))) #endif #if defined(STBI_MALLOC) && defined(STBI_FREE) && (defined(STBI_REALLOC) || defined(STBI_REALLOC_SIZED)) // ok #elif !defined(STBI_MALLOC) && !defined(STBI_FREE) && !defined(STBI_REALLOC) && !defined(STBI_REALLOC_SIZED) // ok #else #error "Must define all or none of STBI_MALLOC, STBI_FREE, and STBI_REALLOC (or STBI_REALLOC_SIZED)." #endif #ifndef STBI_MALLOC #define STBI_MALLOC(sz) malloc(sz) #define STBI_REALLOC(p,newsz) realloc(p,newsz) #define STBI_FREE(p) free(p) #endif #ifndef STBI_REALLOC_SIZED #define STBI_REALLOC_SIZED(p,oldsz,newsz) STBI_REALLOC(p,newsz) #endif // x86/x64 detection #if defined(__x86_64__) || defined(_M_X64) #define STBI__X64_TARGET #elif defined(__i386) || defined(_M_IX86) #define STBI__X86_TARGET #endif #if defined(__GNUC__) && defined(STBI__X86_TARGET) && !defined(__SSE2__) && !defined(STBI_NO_SIMD) // gcc doesn't support sse2 intrinsics unless you compile with -msse2, // which in turn means it gets to use SSE2 everywhere. This is unfortunate, // but previous attempts to provide the SSE2 functions with runtime // detection caused numerous issues. The way architecture extensions are // exposed in GCC/Clang is, sadly, not really suited for one-file libs. // New behavior: if compiled with -msse2, we use SSE2 without any // detection; if not, we don't use it at all. #define STBI_NO_SIMD #endif #if defined(__MINGW32__) && defined(STBI__X86_TARGET) && !defined(STBI_MINGW_ENABLE_SSE2) && !defined(STBI_NO_SIMD) // Note that __MINGW32__ doesn't actually mean 32-bit, so we have to avoid STBI__X64_TARGET // // 32-bit MinGW wants ESP to be 16-byte aligned, but this is not in the // Windows ABI and VC++ as well as Windows DLLs don't maintain that invariant. // As a result, enabling SSE2 on 32-bit MinGW is dangerous when not // simultaneously enabling "-mstackrealign". // // See https://github.com/nothings/stb/issues/81 for more information. // // So default to no SSE2 on 32-bit MinGW. If you've read this far and added // -mstackrealign to your build settings, feel free to #define STBI_MINGW_ENABLE_SSE2. #define STBI_NO_SIMD #endif #if !defined(STBI_NO_SIMD) && (defined(STBI__X86_TARGET) || defined(STBI__X64_TARGET)) #define STBI_SSE2 #include #ifdef _MSC_VER #if _MSC_VER >= 1400 // not VC6 #include // __cpuid static int stbi__cpuid3(void) { int info[4]; __cpuid(info,1); return info[3]; } #else static int stbi__cpuid3(void) { int res; __asm { mov eax,1 cpuid mov res,edx } return res; } #endif #define STBI_SIMD_ALIGN(type, name) __declspec(align(16)) type name #if !defined(STBI_NO_JPEG) && defined(STBI_SSE2) static int stbi__sse2_available(void) { int info3 = stbi__cpuid3(); return ((info3 >> 26) & 1) != 0; } #endif #else // assume GCC-style if not VC++ #define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16))) #if !defined(STBI_NO_JPEG) && defined(STBI_SSE2) static int stbi__sse2_available(void) { // If we're even attempting to compile this on GCC/Clang, that means // -msse2 is on, which means the compiler is allowed to use SSE2 // instructions at will, and so are we. return 1; } #endif #endif #endif // ARM NEON #if defined(STBI_NO_SIMD) && defined(STBI_NEON) #undef STBI_NEON #endif #ifdef STBI_NEON #include // assume GCC or Clang on ARM targets #define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16))) #endif #ifndef STBI_SIMD_ALIGN #define STBI_SIMD_ALIGN(type, name) type name #endif #ifndef STBI_MAX_DIMENSIONS #define STBI_MAX_DIMENSIONS (1 << 24) #endif /////////////////////////////////////////////// // // stbi__context struct and start_xxx functions // stbi__context structure is our basic context used by all images, so it // contains all the IO context, plus some basic image information typedef struct { stbi__uint32 img_x, img_y; int img_n, img_out_n; stbi_io_callbacks io; void *io_user_data; int read_from_callbacks; int buflen; stbi_uc buffer_start[128]; int callback_already_read; stbi_uc *img_buffer, *img_buffer_end; stbi_uc *img_buffer_original, *img_buffer_original_end; } stbi__context; static void stbi__refill_buffer(stbi__context *s); // initialize a memory-decode context static void stbi__start_mem(stbi__context *s, stbi_uc const *buffer, int len) { s->io.read = NULL; s->read_from_callbacks = 0; s->callback_already_read = 0; s->img_buffer = s->img_buffer_original = (stbi_uc *) buffer; s->img_buffer_end = s->img_buffer_original_end = (stbi_uc *) buffer+len; } // initialize a callback-based context static void stbi__start_callbacks(stbi__context *s, stbi_io_callbacks *c, void *user) { s->io = *c; s->io_user_data = user; s->buflen = sizeof(s->buffer_start); s->read_from_callbacks = 1; s->callback_already_read = 0; s->img_buffer = s->img_buffer_original = s->buffer_start; stbi__refill_buffer(s); s->img_buffer_original_end = s->img_buffer_end; } #ifndef STBI_NO_STDIO static int stbi__stdio_read(void *user, char *data, int size) { return (int) fread(data,1,size,(FILE*) user); } static void stbi__stdio_skip(void *user, int n) { int ch; fseek((FILE*) user, n, SEEK_CUR); ch = fgetc((FILE*) user); /* have to read a byte to reset feof()'s flag */ if (ch != EOF) { ungetc(ch, (FILE *) user); /* push byte back onto stream if valid. */ } } static int stbi__stdio_eof(void *user) { return feof((FILE*) user) || ferror((FILE *) user); } static stbi_io_callbacks stbi__stdio_callbacks = { stbi__stdio_read, stbi__stdio_skip, stbi__stdio_eof, }; static void stbi__start_file(stbi__context *s, FILE *f) { stbi__start_callbacks(s, &stbi__stdio_callbacks, (void *) f); } //static void stop_file(stbi__context *s) { } #endif // !STBI_NO_STDIO static void stbi__rewind(stbi__context *s) { // conceptually rewind SHOULD rewind to the beginning of the stream, // but we just rewind to the beginning of the initial buffer, because // we only use it after doing 'test', which only ever looks at at most 92 bytes s->img_buffer = s->img_buffer_original; s->img_buffer_end = s->img_buffer_original_end; } enum { STBI_ORDER_RGB, STBI_ORDER_BGR }; typedef struct { int bits_per_channel; int num_channels; int channel_order; } stbi__result_info; #ifndef STBI_NO_JPEG static int stbi__jpeg_test(stbi__context *s); static void *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp); #endif #ifndef STBI_NO_PNG static int stbi__png_test(stbi__context *s); static void *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp); static int stbi__png_is16(stbi__context *s); #endif #ifndef STBI_NO_BMP static int stbi__bmp_test(stbi__context *s); static void *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp); #endif #ifndef STBI_NO_TGA static int stbi__tga_test(stbi__context *s); static void *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp); #endif #ifndef STBI_NO_PSD static int stbi__psd_test(stbi__context *s); static void *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc); static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp); static int stbi__psd_is16(stbi__context *s); #endif #ifndef STBI_NO_HDR static int stbi__hdr_test(stbi__context *s); static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp); #endif #ifndef STBI_NO_PIC static int stbi__pic_test(stbi__context *s); static void *stbi__pic_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp); #endif #ifndef STBI_NO_GIF static int stbi__gif_test(stbi__context *s); static void *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); static void *stbi__load_gif_main(stbi__context *s, int **delays, int *x, int *y, int *z, int *comp, int req_comp); static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp); #endif #ifndef STBI_NO_PNM static int stbi__pnm_test(stbi__context *s); static void *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp); #endif static #ifdef STBI_THREAD_LOCAL STBI_THREAD_LOCAL #endif const char *stbi__g_failure_reason; STBIDEF const char *stbi_failure_reason(void) { return stbi__g_failure_reason; } #ifndef STBI_NO_FAILURE_STRINGS static int stbi__err(const char *str) { stbi__g_failure_reason = str; return 0; } #endif static void *stbi__malloc(size_t size) { return STBI_MALLOC(size); } // stb_image uses ints pervasively, including for offset calculations. // therefore the largest decoded image size we can support with the // current code, even on 64-bit targets, is INT_MAX. this is not a // significant limitation for the intended use case. // // we do, however, need to make sure our size calculations don't // overflow. hence a few helper functions for size calculations that // multiply integers together, making sure that they're non-negative // and no overflow occurs. // return 1 if the sum is valid, 0 on overflow. // negative terms are considered invalid. static int stbi__addsizes_valid(int a, int b) { if (b < 0) return 0; // now 0 <= b <= INT_MAX, hence also // 0 <= INT_MAX - b <= INTMAX. // And "a + b <= INT_MAX" (which might overflow) is the // same as a <= INT_MAX - b (no overflow) return a <= INT_MAX - b; } // returns 1 if the product is valid, 0 on overflow. // negative factors are considered invalid. static int stbi__mul2sizes_valid(int a, int b) { if (a < 0 || b < 0) return 0; if (b == 0) return 1; // mul-by-0 is always safe // portable way to check for no overflows in a*b return a <= INT_MAX/b; } #if !defined(STBI_NO_JPEG) || !defined(STBI_NO_PNG) || !defined(STBI_NO_TGA) || !defined(STBI_NO_HDR) // returns 1 if "a*b + add" has no negative terms/factors and doesn't overflow static int stbi__mad2sizes_valid(int a, int b, int add) { return stbi__mul2sizes_valid(a, b) && stbi__addsizes_valid(a*b, add); } #endif // returns 1 if "a*b*c + add" has no negative terms/factors and doesn't overflow static int stbi__mad3sizes_valid(int a, int b, int c, int add) { return stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a*b, c) && stbi__addsizes_valid(a*b*c, add); } // returns 1 if "a*b*c*d + add" has no negative terms/factors and doesn't overflow #if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) static int stbi__mad4sizes_valid(int a, int b, int c, int d, int add) { return stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a*b, c) && stbi__mul2sizes_valid(a*b*c, d) && stbi__addsizes_valid(a*b*c*d, add); } #endif #if !defined(STBI_NO_JPEG) || !defined(STBI_NO_PNG) || !defined(STBI_NO_TGA) || !defined(STBI_NO_HDR) // mallocs with size overflow checking static void *stbi__malloc_mad2(int a, int b, int add) { if (!stbi__mad2sizes_valid(a, b, add)) return NULL; return stbi__malloc(a*b + add); } #endif static void *stbi__malloc_mad3(int a, int b, int c, int add) { if (!stbi__mad3sizes_valid(a, b, c, add)) return NULL; return stbi__malloc(a*b*c + add); } #if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) static void *stbi__malloc_mad4(int a, int b, int c, int d, int add) { if (!stbi__mad4sizes_valid(a, b, c, d, add)) return NULL; return stbi__malloc(a*b*c*d + add); } #endif // stbi__err - error // stbi__errpf - error returning pointer to float // stbi__errpuc - error returning pointer to unsigned char #ifdef STBI_NO_FAILURE_STRINGS #define stbi__err(x,y) 0 #elif defined(STBI_FAILURE_USERMSG) #define stbi__err(x,y) stbi__err(y) #else #define stbi__err(x,y) stbi__err(x) #endif #define stbi__errpf(x,y) ((float *)(size_t) (stbi__err(x,y)?NULL:NULL)) #define stbi__errpuc(x,y) ((unsigned char *)(size_t) (stbi__err(x,y)?NULL:NULL)) STBIDEF void stbi_image_free(void *retval_from_stbi_load) { STBI_FREE(retval_from_stbi_load); } #ifndef STBI_NO_LINEAR static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp); #endif #ifndef STBI_NO_HDR static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp); #endif static int stbi__vertically_flip_on_load_global = 0; STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip) { stbi__vertically_flip_on_load_global = flag_true_if_should_flip; } #ifndef STBI_THREAD_LOCAL #define stbi__vertically_flip_on_load stbi__vertically_flip_on_load_global #else static STBI_THREAD_LOCAL int stbi__vertically_flip_on_load_local, stbi__vertically_flip_on_load_set; STBIDEF void stbi_set_flip_vertically_on_load_thread(int flag_true_if_should_flip) { stbi__vertically_flip_on_load_local = flag_true_if_should_flip; stbi__vertically_flip_on_load_set = 1; } #define stbi__vertically_flip_on_load (stbi__vertically_flip_on_load_set \ ? stbi__vertically_flip_on_load_local \ : stbi__vertically_flip_on_load_global) #endif // STBI_THREAD_LOCAL static void *stbi__load_main(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc) { memset(ri, 0, sizeof(*ri)); // make sure it's initialized if we add new fields ri->bits_per_channel = 8; // default is 8 so most paths don't have to be changed ri->channel_order = STBI_ORDER_RGB; // all current input & output are this, but this is here so we can add BGR order ri->num_channels = 0; #ifndef STBI_NO_JPEG if (stbi__jpeg_test(s)) return stbi__jpeg_load(s,x,y,comp,req_comp, ri); #endif #ifndef STBI_NO_PNG if (stbi__png_test(s)) return stbi__png_load(s,x,y,comp,req_comp, ri); #endif #ifndef STBI_NO_BMP if (stbi__bmp_test(s)) return stbi__bmp_load(s,x,y,comp,req_comp, ri); #endif #ifndef STBI_NO_GIF if (stbi__gif_test(s)) return stbi__gif_load(s,x,y,comp,req_comp, ri); #endif #ifndef STBI_NO_PSD if (stbi__psd_test(s)) return stbi__psd_load(s,x,y,comp,req_comp, ri, bpc); #else STBI_NOTUSED(bpc); #endif #ifndef STBI_NO_PIC if (stbi__pic_test(s)) return stbi__pic_load(s,x,y,comp,req_comp, ri); #endif #ifndef STBI_NO_PNM if (stbi__pnm_test(s)) return stbi__pnm_load(s,x,y,comp,req_comp, ri); #endif #ifndef STBI_NO_HDR if (stbi__hdr_test(s)) { float *hdr = stbi__hdr_load(s, x,y,comp,req_comp, ri); return stbi__hdr_to_ldr(hdr, *x, *y, req_comp ? req_comp : *comp); } #endif #ifndef STBI_NO_TGA // test tga last because it's a crappy test! if (stbi__tga_test(s)) return stbi__tga_load(s,x,y,comp,req_comp, ri); #endif return stbi__errpuc("unknown image type", "Image not of any known type, or corrupt"); } static stbi_uc *stbi__convert_16_to_8(stbi__uint16 *orig, int w, int h, int channels) { int i; int img_len = w * h * channels; stbi_uc *reduced; reduced = (stbi_uc *) stbi__malloc(img_len); if (reduced == NULL) return stbi__errpuc("outofmem", "Out of memory"); for (i = 0; i < img_len; ++i) reduced[i] = (stbi_uc)((orig[i] >> 8) & 0xFF); // top half of each byte is sufficient approx of 16->8 bit scaling STBI_FREE(orig); return reduced; } static stbi__uint16 *stbi__convert_8_to_16(stbi_uc *orig, int w, int h, int channels) { int i; int img_len = w * h * channels; stbi__uint16 *enlarged; enlarged = (stbi__uint16 *) stbi__malloc(img_len*2); if (enlarged == NULL) return (stbi__uint16 *) stbi__errpuc("outofmem", "Out of memory"); for (i = 0; i < img_len; ++i) enlarged[i] = (stbi__uint16)((orig[i] << 8) + orig[i]); // replicate to high and low byte, maps 0->0, 255->0xffff STBI_FREE(orig); return enlarged; } static void stbi__vertical_flip(void *image, int w, int h, int bytes_per_pixel) { int row; size_t bytes_per_row = (size_t)w * bytes_per_pixel; stbi_uc temp[2048]; stbi_uc *bytes = (stbi_uc *)image; for (row = 0; row < (h>>1); row++) { stbi_uc *row0 = bytes + row*bytes_per_row; stbi_uc *row1 = bytes + (h - row - 1)*bytes_per_row; // swap row0 with row1 size_t bytes_left = bytes_per_row; while (bytes_left) { size_t bytes_copy = (bytes_left < sizeof(temp)) ? bytes_left : sizeof(temp); memcpy(temp, row0, bytes_copy); memcpy(row0, row1, bytes_copy); memcpy(row1, temp, bytes_copy); row0 += bytes_copy; row1 += bytes_copy; bytes_left -= bytes_copy; } } } #ifndef STBI_NO_GIF static void stbi__vertical_flip_slices(void *image, int w, int h, int z, int bytes_per_pixel) { int slice; int slice_size = w * h * bytes_per_pixel; stbi_uc *bytes = (stbi_uc *)image; for (slice = 0; slice < z; ++slice) { stbi__vertical_flip(bytes, w, h, bytes_per_pixel); bytes += slice_size; } } #endif static unsigned char *stbi__load_and_postprocess_8bit(stbi__context *s, int *x, int *y, int *comp, int req_comp) { stbi__result_info ri; void *result = stbi__load_main(s, x, y, comp, req_comp, &ri, 8); if (result == NULL) return NULL; // it is the responsibility of the loaders to make sure we get either 8 or 16 bit. STBI_ASSERT(ri.bits_per_channel == 8 || ri.bits_per_channel == 16); if (ri.bits_per_channel != 8) { result = stbi__convert_16_to_8((stbi__uint16 *) result, *x, *y, req_comp == 0 ? *comp : req_comp); ri.bits_per_channel = 8; } // @TODO: move stbi__convert_format to here if (stbi__vertically_flip_on_load) { int channels = req_comp ? req_comp : *comp; stbi__vertical_flip(result, *x, *y, channels * sizeof(stbi_uc)); } return (unsigned char *) result; } static stbi__uint16 *stbi__load_and_postprocess_16bit(stbi__context *s, int *x, int *y, int *comp, int req_comp) { stbi__result_info ri; void *result = stbi__load_main(s, x, y, comp, req_comp, &ri, 16); if (result == NULL) return NULL; // it is the responsibility of the loaders to make sure we get either 8 or 16 bit. STBI_ASSERT(ri.bits_per_channel == 8 || ri.bits_per_channel == 16); if (ri.bits_per_channel != 16) { result = stbi__convert_8_to_16((stbi_uc *) result, *x, *y, req_comp == 0 ? *comp : req_comp); ri.bits_per_channel = 16; } // @TODO: move stbi__convert_format16 to here // @TODO: special case RGB-to-Y (and RGBA-to-YA) for 8-bit-to-16-bit case to keep more precision if (stbi__vertically_flip_on_load) { int channels = req_comp ? req_comp : *comp; stbi__vertical_flip(result, *x, *y, channels * sizeof(stbi__uint16)); } return (stbi__uint16 *) result; } #if !defined(STBI_NO_HDR) && !defined(STBI_NO_LINEAR) static void stbi__float_postprocess(float *result, int *x, int *y, int *comp, int req_comp) { if (stbi__vertically_flip_on_load && result != NULL) { int channels = req_comp ? req_comp : *comp; stbi__vertical_flip(result, *x, *y, channels * sizeof(float)); } } #endif #ifndef STBI_NO_STDIO #if defined(_MSC_VER) && defined(STBI_WINDOWS_UTF8) STBI_EXTERN __declspec(dllimport) int __stdcall MultiByteToWideChar(unsigned int cp, unsigned long flags, const char *str, int cbmb, wchar_t *widestr, int cchwide); STBI_EXTERN __declspec(dllimport) int __stdcall WideCharToMultiByte(unsigned int cp, unsigned long flags, const wchar_t *widestr, int cchwide, char *str, int cbmb, const char *defchar, int *used_default); #endif #if defined(_MSC_VER) && defined(STBI_WINDOWS_UTF8) STBIDEF int stbi_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input) { return WideCharToMultiByte(65001 /* UTF8 */, 0, input, -1, buffer, (int) bufferlen, NULL, NULL); } #endif static FILE *stbi__fopen(char const *filename, char const *mode) { FILE *f; #if defined(_MSC_VER) && defined(STBI_WINDOWS_UTF8) wchar_t wMode[64]; wchar_t wFilename[1024]; if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, filename, -1, wFilename, sizeof(wFilename))) return 0; if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, mode, -1, wMode, sizeof(wMode))) return 0; #if _MSC_VER >= 1400 if (0 != _wfopen_s(&f, wFilename, wMode)) f = 0; #else f = _wfopen(wFilename, wMode); #endif #elif defined(_MSC_VER) && _MSC_VER >= 1400 if (0 != fopen_s(&f, filename, mode)) f=0; #else f = fopen(filename, mode); #endif return f; } STBIDEF stbi_uc *stbi_load(char const *filename, int *x, int *y, int *comp, int req_comp) { FILE *f = stbi__fopen(filename, "rb"); unsigned char *result; if (!f) return stbi__errpuc("can't fopen", "Unable to open file"); result = stbi_load_from_file(f,x,y,comp,req_comp); fclose(f); return result; } STBIDEF stbi_uc *stbi_load_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) { unsigned char *result; stbi__context s; stbi__start_file(&s,f); result = stbi__load_and_postprocess_8bit(&s,x,y,comp,req_comp); if (result) { // need to 'unget' all the characters in the IO buffer fseek(f, - (int) (s.img_buffer_end - s.img_buffer), SEEK_CUR); } return result; } STBIDEF stbi__uint16 *stbi_load_from_file_16(FILE *f, int *x, int *y, int *comp, int req_comp) { stbi__uint16 *result; stbi__context s; stbi__start_file(&s,f); result = stbi__load_and_postprocess_16bit(&s,x,y,comp,req_comp); if (result) { // need to 'unget' all the characters in the IO buffer fseek(f, - (int) (s.img_buffer_end - s.img_buffer), SEEK_CUR); } return result; } STBIDEF stbi_us *stbi_load_16(char const *filename, int *x, int *y, int *comp, int req_comp) { FILE *f = stbi__fopen(filename, "rb"); stbi__uint16 *result; if (!f) return (stbi_us *) stbi__errpuc("can't fopen", "Unable to open file"); result = stbi_load_from_file_16(f,x,y,comp,req_comp); fclose(f); return result; } #endif //!STBI_NO_STDIO STBIDEF stbi_us *stbi_load_16_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *channels_in_file, int desired_channels) { stbi__context s; stbi__start_mem(&s,buffer,len); return stbi__load_and_postprocess_16bit(&s,x,y,channels_in_file,desired_channels); } STBIDEF stbi_us *stbi_load_16_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *channels_in_file, int desired_channels) { stbi__context s; stbi__start_callbacks(&s, (stbi_io_callbacks *)clbk, user); return stbi__load_and_postprocess_16bit(&s,x,y,channels_in_file,desired_channels); } STBIDEF stbi_uc *stbi_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) { stbi__context s; stbi__start_mem(&s,buffer,len); return stbi__load_and_postprocess_8bit(&s,x,y,comp,req_comp); } STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp) { stbi__context s; stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); return stbi__load_and_postprocess_8bit(&s,x,y,comp,req_comp); } #ifndef STBI_NO_GIF STBIDEF stbi_uc *stbi_load_gif_from_memory(stbi_uc const *buffer, int len, int **delays, int *x, int *y, int *z, int *comp, int req_comp) { unsigned char *result; stbi__context s; stbi__start_mem(&s,buffer,len); result = (unsigned char*) stbi__load_gif_main(&s, delays, x, y, z, comp, req_comp); if (stbi__vertically_flip_on_load) { stbi__vertical_flip_slices( result, *x, *y, *z, *comp ); } return result; } #endif #ifndef STBI_NO_LINEAR static float *stbi__loadf_main(stbi__context *s, int *x, int *y, int *comp, int req_comp) { unsigned char *data; #ifndef STBI_NO_HDR if (stbi__hdr_test(s)) { stbi__result_info ri; float *hdr_data = stbi__hdr_load(s,x,y,comp,req_comp, &ri); if (hdr_data) stbi__float_postprocess(hdr_data,x,y,comp,req_comp); return hdr_data; } #endif data = stbi__load_and_postprocess_8bit(s, x, y, comp, req_comp); if (data) return stbi__ldr_to_hdr(data, *x, *y, req_comp ? req_comp : *comp); return stbi__errpf("unknown image type", "Image not of any known type, or corrupt"); } STBIDEF float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) { stbi__context s; stbi__start_mem(&s,buffer,len); return stbi__loadf_main(&s,x,y,comp,req_comp); } STBIDEF float *stbi_loadf_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp) { stbi__context s; stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); return stbi__loadf_main(&s,x,y,comp,req_comp); } #ifndef STBI_NO_STDIO STBIDEF float *stbi_loadf(char const *filename, int *x, int *y, int *comp, int req_comp) { float *result; FILE *f = stbi__fopen(filename, "rb"); if (!f) return stbi__errpf("can't fopen", "Unable to open file"); result = stbi_loadf_from_file(f,x,y,comp,req_comp); fclose(f); return result; } STBIDEF float *stbi_loadf_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) { stbi__context s; stbi__start_file(&s,f); return stbi__loadf_main(&s,x,y,comp,req_comp); } #endif // !STBI_NO_STDIO #endif // !STBI_NO_LINEAR // these is-hdr-or-not is defined independent of whether STBI_NO_LINEAR is // defined, for API simplicity; if STBI_NO_LINEAR is defined, it always // reports false! STBIDEF int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len) { #ifndef STBI_NO_HDR stbi__context s; stbi__start_mem(&s,buffer,len); return stbi__hdr_test(&s); #else STBI_NOTUSED(buffer); STBI_NOTUSED(len); return 0; #endif } #ifndef STBI_NO_STDIO STBIDEF int stbi_is_hdr (char const *filename) { FILE *f = stbi__fopen(filename, "rb"); int result=0; if (f) { result = stbi_is_hdr_from_file(f); fclose(f); } return result; } STBIDEF int stbi_is_hdr_from_file(FILE *f) { #ifndef STBI_NO_HDR long pos = ftell(f); int res; stbi__context s; stbi__start_file(&s,f); res = stbi__hdr_test(&s); fseek(f, pos, SEEK_SET); return res; #else STBI_NOTUSED(f); return 0; #endif } #endif // !STBI_NO_STDIO STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user) { #ifndef STBI_NO_HDR stbi__context s; stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); return stbi__hdr_test(&s); #else STBI_NOTUSED(clbk); STBI_NOTUSED(user); return 0; #endif } #ifndef STBI_NO_LINEAR static float stbi__l2h_gamma=2.2f, stbi__l2h_scale=1.0f; STBIDEF void stbi_ldr_to_hdr_gamma(float gamma) { stbi__l2h_gamma = gamma; } STBIDEF void stbi_ldr_to_hdr_scale(float scale) { stbi__l2h_scale = scale; } #endif static float stbi__h2l_gamma_i=1.0f/2.2f, stbi__h2l_scale_i=1.0f; STBIDEF void stbi_hdr_to_ldr_gamma(float gamma) { stbi__h2l_gamma_i = 1/gamma; } STBIDEF void stbi_hdr_to_ldr_scale(float scale) { stbi__h2l_scale_i = 1/scale; } ////////////////////////////////////////////////////////////////////////////// // // Common code used by all image loaders // enum { STBI__SCAN_load=0, STBI__SCAN_type, STBI__SCAN_header }; static void stbi__refill_buffer(stbi__context *s) { int n = (s->io.read)(s->io_user_data,(char*)s->buffer_start,s->buflen); s->callback_already_read += (int) (s->img_buffer - s->img_buffer_original); if (n == 0) { // at end of file, treat same as if from memory, but need to handle case // where s->img_buffer isn't pointing to safe memory, e.g. 0-byte file s->read_from_callbacks = 0; s->img_buffer = s->buffer_start; s->img_buffer_end = s->buffer_start+1; *s->img_buffer = 0; } else { s->img_buffer = s->buffer_start; s->img_buffer_end = s->buffer_start + n; } } stbi_inline static stbi_uc stbi__get8(stbi__context *s) { if (s->img_buffer < s->img_buffer_end) return *s->img_buffer++; if (s->read_from_callbacks) { stbi__refill_buffer(s); return *s->img_buffer++; } return 0; } #if defined(STBI_NO_JPEG) && defined(STBI_NO_HDR) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) // nothing #else stbi_inline static int stbi__at_eof(stbi__context *s) { if (s->io.read) { if (!(s->io.eof)(s->io_user_data)) return 0; // if feof() is true, check if buffer = end // special case: we've only got the special 0 character at the end if (s->read_from_callbacks == 0) return 1; } return s->img_buffer >= s->img_buffer_end; } #endif #if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) // nothing #else static void stbi__skip(stbi__context *s, int n) { if (n == 0) return; // already there! if (n < 0) { s->img_buffer = s->img_buffer_end; return; } if (s->io.read) { int blen = (int) (s->img_buffer_end - s->img_buffer); if (blen < n) { s->img_buffer = s->img_buffer_end; (s->io.skip)(s->io_user_data, n - blen); return; } } s->img_buffer += n; } #endif #if defined(STBI_NO_PNG) && defined(STBI_NO_TGA) && defined(STBI_NO_HDR) && defined(STBI_NO_PNM) // nothing #else static int stbi__getn(stbi__context *s, stbi_uc *buffer, int n) { if (s->io.read) { int blen = (int) (s->img_buffer_end - s->img_buffer); if (blen < n) { int res, count; memcpy(buffer, s->img_buffer, blen); count = (s->io.read)(s->io_user_data, (char*) buffer + blen, n - blen); res = (count == (n-blen)); s->img_buffer = s->img_buffer_end; return res; } } if (s->img_buffer+n <= s->img_buffer_end) { memcpy(buffer, s->img_buffer, n); s->img_buffer += n; return 1; } else return 0; } #endif #if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_PSD) && defined(STBI_NO_PIC) // nothing #else static int stbi__get16be(stbi__context *s) { int z = stbi__get8(s); return (z << 8) + stbi__get8(s); } #endif #if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) && defined(STBI_NO_PIC) // nothing #else static stbi__uint32 stbi__get32be(stbi__context *s) { stbi__uint32 z = stbi__get16be(s); return (z << 16) + stbi__get16be(s); } #endif #if defined(STBI_NO_BMP) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) // nothing #else static int stbi__get16le(stbi__context *s) { int z = stbi__get8(s); return z + (stbi__get8(s) << 8); } #endif #ifndef STBI_NO_BMP static stbi__uint32 stbi__get32le(stbi__context *s) { stbi__uint32 z = stbi__get16le(s); return z + (stbi__get16le(s) << 16); } #endif #define STBI__BYTECAST(x) ((stbi_uc) ((x) & 255)) // truncate int to byte without warnings #if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) // nothing #else ////////////////////////////////////////////////////////////////////////////// // // generic converter from built-in img_n to req_comp // individual types do this automatically as much as possible (e.g. jpeg // does all cases internally since it needs to colorspace convert anyway, // and it never has alpha, so very few cases ). png can automatically // interleave an alpha=255 channel, but falls back to this for other cases // // assume data buffer is malloced, so malloc a new one and free that one // only failure mode is malloc failing static stbi_uc stbi__compute_y(int r, int g, int b) { return (stbi_uc) (((r*77) + (g*150) + (29*b)) >> 8); } #endif #if defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) // nothing #else static unsigned char *stbi__convert_format(unsigned char *data, int img_n, int req_comp, unsigned int x, unsigned int y) { int i,j; unsigned char *good; if (req_comp == img_n) return data; STBI_ASSERT(req_comp >= 1 && req_comp <= 4); good = (unsigned char *) stbi__malloc_mad3(req_comp, x, y, 0); if (good == NULL) { STBI_FREE(data); return stbi__errpuc("outofmem", "Out of memory"); } for (j=0; j < (int) y; ++j) { unsigned char *src = data + j * x * img_n ; unsigned char *dest = good + j * x * req_comp; #define STBI__COMBO(a,b) ((a)*8+(b)) #define STBI__CASE(a,b) case STBI__COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b) // convert source image with img_n components to one with req_comp components; // avoid switch per pixel, so use switch per scanline and massive macros switch (STBI__COMBO(img_n, req_comp)) { STBI__CASE(1,2) { dest[0]=src[0]; dest[1]=255; } break; STBI__CASE(1,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; STBI__CASE(1,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=255; } break; STBI__CASE(2,1) { dest[0]=src[0]; } break; STBI__CASE(2,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; STBI__CASE(2,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=src[1]; } break; STBI__CASE(3,4) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2];dest[3]=255; } break; STBI__CASE(3,1) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); } break; STBI__CASE(3,2) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); dest[1] = 255; } break; STBI__CASE(4,1) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); } break; STBI__CASE(4,2) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); dest[1] = src[3]; } break; STBI__CASE(4,3) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2]; } break; default: STBI_ASSERT(0); STBI_FREE(data); STBI_FREE(good); return stbi__errpuc("unsupported", "Unsupported format conversion"); } #undef STBI__CASE } STBI_FREE(data); return good; } #endif #if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) // nothing #else static stbi__uint16 stbi__compute_y_16(int r, int g, int b) { return (stbi__uint16) (((r*77) + (g*150) + (29*b)) >> 8); } #endif #if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) // nothing #else static stbi__uint16 *stbi__convert_format16(stbi__uint16 *data, int img_n, int req_comp, unsigned int x, unsigned int y) { int i,j; stbi__uint16 *good; if (req_comp == img_n) return data; STBI_ASSERT(req_comp >= 1 && req_comp <= 4); good = (stbi__uint16 *) stbi__malloc(req_comp * x * y * 2); if (good == NULL) { STBI_FREE(data); return (stbi__uint16 *) stbi__errpuc("outofmem", "Out of memory"); } for (j=0; j < (int) y; ++j) { stbi__uint16 *src = data + j * x * img_n ; stbi__uint16 *dest = good + j * x * req_comp; #define STBI__COMBO(a,b) ((a)*8+(b)) #define STBI__CASE(a,b) case STBI__COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b) // convert source image with img_n components to one with req_comp components; // avoid switch per pixel, so use switch per scanline and massive macros switch (STBI__COMBO(img_n, req_comp)) { STBI__CASE(1,2) { dest[0]=src[0]; dest[1]=0xffff; } break; STBI__CASE(1,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; STBI__CASE(1,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=0xffff; } break; STBI__CASE(2,1) { dest[0]=src[0]; } break; STBI__CASE(2,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; STBI__CASE(2,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=src[1]; } break; STBI__CASE(3,4) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2];dest[3]=0xffff; } break; STBI__CASE(3,1) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); } break; STBI__CASE(3,2) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); dest[1] = 0xffff; } break; STBI__CASE(4,1) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); } break; STBI__CASE(4,2) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); dest[1] = src[3]; } break; STBI__CASE(4,3) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2]; } break; default: STBI_ASSERT(0); STBI_FREE(data); STBI_FREE(good); return (stbi__uint16*) stbi__errpuc("unsupported", "Unsupported format conversion"); } #undef STBI__CASE } STBI_FREE(data); return good; } #endif #ifndef STBI_NO_LINEAR static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp) { int i,k,n; float *output; if (!data) return NULL; output = (float *) stbi__malloc_mad4(x, y, comp, sizeof(float), 0); if (output == NULL) { STBI_FREE(data); return stbi__errpf("outofmem", "Out of memory"); } // compute number of non-alpha components if (comp & 1) n = comp; else n = comp-1; for (i=0; i < x*y; ++i) { for (k=0; k < n; ++k) { output[i*comp + k] = (float) (pow(data[i*comp+k]/255.0f, stbi__l2h_gamma) * stbi__l2h_scale); } } if (n < comp) { for (i=0; i < x*y; ++i) { output[i*comp + n] = data[i*comp + n]/255.0f; } } STBI_FREE(data); return output; } #endif #ifndef STBI_NO_HDR #define stbi__float2int(x) ((int) (x)) static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp) { int i,k,n; stbi_uc *output; if (!data) return NULL; output = (stbi_uc *) stbi__malloc_mad3(x, y, comp, 0); if (output == NULL) { STBI_FREE(data); return stbi__errpuc("outofmem", "Out of memory"); } // compute number of non-alpha components if (comp & 1) n = comp; else n = comp-1; for (i=0; i < x*y; ++i) { for (k=0; k < n; ++k) { float z = (float) pow(data[i*comp+k]*stbi__h2l_scale_i, stbi__h2l_gamma_i) * 255 + 0.5f; if (z < 0) z = 0; if (z > 255) z = 255; output[i*comp + k] = (stbi_uc) stbi__float2int(z); } if (k < comp) { float z = data[i*comp+k] * 255 + 0.5f; if (z < 0) z = 0; if (z > 255) z = 255; output[i*comp + k] = (stbi_uc) stbi__float2int(z); } } STBI_FREE(data); return output; } #endif ////////////////////////////////////////////////////////////////////////////// // // "baseline" JPEG/JFIF decoder // // simple implementation // - doesn't support delayed output of y-dimension // - simple interface (only one output format: 8-bit interleaved RGB) // - doesn't try to recover corrupt jpegs // - doesn't allow partial loading, loading multiple at once // - still fast on x86 (copying globals into locals doesn't help x86) // - allocates lots of intermediate memory (full size of all components) // - non-interleaved case requires this anyway // - allows good upsampling (see next) // high-quality // - upsampled channels are bilinearly interpolated, even across blocks // - quality integer IDCT derived from IJG's 'slow' // performance // - fast huffman; reasonable integer IDCT // - some SIMD kernels for common paths on targets with SSE2/NEON // - uses a lot of intermediate memory, could cache poorly #ifndef STBI_NO_JPEG // huffman decoding acceleration #define FAST_BITS 9 // larger handles more cases; smaller stomps less cache typedef struct { stbi_uc fast[1 << FAST_BITS]; // weirdly, repacking this into AoS is a 10% speed loss, instead of a win stbi__uint16 code[256]; stbi_uc values[256]; stbi_uc size[257]; unsigned int maxcode[18]; int delta[17]; // old 'firstsymbol' - old 'firstcode' } stbi__huffman; typedef struct { stbi__context *s; stbi__huffman huff_dc[4]; stbi__huffman huff_ac[4]; stbi__uint16 dequant[4][64]; stbi__int16 fast_ac[4][1 << FAST_BITS]; // sizes for components, interleaved MCUs int img_h_max, img_v_max; int img_mcu_x, img_mcu_y; int img_mcu_w, img_mcu_h; // definition of jpeg image component struct { int id; int h,v; int tq; int hd,ha; int dc_pred; int x,y,w2,h2; stbi_uc *data; void *raw_data, *raw_coeff; stbi_uc *linebuf; short *coeff; // progressive only int coeff_w, coeff_h; // number of 8x8 coefficient blocks } img_comp[4]; stbi__uint32 code_buffer; // jpeg entropy-coded buffer int code_bits; // number of valid bits unsigned char marker; // marker seen while filling entropy buffer int nomore; // flag if we saw a marker so must stop int progressive; int spec_start; int spec_end; int succ_high; int succ_low; int eob_run; int jfif; int app14_color_transform; // Adobe APP14 tag int rgb; int scan_n, order[4]; int restart_interval, todo; // kernels void (*idct_block_kernel)(stbi_uc *out, int out_stride, short data[64]); void (*YCbCr_to_RGB_kernel)(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step); stbi_uc *(*resample_row_hv_2_kernel)(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs); } stbi__jpeg; static int stbi__build_huffman(stbi__huffman *h, int *count) { int i,j,k=0; unsigned int code; // build size list for each symbol (from JPEG spec) for (i=0; i < 16; ++i) for (j=0; j < count[i]; ++j) h->size[k++] = (stbi_uc) (i+1); h->size[k] = 0; // compute actual symbols (from jpeg spec) code = 0; k = 0; for(j=1; j <= 16; ++j) { // compute delta to add to code to compute symbol id h->delta[j] = k - code; if (h->size[k] == j) { while (h->size[k] == j) h->code[k++] = (stbi__uint16) (code++); if (code-1 >= (1u << j)) return stbi__err("bad code lengths","Corrupt JPEG"); } // compute largest code + 1 for this size, preshifted as needed later h->maxcode[j] = code << (16-j); code <<= 1; } h->maxcode[j] = 0xffffffff; // build non-spec acceleration table; 255 is flag for not-accelerated memset(h->fast, 255, 1 << FAST_BITS); for (i=0; i < k; ++i) { int s = h->size[i]; if (s <= FAST_BITS) { int c = h->code[i] << (FAST_BITS-s); int m = 1 << (FAST_BITS-s); for (j=0; j < m; ++j) { h->fast[c+j] = (stbi_uc) i; } } } return 1; } // build a table that decodes both magnitude and value of small ACs in // one go. static void stbi__build_fast_ac(stbi__int16 *fast_ac, stbi__huffman *h) { int i; for (i=0; i < (1 << FAST_BITS); ++i) { stbi_uc fast = h->fast[i]; fast_ac[i] = 0; if (fast < 255) { int rs = h->values[fast]; int run = (rs >> 4) & 15; int magbits = rs & 15; int len = h->size[fast]; if (magbits && len + magbits <= FAST_BITS) { // magnitude code followed by receive_extend code int k = ((i << len) & ((1 << FAST_BITS) - 1)) >> (FAST_BITS - magbits); int m = 1 << (magbits - 1); if (k < m) k += (~0U << magbits) + 1; // if the result is small enough, we can fit it in fast_ac table if (k >= -128 && k <= 127) fast_ac[i] = (stbi__int16) ((k * 256) + (run * 16) + (len + magbits)); } } } } static void stbi__grow_buffer_unsafe(stbi__jpeg *j) { do { unsigned int b = j->nomore ? 0 : stbi__get8(j->s); if (b == 0xff) { int c = stbi__get8(j->s); while (c == 0xff) c = stbi__get8(j->s); // consume fill bytes if (c != 0) { j->marker = (unsigned char) c; j->nomore = 1; return; } } j->code_buffer |= b << (24 - j->code_bits); j->code_bits += 8; } while (j->code_bits <= 24); } // (1 << n) - 1 static const stbi__uint32 stbi__bmask[17]={0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535}; // decode a jpeg huffman value from the bitstream stbi_inline static int stbi__jpeg_huff_decode(stbi__jpeg *j, stbi__huffman *h) { unsigned int temp; int c,k; if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); // look at the top FAST_BITS and determine what symbol ID it is, // if the code is <= FAST_BITS c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); k = h->fast[c]; if (k < 255) { int s = h->size[k]; if (s > j->code_bits) return -1; j->code_buffer <<= s; j->code_bits -= s; return h->values[k]; } // naive test is to shift the code_buffer down so k bits are // valid, then test against maxcode. To speed this up, we've // preshifted maxcode left so that it has (16-k) 0s at the // end; in other words, regardless of the number of bits, it // wants to be compared against something shifted to have 16; // that way we don't need to shift inside the loop. temp = j->code_buffer >> 16; for (k=FAST_BITS+1 ; ; ++k) if (temp < h->maxcode[k]) break; if (k == 17) { // error! code not found j->code_bits -= 16; return -1; } if (k > j->code_bits) return -1; // convert the huffman code to the symbol id c = ((j->code_buffer >> (32 - k)) & stbi__bmask[k]) + h->delta[k]; STBI_ASSERT((((j->code_buffer) >> (32 - h->size[c])) & stbi__bmask[h->size[c]]) == h->code[c]); // convert the id to a symbol j->code_bits -= k; j->code_buffer <<= k; return h->values[c]; } // bias[n] = (-1<code_bits < n) stbi__grow_buffer_unsafe(j); sgn = (stbi__int32)j->code_buffer >> 31; // sign bit is always in MSB k = stbi_lrot(j->code_buffer, n); if (n < 0 || n >= (int) (sizeof(stbi__bmask)/sizeof(*stbi__bmask))) return 0; j->code_buffer = k & ~stbi__bmask[n]; k &= stbi__bmask[n]; j->code_bits -= n; return k + (stbi__jbias[n] & ~sgn); } // get some unsigned bits stbi_inline static int stbi__jpeg_get_bits(stbi__jpeg *j, int n) { unsigned int k; if (j->code_bits < n) stbi__grow_buffer_unsafe(j); k = stbi_lrot(j->code_buffer, n); j->code_buffer = k & ~stbi__bmask[n]; k &= stbi__bmask[n]; j->code_bits -= n; return k; } stbi_inline static int stbi__jpeg_get_bit(stbi__jpeg *j) { unsigned int k; if (j->code_bits < 1) stbi__grow_buffer_unsafe(j); k = j->code_buffer; j->code_buffer <<= 1; --j->code_bits; return k & 0x80000000; } // given a value that's at position X in the zigzag stream, // where does it appear in the 8x8 matrix coded as row-major? static const stbi_uc stbi__jpeg_dezigzag[64+15] = { 0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63, // let corrupt input sample past end 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63 }; // decode one 64-entry block-- static int stbi__jpeg_decode_block(stbi__jpeg *j, short data[64], stbi__huffman *hdc, stbi__huffman *hac, stbi__int16 *fac, int b, stbi__uint16 *dequant) { int diff,dc,k; int t; if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); t = stbi__jpeg_huff_decode(j, hdc); if (t < 0) return stbi__err("bad huffman code","Corrupt JPEG"); // 0 all the ac values now so we can do it 32-bits at a time memset(data,0,64*sizeof(data[0])); diff = t ? stbi__extend_receive(j, t) : 0; dc = j->img_comp[b].dc_pred + diff; j->img_comp[b].dc_pred = dc; data[0] = (short) (dc * dequant[0]); // decode AC components, see JPEG spec k = 1; do { unsigned int zig; int c,r,s; if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); r = fac[c]; if (r) { // fast-AC path k += (r >> 4) & 15; // run s = r & 15; // combined length j->code_buffer <<= s; j->code_bits -= s; // decode into unzigzag'd location zig = stbi__jpeg_dezigzag[k++]; data[zig] = (short) ((r >> 8) * dequant[zig]); } else { int rs = stbi__jpeg_huff_decode(j, hac); if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); s = rs & 15; r = rs >> 4; if (s == 0) { if (rs != 0xf0) break; // end block k += 16; } else { k += r; // decode into unzigzag'd location zig = stbi__jpeg_dezigzag[k++]; data[zig] = (short) (stbi__extend_receive(j,s) * dequant[zig]); } } } while (k < 64); return 1; } static int stbi__jpeg_decode_block_prog_dc(stbi__jpeg *j, short data[64], stbi__huffman *hdc, int b) { int diff,dc; int t; if (j->spec_end != 0) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); if (j->succ_high == 0) { // first scan for DC coefficient, must be first memset(data,0,64*sizeof(data[0])); // 0 all the ac values now t = stbi__jpeg_huff_decode(j, hdc); if (t == -1) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); diff = t ? stbi__extend_receive(j, t) : 0; dc = j->img_comp[b].dc_pred + diff; j->img_comp[b].dc_pred = dc; data[0] = (short) (dc << j->succ_low); } else { // refinement scan for DC coefficient if (stbi__jpeg_get_bit(j)) data[0] += (short) (1 << j->succ_low); } return 1; } // @OPTIMIZE: store non-zigzagged during the decode passes, // and only de-zigzag when dequantizing static int stbi__jpeg_decode_block_prog_ac(stbi__jpeg *j, short data[64], stbi__huffman *hac, stbi__int16 *fac) { int k; if (j->spec_start == 0) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); if (j->succ_high == 0) { int shift = j->succ_low; if (j->eob_run) { --j->eob_run; return 1; } k = j->spec_start; do { unsigned int zig; int c,r,s; if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); r = fac[c]; if (r) { // fast-AC path k += (r >> 4) & 15; // run s = r & 15; // combined length j->code_buffer <<= s; j->code_bits -= s; zig = stbi__jpeg_dezigzag[k++]; data[zig] = (short) ((r >> 8) << shift); } else { int rs = stbi__jpeg_huff_decode(j, hac); if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); s = rs & 15; r = rs >> 4; if (s == 0) { if (r < 15) { j->eob_run = (1 << r); if (r) j->eob_run += stbi__jpeg_get_bits(j, r); --j->eob_run; break; } k += 16; } else { k += r; zig = stbi__jpeg_dezigzag[k++]; data[zig] = (short) (stbi__extend_receive(j,s) << shift); } } } while (k <= j->spec_end); } else { // refinement scan for these AC coefficients short bit = (short) (1 << j->succ_low); if (j->eob_run) { --j->eob_run; for (k = j->spec_start; k <= j->spec_end; ++k) { short *p = &data[stbi__jpeg_dezigzag[k]]; if (*p != 0) if (stbi__jpeg_get_bit(j)) if ((*p & bit)==0) { if (*p > 0) *p += bit; else *p -= bit; } } } else { k = j->spec_start; do { int r,s; int rs = stbi__jpeg_huff_decode(j, hac); // @OPTIMIZE see if we can use the fast path here, advance-by-r is so slow, eh if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); s = rs & 15; r = rs >> 4; if (s == 0) { if (r < 15) { j->eob_run = (1 << r) - 1; if (r) j->eob_run += stbi__jpeg_get_bits(j, r); r = 64; // force end of block } else { // r=15 s=0 should write 16 0s, so we just do // a run of 15 0s and then write s (which is 0), // so we don't have to do anything special here } } else { if (s != 1) return stbi__err("bad huffman code", "Corrupt JPEG"); // sign bit if (stbi__jpeg_get_bit(j)) s = bit; else s = -bit; } // advance by r while (k <= j->spec_end) { short *p = &data[stbi__jpeg_dezigzag[k++]]; if (*p != 0) { if (stbi__jpeg_get_bit(j)) if ((*p & bit)==0) { if (*p > 0) *p += bit; else *p -= bit; } } else { if (r == 0) { *p = (short) s; break; } --r; } } } while (k <= j->spec_end); } } return 1; } // take a -128..127 value and stbi__clamp it and convert to 0..255 stbi_inline static stbi_uc stbi__clamp(int x) { // trick to use a single test to catch both cases if ((unsigned int) x > 255) { if (x < 0) return 0; if (x > 255) return 255; } return (stbi_uc) x; } #define stbi__f2f(x) ((int) (((x) * 4096 + 0.5))) #define stbi__fsh(x) ((x) * 4096) // derived from jidctint -- DCT_ISLOW #define STBI__IDCT_1D(s0,s1,s2,s3,s4,s5,s6,s7) \ int t0,t1,t2,t3,p1,p2,p3,p4,p5,x0,x1,x2,x3; \ p2 = s2; \ p3 = s6; \ p1 = (p2+p3) * stbi__f2f(0.5411961f); \ t2 = p1 + p3*stbi__f2f(-1.847759065f); \ t3 = p1 + p2*stbi__f2f( 0.765366865f); \ p2 = s0; \ p3 = s4; \ t0 = stbi__fsh(p2+p3); \ t1 = stbi__fsh(p2-p3); \ x0 = t0+t3; \ x3 = t0-t3; \ x1 = t1+t2; \ x2 = t1-t2; \ t0 = s7; \ t1 = s5; \ t2 = s3; \ t3 = s1; \ p3 = t0+t2; \ p4 = t1+t3; \ p1 = t0+t3; \ p2 = t1+t2; \ p5 = (p3+p4)*stbi__f2f( 1.175875602f); \ t0 = t0*stbi__f2f( 0.298631336f); \ t1 = t1*stbi__f2f( 2.053119869f); \ t2 = t2*stbi__f2f( 3.072711026f); \ t3 = t3*stbi__f2f( 1.501321110f); \ p1 = p5 + p1*stbi__f2f(-0.899976223f); \ p2 = p5 + p2*stbi__f2f(-2.562915447f); \ p3 = p3*stbi__f2f(-1.961570560f); \ p4 = p4*stbi__f2f(-0.390180644f); \ t3 += p1+p4; \ t2 += p2+p3; \ t1 += p2+p4; \ t0 += p1+p3; static void stbi__idct_block(stbi_uc *out, int out_stride, short data[64]) { int i,val[64],*v=val; stbi_uc *o; short *d = data; // columns for (i=0; i < 8; ++i,++d, ++v) { // if all zeroes, shortcut -- this avoids dequantizing 0s and IDCTing if (d[ 8]==0 && d[16]==0 && d[24]==0 && d[32]==0 && d[40]==0 && d[48]==0 && d[56]==0) { // no shortcut 0 seconds // (1|2|3|4|5|6|7)==0 0 seconds // all separate -0.047 seconds // 1 && 2|3 && 4|5 && 6|7: -0.047 seconds int dcterm = d[0]*4; v[0] = v[8] = v[16] = v[24] = v[32] = v[40] = v[48] = v[56] = dcterm; } else { STBI__IDCT_1D(d[ 0],d[ 8],d[16],d[24],d[32],d[40],d[48],d[56]) // constants scaled things up by 1<<12; let's bring them back // down, but keep 2 extra bits of precision x0 += 512; x1 += 512; x2 += 512; x3 += 512; v[ 0] = (x0+t3) >> 10; v[56] = (x0-t3) >> 10; v[ 8] = (x1+t2) >> 10; v[48] = (x1-t2) >> 10; v[16] = (x2+t1) >> 10; v[40] = (x2-t1) >> 10; v[24] = (x3+t0) >> 10; v[32] = (x3-t0) >> 10; } } for (i=0, v=val, o=out; i < 8; ++i,v+=8,o+=out_stride) { // no fast case since the first 1D IDCT spread components out STBI__IDCT_1D(v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7]) // constants scaled things up by 1<<12, plus we had 1<<2 from first // loop, plus horizontal and vertical each scale by sqrt(8) so together // we've got an extra 1<<3, so 1<<17 total we need to remove. // so we want to round that, which means adding 0.5 * 1<<17, // aka 65536. Also, we'll end up with -128 to 127 that we want // to encode as 0..255 by adding 128, so we'll add that before the shift x0 += 65536 + (128<<17); x1 += 65536 + (128<<17); x2 += 65536 + (128<<17); x3 += 65536 + (128<<17); // tried computing the shifts into temps, or'ing the temps to see // if any were out of range, but that was slower o[0] = stbi__clamp((x0+t3) >> 17); o[7] = stbi__clamp((x0-t3) >> 17); o[1] = stbi__clamp((x1+t2) >> 17); o[6] = stbi__clamp((x1-t2) >> 17); o[2] = stbi__clamp((x2+t1) >> 17); o[5] = stbi__clamp((x2-t1) >> 17); o[3] = stbi__clamp((x3+t0) >> 17); o[4] = stbi__clamp((x3-t0) >> 17); } } #ifdef STBI_SSE2 // sse2 integer IDCT. not the fastest possible implementation but it // produces bit-identical results to the generic C version so it's // fully "transparent". static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64]) { // This is constructed to match our regular (generic) integer IDCT exactly. __m128i row0, row1, row2, row3, row4, row5, row6, row7; __m128i tmp; // dot product constant: even elems=x, odd elems=y #define dct_const(x,y) _mm_setr_epi16((x),(y),(x),(y),(x),(y),(x),(y)) // out(0) = c0[even]*x + c0[odd]*y (c0, x, y 16-bit, out 32-bit) // out(1) = c1[even]*x + c1[odd]*y #define dct_rot(out0,out1, x,y,c0,c1) \ __m128i c0##lo = _mm_unpacklo_epi16((x),(y)); \ __m128i c0##hi = _mm_unpackhi_epi16((x),(y)); \ __m128i out0##_l = _mm_madd_epi16(c0##lo, c0); \ __m128i out0##_h = _mm_madd_epi16(c0##hi, c0); \ __m128i out1##_l = _mm_madd_epi16(c0##lo, c1); \ __m128i out1##_h = _mm_madd_epi16(c0##hi, c1) // out = in << 12 (in 16-bit, out 32-bit) #define dct_widen(out, in) \ __m128i out##_l = _mm_srai_epi32(_mm_unpacklo_epi16(_mm_setzero_si128(), (in)), 4); \ __m128i out##_h = _mm_srai_epi32(_mm_unpackhi_epi16(_mm_setzero_si128(), (in)), 4) // wide add #define dct_wadd(out, a, b) \ __m128i out##_l = _mm_add_epi32(a##_l, b##_l); \ __m128i out##_h = _mm_add_epi32(a##_h, b##_h) // wide sub #define dct_wsub(out, a, b) \ __m128i out##_l = _mm_sub_epi32(a##_l, b##_l); \ __m128i out##_h = _mm_sub_epi32(a##_h, b##_h) // butterfly a/b, add bias, then shift by "s" and pack #define dct_bfly32o(out0, out1, a,b,bias,s) \ { \ __m128i abiased_l = _mm_add_epi32(a##_l, bias); \ __m128i abiased_h = _mm_add_epi32(a##_h, bias); \ dct_wadd(sum, abiased, b); \ dct_wsub(dif, abiased, b); \ out0 = _mm_packs_epi32(_mm_srai_epi32(sum_l, s), _mm_srai_epi32(sum_h, s)); \ out1 = _mm_packs_epi32(_mm_srai_epi32(dif_l, s), _mm_srai_epi32(dif_h, s)); \ } // 8-bit interleave step (for transposes) #define dct_interleave8(a, b) \ tmp = a; \ a = _mm_unpacklo_epi8(a, b); \ b = _mm_unpackhi_epi8(tmp, b) // 16-bit interleave step (for transposes) #define dct_interleave16(a, b) \ tmp = a; \ a = _mm_unpacklo_epi16(a, b); \ b = _mm_unpackhi_epi16(tmp, b) #define dct_pass(bias,shift) \ { \ /* even part */ \ dct_rot(t2e,t3e, row2,row6, rot0_0,rot0_1); \ __m128i sum04 = _mm_add_epi16(row0, row4); \ __m128i dif04 = _mm_sub_epi16(row0, row4); \ dct_widen(t0e, sum04); \ dct_widen(t1e, dif04); \ dct_wadd(x0, t0e, t3e); \ dct_wsub(x3, t0e, t3e); \ dct_wadd(x1, t1e, t2e); \ dct_wsub(x2, t1e, t2e); \ /* odd part */ \ dct_rot(y0o,y2o, row7,row3, rot2_0,rot2_1); \ dct_rot(y1o,y3o, row5,row1, rot3_0,rot3_1); \ __m128i sum17 = _mm_add_epi16(row1, row7); \ __m128i sum35 = _mm_add_epi16(row3, row5); \ dct_rot(y4o,y5o, sum17,sum35, rot1_0,rot1_1); \ dct_wadd(x4, y0o, y4o); \ dct_wadd(x5, y1o, y5o); \ dct_wadd(x6, y2o, y5o); \ dct_wadd(x7, y3o, y4o); \ dct_bfly32o(row0,row7, x0,x7,bias,shift); \ dct_bfly32o(row1,row6, x1,x6,bias,shift); \ dct_bfly32o(row2,row5, x2,x5,bias,shift); \ dct_bfly32o(row3,row4, x3,x4,bias,shift); \ } __m128i rot0_0 = dct_const(stbi__f2f(0.5411961f), stbi__f2f(0.5411961f) + stbi__f2f(-1.847759065f)); __m128i rot0_1 = dct_const(stbi__f2f(0.5411961f) + stbi__f2f( 0.765366865f), stbi__f2f(0.5411961f)); __m128i rot1_0 = dct_const(stbi__f2f(1.175875602f) + stbi__f2f(-0.899976223f), stbi__f2f(1.175875602f)); __m128i rot1_1 = dct_const(stbi__f2f(1.175875602f), stbi__f2f(1.175875602f) + stbi__f2f(-2.562915447f)); __m128i rot2_0 = dct_const(stbi__f2f(-1.961570560f) + stbi__f2f( 0.298631336f), stbi__f2f(-1.961570560f)); __m128i rot2_1 = dct_const(stbi__f2f(-1.961570560f), stbi__f2f(-1.961570560f) + stbi__f2f( 3.072711026f)); __m128i rot3_0 = dct_const(stbi__f2f(-0.390180644f) + stbi__f2f( 2.053119869f), stbi__f2f(-0.390180644f)); __m128i rot3_1 = dct_const(stbi__f2f(-0.390180644f), stbi__f2f(-0.390180644f) + stbi__f2f( 1.501321110f)); // rounding biases in column/row passes, see stbi__idct_block for explanation. __m128i bias_0 = _mm_set1_epi32(512); __m128i bias_1 = _mm_set1_epi32(65536 + (128<<17)); // load row0 = _mm_load_si128((const __m128i *) (data + 0*8)); row1 = _mm_load_si128((const __m128i *) (data + 1*8)); row2 = _mm_load_si128((const __m128i *) (data + 2*8)); row3 = _mm_load_si128((const __m128i *) (data + 3*8)); row4 = _mm_load_si128((const __m128i *) (data + 4*8)); row5 = _mm_load_si128((const __m128i *) (data + 5*8)); row6 = _mm_load_si128((const __m128i *) (data + 6*8)); row7 = _mm_load_si128((const __m128i *) (data + 7*8)); // column pass dct_pass(bias_0, 10); { // 16bit 8x8 transpose pass 1 dct_interleave16(row0, row4); dct_interleave16(row1, row5); dct_interleave16(row2, row6); dct_interleave16(row3, row7); // transpose pass 2 dct_interleave16(row0, row2); dct_interleave16(row1, row3); dct_interleave16(row4, row6); dct_interleave16(row5, row7); // transpose pass 3 dct_interleave16(row0, row1); dct_interleave16(row2, row3); dct_interleave16(row4, row5); dct_interleave16(row6, row7); } // row pass dct_pass(bias_1, 17); { // pack __m128i p0 = _mm_packus_epi16(row0, row1); // a0a1a2a3...a7b0b1b2b3...b7 __m128i p1 = _mm_packus_epi16(row2, row3); __m128i p2 = _mm_packus_epi16(row4, row5); __m128i p3 = _mm_packus_epi16(row6, row7); // 8bit 8x8 transpose pass 1 dct_interleave8(p0, p2); // a0e0a1e1... dct_interleave8(p1, p3); // c0g0c1g1... // transpose pass 2 dct_interleave8(p0, p1); // a0c0e0g0... dct_interleave8(p2, p3); // b0d0f0h0... // transpose pass 3 dct_interleave8(p0, p2); // a0b0c0d0... dct_interleave8(p1, p3); // a4b4c4d4... // store _mm_storel_epi64((__m128i *) out, p0); out += out_stride; _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p0, 0x4e)); out += out_stride; _mm_storel_epi64((__m128i *) out, p2); out += out_stride; _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p2, 0x4e)); out += out_stride; _mm_storel_epi64((__m128i *) out, p1); out += out_stride; _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p1, 0x4e)); out += out_stride; _mm_storel_epi64((__m128i *) out, p3); out += out_stride; _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p3, 0x4e)); } #undef dct_const #undef dct_rot #undef dct_widen #undef dct_wadd #undef dct_wsub #undef dct_bfly32o #undef dct_interleave8 #undef dct_interleave16 #undef dct_pass } #endif // STBI_SSE2 #ifdef STBI_NEON // NEON integer IDCT. should produce bit-identical // results to the generic C version. static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64]) { int16x8_t row0, row1, row2, row3, row4, row5, row6, row7; int16x4_t rot0_0 = vdup_n_s16(stbi__f2f(0.5411961f)); int16x4_t rot0_1 = vdup_n_s16(stbi__f2f(-1.847759065f)); int16x4_t rot0_2 = vdup_n_s16(stbi__f2f( 0.765366865f)); int16x4_t rot1_0 = vdup_n_s16(stbi__f2f( 1.175875602f)); int16x4_t rot1_1 = vdup_n_s16(stbi__f2f(-0.899976223f)); int16x4_t rot1_2 = vdup_n_s16(stbi__f2f(-2.562915447f)); int16x4_t rot2_0 = vdup_n_s16(stbi__f2f(-1.961570560f)); int16x4_t rot2_1 = vdup_n_s16(stbi__f2f(-0.390180644f)); int16x4_t rot3_0 = vdup_n_s16(stbi__f2f( 0.298631336f)); int16x4_t rot3_1 = vdup_n_s16(stbi__f2f( 2.053119869f)); int16x4_t rot3_2 = vdup_n_s16(stbi__f2f( 3.072711026f)); int16x4_t rot3_3 = vdup_n_s16(stbi__f2f( 1.501321110f)); #define dct_long_mul(out, inq, coeff) \ int32x4_t out##_l = vmull_s16(vget_low_s16(inq), coeff); \ int32x4_t out##_h = vmull_s16(vget_high_s16(inq), coeff) #define dct_long_mac(out, acc, inq, coeff) \ int32x4_t out##_l = vmlal_s16(acc##_l, vget_low_s16(inq), coeff); \ int32x4_t out##_h = vmlal_s16(acc##_h, vget_high_s16(inq), coeff) #define dct_widen(out, inq) \ int32x4_t out##_l = vshll_n_s16(vget_low_s16(inq), 12); \ int32x4_t out##_h = vshll_n_s16(vget_high_s16(inq), 12) // wide add #define dct_wadd(out, a, b) \ int32x4_t out##_l = vaddq_s32(a##_l, b##_l); \ int32x4_t out##_h = vaddq_s32(a##_h, b##_h) // wide sub #define dct_wsub(out, a, b) \ int32x4_t out##_l = vsubq_s32(a##_l, b##_l); \ int32x4_t out##_h = vsubq_s32(a##_h, b##_h) // butterfly a/b, then shift using "shiftop" by "s" and pack #define dct_bfly32o(out0,out1, a,b,shiftop,s) \ { \ dct_wadd(sum, a, b); \ dct_wsub(dif, a, b); \ out0 = vcombine_s16(shiftop(sum_l, s), shiftop(sum_h, s)); \ out1 = vcombine_s16(shiftop(dif_l, s), shiftop(dif_h, s)); \ } #define dct_pass(shiftop, shift) \ { \ /* even part */ \ int16x8_t sum26 = vaddq_s16(row2, row6); \ dct_long_mul(p1e, sum26, rot0_0); \ dct_long_mac(t2e, p1e, row6, rot0_1); \ dct_long_mac(t3e, p1e, row2, rot0_2); \ int16x8_t sum04 = vaddq_s16(row0, row4); \ int16x8_t dif04 = vsubq_s16(row0, row4); \ dct_widen(t0e, sum04); \ dct_widen(t1e, dif04); \ dct_wadd(x0, t0e, t3e); \ dct_wsub(x3, t0e, t3e); \ dct_wadd(x1, t1e, t2e); \ dct_wsub(x2, t1e, t2e); \ /* odd part */ \ int16x8_t sum15 = vaddq_s16(row1, row5); \ int16x8_t sum17 = vaddq_s16(row1, row7); \ int16x8_t sum35 = vaddq_s16(row3, row5); \ int16x8_t sum37 = vaddq_s16(row3, row7); \ int16x8_t sumodd = vaddq_s16(sum17, sum35); \ dct_long_mul(p5o, sumodd, rot1_0); \ dct_long_mac(p1o, p5o, sum17, rot1_1); \ dct_long_mac(p2o, p5o, sum35, rot1_2); \ dct_long_mul(p3o, sum37, rot2_0); \ dct_long_mul(p4o, sum15, rot2_1); \ dct_wadd(sump13o, p1o, p3o); \ dct_wadd(sump24o, p2o, p4o); \ dct_wadd(sump23o, p2o, p3o); \ dct_wadd(sump14o, p1o, p4o); \ dct_long_mac(x4, sump13o, row7, rot3_0); \ dct_long_mac(x5, sump24o, row5, rot3_1); \ dct_long_mac(x6, sump23o, row3, rot3_2); \ dct_long_mac(x7, sump14o, row1, rot3_3); \ dct_bfly32o(row0,row7, x0,x7,shiftop,shift); \ dct_bfly32o(row1,row6, x1,x6,shiftop,shift); \ dct_bfly32o(row2,row5, x2,x5,shiftop,shift); \ dct_bfly32o(row3,row4, x3,x4,shiftop,shift); \ } // load row0 = vld1q_s16(data + 0*8); row1 = vld1q_s16(data + 1*8); row2 = vld1q_s16(data + 2*8); row3 = vld1q_s16(data + 3*8); row4 = vld1q_s16(data + 4*8); row5 = vld1q_s16(data + 5*8); row6 = vld1q_s16(data + 6*8); row7 = vld1q_s16(data + 7*8); // add DC bias row0 = vaddq_s16(row0, vsetq_lane_s16(1024, vdupq_n_s16(0), 0)); // column pass dct_pass(vrshrn_n_s32, 10); // 16bit 8x8 transpose { // these three map to a single VTRN.16, VTRN.32, and VSWP, respectively. // whether compilers actually get this is another story, sadly. #define dct_trn16(x, y) { int16x8x2_t t = vtrnq_s16(x, y); x = t.val[0]; y = t.val[1]; } #define dct_trn32(x, y) { int32x4x2_t t = vtrnq_s32(vreinterpretq_s32_s16(x), vreinterpretq_s32_s16(y)); x = vreinterpretq_s16_s32(t.val[0]); y = vreinterpretq_s16_s32(t.val[1]); } #define dct_trn64(x, y) { int16x8_t x0 = x; int16x8_t y0 = y; x = vcombine_s16(vget_low_s16(x0), vget_low_s16(y0)); y = vcombine_s16(vget_high_s16(x0), vget_high_s16(y0)); } // pass 1 dct_trn16(row0, row1); // a0b0a2b2a4b4a6b6 dct_trn16(row2, row3); dct_trn16(row4, row5); dct_trn16(row6, row7); // pass 2 dct_trn32(row0, row2); // a0b0c0d0a4b4c4d4 dct_trn32(row1, row3); dct_trn32(row4, row6); dct_trn32(row5, row7); // pass 3 dct_trn64(row0, row4); // a0b0c0d0e0f0g0h0 dct_trn64(row1, row5); dct_trn64(row2, row6); dct_trn64(row3, row7); #undef dct_trn16 #undef dct_trn32 #undef dct_trn64 } // row pass // vrshrn_n_s32 only supports shifts up to 16, we need // 17. so do a non-rounding shift of 16 first then follow // up with a rounding shift by 1. dct_pass(vshrn_n_s32, 16); { // pack and round uint8x8_t p0 = vqrshrun_n_s16(row0, 1); uint8x8_t p1 = vqrshrun_n_s16(row1, 1); uint8x8_t p2 = vqrshrun_n_s16(row2, 1); uint8x8_t p3 = vqrshrun_n_s16(row3, 1); uint8x8_t p4 = vqrshrun_n_s16(row4, 1); uint8x8_t p5 = vqrshrun_n_s16(row5, 1); uint8x8_t p6 = vqrshrun_n_s16(row6, 1); uint8x8_t p7 = vqrshrun_n_s16(row7, 1); // again, these can translate into one instruction, but often don't. #define dct_trn8_8(x, y) { uint8x8x2_t t = vtrn_u8(x, y); x = t.val[0]; y = t.val[1]; } #define dct_trn8_16(x, y) { uint16x4x2_t t = vtrn_u16(vreinterpret_u16_u8(x), vreinterpret_u16_u8(y)); x = vreinterpret_u8_u16(t.val[0]); y = vreinterpret_u8_u16(t.val[1]); } #define dct_trn8_32(x, y) { uint32x2x2_t t = vtrn_u32(vreinterpret_u32_u8(x), vreinterpret_u32_u8(y)); x = vreinterpret_u8_u32(t.val[0]); y = vreinterpret_u8_u32(t.val[1]); } // sadly can't use interleaved stores here since we only write // 8 bytes to each scan line! // 8x8 8-bit transpose pass 1 dct_trn8_8(p0, p1); dct_trn8_8(p2, p3); dct_trn8_8(p4, p5); dct_trn8_8(p6, p7); // pass 2 dct_trn8_16(p0, p2); dct_trn8_16(p1, p3); dct_trn8_16(p4, p6); dct_trn8_16(p5, p7); // pass 3 dct_trn8_32(p0, p4); dct_trn8_32(p1, p5); dct_trn8_32(p2, p6); dct_trn8_32(p3, p7); // store vst1_u8(out, p0); out += out_stride; vst1_u8(out, p1); out += out_stride; vst1_u8(out, p2); out += out_stride; vst1_u8(out, p3); out += out_stride; vst1_u8(out, p4); out += out_stride; vst1_u8(out, p5); out += out_stride; vst1_u8(out, p6); out += out_stride; vst1_u8(out, p7); #undef dct_trn8_8 #undef dct_trn8_16 #undef dct_trn8_32 } #undef dct_long_mul #undef dct_long_mac #undef dct_widen #undef dct_wadd #undef dct_wsub #undef dct_bfly32o #undef dct_pass } #endif // STBI_NEON #define STBI__MARKER_none 0xff // if there's a pending marker from the entropy stream, return that // otherwise, fetch from the stream and get a marker. if there's no // marker, return 0xff, which is never a valid marker value static stbi_uc stbi__get_marker(stbi__jpeg *j) { stbi_uc x; if (j->marker != STBI__MARKER_none) { x = j->marker; j->marker = STBI__MARKER_none; return x; } x = stbi__get8(j->s); if (x != 0xff) return STBI__MARKER_none; while (x == 0xff) x = stbi__get8(j->s); // consume repeated 0xff fill bytes return x; } // in each scan, we'll have scan_n components, and the order // of the components is specified by order[] #define STBI__RESTART(x) ((x) >= 0xd0 && (x) <= 0xd7) // after a restart interval, stbi__jpeg_reset the entropy decoder and // the dc prediction static void stbi__jpeg_reset(stbi__jpeg *j) { j->code_bits = 0; j->code_buffer = 0; j->nomore = 0; j->img_comp[0].dc_pred = j->img_comp[1].dc_pred = j->img_comp[2].dc_pred = j->img_comp[3].dc_pred = 0; j->marker = STBI__MARKER_none; j->todo = j->restart_interval ? j->restart_interval : 0x7fffffff; j->eob_run = 0; // no more than 1<<31 MCUs if no restart_interal? that's plenty safe, // since we don't even allow 1<<30 pixels } static int stbi__parse_entropy_coded_data(stbi__jpeg *z) { stbi__jpeg_reset(z); if (!z->progressive) { if (z->scan_n == 1) { int i,j; STBI_SIMD_ALIGN(short, data[64]); int n = z->order[0]; // non-interleaved data, we just need to process one block at a time, // in trivial scanline order // number of blocks to do just depends on how many actual "pixels" this // component has, independent of interleaved MCU blocking and such int w = (z->img_comp[n].x+7) >> 3; int h = (z->img_comp[n].y+7) >> 3; for (j=0; j < h; ++j) { for (i=0; i < w; ++i) { int ha = z->img_comp[n].ha; if (!stbi__jpeg_decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) return 0; z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data); // every data block is an MCU, so countdown the restart interval if (--z->todo <= 0) { if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); // if it's NOT a restart, then just bail, so we get corrupt data // rather than no data if (!STBI__RESTART(z->marker)) return 1; stbi__jpeg_reset(z); } } } return 1; } else { // interleaved int i,j,k,x,y; STBI_SIMD_ALIGN(short, data[64]); for (j=0; j < z->img_mcu_y; ++j) { for (i=0; i < z->img_mcu_x; ++i) { // scan an interleaved mcu... process scan_n components in order for (k=0; k < z->scan_n; ++k) { int n = z->order[k]; // scan out an mcu's worth of this component; that's just determined // by the basic H and V specified for the component for (y=0; y < z->img_comp[n].v; ++y) { for (x=0; x < z->img_comp[n].h; ++x) { int x2 = (i*z->img_comp[n].h + x)*8; int y2 = (j*z->img_comp[n].v + y)*8; int ha = z->img_comp[n].ha; if (!stbi__jpeg_decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) return 0; z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*y2+x2, z->img_comp[n].w2, data); } } } // after all interleaved components, that's an interleaved MCU, // so now count down the restart interval if (--z->todo <= 0) { if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); if (!STBI__RESTART(z->marker)) return 1; stbi__jpeg_reset(z); } } } return 1; } } else { if (z->scan_n == 1) { int i,j; int n = z->order[0]; // non-interleaved data, we just need to process one block at a time, // in trivial scanline order // number of blocks to do just depends on how many actual "pixels" this // component has, independent of interleaved MCU blocking and such int w = (z->img_comp[n].x+7) >> 3; int h = (z->img_comp[n].y+7) >> 3; for (j=0; j < h; ++j) { for (i=0; i < w; ++i) { short *data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w); if (z->spec_start == 0) { if (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n)) return 0; } else { int ha = z->img_comp[n].ha; if (!stbi__jpeg_decode_block_prog_ac(z, data, &z->huff_ac[ha], z->fast_ac[ha])) return 0; } // every data block is an MCU, so countdown the restart interval if (--z->todo <= 0) { if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); if (!STBI__RESTART(z->marker)) return 1; stbi__jpeg_reset(z); } } } return 1; } else { // interleaved int i,j,k,x,y; for (j=0; j < z->img_mcu_y; ++j) { for (i=0; i < z->img_mcu_x; ++i) { // scan an interleaved mcu... process scan_n components in order for (k=0; k < z->scan_n; ++k) { int n = z->order[k]; // scan out an mcu's worth of this component; that's just determined // by the basic H and V specified for the component for (y=0; y < z->img_comp[n].v; ++y) { for (x=0; x < z->img_comp[n].h; ++x) { int x2 = (i*z->img_comp[n].h + x); int y2 = (j*z->img_comp[n].v + y); short *data = z->img_comp[n].coeff + 64 * (x2 + y2 * z->img_comp[n].coeff_w); if (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n)) return 0; } } } // after all interleaved components, that's an interleaved MCU, // so now count down the restart interval if (--z->todo <= 0) { if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); if (!STBI__RESTART(z->marker)) return 1; stbi__jpeg_reset(z); } } } return 1; } } } static void stbi__jpeg_dequantize(short *data, stbi__uint16 *dequant) { int i; for (i=0; i < 64; ++i) data[i] *= dequant[i]; } static void stbi__jpeg_finish(stbi__jpeg *z) { if (z->progressive) { // dequantize and idct the data int i,j,n; for (n=0; n < z->s->img_n; ++n) { int w = (z->img_comp[n].x+7) >> 3; int h = (z->img_comp[n].y+7) >> 3; for (j=0; j < h; ++j) { for (i=0; i < w; ++i) { short *data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w); stbi__jpeg_dequantize(data, z->dequant[z->img_comp[n].tq]); z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data); } } } } } static int stbi__process_marker(stbi__jpeg *z, int m) { int L; switch (m) { case STBI__MARKER_none: // no marker found return stbi__err("expected marker","Corrupt JPEG"); case 0xDD: // DRI - specify restart interval if (stbi__get16be(z->s) != 4) return stbi__err("bad DRI len","Corrupt JPEG"); z->restart_interval = stbi__get16be(z->s); return 1; case 0xDB: // DQT - define quantization table L = stbi__get16be(z->s)-2; while (L > 0) { int q = stbi__get8(z->s); int p = q >> 4, sixteen = (p != 0); int t = q & 15,i; if (p != 0 && p != 1) return stbi__err("bad DQT type","Corrupt JPEG"); if (t > 3) return stbi__err("bad DQT table","Corrupt JPEG"); for (i=0; i < 64; ++i) z->dequant[t][stbi__jpeg_dezigzag[i]] = (stbi__uint16)(sixteen ? stbi__get16be(z->s) : stbi__get8(z->s)); L -= (sixteen ? 129 : 65); } return L==0; case 0xC4: // DHT - define huffman table L = stbi__get16be(z->s)-2; while (L > 0) { stbi_uc *v; int sizes[16],i,n=0; int q = stbi__get8(z->s); int tc = q >> 4; int th = q & 15; if (tc > 1 || th > 3) return stbi__err("bad DHT header","Corrupt JPEG"); for (i=0; i < 16; ++i) { sizes[i] = stbi__get8(z->s); n += sizes[i]; } L -= 17; if (tc == 0) { if (!stbi__build_huffman(z->huff_dc+th, sizes)) return 0; v = z->huff_dc[th].values; } else { if (!stbi__build_huffman(z->huff_ac+th, sizes)) return 0; v = z->huff_ac[th].values; } for (i=0; i < n; ++i) v[i] = stbi__get8(z->s); if (tc != 0) stbi__build_fast_ac(z->fast_ac[th], z->huff_ac + th); L -= n; } return L==0; } // check for comment block or APP blocks if ((m >= 0xE0 && m <= 0xEF) || m == 0xFE) { L = stbi__get16be(z->s); if (L < 2) { if (m == 0xFE) return stbi__err("bad COM len","Corrupt JPEG"); else return stbi__err("bad APP len","Corrupt JPEG"); } L -= 2; if (m == 0xE0 && L >= 5) { // JFIF APP0 segment static const unsigned char tag[5] = {'J','F','I','F','\0'}; int ok = 1; int i; for (i=0; i < 5; ++i) if (stbi__get8(z->s) != tag[i]) ok = 0; L -= 5; if (ok) z->jfif = 1; } else if (m == 0xEE && L >= 12) { // Adobe APP14 segment static const unsigned char tag[6] = {'A','d','o','b','e','\0'}; int ok = 1; int i; for (i=0; i < 6; ++i) if (stbi__get8(z->s) != tag[i]) ok = 0; L -= 6; if (ok) { stbi__get8(z->s); // version stbi__get16be(z->s); // flags0 stbi__get16be(z->s); // flags1 z->app14_color_transform = stbi__get8(z->s); // color transform L -= 6; } } stbi__skip(z->s, L); return 1; } return stbi__err("unknown marker","Corrupt JPEG"); } // after we see SOS static int stbi__process_scan_header(stbi__jpeg *z) { int i; int Ls = stbi__get16be(z->s); z->scan_n = stbi__get8(z->s); if (z->scan_n < 1 || z->scan_n > 4 || z->scan_n > (int) z->s->img_n) return stbi__err("bad SOS component count","Corrupt JPEG"); if (Ls != 6+2*z->scan_n) return stbi__err("bad SOS len","Corrupt JPEG"); for (i=0; i < z->scan_n; ++i) { int id = stbi__get8(z->s), which; int q = stbi__get8(z->s); for (which = 0; which < z->s->img_n; ++which) if (z->img_comp[which].id == id) break; if (which == z->s->img_n) return 0; // no match z->img_comp[which].hd = q >> 4; if (z->img_comp[which].hd > 3) return stbi__err("bad DC huff","Corrupt JPEG"); z->img_comp[which].ha = q & 15; if (z->img_comp[which].ha > 3) return stbi__err("bad AC huff","Corrupt JPEG"); z->order[i] = which; } { int aa; z->spec_start = stbi__get8(z->s); z->spec_end = stbi__get8(z->s); // should be 63, but might be 0 aa = stbi__get8(z->s); z->succ_high = (aa >> 4); z->succ_low = (aa & 15); if (z->progressive) { if (z->spec_start > 63 || z->spec_end > 63 || z->spec_start > z->spec_end || z->succ_high > 13 || z->succ_low > 13) return stbi__err("bad SOS", "Corrupt JPEG"); } else { if (z->spec_start != 0) return stbi__err("bad SOS","Corrupt JPEG"); if (z->succ_high != 0 || z->succ_low != 0) return stbi__err("bad SOS","Corrupt JPEG"); z->spec_end = 63; } } return 1; } static int stbi__free_jpeg_components(stbi__jpeg *z, int ncomp, int why) { int i; for (i=0; i < ncomp; ++i) { if (z->img_comp[i].raw_data) { STBI_FREE(z->img_comp[i].raw_data); z->img_comp[i].raw_data = NULL; z->img_comp[i].data = NULL; } if (z->img_comp[i].raw_coeff) { STBI_FREE(z->img_comp[i].raw_coeff); z->img_comp[i].raw_coeff = 0; z->img_comp[i].coeff = 0; } if (z->img_comp[i].linebuf) { STBI_FREE(z->img_comp[i].linebuf); z->img_comp[i].linebuf = NULL; } } return why; } static int stbi__process_frame_header(stbi__jpeg *z, int scan) { stbi__context *s = z->s; int Lf,p,i,q, h_max=1,v_max=1,c; Lf = stbi__get16be(s); if (Lf < 11) return stbi__err("bad SOF len","Corrupt JPEG"); // JPEG p = stbi__get8(s); if (p != 8) return stbi__err("only 8-bit","JPEG format not supported: 8-bit only"); // JPEG baseline s->img_y = stbi__get16be(s); if (s->img_y == 0) return stbi__err("no header height", "JPEG format not supported: delayed height"); // Legal, but we don't handle it--but neither does IJG s->img_x = stbi__get16be(s); if (s->img_x == 0) return stbi__err("0 width","Corrupt JPEG"); // JPEG requires if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); c = stbi__get8(s); if (c != 3 && c != 1 && c != 4) return stbi__err("bad component count","Corrupt JPEG"); s->img_n = c; for (i=0; i < c; ++i) { z->img_comp[i].data = NULL; z->img_comp[i].linebuf = NULL; } if (Lf != 8+3*s->img_n) return stbi__err("bad SOF len","Corrupt JPEG"); z->rgb = 0; for (i=0; i < s->img_n; ++i) { static const unsigned char rgb[3] = { 'R', 'G', 'B' }; z->img_comp[i].id = stbi__get8(s); if (s->img_n == 3 && z->img_comp[i].id == rgb[i]) ++z->rgb; q = stbi__get8(s); z->img_comp[i].h = (q >> 4); if (!z->img_comp[i].h || z->img_comp[i].h > 4) return stbi__err("bad H","Corrupt JPEG"); z->img_comp[i].v = q & 15; if (!z->img_comp[i].v || z->img_comp[i].v > 4) return stbi__err("bad V","Corrupt JPEG"); z->img_comp[i].tq = stbi__get8(s); if (z->img_comp[i].tq > 3) return stbi__err("bad TQ","Corrupt JPEG"); } if (scan != STBI__SCAN_load) return 1; if (!stbi__mad3sizes_valid(s->img_x, s->img_y, s->img_n, 0)) return stbi__err("too large", "Image too large to decode"); for (i=0; i < s->img_n; ++i) { if (z->img_comp[i].h > h_max) h_max = z->img_comp[i].h; if (z->img_comp[i].v > v_max) v_max = z->img_comp[i].v; } // compute interleaved mcu info z->img_h_max = h_max; z->img_v_max = v_max; z->img_mcu_w = h_max * 8; z->img_mcu_h = v_max * 8; // these sizes can't be more than 17 bits z->img_mcu_x = (s->img_x + z->img_mcu_w-1) / z->img_mcu_w; z->img_mcu_y = (s->img_y + z->img_mcu_h-1) / z->img_mcu_h; for (i=0; i < s->img_n; ++i) { // number of effective pixels (e.g. for non-interleaved MCU) z->img_comp[i].x = (s->img_x * z->img_comp[i].h + h_max-1) / h_max; z->img_comp[i].y = (s->img_y * z->img_comp[i].v + v_max-1) / v_max; // to simplify generation, we'll allocate enough memory to decode // the bogus oversized data from using interleaved MCUs and their // big blocks (e.g. a 16x16 iMCU on an image of width 33); we won't // discard the extra data until colorspace conversion // // img_mcu_x, img_mcu_y: <=17 bits; comp[i].h and .v are <=4 (checked earlier) // so these muls can't overflow with 32-bit ints (which we require) z->img_comp[i].w2 = z->img_mcu_x * z->img_comp[i].h * 8; z->img_comp[i].h2 = z->img_mcu_y * z->img_comp[i].v * 8; z->img_comp[i].coeff = 0; z->img_comp[i].raw_coeff = 0; z->img_comp[i].linebuf = NULL; z->img_comp[i].raw_data = stbi__malloc_mad2(z->img_comp[i].w2, z->img_comp[i].h2, 15); if (z->img_comp[i].raw_data == NULL) return stbi__free_jpeg_components(z, i+1, stbi__err("outofmem", "Out of memory")); // align blocks for idct using mmx/sse z->img_comp[i].data = (stbi_uc*) (((size_t) z->img_comp[i].raw_data + 15) & ~15); if (z->progressive) { // w2, h2 are multiples of 8 (see above) z->img_comp[i].coeff_w = z->img_comp[i].w2 / 8; z->img_comp[i].coeff_h = z->img_comp[i].h2 / 8; z->img_comp[i].raw_coeff = stbi__malloc_mad3(z->img_comp[i].w2, z->img_comp[i].h2, sizeof(short), 15); if (z->img_comp[i].raw_coeff == NULL) return stbi__free_jpeg_components(z, i+1, stbi__err("outofmem", "Out of memory")); z->img_comp[i].coeff = (short*) (((size_t) z->img_comp[i].raw_coeff + 15) & ~15); } } return 1; } // use comparisons since in some cases we handle more than one case (e.g. SOF) #define stbi__DNL(x) ((x) == 0xdc) #define stbi__SOI(x) ((x) == 0xd8) #define stbi__EOI(x) ((x) == 0xd9) #define stbi__SOF(x) ((x) == 0xc0 || (x) == 0xc1 || (x) == 0xc2) #define stbi__SOS(x) ((x) == 0xda) #define stbi__SOF_progressive(x) ((x) == 0xc2) static int stbi__decode_jpeg_header(stbi__jpeg *z, int scan) { int m; z->jfif = 0; z->app14_color_transform = -1; // valid values are 0,1,2 z->marker = STBI__MARKER_none; // initialize cached marker to empty m = stbi__get_marker(z); if (!stbi__SOI(m)) return stbi__err("no SOI","Corrupt JPEG"); if (scan == STBI__SCAN_type) return 1; m = stbi__get_marker(z); while (!stbi__SOF(m)) { if (!stbi__process_marker(z,m)) return 0; m = stbi__get_marker(z); while (m == STBI__MARKER_none) { // some files have extra padding after their blocks, so ok, we'll scan if (stbi__at_eof(z->s)) return stbi__err("no SOF", "Corrupt JPEG"); m = stbi__get_marker(z); } } z->progressive = stbi__SOF_progressive(m); if (!stbi__process_frame_header(z, scan)) return 0; return 1; } // decode image to YCbCr format static int stbi__decode_jpeg_image(stbi__jpeg *j) { int m; for (m = 0; m < 4; m++) { j->img_comp[m].raw_data = NULL; j->img_comp[m].raw_coeff = NULL; } j->restart_interval = 0; if (!stbi__decode_jpeg_header(j, STBI__SCAN_load)) return 0; m = stbi__get_marker(j); while (!stbi__EOI(m)) { if (stbi__SOS(m)) { if (!stbi__process_scan_header(j)) return 0; if (!stbi__parse_entropy_coded_data(j)) return 0; if (j->marker == STBI__MARKER_none ) { // handle 0s at the end of image data from IP Kamera 9060 while (!stbi__at_eof(j->s)) { int x = stbi__get8(j->s); if (x == 255) { j->marker = stbi__get8(j->s); break; } } // if we reach eof without hitting a marker, stbi__get_marker() below will fail and we'll eventually return 0 } } else if (stbi__DNL(m)) { int Ld = stbi__get16be(j->s); stbi__uint32 NL = stbi__get16be(j->s); if (Ld != 4) return stbi__err("bad DNL len", "Corrupt JPEG"); if (NL != j->s->img_y) return stbi__err("bad DNL height", "Corrupt JPEG"); } else { if (!stbi__process_marker(j, m)) return 0; } m = stbi__get_marker(j); } if (j->progressive) stbi__jpeg_finish(j); return 1; } // static jfif-centered resampling (across block boundaries) typedef stbi_uc *(*resample_row_func)(stbi_uc *out, stbi_uc *in0, stbi_uc *in1, int w, int hs); #define stbi__div4(x) ((stbi_uc) ((x) >> 2)) static stbi_uc *resample_row_1(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) { STBI_NOTUSED(out); STBI_NOTUSED(in_far); STBI_NOTUSED(w); STBI_NOTUSED(hs); return in_near; } static stbi_uc* stbi__resample_row_v_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) { // need to generate two samples vertically for every one in input int i; STBI_NOTUSED(hs); for (i=0; i < w; ++i) out[i] = stbi__div4(3*in_near[i] + in_far[i] + 2); return out; } static stbi_uc* stbi__resample_row_h_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) { // need to generate two samples horizontally for every one in input int i; stbi_uc *input = in_near; if (w == 1) { // if only one sample, can't do any interpolation out[0] = out[1] = input[0]; return out; } out[0] = input[0]; out[1] = stbi__div4(input[0]*3 + input[1] + 2); for (i=1; i < w-1; ++i) { int n = 3*input[i]+2; out[i*2+0] = stbi__div4(n+input[i-1]); out[i*2+1] = stbi__div4(n+input[i+1]); } out[i*2+0] = stbi__div4(input[w-2]*3 + input[w-1] + 2); out[i*2+1] = input[w-1]; STBI_NOTUSED(in_far); STBI_NOTUSED(hs); return out; } #define stbi__div16(x) ((stbi_uc) ((x) >> 4)) static stbi_uc *stbi__resample_row_hv_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) { // need to generate 2x2 samples for every one in input int i,t0,t1; if (w == 1) { out[0] = out[1] = stbi__div4(3*in_near[0] + in_far[0] + 2); return out; } t1 = 3*in_near[0] + in_far[0]; out[0] = stbi__div4(t1+2); for (i=1; i < w; ++i) { t0 = t1; t1 = 3*in_near[i]+in_far[i]; out[i*2-1] = stbi__div16(3*t0 + t1 + 8); out[i*2 ] = stbi__div16(3*t1 + t0 + 8); } out[w*2-1] = stbi__div4(t1+2); STBI_NOTUSED(hs); return out; } #if defined(STBI_SSE2) || defined(STBI_NEON) static stbi_uc *stbi__resample_row_hv_2_simd(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) { // need to generate 2x2 samples for every one in input int i=0,t0,t1; if (w == 1) { out[0] = out[1] = stbi__div4(3*in_near[0] + in_far[0] + 2); return out; } t1 = 3*in_near[0] + in_far[0]; // process groups of 8 pixels for as long as we can. // note we can't handle the last pixel in a row in this loop // because we need to handle the filter boundary conditions. for (; i < ((w-1) & ~7); i += 8) { #if defined(STBI_SSE2) // load and perform the vertical filtering pass // this uses 3*x + y = 4*x + (y - x) __m128i zero = _mm_setzero_si128(); __m128i farb = _mm_loadl_epi64((__m128i *) (in_far + i)); __m128i nearb = _mm_loadl_epi64((__m128i *) (in_near + i)); __m128i farw = _mm_unpacklo_epi8(farb, zero); __m128i nearw = _mm_unpacklo_epi8(nearb, zero); __m128i diff = _mm_sub_epi16(farw, nearw); __m128i nears = _mm_slli_epi16(nearw, 2); __m128i curr = _mm_add_epi16(nears, diff); // current row // horizontal filter works the same based on shifted vers of current // row. "prev" is current row shifted right by 1 pixel; we need to // insert the previous pixel value (from t1). // "next" is current row shifted left by 1 pixel, with first pixel // of next block of 8 pixels added in. __m128i prv0 = _mm_slli_si128(curr, 2); __m128i nxt0 = _mm_srli_si128(curr, 2); __m128i prev = _mm_insert_epi16(prv0, t1, 0); __m128i next = _mm_insert_epi16(nxt0, 3*in_near[i+8] + in_far[i+8], 7); // horizontal filter, polyphase implementation since it's convenient: // even pixels = 3*cur + prev = cur*4 + (prev - cur) // odd pixels = 3*cur + next = cur*4 + (next - cur) // note the shared term. __m128i bias = _mm_set1_epi16(8); __m128i curs = _mm_slli_epi16(curr, 2); __m128i prvd = _mm_sub_epi16(prev, curr); __m128i nxtd = _mm_sub_epi16(next, curr); __m128i curb = _mm_add_epi16(curs, bias); __m128i even = _mm_add_epi16(prvd, curb); __m128i odd = _mm_add_epi16(nxtd, curb); // interleave even and odd pixels, then undo scaling. __m128i int0 = _mm_unpacklo_epi16(even, odd); __m128i int1 = _mm_unpackhi_epi16(even, odd); __m128i de0 = _mm_srli_epi16(int0, 4); __m128i de1 = _mm_srli_epi16(int1, 4); // pack and write output __m128i outv = _mm_packus_epi16(de0, de1); _mm_storeu_si128((__m128i *) (out + i*2), outv); #elif defined(STBI_NEON) // load and perform the vertical filtering pass // this uses 3*x + y = 4*x + (y - x) uint8x8_t farb = vld1_u8(in_far + i); uint8x8_t nearb = vld1_u8(in_near + i); int16x8_t diff = vreinterpretq_s16_u16(vsubl_u8(farb, nearb)); int16x8_t nears = vreinterpretq_s16_u16(vshll_n_u8(nearb, 2)); int16x8_t curr = vaddq_s16(nears, diff); // current row // horizontal filter works the same based on shifted vers of current // row. "prev" is current row shifted right by 1 pixel; we need to // insert the previous pixel value (from t1). // "next" is current row shifted left by 1 pixel, with first pixel // of next block of 8 pixels added in. int16x8_t prv0 = vextq_s16(curr, curr, 7); int16x8_t nxt0 = vextq_s16(curr, curr, 1); int16x8_t prev = vsetq_lane_s16(t1, prv0, 0); int16x8_t next = vsetq_lane_s16(3*in_near[i+8] + in_far[i+8], nxt0, 7); // horizontal filter, polyphase implementation since it's convenient: // even pixels = 3*cur + prev = cur*4 + (prev - cur) // odd pixels = 3*cur + next = cur*4 + (next - cur) // note the shared term. int16x8_t curs = vshlq_n_s16(curr, 2); int16x8_t prvd = vsubq_s16(prev, curr); int16x8_t nxtd = vsubq_s16(next, curr); int16x8_t even = vaddq_s16(curs, prvd); int16x8_t odd = vaddq_s16(curs, nxtd); // undo scaling and round, then store with even/odd phases interleaved uint8x8x2_t o; o.val[0] = vqrshrun_n_s16(even, 4); o.val[1] = vqrshrun_n_s16(odd, 4); vst2_u8(out + i*2, o); #endif // "previous" value for next iter t1 = 3*in_near[i+7] + in_far[i+7]; } t0 = t1; t1 = 3*in_near[i] + in_far[i]; out[i*2] = stbi__div16(3*t1 + t0 + 8); for (++i; i < w; ++i) { t0 = t1; t1 = 3*in_near[i]+in_far[i]; out[i*2-1] = stbi__div16(3*t0 + t1 + 8); out[i*2 ] = stbi__div16(3*t1 + t0 + 8); } out[w*2-1] = stbi__div4(t1+2); STBI_NOTUSED(hs); return out; } #endif static stbi_uc *stbi__resample_row_generic(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) { // resample with nearest-neighbor int i,j; STBI_NOTUSED(in_far); for (i=0; i < w; ++i) for (j=0; j < hs; ++j) out[i*hs+j] = in_near[i]; return out; } // this is a reduced-precision calculation of YCbCr-to-RGB introduced // to make sure the code produces the same results in both SIMD and scalar #define stbi__float2fixed(x) (((int) ((x) * 4096.0f + 0.5f)) << 8) static void stbi__YCbCr_to_RGB_row(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step) { int i; for (i=0; i < count; ++i) { int y_fixed = (y[i] << 20) + (1<<19); // rounding int r,g,b; int cr = pcr[i] - 128; int cb = pcb[i] - 128; r = y_fixed + cr* stbi__float2fixed(1.40200f); g = y_fixed + (cr*-stbi__float2fixed(0.71414f)) + ((cb*-stbi__float2fixed(0.34414f)) & 0xffff0000); b = y_fixed + cb* stbi__float2fixed(1.77200f); r >>= 20; g >>= 20; b >>= 20; if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; } if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; } if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; } out[0] = (stbi_uc)r; out[1] = (stbi_uc)g; out[2] = (stbi_uc)b; out[3] = 255; out += step; } } #if defined(STBI_SSE2) || defined(STBI_NEON) static void stbi__YCbCr_to_RGB_simd(stbi_uc *out, stbi_uc const *y, stbi_uc const *pcb, stbi_uc const *pcr, int count, int step) { int i = 0; #ifdef STBI_SSE2 // step == 3 is pretty ugly on the final interleave, and i'm not convinced // it's useful in practice (you wouldn't use it for textures, for example). // so just accelerate step == 4 case. if (step == 4) { // this is a fairly straightforward implementation and not super-optimized. __m128i signflip = _mm_set1_epi8(-0x80); __m128i cr_const0 = _mm_set1_epi16( (short) ( 1.40200f*4096.0f+0.5f)); __m128i cr_const1 = _mm_set1_epi16( - (short) ( 0.71414f*4096.0f+0.5f)); __m128i cb_const0 = _mm_set1_epi16( - (short) ( 0.34414f*4096.0f+0.5f)); __m128i cb_const1 = _mm_set1_epi16( (short) ( 1.77200f*4096.0f+0.5f)); __m128i y_bias = _mm_set1_epi8((char) (unsigned char) 128); __m128i xw = _mm_set1_epi16(255); // alpha channel for (; i+7 < count; i += 8) { // load __m128i y_bytes = _mm_loadl_epi64((__m128i *) (y+i)); __m128i cr_bytes = _mm_loadl_epi64((__m128i *) (pcr+i)); __m128i cb_bytes = _mm_loadl_epi64((__m128i *) (pcb+i)); __m128i cr_biased = _mm_xor_si128(cr_bytes, signflip); // -128 __m128i cb_biased = _mm_xor_si128(cb_bytes, signflip); // -128 // unpack to short (and left-shift cr, cb by 8) __m128i yw = _mm_unpacklo_epi8(y_bias, y_bytes); __m128i crw = _mm_unpacklo_epi8(_mm_setzero_si128(), cr_biased); __m128i cbw = _mm_unpacklo_epi8(_mm_setzero_si128(), cb_biased); // color transform __m128i yws = _mm_srli_epi16(yw, 4); __m128i cr0 = _mm_mulhi_epi16(cr_const0, crw); __m128i cb0 = _mm_mulhi_epi16(cb_const0, cbw); __m128i cb1 = _mm_mulhi_epi16(cbw, cb_const1); __m128i cr1 = _mm_mulhi_epi16(crw, cr_const1); __m128i rws = _mm_add_epi16(cr0, yws); __m128i gwt = _mm_add_epi16(cb0, yws); __m128i bws = _mm_add_epi16(yws, cb1); __m128i gws = _mm_add_epi16(gwt, cr1); // descale __m128i rw = _mm_srai_epi16(rws, 4); __m128i bw = _mm_srai_epi16(bws, 4); __m128i gw = _mm_srai_epi16(gws, 4); // back to byte, set up for transpose __m128i brb = _mm_packus_epi16(rw, bw); __m128i gxb = _mm_packus_epi16(gw, xw); // transpose to interleave channels __m128i t0 = _mm_unpacklo_epi8(brb, gxb); __m128i t1 = _mm_unpackhi_epi8(brb, gxb); __m128i o0 = _mm_unpacklo_epi16(t0, t1); __m128i o1 = _mm_unpackhi_epi16(t0, t1); // store _mm_storeu_si128((__m128i *) (out + 0), o0); _mm_storeu_si128((__m128i *) (out + 16), o1); out += 32; } } #endif #ifdef STBI_NEON // in this version, step=3 support would be easy to add. but is there demand? if (step == 4) { // this is a fairly straightforward implementation and not super-optimized. uint8x8_t signflip = vdup_n_u8(0x80); int16x8_t cr_const0 = vdupq_n_s16( (short) ( 1.40200f*4096.0f+0.5f)); int16x8_t cr_const1 = vdupq_n_s16( - (short) ( 0.71414f*4096.0f+0.5f)); int16x8_t cb_const0 = vdupq_n_s16( - (short) ( 0.34414f*4096.0f+0.5f)); int16x8_t cb_const1 = vdupq_n_s16( (short) ( 1.77200f*4096.0f+0.5f)); for (; i+7 < count; i += 8) { // load uint8x8_t y_bytes = vld1_u8(y + i); uint8x8_t cr_bytes = vld1_u8(pcr + i); uint8x8_t cb_bytes = vld1_u8(pcb + i); int8x8_t cr_biased = vreinterpret_s8_u8(vsub_u8(cr_bytes, signflip)); int8x8_t cb_biased = vreinterpret_s8_u8(vsub_u8(cb_bytes, signflip)); // expand to s16 int16x8_t yws = vreinterpretq_s16_u16(vshll_n_u8(y_bytes, 4)); int16x8_t crw = vshll_n_s8(cr_biased, 7); int16x8_t cbw = vshll_n_s8(cb_biased, 7); // color transform int16x8_t cr0 = vqdmulhq_s16(crw, cr_const0); int16x8_t cb0 = vqdmulhq_s16(cbw, cb_const0); int16x8_t cr1 = vqdmulhq_s16(crw, cr_const1); int16x8_t cb1 = vqdmulhq_s16(cbw, cb_const1); int16x8_t rws = vaddq_s16(yws, cr0); int16x8_t gws = vaddq_s16(vaddq_s16(yws, cb0), cr1); int16x8_t bws = vaddq_s16(yws, cb1); // undo scaling, round, convert to byte uint8x8x4_t o; o.val[0] = vqrshrun_n_s16(rws, 4); o.val[1] = vqrshrun_n_s16(gws, 4); o.val[2] = vqrshrun_n_s16(bws, 4); o.val[3] = vdup_n_u8(255); // store, interleaving r/g/b/a vst4_u8(out, o); out += 8*4; } } #endif for (; i < count; ++i) { int y_fixed = (y[i] << 20) + (1<<19); // rounding int r,g,b; int cr = pcr[i] - 128; int cb = pcb[i] - 128; r = y_fixed + cr* stbi__float2fixed(1.40200f); g = y_fixed + cr*-stbi__float2fixed(0.71414f) + ((cb*-stbi__float2fixed(0.34414f)) & 0xffff0000); b = y_fixed + cb* stbi__float2fixed(1.77200f); r >>= 20; g >>= 20; b >>= 20; if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; } if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; } if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; } out[0] = (stbi_uc)r; out[1] = (stbi_uc)g; out[2] = (stbi_uc)b; out[3] = 255; out += step; } } #endif // set up the kernels static void stbi__setup_jpeg(stbi__jpeg *j) { j->idct_block_kernel = stbi__idct_block; j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_row; j->resample_row_hv_2_kernel = stbi__resample_row_hv_2; #ifdef STBI_SSE2 if (stbi__sse2_available()) { j->idct_block_kernel = stbi__idct_simd; j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; } #endif #ifdef STBI_NEON j->idct_block_kernel = stbi__idct_simd; j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; #endif } // clean up the temporary component buffers static void stbi__cleanup_jpeg(stbi__jpeg *j) { stbi__free_jpeg_components(j, j->s->img_n, 0); } typedef struct { resample_row_func resample; stbi_uc *line0,*line1; int hs,vs; // expansion factor in each axis int w_lores; // horizontal pixels pre-expansion int ystep; // how far through vertical expansion we are int ypos; // which pre-expansion row we're on } stbi__resample; // fast 0..255 * 0..255 => 0..255 rounded multiplication static stbi_uc stbi__blinn_8x8(stbi_uc x, stbi_uc y) { unsigned int t = x*y + 128; return (stbi_uc) ((t + (t >>8)) >> 8); } static stbi_uc *load_jpeg_image(stbi__jpeg *z, int *out_x, int *out_y, int *comp, int req_comp) { int n, decode_n, is_rgb; z->s->img_n = 0; // make stbi__cleanup_jpeg safe // validate req_comp if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error"); // load a jpeg image from whichever source, but leave in YCbCr format if (!stbi__decode_jpeg_image(z)) { stbi__cleanup_jpeg(z); return NULL; } // determine actual number of components to generate n = req_comp ? req_comp : z->s->img_n >= 3 ? 3 : 1; is_rgb = z->s->img_n == 3 && (z->rgb == 3 || (z->app14_color_transform == 0 && !z->jfif)); if (z->s->img_n == 3 && n < 3 && !is_rgb) decode_n = 1; else decode_n = z->s->img_n; // resample and color-convert { int k; unsigned int i,j; stbi_uc *output; stbi_uc *coutput[4] = { NULL, NULL, NULL, NULL }; stbi__resample res_comp[4]; for (k=0; k < decode_n; ++k) { stbi__resample *r = &res_comp[k]; // allocate line buffer big enough for upsampling off the edges // with upsample factor of 4 z->img_comp[k].linebuf = (stbi_uc *) stbi__malloc(z->s->img_x + 3); if (!z->img_comp[k].linebuf) { stbi__cleanup_jpeg(z); return stbi__errpuc("outofmem", "Out of memory"); } r->hs = z->img_h_max / z->img_comp[k].h; r->vs = z->img_v_max / z->img_comp[k].v; r->ystep = r->vs >> 1; r->w_lores = (z->s->img_x + r->hs-1) / r->hs; r->ypos = 0; r->line0 = r->line1 = z->img_comp[k].data; if (r->hs == 1 && r->vs == 1) r->resample = resample_row_1; else if (r->hs == 1 && r->vs == 2) r->resample = stbi__resample_row_v_2; else if (r->hs == 2 && r->vs == 1) r->resample = stbi__resample_row_h_2; else if (r->hs == 2 && r->vs == 2) r->resample = z->resample_row_hv_2_kernel; else r->resample = stbi__resample_row_generic; } // can't error after this so, this is safe output = (stbi_uc *) stbi__malloc_mad3(n, z->s->img_x, z->s->img_y, 1); if (!output) { stbi__cleanup_jpeg(z); return stbi__errpuc("outofmem", "Out of memory"); } // now go ahead and resample for (j=0; j < z->s->img_y; ++j) { stbi_uc *out = output + n * z->s->img_x * j; for (k=0; k < decode_n; ++k) { stbi__resample *r = &res_comp[k]; int y_bot = r->ystep >= (r->vs >> 1); coutput[k] = r->resample(z->img_comp[k].linebuf, y_bot ? r->line1 : r->line0, y_bot ? r->line0 : r->line1, r->w_lores, r->hs); if (++r->ystep >= r->vs) { r->ystep = 0; r->line0 = r->line1; if (++r->ypos < z->img_comp[k].y) r->line1 += z->img_comp[k].w2; } } if (n >= 3) { stbi_uc *y = coutput[0]; if (z->s->img_n == 3) { if (is_rgb) { for (i=0; i < z->s->img_x; ++i) { out[0] = y[i]; out[1] = coutput[1][i]; out[2] = coutput[2][i]; out[3] = 255; out += n; } } else { z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); } } else if (z->s->img_n == 4) { if (z->app14_color_transform == 0) { // CMYK for (i=0; i < z->s->img_x; ++i) { stbi_uc m = coutput[3][i]; out[0] = stbi__blinn_8x8(coutput[0][i], m); out[1] = stbi__blinn_8x8(coutput[1][i], m); out[2] = stbi__blinn_8x8(coutput[2][i], m); out[3] = 255; out += n; } } else if (z->app14_color_transform == 2) { // YCCK z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); for (i=0; i < z->s->img_x; ++i) { stbi_uc m = coutput[3][i]; out[0] = stbi__blinn_8x8(255 - out[0], m); out[1] = stbi__blinn_8x8(255 - out[1], m); out[2] = stbi__blinn_8x8(255 - out[2], m); out += n; } } else { // YCbCr + alpha? Ignore the fourth channel for now z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); } } else for (i=0; i < z->s->img_x; ++i) { out[0] = out[1] = out[2] = y[i]; out[3] = 255; // not used if n==3 out += n; } } else { if (is_rgb) { if (n == 1) for (i=0; i < z->s->img_x; ++i) *out++ = stbi__compute_y(coutput[0][i], coutput[1][i], coutput[2][i]); else { for (i=0; i < z->s->img_x; ++i, out += 2) { out[0] = stbi__compute_y(coutput[0][i], coutput[1][i], coutput[2][i]); out[1] = 255; } } } else if (z->s->img_n == 4 && z->app14_color_transform == 0) { for (i=0; i < z->s->img_x; ++i) { stbi_uc m = coutput[3][i]; stbi_uc r = stbi__blinn_8x8(coutput[0][i], m); stbi_uc g = stbi__blinn_8x8(coutput[1][i], m); stbi_uc b = stbi__blinn_8x8(coutput[2][i], m); out[0] = stbi__compute_y(r, g, b); out[1] = 255; out += n; } } else if (z->s->img_n == 4 && z->app14_color_transform == 2) { for (i=0; i < z->s->img_x; ++i) { out[0] = stbi__blinn_8x8(255 - coutput[0][i], coutput[3][i]); out[1] = 255; out += n; } } else { stbi_uc *y = coutput[0]; if (n == 1) for (i=0; i < z->s->img_x; ++i) out[i] = y[i]; else for (i=0; i < z->s->img_x; ++i) { *out++ = y[i]; *out++ = 255; } } } } stbi__cleanup_jpeg(z); *out_x = z->s->img_x; *out_y = z->s->img_y; if (comp) *comp = z->s->img_n >= 3 ? 3 : 1; // report original components, not output return output; } } static void *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) { unsigned char* result; stbi__jpeg* j = (stbi__jpeg*) stbi__malloc(sizeof(stbi__jpeg)); STBI_NOTUSED(ri); j->s = s; stbi__setup_jpeg(j); result = load_jpeg_image(j, x,y,comp,req_comp); STBI_FREE(j); return result; } static int stbi__jpeg_test(stbi__context *s) { int r; stbi__jpeg* j = (stbi__jpeg*)stbi__malloc(sizeof(stbi__jpeg)); j->s = s; stbi__setup_jpeg(j); r = stbi__decode_jpeg_header(j, STBI__SCAN_type); stbi__rewind(s); STBI_FREE(j); return r; } static int stbi__jpeg_info_raw(stbi__jpeg *j, int *x, int *y, int *comp) { if (!stbi__decode_jpeg_header(j, STBI__SCAN_header)) { stbi__rewind( j->s ); return 0; } if (x) *x = j->s->img_x; if (y) *y = j->s->img_y; if (comp) *comp = j->s->img_n >= 3 ? 3 : 1; return 1; } static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp) { int result; stbi__jpeg* j = (stbi__jpeg*) (stbi__malloc(sizeof(stbi__jpeg))); j->s = s; result = stbi__jpeg_info_raw(j, x, y, comp); STBI_FREE(j); return result; } #endif // public domain zlib decode v0.2 Sean Barrett 2006-11-18 // simple implementation // - all input must be provided in an upfront buffer // - all output is written to a single output buffer (can malloc/realloc) // performance // - fast huffman #ifndef STBI_NO_ZLIB // fast-way is faster to check than jpeg huffman, but slow way is slower #define STBI__ZFAST_BITS 9 // accelerate all cases in default tables #define STBI__ZFAST_MASK ((1 << STBI__ZFAST_BITS) - 1) // zlib-style huffman encoding // (jpegs packs from left, zlib from right, so can't share code) typedef struct { stbi__uint16 fast[1 << STBI__ZFAST_BITS]; stbi__uint16 firstcode[16]; int maxcode[17]; stbi__uint16 firstsymbol[16]; stbi_uc size[288]; stbi__uint16 value[288]; } stbi__zhuffman; stbi_inline static int stbi__bitreverse16(int n) { n = ((n & 0xAAAA) >> 1) | ((n & 0x5555) << 1); n = ((n & 0xCCCC) >> 2) | ((n & 0x3333) << 2); n = ((n & 0xF0F0) >> 4) | ((n & 0x0F0F) << 4); n = ((n & 0xFF00) >> 8) | ((n & 0x00FF) << 8); return n; } stbi_inline static int stbi__bit_reverse(int v, int bits) { STBI_ASSERT(bits <= 16); // to bit reverse n bits, reverse 16 and shift // e.g. 11 bits, bit reverse and shift away 5 return stbi__bitreverse16(v) >> (16-bits); } static int stbi__zbuild_huffman(stbi__zhuffman *z, const stbi_uc *sizelist, int num) { int i,k=0; int code, next_code[16], sizes[17]; // DEFLATE spec for generating codes memset(sizes, 0, sizeof(sizes)); memset(z->fast, 0, sizeof(z->fast)); for (i=0; i < num; ++i) ++sizes[sizelist[i]]; sizes[0] = 0; for (i=1; i < 16; ++i) if (sizes[i] > (1 << i)) return stbi__err("bad sizes", "Corrupt PNG"); code = 0; for (i=1; i < 16; ++i) { next_code[i] = code; z->firstcode[i] = (stbi__uint16) code; z->firstsymbol[i] = (stbi__uint16) k; code = (code + sizes[i]); if (sizes[i]) if (code-1 >= (1 << i)) return stbi__err("bad codelengths","Corrupt PNG"); z->maxcode[i] = code << (16-i); // preshift for inner loop code <<= 1; k += sizes[i]; } z->maxcode[16] = 0x10000; // sentinel for (i=0; i < num; ++i) { int s = sizelist[i]; if (s) { int c = next_code[s] - z->firstcode[s] + z->firstsymbol[s]; stbi__uint16 fastv = (stbi__uint16) ((s << 9) | i); z->size [c] = (stbi_uc ) s; z->value[c] = (stbi__uint16) i; if (s <= STBI__ZFAST_BITS) { int j = stbi__bit_reverse(next_code[s],s); while (j < (1 << STBI__ZFAST_BITS)) { z->fast[j] = fastv; j += (1 << s); } } ++next_code[s]; } } return 1; } // zlib-from-memory implementation for PNG reading // because PNG allows splitting the zlib stream arbitrarily, // and it's annoying structurally to have PNG call ZLIB call PNG, // we require PNG read all the IDATs and combine them into a single // memory buffer typedef struct { stbi_uc *zbuffer, *zbuffer_end; int num_bits; stbi__uint32 code_buffer; char *zout; char *zout_start; char *zout_end; int z_expandable; stbi__zhuffman z_length, z_distance; } stbi__zbuf; stbi_inline static int stbi__zeof(stbi__zbuf *z) { return (z->zbuffer >= z->zbuffer_end); } stbi_inline static stbi_uc stbi__zget8(stbi__zbuf *z) { return stbi__zeof(z) ? 0 : *z->zbuffer++; } static void stbi__fill_bits(stbi__zbuf *z) { do { if (z->code_buffer >= (1U << z->num_bits)) { z->zbuffer = z->zbuffer_end; /* treat this as EOF so we fail. */ return; } z->code_buffer |= (unsigned int) stbi__zget8(z) << z->num_bits; z->num_bits += 8; } while (z->num_bits <= 24); } stbi_inline static unsigned int stbi__zreceive(stbi__zbuf *z, int n) { unsigned int k; if (z->num_bits < n) stbi__fill_bits(z); k = z->code_buffer & ((1 << n) - 1); z->code_buffer >>= n; z->num_bits -= n; return k; } static int stbi__zhuffman_decode_slowpath(stbi__zbuf *a, stbi__zhuffman *z) { int b,s,k; // not resolved by fast table, so compute it the slow way // use jpeg approach, which requires MSbits at top k = stbi__bit_reverse(a->code_buffer, 16); for (s=STBI__ZFAST_BITS+1; ; ++s) if (k < z->maxcode[s]) break; if (s >= 16) return -1; // invalid code! // code size is s, so: b = (k >> (16-s)) - z->firstcode[s] + z->firstsymbol[s]; if (b >= sizeof (z->size)) return -1; // some data was corrupt somewhere! if (z->size[b] != s) return -1; // was originally an assert, but report failure instead. a->code_buffer >>= s; a->num_bits -= s; return z->value[b]; } stbi_inline static int stbi__zhuffman_decode(stbi__zbuf *a, stbi__zhuffman *z) { int b,s; if (a->num_bits < 16) { if (stbi__zeof(a)) { return -1; /* report error for unexpected end of data. */ } stbi__fill_bits(a); } b = z->fast[a->code_buffer & STBI__ZFAST_MASK]; if (b) { s = b >> 9; a->code_buffer >>= s; a->num_bits -= s; return b & 511; } return stbi__zhuffman_decode_slowpath(a, z); } static int stbi__zexpand(stbi__zbuf *z, char *zout, int n) // need to make room for n bytes { char *q; unsigned int cur, limit, old_limit; z->zout = zout; if (!z->z_expandable) return stbi__err("output buffer limit","Corrupt PNG"); cur = (unsigned int) (z->zout - z->zout_start); limit = old_limit = (unsigned) (z->zout_end - z->zout_start); if (UINT_MAX - cur < (unsigned) n) return stbi__err("outofmem", "Out of memory"); while (cur + n > limit) { if(limit > UINT_MAX / 2) return stbi__err("outofmem", "Out of memory"); limit *= 2; } q = (char *) STBI_REALLOC_SIZED(z->zout_start, old_limit, limit); STBI_NOTUSED(old_limit); if (q == NULL) return stbi__err("outofmem", "Out of memory"); z->zout_start = q; z->zout = q + cur; z->zout_end = q + limit; return 1; } static const int stbi__zlength_base[31] = { 3,4,5,6,7,8,9,10,11,13, 15,17,19,23,27,31,35,43,51,59, 67,83,99,115,131,163,195,227,258,0,0 }; static const int stbi__zlength_extra[31]= { 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0 }; static const int stbi__zdist_base[32] = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193, 257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0}; static const int stbi__zdist_extra[32] = { 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13}; static int stbi__parse_huffman_block(stbi__zbuf *a) { char *zout = a->zout; for(;;) { int z = stbi__zhuffman_decode(a, &a->z_length); if (z < 256) { if (z < 0) return stbi__err("bad huffman code","Corrupt PNG"); // error in huffman codes if (zout >= a->zout_end) { if (!stbi__zexpand(a, zout, 1)) return 0; zout = a->zout; } *zout++ = (char) z; } else { stbi_uc *p; int len,dist; if (z == 256) { a->zout = zout; return 1; } z -= 257; len = stbi__zlength_base[z]; if (stbi__zlength_extra[z]) len += stbi__zreceive(a, stbi__zlength_extra[z]); z = stbi__zhuffman_decode(a, &a->z_distance); if (z < 0) return stbi__err("bad huffman code","Corrupt PNG"); dist = stbi__zdist_base[z]; if (stbi__zdist_extra[z]) dist += stbi__zreceive(a, stbi__zdist_extra[z]); if (zout - a->zout_start < dist) return stbi__err("bad dist","Corrupt PNG"); if (zout + len > a->zout_end) { if (!stbi__zexpand(a, zout, len)) return 0; zout = a->zout; } p = (stbi_uc *) (zout - dist); if (dist == 1) { // run of one byte; common in images. stbi_uc v = *p; if (len) { do *zout++ = v; while (--len); } } else { if (len) { do *zout++ = *p++; while (--len); } } } } } static int stbi__compute_huffman_codes(stbi__zbuf *a) { static const stbi_uc length_dezigzag[19] = { 16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15 }; stbi__zhuffman z_codelength; stbi_uc lencodes[286+32+137];//padding for maximum single op stbi_uc codelength_sizes[19]; int i,n; int hlit = stbi__zreceive(a,5) + 257; int hdist = stbi__zreceive(a,5) + 1; int hclen = stbi__zreceive(a,4) + 4; int ntot = hlit + hdist; memset(codelength_sizes, 0, sizeof(codelength_sizes)); for (i=0; i < hclen; ++i) { int s = stbi__zreceive(a,3); codelength_sizes[length_dezigzag[i]] = (stbi_uc) s; } if (!stbi__zbuild_huffman(&z_codelength, codelength_sizes, 19)) return 0; n = 0; while (n < ntot) { int c = stbi__zhuffman_decode(a, &z_codelength); if (c < 0 || c >= 19) return stbi__err("bad codelengths", "Corrupt PNG"); if (c < 16) lencodes[n++] = (stbi_uc) c; else { stbi_uc fill = 0; if (c == 16) { c = stbi__zreceive(a,2)+3; if (n == 0) return stbi__err("bad codelengths", "Corrupt PNG"); fill = lencodes[n-1]; } else if (c == 17) { c = stbi__zreceive(a,3)+3; } else if (c == 18) { c = stbi__zreceive(a,7)+11; } else { return stbi__err("bad codelengths", "Corrupt PNG"); } if (ntot - n < c) return stbi__err("bad codelengths", "Corrupt PNG"); memset(lencodes+n, fill, c); n += c; } } if (n != ntot) return stbi__err("bad codelengths","Corrupt PNG"); if (!stbi__zbuild_huffman(&a->z_length, lencodes, hlit)) return 0; if (!stbi__zbuild_huffman(&a->z_distance, lencodes+hlit, hdist)) return 0; return 1; } static int stbi__parse_uncompressed_block(stbi__zbuf *a) { stbi_uc header[4]; int len,nlen,k; if (a->num_bits & 7) stbi__zreceive(a, a->num_bits & 7); // discard // drain the bit-packed data into header k = 0; while (a->num_bits > 0) { header[k++] = (stbi_uc) (a->code_buffer & 255); // suppress MSVC run-time check a->code_buffer >>= 8; a->num_bits -= 8; } if (a->num_bits < 0) return stbi__err("zlib corrupt","Corrupt PNG"); // now fill header the normal way while (k < 4) header[k++] = stbi__zget8(a); len = header[1] * 256 + header[0]; nlen = header[3] * 256 + header[2]; if (nlen != (len ^ 0xffff)) return stbi__err("zlib corrupt","Corrupt PNG"); if (a->zbuffer + len > a->zbuffer_end) return stbi__err("read past buffer","Corrupt PNG"); if (a->zout + len > a->zout_end) if (!stbi__zexpand(a, a->zout, len)) return 0; memcpy(a->zout, a->zbuffer, len); a->zbuffer += len; a->zout += len; return 1; } static int stbi__parse_zlib_header(stbi__zbuf *a) { int cmf = stbi__zget8(a); int cm = cmf & 15; /* int cinfo = cmf >> 4; */ int flg = stbi__zget8(a); if (stbi__zeof(a)) return stbi__err("bad zlib header","Corrupt PNG"); // zlib spec if ((cmf*256+flg) % 31 != 0) return stbi__err("bad zlib header","Corrupt PNG"); // zlib spec if (flg & 32) return stbi__err("no preset dict","Corrupt PNG"); // preset dictionary not allowed in png if (cm != 8) return stbi__err("bad compression","Corrupt PNG"); // DEFLATE required for png // window = 1 << (8 + cinfo)... but who cares, we fully buffer output return 1; } static const stbi_uc stbi__zdefault_length[288] = { 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8 }; static const stbi_uc stbi__zdefault_distance[32] = { 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 }; /* Init algorithm: { int i; // use <= to match clearly with spec for (i=0; i <= 143; ++i) stbi__zdefault_length[i] = 8; for ( ; i <= 255; ++i) stbi__zdefault_length[i] = 9; for ( ; i <= 279; ++i) stbi__zdefault_length[i] = 7; for ( ; i <= 287; ++i) stbi__zdefault_length[i] = 8; for (i=0; i <= 31; ++i) stbi__zdefault_distance[i] = 5; } */ static int stbi__parse_zlib(stbi__zbuf *a, int parse_header) { int final, type; if (parse_header) if (!stbi__parse_zlib_header(a)) return 0; a->num_bits = 0; a->code_buffer = 0; do { final = stbi__zreceive(a,1); type = stbi__zreceive(a,2); if (type == 0) { if (!stbi__parse_uncompressed_block(a)) return 0; } else if (type == 3) { return 0; } else { if (type == 1) { // use fixed code lengths if (!stbi__zbuild_huffman(&a->z_length , stbi__zdefault_length , 288)) return 0; if (!stbi__zbuild_huffman(&a->z_distance, stbi__zdefault_distance, 32)) return 0; } else { if (!stbi__compute_huffman_codes(a)) return 0; } if (!stbi__parse_huffman_block(a)) return 0; } } while (!final); return 1; } static int stbi__do_zlib(stbi__zbuf *a, char *obuf, int olen, int exp, int parse_header) { a->zout_start = obuf; a->zout = obuf; a->zout_end = obuf + olen; a->z_expandable = exp; return stbi__parse_zlib(a, parse_header); } STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen) { stbi__zbuf a; char *p = (char *) stbi__malloc(initial_size); if (p == NULL) return NULL; a.zbuffer = (stbi_uc *) buffer; a.zbuffer_end = (stbi_uc *) buffer + len; if (stbi__do_zlib(&a, p, initial_size, 1, 1)) { if (outlen) *outlen = (int) (a.zout - a.zout_start); return a.zout_start; } else { STBI_FREE(a.zout_start); return NULL; } } STBIDEF char *stbi_zlib_decode_malloc(char const *buffer, int len, int *outlen) { return stbi_zlib_decode_malloc_guesssize(buffer, len, 16384, outlen); } STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header) { stbi__zbuf a; char *p = (char *) stbi__malloc(initial_size); if (p == NULL) return NULL; a.zbuffer = (stbi_uc *) buffer; a.zbuffer_end = (stbi_uc *) buffer + len; if (stbi__do_zlib(&a, p, initial_size, 1, parse_header)) { if (outlen) *outlen = (int) (a.zout - a.zout_start); return a.zout_start; } else { STBI_FREE(a.zout_start); return NULL; } } STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, char const *ibuffer, int ilen) { stbi__zbuf a; a.zbuffer = (stbi_uc *) ibuffer; a.zbuffer_end = (stbi_uc *) ibuffer + ilen; if (stbi__do_zlib(&a, obuffer, olen, 0, 1)) return (int) (a.zout - a.zout_start); else return -1; } STBIDEF char *stbi_zlib_decode_noheader_malloc(char const *buffer, int len, int *outlen) { stbi__zbuf a; char *p = (char *) stbi__malloc(16384); if (p == NULL) return NULL; a.zbuffer = (stbi_uc *) buffer; a.zbuffer_end = (stbi_uc *) buffer+len; if (stbi__do_zlib(&a, p, 16384, 1, 0)) { if (outlen) *outlen = (int) (a.zout - a.zout_start); return a.zout_start; } else { STBI_FREE(a.zout_start); return NULL; } } STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen) { stbi__zbuf a; a.zbuffer = (stbi_uc *) ibuffer; a.zbuffer_end = (stbi_uc *) ibuffer + ilen; if (stbi__do_zlib(&a, obuffer, olen, 0, 0)) return (int) (a.zout - a.zout_start); else return -1; } #endif // public domain "baseline" PNG decoder v0.10 Sean Barrett 2006-11-18 // simple implementation // - only 8-bit samples // - no CRC checking // - allocates lots of intermediate memory // - avoids problem of streaming data between subsystems // - avoids explicit window management // performance // - uses stb_zlib, a PD zlib implementation with fast huffman decoding #ifndef STBI_NO_PNG typedef struct { stbi__uint32 length; stbi__uint32 type; } stbi__pngchunk; static stbi__pngchunk stbi__get_chunk_header(stbi__context *s) { stbi__pngchunk c; c.length = stbi__get32be(s); c.type = stbi__get32be(s); return c; } static int stbi__check_png_header(stbi__context *s) { static const stbi_uc png_sig[8] = { 137,80,78,71,13,10,26,10 }; int i; for (i=0; i < 8; ++i) if (stbi__get8(s) != png_sig[i]) return stbi__err("bad png sig","Not a PNG"); return 1; } typedef struct { stbi__context *s; stbi_uc *idata, *expanded, *out; int depth; } stbi__png; enum { STBI__F_none=0, STBI__F_sub=1, STBI__F_up=2, STBI__F_avg=3, STBI__F_paeth=4, // synthetic filters used for first scanline to avoid needing a dummy row of 0s STBI__F_avg_first, STBI__F_paeth_first }; static stbi_uc first_row_filter[5] = { STBI__F_none, STBI__F_sub, STBI__F_none, STBI__F_avg_first, STBI__F_paeth_first }; static int stbi__paeth(int a, int b, int c) { int p = a + b - c; int pa = abs(p-a); int pb = abs(p-b); int pc = abs(p-c); if (pa <= pb && pa <= pc) return a; if (pb <= pc) return b; return c; } static const stbi_uc stbi__depth_scale_table[9] = { 0, 0xff, 0x55, 0, 0x11, 0,0,0, 0x01 }; // create the png data from post-deflated data static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 raw_len, int out_n, stbi__uint32 x, stbi__uint32 y, int depth, int color) { int bytes = (depth == 16? 2 : 1); stbi__context *s = a->s; stbi__uint32 i,j,stride = x*out_n*bytes; stbi__uint32 img_len, img_width_bytes; int k; int img_n = s->img_n; // copy it into a local for later int output_bytes = out_n*bytes; int filter_bytes = img_n*bytes; int width = x; STBI_ASSERT(out_n == s->img_n || out_n == s->img_n+1); a->out = (stbi_uc *) stbi__malloc_mad3(x, y, output_bytes, 0); // extra bytes to write off the end into if (!a->out) return stbi__err("outofmem", "Out of memory"); if (!stbi__mad3sizes_valid(img_n, x, depth, 7)) return stbi__err("too large", "Corrupt PNG"); img_width_bytes = (((img_n * x * depth) + 7) >> 3); img_len = (img_width_bytes + 1) * y; // we used to check for exact match between raw_len and img_len on non-interlaced PNGs, // but issue #276 reported a PNG in the wild that had extra data at the end (all zeros), // so just check for raw_len < img_len always. if (raw_len < img_len) return stbi__err("not enough pixels","Corrupt PNG"); for (j=0; j < y; ++j) { stbi_uc *cur = a->out + stride*j; stbi_uc *prior; int filter = *raw++; if (filter > 4) return stbi__err("invalid filter","Corrupt PNG"); if (depth < 8) { if (img_width_bytes > x) return stbi__err("invalid width","Corrupt PNG"); cur += x*out_n - img_width_bytes; // store output to the rightmost img_len bytes, so we can decode in place filter_bytes = 1; width = img_width_bytes; } prior = cur - stride; // bugfix: need to compute this after 'cur +=' computation above // if first row, use special filter that doesn't sample previous row if (j == 0) filter = first_row_filter[filter]; // handle first byte explicitly for (k=0; k < filter_bytes; ++k) { switch (filter) { case STBI__F_none : cur[k] = raw[k]; break; case STBI__F_sub : cur[k] = raw[k]; break; case STBI__F_up : cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break; case STBI__F_avg : cur[k] = STBI__BYTECAST(raw[k] + (prior[k]>>1)); break; case STBI__F_paeth : cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(0,prior[k],0)); break; case STBI__F_avg_first : cur[k] = raw[k]; break; case STBI__F_paeth_first: cur[k] = raw[k]; break; } } if (depth == 8) { if (img_n != out_n) cur[img_n] = 255; // first pixel raw += img_n; cur += out_n; prior += out_n; } else if (depth == 16) { if (img_n != out_n) { cur[filter_bytes] = 255; // first pixel top byte cur[filter_bytes+1] = 255; // first pixel bottom byte } raw += filter_bytes; cur += output_bytes; prior += output_bytes; } else { raw += 1; cur += 1; prior += 1; } // this is a little gross, so that we don't switch per-pixel or per-component if (depth < 8 || img_n == out_n) { int nk = (width - 1)*filter_bytes; #define STBI__CASE(f) \ case f: \ for (k=0; k < nk; ++k) switch (filter) { // "none" filter turns into a memcpy here; make that explicit. case STBI__F_none: memcpy(cur, raw, nk); break; STBI__CASE(STBI__F_sub) { cur[k] = STBI__BYTECAST(raw[k] + cur[k-filter_bytes]); } break; STBI__CASE(STBI__F_up) { cur[k] = STBI__BYTECAST(raw[k] + prior[k]); } break; STBI__CASE(STBI__F_avg) { cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k-filter_bytes])>>1)); } break; STBI__CASE(STBI__F_paeth) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],prior[k],prior[k-filter_bytes])); } break; STBI__CASE(STBI__F_avg_first) { cur[k] = STBI__BYTECAST(raw[k] + (cur[k-filter_bytes] >> 1)); } break; STBI__CASE(STBI__F_paeth_first) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],0,0)); } break; } #undef STBI__CASE raw += nk; } else { STBI_ASSERT(img_n+1 == out_n); #define STBI__CASE(f) \ case f: \ for (i=x-1; i >= 1; --i, cur[filter_bytes]=255,raw+=filter_bytes,cur+=output_bytes,prior+=output_bytes) \ for (k=0; k < filter_bytes; ++k) switch (filter) { STBI__CASE(STBI__F_none) { cur[k] = raw[k]; } break; STBI__CASE(STBI__F_sub) { cur[k] = STBI__BYTECAST(raw[k] + cur[k- output_bytes]); } break; STBI__CASE(STBI__F_up) { cur[k] = STBI__BYTECAST(raw[k] + prior[k]); } break; STBI__CASE(STBI__F_avg) { cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k- output_bytes])>>1)); } break; STBI__CASE(STBI__F_paeth) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],prior[k],prior[k- output_bytes])); } break; STBI__CASE(STBI__F_avg_first) { cur[k] = STBI__BYTECAST(raw[k] + (cur[k- output_bytes] >> 1)); } break; STBI__CASE(STBI__F_paeth_first) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],0,0)); } break; } #undef STBI__CASE // the loop above sets the high byte of the pixels' alpha, but for // 16 bit png files we also need the low byte set. we'll do that here. if (depth == 16) { cur = a->out + stride*j; // start at the beginning of the row again for (i=0; i < x; ++i,cur+=output_bytes) { cur[filter_bytes+1] = 255; } } } } // we make a separate pass to expand bits to pixels; for performance, // this could run two scanlines behind the above code, so it won't // intefere with filtering but will still be in the cache. if (depth < 8) { for (j=0; j < y; ++j) { stbi_uc *cur = a->out + stride*j; stbi_uc *in = a->out + stride*j + x*out_n - img_width_bytes; // unpack 1/2/4-bit into a 8-bit buffer. allows us to keep the common 8-bit path optimal at minimal cost for 1/2/4-bit // png guarante byte alignment, if width is not multiple of 8/4/2 we'll decode dummy trailing data that will be skipped in the later loop stbi_uc scale = (color == 0) ? stbi__depth_scale_table[depth] : 1; // scale grayscale values to 0..255 range // note that the final byte might overshoot and write more data than desired. // we can allocate enough data that this never writes out of memory, but it // could also overwrite the next scanline. can it overwrite non-empty data // on the next scanline? yes, consider 1-pixel-wide scanlines with 1-bit-per-pixel. // so we need to explicitly clamp the final ones if (depth == 4) { for (k=x*img_n; k >= 2; k-=2, ++in) { *cur++ = scale * ((*in >> 4) ); *cur++ = scale * ((*in ) & 0x0f); } if (k > 0) *cur++ = scale * ((*in >> 4) ); } else if (depth == 2) { for (k=x*img_n; k >= 4; k-=4, ++in) { *cur++ = scale * ((*in >> 6) ); *cur++ = scale * ((*in >> 4) & 0x03); *cur++ = scale * ((*in >> 2) & 0x03); *cur++ = scale * ((*in ) & 0x03); } if (k > 0) *cur++ = scale * ((*in >> 6) ); if (k > 1) *cur++ = scale * ((*in >> 4) & 0x03); if (k > 2) *cur++ = scale * ((*in >> 2) & 0x03); } else if (depth == 1) { for (k=x*img_n; k >= 8; k-=8, ++in) { *cur++ = scale * ((*in >> 7) ); *cur++ = scale * ((*in >> 6) & 0x01); *cur++ = scale * ((*in >> 5) & 0x01); *cur++ = scale * ((*in >> 4) & 0x01); *cur++ = scale * ((*in >> 3) & 0x01); *cur++ = scale * ((*in >> 2) & 0x01); *cur++ = scale * ((*in >> 1) & 0x01); *cur++ = scale * ((*in ) & 0x01); } if (k > 0) *cur++ = scale * ((*in >> 7) ); if (k > 1) *cur++ = scale * ((*in >> 6) & 0x01); if (k > 2) *cur++ = scale * ((*in >> 5) & 0x01); if (k > 3) *cur++ = scale * ((*in >> 4) & 0x01); if (k > 4) *cur++ = scale * ((*in >> 3) & 0x01); if (k > 5) *cur++ = scale * ((*in >> 2) & 0x01); if (k > 6) *cur++ = scale * ((*in >> 1) & 0x01); } if (img_n != out_n) { int q; // insert alpha = 255 cur = a->out + stride*j; if (img_n == 1) { for (q=x-1; q >= 0; --q) { cur[q*2+1] = 255; cur[q*2+0] = cur[q]; } } else { STBI_ASSERT(img_n == 3); for (q=x-1; q >= 0; --q) { cur[q*4+3] = 255; cur[q*4+2] = cur[q*3+2]; cur[q*4+1] = cur[q*3+1]; cur[q*4+0] = cur[q*3+0]; } } } } } else if (depth == 16) { // force the image data from big-endian to platform-native. // this is done in a separate pass due to the decoding relying // on the data being untouched, but could probably be done // per-line during decode if care is taken. stbi_uc *cur = a->out; stbi__uint16 *cur16 = (stbi__uint16*)cur; for(i=0; i < x*y*out_n; ++i,cur16++,cur+=2) { *cur16 = (cur[0] << 8) | cur[1]; } } return 1; } static int stbi__create_png_image(stbi__png *a, stbi_uc *image_data, stbi__uint32 image_data_len, int out_n, int depth, int color, int interlaced) { int bytes = (depth == 16 ? 2 : 1); int out_bytes = out_n * bytes; stbi_uc *final; int p; if (!interlaced) return stbi__create_png_image_raw(a, image_data, image_data_len, out_n, a->s->img_x, a->s->img_y, depth, color); // de-interlacing final = (stbi_uc *) stbi__malloc_mad3(a->s->img_x, a->s->img_y, out_bytes, 0); for (p=0; p < 7; ++p) { int xorig[] = { 0,4,0,2,0,1,0 }; int yorig[] = { 0,0,4,0,2,0,1 }; int xspc[] = { 8,8,4,4,2,2,1 }; int yspc[] = { 8,8,8,4,4,2,2 }; int i,j,x,y; // pass1_x[4] = 0, pass1_x[5] = 1, pass1_x[12] = 1 x = (a->s->img_x - xorig[p] + xspc[p]-1) / xspc[p]; y = (a->s->img_y - yorig[p] + yspc[p]-1) / yspc[p]; if (x && y) { stbi__uint32 img_len = ((((a->s->img_n * x * depth) + 7) >> 3) + 1) * y; if (!stbi__create_png_image_raw(a, image_data, image_data_len, out_n, x, y, depth, color)) { STBI_FREE(final); return 0; } for (j=0; j < y; ++j) { for (i=0; i < x; ++i) { int out_y = j*yspc[p]+yorig[p]; int out_x = i*xspc[p]+xorig[p]; memcpy(final + out_y*a->s->img_x*out_bytes + out_x*out_bytes, a->out + (j*x+i)*out_bytes, out_bytes); } } STBI_FREE(a->out); image_data += img_len; image_data_len -= img_len; } } a->out = final; return 1; } static int stbi__compute_transparency(stbi__png *z, stbi_uc tc[3], int out_n) { stbi__context *s = z->s; stbi__uint32 i, pixel_count = s->img_x * s->img_y; stbi_uc *p = z->out; // compute color-based transparency, assuming we've // already got 255 as the alpha value in the output STBI_ASSERT(out_n == 2 || out_n == 4); if (out_n == 2) { for (i=0; i < pixel_count; ++i) { p[1] = (p[0] == tc[0] ? 0 : 255); p += 2; } } else { for (i=0; i < pixel_count; ++i) { if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) p[3] = 0; p += 4; } } return 1; } static int stbi__compute_transparency16(stbi__png *z, stbi__uint16 tc[3], int out_n) { stbi__context *s = z->s; stbi__uint32 i, pixel_count = s->img_x * s->img_y; stbi__uint16 *p = (stbi__uint16*) z->out; // compute color-based transparency, assuming we've // already got 65535 as the alpha value in the output STBI_ASSERT(out_n == 2 || out_n == 4); if (out_n == 2) { for (i = 0; i < pixel_count; ++i) { p[1] = (p[0] == tc[0] ? 0 : 65535); p += 2; } } else { for (i = 0; i < pixel_count; ++i) { if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) p[3] = 0; p += 4; } } return 1; } static int stbi__expand_png_palette(stbi__png *a, stbi_uc *palette, int len, int pal_img_n) { stbi__uint32 i, pixel_count = a->s->img_x * a->s->img_y; stbi_uc *p, *temp_out, *orig = a->out; p = (stbi_uc *) stbi__malloc_mad2(pixel_count, pal_img_n, 0); if (p == NULL) return stbi__err("outofmem", "Out of memory"); // between here and free(out) below, exitting would leak temp_out = p; if (pal_img_n == 3) { for (i=0; i < pixel_count; ++i) { int n = orig[i]*4; p[0] = palette[n ]; p[1] = palette[n+1]; p[2] = palette[n+2]; p += 3; } } else { for (i=0; i < pixel_count; ++i) { int n = orig[i]*4; p[0] = palette[n ]; p[1] = palette[n+1]; p[2] = palette[n+2]; p[3] = palette[n+3]; p += 4; } } STBI_FREE(a->out); a->out = temp_out; STBI_NOTUSED(len); return 1; } static int stbi__unpremultiply_on_load = 0; static int stbi__de_iphone_flag = 0; STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply) { stbi__unpremultiply_on_load = flag_true_if_should_unpremultiply; } STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert) { stbi__de_iphone_flag = flag_true_if_should_convert; } static void stbi__de_iphone(stbi__png *z) { stbi__context *s = z->s; stbi__uint32 i, pixel_count = s->img_x * s->img_y; stbi_uc *p = z->out; if (s->img_out_n == 3) { // convert bgr to rgb for (i=0; i < pixel_count; ++i) { stbi_uc t = p[0]; p[0] = p[2]; p[2] = t; p += 3; } } else { STBI_ASSERT(s->img_out_n == 4); if (stbi__unpremultiply_on_load) { // convert bgr to rgb and unpremultiply for (i=0; i < pixel_count; ++i) { stbi_uc a = p[3]; stbi_uc t = p[0]; if (a) { stbi_uc half = a / 2; p[0] = (p[2] * 255 + half) / a; p[1] = (p[1] * 255 + half) / a; p[2] = ( t * 255 + half) / a; } else { p[0] = p[2]; p[2] = t; } p += 4; } } else { // convert bgr to rgb for (i=0; i < pixel_count; ++i) { stbi_uc t = p[0]; p[0] = p[2]; p[2] = t; p += 4; } } } } #define STBI__PNG_TYPE(a,b,c,d) (((unsigned) (a) << 24) + ((unsigned) (b) << 16) + ((unsigned) (c) << 8) + (unsigned) (d)) static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp) { stbi_uc palette[1024], pal_img_n=0; stbi_uc has_trans=0, tc[3]={0}; stbi__uint16 tc16[3]; stbi__uint32 ioff=0, idata_limit=0, i, pal_len=0; int first=1,k,interlace=0, color=0, is_iphone=0; stbi__context *s = z->s; z->expanded = NULL; z->idata = NULL; z->out = NULL; if (!stbi__check_png_header(s)) return 0; if (scan == STBI__SCAN_type) return 1; for (;;) { stbi__pngchunk c = stbi__get_chunk_header(s); switch (c.type) { case STBI__PNG_TYPE('C','g','B','I'): is_iphone = 1; stbi__skip(s, c.length); break; case STBI__PNG_TYPE('I','H','D','R'): { int comp,filter; if (!first) return stbi__err("multiple IHDR","Corrupt PNG"); first = 0; if (c.length != 13) return stbi__err("bad IHDR len","Corrupt PNG"); s->img_x = stbi__get32be(s); s->img_y = stbi__get32be(s); if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); z->depth = stbi__get8(s); if (z->depth != 1 && z->depth != 2 && z->depth != 4 && z->depth != 8 && z->depth != 16) return stbi__err("1/2/4/8/16-bit only","PNG not supported: 1/2/4/8/16-bit only"); color = stbi__get8(s); if (color > 6) return stbi__err("bad ctype","Corrupt PNG"); if (color == 3 && z->depth == 16) return stbi__err("bad ctype","Corrupt PNG"); if (color == 3) pal_img_n = 3; else if (color & 1) return stbi__err("bad ctype","Corrupt PNG"); comp = stbi__get8(s); if (comp) return stbi__err("bad comp method","Corrupt PNG"); filter= stbi__get8(s); if (filter) return stbi__err("bad filter method","Corrupt PNG"); interlace = stbi__get8(s); if (interlace>1) return stbi__err("bad interlace method","Corrupt PNG"); if (!s->img_x || !s->img_y) return stbi__err("0-pixel image","Corrupt PNG"); if (!pal_img_n) { s->img_n = (color & 2 ? 3 : 1) + (color & 4 ? 1 : 0); if ((1 << 30) / s->img_x / s->img_n < s->img_y) return stbi__err("too large", "Image too large to decode"); if (scan == STBI__SCAN_header) return 1; } else { // if paletted, then pal_n is our final components, and // img_n is # components to decompress/filter. s->img_n = 1; if ((1 << 30) / s->img_x / 4 < s->img_y) return stbi__err("too large","Corrupt PNG"); // if SCAN_header, have to scan to see if we have a tRNS } break; } case STBI__PNG_TYPE('P','L','T','E'): { if (first) return stbi__err("first not IHDR", "Corrupt PNG"); if (c.length > 256*3) return stbi__err("invalid PLTE","Corrupt PNG"); pal_len = c.length / 3; if (pal_len * 3 != c.length) return stbi__err("invalid PLTE","Corrupt PNG"); for (i=0; i < pal_len; ++i) { palette[i*4+0] = stbi__get8(s); palette[i*4+1] = stbi__get8(s); palette[i*4+2] = stbi__get8(s); palette[i*4+3] = 255; } break; } case STBI__PNG_TYPE('t','R','N','S'): { if (first) return stbi__err("first not IHDR", "Corrupt PNG"); if (z->idata) return stbi__err("tRNS after IDAT","Corrupt PNG"); if (pal_img_n) { if (scan == STBI__SCAN_header) { s->img_n = 4; return 1; } if (pal_len == 0) return stbi__err("tRNS before PLTE","Corrupt PNG"); if (c.length > pal_len) return stbi__err("bad tRNS len","Corrupt PNG"); pal_img_n = 4; for (i=0; i < c.length; ++i) palette[i*4+3] = stbi__get8(s); } else { if (!(s->img_n & 1)) return stbi__err("tRNS with alpha","Corrupt PNG"); if (c.length != (stbi__uint32) s->img_n*2) return stbi__err("bad tRNS len","Corrupt PNG"); has_trans = 1; if (z->depth == 16) { for (k = 0; k < s->img_n; ++k) tc16[k] = (stbi__uint16)stbi__get16be(s); // copy the values as-is } else { for (k = 0; k < s->img_n; ++k) tc[k] = (stbi_uc)(stbi__get16be(s) & 255) * stbi__depth_scale_table[z->depth]; // non 8-bit images will be larger } } break; } case STBI__PNG_TYPE('I','D','A','T'): { if (first) return stbi__err("first not IHDR", "Corrupt PNG"); if (pal_img_n && !pal_len) return stbi__err("no PLTE","Corrupt PNG"); if (scan == STBI__SCAN_header) { s->img_n = pal_img_n; return 1; } if ((int)(ioff + c.length) < (int)ioff) return 0; if (ioff + c.length > idata_limit) { stbi__uint32 idata_limit_old = idata_limit; stbi_uc *p; if (idata_limit == 0) idata_limit = c.length > 4096 ? c.length : 4096; while (ioff + c.length > idata_limit) idata_limit *= 2; STBI_NOTUSED(idata_limit_old); p = (stbi_uc *) STBI_REALLOC_SIZED(z->idata, idata_limit_old, idata_limit); if (p == NULL) return stbi__err("outofmem", "Out of memory"); z->idata = p; } if (!stbi__getn(s, z->idata+ioff,c.length)) return stbi__err("outofdata","Corrupt PNG"); ioff += c.length; break; } case STBI__PNG_TYPE('I','E','N','D'): { stbi__uint32 raw_len, bpl; if (first) return stbi__err("first not IHDR", "Corrupt PNG"); if (scan != STBI__SCAN_load) return 1; if (z->idata == NULL) return stbi__err("no IDAT","Corrupt PNG"); // initial guess for decoded data size to avoid unnecessary reallocs bpl = (s->img_x * z->depth + 7) / 8; // bytes per line, per component raw_len = bpl * s->img_y * s->img_n /* pixels */ + s->img_y /* filter mode per row */; z->expanded = (stbi_uc *) stbi_zlib_decode_malloc_guesssize_headerflag((char *) z->idata, ioff, raw_len, (int *) &raw_len, !is_iphone); if (z->expanded == NULL) return 0; // zlib should set error STBI_FREE(z->idata); z->idata = NULL; if ((req_comp == s->img_n+1 && req_comp != 3 && !pal_img_n) || has_trans) s->img_out_n = s->img_n+1; else s->img_out_n = s->img_n; if (!stbi__create_png_image(z, z->expanded, raw_len, s->img_out_n, z->depth, color, interlace)) return 0; if (has_trans) { if (z->depth == 16) { if (!stbi__compute_transparency16(z, tc16, s->img_out_n)) return 0; } else { if (!stbi__compute_transparency(z, tc, s->img_out_n)) return 0; } } if (is_iphone && stbi__de_iphone_flag && s->img_out_n > 2) stbi__de_iphone(z); if (pal_img_n) { // pal_img_n == 3 or 4 s->img_n = pal_img_n; // record the actual colors we had s->img_out_n = pal_img_n; if (req_comp >= 3) s->img_out_n = req_comp; if (!stbi__expand_png_palette(z, palette, pal_len, s->img_out_n)) return 0; } else if (has_trans) { // non-paletted image with tRNS -> source image has (constant) alpha ++s->img_n; } STBI_FREE(z->expanded); z->expanded = NULL; // end of PNG chunk, read and skip CRC stbi__get32be(s); return 1; } default: // if critical, fail if (first) return stbi__err("first not IHDR", "Corrupt PNG"); if ((c.type & (1 << 29)) == 0) { #ifndef STBI_NO_FAILURE_STRINGS // not threadsafe static char invalid_chunk[] = "XXXX PNG chunk not known"; invalid_chunk[0] = STBI__BYTECAST(c.type >> 24); invalid_chunk[1] = STBI__BYTECAST(c.type >> 16); invalid_chunk[2] = STBI__BYTECAST(c.type >> 8); invalid_chunk[3] = STBI__BYTECAST(c.type >> 0); #endif return stbi__err(invalid_chunk, "PNG not supported: unknown PNG chunk type"); } stbi__skip(s, c.length); break; } // end of PNG chunk, read and skip CRC stbi__get32be(s); } } static void *stbi__do_png(stbi__png *p, int *x, int *y, int *n, int req_comp, stbi__result_info *ri) { void *result=NULL; if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error"); if (stbi__parse_png_file(p, STBI__SCAN_load, req_comp)) { if (p->depth <= 8) ri->bits_per_channel = 8; else if (p->depth == 16) ri->bits_per_channel = 16; else return stbi__errpuc("bad bits_per_channel", "PNG not supported: unsupported color depth"); result = p->out; p->out = NULL; if (req_comp && req_comp != p->s->img_out_n) { if (ri->bits_per_channel == 8) result = stbi__convert_format((unsigned char *) result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y); else result = stbi__convert_format16((stbi__uint16 *) result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y); p->s->img_out_n = req_comp; if (result == NULL) return result; } *x = p->s->img_x; *y = p->s->img_y; if (n) *n = p->s->img_n; } STBI_FREE(p->out); p->out = NULL; STBI_FREE(p->expanded); p->expanded = NULL; STBI_FREE(p->idata); p->idata = NULL; return result; } static void *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) { stbi__png p; p.s = s; return stbi__do_png(&p, x,y,comp,req_comp, ri); } static int stbi__png_test(stbi__context *s) { int r; r = stbi__check_png_header(s); stbi__rewind(s); return r; } static int stbi__png_info_raw(stbi__png *p, int *x, int *y, int *comp) { if (!stbi__parse_png_file(p, STBI__SCAN_header, 0)) { stbi__rewind( p->s ); return 0; } if (x) *x = p->s->img_x; if (y) *y = p->s->img_y; if (comp) *comp = p->s->img_n; return 1; } static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp) { stbi__png p; p.s = s; return stbi__png_info_raw(&p, x, y, comp); } static int stbi__png_is16(stbi__context *s) { stbi__png p; p.s = s; if (!stbi__png_info_raw(&p, NULL, NULL, NULL)) return 0; if (p.depth != 16) { stbi__rewind(p.s); return 0; } return 1; } #endif // Microsoft/Windows BMP image #ifndef STBI_NO_BMP static int stbi__bmp_test_raw(stbi__context *s) { int r; int sz; if (stbi__get8(s) != 'B') return 0; if (stbi__get8(s) != 'M') return 0; stbi__get32le(s); // discard filesize stbi__get16le(s); // discard reserved stbi__get16le(s); // discard reserved stbi__get32le(s); // discard data offset sz = stbi__get32le(s); r = (sz == 12 || sz == 40 || sz == 56 || sz == 108 || sz == 124); return r; } static int stbi__bmp_test(stbi__context *s) { int r = stbi__bmp_test_raw(s); stbi__rewind(s); return r; } // returns 0..31 for the highest set bit static int stbi__high_bit(unsigned int z) { int n=0; if (z == 0) return -1; if (z >= 0x10000) { n += 16; z >>= 16; } if (z >= 0x00100) { n += 8; z >>= 8; } if (z >= 0x00010) { n += 4; z >>= 4; } if (z >= 0x00004) { n += 2; z >>= 2; } if (z >= 0x00002) { n += 1;/* >>= 1;*/ } return n; } static int stbi__bitcount(unsigned int a) { a = (a & 0x55555555) + ((a >> 1) & 0x55555555); // max 2 a = (a & 0x33333333) + ((a >> 2) & 0x33333333); // max 4 a = (a + (a >> 4)) & 0x0f0f0f0f; // max 8 per 4, now 8 bits a = (a + (a >> 8)); // max 16 per 8 bits a = (a + (a >> 16)); // max 32 per 8 bits return a & 0xff; } // extract an arbitrarily-aligned N-bit value (N=bits) // from v, and then make it 8-bits long and fractionally // extend it to full full range. static int stbi__shiftsigned(unsigned int v, int shift, int bits) { static unsigned int mul_table[9] = { 0, 0xff/*0b11111111*/, 0x55/*0b01010101*/, 0x49/*0b01001001*/, 0x11/*0b00010001*/, 0x21/*0b00100001*/, 0x41/*0b01000001*/, 0x81/*0b10000001*/, 0x01/*0b00000001*/, }; static unsigned int shift_table[9] = { 0, 0,0,1,0,2,4,6,0, }; if (shift < 0) v <<= -shift; else v >>= shift; STBI_ASSERT(v < 256); v >>= (8-bits); STBI_ASSERT(bits >= 0 && bits <= 8); return (int) ((unsigned) v * mul_table[bits]) >> shift_table[bits]; } typedef struct { int bpp, offset, hsz; unsigned int mr,mg,mb,ma, all_a; int extra_read; } stbi__bmp_data; static void *stbi__bmp_parse_header(stbi__context *s, stbi__bmp_data *info) { int hsz; if (stbi__get8(s) != 'B' || stbi__get8(s) != 'M') return stbi__errpuc("not BMP", "Corrupt BMP"); stbi__get32le(s); // discard filesize stbi__get16le(s); // discard reserved stbi__get16le(s); // discard reserved info->offset = stbi__get32le(s); info->hsz = hsz = stbi__get32le(s); info->mr = info->mg = info->mb = info->ma = 0; info->extra_read = 14; if (info->offset < 0) return stbi__errpuc("bad BMP", "bad BMP"); if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108 && hsz != 124) return stbi__errpuc("unknown BMP", "BMP type not supported: unknown"); if (hsz == 12) { s->img_x = stbi__get16le(s); s->img_y = stbi__get16le(s); } else { s->img_x = stbi__get32le(s); s->img_y = stbi__get32le(s); } if (stbi__get16le(s) != 1) return stbi__errpuc("bad BMP", "bad BMP"); info->bpp = stbi__get16le(s); if (hsz != 12) { int compress = stbi__get32le(s); if (compress == 1 || compress == 2) return stbi__errpuc("BMP RLE", "BMP type not supported: RLE"); stbi__get32le(s); // discard sizeof stbi__get32le(s); // discard hres stbi__get32le(s); // discard vres stbi__get32le(s); // discard colorsused stbi__get32le(s); // discard max important if (hsz == 40 || hsz == 56) { if (hsz == 56) { stbi__get32le(s); stbi__get32le(s); stbi__get32le(s); stbi__get32le(s); } if (info->bpp == 16 || info->bpp == 32) { if (compress == 0) { if (info->bpp == 32) { info->mr = 0xffu << 16; info->mg = 0xffu << 8; info->mb = 0xffu << 0; info->ma = 0xffu << 24; info->all_a = 0; // if all_a is 0 at end, then we loaded alpha channel but it was all 0 } else { info->mr = 31u << 10; info->mg = 31u << 5; info->mb = 31u << 0; } } else if (compress == 3) { info->mr = stbi__get32le(s); info->mg = stbi__get32le(s); info->mb = stbi__get32le(s); info->extra_read += 12; // not documented, but generated by photoshop and handled by mspaint if (info->mr == info->mg && info->mg == info->mb) { // ?!?!? return stbi__errpuc("bad BMP", "bad BMP"); } } else return stbi__errpuc("bad BMP", "bad BMP"); } } else { int i; if (hsz != 108 && hsz != 124) return stbi__errpuc("bad BMP", "bad BMP"); info->mr = stbi__get32le(s); info->mg = stbi__get32le(s); info->mb = stbi__get32le(s); info->ma = stbi__get32le(s); stbi__get32le(s); // discard color space for (i=0; i < 12; ++i) stbi__get32le(s); // discard color space parameters if (hsz == 124) { stbi__get32le(s); // discard rendering intent stbi__get32le(s); // discard offset of profile data stbi__get32le(s); // discard size of profile data stbi__get32le(s); // discard reserved } } } return (void *) 1; } static void *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) { stbi_uc *out; unsigned int mr=0,mg=0,mb=0,ma=0, all_a; stbi_uc pal[256][4]; int psize=0,i,j,width; int flip_vertically, pad, target; stbi__bmp_data info; STBI_NOTUSED(ri); info.all_a = 255; if (stbi__bmp_parse_header(s, &info) == NULL) return NULL; // error code already set flip_vertically = ((int) s->img_y) > 0; s->img_y = abs((int) s->img_y); if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); mr = info.mr; mg = info.mg; mb = info.mb; ma = info.ma; all_a = info.all_a; if (info.hsz == 12) { if (info.bpp < 24) psize = (info.offset - info.extra_read - 24) / 3; } else { if (info.bpp < 16) psize = (info.offset - info.extra_read - info.hsz) >> 2; } if (psize == 0) { STBI_ASSERT(info.offset == s->callback_already_read + (int) (s->img_buffer - s->img_buffer_original)); if (info.offset != s->callback_already_read + (s->img_buffer - s->buffer_start)) { return stbi__errpuc("bad offset", "Corrupt BMP"); } } if (info.bpp == 24 && ma == 0xff000000) s->img_n = 3; else s->img_n = ma ? 4 : 3; if (req_comp && req_comp >= 3) // we can directly decode 3 or 4 target = req_comp; else target = s->img_n; // if they want monochrome, we'll post-convert // sanity-check size if (!stbi__mad3sizes_valid(target, s->img_x, s->img_y, 0)) return stbi__errpuc("too large", "Corrupt BMP"); out = (stbi_uc *) stbi__malloc_mad3(target, s->img_x, s->img_y, 0); if (!out) return stbi__errpuc("outofmem", "Out of memory"); if (info.bpp < 16) { int z=0; if (psize == 0 || psize > 256) { STBI_FREE(out); return stbi__errpuc("invalid", "Corrupt BMP"); } for (i=0; i < psize; ++i) { pal[i][2] = stbi__get8(s); pal[i][1] = stbi__get8(s); pal[i][0] = stbi__get8(s); if (info.hsz != 12) stbi__get8(s); pal[i][3] = 255; } stbi__skip(s, info.offset - info.extra_read - info.hsz - psize * (info.hsz == 12 ? 3 : 4)); if (info.bpp == 1) width = (s->img_x + 7) >> 3; else if (info.bpp == 4) width = (s->img_x + 1) >> 1; else if (info.bpp == 8) width = s->img_x; else { STBI_FREE(out); return stbi__errpuc("bad bpp", "Corrupt BMP"); } pad = (-width)&3; if (info.bpp == 1) { for (j=0; j < (int) s->img_y; ++j) { int bit_offset = 7, v = stbi__get8(s); for (i=0; i < (int) s->img_x; ++i) { int color = (v>>bit_offset)&0x1; out[z++] = pal[color][0]; out[z++] = pal[color][1]; out[z++] = pal[color][2]; if (target == 4) out[z++] = 255; if (i+1 == (int) s->img_x) break; if((--bit_offset) < 0) { bit_offset = 7; v = stbi__get8(s); } } stbi__skip(s, pad); } } else { for (j=0; j < (int) s->img_y; ++j) { for (i=0; i < (int) s->img_x; i += 2) { int v=stbi__get8(s),v2=0; if (info.bpp == 4) { v2 = v & 15; v >>= 4; } out[z++] = pal[v][0]; out[z++] = pal[v][1]; out[z++] = pal[v][2]; if (target == 4) out[z++] = 255; if (i+1 == (int) s->img_x) break; v = (info.bpp == 8) ? stbi__get8(s) : v2; out[z++] = pal[v][0]; out[z++] = pal[v][1]; out[z++] = pal[v][2]; if (target == 4) out[z++] = 255; } stbi__skip(s, pad); } } } else { int rshift=0,gshift=0,bshift=0,ashift=0,rcount=0,gcount=0,bcount=0,acount=0; int z = 0; int easy=0; stbi__skip(s, info.offset - info.extra_read - info.hsz); if (info.bpp == 24) width = 3 * s->img_x; else if (info.bpp == 16) width = 2*s->img_x; else /* bpp = 32 and pad = 0 */ width=0; pad = (-width) & 3; if (info.bpp == 24) { easy = 1; } else if (info.bpp == 32) { if (mb == 0xff && mg == 0xff00 && mr == 0x00ff0000 && ma == 0xff000000) easy = 2; } if (!easy) { if (!mr || !mg || !mb) { STBI_FREE(out); return stbi__errpuc("bad masks", "Corrupt BMP"); } // right shift amt to put high bit in position #7 rshift = stbi__high_bit(mr)-7; rcount = stbi__bitcount(mr); gshift = stbi__high_bit(mg)-7; gcount = stbi__bitcount(mg); bshift = stbi__high_bit(mb)-7; bcount = stbi__bitcount(mb); ashift = stbi__high_bit(ma)-7; acount = stbi__bitcount(ma); if (rcount > 8 || gcount > 8 || bcount > 8 || acount > 8) { STBI_FREE(out); return stbi__errpuc("bad masks", "Corrupt BMP"); } } for (j=0; j < (int) s->img_y; ++j) { if (easy) { for (i=0; i < (int) s->img_x; ++i) { unsigned char a; out[z+2] = stbi__get8(s); out[z+1] = stbi__get8(s); out[z+0] = stbi__get8(s); z += 3; a = (easy == 2 ? stbi__get8(s) : 255); all_a |= a; if (target == 4) out[z++] = a; } } else { int bpp = info.bpp; for (i=0; i < (int) s->img_x; ++i) { stbi__uint32 v = (bpp == 16 ? (stbi__uint32) stbi__get16le(s) : stbi__get32le(s)); unsigned int a; out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mr, rshift, rcount)); out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mg, gshift, gcount)); out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mb, bshift, bcount)); a = (ma ? stbi__shiftsigned(v & ma, ashift, acount) : 255); all_a |= a; if (target == 4) out[z++] = STBI__BYTECAST(a); } } stbi__skip(s, pad); } } // if alpha channel is all 0s, replace with all 255s if (target == 4 && all_a == 0) for (i=4*s->img_x*s->img_y-1; i >= 0; i -= 4) out[i] = 255; if (flip_vertically) { stbi_uc t; for (j=0; j < (int) s->img_y>>1; ++j) { stbi_uc *p1 = out + j *s->img_x*target; stbi_uc *p2 = out + (s->img_y-1-j)*s->img_x*target; for (i=0; i < (int) s->img_x*target; ++i) { t = p1[i]; p1[i] = p2[i]; p2[i] = t; } } } if (req_comp && req_comp != target) { out = stbi__convert_format(out, target, req_comp, s->img_x, s->img_y); if (out == NULL) return out; // stbi__convert_format frees input on failure } *x = s->img_x; *y = s->img_y; if (comp) *comp = s->img_n; return out; } #endif // Targa Truevision - TGA // by Jonathan Dummer #ifndef STBI_NO_TGA // returns STBI_rgb or whatever, 0 on error static int stbi__tga_get_comp(int bits_per_pixel, int is_grey, int* is_rgb16) { // only RGB or RGBA (incl. 16bit) or grey allowed if (is_rgb16) *is_rgb16 = 0; switch(bits_per_pixel) { case 8: return STBI_grey; case 16: if(is_grey) return STBI_grey_alpha; // fallthrough case 15: if(is_rgb16) *is_rgb16 = 1; return STBI_rgb; case 24: // fallthrough case 32: return bits_per_pixel/8; default: return 0; } } static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp) { int tga_w, tga_h, tga_comp, tga_image_type, tga_bits_per_pixel, tga_colormap_bpp; int sz, tga_colormap_type; stbi__get8(s); // discard Offset tga_colormap_type = stbi__get8(s); // colormap type if( tga_colormap_type > 1 ) { stbi__rewind(s); return 0; // only RGB or indexed allowed } tga_image_type = stbi__get8(s); // image type if ( tga_colormap_type == 1 ) { // colormapped (paletted) image if (tga_image_type != 1 && tga_image_type != 9) { stbi__rewind(s); return 0; } stbi__skip(s,4); // skip index of first colormap entry and number of entries sz = stbi__get8(s); // check bits per palette color entry if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) { stbi__rewind(s); return 0; } stbi__skip(s,4); // skip image x and y origin tga_colormap_bpp = sz; } else { // "normal" image w/o colormap - only RGB or grey allowed, +/- RLE if ( (tga_image_type != 2) && (tga_image_type != 3) && (tga_image_type != 10) && (tga_image_type != 11) ) { stbi__rewind(s); return 0; // only RGB or grey allowed, +/- RLE } stbi__skip(s,9); // skip colormap specification and image x/y origin tga_colormap_bpp = 0; } tga_w = stbi__get16le(s); if( tga_w < 1 ) { stbi__rewind(s); return 0; // test width } tga_h = stbi__get16le(s); if( tga_h < 1 ) { stbi__rewind(s); return 0; // test height } tga_bits_per_pixel = stbi__get8(s); // bits per pixel stbi__get8(s); // ignore alpha bits if (tga_colormap_bpp != 0) { if((tga_bits_per_pixel != 8) && (tga_bits_per_pixel != 16)) { // when using a colormap, tga_bits_per_pixel is the size of the indexes // I don't think anything but 8 or 16bit indexes makes sense stbi__rewind(s); return 0; } tga_comp = stbi__tga_get_comp(tga_colormap_bpp, 0, NULL); } else { tga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3) || (tga_image_type == 11), NULL); } if(!tga_comp) { stbi__rewind(s); return 0; } if (x) *x = tga_w; if (y) *y = tga_h; if (comp) *comp = tga_comp; return 1; // seems to have passed everything } static int stbi__tga_test(stbi__context *s) { int res = 0; int sz, tga_color_type; stbi__get8(s); // discard Offset tga_color_type = stbi__get8(s); // color type if ( tga_color_type > 1 ) goto errorEnd; // only RGB or indexed allowed sz = stbi__get8(s); // image type if ( tga_color_type == 1 ) { // colormapped (paletted) image if (sz != 1 && sz != 9) goto errorEnd; // colortype 1 demands image type 1 or 9 stbi__skip(s,4); // skip index of first colormap entry and number of entries sz = stbi__get8(s); // check bits per palette color entry if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) goto errorEnd; stbi__skip(s,4); // skip image x and y origin } else { // "normal" image w/o colormap if ( (sz != 2) && (sz != 3) && (sz != 10) && (sz != 11) ) goto errorEnd; // only RGB or grey allowed, +/- RLE stbi__skip(s,9); // skip colormap specification and image x/y origin } if ( stbi__get16le(s) < 1 ) goto errorEnd; // test width if ( stbi__get16le(s) < 1 ) goto errorEnd; // test height sz = stbi__get8(s); // bits per pixel if ( (tga_color_type == 1) && (sz != 8) && (sz != 16) ) goto errorEnd; // for colormapped images, bpp is size of an index if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) goto errorEnd; res = 1; // if we got this far, everything's good and we can return 1 instead of 0 errorEnd: stbi__rewind(s); return res; } // read 16bit value and convert to 24bit RGB static void stbi__tga_read_rgb16(stbi__context *s, stbi_uc* out) { stbi__uint16 px = (stbi__uint16)stbi__get16le(s); stbi__uint16 fiveBitMask = 31; // we have 3 channels with 5bits each int r = (px >> 10) & fiveBitMask; int g = (px >> 5) & fiveBitMask; int b = px & fiveBitMask; // Note that this saves the data in RGB(A) order, so it doesn't need to be swapped later out[0] = (stbi_uc)((r * 255)/31); out[1] = (stbi_uc)((g * 255)/31); out[2] = (stbi_uc)((b * 255)/31); // some people claim that the most significant bit might be used for alpha // (possibly if an alpha-bit is set in the "image descriptor byte") // but that only made 16bit test images completely translucent.. // so let's treat all 15 and 16bit TGAs as RGB with no alpha. } static void *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) { // read in the TGA header stuff int tga_offset = stbi__get8(s); int tga_indexed = stbi__get8(s); int tga_image_type = stbi__get8(s); int tga_is_RLE = 0; int tga_palette_start = stbi__get16le(s); int tga_palette_len = stbi__get16le(s); int tga_palette_bits = stbi__get8(s); int tga_x_origin = stbi__get16le(s); int tga_y_origin = stbi__get16le(s); int tga_width = stbi__get16le(s); int tga_height = stbi__get16le(s); int tga_bits_per_pixel = stbi__get8(s); int tga_comp, tga_rgb16=0; int tga_inverted = stbi__get8(s); // int tga_alpha_bits = tga_inverted & 15; // the 4 lowest bits - unused (useless?) // image data unsigned char *tga_data; unsigned char *tga_palette = NULL; int i, j; unsigned char raw_data[4] = {0}; int RLE_count = 0; int RLE_repeating = 0; int read_next_pixel = 1; STBI_NOTUSED(ri); STBI_NOTUSED(tga_x_origin); // @TODO STBI_NOTUSED(tga_y_origin); // @TODO if (tga_height > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); if (tga_width > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); // do a tiny bit of precessing if ( tga_image_type >= 8 ) { tga_image_type -= 8; tga_is_RLE = 1; } tga_inverted = 1 - ((tga_inverted >> 5) & 1); // If I'm paletted, then I'll use the number of bits from the palette if ( tga_indexed ) tga_comp = stbi__tga_get_comp(tga_palette_bits, 0, &tga_rgb16); else tga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3), &tga_rgb16); if(!tga_comp) // shouldn't really happen, stbi__tga_test() should have ensured basic consistency return stbi__errpuc("bad format", "Can't find out TGA pixelformat"); // tga info *x = tga_width; *y = tga_height; if (comp) *comp = tga_comp; if (!stbi__mad3sizes_valid(tga_width, tga_height, tga_comp, 0)) return stbi__errpuc("too large", "Corrupt TGA"); tga_data = (unsigned char*)stbi__malloc_mad3(tga_width, tga_height, tga_comp, 0); if (!tga_data) return stbi__errpuc("outofmem", "Out of memory"); // skip to the data's starting position (offset usually = 0) stbi__skip(s, tga_offset ); if ( !tga_indexed && !tga_is_RLE && !tga_rgb16 ) { for (i=0; i < tga_height; ++i) { int row = tga_inverted ? tga_height -i - 1 : i; stbi_uc *tga_row = tga_data + row*tga_width*tga_comp; stbi__getn(s, tga_row, tga_width * tga_comp); } } else { // do I need to load a palette? if ( tga_indexed) { if (tga_palette_len == 0) { /* you have to have at least one entry! */ STBI_FREE(tga_data); return stbi__errpuc("bad palette", "Corrupt TGA"); } // any data to skip? (offset usually = 0) stbi__skip(s, tga_palette_start ); // load the palette tga_palette = (unsigned char*)stbi__malloc_mad2(tga_palette_len, tga_comp, 0); if (!tga_palette) { STBI_FREE(tga_data); return stbi__errpuc("outofmem", "Out of memory"); } if (tga_rgb16) { stbi_uc *pal_entry = tga_palette; STBI_ASSERT(tga_comp == STBI_rgb); for (i=0; i < tga_palette_len; ++i) { stbi__tga_read_rgb16(s, pal_entry); pal_entry += tga_comp; } } else if (!stbi__getn(s, tga_palette, tga_palette_len * tga_comp)) { STBI_FREE(tga_data); STBI_FREE(tga_palette); return stbi__errpuc("bad palette", "Corrupt TGA"); } } // load the data for (i=0; i < tga_width * tga_height; ++i) { // if I'm in RLE mode, do I need to get a RLE stbi__pngchunk? if ( tga_is_RLE ) { if ( RLE_count == 0 ) { // yep, get the next byte as a RLE command int RLE_cmd = stbi__get8(s); RLE_count = 1 + (RLE_cmd & 127); RLE_repeating = RLE_cmd >> 7; read_next_pixel = 1; } else if ( !RLE_repeating ) { read_next_pixel = 1; } } else { read_next_pixel = 1; } // OK, if I need to read a pixel, do it now if ( read_next_pixel ) { // load however much data we did have if ( tga_indexed ) { // read in index, then perform the lookup int pal_idx = (tga_bits_per_pixel == 8) ? stbi__get8(s) : stbi__get16le(s); if ( pal_idx >= tga_palette_len ) { // invalid index pal_idx = 0; } pal_idx *= tga_comp; for (j = 0; j < tga_comp; ++j) { raw_data[j] = tga_palette[pal_idx+j]; } } else if(tga_rgb16) { STBI_ASSERT(tga_comp == STBI_rgb); stbi__tga_read_rgb16(s, raw_data); } else { // read in the data raw for (j = 0; j < tga_comp; ++j) { raw_data[j] = stbi__get8(s); } } // clear the reading flag for the next pixel read_next_pixel = 0; } // end of reading a pixel // copy data for (j = 0; j < tga_comp; ++j) tga_data[i*tga_comp+j] = raw_data[j]; // in case we're in RLE mode, keep counting down --RLE_count; } // do I need to invert the image? if ( tga_inverted ) { for (j = 0; j*2 < tga_height; ++j) { int index1 = j * tga_width * tga_comp; int index2 = (tga_height - 1 - j) * tga_width * tga_comp; for (i = tga_width * tga_comp; i > 0; --i) { unsigned char temp = tga_data[index1]; tga_data[index1] = tga_data[index2]; tga_data[index2] = temp; ++index1; ++index2; } } } // clear my palette, if I had one if ( tga_palette != NULL ) { STBI_FREE( tga_palette ); } } // swap RGB - if the source data was RGB16, it already is in the right order if (tga_comp >= 3 && !tga_rgb16) { unsigned char* tga_pixel = tga_data; for (i=0; i < tga_width * tga_height; ++i) { unsigned char temp = tga_pixel[0]; tga_pixel[0] = tga_pixel[2]; tga_pixel[2] = temp; tga_pixel += tga_comp; } } // convert to target component count if (req_comp && req_comp != tga_comp) tga_data = stbi__convert_format(tga_data, tga_comp, req_comp, tga_width, tga_height); // the things I do to get rid of an error message, and yet keep // Microsoft's C compilers happy... [8^( tga_palette_start = tga_palette_len = tga_palette_bits = tga_x_origin = tga_y_origin = 0; STBI_NOTUSED(tga_palette_start); // OK, done return tga_data; } #endif // ************************************************************************************************* // Photoshop PSD loader -- PD by Thatcher Ulrich, integration by Nicolas Schulz, tweaked by STB #ifndef STBI_NO_PSD static int stbi__psd_test(stbi__context *s) { int r = (stbi__get32be(s) == 0x38425053); stbi__rewind(s); return r; } static int stbi__psd_decode_rle(stbi__context *s, stbi_uc *p, int pixelCount) { int count, nleft, len; count = 0; while ((nleft = pixelCount - count) > 0) { len = stbi__get8(s); if (len == 128) { // No-op. } else if (len < 128) { // Copy next len+1 bytes literally. len++; if (len > nleft) return 0; // corrupt data count += len; while (len) { *p = stbi__get8(s); p += 4; len--; } } else if (len > 128) { stbi_uc val; // Next -len+1 bytes in the dest are replicated from next source byte. // (Interpret len as a negative 8-bit int.) len = 257 - len; if (len > nleft) return 0; // corrupt data val = stbi__get8(s); count += len; while (len) { *p = val; p += 4; len--; } } } return 1; } static void *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc) { int pixelCount; int channelCount, compression; int channel, i; int bitdepth; int w,h; stbi_uc *out; STBI_NOTUSED(ri); // Check identifier if (stbi__get32be(s) != 0x38425053) // "8BPS" return stbi__errpuc("not PSD", "Corrupt PSD image"); // Check file type version. if (stbi__get16be(s) != 1) return stbi__errpuc("wrong version", "Unsupported version of PSD image"); // Skip 6 reserved bytes. stbi__skip(s, 6 ); // Read the number of channels (R, G, B, A, etc). channelCount = stbi__get16be(s); if (channelCount < 0 || channelCount > 16) return stbi__errpuc("wrong channel count", "Unsupported number of channels in PSD image"); // Read the rows and columns of the image. h = stbi__get32be(s); w = stbi__get32be(s); if (h > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); if (w > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); // Make sure the depth is 8 bits. bitdepth = stbi__get16be(s); if (bitdepth != 8 && bitdepth != 16) return stbi__errpuc("unsupported bit depth", "PSD bit depth is not 8 or 16 bit"); // Make sure the color mode is RGB. // Valid options are: // 0: Bitmap // 1: Grayscale // 2: Indexed color // 3: RGB color // 4: CMYK color // 7: Multichannel // 8: Duotone // 9: Lab color if (stbi__get16be(s) != 3) return stbi__errpuc("wrong color format", "PSD is not in RGB color format"); // Skip the Mode Data. (It's the palette for indexed color; other info for other modes.) stbi__skip(s,stbi__get32be(s) ); // Skip the image resources. (resolution, pen tool paths, etc) stbi__skip(s, stbi__get32be(s) ); // Skip the reserved data. stbi__skip(s, stbi__get32be(s) ); // Find out if the data is compressed. // Known values: // 0: no compression // 1: RLE compressed compression = stbi__get16be(s); if (compression > 1) return stbi__errpuc("bad compression", "PSD has an unknown compression format"); // Check size if (!stbi__mad3sizes_valid(4, w, h, 0)) return stbi__errpuc("too large", "Corrupt PSD"); // Create the destination image. if (!compression && bitdepth == 16 && bpc == 16) { out = (stbi_uc *) stbi__malloc_mad3(8, w, h, 0); ri->bits_per_channel = 16; } else out = (stbi_uc *) stbi__malloc(4 * w*h); if (!out) return stbi__errpuc("outofmem", "Out of memory"); pixelCount = w*h; // Initialize the data to zero. //memset( out, 0, pixelCount * 4 ); // Finally, the image data. if (compression) { // RLE as used by .PSD and .TIFF // Loop until you get the number of unpacked bytes you are expecting: // Read the next source byte into n. // If n is between 0 and 127 inclusive, copy the next n+1 bytes literally. // Else if n is between -127 and -1 inclusive, copy the next byte -n+1 times. // Else if n is 128, noop. // Endloop // The RLE-compressed data is preceded by a 2-byte data count for each row in the data, // which we're going to just skip. stbi__skip(s, h * channelCount * 2 ); // Read the RLE data by channel. for (channel = 0; channel < 4; channel++) { stbi_uc *p; p = out+channel; if (channel >= channelCount) { // Fill this channel with default data. for (i = 0; i < pixelCount; i++, p += 4) *p = (channel == 3 ? 255 : 0); } else { // Read the RLE data. if (!stbi__psd_decode_rle(s, p, pixelCount)) { STBI_FREE(out); return stbi__errpuc("corrupt", "bad RLE data"); } } } } else { // We're at the raw image data. It's each channel in order (Red, Green, Blue, Alpha, ...) // where each channel consists of an 8-bit (or 16-bit) value for each pixel in the image. // Read the data by channel. for (channel = 0; channel < 4; channel++) { if (channel >= channelCount) { // Fill this channel with default data. if (bitdepth == 16 && bpc == 16) { stbi__uint16 *q = ((stbi__uint16 *) out) + channel; stbi__uint16 val = channel == 3 ? 65535 : 0; for (i = 0; i < pixelCount; i++, q += 4) *q = val; } else { stbi_uc *p = out+channel; stbi_uc val = channel == 3 ? 255 : 0; for (i = 0; i < pixelCount; i++, p += 4) *p = val; } } else { if (ri->bits_per_channel == 16) { // output bpc stbi__uint16 *q = ((stbi__uint16 *) out) + channel; for (i = 0; i < pixelCount; i++, q += 4) *q = (stbi__uint16) stbi__get16be(s); } else { stbi_uc *p = out+channel; if (bitdepth == 16) { // input bpc for (i = 0; i < pixelCount; i++, p += 4) *p = (stbi_uc) (stbi__get16be(s) >> 8); } else { for (i = 0; i < pixelCount; i++, p += 4) *p = stbi__get8(s); } } } } } // remove weird white matte from PSD if (channelCount >= 4) { if (ri->bits_per_channel == 16) { for (i=0; i < w*h; ++i) { stbi__uint16 *pixel = (stbi__uint16 *) out + 4*i; if (pixel[3] != 0 && pixel[3] != 65535) { float a = pixel[3] / 65535.0f; float ra = 1.0f / a; float inv_a = 65535.0f * (1 - ra); pixel[0] = (stbi__uint16) (pixel[0]*ra + inv_a); pixel[1] = (stbi__uint16) (pixel[1]*ra + inv_a); pixel[2] = (stbi__uint16) (pixel[2]*ra + inv_a); } } } else { for (i=0; i < w*h; ++i) { unsigned char *pixel = out + 4*i; if (pixel[3] != 0 && pixel[3] != 255) { float a = pixel[3] / 255.0f; float ra = 1.0f / a; float inv_a = 255.0f * (1 - ra); pixel[0] = (unsigned char) (pixel[0]*ra + inv_a); pixel[1] = (unsigned char) (pixel[1]*ra + inv_a); pixel[2] = (unsigned char) (pixel[2]*ra + inv_a); } } } } // convert to desired output format if (req_comp && req_comp != 4) { if (ri->bits_per_channel == 16) out = (stbi_uc *) stbi__convert_format16((stbi__uint16 *) out, 4, req_comp, w, h); else out = stbi__convert_format(out, 4, req_comp, w, h); if (out == NULL) return out; // stbi__convert_format frees input on failure } if (comp) *comp = 4; *y = h; *x = w; return out; } #endif // ************************************************************************************************* // Softimage PIC loader // by Tom Seddon // // See http://softimage.wiki.softimage.com/index.php/INFO:_PIC_file_format // See http://ozviz.wasp.uwa.edu.au/~pbourke/dataformats/softimagepic/ #ifndef STBI_NO_PIC static int stbi__pic_is4(stbi__context *s,const char *str) { int i; for (i=0; i<4; ++i) if (stbi__get8(s) != (stbi_uc)str[i]) return 0; return 1; } static int stbi__pic_test_core(stbi__context *s) { int i; if (!stbi__pic_is4(s,"\x53\x80\xF6\x34")) return 0; for(i=0;i<84;++i) stbi__get8(s); if (!stbi__pic_is4(s,"PICT")) return 0; return 1; } typedef struct { stbi_uc size,type,channel; } stbi__pic_packet; static stbi_uc *stbi__readval(stbi__context *s, int channel, stbi_uc *dest) { int mask=0x80, i; for (i=0; i<4; ++i, mask>>=1) { if (channel & mask) { if (stbi__at_eof(s)) return stbi__errpuc("bad file","PIC file too short"); dest[i]=stbi__get8(s); } } return dest; } static void stbi__copyval(int channel,stbi_uc *dest,const stbi_uc *src) { int mask=0x80,i; for (i=0;i<4; ++i, mask>>=1) if (channel&mask) dest[i]=src[i]; } static stbi_uc *stbi__pic_load_core(stbi__context *s,int width,int height,int *comp, stbi_uc *result) { int act_comp=0,num_packets=0,y,chained; stbi__pic_packet packets[10]; // this will (should...) cater for even some bizarre stuff like having data // for the same channel in multiple packets. do { stbi__pic_packet *packet; if (num_packets==sizeof(packets)/sizeof(packets[0])) return stbi__errpuc("bad format","too many packets"); packet = &packets[num_packets++]; chained = stbi__get8(s); packet->size = stbi__get8(s); packet->type = stbi__get8(s); packet->channel = stbi__get8(s); act_comp |= packet->channel; if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (reading packets)"); if (packet->size != 8) return stbi__errpuc("bad format","packet isn't 8bpp"); } while (chained); *comp = (act_comp & 0x10 ? 4 : 3); // has alpha channel? for(y=0; ytype) { default: return stbi__errpuc("bad format","packet has bad compression type"); case 0: {//uncompressed int x; for(x=0;xchannel,dest)) return 0; break; } case 1://Pure RLE { int left=width, i; while (left>0) { stbi_uc count,value[4]; count=stbi__get8(s); if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (pure read count)"); if (count > left) count = (stbi_uc) left; if (!stbi__readval(s,packet->channel,value)) return 0; for(i=0; ichannel,dest,value); left -= count; } } break; case 2: {//Mixed RLE int left=width; while (left>0) { int count = stbi__get8(s), i; if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (mixed read count)"); if (count >= 128) { // Repeated stbi_uc value[4]; if (count==128) count = stbi__get16be(s); else count -= 127; if (count > left) return stbi__errpuc("bad file","scanline overrun"); if (!stbi__readval(s,packet->channel,value)) return 0; for(i=0;ichannel,dest,value); } else { // Raw ++count; if (count>left) return stbi__errpuc("bad file","scanline overrun"); for(i=0;ichannel,dest)) return 0; } left-=count; } break; } } } } return result; } static void *stbi__pic_load(stbi__context *s,int *px,int *py,int *comp,int req_comp, stbi__result_info *ri) { stbi_uc *result; int i, x,y, internal_comp; STBI_NOTUSED(ri); if (!comp) comp = &internal_comp; for (i=0; i<92; ++i) stbi__get8(s); x = stbi__get16be(s); y = stbi__get16be(s); if (y > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); if (x > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (pic header)"); if (!stbi__mad3sizes_valid(x, y, 4, 0)) return stbi__errpuc("too large", "PIC image too large to decode"); stbi__get32be(s); //skip `ratio' stbi__get16be(s); //skip `fields' stbi__get16be(s); //skip `pad' // intermediate buffer is RGBA result = (stbi_uc *) stbi__malloc_mad3(x, y, 4, 0); memset(result, 0xff, x*y*4); if (!stbi__pic_load_core(s,x,y,comp, result)) { STBI_FREE(result); result=0; } *px = x; *py = y; if (req_comp == 0) req_comp = *comp; result=stbi__convert_format(result,4,req_comp,x,y); return result; } static int stbi__pic_test(stbi__context *s) { int r = stbi__pic_test_core(s); stbi__rewind(s); return r; } #endif // ************************************************************************************************* // GIF loader -- public domain by Jean-Marc Lienher -- simplified/shrunk by stb #ifndef STBI_NO_GIF typedef struct { stbi__int16 prefix; stbi_uc first; stbi_uc suffix; } stbi__gif_lzw; typedef struct { int w,h; stbi_uc *out; // output buffer (always 4 components) stbi_uc *background; // The current "background" as far as a gif is concerned stbi_uc *history; int flags, bgindex, ratio, transparent, eflags; stbi_uc pal[256][4]; stbi_uc lpal[256][4]; stbi__gif_lzw codes[8192]; stbi_uc *color_table; int parse, step; int lflags; int start_x, start_y; int max_x, max_y; int cur_x, cur_y; int line_size; int delay; } stbi__gif; static int stbi__gif_test_raw(stbi__context *s) { int sz; if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8') return 0; sz = stbi__get8(s); if (sz != '9' && sz != '7') return 0; if (stbi__get8(s) != 'a') return 0; return 1; } static int stbi__gif_test(stbi__context *s) { int r = stbi__gif_test_raw(s); stbi__rewind(s); return r; } static void stbi__gif_parse_colortable(stbi__context *s, stbi_uc pal[256][4], int num_entries, int transp) { int i; for (i=0; i < num_entries; ++i) { pal[i][2] = stbi__get8(s); pal[i][1] = stbi__get8(s); pal[i][0] = stbi__get8(s); pal[i][3] = transp == i ? 0 : 255; } } static int stbi__gif_header(stbi__context *s, stbi__gif *g, int *comp, int is_info) { stbi_uc version; if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8') return stbi__err("not GIF", "Corrupt GIF"); version = stbi__get8(s); if (version != '7' && version != '9') return stbi__err("not GIF", "Corrupt GIF"); if (stbi__get8(s) != 'a') return stbi__err("not GIF", "Corrupt GIF"); stbi__g_failure_reason = ""; g->w = stbi__get16le(s); g->h = stbi__get16le(s); g->flags = stbi__get8(s); g->bgindex = stbi__get8(s); g->ratio = stbi__get8(s); g->transparent = -1; if (g->w > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); if (g->h > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); if (comp != 0) *comp = 4; // can't actually tell whether it's 3 or 4 until we parse the comments if (is_info) return 1; if (g->flags & 0x80) stbi__gif_parse_colortable(s,g->pal, 2 << (g->flags & 7), -1); return 1; } static int stbi__gif_info_raw(stbi__context *s, int *x, int *y, int *comp) { stbi__gif* g = (stbi__gif*) stbi__malloc(sizeof(stbi__gif)); if (!stbi__gif_header(s, g, comp, 1)) { STBI_FREE(g); stbi__rewind( s ); return 0; } if (x) *x = g->w; if (y) *y = g->h; STBI_FREE(g); return 1; } static void stbi__out_gif_code(stbi__gif *g, stbi__uint16 code) { stbi_uc *p, *c; int idx; // recurse to decode the prefixes, since the linked-list is backwards, // and working backwards through an interleaved image would be nasty if (g->codes[code].prefix >= 0) stbi__out_gif_code(g, g->codes[code].prefix); if (g->cur_y >= g->max_y) return; idx = g->cur_x + g->cur_y; p = &g->out[idx]; g->history[idx / 4] = 1; c = &g->color_table[g->codes[code].suffix * 4]; if (c[3] > 128) { // don't render transparent pixels; p[0] = c[2]; p[1] = c[1]; p[2] = c[0]; p[3] = c[3]; } g->cur_x += 4; if (g->cur_x >= g->max_x) { g->cur_x = g->start_x; g->cur_y += g->step; while (g->cur_y >= g->max_y && g->parse > 0) { g->step = (1 << g->parse) * g->line_size; g->cur_y = g->start_y + (g->step >> 1); --g->parse; } } } static stbi_uc *stbi__process_gif_raster(stbi__context *s, stbi__gif *g) { stbi_uc lzw_cs; stbi__int32 len, init_code; stbi__uint32 first; stbi__int32 codesize, codemask, avail, oldcode, bits, valid_bits, clear; stbi__gif_lzw *p; lzw_cs = stbi__get8(s); if (lzw_cs > 12) return NULL; clear = 1 << lzw_cs; first = 1; codesize = lzw_cs + 1; codemask = (1 << codesize) - 1; bits = 0; valid_bits = 0; for (init_code = 0; init_code < clear; init_code++) { g->codes[init_code].prefix = -1; g->codes[init_code].first = (stbi_uc) init_code; g->codes[init_code].suffix = (stbi_uc) init_code; } // support no starting clear code avail = clear+2; oldcode = -1; len = 0; for(;;) { if (valid_bits < codesize) { if (len == 0) { len = stbi__get8(s); // start new block if (len == 0) return g->out; } --len; bits |= (stbi__int32) stbi__get8(s) << valid_bits; valid_bits += 8; } else { stbi__int32 code = bits & codemask; bits >>= codesize; valid_bits -= codesize; // @OPTIMIZE: is there some way we can accelerate the non-clear path? if (code == clear) { // clear code codesize = lzw_cs + 1; codemask = (1 << codesize) - 1; avail = clear + 2; oldcode = -1; first = 0; } else if (code == clear + 1) { // end of stream code stbi__skip(s, len); while ((len = stbi__get8(s)) > 0) stbi__skip(s,len); return g->out; } else if (code <= avail) { if (first) { return stbi__errpuc("no clear code", "Corrupt GIF"); } if (oldcode >= 0) { p = &g->codes[avail++]; if (avail > 8192) { return stbi__errpuc("too many codes", "Corrupt GIF"); } p->prefix = (stbi__int16) oldcode; p->first = g->codes[oldcode].first; p->suffix = (code == avail) ? p->first : g->codes[code].first; } else if (code == avail) return stbi__errpuc("illegal code in raster", "Corrupt GIF"); stbi__out_gif_code(g, (stbi__uint16) code); if ((avail & codemask) == 0 && avail <= 0x0FFF) { codesize++; codemask = (1 << codesize) - 1; } oldcode = code; } else { return stbi__errpuc("illegal code in raster", "Corrupt GIF"); } } } } // this function is designed to support animated gifs, although stb_image doesn't support it // two back is the image from two frames ago, used for a very specific disposal format static stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int *comp, int req_comp, stbi_uc *two_back) { int dispose; int first_frame; int pi; int pcount; STBI_NOTUSED(req_comp); // on first frame, any non-written pixels get the background colour (non-transparent) first_frame = 0; if (g->out == 0) { if (!stbi__gif_header(s, g, comp,0)) return 0; // stbi__g_failure_reason set by stbi__gif_header if (!stbi__mad3sizes_valid(4, g->w, g->h, 0)) return stbi__errpuc("too large", "GIF image is too large"); pcount = g->w * g->h; g->out = (stbi_uc *) stbi__malloc(4 * pcount); g->background = (stbi_uc *) stbi__malloc(4 * pcount); g->history = (stbi_uc *) stbi__malloc(pcount); if (!g->out || !g->background || !g->history) return stbi__errpuc("outofmem", "Out of memory"); // image is treated as "transparent" at the start - ie, nothing overwrites the current background; // background colour is only used for pixels that are not rendered first frame, after that "background" // color refers to the color that was there the previous frame. memset(g->out, 0x00, 4 * pcount); memset(g->background, 0x00, 4 * pcount); // state of the background (starts transparent) memset(g->history, 0x00, pcount); // pixels that were affected previous frame first_frame = 1; } else { // second frame - how do we dispose of the previous one? dispose = (g->eflags & 0x1C) >> 2; pcount = g->w * g->h; if ((dispose == 3) && (two_back == 0)) { dispose = 2; // if I don't have an image to revert back to, default to the old background } if (dispose == 3) { // use previous graphic for (pi = 0; pi < pcount; ++pi) { if (g->history[pi]) { memcpy( &g->out[pi * 4], &two_back[pi * 4], 4 ); } } } else if (dispose == 2) { // restore what was changed last frame to background before that frame; for (pi = 0; pi < pcount; ++pi) { if (g->history[pi]) { memcpy( &g->out[pi * 4], &g->background[pi * 4], 4 ); } } } else { // This is a non-disposal case eithe way, so just // leave the pixels as is, and they will become the new background // 1: do not dispose // 0: not specified. } // background is what out is after the undoing of the previou frame; memcpy( g->background, g->out, 4 * g->w * g->h ); } // clear my history; memset( g->history, 0x00, g->w * g->h ); // pixels that were affected previous frame for (;;) { int tag = stbi__get8(s); switch (tag) { case 0x2C: /* Image Descriptor */ { stbi__int32 x, y, w, h; stbi_uc *o; x = stbi__get16le(s); y = stbi__get16le(s); w = stbi__get16le(s); h = stbi__get16le(s); if (((x + w) > (g->w)) || ((y + h) > (g->h))) return stbi__errpuc("bad Image Descriptor", "Corrupt GIF"); g->line_size = g->w * 4; g->start_x = x * 4; g->start_y = y * g->line_size; g->max_x = g->start_x + w * 4; g->max_y = g->start_y + h * g->line_size; g->cur_x = g->start_x; g->cur_y = g->start_y; // if the width of the specified rectangle is 0, that means // we may not see *any* pixels or the image is malformed; // to make sure this is caught, move the current y down to // max_y (which is what out_gif_code checks). if (w == 0) g->cur_y = g->max_y; g->lflags = stbi__get8(s); if (g->lflags & 0x40) { g->step = 8 * g->line_size; // first interlaced spacing g->parse = 3; } else { g->step = g->line_size; g->parse = 0; } if (g->lflags & 0x80) { stbi__gif_parse_colortable(s,g->lpal, 2 << (g->lflags & 7), g->eflags & 0x01 ? g->transparent : -1); g->color_table = (stbi_uc *) g->lpal; } else if (g->flags & 0x80) { g->color_table = (stbi_uc *) g->pal; } else return stbi__errpuc("missing color table", "Corrupt GIF"); o = stbi__process_gif_raster(s, g); if (!o) return NULL; // if this was the first frame, pcount = g->w * g->h; if (first_frame && (g->bgindex > 0)) { // if first frame, any pixel not drawn to gets the background color for (pi = 0; pi < pcount; ++pi) { if (g->history[pi] == 0) { g->pal[g->bgindex][3] = 255; // just in case it was made transparent, undo that; It will be reset next frame if need be; memcpy( &g->out[pi * 4], &g->pal[g->bgindex], 4 ); } } } return o; } case 0x21: // Comment Extension. { int len; int ext = stbi__get8(s); if (ext == 0xF9) { // Graphic Control Extension. len = stbi__get8(s); if (len == 4) { g->eflags = stbi__get8(s); g->delay = 10 * stbi__get16le(s); // delay - 1/100th of a second, saving as 1/1000ths. // unset old transparent if (g->transparent >= 0) { g->pal[g->transparent][3] = 255; } if (g->eflags & 0x01) { g->transparent = stbi__get8(s); if (g->transparent >= 0) { g->pal[g->transparent][3] = 0; } } else { // don't need transparent stbi__skip(s, 1); g->transparent = -1; } } else { stbi__skip(s, len); break; } } while ((len = stbi__get8(s)) != 0) { stbi__skip(s, len); } break; } case 0x3B: // gif stream termination code return (stbi_uc *) s; // using '1' causes warning on some compilers default: return stbi__errpuc("unknown code", "Corrupt GIF"); } } } static void *stbi__load_gif_main(stbi__context *s, int **delays, int *x, int *y, int *z, int *comp, int req_comp) { if (stbi__gif_test(s)) { int layers = 0; stbi_uc *u = 0; stbi_uc *out = 0; stbi_uc *two_back = 0; stbi__gif g; int stride; int out_size = 0; int delays_size = 0; memset(&g, 0, sizeof(g)); if (delays) { *delays = 0; } do { u = stbi__gif_load_next(s, &g, comp, req_comp, two_back); if (u == (stbi_uc *) s) u = 0; // end of animated gif marker if (u) { *x = g.w; *y = g.h; ++layers; stride = g.w * g.h * 4; if (out) { void *tmp = (stbi_uc*) STBI_REALLOC_SIZED( out, out_size, layers * stride ); if (NULL == tmp) { STBI_FREE(g.out); STBI_FREE(g.history); STBI_FREE(g.background); return stbi__errpuc("outofmem", "Out of memory"); } else { out = (stbi_uc*) tmp; out_size = layers * stride; } if (delays) { *delays = (int*) STBI_REALLOC_SIZED( *delays, delays_size, sizeof(int) * layers ); delays_size = layers * sizeof(int); } } else { out = (stbi_uc*)stbi__malloc( layers * stride ); out_size = layers * stride; if (delays) { *delays = (int*) stbi__malloc( layers * sizeof(int) ); delays_size = layers * sizeof(int); } } memcpy( out + ((layers - 1) * stride), u, stride ); if (layers >= 2) { two_back = out - 2 * stride; } if (delays) { (*delays)[layers - 1U] = g.delay; } } } while (u != 0); // free temp buffer; STBI_FREE(g.out); STBI_FREE(g.history); STBI_FREE(g.background); // do the final conversion after loading everything; if (req_comp && req_comp != 4) out = stbi__convert_format(out, 4, req_comp, layers * g.w, g.h); *z = layers; return out; } else { return stbi__errpuc("not GIF", "Image was not as a gif type."); } } static void *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) { stbi_uc *u = 0; stbi__gif g; memset(&g, 0, sizeof(g)); STBI_NOTUSED(ri); u = stbi__gif_load_next(s, &g, comp, req_comp, 0); if (u == (stbi_uc *) s) u = 0; // end of animated gif marker if (u) { *x = g.w; *y = g.h; // moved conversion to after successful load so that the same // can be done for multiple frames. if (req_comp && req_comp != 4) u = stbi__convert_format(u, 4, req_comp, g.w, g.h); } else if (g.out) { // if there was an error and we allocated an image buffer, free it! STBI_FREE(g.out); } // free buffers needed for multiple frame loading; STBI_FREE(g.history); STBI_FREE(g.background); return u; } static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp) { return stbi__gif_info_raw(s,x,y,comp); } #endif // ************************************************************************************************* // Radiance RGBE HDR loader // originally by Nicolas Schulz #ifndef STBI_NO_HDR static int stbi__hdr_test_core(stbi__context *s, const char *signature) { int i; for (i=0; signature[i]; ++i) if (stbi__get8(s) != signature[i]) return 0; stbi__rewind(s); return 1; } static int stbi__hdr_test(stbi__context* s) { int r = stbi__hdr_test_core(s, "#?RADIANCE\n"); stbi__rewind(s); if(!r) { r = stbi__hdr_test_core(s, "#?RGBE\n"); stbi__rewind(s); } return r; } #define STBI__HDR_BUFLEN 1024 static char *stbi__hdr_gettoken(stbi__context *z, char *buffer) { int len=0; char c = '\0'; c = (char) stbi__get8(z); while (!stbi__at_eof(z) && c != '\n') { buffer[len++] = c; if (len == STBI__HDR_BUFLEN-1) { // flush to end of line while (!stbi__at_eof(z) && stbi__get8(z) != '\n') ; break; } c = (char) stbi__get8(z); } buffer[len] = 0; return buffer; } static void stbi__hdr_convert(float *output, stbi_uc *input, int req_comp) { if ( input[3] != 0 ) { float f1; // Exponent f1 = (float) ldexp(1.0f, input[3] - (int)(128 + 8)); if (req_comp <= 2) output[0] = (input[0] + input[1] + input[2]) * f1 / 3; else { output[0] = input[0] * f1; output[1] = input[1] * f1; output[2] = input[2] * f1; } if (req_comp == 2) output[1] = 1; if (req_comp == 4) output[3] = 1; } else { switch (req_comp) { case 4: output[3] = 1; /* fallthrough */ case 3: output[0] = output[1] = output[2] = 0; break; case 2: output[1] = 1; /* fallthrough */ case 1: output[0] = 0; break; } } } static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) { char buffer[STBI__HDR_BUFLEN]; char *token; int valid = 0; int width, height; stbi_uc *scanline; float *hdr_data; int len; unsigned char count, value; int i, j, k, c1,c2, z; const char *headerToken; STBI_NOTUSED(ri); // Check identifier headerToken = stbi__hdr_gettoken(s,buffer); if (strcmp(headerToken, "#?RADIANCE") != 0 && strcmp(headerToken, "#?RGBE") != 0) return stbi__errpf("not HDR", "Corrupt HDR image"); // Parse header for(;;) { token = stbi__hdr_gettoken(s,buffer); if (token[0] == 0) break; if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; } if (!valid) return stbi__errpf("unsupported format", "Unsupported HDR format"); // Parse width and height // can't use sscanf() if we're not using stdio! token = stbi__hdr_gettoken(s,buffer); if (strncmp(token, "-Y ", 3)) return stbi__errpf("unsupported data layout", "Unsupported HDR format"); token += 3; height = (int) strtol(token, &token, 10); while (*token == ' ') ++token; if (strncmp(token, "+X ", 3)) return stbi__errpf("unsupported data layout", "Unsupported HDR format"); token += 3; width = (int) strtol(token, NULL, 10); if (height > STBI_MAX_DIMENSIONS) return stbi__errpf("too large","Very large image (corrupt?)"); if (width > STBI_MAX_DIMENSIONS) return stbi__errpf("too large","Very large image (corrupt?)"); *x = width; *y = height; if (comp) *comp = 3; if (req_comp == 0) req_comp = 3; if (!stbi__mad4sizes_valid(width, height, req_comp, sizeof(float), 0)) return stbi__errpf("too large", "HDR image is too large"); // Read data hdr_data = (float *) stbi__malloc_mad4(width, height, req_comp, sizeof(float), 0); if (!hdr_data) return stbi__errpf("outofmem", "Out of memory"); // Load image data // image data is stored as some number of sca if ( width < 8 || width >= 32768) { // Read flat data for (j=0; j < height; ++j) { for (i=0; i < width; ++i) { stbi_uc rgbe[4]; main_decode_loop: stbi__getn(s, rgbe, 4); stbi__hdr_convert(hdr_data + j * width * req_comp + i * req_comp, rgbe, req_comp); } } } else { // Read RLE-encoded data scanline = NULL; for (j = 0; j < height; ++j) { c1 = stbi__get8(s); c2 = stbi__get8(s); len = stbi__get8(s); if (c1 != 2 || c2 != 2 || (len & 0x80)) { // not run-length encoded, so we have to actually use THIS data as a decoded // pixel (note this can't be a valid pixel--one of RGB must be >= 128) stbi_uc rgbe[4]; rgbe[0] = (stbi_uc) c1; rgbe[1] = (stbi_uc) c2; rgbe[2] = (stbi_uc) len; rgbe[3] = (stbi_uc) stbi__get8(s); stbi__hdr_convert(hdr_data, rgbe, req_comp); i = 1; j = 0; STBI_FREE(scanline); goto main_decode_loop; // yes, this makes no sense } len <<= 8; len |= stbi__get8(s); if (len != width) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("invalid decoded scanline length", "corrupt HDR"); } if (scanline == NULL) { scanline = (stbi_uc *) stbi__malloc_mad2(width, 4, 0); if (!scanline) { STBI_FREE(hdr_data); return stbi__errpf("outofmem", "Out of memory"); } } for (k = 0; k < 4; ++k) { int nleft; i = 0; while ((nleft = width - i) > 0) { count = stbi__get8(s); if (count > 128) { // Run value = stbi__get8(s); count -= 128; if (count > nleft) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("corrupt", "bad RLE data in HDR"); } for (z = 0; z < count; ++z) scanline[i++ * 4 + k] = value; } else { // Dump if (count > nleft) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("corrupt", "bad RLE data in HDR"); } for (z = 0; z < count; ++z) scanline[i++ * 4 + k] = stbi__get8(s); } } } for (i=0; i < width; ++i) stbi__hdr_convert(hdr_data+(j*width + i)*req_comp, scanline + i*4, req_comp); } if (scanline) STBI_FREE(scanline); } return hdr_data; } static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp) { char buffer[STBI__HDR_BUFLEN]; char *token; int valid = 0; int dummy; if (!x) x = &dummy; if (!y) y = &dummy; if (!comp) comp = &dummy; if (stbi__hdr_test(s) == 0) { stbi__rewind( s ); return 0; } for(;;) { token = stbi__hdr_gettoken(s,buffer); if (token[0] == 0) break; if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; } if (!valid) { stbi__rewind( s ); return 0; } token = stbi__hdr_gettoken(s,buffer); if (strncmp(token, "-Y ", 3)) { stbi__rewind( s ); return 0; } token += 3; *y = (int) strtol(token, &token, 10); while (*token == ' ') ++token; if (strncmp(token, "+X ", 3)) { stbi__rewind( s ); return 0; } token += 3; *x = (int) strtol(token, NULL, 10); *comp = 3; return 1; } #endif // STBI_NO_HDR #ifndef STBI_NO_BMP static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp) { void *p; stbi__bmp_data info; info.all_a = 255; p = stbi__bmp_parse_header(s, &info); stbi__rewind( s ); if (p == NULL) return 0; if (x) *x = s->img_x; if (y) *y = s->img_y; if (comp) { if (info.bpp == 24 && info.ma == 0xff000000) *comp = 3; else *comp = info.ma ? 4 : 3; } return 1; } #endif #ifndef STBI_NO_PSD static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp) { int channelCount, dummy, depth; if (!x) x = &dummy; if (!y) y = &dummy; if (!comp) comp = &dummy; if (stbi__get32be(s) != 0x38425053) { stbi__rewind( s ); return 0; } if (stbi__get16be(s) != 1) { stbi__rewind( s ); return 0; } stbi__skip(s, 6); channelCount = stbi__get16be(s); if (channelCount < 0 || channelCount > 16) { stbi__rewind( s ); return 0; } *y = stbi__get32be(s); *x = stbi__get32be(s); depth = stbi__get16be(s); if (depth != 8 && depth != 16) { stbi__rewind( s ); return 0; } if (stbi__get16be(s) != 3) { stbi__rewind( s ); return 0; } *comp = 4; return 1; } static int stbi__psd_is16(stbi__context *s) { int channelCount, depth; if (stbi__get32be(s) != 0x38425053) { stbi__rewind( s ); return 0; } if (stbi__get16be(s) != 1) { stbi__rewind( s ); return 0; } stbi__skip(s, 6); channelCount = stbi__get16be(s); if (channelCount < 0 || channelCount > 16) { stbi__rewind( s ); return 0; } (void) stbi__get32be(s); (void) stbi__get32be(s); depth = stbi__get16be(s); if (depth != 16) { stbi__rewind( s ); return 0; } return 1; } #endif #ifndef STBI_NO_PIC static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp) { int act_comp=0,num_packets=0,chained,dummy; stbi__pic_packet packets[10]; if (!x) x = &dummy; if (!y) y = &dummy; if (!comp) comp = &dummy; if (!stbi__pic_is4(s,"\x53\x80\xF6\x34")) { stbi__rewind(s); return 0; } stbi__skip(s, 88); *x = stbi__get16be(s); *y = stbi__get16be(s); if (stbi__at_eof(s)) { stbi__rewind( s); return 0; } if ( (*x) != 0 && (1 << 28) / (*x) < (*y)) { stbi__rewind( s ); return 0; } stbi__skip(s, 8); do { stbi__pic_packet *packet; if (num_packets==sizeof(packets)/sizeof(packets[0])) return 0; packet = &packets[num_packets++]; chained = stbi__get8(s); packet->size = stbi__get8(s); packet->type = stbi__get8(s); packet->channel = stbi__get8(s); act_comp |= packet->channel; if (stbi__at_eof(s)) { stbi__rewind( s ); return 0; } if (packet->size != 8) { stbi__rewind( s ); return 0; } } while (chained); *comp = (act_comp & 0x10 ? 4 : 3); return 1; } #endif // ************************************************************************************************* // Portable Gray Map and Portable Pixel Map loader // by Ken Miller // // PGM: http://netpbm.sourceforge.net/doc/pgm.html // PPM: http://netpbm.sourceforge.net/doc/ppm.html // // Known limitations: // Does not support comments in the header section // Does not support ASCII image data (formats P2 and P3) // Does not support 16-bit-per-channel #ifndef STBI_NO_PNM static int stbi__pnm_test(stbi__context *s) { char p, t; p = (char) stbi__get8(s); t = (char) stbi__get8(s); if (p != 'P' || (t != '5' && t != '6')) { stbi__rewind( s ); return 0; } return 1; } static void *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) { stbi_uc *out; STBI_NOTUSED(ri); if (!stbi__pnm_info(s, (int *)&s->img_x, (int *)&s->img_y, (int *)&s->img_n)) return 0; if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); *x = s->img_x; *y = s->img_y; if (comp) *comp = s->img_n; if (!stbi__mad3sizes_valid(s->img_n, s->img_x, s->img_y, 0)) return stbi__errpuc("too large", "PNM too large"); out = (stbi_uc *) stbi__malloc_mad3(s->img_n, s->img_x, s->img_y, 0); if (!out) return stbi__errpuc("outofmem", "Out of memory"); stbi__getn(s, out, s->img_n * s->img_x * s->img_y); if (req_comp && req_comp != s->img_n) { out = stbi__convert_format(out, s->img_n, req_comp, s->img_x, s->img_y); if (out == NULL) return out; // stbi__convert_format frees input on failure } return out; } static int stbi__pnm_isspace(char c) { return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; } static void stbi__pnm_skip_whitespace(stbi__context *s, char *c) { for (;;) { while (!stbi__at_eof(s) && stbi__pnm_isspace(*c)) *c = (char) stbi__get8(s); if (stbi__at_eof(s) || *c != '#') break; while (!stbi__at_eof(s) && *c != '\n' && *c != '\r' ) *c = (char) stbi__get8(s); } } static int stbi__pnm_isdigit(char c) { return c >= '0' && c <= '9'; } static int stbi__pnm_getinteger(stbi__context *s, char *c) { int value = 0; while (!stbi__at_eof(s) && stbi__pnm_isdigit(*c)) { value = value*10 + (*c - '0'); *c = (char) stbi__get8(s); } return value; } static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp) { int maxv, dummy; char c, p, t; if (!x) x = &dummy; if (!y) y = &dummy; if (!comp) comp = &dummy; stbi__rewind(s); // Get identifier p = (char) stbi__get8(s); t = (char) stbi__get8(s); if (p != 'P' || (t != '5' && t != '6')) { stbi__rewind(s); return 0; } *comp = (t == '6') ? 3 : 1; // '5' is 1-component .pgm; '6' is 3-component .ppm c = (char) stbi__get8(s); stbi__pnm_skip_whitespace(s, &c); *x = stbi__pnm_getinteger(s, &c); // read width stbi__pnm_skip_whitespace(s, &c); *y = stbi__pnm_getinteger(s, &c); // read height stbi__pnm_skip_whitespace(s, &c); maxv = stbi__pnm_getinteger(s, &c); // read max value if (maxv > 255) return stbi__err("max value > 255", "PPM image not 8-bit"); else return 1; } #endif static int stbi__info_main(stbi__context *s, int *x, int *y, int *comp) { #ifndef STBI_NO_JPEG if (stbi__jpeg_info(s, x, y, comp)) return 1; #endif #ifndef STBI_NO_PNG if (stbi__png_info(s, x, y, comp)) return 1; #endif #ifndef STBI_NO_GIF if (stbi__gif_info(s, x, y, comp)) return 1; #endif #ifndef STBI_NO_BMP if (stbi__bmp_info(s, x, y, comp)) return 1; #endif #ifndef STBI_NO_PSD if (stbi__psd_info(s, x, y, comp)) return 1; #endif #ifndef STBI_NO_PIC if (stbi__pic_info(s, x, y, comp)) return 1; #endif #ifndef STBI_NO_PNM if (stbi__pnm_info(s, x, y, comp)) return 1; #endif #ifndef STBI_NO_HDR if (stbi__hdr_info(s, x, y, comp)) return 1; #endif // test tga last because it's a crappy test! #ifndef STBI_NO_TGA if (stbi__tga_info(s, x, y, comp)) return 1; #endif return stbi__err("unknown image type", "Image not of any known type, or corrupt"); } static int stbi__is_16_main(stbi__context *s) { #ifndef STBI_NO_PNG if (stbi__png_is16(s)) return 1; #endif #ifndef STBI_NO_PSD if (stbi__psd_is16(s)) return 1; #endif return 0; } #ifndef STBI_NO_STDIO STBIDEF int stbi_info(char const *filename, int *x, int *y, int *comp) { FILE *f = stbi__fopen(filename, "rb"); int result; if (!f) return stbi__err("can't fopen", "Unable to open file"); result = stbi_info_from_file(f, x, y, comp); fclose(f); return result; } STBIDEF int stbi_info_from_file(FILE *f, int *x, int *y, int *comp) { int r; stbi__context s; long pos = ftell(f); stbi__start_file(&s, f); r = stbi__info_main(&s,x,y,comp); fseek(f,pos,SEEK_SET); return r; } STBIDEF int stbi_is_16_bit(char const *filename) { FILE *f = stbi__fopen(filename, "rb"); int result; if (!f) return stbi__err("can't fopen", "Unable to open file"); result = stbi_is_16_bit_from_file(f); fclose(f); return result; } STBIDEF int stbi_is_16_bit_from_file(FILE *f) { int r; stbi__context s; long pos = ftell(f); stbi__start_file(&s, f); r = stbi__is_16_main(&s); fseek(f,pos,SEEK_SET); return r; } #endif // !STBI_NO_STDIO STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp) { stbi__context s; stbi__start_mem(&s,buffer,len); return stbi__info_main(&s,x,y,comp); } STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *c, void *user, int *x, int *y, int *comp) { stbi__context s; stbi__start_callbacks(&s, (stbi_io_callbacks *) c, user); return stbi__info_main(&s,x,y,comp); } STBIDEF int stbi_is_16_bit_from_memory(stbi_uc const *buffer, int len) { stbi__context s; stbi__start_mem(&s,buffer,len); return stbi__is_16_main(&s); } STBIDEF int stbi_is_16_bit_from_callbacks(stbi_io_callbacks const *c, void *user) { stbi__context s; stbi__start_callbacks(&s, (stbi_io_callbacks *) c, user); return stbi__is_16_main(&s); } #endif // STB_IMAGE_IMPLEMENTATION /* revision history: 2.20 (2019-02-07) support utf8 filenames in Windows; fix warnings and platform ifdefs 2.19 (2018-02-11) fix warning 2.18 (2018-01-30) fix warnings 2.17 (2018-01-29) change sbti__shiftsigned to avoid clang -O2 bug 1-bit BMP *_is_16_bit api avoid warnings 2.16 (2017-07-23) all functions have 16-bit variants; STBI_NO_STDIO works again; compilation fixes; fix rounding in unpremultiply; optimize vertical flip; disable raw_len validation; documentation fixes 2.15 (2017-03-18) fix png-1,2,4 bug; now all Imagenet JPGs decode; warning fixes; disable run-time SSE detection on gcc; uniform handling of optional "return" values; thread-safe initialization of zlib tables 2.14 (2017-03-03) remove deprecated STBI_JPEG_OLD; fixes for Imagenet JPGs 2.13 (2016-11-29) add 16-bit API, only supported for PNG right now 2.12 (2016-04-02) fix typo in 2.11 PSD fix that caused crashes 2.11 (2016-04-02) allocate large structures on the stack remove white matting for transparent PSD fix reported channel count for PNG & BMP re-enable SSE2 in non-gcc 64-bit support RGB-formatted JPEG read 16-bit PNGs (only as 8-bit) 2.10 (2016-01-22) avoid warning introduced in 2.09 by STBI_REALLOC_SIZED 2.09 (2016-01-16) allow comments in PNM files 16-bit-per-pixel TGA (not bit-per-component) info() for TGA could break due to .hdr handling info() for BMP to shares code instead of sloppy parse can use STBI_REALLOC_SIZED if allocator doesn't support realloc code cleanup 2.08 (2015-09-13) fix to 2.07 cleanup, reading RGB PSD as RGBA 2.07 (2015-09-13) fix compiler warnings partial animated GIF support limited 16-bpc PSD support #ifdef unused functions bug with < 92 byte PIC,PNM,HDR,TGA 2.06 (2015-04-19) fix bug where PSD returns wrong '*comp' value 2.05 (2015-04-19) fix bug in progressive JPEG handling, fix warning 2.04 (2015-04-15) try to re-enable SIMD on MinGW 64-bit 2.03 (2015-04-12) extra corruption checking (mmozeiko) stbi_set_flip_vertically_on_load (nguillemot) fix NEON support; fix mingw support 2.02 (2015-01-19) fix incorrect assert, fix warning 2.01 (2015-01-17) fix various warnings; suppress SIMD on gcc 32-bit without -msse2 2.00b (2014-12-25) fix STBI_MALLOC in progressive JPEG 2.00 (2014-12-25) optimize JPG, including x86 SSE2 & NEON SIMD (ryg) progressive JPEG (stb) PGM/PPM support (Ken Miller) STBI_MALLOC,STBI_REALLOC,STBI_FREE GIF bugfix -- seemingly never worked STBI_NO_*, STBI_ONLY_* 1.48 (2014-12-14) fix incorrectly-named assert() 1.47 (2014-12-14) 1/2/4-bit PNG support, both direct and paletted (Omar Cornut & stb) optimize PNG (ryg) fix bug in interlaced PNG with user-specified channel count (stb) 1.46 (2014-08-26) fix broken tRNS chunk (colorkey-style transparency) in non-paletted PNG 1.45 (2014-08-16) fix MSVC-ARM internal compiler error by wrapping malloc 1.44 (2014-08-07) various warning fixes from Ronny Chevalier 1.43 (2014-07-15) fix MSVC-only compiler problem in code changed in 1.42 1.42 (2014-07-09) don't define _CRT_SECURE_NO_WARNINGS (affects user code) fixes to stbi__cleanup_jpeg path added STBI_ASSERT to avoid requiring assert.h 1.41 (2014-06-25) fix search&replace from 1.36 that messed up comments/error messages 1.40 (2014-06-22) fix gcc struct-initialization warning 1.39 (2014-06-15) fix to TGA optimization when req_comp != number of components in TGA; fix to GIF loading because BMP wasn't rewinding (whoops, no GIFs in my test suite) add support for BMP version 5 (more ignored fields) 1.38 (2014-06-06) suppress MSVC warnings on integer casts truncating values fix accidental rename of 'skip' field of I/O 1.37 (2014-06-04) remove duplicate typedef 1.36 (2014-06-03) convert to header file single-file library if de-iphone isn't set, load iphone images color-swapped instead of returning NULL 1.35 (2014-05-27) various warnings fix broken STBI_SIMD path fix bug where stbi_load_from_file no longer left file pointer in correct place fix broken non-easy path for 32-bit BMP (possibly never used) TGA optimization by Arseny Kapoulkine 1.34 (unknown) use STBI_NOTUSED in stbi__resample_row_generic(), fix one more leak in tga failure case 1.33 (2011-07-14) make stbi_is_hdr work in STBI_NO_HDR (as specified), minor compiler-friendly improvements 1.32 (2011-07-13) support for "info" function for all supported filetypes (SpartanJ) 1.31 (2011-06-20) a few more leak fixes, bug in PNG handling (SpartanJ) 1.30 (2011-06-11) added ability to load files via callbacks to accomidate custom input streams (Ben Wenger) removed deprecated format-specific test/load functions removed support for installable file formats (stbi_loader) -- would have been broken for IO callbacks anyway error cases in bmp and tga give messages and don't leak (Raymond Barbiero, grisha) fix inefficiency in decoding 32-bit BMP (David Woo) 1.29 (2010-08-16) various warning fixes from Aurelien Pocheville 1.28 (2010-08-01) fix bug in GIF palette transparency (SpartanJ) 1.27 (2010-08-01) cast-to-stbi_uc to fix warnings 1.26 (2010-07-24) fix bug in file buffering for PNG reported by SpartanJ 1.25 (2010-07-17) refix trans_data warning (Won Chun) 1.24 (2010-07-12) perf improvements reading from files on platforms with lock-heavy fgetc() minor perf improvements for jpeg deprecated type-specific functions so we'll get feedback if they're needed attempt to fix trans_data warning (Won Chun) 1.23 fixed bug in iPhone support 1.22 (2010-07-10) removed image *writing* support stbi_info support from Jetro Lauha GIF support from Jean-Marc Lienher iPhone PNG-extensions from James Brown warning-fixes from Nicolas Schulz and Janez Zemva (i.stbi__err. Janez (U+017D)emva) 1.21 fix use of 'stbi_uc' in header (reported by jon blow) 1.20 added support for Softimage PIC, by Tom Seddon 1.19 bug in interlaced PNG corruption check (found by ryg) 1.18 (2008-08-02) fix a threading bug (local mutable static) 1.17 support interlaced PNG 1.16 major bugfix - stbi__convert_format converted one too many pixels 1.15 initialize some fields for thread safety 1.14 fix threadsafe conversion bug header-file-only version (#define STBI_HEADER_FILE_ONLY before including) 1.13 threadsafe 1.12 const qualifiers in the API 1.11 Support installable IDCT, colorspace conversion routines 1.10 Fixes for 64-bit (don't use "unsigned long") optimized upsampling by Fabian "ryg" Giesen 1.09 Fix format-conversion for PSD code (bad global variables!) 1.08 Thatcher Ulrich's PSD code integrated by Nicolas Schulz 1.07 attempt to fix C++ warning/errors again 1.06 attempt to fix C++ warning/errors again 1.05 fix TGA loading to return correct *comp and use good luminance calc 1.04 default float alpha is 1, not 255; use 'void *' for stbi_image_free 1.03 bugfixes to STBI_NO_STDIO, STBI_NO_HDR 1.02 support for (subset of) HDR files, float interface for preferred access to them 1.01 fix bug: possible bug in handling right-side up bmps... not sure fix bug: the stbi__bmp_load() and stbi__tga_load() functions didn't work at all 1.00 interface to zlib that skips zlib header 0.99 correct handling of alpha in palette 0.98 TGA loader by lonesock; dynamically add loaders (untested) 0.97 jpeg errors on too large a file; also catch another malloc failure 0.96 fix detection of invalid v value - particleman@mollyrocket forum 0.95 during header scan, seek to markers in case of padding 0.94 STBI_NO_STDIO to disable stdio usage; rename all #defines the same 0.93 handle jpegtran output; verbose errors 0.92 read 4,8,16,24,32-bit BMP files of several formats 0.91 output 24-bit Windows 3.0 BMP files 0.90 fix a few more warnings; bump version number to approach 1.0 0.61 bugfixes due to Marc LeBlanc, Christopher Lloyd 0.60 fix compiling as c++ 0.59 fix warnings: merge Dave Moore's -Wall fixes 0.58 fix bug: zlib uncompressed mode len/nlen was wrong endian 0.57 fix bug: jpg last huffman symbol before marker was >9 bits but less than 16 available 0.56 fix bug: zlib uncompressed mode len vs. nlen 0.55 fix bug: restart_interval not initialized to 0 0.54 allow NULL for 'int *comp' 0.53 fix bug in png 3->4; speedup png decoding 0.52 png handles req_comp=3,4 directly; minor cleanup; jpeg comments 0.51 obey req_comp requests, 1-component jpegs return as 1-component, on 'test' only check type, not whether we support this variant 0.50 (2006-11-19) first released version */ /* ------------------------------------------------------------------------------ This software is available under 2 licenses -- choose whichever you prefer. ------------------------------------------------------------------------------ ALTERNATIVE A - MIT License Copyright (c) 2017 Sean Barrett Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ------------------------------------------------------------------------------ ALTERNATIVE B - Public Domain (www.unlicense.org) This is free and unencumbered software released into the public domain. Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means. In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain. We make this dedication for the benefit of the public at large and to the detriment of our heirs and successors. We intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ------------------------------------------------------------------------------ */ ================================================ FILE: libraries/stb_image_write.h ================================================ /* stb_image_write - v1.16 - public domain - http://nothings.org/stb writes out PNG/BMP/TGA/JPEG/HDR images to C stdio - Sean Barrett 2010-2015 no warranty implied; use at your own risk Before #including, #define STB_IMAGE_WRITE_IMPLEMENTATION in the file that you want to have the implementation. Will probably not work correctly with strict-aliasing optimizations. ABOUT: This header file is a library for writing images to C stdio or a callback. The PNG output is not optimal; it is 20-50% larger than the file written by a decent optimizing implementation; though providing a custom zlib compress function (see STBIW_ZLIB_COMPRESS) can mitigate that. This library is designed for source code compactness and simplicity, not optimal image file size or run-time performance. BUILDING: You can #define STBIW_ASSERT(x) before the #include to avoid using assert.h. You can #define STBIW_MALLOC(), STBIW_REALLOC(), and STBIW_FREE() to replace malloc,realloc,free. You can #define STBIW_MEMMOVE() to replace memmove() You can #define STBIW_ZLIB_COMPRESS to use a custom zlib-style compress function for PNG compression (instead of the builtin one), it must have the following signature: unsigned char * my_compress(unsigned char *data, int data_len, int *out_len, int quality); The returned data will be freed with STBIW_FREE() (free() by default), so it must be heap allocated with STBIW_MALLOC() (malloc() by default), UNICODE: If compiling for Windows and you wish to use Unicode filenames, compile with #define STBIW_WINDOWS_UTF8 and pass utf8-encoded filenames. Call stbiw_convert_wchar_to_utf8 to convert Windows wchar_t filenames to utf8. USAGE: There are five functions, one for each image file format: int stbi_write_png(char const *filename, int w, int h, int comp, const void *data, int stride_in_bytes); int stbi_write_bmp(char const *filename, int w, int h, int comp, const void *data); int stbi_write_tga(char const *filename, int w, int h, int comp, const void *data); int stbi_write_jpg(char const *filename, int w, int h, int comp, const void *data, int quality); int stbi_write_hdr(char const *filename, int w, int h, int comp, const float *data); void stbi_flip_vertically_on_write(int flag); // flag is non-zero to flip data vertically There are also five equivalent functions that use an arbitrary write function. You are expected to open/close your file-equivalent before and after calling these: int stbi_write_png_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data, int stride_in_bytes); int stbi_write_bmp_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data); int stbi_write_tga_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data); int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const float *data); int stbi_write_jpg_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data, int quality); where the callback is: void stbi_write_func(void *context, void *data, int size); You can configure it with these global variables: int stbi_write_tga_with_rle; // defaults to true; set to 0 to disable RLE int stbi_write_png_compression_level; // defaults to 8; set to higher for more compression int stbi_write_force_png_filter; // defaults to -1; set to 0..5 to force a filter mode You can define STBI_WRITE_NO_STDIO to disable the file variant of these functions, so the library will not use stdio.h at all. However, this will also disable HDR writing, because it requires stdio for formatted output. Each function returns 0 on failure and non-0 on success. The functions create an image file defined by the parameters. The image is a rectangle of pixels stored from left-to-right, top-to-bottom. Each pixel contains 'comp' channels of data stored interleaved with 8-bits per channel, in the following order: 1=Y, 2=YA, 3=RGB, 4=RGBA. (Y is monochrome color.) The rectangle is 'w' pixels wide and 'h' pixels tall. The *data pointer points to the first byte of the top-left-most pixel. For PNG, "stride_in_bytes" is the distance in bytes from the first byte of a row of pixels to the first byte of the next row of pixels. PNG creates output files with the same number of components as the input. The BMP format expands Y to RGB in the file format and does not output alpha. PNG supports writing rectangles of data even when the bytes storing rows of data are not consecutive in memory (e.g. sub-rectangles of a larger image), by supplying the stride between the beginning of adjacent rows. The other formats do not. (Thus you cannot write a native-format BMP through the BMP writer, both because it is in BGR order and because it may have padding at the end of the line.) PNG allows you to set the deflate compression level by setting the global variable 'stbi_write_png_compression_level' (it defaults to 8). HDR expects linear float data. Since the format is always 32-bit rgb(e) data, alpha (if provided) is discarded, and for monochrome data it is replicated across all three channels. TGA supports RLE or non-RLE compressed data. To use non-RLE-compressed data, set the global variable 'stbi_write_tga_with_rle' to 0. JPEG does ignore alpha channels in input data; quality is between 1 and 100. Higher quality looks better but results in a bigger image. JPEG baseline (no JPEG progressive). CREDITS: Sean Barrett - PNG/BMP/TGA Baldur Karlsson - HDR Jean-Sebastien Guay - TGA monochrome Tim Kelsey - misc enhancements Alan Hickman - TGA RLE Emmanuel Julien - initial file IO callback implementation Jon Olick - original jo_jpeg.cpp code Daniel Gibson - integrate JPEG, allow external zlib Aarni Koskela - allow choosing PNG filter bugfixes: github:Chribba Guillaume Chereau github:jry2 github:romigrou Sergio Gonzalez Jonas Karlsson Filip Wasil Thatcher Ulrich github:poppolopoppo Patrick Boettcher github:xeekworx Cap Petschulat Simon Rodriguez Ivan Tikhonov github:ignotion Adam Schackart Andrew Kensler LICENSE See end of file for license information. */ #ifndef INCLUDE_STB_IMAGE_WRITE_H #define INCLUDE_STB_IMAGE_WRITE_H #include // if STB_IMAGE_WRITE_STATIC causes problems, try defining STBIWDEF to 'inline' or 'static inline' #ifndef STBIWDEF #ifdef STB_IMAGE_WRITE_STATIC #define STBIWDEF static #else #ifdef __cplusplus #define STBIWDEF extern "C" #else #define STBIWDEF extern #endif #endif #endif #ifndef STB_IMAGE_WRITE_STATIC // C++ forbids static forward declarations STBIWDEF int stbi_write_tga_with_rle; STBIWDEF int stbi_write_png_compression_level; STBIWDEF int stbi_write_force_png_filter; #endif #ifndef STBI_WRITE_NO_STDIO STBIWDEF int stbi_write_png(char const *filename, int w, int h, int comp, const void *data, int stride_in_bytes); STBIWDEF int stbi_write_bmp(char const *filename, int w, int h, int comp, const void *data); STBIWDEF int stbi_write_tga(char const *filename, int w, int h, int comp, const void *data); STBIWDEF int stbi_write_hdr(char const *filename, int w, int h, int comp, const float *data); STBIWDEF int stbi_write_jpg(char const *filename, int x, int y, int comp, const void *data, int quality); #ifdef STBIW_WINDOWS_UTF8 STBIWDEF int stbiw_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input); #endif #endif typedef void stbi_write_func(void *context, void *data, int size); STBIWDEF int stbi_write_png_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data, int stride_in_bytes); STBIWDEF int stbi_write_bmp_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data); STBIWDEF int stbi_write_tga_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data); STBIWDEF int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const float *data); STBIWDEF int stbi_write_jpg_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data, int quality); STBIWDEF void stbi_flip_vertically_on_write(int flip_boolean); #endif//INCLUDE_STB_IMAGE_WRITE_H #ifdef STB_IMAGE_WRITE_IMPLEMENTATION #ifdef _WIN32 #ifndef _CRT_SECURE_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS #endif #ifndef _CRT_NONSTDC_NO_DEPRECATE #define _CRT_NONSTDC_NO_DEPRECATE #endif #endif #ifndef STBI_WRITE_NO_STDIO #include #endif // STBI_WRITE_NO_STDIO #include #include #include #include #if defined(STBIW_MALLOC) && defined(STBIW_FREE) && (defined(STBIW_REALLOC) || defined(STBIW_REALLOC_SIZED)) // ok #elif !defined(STBIW_MALLOC) && !defined(STBIW_FREE) && !defined(STBIW_REALLOC) && !defined(STBIW_REALLOC_SIZED) // ok #else #error "Must define all or none of STBIW_MALLOC, STBIW_FREE, and STBIW_REALLOC (or STBIW_REALLOC_SIZED)." #endif #ifndef STBIW_MALLOC #define STBIW_MALLOC(sz) malloc(sz) #define STBIW_REALLOC(p,newsz) realloc(p,newsz) #define STBIW_FREE(p) free(p) #endif #ifndef STBIW_REALLOC_SIZED #define STBIW_REALLOC_SIZED(p,oldsz,newsz) STBIW_REALLOC(p,newsz) #endif #ifndef STBIW_MEMMOVE #define STBIW_MEMMOVE(a,b,sz) memmove(a,b,sz) #endif #ifndef STBIW_ASSERT #include #define STBIW_ASSERT(x) assert(x) #endif #define STBIW_UCHAR(x) (unsigned char) ((x) & 0xff) #ifdef STB_IMAGE_WRITE_STATIC static int stbi_write_png_compression_level = 8; static int stbi_write_tga_with_rle = 1; static int stbi_write_force_png_filter = -1; #else int stbi_write_png_compression_level = 8; int stbi_write_tga_with_rle = 1; int stbi_write_force_png_filter = -1; #endif static int stbi__flip_vertically_on_write = 0; STBIWDEF void stbi_flip_vertically_on_write(int flag) { stbi__flip_vertically_on_write = flag; } typedef struct { stbi_write_func *func; void *context; unsigned char buffer[64]; int buf_used; } stbi__write_context; // initialize a callback-based context static void stbi__start_write_callbacks(stbi__write_context *s, stbi_write_func *c, void *context) { s->func = c; s->context = context; } #ifndef STBI_WRITE_NO_STDIO static void stbi__stdio_write(void *context, void *data, int size) { fwrite(data,1,size,(FILE*) context); } #if defined(_WIN32) && defined(STBIW_WINDOWS_UTF8) #ifdef __cplusplus #define STBIW_EXTERN extern "C" #else #define STBIW_EXTERN extern #endif STBIW_EXTERN __declspec(dllimport) int __stdcall MultiByteToWideChar(unsigned int cp, unsigned long flags, const char *str, int cbmb, wchar_t *widestr, int cchwide); STBIW_EXTERN __declspec(dllimport) int __stdcall WideCharToMultiByte(unsigned int cp, unsigned long flags, const wchar_t *widestr, int cchwide, char *str, int cbmb, const char *defchar, int *used_default); STBIWDEF int stbiw_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input) { return WideCharToMultiByte(65001 /* UTF8 */, 0, input, -1, buffer, (int) bufferlen, NULL, NULL); } #endif static FILE *stbiw__fopen(char const *filename, char const *mode) { FILE *f; #if defined(_WIN32) && defined(STBIW_WINDOWS_UTF8) wchar_t wMode[64]; wchar_t wFilename[1024]; if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, filename, -1, wFilename, sizeof(wFilename)/sizeof(*wFilename))) return 0; if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, mode, -1, wMode, sizeof(wMode)/sizeof(*wMode))) return 0; #if defined(_MSC_VER) && _MSC_VER >= 1400 if (0 != _wfopen_s(&f, wFilename, wMode)) f = 0; #else f = _wfopen(wFilename, wMode); #endif #elif defined(_MSC_VER) && _MSC_VER >= 1400 if (0 != fopen_s(&f, filename, mode)) f=0; #else f = fopen(filename, mode); #endif return f; } static int stbi__start_write_file(stbi__write_context *s, const char *filename) { FILE *f = stbiw__fopen(filename, "wb"); stbi__start_write_callbacks(s, stbi__stdio_write, (void *) f); return f != NULL; } static void stbi__end_write_file(stbi__write_context *s) { fclose((FILE *)s->context); } #endif // !STBI_WRITE_NO_STDIO typedef unsigned int stbiw_uint32; typedef int stb_image_write_test[sizeof(stbiw_uint32)==4 ? 1 : -1]; static void stbiw__writefv(stbi__write_context *s, const char *fmt, va_list v) { while (*fmt) { switch (*fmt++) { case ' ': break; case '1': { unsigned char x = STBIW_UCHAR(va_arg(v, int)); s->func(s->context,&x,1); break; } case '2': { int x = va_arg(v,int); unsigned char b[2]; b[0] = STBIW_UCHAR(x); b[1] = STBIW_UCHAR(x>>8); s->func(s->context,b,2); break; } case '4': { stbiw_uint32 x = va_arg(v,int); unsigned char b[4]; b[0]=STBIW_UCHAR(x); b[1]=STBIW_UCHAR(x>>8); b[2]=STBIW_UCHAR(x>>16); b[3]=STBIW_UCHAR(x>>24); s->func(s->context,b,4); break; } default: STBIW_ASSERT(0); return; } } } static void stbiw__writef(stbi__write_context *s, const char *fmt, ...) { va_list v; va_start(v, fmt); stbiw__writefv(s, fmt, v); va_end(v); } static void stbiw__write_flush(stbi__write_context *s) { if (s->buf_used) { s->func(s->context, &s->buffer, s->buf_used); s->buf_used = 0; } } static void stbiw__putc(stbi__write_context *s, unsigned char c) { s->func(s->context, &c, 1); } static void stbiw__write1(stbi__write_context *s, unsigned char a) { if ((size_t)s->buf_used + 1 > sizeof(s->buffer)) stbiw__write_flush(s); s->buffer[s->buf_used++] = a; } static void stbiw__write3(stbi__write_context *s, unsigned char a, unsigned char b, unsigned char c) { int n; if ((size_t)s->buf_used + 3 > sizeof(s->buffer)) stbiw__write_flush(s); n = s->buf_used; s->buf_used = n+3; s->buffer[n+0] = a; s->buffer[n+1] = b; s->buffer[n+2] = c; } static void stbiw__write_pixel(stbi__write_context *s, int rgb_dir, int comp, int write_alpha, int expand_mono, unsigned char *d) { unsigned char bg[3] = { 255, 0, 255}, px[3]; int k; if (write_alpha < 0) stbiw__write1(s, d[comp - 1]); switch (comp) { case 2: // 2 pixels = mono + alpha, alpha is written separately, so same as 1-channel case case 1: if (expand_mono) stbiw__write3(s, d[0], d[0], d[0]); // monochrome bmp else stbiw__write1(s, d[0]); // monochrome TGA break; case 4: if (!write_alpha) { // composite against pink background for (k = 0; k < 3; ++k) px[k] = bg[k] + ((d[k] - bg[k]) * d[3]) / 255; stbiw__write3(s, px[1 - rgb_dir], px[1], px[1 + rgb_dir]); break; } /* FALLTHROUGH */ case 3: stbiw__write3(s, d[1 - rgb_dir], d[1], d[1 + rgb_dir]); break; } if (write_alpha > 0) stbiw__write1(s, d[comp - 1]); } static void stbiw__write_pixels(stbi__write_context *s, int rgb_dir, int vdir, int x, int y, int comp, void *data, int write_alpha, int scanline_pad, int expand_mono) { stbiw_uint32 zero = 0; int i,j, j_end; if (y <= 0) return; if (stbi__flip_vertically_on_write) vdir *= -1; if (vdir < 0) { j_end = -1; j = y-1; } else { j_end = y; j = 0; } for (; j != j_end; j += vdir) { for (i=0; i < x; ++i) { unsigned char *d = (unsigned char *) data + (j*x+i)*comp; stbiw__write_pixel(s, rgb_dir, comp, write_alpha, expand_mono, d); } stbiw__write_flush(s); s->func(s->context, &zero, scanline_pad); } } static int stbiw__outfile(stbi__write_context *s, int rgb_dir, int vdir, int x, int y, int comp, int expand_mono, void *data, int alpha, int pad, const char *fmt, ...) { if (y < 0 || x < 0) { return 0; } else { va_list v; va_start(v, fmt); stbiw__writefv(s, fmt, v); va_end(v); stbiw__write_pixels(s,rgb_dir,vdir,x,y,comp,data,alpha,pad, expand_mono); return 1; } } static int stbi_write_bmp_core(stbi__write_context *s, int x, int y, int comp, const void *data) { if (comp != 4) { // write RGB bitmap int pad = (-x*3) & 3; return stbiw__outfile(s,-1,-1,x,y,comp,1,(void *) data,0,pad, "11 4 22 4" "4 44 22 444444", 'B', 'M', 14+40+(x*3+pad)*y, 0,0, 14+40, // file header 40, x,y, 1,24, 0,0,0,0,0,0); // bitmap header } else { // RGBA bitmaps need a v4 header // use BI_BITFIELDS mode with 32bpp and alpha mask // (straight BI_RGB with alpha mask doesn't work in most readers) return stbiw__outfile(s,-1,-1,x,y,comp,1,(void *)data,1,0, "11 4 22 4" "4 44 22 444444 4444 4 444 444 444 444", 'B', 'M', 14+108+x*y*4, 0, 0, 14+108, // file header 108, x,y, 1,32, 3,0,0,0,0,0, 0xff0000,0xff00,0xff,0xff000000u, 0, 0,0,0, 0,0,0, 0,0,0, 0,0,0); // bitmap V4 header } } STBIWDEF int stbi_write_bmp_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data) { stbi__write_context s = { 0 }; stbi__start_write_callbacks(&s, func, context); return stbi_write_bmp_core(&s, x, y, comp, data); } #ifndef STBI_WRITE_NO_STDIO STBIWDEF int stbi_write_bmp(char const *filename, int x, int y, int comp, const void *data) { stbi__write_context s = { 0 }; if (stbi__start_write_file(&s,filename)) { int r = stbi_write_bmp_core(&s, x, y, comp, data); stbi__end_write_file(&s); return r; } else return 0; } #endif //!STBI_WRITE_NO_STDIO static int stbi_write_tga_core(stbi__write_context *s, int x, int y, int comp, void *data) { int has_alpha = (comp == 2 || comp == 4); int colorbytes = has_alpha ? comp-1 : comp; int format = colorbytes < 2 ? 3 : 2; // 3 color channels (RGB/RGBA) = 2, 1 color channel (Y/YA) = 3 if (y < 0 || x < 0) return 0; if (!stbi_write_tga_with_rle) { return stbiw__outfile(s, -1, -1, x, y, comp, 0, (void *) data, has_alpha, 0, "111 221 2222 11", 0, 0, format, 0, 0, 0, 0, 0, x, y, (colorbytes + has_alpha) * 8, has_alpha * 8); } else { int i,j,k; int jend, jdir; stbiw__writef(s, "111 221 2222 11", 0,0,format+8, 0,0,0, 0,0,x,y, (colorbytes + has_alpha) * 8, has_alpha * 8); if (stbi__flip_vertically_on_write) { j = 0; jend = y; jdir = 1; } else { j = y-1; jend = -1; jdir = -1; } for (; j != jend; j += jdir) { unsigned char *row = (unsigned char *) data + j * x * comp; int len; for (i = 0; i < x; i += len) { unsigned char *begin = row + i * comp; int diff = 1; len = 1; if (i < x - 1) { ++len; diff = memcmp(begin, row + (i + 1) * comp, comp); if (diff) { const unsigned char *prev = begin; for (k = i + 2; k < x && len < 128; ++k) { if (memcmp(prev, row + k * comp, comp)) { prev += comp; ++len; } else { --len; break; } } } else { for (k = i + 2; k < x && len < 128; ++k) { if (!memcmp(begin, row + k * comp, comp)) { ++len; } else { break; } } } } if (diff) { unsigned char header = STBIW_UCHAR(len - 1); stbiw__write1(s, header); for (k = 0; k < len; ++k) { stbiw__write_pixel(s, -1, comp, has_alpha, 0, begin + k * comp); } } else { unsigned char header = STBIW_UCHAR(len - 129); stbiw__write1(s, header); stbiw__write_pixel(s, -1, comp, has_alpha, 0, begin); } } } stbiw__write_flush(s); } return 1; } STBIWDEF int stbi_write_tga_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data) { stbi__write_context s = { 0 }; stbi__start_write_callbacks(&s, func, context); return stbi_write_tga_core(&s, x, y, comp, (void *) data); } #ifndef STBI_WRITE_NO_STDIO STBIWDEF int stbi_write_tga(char const *filename, int x, int y, int comp, const void *data) { stbi__write_context s = { 0 }; if (stbi__start_write_file(&s,filename)) { int r = stbi_write_tga_core(&s, x, y, comp, (void *) data); stbi__end_write_file(&s); return r; } else return 0; } #endif // ************************************************************************************************* // Radiance RGBE HDR writer // by Baldur Karlsson #define stbiw__max(a, b) ((a) > (b) ? (a) : (b)) #ifndef STBI_WRITE_NO_STDIO static void stbiw__linear_to_rgbe(unsigned char *rgbe, float *linear) { int exponent; float maxcomp = stbiw__max(linear[0], stbiw__max(linear[1], linear[2])); if (maxcomp < 1e-32f) { rgbe[0] = rgbe[1] = rgbe[2] = rgbe[3] = 0; } else { float normalize = (float) frexp(maxcomp, &exponent) * 256.0f/maxcomp; rgbe[0] = (unsigned char)(linear[0] * normalize); rgbe[1] = (unsigned char)(linear[1] * normalize); rgbe[2] = (unsigned char)(linear[2] * normalize); rgbe[3] = (unsigned char)(exponent + 128); } } static void stbiw__write_run_data(stbi__write_context *s, int length, unsigned char databyte) { unsigned char lengthbyte = STBIW_UCHAR(length+128); STBIW_ASSERT(length+128 <= 255); s->func(s->context, &lengthbyte, 1); s->func(s->context, &databyte, 1); } static void stbiw__write_dump_data(stbi__write_context *s, int length, unsigned char *data) { unsigned char lengthbyte = STBIW_UCHAR(length); STBIW_ASSERT(length <= 128); // inconsistent with spec but consistent with official code s->func(s->context, &lengthbyte, 1); s->func(s->context, data, length); } static void stbiw__write_hdr_scanline(stbi__write_context *s, int width, int ncomp, unsigned char *scratch, float *scanline) { unsigned char scanlineheader[4] = { 2, 2, 0, 0 }; unsigned char rgbe[4]; float linear[3]; int x; scanlineheader[2] = (width&0xff00)>>8; scanlineheader[3] = (width&0x00ff); /* skip RLE for images too small or large */ if (width < 8 || width >= 32768) { for (x=0; x < width; x++) { switch (ncomp) { case 4: /* fallthrough */ case 3: linear[2] = scanline[x*ncomp + 2]; linear[1] = scanline[x*ncomp + 1]; linear[0] = scanline[x*ncomp + 0]; break; default: linear[0] = linear[1] = linear[2] = scanline[x*ncomp + 0]; break; } stbiw__linear_to_rgbe(rgbe, linear); s->func(s->context, rgbe, 4); } } else { int c,r; /* encode into scratch buffer */ for (x=0; x < width; x++) { switch(ncomp) { case 4: /* fallthrough */ case 3: linear[2] = scanline[x*ncomp + 2]; linear[1] = scanline[x*ncomp + 1]; linear[0] = scanline[x*ncomp + 0]; break; default: linear[0] = linear[1] = linear[2] = scanline[x*ncomp + 0]; break; } stbiw__linear_to_rgbe(rgbe, linear); scratch[x + width*0] = rgbe[0]; scratch[x + width*1] = rgbe[1]; scratch[x + width*2] = rgbe[2]; scratch[x + width*3] = rgbe[3]; } s->func(s->context, scanlineheader, 4); /* RLE each component separately */ for (c=0; c < 4; c++) { unsigned char *comp = &scratch[width*c]; x = 0; while (x < width) { // find first run r = x; while (r+2 < width) { if (comp[r] == comp[r+1] && comp[r] == comp[r+2]) break; ++r; } if (r+2 >= width) r = width; // dump up to first run while (x < r) { int len = r-x; if (len > 128) len = 128; stbiw__write_dump_data(s, len, &comp[x]); x += len; } // if there's a run, output it if (r+2 < width) { // same test as what we break out of in search loop, so only true if we break'd // find next byte after run while (r < width && comp[r] == comp[x]) ++r; // output run up to r while (x < r) { int len = r-x; if (len > 127) len = 127; stbiw__write_run_data(s, len, comp[x]); x += len; } } } } } } static int stbi_write_hdr_core(stbi__write_context *s, int x, int y, int comp, float *data) { if (y <= 0 || x <= 0 || data == NULL) return 0; else { // Each component is stored separately. Allocate scratch space for full output scanline. unsigned char *scratch = (unsigned char *) STBIW_MALLOC(x*4); int i, len; char buffer[128]; char header[] = "#?RADIANCE\n# Written by stb_image_write.h\nFORMAT=32-bit_rle_rgbe\n"; s->func(s->context, header, sizeof(header)-1); #ifdef __STDC_LIB_EXT1__ len = sprintf_s(buffer, sizeof(buffer), "EXPOSURE= 1.0000000000000\n\n-Y %d +X %d\n", y, x); #else len = sprintf(buffer, "EXPOSURE= 1.0000000000000\n\n-Y %d +X %d\n", y, x); #endif s->func(s->context, buffer, len); for(i=0; i < y; i++) stbiw__write_hdr_scanline(s, x, comp, scratch, data + comp*x*(stbi__flip_vertically_on_write ? y-1-i : i)); STBIW_FREE(scratch); return 1; } } STBIWDEF int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const float *data) { stbi__write_context s = { 0 }; stbi__start_write_callbacks(&s, func, context); return stbi_write_hdr_core(&s, x, y, comp, (float *) data); } STBIWDEF int stbi_write_hdr(char const *filename, int x, int y, int comp, const float *data) { stbi__write_context s = { 0 }; if (stbi__start_write_file(&s,filename)) { int r = stbi_write_hdr_core(&s, x, y, comp, (float *) data); stbi__end_write_file(&s); return r; } else return 0; } #endif // STBI_WRITE_NO_STDIO ////////////////////////////////////////////////////////////////////////////// // // PNG writer // #ifndef STBIW_ZLIB_COMPRESS // stretchy buffer; stbiw__sbpush() == vector<>::push_back() -- stbiw__sbcount() == vector<>::size() #define stbiw__sbraw(a) ((int *) (void *) (a) - 2) #define stbiw__sbm(a) stbiw__sbraw(a)[0] #define stbiw__sbn(a) stbiw__sbraw(a)[1] #define stbiw__sbneedgrow(a,n) ((a)==0 || stbiw__sbn(a)+n >= stbiw__sbm(a)) #define stbiw__sbmaybegrow(a,n) (stbiw__sbneedgrow(a,(n)) ? stbiw__sbgrow(a,n) : 0) #define stbiw__sbgrow(a,n) stbiw__sbgrowf((void **) &(a), (n), sizeof(*(a))) #define stbiw__sbpush(a, v) (stbiw__sbmaybegrow(a,1), (a)[stbiw__sbn(a)++] = (v)) #define stbiw__sbcount(a) ((a) ? stbiw__sbn(a) : 0) #define stbiw__sbfree(a) ((a) ? STBIW_FREE(stbiw__sbraw(a)),0 : 0) static void *stbiw__sbgrowf(void **arr, int increment, int itemsize) { int m = *arr ? 2*stbiw__sbm(*arr)+increment : increment+1; void *p = STBIW_REALLOC_SIZED(*arr ? stbiw__sbraw(*arr) : 0, *arr ? (stbiw__sbm(*arr)*itemsize + sizeof(int)*2) : 0, itemsize * m + sizeof(int)*2); STBIW_ASSERT(p); if (p) { if (!*arr) ((int *) p)[1] = 0; *arr = (void *) ((int *) p + 2); stbiw__sbm(*arr) = m; } return *arr; } static unsigned char *stbiw__zlib_flushf(unsigned char *data, unsigned int *bitbuffer, int *bitcount) { while (*bitcount >= 8) { stbiw__sbpush(data, STBIW_UCHAR(*bitbuffer)); *bitbuffer >>= 8; *bitcount -= 8; } return data; } static int stbiw__zlib_bitrev(int code, int codebits) { int res=0; while (codebits--) { res = (res << 1) | (code & 1); code >>= 1; } return res; } static unsigned int stbiw__zlib_countm(unsigned char *a, unsigned char *b, int limit) { int i; for (i=0; i < limit && i < 258; ++i) if (a[i] != b[i]) break; return i; } static unsigned int stbiw__zhash(unsigned char *data) { stbiw_uint32 hash = data[0] + (data[1] << 8) + (data[2] << 16); hash ^= hash << 3; hash += hash >> 5; hash ^= hash << 4; hash += hash >> 17; hash ^= hash << 25; hash += hash >> 6; return hash; } #define stbiw__zlib_flush() (out = stbiw__zlib_flushf(out, &bitbuf, &bitcount)) #define stbiw__zlib_add(code,codebits) \ (bitbuf |= (code) << bitcount, bitcount += (codebits), stbiw__zlib_flush()) #define stbiw__zlib_huffa(b,c) stbiw__zlib_add(stbiw__zlib_bitrev(b,c),c) // default huffman tables #define stbiw__zlib_huff1(n) stbiw__zlib_huffa(0x30 + (n), 8) #define stbiw__zlib_huff2(n) stbiw__zlib_huffa(0x190 + (n)-144, 9) #define stbiw__zlib_huff3(n) stbiw__zlib_huffa(0 + (n)-256,7) #define stbiw__zlib_huff4(n) stbiw__zlib_huffa(0xc0 + (n)-280,8) #define stbiw__zlib_huff(n) ((n) <= 143 ? stbiw__zlib_huff1(n) : (n) <= 255 ? stbiw__zlib_huff2(n) : (n) <= 279 ? stbiw__zlib_huff3(n) : stbiw__zlib_huff4(n)) #define stbiw__zlib_huffb(n) ((n) <= 143 ? stbiw__zlib_huff1(n) : stbiw__zlib_huff2(n)) #define stbiw__ZHASH 16384 #endif // STBIW_ZLIB_COMPRESS STBIWDEF unsigned char * stbi_zlib_compress(unsigned char *data, int data_len, int *out_len, int quality) { #ifdef STBIW_ZLIB_COMPRESS // user provided a zlib compress implementation, use that return STBIW_ZLIB_COMPRESS(data, data_len, out_len, quality); #else // use builtin static unsigned short lengthc[] = { 3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258, 259 }; static unsigned char lengtheb[]= { 0,0,0,0,0,0,0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0 }; static unsigned short distc[] = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577, 32768 }; static unsigned char disteb[] = { 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13 }; unsigned int bitbuf=0; int i,j, bitcount=0; unsigned char *out = NULL; unsigned char ***hash_table = (unsigned char***) STBIW_MALLOC(stbiw__ZHASH * sizeof(unsigned char**)); if (hash_table == NULL) return NULL; if (quality < 5) quality = 5; stbiw__sbpush(out, 0x78); // DEFLATE 32K window stbiw__sbpush(out, 0x5e); // FLEVEL = 1 stbiw__zlib_add(1,1); // BFINAL = 1 stbiw__zlib_add(1,2); // BTYPE = 1 -- fixed huffman for (i=0; i < stbiw__ZHASH; ++i) hash_table[i] = NULL; i=0; while (i < data_len-3) { // hash next 3 bytes of data to be compressed int h = stbiw__zhash(data+i)&(stbiw__ZHASH-1), best=3; unsigned char *bestloc = 0; unsigned char **hlist = hash_table[h]; int n = stbiw__sbcount(hlist); for (j=0; j < n; ++j) { if (hlist[j]-data > i-32768) { // if entry lies within window int d = stbiw__zlib_countm(hlist[j], data+i, data_len-i); if (d >= best) { best=d; bestloc=hlist[j]; } } } // when hash table entry is too long, delete half the entries if (hash_table[h] && stbiw__sbn(hash_table[h]) == 2*quality) { STBIW_MEMMOVE(hash_table[h], hash_table[h]+quality, sizeof(hash_table[h][0])*quality); stbiw__sbn(hash_table[h]) = quality; } stbiw__sbpush(hash_table[h],data+i); if (bestloc) { // "lazy matching" - check match at *next* byte, and if it's better, do cur byte as literal h = stbiw__zhash(data+i+1)&(stbiw__ZHASH-1); hlist = hash_table[h]; n = stbiw__sbcount(hlist); for (j=0; j < n; ++j) { if (hlist[j]-data > i-32767) { int e = stbiw__zlib_countm(hlist[j], data+i+1, data_len-i-1); if (e > best) { // if next match is better, bail on current match bestloc = NULL; break; } } } } if (bestloc) { int d = (int) (data+i - bestloc); // distance back STBIW_ASSERT(d <= 32767 && best <= 258); for (j=0; best > lengthc[j+1]-1; ++j); stbiw__zlib_huff(j+257); if (lengtheb[j]) stbiw__zlib_add(best - lengthc[j], lengtheb[j]); for (j=0; d > distc[j+1]-1; ++j); stbiw__zlib_add(stbiw__zlib_bitrev(j,5),5); if (disteb[j]) stbiw__zlib_add(d - distc[j], disteb[j]); i += best; } else { stbiw__zlib_huffb(data[i]); ++i; } } // write out final bytes for (;i < data_len; ++i) stbiw__zlib_huffb(data[i]); stbiw__zlib_huff(256); // end of block // pad with 0 bits to byte boundary while (bitcount) stbiw__zlib_add(0,1); for (i=0; i < stbiw__ZHASH; ++i) (void) stbiw__sbfree(hash_table[i]); STBIW_FREE(hash_table); // store uncompressed instead if compression was worse if (stbiw__sbn(out) > data_len + 2 + ((data_len+32766)/32767)*5) { stbiw__sbn(out) = 2; // truncate to DEFLATE 32K window and FLEVEL = 1 for (j = 0; j < data_len;) { int blocklen = data_len - j; if (blocklen > 32767) blocklen = 32767; stbiw__sbpush(out, data_len - j == blocklen); // BFINAL = ?, BTYPE = 0 -- no compression stbiw__sbpush(out, STBIW_UCHAR(blocklen)); // LEN stbiw__sbpush(out, STBIW_UCHAR(blocklen >> 8)); stbiw__sbpush(out, STBIW_UCHAR(~blocklen)); // NLEN stbiw__sbpush(out, STBIW_UCHAR(~blocklen >> 8)); memcpy(out+stbiw__sbn(out), data+j, blocklen); stbiw__sbn(out) += blocklen; j += blocklen; } } { // compute adler32 on input unsigned int s1=1, s2=0; int blocklen = (int) (data_len % 5552); j=0; while (j < data_len) { for (i=0; i < blocklen; ++i) { s1 += data[j+i]; s2 += s1; } s1 %= 65521; s2 %= 65521; j += blocklen; blocklen = 5552; } stbiw__sbpush(out, STBIW_UCHAR(s2 >> 8)); stbiw__sbpush(out, STBIW_UCHAR(s2)); stbiw__sbpush(out, STBIW_UCHAR(s1 >> 8)); stbiw__sbpush(out, STBIW_UCHAR(s1)); } *out_len = stbiw__sbn(out); // make returned pointer freeable STBIW_MEMMOVE(stbiw__sbraw(out), out, *out_len); return (unsigned char *) stbiw__sbraw(out); #endif // STBIW_ZLIB_COMPRESS } static unsigned int stbiw__crc32(unsigned char *buffer, int len) { #ifdef STBIW_CRC32 return STBIW_CRC32(buffer, len); #else static unsigned int crc_table[256] = { 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0eDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D }; unsigned int crc = ~0u; int i; for (i=0; i < len; ++i) crc = (crc >> 8) ^ crc_table[buffer[i] ^ (crc & 0xff)]; return ~crc; #endif } #define stbiw__wpng4(o,a,b,c,d) ((o)[0]=STBIW_UCHAR(a),(o)[1]=STBIW_UCHAR(b),(o)[2]=STBIW_UCHAR(c),(o)[3]=STBIW_UCHAR(d),(o)+=4) #define stbiw__wp32(data,v) stbiw__wpng4(data, (v)>>24,(v)>>16,(v)>>8,(v)); #define stbiw__wptag(data,s) stbiw__wpng4(data, s[0],s[1],s[2],s[3]) static void stbiw__wpcrc(unsigned char **data, int len) { unsigned int crc = stbiw__crc32(*data - len - 4, len+4); stbiw__wp32(*data, crc); } static unsigned char stbiw__paeth(int a, int b, int c) { int p = a + b - c, pa = abs(p-a), pb = abs(p-b), pc = abs(p-c); if (pa <= pb && pa <= pc) return STBIW_UCHAR(a); if (pb <= pc) return STBIW_UCHAR(b); return STBIW_UCHAR(c); } // @OPTIMIZE: provide an option that always forces left-predict or paeth predict static void stbiw__encode_png_line(unsigned char *pixels, int stride_bytes, int width, int height, int y, int n, int filter_type, signed char *line_buffer) { static int mapping[] = { 0,1,2,3,4 }; static int firstmap[] = { 0,1,0,5,6 }; int *mymap = (y != 0) ? mapping : firstmap; int i; int type = mymap[filter_type]; unsigned char *z = pixels + stride_bytes * (stbi__flip_vertically_on_write ? height-1-y : y); int signed_stride = stbi__flip_vertically_on_write ? -stride_bytes : stride_bytes; if (type==0) { memcpy(line_buffer, z, width*n); return; } // first loop isn't optimized since it's just one pixel for (i = 0; i < n; ++i) { switch (type) { case 1: line_buffer[i] = z[i]; break; case 2: line_buffer[i] = z[i] - z[i-signed_stride]; break; case 3: line_buffer[i] = z[i] - (z[i-signed_stride]>>1); break; case 4: line_buffer[i] = (signed char) (z[i] - stbiw__paeth(0,z[i-signed_stride],0)); break; case 5: line_buffer[i] = z[i]; break; case 6: line_buffer[i] = z[i]; break; } } switch (type) { case 1: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - z[i-n]; break; case 2: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - z[i-signed_stride]; break; case 3: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - ((z[i-n] + z[i-signed_stride])>>1); break; case 4: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - stbiw__paeth(z[i-n], z[i-signed_stride], z[i-signed_stride-n]); break; case 5: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - (z[i-n]>>1); break; case 6: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - stbiw__paeth(z[i-n], 0,0); break; } } STBIWDEF unsigned char *stbi_write_png_to_mem(const unsigned char *pixels, int stride_bytes, int x, int y, int n, int *out_len) { int force_filter = stbi_write_force_png_filter; int ctype[5] = { -1, 0, 4, 2, 6 }; unsigned char sig[8] = { 137,80,78,71,13,10,26,10 }; unsigned char *out,*o, *filt, *zlib; signed char *line_buffer; int j,zlen; if (stride_bytes == 0) stride_bytes = x * n; if (force_filter >= 5) { force_filter = -1; } filt = (unsigned char *) STBIW_MALLOC((x*n+1) * y); if (!filt) return 0; line_buffer = (signed char *) STBIW_MALLOC(x * n); if (!line_buffer) { STBIW_FREE(filt); return 0; } for (j=0; j < y; ++j) { int filter_type; if (force_filter > -1) { filter_type = force_filter; stbiw__encode_png_line((unsigned char*)(pixels), stride_bytes, x, y, j, n, force_filter, line_buffer); } else { // Estimate the best filter by running through all of them: int best_filter = 0, best_filter_val = 0x7fffffff, est, i; for (filter_type = 0; filter_type < 5; filter_type++) { stbiw__encode_png_line((unsigned char*)(pixels), stride_bytes, x, y, j, n, filter_type, line_buffer); // Estimate the entropy of the line using this filter; the less, the better. est = 0; for (i = 0; i < x*n; ++i) { est += abs((signed char) line_buffer[i]); } if (est < best_filter_val) { best_filter_val = est; best_filter = filter_type; } } if (filter_type != best_filter) { // If the last iteration already got us the best filter, don't redo it stbiw__encode_png_line((unsigned char*)(pixels), stride_bytes, x, y, j, n, best_filter, line_buffer); filter_type = best_filter; } } // when we get here, filter_type contains the filter type, and line_buffer contains the data filt[j*(x*n+1)] = (unsigned char) filter_type; STBIW_MEMMOVE(filt+j*(x*n+1)+1, line_buffer, x*n); } STBIW_FREE(line_buffer); zlib = stbi_zlib_compress(filt, y*( x*n+1), &zlen, stbi_write_png_compression_level); STBIW_FREE(filt); if (!zlib) return 0; // each tag requires 12 bytes of overhead out = (unsigned char *) STBIW_MALLOC(8 + 12+13 + 12+zlen + 12); if (!out) return 0; *out_len = 8 + 12+13 + 12+zlen + 12; o=out; STBIW_MEMMOVE(o,sig,8); o+= 8; stbiw__wp32(o, 13); // header length stbiw__wptag(o, "IHDR"); stbiw__wp32(o, x); stbiw__wp32(o, y); *o++ = 8; *o++ = STBIW_UCHAR(ctype[n]); *o++ = 0; *o++ = 0; *o++ = 0; stbiw__wpcrc(&o,13); stbiw__wp32(o, zlen); stbiw__wptag(o, "IDAT"); STBIW_MEMMOVE(o, zlib, zlen); o += zlen; STBIW_FREE(zlib); stbiw__wpcrc(&o, zlen); stbiw__wp32(o,0); stbiw__wptag(o, "IEND"); stbiw__wpcrc(&o,0); STBIW_ASSERT(o == out + *out_len); return out; } #ifndef STBI_WRITE_NO_STDIO STBIWDEF int stbi_write_png(char const *filename, int x, int y, int comp, const void *data, int stride_bytes) { FILE *f; int len; unsigned char *png = stbi_write_png_to_mem((const unsigned char *) data, stride_bytes, x, y, comp, &len); if (png == NULL) return 0; f = stbiw__fopen(filename, "wb"); if (!f) { STBIW_FREE(png); return 0; } fwrite(png, 1, len, f); fclose(f); STBIW_FREE(png); return 1; } #endif STBIWDEF int stbi_write_png_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data, int stride_bytes) { int len; unsigned char *png = stbi_write_png_to_mem((const unsigned char *) data, stride_bytes, x, y, comp, &len); if (png == NULL) return 0; func(context, png, len); STBIW_FREE(png); return 1; } /* *************************************************************************** * * JPEG writer * * This is based on Jon Olick's jo_jpeg.cpp: * public domain Simple, Minimalistic JPEG writer - http://www.jonolick.com/code.html */ static const unsigned char stbiw__jpg_ZigZag[] = { 0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18, 24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63 }; static void stbiw__jpg_writeBits(stbi__write_context *s, int *bitBufP, int *bitCntP, const unsigned short *bs) { int bitBuf = *bitBufP, bitCnt = *bitCntP; bitCnt += bs[1]; bitBuf |= bs[0] << (24 - bitCnt); while(bitCnt >= 8) { unsigned char c = (bitBuf >> 16) & 255; stbiw__putc(s, c); if(c == 255) { stbiw__putc(s, 0); } bitBuf <<= 8; bitCnt -= 8; } *bitBufP = bitBuf; *bitCntP = bitCnt; } static void stbiw__jpg_DCT(float *d0p, float *d1p, float *d2p, float *d3p, float *d4p, float *d5p, float *d6p, float *d7p) { float d0 = *d0p, d1 = *d1p, d2 = *d2p, d3 = *d3p, d4 = *d4p, d5 = *d5p, d6 = *d6p, d7 = *d7p; float z1, z2, z3, z4, z5, z11, z13; float tmp0 = d0 + d7; float tmp7 = d0 - d7; float tmp1 = d1 + d6; float tmp6 = d1 - d6; float tmp2 = d2 + d5; float tmp5 = d2 - d5; float tmp3 = d3 + d4; float tmp4 = d3 - d4; // Even part float tmp10 = tmp0 + tmp3; // phase 2 float tmp13 = tmp0 - tmp3; float tmp11 = tmp1 + tmp2; float tmp12 = tmp1 - tmp2; d0 = tmp10 + tmp11; // phase 3 d4 = tmp10 - tmp11; z1 = (tmp12 + tmp13) * 0.707106781f; // c4 d2 = tmp13 + z1; // phase 5 d6 = tmp13 - z1; // Odd part tmp10 = tmp4 + tmp5; // phase 2 tmp11 = tmp5 + tmp6; tmp12 = tmp6 + tmp7; // The rotator is modified from fig 4-8 to avoid extra negations. z5 = (tmp10 - tmp12) * 0.382683433f; // c6 z2 = tmp10 * 0.541196100f + z5; // c2-c6 z4 = tmp12 * 1.306562965f + z5; // c2+c6 z3 = tmp11 * 0.707106781f; // c4 z11 = tmp7 + z3; // phase 5 z13 = tmp7 - z3; *d5p = z13 + z2; // phase 6 *d3p = z13 - z2; *d1p = z11 + z4; *d7p = z11 - z4; *d0p = d0; *d2p = d2; *d4p = d4; *d6p = d6; } static void stbiw__jpg_calcBits(int val, unsigned short bits[2]) { int tmp1 = val < 0 ? -val : val; val = val < 0 ? val-1 : val; bits[1] = 1; while(tmp1 >>= 1) { ++bits[1]; } bits[0] = val & ((1<0)&&(DU[end0pos]==0); --end0pos) { } // end0pos = first element in reverse order !=0 if(end0pos == 0) { stbiw__jpg_writeBits(s, bitBuf, bitCnt, EOB); return DU[0]; } for(i = 1; i <= end0pos; ++i) { int startpos = i; int nrzeroes; unsigned short bits[2]; for (; DU[i]==0 && i<=end0pos; ++i) { } nrzeroes = i-startpos; if ( nrzeroes >= 16 ) { int lng = nrzeroes>>4; int nrmarker; for (nrmarker=1; nrmarker <= lng; ++nrmarker) stbiw__jpg_writeBits(s, bitBuf, bitCnt, M16zeroes); nrzeroes &= 15; } stbiw__jpg_calcBits(DU[i], bits); stbiw__jpg_writeBits(s, bitBuf, bitCnt, HTAC[(nrzeroes<<4)+bits[1]]); stbiw__jpg_writeBits(s, bitBuf, bitCnt, bits); } if(end0pos != 63) { stbiw__jpg_writeBits(s, bitBuf, bitCnt, EOB); } return DU[0]; } static int stbi_write_jpg_core(stbi__write_context *s, int width, int height, int comp, const void* data, int quality) { // Constants that don't pollute global namespace static const unsigned char std_dc_luminance_nrcodes[] = {0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0}; static const unsigned char std_dc_luminance_values[] = {0,1,2,3,4,5,6,7,8,9,10,11}; static const unsigned char std_ac_luminance_nrcodes[] = {0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d}; static const unsigned char std_ac_luminance_values[] = { 0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12,0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07,0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08, 0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0,0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16,0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28, 0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59, 0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89, 0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6, 0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2, 0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa }; static const unsigned char std_dc_chrominance_nrcodes[] = {0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0}; static const unsigned char std_dc_chrominance_values[] = {0,1,2,3,4,5,6,7,8,9,10,11}; static const unsigned char std_ac_chrominance_nrcodes[] = {0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0x77}; static const unsigned char std_ac_chrominance_values[] = { 0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21,0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91, 0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0,0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34,0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26, 0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38,0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58, 0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87, 0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4, 0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda, 0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa }; // Huffman tables static const unsigned short YDC_HT[256][2] = { {0,2},{2,3},{3,3},{4,3},{5,3},{6,3},{14,4},{30,5},{62,6},{126,7},{254,8},{510,9}}; static const unsigned short UVDC_HT[256][2] = { {0,2},{1,2},{2,2},{6,3},{14,4},{30,5},{62,6},{126,7},{254,8},{510,9},{1022,10},{2046,11}}; static const unsigned short YAC_HT[256][2] = { {10,4},{0,2},{1,2},{4,3},{11,4},{26,5},{120,7},{248,8},{1014,10},{65410,16},{65411,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, {12,4},{27,5},{121,7},{502,9},{2038,11},{65412,16},{65413,16},{65414,16},{65415,16},{65416,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, {28,5},{249,8},{1015,10},{4084,12},{65417,16},{65418,16},{65419,16},{65420,16},{65421,16},{65422,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, {58,6},{503,9},{4085,12},{65423,16},{65424,16},{65425,16},{65426,16},{65427,16},{65428,16},{65429,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, {59,6},{1016,10},{65430,16},{65431,16},{65432,16},{65433,16},{65434,16},{65435,16},{65436,16},{65437,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, {122,7},{2039,11},{65438,16},{65439,16},{65440,16},{65441,16},{65442,16},{65443,16},{65444,16},{65445,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, {123,7},{4086,12},{65446,16},{65447,16},{65448,16},{65449,16},{65450,16},{65451,16},{65452,16},{65453,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, {250,8},{4087,12},{65454,16},{65455,16},{65456,16},{65457,16},{65458,16},{65459,16},{65460,16},{65461,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, {504,9},{32704,15},{65462,16},{65463,16},{65464,16},{65465,16},{65466,16},{65467,16},{65468,16},{65469,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, {505,9},{65470,16},{65471,16},{65472,16},{65473,16},{65474,16},{65475,16},{65476,16},{65477,16},{65478,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, {506,9},{65479,16},{65480,16},{65481,16},{65482,16},{65483,16},{65484,16},{65485,16},{65486,16},{65487,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, {1017,10},{65488,16},{65489,16},{65490,16},{65491,16},{65492,16},{65493,16},{65494,16},{65495,16},{65496,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, {1018,10},{65497,16},{65498,16},{65499,16},{65500,16},{65501,16},{65502,16},{65503,16},{65504,16},{65505,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, {2040,11},{65506,16},{65507,16},{65508,16},{65509,16},{65510,16},{65511,16},{65512,16},{65513,16},{65514,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, {65515,16},{65516,16},{65517,16},{65518,16},{65519,16},{65520,16},{65521,16},{65522,16},{65523,16},{65524,16},{0,0},{0,0},{0,0},{0,0},{0,0}, {2041,11},{65525,16},{65526,16},{65527,16},{65528,16},{65529,16},{65530,16},{65531,16},{65532,16},{65533,16},{65534,16},{0,0},{0,0},{0,0},{0,0},{0,0} }; static const unsigned short UVAC_HT[256][2] = { {0,2},{1,2},{4,3},{10,4},{24,5},{25,5},{56,6},{120,7},{500,9},{1014,10},{4084,12},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, {11,4},{57,6},{246,8},{501,9},{2038,11},{4085,12},{65416,16},{65417,16},{65418,16},{65419,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, {26,5},{247,8},{1015,10},{4086,12},{32706,15},{65420,16},{65421,16},{65422,16},{65423,16},{65424,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, {27,5},{248,8},{1016,10},{4087,12},{65425,16},{65426,16},{65427,16},{65428,16},{65429,16},{65430,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, {58,6},{502,9},{65431,16},{65432,16},{65433,16},{65434,16},{65435,16},{65436,16},{65437,16},{65438,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, {59,6},{1017,10},{65439,16},{65440,16},{65441,16},{65442,16},{65443,16},{65444,16},{65445,16},{65446,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, {121,7},{2039,11},{65447,16},{65448,16},{65449,16},{65450,16},{65451,16},{65452,16},{65453,16},{65454,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, {122,7},{2040,11},{65455,16},{65456,16},{65457,16},{65458,16},{65459,16},{65460,16},{65461,16},{65462,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, {249,8},{65463,16},{65464,16},{65465,16},{65466,16},{65467,16},{65468,16},{65469,16},{65470,16},{65471,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, {503,9},{65472,16},{65473,16},{65474,16},{65475,16},{65476,16},{65477,16},{65478,16},{65479,16},{65480,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, {504,9},{65481,16},{65482,16},{65483,16},{65484,16},{65485,16},{65486,16},{65487,16},{65488,16},{65489,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, {505,9},{65490,16},{65491,16},{65492,16},{65493,16},{65494,16},{65495,16},{65496,16},{65497,16},{65498,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, {506,9},{65499,16},{65500,16},{65501,16},{65502,16},{65503,16},{65504,16},{65505,16},{65506,16},{65507,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, {2041,11},{65508,16},{65509,16},{65510,16},{65511,16},{65512,16},{65513,16},{65514,16},{65515,16},{65516,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, {16352,14},{65517,16},{65518,16},{65519,16},{65520,16},{65521,16},{65522,16},{65523,16},{65524,16},{65525,16},{0,0},{0,0},{0,0},{0,0},{0,0}, {1018,10},{32707,15},{65526,16},{65527,16},{65528,16},{65529,16},{65530,16},{65531,16},{65532,16},{65533,16},{65534,16},{0,0},{0,0},{0,0},{0,0},{0,0} }; static const int YQT[] = {16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22, 37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99}; static const int UVQT[] = {17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99, 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99}; static const float aasf[] = { 1.0f * 2.828427125f, 1.387039845f * 2.828427125f, 1.306562965f * 2.828427125f, 1.175875602f * 2.828427125f, 1.0f * 2.828427125f, 0.785694958f * 2.828427125f, 0.541196100f * 2.828427125f, 0.275899379f * 2.828427125f }; int row, col, i, k, subsample; float fdtbl_Y[64], fdtbl_UV[64]; unsigned char YTable[64], UVTable[64]; if(!data || !width || !height || comp > 4 || comp < 1) { return 0; } quality = quality ? quality : 90; subsample = quality <= 90 ? 1 : 0; quality = quality < 1 ? 1 : quality > 100 ? 100 : quality; quality = quality < 50 ? 5000 / quality : 200 - quality * 2; for(i = 0; i < 64; ++i) { int uvti, yti = (YQT[i]*quality+50)/100; YTable[stbiw__jpg_ZigZag[i]] = (unsigned char) (yti < 1 ? 1 : yti > 255 ? 255 : yti); uvti = (UVQT[i]*quality+50)/100; UVTable[stbiw__jpg_ZigZag[i]] = (unsigned char) (uvti < 1 ? 1 : uvti > 255 ? 255 : uvti); } for(row = 0, k = 0; row < 8; ++row) { for(col = 0; col < 8; ++col, ++k) { fdtbl_Y[k] = 1 / (YTable [stbiw__jpg_ZigZag[k]] * aasf[row] * aasf[col]); fdtbl_UV[k] = 1 / (UVTable[stbiw__jpg_ZigZag[k]] * aasf[row] * aasf[col]); } } // Write Headers { static const unsigned char head0[] = { 0xFF,0xD8,0xFF,0xE0,0,0x10,'J','F','I','F',0,1,1,0,0,1,0,1,0,0,0xFF,0xDB,0,0x84,0 }; static const unsigned char head2[] = { 0xFF,0xDA,0,0xC,3,1,0,2,0x11,3,0x11,0,0x3F,0 }; const unsigned char head1[] = { 0xFF,0xC0,0,0x11,8,(unsigned char)(height>>8),STBIW_UCHAR(height),(unsigned char)(width>>8),STBIW_UCHAR(width), 3,1,(unsigned char)(subsample?0x22:0x11),0,2,0x11,1,3,0x11,1,0xFF,0xC4,0x01,0xA2,0 }; s->func(s->context, (void*)head0, sizeof(head0)); s->func(s->context, (void*)YTable, sizeof(YTable)); stbiw__putc(s, 1); s->func(s->context, UVTable, sizeof(UVTable)); s->func(s->context, (void*)head1, sizeof(head1)); s->func(s->context, (void*)(std_dc_luminance_nrcodes+1), sizeof(std_dc_luminance_nrcodes)-1); s->func(s->context, (void*)std_dc_luminance_values, sizeof(std_dc_luminance_values)); stbiw__putc(s, 0x10); // HTYACinfo s->func(s->context, (void*)(std_ac_luminance_nrcodes+1), sizeof(std_ac_luminance_nrcodes)-1); s->func(s->context, (void*)std_ac_luminance_values, sizeof(std_ac_luminance_values)); stbiw__putc(s, 1); // HTUDCinfo s->func(s->context, (void*)(std_dc_chrominance_nrcodes+1), sizeof(std_dc_chrominance_nrcodes)-1); s->func(s->context, (void*)std_dc_chrominance_values, sizeof(std_dc_chrominance_values)); stbiw__putc(s, 0x11); // HTUACinfo s->func(s->context, (void*)(std_ac_chrominance_nrcodes+1), sizeof(std_ac_chrominance_nrcodes)-1); s->func(s->context, (void*)std_ac_chrominance_values, sizeof(std_ac_chrominance_values)); s->func(s->context, (void*)head2, sizeof(head2)); } // Encode 8x8 macroblocks { static const unsigned short fillBits[] = {0x7F, 7}; int DCY=0, DCU=0, DCV=0; int bitBuf=0, bitCnt=0; // comp == 2 is grey+alpha (alpha is ignored) int ofsG = comp > 2 ? 1 : 0, ofsB = comp > 2 ? 2 : 0; const unsigned char *dataR = (const unsigned char *)data; const unsigned char *dataG = dataR + ofsG; const unsigned char *dataB = dataR + ofsB; int x, y, pos; if(subsample) { for(y = 0; y < height; y += 16) { for(x = 0; x < width; x += 16) { float Y[256], U[256], V[256]; for(row = y, pos = 0; row < y+16; ++row) { // row >= height => use last input row int clamped_row = (row < height) ? row : height - 1; int base_p = (stbi__flip_vertically_on_write ? (height-1-clamped_row) : clamped_row)*width*comp; for(col = x; col < x+16; ++col, ++pos) { // if col >= width => use pixel from last input column int p = base_p + ((col < width) ? col : (width-1))*comp; float r = dataR[p], g = dataG[p], b = dataB[p]; Y[pos]= +0.29900f*r + 0.58700f*g + 0.11400f*b - 128; U[pos]= -0.16874f*r - 0.33126f*g + 0.50000f*b; V[pos]= +0.50000f*r - 0.41869f*g - 0.08131f*b; } } DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+0, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT); DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+8, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT); DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+128, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT); DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+136, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT); // subsample U,V { float subU[64], subV[64]; int yy, xx; for(yy = 0, pos = 0; yy < 8; ++yy) { for(xx = 0; xx < 8; ++xx, ++pos) { int j = yy*32+xx*2; subU[pos] = (U[j+0] + U[j+1] + U[j+16] + U[j+17]) * 0.25f; subV[pos] = (V[j+0] + V[j+1] + V[j+16] + V[j+17]) * 0.25f; } } DCU = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, subU, 8, fdtbl_UV, DCU, UVDC_HT, UVAC_HT); DCV = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, subV, 8, fdtbl_UV, DCV, UVDC_HT, UVAC_HT); } } } } else { for(y = 0; y < height; y += 8) { for(x = 0; x < width; x += 8) { float Y[64], U[64], V[64]; for(row = y, pos = 0; row < y+8; ++row) { // row >= height => use last input row int clamped_row = (row < height) ? row : height - 1; int base_p = (stbi__flip_vertically_on_write ? (height-1-clamped_row) : clamped_row)*width*comp; for(col = x; col < x+8; ++col, ++pos) { // if col >= width => use pixel from last input column int p = base_p + ((col < width) ? col : (width-1))*comp; float r = dataR[p], g = dataG[p], b = dataB[p]; Y[pos]= +0.29900f*r + 0.58700f*g + 0.11400f*b - 128; U[pos]= -0.16874f*r - 0.33126f*g + 0.50000f*b; V[pos]= +0.50000f*r - 0.41869f*g - 0.08131f*b; } } DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y, 8, fdtbl_Y, DCY, YDC_HT, YAC_HT); DCU = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, U, 8, fdtbl_UV, DCU, UVDC_HT, UVAC_HT); DCV = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, V, 8, fdtbl_UV, DCV, UVDC_HT, UVAC_HT); } } } // Do the bit alignment of the EOI marker stbiw__jpg_writeBits(s, &bitBuf, &bitCnt, fillBits); } // EOI stbiw__putc(s, 0xFF); stbiw__putc(s, 0xD9); return 1; } STBIWDEF int stbi_write_jpg_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data, int quality) { stbi__write_context s = { 0 }; stbi__start_write_callbacks(&s, func, context); return stbi_write_jpg_core(&s, x, y, comp, (void *) data, quality); } #ifndef STBI_WRITE_NO_STDIO STBIWDEF int stbi_write_jpg(char const *filename, int x, int y, int comp, const void *data, int quality) { stbi__write_context s = { 0 }; if (stbi__start_write_file(&s,filename)) { int r = stbi_write_jpg_core(&s, x, y, comp, data, quality); stbi__end_write_file(&s); return r; } else return 0; } #endif #endif // STB_IMAGE_WRITE_IMPLEMENTATION /* Revision history 1.16 (2021-07-11) make Deflate code emit uncompressed blocks when it would otherwise expand support writing BMPs with alpha channel 1.15 (2020-07-13) unknown 1.14 (2020-02-02) updated JPEG writer to downsample chroma channels 1.13 1.12 1.11 (2019-08-11) 1.10 (2019-02-07) support utf8 filenames in Windows; fix warnings and platform ifdefs 1.09 (2018-02-11) fix typo in zlib quality API, improve STB_I_W_STATIC in C++ 1.08 (2018-01-29) add stbi__flip_vertically_on_write, external zlib, zlib quality, choose PNG filter 1.07 (2017-07-24) doc fix 1.06 (2017-07-23) writing JPEG (using Jon Olick's code) 1.05 ??? 1.04 (2017-03-03) monochrome BMP expansion 1.03 ??? 1.02 (2016-04-02) avoid allocating large structures on the stack 1.01 (2016-01-16) STBIW_REALLOC_SIZED: support allocators with no realloc support avoid race-condition in crc initialization minor compile issues 1.00 (2015-09-14) installable file IO function 0.99 (2015-09-13) warning fixes; TGA rle support 0.98 (2015-04-08) added STBIW_MALLOC, STBIW_ASSERT etc 0.97 (2015-01-18) fixed HDR asserts, rewrote HDR rle logic 0.96 (2015-01-17) add HDR output fix monochrome BMP 0.95 (2014-08-17) add monochrome TGA output 0.94 (2014-05-31) rename private functions to avoid conflicts with stb_image.h 0.93 (2014-05-27) warning fixes 0.92 (2010-08-01) casts to unsigned char to fix warnings 0.91 (2010-07-17) first public release 0.90 first internal release */ /* ------------------------------------------------------------------------------ This software is available under 2 licenses -- choose whichever you prefer. ------------------------------------------------------------------------------ ALTERNATIVE A - MIT License Copyright (c) 2017 Sean Barrett Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ------------------------------------------------------------------------------ ALTERNATIVE B - Public Domain (www.unlicense.org) This is free and unencumbered software released into the public domain. Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means. In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain. We make this dedication for the benefit of the public at large and to the detriment of our heirs and successors. We intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ------------------------------------------------------------------------------ */ ================================================ FILE: libraries/stb_vorbis.c ================================================ // Ogg Vorbis audio decoder - v1.22 - public domain // http://nothings.org/stb_vorbis/ // // Original version written by Sean Barrett in 2007. // // Originally sponsored by RAD Game Tools. Seeking implementation // sponsored by Phillip Bennefall, Marc Andersen, Aaron Baker, // Elias Software, Aras Pranckevicius, and Sean Barrett. // // LICENSE // // See end of file for license information. // // Limitations: // // - floor 0 not supported (used in old ogg vorbis files pre-2004) // - lossless sample-truncation at beginning ignored // - cannot concatenate multiple vorbis streams // - sample positions are 32-bit, limiting seekable 192Khz // files to around 6 hours (Ogg supports 64-bit) // // Feature contributors: // Dougall Johnson (sample-exact seeking) // // Bugfix/warning contributors: // Terje Mathisen Niklas Frykholm Andy Hill // Casey Muratori John Bolton Gargaj // Laurent Gomila Marc LeBlanc Ronny Chevalier // Bernhard Wodo Evan Balster github:alxprd // Tom Beaumont Ingo Leitgeb Nicolas Guillemot // Phillip Bennefall Rohit Thiago Goulart // github:manxorist Saga Musix github:infatum // Timur Gagiev Maxwell Koo Peter Waller // github:audinowho Dougall Johnson David Reid // github:Clownacy Pedro J. Estebanez Remi Verschelde // AnthoFoxo github:morlat Gabriel Ravier // // Partial history: // 1.22 - 2021-07-11 - various small fixes // 1.21 - 2021-07-02 - fix bug for files with no comments // 1.20 - 2020-07-11 - several small fixes // 1.19 - 2020-02-05 - warnings // 1.18 - 2020-02-02 - fix seek bugs; parse header comments; misc warnings etc. // 1.17 - 2019-07-08 - fix CVE-2019-13217..CVE-2019-13223 (by ForAllSecure) // 1.16 - 2019-03-04 - fix warnings // 1.15 - 2019-02-07 - explicit failure if Ogg Skeleton data is found // 1.14 - 2018-02-11 - delete bogus dealloca usage // 1.13 - 2018-01-29 - fix truncation of last frame (hopefully) // 1.12 - 2017-11-21 - limit residue begin/end to blocksize/2 to avoid large temp allocs in bad/corrupt files // 1.11 - 2017-07-23 - fix MinGW compilation // 1.10 - 2017-03-03 - more robust seeking; fix negative ilog(); clear error in open_memory // 1.09 - 2016-04-04 - back out 'truncation of last frame' fix from previous version // 1.08 - 2016-04-02 - warnings; setup memory leaks; truncation of last frame // 1.07 - 2015-01-16 - fixes for crashes on invalid files; warning fixes; const // 1.06 - 2015-08-31 - full, correct support for seeking API (Dougall Johnson) // some crash fixes when out of memory or with corrupt files // fix some inappropriately signed shifts // 1.05 - 2015-04-19 - don't define __forceinline if it's redundant // 1.04 - 2014-08-27 - fix missing const-correct case in API // 1.03 - 2014-08-07 - warning fixes // 1.02 - 2014-07-09 - declare qsort comparison as explicitly _cdecl in Windows // 1.01 - 2014-06-18 - fix stb_vorbis_get_samples_float (interleaved was correct) // 1.0 - 2014-05-26 - fix memory leaks; fix warnings; fix bugs in >2-channel; // (API change) report sample rate for decode-full-file funcs // // See end of file for full version history. ////////////////////////////////////////////////////////////////////////////// // // HEADER BEGINS HERE // #ifndef STB_VORBIS_INCLUDE_STB_VORBIS_H #define STB_VORBIS_INCLUDE_STB_VORBIS_H #if defined(STB_VORBIS_NO_CRT) && !defined(STB_VORBIS_NO_STDIO) #define STB_VORBIS_NO_STDIO 1 #endif #ifndef STB_VORBIS_NO_STDIO #include #endif #ifdef __cplusplus extern "C" { #endif /////////// THREAD SAFETY // Individual stb_vorbis* handles are not thread-safe; you cannot decode from // them from multiple threads at the same time. However, you can have multiple // stb_vorbis* handles and decode from them independently in multiple thrads. /////////// MEMORY ALLOCATION // normally stb_vorbis uses malloc() to allocate memory at startup, // and alloca() to allocate temporary memory during a frame on the // stack. (Memory consumption will depend on the amount of setup // data in the file and how you set the compile flags for speed // vs. size. In my test files the maximal-size usage is ~150KB.) // // You can modify the wrapper functions in the source (setup_malloc, // setup_temp_malloc, temp_malloc) to change this behavior, or you // can use a simpler allocation model: you pass in a buffer from // which stb_vorbis will allocate _all_ its memory (including the // temp memory). "open" may fail with a VORBIS_outofmem if you // do not pass in enough data; there is no way to determine how // much you do need except to succeed (at which point you can // query get_info to find the exact amount required. yes I know // this is lame). // // If you pass in a non-NULL buffer of the type below, allocation // will occur from it as described above. Otherwise just pass NULL // to use malloc()/alloca() typedef struct { char *alloc_buffer; int alloc_buffer_length_in_bytes; } stb_vorbis_alloc; /////////// FUNCTIONS USEABLE WITH ALL INPUT MODES typedef struct stb_vorbis stb_vorbis; typedef struct { unsigned int sample_rate; int channels; unsigned int setup_memory_required; unsigned int setup_temp_memory_required; unsigned int temp_memory_required; int max_frame_size; } stb_vorbis_info; typedef struct { char *vendor; int comment_list_length; char **comment_list; } stb_vorbis_comment; // get general information about the file extern stb_vorbis_info stb_vorbis_get_info(stb_vorbis *f); // get ogg comments extern stb_vorbis_comment stb_vorbis_get_comment(stb_vorbis *f); // get the last error detected (clears it, too) extern int stb_vorbis_get_error(stb_vorbis *f); // close an ogg vorbis file and free all memory in use extern void stb_vorbis_close(stb_vorbis *f); // this function returns the offset (in samples) from the beginning of the // file that will be returned by the next decode, if it is known, or -1 // otherwise. after a flush_pushdata() call, this may take a while before // it becomes valid again. // NOT WORKING YET after a seek with PULLDATA API extern int stb_vorbis_get_sample_offset(stb_vorbis *f); // returns the current seek point within the file, or offset from the beginning // of the memory buffer. In pushdata mode it returns 0. extern unsigned int stb_vorbis_get_file_offset(stb_vorbis *f); /////////// PUSHDATA API #ifndef STB_VORBIS_NO_PUSHDATA_API // this API allows you to get blocks of data from any source and hand // them to stb_vorbis. you have to buffer them; stb_vorbis will tell // you how much it used, and you have to give it the rest next time; // and stb_vorbis may not have enough data to work with and you will // need to give it the same data again PLUS more. Note that the Vorbis // specification does not bound the size of an individual frame. extern stb_vorbis *stb_vorbis_open_pushdata( const unsigned char * datablock, int datablock_length_in_bytes, int *datablock_memory_consumed_in_bytes, int *error, const stb_vorbis_alloc *alloc_buffer); // create a vorbis decoder by passing in the initial data block containing // the ogg&vorbis headers (you don't need to do parse them, just provide // the first N bytes of the file--you're told if it's not enough, see below) // on success, returns an stb_vorbis *, does not set error, returns the amount of // data parsed/consumed on this call in *datablock_memory_consumed_in_bytes; // on failure, returns NULL on error and sets *error, does not change *datablock_memory_consumed // if returns NULL and *error is VORBIS_need_more_data, then the input block was // incomplete and you need to pass in a larger block from the start of the file extern int stb_vorbis_decode_frame_pushdata( stb_vorbis *f, const unsigned char *datablock, int datablock_length_in_bytes, int *channels, // place to write number of float * buffers float ***output, // place to write float ** array of float * buffers int *samples // place to write number of output samples ); // decode a frame of audio sample data if possible from the passed-in data block // // return value: number of bytes we used from datablock // // possible cases: // 0 bytes used, 0 samples output (need more data) // N bytes used, 0 samples output (resynching the stream, keep going) // N bytes used, M samples output (one frame of data) // note that after opening a file, you will ALWAYS get one N-bytes,0-sample // frame, because Vorbis always "discards" the first frame. // // Note that on resynch, stb_vorbis will rarely consume all of the buffer, // instead only datablock_length_in_bytes-3 or less. This is because it wants // to avoid missing parts of a page header if they cross a datablock boundary, // without writing state-machiney code to record a partial detection. // // The number of channels returned are stored in *channels (which can be // NULL--it is always the same as the number of channels reported by // get_info). *output will contain an array of float* buffers, one per // channel. In other words, (*output)[0][0] contains the first sample from // the first channel, and (*output)[1][0] contains the first sample from // the second channel. // // *output points into stb_vorbis's internal output buffer storage; these // buffers are owned by stb_vorbis and application code should not free // them or modify their contents. They are transient and will be overwritten // once you ask for more data to get decoded, so be sure to grab any data // you need before then. extern void stb_vorbis_flush_pushdata(stb_vorbis *f); // inform stb_vorbis that your next datablock will not be contiguous with // previous ones (e.g. you've seeked in the data); future attempts to decode // frames will cause stb_vorbis to resynchronize (as noted above), and // once it sees a valid Ogg page (typically 4-8KB, as large as 64KB), it // will begin decoding the _next_ frame. // // if you want to seek using pushdata, you need to seek in your file, then // call stb_vorbis_flush_pushdata(), then start calling decoding, then once // decoding is returning you data, call stb_vorbis_get_sample_offset, and // if you don't like the result, seek your file again and repeat. #endif ////////// PULLING INPUT API #ifndef STB_VORBIS_NO_PULLDATA_API // This API assumes stb_vorbis is allowed to pull data from a source-- // either a block of memory containing the _entire_ vorbis stream, or a // FILE * that you or it create, or possibly some other reading mechanism // if you go modify the source to replace the FILE * case with some kind // of callback to your code. (But if you don't support seeking, you may // just want to go ahead and use pushdata.) #if !defined(STB_VORBIS_NO_STDIO) && !defined(STB_VORBIS_NO_INTEGER_CONVERSION) extern int stb_vorbis_decode_filename(const char *filename, int *channels, int *sample_rate, short **output); #endif #if !defined(STB_VORBIS_NO_INTEGER_CONVERSION) extern int stb_vorbis_decode_memory(const unsigned char *mem, int len, int *channels, int *sample_rate, short **output); #endif // decode an entire file and output the data interleaved into a malloc()ed // buffer stored in *output. The return value is the number of samples // decoded, or -1 if the file could not be opened or was not an ogg vorbis file. // When you're done with it, just free() the pointer returned in *output. extern stb_vorbis * stb_vorbis_open_memory(const unsigned char *data, int len, int *error, const stb_vorbis_alloc *alloc_buffer); // create an ogg vorbis decoder from an ogg vorbis stream in memory (note // this must be the entire stream!). on failure, returns NULL and sets *error #ifndef STB_VORBIS_NO_STDIO extern stb_vorbis * stb_vorbis_open_filename(const char *filename, int *error, const stb_vorbis_alloc *alloc_buffer); // create an ogg vorbis decoder from a filename via fopen(). on failure, // returns NULL and sets *error (possibly to VORBIS_file_open_failure). extern stb_vorbis * stb_vorbis_open_file(FILE *f, int close_handle_on_close, int *error, const stb_vorbis_alloc *alloc_buffer); // create an ogg vorbis decoder from an open FILE *, looking for a stream at // the _current_ seek point (ftell). on failure, returns NULL and sets *error. // note that stb_vorbis must "own" this stream; if you seek it in between // calls to stb_vorbis, it will become confused. Moreover, if you attempt to // perform stb_vorbis_seek_*() operations on this file, it will assume it // owns the _entire_ rest of the file after the start point. Use the next // function, stb_vorbis_open_file_section(), to limit it. extern stb_vorbis * stb_vorbis_open_file_section(FILE *f, int close_handle_on_close, int *error, const stb_vorbis_alloc *alloc_buffer, unsigned int len); // create an ogg vorbis decoder from an open FILE *, looking for a stream at // the _current_ seek point (ftell); the stream will be of length 'len' bytes. // on failure, returns NULL and sets *error. note that stb_vorbis must "own" // this stream; if you seek it in between calls to stb_vorbis, it will become // confused. #endif extern int stb_vorbis_seek_frame(stb_vorbis *f, unsigned int sample_number); extern int stb_vorbis_seek(stb_vorbis *f, unsigned int sample_number); // these functions seek in the Vorbis file to (approximately) 'sample_number'. // after calling seek_frame(), the next call to get_frame_*() will include // the specified sample. after calling stb_vorbis_seek(), the next call to // stb_vorbis_get_samples_* will start with the specified sample. If you // do not need to seek to EXACTLY the target sample when using get_samples_*, // you can also use seek_frame(). extern int stb_vorbis_seek_start(stb_vorbis *f); // this function is equivalent to stb_vorbis_seek(f,0) extern unsigned int stb_vorbis_stream_length_in_samples(stb_vorbis *f); extern float stb_vorbis_stream_length_in_seconds(stb_vorbis *f); // these functions return the total length of the vorbis stream extern int stb_vorbis_get_frame_float(stb_vorbis *f, int *channels, float ***output); // decode the next frame and return the number of samples. the number of // channels returned are stored in *channels (which can be NULL--it is always // the same as the number of channels reported by get_info). *output will // contain an array of float* buffers, one per channel. These outputs will // be overwritten on the next call to stb_vorbis_get_frame_*. // // You generally should not intermix calls to stb_vorbis_get_frame_*() // and stb_vorbis_get_samples_*(), since the latter calls the former. #ifndef STB_VORBIS_NO_INTEGER_CONVERSION extern int stb_vorbis_get_frame_short_interleaved(stb_vorbis *f, int num_c, short *buffer, int num_shorts); extern int stb_vorbis_get_frame_short (stb_vorbis *f, int num_c, short **buffer, int num_samples); #endif // decode the next frame and return the number of *samples* per channel. // Note that for interleaved data, you pass in the number of shorts (the // size of your array), but the return value is the number of samples per // channel, not the total number of samples. // // The data is coerced to the number of channels you request according to the // channel coercion rules (see below). You must pass in the size of your // buffer(s) so that stb_vorbis will not overwrite the end of the buffer. // The maximum buffer size needed can be gotten from get_info(); however, // the Vorbis I specification implies an absolute maximum of 4096 samples // per channel. // Channel coercion rules: // Let M be the number of channels requested, and N the number of channels present, // and Cn be the nth channel; let stereo L be the sum of all L and center channels, // and stereo R be the sum of all R and center channels (channel assignment from the // vorbis spec). // M N output // 1 k sum(Ck) for all k // 2 * stereo L, stereo R // k l k > l, the first l channels, then 0s // k l k <= l, the first k channels // Note that this is not _good_ surround etc. mixing at all! It's just so // you get something useful. extern int stb_vorbis_get_samples_float_interleaved(stb_vorbis *f, int channels, float *buffer, int num_floats); extern int stb_vorbis_get_samples_float(stb_vorbis *f, int channels, float **buffer, int num_samples); // gets num_samples samples, not necessarily on a frame boundary--this requires // buffering so you have to supply the buffers. DOES NOT APPLY THE COERCION RULES. // Returns the number of samples stored per channel; it may be less than requested // at the end of the file. If there are no more samples in the file, returns 0. #ifndef STB_VORBIS_NO_INTEGER_CONVERSION extern int stb_vorbis_get_samples_short_interleaved(stb_vorbis *f, int channels, short *buffer, int num_shorts); extern int stb_vorbis_get_samples_short(stb_vorbis *f, int channels, short **buffer, int num_samples); #endif // gets num_samples samples, not necessarily on a frame boundary--this requires // buffering so you have to supply the buffers. Applies the coercion rules above // to produce 'channels' channels. Returns the number of samples stored per channel; // it may be less than requested at the end of the file. If there are no more // samples in the file, returns 0. #endif //////// ERROR CODES enum STBVorbisError { VORBIS__no_error, VORBIS_need_more_data=1, // not a real error VORBIS_invalid_api_mixing, // can't mix API modes VORBIS_outofmem, // not enough memory VORBIS_feature_not_supported, // uses floor 0 VORBIS_too_many_channels, // STB_VORBIS_MAX_CHANNELS is too small VORBIS_file_open_failure, // fopen() failed VORBIS_seek_without_length, // can't seek in unknown-length file VORBIS_unexpected_eof=10, // file is truncated? VORBIS_seek_invalid, // seek past EOF // decoding errors (corrupt/invalid stream) -- you probably // don't care about the exact details of these // vorbis errors: VORBIS_invalid_setup=20, VORBIS_invalid_stream, // ogg errors: VORBIS_missing_capture_pattern=30, VORBIS_invalid_stream_structure_version, VORBIS_continued_packet_flag_invalid, VORBIS_incorrect_stream_serial_number, VORBIS_invalid_first_page, VORBIS_bad_packet_type, VORBIS_cant_find_last_page, VORBIS_seek_failed, VORBIS_ogg_skeleton_not_supported }; #ifdef __cplusplus } #endif #endif // STB_VORBIS_INCLUDE_STB_VORBIS_H // // HEADER ENDS HERE // ////////////////////////////////////////////////////////////////////////////// #ifndef STB_VORBIS_HEADER_ONLY // global configuration settings (e.g. set these in the project/makefile), // or just set them in this file at the top (although ideally the first few // should be visible when the header file is compiled too, although it's not // crucial) // STB_VORBIS_NO_PUSHDATA_API // does not compile the code for the various stb_vorbis_*_pushdata() // functions // #define STB_VORBIS_NO_PUSHDATA_API // STB_VORBIS_NO_PULLDATA_API // does not compile the code for the non-pushdata APIs // #define STB_VORBIS_NO_PULLDATA_API // STB_VORBIS_NO_STDIO // does not compile the code for the APIs that use FILE *s internally // or externally (implied by STB_VORBIS_NO_PULLDATA_API) // #define STB_VORBIS_NO_STDIO // STB_VORBIS_NO_INTEGER_CONVERSION // does not compile the code for converting audio sample data from // float to integer (implied by STB_VORBIS_NO_PULLDATA_API) // #define STB_VORBIS_NO_INTEGER_CONVERSION // STB_VORBIS_NO_FAST_SCALED_FLOAT // does not use a fast float-to-int trick to accelerate float-to-int on // most platforms which requires endianness be defined correctly. //#define STB_VORBIS_NO_FAST_SCALED_FLOAT // STB_VORBIS_MAX_CHANNELS [number] // globally define this to the maximum number of channels you need. // The spec does not put a restriction on channels except that // the count is stored in a byte, so 255 is the hard limit. // Reducing this saves about 16 bytes per value, so using 16 saves // (255-16)*16 or around 4KB. Plus anything other memory usage // I forgot to account for. Can probably go as low as 8 (7.1 audio), // 6 (5.1 audio), or 2 (stereo only). #ifndef STB_VORBIS_MAX_CHANNELS #define STB_VORBIS_MAX_CHANNELS 16 // enough for anyone? #endif // STB_VORBIS_PUSHDATA_CRC_COUNT [number] // after a flush_pushdata(), stb_vorbis begins scanning for the // next valid page, without backtracking. when it finds something // that looks like a page, it streams through it and verifies its // CRC32. Should that validation fail, it keeps scanning. But it's // possible that _while_ streaming through to check the CRC32 of // one candidate page, it sees another candidate page. This #define // determines how many "overlapping" candidate pages it can search // at once. Note that "real" pages are typically ~4KB to ~8KB, whereas // garbage pages could be as big as 64KB, but probably average ~16KB. // So don't hose ourselves by scanning an apparent 64KB page and // missing a ton of real ones in the interim; so minimum of 2 #ifndef STB_VORBIS_PUSHDATA_CRC_COUNT #define STB_VORBIS_PUSHDATA_CRC_COUNT 4 #endif // STB_VORBIS_FAST_HUFFMAN_LENGTH [number] // sets the log size of the huffman-acceleration table. Maximum // supported value is 24. with larger numbers, more decodings are O(1), // but the table size is larger so worse cache missing, so you'll have // to probe (and try multiple ogg vorbis files) to find the sweet spot. #ifndef STB_VORBIS_FAST_HUFFMAN_LENGTH #define STB_VORBIS_FAST_HUFFMAN_LENGTH 10 #endif // STB_VORBIS_FAST_BINARY_LENGTH [number] // sets the log size of the binary-search acceleration table. this // is used in similar fashion to the fast-huffman size to set initial // parameters for the binary search // STB_VORBIS_FAST_HUFFMAN_INT // The fast huffman tables are much more efficient if they can be // stored as 16-bit results instead of 32-bit results. This restricts // the codebooks to having only 65535 possible outcomes, though. // (At least, accelerated by the huffman table.) #ifndef STB_VORBIS_FAST_HUFFMAN_INT #define STB_VORBIS_FAST_HUFFMAN_SHORT #endif // STB_VORBIS_NO_HUFFMAN_BINARY_SEARCH // If the 'fast huffman' search doesn't succeed, then stb_vorbis falls // back on binary searching for the correct one. This requires storing // extra tables with the huffman codes in sorted order. Defining this // symbol trades off space for speed by forcing a linear search in the // non-fast case, except for "sparse" codebooks. // #define STB_VORBIS_NO_HUFFMAN_BINARY_SEARCH // STB_VORBIS_DIVIDES_IN_RESIDUE // stb_vorbis precomputes the result of the scalar residue decoding // that would otherwise require a divide per chunk. you can trade off // space for time by defining this symbol. // #define STB_VORBIS_DIVIDES_IN_RESIDUE // STB_VORBIS_DIVIDES_IN_CODEBOOK // vorbis VQ codebooks can be encoded two ways: with every case explicitly // stored, or with all elements being chosen from a small range of values, // and all values possible in all elements. By default, stb_vorbis expands // this latter kind out to look like the former kind for ease of decoding, // because otherwise an integer divide-per-vector-element is required to // unpack the index. If you define STB_VORBIS_DIVIDES_IN_CODEBOOK, you can // trade off storage for speed. //#define STB_VORBIS_DIVIDES_IN_CODEBOOK #ifdef STB_VORBIS_CODEBOOK_SHORTS #error "STB_VORBIS_CODEBOOK_SHORTS is no longer supported as it produced incorrect results for some input formats" #endif // STB_VORBIS_DIVIDE_TABLE // this replaces small integer divides in the floor decode loop with // table lookups. made less than 1% difference, so disabled by default. // STB_VORBIS_NO_INLINE_DECODE // disables the inlining of the scalar codebook fast-huffman decode. // might save a little codespace; useful for debugging // #define STB_VORBIS_NO_INLINE_DECODE // STB_VORBIS_NO_DEFER_FLOOR // Normally we only decode the floor without synthesizing the actual // full curve. We can instead synthesize the curve immediately. This // requires more memory and is very likely slower, so I don't think // you'd ever want to do it except for debugging. // #define STB_VORBIS_NO_DEFER_FLOOR ////////////////////////////////////////////////////////////////////////////// #ifdef STB_VORBIS_NO_PULLDATA_API #define STB_VORBIS_NO_INTEGER_CONVERSION #define STB_VORBIS_NO_STDIO #endif #if defined(STB_VORBIS_NO_CRT) && !defined(STB_VORBIS_NO_STDIO) #define STB_VORBIS_NO_STDIO 1 #endif #ifndef STB_VORBIS_NO_INTEGER_CONVERSION #ifndef STB_VORBIS_NO_FAST_SCALED_FLOAT // only need endianness for fast-float-to-int, which we don't // use for pushdata #ifndef STB_VORBIS_BIG_ENDIAN #define STB_VORBIS_ENDIAN 0 #else #define STB_VORBIS_ENDIAN 1 #endif #endif #endif #ifndef STB_VORBIS_NO_STDIO #include #endif #ifndef STB_VORBIS_NO_CRT #include #include #include #include // find definition of alloca if it's not in stdlib.h: #if defined(_MSC_VER) || defined(__MINGW32__) #include #endif #if defined(__linux__) || defined(__linux) || defined(__sun__) || defined(__EMSCRIPTEN__) || defined(__NEWLIB__) #include #endif #else // STB_VORBIS_NO_CRT #define NULL 0 #define malloc(s) 0 #define free(s) ((void) 0) #define realloc(s) 0 #endif // STB_VORBIS_NO_CRT #include #ifdef __MINGW32__ // eff you mingw: // "fixed": // http://sourceforge.net/p/mingw-w64/mailman/message/32882927/ // "no that broke the build, reverted, who cares about C": // http://sourceforge.net/p/mingw-w64/mailman/message/32890381/ #ifdef __forceinline #undef __forceinline #endif #define __forceinline #ifndef alloca #define alloca __builtin_alloca #endif #elif !defined(_MSC_VER) #if __GNUC__ #define __forceinline inline #else #define __forceinline #endif #endif #if STB_VORBIS_MAX_CHANNELS > 256 #error "Value of STB_VORBIS_MAX_CHANNELS outside of allowed range" #endif #if STB_VORBIS_FAST_HUFFMAN_LENGTH > 24 #error "Value of STB_VORBIS_FAST_HUFFMAN_LENGTH outside of allowed range" #endif #if 0 #include #define CHECK(f) _CrtIsValidHeapPointer(f->channel_buffers[1]) #else #define CHECK(f) ((void) 0) #endif #define MAX_BLOCKSIZE_LOG 13 // from specification #define MAX_BLOCKSIZE (1 << MAX_BLOCKSIZE_LOG) typedef unsigned char uint8; typedef signed char int8; typedef unsigned short uint16; typedef signed short int16; typedef unsigned int uint32; typedef signed int int32; #ifndef TRUE #define TRUE 1 #define FALSE 0 #endif typedef float codetype; #ifdef _MSC_VER #define STBV_NOTUSED(v) (void)(v) #else #define STBV_NOTUSED(v) (void)sizeof(v) #endif // @NOTE // // Some arrays below are tagged "//varies", which means it's actually // a variable-sized piece of data, but rather than malloc I assume it's // small enough it's better to just allocate it all together with the // main thing // // Most of the variables are specified with the smallest size I could pack // them into. It might give better performance to make them all full-sized // integers. It should be safe to freely rearrange the structures or change // the sizes larger--nothing relies on silently truncating etc., nor the // order of variables. #define FAST_HUFFMAN_TABLE_SIZE (1 << STB_VORBIS_FAST_HUFFMAN_LENGTH) #define FAST_HUFFMAN_TABLE_MASK (FAST_HUFFMAN_TABLE_SIZE - 1) typedef struct { int dimensions, entries; uint8 *codeword_lengths; float minimum_value; float delta_value; uint8 value_bits; uint8 lookup_type; uint8 sequence_p; uint8 sparse; uint32 lookup_values; codetype *multiplicands; uint32 *codewords; #ifdef STB_VORBIS_FAST_HUFFMAN_SHORT int16 fast_huffman[FAST_HUFFMAN_TABLE_SIZE]; #else int32 fast_huffman[FAST_HUFFMAN_TABLE_SIZE]; #endif uint32 *sorted_codewords; int *sorted_values; int sorted_entries; } Codebook; typedef struct { uint8 order; uint16 rate; uint16 bark_map_size; uint8 amplitude_bits; uint8 amplitude_offset; uint8 number_of_books; uint8 book_list[16]; // varies } Floor0; typedef struct { uint8 partitions; uint8 partition_class_list[32]; // varies uint8 class_dimensions[16]; // varies uint8 class_subclasses[16]; // varies uint8 class_masterbooks[16]; // varies int16 subclass_books[16][8]; // varies uint16 Xlist[31*8+2]; // varies uint8 sorted_order[31*8+2]; uint8 neighbors[31*8+2][2]; uint8 floor1_multiplier; uint8 rangebits; int values; } Floor1; typedef union { Floor0 floor0; Floor1 floor1; } Floor; typedef struct { uint32 begin, end; uint32 part_size; uint8 classifications; uint8 classbook; uint8 **classdata; int16 (*residue_books)[8]; } Residue; typedef struct { uint8 magnitude; uint8 angle; uint8 mux; } MappingChannel; typedef struct { uint16 coupling_steps; MappingChannel *chan; uint8 submaps; uint8 submap_floor[15]; // varies uint8 submap_residue[15]; // varies } Mapping; typedef struct { uint8 blockflag; uint8 mapping; uint16 windowtype; uint16 transformtype; } Mode; typedef struct { uint32 goal_crc; // expected crc if match int bytes_left; // bytes left in packet uint32 crc_so_far; // running crc int bytes_done; // bytes processed in _current_ chunk uint32 sample_loc; // granule pos encoded in page } CRCscan; typedef struct { uint32 page_start, page_end; uint32 last_decoded_sample; } ProbedPage; struct stb_vorbis { // user-accessible info unsigned int sample_rate; int channels; unsigned int setup_memory_required; unsigned int temp_memory_required; unsigned int setup_temp_memory_required; char *vendor; int comment_list_length; char **comment_list; // input config #ifndef STB_VORBIS_NO_STDIO FILE *f; uint32 f_start; int close_on_free; #endif uint8 *stream; uint8 *stream_start; uint8 *stream_end; uint32 stream_len; uint8 push_mode; // the page to seek to when seeking to start, may be zero uint32 first_audio_page_offset; // p_first is the page on which the first audio packet ends // (but not necessarily the page on which it starts) ProbedPage p_first, p_last; // memory management stb_vorbis_alloc alloc; int setup_offset; int temp_offset; // run-time results int eof; enum STBVorbisError error; // user-useful data // header info int blocksize[2]; int blocksize_0, blocksize_1; int codebook_count; Codebook *codebooks; int floor_count; uint16 floor_types[64]; // varies Floor *floor_config; int residue_count; uint16 residue_types[64]; // varies Residue *residue_config; int mapping_count; Mapping *mapping; int mode_count; Mode mode_config[64]; // varies uint32 total_samples; // decode buffer float *channel_buffers[STB_VORBIS_MAX_CHANNELS]; float *outputs [STB_VORBIS_MAX_CHANNELS]; float *previous_window[STB_VORBIS_MAX_CHANNELS]; int previous_length; #ifndef STB_VORBIS_NO_DEFER_FLOOR int16 *finalY[STB_VORBIS_MAX_CHANNELS]; #else float *floor_buffers[STB_VORBIS_MAX_CHANNELS]; #endif uint32 current_loc; // sample location of next frame to decode int current_loc_valid; // per-blocksize precomputed data // twiddle factors float *A[2],*B[2],*C[2]; float *window[2]; uint16 *bit_reverse[2]; // current page/packet/segment streaming info uint32 serial; // stream serial number for verification int last_page; int segment_count; uint8 segments[255]; uint8 page_flag; uint8 bytes_in_seg; uint8 first_decode; int next_seg; int last_seg; // flag that we're on the last segment int last_seg_which; // what was the segment number of the last seg? uint32 acc; int valid_bits; int packet_bytes; int end_seg_with_known_loc; uint32 known_loc_for_packet; int discard_samples_deferred; uint32 samples_output; // push mode scanning int page_crc_tests; // only in push_mode: number of tests active; -1 if not searching #ifndef STB_VORBIS_NO_PUSHDATA_API CRCscan scan[STB_VORBIS_PUSHDATA_CRC_COUNT]; #endif // sample-access int channel_buffer_start; int channel_buffer_end; }; #if defined(STB_VORBIS_NO_PUSHDATA_API) #define IS_PUSH_MODE(f) FALSE #elif defined(STB_VORBIS_NO_PULLDATA_API) #define IS_PUSH_MODE(f) TRUE #else #define IS_PUSH_MODE(f) ((f)->push_mode) #endif typedef struct stb_vorbis vorb; static int error(vorb *f, enum STBVorbisError e) { f->error = e; if (!f->eof && e != VORBIS_need_more_data) { f->error=e; // breakpoint for debugging } return 0; } // these functions are used for allocating temporary memory // while decoding. if you can afford the stack space, use // alloca(); otherwise, provide a temp buffer and it will // allocate out of those. #define array_size_required(count,size) (count*(sizeof(void *)+(size))) #define temp_alloc(f,size) (f->alloc.alloc_buffer ? setup_temp_malloc(f,size) : alloca(size)) #define temp_free(f,p) (void)0 #define temp_alloc_save(f) ((f)->temp_offset) #define temp_alloc_restore(f,p) ((f)->temp_offset = (p)) #define temp_block_array(f,count,size) make_block_array(temp_alloc(f,array_size_required(count,size)), count, size) // given a sufficiently large block of memory, make an array of pointers to subblocks of it static void *make_block_array(void *mem, int count, int size) { int i; void ** p = (void **) mem; char *q = (char *) (p + count); for (i=0; i < count; ++i) { p[i] = q; q += size; } return p; } static void *setup_malloc(vorb *f, int sz) { sz = (sz+7) & ~7; // round up to nearest 8 for alignment of future allocs. f->setup_memory_required += sz; if (f->alloc.alloc_buffer) { void *p = (char *) f->alloc.alloc_buffer + f->setup_offset; if (f->setup_offset + sz > f->temp_offset) return NULL; f->setup_offset += sz; return p; } return sz ? malloc(sz) : NULL; } static void setup_free(vorb *f, void *p) { if (f->alloc.alloc_buffer) return; // do nothing; setup mem is a stack free(p); } static void *setup_temp_malloc(vorb *f, int sz) { sz = (sz+7) & ~7; // round up to nearest 8 for alignment of future allocs. if (f->alloc.alloc_buffer) { if (f->temp_offset - sz < f->setup_offset) return NULL; f->temp_offset -= sz; return (char *) f->alloc.alloc_buffer + f->temp_offset; } return malloc(sz); } static void setup_temp_free(vorb *f, void *p, int sz) { if (f->alloc.alloc_buffer) { f->temp_offset += (sz+7)&~7; return; } free(p); } #define CRC32_POLY 0x04c11db7 // from spec static uint32 crc_table[256]; static void crc32_init(void) { int i,j; uint32 s; for(i=0; i < 256; i++) { for (s=(uint32) i << 24, j=0; j < 8; ++j) s = (s << 1) ^ (s >= (1U<<31) ? CRC32_POLY : 0); crc_table[i] = s; } } static __forceinline uint32 crc32_update(uint32 crc, uint8 byte) { return (crc << 8) ^ crc_table[byte ^ (crc >> 24)]; } // used in setup, and for huffman that doesn't go fast path static unsigned int bit_reverse(unsigned int n) { n = ((n & 0xAAAAAAAA) >> 1) | ((n & 0x55555555) << 1); n = ((n & 0xCCCCCCCC) >> 2) | ((n & 0x33333333) << 2); n = ((n & 0xF0F0F0F0) >> 4) | ((n & 0x0F0F0F0F) << 4); n = ((n & 0xFF00FF00) >> 8) | ((n & 0x00FF00FF) << 8); return (n >> 16) | (n << 16); } static float square(float x) { return x*x; } // this is a weird definition of log2() for which log2(1) = 1, log2(2) = 2, log2(4) = 3 // as required by the specification. fast(?) implementation from stb.h // @OPTIMIZE: called multiple times per-packet with "constants"; move to setup static int ilog(int32 n) { static signed char log2_4[16] = { 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4 }; if (n < 0) return 0; // signed n returns 0 // 2 compares if n < 16, 3 compares otherwise (4 if signed or n > 1<<29) if (n < (1 << 14)) if (n < (1 << 4)) return 0 + log2_4[n ]; else if (n < (1 << 9)) return 5 + log2_4[n >> 5]; else return 10 + log2_4[n >> 10]; else if (n < (1 << 24)) if (n < (1 << 19)) return 15 + log2_4[n >> 15]; else return 20 + log2_4[n >> 20]; else if (n < (1 << 29)) return 25 + log2_4[n >> 25]; else return 30 + log2_4[n >> 30]; } #ifndef M_PI #define M_PI 3.14159265358979323846264f // from CRC #endif // code length assigned to a value with no huffman encoding #define NO_CODE 255 /////////////////////// LEAF SETUP FUNCTIONS ////////////////////////// // // these functions are only called at setup, and only a few times // per file static float float32_unpack(uint32 x) { // from the specification uint32 mantissa = x & 0x1fffff; uint32 sign = x & 0x80000000; uint32 exp = (x & 0x7fe00000) >> 21; double res = sign ? -(double)mantissa : (double)mantissa; return (float) ldexp((float)res, (int)exp-788); } // zlib & jpeg huffman tables assume that the output symbols // can either be arbitrarily arranged, or have monotonically // increasing frequencies--they rely on the lengths being sorted; // this makes for a very simple generation algorithm. // vorbis allows a huffman table with non-sorted lengths. This // requires a more sophisticated construction, since symbols in // order do not map to huffman codes "in order". static void add_entry(Codebook *c, uint32 huff_code, int symbol, int count, int len, uint32 *values) { if (!c->sparse) { c->codewords [symbol] = huff_code; } else { c->codewords [count] = huff_code; c->codeword_lengths[count] = len; values [count] = symbol; } } static int compute_codewords(Codebook *c, uint8 *len, int n, uint32 *values) { int i,k,m=0; uint32 available[32]; memset(available, 0, sizeof(available)); // find the first entry for (k=0; k < n; ++k) if (len[k] < NO_CODE) break; if (k == n) { assert(c->sorted_entries == 0); return TRUE; } assert(len[k] < 32); // no error return required, code reading lens checks this // add to the list add_entry(c, 0, k, m++, len[k], values); // add all available leaves for (i=1; i <= len[k]; ++i) available[i] = 1U << (32-i); // note that the above code treats the first case specially, // but it's really the same as the following code, so they // could probably be combined (except the initial code is 0, // and I use 0 in available[] to mean 'empty') for (i=k+1; i < n; ++i) { uint32 res; int z = len[i], y; if (z == NO_CODE) continue; assert(z < 32); // no error return required, code reading lens checks this // find lowest available leaf (should always be earliest, // which is what the specification calls for) // note that this property, and the fact we can never have // more than one free leaf at a given level, isn't totally // trivial to prove, but it seems true and the assert never // fires, so! while (z > 0 && !available[z]) --z; if (z == 0) { return FALSE; } res = available[z]; available[z] = 0; add_entry(c, bit_reverse(res), i, m++, len[i], values); // propagate availability up the tree if (z != len[i]) { for (y=len[i]; y > z; --y) { assert(available[y] == 0); available[y] = res + (1 << (32-y)); } } } return TRUE; } // accelerated huffman table allows fast O(1) match of all symbols // of length <= STB_VORBIS_FAST_HUFFMAN_LENGTH static void compute_accelerated_huffman(Codebook *c) { int i, len; for (i=0; i < FAST_HUFFMAN_TABLE_SIZE; ++i) c->fast_huffman[i] = -1; len = c->sparse ? c->sorted_entries : c->entries; #ifdef STB_VORBIS_FAST_HUFFMAN_SHORT if (len > 32767) len = 32767; // largest possible value we can encode! #endif for (i=0; i < len; ++i) { if (c->codeword_lengths[i] <= STB_VORBIS_FAST_HUFFMAN_LENGTH) { uint32 z = c->sparse ? bit_reverse(c->sorted_codewords[i]) : c->codewords[i]; // set table entries for all bit combinations in the higher bits while (z < FAST_HUFFMAN_TABLE_SIZE) { c->fast_huffman[z] = i; z += 1 << c->codeword_lengths[i]; } } } } #ifdef _MSC_VER #define STBV_CDECL __cdecl #else #define STBV_CDECL #endif static int STBV_CDECL uint32_compare(const void *p, const void *q) { uint32 x = * (uint32 *) p; uint32 y = * (uint32 *) q; return x < y ? -1 : x > y; } static int include_in_sort(Codebook *c, uint8 len) { if (c->sparse) { assert(len != NO_CODE); return TRUE; } if (len == NO_CODE) return FALSE; if (len > STB_VORBIS_FAST_HUFFMAN_LENGTH) return TRUE; return FALSE; } // if the fast table above doesn't work, we want to binary // search them... need to reverse the bits static void compute_sorted_huffman(Codebook *c, uint8 *lengths, uint32 *values) { int i, len; // build a list of all the entries // OPTIMIZATION: don't include the short ones, since they'll be caught by FAST_HUFFMAN. // this is kind of a frivolous optimization--I don't see any performance improvement, // but it's like 4 extra lines of code, so. if (!c->sparse) { int k = 0; for (i=0; i < c->entries; ++i) if (include_in_sort(c, lengths[i])) c->sorted_codewords[k++] = bit_reverse(c->codewords[i]); assert(k == c->sorted_entries); } else { for (i=0; i < c->sorted_entries; ++i) c->sorted_codewords[i] = bit_reverse(c->codewords[i]); } qsort(c->sorted_codewords, c->sorted_entries, sizeof(c->sorted_codewords[0]), uint32_compare); c->sorted_codewords[c->sorted_entries] = 0xffffffff; len = c->sparse ? c->sorted_entries : c->entries; // now we need to indicate how they correspond; we could either // #1: sort a different data structure that says who they correspond to // #2: for each sorted entry, search the original list to find who corresponds // #3: for each original entry, find the sorted entry // #1 requires extra storage, #2 is slow, #3 can use binary search! for (i=0; i < len; ++i) { int huff_len = c->sparse ? lengths[values[i]] : lengths[i]; if (include_in_sort(c,huff_len)) { uint32 code = bit_reverse(c->codewords[i]); int x=0, n=c->sorted_entries; while (n > 1) { // invariant: sc[x] <= code < sc[x+n] int m = x + (n >> 1); if (c->sorted_codewords[m] <= code) { x = m; n -= (n>>1); } else { n >>= 1; } } assert(c->sorted_codewords[x] == code); if (c->sparse) { c->sorted_values[x] = values[i]; c->codeword_lengths[x] = huff_len; } else { c->sorted_values[x] = i; } } } } // only run while parsing the header (3 times) static int vorbis_validate(uint8 *data) { static uint8 vorbis[6] = { 'v', 'o', 'r', 'b', 'i', 's' }; return memcmp(data, vorbis, 6) == 0; } // called from setup only, once per code book // (formula implied by specification) static int lookup1_values(int entries, int dim) { int r = (int) floor(exp((float) log((float) entries) / dim)); if ((int) floor(pow((float) r+1, dim)) <= entries) // (int) cast for MinGW warning; ++r; // floor() to avoid _ftol() when non-CRT if (pow((float) r+1, dim) <= entries) return -1; if ((int) floor(pow((float) r, dim)) > entries) return -1; return r; } // called twice per file static void compute_twiddle_factors(int n, float *A, float *B, float *C) { int n4 = n >> 2, n8 = n >> 3; int k,k2; for (k=k2=0; k < n4; ++k,k2+=2) { A[k2 ] = (float) cos(4*k*M_PI/n); A[k2+1] = (float) -sin(4*k*M_PI/n); B[k2 ] = (float) cos((k2+1)*M_PI/n/2) * 0.5f; B[k2+1] = (float) sin((k2+1)*M_PI/n/2) * 0.5f; } for (k=k2=0; k < n8; ++k,k2+=2) { C[k2 ] = (float) cos(2*(k2+1)*M_PI/n); C[k2+1] = (float) -sin(2*(k2+1)*M_PI/n); } } static void compute_window(int n, float *window) { int n2 = n >> 1, i; for (i=0; i < n2; ++i) window[i] = (float) sin(0.5 * M_PI * square((float) sin((i - 0 + 0.5) / n2 * 0.5 * M_PI))); } static void compute_bitreverse(int n, uint16 *rev) { int ld = ilog(n) - 1; // ilog is off-by-one from normal definitions int i, n8 = n >> 3; for (i=0; i < n8; ++i) rev[i] = (bit_reverse(i) >> (32-ld+3)) << 2; } static int init_blocksize(vorb *f, int b, int n) { int n2 = n >> 1, n4 = n >> 2, n8 = n >> 3; f->A[b] = (float *) setup_malloc(f, sizeof(float) * n2); f->B[b] = (float *) setup_malloc(f, sizeof(float) * n2); f->C[b] = (float *) setup_malloc(f, sizeof(float) * n4); if (!f->A[b] || !f->B[b] || !f->C[b]) return error(f, VORBIS_outofmem); compute_twiddle_factors(n, f->A[b], f->B[b], f->C[b]); f->window[b] = (float *) setup_malloc(f, sizeof(float) * n2); if (!f->window[b]) return error(f, VORBIS_outofmem); compute_window(n, f->window[b]); f->bit_reverse[b] = (uint16 *) setup_malloc(f, sizeof(uint16) * n8); if (!f->bit_reverse[b]) return error(f, VORBIS_outofmem); compute_bitreverse(n, f->bit_reverse[b]); return TRUE; } static void neighbors(uint16 *x, int n, int *plow, int *phigh) { int low = -1; int high = 65536; int i; for (i=0; i < n; ++i) { if (x[i] > low && x[i] < x[n]) { *plow = i; low = x[i]; } if (x[i] < high && x[i] > x[n]) { *phigh = i; high = x[i]; } } } // this has been repurposed so y is now the original index instead of y typedef struct { uint16 x,id; } stbv__floor_ordering; static int STBV_CDECL point_compare(const void *p, const void *q) { stbv__floor_ordering *a = (stbv__floor_ordering *) p; stbv__floor_ordering *b = (stbv__floor_ordering *) q; return a->x < b->x ? -1 : a->x > b->x; } // /////////////////////// END LEAF SETUP FUNCTIONS ////////////////////////// #if defined(STB_VORBIS_NO_STDIO) #define USE_MEMORY(z) TRUE #else #define USE_MEMORY(z) ((z)->stream) #endif static uint8 get8(vorb *z) { if (USE_MEMORY(z)) { if (z->stream >= z->stream_end) { z->eof = TRUE; return 0; } return *z->stream++; } #ifndef STB_VORBIS_NO_STDIO { int c = fgetc(z->f); if (c == EOF) { z->eof = TRUE; return 0; } return c; } #endif } static uint32 get32(vorb *f) { uint32 x; x = get8(f); x += get8(f) << 8; x += get8(f) << 16; x += (uint32) get8(f) << 24; return x; } static int getn(vorb *z, uint8 *data, int n) { if (USE_MEMORY(z)) { if (z->stream+n > z->stream_end) { z->eof = 1; return 0; } memcpy(data, z->stream, n); z->stream += n; return 1; } #ifndef STB_VORBIS_NO_STDIO if (fread(data, n, 1, z->f) == 1) return 1; else { z->eof = 1; return 0; } #endif } static void skip(vorb *z, int n) { if (USE_MEMORY(z)) { z->stream += n; if (z->stream >= z->stream_end) z->eof = 1; return; } #ifndef STB_VORBIS_NO_STDIO { long x = ftell(z->f); fseek(z->f, x+n, SEEK_SET); } #endif } static int set_file_offset(stb_vorbis *f, unsigned int loc) { #ifndef STB_VORBIS_NO_PUSHDATA_API if (f->push_mode) return 0; #endif f->eof = 0; if (USE_MEMORY(f)) { if (f->stream_start + loc >= f->stream_end || f->stream_start + loc < f->stream_start) { f->stream = f->stream_end; f->eof = 1; return 0; } else { f->stream = f->stream_start + loc; return 1; } } #ifndef STB_VORBIS_NO_STDIO if (loc + f->f_start < loc || loc >= 0x80000000) { loc = 0x7fffffff; f->eof = 1; } else { loc += f->f_start; } if (!fseek(f->f, loc, SEEK_SET)) return 1; f->eof = 1; fseek(f->f, f->f_start, SEEK_END); return 0; #endif } static uint8 ogg_page_header[4] = { 0x4f, 0x67, 0x67, 0x53 }; static int capture_pattern(vorb *f) { if (0x4f != get8(f)) return FALSE; if (0x67 != get8(f)) return FALSE; if (0x67 != get8(f)) return FALSE; if (0x53 != get8(f)) return FALSE; return TRUE; } #define PAGEFLAG_continued_packet 1 #define PAGEFLAG_first_page 2 #define PAGEFLAG_last_page 4 static int start_page_no_capturepattern(vorb *f) { uint32 loc0,loc1,n; if (f->first_decode && !IS_PUSH_MODE(f)) { f->p_first.page_start = stb_vorbis_get_file_offset(f) - 4; } // stream structure version if (0 != get8(f)) return error(f, VORBIS_invalid_stream_structure_version); // header flag f->page_flag = get8(f); // absolute granule position loc0 = get32(f); loc1 = get32(f); // @TODO: validate loc0,loc1 as valid positions? // stream serial number -- vorbis doesn't interleave, so discard get32(f); //if (f->serial != get32(f)) return error(f, VORBIS_incorrect_stream_serial_number); // page sequence number n = get32(f); f->last_page = n; // CRC32 get32(f); // page_segments f->segment_count = get8(f); if (!getn(f, f->segments, f->segment_count)) return error(f, VORBIS_unexpected_eof); // assume we _don't_ know any the sample position of any segments f->end_seg_with_known_loc = -2; if (loc0 != ~0U || loc1 != ~0U) { int i; // determine which packet is the last one that will complete for (i=f->segment_count-1; i >= 0; --i) if (f->segments[i] < 255) break; // 'i' is now the index of the _last_ segment of a packet that ends if (i >= 0) { f->end_seg_with_known_loc = i; f->known_loc_for_packet = loc0; } } if (f->first_decode) { int i,len; len = 0; for (i=0; i < f->segment_count; ++i) len += f->segments[i]; len += 27 + f->segment_count; f->p_first.page_end = f->p_first.page_start + len; f->p_first.last_decoded_sample = loc0; } f->next_seg = 0; return TRUE; } static int start_page(vorb *f) { if (!capture_pattern(f)) return error(f, VORBIS_missing_capture_pattern); return start_page_no_capturepattern(f); } static int start_packet(vorb *f) { while (f->next_seg == -1) { if (!start_page(f)) return FALSE; if (f->page_flag & PAGEFLAG_continued_packet) return error(f, VORBIS_continued_packet_flag_invalid); } f->last_seg = FALSE; f->valid_bits = 0; f->packet_bytes = 0; f->bytes_in_seg = 0; // f->next_seg is now valid return TRUE; } static int maybe_start_packet(vorb *f) { if (f->next_seg == -1) { int x = get8(f); if (f->eof) return FALSE; // EOF at page boundary is not an error! if (0x4f != x ) return error(f, VORBIS_missing_capture_pattern); if (0x67 != get8(f)) return error(f, VORBIS_missing_capture_pattern); if (0x67 != get8(f)) return error(f, VORBIS_missing_capture_pattern); if (0x53 != get8(f)) return error(f, VORBIS_missing_capture_pattern); if (!start_page_no_capturepattern(f)) return FALSE; if (f->page_flag & PAGEFLAG_continued_packet) { // set up enough state that we can read this packet if we want, // e.g. during recovery f->last_seg = FALSE; f->bytes_in_seg = 0; return error(f, VORBIS_continued_packet_flag_invalid); } } return start_packet(f); } static int next_segment(vorb *f) { int len; if (f->last_seg) return 0; if (f->next_seg == -1) { f->last_seg_which = f->segment_count-1; // in case start_page fails if (!start_page(f)) { f->last_seg = 1; return 0; } if (!(f->page_flag & PAGEFLAG_continued_packet)) return error(f, VORBIS_continued_packet_flag_invalid); } len = f->segments[f->next_seg++]; if (len < 255) { f->last_seg = TRUE; f->last_seg_which = f->next_seg-1; } if (f->next_seg >= f->segment_count) f->next_seg = -1; assert(f->bytes_in_seg == 0); f->bytes_in_seg = len; return len; } #define EOP (-1) #define INVALID_BITS (-1) static int get8_packet_raw(vorb *f) { if (!f->bytes_in_seg) { // CLANG! if (f->last_seg) return EOP; else if (!next_segment(f)) return EOP; } assert(f->bytes_in_seg > 0); --f->bytes_in_seg; ++f->packet_bytes; return get8(f); } static int get8_packet(vorb *f) { int x = get8_packet_raw(f); f->valid_bits = 0; return x; } static int get32_packet(vorb *f) { uint32 x; x = get8_packet(f); x += get8_packet(f) << 8; x += get8_packet(f) << 16; x += (uint32) get8_packet(f) << 24; return x; } static void flush_packet(vorb *f) { while (get8_packet_raw(f) != EOP); } // @OPTIMIZE: this is the secondary bit decoder, so it's probably not as important // as the huffman decoder? static uint32 get_bits(vorb *f, int n) { uint32 z; if (f->valid_bits < 0) return 0; if (f->valid_bits < n) { if (n > 24) { // the accumulator technique below would not work correctly in this case z = get_bits(f, 24); z += get_bits(f, n-24) << 24; return z; } if (f->valid_bits == 0) f->acc = 0; while (f->valid_bits < n) { int z = get8_packet_raw(f); if (z == EOP) { f->valid_bits = INVALID_BITS; return 0; } f->acc += z << f->valid_bits; f->valid_bits += 8; } } assert(f->valid_bits >= n); z = f->acc & ((1 << n)-1); f->acc >>= n; f->valid_bits -= n; return z; } // @OPTIMIZE: primary accumulator for huffman // expand the buffer to as many bits as possible without reading off end of packet // it might be nice to allow f->valid_bits and f->acc to be stored in registers, // e.g. cache them locally and decode locally static __forceinline void prep_huffman(vorb *f) { if (f->valid_bits <= 24) { if (f->valid_bits == 0) f->acc = 0; do { int z; if (f->last_seg && !f->bytes_in_seg) return; z = get8_packet_raw(f); if (z == EOP) return; f->acc += (unsigned) z << f->valid_bits; f->valid_bits += 8; } while (f->valid_bits <= 24); } } enum { VORBIS_packet_id = 1, VORBIS_packet_comment = 3, VORBIS_packet_setup = 5 }; static int codebook_decode_scalar_raw(vorb *f, Codebook *c) { int i; prep_huffman(f); if (c->codewords == NULL && c->sorted_codewords == NULL) return -1; // cases to use binary search: sorted_codewords && !c->codewords // sorted_codewords && c->entries > 8 if (c->entries > 8 ? c->sorted_codewords!=NULL : !c->codewords) { // binary search uint32 code = bit_reverse(f->acc); int x=0, n=c->sorted_entries, len; while (n > 1) { // invariant: sc[x] <= code < sc[x+n] int m = x + (n >> 1); if (c->sorted_codewords[m] <= code) { x = m; n -= (n>>1); } else { n >>= 1; } } // x is now the sorted index if (!c->sparse) x = c->sorted_values[x]; // x is now sorted index if sparse, or symbol otherwise len = c->codeword_lengths[x]; if (f->valid_bits >= len) { f->acc >>= len; f->valid_bits -= len; return x; } f->valid_bits = 0; return -1; } // if small, linear search assert(!c->sparse); for (i=0; i < c->entries; ++i) { if (c->codeword_lengths[i] == NO_CODE) continue; if (c->codewords[i] == (f->acc & ((1 << c->codeword_lengths[i])-1))) { if (f->valid_bits >= c->codeword_lengths[i]) { f->acc >>= c->codeword_lengths[i]; f->valid_bits -= c->codeword_lengths[i]; return i; } f->valid_bits = 0; return -1; } } error(f, VORBIS_invalid_stream); f->valid_bits = 0; return -1; } #ifndef STB_VORBIS_NO_INLINE_DECODE #define DECODE_RAW(var, f,c) \ if (f->valid_bits < STB_VORBIS_FAST_HUFFMAN_LENGTH) \ prep_huffman(f); \ var = f->acc & FAST_HUFFMAN_TABLE_MASK; \ var = c->fast_huffman[var]; \ if (var >= 0) { \ int n = c->codeword_lengths[var]; \ f->acc >>= n; \ f->valid_bits -= n; \ if (f->valid_bits < 0) { f->valid_bits = 0; var = -1; } \ } else { \ var = codebook_decode_scalar_raw(f,c); \ } #else static int codebook_decode_scalar(vorb *f, Codebook *c) { int i; if (f->valid_bits < STB_VORBIS_FAST_HUFFMAN_LENGTH) prep_huffman(f); // fast huffman table lookup i = f->acc & FAST_HUFFMAN_TABLE_MASK; i = c->fast_huffman[i]; if (i >= 0) { f->acc >>= c->codeword_lengths[i]; f->valid_bits -= c->codeword_lengths[i]; if (f->valid_bits < 0) { f->valid_bits = 0; return -1; } return i; } return codebook_decode_scalar_raw(f,c); } #define DECODE_RAW(var,f,c) var = codebook_decode_scalar(f,c); #endif #define DECODE(var,f,c) \ DECODE_RAW(var,f,c) \ if (c->sparse) var = c->sorted_values[var]; #ifndef STB_VORBIS_DIVIDES_IN_CODEBOOK #define DECODE_VQ(var,f,c) DECODE_RAW(var,f,c) #else #define DECODE_VQ(var,f,c) DECODE(var,f,c) #endif // CODEBOOK_ELEMENT_FAST is an optimization for the CODEBOOK_FLOATS case // where we avoid one addition #define CODEBOOK_ELEMENT(c,off) (c->multiplicands[off]) #define CODEBOOK_ELEMENT_FAST(c,off) (c->multiplicands[off]) #define CODEBOOK_ELEMENT_BASE(c) (0) static int codebook_decode_start(vorb *f, Codebook *c) { int z = -1; // type 0 is only legal in a scalar context if (c->lookup_type == 0) error(f, VORBIS_invalid_stream); else { DECODE_VQ(z,f,c); if (c->sparse) assert(z < c->sorted_entries); if (z < 0) { // check for EOP if (!f->bytes_in_seg) if (f->last_seg) return z; error(f, VORBIS_invalid_stream); } } return z; } static int codebook_decode(vorb *f, Codebook *c, float *output, int len) { int i,z = codebook_decode_start(f,c); if (z < 0) return FALSE; if (len > c->dimensions) len = c->dimensions; #ifdef STB_VORBIS_DIVIDES_IN_CODEBOOK if (c->lookup_type == 1) { float last = CODEBOOK_ELEMENT_BASE(c); int div = 1; for (i=0; i < len; ++i) { int off = (z / div) % c->lookup_values; float val = CODEBOOK_ELEMENT_FAST(c,off) + last; output[i] += val; if (c->sequence_p) last = val + c->minimum_value; div *= c->lookup_values; } return TRUE; } #endif z *= c->dimensions; if (c->sequence_p) { float last = CODEBOOK_ELEMENT_BASE(c); for (i=0; i < len; ++i) { float val = CODEBOOK_ELEMENT_FAST(c,z+i) + last; output[i] += val; last = val + c->minimum_value; } } else { float last = CODEBOOK_ELEMENT_BASE(c); for (i=0; i < len; ++i) { output[i] += CODEBOOK_ELEMENT_FAST(c,z+i) + last; } } return TRUE; } static int codebook_decode_step(vorb *f, Codebook *c, float *output, int len, int step) { int i,z = codebook_decode_start(f,c); float last = CODEBOOK_ELEMENT_BASE(c); if (z < 0) return FALSE; if (len > c->dimensions) len = c->dimensions; #ifdef STB_VORBIS_DIVIDES_IN_CODEBOOK if (c->lookup_type == 1) { int div = 1; for (i=0; i < len; ++i) { int off = (z / div) % c->lookup_values; float val = CODEBOOK_ELEMENT_FAST(c,off) + last; output[i*step] += val; if (c->sequence_p) last = val; div *= c->lookup_values; } return TRUE; } #endif z *= c->dimensions; for (i=0; i < len; ++i) { float val = CODEBOOK_ELEMENT_FAST(c,z+i) + last; output[i*step] += val; if (c->sequence_p) last = val; } return TRUE; } static int codebook_decode_deinterleave_repeat(vorb *f, Codebook *c, float **outputs, int ch, int *c_inter_p, int *p_inter_p, int len, int total_decode) { int c_inter = *c_inter_p; int p_inter = *p_inter_p; int i,z, effective = c->dimensions; // type 0 is only legal in a scalar context if (c->lookup_type == 0) return error(f, VORBIS_invalid_stream); while (total_decode > 0) { float last = CODEBOOK_ELEMENT_BASE(c); DECODE_VQ(z,f,c); #ifndef STB_VORBIS_DIVIDES_IN_CODEBOOK assert(!c->sparse || z < c->sorted_entries); #endif if (z < 0) { if (!f->bytes_in_seg) if (f->last_seg) return FALSE; return error(f, VORBIS_invalid_stream); } // if this will take us off the end of the buffers, stop short! // we check by computing the length of the virtual interleaved // buffer (len*ch), our current offset within it (p_inter*ch)+(c_inter), // and the length we'll be using (effective) if (c_inter + p_inter*ch + effective > len * ch) { effective = len*ch - (p_inter*ch - c_inter); } #ifdef STB_VORBIS_DIVIDES_IN_CODEBOOK if (c->lookup_type == 1) { int div = 1; for (i=0; i < effective; ++i) { int off = (z / div) % c->lookup_values; float val = CODEBOOK_ELEMENT_FAST(c,off) + last; if (outputs[c_inter]) outputs[c_inter][p_inter] += val; if (++c_inter == ch) { c_inter = 0; ++p_inter; } if (c->sequence_p) last = val; div *= c->lookup_values; } } else #endif { z *= c->dimensions; if (c->sequence_p) { for (i=0; i < effective; ++i) { float val = CODEBOOK_ELEMENT_FAST(c,z+i) + last; if (outputs[c_inter]) outputs[c_inter][p_inter] += val; if (++c_inter == ch) { c_inter = 0; ++p_inter; } last = val; } } else { for (i=0; i < effective; ++i) { float val = CODEBOOK_ELEMENT_FAST(c,z+i) + last; if (outputs[c_inter]) outputs[c_inter][p_inter] += val; if (++c_inter == ch) { c_inter = 0; ++p_inter; } } } } total_decode -= effective; } *c_inter_p = c_inter; *p_inter_p = p_inter; return TRUE; } static int predict_point(int x, int x0, int x1, int y0, int y1) { int dy = y1 - y0; int adx = x1 - x0; // @OPTIMIZE: force int division to round in the right direction... is this necessary on x86? int err = abs(dy) * (x - x0); int off = err / adx; return dy < 0 ? y0 - off : y0 + off; } // the following table is block-copied from the specification static float inverse_db_table[256] = { 1.0649863e-07f, 1.1341951e-07f, 1.2079015e-07f, 1.2863978e-07f, 1.3699951e-07f, 1.4590251e-07f, 1.5538408e-07f, 1.6548181e-07f, 1.7623575e-07f, 1.8768855e-07f, 1.9988561e-07f, 2.1287530e-07f, 2.2670913e-07f, 2.4144197e-07f, 2.5713223e-07f, 2.7384213e-07f, 2.9163793e-07f, 3.1059021e-07f, 3.3077411e-07f, 3.5226968e-07f, 3.7516214e-07f, 3.9954229e-07f, 4.2550680e-07f, 4.5315863e-07f, 4.8260743e-07f, 5.1396998e-07f, 5.4737065e-07f, 5.8294187e-07f, 6.2082472e-07f, 6.6116941e-07f, 7.0413592e-07f, 7.4989464e-07f, 7.9862701e-07f, 8.5052630e-07f, 9.0579828e-07f, 9.6466216e-07f, 1.0273513e-06f, 1.0941144e-06f, 1.1652161e-06f, 1.2409384e-06f, 1.3215816e-06f, 1.4074654e-06f, 1.4989305e-06f, 1.5963394e-06f, 1.7000785e-06f, 1.8105592e-06f, 1.9282195e-06f, 2.0535261e-06f, 2.1869758e-06f, 2.3290978e-06f, 2.4804557e-06f, 2.6416497e-06f, 2.8133190e-06f, 2.9961443e-06f, 3.1908506e-06f, 3.3982101e-06f, 3.6190449e-06f, 3.8542308e-06f, 4.1047004e-06f, 4.3714470e-06f, 4.6555282e-06f, 4.9580707e-06f, 5.2802740e-06f, 5.6234160e-06f, 5.9888572e-06f, 6.3780469e-06f, 6.7925283e-06f, 7.2339451e-06f, 7.7040476e-06f, 8.2047000e-06f, 8.7378876e-06f, 9.3057248e-06f, 9.9104632e-06f, 1.0554501e-05f, 1.1240392e-05f, 1.1970856e-05f, 1.2748789e-05f, 1.3577278e-05f, 1.4459606e-05f, 1.5399272e-05f, 1.6400004e-05f, 1.7465768e-05f, 1.8600792e-05f, 1.9809576e-05f, 2.1096914e-05f, 2.2467911e-05f, 2.3928002e-05f, 2.5482978e-05f, 2.7139006e-05f, 2.8902651e-05f, 3.0780908e-05f, 3.2781225e-05f, 3.4911534e-05f, 3.7180282e-05f, 3.9596466e-05f, 4.2169667e-05f, 4.4910090e-05f, 4.7828601e-05f, 5.0936773e-05f, 5.4246931e-05f, 5.7772202e-05f, 6.1526565e-05f, 6.5524908e-05f, 6.9783085e-05f, 7.4317983e-05f, 7.9147585e-05f, 8.4291040e-05f, 8.9768747e-05f, 9.5602426e-05f, 0.00010181521f, 0.00010843174f, 0.00011547824f, 0.00012298267f, 0.00013097477f, 0.00013948625f, 0.00014855085f, 0.00015820453f, 0.00016848555f, 0.00017943469f, 0.00019109536f, 0.00020351382f, 0.00021673929f, 0.00023082423f, 0.00024582449f, 0.00026179955f, 0.00027881276f, 0.00029693158f, 0.00031622787f, 0.00033677814f, 0.00035866388f, 0.00038197188f, 0.00040679456f, 0.00043323036f, 0.00046138411f, 0.00049136745f, 0.00052329927f, 0.00055730621f, 0.00059352311f, 0.00063209358f, 0.00067317058f, 0.00071691700f, 0.00076350630f, 0.00081312324f, 0.00086596457f, 0.00092223983f, 0.00098217216f, 0.0010459992f, 0.0011139742f, 0.0011863665f, 0.0012634633f, 0.0013455702f, 0.0014330129f, 0.0015261382f, 0.0016253153f, 0.0017309374f, 0.0018434235f, 0.0019632195f, 0.0020908006f, 0.0022266726f, 0.0023713743f, 0.0025254795f, 0.0026895994f, 0.0028643847f, 0.0030505286f, 0.0032487691f, 0.0034598925f, 0.0036847358f, 0.0039241906f, 0.0041792066f, 0.0044507950f, 0.0047400328f, 0.0050480668f, 0.0053761186f, 0.0057254891f, 0.0060975636f, 0.0064938176f, 0.0069158225f, 0.0073652516f, 0.0078438871f, 0.0083536271f, 0.0088964928f, 0.009474637f, 0.010090352f, 0.010746080f, 0.011444421f, 0.012188144f, 0.012980198f, 0.013823725f, 0.014722068f, 0.015678791f, 0.016697687f, 0.017782797f, 0.018938423f, 0.020169149f, 0.021479854f, 0.022875735f, 0.024362330f, 0.025945531f, 0.027631618f, 0.029427276f, 0.031339626f, 0.033376252f, 0.035545228f, 0.037855157f, 0.040315199f, 0.042935108f, 0.045725273f, 0.048696758f, 0.051861348f, 0.055231591f, 0.058820850f, 0.062643361f, 0.066714279f, 0.071049749f, 0.075666962f, 0.080584227f, 0.085821044f, 0.091398179f, 0.097337747f, 0.10366330f, 0.11039993f, 0.11757434f, 0.12521498f, 0.13335215f, 0.14201813f, 0.15124727f, 0.16107617f, 0.17154380f, 0.18269168f, 0.19456402f, 0.20720788f, 0.22067342f, 0.23501402f, 0.25028656f, 0.26655159f, 0.28387361f, 0.30232132f, 0.32196786f, 0.34289114f, 0.36517414f, 0.38890521f, 0.41417847f, 0.44109412f, 0.46975890f, 0.50028648f, 0.53279791f, 0.56742212f, 0.60429640f, 0.64356699f, 0.68538959f, 0.72993007f, 0.77736504f, 0.82788260f, 0.88168307f, 0.9389798f, 1.0f }; // @OPTIMIZE: if you want to replace this bresenham line-drawing routine, // note that you must produce bit-identical output to decode correctly; // this specific sequence of operations is specified in the spec (it's // drawing integer-quantized frequency-space lines that the encoder // expects to be exactly the same) // ... also, isn't the whole point of Bresenham's algorithm to NOT // have to divide in the setup? sigh. #ifndef STB_VORBIS_NO_DEFER_FLOOR #define LINE_OP(a,b) a *= b #else #define LINE_OP(a,b) a = b #endif #ifdef STB_VORBIS_DIVIDE_TABLE #define DIVTAB_NUMER 32 #define DIVTAB_DENOM 64 int8 integer_divide_table[DIVTAB_NUMER][DIVTAB_DENOM]; // 2KB #endif static __forceinline void draw_line(float *output, int x0, int y0, int x1, int y1, int n) { int dy = y1 - y0; int adx = x1 - x0; int ady = abs(dy); int base; int x=x0,y=y0; int err = 0; int sy; #ifdef STB_VORBIS_DIVIDE_TABLE if (adx < DIVTAB_DENOM && ady < DIVTAB_NUMER) { if (dy < 0) { base = -integer_divide_table[ady][adx]; sy = base-1; } else { base = integer_divide_table[ady][adx]; sy = base+1; } } else { base = dy / adx; if (dy < 0) sy = base - 1; else sy = base+1; } #else base = dy / adx; if (dy < 0) sy = base - 1; else sy = base+1; #endif ady -= abs(base) * adx; if (x1 > n) x1 = n; if (x < x1) { LINE_OP(output[x], inverse_db_table[y&255]); for (++x; x < x1; ++x) { err += ady; if (err >= adx) { err -= adx; y += sy; } else y += base; LINE_OP(output[x], inverse_db_table[y&255]); } } } static int residue_decode(vorb *f, Codebook *book, float *target, int offset, int n, int rtype) { int k; if (rtype == 0) { int step = n / book->dimensions; for (k=0; k < step; ++k) if (!codebook_decode_step(f, book, target+offset+k, n-offset-k, step)) return FALSE; } else { for (k=0; k < n; ) { if (!codebook_decode(f, book, target+offset, n-k)) return FALSE; k += book->dimensions; offset += book->dimensions; } } return TRUE; } // n is 1/2 of the blocksize -- // specification: "Correct per-vector decode length is [n]/2" static void decode_residue(vorb *f, float *residue_buffers[], int ch, int n, int rn, uint8 *do_not_decode) { int i,j,pass; Residue *r = f->residue_config + rn; int rtype = f->residue_types[rn]; int c = r->classbook; int classwords = f->codebooks[c].dimensions; unsigned int actual_size = rtype == 2 ? n*2 : n; unsigned int limit_r_begin = (r->begin < actual_size ? r->begin : actual_size); unsigned int limit_r_end = (r->end < actual_size ? r->end : actual_size); int n_read = limit_r_end - limit_r_begin; int part_read = n_read / r->part_size; int temp_alloc_point = temp_alloc_save(f); #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE uint8 ***part_classdata = (uint8 ***) temp_block_array(f,f->channels, part_read * sizeof(**part_classdata)); #else int **classifications = (int **) temp_block_array(f,f->channels, part_read * sizeof(**classifications)); #endif CHECK(f); for (i=0; i < ch; ++i) if (!do_not_decode[i]) memset(residue_buffers[i], 0, sizeof(float) * n); if (rtype == 2 && ch != 1) { for (j=0; j < ch; ++j) if (!do_not_decode[j]) break; if (j == ch) goto done; for (pass=0; pass < 8; ++pass) { int pcount = 0, class_set = 0; if (ch == 2) { while (pcount < part_read) { int z = r->begin + pcount*r->part_size; int c_inter = (z & 1), p_inter = z>>1; if (pass == 0) { Codebook *c = f->codebooks+r->classbook; int q; DECODE(q,f,c); if (q == EOP) goto done; #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE part_classdata[0][class_set] = r->classdata[q]; #else for (i=classwords-1; i >= 0; --i) { classifications[0][i+pcount] = q % r->classifications; q /= r->classifications; } #endif } for (i=0; i < classwords && pcount < part_read; ++i, ++pcount) { int z = r->begin + pcount*r->part_size; #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE int c = part_classdata[0][class_set][i]; #else int c = classifications[0][pcount]; #endif int b = r->residue_books[c][pass]; if (b >= 0) { Codebook *book = f->codebooks + b; #ifdef STB_VORBIS_DIVIDES_IN_CODEBOOK if (!codebook_decode_deinterleave_repeat(f, book, residue_buffers, ch, &c_inter, &p_inter, n, r->part_size)) goto done; #else // saves 1% if (!codebook_decode_deinterleave_repeat(f, book, residue_buffers, ch, &c_inter, &p_inter, n, r->part_size)) goto done; #endif } else { z += r->part_size; c_inter = z & 1; p_inter = z >> 1; } } #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE ++class_set; #endif } } else if (ch > 2) { while (pcount < part_read) { int z = r->begin + pcount*r->part_size; int c_inter = z % ch, p_inter = z/ch; if (pass == 0) { Codebook *c = f->codebooks+r->classbook; int q; DECODE(q,f,c); if (q == EOP) goto done; #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE part_classdata[0][class_set] = r->classdata[q]; #else for (i=classwords-1; i >= 0; --i) { classifications[0][i+pcount] = q % r->classifications; q /= r->classifications; } #endif } for (i=0; i < classwords && pcount < part_read; ++i, ++pcount) { int z = r->begin + pcount*r->part_size; #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE int c = part_classdata[0][class_set][i]; #else int c = classifications[0][pcount]; #endif int b = r->residue_books[c][pass]; if (b >= 0) { Codebook *book = f->codebooks + b; if (!codebook_decode_deinterleave_repeat(f, book, residue_buffers, ch, &c_inter, &p_inter, n, r->part_size)) goto done; } else { z += r->part_size; c_inter = z % ch; p_inter = z / ch; } } #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE ++class_set; #endif } } } goto done; } CHECK(f); for (pass=0; pass < 8; ++pass) { int pcount = 0, class_set=0; while (pcount < part_read) { if (pass == 0) { for (j=0; j < ch; ++j) { if (!do_not_decode[j]) { Codebook *c = f->codebooks+r->classbook; int temp; DECODE(temp,f,c); if (temp == EOP) goto done; #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE part_classdata[j][class_set] = r->classdata[temp]; #else for (i=classwords-1; i >= 0; --i) { classifications[j][i+pcount] = temp % r->classifications; temp /= r->classifications; } #endif } } } for (i=0; i < classwords && pcount < part_read; ++i, ++pcount) { for (j=0; j < ch; ++j) { if (!do_not_decode[j]) { #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE int c = part_classdata[j][class_set][i]; #else int c = classifications[j][pcount]; #endif int b = r->residue_books[c][pass]; if (b >= 0) { float *target = residue_buffers[j]; int offset = r->begin + pcount * r->part_size; int n = r->part_size; Codebook *book = f->codebooks + b; if (!residue_decode(f, book, target, offset, n, rtype)) goto done; } } } } #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE ++class_set; #endif } } done: CHECK(f); #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE temp_free(f,part_classdata); #else temp_free(f,classifications); #endif temp_alloc_restore(f,temp_alloc_point); } #if 0 // slow way for debugging void inverse_mdct_slow(float *buffer, int n) { int i,j; int n2 = n >> 1; float *x = (float *) malloc(sizeof(*x) * n2); memcpy(x, buffer, sizeof(*x) * n2); for (i=0; i < n; ++i) { float acc = 0; for (j=0; j < n2; ++j) // formula from paper: //acc += n/4.0f * x[j] * (float) cos(M_PI / 2 / n * (2 * i + 1 + n/2.0)*(2*j+1)); // formula from wikipedia //acc += 2.0f / n2 * x[j] * (float) cos(M_PI/n2 * (i + 0.5 + n2/2)*(j + 0.5)); // these are equivalent, except the formula from the paper inverts the multiplier! // however, what actually works is NO MULTIPLIER!?! //acc += 64 * 2.0f / n2 * x[j] * (float) cos(M_PI/n2 * (i + 0.5 + n2/2)*(j + 0.5)); acc += x[j] * (float) cos(M_PI / 2 / n * (2 * i + 1 + n/2.0)*(2*j+1)); buffer[i] = acc; } free(x); } #elif 0 // same as above, but just barely able to run in real time on modern machines void inverse_mdct_slow(float *buffer, int n, vorb *f, int blocktype) { float mcos[16384]; int i,j; int n2 = n >> 1, nmask = (n << 2) -1; float *x = (float *) malloc(sizeof(*x) * n2); memcpy(x, buffer, sizeof(*x) * n2); for (i=0; i < 4*n; ++i) mcos[i] = (float) cos(M_PI / 2 * i / n); for (i=0; i < n; ++i) { float acc = 0; for (j=0; j < n2; ++j) acc += x[j] * mcos[(2 * i + 1 + n2)*(2*j+1) & nmask]; buffer[i] = acc; } free(x); } #elif 0 // transform to use a slow dct-iv; this is STILL basically trivial, // but only requires half as many ops void dct_iv_slow(float *buffer, int n) { float mcos[16384]; float x[2048]; int i,j; int n2 = n >> 1, nmask = (n << 3) - 1; memcpy(x, buffer, sizeof(*x) * n); for (i=0; i < 8*n; ++i) mcos[i] = (float) cos(M_PI / 4 * i / n); for (i=0; i < n; ++i) { float acc = 0; for (j=0; j < n; ++j) acc += x[j] * mcos[((2 * i + 1)*(2*j+1)) & nmask]; buffer[i] = acc; } } void inverse_mdct_slow(float *buffer, int n, vorb *f, int blocktype) { int i, n4 = n >> 2, n2 = n >> 1, n3_4 = n - n4; float temp[4096]; memcpy(temp, buffer, n2 * sizeof(float)); dct_iv_slow(temp, n2); // returns -c'-d, a-b' for (i=0; i < n4 ; ++i) buffer[i] = temp[i+n4]; // a-b' for ( ; i < n3_4; ++i) buffer[i] = -temp[n3_4 - i - 1]; // b-a', c+d' for ( ; i < n ; ++i) buffer[i] = -temp[i - n3_4]; // c'+d } #endif #ifndef LIBVORBIS_MDCT #define LIBVORBIS_MDCT 0 #endif #if LIBVORBIS_MDCT // directly call the vorbis MDCT using an interface documented // by Jeff Roberts... useful for performance comparison typedef struct { int n; int log2n; float *trig; int *bitrev; float scale; } mdct_lookup; extern void mdct_init(mdct_lookup *lookup, int n); extern void mdct_clear(mdct_lookup *l); extern void mdct_backward(mdct_lookup *init, float *in, float *out); mdct_lookup M1,M2; void inverse_mdct(float *buffer, int n, vorb *f, int blocktype) { mdct_lookup *M; if (M1.n == n) M = &M1; else if (M2.n == n) M = &M2; else if (M1.n == 0) { mdct_init(&M1, n); M = &M1; } else { if (M2.n) __asm int 3; mdct_init(&M2, n); M = &M2; } mdct_backward(M, buffer, buffer); } #endif // the following were split out into separate functions while optimizing; // they could be pushed back up but eh. __forceinline showed no change; // they're probably already being inlined. static void imdct_step3_iter0_loop(int n, float *e, int i_off, int k_off, float *A) { float *ee0 = e + i_off; float *ee2 = ee0 + k_off; int i; assert((n & 3) == 0); for (i=(n>>2); i > 0; --i) { float k00_20, k01_21; k00_20 = ee0[ 0] - ee2[ 0]; k01_21 = ee0[-1] - ee2[-1]; ee0[ 0] += ee2[ 0];//ee0[ 0] = ee0[ 0] + ee2[ 0]; ee0[-1] += ee2[-1];//ee0[-1] = ee0[-1] + ee2[-1]; ee2[ 0] = k00_20 * A[0] - k01_21 * A[1]; ee2[-1] = k01_21 * A[0] + k00_20 * A[1]; A += 8; k00_20 = ee0[-2] - ee2[-2]; k01_21 = ee0[-3] - ee2[-3]; ee0[-2] += ee2[-2];//ee0[-2] = ee0[-2] + ee2[-2]; ee0[-3] += ee2[-3];//ee0[-3] = ee0[-3] + ee2[-3]; ee2[-2] = k00_20 * A[0] - k01_21 * A[1]; ee2[-3] = k01_21 * A[0] + k00_20 * A[1]; A += 8; k00_20 = ee0[-4] - ee2[-4]; k01_21 = ee0[-5] - ee2[-5]; ee0[-4] += ee2[-4];//ee0[-4] = ee0[-4] + ee2[-4]; ee0[-5] += ee2[-5];//ee0[-5] = ee0[-5] + ee2[-5]; ee2[-4] = k00_20 * A[0] - k01_21 * A[1]; ee2[-5] = k01_21 * A[0] + k00_20 * A[1]; A += 8; k00_20 = ee0[-6] - ee2[-6]; k01_21 = ee0[-7] - ee2[-7]; ee0[-6] += ee2[-6];//ee0[-6] = ee0[-6] + ee2[-6]; ee0[-7] += ee2[-7];//ee0[-7] = ee0[-7] + ee2[-7]; ee2[-6] = k00_20 * A[0] - k01_21 * A[1]; ee2[-7] = k01_21 * A[0] + k00_20 * A[1]; A += 8; ee0 -= 8; ee2 -= 8; } } static void imdct_step3_inner_r_loop(int lim, float *e, int d0, int k_off, float *A, int k1) { int i; float k00_20, k01_21; float *e0 = e + d0; float *e2 = e0 + k_off; for (i=lim >> 2; i > 0; --i) { k00_20 = e0[-0] - e2[-0]; k01_21 = e0[-1] - e2[-1]; e0[-0] += e2[-0];//e0[-0] = e0[-0] + e2[-0]; e0[-1] += e2[-1];//e0[-1] = e0[-1] + e2[-1]; e2[-0] = (k00_20)*A[0] - (k01_21) * A[1]; e2[-1] = (k01_21)*A[0] + (k00_20) * A[1]; A += k1; k00_20 = e0[-2] - e2[-2]; k01_21 = e0[-3] - e2[-3]; e0[-2] += e2[-2];//e0[-2] = e0[-2] + e2[-2]; e0[-3] += e2[-3];//e0[-3] = e0[-3] + e2[-3]; e2[-2] = (k00_20)*A[0] - (k01_21) * A[1]; e2[-3] = (k01_21)*A[0] + (k00_20) * A[1]; A += k1; k00_20 = e0[-4] - e2[-4]; k01_21 = e0[-5] - e2[-5]; e0[-4] += e2[-4];//e0[-4] = e0[-4] + e2[-4]; e0[-5] += e2[-5];//e0[-5] = e0[-5] + e2[-5]; e2[-4] = (k00_20)*A[0] - (k01_21) * A[1]; e2[-5] = (k01_21)*A[0] + (k00_20) * A[1]; A += k1; k00_20 = e0[-6] - e2[-6]; k01_21 = e0[-7] - e2[-7]; e0[-6] += e2[-6];//e0[-6] = e0[-6] + e2[-6]; e0[-7] += e2[-7];//e0[-7] = e0[-7] + e2[-7]; e2[-6] = (k00_20)*A[0] - (k01_21) * A[1]; e2[-7] = (k01_21)*A[0] + (k00_20) * A[1]; e0 -= 8; e2 -= 8; A += k1; } } static void imdct_step3_inner_s_loop(int n, float *e, int i_off, int k_off, float *A, int a_off, int k0) { int i; float A0 = A[0]; float A1 = A[0+1]; float A2 = A[0+a_off]; float A3 = A[0+a_off+1]; float A4 = A[0+a_off*2+0]; float A5 = A[0+a_off*2+1]; float A6 = A[0+a_off*3+0]; float A7 = A[0+a_off*3+1]; float k00,k11; float *ee0 = e +i_off; float *ee2 = ee0+k_off; for (i=n; i > 0; --i) { k00 = ee0[ 0] - ee2[ 0]; k11 = ee0[-1] - ee2[-1]; ee0[ 0] = ee0[ 0] + ee2[ 0]; ee0[-1] = ee0[-1] + ee2[-1]; ee2[ 0] = (k00) * A0 - (k11) * A1; ee2[-1] = (k11) * A0 + (k00) * A1; k00 = ee0[-2] - ee2[-2]; k11 = ee0[-3] - ee2[-3]; ee0[-2] = ee0[-2] + ee2[-2]; ee0[-3] = ee0[-3] + ee2[-3]; ee2[-2] = (k00) * A2 - (k11) * A3; ee2[-3] = (k11) * A2 + (k00) * A3; k00 = ee0[-4] - ee2[-4]; k11 = ee0[-5] - ee2[-5]; ee0[-4] = ee0[-4] + ee2[-4]; ee0[-5] = ee0[-5] + ee2[-5]; ee2[-4] = (k00) * A4 - (k11) * A5; ee2[-5] = (k11) * A4 + (k00) * A5; k00 = ee0[-6] - ee2[-6]; k11 = ee0[-7] - ee2[-7]; ee0[-6] = ee0[-6] + ee2[-6]; ee0[-7] = ee0[-7] + ee2[-7]; ee2[-6] = (k00) * A6 - (k11) * A7; ee2[-7] = (k11) * A6 + (k00) * A7; ee0 -= k0; ee2 -= k0; } } static __forceinline void iter_54(float *z) { float k00,k11,k22,k33; float y0,y1,y2,y3; k00 = z[ 0] - z[-4]; y0 = z[ 0] + z[-4]; y2 = z[-2] + z[-6]; k22 = z[-2] - z[-6]; z[-0] = y0 + y2; // z0 + z4 + z2 + z6 z[-2] = y0 - y2; // z0 + z4 - z2 - z6 // done with y0,y2 k33 = z[-3] - z[-7]; z[-4] = k00 + k33; // z0 - z4 + z3 - z7 z[-6] = k00 - k33; // z0 - z4 - z3 + z7 // done with k33 k11 = z[-1] - z[-5]; y1 = z[-1] + z[-5]; y3 = z[-3] + z[-7]; z[-1] = y1 + y3; // z1 + z5 + z3 + z7 z[-3] = y1 - y3; // z1 + z5 - z3 - z7 z[-5] = k11 - k22; // z1 - z5 + z2 - z6 z[-7] = k11 + k22; // z1 - z5 - z2 + z6 } static void imdct_step3_inner_s_loop_ld654(int n, float *e, int i_off, float *A, int base_n) { int a_off = base_n >> 3; float A2 = A[0+a_off]; float *z = e + i_off; float *base = z - 16 * n; while (z > base) { float k00,k11; float l00,l11; k00 = z[-0] - z[ -8]; k11 = z[-1] - z[ -9]; l00 = z[-2] - z[-10]; l11 = z[-3] - z[-11]; z[ -0] = z[-0] + z[ -8]; z[ -1] = z[-1] + z[ -9]; z[ -2] = z[-2] + z[-10]; z[ -3] = z[-3] + z[-11]; z[ -8] = k00; z[ -9] = k11; z[-10] = (l00+l11) * A2; z[-11] = (l11-l00) * A2; k00 = z[ -4] - z[-12]; k11 = z[ -5] - z[-13]; l00 = z[ -6] - z[-14]; l11 = z[ -7] - z[-15]; z[ -4] = z[ -4] + z[-12]; z[ -5] = z[ -5] + z[-13]; z[ -6] = z[ -6] + z[-14]; z[ -7] = z[ -7] + z[-15]; z[-12] = k11; z[-13] = -k00; z[-14] = (l11-l00) * A2; z[-15] = (l00+l11) * -A2; iter_54(z); iter_54(z-8); z -= 16; } } static void inverse_mdct(float *buffer, int n, vorb *f, int blocktype) { int n2 = n >> 1, n4 = n >> 2, n8 = n >> 3, l; int ld; // @OPTIMIZE: reduce register pressure by using fewer variables? int save_point = temp_alloc_save(f); float *buf2 = (float *) temp_alloc(f, n2 * sizeof(*buf2)); float *u=NULL,*v=NULL; // twiddle factors float *A = f->A[blocktype]; // IMDCT algorithm from "The use of multirate filter banks for coding of high quality digital audio" // See notes about bugs in that paper in less-optimal implementation 'inverse_mdct_old' after this function. // kernel from paper // merged: // copy and reflect spectral data // step 0 // note that it turns out that the items added together during // this step are, in fact, being added to themselves (as reflected // by step 0). inexplicable inefficiency! this became obvious // once I combined the passes. // so there's a missing 'times 2' here (for adding X to itself). // this propagates through linearly to the end, where the numbers // are 1/2 too small, and need to be compensated for. { float *d,*e, *AA, *e_stop; d = &buf2[n2-2]; AA = A; e = &buffer[0]; e_stop = &buffer[n2]; while (e != e_stop) { d[1] = (e[0] * AA[0] - e[2]*AA[1]); d[0] = (e[0] * AA[1] + e[2]*AA[0]); d -= 2; AA += 2; e += 4; } e = &buffer[n2-3]; while (d >= buf2) { d[1] = (-e[2] * AA[0] - -e[0]*AA[1]); d[0] = (-e[2] * AA[1] + -e[0]*AA[0]); d -= 2; AA += 2; e -= 4; } } // now we use symbolic names for these, so that we can // possibly swap their meaning as we change which operations // are in place u = buffer; v = buf2; // step 2 (paper output is w, now u) // this could be in place, but the data ends up in the wrong // place... _somebody_'s got to swap it, so this is nominated { float *AA = &A[n2-8]; float *d0,*d1, *e0, *e1; e0 = &v[n4]; e1 = &v[0]; d0 = &u[n4]; d1 = &u[0]; while (AA >= A) { float v40_20, v41_21; v41_21 = e0[1] - e1[1]; v40_20 = e0[0] - e1[0]; d0[1] = e0[1] + e1[1]; d0[0] = e0[0] + e1[0]; d1[1] = v41_21*AA[4] - v40_20*AA[5]; d1[0] = v40_20*AA[4] + v41_21*AA[5]; v41_21 = e0[3] - e1[3]; v40_20 = e0[2] - e1[2]; d0[3] = e0[3] + e1[3]; d0[2] = e0[2] + e1[2]; d1[3] = v41_21*AA[0] - v40_20*AA[1]; d1[2] = v40_20*AA[0] + v41_21*AA[1]; AA -= 8; d0 += 4; d1 += 4; e0 += 4; e1 += 4; } } // step 3 ld = ilog(n) - 1; // ilog is off-by-one from normal definitions // optimized step 3: // the original step3 loop can be nested r inside s or s inside r; // it's written originally as s inside r, but this is dumb when r // iterates many times, and s few. So I have two copies of it and // switch between them halfway. // this is iteration 0 of step 3 imdct_step3_iter0_loop(n >> 4, u, n2-1-n4*0, -(n >> 3), A); imdct_step3_iter0_loop(n >> 4, u, n2-1-n4*1, -(n >> 3), A); // this is iteration 1 of step 3 imdct_step3_inner_r_loop(n >> 5, u, n2-1 - n8*0, -(n >> 4), A, 16); imdct_step3_inner_r_loop(n >> 5, u, n2-1 - n8*1, -(n >> 4), A, 16); imdct_step3_inner_r_loop(n >> 5, u, n2-1 - n8*2, -(n >> 4), A, 16); imdct_step3_inner_r_loop(n >> 5, u, n2-1 - n8*3, -(n >> 4), A, 16); l=2; for (; l < (ld-3)>>1; ++l) { int k0 = n >> (l+2), k0_2 = k0>>1; int lim = 1 << (l+1); int i; for (i=0; i < lim; ++i) imdct_step3_inner_r_loop(n >> (l+4), u, n2-1 - k0*i, -k0_2, A, 1 << (l+3)); } for (; l < ld-6; ++l) { int k0 = n >> (l+2), k1 = 1 << (l+3), k0_2 = k0>>1; int rlim = n >> (l+6), r; int lim = 1 << (l+1); int i_off; float *A0 = A; i_off = n2-1; for (r=rlim; r > 0; --r) { imdct_step3_inner_s_loop(lim, u, i_off, -k0_2, A0, k1, k0); A0 += k1*4; i_off -= 8; } } // iterations with count: // ld-6,-5,-4 all interleaved together // the big win comes from getting rid of needless flops // due to the constants on pass 5 & 4 being all 1 and 0; // combining them to be simultaneous to improve cache made little difference imdct_step3_inner_s_loop_ld654(n >> 5, u, n2-1, A, n); // output is u // step 4, 5, and 6 // cannot be in-place because of step 5 { uint16 *bitrev = f->bit_reverse[blocktype]; // weirdly, I'd have thought reading sequentially and writing // erratically would have been better than vice-versa, but in // fact that's not what my testing showed. (That is, with // j = bitreverse(i), do you read i and write j, or read j and write i.) float *d0 = &v[n4-4]; float *d1 = &v[n2-4]; while (d0 >= v) { int k4; k4 = bitrev[0]; d1[3] = u[k4+0]; d1[2] = u[k4+1]; d0[3] = u[k4+2]; d0[2] = u[k4+3]; k4 = bitrev[1]; d1[1] = u[k4+0]; d1[0] = u[k4+1]; d0[1] = u[k4+2]; d0[0] = u[k4+3]; d0 -= 4; d1 -= 4; bitrev += 2; } } // (paper output is u, now v) // data must be in buf2 assert(v == buf2); // step 7 (paper output is v, now v) // this is now in place { float *C = f->C[blocktype]; float *d, *e; d = v; e = v + n2 - 4; while (d < e) { float a02,a11,b0,b1,b2,b3; a02 = d[0] - e[2]; a11 = d[1] + e[3]; b0 = C[1]*a02 + C[0]*a11; b1 = C[1]*a11 - C[0]*a02; b2 = d[0] + e[ 2]; b3 = d[1] - e[ 3]; d[0] = b2 + b0; d[1] = b3 + b1; e[2] = b2 - b0; e[3] = b1 - b3; a02 = d[2] - e[0]; a11 = d[3] + e[1]; b0 = C[3]*a02 + C[2]*a11; b1 = C[3]*a11 - C[2]*a02; b2 = d[2] + e[ 0]; b3 = d[3] - e[ 1]; d[2] = b2 + b0; d[3] = b3 + b1; e[0] = b2 - b0; e[1] = b1 - b3; C += 4; d += 4; e -= 4; } } // data must be in buf2 // step 8+decode (paper output is X, now buffer) // this generates pairs of data a la 8 and pushes them directly through // the decode kernel (pushing rather than pulling) to avoid having // to make another pass later // this cannot POSSIBLY be in place, so we refer to the buffers directly { float *d0,*d1,*d2,*d3; float *B = f->B[blocktype] + n2 - 8; float *e = buf2 + n2 - 8; d0 = &buffer[0]; d1 = &buffer[n2-4]; d2 = &buffer[n2]; d3 = &buffer[n-4]; while (e >= v) { float p0,p1,p2,p3; p3 = e[6]*B[7] - e[7]*B[6]; p2 = -e[6]*B[6] - e[7]*B[7]; d0[0] = p3; d1[3] = - p3; d2[0] = p2; d3[3] = p2; p1 = e[4]*B[5] - e[5]*B[4]; p0 = -e[4]*B[4] - e[5]*B[5]; d0[1] = p1; d1[2] = - p1; d2[1] = p0; d3[2] = p0; p3 = e[2]*B[3] - e[3]*B[2]; p2 = -e[2]*B[2] - e[3]*B[3]; d0[2] = p3; d1[1] = - p3; d2[2] = p2; d3[1] = p2; p1 = e[0]*B[1] - e[1]*B[0]; p0 = -e[0]*B[0] - e[1]*B[1]; d0[3] = p1; d1[0] = - p1; d2[3] = p0; d3[0] = p0; B -= 8; e -= 8; d0 += 4; d2 += 4; d1 -= 4; d3 -= 4; } } temp_free(f,buf2); temp_alloc_restore(f,save_point); } #if 0 // this is the original version of the above code, if you want to optimize it from scratch void inverse_mdct_naive(float *buffer, int n) { float s; float A[1 << 12], B[1 << 12], C[1 << 11]; int i,k,k2,k4, n2 = n >> 1, n4 = n >> 2, n8 = n >> 3, l; int n3_4 = n - n4, ld; // how can they claim this only uses N words?! // oh, because they're only used sparsely, whoops float u[1 << 13], X[1 << 13], v[1 << 13], w[1 << 13]; // set up twiddle factors for (k=k2=0; k < n4; ++k,k2+=2) { A[k2 ] = (float) cos(4*k*M_PI/n); A[k2+1] = (float) -sin(4*k*M_PI/n); B[k2 ] = (float) cos((k2+1)*M_PI/n/2); B[k2+1] = (float) sin((k2+1)*M_PI/n/2); } for (k=k2=0; k < n8; ++k,k2+=2) { C[k2 ] = (float) cos(2*(k2+1)*M_PI/n); C[k2+1] = (float) -sin(2*(k2+1)*M_PI/n); } // IMDCT algorithm from "The use of multirate filter banks for coding of high quality digital audio" // Note there are bugs in that pseudocode, presumably due to them attempting // to rename the arrays nicely rather than representing the way their actual // implementation bounces buffers back and forth. As a result, even in the // "some formulars corrected" version, a direct implementation fails. These // are noted below as "paper bug". // copy and reflect spectral data for (k=0; k < n2; ++k) u[k] = buffer[k]; for ( ; k < n ; ++k) u[k] = -buffer[n - k - 1]; // kernel from paper // step 1 for (k=k2=k4=0; k < n4; k+=1, k2+=2, k4+=4) { v[n-k4-1] = (u[k4] - u[n-k4-1]) * A[k2] - (u[k4+2] - u[n-k4-3])*A[k2+1]; v[n-k4-3] = (u[k4] - u[n-k4-1]) * A[k2+1] + (u[k4+2] - u[n-k4-3])*A[k2]; } // step 2 for (k=k4=0; k < n8; k+=1, k4+=4) { w[n2+3+k4] = v[n2+3+k4] + v[k4+3]; w[n2+1+k4] = v[n2+1+k4] + v[k4+1]; w[k4+3] = (v[n2+3+k4] - v[k4+3])*A[n2-4-k4] - (v[n2+1+k4]-v[k4+1])*A[n2-3-k4]; w[k4+1] = (v[n2+1+k4] - v[k4+1])*A[n2-4-k4] + (v[n2+3+k4]-v[k4+3])*A[n2-3-k4]; } // step 3 ld = ilog(n) - 1; // ilog is off-by-one from normal definitions for (l=0; l < ld-3; ++l) { int k0 = n >> (l+2), k1 = 1 << (l+3); int rlim = n >> (l+4), r4, r; int s2lim = 1 << (l+2), s2; for (r=r4=0; r < rlim; r4+=4,++r) { for (s2=0; s2 < s2lim; s2+=2) { u[n-1-k0*s2-r4] = w[n-1-k0*s2-r4] + w[n-1-k0*(s2+1)-r4]; u[n-3-k0*s2-r4] = w[n-3-k0*s2-r4] + w[n-3-k0*(s2+1)-r4]; u[n-1-k0*(s2+1)-r4] = (w[n-1-k0*s2-r4] - w[n-1-k0*(s2+1)-r4]) * A[r*k1] - (w[n-3-k0*s2-r4] - w[n-3-k0*(s2+1)-r4]) * A[r*k1+1]; u[n-3-k0*(s2+1)-r4] = (w[n-3-k0*s2-r4] - w[n-3-k0*(s2+1)-r4]) * A[r*k1] + (w[n-1-k0*s2-r4] - w[n-1-k0*(s2+1)-r4]) * A[r*k1+1]; } } if (l+1 < ld-3) { // paper bug: ping-ponging of u&w here is omitted memcpy(w, u, sizeof(u)); } } // step 4 for (i=0; i < n8; ++i) { int j = bit_reverse(i) >> (32-ld+3); assert(j < n8); if (i == j) { // paper bug: original code probably swapped in place; if copying, // need to directly copy in this case int i8 = i << 3; v[i8+1] = u[i8+1]; v[i8+3] = u[i8+3]; v[i8+5] = u[i8+5]; v[i8+7] = u[i8+7]; } else if (i < j) { int i8 = i << 3, j8 = j << 3; v[j8+1] = u[i8+1], v[i8+1] = u[j8 + 1]; v[j8+3] = u[i8+3], v[i8+3] = u[j8 + 3]; v[j8+5] = u[i8+5], v[i8+5] = u[j8 + 5]; v[j8+7] = u[i8+7], v[i8+7] = u[j8 + 7]; } } // step 5 for (k=0; k < n2; ++k) { w[k] = v[k*2+1]; } // step 6 for (k=k2=k4=0; k < n8; ++k, k2 += 2, k4 += 4) { u[n-1-k2] = w[k4]; u[n-2-k2] = w[k4+1]; u[n3_4 - 1 - k2] = w[k4+2]; u[n3_4 - 2 - k2] = w[k4+3]; } // step 7 for (k=k2=0; k < n8; ++k, k2 += 2) { v[n2 + k2 ] = ( u[n2 + k2] + u[n-2-k2] + C[k2+1]*(u[n2+k2]-u[n-2-k2]) + C[k2]*(u[n2+k2+1]+u[n-2-k2+1]))/2; v[n-2 - k2] = ( u[n2 + k2] + u[n-2-k2] - C[k2+1]*(u[n2+k2]-u[n-2-k2]) - C[k2]*(u[n2+k2+1]+u[n-2-k2+1]))/2; v[n2+1+ k2] = ( u[n2+1+k2] - u[n-1-k2] + C[k2+1]*(u[n2+1+k2]+u[n-1-k2]) - C[k2]*(u[n2+k2]-u[n-2-k2]))/2; v[n-1 - k2] = (-u[n2+1+k2] + u[n-1-k2] + C[k2+1]*(u[n2+1+k2]+u[n-1-k2]) - C[k2]*(u[n2+k2]-u[n-2-k2]))/2; } // step 8 for (k=k2=0; k < n4; ++k,k2 += 2) { X[k] = v[k2+n2]*B[k2 ] + v[k2+1+n2]*B[k2+1]; X[n2-1-k] = v[k2+n2]*B[k2+1] - v[k2+1+n2]*B[k2 ]; } // decode kernel to output // determined the following value experimentally // (by first figuring out what made inverse_mdct_slow work); then matching that here // (probably vorbis encoder premultiplies by n or n/2, to save it on the decoder?) s = 0.5; // theoretically would be n4 // [[[ note! the s value of 0.5 is compensated for by the B[] in the current code, // so it needs to use the "old" B values to behave correctly, or else // set s to 1.0 ]]] for (i=0; i < n4 ; ++i) buffer[i] = s * X[i+n4]; for ( ; i < n3_4; ++i) buffer[i] = -s * X[n3_4 - i - 1]; for ( ; i < n ; ++i) buffer[i] = -s * X[i - n3_4]; } #endif static float *get_window(vorb *f, int len) { len <<= 1; if (len == f->blocksize_0) return f->window[0]; if (len == f->blocksize_1) return f->window[1]; return NULL; } #ifndef STB_VORBIS_NO_DEFER_FLOOR typedef int16 YTYPE; #else typedef int YTYPE; #endif static int do_floor(vorb *f, Mapping *map, int i, int n, float *target, YTYPE *finalY, uint8 *step2_flag) { int n2 = n >> 1; int s = map->chan[i].mux, floor; floor = map->submap_floor[s]; if (f->floor_types[floor] == 0) { return error(f, VORBIS_invalid_stream); } else { Floor1 *g = &f->floor_config[floor].floor1; int j,q; int lx = 0, ly = finalY[0] * g->floor1_multiplier; for (q=1; q < g->values; ++q) { j = g->sorted_order[q]; #ifndef STB_VORBIS_NO_DEFER_FLOOR STBV_NOTUSED(step2_flag); if (finalY[j] >= 0) #else if (step2_flag[j]) #endif { int hy = finalY[j] * g->floor1_multiplier; int hx = g->Xlist[j]; if (lx != hx) draw_line(target, lx,ly, hx,hy, n2); CHECK(f); lx = hx, ly = hy; } } if (lx < n2) { // optimization of: draw_line(target, lx,ly, n,ly, n2); for (j=lx; j < n2; ++j) LINE_OP(target[j], inverse_db_table[ly]); CHECK(f); } } return TRUE; } // The meaning of "left" and "right" // // For a given frame: // we compute samples from 0..n // window_center is n/2 // we'll window and mix the samples from left_start to left_end with data from the previous frame // all of the samples from left_end to right_start can be output without mixing; however, // this interval is 0-length except when transitioning between short and long frames // all of the samples from right_start to right_end need to be mixed with the next frame, // which we don't have, so those get saved in a buffer // frame N's right_end-right_start, the number of samples to mix with the next frame, // has to be the same as frame N+1's left_end-left_start (which they are by // construction) static int vorbis_decode_initial(vorb *f, int *p_left_start, int *p_left_end, int *p_right_start, int *p_right_end, int *mode) { Mode *m; int i, n, prev, next, window_center; f->channel_buffer_start = f->channel_buffer_end = 0; retry: if (f->eof) return FALSE; if (!maybe_start_packet(f)) return FALSE; // check packet type if (get_bits(f,1) != 0) { if (IS_PUSH_MODE(f)) return error(f,VORBIS_bad_packet_type); while (EOP != get8_packet(f)); goto retry; } if (f->alloc.alloc_buffer) assert(f->alloc.alloc_buffer_length_in_bytes == f->temp_offset); i = get_bits(f, ilog(f->mode_count-1)); if (i == EOP) return FALSE; if (i >= f->mode_count) return FALSE; *mode = i; m = f->mode_config + i; if (m->blockflag) { n = f->blocksize_1; prev = get_bits(f,1); next = get_bits(f,1); } else { prev = next = 0; n = f->blocksize_0; } // WINDOWING window_center = n >> 1; if (m->blockflag && !prev) { *p_left_start = (n - f->blocksize_0) >> 2; *p_left_end = (n + f->blocksize_0) >> 2; } else { *p_left_start = 0; *p_left_end = window_center; } if (m->blockflag && !next) { *p_right_start = (n*3 - f->blocksize_0) >> 2; *p_right_end = (n*3 + f->blocksize_0) >> 2; } else { *p_right_start = window_center; *p_right_end = n; } return TRUE; } static int vorbis_decode_packet_rest(vorb *f, int *len, Mode *m, int left_start, int left_end, int right_start, int right_end, int *p_left) { Mapping *map; int i,j,k,n,n2; int zero_channel[256]; int really_zero_channel[256]; // WINDOWING STBV_NOTUSED(left_end); n = f->blocksize[m->blockflag]; map = &f->mapping[m->mapping]; // FLOORS n2 = n >> 1; CHECK(f); for (i=0; i < f->channels; ++i) { int s = map->chan[i].mux, floor; zero_channel[i] = FALSE; floor = map->submap_floor[s]; if (f->floor_types[floor] == 0) { return error(f, VORBIS_invalid_stream); } else { Floor1 *g = &f->floor_config[floor].floor1; if (get_bits(f, 1)) { short *finalY; uint8 step2_flag[256]; static int range_list[4] = { 256, 128, 86, 64 }; int range = range_list[g->floor1_multiplier-1]; int offset = 2; finalY = f->finalY[i]; finalY[0] = get_bits(f, ilog(range)-1); finalY[1] = get_bits(f, ilog(range)-1); for (j=0; j < g->partitions; ++j) { int pclass = g->partition_class_list[j]; int cdim = g->class_dimensions[pclass]; int cbits = g->class_subclasses[pclass]; int csub = (1 << cbits)-1; int cval = 0; if (cbits) { Codebook *c = f->codebooks + g->class_masterbooks[pclass]; DECODE(cval,f,c); } for (k=0; k < cdim; ++k) { int book = g->subclass_books[pclass][cval & csub]; cval = cval >> cbits; if (book >= 0) { int temp; Codebook *c = f->codebooks + book; DECODE(temp,f,c); finalY[offset++] = temp; } else finalY[offset++] = 0; } } if (f->valid_bits == INVALID_BITS) goto error; // behavior according to spec step2_flag[0] = step2_flag[1] = 1; for (j=2; j < g->values; ++j) { int low, high, pred, highroom, lowroom, room, val; low = g->neighbors[j][0]; high = g->neighbors[j][1]; //neighbors(g->Xlist, j, &low, &high); pred = predict_point(g->Xlist[j], g->Xlist[low], g->Xlist[high], finalY[low], finalY[high]); val = finalY[j]; highroom = range - pred; lowroom = pred; if (highroom < lowroom) room = highroom * 2; else room = lowroom * 2; if (val) { step2_flag[low] = step2_flag[high] = 1; step2_flag[j] = 1; if (val >= room) if (highroom > lowroom) finalY[j] = val - lowroom + pred; else finalY[j] = pred - val + highroom - 1; else if (val & 1) finalY[j] = pred - ((val+1)>>1); else finalY[j] = pred + (val>>1); } else { step2_flag[j] = 0; finalY[j] = pred; } } #ifdef STB_VORBIS_NO_DEFER_FLOOR do_floor(f, map, i, n, f->floor_buffers[i], finalY, step2_flag); #else // defer final floor computation until _after_ residue for (j=0; j < g->values; ++j) { if (!step2_flag[j]) finalY[j] = -1; } #endif } else { error: zero_channel[i] = TRUE; } // So we just defer everything else to later // at this point we've decoded the floor into buffer } } CHECK(f); // at this point we've decoded all floors if (f->alloc.alloc_buffer) assert(f->alloc.alloc_buffer_length_in_bytes == f->temp_offset); // re-enable coupled channels if necessary memcpy(really_zero_channel, zero_channel, sizeof(really_zero_channel[0]) * f->channels); for (i=0; i < map->coupling_steps; ++i) if (!zero_channel[map->chan[i].magnitude] || !zero_channel[map->chan[i].angle]) { zero_channel[map->chan[i].magnitude] = zero_channel[map->chan[i].angle] = FALSE; } CHECK(f); // RESIDUE DECODE for (i=0; i < map->submaps; ++i) { float *residue_buffers[STB_VORBIS_MAX_CHANNELS]; int r; uint8 do_not_decode[256]; int ch = 0; for (j=0; j < f->channels; ++j) { if (map->chan[j].mux == i) { if (zero_channel[j]) { do_not_decode[ch] = TRUE; residue_buffers[ch] = NULL; } else { do_not_decode[ch] = FALSE; residue_buffers[ch] = f->channel_buffers[j]; } ++ch; } } r = map->submap_residue[i]; decode_residue(f, residue_buffers, ch, n2, r, do_not_decode); } if (f->alloc.alloc_buffer) assert(f->alloc.alloc_buffer_length_in_bytes == f->temp_offset); CHECK(f); // INVERSE COUPLING for (i = map->coupling_steps-1; i >= 0; --i) { int n2 = n >> 1; float *m = f->channel_buffers[map->chan[i].magnitude]; float *a = f->channel_buffers[map->chan[i].angle ]; for (j=0; j < n2; ++j) { float a2,m2; if (m[j] > 0) if (a[j] > 0) m2 = m[j], a2 = m[j] - a[j]; else a2 = m[j], m2 = m[j] + a[j]; else if (a[j] > 0) m2 = m[j], a2 = m[j] + a[j]; else a2 = m[j], m2 = m[j] - a[j]; m[j] = m2; a[j] = a2; } } CHECK(f); // finish decoding the floors #ifndef STB_VORBIS_NO_DEFER_FLOOR for (i=0; i < f->channels; ++i) { if (really_zero_channel[i]) { memset(f->channel_buffers[i], 0, sizeof(*f->channel_buffers[i]) * n2); } else { do_floor(f, map, i, n, f->channel_buffers[i], f->finalY[i], NULL); } } #else for (i=0; i < f->channels; ++i) { if (really_zero_channel[i]) { memset(f->channel_buffers[i], 0, sizeof(*f->channel_buffers[i]) * n2); } else { for (j=0; j < n2; ++j) f->channel_buffers[i][j] *= f->floor_buffers[i][j]; } } #endif // INVERSE MDCT CHECK(f); for (i=0; i < f->channels; ++i) inverse_mdct(f->channel_buffers[i], n, f, m->blockflag); CHECK(f); // this shouldn't be necessary, unless we exited on an error // and want to flush to get to the next packet flush_packet(f); if (f->first_decode) { // assume we start so first non-discarded sample is sample 0 // this isn't to spec, but spec would require us to read ahead // and decode the size of all current frames--could be done, // but presumably it's not a commonly used feature f->current_loc = 0u - n2; // start of first frame is positioned for discard (NB this is an intentional unsigned overflow/wrap-around) // we might have to discard samples "from" the next frame too, // if we're lapping a large block then a small at the start? f->discard_samples_deferred = n - right_end; f->current_loc_valid = TRUE; f->first_decode = FALSE; } else if (f->discard_samples_deferred) { if (f->discard_samples_deferred >= right_start - left_start) { f->discard_samples_deferred -= (right_start - left_start); left_start = right_start; *p_left = left_start; } else { left_start += f->discard_samples_deferred; *p_left = left_start; f->discard_samples_deferred = 0; } } else if (f->previous_length == 0 && f->current_loc_valid) { // we're recovering from a seek... that means we're going to discard // the samples from this packet even though we know our position from // the last page header, so we need to update the position based on // the discarded samples here // but wait, the code below is going to add this in itself even // on a discard, so we don't need to do it here... } // check if we have ogg information about the sample # for this packet if (f->last_seg_which == f->end_seg_with_known_loc) { // if we have a valid current loc, and this is final: if (f->current_loc_valid && (f->page_flag & PAGEFLAG_last_page)) { uint32 current_end = f->known_loc_for_packet; // then let's infer the size of the (probably) short final frame if (current_end < f->current_loc + (right_end-left_start)) { if (current_end < f->current_loc) { // negative truncation, that's impossible! *len = 0; } else { *len = current_end - f->current_loc; } *len += left_start; // this doesn't seem right, but has no ill effect on my test files if (*len > right_end) *len = right_end; // this should never happen f->current_loc += *len; return TRUE; } } // otherwise, just set our sample loc // guess that the ogg granule pos refers to the _middle_ of the // last frame? // set f->current_loc to the position of left_start f->current_loc = f->known_loc_for_packet - (n2-left_start); f->current_loc_valid = TRUE; } if (f->current_loc_valid) f->current_loc += (right_start - left_start); if (f->alloc.alloc_buffer) assert(f->alloc.alloc_buffer_length_in_bytes == f->temp_offset); *len = right_end; // ignore samples after the window goes to 0 CHECK(f); return TRUE; } static int vorbis_decode_packet(vorb *f, int *len, int *p_left, int *p_right) { int mode, left_end, right_end; if (!vorbis_decode_initial(f, p_left, &left_end, p_right, &right_end, &mode)) return 0; return vorbis_decode_packet_rest(f, len, f->mode_config + mode, *p_left, left_end, *p_right, right_end, p_left); } static int vorbis_finish_frame(stb_vorbis *f, int len, int left, int right) { int prev,i,j; // we use right&left (the start of the right- and left-window sin()-regions) // to determine how much to return, rather than inferring from the rules // (same result, clearer code); 'left' indicates where our sin() window // starts, therefore where the previous window's right edge starts, and // therefore where to start mixing from the previous buffer. 'right' // indicates where our sin() ending-window starts, therefore that's where // we start saving, and where our returned-data ends. // mixin from previous window if (f->previous_length) { int i,j, n = f->previous_length; float *w = get_window(f, n); if (w == NULL) return 0; for (i=0; i < f->channels; ++i) { for (j=0; j < n; ++j) f->channel_buffers[i][left+j] = f->channel_buffers[i][left+j]*w[ j] + f->previous_window[i][ j]*w[n-1-j]; } } prev = f->previous_length; // last half of this data becomes previous window f->previous_length = len - right; // @OPTIMIZE: could avoid this copy by double-buffering the // output (flipping previous_window with channel_buffers), but // then previous_window would have to be 2x as large, and // channel_buffers couldn't be temp mem (although they're NOT // currently temp mem, they could be (unless we want to level // performance by spreading out the computation)) for (i=0; i < f->channels; ++i) for (j=0; right+j < len; ++j) f->previous_window[i][j] = f->channel_buffers[i][right+j]; if (!prev) // there was no previous packet, so this data isn't valid... // this isn't entirely true, only the would-have-overlapped data // isn't valid, but this seems to be what the spec requires return 0; // truncate a short frame if (len < right) right = len; f->samples_output += right-left; return right - left; } static int vorbis_pump_first_frame(stb_vorbis *f) { int len, right, left, res; res = vorbis_decode_packet(f, &len, &left, &right); if (res) vorbis_finish_frame(f, len, left, right); return res; } #ifndef STB_VORBIS_NO_PUSHDATA_API static int is_whole_packet_present(stb_vorbis *f) { // make sure that we have the packet available before continuing... // this requires a full ogg parse, but we know we can fetch from f->stream // instead of coding this out explicitly, we could save the current read state, // read the next packet with get8() until end-of-packet, check f->eof, then // reset the state? but that would be slower, esp. since we'd have over 256 bytes // of state to restore (primarily the page segment table) int s = f->next_seg, first = TRUE; uint8 *p = f->stream; if (s != -1) { // if we're not starting the packet with a 'continue on next page' flag for (; s < f->segment_count; ++s) { p += f->segments[s]; if (f->segments[s] < 255) // stop at first short segment break; } // either this continues, or it ends it... if (s == f->segment_count) s = -1; // set 'crosses page' flag if (p > f->stream_end) return error(f, VORBIS_need_more_data); first = FALSE; } for (; s == -1;) { uint8 *q; int n; // check that we have the page header ready if (p + 26 >= f->stream_end) return error(f, VORBIS_need_more_data); // validate the page if (memcmp(p, ogg_page_header, 4)) return error(f, VORBIS_invalid_stream); if (p[4] != 0) return error(f, VORBIS_invalid_stream); if (first) { // the first segment must NOT have 'continued_packet', later ones MUST if (f->previous_length) if ((p[5] & PAGEFLAG_continued_packet)) return error(f, VORBIS_invalid_stream); // if no previous length, we're resynching, so we can come in on a continued-packet, // which we'll just drop } else { if (!(p[5] & PAGEFLAG_continued_packet)) return error(f, VORBIS_invalid_stream); } n = p[26]; // segment counts q = p+27; // q points to segment table p = q + n; // advance past header // make sure we've read the segment table if (p > f->stream_end) return error(f, VORBIS_need_more_data); for (s=0; s < n; ++s) { p += q[s]; if (q[s] < 255) break; } if (s == n) s = -1; // set 'crosses page' flag if (p > f->stream_end) return error(f, VORBIS_need_more_data); first = FALSE; } return TRUE; } #endif // !STB_VORBIS_NO_PUSHDATA_API static int start_decoder(vorb *f) { uint8 header[6], x,y; int len,i,j,k, max_submaps = 0; int longest_floorlist=0; // first page, first packet f->first_decode = TRUE; if (!start_page(f)) return FALSE; // validate page flag if (!(f->page_flag & PAGEFLAG_first_page)) return error(f, VORBIS_invalid_first_page); if (f->page_flag & PAGEFLAG_last_page) return error(f, VORBIS_invalid_first_page); if (f->page_flag & PAGEFLAG_continued_packet) return error(f, VORBIS_invalid_first_page); // check for expected packet length if (f->segment_count != 1) return error(f, VORBIS_invalid_first_page); if (f->segments[0] != 30) { // check for the Ogg skeleton fishead identifying header to refine our error if (f->segments[0] == 64 && getn(f, header, 6) && header[0] == 'f' && header[1] == 'i' && header[2] == 's' && header[3] == 'h' && header[4] == 'e' && header[5] == 'a' && get8(f) == 'd' && get8(f) == '\0') return error(f, VORBIS_ogg_skeleton_not_supported); else return error(f, VORBIS_invalid_first_page); } // read packet // check packet header if (get8(f) != VORBIS_packet_id) return error(f, VORBIS_invalid_first_page); if (!getn(f, header, 6)) return error(f, VORBIS_unexpected_eof); if (!vorbis_validate(header)) return error(f, VORBIS_invalid_first_page); // vorbis_version if (get32(f) != 0) return error(f, VORBIS_invalid_first_page); f->channels = get8(f); if (!f->channels) return error(f, VORBIS_invalid_first_page); if (f->channels > STB_VORBIS_MAX_CHANNELS) return error(f, VORBIS_too_many_channels); f->sample_rate = get32(f); if (!f->sample_rate) return error(f, VORBIS_invalid_first_page); get32(f); // bitrate_maximum get32(f); // bitrate_nominal get32(f); // bitrate_minimum x = get8(f); { int log0,log1; log0 = x & 15; log1 = x >> 4; f->blocksize_0 = 1 << log0; f->blocksize_1 = 1 << log1; if (log0 < 6 || log0 > 13) return error(f, VORBIS_invalid_setup); if (log1 < 6 || log1 > 13) return error(f, VORBIS_invalid_setup); if (log0 > log1) return error(f, VORBIS_invalid_setup); } // framing_flag x = get8(f); if (!(x & 1)) return error(f, VORBIS_invalid_first_page); // second packet! if (!start_page(f)) return FALSE; if (!start_packet(f)) return FALSE; if (!next_segment(f)) return FALSE; if (get8_packet(f) != VORBIS_packet_comment) return error(f, VORBIS_invalid_setup); for (i=0; i < 6; ++i) header[i] = get8_packet(f); if (!vorbis_validate(header)) return error(f, VORBIS_invalid_setup); //file vendor len = get32_packet(f); f->vendor = (char*)setup_malloc(f, sizeof(char) * (len+1)); if (f->vendor == NULL) return error(f, VORBIS_outofmem); for(i=0; i < len; ++i) { f->vendor[i] = get8_packet(f); } f->vendor[len] = (char)'\0'; //user comments f->comment_list_length = get32_packet(f); f->comment_list = NULL; if (f->comment_list_length > 0) { f->comment_list = (char**) setup_malloc(f, sizeof(char*) * (f->comment_list_length)); if (f->comment_list == NULL) return error(f, VORBIS_outofmem); } for(i=0; i < f->comment_list_length; ++i) { len = get32_packet(f); f->comment_list[i] = (char*)setup_malloc(f, sizeof(char) * (len+1)); if (f->comment_list[i] == NULL) return error(f, VORBIS_outofmem); for(j=0; j < len; ++j) { f->comment_list[i][j] = get8_packet(f); } f->comment_list[i][len] = (char)'\0'; } // framing_flag x = get8_packet(f); if (!(x & 1)) return error(f, VORBIS_invalid_setup); skip(f, f->bytes_in_seg); f->bytes_in_seg = 0; do { len = next_segment(f); skip(f, len); f->bytes_in_seg = 0; } while (len); // third packet! if (!start_packet(f)) return FALSE; #ifndef STB_VORBIS_NO_PUSHDATA_API if (IS_PUSH_MODE(f)) { if (!is_whole_packet_present(f)) { // convert error in ogg header to write type if (f->error == VORBIS_invalid_stream) f->error = VORBIS_invalid_setup; return FALSE; } } #endif crc32_init(); // always init it, to avoid multithread race conditions if (get8_packet(f) != VORBIS_packet_setup) return error(f, VORBIS_invalid_setup); for (i=0; i < 6; ++i) header[i] = get8_packet(f); if (!vorbis_validate(header)) return error(f, VORBIS_invalid_setup); // codebooks f->codebook_count = get_bits(f,8) + 1; f->codebooks = (Codebook *) setup_malloc(f, sizeof(*f->codebooks) * f->codebook_count); if (f->codebooks == NULL) return error(f, VORBIS_outofmem); memset(f->codebooks, 0, sizeof(*f->codebooks) * f->codebook_count); for (i=0; i < f->codebook_count; ++i) { uint32 *values; int ordered, sorted_count; int total=0; uint8 *lengths; Codebook *c = f->codebooks+i; CHECK(f); x = get_bits(f, 8); if (x != 0x42) return error(f, VORBIS_invalid_setup); x = get_bits(f, 8); if (x != 0x43) return error(f, VORBIS_invalid_setup); x = get_bits(f, 8); if (x != 0x56) return error(f, VORBIS_invalid_setup); x = get_bits(f, 8); c->dimensions = (get_bits(f, 8)<<8) + x; x = get_bits(f, 8); y = get_bits(f, 8); c->entries = (get_bits(f, 8)<<16) + (y<<8) + x; ordered = get_bits(f,1); c->sparse = ordered ? 0 : get_bits(f,1); if (c->dimensions == 0 && c->entries != 0) return error(f, VORBIS_invalid_setup); if (c->sparse) lengths = (uint8 *) setup_temp_malloc(f, c->entries); else lengths = c->codeword_lengths = (uint8 *) setup_malloc(f, c->entries); if (!lengths) return error(f, VORBIS_outofmem); if (ordered) { int current_entry = 0; int current_length = get_bits(f,5) + 1; while (current_entry < c->entries) { int limit = c->entries - current_entry; int n = get_bits(f, ilog(limit)); if (current_length >= 32) return error(f, VORBIS_invalid_setup); if (current_entry + n > (int) c->entries) { return error(f, VORBIS_invalid_setup); } memset(lengths + current_entry, current_length, n); current_entry += n; ++current_length; } } else { for (j=0; j < c->entries; ++j) { int present = c->sparse ? get_bits(f,1) : 1; if (present) { lengths[j] = get_bits(f, 5) + 1; ++total; if (lengths[j] == 32) return error(f, VORBIS_invalid_setup); } else { lengths[j] = NO_CODE; } } } if (c->sparse && total >= c->entries >> 2) { // convert sparse items to non-sparse! if (c->entries > (int) f->setup_temp_memory_required) f->setup_temp_memory_required = c->entries; c->codeword_lengths = (uint8 *) setup_malloc(f, c->entries); if (c->codeword_lengths == NULL) return error(f, VORBIS_outofmem); memcpy(c->codeword_lengths, lengths, c->entries); setup_temp_free(f, lengths, c->entries); // note this is only safe if there have been no intervening temp mallocs! lengths = c->codeword_lengths; c->sparse = 0; } // compute the size of the sorted tables if (c->sparse) { sorted_count = total; } else { sorted_count = 0; #ifndef STB_VORBIS_NO_HUFFMAN_BINARY_SEARCH for (j=0; j < c->entries; ++j) if (lengths[j] > STB_VORBIS_FAST_HUFFMAN_LENGTH && lengths[j] != NO_CODE) ++sorted_count; #endif } c->sorted_entries = sorted_count; values = NULL; CHECK(f); if (!c->sparse) { c->codewords = (uint32 *) setup_malloc(f, sizeof(c->codewords[0]) * c->entries); if (!c->codewords) return error(f, VORBIS_outofmem); } else { unsigned int size; if (c->sorted_entries) { c->codeword_lengths = (uint8 *) setup_malloc(f, c->sorted_entries); if (!c->codeword_lengths) return error(f, VORBIS_outofmem); c->codewords = (uint32 *) setup_temp_malloc(f, sizeof(*c->codewords) * c->sorted_entries); if (!c->codewords) return error(f, VORBIS_outofmem); values = (uint32 *) setup_temp_malloc(f, sizeof(*values) * c->sorted_entries); if (!values) return error(f, VORBIS_outofmem); } size = c->entries + (sizeof(*c->codewords) + sizeof(*values)) * c->sorted_entries; if (size > f->setup_temp_memory_required) f->setup_temp_memory_required = size; } if (!compute_codewords(c, lengths, c->entries, values)) { if (c->sparse) setup_temp_free(f, values, 0); return error(f, VORBIS_invalid_setup); } if (c->sorted_entries) { // allocate an extra slot for sentinels c->sorted_codewords = (uint32 *) setup_malloc(f, sizeof(*c->sorted_codewords) * (c->sorted_entries+1)); if (c->sorted_codewords == NULL) return error(f, VORBIS_outofmem); // allocate an extra slot at the front so that c->sorted_values[-1] is defined // so that we can catch that case without an extra if c->sorted_values = ( int *) setup_malloc(f, sizeof(*c->sorted_values ) * (c->sorted_entries+1)); if (c->sorted_values == NULL) return error(f, VORBIS_outofmem); ++c->sorted_values; c->sorted_values[-1] = -1; compute_sorted_huffman(c, lengths, values); } if (c->sparse) { setup_temp_free(f, values, sizeof(*values)*c->sorted_entries); setup_temp_free(f, c->codewords, sizeof(*c->codewords)*c->sorted_entries); setup_temp_free(f, lengths, c->entries); c->codewords = NULL; } compute_accelerated_huffman(c); CHECK(f); c->lookup_type = get_bits(f, 4); if (c->lookup_type > 2) return error(f, VORBIS_invalid_setup); if (c->lookup_type > 0) { uint16 *mults; c->minimum_value = float32_unpack(get_bits(f, 32)); c->delta_value = float32_unpack(get_bits(f, 32)); c->value_bits = get_bits(f, 4)+1; c->sequence_p = get_bits(f,1); if (c->lookup_type == 1) { int values = lookup1_values(c->entries, c->dimensions); if (values < 0) return error(f, VORBIS_invalid_setup); c->lookup_values = (uint32) values; } else { c->lookup_values = c->entries * c->dimensions; } if (c->lookup_values == 0) return error(f, VORBIS_invalid_setup); mults = (uint16 *) setup_temp_malloc(f, sizeof(mults[0]) * c->lookup_values); if (mults == NULL) return error(f, VORBIS_outofmem); for (j=0; j < (int) c->lookup_values; ++j) { int q = get_bits(f, c->value_bits); if (q == EOP) { setup_temp_free(f,mults,sizeof(mults[0])*c->lookup_values); return error(f, VORBIS_invalid_setup); } mults[j] = q; } #ifndef STB_VORBIS_DIVIDES_IN_CODEBOOK if (c->lookup_type == 1) { int len, sparse = c->sparse; float last=0; // pre-expand the lookup1-style multiplicands, to avoid a divide in the inner loop if (sparse) { if (c->sorted_entries == 0) goto skip; c->multiplicands = (codetype *) setup_malloc(f, sizeof(c->multiplicands[0]) * c->sorted_entries * c->dimensions); } else c->multiplicands = (codetype *) setup_malloc(f, sizeof(c->multiplicands[0]) * c->entries * c->dimensions); if (c->multiplicands == NULL) { setup_temp_free(f,mults,sizeof(mults[0])*c->lookup_values); return error(f, VORBIS_outofmem); } len = sparse ? c->sorted_entries : c->entries; for (j=0; j < len; ++j) { unsigned int z = sparse ? c->sorted_values[j] : j; unsigned int div=1; for (k=0; k < c->dimensions; ++k) { int off = (z / div) % c->lookup_values; float val = mults[off]*c->delta_value + c->minimum_value + last; c->multiplicands[j*c->dimensions + k] = val; if (c->sequence_p) last = val; if (k+1 < c->dimensions) { if (div > UINT_MAX / (unsigned int) c->lookup_values) { setup_temp_free(f, mults,sizeof(mults[0])*c->lookup_values); return error(f, VORBIS_invalid_setup); } div *= c->lookup_values; } } } c->lookup_type = 2; } else #endif { float last=0; CHECK(f); c->multiplicands = (codetype *) setup_malloc(f, sizeof(c->multiplicands[0]) * c->lookup_values); if (c->multiplicands == NULL) { setup_temp_free(f, mults,sizeof(mults[0])*c->lookup_values); return error(f, VORBIS_outofmem); } for (j=0; j < (int) c->lookup_values; ++j) { float val = mults[j] * c->delta_value + c->minimum_value + last; c->multiplicands[j] = val; if (c->sequence_p) last = val; } } #ifndef STB_VORBIS_DIVIDES_IN_CODEBOOK skip:; #endif setup_temp_free(f, mults, sizeof(mults[0])*c->lookup_values); CHECK(f); } CHECK(f); } // time domain transfers (notused) x = get_bits(f, 6) + 1; for (i=0; i < x; ++i) { uint32 z = get_bits(f, 16); if (z != 0) return error(f, VORBIS_invalid_setup); } // Floors f->floor_count = get_bits(f, 6)+1; f->floor_config = (Floor *) setup_malloc(f, f->floor_count * sizeof(*f->floor_config)); if (f->floor_config == NULL) return error(f, VORBIS_outofmem); for (i=0; i < f->floor_count; ++i) { f->floor_types[i] = get_bits(f, 16); if (f->floor_types[i] > 1) return error(f, VORBIS_invalid_setup); if (f->floor_types[i] == 0) { Floor0 *g = &f->floor_config[i].floor0; g->order = get_bits(f,8); g->rate = get_bits(f,16); g->bark_map_size = get_bits(f,16); g->amplitude_bits = get_bits(f,6); g->amplitude_offset = get_bits(f,8); g->number_of_books = get_bits(f,4) + 1; for (j=0; j < g->number_of_books; ++j) g->book_list[j] = get_bits(f,8); return error(f, VORBIS_feature_not_supported); } else { stbv__floor_ordering p[31*8+2]; Floor1 *g = &f->floor_config[i].floor1; int max_class = -1; g->partitions = get_bits(f, 5); for (j=0; j < g->partitions; ++j) { g->partition_class_list[j] = get_bits(f, 4); if (g->partition_class_list[j] > max_class) max_class = g->partition_class_list[j]; } for (j=0; j <= max_class; ++j) { g->class_dimensions[j] = get_bits(f, 3)+1; g->class_subclasses[j] = get_bits(f, 2); if (g->class_subclasses[j]) { g->class_masterbooks[j] = get_bits(f, 8); if (g->class_masterbooks[j] >= f->codebook_count) return error(f, VORBIS_invalid_setup); } for (k=0; k < 1 << g->class_subclasses[j]; ++k) { g->subclass_books[j][k] = (int16)get_bits(f,8)-1; if (g->subclass_books[j][k] >= f->codebook_count) return error(f, VORBIS_invalid_setup); } } g->floor1_multiplier = get_bits(f,2)+1; g->rangebits = get_bits(f,4); g->Xlist[0] = 0; g->Xlist[1] = 1 << g->rangebits; g->values = 2; for (j=0; j < g->partitions; ++j) { int c = g->partition_class_list[j]; for (k=0; k < g->class_dimensions[c]; ++k) { g->Xlist[g->values] = get_bits(f, g->rangebits); ++g->values; } } // precompute the sorting for (j=0; j < g->values; ++j) { p[j].x = g->Xlist[j]; p[j].id = j; } qsort(p, g->values, sizeof(p[0]), point_compare); for (j=0; j < g->values-1; ++j) if (p[j].x == p[j+1].x) return error(f, VORBIS_invalid_setup); for (j=0; j < g->values; ++j) g->sorted_order[j] = (uint8) p[j].id; // precompute the neighbors for (j=2; j < g->values; ++j) { int low = 0,hi = 0; neighbors(g->Xlist, j, &low,&hi); g->neighbors[j][0] = low; g->neighbors[j][1] = hi; } if (g->values > longest_floorlist) longest_floorlist = g->values; } } // Residue f->residue_count = get_bits(f, 6)+1; f->residue_config = (Residue *) setup_malloc(f, f->residue_count * sizeof(f->residue_config[0])); if (f->residue_config == NULL) return error(f, VORBIS_outofmem); memset(f->residue_config, 0, f->residue_count * sizeof(f->residue_config[0])); for (i=0; i < f->residue_count; ++i) { uint8 residue_cascade[64]; Residue *r = f->residue_config+i; f->residue_types[i] = get_bits(f, 16); if (f->residue_types[i] > 2) return error(f, VORBIS_invalid_setup); r->begin = get_bits(f, 24); r->end = get_bits(f, 24); if (r->end < r->begin) return error(f, VORBIS_invalid_setup); r->part_size = get_bits(f,24)+1; r->classifications = get_bits(f,6)+1; r->classbook = get_bits(f,8); if (r->classbook >= f->codebook_count) return error(f, VORBIS_invalid_setup); for (j=0; j < r->classifications; ++j) { uint8 high_bits=0; uint8 low_bits=get_bits(f,3); if (get_bits(f,1)) high_bits = get_bits(f,5); residue_cascade[j] = high_bits*8 + low_bits; } r->residue_books = (short (*)[8]) setup_malloc(f, sizeof(r->residue_books[0]) * r->classifications); if (r->residue_books == NULL) return error(f, VORBIS_outofmem); for (j=0; j < r->classifications; ++j) { for (k=0; k < 8; ++k) { if (residue_cascade[j] & (1 << k)) { r->residue_books[j][k] = get_bits(f, 8); if (r->residue_books[j][k] >= f->codebook_count) return error(f, VORBIS_invalid_setup); } else { r->residue_books[j][k] = -1; } } } // precompute the classifications[] array to avoid inner-loop mod/divide // call it 'classdata' since we already have r->classifications r->classdata = (uint8 **) setup_malloc(f, sizeof(*r->classdata) * f->codebooks[r->classbook].entries); if (!r->classdata) return error(f, VORBIS_outofmem); memset(r->classdata, 0, sizeof(*r->classdata) * f->codebooks[r->classbook].entries); for (j=0; j < f->codebooks[r->classbook].entries; ++j) { int classwords = f->codebooks[r->classbook].dimensions; int temp = j; r->classdata[j] = (uint8 *) setup_malloc(f, sizeof(r->classdata[j][0]) * classwords); if (r->classdata[j] == NULL) return error(f, VORBIS_outofmem); for (k=classwords-1; k >= 0; --k) { r->classdata[j][k] = temp % r->classifications; temp /= r->classifications; } } } f->mapping_count = get_bits(f,6)+1; f->mapping = (Mapping *) setup_malloc(f, f->mapping_count * sizeof(*f->mapping)); if (f->mapping == NULL) return error(f, VORBIS_outofmem); memset(f->mapping, 0, f->mapping_count * sizeof(*f->mapping)); for (i=0; i < f->mapping_count; ++i) { Mapping *m = f->mapping + i; int mapping_type = get_bits(f,16); if (mapping_type != 0) return error(f, VORBIS_invalid_setup); m->chan = (MappingChannel *) setup_malloc(f, f->channels * sizeof(*m->chan)); if (m->chan == NULL) return error(f, VORBIS_outofmem); if (get_bits(f,1)) m->submaps = get_bits(f,4)+1; else m->submaps = 1; if (m->submaps > max_submaps) max_submaps = m->submaps; if (get_bits(f,1)) { m->coupling_steps = get_bits(f,8)+1; if (m->coupling_steps > f->channels) return error(f, VORBIS_invalid_setup); for (k=0; k < m->coupling_steps; ++k) { m->chan[k].magnitude = get_bits(f, ilog(f->channels-1)); m->chan[k].angle = get_bits(f, ilog(f->channels-1)); if (m->chan[k].magnitude >= f->channels) return error(f, VORBIS_invalid_setup); if (m->chan[k].angle >= f->channels) return error(f, VORBIS_invalid_setup); if (m->chan[k].magnitude == m->chan[k].angle) return error(f, VORBIS_invalid_setup); } } else m->coupling_steps = 0; // reserved field if (get_bits(f,2)) return error(f, VORBIS_invalid_setup); if (m->submaps > 1) { for (j=0; j < f->channels; ++j) { m->chan[j].mux = get_bits(f, 4); if (m->chan[j].mux >= m->submaps) return error(f, VORBIS_invalid_setup); } } else // @SPECIFICATION: this case is missing from the spec for (j=0; j < f->channels; ++j) m->chan[j].mux = 0; for (j=0; j < m->submaps; ++j) { get_bits(f,8); // discard m->submap_floor[j] = get_bits(f,8); m->submap_residue[j] = get_bits(f,8); if (m->submap_floor[j] >= f->floor_count) return error(f, VORBIS_invalid_setup); if (m->submap_residue[j] >= f->residue_count) return error(f, VORBIS_invalid_setup); } } // Modes f->mode_count = get_bits(f, 6)+1; for (i=0; i < f->mode_count; ++i) { Mode *m = f->mode_config+i; m->blockflag = get_bits(f,1); m->windowtype = get_bits(f,16); m->transformtype = get_bits(f,16); m->mapping = get_bits(f,8); if (m->windowtype != 0) return error(f, VORBIS_invalid_setup); if (m->transformtype != 0) return error(f, VORBIS_invalid_setup); if (m->mapping >= f->mapping_count) return error(f, VORBIS_invalid_setup); } flush_packet(f); f->previous_length = 0; for (i=0; i < f->channels; ++i) { f->channel_buffers[i] = (float *) setup_malloc(f, sizeof(float) * f->blocksize_1); f->previous_window[i] = (float *) setup_malloc(f, sizeof(float) * f->blocksize_1/2); f->finalY[i] = (int16 *) setup_malloc(f, sizeof(int16) * longest_floorlist); if (f->channel_buffers[i] == NULL || f->previous_window[i] == NULL || f->finalY[i] == NULL) return error(f, VORBIS_outofmem); memset(f->channel_buffers[i], 0, sizeof(float) * f->blocksize_1); #ifdef STB_VORBIS_NO_DEFER_FLOOR f->floor_buffers[i] = (float *) setup_malloc(f, sizeof(float) * f->blocksize_1/2); if (f->floor_buffers[i] == NULL) return error(f, VORBIS_outofmem); #endif } if (!init_blocksize(f, 0, f->blocksize_0)) return FALSE; if (!init_blocksize(f, 1, f->blocksize_1)) return FALSE; f->blocksize[0] = f->blocksize_0; f->blocksize[1] = f->blocksize_1; #ifdef STB_VORBIS_DIVIDE_TABLE if (integer_divide_table[1][1]==0) for (i=0; i < DIVTAB_NUMER; ++i) for (j=1; j < DIVTAB_DENOM; ++j) integer_divide_table[i][j] = i / j; #endif // compute how much temporary memory is needed // 1. { uint32 imdct_mem = (f->blocksize_1 * sizeof(float) >> 1); uint32 classify_mem; int i,max_part_read=0; for (i=0; i < f->residue_count; ++i) { Residue *r = f->residue_config + i; unsigned int actual_size = f->blocksize_1 / 2; unsigned int limit_r_begin = r->begin < actual_size ? r->begin : actual_size; unsigned int limit_r_end = r->end < actual_size ? r->end : actual_size; int n_read = limit_r_end - limit_r_begin; int part_read = n_read / r->part_size; if (part_read > max_part_read) max_part_read = part_read; } #ifndef STB_VORBIS_DIVIDES_IN_RESIDUE classify_mem = f->channels * (sizeof(void*) + max_part_read * sizeof(uint8 *)); #else classify_mem = f->channels * (sizeof(void*) + max_part_read * sizeof(int *)); #endif // maximum reasonable partition size is f->blocksize_1 f->temp_memory_required = classify_mem; if (imdct_mem > f->temp_memory_required) f->temp_memory_required = imdct_mem; } if (f->alloc.alloc_buffer) { assert(f->temp_offset == f->alloc.alloc_buffer_length_in_bytes); // check if there's enough temp memory so we don't error later if (f->setup_offset + sizeof(*f) + f->temp_memory_required > (unsigned) f->temp_offset) return error(f, VORBIS_outofmem); } // @TODO: stb_vorbis_seek_start expects first_audio_page_offset to point to a page // without PAGEFLAG_continued_packet, so this either points to the first page, or // the page after the end of the headers. It might be cleaner to point to a page // in the middle of the headers, when that's the page where the first audio packet // starts, but we'd have to also correctly skip the end of any continued packet in // stb_vorbis_seek_start. if (f->next_seg == -1) { f->first_audio_page_offset = stb_vorbis_get_file_offset(f); } else { f->first_audio_page_offset = 0; } return TRUE; } static void vorbis_deinit(stb_vorbis *p) { int i,j; setup_free(p, p->vendor); for (i=0; i < p->comment_list_length; ++i) { setup_free(p, p->comment_list[i]); } setup_free(p, p->comment_list); if (p->residue_config) { for (i=0; i < p->residue_count; ++i) { Residue *r = p->residue_config+i; if (r->classdata) { for (j=0; j < p->codebooks[r->classbook].entries; ++j) setup_free(p, r->classdata[j]); setup_free(p, r->classdata); } setup_free(p, r->residue_books); } } if (p->codebooks) { CHECK(p); for (i=0; i < p->codebook_count; ++i) { Codebook *c = p->codebooks + i; setup_free(p, c->codeword_lengths); setup_free(p, c->multiplicands); setup_free(p, c->codewords); setup_free(p, c->sorted_codewords); // c->sorted_values[-1] is the first entry in the array setup_free(p, c->sorted_values ? c->sorted_values-1 : NULL); } setup_free(p, p->codebooks); } setup_free(p, p->floor_config); setup_free(p, p->residue_config); if (p->mapping) { for (i=0; i < p->mapping_count; ++i) setup_free(p, p->mapping[i].chan); setup_free(p, p->mapping); } CHECK(p); for (i=0; i < p->channels && i < STB_VORBIS_MAX_CHANNELS; ++i) { setup_free(p, p->channel_buffers[i]); setup_free(p, p->previous_window[i]); #ifdef STB_VORBIS_NO_DEFER_FLOOR setup_free(p, p->floor_buffers[i]); #endif setup_free(p, p->finalY[i]); } for (i=0; i < 2; ++i) { setup_free(p, p->A[i]); setup_free(p, p->B[i]); setup_free(p, p->C[i]); setup_free(p, p->window[i]); setup_free(p, p->bit_reverse[i]); } #ifndef STB_VORBIS_NO_STDIO if (p->close_on_free) fclose(p->f); #endif } void stb_vorbis_close(stb_vorbis *p) { if (p == NULL) return; vorbis_deinit(p); setup_free(p,p); } static void vorbis_init(stb_vorbis *p, const stb_vorbis_alloc *z) { memset(p, 0, sizeof(*p)); // NULL out all malloc'd pointers to start if (z) { p->alloc = *z; p->alloc.alloc_buffer_length_in_bytes &= ~7; p->temp_offset = p->alloc.alloc_buffer_length_in_bytes; } p->eof = 0; p->error = VORBIS__no_error; p->stream = NULL; p->codebooks = NULL; p->page_crc_tests = -1; #ifndef STB_VORBIS_NO_STDIO p->close_on_free = FALSE; p->f = NULL; #endif } int stb_vorbis_get_sample_offset(stb_vorbis *f) { if (f->current_loc_valid) return f->current_loc; else return -1; } stb_vorbis_info stb_vorbis_get_info(stb_vorbis *f) { stb_vorbis_info d; d.channels = f->channels; d.sample_rate = f->sample_rate; d.setup_memory_required = f->setup_memory_required; d.setup_temp_memory_required = f->setup_temp_memory_required; d.temp_memory_required = f->temp_memory_required; d.max_frame_size = f->blocksize_1 >> 1; return d; } stb_vorbis_comment stb_vorbis_get_comment(stb_vorbis *f) { stb_vorbis_comment d; d.vendor = f->vendor; d.comment_list_length = f->comment_list_length; d.comment_list = f->comment_list; return d; } int stb_vorbis_get_error(stb_vorbis *f) { int e = f->error; f->error = VORBIS__no_error; return e; } static stb_vorbis * vorbis_alloc(stb_vorbis *f) { stb_vorbis *p = (stb_vorbis *) setup_malloc(f, sizeof(*p)); return p; } #ifndef STB_VORBIS_NO_PUSHDATA_API void stb_vorbis_flush_pushdata(stb_vorbis *f) { f->previous_length = 0; f->page_crc_tests = 0; f->discard_samples_deferred = 0; f->current_loc_valid = FALSE; f->first_decode = FALSE; f->samples_output = 0; f->channel_buffer_start = 0; f->channel_buffer_end = 0; } static int vorbis_search_for_page_pushdata(vorb *f, uint8 *data, int data_len) { int i,n; for (i=0; i < f->page_crc_tests; ++i) f->scan[i].bytes_done = 0; // if we have room for more scans, search for them first, because // they may cause us to stop early if their header is incomplete if (f->page_crc_tests < STB_VORBIS_PUSHDATA_CRC_COUNT) { if (data_len < 4) return 0; data_len -= 3; // need to look for 4-byte sequence, so don't miss // one that straddles a boundary for (i=0; i < data_len; ++i) { if (data[i] == 0x4f) { if (0==memcmp(data+i, ogg_page_header, 4)) { int j,len; uint32 crc; // make sure we have the whole page header if (i+26 >= data_len || i+27+data[i+26] >= data_len) { // only read up to this page start, so hopefully we'll // have the whole page header start next time data_len = i; break; } // ok, we have it all; compute the length of the page len = 27 + data[i+26]; for (j=0; j < data[i+26]; ++j) len += data[i+27+j]; // scan everything up to the embedded crc (which we must 0) crc = 0; for (j=0; j < 22; ++j) crc = crc32_update(crc, data[i+j]); // now process 4 0-bytes for ( ; j < 26; ++j) crc = crc32_update(crc, 0); // len is the total number of bytes we need to scan n = f->page_crc_tests++; f->scan[n].bytes_left = len-j; f->scan[n].crc_so_far = crc; f->scan[n].goal_crc = data[i+22] + (data[i+23] << 8) + (data[i+24]<<16) + (data[i+25]<<24); // if the last frame on a page is continued to the next, then // we can't recover the sample_loc immediately if (data[i+27+data[i+26]-1] == 255) f->scan[n].sample_loc = ~0; else f->scan[n].sample_loc = data[i+6] + (data[i+7] << 8) + (data[i+ 8]<<16) + (data[i+ 9]<<24); f->scan[n].bytes_done = i+j; if (f->page_crc_tests == STB_VORBIS_PUSHDATA_CRC_COUNT) break; // keep going if we still have room for more } } } } for (i=0; i < f->page_crc_tests;) { uint32 crc; int j; int n = f->scan[i].bytes_done; int m = f->scan[i].bytes_left; if (m > data_len - n) m = data_len - n; // m is the bytes to scan in the current chunk crc = f->scan[i].crc_so_far; for (j=0; j < m; ++j) crc = crc32_update(crc, data[n+j]); f->scan[i].bytes_left -= m; f->scan[i].crc_so_far = crc; if (f->scan[i].bytes_left == 0) { // does it match? if (f->scan[i].crc_so_far == f->scan[i].goal_crc) { // Houston, we have page data_len = n+m; // consumption amount is wherever that scan ended f->page_crc_tests = -1; // drop out of page scan mode f->previous_length = 0; // decode-but-don't-output one frame f->next_seg = -1; // start a new page f->current_loc = f->scan[i].sample_loc; // set the current sample location // to the amount we'd have decoded had we decoded this page f->current_loc_valid = f->current_loc != ~0U; return data_len; } // delete entry f->scan[i] = f->scan[--f->page_crc_tests]; } else { ++i; } } return data_len; } // return value: number of bytes we used int stb_vorbis_decode_frame_pushdata( stb_vorbis *f, // the file we're decoding const uint8 *data, int data_len, // the memory available for decoding int *channels, // place to write number of float * buffers float ***output, // place to write float ** array of float * buffers int *samples // place to write number of output samples ) { int i; int len,right,left; if (!IS_PUSH_MODE(f)) return error(f, VORBIS_invalid_api_mixing); if (f->page_crc_tests >= 0) { *samples = 0; return vorbis_search_for_page_pushdata(f, (uint8 *) data, data_len); } f->stream = (uint8 *) data; f->stream_end = (uint8 *) data + data_len; f->error = VORBIS__no_error; // check that we have the entire packet in memory if (!is_whole_packet_present(f)) { *samples = 0; return 0; } if (!vorbis_decode_packet(f, &len, &left, &right)) { // save the actual error we encountered enum STBVorbisError error = f->error; if (error == VORBIS_bad_packet_type) { // flush and resynch f->error = VORBIS__no_error; while (get8_packet(f) != EOP) if (f->eof) break; *samples = 0; return (int) (f->stream - data); } if (error == VORBIS_continued_packet_flag_invalid) { if (f->previous_length == 0) { // we may be resynching, in which case it's ok to hit one // of these; just discard the packet f->error = VORBIS__no_error; while (get8_packet(f) != EOP) if (f->eof) break; *samples = 0; return (int) (f->stream - data); } } // if we get an error while parsing, what to do? // well, it DEFINITELY won't work to continue from where we are! stb_vorbis_flush_pushdata(f); // restore the error that actually made us bail f->error = error; *samples = 0; return 1; } // success! len = vorbis_finish_frame(f, len, left, right); for (i=0; i < f->channels; ++i) f->outputs[i] = f->channel_buffers[i] + left; if (channels) *channels = f->channels; *samples = len; *output = f->outputs; return (int) (f->stream - data); } stb_vorbis *stb_vorbis_open_pushdata( const unsigned char *data, int data_len, // the memory available for decoding int *data_used, // only defined if result is not NULL int *error, const stb_vorbis_alloc *alloc) { stb_vorbis *f, p; vorbis_init(&p, alloc); p.stream = (uint8 *) data; p.stream_end = (uint8 *) data + data_len; p.push_mode = TRUE; if (!start_decoder(&p)) { if (p.eof) *error = VORBIS_need_more_data; else *error = p.error; vorbis_deinit(&p); return NULL; } f = vorbis_alloc(&p); if (f) { *f = p; *data_used = (int) (f->stream - data); *error = 0; return f; } else { vorbis_deinit(&p); return NULL; } } #endif // STB_VORBIS_NO_PUSHDATA_API unsigned int stb_vorbis_get_file_offset(stb_vorbis *f) { #ifndef STB_VORBIS_NO_PUSHDATA_API if (f->push_mode) return 0; #endif if (USE_MEMORY(f)) return (unsigned int) (f->stream - f->stream_start); #ifndef STB_VORBIS_NO_STDIO return (unsigned int) (ftell(f->f) - f->f_start); #endif } #ifndef STB_VORBIS_NO_PULLDATA_API // // DATA-PULLING API // static uint32 vorbis_find_page(stb_vorbis *f, uint32 *end, uint32 *last) { for(;;) { int n; if (f->eof) return 0; n = get8(f); if (n == 0x4f) { // page header candidate unsigned int retry_loc = stb_vorbis_get_file_offset(f); int i; // check if we're off the end of a file_section stream if (retry_loc - 25 > f->stream_len) return 0; // check the rest of the header for (i=1; i < 4; ++i) if (get8(f) != ogg_page_header[i]) break; if (f->eof) return 0; if (i == 4) { uint8 header[27]; uint32 i, crc, goal, len; for (i=0; i < 4; ++i) header[i] = ogg_page_header[i]; for (; i < 27; ++i) header[i] = get8(f); if (f->eof) return 0; if (header[4] != 0) goto invalid; goal = header[22] + (header[23] << 8) + (header[24]<<16) + ((uint32)header[25]<<24); for (i=22; i < 26; ++i) header[i] = 0; crc = 0; for (i=0; i < 27; ++i) crc = crc32_update(crc, header[i]); len = 0; for (i=0; i < header[26]; ++i) { int s = get8(f); crc = crc32_update(crc, s); len += s; } if (len && f->eof) return 0; for (i=0; i < len; ++i) crc = crc32_update(crc, get8(f)); // finished parsing probable page if (crc == goal) { // we could now check that it's either got the last // page flag set, OR it's followed by the capture // pattern, but I guess TECHNICALLY you could have // a file with garbage between each ogg page and recover // from it automatically? So even though that paranoia // might decrease the chance of an invalid decode by // another 2^32, not worth it since it would hose those // invalid-but-useful files? if (end) *end = stb_vorbis_get_file_offset(f); if (last) { if (header[5] & 0x04) *last = 1; else *last = 0; } set_file_offset(f, retry_loc-1); return 1; } } invalid: // not a valid page, so rewind and look for next one set_file_offset(f, retry_loc); } } } #define SAMPLE_unknown 0xffffffff // seeking is implemented with a binary search, which narrows down the range to // 64K, before using a linear search (because finding the synchronization // pattern can be expensive, and the chance we'd find the end page again is // relatively high for small ranges) // // two initial interpolation-style probes are used at the start of the search // to try to bound either side of the binary search sensibly, while still // working in O(log n) time if they fail. static int get_seek_page_info(stb_vorbis *f, ProbedPage *z) { uint8 header[27], lacing[255]; int i,len; // record where the page starts z->page_start = stb_vorbis_get_file_offset(f); // parse the header getn(f, header, 27); if (header[0] != 'O' || header[1] != 'g' || header[2] != 'g' || header[3] != 'S') return 0; getn(f, lacing, header[26]); // determine the length of the payload len = 0; for (i=0; i < header[26]; ++i) len += lacing[i]; // this implies where the page ends z->page_end = z->page_start + 27 + header[26] + len; // read the last-decoded sample out of the data z->last_decoded_sample = header[6] + (header[7] << 8) + (header[8] << 16) + (header[9] << 24); // restore file state to where we were set_file_offset(f, z->page_start); return 1; } // rarely used function to seek back to the preceding page while finding the // start of a packet static int go_to_page_before(stb_vorbis *f, unsigned int limit_offset) { unsigned int previous_safe, end; // now we want to seek back 64K from the limit if (limit_offset >= 65536 && limit_offset-65536 >= f->first_audio_page_offset) previous_safe = limit_offset - 65536; else previous_safe = f->first_audio_page_offset; set_file_offset(f, previous_safe); while (vorbis_find_page(f, &end, NULL)) { if (end >= limit_offset && stb_vorbis_get_file_offset(f) < limit_offset) return 1; set_file_offset(f, end); } return 0; } // implements the search logic for finding a page and starting decoding. if // the function succeeds, current_loc_valid will be true and current_loc will // be less than or equal to the provided sample number (the closer the // better). static int seek_to_sample_coarse(stb_vorbis *f, uint32 sample_number) { ProbedPage left, right, mid; int i, start_seg_with_known_loc, end_pos, page_start; uint32 delta, stream_length, padding, last_sample_limit; double offset = 0.0, bytes_per_sample = 0.0; int probe = 0; // find the last page and validate the target sample stream_length = stb_vorbis_stream_length_in_samples(f); if (stream_length == 0) return error(f, VORBIS_seek_without_length); if (sample_number > stream_length) return error(f, VORBIS_seek_invalid); // this is the maximum difference between the window-center (which is the // actual granule position value), and the right-start (which the spec // indicates should be the granule position (give or take one)). padding = ((f->blocksize_1 - f->blocksize_0) >> 2); if (sample_number < padding) last_sample_limit = 0; else last_sample_limit = sample_number - padding; left = f->p_first; while (left.last_decoded_sample == ~0U) { // (untested) the first page does not have a 'last_decoded_sample' set_file_offset(f, left.page_end); if (!get_seek_page_info(f, &left)) goto error; } right = f->p_last; assert(right.last_decoded_sample != ~0U); // starting from the start is handled differently if (last_sample_limit <= left.last_decoded_sample) { if (stb_vorbis_seek_start(f)) { if (f->current_loc > sample_number) return error(f, VORBIS_seek_failed); return 1; } return 0; } while (left.page_end != right.page_start) { assert(left.page_end < right.page_start); // search range in bytes delta = right.page_start - left.page_end; if (delta <= 65536) { // there's only 64K left to search - handle it linearly set_file_offset(f, left.page_end); } else { if (probe < 2) { if (probe == 0) { // first probe (interpolate) double data_bytes = right.page_end - left.page_start; bytes_per_sample = data_bytes / right.last_decoded_sample; offset = left.page_start + bytes_per_sample * (last_sample_limit - left.last_decoded_sample); } else { // second probe (try to bound the other side) double error = ((double) last_sample_limit - mid.last_decoded_sample) * bytes_per_sample; if (error >= 0 && error < 8000) error = 8000; if (error < 0 && error > -8000) error = -8000; offset += error * 2; } // ensure the offset is valid if (offset < left.page_end) offset = left.page_end; if (offset > right.page_start - 65536) offset = right.page_start - 65536; set_file_offset(f, (unsigned int) offset); } else { // binary search for large ranges (offset by 32K to ensure // we don't hit the right page) set_file_offset(f, left.page_end + (delta / 2) - 32768); } if (!vorbis_find_page(f, NULL, NULL)) goto error; } for (;;) { if (!get_seek_page_info(f, &mid)) goto error; if (mid.last_decoded_sample != ~0U) break; // (untested) no frames end on this page set_file_offset(f, mid.page_end); assert(mid.page_start < right.page_start); } // if we've just found the last page again then we're in a tricky file, // and we're close enough (if it wasn't an interpolation probe). if (mid.page_start == right.page_start) { if (probe >= 2 || delta <= 65536) break; } else { if (last_sample_limit < mid.last_decoded_sample) right = mid; else left = mid; } ++probe; } // seek back to start of the last packet page_start = left.page_start; set_file_offset(f, page_start); if (!start_page(f)) return error(f, VORBIS_seek_failed); end_pos = f->end_seg_with_known_loc; assert(end_pos >= 0); for (;;) { for (i = end_pos; i > 0; --i) if (f->segments[i-1] != 255) break; start_seg_with_known_loc = i; if (start_seg_with_known_loc > 0 || !(f->page_flag & PAGEFLAG_continued_packet)) break; // (untested) the final packet begins on an earlier page if (!go_to_page_before(f, page_start)) goto error; page_start = stb_vorbis_get_file_offset(f); if (!start_page(f)) goto error; end_pos = f->segment_count - 1; } // prepare to start decoding f->current_loc_valid = FALSE; f->last_seg = FALSE; f->valid_bits = 0; f->packet_bytes = 0; f->bytes_in_seg = 0; f->previous_length = 0; f->next_seg = start_seg_with_known_loc; for (i = 0; i < start_seg_with_known_loc; i++) skip(f, f->segments[i]); // start decoding (optimizable - this frame is generally discarded) if (!vorbis_pump_first_frame(f)) return 0; if (f->current_loc > sample_number) return error(f, VORBIS_seek_failed); return 1; error: // try to restore the file to a valid state stb_vorbis_seek_start(f); return error(f, VORBIS_seek_failed); } // the same as vorbis_decode_initial, but without advancing static int peek_decode_initial(vorb *f, int *p_left_start, int *p_left_end, int *p_right_start, int *p_right_end, int *mode) { int bits_read, bytes_read; if (!vorbis_decode_initial(f, p_left_start, p_left_end, p_right_start, p_right_end, mode)) return 0; // either 1 or 2 bytes were read, figure out which so we can rewind bits_read = 1 + ilog(f->mode_count-1); if (f->mode_config[*mode].blockflag) bits_read += 2; bytes_read = (bits_read + 7) / 8; f->bytes_in_seg += bytes_read; f->packet_bytes -= bytes_read; skip(f, -bytes_read); if (f->next_seg == -1) f->next_seg = f->segment_count - 1; else f->next_seg--; f->valid_bits = 0; return 1; } int stb_vorbis_seek_frame(stb_vorbis *f, unsigned int sample_number) { uint32 max_frame_samples; if (IS_PUSH_MODE(f)) return error(f, VORBIS_invalid_api_mixing); // fast page-level search if (!seek_to_sample_coarse(f, sample_number)) return 0; assert(f->current_loc_valid); assert(f->current_loc <= sample_number); // linear search for the relevant packet max_frame_samples = (f->blocksize_1*3 - f->blocksize_0) >> 2; while (f->current_loc < sample_number) { int left_start, left_end, right_start, right_end, mode, frame_samples; if (!peek_decode_initial(f, &left_start, &left_end, &right_start, &right_end, &mode)) return error(f, VORBIS_seek_failed); // calculate the number of samples returned by the next frame frame_samples = right_start - left_start; if (f->current_loc + frame_samples > sample_number) { return 1; // the next frame will contain the sample } else if (f->current_loc + frame_samples + max_frame_samples > sample_number) { // there's a chance the frame after this could contain the sample vorbis_pump_first_frame(f); } else { // this frame is too early to be relevant f->current_loc += frame_samples; f->previous_length = 0; maybe_start_packet(f); flush_packet(f); } } // the next frame should start with the sample if (f->current_loc != sample_number) return error(f, VORBIS_seek_failed); return 1; } int stb_vorbis_seek(stb_vorbis *f, unsigned int sample_number) { if (!stb_vorbis_seek_frame(f, sample_number)) return 0; if (sample_number != f->current_loc) { int n; uint32 frame_start = f->current_loc; stb_vorbis_get_frame_float(f, &n, NULL); assert(sample_number > frame_start); assert(f->channel_buffer_start + (int) (sample_number-frame_start) <= f->channel_buffer_end); f->channel_buffer_start += (sample_number - frame_start); } return 1; } int stb_vorbis_seek_start(stb_vorbis *f) { if (IS_PUSH_MODE(f)) { return error(f, VORBIS_invalid_api_mixing); } set_file_offset(f, f->first_audio_page_offset); f->previous_length = 0; f->first_decode = TRUE; f->next_seg = -1; return vorbis_pump_first_frame(f); } unsigned int stb_vorbis_stream_length_in_samples(stb_vorbis *f) { unsigned int restore_offset, previous_safe; unsigned int end, last_page_loc; if (IS_PUSH_MODE(f)) return error(f, VORBIS_invalid_api_mixing); if (!f->total_samples) { unsigned int last; uint32 lo,hi; char header[6]; // first, store the current decode position so we can restore it restore_offset = stb_vorbis_get_file_offset(f); // now we want to seek back 64K from the end (the last page must // be at most a little less than 64K, but let's allow a little slop) if (f->stream_len >= 65536 && f->stream_len-65536 >= f->first_audio_page_offset) previous_safe = f->stream_len - 65536; else previous_safe = f->first_audio_page_offset; set_file_offset(f, previous_safe); // previous_safe is now our candidate 'earliest known place that seeking // to will lead to the final page' if (!vorbis_find_page(f, &end, &last)) { // if we can't find a page, we're hosed! f->error = VORBIS_cant_find_last_page; f->total_samples = 0xffffffff; goto done; } // check if there are more pages last_page_loc = stb_vorbis_get_file_offset(f); // stop when the last_page flag is set, not when we reach eof; // this allows us to stop short of a 'file_section' end without // explicitly checking the length of the section while (!last) { set_file_offset(f, end); if (!vorbis_find_page(f, &end, &last)) { // the last page we found didn't have the 'last page' flag // set. whoops! break; } //previous_safe = last_page_loc+1; // NOTE: not used after this point, but note for debugging last_page_loc = stb_vorbis_get_file_offset(f); } set_file_offset(f, last_page_loc); // parse the header getn(f, (unsigned char *)header, 6); // extract the absolute granule position lo = get32(f); hi = get32(f); if (lo == 0xffffffff && hi == 0xffffffff) { f->error = VORBIS_cant_find_last_page; f->total_samples = SAMPLE_unknown; goto done; } if (hi) lo = 0xfffffffe; // saturate f->total_samples = lo; f->p_last.page_start = last_page_loc; f->p_last.page_end = end; f->p_last.last_decoded_sample = lo; done: set_file_offset(f, restore_offset); } return f->total_samples == SAMPLE_unknown ? 0 : f->total_samples; } float stb_vorbis_stream_length_in_seconds(stb_vorbis *f) { return stb_vorbis_stream_length_in_samples(f) / (float) f->sample_rate; } int stb_vorbis_get_frame_float(stb_vorbis *f, int *channels, float ***output) { int len, right,left,i; if (IS_PUSH_MODE(f)) return error(f, VORBIS_invalid_api_mixing); if (!vorbis_decode_packet(f, &len, &left, &right)) { f->channel_buffer_start = f->channel_buffer_end = 0; return 0; } len = vorbis_finish_frame(f, len, left, right); for (i=0; i < f->channels; ++i) f->outputs[i] = f->channel_buffers[i] + left; f->channel_buffer_start = left; f->channel_buffer_end = left+len; if (channels) *channels = f->channels; if (output) *output = f->outputs; return len; } #ifndef STB_VORBIS_NO_STDIO stb_vorbis * stb_vorbis_open_file_section(FILE *file, int close_on_free, int *error, const stb_vorbis_alloc *alloc, unsigned int length) { stb_vorbis *f, p; vorbis_init(&p, alloc); p.f = file; p.f_start = (uint32) ftell(file); p.stream_len = length; p.close_on_free = close_on_free; if (start_decoder(&p)) { f = vorbis_alloc(&p); if (f) { *f = p; vorbis_pump_first_frame(f); return f; } } if (error) *error = p.error; vorbis_deinit(&p); return NULL; } stb_vorbis * stb_vorbis_open_file(FILE *file, int close_on_free, int *error, const stb_vorbis_alloc *alloc) { unsigned int len, start; start = (unsigned int) ftell(file); fseek(file, 0, SEEK_END); len = (unsigned int) (ftell(file) - start); fseek(file, start, SEEK_SET); return stb_vorbis_open_file_section(file, close_on_free, error, alloc, len); } stb_vorbis * stb_vorbis_open_filename(const char *filename, int *error, const stb_vorbis_alloc *alloc) { FILE *f; #if defined(_WIN32) && defined(__STDC_WANT_SECURE_LIB__) if (0 != fopen_s(&f, filename, "rb")) f = NULL; #else f = fopen(filename, "rb"); #endif if (f) return stb_vorbis_open_file(f, TRUE, error, alloc); if (error) *error = VORBIS_file_open_failure; return NULL; } #endif // STB_VORBIS_NO_STDIO stb_vorbis * stb_vorbis_open_memory(const unsigned char *data, int len, int *error, const stb_vorbis_alloc *alloc) { stb_vorbis *f, p; if (!data) { if (error) *error = VORBIS_unexpected_eof; return NULL; } vorbis_init(&p, alloc); p.stream = (uint8 *) data; p.stream_end = (uint8 *) data + len; p.stream_start = (uint8 *) p.stream; p.stream_len = len; p.push_mode = FALSE; if (start_decoder(&p)) { f = vorbis_alloc(&p); if (f) { *f = p; vorbis_pump_first_frame(f); if (error) *error = VORBIS__no_error; return f; } } if (error) *error = p.error; vorbis_deinit(&p); return NULL; } #ifndef STB_VORBIS_NO_INTEGER_CONVERSION #define PLAYBACK_MONO 1 #define PLAYBACK_LEFT 2 #define PLAYBACK_RIGHT 4 #define L (PLAYBACK_LEFT | PLAYBACK_MONO) #define C (PLAYBACK_LEFT | PLAYBACK_RIGHT | PLAYBACK_MONO) #define R (PLAYBACK_RIGHT | PLAYBACK_MONO) static int8 channel_position[7][6] = { { 0 }, { C }, { L, R }, { L, C, R }, { L, R, L, R }, { L, C, R, L, R }, { L, C, R, L, R, C }, }; #ifndef STB_VORBIS_NO_FAST_SCALED_FLOAT typedef union { float f; int i; } float_conv; typedef char stb_vorbis_float_size_test[sizeof(float)==4 && sizeof(int) == 4]; #define FASTDEF(x) float_conv x // add (1<<23) to convert to int, then divide by 2^SHIFT, then add 0.5/2^SHIFT to round #define MAGIC(SHIFT) (1.5f * (1 << (23-SHIFT)) + 0.5f/(1 << SHIFT)) #define ADDEND(SHIFT) (((150-SHIFT) << 23) + (1 << 22)) #define FAST_SCALED_FLOAT_TO_INT(temp,x,s) (temp.f = (x) + MAGIC(s), temp.i - ADDEND(s)) #define check_endianness() #else #define FAST_SCALED_FLOAT_TO_INT(temp,x,s) ((int) ((x) * (1 << (s)))) #define check_endianness() #define FASTDEF(x) #endif static void copy_samples(short *dest, float *src, int len) { int i; check_endianness(); for (i=0; i < len; ++i) { FASTDEF(temp); int v = FAST_SCALED_FLOAT_TO_INT(temp, src[i],15); if ((unsigned int) (v + 32768) > 65535) v = v < 0 ? -32768 : 32767; dest[i] = v; } } static void compute_samples(int mask, short *output, int num_c, float **data, int d_offset, int len) { #define STB_BUFFER_SIZE 32 float buffer[STB_BUFFER_SIZE]; int i,j,o,n = STB_BUFFER_SIZE; check_endianness(); for (o = 0; o < len; o += STB_BUFFER_SIZE) { memset(buffer, 0, sizeof(buffer)); if (o + n > len) n = len - o; for (j=0; j < num_c; ++j) { if (channel_position[num_c][j] & mask) { for (i=0; i < n; ++i) buffer[i] += data[j][d_offset+o+i]; } } for (i=0; i < n; ++i) { FASTDEF(temp); int v = FAST_SCALED_FLOAT_TO_INT(temp,buffer[i],15); if ((unsigned int) (v + 32768) > 65535) v = v < 0 ? -32768 : 32767; output[o+i] = v; } } #undef STB_BUFFER_SIZE } static void compute_stereo_samples(short *output, int num_c, float **data, int d_offset, int len) { #define STB_BUFFER_SIZE 32 float buffer[STB_BUFFER_SIZE]; int i,j,o,n = STB_BUFFER_SIZE >> 1; // o is the offset in the source data check_endianness(); for (o = 0; o < len; o += STB_BUFFER_SIZE >> 1) { // o2 is the offset in the output data int o2 = o << 1; memset(buffer, 0, sizeof(buffer)); if (o + n > len) n = len - o; for (j=0; j < num_c; ++j) { int m = channel_position[num_c][j] & (PLAYBACK_LEFT | PLAYBACK_RIGHT); if (m == (PLAYBACK_LEFT | PLAYBACK_RIGHT)) { for (i=0; i < n; ++i) { buffer[i*2+0] += data[j][d_offset+o+i]; buffer[i*2+1] += data[j][d_offset+o+i]; } } else if (m == PLAYBACK_LEFT) { for (i=0; i < n; ++i) { buffer[i*2+0] += data[j][d_offset+o+i]; } } else if (m == PLAYBACK_RIGHT) { for (i=0; i < n; ++i) { buffer[i*2+1] += data[j][d_offset+o+i]; } } } for (i=0; i < (n<<1); ++i) { FASTDEF(temp); int v = FAST_SCALED_FLOAT_TO_INT(temp,buffer[i],15); if ((unsigned int) (v + 32768) > 65535) v = v < 0 ? -32768 : 32767; output[o2+i] = v; } } #undef STB_BUFFER_SIZE } static void convert_samples_short(int buf_c, short **buffer, int b_offset, int data_c, float **data, int d_offset, int samples) { int i; if (buf_c != data_c && buf_c <= 2 && data_c <= 6) { static int channel_selector[3][2] = { {0}, {PLAYBACK_MONO}, {PLAYBACK_LEFT, PLAYBACK_RIGHT} }; for (i=0; i < buf_c; ++i) compute_samples(channel_selector[buf_c][i], buffer[i]+b_offset, data_c, data, d_offset, samples); } else { int limit = buf_c < data_c ? buf_c : data_c; for (i=0; i < limit; ++i) copy_samples(buffer[i]+b_offset, data[i]+d_offset, samples); for ( ; i < buf_c; ++i) memset(buffer[i]+b_offset, 0, sizeof(short) * samples); } } int stb_vorbis_get_frame_short(stb_vorbis *f, int num_c, short **buffer, int num_samples) { float **output = NULL; int len = stb_vorbis_get_frame_float(f, NULL, &output); if (len > num_samples) len = num_samples; if (len) convert_samples_short(num_c, buffer, 0, f->channels, output, 0, len); return len; } static void convert_channels_short_interleaved(int buf_c, short *buffer, int data_c, float **data, int d_offset, int len) { int i; check_endianness(); if (buf_c != data_c && buf_c <= 2 && data_c <= 6) { assert(buf_c == 2); for (i=0; i < buf_c; ++i) compute_stereo_samples(buffer, data_c, data, d_offset, len); } else { int limit = buf_c < data_c ? buf_c : data_c; int j; for (j=0; j < len; ++j) { for (i=0; i < limit; ++i) { FASTDEF(temp); float f = data[i][d_offset+j]; int v = FAST_SCALED_FLOAT_TO_INT(temp, f,15);//data[i][d_offset+j],15); if ((unsigned int) (v + 32768) > 65535) v = v < 0 ? -32768 : 32767; *buffer++ = v; } for ( ; i < buf_c; ++i) *buffer++ = 0; } } } int stb_vorbis_get_frame_short_interleaved(stb_vorbis *f, int num_c, short *buffer, int num_shorts) { float **output; int len; if (num_c == 1) return stb_vorbis_get_frame_short(f,num_c,&buffer, num_shorts); len = stb_vorbis_get_frame_float(f, NULL, &output); if (len) { if (len*num_c > num_shorts) len = num_shorts / num_c; convert_channels_short_interleaved(num_c, buffer, f->channels, output, 0, len); } return len; } int stb_vorbis_get_samples_short_interleaved(stb_vorbis *f, int channels, short *buffer, int num_shorts) { float **outputs; int len = num_shorts / channels; int n=0; while (n < len) { int k = f->channel_buffer_end - f->channel_buffer_start; if (n+k >= len) k = len - n; if (k) convert_channels_short_interleaved(channels, buffer, f->channels, f->channel_buffers, f->channel_buffer_start, k); buffer += k*channels; n += k; f->channel_buffer_start += k; if (n == len) break; if (!stb_vorbis_get_frame_float(f, NULL, &outputs)) break; } return n; } int stb_vorbis_get_samples_short(stb_vorbis *f, int channels, short **buffer, int len) { float **outputs; int n=0; while (n < len) { int k = f->channel_buffer_end - f->channel_buffer_start; if (n+k >= len) k = len - n; if (k) convert_samples_short(channels, buffer, n, f->channels, f->channel_buffers, f->channel_buffer_start, k); n += k; f->channel_buffer_start += k; if (n == len) break; if (!stb_vorbis_get_frame_float(f, NULL, &outputs)) break; } return n; } #ifndef STB_VORBIS_NO_STDIO int stb_vorbis_decode_filename(const char *filename, int *channels, int *sample_rate, short **output) { int data_len, offset, total, limit, error; short *data; stb_vorbis *v = stb_vorbis_open_filename(filename, &error, NULL); if (v == NULL) return -1; limit = v->channels * 4096; *channels = v->channels; if (sample_rate) *sample_rate = v->sample_rate; offset = data_len = 0; total = limit; data = (short *) malloc(total * sizeof(*data)); if (data == NULL) { stb_vorbis_close(v); return -2; } for (;;) { int n = stb_vorbis_get_frame_short_interleaved(v, v->channels, data+offset, total-offset); if (n == 0) break; data_len += n; offset += n * v->channels; if (offset + limit > total) { short *data2; total *= 2; data2 = (short *) realloc(data, total * sizeof(*data)); if (data2 == NULL) { free(data); stb_vorbis_close(v); return -2; } data = data2; } } *output = data; stb_vorbis_close(v); return data_len; } #endif // NO_STDIO int stb_vorbis_decode_memory(const uint8 *mem, int len, int *channels, int *sample_rate, short **output) { int data_len, offset, total, limit, error; short *data; stb_vorbis *v = stb_vorbis_open_memory(mem, len, &error, NULL); if (v == NULL) return -1; limit = v->channels * 4096; *channels = v->channels; if (sample_rate) *sample_rate = v->sample_rate; offset = data_len = 0; total = limit; data = (short *) malloc(total * sizeof(*data)); if (data == NULL) { stb_vorbis_close(v); return -2; } for (;;) { int n = stb_vorbis_get_frame_short_interleaved(v, v->channels, data+offset, total-offset); if (n == 0) break; data_len += n; offset += n * v->channels; if (offset + limit > total) { short *data2; total *= 2; data2 = (short *) realloc(data, total * sizeof(*data)); if (data2 == NULL) { free(data); stb_vorbis_close(v); return -2; } data = data2; } } *output = data; stb_vorbis_close(v); return data_len; } #endif // STB_VORBIS_NO_INTEGER_CONVERSION int stb_vorbis_get_samples_float_interleaved(stb_vorbis *f, int channels, float *buffer, int num_floats) { float **outputs; int len = num_floats / channels; int n=0; int z = f->channels; if (z > channels) z = channels; while (n < len) { int i,j; int k = f->channel_buffer_end - f->channel_buffer_start; if (n+k >= len) k = len - n; for (j=0; j < k; ++j) { for (i=0; i < z; ++i) *buffer++ = f->channel_buffers[i][f->channel_buffer_start+j]; for ( ; i < channels; ++i) *buffer++ = 0; } n += k; f->channel_buffer_start += k; if (n == len) break; if (!stb_vorbis_get_frame_float(f, NULL, &outputs)) break; } return n; } int stb_vorbis_get_samples_float(stb_vorbis *f, int channels, float **buffer, int num_samples) { float **outputs; int n=0; int z = f->channels; if (z > channels) z = channels; while (n < num_samples) { int i; int k = f->channel_buffer_end - f->channel_buffer_start; if (n+k >= num_samples) k = num_samples - n; if (k) { for (i=0; i < z; ++i) memcpy(buffer[i]+n, f->channel_buffers[i]+f->channel_buffer_start, sizeof(float)*k); for ( ; i < channels; ++i) memset(buffer[i]+n, 0, sizeof(float) * k); } n += k; f->channel_buffer_start += k; if (n == num_samples) break; if (!stb_vorbis_get_frame_float(f, NULL, &outputs)) break; } return n; } #endif // STB_VORBIS_NO_PULLDATA_API /* Version history 1.17 - 2019-07-08 - fix CVE-2019-13217, -13218, -13219, -13220, -13221, -13222, -13223 found with Mayhem by ForAllSecure 1.16 - 2019-03-04 - fix warnings 1.15 - 2019-02-07 - explicit failure if Ogg Skeleton data is found 1.14 - 2018-02-11 - delete bogus dealloca usage 1.13 - 2018-01-29 - fix truncation of last frame (hopefully) 1.12 - 2017-11-21 - limit residue begin/end to blocksize/2 to avoid large temp allocs in bad/corrupt files 1.11 - 2017-07-23 - fix MinGW compilation 1.10 - 2017-03-03 - more robust seeking; fix negative ilog(); clear error in open_memory 1.09 - 2016-04-04 - back out 'avoid discarding last frame' fix from previous version 1.08 - 2016-04-02 - fixed multiple warnings; fix setup memory leaks; avoid discarding last frame of audio data 1.07 - 2015-01-16 - fixed some warnings, fix mingw, const-correct API some more crash fixes when out of memory or with corrupt files 1.06 - 2015-08-31 - full, correct support for seeking API (Dougall Johnson) some crash fixes when out of memory or with corrupt files 1.05 - 2015-04-19 - don't define __forceinline if it's redundant 1.04 - 2014-08-27 - fix missing const-correct case in API 1.03 - 2014-08-07 - Warning fixes 1.02 - 2014-07-09 - Declare qsort compare function _cdecl on windows 1.01 - 2014-06-18 - fix stb_vorbis_get_samples_float 1.0 - 2014-05-26 - fix memory leaks; fix warnings; fix bugs in multichannel (API change) report sample rate for decode-full-file funcs 0.99996 - bracket #include for macintosh compilation by Laurent Gomila 0.99995 - use union instead of pointer-cast for fast-float-to-int to avoid alias-optimization problem 0.99994 - change fast-float-to-int to work in single-precision FPU mode, remove endian-dependence 0.99993 - remove assert that fired on legal files with empty tables 0.99992 - rewind-to-start 0.99991 - bugfix to stb_vorbis_get_samples_short by Bernhard Wodo 0.9999 - (should have been 0.99990) fix no-CRT support, compiling as C++ 0.9998 - add a full-decode function with a memory source 0.9997 - fix a bug in the read-from-FILE case in 0.9996 addition 0.9996 - query length of vorbis stream in samples/seconds 0.9995 - bugfix to another optimization that only happened in certain files 0.9994 - bugfix to one of the optimizations that caused significant (but inaudible?) errors 0.9993 - performance improvements; runs in 99% to 104% of time of reference implementation 0.9992 - performance improvement of IMDCT; now performs close to reference implementation 0.9991 - performance improvement of IMDCT 0.999 - (should have been 0.9990) performance improvement of IMDCT 0.998 - no-CRT support from Casey Muratori 0.997 - bugfixes for bugs found by Terje Mathisen 0.996 - bugfix: fast-huffman decode initialized incorrectly for sparse codebooks; fixing gives 10% speedup - found by Terje Mathisen 0.995 - bugfix: fix to 'effective' overrun detection - found by Terje Mathisen 0.994 - bugfix: garbage decode on final VQ symbol of a non-multiple - found by Terje Mathisen 0.993 - bugfix: pushdata API required 1 extra byte for empty page (failed to consume final page if empty) - found by Terje Mathisen 0.992 - fixes for MinGW warning 0.991 - turn fast-float-conversion on by default 0.990 - fix push-mode seek recovery if you seek into the headers 0.98b - fix to bad release of 0.98 0.98 - fix push-mode seek recovery; robustify float-to-int and support non-fast mode 0.97 - builds under c++ (typecasting, don't use 'class' keyword) 0.96 - somehow MY 0.95 was right, but the web one was wrong, so here's my 0.95 rereleased as 0.96, fixes a typo in the clamping code 0.95 - clamping code for 16-bit functions 0.94 - not publically released 0.93 - fixed all-zero-floor case (was decoding garbage) 0.92 - fixed a memory leak 0.91 - conditional compiles to omit parts of the API and the infrastructure to support them: STB_VORBIS_NO_PULLDATA_API, STB_VORBIS_NO_PUSHDATA_API, STB_VORBIS_NO_STDIO, STB_VORBIS_NO_INTEGER_CONVERSION 0.90 - first public release */ #endif // STB_VORBIS_HEADER_ONLY /* ------------------------------------------------------------------------------ This software is available under 2 licenses -- choose whichever you prefer. ------------------------------------------------------------------------------ ALTERNATIVE A - MIT License Copyright (c) 2017 Sean Barrett Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ------------------------------------------------------------------------------ ALTERNATIVE B - Public Domain (www.unlicense.org) This is free and unencumbered software released into the public domain. Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means. In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain. We make this dedication for the benefit of the public at large and to the detriment of our heirs and successors. We intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ------------------------------------------------------------------------------ */ ================================================ FILE: libraries/xatlas.cpp ================================================ /* MIT License Copyright (c) 2018-2020 Jonathan Young Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* thekla_atlas https://github.com/Thekla/thekla_atlas MIT License Copyright (c) 2013 Thekla, Inc Copyright NVIDIA Corporation 2006 -- Ignacio Castano Fast-BVH https://github.com/brandonpelfrey/Fast-BVH MIT License Copyright (c) 2012 Brandon Pelfrey */ #include "xatlas.h" #ifndef XATLAS_C_API #define XATLAS_C_API 0 #endif #if XATLAS_C_API #include "xatlas_c.h" #endif #include #include #include #include #include #include // FLT_MAX #include #include #define __STDC_LIMIT_MACROS #include #include #include #ifndef XA_DEBUG #ifdef NDEBUG #define XA_DEBUG 0 #else #define XA_DEBUG 1 #endif #endif #ifndef XA_PROFILE #define XA_PROFILE 0 #endif #if XA_PROFILE #include #endif #ifndef XA_MULTITHREADED #define XA_MULTITHREADED 1 #endif #define XA_STR(x) #x #define XA_XSTR(x) XA_STR(x) #ifndef XA_ASSERT #define XA_ASSERT(exp) if (!(exp)) { XA_PRINT_WARNING("\rASSERT: %s %s %d\n", XA_XSTR(exp), __FILE__, __LINE__); } #endif #ifndef XA_DEBUG_ASSERT #define XA_DEBUG_ASSERT(exp) assert(exp) #endif #ifndef XA_PRINT #define XA_PRINT(...) \ if (xatlas::internal::s_print && xatlas::internal::s_printVerbose) \ xatlas::internal::s_print(__VA_ARGS__); #endif #ifndef XA_PRINT_WARNING #define XA_PRINT_WARNING(...) \ if (xatlas::internal::s_print) \ xatlas::internal::s_print(__VA_ARGS__); #endif #define XA_ALLOC(tag, type) (type *)internal::Realloc(nullptr, sizeof(type), tag, __FILE__, __LINE__) #define XA_ALLOC_ARRAY(tag, type, num) (type *)internal::Realloc(nullptr, sizeof(type) * (num), tag, __FILE__, __LINE__) #define XA_REALLOC(tag, ptr, type, num) (type *)internal::Realloc(ptr, sizeof(type) * (num), tag, __FILE__, __LINE__) #define XA_REALLOC_SIZE(tag, ptr, size) (uint8_t *)internal::Realloc(ptr, size, tag, __FILE__, __LINE__) #define XA_FREE(ptr) internal::Realloc(ptr, 0, internal::MemTag::Default, __FILE__, __LINE__) #define XA_NEW(tag, type) new (XA_ALLOC(tag, type)) type() #define XA_NEW_ARGS(tag, type, ...) new (XA_ALLOC(tag, type)) type(__VA_ARGS__) #ifdef _MSC_VER #define XA_INLINE __forceinline #else #define XA_INLINE inline #endif #if defined(__clang__) || defined(__GNUC__) #define XA_NODISCARD [[nodiscard]] #elif defined(_MSC_VER) #define XA_NODISCARD _Check_return_ #else #define XA_NODISCARD #endif #define XA_UNUSED(a) ((void)(a)) #define XA_MERGE_CHARTS 1 #define XA_MERGE_CHARTS_MIN_NORMAL_DEVIATION 0.5f #define XA_RECOMPUTE_CHARTS 1 #define XA_CHECK_PARAM_WINDING 0 #define XA_CHECK_PIECEWISE_CHART_QUALITY 0 #define XA_CHECK_T_JUNCTIONS 0 #define XA_DEBUG_HEAP 0 #define XA_DEBUG_SINGLE_CHART 0 #define XA_DEBUG_ALL_CHARTS_INVALID 0 #define XA_DEBUG_EXPORT_ATLAS_IMAGES 0 #define XA_DEBUG_EXPORT_ATLAS_IMAGES_PER_CHART 0 // Export an atlas image after each chart is added. #define XA_DEBUG_EXPORT_BOUNDARY_GRID 0 #define XA_DEBUG_EXPORT_TGA (XA_DEBUG_EXPORT_ATLAS_IMAGES || XA_DEBUG_EXPORT_BOUNDARY_GRID) #define XA_DEBUG_EXPORT_OBJ_FACE_GROUPS 0 #define XA_DEBUG_EXPORT_OBJ_CHART_GROUPS 0 #define XA_DEBUG_EXPORT_OBJ_PLANAR_REGIONS 0 #define XA_DEBUG_EXPORT_OBJ_CHARTS 0 #define XA_DEBUG_EXPORT_OBJ_TJUNCTION 0 // XA_CHECK_T_JUNCTIONS must also be set #define XA_DEBUG_EXPORT_OBJ_CHARTS_AFTER_PARAMETERIZATION 0 #define XA_DEBUG_EXPORT_OBJ_INVALID_PARAMETERIZATION 0 #define XA_DEBUG_EXPORT_OBJ_RECOMPUTED_CHARTS 0 #define XA_DEBUG_EXPORT_OBJ (0 \ || XA_DEBUG_EXPORT_OBJ_FACE_GROUPS \ || XA_DEBUG_EXPORT_OBJ_CHART_GROUPS \ || XA_DEBUG_EXPORT_OBJ_PLANAR_REGIONS \ || XA_DEBUG_EXPORT_OBJ_CHARTS \ || XA_DEBUG_EXPORT_OBJ_TJUNCTION \ || XA_DEBUG_EXPORT_OBJ_CHARTS_AFTER_PARAMETERIZATION \ || XA_DEBUG_EXPORT_OBJ_INVALID_PARAMETERIZATION \ || XA_DEBUG_EXPORT_OBJ_RECOMPUTED_CHARTS) #ifdef _MSC_VER #define XA_FOPEN(_file, _filename, _mode) { if (fopen_s(&_file, _filename, _mode) != 0) _file = NULL; } #define XA_SPRINTF(_buffer, _size, _format, ...) sprintf_s(_buffer, _size, _format, __VA_ARGS__) #else #define XA_FOPEN(_file, _filename, _mode) _file = fopen(_filename, _mode) #define XA_SPRINTF(_buffer, _size, _format, ...) sprintf(_buffer, _format, __VA_ARGS__) #endif namespace xatlas { namespace internal { static ReallocFunc s_realloc = realloc; static FreeFunc s_free = free; static PrintFunc s_print = printf; static bool s_printVerbose = false; #if XA_PROFILE typedef uint64_t Duration; #define XA_PROFILE_START(var) const std::chrono::time_point var##Start = std::chrono::high_resolution_clock::now(); #define XA_PROFILE_END(var) internal::s_profile.var += uint64_t(std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - var##Start).count()); #define XA_PROFILE_PRINT_AND_RESET(label, var) XA_PRINT("%s%.2f seconds (%g ms)\n", label, internal::durationToSeconds(internal::s_profile.var), internal::durationToMs(internal::s_profile.var)); internal::s_profile.var = 0u; #define XA_PROFILE_ALLOC 0 struct ProfileData { #if XA_PROFILE_ALLOC std::atomic alloc; #endif std::chrono::time_point addMeshRealStart; Duration addMeshReal; Duration addMeshCopyData; std::atomic addMeshThread; std::atomic addMeshCreateColocals; Duration computeChartsReal; std::atomic computeChartsThread; std::atomic createFaceGroups; std::atomic extractInvalidMeshGeometry; std::atomic chartGroupComputeChartsReal; std::atomic chartGroupComputeChartsThread; std::atomic createChartGroupMesh; std::atomic createChartGroupMeshColocals; std::atomic createChartGroupMeshBoundaries; std::atomic buildAtlas; std::atomic buildAtlasInit; std::atomic planarCharts; std::atomic originalUvCharts; std::atomic clusteredCharts; std::atomic clusteredChartsPlaceSeeds; std::atomic clusteredChartsPlaceSeedsBoundaryIntersection; std::atomic clusteredChartsRelocateSeeds; std::atomic clusteredChartsReset; std::atomic clusteredChartsGrow; std::atomic clusteredChartsGrowBoundaryIntersection; std::atomic clusteredChartsMerge; std::atomic clusteredChartsFillHoles; std::atomic copyChartFaces; std::atomic createChartMeshAndParameterizeReal; std::atomic createChartMeshAndParameterizeThread; std::atomic createChartMesh; std::atomic parameterizeCharts; std::atomic parameterizeChartsOrthogonal; std::atomic parameterizeChartsLSCM; std::atomic parameterizeChartsRecompute; std::atomic parameterizeChartsPiecewise; std::atomic parameterizeChartsPiecewiseBoundaryIntersection; std::atomic parameterizeChartsEvaluateQuality; Duration packCharts; Duration packChartsAddCharts; std::atomic packChartsAddChartsThread; std::atomic packChartsAddChartsRestoreTexcoords; Duration packChartsRasterize; Duration packChartsDilate; Duration packChartsFindLocation; Duration packChartsBlit; Duration buildOutputMeshes; }; static ProfileData s_profile; static double durationToMs(Duration c) { return (double)c * 0.001; } static double durationToSeconds(Duration c) { return (double)c * 0.000001; } #else #define XA_PROFILE_START(var) #define XA_PROFILE_END(var) #define XA_PROFILE_PRINT_AND_RESET(label, var) #define XA_PROFILE_ALLOC 0 #endif struct MemTag { enum { Default, BitImage, BVH, Matrix, Mesh, MeshBoundaries, MeshColocals, MeshEdgeMap, MeshIndices, MeshNormals, MeshPositions, MeshTexcoords, OpenNL, SegmentAtlasChartCandidates, SegmentAtlasChartFaces, SegmentAtlasMeshData, SegmentAtlasPlanarRegions, Count }; }; #if XA_DEBUG_HEAP struct AllocHeader { size_t size; const char *file; int line; int tag; uint32_t id; AllocHeader *prev, *next; bool free; }; static std::mutex s_allocMutex; static AllocHeader *s_allocRoot = nullptr; static size_t s_allocTotalCount = 0, s_allocTotalSize = 0, s_allocPeakSize = 0, s_allocCount[MemTag::Count] = { 0 }, s_allocTotalTagSize[MemTag::Count] = { 0 }, s_allocPeakTagSize[MemTag::Count] = { 0 }; static uint32_t s_allocId =0 ; static constexpr uint32_t kAllocRedzone = 0x12345678; static void *Realloc(void *ptr, size_t size, int tag, const char *file, int line) { std::unique_lock lock(s_allocMutex); if (!size && !ptr) return nullptr; uint8_t *realPtr = nullptr; AllocHeader *header = nullptr; if (ptr) { realPtr = ((uint8_t *)ptr) - sizeof(AllocHeader); header = (AllocHeader *)realPtr; } if (realPtr && size) { s_allocTotalSize -= header->size; s_allocTotalTagSize[header->tag] -= header->size; // realloc, remove. if (header->prev) header->prev->next = header->next; else s_allocRoot = header->next; if (header->next) header->next->prev = header->prev; } if (!size) { s_allocTotalSize -= header->size; s_allocTotalTagSize[header->tag] -= header->size; XA_ASSERT(!header->free); // double free header->free = true; return nullptr; } size += sizeof(AllocHeader) + sizeof(kAllocRedzone); uint8_t *newPtr = (uint8_t *)s_realloc(realPtr, size); if (!newPtr) return nullptr; header = (AllocHeader *)newPtr; header->size = size; header->file = file; header->line = line; header->tag = tag; header->id = s_allocId++; header->free = false; if (!s_allocRoot) { s_allocRoot = header; header->prev = header->next = 0; } else { header->prev = nullptr; header->next = s_allocRoot; s_allocRoot = header; header->next->prev = header; } s_allocTotalCount++; s_allocTotalSize += size; if (s_allocTotalSize > s_allocPeakSize) s_allocPeakSize = s_allocTotalSize; s_allocCount[tag]++; s_allocTotalTagSize[tag] += size; if (s_allocTotalTagSize[tag] > s_allocPeakTagSize[tag]) s_allocPeakTagSize[tag] = s_allocTotalTagSize[tag]; auto redzone = (uint32_t *)(newPtr + size - sizeof(kAllocRedzone)); *redzone = kAllocRedzone; return newPtr + sizeof(AllocHeader); } static void ReportLeaks() { printf("Checking for memory leaks...\n"); bool anyLeaks = false; AllocHeader *header = s_allocRoot; while (header) { if (!header->free) { printf(" Leak: ID %u, %zu bytes, %s %d\n", header->id, header->size, header->file, header->line); anyLeaks = true; } auto redzone = (const uint32_t *)((const uint8_t *)header + header->size - sizeof(kAllocRedzone)); if (*redzone != kAllocRedzone) printf(" Redzone corrupted: %zu bytes %s %d\n", header->size, header->file, header->line); header = header->next; } if (!anyLeaks) printf(" No memory leaks\n"); header = s_allocRoot; while (header) { AllocHeader *destroy = header; header = header->next; s_realloc(destroy, 0); } s_allocRoot = nullptr; s_allocTotalSize = s_allocPeakSize = 0; for (int i = 0; i < MemTag::Count; i++) s_allocTotalTagSize[i] = s_allocPeakTagSize[i] = 0; } static void PrintMemoryUsage() { XA_PRINT("Total allocations: %zu\n", s_allocTotalCount); XA_PRINT("Memory usage: %0.2fMB current, %0.2fMB peak\n", internal::s_allocTotalSize / 1024.0f / 1024.0f, internal::s_allocPeakSize / 1024.0f / 1024.0f); static const char *labels[] = { // Sync with MemTag "Default", "BitImage", "BVH", "Matrix", "Mesh", "MeshBoundaries", "MeshColocals", "MeshEdgeMap", "MeshIndices", "MeshNormals", "MeshPositions", "MeshTexcoords", "OpenNL", "SegmentAtlasChartCandidates", "SegmentAtlasChartFaces", "SegmentAtlasMeshData", "SegmentAtlasPlanarRegions" }; for (int i = 0; i < MemTag::Count; i++) { XA_PRINT(" %s: %zu allocations, %0.2fMB current, %0.2fMB peak\n", labels[i], internal::s_allocCount[i], internal::s_allocTotalTagSize[i] / 1024.0f / 1024.0f, internal::s_allocPeakTagSize[i] / 1024.0f / 1024.0f); } } #define XA_PRINT_MEM_USAGE internal::PrintMemoryUsage(); #else static void *Realloc(void *ptr, size_t size, int /*tag*/, const char * /*file*/, int /*line*/) { if (size == 0 && !ptr) return nullptr; if (size == 0 && s_free) { s_free(ptr); return nullptr; } #if XA_PROFILE_ALLOC XA_PROFILE_START(alloc) #endif void *mem = s_realloc(ptr, size); #if XA_PROFILE_ALLOC XA_PROFILE_END(alloc) #endif XA_DEBUG_ASSERT(size <= 0 || (size > 0 && mem)); return mem; } #define XA_PRINT_MEM_USAGE #endif static constexpr float kPi = 3.14159265358979323846f; static constexpr float kPi2 = 6.28318530717958647692f; static constexpr float kEpsilon = 0.0001f; static constexpr float kAreaEpsilon = FLT_EPSILON; static constexpr float kNormalEpsilon = 0.001f; static int align(int x, int a) { return (x + a - 1) & ~(a - 1); } template static T max(const T &a, const T &b) { return a > b ? a : b; } template static T min(const T &a, const T &b) { return a < b ? a : b; } template static T max3(const T &a, const T &b, const T &c) { return max(a, max(b, c)); } /// Return the maximum of the three arguments. template static T min3(const T &a, const T &b, const T &c) { return min(a, min(b, c)); } /// Clamp between two values. template static T clamp(const T &x, const T &a, const T &b) { return min(max(x, a), b); } template static void swap(T &a, T &b) { T temp = a; a = b; b = temp; } union FloatUint32 { float f; uint32_t u; }; static bool isFinite(float f) { FloatUint32 fu; fu.f = f; return fu.u != 0x7F800000u && fu.u != 0x7F800001u; } static bool isNan(float f) { return f != f; } // Robust floating point comparisons: // http://realtimecollisiondetection.net/blog/?p=89 static bool equal(const float f0, const float f1, const float epsilon) { //return fabs(f0-f1) <= epsilon; return fabs(f0 - f1) <= epsilon * max3(1.0f, fabsf(f0), fabsf(f1)); } static int ftoi_ceil(float val) { return (int)ceilf(val); } static bool isZero(const float f, const float epsilon) { return fabs(f) <= epsilon; } static float square(float f) { return f * f; } /** Return the next power of two. * @see http://graphics.stanford.edu/~seander/bithacks.html * @warning Behaviour for 0 is undefined. * @note isPowerOfTwo(x) == true -> nextPowerOfTwo(x) == x * @note nextPowerOfTwo(x) = 2 << log2(x-1) */ static uint32_t nextPowerOfTwo(uint32_t x) { XA_DEBUG_ASSERT( x != 0 ); // On modern CPUs this is supposed to be as fast as using the bsr instruction. x--; x |= x >> 1; x |= x >> 2; x |= x >> 4; x |= x >> 8; x |= x >> 16; return x + 1; } class Vector2 { public: Vector2() {} explicit Vector2(float f) : x(f), y(f) {} Vector2(float _x, float _y): x(_x), y(_y) {} Vector2 operator-() const { return Vector2(-x, -y); } void operator+=(const Vector2 &v) { x += v.x; y += v.y; } void operator-=(const Vector2 &v) { x -= v.x; y -= v.y; } void operator*=(float s) { x *= s; y *= s; } void operator*=(const Vector2 &v) { x *= v.x; y *= v.y; } float x, y; }; static bool operator==(const Vector2 &a, const Vector2 &b) { return a.x == b.x && a.y == b.y; } static bool operator!=(const Vector2 &a, const Vector2 &b) { return a.x != b.x || a.y != b.y; } /*static Vector2 operator+(const Vector2 &a, const Vector2 &b) { return Vector2(a.x + b.x, a.y + b.y); }*/ static Vector2 operator-(const Vector2 &a, const Vector2 &b) { return Vector2(a.x - b.x, a.y - b.y); } static Vector2 operator*(const Vector2 &v, float s) { return Vector2(v.x * s, v.y * s); } static float dot(const Vector2 &a, const Vector2 &b) { return a.x * b.x + a.y * b.y; } static float lengthSquared(const Vector2 &v) { return v.x * v.x + v.y * v.y; } static float length(const Vector2 &v) { return sqrtf(lengthSquared(v)); } #if XA_DEBUG static bool isNormalized(const Vector2 &v, float epsilon = kNormalEpsilon) { return equal(length(v), 1, epsilon); } #endif static Vector2 normalize(const Vector2 &v) { const float l = length(v); XA_DEBUG_ASSERT(l > 0.0f); // Never negative. const Vector2 n = v * (1.0f / l); XA_DEBUG_ASSERT(isNormalized(n)); return n; } static Vector2 normalizeSafe(const Vector2 &v, const Vector2 &fallback) { const float l = length(v); if (l > 0.0f) // Never negative. return v * (1.0f / l); return fallback; } static bool equal(const Vector2 &v1, const Vector2 &v2, float epsilon) { return equal(v1.x, v2.x, epsilon) && equal(v1.y, v2.y, epsilon); } static Vector2 min(const Vector2 &a, const Vector2 &b) { return Vector2(min(a.x, b.x), min(a.y, b.y)); } static Vector2 max(const Vector2 &a, const Vector2 &b) { return Vector2(max(a.x, b.x), max(a.y, b.y)); } static bool isFinite(const Vector2 &v) { return isFinite(v.x) && isFinite(v.y); } static float triangleArea(const Vector2 &a, const Vector2 &b, const Vector2 &c) { // IC: While it may be appealing to use the following expression: //return (c.x * a.y + a.x * b.y + b.x * c.y - b.x * a.y - c.x * b.y - a.x * c.y) * 0.5f; // That's actually a terrible idea. Small triangles far from the origin can end up producing fairly large floating point // numbers and the results becomes very unstable and dependent on the order of the factors. // Instead, it's preferable to subtract the vertices first, and multiply the resulting small values together. The result // in this case is always much more accurate (as long as the triangle is small) and less dependent of the location of // the triangle. //return ((a.x - c.x) * (b.y - c.y) - (a.y - c.y) * (b.x - c.x)) * 0.5f; const Vector2 v0 = a - c; const Vector2 v1 = b - c; return (v0.x * v1.y - v0.y * v1.x) * 0.5f; } static bool linesIntersect(const Vector2 &a1, const Vector2 &a2, const Vector2 &b1, const Vector2 &b2, float epsilon) { const Vector2 v0 = a2 - a1; const Vector2 v1 = b2 - b1; const float denom = -v1.x * v0.y + v0.x * v1.y; if (equal(denom, 0.0f, epsilon)) return false; const float s = (-v0.y * (a1.x - b1.x) + v0.x * (a1.y - b1.y)) / denom; if (s > epsilon && s < 1.0f - epsilon) { const float t = ( v1.x * (a1.y - b1.y) - v1.y * (a1.x - b1.x)) / denom; return t > epsilon && t < 1.0f - epsilon; } return false; } struct Vector2i { Vector2i() {} Vector2i(int32_t _x, int32_t _y) : x(_x), y(_y) {} int32_t x, y; }; class Vector3 { public: Vector3() {} explicit Vector3(float f) : x(f), y(f), z(f) {} Vector3(float _x, float _y, float _z) : x(_x), y(_y), z(_z) {} Vector3(const Vector2 &v, float _z) : x(v.x), y(v.y), z(_z) {} Vector2 xy() const { return Vector2(x, y); } Vector3 operator-() const { return Vector3(-x, -y, -z); } void operator+=(const Vector3 &v) { x += v.x; y += v.y; z += v.z; } void operator-=(const Vector3 &v) { x -= v.x; y -= v.y; z -= v.z; } void operator*=(float s) { x *= s; y *= s; z *= s; } void operator/=(float s) { float is = 1.0f / s; x *= is; y *= is; z *= is; } void operator*=(const Vector3 &v) { x *= v.x; y *= v.y; z *= v.z; } void operator/=(const Vector3 &v) { x /= v.x; y /= v.y; z /= v.z; } float x, y, z; }; static Vector3 operator+(const Vector3 &a, const Vector3 &b) { return Vector3(a.x + b.x, a.y + b.y, a.z + b.z); } static Vector3 operator-(const Vector3 &a, const Vector3 &b) { return Vector3(a.x - b.x, a.y - b.y, a.z - b.z); } static bool operator==(const Vector3 &a, const Vector3 &b) { return a.x == b.x && a.y == b.y && a.z == b.z; } static Vector3 cross(const Vector3 &a, const Vector3 &b) { return Vector3(a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x); } static Vector3 operator*(const Vector3 &v, float s) { return Vector3(v.x * s, v.y * s, v.z * s); } static Vector3 operator/(const Vector3 &v, float s) { return v * (1.0f / s); } static float dot(const Vector3 &a, const Vector3 &b) { return a.x * b.x + a.y * b.y + a.z * b.z; } static float lengthSquared(const Vector3 &v) { return v.x * v.x + v.y * v.y + v.z * v.z; } static float length(const Vector3 &v) { return sqrtf(lengthSquared(v)); } static bool isNormalized(const Vector3 &v, float epsilon = kNormalEpsilon) { return equal(length(v), 1.0f, epsilon); } static Vector3 normalize(const Vector3 &v) { const float l = length(v); XA_DEBUG_ASSERT(l > 0.0f); // Never negative. const Vector3 n = v * (1.0f / l); XA_DEBUG_ASSERT(isNormalized(n)); return n; } static Vector3 normalizeSafe(const Vector3 &v, const Vector3 &fallback) { const float l = length(v); if (l > 0.0f) // Never negative. return v * (1.0f / l); return fallback; } static bool equal(const Vector3 &v0, const Vector3 &v1, float epsilon) { return fabs(v0.x - v1.x) <= epsilon && fabs(v0.y - v1.y) <= epsilon && fabs(v0.z - v1.z) <= epsilon; } static Vector3 min(const Vector3 &a, const Vector3 &b) { return Vector3(min(a.x, b.x), min(a.y, b.y), min(a.z, b.z)); } static Vector3 max(const Vector3 &a, const Vector3 &b) { return Vector3(max(a.x, b.x), max(a.y, b.y), max(a.z, b.z)); } #if XA_DEBUG bool isFinite(const Vector3 &v) { return isFinite(v.x) && isFinite(v.y) && isFinite(v.z); } #endif struct Extents2 { Vector2 min, max; Extents2() {} Extents2(Vector2 p1, Vector2 p2) { min = xatlas::internal::min(p1, p2); max = xatlas::internal::max(p1, p2); } void reset() { min.x = min.y = FLT_MAX; max.x = max.y = -FLT_MAX; } void add(Vector2 p) { min = xatlas::internal::min(min, p); max = xatlas::internal::max(max, p); } Vector2 midpoint() const { return Vector2(min.x + (max.x - min.x) * 0.5f, min.y + (max.y - min.y) * 0.5f); } static bool intersect(const Extents2 &e1, const Extents2 &e2) { return e1.min.x <= e2.max.x && e1.max.x >= e2.min.x && e1.min.y <= e2.max.y && e1.max.y >= e2.min.y; } }; // From Fast-BVH struct AABB { AABB() : min(FLT_MAX, FLT_MAX, FLT_MAX), max(-FLT_MAX, -FLT_MAX, -FLT_MAX) {} AABB(const Vector3 &_min, const Vector3 &_max) : min(_min), max(_max) { } AABB(const Vector3 &p, float radius = 0.0f) : min(p), max(p) { if (radius > 0.0f) expand(radius); } bool intersect(const AABB &other) const { return min.x <= other.max.x && max.x >= other.min.x && min.y <= other.max.y && max.y >= other.min.y && min.z <= other.max.z && max.z >= other.min.z; } void expandToInclude(const Vector3 &p) { min = internal::min(min, p); max = internal::max(max, p); } void expandToInclude(const AABB &aabb) { min = internal::min(min, aabb.min); max = internal::max(max, aabb.max); } void expand(float amount) { min -= Vector3(amount); max += Vector3(amount); } Vector3 centroid() const { return min + (max - min) * 0.5f; } uint32_t maxDimension() const { const Vector3 extent = max - min; uint32_t result = 0; if (extent.y > extent.x) { result = 1; if (extent.z > extent.y) result = 2; } else if(extent.z > extent.x) result = 2; return result; } Vector3 min, max; }; struct ArrayBase { ArrayBase(uint32_t _elementSize, int memTag = MemTag::Default) : buffer(nullptr), elementSize(_elementSize), size(0), capacity(0) { #if XA_DEBUG_HEAP this->memTag = memTag; #else XA_UNUSED(memTag); #endif } ~ArrayBase() { XA_FREE(buffer); } XA_INLINE void clear() { size = 0; } void copyFrom(const uint8_t *data, uint32_t length) { XA_DEBUG_ASSERT(data); XA_DEBUG_ASSERT(length > 0); resize(length, true); if (buffer && data && length > 0) memcpy(buffer, data, length * elementSize); } void copyTo(ArrayBase &other) const { XA_DEBUG_ASSERT(elementSize == other.elementSize); XA_DEBUG_ASSERT(size > 0); other.resize(size, true); if (other.buffer && buffer && size > 0) memcpy(other.buffer, buffer, size * elementSize); } void destroy() { size = 0; XA_FREE(buffer); buffer = nullptr; capacity = 0; size = 0; } // Insert the given element at the given index shifting all the elements up. void insertAt(uint32_t index, const uint8_t *value) { XA_DEBUG_ASSERT(index >= 0 && index <= size); XA_DEBUG_ASSERT(value); resize(size + 1, false); XA_DEBUG_ASSERT(buffer); if (buffer && index < size - 1) memmove(buffer + elementSize * (index + 1), buffer + elementSize * index, elementSize * (size - 1 - index)); if (buffer && value) memcpy(&buffer[index * elementSize], value, elementSize); } void moveTo(ArrayBase &other) { XA_DEBUG_ASSERT(elementSize == other.elementSize); other.destroy(); other.buffer = buffer; other.elementSize = elementSize; other.size = size; other.capacity = capacity; #if XA_DEBUG_HEAP other.memTag = memTag; #endif buffer = nullptr; elementSize = size = capacity = 0; } void pop_back() { XA_DEBUG_ASSERT(size > 0); resize(size - 1, false); } void push_back(const uint8_t *value) { XA_DEBUG_ASSERT(value < buffer || value >= buffer + size); XA_DEBUG_ASSERT(value); resize(size + 1, false); XA_DEBUG_ASSERT(buffer); if (buffer && value) memcpy(&buffer[(size - 1) * elementSize], value, elementSize); } void push_back(const ArrayBase &other) { XA_DEBUG_ASSERT(elementSize == other.elementSize); if (other.size > 0) { const uint32_t oldSize = size; resize(size + other.size, false); XA_DEBUG_ASSERT(buffer); if (buffer) memcpy(buffer + oldSize * elementSize, other.buffer, other.size * other.elementSize); } } // Remove the element at the given index. This is an expensive operation! void removeAt(uint32_t index) { XA_DEBUG_ASSERT(index >= 0 && index < size); XA_DEBUG_ASSERT(buffer); if (buffer) { if (size > 1) memmove(buffer + elementSize * index, buffer + elementSize * (index + 1), elementSize * (size - 1 - index)); if (size > 0) size--; } } // Element at index is swapped with the last element, then the array length is decremented. void removeAtFast(uint32_t index) { XA_DEBUG_ASSERT(index >= 0 && index < size); XA_DEBUG_ASSERT(buffer); if (buffer) { if (size > 1 && index != size - 1) memcpy(buffer + elementSize * index, buffer + elementSize * (size - 1), elementSize); if (size > 0) size--; } } void reserve(uint32_t desiredSize) { if (desiredSize > capacity) setArrayCapacity(desiredSize); } void resize(uint32_t newSize, bool exact) { size = newSize; if (size > capacity) { // First allocation is always exact. Otherwise, following allocations grow array to 150% of desired size. uint32_t newBufferSize; if (capacity == 0 || exact) newBufferSize = size; else newBufferSize = size + (size >> 2); setArrayCapacity(newBufferSize); } } void setArrayCapacity(uint32_t newCapacity) { XA_DEBUG_ASSERT(newCapacity >= size); if (newCapacity == 0) { // free the buffer. if (buffer != nullptr) { XA_FREE(buffer); buffer = nullptr; } } else { // realloc the buffer #if XA_DEBUG_HEAP buffer = XA_REALLOC_SIZE(memTag, buffer, newCapacity * elementSize); #else buffer = XA_REALLOC_SIZE(MemTag::Default, buffer, newCapacity * elementSize); #endif } capacity = newCapacity; } #if XA_DEBUG_HEAP void setMemTag(int _memTag) { this->memTag = _memTag; } #endif uint8_t *buffer; uint32_t elementSize; uint32_t size; uint32_t capacity; #if XA_DEBUG_HEAP int memTag; #endif }; template class Array { public: Array(int memTag = MemTag::Default) : m_base(sizeof(T), memTag) {} Array(const Array&) = delete; Array &operator=(const Array &) = delete; XA_INLINE const T &operator[](uint32_t index) const { XA_DEBUG_ASSERT(index < m_base.size); XA_DEBUG_ASSERT(m_base.buffer); return ((const T *)m_base.buffer)[index]; } XA_INLINE T &operator[](uint32_t index) { XA_DEBUG_ASSERT(index < m_base.size); XA_DEBUG_ASSERT(m_base.buffer); return ((T *)m_base.buffer)[index]; } XA_INLINE const T &back() const { XA_DEBUG_ASSERT(!isEmpty()); return ((const T *)m_base.buffer)[m_base.size - 1]; } XA_INLINE T *begin() { return (T *)m_base.buffer; } XA_INLINE void clear() { m_base.clear(); } bool contains(const T &value) const { for (uint32_t i = 0; i < m_base.size; i++) { if (((const T *)m_base.buffer)[i] == value) return true; } return false; } void copyFrom(const T *data, uint32_t length) { m_base.copyFrom((const uint8_t *)data, length); } void copyTo(Array &other) const { m_base.copyTo(other.m_base); } XA_INLINE const T *data() const { return (const T *)m_base.buffer; } XA_INLINE T *data() { return (T *)m_base.buffer; } void destroy() { m_base.destroy(); } XA_INLINE T *end() { return (T *)m_base.buffer + m_base.size; } XA_INLINE bool isEmpty() const { return m_base.size == 0; } void insertAt(uint32_t index, const T &value) { m_base.insertAt(index, (const uint8_t *)&value); } void moveTo(Array &other) { m_base.moveTo(other.m_base); } void push_back(const T &value) { m_base.push_back((const uint8_t *)&value); } void push_back(const Array &other) { m_base.push_back(other.m_base); } void pop_back() { m_base.pop_back(); } void removeAt(uint32_t index) { m_base.removeAt(index); } void removeAtFast(uint32_t index) { m_base.removeAtFast(index); } void reserve(uint32_t desiredSize) { m_base.reserve(desiredSize); } void resize(uint32_t newSize) { m_base.resize(newSize, true); } void runCtors() { for (uint32_t i = 0; i < m_base.size; i++) new (&((T *)m_base.buffer)[i]) T; } void runDtors() { for (uint32_t i = 0; i < m_base.size; i++) ((T *)m_base.buffer)[i].~T(); } void fill(const T &value) { auto buffer = (T *)m_base.buffer; for (uint32_t i = 0; i < m_base.size; i++) buffer[i] = value; } void fillBytes(uint8_t value) { if (m_base.buffer && m_base.size > 0) memset(m_base.buffer, (int)value, m_base.size * m_base.elementSize); } #if XA_DEBUG_HEAP void setMemTag(int memTag) { m_base.setMemTag(memTag); } #endif XA_INLINE uint32_t size() const { return m_base.size; } XA_INLINE void zeroOutMemory() { if (m_base.buffer && m_base.size > 0) memset(m_base.buffer, 0, m_base.elementSize * m_base.size); } private: ArrayBase m_base; }; template struct ArrayView { ArrayView() : data(nullptr), length(0) {} ArrayView(Array &a) : data(a.data()), length(a.size()) {} ArrayView(T *_data, uint32_t _length) : data(_data), length(_length) {} ArrayView &operator=(Array &a) { data = a.data(); length = a.size(); return *this; } XA_INLINE const T &operator[](uint32_t index) const { XA_DEBUG_ASSERT(index < length); return data[index]; } XA_INLINE T &operator[](uint32_t index) { XA_DEBUG_ASSERT(index < length); return data[index]; } T *data; uint32_t length; }; template struct ConstArrayView { ConstArrayView() : data(nullptr), length(0) {} ConstArrayView(const Array &a) : data(a.data()), length(a.size()) {} ConstArrayView(ArrayView av) : data(av.data), length(av.length) {} ConstArrayView(const T *_data, uint32_t _length) : data(_data), length(_length) {} ConstArrayView &operator=(const Array &a) { data = a.data(); length = a.size(); return *this; } XA_INLINE const T &operator[](uint32_t index) const { XA_DEBUG_ASSERT(index < length); return data[index]; } const T *data; uint32_t length; }; /// Basis class to compute tangent space basis, ortogonalizations and to transform vectors from one space to another. struct Basis { XA_NODISCARD static Vector3 computeTangent(const Vector3 &normal) { XA_ASSERT(isNormalized(normal)); // Choose minimum axis. Vector3 tangent; if (fabsf(normal.x) < fabsf(normal.y) && fabsf(normal.x) < fabsf(normal.z)) tangent = Vector3(1, 0, 0); else if (fabsf(normal.y) < fabsf(normal.z)) tangent = Vector3(0, 1, 0); else tangent = Vector3(0, 0, 1); // Ortogonalize tangent -= normal * dot(normal, tangent); tangent = normalize(tangent); return tangent; } XA_NODISCARD static Vector3 computeBitangent(const Vector3 &normal, const Vector3 &tangent) { return cross(normal, tangent); } Vector3 tangent = Vector3(0.0f); Vector3 bitangent = Vector3(0.0f); Vector3 normal = Vector3(0.0f); }; // Simple bit array. class BitArray { public: BitArray() : m_size(0) {} BitArray(uint32_t sz) { resize(sz); } void resize(uint32_t new_size) { m_size = new_size; m_wordArray.resize((m_size + 31) >> 5); } bool get(uint32_t index) const { XA_DEBUG_ASSERT(index < m_size); return (m_wordArray[index >> 5] & (1 << (index & 31))) != 0; } void set(uint32_t index) { XA_DEBUG_ASSERT(index < m_size); m_wordArray[index >> 5] |= (1 << (index & 31)); } void unset(uint32_t index) { XA_DEBUG_ASSERT(index < m_size); m_wordArray[index >> 5] &= ~(1 << (index & 31)); } void zeroOutMemory() { m_wordArray.zeroOutMemory(); } private: uint32_t m_size; // Number of bits stored. Array m_wordArray; }; class BitImage { public: BitImage() : m_width(0), m_height(0), m_rowStride(0), m_data(MemTag::BitImage) {} BitImage(uint32_t w, uint32_t h) : m_width(w), m_height(h), m_data(MemTag::BitImage) { m_rowStride = (m_width + 63) >> 6; m_data.resize(m_rowStride * m_height); m_data.zeroOutMemory(); } BitImage(const BitImage &other) = delete; BitImage &operator=(const BitImage &other) = delete; uint32_t width() const { return m_width; } uint32_t height() const { return m_height; } void copyTo(BitImage &other) { other.m_width = m_width; other.m_height = m_height; other.m_rowStride = m_rowStride; m_data.copyTo(other.m_data); } void resize(uint32_t w, uint32_t h, bool discard) { const uint32_t rowStride = (w + 63) >> 6; if (discard) { m_data.resize(rowStride * h); m_data.zeroOutMemory(); } else { Array tmp; tmp.resize(rowStride * h); memset(tmp.data(), 0, tmp.size() * sizeof(uint64_t)); // If only height has changed, can copy all rows at once. if (rowStride == m_rowStride) { memcpy(tmp.data(), m_data.data(), m_rowStride * min(m_height, h) * sizeof(uint64_t)); } else if (m_width > 0 && m_height > 0) { const uint32_t height = min(m_height, h); for (uint32_t i = 0; i < height; i++) memcpy(&tmp[i * rowStride], &m_data[i * m_rowStride], min(rowStride, m_rowStride) * sizeof(uint64_t)); } tmp.moveTo(m_data); } m_width = w; m_height = h; m_rowStride = rowStride; } bool get(uint32_t x, uint32_t y) const { XA_DEBUG_ASSERT(x < m_width && y < m_height); const uint32_t index = (x >> 6) + y * m_rowStride; return (m_data[index] & (UINT64_C(1) << (uint64_t(x) & UINT64_C(63)))) != 0; } void set(uint32_t x, uint32_t y) { XA_DEBUG_ASSERT(x < m_width && y < m_height); const uint32_t index = (x >> 6) + y * m_rowStride; m_data[index] |= UINT64_C(1) << (uint64_t(x) & UINT64_C(63)); XA_DEBUG_ASSERT(get(x, y)); } void zeroOutMemory() { m_data.zeroOutMemory(); } bool canBlit(const BitImage &image, uint32_t offsetX, uint32_t offsetY) const { for (uint32_t y = 0; y < image.m_height; y++) { const uint32_t thisY = y + offsetY; if (thisY >= m_height) continue; uint32_t x = 0; for (;;) { const uint32_t thisX = x + offsetX; if (thisX >= m_width) break; const uint32_t thisBlockShift = thisX % 64; const uint64_t thisBlock = m_data[(thisX >> 6) + thisY * m_rowStride] >> thisBlockShift; const uint32_t blockShift = x % 64; const uint64_t block = image.m_data[(x >> 6) + y * image.m_rowStride] >> blockShift; if ((thisBlock & block) != 0) return false; x += 64 - max(thisBlockShift, blockShift); if (x >= image.m_width) break; } } return true; } void dilate(uint32_t padding) { BitImage tmp(m_width, m_height); for (uint32_t p = 0; p < padding; p++) { tmp.zeroOutMemory(); for (uint32_t y = 0; y < m_height; y++) { for (uint32_t x = 0; x < m_width; x++) { bool b = get(x, y); if (!b) { if (x > 0) { b |= get(x - 1, y); if (y > 0) b |= get(x - 1, y - 1); if (y < m_height - 1) b |= get(x - 1, y + 1); } if (y > 0) b |= get(x, y - 1); if (y < m_height - 1) b |= get(x, y + 1); if (x < m_width - 1) { b |= get(x + 1, y); if (y > 0) b |= get(x + 1, y - 1); if (y < m_height - 1) b |= get(x + 1, y + 1); } } if (b) tmp.set(x, y); } } tmp.m_data.copyTo(m_data); } } private: uint32_t m_width; uint32_t m_height; uint32_t m_rowStride; // In uint64_t's Array m_data; }; // From Fast-BVH class BVH { public: BVH(const Array &objectAabbs, uint32_t leafSize = 4) : m_objectIds(MemTag::BVH), m_nodes(MemTag::BVH) { m_objectAabbs = &objectAabbs; if (m_objectAabbs->isEmpty()) return; m_objectIds.resize(objectAabbs.size()); for (uint32_t i = 0; i < m_objectIds.size(); i++) m_objectIds[i] = i; BuildEntry todo[128]; uint32_t stackptr = 0; const uint32_t kRoot = 0xfffffffc; const uint32_t kUntouched = 0xffffffff; const uint32_t kTouchedTwice = 0xfffffffd; // Push the root todo[stackptr].start = 0; todo[stackptr].end = objectAabbs.size(); todo[stackptr].parent = kRoot; stackptr++; Node node; m_nodes.reserve(objectAabbs.size() * 2); uint32_t nNodes = 0; while(stackptr > 0) { // Pop the next item off of the stack const BuildEntry &bnode = todo[--stackptr]; const uint32_t start = bnode.start; const uint32_t end = bnode.end; const uint32_t nPrims = end - start; nNodes++; node.start = start; node.nPrims = nPrims; node.rightOffset = kUntouched; // Calculate the bounding box for this node AABB bb(objectAabbs[m_objectIds[start]]); AABB bc(objectAabbs[m_objectIds[start]].centroid()); for(uint32_t p = start + 1; p < end; ++p) { bb.expandToInclude(objectAabbs[m_objectIds[p]]); bc.expandToInclude(objectAabbs[m_objectIds[p]].centroid()); } node.aabb = bb; // If the number of primitives at this point is less than the leaf // size, then this will become a leaf. (Signified by rightOffset == 0) if (nPrims <= leafSize) node.rightOffset = 0; m_nodes.push_back(node); // Child touches parent... // Special case: Don't do this for the root. if (bnode.parent != kRoot) { m_nodes[bnode.parent].rightOffset--; // When this is the second touch, this is the right child. // The right child sets up the offset for the flat tree. if (m_nodes[bnode.parent].rightOffset == kTouchedTwice ) m_nodes[bnode.parent].rightOffset = nNodes - 1 - bnode.parent; } // If this is a leaf, no need to subdivide. if (node.rightOffset == 0) continue; // Set the split dimensions const uint32_t split_dim = bc.maxDimension(); // Split on the center of the longest axis const float split_coord = 0.5f * ((&bc.min.x)[split_dim] + (&bc.max.x)[split_dim]); // Partition the list of objects on this split uint32_t mid = start; for (uint32_t i = start; i < end; ++i) { const Vector3 centroid(objectAabbs[m_objectIds[i]].centroid()); if ((¢roid.x)[split_dim] < split_coord) { swap(m_objectIds[i], m_objectIds[mid]); ++mid; } } // If we get a bad split, just choose the center... if (mid == start || mid == end) mid = start + (end - start) / 2; // Push right child todo[stackptr].start = mid; todo[stackptr].end = end; todo[stackptr].parent = nNodes - 1; stackptr++; // Push left child todo[stackptr].start = start; todo[stackptr].end = mid; todo[stackptr].parent = nNodes - 1; stackptr++; } } void query(const AABB &queryAabb, Array &result) const { result.clear(); // Working set uint32_t todo[64]; int32_t stackptr = 0; // "Push" on the root node to the working set todo[stackptr] = 0; while(stackptr >= 0) { // Pop off the next node to work on. const int ni = todo[stackptr--]; const Node &node = m_nodes[ni]; // Is leaf -> Intersect if (node.rightOffset == 0) { for(uint32_t o = 0; o < node.nPrims; ++o) { const uint32_t obj = node.start + o; if (queryAabb.intersect((*m_objectAabbs)[m_objectIds[obj]])) result.push_back(m_objectIds[obj]); } } else { // Not a leaf const uint32_t left = ni + 1; const uint32_t right = ni + node.rightOffset; if (queryAabb.intersect(m_nodes[left].aabb)) todo[++stackptr] = left; if (queryAabb.intersect(m_nodes[right].aabb)) todo[++stackptr] = right; } } } private: struct BuildEntry { uint32_t parent; // If non-zero then this is the index of the parent. (used in offsets) uint32_t start, end; // The range of objects in the object list covered by this node. }; struct Node { AABB aabb; uint32_t start, nPrims, rightOffset; }; const Array *m_objectAabbs; Array m_objectIds; Array m_nodes; }; struct Fit { static bool computeBasis(ConstArrayView points, Basis *basis) { if (computeLeastSquaresNormal(points, &basis->normal)) { basis->tangent = Basis::computeTangent(basis->normal); basis->bitangent = Basis::computeBitangent(basis->normal, basis->tangent); return true; } return computeEigen(points, basis); } private: // Fit a plane to a collection of points. // Fast, and accurate to within a few degrees. // Returns None if the points do not span a plane. // https://www.ilikebigbits.com/2015_03_04_plane_from_points.html static bool computeLeastSquaresNormal(ConstArrayView points, Vector3 *normal) { XA_DEBUG_ASSERT(points.length >= 3); if (points.length == 3) { *normal = normalize(cross(points[2] - points[0], points[1] - points[0])); return true; } const float invN = 1.0f / float(points.length); Vector3 centroid(0.0f); for (uint32_t i = 0; i < points.length; i++) centroid += points[i]; centroid *= invN; // Calculate full 3x3 covariance matrix, excluding symmetries: float xx = 0.0f, xy = 0.0f, xz = 0.0f, yy = 0.0f, yz = 0.0f, zz = 0.0f; for (uint32_t i = 0; i < points.length; i++) { Vector3 r = points[i] - centroid; xx += r.x * r.x; xy += r.x * r.y; xz += r.x * r.z; yy += r.y * r.y; yz += r.y * r.z; zz += r.z * r.z; } #if 0 xx *= invN; xy *= invN; xz *= invN; yy *= invN; yz *= invN; zz *= invN; Vector3 weighted_dir(0.0f); { float det_x = yy * zz - yz * yz; const Vector3 axis_dir(det_x, xz * yz - xy * zz, xy * yz - xz * yy); float weight = det_x * det_x; if (dot(weighted_dir, axis_dir) < 0.0f) weight = -weight; weighted_dir += axis_dir * weight; } { float det_y = xx * zz - xz * xz; const Vector3 axis_dir(xz * yz - xy * zz, det_y, xy * xz - yz * xx); float weight = det_y * det_y; if (dot(weighted_dir, axis_dir) < 0.0f) weight = -weight; weighted_dir += axis_dir * weight; } { float det_z = xx * yy - xy * xy; const Vector3 axis_dir(xy * yz - xz * yy, xy * xz - yz * xx, det_z); float weight = det_z * det_z; if (dot(weighted_dir, axis_dir) < 0.0f) weight = -weight; weighted_dir += axis_dir * weight; } *normal = normalize(weighted_dir, kEpsilon); #else const float det_x = yy * zz - yz * yz; const float det_y = xx * zz - xz * xz; const float det_z = xx * yy - xy * xy; const float det_max = max(det_x, max(det_y, det_z)); if (det_max <= 0.0f) return false; // The points don't span a plane // Pick path with best conditioning: Vector3 dir(0.0f); if (det_max == det_x) dir = Vector3(det_x,xz * yz - xy * zz,xy * yz - xz * yy); else if (det_max == det_y) dir = Vector3(xz * yz - xy * zz, det_y, xy * xz - yz * xx); else if (det_max == det_z) dir = Vector3(xy * yz - xz * yy, xy * xz - yz * xx, det_z); const float len = length(dir); if (isZero(len, kEpsilon)) return false; *normal = dir * (1.0f / len); #endif return isNormalized(*normal); } static bool computeEigen(ConstArrayView points, Basis *basis) { float matrix[6]; computeCovariance(points, matrix); if (matrix[0] == 0 && matrix[3] == 0 && matrix[5] == 0) return false; float eigenValues[3]; Vector3 eigenVectors[3]; if (!eigenSolveSymmetric3(matrix, eigenValues, eigenVectors)) return false; basis->normal = normalize(eigenVectors[2]); basis->tangent = normalize(eigenVectors[0]); basis->bitangent = normalize(eigenVectors[1]); return true; } static Vector3 computeCentroid(ConstArrayView points) { Vector3 centroid(0.0f); for (uint32_t i = 0; i < points.length; i++) centroid += points[i]; centroid /= float(points.length); return centroid; } static Vector3 computeCovariance(ConstArrayView points, float * covariance) { // compute the centroid Vector3 centroid = computeCentroid(points); // compute covariance matrix for (int i = 0; i < 6; i++) { covariance[i] = 0.0f; } for (uint32_t i = 0; i < points.length; i++) { Vector3 v = points[i] - centroid; covariance[0] += v.x * v.x; covariance[1] += v.x * v.y; covariance[2] += v.x * v.z; covariance[3] += v.y * v.y; covariance[4] += v.y * v.z; covariance[5] += v.z * v.z; } return centroid; } // Tridiagonal solver from Charles Bloom. // Householder transforms followed by QL decomposition. // Seems to be based on the code from Numerical Recipes in C. static bool eigenSolveSymmetric3(const float matrix[6], float eigenValues[3], Vector3 eigenVectors[3]) { XA_DEBUG_ASSERT(matrix != nullptr && eigenValues != nullptr && eigenVectors != nullptr); float subd[3]; float diag[3]; float work[3][3]; work[0][0] = matrix[0]; work[0][1] = work[1][0] = matrix[1]; work[0][2] = work[2][0] = matrix[2]; work[1][1] = matrix[3]; work[1][2] = work[2][1] = matrix[4]; work[2][2] = matrix[5]; EigenSolver3_Tridiagonal(work, diag, subd); if (!EigenSolver3_QLAlgorithm(work, diag, subd)) { for (int i = 0; i < 3; i++) { eigenValues[i] = 0; eigenVectors[i] = Vector3(0); } return false; } for (int i = 0; i < 3; i++) { eigenValues[i] = (float)diag[i]; } // eigenvectors are the columns; make them the rows : for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { (&eigenVectors[j].x)[i] = (float) work[i][j]; } } // shuffle to sort by singular value : if (eigenValues[2] > eigenValues[0] && eigenValues[2] > eigenValues[1]) { swap(eigenValues[0], eigenValues[2]); swap(eigenVectors[0], eigenVectors[2]); } if (eigenValues[1] > eigenValues[0]) { swap(eigenValues[0], eigenValues[1]); swap(eigenVectors[0], eigenVectors[1]); } if (eigenValues[2] > eigenValues[1]) { swap(eigenValues[1], eigenValues[2]); swap(eigenVectors[1], eigenVectors[2]); } XA_DEBUG_ASSERT(eigenValues[0] >= eigenValues[1] && eigenValues[0] >= eigenValues[2]); XA_DEBUG_ASSERT(eigenValues[1] >= eigenValues[2]); return true; } private: static void EigenSolver3_Tridiagonal(float mat[3][3], float *diag, float *subd) { // Householder reduction T = Q^t M Q // Input: // mat, symmetric 3x3 matrix M // Output: // mat, orthogonal matrix Q // diag, diagonal entries of T // subd, subdiagonal entries of T (T is symmetric) const float epsilon = 1e-08f; float a = mat[0][0]; float b = mat[0][1]; float c = mat[0][2]; float d = mat[1][1]; float e = mat[1][2]; float f = mat[2][2]; diag[0] = a; subd[2] = 0.f; if (fabsf(c) >= epsilon) { const float ell = sqrtf(b * b + c * c); b /= ell; c /= ell; const float q = 2 * b * e + c * (f - d); diag[1] = d + c * q; diag[2] = f - c * q; subd[0] = ell; subd[1] = e - b * q; mat[0][0] = 1; mat[0][1] = 0; mat[0][2] = 0; mat[1][0] = 0; mat[1][1] = b; mat[1][2] = c; mat[2][0] = 0; mat[2][1] = c; mat[2][2] = -b; } else { diag[1] = d; diag[2] = f; subd[0] = b; subd[1] = e; mat[0][0] = 1; mat[0][1] = 0; mat[0][2] = 0; mat[1][0] = 0; mat[1][1] = 1; mat[1][2] = 0; mat[2][0] = 0; mat[2][1] = 0; mat[2][2] = 1; } } static bool EigenSolver3_QLAlgorithm(float mat[3][3], float *diag, float *subd) { // QL iteration with implicit shifting to reduce matrix from tridiagonal // to diagonal const int maxiter = 32; for (int ell = 0; ell < 3; ell++) { int iter; for (iter = 0; iter < maxiter; iter++) { int m; for (m = ell; m <= 1; m++) { float dd = fabsf(diag[m]) + fabsf(diag[m + 1]); if ( fabsf(subd[m]) + dd == dd ) break; } if ( m == ell ) break; float g = (diag[ell + 1] - diag[ell]) / (2 * subd[ell]); float r = sqrtf(g * g + 1); if ( g < 0 ) g = diag[m] - diag[ell] + subd[ell] / (g - r); else g = diag[m] - diag[ell] + subd[ell] / (g + r); float s = 1, c = 1, p = 0; for (int i = m - 1; i >= ell; i--) { float f = s * subd[i], b = c * subd[i]; if ( fabsf(f) >= fabsf(g) ) { c = g / f; r = sqrtf(c * c + 1); subd[i + 1] = f * r; c *= (s = 1 / r); } else { s = f / g; r = sqrtf(s * s + 1); subd[i + 1] = g * r; s *= (c = 1 / r); } g = diag[i + 1] - p; r = (diag[i] - g) * s + 2 * b * c; p = s * r; diag[i + 1] = g + p; g = c * r - b; for (int k = 0; k < 3; k++) { f = mat[k][i + 1]; mat[k][i + 1] = s * mat[k][i] + c * f; mat[k][i] = c * mat[k][i] - s * f; } } diag[ell] -= p; subd[ell] = g; subd[m] = 0; } if ( iter == maxiter ) // should not get here under normal circumstances return false; } return true; } }; static uint32_t sdbmHash(const void *data_in, uint32_t size, uint32_t h = 5381) { const uint8_t *data = (const uint8_t *) data_in; uint32_t i = 0; while (i < size) { h = (h << 16) + (h << 6) - h + (uint32_t ) data[i++]; } return h; } template static uint32_t hash(const T &t, uint32_t h = 5381) { return sdbmHash(&t, sizeof(T), h); } template struct Hash { uint32_t operator()(const Key &k) const { return hash(k); } }; template struct PassthroughHash { uint32_t operator()(const Key &k) const { return (uint32_t)k; } }; template struct Equal { bool operator()(const Key &k0, const Key &k1) const { return k0 == k1; } }; template, typename E = Equal > class HashMap { public: HashMap(int memTag, uint32_t size) : m_memTag(memTag), m_size(size), m_numSlots(0), m_slots(nullptr), m_keys(memTag), m_next(memTag) { } ~HashMap() { if (m_slots) XA_FREE(m_slots); } void destroy() { if (m_slots) { XA_FREE(m_slots); m_slots = nullptr; } m_keys.destroy(); m_next.destroy(); } uint32_t add(const Key &key) { if (!m_slots) alloc(); const uint32_t hash = computeHash(key); m_keys.push_back(key); m_next.push_back(m_slots[hash]); m_slots[hash] = m_next.size() - 1; return m_keys.size() - 1; } uint32_t get(const Key &key) const { if (!m_slots) return UINT32_MAX; return find(key, m_slots[computeHash(key)]); } uint32_t getNext(const Key &key, uint32_t current) const { return find(key, m_next[current]); } private: void alloc() { XA_DEBUG_ASSERT(m_size > 0); m_numSlots = nextPowerOfTwo(m_size); auto minNumSlots = uint32_t(m_size * 1.3); if (m_numSlots < minNumSlots) m_numSlots = nextPowerOfTwo(minNumSlots); m_slots = XA_ALLOC_ARRAY(m_memTag, uint32_t, m_numSlots); for (uint32_t i = 0; i < m_numSlots; i++) m_slots[i] = UINT32_MAX; m_keys.reserve(m_size); m_next.reserve(m_size); } uint32_t computeHash(const Key &key) const { H hash; return hash(key) & (m_numSlots - 1); } uint32_t find(const Key &key, uint32_t current) const { E equal; while (current != UINT32_MAX) { if (equal(m_keys[current], key)) return current; current = m_next[current]; } return current; } int m_memTag; uint32_t m_size; uint32_t m_numSlots; uint32_t *m_slots; Array m_keys; Array m_next; }; template static void insertionSort(T *data, uint32_t length) { for (int32_t i = 1; i < (int32_t)length; i++) { T x = data[i]; int32_t j = i - 1; while (j >= 0 && x < data[j]) { data[j + 1] = data[j]; j--; } data[j + 1] = x; } } class KISSRng { public: KISSRng() { reset(); } void reset() { x = 123456789; y = 362436000; z = 521288629; c = 7654321; } uint32_t getRange(uint32_t range) { if (range == 0) return 0; x = 69069 * x + 12345; y ^= (y << 13); y ^= (y >> 17); y ^= (y << 5); uint64_t t = 698769069ULL * z + c; c = (t >> 32); return (x + y + (z = (uint32_t)t)) % (range + 1); } private: uint32_t x, y, z, c; }; // Based on Pierre Terdiman's and Michael Herf's source code. // http://www.codercorner.com/RadixSortRevisited.htm // http://www.stereopsis.com/radix.html class RadixSort { public: void sort(ConstArrayView input) { if (input.length == 0) { m_buffer1.clear(); m_buffer2.clear(); m_ranks = m_buffer1.data(); m_ranks2 = m_buffer2.data(); return; } // Resize lists if needed m_buffer1.resize(input.length); m_buffer2.resize(input.length); m_ranks = m_buffer1.data(); m_ranks2 = m_buffer2.data(); m_validRanks = false; if (input.length < 32) insertionSort(input); else { // @@ Avoid touching the input multiple times. for (uint32_t i = 0; i < input.length; i++) { floatFlip((uint32_t &)input[i]); } radixSort(ConstArrayView((const uint32_t *)input.data, input.length)); for (uint32_t i = 0; i < input.length; i++) { ifloatFlip((uint32_t &)input[i]); } } } // Access to results. m_ranks is a list of indices in sorted order, i.e. in the order you may further process your data const uint32_t *ranks() const { XA_DEBUG_ASSERT(m_validRanks); return m_ranks; } private: uint32_t *m_ranks, *m_ranks2; Array m_buffer1, m_buffer2; bool m_validRanks = false; void floatFlip(uint32_t &f) { int32_t mask = (int32_t(f) >> 31) | 0x80000000; // Warren Hunt, Manchor Ko. f ^= mask; } void ifloatFlip(uint32_t &f) { uint32_t mask = ((f >> 31) - 1) | 0x80000000; // Michael Herf. f ^= mask; } void createHistograms(ConstArrayView input, uint32_t *histogram) { const uint32_t bucketCount = sizeof(uint32_t); // Init bucket pointers. uint32_t *h[bucketCount]; for (uint32_t i = 0; i < bucketCount; i++) { h[i] = histogram + 256 * i; } // Clear histograms. memset(histogram, 0, 256 * bucketCount * sizeof(uint32_t)); // @@ Add support for signed integers. // Build histograms. const uint8_t *p = (const uint8_t *)input.data; // @@ Does this break aliasing rules? const uint8_t *pe = p + input.length * sizeof(uint32_t); while (p != pe) { h[0][*p++]++, h[1][*p++]++, h[2][*p++]++, h[3][*p++]++; } } void insertionSort(ConstArrayView input) { if (!m_validRanks) { m_ranks[0] = 0; for (uint32_t i = 1; i != input.length; ++i) { int rank = m_ranks[i] = i; uint32_t j = i; while (j != 0 && input[rank] < input[m_ranks[j - 1]]) { m_ranks[j] = m_ranks[j - 1]; --j; } if (i != j) { m_ranks[j] = rank; } } m_validRanks = true; } else { for (uint32_t i = 1; i != input.length; ++i) { int rank = m_ranks[i]; uint32_t j = i; while (j != 0 && input[rank] < input[m_ranks[j - 1]]) { m_ranks[j] = m_ranks[j - 1]; --j; } if (i != j) { m_ranks[j] = rank; } } } } void radixSort(ConstArrayView input) { const uint32_t P = sizeof(uint32_t); // pass count // Allocate histograms & offsets on the stack uint32_t histogram[256 * P]; uint32_t *link[256]; createHistograms(input, histogram); // Radix sort, j is the pass number (0=LSB, P=MSB) for (uint32_t j = 0; j < P; j++) { // Pointer to this bucket. const uint32_t *h = &histogram[j * 256]; auto inputBytes = (const uint8_t *)input.data; // @@ Is this aliasing legal? inputBytes += j; if (h[inputBytes[0]] == input.length) { // Skip this pass, all values are the same. continue; } // Create offsets link[0] = m_ranks2; for (uint32_t i = 1; i < 256; i++) link[i] = link[i - 1] + h[i - 1]; // Perform Radix Sort if (!m_validRanks) { for (uint32_t i = 0; i < input.length; i++) { *link[inputBytes[i * P]]++ = i; } m_validRanks = true; } else { for (uint32_t i = 0; i < input.length; i++) { const uint32_t idx = m_ranks[i]; *link[inputBytes[idx * P]]++ = idx; } } // Swap pointers for next pass. Valid indices - the most recent ones - are in m_ranks after the swap. swap(m_ranks, m_ranks2); } // All values were equal, generate linear ranks. if (!m_validRanks) { for (uint32_t i = 0; i < input.length; i++) m_ranks[i] = i; m_validRanks = true; } } }; // Wrapping this in a class allows temporary arrays to be re-used. class BoundingBox2D { public: Vector2 majorAxis, minorAxis, minCorner, maxCorner; void clear() { m_boundaryVertices.clear(); } void appendBoundaryVertex(Vector2 v) { m_boundaryVertices.push_back(v); } // This should compute convex hull and use rotating calipers to find the best box. Currently it uses a brute force method. // If vertices are empty, the boundary vertices are used. void compute(ConstArrayView vertices = ConstArrayView()) { XA_DEBUG_ASSERT(!m_boundaryVertices.isEmpty()); if (vertices.length == 0) vertices = m_boundaryVertices; convexHull(m_boundaryVertices, m_hull, 0.00001f); // @@ Ideally I should use rotating calipers to find the best box. Using brute force for now. float best_area = FLT_MAX; Vector2 best_min(0); Vector2 best_max(0); Vector2 best_axis(0); const uint32_t hullCount = m_hull.size(); for (uint32_t i = 0, j = hullCount - 1; i < hullCount; j = i, i++) { if (equal(m_hull[i], m_hull[j], kEpsilon)) continue; Vector2 axis = normalize(m_hull[i] - m_hull[j]); XA_DEBUG_ASSERT(isFinite(axis)); // Compute bounding box. Vector2 box_min(FLT_MAX, FLT_MAX); Vector2 box_max(-FLT_MAX, -FLT_MAX); // Consider all points, not only boundary points, in case the input chart is malformed. for (uint32_t v = 0; v < vertices.length; v++) { const Vector2 &point = vertices[v]; const float x = dot(axis, point); const float y = dot(Vector2(-axis.y, axis.x), point); box_min.x = min(box_min.x, x); box_max.x = max(box_max.x, x); box_min.y = min(box_min.y, y); box_max.y = max(box_max.y, y); } // Compute box area. const float area = (box_max.x - box_min.x) * (box_max.y - box_min.y); if (area < best_area) { best_area = area; best_min = box_min; best_max = box_max; best_axis = axis; } } majorAxis = best_axis; minorAxis = Vector2(-best_axis.y, best_axis.x); minCorner = best_min; maxCorner = best_max; XA_ASSERT(isFinite(majorAxis) && isFinite(minorAxis) && isFinite(minCorner)); } private: // Compute the convex hull using Graham Scan. void convexHull(ConstArrayView input, Array &output, float epsilon) { m_coords.resize(input.length); for (uint32_t i = 0; i < input.length; i++) m_coords[i] = input[i].x; m_radix.sort(m_coords); const uint32_t *ranks = m_radix.ranks(); m_top.clear(); m_bottom.clear(); m_top.reserve(input.length); m_bottom.reserve(input.length); Vector2 P = input[ranks[0]]; Vector2 Q = input[ranks[input.length - 1]]; float topy = max(P.y, Q.y); float boty = min(P.y, Q.y); for (uint32_t i = 0; i < input.length; i++) { Vector2 p = input[ranks[i]]; if (p.y >= boty) m_top.push_back(p); } for (uint32_t i = 0; i < input.length; i++) { Vector2 p = input[ranks[input.length - 1 - i]]; if (p.y <= topy) m_bottom.push_back(p); } // Filter top list. output.clear(); XA_DEBUG_ASSERT(m_top.size() >= 2); output.push_back(m_top[0]); output.push_back(m_top[1]); for (uint32_t i = 2; i < m_top.size(); ) { Vector2 a = output[output.size() - 2]; Vector2 b = output[output.size() - 1]; Vector2 c = m_top[i]; float area = triangleArea(a, b, c); if (area >= -epsilon) output.pop_back(); if (area < -epsilon || output.size() == 1) { output.push_back(c); i++; } } uint32_t top_count = output.size(); XA_DEBUG_ASSERT(m_bottom.size() >= 2); output.push_back(m_bottom[1]); // Filter bottom list. for (uint32_t i = 2; i < m_bottom.size(); ) { Vector2 a = output[output.size() - 2]; Vector2 b = output[output.size() - 1]; Vector2 c = m_bottom[i]; float area = triangleArea(a, b, c); if (area >= -epsilon) output.pop_back(); if (area < -epsilon || output.size() == top_count) { output.push_back(c); i++; } } // Remove duplicate element. XA_DEBUG_ASSERT(output.size() > 0); output.pop_back(); } Array m_boundaryVertices; Array m_coords; Array m_top, m_bottom, m_hull; RadixSort m_radix; }; struct EdgeKey { EdgeKey(const EdgeKey &k) : v0(k.v0), v1(k.v1) {} EdgeKey(uint32_t _v0, uint32_t _v1) : v0(_v0), v1(_v1) {} bool operator==(const EdgeKey &k) const { return v0 == k.v0 && v1 == k.v1; } uint32_t v0; uint32_t v1; }; struct EdgeHash { uint32_t operator()(const EdgeKey &k) const { return k.v0 * 32768u + k.v1; } }; static uint32_t meshEdgeFace(uint32_t edge) { return edge / 3; } static uint32_t meshEdgeIndex0(uint32_t edge) { return edge; } static uint32_t meshEdgeIndex1(uint32_t edge) { const uint32_t faceFirstEdge = edge / 3 * 3; return faceFirstEdge + (edge - faceFirstEdge + 1) % 3; } struct MeshFlags { enum { HasIgnoredFaces = 1<<0, HasNormals = 1<<1, HasMaterials = 1<<2 }; }; class Mesh { public: Mesh(float epsilon, uint32_t approxVertexCount, uint32_t approxFaceCount, uint32_t flags = 0, uint32_t id = UINT32_MAX) : m_epsilon(epsilon), m_flags(flags), m_id(id), m_faceIgnore(MemTag::Mesh), m_faceMaterials(MemTag::Mesh), m_indices(MemTag::MeshIndices), m_positions(MemTag::MeshPositions), m_normals(MemTag::MeshNormals), m_texcoords(MemTag::MeshTexcoords), m_nextColocalVertex(MemTag::MeshColocals), m_firstColocalVertex(MemTag::MeshColocals), m_boundaryEdges(MemTag::MeshBoundaries), m_oppositeEdges(MemTag::MeshBoundaries), m_edgeMap(MemTag::MeshEdgeMap, approxFaceCount * 3) { m_indices.reserve(approxFaceCount * 3); m_positions.reserve(approxVertexCount); m_texcoords.reserve(approxVertexCount); if (m_flags & MeshFlags::HasIgnoredFaces) m_faceIgnore.reserve(approxFaceCount); if (m_flags & MeshFlags::HasNormals) m_normals.reserve(approxVertexCount); if (m_flags & MeshFlags::HasMaterials) m_faceMaterials.reserve(approxFaceCount); } uint32_t flags() const { return m_flags; } uint32_t id() const { return m_id; } void addVertex(const Vector3 &pos, const Vector3 &normal = Vector3(0.0f), const Vector2 &texcoord = Vector2(0.0f)) { XA_DEBUG_ASSERT(isFinite(pos)); m_positions.push_back(pos); if (m_flags & MeshFlags::HasNormals) m_normals.push_back(normal); m_texcoords.push_back(texcoord); } void addFace(const uint32_t *indices, bool ignore = false, uint32_t material = UINT32_MAX) { if (m_flags & MeshFlags::HasIgnoredFaces) m_faceIgnore.push_back(ignore); if (m_flags & MeshFlags::HasMaterials) m_faceMaterials.push_back(material); const uint32_t firstIndex = m_indices.size(); for (uint32_t i = 0; i < 3; i++) m_indices.push_back(indices[i]); for (uint32_t i = 0; i < 3; i++) { const uint32_t vertex0 = m_indices[firstIndex + i]; const uint32_t vertex1 = m_indices[firstIndex + (i + 1) % 3]; m_edgeMap.add(EdgeKey(vertex0, vertex1)); } } void createColocalsBVH() { const uint32_t vertexCount = m_positions.size(); Array aabbs(MemTag::BVH); aabbs.resize(vertexCount); for (uint32_t i = 0; i < m_positions.size(); i++) aabbs[i] = AABB(m_positions[i], m_epsilon); BVH bvh(aabbs); Array colocals(MemTag::MeshColocals); Array potential(MemTag::MeshColocals); m_nextColocalVertex.resize(vertexCount); m_nextColocalVertex.fillBytes(0xff); m_firstColocalVertex.resize(vertexCount); m_firstColocalVertex.fillBytes(0xff); for (uint32_t i = 0; i < vertexCount; i++) { if (m_nextColocalVertex[i] != UINT32_MAX) continue; // Already linked. // Find other vertices colocal to this one. colocals.clear(); colocals.push_back(i); // Always add this vertex. bvh.query(AABB(m_positions[i], m_epsilon), potential); for (uint32_t j = 0; j < potential.size(); j++) { const uint32_t otherVertex = potential[j]; if (otherVertex != i && equal(m_positions[i], m_positions[otherVertex], m_epsilon) && m_nextColocalVertex[otherVertex] == UINT32_MAX) colocals.push_back(otherVertex); } if (colocals.size() == 1) { // No colocals for this vertex. m_nextColocalVertex[i] = i; m_firstColocalVertex[i] = i; continue; } // Link in ascending order. insertionSort(colocals.data(), colocals.size()); for (uint32_t j = 0; j < colocals.size(); j++) { m_nextColocalVertex[colocals[j]] = colocals[(j + 1) % colocals.size()]; m_firstColocalVertex[colocals[j]] = colocals[0]; } XA_DEBUG_ASSERT(m_nextColocalVertex[i] != UINT32_MAX); } } void createColocalsHash() { const uint32_t vertexCount = m_positions.size(); HashMap positionToVertexMap(MemTag::Default, vertexCount); for (uint32_t i = 0; i < vertexCount; i++) positionToVertexMap.add(m_positions[i]); Array colocals(MemTag::MeshColocals); m_nextColocalVertex.resize(vertexCount); m_nextColocalVertex.fillBytes(0xff); m_firstColocalVertex.resize(vertexCount); m_firstColocalVertex.fillBytes(0xff); for (uint32_t i = 0; i < vertexCount; i++) { if (m_nextColocalVertex[i] != UINT32_MAX) continue; // Already linked. // Find other vertices colocal to this one. colocals.clear(); colocals.push_back(i); // Always add this vertex. uint32_t otherVertex = positionToVertexMap.get(m_positions[i]); while (otherVertex != UINT32_MAX) { if (otherVertex != i && equal(m_positions[i], m_positions[otherVertex], m_epsilon) && m_nextColocalVertex[otherVertex] == UINT32_MAX) colocals.push_back(otherVertex); otherVertex = positionToVertexMap.getNext(m_positions[i], otherVertex); } if (colocals.size() == 1) { // No colocals for this vertex. m_nextColocalVertex[i] = i; m_firstColocalVertex[i] = i; continue; } // Link in ascending order. insertionSort(colocals.data(), colocals.size()); for (uint32_t j = 0; j < colocals.size(); j++) { m_nextColocalVertex[colocals[j]] = colocals[(j + 1) % colocals.size()]; m_firstColocalVertex[colocals[j]] = colocals[0]; } XA_DEBUG_ASSERT(m_nextColocalVertex[i] != UINT32_MAX); } } void createColocals() { if (m_epsilon <= FLT_EPSILON) createColocalsHash(); else createColocalsBVH(); } void createBoundaries() { const uint32_t edgeCount = m_indices.size(); const uint32_t vertexCount = m_positions.size(); m_oppositeEdges.resize(edgeCount); m_boundaryEdges.reserve(uint32_t(edgeCount * 0.1f)); m_isBoundaryVertex.resize(vertexCount); m_isBoundaryVertex.zeroOutMemory(); for (uint32_t i = 0; i < edgeCount; i++) m_oppositeEdges[i] = UINT32_MAX; const uint32_t faceCount = m_indices.size() / 3; for (uint32_t i = 0; i < faceCount; i++) { if (isFaceIgnored(i)) continue; for (uint32_t j = 0; j < 3; j++) { const uint32_t edge = i * 3 + j; const uint32_t vertex0 = m_indices[edge]; const uint32_t vertex1 = m_indices[i * 3 + (j + 1) % 3]; // If there is an edge with opposite winding to this one, the edge isn't on a boundary. const uint32_t oppositeEdge = findEdge(vertex1, vertex0); if (oppositeEdge != UINT32_MAX) { m_oppositeEdges[edge] = oppositeEdge; } else { m_boundaryEdges.push_back(edge); m_isBoundaryVertex.set(vertex0); m_isBoundaryVertex.set(vertex1); } } } } /// Find edge, test all colocals. uint32_t findEdge(uint32_t vertex0, uint32_t vertex1) const { // Try to find exact vertex match first. { EdgeKey key(vertex0, vertex1); uint32_t edge = m_edgeMap.get(key); while (edge != UINT32_MAX) { // Don't find edges of ignored faces. if (!isFaceIgnored(meshEdgeFace(edge))) return edge; edge = m_edgeMap.getNext(key, edge); } } // If colocals were created, try every permutation. if (!m_nextColocalVertex.isEmpty()) { uint32_t colocalVertex0 = vertex0; for (;;) { uint32_t colocalVertex1 = vertex1; for (;;) { EdgeKey key(colocalVertex0, colocalVertex1); uint32_t edge = m_edgeMap.get(key); while (edge != UINT32_MAX) { // Don't find edges of ignored faces. if (!isFaceIgnored(meshEdgeFace(edge))) return edge; edge = m_edgeMap.getNext(key, edge); } colocalVertex1 = m_nextColocalVertex[colocalVertex1]; if (colocalVertex1 == vertex1) break; // Back to start. } colocalVertex0 = m_nextColocalVertex[colocalVertex0]; if (colocalVertex0 == vertex0) break; // Back to start. } } return UINT32_MAX; } // Edge map can be destroyed when no longer used to reduce memory usage. It's used by: // * Mesh::createBoundaries() // * Mesh::edgeMap() (used by MeshFaceGroups) void destroyEdgeMap() { m_edgeMap.destroy(); } #if XA_DEBUG_EXPORT_OBJ void writeObjVertices(FILE *file) const { for (uint32_t i = 0; i < m_positions.size(); i++) fprintf(file, "v %g %g %g\n", m_positions[i].x, m_positions[i].y, m_positions[i].z); if (m_flags & MeshFlags::HasNormals) { for (uint32_t i = 0; i < m_normals.size(); i++) fprintf(file, "vn %g %g %g\n", m_normals[i].x, m_normals[i].y, m_normals[i].z); } for (uint32_t i = 0; i < m_texcoords.size(); i++) fprintf(file, "vt %g %g\n", m_texcoords[i].x, m_texcoords[i].y); } void writeObjFace(FILE *file, uint32_t face, uint32_t offset = 0) const { fprintf(file, "f "); for (uint32_t j = 0; j < 3; j++) { const uint32_t index = m_indices[face * 3 + j] + 1 + offset; // 1-indexed fprintf(file, "%d/%d/%d%c", index, index, index, j == 2 ? '\n' : ' '); } } void writeObjBoundaryEges(FILE *file) const { if (m_oppositeEdges.isEmpty()) return; // Boundaries haven't been created. fprintf(file, "o boundary_edges\n"); for (uint32_t i = 0; i < edgeCount(); i++) { if (m_oppositeEdges[i] != UINT32_MAX) continue; fprintf(file, "l %d %d\n", m_indices[meshEdgeIndex0(i)] + 1, m_indices[meshEdgeIndex1(i)] + 1); // 1-indexed } } void writeObjFile(const char *filename) const { FILE *file; XA_FOPEN(file, filename, "w"); if (!file) return; writeObjVertices(file); fprintf(file, "s off\n"); fprintf(file, "o object\n"); for (uint32_t i = 0; i < faceCount(); i++) writeObjFace(file, i); writeObjBoundaryEges(file); fclose(file); } #endif float computeSurfaceArea() const { float area = 0; for (uint32_t f = 0; f < faceCount(); f++) area += computeFaceArea(f); XA_DEBUG_ASSERT(area >= 0); return area; } // Returned value is always positive, even if some triangles are flipped. float computeParametricArea() const { float area = 0; for (uint32_t f = 0; f < faceCount(); f++) area += fabsf(computeFaceParametricArea(f)); // May be negative, depends on texcoord winding. return area; } float computeFaceArea(uint32_t face) const { const Vector3 &p0 = m_positions[m_indices[face * 3 + 0]]; const Vector3 &p1 = m_positions[m_indices[face * 3 + 1]]; const Vector3 &p2 = m_positions[m_indices[face * 3 + 2]]; return length(cross(p1 - p0, p2 - p0)) * 0.5f; } Vector3 computeFaceCentroid(uint32_t face) const { Vector3 sum(0.0f); for (uint32_t i = 0; i < 3; i++) sum += m_positions[m_indices[face * 3 + i]]; return sum / 3.0f; } // Average of the edge midpoints weighted by the edge length. // I want a point inside the triangle, but closer to the cirumcenter. Vector3 computeFaceCenter(uint32_t face) const { const Vector3 &p0 = m_positions[m_indices[face * 3 + 0]]; const Vector3 &p1 = m_positions[m_indices[face * 3 + 1]]; const Vector3 &p2 = m_positions[m_indices[face * 3 + 2]]; const float l0 = length(p1 - p0); const float l1 = length(p2 - p1); const float l2 = length(p0 - p2); const Vector3 m0 = (p0 + p1) * l0 / (l0 + l1 + l2); const Vector3 m1 = (p1 + p2) * l1 / (l0 + l1 + l2); const Vector3 m2 = (p2 + p0) * l2 / (l0 + l1 + l2); return m0 + m1 + m2; } Vector3 computeFaceNormal(uint32_t face) const { const Vector3 &p0 = m_positions[m_indices[face * 3 + 0]]; const Vector3 &p1 = m_positions[m_indices[face * 3 + 1]]; const Vector3 &p2 = m_positions[m_indices[face * 3 + 2]]; const Vector3 e0 = p2 - p0; const Vector3 e1 = p1 - p0; const Vector3 normalAreaScaled = cross(e0, e1); return normalizeSafe(normalAreaScaled, Vector3(0, 0, 1)); } float computeFaceParametricArea(uint32_t face) const { const Vector2 &t0 = m_texcoords[m_indices[face * 3 + 0]]; const Vector2 &t1 = m_texcoords[m_indices[face * 3 + 1]]; const Vector2 &t2 = m_texcoords[m_indices[face * 3 + 2]]; return triangleArea(t0, t1, t2); } // @@ This is not exactly accurate, we should compare the texture coordinates... bool isSeam(uint32_t edge) const { const uint32_t oppositeEdge = m_oppositeEdges[edge]; if (oppositeEdge == UINT32_MAX) return false; // boundary edge const uint32_t e0 = meshEdgeIndex0(edge); const uint32_t e1 = meshEdgeIndex1(edge); const uint32_t oe0 = meshEdgeIndex0(oppositeEdge); const uint32_t oe1 = meshEdgeIndex1(oppositeEdge); return m_indices[e0] != m_indices[oe1] || m_indices[e1] != m_indices[oe0]; } bool isTextureSeam(uint32_t edge) const { const uint32_t oppositeEdge = m_oppositeEdges[edge]; if (oppositeEdge == UINT32_MAX) return false; // boundary edge const uint32_t e0 = meshEdgeIndex0(edge); const uint32_t e1 = meshEdgeIndex1(edge); const uint32_t oe0 = meshEdgeIndex0(oppositeEdge); const uint32_t oe1 = meshEdgeIndex1(oppositeEdge); return m_texcoords[m_indices[e0]] != m_texcoords[m_indices[oe1]] || m_texcoords[m_indices[e1]] != m_texcoords[m_indices[oe0]]; } uint32_t firstColocalVertex(uint32_t vertex) const { XA_DEBUG_ASSERT(m_firstColocalVertex.size() == m_positions.size()); return m_firstColocalVertex[vertex]; } XA_INLINE float epsilon() const { return m_epsilon; } XA_INLINE uint32_t edgeCount() const { return m_indices.size(); } XA_INLINE uint32_t oppositeEdge(uint32_t edge) const { return m_oppositeEdges[edge]; } XA_INLINE bool isBoundaryEdge(uint32_t edge) const { return m_oppositeEdges[edge] == UINT32_MAX; } XA_INLINE const Array &boundaryEdges() const { return m_boundaryEdges; } XA_INLINE bool isBoundaryVertex(uint32_t vertex) const { return m_isBoundaryVertex.get(vertex); } XA_INLINE uint32_t vertexCount() const { return m_positions.size(); } XA_INLINE uint32_t vertexAt(uint32_t i) const { return m_indices[i]; } XA_INLINE const Vector3 &position(uint32_t vertex) const { return m_positions[vertex]; } XA_INLINE ConstArrayView positions() const { return m_positions; } XA_INLINE const Vector3 &normal(uint32_t vertex) const { XA_DEBUG_ASSERT(m_flags & MeshFlags::HasNormals); return m_normals[vertex]; } XA_INLINE const Vector2 &texcoord(uint32_t vertex) const { return m_texcoords[vertex]; } XA_INLINE Vector2 &texcoord(uint32_t vertex) { return m_texcoords[vertex]; } XA_INLINE const ConstArrayView texcoords() const { return m_texcoords; } XA_INLINE ArrayView texcoords() { return m_texcoords; } XA_INLINE uint32_t faceCount() const { return m_indices.size() / 3; } XA_INLINE ConstArrayView indices() const { return m_indices; } XA_INLINE uint32_t indexCount() const { return m_indices.size(); } XA_INLINE bool isFaceIgnored(uint32_t face) const { return (m_flags & MeshFlags::HasIgnoredFaces) && m_faceIgnore[face]; } XA_INLINE uint32_t faceMaterial(uint32_t face) const { return (m_flags & MeshFlags::HasMaterials) ? m_faceMaterials[face] : UINT32_MAX; } XA_INLINE const HashMap &edgeMap() const { return m_edgeMap; } private: float m_epsilon; uint32_t m_flags; uint32_t m_id; Array m_faceIgnore; Array m_faceMaterials; Array m_indices; Array m_positions; Array m_normals; Array m_texcoords; // Populated by createColocals Array m_nextColocalVertex; // In: vertex index. Out: the vertex index of the next colocal position. Array m_firstColocalVertex; // Populated by createBoundaries BitArray m_isBoundaryVertex; Array m_boundaryEdges; Array m_oppositeEdges; // In: edge index. Out: the index of the opposite edge (i.e. wound the opposite direction). UINT32_MAX if the input edge is a boundary edge. HashMap m_edgeMap; public: class FaceEdgeIterator { public: FaceEdgeIterator (const Mesh *mesh, uint32_t face) : m_mesh(mesh), m_face(face), m_relativeEdge(0) { m_edge = m_face * 3; } void advance() { if (m_relativeEdge < 3) { m_edge++; m_relativeEdge++; } } bool isDone() const { return m_relativeEdge == 3; } bool isBoundary() const { return m_mesh->m_oppositeEdges[m_edge] == UINT32_MAX; } bool isSeam() const { return m_mesh->isSeam(m_edge); } bool isTextureSeam() const { return m_mesh->isTextureSeam(m_edge); } uint32_t edge() const { return m_edge; } uint32_t relativeEdge() const { return m_relativeEdge; } uint32_t face() const { return m_face; } uint32_t oppositeEdge() const { return m_mesh->m_oppositeEdges[m_edge]; } uint32_t oppositeFace() const { const uint32_t oedge = m_mesh->m_oppositeEdges[m_edge]; if (oedge == UINT32_MAX) return UINT32_MAX; return meshEdgeFace(oedge); } uint32_t vertex0() const { return m_mesh->m_indices[m_face * 3 + m_relativeEdge]; } uint32_t vertex1() const { return m_mesh->m_indices[m_face * 3 + (m_relativeEdge + 1) % 3]; } const Vector3 &position0() const { return m_mesh->m_positions[vertex0()]; } const Vector3 &position1() const { return m_mesh->m_positions[vertex1()]; } const Vector3 &normal0() const { return m_mesh->m_normals[vertex0()]; } const Vector3 &normal1() const { return m_mesh->m_normals[vertex1()]; } const Vector2 &texcoord0() const { return m_mesh->m_texcoords[vertex0()]; } const Vector2 &texcoord1() const { return m_mesh->m_texcoords[vertex1()]; } private: const Mesh *m_mesh; uint32_t m_face; uint32_t m_edge; uint32_t m_relativeEdge; }; }; struct MeshFaceGroups { typedef uint32_t Handle; static constexpr Handle kInvalid = UINT32_MAX; MeshFaceGroups(const Mesh *mesh) : m_mesh(mesh), m_groups(MemTag::Mesh), m_firstFace(MemTag::Mesh), m_nextFace(MemTag::Mesh), m_faceCount(MemTag::Mesh) {} XA_INLINE Handle groupAt(uint32_t face) const { return m_groups[face]; } XA_INLINE uint32_t groupCount() const { return m_faceCount.size(); } XA_INLINE uint32_t nextFace(uint32_t face) const { return m_nextFace[face]; } XA_INLINE uint32_t faceCount(uint32_t group) const { return m_faceCount[group]; } void compute() { m_groups.resize(m_mesh->faceCount()); m_groups.fillBytes(0xff); // Set all faces to kInvalid uint32_t firstUnassignedFace = 0; Handle group = 0; Array growFaces; const uint32_t n = m_mesh->faceCount(); m_nextFace.resize(n); for (;;) { // Find an unassigned face. uint32_t face = UINT32_MAX; for (uint32_t f = firstUnassignedFace; f < n; f++) { if (m_groups[f] == kInvalid && !m_mesh->isFaceIgnored(f)) { face = f; firstUnassignedFace = f + 1; break; } } if (face == UINT32_MAX) break; // All faces assigned to a group (except ignored faces). m_groups[face] = group; m_nextFace[face] = UINT32_MAX; m_firstFace.push_back(face); growFaces.clear(); growFaces.push_back(face); uint32_t prevFace = face, groupFaceCount = 1; // Find faces connected to the face and assign them to the same group as the face, unless they are already assigned to another group. for (;;) { if (growFaces.isEmpty()) break; const uint32_t f = growFaces.back(); growFaces.pop_back(); const uint32_t material = m_mesh->faceMaterial(f); for (Mesh::FaceEdgeIterator edgeIt(m_mesh, f); !edgeIt.isDone(); edgeIt.advance()) { const uint32_t oppositeEdge = m_mesh->findEdge(edgeIt.vertex1(), edgeIt.vertex0()); if (oppositeEdge == UINT32_MAX) continue; // Boundary edge. const uint32_t oppositeFace = meshEdgeFace(oppositeEdge); if (m_mesh->isFaceIgnored(oppositeFace)) continue; // Don't add ignored faces to group. if (m_mesh->faceMaterial(oppositeFace) != material) continue; // Different material. if (m_groups[oppositeFace] != kInvalid) continue; // Connected face is already assigned to another group. m_groups[oppositeFace] = group; m_nextFace[oppositeFace] = UINT32_MAX; if (prevFace != UINT32_MAX) m_nextFace[prevFace] = oppositeFace; prevFace = oppositeFace; groupFaceCount++; growFaces.push_back(oppositeFace); } } m_faceCount.push_back(groupFaceCount); group++; XA_ASSERT(group < kInvalid); } } class Iterator { public: Iterator(const MeshFaceGroups *meshFaceGroups, Handle group) : m_meshFaceGroups(meshFaceGroups) { XA_DEBUG_ASSERT(group != kInvalid); m_current = m_meshFaceGroups->m_firstFace[group]; } void advance() { m_current = m_meshFaceGroups->m_nextFace[m_current]; } bool isDone() const { return m_current == UINT32_MAX; } uint32_t face() const { return m_current; } private: const MeshFaceGroups *m_meshFaceGroups; uint32_t m_current; }; private: const Mesh *m_mesh; Array m_groups; Array m_firstFace; Array m_nextFace; // In: face. Out: the next face in the same group. Array m_faceCount; // In: face group. Out: number of faces in the group. }; constexpr MeshFaceGroups::Handle MeshFaceGroups::kInvalid; #if XA_CHECK_T_JUNCTIONS static bool lineIntersectsPoint(const Vector3 &point, const Vector3 &lineStart, const Vector3 &lineEnd, float *t, float epsilon) { float tt; if (!t) t = &tt; *t = 0.0f; if (equal(lineStart, point, epsilon) || equal(lineEnd, point, epsilon)) return false; // Vertex lies on either line vertices. const Vector3 v01 = point - lineStart; const Vector3 v21 = lineEnd - lineStart; const float l = length(v21); const float d = length(cross(v01, v21)) / l; if (!isZero(d, epsilon)) return false; *t = dot(v01, v21) / (l * l); return *t > kEpsilon && *t < 1.0f - kEpsilon; } // Returns the number of T-junctions found. static int meshCheckTJunctions(const Mesh &inputMesh) { int count = 0; const uint32_t vertexCount = inputMesh.vertexCount(); const uint32_t edgeCount = inputMesh.edgeCount(); for (uint32_t v = 0; v < vertexCount; v++) { if (!inputMesh.isBoundaryVertex(v)) continue; // Find edges that this vertex overlaps with. const Vector3 &pos = inputMesh.position(v); for (uint32_t e = 0; e < edgeCount; e++) { if (!inputMesh.isBoundaryEdge(e)) continue; const Vector3 &edgePos1 = inputMesh.position(inputMesh.vertexAt(meshEdgeIndex0(e))); const Vector3 &edgePos2 = inputMesh.position(inputMesh.vertexAt(meshEdgeIndex1(e))); float t; if (lineIntersectsPoint(pos, edgePos1, edgePos2, &t, inputMesh.epsilon())) count++; } } return count; } #endif // References invalid faces and vertices in a mesh. struct InvalidMeshGeometry { // If meshFaceGroups is not null, invalid faces have the face group MeshFaceGroups::kInvalid. // If meshFaceGroups is null, invalid faces are Mesh::isFaceIgnored. void extract(const Mesh *mesh, const MeshFaceGroups *meshFaceGroups) { // Copy invalid faces. m_faces.clear(); const uint32_t meshFaceCount = mesh->faceCount(); for (uint32_t f = 0; f < meshFaceCount; f++) { if ((meshFaceGroups && meshFaceGroups->groupAt(f) == MeshFaceGroups::kInvalid) || (!meshFaceGroups && mesh->isFaceIgnored(f))) m_faces.push_back(f); } // Create *unique* list of vertices of invalid faces. const uint32_t faceCount = m_faces.size(); m_indices.resize(faceCount * 3); const uint32_t approxVertexCount = min(faceCount * 3, mesh->vertexCount()); m_vertexToSourceVertexMap.clear(); m_vertexToSourceVertexMap.reserve(approxVertexCount); HashMap> sourceVertexToVertexMap(MemTag::Mesh, approxVertexCount); for (uint32_t f = 0; f < faceCount; f++) { const uint32_t face = m_faces[f]; for (uint32_t i = 0; i < 3; i++) { const uint32_t vertex = mesh->vertexAt(face * 3 + i); uint32_t newVertex = sourceVertexToVertexMap.get(vertex); if (newVertex == UINT32_MAX) { newVertex = sourceVertexToVertexMap.add(vertex); m_vertexToSourceVertexMap.push_back(vertex); } m_indices[f * 3 + i] = newVertex; } } } ConstArrayView faces() const { return m_faces; } ConstArrayView indices() const { return m_indices; } ConstArrayView vertices() const { return m_vertexToSourceVertexMap; } private: Array m_faces, m_indices; Array m_vertexToSourceVertexMap; // Map face vertices to vertices of the source mesh. }; struct Progress { Progress(ProgressCategory category, ProgressFunc func, void *userData, uint32_t maxValue) : cancel(false), m_category(category), m_func(func), m_userData(userData), m_value(0), m_maxValue(maxValue), m_percent(0) { if (m_func) { if (!m_func(category, 0, userData)) cancel = true; } } ~Progress() { if (m_func) { if (!m_func(m_category, 100, m_userData)) cancel = true; } } void increment(uint32_t value) { m_value += value; update(); } void setMaxValue(uint32_t maxValue) { m_maxValue = maxValue; update(); } std::atomic cancel; private: void update() { if (!m_func) return; const uint32_t newPercent = uint32_t(ceilf(m_value.load() / (float)m_maxValue.load() * 100.0f)); if (newPercent != m_percent) { // Atomic max. uint32_t oldPercent = m_percent; while (oldPercent < newPercent && !m_percent.compare_exchange_weak(oldPercent, newPercent)) {} if (!m_func(m_category, m_percent, m_userData)) cancel = true; } } ProgressCategory m_category; ProgressFunc m_func; void *m_userData; std::atomic m_value, m_maxValue, m_percent; }; struct Spinlock { void lock() { while(m_lock.test_and_set(std::memory_order_acquire)) {} } void unlock() { m_lock.clear(std::memory_order_release); } private: std::atomic_flag m_lock = ATOMIC_FLAG_INIT; }; struct TaskGroupHandle { uint32_t value = UINT32_MAX; }; struct Task { void (*func)(void *groupUserData, void *taskUserData); void *userData; // Passed to func as taskUserData. }; #if XA_MULTITHREADED class TaskScheduler { public: TaskScheduler() : m_shutdown(false) { m_threadIndex = 0; // Max with current task scheduler usage is 1 per thread + 1 deep nesting, but allow for some slop. m_maxGroups = std::thread::hardware_concurrency() * 4; m_groups = XA_ALLOC_ARRAY(MemTag::Default, TaskGroup, m_maxGroups); for (uint32_t i = 0; i < m_maxGroups; i++) { new (&m_groups[i]) TaskGroup(); m_groups[i].free = true; m_groups[i].ref = 0; m_groups[i].userData = nullptr; } m_workers.resize(std::thread::hardware_concurrency() <= 1 ? 1 : std::thread::hardware_concurrency() - 1); for (uint32_t i = 0; i < m_workers.size(); i++) { new (&m_workers[i]) Worker(); m_workers[i].wakeup = false; m_workers[i].thread = XA_NEW_ARGS(MemTag::Default, std::thread, workerThread, this, &m_workers[i], i + 1); } } ~TaskScheduler() { m_shutdown = true; for (uint32_t i = 0; i < m_workers.size(); i++) { Worker &worker = m_workers[i]; XA_DEBUG_ASSERT(worker.thread); worker.wakeup = true; worker.cv.notify_one(); if (worker.thread->joinable()) worker.thread->join(); worker.thread->~thread(); XA_FREE(worker.thread); worker.~Worker(); } for (uint32_t i = 0; i < m_maxGroups; i++) m_groups[i].~TaskGroup(); XA_FREE(m_groups); } uint32_t threadCount() const { return max(1u, std::thread::hardware_concurrency()); // Including the main thread. } // userData is passed to Task::func as groupUserData. TaskGroupHandle createTaskGroup(void *userData = nullptr, uint32_t reserveSize = 0) { // Claim the first free group. for (uint32_t i = 0; i < m_maxGroups; i++) { TaskGroup &group = m_groups[i]; bool expected = true; if (!group.free.compare_exchange_strong(expected, false)) continue; group.queueLock.lock(); group.queueHead = 0; group.queue.clear(); group.queue.reserve(reserveSize); group.queueLock.unlock(); group.userData = userData; group.ref = 0; TaskGroupHandle handle; handle.value = i; return handle; } XA_DEBUG_ASSERT(false); TaskGroupHandle handle; handle.value = UINT32_MAX; return handle; } void run(TaskGroupHandle handle, const Task &task) { XA_DEBUG_ASSERT(handle.value != UINT32_MAX); TaskGroup &group = m_groups[handle.value]; group.queueLock.lock(); group.queue.push_back(task); group.queueLock.unlock(); group.ref++; // Wake up a worker to run this task. for (uint32_t i = 0; i < m_workers.size(); i++) { m_workers[i].wakeup = true; m_workers[i].cv.notify_one(); } } void wait(TaskGroupHandle *handle) { if (handle->value == UINT32_MAX) { XA_DEBUG_ASSERT(false); return; } // Run tasks from the group queue until empty. TaskGroup &group = m_groups[handle->value]; for (;;) { Task *task = nullptr; group.queueLock.lock(); if (group.queueHead < group.queue.size()) task = &group.queue[group.queueHead++]; group.queueLock.unlock(); if (!task) break; task->func(group.userData, task->userData); group.ref--; } // Even though the task queue is empty, workers can still be running tasks. while (group.ref > 0) std::this_thread::yield(); group.free = true; handle->value = UINT32_MAX; } static uint32_t currentThreadIndex() { return m_threadIndex; } private: struct TaskGroup { std::atomic free; Array queue; // Items are never removed. queueHead is incremented to pop items. uint32_t queueHead = 0; Spinlock queueLock; std::atomic ref; // Increment when a task is enqueued, decrement when a task finishes. void *userData; }; struct Worker { std::thread *thread = nullptr; std::mutex mutex; std::condition_variable cv; std::atomic wakeup; }; TaskGroup *m_groups; Array m_workers; std::atomic m_shutdown; uint32_t m_maxGroups; static thread_local uint32_t m_threadIndex; static void workerThread(TaskScheduler *scheduler, Worker *worker, uint32_t threadIndex) { m_threadIndex = threadIndex; std::unique_lock lock(worker->mutex); for (;;) { worker->cv.wait(lock, [=]{ return worker->wakeup.load(); }); worker->wakeup = false; for (;;) { if (scheduler->m_shutdown) return; // Look for a task in any of the groups and run it. TaskGroup *group = nullptr; Task *task = nullptr; for (uint32_t i = 0; i < scheduler->m_maxGroups; i++) { group = &scheduler->m_groups[i]; if (group->free || group->ref == 0) continue; group->queueLock.lock(); if (group->queueHead < group->queue.size()) { task = &group->queue[group->queueHead++]; group->queueLock.unlock(); break; } group->queueLock.unlock(); } if (!task) break; task->func(group->userData, task->userData); group->ref--; } } } }; thread_local uint32_t TaskScheduler::m_threadIndex; #else class TaskScheduler { public: ~TaskScheduler() { for (uint32_t i = 0; i < m_groups.size(); i++) destroyGroup({ i }); } uint32_t threadCount() const { return 1; } TaskGroupHandle createTaskGroup(void *userData = nullptr, uint32_t reserveSize = 0) { TaskGroup *group = XA_NEW(MemTag::Default, TaskGroup); group->queue.reserve(reserveSize); group->userData = userData; m_groups.push_back(group); TaskGroupHandle handle; handle.value = m_groups.size() - 1; return handle; } void run(TaskGroupHandle handle, Task task) { m_groups[handle.value]->queue.push_back(task); } void wait(TaskGroupHandle *handle) { if (handle->value == UINT32_MAX) { XA_DEBUG_ASSERT(false); return; } TaskGroup *group = m_groups[handle->value]; for (uint32_t i = 0; i < group->queue.size(); i++) group->queue[i].func(group->userData, group->queue[i].userData); group->queue.clear(); destroyGroup(*handle); handle->value = UINT32_MAX; } static uint32_t currentThreadIndex() { return 0; } private: void destroyGroup(TaskGroupHandle handle) { TaskGroup *group = m_groups[handle.value]; if (group) { group->~TaskGroup(); XA_FREE(group); m_groups[handle.value] = nullptr; } } struct TaskGroup { Array queue; void *userData; }; Array m_groups; }; #endif #if XA_DEBUG_EXPORT_TGA const uint8_t TGA_TYPE_RGB = 2; const uint8_t TGA_ORIGIN_UPPER = 0x20; #pragma pack(push, 1) struct TgaHeader { uint8_t id_length; uint8_t colormap_type; uint8_t image_type; uint16_t colormap_index; uint16_t colormap_length; uint8_t colormap_size; uint16_t x_origin; uint16_t y_origin; uint16_t width; uint16_t height; uint8_t pixel_size; uint8_t flags; enum { Size = 18 }; }; #pragma pack(pop) static void WriteTga(const char *filename, const uint8_t *data, uint32_t width, uint32_t height) { XA_DEBUG_ASSERT(sizeof(TgaHeader) == TgaHeader::Size); FILE *f; XA_FOPEN(f, filename, "wb"); if (!f) return; TgaHeader tga; tga.id_length = 0; tga.colormap_type = 0; tga.image_type = TGA_TYPE_RGB; tga.colormap_index = 0; tga.colormap_length = 0; tga.colormap_size = 0; tga.x_origin = 0; tga.y_origin = 0; tga.width = (uint16_t)width; tga.height = (uint16_t)height; tga.pixel_size = 24; tga.flags = TGA_ORIGIN_UPPER; fwrite(&tga, sizeof(TgaHeader), 1, f); fwrite(data, sizeof(uint8_t), width * height * 3, f); fclose(f); } #endif template class ThreadLocal { public: ThreadLocal() { #if XA_MULTITHREADED const uint32_t n = std::thread::hardware_concurrency(); #else const uint32_t n = 1; #endif m_array = XA_ALLOC_ARRAY(MemTag::Default, T, n); for (uint32_t i = 0; i < n; i++) new (&m_array[i]) T; } ~ThreadLocal() { #if XA_MULTITHREADED const uint32_t n = std::thread::hardware_concurrency(); #else const uint32_t n = 1; #endif for (uint32_t i = 0; i < n; i++) m_array[i].~T(); XA_FREE(m_array); } T &get() const { return m_array[TaskScheduler::currentThreadIndex()]; } private: T *m_array; }; // Implemented as a struct so the temporary arrays can be reused. struct Triangulator { // This is doing a simple ear-clipping algorithm that skips invalid triangles. Ideally, we should // also sort the ears by angle, start with the ones that have the smallest angle and proceed in order. void triangulatePolygon(ConstArrayView vertices, ConstArrayView inputIndices, Array &outputIndices) { m_polygonVertices.clear(); m_polygonVertices.reserve(inputIndices.length); outputIndices.clear(); if (inputIndices.length == 3) { // Simple case for triangles. outputIndices.push_back(inputIndices[0]); outputIndices.push_back(inputIndices[1]); outputIndices.push_back(inputIndices[2]); } else { // Build 2D polygon projecting vertices onto normal plane. // Faces are not necesarily planar, this is for example the case, when the face comes from filling a hole. In such cases // it's much better to use the best fit plane. Basis basis; basis.normal = normalize(cross(vertices[inputIndices[1]] - vertices[inputIndices[0]], vertices[inputIndices[2]] - vertices[inputIndices[1]])); basis.tangent = basis.computeTangent(basis.normal); basis.bitangent = basis.computeBitangent(basis.normal, basis.tangent); const uint32_t edgeCount = inputIndices.length; m_polygonPoints.clear(); m_polygonPoints.reserve(edgeCount); m_polygonAngles.clear(); m_polygonAngles.reserve(edgeCount); for (uint32_t i = 0; i < inputIndices.length; i++) { m_polygonVertices.push_back(inputIndices[i]); const Vector3 &pos = vertices[inputIndices[i]]; m_polygonPoints.push_back(Vector2(dot(basis.tangent, pos), dot(basis.bitangent, pos))); } m_polygonAngles.resize(edgeCount); while (m_polygonVertices.size() > 2) { const uint32_t size = m_polygonVertices.size(); // Update polygon angles. @@ Update only those that have changed. float minAngle = kPi2; uint32_t bestEar = 0; // Use first one if none of them is valid. bool bestIsValid = false; for (uint32_t i = 0; i < size; i++) { uint32_t i0 = i; uint32_t i1 = (i + 1) % size; // Use Sean's polygon interation trick. uint32_t i2 = (i + 2) % size; Vector2 p0 = m_polygonPoints[i0]; Vector2 p1 = m_polygonPoints[i1]; Vector2 p2 = m_polygonPoints[i2]; float d = clamp(dot(p0 - p1, p2 - p1) / (length(p0 - p1) * length(p2 - p1)), -1.0f, 1.0f); float angle = acosf(d); float area = triangleArea(p0, p1, p2); if (area < 0.0f) angle = kPi2 - angle; m_polygonAngles[i1] = angle; if (angle < minAngle || !bestIsValid) { // Make sure this is a valid ear, if not, skip this point. bool valid = true; for (uint32_t j = 0; j < size; j++) { if (j == i0 || j == i1 || j == i2) continue; Vector2 p = m_polygonPoints[j]; if (pointInTriangle(p, p0, p1, p2)) { valid = false; break; } } if (valid || !bestIsValid) { minAngle = angle; bestEar = i1; bestIsValid = valid; } } } // Clip best ear: const uint32_t i0 = (bestEar + size - 1) % size; const uint32_t i1 = (bestEar + 0) % size; const uint32_t i2 = (bestEar + 1) % size; outputIndices.push_back(m_polygonVertices[i0]); outputIndices.push_back(m_polygonVertices[i1]); outputIndices.push_back(m_polygonVertices[i2]); m_polygonVertices.removeAt(i1); m_polygonPoints.removeAt(i1); m_polygonAngles.removeAt(i1); } } } private: static bool pointInTriangle(const Vector2 &p, const Vector2 &a, const Vector2 &b, const Vector2 &c) { return triangleArea(a, b, p) >= kAreaEpsilon && triangleArea(b, c, p) >= kAreaEpsilon && triangleArea(c, a, p) >= kAreaEpsilon; } Array m_polygonVertices; Array m_polygonAngles; Array m_polygonPoints; }; class UniformGrid2 { public: // indices are optional. void reset(ConstArrayView positions, ConstArrayView indices = ConstArrayView(), uint32_t reserveEdgeCount = 0) { m_edges.clear(); if (reserveEdgeCount > 0) m_edges.reserve(reserveEdgeCount); m_positions = positions; m_indices = indices; m_cellDataOffsets.clear(); } void append(uint32_t edge) { XA_DEBUG_ASSERT(m_cellDataOffsets.isEmpty()); m_edges.push_back(edge); } bool intersect(Vector2 v1, Vector2 v2, float epsilon) { const uint32_t edgeCount = m_edges.size(); bool bruteForce = edgeCount <= 20; if (!bruteForce && m_cellDataOffsets.isEmpty()) bruteForce = !createGrid(); if (bruteForce) { for (uint32_t j = 0; j < edgeCount; j++) { const uint32_t edge = m_edges[j]; if (linesIntersect(v1, v2, edgePosition0(edge), edgePosition1(edge), epsilon)) return true; } } else { computePotentialEdges(v1, v2); uint32_t prevEdge = UINT32_MAX; for (uint32_t j = 0; j < m_potentialEdges.size(); j++) { const uint32_t edge = m_potentialEdges[j]; if (edge == prevEdge) continue; if (linesIntersect(v1, v2, edgePosition0(edge), edgePosition1(edge), epsilon)) return true; prevEdge = edge; } } return false; } // If edges is empty, checks for intersection with all edges in the grid. bool intersect(float epsilon, ConstArrayView edges = ConstArrayView(), ConstArrayView ignoreEdges = ConstArrayView()) { bool bruteForce = m_edges.size() <= 20; if (!bruteForce && m_cellDataOffsets.isEmpty()) bruteForce = !createGrid(); const uint32_t *edges1, *edges2 = nullptr; uint32_t edges1Count, edges2Count = 0; if (edges.length == 0) { edges1 = m_edges.data(); edges1Count = m_edges.size(); } else { edges1 = edges.data; edges1Count = edges.length; } if (bruteForce) { edges2 = m_edges.data(); edges2Count = m_edges.size(); } for (uint32_t i = 0; i < edges1Count; i++) { const uint32_t edge1 = edges1[i]; const uint32_t edge1Vertex[2] = { vertexAt(meshEdgeIndex0(edge1)), vertexAt(meshEdgeIndex1(edge1)) }; const Vector2 &edge1Position1 = m_positions[edge1Vertex[0]]; const Vector2 &edge1Position2 = m_positions[edge1Vertex[1]]; const Extents2 edge1Extents(edge1Position1, edge1Position2); uint32_t j = 0; if (bruteForce) { // If checking against self, test each edge pair only once. if (edges.length == 0) { j = i + 1; if (j == edges1Count) break; } } else { computePotentialEdges(edgePosition0(edge1), edgePosition1(edge1)); edges2 = m_potentialEdges.data(); edges2Count = m_potentialEdges.size(); } uint32_t prevEdge = UINT32_MAX; // Handle potential edges duplicates. for (; j < edges2Count; j++) { const uint32_t edge2 = edges2[j]; if (edge1 == edge2) continue; if (edge2 == prevEdge) continue; prevEdge = edge2; // Check if edge2 is ignored. bool ignore = false; for (uint32_t k = 0; k < ignoreEdges.length; k++) { if (edge2 == ignoreEdges[k]) { ignore = true; break; } } if (ignore) continue; const uint32_t edge2Vertex[2] = { vertexAt(meshEdgeIndex0(edge2)), vertexAt(meshEdgeIndex1(edge2)) }; // Ignore connected edges, since they can't intersect (only overlap), and may be detected as false positives. if (edge1Vertex[0] == edge2Vertex[0] || edge1Vertex[0] == edge2Vertex[1] || edge1Vertex[1] == edge2Vertex[0] || edge1Vertex[1] == edge2Vertex[1]) continue; const Vector2 &edge2Position1 = m_positions[edge2Vertex[0]]; const Vector2 &edge2Position2 = m_positions[edge2Vertex[1]]; if (!Extents2::intersect(edge1Extents, Extents2(edge2Position1, edge2Position2))) continue; if (linesIntersect(edge1Position1, edge1Position2, edge2Position1, edge2Position2, epsilon)) return true; } } return false; } #if XA_DEBUG_EXPORT_BOUNDARY_GRID void debugExport(const char *filename) { Array image; image.resize(m_gridWidth * m_gridHeight * 3); for (uint32_t y = 0; y < m_gridHeight; y++) { for (uint32_t x = 0; x < m_gridWidth; x++) { uint8_t *bgr = &image[(x + y * m_gridWidth) * 3]; bgr[0] = bgr[1] = bgr[2] = 32; uint32_t offset = m_cellDataOffsets[x + y * m_gridWidth]; while (offset != UINT32_MAX) { const uint32_t edge2 = m_cellData[offset]; srand(edge2); for (uint32_t i = 0; i < 3; i++) bgr[i] = uint8_t(bgr[i] * 0.5f + (rand() % 255) * 0.5f); offset = m_cellData[offset + 1]; } } } WriteTga(filename, image.data(), m_gridWidth, m_gridHeight); } #endif private: bool createGrid() { // Compute edge extents. Min will be the grid origin. const uint32_t edgeCount = m_edges.size(); Extents2 edgeExtents; edgeExtents.reset(); for (uint32_t i = 0; i < edgeCount; i++) { const uint32_t edge = m_edges[i]; edgeExtents.add(edgePosition0(edge)); edgeExtents.add(edgePosition1(edge)); } m_gridOrigin = edgeExtents.min; // Size grid to approximately one edge per cell in the largest dimension. const Vector2 extentsSize(edgeExtents.max - edgeExtents.min); m_cellSize = max(extentsSize.x, extentsSize.y) / (float)clamp(edgeCount, 32u, 512u); if (m_cellSize <= 0.0f) return false; m_gridWidth = uint32_t(ceilf(extentsSize.x / m_cellSize)); m_gridHeight = uint32_t(ceilf(extentsSize.y / m_cellSize)); if (m_gridWidth <= 1 || m_gridHeight <= 1) return false; // Insert edges into cells. m_cellDataOffsets.resize(m_gridWidth * m_gridHeight); for (uint32_t i = 0; i < m_cellDataOffsets.size(); i++) m_cellDataOffsets[i] = UINT32_MAX; m_cellData.clear(); m_cellData.reserve(edgeCount * 2); for (uint32_t i = 0; i < edgeCount; i++) { const uint32_t edge = m_edges[i]; traverse(edgePosition0(edge), edgePosition1(edge)); XA_DEBUG_ASSERT(!m_traversedCellOffsets.isEmpty()); for (uint32_t j = 0; j < m_traversedCellOffsets.size(); j++) { const uint32_t cell = m_traversedCellOffsets[j]; uint32_t offset = m_cellDataOffsets[cell]; if (offset == UINT32_MAX) m_cellDataOffsets[cell] = m_cellData.size(); else { for (;;) { uint32_t &nextOffset = m_cellData[offset + 1]; if (nextOffset == UINT32_MAX) { nextOffset = m_cellData.size(); break; } offset = nextOffset; } } m_cellData.push_back(edge); m_cellData.push_back(UINT32_MAX); } } return true; } void computePotentialEdges(Vector2 p1, Vector2 p2) { m_potentialEdges.clear(); traverse(p1, p2); for (uint32_t j = 0; j < m_traversedCellOffsets.size(); j++) { const uint32_t cell = m_traversedCellOffsets[j]; uint32_t offset = m_cellDataOffsets[cell]; while (offset != UINT32_MAX) { const uint32_t edge2 = m_cellData[offset]; m_potentialEdges.push_back(edge2); offset = m_cellData[offset + 1]; } } if (m_potentialEdges.isEmpty()) return; insertionSort(m_potentialEdges.data(), m_potentialEdges.size()); } // "A Fast Voxel Traversal Algorithm for Ray Tracing" void traverse(Vector2 p1, Vector2 p2) { const Vector2 dir = p2 - p1; const Vector2 normal = normalizeSafe(dir, Vector2(0.0f)); const int stepX = dir.x >= 0 ? 1 : -1; const int stepY = dir.y >= 0 ? 1 : -1; const uint32_t firstCell[2] = { cellX(p1.x), cellY(p1.y) }; const uint32_t lastCell[2] = { cellX(p2.x), cellY(p2.y) }; float distToNextCellX; if (stepX == 1) distToNextCellX = (firstCell[0] + 1) * m_cellSize - (p1.x - m_gridOrigin.x); else distToNextCellX = (p1.x - m_gridOrigin.x) - firstCell[0] * m_cellSize; float distToNextCellY; if (stepY == 1) distToNextCellY = (firstCell[1] + 1) * m_cellSize - (p1.y - m_gridOrigin.y); else distToNextCellY = (p1.y - m_gridOrigin.y) - firstCell[1] * m_cellSize; float tMaxX, tMaxY, tDeltaX, tDeltaY; if (normal.x > kEpsilon || normal.x < -kEpsilon) { tMaxX = (distToNextCellX * stepX) / normal.x; tDeltaX = (m_cellSize * stepX) / normal.x; } else tMaxX = tDeltaX = FLT_MAX; if (normal.y > kEpsilon || normal.y < -kEpsilon) { tMaxY = (distToNextCellY * stepY) / normal.y; tDeltaY = (m_cellSize * stepY) / normal.y; } else tMaxY = tDeltaY = FLT_MAX; m_traversedCellOffsets.clear(); m_traversedCellOffsets.push_back(firstCell[0] + firstCell[1] * m_gridWidth); uint32_t currentCell[2] = { firstCell[0], firstCell[1] }; while (!(currentCell[0] == lastCell[0] && currentCell[1] == lastCell[1])) { if (tMaxX < tMaxY) { tMaxX += tDeltaX; currentCell[0] += stepX; } else { tMaxY += tDeltaY; currentCell[1] += stepY; } if (currentCell[0] >= m_gridWidth || currentCell[1] >= m_gridHeight) break; if (stepX == -1 && currentCell[0] < lastCell[0]) break; if (stepX == 1 && currentCell[0] > lastCell[0]) break; if (stepY == -1 && currentCell[1] < lastCell[1]) break; if (stepY == 1 && currentCell[1] > lastCell[1]) break; m_traversedCellOffsets.push_back(currentCell[0] + currentCell[1] * m_gridWidth); } } uint32_t cellX(float x) const { return min((uint32_t)max(0.0f, (x - m_gridOrigin.x) / m_cellSize), m_gridWidth - 1u); } uint32_t cellY(float y) const { return min((uint32_t)max(0.0f, (y - m_gridOrigin.y) / m_cellSize), m_gridHeight - 1u); } Vector2 edgePosition0(uint32_t edge) const { return m_positions[vertexAt(meshEdgeIndex0(edge))]; } Vector2 edgePosition1(uint32_t edge) const { return m_positions[vertexAt(meshEdgeIndex1(edge))]; } uint32_t vertexAt(uint32_t index) const { return m_indices.length > 0 ? m_indices[index] : index; } Array m_edges; ConstArrayView m_positions; ConstArrayView m_indices; // Optional. Empty if unused. float m_cellSize; Vector2 m_gridOrigin; uint32_t m_gridWidth, m_gridHeight; // in cells Array m_cellDataOffsets; Array m_cellData; Array m_potentialEdges; Array m_traversedCellOffsets; }; struct UvMeshChart { Array faces; Array indices; uint32_t material; }; struct UvMesh { UvMeshDecl decl; BitArray faceIgnore; Array faceMaterials; Array indices; Array texcoords; // Copied from input and never modified, UvMeshInstance::texcoords are. Used to restore UvMeshInstance::texcoords so packing can be run multiple times. Array charts; Array vertexToChartMap; }; struct UvMeshInstance { UvMesh *mesh; Array texcoords; }; /* * Copyright (c) 2004-2010, Bruno Levy * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the ALICE Project-Team nor the names of its * contributors may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * If you modify this software, you should include a notice giving the * name of the person performing the modification, the date of modification, * and the reason for such modification. * * Contact: Bruno Levy * * levy@loria.fr * * ALICE Project * LORIA, INRIA Lorraine, * Campus Scientifique, BP 239 * 54506 VANDOEUVRE LES NANCY CEDEX * FRANCE */ namespace opennl { #define NL_NEW(T) XA_ALLOC(MemTag::OpenNL, T) #define NL_NEW_ARRAY(T,NB) XA_ALLOC_ARRAY(MemTag::OpenNL, T, NB) #define NL_RENEW_ARRAY(T,x,NB) XA_REALLOC(MemTag::OpenNL, x, T, NB) #define NL_DELETE(x) XA_FREE(x); x = nullptr #define NL_DELETE_ARRAY(x) XA_FREE(x); x = nullptr #define NL_CLEAR(x, T) memset(x, 0, sizeof(T)); #define NL_CLEAR_ARRAY(T,x,NB) memset(x, 0, (size_t)(NB)*sizeof(T)) #define NL_NEW_VECTOR(dim) XA_ALLOC_ARRAY(MemTag::OpenNL, double, dim) #define NL_DELETE_VECTOR(ptr) XA_FREE(ptr) struct NLMatrixStruct; typedef NLMatrixStruct * NLMatrix; typedef void (*NLDestroyMatrixFunc)(NLMatrix M); typedef void (*NLMultMatrixVectorFunc)(NLMatrix M, const double* x, double* y); #define NL_MATRIX_SPARSE_DYNAMIC 0x1001 #define NL_MATRIX_CRS 0x1002 #define NL_MATRIX_OTHER 0x1006 struct NLMatrixStruct { uint32_t m; uint32_t n; uint32_t type; NLDestroyMatrixFunc destroy_func; NLMultMatrixVectorFunc mult_func; }; /* Dynamic arrays for sparse row/columns */ struct NLCoeff { uint32_t index; double value; }; struct NLRowColumn { uint32_t size; uint32_t capacity; NLCoeff* coeff; }; /* Compressed Row Storage */ struct NLCRSMatrix { uint32_t m; uint32_t n; uint32_t type; NLDestroyMatrixFunc destroy_func; NLMultMatrixVectorFunc mult_func; double* val; uint32_t* rowptr; uint32_t* colind; uint32_t nslices; uint32_t* sliceptr; }; /* SparseMatrix data structure */ struct NLSparseMatrix { uint32_t m; uint32_t n; uint32_t type; NLDestroyMatrixFunc destroy_func; NLMultMatrixVectorFunc mult_func; uint32_t diag_size; uint32_t diag_capacity; NLRowColumn* row; NLRowColumn* column; double* diag; uint32_t row_capacity; uint32_t column_capacity; }; /* NLContext data structure */ struct NLBufferBinding { void* base_address; uint32_t stride; }; #define NL_BUFFER_ITEM(B,i) *(double*)((void*)((char*)((B).base_address)+((i)*(B).stride))) struct NLContext { NLBufferBinding *variable_buffer; double *variable_value; bool *variable_is_locked; uint32_t *variable_index; uint32_t n; NLMatrix M; NLMatrix P; NLMatrix B; NLRowColumn af; NLRowColumn al; double *x; double *b; uint32_t nb_variables; uint32_t nb_systems; uint32_t current_row; uint32_t max_iterations; bool max_iterations_defined; double threshold; double omega; uint32_t used_iterations; double error; }; static void nlDeleteMatrix(NLMatrix M) { if (!M) return; M->destroy_func(M); NL_DELETE(M); } static void nlMultMatrixVector(NLMatrix M, const double* x, double* y) { M->mult_func(M, x, y); } static void nlRowColumnConstruct(NLRowColumn* c) { c->size = 0; c->capacity = 0; c->coeff = nullptr; } static void nlRowColumnDestroy(NLRowColumn* c) { NL_DELETE_ARRAY(c->coeff); c->size = 0; c->capacity = 0; } static void nlRowColumnGrow(NLRowColumn* c) { if (c->capacity != 0) { c->capacity = 2 * c->capacity; c->coeff = NL_RENEW_ARRAY(NLCoeff, c->coeff, c->capacity); } else { c->capacity = 4; c->coeff = NL_NEW_ARRAY(NLCoeff, c->capacity); NL_CLEAR_ARRAY(NLCoeff, c->coeff, c->capacity); } } static void nlRowColumnAdd(NLRowColumn* c, uint32_t index, double value) { for (uint32_t i = 0; i < c->size; i++) { if (c->coeff[i].index == index) { c->coeff[i].value += value; return; } } if (c->size == c->capacity) nlRowColumnGrow(c); c->coeff[c->size].index = index; c->coeff[c->size].value = value; c->size++; } /* Does not check whether the index already exists */ static void nlRowColumnAppend(NLRowColumn* c, uint32_t index, double value) { if (c->size == c->capacity) nlRowColumnGrow(c); c->coeff[c->size].index = index; c->coeff[c->size].value = value; c->size++; } static void nlRowColumnZero(NLRowColumn* c) { c->size = 0; } static void nlRowColumnClear(NLRowColumn* c) { c->size = 0; c->capacity = 0; NL_DELETE_ARRAY(c->coeff); } static int nlCoeffCompare(const void* p1, const void* p2) { return (((NLCoeff*)(p2))->index < ((NLCoeff*)(p1))->index); } static void nlRowColumnSort(NLRowColumn* c) { qsort(c->coeff, c->size, sizeof(NLCoeff), nlCoeffCompare); } /* CRSMatrix data structure */ static void nlCRSMatrixDestroy(NLCRSMatrix* M) { NL_DELETE_ARRAY(M->val); NL_DELETE_ARRAY(M->rowptr); NL_DELETE_ARRAY(M->colind); NL_DELETE_ARRAY(M->sliceptr); M->m = 0; M->n = 0; M->nslices = 0; } static void nlCRSMatrixMultSlice(NLCRSMatrix* M, const double* x, double* y, uint32_t Ibegin, uint32_t Iend) { for (uint32_t i = Ibegin; i < Iend; ++i) { double sum = 0.0; for (uint32_t j = M->rowptr[i]; j < M->rowptr[i + 1]; ++j) sum += M->val[j] * x[M->colind[j]]; y[i] = sum; } } static void nlCRSMatrixMult(NLCRSMatrix* M, const double* x, double* y) { int nslices = (int)(M->nslices); for (int slice = 0; slice < nslices; ++slice) nlCRSMatrixMultSlice(M, x, y, M->sliceptr[slice], M->sliceptr[slice + 1]); } static void nlCRSMatrixConstruct(NLCRSMatrix* M, uint32_t m, uint32_t n, uint32_t nnz, uint32_t nslices) { M->m = m; M->n = n; M->type = NL_MATRIX_CRS; M->destroy_func = (NLDestroyMatrixFunc)nlCRSMatrixDestroy; M->mult_func = (NLMultMatrixVectorFunc)nlCRSMatrixMult; M->nslices = nslices; M->val = NL_NEW_ARRAY(double, nnz); NL_CLEAR_ARRAY(double, M->val, nnz); M->rowptr = NL_NEW_ARRAY(uint32_t, m + 1); NL_CLEAR_ARRAY(uint32_t, M->rowptr, m + 1); M->colind = NL_NEW_ARRAY(uint32_t, nnz); NL_CLEAR_ARRAY(uint32_t, M->colind, nnz); M->sliceptr = NL_NEW_ARRAY(uint32_t, nslices + 1); NL_CLEAR_ARRAY(uint32_t, M->sliceptr, nslices + 1); } /* SparseMatrix data structure */ static void nlSparseMatrixDestroyRowColumns(NLSparseMatrix* M) { for (uint32_t i = 0; i < M->m; i++) nlRowColumnDestroy(&(M->row[i])); NL_DELETE_ARRAY(M->row); } static void nlSparseMatrixDestroy(NLSparseMatrix* M) { XA_DEBUG_ASSERT(M->type == NL_MATRIX_SPARSE_DYNAMIC); nlSparseMatrixDestroyRowColumns(M); NL_DELETE_ARRAY(M->diag); } static void nlSparseMatrixAdd(NLSparseMatrix* M, uint32_t i, uint32_t j, double value) { XA_DEBUG_ASSERT(i >= 0 && i <= M->m - 1); XA_DEBUG_ASSERT(j >= 0 && j <= M->n - 1); if (i == j) M->diag[i] += value; nlRowColumnAdd(&(M->row[i]), j, value); } /* Returns the number of non-zero coefficients */ static uint32_t nlSparseMatrixNNZ(NLSparseMatrix* M) { uint32_t nnz = 0; for (uint32_t i = 0; i < M->m; i++) nnz += M->row[i].size; return nnz; } static void nlSparseMatrixSort(NLSparseMatrix* M) { for (uint32_t i = 0; i < M->m; i++) nlRowColumnSort(&(M->row[i])); } /* SparseMatrix x Vector routines, internal helper routines */ static void nlSparseMatrix_mult_rows(NLSparseMatrix* A, const double* x, double* y) { /* * Note: OpenMP does not like unsigned ints * (causes some floating point exceptions), * therefore I use here signed ints for all * indices. */ int m = (int)(A->m); NLCoeff* c = nullptr; NLRowColumn* Ri = nullptr; for (int i = 0; i < m; i++) { Ri = &(A->row[i]); y[i] = 0; for (int ij = 0; ij < (int)(Ri->size); ij++) { c = &(Ri->coeff[ij]); y[i] += c->value * x[c->index]; } } } static void nlSparseMatrixMult(NLSparseMatrix* A, const double* x, double* y) { XA_DEBUG_ASSERT(A->type == NL_MATRIX_SPARSE_DYNAMIC); nlSparseMatrix_mult_rows(A, x, y); } static void nlSparseMatrixConstruct(NLSparseMatrix* M, uint32_t m, uint32_t n) { M->m = m; M->n = n; M->type = NL_MATRIX_SPARSE_DYNAMIC; M->destroy_func = (NLDestroyMatrixFunc)nlSparseMatrixDestroy; M->mult_func = (NLMultMatrixVectorFunc)nlSparseMatrixMult; M->row = NL_NEW_ARRAY(NLRowColumn, m); NL_CLEAR_ARRAY(NLRowColumn, M->row, m); M->row_capacity = m; for (uint32_t i = 0; i < n; i++) nlRowColumnConstruct(&(M->row[i])); M->row_capacity = 0; M->column = nullptr; M->column_capacity = 0; M->diag_size = min(m, n); M->diag_capacity = M->diag_size; M->diag = NL_NEW_ARRAY(double, M->diag_size); NL_CLEAR_ARRAY(double, M->diag, M->diag_size); } static NLMatrix nlCRSMatrixNewFromSparseMatrix(NLSparseMatrix* M) { uint32_t nnz = nlSparseMatrixNNZ(M); uint32_t nslices = 8; /* TODO: get number of cores */ uint32_t slice, cur_bound, cur_NNZ, cur_row; uint32_t k; uint32_t slice_size = nnz / nslices; NLCRSMatrix* CRS = NL_NEW(NLCRSMatrix); NL_CLEAR(CRS, NLCRSMatrix); nlCRSMatrixConstruct(CRS, M->m, M->n, nnz, nslices); nlSparseMatrixSort(M); /* Convert matrix to CRS format */ k = 0; for (uint32_t i = 0; i < M->m; ++i) { NLRowColumn* Ri = &(M->row[i]); CRS->rowptr[i] = k; for (uint32_t ij = 0; ij < Ri->size; ij++) { NLCoeff* c = &(Ri->coeff[ij]); CRS->val[k] = c->value; CRS->colind[k] = c->index; ++k; } } CRS->rowptr[M->m] = k; /* Create "slices" to be used by parallel sparse matrix vector product */ if (CRS->sliceptr) { cur_bound = slice_size; cur_NNZ = 0; cur_row = 0; CRS->sliceptr[0] = 0; for (slice = 1; slice < nslices; ++slice) { while (cur_NNZ < cur_bound && cur_row < M->m) { cur_NNZ += CRS->rowptr[cur_row + 1] - CRS->rowptr[cur_row]; ++cur_row; } CRS->sliceptr[slice] = cur_row; cur_bound += slice_size; } CRS->sliceptr[nslices] = M->m; } return (NLMatrix)CRS; } static void nlMatrixCompress(NLMatrix* M) { NLMatrix CRS = nullptr; if ((*M)->type != NL_MATRIX_SPARSE_DYNAMIC) return; CRS = nlCRSMatrixNewFromSparseMatrix((NLSparseMatrix*)*M); nlDeleteMatrix(*M); *M = CRS; } static NLContext *nlNewContext() { NLContext* result = NL_NEW(NLContext); NL_CLEAR(result, NLContext); result->max_iterations = 100; result->threshold = 1e-6; result->omega = 1.5; result->nb_systems = 1; return result; } static void nlDeleteContext(NLContext *context) { nlDeleteMatrix(context->M); context->M = nullptr; nlDeleteMatrix(context->P); context->P = nullptr; nlDeleteMatrix(context->B); context->B = nullptr; nlRowColumnDestroy(&context->af); nlRowColumnDestroy(&context->al); NL_DELETE_ARRAY(context->variable_value); NL_DELETE_ARRAY(context->variable_buffer); NL_DELETE_ARRAY(context->variable_is_locked); NL_DELETE_ARRAY(context->variable_index); NL_DELETE_ARRAY(context->x); NL_DELETE_ARRAY(context->b); NL_DELETE(context); } static double ddot(int n, const double *x, const double *y) { double sum = 0.0; for (int i = 0; i < n; i++) sum += x[i] * y[i]; return sum; } static void daxpy(int n, double a, const double *x, double *y) { for (int i = 0; i < n; i++) y[i] = a * x[i] + y[i]; } static void dscal(int n, double a, double *x) { for (int i = 0; i < n; i++) x[i] *= a; } /* * The implementation of the solvers is inspired by * the lsolver library, by Christian Badura, available from: * http://www.mathematik.uni-freiburg.de * /IAM/Research/projectskr/lin_solver/ * * About the Conjugate Gradient, details can be found in: * Ashby, Manteuffel, Saylor * A taxononmy for conjugate gradient methods * SIAM J Numer Anal 27, 1542-1568 (1990) * * This version is completely abstract, the same code can be used for * CPU/GPU, dense matrix / sparse matrix etc... * Abstraction is realized through: * - Abstract matrix interface (NLMatrix), that can implement different * versions of matrix x vector product (CPU/GPU, sparse/dense ...) */ static uint32_t nlSolveSystem_PRE_CG(NLMatrix M, NLMatrix P, double* b, double* x, double eps, uint32_t max_iter, double *sq_bnorm, double *sq_rnorm) { int N = (int)M->n; double* r = NL_NEW_VECTOR(N); double* d = NL_NEW_VECTOR(N); double* h = NL_NEW_VECTOR(N); double *Ad = h; uint32_t its = 0; double rh, alpha, beta; double b_square = ddot(N, b, b); double err = eps * eps*b_square; double curr_err; nlMultMatrixVector(M, x, r); daxpy(N, -1., b, r); nlMultMatrixVector(P, r, d); memcpy(h, d, N * sizeof(double)); rh = ddot(N, r, h); curr_err = ddot(N, r, r); while (curr_err > err && its < max_iter) { nlMultMatrixVector(M, d, Ad); alpha = rh / ddot(N, d, Ad); daxpy(N, -alpha, d, x); daxpy(N, -alpha, Ad, r); nlMultMatrixVector(P, r, h); beta = 1. / rh; rh = ddot(N, r, h); beta *= rh; dscal(N, beta, d); daxpy(N, 1., h, d); ++its; curr_err = ddot(N, r, r); } NL_DELETE_VECTOR(r); NL_DELETE_VECTOR(d); NL_DELETE_VECTOR(h); *sq_bnorm = b_square; *sq_rnorm = curr_err; return its; } static uint32_t nlSolveSystemIterative(NLContext *context, NLMatrix M, NLMatrix P, double* b_in, double* x_in, double eps, uint32_t max_iter) { uint32_t result = 0; double rnorm = 0.0; double bnorm = 0.0; double* b = b_in; double* x = x_in; XA_DEBUG_ASSERT(M->m == M->n); double sq_bnorm, sq_rnorm; result = nlSolveSystem_PRE_CG(M, P, b, x, eps, max_iter, &sq_bnorm, &sq_rnorm); /* Get residual norm and rhs norm */ bnorm = sqrt(sq_bnorm); rnorm = sqrt(sq_rnorm); if (bnorm == 0.0) context->error = rnorm; else context->error = rnorm / bnorm; context->used_iterations = result; return result; } static bool nlSolveIterative(NLContext *context) { double* b = context->b; double* x = context->x; uint32_t n = context->n; NLMatrix M = context->M; NLMatrix P = context->P; for (uint32_t k = 0; k < context->nb_systems; ++k) { nlSolveSystemIterative(context, M, P, b, x, context->threshold, context->max_iterations); b += n; x += n; } return true; } struct NLJacobiPreconditioner { uint32_t m; uint32_t n; uint32_t type; NLDestroyMatrixFunc destroy_func; NLMultMatrixVectorFunc mult_func; double* diag_inv; }; static void nlJacobiPreconditionerDestroy(NLJacobiPreconditioner* M) { NL_DELETE_ARRAY(M->diag_inv); } static void nlJacobiPreconditionerMult(NLJacobiPreconditioner* M, const double* x, double* y) { for (uint32_t i = 0; i < M->n; ++i) y[i] = x[i] * M->diag_inv[i]; } static NLMatrix nlNewJacobiPreconditioner(NLMatrix M_in) { NLSparseMatrix* M = nullptr; NLJacobiPreconditioner* result = nullptr; XA_DEBUG_ASSERT(M_in->type == NL_MATRIX_SPARSE_DYNAMIC); XA_DEBUG_ASSERT(M_in->m == M_in->n); M = (NLSparseMatrix*)M_in; result = NL_NEW(NLJacobiPreconditioner); NL_CLEAR(result, NLJacobiPreconditioner); result->m = M->m; result->n = M->n; result->type = NL_MATRIX_OTHER; result->destroy_func = (NLDestroyMatrixFunc)nlJacobiPreconditionerDestroy; result->mult_func = (NLMultMatrixVectorFunc)nlJacobiPreconditionerMult; result->diag_inv = NL_NEW_ARRAY(double, M->n); NL_CLEAR_ARRAY(double, result->diag_inv, M->n); for (uint32_t i = 0; i < M->n; ++i) result->diag_inv[i] = (M->diag[i] == 0.0) ? 1.0 : 1.0 / M->diag[i]; return (NLMatrix)result; } #define NL_NB_VARIABLES 0x101 #define NL_MAX_ITERATIONS 0x103 static void nlSolverParameteri(NLContext *context, uint32_t pname, int param) { if (pname == NL_NB_VARIABLES) { XA_DEBUG_ASSERT(param > 0); context->nb_variables = (uint32_t)param; } else if (pname == NL_MAX_ITERATIONS) { XA_DEBUG_ASSERT(param > 0); context->max_iterations = (uint32_t)param; context->max_iterations_defined = true; } } static void nlSetVariable(NLContext *context, uint32_t index, double value) { XA_DEBUG_ASSERT(index >= 0 && index <= context->nb_variables - 1); NL_BUFFER_ITEM(context->variable_buffer[0], index) = value; } static double nlGetVariable(NLContext *context, uint32_t index) { XA_DEBUG_ASSERT(index >= 0 && index <= context->nb_variables - 1); return NL_BUFFER_ITEM(context->variable_buffer[0], index); } static void nlLockVariable(NLContext *context, uint32_t index) { XA_DEBUG_ASSERT(index >= 0 && index <= context->nb_variables - 1); context->variable_is_locked[index] = true; } static void nlVariablesToVector(NLContext *context) { uint32_t n = context->n; XA_DEBUG_ASSERT(context->x); for (uint32_t k = 0; k < context->nb_systems; ++k) { for (uint32_t i = 0; i < context->nb_variables; ++i) { if (!context->variable_is_locked[i]) { uint32_t index = context->variable_index[i]; XA_DEBUG_ASSERT(index < context->n); double value = NL_BUFFER_ITEM(context->variable_buffer[k], i); context->x[index + k * n] = value; } } } } static void nlVectorToVariables(NLContext *context) { uint32_t n = context->n; XA_DEBUG_ASSERT(context->x); for (uint32_t k = 0; k < context->nb_systems; ++k) { for (uint32_t i = 0; i < context->nb_variables; ++i) { if (!context->variable_is_locked[i]) { uint32_t index = context->variable_index[i]; XA_DEBUG_ASSERT(index < context->n); double value = context->x[index + k * n]; NL_BUFFER_ITEM(context->variable_buffer[k], i) = value; } } } } static void nlCoefficient(NLContext *context, uint32_t index, double value) { XA_DEBUG_ASSERT(index >= 0 && index <= context->nb_variables - 1); if (context->variable_is_locked[index]) { /* * Note: in al, indices are NLvariable indices, * within [0..nb_variables-1] */ nlRowColumnAppend(&(context->al), index, value); } else { /* * Note: in af, indices are system indices, * within [0..n-1] */ nlRowColumnAppend(&(context->af), context->variable_index[index], value); } } #define NL_SYSTEM 0x0 #define NL_MATRIX 0x1 #define NL_ROW 0x2 static void nlBegin(NLContext *context, uint32_t prim) { if (prim == NL_SYSTEM) { XA_DEBUG_ASSERT(context->nb_variables > 0); context->variable_buffer = NL_NEW_ARRAY(NLBufferBinding, context->nb_systems); NL_CLEAR_ARRAY(NLBufferBinding, context->variable_buffer, context->nb_systems); context->variable_value = NL_NEW_ARRAY(double, context->nb_variables * context->nb_systems); NL_CLEAR_ARRAY(double, context->variable_value, context->nb_variables * context->nb_systems); for (uint32_t k = 0; k < context->nb_systems; ++k) { context->variable_buffer[k].base_address = context->variable_value + k * context->nb_variables; context->variable_buffer[k].stride = sizeof(double); } context->variable_is_locked = NL_NEW_ARRAY(bool, context->nb_variables); NL_CLEAR_ARRAY(bool, context->variable_is_locked, context->nb_variables); context->variable_index = NL_NEW_ARRAY(uint32_t, context->nb_variables); NL_CLEAR_ARRAY(uint32_t, context->variable_index, context->nb_variables); } else if (prim == NL_MATRIX) { if (context->M) return; uint32_t n = 0; for (uint32_t i = 0; i < context->nb_variables; i++) { if (!context->variable_is_locked[i]) { context->variable_index[i] = n; n++; } else context->variable_index[i] = (uint32_t)~0; } context->n = n; if (!context->max_iterations_defined) context->max_iterations = n * 5; context->M = (NLMatrix)(NL_NEW(NLSparseMatrix)); NL_CLEAR(context->M, NLSparseMatrix); nlSparseMatrixConstruct((NLSparseMatrix*)(context->M), n, n); context->x = NL_NEW_ARRAY(double, n*context->nb_systems); NL_CLEAR_ARRAY(double, context->x, n*context->nb_systems); context->b = NL_NEW_ARRAY(double, n*context->nb_systems); NL_CLEAR_ARRAY(double, context->b, n*context->nb_systems); nlVariablesToVector(context); nlRowColumnConstruct(&context->af); nlRowColumnConstruct(&context->al); context->current_row = 0; } else if (prim == NL_ROW) { nlRowColumnZero(&context->af); nlRowColumnZero(&context->al); } } static void nlEnd(NLContext *context, uint32_t prim) { if (prim == NL_MATRIX) { nlRowColumnClear(&context->af); nlRowColumnClear(&context->al); } else if (prim == NL_ROW) { NLRowColumn* af = &context->af; NLRowColumn* al = &context->al; NLSparseMatrix* M = (NLSparseMatrix*)context->M; double* b = context->b; uint32_t nf = af->size; uint32_t nl = al->size; uint32_t n = context->n; double S; /* * least_squares : we want to solve * A'A x = A'b */ for (uint32_t i = 0; i < nf; i++) { for (uint32_t j = 0; j < nf; j++) { nlSparseMatrixAdd(M, af->coeff[i].index, af->coeff[j].index, af->coeff[i].value * af->coeff[j].value); } } for (uint32_t k = 0; k < context->nb_systems; ++k) { S = 0.0; for (uint32_t jj = 0; jj < nl; ++jj) { uint32_t j = al->coeff[jj].index; S += al->coeff[jj].value * NL_BUFFER_ITEM(context->variable_buffer[k], j); } for (uint32_t jj = 0; jj < nf; jj++) b[k*n + af->coeff[jj].index] -= af->coeff[jj].value * S; } context->current_row++; } } static bool nlSolve(NLContext *context) { nlDeleteMatrix(context->P); context->P = nlNewJacobiPreconditioner(context->M); nlMatrixCompress(&context->M); bool result = nlSolveIterative(context); nlVectorToVariables(context); return result; } } // namespace opennl namespace raster { class ClippedTriangle { public: ClippedTriangle(const Vector2 &a, const Vector2 &b, const Vector2 &c) { m_numVertices = 3; m_activeVertexBuffer = 0; m_verticesA[0] = a; m_verticesA[1] = b; m_verticesA[2] = c; m_vertexBuffers[0] = m_verticesA; m_vertexBuffers[1] = m_verticesB; m_area = 0; } void clipHorizontalPlane(float offset, float clipdirection) { Vector2 *v = m_vertexBuffers[m_activeVertexBuffer]; m_activeVertexBuffer ^= 1; Vector2 *v2 = m_vertexBuffers[m_activeVertexBuffer]; v[m_numVertices] = v[0]; float dy2, dy1 = offset - v[0].y; int dy2in, dy1in = clipdirection * dy1 >= 0; uint32_t p = 0; for (uint32_t k = 0; k < m_numVertices; k++) { dy2 = offset - v[k + 1].y; dy2in = clipdirection * dy2 >= 0; if (dy1in) v2[p++] = v[k]; if ( dy1in + dy2in == 1 ) { // not both in/out float dx = v[k + 1].x - v[k].x; float dy = v[k + 1].y - v[k].y; v2[p++] = Vector2(v[k].x + dy1 * (dx / dy), offset); } dy1 = dy2; dy1in = dy2in; } m_numVertices = p; } void clipVerticalPlane(float offset, float clipdirection) { Vector2 *v = m_vertexBuffers[m_activeVertexBuffer]; m_activeVertexBuffer ^= 1; Vector2 *v2 = m_vertexBuffers[m_activeVertexBuffer]; v[m_numVertices] = v[0]; float dx2, dx1 = offset - v[0].x; int dx2in, dx1in = clipdirection * dx1 >= 0; uint32_t p = 0; for (uint32_t k = 0; k < m_numVertices; k++) { dx2 = offset - v[k + 1].x; dx2in = clipdirection * dx2 >= 0; if (dx1in) v2[p++] = v[k]; if ( dx1in + dx2in == 1 ) { // not both in/out float dx = v[k + 1].x - v[k].x; float dy = v[k + 1].y - v[k].y; v2[p++] = Vector2(offset, v[k].y + dx1 * (dy / dx)); } dx1 = dx2; dx1in = dx2in; } m_numVertices = p; } void computeArea() { Vector2 *v = m_vertexBuffers[m_activeVertexBuffer]; v[m_numVertices] = v[0]; m_area = 0; for (uint32_t k = 0; k < m_numVertices; k++) { // http://local.wasp.uwa.edu.au/~pbourke/geometry/polyarea/ float f = v[k].x * v[k + 1].y - v[k + 1].x * v[k].y; m_area += f; } m_area = 0.5f * fabsf(m_area); } void clipAABox(float x0, float y0, float x1, float y1) { clipVerticalPlane(x0, -1); clipHorizontalPlane(y0, -1); clipVerticalPlane(x1, 1); clipHorizontalPlane(y1, 1); computeArea(); } float area() const { return m_area; } private: Vector2 m_verticesA[7 + 1]; Vector2 m_verticesB[7 + 1]; Vector2 *m_vertexBuffers[2]; uint32_t m_numVertices; uint32_t m_activeVertexBuffer; float m_area; }; /// A callback to sample the environment. Return false to terminate rasterization. typedef bool (*SamplingCallback)(void *param, int x, int y); /// A triangle for rasterization. struct Triangle { Triangle(const Vector2 &_v0, const Vector2 &_v1, const Vector2 &_v2) : v1(_v0), v2(_v2), v3(_v1), n1(0.0f), n2(0.0f), n3(0.0f) { // make sure every triangle is front facing. flipBackface(); // Compute deltas. if (isValid()) computeUnitInwardNormals(); } bool isValid() { const Vector2 e0 = v3 - v1; const Vector2 e1 = v2 - v1; const float area = e0.y * e1.x - e1.y * e0.x; return area != 0.0f; } // extents has to be multiple of BK_SIZE!! bool drawAA(const Vector2 &extents, SamplingCallback cb, void *param) { const float PX_INSIDE = 1.0f/sqrtf(2.0f); const float PX_OUTSIDE = -1.0f/sqrtf(2.0f); const float BK_SIZE = 8; const float BK_INSIDE = sqrtf(BK_SIZE*BK_SIZE/2.0f); const float BK_OUTSIDE = -sqrtf(BK_SIZE*BK_SIZE/2.0f); // Bounding rectangle float minx = floorf(max(min3(v1.x, v2.x, v3.x), 0.0f)); float miny = floorf(max(min3(v1.y, v2.y, v3.y), 0.0f)); float maxx = ceilf( min(max3(v1.x, v2.x, v3.x), extents.x - 1.0f)); float maxy = ceilf( min(max3(v1.y, v2.y, v3.y), extents.y - 1.0f)); // There's no reason to align the blocks to the viewport, instead we align them to the origin of the triangle bounds. minx = floorf(minx); miny = floorf(miny); //minx = (float)(((int)minx) & (~((int)BK_SIZE - 1))); // align to blocksize (we don't need to worry about blocks partially out of viewport) //miny = (float)(((int)miny) & (~((int)BK_SIZE - 1))); minx += 0.5; miny += 0.5; // sampling at texel centers! maxx += 0.5; maxy += 0.5; // Half-edge constants float C1 = n1.x * (-v1.x) + n1.y * (-v1.y); float C2 = n2.x * (-v2.x) + n2.y * (-v2.y); float C3 = n3.x * (-v3.x) + n3.y * (-v3.y); // Loop through blocks for (float y0 = miny; y0 <= maxy; y0 += BK_SIZE) { for (float x0 = minx; x0 <= maxx; x0 += BK_SIZE) { // Corners of block float xc = (x0 + (BK_SIZE - 1) / 2.0f); float yc = (y0 + (BK_SIZE - 1) / 2.0f); // Evaluate half-space functions float aC = C1 + n1.x * xc + n1.y * yc; float bC = C2 + n2.x * xc + n2.y * yc; float cC = C3 + n3.x * xc + n3.y * yc; // Skip block when outside an edge if ( (aC <= BK_OUTSIDE) || (bC <= BK_OUTSIDE) || (cC <= BK_OUTSIDE) ) continue; // Accept whole block when totally covered if ( (aC >= BK_INSIDE) && (bC >= BK_INSIDE) && (cC >= BK_INSIDE) ) { for (float y = y0; y < y0 + BK_SIZE; y++) { for (float x = x0; x < x0 + BK_SIZE; x++) { if (!cb(param, (int)x, (int)y)) return false; } } } else { // Partially covered block float CY1 = C1 + n1.x * x0 + n1.y * y0; float CY2 = C2 + n2.x * x0 + n2.y * y0; float CY3 = C3 + n3.x * x0 + n3.y * y0; for (float y = y0; y < y0 + BK_SIZE; y++) { // @@ This is not clipping to scissor rectangle correctly. float CX1 = CY1; float CX2 = CY2; float CX3 = CY3; for (float x = x0; x < x0 + BK_SIZE; x++) { // @@ This is not clipping to scissor rectangle correctly. if (CX1 >= PX_INSIDE && CX2 >= PX_INSIDE && CX3 >= PX_INSIDE) { if (!cb(param, (int)x, (int)y)) return false; } else if ((CX1 >= PX_OUTSIDE) && (CX2 >= PX_OUTSIDE) && (CX3 >= PX_OUTSIDE)) { // triangle partially covers pixel. do clipping. ClippedTriangle ct(v1 - Vector2(x, y), v2 - Vector2(x, y), v3 - Vector2(x, y)); ct.clipAABox(-0.5, -0.5, 0.5, 0.5); if (ct.area() > 0.0f) { if (!cb(param, (int)x, (int)y)) return false; } } CX1 += n1.x; CX2 += n2.x; CX3 += n3.x; } CY1 += n1.y; CY2 += n2.y; CY3 += n3.y; } } } } return true; } private: void flipBackface() { // check if triangle is backfacing, if so, swap two vertices if ( ((v3.x - v1.x) * (v2.y - v1.y) - (v3.y - v1.y) * (v2.x - v1.x)) < 0 ) { Vector2 hv = v1; v1 = v2; v2 = hv; // swap pos } } // compute unit inward normals for each edge. void computeUnitInwardNormals() { n1 = v1 - v2; n1 = Vector2(-n1.y, n1.x); n1 = n1 * (1.0f / sqrtf(dot(n1, n1))); n2 = v2 - v3; n2 = Vector2(-n2.y, n2.x); n2 = n2 * (1.0f / sqrtf(dot(n2, n2))); n3 = v3 - v1; n3 = Vector2(-n3.y, n3.x); n3 = n3 * (1.0f / sqrtf(dot(n3, n3))); } // Vertices. Vector2 v1, v2, v3; Vector2 n1, n2, n3; // unit inward normals }; // Process the given triangle. Returns false if rasterization was interrupted by the callback. static bool drawTriangle(const Vector2 &extents, const Vector2 v[3], SamplingCallback cb, void *param) { Triangle tri(v[0], v[1], v[2]); // @@ It would be nice to have a conservative drawing mode that enlarges the triangle extents by one texel and is able to handle degenerate triangles. // @@ Maybe the simplest thing to do would be raster triangle edges. if (tri.isValid()) return tri.drawAA(extents, cb, param); return true; } } // namespace raster namespace segment { // - Insertion is o(n) // - Smallest element goes at the end, so that popping it is o(1). struct CostQueue { CostQueue(uint32_t size = UINT32_MAX) : m_maxSize(size), m_pairs(MemTag::SegmentAtlasChartCandidates) {} float peekCost() const { return m_pairs.back().cost; } uint32_t peekFace() const { return m_pairs.back().face; } void push(float cost, uint32_t face) { const Pair p = { cost, face }; if (m_pairs.isEmpty() || cost < peekCost()) m_pairs.push_back(p); else { uint32_t i = 0; const uint32_t count = m_pairs.size(); for (; i < count; i++) { if (m_pairs[i].cost < cost) break; } m_pairs.insertAt(i, p); if (m_pairs.size() > m_maxSize) m_pairs.removeAt(0); } } uint32_t pop() { XA_DEBUG_ASSERT(!m_pairs.isEmpty()); uint32_t f = m_pairs.back().face; m_pairs.pop_back(); return f; } XA_INLINE void clear() { m_pairs.clear(); } XA_INLINE uint32_t count() const { return m_pairs.size(); } private: const uint32_t m_maxSize; struct Pair { float cost; uint32_t face; }; Array m_pairs; }; struct AtlasData { ChartOptions options; const Mesh *mesh = nullptr; Array edgeDihedralAngles; Array edgeLengths; Array faceAreas; Array faceUvAreas; // Can be negative. Array faceNormals; BitArray isFaceInChart; AtlasData() : edgeDihedralAngles(MemTag::SegmentAtlasMeshData), edgeLengths(MemTag::SegmentAtlasMeshData), faceAreas(MemTag::SegmentAtlasMeshData), faceNormals(MemTag::SegmentAtlasMeshData) {} void compute() { const uint32_t faceCount = mesh->faceCount(); const uint32_t edgeCount = mesh->edgeCount(); edgeDihedralAngles.resize(edgeCount); edgeLengths.resize(edgeCount); faceAreas.resize(faceCount); if (options.useInputMeshUvs) faceUvAreas.resize(faceCount); faceNormals.resize(faceCount); isFaceInChart.resize(faceCount); isFaceInChart.zeroOutMemory(); for (uint32_t f = 0; f < faceCount; f++) { for (uint32_t i = 0; i < 3; i++) { const uint32_t edge = f * 3 + i; const Vector3 &p0 = mesh->position(mesh->vertexAt(meshEdgeIndex0(edge))); const Vector3 &p1 = mesh->position(mesh->vertexAt(meshEdgeIndex1(edge))); edgeLengths[edge] = length(p1 - p0); XA_DEBUG_ASSERT(edgeLengths[edge] > 0.0f); } faceAreas[f] = mesh->computeFaceArea(f); XA_DEBUG_ASSERT(faceAreas[f] > 0.0f); if (options.useInputMeshUvs) faceUvAreas[f] = mesh->computeFaceParametricArea(f); faceNormals[f] = mesh->computeFaceNormal(f); } for (uint32_t face = 0; face < faceCount; face++) { for (uint32_t i = 0; i < 3; i++) { const uint32_t edge = face * 3 + i; const uint32_t oedge = mesh->oppositeEdge(edge); if (oedge == UINT32_MAX) edgeDihedralAngles[edge] = FLT_MAX; else { const uint32_t oface = meshEdgeFace(oedge); edgeDihedralAngles[edge] = edgeDihedralAngles[oedge] = dot(faceNormals[face], faceNormals[oface]); } } } } }; // If MeshDecl::vertexUvData is set on input meshes, find charts by floodfilling faces in world/model space without crossing UV seams. struct OriginalUvCharts { OriginalUvCharts(AtlasData &data) : m_data(data) {} uint32_t chartCount() const { return m_charts.size(); } const Basis &chartBasis(uint32_t chartIndex) const { return m_chartBasis[chartIndex]; } ConstArrayView chartFaces(uint32_t chartIndex) const { const Chart &chart = m_charts[chartIndex]; return ConstArrayView(&m_chartFaces[chart.firstFace], chart.faceCount); } void compute() { m_charts.clear(); m_chartFaces.clear(); const Mesh *mesh = m_data.mesh; const uint32_t faceCount = mesh->faceCount(); for (uint32_t f = 0; f < faceCount; f++) { if (m_data.isFaceInChart.get(f)) continue; if (isZero(m_data.faceUvAreas[f], kAreaEpsilon)) continue; // Face must have valid UVs. // Found an unassigned face, create a new chart. Chart chart; chart.firstFace = m_chartFaces.size(); chart.faceCount = 1; m_chartFaces.push_back(f); m_data.isFaceInChart.set(f); floodfillFaces(chart); m_charts.push_back(chart); } // Compute basis for each chart. m_chartBasis.resize(m_charts.size()); for (uint32_t c = 0; c < m_charts.size(); c++) { const Chart &chart = m_charts[c]; m_tempPoints.resize(chart.faceCount * 3); for (uint32_t f = 0; f < chart.faceCount; f++) { const uint32_t face = m_chartFaces[chart.firstFace + f]; for (uint32_t i = 0; i < 3; i++) m_tempPoints[f * 3 + i] = m_data.mesh->position(m_data.mesh->vertexAt(face * 3 + i)); } Fit::computeBasis(m_tempPoints, &m_chartBasis[c]); } } private: struct Chart { uint32_t firstFace, faceCount; }; void floodfillFaces(Chart &chart) { const bool isFaceAreaNegative = m_data.faceUvAreas[m_chartFaces[chart.firstFace]] < 0.0f; for (;;) { bool newFaceAdded = false; const uint32_t faceCount = chart.faceCount; for (uint32_t f = 0; f < faceCount; f++) { const uint32_t sourceFace = m_chartFaces[chart.firstFace + f]; for (Mesh::FaceEdgeIterator edgeIt(m_data.mesh, sourceFace); !edgeIt.isDone(); edgeIt.advance()) { const uint32_t face = edgeIt.oppositeFace(); if (face == UINT32_MAX) continue; // Boundary edge. if (m_data.isFaceInChart.get(face)) continue; // Already assigned to a chart. if (isZero(m_data.faceUvAreas[face], kAreaEpsilon)) continue; // Face must have valid UVs. if ((m_data.faceUvAreas[face] < 0.0f) != isFaceAreaNegative) continue; // Face winding is opposite of the first chart face. const Vector2 &uv0 = m_data.mesh->texcoord(edgeIt.vertex0()); const Vector2 &uv1 = m_data.mesh->texcoord(edgeIt.vertex1()); const Vector2 &ouv0 = m_data.mesh->texcoord(m_data.mesh->vertexAt(meshEdgeIndex0(edgeIt.oppositeEdge()))); const Vector2 &ouv1 = m_data.mesh->texcoord(m_data.mesh->vertexAt(meshEdgeIndex1(edgeIt.oppositeEdge()))); if (!equal(uv0, ouv1, m_data.mesh->epsilon()) || !equal(uv1, ouv0, m_data.mesh->epsilon())) continue; // UVs must match exactly. m_chartFaces.push_back(face); chart.faceCount++; m_data.isFaceInChart.set(face); newFaceAdded = true; } } if (!newFaceAdded) break; } } AtlasData &m_data; Array m_charts; Array m_chartBasis; Array m_chartFaces; Array m_tempPoints; }; #if XA_DEBUG_EXPORT_OBJ_PLANAR_REGIONS static uint32_t s_planarRegionsCurrentRegion; static uint32_t s_planarRegionsCurrentVertex; #endif struct PlanarCharts { PlanarCharts(AtlasData &data) : m_data(data), m_nextRegionFace(MemTag::SegmentAtlasPlanarRegions), m_faceToRegionId(MemTag::SegmentAtlasPlanarRegions) {} const Basis &chartBasis(uint32_t chartIndex) const { return m_chartBasis[chartIndex]; } uint32_t chartCount() const { return m_charts.size(); } ConstArrayView chartFaces(uint32_t chartIndex) const { const Chart &chart = m_charts[chartIndex]; return ConstArrayView(&m_chartFaces[chart.firstFace], chart.faceCount); } uint32_t regionIdFromFace(uint32_t face) const { return m_faceToRegionId[face]; } uint32_t nextRegionFace(uint32_t face) const { return m_nextRegionFace[face]; } float regionArea(uint32_t region) const { return m_regionAreas[region]; } void compute() { const uint32_t faceCount = m_data.mesh->faceCount(); // Precompute regions of coplanar incident faces. m_regionFirstFace.clear(); m_nextRegionFace.resize(faceCount); m_faceToRegionId.resize(faceCount); for (uint32_t f = 0; f < faceCount; f++) { m_nextRegionFace[f] = f; m_faceToRegionId[f] = UINT32_MAX; } Array faceStack; faceStack.reserve(min(faceCount, 16u)); uint32_t regionCount = 0; for (uint32_t f = 0; f < faceCount; f++) { if (m_nextRegionFace[f] != f) continue; // Already assigned. if (m_data.isFaceInChart.get(f)) continue; // Already in a chart. faceStack.clear(); faceStack.push_back(f); for (;;) { if (faceStack.isEmpty()) break; const uint32_t face = faceStack.back(); m_faceToRegionId[face] = regionCount; faceStack.pop_back(); for (Mesh::FaceEdgeIterator it(m_data.mesh, face); !it.isDone(); it.advance()) { const uint32_t oface = it.oppositeFace(); if (it.isBoundary()) continue; if (m_nextRegionFace[oface] != oface) continue; // Already assigned. if (m_data.isFaceInChart.get(oface)) continue; // Already in a chart. if (!equal(dot(m_data.faceNormals[face], m_data.faceNormals[oface]), 1.0f, kEpsilon)) continue; // Not coplanar. const uint32_t next = m_nextRegionFace[face]; m_nextRegionFace[face] = oface; m_nextRegionFace[oface] = next; m_faceToRegionId[oface] = regionCount; faceStack.push_back(oface); } } m_regionFirstFace.push_back(f); regionCount++; } #if XA_DEBUG_EXPORT_OBJ_PLANAR_REGIONS static std::mutex s_mutex; { std::lock_guard lock(s_mutex); FILE *file; XA_FOPEN(file, "debug_mesh_planar_regions.obj", s_planarRegionsCurrentRegion == 0 ? "w" : "a"); if (file) { m_data.mesh->writeObjVertices(file); fprintf(file, "s off\n"); for (uint32_t i = 0; i < regionCount; i++) { fprintf(file, "o region%u\n", s_planarRegionsCurrentRegion); for (uint32_t j = 0; j < faceCount; j++) { if (m_faceToRegionId[j] == i) m_data.mesh->writeObjFace(file, j, s_planarRegionsCurrentVertex); } s_planarRegionsCurrentRegion++; } s_planarRegionsCurrentVertex += m_data.mesh->vertexCount(); fclose(file); } } #endif // Precompute planar region areas. m_regionAreas.resize(regionCount); m_regionAreas.zeroOutMemory(); for (uint32_t f = 0; f < faceCount; f++) { if (m_faceToRegionId[f] == UINT32_MAX) continue; m_regionAreas[m_faceToRegionId[f]] += m_data.faceAreas[f]; } // Create charts from suitable planar regions. // The dihedral angle of all boundary edges must be >= 90 degrees. m_charts.clear(); m_chartFaces.clear(); for (uint32_t region = 0; region < regionCount; region++) { const uint32_t firstRegionFace = m_regionFirstFace[region]; uint32_t face = firstRegionFace; bool createChart = true; do { for (Mesh::FaceEdgeIterator it(m_data.mesh, face); !it.isDone(); it.advance()) { if (it.isBoundary()) continue; // Ignore mesh boundary edges. const uint32_t oface = it.oppositeFace(); if (m_faceToRegionId[oface] == region) continue; // Ignore internal edges. const float angle = m_data.edgeDihedralAngles[it.edge()]; if (angle > 0.0f && angle < FLT_MAX) { // FLT_MAX on boundaries. createChart = false; break; } } if (!createChart) break; face = m_nextRegionFace[face]; } while (face != firstRegionFace); // Create a chart. if (createChart) { Chart chart; chart.firstFace = m_chartFaces.size(); chart.faceCount = 0; face = firstRegionFace; do { m_data.isFaceInChart.set(face); m_chartFaces.push_back(face); chart.faceCount++; face = m_nextRegionFace[face]; } while (face != firstRegionFace); m_charts.push_back(chart); } } // Compute basis for each chart using the first face normal (all faces have the same normal). m_chartBasis.resize(m_charts.size()); for (uint32_t c = 0; c < m_charts.size(); c++) { const uint32_t face = m_chartFaces[m_charts[c].firstFace]; Basis &basis = m_chartBasis[c]; basis.normal = m_data.faceNormals[face]; basis.tangent = Basis::computeTangent(basis.normal); basis.bitangent = Basis::computeBitangent(basis.normal, basis.tangent); } } private: struct Chart { uint32_t firstFace, faceCount; }; AtlasData &m_data; Array m_regionFirstFace; Array m_nextRegionFace; Array m_faceToRegionId; Array m_regionAreas; Array m_charts; Array m_chartFaces; Array m_chartBasis; }; struct ClusteredCharts { ClusteredCharts(AtlasData &data, const PlanarCharts &planarCharts) : m_data(data), m_planarCharts(planarCharts), m_texcoords(MemTag::SegmentAtlasMeshData), m_bestTriangles(10), m_placingSeeds(false) {} ~ClusteredCharts() { const uint32_t chartCount = m_charts.size(); for (uint32_t i = 0; i < chartCount; i++) { m_charts[i]->~Chart(); XA_FREE(m_charts[i]); } } uint32_t chartCount() const { return m_charts.size(); } ConstArrayView chartFaces(uint32_t chartIndex) const { return m_charts[chartIndex]->faces; } const Basis &chartBasis(uint32_t chartIndex) const { return m_charts[chartIndex]->basis; } void compute() { const uint32_t faceCount = m_data.mesh->faceCount(); m_facesLeft = 0; for (uint32_t i = 0; i < faceCount; i++) { if (!m_data.isFaceInChart.get(i)) m_facesLeft++; } const uint32_t chartCount = m_charts.size(); for (uint32_t i = 0; i < chartCount; i++) { m_charts[i]->~Chart(); XA_FREE(m_charts[i]); } m_charts.clear(); m_faceCharts.resize(faceCount); m_faceCharts.fill(-1); m_texcoords.resize(faceCount * 3); if (m_facesLeft == 0) return; // Create initial charts greedely. placeSeeds(m_data.options.maxCost * 0.5f); if (m_data.options.maxIterations == 0) { XA_DEBUG_ASSERT(m_facesLeft == 0); return; } relocateSeeds(); resetCharts(); // Restart process growing charts in parallel. uint32_t iteration = 0; for (;;) { growCharts(m_data.options.maxCost); // When charts cannot grow more: fill holes, merge charts, relocate seeds and start new iteration. fillHoles(m_data.options.maxCost * 0.5f); #if XA_MERGE_CHARTS mergeCharts(); #endif if (++iteration == m_data.options.maxIterations) break; if (!relocateSeeds()) break; resetCharts(); } // Make sure no holes are left! XA_DEBUG_ASSERT(m_facesLeft == 0); } private: struct Chart { Chart() : faces(MemTag::SegmentAtlasChartFaces) {} int id = -1; Basis basis; // Best fit normal. float area = 0.0f; float boundaryLength = 0.0f; Vector3 centroidSum = Vector3(0.0f); // Sum of chart face centroids. Vector3 centroid = Vector3(0.0f); // Average centroid of chart faces. Array faces; Array failedPlanarRegions; CostQueue candidates; uint32_t seed; }; void placeSeeds(float threshold) { XA_PROFILE_START(clusteredChartsPlaceSeeds) m_placingSeeds = true; // Instead of using a predefiened number of seeds: // - Add seeds one by one, growing chart until a certain treshold. // - Undo charts and restart growing process. // @@ How can we give preference to faces far from sharp features as in the LSCM paper? // - those points can be found using a simple flood filling algorithm. // - how do we weight the probabilities? while (m_facesLeft > 0) createChart(threshold); m_placingSeeds = false; XA_PROFILE_END(clusteredChartsPlaceSeeds) } // Returns true if any of the charts can grow more. void growCharts(float threshold) { XA_PROFILE_START(clusteredChartsGrow) for (;;) { if (m_facesLeft == 0) break; // Get the single best candidate out of the chart best candidates. uint32_t bestFace = UINT32_MAX, bestChart = UINT32_MAX; float lowestCost = FLT_MAX; for (uint32_t i = 0; i < m_charts.size(); i++) { Chart *chart = m_charts[i]; // Get the best candidate from the chart. // Cleanup any best candidates that have been claimed by another chart. uint32_t face = UINT32_MAX; float cost = FLT_MAX; for (;;) { if (chart->candidates.count() == 0) break; cost = chart->candidates.peekCost(); face = chart->candidates.peekFace(); if (!m_data.isFaceInChart.get(face)) break; else { // Face belongs to another chart. Pop from queue so the next best candidate can be retrieved. chart->candidates.pop(); face = UINT32_MAX; } } if (face == UINT32_MAX) continue; // No candidates for this chart. // See if best candidate overall. if (cost < lowestCost) { lowestCost = cost; bestFace = face; bestChart = i; } } if (bestFace == UINT32_MAX || lowestCost > threshold) break; Chart *chart = m_charts[bestChart]; chart->candidates.pop(); // Pop the selected candidate from the queue. if (!addFaceToChart(chart, bestFace)) chart->failedPlanarRegions.push_back(m_planarCharts.regionIdFromFace(bestFace)); } XA_PROFILE_END(clusteredChartsGrow) } void resetCharts() { XA_PROFILE_START(clusteredChartsReset) const uint32_t faceCount = m_data.mesh->faceCount(); for (uint32_t i = 0; i < faceCount; i++) { if (m_faceCharts[i] != -1) m_data.isFaceInChart.unset(i); m_faceCharts[i] = -1; } m_facesLeft = 0; for (uint32_t i = 0; i < faceCount; i++) { if (!m_data.isFaceInChart.get(i)) m_facesLeft++; } const uint32_t chartCount = m_charts.size(); for (uint32_t i = 0; i < chartCount; i++) { Chart *chart = m_charts[i]; chart->area = 0.0f; chart->boundaryLength = 0.0f; chart->basis.normal = Vector3(0.0f); chart->basis.tangent = Vector3(0.0f); chart->basis.bitangent = Vector3(0.0f); chart->centroidSum = Vector3(0.0f); chart->centroid = Vector3(0.0f); chart->faces.clear(); chart->candidates.clear(); chart->failedPlanarRegions.clear(); addFaceToChart(chart, chart->seed); } XA_PROFILE_END(clusteredChartsReset) } bool relocateSeeds() { XA_PROFILE_START(clusteredChartsRelocateSeeds) bool anySeedChanged = false; const uint32_t chartCount = m_charts.size(); for (uint32_t i = 0; i < chartCount; i++) { if (relocateSeed(m_charts[i])) { anySeedChanged = true; } } XA_PROFILE_END(clusteredChartsRelocateSeeds) return anySeedChanged; } void fillHoles(float threshold) { XA_PROFILE_START(clusteredChartsFillHoles) while (m_facesLeft > 0) createChart(threshold); XA_PROFILE_END(clusteredChartsFillHoles) } #if XA_MERGE_CHARTS void mergeCharts() { XA_PROFILE_START(clusteredChartsMerge) const uint32_t chartCount = m_charts.size(); // Merge charts progressively until there's none left to merge. for (;;) { bool merged = false; for (int c = chartCount - 1; c >= 0; c--) { Chart *chart = m_charts[c]; if (chart == nullptr) continue; float externalBoundaryLength = 0.0f; m_sharedBoundaryLengths.resize(chartCount); m_sharedBoundaryLengths.zeroOutMemory(); m_sharedBoundaryLengthsNoSeams.resize(chartCount); m_sharedBoundaryLengthsNoSeams.zeroOutMemory(); m_sharedBoundaryEdgeCountNoSeams.resize(chartCount); m_sharedBoundaryEdgeCountNoSeams.zeroOutMemory(); const uint32_t faceCount = chart->faces.size(); for (uint32_t i = 0; i < faceCount; i++) { const uint32_t f = chart->faces[i]; for (Mesh::FaceEdgeIterator it(m_data.mesh, f); !it.isDone(); it.advance()) { const float l = m_data.edgeLengths[it.edge()]; if (it.isBoundary()) { externalBoundaryLength += l; } else { const int neighborChart = m_faceCharts[it.oppositeFace()]; if (neighborChart == -1) externalBoundaryLength += l; else if (m_charts[neighborChart] != chart) { if ((it.isSeam() && (isNormalSeam(it.edge()) || it.isTextureSeam()))) { externalBoundaryLength += l; } else { m_sharedBoundaryLengths[neighborChart] += l; } m_sharedBoundaryLengthsNoSeams[neighborChart] += l; m_sharedBoundaryEdgeCountNoSeams[neighborChart]++; } } } } for (int cc = chartCount - 1; cc >= 0; cc--) { if (cc == c) continue; Chart *chart2 = m_charts[cc]; if (chart2 == nullptr) continue; // Must share a boundary. if (m_sharedBoundaryLengths[cc] <= 0.0f) continue; // Compare proxies. if (dot(chart2->basis.normal, chart->basis.normal) < XA_MERGE_CHARTS_MIN_NORMAL_DEVIATION) continue; // Obey max chart area and boundary length. if (m_data.options.maxChartArea > 0.0f && chart->area + chart2->area > m_data.options.maxChartArea) continue; if (m_data.options.maxBoundaryLength > 0.0f && chart->boundaryLength + chart2->boundaryLength - m_sharedBoundaryLengthsNoSeams[cc] > m_data.options.maxBoundaryLength) continue; // Merge if chart2 has a single face. // chart1 must have more than 1 face. // chart2 area must be <= 10% of chart1 area. if (m_sharedBoundaryLengthsNoSeams[cc] > 0.0f && chart->faces.size() > 1 && chart2->faces.size() == 1 && chart2->area <= chart->area * 0.1f) goto merge; // Merge if chart2 has two faces (probably a quad), and chart1 bounds at least 2 of its edges. if (chart2->faces.size() == 2 && m_sharedBoundaryEdgeCountNoSeams[cc] >= 2) goto merge; // Merge if chart2 is wholely inside chart1, ignoring seams. if (m_sharedBoundaryLengthsNoSeams[cc] > 0.0f && equal(m_sharedBoundaryLengthsNoSeams[cc], chart2->boundaryLength, kEpsilon)) goto merge; if (m_sharedBoundaryLengths[cc] > 0.2f * max(0.0f, chart->boundaryLength - externalBoundaryLength) || m_sharedBoundaryLengths[cc] > 0.75f * chart2->boundaryLength) goto merge; continue; merge: if (!mergeChart(chart, chart2, m_sharedBoundaryLengthsNoSeams[cc])) continue; merged = true; break; } if (merged) break; } if (!merged) break; } // Remove deleted charts. for (int c = 0; c < int32_t(m_charts.size()); /*do not increment if removed*/) { if (m_charts[c] == nullptr) { m_charts.removeAt(c); // Update m_faceCharts. const uint32_t faceCount = m_faceCharts.size(); for (uint32_t i = 0; i < faceCount; i++) { XA_DEBUG_ASSERT(m_faceCharts[i] != c); XA_DEBUG_ASSERT(m_faceCharts[i] <= int32_t(m_charts.size())); if (m_faceCharts[i] > c) { m_faceCharts[i]--; } } } else { m_charts[c]->id = c; c++; } } XA_PROFILE_END(clusteredChartsMerge) } #endif private: void createChart(float threshold) { Chart *chart = XA_NEW(MemTag::Default, Chart); chart->id = (int)m_charts.size(); m_charts.push_back(chart); // Pick a face not used by any chart yet, belonging to the largest planar region. chart->seed = 0; float largestArea = 0.0f; for (uint32_t f = 0; f < m_data.mesh->faceCount(); f++) { if (m_data.isFaceInChart.get(f)) continue; const float area = m_planarCharts.regionArea(m_planarCharts.regionIdFromFace(f)); if (area > largestArea) { largestArea = area; chart->seed = f; } } addFaceToChart(chart, chart->seed); // Grow the chart as much as possible within the given threshold. for (;;) { if (chart->candidates.count() == 0 || chart->candidates.peekCost() > threshold) break; const uint32_t f = chart->candidates.pop(); if (m_data.isFaceInChart.get(f)) continue; if (!addFaceToChart(chart, f)) { chart->failedPlanarRegions.push_back(m_planarCharts.regionIdFromFace(f)); continue; } } } bool isChartBoundaryEdge(const Chart *chart, uint32_t edge) const { const uint32_t oppositeEdge = m_data.mesh->oppositeEdge(edge); const uint32_t oppositeFace = meshEdgeFace(oppositeEdge); return oppositeEdge == UINT32_MAX || m_faceCharts[oppositeFace] != chart->id; } bool computeChartBasis(Chart *chart, Basis *basis) { const uint32_t faceCount = chart->faces.size(); m_tempPoints.resize(chart->faces.size() * 3); for (uint32_t i = 0; i < faceCount; i++) { const uint32_t f = chart->faces[i]; for (uint32_t j = 0; j < 3; j++) m_tempPoints[i * 3 + j] = m_data.mesh->position(m_data.mesh->vertexAt(f * 3 + j)); } return Fit::computeBasis(m_tempPoints, basis); } bool isFaceFlipped(uint32_t face) const { const Vector2 &v1 = m_texcoords[face * 3 + 0]; const Vector2 &v2 = m_texcoords[face * 3 + 1]; const Vector2 &v3 = m_texcoords[face * 3 + 2]; const float parametricArea = ((v2.x - v1.x) * (v3.y - v1.y) - (v3.x - v1.x) * (v2.y - v1.y)) * 0.5f; return parametricArea < 0.0f; } void parameterizeChart(const Chart *chart) { const uint32_t faceCount = chart->faces.size(); for (uint32_t i = 0; i < faceCount; i++) { const uint32_t face = chart->faces[i]; for (uint32_t j = 0; j < 3; j++) { const uint32_t offset = face * 3 + j; const Vector3 &pos = m_data.mesh->position(m_data.mesh->vertexAt(offset)); m_texcoords[offset] = Vector2(dot(chart->basis.tangent, pos), dot(chart->basis.bitangent, pos)); } } } // m_faceCharts for the chart faces must be set to the chart ID. Needed to compute boundary edges. bool isChartParameterizationValid(const Chart *chart) { const uint32_t faceCount = chart->faces.size(); // Check for flipped faces in the parameterization. OK if all are flipped. uint32_t flippedFaceCount = 0; for (uint32_t i = 0; i < faceCount; i++) { if (isFaceFlipped(chart->faces[i])) flippedFaceCount++; } if (flippedFaceCount != 0 && flippedFaceCount != faceCount) return false; // Check for boundary intersection in the parameterization. XA_PROFILE_START(clusteredChartsPlaceSeedsBoundaryIntersection) XA_PROFILE_START(clusteredChartsGrowBoundaryIntersection) m_boundaryGrid.reset(m_texcoords); for (uint32_t i = 0; i < faceCount; i++) { const uint32_t f = chart->faces[i]; for (uint32_t j = 0; j < 3; j++) { const uint32_t edge = f * 3 + j; if (isChartBoundaryEdge(chart, edge)) m_boundaryGrid.append(edge); } } const bool intersection = m_boundaryGrid.intersect(m_data.mesh->epsilon()); #if XA_PROFILE if (m_placingSeeds) XA_PROFILE_END(clusteredChartsPlaceSeedsBoundaryIntersection) else XA_PROFILE_END(clusteredChartsGrowBoundaryIntersection) #endif if (intersection) return false; return true; } bool addFaceToChart(Chart *chart, uint32_t face) { XA_DEBUG_ASSERT(!m_data.isFaceInChart.get(face)); const uint32_t oldFaceCount = chart->faces.size(); const bool firstFace = oldFaceCount == 0; // Append the face and any coplanar connected faces to the chart faces array. chart->faces.push_back(face); uint32_t coplanarFace = m_planarCharts.nextRegionFace(face); while (coplanarFace != face) { XA_DEBUG_ASSERT(!m_data.isFaceInChart.get(coplanarFace)); chart->faces.push_back(coplanarFace); coplanarFace = m_planarCharts.nextRegionFace(coplanarFace); } const uint32_t faceCount = chart->faces.size(); // Compute basis. Basis basis; if (firstFace) { // Use the first face normal. // Use any edge as the tangent vector. basis.normal = m_data.faceNormals[face]; basis.tangent = normalize(m_data.mesh->position(m_data.mesh->vertexAt(face * 3 + 0)) - m_data.mesh->position(m_data.mesh->vertexAt(face * 3 + 1))); basis.bitangent = cross(basis.normal, basis.tangent); } else { // Use best fit normal. if (!computeChartBasis(chart, &basis)) { chart->faces.resize(oldFaceCount); return false; } if (dot(basis.normal, m_data.faceNormals[face]) < 0.0f) // Flip normal if oriented in the wrong direction. basis.normal = -basis.normal; } if (!firstFace) { // Compute orthogonal parameterization and check that it is valid. parameterizeChart(chart); for (uint32_t i = oldFaceCount; i < faceCount; i++) m_faceCharts[chart->faces[i]] = chart->id; if (!isChartParameterizationValid(chart)) { for (uint32_t i = oldFaceCount; i < faceCount; i++) m_faceCharts[chart->faces[i]] = -1; chart->faces.resize(oldFaceCount); return false; } } // Add face(s) to chart. chart->basis = basis; chart->area = computeArea(chart, face); chart->boundaryLength = computeBoundaryLength(chart, face); for (uint32_t i = oldFaceCount; i < faceCount; i++) { const uint32_t f = chart->faces[i]; m_faceCharts[f] = chart->id; m_facesLeft--; m_data.isFaceInChart.set(f); chart->centroidSum += m_data.mesh->computeFaceCenter(f); } chart->centroid = chart->centroidSum / float(chart->faces.size()); // Refresh candidates. chart->candidates.clear(); for (uint32_t i = 0; i < faceCount; i++) { // Traverse neighboring faces, add the ones that do not belong to any chart yet. const uint32_t f = chart->faces[i]; for (uint32_t j = 0; j < 3; j++) { const uint32_t edge = f * 3 + j; const uint32_t oedge = m_data.mesh->oppositeEdge(edge); if (oedge == UINT32_MAX) continue; // Boundary edge. const uint32_t oface = meshEdgeFace(oedge); if (m_data.isFaceInChart.get(oface)) continue; // Face belongs to another chart. if (chart->failedPlanarRegions.contains(m_planarCharts.regionIdFromFace(oface))) continue; // Failed to add this faces planar region to the chart before. const float cost = computeCost(chart, oface); if (cost < FLT_MAX) chart->candidates.push(cost, oface); } } return true; } // Returns true if the seed has changed. bool relocateSeed(Chart *chart) { // Find the first N triangles that fit the proxy best. const uint32_t faceCount = chart->faces.size(); m_bestTriangles.clear(); for (uint32_t i = 0; i < faceCount; i++) { const float cost = computeNormalDeviationMetric(chart, chart->faces[i]); m_bestTriangles.push(cost, chart->faces[i]); } // Of those, choose the most central triangle. uint32_t mostCentral = 0; float minDistance = FLT_MAX; for (;;) { if (m_bestTriangles.count() == 0) break; const uint32_t face = m_bestTriangles.pop(); Vector3 faceCentroid = m_data.mesh->computeFaceCenter(face); const float distance = length(chart->centroid - faceCentroid); if (distance < minDistance) { minDistance = distance; mostCentral = face; } } XA_DEBUG_ASSERT(minDistance < FLT_MAX); if (mostCentral == chart->seed) return false; chart->seed = mostCentral; return true; } // Cost is combined metrics * weights. float computeCost(Chart *chart, uint32_t face) const { // Estimate boundary length and area: const float newChartArea = computeArea(chart, face); const float newBoundaryLength = computeBoundaryLength(chart, face); // Enforce limits strictly: if (m_data.options.maxChartArea > 0.0f && newChartArea > m_data.options.maxChartArea) return FLT_MAX; if (m_data.options.maxBoundaryLength > 0.0f && newBoundaryLength > m_data.options.maxBoundaryLength) return FLT_MAX; // Compute metrics. float cost = 0.0f; const float normalDeviation = computeNormalDeviationMetric(chart, face); if (normalDeviation >= 0.707f) // ~75 degrees return FLT_MAX; cost += m_data.options.normalDeviationWeight * normalDeviation; // Penalize faces that cross seams, reward faces that close seams or reach boundaries. // Make sure normal seams are fully respected: const float normalSeam = computeNormalSeamMetric(chart, face); if (m_data.options.normalSeamWeight >= 1000.0f && normalSeam > 0.0f) return FLT_MAX; cost += m_data.options.normalSeamWeight * normalSeam; cost += m_data.options.roundnessWeight * computeRoundnessMetric(chart, newBoundaryLength, newChartArea); cost += m_data.options.straightnessWeight * computeStraightnessMetric(chart, face); cost += m_data.options.textureSeamWeight * computeTextureSeamMetric(chart, face); //float R = evaluateCompletenessMetric(chart, face); //float D = evaluateDihedralAngleMetric(chart, face); // @@ Add a metric based on local dihedral angle. // @@ Tweaking the normal and texture seam metrics. // - Cause more impedance. Never cross 90 degree edges. XA_DEBUG_ASSERT(isFinite(cost)); return cost; } // Returns a value in [0-1]. // 0 if face normal is coplanar to the chart's best fit normal. // 1 if face normal is perpendicular. float computeNormalDeviationMetric(Chart *chart, uint32_t face) const { // All faces in coplanar regions have the same normal, can use any face. const Vector3 faceNormal = m_data.faceNormals[face]; // Use plane fitting metric for now: return min(1.0f - dot(faceNormal, chart->basis.normal), 1.0f); // @@ normal deviations should be weighted by face area } float computeRoundnessMetric(Chart *chart, float newBoundaryLength, float newChartArea) const { const float oldRoundness = square(chart->boundaryLength) / chart->area; const float newRoundness = square(newBoundaryLength) / newChartArea; return 1.0f - oldRoundness / newRoundness; } float computeStraightnessMetric(Chart *chart, uint32_t firstFace) const { float l_out = 0.0f; // Length of firstFace planar region boundary that doesn't border the chart. float l_in = 0.0f; // Length that does border the chart. const uint32_t planarRegionId = m_planarCharts.regionIdFromFace(firstFace); uint32_t face = firstFace; for (;;) { for (Mesh::FaceEdgeIterator it(m_data.mesh, face); !it.isDone(); it.advance()) { const float l = m_data.edgeLengths[it.edge()]; if (it.isBoundary()) { l_out += l; } else if (m_planarCharts.regionIdFromFace(it.oppositeFace()) != planarRegionId) { if (m_faceCharts[it.oppositeFace()] != chart->id) l_out += l; else l_in += l; } } face = m_planarCharts.nextRegionFace(face); if (face == firstFace) break; } #if 1 float ratio = (l_out - l_in) / (l_out + l_in); return min(ratio, 0.0f); // Only use the straightness metric to close gaps. #else return 1.0f - l_in / l_out; #endif } bool isNormalSeam(uint32_t edge) const { const uint32_t oppositeEdge = m_data.mesh->oppositeEdge(edge); if (oppositeEdge == UINT32_MAX) return false; // boundary edge if (m_data.mesh->flags() & MeshFlags::HasNormals) { const uint32_t v0 = m_data.mesh->vertexAt(meshEdgeIndex0(edge)); const uint32_t v1 = m_data.mesh->vertexAt(meshEdgeIndex1(edge)); const uint32_t ov0 = m_data.mesh->vertexAt(meshEdgeIndex0(oppositeEdge)); const uint32_t ov1 = m_data.mesh->vertexAt(meshEdgeIndex1(oppositeEdge)); if (v0 == ov1 && v1 == ov0) return false; return !equal(m_data.mesh->normal(v0), m_data.mesh->normal(ov1), kNormalEpsilon) || !equal(m_data.mesh->normal(v1), m_data.mesh->normal(ov0), kNormalEpsilon); } const uint32_t f0 = meshEdgeFace(edge); const uint32_t f1 = meshEdgeFace(oppositeEdge); if (m_planarCharts.regionIdFromFace(f0) == m_planarCharts.regionIdFromFace(f1)) return false; return !equal(m_data.faceNormals[f0], m_data.faceNormals[f1], kNormalEpsilon); } float computeNormalSeamMetric(Chart *chart, uint32_t firstFace) const { float seamFactor = 0.0f, totalLength = 0.0f; uint32_t face = firstFace; for (;;) { for (Mesh::FaceEdgeIterator it(m_data.mesh, face); !it.isDone(); it.advance()) { if (it.isBoundary()) continue; if (m_faceCharts[it.oppositeFace()] != chart->id) continue; float l = m_data.edgeLengths[it.edge()]; totalLength += l; if (!it.isSeam()) continue; // Make sure it's a normal seam. if (isNormalSeam(it.edge())) { float d; if (m_data.mesh->flags() & MeshFlags::HasNormals) { const Vector3 &n0 = m_data.mesh->normal(it.vertex0()); const Vector3 &n1 = m_data.mesh->normal(it.vertex1()); const Vector3 &on0 = m_data.mesh->normal(m_data.mesh->vertexAt(meshEdgeIndex0(it.oppositeEdge()))); const Vector3 &on1 = m_data.mesh->normal(m_data.mesh->vertexAt(meshEdgeIndex1(it.oppositeEdge()))); const float d0 = clamp(dot(n0, on1), 0.0f, 1.0f); const float d1 = clamp(dot(n1, on0), 0.0f, 1.0f); d = (d0 + d1) * 0.5f; } else { d = clamp(dot(m_data.faceNormals[face], m_data.faceNormals[meshEdgeFace(it.oppositeEdge())]), 0.0f, 1.0f); } l *= 1 - d; seamFactor += l; } } face = m_planarCharts.nextRegionFace(face); if (face == firstFace) break; } if (seamFactor <= 0.0f) return 0.0f; return seamFactor / totalLength; } float computeTextureSeamMetric(Chart *chart, uint32_t firstFace) const { float seamLength = 0.0f, totalLength = 0.0f; uint32_t face = firstFace; for (;;) { for (Mesh::FaceEdgeIterator it(m_data.mesh, face); !it.isDone(); it.advance()) { if (it.isBoundary()) continue; if (m_faceCharts[it.oppositeFace()] != chart->id) continue; float l = m_data.edgeLengths[it.edge()]; totalLength += l; if (!it.isSeam()) continue; // Make sure it's a texture seam. if (it.isTextureSeam()) seamLength += l; } face = m_planarCharts.nextRegionFace(face); if (face == firstFace) break; } if (seamLength <= 0.0f) return 0.0f; // Avoid division by zero. return seamLength / totalLength; } float computeArea(Chart *chart, uint32_t firstFace) const { float area = chart->area; uint32_t face = firstFace; for (;;) { area += m_data.faceAreas[face]; face = m_planarCharts.nextRegionFace(face); if (face == firstFace) break; } return area; } float computeBoundaryLength(Chart *chart, uint32_t firstFace) const { float boundaryLength = chart->boundaryLength; // Add new edges, subtract edges shared with the chart. const uint32_t planarRegionId = m_planarCharts.regionIdFromFace(firstFace); uint32_t face = firstFace; for (;;) { for (Mesh::FaceEdgeIterator it(m_data.mesh, face); !it.isDone(); it.advance()) { const float edgeLength = m_data.edgeLengths[it.edge()]; if (it.isBoundary()) { boundaryLength += edgeLength; } else if (m_planarCharts.regionIdFromFace(it.oppositeFace()) != planarRegionId) { if (m_faceCharts[it.oppositeFace()] != chart->id) boundaryLength += edgeLength; else boundaryLength -= edgeLength; } } face = m_planarCharts.nextRegionFace(face); if (face == firstFace) break; } return max(0.0f, boundaryLength); // @@ Hack! } bool mergeChart(Chart *owner, Chart *chart, float sharedBoundaryLength) { const uint32_t oldOwnerFaceCount = owner->faces.size(); const uint32_t chartFaceCount = chart->faces.size(); owner->faces.push_back(chart->faces); for (uint32_t i = 0; i < chartFaceCount; i++) { XA_DEBUG_ASSERT(m_faceCharts[chart->faces[i]] == chart->id); m_faceCharts[chart->faces[i]] = owner->id; } // Compute basis using best fit normal. Basis basis; if (!computeChartBasis(owner, &basis)) { owner->faces.resize(oldOwnerFaceCount); for (uint32_t i = 0; i < chartFaceCount; i++) m_faceCharts[chart->faces[i]] = chart->id; return false; } if (dot(basis.normal, m_data.faceNormals[owner->faces[0]]) < 0.0f) // Flip normal if oriented in the wrong direction. basis.normal = -basis.normal; // Compute orthogonal parameterization and check that it is valid. parameterizeChart(owner); if (!isChartParameterizationValid(owner)) { owner->faces.resize(oldOwnerFaceCount); for (uint32_t i = 0; i < chartFaceCount; i++) m_faceCharts[chart->faces[i]] = chart->id; return false; } // Merge chart. owner->basis = basis; owner->failedPlanarRegions.push_back(chart->failedPlanarRegions); // Update adjacencies? owner->area += chart->area; owner->boundaryLength += chart->boundaryLength - sharedBoundaryLength; // Delete chart. m_charts[chart->id] = nullptr; chart->~Chart(); XA_FREE(chart); return true; } private: AtlasData &m_data; const PlanarCharts &m_planarCharts; Array m_texcoords; uint32_t m_facesLeft; Array m_faceCharts; Array m_charts; CostQueue m_bestTriangles; Array m_tempPoints; UniformGrid2 m_boundaryGrid; #if XA_MERGE_CHARTS // mergeCharts Array m_sharedBoundaryLengths; Array m_sharedBoundaryLengthsNoSeams; Array m_sharedBoundaryEdgeCountNoSeams; #endif bool m_placingSeeds; }; struct ChartGeneratorType { enum Enum { OriginalUv, Planar, Clustered, Piecewise }; }; struct Atlas { Atlas() : m_originalUvCharts(m_data), m_planarCharts(m_data), m_clusteredCharts(m_data, m_planarCharts) {} uint32_t chartCount() const { return m_originalUvCharts.chartCount() + m_planarCharts.chartCount() + m_clusteredCharts.chartCount(); } ConstArrayView chartFaces(uint32_t chartIndex) const { if (chartIndex < m_originalUvCharts.chartCount()) return m_originalUvCharts.chartFaces(chartIndex); chartIndex -= m_originalUvCharts.chartCount(); if (chartIndex < m_planarCharts.chartCount()) return m_planarCharts.chartFaces(chartIndex); chartIndex -= m_planarCharts.chartCount(); return m_clusteredCharts.chartFaces(chartIndex); } const Basis &chartBasis(uint32_t chartIndex) const { if (chartIndex < m_originalUvCharts.chartCount()) return m_originalUvCharts.chartBasis(chartIndex); chartIndex -= m_originalUvCharts.chartCount(); if (chartIndex < m_planarCharts.chartCount()) return m_planarCharts.chartBasis(chartIndex); chartIndex -= m_planarCharts.chartCount(); return m_clusteredCharts.chartBasis(chartIndex); } ChartGeneratorType::Enum chartGeneratorType(uint32_t chartIndex) const { if (chartIndex < m_originalUvCharts.chartCount()) return ChartGeneratorType::OriginalUv; chartIndex -= m_originalUvCharts.chartCount(); if (chartIndex < m_planarCharts.chartCount()) return ChartGeneratorType::Planar; return ChartGeneratorType::Clustered; } void reset(const Mesh *mesh, const ChartOptions &options) { XA_PROFILE_START(buildAtlasInit) m_data.options = options; m_data.mesh = mesh; m_data.compute(); XA_PROFILE_END(buildAtlasInit) } void compute() { if (m_data.options.useInputMeshUvs) { XA_PROFILE_START(originalUvCharts) m_originalUvCharts.compute(); XA_PROFILE_END(originalUvCharts) } XA_PROFILE_START(planarCharts) m_planarCharts.compute(); XA_PROFILE_END(planarCharts) XA_PROFILE_START(clusteredCharts) m_clusteredCharts.compute(); XA_PROFILE_END(clusteredCharts) } private: AtlasData m_data; OriginalUvCharts m_originalUvCharts; PlanarCharts m_planarCharts; ClusteredCharts m_clusteredCharts; }; struct ComputeUvMeshChartsTaskArgs { UvMesh *mesh; Progress *progress; }; // Charts are found by floodfilling faces without crossing UV seams. struct ComputeUvMeshChartsTask { ComputeUvMeshChartsTask(ComputeUvMeshChartsTaskArgs *args) : m_mesh(args->mesh), m_progress(args->progress), m_uvToEdgeMap(MemTag::Default, m_mesh->indices.size()), m_faceAssigned(m_mesh->indices.size() / 3) {} void run() { const uint32_t vertexCount = m_mesh->texcoords.size(); const uint32_t indexCount = m_mesh->indices.size(); const uint32_t faceCount = indexCount / 3; // A vertex can only be assigned to one chart. m_mesh->vertexToChartMap.resize(vertexCount); m_mesh->vertexToChartMap.fill(UINT32_MAX); // Map vertex UV to edge. Face is then edge / 3. for (uint32_t i = 0; i < indexCount; i++) m_uvToEdgeMap.add(m_mesh->texcoords[m_mesh->indices[i]]); // Find charts. m_faceAssigned.zeroOutMemory(); for (uint32_t f = 0; f < faceCount; f++) { if (m_progress->cancel) return; m_progress->increment(1); // Found an unassigned face, see if it can be added. const uint32_t chartIndex = m_mesh->charts.size(); if (!canAddFaceToChart(chartIndex, f)) continue; // Face is OK, create a new chart with the face. UvMeshChart *chart = XA_NEW(MemTag::Default, UvMeshChart); m_mesh->charts.push_back(chart); chart->material = m_mesh->faceMaterials.isEmpty() ? 0 : m_mesh->faceMaterials[f]; addFaceToChart(chartIndex, f); // Walk incident faces and assign them to the chart. uint32_t f2 = 0; for (;;) { bool newFaceAssigned = false; const uint32_t faceCount2 = chart->faces.size(); for (; f2 < faceCount2; f2++) { const uint32_t face = chart->faces[f2]; for (uint32_t i = 0; i < 3; i++) { // Add any valid faces with colocal UVs to the chart. const Vector2 &uv = m_mesh->texcoords[m_mesh->indices[face * 3 + i]]; uint32_t edge = m_uvToEdgeMap.get(uv); while (edge != UINT32_MAX) { const uint32_t newFace = edge / 3; if (canAddFaceToChart(chartIndex, newFace)) { addFaceToChart(chartIndex, newFace); newFaceAssigned = true; } edge = m_uvToEdgeMap.getNext(uv, edge); } } } if (!newFaceAssigned) break; } } } private: // The chart at chartIndex doesn't have to exist yet. bool canAddFaceToChart(uint32_t chartIndex, uint32_t face) const { if (m_faceAssigned.get(face)) return false; // Already assigned to a chart. if (m_mesh->faceIgnore.get(face)) return false; // Face is ignored (zero area or nan UVs). if (!m_mesh->faceMaterials.isEmpty() && chartIndex < m_mesh->charts.size()) { if (m_mesh->faceMaterials[face] != m_mesh->charts[chartIndex]->material) return false; // Materials don't match. } for (uint32_t i = 0; i < 3; i++) { const uint32_t vertex = m_mesh->indices[face * 3 + i]; if (m_mesh->vertexToChartMap[vertex] != UINT32_MAX && m_mesh->vertexToChartMap[vertex] != chartIndex) return false; // Vertex already assigned to another chart. } return true; } void addFaceToChart(uint32_t chartIndex, uint32_t face) { UvMeshChart *chart = m_mesh->charts[chartIndex]; m_faceAssigned.set(face); chart->faces.push_back(face); for (uint32_t i = 0; i < 3; i++) { const uint32_t vertex = m_mesh->indices[face * 3 + i]; m_mesh->vertexToChartMap[vertex] = chartIndex; chart->indices.push_back(vertex); } } UvMesh * const m_mesh; Progress * const m_progress; HashMap m_uvToEdgeMap; // Face is edge / 3. BitArray m_faceAssigned; }; static void runComputeUvMeshChartsTask(void * /*groupUserData*/, void *taskUserData) { XA_PROFILE_START(computeChartsThread) ComputeUvMeshChartsTask task((ComputeUvMeshChartsTaskArgs *)taskUserData); task.run(); XA_PROFILE_END(computeChartsThread) } static bool computeUvMeshCharts(TaskScheduler *taskScheduler, ArrayView meshes, ProgressFunc progressFunc, void *progressUserData) { uint32_t totalFaceCount = 0; for (uint32_t i = 0; i < meshes.length; i++) totalFaceCount += meshes[i]->indices.size() / 3; Progress progress(ProgressCategory::ComputeCharts, progressFunc, progressUserData, totalFaceCount); TaskGroupHandle taskGroup = taskScheduler->createTaskGroup(nullptr, meshes.length); Array taskArgs; taskArgs.resize(meshes.length); for (uint32_t i = 0; i < meshes.length; i++) { ComputeUvMeshChartsTaskArgs &args = taskArgs[i]; args.mesh = meshes[i]; args.progress = &progress; Task task; task.userData = &args; task.func = runComputeUvMeshChartsTask; taskScheduler->run(taskGroup, task); } taskScheduler->wait(&taskGroup); return !progress.cancel; } } // namespace segment namespace param { // Fast sweep in 3 directions static bool findApproximateDiameterVertices(Mesh *mesh, uint32_t *a, uint32_t *b) { XA_DEBUG_ASSERT(a != nullptr); XA_DEBUG_ASSERT(b != nullptr); const uint32_t vertexCount = mesh->vertexCount(); uint32_t minVertex[3]; uint32_t maxVertex[3]; minVertex[0] = minVertex[1] = minVertex[2] = UINT32_MAX; maxVertex[0] = maxVertex[1] = maxVertex[2] = UINT32_MAX; for (uint32_t v = 1; v < vertexCount; v++) { if (mesh->isBoundaryVertex(v)) { minVertex[0] = minVertex[1] = minVertex[2] = v; maxVertex[0] = maxVertex[1] = maxVertex[2] = v; break; } } if (minVertex[0] == UINT32_MAX) { // Input mesh has not boundaries. return false; } for (uint32_t v = 1; v < vertexCount; v++) { if (!mesh->isBoundaryVertex(v)) { // Skip interior vertices. continue; } const Vector3 &pos = mesh->position(v); if (pos.x < mesh->position(minVertex[0]).x) minVertex[0] = v; else if (pos.x > mesh->position(maxVertex[0]).x) maxVertex[0] = v; if (pos.y < mesh->position(minVertex[1]).y) minVertex[1] = v; else if (pos.y > mesh->position(maxVertex[1]).y) maxVertex[1] = v; if (pos.z < mesh->position(minVertex[2]).z) minVertex[2] = v; else if (pos.z > mesh->position(maxVertex[2]).z) maxVertex[2] = v; } float lengths[3]; for (int i = 0; i < 3; i++) { lengths[i] = length(mesh->position(minVertex[i]) - mesh->position(maxVertex[i])); } if (lengths[0] > lengths[1] && lengths[0] > lengths[2]) { *a = minVertex[0]; *b = maxVertex[0]; } else if (lengths[1] > lengths[2]) { *a = minVertex[1]; *b = maxVertex[1]; } else { *a = minVertex[2]; *b = maxVertex[2]; } return true; } // From OpenNL LSCM example. // Computes the coordinates of the vertices of a triangle in a local 2D orthonormal basis of the triangle's plane. static void projectTriangle(Vector3 p0, Vector3 p1, Vector3 p2, Vector2 *z0, Vector2 *z1, Vector2 *z2) { Vector3 X = normalize(p1 - p0); Vector3 Z = normalize(cross(X, p2 - p0)); Vector3 Y = cross(Z, X); Vector3 &O = p0; *z0 = Vector2(0, 0); *z1 = Vector2(length(p1 - O), 0); *z2 = Vector2(dot(p2 - O, X), dot(p2 - O, Y)); } // Conformal relations from Brecht Van Lommel (based on ABF): static float vec_angle_cos(const Vector3 &v1, const Vector3 &v2, const Vector3 &v3) { Vector3 d1 = v1 - v2; Vector3 d2 = v3 - v2; return clamp(dot(d1, d2) / (length(d1) * length(d2)), -1.0f, 1.0f); } static float vec_angle(const Vector3 &v1, const Vector3 &v2, const Vector3 &v3) { float dot = vec_angle_cos(v1, v2, v3); return acosf(dot); } static void triangle_angles(const Vector3 &v1, const Vector3 &v2, const Vector3 &v3, float *a1, float *a2, float *a3) { *a1 = vec_angle(v3, v1, v2); *a2 = vec_angle(v1, v2, v3); *a3 = kPi - *a2 - *a1; } static bool setup_abf_relations(opennl::NLContext *context, int id0, int id1, int id2, const Vector3 &p0, const Vector3 &p1, const Vector3 &p2) { // @@ IC: Wouldn't it be more accurate to return cos and compute 1-cos^2? // It does indeed seem to be a little bit more robust. // @@ Need to revisit this more carefully! float a0, a1, a2; triangle_angles(p0, p1, p2, &a0, &a1, &a2); if (a0 == 0.0f || a1 == 0.0f || a2 == 0.0f) return false; float s0 = sinf(a0); float s1 = sinf(a1); float s2 = sinf(a2); if (s1 > s0 && s1 > s2) { swap(s1, s2); swap(s0, s1); swap(a1, a2); swap(a0, a1); swap(id1, id2); swap(id0, id1); } else if (s0 > s1 && s0 > s2) { swap(s0, s2); swap(s0, s1); swap(a0, a2); swap(a0, a1); swap(id0, id2); swap(id0, id1); } float c0 = cosf(a0); float ratio = (s2 == 0.0f) ? 1.0f : s1 / s2; float cosine = c0 * ratio; float sine = s0 * ratio; // Note : 2*id + 0 --> u // 2*id + 1 --> v int u0_id = 2 * id0 + 0; int v0_id = 2 * id0 + 1; int u1_id = 2 * id1 + 0; int v1_id = 2 * id1 + 1; int u2_id = 2 * id2 + 0; int v2_id = 2 * id2 + 1; // Real part opennl::nlBegin(context, NL_ROW); opennl::nlCoefficient(context, u0_id, cosine - 1.0f); opennl::nlCoefficient(context, v0_id, -sine); opennl::nlCoefficient(context, u1_id, -cosine); opennl::nlCoefficient(context, v1_id, sine); opennl::nlCoefficient(context, u2_id, 1); opennl::nlEnd(context, NL_ROW); // Imaginary part opennl::nlBegin(context, NL_ROW); opennl::nlCoefficient(context, u0_id, sine); opennl::nlCoefficient(context, v0_id, cosine - 1.0f); opennl::nlCoefficient(context, u1_id, -sine); opennl::nlCoefficient(context, v1_id, -cosine); opennl::nlCoefficient(context, v2_id, 1); opennl::nlEnd(context, NL_ROW); return true; } static bool computeLeastSquaresConformalMap(Mesh *mesh) { uint32_t lockedVertex0, lockedVertex1; if (!findApproximateDiameterVertices(mesh, &lockedVertex0, &lockedVertex1)) { // Mesh has no boundaries. return false; } const uint32_t vertexCount = mesh->vertexCount(); opennl::NLContext *context = opennl::nlNewContext(); opennl::nlSolverParameteri(context, NL_NB_VARIABLES, int(2 * vertexCount)); opennl::nlSolverParameteri(context, NL_MAX_ITERATIONS, int(5 * vertexCount)); opennl::nlBegin(context, NL_SYSTEM); ArrayView texcoords = mesh->texcoords(); for (uint32_t i = 0; i < vertexCount; i++) { opennl::nlSetVariable(context, 2 * i, texcoords[i].x); opennl::nlSetVariable(context, 2 * i + 1, texcoords[i].y); if (i == lockedVertex0 || i == lockedVertex1) { opennl::nlLockVariable(context, 2 * i); opennl::nlLockVariable(context, 2 * i + 1); } } opennl::nlBegin(context, NL_MATRIX); const uint32_t faceCount = mesh->faceCount(); ConstArrayView positions = mesh->positions(); ConstArrayView indices = mesh->indices(); for (uint32_t f = 0; f < faceCount; f++) { const uint32_t v0 = indices[f * 3 + 0]; const uint32_t v1 = indices[f * 3 + 1]; const uint32_t v2 = indices[f * 3 + 2]; if (!setup_abf_relations(context, v0, v1, v2, positions[v0], positions[v1], positions[v2])) { Vector2 z0, z1, z2; projectTriangle(positions[v0], positions[v1], positions[v2], &z0, &z1, &z2); double a = z1.x - z0.x; double b = z1.y - z0.y; double c = z2.x - z0.x; double d = z2.y - z0.y; XA_DEBUG_ASSERT(b == 0.0); // Note : 2*id + 0 --> u // 2*id + 1 --> v uint32_t u0_id = 2 * v0; uint32_t v0_id = 2 * v0 + 1; uint32_t u1_id = 2 * v1; uint32_t v1_id = 2 * v1 + 1; uint32_t u2_id = 2 * v2; uint32_t v2_id = 2 * v2 + 1; // Note : b = 0 // Real part opennl::nlBegin(context, NL_ROW); opennl::nlCoefficient(context, u0_id, -a+c) ; opennl::nlCoefficient(context, v0_id, b-d) ; opennl::nlCoefficient(context, u1_id, -c) ; opennl::nlCoefficient(context, v1_id, d) ; opennl::nlCoefficient(context, u2_id, a); opennl::nlEnd(context, NL_ROW); // Imaginary part opennl::nlBegin(context, NL_ROW); opennl::nlCoefficient(context, u0_id, -b+d); opennl::nlCoefficient(context, v0_id, -a+c); opennl::nlCoefficient(context, u1_id, -d); opennl::nlCoefficient(context, v1_id, -c); opennl::nlCoefficient(context, v2_id, a); opennl::nlEnd(context, NL_ROW); } } opennl::nlEnd(context, NL_MATRIX); opennl::nlEnd(context, NL_SYSTEM); if (!opennl::nlSolve(context)) { opennl::nlDeleteContext(context); return false; } for (uint32_t i = 0; i < vertexCount; i++) { const double u = opennl::nlGetVariable(context, 2 * i); const double v = opennl::nlGetVariable(context, 2 * i + 1); texcoords[i] = Vector2((float)u, (float)v); XA_DEBUG_ASSERT(!isNan(mesh->texcoord(i).x)); XA_DEBUG_ASSERT(!isNan(mesh->texcoord(i).y)); } opennl::nlDeleteContext(context); return true; } struct PiecewiseParam { void reset(const Mesh *mesh) { m_mesh = mesh; const uint32_t faceCount = m_mesh->faceCount(); const uint32_t vertexCount = m_mesh->vertexCount(); m_texcoords.resize(vertexCount); m_patch.reserve(faceCount); m_candidates.reserve(faceCount); m_faceInAnyPatch.resize(faceCount); m_faceInAnyPatch.zeroOutMemory(); m_faceInvalid.resize(faceCount); m_faceInPatch.resize(faceCount); m_vertexInPatch.resize(vertexCount); m_faceToCandidate.resize(faceCount); } ConstArrayView chartFaces() const { return m_patch; } ConstArrayView texcoords() const { return m_texcoords; } bool computeChart() { // Clear per-patch state. m_patch.clear(); m_candidates.clear(); m_faceToCandidate.zeroOutMemory(); m_faceInvalid.zeroOutMemory(); m_faceInPatch.zeroOutMemory(); m_vertexInPatch.zeroOutMemory(); // Add the seed face (first unassigned face) to the patch. const uint32_t faceCount = m_mesh->faceCount(); uint32_t seed = UINT32_MAX; for (uint32_t f = 0; f < faceCount; f++) { if (m_faceInAnyPatch.get(f)) continue; seed = f; // Add all 3 vertices. Vector2 texcoords[3]; orthoProjectFace(seed, texcoords); for (uint32_t i = 0; i < 3; i++) { const uint32_t vertex = m_mesh->vertexAt(seed * 3 + i); m_vertexInPatch.set(vertex); m_texcoords[vertex] = texcoords[i]; } addFaceToPatch(seed); // Initialize the boundary grid. m_boundaryGrid.reset(m_texcoords, m_mesh->indices()); for (Mesh::FaceEdgeIterator it(m_mesh, seed); !it.isDone(); it.advance()) m_boundaryGrid.append(it.edge()); break; } if (seed == UINT32_MAX) return false; for (;;) { // Find the candidate with the lowest cost. float lowestCost = FLT_MAX; Candidate *bestCandidate = nullptr; for (uint32_t i = 0; i < m_candidates.size(); i++) { Candidate *candidate = m_candidates[i]; if (candidate->maxCost < lowestCost) { lowestCost = candidate->maxCost; bestCandidate = candidate; } } if (!bestCandidate) break; XA_DEBUG_ASSERT(!bestCandidate->prev); // Must be head of linked candidates. // Compute the position by averaging linked candidates (candidates that share the same free vertex). Vector2 position(0.0f); uint32_t n = 0; for (CandidateIterator it(bestCandidate); !it.isDone(); it.advance()) { position += it.current()->position; n++; } position *= 1.0f / (float)n; const uint32_t freeVertex = bestCandidate->vertex; XA_DEBUG_ASSERT(!isNan(position.x)); XA_DEBUG_ASSERT(!isNan(position.y)); m_texcoords[freeVertex] = position; // Check for flipped faces. This is also done when candidates are first added, but the averaged position of the free vertex is different now, so check again. bool invalid = false; for (CandidateIterator it(bestCandidate); !it.isDone(); it.advance()) { const uint32_t vertex0 = m_mesh->vertexAt(meshEdgeIndex0(it.current()->patchEdge)); const uint32_t vertex1 = m_mesh->vertexAt(meshEdgeIndex1(it.current()->patchEdge)); const float freeVertexOrient = orientToEdge(m_texcoords[vertex0], m_texcoords[vertex1], position); if ((it.current()->patchVertexOrient < 0.0f && freeVertexOrient < 0.0f) || (it.current()->patchVertexOrient > 0.0f && freeVertexOrient > 0.0f)) { invalid = true; break; } } // Check for zero area and flipped faces (using area). for (CandidateIterator it(bestCandidate); !it.isDone(); it.advance()) { const Vector2 a = m_texcoords[m_mesh->vertexAt(it.current()->face * 3 + 0)]; const Vector2 b = m_texcoords[m_mesh->vertexAt(it.current()->face * 3 + 1)]; const Vector2 c = m_texcoords[m_mesh->vertexAt(it.current()->face * 3 + 2)]; const float area = triangleArea(a, b, c); if (area <= 0.0f) { invalid = true; break; } } // Check for boundary intersection. if (!invalid) { XA_PROFILE_START(parameterizeChartsPiecewiseBoundaryIntersection) // Test candidate edges that would form part of the new patch boundary. // Ignore boundary edges that would become internal if the candidate faces were added to the patch. m_newBoundaryEdges.clear(); m_ignoreBoundaryEdges.clear(); for (CandidateIterator candidateIt(bestCandidate); !candidateIt.isDone(); candidateIt.advance()) { for (Mesh::FaceEdgeIterator it(m_mesh, candidateIt.current()->face); !it.isDone(); it.advance()) { const uint32_t oface = it.oppositeFace(); if (oface == UINT32_MAX || !m_faceInPatch.get(oface)) m_newBoundaryEdges.push_back(it.edge()); if (oface != UINT32_MAX && m_faceInPatch.get(oface)) m_ignoreBoundaryEdges.push_back(it.oppositeEdge()); } } invalid = m_boundaryGrid.intersect(m_mesh->epsilon(), m_newBoundaryEdges, m_ignoreBoundaryEdges); XA_PROFILE_END(parameterizeChartsPiecewiseBoundaryIntersection) } if (invalid) { // Mark all faces of linked candidates as invalid. for (CandidateIterator it(bestCandidate); !it.isDone(); it.advance()) m_faceInvalid.set(it.current()->face); removeLinkedCandidates(bestCandidate); } else { // Add vertex to the patch. m_vertexInPatch.set(freeVertex); // Add faces to the patch. for (CandidateIterator it(bestCandidate); !it.isDone(); it.advance()) addFaceToPatch(it.current()->face); // Successfully added candidate face(s) to patch. removeLinkedCandidates(bestCandidate); // Reset the grid with all edges on the patch boundary. XA_PROFILE_START(parameterizeChartsPiecewiseBoundaryIntersection) m_boundaryGrid.reset(m_texcoords, m_mesh->indices()); for (uint32_t i = 0; i < m_patch.size(); i++) { for (Mesh::FaceEdgeIterator it(m_mesh, m_patch[i]); !it.isDone(); it.advance()) { const uint32_t oface = it.oppositeFace(); if (oface == UINT32_MAX || !m_faceInPatch.get(oface)) m_boundaryGrid.append(it.edge()); } } XA_PROFILE_END(parameterizeChartsPiecewiseBoundaryIntersection) } } return true; } private: struct Candidate { uint32_t face, vertex; Candidate *prev, *next; // The previous/next candidate with the same vertex. Vector2 position; float cost; float maxCost; // Of all linked candidates. uint32_t patchEdge; float patchVertexOrient; }; struct CandidateIterator { CandidateIterator(Candidate *head) : m_current(head) { XA_DEBUG_ASSERT(!head->prev); } void advance() { if (m_current != nullptr) { m_current = m_current->next; } } bool isDone() const { return !m_current; } Candidate *current() { return m_current; } private: Candidate *m_current; }; const Mesh *m_mesh; Array m_texcoords; BitArray m_faceInAnyPatch; // Face is in a previous chart patch or the current patch. Array m_candidates; // Incident faces to the patch. Array m_faceToCandidate; Array m_patch; // The current chart patch. BitArray m_faceInPatch, m_vertexInPatch; // Face/vertex is in the current patch. BitArray m_faceInvalid; // Face cannot be added to the patch - flipped, cost too high or causes boundary intersection. UniformGrid2 m_boundaryGrid; Array m_newBoundaryEdges, m_ignoreBoundaryEdges; // Temp arrays used when testing for boundary intersection. void addFaceToPatch(uint32_t face) { XA_DEBUG_ASSERT(!m_faceInPatch.get(face)); XA_DEBUG_ASSERT(!m_faceInAnyPatch.get(face)); m_patch.push_back(face); m_faceInPatch.set(face); m_faceInAnyPatch.set(face); // Find new candidate faces on the patch incident to the newly added face. for (Mesh::FaceEdgeIterator it(m_mesh, face); !it.isDone(); it.advance()) { const uint32_t oface = it.oppositeFace(); if (oface == UINT32_MAX || m_faceInAnyPatch.get(oface) || m_faceToCandidate[oface]) continue; // Found an active edge on the patch front. // Find the free vertex (the vertex that isn't on the active edge). // Compute the orientation of the other patch face vertex to the active edge. uint32_t freeVertex = UINT32_MAX; float orient = 0.0f; for (uint32_t j = 0; j < 3; j++) { const uint32_t vertex = m_mesh->vertexAt(oface * 3 + j); if (vertex != it.vertex0() && vertex != it.vertex1()) { freeVertex = vertex; orient = orientToEdge(m_texcoords[it.vertex0()], m_texcoords[it.vertex1()], m_texcoords[m_mesh->vertexAt(face * 3 + j)]); break; } } XA_DEBUG_ASSERT(freeVertex != UINT32_MAX); if (m_vertexInPatch.get(freeVertex)) { #if 0 // If the free vertex is already in the patch, the face is enclosed by the patch. Add the face to the patch - don't need to assign texcoords. freeVertex = UINT32_MAX; addFaceToPatch(oface); #endif continue; } // Check this here rather than above so faces enclosed by the patch are always added. if (m_faceInvalid.get(oface)) continue; addCandidateFace(it.edge(), orient, oface, it.oppositeEdge(), freeVertex); } } void addCandidateFace(uint32_t patchEdge, float patchVertexOrient, uint32_t face, uint32_t edge, uint32_t freeVertex) { XA_DEBUG_ASSERT(!m_faceToCandidate[face]); Vector2 texcoords[3]; orthoProjectFace(face, texcoords); // Find corresponding vertices between the patch edge and candidate edge. const uint32_t vertex0 = m_mesh->vertexAt(meshEdgeIndex0(patchEdge)); const uint32_t vertex1 = m_mesh->vertexAt(meshEdgeIndex1(patchEdge)); uint32_t localVertex0 = UINT32_MAX, localVertex1 = UINT32_MAX, localFreeVertex = UINT32_MAX; for (uint32_t i = 0; i < 3; i++) { const uint32_t vertex = m_mesh->vertexAt(face * 3 + i); if (vertex == m_mesh->vertexAt(meshEdgeIndex1(edge))) localVertex0 = i; else if (vertex == m_mesh->vertexAt(meshEdgeIndex0(edge))) localVertex1 = i; else localFreeVertex = i; } // Scale orthogonal projection to match the patch edge. const Vector2 patchEdgeVec = m_texcoords[vertex1] - m_texcoords[vertex0]; const Vector2 localEdgeVec = texcoords[localVertex1] - texcoords[localVertex0]; const float len1 = length(patchEdgeVec); const float len2 = length(localEdgeVec); if (len1 <= 0.0f || len2 <= 0.0f) return; // Zero length edge. const float scale = len1 / len2; for (uint32_t i = 0; i < 3; i++) texcoords[i] *= scale; // Translate to the first vertex on the patch edge. const Vector2 translate = m_texcoords[vertex0] - texcoords[localVertex0]; for (uint32_t i = 0; i < 3; i++) texcoords[i] += translate; // Compute the angle between the patch edge and the corresponding local edge. const float angle = atan2f(patchEdgeVec.y, patchEdgeVec.x) - atan2f(localEdgeVec.y, localEdgeVec.x); // Rotate so the patch edge and the corresponding local edge occupy the same space. for (uint32_t i = 0; i < 3; i++) { if (i == localVertex0) continue; Vector2 &uv = texcoords[i]; uv -= texcoords[localVertex0]; // Rotate around the first vertex. const float c = cosf(angle); const float s = sinf(angle); const float x = uv.x * c - uv.y * s; const float y = uv.y * c + uv.x * s; uv.x = x + texcoords[localVertex0].x; uv.y = y + texcoords[localVertex0].y; } if (isNan(texcoords[localFreeVertex].x) || isNan(texcoords[localFreeVertex].y)) { m_faceInvalid.set(face); return; } // Check for local overlap (flipped triangle). // The patch face vertex that isn't on the active edge and the free vertex should be oriented on opposite sides to the active edge. const float freeVertexOrient = orientToEdge(m_texcoords[vertex0], m_texcoords[vertex1], texcoords[localFreeVertex]); if ((patchVertexOrient < 0.0f && freeVertexOrient < 0.0f) || (patchVertexOrient > 0.0f && freeVertexOrient > 0.0f)) { m_faceInvalid.set(face); return; } const float stretch = computeStretch(m_mesh->position(vertex0), m_mesh->position(vertex1), m_mesh->position(freeVertex), texcoords[0], texcoords[1], texcoords[2]); if (stretch >= FLT_MAX) { m_faceInvalid.set(face); return; } const float cost = fabsf(stretch - 1.0f); if (cost > 0.5f) { m_faceInvalid.set(face); return; } // Add the candidate. Candidate *candidate = XA_ALLOC(MemTag::Default, Candidate); candidate->face = face; candidate->vertex = freeVertex; candidate->position = texcoords[localFreeVertex]; candidate->prev = candidate->next = nullptr; candidate->cost = candidate->maxCost = cost; candidate->patchEdge = patchEdge; candidate->patchVertexOrient = patchVertexOrient; m_candidates.push_back(candidate); m_faceToCandidate[face] = candidate; // Link with candidates that share the same vertex. Append to tail. for (uint32_t i = 0; i < m_candidates.size() - 1; i++) { if (m_candidates[i]->vertex == candidate->vertex) { Candidate *tail = m_candidates[i]; for (;;) { if (tail->next) tail = tail->next; else break; } candidate->prev = tail; candidate->next = nullptr; tail->next = candidate; break; } } // Set max cost for linked candidates. Candidate *head = linkedCandidateHead(candidate); float maxCost = 0.0f; for (CandidateIterator it(head); !it.isDone(); it.advance()) maxCost = max(maxCost, it.current()->cost); for (CandidateIterator it(head); !it.isDone(); it.advance()) it.current()->maxCost = maxCost; } Candidate *linkedCandidateHead(Candidate *candidate) { Candidate *current = candidate; for (;;) { if (!current->prev) break; current = current->prev; } return current; } void removeLinkedCandidates(Candidate *head) { XA_DEBUG_ASSERT(!head->prev); Candidate *current = head; while (current) { Candidate *next = current->next; m_faceToCandidate[current->face] = nullptr; for (uint32_t i = 0; i < m_candidates.size(); i++) { if (m_candidates[i] == current) { m_candidates.removeAt(i); break; } } XA_FREE(current); current = next; } } void orthoProjectFace(uint32_t face, Vector2 *texcoords) const { const Vector3 normal = -m_mesh->computeFaceNormal(face); const Vector3 tangent = normalize(m_mesh->position(m_mesh->vertexAt(face * 3 + 1)) - m_mesh->position(m_mesh->vertexAt(face * 3 + 0))); const Vector3 bitangent = cross(normal, tangent); for (uint32_t i = 0; i < 3; i++) { const Vector3 &pos = m_mesh->position(m_mesh->vertexAt(face * 3 + i)); texcoords[i] = Vector2(dot(tangent, pos), dot(bitangent, pos)); } } float parametricArea(const Vector2 *texcoords) const { const Vector2 &v1 = texcoords[0]; const Vector2 &v2 = texcoords[1]; const Vector2 &v3 = texcoords[2]; return ((v2.x - v1.x) * (v3.y - v1.y) - (v3.x - v1.x) * (v2.y - v1.y)) * 0.5f; } float computeStretch(Vector3 p1, Vector3 p2, Vector3 p3, Vector2 t1, Vector2 t2, Vector2 t3) const { float parametricArea = ((t2.y - t1.y) * (t3.x - t1.x) - (t3.y - t1.y) * (t2.x - t1.x)) * 0.5f; if (isZero(parametricArea, kAreaEpsilon)) return FLT_MAX; if (parametricArea < 0.0f) parametricArea = fabsf(parametricArea); const float geometricArea = length(cross(p2 - p1, p3 - p1)) * 0.5f; if (parametricArea <= geometricArea) return parametricArea / geometricArea; else return geometricArea / parametricArea; } // Return value is positive if the point is one side of the edge, negative if on the other side. float orientToEdge(Vector2 edgeVertex0, Vector2 edgeVertex1, Vector2 point) const { return (edgeVertex0.x - point.x) * (edgeVertex1.y - point.y) - (edgeVertex0.y - point.y) * (edgeVertex1.x - point.x); } }; // Estimate quality of existing parameterization. struct Quality { // computeBoundaryIntersection bool boundaryIntersection = false; // computeFlippedFaces uint32_t totalTriangleCount = 0; uint32_t flippedTriangleCount = 0; uint32_t zeroAreaTriangleCount = 0; // computeMetrics float totalParametricArea = 0.0f; float totalGeometricArea = 0.0f; float stretchMetric = 0.0f; float maxStretchMetric = 0.0f; float conformalMetric = 0.0f; float authalicMetric = 0.0f; void computeBoundaryIntersection(const Mesh *mesh, UniformGrid2 &boundaryGrid) { const Array &boundaryEdges = mesh->boundaryEdges(); const uint32_t boundaryEdgeCount = boundaryEdges.size(); boundaryGrid.reset(mesh->texcoords(), mesh->indices(), boundaryEdgeCount); for (uint32_t i = 0; i < boundaryEdgeCount; i++) boundaryGrid.append(boundaryEdges[i]); boundaryIntersection = boundaryGrid.intersect(mesh->epsilon()); #if XA_DEBUG_EXPORT_BOUNDARY_GRID static int exportIndex = 0; char filename[256]; XA_SPRINTF(filename, sizeof(filename), "debug_boundary_grid_%03d.tga", exportIndex); boundaryGrid.debugExport(filename); exportIndex++; #endif } void computeFlippedFaces(const Mesh *mesh, Array *flippedFaces) { totalTriangleCount = flippedTriangleCount = zeroAreaTriangleCount = 0; if (flippedFaces) flippedFaces->clear(); const uint32_t faceCount = mesh->faceCount(); for (uint32_t f = 0; f < faceCount; f++) { Vector2 texcoord[3]; for (int i = 0; i < 3; i++) { const uint32_t v = mesh->vertexAt(f * 3 + i); texcoord[i] = mesh->texcoord(v); } totalTriangleCount++; const float t1 = texcoord[0].x; const float s1 = texcoord[0].y; const float t2 = texcoord[1].x; const float s2 = texcoord[1].y; const float t3 = texcoord[2].x; const float s3 = texcoord[2].y; const float parametricArea = ((s2 - s1) * (t3 - t1) - (s3 - s1) * (t2 - t1)) * 0.5f; if (isZero(parametricArea, kAreaEpsilon)) { zeroAreaTriangleCount++; continue; } if (parametricArea < 0.0f) { // Count flipped triangles. flippedTriangleCount++; if (flippedFaces) flippedFaces->push_back(f); } } if (flippedTriangleCount + zeroAreaTriangleCount == totalTriangleCount) { // If all triangles are flipped, then none are. if (flippedFaces) flippedFaces->clear(); flippedTriangleCount = 0; } if (flippedTriangleCount > totalTriangleCount / 2) { // If more than half the triangles are flipped, reverse the flipped / not flipped classification. flippedTriangleCount = totalTriangleCount - flippedTriangleCount; if (flippedFaces) { Array temp; flippedFaces->copyTo(temp); flippedFaces->clear(); for (uint32_t f = 0; f < faceCount; f++) { bool match = false; for (uint32_t ff = 0; ff < temp.size(); ff++) { if (temp[ff] == f) { match = true; break; } } if (!match) flippedFaces->push_back(f); } } } } void computeMetrics(const Mesh *mesh) { totalGeometricArea = totalParametricArea = 0.0f; stretchMetric = maxStretchMetric = conformalMetric = authalicMetric = 0.0f; const uint32_t faceCount = mesh->faceCount(); for (uint32_t f = 0; f < faceCount; f++) { Vector3 pos[3]; Vector2 texcoord[3]; for (int i = 0; i < 3; i++) { const uint32_t v = mesh->vertexAt(f * 3 + i); pos[i] = mesh->position(v); texcoord[i] = mesh->texcoord(v); } // Evaluate texture stretch metric. See: // - "Texture Mapping Progressive Meshes", Sander, Snyder, Gortler & Hoppe // - "Mesh Parameterization: Theory and Practice", Siggraph'07 Course Notes, Hormann, Levy & Sheffer. const float t1 = texcoord[0].x; const float s1 = texcoord[0].y; const float t2 = texcoord[1].x; const float s2 = texcoord[1].y; const float t3 = texcoord[2].x; const float s3 = texcoord[2].y; float parametricArea = ((s2 - s1) * (t3 - t1) - (s3 - s1) * (t2 - t1)) * 0.5f; if (isZero(parametricArea, kAreaEpsilon)) continue; if (parametricArea < 0.0f) parametricArea = fabsf(parametricArea); const float geometricArea = length(cross(pos[1] - pos[0], pos[2] - pos[0])) / 2; const Vector3 Ss = (pos[0] * (t2 - t3) + pos[1] * (t3 - t1) + pos[2] * (t1 - t2)) / (2 * parametricArea); const Vector3 St = (pos[0] * (s3 - s2) + pos[1] * (s1 - s3) + pos[2] * (s2 - s1)) / (2 * parametricArea); const float a = dot(Ss, Ss); // E const float b = dot(Ss, St); // F const float c = dot(St, St); // G // Compute eigen-values of the first fundamental form: const float sigma1 = sqrtf(0.5f * max(0.0f, a + c - sqrtf(square(a - c) + 4 * square(b)))); // gamma uppercase, min eigenvalue. const float sigma2 = sqrtf(0.5f * max(0.0f, a + c + sqrtf(square(a - c) + 4 * square(b)))); // gamma lowercase, max eigenvalue. XA_ASSERT(sigma2 > sigma1 || equal(sigma1, sigma2, kEpsilon)); // isometric: sigma1 = sigma2 = 1 // conformal: sigma1 / sigma2 = 1 // authalic: sigma1 * sigma2 = 1 const float rmsStretch = sqrtf((a + c) * 0.5f); const float rmsStretch2 = sqrtf((square(sigma1) + square(sigma2)) * 0.5f); XA_DEBUG_ASSERT(equal(rmsStretch, rmsStretch2, 0.01f)); XA_UNUSED(rmsStretch2); stretchMetric += square(rmsStretch) * geometricArea; maxStretchMetric = max(maxStretchMetric, sigma2); if (!isZero(sigma1, 0.000001f)) { // sigma1 is zero when geometricArea is zero. conformalMetric += (sigma2 / sigma1) * geometricArea; } authalicMetric += (sigma1 * sigma2) * geometricArea; // Accumulate total areas. totalGeometricArea += geometricArea; totalParametricArea += parametricArea; } XA_DEBUG_ASSERT(isFinite(totalParametricArea) && totalParametricArea >= 0); XA_DEBUG_ASSERT(isFinite(totalGeometricArea) && totalGeometricArea >= 0); XA_DEBUG_ASSERT(isFinite(stretchMetric)); XA_DEBUG_ASSERT(isFinite(maxStretchMetric)); XA_DEBUG_ASSERT(isFinite(conformalMetric)); XA_DEBUG_ASSERT(isFinite(authalicMetric)); if (totalGeometricArea > 0.0f) { const float normFactor = sqrtf(totalParametricArea / totalGeometricArea); stretchMetric = sqrtf(stretchMetric / totalGeometricArea) * normFactor; maxStretchMetric *= normFactor; conformalMetric = sqrtf(conformalMetric / totalGeometricArea); authalicMetric = sqrtf(authalicMetric / totalGeometricArea); } } }; struct ChartCtorBuffers { Array chartMeshIndices; Array unifiedMeshIndices; }; class Chart { public: Chart(const Basis &basis, segment::ChartGeneratorType::Enum generatorType, ConstArrayView faces, const Mesh *sourceMesh, uint32_t chartGroupId, uint32_t chartId) : m_basis(basis), m_unifiedMesh(nullptr), m_type(ChartType::LSCM), m_generatorType(generatorType), m_tjunctionCount(0), m_originalVertexCount(0), m_isInvalid(false) { XA_UNUSED(chartGroupId); XA_UNUSED(chartId); m_faceToSourceFaceMap.copyFrom(faces.data, faces.length); const uint32_t approxVertexCount = min(faces.length * 3, sourceMesh->vertexCount()); m_unifiedMesh = XA_NEW_ARGS(MemTag::Mesh, Mesh, sourceMesh->epsilon(), approxVertexCount, faces.length); HashMap> sourceVertexToUnifiedVertexMap(MemTag::Mesh, approxVertexCount), sourceVertexToChartVertexMap(MemTag::Mesh, approxVertexCount); m_originalIndices.resize(faces.length * 3); // Add geometry. const uint32_t faceCount = faces.length; for (uint32_t f = 0; f < faceCount; f++) { uint32_t unifiedIndices[3]; for (uint32_t i = 0; i < 3; i++) { const uint32_t sourceVertex = sourceMesh->vertexAt(m_faceToSourceFaceMap[f] * 3 + i); uint32_t sourceUnifiedVertex = sourceMesh->firstColocalVertex(sourceVertex); if (m_generatorType == segment::ChartGeneratorType::OriginalUv && sourceVertex != sourceUnifiedVertex) { // Original UVs: don't unify vertices with different UVs; we want to preserve UVs. if (!equal(sourceMesh->texcoord(sourceVertex), sourceMesh->texcoord(sourceUnifiedVertex), sourceMesh->epsilon())) sourceUnifiedVertex = sourceVertex; } uint32_t unifiedVertex = sourceVertexToUnifiedVertexMap.get(sourceUnifiedVertex); if (unifiedVertex == UINT32_MAX) { unifiedVertex = sourceVertexToUnifiedVertexMap.add(sourceUnifiedVertex); m_unifiedMesh->addVertex(sourceMesh->position(sourceVertex), Vector3(0.0f), sourceMesh->texcoord(sourceVertex)); } if (sourceVertexToChartVertexMap.get(sourceVertex) == UINT32_MAX) { sourceVertexToChartVertexMap.add(sourceVertex); m_vertexToSourceVertexMap.push_back(sourceVertex); m_chartVertexToUnifiedVertexMap.push_back(unifiedVertex); m_originalVertexCount++; } m_originalIndices[f * 3 + i] = sourceVertexToChartVertexMap.get(sourceVertex);; XA_DEBUG_ASSERT(m_originalIndices[f * 3 + i] != UINT32_MAX); unifiedIndices[i] = sourceVertexToUnifiedVertexMap.get(sourceUnifiedVertex); XA_DEBUG_ASSERT(unifiedIndices[i] != UINT32_MAX); } m_unifiedMesh->addFace(unifiedIndices); } m_unifiedMesh->createBoundaries(); if (m_generatorType == segment::ChartGeneratorType::Planar) { m_type = ChartType::Planar; return; } #if XA_CHECK_T_JUNCTIONS m_tjunctionCount = meshCheckTJunctions(*m_unifiedMesh); #if XA_DEBUG_EXPORT_OBJ_TJUNCTION if (m_tjunctionCount > 0) { char filename[256]; XA_SPRINTF(filename, sizeof(filename), "debug_mesh_%03u_chartgroup_%03u_chart_%03u_tjunction.obj", sourceMesh->id(), chartGroupId, chartId); m_unifiedMesh->writeObjFile(filename); } #endif #endif } Chart(ChartCtorBuffers &buffers, const Chart *parent, const Mesh *parentMesh, ConstArrayView faces, ConstArrayView texcoords, const Mesh *sourceMesh) : m_unifiedMesh(nullptr), m_type(ChartType::Piecewise), m_generatorType(segment::ChartGeneratorType::Piecewise), m_tjunctionCount(0), m_originalVertexCount(0), m_isInvalid(false) { const uint32_t faceCount = faces.length; m_faceToSourceFaceMap.resize(faceCount); for (uint32_t i = 0; i < faceCount; i++) m_faceToSourceFaceMap[i] = parent->m_faceToSourceFaceMap[faces[i]]; // Map faces to parent chart source mesh. // Copy face indices. Array &chartMeshIndices = buffers.chartMeshIndices; chartMeshIndices.resize(sourceMesh->vertexCount()); chartMeshIndices.fillBytes(0xff); m_unifiedMesh = XA_NEW_ARGS(MemTag::Mesh, Mesh, sourceMesh->epsilon(), m_faceToSourceFaceMap.size() * 3, m_faceToSourceFaceMap.size()); HashMap> sourceVertexToUnifiedVertexMap(MemTag::Mesh, m_faceToSourceFaceMap.size() * 3); // Add vertices. for (uint32_t f = 0; f < faceCount; f++) { for (uint32_t i = 0; i < 3; i++) { const uint32_t vertex = sourceMesh->vertexAt(m_faceToSourceFaceMap[f] * 3 + i); const uint32_t sourceUnifiedVertex = sourceMesh->firstColocalVertex(vertex); const uint32_t parentVertex = parentMesh->vertexAt(faces[f] * 3 + i); uint32_t unifiedVertex = sourceVertexToUnifiedVertexMap.get(sourceUnifiedVertex); if (unifiedVertex == UINT32_MAX) { unifiedVertex = sourceVertexToUnifiedVertexMap.add(sourceUnifiedVertex); m_unifiedMesh->addVertex(sourceMesh->position(vertex), Vector3(0.0f), texcoords[parentVertex]); } if (chartMeshIndices[vertex] == UINT32_MAX) { chartMeshIndices[vertex] = m_originalVertexCount; m_originalVertexCount++; m_vertexToSourceVertexMap.push_back(vertex); m_chartVertexToUnifiedVertexMap.push_back(unifiedVertex); } } } // Add faces. m_originalIndices.resize(faceCount * 3); for (uint32_t f = 0; f < faceCount; f++) { uint32_t unifiedIndices[3]; for (uint32_t i = 0; i < 3; i++) { const uint32_t vertex = sourceMesh->vertexAt(m_faceToSourceFaceMap[f] * 3 + i); m_originalIndices[f * 3 + i] = chartMeshIndices[vertex]; const uint32_t unifiedVertex = sourceMesh->firstColocalVertex(vertex); unifiedIndices[i] = sourceVertexToUnifiedVertexMap.get(unifiedVertex); } m_unifiedMesh->addFace(unifiedIndices); } m_unifiedMesh->createBoundaries(); // Need to store texcoords for backup/restore so packing can be run multiple times. backupTexcoords(); } ~Chart() { if (m_unifiedMesh) { m_unifiedMesh->~Mesh(); XA_FREE(m_unifiedMesh); m_unifiedMesh = nullptr; } } bool isInvalid() const { return m_isInvalid; } ChartType type() const { return m_type; } segment::ChartGeneratorType::Enum generatorType() const { return m_generatorType; } uint32_t tjunctionCount() const { return m_tjunctionCount; } const Quality &quality() const { return m_quality; } #if XA_DEBUG_EXPORT_OBJ_INVALID_PARAMETERIZATION const Array ¶mFlippedFaces() const { return m_paramFlippedFaces; } #endif uint32_t mapFaceToSourceFace(uint32_t i) const { return m_faceToSourceFaceMap[i]; } uint32_t mapChartVertexToSourceVertex(uint32_t i) const { return m_vertexToSourceVertexMap[i]; } const Mesh *unifiedMesh() const { return m_unifiedMesh; } Mesh *unifiedMesh() { return m_unifiedMesh; } // Vertex count of the chart mesh before unifying vertices. uint32_t originalVertexCount() const { return m_originalVertexCount; } uint32_t originalVertexToUnifiedVertex(uint32_t v) const { return m_chartVertexToUnifiedVertexMap[v]; } ConstArrayView originalVertices() const { return m_originalIndices; } void parameterize(const ChartOptions &options, UniformGrid2 &boundaryGrid) { const uint32_t unifiedVertexCount = m_unifiedMesh->vertexCount(); if (m_generatorType == segment::ChartGeneratorType::OriginalUv) { } else { // Project vertices to plane. XA_PROFILE_START(parameterizeChartsOrthogonal) for (uint32_t i = 0; i < unifiedVertexCount; i++) m_unifiedMesh->texcoord(i) = Vector2(dot(m_basis.tangent, m_unifiedMesh->position(i)), dot(m_basis.bitangent, m_unifiedMesh->position(i))); XA_PROFILE_END(parameterizeChartsOrthogonal) // Computing charts checks for flipped triangles and boundary intersection. Don't need to do that again here if chart is planar. if (m_type != ChartType::Planar && m_generatorType != segment::ChartGeneratorType::OriginalUv) { XA_PROFILE_START(parameterizeChartsEvaluateQuality) m_quality.computeBoundaryIntersection(m_unifiedMesh, boundaryGrid); m_quality.computeFlippedFaces(m_unifiedMesh, nullptr); m_quality.computeMetrics(m_unifiedMesh); XA_PROFILE_END(parameterizeChartsEvaluateQuality) // Use orthogonal parameterization if quality is acceptable. if (!m_quality.boundaryIntersection && m_quality.flippedTriangleCount == 0 && m_quality.zeroAreaTriangleCount == 0 && m_quality.totalGeometricArea > 0.0f && m_quality.stretchMetric <= 1.1f && m_quality.maxStretchMetric <= 1.25f) m_type = ChartType::Ortho; } if (m_type == ChartType::LSCM) { XA_PROFILE_START(parameterizeChartsLSCM) if (options.paramFunc) { options.paramFunc(&m_unifiedMesh->position(0).x, &m_unifiedMesh->texcoord(0).x, m_unifiedMesh->vertexCount(), m_unifiedMesh->indices().data, m_unifiedMesh->indexCount()); } else computeLeastSquaresConformalMap(m_unifiedMesh); XA_PROFILE_END(parameterizeChartsLSCM) XA_PROFILE_START(parameterizeChartsEvaluateQuality) m_quality.computeBoundaryIntersection(m_unifiedMesh, boundaryGrid); #if XA_DEBUG_EXPORT_OBJ_INVALID_PARAMETERIZATION m_quality.computeFlippedFaces(m_unifiedMesh, &m_paramFlippedFaces); #else m_quality.computeFlippedFaces(m_unifiedMesh, nullptr); #endif // Don't need to call computeMetrics here, that's only used in evaluateOrthoQuality to determine if quality is acceptable enough to use ortho projection. if (m_quality.boundaryIntersection || m_quality.flippedTriangleCount > 0 || m_quality.zeroAreaTriangleCount > 0) m_isInvalid = true; XA_PROFILE_END(parameterizeChartsEvaluateQuality) } } if (options.fixWinding && m_unifiedMesh->computeFaceParametricArea(0) < 0.0f) { for (uint32_t i = 0; i < unifiedVertexCount; i++) m_unifiedMesh->texcoord(i).x *= -1.0f; } #if XA_CHECK_PARAM_WINDING const uint32_t faceCount = m_unifiedMesh->faceCount(); uint32_t flippedCount = 0; for (uint32_t i = 0; i < faceCount; i++) { const float area = m_unifiedMesh->computeFaceParametricArea(i); if (area < 0.0f) flippedCount++; } if (flippedCount == faceCount) { XA_PRINT_WARNING("param: all faces flipped\n"); } else if (flippedCount > 0) { XA_PRINT_WARNING("param: %u / %u faces flipped\n", flippedCount, faceCount); } #endif #if XA_DEBUG_ALL_CHARTS_INVALID m_isInvalid = true; #endif // Need to store texcoords for backup/restore so packing can be run multiple times. backupTexcoords(); } Vector2 computeParametricBounds() const { Vector2 minCorner(FLT_MAX, FLT_MAX); Vector2 maxCorner(-FLT_MAX, -FLT_MAX); const uint32_t vertexCount = m_unifiedMesh->vertexCount(); for (uint32_t v = 0; v < vertexCount; v++) { minCorner = min(minCorner, m_unifiedMesh->texcoord(v)); maxCorner = max(maxCorner, m_unifiedMesh->texcoord(v)); } return (maxCorner - minCorner) * 0.5f; } #if XA_CHECK_PIECEWISE_CHART_QUALITY void evaluateQuality(UniformGrid2 &boundaryGrid) { m_quality.computeBoundaryIntersection(m_unifiedMesh, boundaryGrid); #if XA_DEBUG_EXPORT_OBJ_INVALID_PARAMETERIZATION m_quality.computeFlippedFaces(m_unifiedMesh, &m_paramFlippedFaces); #else m_quality.computeFlippedFaces(m_unifiedMesh, nullptr); #endif if (m_quality.boundaryIntersection || m_quality.flippedTriangleCount > 0 || m_quality.zeroAreaTriangleCount > 0) m_isInvalid = true; } #endif void restoreTexcoords() { memcpy(m_unifiedMesh->texcoords().data, m_backupTexcoords.data(), m_unifiedMesh->vertexCount() * sizeof(Vector2)); } private: void backupTexcoords() { m_backupTexcoords.resize(m_unifiedMesh->vertexCount()); memcpy(m_backupTexcoords.data(), m_unifiedMesh->texcoords().data, m_unifiedMesh->vertexCount() * sizeof(Vector2)); } Basis m_basis; Mesh *m_unifiedMesh; ChartType m_type; segment::ChartGeneratorType::Enum m_generatorType; uint32_t m_tjunctionCount; uint32_t m_originalVertexCount; Array m_originalIndices; // List of faces of the source mesh that belong to this chart. Array m_faceToSourceFaceMap; // Map vertices of the chart mesh to vertices of the source mesh. Array m_vertexToSourceVertexMap; Array m_chartVertexToUnifiedVertexMap; Array m_backupTexcoords; Quality m_quality; #if XA_DEBUG_EXPORT_OBJ_INVALID_PARAMETERIZATION Array m_paramFlippedFaces; #endif bool m_isInvalid; }; struct CreateAndParameterizeChartTaskGroupArgs { Progress *progress; ThreadLocal *boundaryGrid; ThreadLocal *chartBuffers; const ChartOptions *options; ThreadLocal *pp; }; struct CreateAndParameterizeChartTaskArgs { const Basis *basis; Chart *chart; // output Array charts; // output (if more than one chart) segment::ChartGeneratorType::Enum chartGeneratorType; const Mesh *mesh; ConstArrayView faces; uint32_t chartGroupId; uint32_t chartId; }; static void runCreateAndParameterizeChartTask(void *groupUserData, void *taskUserData) { XA_PROFILE_START(createChartMeshAndParameterizeThread) auto groupArgs = (CreateAndParameterizeChartTaskGroupArgs *)groupUserData; auto args = (CreateAndParameterizeChartTaskArgs *)taskUserData; XA_PROFILE_START(createChartMesh) args->chart = XA_NEW_ARGS(MemTag::Default, Chart, *args->basis, args->chartGeneratorType, args->faces, args->mesh, args->chartGroupId, args->chartId); XA_PROFILE_END(createChartMesh) XA_PROFILE_START(parameterizeCharts) args->chart->parameterize(*groupArgs->options, groupArgs->boundaryGrid->get()); XA_PROFILE_END(parameterizeCharts) #if XA_RECOMPUTE_CHARTS if (!args->chart->isInvalid()) { XA_PROFILE_END(createChartMeshAndParameterizeThread) return; } // Recompute charts with invalid parameterizations. XA_PROFILE_START(parameterizeChartsRecompute) Chart *invalidChart = args->chart; const Mesh *invalidMesh = invalidChart->unifiedMesh(); PiecewiseParam &pp = groupArgs->pp->get(); pp.reset(invalidMesh); #if XA_DEBUG_EXPORT_OBJ_RECOMPUTED_CHARTS char filename[256]; XA_SPRINTF(filename, sizeof(filename), "debug_mesh_%03u_chartgroup_%03u_chart_%03u_recomputed.obj", args->mesh->id(), args->chartGroupId, args->chartId); FILE *file; XA_FOPEN(file, filename, "w"); uint32_t subChartIndex = 0; #endif for (;;) { XA_PROFILE_START(parameterizeChartsPiecewise) const bool facesRemaining = pp.computeChart(); XA_PROFILE_END(parameterizeChartsPiecewise) if (!facesRemaining) break; Chart *chart = XA_NEW_ARGS(MemTag::Default, Chart, groupArgs->chartBuffers->get(), invalidChart, invalidMesh, pp.chartFaces(), pp.texcoords(), args->mesh); #if XA_CHECK_PIECEWISE_CHART_QUALITY chart->evaluateQuality(args->boundaryGrid->get()); #endif args->charts.push_back(chart); #if XA_DEBUG_EXPORT_OBJ_RECOMPUTED_CHARTS if (file) { for (uint32_t j = 0; j < invalidMesh->vertexCount(); j++) { fprintf(file, "v %g %g %g\n", invalidMesh->position(j).x, invalidMesh->position(j).y, invalidMesh->position(j).z); fprintf(file, "vt %g %g\n", pp.texcoords()[j].x, pp.texcoords()[j].y); } fprintf(file, "o chart%03u\n", subChartIndex); fprintf(file, "s off\n"); for (uint32_t f = 0; f < pp.chartFaces().length; f++) { fprintf(file, "f "); const uint32_t face = pp.chartFaces()[f]; for (uint32_t j = 0; j < 3; j++) { const uint32_t index = invalidMesh->vertexCount() * subChartIndex + invalidMesh->vertexAt(face * 3 + j) + 1; // 1-indexed fprintf(file, "%d/%d/%c", index, index, j == 2 ? '\n' : ' '); } } } subChartIndex++; #endif } #if XA_DEBUG_EXPORT_OBJ_RECOMPUTED_CHARTS if (file) fclose(file); #endif XA_PROFILE_END(parameterizeChartsRecompute) #endif // XA_RECOMPUTE_CHARTS XA_PROFILE_END(createChartMeshAndParameterizeThread) // Update progress. groupArgs->progress->increment(args->faces.length); } // Set of charts corresponding to mesh faces in the same face group. class ChartGroup { public: ChartGroup(uint32_t id, const Mesh *sourceMesh, const MeshFaceGroups *sourceMeshFaceGroups, MeshFaceGroups::Handle faceGroup) : m_id(id), m_sourceMesh(sourceMesh), m_sourceMeshFaceGroups(sourceMeshFaceGroups), m_faceGroup(faceGroup) { } ~ChartGroup() { for (uint32_t i = 0; i < m_charts.size(); i++) { m_charts[i]->~Chart(); XA_FREE(m_charts[i]); } } uint32_t chartCount() const { return m_charts.size(); } Chart *chartAt(uint32_t i) const { return m_charts[i]; } uint32_t faceCount() const { return m_sourceMeshFaceGroups->faceCount(m_faceGroup); } void computeCharts(TaskScheduler *taskScheduler, const ChartOptions &options, Progress *progress, segment::Atlas &atlas, ThreadLocal *boundaryGrid, ThreadLocal *chartBuffers, ThreadLocal *piecewiseParam) { // This function may be called multiple times, so destroy existing charts. for (uint32_t i = 0; i < m_charts.size(); i++) { m_charts[i]->~Chart(); XA_FREE(m_charts[i]); } // Create mesh from source mesh, using only the faces in this face group. XA_PROFILE_START(createChartGroupMesh) Mesh *mesh = createMesh(); XA_PROFILE_END(createChartGroupMesh) // Segment mesh into charts (arrays of faces). #if XA_DEBUG_SINGLE_CHART XA_UNUSED(options); XA_UNUSED(atlas); const uint32_t chartCount = 1; uint32_t offset; Basis chartBasis; Fit::computeBasis(&mesh->position(0), mesh->vertexCount(), &chartBasis); Array chartFaces; chartFaces.resize(1 + mesh->faceCount()); chartFaces[0] = mesh->faceCount(); for (uint32_t i = 0; i < chartFaces.size() - 1; i++) chartFaces[i + 1] = m_faceToSourceFaceMap[i]; // Destroy mesh. const uint32_t faceCount = mesh->faceCount(); mesh->~Mesh(); XA_FREE(mesh); #else XA_PROFILE_START(buildAtlas) atlas.reset(mesh, options); atlas.compute(); XA_PROFILE_END(buildAtlas) // Update progress. progress->increment(faceCount()); #if XA_DEBUG_EXPORT_OBJ_CHARTS char filename[256]; XA_SPRINTF(filename, sizeof(filename), "debug_mesh_%03u_chartgroup_%03u_charts.obj", m_sourceMesh->id(), m_id); FILE *file; XA_FOPEN(file, filename, "w"); if (file) { mesh->writeObjVertices(file); for (uint32_t i = 0; i < atlas.chartCount(); i++) { fprintf(file, "o chart_%04d\n", i); fprintf(file, "s off\n"); ConstArrayView faces = atlas.chartFaces(i); for (uint32_t f = 0; f < faces.length; f++) mesh->writeObjFace(file, faces[f]); } mesh->writeObjBoundaryEges(file); fclose(file); } #endif // Destroy mesh. const uint32_t faceCount = mesh->faceCount(); mesh->~Mesh(); XA_FREE(mesh); XA_PROFILE_START(copyChartFaces) if (progress->cancel) return; // Copy faces from segment::Atlas to m_chartFaces array with etc. encoding. // segment::Atlas faces refer to the chart group mesh. Map them to the input mesh instead. const uint32_t chartCount = atlas.chartCount(); Array chartFaces; chartFaces.resize(chartCount + faceCount); uint32_t offset = 0; for (uint32_t i = 0; i < chartCount; i++) { ConstArrayView faces = atlas.chartFaces(i); chartFaces[offset++] = faces.length; for (uint32_t j = 0; j < faces.length; j++) chartFaces[offset++] = m_faceToSourceFaceMap[faces[j]]; } XA_PROFILE_END(copyChartFaces) #endif XA_PROFILE_START(createChartMeshAndParameterizeReal) CreateAndParameterizeChartTaskGroupArgs groupArgs; groupArgs.progress = progress; groupArgs.boundaryGrid = boundaryGrid; groupArgs.chartBuffers = chartBuffers; groupArgs.options = &options; groupArgs.pp = piecewiseParam; TaskGroupHandle taskGroup = taskScheduler->createTaskGroup(&groupArgs, chartCount); Array taskArgs; taskArgs.resize(chartCount); taskArgs.runCtors(); // Has Array member. offset = 0; for (uint32_t i = 0; i < chartCount; i++) { CreateAndParameterizeChartTaskArgs &args = taskArgs[i]; #if XA_DEBUG_SINGLE_CHART args.basis = &chartBasis; args.isPlanar = false; #else args.basis = &atlas.chartBasis(i); args.chartGeneratorType = atlas.chartGeneratorType(i); #endif args.chart = nullptr; args.chartGroupId = m_id; args.chartId = i; const uint32_t chartFaceCount = chartFaces[offset++]; args.faces = ConstArrayView(&chartFaces[offset], chartFaceCount); offset += chartFaceCount; args.mesh = m_sourceMesh; Task task; task.userData = &args; task.func = runCreateAndParameterizeChartTask; taskScheduler->run(taskGroup, task); } taskScheduler->wait(&taskGroup); XA_PROFILE_END(createChartMeshAndParameterizeReal) #if XA_RECOMPUTE_CHARTS // Count charts. Skip invalid ones and include new ones added by recomputing. uint32_t newChartCount = 0; for (uint32_t i = 0; i < chartCount; i++) { if (taskArgs[i].chart->isInvalid()) newChartCount += taskArgs[i].charts.size(); else newChartCount++; } m_charts.resize(newChartCount); // Add valid charts first. Destroy invalid ones. uint32_t current = 0; for (uint32_t i = 0; i < chartCount; i++) { Chart *chart = taskArgs[i].chart; if (chart->isInvalid()) { chart->~Chart(); XA_FREE(chart); continue; } m_charts[current++] = chart; } // Now add new charts. for (uint32_t i = 0; i < chartCount; i++) { CreateAndParameterizeChartTaskArgs &args = taskArgs[i]; for (uint32_t j = 0; j < args.charts.size(); j++) m_charts[current++] = args.charts[j]; } #else // XA_RECOMPUTE_CHARTS m_charts.resize(chartCount); for (uint32_t i = 0; i < chartCount; i++) m_charts[i] = taskArgs[i].chart; #endif // XA_RECOMPUTE_CHARTS taskArgs.runDtors(); // Has Array member. } private: Mesh *createMesh() { XA_DEBUG_ASSERT(m_faceGroup != MeshFaceGroups::kInvalid); // Create new mesh from the source mesh, using faces that belong to this group. m_faceToSourceFaceMap.reserve(m_sourceMeshFaceGroups->faceCount(m_faceGroup)); for (MeshFaceGroups::Iterator it(m_sourceMeshFaceGroups, m_faceGroup); !it.isDone(); it.advance()) m_faceToSourceFaceMap.push_back(it.face()); // Only initial meshes has ignored faces. The only flag we care about is HasNormals. const uint32_t faceCount = m_faceToSourceFaceMap.size(); XA_DEBUG_ASSERT(faceCount > 0); const uint32_t approxVertexCount = min(faceCount * 3, m_sourceMesh->vertexCount()); Mesh *mesh = XA_NEW_ARGS(MemTag::Mesh, Mesh, m_sourceMesh->epsilon(), approxVertexCount, faceCount, m_sourceMesh->flags() & MeshFlags::HasNormals); HashMap> sourceVertexToVertexMap(MemTag::Mesh, approxVertexCount); for (uint32_t f = 0; f < faceCount; f++) { const uint32_t face = m_faceToSourceFaceMap[f]; for (uint32_t i = 0; i < 3; i++) { const uint32_t vertex = m_sourceMesh->vertexAt(face * 3 + i); if (sourceVertexToVertexMap.get(vertex) == UINT32_MAX) { sourceVertexToVertexMap.add(vertex); Vector3 normal(0.0f); if (m_sourceMesh->flags() & MeshFlags::HasNormals) normal = m_sourceMesh->normal(vertex); mesh->addVertex(m_sourceMesh->position(vertex), normal, m_sourceMesh->texcoord(vertex)); } } } // Add faces. for (uint32_t f = 0; f < faceCount; f++) { const uint32_t face = m_faceToSourceFaceMap[f]; XA_DEBUG_ASSERT(!m_sourceMesh->isFaceIgnored(face)); uint32_t indices[3]; for (uint32_t i = 0; i < 3; i++) { const uint32_t vertex = m_sourceMesh->vertexAt(face * 3 + i); indices[i] = sourceVertexToVertexMap.get(vertex); XA_DEBUG_ASSERT(indices[i] != UINT32_MAX); } // Don't copy flags - ignored faces aren't used by chart groups, they are handled by InvalidMeshGeometry. mesh->addFace(indices); } XA_PROFILE_START(createChartGroupMeshColocals) mesh->createColocals(); XA_PROFILE_END(createChartGroupMeshColocals) XA_PROFILE_START(createChartGroupMeshBoundaries) mesh->createBoundaries(); mesh->destroyEdgeMap(); // Only needed it for createBoundaries. XA_PROFILE_END(createChartGroupMeshBoundaries) #if XA_DEBUG_EXPORT_OBJ_CHART_GROUPS char filename[256]; XA_SPRINTF(filename, sizeof(filename), "debug_mesh_%03u_chartgroup_%03u.obj", m_sourceMesh->id(), m_id); mesh->writeObjFile(filename); #endif return mesh; } const uint32_t m_id; const Mesh * const m_sourceMesh; const MeshFaceGroups * const m_sourceMeshFaceGroups; const MeshFaceGroups::Handle m_faceGroup; Array m_faceToSourceFaceMap; // List of faces of the source mesh that belong to this chart group. Array m_charts; }; struct ChartGroupComputeChartsTaskGroupArgs { ThreadLocal *atlas; const ChartOptions *options; Progress *progress; TaskScheduler *taskScheduler; ThreadLocal *boundaryGrid; ThreadLocal *chartBuffers; ThreadLocal *piecewiseParam; }; static void runChartGroupComputeChartsTask(void *groupUserData, void *taskUserData) { auto args = (ChartGroupComputeChartsTaskGroupArgs *)groupUserData; auto chartGroup = (ChartGroup *)taskUserData; if (args->progress->cancel) return; XA_PROFILE_START(chartGroupComputeChartsThread) chartGroup->computeCharts(args->taskScheduler, *args->options, args->progress, args->atlas->get(), args->boundaryGrid, args->chartBuffers, args->piecewiseParam); XA_PROFILE_END(chartGroupComputeChartsThread) } struct MeshComputeChartsTaskGroupArgs { ThreadLocal *atlas; const ChartOptions *options; Progress *progress; TaskScheduler *taskScheduler; ThreadLocal *boundaryGrid; ThreadLocal *chartBuffers; ThreadLocal *piecewiseParam; }; struct MeshComputeChartsTaskArgs { const Mesh *sourceMesh; Array *chartGroups; // output InvalidMeshGeometry *invalidMeshGeometry; // output }; #if XA_DEBUG_EXPORT_OBJ_FACE_GROUPS static uint32_t s_faceGroupsCurrentVertex = 0; #endif static void runMeshComputeChartsTask(void *groupUserData, void *taskUserData) { auto groupArgs = (MeshComputeChartsTaskGroupArgs *)groupUserData; auto args = (MeshComputeChartsTaskArgs *)taskUserData; if (groupArgs->progress->cancel) return; XA_PROFILE_START(computeChartsThread) // Create face groups. XA_PROFILE_START(createFaceGroups) MeshFaceGroups *meshFaceGroups = XA_NEW_ARGS(MemTag::Mesh, MeshFaceGroups, args->sourceMesh); meshFaceGroups->compute(); const uint32_t chartGroupCount = meshFaceGroups->groupCount(); XA_PROFILE_END(createFaceGroups) if (groupArgs->progress->cancel) goto cleanup; #if XA_DEBUG_EXPORT_OBJ_FACE_GROUPS { static std::mutex s_mutex; std::lock_guard lock(s_mutex); char filename[256]; XA_SPRINTF(filename, sizeof(filename), "debug_face_groups.obj"); FILE *file; XA_FOPEN(file, filename, s_faceGroupsCurrentVertex == 0 ? "w" : "a"); if (file) { const Mesh *mesh = args->sourceMesh; mesh->writeObjVertices(file); // groups uint32_t numGroups = 0; for (uint32_t i = 0; i < mesh->faceCount(); i++) { if (meshFaceGroups->groupAt(i) != MeshFaceGroups::kInvalid) numGroups = max(numGroups, meshFaceGroups->groupAt(i) + 1); } for (uint32_t i = 0; i < numGroups; i++) { fprintf(file, "o mesh_%03u_group_%04d\n", mesh->id(), i); fprintf(file, "s off\n"); for (uint32_t f = 0; f < mesh->faceCount(); f++) { if (meshFaceGroups->groupAt(f) == i) mesh->writeObjFace(file, f, s_faceGroupsCurrentVertex); } } fprintf(file, "o mesh_%03u_group_ignored\n", mesh->id()); fprintf(file, "s off\n"); for (uint32_t f = 0; f < mesh->faceCount(); f++) { if (meshFaceGroups->groupAt(f) == MeshFaceGroups::kInvalid) mesh->writeObjFace(file, f, s_faceGroupsCurrentVertex); } mesh->writeObjBoundaryEges(file); s_faceGroupsCurrentVertex += mesh->vertexCount(); fclose(file); } } #endif // Create a chart group for each face group. args->chartGroups->resize(chartGroupCount); for (uint32_t i = 0; i < chartGroupCount; i++) (*args->chartGroups)[i] = XA_NEW_ARGS(MemTag::Default, ChartGroup, i, args->sourceMesh, meshFaceGroups, MeshFaceGroups::Handle(i)); // Extract invalid geometry via the invalid face group (MeshFaceGroups::kInvalid). { XA_PROFILE_START(extractInvalidMeshGeometry) args->invalidMeshGeometry->extract(args->sourceMesh, meshFaceGroups); XA_PROFILE_END(extractInvalidMeshGeometry) } // One task for each chart group - compute charts. { XA_PROFILE_START(chartGroupComputeChartsReal) // Sort chart groups by face count. Array chartGroupSortData; chartGroupSortData.resize(chartGroupCount); for (uint32_t i = 0; i < chartGroupCount; i++) chartGroupSortData[i] = (float)(*args->chartGroups)[i]->faceCount(); RadixSort chartGroupSort; chartGroupSort.sort(chartGroupSortData); // Larger chart groups are added first to reduce the chance of thread starvation. ChartGroupComputeChartsTaskGroupArgs taskGroupArgs; taskGroupArgs.atlas = groupArgs->atlas; taskGroupArgs.options = groupArgs->options; taskGroupArgs.progress = groupArgs->progress; taskGroupArgs.taskScheduler = groupArgs->taskScheduler; taskGroupArgs.boundaryGrid = groupArgs->boundaryGrid; taskGroupArgs.chartBuffers = groupArgs->chartBuffers; taskGroupArgs.piecewiseParam = groupArgs->piecewiseParam; TaskGroupHandle taskGroup = groupArgs->taskScheduler->createTaskGroup(&taskGroupArgs, chartGroupCount); for (uint32_t i = 0; i < chartGroupCount; i++) { Task task; task.userData = (*args->chartGroups)[chartGroupCount - i - 1]; task.func = runChartGroupComputeChartsTask; groupArgs->taskScheduler->run(taskGroup, task); } groupArgs->taskScheduler->wait(&taskGroup); XA_PROFILE_END(chartGroupComputeChartsReal) } XA_PROFILE_END(computeChartsThread) cleanup: if (meshFaceGroups) { meshFaceGroups->~MeshFaceGroups(); XA_FREE(meshFaceGroups); } } /// An atlas is a set of chart groups. class Atlas { public: Atlas() : m_chartsComputed(false) {} ~Atlas() { for (uint32_t i = 0; i < m_meshChartGroups.size(); i++) { for (uint32_t j = 0; j < m_meshChartGroups[i].size(); j++) { m_meshChartGroups[i][j]->~ChartGroup(); XA_FREE(m_meshChartGroups[i][j]); } } m_meshChartGroups.runDtors(); m_invalidMeshGeometry.runDtors(); } uint32_t meshCount() const { return m_meshes.size(); } const InvalidMeshGeometry &invalidMeshGeometry(uint32_t meshIndex) const { return m_invalidMeshGeometry[meshIndex]; } bool chartsComputed() const { return m_chartsComputed; } uint32_t chartGroupCount(uint32_t mesh) const { return m_meshChartGroups[mesh].size(); } const ChartGroup *chartGroupAt(uint32_t mesh, uint32_t group) const { return m_meshChartGroups[mesh][group]; } void addMesh(const Mesh *mesh) { m_meshes.push_back(mesh); } bool computeCharts(TaskScheduler *taskScheduler, const ChartOptions &options, ProgressFunc progressFunc, void *progressUserData) { XA_PROFILE_START(computeChartsReal) #if XA_DEBUG_EXPORT_OBJ_PLANAR_REGIONS segment::s_planarRegionsCurrentRegion = segment::s_planarRegionsCurrentVertex = 0; #endif // Progress is per-face x 2 (1 for chart faces, 1 for parameterized chart faces). const uint32_t meshCount = m_meshes.size(); uint32_t totalFaceCount = 0; for (uint32_t i = 0; i < meshCount; i++) totalFaceCount += m_meshes[i]->faceCount(); Progress progress(ProgressCategory::ComputeCharts, progressFunc, progressUserData, totalFaceCount * 2); m_chartsComputed = false; // Clear chart groups, since this function may be called multiple times. if (!m_meshChartGroups.isEmpty()) { for (uint32_t i = 0; i < m_meshChartGroups.size(); i++) { for (uint32_t j = 0; j < m_meshChartGroups[i].size(); j++) { m_meshChartGroups[i][j]->~ChartGroup(); XA_FREE(m_meshChartGroups[i][j]); } m_meshChartGroups[i].clear(); } XA_ASSERT(m_meshChartGroups.size() == meshCount); // The number of meshes shouldn't have changed. } m_meshChartGroups.resize(meshCount); m_meshChartGroups.runCtors(); m_invalidMeshGeometry.resize(meshCount); m_invalidMeshGeometry.runCtors(); // One task per mesh. Array taskArgs; taskArgs.resize(meshCount); for (uint32_t i = 0; i < meshCount; i++) { MeshComputeChartsTaskArgs &args = taskArgs[i]; args.sourceMesh = m_meshes[i]; args.chartGroups = &m_meshChartGroups[i]; args.invalidMeshGeometry = &m_invalidMeshGeometry[i]; } // Sort meshes by indexCount. Array meshSortData; meshSortData.resize(meshCount); for (uint32_t i = 0; i < meshCount; i++) meshSortData[i] = (float)m_meshes[i]->indexCount(); RadixSort meshSort; meshSort.sort(meshSortData); // Larger meshes are added first to reduce the chance of thread starvation. ThreadLocal atlas; ThreadLocal boundaryGrid; // For Quality boundary intersection. ThreadLocal chartBuffers; ThreadLocal piecewiseParam; MeshComputeChartsTaskGroupArgs taskGroupArgs; taskGroupArgs.atlas = &atlas; taskGroupArgs.options = &options; taskGroupArgs.progress = &progress; taskGroupArgs.taskScheduler = taskScheduler; taskGroupArgs.boundaryGrid = &boundaryGrid; taskGroupArgs.chartBuffers = &chartBuffers; taskGroupArgs.piecewiseParam = &piecewiseParam; TaskGroupHandle taskGroup = taskScheduler->createTaskGroup(&taskGroupArgs, meshCount); for (uint32_t i = 0; i < meshCount; i++) { Task task; task.userData = &taskArgs[meshSort.ranks()[meshCount - i - 1]]; task.func = runMeshComputeChartsTask; taskScheduler->run(taskGroup, task); } taskScheduler->wait(&taskGroup); XA_PROFILE_END(computeChartsReal) if (progress.cancel) return false; m_chartsComputed = true; return true; } private: Array m_meshes; Array m_invalidMeshGeometry; // 1 per mesh. Array > m_meshChartGroups; bool m_chartsComputed; }; } // namespace param namespace pack { class AtlasImage { public: AtlasImage(uint32_t width, uint32_t height) : m_width(width), m_height(height) { m_data.resize(m_width * m_height); memset(m_data.data(), 0, sizeof(uint32_t) * m_data.size()); } void resize(uint32_t width, uint32_t height) { Array data; data.resize(width * height); memset(data.data(), 0, sizeof(uint32_t) * data.size()); for (uint32_t y = 0; y < min(m_height, height); y++) memcpy(&data[y * width], &m_data[y * m_width], min(m_width, width) * sizeof(uint32_t)); m_width = width; m_height = height; data.moveTo(m_data); } void addChart(uint32_t chartIndex, const BitImage *image, const BitImage *imageBilinear, const BitImage *imagePadding, int atlas_w, int atlas_h, int offset_x, int offset_y) { const int w = image->width(); const int h = image->height(); for (int y = 0; y < h; y++) { const int yy = y + offset_y; if (yy < 0) continue; for (int x = 0; x < w; x++) { const int xx = x + offset_x; if (xx >= 0 && xx < atlas_w && yy < atlas_h) { const uint32_t dataOffset = xx + yy * m_width; if (image->get(x, y)) { XA_DEBUG_ASSERT(m_data[dataOffset] == 0); m_data[dataOffset] = chartIndex | kImageHasChartIndexBit; } else if (imageBilinear && imageBilinear->get(x, y)) { XA_DEBUG_ASSERT(m_data[dataOffset] == 0); m_data[dataOffset] = chartIndex | kImageHasChartIndexBit | kImageIsBilinearBit; } else if (imagePadding && imagePadding->get(x, y)) { XA_DEBUG_ASSERT(m_data[dataOffset] == 0); m_data[dataOffset] = chartIndex | kImageHasChartIndexBit | kImageIsPaddingBit; } } } } } void copyTo(uint32_t *dest, uint32_t destWidth, uint32_t destHeight, int padding) const { for (uint32_t y = 0; y < destHeight; y++) memcpy(&dest[y * destWidth], &m_data[padding + (y + padding) * m_width], destWidth * sizeof(uint32_t)); } #if XA_DEBUG_EXPORT_ATLAS_IMAGES void writeTga(const char *filename, uint32_t width, uint32_t height) const { Array image; image.resize(width * height * 3); for (uint32_t y = 0; y < height; y++) { if (y >= m_height) continue; for (uint32_t x = 0; x < width; x++) { if (x >= m_width) continue; const uint32_t data = m_data[x + y * m_width]; uint8_t *bgr = &image[(x + y * width) * 3]; if (data == 0) { bgr[0] = bgr[1] = bgr[2] = 0; continue; } const uint32_t chartIndex = data & kImageChartIndexMask; if (data & kImageIsPaddingBit) { bgr[0] = 0; bgr[1] = 0; bgr[2] = 255; } else if (data & kImageIsBilinearBit) { bgr[0] = 0; bgr[1] = 255; bgr[2] = 0; } else { const int mix = 192; srand((unsigned int)chartIndex); bgr[0] = uint8_t((rand() % 255 + mix) * 0.5f); bgr[1] = uint8_t((rand() % 255 + mix) * 0.5f); bgr[2] = uint8_t((rand() % 255 + mix) * 0.5f); } } } WriteTga(filename, image.data(), width, height); } #endif private: uint32_t m_width, m_height; Array m_data; }; struct Chart { int32_t atlasIndex; uint32_t material; ConstArrayView indices; float parametricArea; float surfaceArea; ArrayView vertices; Array uniqueVertices; // bounding box Vector2 majorAxis, minorAxis, minCorner, maxCorner; // Mesh only const Array *boundaryEdges; // UvMeshChart only Array faces; Vector2 &uniqueVertexAt(uint32_t v) { return uniqueVertices.isEmpty() ? vertices[v] : vertices[uniqueVertices[v]]; } uint32_t uniqueVertexCount() const { return uniqueVertices.isEmpty() ? vertices.length : uniqueVertices.size(); } }; struct AddChartTaskArgs { param::Chart *paramChart; Chart *chart; // out }; static void runAddChartTask(void *groupUserData, void *taskUserData) { XA_PROFILE_START(packChartsAddChartsThread) auto boundingBox = (ThreadLocal *)groupUserData; auto args = (AddChartTaskArgs *)taskUserData; param::Chart *paramChart = args->paramChart; XA_PROFILE_START(packChartsAddChartsRestoreTexcoords) paramChart->restoreTexcoords(); XA_PROFILE_END(packChartsAddChartsRestoreTexcoords) Mesh *mesh = paramChart->unifiedMesh(); Chart *chart = args->chart = XA_NEW(MemTag::Default, Chart); chart->atlasIndex = -1; chart->material = 0; chart->indices = mesh->indices(); chart->parametricArea = mesh->computeParametricArea(); if (chart->parametricArea < kAreaEpsilon) { // When the parametric area is too small we use a rough approximation to prevent divisions by very small numbers. const Vector2 bounds = paramChart->computeParametricBounds(); chart->parametricArea = bounds.x * bounds.y; } chart->surfaceArea = mesh->computeSurfaceArea(); chart->vertices = mesh->texcoords(); chart->boundaryEdges = &mesh->boundaryEdges(); // Compute bounding box of chart. BoundingBox2D &bb = boundingBox->get(); bb.clear(); for (uint32_t v = 0; v < chart->vertices.length; v++) { if (mesh->isBoundaryVertex(v)) bb.appendBoundaryVertex(mesh->texcoord(v)); } bb.compute(mesh->texcoords()); chart->majorAxis = bb.majorAxis; chart->minorAxis = bb.minorAxis; chart->minCorner = bb.minCorner; chart->maxCorner = bb.maxCorner; XA_PROFILE_END(packChartsAddChartsThread) } struct Atlas { ~Atlas() { for (uint32_t i = 0; i < m_atlasImages.size(); i++) { m_atlasImages[i]->~AtlasImage(); XA_FREE(m_atlasImages[i]); } for (uint32_t i = 0; i < m_bitImages.size(); i++) { m_bitImages[i]->~BitImage(); XA_FREE(m_bitImages[i]); } for (uint32_t i = 0; i < m_charts.size(); i++) { m_charts[i]->~Chart(); XA_FREE(m_charts[i]); } } uint32_t getWidth() const { return m_width; } uint32_t getHeight() const { return m_height; } uint32_t getNumAtlases() const { return m_bitImages.size(); } float getTexelsPerUnit() const { return m_texelsPerUnit; } const Chart *getChart(uint32_t index) const { return m_charts[index]; } uint32_t getChartCount() const { return m_charts.size(); } const Array &getImages() const { return m_atlasImages; } float getUtilization(uint32_t atlas) const { return m_utilization[atlas]; } void addCharts(TaskScheduler *taskScheduler, param::Atlas *paramAtlas) { // Count charts. uint32_t chartCount = 0; for (uint32_t i = 0; i < paramAtlas->meshCount(); i++) { const uint32_t chartGroupsCount = paramAtlas->chartGroupCount(i); for (uint32_t j = 0; j < chartGroupsCount; j++) { const param::ChartGroup *chartGroup = paramAtlas->chartGroupAt(i, j); chartCount += chartGroup->chartCount(); } } if (chartCount == 0) return; // Run one task per chart. ThreadLocal boundingBox; TaskGroupHandle taskGroup = taskScheduler->createTaskGroup(&boundingBox, chartCount); Array taskArgs; taskArgs.resize(chartCount); uint32_t chartIndex = 0; for (uint32_t i = 0; i < paramAtlas->meshCount(); i++) { const uint32_t chartGroupsCount = paramAtlas->chartGroupCount(i); for (uint32_t j = 0; j < chartGroupsCount; j++) { const param::ChartGroup *chartGroup = paramAtlas->chartGroupAt(i, j); const uint32_t count = chartGroup->chartCount(); for (uint32_t k = 0; k < count; k++) { AddChartTaskArgs &args = taskArgs[chartIndex]; args.paramChart = chartGroup->chartAt(k); Task task; task.userData = &taskArgs[chartIndex]; task.func = runAddChartTask; taskScheduler->run(taskGroup, task); chartIndex++; } } } taskScheduler->wait(&taskGroup); // Get task output. m_charts.resize(chartCount); for (uint32_t i = 0; i < chartCount; i++) m_charts[i] = taskArgs[i].chart; } void addUvMeshCharts(UvMeshInstance *mesh) { // Copy texcoords from mesh. mesh->texcoords.resize(mesh->mesh->texcoords.size()); memcpy(mesh->texcoords.data(), mesh->mesh->texcoords.data(), mesh->texcoords.size() * sizeof(Vector2)); BitArray vertexUsed(mesh->texcoords.size()); BoundingBox2D boundingBox; for (uint32_t c = 0; c < mesh->mesh->charts.size(); c++) { UvMeshChart *uvChart = mesh->mesh->charts[c]; Chart *chart = XA_NEW(MemTag::Default, Chart); chart->atlasIndex = -1; chart->material = uvChart->material; chart->indices = uvChart->indices; chart->vertices = mesh->texcoords; chart->boundaryEdges = nullptr; chart->faces.resize(uvChart->faces.size()); memcpy(chart->faces.data(), uvChart->faces.data(), sizeof(uint32_t) * uvChart->faces.size()); // Find unique vertices. vertexUsed.zeroOutMemory(); for (uint32_t i = 0; i < chart->indices.length; i++) { const uint32_t vertex = chart->indices[i]; if (!vertexUsed.get(vertex)) { vertexUsed.set(vertex); chart->uniqueVertices.push_back(vertex); } } // Compute parametric and surface areas. chart->parametricArea = 0.0f; for (uint32_t f = 0; f < chart->indices.length / 3; f++) { const Vector2 &v1 = chart->vertices[chart->indices[f * 3 + 0]]; const Vector2 &v2 = chart->vertices[chart->indices[f * 3 + 1]]; const Vector2 &v3 = chart->vertices[chart->indices[f * 3 + 2]]; chart->parametricArea += fabsf(triangleArea(v1, v2, v3)); } chart->parametricArea *= 0.5f; if (chart->parametricArea < kAreaEpsilon) { // When the parametric area is too small we use a rough approximation to prevent divisions by very small numbers. Vector2 minCorner(FLT_MAX, FLT_MAX); Vector2 maxCorner(-FLT_MAX, -FLT_MAX); for (uint32_t v = 0; v < chart->uniqueVertexCount(); v++) { minCorner = min(minCorner, chart->uniqueVertexAt(v)); maxCorner = max(maxCorner, chart->uniqueVertexAt(v)); } const Vector2 bounds = (maxCorner - minCorner) * 0.5f; chart->parametricArea = bounds.x * bounds.y; } XA_DEBUG_ASSERT(isFinite(chart->parametricArea)); XA_DEBUG_ASSERT(!isNan(chart->parametricArea)); chart->surfaceArea = chart->parametricArea; // Identical for UV meshes. // Compute bounding box of chart. // Using all unique vertices for simplicity, can compute real boundaries if this is too slow. boundingBox.clear(); for (uint32_t v = 0; v < chart->uniqueVertexCount(); v++) boundingBox.appendBoundaryVertex(chart->uniqueVertexAt(v)); boundingBox.compute(); chart->majorAxis = boundingBox.majorAxis; chart->minorAxis = boundingBox.minorAxis; chart->minCorner = boundingBox.minCorner; chart->maxCorner = boundingBox.maxCorner; m_charts.push_back(chart); } } // Pack charts in the smallest possible rectangle. bool packCharts(const PackOptions &options, ProgressFunc progressFunc, void *progressUserData) { if (progressFunc) { if (!progressFunc(ProgressCategory::PackCharts, 0, progressUserData)) return false; } const uint32_t chartCount = m_charts.size(); XA_PRINT("Packing %u charts\n", chartCount); if (chartCount == 0) { if (progressFunc) { if (!progressFunc(ProgressCategory::PackCharts, 100, progressUserData)) return false; } return true; } // Estimate resolution and/or texels per unit if not specified. m_texelsPerUnit = options.texelsPerUnit; uint32_t resolution = options.resolution > 0 ? options.resolution + options.padding * 2 : 0; const uint32_t maxResolution = m_texelsPerUnit > 0.0f ? resolution : 0; if (resolution <= 0 || m_texelsPerUnit <= 0) { if (resolution <= 0 && m_texelsPerUnit <= 0) resolution = 1024; float meshArea = 0; for (uint32_t c = 0; c < chartCount; c++) meshArea += m_charts[c]->surfaceArea; if (resolution <= 0) { // Estimate resolution based on the mesh surface area and given texel scale. const float texelCount = max(1.0f, meshArea * square(m_texelsPerUnit) / 0.75f); // Assume 75% utilization. resolution = max(1u, nextPowerOfTwo(uint32_t(sqrtf(texelCount)))); } if (m_texelsPerUnit <= 0) { // Estimate a suitable texelsPerUnit to fit the given resolution. const float texelCount = max(1.0f, meshArea / 0.75f); // Assume 75% utilization. m_texelsPerUnit = sqrtf((resolution * resolution) / texelCount); XA_PRINT(" Estimating texelsPerUnit as %g\n", m_texelsPerUnit); } } Array chartOrderArray; chartOrderArray.resize(chartCount); Array chartExtents; chartExtents.resize(chartCount); float minChartPerimeter = FLT_MAX, maxChartPerimeter = 0.0f; for (uint32_t c = 0; c < chartCount; c++) { Chart *chart = m_charts[c]; // Compute chart scale float scale = 1.0f; if (chart->parametricArea != 0.0f) { scale = sqrtf(chart->surfaceArea / chart->parametricArea) * m_texelsPerUnit; XA_ASSERT(isFinite(scale)); } // Translate, rotate and scale vertices. Compute extents. Vector2 minCorner(FLT_MAX, FLT_MAX); if (!options.rotateChartsToAxis) { for (uint32_t i = 0; i < chart->uniqueVertexCount(); i++) minCorner = min(minCorner, chart->uniqueVertexAt(i)); } Vector2 extents(0.0f); for (uint32_t i = 0; i < chart->uniqueVertexCount(); i++) { Vector2 &texcoord = chart->uniqueVertexAt(i); if (options.rotateChartsToAxis) { const float x = dot(texcoord, chart->majorAxis); const float y = dot(texcoord, chart->minorAxis); texcoord.x = x; texcoord.y = y; texcoord -= chart->minCorner; } else { texcoord -= minCorner; } texcoord *= scale; XA_DEBUG_ASSERT(texcoord.x >= 0.0f && texcoord.y >= 0.0f); XA_DEBUG_ASSERT(isFinite(texcoord.x) && isFinite(texcoord.y)); extents = max(extents, texcoord); } XA_DEBUG_ASSERT(extents.x >= 0 && extents.y >= 0); // Scale the charts to use the entire texel area available. So, if the width is 0.1 we could scale it to 1 without increasing the lightmap usage and making a better use of it. In many cases this also improves the look of the seams, since vertices on the chart boundaries have more chances of being aligned with the texel centers. if (extents.x > 0.0f && extents.y > 0.0f) { // Block align: align all chart extents to 4x4 blocks, but taking padding and texel center offset into account. const int blockAlignSizeOffset = options.padding * 2 + 1; int width = ftoi_ceil(extents.x); if (options.blockAlign) width = align(width + blockAlignSizeOffset, 4) - blockAlignSizeOffset; int height = ftoi_ceil(extents.y); if (options.blockAlign) height = align(height + blockAlignSizeOffset, 4) - blockAlignSizeOffset; for (uint32_t v = 0; v < chart->uniqueVertexCount(); v++) { Vector2 &texcoord = chart->uniqueVertexAt(v); texcoord.x = texcoord.x / extents.x * (float)width; texcoord.y = texcoord.y / extents.y * (float)height; } extents.x = (float)width; extents.y = (float)height; } // Limit chart size, either to PackOptions::maxChartSize or maxResolution (if set), whichever is smaller. // If limiting chart size to maxResolution, print a warning, since that may not be desirable to the user. uint32_t maxChartSize = options.maxChartSize; bool warnChartResized = false; if (maxResolution > 0 && (maxChartSize == 0 || maxResolution < maxChartSize)) { maxChartSize = maxResolution - options.padding * 2; // Don't include padding. warnChartResized = true; } if (maxChartSize > 0) { const float realMaxChartSize = (float)maxChartSize - 1.0f; // Aligning to texel centers increases texel footprint by 1. if (extents.x > realMaxChartSize || extents.y > realMaxChartSize) { if (warnChartResized) XA_PRINT(" Resizing chart %u from %gx%g to %ux%u to fit atlas\n", c, extents.x, extents.y, maxChartSize, maxChartSize); scale = realMaxChartSize / max(extents.x, extents.y); for (uint32_t i = 0; i < chart->uniqueVertexCount(); i++) { Vector2 &texcoord = chart->uniqueVertexAt(i); texcoord = min(texcoord * scale, Vector2(realMaxChartSize)); } } } // Align to texel centers and add padding offset. extents.x = extents.y = 0.0f; for (uint32_t v = 0; v < chart->uniqueVertexCount(); v++) { Vector2 &texcoord = chart->uniqueVertexAt(v); texcoord.x += 0.5f + options.padding; texcoord.y += 0.5f + options.padding; extents = max(extents, texcoord); } if (extents.x > resolution || extents.y > resolution) XA_PRINT(" Chart %u extents are large (%gx%g)\n", c, extents.x, extents.y); chartExtents[c] = extents; chartOrderArray[c] = extents.x + extents.y; // Use perimeter for chart sort key. minChartPerimeter = min(minChartPerimeter, chartOrderArray[c]); maxChartPerimeter = max(maxChartPerimeter, chartOrderArray[c]); } // Sort charts by perimeter. m_radix.sort(chartOrderArray); const uint32_t *ranks = m_radix.ranks(); // Divide chart perimeter range into buckets. const float chartPerimeterBucketSize = (maxChartPerimeter - minChartPerimeter) / 16.0f; uint32_t currentChartBucket = 0; Array chartStartPositions; // per atlas chartStartPositions.push_back(Vector2i(0, 0)); // Pack sorted charts. #if XA_DEBUG_EXPORT_ATLAS_IMAGES const bool createImage = true; #else const bool createImage = options.createImage; #endif // chartImage: result from conservative rasterization // chartImageBilinear: chartImage plus any texels that would be sampled by bilinear filtering. // chartImagePadding: either chartImage or chartImageBilinear depending on options, with a dilate filter applied options.padding times. // Rotated versions swap x and y. BitImage chartImage, chartImageBilinear, chartImagePadding; BitImage chartImageRotated, chartImageBilinearRotated, chartImagePaddingRotated; UniformGrid2 boundaryEdgeGrid; Array atlasSizes; atlasSizes.push_back(Vector2i(0, 0)); int progress = 0; for (uint32_t i = 0; i < chartCount; i++) { uint32_t c = ranks[chartCount - i - 1]; // largest chart first Chart *chart = m_charts[c]; // @@ Add special cases for dot and line charts. @@ Lightmap rasterizer also needs to handle these special cases. // @@ We could also have a special case for chart quads. If the quad surface <= 4 texels, align vertices with texel centers and do not add padding. May be very useful for foliage. // @@ In general we could reduce the padding of all charts by one texel by using a rasterizer that takes into account the 2-texel footprint of the tent bilinear filter. For example, // if we have a chart that is less than 1 texel wide currently we add one texel to the left and one texel to the right creating a 3-texel-wide bitImage. However, if we know that the // chart is only 1 texel wide we could align it so that it only touches the footprint of two texels: // | | <- Touches texels 0, 1 and 2. // | | <- Only touches texels 0 and 1. // \ \ / \ / / // \ X X / // \ / \ / \ / // V V V // 0 1 2 XA_PROFILE_START(packChartsRasterize) // Resize and clear (discard = true) chart images. // Leave room for padding at extents. chartImage.resize(ftoi_ceil(chartExtents[c].x) + options.padding, ftoi_ceil(chartExtents[c].y) + options.padding, true); if (options.rotateCharts) chartImageRotated.resize(chartImage.height(), chartImage.width(), true); if (options.bilinear) { chartImageBilinear.resize(chartImage.width(), chartImage.height(), true); if (options.rotateCharts) chartImageBilinearRotated.resize(chartImage.height(), chartImage.width(), true); } // Rasterize chart faces. const uint32_t faceCount = chart->indices.length / 3; for (uint32_t f = 0; f < faceCount; f++) { Vector2 vertices[3]; for (uint32_t v = 0; v < 3; v++) vertices[v] = chart->vertices[chart->indices[f * 3 + v]]; DrawTriangleCallbackArgs args; args.chartBitImage = &chartImage; args.chartBitImageRotated = options.rotateCharts ? &chartImageRotated : nullptr; raster::drawTriangle(Vector2((float)chartImage.width(), (float)chartImage.height()), vertices, drawTriangleCallback, &args); } // Expand chart by pixels sampled by bilinear interpolation. if (options.bilinear) bilinearExpand(chart, &chartImage, &chartImageBilinear, options.rotateCharts ? &chartImageBilinearRotated : nullptr, boundaryEdgeGrid); // Expand chart by padding pixels (dilation). if (options.padding > 0) { // Copy into the same BitImage instances for every chart to avoid reallocating BitImage buffers (largest chart is packed first). XA_PROFILE_START(packChartsDilate) if (options.bilinear) chartImageBilinear.copyTo(chartImagePadding); else chartImage.copyTo(chartImagePadding); chartImagePadding.dilate(options.padding); if (options.rotateCharts) { if (options.bilinear) chartImageBilinearRotated.copyTo(chartImagePaddingRotated); else chartImageRotated.copyTo(chartImagePaddingRotated); chartImagePaddingRotated.dilate(options.padding); } XA_PROFILE_END(packChartsDilate) } XA_PROFILE_END(packChartsRasterize) // Update brute force bucketing. if (options.bruteForce) { if (chartOrderArray[c] > minChartPerimeter && chartOrderArray[c] <= maxChartPerimeter - (chartPerimeterBucketSize * (currentChartBucket + 1))) { // Moved to a smaller bucket, reset start location. for (uint32_t j = 0; j < chartStartPositions.size(); j++) chartStartPositions[j] = Vector2i(0, 0); currentChartBucket++; } } // Find a location to place the chart in the atlas. BitImage *chartImageToPack, *chartImageToPackRotated; if (options.padding > 0) { chartImageToPack = &chartImagePadding; chartImageToPackRotated = &chartImagePaddingRotated; } else if (options.bilinear) { chartImageToPack = &chartImageBilinear; chartImageToPackRotated = &chartImageBilinearRotated; } else { chartImageToPack = &chartImage; chartImageToPackRotated = &chartImageRotated; } uint32_t currentAtlas = 0; int best_x = 0, best_y = 0; int best_cw = 0, best_ch = 0; int best_r = 0; for (;;) { #if XA_DEBUG bool firstChartInBitImage = false; #endif if (currentAtlas + 1 > m_bitImages.size()) { // Chart doesn't fit in the current bitImage, create a new one. BitImage *bi = XA_NEW_ARGS(MemTag::Default, BitImage, resolution, resolution); m_bitImages.push_back(bi); atlasSizes.push_back(Vector2i(0, 0)); #if XA_DEBUG firstChartInBitImage = true; #endif if (createImage) m_atlasImages.push_back(XA_NEW_ARGS(MemTag::Default, AtlasImage, resolution, resolution)); // Start positions are per-atlas, so create a new one of those too. chartStartPositions.push_back(Vector2i(0, 0)); } XA_PROFILE_START(packChartsFindLocation) const bool foundLocation = findChartLocation(options, chartStartPositions[currentAtlas], m_bitImages[currentAtlas], chartImageToPack, chartImageToPackRotated, atlasSizes[currentAtlas].x, atlasSizes[currentAtlas].y, &best_x, &best_y, &best_cw, &best_ch, &best_r, maxResolution); XA_PROFILE_END(packChartsFindLocation) XA_DEBUG_ASSERT(!(firstChartInBitImage && !foundLocation)); // Chart doesn't fit in an empty, newly allocated bitImage. Shouldn't happen, since charts are resized if they are too big to fit in the atlas. if (maxResolution == 0) { XA_DEBUG_ASSERT(foundLocation); // The atlas isn't limited to a fixed resolution, a chart location should be found on the first attempt. break; } if (foundLocation) break; // Chart doesn't fit in the current bitImage, try the next one. currentAtlas++; } // Update brute force start location. if (options.bruteForce) { // Reset start location if the chart expanded the atlas. if (best_x + best_cw > atlasSizes[currentAtlas].x || best_y + best_ch > atlasSizes[currentAtlas].y) { for (uint32_t j = 0; j < chartStartPositions.size(); j++) chartStartPositions[j] = Vector2i(0, 0); } else { chartStartPositions[currentAtlas] = Vector2i(best_x, best_y); } } // Update parametric extents. atlasSizes[currentAtlas].x = max(atlasSizes[currentAtlas].x, best_x + best_cw); atlasSizes[currentAtlas].y = max(atlasSizes[currentAtlas].y, best_y + best_ch); // Resize bitImage if necessary. // If maxResolution > 0, the bitImage is always set to maxResolutionIncludingPadding on creation and doesn't need to be dynamically resized. if (maxResolution == 0) { const uint32_t w = (uint32_t)atlasSizes[currentAtlas].x; const uint32_t h = (uint32_t)atlasSizes[currentAtlas].y; if (w > m_bitImages[0]->width() || h > m_bitImages[0]->height()) { m_bitImages[0]->resize(nextPowerOfTwo(w), nextPowerOfTwo(h), false); if (createImage) m_atlasImages[0]->resize(m_bitImages[0]->width(), m_bitImages[0]->height()); } } else { XA_DEBUG_ASSERT(atlasSizes[currentAtlas].x <= (int)maxResolution); XA_DEBUG_ASSERT(atlasSizes[currentAtlas].y <= (int)maxResolution); } XA_PROFILE_START(packChartsBlit) addChart(m_bitImages[currentAtlas], chartImageToPack, chartImageToPackRotated, atlasSizes[currentAtlas].x, atlasSizes[currentAtlas].y, best_x, best_y, best_r); XA_PROFILE_END(packChartsBlit) if (createImage) { if (best_r == 0) { m_atlasImages[currentAtlas]->addChart(c, &chartImage, options.bilinear ? &chartImageBilinear : nullptr, options.padding > 0 ? &chartImagePadding : nullptr, atlasSizes[currentAtlas].x, atlasSizes[currentAtlas].y, best_x, best_y); } else { m_atlasImages[currentAtlas]->addChart(c, &chartImageRotated, options.bilinear ? &chartImageBilinearRotated : nullptr, options.padding > 0 ? &chartImagePaddingRotated : nullptr, atlasSizes[currentAtlas].x, atlasSizes[currentAtlas].y, best_x, best_y); } #if XA_DEBUG_EXPORT_ATLAS_IMAGES && XA_DEBUG_EXPORT_ATLAS_IMAGES_PER_CHART for (uint32_t j = 0; j < m_atlasImages.size(); j++) { char filename[256]; XA_SPRINTF(filename, sizeof(filename), "debug_atlas_image%02u_chart%04u.tga", j, i); m_atlasImages[j]->writeTga(filename, (uint32_t)atlasSizes[j].x, (uint32_t)atlasSizes[j].y); } #endif } chart->atlasIndex = (int32_t)currentAtlas; // Modify texture coordinates: // - rotate if the chart should be rotated // - translate to chart location // - translate to remove padding from top and left atlas edges (unless block aligned) for (uint32_t v = 0; v < chart->uniqueVertexCount(); v++) { Vector2 &texcoord = chart->uniqueVertexAt(v); Vector2 t = texcoord; if (best_r) { XA_DEBUG_ASSERT(options.rotateCharts); swap(t.x, t.y); } texcoord.x = best_x + t.x; texcoord.y = best_y + t.y; texcoord.x -= (float)options.padding; texcoord.y -= (float)options.padding; XA_ASSERT(texcoord.x >= 0 && texcoord.y >= 0); XA_ASSERT(isFinite(texcoord.x) && isFinite(texcoord.y)); } if (progressFunc) { const int newProgress = int((i + 1) / (float)chartCount * 100.0f); if (newProgress != progress) { progress = newProgress; if (!progressFunc(ProgressCategory::PackCharts, progress, progressUserData)) return false; } } } // Remove padding from outer edges. if (maxResolution == 0) { m_width = max(0, atlasSizes[0].x - (int)options.padding * 2); m_height = max(0, atlasSizes[0].y - (int)options.padding * 2); } else { m_width = m_height = maxResolution - (int)options.padding * 2; } XA_PRINT(" %dx%d resolution\n", m_width, m_height); m_utilization.resize(m_bitImages.size()); for (uint32_t i = 0; i < m_utilization.size(); i++) { if (m_width == 0 || m_height == 0) m_utilization[i] = 0.0f; else { uint32_t count = 0; for (uint32_t y = 0; y < m_height; y++) { for (uint32_t x = 0; x < m_width; x++) count += m_bitImages[i]->get(x, y); } m_utilization[i] = float(count) / (m_width * m_height); } if (m_utilization.size() > 1) { XA_PRINT(" %u: %f%% utilization\n", i, m_utilization[i] * 100.0f); } else { XA_PRINT(" %f%% utilization\n", m_utilization[i] * 100.0f); } } #if XA_DEBUG_EXPORT_ATLAS_IMAGES for (uint32_t i = 0; i < m_atlasImages.size(); i++) { char filename[256]; XA_SPRINTF(filename, sizeof(filename), "debug_atlas_image%02u.tga", i); m_atlasImages[i]->writeTga(filename, m_width, m_height); } #endif if (progressFunc && progress != 100) { if (!progressFunc(ProgressCategory::PackCharts, 100, progressUserData)) return false; } return true; } private: bool findChartLocation(const PackOptions &options, const Vector2i &startPosition, const BitImage *atlasBitImage, const BitImage *chartBitImage, const BitImage *chartBitImageRotated, int w, int h, int *best_x, int *best_y, int *best_w, int *best_h, int *best_r, uint32_t maxResolution) { const int attempts = 4096; if (options.bruteForce || attempts >= w * h) return findChartLocation_bruteForce(options, startPosition, atlasBitImage, chartBitImage, chartBitImageRotated, w, h, best_x, best_y, best_w, best_h, best_r, maxResolution); return findChartLocation_random(options, atlasBitImage, chartBitImage, chartBitImageRotated, w, h, best_x, best_y, best_w, best_h, best_r, attempts, maxResolution); } bool findChartLocation_bruteForce(const PackOptions &options, const Vector2i &startPosition, const BitImage *atlasBitImage, const BitImage *chartBitImage, const BitImage *chartBitImageRotated, int w, int h, int *best_x, int *best_y, int *best_w, int *best_h, int *best_r, uint32_t maxResolution) { const int stepSize = options.blockAlign ? 4 : 1; int best_metric = INT_MAX; // Try two different orientations. for (int r = 0; r < 2; r++) { int cw = chartBitImage->width(); int ch = chartBitImage->height(); if (r == 1) { if (options.rotateCharts) swap(cw, ch); else break; } for (int y = startPosition.y; y <= h + stepSize; y += stepSize) { if (maxResolution > 0 && y > (int)maxResolution - ch) break; for (int x = (y == startPosition.y ? startPosition.x : 0); x <= w + stepSize; x += stepSize) { if (maxResolution > 0 && x > (int)maxResolution - cw) break; // Early out if metric is not better. const int extentX = max(w, x + cw), extentY = max(h, y + ch); const int area = extentX * extentY; const int extents = max(extentX, extentY); const int metric = extents * extents + area; if (metric > best_metric) continue; // If metric is the same, pick the one closest to the origin. if (metric == best_metric && max(x, y) >= max(*best_x, *best_y)) continue; if (!atlasBitImage->canBlit(r == 1 ? *chartBitImageRotated : *chartBitImage, x, y)) continue; best_metric = metric; *best_x = x; *best_y = y; *best_w = cw; *best_h = ch; *best_r = r; if (area == w * h) return true; // Chart is completely inside, do not look at any other location. } } } return best_metric != INT_MAX; } bool findChartLocation_random(const PackOptions &options, const BitImage *atlasBitImage, const BitImage *chartBitImage, const BitImage *chartBitImageRotated, int w, int h, int *best_x, int *best_y, int *best_w, int *best_h, int *best_r, int attempts, uint32_t maxResolution) { bool result = false; const int BLOCK_SIZE = 4; int best_metric = INT_MAX; for (int i = 0; i < attempts; i++) { int cw = chartBitImage->width(); int ch = chartBitImage->height(); int r = options.rotateCharts ? m_rand.getRange(1) : 0; if (r == 1) swap(cw, ch); // + 1 to extend atlas in case atlas full. We may want to use a higher number to increase probability of extending atlas. int xRange = w + 1; int yRange = h + 1; // Clamp to max resolution. if (maxResolution > 0) { xRange = min(xRange, (int)maxResolution - cw); yRange = min(yRange, (int)maxResolution - ch); } int x = m_rand.getRange(xRange); int y = m_rand.getRange(yRange); if (options.blockAlign) { x = align(x, BLOCK_SIZE); y = align(y, BLOCK_SIZE); if (maxResolution > 0 && (x > (int)maxResolution - cw || y > (int)maxResolution - ch)) continue; // Block alignment pushed the chart outside the atlas. } // Early out. int area = max(w, x + cw) * max(h, y + ch); //int perimeter = max(w, x+cw) + max(h, y+ch); int extents = max(max(w, x + cw), max(h, y + ch)); int metric = extents * extents + area; if (metric > best_metric) { continue; } if (metric == best_metric && min(x, y) > min(*best_x, *best_y)) { // If metric is the same, pick the one closest to the origin. continue; } if (atlasBitImage->canBlit(r == 1 ? *chartBitImageRotated : *chartBitImage, x, y)) { result = true; best_metric = metric; *best_x = x; *best_y = y; *best_w = cw; *best_h = ch; *best_r = options.rotateCharts ? r : 0; if (area == w * h) { // Chart is completely inside, do not look at any other location. break; } } } return result; } void addChart(BitImage *atlasBitImage, const BitImage *chartBitImage, const BitImage *chartBitImageRotated, int atlas_w, int atlas_h, int offset_x, int offset_y, int r) { XA_DEBUG_ASSERT(r == 0 || r == 1); const BitImage *image = r == 0 ? chartBitImage : chartBitImageRotated; const int w = image->width(); const int h = image->height(); for (int y = 0; y < h; y++) { int yy = y + offset_y; if (yy >= 0) { for (int x = 0; x < w; x++) { int xx = x + offset_x; if (xx >= 0) { if (image->get(x, y)) { if (xx < atlas_w && yy < atlas_h) { XA_DEBUG_ASSERT(atlasBitImage->get(xx, yy) == false); atlasBitImage->set(xx, yy); } } } } } } } void bilinearExpand(const Chart *chart, BitImage *source, BitImage *dest, BitImage *destRotated, UniformGrid2 &boundaryEdgeGrid) const { boundaryEdgeGrid.reset(chart->vertices, chart->indices); if (chart->boundaryEdges) { const uint32_t edgeCount = chart->boundaryEdges->size(); for (uint32_t i = 0; i < edgeCount; i++) boundaryEdgeGrid.append((*chart->boundaryEdges)[i]); } else { for (uint32_t i = 0; i < chart->indices.length; i++) boundaryEdgeGrid.append(i); } const int xOffsets[] = { -1, 0, 1, -1, 1, -1, 0, 1 }; const int yOffsets[] = { -1, -1, -1, 0, 0, 1, 1, 1 }; for (uint32_t y = 0; y < source->height(); y++) { for (uint32_t x = 0; x < source->width(); x++) { // Copy pixels from source. if (source->get(x, y)) goto setPixel; // Empty pixel. If none of of the surrounding pixels are set, this pixel can't be sampled by bilinear interpolation. { uint32_t s = 0; for (; s < 8; s++) { const int sx = (int)x + xOffsets[s]; const int sy = (int)y + yOffsets[s]; if (sx < 0 || sy < 0 || sx >= (int)source->width() || sy >= (int)source->height()) continue; if (source->get((uint32_t)sx, (uint32_t)sy)) break; } if (s == 8) continue; } { // If a 2x2 square centered on the pixels centroid intersects the triangle, this pixel will be sampled by bilinear interpolation. // See "Precomputed Global Illumination in Frostbite (GDC 2018)" page 95 const Vector2 centroid((float)x + 0.5f, (float)y + 0.5f); const Vector2 squareVertices[4] = { Vector2(centroid.x - 1.0f, centroid.y - 1.0f), Vector2(centroid.x + 1.0f, centroid.y - 1.0f), Vector2(centroid.x + 1.0f, centroid.y + 1.0f), Vector2(centroid.x - 1.0f, centroid.y + 1.0f) }; for (uint32_t j = 0; j < 4; j++) { if (boundaryEdgeGrid.intersect(squareVertices[j], squareVertices[(j + 1) % 4], 0.0f)) goto setPixel; } } continue; setPixel: dest->set(x, y); if (destRotated) destRotated->set(y, x); } } } struct DrawTriangleCallbackArgs { BitImage *chartBitImage, *chartBitImageRotated; }; static bool drawTriangleCallback(void *param, int x, int y) { auto args = (DrawTriangleCallbackArgs *)param; args->chartBitImage->set(x, y); if (args->chartBitImageRotated) args->chartBitImageRotated->set(y, x); return true; } Array m_atlasImages; Array m_utilization; Array m_bitImages; Array m_charts; RadixSort m_radix; uint32_t m_width = 0; uint32_t m_height = 0; float m_texelsPerUnit = 0.0f; KISSRng m_rand; }; } // namespace pack } // namespace internal // Used to map triangulated polygons back to polygons. struct MeshPolygonMapping { internal::Array faceVertexCount; // Copied from MeshDecl::faceVertexCount. internal::Array triangleToPolygonMap; // Triangle index (mesh face index) to polygon index. internal::Array triangleToPolygonIndicesMap; // Triangle indices to polygon indices. }; struct Context { Atlas atlas; internal::Progress *addMeshProgress = nullptr; internal::TaskGroupHandle addMeshTaskGroup; internal::param::Atlas paramAtlas; ProgressFunc progressFunc = nullptr; void *progressUserData = nullptr; internal::TaskScheduler *taskScheduler; internal::Array meshes; internal::Array meshPolygonMappings; internal::Array uvMeshes; internal::Array uvMeshInstances; bool uvMeshChartsComputed = false; }; Atlas *Create() { Context *ctx = XA_NEW(internal::MemTag::Default, Context); memset(&ctx->atlas, 0, sizeof(Atlas)); ctx->taskScheduler = XA_NEW(internal::MemTag::Default, internal::TaskScheduler); return &ctx->atlas; } static void DestroyOutputMeshes(Context *ctx) { if (!ctx->atlas.meshes) return; for (int i = 0; i < (int)ctx->atlas.meshCount; i++) { Mesh &mesh = ctx->atlas.meshes[i]; if (mesh.chartArray) { for (uint32_t j = 0; j < mesh.chartCount; j++) { if (mesh.chartArray[j].faceArray) XA_FREE(mesh.chartArray[j].faceArray); } XA_FREE(mesh.chartArray); } if (mesh.vertexArray) XA_FREE(mesh.vertexArray); if (mesh.indexArray) XA_FREE(mesh.indexArray); } XA_FREE(ctx->atlas.meshes); ctx->atlas.meshes = nullptr; } void Destroy(Atlas *atlas) { XA_DEBUG_ASSERT(atlas); Context *ctx = (Context *)atlas; if (atlas->utilization) XA_FREE(atlas->utilization); if (atlas->image) XA_FREE(atlas->image); DestroyOutputMeshes(ctx); if (ctx->addMeshProgress) { ctx->addMeshProgress->cancel = true; AddMeshJoin(atlas); // frees addMeshProgress } ctx->taskScheduler->~TaskScheduler(); XA_FREE(ctx->taskScheduler); for (uint32_t i = 0; i < ctx->meshes.size(); i++) { internal::Mesh *mesh = ctx->meshes[i]; mesh->~Mesh(); XA_FREE(mesh); } for (uint32_t i = 0; i < ctx->meshPolygonMappings.size(); i++) { MeshPolygonMapping *mapping = ctx->meshPolygonMappings[i]; if (mapping) { mapping->~MeshPolygonMapping(); XA_FREE(mapping); } } for (uint32_t i = 0; i < ctx->uvMeshes.size(); i++) { internal::UvMesh *mesh = ctx->uvMeshes[i]; for (uint32_t j = 0; j < mesh->charts.size(); j++) { mesh->charts[j]->~UvMeshChart(); XA_FREE(mesh->charts[j]); } mesh->~UvMesh(); XA_FREE(mesh); } for (uint32_t i = 0; i < ctx->uvMeshInstances.size(); i++) { internal::UvMeshInstance *mesh = ctx->uvMeshInstances[i]; mesh->~UvMeshInstance(); XA_FREE(mesh); } ctx->~Context(); XA_FREE(ctx); #if XA_DEBUG_HEAP internal::ReportLeaks(); #endif } static void runAddMeshTask(void *groupUserData, void *taskUserData) { XA_PROFILE_START(addMeshThread) auto ctx = (Context *)groupUserData; auto mesh = (internal::Mesh *)taskUserData; internal::Progress *progress = ctx->addMeshProgress; if (progress->cancel) { XA_PROFILE_END(addMeshThread) return; } XA_PROFILE_START(addMeshCreateColocals) mesh->createColocals(); XA_PROFILE_END(addMeshCreateColocals) if (progress->cancel) { XA_PROFILE_END(addMeshThread) return; } progress->increment(1); XA_PROFILE_END(addMeshThread) } static internal::Vector3 DecodePosition(const MeshDecl &meshDecl, uint32_t index) { XA_DEBUG_ASSERT(meshDecl.vertexPositionData); XA_DEBUG_ASSERT(meshDecl.vertexPositionStride > 0); return *((const internal::Vector3 *)&((const uint8_t *)meshDecl.vertexPositionData)[meshDecl.vertexPositionStride * index]); } static internal::Vector3 DecodeNormal(const MeshDecl &meshDecl, uint32_t index) { XA_DEBUG_ASSERT(meshDecl.vertexNormalData); XA_DEBUG_ASSERT(meshDecl.vertexNormalStride > 0); return *((const internal::Vector3 *)&((const uint8_t *)meshDecl.vertexNormalData)[meshDecl.vertexNormalStride * index]); } static internal::Vector2 DecodeUv(const MeshDecl &meshDecl, uint32_t index) { XA_DEBUG_ASSERT(meshDecl.vertexUvData); XA_DEBUG_ASSERT(meshDecl.vertexUvStride > 0); return *((const internal::Vector2 *)&((const uint8_t *)meshDecl.vertexUvData)[meshDecl.vertexUvStride * index]); } static uint32_t DecodeIndex(IndexFormat format, const void *indexData, int32_t offset, uint32_t i) { XA_DEBUG_ASSERT(indexData); if (format == IndexFormat::UInt16) return uint16_t((int32_t)((const uint16_t *)indexData)[i] + offset); return uint32_t((int32_t)((const uint32_t *)indexData)[i] + offset); } AddMeshError AddMesh(Atlas *atlas, const MeshDecl &meshDecl, uint32_t meshCountHint) { XA_DEBUG_ASSERT(atlas); if (!atlas) { XA_PRINT_WARNING("AddMesh: atlas is null.\n"); return AddMeshError::Error; } Context *ctx = (Context *)atlas; if (!ctx->uvMeshes.isEmpty()) { XA_PRINT_WARNING("AddMesh: Meshes and UV meshes cannot be added to the same atlas.\n"); return AddMeshError::Error; } #if XA_PROFILE if (ctx->meshes.isEmpty()) internal::s_profile.addMeshRealStart = std::chrono::high_resolution_clock::now(); #endif // Don't know how many times AddMesh will be called, so progress needs to adjusted each time. if (!ctx->addMeshProgress) { ctx->addMeshProgress = XA_NEW_ARGS(internal::MemTag::Default, internal::Progress, ProgressCategory::AddMesh, ctx->progressFunc, ctx->progressUserData, 1); } else { ctx->addMeshProgress->setMaxValue(internal::max(ctx->meshes.size() + 1, meshCountHint)); } XA_PROFILE_START(addMeshCopyData) const bool hasIndices = meshDecl.indexCount > 0; const uint32_t indexCount = hasIndices ? meshDecl.indexCount : meshDecl.vertexCount; uint32_t faceCount = indexCount / 3; if (meshDecl.faceVertexCount) { faceCount = meshDecl.faceCount; XA_PRINT("Adding mesh %d: %u vertices, %u polygons\n", ctx->meshes.size(), meshDecl.vertexCount, faceCount); for (uint32_t f = 0; f < faceCount; f++) { if (meshDecl.faceVertexCount[f] < 3) return AddMeshError::InvalidFaceVertexCount; } } else { XA_PRINT("Adding mesh %d: %u vertices, %u triangles\n", ctx->meshes.size(), meshDecl.vertexCount, faceCount); // Expecting triangle faces unless otherwise specified. if ((indexCount % 3) != 0) return AddMeshError::InvalidIndexCount; } uint32_t meshFlags = internal::MeshFlags::HasIgnoredFaces; if (meshDecl.vertexNormalData) meshFlags |= internal::MeshFlags::HasNormals; if (meshDecl.faceMaterialData) meshFlags |= internal::MeshFlags::HasMaterials; internal::Mesh *mesh = XA_NEW_ARGS(internal::MemTag::Mesh, internal::Mesh, meshDecl.epsilon, meshDecl.vertexCount, indexCount / 3, meshFlags, ctx->meshes.size()); for (uint32_t i = 0; i < meshDecl.vertexCount; i++) { internal::Vector3 normal(0.0f); internal::Vector2 texcoord(0.0f); if (meshDecl.vertexNormalData) normal = DecodeNormal(meshDecl, i); if (meshDecl.vertexUvData) texcoord = DecodeUv(meshDecl, i); mesh->addVertex(DecodePosition(meshDecl, i), normal, texcoord); } MeshPolygonMapping *meshPolygonMapping = nullptr; if (meshDecl.faceVertexCount) { meshPolygonMapping = XA_NEW(internal::MemTag::Default, MeshPolygonMapping); // Copy MeshDecl::faceVertexCount so it can be used later when building output meshes. meshPolygonMapping->faceVertexCount.copyFrom(meshDecl.faceVertexCount, meshDecl.faceCount); // There should be at least as many triangles as polygons. meshPolygonMapping->triangleToPolygonMap.reserve(meshDecl.faceCount); meshPolygonMapping->triangleToPolygonIndicesMap.reserve(meshDecl.indexCount); } const uint32_t kMaxWarnings = 50; uint32_t warningCount = 0; internal::Array triIndices; internal::Triangulator triangulator; for (uint32_t face = 0; face < faceCount; face++) { // Decode face indices. const uint32_t faceVertexCount = meshDecl.faceVertexCount ? (uint32_t)meshDecl.faceVertexCount[face] : 3; uint32_t polygon[UINT8_MAX]; for (uint32_t i = 0; i < faceVertexCount; i++) { if (hasIndices) { polygon[i] = DecodeIndex(meshDecl.indexFormat, meshDecl.indexData, meshDecl.indexOffset, face * faceVertexCount + i); // Check if any index is out of range. if (polygon[i] >= meshDecl.vertexCount) { mesh->~Mesh(); XA_FREE(mesh); return AddMeshError::IndexOutOfRange; } } else { polygon[i] = face * faceVertexCount + i; } } // Ignore faces with degenerate or zero length edges. bool ignore = false; for (uint32_t i = 0; i < faceVertexCount; i++) { const uint32_t index1 = polygon[i]; const uint32_t index2 = polygon[(i + 1) % 3]; if (index1 == index2) { ignore = true; if (++warningCount <= kMaxWarnings) XA_PRINT(" Degenerate edge: index %d, index %d\n", index1, index2); break; } const internal::Vector3 &pos1 = mesh->position(index1); const internal::Vector3 &pos2 = mesh->position(index2); if (internal::length(pos2 - pos1) <= 0.0f) { ignore = true; if (++warningCount <= kMaxWarnings) XA_PRINT(" Zero length edge: index %d position (%g %g %g), index %d position (%g %g %g)\n", index1, pos1.x, pos1.y, pos1.z, index2, pos2.x, pos2.y, pos2.z); break; } } // Ignore faces with any nan vertex attributes. if (!ignore) { for (uint32_t i = 0; i < faceVertexCount; i++) { const internal::Vector3 &pos = mesh->position(polygon[i]); if (internal::isNan(pos.x) || internal::isNan(pos.y) || internal::isNan(pos.z)) { if (++warningCount <= kMaxWarnings) XA_PRINT(" NAN position in face: %d\n", face); ignore = true; break; } if (meshDecl.vertexNormalData) { const internal::Vector3 &normal = mesh->normal(polygon[i]); if (internal::isNan(normal.x) || internal::isNan(normal.y) || internal::isNan(normal.z)) { if (++warningCount <= kMaxWarnings) XA_PRINT(" NAN normal in face: %d\n", face); ignore = true; break; } } if (meshDecl.vertexUvData) { const internal::Vector2 &uv = mesh->texcoord(polygon[i]); if (internal::isNan(uv.x) || internal::isNan(uv.y)) { if (++warningCount <= kMaxWarnings) XA_PRINT(" NAN texture coordinate in face: %d\n", face); ignore = true; break; } } } } // Triangulate if necessary. triIndices.clear(); if (faceVertexCount == 3) { triIndices.push_back(polygon[0]); triIndices.push_back(polygon[1]); triIndices.push_back(polygon[2]); } else { triangulator.triangulatePolygon(mesh->positions(), internal::ConstArrayView(polygon, faceVertexCount), triIndices); } // Check for zero area faces. if (!ignore) { for (uint32_t i = 0; i < triIndices.size(); i += 3) { const internal::Vector3 &a = mesh->position(triIndices[i + 0]); const internal::Vector3 &b = mesh->position(triIndices[i + 1]); const internal::Vector3 &c = mesh->position(triIndices[i + 2]); const float area = internal::length(internal::cross(b - a, c - a)) * 0.5f; if (area <= internal::kAreaEpsilon) { ignore = true; if (++warningCount <= kMaxWarnings) XA_PRINT(" Zero area face: %d, area is %f\n", face, area); break; } } } // User face ignore. if (meshDecl.faceIgnoreData && meshDecl.faceIgnoreData[face]) ignore = true; // User material. uint32_t material = UINT32_MAX; if (meshDecl.faceMaterialData) material = meshDecl.faceMaterialData[face]; // Add the face(s). for (uint32_t i = 0; i < triIndices.size(); i += 3) { mesh->addFace(&triIndices[i], ignore, material); if (meshPolygonMapping) meshPolygonMapping->triangleToPolygonMap.push_back(face); } if (meshPolygonMapping) { for (uint32_t i = 0; i < triIndices.size(); i++) meshPolygonMapping->triangleToPolygonIndicesMap.push_back(triIndices[i]); } } if (warningCount > kMaxWarnings) XA_PRINT(" %u additional warnings truncated\n", warningCount - kMaxWarnings); XA_PROFILE_END(addMeshCopyData) ctx->meshes.push_back(mesh); ctx->meshPolygonMappings.push_back(meshPolygonMapping); ctx->paramAtlas.addMesh(mesh); if (ctx->addMeshTaskGroup.value == UINT32_MAX) ctx->addMeshTaskGroup = ctx->taskScheduler->createTaskGroup(ctx); internal::Task task; task.userData = mesh; task.func = runAddMeshTask; ctx->taskScheduler->run(ctx->addMeshTaskGroup, task); return AddMeshError::Success; } void AddMeshJoin(Atlas *atlas) { XA_DEBUG_ASSERT(atlas); if (!atlas) { XA_PRINT_WARNING("AddMeshJoin: atlas is null.\n"); return; } Context *ctx = (Context *)atlas; if (!ctx->uvMeshes.isEmpty()) { #if XA_PROFILE XA_PRINT("Added %u UV meshes\n", ctx->uvMeshes.size()); internal::s_profile.addMeshReal = uint64_t(std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - internal::s_profile.addMeshRealStart).count()); #endif XA_PROFILE_PRINT_AND_RESET(" Total: ", addMeshReal) XA_PROFILE_PRINT_AND_RESET(" Copy data: ", addMeshCopyData) #if XA_PROFILE_ALLOC XA_PROFILE_PRINT_AND_RESET(" Alloc: ", alloc) #endif XA_PRINT_MEM_USAGE } else { if (!ctx->addMeshProgress) return; ctx->taskScheduler->wait(&ctx->addMeshTaskGroup); ctx->addMeshProgress->~Progress(); XA_FREE(ctx->addMeshProgress); ctx->addMeshProgress = nullptr; #if XA_PROFILE XA_PRINT("Added %u meshes\n", ctx->meshes.size()); internal::s_profile.addMeshReal = uint64_t(std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - internal::s_profile.addMeshRealStart).count()); #endif XA_PROFILE_PRINT_AND_RESET(" Total (real): ", addMeshReal) XA_PROFILE_PRINT_AND_RESET(" Copy data: ", addMeshCopyData) XA_PROFILE_PRINT_AND_RESET(" Total (thread): ", addMeshThread) XA_PROFILE_PRINT_AND_RESET(" Create colocals: ", addMeshCreateColocals) #if XA_PROFILE_ALLOC XA_PROFILE_PRINT_AND_RESET(" Alloc: ", alloc) #endif XA_PRINT_MEM_USAGE #if XA_DEBUG_EXPORT_OBJ_FACE_GROUPS internal::param::s_faceGroupsCurrentVertex = 0; #endif } } AddMeshError AddUvMesh(Atlas *atlas, const UvMeshDecl &decl) { XA_DEBUG_ASSERT(atlas); if (!atlas) { XA_PRINT_WARNING("AddUvMesh: atlas is null.\n"); return AddMeshError::Error; } Context *ctx = (Context *)atlas; if (!ctx->meshes.isEmpty()) { XA_PRINT_WARNING("AddUvMesh: Meshes and UV meshes cannot be added to the same atlas.\n"); return AddMeshError::Error; } #if XA_PROFILE if (ctx->uvMeshInstances.isEmpty()) internal::s_profile.addMeshRealStart = std::chrono::high_resolution_clock::now(); #endif XA_PROFILE_START(addMeshCopyData) const bool hasIndices = decl.indexCount > 0; const uint32_t indexCount = hasIndices ? decl.indexCount : decl.vertexCount; XA_PRINT("Adding UV mesh %d: %u vertices, %u triangles\n", ctx->uvMeshes.size(), decl.vertexCount, indexCount / 3); // Expecting triangle faces. if ((indexCount % 3) != 0) return AddMeshError::InvalidIndexCount; if (hasIndices) { // Check if any index is out of range. for (uint32_t i = 0; i < indexCount; i++) { const uint32_t index = DecodeIndex(decl.indexFormat, decl.indexData, decl.indexOffset, i); if (index >= decl.vertexCount) return AddMeshError::IndexOutOfRange; } } // Create a mesh instance. internal::UvMeshInstance *meshInstance = XA_NEW(internal::MemTag::Default, internal::UvMeshInstance); meshInstance->mesh = nullptr; ctx->uvMeshInstances.push_back(meshInstance); // See if this is an instance of an already existing mesh. internal::UvMesh *mesh = nullptr; for (uint32_t m = 0; m < ctx->uvMeshes.size(); m++) { if (memcmp(&ctx->uvMeshes[m]->decl, &decl, sizeof(UvMeshDecl)) == 0) { mesh = ctx->uvMeshes[m]; XA_PRINT(" instance of a previous UV mesh\n"); break; } } if (!mesh) { // Copy geometry to mesh. mesh = XA_NEW(internal::MemTag::Default, internal::UvMesh); ctx->uvMeshes.push_back(mesh); mesh->decl = decl; if (decl.faceMaterialData) { mesh->faceMaterials.resize(decl.indexCount / 3); memcpy(mesh->faceMaterials.data(), decl.faceMaterialData, mesh->faceMaterials.size() * sizeof(uint32_t)); } mesh->indices.resize(decl.indexCount); for (uint32_t i = 0; i < indexCount; i++) mesh->indices[i] = hasIndices ? DecodeIndex(decl.indexFormat, decl.indexData, decl.indexOffset, i) : i; mesh->texcoords.resize(decl.vertexCount); for (uint32_t i = 0; i < decl.vertexCount; i++) mesh->texcoords[i] = *((const internal::Vector2 *)&((const uint8_t *)decl.vertexUvData)[decl.vertexStride * i]); // Validate. mesh->faceIgnore.resize(decl.indexCount / 3); mesh->faceIgnore.zeroOutMemory(); const uint32_t kMaxWarnings = 50; uint32_t warningCount = 0; for (uint32_t f = 0; f < indexCount / 3; f++) { bool ignore = false; uint32_t tri[3]; for (uint32_t i = 0; i < 3; i++) tri[i] = mesh->indices[f * 3 + i]; // Check for nan UVs. for (uint32_t i = 0; i < 3; i++) { const uint32_t vertex = tri[i]; if (internal::isNan(mesh->texcoords[vertex].x) || internal::isNan(mesh->texcoords[vertex].y)) { ignore = true; if (++warningCount <= kMaxWarnings) XA_PRINT(" NAN texture coordinate in vertex %u\n", vertex); break; } } // Check for zero area faces. if (!ignore) { const internal::Vector2 &v1 = mesh->texcoords[tri[0]]; const internal::Vector2 &v2 = mesh->texcoords[tri[1]]; const internal::Vector2 &v3 = mesh->texcoords[tri[2]]; const float area = fabsf(((v2.x - v1.x) * (v3.y - v1.y) - (v3.x - v1.x) * (v2.y - v1.y)) * 0.5f); if (area <= internal::kAreaEpsilon) { ignore = true; if (++warningCount <= kMaxWarnings) XA_PRINT(" Zero area face: %d, indices (%d %d %d), area is %f\n", f, tri[0], tri[1], tri[2], area); } } if (ignore) mesh->faceIgnore.set(f); } if (warningCount > kMaxWarnings) XA_PRINT(" %u additional warnings truncated\n", warningCount - kMaxWarnings); } meshInstance->mesh = mesh; XA_PROFILE_END(addMeshCopyData) return AddMeshError::Success; } void ComputeCharts(Atlas *atlas, ChartOptions options) { if (!atlas) { XA_PRINT_WARNING("ComputeCharts: atlas is null.\n"); return; } Context *ctx = (Context *)atlas; AddMeshJoin(atlas); if (ctx->meshes.isEmpty() && ctx->uvMeshInstances.isEmpty()) { XA_PRINT_WARNING("ComputeCharts: No meshes. Call AddMesh or AddUvMesh first.\n"); return; } // Reset atlas state. This function may be called multiple times, or again after PackCharts. if (atlas->utilization) XA_FREE(atlas->utilization); if (atlas->image) XA_FREE(atlas->image); DestroyOutputMeshes(ctx); memset(&ctx->atlas, 0, sizeof(Atlas)); XA_PRINT("Computing charts\n"); if (!ctx->meshes.isEmpty()) { if (!ctx->paramAtlas.computeCharts(ctx->taskScheduler, options, ctx->progressFunc, ctx->progressUserData)) { XA_PRINT(" Cancelled by user\n"); return; } uint32_t chartsWithTJunctionsCount = 0, tJunctionCount = 0, orthoChartsCount = 0, planarChartsCount = 0, lscmChartsCount = 0, piecewiseChartsCount = 0, originalUvChartsCount = 0; uint32_t chartCount = 0; const uint32_t meshCount = ctx->meshes.size(); for (uint32_t i = 0; i < meshCount; i++) { for (uint32_t j = 0; j < ctx->paramAtlas.chartGroupCount(i); j++) { const internal::param::ChartGroup *chartGroup = ctx->paramAtlas.chartGroupAt(i, j); for (uint32_t k = 0; k < chartGroup->chartCount(); k++) { const internal::param::Chart *chart = chartGroup->chartAt(k); tJunctionCount += chart->tjunctionCount(); if (chart->tjunctionCount() > 0) chartsWithTJunctionsCount++; if (chart->type() == ChartType::Planar) planarChartsCount++; else if (chart->type() == ChartType::Ortho) orthoChartsCount++; else if (chart->type() == ChartType::LSCM) lscmChartsCount++; else if (chart->type() == ChartType::Piecewise) piecewiseChartsCount++; if (chart->generatorType() == internal::segment::ChartGeneratorType::OriginalUv) originalUvChartsCount++; } chartCount += chartGroup->chartCount(); } } if (tJunctionCount > 0) XA_PRINT(" %u t-junctions found in %u charts\n", tJunctionCount, chartsWithTJunctionsCount); XA_PRINT(" %u charts\n", chartCount); XA_PRINT(" %u planar, %u ortho, %u LSCM, %u piecewise\n", planarChartsCount, orthoChartsCount, lscmChartsCount, piecewiseChartsCount); if (originalUvChartsCount > 0) XA_PRINT(" %u with original UVs\n", originalUvChartsCount); uint32_t chartIndex = 0, invalidParamCount = 0; for (uint32_t i = 0; i < meshCount; i++) { for (uint32_t j = 0; j < ctx->paramAtlas.chartGroupCount(i); j++) { const internal::param::ChartGroup *chartGroup = ctx->paramAtlas.chartGroupAt(i, j); for (uint32_t k = 0; k < chartGroup->chartCount(); k++) { internal::param::Chart *chart = chartGroup->chartAt(k); const internal::param::Quality &quality = chart->quality(); #if XA_DEBUG_EXPORT_OBJ_CHARTS_AFTER_PARAMETERIZATION { char filename[256]; XA_SPRINTF(filename, sizeof(filename), "debug_chart_%03u_after_parameterization.obj", chartIndex); chart->unifiedMesh()->writeObjFile(filename); } #endif const char *type = "LSCM"; if (chart->type() == ChartType::Planar) type = "planar"; else if (chart->type() == ChartType::Ortho) type = "ortho"; else if (chart->type() == ChartType::Piecewise) type = "piecewise"; if (chart->isInvalid()) { if (quality.boundaryIntersection) { XA_PRINT_WARNING(" Chart %u (mesh %u, group %u, id %u) (%s): invalid parameterization, self-intersecting boundary.\n", chartIndex, i, j, k, type); } if (quality.flippedTriangleCount > 0) { XA_PRINT_WARNING(" Chart %u (mesh %u, group %u, id %u) (%s): invalid parameterization, %u / %u flipped triangles.\n", chartIndex, i, j, k, type, quality.flippedTriangleCount, quality.totalTriangleCount); } if (quality.zeroAreaTriangleCount > 0) { XA_PRINT_WARNING(" Chart %u (mesh %u, group %u, id %u) (%s): invalid parameterization, %u / %u zero area triangles.\n", chartIndex, i, j, k, type, quality.zeroAreaTriangleCount, quality.totalTriangleCount); } invalidParamCount++; #if XA_DEBUG_EXPORT_OBJ_INVALID_PARAMETERIZATION char filename[256]; XA_SPRINTF(filename, sizeof(filename), "debug_chart_%03u_invalid_parameterization.obj", chartIndex); const internal::Mesh *mesh = chart->unifiedMesh(); FILE *file; XA_FOPEN(file, filename, "w"); if (file) { mesh->writeObjVertices(file); fprintf(file, "s off\n"); fprintf(file, "o object\n"); for (uint32_t f = 0; f < mesh->faceCount(); f++) mesh->writeObjFace(file, f); if (!chart->paramFlippedFaces().isEmpty()) { fprintf(file, "o flipped_faces\n"); for (uint32_t f = 0; f < chart->paramFlippedFaces().size(); f++) mesh->writeObjFace(file, chart->paramFlippedFaces()[f]); } mesh->writeObjBoundaryEges(file); fclose(file); } #endif } chartIndex++; } } } if (invalidParamCount > 0) XA_PRINT_WARNING(" %u charts with invalid parameterizations\n", invalidParamCount); #if XA_PROFILE XA_PRINT(" Chart groups\n"); uint32_t chartGroupCount = 0; for (uint32_t i = 0; i < meshCount; i++) { #if 0 XA_PRINT(" Mesh %u: %u chart groups\n", i, ctx->paramAtlas.chartGroupCount(i)); #endif chartGroupCount += ctx->paramAtlas.chartGroupCount(i); } XA_PRINT(" %u total\n", chartGroupCount); #endif XA_PROFILE_PRINT_AND_RESET(" Compute charts total (real): ", computeChartsReal) XA_PROFILE_PRINT_AND_RESET(" Compute charts total (thread): ", computeChartsThread) XA_PROFILE_PRINT_AND_RESET(" Create face groups: ", createFaceGroups) XA_PROFILE_PRINT_AND_RESET(" Extract invalid mesh geometry: ", extractInvalidMeshGeometry) XA_PROFILE_PRINT_AND_RESET(" Chart group compute charts (real): ", chartGroupComputeChartsReal) XA_PROFILE_PRINT_AND_RESET(" Chart group compute charts (thread): ", chartGroupComputeChartsThread) XA_PROFILE_PRINT_AND_RESET(" Create chart group mesh: ", createChartGroupMesh) XA_PROFILE_PRINT_AND_RESET(" Create colocals: ", createChartGroupMeshColocals) XA_PROFILE_PRINT_AND_RESET(" Create boundaries: ", createChartGroupMeshBoundaries) XA_PROFILE_PRINT_AND_RESET(" Build atlas: ", buildAtlas) XA_PROFILE_PRINT_AND_RESET(" Init: ", buildAtlasInit) XA_PROFILE_PRINT_AND_RESET(" Planar charts: ", planarCharts) if (options.useInputMeshUvs) { XA_PROFILE_PRINT_AND_RESET(" Original UV charts: ", originalUvCharts) } XA_PROFILE_PRINT_AND_RESET(" Clustered charts: ", clusteredCharts) XA_PROFILE_PRINT_AND_RESET(" Place seeds: ", clusteredChartsPlaceSeeds) XA_PROFILE_PRINT_AND_RESET(" Boundary intersection: ", clusteredChartsPlaceSeedsBoundaryIntersection) XA_PROFILE_PRINT_AND_RESET(" Relocate seeds: ", clusteredChartsRelocateSeeds) XA_PROFILE_PRINT_AND_RESET(" Reset: ", clusteredChartsReset) XA_PROFILE_PRINT_AND_RESET(" Grow: ", clusteredChartsGrow) XA_PROFILE_PRINT_AND_RESET(" Boundary intersection: ", clusteredChartsGrowBoundaryIntersection) XA_PROFILE_PRINT_AND_RESET(" Merge: ", clusteredChartsMerge) XA_PROFILE_PRINT_AND_RESET(" Fill holes: ", clusteredChartsFillHoles) XA_PROFILE_PRINT_AND_RESET(" Copy chart faces: ", copyChartFaces) XA_PROFILE_PRINT_AND_RESET(" Create chart mesh and parameterize (real): ", createChartMeshAndParameterizeReal) XA_PROFILE_PRINT_AND_RESET(" Create chart mesh and parameterize (thread): ", createChartMeshAndParameterizeThread) XA_PROFILE_PRINT_AND_RESET(" Create chart mesh: ", createChartMesh) XA_PROFILE_PRINT_AND_RESET(" Parameterize charts: ", parameterizeCharts) XA_PROFILE_PRINT_AND_RESET(" Orthogonal: ", parameterizeChartsOrthogonal) XA_PROFILE_PRINT_AND_RESET(" LSCM: ", parameterizeChartsLSCM) XA_PROFILE_PRINT_AND_RESET(" Recompute: ", parameterizeChartsRecompute) XA_PROFILE_PRINT_AND_RESET(" Piecewise: ", parameterizeChartsPiecewise) XA_PROFILE_PRINT_AND_RESET(" Boundary intersection: ", parameterizeChartsPiecewiseBoundaryIntersection) XA_PROFILE_PRINT_AND_RESET(" Evaluate quality: ", parameterizeChartsEvaluateQuality) #if XA_PROFILE_ALLOC XA_PROFILE_PRINT_AND_RESET(" Alloc: ", alloc) #endif XA_PRINT_MEM_USAGE } else { XA_PROFILE_START(computeChartsReal) if (!internal::segment::computeUvMeshCharts(ctx->taskScheduler, ctx->uvMeshes, ctx->progressFunc, ctx->progressUserData)) { XA_PRINT(" Cancelled by user\n"); return; } XA_PROFILE_END(computeChartsReal) ctx->uvMeshChartsComputed = true; // Count charts. uint32_t chartCount = 0; const uint32_t meshCount = ctx->uvMeshes.size(); for (uint32_t i = 0; i < meshCount; i++) chartCount += ctx->uvMeshes[i]->charts.size(); XA_PRINT(" %u charts\n", chartCount); XA_PROFILE_PRINT_AND_RESET(" Total (real): ", computeChartsReal) XA_PROFILE_PRINT_AND_RESET(" Total (thread): ", computeChartsThread) } #if XA_PROFILE_ALLOC XA_PROFILE_PRINT_AND_RESET(" Alloc: ", alloc) #endif XA_PRINT_MEM_USAGE } void PackCharts(Atlas *atlas, PackOptions packOptions) { // Validate arguments and context state. if (!atlas) { XA_PRINT_WARNING("PackCharts: atlas is null.\n"); return; } Context *ctx = (Context *)atlas; if (ctx->meshes.isEmpty() && ctx->uvMeshInstances.isEmpty()) { XA_PRINT_WARNING("PackCharts: No meshes. Call AddMesh or AddUvMesh first.\n"); return; } if (ctx->uvMeshInstances.isEmpty()) { if (!ctx->paramAtlas.chartsComputed()) { XA_PRINT_WARNING("PackCharts: ComputeCharts must be called first.\n"); return; } } else if (!ctx->uvMeshChartsComputed) { XA_PRINT_WARNING("PackCharts: ComputeCharts must be called first.\n"); return; } if (packOptions.texelsPerUnit < 0.0f) { XA_PRINT_WARNING("PackCharts: PackOptions::texelsPerUnit is negative.\n"); packOptions.texelsPerUnit = 0.0f; } // Cleanup atlas. DestroyOutputMeshes(ctx); if (atlas->utilization) { XA_FREE(atlas->utilization); atlas->utilization = nullptr; } if (atlas->image) { XA_FREE(atlas->image); atlas->image = nullptr; } atlas->meshCount = 0; // Pack charts. XA_PROFILE_START(packChartsAddCharts) internal::pack::Atlas packAtlas; if (!ctx->uvMeshInstances.isEmpty()) { for (uint32_t i = 0; i < ctx->uvMeshInstances.size(); i++) packAtlas.addUvMeshCharts(ctx->uvMeshInstances[i]); } else packAtlas.addCharts(ctx->taskScheduler, &ctx->paramAtlas); XA_PROFILE_END(packChartsAddCharts) XA_PROFILE_START(packCharts) if (!packAtlas.packCharts(packOptions, ctx->progressFunc, ctx->progressUserData)) return; XA_PROFILE_END(packCharts) // Populate atlas object with pack results. atlas->atlasCount = packAtlas.getNumAtlases(); atlas->chartCount = packAtlas.getChartCount(); atlas->width = packAtlas.getWidth(); atlas->height = packAtlas.getHeight(); atlas->texelsPerUnit = packAtlas.getTexelsPerUnit(); if (atlas->atlasCount > 0) { atlas->utilization = XA_ALLOC_ARRAY(internal::MemTag::Default, float, atlas->atlasCount); for (uint32_t i = 0; i < atlas->atlasCount; i++) atlas->utilization[i] = packAtlas.getUtilization(i); } if (packOptions.createImage) { atlas->image = XA_ALLOC_ARRAY(internal::MemTag::Default, uint32_t, atlas->atlasCount * atlas->width * atlas->height); for (uint32_t i = 0; i < atlas->atlasCount; i++) packAtlas.getImages()[i]->copyTo(&atlas->image[atlas->width * atlas->height * i], atlas->width, atlas->height, packOptions.padding); } XA_PROFILE_PRINT_AND_RESET(" Total: ", packCharts) XA_PROFILE_PRINT_AND_RESET(" Add charts (real): ", packChartsAddCharts) XA_PROFILE_PRINT_AND_RESET(" Add charts (thread): ", packChartsAddChartsThread) XA_PROFILE_PRINT_AND_RESET(" Restore texcoords: ", packChartsAddChartsRestoreTexcoords) XA_PROFILE_PRINT_AND_RESET(" Rasterize: ", packChartsRasterize) XA_PROFILE_PRINT_AND_RESET(" Dilate (padding): ", packChartsDilate) XA_PROFILE_PRINT_AND_RESET(" Find location: ", packChartsFindLocation) XA_PROFILE_PRINT_AND_RESET(" Blit: ", packChartsBlit) #if XA_PROFILE_ALLOC XA_PROFILE_PRINT_AND_RESET(" Alloc: ", alloc) #endif XA_PRINT_MEM_USAGE XA_PRINT("Building output meshes\n"); XA_PROFILE_START(buildOutputMeshes) int progress = 0; if (ctx->progressFunc) { if (!ctx->progressFunc(ProgressCategory::BuildOutputMeshes, 0, ctx->progressUserData)) return; } if (ctx->uvMeshInstances.isEmpty()) atlas->meshCount = ctx->meshes.size(); else atlas->meshCount = ctx->uvMeshInstances.size(); atlas->meshes = XA_ALLOC_ARRAY(internal::MemTag::Default, Mesh, atlas->meshCount); memset(atlas->meshes, 0, sizeof(Mesh) * atlas->meshCount); if (ctx->uvMeshInstances.isEmpty()) { uint32_t chartIndex = 0; for (uint32_t i = 0; i < atlas->meshCount; i++) { Mesh &outputMesh = atlas->meshes[i]; MeshPolygonMapping *meshPolygonMapping = ctx->meshPolygonMappings[i]; // One polygon can have many triangles. Don't want to process the same polygon more than once when counting indices, building chart faces etc. internal::BitArray polygonTouched; if (meshPolygonMapping) { polygonTouched.resize(meshPolygonMapping->faceVertexCount.size()); polygonTouched.zeroOutMemory(); } // Count and alloc arrays. const internal::InvalidMeshGeometry &invalid = ctx->paramAtlas.invalidMeshGeometry(i); outputMesh.vertexCount += invalid.vertices().length; outputMesh.indexCount += invalid.faces().length * 3; for (uint32_t cg = 0; cg < ctx->paramAtlas.chartGroupCount(i); cg++) { const internal::param::ChartGroup *chartGroup = ctx->paramAtlas.chartGroupAt(i, cg); for (uint32_t c = 0; c < chartGroup->chartCount(); c++) { const internal::param::Chart *chart = chartGroup->chartAt(c); outputMesh.vertexCount += chart->originalVertexCount(); const uint32_t faceCount = chart->unifiedMesh()->faceCount(); if (meshPolygonMapping) { // Map triangles back to polygons and count the polygon vertices. for (uint32_t f = 0; f < faceCount; f++) { const uint32_t polygon = meshPolygonMapping->triangleToPolygonMap[chart->mapFaceToSourceFace(f)]; if (!polygonTouched.get(polygon)) { polygonTouched.set(polygon); outputMesh.indexCount += meshPolygonMapping->faceVertexCount[polygon]; } } } else { outputMesh.indexCount += faceCount * 3; } outputMesh.chartCount++; } } outputMesh.vertexArray = XA_ALLOC_ARRAY(internal::MemTag::Default, Vertex, outputMesh.vertexCount); outputMesh.indexArray = XA_ALLOC_ARRAY(internal::MemTag::Default, uint32_t, outputMesh.indexCount); outputMesh.chartArray = XA_ALLOC_ARRAY(internal::MemTag::Default, Chart, outputMesh.chartCount); XA_PRINT(" Mesh %u: %u vertices, %u triangles, %u charts\n", i, outputMesh.vertexCount, outputMesh.indexCount / 3, outputMesh.chartCount); // Copy mesh data. uint32_t firstVertex = 0; { const internal::InvalidMeshGeometry &mesh = ctx->paramAtlas.invalidMeshGeometry(i); internal::ConstArrayView faces = mesh.faces(); internal::ConstArrayView indices = mesh.indices(); internal::ConstArrayView vertices = mesh.vertices(); // Vertices. for (uint32_t v = 0; v < vertices.length; v++) { Vertex &vertex = outputMesh.vertexArray[v]; vertex.atlasIndex = -1; vertex.chartIndex = -1; vertex.uv[0] = vertex.uv[1] = 0.0f; vertex.xref = vertices[v]; } // Indices. for (uint32_t f = 0; f < faces.length; f++) { const uint32_t indexOffset = faces[f] * 3; for (uint32_t j = 0; j < 3; j++) outputMesh.indexArray[indexOffset + j] = indices[f * 3 + j]; } firstVertex = vertices.length; } uint32_t meshChartIndex = 0; for (uint32_t cg = 0; cg < ctx->paramAtlas.chartGroupCount(i); cg++) { const internal::param::ChartGroup *chartGroup = ctx->paramAtlas.chartGroupAt(i, cg); for (uint32_t c = 0; c < chartGroup->chartCount(); c++) { const internal::param::Chart *chart = chartGroup->chartAt(c); const internal::Mesh *unifiedMesh = chart->unifiedMesh(); const uint32_t faceCount = unifiedMesh->faceCount(); #if XA_CHECK_PARAM_WINDING uint32_t flippedCount = 0; for (uint32_t f = 0; f < faceCount; f++) { const float area = mesh->computeFaceParametricArea(f); if (area < 0.0f) flippedCount++; } const char *type = "LSCM"; if (chart->type() == ChartType::Planar) type = "planar"; else if (chart->type() == ChartType::Ortho) type = "ortho"; else if (chart->type() == ChartType::Piecewise) type = "piecewise"; if (flippedCount > 0) { if (flippedCount == faceCount) { XA_PRINT_WARNING("chart %u (%s): all face flipped\n", chartIndex, type); } else { XA_PRINT_WARNING("chart %u (%s): %u / %u faces flipped\n", chartIndex, type, flippedCount, faceCount); } } #endif // Vertices. for (uint32_t v = 0; v < chart->originalVertexCount(); v++) { Vertex &vertex = outputMesh.vertexArray[firstVertex + v]; vertex.atlasIndex = packAtlas.getChart(chartIndex)->atlasIndex; XA_DEBUG_ASSERT(vertex.atlasIndex >= 0); vertex.chartIndex = (int32_t)chartIndex; const internal::Vector2 &uv = unifiedMesh->texcoord(chart->originalVertexToUnifiedVertex(v)); vertex.uv[0] = internal::max(0.0f, uv.x); vertex.uv[1] = internal::max(0.0f, uv.y); vertex.xref = chart->mapChartVertexToSourceVertex(v); } // Indices. for (uint32_t f = 0; f < faceCount; f++) { const uint32_t indexOffset = chart->mapFaceToSourceFace(f) * 3; for (uint32_t j = 0; j < 3; j++) { uint32_t outIndex = indexOffset + j; if (meshPolygonMapping) outIndex = meshPolygonMapping->triangleToPolygonIndicesMap[outIndex]; outputMesh.indexArray[outIndex] = firstVertex + chart->originalVertices()[f * 3 + j]; } } // Charts. Chart *outputChart = &outputMesh.chartArray[meshChartIndex]; const int32_t atlasIndex = packAtlas.getChart(chartIndex)->atlasIndex; XA_DEBUG_ASSERT(atlasIndex >= 0); outputChart->atlasIndex = (uint32_t)atlasIndex; outputChart->type = chart->isInvalid() ? ChartType::Invalid : chart->type(); if (meshPolygonMapping) { // Count polygons. polygonTouched.zeroOutMemory(); outputChart->faceCount = 0; for (uint32_t f = 0; f < faceCount; f++) { const uint32_t polygon = meshPolygonMapping->triangleToPolygonMap[chart->mapFaceToSourceFace(f)]; if (!polygonTouched.get(polygon)) { polygonTouched.set(polygon); outputChart->faceCount++; } } // Write polygons. outputChart->faceArray = XA_ALLOC_ARRAY(internal::MemTag::Default, uint32_t, outputChart->faceCount); polygonTouched.zeroOutMemory(); uint32_t of = 0; for (uint32_t f = 0; f < faceCount; f++) { const uint32_t polygon = meshPolygonMapping->triangleToPolygonMap[chart->mapFaceToSourceFace(f)]; if (!polygonTouched.get(polygon)) { polygonTouched.set(polygon); outputChart->faceArray[of++] = polygon; } } } else { outputChart->faceCount = faceCount; outputChart->faceArray = XA_ALLOC_ARRAY(internal::MemTag::Default, uint32_t, outputChart->faceCount); for (uint32_t f = 0; f < outputChart->faceCount; f++) outputChart->faceArray[f] = chart->mapFaceToSourceFace(f); } outputChart->material = 0; meshChartIndex++; chartIndex++; firstVertex += chart->originalVertexCount(); } } XA_DEBUG_ASSERT(outputMesh.vertexCount == firstVertex); XA_DEBUG_ASSERT(outputMesh.chartCount == meshChartIndex); if (ctx->progressFunc) { const int newProgress = int((i + 1) / (float)atlas->meshCount * 100.0f); if (newProgress != progress) { progress = newProgress; if (!ctx->progressFunc(ProgressCategory::BuildOutputMeshes, progress, ctx->progressUserData)) return; } } } } else { uint32_t chartIndex = 0; for (uint32_t m = 0; m < ctx->uvMeshInstances.size(); m++) { Mesh &outputMesh = atlas->meshes[m]; const internal::UvMeshInstance *mesh = ctx->uvMeshInstances[m]; // Alloc arrays. outputMesh.vertexCount = mesh->texcoords.size(); outputMesh.indexCount = mesh->mesh->indices.size(); outputMesh.chartCount = mesh->mesh->charts.size(); outputMesh.vertexArray = XA_ALLOC_ARRAY(internal::MemTag::Default, Vertex, outputMesh.vertexCount); outputMesh.indexArray = XA_ALLOC_ARRAY(internal::MemTag::Default, uint32_t, outputMesh.indexCount); outputMesh.chartArray = XA_ALLOC_ARRAY(internal::MemTag::Default, Chart, outputMesh.chartCount); XA_PRINT(" UV mesh %u: %u vertices, %u triangles, %u charts\n", m, outputMesh.vertexCount, outputMesh.indexCount / 3, outputMesh.chartCount); // Copy mesh data. // Vertices. for (uint32_t v = 0; v < mesh->texcoords.size(); v++) { Vertex &vertex = outputMesh.vertexArray[v]; vertex.uv[0] = mesh->texcoords[v].x; vertex.uv[1] = mesh->texcoords[v].y; vertex.xref = v; const uint32_t meshChartIndex = mesh->mesh->vertexToChartMap[v]; if (meshChartIndex == UINT32_MAX) { // Vertex doesn't exist in any chart. vertex.atlasIndex = -1; vertex.chartIndex = -1; } else { const internal::pack::Chart *chart = packAtlas.getChart(chartIndex + meshChartIndex); vertex.atlasIndex = chart->atlasIndex; vertex.chartIndex = (int32_t)chartIndex + meshChartIndex; } } // Indices. memcpy(outputMesh.indexArray, mesh->mesh->indices.data(), mesh->mesh->indices.size() * sizeof(uint32_t)); // Charts. for (uint32_t c = 0; c < mesh->mesh->charts.size(); c++) { Chart *outputChart = &outputMesh.chartArray[c]; const internal::pack::Chart *chart = packAtlas.getChart(chartIndex); XA_DEBUG_ASSERT(chart->atlasIndex >= 0); outputChart->atlasIndex = (uint32_t)chart->atlasIndex; outputChart->faceCount = chart->faces.size(); outputChart->faceArray = XA_ALLOC_ARRAY(internal::MemTag::Default, uint32_t, outputChart->faceCount); outputChart->material = chart->material; for (uint32_t f = 0; f < outputChart->faceCount; f++) outputChart->faceArray[f] = chart->faces[f]; chartIndex++; } if (ctx->progressFunc) { const int newProgress = int((m + 1) / (float)atlas->meshCount * 100.0f); if (newProgress != progress) { progress = newProgress; if (!ctx->progressFunc(ProgressCategory::BuildOutputMeshes, progress, ctx->progressUserData)) return; } } } } if (ctx->progressFunc && progress != 100) ctx->progressFunc(ProgressCategory::BuildOutputMeshes, 100, ctx->progressUserData); XA_PROFILE_END(buildOutputMeshes) XA_PROFILE_PRINT_AND_RESET(" Total: ", buildOutputMeshes) #if XA_PROFILE_ALLOC XA_PROFILE_PRINT_AND_RESET(" Alloc: ", alloc) #endif XA_PRINT_MEM_USAGE } void Generate(Atlas *atlas, ChartOptions chartOptions, PackOptions packOptions) { if (!atlas) { XA_PRINT_WARNING("Generate: atlas is null.\n"); return; } Context *ctx = (Context *)atlas; if (ctx->meshes.isEmpty() && ctx->uvMeshInstances.isEmpty()) { XA_PRINT_WARNING("Generate: No meshes. Call AddMesh or AddUvMesh first.\n"); return; } ComputeCharts(atlas, chartOptions); PackCharts(atlas, packOptions); } void SetProgressCallback(Atlas *atlas, ProgressFunc progressFunc, void *progressUserData) { if (!atlas) { XA_PRINT_WARNING("SetProgressCallback: atlas is null.\n"); return; } Context *ctx = (Context *)atlas; ctx->progressFunc = progressFunc; ctx->progressUserData = progressUserData; } void SetAlloc(ReallocFunc reallocFunc, FreeFunc freeFunc) { internal::s_realloc = reallocFunc; internal::s_free = freeFunc; } void SetPrint(PrintFunc print, bool verbose) { internal::s_print = print; internal::s_printVerbose = verbose; } const char *StringForEnum(AddMeshError error) { if (error == AddMeshError::Error) return "Unspecified error"; if (error == AddMeshError::IndexOutOfRange) return "Index out of range"; if (error == AddMeshError::InvalidFaceVertexCount) return "Invalid face vertex count"; if (error == AddMeshError::InvalidIndexCount) return "Invalid index count"; return "Success"; } const char *StringForEnum(ProgressCategory category) { if (category == ProgressCategory::AddMesh) return "Adding mesh(es)"; if (category == ProgressCategory::ComputeCharts) return "Computing charts"; if (category == ProgressCategory::PackCharts) return "Packing charts"; if (category == ProgressCategory::BuildOutputMeshes) return "Building output meshes"; return ""; } } // namespace xatlas #if XATLAS_C_API static_assert(sizeof(xatlas::Chart) == sizeof(xatlasChart), "xatlasChart size mismatch"); static_assert(sizeof(xatlas::Vertex) == sizeof(xatlasVertex), "xatlasVertex size mismatch"); static_assert(sizeof(xatlas::Mesh) == sizeof(xatlasMesh), "xatlasMesh size mismatch"); static_assert(sizeof(xatlas::Atlas) == sizeof(xatlasAtlas), "xatlasAtlas size mismatch"); static_assert(sizeof(xatlas::MeshDecl) == sizeof(xatlasMeshDecl), "xatlasMeshDecl size mismatch"); static_assert(sizeof(xatlas::UvMeshDecl) == sizeof(xatlasUvMeshDecl), "xatlasUvMeshDecl size mismatch"); static_assert(sizeof(xatlas::ChartOptions) == sizeof(xatlasChartOptions), "xatlasChartOptions size mismatch"); static_assert(sizeof(xatlas::PackOptions) == sizeof(xatlasPackOptions), "xatlasPackOptions size mismatch"); #ifdef __cplusplus extern "C" { #endif xatlasAtlas *xatlasCreate() { return (xatlasAtlas *)xatlas::Create(); } void xatlasDestroy(xatlasAtlas *atlas) { xatlas::Destroy((xatlas::Atlas *)atlas); } xatlasAddMeshError xatlasAddMesh(xatlasAtlas *atlas, const xatlasMeshDecl *meshDecl, uint32_t meshCountHint) { return (xatlasAddMeshError)xatlas::AddMesh((xatlas::Atlas *)atlas, *(const xatlas::MeshDecl *)meshDecl, meshCountHint); } void xatlasAddMeshJoin(xatlasAtlas *atlas) { xatlas::AddMeshJoin((xatlas::Atlas *)atlas); } xatlasAddMeshError xatlasAddUvMesh(xatlasAtlas *atlas, const xatlasUvMeshDecl *decl) { return (xatlasAddMeshError)xatlas::AddUvMesh((xatlas::Atlas *)atlas, *(const xatlas::UvMeshDecl *)decl); } void xatlasComputeCharts(xatlasAtlas *atlas, const xatlasChartOptions *chartOptions) { xatlas::ComputeCharts((xatlas::Atlas *)atlas, chartOptions ? *(xatlas::ChartOptions *)chartOptions : xatlas::ChartOptions()); } void xatlasPackCharts(xatlasAtlas *atlas, const xatlasPackOptions *packOptions) { xatlas::PackCharts((xatlas::Atlas *)atlas, packOptions ? *(xatlas::PackOptions *)packOptions : xatlas::PackOptions()); } void xatlasGenerate(xatlasAtlas *atlas, const xatlasChartOptions *chartOptions, const xatlasPackOptions *packOptions) { xatlas::Generate((xatlas::Atlas *)atlas, chartOptions ? *(xatlas::ChartOptions *)chartOptions : xatlas::ChartOptions(), packOptions ? *(xatlas::PackOptions *)packOptions : xatlas::PackOptions()); } void xatlasSetProgressCallback(xatlasAtlas *atlas, xatlasProgressFunc progressFunc, void *progressUserData) { xatlas::ProgressFunc pf; *(void **)&pf = (void *)progressFunc; xatlas::SetProgressCallback((xatlas::Atlas *)atlas, pf, progressUserData); } void xatlasSetAlloc(xatlasReallocFunc reallocFunc, xatlasFreeFunc freeFunc) { xatlas::SetAlloc((xatlas::ReallocFunc)reallocFunc, (xatlas::FreeFunc)freeFunc); } void xatlasSetPrint(xatlasPrintFunc print, bool verbose) { xatlas::SetPrint((xatlas::PrintFunc)print, verbose); } const char *xatlasAddMeshErrorString(xatlasAddMeshError error) { return xatlas::StringForEnum((xatlas::AddMeshError)error); } const char *xatlasProgressCategoryString(xatlasProgressCategory category) { return xatlas::StringForEnum((xatlas::ProgressCategory)category); } void xatlasMeshDeclInit(xatlasMeshDecl *meshDecl) { xatlas::MeshDecl init; memcpy(meshDecl, &init, sizeof(init)); } void xatlasUvMeshDeclInit(xatlasUvMeshDecl *uvMeshDecl) { xatlas::UvMeshDecl init; memcpy(uvMeshDecl, &init, sizeof(init)); } void xatlasChartOptionsInit(xatlasChartOptions *chartOptions) { xatlas::ChartOptions init; memcpy(chartOptions, &init, sizeof(init)); } void xatlasPackOptionsInit(xatlasPackOptions *packOptions) { xatlas::PackOptions init; memcpy(packOptions, &init, sizeof(init)); } #ifdef __cplusplus } // extern "C" #endif #endif // XATLAS_C_API ================================================ FILE: libraries/xatlas.h ================================================ /* MIT License Copyright (c) 2018-2020 Jonathan Young Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* thekla_atlas MIT License https://github.com/Thekla/thekla_atlas Copyright (c) 2013 Thekla, Inc Copyright NVIDIA Corporation 2006 -- Ignacio Castano */ #pragma once #ifndef XATLAS_H #define XATLAS_H #include #include namespace xatlas { enum class ChartType { Planar, Ortho, LSCM, Piecewise, Invalid }; // A group of connected faces, belonging to a single atlas. struct Chart { uint32_t *faceArray; uint32_t atlasIndex; // Sub-atlas index. uint32_t faceCount; ChartType type; uint32_t material; }; // Output vertex. struct Vertex { int32_t atlasIndex; // Sub-atlas index. -1 if the vertex doesn't exist in any atlas. int32_t chartIndex; // -1 if the vertex doesn't exist in any chart. float uv[2]; // Not normalized - values are in Atlas width and height range. uint32_t xref; // Index of input vertex from which this output vertex originated. }; // Output mesh. struct Mesh { Chart *chartArray; uint32_t *indexArray; Vertex *vertexArray; uint32_t chartCount; uint32_t indexCount; uint32_t vertexCount; }; static const uint32_t kImageChartIndexMask = 0x1FFFFFFF; static const uint32_t kImageHasChartIndexBit = 0x80000000; static const uint32_t kImageIsBilinearBit = 0x40000000; static const uint32_t kImageIsPaddingBit = 0x20000000; // Empty on creation. Populated after charts are packed. struct Atlas { uint32_t *image; Mesh *meshes; // The output meshes, corresponding to each AddMesh call. float *utilization; // Normalized atlas texel utilization array. E.g. a value of 0.8 means 20% empty space. atlasCount in length. uint32_t width; // Atlas width in texels. uint32_t height; // Atlas height in texels. uint32_t atlasCount; // Number of sub-atlases. Equal to 0 unless PackOptions resolution is changed from default (0). uint32_t chartCount; // Total number of charts in all meshes. uint32_t meshCount; // Number of output meshes. Equal to the number of times AddMesh was called. float texelsPerUnit; // Equal to PackOptions texelsPerUnit if texelsPerUnit > 0, otherwise an estimated value to match PackOptions resolution. }; // Create an empty atlas. Atlas *Create(); void Destroy(Atlas *atlas); enum class IndexFormat { UInt16, UInt32 }; // Input mesh declaration. struct MeshDecl { const void *vertexPositionData = nullptr; const void *vertexNormalData = nullptr; // optional const void *vertexUvData = nullptr; // optional. The input UVs are provided as a hint to the chart generator. const void *indexData = nullptr; // optional // Optional. Must be faceCount in length. // Don't atlas faces set to true. Ignored faces still exist in the output meshes, Vertex uv is set to (0, 0) and Vertex atlasIndex to -1. const bool *faceIgnoreData = nullptr; // Optional. Must be faceCount in length. // Only faces with the same material will be assigned to the same chart. const uint32_t *faceMaterialData = nullptr; // Optional. Must be faceCount in length. // Polygon / n-gon support. Faces are assumed to be triangles if this is null. const uint8_t *faceVertexCount = nullptr; uint32_t vertexCount = 0; uint32_t vertexPositionStride = 0; uint32_t vertexNormalStride = 0; // optional uint32_t vertexUvStride = 0; // optional uint32_t indexCount = 0; int32_t indexOffset = 0; // optional. Add this offset to all indices. uint32_t faceCount = 0; // Optional if faceVertexCount is null. Otherwise assumed to be indexCount / 3. IndexFormat indexFormat = IndexFormat::UInt16; // Vertex positions within epsilon distance of each other are considered colocal. float epsilon = 1.192092896e-07F; }; enum class AddMeshError { Success, // No error. Error, // Unspecified error. IndexOutOfRange, // An index is >= MeshDecl vertexCount. InvalidFaceVertexCount, // Must be >= 3. InvalidIndexCount // Not evenly divisible by 3 - expecting triangles. }; // Add a mesh to the atlas. MeshDecl data is copied, so it can be freed after AddMesh returns. AddMeshError AddMesh(Atlas *atlas, const MeshDecl &meshDecl, uint32_t meshCountHint = 0); // Wait for AddMesh async processing to finish. ComputeCharts / Generate call this internally. void AddMeshJoin(Atlas *atlas); struct UvMeshDecl { const void *vertexUvData = nullptr; const void *indexData = nullptr; // optional const uint32_t *faceMaterialData = nullptr; // Optional. Overlapping UVs should be assigned a different material. Must be indexCount / 3 in length. uint32_t vertexCount = 0; uint32_t vertexStride = 0; uint32_t indexCount = 0; int32_t indexOffset = 0; // optional. Add this offset to all indices. IndexFormat indexFormat = IndexFormat::UInt16; }; AddMeshError AddUvMesh(Atlas *atlas, const UvMeshDecl &decl); // Custom parameterization function. texcoords initial values are an orthogonal parameterization. typedef void (*ParameterizeFunc)(const float *positions, float *texcoords, uint32_t vertexCount, const uint32_t *indices, uint32_t indexCount); struct ChartOptions { ParameterizeFunc paramFunc = nullptr; float maxChartArea = 0.0f; // Don't grow charts to be larger than this. 0 means no limit. float maxBoundaryLength = 0.0f; // Don't grow charts to have a longer boundary than this. 0 means no limit. // Weights determine chart growth. Higher weights mean higher cost for that metric. float normalDeviationWeight = 2.0f; // Angle between face and average chart normal. float roundnessWeight = 0.01f; float straightnessWeight = 6.0f; float normalSeamWeight = 4.0f; // If > 1000, normal seams are fully respected. float textureSeamWeight = 0.5f; float maxCost = 2.0f; // If total of all metrics * weights > maxCost, don't grow chart. Lower values result in more charts. uint32_t maxIterations = 1; // Number of iterations of the chart growing and seeding phases. Higher values result in better charts. bool useInputMeshUvs = false; // Use MeshDecl::vertexUvData for charts. bool fixWinding = false; // Enforce consistent texture coordinate winding. }; // Call after all AddMesh calls. Can be called multiple times to recompute charts with different options. void ComputeCharts(Atlas *atlas, ChartOptions options = ChartOptions()); struct PackOptions { // Charts larger than this will be scaled down. 0 means no limit. uint32_t maxChartSize = 0; // Number of pixels to pad charts with. uint32_t padding = 0; // Unit to texel scale. e.g. a 1x1 quad with texelsPerUnit of 32 will take up approximately 32x32 texels in the atlas. // If 0, an estimated value will be calculated to approximately match the given resolution. // If resolution is also 0, the estimated value will approximately match a 1024x1024 atlas. float texelsPerUnit = 0.0f; // If 0, generate a single atlas with texelsPerUnit determining the final resolution. // If not 0, and texelsPerUnit is not 0, generate one or more atlases with that exact resolution. // If not 0, and texelsPerUnit is 0, texelsPerUnit is estimated to approximately match the resolution. uint32_t resolution = 0; // Leave space around charts for texels that would be sampled by bilinear filtering. bool bilinear = true; // Align charts to 4x4 blocks. Also improves packing speed, since there are fewer possible chart locations to consider. bool blockAlign = false; // Slower, but gives the best result. If false, use random chart placement. bool bruteForce = false; // Create Atlas::image bool createImage = false; // Rotate charts to the axis of their convex hull. bool rotateChartsToAxis = true; // Rotate charts to improve packing. bool rotateCharts = true; }; // Call after ComputeCharts. Can be called multiple times to re-pack charts with different options. void PackCharts(Atlas *atlas, PackOptions packOptions = PackOptions()); // Equivalent to calling ComputeCharts and PackCharts in sequence. Can be called multiple times to regenerate with different options. void Generate(Atlas *atlas, ChartOptions chartOptions = ChartOptions(), PackOptions packOptions = PackOptions()); // Progress tracking. enum class ProgressCategory { AddMesh, ComputeCharts, PackCharts, BuildOutputMeshes }; // May be called from any thread. Return false to cancel. typedef bool (*ProgressFunc)(ProgressCategory category, int progress, void *userData); void SetProgressCallback(Atlas *atlas, ProgressFunc progressFunc = nullptr, void *progressUserData = nullptr); // Custom memory allocation. typedef void *(*ReallocFunc)(void *, size_t); typedef void (*FreeFunc)(void *); void SetAlloc(ReallocFunc reallocFunc, FreeFunc freeFunc = nullptr); // Custom print function. typedef int (*PrintFunc)(const char *, ...); void SetPrint(PrintFunc print, bool verbose); // Helper functions for error messages. const char *StringForEnum(AddMeshError error); const char *StringForEnum(ProgressCategory category); } // namespace xatlas #endif // XATLAS_H ================================================ FILE: libtramsdk.a ================================================ [File too large to display: 32.4 MB] ================================================ FILE: maketool.ini ================================================ ; Configuration for the Tramway SDK makefile generator. [Make] ; Here are the commands that will be generated into the Makefile. ; If you're using gcc or mingw and you can run these commands from the terminal, ; then you can leave them as they are. Otherwise you should set these to the ; path of the executable plus its name. Also you should set it if you have ; multiple versions of these programs, since you need to use a compiler that ; supports compiling C++20. ; This is the C++20 compiler; for compiling object files. compiler = g++ ; This is the archiver; for generating static libraries. archiver = ar ; This is the Tramway SDK source location; only used for projects. tramsdk = ./ [Project] ; This is used for switching between different systems. ; Select: ; - WIN32 for 32-bit Windows XP SP3+ ; - WIN64 for 64-bit Windows 7+ ; - LINUX for Linux ; - WEB if you're building for webassembly platform = WIN64 ; This can be set to either LIBRARY or PROJECT. ; Select: ; - LIBRARY will produce a statically-linkable library archive file. ; - PROJECT will produce an executable. type = LIBRARY ; This will be used for the executable name if making a project. name = tramsdk [Modules] ; For extensions you can enable of disable as many as you want. For other ; modules you have to choose one to be enabled and other to be disabled. ; Select: ; - INCLUDE if you want to enable the module; ; - EXCLUDE if you want to disable it. extensions/camera = INCLUDE extensions/file = EXCLUDE extensions/menu = INCLUDE extensions/scripting/lua = INCLUDE audio/openal = INCLUDE audio/spatial = EXCLUDE audio/template = EXCLUDE platform/glfw = INCLUDE platform/sdl = EXCLUDE physics/bullet = INCLUDE physics/template = EXCLUDE render/opengl = INCLUDE render/direct3d = EXCLUDE render/software = EXCLUDE render/raytrace = EXCLUDE ================================================ FILE: project.cfg ================================================ # Tramway SDK Project Settings # Gemerated by: Tramway SDK Asset Manager Applet # Generated on: 2025.02.26. 6:29:52 SDK_VERSION "0.0.9" RUN_COMMAND "C:\Users\Poga\Desktop\painis\tram\build-Debug\bin\tram-sdk.exe" COMPILE_COMMAND "make project" PROJECT_NAME "Tramway SDK Test Project" TBSP_COMMAND "../tram-binary/tbsp %level" TMAP_COMMAND "../tram-binary/tmap %model %size %padding" TRAD_COMMAND "../tram-binary/trad %cell" IMAGE_COMMAND "../tram-binary/magick %source -layers flatten data/textures/%dest" BLENDER_COMMAND "blender %filename -b -P ../tram-sdk/devtools/exporters/tram_file_export.py" LEVEL_EDITOR_COMMAND "../tram-binary/tedit" PROJECT_VERSION "" ================================================ FILE: saves/aaa.cfg ================================================ addentity mongus pagrabs-mongus 2.928671 -2.975000 -3.597650 0.000000 -0.000000 0.000000 mongus-activate mongus addentity staticwobj udens2 0.000000 0.000000 0.000000 0.000000 -0.000000 0.000000 none udens2 fullbright addentity staticwobj jura2 0.000000 0.000000 0.000000 0.000000 -0.000000 0.000000 none jura2 jura2 addentity mongus floppa 1.000000 1.624655 104.000000 3.141593 0.001593 3.141593 floppa-activate floppa addentity bus test-bus1 -65.998795 2.122178 41.120064 -0.037502 0.118372 0.001528 none raf raf raf_wheel addentity crate cr3 -72.467049 4.117451 14.272699 0.000000 -0.536495 0.000000 none crate_plain crate addentity crate cr2 -72.688187 5.143822 14.747958 0.000000 0.154534 0.000000 none crate_ligma crate addentity crate cr1 -72.979095 4.117451 15.389862 0.000000 0.000000 0.000000 none crate_plain crate addentity mongus bingus -91.000000 0.850000 10.000000 3.141593 -1.058407 3.141593 bingus-activate bingus addentity staticwobj bingus-chair -91.000000 0.000000 10.000000 3.141593 -1.058407 3.141593 none chair chair addentity staticwobj udens1 0.000000 0.000000 0.000000 0.000000 -0.000000 0.000000 none udens1 fullbright addentity staticwobj jurarail 0.000000 0.000000 0.000000 0.000000 -0.000000 0.000000 none jura1rail jura1rail addentity staticwobj jura1 0.000000 0.000000 0.000000 0.000000 -0.000000 0.000000 none jura1 jura1 addentity tram test-tram1 -48.194851 2.683518 41.765602 3.135177 -0.835846 -3.129445 tram-activate tatra tatra tatrabogey addentity staticwobj piena-veikals -625.000000 3.100000 634.000000 3.141593 0.523599 3.141593 none piena_veikals piena_veikals addentity staticwobj piena-sign -696.000000 2.200000 596.000000 0.000000 0.785398 0.000000 none piena_veikals_sign piena_veikals_sign addentity staticwobj redeles 0.000000 0.000000 0.000000 0.000000 -0.000000 0.000000 none redeles redeles addentity staticwobj piena-veikals-ieksa -625.000000 3.100000 634.000000 3.141593 0.523599 3.141593 none piena_veikals_ieksa piena_veikals_ieksa addentity crate pp1 -621.500000 3.200000 635.900024 0.000000 1.047197 0.000000 milk-activate pienapaka pienapaka addentity crate pp2 -618.900024 3.200000 637.500000 0.000000 1.047197 0.000000 milk-activate pienapaka pienapaka addentity crate pp3 -617.500000 4.000000 638.299988 0.000000 1.047197 0.000000 milk-activate pienapaka pienapaka addentity crate pp4 -622.500000 3.980000 635.400024 0.000000 1.047197 0.000000 milk-activate pienapaka pienapaka addentity crate pp5 -618.799988 4.800000 637.599976 0.000000 1.047197 0.000000 milk-activate pienapaka pienapaka addentity crate pp6 -616.599976 4.800000 638.700012 0.000000 1.047197 0.000000 milk-activate pienapaka pienapaka addentity crate pp7 -617.200012 5.500000 638.400024 0.000000 1.047197 0.000000 milk-activate pienapaka pienapaka addentity crate pp8 -620.700012 5.500000 636.299988 0.000000 1.047197 0.000000 milk-activate pienapaka pienapaka addentity lamp plamp1 -616.821777 5.100000 635.834961 3.141593 0.523599 3.141593 none 1.000000 0.416880 0.000000 25.000000 addentity lamp plamp2 -625.482056 5.100000 630.834961 3.141593 0.523599 3.141593 none 1.000000 0.416880 0.000000 25.000000 addentity staticwobj pagrabs 0.000000 0.000000 0.000000 0.000000 -0.000000 0.000000 none pagrabs_ieksa pagrabs_ieksa addentity lamp lampo 3.500000 -1.000000 116.000000 0.000000 -0.000000 0.000000 none 1.000000 0.416880 0.000000 10.000000 ================================================ FILE: scripts/api.lua ================================================ -- TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 -- All rights reserved. print("\n\nLoading Lua API") if tram then return end tram = {} tram.math = {} tram.entity = {} tram.event = {} tram.message = {} tram.type = {} tram.ui = {} tram.worldcell = {} tram.audio = {} tram.render = {} tram.physics = {} tram.physics.shape = {} tram.physics.model = {} tram.resource = {} tram.components = {} tram.render.animation = {} tram.render.model = {} tram.render.material = {} tram.render.sprite = {} -- FRAMEWORK/CORE.H function tram.init() print "hello my big chungulina" end function tram.GetTick() return __impl_core_get_tick() end function tram.GetTickTime() return __impl_core_get_tick_time() end function tram.GetDeltaTime() return __impl_core_get_delta_time() end -- ============================ FRAMEWORK/MATH.H ============================ -- -- This is where all of the vector math stuff is defined. -- For simple stuff, we just do all of the computation without leaving Lua. For -- more complex stuff we go down into C++. -- ------------------------------- VEC3 TYPE ------------------------------- -- -- The vec3 type is basically a re-implemenation of tram::vec3, which itself is -- just an alias for glm::vec3. -- To create a new vec3, use tram.math.vec3(x, y, z). If you get a vec3 through -- the C++ API, then use setmetatable(object, tram.math._metatable_vec3) to set -- its metatable. tram.math._methods_vec3 = { poot = function(self) --value = "(" + self.x + self.y + self.z + ")" value = string.format("(%.4f, %.4f, %.4f)", self.x, self.y, self.z) print(value) --print("vec3:", self.x, self.y, self.z) end, length = function(self) return math.sqrt(self.x * self.x + self.y * self.y + self.z * self.z) end, distance = function(self, other) assert(getmetatable(other) == tram.math._metatable_vec3) return (self - other):length() end, dot = function(self, other) assert(getmetatable(other) == tram.math._metatable_vec3) return self.x * other.x + self.y * other.y + self.z * other.z end, cross = function(self, other) assert(getmetatable(other) == tram.math._metatable_vec3) local result = {} result.x = self.y * other.z - self.z * other.y result.y = self.z * other.x - self.x * other.z result.z = self.x * other.y - self.y * other.x setmetatable(result, tram.math._metatable_vec3) return result end, normalize = function(self) local result = {} local length = self:length() result.x = self.x / length result.y = self.y / length result.z = self.z / length setmetatable(result, tram.math._metatable_vec3) return result end, } tram.math._metatable_vec3 = { __index = tram.math._methods_vec3, __tostring = function(self) return string.format("(%.4f, %.4f, %.4f)", self.x, self.y, self.z) end, __eq = function(self, other) return self.x == other.x and self.y == other.y and self.z == other.z end, __add = function(self, other) local result = {} if getmetatable(other) == tram.math._metatable_vec3 then result.x = self.x + other.x result.y = self.y + other.y result.z = self.z + other.z else result.x = self.x + other result.y = self.y + other result.z = self.z + other end setmetatable(result, tram.math._metatable_vec3) return result end, __sub = function(self, other) local result = {} if getmetatable(other) == tram.math._metatable_vec3 then result.x = self.x - other.x result.y = self.y - other.y result.z = self.z - other.z else result.x = self.x - other result.y = self.y - other result.z = self.z - other end setmetatable(result, tram.math._metatable_vec3) return result end, __mul = function(self, other) local result = {} if getmetatable(other) == tram.math._metatable_vec3 then result.x = self.x * other.x result.y = self.y * other.y result.z = self.z * other.z else result.x = self.x * other result.y = self.y * other result.z = self.z * other end setmetatable(result, tram.math._metatable_vec3) return result end, __div = function(self, other) local result = {} if getmetatable(other) == tram.math._metatable_vec3 then result.x = self.x / other.x result.y = self.y / other.y result.z = self.z / other.z else result.x = self.x / other result.y = self.y / other result.z = self.z / other end setmetatable(result, tram.math._metatable_vec3) return result end } function tram.math.vec3(x, y, z) vector = {} if getmetatable(x) == tram.math._metatable_vec3 then vector.x = x.x vector.y = x.y vector.z = x.z elseif x ~= nil and y ~= nil and z ~= nil then vector.x = x vector.y = y vector.z = z else error("Something is wrong with vec3 constructor parameters!") end setmetatable(vector, tram.math._metatable_vec3) return vector --return tram.math._make_vec3(vector) end -- ------------------------------- QUAT TYPE ------------------------------- -- -- The quat type is basically a re-implemenation of tram::quat, which itself is -- just an alias for glm::quat. -- To create a new quat, use tram.math.quat(x, y, z, w). You can also use the -- tram.math.quat(vec3) to construct a quaternion from euler angles contained in -- the vec3. If you get a quat through the C++ API, then use -- setmetatable(object, tram.math._metatable_quat) to set its metatable. tram.math._methods_quat = { poot = function(self) value = string.format("(%.4f, %.4f, %.4f)", self.x, self.y, self.z) print(value) end } tram.math._metatable_quat = { __index = tram.math._methods_quat, __tostring = function(self) return string.format("(%.4f, %.4f, %.4f, %.4f)", self.x, self.y, self.z, self.w) end, __eq = function(self, other) return self.x == other.x and self.y == other.y and self.z == other.z and self.w == other.w end, __mul = function(self, other) assert(getmetatable(self) == tram.math._metatable_quat) local result = {} if getmetatable(other) == tram.math._metatable_quat then result.w = other.w * self.w - other.x * self.x - other.y * self.y - other.z * self.z result.x = other.w * self.x + other.x * self.w - other.y * self.z + other.z * self.y result.y = other.w * self.y + other.x * self.z + other.y * self.w - other.z * self.x result.z = other.w * self.z - other.x * self.y + other.y * self.x + other.z * self.w elseif getmetatable(other) == tram.math._metatable_vec3 then result = __impl_math_quat_vec3_multiply(self, other) else error("quaternion invalid rotation") end setmetatable(result, tram.math._metatable_quat) return result end } function tram.math.quat(x, y, z, w) local vector = {} -- conversion from euler angles if getmetatable(x) == tram.math._metatable_vec3 then local roll = x.x local pitch = x.y local yaw = x.z local cr = math.cos(roll * 0.5); local sr = math.sin(roll * 0.5); local cp = math.cos(pitch * 0.5); local sp = math.sin(pitch * 0.5); local cy = math.cos(yaw * 0.5); local sy = math.sin(yaw * 0.5); vector.w = cr * cp * cy + sr * sp * sy; vector.x = sr * cp * cy - cr * sp * sy; vector.y = cr * sp * cy + sr * cp * sy; vector.z = cr * cp * sy - sr * sp * cy; -- copy constructor elseif getmetatable(x) == tram.math._metatable_quat then vector.x = x.x vector.y = x.y vector.z = x.z vector.w = x.w -- normal parametric constructor elseif x ~= nil and y ~= nil and z ~= nil and w ~= nil then vector.x = x vector.y = y vector.z = z vector.w = w else error("Something is wrong with quaternion constructor parameters!") end setmetatable(vector, tram.math._metatable_quat) return vector end function tram.math.mix(a, b, c) if c > 1.0 then c = 1.0 elseif c < 0.0 then c = 0.0 end if getmetatable(a) == tram.math._metatable_vec3 then if getmetatable(b) ~= tram.math._metatable_vec3 then error("First is vec3 but second isn't") end local result = {} result.x = b.x * c + a.x * (1.0 - c) result.y = b.y * c + a.y * (1.0 - c) result.z = b.z * c + a.z * (1.0 - c) setmetatable(result, tram.math._metatable_vec3) return result elseif getmetatable(a) == tram.math._metatable_quat then if getmetatable(b) ~= tram.math._metatable_quat then error("First is quat but second isn't") end local result = {} result.x = b.x * c + a.x * (1.0 - c) result.y = b.y * c + a.y * (1.0 - c) result.z = b.z * c + a.z * (1.0 - c) result.w = b.w * c + a.w * (1.0 - c) setmetatable(result, tram.math._metatable_quat) return result else error("Mixing not vec3 and not quat") end end -- ------------------------------- CONSTANTS ------------------------------- -- tram.math.DIRECTION_FORWARD = tram.math.vec3(0.0, 0.0, -1.0) tram.math.DIRECTION_SIDE = tram.math.vec3(1.0, 0.0, 0.0) tram.math.DIRECTION_UP = tram.math.vec3(0.0, 1.0, 0.0) -- FRAMEWORK/ENTITY.H tram._metatable_entity = { __index = { GetName = function (self) return __impl_entity_get_name(self.id) end, GetID = function (self) return self.id end, Load = function (self) __impl_entity_load(self.id) end, Unload = function (self) __impl_entity_unload(self.id) end, GetLocation = function (self) local vector = __impl_entity_get_location(self.id) setmetatable(vector, tram.math._metatable_vec3) return vector end, SetLocation = function (self, location) return __impl_entity_set_location(self.id, location) end, GetRotation = function (self) local vector = __impl_entity_get_rotation(self.id) setmetatable(vector, tram.math._metatable_quat) return vector end, SetRotation = function (self, rotation) return __impl_entity_set_rotation(self.id, rotation) end } } function tram.entity.Find(term) if type(term) == "string" then id = __impl_entity_find_by_name(term) else id = __impl_entity_find_by_id(term) end if id == 0 then return nil end local entity = {} entity.id = id setmetatable(entity, tram._metatable_entity) return entity end function tram.entity.Make(entity_type, entity_properties) __impl_clear_key_value() for key, value in pairs(entity_properties) do if type(value) ~= "function" then __impl_push_key_value(key, value) end end local entity = {} entity.id = __impl_entity_make(entity_type) setmetatable(entity, tram._metatable_entity) return entity end tram.entity._scriptable_entities = {} tram.entity._scriptable_entity_constructor = {} tram.entity._scriptable_entity_destructor = {} function __impl_entity_update_parameters_callback(id) local entity = tram.entity._scriptable_entities[id] assert(entity ~= nil) if (rawget(entity, "OnUpdateParameters") == nil) then return true end local result = entity:OnUpdateParameters() if result == nil then return true end return result end function __impl_entity_set_parameters_callback(id) local entity = tram.entity._scriptable_entities[id] assert(entity ~= nil) if (rawget(entity, "OnSetParameters") == nil) then return true end local result = entity:OnSetParameters() if result == nil then return true end return result end function __impl_entity_load_callback(id) local entity = tram.entity._scriptable_entities[id] assert(entity ~= nil) if (rawget(entity, "OnLoad") == nil) then return true end local result = entity:OnLoad() if result == nil then return true end return result end function __impl_entity_unload_callback(id) local entity = tram.entity._scriptable_entities[id] assert(entity ~= nil) if (rawget(entity, "OnUnload") == nil) then return true end local result = entity:OnUnload() if result == nil then return true end return result end function __impl_entity_message_handler_callback(id, message_type, sender, receiver, data) local entity = tram.entity._scriptable_entities[id] assert(entity ~= nil) if (entity.OnMessageHandler == nil) then return true end local message = {} message.type = message_type message.sender = sender message.receiver = receiver message.data = data local result = entity:OnMessageHandler(message) if result == nil then return true end return result end function __impl_entity_event_handler_callback(id, event_type, subtype, poster, data) local entity = tram.entity._scriptable_entities[id] assert(entity ~= nil) if (entity.OnEventHandler == nil) then return true end local event = {} event.type = event_type event.subtype = subtype event.poster = poster event.data = data local result = entity:OnEventHandler(event) if result == nil then return true end return result end function tram.entity.New(entity_type, base_type, base_properties) __impl_clear_key_value() for key, value in pairs(base_properties) do if type(value) ~= "function" then __impl_push_key_value(key, value) end end local entity = {} entity.id = __impl_entity_scriptable_make(base_type, entity_type) setmetatable(entity, tram._metatable_entity) tram.entity._scriptable_entities[entity.id] = entity return entity end function tram.entity.Register(entity_type, entity_properties, constructor, destructor) __impl_clear_entity_fields() for index, field in pairs(entity_properties) do if type(index) ~= "number" then error("Property index needs to be a number, instead got" .. type(index) .. " (" .. type(index) .. ")") elseif type(field) ~= "table" then error("Property field needs to be a table, instead got" .. type(field) .. " (" .. type(field) .. ")") elseif type(field.type) ~= "number" then error("Property type needs to be a number, instead got" .. type(field.type) .. " (" .. type(field.type) .. ")") elseif type(field.flag) ~= "number" then error("Property type needs to be a number, instead got" .. type(field.flag) .. " (" .. type(field.flag) .. ")") else __impl_push_entity_fields(index, field.type, field.flag) end end tram.entity._scriptable_entity_constructor[entity_type] = constructor tram.entity._scriptable_entity_destructor[entity_type] = destructor __impl_entity_type_register(entity_type) end function __impl_entity_shared_data_callback(id, name, flags, location, rotation) tram.entity._entity_data_holder = {} tram.entity._entity_data_holder.id = id tram.entity._entity_data_holder.name = name tram.entity._entity_data_holder.flags = flags tram.entity._entity_data_holder.location = location tram.entity._entity_data_holder.rotation = rotation end function __impl_entity_property_callback(key, value) tram.entity._entity_data_holder[key] = value end function __impl_entity_constructor_callback(entity_type) local constructor = tram.entity._scriptable_entity_constructor[entity_type] assert(type(constructor) == "function") return constructor(tram.entity._entity_data_holder) end function __impl_entity_destructor_callback(entity_type, entity_id) local destructor = tram.entity._scriptable_entity_destructor[entity_type] assert(type(destructor) == "function") destructor(entity_id) end -- ------------------------------- CONSTANTS ------------------------------- -- -- TODO: fill in -- =========================== FRAMEWORK/EVENT.H ============================ -- function tram.event.Register(event_name) return __impl_event_register(event_name) end function tram.event.GetType(event_name) return __impl_event_get_type(event_name) end function tram.event.GetName(event_name) return __impl_event_get_name(event_name) end function tram.event.GetLast() return __impl_event_get_last() end function tram.event.Post(event) __impl_event_post(event.type, event.subtype, event.poster, event.data) end -- this is dumb! we should instead use listener id as a key -- instead of _evt_ids as a key!!! tram.event._evt_act = {} tram.event._evt_ids = 1 function tram.event.AddListener(event_type, action) if getmetatable(action) == tram._metatable_entity then return __impl_entity_add_listener(event_type, action.id) end listener = __impl_event_add_listener(event_type, tram.event._evt_ids) tram.event._evt_act[tram.event._evt_ids] = action tram.event._evt_ids = tram.event._evt_ids + 1 return listener end function tram.event.RemoveListener(listener) -- TODO: delete from _evt_act also __impl_event_remove_listener(listener) end function __impl_event_event_callback(event_type, event_subtype, event_poster, event_data, callback_data) event = {} event.type = event_type event.subtype = event_subtype event.poster = event_poster event.data = event_data callback = tram.event._evt_act[callback_data] callback(event) end tram.event.KEYPRESS = tram.event.GetType("keypress") tram.event.KEYDOWN = tram.event.GetType("keydown") tram.event.KEYUP = tram.event.GetType("keyup") tram.event.KEYCHAR = tram.event.GetType("keychar") tram.event.CURSORPOS = tram.event.GetType("cursorpos") tram.event.TICK = tram.event.GetType("tick") tram.event.FRAME = tram.event.GetType("frame") tram.event.SELECTED = tram.event.GetType("selected") tram.event.LOOK_AT = tram.event.GetType("look-at") -- ========================== FRAMEWORK/MESSAGE.H =========================== -- function tram.message.Register(message_name) return __impl_message_register(message_name) end function tram.message.GetType(message_name) return __impl_message_get_type(message_name) end function tram.message.GetName(message_name) return __impl_message_get_name(message_name) end function tram.message.GetLast() return __impl_message_get_last() end function tram.message.Send(message, delay) __impl_message_send(message.type, message.sender, message.receiver, message.data, delay) end tram.message.NONE = tram.message.GetType("none") tram.message.PING = tram.message.GetType("ping") tram.message.MOVE_PICK_UP = tram.message.GetType("move-pick-up") tram.message.OPEN = tram.message.GetType("open") tram.message.CLOSE = tram.message.GetType("close") tram.message.LOCK = tram.message.GetType("lock") tram.message.UNLOCK = tram.message.GetType("unlock") tram.message.TOGGLE = tram.message.GetType("toggle") tram.message.KILL = tram.message.GetType("kill") tram.message.TRIGGER = tram.message.GetType("trigger") tram.message.START = tram.message.GetType("start") tram.message.STOP = tram.message.GetType("stop") tram.message.ACTIVATE = tram.message.GetType("activate") tram.message.ACTIVATE_ONCE = tram.message.GetType("activate-one") tram.message.SELECT = tram.message.GetType("select") tram.message.SET_PROGRESS = tram.message.GetType("set-progress") tram.message.SET_ANIMATION = tram.message.GetType("set-animation") -- ============================= FRAMEWORK/GUI.H ============================ -- -- TODO: implement -- ========================== FRAMEWORK/LANGUAGE.H ========================== -- -- TODO: implement -- ============================= FRAMEWORK/UI.H ============================= -- function tram.ui.GetScreenWidth() return __impl_ui_get_screen_width() end function tram.ui.GetScreenHeight() return __impl_ui_get_screen_height() end function tram.ui.SetWindowTitle(title) __impl_ui_set_window_title(title) end function tram.ui.SetWindowSize(w, h) __impl_ui_set_window_size(w, h) end function tram.ui.SetCursor(cursor) __impl_ui_set_cursor(cursor) end tram.ui._keyboard_function = {} function tram.ui.BindKeyboardKey(key, action) if type(action) == "function" then __impl_ui_bind_keyboard_callback(key) tram.ui._keyboard_function[key] = action else __impl_ui_bind_keyboard_action(key, action) end end function __impl_ui_keyboard_callback(key) callback = tram.ui._keyboard_function[key] callback() end function tram.ui.PollKeyboardKey(key) return __impl_ui_poll_keyboard_key(key) end function tram.ui.PollKeyboardAxis(axis) return __impl_ui_poll_keyboard_axis(axis) end function tram.ui.PollKeyboardAxisDelta(axis) return __impl_ui_poll_keyboard_axis_delta(axis) end function tram.ui.SetInputState(state) __impl_ui_set_input_state(state) end function tram.ui.GetInputState() return __impl_ui_get_input_state() end function tram.ui.GetAxisSensitivity(axis) return __impl_ui_get_axis_sensitivity(axis) end function tram.ui.SetAxisSensitivity(axis, value) return __impl_ui_set_axis_sensitivity(axis, value) end function tram.ui.RegisterKeyboardAction(name) return __impl_ui_register_keyboard_action(name) end function tram.ui.GetKeyboardAction(name) return __impl_ui_get_keyboard_action(name) end function tram.ui.GetKeyboardActionName(name) return __impl_ui_get_keyboard_action_name(name) end -- ------------------------------- CONSTANTS ------------------------------- -- tram.ui.KEY_SPACE = 0 tram.ui.KEY_APOSTROPHE = 1 tram.ui.KEY_COMMA = 2 tram.ui.KEY_MINUS = 3 tram.ui.KEY_PERIOD = 4 tram.ui.KEY_SLASH = 5 tram.ui.KEY_0 = 6 tram.ui.KEY_1 = 7 tram.ui.KEY_2 = 8 tram.ui.KEY_3 = 9 tram.ui.KEY_4 = 10 tram.ui.KEY_5 = 11 tram.ui.KEY_6 = 12 tram.ui.KEY_7 = 13 tram.ui.KEY_8 = 14 tram.ui.KEY_9 = 15 tram.ui.KEY_SEMICOLON = 16 tram.ui.KEY_EQUAL = 17 tram.ui.KEY_A = 18 tram.ui.KEY_B = 19 tram.ui.KEY_C = 20 tram.ui.KEY_D = 21 tram.ui.KEY_E = 22 tram.ui.KEY_F = 23 tram.ui.KEY_G = 24 tram.ui.KEY_H = 25 tram.ui.KEY_I = 26 tram.ui.KEY_J = 27 tram.ui.KEY_K = 28 tram.ui.KEY_L = 29 tram.ui.KEY_M = 30 tram.ui.KEY_N = 31 tram.ui.KEY_O = 32 tram.ui.KEY_P = 33 tram.ui.KEY_Q = 34 tram.ui.KEY_R = 35 tram.ui.KEY_S = 36 tram.ui.KEY_T = 37 tram.ui.KEY_U = 38 tram.ui.KEY_V = 39 tram.ui.KEY_W = 40 tram.ui.KEY_X = 41 tram.ui.KEY_Y = 42 tram.ui.KEY_Z = 43 tram.ui.KEY_LEFT_BRACKET = 44 tram.ui.KEY_BACKSLASH = 45 tram.ui.KEY_RIGHT_BRACKET = 46 tram.ui.KEY_GRAVE_ACCENT = 47 tram.ui.KEY_WORLD_1 = 48 tram.ui.KEY_WORLD_2 = 49 tram.ui.KEY_ESCAPE = 50 tram.ui.KEY_ENTER = 51 tram.ui.KEY_TAB = 52 tram.ui.KEY_BACKSPACE = 53 tram.ui.KEY_INSERT = 54 tram.ui.KEY_DELETE = 55 tram.ui.KEY_RIGHT = 56 tram.ui.KEY_LEFT = 57 tram.ui.KEY_DOWN = 58 tram.ui.KEY_UP = 59 tram.ui.KEY_PAGE_UP = 60 tram.ui.KEY_PAGE_DOWN = 61 tram.ui.KEY_HOME = 62 tram.ui.KEY_END = 63 tram.ui.KEY_CAPS_LOCK = 64 tram.ui.KEY_SCROLL_LOCK = 65 tram.ui.KEY_NUM_LOCK = 66 tram.ui.KEY_PRINT_SCREEN = 67 tram.ui.KEY_PAUSE = 68 tram.ui.KEY_F1 = 69 tram.ui.KEY_F2 = 70 tram.ui.KEY_F3 = 71 tram.ui.KEY_F4 = 72 tram.ui.KEY_F5 = 73 tram.ui.KEY_F6 = 74 tram.ui.KEY_F7 = 75 tram.ui.KEY_F8 = 76 tram.ui.KEY_F9 = 77 tram.ui.KEY_F10 = 78 tram.ui.KEY_F11 = 79 tram.ui.KEY_F12 = 80 tram.ui.KEY_F13 = 81 tram.ui.KEY_F14 = 82 tram.ui.KEY_F15 = 83 tram.ui.KEY_F16 = 84 tram.ui.KEY_F17 = 85 tram.ui.KEY_F18 = 86 tram.ui.KEY_F19 = 87 tram.ui.KEY_F20 = 88 tram.ui.KEY_F21 = 89 tram.ui.KEY_F22 = 90 tram.ui.KEY_F23 = 91 tram.ui.KEY_F24 = 92 tram.ui.KEY_F25 = 93 tram.ui.KEY_KP_0 = 94 tram.ui.KEY_KP_1 = 95 tram.ui.KEY_KP_2 = 96 tram.ui.KEY_KP_3 = 97 tram.ui.KEY_KP_4 = 98 tram.ui.KEY_KP_5 = 99 tram.ui.KEY_KP_6 = 100 tram.ui.KEY_KP_7 = 101 tram.ui.KEY_KP_8 = 102 tram.ui.KEY_KP_9 = 103 tram.ui.KEY_KP_DECIMAL = 104 tram.ui.KEY_KP_DIVIDE = 105 tram.ui.KEY_KP_MULTIPLY = 106 tram.ui.KEY_KP_SUBTRACT = 107 tram.ui.KEY_KP_ADD = 108 tram.ui.KEY_KP_ENTER = 109 tram.ui.KEY_KP_EQUAL = 110 tram.ui.KEY_LEFT_SHIFT = 111 tram.ui.KEY_LEFT_CONTROL = 112 tram.ui.KEY_LEFT_ALT = 113 tram.ui.KEY_LEFT_SUPER = 114 tram.ui.KEY_RIGHT_SHIFT = 115 tram.ui.KEY_RIGHT_CONTROL = 116 tram.ui.KEY_RIGHT_ALT = 117 tram.ui.KEY_RIGHT_SUPER = 118 tram.ui.KEY_MENU = 119 tram.ui.KEY_RIGHTMOUSE = 120 tram.ui.KEY_LEFTMOUSE = 121 tram.ui.KEY_MIDDLEMOUSE = 122 tram.ui.KEY_MOUSE_X = 0 tram.ui.KEY_MOUSE_Y = 1 tram.ui.KEY_MOUSE_SCROLL = 2 tram.ui.STATE_DEFAULT = 0 tram.ui.STATE_NO_INPUT = 1 tram.ui.STATE_FLYING = 2 tram.ui.STATE_MENU_OPEN = 3 tram.ui.STATE_CURSOR = 4 tram.ui.KEY_ACTION_NONE = tram.ui.GetKeyboardAction("none") tram.ui.KEY_ACTION_FORWARD = tram.ui.GetKeyboardAction("forward") tram.ui.KEY_ACTION_BACKWARD = tram.ui.GetKeyboardAction("backward") tram.ui.KEY_ACTION_STRAFE_LEFT = tram.ui.GetKeyboardAction("strafe-left") tram.ui.KEY_ACTION_STRAFE_RIGHT = tram.ui.GetKeyboardAction("strafe-right") tram.ui.KEY_ACTION_UP = tram.ui.GetKeyboardAction("up") tram.ui.KEY_ACTION_DOWN = tram.ui.GetKeyboardAction("down") tram.ui.KEY_ACTION_LEFT = tram.ui.GetKeyboardAction("left") tram.ui.KEY_ACTION_RIGHT = tram.ui.GetKeyboardAction("right") tram.ui.KEY_ACTION_JUMP = tram.ui.GetKeyboardAction("jump") tram.ui.KEY_ACTION_CROUCH = tram.ui.GetKeyboardAction("crouch") tram.ui.KEY_ACTION_SPRINT = tram.ui.GetKeyboardAction("sprint") tram.ui.KEY_ACTION_FLY = tram.ui.GetKeyboardAction("fly") tram.ui.KEY_ACTION_ACTIVATE = tram.ui.GetKeyboardAction("activate") tram.ui.KEY_ACTION_PRIMARY = tram.ui.GetKeyboardAction("primary") tram.ui.KEY_ACTION_SECONDARY = tram.ui.GetKeyboardAction("secondary") tram.ui.CURSOR_DEFAULT = 12 tram.ui.CURSOR_TEXT = 12 tram.ui.CURSOR_CLICK = 12 -- ============================ FRAMEWORK/TYPE.H ============================ -- -- ------------------------------- CONSTANTS ------------------------------- -- tram.type.UNDEFINED = 0 tram.type.BOOL = 1 tram.type.NAME = 2 tram.type.STRING = 3 tram.type.INT8 = 4 tram.type.INT16 = 5 tram.type.INT32 = 6 tram.type.UINT8 = 7 tram.type.UINT16 = 8 tram.type.UINT32 = 9 tram.type.FLOAT32 = 10 tram.type.VEC2 = 11 tram.type.VEC3 = 12 tram.type.VEC4 = 13 tram.type.QUAT = 14 -- =========================== FRAMEWORK/RESOURCE.H ========================= -- -- ------------------------------- CONSTANTS ------------------------------- -- tram.resource.UNLOADED = 0 tram.resource.LOADED = 1 tram.resource.READY = 2 -- ========================== FRAMEWORK/WORLDCELL.H ========================= -- tram._metatable_worldcell = { __index = { GetName = function(self) return __impl_worldcell_get_name(self.index) end, LoadFromDisk = function(self) __impl_worldcell_loadfromdisk(self.index) end, Load = function(self) __impl_worldcell_load(self.index) end, Unload = function(self) __impl_worldcell_unload(self.index) end, Link = function(self, other) assert(getmetatable(other) == tram._metatable_worldcell) __impl_worldcell_link(self.index, other.index) end, IsLoaded = function(self) return __impl_worldcell_is_loaded(self.index) end, IsInterior = function(self) return __impl_worldcell_is_interior(self.index) end, HasInteriorLighting = function(self) return __impl_worldcell_has_interior_lighting(self.index) end, HasAutomaticLoading = function(self) return __impl_worldcell_has_automatic_loading(self.index) end, SetInterior = function(self, is) return __impl_worldcell_set_interior(self.index, is) end, SetInteriorLighting = function(self, is) return __impl_worldcell_set_interior_lighting(self.index, is) end, SetAutomaticLoading = function(self, is) return __impl_worldcell_set_automatic_loading(self.index, is) end } } function tram.worldcell.Make(name) local worldcell_index = __impl_worldcell_make(name) if (worldcell_index == -1) then return nil end local worldcell = {} worldcell.index = worldcell_index setmetatable(worldcell, tram._metatable_worldcell) return worldcell end function tram.worldcell.Find(name) local worldcell_index = __impl_worldcell_find(name) if (worldcell_index == -1) then return nil end local worldcell = {} worldcell.index = worldcell_index setmetatable(worldcell, tram._metatable_worldcell) return worldcell end -- ============================== AUDIO/AUDIO.H ============================= -- function tram.audio.SetVolume(volume) return __impl_audio_set_volume(name) end function tram.audio.GetVolume(volume) return __impl_audio_get_volume(name) end function tram.audio.SetListenerPosition(position) return __impl_audio_set_listener_position(position) end function tram.audio.SetListenerOrientation(orientation) return __impl_audio_set_listener_orientation(orientation) end -- ============================ PHYSICS/PHYSICS.H =========================== -- function tram.physics.shape.Sphere(radius) local shape = {} shape.shape = tram.physics.shape.SPHERE shape.radius = radius return shape end function tram.physics.shape.Cylinder(radius, height) local shape = {} shape.shape = tram.physics.shape.CYLINDER shape.radius = radius shape.height = height return shape end function tram.physics.shape.Capsule(radius, height) local shape = {} shape.shape = tram.physics.shape.CAPSULE shape.radius = radius shape.height = height return shape end function tram.physics.shape.Cone(radius, height) local shape = {} shape.shape = tram.physics.shape.CONE shape.radius = radius shape.height = height return shape end function tram.physics.shape.Box(dimensions) local shape = {} shape.shape = tram.physics.shape.BOX shape.dimensions = dimensions return shape end function tram.physics.shape.Hull(points) local shape = {} shape.shape = tram.physics.shape.HULL shape.points = points return shape end function tram.physics.shape.Mesh(triangles) local shape = {} shape.shape = tram.physics.shape.MESH shape.triangles = triangles return shape end function tram.physics.shape._build(mesh) if mesh.shape == tram.physics.shape.SPHERE then __impl_physics_collision_set_sphere(shape.radius) elseif mesh.shape == tram.physics.shape.CYLINDER then __impl_physics_collision_set_cylinder(shape.radius, shape.height) elseif mesh.shape == tram.physics.shape.CAPSULE then __impl_physics_collision_set_capsule(shape.radius, shape.height) elseif mesh.shape == tram.physics.shape.CONE then __impl_physics_collision_set_cone(shape.radius, shape.height) elseif mesh.shape == tram.physics.shape.BOX then __impl_physics_collision_set_box(shape.dimensions) elseif mesh.shape == tram.physics.shape.HULL then __impl_physics_collision_set_hull() for point in mesh.points do print("adding point:", point) __impl_physics_collision_append_point(point) end elseif mesh.shape == tram.physics.shape.MESH then __impl_physics_collision_set_mesh() for triangle in mesh.triangles do print("adding triangle:", triangle[1], triangle[2], triangle[3]) __impl_physics_collision_append_triangle(triangle[1], triangle[2], triangle[3]) end end end -- ------------------------------- CONSTANTS ------------------------------- -- tram.physics.shape.SPHERE = 0 tram.physics.shape.CYLINDER = 1 tram.physics.shape.CAPSULE = 2 tram.physics.shape.CONE = 3 tram.physics.shape.BOX = 4 tram.physics.shape.HULL = 5 tram.physics.shape.MESH = 6 -- ========================= PHYSICS/COLLISIONMODEL.H ======================= -- tram.physics._metatable_collisionmodel = { __index = { GetName = function(self) return __impl_physics_collisionmodel_get_name(self.index) end } } function tram.physics.model.Find(name) local model_index = __impl_physics_collisionmodel_find(name) if (model_index == -1) then return nil end local model = {} model.index = model_index setmetatable(model, tram.render._metatable_collisionmodel) return model end -- ============================= RENDER/RENDER.H ============================ -- function tram.render.SetSunDirection(direction, layer) __impl_render_set_sun_direction(direction, layer) end function tram.render.SetSunColor(color, layer) __impl_render_set_sun_color(color, layer) end function tram.render.SetAmbientColor(color, layer) __impl_render_set_ambient_color(color, layer) end function tram.render.SetFogDistance(near, far, layer) __impl_render_set_fog_distance(near, far, layer) end function tram.render.SetFogColor(color, layer) __impl_render_set_fog_color(color, layer) end function tram.render.SetScreenClearColor(color) __impl_render_set_screen_clear_color(color) end function tram.render.SetViewFov(fov, layer) __impl_render_set_view_fov(fov, layer) end function tram.render.SetViewDistance(distance, layer) __impl_render_set_view_distance(distance, layer) end function tram.render.SetViewPosition(direction, layer) __impl_render_set_view_position(direction, layer) end function tram.render.SetViewRotation(direction, layer) __impl_render_set_view_rotation(direction, layer) end function tram.render.GetViewPosition(layer) return __impl_render_get_view_position(layer) end function tram.render.GetViewRotation(layer) return __impl_render_get_view_rotation(layer) end function tram.render.AddLine(from, to, color) __impl_render_add_line(from, to, color) end function tram.render.AddLineMarker(position, color) __impl_render_add_line_marker(position, color) end -- ------------------------------- CONSTANTS ------------------------------- -- tram.render.COLOR_WHITE = tram.math.vec3(1.0, 1.0, 1.0) tram.render.COLOR_RED = tram.math.vec3(1.0, 0.0, 0.0) tram.render.COLOR_GREEN = tram.math.vec3(0.0, 1.0, 0.0) tram.render.COLOR_BLUE = tram.math.vec3(0.0, 0.0, 1.0) tram.render.COLOR_YELLOW = tram.math.vec3(1.0, 1.0, 0.0) tram.render.COLOR_PINK = tram.math.vec3(1.0, 0.0, 1.0) tram.render.COLOR_CYAN = tram.math.vec3(0.0, 1.0, 1.0) tram.render.COLOR_BLACK = tram.math.vec3(0.0, 0.0, 0.0) tram.render.COLOR_GRAY = tram.math.vec3(0.3, 0.3, 0.3) -- =========================== RENDER/ANIMATION.H =========================== -- -- TODO: implement the rest of the stuff tram.render._metatable_animation = { __index = { GetName = function(self) return __impl_render_animation_get_name(self.index) end, Load = function(self) return __impl_render_animation_load(self.index) end, } } function tram.render.animation.Find(name) local animation_index = __impl_render_animation_find(name) if (animation_index == -1) then return nil end local animation = {} animation.index = animation_index setmetatable(animation, tram.render._metatable_animation) return animation end -- ============================= RENDER/MODEL.H ============================= -- tram.render._metatable_model = { __index = { GetName = function(self) return __impl_render_model_get_name(self.index) end, AddReference = function(self) __impl_render_model_add_reference(self.index) end, RemoveReference = function(self) __impl_render_model_remove_reference(self.index) end, Load = function(self) __impl_render_model_load(self.index) end, GetAABBMin = function(self) return __impl_render_model_get_aabb_min(self.index) end, GetAABBMax = function(self) return __impl_render_model_get_aabb_max(self.index) end, GetNearDistance = function(self) return __impl_render_model_get_near_distance(self.index) end, GetFarDistance = function(self) return __impl_render_model_get_far_distance(self.index) end, SetNearDistance = function(self, dist) __impl_render_model_set_near_distance(self.index, dist) end, SetFarDistance = function(self, dist) __impl_render_model_set_far_distance(self.index, dist) end } } function tram.render.model.Find(name) local model_index = __impl_render_model_find(name) if (model_index == -1) then return nil end local model = {} model.index = model_index setmetatable(model, tram.render._metatable_model) return model end -- ============================ RENDER/MATERIAL.H =========================== -- -- TODO: implement the rest of the stuff tram.render._metatable_material = { __index = { GetName = function(self) return __impl_render_material_get_name(self.index) end } } function tram.render.material.Find(name) local material_index = __impl_render_material_find(name) if (material_index == -1) then return nil end local material = {} material.index = material_index setmetatable(material, tram.render._metatable_material) return material end -- ============================= RENDER/SPRITE.H ============================ -- -- TODO: implement the rest of the stuff tram.render._metatable_sprite = { __index = { GetName = function(self) return __impl_render_sprite_get_name(self.index) end } } function tram.render.sprite.Find(name) local sprite_index = __impl_render_sprite_find(name) if (sprite_index == -1) then return nil end local sprite = {} sprite.index = sprite_index setmetatable(sprite, tram.render._metatable_sprite) return sprite end -- COMPONENTS COPMPOENNE TSCOMPONENTS CPOMNKPOEN TS COMPONETS tram.render._metatable_rendercomponent = { __index = { GetModel = function(self) local material = {} material.index = __impl_components_render_get_model(self.index) setmetatable(material, tram.render._metatable_material) return material end, SetModel = function(self, model) if getmetatable(model) ~= tram.render._metatable_model then model = tram.render.model.Find(model) end __impl_components_render_set_model(self.index, model.index) end, SetLightmap = function(self, material) if getmetatable(material) ~= tram.render._metatable_material then material = tram.render.material.Find(material) end __impl_components_render_set_lightmap(self.index, material.index) end, SetArmature = function(self, armature) assert(getmetatable(armature) == tram.render._metatable_animationcomponent, "SetArmature() accepts only AnimationComponents.") __impl_components_set_armature(self.index, armature.index) --error("RenderComponent SetArmature not implemented!") end, GetLocation = function(self) local vector = __impl_components_render_get_location(self.index) setmetatable(vector, tram.math._metatable_vec3) return vector end, GetRotation = function(self) local vector = __impl_components_render_get_rotation(self.index) setmetatable(vector, tram.math._metatable_quat) return vector end, SetLocation = function(self, location) return __impl_components_render_set_location(self.index, location) end, SetRotation = function(self, rotation) return __impl_components_render_set_rotation(self.index, rotation) end, SetScale = function(self, scale) return __impl_components_render_set_scale(self.index, scale) end, SetColor = function(self, color) return __impl_components_render_set_color(self.index, color) end, SetLayer = function(self, layer) return __impl_components_render_set_layer(self.index, layer) end, SetTextureOffset = function(self, material, offset) error("RenderComponent SetTextureOffset not implemented!") end, SetLineDrawingMode = function(self, enabled) return __impl_components_render_set_line_drawing_mode(self.index, enabled) end, SetDirectionalLight = function(self, enabled) return __impl_components_render_set_directional_light(self.index, enabled) end, Init = function(self) __impl_components_render_init(self.index) end, Delete = function(self) __impl_components_render_delete(self.index) self.index = nil end } } function tram.components.Render() local component_index = __impl_components_render_make() if (component_index == -1) then return nil end local component = {} component.index = component_index setmetatable(component, tram.render._metatable_rendercomponent) return component end tram.render._metatable_lightcomponent = { __index = { SetLocation = function(self, location) return __impl_components_light_set_location(self.index, location) end, SetColor = function(self, color) return __impl_components_light_set_color(self.index, color) end, SetDistance = function(self, distance) return __impl_components_light_set_distance(self.index, distance) end, SetDirection = function(self, direction) return __impl_components_light_set_direction(self.index, direction) end, SetExponent = function(self, exponent) return __impl_components_light_set_exponent(self.index, exponent) end, Init = function(self) __impl_components_light_init(self.index) end, Delete = function(self) __impl_components_light_delete(self.index) self.index = nil end } } function tram.components.Light() local component_index = __impl_components_light_make() if (component_index == -1) then return nil end local component = {} component.index = component_index setmetatable(component, tram.render._metatable_lightcomponent) return component end tram.render._animationfinishcallbacks = {} function __impl_components_animation_finish_callback(index, animation) local component = {} component.index = index setmetatable(component, tram.render._metatable_animationcomponent) tram.render._animationfinishcallbacks[index](component, animation) end tram.render._metatable_animationcomponent = { __index = { GetModel = function(self) local material = {} material.index = __impl_components_animation_get_model(self.index) setmetatable(material, tram.render._metatable_material) return material end, SetModel = function(self, model) if getmetatable(model) ~= tram.render._metatable_model then model = tram.render.model.Find(model) end __impl_components_animation_set_model(self.index, model.index) end, SetKeyframe = function(self, name, keyframe) __impl_components_animation_set_keyframe(self.index, name, keyframe.location, keyframe.rotation, keyframe.scale) end, SetOnAnimationFinishCallback = function(self, name, callback) tram.render._animationfinishcallbacks[self.index] = callback __impl_components_animation_add_finish_callback(self.index) end, Play = function(self, name, repeats, weight, speed, interpolate, pause_on_last_frame) if repeats == nil then repeats = -1 end if weight == nil then weight = 1.0 end if speed == nil then speed = 1.0 end if interpolate == nil then interpolate = true end if pause_on_last_frame == nil then pause_on_last_frame = false end __impl_components_animation_play(self.index, name, repeats, weight, speed, interpolate, pause_on_last_frame) end, SetKeyframe = function(self, name, keyframe) __impl_components_animation_set_keyframe(self.index, name, keyframe.location, keyframe.rotation, keyframe.scale) end, IsPlaying = function(self, name) return __impl_components_animation_is_playing(self.index, name) end, Stop = function(self, name) __impl_components_animation_stop(self.index, name) end, Pause = function(self, name) __impl_components_animation_pause(self.index, name) end, Continue = function(self, name) __impl_components_animation_continue(self.index, name) end, SetWeight = function(self, name, weight) __impl_components_animation_set_weight(self.index, name, weight) end, SetSpeed = function(self, name, speed) __impl_components_animation_set_speed(self.index, name, speed) end, SetRepeats = function(self, name, repeats) __impl_components_animation_set_repeats(self.index, name, repeats) end, FadeIn = function(self, name, length) __impl_components_animation_fade_in(self.index, name, length) end, FadeOut = function(self, name, length) __impl_components_animation_fade_out(self.index, name, length) end, SetPause = function(self, name, pause) __impl_components_animation_set_pause(self.index, name, pause) end, SetFade = function(self, name, fade_in, fade_length) __impl_components_animation_set_fade(self.index, name, fade_in, fade_length) end, SetFrame = function(self, name, frame) __impl_components_animation_set_frame(self.index, name, frame) end, Init = function(self) __impl_components_animation_init(self.index) end, Delete = function(self) __impl_components_animation_delete(self.index) self.index = nil end } } function tram.components.Animation() local component_index = __impl_components_animation_make() if (component_index == -1) then return nil end local component = {} component.index = component_index setmetatable(component, tram.render._metatable_animationcomponent) return component end print("\nFinished loading Lua API\n\n") ================================================ FILE: scripts/bepis.lua ================================================ --print(epic_function(420)) --function give_vector(x, y, z) -- return {x, y, z} --end --tram.render.SetScreenClearColor(tram.render.COLOR_WHITE) --event = {} --event.type = tram.event.GetType("my_fancy_event") --event.subtype = 0 --event.poster = nil --event.data = nil --tram.event.Post(event) --print("VECTOR TSETS!") --vec1 = tram.math.vec3(1, 1, 1) --vec2 = tram.math.vec3(2, 2, 2) --vec3 = vec1 + vec2 --print(vec1) --print(vec2) --print(vec3) --print(vec1 + 69) --if toggle == nil then toggle = false end --toggle = not toggle --msg = {} --msg.type = tram.message.SET_ANIMATION --msg.sender = 0 --msg.receiver = tram.entity.Find("mongus"):GetID() --if toggle then -- msg.data = "mongus-jump" -- tram.message.Send(msg) --else -- msg.data = "mongus-run" -- tram.message.Send(msg) --end --mongus = tram.render.animation.Find("mongus-run") --print("mongus: ", mongus) --print("name: ", mongus:GetName()) model = tram.components.Render() model:SetModel("mongus") model:Init() player = tram.components.Animation() player:SetModel("mongus") player:Init() model:SetArmature(player) print("is playing bef ", player:IsPlaying("mongus-run")) player:Play("mongus-run", 100) print("is playing now ", player:IsPlaying("mongus-run")) tram.render.SetViewPosition(tram.math.vec3(0, 0, 0)) tram.render.SetViewPosition(tram.math.vec3(0, 0, 0), 0) tram.render.SetViewPosition(tram.math.vec3(0, 0, 0), 1) tram.render.SetViewPosition(tram.math.vec3(0, 0, 0), 2) tram.render.SetViewPosition(tram.math.vec3(0, 0, 0), 3) --tram.ui.SetInputState(tram.ui.STATE_MENU_OPEN) --tram.ui.BindKeyboardKey(tram.ui.KEY_J, tram.ui.KEY_ACTION_JUMP) --tram.ui.BindKeyboardKey(tram.ui.KEY_J, function() print("chyungine!!") end) --tram.ui.SetWindowSize(100, 500) --tram.ui.SetCursor(tram.ui.CURSOR_TEXT) --print("width:", tram.ui.GetScreenWidth()) --print("height:", tram.ui.GetScreenHeight()) ================================================ FILE: scripts/init.lua ================================================ print("\n\n\n SCRIPT INIT \n\n\n") --entity = {} --tram.entity.Init(entity) --print("ID:", entity:GetID()) --print("Name:", entity:GetName()) function crate2_c(props) props[0] = "kadbusest" crate = tram.entity.New("crate", "crate", props) crate.OnLoad = function() print("\n\n\nCRATE2 LOADING\n\n\n") end return crate:GetID() end function crate2_d() print("destructing crate 2") end model_prop = {} model_prop.type = tram.type.NAME model_prop.flag = 0 collmodel_prop = {} collmodel_prop.type = tram.type.NAME collmodel_prop.flag = 0 prop_def = {} prop_def[0] = model_prop prop_def[1] = collmodel_prop tram.entity.Register("crate", prop_def, crate2_c, crate2_d) props = {} props.id = 0 props.name = "chungus-crate" props.flags = 0 props.location = tram.math.vec3(0.0, 10.0, 0.0) props.rotation = tram.math.quat(tram.math.vec3(0.0, 0.0, 0.0)) props[0] = "crate_ligma" props[1] = "crate" crate = tram.entity.New("crate-ext", "crate", props) crate.OnLoad = function() print("Extended immortal crate. Loading...") end crate.OnMessageHandler = function(self, message) print("Message received:", tram.message.GetName(message.type)) -- do not hand kill messages over to the base class if message.type == tram.message.KILL then return false end -- allow base class to receive all other messages return true end print("it has been newed.") print("my new creat: ", crate:GetName()) print("loding now") crate:Load() print("yippee.") print("registering new event!") event = tram.event.Register("my_fancy_event") --event = tram.event.KEYPRESS print(event) print(tram.event.GetType("my_fancy_event")) print(tram.event.GetName(event)) listener = 0 countdown = 3 chamberpot = tram.components.Render() chamberpot:SetModel("chamberpot2") --chamberpot:Init() --lamp = tram.components.Light() --lamp:SetColor(tram.math.vec3(10, 10, 10)) --lamp:SetLocation(tram.math.vec3(0.1, 0.1, 0.1)) --lamp:Init() function event_function(event) print("Hello! this is an event") print("Type of this event is ", tram.event.GetName(event.type)) countdown = countdown - 1 if countdown == 0 then print("deleting!") tram.event.RemoveListener(listener) end end listener = tram.event.AddListener(event, event_function) local mark_pos = tram.math.vec3(0, 1, 0) function tick_function() crate = tram.entity.Find("nukta") if tram.ui.PollKeyboardKey(tram.ui.KEY_J) then print("JJJJJ") mark_pos = mark_pos + tram.math.vec3(0.05, 0, 0) end if tram.ui.PollKeyboardKey(tram.ui.KEY_K) then print("KKKKK") mark_pos = mark_pos - tram.math.vec3(0.05, 0, 0) end --tram.render.AddLineMarker(mark_pos, tram.render.COLOR_WHITE) local pudding = chamberpot:GetLocation() pudding.y = 3.25 + 0.5 * math.sin(tram.GetTickTime()) chamberpot:SetLocation(pudding) if crate == nil then --print("O NO WHERE CRATE") else location = crate:GetLocation() location.y = 1.25 + 0.5 * math.sin(tram.GetTickTime()) crate:SetLocation(location) --location:poot() --print(location) --rotation = crate:GetRotation() --print(rotation) --rotation = tram.math.quat(tram.math.vec3(0, tram.GetTickTime(), 0)) --print(rotation) local rotation = crate:GetRotation() local turn = tram.math.quat(tram.math.vec3(0, 0.01, 0)) --print(turn) --print(rotation) local new_rotation = rotation * turn --print(new_rotation) crate:SetRotation(new_rotation) end end tram.event.AddListener(tram.event.TICK, tick_function) ================================================ FILE: shaders/gles3/1normal_static.frag ================================================ #version 300 es precision highp float; out vec4 fragColor; in vec2 vertUV; in vec2 vertLightUV; in vec3 vertColor; flat in uint texIndex; uniform sampler2D sampler[16]; void main() { vec4 texcolor; switch (texIndex) { case 0u: texcolor = texture(sampler[0], vertUV); break; case 1u: texcolor = texture(sampler[1], vertUV); break; case 2u: texcolor = texture(sampler[2], vertUV); break; case 3u: texcolor = texture(sampler[3], vertUV); break; case 4u: texcolor = texture(sampler[4], vertUV); break; case 5u: texcolor = texture(sampler[5], vertUV); break; case 6u: texcolor = texture(sampler[6], vertUV); break; case 7u: texcolor = texture(sampler[7], vertUV); break; case 8u: texcolor = texture(sampler[8], vertUV); break; case 9u: texcolor = texture(sampler[9], vertUV); break; case 10u: texcolor = texture(sampler[10], vertUV); break; case 11u: texcolor = texture(sampler[11], vertUV); break; case 12u: texcolor = texture(sampler[12], vertUV); break; case 13u: texcolor = texture(sampler[13], vertUV); break; case 14u: texcolor = texture(sampler[14], vertUV); break; case 15u: texcolor = texture(sampler[15], vertUV); break; } fragColor = texcolor * texture(sampler[15], vertLightUV) * vec4(vertColor, 1.0); } ================================================ FILE: shaders/gles3/1normal_static.vert ================================================ #version 300 es precision highp float; layout (location = 0) in vec3 Position; layout (location = 1) in vec3 Normal; layout (location = 2) in vec2 VertUV; layout (location = 3) in vec2 VertLightUV; layout (location = 4) in uint TexIndex; layout (std140) uniform Matrices { mat4 projection; mat4 view; }; layout (std140) uniform ModelMatrices { mat4 model; uvec4 modellights; vec3 sundir; vec3 suncolor; vec4 ambientcolor; float time; float sunweight; float screenwidth; float screenheight; }; out vec2 vertUV; out vec2 vertLightUV; out vec3 vertColor; flat out uint texIndex; void main() { gl_Position = projection * view * model * vec4(Position, 1.0); vec3 nPos = normalize(vec3(model * vec4(Normal, 0.0))); vec3 lightColor = vec3(ambientcolor); lightColor += suncolor * max(dot(nPos, normalize(sundir)), 0.0); lightColor *= sunweight; vertUV = VertUV; texIndex = TexIndex; vertLightUV = VertLightUV; vertColor = lightColor + (1.0 - sunweight); } ================================================ FILE: shaders/gles3/bright_static.frag ================================================ #version 300 es // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. precision highp float; out vec4 fragment; in vec2 vert_uv; in vec2 vert_light_uv; in vec3 vert_color; flat in uint vert_tex_index; uniform sampler2D sampler[16]; void main() { vec4 texcolor; switch (vert_tex_index) { case 0u: texcolor = texture(sampler[0], vert_uv); break; case 1u: texcolor = texture(sampler[1], vert_uv); break; case 2u: texcolor = texture(sampler[2], vert_uv); break; case 3u: texcolor = texture(sampler[3], vert_uv); break; case 4u: texcolor = texture(sampler[4], vert_uv); break; case 5u: texcolor = texture(sampler[5], vert_uv); break; case 6u: texcolor = texture(sampler[6], vert_uv); break; case 7u: texcolor = texture(sampler[7], vert_uv); break; case 8u: texcolor = texture(sampler[8], vert_uv); break; case 9u: texcolor = texture(sampler[9], vert_uv); break; case 10u: texcolor = texture(sampler[10], vert_uv); break; case 11u: texcolor = texture(sampler[11], vert_uv); break; case 12u: texcolor = texture(sampler[12], vert_uv); break; case 13u: texcolor = texture(sampler[13], vert_uv); break; case 14u: texcolor = texture(sampler[14], vert_uv); break; case 15u: texcolor = texture(sampler[15], vert_uv); break; } fragment = texcolor * vec4(1.0, 1.0, 1.0, 1.0); } ================================================ FILE: shaders/gles3/glyph.frag ================================================ #version 300 es // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. precision highp float; out vec4 fragment; in vec2 vert_uv; in vec3 vert_color; flat in uint vert_tex_index; uniform sampler2D sampler[16]; void main() { vec4 sampled_color; switch (vert_tex_index) { case 0u: sampled_color = texture(sampler[0], vert_uv); break; case 1u: sampled_color = texture(sampler[1], vert_uv); break; case 2u: sampled_color = texture(sampler[2], vert_uv); break; case 3u: sampled_color = texture(sampler[3], vert_uv); break; case 4u: sampled_color = texture(sampler[4], vert_uv); break; case 5u: sampled_color = texture(sampler[5], vert_uv); break; case 6u: sampled_color = texture(sampler[6], vert_uv); break; case 7u: sampled_color = texture(sampler[7], vert_uv); break; case 8u: sampled_color = texture(sampler[8], vert_uv); break; case 9u: sampled_color = texture(sampler[9], vert_uv); break; case 10u: sampled_color = texture(sampler[10], vert_uv); break; case 11u: sampled_color = texture(sampler[11], vert_uv); break; case 12u: sampled_color = texture(sampler[12], vert_uv); break; case 13u: sampled_color = texture(sampler[13], vert_uv); break; case 14u: sampled_color = texture(sampler[14], vert_uv); break; case 15u: sampled_color = texture(sampler[15], vert_uv); break; } if (sampled_color.w < 1.0) discard; fragment = sampled_color * vec4(vert_color, 1.0); } ================================================ FILE: shaders/gles3/glyph.vert ================================================ #version 300 es // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. precision highp float; layout (location = 0) in vec3 Position; // vertex position layout (location = 1) in vec2 TexCoord; // texture coordinate layout (location = 2) in vec3 VertColor; // vertex color layout (location = 5) in uint Texture; // texture index out vec2 vert_uv; out vec3 vert_color; flat out uint vert_tex_index; uniform sampler2D sampler[16]; layout (std140) uniform ModelMatrices { mat4 model; uvec4 model_lights; vec3 sun_direction; vec3 sun_color; vec4 ambient_color; float time; float sun_weight; float screen_width; float screen_height; vec4 colors[15]; vec4 specular[15]; }; void main() { // the Position variable actually contains the position in normal GUI // coordinates, where each unit is one pixel and the origin is in the // upper left corner. // we first need to convert these coordinates to OpenGL coordinates float pos_x = (round(Position.x) / (screen_width / 2.0)) - 1.0; float pos_y = (round(Position.y) / (screen_height / -2.0)) + 1.0; // then we compute the depth for correct ordering float depth = -0.5 - (Position.z / 128.0); // then we can output these coordinates gl_Position = vec4(pos_x, pos_y, depth, 1.0); // and scale the UVs based on the texture size ivec2 tex_size; switch (Texture) { case 0u: tex_size = textureSize(sampler[0], 0); break; case 1u: tex_size = textureSize(sampler[1], 0); break; case 2u: tex_size = textureSize(sampler[2], 0); break; case 3u: tex_size = textureSize(sampler[3], 0); break; case 4u: tex_size = textureSize(sampler[4], 0); break; case 5u: tex_size = textureSize(sampler[5], 0); break; case 6u: tex_size = textureSize(sampler[6], 0); break; case 7u: tex_size = textureSize(sampler[7], 0); break; case 8u: tex_size = textureSize(sampler[8], 0); break; case 9u: tex_size = textureSize(sampler[9], 0); break; case 10u: tex_size = textureSize(sampler[10], 0); break; case 11u: tex_size = textureSize(sampler[11], 0); break; case 12u: tex_size = textureSize(sampler[12], 0); break; case 13u: tex_size = textureSize(sampler[13], 0); break; case 14u: tex_size = textureSize(sampler[14], 0); break; case 15u: tex_size = textureSize(sampler[15], 0); break; } vert_uv = vec2(TexCoord.x/float(tex_size.x), TexCoord.y/float(-tex_size.y)); vert_color = VertColor; vert_tex_index = Texture; } ================================================ FILE: shaders/gles3/line.frag ================================================ #version 300 es // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. precision highp float; out vec4 fragment; in vec3 vert_color; void main() { fragment = vec4(vert_color, 1.0); } ================================================ FILE: shaders/gles3/line.vert ================================================ #version 300 es // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. precision highp float; layout (location = 0) in vec3 Position; // vertex positon layout (location = 1) in vec3 VertColor; // vertex color layout (std140) uniform Matrices { mat4 projection; mat4 view; vec3 view_pos; }; out vec3 vert_color; void main() { gl_Position = projection * view * vec4(Position, 1.0); vert_color = VertColor; } ================================================ FILE: shaders/gles3/normal_dynamic.frag ================================================ #version 300 es // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. precision highp float; out vec4 fragment; in vec2 vert_uv; in vec3 vert_color; flat in uint vert_tex_index; uniform sampler2D sampler[16]; void main() { vec4 texcolor; switch (vert_tex_index) { case 0u: texcolor = texture(sampler[0], vert_uv); break; case 1u: texcolor = texture(sampler[1], vert_uv); break; case 2u: texcolor = texture(sampler[2], vert_uv); break; case 3u: texcolor = texture(sampler[3], vert_uv); break; case 4u: texcolor = texture(sampler[4], vert_uv); break; case 5u: texcolor = texture(sampler[5], vert_uv); break; case 6u: texcolor = texture(sampler[6], vert_uv); break; case 7u: texcolor = texture(sampler[7], vert_uv); break; case 8u: texcolor = texture(sampler[8], vert_uv); break; case 9u: texcolor = texture(sampler[9], vert_uv); break; case 10u: texcolor = texture(sampler[10], vert_uv); break; case 11u: texcolor = texture(sampler[11], vert_uv); break; case 12u: texcolor = texture(sampler[12], vert_uv); break; case 13u: texcolor = texture(sampler[13], vert_uv); break; case 14u: texcolor = texture(sampler[14], vert_uv); break; case 15u: texcolor = texture(sampler[15], vert_uv); break; } fragment = texcolor * vec4(vert_color, 1.0); } ================================================ FILE: shaders/gles3/normal_dynamic.vert ================================================ #version 300 es // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. precision highp float; layout (location = 0) in vec3 Position; // vertex position layout (location = 1) in vec3 Normal; // vertex normal layout (location = 2) in vec2 VertUV; // vertex texture coordinate layout (location = 3) in uvec4 BoneIndex; // bone index in pose matrix list layout (location = 4) in vec4 BoneWeight; // bone weight layout (location = 5) in uint TexIndex; // texture index // what the fuck struct Light { vec4 aa; // light position vec4 bb; // light color vec4 cc; vec4 dd; }; layout (std140) uniform Matrices { mat4 projection; mat4 view; vec3 view_pos; }; layout (std140) uniform ModelMatrices { mat4 model; uvec4 model_lights; vec3 sun_direction; vec3 sun_color; vec4 ambient_color; float time; float sun_weight; float screen_width; float screen_height; vec4 colors[15]; vec4 specular[15]; }; layout (std140) uniform Lights { Light scene_lights[50]; }; layout (std140) uniform Bones { mat4 bone[30]; }; out vec3 vert_color; out vec2 vert_uv; flat out uint vert_tex_index; void main() { // transform vertex with each pose matrix vec4 posed1 = BoneWeight.x * bone[BoneIndex.x] * vec4(Position, 1.0); vec4 posed2 = BoneWeight.y * bone[BoneIndex.y] * vec4(Position, 1.0); vec4 posed3 = BoneWeight.z * bone[BoneIndex.z] * vec4(Position, 1.0); vec4 posed4 = BoneWeight.w * bone[BoneIndex.w] * vec4(Position, 1.0); // get final vertex posed position in model space vec4 posed = posed1 + posed2 + posed3 + posed4; // transform to world space gl_Position = projection * view * model * posed; // do the same, but with the normal vector vec4 normal1 = BoneWeight.x * bone[BoneIndex.x] * vec4(Normal, 1.0); vec4 normal2 = BoneWeight.y * bone[BoneIndex.y] * vec4(Normal, 1.0); vec4 normal3 = BoneWeight.z * bone[BoneIndex.z] * vec4(Normal, 1.0); vec4 normal4 = BoneWeight.w * bone[BoneIndex.w] * vec4(Normal, 1.0); // get posed normal in model space vec4 normal = normal1 + normal2 + normal3 + normal4; // get both vertex position and vertex normal into world space vec3 v = vec3(model * posed); vec3 n = normalize(vec3(model * vec4(normal.xyz, 0.0))); // light math float distance1 = length(vec3(scene_lights[model_lights.x].aa) - v); float distance2 = length(vec3(scene_lights[model_lights.y].aa) - v); float distance3 = length(vec3(scene_lights[model_lights.z].aa) - v); float distance4 = length(vec3(scene_lights[model_lights.w].aa) - v); // ambrient color light math vert_color = vec3(ambient_color); vert_color += sun_color * max(dot(n, normalize(sun_direction)), 0.0); vert_color *= sun_weight; // more light math vert_color += vec3(scene_lights[model_lights.x].bb) * max(dot(n, normalize(vec3(scene_lights[model_lights.x].aa) - v)), 0.0) * (1.0 / (1.0 + 0.09 * distance1 + 0.032 * (distance1 * distance1))); vert_color += vec3(scene_lights[model_lights.y].bb) * max(dot(n, normalize(vec3(scene_lights[model_lights.y].aa) - v)), 0.0)* (1.0 / (1.0 + 0.09 * distance2 + 0.032 * (distance2 * distance2))); vert_color += vec3(scene_lights[model_lights.z].bb) * max(dot(n, normalize(vec3(scene_lights[model_lights.z].aa) - v)), 0.0)* (1.0 / (1.0 + 0.09 * distance3 + 0.032 * (distance3 * distance3))); vert_color += vec3(scene_lights[model_lights.w].bb) * max(dot(n, normalize(vec3(scene_lights[model_lights.w].aa) - v)), 0.0)* (1.0 / (1.0 + 0.09 * distance4 + 0.032 * (distance4 * distance4))); // do specular stuff vec3 view_dir = normalize(view_pos - v); float specular1 = pow(max(dot(view_dir, reflect(-normalize(vec3(scene_lights[model_lights.x].aa) - v), n)), 0.0), specular[TexIndex].y); float specular2 = pow(max(dot(view_dir, reflect(-normalize(vec3(scene_lights[model_lights.y].aa) - v), n)), 0.0), specular[TexIndex].y); float specular3 = pow(max(dot(view_dir, reflect(-normalize(vec3(scene_lights[model_lights.z].aa) - v), n)), 0.0), specular[TexIndex].y); float specular4 = pow(max(dot(view_dir, reflect(-normalize(vec3(scene_lights[model_lights.w].aa) - v), n)), 0.0), specular[TexIndex].y); vert_color += specular[TexIndex].x * specular1 * vec3(scene_lights[model_lights.x].bb); vert_color += specular[TexIndex].x * specular2 * vec3(scene_lights[model_lights.y].bb); vert_color += specular[TexIndex].x * specular3 * vec3(scene_lights[model_lights.z].bb); vert_color += specular[TexIndex].x * specular4 * vec3(scene_lights[model_lights.w].bb); // add material color vert_color *= vec3(colors[TexIndex]); vert_uv = VertUV; vert_tex_index = TexIndex; } ================================================ FILE: shaders/gles3/normal_dynamic_alpha.frag ================================================ #version 300 es // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. precision highp float; out vec4 fragment; in vec2 vert_uv; in vec3 vert_color; flat in uint vert_tex_index; uniform sampler2D sampler[16]; void main() { switch (vert_tex_index) { case 0u: fragment = texture(sampler[0], vert_uv); break; case 1u: fragment = texture(sampler[1], vert_uv); break; case 2u: fragment = texture(sampler[2], vert_uv); break; case 3u: fragment = texture(sampler[3], vert_uv); break; case 4u: fragment = texture(sampler[4], vert_uv); break; case 5u: fragment = texture(sampler[5], vert_uv); break; case 6u: fragment = texture(sampler[6], vert_uv); break; case 7u: fragment = texture(sampler[7], vert_uv); break; case 8u: fragment = texture(sampler[8], vert_uv); break; case 9u: fragment = texture(sampler[9], vert_uv); break; case 10u: fragment = texture(sampler[10], vert_uv); break; case 11u: fragment = texture(sampler[11], vert_uv); break; case 12u: fragment = texture(sampler[12], vert_uv); break; case 13u: fragment = texture(sampler[13], vert_uv); break; case 14u: fragment = texture(sampler[14], vert_uv); break; case 15u: fragment = texture(sampler[15], vert_uv); break; } if (fragment.a < 0.5) discard; fragment *= vec4(vert_color, 1.0); } ================================================ FILE: shaders/gles3/normal_sprite.frag ================================================ #version 300 es // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. precision highp float; out vec4 fragment; in vec2 vert_uv; flat in uint vert_tex_index; uniform sampler2D sampler[16]; void main() { switch (vert_tex_index) { case 0u: fragment = texture(sampler[0], vert_uv); break; case 1u: fragment = texture(sampler[1], vert_uv); break; case 2u: fragment = texture(sampler[2], vert_uv); break; case 3u: fragment = texture(sampler[3], vert_uv); break; case 4u: fragment = texture(sampler[4], vert_uv); break; case 5u: fragment = texture(sampler[5], vert_uv); break; case 6u: fragment = texture(sampler[6], vert_uv); break; case 7u: fragment = texture(sampler[7], vert_uv); break; case 8u: fragment = texture(sampler[8], vert_uv); break; case 9u: fragment = texture(sampler[9], vert_uv); break; case 10u: fragment = texture(sampler[10], vert_uv); break; case 11u: fragment = texture(sampler[11], vert_uv); break; case 12u: fragment = texture(sampler[12], vert_uv); break; case 13u: fragment = texture(sampler[13], vert_uv); break; case 14u: fragment = texture(sampler[14], vert_uv); break; case 15u: fragment = texture(sampler[15], vert_uv); break; } if (fragment.w < 0.9) discard; } ================================================ FILE: shaders/gles3/normal_sprite.vert ================================================ #version 300 es // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. precision highp float; layout (location = 0) in vec3 Position; // vertex position layout (location = 3) in vec2 VOffset; // screen space transform layout (location = 1) in vec2 VertUV; // texture coordinates layout (location = 4) in float Verticality; // how vertical should a sprite be layout (location = 5) in uint TexIndex; // texture index layout (std140) uniform Matrices { mat4 projection; mat4 view; vec3 view_pos; }; layout (std140) uniform ModelMatrices { mat4 model; uvec4 model_lights; vec3 sun_direction; vec3 sun_color; vec4 ambient_color; float time; float sun_weight; float screen_width; float screen_height; vec4 colors[15]; vec4 specular[15]; }; out vec2 vert_uv; flat out uint vert_tex_index; void main() { vec4 screen_pos = projection * view * model * vec4(Position, 1.0); gl_Position = screen_pos + vec4(VOffset, 0.0, 0.0); vert_uv = VertUV; vert_tex_index = TexIndex; } ================================================ FILE: shaders/gles3/normal_static.frag ================================================ #version 300 es // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. precision highp float; out vec4 fragment; in vec2 vert_uv; in vec2 vert_light_uv; in vec3 vert_color; flat in uint vert_tex_index; uniform sampler2D sampler[16]; void main() { switch (vert_tex_index) { case 0u: fragment = texture(sampler[0], vert_uv); break; case 1u: fragment = texture(sampler[1], vert_uv); break; case 2u: fragment = texture(sampler[2], vert_uv); break; case 3u: fragment = texture(sampler[3], vert_uv); break; case 4u: fragment = texture(sampler[4], vert_uv); break; case 5u: fragment = texture(sampler[5], vert_uv); break; case 6u: fragment = texture(sampler[6], vert_uv); break; case 7u: fragment = texture(sampler[7], vert_uv); break; case 8u: fragment = texture(sampler[8], vert_uv); break; case 9u: fragment = texture(sampler[9], vert_uv); break; case 10u: fragment = texture(sampler[10], vert_uv); break; case 11u: fragment = texture(sampler[11], vert_uv); break; case 12u: fragment = texture(sampler[12], vert_uv); break; case 13u: fragment = texture(sampler[13], vert_uv); break; case 14u: fragment = texture(sampler[14], vert_uv); break; case 15u: fragment = texture(sampler[15], vert_uv); break; } fragment *= texture(sampler[15], vert_light_uv) * vec4(vert_color, 1.0); } ================================================ FILE: shaders/gles3/normal_static.vert ================================================ #version 300 es // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. precision highp float; layout (location = 0) in vec3 Position; // vertex position layout (location = 1) in vec3 Normal; // vertex normal layout (location = 2) in vec2 VertUV; // texture coordinate layout (location = 3) in vec2 VertLightUV; // lightmap coordinate layout (location = 4) in uint TexIndex; // texture index layout (std140) uniform Matrices { mat4 projection; mat4 view; vec3 view_pos; }; layout (std140) uniform ModelMatrices { mat4 model; uvec4 model_lights; vec3 sun_direction; vec3 sun_color; vec4 ambient_color; float time; float sun_weight; float screen_width; float screen_height; vec4 colors[15]; vec4 specular[15]; }; out vec2 vert_uv; out vec2 vert_light_uv; out vec3 vert_color; flat out uint vert_tex_index; void main() { gl_Position = projection * view * model * vec4(Position, 1.0); vec3 n = normalize(vec3(model * vec4(Normal, 0.0))); vert_color = vec3(ambient_color); vert_color += sun_color * max(dot(n, normalize(sun_direction)), 0.0); vert_color *= sun_weight; vert_color += 1.0 - sun_weight; vert_uv = VertUV; vert_tex_index = TexIndex; vert_light_uv = VertLightUV; } ================================================ FILE: shaders/gles3/normal_static_alpha.frag ================================================ #version 300 es // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. precision highp float; out vec4 fragment; in vec2 vert_uv; in vec2 vert_light_uv; in vec3 vert_color; flat in uint vert_tex_index; uniform sampler2D sampler[16]; void main() { switch (vert_tex_index) { case 0u: fragment = texture(sampler[0], vert_uv); break; case 1u: fragment = texture(sampler[1], vert_uv); break; case 2u: fragment = texture(sampler[2], vert_uv); break; case 3u: fragment = texture(sampler[3], vert_uv); break; case 4u: fragment = texture(sampler[4], vert_uv); break; case 5u: fragment = texture(sampler[5], vert_uv); break; case 6u: fragment = texture(sampler[6], vert_uv); break; case 7u: fragment = texture(sampler[7], vert_uv); break; case 8u: fragment = texture(sampler[8], vert_uv); break; case 9u: fragment = texture(sampler[9], vert_uv); break; case 10u: fragment = texture(sampler[10], vert_uv); break; case 11u: fragment = texture(sampler[11], vert_uv); break; case 12u: fragment = texture(sampler[12], vert_uv); break; case 13u: fragment = texture(sampler[13], vert_uv); break; case 14u: fragment = texture(sampler[14], vert_uv); break; case 15u: fragment = texture(sampler[15], vert_uv); break; } if (fragment.a < 0.5) discard; fragment *= texture(sampler[15], vert_light_uv) * vec4(vert_color, 1.0); } ================================================ FILE: shaders/gles3/normal_water.frag ================================================ #version 300 es // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. precision highp float; out vec4 fragment; in vec2 vert_uv; in vec2 vert_light_uv; in vec3 vert_color; flat in uint vert_tex_index; uniform sampler2D sampler[16]; void main() { switch (vert_tex_index) { case 0u: fragment = texture(sampler[0], vert_uv); break; case 1u: fragment = texture(sampler[1], vert_uv); break; case 2u: fragment = texture(sampler[2], vert_uv); break; case 3u: fragment = texture(sampler[3], vert_uv); break; case 4u: fragment = texture(sampler[4], vert_uv); break; case 5u: fragment = texture(sampler[5], vert_uv); break; case 6u: fragment = texture(sampler[6], vert_uv); break; case 7u: fragment = texture(sampler[7], vert_uv); break; case 8u: fragment = texture(sampler[8], vert_uv); break; case 9u: fragment = texture(sampler[9], vert_uv); break; case 10u: fragment = texture(sampler[10], vert_uv); break; case 11u: fragment = texture(sampler[11], vert_uv); break; case 12u: fragment = texture(sampler[12], vert_uv); break; case 13u: fragment = texture(sampler[13], vert_uv); break; case 14u: fragment = texture(sampler[14], vert_uv); break; case 15u: fragment = texture(sampler[15], vert_uv); break; } fragment *= texture(sampler[15], vert_light_uv) * vec4(vert_color, 1.0); } ================================================ FILE: shaders/gles3/poopwater_static.vert ================================================ #version 300 es // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. precision highp float; layout (location = 0) in vec3 Position; // vertex position layout (location = 1) in vec3 Normal; // vertex normal layout (location = 2) in vec2 VertUV; // texture coordinate layout (location = 3) in vec2 VertLightUV; // lightmap coordinate layout (location = 4) in uint TexIndex; // texture index struct Light { vec4 aa; vec4 bb; vec4 cc; vec4 dd; }; layout (std140) uniform Lights { Light scene_lights[50]; }; layout (std140) uniform Matrices { mat4 projection; mat4 view; vec3 view_pos; }; layout (std140) uniform ModelMatrices { mat4 model; uvec4 model_lights; vec3 sun_direction; vec3 sun_color; vec4 ambient_color; float time; float sun_weight; float screen_width; float screen_height; vec4 colors[15]; vec4 specular[15]; }; out vec2 vert_uv; out vec2 vert_light_uv; out vec3 vert_color; flat out uint vert_tex_index; void main() { vec4 world_position = model * vec4(Position, 1.0); world_position.y += 0.1 * (sin(time + world_position.x)+1.0); gl_Position = projection * view * world_position; //vec3 n = normalize(vec3(model * vec4(Normal, 0.0))); vec3 n = vec3(model * vec4(Normal, 0.0)); vec3 v = vec3(world_position); n.x += 0.333 * sin(time + world_position.x); n = normalize(n); vert_color = vec3(ambient_color); vert_color += sun_color * max(dot(n, normalize(sun_direction)), 0.0); vert_color *= sun_weight; vert_color += 1.0 - sun_weight; vec3 view_dir = normalize(view_pos - v); float specular1 = pow(max(dot(view_dir, reflect(-normalize(vec3(scene_lights[model_lights.x].aa) - v), n)), 0.0), specular[TexIndex].y); float specular2 = pow(max(dot(view_dir, reflect(-normalize(vec3(scene_lights[model_lights.y].aa) - v), n)), 0.0), specular[TexIndex].y); float specular3 = pow(max(dot(view_dir, reflect(-normalize(vec3(scene_lights[model_lights.z].aa) - v), n)), 0.0), specular[TexIndex].y); float specular4 = pow(max(dot(view_dir, reflect(-normalize(vec3(scene_lights[model_lights.w].aa) - v), n)), 0.0), specular[TexIndex].y); vert_color += specular[TexIndex].x * specular1 * vec3(scene_lights[model_lights.x].bb); vert_color += specular[TexIndex].x * specular2 * vec3(scene_lights[model_lights.y].bb); vert_color += specular[TexIndex].x * specular3 * vec3(scene_lights[model_lights.z].bb); vert_color += specular[TexIndex].x * specular4 * vec3(scene_lights[model_lights.w].bb); vert_uv = VertUV + 0.1 * vec2(sin(time + 0.351 * world_position.x), cos(time + 0.351 * world_position.z)); vert_tex_index = TexIndex; vert_light_uv = VertLightUV; } ================================================ FILE: shaders/gles3/text.frag ================================================ #version 300 es precision highp float; out vec4 fragColor; in vec2 vertUV; in vec3 color; in vec2 cscale; in float thick; flat in uint texindex; uniform sampler2D sampler[16]; void main() { /*vec4 t = texture(sampler[texindex], vertUV); vec2 c = vec2(max(min(t.r, t.g), min(max(t.r, t.g), t.b))); float scale = min(cscale.x, cscale.y); c.y = texture(sampler[texindex], vertUV + vec2(-2.0/256.0/scale/scale, 2.0/256.0/scale/scale)).w; c = scale * (c - 0.5); c.x += thick; c = clamp(c + 0.5, 0.0, 1.0); //if (c.x == 0 || c.y == 0) discard; if (c.x == 0) discard; fragColor = vec4(mix(vec3(0.0, 0.0, 0.0), color * 2.0, c.x), 1.0);*/ fragColor = vec4(1.0, 1.0, 1.0, 1.0); } ================================================ FILE: shaders/gles3/text.vert ================================================ #version 300 es // idk if this shader is even used anymore // probably not precision highp float; layout (location = 0) in vec2 Position; layout (location = 1) in vec2 TexCoord; layout (location = 2) in vec3 VertColor; layout (location = 3) in vec2 Scale; layout (location = 4) in float Thickness; layout (location = 5) in uint Texture; out vec2 vertUV; out vec3 color; out vec2 cscale; out float thick; flat out uint texindex; void main() { gl_Position = vec4((Position.x / 320.0) - 1.0, (Position.y / -240.0) + 1.0, -0.5, 1.0); color = VertColor; vertUV = vec2(TexCoord.x / 256.0, TexCoord.y / -256.0); cscale = Scale; texindex = Texture; thick = Thickness; } ================================================ FILE: shaders/opengl4/glyph.frag ================================================ // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. #version 400 core out vec4 fragment; in vec2 vert_uv; in vec3 vert_color; flat in uint vert_tex_index; uniform sampler2D sampler[16]; void main() { vec4 sampled_color = texture(sampler[vert_tex_index], vert_uv); if (sampled_color.w < 1.0) discard; fragment = sampled_color * vec4(vert_color, 1.0); } ================================================ FILE: shaders/opengl4/glyph.vert ================================================ // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. #version 400 core layout (location = 0) in vec3 Position; // vertex position layout (location = 1) in vec2 TexCoord; // texture coordinate layout (location = 2) in vec3 VertColor; // vertex color layout (location = 5) in uint Texture; // texture index out vec2 vert_uv; out vec3 vert_color; flat out uint vert_tex_index; uniform sampler2D sampler[16]; layout (std140) uniform ModelMatrices { mat4 model; uvec4 model_lights; vec3 sun_direction; vec3 sun_color; vec4 ambient_color; float time; float sun_weight; float screen_width; float screen_height; vec4 colors[15]; vec4 specular[15]; vec4 texture_transforms[15]; }; void main() { // the Position variable actually contains the position in normal GUI // coordinates, where each unit is one pixel and the origin is in the // upper left corner. // we first need to convert these coordinates to OpenGL coordinates float pos_x = (round(Position.x) / (screen_width / 2.0)) - 1.0; float pos_y = (round(Position.y) / (screen_height / -2.0)) + 1.0; // then we compute the depth for correct ordering float depth = -0.5 - (Position.z / 128.0); // then we can output these coordinates gl_Position = vec4(pos_x, pos_y, depth, 1.0); // and scale the UVs based on the texture size vec2 tex_size = textureSize(sampler[Texture], 0); vert_uv = vec2(TexCoord.x/tex_size.x, TexCoord.y/-tex_size.y); vert_color = VertColor; vert_tex_index = Texture; } ================================================ FILE: shaders/opengl4/line.frag ================================================ // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. #version 400 core out vec4 fragment; in vec3 vert_color; void main() { fragment = vec4(vert_color, 1.0); } ================================================ FILE: shaders/opengl4/line.vert ================================================ // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. #version 400 core layout (location = 0) in vec3 Position; // vertex positon layout (location = 1) in vec3 VertColor; // vertex color layout (std140) uniform Matrices { mat4 projection; mat4 view; vec3 view_pos; }; out vec3 vert_color; void main() { gl_Position = projection * view * vec4(Position, 1.0); vert_color = VertColor; } ================================================ FILE: shaders/opengl4/normal_dynamic.frag ================================================ // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. #version 400 core out vec4 fragment; in vec2 vert_uv; in vec3 vert_color; in vec3 vert_color_add; in vec3 vert_reflection; in float vert_reflectivity; flat in uint vert_tex_index; uniform sampler2D sampler[16]; void main() { fragment = texture(sampler[vert_tex_index], vert_uv) * vec4(vert_color, 1.0); //fragment = vec4(0.0, 0.0, 0.0, 1.0); fragment += vec4(vert_color_add, 1.0); vec2 reflection_coords = vec2(vert_reflection); if (vert_reflection.z > 0.0) reflection_coords.x += 0.5; fragment += vert_reflectivity * texture(sampler[15], reflection_coords); } ================================================ FILE: shaders/opengl4/normal_dynamic.vert ================================================ // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. #version 400 core layout (location = 0) in vec3 Position; // vertex position layout (location = 1) in vec3 Normal; // vertex normal layout (location = 2) in vec2 VertUV; // vertex texture coordinate layout (location = 3) in ivec4 BoneIndex; // bone index in pose matrix list layout (location = 4) in vec4 BoneWeight; // bone weight layout (location = 5) in uint TexIndex; // texture index // what the fuck struct Light { vec4 aa; // light position vec4 bb; // light color vec4 cc; vec4 dd; }; layout (std140) uniform Matrices { mat4 projection; mat4 view; vec3 view_pos; }; layout (std140) uniform ModelMatrices { mat4 model; uvec4 model_lights; vec3 sun_direction; vec3 sun_color; vec4 ambient_color; float time; float sun_weight; float screen_width; float screen_height; vec4 colors[15]; vec4 specular[15]; vec4 texture_transforms[15]; vec3 l00; vec3 l1m1; vec3 l10; vec3 l11; vec3 l2m2; vec3 l2m1; vec3 l20; vec3 l21; vec3 l22; }; layout (std140) uniform Lights { Light scene_lights[50]; }; layout (std140) uniform Bones { mat4 bone[30]; }; out vec3 vert_color; out vec3 vert_color_add; out vec2 vert_uv; out vec3 vert_reflection; out float vert_reflectivity; flat out uint vert_tex_index; // spherical harmonic consts // http://graphics.stanford.edu/papers/envmap/envmap.pdf const float c1 = 0.429043; const float c2 = 0.511664; const float c3 = 0.743125; const float c4 = 0.886227; const float c5 = 0.247708; void main() { // transform vertex with each pose matrix vec4 posed1 = BoneWeight.x * bone[BoneIndex.x] * vec4(Position, 1.0); vec4 posed2 = BoneWeight.y * bone[BoneIndex.y] * vec4(Position, 1.0); vec4 posed3 = BoneWeight.z * bone[BoneIndex.z] * vec4(Position, 1.0); vec4 posed4 = BoneWeight.w * bone[BoneIndex.w] * vec4(Position, 1.0); // get final vertex posed position in model space vec4 posed = posed1 + posed2 + posed3 + posed4; // transform to world space gl_Position = projection * view * model * posed; // do the same, but with the normal vector vec4 normal1 = BoneWeight.x * bone[BoneIndex.x] * vec4(Normal, 1.0); vec4 normal2 = BoneWeight.y * bone[BoneIndex.y] * vec4(Normal, 1.0); vec4 normal3 = BoneWeight.z * bone[BoneIndex.z] * vec4(Normal, 1.0); vec4 normal4 = BoneWeight.w * bone[BoneIndex.w] * vec4(Normal, 1.0); // get posed normal in model space vec4 normal = normal1 + normal2 + normal3 + normal4; // get both vertex position and vertex normal into world space vec3 v = vec3(model * posed); vec3 n = normalize(vec3(model * vec4(normal.xyz, 0.0))); // calculate distances to light sources float distance1 = length(vec3(scene_lights[model_lights.x].aa) - v); float distance2 = length(vec3(scene_lights[model_lights.y].aa) - v); float distance3 = length(vec3(scene_lights[model_lights.z].aa) - v); float distance4 = length(vec3(scene_lights[model_lights.w].aa) - v); // calculate vertex -> light vectors vec3 v_to_light1 = normalize(vec3(scene_lights[model_lights.x].aa) - v); vec3 v_to_light2 = normalize(vec3(scene_lights[model_lights.y].aa) - v); vec3 v_to_light3 = normalize(vec3(scene_lights[model_lights.z].aa) - v); vec3 v_to_light4 = normalize(vec3(scene_lights[model_lights.w].aa) - v); // calculate light attenuation by distance float attenuation1 = max(dot(n, v_to_light1), 0.0) * (1.0 / (1.0 + 0.09 * distance1 + 0.032 * (distance1 * distance1))); float attenuation2 = max(dot(n, v_to_light2), 0.0) * (1.0 / (1.0 + 0.09 * distance2 + 0.032 * (distance2 * distance2))); float attenuation3 = max(dot(n, v_to_light3), 0.0) * (1.0 / (1.0 + 0.09 * distance3 + 0.032 * (distance3 * distance3))); float attenuation4 = max(dot(n, v_to_light4), 0.0) * (1.0 / (1.0 + 0.09 * distance4 + 0.032 * (distance4 * distance4))); float directionality1 = clamp(pow(max(dot(vec3(scene_lights[model_lights.x].cc), -v_to_light1), 0.0), scene_lights[model_lights.x].cc.w), 0.0, 1.0); float directionality2 = clamp(pow(max(dot(vec3(scene_lights[model_lights.y].cc), -v_to_light2), 0.0), scene_lights[model_lights.y].cc.w), 0.0, 1.0); float directionality3 = clamp(pow(max(dot(vec3(scene_lights[model_lights.z].cc), -v_to_light3), 0.0), scene_lights[model_lights.z].cc.w), 0.0, 1.0); float directionality4 = clamp(pow(max(dot(vec3(scene_lights[model_lights.w].cc), -v_to_light4), 0.0), scene_lights[model_lights.w].cc.w), 0.0, 1.0); // take in ambient color and add sun color vert_color = vec3(ambient_color); vert_color += sun_color * max(dot(n, normalize(sun_direction)), 0.0); vert_color *= sun_weight; // add in light probe lights vert_color += c1 * l22 * (n.x * n.x - n.y * n.y) + c3 * l20 * n.z * n.z + c4 * l00 - c5 * l20 + 2.0 * c1 * (l2m2 * n.x * n.y + l21 * n.x * n.z + l2m1 * n.y * n.z) + 2.0 * c2 * (l11 * n.x + l1m1 * n.y + l10 * n.z); // add in light colors vert_color += vec3(scene_lights[model_lights.x].bb) * attenuation1 * directionality1; vert_color += vec3(scene_lights[model_lights.y].bb) * attenuation2 * directionality2; vert_color += vec3(scene_lights[model_lights.z].bb) * attenuation3 * directionality3; vert_color += vec3(scene_lights[model_lights.w].bb) * attenuation4 * directionality4; // calculate specular intensities vec3 view_dir = normalize(view_pos - v); float specular1 = pow(max(dot(view_dir, reflect(-normalize(vec3(scene_lights[model_lights.x].aa) - v), n)), 0.0), specular[TexIndex].y); float specular2 = pow(max(dot(view_dir, reflect(-normalize(vec3(scene_lights[model_lights.y].aa) - v), n)), 0.0), specular[TexIndex].y); float specular3 = pow(max(dot(view_dir, reflect(-normalize(vec3(scene_lights[model_lights.z].aa) - v), n)), 0.0), specular[TexIndex].y); float specular4 = pow(max(dot(view_dir, reflect(-normalize(vec3(scene_lights[model_lights.w].aa) - v), n)), 0.0), specular[TexIndex].y); // calculate specular color vec3 specular_color = vec3(0.0, 0.0, 0.0); specular_color += specular[TexIndex].x * specular1 * vec3(scene_lights[model_lights.x].bb) * directionality1; specular_color += specular[TexIndex].x * specular2 * vec3(scene_lights[model_lights.y].bb) * directionality2; specular_color += specular[TexIndex].x * specular3 * vec3(scene_lights[model_lights.z].bb) * directionality3; specular_color += specular[TexIndex].x * specular4 * vec3(scene_lights[model_lights.w].bb) * directionality4; // add material color vert_color *= vec3(colors[TexIndex]); // add specular color vert_color_add = mix(vec3(0.0, 0.0, 0.0), specular_color, specular[TexIndex].z); vert_color += mix(specular_color, vec3(0.0, 0.0, 0.0), specular[TexIndex].z); vec3 reflection = reflect(-view_dir, n); vert_reflection = vec3(reflection.x /4.0 + 0.25, reflection.y /2.0 + 0.5, reflection.z); vert_reflectivity = specular[TexIndex].w; vert_uv = VertUV + vec2(texture_transforms[TexIndex]); vert_tex_index = TexIndex; } ================================================ FILE: shaders/opengl4/normal_dynamic_alpha.frag ================================================ // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. #version 400 core out vec4 fragment; in vec2 vert_uv; in vec3 vert_color; in vec3 vert_color_add; flat in uint vert_tex_index; uniform sampler2D sampler[16]; void main() { fragment = texture(sampler[vert_tex_index], vert_uv); if (fragment.a < 0.5) discard; fragment *= vec4(vert_color, 1.0); fragment += vec4(vert_color_add, 1.0); } ================================================ FILE: shaders/opengl4/normal_dynamic_blend.frag ================================================ // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. #version 400 core out vec4 fragment; in vec2 vert_uv; in vec3 vert_color; in vec3 vert_color_add; flat in uint vert_tex_index; uniform sampler2D sampler[16]; void main() { fragment = texture(sampler[vert_tex_index], vert_uv); fragment *= vec4(vert_color, 1.0); fragment += vec4(vert_color_add, 0.0); } ================================================ FILE: shaders/opengl4/normal_sprite.frag ================================================ // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. #version 400 core out vec4 fragment; in vec2 vert_uv; flat in uint vert_tex_index; uniform sampler2D sampler[16]; void main() { fragment = texture(sampler[vert_tex_index], vert_uv); if (fragment.w < 0.9) discard; } ================================================ FILE: shaders/opengl4/normal_sprite.vert ================================================ // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. #version 400 core layout (location = 0) in vec3 Position; // vertex position layout (location = 3) in vec2 VOffset; // screen space transform layout (location = 1) in vec2 VertUV; // texture coordinates layout (location = 4) in float Verticality; // how vertical should a sprite be layout (location = 5) in uint TexIndex; // texture index layout (std140) uniform Matrices { mat4 projection; mat4 view; }; layout (std140) uniform ModelMatrices { mat4 model; uvec4 model_lights; vec3 sun_direction; vec3 sun_color; vec4 ambient_color; float time; float sun_weight; float screen_width; float screen_height; vec4 colors[15]; vec4 specular[15]; vec4 texture_transforms[15]; }; out vec2 vert_uv; flat out uint vert_tex_index; void main() { vec4 screen_pos = projection * view * model * vec4(Position, 1.0); gl_Position = screen_pos + vec4(VOffset, 0.0, 0.0); vert_uv = VertUV; vert_tex_index = TexIndex; } ================================================ FILE: shaders/opengl4/normal_static.frag ================================================ // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. #version 400 core out vec4 fragment; in vec2 vert_uv; in vec2 vert_light_uv; in vec3 vert_color; flat in uint vert_tex_index; uniform sampler2D sampler[16]; void main() { fragment = texture(sampler[vert_tex_index], vert_uv) * texture(sampler[15], vert_light_uv) * vec4(vert_color, 1.0); } ================================================ FILE: shaders/opengl4/normal_static.vert ================================================ // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. #version 400 core layout (location = 0) in vec3 Position; // vertex position layout (location = 1) in vec3 Normal; // vertex normal layout (location = 2) in vec2 VertUV; // texture coordinate layout (location = 3) in vec2 VertLightUV; // lightmap coordinate layout (location = 4) in uint TexIndex; // texture index layout (std140) uniform Matrices { mat4 projection; mat4 view; }; layout (std140) uniform ModelMatrices { mat4 model; uvec4 model_lights; vec3 sun_direction; vec3 sun_color; vec4 ambient_color; float time; float sun_weight; float screen_width; float screen_height; vec4 colors[15]; vec4 specular[15]; vec4 texture_transforms[15]; }; out vec2 vert_uv; out vec2 vert_light_uv; out vec3 vert_color; flat out uint vert_tex_index; void main() { gl_Position = projection * view * model * vec4(Position, 1.0); vec3 n = normalize(vec3(model * vec4(Normal, 0.0))); vert_color = vec3(ambient_color); vert_color += sun_color * max(dot(n, normalize(sun_direction)), 0.0); vert_color *= sun_weight; vert_color += 1.0 - sun_weight; // add material color vert_color *= vec3(colors[TexIndex]); vert_uv = VertUV + vec2(texture_transforms[TexIndex]); vert_tex_index = TexIndex; vert_light_uv = VertLightUV; } ================================================ FILE: shaders/opengl4/normal_static_alpha.frag ================================================ // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. #version 400 core out vec4 fragment; in vec2 vert_uv; in vec2 vert_light_uv; in vec3 vert_color; flat in uint vert_tex_index; uniform sampler2D sampler[16]; void main() { fragment = texture(sampler[vert_tex_index], vert_uv); if (fragment.a < 0.5) discard; fragment *= texture(sampler[15], vert_light_uv) * vec4(vert_color, 1.0); } ================================================ FILE: shaders/opengl4/normal_static_blend.frag ================================================ // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. #version 400 core out vec4 fragment; in vec2 vert_uv; in vec2 vert_light_uv; in vec3 vert_color; flat in uint vert_tex_index; uniform sampler2D sampler[16]; void main() { fragment = texture(sampler[vert_tex_index], vert_uv); fragment *= texture(sampler[15], vert_light_uv) * vec4(vert_color, 1.0); } ================================================ FILE: shaders/opengl4/normal_water.frag ================================================ // TRAMWAY DRIFT AND DUNGEON EXPLORATION SIMULATOR 2022 // All rights reserved. #version 400 core out vec4 fragment; in vec2 vert_uv; in vec2 vert_light_uv; in vec3 vert_color; flat in uint vert_tex_index; layout (std140) uniform ModelMatrices { mat4 model; uvec4 model_lights; vec3 sun_direction; vec3 sun_color; vec4 ambient_color; float time; float sun_weight; float screen_width; float screen_height; vec4 colors[15]; vec4 specular[15]; vec4 texture_transforms[15]; }; uniform sampler2D sampler[16]; void main() { float offse = mod(time / 5.0, 1.0); vec2 uv = vec2(vert_uv.x + offse, vert_uv.y + offse); //vec2 uv2 = vec2(vert_uv.x, vert_uv.y + mod(time.x / 60.0, 1.0)); fragment = texture(sampler[vert_tex_index], uv)/* * texture(sampler[vert_tex_index], uv2) */* texture(sampler[15], vert_light_uv) * vec4(vert_color, 1.0); // TODO: break the shader again and make water pretty } ================================================ FILE: shaders/opengl4/text.frag ================================================ #version 400 core out vec4 fragColor; in vec2 vertUV; in vec3 color; in vec2 cscale; in float thick; flat in uint texindex; uniform sampler2D sampler[16]; void main() { vec4 t = texture(sampler[texindex], vertUV); vec2 c = vec2(max(min(t.r, t.g), min(max(t.r, t.g), t.b))); float scale = min(cscale.x, cscale.y); c.y = texture(sampler[texindex], vertUV + vec2(-2.0/256.0/scale/scale, 2.0/256.0/scale/scale)).w; c = scale * (c - 0.5); c.x += thick; c = clamp(c + 0.5, 0.0, 1.0); //if (c.x == 0 || c.y == 0) discard; if (c.x == 0) discard; fragColor = vec4(mix(vec3(0.0, 0.0, 0.0), color * 2.0, c.x), 1.0); } ================================================ FILE: shaders/opengl4/text.vert ================================================ // idk if this shader is even used anymore // probably not #version 400 core layout (location = 0) in vec2 Position; layout (location = 1) in vec2 TexCoord; layout (location = 2) in vec3 VertColor; layout (location = 3) in vec2 Scale; layout (location = 4) in float Thickness; layout (location = 5) in uint Texture; out vec2 vertUV; out vec3 color; out vec2 cscale; out float thick; flat out uint texindex; void main() { gl_Position = vec4((Position.x / 320.0) - 1.0, (Position.y / -240.0) + 1.0, -0.5, 1.0); color = VertColor; vertUV = vec2(TexCoord.x / 256.0, TexCoord.y / -256.0); cscale = Scale; texindex = Texture; thick = Thickness; } ================================================ FILE: src/audio/api.h ================================================ // Tramway Drifting and Dungeon Exploration Simulator SDK Runtime #ifndef TRAM_SDK_AUDIO_API_H #define TRAM_SDK_AUDIO_API_H #include